<?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>134852</bug_id>
          
          <creation_ts>2014-07-11 23:25:33 -0700</creation_ts>
          <short_desc>[MSE] http/tests/media/media-source/mediasource-duration.html is failing.</short_desc>
          <delta_ts>2014-07-16 08:52:33 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>New Bugs</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Jer Noble">jer.noble</reporter>
          <assigned_to name="Jer Noble">jer.noble</assigned_to>
          <cc>agomez</cc>
    
    <cc>calvaris</cc>
    
    <cc>cgarcia</cc>
    
    <cc>clopez</cc>
    
    <cc>commit-queue</cc>
    
    <cc>eric.carlson</cc>
    
    <cc>esprehn+autocc</cc>
    
    <cc>glenn</cc>
    
    <cc>gustavo</cc>
    
    <cc>gyuyoung.kim</cc>
    
    <cc>ltilve</cc>
    
    <cc>menard</cc>
    
    <cc>mrobinson</cc>
    
    <cc>philipj</cc>
    
    <cc>pnormand</cc>
    
    <cc>sergio</cc>
    
    <cc>vjaquez</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1021956</commentid>
    <comment_count>0</comment_count>
    <who name="Jer Noble">jer.noble</who>
    <bug_when>2014-07-11 23:25:33 -0700</bug_when>
    <thetext>[MSE] http/tests/media/media-source/mediasource-duration.html is failing.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1021958</commentid>
    <comment_count>1</comment_count>
      <attachid>234796</attachid>
    <who name="Jer Noble">jer.noble</who>
    <bug_when>2014-07-12 00:15:31 -0700</bug_when>
    <thetext>Created attachment 234796
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1021959</commentid>
    <comment_count>2</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2014-07-12 00:17:21 -0700</bug_when>
    <thetext>Attachment 234796 did not pass style-queue:


ERROR: Source/WebCore/platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaSourceAVFObjC.mm:154:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
Total errors found: 1 in 20 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1021968</commentid>
    <comment_count>3</comment_count>
      <attachid>234800</attachid>
    <who name="Jer Noble">jer.noble</who>
    <bug_when>2014-07-12 08:16:04 -0700</bug_when>
    <thetext>Created attachment 234800
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1021969</commentid>
    <comment_count>4</comment_count>
    <who name="Jer Noble">jer.noble</who>
    <bug_when>2014-07-12 08:16:42 -0700</bug_when>
    <thetext>Fixed the gtk-wk2 EWS.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1021970</commentid>
    <comment_count>5</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2014-07-12 08:16:59 -0700</bug_when>
    <thetext>Attachment 234800 did not pass style-queue:


ERROR: Source/WebCore/platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaSourceAVFObjC.mm:154:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
Total errors found: 1 in 22 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1021971</commentid>
    <comment_count>6</comment_count>
      <attachid>234801</attachid>
    <who name="Jer Noble">jer.noble</who>
    <bug_when>2014-07-12 08:21:14 -0700</bug_when>
    <thetext>Created attachment 234801
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1021972</commentid>
    <comment_count>7</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2014-07-12 08:23:50 -0700</bug_when>
    <thetext>Attachment 234801 did not pass style-queue:


ERROR: Source/WebCore/platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaSourceAVFObjC.mm:154:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
Total errors found: 1 in 21 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1021973</commentid>
    <comment_count>8</comment_count>
      <attachid>234802</attachid>
    <who name="Jer Noble">jer.noble</who>
    <bug_when>2014-07-12 08:26:56 -0700</bug_when>
    <thetext>Created attachment 234802
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1021974</commentid>
    <comment_count>9</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2014-07-12 08:28:28 -0700</bug_when>
    <thetext>Attachment 234802 did not pass style-queue:


ERROR: Source/WebCore/platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaSourceAVFObjC.mm:154:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
Total errors found: 1 in 22 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1021975</commentid>
    <comment_count>10</comment_count>
      <attachid>234803</attachid>
    <who name="Jer Noble">jer.noble</who>
    <bug_when>2014-07-12 08:33:33 -0700</bug_when>
    <thetext>Created attachment 234803
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1021976</commentid>
    <comment_count>11</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2014-07-12 08:35:20 -0700</bug_when>
    <thetext>Attachment 234803 did not pass style-queue:


ERROR: Source/WebCore/platform/graphics/avfoundation/objc/MediaPlayerPrivateMediaSourceAVFObjC.mm:154:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
Total errors found: 1 in 22 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1021977</commentid>
    <comment_count>12</comment_count>
      <attachid>234803</attachid>
    <who name="Eric Carlson">eric.carlson</who>
    <bug_when>2014-07-12 09:19:48 -0700</bug_when>
    <thetext>Comment on attachment 234803
Patch

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

&gt; Source/WebCore/ChangeLog:131
&gt; +        (WebCore::HTMLMediaElement::parseAttribute): Do not issue an additional &apos;timeupdate&apos; event
&gt; +            after finishSeek() issues one of its own.

svn-create-patch fail: parseAttribute -&gt; mediaPlayerTimeChanged</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1022004</commentid>
    <comment_count>13</comment_count>
    <who name="Jer Noble">jer.noble</who>
    <bug_when>2014-07-12 15:40:36 -0700</bug_when>
    <thetext>Committed r171033: &lt;http://trac.webkit.org/changeset/171033&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1022733</commentid>
    <comment_count>14</comment_count>
    <who name="Carlos Alberto Lopez Perez">clopez</who>
    <bug_when>2014-07-16 08:52:33 -0700</bug_when>
    <thetext>This has caused the tests media/media-controls-invalid-url.html and media/video-fast-seek.html fail on the GTK port.

Reported here: https://bugs.webkit.org/show_bug.cgi?id=134976</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>234796</attachid>
            <date>2014-07-12 00:15:31 -0700</date>
            <delta_ts>2014-07-12 08:15:58 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-134852-20140712001512.patch</filename>
            <type>text/plain</type>
            <size>218562</size>
            <attacher name="Jer Noble">jer.noble</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTcxMDE3CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNGQ2YWZjNmE2NzdlY2Rk
ZmJlMzk3ZjYzNGUwN2FiZTZiNjM5MTczZC4uMmQ0MWNjNTE4NmE4ZjNhODdjYTJmNDlkMDlhMDVl
YzQzNzIxYmRiNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSw1ICsxLDEzMiBAQAogMjAxNC0wNy0xMSAgSmVy
IE5vYmxlICA8amVyLm5vYmxlQGFwcGxlLmNvbT4KIAorICAgICAgICBbTVNFXSBodHRwL3Rlc3Rz
L21lZGlhL21lZGlhLXNvdXJjZS9tZWRpYXNvdXJjZS1kdXJhdGlvbi5odG1sIGlzIGZhaWxpbmcu
CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMzQ4NTIK
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBGaXhlcyB0
aGUgZm9sbG93aW5nIHRlc3RzOgorICAgICAgICBodHRwL3Rlc3RzL21lZGlhL21lZGlhLXNvdXJj
ZS9tZWRpYXNvdXJjZS1jb25maWctY2hhbmdlLW1wNC1hLWJpdHJhdGUuaHRtbAorICAgICAgICBo
dHRwL3Rlc3RzL21lZGlhL21lZGlhLXNvdXJjZS9tZWRpYXNvdXJjZS1jb25maWctY2hhbmdlLW1w
NC1hdi1hdWRpby1iaXRyYXRlLmh0bWwKKyAgICAgICAgaHR0cC90ZXN0cy9tZWRpYS9tZWRpYS1z
b3VyY2UvbWVkaWFzb3VyY2UtY29uZmlnLWNoYW5nZS1tcDQtYXYtdmlkZW8tYml0cmF0ZS5odG1s
CisgICAgICAgIGh0dHAvdGVzdHMvbWVkaWEvbWVkaWEtc291cmNlL21lZGlhc291cmNlLWNvbmZp
Zy1jaGFuZ2UtbXA0LXYtYml0cmF0ZS5odG1sCisgICAgICAgIGh0dHAvdGVzdHMvbWVkaWEvbWVk
aWEtc291cmNlL21lZGlhc291cmNlLWNvbmZpZy1jaGFuZ2UtbXA0LXYtZnJhbWVyYXRlLmh0bWwK
KyAgICAgICAgaHR0cC90ZXN0cy9tZWRpYS9tZWRpYS1zb3VyY2UvbWVkaWFzb3VyY2UtZHVyYXRp
b24uaHRtbAorICAgICAgICBodHRwL3Rlc3RzL21lZGlhL21lZGlhLXNvdXJjZS9tZWRpYXNvdXJj
ZS1wbGF5Lmh0bWwKKworICAgICAgICBUaGUgcHJpbWFyeSBjaGFuZ2UgbmVjZXNzYXJ5IHRvIGZp
eCB0aGUgbWVkaWFzb3VyY2UtZHVyYXRpb24uaHRtbCB0ZXN0IHdhcyB0byBhZGQgc3VwcG9ydAor
ICAgICAgICBmb3IgZGVsYXlpbmcgdGhlIGNvbXBsZXRpb24gb2YgYSBzZWVrIG9wZXJhdGlvbiB1
bnRpbCB0aGUgSFRNTE1lZGlhRWxlbWVudCdzIHJlYWR5U3RhdGUKKyAgICAgICAgcmlzZXMgdG8g
PiBIQVZFX0NVUlJFTlRfREFUQS4gVGhpcyBpcyBhY2NvbXBsaXNoZWQgYnkgbW9kaWZ5aW5nIE1l
ZGlhU291cmNlUHJpdmF0ZSB0byBoYXZlCisgICAgICAgIHdhaXRGb3JTZWVrQ29tcGxldGVkKCkg
YW5kIHNlZWtDb21wbGV0ZWQoKSB2aXJ0dWFsIG1ldGhvZHMuIFRoZXNlIGFyZSBjYWxsZWQgYnkg
TWVkaWFTb3VyY2UKKyAgICAgICAgd2hlbiBhIHNlZWsgb3BlcmF0aW9uIHJlc3VsdHMgaW4gdGhl
IGN1cnJlbnQgdGltZSBtb3Zpbmcgb3V0c2lkZSB0aGUgY3VycmVudGx5IGJ1ZmZlcmVkIHRpbWUK
KyAgICAgICAgcmFuZ2VzLCBhbmQgd2hlbiBhbiBhcHBlbmQgb3BlcmF0aW9uIHJlc3VsdHMgaW4g
dGhlIHJlYWR5U3RhdGUgY2hhbmdpbmcsIHJlc3BlY3RpdmVseS4KKworICAgICAgICBBIG51bWJl
ciBvZiBvdGhlciBkcml2ZS1ieSBmaXhlcyB3ZXJlIG5lY2Vzc2FyeSB0byBnZXQgdGhpcyB0ZXN0
IGZ1bGx5IHBhc3NpbmcsIGFzIG5vdGVkCisgICAgICAgIGJlbG93LgorCisgICAgICAgIE1ha2Ug
dGhlIE1lZGlhU291cmNlIHRoZSBwcmltYXJ5IG93bmVyIG9mIHRoZSBtZWRpYSdzIGR1cmF0aW9u
LCByYXRoZXIgdGhhbiB0aGUgTWVkaWFTb3VyY2VQcml2YXRlLgorICAgICAgICBNb3ZlIHRoZSBN
ZWRpYVNvdXJjZVByaXZhdGVDbGllbnQgcG9pbnRlciB0byB0aGUgTWVkaWFTb3VyY2VQcml2YXRl
IGZyb20gdGhlIE1lZGlhUGxheWVyUHJpdmF0ZSwgc28KKyAgICAgICAgdGhlIE1lZGlhU291cmNl
J3MgZHVyYXRpb24gY2FuIGJlIHJldHJpZXZlZC4gIFdoaWxlIHdlJ3JlIGF0IGl0LCBkbyB0aGUg
c2FtZSB0aGluZyBmb3IgYnVmZmVyZWQuCisKKyAgICAgICAgKiBNb2R1bGVzL21lZGlhc291cmNl
L01lZGlhU291cmNlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhU291cmNlOjpNZWRpYVNv
dXJjZSk6IEluaXRpYWxpemUgbV9kdXJhdGlvbi4KKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhU291
cmNlOjpkdXJhdGlvbik6IFNpbXBsZSBhY2Nlc3Nvci4KKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlh
U291cmNlOjpzZXREdXJhdGlvbkludGVybmFsKTogQnJpbmcgJ2R1cmF0aW9uIGNoYW5nZSBhbGdv
cml0aG0nIHVwIHRvIHNwZWMuCisgICAgICAgIChXZWJDb3JlOjpNZWRpYVNvdXJjZTo6c2V0UmVh
ZHlTdGF0ZSk6IFJlc2V0IG1fZHVyYXRpb24gb24gY2xvc2UuCisgICAgICAgICogTW9kdWxlcy9t
ZWRpYXNvdXJjZS9NZWRpYVNvdXJjZS5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL01l
ZGlhU291cmNlUHJpdmF0ZS5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRh
dGlvbi9vYmpjL01lZGlhUGxheWVyUHJpdmF0ZU1lZGlhU291cmNlQVZGT2JqQy5tbToKKyAgICAg
ICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZU1lZGlhU291cmNlQVZGT2JqQzo6bG9hZCk6
IERvIG5vdCBjYWxsIHNldFByaXZhdGVBbmRPcGVuKCkuCisgICAgICAgIChXZWJDb3JlOjpNZWRp
YVBsYXllclByaXZhdGVNZWRpYVNvdXJjZUFWRk9iakM6OmR1cmF0aW9uRG91YmxlKTogUGFzcyB0
aHJvdWdoIHRvIE1lZGlhU291cmNlUHJpdmF0ZUFWRk9iakMuCisgICAgICAgIChXZWJDb3JlOjpN
ZWRpYVBsYXllclByaXZhdGVNZWRpYVNvdXJjZUFWRk9iakM6OmJ1ZmZlcmVkKTogRGl0dG8uCisg
ICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL29iamMvTWVkaWFTb3VyY2VQ
cml2YXRlQVZGT2JqQy5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlv
bi9vYmpjL01lZGlhU291cmNlUHJpdmF0ZUFWRk9iakMubW06CisgICAgICAgIChXZWJDb3JlOjpN
ZWRpYVNvdXJjZVByaXZhdGVBVkZPYmpDOjpjcmVhdGUpOiBDYWxsIHNldFByaXZhdGVBbmRPcGVu
KCkuCisgICAgICAgIChXZWJDb3JlOjpNZWRpYVNvdXJjZVByaXZhdGVBVkZPYmpDOjpNZWRpYVNv
dXJjZVByaXZhdGVBVkZPYmpDKTogU2V0IG1fY2xpZW50LgorICAgICAgICAoV2ViQ29yZTo6TWVk
aWFTb3VyY2VQcml2YXRlQVZGT2JqQzo6ZHVyYXRpb24pOiBQYXNzIHRocm91Z2ggdG8gTWVkaWFT
b3VyY2VQcml2YXRlQ2xpZW50LgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFTb3VyY2VQcml2YXRl
QVZGT2JqQzo6YnVmZmVyZWQpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhU291cmNl
UHJpdmF0ZUFWRk9iakM6OmR1cmF0aW9uQ2hhbmdlZCk6IFBhc3MgdGhyb3VnaCB0byBNZWRpYVBs
YXllclByaXZhdGVNZWRpYVNvdXJjZUFWRk9iakMuCisgICAgICAgIChXZWJDb3JlOjpNZWRpYVNv
dXJjZVByaXZhdGVBVkZPYmpDOjpzZXREdXJhdGlvbik6IERlbGV0ZWQuCisgICAgICAgICogcGxh
dGZvcm0vbW9jay9tZWRpYXNvdXJjZS9Nb2NrTWVkaWFQbGF5ZXJNZWRpYVNvdXJjZS5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpNb2NrTWVkaWFQbGF5ZXJNZWRpYVNvdXJjZTo6bG9hZCk6IERvIG5v
dCBjYWxsIHNldFByaXZhdGVBbmRPcGVuKCkuCisgICAgICAgIChXZWJDb3JlOjpNb2NrTWVkaWFQ
bGF5ZXJNZWRpYVNvdXJjZTo6YnVmZmVyZWQpOiBQYXNzIHRocm91Z2ggdG8gTW9ja01lZGlhU291
cmNlUHJpdmF0ZS4KKyAgICAgICAgKFdlYkNvcmU6Ok1vY2tNZWRpYVBsYXllck1lZGlhU291cmNl
OjpkdXJhdGlvbkRvdWJsZSk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6TW9ja01lZGlhUGxh
eWVyTWVkaWFTb3VyY2U6OmFkdmFuY2VDdXJyZW50VGltZSk6IERpdHRvLgorICAgICAgICAqIHBs
YXRmb3JtL21vY2svbWVkaWFzb3VyY2UvTW9ja01lZGlhU291cmNlUHJpdmF0ZS5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpNb2NrTWVkaWFTb3VyY2VQcml2YXRlOjpjcmVhdGUpOiBDYWxsIHNldFBy
aXZhdGVBbmRPcGVuKCkuCisgICAgICAgIChXZWJDb3JlOjpNb2NrTWVkaWFTb3VyY2VQcml2YXRl
OjpNb2NrTWVkaWFTb3VyY2VQcml2YXRlKTogU2V0IG1fY2xpZW50LgorICAgICAgICAoV2ViQ29y
ZTo6TW9ja01lZGlhU291cmNlUHJpdmF0ZTo6ZHVyYXRpb24pOiBQYXNzIHRocm91Z2ggdG8gTWVk
aWFTb3VyY2VQcml2YXRlQ2xpZW50LgorICAgICAgICAoV2ViQ29yZTo6TW9ja01lZGlhU291cmNl
UHJpdmF0ZTo6YnVmZmVyZWQpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6Ok1vY2tNZWRpYVNv
dXJjZVByaXZhdGU6OmR1cmF0aW9uQ2hhbmdlZCk6IFBhc3MgdGhvcnVnaCB0byBNb2NrTWVkaWFQ
bGF5ZXJNZWRpYVNvdXJjZS4KKyAgICAgICAgKFdlYkNvcmU6Ok1vY2tNZWRpYVNvdXJjZVByaXZh
dGU6OnNldER1cmF0aW9uKTogRGVsZXRlZC4KKworICAgICAgICBSb3V0ZSBzZWVrVG9UaW1lIHRo
cm91Z2ggTWVkaWFTb3VyY2UsIHJhdGhlciB0aGFuIHRocm91Z2ggTWVkaWFTb3VyY2VQcml2YXRl
LCBzbyB0aGF0CisgICAgICAgIHRoZSB0aW1lIGNhbiBiZSBjb21wYXJlZCBhZ2FpbnN0IHRoZSBi
dWZmZXJlZCByYW5nZXMsIGFuZCB0cmlnZ2VyIHRoZSBkZWxheSBvZiB0aGUgc2VlaworICAgICAg
ICBvcGVyYXRpb24gaWYgbmVjZXNzYXJ5LiBBZGQgYSBzZWVrVGltZXIgdG8gTWVkaWFQbGF5ZXJQ
cml2YXRlTWVkaWFTb3VyY2VBVkZPYmpDLCBhcyB0aGlzCisgICAgICAgIGd1YXJhbnRlZXMgdGhl
IG9yZGVyIG9mIGFzeW5jaHJvbm91cyBvcGVyYXRpb25zLCByYXRoZXIgdGhhbiBjYWxsT25NYWlu
VGhyZWFkLCB3aGljaCBjYW4KKyAgICAgICAgY2F1c2UgYXN5bmMgb3BlcmF0aW9ucyB0byBvY2N1
ciBvdXQgb2Ygb3JkZXIuCisKKyAgICAgICAgKiBNb2R1bGVzL21lZGlhc291cmNlL01lZGlhU291
cmNlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhU291cmNlOjpzZWVrVG9UaW1lKTogQnJp
bmcgdXAgdG8gc3BlYy4KKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhU291cmNlOjpjb21wbGV0ZVNl
ZWspOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhU291cmNlOjptb25pdG9yU291cmNl
QnVmZmVycyk6IENhbGwgY29tcGxldGVTZWVrKCkgd2hlbiBhcHByb3ByaWF0ZS4KKyAgICAgICAg
KiBNb2R1bGVzL21lZGlhc291cmNlL1NvdXJjZUJ1ZmZlci5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpTb3VyY2VCdWZmZXI6OnNvdXJjZUJ1ZmZlclByaXZhdGVTZWVrVG9UaW1lKTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OlNvdXJjZUJ1ZmZlcjo6c2Vla1RvVGltZSk6IFJlbmFtZWQgZnJv
bSBzb3VyY2VCdWZmZXJQcml2YXRlU2Vla1RvVGltZSgpLgorICAgICAgICAqIHBsYXRmb3JtL2dy
YXBoaWNzL01lZGlhU291cmNlUHJpdmF0ZS5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L01lZGlhU291cmNlUHJpdmF0ZUNsaWVudC5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L2F2Zm91bmRhdGlvbi9vYmpjL01lZGlhUGxheWVyUHJpdmF0ZU1lZGlhU291cmNlQVZGT2JqQy5o
OgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9vYmpjL01lZGlhUGxh
eWVyUHJpdmF0ZU1lZGlhU291cmNlQVZGT2JqQy5tbToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlh
UGxheWVyUHJpdmF0ZU1lZGlhU291cmNlQVZGT2JqQzo6TWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFT
b3VyY2VBVkZPYmpDKTogQWRkIHNlZWtUaW1lci4gT25seQorICAgICAgICAgICAgY2FsbCB0aW1l
Q2hhbmdlZCgpIGlmIG5vIGxvbmdlciBzZWVraW5nLCB0aGVyZWJ5IHRyaWdnZXJpbmcgYSAnc2Vl
a2VkJyBldmVudC4KKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZU1lZGlhU291
cmNlQVZGT2JqQzo6fk1lZGlhUGxheWVyUHJpdmF0ZU1lZGlhU291cmNlQVZGT2JqQyk6IENsZWFy
IG1fc2Vla1RpbWVyLgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFT
b3VyY2VBVkZPYmpDOjpzZWVrV2l0aFRvbGVyYW5jZSk6IFVzZSBtX3NlZWtUaW1lci4KKyAgICAg
ICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZU1lZGlhU291cmNlQVZGT2JqQzo6c2Vla1Rp
bWVyRmlyZWQpOiBDYWxsIHNlZWtJbnRlcm5hbC4KKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxh
eWVyUHJpdmF0ZU1lZGlhU291cmNlQVZGT2JqQzo6c2Vla0ludGVybmFsKTogQWRkIGxvZ2dpbmcu
CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVNZWRpYVNvdXJjZUFWRk9iakM6
OndhaXRGb3JTZWVrQ29tcGxldGVkKTogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBs
YXllclByaXZhdGVNZWRpYVNvdXJjZUFWRk9iakM6OnNlZWtDb21wbGV0ZWQpOiBBZGRlZDsgdHJp
Z2dlciAnc2Vla2VkJy4KKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZU1lZGlh
U291cmNlQVZGT2JqQzo6c2V0UmVhZHlTdGF0ZSk6IE5vIGxvbmdlciBhdHRlbXB0IHRvIGZpbmlz
aCBzZWVrIHdoZW4KKyAgICAgICAgICAgIHJlYWR5U3RhdGUgY2hhbmdlcyBoZXJlOyB0aGlzIGhh
cyBiZWVuIG1vdmVkIHVwIHRvIE1lZGlhU291cmNlLmNwcC4KKyAgICAgICAgKiBwbGF0Zm9ybS9n
cmFwaGljcy9hdmZvdW5kYXRpb24vb2JqYy9NZWRpYVNvdXJjZVByaXZhdGVBVkZPYmpDLmg6Cisg
ICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL29iamMvTWVkaWFTb3VyY2VQ
cml2YXRlQVZGT2JqQy5tbToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhU291cmNlUHJpdmF0ZUFW
Rk9iakM6OndhaXRGb3JTZWVrQ29tcGxldGVkKTogUGFzcyB0aHJvdWdoIHRvIE1lZGlhUGxheWVy
UHJpdmF0ZU1lZGlhU291cmNlQVZGT2JqQy4KKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhU291cmNl
UHJpdmF0ZUFWRk9iakM6OnNlZWtDb21wbGV0ZWQpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6
Ok1lZGlhU291cmNlUHJpdmF0ZUFWRk9iakM6OnNlZWtUb1RpbWUpOiBQYXNzIHRocm91Z2ggdG8g
TWVkaWFTb3VyY2VQcml2YXRlQ2xpZW50LgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFTb3VyY2VQ
cml2YXRlQVZGT2JqQzo6ZmFzdFNlZWtUaW1lRm9yTWVkaWFUaW1lKTogRGl0dG8uCisgICAgICAg
ICogcGxhdGZvcm0vbW9jay9tZWRpYXNvdXJjZS9Nb2NrTWVkaWFQbGF5ZXJNZWRpYVNvdXJjZS5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpNb2NrTWVkaWFQbGF5ZXJNZWRpYVNvdXJjZTo6TW9ja01l
ZGlhUGxheWVyTWVkaWFTb3VyY2UpOiBJbml0aWFsaXplIG1fc2Vla0NvbXBsZXRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6Ok1vY2tNZWRpYVBsYXllck1lZGlhU291cmNlOjpzZWVraW5nKTogQ2hlY2sg
Zm9yIGFuIHVuY29tcGxldGVkIHNlZWsgb3BlcmF0aW9uLiAKKyAgICAgICAgKFdlYkNvcmU6Ok1v
Y2tNZWRpYVBsYXllck1lZGlhU291cmNlOjpzZWVrV2l0aFRvbGVyYW5jZSk6IERpdHRvLgorICAg
ICAgICAoV2ViQ29yZTo6TW9ja01lZGlhUGxheWVyTWVkaWFTb3VyY2U6OndhaXRGb3JTZWVrQ29t
cGxldGVkKTogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpNb2NrTWVkaWFQbGF5ZXJNZWRpYVNv
dXJjZTo6c2Vla0NvbXBsZXRlZCk6IEFkZGVkOyB0cmlnZ2VyICdzZWVrZWQnLgorICAgICAgICAq
IHBsYXRmb3JtL21vY2svbWVkaWFzb3VyY2UvTW9ja01lZGlhUGxheWVyTWVkaWFTb3VyY2UuaDoK
KyAgICAgICAgKiBwbGF0Zm9ybS9tb2NrL21lZGlhc291cmNlL01vY2tNZWRpYVNvdXJjZVByaXZh
dGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6TW9ja01lZGlhU291cmNlUHJpdmF0ZTo6d2FpdEZv
clNlZWtDb21wbGV0ZWQpOiBQYXNzIHRocm91Z2ggdG8gTW9ja01lZGlhUGxheWVyTWVkaWFTb3Vy
Y2UuCisgICAgICAgIChXZWJDb3JlOjpNb2NrTWVkaWFTb3VyY2VQcml2YXRlOjpzZWVrQ29tcGxl
dGVkKTogRGl0dG8uCisgICAgICAgICogcGxhdGZvcm0vbW9jay9tZWRpYXNvdXJjZS9Nb2NrTWVk
aWFTb3VyY2VQcml2YXRlLmg6CisKKyAgICAgICAgRHJpdmUtYnkgZml4ZXMuCisKKyAgICAgICAg
KiBNb2R1bGVzL21lZGlhc291cmNlL01lZGlhU291cmNlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
Ok1lZGlhU291cmNlOjpzdHJlYW1FbmRlZFdpdGhFcnJvcik6IFJlLW9yZGVyIHRoZSBzdGVwcyBp
biBzdHJlYW1FbmRlZFdpdGhFcnJvcigpCisgICAgICAgICAgICB0byBhdm9pZCB0aGUgTWVkaWFT
b3VyY2UgYmVpbmcgY2xvc2VkIGFuZCByZS1vcGVuZWQgYnkgdGhlIHJlc3VsdGluZyBkdXJhdGlv
biBjaGFuZ2UKKyAgICAgICAgICAgIG9wZXJhdGlvbi4KKyAgICAgICAgKiBNb2R1bGVzL21lZGlh
c291cmNlL01lZGlhU291cmNlLmg6CisgICAgICAgICogTW9kdWxlcy9tZWRpYXNvdXJjZS9Tb3Vy
Y2VCdWZmZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U291cmNlQnVmZmVyOjpyZW1vdmUpOiBB
ZGRlZCBsb2dnaW5nLgorICAgICAgICAoV2ViQ29yZTo6U291cmNlQnVmZmVyOjpyZW1vdmVDb2Rl
ZEZyYW1lcyk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6U291cmNlQnVmZmVyOjpoYXNGdXR1
cmVUaW1lKTogU3dhcCBhbiBBU1NFUlQgZm9yIGFuIGVhcmx5LXJldHVybjsgaXQncyBwb3NzaWJs
ZQorICAgICAgICAgICAgZm9yIGN1cnJlbnRUaW1lKCkgdG8gYmUgb3V0c2lkZSBvZiBhIGJ1ZmZl
cmVkIGFyZWEuCisgICAgICAgICogTW9kdWxlcy9tZWRpYXNvdXJjZS9Tb3VyY2VCdWZmZXIuaDoK
KyAgICAgICAgKiBodG1sL0hUTUxNZWRpYUVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
SFRNTE1lZGlhRWxlbWVudDo6cGFyc2VBdHRyaWJ1dGUpOiBEbyBub3QgaXNzdWUgYW4gYWRkaXRp
b25hbCAndGltZXVwZGF0ZScgZXZlbnQKKyAgICAgICAgICAgIGFmdGVyIGZpbmlzaFNlZWsoKSBp
c3N1ZXMgb25lIG9mIGl0cyBvd24uCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3Vu
ZGF0aW9uL29iamMvU291cmNlQnVmZmVyUHJpdmF0ZUFWRk9iakMubW06CisgICAgICAgIChXZWJD
b3JlOjpnbG9iYWxEYXRhUGFyc2VyUXVldWUpOiBBbGxvdyBwYXJzaW5nIG9wZXJhdGlvbnMgdG8g
aGFwcGVuIGNvbmN1cnJlbnRseSBvbgorICAgICAgICAgICAgYmFja2dyb3VuZCBxdWV1ZXMuCisK
KzIwMTQtMDctMTEgIEplciBOb2JsZSAgPGplci5ub2JsZUBhcHBsZS5jb20+CisKICAgICAgICAg
W01TRV0gU2VwYXJhdGUgTWVkaWFTb3VyY2UgbG9nZ2luZyBpbnRvIGl0cyBvd24gbG9nIGNoYW5u
ZWwKICAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEzNDgw
OQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc291cmNlL01lZGlh
U291cmNlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzb3VyY2UvTWVkaWFTb3Vy
Y2UuY3BwCmluZGV4IDZlYTAyOTUwNjVjMjNiMzBlOTFjMzAzOWY5ZDY0MjhhODQxYWZlOTMuLjIx
MzNlNWM1M2JhNTFiNGUxY2VhYzNiZDZmNTk5MmI5NDNjNGM0NGQgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzb3VyY2UvTWVkaWFTb3VyY2UuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzb3VyY2UvTWVkaWFTb3VyY2UuY3BwCkBAIC03Niw2ICs3
Niw4IEBAIFBhc3NSZWZQdHI8TWVkaWFTb3VyY2U+IE1lZGlhU291cmNlOjpjcmVhdGUoU2NyaXB0
RXhlY3V0aW9uQ29udGV4dCYgY29udGV4dCkKIE1lZGlhU291cmNlOjpNZWRpYVNvdXJjZShTY3Jp
cHRFeGVjdXRpb25Db250ZXh0JiBjb250ZXh0KQogICAgIDogQWN0aXZlRE9NT2JqZWN0KCZjb250
ZXh0KQogICAgICwgbV9tZWRpYUVsZW1lbnQoMCkKKyAgICAsIG1fZHVyYXRpb24oc3RkOjpudW1l
cmljX2xpbWl0czxkb3VibGU+OjpxdWlldF9OYU4oKSkKKyAgICAsIG1fcGVuZGluZ1NlZWtUaW1l
KE1lZGlhVGltZTo6aW52YWxpZFRpbWUoKSkKICAgICAsIG1fcmVhZHlTdGF0ZShjbG9zZWRLZXl3
b3JkKCkpCiAgICAgLCBtX2FzeW5jRXZlbnRRdWV1ZSgqdGhpcykKIHsKQEAgLTEyOCw3ICsxMzAs
NyBAQCB2b2lkIE1lZGlhU291cmNlOjpyZW1vdmVkRnJvbVJlZ2lzdHJ5KCkKIAogZG91YmxlIE1l
ZGlhU291cmNlOjpkdXJhdGlvbigpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIGlzQ2xvc2VkKCkgPyBz
dGQ6Om51bWVyaWNfbGltaXRzPGZsb2F0Pjo6cXVpZXRfTmFOKCkgOiBtX3ByaXZhdGUtPmR1cmF0
aW9uKCkudG9Eb3VibGUoKTsKKyAgICByZXR1cm4gbV9kdXJhdGlvbjsKIH0KIAogZG91YmxlIE1l
ZGlhU291cmNlOjpjdXJyZW50VGltZSgpIGNvbnN0CkBAIC0xODAsNiArMTgyLDYwIEBAIHN0ZDo6
dW5pcXVlX3B0cjxQbGF0Zm9ybVRpbWVSYW5nZXM+IE1lZGlhU291cmNlOjpidWZmZXJlZCgpIGNv
bnN0CiAgICAgcmV0dXJuIFBsYXRmb3JtVGltZVJhbmdlczo6Y3JlYXRlKGludGVyc2VjdGlvblJh
bmdlcy0+cmFuZ2VzKCkpOwogfQogCit2b2lkIE1lZGlhU291cmNlOjpzZWVrVG9UaW1lKGNvbnN0
IE1lZGlhVGltZSYgdGltZSkKK3sKKyAgICAvLyAyLjQuMyBTZWVraW5nCisgICAgLy8gaHR0cHM6
Ly9kdmNzLnczLm9yZy9oZy9odG1sLW1lZGlhL3Jhdy1maWxlL3RpcC9tZWRpYS1zb3VyY2UvbWVk
aWEtc291cmNlLmh0bWwjbWVkaWFzb3VyY2Utc2Vla2luZworCisgICAgbV9wZW5kaW5nU2Vla1Rp
bWUgPSB0aW1lOworCisgICAgLy8gUnVuIHRoZSBmb2xsb3dpbmcgc3RlcHMgYXMgcGFydCBvZiB0
aGUgIldhaXQgdW50aWwgdGhlIHVzZXIgYWdlbnQgaGFzIGVzdGFibGlzaGVkIHdoZXRoZXIgb3Ig
bm90IHRoZQorICAgIC8vIG1lZGlhIGRhdGEgZm9yIHRoZSBuZXcgcGxheWJhY2sgcG9zaXRpb24g
aXMgYXZhaWxhYmxlLCBhbmQsIGlmIGl0IGlzLCB1bnRpbCBpdCBoYXMgZGVjb2RlZCBlbm91Z2gg
ZGF0YQorICAgIC8vIHRvIHBsYXkgYmFjayB0aGF0IHBvc2l0aW9uIiBzdGVwIG9mIHRoZSBzZWVr
IGFsZ29yaXRobToKKyAgICAvLyAxLiBUaGUgbWVkaWEgZWxlbWVudCBsb29rcyBmb3IgbWVkaWEg
c2VnbWVudHMgY29udGFpbmluZyB0aGUgbmV3IHBsYXliYWNrIHBvc2l0aW9uIGluIGVhY2ggU291
cmNlQnVmZmVyCisgICAgLy8gb2JqZWN0IGluIGFjdGl2ZVNvdXJjZUJ1ZmZlcnMuCisgICAgZm9y
IChhdXRvJiBzb3VyY2VCdWZmZXIgOiAqbV9hY3RpdmVTb3VyY2VCdWZmZXJzKSB7CisgICAgICAg
IC8vIOKGsyBJZiBvbmUgb3IgbW9yZSBvZiB0aGUgb2JqZWN0cyBpbiBhY3RpdmVTb3VyY2VCdWZm
ZXJzIGlzIG1pc3NpbmcgbWVkaWEgc2VnbWVudHMgZm9yIHRoZSBuZXcKKyAgICAgICAgLy8gcGxh
eWJhY2sgcG9zaXRpb24KKyAgICAgICAgaWYgKCFzb3VyY2VCdWZmZXItPmJ1ZmZlcmVkKCktPnJh
bmdlcygpLmNvbnRhaW4odGltZSkpIHsKKyAgICAgICAgICAgIC8vIDEuMSBTZXQgdGhlIEhUTUxN
ZWRpYUVsZW1lbnQucmVhZHlTdGF0ZSBhdHRyaWJ1dGUgdG8gSEFWRV9NRVRBREFUQS4KKyAgICAg
ICAgICAgIG1fcHJpdmF0ZS0+c2V0UmVhZHlTdGF0ZShNZWRpYVBsYXllcjo6SGF2ZU1ldGFkYXRh
KTsKKworICAgICAgICAgICAgLy8gMS4yIFRoZSBtZWRpYSBlbGVtZW50IHdhaXRzIHVudGlsIGFu
IGFwcGVuZEJ1ZmZlcigpIG9yIGFuIGFwcGVuZFN0cmVhbSgpIGNhbGwgY2F1c2VzIHRoZSBjb2Rl
ZAorICAgICAgICAgICAgLy8gZnJhbWUgcHJvY2Vzc2luZyBhbGdvcml0aG0gdG8gc2V0IHRoZSBI
VE1MTWVkaWFFbGVtZW50LnJlYWR5U3RhdGUgYXR0cmlidXRlIHRvIGEgdmFsdWUgZ3JlYXRlcgor
ICAgICAgICAgICAgLy8gdGhhbiBIQVZFX01FVEFEQVRBLgorICAgICAgICAgICAgTE9HKE1lZGlh
U291cmNlLCAiTWVkaWFTb3VyY2U6OnNlZWtUb1RpbWUoJXApIC0gd2FpdEZvclNlZWtDb21wbGV0
ZWQoKSIsIHRoaXMpOworICAgICAgICAgICAgbV9wcml2YXRlLT53YWl0Rm9yU2Vla0NvbXBsZXRl
ZCgpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIC8vIOKGsyBPdGhl
cndpc2UKKyAgICAgICAgLy8gQ29udGludWUKKyAgICB9CisKKyAgICBjb21wbGV0ZVNlZWsoKTsK
K30KKwordm9pZCBNZWRpYVNvdXJjZTo6Y29tcGxldGVTZWVrKCkKK3sKKyAgICAvLyAyLjQuMyBT
ZWVraW5nLCBjdGQuCisgICAgLy8gaHR0cHM6Ly9kdmNzLnczLm9yZy9oZy9odG1sLW1lZGlhL3Jh
dy1maWxlL3RpcC9tZWRpYS1zb3VyY2UvbWVkaWEtc291cmNlLmh0bWwjbWVkaWFzb3VyY2Utc2Vl
a2luZworCisgICAgQVNTRVJUKG1fcGVuZGluZ1NlZWtUaW1lLmlzVmFsaWQoKSk7CisKKyAgICAv
LyAyLiBUaGUgbWVkaWEgZWxlbWVudCByZXNldHMgYWxsIGRlY29kZXJzIGFuZCBpbml0aWFsaXpl
cyBlYWNoIG9uZSB3aXRoIGRhdGEgZnJvbSB0aGUgYXBwcm9wcmlhdGUKKyAgICAvLyBpbml0aWFs
aXphdGlvbiBzZWdtZW50LgorICAgIC8vIDMuIFRoZSBtZWRpYSBlbGVtZW50IGZlZWRzIGNvZGVk
IGZyYW1lcyBmcm9tIHRoZSBhY3RpdmUgdHJhY2sgYnVmZmVycyBpbnRvIHRoZSBkZWNvZGVycyBz
dGFydGluZworICAgIC8vIHdpdGggdGhlIGNsb3Nlc3QgcmFuZG9tIGFjY2VzcyBwb2ludCBiZWZv
cmUgdGhlIG5ldyBwbGF5YmFjayBwb3NpdGlvbi4KKyAgICBmb3IgKGF1dG8mIHNvdXJjZUJ1ZmZl
ciA6ICptX2FjdGl2ZVNvdXJjZUJ1ZmZlcnMpCisgICAgICAgIHNvdXJjZUJ1ZmZlci0+c2Vla1Rv
VGltZShtX3BlbmRpbmdTZWVrVGltZSk7CisKKyAgICAvLyA0LiBSZXN1bWUgdGhlIHNlZWsgYWxn
b3JpdGhtIGF0IHRoZSAiQXdhaXQgYSBzdGFibGUgc3RhdGUiIHN0ZXAuCisgICAgbV9wcml2YXRl
LT5zZWVrQ29tcGxldGVkKCk7CisKKyAgICBtX3BlbmRpbmdTZWVrVGltZSA9IE1lZGlhVGltZTo6
aW52YWxpZFRpbWUoKTsKKyAgICBtb25pdG9yU291cmNlQnVmZmVycygpOworfQorCiB2b2lkIE1l
ZGlhU291cmNlOjptb25pdG9yU291cmNlQnVmZmVycygpCiB7CiAgICAgLy8gMi40LjQgU291cmNl
QnVmZmVyIE1vbml0b3JpbmcKQEAgLTIxNyw2ICsyNzMsOSBAQCB2b2lkIE1lZGlhU291cmNlOjpt
b25pdG9yU291cmNlQnVmZmVycygpCiAgICAgICAgIC8vIDMuIFBsYXliYWNrIG1heSByZXN1bWUg
YXQgdGhpcyBwb2ludCBpZiBpdCB3YXMgcHJldmlvdXNseSBzdXNwZW5kZWQgYnkgYSB0cmFuc2l0
aW9uIHRvIEhBVkVfQ1VSUkVOVF9EQVRBLgogICAgICAgICBtX3ByaXZhdGUtPnNldFJlYWR5U3Rh
dGUoTWVkaWFQbGF5ZXI6OkhhdmVFbm91Z2hEYXRhKTsKIAorICAgICAgICBpZiAobV9wZW5kaW5n
U2Vla1RpbWUuaXNWYWxpZCgpKQorICAgICAgICAgICAgY29tcGxldGVTZWVrKCk7CisKICAgICAg
ICAgLy8gNC4gQWJvcnQgdGhlc2Ugc3RlcHMuCiAgICAgICAgIHJldHVybjsKICAgICB9CkBAIC0y
MzEsNiArMjkwLDkgQEAgdm9pZCBNZWRpYVNvdXJjZTo6bW9uaXRvclNvdXJjZUJ1ZmZlcnMoKQog
ICAgICAgICAvLyAzLiBQbGF5YmFjayBtYXkgcmVzdW1lIGF0IHRoaXMgcG9pbnQgaWYgaXQgd2Fz
IHByZXZpb3VzbHkgc3VzcGVuZGVkIGJ5IGEgdHJhbnNpdGlvbiB0byBIQVZFX0NVUlJFTlRfREFU
QS4KICAgICAgICAgbV9wcml2YXRlLT5zZXRSZWFkeVN0YXRlKE1lZGlhUGxheWVyOjpIYXZlRnV0
dXJlRGF0YSk7CiAKKyAgICAgICAgaWYgKG1fcGVuZGluZ1NlZWtUaW1lLmlzVmFsaWQoKSkKKyAg
ICAgICAgICAgIGNvbXBsZXRlU2VlaygpOworCiAgICAgICAgIC8vIDQuIEFib3J0IHRoZXNlIHN0
ZXBzLgogICAgICAgICByZXR1cm47CiAgICAgfQpAQCAtMjQ2LDcgKzMwOCwxMCBAQCB2b2lkIE1l
ZGlhU291cmNlOjptb25pdG9yU291cmNlQnVmZmVycygpCiAgICAgLy8gMy4gUGxheWJhY2sgaXMg
c3VzcGVuZGVkIGF0IHRoaXMgcG9pbnQgc2luY2UgdGhlIG1lZGlhIGVsZW1lbnQgZG9lc24ndCBo
YXZlIGVub3VnaCBkYXRhIHRvCiAgICAgLy8gYWR2YW5jZSB0aGUgbWVkaWEgdGltZWxpbmUuCiAg
ICAgbV9wcml2YXRlLT5zZXRSZWFkeVN0YXRlKE1lZGlhUGxheWVyOjpIYXZlQ3VycmVudERhdGEp
OwotICAgIAorCisgICAgaWYgKG1fcGVuZGluZ1NlZWtUaW1lLmlzVmFsaWQoKSkKKyAgICAgICAg
Y29tcGxldGVTZWVrKCk7CisKICAgICAvLyA0LiBBYm9ydCB0aGVzZSBzdGVwcy4KIH0KIApAQCAt
MjgzLDkgKzM0OCwzNyBAQCB2b2lkIE1lZGlhU291cmNlOjpzZXREdXJhdGlvbihkb3VibGUgZHVy
YXRpb24sIEV4Y2VwdGlvbkNvZGUmIGVjKQogCiB2b2lkIE1lZGlhU291cmNlOjpzZXREdXJhdGlv
bkludGVybmFsKGRvdWJsZSBkdXJhdGlvbikKIHsKLSAgICBtX3ByaXZhdGUtPnNldER1cmF0aW9u
KE1lZGlhVGltZTo6Y3JlYXRlV2l0aERvdWJsZShkdXJhdGlvbikpOwotfQorICAgIC8vIER1cmF0
aW9uIENoYW5nZSBBbGdvcml0aG0KKyAgICAvLyBodHRwczovL2R2Y3MudzMub3JnL2hnL2h0bWwt
bWVkaWEvcmF3LWZpbGUvdGlwL21lZGlhLXNvdXJjZS9tZWRpYS1zb3VyY2UuaHRtbCNkdXJhdGlv
bi1jaGFuZ2UtYWxnb3JpdGhtCisKKyAgICAvLyAxLiBJZiB0aGUgY3VycmVudCB2YWx1ZSBvZiBk
dXJhdGlvbiBpcyBlcXVhbCB0byBuZXcgZHVyYXRpb24sIHRoZW4gcmV0dXJuLgorICAgIGlmIChk
dXJhdGlvbiA9PSBtX2R1cmF0aW9uKQorICAgICAgICByZXR1cm47CisKKyAgICAvLyAyLiBTZXQg
b2xkIGR1cmF0aW9uIHRvIHRoZSBjdXJyZW50IHZhbHVlIG9mIGR1cmF0aW9uLgorICAgIGRvdWJs
ZSBvbGREdXJhdGlvbiA9IG1fZHVyYXRpb247CisKKyAgICAvLyAzLiBVcGRhdGUgZHVyYXRpb24g
dG8gbmV3IGR1cmF0aW9uLgorICAgIG1fZHVyYXRpb24gPSBkdXJhdGlvbjsKKworICAgIC8vIDQu
IElmIHRoZSBuZXcgZHVyYXRpb24gaXMgbGVzcyB0aGFuIG9sZCBkdXJhdGlvbiwgdGhlbiBjYWxs
IHJlbW92ZShuZXcgZHVyYXRpb24sIG9sZCBkdXJhdGlvbikKKyAgICAvLyBvbiBhbGwgb2JqZWN0
cyBpbiBzb3VyY2VCdWZmZXJzLgorICAgIGlmICghaXNuYW4ob2xkRHVyYXRpb24pICYmIGR1cmF0
aW9uIDwgb2xkRHVyYXRpb24pIHsKKyAgICAgICAgZm9yIChhdXRvJiBzb3VyY2VCdWZmZXIgOiAq
bV9zb3VyY2VCdWZmZXJzKQorICAgICAgICAgICAgc291cmNlQnVmZmVyLT5yZW1vdmUoZHVyYXRp
b24sIG9sZER1cmF0aW9uLCBJR05PUkVfRVhDRVBUSU9OKTsKKyAgICB9CiAKKyAgICAvLyA1LiBJ
ZiBhIHVzZXIgYWdlbnQgaXMgdW5hYmxlIHRvIHBhcnRpYWxseSByZW5kZXIgYXVkaW8gZnJhbWVz
IG9yIHRleHQgY3VlcyB0aGF0IHN0YXJ0IGJlZm9yZSBhbmQgZW5kIGFmdGVyIHRoZQorICAgIC8v
IGR1cmF0aW9uLCB0aGVuIHJ1biB0aGUgZm9sbG93aW5nIHN0ZXBzOgorICAgIC8vIDUuMSBVcGRh
dGUgbmV3IGR1cmF0aW9uIHRvIHRoZSBoaWdoZXN0IGVuZCB0aW1lIHJlcG9ydGVkIGJ5IHRoZSBi
dWZmZXJlZCBhdHRyaWJ1dGUgYWNyb3NzIGFsbCBTb3VyY2VCdWZmZXIgb2JqZWN0cworICAgIC8v
IGluIHNvdXJjZUJ1ZmZlcnMuCisgICAgLy8gNS4yIFVwZGF0ZSBkdXJhdGlvbiB0byBuZXcgZHVy
YXRpb24uCisgICAgLy8gTk9URTogQXNzdW1lIFVBIGlzIGFibGUgdG8gcGFydGlhbGx5IHJlbmRl
ciBhdWRpbyBmcmFtZXMuCisKKyAgICAvLyA2LiBVcGRhdGUgdGhlIG1lZGlhIGNvbnRyb2xsZXIg
ZHVyYXRpb24gdG8gbmV3IGR1cmF0aW9uIGFuZCBydW4gdGhlIEhUTUxNZWRpYUVsZW1lbnQgZHVy
YXRpb24gY2hhbmdlIGFsZ29yaXRobS4KKyAgICBMT0coTWVkaWFTb3VyY2UsICJNZWRpYVNvdXJj
ZTo6c2V0RHVyYXRpb25JbnRlcm5hbCglcCkgLSBkdXJhdGlvbiglZykiLCB0aGlzLCBkdXJhdGlv
bik7CisgICAgbV9wcml2YXRlLT5kdXJhdGlvbkNoYW5nZWQoKTsKK30KIAogdm9pZCBNZWRpYVNv
dXJjZTo6c2V0UmVhZHlTdGF0ZShjb25zdCBBdG9taWNTdHJpbmcmIHN0YXRlKQogewpAQCAtMjk3
LDYgKzM5MCw3IEBAIHZvaWQgTWVkaWFTb3VyY2U6OnNldFJlYWR5U3RhdGUoY29uc3QgQXRvbWlj
U3RyaW5nJiBzdGF0ZSkKICAgICBpZiAoc3RhdGUgPT0gY2xvc2VkS2V5d29yZCgpKSB7CiAgICAg
ICAgIG1fcHJpdmF0ZS5jbGVhcigpOwogICAgICAgICBtX21lZGlhRWxlbWVudCA9IDA7CisgICAg
ICAgIG1fZHVyYXRpb24gPSBzdGQ6Om51bWVyaWNfbGltaXRzPGRvdWJsZT46OnF1aWV0X05hTigp
OwogICAgIH0KIAogICAgIGlmIChvbGRTdGF0ZSA9PSBzdGF0ZSkKQEAgLTM0NCwxOSArNDM4LDE4
IEBAIHZvaWQgTWVkaWFTb3VyY2U6OnN0cmVhbUVuZGVkV2l0aEVycm9yKGNvbnN0IEF0b21pY1N0
cmluZyYgZXJyb3IsIEV4Y2VwdGlvbkNvZGUmCiAgICAgREVQUkVDQVRFRF9ERUZJTkVfU1RBVElD
X0xPQ0FMKGNvbnN0IEF0b21pY1N0cmluZywgZGVjb2RlLCAoImRlY29kZSIsIEF0b21pY1N0cmlu
Zzo6Q29uc3RydWN0RnJvbUxpdGVyYWwpKTsKIAogICAgIC8vIDIuNC43IGh0dHBzOi8vZHZjcy53
My5vcmcvaGcvaHRtbC1tZWRpYS9yYXctZmlsZS90aXAvbWVkaWEtc291cmNlL21lZGlhLXNvdXJj
ZS5odG1sI2VuZC1vZi1zdHJlYW0tYWxnb3JpdGhtCi0gICAgLy8gMS4gQ2hhbmdlIHRoZSByZWFk
eVN0YXRlIGF0dHJpYnV0ZSB2YWx1ZSB0byAiZW5kZWQiLgotICAgIC8vIDIuIFF1ZXVlIGEgdGFz
ayB0byBmaXJlIGEgc2ltcGxlIGV2ZW50IG5hbWVkIHNvdXJjZWVuZGVkIGF0IHRoZSBNZWRpYVNv
dXJjZS4KLSAgICBzZXRSZWFkeVN0YXRlKGVuZGVkS2V5d29yZCgpKTsKIAogICAgIC8vIDMuCiAg
ICAgaWYgKGVycm9yLmlzRW1wdHkoKSkgewogICAgICAgICAvLyDihrMgSWYgZXJyb3IgaXMgbm90
IHNldCwgaXMgbnVsbCwgb3IgaXMgYW4gZW1wdHkgc3RyaW5nCi0gICAgICAgIC8vIDEuIFJ1biB0
aGUgZHVyYXRpb24gY2hhbmdlIGFsZ29yaXRobSB3aXRoIG5ldyBkdXJhdGlvbiBzZXQgdG8gdGhl
IGhpZ2hlc3QgZW5kIHRpbWVzdGFtcAotICAgICAgICAvLyBhY3Jvc3MgYWxsIFNvdXJjZUJ1ZmZl
ciBvYmplY3RzIGluIHNvdXJjZUJ1ZmZlcnMuCi0gICAgICAgIE1lZGlhVGltZSBtYXhFbmRUaW1l
c3RhbXA7Ci0gICAgICAgIGZvciAoYXV0byBpdCA9IG1fc291cmNlQnVmZmVycy0+YmVnaW4oKSwg
ZW5kID0gbV9zb3VyY2VCdWZmZXJzLT5lbmQoKTsgaXQgIT0gZW5kOyArK2l0KQotICAgICAgICAg
ICAgbWF4RW5kVGltZXN0YW1wID0gc3RkOjptYXgoKCppdCktPmhpZ2hlc3RQcmVzZW50YXRpb25F
bmRUaW1lc3RhbXAoKSwgbWF4RW5kVGltZXN0YW1wKTsKLSAgICAgICAgbV9wcml2YXRlLT5zZXRE
dXJhdGlvbihtYXhFbmRUaW1lc3RhbXApOworICAgICAgICAvLyAxLiBSdW4gdGhlIGR1cmF0aW9u
IGNoYW5nZSBhbGdvcml0aG0gd2l0aCBuZXcgZHVyYXRpb24gc2V0IHRvIHRoZSBoaWdoZXN0IGVu
ZCB0aW1lIHJlcG9ydGVkIGJ5CisgICAgICAgIC8vIHRoZSBidWZmZXJlZCBhdHRyaWJ1dGUgYWNy
b3NzIGFsbCBTb3VyY2VCdWZmZXIgb2JqZWN0cyBpbiBzb3VyY2VCdWZmZXJzLgorICAgICAgICBk
b3VibGUgbWF4RW5kVGltZSA9IDA7CisgICAgICAgIGZvciAoYXV0byYgc291cmNlQnVmZmVyIDog
Km1fc291cmNlQnVmZmVycykgeworICAgICAgICAgICAgaWYgKGF1dG8gbGVuZ3RoID0gc291cmNl
QnVmZmVyLT5idWZmZXJlZCgpLT5sZW5ndGgoKSkKKyAgICAgICAgICAgICAgICBtYXhFbmRUaW1l
ID0gc3RkOjptYXgoc291cmNlQnVmZmVyLT5idWZmZXJlZCgpLT5lbmQobGVuZ3RoIC0gMSwgSUdO
T1JFX0VYQ0VQVElPTiksIG1heEVuZFRpbWUpOworICAgICAgICB9CisgICAgICAgIHNldER1cmF0
aW9uSW50ZXJuYWwobWF4RW5kVGltZSk7CiAKICAgICAgICAgLy8gMi4gTm90aWZ5IHRoZSBtZWRp
YSBlbGVtZW50IHRoYXQgaXQgbm93IGhhcyBhbGwgb2YgdGhlIG1lZGlhIGRhdGEuCiAgICAgICAg
IG1fcHJpdmF0ZS0+bWFya0VuZE9mU3RyZWFtKE1lZGlhU291cmNlUHJpdmF0ZTo6RW9zTm9FcnJv
cik7CkBAIC0zOTYsNiArNDg5LDEzIEBAIHZvaWQgTWVkaWFTb3VyY2U6OnN0cmVhbUVuZGVkV2l0
aEVycm9yKGNvbnN0IEF0b21pY1N0cmluZyYgZXJyb3IsIEV4Y2VwdGlvbkNvZGUmCiAgICAgICAg
IC8vICAgVGhyb3cgYW4gSU5WQUxJRF9BQ0NFU1NfRVJSIGV4Y2VwdGlvbi4KICAgICAgICAgZWMg
PSBJTlZBTElEX0FDQ0VTU19FUlI7CiAgICAgfQorCisgICAgLy8gTk9URTogRG8gc3RlcHMgMSAm
IDIgYWZ0ZXIgc3RlcCAzIHRvIGF2b2lkIHRoZSBNZWRpYVNvdXJjZSdzIHJlYWR5U3RhdGUgYmVp
bmcgcmUtb3BlbmVkIGJ5IGEKKyAgICAvLyByZW1vdmUoKSBvcGVyYXRpb24gcmVzdWx0aW5nIGZy
b20gYSBkdXJhdGlvbiBjaGFuZ2UuCisgICAgLy8gRklYTUU6IFJlLW51bWJlciBvciB1cGRhdGUg
dGhpcyBzZWN0aW9uIG9uY2UgPGh0dHBzOi8vd3d3LnczLm9yZy9CdWdzL1B1YmxpYy9zaG93X2J1
Zy5jZ2k/aWQ9MjYzMTY+IGlzIHJlc29sdmVkLgorICAgIC8vIDEuIENoYW5nZSB0aGUgcmVhZHlT
dGF0ZSBhdHRyaWJ1dGUgdmFsdWUgdG8gImVuZGVkIi4KKyAgICAvLyAyLiBRdWV1ZSBhIHRhc2sg
dG8gZmlyZSBhIHNpbXBsZSBldmVudCBuYW1lZCBzb3VyY2VlbmRlZCBhdCB0aGUgTWVkaWFTb3Vy
Y2UuCisgICAgc2V0UmVhZHlTdGF0ZShlbmRlZEtleXdvcmQoKSk7CiB9CiAKIFNvdXJjZUJ1ZmZl
ciogTWVkaWFTb3VyY2U6OmFkZFNvdXJjZUJ1ZmZlcihjb25zdCBTdHJpbmcmIHR5cGUsIEV4Y2Vw
dGlvbkNvZGUmIGVjKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXNv
dXJjZS9NZWRpYVNvdXJjZS5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXNvdXJjZS9N
ZWRpYVNvdXJjZS5oCmluZGV4IDQwN2U4ODcxODg1Zjc0MjhjYjE0YWEyOTdlZjEzNGJiZGE0N2Ix
MjUuLjczODlkYjE0MzQ1MzY5MzkwZWJhMDViODlkNGFkODJhNTcwNjZhMTkgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzb3VyY2UvTWVkaWFTb3VyY2UuaAorKysgYi9T
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc291cmNlL01lZGlhU291cmNlLmgKQEAgLTcyLDEx
ICs3MiwxMyBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIHNldFByaXZhdGVBbmRPcGVuKFBh
c3NSZWY8TWVkaWFTb3VyY2VQcml2YXRlPikgb3ZlcnJpZGU7CiAgICAgdmlydHVhbCBkb3VibGUg
ZHVyYXRpb24oKSBjb25zdCBvdmVycmlkZTsKICAgICB2aXJ0dWFsIHN0ZDo6dW5pcXVlX3B0cjxQ
bGF0Zm9ybVRpbWVSYW5nZXM+IGJ1ZmZlcmVkKCkgY29uc3Qgb3ZlcnJpZGU7CisgICAgdmlydHVh
bCB2b2lkIHNlZWtUb1RpbWUoY29uc3QgTWVkaWFUaW1lJikgb3ZlcnJpZGU7CiAKICAgICBib29s
IGF0dGFjaFRvRWxlbWVudChIVE1MTWVkaWFFbGVtZW50Kik7CiAgICAgdm9pZCBjbG9zZSgpOwog
ICAgIGJvb2wgaXNDbG9zZWQoKSBjb25zdDsKICAgICB2b2lkIG1vbml0b3JTb3VyY2VCdWZmZXJz
KCk7CisgICAgdm9pZCBjb21wbGV0ZVNlZWsoKTsKIAogICAgIHZvaWQgc2V0RHVyYXRpb24oZG91
YmxlLCBFeGNlcHRpb25Db2RlJik7CiAgICAgdm9pZCBzZXREdXJhdGlvbkludGVybmFsKGRvdWJs
ZSk7CkBAIC0xMjcsNiArMTI5LDggQEAgcHJvdGVjdGVkOgogICAgIFJlZlB0cjxTb3VyY2VCdWZm
ZXJMaXN0PiBtX3NvdXJjZUJ1ZmZlcnM7CiAgICAgUmVmUHRyPFNvdXJjZUJ1ZmZlckxpc3Q+IG1f
YWN0aXZlU291cmNlQnVmZmVyczsKICAgICBIVE1MTWVkaWFFbGVtZW50KiBtX21lZGlhRWxlbWVu
dDsKKyAgICBkb3VibGUgbV9kdXJhdGlvbjsKKyAgICBNZWRpYVRpbWUgbV9wZW5kaW5nU2Vla1Rp
bWU7CiAgICAgQXRvbWljU3RyaW5nIG1fcmVhZHlTdGF0ZTsKICAgICBHZW5lcmljRXZlbnRRdWV1
ZSBtX2FzeW5jRXZlbnRRdWV1ZTsKIH07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL21lZGlhc291cmNlL1NvdXJjZUJ1ZmZlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L21lZGlhc291cmNlL1NvdXJjZUJ1ZmZlci5jcHAKaW5kZXggMWM1MzI4OTFmNzgyYjlhMjkzOTk1
MzA0NDQ4NmY3NjMwYTA3MWYyMy4uMGY2Nzk1MDI1NzNhMjA2MmQ2NWFiYWYyNTVkYmE4YzRkMjQz
NTVmMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXNvdXJjZS9Tb3Vy
Y2VCdWZmZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzb3VyY2UvU291
cmNlQnVmZmVyLmNwcApAQCAtMjMzLDYgKzIzMyw3IEBAIHZvaWQgU291cmNlQnVmZmVyOjphYm9y
dChFeGNlcHRpb25Db2RlJiBlYykKIAogdm9pZCBTb3VyY2VCdWZmZXI6OnJlbW92ZShkb3VibGUg
c3RhcnQsIGRvdWJsZSBlbmQsIEV4Y2VwdGlvbkNvZGUmIGVjKQogeworICAgIExPRyhNZWRpYVNv
dXJjZSwgIlNvdXJjZUJ1ZmZlcjo6cmVtb3ZlKCVwKSAtIHN0YXJ0KCVzKSwgZW5kKCVzKSIsIHRo
aXMsIHRvU3RyaW5nKHN0YXJ0KS51dGY4KCkuZGF0YSgpLCB0b1N0cmluZyhlbmQpLnV0ZjgoKS5k
YXRhKCkpOwogICAgIC8vIFNlY3Rpb24gMy4yIHJlbW92ZSgpIG1ldGhvZCBzdGVwcy4KICAgICAv
LyAxLiBJZiBzdGFydCBpcyBuZWdhdGl2ZSBvciBncmVhdGVyIHRoYW4gZHVyYXRpb24sIHRoZW4g
dGhyb3cgYW4gSW52YWxpZEFjY2Vzc0Vycm9yIGV4Y2VwdGlvbiBhbmQgYWJvcnQgdGhlc2Ugc3Rl
cHMuCiAgICAgLy8gMi4gSWYgZW5kIGlzIGxlc3MgdGhhbiBvciBlcXVhbCB0byBzdGFydCwgdGhl
biB0aHJvdyBhbiBJbnZhbGlkQWNjZXNzRXJyb3IgZXhjZXB0aW9uIGFuZCBhYm9ydCB0aGVzZSBz
dGVwcy4KQEAgLTMwOCw5ICszMDksOSBAQCB2b2lkIFNvdXJjZUJ1ZmZlcjo6cmVtb3ZlZEZyb21N
ZWRpYVNvdXJjZSgpCiAgICAgbV9zb3VyY2UgPSAwOwogfQogCi12b2lkIFNvdXJjZUJ1ZmZlcjo6
c291cmNlQnVmZmVyUHJpdmF0ZVNlZWtUb1RpbWUoU291cmNlQnVmZmVyUHJpdmF0ZSosIGNvbnN0
IE1lZGlhVGltZSYgdGltZSkKK3ZvaWQgU291cmNlQnVmZmVyOjpzZWVrVG9UaW1lKGNvbnN0IE1l
ZGlhVGltZSYgdGltZSkKIHsKLSAgICBMT0coTWVkaWFTb3VyY2UsICJTb3VyY2VCdWZmZXI6OnNv
dXJjZUJ1ZmZlclByaXZhdGVTZWVrVG9UaW1lKCVwKSAtIHRpbWUoJXMpIiwgdGhpcywgdG9TdHJp
bmcodGltZSkudXRmOCgpLmRhdGEoKSk7CisgICAgTE9HKE1lZGlhU291cmNlLCAiU291cmNlQnVm
ZmVyOjpzZWVrVG9UaW1lKCVwKSAtIHRpbWUoJXMpIiwgdGhpcywgdG9TdHJpbmcodGltZSkudXRm
OCgpLmRhdGEoKSk7CiAKICAgICBmb3IgKGF1dG8mIHRyYWNrQnVmZmVyUGFpciA6IG1fdHJhY2tC
dWZmZXJNYXApIHsKICAgICAgICAgVHJhY2tCdWZmZXImIHRyYWNrQnVmZmVyID0gdHJhY2tCdWZm
ZXJQYWlyLnZhbHVlOwpAQCAtMzE4LDggKzMxOSw2IEBAIHZvaWQgU291cmNlQnVmZmVyOjpzb3Vy
Y2VCdWZmZXJQcml2YXRlU2Vla1RvVGltZShTb3VyY2VCdWZmZXJQcml2YXRlKiwgY29uc3QgTWVk
CiAKICAgICAgICAgcmVlbnF1ZXVlTWVkaWFGb3JUaW1lKHRyYWNrQnVmZmVyLCB0cmFja0lELCB0
aW1lKTsKICAgICB9Ci0KLSAgICBtX3NvdXJjZS0+bW9uaXRvclNvdXJjZUJ1ZmZlcnMoKTsKIH0K
IAogTWVkaWFUaW1lIFNvdXJjZUJ1ZmZlcjo6c291cmNlQnVmZmVyUHJpdmF0ZUZhc3RTZWVrVGlt
ZUZvck1lZGlhVGltZShTb3VyY2VCdWZmZXJQcml2YXRlKiwgY29uc3QgTWVkaWFUaW1lJiB0YXJn
ZXRUaW1lLCBjb25zdCBNZWRpYVRpbWUmIG5lZ2F0aXZlVGhyZXNob2xkLCBjb25zdCBNZWRpYVRp
bWUmIHBvc2l0aXZlVGhyZXNob2xkKQpAQCAtNTI3LDYgKzUyNiw4IEBAIHN0YXRpYyBib29sIGRl
Y29kZVRpbWVDb21wYXJhdG9yKGNvbnN0IFByZXNlbnRhdGlvbk9yZGVyU2FtcGxlTWFwOjpNYXBU
eXBlOjp2YWx1CiAKIHZvaWQgU291cmNlQnVmZmVyOjpyZW1vdmVDb2RlZEZyYW1lcyhjb25zdCBN
ZWRpYVRpbWUmIHN0YXJ0LCBjb25zdCBNZWRpYVRpbWUmIGVuZCkKIHsKKyAgICBMT0coTWVkaWFT
b3VyY2UsICJTb3VyY2VCdWZmZXI6OnJlbW92ZUNvZGVkRnJhbWVzKCVwKSAtIHN0YXJ0KCVzKSwg
ZW5kKCVzKSIsIHRoaXMsIHRvU3RyaW5nKHN0YXJ0KS51dGY4KCkuZGF0YSgpLCB0b1N0cmluZyhl
bmQpLnV0ZjgoKS5kYXRhKCkpOworCiAgICAgLy8gMy41LjkgQ29kZWQgRnJhbWUgUmVtb3ZhbCBB
bGdvcml0aG0KICAgICAvLyBodHRwczovL2R2Y3MudzMub3JnL2hnL2h0bWwtbWVkaWEvcmF3LWZp
bGUvdGlwL21lZGlhLXNvdXJjZS9tZWRpYS1zb3VyY2UuaHRtbCNzb3VyY2VidWZmZXItY29kZWQt
ZnJhbWUtcmVtb3ZhbAogCkBAIC0xNDQ5LDcgKzE0NTAsOCBAQCBib29sIFNvdXJjZUJ1ZmZlcjo6
aGFzRnV0dXJlVGltZSgpIGNvbnN0CiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIHNpemVf
dCBmb3VuZCA9IHJhbmdlcy5maW5kKG5lYXJlc3QpOwotICAgIEFTU0VSVChmb3VuZCAhPSBub3RG
b3VuZCk7CisgICAgaWYgKGZvdW5kID09IG5vdEZvdW5kKQorICAgICAgICByZXR1cm4gZmFsc2U7
CiAKICAgICBib29sIGlnbm9yZWRWYWxpZCA9IGZhbHNlOwogICAgIHJldHVybiByYW5nZXMuZW5k
KGZvdW5kLCBpZ25vcmVkVmFsaWQpIC0gY3VycmVudFRpbWUgPiBjdXJyZW50VGltZUZ1ZGdlRmFj
dG9yKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc291cmNlL1Nv
dXJjZUJ1ZmZlci5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXNvdXJjZS9Tb3VyY2VC
dWZmZXIuaAppbmRleCAxMTUwNTE2ZGM4MDFiNzFhYzBlNjI2ZDdhNjYxODMyMmRjYmY4YjYzLi42
M2M0ZDRjNWYzYjg4Y2I4NTI2ZDk4OTYxYTZmMjYzMDQ3NTY0M2JhIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc291cmNlL1NvdXJjZUJ1ZmZlci5oCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzb3VyY2UvU291cmNlQnVmZmVyLmgKQEAgLTc3LDYgKzc3
LDcgQEAgcHVibGljOgogICAgIHZvaWQgYWJvcnRJZlVwZGF0aW5nKCk7CiAgICAgdm9pZCByZW1v
dmVkRnJvbU1lZGlhU291cmNlKCk7CiAgICAgY29uc3QgTWVkaWFUaW1lJiBoaWdoZXN0UHJlc2Vu
dGF0aW9uRW5kVGltZXN0YW1wKCkgY29uc3QgeyByZXR1cm4gbV9oaWdoZXN0UHJlc2VudGF0aW9u
RW5kVGltZXN0YW1wOyB9CisgICAgdm9pZCBzZWVrVG9UaW1lKGNvbnN0IE1lZGlhVGltZSYpOwog
CiAjaWYgRU5BQkxFKFZJREVPX1RSQUNLKQogICAgIFZpZGVvVHJhY2tMaXN0KiB2aWRlb1RyYWNr
cygpOwpAQCAtMTE2LDcgKzExNyw2IEBAIHByaXZhdGU6CiAgICAgdmlydHVhbCBib29sIHNvdXJj
ZUJ1ZmZlclByaXZhdGVIYXNBdWRpbyhjb25zdCBTb3VyY2VCdWZmZXJQcml2YXRlKikgY29uc3Qg
b3ZlcnJpZGU7CiAgICAgdmlydHVhbCBib29sIHNvdXJjZUJ1ZmZlclByaXZhdGVIYXNWaWRlbyhj
b25zdCBTb3VyY2VCdWZmZXJQcml2YXRlKikgY29uc3Qgb3ZlcnJpZGU7CiAgICAgdmlydHVhbCB2
b2lkIHNvdXJjZUJ1ZmZlclByaXZhdGVEaWRCZWNvbWVSZWFkeUZvck1vcmVTYW1wbGVzKFNvdXJj
ZUJ1ZmZlclByaXZhdGUqLCBBdG9taWNTdHJpbmcgdHJhY2tJRCkgb3ZlcnJpZGU7Ci0gICAgdmly
dHVhbCB2b2lkIHNvdXJjZUJ1ZmZlclByaXZhdGVTZWVrVG9UaW1lKFNvdXJjZUJ1ZmZlclByaXZh
dGUqLCBjb25zdCBNZWRpYVRpbWUmKTsKICAgICB2aXJ0dWFsIE1lZGlhVGltZSBzb3VyY2VCdWZm
ZXJQcml2YXRlRmFzdFNlZWtUaW1lRm9yTWVkaWFUaW1lKFNvdXJjZUJ1ZmZlclByaXZhdGUqLCBj
b25zdCBNZWRpYVRpbWUmLCBjb25zdCBNZWRpYVRpbWUmIG5lZ2F0aXZlVGhyZXNob2xkLCBjb25z
dCBNZWRpYVRpbWUmIHBvc2l0aXZlVGhyZXNob2xkKTsKICAgICB2aXJ0dWFsIHZvaWQgc291cmNl
QnVmZmVyUHJpdmF0ZUFwcGVuZENvbXBsZXRlKFNvdXJjZUJ1ZmZlclByaXZhdGUqLCBBcHBlbmRS
ZXN1bHQpIG92ZXJyaWRlOwogICAgIHZpcnR1YWwgdm9pZCBzb3VyY2VCdWZmZXJQcml2YXRlRGlk
UmVjZWl2ZVJlbmRlcmluZ0Vycm9yKFNvdXJjZUJ1ZmZlclByaXZhdGUqLCBpbnQgZXJyb3JDb2Rl
KSBvdmVycmlkZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTE1lZGlhRWxl
bWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxNZWRpYUVsZW1lbnQuY3BwCmluZGV4
IGNiMTE3NWE5MDFkZDc0MjE3ZDM3ZDMxMmM0Zjk3YTQ2MDcyY2NkNjAuLjc3YmViYzBkYTcxOTNh
ZmQzODE5NzExMjg4MzhiMTRmNTkwMTFiYzAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0
bWwvSFRNTE1lZGlhRWxlbWVudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MTWVk
aWFFbGVtZW50LmNwcApAQCAtNDA5MSw3ICs0MDkxLDggQEAgdm9pZCBIVE1MTWVkaWFFbGVtZW50
OjptZWRpYVBsYXllclRpbWVDaGFuZ2VkKE1lZGlhUGxheWVyKikKICAgICAvLyBBbHdheXMgY2Fs
bCBzY2hlZHVsZVRpbWV1cGRhdGVFdmVudCB3aGVuIHRoZSBtZWRpYSBlbmdpbmUgcmVwb3J0cyBh
IHRpbWUgZGlzY29udGludWl0eSwgCiAgICAgLy8gaXQgd2lsbCBvbmx5IHF1ZXVlIGEgJ3RpbWV1
cGRhdGUnIGV2ZW50IGlmIHdlIGhhdmVuJ3QgYWxyZWFkeSBwb3N0ZWQgb25lIGF0IHRoZSBjdXJy
ZW50CiAgICAgLy8gbW92aWUgdGltZS4KLSAgICBzY2hlZHVsZVRpbWV1cGRhdGVFdmVudChmYWxz
ZSk7CisgICAgZWxzZQorICAgICAgICBzY2hlZHVsZVRpbWV1cGRhdGVFdmVudChmYWxzZSk7CiAK
ICAgICBkb3VibGUgbm93ID0gY3VycmVudFRpbWUoKTsKICAgICBkb3VibGUgZHVyID0gZHVyYXRp
b24oKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL01lZGlh
U291cmNlUHJpdmF0ZS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvTWVkaWFT
b3VyY2VQcml2YXRlLmgKaW5kZXggZGMyNGUzMWU2ZjIyZDUyN2Q2NWRhN2IyZTk3MTVkNjg4ZDc0
M2FlYy4uNzE4NjU4OTEwYmNlMzkyYjk1ZGE1NDc2ZTY4OTg5OTllNjQ1Nzg0NyAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvTWVkaWFTb3VyY2VQcml2YXRlLmgK
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvTWVkaWFTb3VyY2VQcml2YXRl
LmgKQEAgLTUxLDE0ICs1MSwxNiBAQCBwdWJsaWM6CiAKICAgICBlbnVtIEFkZFN0YXR1cyB7IE9r
LCBOb3RTdXBwb3J0ZWQsIFJlYWNoZWRJZExpbWl0IH07CiAgICAgdmlydHVhbCBBZGRTdGF0dXMg
YWRkU291cmNlQnVmZmVyKGNvbnN0IENvbnRlbnRUeXBlJiwgUmVmUHRyPFNvdXJjZUJ1ZmZlclBy
aXZhdGU+JikgPSAwOwotICAgIHZpcnR1YWwgTWVkaWFUaW1lIGR1cmF0aW9uKCkgPSAwOwotICAg
IHZpcnR1YWwgdm9pZCBzZXREdXJhdGlvbihjb25zdCBNZWRpYVRpbWUmKSA9IDA7CisgICAgdmly
dHVhbCB2b2lkIGR1cmF0aW9uQ2hhbmdlZCgpID0gMDsKICAgICBlbnVtIEVuZE9mU3RyZWFtU3Rh
dHVzIHsgRW9zTm9FcnJvciwgRW9zTmV0d29ya0Vycm9yLCBFb3NEZWNvZGVFcnJvciB9OwogICAg
IHZpcnR1YWwgdm9pZCBtYXJrRW5kT2ZTdHJlYW0oRW5kT2ZTdHJlYW1TdGF0dXMpID0gMDsKICAg
ICB2aXJ0dWFsIHZvaWQgdW5tYXJrRW5kT2ZTdHJlYW0oKSA9IDA7CiAKICAgICB2aXJ0dWFsIE1l
ZGlhUGxheWVyOjpSZWFkeVN0YXRlIHJlYWR5U3RhdGUoKSBjb25zdCA9IDA7CiAgICAgdmlydHVh
bCB2b2lkIHNldFJlYWR5U3RhdGUoTWVkaWFQbGF5ZXI6OlJlYWR5U3RhdGUpID0gMDsKKworICAg
IHZpcnR1YWwgdm9pZCB3YWl0Rm9yU2Vla0NvbXBsZXRlZCgpID0gMDsKKyAgICB2aXJ0dWFsIHZv
aWQgc2Vla0NvbXBsZXRlZCgpID0gMDsKIH07CiAKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL01lZGlhU291cmNlUHJpdmF0ZUNsaWVudC5oIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvTWVkaWFTb3VyY2VQcml2YXRlQ2xpZW50LmgKaW5k
ZXggZTc2NmYxNDBlOGYyM2IxNzVmOWVkMjFkNWUwZDM3MWNjMjRiMjE1OC4uNDNmMTcxN2MzY2Jm
MTA4MTU3YWVhNjI0M2YwNDNmM2Y0ZDdhZGE5YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvTWVkaWFTb3VyY2VQcml2YXRlQ2xpZW50LmgKKysrIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvTWVkaWFTb3VyY2VQcml2YXRlQ2xpZW50LmgKQEAg
LTQyLDYgKzQyLDcgQEAgcHVibGljOgogICAgIHZpcnR1YWwgdm9pZCBzZXRQcml2YXRlQW5kT3Bl
bihQYXNzUmVmPE1lZGlhU291cmNlUHJpdmF0ZT4pID0gMDsKICAgICB2aXJ0dWFsIGRvdWJsZSBk
dXJhdGlvbigpIGNvbnN0ID0gMDsKICAgICB2aXJ0dWFsIHN0ZDo6dW5pcXVlX3B0cjxQbGF0Zm9y
bVRpbWVSYW5nZXM+IGJ1ZmZlcmVkKCkgY29uc3QgPSAwOworICAgIHZpcnR1YWwgdm9pZCBzZWVr
VG9UaW1lKGNvbnN0IE1lZGlhVGltZSYpID0gMDsKIH07CiAKIH0KZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9vYmpjL01lZGlhUGxheWVy
UHJpdmF0ZU1lZGlhU291cmNlQVZGT2JqQy5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvYXZmb3VuZGF0aW9uL29iamMvTWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFTb3VyY2VBVkZP
YmpDLmgKaW5kZXggODBiZWQ0NWYzMDU5YWU5ZDA0NzkzMDhmNWJkOTBjM2FiZmZhZjZlYi4uZjBh
YmQyNzUzZThlNzZhNGRiYWQ3MzkwNTIwZDdlMDgxZGI0NzAzYSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL29iamMvTWVkaWFQbGF5ZXJQ
cml2YXRlTWVkaWFTb3VyY2VBVkZPYmpDLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvYXZmb3VuZGF0aW9uL29iamMvTWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFTb3VyY2VB
VkZPYmpDLmgKQEAgLTY1LDYgKzY1LDggQEAgcHVibGljOgogICAgIHZvaWQgc2V0TmV0d29ya1N0
YXRlKE1lZGlhUGxheWVyOjpOZXR3b3JrU3RhdGUpOwogCiAgICAgdm9pZCBzZWVrSW50ZXJuYWwo
KTsKKyAgICB2b2lkIHdhaXRGb3JTZWVrQ29tcGxldGVkKCk7CisgICAgdm9pZCBzZWVrQ29tcGxl
dGVkKCk7CiAgICAgdm9pZCBzZXRMb2FkaW5nUHJvZ3Jlc3NzZWQoYm9vbCBmbGFnKSB7IG1fbG9h
ZGluZ1Byb2dyZXNzZWQgPSBmbGFnOyB9CiAgICAgdm9pZCBzZXRIYXNBdmFpbGFibGVWaWRlb0Zy
YW1lKGJvb2wgZmxhZykgeyBtX2hhc0F2YWlsYWJsZVZpZGVvRnJhbWUgPSBmbGFnOyB9CiAgICAg
dm9pZCBkdXJhdGlvbkNoYW5nZWQoKTsKQEAgLTE1Nyw2ICsxNTksNyBAQCBwcml2YXRlOgogICAg
IHZvaWQgZW5zdXJlTGF5ZXIoKTsKICAgICB2b2lkIGRlc3Ryb3lMYXllcigpOwogICAgIGJvb2wg
c2hvdWxkQmVQbGF5aW5nKCkgY29uc3Q7CisgICAgdm9pZCBzZWVrVGltZXJGaXJlZChUaW1lcjxN
ZWRpYVBsYXllclByaXZhdGVNZWRpYVNvdXJjZUFWRk9iakM+Jik7CiAKICAgICAvLyBNZWRpYVBs
YXllciBGYWN0b3J5IE1ldGhvZHMKICAgICBzdGF0aWMgUGFzc093blB0cjxNZWRpYVBsYXllclBy
aXZhdGVJbnRlcmZhY2U+IGNyZWF0ZShNZWRpYVBsYXllciopOwpAQCAtMTgyLDcgKzE4NSw2IEBA
IHByaXZhdGU6CiAKICAgICBNZWRpYVBsYXllciogbV9wbGF5ZXI7CiAgICAgV2Vha1B0ckZhY3Rv
cnk8TWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFTb3VyY2VBVkZPYmpDPiBtX3dlYWtQdHJGYWN0b3J5
OwotICAgIFJlZlB0cjxNZWRpYVNvdXJjZVByaXZhdGVDbGllbnQ+IG1fbWVkaWFTb3VyY2U7CiAg
ICAgUmVmUHRyPE1lZGlhU291cmNlUHJpdmF0ZUFWRk9iakM+IG1fbWVkaWFTb3VyY2VQcml2YXRl
OwogICAgIFJldGFpblB0cjxBVkFzc2V0PiBtX2Fzc2V0OwogICAgIFJldGFpblB0cjxBVlNhbXBs
ZUJ1ZmZlckRpc3BsYXlMYXllcj4gbV9zYW1wbGVCdWZmZXJEaXNwbGF5TGF5ZXI7CkBAIC0xOTAs
NiArMTkyLDcgQEAgcHJpdmF0ZToKICAgICBSZXRhaW5QdHI8QVZTYW1wbGVCdWZmZXJSZW5kZXJT
eW5jaHJvbml6ZXI+IG1fc3luY2hyb25pemVyOwogICAgIFJldGFpblB0cjxpZD4gbV90aW1lSnVt
cGVkT2JzZXJ2ZXI7CiAgICAgUmV0YWluUHRyPGlkPiBtX2R1cmF0aW9uT2JzZXJ2ZXI7CisgICAg
VGltZXI8TWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFTb3VyY2VBVkZPYmpDPiBtX3NlZWtUaW1lcjsK
ICAgICBNZWRpYVBsYXllcjo6TmV0d29ya1N0YXRlIG1fbmV0d29ya1N0YXRlOwogICAgIE1lZGlh
UGxheWVyOjpSZWFkeVN0YXRlIG1fcmVhZHlTdGF0ZTsKICAgICBkb3VibGUgbV9yYXRlOwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL29i
amMvTWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFTb3VyY2VBVkZPYmpDLm1tIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL29iamMvTWVkaWFQbGF5ZXJQcml2YXRl
TWVkaWFTb3VyY2VBVkZPYmpDLm1tCmluZGV4IGQ4YjY1ZjYwODYyYjBiZmU1Y2YzODYyODE4ZTM0
ZjMzNmFiNzQ3MTMuLjVkNzM2MDIxZTE0ZWIyMmQxMTZhYjJiZDU4M2I5ZDU1NGY4NGNhYWYgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9v
YmpjL01lZGlhUGxheWVyUHJpdmF0ZU1lZGlhU291cmNlQVZGT2JqQy5tbQorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24vb2JqYy9NZWRpYVBsYXllclBy
aXZhdGVNZWRpYVNvdXJjZUFWRk9iakMubW0KQEAgLTI5LDYgKzI5LDcgQEAKICNpZiBFTkFCTEUo
TUVESUFfU09VUkNFKSAmJiBVU0UoQVZGT1VOREFUSU9OKQogCiAjaW1wb3J0ICJDRE1TZXNzaW9u
LmgiCisjaW1wb3J0ICJMb2dnaW5nLmgiCiAjaW1wb3J0ICJNZWRpYVNvdXJjZVByaXZhdGVBVkZP
YmpDLmgiCiAjaW1wb3J0ICJNZWRpYVNvdXJjZVByaXZhdGVDbGllbnQuaCIKICNpbXBvcnQgIk1l
ZGlhVGltZU1hYy5oIgpAQCAtMTM0LDYgKzEzNSw3IEBAIE1lZGlhUGxheWVyUHJpdmF0ZU1lZGlh
U291cmNlQVZGT2JqQzo6TWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFTb3VyY2VBVkZPYmpDKE1lZGlh
CiAgICAgOiBtX3BsYXllcihwbGF5ZXIpCiAgICAgLCBtX3dlYWtQdHJGYWN0b3J5KHRoaXMpCiAg
ICAgLCBtX3N5bmNocm9uaXplcihhZG9wdE5TKFtbZ2V0QVZTYW1wbGVCdWZmZXJSZW5kZXJTeW5j
aHJvbml6ZXJDbGFzcygpIGFsbG9jXSBpbml0XSkpCisgICAgLCBtX3NlZWtUaW1lcih0aGlzLCAm
TWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFTb3VyY2VBVkZPYmpDOjpzZWVrVGltZXJGaXJlZCkKICAg
ICAsIG1fbmV0d29ya1N0YXRlKE1lZGlhUGxheWVyOjpFbXB0eSkKICAgICAsIG1fcmVhZHlTdGF0
ZShNZWRpYVBsYXllcjo6SGF2ZU5vdGhpbmcpCiAgICAgLCBtX3JhdGUoMSkKQEAgLTE0OSwxOSAr
MTUxLDI0IEBAIE1lZGlhUGxheWVyUHJpdmF0ZU1lZGlhU291cmNlQVZGT2JqQzo6TWVkaWFQbGF5
ZXJQcml2YXRlTWVkaWFTb3VyY2VBVkZPYmpDKE1lZGlhCiAgICAgLy8gYWRkUGVyaW9kaWNUaW1l
T2JzZXJ2ZXJGb3JJbnRlcnZhbDogdGhyb3dzIGFuIGV4Y2VwdGlvbiBpZiB5b3UgcGFzcyBhIG5v
bi1udW1lcmljIENNVGltZSwgc28ganVzdCB1c2UKICAgICAvLyBhbiBhcmJpdHJhcmlseSBsYXJn
ZSB0aW1lIHZhbHVlIG9mIG9uY2UgYW4gaG91cjoKICAgICBfX2Jsb2NrIGF1dG8gd2Vha1RoaXMg
PSBjcmVhdGVXZWFrUHRyKCk7Ci0gICAgbV90aW1lSnVtcGVkT2JzZXJ2ZXIgPSBbbV9zeW5jaHJv
bml6ZXIgYWRkUGVyaW9kaWNUaW1lT2JzZXJ2ZXJGb3JJbnRlcnZhbDp0b0NNVGltZShNZWRpYVRp
bWU6OmNyZWF0ZVdpdGhEb3VibGUoMzYwMCkpIHF1ZXVlOmRpc3BhdGNoX2dldF9tYWluX3F1ZXVl
KCkgdXNpbmdCbG9jazpeKENNVGltZSl7CisgICAgbV90aW1lSnVtcGVkT2JzZXJ2ZXIgPSBbbV9z
eW5jaHJvbml6ZXIgYWRkUGVyaW9kaWNUaW1lT2JzZXJ2ZXJGb3JJbnRlcnZhbDp0b0NNVGltZShN
ZWRpYVRpbWU6OmNyZWF0ZVdpdGhEb3VibGUoMzYwMCkpIHF1ZXVlOmRpc3BhdGNoX2dldF9tYWlu
X3F1ZXVlKCkgdXNpbmdCbG9jazpeKENNVGltZSB0aW1lKSB7CisjaWYgTE9HX0RJU0FCTEVECisg
ICAgICAgIFVOVVNFRF9QQVJBTSh0aW1lKTsKKyNlbmRpZgogICAgICAgICAvLyBGSVhNRTogUmVt
b3ZlIHRoZSBiZWxvdyBvbmNlIDxyZGFyOi8vcHJvYmxlbS8xNTc5ODA1MD4gaXMgZml4ZWQuCiAg
ICAgICAgIGlmICghd2Vha1RoaXMpCiAgICAgICAgICAgICByZXR1cm47CiAKICAgICAgICAgaWYg
KG1fc2Vla2luZyAmJiAhbV9wZW5kaW5nU2VlaykgeworICAgICAgICAgICAgTE9HKE1lZGlhU291
cmNlLCAiTWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFTb3VyY2VBVkZPYmpDOjptX3RpbWVKdW1wZWRP
YnNlcnZlciglcCkgLSB0aW1lKCVzKSIsIHdlYWtUaGlzLmdldCgpLCB0b1N0cmluZyh0b01lZGlh
VGltZSh0aW1lKSkudXRmOCgpLmRhdGEoKSk7CiAgICAgICAgICAgICBtX3NlZWtpbmcgPSBmYWxz
ZTsKKwogICAgICAgICAgICAgaWYgKHNob3VsZEJlUGxheWluZygpKQogICAgICAgICAgICAgICAg
IFttX3N5bmNocm9uaXplciBzZXRSYXRlOm1fcmF0ZV07CisgICAgICAgICAgICBpZiAoIXNlZWtp
bmcoKSkKKyAgICAgICAgICAgICAgICBtX3BsYXllci0+dGltZUNoYW5nZWQoKTsKICAgICAgICAg
fQogCi0gICAgICAgIG1fcGxheWVyLT50aW1lQ2hhbmdlZCgpOwotCiAgICAgICAgIGlmIChtX3Bl
bmRpbmdTZWVrKQogICAgICAgICAgICAgc2Vla0ludGVybmFsKCk7CiAgICAgfV07CkBAIC0xNzcs
NiArMTg0LDggQEAgTWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFTb3VyY2VBVkZPYmpDOjp+TWVkaWFQ
bGF5ZXJQcml2YXRlTWVkaWFTb3VyY2VBVkZPYmpDKCkKICAgICAgICAgW21fc3luY2hyb25pemVy
IHJlbW92ZVRpbWVPYnNlcnZlcjptX3RpbWVKdW1wZWRPYnNlcnZlci5nZXQoKV07CiAgICAgaWYg
KG1fZHVyYXRpb25PYnNlcnZlcikKICAgICAgICAgW21fc3luY2hyb25pemVyIHJlbW92ZVRpbWVP
YnNlcnZlcjptX2R1cmF0aW9uT2JzZXJ2ZXIuZ2V0KCldOworCisgICAgbV9zZWVrVGltZXIuc3Rv
cCgpOwogfQogCiAjcHJhZ21hIG1hcmsgLQpAQCAtMjg2LDE0ICsyOTUsMTEgQEAgdm9pZCBNZWRp
YVBsYXllclByaXZhdGVNZWRpYVNvdXJjZUFWRk9iakM6OmxvYWQoY29uc3QgU3RyaW5nJikKICAg
ICBtX3BsYXllci0+bmV0d29ya1N0YXRlQ2hhbmdlZCgpOwogfQogCi12b2lkIE1lZGlhUGxheWVy
UHJpdmF0ZU1lZGlhU291cmNlQVZGT2JqQzo6bG9hZChjb25zdCBTdHJpbmcmIHVybCwgTWVkaWFT
b3VyY2VQcml2YXRlQ2xpZW50KiBzb3VyY2UpCit2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZU1lZGlh
U291cmNlQVZGT2JqQzo6bG9hZChjb25zdCBTdHJpbmcmIHVybCwgTWVkaWFTb3VyY2VQcml2YXRl
Q2xpZW50KiBjbGllbnQpCiB7CiAgICAgVU5VU0VEX1BBUkFNKHVybCk7CiAKLSAgICBtX21lZGlh
U291cmNlID0gc291cmNlOwotICAgIG1fbWVkaWFTb3VyY2VQcml2YXRlID0gTWVkaWFTb3VyY2VQ
cml2YXRlQVZGT2JqQzo6Y3JlYXRlKHRoaXMpOwotCi0gICAgbV9tZWRpYVNvdXJjZS0+c2V0UHJp
dmF0ZUFuZE9wZW4oKm1fbWVkaWFTb3VyY2VQcml2YXRlKTsKKyAgICBtX21lZGlhU291cmNlUHJp
dmF0ZSA9IE1lZGlhU291cmNlUHJpdmF0ZUFWRk9iakM6OmNyZWF0ZSh0aGlzLCBjbGllbnQpOwog
fQogCiB2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZU1lZGlhU291cmNlQVZGT2JqQzo6Y2FuY2VsTG9h
ZCgpCkBAIC00MDYsNyArNDEyLDcgQEAgdm9pZCBNZWRpYVBsYXllclByaXZhdGVNZWRpYVNvdXJj
ZUFWRk9iakM6OnNldFZpc2libGUoYm9vbCkKIAogZG91YmxlIE1lZGlhUGxheWVyUHJpdmF0ZU1l
ZGlhU291cmNlQVZGT2JqQzo6ZHVyYXRpb25Eb3VibGUoKSBjb25zdAogewotICAgIHJldHVybiBt
X21lZGlhU291cmNlID8gbV9tZWRpYVNvdXJjZS0+ZHVyYXRpb24oKSA6IDA7CisgICAgcmV0dXJu
IG1fbWVkaWFTb3VyY2VQcml2YXRlID8gbV9tZWRpYVNvdXJjZVByaXZhdGUtPmR1cmF0aW9uKCku
dG9Eb3VibGUoKSA6IDA7CiB9CiAKIE1lZGlhVGltZSBNZWRpYVBsYXllclByaXZhdGVNZWRpYVNv
dXJjZUFWRk9iakM6OmN1cnJlbnRNZWRpYVRpbWUoKSBjb25zdApAQCAtNDMxLDE2ICs0MzcsMTkg
QEAgZG91YmxlIE1lZGlhUGxheWVyUHJpdmF0ZU1lZGlhU291cmNlQVZGT2JqQzo6aW5pdGlhbFRp
bWUoKSBjb25zdAogCiB2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZU1lZGlhU291cmNlQVZGT2JqQzo6
c2Vla1dpdGhUb2xlcmFuY2UoZG91YmxlIHRpbWUsIGRvdWJsZSBuZWdhdGl2ZVRocmVzaG9sZCwg
ZG91YmxlIHBvc2l0aXZlVGhyZXNob2xkKQogeworICAgIExPRyhNZWRpYVNvdXJjZSwgIk1lZGlh
UGxheWVyUHJpdmF0ZU1lZGlhU291cmNlQVZGT2JqQzo6c2Vla1dpdGhUb2xlcmFuY2UoJXApIC0g
dGltZSglcyksIG5lZ2F0aXZlVGhyZXNob2xkKCVzKSwgcG9zaXRpdmVUaHJlc2hvbGQoJXMpIiwg
dGhpcywgdG9TdHJpbmcodGltZSkudXRmOCgpLmRhdGEoKSwgdG9TdHJpbmcobmVnYXRpdmVUaHJl
c2hvbGQpLnV0ZjgoKS5kYXRhKCksIHRvU3RyaW5nKHBvc2l0aXZlVGhyZXNob2xkKS51dGY4KCku
ZGF0YSgpKTsKICAgICBtX3NlZWtpbmcgPSB0cnVlOwotICAgIG1fc2Vla0NvbXBsZXRlZCA9IGZh
bHNlOwogICAgIGF1dG8gd2Vha1RoaXMgPSBjcmVhdGVXZWFrUHRyKCk7CiAgICAgbV9wZW5kaW5n
U2VlayA9IHN0ZDo6bWFrZV91bmlxdWU8UGVuZGluZ1NlZWs+KE1lZGlhVGltZTo6Y3JlYXRlV2l0
aERvdWJsZSh0aW1lKSwgTWVkaWFUaW1lOjpjcmVhdGVXaXRoRG91YmxlKG5lZ2F0aXZlVGhyZXNo
b2xkKSwgTWVkaWFUaW1lOjpjcmVhdGVXaXRoRG91YmxlKHBvc2l0aXZlVGhyZXNob2xkKSk7CiAK
LSAgICBjYWxsT25NYWluVGhyZWFkKFt3ZWFrVGhpc10gewotICAgICAgICBpZiAoIXdlYWtUaGlz
KQotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB3ZWFrVGhpcy5nZXQoKS0+c2Vla0ludGVy
bmFsKCk7Ci0gICAgfSk7CisgICAgaWYgKG1fc2Vla1RpbWVyLmlzQWN0aXZlKCkpCisgICAgICAg
IG1fc2Vla1RpbWVyLnN0b3AoKTsKKyAgICBtX3NlZWtUaW1lci5zdGFydE9uZVNob3QoMCk7Cit9
CisKK3ZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFTb3VyY2VBVkZPYmpDOjpzZWVrVGltZXJG
aXJlZChUaW1lcjxNZWRpYVBsYXllclByaXZhdGVNZWRpYVNvdXJjZUFWRk9iakM+JikKK3sKKyAg
ICBzZWVrSW50ZXJuYWwoKTsKIH0KIAogdm9pZCBNZWRpYVBsYXllclByaXZhdGVNZWRpYVNvdXJj
ZUFWRk9iakM6OnNlZWtJbnRlcm5hbCgpCkBAIC00NjAsMTAgKzQ2OSwzMCBAQCB2b2lkIE1lZGlh
UGxheWVyUHJpdmF0ZU1lZGlhU291cmNlQVZGT2JqQzo6c2Vla0ludGVybmFsKCkKICAgICBlbHNl
CiAgICAgICAgIHNlZWtUaW1lID0gbV9tZWRpYVNvdXJjZVByaXZhdGUtPmZhc3RTZWVrVGltZUZv
ck1lZGlhVGltZShwZW5kaW5nU2Vlay0+dGFyZ2V0VGltZSwgcGVuZGluZ1NlZWstPnBvc2l0aXZl
VGhyZXNob2xkLCBwZW5kaW5nU2Vlay0+bmVnYXRpdmVUaHJlc2hvbGQpOwogCisgICAgTE9HKE1l
ZGlhU291cmNlLCAiTWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFTb3VyY2VBVkZPYmpDOjpzZWVrSW50
ZXJuYWwoJXApIC0gc2Vla1RpbWUoJXMpIiwgdGhpcywgdG9TdHJpbmcoc2Vla1RpbWUpLnV0Zjgo
KS5kYXRhKCkpOworCiAgICAgW21fc3luY2hyb25pemVyIHNldFJhdGU6MCB0aW1lOnRvQ01UaW1l
KHNlZWtUaW1lKV07CiAgICAgbV9tZWRpYVNvdXJjZVByaXZhdGUtPnNlZWtUb1RpbWUoc2Vla1Rp
bWUpOwogfQogCit2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZU1lZGlhU291cmNlQVZGT2JqQzo6d2Fp
dEZvclNlZWtDb21wbGV0ZWQoKQoreworICAgIGlmICghbV9zZWVraW5nKQorICAgICAgICByZXR1
cm47CisgICAgTE9HKE1lZGlhU291cmNlLCAiTWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFTb3VyY2VB
VkZPYmpDOjp3YWl0Rm9yU2Vla0NvbXBsZXRlZCglcCkiLCB0aGlzKTsKKyAgICBtX3NlZWtDb21w
bGV0ZWQgPSBmYWxzZTsKK30KKwordm9pZCBNZWRpYVBsYXllclByaXZhdGVNZWRpYVNvdXJjZUFW
Rk9iakM6OnNlZWtDb21wbGV0ZWQoKQoreworICAgIGlmIChtX3NlZWtDb21wbGV0ZWQpCisgICAg
ICAgIHJldHVybjsKKyAgICBMT0coTWVkaWFTb3VyY2UsICJNZWRpYVBsYXllclByaXZhdGVNZWRp
YVNvdXJjZUFWRk9iakM6OnNlZWtDb21wbGV0ZWQoJXApIiwgdGhpcyk7CisgICAgbV9zZWVrQ29t
cGxldGVkID0gdHJ1ZTsKKyAgICBpZiAoIW1fc2Vla2luZykKKyAgICAgICAgbV9wbGF5ZXItPnRp
bWVDaGFuZ2VkKCk7Cit9CisKIGJvb2wgTWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFTb3VyY2VBVkZP
YmpDOjpzZWVraW5nKCkgY29uc3QKIHsKICAgICByZXR1cm4gbV9zZWVraW5nICYmICFtX3NlZWtD
b21wbGV0ZWQ7CkBAIC01MDMsNyArNTMyLDcgQEAgZG91YmxlIE1lZGlhUGxheWVyUHJpdmF0ZU1l
ZGlhU291cmNlQVZGT2JqQzo6bWluVGltZVNlZWthYmxlKCkgY29uc3QKIAogc3RkOjp1bmlxdWVf
cHRyPFBsYXRmb3JtVGltZVJhbmdlcz4gTWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFTb3VyY2VBVkZP
YmpDOjpidWZmZXJlZCgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIG1fbWVkaWFTb3VyY2UgPyBtX21l
ZGlhU291cmNlLT5idWZmZXJlZCgpIDogUGxhdGZvcm1UaW1lUmFuZ2VzOjpjcmVhdGUoKTsKKyAg
ICByZXR1cm4gbV9tZWRpYVNvdXJjZVByaXZhdGUgPyBtX21lZGlhU291cmNlUHJpdmF0ZS0+YnVm
ZmVyZWQoKSA6IFBsYXRmb3JtVGltZVJhbmdlczo6Y3JlYXRlKCk7CiB9CiAKIGJvb2wgTWVkaWFQ
bGF5ZXJQcml2YXRlTWVkaWFTb3VyY2VBVkZPYmpDOjpkaWRMb2FkaW5nUHJvZ3Jlc3MoKSBjb25z
dApAQCAtNjM2LDggKzY2NSwxMCBAQCB2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZU1lZGlhU291cmNl
QVZGT2JqQzo6ZHVyYXRpb25DaGFuZ2VkKCkKICAgICBhdXRvIHdlYWtUaGlzID0gY3JlYXRlV2Vh
a1B0cigpOwogICAgIE5TQXJyYXkqIHRpbWVzID0gQFtbTlNWYWx1ZSB2YWx1ZVdpdGhDTVRpbWU6
dG9DTVRpbWUoZHVyYXRpb24pXV07CiAgICAgbV9kdXJhdGlvbk9ic2VydmVyID0gW21fc3luY2hy
b25pemVyIGFkZEJvdW5kYXJ5VGltZU9ic2VydmVyRm9yVGltZXM6dGltZXMgcXVldWU6ZGlzcGF0
Y2hfZ2V0X21haW5fcXVldWUoKSB1c2luZ0Jsb2NrOlt3ZWFrVGhpc10gewotICAgICAgICBpZiAo
d2Vha1RoaXMpCisgICAgICAgIGlmICh3ZWFrVGhpcykgewogICAgICAgICAgICAgd2Vha1RoaXMt
PnBhdXNlSW50ZXJuYWwoKTsKKyAgICAgICAgICAgIHdlYWtUaGlzLT5tX3BsYXllci0+dGltZUNo
YW5nZWQoKTsKKyAgICAgICAgfQogICAgIH1dOwogCiAgICAgaWYgKG1fcGxheWluZyAmJiBkdXJh
dGlvbiA8PSBjdXJyZW50TWVkaWFUaW1lKCkpCkBAIC02NzYsMTEgKzcwNyw2IEBAIHZvaWQgTWVk
aWFQbGF5ZXJQcml2YXRlTWVkaWFTb3VyY2VBVkZPYmpDOjpzZXRSZWFkeVN0YXRlKE1lZGlhUGxh
eWVyOjpSZWFkeVN0YXRlCiAKICAgICBtX3JlYWR5U3RhdGUgPSByZWFkeVN0YXRlOwogCi0gICAg
aWYgKCFtX3NlZWtDb21wbGV0ZWQgJiYgbV9yZWFkeVN0YXRlID49IE1lZGlhUGxheWVyOjpIYXZl
Q3VycmVudERhdGEpIHsKLSAgICAgICAgbV9zZWVrQ29tcGxldGVkID0gdHJ1ZTsKLSAgICAgICAg
bV9wbGF5ZXItPnRpbWVDaGFuZ2VkKCk7Ci0gICAgfQotCiAgICAgaWYgKHNob3VsZEJlUGxheWlu
ZygpKQogICAgICAgICBbbV9zeW5jaHJvbml6ZXIgc2V0UmF0ZTptX3JhdGVdOwogICAgIGVsc2UK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlv
bi9vYmpjL01lZGlhU291cmNlUHJpdmF0ZUFWRk9iakMuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9vYmpjL01lZGlhU291cmNlUHJpdmF0ZUFWRk9iakMu
aAppbmRleCAyYTgxMWU5YjY3Y2U4MzI3YzMxN2RlZjBkZTU0NzBiZTk5OGJkN2M2Li5jYmQxZDRl
OTJhM2I1NGNjNzM2NjM1Nzc3NWRlZGE5MTMyODQ5ZGE3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24vb2JqYy9NZWRpYVNvdXJjZVByaXZh
dGVBVkZPYmpDLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3Vu
ZGF0aW9uL29iamMvTWVkaWFTb3VyY2VQcml2YXRlQVZGT2JqQy5oCkBAIC00NSwzMCArNDUsMzUg
QEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBDRE1TZXNzaW9uOwogY2xhc3MgTWVkaWFQ
bGF5ZXJQcml2YXRlTWVkaWFTb3VyY2VBVkZPYmpDOworY2xhc3MgTWVkaWFTb3VyY2VQcml2YXRl
Q2xpZW50OwogY2xhc3MgU291cmNlQnVmZmVyUHJpdmF0ZUFWRk9iakM7CiBjbGFzcyBUaW1lUmFu
Z2VzOwogCiBjbGFzcyBNZWRpYVNvdXJjZVByaXZhdGVBVkZPYmpDIGZpbmFsIDogcHVibGljIE1l
ZGlhU291cmNlUHJpdmF0ZSB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFJlZlB0cjxNZWRpYVNvdXJj
ZVByaXZhdGVBVkZPYmpDPiBjcmVhdGUoTWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFTb3VyY2VBVkZP
YmpDKik7CisgICAgc3RhdGljIFJlZlB0cjxNZWRpYVNvdXJjZVByaXZhdGVBVkZPYmpDPiBjcmVh
dGUoTWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFTb3VyY2VBVkZPYmpDKiwgTWVkaWFTb3VyY2VQcml2
YXRlQ2xpZW50Kik7CiAgICAgdmlydHVhbCB+TWVkaWFTb3VyY2VQcml2YXRlQVZGT2JqQygpOwog
CiAgICAgTWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFTb3VyY2VBVkZPYmpDKiBwbGF5ZXIoKSBjb25z
dCB7IHJldHVybiBtX3BsYXllcjsgfQogICAgIGNvbnN0IFZlY3RvcjxTb3VyY2VCdWZmZXJQcml2
YXRlQVZGT2JqQyo+JiBhY3RpdmVTb3VyY2VCdWZmZXJzKCkgY29uc3QgeyByZXR1cm4gbV9hY3Rp
dmVTb3VyY2VCdWZmZXJzOyB9CiAKICAgICB2aXJ0dWFsIEFkZFN0YXR1cyBhZGRTb3VyY2VCdWZm
ZXIoY29uc3QgQ29udGVudFR5cGUmLCBSZWZQdHI8U291cmNlQnVmZmVyUHJpdmF0ZT4mKSBvdmVy
cmlkZTsKLSAgICB2aXJ0dWFsIE1lZGlhVGltZSBkdXJhdGlvbigpIG92ZXJyaWRlOwotICAgIHZp
cnR1YWwgdm9pZCBzZXREdXJhdGlvbihjb25zdCBNZWRpYVRpbWUmKSBvdmVycmlkZTsKKyAgICB2
aXJ0dWFsIHZvaWQgZHVyYXRpb25DaGFuZ2VkKCkgb3ZlcnJpZGU7CiAgICAgdmlydHVhbCB2b2lk
IG1hcmtFbmRPZlN0cmVhbShFbmRPZlN0cmVhbVN0YXR1cykgb3ZlcnJpZGU7CiAgICAgdmlydHVh
bCB2b2lkIHVubWFya0VuZE9mU3RyZWFtKCkgb3ZlcnJpZGU7CiAgICAgdmlydHVhbCBNZWRpYVBs
YXllcjo6UmVhZHlTdGF0ZSByZWFkeVN0YXRlKCkgY29uc3Qgb3ZlcnJpZGU7CiAgICAgdmlydHVh
bCB2b2lkIHNldFJlYWR5U3RhdGUoTWVkaWFQbGF5ZXI6OlJlYWR5U3RhdGUpIG92ZXJyaWRlOwor
ICAgIHZpcnR1YWwgdm9pZCB3YWl0Rm9yU2Vla0NvbXBsZXRlZCgpIG92ZXJyaWRlOworICAgIHZp
cnR1YWwgdm9pZCBzZWVrQ29tcGxldGVkKCkgb3ZlcnJpZGU7CisKKyAgICBNZWRpYVRpbWUgZHVy
YXRpb24oKTsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8UGxhdGZvcm1UaW1lUmFuZ2VzPiBidWZmZXJl
ZCgpOwogCiAgICAgYm9vbCBoYXNBdWRpbygpIGNvbnN0OwogICAgIGJvb2wgaGFzVmlkZW8oKSBj
b25zdDsKIAotICAgIHZvaWQgc2Vla1RvVGltZShNZWRpYVRpbWUpOwotICAgIE1lZGlhVGltZSBm
YXN0U2Vla1RpbWVGb3JNZWRpYVRpbWUoTWVkaWFUaW1lLCBNZWRpYVRpbWUgbmVnYXRpdmVUaHJl
c2hvbGQsIE1lZGlhVGltZSBwb3NpdGl2ZVRocmVzaG9sZCk7CisgICAgdm9pZCBzZWVrVG9UaW1l
KGNvbnN0IE1lZGlhVGltZSYpOworICAgIE1lZGlhVGltZSBmYXN0U2Vla1RpbWVGb3JNZWRpYVRp
bWUoY29uc3QgTWVkaWFUaW1lJiwgY29uc3QgTWVkaWFUaW1lJiBuZWdhdGl2ZVRocmVzaG9sZCwg
Y29uc3QgTWVkaWFUaW1lJiBwb3NpdGl2ZVRocmVzaG9sZCk7CiAgICAgSW50U2l6ZSBuYXR1cmFs
U2l6ZSgpIGNvbnN0OwogCiAjaWYgRU5BQkxFKEVOQ1JZUFRFRF9NRURJQV9WMikKQEAgLTc2LDcg
KzgxLDcgQEAgcHVibGljOgogI2VuZGlmCiAKIHByaXZhdGU6Ci0gICAgTWVkaWFTb3VyY2VQcml2
YXRlQVZGT2JqQyhNZWRpYVBsYXllclByaXZhdGVNZWRpYVNvdXJjZUFWRk9iakMqKTsKKyAgICBN
ZWRpYVNvdXJjZVByaXZhdGVBVkZPYmpDKE1lZGlhUGxheWVyUHJpdmF0ZU1lZGlhU291cmNlQVZG
T2JqQyosIE1lZGlhU291cmNlUHJpdmF0ZUNsaWVudCopOwogCiAgICAgdm9pZCBzb3VyY2VCdWZm
ZXJQcml2YXRlRGlkQ2hhbmdlQWN0aXZlU3RhdGUoU291cmNlQnVmZmVyUHJpdmF0ZUFWRk9iakMq
LCBib29sIGFjdGl2ZSk7CiAgICAgdm9pZCBzb3VyY2VCdWZmZXJQcml2YXRlRGlkUmVjZWl2ZUlu
aXRpYWxpemF0aW9uU2VnbWVudChTb3VyY2VCdWZmZXJQcml2YXRlQVZGT2JqQyopOwpAQCAtODks
NyArOTQsNyBAQCBwcml2YXRlOgogICAgIGZyaWVuZCBjbGFzcyBTb3VyY2VCdWZmZXJQcml2YXRl
QVZGT2JqQzsKIAogICAgIE1lZGlhUGxheWVyUHJpdmF0ZU1lZGlhU291cmNlQVZGT2JqQyogbV9w
bGF5ZXI7Ci0gICAgTWVkaWFUaW1lIG1fZHVyYXRpb247CisgICAgUmVmUHRyPE1lZGlhU291cmNl
UHJpdmF0ZUNsaWVudD4gbV9jbGllbnQ7CiAgICAgVmVjdG9yPFJlZlB0cjxTb3VyY2VCdWZmZXJQ
cml2YXRlQVZGT2JqQz4+IG1fc291cmNlQnVmZmVyczsKICAgICBWZWN0b3I8U291cmNlQnVmZmVy
UHJpdmF0ZUFWRk9iakMqPiBtX2FjdGl2ZVNvdXJjZUJ1ZmZlcnM7CiAgICAgRGVxdWU8U291cmNl
QnVmZmVyUHJpdmF0ZUFWRk9iakMqPiBtX3NvdXJjZUJ1ZmZlcnNOZWVkaW5nU2Vzc2lvbnM7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24v
b2JqYy9NZWRpYVNvdXJjZVByaXZhdGVBVkZPYmpDLm1tIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL29iamMvTWVkaWFTb3VyY2VQcml2YXRlQVZGT2JqQy5t
bQppbmRleCAxZmFmMTk3ZDA0MjNiZWEzZGQwYWFiOTgyOTMzOWMxY2FmYTAxYTBmLi5mMmE0YjM0
ZjMwNDcyNmRkZGUzYWVjMmNmYzAzNTBiYTQyZTllNTQ1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24vb2JqYy9NZWRpYVNvdXJjZVByaXZh
dGVBVkZPYmpDLm1tCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2F2Zm91
bmRhdGlvbi9vYmpjL01lZGlhU291cmNlUHJpdmF0ZUFWRk9iakMubW0KQEAgLTMyLDYgKzMyLDcg
QEAKICNpbXBvcnQgIkNvbnRlbnRUeXBlLmgiCiAjaW1wb3J0ICJFeGNlcHRpb25Db2RlUGxhY2Vo
b2xkZXIuaCIKICNpbXBvcnQgIk1lZGlhUGxheWVyUHJpdmF0ZU1lZGlhU291cmNlQVZGT2JqQy5o
IgorI2ltcG9ydCAiTWVkaWFTb3VyY2VQcml2YXRlQ2xpZW50LmgiCiAjaW1wb3J0ICJTb3VyY2VC
dWZmZXJQcml2YXRlQVZGT2JqQy5oIgogI2ltcG9ydCAiU29mdExpbmtpbmcuaCIKICNpbXBvcnQg
PG9iamMvcnVudGltZS5oPgpAQCAtNDMsMTQgKzQ0LDE2IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsK
ICNwcmFnbWEgbWFyayAtCiAjcHJhZ21hIG1hcmsgTWVkaWFTb3VyY2VQcml2YXRlQVZGT2JqQwog
Ci1SZWZQdHI8TWVkaWFTb3VyY2VQcml2YXRlQVZGT2JqQz4gTWVkaWFTb3VyY2VQcml2YXRlQVZG
T2JqQzo6Y3JlYXRlKE1lZGlhUGxheWVyUHJpdmF0ZU1lZGlhU291cmNlQVZGT2JqQyogcGFyZW50
KQorUmVmUHRyPE1lZGlhU291cmNlUHJpdmF0ZUFWRk9iakM+IE1lZGlhU291cmNlUHJpdmF0ZUFW
Rk9iakM6OmNyZWF0ZShNZWRpYVBsYXllclByaXZhdGVNZWRpYVNvdXJjZUFWRk9iakMqIHBhcmVu
dCwgTWVkaWFTb3VyY2VQcml2YXRlQ2xpZW50KiBjbGllbnQpCiB7Ci0gICAgcmV0dXJuIGFkb3B0
UmVmKG5ldyBNZWRpYVNvdXJjZVByaXZhdGVBVkZPYmpDKHBhcmVudCkpOworICAgIFJlZlB0cjxN
ZWRpYVNvdXJjZVByaXZhdGVBVkZPYmpDPiBtZWRpYVNvdXJjZVByaXZhdGUgPSBhZG9wdFJlZihu
ZXcgTWVkaWFTb3VyY2VQcml2YXRlQVZGT2JqQyhwYXJlbnQsIGNsaWVudCkpOworICAgIGNsaWVu
dC0+c2V0UHJpdmF0ZUFuZE9wZW4oKm1lZGlhU291cmNlUHJpdmF0ZSk7CisgICAgcmV0dXJuIG1l
ZGlhU291cmNlUHJpdmF0ZTsKIH0KIAotTWVkaWFTb3VyY2VQcml2YXRlQVZGT2JqQzo6TWVkaWFT
b3VyY2VQcml2YXRlQVZGT2JqQyhNZWRpYVBsYXllclByaXZhdGVNZWRpYVNvdXJjZUFWRk9iakMq
IHBhcmVudCkKK01lZGlhU291cmNlUHJpdmF0ZUFWRk9iakM6Ok1lZGlhU291cmNlUHJpdmF0ZUFW
Rk9iakMoTWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFTb3VyY2VBVkZPYmpDKiBwYXJlbnQsIE1lZGlh
U291cmNlUHJpdmF0ZUNsaWVudCogY2xpZW50KQogICAgIDogbV9wbGF5ZXIocGFyZW50KQotICAg
ICwgbV9kdXJhdGlvbihNZWRpYVRpbWU6OmludmFsaWRUaW1lKCkpCisgICAgLCBtX2NsaWVudChj
bGllbnQpCiAgICAgLCBtX2lzRW5kZWQoZmFsc2UpCiB7CiB9CkBAIC05MSwxNSArOTQsMTYgQEAg
dm9pZCBNZWRpYVNvdXJjZVByaXZhdGVBVkZPYmpDOjpyZW1vdmVTb3VyY2VCdWZmZXIoU291cmNl
QnVmZmVyUHJpdmF0ZSogYnVmZmVyKQogCiBNZWRpYVRpbWUgTWVkaWFTb3VyY2VQcml2YXRlQVZG
T2JqQzo6ZHVyYXRpb24oKQogewotICAgIHJldHVybiBtX2R1cmF0aW9uOworICAgIHJldHVybiBN
ZWRpYVRpbWU6OmNyZWF0ZVdpdGhEb3VibGUobV9jbGllbnQtPmR1cmF0aW9uKCkpOwogfQogCi12
b2lkIE1lZGlhU291cmNlUHJpdmF0ZUFWRk9iakM6OnNldER1cmF0aW9uKGNvbnN0IE1lZGlhVGlt
ZSYgZHVyYXRpb24pCitzdGQ6OnVuaXF1ZV9wdHI8UGxhdGZvcm1UaW1lUmFuZ2VzPiBNZWRpYVNv
dXJjZVByaXZhdGVBVkZPYmpDOjpidWZmZXJlZCgpCiB7Ci0gICAgaWYgKGR1cmF0aW9uID09IG1f
ZHVyYXRpb24pCi0gICAgICAgIHJldHVybjsKKyAgICByZXR1cm4gbV9jbGllbnQtPmJ1ZmZlcmVk
KCk7Cit9CiAKLSAgICBtX2R1cmF0aW9uID0gZHVyYXRpb247Cit2b2lkIE1lZGlhU291cmNlUHJp
dmF0ZUFWRk9iakM6OmR1cmF0aW9uQ2hhbmdlZCgpCit7CiAgICAgbV9wbGF5ZXItPmR1cmF0aW9u
Q2hhbmdlZCgpOwogfQogCkBAIC0xMjYsNiArMTMwLDE2IEBAIHZvaWQgTWVkaWFTb3VyY2VQcml2
YXRlQVZGT2JqQzo6c2V0UmVhZHlTdGF0ZShNZWRpYVBsYXllcjo6UmVhZHlTdGF0ZSByZWFkeVN0
YXRlCiAgICAgbV9wbGF5ZXItPnNldFJlYWR5U3RhdGUocmVhZHlTdGF0ZSk7CiB9CiAKK3ZvaWQg
TWVkaWFTb3VyY2VQcml2YXRlQVZGT2JqQzo6d2FpdEZvclNlZWtDb21wbGV0ZWQoKQoreworICAg
IG1fcGxheWVyLT53YWl0Rm9yU2Vla0NvbXBsZXRlZCgpOworfQorCit2b2lkIE1lZGlhU291cmNl
UHJpdmF0ZUFWRk9iakM6OnNlZWtDb21wbGV0ZWQoKQoreworICAgIG1fcGxheWVyLT5zZWVrQ29t
cGxldGVkKCk7Cit9CisKIHZvaWQgTWVkaWFTb3VyY2VQcml2YXRlQVZGT2JqQzo6c291cmNlQnVm
ZmVyUHJpdmF0ZURpZENoYW5nZUFjdGl2ZVN0YXRlKFNvdXJjZUJ1ZmZlclByaXZhdGVBVkZPYmpD
KiBidWZmZXIsIGJvb2wgYWN0aXZlKQogewogICAgIGlmIChhY3RpdmUgJiYgIW1fYWN0aXZlU291
cmNlQnVmZmVycy5jb250YWlucyhidWZmZXIpKQpAQCAtMTc4LDEzICsxOTIsMTIgQEAgYm9vbCBN
ZWRpYVNvdXJjZVByaXZhdGVBVkZPYmpDOjpoYXNWaWRlbygpIGNvbnN0CiAgICAgcmV0dXJuIHN0
ZDo6YW55X29mKG1fYWN0aXZlU291cmNlQnVmZmVycy5iZWdpbigpLCBtX2FjdGl2ZVNvdXJjZUJ1
ZmZlcnMuZW5kKCksIE1lZGlhU291cmNlUHJpdmF0ZUFWRk9iakNIYXNWaWRlbyk7CiB9CiAKLXZv
aWQgTWVkaWFTb3VyY2VQcml2YXRlQVZGT2JqQzo6c2Vla1RvVGltZShNZWRpYVRpbWUgdGltZSkK
K3ZvaWQgTWVkaWFTb3VyY2VQcml2YXRlQVZGT2JqQzo6c2Vla1RvVGltZShjb25zdCBNZWRpYVRp
bWUmIHRpbWUpCiB7Ci0gICAgZm9yIChhdXRvJiBidWZmZXIgOiBtX2FjdGl2ZVNvdXJjZUJ1ZmZl
cnMpCi0gICAgICAgIGJ1ZmZlci0+c2Vla1RvVGltZSh0aW1lKTsKKyAgICBtX2NsaWVudC0+c2Vl
a1RvVGltZSh0aW1lKTsKIH0KIAotTWVkaWFUaW1lIE1lZGlhU291cmNlUHJpdmF0ZUFWRk9iakM6
OmZhc3RTZWVrVGltZUZvck1lZGlhVGltZShNZWRpYVRpbWUgdGFyZ2V0VGltZSwgTWVkaWFUaW1l
IG5lZ2F0aXZlVGhyZXNob2xkLCBNZWRpYVRpbWUgcG9zaXRpdmVUaHJlc2hvbGQpCitNZWRpYVRp
bWUgTWVkaWFTb3VyY2VQcml2YXRlQVZGT2JqQzo6ZmFzdFNlZWtUaW1lRm9yTWVkaWFUaW1lKGNv
bnN0IE1lZGlhVGltZSYgdGFyZ2V0VGltZSwgY29uc3QgTWVkaWFUaW1lJiBuZWdhdGl2ZVRocmVz
aG9sZCwgY29uc3QgTWVkaWFUaW1lJiBwb3NpdGl2ZVRocmVzaG9sZCkKIHsKICAgICBNZWRpYVRp
bWUgc2Vla1RpbWUgPSB0YXJnZXRUaW1lOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24vb2JqYy9Tb3VyY2VCdWZmZXJQcml2YXRlQVZG
T2JqQy5tbSBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9v
YmpjL1NvdXJjZUJ1ZmZlclByaXZhdGVBVkZPYmpDLm1tCmluZGV4IDkyZTI3MGRiNjQ0NDRlMGQw
YTRkYWZiMzJjY2NhNjAyMGJlYzk5YjQuLmJlMmEzY2E5YTkwMjA1OTkyMDczM2E0NTE0MWRmNmFh
ODllMjE2YzkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2F2
Zm91bmRhdGlvbi9vYmpjL1NvdXJjZUJ1ZmZlclByaXZhdGVBVkZPYmpDLm1tCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9vYmpjL1NvdXJjZUJ1ZmZl
clByaXZhdGVBVkZPYmpDLm1tCkBAIC0xMjIsNiArMTIyLDcgQEAgU09GVF9MSU5LKENvcmVNZWRp
YSwgQ01WaWRlb0Zvcm1hdERlc2NyaXB0aW9uR2V0UHJlc2VudGF0aW9uRGltZW5zaW9ucywgQ0dT
aXplLAogLSAodm9pZClhcHBlbmRTdHJlYW1EYXRhOihOU0RhdGEgKilkYXRhOwogLSAodm9pZClz
ZXRTaG91bGRQcm92aWRlTWVkaWFEYXRhOihCT09MKXNob3VsZFByb3ZpZGVNZWRpYURhdGEgZm9y
VHJhY2tJRDooQ01QZXJzaXN0ZW50VHJhY2tJRCl0cmFja0lEOwogLSAoQk9PTClzaG91bGRQcm92
aWRlTWVkaWFEYXRhRm9yVHJhY2tJRDooQ01QZXJzaXN0ZW50VHJhY2tJRCl0cmFja0lEOworLSAo
dm9pZClwcm92aWRlUGVuZGluZ01lZGlhRGF0YTsKIC0gKHZvaWQpcHJvY2Vzc0NvbnRlbnRLZXlS
ZXNwb25zZURhdGE6KE5TRGF0YSAqKWNvbnRlbnRLZXlSZXNwb25zZURhdGEgZm9yVHJhY2tJRDoo
Q01QZXJzaXN0ZW50VHJhY2tJRCl0cmFja0lEOwogLSAodm9pZClwcm9jZXNzQ29udGVudEtleVJl
c3BvbnNlRXJyb3I6KE5TRXJyb3IgKillcnJvciBmb3JUcmFja0lEOihDTVBlcnNpc3RlbnRUcmFj
a0lEKXRyYWNrSUQ7CiAtICh2b2lkKXJlbmV3RXhwaXJpbmdDb250ZW50S2V5UmVzcG9uc2VEYXRh
Rm9yVHJhY2tJRDooQ01QZXJzaXN0ZW50VHJhY2tJRCl0cmFja0lEOwpAQCAtNjgyLDcgKzY4Myw3
IEBAIHN0YXRpYyBkaXNwYXRjaF9xdWV1ZV90IGdsb2JhbERhdGFQYXJzZXJRdWV1ZSgpCiAgICAg
c3RhdGljIGRpc3BhdGNoX3F1ZXVlX3QgZ2xvYmFsUXVldWU7CiAgICAgc3RhdGljIGRpc3BhdGNo
X29uY2VfdCBvbmNlVG9rZW47CiAgICAgZGlzcGF0Y2hfb25jZSgmb25jZVRva2VuLCBeewotICAg
ICAgICBnbG9iYWxRdWV1ZSA9IGRpc3BhdGNoX3F1ZXVlX2NyZWF0ZSgiU291cmNlQnVmZmVyUHJp
dmF0ZUFWRk9iakMgZGF0YSBwYXJzZXIgcXVldWUiLCBESVNQQVRDSF9RVUVVRV9TRVJJQUwpOwor
ICAgICAgICBnbG9iYWxRdWV1ZSA9IGRpc3BhdGNoX3F1ZXVlX2NyZWF0ZSgiU291cmNlQnVmZmVy
UHJpdmF0ZUFWRk9iakMgZGF0YSBwYXJzZXIgcXVldWUiLCBESVNQQVRDSF9RVUVVRV9DT05DVVJS
RU5UKTsKICAgICB9KTsKICAgICByZXR1cm4gZ2xvYmFsUXVldWU7CiB9CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tb2NrL21lZGlhc291cmNlL01vY2tNZWRpYVBsYXllck1l
ZGlhU291cmNlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21vY2svbWVkaWFzb3VyY2Uv
TW9ja01lZGlhUGxheWVyTWVkaWFTb3VyY2UuY3BwCmluZGV4IGUzNzVmY2U2YjRiMmE5YTkxMjdh
YmFiY2YyMjM0Njk3YmUyODNjN2IuLjZmNTFjMjQ4NjczZDQxMWY1OThkNWUyNmZhYmE0MjA4Yjky
OTg4NmYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21vY2svbWVkaWFzb3Vy
Y2UvTW9ja01lZGlhUGxheWVyTWVkaWFTb3VyY2UuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL21vY2svbWVkaWFzb3VyY2UvTW9ja01lZGlhUGxheWVyTWVkaWFTb3VyY2UuY3BwCkBA
IC04NCwxMCArODQsMTAgQEAgTWVkaWFQbGF5ZXI6OlN1cHBvcnRzVHlwZSBNb2NrTWVkaWFQbGF5
ZXJNZWRpYVNvdXJjZTo6c3VwcG9ydHNUeXBlKGNvbnN0IE1lZGlhRW4KIE1vY2tNZWRpYVBsYXll
ck1lZGlhU291cmNlOjpNb2NrTWVkaWFQbGF5ZXJNZWRpYVNvdXJjZShNZWRpYVBsYXllciogcGxh
eWVyKQogICAgIDogbV9wbGF5ZXIocGxheWVyKQogICAgICwgbV9jdXJyZW50VGltZShNZWRpYVRp
bWU6Onplcm9UaW1lKCkpCi0gICAgLCBtX2R1cmF0aW9uKE1lZGlhVGltZTo6emVyb1RpbWUoKSkK
ICAgICAsIG1fcmVhZHlTdGF0ZShNZWRpYVBsYXllcjo6SGF2ZU5vdGhpbmcpCiAgICAgLCBtX25l
dHdvcmtTdGF0ZShNZWRpYVBsYXllcjo6RW1wdHkpCiAgICAgLCBtX3BsYXlpbmcoZmFsc2UpCisg
ICAgLCBtX3NlZWtDb21wbGV0ZWQodHJ1ZSkKIHsKIH0KIApAQCAtMTAyLDkgKzEwMiw3IEBAIHZv
aWQgTW9ja01lZGlhUGxheWVyTWVkaWFTb3VyY2U6OmxvYWQoY29uc3QgU3RyaW5nJikKIAogdm9p
ZCBNb2NrTWVkaWFQbGF5ZXJNZWRpYVNvdXJjZTo6bG9hZChjb25zdCBTdHJpbmcmLCBNZWRpYVNv
dXJjZVByaXZhdGVDbGllbnQqIHNvdXJjZSkKIHsKLSAgICBtX21lZGlhU291cmNlID0gc291cmNl
OwotICAgIG1fbWVkaWFTb3VyY2VQcml2YXRlID0gTW9ja01lZGlhU291cmNlUHJpdmF0ZTo6Y3Jl
YXRlKHRoaXMpOwotICAgIG1fbWVkaWFTb3VyY2UtPnNldFByaXZhdGVBbmRPcGVuKCptX21lZGlh
U291cmNlUHJpdmF0ZSk7CisgICAgbV9tZWRpYVNvdXJjZVByaXZhdGUgPSBNb2NrTWVkaWFTb3Vy
Y2VQcml2YXRlOjpjcmVhdGUodGhpcywgc291cmNlKTsKIH0KIAogdm9pZCBNb2NrTWVkaWFQbGF5
ZXJNZWRpYVNvdXJjZTo6Y2FuY2VsTG9hZCgpCkBAIC0xNDMsNyArMTQxLDcgQEAgdm9pZCBNb2Nr
TWVkaWFQbGF5ZXJNZWRpYVNvdXJjZTo6c2V0VmlzaWJsZShib29sKQogCiBib29sIE1vY2tNZWRp
YVBsYXllck1lZGlhU291cmNlOjpzZWVraW5nKCkgY29uc3QKIHsKLSAgICByZXR1cm4gZmFsc2U7
CisgICAgcmV0dXJuICFtX3NlZWtDb21wbGV0ZWQ7CiB9CiAKIGJvb2wgTW9ja01lZGlhUGxheWVy
TWVkaWFTb3VyY2U6OnBhdXNlZCgpIGNvbnN0CkBAIC0xNjgsOCArMTY2LDggQEAgZG91YmxlIE1v
Y2tNZWRpYVBsYXllck1lZGlhU291cmNlOjptYXhUaW1lU2Vla2FibGVEb3VibGUoKSBjb25zdAog
CiBzdGQ6OnVuaXF1ZV9wdHI8UGxhdGZvcm1UaW1lUmFuZ2VzPiBNb2NrTWVkaWFQbGF5ZXJNZWRp
YVNvdXJjZTo6YnVmZmVyZWQoKSBjb25zdAogewotICAgIGlmIChtX21lZGlhU291cmNlKQotICAg
ICAgICByZXR1cm4gbV9tZWRpYVNvdXJjZS0+YnVmZmVyZWQoKTsKKyAgICBpZiAobV9tZWRpYVNv
dXJjZVByaXZhdGUpCisgICAgICAgIHJldHVybiBtX21lZGlhU291cmNlUHJpdmF0ZS0+YnVmZmVy
ZWQoKTsKIAogICAgIHJldHVybiBQbGF0Zm9ybVRpbWVSYW5nZXM6OmNyZWF0ZSgpOwogfQpAQCAt
MTk0LDcgKzE5Miw3IEBAIGRvdWJsZSBNb2NrTWVkaWFQbGF5ZXJNZWRpYVNvdXJjZTo6Y3VycmVu
dFRpbWVEb3VibGUoKSBjb25zdAogCiBkb3VibGUgTW9ja01lZGlhUGxheWVyTWVkaWFTb3VyY2U6
OmR1cmF0aW9uRG91YmxlKCkgY29uc3QKIHsKLSAgICByZXR1cm4gbV9kdXJhdGlvbi50b0RvdWJs
ZSgpOworICAgIHJldHVybiBtX21lZGlhU291cmNlUHJpdmF0ZSA/IG1fbWVkaWFTb3VyY2VQcml2
YXRlLT5kdXJhdGlvbigpIDogMDsKIH0KIAogdm9pZCBNb2NrTWVkaWFQbGF5ZXJNZWRpYVNvdXJj
ZTo6c2Vla1dpdGhUb2xlcmFuY2UoZG91YmxlIHRpbWUsIGRvdWJsZSBuZWdhdGl2ZVRvbGVyYW5j
ZSwgZG91YmxlIHBvc2l0aXZlVG9sZXJhbmNlKQpAQCAtMjA0LDE4ICsyMDIsMjEgQEAgdm9pZCBN
b2NrTWVkaWFQbGF5ZXJNZWRpYVNvdXJjZTo6c2Vla1dpdGhUb2xlcmFuY2UoZG91YmxlIHRpbWUs
IGRvdWJsZSBuZWdhdGl2ZVQKICAgICAgICAgbV9tZWRpYVNvdXJjZVByaXZhdGUtPnNlZWtUb1Rp
bWUoTWVkaWFUaW1lOjpjcmVhdGVXaXRoRG91YmxlKHRpbWUpKTsKICAgICB9IGVsc2UKICAgICAg
ICAgbV9jdXJyZW50VGltZSA9IG1fbWVkaWFTb3VyY2VQcml2YXRlLT5zZWVrVG9UaW1lKE1lZGlh
VGltZTo6Y3JlYXRlV2l0aERvdWJsZSh0aW1lKSwgTWVkaWFUaW1lOjpjcmVhdGVXaXRoRG91Ymxl
KG5lZ2F0aXZlVG9sZXJhbmNlKSwgTWVkaWFUaW1lOjpjcmVhdGVXaXRoRG91YmxlKHBvc2l0aXZl
VG9sZXJhbmNlKSk7Ci0gICAgbV9wbGF5ZXItPnRpbWVDaGFuZ2VkKCk7CiAKLSAgICBpZiAobV9w
bGF5aW5nKQotICAgICAgICBjYWxsT25NYWluVGhyZWFkKGJpbmQoJk1vY2tNZWRpYVBsYXllck1l
ZGlhU291cmNlOjphZHZhbmNlQ3VycmVudFRpbWUsIHRoaXMpKTsKKyAgICBpZiAobV9zZWVrQ29t
cGxldGVkKSB7CisgICAgICAgIG1fcGxheWVyLT50aW1lQ2hhbmdlZCgpOworCisgICAgICAgIGlm
IChtX3BsYXlpbmcpCisgICAgICAgICAgICBjYWxsT25NYWluVGhyZWFkKGJpbmQoJk1vY2tNZWRp
YVBsYXllck1lZGlhU291cmNlOjphZHZhbmNlQ3VycmVudFRpbWUsIHRoaXMpKTsKKyAgICB9CiB9
CiAKIHZvaWQgTW9ja01lZGlhUGxheWVyTWVkaWFTb3VyY2U6OmFkdmFuY2VDdXJyZW50VGltZSgp
CiB7Ci0gICAgaWYgKCFtX21lZGlhU291cmNlKQorICAgIGlmICghbV9tZWRpYVNvdXJjZVByaXZh
dGUpCiAgICAgICAgIHJldHVybjsKIAotICAgIGF1dG8gYnVmZmVyZWQgPSBtX21lZGlhU291cmNl
LT5idWZmZXJlZCgpOworICAgIGF1dG8gYnVmZmVyZWQgPSBtX21lZGlhU291cmNlUHJpdmF0ZS0+
YnVmZmVyZWQoKTsKICAgICBzaXplX3QgcG9zID0gYnVmZmVyZWQtPmZpbmQobV9jdXJyZW50VGlt
ZSk7CiAgICAgaWYgKHBvcyA9PSBub3RGb3VuZCkKICAgICAgICAgcmV0dXJuOwpAQCAtMjUyLDYg
KzI1MywyMyBAQCB2b2lkIE1vY2tNZWRpYVBsYXllck1lZGlhU291cmNlOjpzZXROZXR3b3JrU3Rh
dGUoTWVkaWFQbGF5ZXI6Ok5ldHdvcmtTdGF0ZSBuZXR3bwogICAgIG1fcGxheWVyLT5uZXR3b3Jr
U3RhdGVDaGFuZ2VkKCk7CiB9CiAKK3ZvaWQgTW9ja01lZGlhUGxheWVyTWVkaWFTb3VyY2U6Ondh
aXRGb3JTZWVrQ29tcGxldGVkKCkKK3sKKyAgICBtX3NlZWtDb21wbGV0ZWQgPSBmYWxzZTsKK30K
Kwordm9pZCBNb2NrTWVkaWFQbGF5ZXJNZWRpYVNvdXJjZTo6c2Vla0NvbXBsZXRlZCgpCit7Cisg
ICAgaWYgKG1fc2Vla0NvbXBsZXRlZCkKKyAgICAgICAgcmV0dXJuOworICAgIG1fc2Vla0NvbXBs
ZXRlZCA9IHRydWU7CisKKyAgICBtX3BsYXllci0+dGltZUNoYW5nZWQoKTsKKworICAgIGlmICht
X3BsYXlpbmcpCisgICAgICAgIGNhbGxPbk1haW5UaHJlYWQoYmluZCgmTW9ja01lZGlhUGxheWVy
TWVkaWFTb3VyY2U6OmFkdmFuY2VDdXJyZW50VGltZSwgdGhpcykpOworfQorCiB1bnNpZ25lZCBs
b25nIE1vY2tNZWRpYVBsYXllck1lZGlhU291cmNlOjp0b3RhbFZpZGVvRnJhbWVzKCkKIHsKICAg
ICByZXR1cm4gbV9tZWRpYVNvdXJjZVByaXZhdGUgPyBtX21lZGlhU291cmNlUHJpdmF0ZS0+dG90
YWxWaWRlb0ZyYW1lcygpIDogMDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L21vY2svbWVkaWFzb3VyY2UvTW9ja01lZGlhUGxheWVyTWVkaWFTb3VyY2UuaCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL21vY2svbWVkaWFzb3VyY2UvTW9ja01lZGlhUGxheWVyTWVkaWFTb3Vy
Y2UuaAppbmRleCA5MmUxM2IxNjU5MmM1MWUyMWU0Njc0ZjU4MWY5YThmNmE2YmVmYTgxLi41YTZk
YTlkZDM5M2U5MDk5YjZkOTI2ZWVhM2VjOWJiMTBmNjg4Mjk1IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9tb2NrL21lZGlhc291cmNlL01vY2tNZWRpYVBsYXllck1lZGlhU291
cmNlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbW9jay9tZWRpYXNvdXJjZS9Nb2Nr
TWVkaWFQbGF5ZXJNZWRpYVNvdXJjZS5oCkBAIC01Miw2ICs1Miw4IEBAIHB1YmxpYzoKICAgICB2
aXJ0dWFsIE1lZGlhUGxheWVyOjpSZWFkeVN0YXRlIHJlYWR5U3RhdGUoKSBjb25zdCBvdmVycmlk
ZTsKICAgICB2b2lkIHNldFJlYWR5U3RhdGUoTWVkaWFQbGF5ZXI6OlJlYWR5U3RhdGUpOwogICAg
IHZvaWQgc2V0TmV0d29ya1N0YXRlKE1lZGlhUGxheWVyOjpOZXR3b3JrU3RhdGUpOworICAgIHZv
aWQgd2FpdEZvclNlZWtDb21wbGV0ZWQoKTsKKyAgICB2b2lkIHNlZWtDb21wbGV0ZWQoKTsKIAog
cHJpdmF0ZToKICAgICBNb2NrTWVkaWFQbGF5ZXJNZWRpYVNvdXJjZShNZWRpYVBsYXllciopOwpA
QCAtODMsNyArODUsNiBAQCBwcml2YXRlOgogICAgIHZpcnR1YWwgZG91YmxlIHRvdGFsRnJhbWVE
ZWxheSgpIG92ZXJyaWRlOwogCiAgICAgTWVkaWFQbGF5ZXIqIG1fcGxheWVyOwotICAgIFJlZlB0
cjxNZWRpYVNvdXJjZVByaXZhdGVDbGllbnQ+IG1fbWVkaWFTb3VyY2U7CiAgICAgUmVmUHRyPE1v
Y2tNZWRpYVNvdXJjZVByaXZhdGU+IG1fbWVkaWFTb3VyY2VQcml2YXRlOwogCiAgICAgTWVkaWFU
aW1lIG1fY3VycmVudFRpbWU7CkBAIC05MSw2ICs5Miw3IEBAIHByaXZhdGU6CiAgICAgTWVkaWFQ
bGF5ZXI6OlJlYWR5U3RhdGUgbV9yZWFkeVN0YXRlOwogICAgIE1lZGlhUGxheWVyOjpOZXR3b3Jr
U3RhdGUgbV9uZXR3b3JrU3RhdGU7CiAgICAgYm9vbCBtX3BsYXlpbmc7CisgICAgYm9vbCBtX3Nl
ZWtDb21wbGV0ZWQ7CiB9OwogCiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9tb2NrL21lZGlhc291cmNlL01vY2tNZWRpYVNvdXJjZVByaXZhdGUuY3BwIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vbW9jay9tZWRpYXNvdXJjZS9Nb2NrTWVkaWFTb3VyY2VQcml2YXRlLmNw
cAppbmRleCA3MjQ5MzczYWVlMzcwY2UxODgyMWRmMWZkZGY3NjAxMmNlNjQ1YTdkLi5mYjQ5ZDRl
ZGMxMWI1MjkyNzM2YWZlZDIyYTU2NjQ3Yzc0ZjQ4ZTJmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9tb2NrL21lZGlhc291cmNlL01vY2tNZWRpYVNvdXJjZVByaXZhdGUuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21vY2svbWVkaWFzb3VyY2UvTW9ja01lZGlh
U291cmNlUHJpdmF0ZS5jcHAKQEAgLTMwLDE5ICszMCwyMiBAQAogCiAjaW5jbHVkZSAiQ29udGVu
dFR5cGUuaCIKICNpbmNsdWRlICJFeGNlcHRpb25Db2RlUGxhY2Vob2xkZXIuaCIKKyNpbmNsdWRl
ICJNZWRpYVNvdXJjZVByaXZhdGVDbGllbnQuaCIKICNpbmNsdWRlICJNb2NrTWVkaWFQbGF5ZXJN
ZWRpYVNvdXJjZS5oIgogI2luY2x1ZGUgIk1vY2tTb3VyY2VCdWZmZXJQcml2YXRlLmgiCiAKIG5h
bWVzcGFjZSBXZWJDb3JlIHsKIAotUmVmUHRyPE1vY2tNZWRpYVNvdXJjZVByaXZhdGU+IE1vY2tN
ZWRpYVNvdXJjZVByaXZhdGU6OmNyZWF0ZShNb2NrTWVkaWFQbGF5ZXJNZWRpYVNvdXJjZSogcGFy
ZW50KQorUmVmUHRyPE1vY2tNZWRpYVNvdXJjZVByaXZhdGU+IE1vY2tNZWRpYVNvdXJjZVByaXZh
dGU6OmNyZWF0ZShNb2NrTWVkaWFQbGF5ZXJNZWRpYVNvdXJjZSogcGFyZW50LCBNZWRpYVNvdXJj
ZVByaXZhdGVDbGllbnQqIGNsaWVudCkKIHsKLSAgICByZXR1cm4gYWRvcHRSZWYobmV3IE1vY2tN
ZWRpYVNvdXJjZVByaXZhdGUocGFyZW50KSk7CisgICAgUmVmUHRyPE1vY2tNZWRpYVNvdXJjZVBy
aXZhdGU+IG1lZGlhU291cmNlUHJpdmF0ZSA9IGFkb3B0UmVmKG5ldyBNb2NrTWVkaWFTb3VyY2VQ
cml2YXRlKHBhcmVudCwgY2xpZW50KSk7CisgICAgY2xpZW50LT5zZXRQcml2YXRlQW5kT3Blbigq
bWVkaWFTb3VyY2VQcml2YXRlKTsKKyAgICByZXR1cm4gbWVkaWFTb3VyY2VQcml2YXRlOwogfQog
Ci1Nb2NrTWVkaWFTb3VyY2VQcml2YXRlOjpNb2NrTWVkaWFTb3VyY2VQcml2YXRlKE1vY2tNZWRp
YVBsYXllck1lZGlhU291cmNlKiBwYXJlbnQpCitNb2NrTWVkaWFTb3VyY2VQcml2YXRlOjpNb2Nr
TWVkaWFTb3VyY2VQcml2YXRlKE1vY2tNZWRpYVBsYXllck1lZGlhU291cmNlKiBwYXJlbnQsIE1l
ZGlhU291cmNlUHJpdmF0ZUNsaWVudCogY2xpZW50KQogICAgIDogbV9wbGF5ZXIocGFyZW50KQot
ICAgICwgbV9kdXJhdGlvbihNZWRpYVRpbWU6OmludmFsaWRUaW1lKCkpCisgICAgLCBtX2NsaWVu
dChjbGllbnQpCiAgICAgLCBtX2lzRW5kZWQoZmFsc2UpCiAgICAgLCBtX3RvdGFsVmlkZW9GcmFt
ZXMoMCkKICAgICAsIG1fZHJvcHBlZFZpZGVvRnJhbWVzKDApCkBAIC04NCwxOCArODcsMTkgQEAg
dm9pZCBNb2NrTWVkaWFTb3VyY2VQcml2YXRlOjpyZW1vdmVTb3VyY2VCdWZmZXIoU291cmNlQnVm
ZmVyUHJpdmF0ZSogYnVmZmVyKQogICAgIG1fc291cmNlQnVmZmVycy5yZW1vdmUocG9zKTsKIH0K
IAotTWVkaWFUaW1lIE1vY2tNZWRpYVNvdXJjZVByaXZhdGU6OmR1cmF0aW9uKCkKK2RvdWJsZSBN
b2NrTWVkaWFTb3VyY2VQcml2YXRlOjpkdXJhdGlvbigpCiB7Ci0gICAgcmV0dXJuIG1fZHVyYXRp
b247CisgICAgcmV0dXJuIG1fY2xpZW50LT5kdXJhdGlvbigpOwogfQogCi12b2lkIE1vY2tNZWRp
YVNvdXJjZVByaXZhdGU6OnNldER1cmF0aW9uKGNvbnN0IE1lZGlhVGltZSYgZHVyYXRpb24pCitz
dGQ6OnVuaXF1ZV9wdHI8UGxhdGZvcm1UaW1lUmFuZ2VzPiBNb2NrTWVkaWFTb3VyY2VQcml2YXRl
OjpidWZmZXJlZCgpCiB7Ci0gICAgaWYgKGR1cmF0aW9uID09IG1fZHVyYXRpb24pCi0gICAgICAg
IHJldHVybjsKKyAgICByZXR1cm4gbV9jbGllbnQtPmJ1ZmZlcmVkKCk7Cit9CiAKLSAgICBtX2R1
cmF0aW9uID0gZHVyYXRpb247Ci0gICAgbV9wbGF5ZXItPnVwZGF0ZUR1cmF0aW9uKGR1cmF0aW9u
KTsKK3ZvaWQgTW9ja01lZGlhU291cmNlUHJpdmF0ZTo6ZHVyYXRpb25DaGFuZ2VkKCkKK3sKKyAg
ICBtX3BsYXllci0+dXBkYXRlRHVyYXRpb24oTWVkaWFUaW1lOjpjcmVhdGVXaXRoRG91YmxlKGR1
cmF0aW9uKCkpKTsKIH0KIAogdm9pZCBNb2NrTWVkaWFTb3VyY2VQcml2YXRlOjptYXJrRW5kT2ZT
dHJlYW0oRW5kT2ZTdHJlYW1TdGF0dXMgc3RhdHVzKQpAQCAtMTIwLDYgKzEyNCwxNiBAQCB2b2lk
IE1vY2tNZWRpYVNvdXJjZVByaXZhdGU6OnNldFJlYWR5U3RhdGUoTWVkaWFQbGF5ZXI6OlJlYWR5
U3RhdGUgcmVhZHlTdGF0ZSkKICAgICBtX3BsYXllci0+c2V0UmVhZHlTdGF0ZShyZWFkeVN0YXRl
KTsKIH0KIAordm9pZCBNb2NrTWVkaWFTb3VyY2VQcml2YXRlOjp3YWl0Rm9yU2Vla0NvbXBsZXRl
ZCgpCit7CisgICAgbV9wbGF5ZXItPndhaXRGb3JTZWVrQ29tcGxldGVkKCk7Cit9CisKK3ZvaWQg
TW9ja01lZGlhU291cmNlUHJpdmF0ZTo6c2Vla0NvbXBsZXRlZCgpCit7CisgICAgbV9wbGF5ZXIt
PnNlZWtDb21wbGV0ZWQoKTsKK30KKwogdm9pZCBNb2NrTWVkaWFTb3VyY2VQcml2YXRlOjpzb3Vy
Y2VCdWZmZXJQcml2YXRlRGlkQ2hhbmdlQWN0aXZlU3RhdGUoTW9ja1NvdXJjZUJ1ZmZlclByaXZh
dGUqIGJ1ZmZlciwgYm9vbCBhY3RpdmUpCiB7CiAgICAgaWYgKGFjdGl2ZSAmJiAhbV9hY3RpdmVT
b3VyY2VCdWZmZXJzLmNvbnRhaW5zKGJ1ZmZlcikpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9tb2NrL21lZGlhc291cmNlL01vY2tNZWRpYVNvdXJjZVByaXZhdGUuaCBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL21vY2svbWVkaWFzb3VyY2UvTW9ja01lZGlhU291cmNlUHJp
dmF0ZS5oCmluZGV4IGY3OWIxMTAyZDUyMjA0Y2U2MzNmNjAxMDFiYTZkZDlmYTQxN2M4ZTUuLjBi
MzVhMTBiOWY3NzczNmVlNGY1NTNkOWRmNjU3MWI4M2E4ZTYxNjEgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL21vY2svbWVkaWFzb3VyY2UvTW9ja01lZGlhU291cmNlUHJpdmF0
ZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21vY2svbWVkaWFzb3VyY2UvTW9ja01l
ZGlhU291cmNlUHJpdmF0ZS5oCkBAIC0zOSw3ICszOSw3IEBAIGNsYXNzIFRpbWVSYW5nZXM7CiAK
IGNsYXNzIE1vY2tNZWRpYVNvdXJjZVByaXZhdGUgZmluYWwgOiBwdWJsaWMgTWVkaWFTb3VyY2VQ
cml2YXRlIHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgUmVmUHRyPE1vY2tNZWRpYVNvdXJjZVByaXZh
dGU+IGNyZWF0ZShNb2NrTWVkaWFQbGF5ZXJNZWRpYVNvdXJjZSopOworICAgIHN0YXRpYyBSZWZQ
dHI8TW9ja01lZGlhU291cmNlUHJpdmF0ZT4gY3JlYXRlKE1vY2tNZWRpYVBsYXllck1lZGlhU291
cmNlKiwgTWVkaWFTb3VyY2VQcml2YXRlQ2xpZW50Kik7CiAgICAgdmlydHVhbCB+TW9ja01lZGlh
U291cmNlUHJpdmF0ZSgpOwogCiAgICAgY29uc3QgVmVjdG9yPE1vY2tTb3VyY2VCdWZmZXJQcml2
YXRlKj4mIGFjdGl2ZVNvdXJjZUJ1ZmZlcnMoKSBjb25zdCB7IHJldHVybiBtX2FjdGl2ZVNvdXJj
ZUJ1ZmZlcnM7IH0KQEAgLTQ3LDYgKzQ3LDkgQEAgcHVibGljOgogICAgIGJvb2wgaGFzQXVkaW8o
KSBjb25zdDsKICAgICBib29sIGhhc1ZpZGVvKCkgY29uc3Q7CiAKKyAgICBkb3VibGUgZHVyYXRp
b24oKTsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8UGxhdGZvcm1UaW1lUmFuZ2VzPiBidWZmZXJlZCgp
OworCiAgICAgTW9ja01lZGlhUGxheWVyTWVkaWFTb3VyY2UqIHBsYXllcigpIGNvbnN0IHsgcmV0
dXJuIG1fcGxheWVyOyB9CiAKICAgICB2b2lkIHNlZWtUb1RpbWUoY29uc3QgTWVkaWFUaW1lJik7
CkBAIC02MywxNiArNjYsMTcgQEAgcHVibGljOgogICAgIHZvaWQgaW5jcmVtZW50VG90YWxGcmFt
ZURlbGF5QnkoZG91YmxlIGRlbGF5KSB7IG1fdG90YWxGcmFtZURlbGF5ICs9IGRlbGF5OyB9CiAK
IHByaXZhdGU6Ci0gICAgTW9ja01lZGlhU291cmNlUHJpdmF0ZShNb2NrTWVkaWFQbGF5ZXJNZWRp
YVNvdXJjZSopOworICAgIE1vY2tNZWRpYVNvdXJjZVByaXZhdGUoTW9ja01lZGlhUGxheWVyTWVk
aWFTb3VyY2UqLCBNZWRpYVNvdXJjZVByaXZhdGVDbGllbnQqKTsKIAogICAgIC8vIE1lZGlhU291
cmNlUHJpdmF0ZSBPdmVycmlkZXMKICAgICB2aXJ0dWFsIEFkZFN0YXR1cyBhZGRTb3VyY2VCdWZm
ZXIoY29uc3QgQ29udGVudFR5cGUmLCBSZWZQdHI8U291cmNlQnVmZmVyUHJpdmF0ZT4mKSBvdmVy
cmlkZTsKLSAgICB2aXJ0dWFsIE1lZGlhVGltZSBkdXJhdGlvbigpIG92ZXJyaWRlOwotICAgIHZp
cnR1YWwgdm9pZCBzZXREdXJhdGlvbihjb25zdCBNZWRpYVRpbWUmKSBvdmVycmlkZTsKKyAgICB2
aXJ0dWFsIHZvaWQgZHVyYXRpb25DaGFuZ2VkKCkgb3ZlcnJpZGU7CiAgICAgdmlydHVhbCB2b2lk
IG1hcmtFbmRPZlN0cmVhbShFbmRPZlN0cmVhbVN0YXR1cykgb3ZlcnJpZGU7CiAgICAgdmlydHVh
bCB2b2lkIHVubWFya0VuZE9mU3RyZWFtKCkgb3ZlcnJpZGU7CiAgICAgdmlydHVhbCBNZWRpYVBs
YXllcjo6UmVhZHlTdGF0ZSByZWFkeVN0YXRlKCkgY29uc3Qgb3ZlcnJpZGU7CiAgICAgdmlydHVh
bCB2b2lkIHNldFJlYWR5U3RhdGUoTWVkaWFQbGF5ZXI6OlJlYWR5U3RhdGUpIG92ZXJyaWRlOwor
ICAgIHZpcnR1YWwgdm9pZCB3YWl0Rm9yU2Vla0NvbXBsZXRlZCgpIG92ZXJyaWRlOworICAgIHZp
cnR1YWwgdm9pZCBzZWVrQ29tcGxldGVkKCkgb3ZlcnJpZGU7CiAKICAgICB2b2lkIHNvdXJjZUJ1
ZmZlclByaXZhdGVEaWRDaGFuZ2VBY3RpdmVTdGF0ZShNb2NrU291cmNlQnVmZmVyUHJpdmF0ZSos
IGJvb2wgYWN0aXZlKTsKICAgICB2b2lkIHJlbW92ZVNvdXJjZUJ1ZmZlcihTb3VyY2VCdWZmZXJQ
cml2YXRlKik7CkBAIC04MCw3ICs4NCw3IEBAIHByaXZhdGU6CiAgICAgZnJpZW5kIGNsYXNzIE1v
Y2tTb3VyY2VCdWZmZXJQcml2YXRlOwogCiAgICAgTW9ja01lZGlhUGxheWVyTWVkaWFTb3VyY2Uq
IG1fcGxheWVyOwotICAgIE1lZGlhVGltZSBtX2R1cmF0aW9uOworICAgIFJlZlB0cjxNZWRpYVNv
dXJjZVByaXZhdGVDbGllbnQ+IG1fY2xpZW50OwogICAgIFZlY3RvcjxSZWZQdHI8TW9ja1NvdXJj
ZUJ1ZmZlclByaXZhdGU+PiBtX3NvdXJjZUJ1ZmZlcnM7CiAgICAgVmVjdG9yPE1vY2tTb3VyY2VC
dWZmZXJQcml2YXRlKj4gbV9hY3RpdmVTb3VyY2VCdWZmZXJzOwogICAgIGJvb2wgbV9pc0VuZGVk
OwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nIGIvTGF5b3V0VGVzdHMvQ2hhbmdl
TG9nCmluZGV4IDUyNDBhNDcxOGI3YTMxNzcwYzA0Y2I1NTczOTM2OTgyZTgxNzlhNTguLjQ5ZGRk
ODFjNDRkNTIzNmRhOThhOTMwN2MwNWI1MzFhZDIwZjMzMWMgMTAwNjQ0Ci0tLSBhL0xheW91dFRl
c3RzL0NoYW5nZUxvZworKysgYi9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxNyBA
QAorMjAxNC0wNy0xMSAgSmVyIE5vYmxlICA8amVyLm5vYmxlQGFwcGxlLmNvbT4KKworICAgICAg
ICBbTVNFXSBodHRwL3Rlc3RzL21lZGlhL21lZGlhLXNvdXJjZS9tZWRpYXNvdXJjZS1kdXJhdGlv
bi5odG1sIGlzIGZhaWxpbmcuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD0xMzQ4NTIKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4K
KworICAgICAgICBFbGltaW5hdGUgZmxha2luZXNzIGluIHRoZSBtZWRpYXNvdXJjZS1kdXJhdGlv
bi5odG1sIHRlc3QgYnkgbm90IHBsYXlpbmcKKyAgICAgICAgdGhlIG1lZGlhIHdoaWxlIHRlc3Rp
bmcgc2Vla2luZyBhbmQgZHVyYXRpb24uCisgICAgICAgICogaHR0cC90ZXN0cy9tZWRpYS9tZWRp
YS1zb3VyY2UvbWVkaWFzb3VyY2UtZHVyYXRpb24uaHRtbDoKKworICAgICAgICBVcGRhdGUgdGVz
dGhhcm5lc3MuanMgdG8gdGhlIGxhdGVzdCBXM0MgdmVyc2lvbjoKKyAgICAgICAgKiBodHRwL3Rl
c3RzL3czYy9yZXNvdXJjZXMvdGVzdGhhcm5lc3MuanM6CisKIDIwMTQtMDctMTEgIFphbGFuIEJ1
anRhcyAgPHphbGFuQGFwcGxlLmNvbT4KIAogICAgICAgICBSRUdSRVNTSU9OIChyMTY4ODY4KTog
ZUJheSAnc2VlIGFsbCcgbGlua3MgZmFpbCBkdWUgdG8gZGlmZmVyZW50IEpTIGJpbmRpbmdzIGNv
bnZlcnNpb24gYmVoYXZpb3IuCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9odHRwL3Rlc3RzL21l
ZGlhL21lZGlhLXNvdXJjZS9tZWRpYXNvdXJjZS1kdXJhdGlvbi5odG1sIGIvTGF5b3V0VGVzdHMv
aHR0cC90ZXN0cy9tZWRpYS9tZWRpYS1zb3VyY2UvbWVkaWFzb3VyY2UtZHVyYXRpb24uaHRtbApp
bmRleCBkNDMzOTE2ZDhiN2VhYjQyY2U5OGVhNGJjMjg4YjNjN2MzMDViNmNkLi5iYWM1YmE5ZGNi
OGE4MmVjYmIzOTI0Zjg5MTBjYzIyYjRhYThmOGY0IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9o
dHRwL3Rlc3RzL21lZGlhL21lZGlhLXNvdXJjZS9tZWRpYXNvdXJjZS1kdXJhdGlvbi5odG1sCisr
KyBiL0xheW91dFRlc3RzL2h0dHAvdGVzdHMvbWVkaWEvbWVkaWEtc291cmNlL21lZGlhc291cmNl
LWR1cmF0aW9uLmh0bWwKQEAgLTE4LDExICsxOCw4IEBACiAgICAgICAgICAgICAgICAgICB2YXIg
c2Vla1RvID0gZnVsbER1cmF0aW9uIC8gMi4wOwogICAgICAgICAgICAgICAgICAgdmFyIHRydW5j
YXRlZER1cmF0aW9uID0gc2Vla1RvIC8gMi4wOwogCi0gICAgICAgICAgICAgICAgICBtZWRpYUVs
ZW1lbnQucGxheSgpOwotCiAgICAgICAgICAgICAgICAgICAvLyBBcHBlbmQgYWxsIHRoZSBzZWdt
ZW50cwogICAgICAgICAgICAgICAgICAgdGVzdC5leHBlY3RFdmVudChzb3VyY2VCdWZmZXIsICd1
cGRhdGVlbmQnLCAnc291cmNlQnVmZmVyJyk7Ci0gICAgICAgICAgICAgICAgICB0ZXN0LmV4cGVj
dEV2ZW50KG1lZGlhRWxlbWVudCwgJ3BsYXlpbmcnLCAnUGxheWluZyB0cmlnZ2VyZWQnKTsKICAg
ICAgICAgICAgICAgICAgIHNvdXJjZUJ1ZmZlci5hcHBlbmRCdWZmZXIobWVkaWFEYXRhKTsKIAog
ICAgICAgICAgICAgICAgICAgdGVzdC53YWl0Rm9yRXhwZWN0ZWRFdmVudHMoZnVuY3Rpb24oKQpA
QCAtMTI2LDExICsxMjMsMTEgQEAKIAogICAgICAgICAgICAgICB0ZXN0LndhaXRGb3JFeHBlY3Rl
ZEV2ZW50cyhmdW5jdGlvbigpCiAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgIGFz
c2VydF9lcXVhbHMobWVkaWFFbGVtZW50LmN1cnJlbnRUaW1lLCB0cnVuY2F0ZWREdXJhdGlvbiwK
KyAgICAgICAgICAgICAgICAgIGFzc2VydF9hcHByb3hfZXF1YWxzKG1lZGlhRWxlbWVudC5jdXJy
ZW50VGltZSwgdHJ1bmNhdGVkRHVyYXRpb24sIDAuMDUsCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICdQbGF5YmFjayB0aW1lIGhhcyByZWFjaGVkIHRydW5jYXRlZER1cmF0aW9uJyk7
Ci0gICAgICAgICAgICAgICAgICBhc3NlcnRfZXF1YWxzKG1lZGlhRWxlbWVudC5kdXJhdGlvbiwg
dHJ1bmNhdGVkRHVyYXRpb24sCisgICAgICAgICAgICAgICAgICBhc3NlcnRfYXBwcm94X2VxdWFs
cyhtZWRpYUVsZW1lbnQuZHVyYXRpb24sIHRydW5jYXRlZER1cmF0aW9uLCAwLjA1LAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAnbWVkaWFFbGVtZW50IHRydW5jYXRlZER1cmF0aW9u
IGFmdGVyIHNlZWsgdG8gaXQnKTsKLSAgICAgICAgICAgICAgICAgIGFzc2VydF9lcXVhbHMobWVk
aWFTb3VyY2UuZHVyYXRpb24sIHRydW5jYXRlZER1cmF0aW9uLAorICAgICAgICAgICAgICAgICAg
YXNzZXJ0X2FwcHJveF9lcXVhbHMobWVkaWFTb3VyY2UuZHVyYXRpb24sIHRydW5jYXRlZER1cmF0
aW9uLCAwLjA1LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnbWVkaWFTb3VyY2Ug
dHJ1bmNhdGVkRHVyYXRpb24gYWZ0ZXIgc2VlayB0byBpdCcpOwogICAgICAgICAgICAgICAgICAg
YXNzZXJ0X2ZhbHNlKG1lZGlhRWxlbWVudC5zZWVraW5nLCAnbWVkaWFFbGVtZW50LnNlZWtpbmcg
YWZ0ZXIgc2Vla2VkIHRvIHRydW5jYXRlZER1cmF0aW9uJyk7CiAKQEAgLTE1NCwxMSArMTUxLDgg
QEAKICAgICAgICAgICAgICAgICAgIGR1cmF0aW9uY2hhbmdlRXZlbnRDb3VudGVyKys7CiAgICAg
ICAgICAgICAgIH0pOwogCi0gICAgICAgICAgICAgIG1lZGlhRWxlbWVudC5wbGF5KCk7Ci0KICAg
ICAgICAgICAgICAgLy8gQXBwZW5kIGFsbCB0aGUgc2VnbWVudHMKICAgICAgICAgICAgICAgdGVz
dC5leHBlY3RFdmVudChzb3VyY2VCdWZmZXIsICd1cGRhdGVlbmQnLCAnc291cmNlQnVmZmVyJyk7
Ci0gICAgICAgICAgICAgIHRlc3QuZXhwZWN0RXZlbnQobWVkaWFFbGVtZW50LCAncGxheWluZycs
ICdQbGF5aW5nIHRyaWdnZXJlZCcpOwogICAgICAgICAgICAgICBzb3VyY2VCdWZmZXIuYXBwZW5k
QnVmZmVyKG1lZGlhRGF0YSk7CiAKICAgICAgICAgICAgICAgdGVzdC53YWl0Rm9yRXhwZWN0ZWRF
dmVudHMoZnVuY3Rpb24oKQpAQCAtMjAxLDcgKzE5NSwxMCBAQAogICAgICAgICAgICAgICAgICAg
ICAgICsrZXhwZWN0ZWREdXJhdGlvbkNoYW5nZUV2ZW50Q291bnQ7CiAgICAgICAgICAgICAgICAg
ICB9CiAKKyAgICAgICAgICAgICAgICAgIG1lZGlhRWxlbWVudC5wbGF5KCk7CisKICAgICAgICAg
ICAgICAgICAgIC8vIEFsbG93IG1lZGlhIHRvIHBsYXkgdG8gZW5kIHdoaWxlIGNvdW50aW5nICdk
dXJhdGlvbmNoYW5nZScgZXZlbnRzLgorICAgICAgICAgICAgICAgICAgdGVzdC5leHBlY3RFdmVu
dChtZWRpYUVsZW1lbnQsICdwbGF5aW5nJywgJ1BsYXlpbmcgdHJpZ2dlcmVkJyk7CiAgICAgICAg
ICAgICAgICAgICB0ZXN0LmV4cGVjdEV2ZW50KG1lZGlhRWxlbWVudCwgJ2VuZGVkJywgJ1BsYXli
YWNrIGVuZGVkJyk7CiAgICAgICAgICAgICAgICAgICB0ZXN0LndhaXRGb3JFeHBlY3RlZEV2ZW50
cyhmdW5jdGlvbigpCiAgICAgICAgICAgICAgICAgICB7CkBAIC0yMTEsNiArMjA4LDcgQEAKICAg
ICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICB9KTsKICAgICAgICAgICB9LCAnVGVz
dCBzZXR0aW5nIHNhbWUgZHVyYXRpb24gbXVsdGlwbGUgdGltZXMgZG9lcyBub3QgZmlyZSBkdXBs
aWNhdGUgZHVyYXRpb25jaGFuZ2UnLCB7dGltZW91dDogMjUwMH0pOworCiAgICAgICAgIDwvc2Ny
aXB0PgogICAgIDwvYm9keT4KIDwvaHRtbD4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2h0dHAv
dGVzdHMvdzNjL3Jlc291cmNlcy90ZXN0aGFybmVzcy5qcyBiL0xheW91dFRlc3RzL2h0dHAvdGVz
dHMvdzNjL3Jlc291cmNlcy90ZXN0aGFybmVzcy5qcwppbmRleCA3NjU1MzgzMjI2NGVhMDc4YTE2
ZWZiN2I2MTU3ZGY1YmMzN2MyNTVlLi5kYTY0NmU4YzY5MmFlOGVmMTljNDQ0YWEyNDk5MGNjMTkx
MjUzMGM5IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3czYy9yZXNvdXJjZXMv
dGVzdGhhcm5lc3MuanMKKysrIGIvTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy93M2MvcmVzb3VyY2Vz
L3Rlc3RoYXJuZXNzLmpzCkBAIC0xLDIxNDUgKzEsMjI0NCBAQAotLyoNCi1EaXN0cmlidXRlZCB1
bmRlciBib3RoIHRoZSBXM0MgVGVzdCBTdWl0ZSBMaWNlbnNlIFsxXSBhbmQgdGhlIFczQw0KLTMt
Y2xhdXNlIEJTRCBMaWNlbnNlIFsyXS4gVG8gY29udHJpYnV0ZSB0byBhIFczQyBUZXN0IFN1aXRl
LCBzZWUgdGhlDQotcG9saWNpZXMgYW5kIGNvbnRyaWJ1dGlvbiBmb3JtcyBbM10uDQotDQotWzFd
IGh0dHA6Ly93d3cudzMub3JnL0NvbnNvcnRpdW0vTGVnYWwvMjAwOC8wNC10ZXN0c3VpdGUtbGlj
ZW5zZQ0KLVsyXSBodHRwOi8vd3d3LnczLm9yZy9Db25zb3J0aXVtL0xlZ2FsLzIwMDgvMDMtYnNk
LWxpY2Vuc2UNCi1bM10gaHR0cDovL3d3dy53My5vcmcvMjAwNC8xMC8yNy10ZXN0Y2FzZXMNCi0q
Lw0KLQ0KLS8qDQotICogPT0gSW50cm9kdWN0aW9uID09DQotICoNCi0gKiBUaGlzIGZpbGUgcHJv
dmlkZXMgYSBmcmFtZXdvcmsgZm9yIHdyaXRpbmcgdGVzdGNhc2VzLiBJdCBpcyBpbnRlbmRlZCB0
bw0KLSAqIHByb3ZpZGUgYSBjb252ZW5pZW50IEFQSSBmb3IgbWFraW5nIGNvbW1vbiBhc3NlcnRp
b25zLCBhbmQgdG8gd29yayBib3RoDQotICogZm9yIHRlc3Rpbmcgc3luY2hyb25vdXMgYW5kIGFz
eW5jaHJvbm91cyBET00gZmVhdHVyZXMgaW4gYSB3YXkgdGhhdA0KLSAqIHByb21vdGVzIGNsZWFy
LCByb2J1c3QsIHRlc3RzLg0KLSAqDQotICogPT0gQmFzaWMgVXNhZ2UgPT0NCi0gKg0KLSAqIFRv
IHVzZSB0aGlzIGZpbGUsIGltcG9ydCB0aGUgc2NyaXB0IGFuZCB0aGUgdGVzdGhhcm5lc3NyZXBv
cnQgc2NyaXB0IGludG8NCi0gKiB0aGUgdGVzdCBkb2N1bWVudDoNCi0gKiA8c2NyaXB0IHNyYz0i
L3Jlc291cmNlcy90ZXN0aGFybmVzcy5qcyI+PC9zY3JpcHQ+DQotICogPHNjcmlwdCBzcmM9Ii9y
ZXNvdXJjZXMvdGVzdGhhcm5lc3NyZXBvcnQuanMiPjwvc2NyaXB0Pg0KLSAqDQotICogV2l0aGlu
IGVhY2ggZmlsZSBvbmUgbWF5IGRlZmluZSBvbmUgb3IgbW9yZSB0ZXN0cy4gRWFjaCB0ZXN0IGlz
IGF0b21pYw0KLSAqIGluIHRoZSBzZW5zZSB0aGF0IGEgc2luZ2xlIHRlc3QgaGFzIGEgc2luZ2xl
IHJlc3VsdCAocGFzcy9mYWlsL3RpbWVvdXQpLg0KLSAqIFdpdGhpbiBlYWNoIHRlc3Qgb25lIG1h
eSBoYXZlIGEgbnVtYmVyIG9mIGFzc2VydHMuIFRoZSB0ZXN0IGZhaWxzIGF0IHRoZQ0KLSAqIGZp
cnN0IGZhaWxpbmcgYXNzZXJ0LCBhbmQgdGhlIHJlbWFpbmRlciBvZiB0aGUgdGVzdCBpcyAodHlw
aWNhbGx5KSBub3QgcnVuLg0KLSAqDQotICogSWYgdGhlIGZpbGUgY29udGFpbmluZyB0aGUgdGVz
dHMgaXMgYSBIVE1MIGZpbGUgd2l0aCBhbiBlbGVtZW50IG9mIGlkICJsb2ciDQotICogdGhpcyB3
aWxsIGJlIHBvcHVsYXRlZCB3aXRoIGEgdGFibGUgY29udGFpbmluZyB0aGUgdGVzdCByZXN1bHRz
IGFmdGVyIGFsbA0KLSAqIHRoZSB0ZXN0cyBoYXZlIHJ1bi4NCi0gKg0KLSAqIE5PVEU6IEJ5IGRl
ZmF1bHQgdGVzdHMgbXVzdCBiZSBjcmVhdGVkIGJlZm9yZSB0aGUgbG9hZCBldmVudCBmaXJlcy4g
Rm9yIHdheXMNCi0gKiAgICAgICB0byBjcmVhdGUgdGVzdHMgYWZ0ZXIgdGhlIGxvYWQgZXZlbnQs
IHNlZSAiRGV0ZXJtaW5pbmcgd2hlbiBhbGwgdGVzdHMNCi0gKiAgICAgICBhcmUgY29tcGxldGUi
LCBiZWxvdw0KLSAqDQotICogPT0gU3luY2hyb25vdXMgVGVzdHMgPT0NCi0gKg0KLSAqIFRvIGNy
ZWF0ZSBhIHN5bmNocm9ub3VzIHRlc3QgdXNlIHRoZSB0ZXN0KCkgZnVuY3Rpb246DQotICoNCi0g
KiB0ZXN0KHRlc3RfZnVuY3Rpb24sIG5hbWUsIHByb3BlcnRpZXMpDQotICoNCi0gKiB0ZXN0X2Z1
bmN0aW9uIGlzIGEgZnVuY3Rpb24gdGhhdCBjb250YWlucyB0aGUgY29kZSB0byB0ZXN0LiBGb3Ig
ZXhhbXBsZSBhDQotICogdHJpdmlhbCBwYXNzaW5nIHRlc3Qgd291bGQgYmU6DQotICoNCi0gKiB0
ZXN0KGZ1bmN0aW9uKCkge2Fzc2VydF90cnVlKHRydWUpfSwgImFzc2VydF90cnVlIHdpdGggdHJ1
ZSIpDQotICoNCi0gKiBUaGUgZnVuY3Rpb24gcGFzc2VkIGluIGlzIHJ1biBpbiB0aGUgdGVzdCgp
IGNhbGwuDQotICoNCi0gKiBwcm9wZXJ0aWVzIGlzIGFuIG9iamVjdCB0aGF0IG92ZXJyaWRlcyBk
ZWZhdWx0IHRlc3QgcHJvcGVydGllcy4gVGhlDQotICogcmVjb2duaXNlZCBwcm9wZXJ0aWVzIGFy
ZToNCi0gKiAgICB0aW1lb3V0IC0gdGhlIHRlc3QgdGltZW91dCBpbiBtcw0KLSAqDQotICogZS5n
Lg0KLSAqIHRlc3QodGVzdF9mdW5jdGlvbiwgIlNhbXBsZSB0ZXN0Iiwge3RpbWVvdXQ6MTAwMH0p
DQotICoNCi0gKiB3b3VsZCBydW4gdGVzdF9mdW5jdGlvbiB3aXRoIGEgdGltZW91dCBvZiAxcy4N
Ci0gKg0KLSAqIEFkZGl0aW9uYWxseSwgdGVzdC1zcGVjaWZpYyBtZXRhZGF0YSBjYW4gYmUgcGFz
c2VkIGluIHRoZSBwcm9wZXJ0aWVzLiBUaGVzZQ0KLSAqIGFyZSB1c2VkIHdoZW4gdGhlIGluZGl2
aWR1YWwgdGVzdCBoYXMgZGlmZmVyZW50IG1ldGFkYXRhIGZyb20gdGhhdCBzdG9yZWQgDQotICog
aW4gdGhlIDxoZWFkPi4NCi0gKiBUaGUgcmVjb2duaXplZCBtZXRhZGF0YSBwcm9wZXJ0aWVzIGFy
ZToNCi0gKg0KLSAqICAgIGhlbHAgLSBUaGUgdXJsIG9mIHRoZSBwYXJ0IG9mIHRoZSBzcGVjaWZp
Y2F0aW9uIGJlaW5nIHRlc3RlZA0KLSAqDQotICogICAgYXNzZXJ0IC0gQSBodW1hbiByZWFkYWJs
ZSBkZXNjcmlwdGlvbiBvZiB3aGF0IHRoZSB0ZXN0IGlzIGF0dGVtcHRpbmcgDQotICogICAgICAg
ICAgICAgdG8gcHJvdmUNCi0gKg0KLSAqICAgIGF1dGhvciAtIE5hbWUgYW5kIGNvbnRhY3QgaW5m
b3JtYXRpb24gZm9yIHRoZSBhdXRob3Igb2YgdGhlIHRlc3QgaW4gdGhlDQotICogICAgICAgICAg
ICAgZm9ybWF0OiAiTmFtZSA8ZW1haWxfYWRkcj4iIG9yICJOYW1lIGh0dHA6Ly9jb250YWN0L3Vy
bCINCi0gKg0KLSAqICAgIGZsYWdzIC0gc3BhY2Ugc2VwYXJhdGVkIGxpc3Qgb2YgdGVzdCBmbGFn
cyBpbiBhZGRpdGlvbiB0byBhbnkgcHJlc2VudCBpbg0KLSAqICAgICAgICAgICAgdGhlIGhlYWQg
bWV0YWRhdGENCi0gKg0KLSAqID09IEFzeW5jaHJvbm91cyBUZXN0cyA9PQ0KLSAqDQotICogVGVz
dGluZyBhc3luY2hyb25vdXMgZmVhdHVyZXMgaXMgc29tZXdoYXQgbW9yZSBjb21wbGV4IHNpbmNl
IHRoZSByZXN1bHQgb2YNCi0gKiBhIHRlc3QgbWF5IGRlcGVuZCBvbiBvbmUgb3IgbW9yZSBldmVu
dHMgb3Igb3RoZXIgY2FsbGJhY2tzLiBUaGUgQVBJIHByb3ZpZGVkDQotICogZm9yIHRlc3Rpbmcg
dGhlc2UgZmVhdHVyZXMgaXMgaW5kZW5kZWQgdG8gYmUgcmF0aGVyIGxvdy1sZXZlbCBidXQgaG9w
ZWZ1bGx5DQotICogYXBwbGljYWJsZSB0byBtYW55IHNpdHVhdGlvbnMuDQotICoNCi0gKiBUbyBj
cmVhdGUgYSB0ZXN0LCBvbmUgc3RhcnRzIGJ5IGdldHRpbmcgYSBUZXN0IG9iamVjdCB1c2luZyBh
c3luY190ZXN0Og0KLSAqDQotICogYXN5bmNfdGVzdChuYW1lLCBwcm9wZXJ0aWVzKQ0KLSAqDQot
ICogZS5nLg0KLSAqIHZhciB0ID0gYXN5bmNfdGVzdCgiU2ltcGxlIGFzeW5jIHRlc3QiKQ0KLSAq
DQotICogQXNzZXJ0aW9ucyBjYW4gYmUgYWRkZWQgdG8gdGhlIHRlc3QgYnkgY2FsbGluZyB0aGUg
c3RlcCBtZXRob2Qgb2YgdGhlIHRlc3QNCi0gKiBvYmplY3Qgd2l0aCBhIGZ1bmN0aW9uIGNvbnRh
aW5pbmcgdGhlIHRlc3QgYXNzZXJ0aW9uczoNCi0gKg0KLSAqIHQuc3RlcChmdW5jdGlvbigpIHth
c3NlcnRfdHJ1ZSh0cnVlKX0pOw0KLSAqDQotICogV2hlbiBhbGwgdGhlIHN0ZXBzIGFyZSBjb21w
bGV0ZSwgdGhlIGRvbmUoKSBtZXRob2QgbXVzdCBiZSBjYWxsZWQ6DQotICoNCi0gKiB0LmRvbmUo
KTsNCi0gKg0KLSAqIEFzIGEgY29udmVuaWVuY2UsIGFzeW5jX3Rlc3QgY2FuIGFsc28gdGFrZXMg
YSBmdW5jdGlvbiBhcyBmaXJzdCBhcmd1bWVudC4NCi0gKiBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxl
ZCB3aXRoIHRoZSB0ZXN0IG9iamVjdCBhcyBib3RoIGl0cyBgdGhpc2Agb2JqZWN0IGFuZA0KLSAq
IGZpcnN0IGFyZ3VtZW50LiBUaGUgYWJvdmUgZXhhbXBsZSBjYW4gYmUgcmV3cml0dGVuIGFzOg0K
LSAqDQotICogYXN5bmNfdGVzdChmdW5jdGlvbih0KSB7DQotICogICAgIG9iamVjdC5zb21lX2V2
ZW50ID0gZnVuY3Rpb24oKSB7DQotICogICAgICAgICB0LnN0ZXAoZnVuY3Rpb24gKCl7YXNzZXJ0
X3RydWUodHJ1ZSk7IHQuZG9uZSgpO30pOw0KLSAqICAgICB9Ow0KLSAqIH0sICJTaW1wbGUgYXN5
bmMgdGVzdCIpOw0KLSAqDQotICogd2hpY2ggYXZvaWRzIGNsdXR0ZXJpbmcgdGhlIGdsb2JhbCBz
Y29wZSB3aXRoIHJlZmVyZW5jZXMgdG8gYXN5bmMNCi0gKiB0ZXN0cyBpbnN0YW5jZXMuDQotICoN
Ci0gKiBUaGUgcHJvcGVydGllcyBhcmd1bWVudCBpcyBpZGVudGljYWwgdG8gdGhhdCBmb3IgdGVz
dCgpLg0KLSAqDQotICogSW4gbWFueSBjYXNlcyBpdCBpcyBjb252ZW5pZW50IHRvIHJ1biBhIHN0
ZXAgaW4gcmVzcG9uc2UgdG8gYW4gZXZlbnQgb3IgYQ0KLSAqIGNhbGxiYWNrLiBBIGNvbnZlbmll
bnQgbWV0aG9kIG9mIGRvaW5nIHRoaXMgaXMgdGhyb3VnaCB0aGUgc3RlcF9mdW5jIG1ldGhvZA0K
LSAqIHdoaWNoIHJldHVybnMgYSBmdW5jdGlvbiB0aGF0LCB3aGVuIGNhbGxlZCBydW5zIGEgdGVz
dCBzdGVwLiBGb3IgZXhhbXBsZQ0KLSAqDQotICogb2JqZWN0LnNvbWVfZXZlbnQgPSB0LnN0ZXBf
ZnVuYyhmdW5jdGlvbihlKSB7YXNzZXJ0X3RydWUoZS5hKX0pOw0KLSAqDQotICogPT0gTWFraW5n
IGFzc2VydGlvbnMgPT0NCi0gKg0KLSAqIEZ1bmN0aW9ucyBmb3IgbWFraW5nIGFzc2VydGlvbnMg
c3RhcnQgYXNzZXJ0Xw0KLSAqIFRoZSBiZXN0IHdheSB0byBnZXQgYSBsaXN0IGlzIHRvIGxvb2sg
aW4gdGhpcyBmaWxlIGZvciBmdW5jdGlvbnMgbmFtZXMNCi0gKiBtYXRjaGluZyB0aGF0IHBhdHRl
cm4uIFRoZSBnZW5lcmFsIHNpZ25hdHVyZSBpcw0KLSAqDQotICogYXNzZXJ0X3NvbWV0aGluZyhh
Y3R1YWwsIGV4cGVjdGVkLCBkZXNjcmlwdGlvbikNCi0gKg0KLSAqIGFsdGhvdWdoIG5vdCBhbGwg
YXNzZXJ0aW9ucyBwcmVjaXNlbHkgbWF0Y2ggdGhpcyBwYXR0ZXJuIGUuZy4gYXNzZXJ0X3RydWUN
Ci0gKiBvbmx5IHRha2VzIGFjdHVhbCBhbmQgZGVzY3JpcHRpb24gYXMgYXJndW1lbnRzLg0KLSAq
DQotICogVGhlIGRlc2NyaXB0aW9uIHBhcmFtZXRlciBpcyB1c2VkIHRvIHByZXNlbnQgbW9yZSB1
c2VmdWwgZXJyb3IgbWVzc2FnZXMgd2hlbg0KLSAqIGEgdGVzdCBmYWlscw0KLSAqDQotICogTk9U
RTogQWxsIGFzc2VydHMgbXVzdCBiZSBsb2NhdGVkIGluIGEgdGVzdCgpIG9yIGEgc3RlcCBvZiBh
biBhc3luY190ZXN0KCkuDQotICogICAgICAgYXNzZXJ0cyBvdXRzaWRlIHRoZXNlIHBsYWNlcyB3
b24ndCBiZSBkZXRlY3RlZCBjb3JyZWN0bHkgYnkgdGhlIGhhcm5lc3MNCi0gKiAgICAgICBhbmQg
bWF5IGNhdXNlIGEgZmlsZSB0byBzdG9wIHRlc3RpbmcuDQotICoNCi0gKiA9PSBTZXR1cCA9PQ0K
LSAqDQotICogU29tZXRpbWVzIHRlc3RzIHJlcXVpcmUgbm9uLXRyaXZpYWwgc2V0dXAgdGhhdCBt
YXkgZmFpbC4gRm9yIHRoaXMgcHVycG9zZQ0KLSAqIHRoZXJlIGlzIGEgc2V0dXAoKSBmdW5jdGlv
biwgdGhhdCBtYXkgYmUgY2FsbGVkIHdpdGggb25lIG9yIHR3byBhcmd1bWVudHMuDQotICogVGhl
IHR3byBhcmd1bWVudCB2ZXJzaW9uIGlzOg0KLSAqDQotICogc2V0dXAoZnVuYywgcHJvcGVydGll
cykNCi0gKg0KLSAqIFRoZSBvbmUgYXJndW1lbnQgdmVyc2lvbnMgbWF5IG9taXQgZWl0aGVyIGFy
Z3VtZW50Lg0KLSAqIGZ1bmMgaXMgYSBmdW5jdGlvbiB0byBiZSBydW4gc3luY2hyb25vdXNseS4g
c2V0dXAoKSBiZWNvbWVzIGEgbm8tb3Agb25jZQ0KLSAqIGFueSB0ZXN0cyBoYXZlIHJldHVybmVk
IHJlc3VsdHMuIFByb3BlcnRpZXMgYXJlIGdsb2JhbCBwcm9wZXJ0aWVzIG9mIHRoZSB0ZXN0DQot
ICogaGFybmVzcy4gQ3VycmVudGx5IHJlY29nbmlzZWQgcHJvcGVydGllcyBhcmU6DQotICoNCi0g
KiB0aW1lb3V0IC0gVGhlIHRpbWUgaW4gbXMgYWZ0ZXIgd2hpY2ggdGhlIGhhcm5lc3Mgc2hvdWxk
IHN0b3Agd2FpdGluZyBmb3INCi0gKiAgICAgICAgICAgdGVzdHMgdG8gY29tcGxldGUgKHRoaXMg
aXMgZGlmZmVyZW50IHRvIHRoZSBwZXItdGVzdCB0aW1lb3V0DQotICogICAgICAgICAgIGJlY2F1
c2UgYXN5bmMgdGVzdHMgZG8gbm90IHN0YXJ0IHRoZWlyIHRpbWVyIHVudGlsIC5zdGVwIGlzIGNh
bGxlZCkNCi0gKg0KLSAqIGV4cGxpY2l0X2RvbmUgLSBXYWl0IGZvciBhbiBleHBsaWNpdCBjYWxs
IHRvIGRvbmUoKSBiZWZvcmUgZGVjbGFyaW5nIGFsbA0KLSAqICAgICAgICAgICAgICAgICB0ZXN0
cyBjb21wbGV0ZSAoc2VlIGJlbG93KQ0KLSAqDQotICogb3V0cHV0X2RvY3VtZW50IC0gVGhlIGRv
Y3VtZW50IHRvIHdoaWNoIHJlc3VsdHMgc2hvdWxkIGJlIGxvZ2dlZC4gQnkgZGVmYXVsdA0KLSAq
ICAgICAgICAgICAgICAgICAgIHRoaXMgaXMgdGhlIGN1cnJlbnQgZG9jdW1lbnQgYnV0IGNvdWxk
IGJlIGFuIGFuY2VzdG9yDQotICogICAgICAgICAgICAgICAgICAgZG9jdW1lbnQgaW4gc29tZSBj
YXNlcyBlLmcuIGEgU1ZHIHRlc3QgbG9hZGVkIGluIGFuIEhUTUwNCi0gKiAgICAgICAgICAgICAg
ICAgICB3cmFwcGVyDQotICoNCi0gKiBleHBsaWNpdF90aW1lb3V0IC0gZGlzYWJsZSBmaWxlIHRp
bWVvdXQ7IG9ubHkgc3RvcCB3YWl0aW5nIGZvciByZXN1bHRzDQotICogICAgICAgICAgICAgICAg
ICAgIHdoZW4gdGhlIHRpbWVvdXQoKSBmdW5jdGlvbiBpcyBjYWxsZWQgKHR5cGljYWxseSBmb3IN
Ci0gKiAgICAgICAgICAgICAgICAgICAgdXNlIHdoZW4gaW50ZWdyYXRpbmcgd2l0aCBzb21lIGV4
aXN0aW5nIHRlc3QgZnJhbWV3b3JrDQotICogICAgICAgICAgICAgICAgICAgIHRoYXQgaGFzIGl0
cyBvd24gdGltZW91dCBtZWNoYW5pc20pLg0KLSAqDQotICogPT0gRGV0ZXJtaW5pbmcgd2hlbiBh
bGwgdGVzdHMgYXJlIGNvbXBsZXRlID09DQotICoNCi0gKiBCeSBkZWZhdWx0IHRoZSB0ZXN0IGhh
cm5lc3Mgd2lsbCBhc3N1bWUgdGhlcmUgYXJlIG5vIG1vcmUgcmVzdWx0cyB0byBjb21lDQotICog
d2hlbjoNCi0gKiAxKSBUaGVyZSBhcmUgbm8gVGVzdCBvYmplY3RzIHRoYXQgaGF2ZSBiZWVuIGNy
ZWF0ZWQgYnV0IG5vdCBjb21wbGV0ZWQNCi0gKiAyKSBUaGUgbG9hZCBldmVudCBvbiB0aGUgZG9j
dW1lbnQgaGFzIGZpcmVkDQotICoNCi0gKiBUaGlzIGJlaGF2aW91ciBjYW4gYmUgb3ZlcnJpZGRl
biBieSBzZXR0aW5nIHRoZSBleHBsaWNpdF9kb25lIHByb3BlcnR5IHRvDQotICogdHJ1ZSBpbiBh
IGNhbGwgdG8gc2V0dXAoKS4gSWYgZXhwbGljaXRfZG9uZSBpcyB0cnVlLCB0aGUgdGVzdCBoYXJu
ZXNzIHdpbGwNCi0gKiBub3QgYXNzdW1lIGl0IGlzIGRvbmUgdW50aWwgdGhlIGdsb2JhbCBkb25l
KCkgZnVuY3Rpb24gaXMgY2FsbGVkLiBPbmNlIGRvbmUoKQ0KLSAqIGlzIGNhbGxlZCwgdGhlIHR3
byBjb25kaXRpb25zIGFib3ZlIGFwcGx5IGxpa2Ugbm9ybWFsLg0KLSAqDQotICogPT0gR2VuZXJh
dGluZyB0ZXN0cyA9PQ0KLSAqDQotICogTk9URTogdGhpcyBmdW5jdGlvbmFsaXR5IG1heSBiZSBy
ZW1vdmVkDQotICoNCi0gKiBUaGVyZSBhcmUgc2NlbmFyaW9zIGluIHdoaWNoIGlzIGlzIGRlc2ly
YWJsZSB0byBjcmVhdGUgYSBsYXJnZSBudW1iZXIgb2YNCi0gKiAoc3luY2hyb25vdXMpIHRlc3Rz
IHRoYXQgYXJlIGludGVybmFsbHkgc2ltaWxhciBidXQgdmFyeSBpbiB0aGUgcGFyYW1ldGVycw0K
LSAqIHVzZWQuIFRvIG1ha2UgdGhpcyBlYXNpZXIsIHRoZSBnZW5lcmF0ZV90ZXN0cyBmdW5jdGlv
biBhbGxvd3MgYSBzaW5nbGUNCi0gKiBmdW5jdGlvbiB0byBiZSBjYWxsZWQgd2l0aCBlYWNoIHNl
dCBvZiBwYXJhbWV0ZXJzIGluIGEgbGlzdDoNCi0gKg0KLSAqIGdlbmVyYXRlX3Rlc3RzKHRlc3Rf
ZnVuY3Rpb24sIHBhcmFtZXRlcl9saXN0cywgcHJvcGVydGllcykNCi0gKg0KLSAqIEZvciBleGFt
cGxlOg0KLSAqDQotICogZ2VuZXJhdGVfdGVzdHMoYXNzZXJ0X2VxdWFscywgWw0KLSAqICAgICBb
IlN1bSBvbmUgYW5kIG9uZSIsIDErMSwgMl0sDQotICogICAgIFsiU3VtIG9uZSBhbmQgemVybyIs
IDErMCwgMV0NCi0gKiAgICAgXSkNCi0gKg0KLSAqIElzIGVxdWl2YWxlbnQgdG86DQotICoNCi0g
KiB0ZXN0KGZ1bmN0aW9uKCkge2Fzc2VydF9lcXVhbHMoMSsxLCAyKX0sICJTdW0gb25lIGFuZCBv
bmUiKQ0KLSAqIHRlc3QoZnVuY3Rpb24oKSB7YXNzZXJ0X2VxdWFscygxKzAsIDEpfSwgIlN1bSBv
bmUgYW5kIHplcm8iKQ0KLSAqDQotICogTm90ZSB0aGF0IHRoZSBmaXJzdCBpdGVtIGluIGVhY2gg
cGFyYW1ldGVyIGxpc3QgY29ycmVzcG9uZHMgdG8gdGhlIG5hbWUgb2YNCi0gKiB0aGUgdGVzdC4N
Ci0gKg0KLSAqIFRoZSBwcm9wZXJ0aWVzIGFyZ3VtZW50IGlzIGlkZW50aWNhbCB0byB0aGF0IGZv
ciB0ZXN0KCkuIFRoaXMgbWF5IGJlIGEgDQotICogc2luZ2xlIG9iamVjdCAodXNlZCBmb3IgYWxs
IGdlbmVyYXRlZCB0ZXN0cykgb3IgYW4gYXJyYXkuDQotICoNCi0gKiA9PSBDYWxsYmFjayBBUEkg
PT0NCi0gKg0KLSAqIFRoZSBmcmFtZXdvcmsgcHJvdmlkZXMgY2FsbGJhY2tzIGNvcnJlc3BvbmRp
bmcgdG8gMyBldmVudHM6DQotICoNCi0gKiBzdGFydCAtIGhhcHBlbnMgd2hlbiB0aGUgZmlyc3Qg
VGVzdCBpcyBjcmVhdGVkDQotICogcmVzdWx0IC0gaGFwcGVucyB3aGVuIGEgdGVzdCByZXN1bHQg
aXMgcmVjaWV2ZWQNCi0gKiBjb21wbGV0ZSAtIGhhcHBlbnMgd2hlbiBhbGwgcmVzdWx0cyBhcmUg
cmVjaWV2ZWQNCi0gKg0KLSAqIFRoZSBwYWdlIGRlZmluaW5nIHRoZSB0ZXN0cyBtYXkgYWRkIGNh
bGxiYWNrcyBmb3IgdGhlc2UgZXZlbnRzIGJ5IGNhbGxpbmcNCi0gKiB0aGUgZm9sbG93aW5nIG1l
dGhvZHM6DQotICoNCi0gKiAgIGFkZF9zdGFydF9jYWxsYmFjayhjYWxsYmFjaykgLSBjYWxsYmFj
ayBjYWxsZWQgd2l0aCBubyBhcmd1bWVudHMNCi0gKiAgIGFkZF9yZXN1bHRfY2FsbGJhY2soY2Fs
bGJhY2spIC0gY2FsbGJhY2sgY2FsbGVkIHdpdGggYSB0ZXN0IGFyZ3VtZW50DQotICogICBhZGRf
Y29tcGxldGlvbl9jYWxsYmFjayhjYWxsYmFjaykgLSBjYWxsYmFjayBjYWxsZWQgd2l0aCBhbiBh
cnJheSBvZiB0ZXN0cw0KLSAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
YW5kIGFuIHN0YXR1cyBvYmplY3QNCi0gKg0KLSAqIHRlc3RzIGhhdmUgdGhlIGZvbGxvd2luZyBw
cm9wZXJ0aWVzOg0KLSAqICAgc3RhdHVzOiBBIHN0YXR1cyBjb2RlLiBUaGlzIGNhbiBiZSBjb21w
YXJlZCB0byB0aGUgUEFTUywgRkFJTCwgVElNRU9VVCBhbmQNCi0gKiAgICAgICAgICAgTk9UUlVO
IHByb3BlcnRpZXMgb24gdGhlIHRlc3Qgb2JqZWN0DQotICogICBtZXNzYWdlOiBBIG1lc3NhZ2Ug
aW5kaWNhdGluZyB0aGUgcmVhc29uIGZvciBmYWlsdXJlLiBJbiB0aGUgZnV0dXJlIHRoaXMNCi0g
KiAgICAgICAgICAgIHdpbGwgYWx3YXlzIGJlIGEgc3RyaW5nDQotICoNCi0gKiAgVGhlIHN0YXR1
cyBvYmplY3QgZ2l2ZXMgdGhlIG92ZXJhbGwgc3RhdHVzIG9mIHRoZSBoYXJuZXNzLiBJdCBoYXMg
dGhlDQotICogIGZvbGxvd2luZyBwcm9wZXJ0aWVzOg0KLSAqICAgIHN0YXR1czogQ2FuIGJlIGNv
bXBhcmVkIHRvIHRoZSBPSywgRVJST1IgYW5kIFRJTUVPVVQgcHJvcGVydGllcw0KLSAqICAgIG1l
c3NhZ2U6IEFuIGVycm9yIG1lc3NhZ2Ugc2V0IHdoZW4gdGhlIHN0YXR1cyBpcyBFUlJPUg0KLSAq
DQotICogPT0gRXh0ZXJuYWwgQVBJID09DQotICoNCi0gKiBJbiBvcmRlciB0byBjb2xsZWN0IHRo
ZSByZXN1bHRzIG9mIG11bHRpcGxlIHBhZ2VzIGNvbnRhaW5pbmcgdGVzdHMsIHRoZSB0ZXN0DQot
ICogaGFybmVzcyB3aWxsLCB3aGVuIGxvYWRlZCBpbiBhIG5lc3RlZCBicm93c2luZyBjb250ZXh0
LCBhdHRlbXB0IHRvIGNhbGwNCi0gKiBjZXJ0YWluIGZ1bmN0aW9ucyBpbiBlYWNoIGFuY2VzdG9y
IGFuZCBvcGVuZXIgYnJvd3NpbmcgY29udGV4dDoNCi0gKg0KLSAqIHN0YXJ0IC0gc3RhcnRfY2Fs
bGJhY2sNCi0gKiByZXN1bHQgLSByZXN1bHRfY2FsbGJhY2sNCi0gKiBjb21wbGV0ZSAtIGNvbXBs
ZXRpb25fY2FsbGJhY2sNCi0gKg0KLSAqIFRoZXNlIGFyZSBnaXZlbiB0aGUgc2FtZSBhcmd1bWVu
dHMgYXMgdGhlIGNvcnJlc3BvbmRpbmcgaW50ZXJuYWwgY2FsbGJhY2tzDQotICogZGVzY3JpYmVk
IGFib3ZlLg0KLSAqDQotICogPT0gRXh0ZXJuYWwgQVBJIHRocm91Z2ggY3Jvc3MtZG9jdW1lbnQg
bWVzc2FnaW5nID09DQotICoNCi0gKiBXaGVyZSBzdXBwb3J0ZWQsIHRoZSB0ZXN0IGhhcm5lc3Mg
d2lsbCBhbHNvIHNlbmQgbWVzc2FnZXMgdXNpbmcNCi0gKiBjcm9zcy1kb2N1bWVudCBtZXNzYWdp
bmcgdG8gZWFjaCBhbmNlc3RvciBhbmQgb3BlbmVyIGJyb3dzaW5nIGNvbnRleHQuIFNpbmNlDQot
ICogaXQgdXNlcyB0aGUgd2lsZGNhcmQga2V5d29yZCAoKiksIGNyb3NzLW9yaWdpbiBjb21tdW5p
Y2F0aW9uIGlzIGVuYWJsZWQgYW5kDQotICogc2NyaXB0IG9uIGRpZmZlcmVudCBvcmlnaW5zIGNh
biBjb2xsZWN0IHRoZSByZXN1bHRzLg0KLSAqDQotICogVGhpcyBBUEkgZm9sbG93cyBzaW1pbGFy
IGNvbnZlbnRpb25zIGFzIHRob3NlIGRlc2NyaWJlZCBhYm92ZSBvbmx5IHNsaWdodGx5DQotICog
bW9kaWZpZWQgdG8gYWNjb21tb2RhdGUgbWVzc2FnZSBldmVudCBBUEkuIEVhY2ggbWVzc2FnZSBp
cyBzZW50IGJ5IHRoZSBoYXJuZXNzDQotICogaXMgcGFzc2VkIGEgc2luZ2xlIHZhbmlsbGEgb2Jq
ZWN0LCBhdmFpbGFibGUgYXMgdGhlIGBkYXRhYCBwcm9wZXJ0eSBvZiB0aGUNCi0gKiBldmVudCBv
YmplY3QuIFRoZXNlIG9iamVjdHMgYXJlIHN0cnVjdHVyZXMgYXMgZm9sbG93czoNCi0gKg0KLSAq
IHN0YXJ0IC0geyB0eXBlOiAic3RhcnQiIH0NCi0gKiByZXN1bHQgLSB7IHR5cGU6ICJyZXN1bHQi
LCB0ZXN0OiBUZXN0IH0NCi0gKiBjb21wbGV0ZSAtIHsgdHlwZTogImNvbXBsZXRlIiwgdGVzdHM6
IFtUZXN0LCAuLi5dLCBzdGF0dXM6IFRlc3RzU3RhdHVzIH0NCi0gKg0KLSAqID09IExpc3Qgb2Yg
YXNzZXJ0aW9ucyA9PQ0KLSAqDQotICogYXNzZXJ0X3RydWUoYWN0dWFsLCBkZXNjcmlwdGlvbikN
Ci0gKiAgIGFzc2VydHMgdGhhdCAvYWN0dWFsLyBpcyBzdHJpY3RseSB0cnVlDQotICoNCi0gKiBh
c3NlcnRfZmFsc2UoYWN0dWFsLCBkZXNjcmlwdGlvbikNCi0gKiAgIGFzc2VydHMgdGhhdCAvYWN0
dWFsLyBpcyBzdHJpY3RseSBmYWxzZQ0KLSAqDQotICogYXNzZXJ0X2VxdWFscyhhY3R1YWwsIGV4
cGVjdGVkLCBkZXNjcmlwdGlvbikNCi0gKiAgIGFzc2VydHMgdGhhdCAvYWN0dWFsLyBpcyB0aGUg
c2FtZSB2YWx1ZSBhcyAvZXhwZWN0ZWQvDQotICoNCi0gKiBhc3NlcnRfbm90X2VxdWFscyhhY3R1
YWwsIGV4cGVjdGVkLCBkZXNjcmlwdGlvbikNCi0gKiAgIGFzc2VydHMgdGhhdCAvYWN0dWFsLyBp
cyBhIGRpZmZlcmVudCB2YWx1ZSB0byAvZXhwZWN0ZWQvLiBZZXMsIHRoaXMgbWVhbnMNCi0gKiAg
IHRoYXQgImV4cGVjdGVkIiBpcyBhIG1pc25vbWVyDQotICoNCi0gKiBhc3NlcnRfaW5fYXJyYXko
YWN0dWFsLCBleHBlY3RlZCwgZGVzY3JpcHRpb24pDQotICogICBhc3NlcnRzIHRoYXQgL2V4cGVj
dGVkLyBpcyBhbiBBcnJheSwgYW5kIC9hY3R1YWwvIGlzIGVxdWFsIHRvIG9uZSBvZiB0aGUNCi0g
KiAgIG1lbWJlcnMgLS0gZXhwZWN0ZWQuaW5kZXhPZihhY3R1YWwpICE9IC0xDQotICoNCi0gKiBh
c3NlcnRfYXJyYXlfZXF1YWxzKGFjdHVhbCwgZXhwZWN0ZWQsIGRlc2NyaXB0aW9uKQ0KLSAqICAg
YXNzZXJ0cyB0aGF0IC9hY3R1YWwvIGFuZCAvZXhwZWN0ZWQvIGhhdmUgdGhlIHNhbWUgbGVuZ3Ro
IGFuZCB0aGUgdmFsdWUgb2YNCi0gKiAgIGVhY2ggaW5kZXhlZCBwcm9wZXJ0eSBpbiAvYWN0dWFs
LyBpcyB0aGUgc3RyaWN0bHkgZXF1YWwgdG8gdGhlIGNvcnJlc3BvbmRpbmcNCi0gKiAgIHByb3Bl
cnR5IHZhbHVlIGluIC9leHBlY3RlZC8NCi0gKg0KLSAqIGFzc2VydF9hcHByb3hfZXF1YWxzKGFj
dHVhbCwgZXhwZWN0ZWQsIGVwc2lsb24sIGRlc2NyaXB0aW9uKQ0KLSAqICAgYXNzZXJ0cyB0aGF0
IC9hY3R1YWwvIGlzIGEgbnVtYmVyIHdpdGhpbiArLy0gL2Vwc2lsb24vIG9mIC9leHBlY3RlZC8N
Ci0gKg0KLSAqIGFzc2VydF9yZWdleHBfbWF0Y2goYWN0dWFsLCBleHBlY3RlZCwgZGVzY3JpcHRp
b24pDQotICogICBhc3NlcnRzIHRoYXQgL2FjdHVhbC8gbWF0Y2hlcyB0aGUgcmVnZXhwIC9leHBl
Y3RlZC8NCi0gKg0KLSAqIGFzc2VydF9jbGFzc19zdHJpbmcob2JqZWN0LCBjbGFzc19uYW1lLCBk
ZXNjcmlwdGlvbikNCi0gKiAgIGFzc2VydHMgdGhhdCB0aGUgY2xhc3Mgc3RyaW5nIG9mIC9vYmpl
Y3QvIGFzIHJldHVybmVkIGluDQotICogICBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nIGlzIGVx
dWFsIHRvIC9jbGFzc19uYW1lLy4NCi0gKg0KLSAqIGFzc2VydF9vd25fcHJvcGVydHkob2JqZWN0
LCBwcm9wZXJ0eV9uYW1lLCBkZXNjcmlwdGlvbikNCi0gKiAgIGFzc2VydCB0aGF0IG9iamVjdCBo
YXMgb3duIHByb3BlcnR5IHByb3BlcnR5X25hbWUNCi0gKg0KLSAqIGFzc2VydF9pbmhlcml0cyhv
YmplY3QsIHByb3BlcnR5X25hbWUsIGRlc2NyaXB0aW9uKQ0KLSAqICAgYXNzZXJ0IHRoYXQgb2Jq
ZWN0IGRvZXMgbm90IGhhdmUgYW4gb3duIHByb3BlcnR5IG5hbWVkIHByb3BlcnR5X25hbWUNCi0g
KiAgIGJ1dCB0aGF0IHByb3BlcnR5X25hbWUgaXMgcHJlc2VudCBpbiB0aGUgcHJvdG90eXBlIGNo
YWluIGZvciBvYmplY3QNCi0gKg0KLSAqIGFzc2VydF9pZGxfYXR0cmlidXRlKG9iamVjdCwgYXR0
cmlidXRlX25hbWUsIGRlc2NyaXB0aW9uKQ0KLSAqICAgYXNzZXJ0IHRoYXQgYW4gb2JqZWN0IHRo
YXQgaXMgYW4gaW5zdGFuY2Ugb2Ygc29tZSBpbnRlcmZhY2UgaGFzIHRoZQ0KLSAqICAgYXR0cmli
dXRlIGF0dHJpYnV0ZV9uYW1lIGZvbGxvd2luZyB0aGUgY29uZGl0aW9ucyBzcGVjaWZpZWQgYnkg
V2ViSURMDQotICoNCi0gKiBhc3NlcnRfcmVhZG9ubHkob2JqZWN0LCBwcm9wZXJ0eV9uYW1lLCBk
ZXNjcmlwdGlvbikNCi0gKiAgIGFzc2VydCB0aGF0IHByb3BlcnR5IHByb3BlcnR5X25hbWUgb24g
b2JqZWN0IGlzIHJlYWRvbmx5DQotICoNCi0gKiBhc3NlcnRfdGhyb3dzKGNvZGUsIGZ1bmMsIGRl
c2NyaXB0aW9uKQ0KLSAqICAgY29kZSAtIHRoZSBleHBlY3RlZCBleGNlcHRpb246DQotICogICAg
IG8gc3RyaW5nOiB0aGUgdGhyb3duIGV4Y2VwdGlvbiBtdXN0IGJlIGEgRE9NRXhjZXB0aW9uIHdp
dGggdGhlIGdpdmVuDQotICogICAgICAgICAgICAgICBuYW1lLCBlLmcuLCAiVGltZW91dEVycm9y
IiAoZm9yIGNvbXBhdGliaWxpdHkgd2l0aCBleGlzdGluZw0KLSAqICAgICAgICAgICAgICAgdGVz
dHMsIGEgY29uc3RhbnQgaXMgYWxzbyBzdXBwb3J0ZWQsIGUuZy4sICJUSU1FT1VUX0VSUiIpDQot
ICogICAgIG8gb2JqZWN0OiB0aGUgdGhyb3duIGV4Y2VwdGlvbiBtdXN0IGhhdmUgYSBwcm9wZXJ0
eSBjYWxsZWQgIm5hbWUiIHRoYXQNCi0gKiAgICAgICAgICAgICAgIG1hdGNoZXMgY29kZS5uYW1l
DQotICogICAgIG8gbnVsbDogICBhbGxvdyBhbnkgZXhjZXB0aW9uIChpbiBnZW5lcmFsLCBvbmUg
b2YgdGhlIG9wdGlvbnMgYWJvdmUNCi0gKiAgICAgICAgICAgICAgIHNob3VsZCBiZSB1c2VkKQ0K
LSAqICAgZnVuYyAtIGEgZnVuY3Rpb24gdGhhdCBzaG91bGQgdGhyb3cNCi0gKg0KLSAqIGFzc2Vy
dF91bnJlYWNoZWQoZGVzY3JpcHRpb24pDQotICogICBhc3NlcnRzIGlmIGNhbGxlZC4gVXNlZCB0
byBlbnN1cmUgdGhhdCBzb21lIGNvZGVwYXRoIGlzICpub3QqIHRha2VuIGUuZy4NCi0gKiAgIGFu
IGV2ZW50IGRvZXMgbm90IGZpcmUuDQotICoNCi0gKiBhc3NlcnRfYW55KGFzc2VydF9mdW5jLCBh
Y3R1YWwsIGV4cGVjdGVkX2FycmF5LCBleHRyYV9hcmdfMSwgLi4uIGV4dHJhX2FyZ19OKQ0KLSAq
ICAgYXNzZXJ0cyB0aGF0IG9uZSBhc3NlcnRfZnVuYyhhY3R1YWwsIGV4cGVjdGVkX2FycmF5X04s
IGV4dHJhX2FyZzEsIC4uLiwgZXh0cmFfYXJnX04pDQotICogICBpcyB0cnVlIGZvciBzb21lIGV4
cGVjdGVkX2FycmF5X04gaW4gZXhwZWN0ZWRfYXJyYXkuIFRoaXMgb25seSB3b3JrcyBmb3IgYXNz
ZXJ0X2Z1bmMNCi0gKiAgIHdpdGggc2lnbmF0dXJlIGFzc2VydF9mdW5jKGFjdHVhbCwgZXhwZWN0
ZWQsIGFyZ3NfMSwgLi4uLCBhcmdzX04pLiBOb3RlIHRoYXQgdGVzdHMNCi0gKiAgIHdpdGggbXVs
dGlwbGUgYWxsb3dlZCBwYXNzIGNvbmRpdGlvbnMgYXJlIGJhZCBwcmFjdGljZSB1bmxlc3MgdGhl
IHNwZWMgc3BlY2lmaWNhbGx5DQotICogICBhbGxvd3MgbXVsdGlwbGUgYmVoYXZpb3Vycy4gVGVz
dCBhdXRob3JzIHNob3VsZCBub3QgdXNlIHRoaXMgbWV0aG9kIHNpbXBseSB0byBoaWRlIA0KLSAq
ICAgVUEgYnVncy4NCi0gKg0KLSAqIGFzc2VydF9leGlzdHMob2JqZWN0LCBwcm9wZXJ0eV9uYW1l
LCBkZXNjcmlwdGlvbikNCi0gKiAgICoqKiBkZXByZWNhdGVkICoqKg0KLSAqICAgYXNzZXJ0cyB0
aGF0IG9iamVjdCBoYXMgYW4gb3duIHByb3BlcnR5IHByb3BlcnR5X25hbWUNCi0gKg0KLSAqIGFz
c2VydF9ub3RfZXhpc3RzKG9iamVjdCwgcHJvcGVydHlfbmFtZSwgZGVzY3JpcHRpb24pDQotICog
ICAqKiogZGVwcmVjYXRlZCAqKioNCi0gKiAgIGFzc2VydCB0aGF0IG9iamVjdCBkb2VzIG5vdCBo
YXZlIG93biBwcm9wZXJ0eSBwcm9wZXJ0eV9uYW1lDQotICovDQotDQotKGZ1bmN0aW9uICgpDQot
ew0KLSAgICB2YXIgZGVidWcgPSBmYWxzZTsNCi0gICAgLy8gZGVmYXVsdCB0aW1lb3V0IGlzIDUg
c2Vjb25kcywgdGVzdCBjYW4gb3ZlcnJpZGUgaWYgbmVlZGVkDQotICAgIHZhciBzZXR0aW5ncyA9
IHsNCi0gICAgICBvdXRwdXQ6dHJ1ZSwNCi0gICAgICB0aW1lb3V0OjUwMDAsDQotICAgICAgdGVz
dF90aW1lb3V0OjIwMDANCi0gICAgfTsNCi0NCi0gICAgdmFyIHhodG1sX25zID0gImh0dHA6Ly93
d3cudzMub3JnLzE5OTkveGh0bWwiOw0KLQ0KLSAgICAvLyBzY3JpcHRfcHJlZml4IGlzIHVzZWQg
YnkgT3V0cHV0LnByb3RvdHlwZS5zaG93X3Jlc3VsdHMoKSB0byBmaWd1cmUgb3V0DQotICAgIC8v
IHdoZXJlIHRvIGdldCB0ZXN0aGFybmVzcy5jc3MgZnJvbS4gIEl0J3MgZW5jbG9zZWQgaW4gYW4g
ZXh0cmEgY2xvc3VyZSB0bw0KLSAgICAvLyBub3QgcG9sbHV0ZSB0aGUgbGlicmFyeSdzIG5hbWVz
cGFjZSB3aXRoIHZhcmlhYmxlcyBsaWtlICJzcmMiLg0KLSAgICB2YXIgc2NyaXB0X3ByZWZpeCA9
IG51bGw7DQotICAgIChmdW5jdGlvbiAoKQ0KLSAgICB7DQotICAgICAgICB2YXIgc2NyaXB0cyA9
IGRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCJzY3JpcHQiKTsNCi0gICAgICAgIGZvciAo
dmFyIGkgPSAwOyBpIDwgc2NyaXB0cy5sZW5ndGg7IGkrKykNCi0gICAgICAgIHsNCi0gICAgICAg
ICAgICBpZiAoc2NyaXB0c1tpXS5zcmMpDQotICAgICAgICAgICAgew0KLSAgICAgICAgICAgICAg
ICB2YXIgc3JjID0gc2NyaXB0c1tpXS5zcmM7DQotICAgICAgICAgICAgfQ0KLSAgICAgICAgICAg
IGVsc2UgaWYgKHNjcmlwdHNbaV0uaHJlZikNCi0gICAgICAgICAgICB7DQotICAgICAgICAgICAg
ICAgIC8vU1ZHIGNhc2UNCi0gICAgICAgICAgICAgICAgdmFyIHNyYyA9IHNjcmlwdHNbaV0uaHJl
Zi5iYXNlVmFsOw0KLSAgICAgICAgICAgIH0NCi0gICAgICAgICAgICBpZiAoc3JjICYmIHNyYy5z
bGljZShzcmMubGVuZ3RoIC0gInRlc3RoYXJuZXNzLmpzIi5sZW5ndGgpID09PSAidGVzdGhhcm5l
c3MuanMiKQ0KLSAgICAgICAgICAgIHsNCi0gICAgICAgICAgICAgICAgc2NyaXB0X3ByZWZpeCA9
IHNyYy5zbGljZSgwLCBzcmMubGVuZ3RoIC0gInRlc3RoYXJuZXNzLmpzIi5sZW5ndGgpOw0KLSAg
ICAgICAgICAgICAgICBicmVhazsNCi0gICAgICAgICAgICB9DQotICAgICAgICB9DQotICAgIH0p
KCk7DQotDQotICAgIC8qDQotICAgICAqIEFQSSBmdW5jdGlvbnMNCi0gICAgICovDQotDQotICAg
IHZhciBuYW1lX2NvdW50ZXIgPSAwOw0KLSAgICBmdW5jdGlvbiBuZXh0X2RlZmF1bHRfbmFtZSgp
DQotICAgIHsNCi0gICAgICAgIC8vRG9uJ3QgdXNlIGRvY3VtZW50LnRpdGxlIHRvIHdvcmsgYXJv
dW5kIGFuIE9wZXJhIGJ1ZyBpbiBYSFRNTCBkb2N1bWVudHMNCi0gICAgICAgIHZhciBwcmVmaXgg
PSBkb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZSgidGl0bGUiKS5sZW5ndGggPiAwID8NCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoInRp
dGxlIilbMF0uZmlyc3RDaGlsZC5kYXRhIDoNCi0gICAgICAgICAgICAgICAgICAgICAgICAgIlVu
dGl0bGVkIjsNCi0gICAgICAgIHZhciBzdWZmaXggPSBuYW1lX2NvdW50ZXIgPiAwID8gIiAiICsg
bmFtZV9jb3VudGVyIDogIiI7DQotICAgICAgICBuYW1lX2NvdW50ZXIrKzsNCi0gICAgICAgIHJl
dHVybiBwcmVmaXggKyBzdWZmaXg7DQotICAgIH0NCi0NCi0gICAgZnVuY3Rpb24gdGVzdChmdW5j
LCBuYW1lLCBwcm9wZXJ0aWVzKQ0KLSAgICB7DQotICAgICAgICB2YXIgdGVzdF9uYW1lID0gbmFt
ZSA/IG5hbWUgOiBuZXh0X2RlZmF1bHRfbmFtZSgpOw0KLSAgICAgICAgcHJvcGVydGllcyA9IHBy
b3BlcnRpZXMgPyBwcm9wZXJ0aWVzIDoge307DQotICAgICAgICB2YXIgdGVzdF9vYmogPSBuZXcg
VGVzdCh0ZXN0X25hbWUsIHByb3BlcnRpZXMpOw0KLSAgICAgICAgdGVzdF9vYmouc3RlcChmdW5j
KTsNCi0gICAgICAgIGlmICh0ZXN0X29iai5zdGF0dXMgPT09IHRlc3Rfb2JqLk5PVFJVTikgew0K
LSAgICAgICAgICAgIHRlc3Rfb2JqLmRvbmUoKTsNCi0gICAgICAgIH0NCi0gICAgfQ0KLQ0KLSAg
ICBmdW5jdGlvbiBhc3luY190ZXN0KGZ1bmMsIG5hbWUsIHByb3BlcnRpZXMpDQotICAgIHsNCi0g
ICAgICAgIGlmICh0eXBlb2YgZnVuYyAhPT0gImZ1bmN0aW9uIikgew0KLSAgICAgICAgICAgIHBy
b3BlcnRpZXMgPSBuYW1lOw0KLSAgICAgICAgICAgIG5hbWUgPSBmdW5jOw0KLSAgICAgICAgICAg
IGZ1bmMgPSBudWxsOw0KLSAgICAgICAgfQ0KLSAgICAgICAgdmFyIHRlc3RfbmFtZSA9IG5hbWUg
PyBuYW1lIDogbmV4dF9kZWZhdWx0X25hbWUoKTsNCi0gICAgICAgIHByb3BlcnRpZXMgPSBwcm9w
ZXJ0aWVzID8gcHJvcGVydGllcyA6IHt9Ow0KLSAgICAgICAgdmFyIHRlc3Rfb2JqID0gbmV3IFRl
c3QodGVzdF9uYW1lLCBwcm9wZXJ0aWVzKTsNCi0gICAgICAgIGlmIChmdW5jKSB7DQotICAgICAg
ICAgICAgdGVzdF9vYmouc3RlcChmdW5jLCB0ZXN0X29iaiwgdGVzdF9vYmopOw0KLSAgICAgICAg
fQ0KLSAgICAgICAgcmV0dXJuIHRlc3Rfb2JqOw0KLSAgICB9DQotDQotICAgIGZ1bmN0aW9uIHNl
dHVwKGZ1bmNfb3JfcHJvcGVydGllcywgbWF5YmVfcHJvcGVydGllcykNCi0gICAgew0KLSAgICAg
ICAgdmFyIGZ1bmMgPSBudWxsOw0KLSAgICAgICAgdmFyIHByb3BlcnRpZXMgPSB7fTsNCi0gICAg
ICAgIGlmIChhcmd1bWVudHMubGVuZ3RoID09PSAyKSB7DQotICAgICAgICAgICAgZnVuYyA9IGZ1
bmNfb3JfcHJvcGVydGllczsNCi0gICAgICAgICAgICBwcm9wZXJ0aWVzID0gbWF5YmVfcHJvcGVy
dGllczsNCi0gICAgICAgIH0gZWxzZSBpZiAoZnVuY19vcl9wcm9wZXJ0aWVzIGluc3RhbmNlb2Yg
RnVuY3Rpb24pew0KLSAgICAgICAgICAgIGZ1bmMgPSBmdW5jX29yX3Byb3BlcnRpZXM7DQotICAg
ICAgICB9IGVsc2Ugew0KLSAgICAgICAgICAgIHByb3BlcnRpZXMgPSBmdW5jX29yX3Byb3BlcnRp
ZXM7DQotICAgICAgICB9DQotICAgICAgICB0ZXN0cy5zZXR1cChmdW5jLCBwcm9wZXJ0aWVzKTsN
Ci0gICAgICAgIG91dHB1dC5zZXR1cChwcm9wZXJ0aWVzKTsNCi0gICAgfQ0KLQ0KLSAgICBmdW5j
dGlvbiBkb25lKCkgew0KLSAgICAgICAgdGVzdHMuZW5kX3dhaXQoKTsNCi0gICAgfQ0KLQ0KLSAg
ICBmdW5jdGlvbiBnZW5lcmF0ZV90ZXN0cyhmdW5jLCBhcmdzLCBwcm9wZXJ0aWVzKSB7DQotICAg
ICAgICBmb3JFYWNoKGFyZ3MsIGZ1bmN0aW9uKHgsIGkpDQotICAgICAgICAgICAgICAgIHsNCi0g
ICAgICAgICAgICAgICAgICAgIHZhciBuYW1lID0geFswXTsNCi0gICAgICAgICAgICAgICAgICAg
IHRlc3QoZnVuY3Rpb24oKQ0KLSAgICAgICAgICAgICAgICAgICAgICAgICB7DQotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBmdW5jLmFwcGx5KHRoaXMsIHguc2xpY2UoMSkpOw0KLSAgICAg
ICAgICAgICAgICAgICAgICAgICB9LCANCi0gICAgICAgICAgICAgICAgICAgICAgICAgbmFtZSwg
DQotICAgICAgICAgICAgICAgICAgICAgICAgIEFycmF5LmlzQXJyYXkocHJvcGVydGllcykgPyBw
cm9wZXJ0aWVzW2ldIDogcHJvcGVydGllcyk7DQotICAgICAgICAgICAgICAgIH0pOw0KLSAgICB9
DQotDQotICAgIGZ1bmN0aW9uIG9uX2V2ZW50KG9iamVjdCwgZXZlbnQsIGNhbGxiYWNrKQ0KLSAg
ICB7DQotICAgICAgb2JqZWN0LmFkZEV2ZW50TGlzdGVuZXIoZXZlbnQsIGNhbGxiYWNrLCBmYWxz
ZSk7DQotICAgIH0NCi0NCi0gICAgZXhwb3NlKHRlc3QsICd0ZXN0Jyk7DQotICAgIGV4cG9zZShh
c3luY190ZXN0LCAnYXN5bmNfdGVzdCcpOw0KLSAgICBleHBvc2UoZ2VuZXJhdGVfdGVzdHMsICdn
ZW5lcmF0ZV90ZXN0cycpOw0KLSAgICBleHBvc2Uoc2V0dXAsICdzZXR1cCcpOw0KLSAgICBleHBv
c2UoZG9uZSwgJ2RvbmUnKTsNCi0gICAgZXhwb3NlKG9uX2V2ZW50LCAnb25fZXZlbnQnKTsNCi0N
Ci0gICAgLyoNCi0gICAgICogUmV0dXJuIGEgc3RyaW5nIHRydW5jYXRlZCB0byB0aGUgZ2l2ZW4g
bGVuZ3RoLCB3aXRoIC4uLiBhZGRlZCBhdCB0aGUgZW5kDQotICAgICAqIGlmIGl0IHdhcyBsb25n
ZXIuDQotICAgICAqLw0KLSAgICBmdW5jdGlvbiB0cnVuY2F0ZShzLCBsZW4pDQotICAgIHsNCi0g
ICAgICAgIGlmIChzLmxlbmd0aCA+IGxlbikgew0KLSAgICAgICAgICAgIHJldHVybiBzLnN1YnN0
cmluZygwLCBsZW4gLSAzKSArICIuLi4iOw0KLSAgICAgICAgfQ0KLSAgICAgICAgcmV0dXJuIHM7
DQotICAgIH0NCi0NCi0gICAgLyoNCi0gICAgICogQ29udmVydCBhIHZhbHVlIHRvIGEgbmljZSwg
aHVtYW4tcmVhZGFibGUgc3RyaW5nDQotICAgICAqLw0KLSAgICBmdW5jdGlvbiBmb3JtYXRfdmFs
dWUodmFsKQ0KLSAgICB7DQotICAgICAgICBpZiAoQXJyYXkuaXNBcnJheSh2YWwpKQ0KLSAgICAg
ICAgew0KLSAgICAgICAgICAgIHJldHVybiAiWyIgKyB2YWwubWFwKGZvcm1hdF92YWx1ZSkuam9p
bigiLCAiKSArICJdIjsNCi0gICAgICAgIH0NCi0NCi0gICAgICAgIHN3aXRjaCAodHlwZW9mIHZh
bCkNCi0gICAgICAgIHsNCi0gICAgICAgIGNhc2UgInN0cmluZyI6DQotICAgICAgICAgICAgdmFs
ID0gdmFsLnJlcGxhY2UoIlxcIiwgIlxcXFwiKTsNCi0gICAgICAgICAgICBmb3IgKHZhciBpID0g
MDsgaSA8IDMyOyBpKyspDQotICAgICAgICAgICAgew0KLSAgICAgICAgICAgICAgICB2YXIgcmVw
bGFjZSA9ICJcXCI7DQotICAgICAgICAgICAgICAgIHN3aXRjaCAoaSkgew0KLSAgICAgICAgICAg
ICAgICBjYXNlIDA6IHJlcGxhY2UgKz0gIjAiOyBicmVhazsNCi0gICAgICAgICAgICAgICAgY2Fz
ZSAxOiByZXBsYWNlICs9ICJ4MDEiOyBicmVhazsNCi0gICAgICAgICAgICAgICAgY2FzZSAyOiBy
ZXBsYWNlICs9ICJ4MDIiOyBicmVhazsNCi0gICAgICAgICAgICAgICAgY2FzZSAzOiByZXBsYWNl
ICs9ICJ4MDMiOyBicmVhazsNCi0gICAgICAgICAgICAgICAgY2FzZSA0OiByZXBsYWNlICs9ICJ4
MDQiOyBicmVhazsNCi0gICAgICAgICAgICAgICAgY2FzZSA1OiByZXBsYWNlICs9ICJ4MDUiOyBi
cmVhazsNCi0gICAgICAgICAgICAgICAgY2FzZSA2OiByZXBsYWNlICs9ICJ4MDYiOyBicmVhazsN
Ci0gICAgICAgICAgICAgICAgY2FzZSA3OiByZXBsYWNlICs9ICJ4MDciOyBicmVhazsNCi0gICAg
ICAgICAgICAgICAgY2FzZSA4OiByZXBsYWNlICs9ICJiIjsgYnJlYWs7DQotICAgICAgICAgICAg
ICAgIGNhc2UgOTogcmVwbGFjZSArPSAidCI7IGJyZWFrOw0KLSAgICAgICAgICAgICAgICBjYXNl
IDEwOiByZXBsYWNlICs9ICJuIjsgYnJlYWs7DQotICAgICAgICAgICAgICAgIGNhc2UgMTE6IHJl
cGxhY2UgKz0gInYiOyBicmVhazsNCi0gICAgICAgICAgICAgICAgY2FzZSAxMjogcmVwbGFjZSAr
PSAiZiI7IGJyZWFrOw0KLSAgICAgICAgICAgICAgICBjYXNlIDEzOiByZXBsYWNlICs9ICJyIjsg
YnJlYWs7DQotICAgICAgICAgICAgICAgIGNhc2UgMTQ6IHJlcGxhY2UgKz0gIngwZSI7IGJyZWFr
Ow0KLSAgICAgICAgICAgICAgICBjYXNlIDE1OiByZXBsYWNlICs9ICJ4MGYiOyBicmVhazsNCi0g
ICAgICAgICAgICAgICAgY2FzZSAxNjogcmVwbGFjZSArPSAieDEwIjsgYnJlYWs7DQotICAgICAg
ICAgICAgICAgIGNhc2UgMTc6IHJlcGxhY2UgKz0gIngxMSI7IGJyZWFrOw0KLSAgICAgICAgICAg
ICAgICBjYXNlIDE4OiByZXBsYWNlICs9ICJ4MTIiOyBicmVhazsNCi0gICAgICAgICAgICAgICAg
Y2FzZSAxOTogcmVwbGFjZSArPSAieDEzIjsgYnJlYWs7DQotICAgICAgICAgICAgICAgIGNhc2Ug
MjA6IHJlcGxhY2UgKz0gIngxNCI7IGJyZWFrOw0KLSAgICAgICAgICAgICAgICBjYXNlIDIxOiBy
ZXBsYWNlICs9ICJ4MTUiOyBicmVhazsNCi0gICAgICAgICAgICAgICAgY2FzZSAyMjogcmVwbGFj
ZSArPSAieDE2IjsgYnJlYWs7DQotICAgICAgICAgICAgICAgIGNhc2UgMjM6IHJlcGxhY2UgKz0g
IngxNyI7IGJyZWFrOw0KLSAgICAgICAgICAgICAgICBjYXNlIDI0OiByZXBsYWNlICs9ICJ4MTgi
OyBicmVhazsNCi0gICAgICAgICAgICAgICAgY2FzZSAyNTogcmVwbGFjZSArPSAieDE5IjsgYnJl
YWs7DQotICAgICAgICAgICAgICAgIGNhc2UgMjY6IHJlcGxhY2UgKz0gIngxYSI7IGJyZWFrOw0K
LSAgICAgICAgICAgICAgICBjYXNlIDI3OiByZXBsYWNlICs9ICJ4MWIiOyBicmVhazsNCi0gICAg
ICAgICAgICAgICAgY2FzZSAyODogcmVwbGFjZSArPSAieDFjIjsgYnJlYWs7DQotICAgICAgICAg
ICAgICAgIGNhc2UgMjk6IHJlcGxhY2UgKz0gIngxZCI7IGJyZWFrOw0KLSAgICAgICAgICAgICAg
ICBjYXNlIDMwOiByZXBsYWNlICs9ICJ4MWUiOyBicmVhazsNCi0gICAgICAgICAgICAgICAgY2Fz
ZSAzMTogcmVwbGFjZSArPSAieDFmIjsgYnJlYWs7DQotICAgICAgICAgICAgICAgIH0NCi0gICAg
ICAgICAgICAgICAgdmFsID0gdmFsLnJlcGxhY2UoUmVnRXhwKFN0cmluZy5mcm9tQ2hhckNvZGUo
aSksICJnIiksIHJlcGxhY2UpOw0KLSAgICAgICAgICAgIH0NCi0gICAgICAgICAgICByZXR1cm4g
JyInICsgdmFsLnJlcGxhY2UoLyIvZywgJ1xcIicpICsgJyInOw0KLSAgICAgICAgY2FzZSAiYm9v
bGVhbiI6DQotICAgICAgICBjYXNlICJ1bmRlZmluZWQiOg0KLSAgICAgICAgICAgIHJldHVybiBT
dHJpbmcodmFsKTsNCi0gICAgICAgIGNhc2UgIm51bWJlciI6DQotICAgICAgICAgICAgLy8gSW4g
SmF2YVNjcmlwdCwgLTAgPT09IDAgYW5kIFN0cmluZygtMCkgPT0gIjAiLCBzbyB3ZSBoYXZlIHRv
DQotICAgICAgICAgICAgLy8gc3BlY2lhbC1jYXNlLg0KLSAgICAgICAgICAgIGlmICh2YWwgPT09
IC0wICYmIDEvdmFsID09PSAtSW5maW5pdHkpDQotICAgICAgICAgICAgew0KLSAgICAgICAgICAg
ICAgICByZXR1cm4gIi0wIjsNCi0gICAgICAgICAgICB9DQotICAgICAgICAgICAgcmV0dXJuIFN0
cmluZyh2YWwpOw0KLSAgICAgICAgY2FzZSAib2JqZWN0IjoNCi0gICAgICAgICAgICBpZiAodmFs
ID09PSBudWxsKQ0KLSAgICAgICAgICAgIHsNCi0gICAgICAgICAgICAgICAgcmV0dXJuICJudWxs
IjsNCi0gICAgICAgICAgICB9DQotDQotICAgICAgICAgICAgLy8gU3BlY2lhbC1jYXNlIE5vZGUg
b2JqZWN0cywgc2luY2UgdGhvc2UgY29tZSB1cCBhIGxvdCBpbiBteSB0ZXN0cy4gIEkNCi0gICAg
ICAgICAgICAvLyBpZ25vcmUgbmFtZXNwYWNlcy4gIEkgdXNlIGR1Y2stdHlwaW5nIGluc3RlYWQg
b2YgaW5zdGFuY2VvZiwgYmVjYXVzZQ0KLSAgICAgICAgICAgIC8vIGluc3RhbmNlb2YgZG9lc24n
dCB3b3JrIGlmIHRoZSBub2RlIGlzIGZyb20gYW5vdGhlciB3aW5kb3cgKGxpa2UgYW4NCi0gICAg
ICAgICAgICAvLyBpZnJhbWUncyBjb250ZW50V2luZG93KToNCi0gICAgICAgICAgICAvLyBodHRw
Oi8vd3d3LnczLm9yZy9CdWdzL1B1YmxpYy9zaG93X2J1Zy5jZ2k/aWQ9MTIyOTUNCi0gICAgICAg
ICAgICBpZiAoIm5vZGVUeXBlIiBpbiB2YWwNCi0gICAgICAgICAgICAmJiAibm9kZU5hbWUiIGlu
IHZhbA0KLSAgICAgICAgICAgICYmICJub2RlVmFsdWUiIGluIHZhbA0KLSAgICAgICAgICAgICYm
ICJjaGlsZE5vZGVzIiBpbiB2YWwpDQotICAgICAgICAgICAgew0KLSAgICAgICAgICAgICAgICBz
d2l0Y2ggKHZhbC5ub2RlVHlwZSkNCi0gICAgICAgICAgICAgICAgew0KLSAgICAgICAgICAgICAg
ICBjYXNlIE5vZGUuRUxFTUVOVF9OT0RFOg0KLSAgICAgICAgICAgICAgICAgICAgdmFyIHJldCA9
ICI8IiArIHZhbC50YWdOYW1lLnRvTG93ZXJDYXNlKCk7DQotICAgICAgICAgICAgICAgICAgICBm
b3IgKHZhciBpID0gMDsgaSA8IHZhbC5hdHRyaWJ1dGVzLmxlbmd0aDsgaSsrKQ0KLSAgICAgICAg
ICAgICAgICAgICAgew0KLSAgICAgICAgICAgICAgICAgICAgICAgIHJldCArPSAiICIgKyB2YWwu
YXR0cmlidXRlc1tpXS5uYW1lICsgJz0iJyArIHZhbC5hdHRyaWJ1dGVzW2ldLnZhbHVlICsgJyIn
Ow0KLSAgICAgICAgICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgICAgICAgICAgcmV0ICs9ICI+
IiArIHZhbC5pbm5lckhUTUwgKyAiPC8iICsgdmFsLnRhZ05hbWUudG9Mb3dlckNhc2UoKSArICI+
IjsNCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiAiRWxlbWVudCBub2RlICIgKyB0cnVuY2F0
ZShyZXQsIDYwKTsNCi0gICAgICAgICAgICAgICAgY2FzZSBOb2RlLlRFWFRfTk9ERToNCi0gICAg
ICAgICAgICAgICAgICAgIHJldHVybiAnVGV4dCBub2RlICInICsgdHJ1bmNhdGUodmFsLmRhdGEs
IDYwKSArICciJzsNCi0gICAgICAgICAgICAgICAgY2FzZSBOb2RlLlBST0NFU1NJTkdfSU5TVFJV
Q1RJT05fTk9ERToNCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiAiUHJvY2Vzc2luZ0luc3Ry
dWN0aW9uIG5vZGUgd2l0aCB0YXJnZXQgIiArIGZvcm1hdF92YWx1ZSh0cnVuY2F0ZSh2YWwudGFy
Z2V0LCA2MCkpICsgIiBhbmQgZGF0YSAiICsgZm9ybWF0X3ZhbHVlKHRydW5jYXRlKHZhbC5kYXRh
LCA2MCkpOw0KLSAgICAgICAgICAgICAgICBjYXNlIE5vZGUuQ09NTUVOVF9OT0RFOg0KLSAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuICJDb21tZW50IG5vZGUgPCEtLSIgKyB0cnVuY2F0ZSh2YWwu
ZGF0YSwgNjApICsgIi0tPiI7DQotICAgICAgICAgICAgICAgIGNhc2UgTm9kZS5ET0NVTUVOVF9O
T0RFOg0KLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuICJEb2N1bWVudCBub2RlIHdpdGggIiAr
IHZhbC5jaGlsZE5vZGVzLmxlbmd0aCArICh2YWwuY2hpbGROb2Rlcy5sZW5ndGggPT0gMSA/ICIg
Y2hpbGQiIDogIiBjaGlsZHJlbiIpOw0KLSAgICAgICAgICAgICAgICBjYXNlIE5vZGUuRE9DVU1F
TlRfVFlQRV9OT0RFOg0KLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuICJEb2N1bWVudFR5cGUg
bm9kZSI7DQotICAgICAgICAgICAgICAgIGNhc2UgTm9kZS5ET0NVTUVOVF9GUkFHTUVOVF9OT0RF
Og0KLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuICJEb2N1bWVudEZyYWdtZW50IG5vZGUgd2l0
aCAiICsgdmFsLmNoaWxkTm9kZXMubGVuZ3RoICsgKHZhbC5jaGlsZE5vZGVzLmxlbmd0aCA9PSAx
ID8gIiBjaGlsZCIgOiAiIGNoaWxkcmVuIik7DQotICAgICAgICAgICAgICAgIGRlZmF1bHQ6DQot
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gIk5vZGUgb2JqZWN0IG9mIHVua25vd24gdHlwZSI7
DQotICAgICAgICAgICAgICAgIH0NCi0gICAgICAgICAgICB9DQotDQotICAgICAgICAgICAgLy8g
RmFsbCB0aHJvdWdoIHRvIGRlZmF1bHQNCi0gICAgICAgIGRlZmF1bHQ6DQotICAgICAgICAgICAg
cmV0dXJuIHR5cGVvZiB2YWwgKyAnICInICsgdHJ1bmNhdGUoU3RyaW5nKHZhbCksIDYwKSArICci
JzsNCi0gICAgICAgIH0NCi0gICAgfQ0KLSAgICBleHBvc2UoZm9ybWF0X3ZhbHVlLCAiZm9ybWF0
X3ZhbHVlIik7DQotDQotICAgIC8qDQotICAgICAqIEFzc2VydGlvbnMNCi0gICAgICovDQotDQot
ICAgIGZ1bmN0aW9uIGFzc2VydF90cnVlKGFjdHVhbCwgZGVzY3JpcHRpb24pDQotICAgIHsNCi0g
ICAgICAgIGFzc2VydChhY3R1YWwgPT09IHRydWUsICJhc3NlcnRfdHJ1ZSIsIGRlc2NyaXB0aW9u
LA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImV4cGVjdGVkIHRydWUgZ290ICR7
YWN0dWFsfSIsIHthY3R1YWw6YWN0dWFsfSk7DQotICAgIH07DQotICAgIGV4cG9zZShhc3NlcnRf
dHJ1ZSwgImFzc2VydF90cnVlIik7DQotDQotICAgIGZ1bmN0aW9uIGFzc2VydF9mYWxzZShhY3R1
YWwsIGRlc2NyaXB0aW9uKQ0KLSAgICB7DQotICAgICAgICBhc3NlcnQoYWN0dWFsID09PSBmYWxz
ZSwgImFzc2VydF9mYWxzZSIsIGRlc2NyaXB0aW9uLA0KLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICJleHBlY3RlZCBmYWxzZSBnb3QgJHthY3R1YWx9Iiwge2FjdHVhbDphY3R1YWx9
KTsNCi0gICAgfTsNCi0gICAgZXhwb3NlKGFzc2VydF9mYWxzZSwgImFzc2VydF9mYWxzZSIpOw0K
LQ0KLSAgICBmdW5jdGlvbiBzYW1lX3ZhbHVlKHgsIHkpIHsNCi0gICAgICAgIGlmICh5ICE9PSB5
KQ0KLSAgICAgICAgew0KLSAgICAgICAgICAgIC8vTmFOIGNhc2UNCi0gICAgICAgICAgICByZXR1
cm4geCAhPT0geDsNCi0gICAgICAgIH0NCi0gICAgICAgIGVsc2UgaWYgKHggPT09IDAgJiYgeSA9
PT0gMCkgew0KLSAgICAgICAgICAgIC8vRGlzdGluZ3Vpc2ggKzAgYW5kIC0wDQotICAgICAgICAg
ICAgcmV0dXJuIDEveCA9PT0gMS95Ow0KLSAgICAgICAgfQ0KLSAgICAgICAgZWxzZQ0KLSAgICAg
ICAgew0KLSAgICAgICAgICAgIC8vdHlwaWNhbCBjYXNlDQotICAgICAgICAgICAgcmV0dXJuIHgg
PT09IHk7DQotICAgICAgICB9DQotICAgIH0NCi0NCi0gICAgZnVuY3Rpb24gYXNzZXJ0X2VxdWFs
cyhhY3R1YWwsIGV4cGVjdGVkLCBkZXNjcmlwdGlvbikNCi0gICAgew0KLSAgICAgICAgIC8qDQot
ICAgICAgICAgICogVGVzdCBpZiB0d28gcHJpbWl0aXZlcyBhcmUgZXF1YWwgb3IgdHdvIG9iamVj
dHMNCi0gICAgICAgICAgKiBhcmUgdGhlIHNhbWUgb2JqZWN0DQotICAgICAgICAgICovDQotICAg
ICAgICBpZiAodHlwZW9mIGFjdHVhbCAhPSB0eXBlb2YgZXhwZWN0ZWQpDQotICAgICAgICB7DQot
ICAgICAgICAgICAgYXNzZXJ0KGZhbHNlLCAiYXNzZXJ0X2VxdWFscyIsIGRlc2NyaXB0aW9uLA0K
LSAgICAgICAgICAgICAgICAgICAgICAgICAgImV4cGVjdGVkICgiICsgdHlwZW9mIGV4cGVjdGVk
ICsgIikgJHtleHBlY3RlZH0gYnV0IGdvdCAoIiArIHR5cGVvZiBhY3R1YWwgKyAiKSAke2FjdHVh
bH0iLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAge2V4cGVjdGVkOmV4cGVjdGVkLCBhY3R1
YWw6YWN0dWFsfSk7DQotICAgICAgICAgICAgcmV0dXJuOw0KLSAgICAgICAgfQ0KLSAgICAgICAg
YXNzZXJ0KHNhbWVfdmFsdWUoYWN0dWFsLCBleHBlY3RlZCksICJhc3NlcnRfZXF1YWxzIiwgZGVz
Y3JpcHRpb24sDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ImV4cGVjdGVkICR7ZXhwZWN0ZWR9IGJ1dCBnb3QgJHthY3R1YWx9IiwNCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7ZXhwZWN0ZWQ6ZXhwZWN0ZWQsIGFjdHVh
bDphY3R1YWx9KTsNCi0gICAgfTsNCi0gICAgZXhwb3NlKGFzc2VydF9lcXVhbHMsICJhc3NlcnRf
ZXF1YWxzIik7DQotDQotICAgIGZ1bmN0aW9uIGFzc2VydF9ub3RfZXF1YWxzKGFjdHVhbCwgZXhw
ZWN0ZWQsIGRlc2NyaXB0aW9uKQ0KLSAgICB7DQotICAgICAgICAgLyoNCi0gICAgICAgICAgKiBU
ZXN0IGlmIHR3byBwcmltaXRpdmVzIGFyZSB1bmVxdWFsIG9yIHR3byBvYmplY3RzDQotICAgICAg
ICAgICogYXJlIGRpZmZlcmVudCBvYmplY3RzDQotICAgICAgICAgICovDQotICAgICAgICBhc3Nl
cnQoIXNhbWVfdmFsdWUoYWN0dWFsLCBleHBlY3RlZCksICJhc3NlcnRfbm90X2VxdWFscyIsIGRl
c2NyaXB0aW9uLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAiZ290IGRpc2FsbG93ZWQgdmFsdWUgJHthY3R1YWx9IiwNCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAge2FjdHVhbDphY3R1YWx9KTsNCi0gICAgfTsNCi0g
ICAgZXhwb3NlKGFzc2VydF9ub3RfZXF1YWxzLCAiYXNzZXJ0X25vdF9lcXVhbHMiKTsNCi0NCi0g
ICAgZnVuY3Rpb24gYXNzZXJ0X2luX2FycmF5KGFjdHVhbCwgZXhwZWN0ZWQsIGRlc2NyaXB0aW9u
KQ0KLSAgICB7DQotICAgICAgICBhc3NlcnQoZXhwZWN0ZWQuaW5kZXhPZihhY3R1YWwpICE9IC0x
LCAiYXNzZXJ0X2luX2FycmF5IiwgZGVzY3JpcHRpb24sDQotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAidmFsdWUgJHthY3R1YWx9IG5vdCBpbiBhcnJheSAk
e2V4cGVjdGVkfSIsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB7YWN0dWFsOmFjdHVhbCwgZXhwZWN0ZWQ6ZXhwZWN0ZWR9KTsNCi0gICAgfQ0KLSAgICBl
eHBvc2UoYXNzZXJ0X2luX2FycmF5LCAiYXNzZXJ0X2luX2FycmF5Iik7DQotDQotICAgIGZ1bmN0
aW9uIGFzc2VydF9vYmplY3RfZXF1YWxzKGFjdHVhbCwgZXhwZWN0ZWQsIGRlc2NyaXB0aW9uKQ0K
LSAgICB7DQotICAgICAgICAgLy9UaGlzIG5lZWRzIHRvIGJlIGltcHJvdmVkIGEgZ3JlYXQgZGVh
bA0KLSAgICAgICAgIGZ1bmN0aW9uIGNoZWNrX2VxdWFsKGFjdHVhbCwgZXhwZWN0ZWQsIHN0YWNr
KQ0KLSAgICAgICAgIHsNCi0gICAgICAgICAgICAgc3RhY2sucHVzaChhY3R1YWwpOw0KLQ0KLSAg
ICAgICAgICAgICB2YXIgcDsNCi0gICAgICAgICAgICAgZm9yIChwIGluIGFjdHVhbCkNCi0gICAg
ICAgICAgICAgew0KLSAgICAgICAgICAgICAgICAgYXNzZXJ0KGV4cGVjdGVkLmhhc093blByb3Bl
cnR5KHApLCAiYXNzZXJ0X29iamVjdF9lcXVhbHMiLCBkZXNjcmlwdGlvbiwNCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInVuZXhwZWN0ZWQgcHJv
cGVydHkgJHtwfSIsIHtwOnB9KTsNCi0NCi0gICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgYWN0
dWFsW3BdID09PSAib2JqZWN0IiAmJiBhY3R1YWxbcF0gIT09IG51bGwpDQotICAgICAgICAgICAg
ICAgICB7DQotICAgICAgICAgICAgICAgICAgICAgaWYgKHN0YWNrLmluZGV4T2YoYWN0dWFsW3Bd
KSA9PT0gLTEpDQotICAgICAgICAgICAgICAgICAgICAgew0KLSAgICAgICAgICAgICAgICAgICAg
ICAgICBjaGVja19lcXVhbChhY3R1YWxbcF0sIGV4cGVjdGVkW3BdLCBzdGFjayk7DQotICAgICAg
ICAgICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgICAgICAg
ZWxzZQ0KLSAgICAgICAgICAgICAgICAgew0KLSAgICAgICAgICAgICAgICAgICAgIGFzc2VydChz
YW1lX3ZhbHVlKGFjdHVhbFtwXSwgZXhwZWN0ZWRbcF0pLCAiYXNzZXJ0X29iamVjdF9lcXVhbHMi
LCBkZXNjcmlwdGlvbiwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgInByb3BlcnR5ICR7cH0gZXhwZWN0ZWQgJHtleHBlY3RlZH0gZ290ICR7
YWN0dWFsfSIsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHtwOnAsIGV4cGVjdGVkOmV4cGVjdGVkLCBhY3R1YWw6YWN0dWFsfSk7DQotICAg
ICAgICAgICAgICAgICB9DQotICAgICAgICAgICAgIH0NCi0gICAgICAgICAgICAgZm9yIChwIGlu
IGV4cGVjdGVkKQ0KLSAgICAgICAgICAgICB7DQotICAgICAgICAgICAgICAgICBhc3NlcnQoYWN0
dWFsLmhhc093blByb3BlcnR5KHApLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICJhc3NlcnRf
b2JqZWN0X2VxdWFscyIsIGRlc2NyaXB0aW9uLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICJl
eHBlY3RlZCBwcm9wZXJ0eSAke3B9IG1pc3NpbmciLCB7cDpwfSk7DQotICAgICAgICAgICAgIH0N
Ci0gICAgICAgICAgICAgc3RhY2sucG9wKCk7DQotICAgICAgICAgfQ0KLSAgICAgICAgIGNoZWNr
X2VxdWFsKGFjdHVhbCwgZXhwZWN0ZWQsIFtdKTsNCi0gICAgfTsNCi0gICAgZXhwb3NlKGFzc2Vy
dF9vYmplY3RfZXF1YWxzLCAiYXNzZXJ0X29iamVjdF9lcXVhbHMiKTsNCi0NCi0gICAgZnVuY3Rp
b24gYXNzZXJ0X2FycmF5X2VxdWFscyhhY3R1YWwsIGV4cGVjdGVkLCBkZXNjcmlwdGlvbikNCi0g
ICAgew0KLSAgICAgICAgYXNzZXJ0KGFjdHVhbC5sZW5ndGggPT09IGV4cGVjdGVkLmxlbmd0aCwN
Ci0gICAgICAgICAgICAgICAiYXNzZXJ0X2FycmF5X2VxdWFscyIsIGRlc2NyaXB0aW9uLA0KLSAg
ICAgICAgICAgICAgICJsZW5ndGhzIGRpZmZlciwgZXhwZWN0ZWQgJHtleHBlY3RlZH0gZ290ICR7
YWN0dWFsfSIsDQotICAgICAgICAgICAgICAge2V4cGVjdGVkOmV4cGVjdGVkLmxlbmd0aCwgYWN0
dWFsOmFjdHVhbC5sZW5ndGh9KTsNCi0NCi0gICAgICAgIGZvciAodmFyIGk9MDsgaSA8IGFjdHVh
bC5sZW5ndGg7IGkrKykNCi0gICAgICAgIHsNCi0gICAgICAgICAgICBhc3NlcnQoYWN0dWFsLmhh
c093blByb3BlcnR5KGkpID09PSBleHBlY3RlZC5oYXNPd25Qcm9wZXJ0eShpKSwNCi0gICAgICAg
ICAgICAgICAgICAgImFzc2VydF9hcnJheV9lcXVhbHMiLCBkZXNjcmlwdGlvbiwNCi0gICAgICAg
ICAgICAgICAgICAgInByb3BlcnR5ICR7aX0sIHByb3BlcnR5IGV4cGVjdGVkIHRvIGJlICRleHBl
Y3RlZCBidXQgd2FzICRhY3R1YWwiLA0KLSAgICAgICAgICAgICAgICAgICB7aTppLCBleHBlY3Rl
ZDpleHBlY3RlZC5oYXNPd25Qcm9wZXJ0eShpKSA/ICJwcmVzZW50IiA6ICJtaXNzaW5nIiwNCi0g
ICAgICAgICAgICAgICAgICAgYWN0dWFsOmFjdHVhbC5oYXNPd25Qcm9wZXJ0eShpKSA/ICJwcmVz
ZW50IiA6ICJtaXNzaW5nIn0pOw0KLSAgICAgICAgICAgIGFzc2VydChzYW1lX3ZhbHVlKGV4cGVj
dGVkW2ldLCBhY3R1YWxbaV0pLA0KLSAgICAgICAgICAgICAgICAgICAiYXNzZXJ0X2FycmF5X2Vx
dWFscyIsIGRlc2NyaXB0aW9uLA0KLSAgICAgICAgICAgICAgICAgICAicHJvcGVydHkgJHtpfSwg
ZXhwZWN0ZWQgJHtleHBlY3RlZH0gYnV0IGdvdCAke2FjdHVhbH0iLA0KLSAgICAgICAgICAgICAg
ICAgICB7aTppLCBleHBlY3RlZDpleHBlY3RlZFtpXSwgYWN0dWFsOmFjdHVhbFtpXX0pOw0KLSAg
ICAgICAgfQ0KLSAgICB9DQotICAgIGV4cG9zZShhc3NlcnRfYXJyYXlfZXF1YWxzLCAiYXNzZXJ0
X2FycmF5X2VxdWFscyIpOw0KLQ0KLSAgICBmdW5jdGlvbiBhc3NlcnRfYXBwcm94X2VxdWFscyhh
Y3R1YWwsIGV4cGVjdGVkLCBlcHNpbG9uLCBkZXNjcmlwdGlvbikNCi0gICAgew0KLSAgICAgICAg
LyoNCi0gICAgICAgICAqIFRlc3QgaWYgdHdvIHByaW1pdGl2ZSBudW1iZXJzIGFyZSBlcXVhbCB3
aXRoaW5nICsvLSBlcHNpbG9uDQotICAgICAgICAgKi8NCi0gICAgICAgIGFzc2VydCh0eXBlb2Yg
YWN0dWFsID09PSAibnVtYmVyIiwNCi0gICAgICAgICAgICAgICAiYXNzZXJ0X2FwcHJveF9lcXVh
bHMiLCBkZXNjcmlwdGlvbiwNCi0gICAgICAgICAgICAgICAiZXhwZWN0ZWQgYSBudW1iZXIgYnV0
IGdvdCBhICR7dHlwZV9hY3R1YWx9IiwNCi0gICAgICAgICAgICAgICB7dHlwZV9hY3R1YWw6dHlw
ZW9mIGFjdHVhbH0pOw0KLQ0KLSAgICAgICAgYXNzZXJ0KE1hdGguYWJzKGFjdHVhbCAtIGV4cGVj
dGVkKSA8PSBlcHNpbG9uLA0KLSAgICAgICAgICAgICAgICJhc3NlcnRfYXBwcm94X2VxdWFscyIs
IGRlc2NyaXB0aW9uLA0KLSAgICAgICAgICAgICAgICJleHBlY3RlZCAke2V4cGVjdGVkfSArLy0g
JHtlcHNpbG9ufSBidXQgZ290ICR7YWN0dWFsfSIsDQotICAgICAgICAgICAgICAge2V4cGVjdGVk
OmV4cGVjdGVkLCBhY3R1YWw6YWN0dWFsLCBlcHNpbG9uOmVwc2lsb259KTsNCi0gICAgfTsNCi0g
ICAgZXhwb3NlKGFzc2VydF9hcHByb3hfZXF1YWxzLCAiYXNzZXJ0X2FwcHJveF9lcXVhbHMiKTsN
Ci0NCi0gICAgZnVuY3Rpb24gYXNzZXJ0X3JlZ2V4cF9tYXRjaChhY3R1YWwsIGV4cGVjdGVkLCBk
ZXNjcmlwdGlvbikgew0KLSAgICAgICAgLyoNCi0gICAgICAgICAqIFRlc3QgaWYgYSBzdHJpbmcg
KGFjdHVhbCkgbWF0Y2hlcyBhIHJlZ2V4cCAoZXhwZWN0ZWQpDQotICAgICAgICAgKi8NCi0gICAg
ICAgIGFzc2VydChleHBlY3RlZC50ZXN0KGFjdHVhbCksDQotICAgICAgICAgICAgICAgImFzc2Vy
dF9yZWdleHBfbWF0Y2giLCBkZXNjcmlwdGlvbiwNCi0gICAgICAgICAgICAgICAiZXhwZWN0ZWQg
JHtleHBlY3RlZH0gYnV0IGdvdCAke2FjdHVhbH0iLA0KLSAgICAgICAgICAgICAgIHtleHBlY3Rl
ZDpleHBlY3RlZCwgYWN0dWFsOmFjdHVhbH0pOw0KLSAgICB9DQotICAgIGV4cG9zZShhc3NlcnRf
cmVnZXhwX21hdGNoLCAiYXNzZXJ0X3JlZ2V4cF9tYXRjaCIpOw0KLQ0KLSAgICBmdW5jdGlvbiBh
c3NlcnRfY2xhc3Nfc3RyaW5nKG9iamVjdCwgY2xhc3Nfc3RyaW5nLCBkZXNjcmlwdGlvbikgew0K
LSAgICAgICAgYXNzZXJ0X2VxdWFscyh7fS50b1N0cmluZy5jYWxsKG9iamVjdCksICJbb2JqZWN0
ICIgKyBjbGFzc19zdHJpbmcgKyAiXSIsDQotICAgICAgICAgICAgICAgICAgICAgIGRlc2NyaXB0
aW9uKTsNCi0gICAgfQ0KLSAgICBleHBvc2UoYXNzZXJ0X2NsYXNzX3N0cmluZywgImFzc2VydF9j
bGFzc19zdHJpbmciKTsNCi0NCi0NCi0gICAgZnVuY3Rpb24gX2Fzc2VydF9vd25fcHJvcGVydHko
bmFtZSkgew0KLSAgICAgICAgcmV0dXJuIGZ1bmN0aW9uKG9iamVjdCwgcHJvcGVydHlfbmFtZSwg
ZGVzY3JpcHRpb24pDQotICAgICAgICB7DQotICAgICAgICAgICAgYXNzZXJ0KG9iamVjdC5oYXNP
d25Qcm9wZXJ0eShwcm9wZXJ0eV9uYW1lKSwNCi0gICAgICAgICAgICAgICAgICAgbmFtZSwgZGVz
Y3JpcHRpb24sDQotICAgICAgICAgICAgICAgICAgICJleHBlY3RlZCBwcm9wZXJ0eSAke3B9IG1p
c3NpbmciLCB7cDpwcm9wZXJ0eV9uYW1lfSk7DQotICAgICAgICB9Ow0KLSAgICB9DQotICAgIGV4
cG9zZShfYXNzZXJ0X293bl9wcm9wZXJ0eSgiYXNzZXJ0X2V4aXN0cyIpLCAiYXNzZXJ0X2V4aXN0
cyIpOw0KLSAgICBleHBvc2UoX2Fzc2VydF9vd25fcHJvcGVydHkoImFzc2VydF9vd25fcHJvcGVy
dHkiKSwgImFzc2VydF9vd25fcHJvcGVydHkiKTsNCi0NCi0gICAgZnVuY3Rpb24gYXNzZXJ0X25v
dF9leGlzdHMob2JqZWN0LCBwcm9wZXJ0eV9uYW1lLCBkZXNjcmlwdGlvbikNCi0gICAgew0KLSAg
ICAgICAgYXNzZXJ0KCFvYmplY3QuaGFzT3duUHJvcGVydHkocHJvcGVydHlfbmFtZSksDQotICAg
ICAgICAgICAgICAgImFzc2VydF9ub3RfZXhpc3RzIiwgZGVzY3JpcHRpb24sDQotICAgICAgICAg
ICAgICAgInVuZXhwZWN0ZWQgcHJvcGVydHkgJHtwfSBmb3VuZCIsIHtwOnByb3BlcnR5X25hbWV9
KTsNCi0gICAgfTsNCi0gICAgZXhwb3NlKGFzc2VydF9ub3RfZXhpc3RzLCAiYXNzZXJ0X25vdF9l
eGlzdHMiKTsNCi0NCi0gICAgZnVuY3Rpb24gX2Fzc2VydF9pbmhlcml0cyhuYW1lKSB7DQotICAg
ICAgICByZXR1cm4gZnVuY3Rpb24gKG9iamVjdCwgcHJvcGVydHlfbmFtZSwgZGVzY3JpcHRpb24p
DQotICAgICAgICB7DQotICAgICAgICAgICAgYXNzZXJ0KHR5cGVvZiBvYmplY3QgPT09ICJvYmpl
Y3QiLA0KLSAgICAgICAgICAgICAgICAgICBuYW1lLCBkZXNjcmlwdGlvbiwNCi0gICAgICAgICAg
ICAgICAgICAgInByb3ZpZGVkIHZhbHVlIGlzIG5vdCBhbiBvYmplY3QiKTsNCi0NCi0gICAgICAg
ICAgICBhc3NlcnQoImhhc093blByb3BlcnR5IiBpbiBvYmplY3QsDQotICAgICAgICAgICAgICAg
ICAgIG5hbWUsIGRlc2NyaXB0aW9uLA0KLSAgICAgICAgICAgICAgICAgICAicHJvdmlkZWQgdmFs
dWUgaXMgYW4gb2JqZWN0IGJ1dCBoYXMgbm8gaGFzT3duUHJvcGVydHkgbWV0aG9kIik7DQotDQot
ICAgICAgICAgICAgYXNzZXJ0KCFvYmplY3QuaGFzT3duUHJvcGVydHkocHJvcGVydHlfbmFtZSks
DQotICAgICAgICAgICAgICAgICAgIG5hbWUsIGRlc2NyaXB0aW9uLA0KLSAgICAgICAgICAgICAg
ICAgICAicHJvcGVydHkgJHtwfSBmb3VuZCBvbiBvYmplY3QgZXhwZWN0ZWQgaW4gcHJvdG90eXBl
IGNoYWluIiwNCi0gICAgICAgICAgICAgICAgICAge3A6cHJvcGVydHlfbmFtZX0pOw0KLQ0KLSAg
ICAgICAgICAgIGFzc2VydChwcm9wZXJ0eV9uYW1lIGluIG9iamVjdCwNCi0gICAgICAgICAgICAg
ICAgICAgbmFtZSwgZGVzY3JpcHRpb24sDQotICAgICAgICAgICAgICAgICAgICJwcm9wZXJ0eSAk
e3B9IG5vdCBmb3VuZCBpbiBwcm90b3R5cGUgY2hhaW4iLA0KLSAgICAgICAgICAgICAgICAgICB7
cDpwcm9wZXJ0eV9uYW1lfSk7DQotICAgICAgICB9Ow0KLSAgICB9DQotICAgIGV4cG9zZShfYXNz
ZXJ0X2luaGVyaXRzKCJhc3NlcnRfaW5oZXJpdHMiKSwgImFzc2VydF9pbmhlcml0cyIpOw0KLSAg
ICBleHBvc2UoX2Fzc2VydF9pbmhlcml0cygiYXNzZXJ0X2lkbF9hdHRyaWJ1dGUiKSwgImFzc2Vy
dF9pZGxfYXR0cmlidXRlIik7DQotDQotICAgIGZ1bmN0aW9uIGFzc2VydF9yZWFkb25seShvYmpl
Y3QsIHByb3BlcnR5X25hbWUsIGRlc2NyaXB0aW9uKQ0KLSAgICB7DQotICAgICAgICAgdmFyIGlu
aXRpYWxfdmFsdWUgPSBvYmplY3RbcHJvcGVydHlfbmFtZV07DQotICAgICAgICAgdHJ5IHsNCi0g
ICAgICAgICAgICAgLy9Ob3RlIHRoYXQgdGhpcyBjYW4gaGF2ZSBzaWRlIGVmZmVjdHMgaW4gdGhl
IGNhc2Ugd2hlcmUNCi0gICAgICAgICAgICAgLy90aGUgcHJvcGVydHkgaGFzIFB1dEZvcndhcmRz
DQotICAgICAgICAgICAgIG9iamVjdFtwcm9wZXJ0eV9uYW1lXSA9IGluaXRpYWxfdmFsdWUgKyAi
YSI7IC8vWFhYIHVzZSBzb21lIG90aGVyIHZhbHVlIGhlcmU/DQotICAgICAgICAgICAgIGFzc2Vy
dChzYW1lX3ZhbHVlKG9iamVjdFtwcm9wZXJ0eV9uYW1lXSwgaW5pdGlhbF92YWx1ZSksDQotICAg
ICAgICAgICAgICAgICAgICAiYXNzZXJ0X3JlYWRvbmx5IiwgZGVzY3JpcHRpb24sDQotICAgICAg
ICAgICAgICAgICAgICAiY2hhbmdpbmcgcHJvcGVydHkgJHtwfSBzdWNjZWVkZWQiLA0KLSAgICAg
ICAgICAgICAgICAgICAge3A6cHJvcGVydHlfbmFtZX0pOw0KLSAgICAgICAgIH0NCi0gICAgICAg
ICBmaW5hbGx5DQotICAgICAgICAgew0KLSAgICAgICAgICAgICBvYmplY3RbcHJvcGVydHlfbmFt
ZV0gPSBpbml0aWFsX3ZhbHVlOw0KLSAgICAgICAgIH0NCi0gICAgfTsNCi0gICAgZXhwb3NlKGFz
c2VydF9yZWFkb25seSwgImFzc2VydF9yZWFkb25seSIpOw0KLQ0KLSAgICBmdW5jdGlvbiBhc3Nl
cnRfdGhyb3dzKGNvZGUsIGZ1bmMsIGRlc2NyaXB0aW9uKQ0KLSAgICB7DQotICAgICAgICB0cnkN
Ci0gICAgICAgIHsNCi0gICAgICAgICAgICBmdW5jLmNhbGwodGhpcyk7DQotICAgICAgICAgICAg
YXNzZXJ0KGZhbHNlLCAiYXNzZXJ0X3Rocm93cyIsIGRlc2NyaXB0aW9uLA0KLSAgICAgICAgICAg
ICAgICAgICAiJHtmdW5jfSBkaWQgbm90IHRocm93Iiwge2Z1bmM6ZnVuY30pOw0KLSAgICAgICAg
fQ0KLSAgICAgICAgY2F0Y2goZSkNCi0gICAgICAgIHsNCi0gICAgICAgICAgICBpZiAoZSBpbnN0
YW5jZW9mIEFzc2VydGlvbkVycm9yKSB7DQotICAgICAgICAgICAgICAgIHRocm93KGUpOw0KLSAg
ICAgICAgICAgIH0NCi0gICAgICAgICAgICBpZiAoY29kZSA9PT0gbnVsbCkNCi0gICAgICAgICAg
ICB7DQotICAgICAgICAgICAgICAgIHJldHVybjsNCi0gICAgICAgICAgICB9DQotICAgICAgICAg
ICAgaWYgKHR5cGVvZiBjb2RlID09PSAib2JqZWN0IikNCi0gICAgICAgICAgICB7DQotICAgICAg
ICAgICAgICAgIGFzc2VydCh0eXBlb2YgZSA9PSAib2JqZWN0IiAmJiAibmFtZSIgaW4gZSAmJiBl
Lm5hbWUgPT0gY29kZS5uYW1lLA0KLSAgICAgICAgICAgICAgICAgICAgICAgImFzc2VydF90aHJv
d3MiLCBkZXNjcmlwdGlvbiwNCi0gICAgICAgICAgICAgICAgICAgICAgICIke2Z1bmN9IHRocmV3
ICR7YWN0dWFsfSAoJHthY3R1YWxfbmFtZX0pIGV4cGVjdGVkICR7ZXhwZWN0ZWR9ICgke2V4cGVj
dGVkX25hbWV9KSIsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge2Z1bmM6
ZnVuYywgYWN0dWFsOmUsIGFjdHVhbF9uYW1lOmUubmFtZSwNCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgZXhwZWN0ZWQ6Y29kZSwNCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgZXhwZWN0ZWRfbmFtZTpjb2RlLm5hbWV9KTsNCi0gICAgICAgICAgICAg
ICAgcmV0dXJuOw0KLSAgICAgICAgICAgIH0NCi0NCi0gICAgICAgICAgICB2YXIgY29kZV9uYW1l
X21hcCA9IHsNCi0gICAgICAgICAgICAgICAgSU5ERVhfU0laRV9FUlI6ICdJbmRleFNpemVFcnJv
cicsDQotICAgICAgICAgICAgICAgIEhJRVJBUkNIWV9SRVFVRVNUX0VSUjogJ0hpZXJhcmNoeVJl
cXVlc3RFcnJvcicsDQotICAgICAgICAgICAgICAgIFdST05HX0RPQ1VNRU5UX0VSUjogJ1dyb25n
RG9jdW1lbnRFcnJvcicsDQotICAgICAgICAgICAgICAgIElOVkFMSURfQ0hBUkFDVEVSX0VSUjog
J0ludmFsaWRDaGFyYWN0ZXJFcnJvcicsDQotICAgICAgICAgICAgICAgIE5PX01PRElGSUNBVElP
Tl9BTExPV0VEX0VSUjogJ05vTW9kaWZpY2F0aW9uQWxsb3dlZEVycm9yJywNCi0gICAgICAgICAg
ICAgICAgTk9UX0ZPVU5EX0VSUjogJ05vdEZvdW5kRXJyb3InLA0KLSAgICAgICAgICAgICAgICBO
T1RfU1VQUE9SVEVEX0VSUjogJ05vdFN1cHBvcnRlZEVycm9yJywNCi0gICAgICAgICAgICAgICAg
SU5WQUxJRF9TVEFURV9FUlI6ICdJbnZhbGlkU3RhdGVFcnJvcicsDQotICAgICAgICAgICAgICAg
IFNZTlRBWF9FUlI6ICdTeW50YXhFcnJvcicsDQotICAgICAgICAgICAgICAgIElOVkFMSURfTU9E
SUZJQ0FUSU9OX0VSUjogJ0ludmFsaWRNb2RpZmljYXRpb25FcnJvcicsDQotICAgICAgICAgICAg
ICAgIE5BTUVTUEFDRV9FUlI6ICdOYW1lc3BhY2VFcnJvcicsDQotICAgICAgICAgICAgICAgIElO
VkFMSURfQUNDRVNTX0VSUjogJ0ludmFsaWRBY2Nlc3NFcnJvcicsDQotICAgICAgICAgICAgICAg
IFRZUEVfTUlTTUFUQ0hfRVJSOiAnVHlwZU1pc21hdGNoRXJyb3InLA0KLSAgICAgICAgICAgICAg
ICBTRUNVUklUWV9FUlI6ICdTZWN1cml0eUVycm9yJywNCi0gICAgICAgICAgICAgICAgTkVUV09S
S19FUlI6ICdOZXR3b3JrRXJyb3InLA0KLSAgICAgICAgICAgICAgICBBQk9SVF9FUlI6ICdBYm9y
dEVycm9yJywNCi0gICAgICAgICAgICAgICAgVVJMX01JU01BVENIX0VSUjogJ1VSTE1pc21hdGNo
RXJyb3InLA0KLSAgICAgICAgICAgICAgICBRVU9UQV9FWENFRURFRF9FUlI6ICdRdW90YUV4Y2Vl
ZGVkRXJyb3InLA0KLSAgICAgICAgICAgICAgICBUSU1FT1VUX0VSUjogJ1RpbWVvdXRFcnJvcics
DQotICAgICAgICAgICAgICAgIElOVkFMSURfTk9ERV9UWVBFX0VSUjogJ0ludmFsaWROb2RlVHlw
ZUVycm9yJywNCi0gICAgICAgICAgICAgICAgREFUQV9DTE9ORV9FUlI6ICdEYXRhQ2xvbmVFcnJv
cicNCi0gICAgICAgICAgICB9Ow0KLQ0KLSAgICAgICAgICAgIHZhciBuYW1lID0gY29kZSBpbiBj
b2RlX25hbWVfbWFwID8gY29kZV9uYW1lX21hcFtjb2RlXSA6IGNvZGU7DQotDQotICAgICAgICAg
ICAgdmFyIG5hbWVfY29kZV9tYXAgPSB7DQotICAgICAgICAgICAgICAgIEluZGV4U2l6ZUVycm9y
OiAxLA0KLSAgICAgICAgICAgICAgICBIaWVyYXJjaHlSZXF1ZXN0RXJyb3I6IDMsDQotICAgICAg
ICAgICAgICAgIFdyb25nRG9jdW1lbnRFcnJvcjogNCwNCi0gICAgICAgICAgICAgICAgSW52YWxp
ZENoYXJhY3RlckVycm9yOiA1LA0KLSAgICAgICAgICAgICAgICBOb01vZGlmaWNhdGlvbkFsbG93
ZWRFcnJvcjogNywNCi0gICAgICAgICAgICAgICAgTm90Rm91bmRFcnJvcjogOCwNCi0gICAgICAg
ICAgICAgICAgTm90U3VwcG9ydGVkRXJyb3I6IDksDQotICAgICAgICAgICAgICAgIEludmFsaWRT
dGF0ZUVycm9yOiAxMSwNCi0gICAgICAgICAgICAgICAgU3ludGF4RXJyb3I6IDEyLA0KLSAgICAg
ICAgICAgICAgICBJbnZhbGlkTW9kaWZpY2F0aW9uRXJyb3I6IDEzLA0KLSAgICAgICAgICAgICAg
ICBOYW1lc3BhY2VFcnJvcjogMTQsDQotICAgICAgICAgICAgICAgIEludmFsaWRBY2Nlc3NFcnJv
cjogMTUsDQotICAgICAgICAgICAgICAgIFR5cGVNaXNtYXRjaEVycm9yOiAxNywNCi0gICAgICAg
ICAgICAgICAgU2VjdXJpdHlFcnJvcjogMTgsDQotICAgICAgICAgICAgICAgIE5ldHdvcmtFcnJv
cjogMTksDQotICAgICAgICAgICAgICAgIEFib3J0RXJyb3I6IDIwLA0KLSAgICAgICAgICAgICAg
ICBVUkxNaXNtYXRjaEVycm9yOiAyMSwNCi0gICAgICAgICAgICAgICAgUXVvdGFFeGNlZWRlZEVy
cm9yOiAyMiwNCi0gICAgICAgICAgICAgICAgVGltZW91dEVycm9yOiAyMywNCi0gICAgICAgICAg
ICAgICAgSW52YWxpZE5vZGVUeXBlRXJyb3I6IDI0LA0KLSAgICAgICAgICAgICAgICBEYXRhQ2xv
bmVFcnJvcjogMjUsDQotDQotICAgICAgICAgICAgICAgIFVua25vd25FcnJvcjogMCwNCi0gICAg
ICAgICAgICAgICAgQ29uc3RyYWludEVycm9yOiAwLA0KLSAgICAgICAgICAgICAgICBEYXRhRXJy
b3I6IDAsDQotICAgICAgICAgICAgICAgIFRyYW5zYWN0aW9uSW5hY3RpdmVFcnJvcjogMCwNCi0g
ICAgICAgICAgICAgICAgUmVhZE9ubHlFcnJvcjogMCwNCi0gICAgICAgICAgICAgICAgVmVyc2lv
bkVycm9yOiAwDQotICAgICAgICAgICAgfTsNCi0NCi0gICAgICAgICAgICBpZiAoIShuYW1lIGlu
IG5hbWVfY29kZV9tYXApKQ0KLSAgICAgICAgICAgIHsNCi0gICAgICAgICAgICAgICAgdGhyb3cg
bmV3IEFzc2VydGlvbkVycm9yKCdUZXN0IGJ1ZzogdW5yZWNvZ25pemVkIERPTUV4Y2VwdGlvbiBj
b2RlICInICsgY29kZSArICciIHBhc3NlZCB0byBhc3NlcnRfdGhyb3dzKCknKTsNCi0gICAgICAg
ICAgICB9DQotDQotICAgICAgICAgICAgdmFyIHJlcXVpcmVkX3Byb3BzID0geyBjb2RlOiBuYW1l
X2NvZGVfbWFwW25hbWVdIH07DQotDQotICAgICAgICAgICAgaWYgKHJlcXVpcmVkX3Byb3BzLmNv
ZGUgPT09IDANCi0gICAgICAgICAgICB8fCAoIm5hbWUiIGluIGUgJiYgZS5uYW1lICE9PSBlLm5h
bWUudG9VcHBlckNhc2UoKSAmJiBlLm5hbWUgIT09ICJET01FeGNlcHRpb24iKSkNCi0gICAgICAg
ICAgICB7DQotICAgICAgICAgICAgICAgIC8vIE5ldyBzdHlsZSBleGNlcHRpb246IGFsc28gdGVz
dCB0aGUgbmFtZSBwcm9wZXJ0eS4NCi0gICAgICAgICAgICAgICAgcmVxdWlyZWRfcHJvcHMubmFt
ZSA9IG5hbWU7DQotICAgICAgICAgICAgfQ0KLQ0KLSAgICAgICAgICAgIC8vV2UnZCBsaWtlIHRv
IHRlc3QgdGhhdCBlIGluc3RhbmNlb2YgdGhlIGFwcHJvcHJpYXRlIGludGVyZmFjZSwNCi0gICAg
ICAgICAgICAvL2J1dCB3ZSBjYW4ndCwgYmVjYXVzZSB3ZSBkb24ndCBrbm93IHdoYXQgd2luZG93
IGl0IHdhcyBjcmVhdGVkDQotICAgICAgICAgICAgLy9pbi4gIEl0IG1pZ2h0IGJlIGFuIGluc3Rh
bmNlb2YgdGhlIGFwcHJvcHJpYXRlIGludGVyZmFjZSBvbiBzb21lDQotICAgICAgICAgICAgLy91
bmtub3duIG90aGVyIHdpbmRvdy4gIFRPRE86IFdvcmsgYXJvdW5kIHRoaXMgc29tZWhvdz8NCi0N
Ci0gICAgICAgICAgICBhc3NlcnQodHlwZW9mIGUgPT0gIm9iamVjdCIsDQotICAgICAgICAgICAg
ICAgICAgICJhc3NlcnRfdGhyb3dzIiwgZGVzY3JpcHRpb24sDQotICAgICAgICAgICAgICAgICAg
ICIke2Z1bmN9IHRocmV3ICR7ZX0gd2l0aCB0eXBlICR7dHlwZX0sIG5vdCBhbiBvYmplY3QiLA0K
LSAgICAgICAgICAgICAgICAgICB7ZnVuYzpmdW5jLCBlOmUsIHR5cGU6dHlwZW9mIGV9KTsNCi0N
Ci0gICAgICAgICAgICBmb3IgKHZhciBwcm9wIGluIHJlcXVpcmVkX3Byb3BzKQ0KLSAgICAgICAg
ICAgIHsNCi0gICAgICAgICAgICAgICAgYXNzZXJ0KHR5cGVvZiBlID09ICJvYmplY3QiICYmIHBy
b3AgaW4gZSAmJiBlW3Byb3BdID09IHJlcXVpcmVkX3Byb3BzW3Byb3BdLA0KLSAgICAgICAgICAg
ICAgICAgICAgICAgImFzc2VydF90aHJvd3MiLCBkZXNjcmlwdGlvbiwNCi0gICAgICAgICAgICAg
ICAgICAgICAgICIke2Z1bmN9IHRocmV3ICR7ZX0gdGhhdCBpcyBub3QgYSBET01FeGNlcHRpb24g
IiArIGNvZGUgKyAiOiBwcm9wZXJ0eSAke3Byb3B9IGlzIGVxdWFsIHRvICR7YWN0dWFsfSwgZXhw
ZWN0ZWQgJHtleHBlY3RlZH0iLA0KLSAgICAgICAgICAgICAgICAgICAgICAge2Z1bmM6ZnVuYywg
ZTplLCBwcm9wOnByb3AsIGFjdHVhbDplW3Byb3BdLCBleHBlY3RlZDpyZXF1aXJlZF9wcm9wc1tw
cm9wXX0pOw0KLSAgICAgICAgICAgIH0NCi0gICAgICAgIH0NCi0gICAgfQ0KLSAgICBleHBvc2Uo
YXNzZXJ0X3Rocm93cywgImFzc2VydF90aHJvd3MiKTsNCi0NCi0gICAgZnVuY3Rpb24gYXNzZXJ0
X3VucmVhY2hlZChkZXNjcmlwdGlvbikgew0KLSAgICAgICAgIGFzc2VydChmYWxzZSwgImFzc2Vy
dF91bnJlYWNoZWQiLCBkZXNjcmlwdGlvbiwNCi0gICAgICAgICAgICAgICAgIlJlYWNoZWQgdW5y
ZWFjaGFibGUgY29kZSIpOw0KLSAgICB9DQotICAgIGV4cG9zZShhc3NlcnRfdW5yZWFjaGVkLCAi
YXNzZXJ0X3VucmVhY2hlZCIpOw0KLQ0KLSAgICBmdW5jdGlvbiBhc3NlcnRfYW55KGFzc2VydF9m
dW5jLCBhY3R1YWwsIGV4cGVjdGVkX2FycmF5KSANCi0gICAgew0KLSAgICAgICAgdmFyIGFyZ3Mg
PSBbXS5zbGljZS5jYWxsKGFyZ3VtZW50cywgMykNCi0gICAgICAgIHZhciBlcnJvcnMgPSBbXQ0K
LSAgICAgICAgdmFyIHBhc3NlZCA9IGZhbHNlOw0KLSAgICAgICAgZm9yRWFjaChleHBlY3RlZF9h
cnJheSwgDQotICAgICAgICAgICAgICAgIGZ1bmN0aW9uKGV4cGVjdGVkKQ0KLSAgICAgICAgICAg
ICAgICB7DQotICAgICAgICAgICAgICAgICAgICB0cnkgew0KLSAgICAgICAgICAgICAgICAgICAg
ICAgIGFzc2VydF9mdW5jLmFwcGx5KHRoaXMsIFthY3R1YWwsIGV4cGVjdGVkXS5jb25jYXQoYXJn
cykpDQotICAgICAgICAgICAgICAgICAgICAgICAgcGFzc2VkID0gdHJ1ZTsNCi0gICAgICAgICAg
ICAgICAgICAgIH0gY2F0Y2goZSkgew0KLSAgICAgICAgICAgICAgICAgICAgICAgIGVycm9ycy5w
dXNoKGUubWVzc2FnZSk7DQotICAgICAgICAgICAgICAgICAgICB9DQotICAgICAgICAgICAgICAg
IH0pOw0KLSAgICAgICAgaWYgKCFwYXNzZWQpIHsNCi0gICAgICAgICAgICB0aHJvdyBuZXcgQXNz
ZXJ0aW9uRXJyb3IoZXJyb3JzLmpvaW4oIlxuXG4iKSk7DQotICAgICAgICB9DQotICAgIH0NCi0g
ICAgZXhwb3NlKGFzc2VydF9hbnksICJhc3NlcnRfYW55Iik7DQotDQotICAgIGZ1bmN0aW9uIFRl
c3QobmFtZSwgcHJvcGVydGllcykNCi0gICAgew0KLSAgICAgICAgdGhpcy5uYW1lID0gbmFtZTsN
Ci0gICAgICAgIHRoaXMuc3RhdHVzID0gdGhpcy5OT1RSVU47DQotICAgICAgICB0aGlzLnRpbWVv
dXRfaWQgPSBudWxsOw0KLSAgICAgICAgdGhpcy5pc19kb25lID0gZmFsc2U7DQotDQotICAgICAg
ICB0aGlzLnByb3BlcnRpZXMgPSBwcm9wZXJ0aWVzOw0KLSAgICAgICAgdGhpcy50aW1lb3V0X2xl
bmd0aCA9IHByb3BlcnRpZXMudGltZW91dCA/IHByb3BlcnRpZXMudGltZW91dCA6IHNldHRpbmdz
LnRlc3RfdGltZW91dDsNCi0NCi0gICAgICAgIHRoaXMubWVzc2FnZSA9IG51bGw7DQotDQotICAg
ICAgICB2YXIgdGhpc19vYmogPSB0aGlzOw0KLSAgICAgICAgdGhpcy5zdGVwcyA9IFtdOw0KLQ0K
LSAgICAgICAgdGVzdHMucHVzaCh0aGlzKTsNCi0gICAgfQ0KLQ0KLSAgICBUZXN0LnN0YXR1c2Vz
ID0gew0KLSAgICAgICAgUEFTUzowLA0KLSAgICAgICAgRkFJTDoxLA0KLSAgICAgICAgVElNRU9V
VDoyLA0KLSAgICAgICAgTk9UUlVOOjMNCi0gICAgfTsNCi0NCi0gICAgVGVzdC5wcm90b3R5cGUg
PSBtZXJnZSh7fSwgVGVzdC5zdGF0dXNlcyk7DQotDQotICAgIFRlc3QucHJvdG90eXBlLnN0cnVj
dHVyZWRfY2xvbmUgPSBmdW5jdGlvbigpDQotICAgIHsNCi0gICAgICAgIGlmKCF0aGlzLl9zdHJ1
Y3R1cmVkX2Nsb25lKQ0KLSAgICAgICAgew0KLSAgICAgICAgICAgIHZhciBtc2cgPSB0aGlzLm1l
c3NhZ2U7DQotICAgICAgICAgICAgbXNnID0gbXNnID8gU3RyaW5nKG1zZykgOiBtc2c7DQotICAg
ICAgICAgICAgdGhpcy5fc3RydWN0dXJlZF9jbG9uZSA9IG1lcmdlKHsNCi0gICAgICAgICAgICAg
ICAgbmFtZTpTdHJpbmcodGhpcy5uYW1lKSwNCi0gICAgICAgICAgICAgICAgc3RhdHVzOnRoaXMu
c3RhdHVzLA0KLSAgICAgICAgICAgICAgICBtZXNzYWdlOm1zZw0KLSAgICAgICAgICAgIH0sIFRl
c3Quc3RhdHVzZXMpOw0KLSAgICAgICAgfQ0KLSAgICAgICAgcmV0dXJuIHRoaXMuX3N0cnVjdHVy
ZWRfY2xvbmU7DQotICAgIH07DQotDQotICAgIFRlc3QucHJvdG90eXBlLnN0ZXAgPSBmdW5jdGlv
bihmdW5jLCB0aGlzX29iaikNCi0gICAgew0KLSAgICAgICAgLy9JbiBjYXNlIHRoZSB0ZXN0IGhh
cyBhbHJlYWR5IGZhaWxlZA0KLSAgICAgICAgaWYgKHRoaXMuc3RhdHVzICE9PSB0aGlzLk5PVFJV
TikNCi0gICAgICAgIHsNCi0gICAgICAgICAgcmV0dXJuOw0KLSAgICAgICAgfQ0KLQ0KLSAgICAg
ICAgdGVzdHMuc3RhcnRlZCA9IHRydWU7DQotDQotICAgICAgICBpZiAodGhpcy50aW1lb3V0X2lk
ID09PSBudWxsKSB7DQotICAgICAgICAgICAgdGhpcy5zZXRfdGltZW91dCgpOw0KLSAgICAgICAg
fQ0KLQ0KLSAgICAgICAgdGhpcy5zdGVwcy5wdXNoKGZ1bmMpOw0KLQ0KLSAgICAgICAgaWYgKGFy
Z3VtZW50cy5sZW5ndGggPT09IDEpDQotICAgICAgICB7DQotICAgICAgICAgICAgdGhpc19vYmog
PSB0aGlzOw0KLSAgICAgICAgfQ0KLQ0KLSAgICAgICAgdHJ5DQotICAgICAgICB7DQotICAgICAg
ICAgICAgZnVuYy5hcHBseSh0aGlzX29iaiwgQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJn
dW1lbnRzLCAyKSk7DQotICAgICAgICB9DQotICAgICAgICBjYXRjaChlKQ0KLSAgICAgICAgew0K
LSAgICAgICAgICAgIC8vVGhpcyBjYW4gaGFwcGVuIGlmIHNvbWV0aGluZyBjYWxsZWQgc3luY2hy
b25vdXNseSBpbnZva2VkIGFub3RoZXINCi0gICAgICAgICAgICAvL3N0ZXANCi0gICAgICAgICAg
ICBpZiAodGhpcy5zdGF0dXMgIT09IHRoaXMuTk9UUlVOKQ0KLSAgICAgICAgICAgIHsNCi0gICAg
ICAgICAgICAgICAgcmV0dXJuOw0KLSAgICAgICAgICAgIH0NCi0gICAgICAgICAgICB0aGlzLnN0
YXR1cyA9IHRoaXMuRkFJTDsNCi0gICAgICAgICAgICB0aGlzLm1lc3NhZ2UgPSAodHlwZW9mIGUg
PT09ICJvYmplY3QiICYmIGUgIT09IG51bGwpID8gZS5tZXNzYWdlIDogZTsNCi0gICAgICAgICAg
ICBpZiAodHlwZW9mIGUuc3RhY2sgIT0gInVuZGVmaW5lZCIgJiYgdHlwZW9mIGUubWVzc2FnZSA9
PSAic3RyaW5nIikgew0KLSAgICAgICAgICAgICAgICAvL1RyeSB0byBtYWtlIGl0IG1vcmUgaW5m
b3JtYXRpdmUgZm9yIHNvbWUgZXhjZXB0aW9ucywgYXQgbGVhc3QNCi0gICAgICAgICAgICAgICAg
Ly9pbiBHZWNrbyBhbmQgV2ViS2l0LiAgVGhpcyByZXN1bHRzIGluIGEgc3RhY2sgZHVtcCBpbnN0
ZWFkIG9mDQotICAgICAgICAgICAgICAgIC8vanVzdCBlcnJvcnMgbGlrZSAiQ2Fubm90IHJlYWQg
cHJvcGVydHkgJ3BhcmVudE5vZGUnIG9mIG51bGwiDQotICAgICAgICAgICAgICAgIC8vb3IgInJv
b3QgaXMgbnVsbCIuICBNYWtlcyBpdCBhIGxvdCBsb25nZXIsIG9mIGNvdXJzZS4NCi0gICAgICAg
ICAgICAgICAgdGhpcy5tZXNzYWdlICs9ICIoc3RhY2s6ICIgKyBlLnN0YWNrICsgIikiOw0KLSAg
ICAgICAgICAgIH0NCi0gICAgICAgICAgICB0aGlzLmRvbmUoKTsNCi0gICAgICAgICAgICBpZiAo
ZGVidWcgJiYgZS5jb25zdHJ1Y3RvciAhPT0gQXNzZXJ0aW9uRXJyb3IpIHsNCi0gICAgICAgICAg
ICAgICAgdGhyb3cgZTsNCi0gICAgICAgICAgICB9DQotICAgICAgICB9DQotICAgIH07DQotDQot
ICAgIFRlc3QucHJvdG90eXBlLnN0ZXBfZnVuYyA9IGZ1bmN0aW9uKGZ1bmMsIHRoaXNfb2JqKQ0K
LSAgICB7DQotICAgICAgICB2YXIgdGVzdF90aGlzID0gdGhpczsNCi0NCi0gICAgICAgIGlmIChh
cmd1bWVudHMubGVuZ3RoID09PSAxKQ0KLSAgICAgICAgew0KLSAgICAgICAgICAgIHRoaXNfb2Jq
ID0gdGVzdF90aGlzOw0KLSAgICAgICAgfQ0KLQ0KLSAgICAgICAgcmV0dXJuIGZ1bmN0aW9uKCkN
Ci0gICAgICAgIHsNCi0gICAgICAgICAgICB0ZXN0X3RoaXMuc3RlcC5hcHBseSh0ZXN0X3RoaXMs
IFtmdW5jLCB0aGlzX29ial0uY29uY2F0KA0KLSAgICAgICAgICAgICAgICBBcnJheS5wcm90b3R5
cGUuc2xpY2UuY2FsbChhcmd1bWVudHMpKSk7DQotICAgICAgICB9Ow0KLSAgICB9Ow0KLQ0KLSAg
ICBUZXN0LnByb3RvdHlwZS5zdGVwX2Z1bmNfZG9uZSA9IGZ1bmN0aW9uKGZ1bmMsIHRoaXNfb2Jq
KQ0KLSAgICB7DQotICAgICAgICB2YXIgdGVzdF90aGlzID0gdGhpczsNCi0NCi0gICAgICAgIGlm
IChhcmd1bWVudHMubGVuZ3RoID09PSAxKQ0KLSAgICAgICAgew0KLSAgICAgICAgICAgIHRoaXNf
b2JqID0gdGVzdF90aGlzOw0KLSAgICAgICAgfQ0KLQ0KLSAgICAgICAgcmV0dXJuIGZ1bmN0aW9u
KCkNCi0gICAgICAgIHsNCi0gICAgICAgICAgICB0ZXN0X3RoaXMuc3RlcC5hcHBseSh0ZXN0X3Ro
aXMsIFtmdW5jLCB0aGlzX29ial0uY29uY2F0KA0KLSAgICAgICAgICAgICAgICBBcnJheS5wcm90
b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMpKSk7DQotICAgICAgICAgICAgdGVzdF90aGlzLmRv
bmUoKTsNCi0gICAgICAgIH07DQotICAgIH07DQotDQotICAgIFRlc3QucHJvdG90eXBlLnNldF90
aW1lb3V0ID0gZnVuY3Rpb24oKQ0KLSAgICB7DQotICAgICAgICB2YXIgdGhpc19vYmogPSB0aGlz
Ow0KLSAgICAgICAgdGhpcy50aW1lb3V0X2lkID0gc2V0VGltZW91dChmdW5jdGlvbigpDQotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsNCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHRoaXNfb2JqLnRpbWVvdXQoKTsNCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgfSwgdGhpcy50aW1lb3V0X2xlbmd0aCk7DQotICAgIH07
DQotDQotICAgIFRlc3QucHJvdG90eXBlLnRpbWVvdXQgPSBmdW5jdGlvbigpDQotICAgIHsNCi0g
ICAgICAgIHRoaXMuc3RhdHVzID0gdGhpcy5USU1FT1VUOw0KLSAgICAgICAgdGhpcy50aW1lb3V0
X2lkID0gbnVsbDsNCi0gICAgICAgIHRoaXMubWVzc2FnZSA9ICJUZXN0IHRpbWVkIG91dCI7DQot
ICAgICAgICB0aGlzLmRvbmUoKTsNCi0gICAgfTsNCi0NCi0gICAgVGVzdC5wcm90b3R5cGUuZG9u
ZSA9IGZ1bmN0aW9uKCkNCi0gICAgew0KLSAgICAgICAgaWYgKHRoaXMuaXNfZG9uZSkgew0KLSAg
ICAgICAgICAgIHJldHVybjsNCi0gICAgICAgIH0NCi0gICAgICAgIGNsZWFyVGltZW91dCh0aGlz
LnRpbWVvdXRfaWQpOw0KLSAgICAgICAgaWYgKHRoaXMuc3RhdHVzID09PSB0aGlzLk5PVFJVTikN
Ci0gICAgICAgIHsNCi0gICAgICAgICAgICB0aGlzLnN0YXR1cyA9IHRoaXMuUEFTUzsNCi0gICAg
ICAgIH0NCi0gICAgICAgIHRoaXMuaXNfZG9uZSA9IHRydWU7DQotICAgICAgICB0ZXN0cy5yZXN1
bHQodGhpcyk7DQotICAgIH07DQotDQotDQotICAgIC8qDQotICAgICAqIEhhcm5lc3MNCi0gICAg
ICovDQotDQotICAgIGZ1bmN0aW9uIFRlc3RzU3RhdHVzKCkNCi0gICAgew0KLSAgICAgICAgdGhp
cy5zdGF0dXMgPSBudWxsOw0KLSAgICAgICAgdGhpcy5tZXNzYWdlID0gbnVsbDsNCi0gICAgfQ0K
LQ0KLSAgICBUZXN0c1N0YXR1cy5zdGF0dXNlcyA9IHsNCi0gICAgICAgIE9LOjAsDQotICAgICAg
ICBFUlJPUjoxLA0KLSAgICAgICAgVElNRU9VVDoyDQotICAgIH07DQotDQotICAgIFRlc3RzU3Rh
dHVzLnByb3RvdHlwZSA9IG1lcmdlKHt9LCBUZXN0c1N0YXR1cy5zdGF0dXNlcyk7DQotDQotICAg
IFRlc3RzU3RhdHVzLnByb3RvdHlwZS5zdHJ1Y3R1cmVkX2Nsb25lID0gZnVuY3Rpb24oKQ0KLSAg
ICB7DQotICAgICAgICBpZighdGhpcy5fc3RydWN0dXJlZF9jbG9uZSkNCi0gICAgICAgIHsNCi0g
ICAgICAgICAgICB2YXIgbXNnID0gdGhpcy5tZXNzYWdlOw0KLSAgICAgICAgICAgIG1zZyA9IG1z
ZyA/IFN0cmluZyhtc2cpIDogbXNnOw0KLSAgICAgICAgICAgIHRoaXMuX3N0cnVjdHVyZWRfY2xv
bmUgPSBtZXJnZSh7DQotICAgICAgICAgICAgICAgIHN0YXR1czp0aGlzLnN0YXR1cywNCi0gICAg
ICAgICAgICAgICAgbWVzc2FnZTptc2cNCi0gICAgICAgICAgICB9LCBUZXN0c1N0YXR1cy5zdGF0
dXNlcyk7DQotICAgICAgICB9DQotICAgICAgICByZXR1cm4gdGhpcy5fc3RydWN0dXJlZF9jbG9u
ZTsNCi0gICAgfTsNCi0NCi0gICAgZnVuY3Rpb24gVGVzdHMoKQ0KLSAgICB7DQotICAgICAgICB0
aGlzLnRlc3RzID0gW107DQotICAgICAgICB0aGlzLm51bV9wZW5kaW5nID0gMDsNCi0NCi0gICAg
ICAgIHRoaXMucGhhc2VzID0gew0KLSAgICAgICAgICAgIElOSVRJQUw6MCwNCi0gICAgICAgICAg
ICBTRVRVUDoxLA0KLSAgICAgICAgICAgIEhBVkVfVEVTVFM6MiwNCi0gICAgICAgICAgICBIQVZF
X1JFU1VMVFM6MywNCi0gICAgICAgICAgICBDT01QTEVURTo0DQotICAgICAgICB9Ow0KLSAgICAg
ICAgdGhpcy5waGFzZSA9IHRoaXMucGhhc2VzLklOSVRJQUw7DQotDQotICAgICAgICB0aGlzLnBy
b3BlcnRpZXMgPSB7fTsNCi0NCi0gICAgICAgIC8vQWxsIHRlc3RzIGNhbid0IGJlIGRvbmUgdW50
aWwgdGhlIGxvYWQgZXZlbnQgZmlyZXMNCi0gICAgICAgIHRoaXMuYWxsX2xvYWRlZCA9IGZhbHNl
Ow0KLSAgICAgICAgdGhpcy53YWl0X2Zvcl9maW5pc2ggPSBmYWxzZTsNCi0gICAgICAgIHRoaXMu
cHJvY2Vzc2luZ19jYWxsYmFja3MgPSBmYWxzZTsNCi0NCi0gICAgICAgIHRoaXMudGltZW91dF9s
ZW5ndGggPSBzZXR0aW5ncy50aW1lb3V0Ow0KLSAgICAgICAgdGhpcy50aW1lb3V0X2lkID0gbnVs
bDsNCi0NCi0gICAgICAgIHRoaXMuc3RhcnRfY2FsbGJhY2tzID0gW107DQotICAgICAgICB0aGlz
LnRlc3RfZG9uZV9jYWxsYmFja3MgPSBbXTsNCi0gICAgICAgIHRoaXMuYWxsX2RvbmVfY2FsbGJh
Y2tzID0gW107DQotDQotICAgICAgICB0aGlzLnN0YXR1cyA9IG5ldyBUZXN0c1N0YXR1cygpOw0K
LQ0KLSAgICAgICAgdmFyIHRoaXNfb2JqID0gdGhpczsNCi0NCi0gICAgICAgIG9uX2V2ZW50KHdp
bmRvdywgImxvYWQiLA0KLSAgICAgICAgICAgICAgICAgZnVuY3Rpb24oKQ0KLSAgICAgICAgICAg
ICAgICAgew0KLSAgICAgICAgICAgICAgICAgICAgIHRoaXNfb2JqLmFsbF9sb2FkZWQgPSB0cnVl
Ow0KLSAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzX29iai5hbGxfZG9uZSgpKQ0KLSAgICAg
ICAgICAgICAgICAgICAgIHsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgdGhpc19vYmouY29t
cGxldGUoKTsNCi0gICAgICAgICAgICAgICAgICAgICB9DQotICAgICAgICAgICAgICAgICB9KTsN
Ci0NCi0gICAgICAgIHRoaXMuc2V0X3RpbWVvdXQoKTsNCi0gICAgfQ0KLQ0KLSAgICBUZXN0cy5w
cm90b3R5cGUuc2V0dXAgPSBmdW5jdGlvbihmdW5jLCBwcm9wZXJ0aWVzKQ0KLSAgICB7DQotICAg
ICAgICBpZiAodGhpcy5waGFzZSA+PSB0aGlzLnBoYXNlcy5IQVZFX1JFU1VMVFMpDQotICAgICAg
ICB7DQotICAgICAgICAgICAgcmV0dXJuOw0KLSAgICAgICAgfQ0KLSAgICAgICAgaWYgKHRoaXMu
cGhhc2UgPCB0aGlzLnBoYXNlcy5TRVRVUCkNCi0gICAgICAgIHsNCi0gICAgICAgICAgICB0aGlz
LnBoYXNlID0gdGhpcy5waGFzZXMuU0VUVVA7DQotICAgICAgICB9DQotDQotICAgICAgICBmb3Ig
KHZhciBwIGluIHByb3BlcnRpZXMpDQotICAgICAgICB7DQotICAgICAgICAgICAgaWYgKHByb3Bl
cnRpZXMuaGFzT3duUHJvcGVydHkocCkpDQotICAgICAgICAgICAgew0KLSAgICAgICAgICAgICAg
ICB0aGlzLnByb3BlcnRpZXNbcF0gPSBwcm9wZXJ0aWVzW3BdOw0KLSAgICAgICAgICAgIH0NCi0g
ICAgICAgIH0NCi0NCi0gICAgICAgIGlmIChwcm9wZXJ0aWVzLnRpbWVvdXQpDQotICAgICAgICB7
DQotICAgICAgICAgICAgdGhpcy50aW1lb3V0X2xlbmd0aCA9IHByb3BlcnRpZXMudGltZW91dDsN
Ci0gICAgICAgIH0NCi0gICAgICAgIGlmIChwcm9wZXJ0aWVzLmV4cGxpY2l0X2RvbmUpDQotICAg
ICAgICB7DQotICAgICAgICAgICAgdGhpcy53YWl0X2Zvcl9maW5pc2ggPSB0cnVlOw0KLSAgICAg
ICAgfQ0KLSAgICAgICAgaWYgKHByb3BlcnRpZXMuZXhwbGljaXRfdGltZW91dCkgew0KLSAgICAg
ICAgICAgIHRoaXMudGltZW91dF9sZW5ndGggPSBudWxsOw0KLSAgICAgICAgfQ0KLQ0KLSAgICAg
ICAgaWYgKGZ1bmMpDQotICAgICAgICB7DQotICAgICAgICAgICAgdHJ5DQotICAgICAgICAgICAg
ew0KLSAgICAgICAgICAgICAgICBmdW5jKCk7DQotICAgICAgICAgICAgfSBjYXRjaChlKQ0KLSAg
ICAgICAgICAgIHsNCi0gICAgICAgICAgICAgICAgdGhpcy5zdGF0dXMuc3RhdHVzID0gdGhpcy5z
dGF0dXMuRVJST1I7DQotICAgICAgICAgICAgICAgIHRoaXMuc3RhdHVzLm1lc3NhZ2UgPSBlOw0K
LSAgICAgICAgICAgIH07DQotICAgICAgICB9DQotICAgICAgICB0aGlzLnNldF90aW1lb3V0KCk7
DQotICAgIH07DQotDQotICAgIFRlc3RzLnByb3RvdHlwZS5zZXRfdGltZW91dCA9IGZ1bmN0aW9u
KCkNCi0gICAgew0KLSAgICAgICAgdmFyIHRoaXNfb2JqID0gdGhpczsNCi0gICAgICAgIGNsZWFy
VGltZW91dCh0aGlzLnRpbWVvdXRfaWQpOw0KLSAgICAgICAgaWYgKHRoaXMudGltZW91dF9sZW5n
dGggIT09IG51bGwpDQotICAgICAgICB7DQotICAgICAgICAgICAgdGhpcy50aW1lb3V0X2lkID0g
c2V0VGltZW91dChmdW5jdGlvbigpIHsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB0aGlzX29iai50aW1lb3V0KCk7DQotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB9LCB0aGlzLnRpbWVvdXRfbGVuZ3RoKTsNCi0gICAgICAgIH0N
Ci0gICAgfTsNCi0NCi0gICAgVGVzdHMucHJvdG90eXBlLnRpbWVvdXQgPSBmdW5jdGlvbigpIHsN
Ci0gICAgICAgIHRoaXMuc3RhdHVzLnN0YXR1cyA9IHRoaXMuc3RhdHVzLlRJTUVPVVQ7DQotICAg
ICAgICB0aGlzLmNvbXBsZXRlKCk7DQotICAgIH07DQotDQotICAgIFRlc3RzLnByb3RvdHlwZS5l
bmRfd2FpdCA9IGZ1bmN0aW9uKCkNCi0gICAgew0KLSAgICAgICAgdGhpcy53YWl0X2Zvcl9maW5p
c2ggPSBmYWxzZTsNCi0gICAgICAgIGlmICh0aGlzLmFsbF9kb25lKCkpIHsNCi0gICAgICAgICAg
ICB0aGlzLmNvbXBsZXRlKCk7DQotICAgICAgICB9DQotICAgIH07DQotDQotICAgIFRlc3RzLnBy
b3RvdHlwZS5wdXNoID0gZnVuY3Rpb24odGVzdCkNCi0gICAgew0KLSAgICAgICAgaWYgKHRoaXMu
cGhhc2UgPCB0aGlzLnBoYXNlcy5IQVZFX1RFU1RTKSB7DQotICAgICAgICAgICAgdGhpcy5zdGFy
dCgpOw0KLSAgICAgICAgfQ0KLSAgICAgICAgdGhpcy5udW1fcGVuZGluZysrOw0KLSAgICAgICAg
dGhpcy50ZXN0cy5wdXNoKHRlc3QpOw0KLSAgICB9Ow0KLQ0KLSAgICBUZXN0cy5wcm90b3R5cGUu
YWxsX2RvbmUgPSBmdW5jdGlvbigpIHsNCi0gICAgICAgIHJldHVybiAodGhpcy5hbGxfbG9hZGVk
ICYmIHRoaXMubnVtX3BlbmRpbmcgPT09IDAgJiYNCi0gICAgICAgICAgICAgICAgIXRoaXMud2Fp
dF9mb3JfZmluaXNoICYmICF0aGlzLnByb2Nlc3NpbmdfY2FsbGJhY2tzKTsNCi0gICAgfTsNCi0N
Ci0gICAgVGVzdHMucHJvdG90eXBlLnN0YXJ0ID0gZnVuY3Rpb24oKSB7DQotICAgICAgICB0aGlz
LnBoYXNlID0gdGhpcy5waGFzZXMuSEFWRV9URVNUUzsNCi0gICAgICAgIHRoaXMubm90aWZ5X3N0
YXJ0KCk7DQotICAgIH07DQotDQotICAgIFRlc3RzLnByb3RvdHlwZS5ub3RpZnlfc3RhcnQgPSBm
dW5jdGlvbigpIHsNCi0gICAgICAgIHZhciB0aGlzX29iaiA9IHRoaXM7DQotICAgICAgICBmb3JF
YWNoICh0aGlzLnN0YXJ0X2NhbGxiYWNrcywNCi0gICAgICAgICAgICAgICAgIGZ1bmN0aW9uKGNh
bGxiYWNrKQ0KLSAgICAgICAgICAgICAgICAgew0KLSAgICAgICAgICAgICAgICAgICAgIGNhbGxi
YWNrKHRoaXNfb2JqLnByb3BlcnRpZXMpOw0KLSAgICAgICAgICAgICAgICAgfSk7DQotICAgICAg
ICBmb3JFYWNoX3dpbmRvd3MoDQotICAgICAgICAgICAgICAgIGZ1bmN0aW9uKHcsIGlzX3NhbWVf
b3JpZ2luKQ0KLSAgICAgICAgICAgICAgICB7DQotICAgICAgICAgICAgICAgICAgICBpZihpc19z
YW1lX29yaWdpbiAmJiB3LnN0YXJ0X2NhbGxiYWNrKQ0KLSAgICAgICAgICAgICAgICAgICAgew0K
LSAgICAgICAgICAgICAgICAgICAgICAgIHRyeQ0KLSAgICAgICAgICAgICAgICAgICAgICAgIHsN
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgdy5zdGFydF9jYWxsYmFjayh0aGlzX29iai5w
cm9wZXJ0aWVzKTsNCi0gICAgICAgICAgICAgICAgICAgICAgICB9DQotICAgICAgICAgICAgICAg
ICAgICAgICAgY2F0Y2goZSkNCi0gICAgICAgICAgICAgICAgICAgICAgICB7DQotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGlmIChkZWJ1ZykNCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgew0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3coZSk7DQotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIH0NCi0gICAgICAgICAgICAgICAgICAgICAgICB9DQotICAg
ICAgICAgICAgICAgICAgICB9DQotICAgICAgICAgICAgICAgICAgICBpZiAoc3VwcG9ydHNfcG9z
dF9tZXNzYWdlKHcpKQ0KLSAgICAgICAgICAgICAgICAgICAgew0KLSAgICAgICAgICAgICAgICAg
ICAgICAgIHcucG9zdE1lc3NhZ2Uoew0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBl
OiAic3RhcnQiLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9wZXJ0aWVzOiB0aGlz
X29iai5wcm9wZXJ0aWVzDQotICAgICAgICAgICAgICAgICAgICAgICAgfSwgIioiKTsNCi0gICAg
ICAgICAgICAgICAgICAgIH0NCi0gICAgICAgICAgICAgICAgfSk7DQotICAgIH07DQotDQotICAg
IFRlc3RzLnByb3RvdHlwZS5yZXN1bHQgPSBmdW5jdGlvbih0ZXN0KQ0KLSAgICB7DQotICAgICAg
ICBpZiAodGhpcy5waGFzZSA+IHRoaXMucGhhc2VzLkhBVkVfUkVTVUxUUykNCi0gICAgICAgIHsN
Ci0gICAgICAgICAgICByZXR1cm47DQotICAgICAgICB9DQotICAgICAgICB0aGlzLnBoYXNlID0g
dGhpcy5waGFzZXMuSEFWRV9SRVNVTFRTOw0KLSAgICAgICAgdGhpcy5udW1fcGVuZGluZy0tOw0K
LSAgICAgICAgdGhpcy5ub3RpZnlfcmVzdWx0KHRlc3QpOw0KLSAgICB9Ow0KLQ0KLSAgICBUZXN0
cy5wcm90b3R5cGUubm90aWZ5X3Jlc3VsdCA9IGZ1bmN0aW9uKHRlc3QpIHsNCi0gICAgICAgIHZh
ciB0aGlzX29iaiA9IHRoaXM7DQotICAgICAgICB0aGlzLnByb2Nlc3NpbmdfY2FsbGJhY2tzID0g
dHJ1ZTsNCi0gICAgICAgIGZvckVhY2godGhpcy50ZXN0X2RvbmVfY2FsbGJhY2tzLA0KLSAgICAg
ICAgICAgICAgICBmdW5jdGlvbihjYWxsYmFjaykNCi0gICAgICAgICAgICAgICAgew0KLSAgICAg
ICAgICAgICAgICAgICAgY2FsbGJhY2sodGVzdCwgdGhpc19vYmopOw0KLSAgICAgICAgICAgICAg
ICB9KTsNCi0NCi0gICAgICAgIGZvckVhY2hfd2luZG93cygNCi0gICAgICAgICAgICAgICAgZnVu
Y3Rpb24odywgaXNfc2FtZV9vcmlnaW4pDQotICAgICAgICAgICAgICAgIHsNCi0gICAgICAgICAg
ICAgICAgICAgIGlmKGlzX3NhbWVfb3JpZ2luICYmIHcucmVzdWx0X2NhbGxiYWNrKQ0KLSAgICAg
ICAgICAgICAgICAgICAgew0KLSAgICAgICAgICAgICAgICAgICAgICAgIHRyeQ0KLSAgICAgICAg
ICAgICAgICAgICAgICAgIHsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgdy5yZXN1bHRf
Y2FsbGJhY2sodGVzdCk7DQotICAgICAgICAgICAgICAgICAgICAgICAgfQ0KLSAgICAgICAgICAg
ICAgICAgICAgICAgIGNhdGNoKGUpDQotICAgICAgICAgICAgICAgICAgICAgICAgew0KLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBpZihkZWJ1Zykgew0KLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgdGhyb3cgZTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgfQ0KLSAg
ICAgICAgICAgICAgICAgICAgICAgIH0NCi0gICAgICAgICAgICAgICAgICAgIH0NCi0gICAgICAg
ICAgICAgICAgICAgIGlmIChzdXBwb3J0c19wb3N0X21lc3NhZ2UodykpDQotICAgICAgICAgICAg
ICAgICAgICB7DQotICAgICAgICAgICAgICAgICAgICAgICAgdy5wb3N0TWVzc2FnZSh7DQotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6ICJyZXN1bHQiLA0KLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB0ZXN0OiB0ZXN0LnN0cnVjdHVyZWRfY2xvbmUoKQ0KLSAgICAgICAgICAg
ICAgICAgICAgICAgIH0sICIqIik7DQotICAgICAgICAgICAgICAgICAgICB9DQotICAgICAgICAg
ICAgICAgIH0pOw0KLSAgICAgICAgdGhpcy5wcm9jZXNzaW5nX2NhbGxiYWNrcyA9IGZhbHNlOw0K
LSAgICAgICAgaWYgKHRoaXNfb2JqLmFsbF9kb25lKCkpDQotICAgICAgICB7DQotICAgICAgICAg
ICAgdGhpc19vYmouY29tcGxldGUoKTsNCi0gICAgICAgIH0NCi0gICAgfTsNCi0NCi0gICAgVGVz
dHMucHJvdG90eXBlLmNvbXBsZXRlID0gZnVuY3Rpb24oKSB7DQotICAgICAgICBpZiAodGhpcy5w
aGFzZSA9PT0gdGhpcy5waGFzZXMuQ09NUExFVEUpIHsNCi0gICAgICAgICAgICByZXR1cm47DQot
ICAgICAgICB9DQotICAgICAgICB0aGlzLnBoYXNlID0gdGhpcy5waGFzZXMuQ09NUExFVEU7DQot
ICAgICAgICB2YXIgdGhpc19vYmogPSB0aGlzOw0KLSAgICAgICAgdGhpcy50ZXN0cy5mb3JFYWNo
KA0KLSAgICAgICAgICAgIGZ1bmN0aW9uKHgpDQotICAgICAgICAgICAgew0KLSAgICAgICAgICAg
ICAgICBpZih4LnN0YXR1cyA9PT0geC5OT1RSVU4pDQotICAgICAgICAgICAgICAgIHsNCi0gICAg
ICAgICAgICAgICAgICAgIHRoaXNfb2JqLm5vdGlmeV9yZXN1bHQoeCk7DQotICAgICAgICAgICAg
ICAgIH0NCi0gICAgICAgICAgICB9DQotICAgICAgICApOw0KLSAgICAgICAgdGhpcy5ub3RpZnlf
Y29tcGxldGUoKTsNCi0gICAgfTsNCi0NCi0gICAgVGVzdHMucHJvdG90eXBlLm5vdGlmeV9jb21w
bGV0ZSA9IGZ1bmN0aW9uKCkNCi0gICAgew0KLSAgICAgICAgY2xlYXJUaW1lb3V0KHRoaXMudGlt
ZW91dF9pZCk7DQotICAgICAgICB2YXIgdGhpc19vYmogPSB0aGlzOw0KLSAgICAgICAgdmFyIHRl
c3RzID0gbWFwKHRoaXNfb2JqLnRlc3RzLA0KLSAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0
aW9uKHRlc3QpDQotICAgICAgICAgICAgICAgICAgICAgICAgew0KLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICByZXR1cm4gdGVzdC5zdHJ1Y3R1cmVkX2Nsb25lKCk7DQotICAgICAgICAgICAg
ICAgICAgICAgICAgfSk7DQotICAgICAgICBpZiAodGhpcy5zdGF0dXMuc3RhdHVzID09PSBudWxs
KQ0KLSAgICAgICAgew0KLSAgICAgICAgICAgIHRoaXMuc3RhdHVzLnN0YXR1cyA9IHRoaXMuc3Rh
dHVzLk9LOw0KLSAgICAgICAgfQ0KLQ0KLSAgICAgICAgZm9yRWFjaCAodGhpcy5hbGxfZG9uZV9j
YWxsYmFja3MsDQotICAgICAgICAgICAgICAgICBmdW5jdGlvbihjYWxsYmFjaykNCi0gICAgICAg
ICAgICAgICAgIHsNCi0gICAgICAgICAgICAgICAgICAgICBjYWxsYmFjayh0aGlzX29iai50ZXN0
cywgdGhpc19vYmouc3RhdHVzKTsNCi0gICAgICAgICAgICAgICAgIH0pOw0KLQ0KLSAgICAgICAg
Zm9yRWFjaF93aW5kb3dzKA0KLSAgICAgICAgICAgICAgICBmdW5jdGlvbih3LCBpc19zYW1lX29y
aWdpbikNCi0gICAgICAgICAgICAgICAgew0KLSAgICAgICAgICAgICAgICAgICAgaWYoaXNfc2Ft
ZV9vcmlnaW4gJiYgdy5jb21wbGV0aW9uX2NhbGxiYWNrKQ0KLSAgICAgICAgICAgICAgICAgICAg
ew0KLSAgICAgICAgICAgICAgICAgICAgICAgIHRyeQ0KLSAgICAgICAgICAgICAgICAgICAgICAg
IHsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgdy5jb21wbGV0aW9uX2NhbGxiYWNrKHRo
aXNfb2JqLnRlc3RzLCB0aGlzX29iai5zdGF0dXMpOw0KLSAgICAgICAgICAgICAgICAgICAgICAg
IH0NCi0gICAgICAgICAgICAgICAgICAgICAgICBjYXRjaChlKQ0KLSAgICAgICAgICAgICAgICAg
ICAgICAgIHsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGRlYnVnKQ0KLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB0aHJvdyBlOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB9DQotICAgICAgICAgICAg
ICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgICAgICAg
ICAgaWYgKHN1cHBvcnRzX3Bvc3RfbWVzc2FnZSh3KSkNCi0gICAgICAgICAgICAgICAgICAgIHsN
Ci0gICAgICAgICAgICAgICAgICAgICAgICB3LnBvc3RNZXNzYWdlKHsNCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgdHlwZTogImNvbXBsZXRlIiwNCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgdGVzdHM6IHRlc3RzLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0dXM6
IHRoaXNfb2JqLnN0YXR1cy5zdHJ1Y3R1cmVkX2Nsb25lKCkNCi0gICAgICAgICAgICAgICAgICAg
ICAgICB9LCAiKiIpOw0KLSAgICAgICAgICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgICAgICB9
KTsNCi0gICAgfTsNCi0NCi0gICAgdmFyIHRlc3RzID0gbmV3IFRlc3RzKCk7DQotDQotICAgIGZ1
bmN0aW9uIHRpbWVvdXQoKSB7DQotICAgICAgICBpZiAodGVzdHMudGltZW91dF9sZW5ndGggPT09
IG51bGwpDQotICAgICAgICB7DQotICAgICAgICAgICAgdGVzdHMudGltZW91dCgpOw0KLSAgICAg
ICAgfQ0KLSAgICB9DQotICAgIGV4cG9zZSh0aW1lb3V0LCAndGltZW91dCcpOw0KLQ0KLSAgICBm
dW5jdGlvbiBhZGRfc3RhcnRfY2FsbGJhY2soY2FsbGJhY2spIHsNCi0gICAgICAgIHRlc3RzLnN0
YXJ0X2NhbGxiYWNrcy5wdXNoKGNhbGxiYWNrKTsNCi0gICAgfQ0KLQ0KLSAgICBmdW5jdGlvbiBh
ZGRfcmVzdWx0X2NhbGxiYWNrKGNhbGxiYWNrKQ0KLSAgICB7DQotICAgICAgICB0ZXN0cy50ZXN0
X2RvbmVfY2FsbGJhY2tzLnB1c2goY2FsbGJhY2spOw0KLSAgICB9DQotDQotICAgIGZ1bmN0aW9u
IGFkZF9jb21wbGV0aW9uX2NhbGxiYWNrKGNhbGxiYWNrKQ0KLSAgICB7DQotICAgICAgIHRlc3Rz
LmFsbF9kb25lX2NhbGxiYWNrcy5wdXNoKGNhbGxiYWNrKTsNCi0gICAgfQ0KLQ0KLSAgICBleHBv
c2UoYWRkX3N0YXJ0X2NhbGxiYWNrLCAnYWRkX3N0YXJ0X2NhbGxiYWNrJyk7DQotICAgIGV4cG9z
ZShhZGRfcmVzdWx0X2NhbGxiYWNrLCAnYWRkX3Jlc3VsdF9jYWxsYmFjaycpOw0KLSAgICBleHBv
c2UoYWRkX2NvbXBsZXRpb25fY2FsbGJhY2ssICdhZGRfY29tcGxldGlvbl9jYWxsYmFjaycpOw0K
LQ0KLSAgICAvKg0KLSAgICAgKiBPdXRwdXQgbGlzdGVuZXINCi0gICAgKi8NCi0NCi0gICAgZnVu
Y3Rpb24gT3V0cHV0KCkgew0KLSAgICAgIHRoaXMub3V0cHV0X2RvY3VtZW50ID0gZG9jdW1lbnQ7
DQotICAgICAgdGhpcy5vdXRwdXRfbm9kZSA9IG51bGw7DQotICAgICAgdGhpcy5kb25lX2NvdW50
ID0gMDsNCi0gICAgICB0aGlzLmVuYWJsZWQgPSBzZXR0aW5ncy5vdXRwdXQ7DQotICAgICAgdGhp
cy5waGFzZSA9IHRoaXMuSU5JVElBTDsNCi0gICAgfQ0KLQ0KLSAgICBPdXRwdXQucHJvdG90eXBl
LklOSVRJQUwgPSAwOw0KLSAgICBPdXRwdXQucHJvdG90eXBlLlNUQVJURUQgPSAxOw0KLSAgICBP
dXRwdXQucHJvdG90eXBlLkhBVkVfUkVTVUxUUyA9IDI7DQotICAgIE91dHB1dC5wcm90b3R5cGUu
Q09NUExFVEUgPSAzOw0KLQ0KLSAgICBPdXRwdXQucHJvdG90eXBlLnNldHVwID0gZnVuY3Rpb24o
cHJvcGVydGllcykgew0KLSAgICAgICAgaWYgKHRoaXMucGhhc2UgPiB0aGlzLklOSVRJQUwpIHsN
Ci0gICAgICAgICAgICByZXR1cm47DQotICAgICAgICB9DQotDQotICAgICAgICAvL0lmIG91dHB1
dCBpcyBkaXNhYmxlZCBpbiB0ZXN0aGFybmVzc3JlcG9ydC5qcyB0aGUgdGVzdCBzaG91bGRuJ3Qg
YmUNCi0gICAgICAgIC8vYWJsZSB0byBvdmVycmlkZSB0aGF0DQotICAgICAgICB0aGlzLmVuYWJs
ZWQgPSB0aGlzLmVuYWJsZWQgJiYgKHByb3BlcnRpZXMuaGFzT3duUHJvcGVydHkoIm91dHB1dCIp
ID8NCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvcGVydGllcy5v
dXRwdXQgOiBzZXR0aW5ncy5vdXRwdXQpOw0KLSAgICB9Ow0KLQ0KLSAgICBPdXRwdXQucHJvdG90
eXBlLmluaXQgPSBmdW5jdGlvbihwcm9wZXJ0aWVzKQ0KLSAgICB7DQotICAgICAgICBpZiAodGhp
cy5waGFzZSA+PSB0aGlzLlNUQVJURUQpIHsNCi0gICAgICAgICAgICByZXR1cm47DQotICAgICAg
ICB9DQotICAgICAgICBpZiAocHJvcGVydGllcy5vdXRwdXRfZG9jdW1lbnQpIHsNCi0gICAgICAg
ICAgICB0aGlzLm91dHB1dF9kb2N1bWVudCA9IHByb3BlcnRpZXMub3V0cHV0X2RvY3VtZW50Ow0K
LSAgICAgICAgfSBlbHNlIHsNCi0gICAgICAgICAgICB0aGlzLm91dHB1dF9kb2N1bWVudCA9IGRv
Y3VtZW50Ow0KLSAgICAgICAgfQ0KLSAgICAgICAgdGhpcy5waGFzZSA9IHRoaXMuU1RBUlRFRDsN
Ci0gICAgfTsNCi0NCi0gICAgT3V0cHV0LnByb3RvdHlwZS5yZXNvbHZlX2xvZyA9IGZ1bmN0aW9u
KCkNCi0gICAgew0KLSAgICAgICAgdmFyIG91dHB1dF9kb2N1bWVudDsNCi0gICAgICAgIGlmICh0
eXBlb2YgdGhpcy5vdXRwdXRfZG9jdW1lbnQgPT09ICJmdW5jdGlvbiIpDQotICAgICAgICB7DQot
ICAgICAgICAgICAgb3V0cHV0X2RvY3VtZW50ID0gdGhpcy5vdXRwdXRfZG9jdW1lbnQuYXBwbHko
dW5kZWZpbmVkKTsNCi0gICAgICAgIH0gZWxzZQ0KLSAgICAgICAgew0KLSAgICAgICAgICAgIG91
dHB1dF9kb2N1bWVudCA9IHRoaXMub3V0cHV0X2RvY3VtZW50Ow0KLSAgICAgICAgfQ0KLSAgICAg
ICAgaWYgKCFvdXRwdXRfZG9jdW1lbnQpDQotICAgICAgICB7DQotICAgICAgICAgICAgcmV0dXJu
Ow0KLSAgICAgICAgfQ0KLSAgICAgICAgdmFyIG5vZGUgPSBvdXRwdXRfZG9jdW1lbnQuZ2V0RWxl
bWVudEJ5SWQoImxvZyIpOw0KLSAgICAgICAgaWYgKG5vZGUpDQotICAgICAgICB7DQotICAgICAg
ICAgICAgdGhpcy5vdXRwdXRfZG9jdW1lbnQgPSBvdXRwdXRfZG9jdW1lbnQ7DQotICAgICAgICAg
ICAgdGhpcy5vdXRwdXRfbm9kZSA9IG5vZGU7DQotICAgICAgICB9DQotICAgIH07DQotDQotICAg
IE91dHB1dC5wcm90b3R5cGUuc2hvd19zdGF0dXMgPSBmdW5jdGlvbih0ZXN0KQ0KLSAgICB7DQot
ICAgICAgICBpZiAodGhpcy5waGFzZSA8IHRoaXMuU1RBUlRFRCkNCi0gICAgICAgIHsNCi0gICAg
ICAgICAgICB0aGlzLmluaXQoKTsNCi0gICAgICAgIH0NCi0gICAgICAgIGlmICghdGhpcy5lbmFi
bGVkKQ0KLSAgICAgICAgew0KLSAgICAgICAgICAgIHJldHVybjsNCi0gICAgICAgIH0NCi0gICAg
ICAgIGlmICh0aGlzLnBoYXNlIDwgdGhpcy5IQVZFX1JFU1VMVFMpDQotICAgICAgICB7DQotICAg
ICAgICAgICAgdGhpcy5yZXNvbHZlX2xvZygpOw0KLSAgICAgICAgICAgIHRoaXMucGhhc2UgPSB0
aGlzLkhBVkVfUkVTVUxUUzsNCi0gICAgICAgIH0NCi0gICAgICAgIHRoaXMuZG9uZV9jb3VudCsr
Ow0KLSAgICAgICAgaWYgKHRoaXMub3V0cHV0X25vZGUpDQotICAgICAgICB7DQotICAgICAgICAg
ICAgaWYgKHRoaXMuZG9uZV9jb3VudCA8IDEwMA0KLSAgICAgICAgICAgIHx8ICh0aGlzLmRvbmVf
Y291bnQgPCAxMDAwICYmIHRoaXMuZG9uZV9jb3VudCAlIDEwMCA9PSAwKQ0KLSAgICAgICAgICAg
IHx8IHRoaXMuZG9uZV9jb3VudCAlIDEwMDAgPT0gMCkgew0KLSAgICAgICAgICAgICAgICB0aGlz
Lm91dHB1dF9ub2RlLnRleHRDb250ZW50ID0gIlJ1bm5pbmcsICINCi0gICAgICAgICAgICAgICAg
ICAgICsgdGhpcy5kb25lX2NvdW50ICsgIiBjb21wbGV0ZSwgIg0KLSAgICAgICAgICAgICAgICAg
ICAgKyB0ZXN0cy5udW1fcGVuZGluZyArICIgcmVtYWluIjsNCi0gICAgICAgICAgICB9DQotICAg
ICAgICB9DQotICAgIH07DQotDQotICAgIE91dHB1dC5wcm90b3R5cGUuc2hvd19yZXN1bHRzID0g
ZnVuY3Rpb24gKHRlc3RzLCBoYXJuZXNzX3N0YXR1cykNCi0gICAgew0KLSAgICAgICAgaWYgKHRo
aXMucGhhc2UgPj0gdGhpcy5DT01QTEVURSkgew0KLSAgICAgICAgICAgIHJldHVybjsNCi0gICAg
ICAgIH0NCi0gICAgICAgIGlmICghdGhpcy5lbmFibGVkKQ0KLSAgICAgICAgew0KLSAgICAgICAg
ICAgIHJldHVybjsNCi0gICAgICAgIH0NCi0gICAgICAgIGlmICghdGhpcy5vdXRwdXRfbm9kZSkg
ew0KLSAgICAgICAgICAgIHRoaXMucmVzb2x2ZV9sb2coKTsNCi0gICAgICAgIH0NCi0gICAgICAg
IHRoaXMucGhhc2UgPSB0aGlzLkNPTVBMRVRFOw0KLQ0KLSAgICAgICAgdmFyIGxvZyA9IHRoaXMu
b3V0cHV0X25vZGU7DQotICAgICAgICBpZiAoIWxvZykNCi0gICAgICAgIHsNCi0gICAgICAgICAg
ICByZXR1cm47DQotICAgICAgICB9DQotICAgICAgICB2YXIgb3V0cHV0X2RvY3VtZW50ID0gdGhp
cy5vdXRwdXRfZG9jdW1lbnQ7DQotDQotICAgICAgICB3aGlsZSAobG9nLmxhc3RDaGlsZCkNCi0g
ICAgICAgIHsNCi0gICAgICAgICAgICBsb2cucmVtb3ZlQ2hpbGQobG9nLmxhc3RDaGlsZCk7DQot
ICAgICAgICB9DQotDQotICAgICAgICBpZiAoc2NyaXB0X3ByZWZpeCAhPSBudWxsKSB7DQotICAg
ICAgICAgICAgdmFyIHN0eWxlc2hlZXQgPSBvdXRwdXRfZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5T
KHhodG1sX25zLCAibGluayIpOw0KLSAgICAgICAgICAgIHN0eWxlc2hlZXQuc2V0QXR0cmlidXRl
KCJyZWwiLCAic3R5bGVzaGVldCIpOw0KLSAgICAgICAgICAgIHN0eWxlc2hlZXQuc2V0QXR0cmli
dXRlKCJocmVmIiwgc2NyaXB0X3ByZWZpeCArICJ0ZXN0aGFybmVzcy5jc3MiKTsNCi0gICAgICAg
ICAgICB2YXIgaGVhZHMgPSBvdXRwdXRfZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoImhl
YWQiKTsNCi0gICAgICAgICAgICBpZiAoaGVhZHMubGVuZ3RoKSB7DQotICAgICAgICAgICAgICAg
IGhlYWRzWzBdLmFwcGVuZENoaWxkKHN0eWxlc2hlZXQpOw0KLSAgICAgICAgICAgIH0NCi0gICAg
ICAgIH0NCi0NCi0gICAgICAgIHZhciBzdGF0dXNfdGV4dCA9IHt9Ow0KLSAgICAgICAgc3RhdHVz
X3RleHRbVGVzdC5wcm90b3R5cGUuUEFTU10gPSAiUGFzcyI7DQotICAgICAgICBzdGF0dXNfdGV4
dFtUZXN0LnByb3RvdHlwZS5GQUlMXSA9ICJGYWlsIjsNCi0gICAgICAgIHN0YXR1c190ZXh0W1Rl
c3QucHJvdG90eXBlLlRJTUVPVVRdID0gIlRpbWVvdXQiOw0KLSAgICAgICAgc3RhdHVzX3RleHRb
VGVzdC5wcm90b3R5cGUuTk9UUlVOXSA9ICJOb3QgUnVuIjsNCi0NCi0gICAgICAgIHZhciBzdGF0
dXNfbnVtYmVyID0ge307DQotICAgICAgICBmb3JFYWNoKHRlc3RzLCBmdW5jdGlvbih0ZXN0KSB7
DQotICAgICAgICAgICAgICAgICAgICB2YXIgc3RhdHVzID0gc3RhdHVzX3RleHRbdGVzdC5zdGF0
dXNdOw0KLSAgICAgICAgICAgICAgICAgICAgaWYgKHN0YXR1c19udW1iZXIuaGFzT3duUHJvcGVy
dHkoc3RhdHVzKSkNCi0gICAgICAgICAgICAgICAgICAgIHsNCi0gICAgICAgICAgICAgICAgICAg
ICAgICBzdGF0dXNfbnVtYmVyW3N0YXR1c10gKz0gMTsNCi0gICAgICAgICAgICAgICAgICAgIH0g
ZWxzZSB7DQotICAgICAgICAgICAgICAgICAgICAgICAgc3RhdHVzX251bWJlcltzdGF0dXNdID0g
MTsNCi0gICAgICAgICAgICAgICAgICAgIH0NCi0gICAgICAgICAgICAgICAgfSk7DQotDQotICAg
ICAgICBmdW5jdGlvbiBzdGF0dXNfY2xhc3Moc3RhdHVzKQ0KLSAgICAgICAgew0KLSAgICAgICAg
ICAgIHJldHVybiBzdGF0dXMucmVwbGFjZSgvXHMvZywgJycpLnRvTG93ZXJDYXNlKCk7DQotICAg
ICAgICB9DQotDQotICAgICAgICB2YXIgc3VtbWFyeV90ZW1wbGF0ZSA9IFsic2VjdGlvbiIsIHsi
aWQiOiJzdW1tYXJ5In0sDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbImgyIiwg
e30sICJTdW1tYXJ5Il0sDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbInAiLCB7
fSwgIkZvdW5kICR7bnVtX3Rlc3RzfSB0ZXN0cyJdLA0KLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgZnVuY3Rpb24odmFycykgew0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHZhciBydiA9IFtbImRpdiIsIHt9XV07DQotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgdmFyIGk9MDsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB3aGlsZSAoc3RhdHVzX3RleHQuaGFzT3duUHJvcGVydHkoaSkpIHsNCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHN0YXR1c19udW1iZXIuaGFzT3duUHJvcGVy
dHkoc3RhdHVzX3RleHRbaV0pKSB7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB2YXIgc3RhdHVzID0gc3RhdHVzX3RleHRbaV07DQotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBydlswXS5wdXNoKFsiZGl2IiwgeyJjbGFzcyI6
c3RhdHVzX2NsYXNzKHN0YXR1cyl9LA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgWyJsYWJlbCIsIHt9LA0KLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFsiaW5wdXQiLCB7dHlwZToi
Y2hlY2tib3giLCBjaGVja2VkOiJjaGVja2VkIn1dLA0KLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXR1c19udW1iZXJbc3RhdHVzXSAr
ICIgIiArIHN0YXR1c11dKTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgfQ0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpKys7DQotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHJldHVybiBydjsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIH1dOw0KLQ0KLSAgICAgICAgbG9nLmFwcGVuZENoaWxkKHJlbmRlcihzdW1tYXJ5X3RlbXBs
YXRlLCB7bnVtX3Rlc3RzOnRlc3RzLmxlbmd0aH0sIG91dHB1dF9kb2N1bWVudCkpOw0KLQ0KLSAg
ICAgICAgZm9yRWFjaChvdXRwdXRfZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgic2VjdGlvbiNz
dW1tYXJ5IGxhYmVsIiksDQotICAgICAgICAgICAgICAgIGZ1bmN0aW9uKGVsZW1lbnQpDQotICAg
ICAgICAgICAgICAgIHsNCi0gICAgICAgICAgICAgICAgICAgIG9uX2V2ZW50KGVsZW1lbnQsICJj
bGljayIsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbihlKQ0KLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgew0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGlmIChvdXRwdXRfZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoInJlc3VsdHMiKSA9PT0gbnVs
bCkNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7DQotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTsNCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOw0KLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIH0NCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgcmVzdWx0
X2NsYXNzID0gZWxlbWVudC5wYXJlbnROb2RlLmdldEF0dHJpYnV0ZSgiY2xhc3MiKTsNCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgc3R5bGVfZWxlbWVudCA9IG91dHB1dF9k
b2N1bWVudC5xdWVyeVNlbGVjdG9yKCJzdHlsZSNoaWRlLSIgKyByZXN1bHRfY2xhc3MpOw0KLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBpbnB1dF9lbGVtZW50ID0gZWxlbWVu
dC5xdWVyeVNlbGVjdG9yKCJpbnB1dCIpOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGlmICghc3R5bGVfZWxlbWVudCAmJiAhaW5wdXRfZWxlbWVudC5jaGVja2VkKSB7DQotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0eWxlX2VsZW1lbnQgPSBvdXRwdXRf
ZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKHhodG1sX25zLCAic3R5bGUiKTsNCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgc3R5bGVfZWxlbWVudC5pZCA9ICJoaWRlLSIgKyBy
ZXN1bHRfY2xhc3M7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0eWxl
X2VsZW1lbnQudGV4dENvbnRlbnQgPSAidGFibGUjcmVzdWx0cyA+IHRib2R5ID4gdHIuIityZXN1
bHRfY2xhc3MrIntkaXNwbGF5Om5vbmV9IjsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgb3V0cHV0X2RvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoc3R5bGVfZWxlbWVudCk7
DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChzdHlsZV9lbGVt
ZW50ICYmIGlucHV0X2VsZW1lbnQuY2hlY2tlZCkgew0KLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBzdHlsZV9lbGVtZW50LnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQoc3R5bGVf
ZWxlbWVudCk7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQ0KLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgfSk7DQotICAgICAgICAgICAgICAgIH0pOw0KLQ0KLSAgICAg
ICAgLy8gVGhpcyB1c2Ugb2YgaW5uZXJIVE1MIHBsdXMgbWFudWFsIGVzY2FwaW5nIGlzIG5vdCBy
ZWNvbW1lbmRlZCBpbg0KLSAgICAgICAgLy8gZ2VuZXJhbCwgYnV0IGlzIG5lY2Vzc2FyeSBoZXJl
IGZvciBwZXJmb3JtYW5jZS4gIFVzaW5nIHRleHRDb250ZW50DQotICAgICAgICAvLyBvbiBlYWNo
IGluZGl2aWR1YWwgPHRkPiBhZGRzIHRlbnMgb2Ygc2Vjb25kcyBvZiBleGVjdXRpb24gdGltZSBm
b3INCi0gICAgICAgIC8vIGxhcmdlIHRlc3Qgc3VpdGVzICh0ZW5zIG9mIHRob3VzYW5kcyBvZiB0
ZXN0cykuDQotICAgICAgICBmdW5jdGlvbiBlc2NhcGVfaHRtbChzKQ0KLSAgICAgICAgew0KLSAg
ICAgICAgICAgIHJldHVybiBzLnJlcGxhY2UoL1wmL2csICImYW1wOyIpDQotICAgICAgICAgICAg
ICAgIC5yZXBsYWNlKC88L2csICImbHQ7IikNCi0gICAgICAgICAgICAgICAgLnJlcGxhY2UoLyIv
ZywgIiZxdW90OyIpDQotICAgICAgICAgICAgICAgIC5yZXBsYWNlKC8nL2csICImIzM5OyIpOw0K
LSAgICAgICAgfQ0KLQ0KLSAgICAgICAgZnVuY3Rpb24gaGFzX2Fzc2VydGlvbnMoKQ0KLSAgICAg
ICAgew0KLSAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGVzdHMubGVuZ3RoOyBpKysp
IHsNCi0gICAgICAgICAgICAgICAgaWYgKHRlc3RzW2ldLnByb3BlcnRpZXMuaGFzT3duUHJvcGVy
dHkoImFzc2VydCIpKSB7DQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsNCi0gICAg
ICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgIH0NCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7
DQotICAgICAgICB9DQotICAgICAgICANCi0gICAgICAgIGZ1bmN0aW9uIGdldF9hc3NlcnRpb24o
dGVzdCkNCi0gICAgICAgIHsNCi0gICAgICAgICAgICBpZiAodGVzdC5wcm9wZXJ0aWVzLmhhc093
blByb3BlcnR5KCJhc3NlcnQiKSkgew0KLSAgICAgICAgICAgICAgICBpZiAoQXJyYXkuaXNBcnJh
eSh0ZXN0LnByb3BlcnRpZXMuYXNzZXJ0KSkgew0KLSAgICAgICAgICAgICAgICAgICAgcmV0dXJu
IHRlc3QucHJvcGVydGllcy5hc3NlcnQuam9pbignICcpOw0KLSAgICAgICAgICAgICAgICB9DQot
ICAgICAgICAgICAgICAgIHJldHVybiB0ZXN0LnByb3BlcnRpZXMuYXNzZXJ0Ow0KLSAgICAgICAg
ICAgIH0NCi0gICAgICAgICAgICByZXR1cm4gJyc7DQotICAgICAgICB9DQotICAgICAgICANCi0g
ICAgICAgIGxvZy5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoeGh0bWxfbnMs
ICJzZWN0aW9uIikpOw0KLSAgICAgICAgdmFyIGFzc2VydGlvbnMgPSBoYXNfYXNzZXJ0aW9ucygp
Ow0KLSAgICAgICAgdmFyIGh0bWwgPSAiPGgyPkRldGFpbHM8L2gyPjx0YWJsZSBpZD0ncmVzdWx0
cycgIiArIChhc3NlcnRpb25zID8gImNsYXNzPSdhc3NlcnRpb25zJyIgOiAiIiApICsgIj4iDQot
ICAgICAgICAgICAgKyAiPHRoZWFkPjx0cj48dGg+UmVzdWx0PC90aD48dGg+VGVzdCBOYW1lPC90
aD4iDQotICAgICAgICAgICAgKyAoYXNzZXJ0aW9ucyA/ICI8dGg+QXNzZXJ0aW9uPC90aD4iIDog
IiIpDQotICAgICAgICAgICAgKyAiPHRoPk1lc3NhZ2U8L3RoPjwvdHI+PC90aGVhZD4iDQotICAg
ICAgICAgICAgKyAiPHRib2R5PiI7DQotICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRlc3Rz
Lmxlbmd0aDsgaSsrKSB7DQotICAgICAgICAgICAgaHRtbCArPSAnPHRyIGNsYXNzPSInDQotICAg
ICAgICAgICAgICAgICsgZXNjYXBlX2h0bWwoc3RhdHVzX2NsYXNzKHN0YXR1c190ZXh0W3Rlc3Rz
W2ldLnN0YXR1c10pKQ0KLSAgICAgICAgICAgICAgICArICciPjx0ZD4nDQotICAgICAgICAgICAg
ICAgICsgZXNjYXBlX2h0bWwoc3RhdHVzX3RleHRbdGVzdHNbaV0uc3RhdHVzXSkNCi0gICAgICAg
ICAgICAgICAgKyAiPC90ZD48dGQ+Ig0KLSAgICAgICAgICAgICAgICArIGVzY2FwZV9odG1sKHRl
c3RzW2ldLm5hbWUpDQotICAgICAgICAgICAgICAgICsgIjwvdGQ+PHRkPiINCi0gICAgICAgICAg
ICAgICAgKyAoYXNzZXJ0aW9ucyA/IGVzY2FwZV9odG1sKGdldF9hc3NlcnRpb24odGVzdHNbaV0p
KSArICI8L3RkPjx0ZD4iIDogIiIpDQotICAgICAgICAgICAgICAgICsgZXNjYXBlX2h0bWwodGVz
dHNbaV0ubWVzc2FnZSA/IHRlc3RzW2ldLm1lc3NhZ2UgOiAiICIpDQotICAgICAgICAgICAgICAg
ICsgIjwvdGQ+PC90cj4iOw0KLSAgICAgICAgfQ0KLSAgICAgICAgaHRtbCArPSAiPC90Ym9keT48
L3RhYmxlPiI7DQotICAgICAgICB0cnkgew0KLSAgICAgICAgICAgIGxvZy5sYXN0Q2hpbGQuaW5u
ZXJIVE1MID0gaHRtbDsNCi0gICAgICAgIH0gY2F0Y2ggKGUpIHsNCi0gICAgICAgICAgICBsb2cu
YXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKHhodG1sX25zLCAicCIpKQ0KLSAg
ICAgICAgICAgICAgIC50ZXh0Q29udGVudCA9ICJTZXR0aW5nIGlubmVySFRNTCBmb3IgdGhlIGxv
ZyB0aHJldyBhbiBleGNlcHRpb24uIjsNCi0gICAgICAgICAgICBsb2cuYXBwZW5kQ2hpbGQoZG9j
dW1lbnQuY3JlYXRlRWxlbWVudE5TKHhodG1sX25zLCAicHJlIikpDQotICAgICAgICAgICAgICAg
LnRleHRDb250ZW50ID0gaHRtbDsNCi0gICAgICAgIH0NCi0gICAgfTsNCi0NCi0gICAgdmFyIG91
dHB1dCA9IG5ldyBPdXRwdXQoKTsNCi0gICAgYWRkX3N0YXJ0X2NhbGxiYWNrKGZ1bmN0aW9uIChw
cm9wZXJ0aWVzKSB7b3V0cHV0LmluaXQocHJvcGVydGllcyk7fSk7DQotICAgIGFkZF9yZXN1bHRf
Y2FsbGJhY2soZnVuY3Rpb24gKHRlc3QpIHtvdXRwdXQuc2hvd19zdGF0dXModGVzdHMpO30pOw0K
LSAgICBhZGRfY29tcGxldGlvbl9jYWxsYmFjayhmdW5jdGlvbiAodGVzdHMsIGhhcm5lc3Nfc3Rh
dHVzKSB7b3V0cHV0LnNob3dfcmVzdWx0cyh0ZXN0cywgaGFybmVzc19zdGF0dXMpO30pOw0KLQ0K
LSAgICAvKg0KLSAgICAgKiBUZW1wbGF0ZSBjb2RlDQotICAgICAqDQotICAgICAqIEEgdGVtcGxh
dGUgaXMganVzdCBhIGphdmFzY3JpcHQgc3RydWN0dXJlLiBBbiBlbGVtZW50IGlzIHJlcHJlc2Vu
dGVkIGFzOg0KLSAgICAgKg0KLSAgICAgKiBbdGFnX25hbWUsIHthdHRyX25hbWU6YXR0cl92YWx1
ZX0sIGNoaWxkMSwgY2hpbGQyXQ0KLSAgICAgKg0KLSAgICAgKiB0aGUgY2hpbGRyZW4gY2FuIGVp
dGhlciBiZSBzdHJpbmdzICh3aGljaCBhY3QgbGlrZSB0ZXh0IG5vZGVzKSwgb3RoZXIgdGVtcGxh
dGVzIG9yDQotICAgICAqIGZ1bmN0aW9ucyAoc2VlIGJlbG93KQ0KLSAgICAgKg0KLSAgICAgKiBB
IHRleHQgbm9kZSBpcyByZXByZXNlbnRlZCBhcw0KLSAgICAgKg0KLSAgICAgKiBbInt0ZXh0fSIs
IHZhbHVlXQ0KLSAgICAgKg0KLSAgICAgKiBTdHJpbmcgdmFsdWVzIGhhdmUgYSBzaW1wbGUgc3Vi
c3RpdHV0aW9uIHN5bnRheDsgJHtmb299IHJlcHJlc2VudHMgYSB2YXJpYWJsZSBmb28uDQotICAg
ICAqDQotICAgICAqIEl0IGlzIHBvc3NpYmxlIHRvIGVtYmVkIGxvZ2ljIGluIHRlbXBsYXRlcyBi
eSB1c2luZyBhIGZ1bmN0aW9uIGluIGEgcGxhY2Ugd2hlcmUgYQ0KLSAgICAgKiBub2RlIHdvdWxk
IHVzdWFsbHkgZ28uIFRoZSBmdW5jdGlvbiBtdXN0IGVpdGhlciByZXR1cm4gcGFydCBvZiBhIHRl
bXBsYXRlIG9yIG51bGwuDQotICAgICAqDQotICAgICAqIEluIGNhc2VzIHdoZXJlIGEgc2V0IG9m
IG5vZGVzIGFyZSByZXF1aXJlZCBhcyBvdXRwdXQgcmF0aGVyIHRoYW4gYSBzaW5nbGUgbm9kZQ0K
LSAgICAgKiB3aXRoIGNoaWxkcmVuIGl0IGlzIHBvc3NpYmxlIHRvIGp1c3QgdXNlIGEgbGlzdA0K
LSAgICAgKiBbbm9kZTEsIG5vZGUyLCBub2RlM10NCi0gICAgICoNCi0gICAgICogVXNhZ2U6DQot
ICAgICAqDQotICAgICAqIHJlbmRlcih0ZW1wbGF0ZSwgc3Vic3RpdHV0aW9ucykgLSB0YWtlIGEg
dGVtcGxhdGUgYW5kIGFuIG9iamVjdCBtYXBwaW5nDQotICAgICAqIHZhcmlhYmxlIG5hbWVzIHRv
IHBhcmFtZXRlcnMgYW5kIHJldHVybiBlaXRoZXIgYSBET00gbm9kZSBvciBhIGxpc3Qgb2YgRE9N
IG5vZGVzDQotICAgICAqDQotICAgICAqIHN1YnN0aXR1dGUodGVtcGxhdGUsIHN1YnN0aXR1dGlv
bnMpIC0gdGFrZSBhIHRlbXBsYXRlIGFuZCB2YXJpYWJsZSBtYXBwaW5nIG9iamVjdCwNCi0gICAg
ICogbWFrZSB0aGUgdmFyaWFibGUgc3Vic3RpdHV0aW9ucyBhbmQgcmV0dXJuIHRoZSBzdWJzdGl0
dXRlZCB0ZW1wbGF0ZQ0KLSAgICAgKg0KLSAgICAgKi8NCi0NCi0gICAgZnVuY3Rpb24gaXNfc2lu
Z2xlX25vZGUodGVtcGxhdGUpDQotICAgIHsNCi0gICAgICAgIHJldHVybiB0eXBlb2YgdGVtcGxh
dGVbMF0gPT09ICJzdHJpbmciOw0KLSAgICB9DQotDQotICAgIGZ1bmN0aW9uIHN1YnN0aXR1dGUo
dGVtcGxhdGUsIHN1YnN0aXR1dGlvbnMpDQotICAgIHsNCi0gICAgICAgIGlmICh0eXBlb2YgdGVt
cGxhdGUgPT09ICJmdW5jdGlvbiIpIHsNCi0gICAgICAgICAgICB2YXIgcmVwbGFjZW1lbnQgPSB0
ZW1wbGF0ZShzdWJzdGl0dXRpb25zKTsNCi0gICAgICAgICAgICBpZiAocmVwbGFjZW1lbnQpDQot
ICAgICAgICAgICAgew0KLSAgICAgICAgICAgICAgICB2YXIgcnYgPSBzdWJzdGl0dXRlKHJlcGxh
Y2VtZW50LCBzdWJzdGl0dXRpb25zKTsNCi0gICAgICAgICAgICAgICAgcmV0dXJuIHJ2Ow0KLSAg
ICAgICAgICAgIH0NCi0gICAgICAgICAgICBlbHNlDQotICAgICAgICAgICAgew0KLSAgICAgICAg
ICAgICAgICByZXR1cm4gbnVsbDsNCi0gICAgICAgICAgICB9DQotICAgICAgICB9DQotICAgICAg
ICBlbHNlIGlmIChpc19zaW5nbGVfbm9kZSh0ZW1wbGF0ZSkpDQotICAgICAgICB7DQotICAgICAg
ICAgICAgcmV0dXJuIHN1YnN0aXR1dGVfc2luZ2xlKHRlbXBsYXRlLCBzdWJzdGl0dXRpb25zKTsN
Ci0gICAgICAgIH0NCi0gICAgICAgIGVsc2UNCi0gICAgICAgIHsNCi0gICAgICAgICAgICByZXR1
cm4gZmlsdGVyKG1hcCh0ZW1wbGF0ZSwgZnVuY3Rpb24oeCkgew0KLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICByZXR1cm4gc3Vic3RpdHV0ZSh4LCBzdWJzdGl0dXRpb25zKTsNCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KSwgZnVuY3Rpb24oeCkge3JldHVybiB4ICE9
PSBudWxsO30pOw0KLSAgICAgICAgfQ0KLSAgICB9DQotDQotICAgIGZ1bmN0aW9uIHN1YnN0aXR1
dGVfc2luZ2xlKHRlbXBsYXRlLCBzdWJzdGl0dXRpb25zKQ0KLSAgICB7DQotICAgICAgICB2YXIg
c3Vic3RpdHV0aW9uX3JlID0gL1wkeyhbXiB9XSopfS9nOw0KLQ0KLSAgICAgICAgZnVuY3Rpb24g
ZG9fc3Vic3RpdHV0aW9uKGlucHV0KSB7DQotICAgICAgICAgICAgdmFyIGNvbXBvbmVudHMgPSBp
bnB1dC5zcGxpdChzdWJzdGl0dXRpb25fcmUpOw0KLSAgICAgICAgICAgIHZhciBydiA9IFtdOw0K
LSAgICAgICAgICAgIGZvciAodmFyIGk9MDsgaTxjb21wb25lbnRzLmxlbmd0aDsgaSs9MikNCi0g
ICAgICAgICAgICB7DQotICAgICAgICAgICAgICAgIHJ2LnB1c2goY29tcG9uZW50c1tpXSk7DQot
ICAgICAgICAgICAgICAgIGlmIChjb21wb25lbnRzW2krMV0pDQotICAgICAgICAgICAgICAgIHsN
Ci0gICAgICAgICAgICAgICAgICAgIHJ2LnB1c2goU3RyaW5nKHN1YnN0aXR1dGlvbnNbY29tcG9u
ZW50c1tpKzFdXSkpOw0KLSAgICAgICAgICAgICAgICB9DQotICAgICAgICAgICAgfQ0KLSAgICAg
ICAgICAgIHJldHVybiBydjsNCi0gICAgICAgIH0NCi0NCi0gICAgICAgIHZhciBydiA9IFtdOw0K
LSAgICAgICAgcnYucHVzaChkb19zdWJzdGl0dXRpb24oU3RyaW5nKHRlbXBsYXRlWzBdKSkuam9p
bigiIikpOw0KLQ0KLSAgICAgICAgaWYgKHRlbXBsYXRlWzBdID09PSAie3RleHR9Iikgew0KLSAg
ICAgICAgICAgIHN1YnN0aXR1dGVfY2hpbGRyZW4odGVtcGxhdGUuc2xpY2UoMSksIHJ2KTsNCi0g
ICAgICAgIH0gZWxzZSB7DQotICAgICAgICAgICAgc3Vic3RpdHV0ZV9hdHRycyh0ZW1wbGF0ZVsx
XSwgcnYpOw0KLSAgICAgICAgICAgIHN1YnN0aXR1dGVfY2hpbGRyZW4odGVtcGxhdGUuc2xpY2Uo
MiksIHJ2KTsNCi0gICAgICAgIH0NCi0NCi0gICAgICAgIGZ1bmN0aW9uIHN1YnN0aXR1dGVfYXR0
cnMoYXR0cnMsIHJ2KQ0KLSAgICAgICAgew0KLSAgICAgICAgICAgIHJ2WzFdID0ge307DQotICAg
ICAgICAgICAgZm9yICh2YXIgbmFtZSBpbiB0ZW1wbGF0ZVsxXSkNCi0gICAgICAgICAgICB7DQot
ICAgICAgICAgICAgICAgIGlmIChhdHRycy5oYXNPd25Qcm9wZXJ0eShuYW1lKSkNCi0gICAgICAg
ICAgICAgICAgew0KLSAgICAgICAgICAgICAgICAgICAgdmFyIG5ld19uYW1lID0gZG9fc3Vic3Rp
dHV0aW9uKG5hbWUpLmpvaW4oIiIpOw0KLSAgICAgICAgICAgICAgICAgICAgdmFyIG5ld192YWx1
ZSA9IGRvX3N1YnN0aXR1dGlvbihhdHRyc1tuYW1lXSkuam9pbigiIik7DQotICAgICAgICAgICAg
ICAgICAgICBydlsxXVtuZXdfbmFtZV0gPSBuZXdfdmFsdWU7DQotICAgICAgICAgICAgICAgIH07
DQotICAgICAgICAgICAgfQ0KLSAgICAgICAgfQ0KLQ0KLSAgICAgICAgZnVuY3Rpb24gc3Vic3Rp
dHV0ZV9jaGlsZHJlbihjaGlsZHJlbiwgcnYpDQotICAgICAgICB7DQotICAgICAgICAgICAgZm9y
ICh2YXIgaT0wOyBpPGNoaWxkcmVuLmxlbmd0aDsgaSsrKQ0KLSAgICAgICAgICAgIHsNCi0gICAg
ICAgICAgICAgICAgaWYgKGNoaWxkcmVuW2ldIGluc3RhbmNlb2YgT2JqZWN0KSB7DQotICAgICAg
ICAgICAgICAgICAgICB2YXIgcmVwbGFjZW1lbnQgPSBzdWJzdGl0dXRlKGNoaWxkcmVuW2ldLCBz
dWJzdGl0dXRpb25zKTsNCi0gICAgICAgICAgICAgICAgICAgIGlmIChyZXBsYWNlbWVudCAhPT0g
bnVsbCkNCi0gICAgICAgICAgICAgICAgICAgIHsNCi0gICAgICAgICAgICAgICAgICAgICAgICBp
ZiAoaXNfc2luZ2xlX25vZGUocmVwbGFjZW1lbnQpKQ0KLSAgICAgICAgICAgICAgICAgICAgICAg
IHsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcnYucHVzaChyZXBsYWNlbWVudCk7DQot
ICAgICAgICAgICAgICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UN
Ci0gICAgICAgICAgICAgICAgICAgICAgICB7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGV4dGVuZChydiwgcmVwbGFjZW1lbnQpOw0KLSAgICAgICAgICAgICAgICAgICAgICAgIH0NCi0g
ICAgICAgICAgICAgICAgICAgIH0NCi0gICAgICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgICAg
ICBlbHNlDQotICAgICAgICAgICAgICAgIHsNCi0gICAgICAgICAgICAgICAgICAgIGV4dGVuZChy
diwgZG9fc3Vic3RpdHV0aW9uKFN0cmluZyhjaGlsZHJlbltpXSkpKTsNCi0gICAgICAgICAgICAg
ICAgfQ0KLSAgICAgICAgICAgIH0NCi0gICAgICAgICAgICByZXR1cm4gcnY7DQotICAgICAgICB9
DQotDQotICAgICAgICByZXR1cm4gcnY7DQotICAgIH0NCi0NCi0gZnVuY3Rpb24gbWFrZV9kb21f
c2luZ2xlKHRlbXBsYXRlLCBkb2MpDQotIHsNCi0gICAgIHZhciBvdXRwdXRfZG9jdW1lbnQgPSBk
b2MgfHwgZG9jdW1lbnQ7DQotICAgICBpZiAodGVtcGxhdGVbMF0gPT09ICJ7dGV4dH0iKQ0KLSAg
ICAgew0KLSAgICAgICAgIHZhciBlbGVtZW50ID0gb3V0cHV0X2RvY3VtZW50LmNyZWF0ZVRleHRO
b2RlKCIiKTsNCi0gICAgICAgICBmb3IgKHZhciBpPTE7IGk8dGVtcGxhdGUubGVuZ3RoOyBpKysp
DQotICAgICAgICAgew0KLSAgICAgICAgICAgICBlbGVtZW50LmRhdGEgKz0gdGVtcGxhdGVbaV07
DQotICAgICAgICAgfQ0KLSAgICAgfQ0KLSAgICAgZWxzZQ0KLSAgICAgew0KLSAgICAgICAgIHZh
ciBlbGVtZW50ID0gb3V0cHV0X2RvY3VtZW50LmNyZWF0ZUVsZW1lbnROUyh4aHRtbF9ucywgdGVt
cGxhdGVbMF0pOw0KLSAgICAgICAgIGZvciAodmFyIG5hbWUgaW4gdGVtcGxhdGVbMV0pIHsNCi0g
ICAgICAgICAgICAgaWYgKHRlbXBsYXRlWzFdLmhhc093blByb3BlcnR5KG5hbWUpKQ0KLSAgICAg
ICAgICAgICB7DQotICAgICAgICAgICAgICAgICBlbGVtZW50LnNldEF0dHJpYnV0ZShuYW1lLCB0
ZW1wbGF0ZVsxXVtuYW1lXSk7DQotICAgICAgICAgICAgIH0NCi0gICAgICAgICB9DQotICAgICAg
ICAgZm9yICh2YXIgaT0yOyBpPHRlbXBsYXRlLmxlbmd0aDsgaSsrKQ0KLSAgICAgICAgIHsNCi0g
ICAgICAgICAgICAgaWYgKHRlbXBsYXRlW2ldIGluc3RhbmNlb2YgT2JqZWN0KQ0KLSAgICAgICAg
ICAgICB7DQotICAgICAgICAgICAgICAgICB2YXIgc3ViX2VsZW1lbnQgPSBtYWtlX2RvbSh0ZW1w
bGF0ZVtpXSk7DQotICAgICAgICAgICAgICAgICBlbGVtZW50LmFwcGVuZENoaWxkKHN1Yl9lbGVt
ZW50KTsNCi0gICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgICBlbHNlDQotICAgICAgICAgICAg
IHsNCi0gICAgICAgICAgICAgICAgIHZhciB0ZXh0X25vZGUgPSBvdXRwdXRfZG9jdW1lbnQuY3Jl
YXRlVGV4dE5vZGUodGVtcGxhdGVbaV0pOw0KLSAgICAgICAgICAgICAgICAgZWxlbWVudC5hcHBl
bmRDaGlsZCh0ZXh0X25vZGUpOw0KLSAgICAgICAgICAgICB9DQotICAgICAgICAgfQ0KLSAgICAg
fQ0KLQ0KLSAgICAgcmV0dXJuIGVsZW1lbnQ7DQotIH0NCi0NCi0NCi0NCi0gZnVuY3Rpb24gbWFr
ZV9kb20odGVtcGxhdGUsIHN1YnN0aXR1dGlvbnMsIG91dHB1dF9kb2N1bWVudCkNCi0gICAgew0K
LSAgICAgICAgaWYgKGlzX3NpbmdsZV9ub2RlKHRlbXBsYXRlKSkNCi0gICAgICAgIHsNCi0gICAg
ICAgICAgICByZXR1cm4gbWFrZV9kb21fc2luZ2xlKHRlbXBsYXRlLCBvdXRwdXRfZG9jdW1lbnQp
Ow0KLSAgICAgICAgfQ0KLSAgICAgICAgZWxzZQ0KLSAgICAgICAgew0KLSAgICAgICAgICAgIHJl
dHVybiBtYXAodGVtcGxhdGUsIGZ1bmN0aW9uKHgpIHsNCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICByZXR1cm4gbWFrZV9kb21fc2luZ2xlKHgsIG91dHB1dF9kb2N1bWVudCk7DQotICAgICAg
ICAgICAgICAgICAgICAgICB9KTsNCi0gICAgICAgIH0NCi0gICAgfQ0KLQ0KLSBmdW5jdGlvbiBy
ZW5kZXIodGVtcGxhdGUsIHN1YnN0aXR1dGlvbnMsIG91dHB1dF9kb2N1bWVudCkNCi0gICAgew0K
LSAgICAgICAgcmV0dXJuIG1ha2VfZG9tKHN1YnN0aXR1dGUodGVtcGxhdGUsIHN1YnN0aXR1dGlv
bnMpLCBvdXRwdXRfZG9jdW1lbnQpOw0KLSAgICB9DQotDQotICAgIC8qDQotICAgICAqIFV0aWxp
dHkgZnVuY2lvbnMNCi0gICAgICovDQotICAgIGZ1bmN0aW9uIGFzc2VydChleHBlY3RlZF90cnVl
LCBmdW5jdGlvbl9uYW1lLCBkZXNjcmlwdGlvbiwgZXJyb3IsIHN1YnN0aXR1dGlvbnMpDQotICAg
IHsNCi0gICAgICAgIGlmIChleHBlY3RlZF90cnVlICE9PSB0cnVlKQ0KLSAgICAgICAgew0KLSAg
ICAgICAgICAgIHRocm93IG5ldyBBc3NlcnRpb25FcnJvcihtYWtlX21lc3NhZ2UoZnVuY3Rpb25f
bmFtZSwgZGVzY3JpcHRpb24sDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBlcnJvciwgc3Vic3RpdHV0aW9ucykpOw0KLSAgICAgICAgfQ0KLSAgICB9
DQotDQotICAgIGZ1bmN0aW9uIEFzc2VydGlvbkVycm9yKG1lc3NhZ2UpDQotICAgIHsNCi0gICAg
ICAgIHRoaXMubWVzc2FnZSA9IG1lc3NhZ2U7DQotICAgIH0NCi0NCi0gICAgZnVuY3Rpb24gbWFr
ZV9tZXNzYWdlKGZ1bmN0aW9uX25hbWUsIGRlc2NyaXB0aW9uLCBlcnJvciwgc3Vic3RpdHV0aW9u
cykNCi0gICAgew0KLSAgICAgICAgZm9yICh2YXIgcCBpbiBzdWJzdGl0dXRpb25zKSB7DQotICAg
ICAgICAgICAgaWYgKHN1YnN0aXR1dGlvbnMuaGFzT3duUHJvcGVydHkocCkpIHsNCi0gICAgICAg
ICAgICAgICAgc3Vic3RpdHV0aW9uc1twXSA9IGZvcm1hdF92YWx1ZShzdWJzdGl0dXRpb25zW3Bd
KTsNCi0gICAgICAgICAgICB9DQotICAgICAgICB9DQotICAgICAgICB2YXIgbm9kZV9mb3JtID0g
c3Vic3RpdHV0ZShbInt0ZXh0fSIsICIke2Z1bmN0aW9uX25hbWV9OiAke2Rlc2NyaXB0aW9ufSIg
KyBlcnJvcl0sDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXJnZSh7ZnVu
Y3Rpb25fbmFtZTpmdW5jdGlvbl9uYW1lLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGRlc2NyaXB0aW9uOihkZXNjcmlwdGlvbj9kZXNjcmlwdGlvbiArICIgIjoi
Iil9LA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN1YnN0aXR1
dGlvbnMpKTsNCi0gICAgICAgIHJldHVybiBub2RlX2Zvcm0uc2xpY2UoMSkuam9pbigiIik7DQot
ICAgIH0NCi0NCi0gICAgZnVuY3Rpb24gZmlsdGVyKGFycmF5LCBjYWxsYWJsZSwgdGhpc09iaikg
ew0KLSAgICAgICAgdmFyIHJ2ID0gW107DQotICAgICAgICBmb3IgKHZhciBpPTA7IGk8YXJyYXku
bGVuZ3RoOyBpKyspDQotICAgICAgICB7DQotICAgICAgICAgICAgaWYgKGFycmF5Lmhhc093blBy
b3BlcnR5KGkpKQ0KLSAgICAgICAgICAgIHsNCi0gICAgICAgICAgICAgICAgdmFyIHBhc3MgPSBj
YWxsYWJsZS5jYWxsKHRoaXNPYmosIGFycmF5W2ldLCBpLCBhcnJheSk7DQotICAgICAgICAgICAg
ICAgIGlmIChwYXNzKSB7DQotICAgICAgICAgICAgICAgICAgICBydi5wdXNoKGFycmF5W2ldKTsN
Ci0gICAgICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgIH0NCi0gICAgICAgIH0NCi0gICAgICAg
IHJldHVybiBydjsNCi0gICAgfQ0KLQ0KLSAgICBmdW5jdGlvbiBtYXAoYXJyYXksIGNhbGxhYmxl
LCB0aGlzT2JqKQ0KLSAgICB7DQotICAgICAgICB2YXIgcnYgPSBbXTsNCi0gICAgICAgIHJ2Lmxl
bmd0aCA9IGFycmF5Lmxlbmd0aDsNCi0gICAgICAgIGZvciAodmFyIGk9MDsgaTxhcnJheS5sZW5n
dGg7IGkrKykNCi0gICAgICAgIHsNCi0gICAgICAgICAgICBpZiAoYXJyYXkuaGFzT3duUHJvcGVy
dHkoaSkpDQotICAgICAgICAgICAgew0KLSAgICAgICAgICAgICAgICBydltpXSA9IGNhbGxhYmxl
LmNhbGwodGhpc09iaiwgYXJyYXlbaV0sIGksIGFycmF5KTsNCi0gICAgICAgICAgICB9DQotICAg
ICAgICB9DQotICAgICAgICByZXR1cm4gcnY7DQotICAgIH0NCi0NCi0gICAgZnVuY3Rpb24gZXh0
ZW5kKGFycmF5LCBpdGVtcykNCi0gICAgew0KLSAgICAgICAgQXJyYXkucHJvdG90eXBlLnB1c2gu
YXBwbHkoYXJyYXksIGl0ZW1zKTsNCi0gICAgfQ0KLQ0KLSAgICBmdW5jdGlvbiBmb3JFYWNoIChh
cnJheSwgY2FsbGJhY2ssIHRoaXNPYmopDQotICAgIHsNCi0gICAgICAgIGZvciAodmFyIGk9MDsg
aTxhcnJheS5sZW5ndGg7IGkrKykNCi0gICAgICAgIHsNCi0gICAgICAgICAgICBpZiAoYXJyYXku
aGFzT3duUHJvcGVydHkoaSkpDQotICAgICAgICAgICAgew0KLSAgICAgICAgICAgICAgICBjYWxs
YmFjay5jYWxsKHRoaXNPYmosIGFycmF5W2ldLCBpLCBhcnJheSk7DQotICAgICAgICAgICAgfQ0K
LSAgICAgICAgfQ0KLSAgICB9DQotDQotICAgIGZ1bmN0aW9uIG1lcmdlKGEsYikNCi0gICAgew0K
LSAgICAgICAgdmFyIHJ2ID0ge307DQotICAgICAgICB2YXIgcDsNCi0gICAgICAgIGZvciAocCBp
biBhKQ0KLSAgICAgICAgew0KLSAgICAgICAgICAgIHJ2W3BdID0gYVtwXTsNCi0gICAgICAgIH0N
Ci0gICAgICAgIGZvciAocCBpbiBiKSB7DQotICAgICAgICAgICAgcnZbcF0gPSBiW3BdOw0KLSAg
ICAgICAgfQ0KLSAgICAgICAgcmV0dXJuIHJ2Ow0KLSAgICB9DQotDQotICAgIGZ1bmN0aW9uIGV4
cG9zZShvYmplY3QsIG5hbWUpDQotICAgIHsNCi0gICAgICAgIHZhciBjb21wb25lbnRzID0gbmFt
ZS5zcGxpdCgiLiIpOw0KLSAgICAgICAgdmFyIHRhcmdldCA9IHdpbmRvdzsNCi0gICAgICAgIGZv
ciAodmFyIGk9MDsgaTxjb21wb25lbnRzLmxlbmd0aCAtIDE7IGkrKykNCi0gICAgICAgIHsNCi0g
ICAgICAgICAgICBpZiAoIShjb21wb25lbnRzW2ldIGluIHRhcmdldCkpDQotICAgICAgICAgICAg
ew0KLSAgICAgICAgICAgICAgICB0YXJnZXRbY29tcG9uZW50c1tpXV0gPSB7fTsNCi0gICAgICAg
ICAgICB9DQotICAgICAgICAgICAgdGFyZ2V0ID0gdGFyZ2V0W2NvbXBvbmVudHNbaV1dOw0KLSAg
ICAgICAgfQ0KLSAgICAgICAgdGFyZ2V0W2NvbXBvbmVudHNbY29tcG9uZW50cy5sZW5ndGggLSAx
XV0gPSBvYmplY3Q7DQotICAgIH0NCi0NCi0gICAgZnVuY3Rpb24gZm9yRWFjaF93aW5kb3dzKGNh
bGxiYWNrKSB7DQotICAgICAgICAvLyBJdGVyYXRlIG9mIHRoZSB0aGUgd2luZG93cyBbc2VsZiAu
Li4gdG9wLCBvcGVuZXJdLiBUaGUgY2FsbGJhY2sgaXMgcGFzc2VkDQotICAgICAgICAvLyB0d28g
b2JqZWN0cywgdGhlIGZpcnN0IG9uZSBpcyB0aGUgd2luZG93cyBvYmplY3QgaXRzZWxmLCB0aGUg
c2Vjb25kIG9uZQ0KLSAgICAgICAgLy8gaXMgYSBib29sZWFuIGluZGljYXRpbmcgd2hldGhlciBv
ciBub3QgaXRzIG9uIHRoZSBzYW1lIG9yaWdpbiBhcyB0aGUNCi0gICAgICAgIC8vIGN1cnJlbnQg
d2luZG93Lg0KLSAgICAgICAgdmFyIGNhY2hlID0gZm9yRWFjaF93aW5kb3dzLnJlc3VsdF9jYWNo
ZTsNCi0gICAgICAgIGlmICghY2FjaGUpIHsNCi0gICAgICAgICAgICBjYWNoZSA9IFtbc2VsZiwg
dHJ1ZV1dOw0KLSAgICAgICAgICAgIHZhciB3ID0gc2VsZjsNCi0gICAgICAgICAgICB2YXIgaSA9
IDA7DQotICAgICAgICAgICAgdmFyIHNvOw0KLSAgICAgICAgICAgIHZhciBvcmlnaW5zID0gbG9j
YXRpb24uYW5jZXN0b3JPcmlnaW5zOw0KLSAgICAgICAgICAgIHdoaWxlICh3ICE9IHcucGFyZW50
KQ0KLSAgICAgICAgICAgIHsNCi0gICAgICAgICAgICAgICAgdyA9IHcucGFyZW50Ow0KLSAgICAg
ICAgICAgICAgICAvLyBJbiBXZWJLaXQsIGNhbGxzIHRvIHBhcmVudCB3aW5kb3dzJyBwcm9wZXJ0
aWVzIHRoYXQgYXJlbid0IG9uIHRoZSBzYW1lDQotICAgICAgICAgICAgICAgIC8vIG9yaWdpbiBj
YXVzZSBhbiBlcnJvciBtZXNzYWdlIHRvIGJlIGRpc3BsYXllZCBpbiB0aGUgZXJyb3IgY29uc29s
ZSBidXQNCi0gICAgICAgICAgICAgICAgLy8gZG9uJ3QgdGhyb3cgYW4gZXhjZXB0aW9uLiBUaGlz
IGlzIGEgZGV2aWF0aW9uIGZyb20gdGhlIGN1cnJlbnQgSFRNTDUNCi0gICAgICAgICAgICAgICAg
Ly8gc3BlYy4gU2VlOiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDM1
MDQNCi0gICAgICAgICAgICAgICAgLy8gVGhlIHByb2JsZW0gd2l0aCBXZWJLaXQncyBiZWhhdmlv
ciBpcyB0aGF0IGl0IHBvbGx1dGVzIHRoZSBlcnJvciBjb25zb2xlDQotICAgICAgICAgICAgICAg
IC8vIHdpdGggZXJyb3IgbWVzc2FnZXMgdGhhdCBjYW4ndCBiZSBjYXVnaHQuDQotICAgICAgICAg
ICAgICAgIC8vDQotICAgICAgICAgICAgICAgIC8vIFRoaXMgaXNzdWUgY2FuIGJlIG1pdGlnYXRl
ZCBieSByZWx5aW5nIG9uIHRoZSAoZm9yIG5vdykgcHJvcHJpZXRhcnkNCi0gICAgICAgICAgICAg
ICAgLy8gYGxvY2F0aW9uLmFuY2VzdG9yT3JpZ2luc2AgcHJvcGVydHkgd2hpY2ggcmV0dXJucyBh
biBvcmRlcmVkIGxpc3Qgb2YNCi0gICAgICAgICAgICAgICAgLy8gdGhlIG9yaWdpbnMgb2YgZW5j
bG9zaW5nIHdpbmRvd3MuIFNlZToNCi0gICAgICAgICAgICAgICAgLy8gaHR0cDovL3RyYWMud2Vi
a2l0Lm9yZy9jaGFuZ2VzZXQvMTEzOTQ1Lg0KLSAgICAgICAgICAgICAgICBpZihvcmlnaW5zKSB7
DQotICAgICAgICAgICAgICAgICAgICBzbyA9IChsb2NhdGlvbi5vcmlnaW4gPT0gb3JpZ2luc1tp
XSk7DQotICAgICAgICAgICAgICAgIH0NCi0gICAgICAgICAgICAgICAgZWxzZQ0KLSAgICAgICAg
ICAgICAgICB7DQotICAgICAgICAgICAgICAgICAgICBzbyA9IGlzX3NhbWVfb3JpZ2luKHcpOw0K
LSAgICAgICAgICAgICAgICB9DQotICAgICAgICAgICAgICAgIGNhY2hlLnB1c2goW3csIHNvXSk7
DQotICAgICAgICAgICAgICAgIGkrKzsNCi0gICAgICAgICAgICB9DQotICAgICAgICAgICAgdyA9
IHdpbmRvdy5vcGVuZXI7DQotICAgICAgICAgICAgaWYodykNCi0gICAgICAgICAgICB7DQotICAg
ICAgICAgICAgICAgIC8vIHdpbmRvdy5vcGVuZXIgaXNuJ3QgaW5jbHVkZWQgaW4gdGhlIGBsb2Nh
dGlvbi5hbmNlc3Rvck9yaWdpbnNgIHByb3AuDQotICAgICAgICAgICAgICAgIC8vIFdlJ2xsIGp1
c3QgaGF2ZSB0byBkZWFsIHdpdGggYSBzaW1wbGUgY2hlY2sgYW5kIGFuIGVycm9yIG1zZyBvbiBX
ZWJLaXQNCi0gICAgICAgICAgICAgICAgLy8gYnJvd3NlcnMgaW4gdGhpcyBjYXNlLg0KLSAgICAg
ICAgICAgICAgICBjYWNoZS5wdXNoKFt3LCBpc19zYW1lX29yaWdpbih3KV0pOw0KLSAgICAgICAg
ICAgIH0NCi0gICAgICAgICAgICBmb3JFYWNoX3dpbmRvd3MucmVzdWx0X2NhY2hlID0gY2FjaGU7
DQotICAgICAgICB9DQotDQotICAgICAgICBmb3JFYWNoKGNhY2hlLA0KLSAgICAgICAgICAgICAg
ICBmdW5jdGlvbihhKQ0KLSAgICAgICAgICAgICAgICB7DQotICAgICAgICAgICAgICAgICAgICBj
YWxsYmFjay5hcHBseShudWxsLCBhKTsNCi0gICAgICAgICAgICAgICAgfSk7DQotICAgIH0NCi0N
Ci0gICAgZnVuY3Rpb24gaXNfc2FtZV9vcmlnaW4odykgew0KLSAgICAgICAgdHJ5IHsNCi0gICAg
ICAgICAgICAncmFuZG9tX3Byb3AnIGluIHc7DQotICAgICAgICAgICAgcmV0dXJuIHRydWU7DQot
ICAgICAgICB9IGNhdGNoKGUpIHsNCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7DQotICAgICAg
ICB9DQotICAgIH0NCi0NCi0gICAgZnVuY3Rpb24gc3VwcG9ydHNfcG9zdF9tZXNzYWdlKHcpDQot
ICAgIHsNCi0gICAgICAgIHZhciBzdXBwb3J0czsNCi0gICAgICAgIHZhciB0eXBlOw0KLSAgICAg
ICAgLy8gR2l2ZW4gSUUgIGltcGxlbWVudHMgcG9zdE1lc3NhZ2UgYWNyb3NzIG5lc3RlZCBpZnJh
bWVzIGJ1dCBub3QgYWNyb3NzDQotICAgICAgICAvLyB3aW5kb3dzIG9yIHRhYnMsIHlvdSBjYW4n
dCBpbmZlciBjcm9zcy1vcmlnaW4gY29tbXVuaWNhdGlvbiBmcm9tIHRoZSBwcmVzZW5jZQ0KLSAg
ICAgICAgLy8gb2YgcG9zdE1lc3NhZ2Ugb24gdGhlIGN1cnJlbnQgd2luZG93IG9iamVjdCBvbmx5
Lg0KLSAgICAgICAgLy8NCi0gICAgICAgIC8vIFRvdWNoaW5nIHRoZSBwb3N0TWVzc2FnZSBwcm9w
IG9uIGEgd2luZG93IGNhbiB0aHJvdyBpZiB0aGUgd2luZG93IGlzDQotICAgICAgICAvLyBub3Qg
ZnJvbSB0aGUgc2FtZSBvcmlnaW4gQU5EIHBvc3QgbWVzc2FnZSBpcyBub3Qgc3VwcG9ydGVkIGlu
IHRoYXQNCi0gICAgICAgIC8vIGJyb3dzZXIuIFNvIGp1c3QgZG9pbmcgYW4gZXhpc3RlbmNlIHRl
c3QgaGVyZSB3b24ndCBkbywgeW91IGFsc28gbmVlZA0KLSAgICAgICAgLy8gdG8gd3JhcCBpdCBp
biBhIHRyeS4uY2FjdGggYmxvY2suDQotICAgICAgICB0cnkNCi0gICAgICAgIHsNCi0gICAgICAg
ICAgICB0eXBlID0gdHlwZW9mIHcucG9zdE1lc3NhZ2U7DQotICAgICAgICAgICAgaWYgKHR5cGUg
PT09ICJmdW5jdGlvbiIpDQotICAgICAgICAgICAgew0KLSAgICAgICAgICAgICAgICBzdXBwb3J0
cyA9IHRydWU7DQotICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgIC8vIElFOCBzdXBwb3J0cyBw
b3N0TWVzc2FnZSwgYnV0IGltcGxlbWVudHMgaXQgYXMgYSBob3N0IG9iamVjdCB3aGljaA0KLSAg
ICAgICAgICAgIC8vIHJldHVybnMgIm9iamVjdCIgYXMgaXRzIGB0eXBlb2ZgLg0KLSAgICAgICAg
ICAgIGVsc2UgaWYgKHR5cGUgPT09ICJvYmplY3QiKQ0KLSAgICAgICAgICAgIHsNCi0gICAgICAg
ICAgICAgICAgc3VwcG9ydHMgPSB0cnVlOw0KLSAgICAgICAgICAgIH0NCi0gICAgICAgICAgICAv
LyBUaGlzIGlzIHRoZSBjYXNlIHdoZXJlIHBvc3RNZXNzYWdlIGlzbid0IHN1cHBvcnRlZCBBTkQg
YWNjZXNzaW5nIGENCi0gICAgICAgICAgICAvLyB3aW5kb3cgcHJvcGVydHkgYWNyb3NzIG9yaWdp
bnMgZG9lcyBOT1QgdGhyb3cgKGUuZy4gb2xkIFNhZmFyaSBicm93c2VyKS4NCi0gICAgICAgICAg
ICBlbHNlDQotICAgICAgICAgICAgew0KLSAgICAgICAgICAgICAgICBzdXBwb3J0cyA9IGZhbHNl
Ow0KLSAgICAgICAgICAgIH0NCi0gICAgICAgIH0NCi0gICAgICAgIGNhdGNoKGUpIHsNCi0gICAg
ICAgICAgICAvLyBUaGlzIGlzIHRoZSBjYXNlIHdoZXJlIHBvc3RNZXNzYWdlIGlzbid0IHN1cHBv
cnRlZCBBTkQgYWNjZXNzaW5nIGENCi0gICAgICAgICAgICAvLyB3aW5kb3cgcHJvcGVydHkgYWNy
b3NzIG9yaWdpbnMgdGhyb3dzIChlLmcuIG9sZCBGaXJlZm94IGJyb3dzZXIpLg0KLSAgICAgICAg
ICAgIHN1cHBvcnRzID0gZmFsc2U7DQotICAgICAgICB9DQotICAgICAgICByZXR1cm4gc3VwcG9y
dHM7DQotICAgIH0NCi19KSgpOw0KLS8vIHZpbTogc2V0IGV4cGFuZHRhYiBzaGlmdHdpZHRoPTQg
dGFic3RvcD00Og0KKy8qCitEaXN0cmlidXRlZCB1bmRlciBib3RoIHRoZSBXM0MgVGVzdCBTdWl0
ZSBMaWNlbnNlIFsxXSBhbmQgdGhlIFczQworMy1jbGF1c2UgQlNEIExpY2Vuc2UgWzJdLiBUbyBj
b250cmlidXRlIHRvIGEgVzNDIFRlc3QgU3VpdGUsIHNlZSB0aGUKK3BvbGljaWVzIGFuZCBjb250
cmlidXRpb24gZm9ybXMgWzNdLgorCitbMV0gaHR0cDovL3d3dy53My5vcmcvQ29uc29ydGl1bS9M
ZWdhbC8yMDA4LzA0LXRlc3RzdWl0ZS1saWNlbnNlCitbMl0gaHR0cDovL3d3dy53My5vcmcvQ29u
c29ydGl1bS9MZWdhbC8yMDA4LzAzLWJzZC1saWNlbnNlCitbM10gaHR0cDovL3d3dy53My5vcmcv
MjAwNC8xMC8yNy10ZXN0Y2FzZXMKKyovCisKKy8qCisgKiA9PSBJbnRyb2R1Y3Rpb24gPT0KKyAq
CisgKiBUaGlzIGZpbGUgcHJvdmlkZXMgYSBmcmFtZXdvcmsgZm9yIHdyaXRpbmcgdGVzdGNhc2Vz
LiBJdCBpcyBpbnRlbmRlZCB0bworICogcHJvdmlkZSBhIGNvbnZlbmllbnQgQVBJIGZvciBtYWtp
bmcgY29tbW9uIGFzc2VydGlvbnMsIGFuZCB0byB3b3JrIGJvdGgKKyAqIGZvciB0ZXN0aW5nIHN5
bmNocm9ub3VzIGFuZCBhc3luY2hyb25vdXMgRE9NIGZlYXR1cmVzIGluIGEgd2F5IHRoYXQKKyAq
IHByb21vdGVzIGNsZWFyLCByb2J1c3QsIHRlc3RzLgorICoKKyAqID09IEJhc2ljIFVzYWdlID09
CisgKgorICogVG8gdXNlIHRoaXMgZmlsZSwgaW1wb3J0IHRoZSBzY3JpcHQgYW5kIHRoZSB0ZXN0
aGFybmVzc3JlcG9ydCBzY3JpcHQgaW50bworICogdGhlIHRlc3QgZG9jdW1lbnQ6CisgKiA8c2Ny
aXB0IHNyYz0iL3Jlc291cmNlcy90ZXN0aGFybmVzcy5qcyI+PC9zY3JpcHQ+CisgKiA8c2NyaXB0
IHNyYz0iL3Jlc291cmNlcy90ZXN0aGFybmVzc3JlcG9ydC5qcyI+PC9zY3JpcHQ+CisgKgorICog
V2l0aGluIGVhY2ggZmlsZSBvbmUgbWF5IGRlZmluZSBvbmUgb3IgbW9yZSB0ZXN0cy4gRWFjaCB0
ZXN0IGlzIGF0b21pYworICogaW4gdGhlIHNlbnNlIHRoYXQgYSBzaW5nbGUgdGVzdCBoYXMgYSBz
aW5nbGUgcmVzdWx0IChwYXNzL2ZhaWwvdGltZW91dCkuCisgKiBXaXRoaW4gZWFjaCB0ZXN0IG9u
ZSBtYXkgaGF2ZSBhIG51bWJlciBvZiBhc3NlcnRzLiBUaGUgdGVzdCBmYWlscyBhdCB0aGUKKyAq
IGZpcnN0IGZhaWxpbmcgYXNzZXJ0LCBhbmQgdGhlIHJlbWFpbmRlciBvZiB0aGUgdGVzdCBpcyAo
dHlwaWNhbGx5KSBub3QgcnVuLgorICoKKyAqIElmIHRoZSBmaWxlIGNvbnRhaW5pbmcgdGhlIHRl
c3RzIGlzIGEgSFRNTCBmaWxlIHdpdGggYW4gZWxlbWVudCBvZiBpZCAibG9nIgorICogdGhpcyB3
aWxsIGJlIHBvcHVsYXRlZCB3aXRoIGEgdGFibGUgY29udGFpbmluZyB0aGUgdGVzdCByZXN1bHRz
IGFmdGVyIGFsbAorICogdGhlIHRlc3RzIGhhdmUgcnVuLgorICoKKyAqIE5PVEU6IEJ5IGRlZmF1
bHQgdGVzdHMgbXVzdCBiZSBjcmVhdGVkIGJlZm9yZSB0aGUgbG9hZCBldmVudCBmaXJlcy4gRm9y
IHdheXMKKyAqICAgICAgIHRvIGNyZWF0ZSB0ZXN0cyBhZnRlciB0aGUgbG9hZCBldmVudCwgc2Vl
ICJEZXRlcm1pbmluZyB3aGVuIGFsbCB0ZXN0cworICogICAgICAgYXJlIGNvbXBsZXRlIiwgYmVs
b3cKKyAqCisgKiA9PSBTeW5jaHJvbm91cyBUZXN0cyA9PQorICoKKyAqIFRvIGNyZWF0ZSBhIHN5
bmNocm9ub3VzIHRlc3QgdXNlIHRoZSB0ZXN0KCkgZnVuY3Rpb246CisgKgorICogdGVzdCh0ZXN0
X2Z1bmN0aW9uLCBuYW1lLCBwcm9wZXJ0aWVzKQorICoKKyAqIHRlc3RfZnVuY3Rpb24gaXMgYSBm
dW5jdGlvbiB0aGF0IGNvbnRhaW5zIHRoZSBjb2RlIHRvIHRlc3QuIEZvciBleGFtcGxlIGEKKyAq
IHRyaXZpYWwgcGFzc2luZyB0ZXN0IHdvdWxkIGJlOgorICoKKyAqIHRlc3QoZnVuY3Rpb24oKSB7
YXNzZXJ0X3RydWUodHJ1ZSl9LCAiYXNzZXJ0X3RydWUgd2l0aCB0cnVlIikKKyAqCisgKiBUaGUg
ZnVuY3Rpb24gcGFzc2VkIGluIGlzIHJ1biBpbiB0aGUgdGVzdCgpIGNhbGwuCisgKgorICogcHJv
cGVydGllcyBpcyBhbiBvYmplY3QgdGhhdCBvdmVycmlkZXMgZGVmYXVsdCB0ZXN0IHByb3BlcnRp
ZXMuIFRoZQorICogcmVjb2duaXNlZCBwcm9wZXJ0aWVzIGFyZToKKyAqICAgIHRpbWVvdXQgLSB0
aGUgdGVzdCB0aW1lb3V0IGluIG1zCisgKgorICogZS5nLgorICogdGVzdCh0ZXN0X2Z1bmN0aW9u
LCAiU2FtcGxlIHRlc3QiLCB7dGltZW91dDoxMDAwfSkKKyAqCisgKiB3b3VsZCBydW4gdGVzdF9m
dW5jdGlvbiB3aXRoIGEgdGltZW91dCBvZiAxcy4KKyAqCisgKiBBZGRpdGlvbmFsbHksIHRlc3Qt
c3BlY2lmaWMgbWV0YWRhdGEgY2FuIGJlIHBhc3NlZCBpbiB0aGUgcHJvcGVydGllcy4gVGhlc2UK
KyAqIGFyZSB1c2VkIHdoZW4gdGhlIGluZGl2aWR1YWwgdGVzdCBoYXMgZGlmZmVyZW50IG1ldGFk
YXRhIGZyb20gdGhhdCBzdG9yZWQKKyAqIGluIHRoZSA8aGVhZD4uCisgKiBUaGUgcmVjb2duaXpl
ZCBtZXRhZGF0YSBwcm9wZXJ0aWVzIGFyZToKKyAqCisgKiAgICBoZWxwIC0gVGhlIHVybCBvciBh
biBhcnJheSBvZiB1cmxzIG9mIHRoZSBwYXJ0KHMpIG9mIHRoZSBzcGVjaWZpY2F0aW9uKHMpCisg
KiAgICAgICAgICAgYmVpbmcgdGVzdGVkCisgKgorICogICAgYXNzZXJ0IC0gQSBodW1hbiByZWFk
YWJsZSBkZXNjcmlwdGlvbiBvZiB3aGF0IHRoZSB0ZXN0IGlzIGF0dGVtcHRpbmcKKyAqICAgICAg
ICAgICAgIHRvIHByb3ZlCisgKgorICogICAgYXV0aG9yIC0gTmFtZSBhbmQgY29udGFjdCBpbmZv
cm1hdGlvbiBmb3IgdGhlIGF1dGhvciBvZiB0aGUgdGVzdCBpbiB0aGUKKyAqICAgICAgICAgICAg
IGZvcm1hdDogIk5hbWUgPGVtYWlsX2FkZHI+IiBvciAiTmFtZSBodHRwOi8vY29udGFjdC91cmwi
CisgKgorICogPT0gQXN5bmNocm9ub3VzIFRlc3RzID09CisgKgorICogVGVzdGluZyBhc3luY2hy
b25vdXMgZmVhdHVyZXMgaXMgc29tZXdoYXQgbW9yZSBjb21wbGV4IHNpbmNlIHRoZSByZXN1bHQg
b2YKKyAqIGEgdGVzdCBtYXkgZGVwZW5kIG9uIG9uZSBvciBtb3JlIGV2ZW50cyBvciBvdGhlciBj
YWxsYmFja3MuIFRoZSBBUEkgcHJvdmlkZWQKKyAqIGZvciB0ZXN0aW5nIHRoZXNlIGZlYXR1cmVz
IGlzIGluZGVuZGVkIHRvIGJlIHJhdGhlciBsb3ctbGV2ZWwgYnV0IGhvcGVmdWxseQorICogYXBw
bGljYWJsZSB0byBtYW55IHNpdHVhdGlvbnMuCisgKgorICogVG8gY3JlYXRlIGEgdGVzdCwgb25l
IHN0YXJ0cyBieSBnZXR0aW5nIGEgVGVzdCBvYmplY3QgdXNpbmcgYXN5bmNfdGVzdDoKKyAqCisg
KiBhc3luY190ZXN0KG5hbWUsIHByb3BlcnRpZXMpCisgKgorICogZS5nLgorICogdmFyIHQgPSBh
c3luY190ZXN0KCJTaW1wbGUgYXN5bmMgdGVzdCIpCisgKgorICogQXNzZXJ0aW9ucyBjYW4gYmUg
YWRkZWQgdG8gdGhlIHRlc3QgYnkgY2FsbGluZyB0aGUgc3RlcCBtZXRob2Qgb2YgdGhlIHRlc3QK
KyAqIG9iamVjdCB3aXRoIGEgZnVuY3Rpb24gY29udGFpbmluZyB0aGUgdGVzdCBhc3NlcnRpb25z
OgorICoKKyAqIHQuc3RlcChmdW5jdGlvbigpIHthc3NlcnRfdHJ1ZSh0cnVlKX0pOworICoKKyAq
IFdoZW4gYWxsIHRoZSBzdGVwcyBhcmUgY29tcGxldGUsIHRoZSBkb25lKCkgbWV0aG9kIG11c3Qg
YmUgY2FsbGVkOgorICoKKyAqIHQuZG9uZSgpOworICoKKyAqIEFzIGEgY29udmVuaWVuY2UsIGFz
eW5jX3Rlc3QgY2FuIGFsc28gdGFrZXMgYSBmdW5jdGlvbiBhcyBmaXJzdCBhcmd1bWVudC4KKyAq
IFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIHdpdGggdGhlIHRlc3Qgb2JqZWN0IGFzIGJvdGggaXRz
IGB0aGlzYCBvYmplY3QgYW5kCisgKiBmaXJzdCBhcmd1bWVudC4gVGhlIGFib3ZlIGV4YW1wbGUg
Y2FuIGJlIHJld3JpdHRlbiBhczoKKyAqCisgKiBhc3luY190ZXN0KGZ1bmN0aW9uKHQpIHsKKyAq
ICAgICBvYmplY3Quc29tZV9ldmVudCA9IGZ1bmN0aW9uKCkgeworICogICAgICAgICB0LnN0ZXAo
ZnVuY3Rpb24gKCl7YXNzZXJ0X3RydWUodHJ1ZSk7IHQuZG9uZSgpO30pOworICogICAgIH07Cisg
KiB9LCAiU2ltcGxlIGFzeW5jIHRlc3QiKTsKKyAqCisgKiB3aGljaCBhdm9pZHMgY2x1dHRlcmlu
ZyB0aGUgZ2xvYmFsIHNjb3BlIHdpdGggcmVmZXJlbmNlcyB0byBhc3luYworICogdGVzdHMgaW5z
dGFuY2VzLgorICoKKyAqIFRoZSBwcm9wZXJ0aWVzIGFyZ3VtZW50IGlzIGlkZW50aWNhbCB0byB0
aGF0IGZvciB0ZXN0KCkuCisgKgorICogSW4gbWFueSBjYXNlcyBpdCBpcyBjb252ZW5pZW50IHRv
IHJ1biBhIHN0ZXAgaW4gcmVzcG9uc2UgdG8gYW4gZXZlbnQgb3IgYQorICogY2FsbGJhY2suIEEg
Y29udmVuaWVudCBtZXRob2Qgb2YgZG9pbmcgdGhpcyBpcyB0aHJvdWdoIHRoZSBzdGVwX2Z1bmMg
bWV0aG9kCisgKiB3aGljaCByZXR1cm5zIGEgZnVuY3Rpb24gdGhhdCwgd2hlbiBjYWxsZWQgcnVu
cyBhIHRlc3Qgc3RlcC4gRm9yIGV4YW1wbGUKKyAqCisgKiBvYmplY3Quc29tZV9ldmVudCA9IHQu
c3RlcF9mdW5jKGZ1bmN0aW9uKGUpIHthc3NlcnRfdHJ1ZShlLmEpfSk7CisgKgorICogPT0gTWFr
aW5nIGFzc2VydGlvbnMgPT0KKyAqCisgKiBGdW5jdGlvbnMgZm9yIG1ha2luZyBhc3NlcnRpb25z
IHN0YXJ0IGFzc2VydF8KKyAqIFRoZSBiZXN0IHdheSB0byBnZXQgYSBsaXN0IGlzIHRvIGxvb2sg
aW4gdGhpcyBmaWxlIGZvciBmdW5jdGlvbnMgbmFtZXMKKyAqIG1hdGNoaW5nIHRoYXQgcGF0dGVy
bi4gVGhlIGdlbmVyYWwgc2lnbmF0dXJlIGlzCisgKgorICogYXNzZXJ0X3NvbWV0aGluZyhhY3R1
YWwsIGV4cGVjdGVkLCBkZXNjcmlwdGlvbikKKyAqCisgKiBhbHRob3VnaCBub3QgYWxsIGFzc2Vy
dGlvbnMgcHJlY2lzZWx5IG1hdGNoIHRoaXMgcGF0dGVybiBlLmcuIGFzc2VydF90cnVlCisgKiBv
bmx5IHRha2VzIGFjdHVhbCBhbmQgZGVzY3JpcHRpb24gYXMgYXJndW1lbnRzLgorICoKKyAqIFRo
ZSBkZXNjcmlwdGlvbiBwYXJhbWV0ZXIgaXMgdXNlZCB0byBwcmVzZW50IG1vcmUgdXNlZnVsIGVy
cm9yIG1lc3NhZ2VzIHdoZW4KKyAqIGEgdGVzdCBmYWlscworICoKKyAqIE5PVEU6IEFsbCBhc3Nl
cnRzIG11c3QgYmUgbG9jYXRlZCBpbiBhIHRlc3QoKSBvciBhIHN0ZXAgb2YgYW4gYXN5bmNfdGVz
dCgpLgorICogICAgICAgYXNzZXJ0cyBvdXRzaWRlIHRoZXNlIHBsYWNlcyB3b24ndCBiZSBkZXRl
Y3RlZCBjb3JyZWN0bHkgYnkgdGhlIGhhcm5lc3MKKyAqICAgICAgIGFuZCBtYXkgY2F1c2UgYSBm
aWxlIHRvIHN0b3AgdGVzdGluZy4KKyAqCisgKiA9PSBDbGVhbnVwID09CisgKgorICogT2NjYXNp
b25hbGx5IHRlc3RzIG1heSBjcmVhdGUgc3RhdGUgdGhhdCB3aWxsIHBlcnNpc3QgYmV5b25kIHRo
ZSB0ZXN0IGl0c2VsZi4KKyAqIEluIG9yZGVyIHRvIGVuc3VyZSB0aGF0IHRlc3RzIGFyZSBpbmRl
cGVuZGVudCwgc3VjaCBzdGF0ZSBzaG91bGQgYmUgY2xlYW5lZAorICogdXAgb25jZSB0aGUgdGVz
dCBoYXMgYSByZXN1bHQuIFRoaXMgY2FuIGJlIGFjaGlldmVkIGJ5IGFkZGluZyBjbGVhbnVwCisg
KiBjYWxsYmFja3MgdG8gdGhlIHRlc3QuIFN1Y2ggY2FsbGJhY2tzIGFyZSByZWdpc3RlcmVkIHVz
aW5nIHRoZSBhZGRfY2xlYW51cAorICogZnVuY3Rpb24gb24gdGhlIHRlc3Qgb2JqZWN0LiBBbGwg
cmVnaXN0ZXJlZCBjYWxsYmFja3Mgd2lsbCBiZSBydW4gYXMgc29vbiBhcworICogdGhlIHRlc3Qg
cmVzdWx0IGlzIGtub3duLiBGb3IgZXhhbXBsZQorICogdGVzdChmdW5jdGlvbigpIHsKKyAqICAg
ICAgICAgIHdpbmRvdy5zb21lX2dsb2JhbCA9ICJleGFtcGxlIjsKKyAqICAgICAgICAgIHRoaXMu
YWRkX2NsZWFudXAoZnVuY3Rpb24oKSB7ZGVsZXRlIHdpbmRvdy5zb21lX2dsb2JhbH0pOworICog
ICAgICAgICAgYXNzZXJ0X3RydWUoZmFsc2UpOworICogICAgICB9KTsKKyAqCisgKiA9PSBIYXJu
ZXNzIFRpbWVvdXQgPT0KKyAqCisgKiBUaGUgb3ZlcmFsbCBoYXJuZXNzIGFkbWl0cyB0d28gdGlt
ZW91dCB2YWx1ZXMgIm5vcm1hbCIgKHRoZQorICogZGVmYXVsdCkgYW5kICJsb25nIiwgdXNlZCBm
b3IgdGVzdHMgd2hpY2ggaGF2ZSBhbiB1bnVzdWFsbHkgbG9uZworICogcnVudGltZS4gQWZ0ZXIg
dGhlIHRpbWVvdXQgaXMgcmVhY2hlZCwgdGhlIGhhcm5lc3Mgd2lsbCBzdG9wCisgKiB3YWl0aW5n
IGZvciBmdXJ0aGVyIGFzeW5jIHRlc3RzIHRvIGNvbXBsZXRlLiBCeSBkZWZhdWx0IHRoZQorICog
dGltZW91dHMgYXJlIHNldCB0byAxMHMgYW5kIDYwcywgcmVzcGVjdGl2ZWx5LCBidXQgbWF5IGJl
IGNoYW5nZWQKKyAqIHdoZW4gdGhlIHRlc3QgaXMgcnVuIG9uIGhhcmR3YXJlIHdpdGggZGlmZmVy
ZW50IHBlcmZvcm1hbmNlCisgKiBjaGFyYWN0ZXJpc3RpY3MgdG8gYSBjb21tb24gZGVza3RvcCBj
b21wdXRlci4gIEluIG9yZGVyIHRvIG9wdC1pbgorICogdG8gdGhlIGxvbmdlciB0ZXN0IHRpbWVv
dXQsIHRoZSB0ZXN0IG11c3Qgc3BlY2lmeSBhIG1ldGEgZWxlbWVudDoKKyAqIDxtZXRhIG5hbWU9
InRpbWVvdXQiIGNvbnRlbnQ9ImxvbmciPgorICoKKyAqID09IFNldHVwID09CisgKgorICogU29t
ZXRpbWVzIHRlc3RzIHJlcXVpcmUgbm9uLXRyaXZpYWwgc2V0dXAgdGhhdCBtYXkgZmFpbC4gRm9y
IHRoaXMgcHVycG9zZQorICogdGhlcmUgaXMgYSBzZXR1cCgpIGZ1bmN0aW9uLCB0aGF0IG1heSBi
ZSBjYWxsZWQgd2l0aCBvbmUgb3IgdHdvIGFyZ3VtZW50cy4KKyAqIFRoZSB0d28gYXJndW1lbnQg
dmVyc2lvbiBpczoKKyAqCisgKiBzZXR1cChmdW5jLCBwcm9wZXJ0aWVzKQorICoKKyAqIFRoZSBv
bmUgYXJndW1lbnQgdmVyc2lvbnMgbWF5IG9taXQgZWl0aGVyIGFyZ3VtZW50LgorICogZnVuYyBp
cyBhIGZ1bmN0aW9uIHRvIGJlIHJ1biBzeW5jaHJvbm91c2x5LiBzZXR1cCgpIGJlY29tZXMgYSBu
by1vcCBvbmNlCisgKiBhbnkgdGVzdHMgaGF2ZSByZXR1cm5lZCByZXN1bHRzLiBQcm9wZXJ0aWVz
IGFyZSBnbG9iYWwgcHJvcGVydGllcyBvZiB0aGUgdGVzdAorICogaGFybmVzcy4gQ3VycmVudGx5
IHJlY29nbmlzZWQgcHJvcGVydGllcyBhcmU6CisgKgorICoKKyAqIGV4cGxpY2l0X2RvbmUgLSBX
YWl0IGZvciBhbiBleHBsaWNpdCBjYWxsIHRvIGRvbmUoKSBiZWZvcmUgZGVjbGFyaW5nIGFsbAor
ICogICAgICAgICAgICAgICAgIHRlc3RzIGNvbXBsZXRlIChzZWUgYmVsb3cpCisgKgorICogb3V0
cHV0X2RvY3VtZW50IC0gVGhlIGRvY3VtZW50IHRvIHdoaWNoIHJlc3VsdHMgc2hvdWxkIGJlIGxv
Z2dlZC4gQnkgZGVmYXVsdAorICogICAgICAgICAgICAgICAgICAgdGhpcyBpcyB0aGUgY3VycmVu
dCBkb2N1bWVudCBidXQgY291bGQgYmUgYW4gYW5jZXN0b3IKKyAqICAgICAgICAgICAgICAgICAg
IGRvY3VtZW50IGluIHNvbWUgY2FzZXMgZS5nLiBhIFNWRyB0ZXN0IGxvYWRlZCBpbiBhbiBIVE1M
CisgKiAgICAgICAgICAgICAgICAgICB3cmFwcGVyCisgKgorICogZXhwbGljaXRfdGltZW91dCAt
IGRpc2FibGUgZmlsZSB0aW1lb3V0OyBvbmx5IHN0b3Agd2FpdGluZyBmb3IgcmVzdWx0cworICog
ICAgICAgICAgICAgICAgICAgIHdoZW4gdGhlIHRpbWVvdXQoKSBmdW5jdGlvbiBpcyBjYWxsZWQg
KHR5cGljYWxseSBmb3IKKyAqICAgICAgICAgICAgICAgICAgICB1c2Ugd2hlbiBpbnRlZ3JhdGlu
ZyB3aXRoIHNvbWUgZXhpc3RpbmcgdGVzdCBmcmFtZXdvcmsKKyAqICAgICAgICAgICAgICAgICAg
ICB0aGF0IGhhcyBpdHMgb3duIHRpbWVvdXQgbWVjaGFuaXNtKS4KKyAqCisgKiBhbGxvd191bmNh
dWdodF9leGNlcHRpb24gLSBkb24ndCB0cmVhdCBhbiB1bmNhdWdodCBleGNlcHRpb24gYXMgYW4g
ZXJyb3I7CisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZWVkZWQgd2hlbiBlLmcuIHRl
c3RpbmcgdGhlIHdpbmRvdy5vbmVycm9yCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICBo
YW5kbGVyLgorICoKKyAqIHRpbWVvdXRfbXVsdGlwbGllciAtIE11bHRpcGxpZXIgdG8gYXBwbHkg
dG8gcGVyLXRlc3QgdGltZW91dHMuCisgKgorICogPT0gRGV0ZXJtaW5pbmcgd2hlbiBhbGwgdGVz
dHMgYXJlIGNvbXBsZXRlID09CisgKgorICogQnkgZGVmYXVsdCB0aGUgdGVzdCBoYXJuZXNzIHdp
bGwgYXNzdW1lIHRoZXJlIGFyZSBubyBtb3JlIHJlc3VsdHMgdG8gY29tZQorICogd2hlbjoKKyAq
IDEpIFRoZXJlIGFyZSBubyBUZXN0IG9iamVjdHMgdGhhdCBoYXZlIGJlZW4gY3JlYXRlZCBidXQg
bm90IGNvbXBsZXRlZAorICogMikgVGhlIGxvYWQgZXZlbnQgb24gdGhlIGRvY3VtZW50IGhhcyBm
aXJlZAorICoKKyAqIFRoaXMgYmVoYXZpb3VyIGNhbiBiZSBvdmVycmlkZGVuIGJ5IHNldHRpbmcg
dGhlIGV4cGxpY2l0X2RvbmUgcHJvcGVydHkgdG8KKyAqIHRydWUgaW4gYSBjYWxsIHRvIHNldHVw
KCkuIElmIGV4cGxpY2l0X2RvbmUgaXMgdHJ1ZSwgdGhlIHRlc3QgaGFybmVzcyB3aWxsCisgKiBu
b3QgYXNzdW1lIGl0IGlzIGRvbmUgdW50aWwgdGhlIGdsb2JhbCBkb25lKCkgZnVuY3Rpb24gaXMg
Y2FsbGVkLiBPbmNlIGRvbmUoKQorICogaXMgY2FsbGVkLCB0aGUgdHdvIGNvbmRpdGlvbnMgYWJv
dmUgYXBwbHkgbGlrZSBub3JtYWwuCisgKgorICogPT0gR2VuZXJhdGluZyB0ZXN0cyA9PQorICoK
KyAqIE5PVEU6IHRoaXMgZnVuY3Rpb25hbGl0eSBtYXkgYmUgcmVtb3ZlZAorICoKKyAqIFRoZXJl
IGFyZSBzY2VuYXJpb3MgaW4gd2hpY2ggaXMgaXMgZGVzaXJhYmxlIHRvIGNyZWF0ZSBhIGxhcmdl
IG51bWJlciBvZgorICogKHN5bmNocm9ub3VzKSB0ZXN0cyB0aGF0IGFyZSBpbnRlcm5hbGx5IHNp
bWlsYXIgYnV0IHZhcnkgaW4gdGhlIHBhcmFtZXRlcnMKKyAqIHVzZWQuIFRvIG1ha2UgdGhpcyBl
YXNpZXIsIHRoZSBnZW5lcmF0ZV90ZXN0cyBmdW5jdGlvbiBhbGxvd3MgYSBzaW5nbGUKKyAqIGZ1
bmN0aW9uIHRvIGJlIGNhbGxlZCB3aXRoIGVhY2ggc2V0IG9mIHBhcmFtZXRlcnMgaW4gYSBsaXN0
OgorICoKKyAqIGdlbmVyYXRlX3Rlc3RzKHRlc3RfZnVuY3Rpb24sIHBhcmFtZXRlcl9saXN0cywg
cHJvcGVydGllcykKKyAqCisgKiBGb3IgZXhhbXBsZToKKyAqCisgKiBnZW5lcmF0ZV90ZXN0cyhh
c3NlcnRfZXF1YWxzLCBbCisgKiAgICAgWyJTdW0gb25lIGFuZCBvbmUiLCAxKzEsIDJdLAorICog
ICAgIFsiU3VtIG9uZSBhbmQgemVybyIsIDErMCwgMV0KKyAqICAgICBdKQorICoKKyAqIElzIGVx
dWl2YWxlbnQgdG86CisgKgorICogdGVzdChmdW5jdGlvbigpIHthc3NlcnRfZXF1YWxzKDErMSwg
Mil9LCAiU3VtIG9uZSBhbmQgb25lIikKKyAqIHRlc3QoZnVuY3Rpb24oKSB7YXNzZXJ0X2VxdWFs
cygxKzAsIDEpfSwgIlN1bSBvbmUgYW5kIHplcm8iKQorICoKKyAqIE5vdGUgdGhhdCB0aGUgZmly
c3QgaXRlbSBpbiBlYWNoIHBhcmFtZXRlciBsaXN0IGNvcnJlc3BvbmRzIHRvIHRoZSBuYW1lIG9m
CisgKiB0aGUgdGVzdC4KKyAqCisgKiBUaGUgcHJvcGVydGllcyBhcmd1bWVudCBpcyBpZGVudGlj
YWwgdG8gdGhhdCBmb3IgdGVzdCgpLiBUaGlzIG1heSBiZSBhCisgKiBzaW5nbGUgb2JqZWN0ICh1
c2VkIGZvciBhbGwgZ2VuZXJhdGVkIHRlc3RzKSBvciBhbiBhcnJheS4KKyAqCisgKiA9PSBDYWxs
YmFjayBBUEkgPT0KKyAqCisgKiBUaGUgZnJhbWV3b3JrIHByb3ZpZGVzIGNhbGxiYWNrcyBjb3Jy
ZXNwb25kaW5nIHRvIDMgZXZlbnRzOgorICoKKyAqIHN0YXJ0IC0gaGFwcGVucyB3aGVuIHRoZSBm
aXJzdCBUZXN0IGlzIGNyZWF0ZWQKKyAqIHJlc3VsdCAtIGhhcHBlbnMgd2hlbiBhIHRlc3QgcmVz
dWx0IGlzIHJlY2lldmVkCisgKiBjb21wbGV0ZSAtIGhhcHBlbnMgd2hlbiBhbGwgcmVzdWx0cyBh
cmUgcmVjaWV2ZWQKKyAqCisgKiBUaGUgcGFnZSBkZWZpbmluZyB0aGUgdGVzdHMgbWF5IGFkZCBj
YWxsYmFja3MgZm9yIHRoZXNlIGV2ZW50cyBieSBjYWxsaW5nCisgKiB0aGUgZm9sbG93aW5nIG1l
dGhvZHM6CisgKgorICogICBhZGRfc3RhcnRfY2FsbGJhY2soY2FsbGJhY2spIC0gY2FsbGJhY2sg
Y2FsbGVkIHdpdGggbm8gYXJndW1lbnRzCisgKiAgIGFkZF9yZXN1bHRfY2FsbGJhY2soY2FsbGJh
Y2spIC0gY2FsbGJhY2sgY2FsbGVkIHdpdGggYSB0ZXN0IGFyZ3VtZW50CisgKiAgIGFkZF9jb21w
bGV0aW9uX2NhbGxiYWNrKGNhbGxiYWNrKSAtIGNhbGxiYWNrIGNhbGxlZCB3aXRoIGFuIGFycmF5
IG9mIHRlc3RzCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFuZCBh
biBzdGF0dXMgb2JqZWN0CisgKgorICogdGVzdHMgaGF2ZSB0aGUgZm9sbG93aW5nIHByb3BlcnRp
ZXM6CisgKiAgIHN0YXR1czogQSBzdGF0dXMgY29kZS4gVGhpcyBjYW4gYmUgY29tcGFyZWQgdG8g
dGhlIFBBU1MsIEZBSUwsIFRJTUVPVVQgYW5kCisgKiAgICAgICAgICAgTk9UUlVOIHByb3BlcnRp
ZXMgb24gdGhlIHRlc3Qgb2JqZWN0CisgKiAgIG1lc3NhZ2U6IEEgbWVzc2FnZSBpbmRpY2F0aW5n
IHRoZSByZWFzb24gZm9yIGZhaWx1cmUuIEluIHRoZSBmdXR1cmUgdGhpcworICogICAgICAgICAg
ICB3aWxsIGFsd2F5cyBiZSBhIHN0cmluZworICoKKyAqICBUaGUgc3RhdHVzIG9iamVjdCBnaXZl
cyB0aGUgb3ZlcmFsbCBzdGF0dXMgb2YgdGhlIGhhcm5lc3MuIEl0IGhhcyB0aGUKKyAqICBmb2xs
b3dpbmcgcHJvcGVydGllczoKKyAqICAgIHN0YXR1czogQ2FuIGJlIGNvbXBhcmVkIHRvIHRoZSBP
SywgRVJST1IgYW5kIFRJTUVPVVQgcHJvcGVydGllcworICogICAgbWVzc2FnZTogQW4gZXJyb3Ig
bWVzc2FnZSBzZXQgd2hlbiB0aGUgc3RhdHVzIGlzIEVSUk9SCisgKgorICogPT0gRXh0ZXJuYWwg
QVBJID09CisgKgorICogSW4gb3JkZXIgdG8gY29sbGVjdCB0aGUgcmVzdWx0cyBvZiBtdWx0aXBs
ZSBwYWdlcyBjb250YWluaW5nIHRlc3RzLCB0aGUgdGVzdAorICogaGFybmVzcyB3aWxsLCB3aGVu
IGxvYWRlZCBpbiBhIG5lc3RlZCBicm93c2luZyBjb250ZXh0LCBhdHRlbXB0IHRvIGNhbGwKKyAq
IGNlcnRhaW4gZnVuY3Rpb25zIGluIGVhY2ggYW5jZXN0b3IgYW5kIG9wZW5lciBicm93c2luZyBj
b250ZXh0OgorICoKKyAqIHN0YXJ0IC0gc3RhcnRfY2FsbGJhY2sKKyAqIHJlc3VsdCAtIHJlc3Vs
dF9jYWxsYmFjaworICogY29tcGxldGUgLSBjb21wbGV0aW9uX2NhbGxiYWNrCisgKgorICogVGhl
c2UgYXJlIGdpdmVuIHRoZSBzYW1lIGFyZ3VtZW50cyBhcyB0aGUgY29ycmVzcG9uZGluZyBpbnRl
cm5hbCBjYWxsYmFja3MKKyAqIGRlc2NyaWJlZCBhYm92ZS4KKyAqCisgKiA9PSBFeHRlcm5hbCBB
UEkgdGhyb3VnaCBjcm9zcy1kb2N1bWVudCBtZXNzYWdpbmcgPT0KKyAqCisgKiBXaGVyZSBzdXBw
b3J0ZWQsIHRoZSB0ZXN0IGhhcm5lc3Mgd2lsbCBhbHNvIHNlbmQgbWVzc2FnZXMgdXNpbmcKKyAq
IGNyb3NzLWRvY3VtZW50IG1lc3NhZ2luZyB0byBlYWNoIGFuY2VzdG9yIGFuZCBvcGVuZXIgYnJv
d3NpbmcgY29udGV4dC4gU2luY2UKKyAqIGl0IHVzZXMgdGhlIHdpbGRjYXJkIGtleXdvcmQgKCop
LCBjcm9zcy1vcmlnaW4gY29tbXVuaWNhdGlvbiBpcyBlbmFibGVkIGFuZAorICogc2NyaXB0IG9u
IGRpZmZlcmVudCBvcmlnaW5zIGNhbiBjb2xsZWN0IHRoZSByZXN1bHRzLgorICoKKyAqIFRoaXMg
QVBJIGZvbGxvd3Mgc2ltaWxhciBjb252ZW50aW9ucyBhcyB0aG9zZSBkZXNjcmliZWQgYWJvdmUg
b25seSBzbGlnaHRseQorICogbW9kaWZpZWQgdG8gYWNjb21tb2RhdGUgbWVzc2FnZSBldmVudCBB
UEkuIEVhY2ggbWVzc2FnZSBpcyBzZW50IGJ5IHRoZSBoYXJuZXNzCisgKiBpcyBwYXNzZWQgYSBz
aW5nbGUgdmFuaWxsYSBvYmplY3QsIGF2YWlsYWJsZSBhcyB0aGUgYGRhdGFgIHByb3BlcnR5IG9m
IHRoZQorICogZXZlbnQgb2JqZWN0LiBUaGVzZSBvYmplY3RzIGFyZSBzdHJ1Y3R1cmVzIGFzIGZv
bGxvd3M6CisgKgorICogc3RhcnQgLSB7IHR5cGU6ICJzdGFydCIgfQorICogcmVzdWx0IC0geyB0
eXBlOiAicmVzdWx0IiwgdGVzdDogVGVzdCB9CisgKiBjb21wbGV0ZSAtIHsgdHlwZTogImNvbXBs
ZXRlIiwgdGVzdHM6IFtUZXN0LCAuLi5dLCBzdGF0dXM6IFRlc3RzU3RhdHVzIH0KKyAqCisgKiA9
PSBMaXN0IG9mIGFzc2VydGlvbnMgPT0KKyAqCisgKiBhc3NlcnRfdHJ1ZShhY3R1YWwsIGRlc2Ny
aXB0aW9uKQorICogICBhc3NlcnRzIHRoYXQgL2FjdHVhbC8gaXMgc3RyaWN0bHkgdHJ1ZQorICoK
KyAqIGFzc2VydF9mYWxzZShhY3R1YWwsIGRlc2NyaXB0aW9uKQorICogICBhc3NlcnRzIHRoYXQg
L2FjdHVhbC8gaXMgc3RyaWN0bHkgZmFsc2UKKyAqCisgKiBhc3NlcnRfZXF1YWxzKGFjdHVhbCwg
ZXhwZWN0ZWQsIGRlc2NyaXB0aW9uKQorICogICBhc3NlcnRzIHRoYXQgL2FjdHVhbC8gaXMgdGhl
IHNhbWUgdmFsdWUgYXMgL2V4cGVjdGVkLworICoKKyAqIGFzc2VydF9ub3RfZXF1YWxzKGFjdHVh
bCwgZXhwZWN0ZWQsIGRlc2NyaXB0aW9uKQorICogICBhc3NlcnRzIHRoYXQgL2FjdHVhbC8gaXMg
YSBkaWZmZXJlbnQgdmFsdWUgdG8gL2V4cGVjdGVkLy4gWWVzLCB0aGlzIG1lYW5zCisgKiAgIHRo
YXQgImV4cGVjdGVkIiBpcyBhIG1pc25vbWVyCisgKgorICogYXNzZXJ0X2luX2FycmF5KGFjdHVh
bCwgZXhwZWN0ZWQsIGRlc2NyaXB0aW9uKQorICogICBhc3NlcnRzIHRoYXQgL2V4cGVjdGVkLyBp
cyBhbiBBcnJheSwgYW5kIC9hY3R1YWwvIGlzIGVxdWFsIHRvIG9uZSBvZiB0aGUKKyAqICAgbWVt
YmVycyAtLSBleHBlY3RlZC5pbmRleE9mKGFjdHVhbCkgIT0gLTEKKyAqCisgKiBhc3NlcnRfYXJy
YXlfZXF1YWxzKGFjdHVhbCwgZXhwZWN0ZWQsIGRlc2NyaXB0aW9uKQorICogICBhc3NlcnRzIHRo
YXQgL2FjdHVhbC8gYW5kIC9leHBlY3RlZC8gaGF2ZSB0aGUgc2FtZSBsZW5ndGggYW5kIHRoZSB2
YWx1ZSBvZgorICogICBlYWNoIGluZGV4ZWQgcHJvcGVydHkgaW4gL2FjdHVhbC8gaXMgdGhlIHN0
cmljdGx5IGVxdWFsIHRvIHRoZSBjb3JyZXNwb25kaW5nCisgKiAgIHByb3BlcnR5IHZhbHVlIGlu
IC9leHBlY3RlZC8KKyAqCisgKiBhc3NlcnRfYXBwcm94X2VxdWFscyhhY3R1YWwsIGV4cGVjdGVk
LCBlcHNpbG9uLCBkZXNjcmlwdGlvbikKKyAqICAgYXNzZXJ0cyB0aGF0IC9hY3R1YWwvIGlzIGEg
bnVtYmVyIHdpdGhpbiArLy0gL2Vwc2lsb24vIG9mIC9leHBlY3RlZC8KKyAqCisgKiBhc3NlcnRf
bGVzc190aGFuKGFjdHVhbCwgZXhwZWN0ZWQsIGRlc2NyaXB0aW9uKQorICogICBhc3NlcnRzIHRo
YXQgL2FjdHVhbC8gaXMgYSBudW1iZXIgbGVzcyB0aGFuIC9leHBlY3RlZC8KKyAqCisgKiBhc3Nl
cnRfZ3JlYXRlcl90aGFuKGFjdHVhbCwgZXhwZWN0ZWQsIGRlc2NyaXB0aW9uKQorICogICBhc3Nl
cnRzIHRoYXQgL2FjdHVhbC8gaXMgYSBudW1iZXIgZ3JlYXRlciB0aGFuIC9leHBlY3RlZC8KKyAq
CisgKiBhc3NlcnRfbGVzc190aGFuX2VxdWFsKGFjdHVhbCwgZXhwZWN0ZWQsIGRlc2NyaXB0aW9u
KQorICogICBhc3NlcnRzIHRoYXQgL2FjdHVhbC8gaXMgYSBudW1iZXIgbGVzcyB0aGFuIG9yIGVx
dWFsIHRvIC9leHBlY3RlZC8KKyAqCisgKiBhc3NlcnRfZ3JlYXRlcl90aGFuX2VxdWFsKGFjdHVh
bCwgZXhwZWN0ZWQsIGRlc2NyaXB0aW9uKQorICogICBhc3NlcnRzIHRoYXQgL2FjdHVhbC8gaXMg
YSBudW1iZXIgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvIC9leHBlY3RlZC8KKyAqCisgKiBhc3Nl
cnRfcmVnZXhwX21hdGNoKGFjdHVhbCwgZXhwZWN0ZWQsIGRlc2NyaXB0aW9uKQorICogICBhc3Nl
cnRzIHRoYXQgL2FjdHVhbC8gbWF0Y2hlcyB0aGUgcmVnZXhwIC9leHBlY3RlZC8KKyAqCisgKiBh
c3NlcnRfY2xhc3Nfc3RyaW5nKG9iamVjdCwgY2xhc3NfbmFtZSwgZGVzY3JpcHRpb24pCisgKiAg
IGFzc2VydHMgdGhhdCB0aGUgY2xhc3Mgc3RyaW5nIG9mIC9vYmplY3QvIGFzIHJldHVybmVkIGlu
CisgKiAgIE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcgaXMgZXF1YWwgdG8gL2NsYXNzX25hbWUv
LgorICoKKyAqIGFzc2VydF9vd25fcHJvcGVydHkob2JqZWN0LCBwcm9wZXJ0eV9uYW1lLCBkZXNj
cmlwdGlvbikKKyAqICAgYXNzZXJ0IHRoYXQgb2JqZWN0IGhhcyBvd24gcHJvcGVydHkgcHJvcGVy
dHlfbmFtZQorICoKKyAqIGFzc2VydF9pbmhlcml0cyhvYmplY3QsIHByb3BlcnR5X25hbWUsIGRl
c2NyaXB0aW9uKQorICogICBhc3NlcnQgdGhhdCBvYmplY3QgZG9lcyBub3QgaGF2ZSBhbiBvd24g
cHJvcGVydHkgbmFtZWQgcHJvcGVydHlfbmFtZQorICogICBidXQgdGhhdCBwcm9wZXJ0eV9uYW1l
IGlzIHByZXNlbnQgaW4gdGhlIHByb3RvdHlwZSBjaGFpbiBmb3Igb2JqZWN0CisgKgorICogYXNz
ZXJ0X2lkbF9hdHRyaWJ1dGUob2JqZWN0LCBhdHRyaWJ1dGVfbmFtZSwgZGVzY3JpcHRpb24pCisg
KiAgIGFzc2VydCB0aGF0IGFuIG9iamVjdCB0aGF0IGlzIGFuIGluc3RhbmNlIG9mIHNvbWUgaW50
ZXJmYWNlIGhhcyB0aGUKKyAqICAgYXR0cmlidXRlIGF0dHJpYnV0ZV9uYW1lIGZvbGxvd2luZyB0
aGUgY29uZGl0aW9ucyBzcGVjaWZpZWQgYnkgV2ViSURMCisgKgorICogYXNzZXJ0X3JlYWRvbmx5
KG9iamVjdCwgcHJvcGVydHlfbmFtZSwgZGVzY3JpcHRpb24pCisgKiAgIGFzc2VydCB0aGF0IHBy
b3BlcnR5IHByb3BlcnR5X25hbWUgb24gb2JqZWN0IGlzIHJlYWRvbmx5CisgKgorICogYXNzZXJ0
X3Rocm93cyhjb2RlLCBmdW5jLCBkZXNjcmlwdGlvbikKKyAqICAgY29kZSAtIHRoZSBleHBlY3Rl
ZCBleGNlcHRpb246CisgKiAgICAgbyBzdHJpbmc6IHRoZSB0aHJvd24gZXhjZXB0aW9uIG11c3Qg
YmUgYSBET01FeGNlcHRpb24gd2l0aCB0aGUgZ2l2ZW4KKyAqICAgICAgICAgICAgICAgbmFtZSwg
ZS5nLiwgIlRpbWVvdXRFcnJvciIgKGZvciBjb21wYXRpYmlsaXR5IHdpdGggZXhpc3RpbmcKKyAq
ICAgICAgICAgICAgICAgdGVzdHMsIGEgY29uc3RhbnQgaXMgYWxzbyBzdXBwb3J0ZWQsIGUuZy4s
ICJUSU1FT1VUX0VSUiIpCisgKiAgICAgbyBvYmplY3Q6IHRoZSB0aHJvd24gZXhjZXB0aW9uIG11
c3QgaGF2ZSBhIHByb3BlcnR5IGNhbGxlZCAibmFtZSIgdGhhdAorICogICAgICAgICAgICAgICBt
YXRjaGVzIGNvZGUubmFtZQorICogICAgIG8gbnVsbDogICBhbGxvdyBhbnkgZXhjZXB0aW9uIChp
biBnZW5lcmFsLCBvbmUgb2YgdGhlIG9wdGlvbnMgYWJvdmUKKyAqICAgICAgICAgICAgICAgc2hv
dWxkIGJlIHVzZWQpCisgKiAgIGZ1bmMgLSBhIGZ1bmN0aW9uIHRoYXQgc2hvdWxkIHRocm93Cisg
KgorICogYXNzZXJ0X3VucmVhY2hlZChkZXNjcmlwdGlvbikKKyAqICAgYXNzZXJ0cyBpZiBjYWxs
ZWQuIFVzZWQgdG8gZW5zdXJlIHRoYXQgc29tZSBjb2RlcGF0aCBpcyAqbm90KiB0YWtlbiBlLmcu
CisgKiAgIGFuIGV2ZW50IGRvZXMgbm90IGZpcmUuCisgKgorICogYXNzZXJ0X2FueShhc3NlcnRf
ZnVuYywgYWN0dWFsLCBleHBlY3RlZF9hcnJheSwgZXh0cmFfYXJnXzEsIC4uLiBleHRyYV9hcmdf
TikKKyAqICAgYXNzZXJ0cyB0aGF0IG9uZSBhc3NlcnRfZnVuYyhhY3R1YWwsIGV4cGVjdGVkX2Fy
cmF5X04sIGV4dHJhX2FyZzEsIC4uLiwgZXh0cmFfYXJnX04pCisgKiAgIGlzIHRydWUgZm9yIHNv
bWUgZXhwZWN0ZWRfYXJyYXlfTiBpbiBleHBlY3RlZF9hcnJheS4gVGhpcyBvbmx5IHdvcmtzIGZv
ciBhc3NlcnRfZnVuYworICogICB3aXRoIHNpZ25hdHVyZSBhc3NlcnRfZnVuYyhhY3R1YWwsIGV4
cGVjdGVkLCBhcmdzXzEsIC4uLiwgYXJnc19OKS4gTm90ZSB0aGF0IHRlc3RzCisgKiAgIHdpdGgg
bXVsdGlwbGUgYWxsb3dlZCBwYXNzIGNvbmRpdGlvbnMgYXJlIGJhZCBwcmFjdGljZSB1bmxlc3Mg
dGhlIHNwZWMgc3BlY2lmaWNhbGx5CisgKiAgIGFsbG93cyBtdWx0aXBsZSBiZWhhdmlvdXJzLiBU
ZXN0IGF1dGhvcnMgc2hvdWxkIG5vdCB1c2UgdGhpcyBtZXRob2Qgc2ltcGx5IHRvIGhpZGUKKyAq
ICAgVUEgYnVncy4KKyAqCisgKiBhc3NlcnRfZXhpc3RzKG9iamVjdCwgcHJvcGVydHlfbmFtZSwg
ZGVzY3JpcHRpb24pCisgKiAgICoqKiBkZXByZWNhdGVkICoqKgorICogICBhc3NlcnRzIHRoYXQg
b2JqZWN0IGhhcyBhbiBvd24gcHJvcGVydHkgcHJvcGVydHlfbmFtZQorICoKKyAqIGFzc2VydF9u
b3RfZXhpc3RzKG9iamVjdCwgcHJvcGVydHlfbmFtZSwgZGVzY3JpcHRpb24pCisgKiAgICoqKiBk
ZXByZWNhdGVkICoqKgorICogICBhc3NlcnQgdGhhdCBvYmplY3QgZG9lcyBub3QgaGF2ZSBvd24g
cHJvcGVydHkgcHJvcGVydHlfbmFtZQorICovCisKKyhmdW5jdGlvbiAoKQoreworICAgIHZhciBk
ZWJ1ZyA9IGZhbHNlOworICAgIC8vIGRlZmF1bHQgdGltZW91dCBpcyAxMCBzZWNvbmRzLCB0ZXN0
IGNhbiBvdmVycmlkZSBpZiBuZWVkZWQKKyAgICB2YXIgc2V0dGluZ3MgPSB7CisgICAgICAgIG91
dHB1dDp0cnVlLAorICAgICAgICBoYXJuZXNzX3RpbWVvdXQ6eworICAgICAgICAgICAgIm5vcm1h
bCI6MTAwMDAsCisgICAgICAgICAgICAibG9uZyI6NjAwMDAKKyAgICAgICAgfSwKKyAgICAgICAg
dGVzdF90aW1lb3V0Om51bGwKKyAgICB9OworCisgICAgdmFyIHhodG1sX25zID0gImh0dHA6Ly93
d3cudzMub3JnLzE5OTkveGh0bWwiOworCisgICAgLy8gc2NyaXB0X3ByZWZpeCBpcyB1c2VkIGJ5
IE91dHB1dC5wcm90b3R5cGUuc2hvd19yZXN1bHRzKCkgdG8gZmlndXJlIG91dAorICAgIC8vIHdo
ZXJlIHRvIGdldCB0ZXN0aGFybmVzcy5jc3MgZnJvbS4gIEl0J3MgZW5jbG9zZWQgaW4gYW4gZXh0
cmEgY2xvc3VyZSB0bworICAgIC8vIG5vdCBwb2xsdXRlIHRoZSBsaWJyYXJ5J3MgbmFtZXNwYWNl
IHdpdGggdmFyaWFibGVzIGxpa2UgInNyYyIuCisgICAgdmFyIHNjcmlwdF9wcmVmaXggPSBudWxs
OworICAgIChmdW5jdGlvbiAoKQorICAgIHsKKyAgICAgICAgdmFyIHNjcmlwdHMgPSBkb2N1bWVu
dC5nZXRFbGVtZW50c0J5VGFnTmFtZSgic2NyaXB0Iik7CisgICAgICAgIGZvciAodmFyIGkgPSAw
OyBpIDwgc2NyaXB0cy5sZW5ndGg7IGkrKykgeworICAgICAgICAgICAgaWYgKHNjcmlwdHNbaV0u
c3JjKSB7CisgICAgICAgICAgICAgICAgdmFyIHNyYyA9IHNjcmlwdHNbaV0uc3JjOworICAgICAg
ICAgICAgfSBlbHNlIGlmIChzY3JpcHRzW2ldLmhyZWYpIHsKKyAgICAgICAgICAgICAgICAvL1NW
RyBjYXNlCisgICAgICAgICAgICAgICAgdmFyIHNyYyA9IHNjcmlwdHNbaV0uaHJlZi5iYXNlVmFs
OworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAoc3JjICYmIHNyYy5zbGljZShzcmMu
bGVuZ3RoIC0gInRlc3RoYXJuZXNzLmpzIi5sZW5ndGgpID09PSAidGVzdGhhcm5lc3MuanMiKSB7
CisgICAgICAgICAgICAgICAgc2NyaXB0X3ByZWZpeCA9IHNyYy5zbGljZSgwLCBzcmMubGVuZ3Ro
IC0gInRlc3RoYXJuZXNzLmpzIi5sZW5ndGgpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICAgICAgfQorICAgICAgICB9CisgICAgfSkoKTsKKworICAgIC8qCisgICAgICogQVBJIGZ1
bmN0aW9ucworICAgICAqLworCisgICAgdmFyIG5hbWVfY291bnRlciA9IDA7CisgICAgZnVuY3Rp
b24gbmV4dF9kZWZhdWx0X25hbWUoKQorICAgIHsKKyAgICAgICAgLy9Eb24ndCB1c2UgZG9jdW1l
bnQudGl0bGUgdG8gd29yayBhcm91bmQgYW4gT3BlcmEgYnVnIGluIFhIVE1MIGRvY3VtZW50cwor
ICAgICAgICB2YXIgdGl0bGUgPSBkb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZSgidGl0bGUi
KVswXTsKKyAgICAgICAgdmFyIHByZWZpeCA9ICh0aXRsZSAmJiB0aXRsZS5maXJzdENoaWxkICYm
IHRpdGxlLmZpcnN0Q2hpbGQuZGF0YSkgfHwgIlVudGl0bGVkIjsKKyAgICAgICAgdmFyIHN1ZmZp
eCA9IG5hbWVfY291bnRlciA+IDAgPyAiICIgKyBuYW1lX2NvdW50ZXIgOiAiIjsKKyAgICAgICAg
bmFtZV9jb3VudGVyKys7CisgICAgICAgIHJldHVybiBwcmVmaXggKyBzdWZmaXg7CisgICAgfQor
CisgICAgZnVuY3Rpb24gdGVzdChmdW5jLCBuYW1lLCBwcm9wZXJ0aWVzKQorICAgIHsKKyAgICAg
ICAgdmFyIHRlc3RfbmFtZSA9IG5hbWUgPyBuYW1lIDogbmV4dF9kZWZhdWx0X25hbWUoKTsKKyAg
ICAgICAgcHJvcGVydGllcyA9IHByb3BlcnRpZXMgPyBwcm9wZXJ0aWVzIDoge307CisgICAgICAg
IHZhciB0ZXN0X29iaiA9IG5ldyBUZXN0KHRlc3RfbmFtZSwgcHJvcGVydGllcyk7CisgICAgICAg
IHRlc3Rfb2JqLnN0ZXAoZnVuYywgdGVzdF9vYmosIHRlc3Rfb2JqKTsKKyAgICAgICAgaWYgKHRl
c3Rfb2JqLnBoYXNlID09PSB0ZXN0X29iai5waGFzZXMuU1RBUlRFRCkgeworICAgICAgICAgICAg
dGVzdF9vYmouZG9uZSgpOworICAgICAgICB9CisgICAgfQorCisgICAgZnVuY3Rpb24gYXN5bmNf
dGVzdChmdW5jLCBuYW1lLCBwcm9wZXJ0aWVzKQorICAgIHsKKyAgICAgICAgaWYgKHR5cGVvZiBm
dW5jICE9PSAiZnVuY3Rpb24iKSB7CisgICAgICAgICAgICBwcm9wZXJ0aWVzID0gbmFtZTsKKyAg
ICAgICAgICAgIG5hbWUgPSBmdW5jOworICAgICAgICAgICAgZnVuYyA9IG51bGw7CisgICAgICAg
IH0KKyAgICAgICAgdmFyIHRlc3RfbmFtZSA9IG5hbWUgPyBuYW1lIDogbmV4dF9kZWZhdWx0X25h
bWUoKTsKKyAgICAgICAgcHJvcGVydGllcyA9IHByb3BlcnRpZXMgPyBwcm9wZXJ0aWVzIDoge307
CisgICAgICAgIHZhciB0ZXN0X29iaiA9IG5ldyBUZXN0KHRlc3RfbmFtZSwgcHJvcGVydGllcyk7
CisgICAgICAgIGlmIChmdW5jKSB7CisgICAgICAgICAgICB0ZXN0X29iai5zdGVwKGZ1bmMsIHRl
c3Rfb2JqLCB0ZXN0X29iaik7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHRlc3Rfb2JqOwor
ICAgIH0KKworICAgIGZ1bmN0aW9uIHNldHVwKGZ1bmNfb3JfcHJvcGVydGllcywgbWF5YmVfcHJv
cGVydGllcykKKyAgICB7CisgICAgICAgIHZhciBmdW5jID0gbnVsbDsKKyAgICAgICAgdmFyIHBy
b3BlcnRpZXMgPSB7fTsKKyAgICAgICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT09IDIpIHsKKyAg
ICAgICAgICAgIGZ1bmMgPSBmdW5jX29yX3Byb3BlcnRpZXM7CisgICAgICAgICAgICBwcm9wZXJ0
aWVzID0gbWF5YmVfcHJvcGVydGllczsKKyAgICAgICAgfSBlbHNlIGlmIChmdW5jX29yX3Byb3Bl
cnRpZXMgaW5zdGFuY2VvZiBGdW5jdGlvbikgeworICAgICAgICAgICAgZnVuYyA9IGZ1bmNfb3Jf
cHJvcGVydGllczsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHByb3BlcnRpZXMgPSBm
dW5jX29yX3Byb3BlcnRpZXM7CisgICAgICAgIH0KKyAgICAgICAgdGVzdHMuc2V0dXAoZnVuYywg
cHJvcGVydGllcyk7CisgICAgICAgIG91dHB1dC5zZXR1cChwcm9wZXJ0aWVzKTsKKyAgICB9CisK
KyAgICBmdW5jdGlvbiBkb25lKCkgeworICAgICAgICB0ZXN0cy5lbmRfd2FpdCgpOworICAgIH0K
KworICAgIGZ1bmN0aW9uIGdlbmVyYXRlX3Rlc3RzKGZ1bmMsIGFyZ3MsIHByb3BlcnRpZXMpIHsK
KyAgICAgICAgZm9yRWFjaChhcmdzLCBmdW5jdGlvbih4LCBpKQorICAgICAgICAgICAgICAgIHsK
KyAgICAgICAgICAgICAgICAgICAgdmFyIG5hbWUgPSB4WzBdOworICAgICAgICAgICAgICAgICAg
ICB0ZXN0KGZ1bmN0aW9uKCkKKyAgICAgICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGZ1bmMuYXBwbHkodGhpcywgeC5zbGljZSgxKSk7CisgICAgICAg
ICAgICAgICAgICAgICAgICAgfSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lLAorICAg
ICAgICAgICAgICAgICAgICAgICAgIEFycmF5LmlzQXJyYXkocHJvcGVydGllcykgPyBwcm9wZXJ0
aWVzW2ldIDogcHJvcGVydGllcyk7CisgICAgICAgICAgICAgICAgfSk7CisgICAgfQorCisgICAg
ZnVuY3Rpb24gb25fZXZlbnQob2JqZWN0LCBldmVudCwgY2FsbGJhY2spCisgICAgeworICAgICAg
ICBvYmplY3QuYWRkRXZlbnRMaXN0ZW5lcihldmVudCwgY2FsbGJhY2ssIGZhbHNlKTsKKyAgICB9
CisKKyAgICBleHBvc2UodGVzdCwgJ3Rlc3QnKTsKKyAgICBleHBvc2UoYXN5bmNfdGVzdCwgJ2Fz
eW5jX3Rlc3QnKTsKKyAgICBleHBvc2UoZ2VuZXJhdGVfdGVzdHMsICdnZW5lcmF0ZV90ZXN0cycp
OworICAgIGV4cG9zZShzZXR1cCwgJ3NldHVwJyk7CisgICAgZXhwb3NlKGRvbmUsICdkb25lJyk7
CisgICAgZXhwb3NlKG9uX2V2ZW50LCAnb25fZXZlbnQnKTsKKworICAgIC8qCisgICAgICogUmV0
dXJuIGEgc3RyaW5nIHRydW5jYXRlZCB0byB0aGUgZ2l2ZW4gbGVuZ3RoLCB3aXRoIC4uLiBhZGRl
ZCBhdCB0aGUgZW5kCisgICAgICogaWYgaXQgd2FzIGxvbmdlci4KKyAgICAgKi8KKyAgICBmdW5j
dGlvbiB0cnVuY2F0ZShzLCBsZW4pCisgICAgeworICAgICAgICBpZiAocy5sZW5ndGggPiBsZW4p
IHsKKyAgICAgICAgICAgIHJldHVybiBzLnN1YnN0cmluZygwLCBsZW4gLSAzKSArICIuLi4iOwor
ICAgICAgICB9CisgICAgICAgIHJldHVybiBzOworICAgIH0KKworICAgIC8qCisgICAgICogUmV0
dXJuIHRydWUgaWYgb2JqZWN0IGlzIHByb2JhYmx5IGEgTm9kZSBvYmplY3QuCisgICAgICovCisg
ICAgZnVuY3Rpb24gaXNfbm9kZShvYmplY3QpCisgICAgeworICAgICAgICAvLyBJIHVzZSBkdWNr
LXR5cGluZyBpbnN0ZWFkIG9mIGluc3RhbmNlb2YsIGJlY2F1c2UKKyAgICAgICAgLy8gaW5zdGFu
Y2VvZiBkb2Vzbid0IHdvcmsgaWYgdGhlIG5vZGUgaXMgZnJvbSBhbm90aGVyIHdpbmRvdyAobGlr
ZSBhbgorICAgICAgICAvLyBpZnJhbWUncyBjb250ZW50V2luZG93KToKKyAgICAgICAgLy8gaHR0
cDovL3d3dy53My5vcmcvQnVncy9QdWJsaWMvc2hvd19idWcuY2dpP2lkPTEyMjk1CisgICAgICAg
IGlmICgibm9kZVR5cGUiIGluIG9iamVjdAorICAgICAgICAmJiAibm9kZU5hbWUiIGluIG9iamVj
dAorICAgICAgICAmJiAibm9kZVZhbHVlIiBpbiBvYmplY3QKKyAgICAgICAgJiYgImNoaWxkTm9k
ZXMiIGluIG9iamVjdCkgeworICAgICAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgICAgICBvYmpl
Y3Qubm9kZVR5cGU7CisgICAgICAgICAgICB9IGNhdGNoIChlKSB7CisgICAgICAgICAgICAgICAg
Ly8gVGhlIG9iamVjdCBpcyBwcm9iYWJseSBOb2RlLnByb3RvdHlwZSBvciBhbm90aGVyIHByb3Rv
dHlwZQorICAgICAgICAgICAgICAgIC8vIG9iamVjdCB0aGF0IGluaGVyaXRzIGZyb20gaXQsIGFu
ZCBub3QgYSBOb2RlIGluc3RhbmNlLgorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICAvKgorICAgICAqIENvbnZlcnQgYSB2YWx1ZSB0
byBhIG5pY2UsIGh1bWFuLXJlYWRhYmxlIHN0cmluZworICAgICAqLworICAgIGZ1bmN0aW9uIGZv
cm1hdF92YWx1ZSh2YWwsIHNlZW4pCisgICAgeworICAgICAgICBpZiAoIXNlZW4pIHsKKyAgICAg
ICAgICAgIHNlZW4gPSBbXTsKKyAgICAgICAgfQorICAgICAgICBpZiAodHlwZW9mIHZhbCA9PT0g
Im9iamVjdCIgJiYgdmFsICE9PSBudWxsKSB7CisgICAgICAgICAgICBpZiAoc2Vlbi5pbmRleE9m
KHZhbCkgPj0gMCkgeworICAgICAgICAgICAgICAgIHJldHVybiAiWy4uLl0iOworICAgICAgICAg
ICAgfQorICAgICAgICAgICAgc2Vlbi5wdXNoKHZhbCk7CisgICAgICAgIH0KKyAgICAgICAgaWYg
KEFycmF5LmlzQXJyYXkodmFsKSkgeworICAgICAgICAgICAgcmV0dXJuICJbIiArIHZhbC5tYXAo
ZnVuY3Rpb24oeCkge3JldHVybiBmb3JtYXRfdmFsdWUoeCwgc2Vlbil9KS5qb2luKCIsICIpICsg
Il0iOworICAgICAgICB9CisKKyAgICAgICAgc3dpdGNoICh0eXBlb2YgdmFsKSB7CisgICAgICAg
IGNhc2UgInN0cmluZyI6CisgICAgICAgICAgICB2YWwgPSB2YWwucmVwbGFjZSgiXFwiLCAiXFxc
XCIpOworICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCAzMjsgaSsrKSB7CisgICAgICAg
ICAgICAgICAgdmFyIHJlcGxhY2UgPSAiXFwiOworICAgICAgICAgICAgICAgIHN3aXRjaCAoaSkg
eworICAgICAgICAgICAgICAgIGNhc2UgMDogcmVwbGFjZSArPSAiMCI7IGJyZWFrOworICAgICAg
ICAgICAgICAgIGNhc2UgMTogcmVwbGFjZSArPSAieDAxIjsgYnJlYWs7CisgICAgICAgICAgICAg
ICAgY2FzZSAyOiByZXBsYWNlICs9ICJ4MDIiOyBicmVhazsKKyAgICAgICAgICAgICAgICBjYXNl
IDM6IHJlcGxhY2UgKz0gIngwMyI7IGJyZWFrOworICAgICAgICAgICAgICAgIGNhc2UgNDogcmVw
bGFjZSArPSAieDA0IjsgYnJlYWs7CisgICAgICAgICAgICAgICAgY2FzZSA1OiByZXBsYWNlICs9
ICJ4MDUiOyBicmVhazsKKyAgICAgICAgICAgICAgICBjYXNlIDY6IHJlcGxhY2UgKz0gIngwNiI7
IGJyZWFrOworICAgICAgICAgICAgICAgIGNhc2UgNzogcmVwbGFjZSArPSAieDA3IjsgYnJlYWs7
CisgICAgICAgICAgICAgICAgY2FzZSA4OiByZXBsYWNlICs9ICJiIjsgYnJlYWs7CisgICAgICAg
ICAgICAgICAgY2FzZSA5OiByZXBsYWNlICs9ICJ0IjsgYnJlYWs7CisgICAgICAgICAgICAgICAg
Y2FzZSAxMDogcmVwbGFjZSArPSAibiI7IGJyZWFrOworICAgICAgICAgICAgICAgIGNhc2UgMTE6
IHJlcGxhY2UgKz0gInYiOyBicmVhazsKKyAgICAgICAgICAgICAgICBjYXNlIDEyOiByZXBsYWNl
ICs9ICJmIjsgYnJlYWs7CisgICAgICAgICAgICAgICAgY2FzZSAxMzogcmVwbGFjZSArPSAiciI7
IGJyZWFrOworICAgICAgICAgICAgICAgIGNhc2UgMTQ6IHJlcGxhY2UgKz0gIngwZSI7IGJyZWFr
OworICAgICAgICAgICAgICAgIGNhc2UgMTU6IHJlcGxhY2UgKz0gIngwZiI7IGJyZWFrOworICAg
ICAgICAgICAgICAgIGNhc2UgMTY6IHJlcGxhY2UgKz0gIngxMCI7IGJyZWFrOworICAgICAgICAg
ICAgICAgIGNhc2UgMTc6IHJlcGxhY2UgKz0gIngxMSI7IGJyZWFrOworICAgICAgICAgICAgICAg
IGNhc2UgMTg6IHJlcGxhY2UgKz0gIngxMiI7IGJyZWFrOworICAgICAgICAgICAgICAgIGNhc2Ug
MTk6IHJlcGxhY2UgKz0gIngxMyI7IGJyZWFrOworICAgICAgICAgICAgICAgIGNhc2UgMjA6IHJl
cGxhY2UgKz0gIngxNCI7IGJyZWFrOworICAgICAgICAgICAgICAgIGNhc2UgMjE6IHJlcGxhY2Ug
Kz0gIngxNSI7IGJyZWFrOworICAgICAgICAgICAgICAgIGNhc2UgMjI6IHJlcGxhY2UgKz0gIngx
NiI7IGJyZWFrOworICAgICAgICAgICAgICAgIGNhc2UgMjM6IHJlcGxhY2UgKz0gIngxNyI7IGJy
ZWFrOworICAgICAgICAgICAgICAgIGNhc2UgMjQ6IHJlcGxhY2UgKz0gIngxOCI7IGJyZWFrOwor
ICAgICAgICAgICAgICAgIGNhc2UgMjU6IHJlcGxhY2UgKz0gIngxOSI7IGJyZWFrOworICAgICAg
ICAgICAgICAgIGNhc2UgMjY6IHJlcGxhY2UgKz0gIngxYSI7IGJyZWFrOworICAgICAgICAgICAg
ICAgIGNhc2UgMjc6IHJlcGxhY2UgKz0gIngxYiI7IGJyZWFrOworICAgICAgICAgICAgICAgIGNh
c2UgMjg6IHJlcGxhY2UgKz0gIngxYyI7IGJyZWFrOworICAgICAgICAgICAgICAgIGNhc2UgMjk6
IHJlcGxhY2UgKz0gIngxZCI7IGJyZWFrOworICAgICAgICAgICAgICAgIGNhc2UgMzA6IHJlcGxh
Y2UgKz0gIngxZSI7IGJyZWFrOworICAgICAgICAgICAgICAgIGNhc2UgMzE6IHJlcGxhY2UgKz0g
IngxZiI7IGJyZWFrOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB2YWwgPSB2
YWwucmVwbGFjZShSZWdFeHAoU3RyaW5nLmZyb21DaGFyQ29kZShpKSwgImciKSwgcmVwbGFjZSk7
CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4gJyInICsgdmFsLnJlcGxhY2UoLyIv
ZywgJ1xcIicpICsgJyInOworICAgICAgICBjYXNlICJib29sZWFuIjoKKyAgICAgICAgY2FzZSAi
dW5kZWZpbmVkIjoKKyAgICAgICAgICAgIHJldHVybiBTdHJpbmcodmFsKTsKKyAgICAgICAgY2Fz
ZSAibnVtYmVyIjoKKyAgICAgICAgICAgIC8vIEluIEphdmFTY3JpcHQsIC0wID09PSAwIGFuZCBT
dHJpbmcoLTApID09ICIwIiwgc28gd2UgaGF2ZSB0bworICAgICAgICAgICAgLy8gc3BlY2lhbC1j
YXNlLgorICAgICAgICAgICAgaWYgKHZhbCA9PT0gLTAgJiYgMS92YWwgPT09IC1JbmZpbml0eSkg
eworICAgICAgICAgICAgICAgIHJldHVybiAiLTAiOworICAgICAgICAgICAgfQorICAgICAgICAg
ICAgcmV0dXJuIFN0cmluZyh2YWwpOworICAgICAgICBjYXNlICJvYmplY3QiOgorICAgICAgICAg
ICAgaWYgKHZhbCA9PT0gbnVsbCkgeworICAgICAgICAgICAgICAgIHJldHVybiAibnVsbCI7Cisg
ICAgICAgICAgICB9CisKKyAgICAgICAgICAgIC8vIFNwZWNpYWwtY2FzZSBOb2RlIG9iamVjdHMs
IHNpbmNlIHRob3NlIGNvbWUgdXAgYSBsb3QgaW4gbXkgdGVzdHMuICBJCisgICAgICAgICAgICAv
LyBpZ25vcmUgbmFtZXNwYWNlcy4KKyAgICAgICAgICAgIGlmIChpc19ub2RlKHZhbCkpIHsKKyAg
ICAgICAgICAgICAgICBzd2l0Y2ggKHZhbC5ub2RlVHlwZSkgeworICAgICAgICAgICAgICAgIGNh
c2UgTm9kZS5FTEVNRU5UX05PREU6CisgICAgICAgICAgICAgICAgICAgIHZhciByZXQgPSAiPCIg
KyB2YWwudGFnTmFtZS50b0xvd2VyQ2FzZSgpOworICAgICAgICAgICAgICAgICAgICBmb3IgKHZh
ciBpID0gMDsgaSA8IHZhbC5hdHRyaWJ1dGVzLmxlbmd0aDsgaSsrKSB7CisgICAgICAgICAgICAg
ICAgICAgICAgICByZXQgKz0gIiAiICsgdmFsLmF0dHJpYnV0ZXNbaV0ubmFtZSArICc9IicgKyB2
YWwuYXR0cmlidXRlc1tpXS52YWx1ZSArICciJzsKKyAgICAgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgICAgICAgICByZXQgKz0gIj4iICsgdmFsLmlubmVySFRNTCArICI8LyIgKyB2YWwu
dGFnTmFtZS50b0xvd2VyQ2FzZSgpICsgIj4iOworICAgICAgICAgICAgICAgICAgICByZXR1cm4g
IkVsZW1lbnQgbm9kZSAiICsgdHJ1bmNhdGUocmV0LCA2MCk7CisgICAgICAgICAgICAgICAgY2Fz
ZSBOb2RlLlRFWFRfTk9ERToKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuICdUZXh0IG5vZGUg
IicgKyB0cnVuY2F0ZSh2YWwuZGF0YSwgNjApICsgJyInOworICAgICAgICAgICAgICAgIGNhc2Ug
Tm9kZS5QUk9DRVNTSU5HX0lOU1RSVUNUSU9OX05PREU6CisgICAgICAgICAgICAgICAgICAgIHJl
dHVybiAiUHJvY2Vzc2luZ0luc3RydWN0aW9uIG5vZGUgd2l0aCB0YXJnZXQgIiArIGZvcm1hdF92
YWx1ZSh0cnVuY2F0ZSh2YWwudGFyZ2V0LCA2MCkpICsgIiBhbmQgZGF0YSAiICsgZm9ybWF0X3Zh
bHVlKHRydW5jYXRlKHZhbC5kYXRhLCA2MCkpOworICAgICAgICAgICAgICAgIGNhc2UgTm9kZS5D
T01NRU5UX05PREU6CisgICAgICAgICAgICAgICAgICAgIHJldHVybiAiQ29tbWVudCBub2RlIDwh
LS0iICsgdHJ1bmNhdGUodmFsLmRhdGEsIDYwKSArICItLT4iOworICAgICAgICAgICAgICAgIGNh
c2UgTm9kZS5ET0NVTUVOVF9OT0RFOgorICAgICAgICAgICAgICAgICAgICByZXR1cm4gIkRvY3Vt
ZW50IG5vZGUgd2l0aCAiICsgdmFsLmNoaWxkTm9kZXMubGVuZ3RoICsgKHZhbC5jaGlsZE5vZGVz
Lmxlbmd0aCA9PSAxID8gIiBjaGlsZCIgOiAiIGNoaWxkcmVuIik7CisgICAgICAgICAgICAgICAg
Y2FzZSBOb2RlLkRPQ1VNRU5UX1RZUEVfTk9ERToKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJu
ICJEb2N1bWVudFR5cGUgbm9kZSI7CisgICAgICAgICAgICAgICAgY2FzZSBOb2RlLkRPQ1VNRU5U
X0ZSQUdNRU5UX05PREU6CisgICAgICAgICAgICAgICAgICAgIHJldHVybiAiRG9jdW1lbnRGcmFn
bWVudCBub2RlIHdpdGggIiArIHZhbC5jaGlsZE5vZGVzLmxlbmd0aCArICh2YWwuY2hpbGROb2Rl
cy5sZW5ndGggPT0gMSA/ICIgY2hpbGQiIDogIiBjaGlsZHJlbiIpOworICAgICAgICAgICAgICAg
IGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgICAgIHJldHVybiAiTm9kZSBvYmplY3Qgb2YgdW5r
bm93biB0eXBlIjsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisKKyAgICAgICAg
ICAgIC8vIEZhbGwgdGhyb3VnaCB0byBkZWZhdWx0CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAg
ICAgICByZXR1cm4gdHlwZW9mIHZhbCArICcgIicgKyB0cnVuY2F0ZShTdHJpbmcodmFsKSwgNjAp
ICsgJyInOworICAgICAgICB9CisgICAgfQorICAgIGV4cG9zZShmb3JtYXRfdmFsdWUsICJmb3Jt
YXRfdmFsdWUiKTsKKworICAgIC8qCisgICAgICogQXNzZXJ0aW9ucworICAgICAqLworCisgICAg
ZnVuY3Rpb24gYXNzZXJ0X3RydWUoYWN0dWFsLCBkZXNjcmlwdGlvbikKKyAgICB7CisgICAgICAg
IGFzc2VydChhY3R1YWwgPT09IHRydWUsICJhc3NlcnRfdHJ1ZSIsIGRlc2NyaXB0aW9uLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZXhwZWN0ZWQgdHJ1ZSBnb3QgJHthY3R1YWx9
Iiwge2FjdHVhbDphY3R1YWx9KTsKKyAgICB9OworICAgIGV4cG9zZShhc3NlcnRfdHJ1ZSwgImFz
c2VydF90cnVlIik7CisKKyAgICBmdW5jdGlvbiBhc3NlcnRfZmFsc2UoYWN0dWFsLCBkZXNjcmlw
dGlvbikKKyAgICB7CisgICAgICAgIGFzc2VydChhY3R1YWwgPT09IGZhbHNlLCAiYXNzZXJ0X2Zh
bHNlIiwgZGVzY3JpcHRpb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZXhw
ZWN0ZWQgZmFsc2UgZ290ICR7YWN0dWFsfSIsIHthY3R1YWw6YWN0dWFsfSk7CisgICAgfTsKKyAg
ICBleHBvc2UoYXNzZXJ0X2ZhbHNlLCAiYXNzZXJ0X2ZhbHNlIik7CisKKyAgICBmdW5jdGlvbiBz
YW1lX3ZhbHVlKHgsIHkpIHsKKyAgICAgICAgaWYgKHkgIT09IHkpIHsKKyAgICAgICAgICAgIC8v
TmFOIGNhc2UKKyAgICAgICAgICAgIHJldHVybiB4ICE9PSB4OworICAgICAgICB9CisgICAgICAg
IGlmICh4ID09PSAwICYmIHkgPT09IDApIHsKKyAgICAgICAgICAgIC8vRGlzdGluZ3Vpc2ggKzAg
YW5kIC0wCisgICAgICAgICAgICByZXR1cm4gMS94ID09PSAxL3k7CisgICAgICAgIH0KKyAgICAg
ICAgcmV0dXJuIHggPT09IHk7CisgICAgfQorCisgICAgZnVuY3Rpb24gYXNzZXJ0X2VxdWFscyhh
Y3R1YWwsIGV4cGVjdGVkLCBkZXNjcmlwdGlvbikKKyAgICB7CisgICAgICAgICAvKgorICAgICAg
ICAgICogVGVzdCBpZiB0d28gcHJpbWl0aXZlcyBhcmUgZXF1YWwgb3IgdHdvIG9iamVjdHMKKyAg
ICAgICAgICAqIGFyZSB0aGUgc2FtZSBvYmplY3QKKyAgICAgICAgICAqLworICAgICAgICBpZiAo
dHlwZW9mIGFjdHVhbCAhPSB0eXBlb2YgZXhwZWN0ZWQpIHsKKyAgICAgICAgICAgIGFzc2VydChm
YWxzZSwgImFzc2VydF9lcXVhbHMiLCBkZXNjcmlwdGlvbiwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgImV4cGVjdGVkICgiICsgdHlwZW9mIGV4cGVjdGVkICsgIikgJHtleHBlY3RlZH0gYnV0
IGdvdCAoIiArIHR5cGVvZiBhY3R1YWwgKyAiKSAke2FjdHVhbH0iLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICB7ZXhwZWN0ZWQ6ZXhwZWN0ZWQsIGFjdHVhbDphY3R1YWx9KTsKKyAgICAgICAg
ICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICBhc3NlcnQoc2FtZV92YWx1ZShhY3R1YWws
IGV4cGVjdGVkKSwgImFzc2VydF9lcXVhbHMiLCBkZXNjcmlwdGlvbiwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJleHBlY3RlZCAke2V4cGVjdGVkfSBidXQg
Z290ICR7YWN0dWFsfSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB7ZXhwZWN0ZWQ6ZXhwZWN0ZWQsIGFjdHVhbDphY3R1YWx9KTsKKyAgICB9OworICAgIGV4
cG9zZShhc3NlcnRfZXF1YWxzLCAiYXNzZXJ0X2VxdWFscyIpOworCisgICAgZnVuY3Rpb24gYXNz
ZXJ0X25vdF9lcXVhbHMoYWN0dWFsLCBleHBlY3RlZCwgZGVzY3JpcHRpb24pCisgICAgeworICAg
ICAgICAgLyoKKyAgICAgICAgICAqIFRlc3QgaWYgdHdvIHByaW1pdGl2ZXMgYXJlIHVuZXF1YWwg
b3IgdHdvIG9iamVjdHMKKyAgICAgICAgICAqIGFyZSBkaWZmZXJlbnQgb2JqZWN0cworICAgICAg
ICAgICovCisgICAgICAgIGFzc2VydCghc2FtZV92YWx1ZShhY3R1YWwsIGV4cGVjdGVkKSwgImFz
c2VydF9ub3RfZXF1YWxzIiwgZGVzY3JpcHRpb24sCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgImdvdCBkaXNhbGxvd2VkIHZhbHVlICR7YWN0dWFsfSIsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge2FjdHVhbDphY3R1
YWx9KTsKKyAgICB9OworICAgIGV4cG9zZShhc3NlcnRfbm90X2VxdWFscywgImFzc2VydF9ub3Rf
ZXF1YWxzIik7CisKKyAgICBmdW5jdGlvbiBhc3NlcnRfaW5fYXJyYXkoYWN0dWFsLCBleHBlY3Rl
ZCwgZGVzY3JpcHRpb24pCisgICAgeworICAgICAgICBhc3NlcnQoZXhwZWN0ZWQuaW5kZXhPZihh
Y3R1YWwpICE9IC0xLCAiYXNzZXJ0X2luX2FycmF5IiwgZGVzY3JpcHRpb24sCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ2YWx1ZSAke2FjdHVhbH0gbm90
IGluIGFycmF5ICR7ZXhwZWN0ZWR9IiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAge2FjdHVhbDphY3R1YWwsIGV4cGVjdGVkOmV4cGVjdGVkfSk7CisgICAg
fQorICAgIGV4cG9zZShhc3NlcnRfaW5fYXJyYXksICJhc3NlcnRfaW5fYXJyYXkiKTsKKworICAg
IGZ1bmN0aW9uIGFzc2VydF9vYmplY3RfZXF1YWxzKGFjdHVhbCwgZXhwZWN0ZWQsIGRlc2NyaXB0
aW9uKQorICAgIHsKKyAgICAgICAgIC8vVGhpcyBuZWVkcyB0byBiZSBpbXByb3ZlZCBhIGdyZWF0
IGRlYWwKKyAgICAgICAgIGZ1bmN0aW9uIGNoZWNrX2VxdWFsKGFjdHVhbCwgZXhwZWN0ZWQsIHN0
YWNrKQorICAgICAgICAgeworICAgICAgICAgICAgIHN0YWNrLnB1c2goYWN0dWFsKTsKKworICAg
ICAgICAgICAgIHZhciBwOworICAgICAgICAgICAgIGZvciAocCBpbiBhY3R1YWwpIHsKKyAgICAg
ICAgICAgICAgICAgYXNzZXJ0KGV4cGVjdGVkLmhhc093blByb3BlcnR5KHApLCAiYXNzZXJ0X29i
amVjdF9lcXVhbHMiLCBkZXNjcmlwdGlvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAidW5leHBlY3RlZCBwcm9wZXJ0eSAke3B9Iiwge3A6cH0p
OworCisgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgYWN0dWFsW3BdID09PSAib2JqZWN0IiAm
JiBhY3R1YWxbcF0gIT09IG51bGwpIHsKKyAgICAgICAgICAgICAgICAgICAgIGlmIChzdGFjay5p
bmRleE9mKGFjdHVhbFtwXSkgPT09IC0xKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgY2hl
Y2tfZXF1YWwoYWN0dWFsW3BdLCBleHBlY3RlZFtwXSwgc3RhY2spOworICAgICAgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICAg
YXNzZXJ0KHNhbWVfdmFsdWUoYWN0dWFsW3BdLCBleHBlY3RlZFtwXSksICJhc3NlcnRfb2JqZWN0
X2VxdWFscyIsIGRlc2NyaXB0aW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICJwcm9wZXJ0eSAke3B9IGV4cGVjdGVkICR7ZXhwZWN0ZWR9
IGdvdCAke2FjdHVhbH0iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHtwOnAsIGV4cGVjdGVkOmV4cGVjdGVkLCBhY3R1YWw6YWN0dWFsfSk7
CisgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICB9CisgICAgICAgICAgICAgZm9yIChw
IGluIGV4cGVjdGVkKSB7CisgICAgICAgICAgICAgICAgIGFzc2VydChhY3R1YWwuaGFzT3duUHJv
cGVydHkocCksCisgICAgICAgICAgICAgICAgICAgICAgICAiYXNzZXJ0X29iamVjdF9lcXVhbHMi
LCBkZXNjcmlwdGlvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICJleHBlY3RlZCBwcm9wZXJ0
eSAke3B9IG1pc3NpbmciLCB7cDpwfSk7CisgICAgICAgICAgICAgfQorICAgICAgICAgICAgIHN0
YWNrLnBvcCgpOworICAgICAgICAgfQorICAgICAgICAgY2hlY2tfZXF1YWwoYWN0dWFsLCBleHBl
Y3RlZCwgW10pOworICAgIH07CisgICAgZXhwb3NlKGFzc2VydF9vYmplY3RfZXF1YWxzLCAiYXNz
ZXJ0X29iamVjdF9lcXVhbHMiKTsKKworICAgIGZ1bmN0aW9uIGFzc2VydF9hcnJheV9lcXVhbHMo
YWN0dWFsLCBleHBlY3RlZCwgZGVzY3JpcHRpb24pCisgICAgeworICAgICAgICBhc3NlcnQoYWN0
dWFsLmxlbmd0aCA9PT0gZXhwZWN0ZWQubGVuZ3RoLAorICAgICAgICAgICAgICAgImFzc2VydF9h
cnJheV9lcXVhbHMiLCBkZXNjcmlwdGlvbiwKKyAgICAgICAgICAgICAgICJsZW5ndGhzIGRpZmZl
ciwgZXhwZWN0ZWQgJHtleHBlY3RlZH0gZ290ICR7YWN0dWFsfSIsCisgICAgICAgICAgICAgICB7
ZXhwZWN0ZWQ6ZXhwZWN0ZWQubGVuZ3RoLCBhY3R1YWw6YWN0dWFsLmxlbmd0aH0pOworCisgICAg
ICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYWN0dWFsLmxlbmd0aDsgaSsrKSB7CisgICAgICAgICAg
ICBhc3NlcnQoYWN0dWFsLmhhc093blByb3BlcnR5KGkpID09PSBleHBlY3RlZC5oYXNPd25Qcm9w
ZXJ0eShpKSwKKyAgICAgICAgICAgICAgICAgICAiYXNzZXJ0X2FycmF5X2VxdWFscyIsIGRlc2Ny
aXB0aW9uLAorICAgICAgICAgICAgICAgICAgICJwcm9wZXJ0eSAke2l9LCBwcm9wZXJ0eSBleHBl
Y3RlZCB0byBiZSAkZXhwZWN0ZWQgYnV0IHdhcyAkYWN0dWFsIiwKKyAgICAgICAgICAgICAgICAg
ICB7aTppLCBleHBlY3RlZDpleHBlY3RlZC5oYXNPd25Qcm9wZXJ0eShpKSA/ICJwcmVzZW50IiA6
ICJtaXNzaW5nIiwKKyAgICAgICAgICAgICAgICAgICBhY3R1YWw6YWN0dWFsLmhhc093blByb3Bl
cnR5KGkpID8gInByZXNlbnQiIDogIm1pc3NpbmcifSk7CisgICAgICAgICAgICBhc3NlcnQoc2Ft
ZV92YWx1ZShleHBlY3RlZFtpXSwgYWN0dWFsW2ldKSwKKyAgICAgICAgICAgICAgICAgICAiYXNz
ZXJ0X2FycmF5X2VxdWFscyIsIGRlc2NyaXB0aW9uLAorICAgICAgICAgICAgICAgICAgICJwcm9w
ZXJ0eSAke2l9LCBleHBlY3RlZCAke2V4cGVjdGVkfSBidXQgZ290ICR7YWN0dWFsfSIsCisgICAg
ICAgICAgICAgICAgICAge2k6aSwgZXhwZWN0ZWQ6ZXhwZWN0ZWRbaV0sIGFjdHVhbDphY3R1YWxb
aV19KTsKKyAgICAgICAgfQorICAgIH0KKyAgICBleHBvc2UoYXNzZXJ0X2FycmF5X2VxdWFscywg
ImFzc2VydF9hcnJheV9lcXVhbHMiKTsKKworICAgIGZ1bmN0aW9uIGFzc2VydF9hcHByb3hfZXF1
YWxzKGFjdHVhbCwgZXhwZWN0ZWQsIGVwc2lsb24sIGRlc2NyaXB0aW9uKQorICAgIHsKKyAgICAg
ICAgLyoKKyAgICAgICAgICogVGVzdCBpZiB0d28gcHJpbWl0aXZlIG51bWJlcnMgYXJlIGVxdWFs
IHdpdGhpbmcgKy8tIGVwc2lsb24KKyAgICAgICAgICovCisgICAgICAgIGFzc2VydCh0eXBlb2Yg
YWN0dWFsID09PSAibnVtYmVyIiwKKyAgICAgICAgICAgICAgICJhc3NlcnRfYXBwcm94X2VxdWFs
cyIsIGRlc2NyaXB0aW9uLAorICAgICAgICAgICAgICAgImV4cGVjdGVkIGEgbnVtYmVyIGJ1dCBn
b3QgYSAke3R5cGVfYWN0dWFsfSIsCisgICAgICAgICAgICAgICB7dHlwZV9hY3R1YWw6dHlwZW9m
IGFjdHVhbH0pOworCisgICAgICAgIGFzc2VydChNYXRoLmFicyhhY3R1YWwgLSBleHBlY3RlZCkg
PD0gZXBzaWxvbiwKKyAgICAgICAgICAgICAgICJhc3NlcnRfYXBwcm94X2VxdWFscyIsIGRlc2Ny
aXB0aW9uLAorICAgICAgICAgICAgICAgImV4cGVjdGVkICR7ZXhwZWN0ZWR9ICsvLSAke2Vwc2ls
b259IGJ1dCBnb3QgJHthY3R1YWx9IiwKKyAgICAgICAgICAgICAgIHtleHBlY3RlZDpleHBlY3Rl
ZCwgYWN0dWFsOmFjdHVhbCwgZXBzaWxvbjplcHNpbG9ufSk7CisgICAgfTsKKyAgICBleHBvc2Uo
YXNzZXJ0X2FwcHJveF9lcXVhbHMsICJhc3NlcnRfYXBwcm94X2VxdWFscyIpOworCisgICAgZnVu
Y3Rpb24gYXNzZXJ0X2xlc3NfdGhhbihhY3R1YWwsIGV4cGVjdGVkLCBkZXNjcmlwdGlvbikKKyAg
ICB7CisgICAgICAgIC8qCisgICAgICAgICAqIFRlc3QgaWYgYSBwcmltaXRpdmUgbnVtYmVyIGlz
IGxlc3MgdGhhbiBhbm90aGVyCisgICAgICAgICAqLworICAgICAgICBhc3NlcnQodHlwZW9mIGFj
dHVhbCA9PT0gIm51bWJlciIsCisgICAgICAgICAgICAgICAiYXNzZXJ0X2xlc3NfdGhhbiIsIGRl
c2NyaXB0aW9uLAorICAgICAgICAgICAgICAgImV4cGVjdGVkIGEgbnVtYmVyIGJ1dCBnb3QgYSAk
e3R5cGVfYWN0dWFsfSIsCisgICAgICAgICAgICAgICB7dHlwZV9hY3R1YWw6dHlwZW9mIGFjdHVh
bH0pOworCisgICAgICAgIGFzc2VydChhY3R1YWwgPCBleHBlY3RlZCwKKyAgICAgICAgICAgICAg
ICJhc3NlcnRfbGVzc190aGFuIiwgZGVzY3JpcHRpb24sCisgICAgICAgICAgICAgICAiZXhwZWN0
ZWQgYSBudW1iZXIgbGVzcyB0aGFuICR7ZXhwZWN0ZWR9IGJ1dCBnb3QgJHthY3R1YWx9IiwKKyAg
ICAgICAgICAgICAgIHtleHBlY3RlZDpleHBlY3RlZCwgYWN0dWFsOmFjdHVhbH0pOworICAgIH07
CisgICAgZXhwb3NlKGFzc2VydF9sZXNzX3RoYW4sICJhc3NlcnRfbGVzc190aGFuIik7CisKKyAg
ICBmdW5jdGlvbiBhc3NlcnRfZ3JlYXRlcl90aGFuKGFjdHVhbCwgZXhwZWN0ZWQsIGRlc2NyaXB0
aW9uKQorICAgIHsKKyAgICAgICAgLyoKKyAgICAgICAgICogVGVzdCBpZiBhIHByaW1pdGl2ZSBu
dW1iZXIgaXMgZ3JlYXRlciB0aGFuIGFub3RoZXIKKyAgICAgICAgICovCisgICAgICAgIGFzc2Vy
dCh0eXBlb2YgYWN0dWFsID09PSAibnVtYmVyIiwKKyAgICAgICAgICAgICAgICJhc3NlcnRfZ3Jl
YXRlcl90aGFuIiwgZGVzY3JpcHRpb24sCisgICAgICAgICAgICAgICAiZXhwZWN0ZWQgYSBudW1i
ZXIgYnV0IGdvdCBhICR7dHlwZV9hY3R1YWx9IiwKKyAgICAgICAgICAgICAgIHt0eXBlX2FjdHVh
bDp0eXBlb2YgYWN0dWFsfSk7CisKKyAgICAgICAgYXNzZXJ0KGFjdHVhbCA+IGV4cGVjdGVkLAor
ICAgICAgICAgICAgICAgImFzc2VydF9ncmVhdGVyX3RoYW4iLCBkZXNjcmlwdGlvbiwKKyAgICAg
ICAgICAgICAgICJleHBlY3RlZCBhIG51bWJlciBncmVhdGVyIHRoYW4gJHtleHBlY3RlZH0gYnV0
IGdvdCAke2FjdHVhbH0iLAorICAgICAgICAgICAgICAge2V4cGVjdGVkOmV4cGVjdGVkLCBhY3R1
YWw6YWN0dWFsfSk7CisgICAgfTsKKyAgICBleHBvc2UoYXNzZXJ0X2dyZWF0ZXJfdGhhbiwgImFz
c2VydF9ncmVhdGVyX3RoYW4iKTsKKworICAgIGZ1bmN0aW9uIGFzc2VydF9sZXNzX3RoYW5fZXF1
YWwoYWN0dWFsLCBleHBlY3RlZCwgZGVzY3JpcHRpb24pCisgICAgeworICAgICAgICAvKgorICAg
ICAgICAgKiBUZXN0IGlmIGEgcHJpbWl0aXZlIG51bWJlciBpcyBsZXNzIHRoYW4gb3IgZXF1YWwg
dG8gYW5vdGhlcgorICAgICAgICAgKi8KKyAgICAgICAgYXNzZXJ0KHR5cGVvZiBhY3R1YWwgPT09
ICJudW1iZXIiLAorICAgICAgICAgICAgICAgImFzc2VydF9sZXNzX3RoYW5fZXF1YWwiLCBkZXNj
cmlwdGlvbiwKKyAgICAgICAgICAgICAgICJleHBlY3RlZCBhIG51bWJlciBidXQgZ290IGEgJHt0
eXBlX2FjdHVhbH0iLAorICAgICAgICAgICAgICAge3R5cGVfYWN0dWFsOnR5cGVvZiBhY3R1YWx9
KTsKKworICAgICAgICBhc3NlcnQoYWN0dWFsIDw9IGV4cGVjdGVkLAorICAgICAgICAgICAgICAg
ImFzc2VydF9sZXNzX3RoYW4iLCBkZXNjcmlwdGlvbiwKKyAgICAgICAgICAgICAgICJleHBlY3Rl
ZCBhIG51bWJlciBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gJHtleHBlY3RlZH0gYnV0IGdvdCAke2Fj
dHVhbH0iLAorICAgICAgICAgICAgICAge2V4cGVjdGVkOmV4cGVjdGVkLCBhY3R1YWw6YWN0dWFs
fSk7CisgICAgfTsKKyAgICBleHBvc2UoYXNzZXJ0X2xlc3NfdGhhbl9lcXVhbCwgImFzc2VydF9s
ZXNzX3RoYW5fZXF1YWwiKTsKKworICAgIGZ1bmN0aW9uIGFzc2VydF9ncmVhdGVyX3RoYW5fZXF1
YWwoYWN0dWFsLCBleHBlY3RlZCwgZGVzY3JpcHRpb24pCisgICAgeworICAgICAgICAvKgorICAg
ICAgICAgKiBUZXN0IGlmIGEgcHJpbWl0aXZlIG51bWJlciBpcyBncmVhdGVyIHRoYW4gb3IgZXF1
YWwgdG8gYW5vdGhlcgorICAgICAgICAgKi8KKyAgICAgICAgYXNzZXJ0KHR5cGVvZiBhY3R1YWwg
PT09ICJudW1iZXIiLAorICAgICAgICAgICAgICAgImFzc2VydF9ncmVhdGVyX3RoYW5fZXF1YWwi
LCBkZXNjcmlwdGlvbiwKKyAgICAgICAgICAgICAgICJleHBlY3RlZCBhIG51bWJlciBidXQgZ290
IGEgJHt0eXBlX2FjdHVhbH0iLAorICAgICAgICAgICAgICAge3R5cGVfYWN0dWFsOnR5cGVvZiBh
Y3R1YWx9KTsKKworICAgICAgICBhc3NlcnQoYWN0dWFsID49IGV4cGVjdGVkLAorICAgICAgICAg
ICAgICAgImFzc2VydF9ncmVhdGVyX3RoYW5fZXF1YWwiLCBkZXNjcmlwdGlvbiwKKyAgICAgICAg
ICAgICAgICJleHBlY3RlZCBhIG51bWJlciBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gJHtleHBl
Y3RlZH0gYnV0IGdvdCAke2FjdHVhbH0iLAorICAgICAgICAgICAgICAge2V4cGVjdGVkOmV4cGVj
dGVkLCBhY3R1YWw6YWN0dWFsfSk7CisgICAgfTsKKyAgICBleHBvc2UoYXNzZXJ0X2dyZWF0ZXJf
dGhhbl9lcXVhbCwgImFzc2VydF9ncmVhdGVyX3RoYW5fZXF1YWwiKTsKKworICAgIGZ1bmN0aW9u
IGFzc2VydF9yZWdleHBfbWF0Y2goYWN0dWFsLCBleHBlY3RlZCwgZGVzY3JpcHRpb24pIHsKKyAg
ICAgICAgLyoKKyAgICAgICAgICogVGVzdCBpZiBhIHN0cmluZyAoYWN0dWFsKSBtYXRjaGVzIGEg
cmVnZXhwIChleHBlY3RlZCkKKyAgICAgICAgICovCisgICAgICAgIGFzc2VydChleHBlY3RlZC50
ZXN0KGFjdHVhbCksCisgICAgICAgICAgICAgICAiYXNzZXJ0X3JlZ2V4cF9tYXRjaCIsIGRlc2Ny
aXB0aW9uLAorICAgICAgICAgICAgICAgImV4cGVjdGVkICR7ZXhwZWN0ZWR9IGJ1dCBnb3QgJHth
Y3R1YWx9IiwKKyAgICAgICAgICAgICAgIHtleHBlY3RlZDpleHBlY3RlZCwgYWN0dWFsOmFjdHVh
bH0pOworICAgIH0KKyAgICBleHBvc2UoYXNzZXJ0X3JlZ2V4cF9tYXRjaCwgImFzc2VydF9yZWdl
eHBfbWF0Y2giKTsKKworICAgIGZ1bmN0aW9uIGFzc2VydF9jbGFzc19zdHJpbmcob2JqZWN0LCBj
bGFzc19zdHJpbmcsIGRlc2NyaXB0aW9uKSB7CisgICAgICAgIGFzc2VydF9lcXVhbHMoe30udG9T
dHJpbmcuY2FsbChvYmplY3QpLCAiW29iamVjdCAiICsgY2xhc3Nfc3RyaW5nICsgIl0iLAorICAg
ICAgICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uKTsKKyAgICB9CisgICAgZXhwb3NlKGFzc2Vy
dF9jbGFzc19zdHJpbmcsICJhc3NlcnRfY2xhc3Nfc3RyaW5nIik7CisKKworICAgIGZ1bmN0aW9u
IF9hc3NlcnRfb3duX3Byb3BlcnR5KG5hbWUpIHsKKyAgICAgICAgcmV0dXJuIGZ1bmN0aW9uKG9i
amVjdCwgcHJvcGVydHlfbmFtZSwgZGVzY3JpcHRpb24pCisgICAgICAgIHsKKyAgICAgICAgICAg
IGFzc2VydChvYmplY3QuaGFzT3duUHJvcGVydHkocHJvcGVydHlfbmFtZSksCisgICAgICAgICAg
ICAgICAgICAgbmFtZSwgZGVzY3JpcHRpb24sCisgICAgICAgICAgICAgICAgICAgImV4cGVjdGVk
IHByb3BlcnR5ICR7cH0gbWlzc2luZyIsIHtwOnByb3BlcnR5X25hbWV9KTsKKyAgICAgICAgfTsK
KyAgICB9CisgICAgZXhwb3NlKF9hc3NlcnRfb3duX3Byb3BlcnR5KCJhc3NlcnRfZXhpc3RzIiks
ICJhc3NlcnRfZXhpc3RzIik7CisgICAgZXhwb3NlKF9hc3NlcnRfb3duX3Byb3BlcnR5KCJhc3Nl
cnRfb3duX3Byb3BlcnR5IiksICJhc3NlcnRfb3duX3Byb3BlcnR5Iik7CisKKyAgICBmdW5jdGlv
biBhc3NlcnRfbm90X2V4aXN0cyhvYmplY3QsIHByb3BlcnR5X25hbWUsIGRlc2NyaXB0aW9uKQor
ICAgIHsKKyAgICAgICAgYXNzZXJ0KCFvYmplY3QuaGFzT3duUHJvcGVydHkocHJvcGVydHlfbmFt
ZSksCisgICAgICAgICAgICAgICAiYXNzZXJ0X25vdF9leGlzdHMiLCBkZXNjcmlwdGlvbiwKKyAg
ICAgICAgICAgICAgICJ1bmV4cGVjdGVkIHByb3BlcnR5ICR7cH0gZm91bmQiLCB7cDpwcm9wZXJ0
eV9uYW1lfSk7CisgICAgfTsKKyAgICBleHBvc2UoYXNzZXJ0X25vdF9leGlzdHMsICJhc3NlcnRf
bm90X2V4aXN0cyIpOworCisgICAgZnVuY3Rpb24gX2Fzc2VydF9pbmhlcml0cyhuYW1lKSB7Cisg
ICAgICAgIHJldHVybiBmdW5jdGlvbiAob2JqZWN0LCBwcm9wZXJ0eV9uYW1lLCBkZXNjcmlwdGlv
bikKKyAgICAgICAgeworICAgICAgICAgICAgYXNzZXJ0KHR5cGVvZiBvYmplY3QgPT09ICJvYmpl
Y3QiLAorICAgICAgICAgICAgICAgICAgIG5hbWUsIGRlc2NyaXB0aW9uLAorICAgICAgICAgICAg
ICAgICAgICJwcm92aWRlZCB2YWx1ZSBpcyBub3QgYW4gb2JqZWN0Iik7CisKKyAgICAgICAgICAg
IGFzc2VydCgiaGFzT3duUHJvcGVydHkiIGluIG9iamVjdCwKKyAgICAgICAgICAgICAgICAgICBu
YW1lLCBkZXNjcmlwdGlvbiwKKyAgICAgICAgICAgICAgICAgICAicHJvdmlkZWQgdmFsdWUgaXMg
YW4gb2JqZWN0IGJ1dCBoYXMgbm8gaGFzT3duUHJvcGVydHkgbWV0aG9kIik7CisKKyAgICAgICAg
ICAgIGFzc2VydCghb2JqZWN0Lmhhc093blByb3BlcnR5KHByb3BlcnR5X25hbWUpLAorICAgICAg
ICAgICAgICAgICAgIG5hbWUsIGRlc2NyaXB0aW9uLAorICAgICAgICAgICAgICAgICAgICJwcm9w
ZXJ0eSAke3B9IGZvdW5kIG9uIG9iamVjdCBleHBlY3RlZCBpbiBwcm90b3R5cGUgY2hhaW4iLAor
ICAgICAgICAgICAgICAgICAgIHtwOnByb3BlcnR5X25hbWV9KTsKKworICAgICAgICAgICAgYXNz
ZXJ0KHByb3BlcnR5X25hbWUgaW4gb2JqZWN0LAorICAgICAgICAgICAgICAgICAgIG5hbWUsIGRl
c2NyaXB0aW9uLAorICAgICAgICAgICAgICAgICAgICJwcm9wZXJ0eSAke3B9IG5vdCBmb3VuZCBp
biBwcm90b3R5cGUgY2hhaW4iLAorICAgICAgICAgICAgICAgICAgIHtwOnByb3BlcnR5X25hbWV9
KTsKKyAgICAgICAgfTsKKyAgICB9CisgICAgZXhwb3NlKF9hc3NlcnRfaW5oZXJpdHMoImFzc2Vy
dF9pbmhlcml0cyIpLCAiYXNzZXJ0X2luaGVyaXRzIik7CisgICAgZXhwb3NlKF9hc3NlcnRfaW5o
ZXJpdHMoImFzc2VydF9pZGxfYXR0cmlidXRlIiksICJhc3NlcnRfaWRsX2F0dHJpYnV0ZSIpOwor
CisgICAgZnVuY3Rpb24gYXNzZXJ0X3JlYWRvbmx5KG9iamVjdCwgcHJvcGVydHlfbmFtZSwgZGVz
Y3JpcHRpb24pCisgICAgeworICAgICAgICAgdmFyIGluaXRpYWxfdmFsdWUgPSBvYmplY3RbcHJv
cGVydHlfbmFtZV07CisgICAgICAgICB0cnkgeworICAgICAgICAgICAgIC8vTm90ZSB0aGF0IHRo
aXMgY2FuIGhhdmUgc2lkZSBlZmZlY3RzIGluIHRoZSBjYXNlIHdoZXJlCisgICAgICAgICAgICAg
Ly90aGUgcHJvcGVydHkgaGFzIFB1dEZvcndhcmRzCisgICAgICAgICAgICAgb2JqZWN0W3Byb3Bl
cnR5X25hbWVdID0gaW5pdGlhbF92YWx1ZSArICJhIjsgLy9YWFggdXNlIHNvbWUgb3RoZXIgdmFs
dWUgaGVyZT8KKyAgICAgICAgICAgICBhc3NlcnQoc2FtZV92YWx1ZShvYmplY3RbcHJvcGVydHlf
bmFtZV0sIGluaXRpYWxfdmFsdWUpLAorICAgICAgICAgICAgICAgICAgICAiYXNzZXJ0X3JlYWRv
bmx5IiwgZGVzY3JpcHRpb24sCisgICAgICAgICAgICAgICAgICAgICJjaGFuZ2luZyBwcm9wZXJ0
eSAke3B9IHN1Y2NlZWRlZCIsCisgICAgICAgICAgICAgICAgICAgIHtwOnByb3BlcnR5X25hbWV9
KTsKKyAgICAgICAgIH0gZmluYWxseSB7CisgICAgICAgICAgICAgb2JqZWN0W3Byb3BlcnR5X25h
bWVdID0gaW5pdGlhbF92YWx1ZTsKKyAgICAgICAgIH0KKyAgICB9OworICAgIGV4cG9zZShhc3Nl
cnRfcmVhZG9ubHksICJhc3NlcnRfcmVhZG9ubHkiKTsKKworICAgIGZ1bmN0aW9uIGFzc2VydF90
aHJvd3MoY29kZSwgZnVuYywgZGVzY3JpcHRpb24pCisgICAgeworICAgICAgICB0cnkgeworICAg
ICAgICAgICAgZnVuYy5jYWxsKHRoaXMpOworICAgICAgICAgICAgYXNzZXJ0KGZhbHNlLCAiYXNz
ZXJ0X3Rocm93cyIsIGRlc2NyaXB0aW9uLAorICAgICAgICAgICAgICAgICAgICIke2Z1bmN9IGRp
ZCBub3QgdGhyb3ciLCB7ZnVuYzpmdW5jfSk7CisgICAgICAgIH0gY2F0Y2ggKGUpIHsKKyAgICAg
ICAgICAgIGlmIChlIGluc3RhbmNlb2YgQXNzZXJ0aW9uRXJyb3IpIHsKKyAgICAgICAgICAgICAg
ICB0aHJvdyBlOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKGNvZGUgPT09IG51bGwp
IHsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisgICAgICAgICAgICBp
ZiAodHlwZW9mIGNvZGUgPT09ICJvYmplY3QiKSB7CisgICAgICAgICAgICAgICAgYXNzZXJ0KHR5
cGVvZiBlID09ICJvYmplY3QiICYmICJuYW1lIiBpbiBlICYmIGUubmFtZSA9PSBjb2RlLm5hbWUs
CisgICAgICAgICAgICAgICAgICAgICAgICJhc3NlcnRfdGhyb3dzIiwgZGVzY3JpcHRpb24sCisg
ICAgICAgICAgICAgICAgICAgICAgICIke2Z1bmN9IHRocmV3ICR7YWN0dWFsfSAoJHthY3R1YWxf
bmFtZX0pIGV4cGVjdGVkICR7ZXhwZWN0ZWR9ICgke2V4cGVjdGVkX25hbWV9KSIsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7ZnVuYzpmdW5jLCBhY3R1YWw6ZSwgYWN0dWFs
X25hbWU6ZS5uYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4cGVj
dGVkOmNvZGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhwZWN0ZWRf
bmFtZTpjb2RlLm5hbWV9KTsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9
CisKKyAgICAgICAgICAgIHZhciBjb2RlX25hbWVfbWFwID0geworICAgICAgICAgICAgICAgIElO
REVYX1NJWkVfRVJSOiAnSW5kZXhTaXplRXJyb3InLAorICAgICAgICAgICAgICAgIEhJRVJBUkNI
WV9SRVFVRVNUX0VSUjogJ0hpZXJhcmNoeVJlcXVlc3RFcnJvcicsCisgICAgICAgICAgICAgICAg
V1JPTkdfRE9DVU1FTlRfRVJSOiAnV3JvbmdEb2N1bWVudEVycm9yJywKKyAgICAgICAgICAgICAg
ICBJTlZBTElEX0NIQVJBQ1RFUl9FUlI6ICdJbnZhbGlkQ2hhcmFjdGVyRXJyb3InLAorICAgICAg
ICAgICAgICAgIE5PX01PRElGSUNBVElPTl9BTExPV0VEX0VSUjogJ05vTW9kaWZpY2F0aW9uQWxs
b3dlZEVycm9yJywKKyAgICAgICAgICAgICAgICBOT1RfRk9VTkRfRVJSOiAnTm90Rm91bmRFcnJv
cicsCisgICAgICAgICAgICAgICAgTk9UX1NVUFBPUlRFRF9FUlI6ICdOb3RTdXBwb3J0ZWRFcnJv
cicsCisgICAgICAgICAgICAgICAgSU5WQUxJRF9TVEFURV9FUlI6ICdJbnZhbGlkU3RhdGVFcnJv
cicsCisgICAgICAgICAgICAgICAgU1lOVEFYX0VSUjogJ1N5bnRheEVycm9yJywKKyAgICAgICAg
ICAgICAgICBJTlZBTElEX01PRElGSUNBVElPTl9FUlI6ICdJbnZhbGlkTW9kaWZpY2F0aW9uRXJy
b3InLAorICAgICAgICAgICAgICAgIE5BTUVTUEFDRV9FUlI6ICdOYW1lc3BhY2VFcnJvcicsCisg
ICAgICAgICAgICAgICAgSU5WQUxJRF9BQ0NFU1NfRVJSOiAnSW52YWxpZEFjY2Vzc0Vycm9yJywK
KyAgICAgICAgICAgICAgICBUWVBFX01JU01BVENIX0VSUjogJ1R5cGVNaXNtYXRjaEVycm9yJywK
KyAgICAgICAgICAgICAgICBTRUNVUklUWV9FUlI6ICdTZWN1cml0eUVycm9yJywKKyAgICAgICAg
ICAgICAgICBORVRXT1JLX0VSUjogJ05ldHdvcmtFcnJvcicsCisgICAgICAgICAgICAgICAgQUJP
UlRfRVJSOiAnQWJvcnRFcnJvcicsCisgICAgICAgICAgICAgICAgVVJMX01JU01BVENIX0VSUjog
J1VSTE1pc21hdGNoRXJyb3InLAorICAgICAgICAgICAgICAgIFFVT1RBX0VYQ0VFREVEX0VSUjog
J1F1b3RhRXhjZWVkZWRFcnJvcicsCisgICAgICAgICAgICAgICAgVElNRU9VVF9FUlI6ICdUaW1l
b3V0RXJyb3InLAorICAgICAgICAgICAgICAgIElOVkFMSURfTk9ERV9UWVBFX0VSUjogJ0ludmFs
aWROb2RlVHlwZUVycm9yJywKKyAgICAgICAgICAgICAgICBEQVRBX0NMT05FX0VSUjogJ0RhdGFD
bG9uZUVycm9yJworICAgICAgICAgICAgfTsKKworICAgICAgICAgICAgdmFyIG5hbWUgPSBjb2Rl
IGluIGNvZGVfbmFtZV9tYXAgPyBjb2RlX25hbWVfbWFwW2NvZGVdIDogY29kZTsKKworICAgICAg
ICAgICAgdmFyIG5hbWVfY29kZV9tYXAgPSB7CisgICAgICAgICAgICAgICAgSW5kZXhTaXplRXJy
b3I6IDEsCisgICAgICAgICAgICAgICAgSGllcmFyY2h5UmVxdWVzdEVycm9yOiAzLAorICAgICAg
ICAgICAgICAgIFdyb25nRG9jdW1lbnRFcnJvcjogNCwKKyAgICAgICAgICAgICAgICBJbnZhbGlk
Q2hhcmFjdGVyRXJyb3I6IDUsCisgICAgICAgICAgICAgICAgTm9Nb2RpZmljYXRpb25BbGxvd2Vk
RXJyb3I6IDcsCisgICAgICAgICAgICAgICAgTm90Rm91bmRFcnJvcjogOCwKKyAgICAgICAgICAg
ICAgICBOb3RTdXBwb3J0ZWRFcnJvcjogOSwKKyAgICAgICAgICAgICAgICBJbnZhbGlkU3RhdGVF
cnJvcjogMTEsCisgICAgICAgICAgICAgICAgU3ludGF4RXJyb3I6IDEyLAorICAgICAgICAgICAg
ICAgIEludmFsaWRNb2RpZmljYXRpb25FcnJvcjogMTMsCisgICAgICAgICAgICAgICAgTmFtZXNw
YWNlRXJyb3I6IDE0LAorICAgICAgICAgICAgICAgIEludmFsaWRBY2Nlc3NFcnJvcjogMTUsCisg
ICAgICAgICAgICAgICAgVHlwZU1pc21hdGNoRXJyb3I6IDE3LAorICAgICAgICAgICAgICAgIFNl
Y3VyaXR5RXJyb3I6IDE4LAorICAgICAgICAgICAgICAgIE5ldHdvcmtFcnJvcjogMTksCisgICAg
ICAgICAgICAgICAgQWJvcnRFcnJvcjogMjAsCisgICAgICAgICAgICAgICAgVVJMTWlzbWF0Y2hF
cnJvcjogMjEsCisgICAgICAgICAgICAgICAgUXVvdGFFeGNlZWRlZEVycm9yOiAyMiwKKyAgICAg
ICAgICAgICAgICBUaW1lb3V0RXJyb3I6IDIzLAorICAgICAgICAgICAgICAgIEludmFsaWROb2Rl
VHlwZUVycm9yOiAyNCwKKyAgICAgICAgICAgICAgICBEYXRhQ2xvbmVFcnJvcjogMjUsCisKKyAg
ICAgICAgICAgICAgICBVbmtub3duRXJyb3I6IDAsCisgICAgICAgICAgICAgICAgQ29uc3RyYWlu
dEVycm9yOiAwLAorICAgICAgICAgICAgICAgIERhdGFFcnJvcjogMCwKKyAgICAgICAgICAgICAg
ICBUcmFuc2FjdGlvbkluYWN0aXZlRXJyb3I6IDAsCisgICAgICAgICAgICAgICAgUmVhZE9ubHlF
cnJvcjogMCwKKyAgICAgICAgICAgICAgICBWZXJzaW9uRXJyb3I6IDAKKyAgICAgICAgICAgIH07
CisKKyAgICAgICAgICAgIGlmICghKG5hbWUgaW4gbmFtZV9jb2RlX21hcCkpIHsKKyAgICAgICAg
ICAgICAgICB0aHJvdyBuZXcgQXNzZXJ0aW9uRXJyb3IoJ1Rlc3QgYnVnOiB1bnJlY29nbml6ZWQg
RE9NRXhjZXB0aW9uIGNvZGUgIicgKyBjb2RlICsgJyIgcGFzc2VkIHRvIGFzc2VydF90aHJvd3Mo
KScpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICB2YXIgcmVxdWlyZWRfcHJvcHMgPSB7
IGNvZGU6IG5hbWVfY29kZV9tYXBbbmFtZV0gfTsKKworICAgICAgICAgICAgaWYgKHJlcXVpcmVk
X3Byb3BzLmNvZGUgPT09IDAKKyAgICAgICAgICAgIHx8ICgibmFtZSIgaW4gZSAmJiBlLm5hbWUg
IT09IGUubmFtZS50b1VwcGVyQ2FzZSgpICYmIGUubmFtZSAhPT0gIkRPTUV4Y2VwdGlvbiIpKSB7
CisgICAgICAgICAgICAgICAgLy8gTmV3IHN0eWxlIGV4Y2VwdGlvbjogYWxzbyB0ZXN0IHRoZSBu
YW1lIHByb3BlcnR5LgorICAgICAgICAgICAgICAgIHJlcXVpcmVkX3Byb3BzLm5hbWUgPSBuYW1l
OworICAgICAgICAgICAgfQorCisgICAgICAgICAgICAvL1dlJ2QgbGlrZSB0byB0ZXN0IHRoYXQg
ZSBpbnN0YW5jZW9mIHRoZSBhcHByb3ByaWF0ZSBpbnRlcmZhY2UsCisgICAgICAgICAgICAvL2J1
dCB3ZSBjYW4ndCwgYmVjYXVzZSB3ZSBkb24ndCBrbm93IHdoYXQgd2luZG93IGl0IHdhcyBjcmVh
dGVkCisgICAgICAgICAgICAvL2luLiAgSXQgbWlnaHQgYmUgYW4gaW5zdGFuY2VvZiB0aGUgYXBw
cm9wcmlhdGUgaW50ZXJmYWNlIG9uIHNvbWUKKyAgICAgICAgICAgIC8vdW5rbm93biBvdGhlciB3
aW5kb3cuICBUT0RPOiBXb3JrIGFyb3VuZCB0aGlzIHNvbWVob3c/CisKKyAgICAgICAgICAgIGFz
c2VydCh0eXBlb2YgZSA9PSAib2JqZWN0IiwKKyAgICAgICAgICAgICAgICAgICAiYXNzZXJ0X3Ro
cm93cyIsIGRlc2NyaXB0aW9uLAorICAgICAgICAgICAgICAgICAgICIke2Z1bmN9IHRocmV3ICR7
ZX0gd2l0aCB0eXBlICR7dHlwZX0sIG5vdCBhbiBvYmplY3QiLAorICAgICAgICAgICAgICAgICAg
IHtmdW5jOmZ1bmMsIGU6ZSwgdHlwZTp0eXBlb2YgZX0pOworCisgICAgICAgICAgICBmb3IgKHZh
ciBwcm9wIGluIHJlcXVpcmVkX3Byb3BzKSB7CisgICAgICAgICAgICAgICAgYXNzZXJ0KHR5cGVv
ZiBlID09ICJvYmplY3QiICYmIHByb3AgaW4gZSAmJiBlW3Byb3BdID09IHJlcXVpcmVkX3Byb3Bz
W3Byb3BdLAorICAgICAgICAgICAgICAgICAgICAgICAiYXNzZXJ0X3Rocm93cyIsIGRlc2NyaXB0
aW9uLAorICAgICAgICAgICAgICAgICAgICAgICAiJHtmdW5jfSB0aHJldyAke2V9IHRoYXQgaXMg
bm90IGEgRE9NRXhjZXB0aW9uICIgKyBjb2RlICsgIjogcHJvcGVydHkgJHtwcm9wfSBpcyBlcXVh
bCB0byAke2FjdHVhbH0sIGV4cGVjdGVkICR7ZXhwZWN0ZWR9IiwKKyAgICAgICAgICAgICAgICAg
ICAgICAge2Z1bmM6ZnVuYywgZTplLCBwcm9wOnByb3AsIGFjdHVhbDplW3Byb3BdLCBleHBlY3Rl
ZDpyZXF1aXJlZF9wcm9wc1twcm9wXX0pOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAg
fQorICAgIGV4cG9zZShhc3NlcnRfdGhyb3dzLCAiYXNzZXJ0X3Rocm93cyIpOworCisgICAgZnVu
Y3Rpb24gYXNzZXJ0X3VucmVhY2hlZChkZXNjcmlwdGlvbikgeworICAgICAgICAgYXNzZXJ0KGZh
bHNlLCAiYXNzZXJ0X3VucmVhY2hlZCIsIGRlc2NyaXB0aW9uLAorICAgICAgICAgICAgICAgICJS
ZWFjaGVkIHVucmVhY2hhYmxlIGNvZGUiKTsKKyAgICB9CisgICAgZXhwb3NlKGFzc2VydF91bnJl
YWNoZWQsICJhc3NlcnRfdW5yZWFjaGVkIik7CisKKyAgICBmdW5jdGlvbiBhc3NlcnRfYW55KGFz
c2VydF9mdW5jLCBhY3R1YWwsIGV4cGVjdGVkX2FycmF5KQorICAgIHsKKyAgICAgICAgdmFyIGFy
Z3MgPSBbXS5zbGljZS5jYWxsKGFyZ3VtZW50cywgMykKKyAgICAgICAgdmFyIGVycm9ycyA9IFtd
CisgICAgICAgIHZhciBwYXNzZWQgPSBmYWxzZTsKKyAgICAgICAgZm9yRWFjaChleHBlY3RlZF9h
cnJheSwKKyAgICAgICAgICAgICAgICBmdW5jdGlvbihleHBlY3RlZCkKKyAgICAgICAgICAgICAg
ICB7CisgICAgICAgICAgICAgICAgICAgIHRyeSB7CisgICAgICAgICAgICAgICAgICAgICAgICBh
c3NlcnRfZnVuYy5hcHBseSh0aGlzLCBbYWN0dWFsLCBleHBlY3RlZF0uY29uY2F0KGFyZ3MpKQor
ICAgICAgICAgICAgICAgICAgICAgICAgcGFzc2VkID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAg
ICAgfSBjYXRjaCAoZSkgeworICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3JzLnB1c2goZS5t
ZXNzYWdlKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0pOworICAg
ICAgICBpZiAoIXBhc3NlZCkgeworICAgICAgICAgICAgdGhyb3cgbmV3IEFzc2VydGlvbkVycm9y
KGVycm9ycy5qb2luKCJcblxuIikpOworICAgICAgICB9CisgICAgfQorICAgIGV4cG9zZShhc3Nl
cnRfYW55LCAiYXNzZXJ0X2FueSIpOworCisgICAgZnVuY3Rpb24gVGVzdChuYW1lLCBwcm9wZXJ0
aWVzKQorICAgIHsKKyAgICAgICAgdGhpcy5uYW1lID0gbmFtZTsKKworICAgICAgICB0aGlzLnBo
YXNlcyA9IHsKKyAgICAgICAgICAgIElOSVRJQUw6MCwKKyAgICAgICAgICAgIFNUQVJURUQ6MSwK
KyAgICAgICAgICAgIEhBU19SRVNVTFQ6MiwKKyAgICAgICAgICAgIENPTVBMRVRFOjMKKyAgICAg
ICAgfTsKKyAgICAgICAgdGhpcy5waGFzZSA9IHRoaXMucGhhc2VzLklOSVRJQUw7CisKKyAgICAg
ICAgdGhpcy5zdGF0dXMgPSB0aGlzLk5PVFJVTjsKKyAgICAgICAgdGhpcy50aW1lb3V0X2lkID0g
bnVsbDsKKworICAgICAgICB0aGlzLnByb3BlcnRpZXMgPSBwcm9wZXJ0aWVzOworICAgICAgICB2
YXIgdGltZW91dCA9IHByb3BlcnRpZXMudGltZW91dCA/IHByb3BlcnRpZXMudGltZW91dCA6IHNl
dHRpbmdzLnRlc3RfdGltZW91dAorICAgICAgICBpZiAodGltZW91dCAhPSBudWxsKSB7CisgICAg
ICAgICAgICB0aGlzLnRpbWVvdXRfbGVuZ3RoID0gdGltZW91dCAqIHRlc3RzLnRpbWVvdXRfbXVs
dGlwbGllcjsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHRoaXMudGltZW91dF9sZW5n
dGggPSBudWxsOworICAgICAgICB9CisKKyAgICAgICAgdGhpcy5tZXNzYWdlID0gbnVsbDsKKwor
ICAgICAgICB2YXIgdGhpc19vYmogPSB0aGlzOworICAgICAgICB0aGlzLnN0ZXBzID0gW107CisK
KyAgICAgICAgdGhpcy5jbGVhbnVwX2NhbGxiYWNrcyA9IFtdOworCisgICAgICAgIHRlc3RzLnB1
c2godGhpcyk7CisgICAgfQorCisgICAgVGVzdC5zdGF0dXNlcyA9IHsKKyAgICAgICAgUEFTUzow
LAorICAgICAgICBGQUlMOjEsCisgICAgICAgIFRJTUVPVVQ6MiwKKyAgICAgICAgTk9UUlVOOjMK
KyAgICB9OworCisgICAgVGVzdC5wcm90b3R5cGUgPSBtZXJnZSh7fSwgVGVzdC5zdGF0dXNlcyk7
CisKKyAgICBUZXN0LnByb3RvdHlwZS5zdHJ1Y3R1cmVkX2Nsb25lID0gZnVuY3Rpb24oKQorICAg
IHsKKyAgICAgICAgaWYgKCF0aGlzLl9zdHJ1Y3R1cmVkX2Nsb25lKSB7CisgICAgICAgICAgICB2
YXIgbXNnID0gdGhpcy5tZXNzYWdlOworICAgICAgICAgICAgbXNnID0gbXNnID8gU3RyaW5nKG1z
ZykgOiBtc2c7CisgICAgICAgICAgICB0aGlzLl9zdHJ1Y3R1cmVkX2Nsb25lID0gbWVyZ2Uoewor
ICAgICAgICAgICAgICAgIG5hbWU6U3RyaW5nKHRoaXMubmFtZSksCisgICAgICAgICAgICAgICAg
c3RhdHVzOnRoaXMuc3RhdHVzLAorICAgICAgICAgICAgICAgIG1lc3NhZ2U6bXNnCisgICAgICAg
ICAgICB9LCBUZXN0LnN0YXR1c2VzKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gdGhpcy5f
c3RydWN0dXJlZF9jbG9uZTsKKyAgICB9OworCisgICAgVGVzdC5wcm90b3R5cGUuc3RlcCA9IGZ1
bmN0aW9uKGZ1bmMsIHRoaXNfb2JqKQorICAgIHsKKyAgICAgICAgaWYgKHRoaXMucGhhc2UgPiB0
aGlzLnBoYXNlcy5TVEFSVEVEKSB7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAg
ICAgICAgdGhpcy5waGFzZSA9IHRoaXMucGhhc2VzLlNUQVJURUQ7CisgICAgICAgIC8vSWYgd2Ug
ZG9uJ3QgZ2V0IGEgcmVzdWx0IGJlZm9yZSB0aGUgaGFybmVzcyB0aW1lcyBvdXQgdGhhdCB3aWxs
IGJlIGEgdGVzdCB0aW1vdXQKKyAgICAgICAgdGhpcy5zZXRfc3RhdHVzKHRoaXMuVElNRU9VVCwg
IlRlc3QgdGltZWQgb3V0Iik7CisKKyAgICAgICAgdGVzdHMuc3RhcnRlZCA9IHRydWU7CisKKyAg
ICAgICAgaWYgKHRoaXMudGltZW91dF9pZCA9PT0gbnVsbCkgeworICAgICAgICAgICAgdGhpcy5z
ZXRfdGltZW91dCgpOworICAgICAgICB9CisKKyAgICAgICAgdGhpcy5zdGVwcy5wdXNoKGZ1bmMp
OworCisgICAgICAgIGlmIChhcmd1bWVudHMubGVuZ3RoID09PSAxKSB7CisgICAgICAgICAgICB0
aGlzX29iaiA9IHRoaXM7CisgICAgICAgIH0KKworICAgICAgICB0cnkgeworICAgICAgICAgICAg
cmV0dXJuIGZ1bmMuYXBwbHkodGhpc19vYmosIEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFy
Z3VtZW50cywgMikpOworICAgICAgICB9IGNhdGNoIChlKSB7CisgICAgICAgICAgICBpZiAodGhp
cy5waGFzZSA+PSB0aGlzLnBoYXNlcy5IQVNfUkVTVUxUKSB7CisgICAgICAgICAgICAgICAgcmV0
dXJuOworICAgICAgICAgICAgfQorICAgICAgICAgICAgdmFyIG1lc3NhZ2UgPSAodHlwZW9mIGUg
PT09ICJvYmplY3QiICYmIGUgIT09IG51bGwpID8gZS5tZXNzYWdlIDogZTsKKyAgICAgICAgICAg
IGlmICh0eXBlb2YgZS5zdGFjayAhPSAidW5kZWZpbmVkIiAmJiB0eXBlb2YgZS5tZXNzYWdlID09
ICJzdHJpbmciKSB7CisgICAgICAgICAgICAgICAgLy9UcnkgdG8gbWFrZSBpdCBtb3JlIGluZm9y
bWF0aXZlIGZvciBzb21lIGV4Y2VwdGlvbnMsIGF0IGxlYXN0CisgICAgICAgICAgICAgICAgLy9p
biBHZWNrbyBhbmQgV2ViS2l0LiAgVGhpcyByZXN1bHRzIGluIGEgc3RhY2sgZHVtcCBpbnN0ZWFk
IG9mCisgICAgICAgICAgICAgICAgLy9qdXN0IGVycm9ycyBsaWtlICJDYW5ub3QgcmVhZCBwcm9w
ZXJ0eSAncGFyZW50Tm9kZScgb2YgbnVsbCIKKyAgICAgICAgICAgICAgICAvL29yICJyb290IGlz
IG51bGwiLiAgTWFrZXMgaXQgYSBsb3QgbG9uZ2VyLCBvZiBjb3Vyc2UuCisgICAgICAgICAgICAg
ICAgbWVzc2FnZSArPSAiKHN0YWNrOiAiICsgZS5zdGFjayArICIpIjsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIHRoaXMuc2V0X3N0YXR1cyh0aGlzLkZBSUwsIG1lc3NhZ2UpOworICAgICAg
ICAgICAgdGhpcy5waGFzZSA9IHRoaXMucGhhc2VzLkhBU19SRVNVTFQ7CisgICAgICAgICAgICB0
aGlzLmRvbmUoKTsKKyAgICAgICAgfQorICAgIH07CisKKyAgICBUZXN0LnByb3RvdHlwZS5zdGVw
X2Z1bmMgPSBmdW5jdGlvbihmdW5jLCB0aGlzX29iaikKKyAgICB7CisgICAgICAgIHZhciB0ZXN0
X3RoaXMgPSB0aGlzOworCisgICAgICAgIGlmIChhcmd1bWVudHMubGVuZ3RoID09PSAxKSB7Cisg
ICAgICAgICAgICB0aGlzX29iaiA9IHRlc3RfdGhpczsKKyAgICAgICAgfQorCisgICAgICAgIHJl
dHVybiBmdW5jdGlvbigpCisgICAgICAgIHsKKyAgICAgICAgICAgIHRlc3RfdGhpcy5zdGVwLmFw
cGx5KHRlc3RfdGhpcywgW2Z1bmMsIHRoaXNfb2JqXS5jb25jYXQoCisgICAgICAgICAgICAgICAg
QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzKSkpOworICAgICAgICB9OworICAg
IH07CisKKyAgICBUZXN0LnByb3RvdHlwZS5zdGVwX2Z1bmNfZG9uZSA9IGZ1bmN0aW9uKGZ1bmMs
IHRoaXNfb2JqKQorICAgIHsKKyAgICAgICAgdmFyIHRlc3RfdGhpcyA9IHRoaXM7CisKKyAgICAg
ICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT09IDEpIHsKKyAgICAgICAgICAgIHRoaXNfb2JqID0g
dGVzdF90aGlzOworICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIGZ1bmN0aW9uKCkKKyAgICAg
ICAgeworICAgICAgICAgICAgaWYgKGZ1bmMpIHsKKyAgICAgICAgICAgICAgICB0ZXN0X3RoaXMu
c3RlcC5hcHBseSh0ZXN0X3RoaXMsIFtmdW5jLCB0aGlzX29ial0uY29uY2F0KAorICAgICAgICAg
ICAgICAgICAgICBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMpKSk7CisgICAg
ICAgICAgICB9CisgICAgICAgICAgICB0ZXN0X3RoaXMuZG9uZSgpOworICAgICAgICB9OworICAg
IH0KKworICAgIFRlc3QucHJvdG90eXBlLmFkZF9jbGVhbnVwID0gZnVuY3Rpb24oY2FsbGJhY2sp
IHsKKyAgICAgICAgdGhpcy5jbGVhbnVwX2NhbGxiYWNrcy5wdXNoKGNhbGxiYWNrKTsKKyAgICB9
CisKKyAgICBUZXN0LnByb3RvdHlwZS5zZXRfdGltZW91dCA9IGZ1bmN0aW9uKCkKKyAgICB7Cisg
ICAgICAgIGlmICh0aGlzLnRpbWVvdXRfbGVuZ3RoICE9PSBudWxsKSB7CisgICAgICAgICAgICB2
YXIgdGhpc19vYmogPSB0aGlzOworICAgICAgICAgICAgdGhpcy50aW1lb3V0X2lkID0gc2V0VGlt
ZW91dChmdW5jdGlvbigpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXNfb2Jq
LnRpbWVvdXQoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwg
dGhpcy50aW1lb3V0X2xlbmd0aCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBUZXN0LnByb3Rv
dHlwZS5zZXRfc3RhdHVzID0gZnVuY3Rpb24oc3RhdHVzLCBtZXNzYWdlKQorICAgIHsKKyAgICAg
ICAgdGhpcy5zdGF0dXMgPSBzdGF0dXM7CisgICAgICAgIHRoaXMubWVzc2FnZSA9IG1lc3NhZ2U7
CisgICAgfQorCisgICAgVGVzdC5wcm90b3R5cGUudGltZW91dCA9IGZ1bmN0aW9uKCkKKyAgICB7
CisgICAgICAgIHRoaXMudGltZW91dF9pZCA9IG51bGw7CisgICAgICAgIHRoaXMuc2V0X3N0YXR1
cyh0aGlzLlRJTUVPVVQsICJUZXN0IHRpbWVkIG91dCIpCisgICAgICAgIHRoaXMucGhhc2UgPSB0
aGlzLnBoYXNlcy5IQVNfUkVTVUxUOworICAgICAgICB0aGlzLmRvbmUoKTsKKyAgICB9OworCisg
ICAgVGVzdC5wcm90b3R5cGUuZG9uZSA9IGZ1bmN0aW9uKCkKKyAgICB7CisgICAgICAgIGlmICh0
aGlzLnBoYXNlID09IHRoaXMucGhhc2VzLkNPTVBMRVRFKSB7CisgICAgICAgICAgICByZXR1cm47
CisgICAgICAgIH0KKworICAgICAgICBpZiAodGhpcy5waGFzZSA8PSB0aGlzLnBoYXNlcy5TVEFS
VEVEKSB7CisgICAgICAgICAgICB0aGlzLnNldF9zdGF0dXModGhpcy5QQVNTLCBudWxsKTsKKyAg
ICAgICAgfQorCisgICAgICAgIGlmICh0aGlzLnN0YXR1cyA9PSB0aGlzLk5PVFJVTikgeworICAg
ICAgICAgICAgYWxlcnQodGhpcy5waGFzZSk7CisgICAgICAgIH0KKworICAgICAgICB0aGlzLnBo
YXNlID0gdGhpcy5waGFzZXMuQ09NUExFVEU7CisKKyAgICAgICAgY2xlYXJUaW1lb3V0KHRoaXMu
dGltZW91dF9pZCk7CisgICAgICAgIHRlc3RzLnJlc3VsdCh0aGlzKTsKKyAgICAgICAgdGhpcy5j
bGVhbnVwKCk7CisgICAgfTsKKworICAgIFRlc3QucHJvdG90eXBlLmNsZWFudXAgPSBmdW5jdGlv
bigpIHsKKyAgICAgICAgZm9yRWFjaCh0aGlzLmNsZWFudXBfY2FsbGJhY2tzLAorICAgICAgICAg
ICAgICAgIGZ1bmN0aW9uKGNsZWFudXBfY2FsbGJhY2spIHsKKyAgICAgICAgICAgICAgICAgICAg
Y2xlYW51cF9jYWxsYmFjaygpCisgICAgICAgICAgICAgICAgfSk7CisgICAgfQorCisgICAgLyoK
KyAgICAgKiBIYXJuZXNzCisgICAgICovCisKKyAgICBmdW5jdGlvbiBUZXN0c1N0YXR1cygpCisg
ICAgeworICAgICAgICB0aGlzLnN0YXR1cyA9IG51bGw7CisgICAgICAgIHRoaXMubWVzc2FnZSA9
IG51bGw7CisgICAgfQorCisgICAgVGVzdHNTdGF0dXMuc3RhdHVzZXMgPSB7CisgICAgICAgIE9L
OjAsCisgICAgICAgIEVSUk9SOjEsCisgICAgICAgIFRJTUVPVVQ6MgorICAgIH07CisKKyAgICBU
ZXN0c1N0YXR1cy5wcm90b3R5cGUgPSBtZXJnZSh7fSwgVGVzdHNTdGF0dXMuc3RhdHVzZXMpOwor
CisgICAgVGVzdHNTdGF0dXMucHJvdG90eXBlLnN0cnVjdHVyZWRfY2xvbmUgPSBmdW5jdGlvbigp
CisgICAgeworICAgICAgICBpZiAoIXRoaXMuX3N0cnVjdHVyZWRfY2xvbmUpIHsKKyAgICAgICAg
ICAgIHZhciBtc2cgPSB0aGlzLm1lc3NhZ2U7CisgICAgICAgICAgICBtc2cgPSBtc2cgPyBTdHJp
bmcobXNnKSA6IG1zZzsKKyAgICAgICAgICAgIHRoaXMuX3N0cnVjdHVyZWRfY2xvbmUgPSBtZXJn
ZSh7CisgICAgICAgICAgICAgICAgc3RhdHVzOnRoaXMuc3RhdHVzLAorICAgICAgICAgICAgICAg
IG1lc3NhZ2U6bXNnCisgICAgICAgICAgICB9LCBUZXN0c1N0YXR1cy5zdGF0dXNlcyk7CisgICAg
ICAgIH0KKyAgICAgICAgcmV0dXJuIHRoaXMuX3N0cnVjdHVyZWRfY2xvbmU7CisgICAgfTsKKwor
ICAgIGZ1bmN0aW9uIFRlc3RzKCkKKyAgICB7CisgICAgICAgIHRoaXMudGVzdHMgPSBbXTsKKyAg
ICAgICAgdGhpcy5udW1fcGVuZGluZyA9IDA7CisKKyAgICAgICAgdGhpcy5waGFzZXMgPSB7Cisg
ICAgICAgICAgICBJTklUSUFMOjAsCisgICAgICAgICAgICBTRVRVUDoxLAorICAgICAgICAgICAg
SEFWRV9URVNUUzoyLAorICAgICAgICAgICAgSEFWRV9SRVNVTFRTOjMsCisgICAgICAgICAgICBD
T01QTEVURTo0CisgICAgICAgIH07CisgICAgICAgIHRoaXMucGhhc2UgPSB0aGlzLnBoYXNlcy5J
TklUSUFMOworCisgICAgICAgIHRoaXMucHJvcGVydGllcyA9IHt9OworCisgICAgICAgIC8vQWxs
IHRlc3RzIGNhbid0IGJlIGRvbmUgdW50aWwgdGhlIGxvYWQgZXZlbnQgZmlyZXMKKyAgICAgICAg
dGhpcy5hbGxfbG9hZGVkID0gZmFsc2U7CisgICAgICAgIHRoaXMud2FpdF9mb3JfZmluaXNoID0g
ZmFsc2U7CisgICAgICAgIHRoaXMucHJvY2Vzc2luZ19jYWxsYmFja3MgPSBmYWxzZTsKKworICAg
ICAgICB0aGlzLmFsbG93X3VuY2F1Z2h0X2V4Y2VwdGlvbiA9IGZhbHNlOworCisgICAgICAgIHRo
aXMudGltZW91dF9tdWx0aXBsaWVyID0gMTsKKyAgICAgICAgdGhpcy50aW1lb3V0X2xlbmd0aCA9
IHRoaXMuZ2V0X3RpbWVvdXQoKTsKKyAgICAgICAgdGhpcy50aW1lb3V0X2lkID0gbnVsbDsKKwor
ICAgICAgICB0aGlzLnN0YXJ0X2NhbGxiYWNrcyA9IFtdOworICAgICAgICB0aGlzLnRlc3RfZG9u
ZV9jYWxsYmFja3MgPSBbXTsKKyAgICAgICAgdGhpcy5hbGxfZG9uZV9jYWxsYmFja3MgPSBbXTsK
KworICAgICAgICB0aGlzLnN0YXR1cyA9IG5ldyBUZXN0c1N0YXR1cygpOworCisgICAgICAgIHZh
ciB0aGlzX29iaiA9IHRoaXM7CisKKyAgICAgICAgb25fZXZlbnQod2luZG93LCAibG9hZCIsCisg
ICAgICAgICAgICAgICAgIGZ1bmN0aW9uKCkKKyAgICAgICAgICAgICAgICAgeworICAgICAgICAg
ICAgICAgICAgICAgdGhpc19vYmouYWxsX2xvYWRlZCA9IHRydWU7CisgICAgICAgICAgICAgICAg
ICAgICBpZiAodGhpc19vYmouYWxsX2RvbmUoKSkKKyAgICAgICAgICAgICAgICAgICAgIHsKKyAg
ICAgICAgICAgICAgICAgICAgICAgICB0aGlzX29iai5jb21wbGV0ZSgpOworICAgICAgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgICAgICB9KTsKKworICAgICAgICB0aGlzLnNldF90aW1l
b3V0KCk7CisgICAgfQorCisgICAgVGVzdHMucHJvdG90eXBlLnNldHVwID0gZnVuY3Rpb24oZnVu
YywgcHJvcGVydGllcykKKyAgICB7CisgICAgICAgIGlmICh0aGlzLnBoYXNlID49IHRoaXMucGhh
c2VzLkhBVkVfUkVTVUxUUykgeworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAg
ICAgICAgaWYgKHRoaXMucGhhc2UgPCB0aGlzLnBoYXNlcy5TRVRVUCkgeworICAgICAgICAgICAg
dGhpcy5waGFzZSA9IHRoaXMucGhhc2VzLlNFVFVQOworICAgICAgICB9CisKKyAgICAgICAgdGhp
cy5wcm9wZXJ0aWVzID0gcHJvcGVydGllczsKKworICAgICAgICBmb3IgKHZhciBwIGluIHByb3Bl
cnRpZXMpIHsKKyAgICAgICAgICAgIGlmIChwcm9wZXJ0aWVzLmhhc093blByb3BlcnR5KHApKSB7
CisgICAgICAgICAgICAgICAgdmFyIHZhbHVlID0gcHJvcGVydGllc1twXQorICAgICAgICAgICAg
ICAgIGlmIChwID09ICJhbGxvd191bmNhdWdodF9leGNlcHRpb24iKSB7CisgICAgICAgICAgICAg
ICAgICAgIHRoaXMuYWxsb3dfdW5jYXVnaHRfZXhjZXB0aW9uID0gdmFsdWU7CisgICAgICAgICAg
ICAgICAgfSBlbHNlIGlmIChwID09ICJleHBsaWNpdF9kb25lIiAmJiB2YWx1ZSkgeworICAgICAg
ICAgICAgICAgICAgICB0aGlzLndhaXRfZm9yX2ZpbmlzaCA9IHRydWU7CisgICAgICAgICAgICAg
ICAgfSBlbHNlIGlmIChwID09ICJleHBsaWNpdF90aW1lb3V0IiAmJiB2YWx1ZSkgeworICAgICAg
ICAgICAgICAgICAgICB0aGlzLnRpbWVvdXRfbGVuZ3RoID0gbnVsbDsKKyAgICAgICAgICAgICAg
ICAgICAgaWYgKHRoaXMudGltZW91dF9pZCkKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAg
ICAgICAgICAgICAgICAgICAgY2xlYXJUaW1lb3V0KHRoaXMudGltZW91dF9pZCk7CisgICAgICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHAgPT0gInRpbWVvdXRf
bXVsdGlwbGllciIpIHsKKyAgICAgICAgICAgICAgICAgICAgdGhpcy50aW1lb3V0X211bHRpcGxp
ZXIgPSB2YWx1ZTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0K
KworICAgICAgICBpZiAoZnVuYykgeworICAgICAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgICAg
ICBmdW5jKCk7CisgICAgICAgICAgICB9IGNhdGNoIChlKSB7CisgICAgICAgICAgICAgICAgdGhp
cy5zdGF0dXMuc3RhdHVzID0gdGhpcy5zdGF0dXMuRVJST1I7CisgICAgICAgICAgICAgICAgdGhp
cy5zdGF0dXMubWVzc2FnZSA9IFN0cmluZyhlKTsKKyAgICAgICAgICAgIH07CisgICAgICAgIH0K
KyAgICAgICAgdGhpcy5zZXRfdGltZW91dCgpOworICAgIH07CisKKyAgICBUZXN0cy5wcm90b3R5
cGUuZ2V0X3RpbWVvdXQgPSBmdW5jdGlvbigpCisgICAgeworICAgICAgICB2YXIgbWV0YXMgPSBk
b2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZSgibWV0YSIpOworICAgICAgICBmb3IgKHZhciBp
ID0gMDsgaSA8IG1ldGFzLmxlbmd0aDsgaSsrKSB7CisgICAgICAgICAgICBpZiAobWV0YXNbaV0u
bmFtZSA9PSAidGltZW91dCIpIHsKKyAgICAgICAgICAgICAgICBpZiAobWV0YXNbaV0uY29udGVu
dCA9PSAibG9uZyIpIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHNldHRpbmdzLmhhcm5l
c3NfdGltZW91dC5sb25nOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICByZXR1cm4gc2V0dGluZ3MuaGFy
bmVzc190aW1lb3V0Lm5vcm1hbDsKKyAgICB9CisKKyAgICBUZXN0cy5wcm90b3R5cGUuc2V0X3Rp
bWVvdXQgPSBmdW5jdGlvbigpCisgICAgeworICAgICAgICB2YXIgdGhpc19vYmogPSB0aGlzOwor
ICAgICAgICBjbGVhclRpbWVvdXQodGhpcy50aW1lb3V0X2lkKTsKKyAgICAgICAgaWYgKHRoaXMu
dGltZW91dF9sZW5ndGggIT09IG51bGwpIHsKKyAgICAgICAgICAgIHRoaXMudGltZW91dF9pZCA9
IHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB0aGlzX29iai50aW1lb3V0KCk7CisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIH0sIHRoaXMudGltZW91dF9sZW5ndGgpOworICAgICAgICB9Cisg
ICAgfTsKKworICAgIFRlc3RzLnByb3RvdHlwZS50aW1lb3V0ID0gZnVuY3Rpb24oKSB7CisgICAg
ICAgIHRoaXMuc3RhdHVzLnN0YXR1cyA9IHRoaXMuc3RhdHVzLlRJTUVPVVQ7CisgICAgICAgIHRo
aXMuY29tcGxldGUoKTsKKyAgICB9OworCisgICAgVGVzdHMucHJvdG90eXBlLmVuZF93YWl0ID0g
ZnVuY3Rpb24oKQorICAgIHsKKyAgICAgICAgdGhpcy53YWl0X2Zvcl9maW5pc2ggPSBmYWxzZTsK
KyAgICAgICAgaWYgKHRoaXMuYWxsX2RvbmUoKSkgeworICAgICAgICAgICAgdGhpcy5jb21wbGV0
ZSgpOworICAgICAgICB9CisgICAgfTsKKworICAgIFRlc3RzLnByb3RvdHlwZS5wdXNoID0gZnVu
Y3Rpb24odGVzdCkKKyAgICB7CisgICAgICAgIGlmICh0aGlzLnBoYXNlIDwgdGhpcy5waGFzZXMu
SEFWRV9URVNUUykgeworICAgICAgICAgICAgdGhpcy5zdGFydCgpOworICAgICAgICB9CisgICAg
ICAgIHRoaXMubnVtX3BlbmRpbmcrKzsKKyAgICAgICAgdGhpcy50ZXN0cy5wdXNoKHRlc3QpOwor
ICAgIH07CisKKyAgICBUZXN0cy5wcm90b3R5cGUuYWxsX2RvbmUgPSBmdW5jdGlvbigpIHsKKyAg
ICAgICAgcmV0dXJuICh0aGlzLmFsbF9sb2FkZWQgJiYgdGhpcy5udW1fcGVuZGluZyA9PT0gMCAm
JgorICAgICAgICAgICAgICAgICF0aGlzLndhaXRfZm9yX2ZpbmlzaCAmJiAhdGhpcy5wcm9jZXNz
aW5nX2NhbGxiYWNrcyk7CisgICAgfTsKKworICAgIFRlc3RzLnByb3RvdHlwZS5zdGFydCA9IGZ1
bmN0aW9uKCkgeworICAgICAgICB0aGlzLnBoYXNlID0gdGhpcy5waGFzZXMuSEFWRV9URVNUUzsK
KyAgICAgICAgdGhpcy5ub3RpZnlfc3RhcnQoKTsKKyAgICB9OworCisgICAgVGVzdHMucHJvdG90
eXBlLm5vdGlmeV9zdGFydCA9IGZ1bmN0aW9uKCkgeworICAgICAgICB2YXIgdGhpc19vYmogPSB0
aGlzOworICAgICAgICBmb3JFYWNoICh0aGlzLnN0YXJ0X2NhbGxiYWNrcywKKyAgICAgICAgICAg
ICAgICAgZnVuY3Rpb24oY2FsbGJhY2spCisgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAg
ICAgICAgICAgIGNhbGxiYWNrKHRoaXNfb2JqLnByb3BlcnRpZXMpOworICAgICAgICAgICAgICAg
ICB9KTsKKyAgICAgICAgZm9yRWFjaF93aW5kb3dzKAorICAgICAgICAgICAgICAgIGZ1bmN0aW9u
KHcsIGlzX3NhbWVfb3JpZ2luKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAg
ICAgaWYgKGlzX3NhbWVfb3JpZ2luICYmIHcuc3RhcnRfY2FsbGJhY2spIHsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIHRyeSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdy5zdGFydF9j
YWxsYmFjayh0aGlzX29iai5wcm9wZXJ0aWVzKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0g
Y2F0Y2ggKGUpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZGVidWcpIHsKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgZTsKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgICAgICAgICAgaWYgKHN1cHBvcnRzX3Bvc3RfbWVzc2FnZSh3KSAm
JiB3ICE9PSBzZWxmKSB7CisgICAgICAgICAgICAgICAgICAgICAgICB3LnBvc3RNZXNzYWdlKHsK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiAic3RhcnQiLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHByb3BlcnRpZXM6IHRoaXNfb2JqLnByb3BlcnRpZXMKKyAgICAgICAg
ICAgICAgICAgICAgICAgIH0sICIqIik7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgICAgICB9KTsKKyAgICB9OworCisgICAgVGVzdHMucHJvdG90eXBlLnJlc3VsdCA9IGZ1bmN0
aW9uKHRlc3QpCisgICAgeworICAgICAgICBpZiAodGhpcy5waGFzZSA+IHRoaXMucGhhc2VzLkhB
VkVfUkVTVUxUUykgeworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIHRo
aXMucGhhc2UgPSB0aGlzLnBoYXNlcy5IQVZFX1JFU1VMVFM7CisgICAgICAgIHRoaXMubnVtX3Bl
bmRpbmctLTsKKyAgICAgICAgdGhpcy5ub3RpZnlfcmVzdWx0KHRlc3QpOworICAgIH07CisKKyAg
ICBUZXN0cy5wcm90b3R5cGUubm90aWZ5X3Jlc3VsdCA9IGZ1bmN0aW9uKHRlc3QpIHsKKyAgICAg
ICAgdmFyIHRoaXNfb2JqID0gdGhpczsKKyAgICAgICAgdGhpcy5wcm9jZXNzaW5nX2NhbGxiYWNr
cyA9IHRydWU7CisgICAgICAgIGZvckVhY2godGhpcy50ZXN0X2RvbmVfY2FsbGJhY2tzLAorICAg
ICAgICAgICAgICAgIGZ1bmN0aW9uKGNhbGxiYWNrKQorICAgICAgICAgICAgICAgIHsKKyAgICAg
ICAgICAgICAgICAgICAgY2FsbGJhY2sodGVzdCwgdGhpc19vYmopOworICAgICAgICAgICAgICAg
IH0pOworCisgICAgICAgIGZvckVhY2hfd2luZG93cygKKyAgICAgICAgICAgICAgICBmdW5jdGlv
bih3LCBpc19zYW1lX29yaWdpbikKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAg
ICAgIGlmIChpc19zYW1lX29yaWdpbiAmJiB3LnJlc3VsdF9jYWxsYmFjaykgeworICAgICAgICAg
ICAgICAgICAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB3LnJlc3Vs
dF9jYWxsYmFjayh0ZXN0KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHsK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZGVidWcpIHsKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgdGhyb3cgZTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgICAgICAgICAgaWYgKHN1cHBvcnRzX3Bvc3RfbWVzc2FnZSh3KSAmJiB3ICE9PSBzZWxm
KSB7CisgICAgICAgICAgICAgICAgICAgICAgICB3LnBvc3RNZXNzYWdlKHsKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB0eXBlOiAicmVzdWx0IiwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB0ZXN0OiB0ZXN0LnN0cnVjdHVyZWRfY2xvbmUoKQorICAgICAgICAgICAgICAgICAgICAg
ICAgfSwgIioiKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0pOwor
ICAgICAgICB0aGlzLnByb2Nlc3NpbmdfY2FsbGJhY2tzID0gZmFsc2U7CisgICAgICAgIGlmICh0
aGlzX29iai5hbGxfZG9uZSgpKSB7CisgICAgICAgICAgICB0aGlzX29iai5jb21wbGV0ZSgpOwor
ICAgICAgICB9CisgICAgfTsKKworICAgIFRlc3RzLnByb3RvdHlwZS5jb21wbGV0ZSA9IGZ1bmN0
aW9uKCkgeworICAgICAgICBpZiAodGhpcy5waGFzZSA9PT0gdGhpcy5waGFzZXMuQ09NUExFVEUp
IHsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICB0aGlzLnBoYXNlID0g
dGhpcy5waGFzZXMuQ09NUExFVEU7CisgICAgICAgIHZhciB0aGlzX29iaiA9IHRoaXM7CisgICAg
ICAgIHRoaXMudGVzdHMuZm9yRWFjaCgKKyAgICAgICAgICAgIGZ1bmN0aW9uKHgpCisgICAgICAg
ICAgICB7CisgICAgICAgICAgICAgICAgaWYgKHguc3RhdHVzID09PSB4Lk5PVFJVTikgeworICAg
ICAgICAgICAgICAgICAgICB0aGlzX29iai5ub3RpZnlfcmVzdWx0KHgpOworICAgICAgICAgICAg
ICAgICAgICB4LmNsZWFudXAoKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9Cisg
ICAgICAgICk7CisgICAgICAgIHRoaXMubm90aWZ5X2NvbXBsZXRlKCk7CisgICAgfTsKKworICAg
IFRlc3RzLnByb3RvdHlwZS5ub3RpZnlfY29tcGxldGUgPSBmdW5jdGlvbigpCisgICAgeworICAg
ICAgICBjbGVhclRpbWVvdXQodGhpcy50aW1lb3V0X2lkKTsKKyAgICAgICAgdmFyIHRoaXNfb2Jq
ID0gdGhpczsKKyAgICAgICAgdmFyIHRlc3RzID0gbWFwKHRoaXNfb2JqLnRlc3RzLAorICAgICAg
ICAgICAgICAgICAgICAgICAgZnVuY3Rpb24odGVzdCkKKyAgICAgICAgICAgICAgICAgICAgICAg
IHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGVzdC5zdHJ1Y3R1cmVkX2Ns
b25lKCk7CisgICAgICAgICAgICAgICAgICAgICAgICB9KTsKKyAgICAgICAgaWYgKHRoaXMuc3Rh
dHVzLnN0YXR1cyA9PT0gbnVsbCkgeworICAgICAgICAgICAgdGhpcy5zdGF0dXMuc3RhdHVzID0g
dGhpcy5zdGF0dXMuT0s7CisgICAgICAgIH0KKworICAgICAgICBmb3JFYWNoICh0aGlzLmFsbF9k
b25lX2NhbGxiYWNrcywKKyAgICAgICAgICAgICAgICAgZnVuY3Rpb24oY2FsbGJhY2spCisgICAg
ICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrKHRoaXNfb2JqLnRl
c3RzLCB0aGlzX29iai5zdGF0dXMpOworICAgICAgICAgICAgICAgICB9KTsKKworICAgICAgICBm
b3JFYWNoX3dpbmRvd3MoCisgICAgICAgICAgICAgICAgZnVuY3Rpb24odywgaXNfc2FtZV9vcmln
aW4pCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBpZiAoaXNfc2FtZV9v
cmlnaW4gJiYgdy5jb21wbGV0aW9uX2NhbGxiYWNrKSB7CisgICAgICAgICAgICAgICAgICAgICAg
ICB0cnkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHcuY29tcGxldGlvbl9jYWxsYmFj
ayh0aGlzX29iai50ZXN0cywgdGhpc19vYmouc3RhdHVzKTsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIH0gY2F0Y2ggKGUpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZGVidWcp
IHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgZTsKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgaWYgKHN1cHBvcnRzX3Bvc3RfbWVzc2Fn
ZSh3KSAmJiB3ICE9PSBzZWxmKSB7CisgICAgICAgICAgICAgICAgICAgICAgICB3LnBvc3RNZXNz
YWdlKHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiAiY29tcGxldGUiLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHRlc3RzOiB0ZXN0cywKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBzdGF0dXM6IHRoaXNfb2JqLnN0YXR1cy5zdHJ1Y3R1cmVkX2Nsb25lKCkKKyAg
ICAgICAgICAgICAgICAgICAgICAgIH0sICIqIik7CisgICAgICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgICAgICB9KTsKKyAgICB9OworCisgICAgdmFyIHRlc3RzID0gbmV3IFRlc3RzKCk7
CisKKyAgICB3aW5kb3cub25lcnJvciA9IGZ1bmN0aW9uKG1zZykgeworICAgICAgICBpZiAoIXRl
c3RzLmFsbG93X3VuY2F1Z2h0X2V4Y2VwdGlvbikgeworICAgICAgICAgICAgdGVzdHMuc3RhdHVz
LnN0YXR1cyA9IHRlc3RzLnN0YXR1cy5FUlJPUjsKKyAgICAgICAgICAgIHRlc3RzLnN0YXR1cy5t
ZXNzYWdlID0gbXNnOworICAgICAgICAgICAgdGVzdHMuY29tcGxldGUoKTsKKyAgICAgICAgfQor
ICAgIH0KKworICAgIGZ1bmN0aW9uIHRpbWVvdXQoKSB7CisgICAgICAgIGlmICh0ZXN0cy50aW1l
b3V0X2xlbmd0aCA9PT0gbnVsbCkgeworICAgICAgICAgICAgdGVzdHMudGltZW91dCgpOworICAg
ICAgICB9CisgICAgfQorICAgIGV4cG9zZSh0aW1lb3V0LCAndGltZW91dCcpOworCisgICAgZnVu
Y3Rpb24gYWRkX3N0YXJ0X2NhbGxiYWNrKGNhbGxiYWNrKSB7CisgICAgICAgIHRlc3RzLnN0YXJ0
X2NhbGxiYWNrcy5wdXNoKGNhbGxiYWNrKTsKKyAgICB9CisKKyAgICBmdW5jdGlvbiBhZGRfcmVz
dWx0X2NhbGxiYWNrKGNhbGxiYWNrKQorICAgIHsKKyAgICAgICAgdGVzdHMudGVzdF9kb25lX2Nh
bGxiYWNrcy5wdXNoKGNhbGxiYWNrKTsKKyAgICB9CisKKyAgICBmdW5jdGlvbiBhZGRfY29tcGxl
dGlvbl9jYWxsYmFjayhjYWxsYmFjaykKKyAgICB7CisgICAgICAgdGVzdHMuYWxsX2RvbmVfY2Fs
bGJhY2tzLnB1c2goY2FsbGJhY2spOworICAgIH0KKworICAgIGV4cG9zZShhZGRfc3RhcnRfY2Fs
bGJhY2ssICdhZGRfc3RhcnRfY2FsbGJhY2snKTsKKyAgICBleHBvc2UoYWRkX3Jlc3VsdF9jYWxs
YmFjaywgJ2FkZF9yZXN1bHRfY2FsbGJhY2snKTsKKyAgICBleHBvc2UoYWRkX2NvbXBsZXRpb25f
Y2FsbGJhY2ssICdhZGRfY29tcGxldGlvbl9jYWxsYmFjaycpOworCisgICAgLyoKKyAgICAgKiBP
dXRwdXQgbGlzdGVuZXIKKyAgICAqLworCisgICAgZnVuY3Rpb24gT3V0cHV0KCkgeworICAgICAg
ICB0aGlzLm91dHB1dF9kb2N1bWVudCA9IGRvY3VtZW50OworICAgICAgICB0aGlzLm91dHB1dF9u
b2RlID0gbnVsbDsKKyAgICAgICAgdGhpcy5kb25lX2NvdW50ID0gMDsKKyAgICAgICAgdGhpcy5l
bmFibGVkID0gc2V0dGluZ3Mub3V0cHV0OworICAgICAgICB0aGlzLnBoYXNlID0gdGhpcy5JTklU
SUFMOworICAgIH0KKworICAgIE91dHB1dC5wcm90b3R5cGUuSU5JVElBTCA9IDA7CisgICAgT3V0
cHV0LnByb3RvdHlwZS5TVEFSVEVEID0gMTsKKyAgICBPdXRwdXQucHJvdG90eXBlLkhBVkVfUkVT
VUxUUyA9IDI7CisgICAgT3V0cHV0LnByb3RvdHlwZS5DT01QTEVURSA9IDM7CisKKyAgICBPdXRw
dXQucHJvdG90eXBlLnNldHVwID0gZnVuY3Rpb24ocHJvcGVydGllcykgeworICAgICAgICBpZiAo
dGhpcy5waGFzZSA+IHRoaXMuSU5JVElBTCkgeworICAgICAgICAgICAgcmV0dXJuOworICAgICAg
ICB9CisKKyAgICAgICAgLy9JZiBvdXRwdXQgaXMgZGlzYWJsZWQgaW4gdGVzdGhhcm5lc3NyZXBv
cnQuanMgdGhlIHRlc3Qgc2hvdWxkbid0IGJlCisgICAgICAgIC8vYWJsZSB0byBvdmVycmlkZSB0
aGF0CisgICAgICAgIHRoaXMuZW5hYmxlZCA9IHRoaXMuZW5hYmxlZCAmJiAocHJvcGVydGllcy5o
YXNPd25Qcm9wZXJ0eSgib3V0cHV0IikgPworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHByb3BlcnRpZXMub3V0cHV0IDogc2V0dGluZ3Mub3V0cHV0KTsKKyAgICB9Owor
CisgICAgT3V0cHV0LnByb3RvdHlwZS5pbml0ID0gZnVuY3Rpb24ocHJvcGVydGllcykKKyAgICB7
CisgICAgICAgIGlmICh0aGlzLnBoYXNlID49IHRoaXMuU1RBUlRFRCkgeworICAgICAgICAgICAg
cmV0dXJuOworICAgICAgICB9CisgICAgICAgIGlmIChwcm9wZXJ0aWVzLm91dHB1dF9kb2N1bWVu
dCkgeworICAgICAgICAgICAgdGhpcy5vdXRwdXRfZG9jdW1lbnQgPSBwcm9wZXJ0aWVzLm91dHB1
dF9kb2N1bWVudDsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHRoaXMub3V0cHV0X2Rv
Y3VtZW50ID0gZG9jdW1lbnQ7CisgICAgICAgIH0KKyAgICAgICAgdGhpcy5waGFzZSA9IHRoaXMu
U1RBUlRFRDsKKyAgICB9OworCisgICAgT3V0cHV0LnByb3RvdHlwZS5yZXNvbHZlX2xvZyA9IGZ1
bmN0aW9uKCkKKyAgICB7CisgICAgICAgIHZhciBvdXRwdXRfZG9jdW1lbnQ7CisgICAgICAgIGlm
ICh0eXBlb2YgdGhpcy5vdXRwdXRfZG9jdW1lbnQgPT09ICJmdW5jdGlvbiIpIHsKKyAgICAgICAg
ICAgIG91dHB1dF9kb2N1bWVudCA9IHRoaXMub3V0cHV0X2RvY3VtZW50LmFwcGx5KHVuZGVmaW5l
ZCk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBvdXRwdXRfZG9jdW1lbnQgPSB0aGlz
Lm91dHB1dF9kb2N1bWVudDsKKyAgICAgICAgfQorICAgICAgICBpZiAoIW91dHB1dF9kb2N1bWVu
dCkgeworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIHZhciBub2RlID0g
b3V0cHV0X2RvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJsb2ciKTsKKyAgICAgICAgaWYgKG5vZGUp
IHsKKyAgICAgICAgICAgIHRoaXMub3V0cHV0X2RvY3VtZW50ID0gb3V0cHV0X2RvY3VtZW50Owor
ICAgICAgICAgICAgdGhpcy5vdXRwdXRfbm9kZSA9IG5vZGU7CisgICAgICAgIH0KKyAgICB9Owor
CisgICAgT3V0cHV0LnByb3RvdHlwZS5zaG93X3N0YXR1cyA9IGZ1bmN0aW9uKHRlc3QpCisgICAg
eworICAgICAgICBpZiAodGhpcy5waGFzZSA8IHRoaXMuU1RBUlRFRCkgeworICAgICAgICAgICAg
dGhpcy5pbml0KCk7CisgICAgICAgIH0KKyAgICAgICAgaWYgKCF0aGlzLmVuYWJsZWQpIHsKKyAg
ICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICBpZiAodGhpcy5waGFzZSA8IHRo
aXMuSEFWRV9SRVNVTFRTKSB7CisgICAgICAgICAgICB0aGlzLnJlc29sdmVfbG9nKCk7CisgICAg
ICAgICAgICB0aGlzLnBoYXNlID0gdGhpcy5IQVZFX1JFU1VMVFM7CisgICAgICAgIH0KKyAgICAg
ICAgdGhpcy5kb25lX2NvdW50Kys7CisgICAgICAgIGlmICh0aGlzLm91dHB1dF9ub2RlKSB7Cisg
ICAgICAgICAgICBpZiAodGhpcy5kb25lX2NvdW50IDwgMTAwCisgICAgICAgICAgICB8fCAodGhp
cy5kb25lX2NvdW50IDwgMTAwMCAmJiB0aGlzLmRvbmVfY291bnQgJSAxMDAgPT0gMCkKKyAgICAg
ICAgICAgIHx8IHRoaXMuZG9uZV9jb3VudCAlIDEwMDAgPT0gMCkgeworICAgICAgICAgICAgICAg
IHRoaXMub3V0cHV0X25vZGUudGV4dENvbnRlbnQgPSAiUnVubmluZywgIgorICAgICAgICAgICAg
ICAgICAgICArIHRoaXMuZG9uZV9jb3VudCArICIgY29tcGxldGUsICIKKyAgICAgICAgICAgICAg
ICAgICAgKyB0ZXN0cy5udW1fcGVuZGluZyArICIgcmVtYWluIjsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgfQorICAgIH07CisKKyAgICBPdXRwdXQucHJvdG90eXBlLnNob3dfcmVzdWx0cyA9IGZ1
bmN0aW9uICh0ZXN0cywgaGFybmVzc19zdGF0dXMpCisgICAgeworICAgICAgICBpZiAodGhpcy5w
aGFzZSA+PSB0aGlzLkNPTVBMRVRFKSB7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0K
KyAgICAgICAgaWYgKCF0aGlzLmVuYWJsZWQpIHsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAg
ICAgfQorICAgICAgICBpZiAoIXRoaXMub3V0cHV0X25vZGUpIHsKKyAgICAgICAgICAgIHRoaXMu
cmVzb2x2ZV9sb2coKTsKKyAgICAgICAgfQorICAgICAgICB0aGlzLnBoYXNlID0gdGhpcy5DT01Q
TEVURTsKKworICAgICAgICB2YXIgbG9nID0gdGhpcy5vdXRwdXRfbm9kZTsKKyAgICAgICAgaWYg
KCFsb2cpIHsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICB2YXIgb3V0
cHV0X2RvY3VtZW50ID0gdGhpcy5vdXRwdXRfZG9jdW1lbnQ7CisKKyAgICAgICAgd2hpbGUgKGxv
Zy5sYXN0Q2hpbGQpIHsKKyAgICAgICAgICAgIGxvZy5yZW1vdmVDaGlsZChsb2cubGFzdENoaWxk
KTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChzY3JpcHRfcHJlZml4ICE9IG51bGwpIHsKKyAg
ICAgICAgICAgIHZhciBzdHlsZXNoZWV0ID0gb3V0cHV0X2RvY3VtZW50LmNyZWF0ZUVsZW1lbnRO
Uyh4aHRtbF9ucywgImxpbmsiKTsKKyAgICAgICAgICAgIHN0eWxlc2hlZXQuc2V0QXR0cmlidXRl
KCJyZWwiLCAic3R5bGVzaGVldCIpOworICAgICAgICAgICAgc3R5bGVzaGVldC5zZXRBdHRyaWJ1
dGUoImhyZWYiLCBzY3JpcHRfcHJlZml4ICsgInRlc3RoYXJuZXNzLmNzcyIpOworICAgICAgICAg
ICAgdmFyIGhlYWRzID0gb3V0cHV0X2RvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCJoZWFk
Iik7CisgICAgICAgICAgICBpZiAoaGVhZHMubGVuZ3RoKSB7CisgICAgICAgICAgICAgICAgaGVh
ZHNbMF0uYXBwZW5kQ2hpbGQoc3R5bGVzaGVldCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0K
KworICAgICAgICB2YXIgc3RhdHVzX3RleHRfaGFybmVzcyA9IHt9OworICAgICAgICBzdGF0dXNf
dGV4dF9oYXJuZXNzW2hhcm5lc3Nfc3RhdHVzLk9LXSA9ICJPSyI7CisgICAgICAgIHN0YXR1c190
ZXh0X2hhcm5lc3NbaGFybmVzc19zdGF0dXMuRVJST1JdID0gIkVycm9yIjsKKyAgICAgICAgc3Rh
dHVzX3RleHRfaGFybmVzc1toYXJuZXNzX3N0YXR1cy5USU1FT1VUXSA9ICJUaW1lb3V0IjsKKwor
ICAgICAgICB2YXIgc3RhdHVzX3RleHQgPSB7fTsKKyAgICAgICAgc3RhdHVzX3RleHRbVGVzdC5w
cm90b3R5cGUuUEFTU10gPSAiUGFzcyI7CisgICAgICAgIHN0YXR1c190ZXh0W1Rlc3QucHJvdG90
eXBlLkZBSUxdID0gIkZhaWwiOworICAgICAgICBzdGF0dXNfdGV4dFtUZXN0LnByb3RvdHlwZS5U
SU1FT1VUXSA9ICJUaW1lb3V0IjsKKyAgICAgICAgc3RhdHVzX3RleHRbVGVzdC5wcm90b3R5cGUu
Tk9UUlVOXSA9ICJOb3QgUnVuIjsKKworICAgICAgICB2YXIgc3RhdHVzX251bWJlciA9IHt9Owor
ICAgICAgICBmb3JFYWNoKHRlc3RzLAorICAgICAgICAgICAgICAgIGZ1bmN0aW9uKHRlc3QpIHsK
KyAgICAgICAgICAgICAgICAgICAgdmFyIHN0YXR1cyA9IHN0YXR1c190ZXh0W3Rlc3Quc3RhdHVz
XTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHN0YXR1c19udW1iZXIuaGFzT3duUHJvcGVydHko
c3RhdHVzKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgc3RhdHVzX251bWJlcltzdGF0dXNd
ICs9IDE7CisgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAg
ICAgICBzdGF0dXNfbnVtYmVyW3N0YXR1c10gPSAxOworICAgICAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICAgICAgfSk7CisKKyAgICAgICAgZnVuY3Rpb24gc3RhdHVzX2NsYXNzKHN0YXR1
cykKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIHN0YXR1cy5yZXBsYWNlKC9ccy9nLCAn
JykudG9Mb3dlckNhc2UoKTsKKyAgICAgICAgfQorCisgICAgICAgIHZhciBzdW1tYXJ5X3RlbXBs
YXRlID0gWyJzZWN0aW9uIiwgeyJpZCI6InN1bW1hcnkifSwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgWyJoMiIsIHt9LCAiU3VtbWFyeSJdLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBmdW5jdGlvbih2YXJzKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaGFybmVzc19zdGF0
dXMuc3RhdHVzID09PSBoYXJuZXNzX3N0YXR1cy5PSykgeworICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHJldHVybiBudWxsOworICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIg
c3RhdHVzID0gc3RhdHVzX3RleHRfaGFybmVzc1toYXJuZXNzX3N0YXR1cy5zdGF0dXNdOworICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHJ2ID0gW1sicCIsIHsiY2xhc3Mi
OnN0YXR1c19jbGFzcyhzdGF0dXMpfV1dOworCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBpZiAoaGFybmVzc19zdGF0dXMuc3RhdHVzID09PSBoYXJuZXNzX3N0YXR1cy5FUlJP
UikgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJ2WzBdLnB1c2go
Ikhhcm5lc3MgZW5jb3VudGVyZWQgYW4gZXJyb3I6Iik7CisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgcnYucHVzaChbInByZSIsIHt9LCBoYXJuZXNzX3N0YXR1cy5tZXNz
YWdlXSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGhh
cm5lc3Nfc3RhdHVzLnN0YXR1cyA9PT0gaGFybmVzc19zdGF0dXMuVElNRU9VVCkgeworICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJ2WzBdLnB1c2goIkhhcm5lc3MgdGlt
ZWQgb3V0LiIpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBydlswXS5wdXNoKCJIYXJu
ZXNzIGdvdCBhbiB1bmV4cGVjdGVkIHN0YXR1cy4iKTsKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0
dXJuIHJ2OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBbInAiLCB7fSwgIkZvdW5kICR7bnVtX3Rlc3RzfSB0ZXN0cyJd
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbih2YXJzKSB7CisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgcnYgPSBbWyJkaXYiLCB7fV1dOwor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGkgPSAwOworICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgd2hpbGUgKHN0YXR1c190ZXh0Lmhhc093blByb3Bl
cnR5KGkpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHN0
YXR1c19udW1iZXIuaGFzT3duUHJvcGVydHkoc3RhdHVzX3RleHRbaV0pKSB7CisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBzdGF0dXMgPSBzdGF0dXNfdGV4
dFtpXTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcnZbMF0u
cHVzaChbImRpdiIsIHsiY2xhc3MiOnN0YXR1c19jbGFzcyhzdGF0dXMpfSwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWyJsYWJlbCIsIHt9
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgWyJpbnB1dCIsIHt0eXBlOiJjaGVja2JveCIsIGNoZWNrZWQ6ImNoZWNrZWQifV0sCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0
dXNfbnVtYmVyW3N0YXR1c10gKyAiICIgKyBzdGF0dXNdXSk7CisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGkrKzsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBydjsKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgfV07CisKKyAgICAgICAgbG9nLmFwcGVuZENoaWxkKHJlbmRlcihz
dW1tYXJ5X3RlbXBsYXRlLCB7bnVtX3Rlc3RzOnRlc3RzLmxlbmd0aH0sIG91dHB1dF9kb2N1bWVu
dCkpOworCisgICAgICAgIGZvckVhY2gob3V0cHV0X2RvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwo
InNlY3Rpb24jc3VtbWFyeSBsYWJlbCIpLAorICAgICAgICAgICAgICAgIGZ1bmN0aW9uKGVsZW1l
bnQpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBvbl9ldmVudChlbGVt
ZW50LCAiY2xpY2siLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbihlKQor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBpZiAob3V0cHV0X2RvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJyZXN1bHRzIikgPT09
IG51bGwpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlLnByZXZlbnRE
ZWZhdWx0KCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgdmFyIHJlc3VsdF9jbGFzcyA9IGVsZW1lbnQucGFyZW50Tm9kZS5nZXRBdHRy
aWJ1dGUoImNsYXNzIik7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgc3R5
bGVfZWxlbWVudCA9IG91dHB1dF9kb2N1bWVudC5xdWVyeVNlbGVjdG9yKCJzdHlsZSNoaWRlLSIg
KyByZXN1bHRfY2xhc3MpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGlu
cHV0X2VsZW1lbnQgPSBlbGVtZW50LnF1ZXJ5U2VsZWN0b3IoImlucHV0Iik7CisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXN0eWxlX2VsZW1lbnQgJiYgIWlucHV0X2VsZW1l
bnQuY2hlY2tlZCkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0eWxl
X2VsZW1lbnQgPSBvdXRwdXRfZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKHhodG1sX25zLCAic3R5
bGUiKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHlsZV9lbGVtZW50
LmlkID0gImhpZGUtIiArIHJlc3VsdF9jbGFzczsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBzdHlsZV9lbGVtZW50LnRleHRDb250ZW50ID0gInRhYmxlI3Jlc3VsdHMgPiB0
Ym9keSA+IHRyLiIrcmVzdWx0X2NsYXNzKyJ7ZGlzcGxheTpub25lfSI7CisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgb3V0cHV0X2RvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQo
c3R5bGVfZWxlbWVudCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Ug
aWYgKHN0eWxlX2VsZW1lbnQgJiYgaW5wdXRfZWxlbWVudC5jaGVja2VkKSB7CisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgc3R5bGVfZWxlbWVudC5wYXJlbnROb2RlLnJlbW92
ZUNoaWxkKHN0eWxlX2VsZW1lbnQpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgICAgICB9KTsK
KworICAgICAgICAvLyBUaGlzIHVzZSBvZiBpbm5lckhUTUwgcGx1cyBtYW51YWwgZXNjYXBpbmcg
aXMgbm90IHJlY29tbWVuZGVkIGluCisgICAgICAgIC8vIGdlbmVyYWwsIGJ1dCBpcyBuZWNlc3Nh
cnkgaGVyZSBmb3IgcGVyZm9ybWFuY2UuICBVc2luZyB0ZXh0Q29udGVudAorICAgICAgICAvLyBv
biBlYWNoIGluZGl2aWR1YWwgPHRkPiBhZGRzIHRlbnMgb2Ygc2Vjb25kcyBvZiBleGVjdXRpb24g
dGltZSBmb3IKKyAgICAgICAgLy8gbGFyZ2UgdGVzdCBzdWl0ZXMgKHRlbnMgb2YgdGhvdXNhbmRz
IG9mIHRlc3RzKS4KKyAgICAgICAgZnVuY3Rpb24gZXNjYXBlX2h0bWwocykKKyAgICAgICAgewor
ICAgICAgICAgICAgcmV0dXJuIHMucmVwbGFjZSgvXCYvZywgIiZhbXA7IikKKyAgICAgICAgICAg
ICAgICAucmVwbGFjZSgvPC9nLCAiJmx0OyIpCisgICAgICAgICAgICAgICAgLnJlcGxhY2UoLyIv
ZywgIiZxdW90OyIpCisgICAgICAgICAgICAgICAgLnJlcGxhY2UoLycvZywgIiYjMzk7Iik7Cisg
ICAgICAgIH0KKworICAgICAgICBmdW5jdGlvbiBoYXNfYXNzZXJ0aW9ucygpCisgICAgICAgIHsK
KyAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGVzdHMubGVuZ3RoOyBpKyspIHsKKyAg
ICAgICAgICAgICAgICBpZiAodGVzdHNbaV0ucHJvcGVydGllcy5oYXNPd25Qcm9wZXJ0eSgiYXNz
ZXJ0IikpIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9
CisKKyAgICAgICAgZnVuY3Rpb24gZ2V0X2Fzc2VydGlvbih0ZXN0KQorICAgICAgICB7CisgICAg
ICAgICAgICBpZiAodGVzdC5wcm9wZXJ0aWVzLmhhc093blByb3BlcnR5KCJhc3NlcnQiKSkgewor
ICAgICAgICAgICAgICAgIGlmIChBcnJheS5pc0FycmF5KHRlc3QucHJvcGVydGllcy5hc3NlcnQp
KSB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiB0ZXN0LnByb3BlcnRpZXMuYXNzZXJ0Lmpv
aW4oJyAnKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgcmV0dXJuIHRlc3Qu
cHJvcGVydGllcy5hc3NlcnQ7CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4gJyc7
CisgICAgICAgIH0KKworICAgICAgICBsb2cuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlRWxl
bWVudE5TKHhodG1sX25zLCAic2VjdGlvbiIpKTsKKyAgICAgICAgdmFyIGFzc2VydGlvbnMgPSBo
YXNfYXNzZXJ0aW9ucygpOworICAgICAgICB2YXIgaHRtbCA9ICI8aDI+RGV0YWlsczwvaDI+PHRh
YmxlIGlkPSdyZXN1bHRzJyAiICsgKGFzc2VydGlvbnMgPyAiY2xhc3M9J2Fzc2VydGlvbnMnIiA6
ICIiICkgKyAiPiIKKyAgICAgICAgICAgICsgIjx0aGVhZD48dHI+PHRoPlJlc3VsdDwvdGg+PHRo
PlRlc3QgTmFtZTwvdGg+IgorICAgICAgICAgICAgKyAoYXNzZXJ0aW9ucyA/ICI8dGg+QXNzZXJ0
aW9uPC90aD4iIDogIiIpCisgICAgICAgICAgICArICI8dGg+TWVzc2FnZTwvdGg+PC90cj48L3Ro
ZWFkPiIKKyAgICAgICAgICAgICsgIjx0Ym9keT4iOworICAgICAgICBmb3IgKHZhciBpID0gMDsg
aSA8IHRlc3RzLmxlbmd0aDsgaSsrKSB7CisgICAgICAgICAgICBodG1sICs9ICc8dHIgY2xhc3M9
IicKKyAgICAgICAgICAgICAgICArIGVzY2FwZV9odG1sKHN0YXR1c19jbGFzcyhzdGF0dXNfdGV4
dFt0ZXN0c1tpXS5zdGF0dXNdKSkKKyAgICAgICAgICAgICAgICArICciPjx0ZD4nCisgICAgICAg
ICAgICAgICAgKyBlc2NhcGVfaHRtbChzdGF0dXNfdGV4dFt0ZXN0c1tpXS5zdGF0dXNdKQorICAg
ICAgICAgICAgICAgICsgIjwvdGQ+PHRkPiIKKyAgICAgICAgICAgICAgICArIGVzY2FwZV9odG1s
KHRlc3RzW2ldLm5hbWUpCisgICAgICAgICAgICAgICAgKyAiPC90ZD48dGQ+IgorICAgICAgICAg
ICAgICAgICsgKGFzc2VydGlvbnMgPyBlc2NhcGVfaHRtbChnZXRfYXNzZXJ0aW9uKHRlc3RzW2ld
KSkgKyAiPC90ZD48dGQ+IiA6ICIiKQorICAgICAgICAgICAgICAgICsgZXNjYXBlX2h0bWwodGVz
dHNbaV0ubWVzc2FnZSA/IHRlc3RzW2ldLm1lc3NhZ2UgOiAiICIpCisgICAgICAgICAgICAgICAg
KyAiPC90ZD48L3RyPiI7CisgICAgICAgIH0KKyAgICAgICAgaHRtbCArPSAiPC90Ym9keT48L3Rh
YmxlPiI7CisgICAgICAgIHRyeSB7CisgICAgICAgICAgICBsb2cubGFzdENoaWxkLmlubmVySFRN
TCA9IGh0bWw7CisgICAgICAgIH0gY2F0Y2ggKGUpIHsKKyAgICAgICAgICAgIGxvZy5hcHBlbmRD
aGlsZChkb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoeGh0bWxfbnMsICJwIikpCisgICAgICAgICAg
ICAgICAudGV4dENvbnRlbnQgPSAiU2V0dGluZyBpbm5lckhUTUwgZm9yIHRoZSBsb2cgdGhyZXcg
YW4gZXhjZXB0aW9uLiI7CisgICAgICAgICAgICBsb2cuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3Jl
YXRlRWxlbWVudE5TKHhodG1sX25zLCAicHJlIikpCisgICAgICAgICAgICAgICAudGV4dENvbnRl
bnQgPSBodG1sOworICAgICAgICB9CisgICAgfTsKKworICAgIHZhciBvdXRwdXQgPSBuZXcgT3V0
cHV0KCk7CisgICAgYWRkX3N0YXJ0X2NhbGxiYWNrKGZ1bmN0aW9uIChwcm9wZXJ0aWVzKSB7b3V0
cHV0LmluaXQocHJvcGVydGllcyk7fSk7CisgICAgYWRkX3Jlc3VsdF9jYWxsYmFjayhmdW5jdGlv
biAodGVzdCkge291dHB1dC5zaG93X3N0YXR1cyh0ZXN0cyk7fSk7CisgICAgYWRkX2NvbXBsZXRp
b25fY2FsbGJhY2soZnVuY3Rpb24gKHRlc3RzLCBoYXJuZXNzX3N0YXR1cykge291dHB1dC5zaG93
X3Jlc3VsdHModGVzdHMsIGhhcm5lc3Nfc3RhdHVzKTt9KTsKKworICAgIC8qCisgICAgICogVGVt
cGxhdGUgY29kZQorICAgICAqCisgICAgICogQSB0ZW1wbGF0ZSBpcyBqdXN0IGEgamF2YXNjcmlw
dCBzdHJ1Y3R1cmUuIEFuIGVsZW1lbnQgaXMgcmVwcmVzZW50ZWQgYXM6CisgICAgICoKKyAgICAg
KiBbdGFnX25hbWUsIHthdHRyX25hbWU6YXR0cl92YWx1ZX0sIGNoaWxkMSwgY2hpbGQyXQorICAg
ICAqCisgICAgICogdGhlIGNoaWxkcmVuIGNhbiBlaXRoZXIgYmUgc3RyaW5ncyAod2hpY2ggYWN0
IGxpa2UgdGV4dCBub2RlcyksIG90aGVyIHRlbXBsYXRlcyBvcgorICAgICAqIGZ1bmN0aW9ucyAo
c2VlIGJlbG93KQorICAgICAqCisgICAgICogQSB0ZXh0IG5vZGUgaXMgcmVwcmVzZW50ZWQgYXMK
KyAgICAgKgorICAgICAqIFsie3RleHR9IiwgdmFsdWVdCisgICAgICoKKyAgICAgKiBTdHJpbmcg
dmFsdWVzIGhhdmUgYSBzaW1wbGUgc3Vic3RpdHV0aW9uIHN5bnRheDsgJHtmb299IHJlcHJlc2Vu
dHMgYSB2YXJpYWJsZSBmb28uCisgICAgICoKKyAgICAgKiBJdCBpcyBwb3NzaWJsZSB0byBlbWJl
ZCBsb2dpYyBpbiB0ZW1wbGF0ZXMgYnkgdXNpbmcgYSBmdW5jdGlvbiBpbiBhIHBsYWNlIHdoZXJl
IGEKKyAgICAgKiBub2RlIHdvdWxkIHVzdWFsbHkgZ28uIFRoZSBmdW5jdGlvbiBtdXN0IGVpdGhl
ciByZXR1cm4gcGFydCBvZiBhIHRlbXBsYXRlIG9yIG51bGwuCisgICAgICoKKyAgICAgKiBJbiBj
YXNlcyB3aGVyZSBhIHNldCBvZiBub2RlcyBhcmUgcmVxdWlyZWQgYXMgb3V0cHV0IHJhdGhlciB0
aGFuIGEgc2luZ2xlIG5vZGUKKyAgICAgKiB3aXRoIGNoaWxkcmVuIGl0IGlzIHBvc3NpYmxlIHRv
IGp1c3QgdXNlIGEgbGlzdAorICAgICAqIFtub2RlMSwgbm9kZTIsIG5vZGUzXQorICAgICAqCisg
ICAgICogVXNhZ2U6CisgICAgICoKKyAgICAgKiByZW5kZXIodGVtcGxhdGUsIHN1YnN0aXR1dGlv
bnMpIC0gdGFrZSBhIHRlbXBsYXRlIGFuZCBhbiBvYmplY3QgbWFwcGluZworICAgICAqIHZhcmlh
YmxlIG5hbWVzIHRvIHBhcmFtZXRlcnMgYW5kIHJldHVybiBlaXRoZXIgYSBET00gbm9kZSBvciBh
IGxpc3Qgb2YgRE9NIG5vZGVzCisgICAgICoKKyAgICAgKiBzdWJzdGl0dXRlKHRlbXBsYXRlLCBz
dWJzdGl0dXRpb25zKSAtIHRha2UgYSB0ZW1wbGF0ZSBhbmQgdmFyaWFibGUgbWFwcGluZyBvYmpl
Y3QsCisgICAgICogbWFrZSB0aGUgdmFyaWFibGUgc3Vic3RpdHV0aW9ucyBhbmQgcmV0dXJuIHRo
ZSBzdWJzdGl0dXRlZCB0ZW1wbGF0ZQorICAgICAqCisgICAgICovCisKKyAgICBmdW5jdGlvbiBp
c19zaW5nbGVfbm9kZSh0ZW1wbGF0ZSkKKyAgICB7CisgICAgICAgIHJldHVybiB0eXBlb2YgdGVt
cGxhdGVbMF0gPT09ICJzdHJpbmciOworICAgIH0KKworICAgIGZ1bmN0aW9uIHN1YnN0aXR1dGUo
dGVtcGxhdGUsIHN1YnN0aXR1dGlvbnMpCisgICAgeworICAgICAgICBpZiAodHlwZW9mIHRlbXBs
YXRlID09PSAiZnVuY3Rpb24iKSB7CisgICAgICAgICAgICB2YXIgcmVwbGFjZW1lbnQgPSB0ZW1w
bGF0ZShzdWJzdGl0dXRpb25zKTsKKyAgICAgICAgICAgIGlmICghcmVwbGFjZW1lbnQpIHsKKyAg
ICAgICAgICAgICAgICByZXR1cm4gbnVsbDsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAg
cmV0dXJuIHN1YnN0aXR1dGUocmVwbGFjZW1lbnQsIHN1YnN0aXR1dGlvbnMpOworICAgICAgICB9
CisKKyAgICAgICAgaWYgKGlzX3NpbmdsZV9ub2RlKHRlbXBsYXRlKSkgeworICAgICAgICAgICAg
cmV0dXJuIHN1YnN0aXR1dGVfc2luZ2xlKHRlbXBsYXRlLCBzdWJzdGl0dXRpb25zKTsKKyAgICAg
ICAgfQorCisgICAgICAgIHJldHVybiBmaWx0ZXIobWFwKHRlbXBsYXRlLCBmdW5jdGlvbih4KSB7
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gc3Vic3RpdHV0ZSh4LCBzdWJz
dGl0dXRpb25zKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgfSksIGZ1bmN0aW9uKHgpIHty
ZXR1cm4geCAhPT0gbnVsbDt9KTsKKyAgICB9CisKKyAgICBmdW5jdGlvbiBzdWJzdGl0dXRlX3Np
bmdsZSh0ZW1wbGF0ZSwgc3Vic3RpdHV0aW9ucykKKyAgICB7CisgICAgICAgIHZhciBzdWJzdGl0
dXRpb25fcmUgPSAvXCR7KFteIH1dKil9L2c7CisKKyAgICAgICAgZnVuY3Rpb24gZG9fc3Vic3Rp
dHV0aW9uKGlucHV0KSB7CisgICAgICAgICAgICB2YXIgY29tcG9uZW50cyA9IGlucHV0LnNwbGl0
KHN1YnN0aXR1dGlvbl9yZSk7CisgICAgICAgICAgICB2YXIgcnYgPSBbXTsKKyAgICAgICAgICAg
IGZvciAodmFyIGkgPSAwOyBpIDwgY29tcG9uZW50cy5sZW5ndGg7IGkgKz0gMikgeworICAgICAg
ICAgICAgICAgIHJ2LnB1c2goY29tcG9uZW50c1tpXSk7CisgICAgICAgICAgICAgICAgaWYgKGNv
bXBvbmVudHNbaSArIDFdKSB7CisgICAgICAgICAgICAgICAgICAgIHJ2LnB1c2goU3RyaW5nKHN1
YnN0aXR1dGlvbnNbY29tcG9uZW50c1tpICsgMV1dKSk7CisgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJuIHJ2OworICAgICAgICB9CisKKyAgICAgICAg
dmFyIHJ2ID0gW107CisgICAgICAgIHJ2LnB1c2goZG9fc3Vic3RpdHV0aW9uKFN0cmluZyh0ZW1w
bGF0ZVswXSkpLmpvaW4oIiIpKTsKKworICAgICAgICBpZiAodGVtcGxhdGVbMF0gPT09ICJ7dGV4
dH0iKSB7CisgICAgICAgICAgICBzdWJzdGl0dXRlX2NoaWxkcmVuKHRlbXBsYXRlLnNsaWNlKDEp
LCBydik7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBzdWJzdGl0dXRlX2F0dHJzKHRl
bXBsYXRlWzFdLCBydik7CisgICAgICAgICAgICBzdWJzdGl0dXRlX2NoaWxkcmVuKHRlbXBsYXRl
LnNsaWNlKDIpLCBydik7CisgICAgICAgIH0KKworICAgICAgICBmdW5jdGlvbiBzdWJzdGl0dXRl
X2F0dHJzKGF0dHJzLCBydikKKyAgICAgICAgeworICAgICAgICAgICAgcnZbMV0gPSB7fTsKKyAg
ICAgICAgICAgIGZvciAodmFyIG5hbWUgaW4gdGVtcGxhdGVbMV0pIHsKKyAgICAgICAgICAgICAg
ICBpZiAoYXR0cnMuaGFzT3duUHJvcGVydHkobmFtZSkpIHsKKyAgICAgICAgICAgICAgICAgICAg
dmFyIG5ld19uYW1lID0gZG9fc3Vic3RpdHV0aW9uKG5hbWUpLmpvaW4oIiIpOworICAgICAgICAg
ICAgICAgICAgICB2YXIgbmV3X3ZhbHVlID0gZG9fc3Vic3RpdHV0aW9uKGF0dHJzW25hbWVdKS5q
b2luKCIiKTsKKyAgICAgICAgICAgICAgICAgICAgcnZbMV1bbmV3X25hbWVdID0gbmV3X3ZhbHVl
OworICAgICAgICAgICAgICAgIH07CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAg
ICBmdW5jdGlvbiBzdWJzdGl0dXRlX2NoaWxkcmVuKGNoaWxkcmVuLCBydikKKyAgICAgICAgewor
ICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBjaGlsZHJlbi5sZW5ndGg7IGkrKykgewor
ICAgICAgICAgICAgICAgIGlmIChjaGlsZHJlbltpXSBpbnN0YW5jZW9mIE9iamVjdCkgeworICAg
ICAgICAgICAgICAgICAgICB2YXIgcmVwbGFjZW1lbnQgPSBzdWJzdGl0dXRlKGNoaWxkcmVuW2ld
LCBzdWJzdGl0dXRpb25zKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHJlcGxhY2VtZW50ICE9
PSBudWxsKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaXNfc2luZ2xlX25vZGUocmVw
bGFjZW1lbnQpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcnYucHVzaChyZXBsYWNl
bWVudCk7CisgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGV4dGVuZChydiwgcmVwbGFjZW1lbnQpOworICAgICAgICAgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfSBlbHNlIHsK
KyAgICAgICAgICAgICAgICAgICAgZXh0ZW5kKHJ2LCBkb19zdWJzdGl0dXRpb24oU3RyaW5nKGNo
aWxkcmVuW2ldKSkpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIHJldHVybiBydjsKKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiBydjsKKyAgICB9CisK
KyAgICBmdW5jdGlvbiBtYWtlX2RvbV9zaW5nbGUodGVtcGxhdGUsIGRvYykKKyAgICB7CisgICAg
ICAgIHZhciBvdXRwdXRfZG9jdW1lbnQgPSBkb2MgfHwgZG9jdW1lbnQ7CisgICAgICAgIGlmICh0
ZW1wbGF0ZVswXSA9PT0gInt0ZXh0fSIpIHsKKyAgICAgICAgICAgIHZhciBlbGVtZW50ID0gb3V0
cHV0X2RvY3VtZW50LmNyZWF0ZVRleHROb2RlKCIiKTsKKyAgICAgICAgICAgIGZvciAodmFyIGkg
PSAxOyBpIDwgdGVtcGxhdGUubGVuZ3RoOyBpKyspIHsKKyAgICAgICAgICAgICAgICBlbGVtZW50
LmRhdGEgKz0gdGVtcGxhdGVbaV07CisgICAgICAgICAgICB9CisgICAgICAgIH0gZWxzZSB7Cisg
ICAgICAgICAgICB2YXIgZWxlbWVudCA9IG91dHB1dF9kb2N1bWVudC5jcmVhdGVFbGVtZW50TlMo
eGh0bWxfbnMsIHRlbXBsYXRlWzBdKTsKKyAgICAgICAgICAgIGZvciAodmFyIG5hbWUgaW4gdGVt
cGxhdGVbMV0pIHsKKyAgICAgICAgICAgICAgICBpZiAodGVtcGxhdGVbMV0uaGFzT3duUHJvcGVy
dHkobmFtZSkpIHsKKyAgICAgICAgICAgICAgICAgICAgZWxlbWVudC5zZXRBdHRyaWJ1dGUobmFt
ZSwgdGVtcGxhdGVbMV1bbmFtZV0pOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIGZvciAodmFyIGkgPSAyOyBpIDwgdGVtcGxhdGUubGVuZ3RoOyBpKyspIHsK
KyAgICAgICAgICAgICAgICBpZiAodGVtcGxhdGVbaV0gaW5zdGFuY2VvZiBPYmplY3QpIHsKKyAg
ICAgICAgICAgICAgICAgICAgdmFyIHN1Yl9lbGVtZW50ID0gbWFrZV9kb20odGVtcGxhdGVbaV0p
OworICAgICAgICAgICAgICAgICAgICBlbGVtZW50LmFwcGVuZENoaWxkKHN1Yl9lbGVtZW50KTsK
KyAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICB2YXIgdGV4dF9u
b2RlID0gb3V0cHV0X2RvY3VtZW50LmNyZWF0ZVRleHROb2RlKHRlbXBsYXRlW2ldKTsKKyAgICAg
ICAgICAgICAgICAgICAgZWxlbWVudC5hcHBlbmRDaGlsZCh0ZXh0X25vZGUpOworICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiBlbGVt
ZW50OworICAgIH0KKworCisKKyAgICBmdW5jdGlvbiBtYWtlX2RvbSh0ZW1wbGF0ZSwgc3Vic3Rp
dHV0aW9ucywgb3V0cHV0X2RvY3VtZW50KQorICAgIHsKKyAgICAgICAgaWYgKGlzX3NpbmdsZV9u
b2RlKHRlbXBsYXRlKSkgeworICAgICAgICAgICAgcmV0dXJuIG1ha2VfZG9tX3NpbmdsZSh0ZW1w
bGF0ZSwgb3V0cHV0X2RvY3VtZW50KTsKKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiBtYXAo
dGVtcGxhdGUsIGZ1bmN0aW9uKHgpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG1h
a2VfZG9tX3NpbmdsZSh4LCBvdXRwdXRfZG9jdW1lbnQpOworICAgICAgICAgICAgICAgICAgIH0p
OworICAgIH0KKworICAgIGZ1bmN0aW9uIHJlbmRlcih0ZW1wbGF0ZSwgc3Vic3RpdHV0aW9ucywg
b3V0cHV0X2RvY3VtZW50KQorICAgIHsKKyAgICAgICAgcmV0dXJuIG1ha2VfZG9tKHN1YnN0aXR1
dGUodGVtcGxhdGUsIHN1YnN0aXR1dGlvbnMpLCBvdXRwdXRfZG9jdW1lbnQpOworICAgIH0KKwor
ICAgIC8qCisgICAgICogVXRpbGl0eSBmdW5jaW9ucworICAgICAqLworICAgIGZ1bmN0aW9uIGFz
c2VydChleHBlY3RlZF90cnVlLCBmdW5jdGlvbl9uYW1lLCBkZXNjcmlwdGlvbiwgZXJyb3IsIHN1
YnN0aXR1dGlvbnMpCisgICAgeworICAgICAgICBpZiAoZXhwZWN0ZWRfdHJ1ZSAhPT0gdHJ1ZSkg
eworICAgICAgICAgICAgdGhyb3cgbmV3IEFzc2VydGlvbkVycm9yKG1ha2VfbWVzc2FnZShmdW5j
dGlvbl9uYW1lLCBkZXNjcmlwdGlvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgZXJyb3IsIHN1YnN0aXR1dGlvbnMpKTsKKyAgICAgICAgfQorICAg
IH0KKworICAgIGZ1bmN0aW9uIEFzc2VydGlvbkVycm9yKG1lc3NhZ2UpCisgICAgeworICAgICAg
ICB0aGlzLm1lc3NhZ2UgPSBtZXNzYWdlOworICAgIH0KKworICAgIGZ1bmN0aW9uIG1ha2VfbWVz
c2FnZShmdW5jdGlvbl9uYW1lLCBkZXNjcmlwdGlvbiwgZXJyb3IsIHN1YnN0aXR1dGlvbnMpCisg
ICAgeworICAgICAgICBmb3IgKHZhciBwIGluIHN1YnN0aXR1dGlvbnMpIHsKKyAgICAgICAgICAg
IGlmIChzdWJzdGl0dXRpb25zLmhhc093blByb3BlcnR5KHApKSB7CisgICAgICAgICAgICAgICAg
c3Vic3RpdHV0aW9uc1twXSA9IGZvcm1hdF92YWx1ZShzdWJzdGl0dXRpb25zW3BdKTsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICB2YXIgbm9kZV9mb3JtID0gc3Vic3RpdHV0ZShb
Int0ZXh0fSIsICIke2Z1bmN0aW9uX25hbWV9OiAke2Rlc2NyaXB0aW9ufSIgKyBlcnJvcl0sCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lcmdlKHtmdW5jdGlvbl9uYW1lOmZ1
bmN0aW9uX25hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBk
ZXNjcmlwdGlvbjooZGVzY3JpcHRpb24/ZGVzY3JpcHRpb24gKyAiICI6IiIpfSwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN1YnN0aXR1dGlvbnMpKTsKKyAgICAg
ICAgcmV0dXJuIG5vZGVfZm9ybS5zbGljZSgxKS5qb2luKCIiKTsKKyAgICB9CisKKyAgICBmdW5j
dGlvbiBmaWx0ZXIoYXJyYXksIGNhbGxhYmxlLCB0aGlzT2JqKSB7CisgICAgICAgIHZhciBydiA9
IFtdOworICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGFycmF5Lmxlbmd0aDsgaSsrKSB7Cisg
ICAgICAgICAgICBpZiAoYXJyYXkuaGFzT3duUHJvcGVydHkoaSkpIHsKKyAgICAgICAgICAgICAg
ICB2YXIgcGFzcyA9IGNhbGxhYmxlLmNhbGwodGhpc09iaiwgYXJyYXlbaV0sIGksIGFycmF5KTsK
KyAgICAgICAgICAgICAgICBpZiAocGFzcykgeworICAgICAgICAgICAgICAgICAgICBydi5wdXNo
KGFycmF5W2ldKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0K
KyAgICAgICAgcmV0dXJuIHJ2OworICAgIH0KKworICAgIGZ1bmN0aW9uIG1hcChhcnJheSwgY2Fs
bGFibGUsIHRoaXNPYmopCisgICAgeworICAgICAgICB2YXIgcnYgPSBbXTsKKyAgICAgICAgcnYu
bGVuZ3RoID0gYXJyYXkubGVuZ3RoOworICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGFycmF5
Lmxlbmd0aDsgaSsrKSB7CisgICAgICAgICAgICBpZiAoYXJyYXkuaGFzT3duUHJvcGVydHkoaSkp
IHsKKyAgICAgICAgICAgICAgICBydltpXSA9IGNhbGxhYmxlLmNhbGwodGhpc09iaiwgYXJyYXlb
aV0sIGksIGFycmF5KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICByZXR1cm4g
cnY7CisgICAgfQorCisgICAgZnVuY3Rpb24gZXh0ZW5kKGFycmF5LCBpdGVtcykKKyAgICB7Cisg
ICAgICAgIEFycmF5LnByb3RvdHlwZS5wdXNoLmFwcGx5KGFycmF5LCBpdGVtcyk7CisgICAgfQor
CisgICAgZnVuY3Rpb24gZm9yRWFjaCAoYXJyYXksIGNhbGxiYWNrLCB0aGlzT2JqKQorICAgIHsK
KyAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhcnJheS5sZW5ndGg7IGkrKykgeworICAgICAg
ICAgICAgaWYgKGFycmF5Lmhhc093blByb3BlcnR5KGkpKSB7CisgICAgICAgICAgICAgICAgY2Fs
bGJhY2suY2FsbCh0aGlzT2JqLCBhcnJheVtpXSwgaSwgYXJyYXkpOworICAgICAgICAgICAgfQor
ICAgICAgICB9CisgICAgfQorCisgICAgZnVuY3Rpb24gbWVyZ2UoYSxiKQorICAgIHsKKyAgICAg
ICAgdmFyIHJ2ID0ge307CisgICAgICAgIHZhciBwOworICAgICAgICBmb3IgKHAgaW4gYSkgewor
ICAgICAgICAgICAgcnZbcF0gPSBhW3BdOworICAgICAgICB9CisgICAgICAgIGZvciAocCBpbiBi
KSB7CisgICAgICAgICAgICBydltwXSA9IGJbcF07CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJu
IHJ2OworICAgIH0KKworICAgIGZ1bmN0aW9uIGV4cG9zZShvYmplY3QsIG5hbWUpCisgICAgewor
ICAgICAgICB2YXIgY29tcG9uZW50cyA9IG5hbWUuc3BsaXQoIi4iKTsKKyAgICAgICAgdmFyIHRh
cmdldCA9IHdpbmRvdzsKKyAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBjb21wb25lbnRzLmxl
bmd0aCAtIDE7IGkrKykgeworICAgICAgICAgICAgaWYgKCEoY29tcG9uZW50c1tpXSBpbiB0YXJn
ZXQpKSB7CisgICAgICAgICAgICAgICAgdGFyZ2V0W2NvbXBvbmVudHNbaV1dID0ge307CisgICAg
ICAgICAgICB9CisgICAgICAgICAgICB0YXJnZXQgPSB0YXJnZXRbY29tcG9uZW50c1tpXV07Cisg
ICAgICAgIH0KKyAgICAgICAgdGFyZ2V0W2NvbXBvbmVudHNbY29tcG9uZW50cy5sZW5ndGggLSAx
XV0gPSBvYmplY3Q7CisgICAgfQorCisgICAgZnVuY3Rpb24gZm9yRWFjaF93aW5kb3dzKGNhbGxi
YWNrKSB7CisgICAgICAgIC8vIEl0ZXJhdGUgb2YgdGhlIHRoZSB3aW5kb3dzIFtzZWxmIC4uLiB0
b3AsIG9wZW5lcl0uIFRoZSBjYWxsYmFjayBpcyBwYXNzZWQKKyAgICAgICAgLy8gdHdvIG9iamVj
dHMsIHRoZSBmaXJzdCBvbmUgaXMgdGhlIHdpbmRvd3Mgb2JqZWN0IGl0c2VsZiwgdGhlIHNlY29u
ZCBvbmUKKyAgICAgICAgLy8gaXMgYSBib29sZWFuIGluZGljYXRpbmcgd2hldGhlciBvciBub3Qg
aXRzIG9uIHRoZSBzYW1lIG9yaWdpbiBhcyB0aGUKKyAgICAgICAgLy8gY3VycmVudCB3aW5kb3cu
CisgICAgICAgIHZhciBjYWNoZSA9IGZvckVhY2hfd2luZG93cy5yZXN1bHRfY2FjaGU7CisgICAg
ICAgIGlmICghY2FjaGUpIHsKKyAgICAgICAgICAgIGNhY2hlID0gW1tzZWxmLCB0cnVlXV07Cisg
ICAgICAgICAgICB2YXIgdyA9IHNlbGY7CisgICAgICAgICAgICB2YXIgaSA9IDA7CisgICAgICAg
ICAgICB2YXIgc287CisgICAgICAgICAgICB2YXIgb3JpZ2lucyA9IGxvY2F0aW9uLmFuY2VzdG9y
T3JpZ2luczsKKyAgICAgICAgICAgIHdoaWxlICh3ICE9IHcucGFyZW50KSB7CisgICAgICAgICAg
ICAgICAgdyA9IHcucGFyZW50OworICAgICAgICAgICAgICAgIC8vIEluIFdlYktpdCwgY2FsbHMg
dG8gcGFyZW50IHdpbmRvd3MnIHByb3BlcnRpZXMgdGhhdCBhcmVuJ3Qgb24gdGhlIHNhbWUKKyAg
ICAgICAgICAgICAgICAvLyBvcmlnaW4gY2F1c2UgYW4gZXJyb3IgbWVzc2FnZSB0byBiZSBkaXNw
bGF5ZWQgaW4gdGhlIGVycm9yIGNvbnNvbGUgYnV0CisgICAgICAgICAgICAgICAgLy8gZG9uJ3Qg
dGhyb3cgYW4gZXhjZXB0aW9uLiBUaGlzIGlzIGEgZGV2aWF0aW9uIGZyb20gdGhlIGN1cnJlbnQg
SFRNTDUKKyAgICAgICAgICAgICAgICAvLyBzcGVjLiBTZWU6IGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD00MzUwNAorICAgICAgICAgICAgICAgIC8vIFRoZSBwcm9ibGVt
IHdpdGggV2ViS2l0J3MgYmVoYXZpb3IgaXMgdGhhdCBpdCBwb2xsdXRlcyB0aGUgZXJyb3IgY29u
c29sZQorICAgICAgICAgICAgICAgIC8vIHdpdGggZXJyb3IgbWVzc2FnZXMgdGhhdCBjYW4ndCBi
ZSBjYXVnaHQuCisgICAgICAgICAgICAgICAgLy8KKyAgICAgICAgICAgICAgICAvLyBUaGlzIGlz
c3VlIGNhbiBiZSBtaXRpZ2F0ZWQgYnkgcmVseWluZyBvbiB0aGUgKGZvciBub3cpIHByb3ByaWV0
YXJ5CisgICAgICAgICAgICAgICAgLy8gYGxvY2F0aW9uLmFuY2VzdG9yT3JpZ2luc2AgcHJvcGVy
dHkgd2hpY2ggcmV0dXJucyBhbiBvcmRlcmVkIGxpc3Qgb2YKKyAgICAgICAgICAgICAgICAvLyB0
aGUgb3JpZ2lucyBvZiBlbmNsb3Npbmcgd2luZG93cy4gU2VlOgorICAgICAgICAgICAgICAgIC8v
IGh0dHA6Ly90cmFjLndlYmtpdC5vcmcvY2hhbmdlc2V0LzExMzk0NS4KKyAgICAgICAgICAgICAg
ICBpZiAob3JpZ2lucykgeworICAgICAgICAgICAgICAgICAgICBzbyA9IChsb2NhdGlvbi5vcmln
aW4gPT0gb3JpZ2luc1tpXSk7CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAg
ICAgICAgICAgc28gPSBpc19zYW1lX29yaWdpbih3KTsKKyAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICAgICAgY2FjaGUucHVzaChbdywgc29dKTsKKyAgICAgICAgICAgICAgICBpKys7Cisg
ICAgICAgICAgICB9CisgICAgICAgICAgICB3ID0gd2luZG93Lm9wZW5lcjsKKyAgICAgICAgICAg
IGlmICh3KSB7CisgICAgICAgICAgICAgICAgLy8gd2luZG93Lm9wZW5lciBpc24ndCBpbmNsdWRl
ZCBpbiB0aGUgYGxvY2F0aW9uLmFuY2VzdG9yT3JpZ2luc2AgcHJvcC4KKyAgICAgICAgICAgICAg
ICAvLyBXZSdsbCBqdXN0IGhhdmUgdG8gZGVhbCB3aXRoIGEgc2ltcGxlIGNoZWNrIGFuZCBhbiBl
cnJvciBtc2cgb24gV2ViS2l0CisgICAgICAgICAgICAgICAgLy8gYnJvd3NlcnMgaW4gdGhpcyBj
YXNlLgorICAgICAgICAgICAgICAgIGNhY2hlLnB1c2goW3csIGlzX3NhbWVfb3JpZ2luKHcpXSk7
CisgICAgICAgICAgICB9CisgICAgICAgICAgICBmb3JFYWNoX3dpbmRvd3MucmVzdWx0X2NhY2hl
ID0gY2FjaGU7CisgICAgICAgIH0KKworICAgICAgICBmb3JFYWNoKGNhY2hlLAorICAgICAgICAg
ICAgICAgIGZ1bmN0aW9uKGEpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAg
ICBjYWxsYmFjay5hcHBseShudWxsLCBhKTsKKyAgICAgICAgICAgICAgICB9KTsKKyAgICB9CisK
KyAgICBmdW5jdGlvbiBpc19zYW1lX29yaWdpbih3KSB7CisgICAgICAgIHRyeSB7CisgICAgICAg
ICAgICAncmFuZG9tX3Byb3AnIGluIHc7CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAg
ICAgfSBjYXRjaCAoZSkgeworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9Cisg
ICAgfQorCisgICAgZnVuY3Rpb24gc3VwcG9ydHNfcG9zdF9tZXNzYWdlKHcpCisgICAgeworICAg
ICAgICB2YXIgc3VwcG9ydHM7CisgICAgICAgIHZhciB0eXBlOworICAgICAgICAvLyBHaXZlbiBJ
RSAgaW1wbGVtZW50cyBwb3N0TWVzc2FnZSBhY3Jvc3MgbmVzdGVkIGlmcmFtZXMgYnV0IG5vdCBh
Y3Jvc3MKKyAgICAgICAgLy8gd2luZG93cyBvciB0YWJzLCB5b3UgY2FuJ3QgaW5mZXIgY3Jvc3Mt
b3JpZ2luIGNvbW11bmljYXRpb24gZnJvbSB0aGUgcHJlc2VuY2UKKyAgICAgICAgLy8gb2YgcG9z
dE1lc3NhZ2Ugb24gdGhlIGN1cnJlbnQgd2luZG93IG9iamVjdCBvbmx5LgorICAgICAgICAvLwor
ICAgICAgICAvLyBUb3VjaGluZyB0aGUgcG9zdE1lc3NhZ2UgcHJvcCBvbiBhIHdpbmRvdyBjYW4g
dGhyb3cgaWYgdGhlIHdpbmRvdyBpcworICAgICAgICAvLyBub3QgZnJvbSB0aGUgc2FtZSBvcmln
aW4gQU5EIHBvc3QgbWVzc2FnZSBpcyBub3Qgc3VwcG9ydGVkIGluIHRoYXQKKyAgICAgICAgLy8g
YnJvd3Nlci4gU28ganVzdCBkb2luZyBhbiBleGlzdGVuY2UgdGVzdCBoZXJlIHdvbid0IGRvLCB5
b3UgYWxzbyBuZWVkCisgICAgICAgIC8vIHRvIHdyYXAgaXQgaW4gYSB0cnkuLmNhY3RoIGJsb2Nr
LgorICAgICAgICB0cnkgeworICAgICAgICAgICAgdHlwZSA9IHR5cGVvZiB3LnBvc3RNZXNzYWdl
OworICAgICAgICAgICAgaWYgKHR5cGUgPT09ICJmdW5jdGlvbiIpIHsKKyAgICAgICAgICAgICAg
ICBzdXBwb3J0cyA9IHRydWU7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIC8vIElFOCBz
dXBwb3J0cyBwb3N0TWVzc2FnZSwgYnV0IGltcGxlbWVudHMgaXQgYXMgYSBob3N0IG9iamVjdCB3
aGljaAorICAgICAgICAgICAgLy8gcmV0dXJucyAib2JqZWN0IiBhcyBpdHMgYHR5cGVvZmAuCisg
ICAgICAgICAgICBlbHNlIGlmICh0eXBlID09PSAib2JqZWN0IikgeworICAgICAgICAgICAgICAg
IHN1cHBvcnRzID0gdHJ1ZTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgLy8gVGhpcyBp
cyB0aGUgY2FzZSB3aGVyZSBwb3N0TWVzc2FnZSBpc24ndCBzdXBwb3J0ZWQgQU5EIGFjY2Vzc2lu
ZyBhCisgICAgICAgICAgICAvLyB3aW5kb3cgcHJvcGVydHkgYWNyb3NzIG9yaWdpbnMgZG9lcyBO
T1QgdGhyb3cgKGUuZy4gb2xkIFNhZmFyaSBicm93c2VyKS4KKyAgICAgICAgICAgIGVsc2Ugewor
ICAgICAgICAgICAgICAgIHN1cHBvcnRzID0gZmFsc2U7CisgICAgICAgICAgICB9CisgICAgICAg
IH0gY2F0Y2ggKGUpIHsKKyAgICAgICAgICAgIC8vIFRoaXMgaXMgdGhlIGNhc2Ugd2hlcmUgcG9z
dE1lc3NhZ2UgaXNuJ3Qgc3VwcG9ydGVkIEFORCBhY2Nlc3NpbmcgYQorICAgICAgICAgICAgLy8g
d2luZG93IHByb3BlcnR5IGFjcm9zcyBvcmlnaW5zIHRocm93cyAoZS5nLiBvbGQgRmlyZWZveCBi
cm93c2VyKS4KKyAgICAgICAgICAgIHN1cHBvcnRzID0gZmFsc2U7CisgICAgICAgIH0KKyAgICAg
ICAgcmV0dXJuIHN1cHBvcnRzOworICAgIH0KK30pKCk7CisvLyB2aW06IHNldCBleHBhbmR0YWIg
c2hpZnR3aWR0aD00IHRhYnN0b3A9NDoK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>234800</attachid>
            <date>2014-07-12 08:16:04 -0700</date>
            <delta_ts>2014-07-12 08:21:07 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-134852-20140712081546.patch</filename>
            <type>text/plain</type>
            <size>222845</size>
            <attacher name="Jer Noble">jer.noble</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTcxMDE3CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNGQ2YWZjNmE2NzdlY2Rk
ZmJlMzk3ZjYzNGUwN2FiZTZiNjM5MTczZC4uMjBhN2Y2MjBmNzRjYTFjYjRiNGViMmIwYjhiNDcw
ODhmMWI1N2I5MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSw1ICsxLDE0MCBAQAogMjAxNC0wNy0xMSAgSmVy
IE5vYmxlICA8amVyLm5vYmxlQGFwcGxlLmNvbT4KIAorICAgICAgICBbTVNFXSBodHRwL3Rlc3Rz
L21lZGlhL21lZGlhLXNvdXJjZS9tZWRpYXNvdXJjZS1kdXJhdGlvbi5odG1sIGlzIGZhaWxpbmcu
CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMzQ4NTIK
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBGaXhlcyB0
aGUgZm9sbG93aW5nIHRlc3RzOgorICAgICAgICBodHRwL3Rlc3RzL21lZGlhL21lZGlhLXNvdXJj
ZS9tZWRpYXNvdXJjZS1jb25maWctY2hhbmdlLW1wNC1hLWJpdHJhdGUuaHRtbAorICAgICAgICBo
dHRwL3Rlc3RzL21lZGlhL21lZGlhLXNvdXJjZS9tZWRpYXNvdXJjZS1jb25maWctY2hhbmdlLW1w
NC1hdi1hdWRpby1iaXRyYXRlLmh0bWwKKyAgICAgICAgaHR0cC90ZXN0cy9tZWRpYS9tZWRpYS1z
b3VyY2UvbWVkaWFzb3VyY2UtY29uZmlnLWNoYW5nZS1tcDQtYXYtdmlkZW8tYml0cmF0ZS5odG1s
CisgICAgICAgIGh0dHAvdGVzdHMvbWVkaWEvbWVkaWEtc291cmNlL21lZGlhc291cmNlLWNvbmZp
Zy1jaGFuZ2UtbXA0LXYtYml0cmF0ZS5odG1sCisgICAgICAgIGh0dHAvdGVzdHMvbWVkaWEvbWVk
aWEtc291cmNlL21lZGlhc291cmNlLWNvbmZpZy1jaGFuZ2UtbXA0LXYtZnJhbWVyYXRlLmh0bWwK
KyAgICAgICAgaHR0cC90ZXN0cy9tZWRpYS9tZWRpYS1zb3VyY2UvbWVkaWFzb3VyY2UtZHVyYXRp
b24uaHRtbAorICAgICAgICBodHRwL3Rlc3RzL21lZGlhL21lZGlhLXNvdXJjZS9tZWRpYXNvdXJj
ZS1wbGF5Lmh0bWwKKworICAgICAgICBUaGUgcHJpbWFyeSBjaGFuZ2UgbmVjZXNzYXJ5IHRvIGZp
eCB0aGUgbWVkaWFzb3VyY2UtZHVyYXRpb24uaHRtbCB0ZXN0IHdhcyB0byBhZGQgc3VwcG9ydAor
ICAgICAgICBmb3IgZGVsYXlpbmcgdGhlIGNvbXBsZXRpb24gb2YgYSBzZWVrIG9wZXJhdGlvbiB1
bnRpbCB0aGUgSFRNTE1lZGlhRWxlbWVudCdzIHJlYWR5U3RhdGUKKyAgICAgICAgcmlzZXMgdG8g
PiBIQVZFX0NVUlJFTlRfREFUQS4gVGhpcyBpcyBhY2NvbXBsaXNoZWQgYnkgbW9kaWZ5aW5nIE1l
ZGlhU291cmNlUHJpdmF0ZSB0byBoYXZlCisgICAgICAgIHdhaXRGb3JTZWVrQ29tcGxldGVkKCkg
YW5kIHNlZWtDb21wbGV0ZWQoKSB2aXJ0dWFsIG1ldGhvZHMuIFRoZXNlIGFyZSBjYWxsZWQgYnkg
TWVkaWFTb3VyY2UKKyAgICAgICAgd2hlbiBhIHNlZWsgb3BlcmF0aW9uIHJlc3VsdHMgaW4gdGhl
IGN1cnJlbnQgdGltZSBtb3Zpbmcgb3V0c2lkZSB0aGUgY3VycmVudGx5IGJ1ZmZlcmVkIHRpbWUK
KyAgICAgICAgcmFuZ2VzLCBhbmQgd2hlbiBhbiBhcHBlbmQgb3BlcmF0aW9uIHJlc3VsdHMgaW4g
dGhlIHJlYWR5U3RhdGUgY2hhbmdpbmcsIHJlc3BlY3RpdmVseS4KKworICAgICAgICBBIG51bWJl
ciBvZiBvdGhlciBkcml2ZS1ieSBmaXhlcyB3ZXJlIG5lY2Vzc2FyeSB0byBnZXQgdGhpcyB0ZXN0
IGZ1bGx5IHBhc3NpbmcsIGFzIG5vdGVkCisgICAgICAgIGJlbG93LgorCisgICAgICAgIE1ha2Ug
dGhlIE1lZGlhU291cmNlIHRoZSBwcmltYXJ5IG93bmVyIG9mIHRoZSBtZWRpYSdzIGR1cmF0aW9u
LCByYXRoZXIgdGhhbiB0aGUgTWVkaWFTb3VyY2VQcml2YXRlLgorICAgICAgICBNb3ZlIHRoZSBN
ZWRpYVNvdXJjZVByaXZhdGVDbGllbnQgcG9pbnRlciB0byB0aGUgTWVkaWFTb3VyY2VQcml2YXRl
IGZyb20gdGhlIE1lZGlhUGxheWVyUHJpdmF0ZSwgc28KKyAgICAgICAgdGhlIE1lZGlhU291cmNl
J3MgZHVyYXRpb24gY2FuIGJlIHJldHJpZXZlZC4gIFdoaWxlIHdlJ3JlIGF0IGl0LCBkbyB0aGUg
c2FtZSB0aGluZyBmb3IgYnVmZmVyZWQuCisKKyAgICAgICAgKiBNb2R1bGVzL21lZGlhc291cmNl
L01lZGlhU291cmNlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhU291cmNlOjpNZWRpYVNv
dXJjZSk6IEluaXRpYWxpemUgbV9kdXJhdGlvbi4KKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhU291
cmNlOjpkdXJhdGlvbik6IFNpbXBsZSBhY2Nlc3Nvci4KKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlh
U291cmNlOjpzZXREdXJhdGlvbkludGVybmFsKTogQnJpbmcgJ2R1cmF0aW9uIGNoYW5nZSBhbGdv
cml0aG0nIHVwIHRvIHNwZWMuCisgICAgICAgIChXZWJDb3JlOjpNZWRpYVNvdXJjZTo6c2V0UmVh
ZHlTdGF0ZSk6IFJlc2V0IG1fZHVyYXRpb24gb24gY2xvc2UuCisgICAgICAgICogTW9kdWxlcy9t
ZWRpYXNvdXJjZS9NZWRpYVNvdXJjZS5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL01l
ZGlhU291cmNlUHJpdmF0ZS5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRh
dGlvbi9vYmpjL01lZGlhUGxheWVyUHJpdmF0ZU1lZGlhU291cmNlQVZGT2JqQy5tbToKKyAgICAg
ICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZU1lZGlhU291cmNlQVZGT2JqQzo6bG9hZCk6
IERvIG5vdCBjYWxsIHNldFByaXZhdGVBbmRPcGVuKCkuCisgICAgICAgIChXZWJDb3JlOjpNZWRp
YVBsYXllclByaXZhdGVNZWRpYVNvdXJjZUFWRk9iakM6OmR1cmF0aW9uRG91YmxlKTogUGFzcyB0
aHJvdWdoIHRvIE1lZGlhU291cmNlUHJpdmF0ZUFWRk9iakMuCisgICAgICAgIChXZWJDb3JlOjpN
ZWRpYVBsYXllclByaXZhdGVNZWRpYVNvdXJjZUFWRk9iakM6OmJ1ZmZlcmVkKTogRGl0dG8uCisg
ICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL29iamMvTWVkaWFTb3VyY2VQ
cml2YXRlQVZGT2JqQy5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlv
bi9vYmpjL01lZGlhU291cmNlUHJpdmF0ZUFWRk9iakMubW06CisgICAgICAgIChXZWJDb3JlOjpN
ZWRpYVNvdXJjZVByaXZhdGVBVkZPYmpDOjpjcmVhdGUpOiBDYWxsIHNldFByaXZhdGVBbmRPcGVu
KCkuCisgICAgICAgIChXZWJDb3JlOjpNZWRpYVNvdXJjZVByaXZhdGVBVkZPYmpDOjpNZWRpYVNv
dXJjZVByaXZhdGVBVkZPYmpDKTogU2V0IG1fY2xpZW50LgorICAgICAgICAoV2ViQ29yZTo6TWVk
aWFTb3VyY2VQcml2YXRlQVZGT2JqQzo6ZHVyYXRpb24pOiBQYXNzIHRocm91Z2ggdG8gTWVkaWFT
b3VyY2VQcml2YXRlQ2xpZW50LgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFTb3VyY2VQcml2YXRl
QVZGT2JqQzo6YnVmZmVyZWQpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhU291cmNl
UHJpdmF0ZUFWRk9iakM6OmR1cmF0aW9uQ2hhbmdlZCk6IFBhc3MgdGhyb3VnaCB0byBNZWRpYVBs
YXllclByaXZhdGVNZWRpYVNvdXJjZUFWRk9iakMuCisgICAgICAgIChXZWJDb3JlOjpNZWRpYVNv
dXJjZVByaXZhdGVBVkZPYmpDOjpzZXREdXJhdGlvbik6IERlbGV0ZWQuCisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL01lZGlhU291cmNlR1N0cmVhbWVyLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6Ok1lZGlhU291cmNlR1N0cmVhbWVyOjpvcGVuKTogUGFzcyBpbiBNZWRpYVNv
dXJjZVByaXZhdGVDbGllbnQuCisgICAgICAgIChXZWJDb3JlOjpNZWRpYVNvdXJjZUdTdHJlYW1l
cjo6TWVkaWFTb3VyY2VHU3RyZWFtZXIpOiBJbml0aWFsaXplIG1fbWVkaWFTb3VyY2UuCisgICAg
ICAgIChXZWJDb3JlOjpNZWRpYVNvdXJjZUdTdHJlYW1lcjo6ZHVyYXRpb25DaGFuZ2VkKTogUmV0
cmlldmUgdGhlIGR1cmF0aW9uIGZyb20gTWVkaWFTb3VyY2VQcml2YXRlQ2xpZW50LgorICAgICAg
ICAoV2ViQ29yZTo6TWVkaWFTb3VyY2VHU3RyZWFtZXI6Om1hcmtFbmRPZlN0cmVhbSk6IFJlbW92
ZSB1bm5lY3NzYXJ5IEFTU0VSVC4KKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhU291cmNlR1N0cmVh
bWVyOjp1bm1hcmtFbmRPZlN0cmVhbSk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFT
b3VyY2VHU3RyZWFtZXI6OnNldER1cmF0aW9uKTogRGVsZXRlZC4KKyAgICAgICAgKiBwbGF0Zm9y
bS9ncmFwaGljcy9nc3RyZWFtZXIvTWVkaWFTb3VyY2VHU3RyZWFtZXIuaDoKKyAgICAgICAgKiBw
bGF0Zm9ybS9tb2NrL21lZGlhc291cmNlL01vY2tNZWRpYVBsYXllck1lZGlhU291cmNlLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6Ok1vY2tNZWRpYVBsYXllck1lZGlhU291cmNlOjpsb2FkKTogRG8g
bm90IGNhbGwgc2V0UHJpdmF0ZUFuZE9wZW4oKS4KKyAgICAgICAgKFdlYkNvcmU6Ok1vY2tNZWRp
YVBsYXllck1lZGlhU291cmNlOjpidWZmZXJlZCk6IFBhc3MgdGhyb3VnaCB0byBNb2NrTWVkaWFT
b3VyY2VQcml2YXRlLgorICAgICAgICAoV2ViQ29yZTo6TW9ja01lZGlhUGxheWVyTWVkaWFTb3Vy
Y2U6OmR1cmF0aW9uRG91YmxlKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpNb2NrTWVkaWFQ
bGF5ZXJNZWRpYVNvdXJjZTo6YWR2YW5jZUN1cnJlbnRUaW1lKTogRGl0dG8uCisgICAgICAgICog
cGxhdGZvcm0vbW9jay9tZWRpYXNvdXJjZS9Nb2NrTWVkaWFTb3VyY2VQcml2YXRlLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6Ok1vY2tNZWRpYVNvdXJjZVByaXZhdGU6OmNyZWF0ZSk6IENhbGwgc2V0
UHJpdmF0ZUFuZE9wZW4oKS4KKyAgICAgICAgKFdlYkNvcmU6Ok1vY2tNZWRpYVNvdXJjZVByaXZh
dGU6Ok1vY2tNZWRpYVNvdXJjZVByaXZhdGUpOiBTZXQgbV9jbGllbnQuCisgICAgICAgIChXZWJD
b3JlOjpNb2NrTWVkaWFTb3VyY2VQcml2YXRlOjpkdXJhdGlvbik6IFBhc3MgdGhyb3VnaCB0byBN
ZWRpYVNvdXJjZVByaXZhdGVDbGllbnQuCisgICAgICAgIChXZWJDb3JlOjpNb2NrTWVkaWFTb3Vy
Y2VQcml2YXRlOjpidWZmZXJlZCk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6TW9ja01lZGlh
U291cmNlUHJpdmF0ZTo6ZHVyYXRpb25DaGFuZ2VkKTogUGFzcyB0aG9ydWdoIHRvIE1vY2tNZWRp
YVBsYXllck1lZGlhU291cmNlLgorICAgICAgICAoV2ViQ29yZTo6TW9ja01lZGlhU291cmNlUHJp
dmF0ZTo6c2V0RHVyYXRpb24pOiBEZWxldGVkLgorCisgICAgICAgIFJvdXRlIHNlZWtUb1RpbWUg
dGhyb3VnaCBNZWRpYVNvdXJjZSwgcmF0aGVyIHRoYW4gdGhyb3VnaCBNZWRpYVNvdXJjZVByaXZh
dGUsIHNvIHRoYXQKKyAgICAgICAgdGhlIHRpbWUgY2FuIGJlIGNvbXBhcmVkIGFnYWluc3QgdGhl
IGJ1ZmZlcmVkIHJhbmdlcywgYW5kIHRyaWdnZXIgdGhlIGRlbGF5IG9mIHRoZSBzZWVrCisgICAg
ICAgIG9wZXJhdGlvbiBpZiBuZWNlc3NhcnkuIEFkZCBhIHNlZWtUaW1lciB0byBNZWRpYVBsYXll
clByaXZhdGVNZWRpYVNvdXJjZUFWRk9iakMsIGFzIHRoaXMKKyAgICAgICAgZ3VhcmFudGVlcyB0
aGUgb3JkZXIgb2YgYXN5bmNocm9ub3VzIG9wZXJhdGlvbnMsIHJhdGhlciB0aGFuIGNhbGxPbk1h
aW5UaHJlYWQsIHdoaWNoIGNhbgorICAgICAgICBjYXVzZSBhc3luYyBvcGVyYXRpb25zIHRvIG9j
Y3VyIG91dCBvZiBvcmRlci4KKworICAgICAgICAqIE1vZHVsZXMvbWVkaWFzb3VyY2UvTWVkaWFT
b3VyY2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFTb3VyY2U6OnNlZWtUb1RpbWUpOiBC
cmluZyB1cCB0byBzcGVjLgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFTb3VyY2U6OmNvbXBsZXRl
U2Vlayk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFTb3VyY2U6Om1vbml0b3JTb3Vy
Y2VCdWZmZXJzKTogQ2FsbCBjb21wbGV0ZVNlZWsoKSB3aGVuIGFwcHJvcHJpYXRlLgorICAgICAg
ICAqIE1vZHVsZXMvbWVkaWFzb3VyY2UvU291cmNlQnVmZmVyLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OlNvdXJjZUJ1ZmZlcjo6c291cmNlQnVmZmVyUHJpdmF0ZVNlZWtUb1RpbWUpOiBEZWxldGVk
LgorICAgICAgICAoV2ViQ29yZTo6U291cmNlQnVmZmVyOjpzZWVrVG9UaW1lKTogUmVuYW1lZCBm
cm9tIHNvdXJjZUJ1ZmZlclByaXZhdGVTZWVrVG9UaW1lKCkuCisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3MvTWVkaWFTb3VyY2VQcml2YXRlLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3MvTWVkaWFTb3VyY2VQcml2YXRlQ2xpZW50Lmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3MvYXZmb3VuZGF0aW9uL29iamMvTWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFTb3VyY2VBVkZPYmpD
Lmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL29iamMvTWVkaWFQ
bGF5ZXJQcml2YXRlTWVkaWFTb3VyY2VBVkZPYmpDLm1tOgorICAgICAgICAoV2ViQ29yZTo6TWVk
aWFQbGF5ZXJQcml2YXRlTWVkaWFTb3VyY2VBVkZPYmpDOjpNZWRpYVBsYXllclByaXZhdGVNZWRp
YVNvdXJjZUFWRk9iakMpOiBBZGQgc2Vla1RpbWVyLiBPbmx5CisgICAgICAgICAgICBjYWxsIHRp
bWVDaGFuZ2VkKCkgaWYgbm8gbG9uZ2VyIHNlZWtpbmcsIHRoZXJlYnkgdHJpZ2dlcmluZyBhICdz
ZWVrZWQnIGV2ZW50LgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFT
b3VyY2VBVkZPYmpDOjp+TWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFTb3VyY2VBVkZPYmpDKTogQ2xl
YXIgbV9zZWVrVGltZXIuCisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVNZWRp
YVNvdXJjZUFWRk9iakM6OnNlZWtXaXRoVG9sZXJhbmNlKTogVXNlIG1fc2Vla1RpbWVyLgorICAg
ICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFTb3VyY2VBVkZPYmpDOjpzZWVr
VGltZXJGaXJlZCk6IENhbGwgc2Vla0ludGVybmFsLgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQ
bGF5ZXJQcml2YXRlTWVkaWFTb3VyY2VBVkZPYmpDOjpzZWVrSW50ZXJuYWwpOiBBZGQgbG9nZ2lu
Zy4KKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZU1lZGlhU291cmNlQVZGT2Jq
Qzo6d2FpdEZvclNlZWtDb21wbGV0ZWQpOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlh
UGxheWVyUHJpdmF0ZU1lZGlhU291cmNlQVZGT2JqQzo6c2Vla0NvbXBsZXRlZCk6IEFkZGVkOyB0
cmlnZ2VyICdzZWVrZWQnLgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlTWVk
aWFTb3VyY2VBVkZPYmpDOjpzZXRSZWFkeVN0YXRlKTogTm8gbG9uZ2VyIGF0dGVtcHQgdG8gZmlu
aXNoIHNlZWsgd2hlbgorICAgICAgICAgICAgcmVhZHlTdGF0ZSBjaGFuZ2VzIGhlcmU7IHRoaXMg
aGFzIGJlZW4gbW92ZWQgdXAgdG8gTWVkaWFTb3VyY2UuY3BwLgorICAgICAgICAqIHBsYXRmb3Jt
L2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9vYmpjL01lZGlhU291cmNlUHJpdmF0ZUFWRk9iakMuaDoK
KyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24vb2JqYy9NZWRpYVNvdXJj
ZVByaXZhdGVBVkZPYmpDLm1tOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFTb3VyY2VQcml2YXRl
QVZGT2JqQzo6d2FpdEZvclNlZWtDb21wbGV0ZWQpOiBQYXNzIHRocm91Z2ggdG8gTWVkaWFQbGF5
ZXJQcml2YXRlTWVkaWFTb3VyY2VBVkZPYmpDLgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFTb3Vy
Y2VQcml2YXRlQVZGT2JqQzo6c2Vla0NvbXBsZXRlZCk6IERpdHRvLgorICAgICAgICAoV2ViQ29y
ZTo6TWVkaWFTb3VyY2VQcml2YXRlQVZGT2JqQzo6c2Vla1RvVGltZSk6IFBhc3MgdGhyb3VnaCB0
byBNZWRpYVNvdXJjZVByaXZhdGVDbGllbnQuCisgICAgICAgIChXZWJDb3JlOjpNZWRpYVNvdXJj
ZVByaXZhdGVBVkZPYmpDOjpmYXN0U2Vla1RpbWVGb3JNZWRpYVRpbWUpOiBEaXR0by4KKyAgICAg
ICAgKiBwbGF0Zm9ybS9tb2NrL21lZGlhc291cmNlL01vY2tNZWRpYVBsYXllck1lZGlhU291cmNl
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Ok1vY2tNZWRpYVBsYXllck1lZGlhU291cmNlOjpNb2Nr
TWVkaWFQbGF5ZXJNZWRpYVNvdXJjZSk6IEluaXRpYWxpemUgbV9zZWVrQ29tcGxldGVkLgorICAg
ICAgICAoV2ViQ29yZTo6TW9ja01lZGlhUGxheWVyTWVkaWFTb3VyY2U6OnNlZWtpbmcpOiBDaGVj
ayBmb3IgYW4gdW5jb21wbGV0ZWQgc2VlayBvcGVyYXRpb24uIAorICAgICAgICAoV2ViQ29yZTo6
TW9ja01lZGlhUGxheWVyTWVkaWFTb3VyY2U6OnNlZWtXaXRoVG9sZXJhbmNlKTogRGl0dG8uCisg
ICAgICAgIChXZWJDb3JlOjpNb2NrTWVkaWFQbGF5ZXJNZWRpYVNvdXJjZTo6d2FpdEZvclNlZWtD
b21wbGV0ZWQpOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6Ok1vY2tNZWRpYVBsYXllck1lZGlh
U291cmNlOjpzZWVrQ29tcGxldGVkKTogQWRkZWQ7IHRyaWdnZXIgJ3NlZWtlZCcuCisgICAgICAg
ICogcGxhdGZvcm0vbW9jay9tZWRpYXNvdXJjZS9Nb2NrTWVkaWFQbGF5ZXJNZWRpYVNvdXJjZS5o
OgorICAgICAgICAqIHBsYXRmb3JtL21vY2svbWVkaWFzb3VyY2UvTW9ja01lZGlhU291cmNlUHJp
dmF0ZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpNb2NrTWVkaWFTb3VyY2VQcml2YXRlOjp3YWl0
Rm9yU2Vla0NvbXBsZXRlZCk6IFBhc3MgdGhyb3VnaCB0byBNb2NrTWVkaWFQbGF5ZXJNZWRpYVNv
dXJjZS4KKyAgICAgICAgKFdlYkNvcmU6Ok1vY2tNZWRpYVNvdXJjZVByaXZhdGU6OnNlZWtDb21w
bGV0ZWQpOiBEaXR0by4KKyAgICAgICAgKiBwbGF0Zm9ybS9tb2NrL21lZGlhc291cmNlL01vY2tN
ZWRpYVNvdXJjZVByaXZhdGUuaDoKKworICAgICAgICBEcml2ZS1ieSBmaXhlcy4KKworICAgICAg
ICAqIE1vZHVsZXMvbWVkaWFzb3VyY2UvTWVkaWFTb3VyY2UuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6TWVkaWFTb3VyY2U6OnN0cmVhbUVuZGVkV2l0aEVycm9yKTogUmUtb3JkZXIgdGhlIHN0ZXBz
IGluIHN0cmVhbUVuZGVkV2l0aEVycm9yKCkKKyAgICAgICAgICAgIHRvIGF2b2lkIHRoZSBNZWRp
YVNvdXJjZSBiZWluZyBjbG9zZWQgYW5kIHJlLW9wZW5lZCBieSB0aGUgcmVzdWx0aW5nIGR1cmF0
aW9uIGNoYW5nZQorICAgICAgICAgICAgb3BlcmF0aW9uLgorICAgICAgICAqIE1vZHVsZXMvbWVk
aWFzb3VyY2UvTWVkaWFTb3VyY2UuaDoKKyAgICAgICAgKiBNb2R1bGVzL21lZGlhc291cmNlL1Nv
dXJjZUJ1ZmZlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTb3VyY2VCdWZmZXI6OnJlbW92ZSk6
IEFkZGVkIGxvZ2dpbmcuCisgICAgICAgIChXZWJDb3JlOjpTb3VyY2VCdWZmZXI6OnJlbW92ZUNv
ZGVkRnJhbWVzKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpTb3VyY2VCdWZmZXI6Omhhc0Z1
dHVyZVRpbWUpOiBTd2FwIGFuIEFTU0VSVCBmb3IgYW4gZWFybHktcmV0dXJuOyBpdCdzIHBvc3Np
YmxlCisgICAgICAgICAgICBmb3IgY3VycmVudFRpbWUoKSB0byBiZSBvdXRzaWRlIG9mIGEgYnVm
ZmVyZWQgYXJlYS4KKyAgICAgICAgKiBNb2R1bGVzL21lZGlhc291cmNlL1NvdXJjZUJ1ZmZlci5o
OgorICAgICAgICAqIGh0bWwvSFRNTE1lZGlhRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpIVE1MTWVkaWFFbGVtZW50OjpwYXJzZUF0dHJpYnV0ZSk6IERvIG5vdCBpc3N1ZSBhbiBhZGRp
dGlvbmFsICd0aW1ldXBkYXRlJyBldmVudAorICAgICAgICAgICAgYWZ0ZXIgZmluaXNoU2Vlaygp
IGlzc3VlcyBvbmUgb2YgaXRzIG93bi4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9hdmZv
dW5kYXRpb24vb2JqYy9Tb3VyY2VCdWZmZXJQcml2YXRlQVZGT2JqQy5tbToKKyAgICAgICAgKFdl
YkNvcmU6Omdsb2JhbERhdGFQYXJzZXJRdWV1ZSk6IEFsbG93IHBhcnNpbmcgb3BlcmF0aW9ucyB0
byBoYXBwZW4gY29uY3VycmVudGx5IG9uCisgICAgICAgICAgICBiYWNrZ3JvdW5kIHF1ZXVlcy4K
KworMjAxNC0wNy0xMSAgSmVyIE5vYmxlICA8amVyLm5vYmxlQGFwcGxlLmNvbT4KKwogICAgICAg
ICBbTVNFXSBTZXBhcmF0ZSBNZWRpYVNvdXJjZSBsb2dnaW5nIGludG8gaXRzIG93biBsb2cgY2hh
bm5lbAogICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTM0
ODA5CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzb3VyY2UvTWVk
aWFTb3VyY2UuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXNvdXJjZS9NZWRpYVNv
dXJjZS5jcHAKaW5kZXggNmVhMDI5NTA2NWMyM2IzMGU5MWMzMDM5ZjlkNjQyOGE4NDFhZmU5My4u
MjEzM2U1YzUzYmE1MWI0ZTFjZWFjM2JkNmY1OTkyYjk0M2M0YzQ0ZCAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXNvdXJjZS9NZWRpYVNvdXJjZS5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXNvdXJjZS9NZWRpYVNvdXJjZS5jcHAKQEAgLTc2LDYg
Kzc2LDggQEAgUGFzc1JlZlB0cjxNZWRpYVNvdXJjZT4gTWVkaWFTb3VyY2U6OmNyZWF0ZShTY3Jp
cHRFeGVjdXRpb25Db250ZXh0JiBjb250ZXh0KQogTWVkaWFTb3VyY2U6Ok1lZGlhU291cmNlKFNj
cmlwdEV4ZWN1dGlvbkNvbnRleHQmIGNvbnRleHQpCiAgICAgOiBBY3RpdmVET01PYmplY3QoJmNv
bnRleHQpCiAgICAgLCBtX21lZGlhRWxlbWVudCgwKQorICAgICwgbV9kdXJhdGlvbihzdGQ6Om51
bWVyaWNfbGltaXRzPGRvdWJsZT46OnF1aWV0X05hTigpKQorICAgICwgbV9wZW5kaW5nU2Vla1Rp
bWUoTWVkaWFUaW1lOjppbnZhbGlkVGltZSgpKQogICAgICwgbV9yZWFkeVN0YXRlKGNsb3NlZEtl
eXdvcmQoKSkKICAgICAsIG1fYXN5bmNFdmVudFF1ZXVlKCp0aGlzKQogewpAQCAtMTI4LDcgKzEz
MCw3IEBAIHZvaWQgTWVkaWFTb3VyY2U6OnJlbW92ZWRGcm9tUmVnaXN0cnkoKQogCiBkb3VibGUg
TWVkaWFTb3VyY2U6OmR1cmF0aW9uKCkgY29uc3QKIHsKLSAgICByZXR1cm4gaXNDbG9zZWQoKSA/
IHN0ZDo6bnVtZXJpY19saW1pdHM8ZmxvYXQ+OjpxdWlldF9OYU4oKSA6IG1fcHJpdmF0ZS0+ZHVy
YXRpb24oKS50b0RvdWJsZSgpOworICAgIHJldHVybiBtX2R1cmF0aW9uOwogfQogCiBkb3VibGUg
TWVkaWFTb3VyY2U6OmN1cnJlbnRUaW1lKCkgY29uc3QKQEAgLTE4MCw2ICsxODIsNjAgQEAgc3Rk
Ojp1bmlxdWVfcHRyPFBsYXRmb3JtVGltZVJhbmdlcz4gTWVkaWFTb3VyY2U6OmJ1ZmZlcmVkKCkg
Y29uc3QKICAgICByZXR1cm4gUGxhdGZvcm1UaW1lUmFuZ2VzOjpjcmVhdGUoaW50ZXJzZWN0aW9u
UmFuZ2VzLT5yYW5nZXMoKSk7CiB9CiAKK3ZvaWQgTWVkaWFTb3VyY2U6OnNlZWtUb1RpbWUoY29u
c3QgTWVkaWFUaW1lJiB0aW1lKQoreworICAgIC8vIDIuNC4zIFNlZWtpbmcKKyAgICAvLyBodHRw
czovL2R2Y3MudzMub3JnL2hnL2h0bWwtbWVkaWEvcmF3LWZpbGUvdGlwL21lZGlhLXNvdXJjZS9t
ZWRpYS1zb3VyY2UuaHRtbCNtZWRpYXNvdXJjZS1zZWVraW5nCisKKyAgICBtX3BlbmRpbmdTZWVr
VGltZSA9IHRpbWU7CisKKyAgICAvLyBSdW4gdGhlIGZvbGxvd2luZyBzdGVwcyBhcyBwYXJ0IG9m
IHRoZSAiV2FpdCB1bnRpbCB0aGUgdXNlciBhZ2VudCBoYXMgZXN0YWJsaXNoZWQgd2hldGhlciBv
ciBub3QgdGhlCisgICAgLy8gbWVkaWEgZGF0YSBmb3IgdGhlIG5ldyBwbGF5YmFjayBwb3NpdGlv
biBpcyBhdmFpbGFibGUsIGFuZCwgaWYgaXQgaXMsIHVudGlsIGl0IGhhcyBkZWNvZGVkIGVub3Vn
aCBkYXRhCisgICAgLy8gdG8gcGxheSBiYWNrIHRoYXQgcG9zaXRpb24iIHN0ZXAgb2YgdGhlIHNl
ZWsgYWxnb3JpdGhtOgorICAgIC8vIDEuIFRoZSBtZWRpYSBlbGVtZW50IGxvb2tzIGZvciBtZWRp
YSBzZWdtZW50cyBjb250YWluaW5nIHRoZSBuZXcgcGxheWJhY2sgcG9zaXRpb24gaW4gZWFjaCBT
b3VyY2VCdWZmZXIKKyAgICAvLyBvYmplY3QgaW4gYWN0aXZlU291cmNlQnVmZmVycy4KKyAgICBm
b3IgKGF1dG8mIHNvdXJjZUJ1ZmZlciA6ICptX2FjdGl2ZVNvdXJjZUJ1ZmZlcnMpIHsKKyAgICAg
ICAgLy8g4oazIElmIG9uZSBvciBtb3JlIG9mIHRoZSBvYmplY3RzIGluIGFjdGl2ZVNvdXJjZUJ1
ZmZlcnMgaXMgbWlzc2luZyBtZWRpYSBzZWdtZW50cyBmb3IgdGhlIG5ldworICAgICAgICAvLyBw
bGF5YmFjayBwb3NpdGlvbgorICAgICAgICBpZiAoIXNvdXJjZUJ1ZmZlci0+YnVmZmVyZWQoKS0+
cmFuZ2VzKCkuY29udGFpbih0aW1lKSkgeworICAgICAgICAgICAgLy8gMS4xIFNldCB0aGUgSFRN
TE1lZGlhRWxlbWVudC5yZWFkeVN0YXRlIGF0dHJpYnV0ZSB0byBIQVZFX01FVEFEQVRBLgorICAg
ICAgICAgICAgbV9wcml2YXRlLT5zZXRSZWFkeVN0YXRlKE1lZGlhUGxheWVyOjpIYXZlTWV0YWRh
dGEpOworCisgICAgICAgICAgICAvLyAxLjIgVGhlIG1lZGlhIGVsZW1lbnQgd2FpdHMgdW50aWwg
YW4gYXBwZW5kQnVmZmVyKCkgb3IgYW4gYXBwZW5kU3RyZWFtKCkgY2FsbCBjYXVzZXMgdGhlIGNv
ZGVkCisgICAgICAgICAgICAvLyBmcmFtZSBwcm9jZXNzaW5nIGFsZ29yaXRobSB0byBzZXQgdGhl
IEhUTUxNZWRpYUVsZW1lbnQucmVhZHlTdGF0ZSBhdHRyaWJ1dGUgdG8gYSB2YWx1ZSBncmVhdGVy
CisgICAgICAgICAgICAvLyB0aGFuIEhBVkVfTUVUQURBVEEuCisgICAgICAgICAgICBMT0coTWVk
aWFTb3VyY2UsICJNZWRpYVNvdXJjZTo6c2Vla1RvVGltZSglcCkgLSB3YWl0Rm9yU2Vla0NvbXBs
ZXRlZCgpIiwgdGhpcyk7CisgICAgICAgICAgICBtX3ByaXZhdGUtPndhaXRGb3JTZWVrQ29tcGxl
dGVkKCk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgLy8g4oazIE90
aGVyd2lzZQorICAgICAgICAvLyBDb250aW51ZQorICAgIH0KKworICAgIGNvbXBsZXRlU2Vlaygp
OworfQorCit2b2lkIE1lZGlhU291cmNlOjpjb21wbGV0ZVNlZWsoKQoreworICAgIC8vIDIuNC4z
IFNlZWtpbmcsIGN0ZC4KKyAgICAvLyBodHRwczovL2R2Y3MudzMub3JnL2hnL2h0bWwtbWVkaWEv
cmF3LWZpbGUvdGlwL21lZGlhLXNvdXJjZS9tZWRpYS1zb3VyY2UuaHRtbCNtZWRpYXNvdXJjZS1z
ZWVraW5nCisKKyAgICBBU1NFUlQobV9wZW5kaW5nU2Vla1RpbWUuaXNWYWxpZCgpKTsKKworICAg
IC8vIDIuIFRoZSBtZWRpYSBlbGVtZW50IHJlc2V0cyBhbGwgZGVjb2RlcnMgYW5kIGluaXRpYWxp
emVzIGVhY2ggb25lIHdpdGggZGF0YSBmcm9tIHRoZSBhcHByb3ByaWF0ZQorICAgIC8vIGluaXRp
YWxpemF0aW9uIHNlZ21lbnQuCisgICAgLy8gMy4gVGhlIG1lZGlhIGVsZW1lbnQgZmVlZHMgY29k
ZWQgZnJhbWVzIGZyb20gdGhlIGFjdGl2ZSB0cmFjayBidWZmZXJzIGludG8gdGhlIGRlY29kZXJz
IHN0YXJ0aW5nCisgICAgLy8gd2l0aCB0aGUgY2xvc2VzdCByYW5kb20gYWNjZXNzIHBvaW50IGJl
Zm9yZSB0aGUgbmV3IHBsYXliYWNrIHBvc2l0aW9uLgorICAgIGZvciAoYXV0byYgc291cmNlQnVm
ZmVyIDogKm1fYWN0aXZlU291cmNlQnVmZmVycykKKyAgICAgICAgc291cmNlQnVmZmVyLT5zZWVr
VG9UaW1lKG1fcGVuZGluZ1NlZWtUaW1lKTsKKworICAgIC8vIDQuIFJlc3VtZSB0aGUgc2VlayBh
bGdvcml0aG0gYXQgdGhlICJBd2FpdCBhIHN0YWJsZSBzdGF0ZSIgc3RlcC4KKyAgICBtX3ByaXZh
dGUtPnNlZWtDb21wbGV0ZWQoKTsKKworICAgIG1fcGVuZGluZ1NlZWtUaW1lID0gTWVkaWFUaW1l
OjppbnZhbGlkVGltZSgpOworICAgIG1vbml0b3JTb3VyY2VCdWZmZXJzKCk7Cit9CisKIHZvaWQg
TWVkaWFTb3VyY2U6Om1vbml0b3JTb3VyY2VCdWZmZXJzKCkKIHsKICAgICAvLyAyLjQuNCBTb3Vy
Y2VCdWZmZXIgTW9uaXRvcmluZwpAQCAtMjE3LDYgKzI3Myw5IEBAIHZvaWQgTWVkaWFTb3VyY2U6
Om1vbml0b3JTb3VyY2VCdWZmZXJzKCkKICAgICAgICAgLy8gMy4gUGxheWJhY2sgbWF5IHJlc3Vt
ZSBhdCB0aGlzIHBvaW50IGlmIGl0IHdhcyBwcmV2aW91c2x5IHN1c3BlbmRlZCBieSBhIHRyYW5z
aXRpb24gdG8gSEFWRV9DVVJSRU5UX0RBVEEuCiAgICAgICAgIG1fcHJpdmF0ZS0+c2V0UmVhZHlT
dGF0ZShNZWRpYVBsYXllcjo6SGF2ZUVub3VnaERhdGEpOwogCisgICAgICAgIGlmIChtX3BlbmRp
bmdTZWVrVGltZS5pc1ZhbGlkKCkpCisgICAgICAgICAgICBjb21wbGV0ZVNlZWsoKTsKKwogICAg
ICAgICAvLyA0LiBBYm9ydCB0aGVzZSBzdGVwcy4KICAgICAgICAgcmV0dXJuOwogICAgIH0KQEAg
LTIzMSw2ICsyOTAsOSBAQCB2b2lkIE1lZGlhU291cmNlOjptb25pdG9yU291cmNlQnVmZmVycygp
CiAgICAgICAgIC8vIDMuIFBsYXliYWNrIG1heSByZXN1bWUgYXQgdGhpcyBwb2ludCBpZiBpdCB3
YXMgcHJldmlvdXNseSBzdXNwZW5kZWQgYnkgYSB0cmFuc2l0aW9uIHRvIEhBVkVfQ1VSUkVOVF9E
QVRBLgogICAgICAgICBtX3ByaXZhdGUtPnNldFJlYWR5U3RhdGUoTWVkaWFQbGF5ZXI6OkhhdmVG
dXR1cmVEYXRhKTsKIAorICAgICAgICBpZiAobV9wZW5kaW5nU2Vla1RpbWUuaXNWYWxpZCgpKQor
ICAgICAgICAgICAgY29tcGxldGVTZWVrKCk7CisKICAgICAgICAgLy8gNC4gQWJvcnQgdGhlc2Ug
c3RlcHMuCiAgICAgICAgIHJldHVybjsKICAgICB9CkBAIC0yNDYsNyArMzA4LDEwIEBAIHZvaWQg
TWVkaWFTb3VyY2U6Om1vbml0b3JTb3VyY2VCdWZmZXJzKCkKICAgICAvLyAzLiBQbGF5YmFjayBp
cyBzdXNwZW5kZWQgYXQgdGhpcyBwb2ludCBzaW5jZSB0aGUgbWVkaWEgZWxlbWVudCBkb2Vzbid0
IGhhdmUgZW5vdWdoIGRhdGEgdG8KICAgICAvLyBhZHZhbmNlIHRoZSBtZWRpYSB0aW1lbGluZS4K
ICAgICBtX3ByaXZhdGUtPnNldFJlYWR5U3RhdGUoTWVkaWFQbGF5ZXI6OkhhdmVDdXJyZW50RGF0
YSk7Ci0gICAgCisKKyAgICBpZiAobV9wZW5kaW5nU2Vla1RpbWUuaXNWYWxpZCgpKQorICAgICAg
ICBjb21wbGV0ZVNlZWsoKTsKKwogICAgIC8vIDQuIEFib3J0IHRoZXNlIHN0ZXBzLgogfQogCkBA
IC0yODMsOSArMzQ4LDM3IEBAIHZvaWQgTWVkaWFTb3VyY2U6OnNldER1cmF0aW9uKGRvdWJsZSBk
dXJhdGlvbiwgRXhjZXB0aW9uQ29kZSYgZWMpCiAKIHZvaWQgTWVkaWFTb3VyY2U6OnNldER1cmF0
aW9uSW50ZXJuYWwoZG91YmxlIGR1cmF0aW9uKQogewotICAgIG1fcHJpdmF0ZS0+c2V0RHVyYXRp
b24oTWVkaWFUaW1lOjpjcmVhdGVXaXRoRG91YmxlKGR1cmF0aW9uKSk7Ci19CisgICAgLy8gRHVy
YXRpb24gQ2hhbmdlIEFsZ29yaXRobQorICAgIC8vIGh0dHBzOi8vZHZjcy53My5vcmcvaGcvaHRt
bC1tZWRpYS9yYXctZmlsZS90aXAvbWVkaWEtc291cmNlL21lZGlhLXNvdXJjZS5odG1sI2R1cmF0
aW9uLWNoYW5nZS1hbGdvcml0aG0KKworICAgIC8vIDEuIElmIHRoZSBjdXJyZW50IHZhbHVlIG9m
IGR1cmF0aW9uIGlzIGVxdWFsIHRvIG5ldyBkdXJhdGlvbiwgdGhlbiByZXR1cm4uCisgICAgaWYg
KGR1cmF0aW9uID09IG1fZHVyYXRpb24pCisgICAgICAgIHJldHVybjsKKworICAgIC8vIDIuIFNl
dCBvbGQgZHVyYXRpb24gdG8gdGhlIGN1cnJlbnQgdmFsdWUgb2YgZHVyYXRpb24uCisgICAgZG91
YmxlIG9sZER1cmF0aW9uID0gbV9kdXJhdGlvbjsKKworICAgIC8vIDMuIFVwZGF0ZSBkdXJhdGlv
biB0byBuZXcgZHVyYXRpb24uCisgICAgbV9kdXJhdGlvbiA9IGR1cmF0aW9uOworCisgICAgLy8g
NC4gSWYgdGhlIG5ldyBkdXJhdGlvbiBpcyBsZXNzIHRoYW4gb2xkIGR1cmF0aW9uLCB0aGVuIGNh
bGwgcmVtb3ZlKG5ldyBkdXJhdGlvbiwgb2xkIGR1cmF0aW9uKQorICAgIC8vIG9uIGFsbCBvYmpl
Y3RzIGluIHNvdXJjZUJ1ZmZlcnMuCisgICAgaWYgKCFpc25hbihvbGREdXJhdGlvbikgJiYgZHVy
YXRpb24gPCBvbGREdXJhdGlvbikgeworICAgICAgICBmb3IgKGF1dG8mIHNvdXJjZUJ1ZmZlciA6
ICptX3NvdXJjZUJ1ZmZlcnMpCisgICAgICAgICAgICBzb3VyY2VCdWZmZXItPnJlbW92ZShkdXJh
dGlvbiwgb2xkRHVyYXRpb24sIElHTk9SRV9FWENFUFRJT04pOworICAgIH0KIAorICAgIC8vIDUu
IElmIGEgdXNlciBhZ2VudCBpcyB1bmFibGUgdG8gcGFydGlhbGx5IHJlbmRlciBhdWRpbyBmcmFt
ZXMgb3IgdGV4dCBjdWVzIHRoYXQgc3RhcnQgYmVmb3JlIGFuZCBlbmQgYWZ0ZXIgdGhlCisgICAg
Ly8gZHVyYXRpb24sIHRoZW4gcnVuIHRoZSBmb2xsb3dpbmcgc3RlcHM6CisgICAgLy8gNS4xIFVw
ZGF0ZSBuZXcgZHVyYXRpb24gdG8gdGhlIGhpZ2hlc3QgZW5kIHRpbWUgcmVwb3J0ZWQgYnkgdGhl
IGJ1ZmZlcmVkIGF0dHJpYnV0ZSBhY3Jvc3MgYWxsIFNvdXJjZUJ1ZmZlciBvYmplY3RzCisgICAg
Ly8gaW4gc291cmNlQnVmZmVycy4KKyAgICAvLyA1LjIgVXBkYXRlIGR1cmF0aW9uIHRvIG5ldyBk
dXJhdGlvbi4KKyAgICAvLyBOT1RFOiBBc3N1bWUgVUEgaXMgYWJsZSB0byBwYXJ0aWFsbHkgcmVu
ZGVyIGF1ZGlvIGZyYW1lcy4KKworICAgIC8vIDYuIFVwZGF0ZSB0aGUgbWVkaWEgY29udHJvbGxl
ciBkdXJhdGlvbiB0byBuZXcgZHVyYXRpb24gYW5kIHJ1biB0aGUgSFRNTE1lZGlhRWxlbWVudCBk
dXJhdGlvbiBjaGFuZ2UgYWxnb3JpdGhtLgorICAgIExPRyhNZWRpYVNvdXJjZSwgIk1lZGlhU291
cmNlOjpzZXREdXJhdGlvbkludGVybmFsKCVwKSAtIGR1cmF0aW9uKCVnKSIsIHRoaXMsIGR1cmF0
aW9uKTsKKyAgICBtX3ByaXZhdGUtPmR1cmF0aW9uQ2hhbmdlZCgpOworfQogCiB2b2lkIE1lZGlh
U291cmNlOjpzZXRSZWFkeVN0YXRlKGNvbnN0IEF0b21pY1N0cmluZyYgc3RhdGUpCiB7CkBAIC0y
OTcsNiArMzkwLDcgQEAgdm9pZCBNZWRpYVNvdXJjZTo6c2V0UmVhZHlTdGF0ZShjb25zdCBBdG9t
aWNTdHJpbmcmIHN0YXRlKQogICAgIGlmIChzdGF0ZSA9PSBjbG9zZWRLZXl3b3JkKCkpIHsKICAg
ICAgICAgbV9wcml2YXRlLmNsZWFyKCk7CiAgICAgICAgIG1fbWVkaWFFbGVtZW50ID0gMDsKKyAg
ICAgICAgbV9kdXJhdGlvbiA9IHN0ZDo6bnVtZXJpY19saW1pdHM8ZG91YmxlPjo6cXVpZXRfTmFO
KCk7CiAgICAgfQogCiAgICAgaWYgKG9sZFN0YXRlID09IHN0YXRlKQpAQCAtMzQ0LDE5ICs0Mzgs
MTggQEAgdm9pZCBNZWRpYVNvdXJjZTo6c3RyZWFtRW5kZWRXaXRoRXJyb3IoY29uc3QgQXRvbWlj
U3RyaW5nJiBlcnJvciwgRXhjZXB0aW9uQ29kZSYKICAgICBERVBSRUNBVEVEX0RFRklORV9TVEFU
SUNfTE9DQUwoY29uc3QgQXRvbWljU3RyaW5nLCBkZWNvZGUsICgiZGVjb2RlIiwgQXRvbWljU3Ry
aW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCkpOwogCiAgICAgLy8gMi40LjcgaHR0cHM6Ly9kdmNz
LnczLm9yZy9oZy9odG1sLW1lZGlhL3Jhdy1maWxlL3RpcC9tZWRpYS1zb3VyY2UvbWVkaWEtc291
cmNlLmh0bWwjZW5kLW9mLXN0cmVhbS1hbGdvcml0aG0KLSAgICAvLyAxLiBDaGFuZ2UgdGhlIHJl
YWR5U3RhdGUgYXR0cmlidXRlIHZhbHVlIHRvICJlbmRlZCIuCi0gICAgLy8gMi4gUXVldWUgYSB0
YXNrIHRvIGZpcmUgYSBzaW1wbGUgZXZlbnQgbmFtZWQgc291cmNlZW5kZWQgYXQgdGhlIE1lZGlh
U291cmNlLgotICAgIHNldFJlYWR5U3RhdGUoZW5kZWRLZXl3b3JkKCkpOwogCiAgICAgLy8gMy4K
ICAgICBpZiAoZXJyb3IuaXNFbXB0eSgpKSB7CiAgICAgICAgIC8vIOKGsyBJZiBlcnJvciBpcyBu
b3Qgc2V0LCBpcyBudWxsLCBvciBpcyBhbiBlbXB0eSBzdHJpbmcKLSAgICAgICAgLy8gMS4gUnVu
IHRoZSBkdXJhdGlvbiBjaGFuZ2UgYWxnb3JpdGhtIHdpdGggbmV3IGR1cmF0aW9uIHNldCB0byB0
aGUgaGlnaGVzdCBlbmQgdGltZXN0YW1wCi0gICAgICAgIC8vIGFjcm9zcyBhbGwgU291cmNlQnVm
ZmVyIG9iamVjdHMgaW4gc291cmNlQnVmZmVycy4KLSAgICAgICAgTWVkaWFUaW1lIG1heEVuZFRp
bWVzdGFtcDsKLSAgICAgICAgZm9yIChhdXRvIGl0ID0gbV9zb3VyY2VCdWZmZXJzLT5iZWdpbigp
LCBlbmQgPSBtX3NvdXJjZUJ1ZmZlcnMtPmVuZCgpOyBpdCAhPSBlbmQ7ICsraXQpCi0gICAgICAg
ICAgICBtYXhFbmRUaW1lc3RhbXAgPSBzdGQ6Om1heCgoKml0KS0+aGlnaGVzdFByZXNlbnRhdGlv
bkVuZFRpbWVzdGFtcCgpLCBtYXhFbmRUaW1lc3RhbXApOwotICAgICAgICBtX3ByaXZhdGUtPnNl
dER1cmF0aW9uKG1heEVuZFRpbWVzdGFtcCk7CisgICAgICAgIC8vIDEuIFJ1biB0aGUgZHVyYXRp
b24gY2hhbmdlIGFsZ29yaXRobSB3aXRoIG5ldyBkdXJhdGlvbiBzZXQgdG8gdGhlIGhpZ2hlc3Qg
ZW5kIHRpbWUgcmVwb3J0ZWQgYnkKKyAgICAgICAgLy8gdGhlIGJ1ZmZlcmVkIGF0dHJpYnV0ZSBh
Y3Jvc3MgYWxsIFNvdXJjZUJ1ZmZlciBvYmplY3RzIGluIHNvdXJjZUJ1ZmZlcnMuCisgICAgICAg
IGRvdWJsZSBtYXhFbmRUaW1lID0gMDsKKyAgICAgICAgZm9yIChhdXRvJiBzb3VyY2VCdWZmZXIg
OiAqbV9zb3VyY2VCdWZmZXJzKSB7CisgICAgICAgICAgICBpZiAoYXV0byBsZW5ndGggPSBzb3Vy
Y2VCdWZmZXItPmJ1ZmZlcmVkKCktPmxlbmd0aCgpKQorICAgICAgICAgICAgICAgIG1heEVuZFRp
bWUgPSBzdGQ6Om1heChzb3VyY2VCdWZmZXItPmJ1ZmZlcmVkKCktPmVuZChsZW5ndGggLSAxLCBJ
R05PUkVfRVhDRVBUSU9OKSwgbWF4RW5kVGltZSk7CisgICAgICAgIH0KKyAgICAgICAgc2V0RHVy
YXRpb25JbnRlcm5hbChtYXhFbmRUaW1lKTsKIAogICAgICAgICAvLyAyLiBOb3RpZnkgdGhlIG1l
ZGlhIGVsZW1lbnQgdGhhdCBpdCBub3cgaGFzIGFsbCBvZiB0aGUgbWVkaWEgZGF0YS4KICAgICAg
ICAgbV9wcml2YXRlLT5tYXJrRW5kT2ZTdHJlYW0oTWVkaWFTb3VyY2VQcml2YXRlOjpFb3NOb0Vy
cm9yKTsKQEAgLTM5Niw2ICs0ODksMTMgQEAgdm9pZCBNZWRpYVNvdXJjZTo6c3RyZWFtRW5kZWRX
aXRoRXJyb3IoY29uc3QgQXRvbWljU3RyaW5nJiBlcnJvciwgRXhjZXB0aW9uQ29kZSYKICAgICAg
ICAgLy8gICBUaHJvdyBhbiBJTlZBTElEX0FDQ0VTU19FUlIgZXhjZXB0aW9uLgogICAgICAgICBl
YyA9IElOVkFMSURfQUNDRVNTX0VSUjsKICAgICB9CisKKyAgICAvLyBOT1RFOiBEbyBzdGVwcyAx
ICYgMiBhZnRlciBzdGVwIDMgdG8gYXZvaWQgdGhlIE1lZGlhU291cmNlJ3MgcmVhZHlTdGF0ZSBi
ZWluZyByZS1vcGVuZWQgYnkgYQorICAgIC8vIHJlbW92ZSgpIG9wZXJhdGlvbiByZXN1bHRpbmcg
ZnJvbSBhIGR1cmF0aW9uIGNoYW5nZS4KKyAgICAvLyBGSVhNRTogUmUtbnVtYmVyIG9yIHVwZGF0
ZSB0aGlzIHNlY3Rpb24gb25jZSA8aHR0cHM6Ly93d3cudzMub3JnL0J1Z3MvUHVibGljL3Nob3df
YnVnLmNnaT9pZD0yNjMxNj4gaXMgcmVzb2x2ZWQuCisgICAgLy8gMS4gQ2hhbmdlIHRoZSByZWFk
eVN0YXRlIGF0dHJpYnV0ZSB2YWx1ZSB0byAiZW5kZWQiLgorICAgIC8vIDIuIFF1ZXVlIGEgdGFz
ayB0byBmaXJlIGEgc2ltcGxlIGV2ZW50IG5hbWVkIHNvdXJjZWVuZGVkIGF0IHRoZSBNZWRpYVNv
dXJjZS4KKyAgICBzZXRSZWFkeVN0YXRlKGVuZGVkS2V5d29yZCgpKTsKIH0KIAogU291cmNlQnVm
ZmVyKiBNZWRpYVNvdXJjZTo6YWRkU291cmNlQnVmZmVyKGNvbnN0IFN0cmluZyYgdHlwZSwgRXhj
ZXB0aW9uQ29kZSYgZWMpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlh
c291cmNlL01lZGlhU291cmNlLmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc291cmNl
L01lZGlhU291cmNlLmgKaW5kZXggNDA3ZTg4NzE4ODVmNzQyOGNiMTRhYTI5N2VmMTM0YmJkYTQ3
YjEyNS4uNzM4OWRiMTQzNDUzNjkzOTBlYmEwNWI4OWQ0YWQ4MmE1NzA2NmExOSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXNvdXJjZS9NZWRpYVNvdXJjZS5oCisrKyBi
L1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzb3VyY2UvTWVkaWFTb3VyY2UuaApAQCAtNzIs
MTEgKzcyLDEzIEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgc2V0UHJpdmF0ZUFuZE9wZW4o
UGFzc1JlZjxNZWRpYVNvdXJjZVByaXZhdGU+KSBvdmVycmlkZTsKICAgICB2aXJ0dWFsIGRvdWJs
ZSBkdXJhdGlvbigpIGNvbnN0IG92ZXJyaWRlOwogICAgIHZpcnR1YWwgc3RkOjp1bmlxdWVfcHRy
PFBsYXRmb3JtVGltZVJhbmdlcz4gYnVmZmVyZWQoKSBjb25zdCBvdmVycmlkZTsKKyAgICB2aXJ0
dWFsIHZvaWQgc2Vla1RvVGltZShjb25zdCBNZWRpYVRpbWUmKSBvdmVycmlkZTsKIAogICAgIGJv
b2wgYXR0YWNoVG9FbGVtZW50KEhUTUxNZWRpYUVsZW1lbnQqKTsKICAgICB2b2lkIGNsb3NlKCk7
CiAgICAgYm9vbCBpc0Nsb3NlZCgpIGNvbnN0OwogICAgIHZvaWQgbW9uaXRvclNvdXJjZUJ1ZmZl
cnMoKTsKKyAgICB2b2lkIGNvbXBsZXRlU2VlaygpOwogCiAgICAgdm9pZCBzZXREdXJhdGlvbihk
b3VibGUsIEV4Y2VwdGlvbkNvZGUmKTsKICAgICB2b2lkIHNldER1cmF0aW9uSW50ZXJuYWwoZG91
YmxlKTsKQEAgLTEyNyw2ICsxMjksOCBAQCBwcm90ZWN0ZWQ6CiAgICAgUmVmUHRyPFNvdXJjZUJ1
ZmZlckxpc3Q+IG1fc291cmNlQnVmZmVyczsKICAgICBSZWZQdHI8U291cmNlQnVmZmVyTGlzdD4g
bV9hY3RpdmVTb3VyY2VCdWZmZXJzOwogICAgIEhUTUxNZWRpYUVsZW1lbnQqIG1fbWVkaWFFbGVt
ZW50OworICAgIGRvdWJsZSBtX2R1cmF0aW9uOworICAgIE1lZGlhVGltZSBtX3BlbmRpbmdTZWVr
VGltZTsKICAgICBBdG9taWNTdHJpbmcgbV9yZWFkeVN0YXRlOwogICAgIEdlbmVyaWNFdmVudFF1
ZXVlIG1fYXN5bmNFdmVudFF1ZXVlOwogfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvbWVkaWFzb3VyY2UvU291cmNlQnVmZmVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvbWVkaWFzb3VyY2UvU291cmNlQnVmZmVyLmNwcAppbmRleCAxYzUzMjg5MWY3ODJiOWEyOTM5
OTUzMDQ0NDg2Zjc2MzBhMDcxZjIzLi4wZjY3OTUwMjU3M2EyMDYyZDY1YWJhZjI1NWRiYThjNGQy
NDM1NWYyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc291cmNlL1Nv
dXJjZUJ1ZmZlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXNvdXJjZS9T
b3VyY2VCdWZmZXIuY3BwCkBAIC0yMzMsNiArMjMzLDcgQEAgdm9pZCBTb3VyY2VCdWZmZXI6OmFi
b3J0KEV4Y2VwdGlvbkNvZGUmIGVjKQogCiB2b2lkIFNvdXJjZUJ1ZmZlcjo6cmVtb3ZlKGRvdWJs
ZSBzdGFydCwgZG91YmxlIGVuZCwgRXhjZXB0aW9uQ29kZSYgZWMpCiB7CisgICAgTE9HKE1lZGlh
U291cmNlLCAiU291cmNlQnVmZmVyOjpyZW1vdmUoJXApIC0gc3RhcnQoJXMpLCBlbmQoJXMpIiwg
dGhpcywgdG9TdHJpbmcoc3RhcnQpLnV0ZjgoKS5kYXRhKCksIHRvU3RyaW5nKGVuZCkudXRmOCgp
LmRhdGEoKSk7CiAgICAgLy8gU2VjdGlvbiAzLjIgcmVtb3ZlKCkgbWV0aG9kIHN0ZXBzLgogICAg
IC8vIDEuIElmIHN0YXJ0IGlzIG5lZ2F0aXZlIG9yIGdyZWF0ZXIgdGhhbiBkdXJhdGlvbiwgdGhl
biB0aHJvdyBhbiBJbnZhbGlkQWNjZXNzRXJyb3IgZXhjZXB0aW9uIGFuZCBhYm9ydCB0aGVzZSBz
dGVwcy4KICAgICAvLyAyLiBJZiBlbmQgaXMgbGVzcyB0aGFuIG9yIGVxdWFsIHRvIHN0YXJ0LCB0
aGVuIHRocm93IGFuIEludmFsaWRBY2Nlc3NFcnJvciBleGNlcHRpb24gYW5kIGFib3J0IHRoZXNl
IHN0ZXBzLgpAQCAtMzA4LDkgKzMwOSw5IEBAIHZvaWQgU291cmNlQnVmZmVyOjpyZW1vdmVkRnJv
bU1lZGlhU291cmNlKCkKICAgICBtX3NvdXJjZSA9IDA7CiB9CiAKLXZvaWQgU291cmNlQnVmZmVy
Ojpzb3VyY2VCdWZmZXJQcml2YXRlU2Vla1RvVGltZShTb3VyY2VCdWZmZXJQcml2YXRlKiwgY29u
c3QgTWVkaWFUaW1lJiB0aW1lKQordm9pZCBTb3VyY2VCdWZmZXI6OnNlZWtUb1RpbWUoY29uc3Qg
TWVkaWFUaW1lJiB0aW1lKQogewotICAgIExPRyhNZWRpYVNvdXJjZSwgIlNvdXJjZUJ1ZmZlcjo6
c291cmNlQnVmZmVyUHJpdmF0ZVNlZWtUb1RpbWUoJXApIC0gdGltZSglcykiLCB0aGlzLCB0b1N0
cmluZyh0aW1lKS51dGY4KCkuZGF0YSgpKTsKKyAgICBMT0coTWVkaWFTb3VyY2UsICJTb3VyY2VC
dWZmZXI6OnNlZWtUb1RpbWUoJXApIC0gdGltZSglcykiLCB0aGlzLCB0b1N0cmluZyh0aW1lKS51
dGY4KCkuZGF0YSgpKTsKIAogICAgIGZvciAoYXV0byYgdHJhY2tCdWZmZXJQYWlyIDogbV90cmFj
a0J1ZmZlck1hcCkgewogICAgICAgICBUcmFja0J1ZmZlciYgdHJhY2tCdWZmZXIgPSB0cmFja0J1
ZmZlclBhaXIudmFsdWU7CkBAIC0zMTgsOCArMzE5LDYgQEAgdm9pZCBTb3VyY2VCdWZmZXI6OnNv
dXJjZUJ1ZmZlclByaXZhdGVTZWVrVG9UaW1lKFNvdXJjZUJ1ZmZlclByaXZhdGUqLCBjb25zdCBN
ZWQKIAogICAgICAgICByZWVucXVldWVNZWRpYUZvclRpbWUodHJhY2tCdWZmZXIsIHRyYWNrSUQs
IHRpbWUpOwogICAgIH0KLQotICAgIG1fc291cmNlLT5tb25pdG9yU291cmNlQnVmZmVycygpOwog
fQogCiBNZWRpYVRpbWUgU291cmNlQnVmZmVyOjpzb3VyY2VCdWZmZXJQcml2YXRlRmFzdFNlZWtU
aW1lRm9yTWVkaWFUaW1lKFNvdXJjZUJ1ZmZlclByaXZhdGUqLCBjb25zdCBNZWRpYVRpbWUmIHRh
cmdldFRpbWUsIGNvbnN0IE1lZGlhVGltZSYgbmVnYXRpdmVUaHJlc2hvbGQsIGNvbnN0IE1lZGlh
VGltZSYgcG9zaXRpdmVUaHJlc2hvbGQpCkBAIC01MjcsNiArNTI2LDggQEAgc3RhdGljIGJvb2wg
ZGVjb2RlVGltZUNvbXBhcmF0b3IoY29uc3QgUHJlc2VudGF0aW9uT3JkZXJTYW1wbGVNYXA6Ok1h
cFR5cGU6OnZhbHUKIAogdm9pZCBTb3VyY2VCdWZmZXI6OnJlbW92ZUNvZGVkRnJhbWVzKGNvbnN0
IE1lZGlhVGltZSYgc3RhcnQsIGNvbnN0IE1lZGlhVGltZSYgZW5kKQogeworICAgIExPRyhNZWRp
YVNvdXJjZSwgIlNvdXJjZUJ1ZmZlcjo6cmVtb3ZlQ29kZWRGcmFtZXMoJXApIC0gc3RhcnQoJXMp
LCBlbmQoJXMpIiwgdGhpcywgdG9TdHJpbmcoc3RhcnQpLnV0ZjgoKS5kYXRhKCksIHRvU3RyaW5n
KGVuZCkudXRmOCgpLmRhdGEoKSk7CisKICAgICAvLyAzLjUuOSBDb2RlZCBGcmFtZSBSZW1vdmFs
IEFsZ29yaXRobQogICAgIC8vIGh0dHBzOi8vZHZjcy53My5vcmcvaGcvaHRtbC1tZWRpYS9yYXct
ZmlsZS90aXAvbWVkaWEtc291cmNlL21lZGlhLXNvdXJjZS5odG1sI3NvdXJjZWJ1ZmZlci1jb2Rl
ZC1mcmFtZS1yZW1vdmFsCiAKQEAgLTE0NDksNyArMTQ1MCw4IEBAIGJvb2wgU291cmNlQnVmZmVy
OjpoYXNGdXR1cmVUaW1lKCkgY29uc3QKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgc2l6
ZV90IGZvdW5kID0gcmFuZ2VzLmZpbmQobmVhcmVzdCk7Ci0gICAgQVNTRVJUKGZvdW5kICE9IG5v
dEZvdW5kKTsKKyAgICBpZiAoZm91bmQgPT0gbm90Rm91bmQpCisgICAgICAgIHJldHVybiBmYWxz
ZTsKIAogICAgIGJvb2wgaWdub3JlZFZhbGlkID0gZmFsc2U7CiAgICAgcmV0dXJuIHJhbmdlcy5l
bmQoZm91bmQsIGlnbm9yZWRWYWxpZCkgLSBjdXJyZW50VGltZSA+IGN1cnJlbnRUaW1lRnVkZ2VG
YWN0b3IoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzb3VyY2Uv
U291cmNlQnVmZmVyLmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc291cmNlL1NvdXJj
ZUJ1ZmZlci5oCmluZGV4IDExNTA1MTZkYzgwMWI3MWFjMGU2MjZkN2E2NjE4MzIyZGNiZjhiNjMu
LjYzYzRkNGM1ZjNiODhjYjg1MjZkOTg5NjFhNmYyNjMwNDc1NjQzYmEgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzb3VyY2UvU291cmNlQnVmZmVyLmgKKysrIGIvU291
cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXNvdXJjZS9Tb3VyY2VCdWZmZXIuaApAQCAtNzcsNiAr
NzcsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBhYm9ydElmVXBkYXRpbmcoKTsKICAgICB2b2lkIHJl
bW92ZWRGcm9tTWVkaWFTb3VyY2UoKTsKICAgICBjb25zdCBNZWRpYVRpbWUmIGhpZ2hlc3RQcmVz
ZW50YXRpb25FbmRUaW1lc3RhbXAoKSBjb25zdCB7IHJldHVybiBtX2hpZ2hlc3RQcmVzZW50YXRp
b25FbmRUaW1lc3RhbXA7IH0KKyAgICB2b2lkIHNlZWtUb1RpbWUoY29uc3QgTWVkaWFUaW1lJik7
CiAKICNpZiBFTkFCTEUoVklERU9fVFJBQ0spCiAgICAgVmlkZW9UcmFja0xpc3QqIHZpZGVvVHJh
Y2tzKCk7CkBAIC0xMTYsNyArMTE3LDYgQEAgcHJpdmF0ZToKICAgICB2aXJ0dWFsIGJvb2wgc291
cmNlQnVmZmVyUHJpdmF0ZUhhc0F1ZGlvKGNvbnN0IFNvdXJjZUJ1ZmZlclByaXZhdGUqKSBjb25z
dCBvdmVycmlkZTsKICAgICB2aXJ0dWFsIGJvb2wgc291cmNlQnVmZmVyUHJpdmF0ZUhhc1ZpZGVv
KGNvbnN0IFNvdXJjZUJ1ZmZlclByaXZhdGUqKSBjb25zdCBvdmVycmlkZTsKICAgICB2aXJ0dWFs
IHZvaWQgc291cmNlQnVmZmVyUHJpdmF0ZURpZEJlY29tZVJlYWR5Rm9yTW9yZVNhbXBsZXMoU291
cmNlQnVmZmVyUHJpdmF0ZSosIEF0b21pY1N0cmluZyB0cmFja0lEKSBvdmVycmlkZTsKLSAgICB2
aXJ0dWFsIHZvaWQgc291cmNlQnVmZmVyUHJpdmF0ZVNlZWtUb1RpbWUoU291cmNlQnVmZmVyUHJp
dmF0ZSosIGNvbnN0IE1lZGlhVGltZSYpOwogICAgIHZpcnR1YWwgTWVkaWFUaW1lIHNvdXJjZUJ1
ZmZlclByaXZhdGVGYXN0U2Vla1RpbWVGb3JNZWRpYVRpbWUoU291cmNlQnVmZmVyUHJpdmF0ZSos
IGNvbnN0IE1lZGlhVGltZSYsIGNvbnN0IE1lZGlhVGltZSYgbmVnYXRpdmVUaHJlc2hvbGQsIGNv
bnN0IE1lZGlhVGltZSYgcG9zaXRpdmVUaHJlc2hvbGQpOwogICAgIHZpcnR1YWwgdm9pZCBzb3Vy
Y2VCdWZmZXJQcml2YXRlQXBwZW5kQ29tcGxldGUoU291cmNlQnVmZmVyUHJpdmF0ZSosIEFwcGVu
ZFJlc3VsdCkgb3ZlcnJpZGU7CiAgICAgdmlydHVhbCB2b2lkIHNvdXJjZUJ1ZmZlclByaXZhdGVE
aWRSZWNlaXZlUmVuZGVyaW5nRXJyb3IoU291cmNlQnVmZmVyUHJpdmF0ZSosIGludCBlcnJvckNv
ZGUpIG92ZXJyaWRlOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MTWVkaWFF
bGVtZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTE1lZGlhRWxlbWVudC5jcHAKaW5k
ZXggY2IxMTc1YTkwMWRkNzQyMTdkMzdkMzEyYzRmOTdhNDYwNzJjY2Q2MC4uNzdiZWJjMGRhNzE5
M2FmZDM4MTk3MTEyODgzOGIxNGY1OTAxMWJjMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
aHRtbC9IVE1MTWVkaWFFbGVtZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxN
ZWRpYUVsZW1lbnQuY3BwCkBAIC00MDkxLDcgKzQwOTEsOCBAQCB2b2lkIEhUTUxNZWRpYUVsZW1l
bnQ6Om1lZGlhUGxheWVyVGltZUNoYW5nZWQoTWVkaWFQbGF5ZXIqKQogICAgIC8vIEFsd2F5cyBj
YWxsIHNjaGVkdWxlVGltZXVwZGF0ZUV2ZW50IHdoZW4gdGhlIG1lZGlhIGVuZ2luZSByZXBvcnRz
IGEgdGltZSBkaXNjb250aW51aXR5LCAKICAgICAvLyBpdCB3aWxsIG9ubHkgcXVldWUgYSAndGlt
ZXVwZGF0ZScgZXZlbnQgaWYgd2UgaGF2ZW4ndCBhbHJlYWR5IHBvc3RlZCBvbmUgYXQgdGhlIGN1
cnJlbnQKICAgICAvLyBtb3ZpZSB0aW1lLgotICAgIHNjaGVkdWxlVGltZXVwZGF0ZUV2ZW50KGZh
bHNlKTsKKyAgICBlbHNlCisgICAgICAgIHNjaGVkdWxlVGltZXVwZGF0ZUV2ZW50KGZhbHNlKTsK
IAogICAgIGRvdWJsZSBub3cgPSBjdXJyZW50VGltZSgpOwogICAgIGRvdWJsZSBkdXIgPSBkdXJh
dGlvbigpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvTWVk
aWFTb3VyY2VQcml2YXRlLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9NZWRp
YVNvdXJjZVByaXZhdGUuaAppbmRleCBkYzI0ZTMxZTZmMjJkNTI3ZDY1ZGE3YjJlOTcxNWQ2ODhk
NzQzYWVjLi43MTg2NTg5MTBiY2UzOTJiOTVkYTU0NzZlNjg5ODk5OWU2NDU3ODQ3IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9NZWRpYVNvdXJjZVByaXZhdGUu
aAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9NZWRpYVNvdXJjZVByaXZh
dGUuaApAQCAtNTEsMTQgKzUxLDE2IEBAIHB1YmxpYzoKIAogICAgIGVudW0gQWRkU3RhdHVzIHsg
T2ssIE5vdFN1cHBvcnRlZCwgUmVhY2hlZElkTGltaXQgfTsKICAgICB2aXJ0dWFsIEFkZFN0YXR1
cyBhZGRTb3VyY2VCdWZmZXIoY29uc3QgQ29udGVudFR5cGUmLCBSZWZQdHI8U291cmNlQnVmZmVy
UHJpdmF0ZT4mKSA9IDA7Ci0gICAgdmlydHVhbCBNZWRpYVRpbWUgZHVyYXRpb24oKSA9IDA7Ci0g
ICAgdmlydHVhbCB2b2lkIHNldER1cmF0aW9uKGNvbnN0IE1lZGlhVGltZSYpID0gMDsKKyAgICB2
aXJ0dWFsIHZvaWQgZHVyYXRpb25DaGFuZ2VkKCkgPSAwOwogICAgIGVudW0gRW5kT2ZTdHJlYW1T
dGF0dXMgeyBFb3NOb0Vycm9yLCBFb3NOZXR3b3JrRXJyb3IsIEVvc0RlY29kZUVycm9yIH07CiAg
ICAgdmlydHVhbCB2b2lkIG1hcmtFbmRPZlN0cmVhbShFbmRPZlN0cmVhbVN0YXR1cykgPSAwOwog
ICAgIHZpcnR1YWwgdm9pZCB1bm1hcmtFbmRPZlN0cmVhbSgpID0gMDsKIAogICAgIHZpcnR1YWwg
TWVkaWFQbGF5ZXI6OlJlYWR5U3RhdGUgcmVhZHlTdGF0ZSgpIGNvbnN0ID0gMDsKICAgICB2aXJ0
dWFsIHZvaWQgc2V0UmVhZHlTdGF0ZShNZWRpYVBsYXllcjo6UmVhZHlTdGF0ZSkgPSAwOworCisg
ICAgdmlydHVhbCB2b2lkIHdhaXRGb3JTZWVrQ29tcGxldGVkKCkgPSAwOworICAgIHZpcnR1YWwg
dm9pZCBzZWVrQ29tcGxldGVkKCkgPSAwOwogfTsKIAogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvTWVkaWFTb3VyY2VQcml2YXRlQ2xpZW50LmggYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9NZWRpYVNvdXJjZVByaXZhdGVDbGllbnQuaApp
bmRleCBlNzY2ZjE0MGU4ZjIzYjE3NWY5ZWQyMWQ1ZTBkMzcxY2MyNGIyMTU4Li40M2YxNzE3YzNj
YmYxMDgxNTdhZWE2MjQzZjA0M2YzZjRkN2FkYTliIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9NZWRpYVNvdXJjZVByaXZhdGVDbGllbnQuaAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9NZWRpYVNvdXJjZVByaXZhdGVDbGllbnQuaApA
QCAtNDIsNiArNDIsNyBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIHNldFByaXZhdGVBbmRP
cGVuKFBhc3NSZWY8TWVkaWFTb3VyY2VQcml2YXRlPikgPSAwOwogICAgIHZpcnR1YWwgZG91Ymxl
IGR1cmF0aW9uKCkgY29uc3QgPSAwOwogICAgIHZpcnR1YWwgc3RkOjp1bmlxdWVfcHRyPFBsYXRm
b3JtVGltZVJhbmdlcz4gYnVmZmVyZWQoKSBjb25zdCA9IDA7CisgICAgdmlydHVhbCB2b2lkIHNl
ZWtUb1RpbWUoY29uc3QgTWVkaWFUaW1lJikgPSAwOwogfTsKIAogfQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL29iamMvTWVkaWFQbGF5
ZXJQcml2YXRlTWVkaWFTb3VyY2VBVkZPYmpDLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9hdmZvdW5kYXRpb24vb2JqYy9NZWRpYVBsYXllclByaXZhdGVNZWRpYVNvdXJjZUFW
Rk9iakMuaAppbmRleCA4MGJlZDQ1ZjMwNTlhZTlkMDQ3OTMwOGY1YmQ5MGMzYWJmZmFmNmViLi5m
MGFiZDI3NTNlOGU3NmE0ZGJhZDczOTA1MjBkN2UwODFkYjQ3MDNhIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24vb2JqYy9NZWRpYVBsYXll
clByaXZhdGVNZWRpYVNvdXJjZUFWRk9iakMuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9hdmZvdW5kYXRpb24vb2JqYy9NZWRpYVBsYXllclByaXZhdGVNZWRpYVNvdXJj
ZUFWRk9iakMuaApAQCAtNjUsNiArNjUsOCBAQCBwdWJsaWM6CiAgICAgdm9pZCBzZXROZXR3b3Jr
U3RhdGUoTWVkaWFQbGF5ZXI6Ok5ldHdvcmtTdGF0ZSk7CiAKICAgICB2b2lkIHNlZWtJbnRlcm5h
bCgpOworICAgIHZvaWQgd2FpdEZvclNlZWtDb21wbGV0ZWQoKTsKKyAgICB2b2lkIHNlZWtDb21w
bGV0ZWQoKTsKICAgICB2b2lkIHNldExvYWRpbmdQcm9ncmVzc3NlZChib29sIGZsYWcpIHsgbV9s
b2FkaW5nUHJvZ3Jlc3NlZCA9IGZsYWc7IH0KICAgICB2b2lkIHNldEhhc0F2YWlsYWJsZVZpZGVv
RnJhbWUoYm9vbCBmbGFnKSB7IG1faGFzQXZhaWxhYmxlVmlkZW9GcmFtZSA9IGZsYWc7IH0KICAg
ICB2b2lkIGR1cmF0aW9uQ2hhbmdlZCgpOwpAQCAtMTU3LDYgKzE1OSw3IEBAIHByaXZhdGU6CiAg
ICAgdm9pZCBlbnN1cmVMYXllcigpOwogICAgIHZvaWQgZGVzdHJveUxheWVyKCk7CiAgICAgYm9v
bCBzaG91bGRCZVBsYXlpbmcoKSBjb25zdDsKKyAgICB2b2lkIHNlZWtUaW1lckZpcmVkKFRpbWVy
PE1lZGlhUGxheWVyUHJpdmF0ZU1lZGlhU291cmNlQVZGT2JqQz4mKTsKIAogICAgIC8vIE1lZGlh
UGxheWVyIEZhY3RvcnkgTWV0aG9kcwogICAgIHN0YXRpYyBQYXNzT3duUHRyPE1lZGlhUGxheWVy
UHJpdmF0ZUludGVyZmFjZT4gY3JlYXRlKE1lZGlhUGxheWVyKik7CkBAIC0xODIsNyArMTg1LDYg
QEAgcHJpdmF0ZToKIAogICAgIE1lZGlhUGxheWVyKiBtX3BsYXllcjsKICAgICBXZWFrUHRyRmFj
dG9yeTxNZWRpYVBsYXllclByaXZhdGVNZWRpYVNvdXJjZUFWRk9iakM+IG1fd2Vha1B0ckZhY3Rv
cnk7Ci0gICAgUmVmUHRyPE1lZGlhU291cmNlUHJpdmF0ZUNsaWVudD4gbV9tZWRpYVNvdXJjZTsK
ICAgICBSZWZQdHI8TWVkaWFTb3VyY2VQcml2YXRlQVZGT2JqQz4gbV9tZWRpYVNvdXJjZVByaXZh
dGU7CiAgICAgUmV0YWluUHRyPEFWQXNzZXQ+IG1fYXNzZXQ7CiAgICAgUmV0YWluUHRyPEFWU2Ft
cGxlQnVmZmVyRGlzcGxheUxheWVyPiBtX3NhbXBsZUJ1ZmZlckRpc3BsYXlMYXllcjsKQEAgLTE5
MCw2ICsxOTIsNyBAQCBwcml2YXRlOgogICAgIFJldGFpblB0cjxBVlNhbXBsZUJ1ZmZlclJlbmRl
clN5bmNocm9uaXplcj4gbV9zeW5jaHJvbml6ZXI7CiAgICAgUmV0YWluUHRyPGlkPiBtX3RpbWVK
dW1wZWRPYnNlcnZlcjsKICAgICBSZXRhaW5QdHI8aWQ+IG1fZHVyYXRpb25PYnNlcnZlcjsKKyAg
ICBUaW1lcjxNZWRpYVBsYXllclByaXZhdGVNZWRpYVNvdXJjZUFWRk9iakM+IG1fc2Vla1RpbWVy
OwogICAgIE1lZGlhUGxheWVyOjpOZXR3b3JrU3RhdGUgbV9uZXR3b3JrU3RhdGU7CiAgICAgTWVk
aWFQbGF5ZXI6OlJlYWR5U3RhdGUgbV9yZWFkeVN0YXRlOwogICAgIGRvdWJsZSBtX3JhdGU7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24v
b2JqYy9NZWRpYVBsYXllclByaXZhdGVNZWRpYVNvdXJjZUFWRk9iakMubW0gYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24vb2JqYy9NZWRpYVBsYXllclByaXZh
dGVNZWRpYVNvdXJjZUFWRk9iakMubW0KaW5kZXggZDhiNjVmNjA4NjJiMGJmZTVjZjM4NjI4MThl
MzRmMzM2YWI3NDcxMy4uNWQ3MzYwMjFlMTRlYjIyZDExNmFiMmJkNTgzYjlkNTU0Zjg0Y2FhZiAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9u
L29iamMvTWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFTb3VyY2VBVkZPYmpDLm1tCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9vYmpjL01lZGlhUGxheWVy
UHJpdmF0ZU1lZGlhU291cmNlQVZGT2JqQy5tbQpAQCAtMjksNiArMjksNyBAQAogI2lmIEVOQUJM
RShNRURJQV9TT1VSQ0UpICYmIFVTRShBVkZPVU5EQVRJT04pCiAKICNpbXBvcnQgIkNETVNlc3Np
b24uaCIKKyNpbXBvcnQgIkxvZ2dpbmcuaCIKICNpbXBvcnQgIk1lZGlhU291cmNlUHJpdmF0ZUFW
Rk9iakMuaCIKICNpbXBvcnQgIk1lZGlhU291cmNlUHJpdmF0ZUNsaWVudC5oIgogI2ltcG9ydCAi
TWVkaWFUaW1lTWFjLmgiCkBAIC0xMzQsNiArMTM1LDcgQEAgTWVkaWFQbGF5ZXJQcml2YXRlTWVk
aWFTb3VyY2VBVkZPYmpDOjpNZWRpYVBsYXllclByaXZhdGVNZWRpYVNvdXJjZUFWRk9iakMoTWVk
aWEKICAgICA6IG1fcGxheWVyKHBsYXllcikKICAgICAsIG1fd2Vha1B0ckZhY3RvcnkodGhpcykK
ICAgICAsIG1fc3luY2hyb25pemVyKGFkb3B0TlMoW1tnZXRBVlNhbXBsZUJ1ZmZlclJlbmRlclN5
bmNocm9uaXplckNsYXNzKCkgYWxsb2NdIGluaXRdKSkKKyAgICAsIG1fc2Vla1RpbWVyKHRoaXMs
ICZNZWRpYVBsYXllclByaXZhdGVNZWRpYVNvdXJjZUFWRk9iakM6OnNlZWtUaW1lckZpcmVkKQog
ICAgICwgbV9uZXR3b3JrU3RhdGUoTWVkaWFQbGF5ZXI6OkVtcHR5KQogICAgICwgbV9yZWFkeVN0
YXRlKE1lZGlhUGxheWVyOjpIYXZlTm90aGluZykKICAgICAsIG1fcmF0ZSgxKQpAQCAtMTQ5LDE5
ICsxNTEsMjQgQEAgTWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFTb3VyY2VBVkZPYmpDOjpNZWRpYVBs
YXllclByaXZhdGVNZWRpYVNvdXJjZUFWRk9iakMoTWVkaWEKICAgICAvLyBhZGRQZXJpb2RpY1Rp
bWVPYnNlcnZlckZvckludGVydmFsOiB0aHJvd3MgYW4gZXhjZXB0aW9uIGlmIHlvdSBwYXNzIGEg
bm9uLW51bWVyaWMgQ01UaW1lLCBzbyBqdXN0IHVzZQogICAgIC8vIGFuIGFyYml0cmFyaWx5IGxh
cmdlIHRpbWUgdmFsdWUgb2Ygb25jZSBhbiBob3VyOgogICAgIF9fYmxvY2sgYXV0byB3ZWFrVGhp
cyA9IGNyZWF0ZVdlYWtQdHIoKTsKLSAgICBtX3RpbWVKdW1wZWRPYnNlcnZlciA9IFttX3N5bmNo
cm9uaXplciBhZGRQZXJpb2RpY1RpbWVPYnNlcnZlckZvckludGVydmFsOnRvQ01UaW1lKE1lZGlh
VGltZTo6Y3JlYXRlV2l0aERvdWJsZSgzNjAwKSkgcXVldWU6ZGlzcGF0Y2hfZ2V0X21haW5fcXVl
dWUoKSB1c2luZ0Jsb2NrOl4oQ01UaW1lKXsKKyAgICBtX3RpbWVKdW1wZWRPYnNlcnZlciA9IFtt
X3N5bmNocm9uaXplciBhZGRQZXJpb2RpY1RpbWVPYnNlcnZlckZvckludGVydmFsOnRvQ01UaW1l
KE1lZGlhVGltZTo6Y3JlYXRlV2l0aERvdWJsZSgzNjAwKSkgcXVldWU6ZGlzcGF0Y2hfZ2V0X21h
aW5fcXVldWUoKSB1c2luZ0Jsb2NrOl4oQ01UaW1lIHRpbWUpIHsKKyNpZiBMT0dfRElTQUJMRUQK
KyAgICAgICAgVU5VU0VEX1BBUkFNKHRpbWUpOworI2VuZGlmCiAgICAgICAgIC8vIEZJWE1FOiBS
ZW1vdmUgdGhlIGJlbG93IG9uY2UgPHJkYXI6Ly9wcm9ibGVtLzE1Nzk4MDUwPiBpcyBmaXhlZC4K
ICAgICAgICAgaWYgKCF3ZWFrVGhpcykKICAgICAgICAgICAgIHJldHVybjsKIAogICAgICAgICBp
ZiAobV9zZWVraW5nICYmICFtX3BlbmRpbmdTZWVrKSB7CisgICAgICAgICAgICBMT0coTWVkaWFT
b3VyY2UsICJNZWRpYVBsYXllclByaXZhdGVNZWRpYVNvdXJjZUFWRk9iakM6Om1fdGltZUp1bXBl
ZE9ic2VydmVyKCVwKSAtIHRpbWUoJXMpIiwgd2Vha1RoaXMuZ2V0KCksIHRvU3RyaW5nKHRvTWVk
aWFUaW1lKHRpbWUpKS51dGY4KCkuZGF0YSgpKTsKICAgICAgICAgICAgIG1fc2Vla2luZyA9IGZh
bHNlOworCiAgICAgICAgICAgICBpZiAoc2hvdWxkQmVQbGF5aW5nKCkpCiAgICAgICAgICAgICAg
ICAgW21fc3luY2hyb25pemVyIHNldFJhdGU6bV9yYXRlXTsKKyAgICAgICAgICAgIGlmICghc2Vl
a2luZygpKQorICAgICAgICAgICAgICAgIG1fcGxheWVyLT50aW1lQ2hhbmdlZCgpOwogICAgICAg
ICB9CiAKLSAgICAgICAgbV9wbGF5ZXItPnRpbWVDaGFuZ2VkKCk7Ci0KICAgICAgICAgaWYgKG1f
cGVuZGluZ1NlZWspCiAgICAgICAgICAgICBzZWVrSW50ZXJuYWwoKTsKICAgICB9XTsKQEAgLTE3
Nyw2ICsxODQsOCBAQCBNZWRpYVBsYXllclByaXZhdGVNZWRpYVNvdXJjZUFWRk9iakM6On5NZWRp
YVBsYXllclByaXZhdGVNZWRpYVNvdXJjZUFWRk9iakMoKQogICAgICAgICBbbV9zeW5jaHJvbml6
ZXIgcmVtb3ZlVGltZU9ic2VydmVyOm1fdGltZUp1bXBlZE9ic2VydmVyLmdldCgpXTsKICAgICBp
ZiAobV9kdXJhdGlvbk9ic2VydmVyKQogICAgICAgICBbbV9zeW5jaHJvbml6ZXIgcmVtb3ZlVGlt
ZU9ic2VydmVyOm1fZHVyYXRpb25PYnNlcnZlci5nZXQoKV07CisKKyAgICBtX3NlZWtUaW1lci5z
dG9wKCk7CiB9CiAKICNwcmFnbWEgbWFyayAtCkBAIC0yODYsMTQgKzI5NSwxMSBAQCB2b2lkIE1l
ZGlhUGxheWVyUHJpdmF0ZU1lZGlhU291cmNlQVZGT2JqQzo6bG9hZChjb25zdCBTdHJpbmcmKQog
ICAgIG1fcGxheWVyLT5uZXR3b3JrU3RhdGVDaGFuZ2VkKCk7CiB9CiAKLXZvaWQgTWVkaWFQbGF5
ZXJQcml2YXRlTWVkaWFTb3VyY2VBVkZPYmpDOjpsb2FkKGNvbnN0IFN0cmluZyYgdXJsLCBNZWRp
YVNvdXJjZVByaXZhdGVDbGllbnQqIHNvdXJjZSkKK3ZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlTWVk
aWFTb3VyY2VBVkZPYmpDOjpsb2FkKGNvbnN0IFN0cmluZyYgdXJsLCBNZWRpYVNvdXJjZVByaXZh
dGVDbGllbnQqIGNsaWVudCkKIHsKICAgICBVTlVTRURfUEFSQU0odXJsKTsKIAotICAgIG1fbWVk
aWFTb3VyY2UgPSBzb3VyY2U7Ci0gICAgbV9tZWRpYVNvdXJjZVByaXZhdGUgPSBNZWRpYVNvdXJj
ZVByaXZhdGVBVkZPYmpDOjpjcmVhdGUodGhpcyk7Ci0KLSAgICBtX21lZGlhU291cmNlLT5zZXRQ
cml2YXRlQW5kT3BlbigqbV9tZWRpYVNvdXJjZVByaXZhdGUpOworICAgIG1fbWVkaWFTb3VyY2VQ
cml2YXRlID0gTWVkaWFTb3VyY2VQcml2YXRlQVZGT2JqQzo6Y3JlYXRlKHRoaXMsIGNsaWVudCk7
CiB9CiAKIHZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFTb3VyY2VBVkZPYmpDOjpjYW5jZWxM
b2FkKCkKQEAgLTQwNiw3ICs0MTIsNyBAQCB2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZU1lZGlhU291
cmNlQVZGT2JqQzo6c2V0VmlzaWJsZShib29sKQogCiBkb3VibGUgTWVkaWFQbGF5ZXJQcml2YXRl
TWVkaWFTb3VyY2VBVkZPYmpDOjpkdXJhdGlvbkRvdWJsZSgpIGNvbnN0CiB7Ci0gICAgcmV0dXJu
IG1fbWVkaWFTb3VyY2UgPyBtX21lZGlhU291cmNlLT5kdXJhdGlvbigpIDogMDsKKyAgICByZXR1
cm4gbV9tZWRpYVNvdXJjZVByaXZhdGUgPyBtX21lZGlhU291cmNlUHJpdmF0ZS0+ZHVyYXRpb24o
KS50b0RvdWJsZSgpIDogMDsKIH0KIAogTWVkaWFUaW1lIE1lZGlhUGxheWVyUHJpdmF0ZU1lZGlh
U291cmNlQVZGT2JqQzo6Y3VycmVudE1lZGlhVGltZSgpIGNvbnN0CkBAIC00MzEsMTYgKzQzNywx
OSBAQCBkb3VibGUgTWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFTb3VyY2VBVkZPYmpDOjppbml0aWFs
VGltZSgpIGNvbnN0CiAKIHZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFTb3VyY2VBVkZPYmpD
OjpzZWVrV2l0aFRvbGVyYW5jZShkb3VibGUgdGltZSwgZG91YmxlIG5lZ2F0aXZlVGhyZXNob2xk
LCBkb3VibGUgcG9zaXRpdmVUaHJlc2hvbGQpCiB7CisgICAgTE9HKE1lZGlhU291cmNlLCAiTWVk
aWFQbGF5ZXJQcml2YXRlTWVkaWFTb3VyY2VBVkZPYmpDOjpzZWVrV2l0aFRvbGVyYW5jZSglcCkg
LSB0aW1lKCVzKSwgbmVnYXRpdmVUaHJlc2hvbGQoJXMpLCBwb3NpdGl2ZVRocmVzaG9sZCglcyki
LCB0aGlzLCB0b1N0cmluZyh0aW1lKS51dGY4KCkuZGF0YSgpLCB0b1N0cmluZyhuZWdhdGl2ZVRo
cmVzaG9sZCkudXRmOCgpLmRhdGEoKSwgdG9TdHJpbmcocG9zaXRpdmVUaHJlc2hvbGQpLnV0Zjgo
KS5kYXRhKCkpOwogICAgIG1fc2Vla2luZyA9IHRydWU7Ci0gICAgbV9zZWVrQ29tcGxldGVkID0g
ZmFsc2U7CiAgICAgYXV0byB3ZWFrVGhpcyA9IGNyZWF0ZVdlYWtQdHIoKTsKICAgICBtX3BlbmRp
bmdTZWVrID0gc3RkOjptYWtlX3VuaXF1ZTxQZW5kaW5nU2Vlaz4oTWVkaWFUaW1lOjpjcmVhdGVX
aXRoRG91YmxlKHRpbWUpLCBNZWRpYVRpbWU6OmNyZWF0ZVdpdGhEb3VibGUobmVnYXRpdmVUaHJl
c2hvbGQpLCBNZWRpYVRpbWU6OmNyZWF0ZVdpdGhEb3VibGUocG9zaXRpdmVUaHJlc2hvbGQpKTsK
IAotICAgIGNhbGxPbk1haW5UaHJlYWQoW3dlYWtUaGlzXSB7Ci0gICAgICAgIGlmICghd2Vha1Ro
aXMpCi0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIHdlYWtUaGlzLmdldCgpLT5zZWVrSW50
ZXJuYWwoKTsKLSAgICB9KTsKKyAgICBpZiAobV9zZWVrVGltZXIuaXNBY3RpdmUoKSkKKyAgICAg
ICAgbV9zZWVrVGltZXIuc3RvcCgpOworICAgIG1fc2Vla1RpbWVyLnN0YXJ0T25lU2hvdCgwKTsK
K30KKwordm9pZCBNZWRpYVBsYXllclByaXZhdGVNZWRpYVNvdXJjZUFWRk9iakM6OnNlZWtUaW1l
ckZpcmVkKFRpbWVyPE1lZGlhUGxheWVyUHJpdmF0ZU1lZGlhU291cmNlQVZGT2JqQz4mKQorewor
ICAgIHNlZWtJbnRlcm5hbCgpOwogfQogCiB2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZU1lZGlhU291
cmNlQVZGT2JqQzo6c2Vla0ludGVybmFsKCkKQEAgLTQ2MCwxMCArNDY5LDMwIEBAIHZvaWQgTWVk
aWFQbGF5ZXJQcml2YXRlTWVkaWFTb3VyY2VBVkZPYmpDOjpzZWVrSW50ZXJuYWwoKQogICAgIGVs
c2UKICAgICAgICAgc2Vla1RpbWUgPSBtX21lZGlhU291cmNlUHJpdmF0ZS0+ZmFzdFNlZWtUaW1l
Rm9yTWVkaWFUaW1lKHBlbmRpbmdTZWVrLT50YXJnZXRUaW1lLCBwZW5kaW5nU2Vlay0+cG9zaXRp
dmVUaHJlc2hvbGQsIHBlbmRpbmdTZWVrLT5uZWdhdGl2ZVRocmVzaG9sZCk7CiAKKyAgICBMT0co
TWVkaWFTb3VyY2UsICJNZWRpYVBsYXllclByaXZhdGVNZWRpYVNvdXJjZUFWRk9iakM6OnNlZWtJ
bnRlcm5hbCglcCkgLSBzZWVrVGltZSglcykiLCB0aGlzLCB0b1N0cmluZyhzZWVrVGltZSkudXRm
OCgpLmRhdGEoKSk7CisKICAgICBbbV9zeW5jaHJvbml6ZXIgc2V0UmF0ZTowIHRpbWU6dG9DTVRp
bWUoc2Vla1RpbWUpXTsKICAgICBtX21lZGlhU291cmNlUHJpdmF0ZS0+c2Vla1RvVGltZShzZWVr
VGltZSk7CiB9CiAKK3ZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFTb3VyY2VBVkZPYmpDOjp3
YWl0Rm9yU2Vla0NvbXBsZXRlZCgpCit7CisgICAgaWYgKCFtX3NlZWtpbmcpCisgICAgICAgIHJl
dHVybjsKKyAgICBMT0coTWVkaWFTb3VyY2UsICJNZWRpYVBsYXllclByaXZhdGVNZWRpYVNvdXJj
ZUFWRk9iakM6OndhaXRGb3JTZWVrQ29tcGxldGVkKCVwKSIsIHRoaXMpOworICAgIG1fc2Vla0Nv
bXBsZXRlZCA9IGZhbHNlOworfQorCit2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZU1lZGlhU291cmNl
QVZGT2JqQzo6c2Vla0NvbXBsZXRlZCgpCit7CisgICAgaWYgKG1fc2Vla0NvbXBsZXRlZCkKKyAg
ICAgICAgcmV0dXJuOworICAgIExPRyhNZWRpYVNvdXJjZSwgIk1lZGlhUGxheWVyUHJpdmF0ZU1l
ZGlhU291cmNlQVZGT2JqQzo6c2Vla0NvbXBsZXRlZCglcCkiLCB0aGlzKTsKKyAgICBtX3NlZWtD
b21wbGV0ZWQgPSB0cnVlOworICAgIGlmICghbV9zZWVraW5nKQorICAgICAgICBtX3BsYXllci0+
dGltZUNoYW5nZWQoKTsKK30KKwogYm9vbCBNZWRpYVBsYXllclByaXZhdGVNZWRpYVNvdXJjZUFW
Rk9iakM6OnNlZWtpbmcoKSBjb25zdAogewogICAgIHJldHVybiBtX3NlZWtpbmcgJiYgIW1fc2Vl
a0NvbXBsZXRlZDsKQEAgLTUwMyw3ICs1MzIsNyBAQCBkb3VibGUgTWVkaWFQbGF5ZXJQcml2YXRl
TWVkaWFTb3VyY2VBVkZPYmpDOjptaW5UaW1lU2Vla2FibGUoKSBjb25zdAogCiBzdGQ6OnVuaXF1
ZV9wdHI8UGxhdGZvcm1UaW1lUmFuZ2VzPiBNZWRpYVBsYXllclByaXZhdGVNZWRpYVNvdXJjZUFW
Rk9iakM6OmJ1ZmZlcmVkKCkgY29uc3QKIHsKLSAgICByZXR1cm4gbV9tZWRpYVNvdXJjZSA/IG1f
bWVkaWFTb3VyY2UtPmJ1ZmZlcmVkKCkgOiBQbGF0Zm9ybVRpbWVSYW5nZXM6OmNyZWF0ZSgpOwor
ICAgIHJldHVybiBtX21lZGlhU291cmNlUHJpdmF0ZSA/IG1fbWVkaWFTb3VyY2VQcml2YXRlLT5i
dWZmZXJlZCgpIDogUGxhdGZvcm1UaW1lUmFuZ2VzOjpjcmVhdGUoKTsKIH0KIAogYm9vbCBNZWRp
YVBsYXllclByaXZhdGVNZWRpYVNvdXJjZUFWRk9iakM6OmRpZExvYWRpbmdQcm9ncmVzcygpIGNv
bnN0CkBAIC02MzYsOCArNjY1LDEwIEBAIHZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFTb3Vy
Y2VBVkZPYmpDOjpkdXJhdGlvbkNoYW5nZWQoKQogICAgIGF1dG8gd2Vha1RoaXMgPSBjcmVhdGVX
ZWFrUHRyKCk7CiAgICAgTlNBcnJheSogdGltZXMgPSBAW1tOU1ZhbHVlIHZhbHVlV2l0aENNVGlt
ZTp0b0NNVGltZShkdXJhdGlvbildXTsKICAgICBtX2R1cmF0aW9uT2JzZXJ2ZXIgPSBbbV9zeW5j
aHJvbml6ZXIgYWRkQm91bmRhcnlUaW1lT2JzZXJ2ZXJGb3JUaW1lczp0aW1lcyBxdWV1ZTpkaXNw
YXRjaF9nZXRfbWFpbl9xdWV1ZSgpIHVzaW5nQmxvY2s6W3dlYWtUaGlzXSB7Ci0gICAgICAgIGlm
ICh3ZWFrVGhpcykKKyAgICAgICAgaWYgKHdlYWtUaGlzKSB7CiAgICAgICAgICAgICB3ZWFrVGhp
cy0+cGF1c2VJbnRlcm5hbCgpOworICAgICAgICAgICAgd2Vha1RoaXMtPm1fcGxheWVyLT50aW1l
Q2hhbmdlZCgpOworICAgICAgICB9CiAgICAgfV07CiAKICAgICBpZiAobV9wbGF5aW5nICYmIGR1
cmF0aW9uIDw9IGN1cnJlbnRNZWRpYVRpbWUoKSkKQEAgLTY3NiwxMSArNzA3LDYgQEAgdm9pZCBN
ZWRpYVBsYXllclByaXZhdGVNZWRpYVNvdXJjZUFWRk9iakM6OnNldFJlYWR5U3RhdGUoTWVkaWFQ
bGF5ZXI6OlJlYWR5U3RhdGUKIAogICAgIG1fcmVhZHlTdGF0ZSA9IHJlYWR5U3RhdGU7CiAKLSAg
ICBpZiAoIW1fc2Vla0NvbXBsZXRlZCAmJiBtX3JlYWR5U3RhdGUgPj0gTWVkaWFQbGF5ZXI6Okhh
dmVDdXJyZW50RGF0YSkgewotICAgICAgICBtX3NlZWtDb21wbGV0ZWQgPSB0cnVlOwotICAgICAg
ICBtX3BsYXllci0+dGltZUNoYW5nZWQoKTsKLSAgICB9Ci0KICAgICBpZiAoc2hvdWxkQmVQbGF5
aW5nKCkpCiAgICAgICAgIFttX3N5bmNocm9uaXplciBzZXRSYXRlOm1fcmF0ZV07CiAgICAgZWxz
ZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0
aW9uL29iamMvTWVkaWFTb3VyY2VQcml2YXRlQVZGT2JqQy5oIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL29iamMvTWVkaWFTb3VyY2VQcml2YXRlQVZGT2Jq
Qy5oCmluZGV4IDJhODExZTliNjdjZTgzMjdjMzE3ZGVmMGRlNTQ3MGJlOTk4YmQ3YzYuLmNiZDFk
NGU5MmEzYjU0Y2M3MzY2MzU3Nzc1ZGVkYTkxMzI4NDlkYTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9vYmpjL01lZGlhU291cmNlUHJp
dmF0ZUFWRk9iakMuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hdmZv
dW5kYXRpb24vb2JqYy9NZWRpYVNvdXJjZVByaXZhdGVBVkZPYmpDLmgKQEAgLTQ1LDMwICs0NSwz
NSBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIENETVNlc3Npb247CiBjbGFzcyBNZWRp
YVBsYXllclByaXZhdGVNZWRpYVNvdXJjZUFWRk9iakM7CitjbGFzcyBNZWRpYVNvdXJjZVByaXZh
dGVDbGllbnQ7CiBjbGFzcyBTb3VyY2VCdWZmZXJQcml2YXRlQVZGT2JqQzsKIGNsYXNzIFRpbWVS
YW5nZXM7CiAKIGNsYXNzIE1lZGlhU291cmNlUHJpdmF0ZUFWRk9iakMgZmluYWwgOiBwdWJsaWMg
TWVkaWFTb3VyY2VQcml2YXRlIHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgUmVmUHRyPE1lZGlhU291
cmNlUHJpdmF0ZUFWRk9iakM+IGNyZWF0ZShNZWRpYVBsYXllclByaXZhdGVNZWRpYVNvdXJjZUFW
Rk9iakMqKTsKKyAgICBzdGF0aWMgUmVmUHRyPE1lZGlhU291cmNlUHJpdmF0ZUFWRk9iakM+IGNy
ZWF0ZShNZWRpYVBsYXllclByaXZhdGVNZWRpYVNvdXJjZUFWRk9iakMqLCBNZWRpYVNvdXJjZVBy
aXZhdGVDbGllbnQqKTsKICAgICB2aXJ0dWFsIH5NZWRpYVNvdXJjZVByaXZhdGVBVkZPYmpDKCk7
CiAKICAgICBNZWRpYVBsYXllclByaXZhdGVNZWRpYVNvdXJjZUFWRk9iakMqIHBsYXllcigpIGNv
bnN0IHsgcmV0dXJuIG1fcGxheWVyOyB9CiAgICAgY29uc3QgVmVjdG9yPFNvdXJjZUJ1ZmZlclBy
aXZhdGVBVkZPYmpDKj4mIGFjdGl2ZVNvdXJjZUJ1ZmZlcnMoKSBjb25zdCB7IHJldHVybiBtX2Fj
dGl2ZVNvdXJjZUJ1ZmZlcnM7IH0KIAogICAgIHZpcnR1YWwgQWRkU3RhdHVzIGFkZFNvdXJjZUJ1
ZmZlcihjb25zdCBDb250ZW50VHlwZSYsIFJlZlB0cjxTb3VyY2VCdWZmZXJQcml2YXRlPiYpIG92
ZXJyaWRlOwotICAgIHZpcnR1YWwgTWVkaWFUaW1lIGR1cmF0aW9uKCkgb3ZlcnJpZGU7Ci0gICAg
dmlydHVhbCB2b2lkIHNldER1cmF0aW9uKGNvbnN0IE1lZGlhVGltZSYpIG92ZXJyaWRlOworICAg
IHZpcnR1YWwgdm9pZCBkdXJhdGlvbkNoYW5nZWQoKSBvdmVycmlkZTsKICAgICB2aXJ0dWFsIHZv
aWQgbWFya0VuZE9mU3RyZWFtKEVuZE9mU3RyZWFtU3RhdHVzKSBvdmVycmlkZTsKICAgICB2aXJ0
dWFsIHZvaWQgdW5tYXJrRW5kT2ZTdHJlYW0oKSBvdmVycmlkZTsKICAgICB2aXJ0dWFsIE1lZGlh
UGxheWVyOjpSZWFkeVN0YXRlIHJlYWR5U3RhdGUoKSBjb25zdCBvdmVycmlkZTsKICAgICB2aXJ0
dWFsIHZvaWQgc2V0UmVhZHlTdGF0ZShNZWRpYVBsYXllcjo6UmVhZHlTdGF0ZSkgb3ZlcnJpZGU7
CisgICAgdmlydHVhbCB2b2lkIHdhaXRGb3JTZWVrQ29tcGxldGVkKCkgb3ZlcnJpZGU7CisgICAg
dmlydHVhbCB2b2lkIHNlZWtDb21wbGV0ZWQoKSBvdmVycmlkZTsKKworICAgIE1lZGlhVGltZSBk
dXJhdGlvbigpOworICAgIHN0ZDo6dW5pcXVlX3B0cjxQbGF0Zm9ybVRpbWVSYW5nZXM+IGJ1ZmZl
cmVkKCk7CiAKICAgICBib29sIGhhc0F1ZGlvKCkgY29uc3Q7CiAgICAgYm9vbCBoYXNWaWRlbygp
IGNvbnN0OwogCi0gICAgdm9pZCBzZWVrVG9UaW1lKE1lZGlhVGltZSk7Ci0gICAgTWVkaWFUaW1l
IGZhc3RTZWVrVGltZUZvck1lZGlhVGltZShNZWRpYVRpbWUsIE1lZGlhVGltZSBuZWdhdGl2ZVRo
cmVzaG9sZCwgTWVkaWFUaW1lIHBvc2l0aXZlVGhyZXNob2xkKTsKKyAgICB2b2lkIHNlZWtUb1Rp
bWUoY29uc3QgTWVkaWFUaW1lJik7CisgICAgTWVkaWFUaW1lIGZhc3RTZWVrVGltZUZvck1lZGlh
VGltZShjb25zdCBNZWRpYVRpbWUmLCBjb25zdCBNZWRpYVRpbWUmIG5lZ2F0aXZlVGhyZXNob2xk
LCBjb25zdCBNZWRpYVRpbWUmIHBvc2l0aXZlVGhyZXNob2xkKTsKICAgICBJbnRTaXplIG5hdHVy
YWxTaXplKCkgY29uc3Q7CiAKICNpZiBFTkFCTEUoRU5DUllQVEVEX01FRElBX1YyKQpAQCAtNzYs
NyArODEsNyBAQCBwdWJsaWM6CiAjZW5kaWYKIAogcHJpdmF0ZToKLSAgICBNZWRpYVNvdXJjZVBy
aXZhdGVBVkZPYmpDKE1lZGlhUGxheWVyUHJpdmF0ZU1lZGlhU291cmNlQVZGT2JqQyopOworICAg
IE1lZGlhU291cmNlUHJpdmF0ZUFWRk9iakMoTWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFTb3VyY2VB
VkZPYmpDKiwgTWVkaWFTb3VyY2VQcml2YXRlQ2xpZW50Kik7CiAKICAgICB2b2lkIHNvdXJjZUJ1
ZmZlclByaXZhdGVEaWRDaGFuZ2VBY3RpdmVTdGF0ZShTb3VyY2VCdWZmZXJQcml2YXRlQVZGT2Jq
QyosIGJvb2wgYWN0aXZlKTsKICAgICB2b2lkIHNvdXJjZUJ1ZmZlclByaXZhdGVEaWRSZWNlaXZl
SW5pdGlhbGl6YXRpb25TZWdtZW50KFNvdXJjZUJ1ZmZlclByaXZhdGVBVkZPYmpDKik7CkBAIC04
OSw3ICs5NCw3IEBAIHByaXZhdGU6CiAgICAgZnJpZW5kIGNsYXNzIFNvdXJjZUJ1ZmZlclByaXZh
dGVBVkZPYmpDOwogCiAgICAgTWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFTb3VyY2VBVkZPYmpDKiBt
X3BsYXllcjsKLSAgICBNZWRpYVRpbWUgbV9kdXJhdGlvbjsKKyAgICBSZWZQdHI8TWVkaWFTb3Vy
Y2VQcml2YXRlQ2xpZW50PiBtX2NsaWVudDsKICAgICBWZWN0b3I8UmVmUHRyPFNvdXJjZUJ1ZmZl
clByaXZhdGVBVkZPYmpDPj4gbV9zb3VyY2VCdWZmZXJzOwogICAgIFZlY3RvcjxTb3VyY2VCdWZm
ZXJQcml2YXRlQVZGT2JqQyo+IG1fYWN0aXZlU291cmNlQnVmZmVyczsKICAgICBEZXF1ZTxTb3Vy
Y2VCdWZmZXJQcml2YXRlQVZGT2JqQyo+IG1fc291cmNlQnVmZmVyc05lZWRpbmdTZXNzaW9uczsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlv
bi9vYmpjL01lZGlhU291cmNlUHJpdmF0ZUFWRk9iakMubW0gYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24vb2JqYy9NZWRpYVNvdXJjZVByaXZhdGVBVkZPYmpD
Lm1tCmluZGV4IDFmYWYxOTdkMDQyM2JlYTNkZDBhYWI5ODI5MzM5YzFjYWZhMDFhMGYuLmYyYTRi
MzRmMzA0NzI2ZGRkZTNhZWMyY2ZjMDM1MGJhNDJlOWU1NDUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9vYmpjL01lZGlhU291cmNlUHJp
dmF0ZUFWRk9iakMubW0KKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYXZm
b3VuZGF0aW9uL29iamMvTWVkaWFTb3VyY2VQcml2YXRlQVZGT2JqQy5tbQpAQCAtMzIsNiArMzIs
NyBAQAogI2ltcG9ydCAiQ29udGVudFR5cGUuaCIKICNpbXBvcnQgIkV4Y2VwdGlvbkNvZGVQbGFj
ZWhvbGRlci5oIgogI2ltcG9ydCAiTWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFTb3VyY2VBVkZPYmpD
LmgiCisjaW1wb3J0ICJNZWRpYVNvdXJjZVByaXZhdGVDbGllbnQuaCIKICNpbXBvcnQgIlNvdXJj
ZUJ1ZmZlclByaXZhdGVBVkZPYmpDLmgiCiAjaW1wb3J0ICJTb2Z0TGlua2luZy5oIgogI2ltcG9y
dCA8b2JqYy9ydW50aW1lLmg+CkBAIC00MywxNCArNDQsMTYgQEAgbmFtZXNwYWNlIFdlYkNvcmUg
ewogI3ByYWdtYSBtYXJrIC0KICNwcmFnbWEgbWFyayBNZWRpYVNvdXJjZVByaXZhdGVBVkZPYmpD
CiAKLVJlZlB0cjxNZWRpYVNvdXJjZVByaXZhdGVBVkZPYmpDPiBNZWRpYVNvdXJjZVByaXZhdGVB
VkZPYmpDOjpjcmVhdGUoTWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFTb3VyY2VBVkZPYmpDKiBwYXJl
bnQpCitSZWZQdHI8TWVkaWFTb3VyY2VQcml2YXRlQVZGT2JqQz4gTWVkaWFTb3VyY2VQcml2YXRl
QVZGT2JqQzo6Y3JlYXRlKE1lZGlhUGxheWVyUHJpdmF0ZU1lZGlhU291cmNlQVZGT2JqQyogcGFy
ZW50LCBNZWRpYVNvdXJjZVByaXZhdGVDbGllbnQqIGNsaWVudCkKIHsKLSAgICByZXR1cm4gYWRv
cHRSZWYobmV3IE1lZGlhU291cmNlUHJpdmF0ZUFWRk9iakMocGFyZW50KSk7CisgICAgUmVmUHRy
PE1lZGlhU291cmNlUHJpdmF0ZUFWRk9iakM+IG1lZGlhU291cmNlUHJpdmF0ZSA9IGFkb3B0UmVm
KG5ldyBNZWRpYVNvdXJjZVByaXZhdGVBVkZPYmpDKHBhcmVudCwgY2xpZW50KSk7CisgICAgY2xp
ZW50LT5zZXRQcml2YXRlQW5kT3BlbigqbWVkaWFTb3VyY2VQcml2YXRlKTsKKyAgICByZXR1cm4g
bWVkaWFTb3VyY2VQcml2YXRlOwogfQogCi1NZWRpYVNvdXJjZVByaXZhdGVBVkZPYmpDOjpNZWRp
YVNvdXJjZVByaXZhdGVBVkZPYmpDKE1lZGlhUGxheWVyUHJpdmF0ZU1lZGlhU291cmNlQVZGT2Jq
QyogcGFyZW50KQorTWVkaWFTb3VyY2VQcml2YXRlQVZGT2JqQzo6TWVkaWFTb3VyY2VQcml2YXRl
QVZGT2JqQyhNZWRpYVBsYXllclByaXZhdGVNZWRpYVNvdXJjZUFWRk9iakMqIHBhcmVudCwgTWVk
aWFTb3VyY2VQcml2YXRlQ2xpZW50KiBjbGllbnQpCiAgICAgOiBtX3BsYXllcihwYXJlbnQpCi0g
ICAgLCBtX2R1cmF0aW9uKE1lZGlhVGltZTo6aW52YWxpZFRpbWUoKSkKKyAgICAsIG1fY2xpZW50
KGNsaWVudCkKICAgICAsIG1faXNFbmRlZChmYWxzZSkKIHsKIH0KQEAgLTkxLDE1ICs5NCwxNiBA
QCB2b2lkIE1lZGlhU291cmNlUHJpdmF0ZUFWRk9iakM6OnJlbW92ZVNvdXJjZUJ1ZmZlcihTb3Vy
Y2VCdWZmZXJQcml2YXRlKiBidWZmZXIpCiAKIE1lZGlhVGltZSBNZWRpYVNvdXJjZVByaXZhdGVB
VkZPYmpDOjpkdXJhdGlvbigpCiB7Ci0gICAgcmV0dXJuIG1fZHVyYXRpb247CisgICAgcmV0dXJu
IE1lZGlhVGltZTo6Y3JlYXRlV2l0aERvdWJsZShtX2NsaWVudC0+ZHVyYXRpb24oKSk7CiB9CiAK
LXZvaWQgTWVkaWFTb3VyY2VQcml2YXRlQVZGT2JqQzo6c2V0RHVyYXRpb24oY29uc3QgTWVkaWFU
aW1lJiBkdXJhdGlvbikKK3N0ZDo6dW5pcXVlX3B0cjxQbGF0Zm9ybVRpbWVSYW5nZXM+IE1lZGlh
U291cmNlUHJpdmF0ZUFWRk9iakM6OmJ1ZmZlcmVkKCkKIHsKLSAgICBpZiAoZHVyYXRpb24gPT0g
bV9kdXJhdGlvbikKLSAgICAgICAgcmV0dXJuOworICAgIHJldHVybiBtX2NsaWVudC0+YnVmZmVy
ZWQoKTsKK30KIAotICAgIG1fZHVyYXRpb24gPSBkdXJhdGlvbjsKK3ZvaWQgTWVkaWFTb3VyY2VQ
cml2YXRlQVZGT2JqQzo6ZHVyYXRpb25DaGFuZ2VkKCkKK3sKICAgICBtX3BsYXllci0+ZHVyYXRp
b25DaGFuZ2VkKCk7CiB9CiAKQEAgLTEyNiw2ICsxMzAsMTYgQEAgdm9pZCBNZWRpYVNvdXJjZVBy
aXZhdGVBVkZPYmpDOjpzZXRSZWFkeVN0YXRlKE1lZGlhUGxheWVyOjpSZWFkeVN0YXRlIHJlYWR5
U3RhdGUKICAgICBtX3BsYXllci0+c2V0UmVhZHlTdGF0ZShyZWFkeVN0YXRlKTsKIH0KIAordm9p
ZCBNZWRpYVNvdXJjZVByaXZhdGVBVkZPYmpDOjp3YWl0Rm9yU2Vla0NvbXBsZXRlZCgpCit7Cisg
ICAgbV9wbGF5ZXItPndhaXRGb3JTZWVrQ29tcGxldGVkKCk7Cit9CisKK3ZvaWQgTWVkaWFTb3Vy
Y2VQcml2YXRlQVZGT2JqQzo6c2Vla0NvbXBsZXRlZCgpCit7CisgICAgbV9wbGF5ZXItPnNlZWtD
b21wbGV0ZWQoKTsKK30KKwogdm9pZCBNZWRpYVNvdXJjZVByaXZhdGVBVkZPYmpDOjpzb3VyY2VC
dWZmZXJQcml2YXRlRGlkQ2hhbmdlQWN0aXZlU3RhdGUoU291cmNlQnVmZmVyUHJpdmF0ZUFWRk9i
akMqIGJ1ZmZlciwgYm9vbCBhY3RpdmUpCiB7CiAgICAgaWYgKGFjdGl2ZSAmJiAhbV9hY3RpdmVT
b3VyY2VCdWZmZXJzLmNvbnRhaW5zKGJ1ZmZlcikpCkBAIC0xNzgsMTMgKzE5MiwxMiBAQCBib29s
IE1lZGlhU291cmNlUHJpdmF0ZUFWRk9iakM6Omhhc1ZpZGVvKCkgY29uc3QKICAgICByZXR1cm4g
c3RkOjphbnlfb2YobV9hY3RpdmVTb3VyY2VCdWZmZXJzLmJlZ2luKCksIG1fYWN0aXZlU291cmNl
QnVmZmVycy5lbmQoKSwgTWVkaWFTb3VyY2VQcml2YXRlQVZGT2JqQ0hhc1ZpZGVvKTsKIH0KIAot
dm9pZCBNZWRpYVNvdXJjZVByaXZhdGVBVkZPYmpDOjpzZWVrVG9UaW1lKE1lZGlhVGltZSB0aW1l
KQordm9pZCBNZWRpYVNvdXJjZVByaXZhdGVBVkZPYmpDOjpzZWVrVG9UaW1lKGNvbnN0IE1lZGlh
VGltZSYgdGltZSkKIHsKLSAgICBmb3IgKGF1dG8mIGJ1ZmZlciA6IG1fYWN0aXZlU291cmNlQnVm
ZmVycykKLSAgICAgICAgYnVmZmVyLT5zZWVrVG9UaW1lKHRpbWUpOworICAgIG1fY2xpZW50LT5z
ZWVrVG9UaW1lKHRpbWUpOwogfQogCi1NZWRpYVRpbWUgTWVkaWFTb3VyY2VQcml2YXRlQVZGT2Jq
Qzo6ZmFzdFNlZWtUaW1lRm9yTWVkaWFUaW1lKE1lZGlhVGltZSB0YXJnZXRUaW1lLCBNZWRpYVRp
bWUgbmVnYXRpdmVUaHJlc2hvbGQsIE1lZGlhVGltZSBwb3NpdGl2ZVRocmVzaG9sZCkKK01lZGlh
VGltZSBNZWRpYVNvdXJjZVByaXZhdGVBVkZPYmpDOjpmYXN0U2Vla1RpbWVGb3JNZWRpYVRpbWUo
Y29uc3QgTWVkaWFUaW1lJiB0YXJnZXRUaW1lLCBjb25zdCBNZWRpYVRpbWUmIG5lZ2F0aXZlVGhy
ZXNob2xkLCBjb25zdCBNZWRpYVRpbWUmIHBvc2l0aXZlVGhyZXNob2xkKQogewogICAgIE1lZGlh
VGltZSBzZWVrVGltZSA9IHRhcmdldFRpbWU7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9vYmpjL1NvdXJjZUJ1ZmZlclByaXZhdGVB
VkZPYmpDLm1tIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9u
L29iamMvU291cmNlQnVmZmVyUHJpdmF0ZUFWRk9iakMubW0KaW5kZXggOTJlMjcwZGI2NDQ0NGUw
ZDBhNGRhZmIzMmNjY2E2MDIwYmVjOTliNC4uYmUyYTNjYTlhOTAyMDU5OTIwNzMzYTQ1MTQxZGY2
YWE4OWUyMTZjOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
YXZmb3VuZGF0aW9uL29iamMvU291cmNlQnVmZmVyUHJpdmF0ZUFWRk9iakMubW0KKysrIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL29iamMvU291cmNlQnVm
ZmVyUHJpdmF0ZUFWRk9iakMubW0KQEAgLTEyMiw2ICsxMjIsNyBAQCBTT0ZUX0xJTksoQ29yZU1l
ZGlhLCBDTVZpZGVvRm9ybWF0RGVzY3JpcHRpb25HZXRQcmVzZW50YXRpb25EaW1lbnNpb25zLCBD
R1NpemUsCiAtICh2b2lkKWFwcGVuZFN0cmVhbURhdGE6KE5TRGF0YSAqKWRhdGE7CiAtICh2b2lk
KXNldFNob3VsZFByb3ZpZGVNZWRpYURhdGE6KEJPT0wpc2hvdWxkUHJvdmlkZU1lZGlhRGF0YSBm
b3JUcmFja0lEOihDTVBlcnNpc3RlbnRUcmFja0lEKXRyYWNrSUQ7CiAtIChCT09MKXNob3VsZFBy
b3ZpZGVNZWRpYURhdGFGb3JUcmFja0lEOihDTVBlcnNpc3RlbnRUcmFja0lEKXRyYWNrSUQ7Cist
ICh2b2lkKXByb3ZpZGVQZW5kaW5nTWVkaWFEYXRhOwogLSAodm9pZClwcm9jZXNzQ29udGVudEtl
eVJlc3BvbnNlRGF0YTooTlNEYXRhICopY29udGVudEtleVJlc3BvbnNlRGF0YSBmb3JUcmFja0lE
OihDTVBlcnNpc3RlbnRUcmFja0lEKXRyYWNrSUQ7CiAtICh2b2lkKXByb2Nlc3NDb250ZW50S2V5
UmVzcG9uc2VFcnJvcjooTlNFcnJvciAqKWVycm9yIGZvclRyYWNrSUQ6KENNUGVyc2lzdGVudFRy
YWNrSUQpdHJhY2tJRDsKIC0gKHZvaWQpcmVuZXdFeHBpcmluZ0NvbnRlbnRLZXlSZXNwb25zZURh
dGFGb3JUcmFja0lEOihDTVBlcnNpc3RlbnRUcmFja0lEKXRyYWNrSUQ7CkBAIC02ODIsNyArNjgz
LDcgQEAgc3RhdGljIGRpc3BhdGNoX3F1ZXVlX3QgZ2xvYmFsRGF0YVBhcnNlclF1ZXVlKCkKICAg
ICBzdGF0aWMgZGlzcGF0Y2hfcXVldWVfdCBnbG9iYWxRdWV1ZTsKICAgICBzdGF0aWMgZGlzcGF0
Y2hfb25jZV90IG9uY2VUb2tlbjsKICAgICBkaXNwYXRjaF9vbmNlKCZvbmNlVG9rZW4sIF57Ci0g
ICAgICAgIGdsb2JhbFF1ZXVlID0gZGlzcGF0Y2hfcXVldWVfY3JlYXRlKCJTb3VyY2VCdWZmZXJQ
cml2YXRlQVZGT2JqQyBkYXRhIHBhcnNlciBxdWV1ZSIsIERJU1BBVENIX1FVRVVFX1NFUklBTCk7
CisgICAgICAgIGdsb2JhbFF1ZXVlID0gZGlzcGF0Y2hfcXVldWVfY3JlYXRlKCJTb3VyY2VCdWZm
ZXJQcml2YXRlQVZGT2JqQyBkYXRhIHBhcnNlciBxdWV1ZSIsIERJU1BBVENIX1FVRVVFX0NPTkNV
UlJFTlQpOwogICAgIH0pOwogICAgIHJldHVybiBnbG9iYWxRdWV1ZTsKIH0KZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9NZWRpYVNvdXJjZUdT
dHJlYW1lci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIv
TWVkaWFTb3VyY2VHU3RyZWFtZXIuY3BwCmluZGV4IGM0YmJhODQzNDI0MTczYmU4YTg2NTcyYTdk
YWJjODkzN2I3MjZlZGYuLmQzNmZiNjBiOGI5MDY5NDViNGQwNmM5Y2RkMTA0OWJhMzIxNDhkMDgg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9N
ZWRpYVNvdXJjZUdTdHJlYW1lci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvZ3N0cmVhbWVyL01lZGlhU291cmNlR1N0cmVhbWVyLmNwcApAQCAtNDIsMTMgKzQyLDE2
IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogdm9pZCBNZWRpYVNvdXJjZUdTdHJlYW1lcjo6b3Bl
bihNZWRpYVNvdXJjZVByaXZhdGVDbGllbnQqIG1lZGlhU291cmNlLCBXZWJLaXRNZWRpYVNyYyog
c3JjKQogewotICAgIG1lZGlhU291cmNlLT5zZXRQcml2YXRlQW5kT3BlbihhZG9wdFJlZigqbmV3
IE1lZGlhU291cmNlR1N0cmVhbWVyKHNyYykpKTsKKyAgICBBU1NFUlQobWVkaWFTb3VyY2UpOwor
ICAgIG1lZGlhU291cmNlLT5zZXRQcml2YXRlQW5kT3BlbihhZG9wdFJlZigqbmV3IE1lZGlhU291
cmNlR1N0cmVhbWVyKG1lZGlhU291cmNlLCBzcmMpKSk7CiB9CiAKLU1lZGlhU291cmNlR1N0cmVh
bWVyOjpNZWRpYVNvdXJjZUdTdHJlYW1lcihXZWJLaXRNZWRpYVNyYyogc3JjKQorTWVkaWFTb3Vy
Y2VHU3RyZWFtZXI6Ok1lZGlhU291cmNlR1N0cmVhbWVyKE1lZGlhU291cmNlUHJpdmF0ZUNsaWVu
dCogbWVkaWFTb3VyY2UsIFdlYktpdE1lZGlhU3JjKiBzcmMpCiAgICAgOiBtX2NsaWVudChhZG9w
dFJlZihuZXcgTWVkaWFTb3VyY2VDbGllbnRHc3RyZWFtZXIoc3JjKSkpCisgICAgLCBtX21lZGlh
U291cmNlKG1lZGlhU291cmNlKQogICAgICwgbV9yZWFkeVN0YXRlKE1lZGlhUGxheWVyOjpIYXZl
Tm90aGluZykKIHsKKyAgICBBU1NFUlQobV9jbGllbnQpOwogfQogCiBNZWRpYVNvdXJjZUdTdHJl
YW1lcjo6fk1lZGlhU291cmNlR1N0cmVhbWVyKCkKQEAgLTYxLDIyICs2NCwxOCBAQCBNZWRpYVNv
dXJjZUdTdHJlYW1lcjo6QWRkU3RhdHVzIE1lZGlhU291cmNlR1N0cmVhbWVyOjphZGRTb3VyY2VC
dWZmZXIoY29uc3QgQ29udAogICAgIHJldHVybiBNZWRpYVNvdXJjZUdTdHJlYW1lcjo6T2s7CiB9
CiAKLXZvaWQgTWVkaWFTb3VyY2VHU3RyZWFtZXI6OnNldER1cmF0aW9uKGNvbnN0IE1lZGlhVGlt
ZSYgZHVyYXRpb24pCit2b2lkIE1lZGlhU291cmNlR1N0cmVhbWVyOjpkdXJhdGlvbkNoYW5nZWQo
KQogewotICAgIEFTU0VSVChtX2NsaWVudCk7Ci0gICAgbV9kdXJhdGlvbiA9IGR1cmF0aW9uOwot
ICAgIG1fY2xpZW50LT5kaWRSZWNlaXZlRHVyYXRpb24oZHVyYXRpb24udG9Eb3VibGUoKSk7Cisg
ICAgbV9jbGllbnQtPmRpZFJlY2VpdmVEdXJhdGlvbihtX21lZGlhU291cmNlLT5kdXJhdGlvbigp
KTsKIH0KIAogdm9pZCBNZWRpYVNvdXJjZUdTdHJlYW1lcjo6bWFya0VuZE9mU3RyZWFtKEVuZE9m
U3RyZWFtU3RhdHVzKQogewotICAgIEFTU0VSVChtX2NsaWVudCk7CiAgICAgbV9jbGllbnQtPmRp
ZEZpbmlzaExvYWRpbmcoMCk7CiB9CiAKIHZvaWQgTWVkaWFTb3VyY2VHU3RyZWFtZXI6OnVubWFy
a0VuZE9mU3RyZWFtKCkKIHsKLSAgICBBU1NFUlQobV9jbGllbnQpOwogfQogCiB9CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvTWVkaWFTb3Vy
Y2VHU3RyZWFtZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1l
ci9NZWRpYVNvdXJjZUdTdHJlYW1lci5oCmluZGV4IDI3NDZhMTZkODU2NDcwMTNhY2M0ZTg2Zjg4
YmFmOWJkMDkzYzlmYmIuLjY0YjgyY2Q1OTE1MjMyOTk4ZDY4MGViOTgzOWRjZTM5ZDYzMmNiNjkg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9N
ZWRpYVNvdXJjZUdTdHJlYW1lci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2dzdHJlYW1lci9NZWRpYVNvdXJjZUdTdHJlYW1lci5oCkBAIC0zOCwyMiArMzgsMjUgQEAK
IAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1jbGFzcyBNZWRpYVNvdXJjZUdTdHJlYW1lciBmaW5h
bCA6IHB1YmxpYyBNZWRpYVNvdXJjZVByaXZhdGUgeworY2xhc3MgTWVkaWFTb3VyY2VHU3RyZWFt
ZXIgZmluYWwgOiBNZWRpYVNvdXJjZVByaXZhdGUgewogcHVibGljOgogICAgIHN0YXRpYyB2b2lk
IG9wZW4oTWVkaWFTb3VyY2VQcml2YXRlQ2xpZW50KiwgV2ViS2l0TWVkaWFTcmMqKTsKICAgICB+
TWVkaWFTb3VyY2VHU3RyZWFtZXIoKTsKLSAgICBBZGRTdGF0dXMgYWRkU291cmNlQnVmZmVyKGNv
bnN0IENvbnRlbnRUeXBlJiwgUmVmUHRyPFNvdXJjZUJ1ZmZlclByaXZhdGU+Jik7Ci0gICAgTWVk
aWFUaW1lIGR1cmF0aW9uKCkgeyByZXR1cm4gbV9kdXJhdGlvbjsgfQotICAgIHZvaWQgc2V0RHVy
YXRpb24oY29uc3QgTWVkaWFUaW1lJik7Ci0gICAgdm9pZCBtYXJrRW5kT2ZTdHJlYW0oRW5kT2ZT
dHJlYW1TdGF0dXMpOwotICAgIHZvaWQgdW5tYXJrRW5kT2ZTdHJlYW0oKTsKLSAgICBNZWRpYVBs
YXllcjo6UmVhZHlTdGF0ZSByZWFkeVN0YXRlKCkgY29uc3QgeyByZXR1cm4gbV9yZWFkeVN0YXRl
OyB9Ci0gICAgdm9pZCBzZXRSZWFkeVN0YXRlKE1lZGlhUGxheWVyOjpSZWFkeVN0YXRlIHJlYWR5
U3RhdGUpIHsgbV9yZWFkeVN0YXRlID0gcmVhZHlTdGF0ZTsgfQogCiBwcml2YXRlOgorICAgIC8v
IE1lZGlhU291cmNlUHJpdmF0ZQorICAgIHZpcnR1YWwgQWRkU3RhdHVzIGFkZFNvdXJjZUJ1ZmZl
cihjb25zdCBDb250ZW50VHlwZSYsIFJlZlB0cjxTb3VyY2VCdWZmZXJQcml2YXRlPiYpIG92ZXJy
aWRlOworICAgIHZpcnR1YWwgdm9pZCBkdXJhdGlvbkNoYW5nZWQoKSBvdmVycmlkZTsKKyAgICB2
aXJ0dWFsIHZvaWQgbWFya0VuZE9mU3RyZWFtKEVuZE9mU3RyZWFtU3RhdHVzKSBvdmVycmlkZTsK
KyAgICB2aXJ0dWFsIHZvaWQgdW5tYXJrRW5kT2ZTdHJlYW0oKSBvdmVycmlkZTsKKyAgICB2aXJ0
dWFsIE1lZGlhUGxheWVyOjpSZWFkeVN0YXRlIHJlYWR5U3RhdGUoKSBjb25zdCBvdmVycmlkZSB7
IHJldHVybiBtX3JlYWR5U3RhdGU7IH0KKyAgICB2aXJ0dWFsIHZvaWQgc2V0UmVhZHlTdGF0ZShN
ZWRpYVBsYXllcjo6UmVhZHlTdGF0ZSByZWFkeVN0YXRlKSBvdmVycmlkZSB7IG1fcmVhZHlTdGF0
ZSA9IHJlYWR5U3RhdGU7IH0KKyAgICB2aXJ0dWFsIHZvaWQgd2FpdEZvclNlZWtDb21wbGV0ZWQo
KSBvdmVycmlkZSB7IH0KKyAgICB2aXJ0dWFsIHZvaWQgc2Vla0NvbXBsZXRlZCgpIG92ZXJyaWRl
IHsgfQorCiAgICAgUmVmUHRyPE1lZGlhU291cmNlQ2xpZW50R3N0cmVhbWVyPiBtX2NsaWVudDsK
KyAgICBNZWRpYVNvdXJjZVByaXZhdGVDbGllbnQgbV9tZWRpYVNvdXJjZTsKICAgICBNZWRpYVNv
dXJjZUdTdHJlYW1lcihXZWJLaXRNZWRpYVNyYyopOwotICAgIE1lZGlhVGltZSBtX2R1cmF0aW9u
OwogICAgIE1lZGlhUGxheWVyOjpSZWFkeVN0YXRlIG1fcmVhZHlTdGF0ZTsKIH07CiAKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21vY2svbWVkaWFzb3VyY2UvTW9ja01lZGlh
UGxheWVyTWVkaWFTb3VyY2UuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbW9jay9tZWRp
YXNvdXJjZS9Nb2NrTWVkaWFQbGF5ZXJNZWRpYVNvdXJjZS5jcHAKaW5kZXggZTM3NWZjZTZiNGIy
YTlhOTEyN2FiYWJjZjIyMzQ2OTdiZTI4M2M3Yi4uNmY1MWMyNDg2NzNkNDExZjU5OGQ1ZTI2ZmFi
YTQyMDhiOTI5ODg2ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbW9jay9t
ZWRpYXNvdXJjZS9Nb2NrTWVkaWFQbGF5ZXJNZWRpYVNvdXJjZS5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vbW9jay9tZWRpYXNvdXJjZS9Nb2NrTWVkaWFQbGF5ZXJNZWRpYVNvdXJj
ZS5jcHAKQEAgLTg0LDEwICs4NCwxMCBAQCBNZWRpYVBsYXllcjo6U3VwcG9ydHNUeXBlIE1vY2tN
ZWRpYVBsYXllck1lZGlhU291cmNlOjpzdXBwb3J0c1R5cGUoY29uc3QgTWVkaWFFbgogTW9ja01l
ZGlhUGxheWVyTWVkaWFTb3VyY2U6Ok1vY2tNZWRpYVBsYXllck1lZGlhU291cmNlKE1lZGlhUGxh
eWVyKiBwbGF5ZXIpCiAgICAgOiBtX3BsYXllcihwbGF5ZXIpCiAgICAgLCBtX2N1cnJlbnRUaW1l
KE1lZGlhVGltZTo6emVyb1RpbWUoKSkKLSAgICAsIG1fZHVyYXRpb24oTWVkaWFUaW1lOjp6ZXJv
VGltZSgpKQogICAgICwgbV9yZWFkeVN0YXRlKE1lZGlhUGxheWVyOjpIYXZlTm90aGluZykKICAg
ICAsIG1fbmV0d29ya1N0YXRlKE1lZGlhUGxheWVyOjpFbXB0eSkKICAgICAsIG1fcGxheWluZyhm
YWxzZSkKKyAgICAsIG1fc2Vla0NvbXBsZXRlZCh0cnVlKQogewogfQogCkBAIC0xMDIsOSArMTAy
LDcgQEAgdm9pZCBNb2NrTWVkaWFQbGF5ZXJNZWRpYVNvdXJjZTo6bG9hZChjb25zdCBTdHJpbmcm
KQogCiB2b2lkIE1vY2tNZWRpYVBsYXllck1lZGlhU291cmNlOjpsb2FkKGNvbnN0IFN0cmluZyYs
IE1lZGlhU291cmNlUHJpdmF0ZUNsaWVudCogc291cmNlKQogewotICAgIG1fbWVkaWFTb3VyY2Ug
PSBzb3VyY2U7Ci0gICAgbV9tZWRpYVNvdXJjZVByaXZhdGUgPSBNb2NrTWVkaWFTb3VyY2VQcml2
YXRlOjpjcmVhdGUodGhpcyk7Ci0gICAgbV9tZWRpYVNvdXJjZS0+c2V0UHJpdmF0ZUFuZE9wZW4o
Km1fbWVkaWFTb3VyY2VQcml2YXRlKTsKKyAgICBtX21lZGlhU291cmNlUHJpdmF0ZSA9IE1vY2tN
ZWRpYVNvdXJjZVByaXZhdGU6OmNyZWF0ZSh0aGlzLCBzb3VyY2UpOwogfQogCiB2b2lkIE1vY2tN
ZWRpYVBsYXllck1lZGlhU291cmNlOjpjYW5jZWxMb2FkKCkKQEAgLTE0Myw3ICsxNDEsNyBAQCB2
b2lkIE1vY2tNZWRpYVBsYXllck1lZGlhU291cmNlOjpzZXRWaXNpYmxlKGJvb2wpCiAKIGJvb2wg
TW9ja01lZGlhUGxheWVyTWVkaWFTb3VyY2U6OnNlZWtpbmcoKSBjb25zdAogewotICAgIHJldHVy
biBmYWxzZTsKKyAgICByZXR1cm4gIW1fc2Vla0NvbXBsZXRlZDsKIH0KIAogYm9vbCBNb2NrTWVk
aWFQbGF5ZXJNZWRpYVNvdXJjZTo6cGF1c2VkKCkgY29uc3QKQEAgLTE2OCw4ICsxNjYsOCBAQCBk
b3VibGUgTW9ja01lZGlhUGxheWVyTWVkaWFTb3VyY2U6Om1heFRpbWVTZWVrYWJsZURvdWJsZSgp
IGNvbnN0CiAKIHN0ZDo6dW5pcXVlX3B0cjxQbGF0Zm9ybVRpbWVSYW5nZXM+IE1vY2tNZWRpYVBs
YXllck1lZGlhU291cmNlOjpidWZmZXJlZCgpIGNvbnN0CiB7Ci0gICAgaWYgKG1fbWVkaWFTb3Vy
Y2UpCi0gICAgICAgIHJldHVybiBtX21lZGlhU291cmNlLT5idWZmZXJlZCgpOworICAgIGlmICht
X21lZGlhU291cmNlUHJpdmF0ZSkKKyAgICAgICAgcmV0dXJuIG1fbWVkaWFTb3VyY2VQcml2YXRl
LT5idWZmZXJlZCgpOwogCiAgICAgcmV0dXJuIFBsYXRmb3JtVGltZVJhbmdlczo6Y3JlYXRlKCk7
CiB9CkBAIC0xOTQsNyArMTkyLDcgQEAgZG91YmxlIE1vY2tNZWRpYVBsYXllck1lZGlhU291cmNl
OjpjdXJyZW50VGltZURvdWJsZSgpIGNvbnN0CiAKIGRvdWJsZSBNb2NrTWVkaWFQbGF5ZXJNZWRp
YVNvdXJjZTo6ZHVyYXRpb25Eb3VibGUoKSBjb25zdAogewotICAgIHJldHVybiBtX2R1cmF0aW9u
LnRvRG91YmxlKCk7CisgICAgcmV0dXJuIG1fbWVkaWFTb3VyY2VQcml2YXRlID8gbV9tZWRpYVNv
dXJjZVByaXZhdGUtPmR1cmF0aW9uKCkgOiAwOwogfQogCiB2b2lkIE1vY2tNZWRpYVBsYXllck1l
ZGlhU291cmNlOjpzZWVrV2l0aFRvbGVyYW5jZShkb3VibGUgdGltZSwgZG91YmxlIG5lZ2F0aXZl
VG9sZXJhbmNlLCBkb3VibGUgcG9zaXRpdmVUb2xlcmFuY2UpCkBAIC0yMDQsMTggKzIwMiwyMSBA
QCB2b2lkIE1vY2tNZWRpYVBsYXllck1lZGlhU291cmNlOjpzZWVrV2l0aFRvbGVyYW5jZShkb3Vi
bGUgdGltZSwgZG91YmxlIG5lZ2F0aXZlVAogICAgICAgICBtX21lZGlhU291cmNlUHJpdmF0ZS0+
c2Vla1RvVGltZShNZWRpYVRpbWU6OmNyZWF0ZVdpdGhEb3VibGUodGltZSkpOwogICAgIH0gZWxz
ZQogICAgICAgICBtX2N1cnJlbnRUaW1lID0gbV9tZWRpYVNvdXJjZVByaXZhdGUtPnNlZWtUb1Rp
bWUoTWVkaWFUaW1lOjpjcmVhdGVXaXRoRG91YmxlKHRpbWUpLCBNZWRpYVRpbWU6OmNyZWF0ZVdp
dGhEb3VibGUobmVnYXRpdmVUb2xlcmFuY2UpLCBNZWRpYVRpbWU6OmNyZWF0ZVdpdGhEb3VibGUo
cG9zaXRpdmVUb2xlcmFuY2UpKTsKLSAgICBtX3BsYXllci0+dGltZUNoYW5nZWQoKTsKIAotICAg
IGlmIChtX3BsYXlpbmcpCi0gICAgICAgIGNhbGxPbk1haW5UaHJlYWQoYmluZCgmTW9ja01lZGlh
UGxheWVyTWVkaWFTb3VyY2U6OmFkdmFuY2VDdXJyZW50VGltZSwgdGhpcykpOworICAgIGlmICht
X3NlZWtDb21wbGV0ZWQpIHsKKyAgICAgICAgbV9wbGF5ZXItPnRpbWVDaGFuZ2VkKCk7CisKKyAg
ICAgICAgaWYgKG1fcGxheWluZykKKyAgICAgICAgICAgIGNhbGxPbk1haW5UaHJlYWQoYmluZCgm
TW9ja01lZGlhUGxheWVyTWVkaWFTb3VyY2U6OmFkdmFuY2VDdXJyZW50VGltZSwgdGhpcykpOwor
ICAgIH0KIH0KIAogdm9pZCBNb2NrTWVkaWFQbGF5ZXJNZWRpYVNvdXJjZTo6YWR2YW5jZUN1cnJl
bnRUaW1lKCkKIHsKLSAgICBpZiAoIW1fbWVkaWFTb3VyY2UpCisgICAgaWYgKCFtX21lZGlhU291
cmNlUHJpdmF0ZSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgYXV0byBidWZmZXJlZCA9IG1fbWVk
aWFTb3VyY2UtPmJ1ZmZlcmVkKCk7CisgICAgYXV0byBidWZmZXJlZCA9IG1fbWVkaWFTb3VyY2VQ
cml2YXRlLT5idWZmZXJlZCgpOwogICAgIHNpemVfdCBwb3MgPSBidWZmZXJlZC0+ZmluZChtX2N1
cnJlbnRUaW1lKTsKICAgICBpZiAocG9zID09IG5vdEZvdW5kKQogICAgICAgICByZXR1cm47CkBA
IC0yNTIsNiArMjUzLDIzIEBAIHZvaWQgTW9ja01lZGlhUGxheWVyTWVkaWFTb3VyY2U6OnNldE5l
dHdvcmtTdGF0ZShNZWRpYVBsYXllcjo6TmV0d29ya1N0YXRlIG5ldHdvCiAgICAgbV9wbGF5ZXIt
Pm5ldHdvcmtTdGF0ZUNoYW5nZWQoKTsKIH0KIAordm9pZCBNb2NrTWVkaWFQbGF5ZXJNZWRpYVNv
dXJjZTo6d2FpdEZvclNlZWtDb21wbGV0ZWQoKQoreworICAgIG1fc2Vla0NvbXBsZXRlZCA9IGZh
bHNlOworfQorCit2b2lkIE1vY2tNZWRpYVBsYXllck1lZGlhU291cmNlOjpzZWVrQ29tcGxldGVk
KCkKK3sKKyAgICBpZiAobV9zZWVrQ29tcGxldGVkKQorICAgICAgICByZXR1cm47CisgICAgbV9z
ZWVrQ29tcGxldGVkID0gdHJ1ZTsKKworICAgIG1fcGxheWVyLT50aW1lQ2hhbmdlZCgpOworCisg
ICAgaWYgKG1fcGxheWluZykKKyAgICAgICAgY2FsbE9uTWFpblRocmVhZChiaW5kKCZNb2NrTWVk
aWFQbGF5ZXJNZWRpYVNvdXJjZTo6YWR2YW5jZUN1cnJlbnRUaW1lLCB0aGlzKSk7Cit9CisKIHVu
c2lnbmVkIGxvbmcgTW9ja01lZGlhUGxheWVyTWVkaWFTb3VyY2U6OnRvdGFsVmlkZW9GcmFtZXMo
KQogewogICAgIHJldHVybiBtX21lZGlhU291cmNlUHJpdmF0ZSA/IG1fbWVkaWFTb3VyY2VQcml2
YXRlLT50b3RhbFZpZGVvRnJhbWVzKCkgOiAwOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vbW9jay9tZWRpYXNvdXJjZS9Nb2NrTWVkaWFQbGF5ZXJNZWRpYVNvdXJjZS5oIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbW9jay9tZWRpYXNvdXJjZS9Nb2NrTWVkaWFQbGF5ZXJN
ZWRpYVNvdXJjZS5oCmluZGV4IDkyZTEzYjE2NTkyYzUxZTIxZTQ2NzRmNTgxZjlhOGY2YTZiZWZh
ODEuLjVhNmRhOWRkMzkzZTkwOTliNmQ5MjZlZWEzZWM5YmIxMGY2ODgyOTUgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21vY2svbWVkaWFzb3VyY2UvTW9ja01lZGlhUGxheWVy
TWVkaWFTb3VyY2UuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tb2NrL21lZGlhc291
cmNlL01vY2tNZWRpYVBsYXllck1lZGlhU291cmNlLmgKQEAgLTUyLDYgKzUyLDggQEAgcHVibGlj
OgogICAgIHZpcnR1YWwgTWVkaWFQbGF5ZXI6OlJlYWR5U3RhdGUgcmVhZHlTdGF0ZSgpIGNvbnN0
IG92ZXJyaWRlOwogICAgIHZvaWQgc2V0UmVhZHlTdGF0ZShNZWRpYVBsYXllcjo6UmVhZHlTdGF0
ZSk7CiAgICAgdm9pZCBzZXROZXR3b3JrU3RhdGUoTWVkaWFQbGF5ZXI6Ok5ldHdvcmtTdGF0ZSk7
CisgICAgdm9pZCB3YWl0Rm9yU2Vla0NvbXBsZXRlZCgpOworICAgIHZvaWQgc2Vla0NvbXBsZXRl
ZCgpOwogCiBwcml2YXRlOgogICAgIE1vY2tNZWRpYVBsYXllck1lZGlhU291cmNlKE1lZGlhUGxh
eWVyKik7CkBAIC04Myw3ICs4NSw2IEBAIHByaXZhdGU6CiAgICAgdmlydHVhbCBkb3VibGUgdG90
YWxGcmFtZURlbGF5KCkgb3ZlcnJpZGU7CiAKICAgICBNZWRpYVBsYXllciogbV9wbGF5ZXI7Ci0g
ICAgUmVmUHRyPE1lZGlhU291cmNlUHJpdmF0ZUNsaWVudD4gbV9tZWRpYVNvdXJjZTsKICAgICBS
ZWZQdHI8TW9ja01lZGlhU291cmNlUHJpdmF0ZT4gbV9tZWRpYVNvdXJjZVByaXZhdGU7CiAKICAg
ICBNZWRpYVRpbWUgbV9jdXJyZW50VGltZTsKQEAgLTkxLDYgKzkyLDcgQEAgcHJpdmF0ZToKICAg
ICBNZWRpYVBsYXllcjo6UmVhZHlTdGF0ZSBtX3JlYWR5U3RhdGU7CiAgICAgTWVkaWFQbGF5ZXI6
Ok5ldHdvcmtTdGF0ZSBtX25ldHdvcmtTdGF0ZTsKICAgICBib29sIG1fcGxheWluZzsKKyAgICBi
b29sIG1fc2Vla0NvbXBsZXRlZDsKIH07CiAKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL21vY2svbWVkaWFzb3VyY2UvTW9ja01lZGlhU291cmNlUHJpdmF0ZS5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tb2NrL21lZGlhc291cmNlL01vY2tNZWRpYVNvdXJjZVBy
aXZhdGUuY3BwCmluZGV4IDcyNDkzNzNhZWUzNzBjZTE4ODIxZGYxZmRkZjc2MDEyY2U2NDVhN2Qu
LmZiNDlkNGVkYzExYjUyOTI3MzZhZmVkMjJhNTY2NDdjNzRmNDhlMmYgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL21vY2svbWVkaWFzb3VyY2UvTW9ja01lZGlhU291cmNlUHJp
dmF0ZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbW9jay9tZWRpYXNvdXJjZS9N
b2NrTWVkaWFTb3VyY2VQcml2YXRlLmNwcApAQCAtMzAsMTkgKzMwLDIyIEBACiAKICNpbmNsdWRl
ICJDb250ZW50VHlwZS5oIgogI2luY2x1ZGUgIkV4Y2VwdGlvbkNvZGVQbGFjZWhvbGRlci5oIgor
I2luY2x1ZGUgIk1lZGlhU291cmNlUHJpdmF0ZUNsaWVudC5oIgogI2luY2x1ZGUgIk1vY2tNZWRp
YVBsYXllck1lZGlhU291cmNlLmgiCiAjaW5jbHVkZSAiTW9ja1NvdXJjZUJ1ZmZlclByaXZhdGUu
aCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1SZWZQdHI8TW9ja01lZGlhU291cmNlUHJpdmF0
ZT4gTW9ja01lZGlhU291cmNlUHJpdmF0ZTo6Y3JlYXRlKE1vY2tNZWRpYVBsYXllck1lZGlhU291
cmNlKiBwYXJlbnQpCitSZWZQdHI8TW9ja01lZGlhU291cmNlUHJpdmF0ZT4gTW9ja01lZGlhU291
cmNlUHJpdmF0ZTo6Y3JlYXRlKE1vY2tNZWRpYVBsYXllck1lZGlhU291cmNlKiBwYXJlbnQsIE1l
ZGlhU291cmNlUHJpdmF0ZUNsaWVudCogY2xpZW50KQogewotICAgIHJldHVybiBhZG9wdFJlZihu
ZXcgTW9ja01lZGlhU291cmNlUHJpdmF0ZShwYXJlbnQpKTsKKyAgICBSZWZQdHI8TW9ja01lZGlh
U291cmNlUHJpdmF0ZT4gbWVkaWFTb3VyY2VQcml2YXRlID0gYWRvcHRSZWYobmV3IE1vY2tNZWRp
YVNvdXJjZVByaXZhdGUocGFyZW50LCBjbGllbnQpKTsKKyAgICBjbGllbnQtPnNldFByaXZhdGVB
bmRPcGVuKCptZWRpYVNvdXJjZVByaXZhdGUpOworICAgIHJldHVybiBtZWRpYVNvdXJjZVByaXZh
dGU7CiB9CiAKLU1vY2tNZWRpYVNvdXJjZVByaXZhdGU6Ok1vY2tNZWRpYVNvdXJjZVByaXZhdGUo
TW9ja01lZGlhUGxheWVyTWVkaWFTb3VyY2UqIHBhcmVudCkKK01vY2tNZWRpYVNvdXJjZVByaXZh
dGU6Ok1vY2tNZWRpYVNvdXJjZVByaXZhdGUoTW9ja01lZGlhUGxheWVyTWVkaWFTb3VyY2UqIHBh
cmVudCwgTWVkaWFTb3VyY2VQcml2YXRlQ2xpZW50KiBjbGllbnQpCiAgICAgOiBtX3BsYXllcihw
YXJlbnQpCi0gICAgLCBtX2R1cmF0aW9uKE1lZGlhVGltZTo6aW52YWxpZFRpbWUoKSkKKyAgICAs
IG1fY2xpZW50KGNsaWVudCkKICAgICAsIG1faXNFbmRlZChmYWxzZSkKICAgICAsIG1fdG90YWxW
aWRlb0ZyYW1lcygwKQogICAgICwgbV9kcm9wcGVkVmlkZW9GcmFtZXMoMCkKQEAgLTg0LDE4ICs4
NywxOSBAQCB2b2lkIE1vY2tNZWRpYVNvdXJjZVByaXZhdGU6OnJlbW92ZVNvdXJjZUJ1ZmZlcihT
b3VyY2VCdWZmZXJQcml2YXRlKiBidWZmZXIpCiAgICAgbV9zb3VyY2VCdWZmZXJzLnJlbW92ZShw
b3MpOwogfQogCi1NZWRpYVRpbWUgTW9ja01lZGlhU291cmNlUHJpdmF0ZTo6ZHVyYXRpb24oKQor
ZG91YmxlIE1vY2tNZWRpYVNvdXJjZVByaXZhdGU6OmR1cmF0aW9uKCkKIHsKLSAgICByZXR1cm4g
bV9kdXJhdGlvbjsKKyAgICByZXR1cm4gbV9jbGllbnQtPmR1cmF0aW9uKCk7CiB9CiAKLXZvaWQg
TW9ja01lZGlhU291cmNlUHJpdmF0ZTo6c2V0RHVyYXRpb24oY29uc3QgTWVkaWFUaW1lJiBkdXJh
dGlvbikKK3N0ZDo6dW5pcXVlX3B0cjxQbGF0Zm9ybVRpbWVSYW5nZXM+IE1vY2tNZWRpYVNvdXJj
ZVByaXZhdGU6OmJ1ZmZlcmVkKCkKIHsKLSAgICBpZiAoZHVyYXRpb24gPT0gbV9kdXJhdGlvbikK
LSAgICAgICAgcmV0dXJuOworICAgIHJldHVybiBtX2NsaWVudC0+YnVmZmVyZWQoKTsKK30KIAot
ICAgIG1fZHVyYXRpb24gPSBkdXJhdGlvbjsKLSAgICBtX3BsYXllci0+dXBkYXRlRHVyYXRpb24o
ZHVyYXRpb24pOwordm9pZCBNb2NrTWVkaWFTb3VyY2VQcml2YXRlOjpkdXJhdGlvbkNoYW5nZWQo
KQoreworICAgIG1fcGxheWVyLT51cGRhdGVEdXJhdGlvbihNZWRpYVRpbWU6OmNyZWF0ZVdpdGhE
b3VibGUoZHVyYXRpb24oKSkpOwogfQogCiB2b2lkIE1vY2tNZWRpYVNvdXJjZVByaXZhdGU6Om1h
cmtFbmRPZlN0cmVhbShFbmRPZlN0cmVhbVN0YXR1cyBzdGF0dXMpCkBAIC0xMjAsNiArMTI0LDE2
IEBAIHZvaWQgTW9ja01lZGlhU291cmNlUHJpdmF0ZTo6c2V0UmVhZHlTdGF0ZShNZWRpYVBsYXll
cjo6UmVhZHlTdGF0ZSByZWFkeVN0YXRlKQogICAgIG1fcGxheWVyLT5zZXRSZWFkeVN0YXRlKHJl
YWR5U3RhdGUpOwogfQogCit2b2lkIE1vY2tNZWRpYVNvdXJjZVByaXZhdGU6OndhaXRGb3JTZWVr
Q29tcGxldGVkKCkKK3sKKyAgICBtX3BsYXllci0+d2FpdEZvclNlZWtDb21wbGV0ZWQoKTsKK30K
Kwordm9pZCBNb2NrTWVkaWFTb3VyY2VQcml2YXRlOjpzZWVrQ29tcGxldGVkKCkKK3sKKyAgICBt
X3BsYXllci0+c2Vla0NvbXBsZXRlZCgpOworfQorCiB2b2lkIE1vY2tNZWRpYVNvdXJjZVByaXZh
dGU6OnNvdXJjZUJ1ZmZlclByaXZhdGVEaWRDaGFuZ2VBY3RpdmVTdGF0ZShNb2NrU291cmNlQnVm
ZmVyUHJpdmF0ZSogYnVmZmVyLCBib29sIGFjdGl2ZSkKIHsKICAgICBpZiAoYWN0aXZlICYmICFt
X2FjdGl2ZVNvdXJjZUJ1ZmZlcnMuY29udGFpbnMoYnVmZmVyKSkKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL21vY2svbWVkaWFzb3VyY2UvTW9ja01lZGlhU291cmNlUHJpdmF0
ZS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbW9jay9tZWRpYXNvdXJjZS9Nb2NrTWVkaWFT
b3VyY2VQcml2YXRlLmgKaW5kZXggZjc5YjExMDJkNTIyMDRjZTYzM2Y2MDEwMWJhNmRkOWZhNDE3
YzhlNS4uMGIzNWExMGI5Zjc3NzM2ZWU0ZjU1M2Q5ZGY2NTcxYjgzYThlNjE2MSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbW9jay9tZWRpYXNvdXJjZS9Nb2NrTWVkaWFTb3Vy
Y2VQcml2YXRlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbW9jay9tZWRpYXNvdXJj
ZS9Nb2NrTWVkaWFTb3VyY2VQcml2YXRlLmgKQEAgLTM5LDcgKzM5LDcgQEAgY2xhc3MgVGltZVJh
bmdlczsKIAogY2xhc3MgTW9ja01lZGlhU291cmNlUHJpdmF0ZSBmaW5hbCA6IHB1YmxpYyBNZWRp
YVNvdXJjZVByaXZhdGUgewogcHVibGljOgotICAgIHN0YXRpYyBSZWZQdHI8TW9ja01lZGlhU291
cmNlUHJpdmF0ZT4gY3JlYXRlKE1vY2tNZWRpYVBsYXllck1lZGlhU291cmNlKik7CisgICAgc3Rh
dGljIFJlZlB0cjxNb2NrTWVkaWFTb3VyY2VQcml2YXRlPiBjcmVhdGUoTW9ja01lZGlhUGxheWVy
TWVkaWFTb3VyY2UqLCBNZWRpYVNvdXJjZVByaXZhdGVDbGllbnQqKTsKICAgICB2aXJ0dWFsIH5N
b2NrTWVkaWFTb3VyY2VQcml2YXRlKCk7CiAKICAgICBjb25zdCBWZWN0b3I8TW9ja1NvdXJjZUJ1
ZmZlclByaXZhdGUqPiYgYWN0aXZlU291cmNlQnVmZmVycygpIGNvbnN0IHsgcmV0dXJuIG1fYWN0
aXZlU291cmNlQnVmZmVyczsgfQpAQCAtNDcsNiArNDcsOSBAQCBwdWJsaWM6CiAgICAgYm9vbCBo
YXNBdWRpbygpIGNvbnN0OwogICAgIGJvb2wgaGFzVmlkZW8oKSBjb25zdDsKIAorICAgIGRvdWJs
ZSBkdXJhdGlvbigpOworICAgIHN0ZDo6dW5pcXVlX3B0cjxQbGF0Zm9ybVRpbWVSYW5nZXM+IGJ1
ZmZlcmVkKCk7CisKICAgICBNb2NrTWVkaWFQbGF5ZXJNZWRpYVNvdXJjZSogcGxheWVyKCkgY29u
c3QgeyByZXR1cm4gbV9wbGF5ZXI7IH0KIAogICAgIHZvaWQgc2Vla1RvVGltZShjb25zdCBNZWRp
YVRpbWUmKTsKQEAgLTYzLDE2ICs2NiwxNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBpbmNyZW1lbnRU
b3RhbEZyYW1lRGVsYXlCeShkb3VibGUgZGVsYXkpIHsgbV90b3RhbEZyYW1lRGVsYXkgKz0gZGVs
YXk7IH0KIAogcHJpdmF0ZToKLSAgICBNb2NrTWVkaWFTb3VyY2VQcml2YXRlKE1vY2tNZWRpYVBs
YXllck1lZGlhU291cmNlKik7CisgICAgTW9ja01lZGlhU291cmNlUHJpdmF0ZShNb2NrTWVkaWFQ
bGF5ZXJNZWRpYVNvdXJjZSosIE1lZGlhU291cmNlUHJpdmF0ZUNsaWVudCopOwogCiAgICAgLy8g
TWVkaWFTb3VyY2VQcml2YXRlIE92ZXJyaWRlcwogICAgIHZpcnR1YWwgQWRkU3RhdHVzIGFkZFNv
dXJjZUJ1ZmZlcihjb25zdCBDb250ZW50VHlwZSYsIFJlZlB0cjxTb3VyY2VCdWZmZXJQcml2YXRl
PiYpIG92ZXJyaWRlOwotICAgIHZpcnR1YWwgTWVkaWFUaW1lIGR1cmF0aW9uKCkgb3ZlcnJpZGU7
Ci0gICAgdmlydHVhbCB2b2lkIHNldER1cmF0aW9uKGNvbnN0IE1lZGlhVGltZSYpIG92ZXJyaWRl
OworICAgIHZpcnR1YWwgdm9pZCBkdXJhdGlvbkNoYW5nZWQoKSBvdmVycmlkZTsKICAgICB2aXJ0
dWFsIHZvaWQgbWFya0VuZE9mU3RyZWFtKEVuZE9mU3RyZWFtU3RhdHVzKSBvdmVycmlkZTsKICAg
ICB2aXJ0dWFsIHZvaWQgdW5tYXJrRW5kT2ZTdHJlYW0oKSBvdmVycmlkZTsKICAgICB2aXJ0dWFs
IE1lZGlhUGxheWVyOjpSZWFkeVN0YXRlIHJlYWR5U3RhdGUoKSBjb25zdCBvdmVycmlkZTsKICAg
ICB2aXJ0dWFsIHZvaWQgc2V0UmVhZHlTdGF0ZShNZWRpYVBsYXllcjo6UmVhZHlTdGF0ZSkgb3Zl
cnJpZGU7CisgICAgdmlydHVhbCB2b2lkIHdhaXRGb3JTZWVrQ29tcGxldGVkKCkgb3ZlcnJpZGU7
CisgICAgdmlydHVhbCB2b2lkIHNlZWtDb21wbGV0ZWQoKSBvdmVycmlkZTsKIAogICAgIHZvaWQg
c291cmNlQnVmZmVyUHJpdmF0ZURpZENoYW5nZUFjdGl2ZVN0YXRlKE1vY2tTb3VyY2VCdWZmZXJQ
cml2YXRlKiwgYm9vbCBhY3RpdmUpOwogICAgIHZvaWQgcmVtb3ZlU291cmNlQnVmZmVyKFNvdXJj
ZUJ1ZmZlclByaXZhdGUqKTsKQEAgLTgwLDcgKzg0LDcgQEAgcHJpdmF0ZToKICAgICBmcmllbmQg
Y2xhc3MgTW9ja1NvdXJjZUJ1ZmZlclByaXZhdGU7CiAKICAgICBNb2NrTWVkaWFQbGF5ZXJNZWRp
YVNvdXJjZSogbV9wbGF5ZXI7Ci0gICAgTWVkaWFUaW1lIG1fZHVyYXRpb247CisgICAgUmVmUHRy
PE1lZGlhU291cmNlUHJpdmF0ZUNsaWVudD4gbV9jbGllbnQ7CiAgICAgVmVjdG9yPFJlZlB0cjxN
b2NrU291cmNlQnVmZmVyUHJpdmF0ZT4+IG1fc291cmNlQnVmZmVyczsKICAgICBWZWN0b3I8TW9j
a1NvdXJjZUJ1ZmZlclByaXZhdGUqPiBtX2FjdGl2ZVNvdXJjZUJ1ZmZlcnM7CiAgICAgYm9vbCBt
X2lzRW5kZWQ7CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cgYi9MYXlvdXRUZXN0
cy9DaGFuZ2VMb2cKaW5kZXggNTI0MGE0NzE4YjdhMzE3NzBjMDRjYjU1NzM5MzY5ODJlODE3OWE1
OC4uNDlkZGQ4MWM0NGQ1MjM2ZGE5OGE5MzA3YzA1YjUzMWFkMjBmMzMxYyAxMDA2NDQKLS0tIGEv
TGF5b3V0VGVzdHMvQ2hhbmdlTG9nCisrKyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwpAQCAtMSwz
ICsxLDE3IEBACisyMDE0LTA3LTExICBKZXIgTm9ibGUgIDxqZXIubm9ibGVAYXBwbGUuY29tPgor
CisgICAgICAgIFtNU0VdIGh0dHAvdGVzdHMvbWVkaWEvbWVkaWEtc291cmNlL21lZGlhc291cmNl
LWR1cmF0aW9uLmh0bWwgaXMgZmFpbGluZy4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTEzNDg1MgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAo
T09QUyEpLgorCisgICAgICAgIEVsaW1pbmF0ZSBmbGFraW5lc3MgaW4gdGhlIG1lZGlhc291cmNl
LWR1cmF0aW9uLmh0bWwgdGVzdCBieSBub3QgcGxheWluZworICAgICAgICB0aGUgbWVkaWEgd2hp
bGUgdGVzdGluZyBzZWVraW5nIGFuZCBkdXJhdGlvbi4KKyAgICAgICAgKiBodHRwL3Rlc3RzL21l
ZGlhL21lZGlhLXNvdXJjZS9tZWRpYXNvdXJjZS1kdXJhdGlvbi5odG1sOgorCisgICAgICAgIFVw
ZGF0ZSB0ZXN0aGFybmVzcy5qcyB0byB0aGUgbGF0ZXN0IFczQyB2ZXJzaW9uOgorICAgICAgICAq
IGh0dHAvdGVzdHMvdzNjL3Jlc291cmNlcy90ZXN0aGFybmVzcy5qczoKKwogMjAxNC0wNy0xMSAg
WmFsYW4gQnVqdGFzICA8emFsYW5AYXBwbGUuY29tPgogCiAgICAgICAgIFJFR1JFU1NJT04gKHIx
Njg4NjgpOiBlQmF5ICdzZWUgYWxsJyBsaW5rcyBmYWlsIGR1ZSB0byBkaWZmZXJlbnQgSlMgYmlu
ZGluZ3MgY29udmVyc2lvbiBiZWhhdmlvci4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2h0dHAv
dGVzdHMvbWVkaWEvbWVkaWEtc291cmNlL21lZGlhc291cmNlLWR1cmF0aW9uLmh0bWwgYi9MYXlv
dXRUZXN0cy9odHRwL3Rlc3RzL21lZGlhL21lZGlhLXNvdXJjZS9tZWRpYXNvdXJjZS1kdXJhdGlv
bi5odG1sCmluZGV4IGQ0MzM5MTZkOGI3ZWFiNDJjZTk4ZWE0YmMyODhiM2M3YzMwNWI2Y2QuLmJh
YzViYTlkY2I4YTgyZWNiYjM5MjRmODkxMGNjMjJiNGFhOGY4ZjQgMTAwNjQ0Ci0tLSBhL0xheW91
dFRlc3RzL2h0dHAvdGVzdHMvbWVkaWEvbWVkaWEtc291cmNlL21lZGlhc291cmNlLWR1cmF0aW9u
Lmh0bWwKKysrIGIvTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9tZWRpYS9tZWRpYS1zb3VyY2UvbWVk
aWFzb3VyY2UtZHVyYXRpb24uaHRtbApAQCAtMTgsMTEgKzE4LDggQEAKICAgICAgICAgICAgICAg
ICAgIHZhciBzZWVrVG8gPSBmdWxsRHVyYXRpb24gLyAyLjA7CiAgICAgICAgICAgICAgICAgICB2
YXIgdHJ1bmNhdGVkRHVyYXRpb24gPSBzZWVrVG8gLyAyLjA7CiAKLSAgICAgICAgICAgICAgICAg
IG1lZGlhRWxlbWVudC5wbGF5KCk7Ci0KICAgICAgICAgICAgICAgICAgIC8vIEFwcGVuZCBhbGwg
dGhlIHNlZ21lbnRzCiAgICAgICAgICAgICAgICAgICB0ZXN0LmV4cGVjdEV2ZW50KHNvdXJjZUJ1
ZmZlciwgJ3VwZGF0ZWVuZCcsICdzb3VyY2VCdWZmZXInKTsKLSAgICAgICAgICAgICAgICAgIHRl
c3QuZXhwZWN0RXZlbnQobWVkaWFFbGVtZW50LCAncGxheWluZycsICdQbGF5aW5nIHRyaWdnZXJl
ZCcpOwogICAgICAgICAgICAgICAgICAgc291cmNlQnVmZmVyLmFwcGVuZEJ1ZmZlcihtZWRpYURh
dGEpOwogCiAgICAgICAgICAgICAgICAgICB0ZXN0LndhaXRGb3JFeHBlY3RlZEV2ZW50cyhmdW5j
dGlvbigpCkBAIC0xMjYsMTEgKzEyMywxMSBAQAogCiAgICAgICAgICAgICAgIHRlc3Qud2FpdEZv
ckV4cGVjdGVkRXZlbnRzKGZ1bmN0aW9uKCkKICAgICAgICAgICAgICAgewotICAgICAgICAgICAg
ICAgICAgYXNzZXJ0X2VxdWFscyhtZWRpYUVsZW1lbnQuY3VycmVudFRpbWUsIHRydW5jYXRlZER1
cmF0aW9uLAorICAgICAgICAgICAgICAgICAgYXNzZXJ0X2FwcHJveF9lcXVhbHMobWVkaWFFbGVt
ZW50LmN1cnJlbnRUaW1lLCB0cnVuY2F0ZWREdXJhdGlvbiwgMC4wNSwKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgJ1BsYXliYWNrIHRpbWUgaGFzIHJlYWNoZWQgdHJ1bmNhdGVkRHVy
YXRpb24nKTsKLSAgICAgICAgICAgICAgICAgIGFzc2VydF9lcXVhbHMobWVkaWFFbGVtZW50LmR1
cmF0aW9uLCB0cnVuY2F0ZWREdXJhdGlvbiwKKyAgICAgICAgICAgICAgICAgIGFzc2VydF9hcHBy
b3hfZXF1YWxzKG1lZGlhRWxlbWVudC5kdXJhdGlvbiwgdHJ1bmNhdGVkRHVyYXRpb24sIDAuMDUs
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdtZWRpYUVsZW1lbnQgdHJ1bmNhdGVk
RHVyYXRpb24gYWZ0ZXIgc2VlayB0byBpdCcpOwotICAgICAgICAgICAgICAgICAgYXNzZXJ0X2Vx
dWFscyhtZWRpYVNvdXJjZS5kdXJhdGlvbiwgdHJ1bmNhdGVkRHVyYXRpb24sCisgICAgICAgICAg
ICAgICAgICBhc3NlcnRfYXBwcm94X2VxdWFscyhtZWRpYVNvdXJjZS5kdXJhdGlvbiwgdHJ1bmNh
dGVkRHVyYXRpb24sIDAuMDUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdtZWRp
YVNvdXJjZSB0cnVuY2F0ZWREdXJhdGlvbiBhZnRlciBzZWVrIHRvIGl0Jyk7CiAgICAgICAgICAg
ICAgICAgICBhc3NlcnRfZmFsc2UobWVkaWFFbGVtZW50LnNlZWtpbmcsICdtZWRpYUVsZW1lbnQu
c2Vla2luZyBhZnRlciBzZWVrZWQgdG8gdHJ1bmNhdGVkRHVyYXRpb24nKTsKIApAQCAtMTU0LDEx
ICsxNTEsOCBAQAogICAgICAgICAgICAgICAgICAgZHVyYXRpb25jaGFuZ2VFdmVudENvdW50ZXIr
KzsKICAgICAgICAgICAgICAgfSk7CiAKLSAgICAgICAgICAgICAgbWVkaWFFbGVtZW50LnBsYXko
KTsKLQogICAgICAgICAgICAgICAvLyBBcHBlbmQgYWxsIHRoZSBzZWdtZW50cwogICAgICAgICAg
ICAgICB0ZXN0LmV4cGVjdEV2ZW50KHNvdXJjZUJ1ZmZlciwgJ3VwZGF0ZWVuZCcsICdzb3VyY2VC
dWZmZXInKTsKLSAgICAgICAgICAgICAgdGVzdC5leHBlY3RFdmVudChtZWRpYUVsZW1lbnQsICdw
bGF5aW5nJywgJ1BsYXlpbmcgdHJpZ2dlcmVkJyk7CiAgICAgICAgICAgICAgIHNvdXJjZUJ1ZmZl
ci5hcHBlbmRCdWZmZXIobWVkaWFEYXRhKTsKIAogICAgICAgICAgICAgICB0ZXN0LndhaXRGb3JF
eHBlY3RlZEV2ZW50cyhmdW5jdGlvbigpCkBAIC0yMDEsNyArMTk1LDEwIEBACiAgICAgICAgICAg
ICAgICAgICAgICAgKytleHBlY3RlZER1cmF0aW9uQ2hhbmdlRXZlbnRDb3VudDsKICAgICAgICAg
ICAgICAgICAgIH0KIAorICAgICAgICAgICAgICAgICAgbWVkaWFFbGVtZW50LnBsYXkoKTsKKwog
ICAgICAgICAgICAgICAgICAgLy8gQWxsb3cgbWVkaWEgdG8gcGxheSB0byBlbmQgd2hpbGUgY291
bnRpbmcgJ2R1cmF0aW9uY2hhbmdlJyBldmVudHMuCisgICAgICAgICAgICAgICAgICB0ZXN0LmV4
cGVjdEV2ZW50KG1lZGlhRWxlbWVudCwgJ3BsYXlpbmcnLCAnUGxheWluZyB0cmlnZ2VyZWQnKTsK
ICAgICAgICAgICAgICAgICAgIHRlc3QuZXhwZWN0RXZlbnQobWVkaWFFbGVtZW50LCAnZW5kZWQn
LCAnUGxheWJhY2sgZW5kZWQnKTsKICAgICAgICAgICAgICAgICAgIHRlc3Qud2FpdEZvckV4cGVj
dGVkRXZlbnRzKGZ1bmN0aW9uKCkKICAgICAgICAgICAgICAgICAgIHsKQEAgLTIxMSw2ICsyMDgs
NyBAQAogICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgIH0pOwogICAgICAgICAg
IH0sICdUZXN0IHNldHRpbmcgc2FtZSBkdXJhdGlvbiBtdWx0aXBsZSB0aW1lcyBkb2VzIG5vdCBm
aXJlIGR1cGxpY2F0ZSBkdXJhdGlvbmNoYW5nZScsIHt0aW1lb3V0OiAyNTAwfSk7CisKICAgICAg
ICAgPC9zY3JpcHQ+CiAgICAgPC9ib2R5PgogPC9odG1sPgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVz
dHMvaHR0cC90ZXN0cy93M2MvcmVzb3VyY2VzL3Rlc3RoYXJuZXNzLmpzIGIvTGF5b3V0VGVzdHMv
aHR0cC90ZXN0cy93M2MvcmVzb3VyY2VzL3Rlc3RoYXJuZXNzLmpzCmluZGV4IDc2NTUzODMyMjY0
ZWEwNzhhMTZlZmI3YjYxNTdkZjViYzM3YzI1NWUuLmRhNjQ2ZThjNjkyYWU4ZWYxOWM0NDRhYTI0
OTkwY2MxOTEyNTMwYzkgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL2h0dHAvdGVzdHMvdzNjL3Jl
c291cmNlcy90ZXN0aGFybmVzcy5qcworKysgYi9MYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3czYy9y
ZXNvdXJjZXMvdGVzdGhhcm5lc3MuanMKQEAgLTEsMjE0NSArMSwyMjQ0IEBACi0vKg0KLURpc3Ry
aWJ1dGVkIHVuZGVyIGJvdGggdGhlIFczQyBUZXN0IFN1aXRlIExpY2Vuc2UgWzFdIGFuZCB0aGUg
VzNDDQotMy1jbGF1c2UgQlNEIExpY2Vuc2UgWzJdLiBUbyBjb250cmlidXRlIHRvIGEgVzNDIFRl
c3QgU3VpdGUsIHNlZSB0aGUNCi1wb2xpY2llcyBhbmQgY29udHJpYnV0aW9uIGZvcm1zIFszXS4N
Ci0NCi1bMV0gaHR0cDovL3d3dy53My5vcmcvQ29uc29ydGl1bS9MZWdhbC8yMDA4LzA0LXRlc3Rz
dWl0ZS1saWNlbnNlDQotWzJdIGh0dHA6Ly93d3cudzMub3JnL0NvbnNvcnRpdW0vTGVnYWwvMjAw
OC8wMy1ic2QtbGljZW5zZQ0KLVszXSBodHRwOi8vd3d3LnczLm9yZy8yMDA0LzEwLzI3LXRlc3Rj
YXNlcw0KLSovDQotDQotLyoNCi0gKiA9PSBJbnRyb2R1Y3Rpb24gPT0NCi0gKg0KLSAqIFRoaXMg
ZmlsZSBwcm92aWRlcyBhIGZyYW1ld29yayBmb3Igd3JpdGluZyB0ZXN0Y2FzZXMuIEl0IGlzIGlu
dGVuZGVkIHRvDQotICogcHJvdmlkZSBhIGNvbnZlbmllbnQgQVBJIGZvciBtYWtpbmcgY29tbW9u
IGFzc2VydGlvbnMsIGFuZCB0byB3b3JrIGJvdGgNCi0gKiBmb3IgdGVzdGluZyBzeW5jaHJvbm91
cyBhbmQgYXN5bmNocm9ub3VzIERPTSBmZWF0dXJlcyBpbiBhIHdheSB0aGF0DQotICogcHJvbW90
ZXMgY2xlYXIsIHJvYnVzdCwgdGVzdHMuDQotICoNCi0gKiA9PSBCYXNpYyBVc2FnZSA9PQ0KLSAq
DQotICogVG8gdXNlIHRoaXMgZmlsZSwgaW1wb3J0IHRoZSBzY3JpcHQgYW5kIHRoZSB0ZXN0aGFy
bmVzc3JlcG9ydCBzY3JpcHQgaW50bw0KLSAqIHRoZSB0ZXN0IGRvY3VtZW50Og0KLSAqIDxzY3Jp
cHQgc3JjPSIvcmVzb3VyY2VzL3Rlc3RoYXJuZXNzLmpzIj48L3NjcmlwdD4NCi0gKiA8c2NyaXB0
IHNyYz0iL3Jlc291cmNlcy90ZXN0aGFybmVzc3JlcG9ydC5qcyI+PC9zY3JpcHQ+DQotICoNCi0g
KiBXaXRoaW4gZWFjaCBmaWxlIG9uZSBtYXkgZGVmaW5lIG9uZSBvciBtb3JlIHRlc3RzLiBFYWNo
IHRlc3QgaXMgYXRvbWljDQotICogaW4gdGhlIHNlbnNlIHRoYXQgYSBzaW5nbGUgdGVzdCBoYXMg
YSBzaW5nbGUgcmVzdWx0IChwYXNzL2ZhaWwvdGltZW91dCkuDQotICogV2l0aGluIGVhY2ggdGVz
dCBvbmUgbWF5IGhhdmUgYSBudW1iZXIgb2YgYXNzZXJ0cy4gVGhlIHRlc3QgZmFpbHMgYXQgdGhl
DQotICogZmlyc3QgZmFpbGluZyBhc3NlcnQsIGFuZCB0aGUgcmVtYWluZGVyIG9mIHRoZSB0ZXN0
IGlzICh0eXBpY2FsbHkpIG5vdCBydW4uDQotICoNCi0gKiBJZiB0aGUgZmlsZSBjb250YWluaW5n
IHRoZSB0ZXN0cyBpcyBhIEhUTUwgZmlsZSB3aXRoIGFuIGVsZW1lbnQgb2YgaWQgImxvZyINCi0g
KiB0aGlzIHdpbGwgYmUgcG9wdWxhdGVkIHdpdGggYSB0YWJsZSBjb250YWluaW5nIHRoZSB0ZXN0
IHJlc3VsdHMgYWZ0ZXIgYWxsDQotICogdGhlIHRlc3RzIGhhdmUgcnVuLg0KLSAqDQotICogTk9U
RTogQnkgZGVmYXVsdCB0ZXN0cyBtdXN0IGJlIGNyZWF0ZWQgYmVmb3JlIHRoZSBsb2FkIGV2ZW50
IGZpcmVzLiBGb3Igd2F5cw0KLSAqICAgICAgIHRvIGNyZWF0ZSB0ZXN0cyBhZnRlciB0aGUgbG9h
ZCBldmVudCwgc2VlICJEZXRlcm1pbmluZyB3aGVuIGFsbCB0ZXN0cw0KLSAqICAgICAgIGFyZSBj
b21wbGV0ZSIsIGJlbG93DQotICoNCi0gKiA9PSBTeW5jaHJvbm91cyBUZXN0cyA9PQ0KLSAqDQot
ICogVG8gY3JlYXRlIGEgc3luY2hyb25vdXMgdGVzdCB1c2UgdGhlIHRlc3QoKSBmdW5jdGlvbjoN
Ci0gKg0KLSAqIHRlc3QodGVzdF9mdW5jdGlvbiwgbmFtZSwgcHJvcGVydGllcykNCi0gKg0KLSAq
IHRlc3RfZnVuY3Rpb24gaXMgYSBmdW5jdGlvbiB0aGF0IGNvbnRhaW5zIHRoZSBjb2RlIHRvIHRl
c3QuIEZvciBleGFtcGxlIGENCi0gKiB0cml2aWFsIHBhc3NpbmcgdGVzdCB3b3VsZCBiZToNCi0g
Kg0KLSAqIHRlc3QoZnVuY3Rpb24oKSB7YXNzZXJ0X3RydWUodHJ1ZSl9LCAiYXNzZXJ0X3RydWUg
d2l0aCB0cnVlIikNCi0gKg0KLSAqIFRoZSBmdW5jdGlvbiBwYXNzZWQgaW4gaXMgcnVuIGluIHRo
ZSB0ZXN0KCkgY2FsbC4NCi0gKg0KLSAqIHByb3BlcnRpZXMgaXMgYW4gb2JqZWN0IHRoYXQgb3Zl
cnJpZGVzIGRlZmF1bHQgdGVzdCBwcm9wZXJ0aWVzLiBUaGUNCi0gKiByZWNvZ25pc2VkIHByb3Bl
cnRpZXMgYXJlOg0KLSAqICAgIHRpbWVvdXQgLSB0aGUgdGVzdCB0aW1lb3V0IGluIG1zDQotICoN
Ci0gKiBlLmcuDQotICogdGVzdCh0ZXN0X2Z1bmN0aW9uLCAiU2FtcGxlIHRlc3QiLCB7dGltZW91
dDoxMDAwfSkNCi0gKg0KLSAqIHdvdWxkIHJ1biB0ZXN0X2Z1bmN0aW9uIHdpdGggYSB0aW1lb3V0
IG9mIDFzLg0KLSAqDQotICogQWRkaXRpb25hbGx5LCB0ZXN0LXNwZWNpZmljIG1ldGFkYXRhIGNh
biBiZSBwYXNzZWQgaW4gdGhlIHByb3BlcnRpZXMuIFRoZXNlDQotICogYXJlIHVzZWQgd2hlbiB0
aGUgaW5kaXZpZHVhbCB0ZXN0IGhhcyBkaWZmZXJlbnQgbWV0YWRhdGEgZnJvbSB0aGF0IHN0b3Jl
ZCANCi0gKiBpbiB0aGUgPGhlYWQ+Lg0KLSAqIFRoZSByZWNvZ25pemVkIG1ldGFkYXRhIHByb3Bl
cnRpZXMgYXJlOg0KLSAqDQotICogICAgaGVscCAtIFRoZSB1cmwgb2YgdGhlIHBhcnQgb2YgdGhl
IHNwZWNpZmljYXRpb24gYmVpbmcgdGVzdGVkDQotICoNCi0gKiAgICBhc3NlcnQgLSBBIGh1bWFu
IHJlYWRhYmxlIGRlc2NyaXB0aW9uIG9mIHdoYXQgdGhlIHRlc3QgaXMgYXR0ZW1wdGluZyANCi0g
KiAgICAgICAgICAgICB0byBwcm92ZQ0KLSAqDQotICogICAgYXV0aG9yIC0gTmFtZSBhbmQgY29u
dGFjdCBpbmZvcm1hdGlvbiBmb3IgdGhlIGF1dGhvciBvZiB0aGUgdGVzdCBpbiB0aGUNCi0gKiAg
ICAgICAgICAgICBmb3JtYXQ6ICJOYW1lIDxlbWFpbF9hZGRyPiIgb3IgIk5hbWUgaHR0cDovL2Nv
bnRhY3QvdXJsIg0KLSAqDQotICogICAgZmxhZ3MgLSBzcGFjZSBzZXBhcmF0ZWQgbGlzdCBvZiB0
ZXN0IGZsYWdzIGluIGFkZGl0aW9uIHRvIGFueSBwcmVzZW50IGluDQotICogICAgICAgICAgICB0
aGUgaGVhZCBtZXRhZGF0YQ0KLSAqDQotICogPT0gQXN5bmNocm9ub3VzIFRlc3RzID09DQotICoN
Ci0gKiBUZXN0aW5nIGFzeW5jaHJvbm91cyBmZWF0dXJlcyBpcyBzb21ld2hhdCBtb3JlIGNvbXBs
ZXggc2luY2UgdGhlIHJlc3VsdCBvZg0KLSAqIGEgdGVzdCBtYXkgZGVwZW5kIG9uIG9uZSBvciBt
b3JlIGV2ZW50cyBvciBvdGhlciBjYWxsYmFja3MuIFRoZSBBUEkgcHJvdmlkZWQNCi0gKiBmb3Ig
dGVzdGluZyB0aGVzZSBmZWF0dXJlcyBpcyBpbmRlbmRlZCB0byBiZSByYXRoZXIgbG93LWxldmVs
IGJ1dCBob3BlZnVsbHkNCi0gKiBhcHBsaWNhYmxlIHRvIG1hbnkgc2l0dWF0aW9ucy4NCi0gKg0K
LSAqIFRvIGNyZWF0ZSBhIHRlc3QsIG9uZSBzdGFydHMgYnkgZ2V0dGluZyBhIFRlc3Qgb2JqZWN0
IHVzaW5nIGFzeW5jX3Rlc3Q6DQotICoNCi0gKiBhc3luY190ZXN0KG5hbWUsIHByb3BlcnRpZXMp
DQotICoNCi0gKiBlLmcuDQotICogdmFyIHQgPSBhc3luY190ZXN0KCJTaW1wbGUgYXN5bmMgdGVz
dCIpDQotICoNCi0gKiBBc3NlcnRpb25zIGNhbiBiZSBhZGRlZCB0byB0aGUgdGVzdCBieSBjYWxs
aW5nIHRoZSBzdGVwIG1ldGhvZCBvZiB0aGUgdGVzdA0KLSAqIG9iamVjdCB3aXRoIGEgZnVuY3Rp
b24gY29udGFpbmluZyB0aGUgdGVzdCBhc3NlcnRpb25zOg0KLSAqDQotICogdC5zdGVwKGZ1bmN0
aW9uKCkge2Fzc2VydF90cnVlKHRydWUpfSk7DQotICoNCi0gKiBXaGVuIGFsbCB0aGUgc3RlcHMg
YXJlIGNvbXBsZXRlLCB0aGUgZG9uZSgpIG1ldGhvZCBtdXN0IGJlIGNhbGxlZDoNCi0gKg0KLSAq
IHQuZG9uZSgpOw0KLSAqDQotICogQXMgYSBjb252ZW5pZW5jZSwgYXN5bmNfdGVzdCBjYW4gYWxz
byB0YWtlcyBhIGZ1bmN0aW9uIGFzIGZpcnN0IGFyZ3VtZW50Lg0KLSAqIFRoaXMgZnVuY3Rpb24g
aXMgY2FsbGVkIHdpdGggdGhlIHRlc3Qgb2JqZWN0IGFzIGJvdGggaXRzIGB0aGlzYCBvYmplY3Qg
YW5kDQotICogZmlyc3QgYXJndW1lbnQuIFRoZSBhYm92ZSBleGFtcGxlIGNhbiBiZSByZXdyaXR0
ZW4gYXM6DQotICoNCi0gKiBhc3luY190ZXN0KGZ1bmN0aW9uKHQpIHsNCi0gKiAgICAgb2JqZWN0
LnNvbWVfZXZlbnQgPSBmdW5jdGlvbigpIHsNCi0gKiAgICAgICAgIHQuc3RlcChmdW5jdGlvbiAo
KXthc3NlcnRfdHJ1ZSh0cnVlKTsgdC5kb25lKCk7fSk7DQotICogICAgIH07DQotICogfSwgIlNp
bXBsZSBhc3luYyB0ZXN0Iik7DQotICoNCi0gKiB3aGljaCBhdm9pZHMgY2x1dHRlcmluZyB0aGUg
Z2xvYmFsIHNjb3BlIHdpdGggcmVmZXJlbmNlcyB0byBhc3luYw0KLSAqIHRlc3RzIGluc3RhbmNl
cy4NCi0gKg0KLSAqIFRoZSBwcm9wZXJ0aWVzIGFyZ3VtZW50IGlzIGlkZW50aWNhbCB0byB0aGF0
IGZvciB0ZXN0KCkuDQotICoNCi0gKiBJbiBtYW55IGNhc2VzIGl0IGlzIGNvbnZlbmllbnQgdG8g
cnVuIGEgc3RlcCBpbiByZXNwb25zZSB0byBhbiBldmVudCBvciBhDQotICogY2FsbGJhY2suIEEg
Y29udmVuaWVudCBtZXRob2Qgb2YgZG9pbmcgdGhpcyBpcyB0aHJvdWdoIHRoZSBzdGVwX2Z1bmMg
bWV0aG9kDQotICogd2hpY2ggcmV0dXJucyBhIGZ1bmN0aW9uIHRoYXQsIHdoZW4gY2FsbGVkIHJ1
bnMgYSB0ZXN0IHN0ZXAuIEZvciBleGFtcGxlDQotICoNCi0gKiBvYmplY3Quc29tZV9ldmVudCA9
IHQuc3RlcF9mdW5jKGZ1bmN0aW9uKGUpIHthc3NlcnRfdHJ1ZShlLmEpfSk7DQotICoNCi0gKiA9
PSBNYWtpbmcgYXNzZXJ0aW9ucyA9PQ0KLSAqDQotICogRnVuY3Rpb25zIGZvciBtYWtpbmcgYXNz
ZXJ0aW9ucyBzdGFydCBhc3NlcnRfDQotICogVGhlIGJlc3Qgd2F5IHRvIGdldCBhIGxpc3QgaXMg
dG8gbG9vayBpbiB0aGlzIGZpbGUgZm9yIGZ1bmN0aW9ucyBuYW1lcw0KLSAqIG1hdGNoaW5nIHRo
YXQgcGF0dGVybi4gVGhlIGdlbmVyYWwgc2lnbmF0dXJlIGlzDQotICoNCi0gKiBhc3NlcnRfc29t
ZXRoaW5nKGFjdHVhbCwgZXhwZWN0ZWQsIGRlc2NyaXB0aW9uKQ0KLSAqDQotICogYWx0aG91Z2gg
bm90IGFsbCBhc3NlcnRpb25zIHByZWNpc2VseSBtYXRjaCB0aGlzIHBhdHRlcm4gZS5nLiBhc3Nl
cnRfdHJ1ZQ0KLSAqIG9ubHkgdGFrZXMgYWN0dWFsIGFuZCBkZXNjcmlwdGlvbiBhcyBhcmd1bWVu
dHMuDQotICoNCi0gKiBUaGUgZGVzY3JpcHRpb24gcGFyYW1ldGVyIGlzIHVzZWQgdG8gcHJlc2Vu
dCBtb3JlIHVzZWZ1bCBlcnJvciBtZXNzYWdlcyB3aGVuDQotICogYSB0ZXN0IGZhaWxzDQotICoN
Ci0gKiBOT1RFOiBBbGwgYXNzZXJ0cyBtdXN0IGJlIGxvY2F0ZWQgaW4gYSB0ZXN0KCkgb3IgYSBz
dGVwIG9mIGFuIGFzeW5jX3Rlc3QoKS4NCi0gKiAgICAgICBhc3NlcnRzIG91dHNpZGUgdGhlc2Ug
cGxhY2VzIHdvbid0IGJlIGRldGVjdGVkIGNvcnJlY3RseSBieSB0aGUgaGFybmVzcw0KLSAqICAg
ICAgIGFuZCBtYXkgY2F1c2UgYSBmaWxlIHRvIHN0b3AgdGVzdGluZy4NCi0gKg0KLSAqID09IFNl
dHVwID09DQotICoNCi0gKiBTb21ldGltZXMgdGVzdHMgcmVxdWlyZSBub24tdHJpdmlhbCBzZXR1
cCB0aGF0IG1heSBmYWlsLiBGb3IgdGhpcyBwdXJwb3NlDQotICogdGhlcmUgaXMgYSBzZXR1cCgp
IGZ1bmN0aW9uLCB0aGF0IG1heSBiZSBjYWxsZWQgd2l0aCBvbmUgb3IgdHdvIGFyZ3VtZW50cy4N
Ci0gKiBUaGUgdHdvIGFyZ3VtZW50IHZlcnNpb24gaXM6DQotICoNCi0gKiBzZXR1cChmdW5jLCBw
cm9wZXJ0aWVzKQ0KLSAqDQotICogVGhlIG9uZSBhcmd1bWVudCB2ZXJzaW9ucyBtYXkgb21pdCBl
aXRoZXIgYXJndW1lbnQuDQotICogZnVuYyBpcyBhIGZ1bmN0aW9uIHRvIGJlIHJ1biBzeW5jaHJv
bm91c2x5LiBzZXR1cCgpIGJlY29tZXMgYSBuby1vcCBvbmNlDQotICogYW55IHRlc3RzIGhhdmUg
cmV0dXJuZWQgcmVzdWx0cy4gUHJvcGVydGllcyBhcmUgZ2xvYmFsIHByb3BlcnRpZXMgb2YgdGhl
IHRlc3QNCi0gKiBoYXJuZXNzLiBDdXJyZW50bHkgcmVjb2duaXNlZCBwcm9wZXJ0aWVzIGFyZToN
Ci0gKg0KLSAqIHRpbWVvdXQgLSBUaGUgdGltZSBpbiBtcyBhZnRlciB3aGljaCB0aGUgaGFybmVz
cyBzaG91bGQgc3RvcCB3YWl0aW5nIGZvcg0KLSAqICAgICAgICAgICB0ZXN0cyB0byBjb21wbGV0
ZSAodGhpcyBpcyBkaWZmZXJlbnQgdG8gdGhlIHBlci10ZXN0IHRpbWVvdXQNCi0gKiAgICAgICAg
ICAgYmVjYXVzZSBhc3luYyB0ZXN0cyBkbyBub3Qgc3RhcnQgdGhlaXIgdGltZXIgdW50aWwgLnN0
ZXAgaXMgY2FsbGVkKQ0KLSAqDQotICogZXhwbGljaXRfZG9uZSAtIFdhaXQgZm9yIGFuIGV4cGxp
Y2l0IGNhbGwgdG8gZG9uZSgpIGJlZm9yZSBkZWNsYXJpbmcgYWxsDQotICogICAgICAgICAgICAg
ICAgIHRlc3RzIGNvbXBsZXRlIChzZWUgYmVsb3cpDQotICoNCi0gKiBvdXRwdXRfZG9jdW1lbnQg
LSBUaGUgZG9jdW1lbnQgdG8gd2hpY2ggcmVzdWx0cyBzaG91bGQgYmUgbG9nZ2VkLiBCeSBkZWZh
dWx0DQotICogICAgICAgICAgICAgICAgICAgdGhpcyBpcyB0aGUgY3VycmVudCBkb2N1bWVudCBi
dXQgY291bGQgYmUgYW4gYW5jZXN0b3INCi0gKiAgICAgICAgICAgICAgICAgICBkb2N1bWVudCBp
biBzb21lIGNhc2VzIGUuZy4gYSBTVkcgdGVzdCBsb2FkZWQgaW4gYW4gSFRNTA0KLSAqICAgICAg
ICAgICAgICAgICAgIHdyYXBwZXINCi0gKg0KLSAqIGV4cGxpY2l0X3RpbWVvdXQgLSBkaXNhYmxl
IGZpbGUgdGltZW91dDsgb25seSBzdG9wIHdhaXRpbmcgZm9yIHJlc3VsdHMNCi0gKiAgICAgICAg
ICAgICAgICAgICAgd2hlbiB0aGUgdGltZW91dCgpIGZ1bmN0aW9uIGlzIGNhbGxlZCAodHlwaWNh
bGx5IGZvcg0KLSAqICAgICAgICAgICAgICAgICAgICB1c2Ugd2hlbiBpbnRlZ3JhdGluZyB3aXRo
IHNvbWUgZXhpc3RpbmcgdGVzdCBmcmFtZXdvcmsNCi0gKiAgICAgICAgICAgICAgICAgICAgdGhh
dCBoYXMgaXRzIG93biB0aW1lb3V0IG1lY2hhbmlzbSkuDQotICoNCi0gKiA9PSBEZXRlcm1pbmlu
ZyB3aGVuIGFsbCB0ZXN0cyBhcmUgY29tcGxldGUgPT0NCi0gKg0KLSAqIEJ5IGRlZmF1bHQgdGhl
IHRlc3QgaGFybmVzcyB3aWxsIGFzc3VtZSB0aGVyZSBhcmUgbm8gbW9yZSByZXN1bHRzIHRvIGNv
bWUNCi0gKiB3aGVuOg0KLSAqIDEpIFRoZXJlIGFyZSBubyBUZXN0IG9iamVjdHMgdGhhdCBoYXZl
IGJlZW4gY3JlYXRlZCBidXQgbm90IGNvbXBsZXRlZA0KLSAqIDIpIFRoZSBsb2FkIGV2ZW50IG9u
IHRoZSBkb2N1bWVudCBoYXMgZmlyZWQNCi0gKg0KLSAqIFRoaXMgYmVoYXZpb3VyIGNhbiBiZSBv
dmVycmlkZGVuIGJ5IHNldHRpbmcgdGhlIGV4cGxpY2l0X2RvbmUgcHJvcGVydHkgdG8NCi0gKiB0
cnVlIGluIGEgY2FsbCB0byBzZXR1cCgpLiBJZiBleHBsaWNpdF9kb25lIGlzIHRydWUsIHRoZSB0
ZXN0IGhhcm5lc3Mgd2lsbA0KLSAqIG5vdCBhc3N1bWUgaXQgaXMgZG9uZSB1bnRpbCB0aGUgZ2xv
YmFsIGRvbmUoKSBmdW5jdGlvbiBpcyBjYWxsZWQuIE9uY2UgZG9uZSgpDQotICogaXMgY2FsbGVk
LCB0aGUgdHdvIGNvbmRpdGlvbnMgYWJvdmUgYXBwbHkgbGlrZSBub3JtYWwuDQotICoNCi0gKiA9
PSBHZW5lcmF0aW5nIHRlc3RzID09DQotICoNCi0gKiBOT1RFOiB0aGlzIGZ1bmN0aW9uYWxpdHkg
bWF5IGJlIHJlbW92ZWQNCi0gKg0KLSAqIFRoZXJlIGFyZSBzY2VuYXJpb3MgaW4gd2hpY2ggaXMg
aXMgZGVzaXJhYmxlIHRvIGNyZWF0ZSBhIGxhcmdlIG51bWJlciBvZg0KLSAqIChzeW5jaHJvbm91
cykgdGVzdHMgdGhhdCBhcmUgaW50ZXJuYWxseSBzaW1pbGFyIGJ1dCB2YXJ5IGluIHRoZSBwYXJh
bWV0ZXJzDQotICogdXNlZC4gVG8gbWFrZSB0aGlzIGVhc2llciwgdGhlIGdlbmVyYXRlX3Rlc3Rz
IGZ1bmN0aW9uIGFsbG93cyBhIHNpbmdsZQ0KLSAqIGZ1bmN0aW9uIHRvIGJlIGNhbGxlZCB3aXRo
IGVhY2ggc2V0IG9mIHBhcmFtZXRlcnMgaW4gYSBsaXN0Og0KLSAqDQotICogZ2VuZXJhdGVfdGVz
dHModGVzdF9mdW5jdGlvbiwgcGFyYW1ldGVyX2xpc3RzLCBwcm9wZXJ0aWVzKQ0KLSAqDQotICog
Rm9yIGV4YW1wbGU6DQotICoNCi0gKiBnZW5lcmF0ZV90ZXN0cyhhc3NlcnRfZXF1YWxzLCBbDQot
ICogICAgIFsiU3VtIG9uZSBhbmQgb25lIiwgMSsxLCAyXSwNCi0gKiAgICAgWyJTdW0gb25lIGFu
ZCB6ZXJvIiwgMSswLCAxXQ0KLSAqICAgICBdKQ0KLSAqDQotICogSXMgZXF1aXZhbGVudCB0bzoN
Ci0gKg0KLSAqIHRlc3QoZnVuY3Rpb24oKSB7YXNzZXJ0X2VxdWFscygxKzEsIDIpfSwgIlN1bSBv
bmUgYW5kIG9uZSIpDQotICogdGVzdChmdW5jdGlvbigpIHthc3NlcnRfZXF1YWxzKDErMCwgMSl9
LCAiU3VtIG9uZSBhbmQgemVybyIpDQotICoNCi0gKiBOb3RlIHRoYXQgdGhlIGZpcnN0IGl0ZW0g
aW4gZWFjaCBwYXJhbWV0ZXIgbGlzdCBjb3JyZXNwb25kcyB0byB0aGUgbmFtZSBvZg0KLSAqIHRo
ZSB0ZXN0Lg0KLSAqDQotICogVGhlIHByb3BlcnRpZXMgYXJndW1lbnQgaXMgaWRlbnRpY2FsIHRv
IHRoYXQgZm9yIHRlc3QoKS4gVGhpcyBtYXkgYmUgYSANCi0gKiBzaW5nbGUgb2JqZWN0ICh1c2Vk
IGZvciBhbGwgZ2VuZXJhdGVkIHRlc3RzKSBvciBhbiBhcnJheS4NCi0gKg0KLSAqID09IENhbGxi
YWNrIEFQSSA9PQ0KLSAqDQotICogVGhlIGZyYW1ld29yayBwcm92aWRlcyBjYWxsYmFja3MgY29y
cmVzcG9uZGluZyB0byAzIGV2ZW50czoNCi0gKg0KLSAqIHN0YXJ0IC0gaGFwcGVucyB3aGVuIHRo
ZSBmaXJzdCBUZXN0IGlzIGNyZWF0ZWQNCi0gKiByZXN1bHQgLSBoYXBwZW5zIHdoZW4gYSB0ZXN0
IHJlc3VsdCBpcyByZWNpZXZlZA0KLSAqIGNvbXBsZXRlIC0gaGFwcGVucyB3aGVuIGFsbCByZXN1
bHRzIGFyZSByZWNpZXZlZA0KLSAqDQotICogVGhlIHBhZ2UgZGVmaW5pbmcgdGhlIHRlc3RzIG1h
eSBhZGQgY2FsbGJhY2tzIGZvciB0aGVzZSBldmVudHMgYnkgY2FsbGluZw0KLSAqIHRoZSBmb2xs
b3dpbmcgbWV0aG9kczoNCi0gKg0KLSAqICAgYWRkX3N0YXJ0X2NhbGxiYWNrKGNhbGxiYWNrKSAt
IGNhbGxiYWNrIGNhbGxlZCB3aXRoIG5vIGFyZ3VtZW50cw0KLSAqICAgYWRkX3Jlc3VsdF9jYWxs
YmFjayhjYWxsYmFjaykgLSBjYWxsYmFjayBjYWxsZWQgd2l0aCBhIHRlc3QgYXJndW1lbnQNCi0g
KiAgIGFkZF9jb21wbGV0aW9uX2NhbGxiYWNrKGNhbGxiYWNrKSAtIGNhbGxiYWNrIGNhbGxlZCB3
aXRoIGFuIGFycmF5IG9mIHRlc3RzDQotICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBhbmQgYW4gc3RhdHVzIG9iamVjdA0KLSAqDQotICogdGVzdHMgaGF2ZSB0aGUgZm9s
bG93aW5nIHByb3BlcnRpZXM6DQotICogICBzdGF0dXM6IEEgc3RhdHVzIGNvZGUuIFRoaXMgY2Fu
IGJlIGNvbXBhcmVkIHRvIHRoZSBQQVNTLCBGQUlMLCBUSU1FT1VUIGFuZA0KLSAqICAgICAgICAg
ICBOT1RSVU4gcHJvcGVydGllcyBvbiB0aGUgdGVzdCBvYmplY3QNCi0gKiAgIG1lc3NhZ2U6IEEg
bWVzc2FnZSBpbmRpY2F0aW5nIHRoZSByZWFzb24gZm9yIGZhaWx1cmUuIEluIHRoZSBmdXR1cmUg
dGhpcw0KLSAqICAgICAgICAgICAgd2lsbCBhbHdheXMgYmUgYSBzdHJpbmcNCi0gKg0KLSAqICBU
aGUgc3RhdHVzIG9iamVjdCBnaXZlcyB0aGUgb3ZlcmFsbCBzdGF0dXMgb2YgdGhlIGhhcm5lc3Mu
IEl0IGhhcyB0aGUNCi0gKiAgZm9sbG93aW5nIHByb3BlcnRpZXM6DQotICogICAgc3RhdHVzOiBD
YW4gYmUgY29tcGFyZWQgdG8gdGhlIE9LLCBFUlJPUiBhbmQgVElNRU9VVCBwcm9wZXJ0aWVzDQot
ICogICAgbWVzc2FnZTogQW4gZXJyb3IgbWVzc2FnZSBzZXQgd2hlbiB0aGUgc3RhdHVzIGlzIEVS
Uk9SDQotICoNCi0gKiA9PSBFeHRlcm5hbCBBUEkgPT0NCi0gKg0KLSAqIEluIG9yZGVyIHRvIGNv
bGxlY3QgdGhlIHJlc3VsdHMgb2YgbXVsdGlwbGUgcGFnZXMgY29udGFpbmluZyB0ZXN0cywgdGhl
IHRlc3QNCi0gKiBoYXJuZXNzIHdpbGwsIHdoZW4gbG9hZGVkIGluIGEgbmVzdGVkIGJyb3dzaW5n
IGNvbnRleHQsIGF0dGVtcHQgdG8gY2FsbA0KLSAqIGNlcnRhaW4gZnVuY3Rpb25zIGluIGVhY2gg
YW5jZXN0b3IgYW5kIG9wZW5lciBicm93c2luZyBjb250ZXh0Og0KLSAqDQotICogc3RhcnQgLSBz
dGFydF9jYWxsYmFjaw0KLSAqIHJlc3VsdCAtIHJlc3VsdF9jYWxsYmFjaw0KLSAqIGNvbXBsZXRl
IC0gY29tcGxldGlvbl9jYWxsYmFjaw0KLSAqDQotICogVGhlc2UgYXJlIGdpdmVuIHRoZSBzYW1l
IGFyZ3VtZW50cyBhcyB0aGUgY29ycmVzcG9uZGluZyBpbnRlcm5hbCBjYWxsYmFja3MNCi0gKiBk
ZXNjcmliZWQgYWJvdmUuDQotICoNCi0gKiA9PSBFeHRlcm5hbCBBUEkgdGhyb3VnaCBjcm9zcy1k
b2N1bWVudCBtZXNzYWdpbmcgPT0NCi0gKg0KLSAqIFdoZXJlIHN1cHBvcnRlZCwgdGhlIHRlc3Qg
aGFybmVzcyB3aWxsIGFsc28gc2VuZCBtZXNzYWdlcyB1c2luZw0KLSAqIGNyb3NzLWRvY3VtZW50
IG1lc3NhZ2luZyB0byBlYWNoIGFuY2VzdG9yIGFuZCBvcGVuZXIgYnJvd3NpbmcgY29udGV4dC4g
U2luY2UNCi0gKiBpdCB1c2VzIHRoZSB3aWxkY2FyZCBrZXl3b3JkICgqKSwgY3Jvc3Mtb3JpZ2lu
IGNvbW11bmljYXRpb24gaXMgZW5hYmxlZCBhbmQNCi0gKiBzY3JpcHQgb24gZGlmZmVyZW50IG9y
aWdpbnMgY2FuIGNvbGxlY3QgdGhlIHJlc3VsdHMuDQotICoNCi0gKiBUaGlzIEFQSSBmb2xsb3dz
IHNpbWlsYXIgY29udmVudGlvbnMgYXMgdGhvc2UgZGVzY3JpYmVkIGFib3ZlIG9ubHkgc2xpZ2h0
bHkNCi0gKiBtb2RpZmllZCB0byBhY2NvbW1vZGF0ZSBtZXNzYWdlIGV2ZW50IEFQSS4gRWFjaCBt
ZXNzYWdlIGlzIHNlbnQgYnkgdGhlIGhhcm5lc3MNCi0gKiBpcyBwYXNzZWQgYSBzaW5nbGUgdmFu
aWxsYSBvYmplY3QsIGF2YWlsYWJsZSBhcyB0aGUgYGRhdGFgIHByb3BlcnR5IG9mIHRoZQ0KLSAq
IGV2ZW50IG9iamVjdC4gVGhlc2Ugb2JqZWN0cyBhcmUgc3RydWN0dXJlcyBhcyBmb2xsb3dzOg0K
LSAqDQotICogc3RhcnQgLSB7IHR5cGU6ICJzdGFydCIgfQ0KLSAqIHJlc3VsdCAtIHsgdHlwZTog
InJlc3VsdCIsIHRlc3Q6IFRlc3QgfQ0KLSAqIGNvbXBsZXRlIC0geyB0eXBlOiAiY29tcGxldGUi
LCB0ZXN0czogW1Rlc3QsIC4uLl0sIHN0YXR1czogVGVzdHNTdGF0dXMgfQ0KLSAqDQotICogPT0g
TGlzdCBvZiBhc3NlcnRpb25zID09DQotICoNCi0gKiBhc3NlcnRfdHJ1ZShhY3R1YWwsIGRlc2Ny
aXB0aW9uKQ0KLSAqICAgYXNzZXJ0cyB0aGF0IC9hY3R1YWwvIGlzIHN0cmljdGx5IHRydWUNCi0g
Kg0KLSAqIGFzc2VydF9mYWxzZShhY3R1YWwsIGRlc2NyaXB0aW9uKQ0KLSAqICAgYXNzZXJ0cyB0
aGF0IC9hY3R1YWwvIGlzIHN0cmljdGx5IGZhbHNlDQotICoNCi0gKiBhc3NlcnRfZXF1YWxzKGFj
dHVhbCwgZXhwZWN0ZWQsIGRlc2NyaXB0aW9uKQ0KLSAqICAgYXNzZXJ0cyB0aGF0IC9hY3R1YWwv
IGlzIHRoZSBzYW1lIHZhbHVlIGFzIC9leHBlY3RlZC8NCi0gKg0KLSAqIGFzc2VydF9ub3RfZXF1
YWxzKGFjdHVhbCwgZXhwZWN0ZWQsIGRlc2NyaXB0aW9uKQ0KLSAqICAgYXNzZXJ0cyB0aGF0IC9h
Y3R1YWwvIGlzIGEgZGlmZmVyZW50IHZhbHVlIHRvIC9leHBlY3RlZC8uIFllcywgdGhpcyBtZWFu
cw0KLSAqICAgdGhhdCAiZXhwZWN0ZWQiIGlzIGEgbWlzbm9tZXINCi0gKg0KLSAqIGFzc2VydF9p
bl9hcnJheShhY3R1YWwsIGV4cGVjdGVkLCBkZXNjcmlwdGlvbikNCi0gKiAgIGFzc2VydHMgdGhh
dCAvZXhwZWN0ZWQvIGlzIGFuIEFycmF5LCBhbmQgL2FjdHVhbC8gaXMgZXF1YWwgdG8gb25lIG9m
IHRoZQ0KLSAqICAgbWVtYmVycyAtLSBleHBlY3RlZC5pbmRleE9mKGFjdHVhbCkgIT0gLTENCi0g
Kg0KLSAqIGFzc2VydF9hcnJheV9lcXVhbHMoYWN0dWFsLCBleHBlY3RlZCwgZGVzY3JpcHRpb24p
DQotICogICBhc3NlcnRzIHRoYXQgL2FjdHVhbC8gYW5kIC9leHBlY3RlZC8gaGF2ZSB0aGUgc2Ft
ZSBsZW5ndGggYW5kIHRoZSB2YWx1ZSBvZg0KLSAqICAgZWFjaCBpbmRleGVkIHByb3BlcnR5IGlu
IC9hY3R1YWwvIGlzIHRoZSBzdHJpY3RseSBlcXVhbCB0byB0aGUgY29ycmVzcG9uZGluZw0KLSAq
ICAgcHJvcGVydHkgdmFsdWUgaW4gL2V4cGVjdGVkLw0KLSAqDQotICogYXNzZXJ0X2FwcHJveF9l
cXVhbHMoYWN0dWFsLCBleHBlY3RlZCwgZXBzaWxvbiwgZGVzY3JpcHRpb24pDQotICogICBhc3Nl
cnRzIHRoYXQgL2FjdHVhbC8gaXMgYSBudW1iZXIgd2l0aGluICsvLSAvZXBzaWxvbi8gb2YgL2V4
cGVjdGVkLw0KLSAqDQotICogYXNzZXJ0X3JlZ2V4cF9tYXRjaChhY3R1YWwsIGV4cGVjdGVkLCBk
ZXNjcmlwdGlvbikNCi0gKiAgIGFzc2VydHMgdGhhdCAvYWN0dWFsLyBtYXRjaGVzIHRoZSByZWdl
eHAgL2V4cGVjdGVkLw0KLSAqDQotICogYXNzZXJ0X2NsYXNzX3N0cmluZyhvYmplY3QsIGNsYXNz
X25hbWUsIGRlc2NyaXB0aW9uKQ0KLSAqICAgYXNzZXJ0cyB0aGF0IHRoZSBjbGFzcyBzdHJpbmcg
b2YgL29iamVjdC8gYXMgcmV0dXJuZWQgaW4NCi0gKiAgIE9iamVjdC5wcm90b3R5cGUudG9TdHJp
bmcgaXMgZXF1YWwgdG8gL2NsYXNzX25hbWUvLg0KLSAqDQotICogYXNzZXJ0X293bl9wcm9wZXJ0
eShvYmplY3QsIHByb3BlcnR5X25hbWUsIGRlc2NyaXB0aW9uKQ0KLSAqICAgYXNzZXJ0IHRoYXQg
b2JqZWN0IGhhcyBvd24gcHJvcGVydHkgcHJvcGVydHlfbmFtZQ0KLSAqDQotICogYXNzZXJ0X2lu
aGVyaXRzKG9iamVjdCwgcHJvcGVydHlfbmFtZSwgZGVzY3JpcHRpb24pDQotICogICBhc3NlcnQg
dGhhdCBvYmplY3QgZG9lcyBub3QgaGF2ZSBhbiBvd24gcHJvcGVydHkgbmFtZWQgcHJvcGVydHlf
bmFtZQ0KLSAqICAgYnV0IHRoYXQgcHJvcGVydHlfbmFtZSBpcyBwcmVzZW50IGluIHRoZSBwcm90
b3R5cGUgY2hhaW4gZm9yIG9iamVjdA0KLSAqDQotICogYXNzZXJ0X2lkbF9hdHRyaWJ1dGUob2Jq
ZWN0LCBhdHRyaWJ1dGVfbmFtZSwgZGVzY3JpcHRpb24pDQotICogICBhc3NlcnQgdGhhdCBhbiBv
YmplY3QgdGhhdCBpcyBhbiBpbnN0YW5jZSBvZiBzb21lIGludGVyZmFjZSBoYXMgdGhlDQotICog
ICBhdHRyaWJ1dGUgYXR0cmlidXRlX25hbWUgZm9sbG93aW5nIHRoZSBjb25kaXRpb25zIHNwZWNp
ZmllZCBieSBXZWJJREwNCi0gKg0KLSAqIGFzc2VydF9yZWFkb25seShvYmplY3QsIHByb3BlcnR5
X25hbWUsIGRlc2NyaXB0aW9uKQ0KLSAqICAgYXNzZXJ0IHRoYXQgcHJvcGVydHkgcHJvcGVydHlf
bmFtZSBvbiBvYmplY3QgaXMgcmVhZG9ubHkNCi0gKg0KLSAqIGFzc2VydF90aHJvd3MoY29kZSwg
ZnVuYywgZGVzY3JpcHRpb24pDQotICogICBjb2RlIC0gdGhlIGV4cGVjdGVkIGV4Y2VwdGlvbjoN
Ci0gKiAgICAgbyBzdHJpbmc6IHRoZSB0aHJvd24gZXhjZXB0aW9uIG11c3QgYmUgYSBET01FeGNl
cHRpb24gd2l0aCB0aGUgZ2l2ZW4NCi0gKiAgICAgICAgICAgICAgIG5hbWUsIGUuZy4sICJUaW1l
b3V0RXJyb3IiIChmb3IgY29tcGF0aWJpbGl0eSB3aXRoIGV4aXN0aW5nDQotICogICAgICAgICAg
ICAgICB0ZXN0cywgYSBjb25zdGFudCBpcyBhbHNvIHN1cHBvcnRlZCwgZS5nLiwgIlRJTUVPVVRf
RVJSIikNCi0gKiAgICAgbyBvYmplY3Q6IHRoZSB0aHJvd24gZXhjZXB0aW9uIG11c3QgaGF2ZSBh
IHByb3BlcnR5IGNhbGxlZCAibmFtZSIgdGhhdA0KLSAqICAgICAgICAgICAgICAgbWF0Y2hlcyBj
b2RlLm5hbWUNCi0gKiAgICAgbyBudWxsOiAgIGFsbG93IGFueSBleGNlcHRpb24gKGluIGdlbmVy
YWwsIG9uZSBvZiB0aGUgb3B0aW9ucyBhYm92ZQ0KLSAqICAgICAgICAgICAgICAgc2hvdWxkIGJl
IHVzZWQpDQotICogICBmdW5jIC0gYSBmdW5jdGlvbiB0aGF0IHNob3VsZCB0aHJvdw0KLSAqDQot
ICogYXNzZXJ0X3VucmVhY2hlZChkZXNjcmlwdGlvbikNCi0gKiAgIGFzc2VydHMgaWYgY2FsbGVk
LiBVc2VkIHRvIGVuc3VyZSB0aGF0IHNvbWUgY29kZXBhdGggaXMgKm5vdCogdGFrZW4gZS5nLg0K
LSAqICAgYW4gZXZlbnQgZG9lcyBub3QgZmlyZS4NCi0gKg0KLSAqIGFzc2VydF9hbnkoYXNzZXJ0
X2Z1bmMsIGFjdHVhbCwgZXhwZWN0ZWRfYXJyYXksIGV4dHJhX2FyZ18xLCAuLi4gZXh0cmFfYXJn
X04pDQotICogICBhc3NlcnRzIHRoYXQgb25lIGFzc2VydF9mdW5jKGFjdHVhbCwgZXhwZWN0ZWRf
YXJyYXlfTiwgZXh0cmFfYXJnMSwgLi4uLCBleHRyYV9hcmdfTikNCi0gKiAgIGlzIHRydWUgZm9y
IHNvbWUgZXhwZWN0ZWRfYXJyYXlfTiBpbiBleHBlY3RlZF9hcnJheS4gVGhpcyBvbmx5IHdvcmtz
IGZvciBhc3NlcnRfZnVuYw0KLSAqICAgd2l0aCBzaWduYXR1cmUgYXNzZXJ0X2Z1bmMoYWN0dWFs
LCBleHBlY3RlZCwgYXJnc18xLCAuLi4sIGFyZ3NfTikuIE5vdGUgdGhhdCB0ZXN0cw0KLSAqICAg
d2l0aCBtdWx0aXBsZSBhbGxvd2VkIHBhc3MgY29uZGl0aW9ucyBhcmUgYmFkIHByYWN0aWNlIHVu
bGVzcyB0aGUgc3BlYyBzcGVjaWZpY2FsbHkNCi0gKiAgIGFsbG93cyBtdWx0aXBsZSBiZWhhdmlv
dXJzLiBUZXN0IGF1dGhvcnMgc2hvdWxkIG5vdCB1c2UgdGhpcyBtZXRob2Qgc2ltcGx5IHRvIGhp
ZGUgDQotICogICBVQSBidWdzLg0KLSAqDQotICogYXNzZXJ0X2V4aXN0cyhvYmplY3QsIHByb3Bl
cnR5X25hbWUsIGRlc2NyaXB0aW9uKQ0KLSAqICAgKioqIGRlcHJlY2F0ZWQgKioqDQotICogICBh
c3NlcnRzIHRoYXQgb2JqZWN0IGhhcyBhbiBvd24gcHJvcGVydHkgcHJvcGVydHlfbmFtZQ0KLSAq
DQotICogYXNzZXJ0X25vdF9leGlzdHMob2JqZWN0LCBwcm9wZXJ0eV9uYW1lLCBkZXNjcmlwdGlv
bikNCi0gKiAgICoqKiBkZXByZWNhdGVkICoqKg0KLSAqICAgYXNzZXJ0IHRoYXQgb2JqZWN0IGRv
ZXMgbm90IGhhdmUgb3duIHByb3BlcnR5IHByb3BlcnR5X25hbWUNCi0gKi8NCi0NCi0oZnVuY3Rp
b24gKCkNCi17DQotICAgIHZhciBkZWJ1ZyA9IGZhbHNlOw0KLSAgICAvLyBkZWZhdWx0IHRpbWVv
dXQgaXMgNSBzZWNvbmRzLCB0ZXN0IGNhbiBvdmVycmlkZSBpZiBuZWVkZWQNCi0gICAgdmFyIHNl
dHRpbmdzID0gew0KLSAgICAgIG91dHB1dDp0cnVlLA0KLSAgICAgIHRpbWVvdXQ6NTAwMCwNCi0g
ICAgICB0ZXN0X3RpbWVvdXQ6MjAwMA0KLSAgICB9Ow0KLQ0KLSAgICB2YXIgeGh0bWxfbnMgPSAi
aHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbCI7DQotDQotICAgIC8vIHNjcmlwdF9wcmVmaXgg
aXMgdXNlZCBieSBPdXRwdXQucHJvdG90eXBlLnNob3dfcmVzdWx0cygpIHRvIGZpZ3VyZSBvdXQN
Ci0gICAgLy8gd2hlcmUgdG8gZ2V0IHRlc3RoYXJuZXNzLmNzcyBmcm9tLiAgSXQncyBlbmNsb3Nl
ZCBpbiBhbiBleHRyYSBjbG9zdXJlIHRvDQotICAgIC8vIG5vdCBwb2xsdXRlIHRoZSBsaWJyYXJ5
J3MgbmFtZXNwYWNlIHdpdGggdmFyaWFibGVzIGxpa2UgInNyYyIuDQotICAgIHZhciBzY3JpcHRf
cHJlZml4ID0gbnVsbDsNCi0gICAgKGZ1bmN0aW9uICgpDQotICAgIHsNCi0gICAgICAgIHZhciBz
Y3JpcHRzID0gZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoInNjcmlwdCIpOw0KLSAgICAg
ICAgZm9yICh2YXIgaSA9IDA7IGkgPCBzY3JpcHRzLmxlbmd0aDsgaSsrKQ0KLSAgICAgICAgew0K
LSAgICAgICAgICAgIGlmIChzY3JpcHRzW2ldLnNyYykNCi0gICAgICAgICAgICB7DQotICAgICAg
ICAgICAgICAgIHZhciBzcmMgPSBzY3JpcHRzW2ldLnNyYzsNCi0gICAgICAgICAgICB9DQotICAg
ICAgICAgICAgZWxzZSBpZiAoc2NyaXB0c1tpXS5ocmVmKQ0KLSAgICAgICAgICAgIHsNCi0gICAg
ICAgICAgICAgICAgLy9TVkcgY2FzZQ0KLSAgICAgICAgICAgICAgICB2YXIgc3JjID0gc2NyaXB0
c1tpXS5ocmVmLmJhc2VWYWw7DQotICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgIGlmIChzcmMg
JiYgc3JjLnNsaWNlKHNyYy5sZW5ndGggLSAidGVzdGhhcm5lc3MuanMiLmxlbmd0aCkgPT09ICJ0
ZXN0aGFybmVzcy5qcyIpDQotICAgICAgICAgICAgew0KLSAgICAgICAgICAgICAgICBzY3JpcHRf
cHJlZml4ID0gc3JjLnNsaWNlKDAsIHNyYy5sZW5ndGggLSAidGVzdGhhcm5lc3MuanMiLmxlbmd0
aCk7DQotICAgICAgICAgICAgICAgIGJyZWFrOw0KLSAgICAgICAgICAgIH0NCi0gICAgICAgIH0N
Ci0gICAgfSkoKTsNCi0NCi0gICAgLyoNCi0gICAgICogQVBJIGZ1bmN0aW9ucw0KLSAgICAgKi8N
Ci0NCi0gICAgdmFyIG5hbWVfY291bnRlciA9IDA7DQotICAgIGZ1bmN0aW9uIG5leHRfZGVmYXVs
dF9uYW1lKCkNCi0gICAgew0KLSAgICAgICAgLy9Eb24ndCB1c2UgZG9jdW1lbnQudGl0bGUgdG8g
d29yayBhcm91bmQgYW4gT3BlcmEgYnVnIGluIFhIVE1MIGRvY3VtZW50cw0KLSAgICAgICAgdmFy
IHByZWZpeCA9IGRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCJ0aXRsZSIpLmxlbmd0aCA+
IDAgPw0KLSAgICAgICAgICAgICAgICAgICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50c0J5VGFn
TmFtZSgidGl0bGUiKVswXS5maXJzdENoaWxkLmRhdGEgOg0KLSAgICAgICAgICAgICAgICAgICAg
ICAgICAiVW50aXRsZWQiOw0KLSAgICAgICAgdmFyIHN1ZmZpeCA9IG5hbWVfY291bnRlciA+IDAg
PyAiICIgKyBuYW1lX2NvdW50ZXIgOiAiIjsNCi0gICAgICAgIG5hbWVfY291bnRlcisrOw0KLSAg
ICAgICAgcmV0dXJuIHByZWZpeCArIHN1ZmZpeDsNCi0gICAgfQ0KLQ0KLSAgICBmdW5jdGlvbiB0
ZXN0KGZ1bmMsIG5hbWUsIHByb3BlcnRpZXMpDQotICAgIHsNCi0gICAgICAgIHZhciB0ZXN0X25h
bWUgPSBuYW1lID8gbmFtZSA6IG5leHRfZGVmYXVsdF9uYW1lKCk7DQotICAgICAgICBwcm9wZXJ0
aWVzID0gcHJvcGVydGllcyA/IHByb3BlcnRpZXMgOiB7fTsNCi0gICAgICAgIHZhciB0ZXN0X29i
aiA9IG5ldyBUZXN0KHRlc3RfbmFtZSwgcHJvcGVydGllcyk7DQotICAgICAgICB0ZXN0X29iai5z
dGVwKGZ1bmMpOw0KLSAgICAgICAgaWYgKHRlc3Rfb2JqLnN0YXR1cyA9PT0gdGVzdF9vYmouTk9U
UlVOKSB7DQotICAgICAgICAgICAgdGVzdF9vYmouZG9uZSgpOw0KLSAgICAgICAgfQ0KLSAgICB9
DQotDQotICAgIGZ1bmN0aW9uIGFzeW5jX3Rlc3QoZnVuYywgbmFtZSwgcHJvcGVydGllcykNCi0g
ICAgew0KLSAgICAgICAgaWYgKHR5cGVvZiBmdW5jICE9PSAiZnVuY3Rpb24iKSB7DQotICAgICAg
ICAgICAgcHJvcGVydGllcyA9IG5hbWU7DQotICAgICAgICAgICAgbmFtZSA9IGZ1bmM7DQotICAg
ICAgICAgICAgZnVuYyA9IG51bGw7DQotICAgICAgICB9DQotICAgICAgICB2YXIgdGVzdF9uYW1l
ID0gbmFtZSA/IG5hbWUgOiBuZXh0X2RlZmF1bHRfbmFtZSgpOw0KLSAgICAgICAgcHJvcGVydGll
cyA9IHByb3BlcnRpZXMgPyBwcm9wZXJ0aWVzIDoge307DQotICAgICAgICB2YXIgdGVzdF9vYmog
PSBuZXcgVGVzdCh0ZXN0X25hbWUsIHByb3BlcnRpZXMpOw0KLSAgICAgICAgaWYgKGZ1bmMpIHsN
Ci0gICAgICAgICAgICB0ZXN0X29iai5zdGVwKGZ1bmMsIHRlc3Rfb2JqLCB0ZXN0X29iaik7DQot
ICAgICAgICB9DQotICAgICAgICByZXR1cm4gdGVzdF9vYmo7DQotICAgIH0NCi0NCi0gICAgZnVu
Y3Rpb24gc2V0dXAoZnVuY19vcl9wcm9wZXJ0aWVzLCBtYXliZV9wcm9wZXJ0aWVzKQ0KLSAgICB7
DQotICAgICAgICB2YXIgZnVuYyA9IG51bGw7DQotICAgICAgICB2YXIgcHJvcGVydGllcyA9IHt9
Ow0KLSAgICAgICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT09IDIpIHsNCi0gICAgICAgICAgICBm
dW5jID0gZnVuY19vcl9wcm9wZXJ0aWVzOw0KLSAgICAgICAgICAgIHByb3BlcnRpZXMgPSBtYXli
ZV9wcm9wZXJ0aWVzOw0KLSAgICAgICAgfSBlbHNlIGlmIChmdW5jX29yX3Byb3BlcnRpZXMgaW5z
dGFuY2VvZiBGdW5jdGlvbil7DQotICAgICAgICAgICAgZnVuYyA9IGZ1bmNfb3JfcHJvcGVydGll
czsNCi0gICAgICAgIH0gZWxzZSB7DQotICAgICAgICAgICAgcHJvcGVydGllcyA9IGZ1bmNfb3Jf
cHJvcGVydGllczsNCi0gICAgICAgIH0NCi0gICAgICAgIHRlc3RzLnNldHVwKGZ1bmMsIHByb3Bl
cnRpZXMpOw0KLSAgICAgICAgb3V0cHV0LnNldHVwKHByb3BlcnRpZXMpOw0KLSAgICB9DQotDQot
ICAgIGZ1bmN0aW9uIGRvbmUoKSB7DQotICAgICAgICB0ZXN0cy5lbmRfd2FpdCgpOw0KLSAgICB9
DQotDQotICAgIGZ1bmN0aW9uIGdlbmVyYXRlX3Rlc3RzKGZ1bmMsIGFyZ3MsIHByb3BlcnRpZXMp
IHsNCi0gICAgICAgIGZvckVhY2goYXJncywgZnVuY3Rpb24oeCwgaSkNCi0gICAgICAgICAgICAg
ICAgew0KLSAgICAgICAgICAgICAgICAgICAgdmFyIG5hbWUgPSB4WzBdOw0KLSAgICAgICAgICAg
ICAgICAgICAgdGVzdChmdW5jdGlvbigpDQotICAgICAgICAgICAgICAgICAgICAgICAgIHsNCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmMuYXBwbHkodGhpcywgeC5zbGljZSgxKSk7
DQotICAgICAgICAgICAgICAgICAgICAgICAgIH0sIA0KLSAgICAgICAgICAgICAgICAgICAgICAg
ICBuYW1lLCANCi0gICAgICAgICAgICAgICAgICAgICAgICAgQXJyYXkuaXNBcnJheShwcm9wZXJ0
aWVzKSA/IHByb3BlcnRpZXNbaV0gOiBwcm9wZXJ0aWVzKTsNCi0gICAgICAgICAgICAgICAgfSk7
DQotICAgIH0NCi0NCi0gICAgZnVuY3Rpb24gb25fZXZlbnQob2JqZWN0LCBldmVudCwgY2FsbGJh
Y2spDQotICAgIHsNCi0gICAgICBvYmplY3QuYWRkRXZlbnRMaXN0ZW5lcihldmVudCwgY2FsbGJh
Y2ssIGZhbHNlKTsNCi0gICAgfQ0KLQ0KLSAgICBleHBvc2UodGVzdCwgJ3Rlc3QnKTsNCi0gICAg
ZXhwb3NlKGFzeW5jX3Rlc3QsICdhc3luY190ZXN0Jyk7DQotICAgIGV4cG9zZShnZW5lcmF0ZV90
ZXN0cywgJ2dlbmVyYXRlX3Rlc3RzJyk7DQotICAgIGV4cG9zZShzZXR1cCwgJ3NldHVwJyk7DQot
ICAgIGV4cG9zZShkb25lLCAnZG9uZScpOw0KLSAgICBleHBvc2Uob25fZXZlbnQsICdvbl9ldmVu
dCcpOw0KLQ0KLSAgICAvKg0KLSAgICAgKiBSZXR1cm4gYSBzdHJpbmcgdHJ1bmNhdGVkIHRvIHRo
ZSBnaXZlbiBsZW5ndGgsIHdpdGggLi4uIGFkZGVkIGF0IHRoZSBlbmQNCi0gICAgICogaWYgaXQg
d2FzIGxvbmdlci4NCi0gICAgICovDQotICAgIGZ1bmN0aW9uIHRydW5jYXRlKHMsIGxlbikNCi0g
ICAgew0KLSAgICAgICAgaWYgKHMubGVuZ3RoID4gbGVuKSB7DQotICAgICAgICAgICAgcmV0dXJu
IHMuc3Vic3RyaW5nKDAsIGxlbiAtIDMpICsgIi4uLiI7DQotICAgICAgICB9DQotICAgICAgICBy
ZXR1cm4gczsNCi0gICAgfQ0KLQ0KLSAgICAvKg0KLSAgICAgKiBDb252ZXJ0IGEgdmFsdWUgdG8g
YSBuaWNlLCBodW1hbi1yZWFkYWJsZSBzdHJpbmcNCi0gICAgICovDQotICAgIGZ1bmN0aW9uIGZv
cm1hdF92YWx1ZSh2YWwpDQotICAgIHsNCi0gICAgICAgIGlmIChBcnJheS5pc0FycmF5KHZhbCkp
DQotICAgICAgICB7DQotICAgICAgICAgICAgcmV0dXJuICJbIiArIHZhbC5tYXAoZm9ybWF0X3Zh
bHVlKS5qb2luKCIsICIpICsgIl0iOw0KLSAgICAgICAgfQ0KLQ0KLSAgICAgICAgc3dpdGNoICh0
eXBlb2YgdmFsKQ0KLSAgICAgICAgew0KLSAgICAgICAgY2FzZSAic3RyaW5nIjoNCi0gICAgICAg
ICAgICB2YWwgPSB2YWwucmVwbGFjZSgiXFwiLCAiXFxcXCIpOw0KLSAgICAgICAgICAgIGZvciAo
dmFyIGkgPSAwOyBpIDwgMzI7IGkrKykNCi0gICAgICAgICAgICB7DQotICAgICAgICAgICAgICAg
IHZhciByZXBsYWNlID0gIlxcIjsNCi0gICAgICAgICAgICAgICAgc3dpdGNoIChpKSB7DQotICAg
ICAgICAgICAgICAgIGNhc2UgMDogcmVwbGFjZSArPSAiMCI7IGJyZWFrOw0KLSAgICAgICAgICAg
ICAgICBjYXNlIDE6IHJlcGxhY2UgKz0gIngwMSI7IGJyZWFrOw0KLSAgICAgICAgICAgICAgICBj
YXNlIDI6IHJlcGxhY2UgKz0gIngwMiI7IGJyZWFrOw0KLSAgICAgICAgICAgICAgICBjYXNlIDM6
IHJlcGxhY2UgKz0gIngwMyI7IGJyZWFrOw0KLSAgICAgICAgICAgICAgICBjYXNlIDQ6IHJlcGxh
Y2UgKz0gIngwNCI7IGJyZWFrOw0KLSAgICAgICAgICAgICAgICBjYXNlIDU6IHJlcGxhY2UgKz0g
IngwNSI7IGJyZWFrOw0KLSAgICAgICAgICAgICAgICBjYXNlIDY6IHJlcGxhY2UgKz0gIngwNiI7
IGJyZWFrOw0KLSAgICAgICAgICAgICAgICBjYXNlIDc6IHJlcGxhY2UgKz0gIngwNyI7IGJyZWFr
Ow0KLSAgICAgICAgICAgICAgICBjYXNlIDg6IHJlcGxhY2UgKz0gImIiOyBicmVhazsNCi0gICAg
ICAgICAgICAgICAgY2FzZSA5OiByZXBsYWNlICs9ICJ0IjsgYnJlYWs7DQotICAgICAgICAgICAg
ICAgIGNhc2UgMTA6IHJlcGxhY2UgKz0gIm4iOyBicmVhazsNCi0gICAgICAgICAgICAgICAgY2Fz
ZSAxMTogcmVwbGFjZSArPSAidiI7IGJyZWFrOw0KLSAgICAgICAgICAgICAgICBjYXNlIDEyOiBy
ZXBsYWNlICs9ICJmIjsgYnJlYWs7DQotICAgICAgICAgICAgICAgIGNhc2UgMTM6IHJlcGxhY2Ug
Kz0gInIiOyBicmVhazsNCi0gICAgICAgICAgICAgICAgY2FzZSAxNDogcmVwbGFjZSArPSAieDBl
IjsgYnJlYWs7DQotICAgICAgICAgICAgICAgIGNhc2UgMTU6IHJlcGxhY2UgKz0gIngwZiI7IGJy
ZWFrOw0KLSAgICAgICAgICAgICAgICBjYXNlIDE2OiByZXBsYWNlICs9ICJ4MTAiOyBicmVhazsN
Ci0gICAgICAgICAgICAgICAgY2FzZSAxNzogcmVwbGFjZSArPSAieDExIjsgYnJlYWs7DQotICAg
ICAgICAgICAgICAgIGNhc2UgMTg6IHJlcGxhY2UgKz0gIngxMiI7IGJyZWFrOw0KLSAgICAgICAg
ICAgICAgICBjYXNlIDE5OiByZXBsYWNlICs9ICJ4MTMiOyBicmVhazsNCi0gICAgICAgICAgICAg
ICAgY2FzZSAyMDogcmVwbGFjZSArPSAieDE0IjsgYnJlYWs7DQotICAgICAgICAgICAgICAgIGNh
c2UgMjE6IHJlcGxhY2UgKz0gIngxNSI7IGJyZWFrOw0KLSAgICAgICAgICAgICAgICBjYXNlIDIy
OiByZXBsYWNlICs9ICJ4MTYiOyBicmVhazsNCi0gICAgICAgICAgICAgICAgY2FzZSAyMzogcmVw
bGFjZSArPSAieDE3IjsgYnJlYWs7DQotICAgICAgICAgICAgICAgIGNhc2UgMjQ6IHJlcGxhY2Ug
Kz0gIngxOCI7IGJyZWFrOw0KLSAgICAgICAgICAgICAgICBjYXNlIDI1OiByZXBsYWNlICs9ICJ4
MTkiOyBicmVhazsNCi0gICAgICAgICAgICAgICAgY2FzZSAyNjogcmVwbGFjZSArPSAieDFhIjsg
YnJlYWs7DQotICAgICAgICAgICAgICAgIGNhc2UgMjc6IHJlcGxhY2UgKz0gIngxYiI7IGJyZWFr
Ow0KLSAgICAgICAgICAgICAgICBjYXNlIDI4OiByZXBsYWNlICs9ICJ4MWMiOyBicmVhazsNCi0g
ICAgICAgICAgICAgICAgY2FzZSAyOTogcmVwbGFjZSArPSAieDFkIjsgYnJlYWs7DQotICAgICAg
ICAgICAgICAgIGNhc2UgMzA6IHJlcGxhY2UgKz0gIngxZSI7IGJyZWFrOw0KLSAgICAgICAgICAg
ICAgICBjYXNlIDMxOiByZXBsYWNlICs9ICJ4MWYiOyBicmVhazsNCi0gICAgICAgICAgICAgICAg
fQ0KLSAgICAgICAgICAgICAgICB2YWwgPSB2YWwucmVwbGFjZShSZWdFeHAoU3RyaW5nLmZyb21D
aGFyQ29kZShpKSwgImciKSwgcmVwbGFjZSk7DQotICAgICAgICAgICAgfQ0KLSAgICAgICAgICAg
IHJldHVybiAnIicgKyB2YWwucmVwbGFjZSgvIi9nLCAnXFwiJykgKyAnIic7DQotICAgICAgICBj
YXNlICJib29sZWFuIjoNCi0gICAgICAgIGNhc2UgInVuZGVmaW5lZCI6DQotICAgICAgICAgICAg
cmV0dXJuIFN0cmluZyh2YWwpOw0KLSAgICAgICAgY2FzZSAibnVtYmVyIjoNCi0gICAgICAgICAg
ICAvLyBJbiBKYXZhU2NyaXB0LCAtMCA9PT0gMCBhbmQgU3RyaW5nKC0wKSA9PSAiMCIsIHNvIHdl
IGhhdmUgdG8NCi0gICAgICAgICAgICAvLyBzcGVjaWFsLWNhc2UuDQotICAgICAgICAgICAgaWYg
KHZhbCA9PT0gLTAgJiYgMS92YWwgPT09IC1JbmZpbml0eSkNCi0gICAgICAgICAgICB7DQotICAg
ICAgICAgICAgICAgIHJldHVybiAiLTAiOw0KLSAgICAgICAgICAgIH0NCi0gICAgICAgICAgICBy
ZXR1cm4gU3RyaW5nKHZhbCk7DQotICAgICAgICBjYXNlICJvYmplY3QiOg0KLSAgICAgICAgICAg
IGlmICh2YWwgPT09IG51bGwpDQotICAgICAgICAgICAgew0KLSAgICAgICAgICAgICAgICByZXR1
cm4gIm51bGwiOw0KLSAgICAgICAgICAgIH0NCi0NCi0gICAgICAgICAgICAvLyBTcGVjaWFsLWNh
c2UgTm9kZSBvYmplY3RzLCBzaW5jZSB0aG9zZSBjb21lIHVwIGEgbG90IGluIG15IHRlc3RzLiAg
SQ0KLSAgICAgICAgICAgIC8vIGlnbm9yZSBuYW1lc3BhY2VzLiAgSSB1c2UgZHVjay10eXBpbmcg
aW5zdGVhZCBvZiBpbnN0YW5jZW9mLCBiZWNhdXNlDQotICAgICAgICAgICAgLy8gaW5zdGFuY2Vv
ZiBkb2Vzbid0IHdvcmsgaWYgdGhlIG5vZGUgaXMgZnJvbSBhbm90aGVyIHdpbmRvdyAobGlrZSBh
bg0KLSAgICAgICAgICAgIC8vIGlmcmFtZSdzIGNvbnRlbnRXaW5kb3cpOg0KLSAgICAgICAgICAg
IC8vIGh0dHA6Ly93d3cudzMub3JnL0J1Z3MvUHVibGljL3Nob3dfYnVnLmNnaT9pZD0xMjI5NQ0K
LSAgICAgICAgICAgIGlmICgibm9kZVR5cGUiIGluIHZhbA0KLSAgICAgICAgICAgICYmICJub2Rl
TmFtZSIgaW4gdmFsDQotICAgICAgICAgICAgJiYgIm5vZGVWYWx1ZSIgaW4gdmFsDQotICAgICAg
ICAgICAgJiYgImNoaWxkTm9kZXMiIGluIHZhbCkNCi0gICAgICAgICAgICB7DQotICAgICAgICAg
ICAgICAgIHN3aXRjaCAodmFsLm5vZGVUeXBlKQ0KLSAgICAgICAgICAgICAgICB7DQotICAgICAg
ICAgICAgICAgIGNhc2UgTm9kZS5FTEVNRU5UX05PREU6DQotICAgICAgICAgICAgICAgICAgICB2
YXIgcmV0ID0gIjwiICsgdmFsLnRhZ05hbWUudG9Mb3dlckNhc2UoKTsNCi0gICAgICAgICAgICAg
ICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdmFsLmF0dHJpYnV0ZXMubGVuZ3RoOyBpKyspDQot
ICAgICAgICAgICAgICAgICAgICB7DQotICAgICAgICAgICAgICAgICAgICAgICAgcmV0ICs9ICIg
IiArIHZhbC5hdHRyaWJ1dGVzW2ldLm5hbWUgKyAnPSInICsgdmFsLmF0dHJpYnV0ZXNbaV0udmFs
dWUgKyAnIic7DQotICAgICAgICAgICAgICAgICAgICB9DQotICAgICAgICAgICAgICAgICAgICBy
ZXQgKz0gIj4iICsgdmFsLmlubmVySFRNTCArICI8LyIgKyB2YWwudGFnTmFtZS50b0xvd2VyQ2Fz
ZSgpICsgIj4iOw0KLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuICJFbGVtZW50IG5vZGUgIiAr
IHRydW5jYXRlKHJldCwgNjApOw0KLSAgICAgICAgICAgICAgICBjYXNlIE5vZGUuVEVYVF9OT0RF
Og0KLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuICdUZXh0IG5vZGUgIicgKyB0cnVuY2F0ZSh2
YWwuZGF0YSwgNjApICsgJyInOw0KLSAgICAgICAgICAgICAgICBjYXNlIE5vZGUuUFJPQ0VTU0lO
R19JTlNUUlVDVElPTl9OT0RFOg0KLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuICJQcm9jZXNz
aW5nSW5zdHJ1Y3Rpb24gbm9kZSB3aXRoIHRhcmdldCAiICsgZm9ybWF0X3ZhbHVlKHRydW5jYXRl
KHZhbC50YXJnZXQsIDYwKSkgKyAiIGFuZCBkYXRhICIgKyBmb3JtYXRfdmFsdWUodHJ1bmNhdGUo
dmFsLmRhdGEsIDYwKSk7DQotICAgICAgICAgICAgICAgIGNhc2UgTm9kZS5DT01NRU5UX05PREU6
DQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gIkNvbW1lbnQgbm9kZSA8IS0tIiArIHRydW5j
YXRlKHZhbC5kYXRhLCA2MCkgKyAiLS0+IjsNCi0gICAgICAgICAgICAgICAgY2FzZSBOb2RlLkRP
Q1VNRU5UX05PREU6DQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gIkRvY3VtZW50IG5vZGUg
d2l0aCAiICsgdmFsLmNoaWxkTm9kZXMubGVuZ3RoICsgKHZhbC5jaGlsZE5vZGVzLmxlbmd0aCA9
PSAxID8gIiBjaGlsZCIgOiAiIGNoaWxkcmVuIik7DQotICAgICAgICAgICAgICAgIGNhc2UgTm9k
ZS5ET0NVTUVOVF9UWVBFX05PREU6DQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gIkRvY3Vt
ZW50VHlwZSBub2RlIjsNCi0gICAgICAgICAgICAgICAgY2FzZSBOb2RlLkRPQ1VNRU5UX0ZSQUdN
RU5UX05PREU6DQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gIkRvY3VtZW50RnJhZ21lbnQg
bm9kZSB3aXRoICIgKyB2YWwuY2hpbGROb2Rlcy5sZW5ndGggKyAodmFsLmNoaWxkTm9kZXMubGVu
Z3RoID09IDEgPyAiIGNoaWxkIiA6ICIgY2hpbGRyZW4iKTsNCi0gICAgICAgICAgICAgICAgZGVm
YXVsdDoNCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiAiTm9kZSBvYmplY3Qgb2YgdW5rbm93
biB0eXBlIjsNCi0gICAgICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgIH0NCi0NCi0gICAgICAg
ICAgICAvLyBGYWxsIHRocm91Z2ggdG8gZGVmYXVsdA0KLSAgICAgICAgZGVmYXVsdDoNCi0gICAg
ICAgICAgICByZXR1cm4gdHlwZW9mIHZhbCArICcgIicgKyB0cnVuY2F0ZShTdHJpbmcodmFsKSwg
NjApICsgJyInOw0KLSAgICAgICAgfQ0KLSAgICB9DQotICAgIGV4cG9zZShmb3JtYXRfdmFsdWUs
ICJmb3JtYXRfdmFsdWUiKTsNCi0NCi0gICAgLyoNCi0gICAgICogQXNzZXJ0aW9ucw0KLSAgICAg
Ki8NCi0NCi0gICAgZnVuY3Rpb24gYXNzZXJ0X3RydWUoYWN0dWFsLCBkZXNjcmlwdGlvbikNCi0g
ICAgew0KLSAgICAgICAgYXNzZXJ0KGFjdHVhbCA9PT0gdHJ1ZSwgImFzc2VydF90cnVlIiwgZGVz
Y3JpcHRpb24sDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZXhwZWN0ZWQgdHJ1
ZSBnb3QgJHthY3R1YWx9Iiwge2FjdHVhbDphY3R1YWx9KTsNCi0gICAgfTsNCi0gICAgZXhwb3Nl
KGFzc2VydF90cnVlLCAiYXNzZXJ0X3RydWUiKTsNCi0NCi0gICAgZnVuY3Rpb24gYXNzZXJ0X2Zh
bHNlKGFjdHVhbCwgZGVzY3JpcHRpb24pDQotICAgIHsNCi0gICAgICAgIGFzc2VydChhY3R1YWwg
PT09IGZhbHNlLCAiYXNzZXJ0X2ZhbHNlIiwgZGVzY3JpcHRpb24sDQotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgImV4cGVjdGVkIGZhbHNlIGdvdCAke2FjdHVhbH0iLCB7YWN0dWFs
OmFjdHVhbH0pOw0KLSAgICB9Ow0KLSAgICBleHBvc2UoYXNzZXJ0X2ZhbHNlLCAiYXNzZXJ0X2Zh
bHNlIik7DQotDQotICAgIGZ1bmN0aW9uIHNhbWVfdmFsdWUoeCwgeSkgew0KLSAgICAgICAgaWYg
KHkgIT09IHkpDQotICAgICAgICB7DQotICAgICAgICAgICAgLy9OYU4gY2FzZQ0KLSAgICAgICAg
ICAgIHJldHVybiB4ICE9PSB4Ow0KLSAgICAgICAgfQ0KLSAgICAgICAgZWxzZSBpZiAoeCA9PT0g
MCAmJiB5ID09PSAwKSB7DQotICAgICAgICAgICAgLy9EaXN0aW5ndWlzaCArMCBhbmQgLTANCi0g
ICAgICAgICAgICByZXR1cm4gMS94ID09PSAxL3k7DQotICAgICAgICB9DQotICAgICAgICBlbHNl
DQotICAgICAgICB7DQotICAgICAgICAgICAgLy90eXBpY2FsIGNhc2UNCi0gICAgICAgICAgICBy
ZXR1cm4geCA9PT0geTsNCi0gICAgICAgIH0NCi0gICAgfQ0KLQ0KLSAgICBmdW5jdGlvbiBhc3Nl
cnRfZXF1YWxzKGFjdHVhbCwgZXhwZWN0ZWQsIGRlc2NyaXB0aW9uKQ0KLSAgICB7DQotICAgICAg
ICAgLyoNCi0gICAgICAgICAgKiBUZXN0IGlmIHR3byBwcmltaXRpdmVzIGFyZSBlcXVhbCBvciB0
d28gb2JqZWN0cw0KLSAgICAgICAgICAqIGFyZSB0aGUgc2FtZSBvYmplY3QNCi0gICAgICAgICAg
Ki8NCi0gICAgICAgIGlmICh0eXBlb2YgYWN0dWFsICE9IHR5cGVvZiBleHBlY3RlZCkNCi0gICAg
ICAgIHsNCi0gICAgICAgICAgICBhc3NlcnQoZmFsc2UsICJhc3NlcnRfZXF1YWxzIiwgZGVzY3Jp
cHRpb24sDQotICAgICAgICAgICAgICAgICAgICAgICAgICAiZXhwZWN0ZWQgKCIgKyB0eXBlb2Yg
ZXhwZWN0ZWQgKyAiKSAke2V4cGVjdGVkfSBidXQgZ290ICgiICsgdHlwZW9mIGFjdHVhbCArICIp
ICR7YWN0dWFsfSIsDQotICAgICAgICAgICAgICAgICAgICAgICAgICB7ZXhwZWN0ZWQ6ZXhwZWN0
ZWQsIGFjdHVhbDphY3R1YWx9KTsNCi0gICAgICAgICAgICByZXR1cm47DQotICAgICAgICB9DQot
ICAgICAgICBhc3NlcnQoc2FtZV92YWx1ZShhY3R1YWwsIGV4cGVjdGVkKSwgImFzc2VydF9lcXVh
bHMiLCBkZXNjcmlwdGlvbiwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAiZXhwZWN0ZWQgJHtleHBlY3RlZH0gYnV0IGdvdCAke2FjdHVhbH0iLA0KLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtleHBlY3RlZDpleHBlY3Rl
ZCwgYWN0dWFsOmFjdHVhbH0pOw0KLSAgICB9Ow0KLSAgICBleHBvc2UoYXNzZXJ0X2VxdWFscywg
ImFzc2VydF9lcXVhbHMiKTsNCi0NCi0gICAgZnVuY3Rpb24gYXNzZXJ0X25vdF9lcXVhbHMoYWN0
dWFsLCBleHBlY3RlZCwgZGVzY3JpcHRpb24pDQotICAgIHsNCi0gICAgICAgICAvKg0KLSAgICAg
ICAgICAqIFRlc3QgaWYgdHdvIHByaW1pdGl2ZXMgYXJlIHVuZXF1YWwgb3IgdHdvIG9iamVjdHMN
Ci0gICAgICAgICAgKiBhcmUgZGlmZmVyZW50IG9iamVjdHMNCi0gICAgICAgICAgKi8NCi0gICAg
ICAgIGFzc2VydCghc2FtZV92YWx1ZShhY3R1YWwsIGV4cGVjdGVkKSwgImFzc2VydF9ub3RfZXF1
YWxzIiwgZGVzY3JpcHRpb24sDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICJnb3QgZGlzYWxsb3dlZCB2YWx1ZSAke2FjdHVhbH0iLA0KLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7YWN0dWFsOmFjdHVhbH0pOw0KLSAg
ICB9Ow0KLSAgICBleHBvc2UoYXNzZXJ0X25vdF9lcXVhbHMsICJhc3NlcnRfbm90X2VxdWFscyIp
Ow0KLQ0KLSAgICBmdW5jdGlvbiBhc3NlcnRfaW5fYXJyYXkoYWN0dWFsLCBleHBlY3RlZCwgZGVz
Y3JpcHRpb24pDQotICAgIHsNCi0gICAgICAgIGFzc2VydChleHBlY3RlZC5pbmRleE9mKGFjdHVh
bCkgIT0gLTEsICJhc3NlcnRfaW5fYXJyYXkiLCBkZXNjcmlwdGlvbiwNCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ2YWx1ZSAke2FjdHVhbH0gbm90IGlu
IGFycmF5ICR7ZXhwZWN0ZWR9IiwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHthY3R1YWw6YWN0dWFsLCBleHBlY3RlZDpleHBlY3RlZH0pOw0KLSAgICB9
DQotICAgIGV4cG9zZShhc3NlcnRfaW5fYXJyYXksICJhc3NlcnRfaW5fYXJyYXkiKTsNCi0NCi0g
ICAgZnVuY3Rpb24gYXNzZXJ0X29iamVjdF9lcXVhbHMoYWN0dWFsLCBleHBlY3RlZCwgZGVzY3Jp
cHRpb24pDQotICAgIHsNCi0gICAgICAgICAvL1RoaXMgbmVlZHMgdG8gYmUgaW1wcm92ZWQgYSBn
cmVhdCBkZWFsDQotICAgICAgICAgZnVuY3Rpb24gY2hlY2tfZXF1YWwoYWN0dWFsLCBleHBlY3Rl
ZCwgc3RhY2spDQotICAgICAgICAgew0KLSAgICAgICAgICAgICBzdGFjay5wdXNoKGFjdHVhbCk7
DQotDQotICAgICAgICAgICAgIHZhciBwOw0KLSAgICAgICAgICAgICBmb3IgKHAgaW4gYWN0dWFs
KQ0KLSAgICAgICAgICAgICB7DQotICAgICAgICAgICAgICAgICBhc3NlcnQoZXhwZWN0ZWQuaGFz
T3duUHJvcGVydHkocCksICJhc3NlcnRfb2JqZWN0X2VxdWFscyIsIGRlc2NyaXB0aW9uLA0KLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidW5leHBl
Y3RlZCBwcm9wZXJ0eSAke3B9Iiwge3A6cH0pOw0KLQ0KLSAgICAgICAgICAgICAgICAgaWYgKHR5
cGVvZiBhY3R1YWxbcF0gPT09ICJvYmplY3QiICYmIGFjdHVhbFtwXSAhPT0gbnVsbCkNCi0gICAg
ICAgICAgICAgICAgIHsNCi0gICAgICAgICAgICAgICAgICAgICBpZiAoc3RhY2suaW5kZXhPZihh
Y3R1YWxbcF0pID09PSAtMSkNCi0gICAgICAgICAgICAgICAgICAgICB7DQotICAgICAgICAgICAg
ICAgICAgICAgICAgIGNoZWNrX2VxdWFsKGFjdHVhbFtwXSwgZXhwZWN0ZWRbcF0sIHN0YWNrKTsN
Ci0gICAgICAgICAgICAgICAgICAgICB9DQotICAgICAgICAgICAgICAgICB9DQotICAgICAgICAg
ICAgICAgICBlbHNlDQotICAgICAgICAgICAgICAgICB7DQotICAgICAgICAgICAgICAgICAgICAg
YXNzZXJ0KHNhbWVfdmFsdWUoYWN0dWFsW3BdLCBleHBlY3RlZFtwXSksICJhc3NlcnRfb2JqZWN0
X2VxdWFscyIsIGRlc2NyaXB0aW9uLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAicHJvcGVydHkgJHtwfSBleHBlY3RlZCAke2V4cGVjdGVk
fSBnb3QgJHthY3R1YWx9IiwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAge3A6cCwgZXhwZWN0ZWQ6ZXhwZWN0ZWQsIGFjdHVhbDphY3R1YWx9
KTsNCi0gICAgICAgICAgICAgICAgIH0NCi0gICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgICBm
b3IgKHAgaW4gZXhwZWN0ZWQpDQotICAgICAgICAgICAgIHsNCi0gICAgICAgICAgICAgICAgIGFz
c2VydChhY3R1YWwuaGFzT3duUHJvcGVydHkocCksDQotICAgICAgICAgICAgICAgICAgICAgICAg
ImFzc2VydF9vYmplY3RfZXF1YWxzIiwgZGVzY3JpcHRpb24sDQotICAgICAgICAgICAgICAgICAg
ICAgICAgImV4cGVjdGVkIHByb3BlcnR5ICR7cH0gbWlzc2luZyIsIHtwOnB9KTsNCi0gICAgICAg
ICAgICAgfQ0KLSAgICAgICAgICAgICBzdGFjay5wb3AoKTsNCi0gICAgICAgICB9DQotICAgICAg
ICAgY2hlY2tfZXF1YWwoYWN0dWFsLCBleHBlY3RlZCwgW10pOw0KLSAgICB9Ow0KLSAgICBleHBv
c2UoYXNzZXJ0X29iamVjdF9lcXVhbHMsICJhc3NlcnRfb2JqZWN0X2VxdWFscyIpOw0KLQ0KLSAg
ICBmdW5jdGlvbiBhc3NlcnRfYXJyYXlfZXF1YWxzKGFjdHVhbCwgZXhwZWN0ZWQsIGRlc2NyaXB0
aW9uKQ0KLSAgICB7DQotICAgICAgICBhc3NlcnQoYWN0dWFsLmxlbmd0aCA9PT0gZXhwZWN0ZWQu
bGVuZ3RoLA0KLSAgICAgICAgICAgICAgICJhc3NlcnRfYXJyYXlfZXF1YWxzIiwgZGVzY3JpcHRp
b24sDQotICAgICAgICAgICAgICAgImxlbmd0aHMgZGlmZmVyLCBleHBlY3RlZCAke2V4cGVjdGVk
fSBnb3QgJHthY3R1YWx9IiwNCi0gICAgICAgICAgICAgICB7ZXhwZWN0ZWQ6ZXhwZWN0ZWQubGVu
Z3RoLCBhY3R1YWw6YWN0dWFsLmxlbmd0aH0pOw0KLQ0KLSAgICAgICAgZm9yICh2YXIgaT0wOyBp
IDwgYWN0dWFsLmxlbmd0aDsgaSsrKQ0KLSAgICAgICAgew0KLSAgICAgICAgICAgIGFzc2VydChh
Y3R1YWwuaGFzT3duUHJvcGVydHkoaSkgPT09IGV4cGVjdGVkLmhhc093blByb3BlcnR5KGkpLA0K
LSAgICAgICAgICAgICAgICAgICAiYXNzZXJ0X2FycmF5X2VxdWFscyIsIGRlc2NyaXB0aW9uLA0K
LSAgICAgICAgICAgICAgICAgICAicHJvcGVydHkgJHtpfSwgcHJvcGVydHkgZXhwZWN0ZWQgdG8g
YmUgJGV4cGVjdGVkIGJ1dCB3YXMgJGFjdHVhbCIsDQotICAgICAgICAgICAgICAgICAgIHtpOmks
IGV4cGVjdGVkOmV4cGVjdGVkLmhhc093blByb3BlcnR5KGkpID8gInByZXNlbnQiIDogIm1pc3Np
bmciLA0KLSAgICAgICAgICAgICAgICAgICBhY3R1YWw6YWN0dWFsLmhhc093blByb3BlcnR5KGkp
ID8gInByZXNlbnQiIDogIm1pc3NpbmcifSk7DQotICAgICAgICAgICAgYXNzZXJ0KHNhbWVfdmFs
dWUoZXhwZWN0ZWRbaV0sIGFjdHVhbFtpXSksDQotICAgICAgICAgICAgICAgICAgICJhc3NlcnRf
YXJyYXlfZXF1YWxzIiwgZGVzY3JpcHRpb24sDQotICAgICAgICAgICAgICAgICAgICJwcm9wZXJ0
eSAke2l9LCBleHBlY3RlZCAke2V4cGVjdGVkfSBidXQgZ290ICR7YWN0dWFsfSIsDQotICAgICAg
ICAgICAgICAgICAgIHtpOmksIGV4cGVjdGVkOmV4cGVjdGVkW2ldLCBhY3R1YWw6YWN0dWFsW2ld
fSk7DQotICAgICAgICB9DQotICAgIH0NCi0gICAgZXhwb3NlKGFzc2VydF9hcnJheV9lcXVhbHMs
ICJhc3NlcnRfYXJyYXlfZXF1YWxzIik7DQotDQotICAgIGZ1bmN0aW9uIGFzc2VydF9hcHByb3hf
ZXF1YWxzKGFjdHVhbCwgZXhwZWN0ZWQsIGVwc2lsb24sIGRlc2NyaXB0aW9uKQ0KLSAgICB7DQot
ICAgICAgICAvKg0KLSAgICAgICAgICogVGVzdCBpZiB0d28gcHJpbWl0aXZlIG51bWJlcnMgYXJl
IGVxdWFsIHdpdGhpbmcgKy8tIGVwc2lsb24NCi0gICAgICAgICAqLw0KLSAgICAgICAgYXNzZXJ0
KHR5cGVvZiBhY3R1YWwgPT09ICJudW1iZXIiLA0KLSAgICAgICAgICAgICAgICJhc3NlcnRfYXBw
cm94X2VxdWFscyIsIGRlc2NyaXB0aW9uLA0KLSAgICAgICAgICAgICAgICJleHBlY3RlZCBhIG51
bWJlciBidXQgZ290IGEgJHt0eXBlX2FjdHVhbH0iLA0KLSAgICAgICAgICAgICAgIHt0eXBlX2Fj
dHVhbDp0eXBlb2YgYWN0dWFsfSk7DQotDQotICAgICAgICBhc3NlcnQoTWF0aC5hYnMoYWN0dWFs
IC0gZXhwZWN0ZWQpIDw9IGVwc2lsb24sDQotICAgICAgICAgICAgICAgImFzc2VydF9hcHByb3hf
ZXF1YWxzIiwgZGVzY3JpcHRpb24sDQotICAgICAgICAgICAgICAgImV4cGVjdGVkICR7ZXhwZWN0
ZWR9ICsvLSAke2Vwc2lsb259IGJ1dCBnb3QgJHthY3R1YWx9IiwNCi0gICAgICAgICAgICAgICB7
ZXhwZWN0ZWQ6ZXhwZWN0ZWQsIGFjdHVhbDphY3R1YWwsIGVwc2lsb246ZXBzaWxvbn0pOw0KLSAg
ICB9Ow0KLSAgICBleHBvc2UoYXNzZXJ0X2FwcHJveF9lcXVhbHMsICJhc3NlcnRfYXBwcm94X2Vx
dWFscyIpOw0KLQ0KLSAgICBmdW5jdGlvbiBhc3NlcnRfcmVnZXhwX21hdGNoKGFjdHVhbCwgZXhw
ZWN0ZWQsIGRlc2NyaXB0aW9uKSB7DQotICAgICAgICAvKg0KLSAgICAgICAgICogVGVzdCBpZiBh
IHN0cmluZyAoYWN0dWFsKSBtYXRjaGVzIGEgcmVnZXhwIChleHBlY3RlZCkNCi0gICAgICAgICAq
Lw0KLSAgICAgICAgYXNzZXJ0KGV4cGVjdGVkLnRlc3QoYWN0dWFsKSwNCi0gICAgICAgICAgICAg
ICAiYXNzZXJ0X3JlZ2V4cF9tYXRjaCIsIGRlc2NyaXB0aW9uLA0KLSAgICAgICAgICAgICAgICJl
eHBlY3RlZCAke2V4cGVjdGVkfSBidXQgZ290ICR7YWN0dWFsfSIsDQotICAgICAgICAgICAgICAg
e2V4cGVjdGVkOmV4cGVjdGVkLCBhY3R1YWw6YWN0dWFsfSk7DQotICAgIH0NCi0gICAgZXhwb3Nl
KGFzc2VydF9yZWdleHBfbWF0Y2gsICJhc3NlcnRfcmVnZXhwX21hdGNoIik7DQotDQotICAgIGZ1
bmN0aW9uIGFzc2VydF9jbGFzc19zdHJpbmcob2JqZWN0LCBjbGFzc19zdHJpbmcsIGRlc2NyaXB0
aW9uKSB7DQotICAgICAgICBhc3NlcnRfZXF1YWxzKHt9LnRvU3RyaW5nLmNhbGwob2JqZWN0KSwg
IltvYmplY3QgIiArIGNsYXNzX3N0cmluZyArICJdIiwNCi0gICAgICAgICAgICAgICAgICAgICAg
ZGVzY3JpcHRpb24pOw0KLSAgICB9DQotICAgIGV4cG9zZShhc3NlcnRfY2xhc3Nfc3RyaW5nLCAi
YXNzZXJ0X2NsYXNzX3N0cmluZyIpOw0KLQ0KLQ0KLSAgICBmdW5jdGlvbiBfYXNzZXJ0X293bl9w
cm9wZXJ0eShuYW1lKSB7DQotICAgICAgICByZXR1cm4gZnVuY3Rpb24ob2JqZWN0LCBwcm9wZXJ0
eV9uYW1lLCBkZXNjcmlwdGlvbikNCi0gICAgICAgIHsNCi0gICAgICAgICAgICBhc3NlcnQob2Jq
ZWN0Lmhhc093blByb3BlcnR5KHByb3BlcnR5X25hbWUpLA0KLSAgICAgICAgICAgICAgICAgICBu
YW1lLCBkZXNjcmlwdGlvbiwNCi0gICAgICAgICAgICAgICAgICAgImV4cGVjdGVkIHByb3BlcnR5
ICR7cH0gbWlzc2luZyIsIHtwOnByb3BlcnR5X25hbWV9KTsNCi0gICAgICAgIH07DQotICAgIH0N
Ci0gICAgZXhwb3NlKF9hc3NlcnRfb3duX3Byb3BlcnR5KCJhc3NlcnRfZXhpc3RzIiksICJhc3Nl
cnRfZXhpc3RzIik7DQotICAgIGV4cG9zZShfYXNzZXJ0X293bl9wcm9wZXJ0eSgiYXNzZXJ0X293
bl9wcm9wZXJ0eSIpLCAiYXNzZXJ0X293bl9wcm9wZXJ0eSIpOw0KLQ0KLSAgICBmdW5jdGlvbiBh
c3NlcnRfbm90X2V4aXN0cyhvYmplY3QsIHByb3BlcnR5X25hbWUsIGRlc2NyaXB0aW9uKQ0KLSAg
ICB7DQotICAgICAgICBhc3NlcnQoIW9iamVjdC5oYXNPd25Qcm9wZXJ0eShwcm9wZXJ0eV9uYW1l
KSwNCi0gICAgICAgICAgICAgICAiYXNzZXJ0X25vdF9leGlzdHMiLCBkZXNjcmlwdGlvbiwNCi0g
ICAgICAgICAgICAgICAidW5leHBlY3RlZCBwcm9wZXJ0eSAke3B9IGZvdW5kIiwge3A6cHJvcGVy
dHlfbmFtZX0pOw0KLSAgICB9Ow0KLSAgICBleHBvc2UoYXNzZXJ0X25vdF9leGlzdHMsICJhc3Nl
cnRfbm90X2V4aXN0cyIpOw0KLQ0KLSAgICBmdW5jdGlvbiBfYXNzZXJ0X2luaGVyaXRzKG5hbWUp
IHsNCi0gICAgICAgIHJldHVybiBmdW5jdGlvbiAob2JqZWN0LCBwcm9wZXJ0eV9uYW1lLCBkZXNj
cmlwdGlvbikNCi0gICAgICAgIHsNCi0gICAgICAgICAgICBhc3NlcnQodHlwZW9mIG9iamVjdCA9
PT0gIm9iamVjdCIsDQotICAgICAgICAgICAgICAgICAgIG5hbWUsIGRlc2NyaXB0aW9uLA0KLSAg
ICAgICAgICAgICAgICAgICAicHJvdmlkZWQgdmFsdWUgaXMgbm90IGFuIG9iamVjdCIpOw0KLQ0K
LSAgICAgICAgICAgIGFzc2VydCgiaGFzT3duUHJvcGVydHkiIGluIG9iamVjdCwNCi0gICAgICAg
ICAgICAgICAgICAgbmFtZSwgZGVzY3JpcHRpb24sDQotICAgICAgICAgICAgICAgICAgICJwcm92
aWRlZCB2YWx1ZSBpcyBhbiBvYmplY3QgYnV0IGhhcyBubyBoYXNPd25Qcm9wZXJ0eSBtZXRob2Qi
KTsNCi0NCi0gICAgICAgICAgICBhc3NlcnQoIW9iamVjdC5oYXNPd25Qcm9wZXJ0eShwcm9wZXJ0
eV9uYW1lKSwNCi0gICAgICAgICAgICAgICAgICAgbmFtZSwgZGVzY3JpcHRpb24sDQotICAgICAg
ICAgICAgICAgICAgICJwcm9wZXJ0eSAke3B9IGZvdW5kIG9uIG9iamVjdCBleHBlY3RlZCBpbiBw
cm90b3R5cGUgY2hhaW4iLA0KLSAgICAgICAgICAgICAgICAgICB7cDpwcm9wZXJ0eV9uYW1lfSk7
DQotDQotICAgICAgICAgICAgYXNzZXJ0KHByb3BlcnR5X25hbWUgaW4gb2JqZWN0LA0KLSAgICAg
ICAgICAgICAgICAgICBuYW1lLCBkZXNjcmlwdGlvbiwNCi0gICAgICAgICAgICAgICAgICAgInBy
b3BlcnR5ICR7cH0gbm90IGZvdW5kIGluIHByb3RvdHlwZSBjaGFpbiIsDQotICAgICAgICAgICAg
ICAgICAgIHtwOnByb3BlcnR5X25hbWV9KTsNCi0gICAgICAgIH07DQotICAgIH0NCi0gICAgZXhw
b3NlKF9hc3NlcnRfaW5oZXJpdHMoImFzc2VydF9pbmhlcml0cyIpLCAiYXNzZXJ0X2luaGVyaXRz
Iik7DQotICAgIGV4cG9zZShfYXNzZXJ0X2luaGVyaXRzKCJhc3NlcnRfaWRsX2F0dHJpYnV0ZSIp
LCAiYXNzZXJ0X2lkbF9hdHRyaWJ1dGUiKTsNCi0NCi0gICAgZnVuY3Rpb24gYXNzZXJ0X3JlYWRv
bmx5KG9iamVjdCwgcHJvcGVydHlfbmFtZSwgZGVzY3JpcHRpb24pDQotICAgIHsNCi0gICAgICAg
ICB2YXIgaW5pdGlhbF92YWx1ZSA9IG9iamVjdFtwcm9wZXJ0eV9uYW1lXTsNCi0gICAgICAgICB0
cnkgew0KLSAgICAgICAgICAgICAvL05vdGUgdGhhdCB0aGlzIGNhbiBoYXZlIHNpZGUgZWZmZWN0
cyBpbiB0aGUgY2FzZSB3aGVyZQ0KLSAgICAgICAgICAgICAvL3RoZSBwcm9wZXJ0eSBoYXMgUHV0
Rm9yd2FyZHMNCi0gICAgICAgICAgICAgb2JqZWN0W3Byb3BlcnR5X25hbWVdID0gaW5pdGlhbF92
YWx1ZSArICJhIjsgLy9YWFggdXNlIHNvbWUgb3RoZXIgdmFsdWUgaGVyZT8NCi0gICAgICAgICAg
ICAgYXNzZXJ0KHNhbWVfdmFsdWUob2JqZWN0W3Byb3BlcnR5X25hbWVdLCBpbml0aWFsX3ZhbHVl
KSwNCi0gICAgICAgICAgICAgICAgICAgICJhc3NlcnRfcmVhZG9ubHkiLCBkZXNjcmlwdGlvbiwN
Ci0gICAgICAgICAgICAgICAgICAgICJjaGFuZ2luZyBwcm9wZXJ0eSAke3B9IHN1Y2NlZWRlZCIs
DQotICAgICAgICAgICAgICAgICAgICB7cDpwcm9wZXJ0eV9uYW1lfSk7DQotICAgICAgICAgfQ0K
LSAgICAgICAgIGZpbmFsbHkNCi0gICAgICAgICB7DQotICAgICAgICAgICAgIG9iamVjdFtwcm9w
ZXJ0eV9uYW1lXSA9IGluaXRpYWxfdmFsdWU7DQotICAgICAgICAgfQ0KLSAgICB9Ow0KLSAgICBl
eHBvc2UoYXNzZXJ0X3JlYWRvbmx5LCAiYXNzZXJ0X3JlYWRvbmx5Iik7DQotDQotICAgIGZ1bmN0
aW9uIGFzc2VydF90aHJvd3MoY29kZSwgZnVuYywgZGVzY3JpcHRpb24pDQotICAgIHsNCi0gICAg
ICAgIHRyeQ0KLSAgICAgICAgew0KLSAgICAgICAgICAgIGZ1bmMuY2FsbCh0aGlzKTsNCi0gICAg
ICAgICAgICBhc3NlcnQoZmFsc2UsICJhc3NlcnRfdGhyb3dzIiwgZGVzY3JpcHRpb24sDQotICAg
ICAgICAgICAgICAgICAgICIke2Z1bmN9IGRpZCBub3QgdGhyb3ciLCB7ZnVuYzpmdW5jfSk7DQot
ICAgICAgICB9DQotICAgICAgICBjYXRjaChlKQ0KLSAgICAgICAgew0KLSAgICAgICAgICAgIGlm
IChlIGluc3RhbmNlb2YgQXNzZXJ0aW9uRXJyb3IpIHsNCi0gICAgICAgICAgICAgICAgdGhyb3co
ZSk7DQotICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgIGlmIChjb2RlID09PSBudWxsKQ0KLSAg
ICAgICAgICAgIHsNCi0gICAgICAgICAgICAgICAgcmV0dXJuOw0KLSAgICAgICAgICAgIH0NCi0g
ICAgICAgICAgICBpZiAodHlwZW9mIGNvZGUgPT09ICJvYmplY3QiKQ0KLSAgICAgICAgICAgIHsN
Ci0gICAgICAgICAgICAgICAgYXNzZXJ0KHR5cGVvZiBlID09ICJvYmplY3QiICYmICJuYW1lIiBp
biBlICYmIGUubmFtZSA9PSBjb2RlLm5hbWUsDQotICAgICAgICAgICAgICAgICAgICAgICAiYXNz
ZXJ0X3Rocm93cyIsIGRlc2NyaXB0aW9uLA0KLSAgICAgICAgICAgICAgICAgICAgICAgIiR7ZnVu
Y30gdGhyZXcgJHthY3R1YWx9ICgke2FjdHVhbF9uYW1lfSkgZXhwZWN0ZWQgJHtleHBlY3RlZH0g
KCR7ZXhwZWN0ZWRfbmFtZX0pIiwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB7ZnVuYzpmdW5jLCBhY3R1YWw6ZSwgYWN0dWFsX25hbWU6ZS5uYW1lLA0KLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBleHBlY3RlZDpjb2RlLA0KLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBleHBlY3RlZF9uYW1lOmNvZGUubmFtZX0pOw0KLSAgICAg
ICAgICAgICAgICByZXR1cm47DQotICAgICAgICAgICAgfQ0KLQ0KLSAgICAgICAgICAgIHZhciBj
b2RlX25hbWVfbWFwID0gew0KLSAgICAgICAgICAgICAgICBJTkRFWF9TSVpFX0VSUjogJ0luZGV4
U2l6ZUVycm9yJywNCi0gICAgICAgICAgICAgICAgSElFUkFSQ0hZX1JFUVVFU1RfRVJSOiAnSGll
cmFyY2h5UmVxdWVzdEVycm9yJywNCi0gICAgICAgICAgICAgICAgV1JPTkdfRE9DVU1FTlRfRVJS
OiAnV3JvbmdEb2N1bWVudEVycm9yJywNCi0gICAgICAgICAgICAgICAgSU5WQUxJRF9DSEFSQUNU
RVJfRVJSOiAnSW52YWxpZENoYXJhY3RlckVycm9yJywNCi0gICAgICAgICAgICAgICAgTk9fTU9E
SUZJQ0FUSU9OX0FMTE9XRURfRVJSOiAnTm9Nb2RpZmljYXRpb25BbGxvd2VkRXJyb3InLA0KLSAg
ICAgICAgICAgICAgICBOT1RfRk9VTkRfRVJSOiAnTm90Rm91bmRFcnJvcicsDQotICAgICAgICAg
ICAgICAgIE5PVF9TVVBQT1JURURfRVJSOiAnTm90U3VwcG9ydGVkRXJyb3InLA0KLSAgICAgICAg
ICAgICAgICBJTlZBTElEX1NUQVRFX0VSUjogJ0ludmFsaWRTdGF0ZUVycm9yJywNCi0gICAgICAg
ICAgICAgICAgU1lOVEFYX0VSUjogJ1N5bnRheEVycm9yJywNCi0gICAgICAgICAgICAgICAgSU5W
QUxJRF9NT0RJRklDQVRJT05fRVJSOiAnSW52YWxpZE1vZGlmaWNhdGlvbkVycm9yJywNCi0gICAg
ICAgICAgICAgICAgTkFNRVNQQUNFX0VSUjogJ05hbWVzcGFjZUVycm9yJywNCi0gICAgICAgICAg
ICAgICAgSU5WQUxJRF9BQ0NFU1NfRVJSOiAnSW52YWxpZEFjY2Vzc0Vycm9yJywNCi0gICAgICAg
ICAgICAgICAgVFlQRV9NSVNNQVRDSF9FUlI6ICdUeXBlTWlzbWF0Y2hFcnJvcicsDQotICAgICAg
ICAgICAgICAgIFNFQ1VSSVRZX0VSUjogJ1NlY3VyaXR5RXJyb3InLA0KLSAgICAgICAgICAgICAg
ICBORVRXT1JLX0VSUjogJ05ldHdvcmtFcnJvcicsDQotICAgICAgICAgICAgICAgIEFCT1JUX0VS
UjogJ0Fib3J0RXJyb3InLA0KLSAgICAgICAgICAgICAgICBVUkxfTUlTTUFUQ0hfRVJSOiAnVVJM
TWlzbWF0Y2hFcnJvcicsDQotICAgICAgICAgICAgICAgIFFVT1RBX0VYQ0VFREVEX0VSUjogJ1F1
b3RhRXhjZWVkZWRFcnJvcicsDQotICAgICAgICAgICAgICAgIFRJTUVPVVRfRVJSOiAnVGltZW91
dEVycm9yJywNCi0gICAgICAgICAgICAgICAgSU5WQUxJRF9OT0RFX1RZUEVfRVJSOiAnSW52YWxp
ZE5vZGVUeXBlRXJyb3InLA0KLSAgICAgICAgICAgICAgICBEQVRBX0NMT05FX0VSUjogJ0RhdGFD
bG9uZUVycm9yJw0KLSAgICAgICAgICAgIH07DQotDQotICAgICAgICAgICAgdmFyIG5hbWUgPSBj
b2RlIGluIGNvZGVfbmFtZV9tYXAgPyBjb2RlX25hbWVfbWFwW2NvZGVdIDogY29kZTsNCi0NCi0g
ICAgICAgICAgICB2YXIgbmFtZV9jb2RlX21hcCA9IHsNCi0gICAgICAgICAgICAgICAgSW5kZXhT
aXplRXJyb3I6IDEsDQotICAgICAgICAgICAgICAgIEhpZXJhcmNoeVJlcXVlc3RFcnJvcjogMywN
Ci0gICAgICAgICAgICAgICAgV3JvbmdEb2N1bWVudEVycm9yOiA0LA0KLSAgICAgICAgICAgICAg
ICBJbnZhbGlkQ2hhcmFjdGVyRXJyb3I6IDUsDQotICAgICAgICAgICAgICAgIE5vTW9kaWZpY2F0
aW9uQWxsb3dlZEVycm9yOiA3LA0KLSAgICAgICAgICAgICAgICBOb3RGb3VuZEVycm9yOiA4LA0K
LSAgICAgICAgICAgICAgICBOb3RTdXBwb3J0ZWRFcnJvcjogOSwNCi0gICAgICAgICAgICAgICAg
SW52YWxpZFN0YXRlRXJyb3I6IDExLA0KLSAgICAgICAgICAgICAgICBTeW50YXhFcnJvcjogMTIs
DQotICAgICAgICAgICAgICAgIEludmFsaWRNb2RpZmljYXRpb25FcnJvcjogMTMsDQotICAgICAg
ICAgICAgICAgIE5hbWVzcGFjZUVycm9yOiAxNCwNCi0gICAgICAgICAgICAgICAgSW52YWxpZEFj
Y2Vzc0Vycm9yOiAxNSwNCi0gICAgICAgICAgICAgICAgVHlwZU1pc21hdGNoRXJyb3I6IDE3LA0K
LSAgICAgICAgICAgICAgICBTZWN1cml0eUVycm9yOiAxOCwNCi0gICAgICAgICAgICAgICAgTmV0
d29ya0Vycm9yOiAxOSwNCi0gICAgICAgICAgICAgICAgQWJvcnRFcnJvcjogMjAsDQotICAgICAg
ICAgICAgICAgIFVSTE1pc21hdGNoRXJyb3I6IDIxLA0KLSAgICAgICAgICAgICAgICBRdW90YUV4
Y2VlZGVkRXJyb3I6IDIyLA0KLSAgICAgICAgICAgICAgICBUaW1lb3V0RXJyb3I6IDIzLA0KLSAg
ICAgICAgICAgICAgICBJbnZhbGlkTm9kZVR5cGVFcnJvcjogMjQsDQotICAgICAgICAgICAgICAg
IERhdGFDbG9uZUVycm9yOiAyNSwNCi0NCi0gICAgICAgICAgICAgICAgVW5rbm93bkVycm9yOiAw
LA0KLSAgICAgICAgICAgICAgICBDb25zdHJhaW50RXJyb3I6IDAsDQotICAgICAgICAgICAgICAg
IERhdGFFcnJvcjogMCwNCi0gICAgICAgICAgICAgICAgVHJhbnNhY3Rpb25JbmFjdGl2ZUVycm9y
OiAwLA0KLSAgICAgICAgICAgICAgICBSZWFkT25seUVycm9yOiAwLA0KLSAgICAgICAgICAgICAg
ICBWZXJzaW9uRXJyb3I6IDANCi0gICAgICAgICAgICB9Ow0KLQ0KLSAgICAgICAgICAgIGlmICgh
KG5hbWUgaW4gbmFtZV9jb2RlX21hcCkpDQotICAgICAgICAgICAgew0KLSAgICAgICAgICAgICAg
ICB0aHJvdyBuZXcgQXNzZXJ0aW9uRXJyb3IoJ1Rlc3QgYnVnOiB1bnJlY29nbml6ZWQgRE9NRXhj
ZXB0aW9uIGNvZGUgIicgKyBjb2RlICsgJyIgcGFzc2VkIHRvIGFzc2VydF90aHJvd3MoKScpOw0K
LSAgICAgICAgICAgIH0NCi0NCi0gICAgICAgICAgICB2YXIgcmVxdWlyZWRfcHJvcHMgPSB7IGNv
ZGU6IG5hbWVfY29kZV9tYXBbbmFtZV0gfTsNCi0NCi0gICAgICAgICAgICBpZiAocmVxdWlyZWRf
cHJvcHMuY29kZSA9PT0gMA0KLSAgICAgICAgICAgIHx8ICgibmFtZSIgaW4gZSAmJiBlLm5hbWUg
IT09IGUubmFtZS50b1VwcGVyQ2FzZSgpICYmIGUubmFtZSAhPT0gIkRPTUV4Y2VwdGlvbiIpKQ0K
LSAgICAgICAgICAgIHsNCi0gICAgICAgICAgICAgICAgLy8gTmV3IHN0eWxlIGV4Y2VwdGlvbjog
YWxzbyB0ZXN0IHRoZSBuYW1lIHByb3BlcnR5Lg0KLSAgICAgICAgICAgICAgICByZXF1aXJlZF9w
cm9wcy5uYW1lID0gbmFtZTsNCi0gICAgICAgICAgICB9DQotDQotICAgICAgICAgICAgLy9XZSdk
IGxpa2UgdG8gdGVzdCB0aGF0IGUgaW5zdGFuY2VvZiB0aGUgYXBwcm9wcmlhdGUgaW50ZXJmYWNl
LA0KLSAgICAgICAgICAgIC8vYnV0IHdlIGNhbid0LCBiZWNhdXNlIHdlIGRvbid0IGtub3cgd2hh
dCB3aW5kb3cgaXQgd2FzIGNyZWF0ZWQNCi0gICAgICAgICAgICAvL2luLiAgSXQgbWlnaHQgYmUg
YW4gaW5zdGFuY2VvZiB0aGUgYXBwcm9wcmlhdGUgaW50ZXJmYWNlIG9uIHNvbWUNCi0gICAgICAg
ICAgICAvL3Vua25vd24gb3RoZXIgd2luZG93LiAgVE9ETzogV29yayBhcm91bmQgdGhpcyBzb21l
aG93Pw0KLQ0KLSAgICAgICAgICAgIGFzc2VydCh0eXBlb2YgZSA9PSAib2JqZWN0IiwNCi0gICAg
ICAgICAgICAgICAgICAgImFzc2VydF90aHJvd3MiLCBkZXNjcmlwdGlvbiwNCi0gICAgICAgICAg
ICAgICAgICAgIiR7ZnVuY30gdGhyZXcgJHtlfSB3aXRoIHR5cGUgJHt0eXBlfSwgbm90IGFuIG9i
amVjdCIsDQotICAgICAgICAgICAgICAgICAgIHtmdW5jOmZ1bmMsIGU6ZSwgdHlwZTp0eXBlb2Yg
ZX0pOw0KLQ0KLSAgICAgICAgICAgIGZvciAodmFyIHByb3AgaW4gcmVxdWlyZWRfcHJvcHMpDQot
ICAgICAgICAgICAgew0KLSAgICAgICAgICAgICAgICBhc3NlcnQodHlwZW9mIGUgPT0gIm9iamVj
dCIgJiYgcHJvcCBpbiBlICYmIGVbcHJvcF0gPT0gcmVxdWlyZWRfcHJvcHNbcHJvcF0sDQotICAg
ICAgICAgICAgICAgICAgICAgICAiYXNzZXJ0X3Rocm93cyIsIGRlc2NyaXB0aW9uLA0KLSAgICAg
ICAgICAgICAgICAgICAgICAgIiR7ZnVuY30gdGhyZXcgJHtlfSB0aGF0IGlzIG5vdCBhIERPTUV4
Y2VwdGlvbiAiICsgY29kZSArICI6IHByb3BlcnR5ICR7cHJvcH0gaXMgZXF1YWwgdG8gJHthY3R1
YWx9LCBleHBlY3RlZCAke2V4cGVjdGVkfSIsDQotICAgICAgICAgICAgICAgICAgICAgICB7ZnVu
YzpmdW5jLCBlOmUsIHByb3A6cHJvcCwgYWN0dWFsOmVbcHJvcF0sIGV4cGVjdGVkOnJlcXVpcmVk
X3Byb3BzW3Byb3BdfSk7DQotICAgICAgICAgICAgfQ0KLSAgICAgICAgfQ0KLSAgICB9DQotICAg
IGV4cG9zZShhc3NlcnRfdGhyb3dzLCAiYXNzZXJ0X3Rocm93cyIpOw0KLQ0KLSAgICBmdW5jdGlv
biBhc3NlcnRfdW5yZWFjaGVkKGRlc2NyaXB0aW9uKSB7DQotICAgICAgICAgYXNzZXJ0KGZhbHNl
LCAiYXNzZXJ0X3VucmVhY2hlZCIsIGRlc2NyaXB0aW9uLA0KLSAgICAgICAgICAgICAgICAiUmVh
Y2hlZCB1bnJlYWNoYWJsZSBjb2RlIik7DQotICAgIH0NCi0gICAgZXhwb3NlKGFzc2VydF91bnJl
YWNoZWQsICJhc3NlcnRfdW5yZWFjaGVkIik7DQotDQotICAgIGZ1bmN0aW9uIGFzc2VydF9hbnko
YXNzZXJ0X2Z1bmMsIGFjdHVhbCwgZXhwZWN0ZWRfYXJyYXkpIA0KLSAgICB7DQotICAgICAgICB2
YXIgYXJncyA9IFtdLnNsaWNlLmNhbGwoYXJndW1lbnRzLCAzKQ0KLSAgICAgICAgdmFyIGVycm9y
cyA9IFtdDQotICAgICAgICB2YXIgcGFzc2VkID0gZmFsc2U7DQotICAgICAgICBmb3JFYWNoKGV4
cGVjdGVkX2FycmF5LCANCi0gICAgICAgICAgICAgICAgZnVuY3Rpb24oZXhwZWN0ZWQpDQotICAg
ICAgICAgICAgICAgIHsNCi0gICAgICAgICAgICAgICAgICAgIHRyeSB7DQotICAgICAgICAgICAg
ICAgICAgICAgICAgYXNzZXJ0X2Z1bmMuYXBwbHkodGhpcywgW2FjdHVhbCwgZXhwZWN0ZWRdLmNv
bmNhdChhcmdzKSkNCi0gICAgICAgICAgICAgICAgICAgICAgICBwYXNzZWQgPSB0cnVlOw0KLSAg
ICAgICAgICAgICAgICAgICAgfSBjYXRjaChlKSB7DQotICAgICAgICAgICAgICAgICAgICAgICAg
ZXJyb3JzLnB1c2goZS5tZXNzYWdlKTsNCi0gICAgICAgICAgICAgICAgICAgIH0NCi0gICAgICAg
ICAgICAgICAgfSk7DQotICAgICAgICBpZiAoIXBhc3NlZCkgew0KLSAgICAgICAgICAgIHRocm93
IG5ldyBBc3NlcnRpb25FcnJvcihlcnJvcnMuam9pbigiXG5cbiIpKTsNCi0gICAgICAgIH0NCi0g
ICAgfQ0KLSAgICBleHBvc2UoYXNzZXJ0X2FueSwgImFzc2VydF9hbnkiKTsNCi0NCi0gICAgZnVu
Y3Rpb24gVGVzdChuYW1lLCBwcm9wZXJ0aWVzKQ0KLSAgICB7DQotICAgICAgICB0aGlzLm5hbWUg
PSBuYW1lOw0KLSAgICAgICAgdGhpcy5zdGF0dXMgPSB0aGlzLk5PVFJVTjsNCi0gICAgICAgIHRo
aXMudGltZW91dF9pZCA9IG51bGw7DQotICAgICAgICB0aGlzLmlzX2RvbmUgPSBmYWxzZTsNCi0N
Ci0gICAgICAgIHRoaXMucHJvcGVydGllcyA9IHByb3BlcnRpZXM7DQotICAgICAgICB0aGlzLnRp
bWVvdXRfbGVuZ3RoID0gcHJvcGVydGllcy50aW1lb3V0ID8gcHJvcGVydGllcy50aW1lb3V0IDog
c2V0dGluZ3MudGVzdF90aW1lb3V0Ow0KLQ0KLSAgICAgICAgdGhpcy5tZXNzYWdlID0gbnVsbDsN
Ci0NCi0gICAgICAgIHZhciB0aGlzX29iaiA9IHRoaXM7DQotICAgICAgICB0aGlzLnN0ZXBzID0g
W107DQotDQotICAgICAgICB0ZXN0cy5wdXNoKHRoaXMpOw0KLSAgICB9DQotDQotICAgIFRlc3Qu
c3RhdHVzZXMgPSB7DQotICAgICAgICBQQVNTOjAsDQotICAgICAgICBGQUlMOjEsDQotICAgICAg
ICBUSU1FT1VUOjIsDQotICAgICAgICBOT1RSVU46Mw0KLSAgICB9Ow0KLQ0KLSAgICBUZXN0LnBy
b3RvdHlwZSA9IG1lcmdlKHt9LCBUZXN0LnN0YXR1c2VzKTsNCi0NCi0gICAgVGVzdC5wcm90b3R5
cGUuc3RydWN0dXJlZF9jbG9uZSA9IGZ1bmN0aW9uKCkNCi0gICAgew0KLSAgICAgICAgaWYoIXRo
aXMuX3N0cnVjdHVyZWRfY2xvbmUpDQotICAgICAgICB7DQotICAgICAgICAgICAgdmFyIG1zZyA9
IHRoaXMubWVzc2FnZTsNCi0gICAgICAgICAgICBtc2cgPSBtc2cgPyBTdHJpbmcobXNnKSA6IG1z
ZzsNCi0gICAgICAgICAgICB0aGlzLl9zdHJ1Y3R1cmVkX2Nsb25lID0gbWVyZ2Uoew0KLSAgICAg
ICAgICAgICAgICBuYW1lOlN0cmluZyh0aGlzLm5hbWUpLA0KLSAgICAgICAgICAgICAgICBzdGF0
dXM6dGhpcy5zdGF0dXMsDQotICAgICAgICAgICAgICAgIG1lc3NhZ2U6bXNnDQotICAgICAgICAg
ICAgfSwgVGVzdC5zdGF0dXNlcyk7DQotICAgICAgICB9DQotICAgICAgICByZXR1cm4gdGhpcy5f
c3RydWN0dXJlZF9jbG9uZTsNCi0gICAgfTsNCi0NCi0gICAgVGVzdC5wcm90b3R5cGUuc3RlcCA9
IGZ1bmN0aW9uKGZ1bmMsIHRoaXNfb2JqKQ0KLSAgICB7DQotICAgICAgICAvL0luIGNhc2UgdGhl
IHRlc3QgaGFzIGFscmVhZHkgZmFpbGVkDQotICAgICAgICBpZiAodGhpcy5zdGF0dXMgIT09IHRo
aXMuTk9UUlVOKQ0KLSAgICAgICAgew0KLSAgICAgICAgICByZXR1cm47DQotICAgICAgICB9DQot
DQotICAgICAgICB0ZXN0cy5zdGFydGVkID0gdHJ1ZTsNCi0NCi0gICAgICAgIGlmICh0aGlzLnRp
bWVvdXRfaWQgPT09IG51bGwpIHsNCi0gICAgICAgICAgICB0aGlzLnNldF90aW1lb3V0KCk7DQot
ICAgICAgICB9DQotDQotICAgICAgICB0aGlzLnN0ZXBzLnB1c2goZnVuYyk7DQotDQotICAgICAg
ICBpZiAoYXJndW1lbnRzLmxlbmd0aCA9PT0gMSkNCi0gICAgICAgIHsNCi0gICAgICAgICAgICB0
aGlzX29iaiA9IHRoaXM7DQotICAgICAgICB9DQotDQotICAgICAgICB0cnkNCi0gICAgICAgIHsN
Ci0gICAgICAgICAgICBmdW5jLmFwcGx5KHRoaXNfb2JqLCBBcnJheS5wcm90b3R5cGUuc2xpY2Uu
Y2FsbChhcmd1bWVudHMsIDIpKTsNCi0gICAgICAgIH0NCi0gICAgICAgIGNhdGNoKGUpDQotICAg
ICAgICB7DQotICAgICAgICAgICAgLy9UaGlzIGNhbiBoYXBwZW4gaWYgc29tZXRoaW5nIGNhbGxl
ZCBzeW5jaHJvbm91c2x5IGludm9rZWQgYW5vdGhlcg0KLSAgICAgICAgICAgIC8vc3RlcA0KLSAg
ICAgICAgICAgIGlmICh0aGlzLnN0YXR1cyAhPT0gdGhpcy5OT1RSVU4pDQotICAgICAgICAgICAg
ew0KLSAgICAgICAgICAgICAgICByZXR1cm47DQotICAgICAgICAgICAgfQ0KLSAgICAgICAgICAg
IHRoaXMuc3RhdHVzID0gdGhpcy5GQUlMOw0KLSAgICAgICAgICAgIHRoaXMubWVzc2FnZSA9ICh0
eXBlb2YgZSA9PT0gIm9iamVjdCIgJiYgZSAhPT0gbnVsbCkgPyBlLm1lc3NhZ2UgOiBlOw0KLSAg
ICAgICAgICAgIGlmICh0eXBlb2YgZS5zdGFjayAhPSAidW5kZWZpbmVkIiAmJiB0eXBlb2YgZS5t
ZXNzYWdlID09ICJzdHJpbmciKSB7DQotICAgICAgICAgICAgICAgIC8vVHJ5IHRvIG1ha2UgaXQg
bW9yZSBpbmZvcm1hdGl2ZSBmb3Igc29tZSBleGNlcHRpb25zLCBhdCBsZWFzdA0KLSAgICAgICAg
ICAgICAgICAvL2luIEdlY2tvIGFuZCBXZWJLaXQuICBUaGlzIHJlc3VsdHMgaW4gYSBzdGFjayBk
dW1wIGluc3RlYWQgb2YNCi0gICAgICAgICAgICAgICAgLy9qdXN0IGVycm9ycyBsaWtlICJDYW5u
b3QgcmVhZCBwcm9wZXJ0eSAncGFyZW50Tm9kZScgb2YgbnVsbCINCi0gICAgICAgICAgICAgICAg
Ly9vciAicm9vdCBpcyBudWxsIi4gIE1ha2VzIGl0IGEgbG90IGxvbmdlciwgb2YgY291cnNlLg0K
LSAgICAgICAgICAgICAgICB0aGlzLm1lc3NhZ2UgKz0gIihzdGFjazogIiArIGUuc3RhY2sgKyAi
KSI7DQotICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgIHRoaXMuZG9uZSgpOw0KLSAgICAgICAg
ICAgIGlmIChkZWJ1ZyAmJiBlLmNvbnN0cnVjdG9yICE9PSBBc3NlcnRpb25FcnJvcikgew0KLSAg
ICAgICAgICAgICAgICB0aHJvdyBlOw0KLSAgICAgICAgICAgIH0NCi0gICAgICAgIH0NCi0gICAg
fTsNCi0NCi0gICAgVGVzdC5wcm90b3R5cGUuc3RlcF9mdW5jID0gZnVuY3Rpb24oZnVuYywgdGhp
c19vYmopDQotICAgIHsNCi0gICAgICAgIHZhciB0ZXN0X3RoaXMgPSB0aGlzOw0KLQ0KLSAgICAg
ICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT09IDEpDQotICAgICAgICB7DQotICAgICAgICAgICAg
dGhpc19vYmogPSB0ZXN0X3RoaXM7DQotICAgICAgICB9DQotDQotICAgICAgICByZXR1cm4gZnVu
Y3Rpb24oKQ0KLSAgICAgICAgew0KLSAgICAgICAgICAgIHRlc3RfdGhpcy5zdGVwLmFwcGx5KHRl
c3RfdGhpcywgW2Z1bmMsIHRoaXNfb2JqXS5jb25jYXQoDQotICAgICAgICAgICAgICAgIEFycmF5
LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cykpKTsNCi0gICAgICAgIH07DQotICAgIH07
DQotDQotICAgIFRlc3QucHJvdG90eXBlLnN0ZXBfZnVuY19kb25lID0gZnVuY3Rpb24oZnVuYywg
dGhpc19vYmopDQotICAgIHsNCi0gICAgICAgIHZhciB0ZXN0X3RoaXMgPSB0aGlzOw0KLQ0KLSAg
ICAgICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT09IDEpDQotICAgICAgICB7DQotICAgICAgICAg
ICAgdGhpc19vYmogPSB0ZXN0X3RoaXM7DQotICAgICAgICB9DQotDQotICAgICAgICByZXR1cm4g
ZnVuY3Rpb24oKQ0KLSAgICAgICAgew0KLSAgICAgICAgICAgIHRlc3RfdGhpcy5zdGVwLmFwcGx5
KHRlc3RfdGhpcywgW2Z1bmMsIHRoaXNfb2JqXS5jb25jYXQoDQotICAgICAgICAgICAgICAgIEFy
cmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cykpKTsNCi0gICAgICAgICAgICB0ZXN0
X3RoaXMuZG9uZSgpOw0KLSAgICAgICAgfTsNCi0gICAgfTsNCi0NCi0gICAgVGVzdC5wcm90b3R5
cGUuc2V0X3RpbWVvdXQgPSBmdW5jdGlvbigpDQotICAgIHsNCi0gICAgICAgIHZhciB0aGlzX29i
aiA9IHRoaXM7DQotICAgICAgICB0aGlzLnRpbWVvdXRfaWQgPSBzZXRUaW1lb3V0KGZ1bmN0aW9u
KCkNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgew0KLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpc19vYmoudGltZW91dCgpOw0KLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LCB0aGlzLnRpbWVvdXRfbGVuZ3RoKTsN
Ci0gICAgfTsNCi0NCi0gICAgVGVzdC5wcm90b3R5cGUudGltZW91dCA9IGZ1bmN0aW9uKCkNCi0g
ICAgew0KLSAgICAgICAgdGhpcy5zdGF0dXMgPSB0aGlzLlRJTUVPVVQ7DQotICAgICAgICB0aGlz
LnRpbWVvdXRfaWQgPSBudWxsOw0KLSAgICAgICAgdGhpcy5tZXNzYWdlID0gIlRlc3QgdGltZWQg
b3V0IjsNCi0gICAgICAgIHRoaXMuZG9uZSgpOw0KLSAgICB9Ow0KLQ0KLSAgICBUZXN0LnByb3Rv
dHlwZS5kb25lID0gZnVuY3Rpb24oKQ0KLSAgICB7DQotICAgICAgICBpZiAodGhpcy5pc19kb25l
KSB7DQotICAgICAgICAgICAgcmV0dXJuOw0KLSAgICAgICAgfQ0KLSAgICAgICAgY2xlYXJUaW1l
b3V0KHRoaXMudGltZW91dF9pZCk7DQotICAgICAgICBpZiAodGhpcy5zdGF0dXMgPT09IHRoaXMu
Tk9UUlVOKQ0KLSAgICAgICAgew0KLSAgICAgICAgICAgIHRoaXMuc3RhdHVzID0gdGhpcy5QQVNT
Ow0KLSAgICAgICAgfQ0KLSAgICAgICAgdGhpcy5pc19kb25lID0gdHJ1ZTsNCi0gICAgICAgIHRl
c3RzLnJlc3VsdCh0aGlzKTsNCi0gICAgfTsNCi0NCi0NCi0gICAgLyoNCi0gICAgICogSGFybmVz
cw0KLSAgICAgKi8NCi0NCi0gICAgZnVuY3Rpb24gVGVzdHNTdGF0dXMoKQ0KLSAgICB7DQotICAg
ICAgICB0aGlzLnN0YXR1cyA9IG51bGw7DQotICAgICAgICB0aGlzLm1lc3NhZ2UgPSBudWxsOw0K
LSAgICB9DQotDQotICAgIFRlc3RzU3RhdHVzLnN0YXR1c2VzID0gew0KLSAgICAgICAgT0s6MCwN
Ci0gICAgICAgIEVSUk9SOjEsDQotICAgICAgICBUSU1FT1VUOjINCi0gICAgfTsNCi0NCi0gICAg
VGVzdHNTdGF0dXMucHJvdG90eXBlID0gbWVyZ2Uoe30sIFRlc3RzU3RhdHVzLnN0YXR1c2VzKTsN
Ci0NCi0gICAgVGVzdHNTdGF0dXMucHJvdG90eXBlLnN0cnVjdHVyZWRfY2xvbmUgPSBmdW5jdGlv
bigpDQotICAgIHsNCi0gICAgICAgIGlmKCF0aGlzLl9zdHJ1Y3R1cmVkX2Nsb25lKQ0KLSAgICAg
ICAgew0KLSAgICAgICAgICAgIHZhciBtc2cgPSB0aGlzLm1lc3NhZ2U7DQotICAgICAgICAgICAg
bXNnID0gbXNnID8gU3RyaW5nKG1zZykgOiBtc2c7DQotICAgICAgICAgICAgdGhpcy5fc3RydWN0
dXJlZF9jbG9uZSA9IG1lcmdlKHsNCi0gICAgICAgICAgICAgICAgc3RhdHVzOnRoaXMuc3RhdHVz
LA0KLSAgICAgICAgICAgICAgICBtZXNzYWdlOm1zZw0KLSAgICAgICAgICAgIH0sIFRlc3RzU3Rh
dHVzLnN0YXR1c2VzKTsNCi0gICAgICAgIH0NCi0gICAgICAgIHJldHVybiB0aGlzLl9zdHJ1Y3R1
cmVkX2Nsb25lOw0KLSAgICB9Ow0KLQ0KLSAgICBmdW5jdGlvbiBUZXN0cygpDQotICAgIHsNCi0g
ICAgICAgIHRoaXMudGVzdHMgPSBbXTsNCi0gICAgICAgIHRoaXMubnVtX3BlbmRpbmcgPSAwOw0K
LQ0KLSAgICAgICAgdGhpcy5waGFzZXMgPSB7DQotICAgICAgICAgICAgSU5JVElBTDowLA0KLSAg
ICAgICAgICAgIFNFVFVQOjEsDQotICAgICAgICAgICAgSEFWRV9URVNUUzoyLA0KLSAgICAgICAg
ICAgIEhBVkVfUkVTVUxUUzozLA0KLSAgICAgICAgICAgIENPTVBMRVRFOjQNCi0gICAgICAgIH07
DQotICAgICAgICB0aGlzLnBoYXNlID0gdGhpcy5waGFzZXMuSU5JVElBTDsNCi0NCi0gICAgICAg
IHRoaXMucHJvcGVydGllcyA9IHt9Ow0KLQ0KLSAgICAgICAgLy9BbGwgdGVzdHMgY2FuJ3QgYmUg
ZG9uZSB1bnRpbCB0aGUgbG9hZCBldmVudCBmaXJlcw0KLSAgICAgICAgdGhpcy5hbGxfbG9hZGVk
ID0gZmFsc2U7DQotICAgICAgICB0aGlzLndhaXRfZm9yX2ZpbmlzaCA9IGZhbHNlOw0KLSAgICAg
ICAgdGhpcy5wcm9jZXNzaW5nX2NhbGxiYWNrcyA9IGZhbHNlOw0KLQ0KLSAgICAgICAgdGhpcy50
aW1lb3V0X2xlbmd0aCA9IHNldHRpbmdzLnRpbWVvdXQ7DQotICAgICAgICB0aGlzLnRpbWVvdXRf
aWQgPSBudWxsOw0KLQ0KLSAgICAgICAgdGhpcy5zdGFydF9jYWxsYmFja3MgPSBbXTsNCi0gICAg
ICAgIHRoaXMudGVzdF9kb25lX2NhbGxiYWNrcyA9IFtdOw0KLSAgICAgICAgdGhpcy5hbGxfZG9u
ZV9jYWxsYmFja3MgPSBbXTsNCi0NCi0gICAgICAgIHRoaXMuc3RhdHVzID0gbmV3IFRlc3RzU3Rh
dHVzKCk7DQotDQotICAgICAgICB2YXIgdGhpc19vYmogPSB0aGlzOw0KLQ0KLSAgICAgICAgb25f
ZXZlbnQod2luZG93LCAibG9hZCIsDQotICAgICAgICAgICAgICAgICBmdW5jdGlvbigpDQotICAg
ICAgICAgICAgICAgICB7DQotICAgICAgICAgICAgICAgICAgICAgdGhpc19vYmouYWxsX2xvYWRl
ZCA9IHRydWU7DQotICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXNfb2JqLmFsbF9kb25lKCkp
DQotICAgICAgICAgICAgICAgICAgICAgew0KLSAgICAgICAgICAgICAgICAgICAgICAgICB0aGlz
X29iai5jb21wbGV0ZSgpOw0KLSAgICAgICAgICAgICAgICAgICAgIH0NCi0gICAgICAgICAgICAg
ICAgIH0pOw0KLQ0KLSAgICAgICAgdGhpcy5zZXRfdGltZW91dCgpOw0KLSAgICB9DQotDQotICAg
IFRlc3RzLnByb3RvdHlwZS5zZXR1cCA9IGZ1bmN0aW9uKGZ1bmMsIHByb3BlcnRpZXMpDQotICAg
IHsNCi0gICAgICAgIGlmICh0aGlzLnBoYXNlID49IHRoaXMucGhhc2VzLkhBVkVfUkVTVUxUUykN
Ci0gICAgICAgIHsNCi0gICAgICAgICAgICByZXR1cm47DQotICAgICAgICB9DQotICAgICAgICBp
ZiAodGhpcy5waGFzZSA8IHRoaXMucGhhc2VzLlNFVFVQKQ0KLSAgICAgICAgew0KLSAgICAgICAg
ICAgIHRoaXMucGhhc2UgPSB0aGlzLnBoYXNlcy5TRVRVUDsNCi0gICAgICAgIH0NCi0NCi0gICAg
ICAgIGZvciAodmFyIHAgaW4gcHJvcGVydGllcykNCi0gICAgICAgIHsNCi0gICAgICAgICAgICBp
ZiAocHJvcGVydGllcy5oYXNPd25Qcm9wZXJ0eShwKSkNCi0gICAgICAgICAgICB7DQotICAgICAg
ICAgICAgICAgIHRoaXMucHJvcGVydGllc1twXSA9IHByb3BlcnRpZXNbcF07DQotICAgICAgICAg
ICAgfQ0KLSAgICAgICAgfQ0KLQ0KLSAgICAgICAgaWYgKHByb3BlcnRpZXMudGltZW91dCkNCi0g
ICAgICAgIHsNCi0gICAgICAgICAgICB0aGlzLnRpbWVvdXRfbGVuZ3RoID0gcHJvcGVydGllcy50
aW1lb3V0Ow0KLSAgICAgICAgfQ0KLSAgICAgICAgaWYgKHByb3BlcnRpZXMuZXhwbGljaXRfZG9u
ZSkNCi0gICAgICAgIHsNCi0gICAgICAgICAgICB0aGlzLndhaXRfZm9yX2ZpbmlzaCA9IHRydWU7
DQotICAgICAgICB9DQotICAgICAgICBpZiAocHJvcGVydGllcy5leHBsaWNpdF90aW1lb3V0KSB7
DQotICAgICAgICAgICAgdGhpcy50aW1lb3V0X2xlbmd0aCA9IG51bGw7DQotICAgICAgICB9DQot
DQotICAgICAgICBpZiAoZnVuYykNCi0gICAgICAgIHsNCi0gICAgICAgICAgICB0cnkNCi0gICAg
ICAgICAgICB7DQotICAgICAgICAgICAgICAgIGZ1bmMoKTsNCi0gICAgICAgICAgICB9IGNhdGNo
KGUpDQotICAgICAgICAgICAgew0KLSAgICAgICAgICAgICAgICB0aGlzLnN0YXR1cy5zdGF0dXMg
PSB0aGlzLnN0YXR1cy5FUlJPUjsNCi0gICAgICAgICAgICAgICAgdGhpcy5zdGF0dXMubWVzc2Fn
ZSA9IGU7DQotICAgICAgICAgICAgfTsNCi0gICAgICAgIH0NCi0gICAgICAgIHRoaXMuc2V0X3Rp
bWVvdXQoKTsNCi0gICAgfTsNCi0NCi0gICAgVGVzdHMucHJvdG90eXBlLnNldF90aW1lb3V0ID0g
ZnVuY3Rpb24oKQ0KLSAgICB7DQotICAgICAgICB2YXIgdGhpc19vYmogPSB0aGlzOw0KLSAgICAg
ICAgY2xlYXJUaW1lb3V0KHRoaXMudGltZW91dF9pZCk7DQotICAgICAgICBpZiAodGhpcy50aW1l
b3V0X2xlbmd0aCAhPT0gbnVsbCkNCi0gICAgICAgIHsNCi0gICAgICAgICAgICB0aGlzLnRpbWVv
dXRfaWQgPSBzZXRUaW1lb3V0KGZ1bmN0aW9uKCkgew0KLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHRoaXNfb2JqLnRpbWVvdXQoKTsNCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sIHRoaXMudGltZW91dF9sZW5ndGgpOw0KLSAg
ICAgICAgfQ0KLSAgICB9Ow0KLQ0KLSAgICBUZXN0cy5wcm90b3R5cGUudGltZW91dCA9IGZ1bmN0
aW9uKCkgew0KLSAgICAgICAgdGhpcy5zdGF0dXMuc3RhdHVzID0gdGhpcy5zdGF0dXMuVElNRU9V
VDsNCi0gICAgICAgIHRoaXMuY29tcGxldGUoKTsNCi0gICAgfTsNCi0NCi0gICAgVGVzdHMucHJv
dG90eXBlLmVuZF93YWl0ID0gZnVuY3Rpb24oKQ0KLSAgICB7DQotICAgICAgICB0aGlzLndhaXRf
Zm9yX2ZpbmlzaCA9IGZhbHNlOw0KLSAgICAgICAgaWYgKHRoaXMuYWxsX2RvbmUoKSkgew0KLSAg
ICAgICAgICAgIHRoaXMuY29tcGxldGUoKTsNCi0gICAgICAgIH0NCi0gICAgfTsNCi0NCi0gICAg
VGVzdHMucHJvdG90eXBlLnB1c2ggPSBmdW5jdGlvbih0ZXN0KQ0KLSAgICB7DQotICAgICAgICBp
ZiAodGhpcy5waGFzZSA8IHRoaXMucGhhc2VzLkhBVkVfVEVTVFMpIHsNCi0gICAgICAgICAgICB0
aGlzLnN0YXJ0KCk7DQotICAgICAgICB9DQotICAgICAgICB0aGlzLm51bV9wZW5kaW5nKys7DQot
ICAgICAgICB0aGlzLnRlc3RzLnB1c2godGVzdCk7DQotICAgIH07DQotDQotICAgIFRlc3RzLnBy
b3RvdHlwZS5hbGxfZG9uZSA9IGZ1bmN0aW9uKCkgew0KLSAgICAgICAgcmV0dXJuICh0aGlzLmFs
bF9sb2FkZWQgJiYgdGhpcy5udW1fcGVuZGluZyA9PT0gMCAmJg0KLSAgICAgICAgICAgICAgICAh
dGhpcy53YWl0X2Zvcl9maW5pc2ggJiYgIXRoaXMucHJvY2Vzc2luZ19jYWxsYmFja3MpOw0KLSAg
ICB9Ow0KLQ0KLSAgICBUZXN0cy5wcm90b3R5cGUuc3RhcnQgPSBmdW5jdGlvbigpIHsNCi0gICAg
ICAgIHRoaXMucGhhc2UgPSB0aGlzLnBoYXNlcy5IQVZFX1RFU1RTOw0KLSAgICAgICAgdGhpcy5u
b3RpZnlfc3RhcnQoKTsNCi0gICAgfTsNCi0NCi0gICAgVGVzdHMucHJvdG90eXBlLm5vdGlmeV9z
dGFydCA9IGZ1bmN0aW9uKCkgew0KLSAgICAgICAgdmFyIHRoaXNfb2JqID0gdGhpczsNCi0gICAg
ICAgIGZvckVhY2ggKHRoaXMuc3RhcnRfY2FsbGJhY2tzLA0KLSAgICAgICAgICAgICAgICAgZnVu
Y3Rpb24oY2FsbGJhY2spDQotICAgICAgICAgICAgICAgICB7DQotICAgICAgICAgICAgICAgICAg
ICAgY2FsbGJhY2sodGhpc19vYmoucHJvcGVydGllcyk7DQotICAgICAgICAgICAgICAgICB9KTsN
Ci0gICAgICAgIGZvckVhY2hfd2luZG93cygNCi0gICAgICAgICAgICAgICAgZnVuY3Rpb24odywg
aXNfc2FtZV9vcmlnaW4pDQotICAgICAgICAgICAgICAgIHsNCi0gICAgICAgICAgICAgICAgICAg
IGlmKGlzX3NhbWVfb3JpZ2luICYmIHcuc3RhcnRfY2FsbGJhY2spDQotICAgICAgICAgICAgICAg
ICAgICB7DQotICAgICAgICAgICAgICAgICAgICAgICAgdHJ5DQotICAgICAgICAgICAgICAgICAg
ICAgICAgew0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB3LnN0YXJ0X2NhbGxiYWNrKHRo
aXNfb2JqLnByb3BlcnRpZXMpOw0KLSAgICAgICAgICAgICAgICAgICAgICAgIH0NCi0gICAgICAg
ICAgICAgICAgICAgICAgICBjYXRjaChlKQ0KLSAgICAgICAgICAgICAgICAgICAgICAgIHsNCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGRlYnVnKQ0KLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyhlKTsN
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgICAgICAgICAgICAg
IH0NCi0gICAgICAgICAgICAgICAgICAgIH0NCi0gICAgICAgICAgICAgICAgICAgIGlmIChzdXBw
b3J0c19wb3N0X21lc3NhZ2UodykpDQotICAgICAgICAgICAgICAgICAgICB7DQotICAgICAgICAg
ICAgICAgICAgICAgICAgdy5wb3N0TWVzc2FnZSh7DQotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHR5cGU6ICJzdGFydCIsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb3BlcnRp
ZXM6IHRoaXNfb2JqLnByb3BlcnRpZXMNCi0gICAgICAgICAgICAgICAgICAgICAgICB9LCAiKiIp
Ow0KLSAgICAgICAgICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgICAgICB9KTsNCi0gICAgfTsN
Ci0NCi0gICAgVGVzdHMucHJvdG90eXBlLnJlc3VsdCA9IGZ1bmN0aW9uKHRlc3QpDQotICAgIHsN
Ci0gICAgICAgIGlmICh0aGlzLnBoYXNlID4gdGhpcy5waGFzZXMuSEFWRV9SRVNVTFRTKQ0KLSAg
ICAgICAgew0KLSAgICAgICAgICAgIHJldHVybjsNCi0gICAgICAgIH0NCi0gICAgICAgIHRoaXMu
cGhhc2UgPSB0aGlzLnBoYXNlcy5IQVZFX1JFU1VMVFM7DQotICAgICAgICB0aGlzLm51bV9wZW5k
aW5nLS07DQotICAgICAgICB0aGlzLm5vdGlmeV9yZXN1bHQodGVzdCk7DQotICAgIH07DQotDQot
ICAgIFRlc3RzLnByb3RvdHlwZS5ub3RpZnlfcmVzdWx0ID0gZnVuY3Rpb24odGVzdCkgew0KLSAg
ICAgICAgdmFyIHRoaXNfb2JqID0gdGhpczsNCi0gICAgICAgIHRoaXMucHJvY2Vzc2luZ19jYWxs
YmFja3MgPSB0cnVlOw0KLSAgICAgICAgZm9yRWFjaCh0aGlzLnRlc3RfZG9uZV9jYWxsYmFja3Ms
DQotICAgICAgICAgICAgICAgIGZ1bmN0aW9uKGNhbGxiYWNrKQ0KLSAgICAgICAgICAgICAgICB7
DQotICAgICAgICAgICAgICAgICAgICBjYWxsYmFjayh0ZXN0LCB0aGlzX29iaik7DQotICAgICAg
ICAgICAgICAgIH0pOw0KLQ0KLSAgICAgICAgZm9yRWFjaF93aW5kb3dzKA0KLSAgICAgICAgICAg
ICAgICBmdW5jdGlvbih3LCBpc19zYW1lX29yaWdpbikNCi0gICAgICAgICAgICAgICAgew0KLSAg
ICAgICAgICAgICAgICAgICAgaWYoaXNfc2FtZV9vcmlnaW4gJiYgdy5yZXN1bHRfY2FsbGJhY2sp
DQotICAgICAgICAgICAgICAgICAgICB7DQotICAgICAgICAgICAgICAgICAgICAgICAgdHJ5DQot
ICAgICAgICAgICAgICAgICAgICAgICAgew0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB3
LnJlc3VsdF9jYWxsYmFjayh0ZXN0KTsNCi0gICAgICAgICAgICAgICAgICAgICAgICB9DQotICAg
ICAgICAgICAgICAgICAgICAgICAgY2F0Y2goZSkNCi0gICAgICAgICAgICAgICAgICAgICAgICB7
DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKGRlYnVnKSB7DQotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB0aHJvdyBlOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB9DQotICAgICAgICAgICAgICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgICAgICAgICAgfQ0K
LSAgICAgICAgICAgICAgICAgICAgaWYgKHN1cHBvcnRzX3Bvc3RfbWVzc2FnZSh3KSkNCi0gICAg
ICAgICAgICAgICAgICAgIHsNCi0gICAgICAgICAgICAgICAgICAgICAgICB3LnBvc3RNZXNzYWdl
KHsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogInJlc3VsdCIsDQotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHRlc3Q6IHRlc3Quc3RydWN0dXJlZF9jbG9uZSgpDQotICAg
ICAgICAgICAgICAgICAgICAgICAgfSwgIioiKTsNCi0gICAgICAgICAgICAgICAgICAgIH0NCi0g
ICAgICAgICAgICAgICAgfSk7DQotICAgICAgICB0aGlzLnByb2Nlc3NpbmdfY2FsbGJhY2tzID0g
ZmFsc2U7DQotICAgICAgICBpZiAodGhpc19vYmouYWxsX2RvbmUoKSkNCi0gICAgICAgIHsNCi0g
ICAgICAgICAgICB0aGlzX29iai5jb21wbGV0ZSgpOw0KLSAgICAgICAgfQ0KLSAgICB9Ow0KLQ0K
LSAgICBUZXN0cy5wcm90b3R5cGUuY29tcGxldGUgPSBmdW5jdGlvbigpIHsNCi0gICAgICAgIGlm
ICh0aGlzLnBoYXNlID09PSB0aGlzLnBoYXNlcy5DT01QTEVURSkgew0KLSAgICAgICAgICAgIHJl
dHVybjsNCi0gICAgICAgIH0NCi0gICAgICAgIHRoaXMucGhhc2UgPSB0aGlzLnBoYXNlcy5DT01Q
TEVURTsNCi0gICAgICAgIHZhciB0aGlzX29iaiA9IHRoaXM7DQotICAgICAgICB0aGlzLnRlc3Rz
LmZvckVhY2goDQotICAgICAgICAgICAgZnVuY3Rpb24oeCkNCi0gICAgICAgICAgICB7DQotICAg
ICAgICAgICAgICAgIGlmKHguc3RhdHVzID09PSB4Lk5PVFJVTikNCi0gICAgICAgICAgICAgICAg
ew0KLSAgICAgICAgICAgICAgICAgICAgdGhpc19vYmoubm90aWZ5X3Jlc3VsdCh4KTsNCi0gICAg
ICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgIH0NCi0gICAgICAgICk7DQotICAgICAgICB0aGlz
Lm5vdGlmeV9jb21wbGV0ZSgpOw0KLSAgICB9Ow0KLQ0KLSAgICBUZXN0cy5wcm90b3R5cGUubm90
aWZ5X2NvbXBsZXRlID0gZnVuY3Rpb24oKQ0KLSAgICB7DQotICAgICAgICBjbGVhclRpbWVvdXQo
dGhpcy50aW1lb3V0X2lkKTsNCi0gICAgICAgIHZhciB0aGlzX29iaiA9IHRoaXM7DQotICAgICAg
ICB2YXIgdGVzdHMgPSBtYXAodGhpc19vYmoudGVzdHMsDQotICAgICAgICAgICAgICAgICAgICAg
ICAgZnVuY3Rpb24odGVzdCkNCi0gICAgICAgICAgICAgICAgICAgICAgICB7DQotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHJldHVybiB0ZXN0LnN0cnVjdHVyZWRfY2xvbmUoKTsNCi0gICAg
ICAgICAgICAgICAgICAgICAgICB9KTsNCi0gICAgICAgIGlmICh0aGlzLnN0YXR1cy5zdGF0dXMg
PT09IG51bGwpDQotICAgICAgICB7DQotICAgICAgICAgICAgdGhpcy5zdGF0dXMuc3RhdHVzID0g
dGhpcy5zdGF0dXMuT0s7DQotICAgICAgICB9DQotDQotICAgICAgICBmb3JFYWNoICh0aGlzLmFs
bF9kb25lX2NhbGxiYWNrcywNCi0gICAgICAgICAgICAgICAgIGZ1bmN0aW9uKGNhbGxiYWNrKQ0K
LSAgICAgICAgICAgICAgICAgew0KLSAgICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrKHRoaXNf
b2JqLnRlc3RzLCB0aGlzX29iai5zdGF0dXMpOw0KLSAgICAgICAgICAgICAgICAgfSk7DQotDQot
ICAgICAgICBmb3JFYWNoX3dpbmRvd3MoDQotICAgICAgICAgICAgICAgIGZ1bmN0aW9uKHcsIGlz
X3NhbWVfb3JpZ2luKQ0KLSAgICAgICAgICAgICAgICB7DQotICAgICAgICAgICAgICAgICAgICBp
Zihpc19zYW1lX29yaWdpbiAmJiB3LmNvbXBsZXRpb25fY2FsbGJhY2spDQotICAgICAgICAgICAg
ICAgICAgICB7DQotICAgICAgICAgICAgICAgICAgICAgICAgdHJ5DQotICAgICAgICAgICAgICAg
ICAgICAgICAgew0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB3LmNvbXBsZXRpb25fY2Fs
bGJhY2sodGhpc19vYmoudGVzdHMsIHRoaXNfb2JqLnN0YXR1cyk7DQotICAgICAgICAgICAgICAg
ICAgICAgICAgfQ0KLSAgICAgICAgICAgICAgICAgICAgICAgIGNhdGNoKGUpDQotICAgICAgICAg
ICAgICAgICAgICAgICAgew0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZGVidWcp
DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsNCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHRocm93IGU7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0NCi0gICAg
ICAgICAgICAgICAgICAgICAgICB9DQotICAgICAgICAgICAgICAgICAgICB9DQotICAgICAgICAg
ICAgICAgICAgICBpZiAoc3VwcG9ydHNfcG9zdF9tZXNzYWdlKHcpKQ0KLSAgICAgICAgICAgICAg
ICAgICAgew0KLSAgICAgICAgICAgICAgICAgICAgICAgIHcucG9zdE1lc3NhZ2Uoew0KLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiAiY29tcGxldGUiLA0KLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB0ZXN0czogdGVzdHMsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHN0YXR1czogdGhpc19vYmouc3RhdHVzLnN0cnVjdHVyZWRfY2xvbmUoKQ0KLSAgICAgICAgICAg
ICAgICAgICAgICAgIH0sICIqIik7DQotICAgICAgICAgICAgICAgICAgICB9DQotICAgICAgICAg
ICAgICAgIH0pOw0KLSAgICB9Ow0KLQ0KLSAgICB2YXIgdGVzdHMgPSBuZXcgVGVzdHMoKTsNCi0N
Ci0gICAgZnVuY3Rpb24gdGltZW91dCgpIHsNCi0gICAgICAgIGlmICh0ZXN0cy50aW1lb3V0X2xl
bmd0aCA9PT0gbnVsbCkNCi0gICAgICAgIHsNCi0gICAgICAgICAgICB0ZXN0cy50aW1lb3V0KCk7
DQotICAgICAgICB9DQotICAgIH0NCi0gICAgZXhwb3NlKHRpbWVvdXQsICd0aW1lb3V0Jyk7DQot
DQotICAgIGZ1bmN0aW9uIGFkZF9zdGFydF9jYWxsYmFjayhjYWxsYmFjaykgew0KLSAgICAgICAg
dGVzdHMuc3RhcnRfY2FsbGJhY2tzLnB1c2goY2FsbGJhY2spOw0KLSAgICB9DQotDQotICAgIGZ1
bmN0aW9uIGFkZF9yZXN1bHRfY2FsbGJhY2soY2FsbGJhY2spDQotICAgIHsNCi0gICAgICAgIHRl
c3RzLnRlc3RfZG9uZV9jYWxsYmFja3MucHVzaChjYWxsYmFjayk7DQotICAgIH0NCi0NCi0gICAg
ZnVuY3Rpb24gYWRkX2NvbXBsZXRpb25fY2FsbGJhY2soY2FsbGJhY2spDQotICAgIHsNCi0gICAg
ICAgdGVzdHMuYWxsX2RvbmVfY2FsbGJhY2tzLnB1c2goY2FsbGJhY2spOw0KLSAgICB9DQotDQot
ICAgIGV4cG9zZShhZGRfc3RhcnRfY2FsbGJhY2ssICdhZGRfc3RhcnRfY2FsbGJhY2snKTsNCi0g
ICAgZXhwb3NlKGFkZF9yZXN1bHRfY2FsbGJhY2ssICdhZGRfcmVzdWx0X2NhbGxiYWNrJyk7DQot
ICAgIGV4cG9zZShhZGRfY29tcGxldGlvbl9jYWxsYmFjaywgJ2FkZF9jb21wbGV0aW9uX2NhbGxi
YWNrJyk7DQotDQotICAgIC8qDQotICAgICAqIE91dHB1dCBsaXN0ZW5lcg0KLSAgICAqLw0KLQ0K
LSAgICBmdW5jdGlvbiBPdXRwdXQoKSB7DQotICAgICAgdGhpcy5vdXRwdXRfZG9jdW1lbnQgPSBk
b2N1bWVudDsNCi0gICAgICB0aGlzLm91dHB1dF9ub2RlID0gbnVsbDsNCi0gICAgICB0aGlzLmRv
bmVfY291bnQgPSAwOw0KLSAgICAgIHRoaXMuZW5hYmxlZCA9IHNldHRpbmdzLm91dHB1dDsNCi0g
ICAgICB0aGlzLnBoYXNlID0gdGhpcy5JTklUSUFMOw0KLSAgICB9DQotDQotICAgIE91dHB1dC5w
cm90b3R5cGUuSU5JVElBTCA9IDA7DQotICAgIE91dHB1dC5wcm90b3R5cGUuU1RBUlRFRCA9IDE7
DQotICAgIE91dHB1dC5wcm90b3R5cGUuSEFWRV9SRVNVTFRTID0gMjsNCi0gICAgT3V0cHV0LnBy
b3RvdHlwZS5DT01QTEVURSA9IDM7DQotDQotICAgIE91dHB1dC5wcm90b3R5cGUuc2V0dXAgPSBm
dW5jdGlvbihwcm9wZXJ0aWVzKSB7DQotICAgICAgICBpZiAodGhpcy5waGFzZSA+IHRoaXMuSU5J
VElBTCkgew0KLSAgICAgICAgICAgIHJldHVybjsNCi0gICAgICAgIH0NCi0NCi0gICAgICAgIC8v
SWYgb3V0cHV0IGlzIGRpc2FibGVkIGluIHRlc3RoYXJuZXNzcmVwb3J0LmpzIHRoZSB0ZXN0IHNo
b3VsZG4ndCBiZQ0KLSAgICAgICAgLy9hYmxlIHRvIG92ZXJyaWRlIHRoYXQNCi0gICAgICAgIHRo
aXMuZW5hYmxlZCA9IHRoaXMuZW5hYmxlZCAmJiAocHJvcGVydGllcy5oYXNPd25Qcm9wZXJ0eSgi
b3V0cHV0IikgPw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9w
ZXJ0aWVzLm91dHB1dCA6IHNldHRpbmdzLm91dHB1dCk7DQotICAgIH07DQotDQotICAgIE91dHB1
dC5wcm90b3R5cGUuaW5pdCA9IGZ1bmN0aW9uKHByb3BlcnRpZXMpDQotICAgIHsNCi0gICAgICAg
IGlmICh0aGlzLnBoYXNlID49IHRoaXMuU1RBUlRFRCkgew0KLSAgICAgICAgICAgIHJldHVybjsN
Ci0gICAgICAgIH0NCi0gICAgICAgIGlmIChwcm9wZXJ0aWVzLm91dHB1dF9kb2N1bWVudCkgew0K
LSAgICAgICAgICAgIHRoaXMub3V0cHV0X2RvY3VtZW50ID0gcHJvcGVydGllcy5vdXRwdXRfZG9j
dW1lbnQ7DQotICAgICAgICB9IGVsc2Ugew0KLSAgICAgICAgICAgIHRoaXMub3V0cHV0X2RvY3Vt
ZW50ID0gZG9jdW1lbnQ7DQotICAgICAgICB9DQotICAgICAgICB0aGlzLnBoYXNlID0gdGhpcy5T
VEFSVEVEOw0KLSAgICB9Ow0KLQ0KLSAgICBPdXRwdXQucHJvdG90eXBlLnJlc29sdmVfbG9nID0g
ZnVuY3Rpb24oKQ0KLSAgICB7DQotICAgICAgICB2YXIgb3V0cHV0X2RvY3VtZW50Ow0KLSAgICAg
ICAgaWYgKHR5cGVvZiB0aGlzLm91dHB1dF9kb2N1bWVudCA9PT0gImZ1bmN0aW9uIikNCi0gICAg
ICAgIHsNCi0gICAgICAgICAgICBvdXRwdXRfZG9jdW1lbnQgPSB0aGlzLm91dHB1dF9kb2N1bWVu
dC5hcHBseSh1bmRlZmluZWQpOw0KLSAgICAgICAgfSBlbHNlDQotICAgICAgICB7DQotICAgICAg
ICAgICAgb3V0cHV0X2RvY3VtZW50ID0gdGhpcy5vdXRwdXRfZG9jdW1lbnQ7DQotICAgICAgICB9
DQotICAgICAgICBpZiAoIW91dHB1dF9kb2N1bWVudCkNCi0gICAgICAgIHsNCi0gICAgICAgICAg
ICByZXR1cm47DQotICAgICAgICB9DQotICAgICAgICB2YXIgbm9kZSA9IG91dHB1dF9kb2N1bWVu
dC5nZXRFbGVtZW50QnlJZCgibG9nIik7DQotICAgICAgICBpZiAobm9kZSkNCi0gICAgICAgIHsN
Ci0gICAgICAgICAgICB0aGlzLm91dHB1dF9kb2N1bWVudCA9IG91dHB1dF9kb2N1bWVudDsNCi0g
ICAgICAgICAgICB0aGlzLm91dHB1dF9ub2RlID0gbm9kZTsNCi0gICAgICAgIH0NCi0gICAgfTsN
Ci0NCi0gICAgT3V0cHV0LnByb3RvdHlwZS5zaG93X3N0YXR1cyA9IGZ1bmN0aW9uKHRlc3QpDQot
ICAgIHsNCi0gICAgICAgIGlmICh0aGlzLnBoYXNlIDwgdGhpcy5TVEFSVEVEKQ0KLSAgICAgICAg
ew0KLSAgICAgICAgICAgIHRoaXMuaW5pdCgpOw0KLSAgICAgICAgfQ0KLSAgICAgICAgaWYgKCF0
aGlzLmVuYWJsZWQpDQotICAgICAgICB7DQotICAgICAgICAgICAgcmV0dXJuOw0KLSAgICAgICAg
fQ0KLSAgICAgICAgaWYgKHRoaXMucGhhc2UgPCB0aGlzLkhBVkVfUkVTVUxUUykNCi0gICAgICAg
IHsNCi0gICAgICAgICAgICB0aGlzLnJlc29sdmVfbG9nKCk7DQotICAgICAgICAgICAgdGhpcy5w
aGFzZSA9IHRoaXMuSEFWRV9SRVNVTFRTOw0KLSAgICAgICAgfQ0KLSAgICAgICAgdGhpcy5kb25l
X2NvdW50Kys7DQotICAgICAgICBpZiAodGhpcy5vdXRwdXRfbm9kZSkNCi0gICAgICAgIHsNCi0g
ICAgICAgICAgICBpZiAodGhpcy5kb25lX2NvdW50IDwgMTAwDQotICAgICAgICAgICAgfHwgKHRo
aXMuZG9uZV9jb3VudCA8IDEwMDAgJiYgdGhpcy5kb25lX2NvdW50ICUgMTAwID09IDApDQotICAg
ICAgICAgICAgfHwgdGhpcy5kb25lX2NvdW50ICUgMTAwMCA9PSAwKSB7DQotICAgICAgICAgICAg
ICAgIHRoaXMub3V0cHV0X25vZGUudGV4dENvbnRlbnQgPSAiUnVubmluZywgIg0KLSAgICAgICAg
ICAgICAgICAgICAgKyB0aGlzLmRvbmVfY291bnQgKyAiIGNvbXBsZXRlLCAiDQotICAgICAgICAg
ICAgICAgICAgICArIHRlc3RzLm51bV9wZW5kaW5nICsgIiByZW1haW4iOw0KLSAgICAgICAgICAg
IH0NCi0gICAgICAgIH0NCi0gICAgfTsNCi0NCi0gICAgT3V0cHV0LnByb3RvdHlwZS5zaG93X3Jl
c3VsdHMgPSBmdW5jdGlvbiAodGVzdHMsIGhhcm5lc3Nfc3RhdHVzKQ0KLSAgICB7DQotICAgICAg
ICBpZiAodGhpcy5waGFzZSA+PSB0aGlzLkNPTVBMRVRFKSB7DQotICAgICAgICAgICAgcmV0dXJu
Ow0KLSAgICAgICAgfQ0KLSAgICAgICAgaWYgKCF0aGlzLmVuYWJsZWQpDQotICAgICAgICB7DQot
ICAgICAgICAgICAgcmV0dXJuOw0KLSAgICAgICAgfQ0KLSAgICAgICAgaWYgKCF0aGlzLm91dHB1
dF9ub2RlKSB7DQotICAgICAgICAgICAgdGhpcy5yZXNvbHZlX2xvZygpOw0KLSAgICAgICAgfQ0K
LSAgICAgICAgdGhpcy5waGFzZSA9IHRoaXMuQ09NUExFVEU7DQotDQotICAgICAgICB2YXIgbG9n
ID0gdGhpcy5vdXRwdXRfbm9kZTsNCi0gICAgICAgIGlmICghbG9nKQ0KLSAgICAgICAgew0KLSAg
ICAgICAgICAgIHJldHVybjsNCi0gICAgICAgIH0NCi0gICAgICAgIHZhciBvdXRwdXRfZG9jdW1l
bnQgPSB0aGlzLm91dHB1dF9kb2N1bWVudDsNCi0NCi0gICAgICAgIHdoaWxlIChsb2cubGFzdENo
aWxkKQ0KLSAgICAgICAgew0KLSAgICAgICAgICAgIGxvZy5yZW1vdmVDaGlsZChsb2cubGFzdENo
aWxkKTsNCi0gICAgICAgIH0NCi0NCi0gICAgICAgIGlmIChzY3JpcHRfcHJlZml4ICE9IG51bGwp
IHsNCi0gICAgICAgICAgICB2YXIgc3R5bGVzaGVldCA9IG91dHB1dF9kb2N1bWVudC5jcmVhdGVF
bGVtZW50TlMoeGh0bWxfbnMsICJsaW5rIik7DQotICAgICAgICAgICAgc3R5bGVzaGVldC5zZXRB
dHRyaWJ1dGUoInJlbCIsICJzdHlsZXNoZWV0Iik7DQotICAgICAgICAgICAgc3R5bGVzaGVldC5z
ZXRBdHRyaWJ1dGUoImhyZWYiLCBzY3JpcHRfcHJlZml4ICsgInRlc3RoYXJuZXNzLmNzcyIpOw0K
LSAgICAgICAgICAgIHZhciBoZWFkcyA9IG91dHB1dF9kb2N1bWVudC5nZXRFbGVtZW50c0J5VGFn
TmFtZSgiaGVhZCIpOw0KLSAgICAgICAgICAgIGlmIChoZWFkcy5sZW5ndGgpIHsNCi0gICAgICAg
ICAgICAgICAgaGVhZHNbMF0uYXBwZW5kQ2hpbGQoc3R5bGVzaGVldCk7DQotICAgICAgICAgICAg
fQ0KLSAgICAgICAgfQ0KLQ0KLSAgICAgICAgdmFyIHN0YXR1c190ZXh0ID0ge307DQotICAgICAg
ICBzdGF0dXNfdGV4dFtUZXN0LnByb3RvdHlwZS5QQVNTXSA9ICJQYXNzIjsNCi0gICAgICAgIHN0
YXR1c190ZXh0W1Rlc3QucHJvdG90eXBlLkZBSUxdID0gIkZhaWwiOw0KLSAgICAgICAgc3RhdHVz
X3RleHRbVGVzdC5wcm90b3R5cGUuVElNRU9VVF0gPSAiVGltZW91dCI7DQotICAgICAgICBzdGF0
dXNfdGV4dFtUZXN0LnByb3RvdHlwZS5OT1RSVU5dID0gIk5vdCBSdW4iOw0KLQ0KLSAgICAgICAg
dmFyIHN0YXR1c19udW1iZXIgPSB7fTsNCi0gICAgICAgIGZvckVhY2godGVzdHMsIGZ1bmN0aW9u
KHRlc3QpIHsNCi0gICAgICAgICAgICAgICAgICAgIHZhciBzdGF0dXMgPSBzdGF0dXNfdGV4dFt0
ZXN0LnN0YXR1c107DQotICAgICAgICAgICAgICAgICAgICBpZiAoc3RhdHVzX251bWJlci5oYXNP
d25Qcm9wZXJ0eShzdGF0dXMpKQ0KLSAgICAgICAgICAgICAgICAgICAgew0KLSAgICAgICAgICAg
ICAgICAgICAgICAgIHN0YXR1c19udW1iZXJbc3RhdHVzXSArPSAxOw0KLSAgICAgICAgICAgICAg
ICAgICAgfSBlbHNlIHsNCi0gICAgICAgICAgICAgICAgICAgICAgICBzdGF0dXNfbnVtYmVyW3N0
YXR1c10gPSAxOw0KLSAgICAgICAgICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgICAgICB9KTsN
Ci0NCi0gICAgICAgIGZ1bmN0aW9uIHN0YXR1c19jbGFzcyhzdGF0dXMpDQotICAgICAgICB7DQot
ICAgICAgICAgICAgcmV0dXJuIHN0YXR1cy5yZXBsYWNlKC9ccy9nLCAnJykudG9Mb3dlckNhc2Uo
KTsNCi0gICAgICAgIH0NCi0NCi0gICAgICAgIHZhciBzdW1tYXJ5X3RlbXBsYXRlID0gWyJzZWN0
aW9uIiwgeyJpZCI6InN1bW1hcnkifSwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IFsiaDIiLCB7fSwgIlN1bW1hcnkiXSwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IFsicCIsIHt9LCAiRm91bmQgJHtudW1fdGVzdHN9IHRlc3RzIl0sDQotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBmdW5jdGlvbih2YXJzKSB7DQotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgdmFyIHJ2ID0gW1siZGl2Iiwge31dXTsNCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB2YXIgaT0wOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHdoaWxlIChzdGF0dXNfdGV4dC5oYXNPd25Qcm9wZXJ0eShpKSkgew0KLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoc3RhdHVzX251bWJlci5oYXNP
d25Qcm9wZXJ0eShzdGF0dXNfdGV4dFtpXSkpIHsNCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHZhciBzdGF0dXMgPSBzdGF0dXNfdGV4dFtpXTsNCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJ2WzBdLnB1c2goWyJkaXYiLCB7
ImNsYXNzIjpzdGF0dXNfY2xhc3Moc3RhdHVzKX0sDQotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbImxhYmVsIiwge30sDQotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWyJpbnB1dCIs
IHt0eXBlOiJjaGVja2JveCIsIGNoZWNrZWQ6ImNoZWNrZWQifV0sDQotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdHVzX251bWJlcltz
dGF0dXNdICsgIiAiICsgc3RhdHVzXV0pOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB9DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGkr
KzsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9DQotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJ2Ow0KLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgfV07DQotDQotICAgICAgICBsb2cuYXBwZW5kQ2hpbGQocmVuZGVyKHN1bW1h
cnlfdGVtcGxhdGUsIHtudW1fdGVzdHM6dGVzdHMubGVuZ3RofSwgb3V0cHV0X2RvY3VtZW50KSk7
DQotDQotICAgICAgICBmb3JFYWNoKG91dHB1dF9kb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCJz
ZWN0aW9uI3N1bW1hcnkgbGFiZWwiKSwNCi0gICAgICAgICAgICAgICAgZnVuY3Rpb24oZWxlbWVu
dCkNCi0gICAgICAgICAgICAgICAgew0KLSAgICAgICAgICAgICAgICAgICAgb25fZXZlbnQoZWxl
bWVudCwgImNsaWNrIiwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uKGUp
DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7DQotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgaWYgKG91dHB1dF9kb2N1bWVudC5nZXRFbGVtZW50QnlJZCgicmVzdWx0cyIp
ID09PSBudWxsKQ0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsNCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpOw0KLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47DQotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZh
ciByZXN1bHRfY2xhc3MgPSBlbGVtZW50LnBhcmVudE5vZGUuZ2V0QXR0cmlidXRlKCJjbGFzcyIp
Ow0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBzdHlsZV9lbGVtZW50ID0g
b3V0cHV0X2RvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoInN0eWxlI2hpZGUtIiArIHJlc3VsdF9jbGFz
cyk7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGlucHV0X2VsZW1lbnQg
PSBlbGVtZW50LnF1ZXJ5U2VsZWN0b3IoImlucHV0Iik7DQotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgaWYgKCFzdHlsZV9lbGVtZW50ICYmICFpbnB1dF9lbGVtZW50LmNoZWNrZWQp
IHsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3R5bGVfZWxlbWVudCA9
IG91dHB1dF9kb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoeGh0bWxfbnMsICJzdHlsZSIpOw0KLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHlsZV9lbGVtZW50LmlkID0gImhp
ZGUtIiArIHJlc3VsdF9jbGFzczsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgc3R5bGVfZWxlbWVudC50ZXh0Q29udGVudCA9ICJ0YWJsZSNyZXN1bHRzID4gdGJvZHkgPiB0
ci4iK3Jlc3VsdF9jbGFzcysie2Rpc3BsYXk6bm9uZX0iOw0KLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBvdXRwdXRfZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChzdHlsZV9l
bGVtZW50KTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHN0
eWxlX2VsZW1lbnQgJiYgaW5wdXRfZWxlbWVudC5jaGVja2VkKSB7DQotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHN0eWxlX2VsZW1lbnQucGFyZW50Tm9kZS5yZW1vdmVDaGls
ZChzdHlsZV9lbGVtZW50KTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9DQot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTsNCi0gICAgICAgICAgICAgICAgfSk7DQot
DQotICAgICAgICAvLyBUaGlzIHVzZSBvZiBpbm5lckhUTUwgcGx1cyBtYW51YWwgZXNjYXBpbmcg
aXMgbm90IHJlY29tbWVuZGVkIGluDQotICAgICAgICAvLyBnZW5lcmFsLCBidXQgaXMgbmVjZXNz
YXJ5IGhlcmUgZm9yIHBlcmZvcm1hbmNlLiAgVXNpbmcgdGV4dENvbnRlbnQNCi0gICAgICAgIC8v
IG9uIGVhY2ggaW5kaXZpZHVhbCA8dGQ+IGFkZHMgdGVucyBvZiBzZWNvbmRzIG9mIGV4ZWN1dGlv
biB0aW1lIGZvcg0KLSAgICAgICAgLy8gbGFyZ2UgdGVzdCBzdWl0ZXMgKHRlbnMgb2YgdGhvdXNh
bmRzIG9mIHRlc3RzKS4NCi0gICAgICAgIGZ1bmN0aW9uIGVzY2FwZV9odG1sKHMpDQotICAgICAg
ICB7DQotICAgICAgICAgICAgcmV0dXJuIHMucmVwbGFjZSgvXCYvZywgIiZhbXA7IikNCi0gICAg
ICAgICAgICAgICAgLnJlcGxhY2UoLzwvZywgIiZsdDsiKQ0KLSAgICAgICAgICAgICAgICAucmVw
bGFjZSgvIi9nLCAiJnF1b3Q7IikNCi0gICAgICAgICAgICAgICAgLnJlcGxhY2UoLycvZywgIiYj
Mzk7Iik7DQotICAgICAgICB9DQotDQotICAgICAgICBmdW5jdGlvbiBoYXNfYXNzZXJ0aW9ucygp
DQotICAgICAgICB7DQotICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0ZXN0cy5sZW5n
dGg7IGkrKykgew0KLSAgICAgICAgICAgICAgICBpZiAodGVzdHNbaV0ucHJvcGVydGllcy5oYXNP
d25Qcm9wZXJ0eSgiYXNzZXJ0IikpIHsNCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVl
Ow0KLSAgICAgICAgICAgICAgICB9DQotICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgIHJldHVy
biBmYWxzZTsNCi0gICAgICAgIH0NCi0gICAgICAgIA0KLSAgICAgICAgZnVuY3Rpb24gZ2V0X2Fz
c2VydGlvbih0ZXN0KQ0KLSAgICAgICAgew0KLSAgICAgICAgICAgIGlmICh0ZXN0LnByb3BlcnRp
ZXMuaGFzT3duUHJvcGVydHkoImFzc2VydCIpKSB7DQotICAgICAgICAgICAgICAgIGlmIChBcnJh
eS5pc0FycmF5KHRlc3QucHJvcGVydGllcy5hc3NlcnQpKSB7DQotICAgICAgICAgICAgICAgICAg
ICByZXR1cm4gdGVzdC5wcm9wZXJ0aWVzLmFzc2VydC5qb2luKCcgJyk7DQotICAgICAgICAgICAg
ICAgIH0NCi0gICAgICAgICAgICAgICAgcmV0dXJuIHRlc3QucHJvcGVydGllcy5hc3NlcnQ7DQot
ICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgIHJldHVybiAnJzsNCi0gICAgICAgIH0NCi0gICAg
ICAgIA0KLSAgICAgICAgbG9nLmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUyh4
aHRtbF9ucywgInNlY3Rpb24iKSk7DQotICAgICAgICB2YXIgYXNzZXJ0aW9ucyA9IGhhc19hc3Nl
cnRpb25zKCk7DQotICAgICAgICB2YXIgaHRtbCA9ICI8aDI+RGV0YWlsczwvaDI+PHRhYmxlIGlk
PSdyZXN1bHRzJyAiICsgKGFzc2VydGlvbnMgPyAiY2xhc3M9J2Fzc2VydGlvbnMnIiA6ICIiICkg
KyAiPiINCi0gICAgICAgICAgICArICI8dGhlYWQ+PHRyPjx0aD5SZXN1bHQ8L3RoPjx0aD5UZXN0
IE5hbWU8L3RoPiINCi0gICAgICAgICAgICArIChhc3NlcnRpb25zID8gIjx0aD5Bc3NlcnRpb248
L3RoPiIgOiAiIikNCi0gICAgICAgICAgICArICI8dGg+TWVzc2FnZTwvdGg+PC90cj48L3RoZWFk
PiINCi0gICAgICAgICAgICArICI8dGJvZHk+IjsNCi0gICAgICAgIGZvciAodmFyIGkgPSAwOyBp
IDwgdGVzdHMubGVuZ3RoOyBpKyspIHsNCi0gICAgICAgICAgICBodG1sICs9ICc8dHIgY2xhc3M9
IicNCi0gICAgICAgICAgICAgICAgKyBlc2NhcGVfaHRtbChzdGF0dXNfY2xhc3Moc3RhdHVzX3Rl
eHRbdGVzdHNbaV0uc3RhdHVzXSkpDQotICAgICAgICAgICAgICAgICsgJyI+PHRkPicNCi0gICAg
ICAgICAgICAgICAgKyBlc2NhcGVfaHRtbChzdGF0dXNfdGV4dFt0ZXN0c1tpXS5zdGF0dXNdKQ0K
LSAgICAgICAgICAgICAgICArICI8L3RkPjx0ZD4iDQotICAgICAgICAgICAgICAgICsgZXNjYXBl
X2h0bWwodGVzdHNbaV0ubmFtZSkNCi0gICAgICAgICAgICAgICAgKyAiPC90ZD48dGQ+Ig0KLSAg
ICAgICAgICAgICAgICArIChhc3NlcnRpb25zID8gZXNjYXBlX2h0bWwoZ2V0X2Fzc2VydGlvbih0
ZXN0c1tpXSkpICsgIjwvdGQ+PHRkPiIgOiAiIikNCi0gICAgICAgICAgICAgICAgKyBlc2NhcGVf
aHRtbCh0ZXN0c1tpXS5tZXNzYWdlID8gdGVzdHNbaV0ubWVzc2FnZSA6ICIgIikNCi0gICAgICAg
ICAgICAgICAgKyAiPC90ZD48L3RyPiI7DQotICAgICAgICB9DQotICAgICAgICBodG1sICs9ICI8
L3Rib2R5PjwvdGFibGU+IjsNCi0gICAgICAgIHRyeSB7DQotICAgICAgICAgICAgbG9nLmxhc3RD
aGlsZC5pbm5lckhUTUwgPSBodG1sOw0KLSAgICAgICAgfSBjYXRjaCAoZSkgew0KLSAgICAgICAg
ICAgIGxvZy5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoeGh0bWxfbnMsICJw
IikpDQotICAgICAgICAgICAgICAgLnRleHRDb250ZW50ID0gIlNldHRpbmcgaW5uZXJIVE1MIGZv
ciB0aGUgbG9nIHRocmV3IGFuIGV4Y2VwdGlvbi4iOw0KLSAgICAgICAgICAgIGxvZy5hcHBlbmRD
aGlsZChkb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoeGh0bWxfbnMsICJwcmUiKSkNCi0gICAgICAg
ICAgICAgICAudGV4dENvbnRlbnQgPSBodG1sOw0KLSAgICAgICAgfQ0KLSAgICB9Ow0KLQ0KLSAg
ICB2YXIgb3V0cHV0ID0gbmV3IE91dHB1dCgpOw0KLSAgICBhZGRfc3RhcnRfY2FsbGJhY2soZnVu
Y3Rpb24gKHByb3BlcnRpZXMpIHtvdXRwdXQuaW5pdChwcm9wZXJ0aWVzKTt9KTsNCi0gICAgYWRk
X3Jlc3VsdF9jYWxsYmFjayhmdW5jdGlvbiAodGVzdCkge291dHB1dC5zaG93X3N0YXR1cyh0ZXN0
cyk7fSk7DQotICAgIGFkZF9jb21wbGV0aW9uX2NhbGxiYWNrKGZ1bmN0aW9uICh0ZXN0cywgaGFy
bmVzc19zdGF0dXMpIHtvdXRwdXQuc2hvd19yZXN1bHRzKHRlc3RzLCBoYXJuZXNzX3N0YXR1cyk7
fSk7DQotDQotICAgIC8qDQotICAgICAqIFRlbXBsYXRlIGNvZGUNCi0gICAgICoNCi0gICAgICog
QSB0ZW1wbGF0ZSBpcyBqdXN0IGEgamF2YXNjcmlwdCBzdHJ1Y3R1cmUuIEFuIGVsZW1lbnQgaXMg
cmVwcmVzZW50ZWQgYXM6DQotICAgICAqDQotICAgICAqIFt0YWdfbmFtZSwge2F0dHJfbmFtZTph
dHRyX3ZhbHVlfSwgY2hpbGQxLCBjaGlsZDJdDQotICAgICAqDQotICAgICAqIHRoZSBjaGlsZHJl
biBjYW4gZWl0aGVyIGJlIHN0cmluZ3MgKHdoaWNoIGFjdCBsaWtlIHRleHQgbm9kZXMpLCBvdGhl
ciB0ZW1wbGF0ZXMgb3INCi0gICAgICogZnVuY3Rpb25zIChzZWUgYmVsb3cpDQotICAgICAqDQot
ICAgICAqIEEgdGV4dCBub2RlIGlzIHJlcHJlc2VudGVkIGFzDQotICAgICAqDQotICAgICAqIFsi
e3RleHR9IiwgdmFsdWVdDQotICAgICAqDQotICAgICAqIFN0cmluZyB2YWx1ZXMgaGF2ZSBhIHNp
bXBsZSBzdWJzdGl0dXRpb24gc3ludGF4OyAke2Zvb30gcmVwcmVzZW50cyBhIHZhcmlhYmxlIGZv
by4NCi0gICAgICoNCi0gICAgICogSXQgaXMgcG9zc2libGUgdG8gZW1iZWQgbG9naWMgaW4gdGVt
cGxhdGVzIGJ5IHVzaW5nIGEgZnVuY3Rpb24gaW4gYSBwbGFjZSB3aGVyZSBhDQotICAgICAqIG5v
ZGUgd291bGQgdXN1YWxseSBnby4gVGhlIGZ1bmN0aW9uIG11c3QgZWl0aGVyIHJldHVybiBwYXJ0
IG9mIGEgdGVtcGxhdGUgb3IgbnVsbC4NCi0gICAgICoNCi0gICAgICogSW4gY2FzZXMgd2hlcmUg
YSBzZXQgb2Ygbm9kZXMgYXJlIHJlcXVpcmVkIGFzIG91dHB1dCByYXRoZXIgdGhhbiBhIHNpbmds
ZSBub2RlDQotICAgICAqIHdpdGggY2hpbGRyZW4gaXQgaXMgcG9zc2libGUgdG8ganVzdCB1c2Ug
YSBsaXN0DQotICAgICAqIFtub2RlMSwgbm9kZTIsIG5vZGUzXQ0KLSAgICAgKg0KLSAgICAgKiBV
c2FnZToNCi0gICAgICoNCi0gICAgICogcmVuZGVyKHRlbXBsYXRlLCBzdWJzdGl0dXRpb25zKSAt
IHRha2UgYSB0ZW1wbGF0ZSBhbmQgYW4gb2JqZWN0IG1hcHBpbmcNCi0gICAgICogdmFyaWFibGUg
bmFtZXMgdG8gcGFyYW1ldGVycyBhbmQgcmV0dXJuIGVpdGhlciBhIERPTSBub2RlIG9yIGEgbGlz
dCBvZiBET00gbm9kZXMNCi0gICAgICoNCi0gICAgICogc3Vic3RpdHV0ZSh0ZW1wbGF0ZSwgc3Vi
c3RpdHV0aW9ucykgLSB0YWtlIGEgdGVtcGxhdGUgYW5kIHZhcmlhYmxlIG1hcHBpbmcgb2JqZWN0
LA0KLSAgICAgKiBtYWtlIHRoZSB2YXJpYWJsZSBzdWJzdGl0dXRpb25zIGFuZCByZXR1cm4gdGhl
IHN1YnN0aXR1dGVkIHRlbXBsYXRlDQotICAgICAqDQotICAgICAqLw0KLQ0KLSAgICBmdW5jdGlv
biBpc19zaW5nbGVfbm9kZSh0ZW1wbGF0ZSkNCi0gICAgew0KLSAgICAgICAgcmV0dXJuIHR5cGVv
ZiB0ZW1wbGF0ZVswXSA9PT0gInN0cmluZyI7DQotICAgIH0NCi0NCi0gICAgZnVuY3Rpb24gc3Vi
c3RpdHV0ZSh0ZW1wbGF0ZSwgc3Vic3RpdHV0aW9ucykNCi0gICAgew0KLSAgICAgICAgaWYgKHR5
cGVvZiB0ZW1wbGF0ZSA9PT0gImZ1bmN0aW9uIikgew0KLSAgICAgICAgICAgIHZhciByZXBsYWNl
bWVudCA9IHRlbXBsYXRlKHN1YnN0aXR1dGlvbnMpOw0KLSAgICAgICAgICAgIGlmIChyZXBsYWNl
bWVudCkNCi0gICAgICAgICAgICB7DQotICAgICAgICAgICAgICAgIHZhciBydiA9IHN1YnN0aXR1
dGUocmVwbGFjZW1lbnQsIHN1YnN0aXR1dGlvbnMpOw0KLSAgICAgICAgICAgICAgICByZXR1cm4g
cnY7DQotICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgIGVsc2UNCi0gICAgICAgICAgICB7DQot
ICAgICAgICAgICAgICAgIHJldHVybiBudWxsOw0KLSAgICAgICAgICAgIH0NCi0gICAgICAgIH0N
Ci0gICAgICAgIGVsc2UgaWYgKGlzX3NpbmdsZV9ub2RlKHRlbXBsYXRlKSkNCi0gICAgICAgIHsN
Ci0gICAgICAgICAgICByZXR1cm4gc3Vic3RpdHV0ZV9zaW5nbGUodGVtcGxhdGUsIHN1YnN0aXR1
dGlvbnMpOw0KLSAgICAgICAgfQ0KLSAgICAgICAgZWxzZQ0KLSAgICAgICAgew0KLSAgICAgICAg
ICAgIHJldHVybiBmaWx0ZXIobWFwKHRlbXBsYXRlLCBmdW5jdGlvbih4KSB7DQotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBzdWJzdGl0dXRlKHgsIHN1YnN0aXR1dGlv
bnMpOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pLCBmdW5jdGlvbih4KSB7cmV0
dXJuIHggIT09IG51bGw7fSk7DQotICAgICAgICB9DQotICAgIH0NCi0NCi0gICAgZnVuY3Rpb24g
c3Vic3RpdHV0ZV9zaW5nbGUodGVtcGxhdGUsIHN1YnN0aXR1dGlvbnMpDQotICAgIHsNCi0gICAg
ICAgIHZhciBzdWJzdGl0dXRpb25fcmUgPSAvXCR7KFteIH1dKil9L2c7DQotDQotICAgICAgICBm
dW5jdGlvbiBkb19zdWJzdGl0dXRpb24oaW5wdXQpIHsNCi0gICAgICAgICAgICB2YXIgY29tcG9u
ZW50cyA9IGlucHV0LnNwbGl0KHN1YnN0aXR1dGlvbl9yZSk7DQotICAgICAgICAgICAgdmFyIHJ2
ID0gW107DQotICAgICAgICAgICAgZm9yICh2YXIgaT0wOyBpPGNvbXBvbmVudHMubGVuZ3RoOyBp
Kz0yKQ0KLSAgICAgICAgICAgIHsNCi0gICAgICAgICAgICAgICAgcnYucHVzaChjb21wb25lbnRz
W2ldKTsNCi0gICAgICAgICAgICAgICAgaWYgKGNvbXBvbmVudHNbaSsxXSkNCi0gICAgICAgICAg
ICAgICAgew0KLSAgICAgICAgICAgICAgICAgICAgcnYucHVzaChTdHJpbmcoc3Vic3RpdHV0aW9u
c1tjb21wb25lbnRzW2krMV1dKSk7DQotICAgICAgICAgICAgICAgIH0NCi0gICAgICAgICAgICB9
DQotICAgICAgICAgICAgcmV0dXJuIHJ2Ow0KLSAgICAgICAgfQ0KLQ0KLSAgICAgICAgdmFyIHJ2
ID0gW107DQotICAgICAgICBydi5wdXNoKGRvX3N1YnN0aXR1dGlvbihTdHJpbmcodGVtcGxhdGVb
MF0pKS5qb2luKCIiKSk7DQotDQotICAgICAgICBpZiAodGVtcGxhdGVbMF0gPT09ICJ7dGV4dH0i
KSB7DQotICAgICAgICAgICAgc3Vic3RpdHV0ZV9jaGlsZHJlbih0ZW1wbGF0ZS5zbGljZSgxKSwg
cnYpOw0KLSAgICAgICAgfSBlbHNlIHsNCi0gICAgICAgICAgICBzdWJzdGl0dXRlX2F0dHJzKHRl
bXBsYXRlWzFdLCBydik7DQotICAgICAgICAgICAgc3Vic3RpdHV0ZV9jaGlsZHJlbih0ZW1wbGF0
ZS5zbGljZSgyKSwgcnYpOw0KLSAgICAgICAgfQ0KLQ0KLSAgICAgICAgZnVuY3Rpb24gc3Vic3Rp
dHV0ZV9hdHRycyhhdHRycywgcnYpDQotICAgICAgICB7DQotICAgICAgICAgICAgcnZbMV0gPSB7
fTsNCi0gICAgICAgICAgICBmb3IgKHZhciBuYW1lIGluIHRlbXBsYXRlWzFdKQ0KLSAgICAgICAg
ICAgIHsNCi0gICAgICAgICAgICAgICAgaWYgKGF0dHJzLmhhc093blByb3BlcnR5KG5hbWUpKQ0K
LSAgICAgICAgICAgICAgICB7DQotICAgICAgICAgICAgICAgICAgICB2YXIgbmV3X25hbWUgPSBk
b19zdWJzdGl0dXRpb24obmFtZSkuam9pbigiIik7DQotICAgICAgICAgICAgICAgICAgICB2YXIg
bmV3X3ZhbHVlID0gZG9fc3Vic3RpdHV0aW9uKGF0dHJzW25hbWVdKS5qb2luKCIiKTsNCi0gICAg
ICAgICAgICAgICAgICAgIHJ2WzFdW25ld19uYW1lXSA9IG5ld192YWx1ZTsNCi0gICAgICAgICAg
ICAgICAgfTsNCi0gICAgICAgICAgICB9DQotICAgICAgICB9DQotDQotICAgICAgICBmdW5jdGlv
biBzdWJzdGl0dXRlX2NoaWxkcmVuKGNoaWxkcmVuLCBydikNCi0gICAgICAgIHsNCi0gICAgICAg
ICAgICBmb3IgKHZhciBpPTA7IGk8Y2hpbGRyZW4ubGVuZ3RoOyBpKyspDQotICAgICAgICAgICAg
ew0KLSAgICAgICAgICAgICAgICBpZiAoY2hpbGRyZW5baV0gaW5zdGFuY2VvZiBPYmplY3QpIHsN
Ci0gICAgICAgICAgICAgICAgICAgIHZhciByZXBsYWNlbWVudCA9IHN1YnN0aXR1dGUoY2hpbGRy
ZW5baV0sIHN1YnN0aXR1dGlvbnMpOw0KLSAgICAgICAgICAgICAgICAgICAgaWYgKHJlcGxhY2Vt
ZW50ICE9PSBudWxsKQ0KLSAgICAgICAgICAgICAgICAgICAgew0KLSAgICAgICAgICAgICAgICAg
ICAgICAgIGlmIChpc19zaW5nbGVfbm9kZShyZXBsYWNlbWVudCkpDQotICAgICAgICAgICAgICAg
ICAgICAgICAgew0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBydi5wdXNoKHJlcGxhY2Vt
ZW50KTsNCi0gICAgICAgICAgICAgICAgICAgICAgICB9DQotICAgICAgICAgICAgICAgICAgICAg
ICAgZWxzZQ0KLSAgICAgICAgICAgICAgICAgICAgICAgIHsNCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgZXh0ZW5kKHJ2LCByZXBsYWNlbWVudCk7DQotICAgICAgICAgICAgICAgICAgICAg
ICAgfQ0KLSAgICAgICAgICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgICAgICB9DQotICAgICAg
ICAgICAgICAgIGVsc2UNCi0gICAgICAgICAgICAgICAgew0KLSAgICAgICAgICAgICAgICAgICAg
ZXh0ZW5kKHJ2LCBkb19zdWJzdGl0dXRpb24oU3RyaW5nKGNoaWxkcmVuW2ldKSkpOw0KLSAgICAg
ICAgICAgICAgICB9DQotICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgIHJldHVybiBydjsNCi0g
ICAgICAgIH0NCi0NCi0gICAgICAgIHJldHVybiBydjsNCi0gICAgfQ0KLQ0KLSBmdW5jdGlvbiBt
YWtlX2RvbV9zaW5nbGUodGVtcGxhdGUsIGRvYykNCi0gew0KLSAgICAgdmFyIG91dHB1dF9kb2N1
bWVudCA9IGRvYyB8fCBkb2N1bWVudDsNCi0gICAgIGlmICh0ZW1wbGF0ZVswXSA9PT0gInt0ZXh0
fSIpDQotICAgICB7DQotICAgICAgICAgdmFyIGVsZW1lbnQgPSBvdXRwdXRfZG9jdW1lbnQuY3Jl
YXRlVGV4dE5vZGUoIiIpOw0KLSAgICAgICAgIGZvciAodmFyIGk9MTsgaTx0ZW1wbGF0ZS5sZW5n
dGg7IGkrKykNCi0gICAgICAgICB7DQotICAgICAgICAgICAgIGVsZW1lbnQuZGF0YSArPSB0ZW1w
bGF0ZVtpXTsNCi0gICAgICAgICB9DQotICAgICB9DQotICAgICBlbHNlDQotICAgICB7DQotICAg
ICAgICAgdmFyIGVsZW1lbnQgPSBvdXRwdXRfZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKHhodG1s
X25zLCB0ZW1wbGF0ZVswXSk7DQotICAgICAgICAgZm9yICh2YXIgbmFtZSBpbiB0ZW1wbGF0ZVsx
XSkgew0KLSAgICAgICAgICAgICBpZiAodGVtcGxhdGVbMV0uaGFzT3duUHJvcGVydHkobmFtZSkp
DQotICAgICAgICAgICAgIHsNCi0gICAgICAgICAgICAgICAgIGVsZW1lbnQuc2V0QXR0cmlidXRl
KG5hbWUsIHRlbXBsYXRlWzFdW25hbWVdKTsNCi0gICAgICAgICAgICAgfQ0KLSAgICAgICAgIH0N
Ci0gICAgICAgICBmb3IgKHZhciBpPTI7IGk8dGVtcGxhdGUubGVuZ3RoOyBpKyspDQotICAgICAg
ICAgew0KLSAgICAgICAgICAgICBpZiAodGVtcGxhdGVbaV0gaW5zdGFuY2VvZiBPYmplY3QpDQot
ICAgICAgICAgICAgIHsNCi0gICAgICAgICAgICAgICAgIHZhciBzdWJfZWxlbWVudCA9IG1ha2Vf
ZG9tKHRlbXBsYXRlW2ldKTsNCi0gICAgICAgICAgICAgICAgIGVsZW1lbnQuYXBwZW5kQ2hpbGQo
c3ViX2VsZW1lbnQpOw0KLSAgICAgICAgICAgICB9DQotICAgICAgICAgICAgIGVsc2UNCi0gICAg
ICAgICAgICAgew0KLSAgICAgICAgICAgICAgICAgdmFyIHRleHRfbm9kZSA9IG91dHB1dF9kb2N1
bWVudC5jcmVhdGVUZXh0Tm9kZSh0ZW1wbGF0ZVtpXSk7DQotICAgICAgICAgICAgICAgICBlbGVt
ZW50LmFwcGVuZENoaWxkKHRleHRfbm9kZSk7DQotICAgICAgICAgICAgIH0NCi0gICAgICAgICB9
DQotICAgICB9DQotDQotICAgICByZXR1cm4gZWxlbWVudDsNCi0gfQ0KLQ0KLQ0KLQ0KLSBmdW5j
dGlvbiBtYWtlX2RvbSh0ZW1wbGF0ZSwgc3Vic3RpdHV0aW9ucywgb3V0cHV0X2RvY3VtZW50KQ0K
LSAgICB7DQotICAgICAgICBpZiAoaXNfc2luZ2xlX25vZGUodGVtcGxhdGUpKQ0KLSAgICAgICAg
ew0KLSAgICAgICAgICAgIHJldHVybiBtYWtlX2RvbV9zaW5nbGUodGVtcGxhdGUsIG91dHB1dF9k
b2N1bWVudCk7DQotICAgICAgICB9DQotICAgICAgICBlbHNlDQotICAgICAgICB7DQotICAgICAg
ICAgICAgcmV0dXJuIG1hcCh0ZW1wbGF0ZSwgZnVuY3Rpb24oeCkgew0KLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHJldHVybiBtYWtlX2RvbV9zaW5nbGUoeCwgb3V0cHV0X2RvY3VtZW50KTsN
Ci0gICAgICAgICAgICAgICAgICAgICAgIH0pOw0KLSAgICAgICAgfQ0KLSAgICB9DQotDQotIGZ1
bmN0aW9uIHJlbmRlcih0ZW1wbGF0ZSwgc3Vic3RpdHV0aW9ucywgb3V0cHV0X2RvY3VtZW50KQ0K
LSAgICB7DQotICAgICAgICByZXR1cm4gbWFrZV9kb20oc3Vic3RpdHV0ZSh0ZW1wbGF0ZSwgc3Vi
c3RpdHV0aW9ucyksIG91dHB1dF9kb2N1bWVudCk7DQotICAgIH0NCi0NCi0gICAgLyoNCi0gICAg
ICogVXRpbGl0eSBmdW5jaW9ucw0KLSAgICAgKi8NCi0gICAgZnVuY3Rpb24gYXNzZXJ0KGV4cGVj
dGVkX3RydWUsIGZ1bmN0aW9uX25hbWUsIGRlc2NyaXB0aW9uLCBlcnJvciwgc3Vic3RpdHV0aW9u
cykNCi0gICAgew0KLSAgICAgICAgaWYgKGV4cGVjdGVkX3RydWUgIT09IHRydWUpDQotICAgICAg
ICB7DQotICAgICAgICAgICAgdGhyb3cgbmV3IEFzc2VydGlvbkVycm9yKG1ha2VfbWVzc2FnZShm
dW5jdGlvbl9uYW1lLCBkZXNjcmlwdGlvbiwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGVycm9yLCBzdWJzdGl0dXRpb25zKSk7DQotICAgICAgICB9
DQotICAgIH0NCi0NCi0gICAgZnVuY3Rpb24gQXNzZXJ0aW9uRXJyb3IobWVzc2FnZSkNCi0gICAg
ew0KLSAgICAgICAgdGhpcy5tZXNzYWdlID0gbWVzc2FnZTsNCi0gICAgfQ0KLQ0KLSAgICBmdW5j
dGlvbiBtYWtlX21lc3NhZ2UoZnVuY3Rpb25fbmFtZSwgZGVzY3JpcHRpb24sIGVycm9yLCBzdWJz
dGl0dXRpb25zKQ0KLSAgICB7DQotICAgICAgICBmb3IgKHZhciBwIGluIHN1YnN0aXR1dGlvbnMp
IHsNCi0gICAgICAgICAgICBpZiAoc3Vic3RpdHV0aW9ucy5oYXNPd25Qcm9wZXJ0eShwKSkgew0K
LSAgICAgICAgICAgICAgICBzdWJzdGl0dXRpb25zW3BdID0gZm9ybWF0X3ZhbHVlKHN1YnN0aXR1
dGlvbnNbcF0pOw0KLSAgICAgICAgICAgIH0NCi0gICAgICAgIH0NCi0gICAgICAgIHZhciBub2Rl
X2Zvcm0gPSBzdWJzdGl0dXRlKFsie3RleHR9IiwgIiR7ZnVuY3Rpb25fbmFtZX06ICR7ZGVzY3Jp
cHRpb259IiArIGVycm9yXSwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1l
cmdlKHtmdW5jdGlvbl9uYW1lOmZ1bmN0aW9uX25hbWUsDQotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgZGVzY3JpcHRpb246KGRlc2NyaXB0aW9uP2Rlc2NyaXB0aW9u
ICsgIiAiOiIiKX0sDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
c3Vic3RpdHV0aW9ucykpOw0KLSAgICAgICAgcmV0dXJuIG5vZGVfZm9ybS5zbGljZSgxKS5qb2lu
KCIiKTsNCi0gICAgfQ0KLQ0KLSAgICBmdW5jdGlvbiBmaWx0ZXIoYXJyYXksIGNhbGxhYmxlLCB0
aGlzT2JqKSB7DQotICAgICAgICB2YXIgcnYgPSBbXTsNCi0gICAgICAgIGZvciAodmFyIGk9MDsg
aTxhcnJheS5sZW5ndGg7IGkrKykNCi0gICAgICAgIHsNCi0gICAgICAgICAgICBpZiAoYXJyYXku
aGFzT3duUHJvcGVydHkoaSkpDQotICAgICAgICAgICAgew0KLSAgICAgICAgICAgICAgICB2YXIg
cGFzcyA9IGNhbGxhYmxlLmNhbGwodGhpc09iaiwgYXJyYXlbaV0sIGksIGFycmF5KTsNCi0gICAg
ICAgICAgICAgICAgaWYgKHBhc3MpIHsNCi0gICAgICAgICAgICAgICAgICAgIHJ2LnB1c2goYXJy
YXlbaV0pOw0KLSAgICAgICAgICAgICAgICB9DQotICAgICAgICAgICAgfQ0KLSAgICAgICAgfQ0K
LSAgICAgICAgcmV0dXJuIHJ2Ow0KLSAgICB9DQotDQotICAgIGZ1bmN0aW9uIG1hcChhcnJheSwg
Y2FsbGFibGUsIHRoaXNPYmopDQotICAgIHsNCi0gICAgICAgIHZhciBydiA9IFtdOw0KLSAgICAg
ICAgcnYubGVuZ3RoID0gYXJyYXkubGVuZ3RoOw0KLSAgICAgICAgZm9yICh2YXIgaT0wOyBpPGFy
cmF5Lmxlbmd0aDsgaSsrKQ0KLSAgICAgICAgew0KLSAgICAgICAgICAgIGlmIChhcnJheS5oYXNP
d25Qcm9wZXJ0eShpKSkNCi0gICAgICAgICAgICB7DQotICAgICAgICAgICAgICAgIHJ2W2ldID0g
Y2FsbGFibGUuY2FsbCh0aGlzT2JqLCBhcnJheVtpXSwgaSwgYXJyYXkpOw0KLSAgICAgICAgICAg
IH0NCi0gICAgICAgIH0NCi0gICAgICAgIHJldHVybiBydjsNCi0gICAgfQ0KLQ0KLSAgICBmdW5j
dGlvbiBleHRlbmQoYXJyYXksIGl0ZW1zKQ0KLSAgICB7DQotICAgICAgICBBcnJheS5wcm90b3R5
cGUucHVzaC5hcHBseShhcnJheSwgaXRlbXMpOw0KLSAgICB9DQotDQotICAgIGZ1bmN0aW9uIGZv
ckVhY2ggKGFycmF5LCBjYWxsYmFjaywgdGhpc09iaikNCi0gICAgew0KLSAgICAgICAgZm9yICh2
YXIgaT0wOyBpPGFycmF5Lmxlbmd0aDsgaSsrKQ0KLSAgICAgICAgew0KLSAgICAgICAgICAgIGlm
IChhcnJheS5oYXNPd25Qcm9wZXJ0eShpKSkNCi0gICAgICAgICAgICB7DQotICAgICAgICAgICAg
ICAgIGNhbGxiYWNrLmNhbGwodGhpc09iaiwgYXJyYXlbaV0sIGksIGFycmF5KTsNCi0gICAgICAg
ICAgICB9DQotICAgICAgICB9DQotICAgIH0NCi0NCi0gICAgZnVuY3Rpb24gbWVyZ2UoYSxiKQ0K
LSAgICB7DQotICAgICAgICB2YXIgcnYgPSB7fTsNCi0gICAgICAgIHZhciBwOw0KLSAgICAgICAg
Zm9yIChwIGluIGEpDQotICAgICAgICB7DQotICAgICAgICAgICAgcnZbcF0gPSBhW3BdOw0KLSAg
ICAgICAgfQ0KLSAgICAgICAgZm9yIChwIGluIGIpIHsNCi0gICAgICAgICAgICBydltwXSA9IGJb
cF07DQotICAgICAgICB9DQotICAgICAgICByZXR1cm4gcnY7DQotICAgIH0NCi0NCi0gICAgZnVu
Y3Rpb24gZXhwb3NlKG9iamVjdCwgbmFtZSkNCi0gICAgew0KLSAgICAgICAgdmFyIGNvbXBvbmVu
dHMgPSBuYW1lLnNwbGl0KCIuIik7DQotICAgICAgICB2YXIgdGFyZ2V0ID0gd2luZG93Ow0KLSAg
ICAgICAgZm9yICh2YXIgaT0wOyBpPGNvbXBvbmVudHMubGVuZ3RoIC0gMTsgaSsrKQ0KLSAgICAg
ICAgew0KLSAgICAgICAgICAgIGlmICghKGNvbXBvbmVudHNbaV0gaW4gdGFyZ2V0KSkNCi0gICAg
ICAgICAgICB7DQotICAgICAgICAgICAgICAgIHRhcmdldFtjb21wb25lbnRzW2ldXSA9IHt9Ow0K
LSAgICAgICAgICAgIH0NCi0gICAgICAgICAgICB0YXJnZXQgPSB0YXJnZXRbY29tcG9uZW50c1tp
XV07DQotICAgICAgICB9DQotICAgICAgICB0YXJnZXRbY29tcG9uZW50c1tjb21wb25lbnRzLmxl
bmd0aCAtIDFdXSA9IG9iamVjdDsNCi0gICAgfQ0KLQ0KLSAgICBmdW5jdGlvbiBmb3JFYWNoX3dp
bmRvd3MoY2FsbGJhY2spIHsNCi0gICAgICAgIC8vIEl0ZXJhdGUgb2YgdGhlIHRoZSB3aW5kb3dz
IFtzZWxmIC4uLiB0b3AsIG9wZW5lcl0uIFRoZSBjYWxsYmFjayBpcyBwYXNzZWQNCi0gICAgICAg
IC8vIHR3byBvYmplY3RzLCB0aGUgZmlyc3Qgb25lIGlzIHRoZSB3aW5kb3dzIG9iamVjdCBpdHNl
bGYsIHRoZSBzZWNvbmQgb25lDQotICAgICAgICAvLyBpcyBhIGJvb2xlYW4gaW5kaWNhdGluZyB3
aGV0aGVyIG9yIG5vdCBpdHMgb24gdGhlIHNhbWUgb3JpZ2luIGFzIHRoZQ0KLSAgICAgICAgLy8g
Y3VycmVudCB3aW5kb3cuDQotICAgICAgICB2YXIgY2FjaGUgPSBmb3JFYWNoX3dpbmRvd3MucmVz
dWx0X2NhY2hlOw0KLSAgICAgICAgaWYgKCFjYWNoZSkgew0KLSAgICAgICAgICAgIGNhY2hlID0g
W1tzZWxmLCB0cnVlXV07DQotICAgICAgICAgICAgdmFyIHcgPSBzZWxmOw0KLSAgICAgICAgICAg
IHZhciBpID0gMDsNCi0gICAgICAgICAgICB2YXIgc287DQotICAgICAgICAgICAgdmFyIG9yaWdp
bnMgPSBsb2NhdGlvbi5hbmNlc3Rvck9yaWdpbnM7DQotICAgICAgICAgICAgd2hpbGUgKHcgIT0g
dy5wYXJlbnQpDQotICAgICAgICAgICAgew0KLSAgICAgICAgICAgICAgICB3ID0gdy5wYXJlbnQ7
DQotICAgICAgICAgICAgICAgIC8vIEluIFdlYktpdCwgY2FsbHMgdG8gcGFyZW50IHdpbmRvd3Mn
IHByb3BlcnRpZXMgdGhhdCBhcmVuJ3Qgb24gdGhlIHNhbWUNCi0gICAgICAgICAgICAgICAgLy8g
b3JpZ2luIGNhdXNlIGFuIGVycm9yIG1lc3NhZ2UgdG8gYmUgZGlzcGxheWVkIGluIHRoZSBlcnJv
ciBjb25zb2xlIGJ1dA0KLSAgICAgICAgICAgICAgICAvLyBkb24ndCB0aHJvdyBhbiBleGNlcHRp
b24uIFRoaXMgaXMgYSBkZXZpYXRpb24gZnJvbSB0aGUgY3VycmVudCBIVE1MNQ0KLSAgICAgICAg
ICAgICAgICAvLyBzcGVjLiBTZWU6IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD00MzUwNA0KLSAgICAgICAgICAgICAgICAvLyBUaGUgcHJvYmxlbSB3aXRoIFdlYktpdCdz
IGJlaGF2aW9yIGlzIHRoYXQgaXQgcG9sbHV0ZXMgdGhlIGVycm9yIGNvbnNvbGUNCi0gICAgICAg
ICAgICAgICAgLy8gd2l0aCBlcnJvciBtZXNzYWdlcyB0aGF0IGNhbid0IGJlIGNhdWdodC4NCi0g
ICAgICAgICAgICAgICAgLy8NCi0gICAgICAgICAgICAgICAgLy8gVGhpcyBpc3N1ZSBjYW4gYmUg
bWl0aWdhdGVkIGJ5IHJlbHlpbmcgb24gdGhlIChmb3Igbm93KSBwcm9wcmlldGFyeQ0KLSAgICAg
ICAgICAgICAgICAvLyBgbG9jYXRpb24uYW5jZXN0b3JPcmlnaW5zYCBwcm9wZXJ0eSB3aGljaCBy
ZXR1cm5zIGFuIG9yZGVyZWQgbGlzdCBvZg0KLSAgICAgICAgICAgICAgICAvLyB0aGUgb3JpZ2lu
cyBvZiBlbmNsb3Npbmcgd2luZG93cy4gU2VlOg0KLSAgICAgICAgICAgICAgICAvLyBodHRwOi8v
dHJhYy53ZWJraXQub3JnL2NoYW5nZXNldC8xMTM5NDUuDQotICAgICAgICAgICAgICAgIGlmKG9y
aWdpbnMpIHsNCi0gICAgICAgICAgICAgICAgICAgIHNvID0gKGxvY2F0aW9uLm9yaWdpbiA9PSBv
cmlnaW5zW2ldKTsNCi0gICAgICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgICAgICBlbHNlDQot
ICAgICAgICAgICAgICAgIHsNCi0gICAgICAgICAgICAgICAgICAgIHNvID0gaXNfc2FtZV9vcmln
aW4odyk7DQotICAgICAgICAgICAgICAgIH0NCi0gICAgICAgICAgICAgICAgY2FjaGUucHVzaChb
dywgc29dKTsNCi0gICAgICAgICAgICAgICAgaSsrOw0KLSAgICAgICAgICAgIH0NCi0gICAgICAg
ICAgICB3ID0gd2luZG93Lm9wZW5lcjsNCi0gICAgICAgICAgICBpZih3KQ0KLSAgICAgICAgICAg
IHsNCi0gICAgICAgICAgICAgICAgLy8gd2luZG93Lm9wZW5lciBpc24ndCBpbmNsdWRlZCBpbiB0
aGUgYGxvY2F0aW9uLmFuY2VzdG9yT3JpZ2luc2AgcHJvcC4NCi0gICAgICAgICAgICAgICAgLy8g
V2UnbGwganVzdCBoYXZlIHRvIGRlYWwgd2l0aCBhIHNpbXBsZSBjaGVjayBhbmQgYW4gZXJyb3Ig
bXNnIG9uIFdlYktpdA0KLSAgICAgICAgICAgICAgICAvLyBicm93c2VycyBpbiB0aGlzIGNhc2Uu
DQotICAgICAgICAgICAgICAgIGNhY2hlLnB1c2goW3csIGlzX3NhbWVfb3JpZ2luKHcpXSk7DQot
ICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgIGZvckVhY2hfd2luZG93cy5yZXN1bHRfY2FjaGUg
PSBjYWNoZTsNCi0gICAgICAgIH0NCi0NCi0gICAgICAgIGZvckVhY2goY2FjaGUsDQotICAgICAg
ICAgICAgICAgIGZ1bmN0aW9uKGEpDQotICAgICAgICAgICAgICAgIHsNCi0gICAgICAgICAgICAg
ICAgICAgIGNhbGxiYWNrLmFwcGx5KG51bGwsIGEpOw0KLSAgICAgICAgICAgICAgICB9KTsNCi0g
ICAgfQ0KLQ0KLSAgICBmdW5jdGlvbiBpc19zYW1lX29yaWdpbih3KSB7DQotICAgICAgICB0cnkg
ew0KLSAgICAgICAgICAgICdyYW5kb21fcHJvcCcgaW4gdzsNCi0gICAgICAgICAgICByZXR1cm4g
dHJ1ZTsNCi0gICAgICAgIH0gY2F0Y2goZSkgew0KLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsN
Ci0gICAgICAgIH0NCi0gICAgfQ0KLQ0KLSAgICBmdW5jdGlvbiBzdXBwb3J0c19wb3N0X21lc3Nh
Z2UodykNCi0gICAgew0KLSAgICAgICAgdmFyIHN1cHBvcnRzOw0KLSAgICAgICAgdmFyIHR5cGU7
DQotICAgICAgICAvLyBHaXZlbiBJRSAgaW1wbGVtZW50cyBwb3N0TWVzc2FnZSBhY3Jvc3MgbmVz
dGVkIGlmcmFtZXMgYnV0IG5vdCBhY3Jvc3MNCi0gICAgICAgIC8vIHdpbmRvd3Mgb3IgdGFicywg
eW91IGNhbid0IGluZmVyIGNyb3NzLW9yaWdpbiBjb21tdW5pY2F0aW9uIGZyb20gdGhlIHByZXNl
bmNlDQotICAgICAgICAvLyBvZiBwb3N0TWVzc2FnZSBvbiB0aGUgY3VycmVudCB3aW5kb3cgb2Jq
ZWN0IG9ubHkuDQotICAgICAgICAvLw0KLSAgICAgICAgLy8gVG91Y2hpbmcgdGhlIHBvc3RNZXNz
YWdlIHByb3Agb24gYSB3aW5kb3cgY2FuIHRocm93IGlmIHRoZSB3aW5kb3cgaXMNCi0gICAgICAg
IC8vIG5vdCBmcm9tIHRoZSBzYW1lIG9yaWdpbiBBTkQgcG9zdCBtZXNzYWdlIGlzIG5vdCBzdXBw
b3J0ZWQgaW4gdGhhdA0KLSAgICAgICAgLy8gYnJvd3Nlci4gU28ganVzdCBkb2luZyBhbiBleGlz
dGVuY2UgdGVzdCBoZXJlIHdvbid0IGRvLCB5b3UgYWxzbyBuZWVkDQotICAgICAgICAvLyB0byB3
cmFwIGl0IGluIGEgdHJ5Li5jYWN0aCBibG9jay4NCi0gICAgICAgIHRyeQ0KLSAgICAgICAgew0K
LSAgICAgICAgICAgIHR5cGUgPSB0eXBlb2Ygdy5wb3N0TWVzc2FnZTsNCi0gICAgICAgICAgICBp
ZiAodHlwZSA9PT0gImZ1bmN0aW9uIikNCi0gICAgICAgICAgICB7DQotICAgICAgICAgICAgICAg
IHN1cHBvcnRzID0gdHJ1ZTsNCi0gICAgICAgICAgICB9DQotICAgICAgICAgICAgLy8gSUU4IHN1
cHBvcnRzIHBvc3RNZXNzYWdlLCBidXQgaW1wbGVtZW50cyBpdCBhcyBhIGhvc3Qgb2JqZWN0IHdo
aWNoDQotICAgICAgICAgICAgLy8gcmV0dXJucyAib2JqZWN0IiBhcyBpdHMgYHR5cGVvZmAuDQot
ICAgICAgICAgICAgZWxzZSBpZiAodHlwZSA9PT0gIm9iamVjdCIpDQotICAgICAgICAgICAgew0K
LSAgICAgICAgICAgICAgICBzdXBwb3J0cyA9IHRydWU7DQotICAgICAgICAgICAgfQ0KLSAgICAg
ICAgICAgIC8vIFRoaXMgaXMgdGhlIGNhc2Ugd2hlcmUgcG9zdE1lc3NhZ2UgaXNuJ3Qgc3VwcG9y
dGVkIEFORCBhY2Nlc3NpbmcgYQ0KLSAgICAgICAgICAgIC8vIHdpbmRvdyBwcm9wZXJ0eSBhY3Jv
c3Mgb3JpZ2lucyBkb2VzIE5PVCB0aHJvdyAoZS5nLiBvbGQgU2FmYXJpIGJyb3dzZXIpLg0KLSAg
ICAgICAgICAgIGVsc2UNCi0gICAgICAgICAgICB7DQotICAgICAgICAgICAgICAgIHN1cHBvcnRz
ID0gZmFsc2U7DQotICAgICAgICAgICAgfQ0KLSAgICAgICAgfQ0KLSAgICAgICAgY2F0Y2goZSkg
ew0KLSAgICAgICAgICAgIC8vIFRoaXMgaXMgdGhlIGNhc2Ugd2hlcmUgcG9zdE1lc3NhZ2UgaXNu
J3Qgc3VwcG9ydGVkIEFORCBhY2Nlc3NpbmcgYQ0KLSAgICAgICAgICAgIC8vIHdpbmRvdyBwcm9w
ZXJ0eSBhY3Jvc3Mgb3JpZ2lucyB0aHJvd3MgKGUuZy4gb2xkIEZpcmVmb3ggYnJvd3NlcikuDQot
ICAgICAgICAgICAgc3VwcG9ydHMgPSBmYWxzZTsNCi0gICAgICAgIH0NCi0gICAgICAgIHJldHVy
biBzdXBwb3J0czsNCi0gICAgfQ0KLX0pKCk7DQotLy8gdmltOiBzZXQgZXhwYW5kdGFiIHNoaWZ0
d2lkdGg9NCB0YWJzdG9wPTQ6DQorLyoKK0Rpc3RyaWJ1dGVkIHVuZGVyIGJvdGggdGhlIFczQyBU
ZXN0IFN1aXRlIExpY2Vuc2UgWzFdIGFuZCB0aGUgVzNDCiszLWNsYXVzZSBCU0QgTGljZW5zZSBb
Ml0uIFRvIGNvbnRyaWJ1dGUgdG8gYSBXM0MgVGVzdCBTdWl0ZSwgc2VlIHRoZQorcG9saWNpZXMg
YW5kIGNvbnRyaWJ1dGlvbiBmb3JtcyBbM10uCisKK1sxXSBodHRwOi8vd3d3LnczLm9yZy9Db25z
b3J0aXVtL0xlZ2FsLzIwMDgvMDQtdGVzdHN1aXRlLWxpY2Vuc2UKK1syXSBodHRwOi8vd3d3Lncz
Lm9yZy9Db25zb3J0aXVtL0xlZ2FsLzIwMDgvMDMtYnNkLWxpY2Vuc2UKK1szXSBodHRwOi8vd3d3
LnczLm9yZy8yMDA0LzEwLzI3LXRlc3RjYXNlcworKi8KKworLyoKKyAqID09IEludHJvZHVjdGlv
biA9PQorICoKKyAqIFRoaXMgZmlsZSBwcm92aWRlcyBhIGZyYW1ld29yayBmb3Igd3JpdGluZyB0
ZXN0Y2FzZXMuIEl0IGlzIGludGVuZGVkIHRvCisgKiBwcm92aWRlIGEgY29udmVuaWVudCBBUEkg
Zm9yIG1ha2luZyBjb21tb24gYXNzZXJ0aW9ucywgYW5kIHRvIHdvcmsgYm90aAorICogZm9yIHRl
c3Rpbmcgc3luY2hyb25vdXMgYW5kIGFzeW5jaHJvbm91cyBET00gZmVhdHVyZXMgaW4gYSB3YXkg
dGhhdAorICogcHJvbW90ZXMgY2xlYXIsIHJvYnVzdCwgdGVzdHMuCisgKgorICogPT0gQmFzaWMg
VXNhZ2UgPT0KKyAqCisgKiBUbyB1c2UgdGhpcyBmaWxlLCBpbXBvcnQgdGhlIHNjcmlwdCBhbmQg
dGhlIHRlc3RoYXJuZXNzcmVwb3J0IHNjcmlwdCBpbnRvCisgKiB0aGUgdGVzdCBkb2N1bWVudDoK
KyAqIDxzY3JpcHQgc3JjPSIvcmVzb3VyY2VzL3Rlc3RoYXJuZXNzLmpzIj48L3NjcmlwdD4KKyAq
IDxzY3JpcHQgc3JjPSIvcmVzb3VyY2VzL3Rlc3RoYXJuZXNzcmVwb3J0LmpzIj48L3NjcmlwdD4K
KyAqCisgKiBXaXRoaW4gZWFjaCBmaWxlIG9uZSBtYXkgZGVmaW5lIG9uZSBvciBtb3JlIHRlc3Rz
LiBFYWNoIHRlc3QgaXMgYXRvbWljCisgKiBpbiB0aGUgc2Vuc2UgdGhhdCBhIHNpbmdsZSB0ZXN0
IGhhcyBhIHNpbmdsZSByZXN1bHQgKHBhc3MvZmFpbC90aW1lb3V0KS4KKyAqIFdpdGhpbiBlYWNo
IHRlc3Qgb25lIG1heSBoYXZlIGEgbnVtYmVyIG9mIGFzc2VydHMuIFRoZSB0ZXN0IGZhaWxzIGF0
IHRoZQorICogZmlyc3QgZmFpbGluZyBhc3NlcnQsIGFuZCB0aGUgcmVtYWluZGVyIG9mIHRoZSB0
ZXN0IGlzICh0eXBpY2FsbHkpIG5vdCBydW4uCisgKgorICogSWYgdGhlIGZpbGUgY29udGFpbmlu
ZyB0aGUgdGVzdHMgaXMgYSBIVE1MIGZpbGUgd2l0aCBhbiBlbGVtZW50IG9mIGlkICJsb2ciCisg
KiB0aGlzIHdpbGwgYmUgcG9wdWxhdGVkIHdpdGggYSB0YWJsZSBjb250YWluaW5nIHRoZSB0ZXN0
IHJlc3VsdHMgYWZ0ZXIgYWxsCisgKiB0aGUgdGVzdHMgaGF2ZSBydW4uCisgKgorICogTk9URTog
QnkgZGVmYXVsdCB0ZXN0cyBtdXN0IGJlIGNyZWF0ZWQgYmVmb3JlIHRoZSBsb2FkIGV2ZW50IGZp
cmVzLiBGb3Igd2F5cworICogICAgICAgdG8gY3JlYXRlIHRlc3RzIGFmdGVyIHRoZSBsb2FkIGV2
ZW50LCBzZWUgIkRldGVybWluaW5nIHdoZW4gYWxsIHRlc3RzCisgKiAgICAgICBhcmUgY29tcGxl
dGUiLCBiZWxvdworICoKKyAqID09IFN5bmNocm9ub3VzIFRlc3RzID09CisgKgorICogVG8gY3Jl
YXRlIGEgc3luY2hyb25vdXMgdGVzdCB1c2UgdGhlIHRlc3QoKSBmdW5jdGlvbjoKKyAqCisgKiB0
ZXN0KHRlc3RfZnVuY3Rpb24sIG5hbWUsIHByb3BlcnRpZXMpCisgKgorICogdGVzdF9mdW5jdGlv
biBpcyBhIGZ1bmN0aW9uIHRoYXQgY29udGFpbnMgdGhlIGNvZGUgdG8gdGVzdC4gRm9yIGV4YW1w
bGUgYQorICogdHJpdmlhbCBwYXNzaW5nIHRlc3Qgd291bGQgYmU6CisgKgorICogdGVzdChmdW5j
dGlvbigpIHthc3NlcnRfdHJ1ZSh0cnVlKX0sICJhc3NlcnRfdHJ1ZSB3aXRoIHRydWUiKQorICoK
KyAqIFRoZSBmdW5jdGlvbiBwYXNzZWQgaW4gaXMgcnVuIGluIHRoZSB0ZXN0KCkgY2FsbC4KKyAq
CisgKiBwcm9wZXJ0aWVzIGlzIGFuIG9iamVjdCB0aGF0IG92ZXJyaWRlcyBkZWZhdWx0IHRlc3Qg
cHJvcGVydGllcy4gVGhlCisgKiByZWNvZ25pc2VkIHByb3BlcnRpZXMgYXJlOgorICogICAgdGlt
ZW91dCAtIHRoZSB0ZXN0IHRpbWVvdXQgaW4gbXMKKyAqCisgKiBlLmcuCisgKiB0ZXN0KHRlc3Rf
ZnVuY3Rpb24sICJTYW1wbGUgdGVzdCIsIHt0aW1lb3V0OjEwMDB9KQorICoKKyAqIHdvdWxkIHJ1
biB0ZXN0X2Z1bmN0aW9uIHdpdGggYSB0aW1lb3V0IG9mIDFzLgorICoKKyAqIEFkZGl0aW9uYWxs
eSwgdGVzdC1zcGVjaWZpYyBtZXRhZGF0YSBjYW4gYmUgcGFzc2VkIGluIHRoZSBwcm9wZXJ0aWVz
LiBUaGVzZQorICogYXJlIHVzZWQgd2hlbiB0aGUgaW5kaXZpZHVhbCB0ZXN0IGhhcyBkaWZmZXJl
bnQgbWV0YWRhdGEgZnJvbSB0aGF0IHN0b3JlZAorICogaW4gdGhlIDxoZWFkPi4KKyAqIFRoZSBy
ZWNvZ25pemVkIG1ldGFkYXRhIHByb3BlcnRpZXMgYXJlOgorICoKKyAqICAgIGhlbHAgLSBUaGUg
dXJsIG9yIGFuIGFycmF5IG9mIHVybHMgb2YgdGhlIHBhcnQocykgb2YgdGhlIHNwZWNpZmljYXRp
b24ocykKKyAqICAgICAgICAgICBiZWluZyB0ZXN0ZWQKKyAqCisgKiAgICBhc3NlcnQgLSBBIGh1
bWFuIHJlYWRhYmxlIGRlc2NyaXB0aW9uIG9mIHdoYXQgdGhlIHRlc3QgaXMgYXR0ZW1wdGluZwor
ICogICAgICAgICAgICAgdG8gcHJvdmUKKyAqCisgKiAgICBhdXRob3IgLSBOYW1lIGFuZCBjb250
YWN0IGluZm9ybWF0aW9uIGZvciB0aGUgYXV0aG9yIG9mIHRoZSB0ZXN0IGluIHRoZQorICogICAg
ICAgICAgICAgZm9ybWF0OiAiTmFtZSA8ZW1haWxfYWRkcj4iIG9yICJOYW1lIGh0dHA6Ly9jb250
YWN0L3VybCIKKyAqCisgKiA9PSBBc3luY2hyb25vdXMgVGVzdHMgPT0KKyAqCisgKiBUZXN0aW5n
IGFzeW5jaHJvbm91cyBmZWF0dXJlcyBpcyBzb21ld2hhdCBtb3JlIGNvbXBsZXggc2luY2UgdGhl
IHJlc3VsdCBvZgorICogYSB0ZXN0IG1heSBkZXBlbmQgb24gb25lIG9yIG1vcmUgZXZlbnRzIG9y
IG90aGVyIGNhbGxiYWNrcy4gVGhlIEFQSSBwcm92aWRlZAorICogZm9yIHRlc3RpbmcgdGhlc2Ug
ZmVhdHVyZXMgaXMgaW5kZW5kZWQgdG8gYmUgcmF0aGVyIGxvdy1sZXZlbCBidXQgaG9wZWZ1bGx5
CisgKiBhcHBsaWNhYmxlIHRvIG1hbnkgc2l0dWF0aW9ucy4KKyAqCisgKiBUbyBjcmVhdGUgYSB0
ZXN0LCBvbmUgc3RhcnRzIGJ5IGdldHRpbmcgYSBUZXN0IG9iamVjdCB1c2luZyBhc3luY190ZXN0
OgorICoKKyAqIGFzeW5jX3Rlc3QobmFtZSwgcHJvcGVydGllcykKKyAqCisgKiBlLmcuCisgKiB2
YXIgdCA9IGFzeW5jX3Rlc3QoIlNpbXBsZSBhc3luYyB0ZXN0IikKKyAqCisgKiBBc3NlcnRpb25z
IGNhbiBiZSBhZGRlZCB0byB0aGUgdGVzdCBieSBjYWxsaW5nIHRoZSBzdGVwIG1ldGhvZCBvZiB0
aGUgdGVzdAorICogb2JqZWN0IHdpdGggYSBmdW5jdGlvbiBjb250YWluaW5nIHRoZSB0ZXN0IGFz
c2VydGlvbnM6CisgKgorICogdC5zdGVwKGZ1bmN0aW9uKCkge2Fzc2VydF90cnVlKHRydWUpfSk7
CisgKgorICogV2hlbiBhbGwgdGhlIHN0ZXBzIGFyZSBjb21wbGV0ZSwgdGhlIGRvbmUoKSBtZXRo
b2QgbXVzdCBiZSBjYWxsZWQ6CisgKgorICogdC5kb25lKCk7CisgKgorICogQXMgYSBjb252ZW5p
ZW5jZSwgYXN5bmNfdGVzdCBjYW4gYWxzbyB0YWtlcyBhIGZ1bmN0aW9uIGFzIGZpcnN0IGFyZ3Vt
ZW50LgorICogVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgd2l0aCB0aGUgdGVzdCBvYmplY3QgYXMg
Ym90aCBpdHMgYHRoaXNgIG9iamVjdCBhbmQKKyAqIGZpcnN0IGFyZ3VtZW50LiBUaGUgYWJvdmUg
ZXhhbXBsZSBjYW4gYmUgcmV3cml0dGVuIGFzOgorICoKKyAqIGFzeW5jX3Rlc3QoZnVuY3Rpb24o
dCkgeworICogICAgIG9iamVjdC5zb21lX2V2ZW50ID0gZnVuY3Rpb24oKSB7CisgKiAgICAgICAg
IHQuc3RlcChmdW5jdGlvbiAoKXthc3NlcnRfdHJ1ZSh0cnVlKTsgdC5kb25lKCk7fSk7CisgKiAg
ICAgfTsKKyAqIH0sICJTaW1wbGUgYXN5bmMgdGVzdCIpOworICoKKyAqIHdoaWNoIGF2b2lkcyBj
bHV0dGVyaW5nIHRoZSBnbG9iYWwgc2NvcGUgd2l0aCByZWZlcmVuY2VzIHRvIGFzeW5jCisgKiB0
ZXN0cyBpbnN0YW5jZXMuCisgKgorICogVGhlIHByb3BlcnRpZXMgYXJndW1lbnQgaXMgaWRlbnRp
Y2FsIHRvIHRoYXQgZm9yIHRlc3QoKS4KKyAqCisgKiBJbiBtYW55IGNhc2VzIGl0IGlzIGNvbnZl
bmllbnQgdG8gcnVuIGEgc3RlcCBpbiByZXNwb25zZSB0byBhbiBldmVudCBvciBhCisgKiBjYWxs
YmFjay4gQSBjb252ZW5pZW50IG1ldGhvZCBvZiBkb2luZyB0aGlzIGlzIHRocm91Z2ggdGhlIHN0
ZXBfZnVuYyBtZXRob2QKKyAqIHdoaWNoIHJldHVybnMgYSBmdW5jdGlvbiB0aGF0LCB3aGVuIGNh
bGxlZCBydW5zIGEgdGVzdCBzdGVwLiBGb3IgZXhhbXBsZQorICoKKyAqIG9iamVjdC5zb21lX2V2
ZW50ID0gdC5zdGVwX2Z1bmMoZnVuY3Rpb24oZSkge2Fzc2VydF90cnVlKGUuYSl9KTsKKyAqCisg
KiA9PSBNYWtpbmcgYXNzZXJ0aW9ucyA9PQorICoKKyAqIEZ1bmN0aW9ucyBmb3IgbWFraW5nIGFz
c2VydGlvbnMgc3RhcnQgYXNzZXJ0XworICogVGhlIGJlc3Qgd2F5IHRvIGdldCBhIGxpc3QgaXMg
dG8gbG9vayBpbiB0aGlzIGZpbGUgZm9yIGZ1bmN0aW9ucyBuYW1lcworICogbWF0Y2hpbmcgdGhh
dCBwYXR0ZXJuLiBUaGUgZ2VuZXJhbCBzaWduYXR1cmUgaXMKKyAqCisgKiBhc3NlcnRfc29tZXRo
aW5nKGFjdHVhbCwgZXhwZWN0ZWQsIGRlc2NyaXB0aW9uKQorICoKKyAqIGFsdGhvdWdoIG5vdCBh
bGwgYXNzZXJ0aW9ucyBwcmVjaXNlbHkgbWF0Y2ggdGhpcyBwYXR0ZXJuIGUuZy4gYXNzZXJ0X3Ry
dWUKKyAqIG9ubHkgdGFrZXMgYWN0dWFsIGFuZCBkZXNjcmlwdGlvbiBhcyBhcmd1bWVudHMuCisg
KgorICogVGhlIGRlc2NyaXB0aW9uIHBhcmFtZXRlciBpcyB1c2VkIHRvIHByZXNlbnQgbW9yZSB1
c2VmdWwgZXJyb3IgbWVzc2FnZXMgd2hlbgorICogYSB0ZXN0IGZhaWxzCisgKgorICogTk9URTog
QWxsIGFzc2VydHMgbXVzdCBiZSBsb2NhdGVkIGluIGEgdGVzdCgpIG9yIGEgc3RlcCBvZiBhbiBh
c3luY190ZXN0KCkuCisgKiAgICAgICBhc3NlcnRzIG91dHNpZGUgdGhlc2UgcGxhY2VzIHdvbid0
IGJlIGRldGVjdGVkIGNvcnJlY3RseSBieSB0aGUgaGFybmVzcworICogICAgICAgYW5kIG1heSBj
YXVzZSBhIGZpbGUgdG8gc3RvcCB0ZXN0aW5nLgorICoKKyAqID09IENsZWFudXAgPT0KKyAqCisg
KiBPY2Nhc2lvbmFsbHkgdGVzdHMgbWF5IGNyZWF0ZSBzdGF0ZSB0aGF0IHdpbGwgcGVyc2lzdCBi
ZXlvbmQgdGhlIHRlc3QgaXRzZWxmLgorICogSW4gb3JkZXIgdG8gZW5zdXJlIHRoYXQgdGVzdHMg
YXJlIGluZGVwZW5kZW50LCBzdWNoIHN0YXRlIHNob3VsZCBiZSBjbGVhbmVkCisgKiB1cCBvbmNl
IHRoZSB0ZXN0IGhhcyBhIHJlc3VsdC4gVGhpcyBjYW4gYmUgYWNoaWV2ZWQgYnkgYWRkaW5nIGNs
ZWFudXAKKyAqIGNhbGxiYWNrcyB0byB0aGUgdGVzdC4gU3VjaCBjYWxsYmFja3MgYXJlIHJlZ2lz
dGVyZWQgdXNpbmcgdGhlIGFkZF9jbGVhbnVwCisgKiBmdW5jdGlvbiBvbiB0aGUgdGVzdCBvYmpl
Y3QuIEFsbCByZWdpc3RlcmVkIGNhbGxiYWNrcyB3aWxsIGJlIHJ1biBhcyBzb29uIGFzCisgKiB0
aGUgdGVzdCByZXN1bHQgaXMga25vd24uIEZvciBleGFtcGxlCisgKiB0ZXN0KGZ1bmN0aW9uKCkg
eworICogICAgICAgICAgd2luZG93LnNvbWVfZ2xvYmFsID0gImV4YW1wbGUiOworICogICAgICAg
ICAgdGhpcy5hZGRfY2xlYW51cChmdW5jdGlvbigpIHtkZWxldGUgd2luZG93LnNvbWVfZ2xvYmFs
fSk7CisgKiAgICAgICAgICBhc3NlcnRfdHJ1ZShmYWxzZSk7CisgKiAgICAgIH0pOworICoKKyAq
ID09IEhhcm5lc3MgVGltZW91dCA9PQorICoKKyAqIFRoZSBvdmVyYWxsIGhhcm5lc3MgYWRtaXRz
IHR3byB0aW1lb3V0IHZhbHVlcyAibm9ybWFsIiAodGhlCisgKiBkZWZhdWx0KSBhbmQgImxvbmci
LCB1c2VkIGZvciB0ZXN0cyB3aGljaCBoYXZlIGFuIHVudXN1YWxseSBsb25nCisgKiBydW50aW1l
LiBBZnRlciB0aGUgdGltZW91dCBpcyByZWFjaGVkLCB0aGUgaGFybmVzcyB3aWxsIHN0b3AKKyAq
IHdhaXRpbmcgZm9yIGZ1cnRoZXIgYXN5bmMgdGVzdHMgdG8gY29tcGxldGUuIEJ5IGRlZmF1bHQg
dGhlCisgKiB0aW1lb3V0cyBhcmUgc2V0IHRvIDEwcyBhbmQgNjBzLCByZXNwZWN0aXZlbHksIGJ1
dCBtYXkgYmUgY2hhbmdlZAorICogd2hlbiB0aGUgdGVzdCBpcyBydW4gb24gaGFyZHdhcmUgd2l0
aCBkaWZmZXJlbnQgcGVyZm9ybWFuY2UKKyAqIGNoYXJhY3RlcmlzdGljcyB0byBhIGNvbW1vbiBk
ZXNrdG9wIGNvbXB1dGVyLiAgSW4gb3JkZXIgdG8gb3B0LWluCisgKiB0byB0aGUgbG9uZ2VyIHRl
c3QgdGltZW91dCwgdGhlIHRlc3QgbXVzdCBzcGVjaWZ5IGEgbWV0YSBlbGVtZW50OgorICogPG1l
dGEgbmFtZT0idGltZW91dCIgY29udGVudD0ibG9uZyI+CisgKgorICogPT0gU2V0dXAgPT0KKyAq
CisgKiBTb21ldGltZXMgdGVzdHMgcmVxdWlyZSBub24tdHJpdmlhbCBzZXR1cCB0aGF0IG1heSBm
YWlsLiBGb3IgdGhpcyBwdXJwb3NlCisgKiB0aGVyZSBpcyBhIHNldHVwKCkgZnVuY3Rpb24sIHRo
YXQgbWF5IGJlIGNhbGxlZCB3aXRoIG9uZSBvciB0d28gYXJndW1lbnRzLgorICogVGhlIHR3byBh
cmd1bWVudCB2ZXJzaW9uIGlzOgorICoKKyAqIHNldHVwKGZ1bmMsIHByb3BlcnRpZXMpCisgKgor
ICogVGhlIG9uZSBhcmd1bWVudCB2ZXJzaW9ucyBtYXkgb21pdCBlaXRoZXIgYXJndW1lbnQuCisg
KiBmdW5jIGlzIGEgZnVuY3Rpb24gdG8gYmUgcnVuIHN5bmNocm9ub3VzbHkuIHNldHVwKCkgYmVj
b21lcyBhIG5vLW9wIG9uY2UKKyAqIGFueSB0ZXN0cyBoYXZlIHJldHVybmVkIHJlc3VsdHMuIFBy
b3BlcnRpZXMgYXJlIGdsb2JhbCBwcm9wZXJ0aWVzIG9mIHRoZSB0ZXN0CisgKiBoYXJuZXNzLiBD
dXJyZW50bHkgcmVjb2duaXNlZCBwcm9wZXJ0aWVzIGFyZToKKyAqCisgKgorICogZXhwbGljaXRf
ZG9uZSAtIFdhaXQgZm9yIGFuIGV4cGxpY2l0IGNhbGwgdG8gZG9uZSgpIGJlZm9yZSBkZWNsYXJp
bmcgYWxsCisgKiAgICAgICAgICAgICAgICAgdGVzdHMgY29tcGxldGUgKHNlZSBiZWxvdykKKyAq
CisgKiBvdXRwdXRfZG9jdW1lbnQgLSBUaGUgZG9jdW1lbnQgdG8gd2hpY2ggcmVzdWx0cyBzaG91
bGQgYmUgbG9nZ2VkLiBCeSBkZWZhdWx0CisgKiAgICAgICAgICAgICAgICAgICB0aGlzIGlzIHRo
ZSBjdXJyZW50IGRvY3VtZW50IGJ1dCBjb3VsZCBiZSBhbiBhbmNlc3RvcgorICogICAgICAgICAg
ICAgICAgICAgZG9jdW1lbnQgaW4gc29tZSBjYXNlcyBlLmcuIGEgU1ZHIHRlc3QgbG9hZGVkIGlu
IGFuIEhUTUwKKyAqICAgICAgICAgICAgICAgICAgIHdyYXBwZXIKKyAqCisgKiBleHBsaWNpdF90
aW1lb3V0IC0gZGlzYWJsZSBmaWxlIHRpbWVvdXQ7IG9ubHkgc3RvcCB3YWl0aW5nIGZvciByZXN1
bHRzCisgKiAgICAgICAgICAgICAgICAgICAgd2hlbiB0aGUgdGltZW91dCgpIGZ1bmN0aW9uIGlz
IGNhbGxlZCAodHlwaWNhbGx5IGZvcgorICogICAgICAgICAgICAgICAgICAgIHVzZSB3aGVuIGlu
dGVncmF0aW5nIHdpdGggc29tZSBleGlzdGluZyB0ZXN0IGZyYW1ld29yaworICogICAgICAgICAg
ICAgICAgICAgIHRoYXQgaGFzIGl0cyBvd24gdGltZW91dCBtZWNoYW5pc20pLgorICoKKyAqIGFs
bG93X3VuY2F1Z2h0X2V4Y2VwdGlvbiAtIGRvbid0IHRyZWF0IGFuIHVuY2F1Z2h0IGV4Y2VwdGlv
biBhcyBhbiBlcnJvcjsKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5lZWRlZCB3aGVu
IGUuZy4gdGVzdGluZyB0aGUgd2luZG93Lm9uZXJyb3IKKyAqICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGhhbmRsZXIuCisgKgorICogdGltZW91dF9tdWx0aXBsaWVyIC0gTXVsdGlwbGllciB0
byBhcHBseSB0byBwZXItdGVzdCB0aW1lb3V0cy4KKyAqCisgKiA9PSBEZXRlcm1pbmluZyB3aGVu
IGFsbCB0ZXN0cyBhcmUgY29tcGxldGUgPT0KKyAqCisgKiBCeSBkZWZhdWx0IHRoZSB0ZXN0IGhh
cm5lc3Mgd2lsbCBhc3N1bWUgdGhlcmUgYXJlIG5vIG1vcmUgcmVzdWx0cyB0byBjb21lCisgKiB3
aGVuOgorICogMSkgVGhlcmUgYXJlIG5vIFRlc3Qgb2JqZWN0cyB0aGF0IGhhdmUgYmVlbiBjcmVh
dGVkIGJ1dCBub3QgY29tcGxldGVkCisgKiAyKSBUaGUgbG9hZCBldmVudCBvbiB0aGUgZG9jdW1l
bnQgaGFzIGZpcmVkCisgKgorICogVGhpcyBiZWhhdmlvdXIgY2FuIGJlIG92ZXJyaWRkZW4gYnkg
c2V0dGluZyB0aGUgZXhwbGljaXRfZG9uZSBwcm9wZXJ0eSB0bworICogdHJ1ZSBpbiBhIGNhbGwg
dG8gc2V0dXAoKS4gSWYgZXhwbGljaXRfZG9uZSBpcyB0cnVlLCB0aGUgdGVzdCBoYXJuZXNzIHdp
bGwKKyAqIG5vdCBhc3N1bWUgaXQgaXMgZG9uZSB1bnRpbCB0aGUgZ2xvYmFsIGRvbmUoKSBmdW5j
dGlvbiBpcyBjYWxsZWQuIE9uY2UgZG9uZSgpCisgKiBpcyBjYWxsZWQsIHRoZSB0d28gY29uZGl0
aW9ucyBhYm92ZSBhcHBseSBsaWtlIG5vcm1hbC4KKyAqCisgKiA9PSBHZW5lcmF0aW5nIHRlc3Rz
ID09CisgKgorICogTk9URTogdGhpcyBmdW5jdGlvbmFsaXR5IG1heSBiZSByZW1vdmVkCisgKgor
ICogVGhlcmUgYXJlIHNjZW5hcmlvcyBpbiB3aGljaCBpcyBpcyBkZXNpcmFibGUgdG8gY3JlYXRl
IGEgbGFyZ2UgbnVtYmVyIG9mCisgKiAoc3luY2hyb25vdXMpIHRlc3RzIHRoYXQgYXJlIGludGVy
bmFsbHkgc2ltaWxhciBidXQgdmFyeSBpbiB0aGUgcGFyYW1ldGVycworICogdXNlZC4gVG8gbWFr
ZSB0aGlzIGVhc2llciwgdGhlIGdlbmVyYXRlX3Rlc3RzIGZ1bmN0aW9uIGFsbG93cyBhIHNpbmds
ZQorICogZnVuY3Rpb24gdG8gYmUgY2FsbGVkIHdpdGggZWFjaCBzZXQgb2YgcGFyYW1ldGVycyBp
biBhIGxpc3Q6CisgKgorICogZ2VuZXJhdGVfdGVzdHModGVzdF9mdW5jdGlvbiwgcGFyYW1ldGVy
X2xpc3RzLCBwcm9wZXJ0aWVzKQorICoKKyAqIEZvciBleGFtcGxlOgorICoKKyAqIGdlbmVyYXRl
X3Rlc3RzKGFzc2VydF9lcXVhbHMsIFsKKyAqICAgICBbIlN1bSBvbmUgYW5kIG9uZSIsIDErMSwg
Ml0sCisgKiAgICAgWyJTdW0gb25lIGFuZCB6ZXJvIiwgMSswLCAxXQorICogICAgIF0pCisgKgor
ICogSXMgZXF1aXZhbGVudCB0bzoKKyAqCisgKiB0ZXN0KGZ1bmN0aW9uKCkge2Fzc2VydF9lcXVh
bHMoMSsxLCAyKX0sICJTdW0gb25lIGFuZCBvbmUiKQorICogdGVzdChmdW5jdGlvbigpIHthc3Nl
cnRfZXF1YWxzKDErMCwgMSl9LCAiU3VtIG9uZSBhbmQgemVybyIpCisgKgorICogTm90ZSB0aGF0
IHRoZSBmaXJzdCBpdGVtIGluIGVhY2ggcGFyYW1ldGVyIGxpc3QgY29ycmVzcG9uZHMgdG8gdGhl
IG5hbWUgb2YKKyAqIHRoZSB0ZXN0LgorICoKKyAqIFRoZSBwcm9wZXJ0aWVzIGFyZ3VtZW50IGlz
IGlkZW50aWNhbCB0byB0aGF0IGZvciB0ZXN0KCkuIFRoaXMgbWF5IGJlIGEKKyAqIHNpbmdsZSBv
YmplY3QgKHVzZWQgZm9yIGFsbCBnZW5lcmF0ZWQgdGVzdHMpIG9yIGFuIGFycmF5LgorICoKKyAq
ID09IENhbGxiYWNrIEFQSSA9PQorICoKKyAqIFRoZSBmcmFtZXdvcmsgcHJvdmlkZXMgY2FsbGJh
Y2tzIGNvcnJlc3BvbmRpbmcgdG8gMyBldmVudHM6CisgKgorICogc3RhcnQgLSBoYXBwZW5zIHdo
ZW4gdGhlIGZpcnN0IFRlc3QgaXMgY3JlYXRlZAorICogcmVzdWx0IC0gaGFwcGVucyB3aGVuIGEg
dGVzdCByZXN1bHQgaXMgcmVjaWV2ZWQKKyAqIGNvbXBsZXRlIC0gaGFwcGVucyB3aGVuIGFsbCBy
ZXN1bHRzIGFyZSByZWNpZXZlZAorICoKKyAqIFRoZSBwYWdlIGRlZmluaW5nIHRoZSB0ZXN0cyBt
YXkgYWRkIGNhbGxiYWNrcyBmb3IgdGhlc2UgZXZlbnRzIGJ5IGNhbGxpbmcKKyAqIHRoZSBmb2xs
b3dpbmcgbWV0aG9kczoKKyAqCisgKiAgIGFkZF9zdGFydF9jYWxsYmFjayhjYWxsYmFjaykgLSBj
YWxsYmFjayBjYWxsZWQgd2l0aCBubyBhcmd1bWVudHMKKyAqICAgYWRkX3Jlc3VsdF9jYWxsYmFj
ayhjYWxsYmFjaykgLSBjYWxsYmFjayBjYWxsZWQgd2l0aCBhIHRlc3QgYXJndW1lbnQKKyAqICAg
YWRkX2NvbXBsZXRpb25fY2FsbGJhY2soY2FsbGJhY2spIC0gY2FsbGJhY2sgY2FsbGVkIHdpdGgg
YW4gYXJyYXkgb2YgdGVzdHMKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgYW5kIGFuIHN0YXR1cyBvYmplY3QKKyAqCisgKiB0ZXN0cyBoYXZlIHRoZSBmb2xsb3dpbmcg
cHJvcGVydGllczoKKyAqICAgc3RhdHVzOiBBIHN0YXR1cyBjb2RlLiBUaGlzIGNhbiBiZSBjb21w
YXJlZCB0byB0aGUgUEFTUywgRkFJTCwgVElNRU9VVCBhbmQKKyAqICAgICAgICAgICBOT1RSVU4g
cHJvcGVydGllcyBvbiB0aGUgdGVzdCBvYmplY3QKKyAqICAgbWVzc2FnZTogQSBtZXNzYWdlIGlu
ZGljYXRpbmcgdGhlIHJlYXNvbiBmb3IgZmFpbHVyZS4gSW4gdGhlIGZ1dHVyZSB0aGlzCisgKiAg
ICAgICAgICAgIHdpbGwgYWx3YXlzIGJlIGEgc3RyaW5nCisgKgorICogIFRoZSBzdGF0dXMgb2Jq
ZWN0IGdpdmVzIHRoZSBvdmVyYWxsIHN0YXR1cyBvZiB0aGUgaGFybmVzcy4gSXQgaGFzIHRoZQor
ICogIGZvbGxvd2luZyBwcm9wZXJ0aWVzOgorICogICAgc3RhdHVzOiBDYW4gYmUgY29tcGFyZWQg
dG8gdGhlIE9LLCBFUlJPUiBhbmQgVElNRU9VVCBwcm9wZXJ0aWVzCisgKiAgICBtZXNzYWdlOiBB
biBlcnJvciBtZXNzYWdlIHNldCB3aGVuIHRoZSBzdGF0dXMgaXMgRVJST1IKKyAqCisgKiA9PSBF
eHRlcm5hbCBBUEkgPT0KKyAqCisgKiBJbiBvcmRlciB0byBjb2xsZWN0IHRoZSByZXN1bHRzIG9m
IG11bHRpcGxlIHBhZ2VzIGNvbnRhaW5pbmcgdGVzdHMsIHRoZSB0ZXN0CisgKiBoYXJuZXNzIHdp
bGwsIHdoZW4gbG9hZGVkIGluIGEgbmVzdGVkIGJyb3dzaW5nIGNvbnRleHQsIGF0dGVtcHQgdG8g
Y2FsbAorICogY2VydGFpbiBmdW5jdGlvbnMgaW4gZWFjaCBhbmNlc3RvciBhbmQgb3BlbmVyIGJy
b3dzaW5nIGNvbnRleHQ6CisgKgorICogc3RhcnQgLSBzdGFydF9jYWxsYmFjaworICogcmVzdWx0
IC0gcmVzdWx0X2NhbGxiYWNrCisgKiBjb21wbGV0ZSAtIGNvbXBsZXRpb25fY2FsbGJhY2sKKyAq
CisgKiBUaGVzZSBhcmUgZ2l2ZW4gdGhlIHNhbWUgYXJndW1lbnRzIGFzIHRoZSBjb3JyZXNwb25k
aW5nIGludGVybmFsIGNhbGxiYWNrcworICogZGVzY3JpYmVkIGFib3ZlLgorICoKKyAqID09IEV4
dGVybmFsIEFQSSB0aHJvdWdoIGNyb3NzLWRvY3VtZW50IG1lc3NhZ2luZyA9PQorICoKKyAqIFdo
ZXJlIHN1cHBvcnRlZCwgdGhlIHRlc3QgaGFybmVzcyB3aWxsIGFsc28gc2VuZCBtZXNzYWdlcyB1
c2luZworICogY3Jvc3MtZG9jdW1lbnQgbWVzc2FnaW5nIHRvIGVhY2ggYW5jZXN0b3IgYW5kIG9w
ZW5lciBicm93c2luZyBjb250ZXh0LiBTaW5jZQorICogaXQgdXNlcyB0aGUgd2lsZGNhcmQga2V5
d29yZCAoKiksIGNyb3NzLW9yaWdpbiBjb21tdW5pY2F0aW9uIGlzIGVuYWJsZWQgYW5kCisgKiBz
Y3JpcHQgb24gZGlmZmVyZW50IG9yaWdpbnMgY2FuIGNvbGxlY3QgdGhlIHJlc3VsdHMuCisgKgor
ICogVGhpcyBBUEkgZm9sbG93cyBzaW1pbGFyIGNvbnZlbnRpb25zIGFzIHRob3NlIGRlc2NyaWJl
ZCBhYm92ZSBvbmx5IHNsaWdodGx5CisgKiBtb2RpZmllZCB0byBhY2NvbW1vZGF0ZSBtZXNzYWdl
IGV2ZW50IEFQSS4gRWFjaCBtZXNzYWdlIGlzIHNlbnQgYnkgdGhlIGhhcm5lc3MKKyAqIGlzIHBh
c3NlZCBhIHNpbmdsZSB2YW5pbGxhIG9iamVjdCwgYXZhaWxhYmxlIGFzIHRoZSBgZGF0YWAgcHJv
cGVydHkgb2YgdGhlCisgKiBldmVudCBvYmplY3QuIFRoZXNlIG9iamVjdHMgYXJlIHN0cnVjdHVy
ZXMgYXMgZm9sbG93czoKKyAqCisgKiBzdGFydCAtIHsgdHlwZTogInN0YXJ0IiB9CisgKiByZXN1
bHQgLSB7IHR5cGU6ICJyZXN1bHQiLCB0ZXN0OiBUZXN0IH0KKyAqIGNvbXBsZXRlIC0geyB0eXBl
OiAiY29tcGxldGUiLCB0ZXN0czogW1Rlc3QsIC4uLl0sIHN0YXR1czogVGVzdHNTdGF0dXMgfQor
ICoKKyAqID09IExpc3Qgb2YgYXNzZXJ0aW9ucyA9PQorICoKKyAqIGFzc2VydF90cnVlKGFjdHVh
bCwgZGVzY3JpcHRpb24pCisgKiAgIGFzc2VydHMgdGhhdCAvYWN0dWFsLyBpcyBzdHJpY3RseSB0
cnVlCisgKgorICogYXNzZXJ0X2ZhbHNlKGFjdHVhbCwgZGVzY3JpcHRpb24pCisgKiAgIGFzc2Vy
dHMgdGhhdCAvYWN0dWFsLyBpcyBzdHJpY3RseSBmYWxzZQorICoKKyAqIGFzc2VydF9lcXVhbHMo
YWN0dWFsLCBleHBlY3RlZCwgZGVzY3JpcHRpb24pCisgKiAgIGFzc2VydHMgdGhhdCAvYWN0dWFs
LyBpcyB0aGUgc2FtZSB2YWx1ZSBhcyAvZXhwZWN0ZWQvCisgKgorICogYXNzZXJ0X25vdF9lcXVh
bHMoYWN0dWFsLCBleHBlY3RlZCwgZGVzY3JpcHRpb24pCisgKiAgIGFzc2VydHMgdGhhdCAvYWN0
dWFsLyBpcyBhIGRpZmZlcmVudCB2YWx1ZSB0byAvZXhwZWN0ZWQvLiBZZXMsIHRoaXMgbWVhbnMK
KyAqICAgdGhhdCAiZXhwZWN0ZWQiIGlzIGEgbWlzbm9tZXIKKyAqCisgKiBhc3NlcnRfaW5fYXJy
YXkoYWN0dWFsLCBleHBlY3RlZCwgZGVzY3JpcHRpb24pCisgKiAgIGFzc2VydHMgdGhhdCAvZXhw
ZWN0ZWQvIGlzIGFuIEFycmF5LCBhbmQgL2FjdHVhbC8gaXMgZXF1YWwgdG8gb25lIG9mIHRoZQor
ICogICBtZW1iZXJzIC0tIGV4cGVjdGVkLmluZGV4T2YoYWN0dWFsKSAhPSAtMQorICoKKyAqIGFz
c2VydF9hcnJheV9lcXVhbHMoYWN0dWFsLCBleHBlY3RlZCwgZGVzY3JpcHRpb24pCisgKiAgIGFz
c2VydHMgdGhhdCAvYWN0dWFsLyBhbmQgL2V4cGVjdGVkLyBoYXZlIHRoZSBzYW1lIGxlbmd0aCBh
bmQgdGhlIHZhbHVlIG9mCisgKiAgIGVhY2ggaW5kZXhlZCBwcm9wZXJ0eSBpbiAvYWN0dWFsLyBp
cyB0aGUgc3RyaWN0bHkgZXF1YWwgdG8gdGhlIGNvcnJlc3BvbmRpbmcKKyAqICAgcHJvcGVydHkg
dmFsdWUgaW4gL2V4cGVjdGVkLworICoKKyAqIGFzc2VydF9hcHByb3hfZXF1YWxzKGFjdHVhbCwg
ZXhwZWN0ZWQsIGVwc2lsb24sIGRlc2NyaXB0aW9uKQorICogICBhc3NlcnRzIHRoYXQgL2FjdHVh
bC8gaXMgYSBudW1iZXIgd2l0aGluICsvLSAvZXBzaWxvbi8gb2YgL2V4cGVjdGVkLworICoKKyAq
IGFzc2VydF9sZXNzX3RoYW4oYWN0dWFsLCBleHBlY3RlZCwgZGVzY3JpcHRpb24pCisgKiAgIGFz
c2VydHMgdGhhdCAvYWN0dWFsLyBpcyBhIG51bWJlciBsZXNzIHRoYW4gL2V4cGVjdGVkLworICoK
KyAqIGFzc2VydF9ncmVhdGVyX3RoYW4oYWN0dWFsLCBleHBlY3RlZCwgZGVzY3JpcHRpb24pCisg
KiAgIGFzc2VydHMgdGhhdCAvYWN0dWFsLyBpcyBhIG51bWJlciBncmVhdGVyIHRoYW4gL2V4cGVj
dGVkLworICoKKyAqIGFzc2VydF9sZXNzX3RoYW5fZXF1YWwoYWN0dWFsLCBleHBlY3RlZCwgZGVz
Y3JpcHRpb24pCisgKiAgIGFzc2VydHMgdGhhdCAvYWN0dWFsLyBpcyBhIG51bWJlciBsZXNzIHRo
YW4gb3IgZXF1YWwgdG8gL2V4cGVjdGVkLworICoKKyAqIGFzc2VydF9ncmVhdGVyX3RoYW5fZXF1
YWwoYWN0dWFsLCBleHBlY3RlZCwgZGVzY3JpcHRpb24pCisgKiAgIGFzc2VydHMgdGhhdCAvYWN0
dWFsLyBpcyBhIG51bWJlciBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gL2V4cGVjdGVkLworICoK
KyAqIGFzc2VydF9yZWdleHBfbWF0Y2goYWN0dWFsLCBleHBlY3RlZCwgZGVzY3JpcHRpb24pCisg
KiAgIGFzc2VydHMgdGhhdCAvYWN0dWFsLyBtYXRjaGVzIHRoZSByZWdleHAgL2V4cGVjdGVkLwor
ICoKKyAqIGFzc2VydF9jbGFzc19zdHJpbmcob2JqZWN0LCBjbGFzc19uYW1lLCBkZXNjcmlwdGlv
bikKKyAqICAgYXNzZXJ0cyB0aGF0IHRoZSBjbGFzcyBzdHJpbmcgb2YgL29iamVjdC8gYXMgcmV0
dXJuZWQgaW4KKyAqICAgT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZyBpcyBlcXVhbCB0byAvY2xh
c3NfbmFtZS8uCisgKgorICogYXNzZXJ0X293bl9wcm9wZXJ0eShvYmplY3QsIHByb3BlcnR5X25h
bWUsIGRlc2NyaXB0aW9uKQorICogICBhc3NlcnQgdGhhdCBvYmplY3QgaGFzIG93biBwcm9wZXJ0
eSBwcm9wZXJ0eV9uYW1lCisgKgorICogYXNzZXJ0X2luaGVyaXRzKG9iamVjdCwgcHJvcGVydHlf
bmFtZSwgZGVzY3JpcHRpb24pCisgKiAgIGFzc2VydCB0aGF0IG9iamVjdCBkb2VzIG5vdCBoYXZl
IGFuIG93biBwcm9wZXJ0eSBuYW1lZCBwcm9wZXJ0eV9uYW1lCisgKiAgIGJ1dCB0aGF0IHByb3Bl
cnR5X25hbWUgaXMgcHJlc2VudCBpbiB0aGUgcHJvdG90eXBlIGNoYWluIGZvciBvYmplY3QKKyAq
CisgKiBhc3NlcnRfaWRsX2F0dHJpYnV0ZShvYmplY3QsIGF0dHJpYnV0ZV9uYW1lLCBkZXNjcmlw
dGlvbikKKyAqICAgYXNzZXJ0IHRoYXQgYW4gb2JqZWN0IHRoYXQgaXMgYW4gaW5zdGFuY2Ugb2Yg
c29tZSBpbnRlcmZhY2UgaGFzIHRoZQorICogICBhdHRyaWJ1dGUgYXR0cmlidXRlX25hbWUgZm9s
bG93aW5nIHRoZSBjb25kaXRpb25zIHNwZWNpZmllZCBieSBXZWJJREwKKyAqCisgKiBhc3NlcnRf
cmVhZG9ubHkob2JqZWN0LCBwcm9wZXJ0eV9uYW1lLCBkZXNjcmlwdGlvbikKKyAqICAgYXNzZXJ0
IHRoYXQgcHJvcGVydHkgcHJvcGVydHlfbmFtZSBvbiBvYmplY3QgaXMgcmVhZG9ubHkKKyAqCisg
KiBhc3NlcnRfdGhyb3dzKGNvZGUsIGZ1bmMsIGRlc2NyaXB0aW9uKQorICogICBjb2RlIC0gdGhl
IGV4cGVjdGVkIGV4Y2VwdGlvbjoKKyAqICAgICBvIHN0cmluZzogdGhlIHRocm93biBleGNlcHRp
b24gbXVzdCBiZSBhIERPTUV4Y2VwdGlvbiB3aXRoIHRoZSBnaXZlbgorICogICAgICAgICAgICAg
ICBuYW1lLCBlLmcuLCAiVGltZW91dEVycm9yIiAoZm9yIGNvbXBhdGliaWxpdHkgd2l0aCBleGlz
dGluZworICogICAgICAgICAgICAgICB0ZXN0cywgYSBjb25zdGFudCBpcyBhbHNvIHN1cHBvcnRl
ZCwgZS5nLiwgIlRJTUVPVVRfRVJSIikKKyAqICAgICBvIG9iamVjdDogdGhlIHRocm93biBleGNl
cHRpb24gbXVzdCBoYXZlIGEgcHJvcGVydHkgY2FsbGVkICJuYW1lIiB0aGF0CisgKiAgICAgICAg
ICAgICAgIG1hdGNoZXMgY29kZS5uYW1lCisgKiAgICAgbyBudWxsOiAgIGFsbG93IGFueSBleGNl
cHRpb24gKGluIGdlbmVyYWwsIG9uZSBvZiB0aGUgb3B0aW9ucyBhYm92ZQorICogICAgICAgICAg
ICAgICBzaG91bGQgYmUgdXNlZCkKKyAqICAgZnVuYyAtIGEgZnVuY3Rpb24gdGhhdCBzaG91bGQg
dGhyb3cKKyAqCisgKiBhc3NlcnRfdW5yZWFjaGVkKGRlc2NyaXB0aW9uKQorICogICBhc3NlcnRz
IGlmIGNhbGxlZC4gVXNlZCB0byBlbnN1cmUgdGhhdCBzb21lIGNvZGVwYXRoIGlzICpub3QqIHRh
a2VuIGUuZy4KKyAqICAgYW4gZXZlbnQgZG9lcyBub3QgZmlyZS4KKyAqCisgKiBhc3NlcnRfYW55
KGFzc2VydF9mdW5jLCBhY3R1YWwsIGV4cGVjdGVkX2FycmF5LCBleHRyYV9hcmdfMSwgLi4uIGV4
dHJhX2FyZ19OKQorICogICBhc3NlcnRzIHRoYXQgb25lIGFzc2VydF9mdW5jKGFjdHVhbCwgZXhw
ZWN0ZWRfYXJyYXlfTiwgZXh0cmFfYXJnMSwgLi4uLCBleHRyYV9hcmdfTikKKyAqICAgaXMgdHJ1
ZSBmb3Igc29tZSBleHBlY3RlZF9hcnJheV9OIGluIGV4cGVjdGVkX2FycmF5LiBUaGlzIG9ubHkg
d29ya3MgZm9yIGFzc2VydF9mdW5jCisgKiAgIHdpdGggc2lnbmF0dXJlIGFzc2VydF9mdW5jKGFj
dHVhbCwgZXhwZWN0ZWQsIGFyZ3NfMSwgLi4uLCBhcmdzX04pLiBOb3RlIHRoYXQgdGVzdHMKKyAq
ICAgd2l0aCBtdWx0aXBsZSBhbGxvd2VkIHBhc3MgY29uZGl0aW9ucyBhcmUgYmFkIHByYWN0aWNl
IHVubGVzcyB0aGUgc3BlYyBzcGVjaWZpY2FsbHkKKyAqICAgYWxsb3dzIG11bHRpcGxlIGJlaGF2
aW91cnMuIFRlc3QgYXV0aG9ycyBzaG91bGQgbm90IHVzZSB0aGlzIG1ldGhvZCBzaW1wbHkgdG8g
aGlkZQorICogICBVQSBidWdzLgorICoKKyAqIGFzc2VydF9leGlzdHMob2JqZWN0LCBwcm9wZXJ0
eV9uYW1lLCBkZXNjcmlwdGlvbikKKyAqICAgKioqIGRlcHJlY2F0ZWQgKioqCisgKiAgIGFzc2Vy
dHMgdGhhdCBvYmplY3QgaGFzIGFuIG93biBwcm9wZXJ0eSBwcm9wZXJ0eV9uYW1lCisgKgorICog
YXNzZXJ0X25vdF9leGlzdHMob2JqZWN0LCBwcm9wZXJ0eV9uYW1lLCBkZXNjcmlwdGlvbikKKyAq
ICAgKioqIGRlcHJlY2F0ZWQgKioqCisgKiAgIGFzc2VydCB0aGF0IG9iamVjdCBkb2VzIG5vdCBo
YXZlIG93biBwcm9wZXJ0eSBwcm9wZXJ0eV9uYW1lCisgKi8KKworKGZ1bmN0aW9uICgpCit7Cisg
ICAgdmFyIGRlYnVnID0gZmFsc2U7CisgICAgLy8gZGVmYXVsdCB0aW1lb3V0IGlzIDEwIHNlY29u
ZHMsIHRlc3QgY2FuIG92ZXJyaWRlIGlmIG5lZWRlZAorICAgIHZhciBzZXR0aW5ncyA9IHsKKyAg
ICAgICAgb3V0cHV0OnRydWUsCisgICAgICAgIGhhcm5lc3NfdGltZW91dDp7CisgICAgICAgICAg
ICAibm9ybWFsIjoxMDAwMCwKKyAgICAgICAgICAgICJsb25nIjo2MDAwMAorICAgICAgICB9LAor
ICAgICAgICB0ZXN0X3RpbWVvdXQ6bnVsbAorICAgIH07CisKKyAgICB2YXIgeGh0bWxfbnMgPSAi
aHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbCI7CisKKyAgICAvLyBzY3JpcHRfcHJlZml4IGlz
IHVzZWQgYnkgT3V0cHV0LnByb3RvdHlwZS5zaG93X3Jlc3VsdHMoKSB0byBmaWd1cmUgb3V0Cisg
ICAgLy8gd2hlcmUgdG8gZ2V0IHRlc3RoYXJuZXNzLmNzcyBmcm9tLiAgSXQncyBlbmNsb3NlZCBp
biBhbiBleHRyYSBjbG9zdXJlIHRvCisgICAgLy8gbm90IHBvbGx1dGUgdGhlIGxpYnJhcnkncyBu
YW1lc3BhY2Ugd2l0aCB2YXJpYWJsZXMgbGlrZSAic3JjIi4KKyAgICB2YXIgc2NyaXB0X3ByZWZp
eCA9IG51bGw7CisgICAgKGZ1bmN0aW9uICgpCisgICAgeworICAgICAgICB2YXIgc2NyaXB0cyA9
IGRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCJzY3JpcHQiKTsKKyAgICAgICAgZm9yICh2
YXIgaSA9IDA7IGkgPCBzY3JpcHRzLmxlbmd0aDsgaSsrKSB7CisgICAgICAgICAgICBpZiAoc2Ny
aXB0c1tpXS5zcmMpIHsKKyAgICAgICAgICAgICAgICB2YXIgc3JjID0gc2NyaXB0c1tpXS5zcmM7
CisgICAgICAgICAgICB9IGVsc2UgaWYgKHNjcmlwdHNbaV0uaHJlZikgeworICAgICAgICAgICAg
ICAgIC8vU1ZHIGNhc2UKKyAgICAgICAgICAgICAgICB2YXIgc3JjID0gc2NyaXB0c1tpXS5ocmVm
LmJhc2VWYWw7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmIChzcmMgJiYgc3JjLnNs
aWNlKHNyYy5sZW5ndGggLSAidGVzdGhhcm5lc3MuanMiLmxlbmd0aCkgPT09ICJ0ZXN0aGFybmVz
cy5qcyIpIHsKKyAgICAgICAgICAgICAgICBzY3JpcHRfcHJlZml4ID0gc3JjLnNsaWNlKDAsIHNy
Yy5sZW5ndGggLSAidGVzdGhhcm5lc3MuanMiLmxlbmd0aCk7CisgICAgICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9KSgpOworCisgICAgLyoKKyAgICAg
KiBBUEkgZnVuY3Rpb25zCisgICAgICovCisKKyAgICB2YXIgbmFtZV9jb3VudGVyID0gMDsKKyAg
ICBmdW5jdGlvbiBuZXh0X2RlZmF1bHRfbmFtZSgpCisgICAgeworICAgICAgICAvL0Rvbid0IHVz
ZSBkb2N1bWVudC50aXRsZSB0byB3b3JrIGFyb3VuZCBhbiBPcGVyYSBidWcgaW4gWEhUTUwgZG9j
dW1lbnRzCisgICAgICAgIHZhciB0aXRsZSA9IGRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1l
KCJ0aXRsZSIpWzBdOworICAgICAgICB2YXIgcHJlZml4ID0gKHRpdGxlICYmIHRpdGxlLmZpcnN0
Q2hpbGQgJiYgdGl0bGUuZmlyc3RDaGlsZC5kYXRhKSB8fCAiVW50aXRsZWQiOworICAgICAgICB2
YXIgc3VmZml4ID0gbmFtZV9jb3VudGVyID4gMCA/ICIgIiArIG5hbWVfY291bnRlciA6ICIiOwor
ICAgICAgICBuYW1lX2NvdW50ZXIrKzsKKyAgICAgICAgcmV0dXJuIHByZWZpeCArIHN1ZmZpeDsK
KyAgICB9CisKKyAgICBmdW5jdGlvbiB0ZXN0KGZ1bmMsIG5hbWUsIHByb3BlcnRpZXMpCisgICAg
eworICAgICAgICB2YXIgdGVzdF9uYW1lID0gbmFtZSA/IG5hbWUgOiBuZXh0X2RlZmF1bHRfbmFt
ZSgpOworICAgICAgICBwcm9wZXJ0aWVzID0gcHJvcGVydGllcyA/IHByb3BlcnRpZXMgOiB7fTsK
KyAgICAgICAgdmFyIHRlc3Rfb2JqID0gbmV3IFRlc3QodGVzdF9uYW1lLCBwcm9wZXJ0aWVzKTsK
KyAgICAgICAgdGVzdF9vYmouc3RlcChmdW5jLCB0ZXN0X29iaiwgdGVzdF9vYmopOworICAgICAg
ICBpZiAodGVzdF9vYmoucGhhc2UgPT09IHRlc3Rfb2JqLnBoYXNlcy5TVEFSVEVEKSB7CisgICAg
ICAgICAgICB0ZXN0X29iai5kb25lKCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBmdW5jdGlv
biBhc3luY190ZXN0KGZ1bmMsIG5hbWUsIHByb3BlcnRpZXMpCisgICAgeworICAgICAgICBpZiAo
dHlwZW9mIGZ1bmMgIT09ICJmdW5jdGlvbiIpIHsKKyAgICAgICAgICAgIHByb3BlcnRpZXMgPSBu
YW1lOworICAgICAgICAgICAgbmFtZSA9IGZ1bmM7CisgICAgICAgICAgICBmdW5jID0gbnVsbDsK
KyAgICAgICAgfQorICAgICAgICB2YXIgdGVzdF9uYW1lID0gbmFtZSA/IG5hbWUgOiBuZXh0X2Rl
ZmF1bHRfbmFtZSgpOworICAgICAgICBwcm9wZXJ0aWVzID0gcHJvcGVydGllcyA/IHByb3BlcnRp
ZXMgOiB7fTsKKyAgICAgICAgdmFyIHRlc3Rfb2JqID0gbmV3IFRlc3QodGVzdF9uYW1lLCBwcm9w
ZXJ0aWVzKTsKKyAgICAgICAgaWYgKGZ1bmMpIHsKKyAgICAgICAgICAgIHRlc3Rfb2JqLnN0ZXAo
ZnVuYywgdGVzdF9vYmosIHRlc3Rfb2JqKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gdGVz
dF9vYmo7CisgICAgfQorCisgICAgZnVuY3Rpb24gc2V0dXAoZnVuY19vcl9wcm9wZXJ0aWVzLCBt
YXliZV9wcm9wZXJ0aWVzKQorICAgIHsKKyAgICAgICAgdmFyIGZ1bmMgPSBudWxsOworICAgICAg
ICB2YXIgcHJvcGVydGllcyA9IHt9OworICAgICAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCA9PT0g
MikgeworICAgICAgICAgICAgZnVuYyA9IGZ1bmNfb3JfcHJvcGVydGllczsKKyAgICAgICAgICAg
IHByb3BlcnRpZXMgPSBtYXliZV9wcm9wZXJ0aWVzOworICAgICAgICB9IGVsc2UgaWYgKGZ1bmNf
b3JfcHJvcGVydGllcyBpbnN0YW5jZW9mIEZ1bmN0aW9uKSB7CisgICAgICAgICAgICBmdW5jID0g
ZnVuY19vcl9wcm9wZXJ0aWVzOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgcHJvcGVy
dGllcyA9IGZ1bmNfb3JfcHJvcGVydGllczsKKyAgICAgICAgfQorICAgICAgICB0ZXN0cy5zZXR1
cChmdW5jLCBwcm9wZXJ0aWVzKTsKKyAgICAgICAgb3V0cHV0LnNldHVwKHByb3BlcnRpZXMpOwor
ICAgIH0KKworICAgIGZ1bmN0aW9uIGRvbmUoKSB7CisgICAgICAgIHRlc3RzLmVuZF93YWl0KCk7
CisgICAgfQorCisgICAgZnVuY3Rpb24gZ2VuZXJhdGVfdGVzdHMoZnVuYywgYXJncywgcHJvcGVy
dGllcykgeworICAgICAgICBmb3JFYWNoKGFyZ3MsIGZ1bmN0aW9uKHgsIGkpCisgICAgICAgICAg
ICAgICAgeworICAgICAgICAgICAgICAgICAgICB2YXIgbmFtZSA9IHhbMF07CisgICAgICAgICAg
ICAgICAgICAgIHRlc3QoZnVuY3Rpb24oKQorICAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgZnVuYy5hcHBseSh0aGlzLCB4LnNsaWNlKDEpKTsK
KyAgICAgICAgICAgICAgICAgICAgICAgICB9LAorICAgICAgICAgICAgICAgICAgICAgICAgIG5h
bWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgQXJyYXkuaXNBcnJheShwcm9wZXJ0aWVzKSA/
IHByb3BlcnRpZXNbaV0gOiBwcm9wZXJ0aWVzKTsKKyAgICAgICAgICAgICAgICB9KTsKKyAgICB9
CisKKyAgICBmdW5jdGlvbiBvbl9ldmVudChvYmplY3QsIGV2ZW50LCBjYWxsYmFjaykKKyAgICB7
CisgICAgICAgIG9iamVjdC5hZGRFdmVudExpc3RlbmVyKGV2ZW50LCBjYWxsYmFjaywgZmFsc2Up
OworICAgIH0KKworICAgIGV4cG9zZSh0ZXN0LCAndGVzdCcpOworICAgIGV4cG9zZShhc3luY190
ZXN0LCAnYXN5bmNfdGVzdCcpOworICAgIGV4cG9zZShnZW5lcmF0ZV90ZXN0cywgJ2dlbmVyYXRl
X3Rlc3RzJyk7CisgICAgZXhwb3NlKHNldHVwLCAnc2V0dXAnKTsKKyAgICBleHBvc2UoZG9uZSwg
J2RvbmUnKTsKKyAgICBleHBvc2Uob25fZXZlbnQsICdvbl9ldmVudCcpOworCisgICAgLyoKKyAg
ICAgKiBSZXR1cm4gYSBzdHJpbmcgdHJ1bmNhdGVkIHRvIHRoZSBnaXZlbiBsZW5ndGgsIHdpdGgg
Li4uIGFkZGVkIGF0IHRoZSBlbmQKKyAgICAgKiBpZiBpdCB3YXMgbG9uZ2VyLgorICAgICAqLwor
ICAgIGZ1bmN0aW9uIHRydW5jYXRlKHMsIGxlbikKKyAgICB7CisgICAgICAgIGlmIChzLmxlbmd0
aCA+IGxlbikgeworICAgICAgICAgICAgcmV0dXJuIHMuc3Vic3RyaW5nKDAsIGxlbiAtIDMpICsg
Ii4uLiI7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHM7CisgICAgfQorCisgICAgLyoKKyAg
ICAgKiBSZXR1cm4gdHJ1ZSBpZiBvYmplY3QgaXMgcHJvYmFibHkgYSBOb2RlIG9iamVjdC4KKyAg
ICAgKi8KKyAgICBmdW5jdGlvbiBpc19ub2RlKG9iamVjdCkKKyAgICB7CisgICAgICAgIC8vIEkg
dXNlIGR1Y2stdHlwaW5nIGluc3RlYWQgb2YgaW5zdGFuY2VvZiwgYmVjYXVzZQorICAgICAgICAv
LyBpbnN0YW5jZW9mIGRvZXNuJ3Qgd29yayBpZiB0aGUgbm9kZSBpcyBmcm9tIGFub3RoZXIgd2lu
ZG93IChsaWtlIGFuCisgICAgICAgIC8vIGlmcmFtZSdzIGNvbnRlbnRXaW5kb3cpOgorICAgICAg
ICAvLyBodHRwOi8vd3d3LnczLm9yZy9CdWdzL1B1YmxpYy9zaG93X2J1Zy5jZ2k/aWQ9MTIyOTUK
KyAgICAgICAgaWYgKCJub2RlVHlwZSIgaW4gb2JqZWN0CisgICAgICAgICYmICJub2RlTmFtZSIg
aW4gb2JqZWN0CisgICAgICAgICYmICJub2RlVmFsdWUiIGluIG9iamVjdAorICAgICAgICAmJiAi
Y2hpbGROb2RlcyIgaW4gb2JqZWN0KSB7CisgICAgICAgICAgICB0cnkgeworICAgICAgICAgICAg
ICAgIG9iamVjdC5ub2RlVHlwZTsKKyAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHsKKyAgICAgICAg
ICAgICAgICAvLyBUaGUgb2JqZWN0IGlzIHByb2JhYmx5IE5vZGUucHJvdG90eXBlIG9yIGFub3Ro
ZXIgcHJvdG90eXBlCisgICAgICAgICAgICAgICAgLy8gb2JqZWN0IHRoYXQgaW5oZXJpdHMgZnJv
bSBpdCwgYW5kIG5vdCBhIE5vZGUgaW5zdGFuY2UuCisgICAgICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0K
KyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIC8qCisgICAgICogQ29udmVydCBh
IHZhbHVlIHRvIGEgbmljZSwgaHVtYW4tcmVhZGFibGUgc3RyaW5nCisgICAgICovCisgICAgZnVu
Y3Rpb24gZm9ybWF0X3ZhbHVlKHZhbCwgc2VlbikKKyAgICB7CisgICAgICAgIGlmICghc2Vlbikg
eworICAgICAgICAgICAgc2VlbiA9IFtdOworICAgICAgICB9CisgICAgICAgIGlmICh0eXBlb2Yg
dmFsID09PSAib2JqZWN0IiAmJiB2YWwgIT09IG51bGwpIHsKKyAgICAgICAgICAgIGlmIChzZWVu
LmluZGV4T2YodmFsKSA+PSAwKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuICJbLi4uXSI7Cisg
ICAgICAgICAgICB9CisgICAgICAgICAgICBzZWVuLnB1c2godmFsKTsKKyAgICAgICAgfQorICAg
ICAgICBpZiAoQXJyYXkuaXNBcnJheSh2YWwpKSB7CisgICAgICAgICAgICByZXR1cm4gIlsiICsg
dmFsLm1hcChmdW5jdGlvbih4KSB7cmV0dXJuIGZvcm1hdF92YWx1ZSh4LCBzZWVuKX0pLmpvaW4o
IiwgIikgKyAiXSI7CisgICAgICAgIH0KKworICAgICAgICBzd2l0Y2ggKHR5cGVvZiB2YWwpIHsK
KyAgICAgICAgY2FzZSAic3RyaW5nIjoKKyAgICAgICAgICAgIHZhbCA9IHZhbC5yZXBsYWNlKCJc
XCIsICJcXFxcIik7CisgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IDMyOyBpKyspIHsK
KyAgICAgICAgICAgICAgICB2YXIgcmVwbGFjZSA9ICJcXCI7CisgICAgICAgICAgICAgICAgc3dp
dGNoIChpKSB7CisgICAgICAgICAgICAgICAgY2FzZSAwOiByZXBsYWNlICs9ICIwIjsgYnJlYWs7
CisgICAgICAgICAgICAgICAgY2FzZSAxOiByZXBsYWNlICs9ICJ4MDEiOyBicmVhazsKKyAgICAg
ICAgICAgICAgICBjYXNlIDI6IHJlcGxhY2UgKz0gIngwMiI7IGJyZWFrOworICAgICAgICAgICAg
ICAgIGNhc2UgMzogcmVwbGFjZSArPSAieDAzIjsgYnJlYWs7CisgICAgICAgICAgICAgICAgY2Fz
ZSA0OiByZXBsYWNlICs9ICJ4MDQiOyBicmVhazsKKyAgICAgICAgICAgICAgICBjYXNlIDU6IHJl
cGxhY2UgKz0gIngwNSI7IGJyZWFrOworICAgICAgICAgICAgICAgIGNhc2UgNjogcmVwbGFjZSAr
PSAieDA2IjsgYnJlYWs7CisgICAgICAgICAgICAgICAgY2FzZSA3OiByZXBsYWNlICs9ICJ4MDci
OyBicmVhazsKKyAgICAgICAgICAgICAgICBjYXNlIDg6IHJlcGxhY2UgKz0gImIiOyBicmVhazsK
KyAgICAgICAgICAgICAgICBjYXNlIDk6IHJlcGxhY2UgKz0gInQiOyBicmVhazsKKyAgICAgICAg
ICAgICAgICBjYXNlIDEwOiByZXBsYWNlICs9ICJuIjsgYnJlYWs7CisgICAgICAgICAgICAgICAg
Y2FzZSAxMTogcmVwbGFjZSArPSAidiI7IGJyZWFrOworICAgICAgICAgICAgICAgIGNhc2UgMTI6
IHJlcGxhY2UgKz0gImYiOyBicmVhazsKKyAgICAgICAgICAgICAgICBjYXNlIDEzOiByZXBsYWNl
ICs9ICJyIjsgYnJlYWs7CisgICAgICAgICAgICAgICAgY2FzZSAxNDogcmVwbGFjZSArPSAieDBl
IjsgYnJlYWs7CisgICAgICAgICAgICAgICAgY2FzZSAxNTogcmVwbGFjZSArPSAieDBmIjsgYnJl
YWs7CisgICAgICAgICAgICAgICAgY2FzZSAxNjogcmVwbGFjZSArPSAieDEwIjsgYnJlYWs7Cisg
ICAgICAgICAgICAgICAgY2FzZSAxNzogcmVwbGFjZSArPSAieDExIjsgYnJlYWs7CisgICAgICAg
ICAgICAgICAgY2FzZSAxODogcmVwbGFjZSArPSAieDEyIjsgYnJlYWs7CisgICAgICAgICAgICAg
ICAgY2FzZSAxOTogcmVwbGFjZSArPSAieDEzIjsgYnJlYWs7CisgICAgICAgICAgICAgICAgY2Fz
ZSAyMDogcmVwbGFjZSArPSAieDE0IjsgYnJlYWs7CisgICAgICAgICAgICAgICAgY2FzZSAyMTog
cmVwbGFjZSArPSAieDE1IjsgYnJlYWs7CisgICAgICAgICAgICAgICAgY2FzZSAyMjogcmVwbGFj
ZSArPSAieDE2IjsgYnJlYWs7CisgICAgICAgICAgICAgICAgY2FzZSAyMzogcmVwbGFjZSArPSAi
eDE3IjsgYnJlYWs7CisgICAgICAgICAgICAgICAgY2FzZSAyNDogcmVwbGFjZSArPSAieDE4Ijsg
YnJlYWs7CisgICAgICAgICAgICAgICAgY2FzZSAyNTogcmVwbGFjZSArPSAieDE5IjsgYnJlYWs7
CisgICAgICAgICAgICAgICAgY2FzZSAyNjogcmVwbGFjZSArPSAieDFhIjsgYnJlYWs7CisgICAg
ICAgICAgICAgICAgY2FzZSAyNzogcmVwbGFjZSArPSAieDFiIjsgYnJlYWs7CisgICAgICAgICAg
ICAgICAgY2FzZSAyODogcmVwbGFjZSArPSAieDFjIjsgYnJlYWs7CisgICAgICAgICAgICAgICAg
Y2FzZSAyOTogcmVwbGFjZSArPSAieDFkIjsgYnJlYWs7CisgICAgICAgICAgICAgICAgY2FzZSAz
MDogcmVwbGFjZSArPSAieDFlIjsgYnJlYWs7CisgICAgICAgICAgICAgICAgY2FzZSAzMTogcmVw
bGFjZSArPSAieDFmIjsgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAg
IHZhbCA9IHZhbC5yZXBsYWNlKFJlZ0V4cChTdHJpbmcuZnJvbUNoYXJDb2RlKGkpLCAiZyIpLCBy
ZXBsYWNlKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldHVybiAnIicgKyB2YWwucmVw
bGFjZSgvIi9nLCAnXFwiJykgKyAnIic7CisgICAgICAgIGNhc2UgImJvb2xlYW4iOgorICAgICAg
ICBjYXNlICJ1bmRlZmluZWQiOgorICAgICAgICAgICAgcmV0dXJuIFN0cmluZyh2YWwpOworICAg
ICAgICBjYXNlICJudW1iZXIiOgorICAgICAgICAgICAgLy8gSW4gSmF2YVNjcmlwdCwgLTAgPT09
IDAgYW5kIFN0cmluZygtMCkgPT0gIjAiLCBzbyB3ZSBoYXZlIHRvCisgICAgICAgICAgICAvLyBz
cGVjaWFsLWNhc2UuCisgICAgICAgICAgICBpZiAodmFsID09PSAtMCAmJiAxL3ZhbCA9PT0gLUlu
ZmluaXR5KSB7CisgICAgICAgICAgICAgICAgcmV0dXJuICItMCI7CisgICAgICAgICAgICB9Cisg
ICAgICAgICAgICByZXR1cm4gU3RyaW5nKHZhbCk7CisgICAgICAgIGNhc2UgIm9iamVjdCI6Cisg
ICAgICAgICAgICBpZiAodmFsID09PSBudWxsKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuICJu
dWxsIjsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgLy8gU3BlY2lhbC1jYXNlIE5vZGUg
b2JqZWN0cywgc2luY2UgdGhvc2UgY29tZSB1cCBhIGxvdCBpbiBteSB0ZXN0cy4gIEkKKyAgICAg
ICAgICAgIC8vIGlnbm9yZSBuYW1lc3BhY2VzLgorICAgICAgICAgICAgaWYgKGlzX25vZGUodmFs
KSkgeworICAgICAgICAgICAgICAgIHN3aXRjaCAodmFsLm5vZGVUeXBlKSB7CisgICAgICAgICAg
ICAgICAgY2FzZSBOb2RlLkVMRU1FTlRfTk9ERToKKyAgICAgICAgICAgICAgICAgICAgdmFyIHJl
dCA9ICI8IiArIHZhbC50YWdOYW1lLnRvTG93ZXJDYXNlKCk7CisgICAgICAgICAgICAgICAgICAg
IGZvciAodmFyIGkgPSAwOyBpIDwgdmFsLmF0dHJpYnV0ZXMubGVuZ3RoOyBpKyspIHsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIHJldCArPSAiICIgKyB2YWwuYXR0cmlidXRlc1tpXS5uYW1lICsg
Jz0iJyArIHZhbC5hdHRyaWJ1dGVzW2ldLnZhbHVlICsgJyInOworICAgICAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICAgICAgICAgIHJldCArPSAiPiIgKyB2YWwuaW5uZXJIVE1MICsgIjwv
IiArIHZhbC50YWdOYW1lLnRvTG93ZXJDYXNlKCkgKyAiPiI7CisgICAgICAgICAgICAgICAgICAg
IHJldHVybiAiRWxlbWVudCBub2RlICIgKyB0cnVuY2F0ZShyZXQsIDYwKTsKKyAgICAgICAgICAg
ICAgICBjYXNlIE5vZGUuVEVYVF9OT0RFOgorICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ1Rl
eHQgbm9kZSAiJyArIHRydW5jYXRlKHZhbC5kYXRhLCA2MCkgKyAnIic7CisgICAgICAgICAgICAg
ICAgY2FzZSBOb2RlLlBST0NFU1NJTkdfSU5TVFJVQ1RJT05fTk9ERToKKyAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuICJQcm9jZXNzaW5nSW5zdHJ1Y3Rpb24gbm9kZSB3aXRoIHRhcmdldCAiICsg
Zm9ybWF0X3ZhbHVlKHRydW5jYXRlKHZhbC50YXJnZXQsIDYwKSkgKyAiIGFuZCBkYXRhICIgKyBm
b3JtYXRfdmFsdWUodHJ1bmNhdGUodmFsLmRhdGEsIDYwKSk7CisgICAgICAgICAgICAgICAgY2Fz
ZSBOb2RlLkNPTU1FTlRfTk9ERToKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuICJDb21tZW50
IG5vZGUgPCEtLSIgKyB0cnVuY2F0ZSh2YWwuZGF0YSwgNjApICsgIi0tPiI7CisgICAgICAgICAg
ICAgICAgY2FzZSBOb2RlLkRPQ1VNRU5UX05PREU6CisgICAgICAgICAgICAgICAgICAgIHJldHVy
biAiRG9jdW1lbnQgbm9kZSB3aXRoICIgKyB2YWwuY2hpbGROb2Rlcy5sZW5ndGggKyAodmFsLmNo
aWxkTm9kZXMubGVuZ3RoID09IDEgPyAiIGNoaWxkIiA6ICIgY2hpbGRyZW4iKTsKKyAgICAgICAg
ICAgICAgICBjYXNlIE5vZGUuRE9DVU1FTlRfVFlQRV9OT0RFOgorICAgICAgICAgICAgICAgICAg
ICByZXR1cm4gIkRvY3VtZW50VHlwZSBub2RlIjsKKyAgICAgICAgICAgICAgICBjYXNlIE5vZGUu
RE9DVU1FTlRfRlJBR01FTlRfTk9ERToKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuICJEb2N1
bWVudEZyYWdtZW50IG5vZGUgd2l0aCAiICsgdmFsLmNoaWxkTm9kZXMubGVuZ3RoICsgKHZhbC5j
aGlsZE5vZGVzLmxlbmd0aCA9PSAxID8gIiBjaGlsZCIgOiAiIGNoaWxkcmVuIik7CisgICAgICAg
ICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuICJOb2RlIG9iamVj
dCBvZiB1bmtub3duIHR5cGUiOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKwor
ICAgICAgICAgICAgLy8gRmFsbCB0aHJvdWdoIHRvIGRlZmF1bHQKKyAgICAgICAgZGVmYXVsdDoK
KyAgICAgICAgICAgIHJldHVybiB0eXBlb2YgdmFsICsgJyAiJyArIHRydW5jYXRlKFN0cmluZyh2
YWwpLCA2MCkgKyAnIic7CisgICAgICAgIH0KKyAgICB9CisgICAgZXhwb3NlKGZvcm1hdF92YWx1
ZSwgImZvcm1hdF92YWx1ZSIpOworCisgICAgLyoKKyAgICAgKiBBc3NlcnRpb25zCisgICAgICov
CisKKyAgICBmdW5jdGlvbiBhc3NlcnRfdHJ1ZShhY3R1YWwsIGRlc2NyaXB0aW9uKQorICAgIHsK
KyAgICAgICAgYXNzZXJ0KGFjdHVhbCA9PT0gdHJ1ZSwgImFzc2VydF90cnVlIiwgZGVzY3JpcHRp
b24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJleHBlY3RlZCB0cnVlIGdvdCAk
e2FjdHVhbH0iLCB7YWN0dWFsOmFjdHVhbH0pOworICAgIH07CisgICAgZXhwb3NlKGFzc2VydF90
cnVlLCAiYXNzZXJ0X3RydWUiKTsKKworICAgIGZ1bmN0aW9uIGFzc2VydF9mYWxzZShhY3R1YWws
IGRlc2NyaXB0aW9uKQorICAgIHsKKyAgICAgICAgYXNzZXJ0KGFjdHVhbCA9PT0gZmFsc2UsICJh
c3NlcnRfZmFsc2UiLCBkZXNjcmlwdGlvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICJleHBlY3RlZCBmYWxzZSBnb3QgJHthY3R1YWx9Iiwge2FjdHVhbDphY3R1YWx9KTsKKyAg
ICB9OworICAgIGV4cG9zZShhc3NlcnRfZmFsc2UsICJhc3NlcnRfZmFsc2UiKTsKKworICAgIGZ1
bmN0aW9uIHNhbWVfdmFsdWUoeCwgeSkgeworICAgICAgICBpZiAoeSAhPT0geSkgeworICAgICAg
ICAgICAgLy9OYU4gY2FzZQorICAgICAgICAgICAgcmV0dXJuIHggIT09IHg7CisgICAgICAgIH0K
KyAgICAgICAgaWYgKHggPT09IDAgJiYgeSA9PT0gMCkgeworICAgICAgICAgICAgLy9EaXN0aW5n
dWlzaCArMCBhbmQgLTAKKyAgICAgICAgICAgIHJldHVybiAxL3ggPT09IDEveTsKKyAgICAgICAg
fQorICAgICAgICByZXR1cm4geCA9PT0geTsKKyAgICB9CisKKyAgICBmdW5jdGlvbiBhc3NlcnRf
ZXF1YWxzKGFjdHVhbCwgZXhwZWN0ZWQsIGRlc2NyaXB0aW9uKQorICAgIHsKKyAgICAgICAgIC8q
CisgICAgICAgICAgKiBUZXN0IGlmIHR3byBwcmltaXRpdmVzIGFyZSBlcXVhbCBvciB0d28gb2Jq
ZWN0cworICAgICAgICAgICogYXJlIHRoZSBzYW1lIG9iamVjdAorICAgICAgICAgICovCisgICAg
ICAgIGlmICh0eXBlb2YgYWN0dWFsICE9IHR5cGVvZiBleHBlY3RlZCkgeworICAgICAgICAgICAg
YXNzZXJ0KGZhbHNlLCAiYXNzZXJ0X2VxdWFscyIsIGRlc2NyaXB0aW9uLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAiZXhwZWN0ZWQgKCIgKyB0eXBlb2YgZXhwZWN0ZWQgKyAiKSAke2V4cGVj
dGVkfSBidXQgZ290ICgiICsgdHlwZW9mIGFjdHVhbCArICIpICR7YWN0dWFsfSIsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgIHtleHBlY3RlZDpleHBlY3RlZCwgYWN0dWFsOmFjdHVhbH0pOwor
ICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIGFzc2VydChzYW1lX3ZhbHVl
KGFjdHVhbCwgZXhwZWN0ZWQpLCAiYXNzZXJ0X2VxdWFscyIsIGRlc2NyaXB0aW9uLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImV4cGVjdGVkICR7ZXhwZWN0
ZWR9IGJ1dCBnb3QgJHthY3R1YWx9IiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHtleHBlY3RlZDpleHBlY3RlZCwgYWN0dWFsOmFjdHVhbH0pOworICAgIH07
CisgICAgZXhwb3NlKGFzc2VydF9lcXVhbHMsICJhc3NlcnRfZXF1YWxzIik7CisKKyAgICBmdW5j
dGlvbiBhc3NlcnRfbm90X2VxdWFscyhhY3R1YWwsIGV4cGVjdGVkLCBkZXNjcmlwdGlvbikKKyAg
ICB7CisgICAgICAgICAvKgorICAgICAgICAgICogVGVzdCBpZiB0d28gcHJpbWl0aXZlcyBhcmUg
dW5lcXVhbCBvciB0d28gb2JqZWN0cworICAgICAgICAgICogYXJlIGRpZmZlcmVudCBvYmplY3Rz
CisgICAgICAgICAgKi8KKyAgICAgICAgYXNzZXJ0KCFzYW1lX3ZhbHVlKGFjdHVhbCwgZXhwZWN0
ZWQpLCAiYXNzZXJ0X25vdF9lcXVhbHMiLCBkZXNjcmlwdGlvbiwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZ290IGRpc2FsbG93ZWQgdmFsdWUgJHthY3R1
YWx9IiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7YWN0
dWFsOmFjdHVhbH0pOworICAgIH07CisgICAgZXhwb3NlKGFzc2VydF9ub3RfZXF1YWxzLCAiYXNz
ZXJ0X25vdF9lcXVhbHMiKTsKKworICAgIGZ1bmN0aW9uIGFzc2VydF9pbl9hcnJheShhY3R1YWws
IGV4cGVjdGVkLCBkZXNjcmlwdGlvbikKKyAgICB7CisgICAgICAgIGFzc2VydChleHBlY3RlZC5p
bmRleE9mKGFjdHVhbCkgIT0gLTEsICJhc3NlcnRfaW5fYXJyYXkiLCBkZXNjcmlwdGlvbiwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInZhbHVlICR7YWN0
dWFsfSBub3QgaW4gYXJyYXkgJHtleHBlY3RlZH0iLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB7YWN0dWFsOmFjdHVhbCwgZXhwZWN0ZWQ6ZXhwZWN0ZWR9
KTsKKyAgICB9CisgICAgZXhwb3NlKGFzc2VydF9pbl9hcnJheSwgImFzc2VydF9pbl9hcnJheSIp
OworCisgICAgZnVuY3Rpb24gYXNzZXJ0X29iamVjdF9lcXVhbHMoYWN0dWFsLCBleHBlY3RlZCwg
ZGVzY3JpcHRpb24pCisgICAgeworICAgICAgICAgLy9UaGlzIG5lZWRzIHRvIGJlIGltcHJvdmVk
IGEgZ3JlYXQgZGVhbAorICAgICAgICAgZnVuY3Rpb24gY2hlY2tfZXF1YWwoYWN0dWFsLCBleHBl
Y3RlZCwgc3RhY2spCisgICAgICAgICB7CisgICAgICAgICAgICAgc3RhY2sucHVzaChhY3R1YWwp
OworCisgICAgICAgICAgICAgdmFyIHA7CisgICAgICAgICAgICAgZm9yIChwIGluIGFjdHVhbCkg
eworICAgICAgICAgICAgICAgICBhc3NlcnQoZXhwZWN0ZWQuaGFzT3duUHJvcGVydHkocCksICJh
c3NlcnRfb2JqZWN0X2VxdWFscyIsIGRlc2NyaXB0aW9uLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ1bmV4cGVjdGVkIHByb3BlcnR5ICR7cH0i
LCB7cDpwfSk7CisKKyAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBhY3R1YWxbcF0gPT09ICJv
YmplY3QiICYmIGFjdHVhbFtwXSAhPT0gbnVsbCkgeworICAgICAgICAgICAgICAgICAgICAgaWYg
KHN0YWNrLmluZGV4T2YoYWN0dWFsW3BdKSA9PT0gLTEpIHsKKyAgICAgICAgICAgICAgICAgICAg
ICAgICBjaGVja19lcXVhbChhY3R1YWxbcF0sIGV4cGVjdGVkW3BdLCBzdGFjayk7CisgICAgICAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAg
ICAgICAgICBhc3NlcnQoc2FtZV92YWx1ZShhY3R1YWxbcF0sIGV4cGVjdGVkW3BdKSwgImFzc2Vy
dF9vYmplY3RfZXF1YWxzIiwgZGVzY3JpcHRpb24sCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInByb3BlcnR5ICR7cH0gZXhwZWN0ZWQgJHtl
eHBlY3RlZH0gZ290ICR7YWN0dWFsfSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAge3A6cCwgZXhwZWN0ZWQ6ZXhwZWN0ZWQsIGFjdHVhbDph
Y3R1YWx9KTsKKyAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
ICBmb3IgKHAgaW4gZXhwZWN0ZWQpIHsKKyAgICAgICAgICAgICAgICAgYXNzZXJ0KGFjdHVhbC5o
YXNPd25Qcm9wZXJ0eShwKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICJhc3NlcnRfb2JqZWN0
X2VxdWFscyIsIGRlc2NyaXB0aW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgImV4cGVjdGVk
IHByb3BlcnR5ICR7cH0gbWlzc2luZyIsIHtwOnB9KTsKKyAgICAgICAgICAgICB9CisgICAgICAg
ICAgICAgc3RhY2sucG9wKCk7CisgICAgICAgICB9CisgICAgICAgICBjaGVja19lcXVhbChhY3R1
YWwsIGV4cGVjdGVkLCBbXSk7CisgICAgfTsKKyAgICBleHBvc2UoYXNzZXJ0X29iamVjdF9lcXVh
bHMsICJhc3NlcnRfb2JqZWN0X2VxdWFscyIpOworCisgICAgZnVuY3Rpb24gYXNzZXJ0X2FycmF5
X2VxdWFscyhhY3R1YWwsIGV4cGVjdGVkLCBkZXNjcmlwdGlvbikKKyAgICB7CisgICAgICAgIGFz
c2VydChhY3R1YWwubGVuZ3RoID09PSBleHBlY3RlZC5sZW5ndGgsCisgICAgICAgICAgICAgICAi
YXNzZXJ0X2FycmF5X2VxdWFscyIsIGRlc2NyaXB0aW9uLAorICAgICAgICAgICAgICAgImxlbmd0
aHMgZGlmZmVyLCBleHBlY3RlZCAke2V4cGVjdGVkfSBnb3QgJHthY3R1YWx9IiwKKyAgICAgICAg
ICAgICAgIHtleHBlY3RlZDpleHBlY3RlZC5sZW5ndGgsIGFjdHVhbDphY3R1YWwubGVuZ3RofSk7
CisKKyAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhY3R1YWwubGVuZ3RoOyBpKyspIHsKKyAg
ICAgICAgICAgIGFzc2VydChhY3R1YWwuaGFzT3duUHJvcGVydHkoaSkgPT09IGV4cGVjdGVkLmhh
c093blByb3BlcnR5KGkpLAorICAgICAgICAgICAgICAgICAgICJhc3NlcnRfYXJyYXlfZXF1YWxz
IiwgZGVzY3JpcHRpb24sCisgICAgICAgICAgICAgICAgICAgInByb3BlcnR5ICR7aX0sIHByb3Bl
cnR5IGV4cGVjdGVkIHRvIGJlICRleHBlY3RlZCBidXQgd2FzICRhY3R1YWwiLAorICAgICAgICAg
ICAgICAgICAgIHtpOmksIGV4cGVjdGVkOmV4cGVjdGVkLmhhc093blByb3BlcnR5KGkpID8gInBy
ZXNlbnQiIDogIm1pc3NpbmciLAorICAgICAgICAgICAgICAgICAgIGFjdHVhbDphY3R1YWwuaGFz
T3duUHJvcGVydHkoaSkgPyAicHJlc2VudCIgOiAibWlzc2luZyJ9KTsKKyAgICAgICAgICAgIGFz
c2VydChzYW1lX3ZhbHVlKGV4cGVjdGVkW2ldLCBhY3R1YWxbaV0pLAorICAgICAgICAgICAgICAg
ICAgICJhc3NlcnRfYXJyYXlfZXF1YWxzIiwgZGVzY3JpcHRpb24sCisgICAgICAgICAgICAgICAg
ICAgInByb3BlcnR5ICR7aX0sIGV4cGVjdGVkICR7ZXhwZWN0ZWR9IGJ1dCBnb3QgJHthY3R1YWx9
IiwKKyAgICAgICAgICAgICAgICAgICB7aTppLCBleHBlY3RlZDpleHBlY3RlZFtpXSwgYWN0dWFs
OmFjdHVhbFtpXX0pOworICAgICAgICB9CisgICAgfQorICAgIGV4cG9zZShhc3NlcnRfYXJyYXlf
ZXF1YWxzLCAiYXNzZXJ0X2FycmF5X2VxdWFscyIpOworCisgICAgZnVuY3Rpb24gYXNzZXJ0X2Fw
cHJveF9lcXVhbHMoYWN0dWFsLCBleHBlY3RlZCwgZXBzaWxvbiwgZGVzY3JpcHRpb24pCisgICAg
eworICAgICAgICAvKgorICAgICAgICAgKiBUZXN0IGlmIHR3byBwcmltaXRpdmUgbnVtYmVycyBh
cmUgZXF1YWwgd2l0aGluZyArLy0gZXBzaWxvbgorICAgICAgICAgKi8KKyAgICAgICAgYXNzZXJ0
KHR5cGVvZiBhY3R1YWwgPT09ICJudW1iZXIiLAorICAgICAgICAgICAgICAgImFzc2VydF9hcHBy
b3hfZXF1YWxzIiwgZGVzY3JpcHRpb24sCisgICAgICAgICAgICAgICAiZXhwZWN0ZWQgYSBudW1i
ZXIgYnV0IGdvdCBhICR7dHlwZV9hY3R1YWx9IiwKKyAgICAgICAgICAgICAgIHt0eXBlX2FjdHVh
bDp0eXBlb2YgYWN0dWFsfSk7CisKKyAgICAgICAgYXNzZXJ0KE1hdGguYWJzKGFjdHVhbCAtIGV4
cGVjdGVkKSA8PSBlcHNpbG9uLAorICAgICAgICAgICAgICAgImFzc2VydF9hcHByb3hfZXF1YWxz
IiwgZGVzY3JpcHRpb24sCisgICAgICAgICAgICAgICAiZXhwZWN0ZWQgJHtleHBlY3RlZH0gKy8t
ICR7ZXBzaWxvbn0gYnV0IGdvdCAke2FjdHVhbH0iLAorICAgICAgICAgICAgICAge2V4cGVjdGVk
OmV4cGVjdGVkLCBhY3R1YWw6YWN0dWFsLCBlcHNpbG9uOmVwc2lsb259KTsKKyAgICB9OworICAg
IGV4cG9zZShhc3NlcnRfYXBwcm94X2VxdWFscywgImFzc2VydF9hcHByb3hfZXF1YWxzIik7CisK
KyAgICBmdW5jdGlvbiBhc3NlcnRfbGVzc190aGFuKGFjdHVhbCwgZXhwZWN0ZWQsIGRlc2NyaXB0
aW9uKQorICAgIHsKKyAgICAgICAgLyoKKyAgICAgICAgICogVGVzdCBpZiBhIHByaW1pdGl2ZSBu
dW1iZXIgaXMgbGVzcyB0aGFuIGFub3RoZXIKKyAgICAgICAgICovCisgICAgICAgIGFzc2VydCh0
eXBlb2YgYWN0dWFsID09PSAibnVtYmVyIiwKKyAgICAgICAgICAgICAgICJhc3NlcnRfbGVzc190
aGFuIiwgZGVzY3JpcHRpb24sCisgICAgICAgICAgICAgICAiZXhwZWN0ZWQgYSBudW1iZXIgYnV0
IGdvdCBhICR7dHlwZV9hY3R1YWx9IiwKKyAgICAgICAgICAgICAgIHt0eXBlX2FjdHVhbDp0eXBl
b2YgYWN0dWFsfSk7CisKKyAgICAgICAgYXNzZXJ0KGFjdHVhbCA8IGV4cGVjdGVkLAorICAgICAg
ICAgICAgICAgImFzc2VydF9sZXNzX3RoYW4iLCBkZXNjcmlwdGlvbiwKKyAgICAgICAgICAgICAg
ICJleHBlY3RlZCBhIG51bWJlciBsZXNzIHRoYW4gJHtleHBlY3RlZH0gYnV0IGdvdCAke2FjdHVh
bH0iLAorICAgICAgICAgICAgICAge2V4cGVjdGVkOmV4cGVjdGVkLCBhY3R1YWw6YWN0dWFsfSk7
CisgICAgfTsKKyAgICBleHBvc2UoYXNzZXJ0X2xlc3NfdGhhbiwgImFzc2VydF9sZXNzX3RoYW4i
KTsKKworICAgIGZ1bmN0aW9uIGFzc2VydF9ncmVhdGVyX3RoYW4oYWN0dWFsLCBleHBlY3RlZCwg
ZGVzY3JpcHRpb24pCisgICAgeworICAgICAgICAvKgorICAgICAgICAgKiBUZXN0IGlmIGEgcHJp
bWl0aXZlIG51bWJlciBpcyBncmVhdGVyIHRoYW4gYW5vdGhlcgorICAgICAgICAgKi8KKyAgICAg
ICAgYXNzZXJ0KHR5cGVvZiBhY3R1YWwgPT09ICJudW1iZXIiLAorICAgICAgICAgICAgICAgImFz
c2VydF9ncmVhdGVyX3RoYW4iLCBkZXNjcmlwdGlvbiwKKyAgICAgICAgICAgICAgICJleHBlY3Rl
ZCBhIG51bWJlciBidXQgZ290IGEgJHt0eXBlX2FjdHVhbH0iLAorICAgICAgICAgICAgICAge3R5
cGVfYWN0dWFsOnR5cGVvZiBhY3R1YWx9KTsKKworICAgICAgICBhc3NlcnQoYWN0dWFsID4gZXhw
ZWN0ZWQsCisgICAgICAgICAgICAgICAiYXNzZXJ0X2dyZWF0ZXJfdGhhbiIsIGRlc2NyaXB0aW9u
LAorICAgICAgICAgICAgICAgImV4cGVjdGVkIGEgbnVtYmVyIGdyZWF0ZXIgdGhhbiAke2V4cGVj
dGVkfSBidXQgZ290ICR7YWN0dWFsfSIsCisgICAgICAgICAgICAgICB7ZXhwZWN0ZWQ6ZXhwZWN0
ZWQsIGFjdHVhbDphY3R1YWx9KTsKKyAgICB9OworICAgIGV4cG9zZShhc3NlcnRfZ3JlYXRlcl90
aGFuLCAiYXNzZXJ0X2dyZWF0ZXJfdGhhbiIpOworCisgICAgZnVuY3Rpb24gYXNzZXJ0X2xlc3Nf
dGhhbl9lcXVhbChhY3R1YWwsIGV4cGVjdGVkLCBkZXNjcmlwdGlvbikKKyAgICB7CisgICAgICAg
IC8qCisgICAgICAgICAqIFRlc3QgaWYgYSBwcmltaXRpdmUgbnVtYmVyIGlzIGxlc3MgdGhhbiBv
ciBlcXVhbCB0byBhbm90aGVyCisgICAgICAgICAqLworICAgICAgICBhc3NlcnQodHlwZW9mIGFj
dHVhbCA9PT0gIm51bWJlciIsCisgICAgICAgICAgICAgICAiYXNzZXJ0X2xlc3NfdGhhbl9lcXVh
bCIsIGRlc2NyaXB0aW9uLAorICAgICAgICAgICAgICAgImV4cGVjdGVkIGEgbnVtYmVyIGJ1dCBn
b3QgYSAke3R5cGVfYWN0dWFsfSIsCisgICAgICAgICAgICAgICB7dHlwZV9hY3R1YWw6dHlwZW9m
IGFjdHVhbH0pOworCisgICAgICAgIGFzc2VydChhY3R1YWwgPD0gZXhwZWN0ZWQsCisgICAgICAg
ICAgICAgICAiYXNzZXJ0X2xlc3NfdGhhbiIsIGRlc2NyaXB0aW9uLAorICAgICAgICAgICAgICAg
ImV4cGVjdGVkIGEgbnVtYmVyIGxlc3MgdGhhbiBvciBlcXVhbCB0byAke2V4cGVjdGVkfSBidXQg
Z290ICR7YWN0dWFsfSIsCisgICAgICAgICAgICAgICB7ZXhwZWN0ZWQ6ZXhwZWN0ZWQsIGFjdHVh
bDphY3R1YWx9KTsKKyAgICB9OworICAgIGV4cG9zZShhc3NlcnRfbGVzc190aGFuX2VxdWFsLCAi
YXNzZXJ0X2xlc3NfdGhhbl9lcXVhbCIpOworCisgICAgZnVuY3Rpb24gYXNzZXJ0X2dyZWF0ZXJf
dGhhbl9lcXVhbChhY3R1YWwsIGV4cGVjdGVkLCBkZXNjcmlwdGlvbikKKyAgICB7CisgICAgICAg
IC8qCisgICAgICAgICAqIFRlc3QgaWYgYSBwcmltaXRpdmUgbnVtYmVyIGlzIGdyZWF0ZXIgdGhh
biBvciBlcXVhbCB0byBhbm90aGVyCisgICAgICAgICAqLworICAgICAgICBhc3NlcnQodHlwZW9m
IGFjdHVhbCA9PT0gIm51bWJlciIsCisgICAgICAgICAgICAgICAiYXNzZXJ0X2dyZWF0ZXJfdGhh
bl9lcXVhbCIsIGRlc2NyaXB0aW9uLAorICAgICAgICAgICAgICAgImV4cGVjdGVkIGEgbnVtYmVy
IGJ1dCBnb3QgYSAke3R5cGVfYWN0dWFsfSIsCisgICAgICAgICAgICAgICB7dHlwZV9hY3R1YWw6
dHlwZW9mIGFjdHVhbH0pOworCisgICAgICAgIGFzc2VydChhY3R1YWwgPj0gZXhwZWN0ZWQsCisg
ICAgICAgICAgICAgICAiYXNzZXJ0X2dyZWF0ZXJfdGhhbl9lcXVhbCIsIGRlc2NyaXB0aW9uLAor
ICAgICAgICAgICAgICAgImV4cGVjdGVkIGEgbnVtYmVyIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0
byAke2V4cGVjdGVkfSBidXQgZ290ICR7YWN0dWFsfSIsCisgICAgICAgICAgICAgICB7ZXhwZWN0
ZWQ6ZXhwZWN0ZWQsIGFjdHVhbDphY3R1YWx9KTsKKyAgICB9OworICAgIGV4cG9zZShhc3NlcnRf
Z3JlYXRlcl90aGFuX2VxdWFsLCAiYXNzZXJ0X2dyZWF0ZXJfdGhhbl9lcXVhbCIpOworCisgICAg
ZnVuY3Rpb24gYXNzZXJ0X3JlZ2V4cF9tYXRjaChhY3R1YWwsIGV4cGVjdGVkLCBkZXNjcmlwdGlv
bikgeworICAgICAgICAvKgorICAgICAgICAgKiBUZXN0IGlmIGEgc3RyaW5nIChhY3R1YWwpIG1h
dGNoZXMgYSByZWdleHAgKGV4cGVjdGVkKQorICAgICAgICAgKi8KKyAgICAgICAgYXNzZXJ0KGV4
cGVjdGVkLnRlc3QoYWN0dWFsKSwKKyAgICAgICAgICAgICAgICJhc3NlcnRfcmVnZXhwX21hdGNo
IiwgZGVzY3JpcHRpb24sCisgICAgICAgICAgICAgICAiZXhwZWN0ZWQgJHtleHBlY3RlZH0gYnV0
IGdvdCAke2FjdHVhbH0iLAorICAgICAgICAgICAgICAge2V4cGVjdGVkOmV4cGVjdGVkLCBhY3R1
YWw6YWN0dWFsfSk7CisgICAgfQorICAgIGV4cG9zZShhc3NlcnRfcmVnZXhwX21hdGNoLCAiYXNz
ZXJ0X3JlZ2V4cF9tYXRjaCIpOworCisgICAgZnVuY3Rpb24gYXNzZXJ0X2NsYXNzX3N0cmluZyhv
YmplY3QsIGNsYXNzX3N0cmluZywgZGVzY3JpcHRpb24pIHsKKyAgICAgICAgYXNzZXJ0X2VxdWFs
cyh7fS50b1N0cmluZy5jYWxsKG9iamVjdCksICJbb2JqZWN0ICIgKyBjbGFzc19zdHJpbmcgKyAi
XSIsCisgICAgICAgICAgICAgICAgICAgICAgZGVzY3JpcHRpb24pOworICAgIH0KKyAgICBleHBv
c2UoYXNzZXJ0X2NsYXNzX3N0cmluZywgImFzc2VydF9jbGFzc19zdHJpbmciKTsKKworCisgICAg
ZnVuY3Rpb24gX2Fzc2VydF9vd25fcHJvcGVydHkobmFtZSkgeworICAgICAgICByZXR1cm4gZnVu
Y3Rpb24ob2JqZWN0LCBwcm9wZXJ0eV9uYW1lLCBkZXNjcmlwdGlvbikKKyAgICAgICAgeworICAg
ICAgICAgICAgYXNzZXJ0KG9iamVjdC5oYXNPd25Qcm9wZXJ0eShwcm9wZXJ0eV9uYW1lKSwKKyAg
ICAgICAgICAgICAgICAgICBuYW1lLCBkZXNjcmlwdGlvbiwKKyAgICAgICAgICAgICAgICAgICAi
ZXhwZWN0ZWQgcHJvcGVydHkgJHtwfSBtaXNzaW5nIiwge3A6cHJvcGVydHlfbmFtZX0pOworICAg
ICAgICB9OworICAgIH0KKyAgICBleHBvc2UoX2Fzc2VydF9vd25fcHJvcGVydHkoImFzc2VydF9l
eGlzdHMiKSwgImFzc2VydF9leGlzdHMiKTsKKyAgICBleHBvc2UoX2Fzc2VydF9vd25fcHJvcGVy
dHkoImFzc2VydF9vd25fcHJvcGVydHkiKSwgImFzc2VydF9vd25fcHJvcGVydHkiKTsKKworICAg
IGZ1bmN0aW9uIGFzc2VydF9ub3RfZXhpc3RzKG9iamVjdCwgcHJvcGVydHlfbmFtZSwgZGVzY3Jp
cHRpb24pCisgICAgeworICAgICAgICBhc3NlcnQoIW9iamVjdC5oYXNPd25Qcm9wZXJ0eShwcm9w
ZXJ0eV9uYW1lKSwKKyAgICAgICAgICAgICAgICJhc3NlcnRfbm90X2V4aXN0cyIsIGRlc2NyaXB0
aW9uLAorICAgICAgICAgICAgICAgInVuZXhwZWN0ZWQgcHJvcGVydHkgJHtwfSBmb3VuZCIsIHtw
OnByb3BlcnR5X25hbWV9KTsKKyAgICB9OworICAgIGV4cG9zZShhc3NlcnRfbm90X2V4aXN0cywg
ImFzc2VydF9ub3RfZXhpc3RzIik7CisKKyAgICBmdW5jdGlvbiBfYXNzZXJ0X2luaGVyaXRzKG5h
bWUpIHsKKyAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIChvYmplY3QsIHByb3BlcnR5X25hbWUsIGRl
c2NyaXB0aW9uKQorICAgICAgICB7CisgICAgICAgICAgICBhc3NlcnQodHlwZW9mIG9iamVjdCA9
PT0gIm9iamVjdCIsCisgICAgICAgICAgICAgICAgICAgbmFtZSwgZGVzY3JpcHRpb24sCisgICAg
ICAgICAgICAgICAgICAgInByb3ZpZGVkIHZhbHVlIGlzIG5vdCBhbiBvYmplY3QiKTsKKworICAg
ICAgICAgICAgYXNzZXJ0KCJoYXNPd25Qcm9wZXJ0eSIgaW4gb2JqZWN0LAorICAgICAgICAgICAg
ICAgICAgIG5hbWUsIGRlc2NyaXB0aW9uLAorICAgICAgICAgICAgICAgICAgICJwcm92aWRlZCB2
YWx1ZSBpcyBhbiBvYmplY3QgYnV0IGhhcyBubyBoYXNPd25Qcm9wZXJ0eSBtZXRob2QiKTsKKwor
ICAgICAgICAgICAgYXNzZXJ0KCFvYmplY3QuaGFzT3duUHJvcGVydHkocHJvcGVydHlfbmFtZSks
CisgICAgICAgICAgICAgICAgICAgbmFtZSwgZGVzY3JpcHRpb24sCisgICAgICAgICAgICAgICAg
ICAgInByb3BlcnR5ICR7cH0gZm91bmQgb24gb2JqZWN0IGV4cGVjdGVkIGluIHByb3RvdHlwZSBj
aGFpbiIsCisgICAgICAgICAgICAgICAgICAge3A6cHJvcGVydHlfbmFtZX0pOworCisgICAgICAg
ICAgICBhc3NlcnQocHJvcGVydHlfbmFtZSBpbiBvYmplY3QsCisgICAgICAgICAgICAgICAgICAg
bmFtZSwgZGVzY3JpcHRpb24sCisgICAgICAgICAgICAgICAgICAgInByb3BlcnR5ICR7cH0gbm90
IGZvdW5kIGluIHByb3RvdHlwZSBjaGFpbiIsCisgICAgICAgICAgICAgICAgICAge3A6cHJvcGVy
dHlfbmFtZX0pOworICAgICAgICB9OworICAgIH0KKyAgICBleHBvc2UoX2Fzc2VydF9pbmhlcml0
cygiYXNzZXJ0X2luaGVyaXRzIiksICJhc3NlcnRfaW5oZXJpdHMiKTsKKyAgICBleHBvc2UoX2Fz
c2VydF9pbmhlcml0cygiYXNzZXJ0X2lkbF9hdHRyaWJ1dGUiKSwgImFzc2VydF9pZGxfYXR0cmli
dXRlIik7CisKKyAgICBmdW5jdGlvbiBhc3NlcnRfcmVhZG9ubHkob2JqZWN0LCBwcm9wZXJ0eV9u
YW1lLCBkZXNjcmlwdGlvbikKKyAgICB7CisgICAgICAgICB2YXIgaW5pdGlhbF92YWx1ZSA9IG9i
amVjdFtwcm9wZXJ0eV9uYW1lXTsKKyAgICAgICAgIHRyeSB7CisgICAgICAgICAgICAgLy9Ob3Rl
IHRoYXQgdGhpcyBjYW4gaGF2ZSBzaWRlIGVmZmVjdHMgaW4gdGhlIGNhc2Ugd2hlcmUKKyAgICAg
ICAgICAgICAvL3RoZSBwcm9wZXJ0eSBoYXMgUHV0Rm9yd2FyZHMKKyAgICAgICAgICAgICBvYmpl
Y3RbcHJvcGVydHlfbmFtZV0gPSBpbml0aWFsX3ZhbHVlICsgImEiOyAvL1hYWCB1c2Ugc29tZSBv
dGhlciB2YWx1ZSBoZXJlPworICAgICAgICAgICAgIGFzc2VydChzYW1lX3ZhbHVlKG9iamVjdFtw
cm9wZXJ0eV9uYW1lXSwgaW5pdGlhbF92YWx1ZSksCisgICAgICAgICAgICAgICAgICAgICJhc3Nl
cnRfcmVhZG9ubHkiLCBkZXNjcmlwdGlvbiwKKyAgICAgICAgICAgICAgICAgICAgImNoYW5naW5n
IHByb3BlcnR5ICR7cH0gc3VjY2VlZGVkIiwKKyAgICAgICAgICAgICAgICAgICAge3A6cHJvcGVy
dHlfbmFtZX0pOworICAgICAgICAgfSBmaW5hbGx5IHsKKyAgICAgICAgICAgICBvYmplY3RbcHJv
cGVydHlfbmFtZV0gPSBpbml0aWFsX3ZhbHVlOworICAgICAgICAgfQorICAgIH07CisgICAgZXhw
b3NlKGFzc2VydF9yZWFkb25seSwgImFzc2VydF9yZWFkb25seSIpOworCisgICAgZnVuY3Rpb24g
YXNzZXJ0X3Rocm93cyhjb2RlLCBmdW5jLCBkZXNjcmlwdGlvbikKKyAgICB7CisgICAgICAgIHRy
eSB7CisgICAgICAgICAgICBmdW5jLmNhbGwodGhpcyk7CisgICAgICAgICAgICBhc3NlcnQoZmFs
c2UsICJhc3NlcnRfdGhyb3dzIiwgZGVzY3JpcHRpb24sCisgICAgICAgICAgICAgICAgICAgIiR7
ZnVuY30gZGlkIG5vdCB0aHJvdyIsIHtmdW5jOmZ1bmN9KTsKKyAgICAgICAgfSBjYXRjaCAoZSkg
eworICAgICAgICAgICAgaWYgKGUgaW5zdGFuY2VvZiBBc3NlcnRpb25FcnJvcikgeworICAgICAg
ICAgICAgICAgIHRocm93IGU7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoY29kZSA9
PT0gbnVsbCkgeworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIGlmICh0eXBlb2YgY29kZSA9PT0gIm9iamVjdCIpIHsKKyAgICAgICAgICAgICAgICBh
c3NlcnQodHlwZW9mIGUgPT0gIm9iamVjdCIgJiYgIm5hbWUiIGluIGUgJiYgZS5uYW1lID09IGNv
ZGUubmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgImFzc2VydF90aHJvd3MiLCBkZXNjcmlw
dGlvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgIiR7ZnVuY30gdGhyZXcgJHthY3R1YWx9ICgk
e2FjdHVhbF9uYW1lfSkgZXhwZWN0ZWQgJHtleHBlY3RlZH0gKCR7ZXhwZWN0ZWRfbmFtZX0pIiwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtmdW5jOmZ1bmMsIGFjdHVhbDpl
LCBhY3R1YWxfbmFtZTplLm5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgZXhwZWN0ZWQ6Y29kZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBl
eHBlY3RlZF9uYW1lOmNvZGUubmFtZX0pOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAg
ICAgICAgIH0KKworICAgICAgICAgICAgdmFyIGNvZGVfbmFtZV9tYXAgPSB7CisgICAgICAgICAg
ICAgICAgSU5ERVhfU0laRV9FUlI6ICdJbmRleFNpemVFcnJvcicsCisgICAgICAgICAgICAgICAg
SElFUkFSQ0hZX1JFUVVFU1RfRVJSOiAnSGllcmFyY2h5UmVxdWVzdEVycm9yJywKKyAgICAgICAg
ICAgICAgICBXUk9OR19ET0NVTUVOVF9FUlI6ICdXcm9uZ0RvY3VtZW50RXJyb3InLAorICAgICAg
ICAgICAgICAgIElOVkFMSURfQ0hBUkFDVEVSX0VSUjogJ0ludmFsaWRDaGFyYWN0ZXJFcnJvcics
CisgICAgICAgICAgICAgICAgTk9fTU9ESUZJQ0FUSU9OX0FMTE9XRURfRVJSOiAnTm9Nb2RpZmlj
YXRpb25BbGxvd2VkRXJyb3InLAorICAgICAgICAgICAgICAgIE5PVF9GT1VORF9FUlI6ICdOb3RG
b3VuZEVycm9yJywKKyAgICAgICAgICAgICAgICBOT1RfU1VQUE9SVEVEX0VSUjogJ05vdFN1cHBv
cnRlZEVycm9yJywKKyAgICAgICAgICAgICAgICBJTlZBTElEX1NUQVRFX0VSUjogJ0ludmFsaWRT
dGF0ZUVycm9yJywKKyAgICAgICAgICAgICAgICBTWU5UQVhfRVJSOiAnU3ludGF4RXJyb3InLAor
ICAgICAgICAgICAgICAgIElOVkFMSURfTU9ESUZJQ0FUSU9OX0VSUjogJ0ludmFsaWRNb2RpZmlj
YXRpb25FcnJvcicsCisgICAgICAgICAgICAgICAgTkFNRVNQQUNFX0VSUjogJ05hbWVzcGFjZUVy
cm9yJywKKyAgICAgICAgICAgICAgICBJTlZBTElEX0FDQ0VTU19FUlI6ICdJbnZhbGlkQWNjZXNz
RXJyb3InLAorICAgICAgICAgICAgICAgIFRZUEVfTUlTTUFUQ0hfRVJSOiAnVHlwZU1pc21hdGNo
RXJyb3InLAorICAgICAgICAgICAgICAgIFNFQ1VSSVRZX0VSUjogJ1NlY3VyaXR5RXJyb3InLAor
ICAgICAgICAgICAgICAgIE5FVFdPUktfRVJSOiAnTmV0d29ya0Vycm9yJywKKyAgICAgICAgICAg
ICAgICBBQk9SVF9FUlI6ICdBYm9ydEVycm9yJywKKyAgICAgICAgICAgICAgICBVUkxfTUlTTUFU
Q0hfRVJSOiAnVVJMTWlzbWF0Y2hFcnJvcicsCisgICAgICAgICAgICAgICAgUVVPVEFfRVhDRUVE
RURfRVJSOiAnUXVvdGFFeGNlZWRlZEVycm9yJywKKyAgICAgICAgICAgICAgICBUSU1FT1VUX0VS
UjogJ1RpbWVvdXRFcnJvcicsCisgICAgICAgICAgICAgICAgSU5WQUxJRF9OT0RFX1RZUEVfRVJS
OiAnSW52YWxpZE5vZGVUeXBlRXJyb3InLAorICAgICAgICAgICAgICAgIERBVEFfQ0xPTkVfRVJS
OiAnRGF0YUNsb25lRXJyb3InCisgICAgICAgICAgICB9OworCisgICAgICAgICAgICB2YXIgbmFt
ZSA9IGNvZGUgaW4gY29kZV9uYW1lX21hcCA/IGNvZGVfbmFtZV9tYXBbY29kZV0gOiBjb2RlOwor
CisgICAgICAgICAgICB2YXIgbmFtZV9jb2RlX21hcCA9IHsKKyAgICAgICAgICAgICAgICBJbmRl
eFNpemVFcnJvcjogMSwKKyAgICAgICAgICAgICAgICBIaWVyYXJjaHlSZXF1ZXN0RXJyb3I6IDMs
CisgICAgICAgICAgICAgICAgV3JvbmdEb2N1bWVudEVycm9yOiA0LAorICAgICAgICAgICAgICAg
IEludmFsaWRDaGFyYWN0ZXJFcnJvcjogNSwKKyAgICAgICAgICAgICAgICBOb01vZGlmaWNhdGlv
bkFsbG93ZWRFcnJvcjogNywKKyAgICAgICAgICAgICAgICBOb3RGb3VuZEVycm9yOiA4LAorICAg
ICAgICAgICAgICAgIE5vdFN1cHBvcnRlZEVycm9yOiA5LAorICAgICAgICAgICAgICAgIEludmFs
aWRTdGF0ZUVycm9yOiAxMSwKKyAgICAgICAgICAgICAgICBTeW50YXhFcnJvcjogMTIsCisgICAg
ICAgICAgICAgICAgSW52YWxpZE1vZGlmaWNhdGlvbkVycm9yOiAxMywKKyAgICAgICAgICAgICAg
ICBOYW1lc3BhY2VFcnJvcjogMTQsCisgICAgICAgICAgICAgICAgSW52YWxpZEFjY2Vzc0Vycm9y
OiAxNSwKKyAgICAgICAgICAgICAgICBUeXBlTWlzbWF0Y2hFcnJvcjogMTcsCisgICAgICAgICAg
ICAgICAgU2VjdXJpdHlFcnJvcjogMTgsCisgICAgICAgICAgICAgICAgTmV0d29ya0Vycm9yOiAx
OSwKKyAgICAgICAgICAgICAgICBBYm9ydEVycm9yOiAyMCwKKyAgICAgICAgICAgICAgICBVUkxN
aXNtYXRjaEVycm9yOiAyMSwKKyAgICAgICAgICAgICAgICBRdW90YUV4Y2VlZGVkRXJyb3I6IDIy
LAorICAgICAgICAgICAgICAgIFRpbWVvdXRFcnJvcjogMjMsCisgICAgICAgICAgICAgICAgSW52
YWxpZE5vZGVUeXBlRXJyb3I6IDI0LAorICAgICAgICAgICAgICAgIERhdGFDbG9uZUVycm9yOiAy
NSwKKworICAgICAgICAgICAgICAgIFVua25vd25FcnJvcjogMCwKKyAgICAgICAgICAgICAgICBD
b25zdHJhaW50RXJyb3I6IDAsCisgICAgICAgICAgICAgICAgRGF0YUVycm9yOiAwLAorICAgICAg
ICAgICAgICAgIFRyYW5zYWN0aW9uSW5hY3RpdmVFcnJvcjogMCwKKyAgICAgICAgICAgICAgICBS
ZWFkT25seUVycm9yOiAwLAorICAgICAgICAgICAgICAgIFZlcnNpb25FcnJvcjogMAorICAgICAg
ICAgICAgfTsKKworICAgICAgICAgICAgaWYgKCEobmFtZSBpbiBuYW1lX2NvZGVfbWFwKSkgewor
ICAgICAgICAgICAgICAgIHRocm93IG5ldyBBc3NlcnRpb25FcnJvcignVGVzdCBidWc6IHVucmVj
b2duaXplZCBET01FeGNlcHRpb24gY29kZSAiJyArIGNvZGUgKyAnIiBwYXNzZWQgdG8gYXNzZXJ0
X3Rocm93cygpJyk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHZhciByZXF1aXJlZF9w
cm9wcyA9IHsgY29kZTogbmFtZV9jb2RlX21hcFtuYW1lXSB9OworCisgICAgICAgICAgICBpZiAo
cmVxdWlyZWRfcHJvcHMuY29kZSA9PT0gMAorICAgICAgICAgICAgfHwgKCJuYW1lIiBpbiBlICYm
IGUubmFtZSAhPT0gZS5uYW1lLnRvVXBwZXJDYXNlKCkgJiYgZS5uYW1lICE9PSAiRE9NRXhjZXB0
aW9uIikpIHsKKyAgICAgICAgICAgICAgICAvLyBOZXcgc3R5bGUgZXhjZXB0aW9uOiBhbHNvIHRl
c3QgdGhlIG5hbWUgcHJvcGVydHkuCisgICAgICAgICAgICAgICAgcmVxdWlyZWRfcHJvcHMubmFt
ZSA9IG5hbWU7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIC8vV2UnZCBsaWtlIHRvIHRl
c3QgdGhhdCBlIGluc3RhbmNlb2YgdGhlIGFwcHJvcHJpYXRlIGludGVyZmFjZSwKKyAgICAgICAg
ICAgIC8vYnV0IHdlIGNhbid0LCBiZWNhdXNlIHdlIGRvbid0IGtub3cgd2hhdCB3aW5kb3cgaXQg
d2FzIGNyZWF0ZWQKKyAgICAgICAgICAgIC8vaW4uICBJdCBtaWdodCBiZSBhbiBpbnN0YW5jZW9m
IHRoZSBhcHByb3ByaWF0ZSBpbnRlcmZhY2Ugb24gc29tZQorICAgICAgICAgICAgLy91bmtub3du
IG90aGVyIHdpbmRvdy4gIFRPRE86IFdvcmsgYXJvdW5kIHRoaXMgc29tZWhvdz8KKworICAgICAg
ICAgICAgYXNzZXJ0KHR5cGVvZiBlID09ICJvYmplY3QiLAorICAgICAgICAgICAgICAgICAgICJh
c3NlcnRfdGhyb3dzIiwgZGVzY3JpcHRpb24sCisgICAgICAgICAgICAgICAgICAgIiR7ZnVuY30g
dGhyZXcgJHtlfSB3aXRoIHR5cGUgJHt0eXBlfSwgbm90IGFuIG9iamVjdCIsCisgICAgICAgICAg
ICAgICAgICAge2Z1bmM6ZnVuYywgZTplLCB0eXBlOnR5cGVvZiBlfSk7CisKKyAgICAgICAgICAg
IGZvciAodmFyIHByb3AgaW4gcmVxdWlyZWRfcHJvcHMpIHsKKyAgICAgICAgICAgICAgICBhc3Nl
cnQodHlwZW9mIGUgPT0gIm9iamVjdCIgJiYgcHJvcCBpbiBlICYmIGVbcHJvcF0gPT0gcmVxdWly
ZWRfcHJvcHNbcHJvcF0sCisgICAgICAgICAgICAgICAgICAgICAgICJhc3NlcnRfdGhyb3dzIiwg
ZGVzY3JpcHRpb24sCisgICAgICAgICAgICAgICAgICAgICAgICIke2Z1bmN9IHRocmV3ICR7ZX0g
dGhhdCBpcyBub3QgYSBET01FeGNlcHRpb24gIiArIGNvZGUgKyAiOiBwcm9wZXJ0eSAke3Byb3B9
IGlzIGVxdWFsIHRvICR7YWN0dWFsfSwgZXhwZWN0ZWQgJHtleHBlY3RlZH0iLAorICAgICAgICAg
ICAgICAgICAgICAgICB7ZnVuYzpmdW5jLCBlOmUsIHByb3A6cHJvcCwgYWN0dWFsOmVbcHJvcF0s
IGV4cGVjdGVkOnJlcXVpcmVkX3Byb3BzW3Byb3BdfSk7CisgICAgICAgICAgICB9CisgICAgICAg
IH0KKyAgICB9CisgICAgZXhwb3NlKGFzc2VydF90aHJvd3MsICJhc3NlcnRfdGhyb3dzIik7CisK
KyAgICBmdW5jdGlvbiBhc3NlcnRfdW5yZWFjaGVkKGRlc2NyaXB0aW9uKSB7CisgICAgICAgICBh
c3NlcnQoZmFsc2UsICJhc3NlcnRfdW5yZWFjaGVkIiwgZGVzY3JpcHRpb24sCisgICAgICAgICAg
ICAgICAgIlJlYWNoZWQgdW5yZWFjaGFibGUgY29kZSIpOworICAgIH0KKyAgICBleHBvc2UoYXNz
ZXJ0X3VucmVhY2hlZCwgImFzc2VydF91bnJlYWNoZWQiKTsKKworICAgIGZ1bmN0aW9uIGFzc2Vy
dF9hbnkoYXNzZXJ0X2Z1bmMsIGFjdHVhbCwgZXhwZWN0ZWRfYXJyYXkpCisgICAgeworICAgICAg
ICB2YXIgYXJncyA9IFtdLnNsaWNlLmNhbGwoYXJndW1lbnRzLCAzKQorICAgICAgICB2YXIgZXJy
b3JzID0gW10KKyAgICAgICAgdmFyIHBhc3NlZCA9IGZhbHNlOworICAgICAgICBmb3JFYWNoKGV4
cGVjdGVkX2FycmF5LAorICAgICAgICAgICAgICAgIGZ1bmN0aW9uKGV4cGVjdGVkKQorICAgICAg
ICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIGFzc2VydF9mdW5jLmFwcGx5KHRoaXMsIFthY3R1YWwsIGV4cGVjdGVkXS5jb25jYXQo
YXJncykpCisgICAgICAgICAgICAgICAgICAgICAgICBwYXNzZWQgPSB0cnVlOworICAgICAgICAg
ICAgICAgICAgICB9IGNhdGNoIChlKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBlcnJvcnMu
cHVzaChlLm1lc3NhZ2UpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAg
fSk7CisgICAgICAgIGlmICghcGFzc2VkKSB7CisgICAgICAgICAgICB0aHJvdyBuZXcgQXNzZXJ0
aW9uRXJyb3IoZXJyb3JzLmpvaW4oIlxuXG4iKSk7CisgICAgICAgIH0KKyAgICB9CisgICAgZXhw
b3NlKGFzc2VydF9hbnksICJhc3NlcnRfYW55Iik7CisKKyAgICBmdW5jdGlvbiBUZXN0KG5hbWUs
IHByb3BlcnRpZXMpCisgICAgeworICAgICAgICB0aGlzLm5hbWUgPSBuYW1lOworCisgICAgICAg
IHRoaXMucGhhc2VzID0geworICAgICAgICAgICAgSU5JVElBTDowLAorICAgICAgICAgICAgU1RB
UlRFRDoxLAorICAgICAgICAgICAgSEFTX1JFU1VMVDoyLAorICAgICAgICAgICAgQ09NUExFVEU6
MworICAgICAgICB9OworICAgICAgICB0aGlzLnBoYXNlID0gdGhpcy5waGFzZXMuSU5JVElBTDsK
KworICAgICAgICB0aGlzLnN0YXR1cyA9IHRoaXMuTk9UUlVOOworICAgICAgICB0aGlzLnRpbWVv
dXRfaWQgPSBudWxsOworCisgICAgICAgIHRoaXMucHJvcGVydGllcyA9IHByb3BlcnRpZXM7Cisg
ICAgICAgIHZhciB0aW1lb3V0ID0gcHJvcGVydGllcy50aW1lb3V0ID8gcHJvcGVydGllcy50aW1l
b3V0IDogc2V0dGluZ3MudGVzdF90aW1lb3V0CisgICAgICAgIGlmICh0aW1lb3V0ICE9IG51bGwp
IHsKKyAgICAgICAgICAgIHRoaXMudGltZW91dF9sZW5ndGggPSB0aW1lb3V0ICogdGVzdHMudGlt
ZW91dF9tdWx0aXBsaWVyOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgdGhpcy50aW1l
b3V0X2xlbmd0aCA9IG51bGw7CisgICAgICAgIH0KKworICAgICAgICB0aGlzLm1lc3NhZ2UgPSBu
dWxsOworCisgICAgICAgIHZhciB0aGlzX29iaiA9IHRoaXM7CisgICAgICAgIHRoaXMuc3RlcHMg
PSBbXTsKKworICAgICAgICB0aGlzLmNsZWFudXBfY2FsbGJhY2tzID0gW107CisKKyAgICAgICAg
dGVzdHMucHVzaCh0aGlzKTsKKyAgICB9CisKKyAgICBUZXN0LnN0YXR1c2VzID0geworICAgICAg
ICBQQVNTOjAsCisgICAgICAgIEZBSUw6MSwKKyAgICAgICAgVElNRU9VVDoyLAorICAgICAgICBO
T1RSVU46MworICAgIH07CisKKyAgICBUZXN0LnByb3RvdHlwZSA9IG1lcmdlKHt9LCBUZXN0LnN0
YXR1c2VzKTsKKworICAgIFRlc3QucHJvdG90eXBlLnN0cnVjdHVyZWRfY2xvbmUgPSBmdW5jdGlv
bigpCisgICAgeworICAgICAgICBpZiAoIXRoaXMuX3N0cnVjdHVyZWRfY2xvbmUpIHsKKyAgICAg
ICAgICAgIHZhciBtc2cgPSB0aGlzLm1lc3NhZ2U7CisgICAgICAgICAgICBtc2cgPSBtc2cgPyBT
dHJpbmcobXNnKSA6IG1zZzsKKyAgICAgICAgICAgIHRoaXMuX3N0cnVjdHVyZWRfY2xvbmUgPSBt
ZXJnZSh7CisgICAgICAgICAgICAgICAgbmFtZTpTdHJpbmcodGhpcy5uYW1lKSwKKyAgICAgICAg
ICAgICAgICBzdGF0dXM6dGhpcy5zdGF0dXMsCisgICAgICAgICAgICAgICAgbWVzc2FnZTptc2cK
KyAgICAgICAgICAgIH0sIFRlc3Quc3RhdHVzZXMpOworICAgICAgICB9CisgICAgICAgIHJldHVy
biB0aGlzLl9zdHJ1Y3R1cmVkX2Nsb25lOworICAgIH07CisKKyAgICBUZXN0LnByb3RvdHlwZS5z
dGVwID0gZnVuY3Rpb24oZnVuYywgdGhpc19vYmopCisgICAgeworICAgICAgICBpZiAodGhpcy5w
aGFzZSA+IHRoaXMucGhhc2VzLlNUQVJURUQpIHsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAg
ICAgfQorICAgICAgICB0aGlzLnBoYXNlID0gdGhpcy5waGFzZXMuU1RBUlRFRDsKKyAgICAgICAg
Ly9JZiB3ZSBkb24ndCBnZXQgYSByZXN1bHQgYmVmb3JlIHRoZSBoYXJuZXNzIHRpbWVzIG91dCB0
aGF0IHdpbGwgYmUgYSB0ZXN0IHRpbW91dAorICAgICAgICB0aGlzLnNldF9zdGF0dXModGhpcy5U
SU1FT1VULCAiVGVzdCB0aW1lZCBvdXQiKTsKKworICAgICAgICB0ZXN0cy5zdGFydGVkID0gdHJ1
ZTsKKworICAgICAgICBpZiAodGhpcy50aW1lb3V0X2lkID09PSBudWxsKSB7CisgICAgICAgICAg
ICB0aGlzLnNldF90aW1lb3V0KCk7CisgICAgICAgIH0KKworICAgICAgICB0aGlzLnN0ZXBzLnB1
c2goZnVuYyk7CisKKyAgICAgICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT09IDEpIHsKKyAgICAg
ICAgICAgIHRoaXNfb2JqID0gdGhpczsKKyAgICAgICAgfQorCisgICAgICAgIHRyeSB7CisgICAg
ICAgICAgICByZXR1cm4gZnVuYy5hcHBseSh0aGlzX29iaiwgQXJyYXkucHJvdG90eXBlLnNsaWNl
LmNhbGwoYXJndW1lbnRzLCAyKSk7CisgICAgICAgIH0gY2F0Y2ggKGUpIHsKKyAgICAgICAgICAg
IGlmICh0aGlzLnBoYXNlID49IHRoaXMucGhhc2VzLkhBU19SRVNVTFQpIHsKKyAgICAgICAgICAg
ICAgICByZXR1cm47CisgICAgICAgICAgICB9CisgICAgICAgICAgICB2YXIgbWVzc2FnZSA9ICh0
eXBlb2YgZSA9PT0gIm9iamVjdCIgJiYgZSAhPT0gbnVsbCkgPyBlLm1lc3NhZ2UgOiBlOworICAg
ICAgICAgICAgaWYgKHR5cGVvZiBlLnN0YWNrICE9ICJ1bmRlZmluZWQiICYmIHR5cGVvZiBlLm1l
c3NhZ2UgPT0gInN0cmluZyIpIHsKKyAgICAgICAgICAgICAgICAvL1RyeSB0byBtYWtlIGl0IG1v
cmUgaW5mb3JtYXRpdmUgZm9yIHNvbWUgZXhjZXB0aW9ucywgYXQgbGVhc3QKKyAgICAgICAgICAg
ICAgICAvL2luIEdlY2tvIGFuZCBXZWJLaXQuICBUaGlzIHJlc3VsdHMgaW4gYSBzdGFjayBkdW1w
IGluc3RlYWQgb2YKKyAgICAgICAgICAgICAgICAvL2p1c3QgZXJyb3JzIGxpa2UgIkNhbm5vdCBy
ZWFkIHByb3BlcnR5ICdwYXJlbnROb2RlJyBvZiBudWxsIgorICAgICAgICAgICAgICAgIC8vb3Ig
InJvb3QgaXMgbnVsbCIuICBNYWtlcyBpdCBhIGxvdCBsb25nZXIsIG9mIGNvdXJzZS4KKyAgICAg
ICAgICAgICAgICBtZXNzYWdlICs9ICIoc3RhY2s6ICIgKyBlLnN0YWNrICsgIikiOworICAgICAg
ICAgICAgfQorICAgICAgICAgICAgdGhpcy5zZXRfc3RhdHVzKHRoaXMuRkFJTCwgbWVzc2FnZSk7
CisgICAgICAgICAgICB0aGlzLnBoYXNlID0gdGhpcy5waGFzZXMuSEFTX1JFU1VMVDsKKyAgICAg
ICAgICAgIHRoaXMuZG9uZSgpOworICAgICAgICB9CisgICAgfTsKKworICAgIFRlc3QucHJvdG90
eXBlLnN0ZXBfZnVuYyA9IGZ1bmN0aW9uKGZ1bmMsIHRoaXNfb2JqKQorICAgIHsKKyAgICAgICAg
dmFyIHRlc3RfdGhpcyA9IHRoaXM7CisKKyAgICAgICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT09
IDEpIHsKKyAgICAgICAgICAgIHRoaXNfb2JqID0gdGVzdF90aGlzOworICAgICAgICB9CisKKyAg
ICAgICAgcmV0dXJuIGZ1bmN0aW9uKCkKKyAgICAgICAgeworICAgICAgICAgICAgdGVzdF90aGlz
LnN0ZXAuYXBwbHkodGVzdF90aGlzLCBbZnVuYywgdGhpc19vYmpdLmNvbmNhdCgKKyAgICAgICAg
ICAgICAgICBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMpKSk7CisgICAgICAg
IH07CisgICAgfTsKKworICAgIFRlc3QucHJvdG90eXBlLnN0ZXBfZnVuY19kb25lID0gZnVuY3Rp
b24oZnVuYywgdGhpc19vYmopCisgICAgeworICAgICAgICB2YXIgdGVzdF90aGlzID0gdGhpczsK
KworICAgICAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCA9PT0gMSkgeworICAgICAgICAgICAgdGhp
c19vYmogPSB0ZXN0X3RoaXM7CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4gZnVuY3Rpb24o
KQorICAgICAgICB7CisgICAgICAgICAgICBpZiAoZnVuYykgeworICAgICAgICAgICAgICAgIHRl
c3RfdGhpcy5zdGVwLmFwcGx5KHRlc3RfdGhpcywgW2Z1bmMsIHRoaXNfb2JqXS5jb25jYXQoCisg
ICAgICAgICAgICAgICAgICAgIEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cykp
KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHRlc3RfdGhpcy5kb25lKCk7CisgICAgICAg
IH07CisgICAgfQorCisgICAgVGVzdC5wcm90b3R5cGUuYWRkX2NsZWFudXAgPSBmdW5jdGlvbihj
YWxsYmFjaykgeworICAgICAgICB0aGlzLmNsZWFudXBfY2FsbGJhY2tzLnB1c2goY2FsbGJhY2sp
OworICAgIH0KKworICAgIFRlc3QucHJvdG90eXBlLnNldF90aW1lb3V0ID0gZnVuY3Rpb24oKQor
ICAgIHsKKyAgICAgICAgaWYgKHRoaXMudGltZW91dF9sZW5ndGggIT09IG51bGwpIHsKKyAgICAg
ICAgICAgIHZhciB0aGlzX29iaiA9IHRoaXM7CisgICAgICAgICAgICB0aGlzLnRpbWVvdXRfaWQg
PSBzZXRUaW1lb3V0KGZ1bmN0aW9uKCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
dGhpc19vYmoudGltZW91dCgpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB9LCB0aGlzLnRpbWVvdXRfbGVuZ3RoKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIFRl
c3QucHJvdG90eXBlLnNldF9zdGF0dXMgPSBmdW5jdGlvbihzdGF0dXMsIG1lc3NhZ2UpCisgICAg
eworICAgICAgICB0aGlzLnN0YXR1cyA9IHN0YXR1czsKKyAgICAgICAgdGhpcy5tZXNzYWdlID0g
bWVzc2FnZTsKKyAgICB9CisKKyAgICBUZXN0LnByb3RvdHlwZS50aW1lb3V0ID0gZnVuY3Rpb24o
KQorICAgIHsKKyAgICAgICAgdGhpcy50aW1lb3V0X2lkID0gbnVsbDsKKyAgICAgICAgdGhpcy5z
ZXRfc3RhdHVzKHRoaXMuVElNRU9VVCwgIlRlc3QgdGltZWQgb3V0IikKKyAgICAgICAgdGhpcy5w
aGFzZSA9IHRoaXMucGhhc2VzLkhBU19SRVNVTFQ7CisgICAgICAgIHRoaXMuZG9uZSgpOworICAg
IH07CisKKyAgICBUZXN0LnByb3RvdHlwZS5kb25lID0gZnVuY3Rpb24oKQorICAgIHsKKyAgICAg
ICAgaWYgKHRoaXMucGhhc2UgPT0gdGhpcy5waGFzZXMuQ09NUExFVEUpIHsKKyAgICAgICAgICAg
IHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIGlmICh0aGlzLnBoYXNlIDw9IHRoaXMucGhh
c2VzLlNUQVJURUQpIHsKKyAgICAgICAgICAgIHRoaXMuc2V0X3N0YXR1cyh0aGlzLlBBU1MsIG51
bGwpOworICAgICAgICB9CisKKyAgICAgICAgaWYgKHRoaXMuc3RhdHVzID09IHRoaXMuTk9UUlVO
KSB7CisgICAgICAgICAgICBhbGVydCh0aGlzLnBoYXNlKTsKKyAgICAgICAgfQorCisgICAgICAg
IHRoaXMucGhhc2UgPSB0aGlzLnBoYXNlcy5DT01QTEVURTsKKworICAgICAgICBjbGVhclRpbWVv
dXQodGhpcy50aW1lb3V0X2lkKTsKKyAgICAgICAgdGVzdHMucmVzdWx0KHRoaXMpOworICAgICAg
ICB0aGlzLmNsZWFudXAoKTsKKyAgICB9OworCisgICAgVGVzdC5wcm90b3R5cGUuY2xlYW51cCA9
IGZ1bmN0aW9uKCkgeworICAgICAgICBmb3JFYWNoKHRoaXMuY2xlYW51cF9jYWxsYmFja3MsCisg
ICAgICAgICAgICAgICAgZnVuY3Rpb24oY2xlYW51cF9jYWxsYmFjaykgeworICAgICAgICAgICAg
ICAgICAgICBjbGVhbnVwX2NhbGxiYWNrKCkKKyAgICAgICAgICAgICAgICB9KTsKKyAgICB9CisK
KyAgICAvKgorICAgICAqIEhhcm5lc3MKKyAgICAgKi8KKworICAgIGZ1bmN0aW9uIFRlc3RzU3Rh
dHVzKCkKKyAgICB7CisgICAgICAgIHRoaXMuc3RhdHVzID0gbnVsbDsKKyAgICAgICAgdGhpcy5t
ZXNzYWdlID0gbnVsbDsKKyAgICB9CisKKyAgICBUZXN0c1N0YXR1cy5zdGF0dXNlcyA9IHsKKyAg
ICAgICAgT0s6MCwKKyAgICAgICAgRVJST1I6MSwKKyAgICAgICAgVElNRU9VVDoyCisgICAgfTsK
KworICAgIFRlc3RzU3RhdHVzLnByb3RvdHlwZSA9IG1lcmdlKHt9LCBUZXN0c1N0YXR1cy5zdGF0
dXNlcyk7CisKKyAgICBUZXN0c1N0YXR1cy5wcm90b3R5cGUuc3RydWN0dXJlZF9jbG9uZSA9IGZ1
bmN0aW9uKCkKKyAgICB7CisgICAgICAgIGlmICghdGhpcy5fc3RydWN0dXJlZF9jbG9uZSkgewor
ICAgICAgICAgICAgdmFyIG1zZyA9IHRoaXMubWVzc2FnZTsKKyAgICAgICAgICAgIG1zZyA9IG1z
ZyA/IFN0cmluZyhtc2cpIDogbXNnOworICAgICAgICAgICAgdGhpcy5fc3RydWN0dXJlZF9jbG9u
ZSA9IG1lcmdlKHsKKyAgICAgICAgICAgICAgICBzdGF0dXM6dGhpcy5zdGF0dXMsCisgICAgICAg
ICAgICAgICAgbWVzc2FnZTptc2cKKyAgICAgICAgICAgIH0sIFRlc3RzU3RhdHVzLnN0YXR1c2Vz
KTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gdGhpcy5fc3RydWN0dXJlZF9jbG9uZTsKKyAg
ICB9OworCisgICAgZnVuY3Rpb24gVGVzdHMoKQorICAgIHsKKyAgICAgICAgdGhpcy50ZXN0cyA9
IFtdOworICAgICAgICB0aGlzLm51bV9wZW5kaW5nID0gMDsKKworICAgICAgICB0aGlzLnBoYXNl
cyA9IHsKKyAgICAgICAgICAgIElOSVRJQUw6MCwKKyAgICAgICAgICAgIFNFVFVQOjEsCisgICAg
ICAgICAgICBIQVZFX1RFU1RTOjIsCisgICAgICAgICAgICBIQVZFX1JFU1VMVFM6MywKKyAgICAg
ICAgICAgIENPTVBMRVRFOjQKKyAgICAgICAgfTsKKyAgICAgICAgdGhpcy5waGFzZSA9IHRoaXMu
cGhhc2VzLklOSVRJQUw7CisKKyAgICAgICAgdGhpcy5wcm9wZXJ0aWVzID0ge307CisKKyAgICAg
ICAgLy9BbGwgdGVzdHMgY2FuJ3QgYmUgZG9uZSB1bnRpbCB0aGUgbG9hZCBldmVudCBmaXJlcwor
ICAgICAgICB0aGlzLmFsbF9sb2FkZWQgPSBmYWxzZTsKKyAgICAgICAgdGhpcy53YWl0X2Zvcl9m
aW5pc2ggPSBmYWxzZTsKKyAgICAgICAgdGhpcy5wcm9jZXNzaW5nX2NhbGxiYWNrcyA9IGZhbHNl
OworCisgICAgICAgIHRoaXMuYWxsb3dfdW5jYXVnaHRfZXhjZXB0aW9uID0gZmFsc2U7CisKKyAg
ICAgICAgdGhpcy50aW1lb3V0X211bHRpcGxpZXIgPSAxOworICAgICAgICB0aGlzLnRpbWVvdXRf
bGVuZ3RoID0gdGhpcy5nZXRfdGltZW91dCgpOworICAgICAgICB0aGlzLnRpbWVvdXRfaWQgPSBu
dWxsOworCisgICAgICAgIHRoaXMuc3RhcnRfY2FsbGJhY2tzID0gW107CisgICAgICAgIHRoaXMu
dGVzdF9kb25lX2NhbGxiYWNrcyA9IFtdOworICAgICAgICB0aGlzLmFsbF9kb25lX2NhbGxiYWNr
cyA9IFtdOworCisgICAgICAgIHRoaXMuc3RhdHVzID0gbmV3IFRlc3RzU3RhdHVzKCk7CisKKyAg
ICAgICAgdmFyIHRoaXNfb2JqID0gdGhpczsKKworICAgICAgICBvbl9ldmVudCh3aW5kb3csICJs
b2FkIiwKKyAgICAgICAgICAgICAgICAgZnVuY3Rpb24oKQorICAgICAgICAgICAgICAgICB7Cisg
ICAgICAgICAgICAgICAgICAgICB0aGlzX29iai5hbGxfbG9hZGVkID0gdHJ1ZTsKKyAgICAgICAg
ICAgICAgICAgICAgIGlmICh0aGlzX29iai5hbGxfZG9uZSgpKQorICAgICAgICAgICAgICAgICAg
ICAgeworICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXNfb2JqLmNvbXBsZXRlKCk7CisgICAg
ICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgIH0pOworCisgICAgICAgIHRoaXMu
c2V0X3RpbWVvdXQoKTsKKyAgICB9CisKKyAgICBUZXN0cy5wcm90b3R5cGUuc2V0dXAgPSBmdW5j
dGlvbihmdW5jLCBwcm9wZXJ0aWVzKQorICAgIHsKKyAgICAgICAgaWYgKHRoaXMucGhhc2UgPj0g
dGhpcy5waGFzZXMuSEFWRV9SRVNVTFRTKSB7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAg
IH0KKworICAgICAgICBpZiAodGhpcy5waGFzZSA8IHRoaXMucGhhc2VzLlNFVFVQKSB7CisgICAg
ICAgICAgICB0aGlzLnBoYXNlID0gdGhpcy5waGFzZXMuU0VUVVA7CisgICAgICAgIH0KKworICAg
ICAgICB0aGlzLnByb3BlcnRpZXMgPSBwcm9wZXJ0aWVzOworCisgICAgICAgIGZvciAodmFyIHAg
aW4gcHJvcGVydGllcykgeworICAgICAgICAgICAgaWYgKHByb3BlcnRpZXMuaGFzT3duUHJvcGVy
dHkocCkpIHsKKyAgICAgICAgICAgICAgICB2YXIgdmFsdWUgPSBwcm9wZXJ0aWVzW3BdCisgICAg
ICAgICAgICAgICAgaWYgKHAgPT0gImFsbG93X3VuY2F1Z2h0X2V4Y2VwdGlvbiIpIHsKKyAgICAg
ICAgICAgICAgICAgICAgdGhpcy5hbGxvd191bmNhdWdodF9leGNlcHRpb24gPSB2YWx1ZTsKKyAg
ICAgICAgICAgICAgICB9IGVsc2UgaWYgKHAgPT0gImV4cGxpY2l0X2RvbmUiICYmIHZhbHVlKSB7
CisgICAgICAgICAgICAgICAgICAgIHRoaXMud2FpdF9mb3JfZmluaXNoID0gdHJ1ZTsKKyAgICAg
ICAgICAgICAgICB9IGVsc2UgaWYgKHAgPT0gImV4cGxpY2l0X3RpbWVvdXQiICYmIHZhbHVlKSB7
CisgICAgICAgICAgICAgICAgICAgIHRoaXMudGltZW91dF9sZW5ndGggPSBudWxsOworICAgICAg
ICAgICAgICAgICAgICBpZiAodGhpcy50aW1lb3V0X2lkKQorICAgICAgICAgICAgICAgICAgICB7
CisgICAgICAgICAgICAgICAgICAgICAgICBjbGVhclRpbWVvdXQodGhpcy50aW1lb3V0X2lkKTsK
KyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAocCA9PSAi
dGltZW91dF9tdWx0aXBsaWVyIikgeworICAgICAgICAgICAgICAgICAgICB0aGlzLnRpbWVvdXRf
bXVsdGlwbGllciA9IHZhbHVlOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAg
ICAgICAgfQorCisgICAgICAgIGlmIChmdW5jKSB7CisgICAgICAgICAgICB0cnkgeworICAgICAg
ICAgICAgICAgIGZ1bmMoKTsKKyAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHsKKyAgICAgICAgICAg
ICAgICB0aGlzLnN0YXR1cy5zdGF0dXMgPSB0aGlzLnN0YXR1cy5FUlJPUjsKKyAgICAgICAgICAg
ICAgICB0aGlzLnN0YXR1cy5tZXNzYWdlID0gU3RyaW5nKGUpOworICAgICAgICAgICAgfTsKKyAg
ICAgICAgfQorICAgICAgICB0aGlzLnNldF90aW1lb3V0KCk7CisgICAgfTsKKworICAgIFRlc3Rz
LnByb3RvdHlwZS5nZXRfdGltZW91dCA9IGZ1bmN0aW9uKCkKKyAgICB7CisgICAgICAgIHZhciBt
ZXRhcyA9IGRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCJtZXRhIik7CisgICAgICAgIGZv
ciAodmFyIGkgPSAwOyBpIDwgbWV0YXMubGVuZ3RoOyBpKyspIHsKKyAgICAgICAgICAgIGlmICht
ZXRhc1tpXS5uYW1lID09ICJ0aW1lb3V0IikgeworICAgICAgICAgICAgICAgIGlmIChtZXRhc1tp
XS5jb250ZW50ID09ICJsb25nIikgeworICAgICAgICAgICAgICAgICAgICByZXR1cm4gc2V0dGlu
Z3MuaGFybmVzc190aW1lb3V0Lmxvbmc7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIHJldHVybiBzZXR0
aW5ncy5oYXJuZXNzX3RpbWVvdXQubm9ybWFsOworICAgIH0KKworICAgIFRlc3RzLnByb3RvdHlw
ZS5zZXRfdGltZW91dCA9IGZ1bmN0aW9uKCkKKyAgICB7CisgICAgICAgIHZhciB0aGlzX29iaiA9
IHRoaXM7CisgICAgICAgIGNsZWFyVGltZW91dCh0aGlzLnRpbWVvdXRfaWQpOworICAgICAgICBp
ZiAodGhpcy50aW1lb3V0X2xlbmd0aCAhPT0gbnVsbCkgeworICAgICAgICAgICAgdGhpcy50aW1l
b3V0X2lkID0gc2V0VGltZW91dChmdW5jdGlvbigpIHsKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHRoaXNfb2JqLnRpbWVvdXQoKTsKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwgdGhpcy50aW1lb3V0X2xlbmd0aCk7CisgICAg
ICAgIH0KKyAgICB9OworCisgICAgVGVzdHMucHJvdG90eXBlLnRpbWVvdXQgPSBmdW5jdGlvbigp
IHsKKyAgICAgICAgdGhpcy5zdGF0dXMuc3RhdHVzID0gdGhpcy5zdGF0dXMuVElNRU9VVDsKKyAg
ICAgICAgdGhpcy5jb21wbGV0ZSgpOworICAgIH07CisKKyAgICBUZXN0cy5wcm90b3R5cGUuZW5k
X3dhaXQgPSBmdW5jdGlvbigpCisgICAgeworICAgICAgICB0aGlzLndhaXRfZm9yX2ZpbmlzaCA9
IGZhbHNlOworICAgICAgICBpZiAodGhpcy5hbGxfZG9uZSgpKSB7CisgICAgICAgICAgICB0aGlz
LmNvbXBsZXRlKCk7CisgICAgICAgIH0KKyAgICB9OworCisgICAgVGVzdHMucHJvdG90eXBlLnB1
c2ggPSBmdW5jdGlvbih0ZXN0KQorICAgIHsKKyAgICAgICAgaWYgKHRoaXMucGhhc2UgPCB0aGlz
LnBoYXNlcy5IQVZFX1RFU1RTKSB7CisgICAgICAgICAgICB0aGlzLnN0YXJ0KCk7CisgICAgICAg
IH0KKyAgICAgICAgdGhpcy5udW1fcGVuZGluZysrOworICAgICAgICB0aGlzLnRlc3RzLnB1c2go
dGVzdCk7CisgICAgfTsKKworICAgIFRlc3RzLnByb3RvdHlwZS5hbGxfZG9uZSA9IGZ1bmN0aW9u
KCkgeworICAgICAgICByZXR1cm4gKHRoaXMuYWxsX2xvYWRlZCAmJiB0aGlzLm51bV9wZW5kaW5n
ID09PSAwICYmCisgICAgICAgICAgICAgICAgIXRoaXMud2FpdF9mb3JfZmluaXNoICYmICF0aGlz
LnByb2Nlc3NpbmdfY2FsbGJhY2tzKTsKKyAgICB9OworCisgICAgVGVzdHMucHJvdG90eXBlLnN0
YXJ0ID0gZnVuY3Rpb24oKSB7CisgICAgICAgIHRoaXMucGhhc2UgPSB0aGlzLnBoYXNlcy5IQVZF
X1RFU1RTOworICAgICAgICB0aGlzLm5vdGlmeV9zdGFydCgpOworICAgIH07CisKKyAgICBUZXN0
cy5wcm90b3R5cGUubm90aWZ5X3N0YXJ0ID0gZnVuY3Rpb24oKSB7CisgICAgICAgIHZhciB0aGlz
X29iaiA9IHRoaXM7CisgICAgICAgIGZvckVhY2ggKHRoaXMuc3RhcnRfY2FsbGJhY2tzLAorICAg
ICAgICAgICAgICAgICBmdW5jdGlvbihjYWxsYmFjaykKKyAgICAgICAgICAgICAgICAgeworICAg
ICAgICAgICAgICAgICAgICAgY2FsbGJhY2sodGhpc19vYmoucHJvcGVydGllcyk7CisgICAgICAg
ICAgICAgICAgIH0pOworICAgICAgICBmb3JFYWNoX3dpbmRvd3MoCisgICAgICAgICAgICAgICAg
ZnVuY3Rpb24odywgaXNfc2FtZV9vcmlnaW4pCisgICAgICAgICAgICAgICAgeworICAgICAgICAg
ICAgICAgICAgICBpZiAoaXNfc2FtZV9vcmlnaW4gJiYgdy5zdGFydF9jYWxsYmFjaykgeworICAg
ICAgICAgICAgICAgICAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB3
LnN0YXJ0X2NhbGxiYWNrKHRoaXNfb2JqLnByb3BlcnRpZXMpOworICAgICAgICAgICAgICAgICAg
ICAgICAgfSBjYXRjaCAoZSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChkZWJ1
ZykgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBlOworICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBpZiAoc3VwcG9ydHNfcG9zdF9tZXNz
YWdlKHcpICYmIHcgIT09IHNlbGYpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHcucG9zdE1l
c3NhZ2UoeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6ICJzdGFydCIsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgcHJvcGVydGllczogdGhpc19vYmoucHJvcGVydGllcwor
ICAgICAgICAgICAgICAgICAgICAgICAgfSwgIioiKTsKKyAgICAgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgICAgIH0pOworICAgIH07CisKKyAgICBUZXN0cy5wcm90b3R5cGUucmVzdWx0
ID0gZnVuY3Rpb24odGVzdCkKKyAgICB7CisgICAgICAgIGlmICh0aGlzLnBoYXNlID4gdGhpcy5w
aGFzZXMuSEFWRV9SRVNVTFRTKSB7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAg
ICAgICAgdGhpcy5waGFzZSA9IHRoaXMucGhhc2VzLkhBVkVfUkVTVUxUUzsKKyAgICAgICAgdGhp
cy5udW1fcGVuZGluZy0tOworICAgICAgICB0aGlzLm5vdGlmeV9yZXN1bHQodGVzdCk7CisgICAg
fTsKKworICAgIFRlc3RzLnByb3RvdHlwZS5ub3RpZnlfcmVzdWx0ID0gZnVuY3Rpb24odGVzdCkg
eworICAgICAgICB2YXIgdGhpc19vYmogPSB0aGlzOworICAgICAgICB0aGlzLnByb2Nlc3Npbmdf
Y2FsbGJhY2tzID0gdHJ1ZTsKKyAgICAgICAgZm9yRWFjaCh0aGlzLnRlc3RfZG9uZV9jYWxsYmFj
a3MsCisgICAgICAgICAgICAgICAgZnVuY3Rpb24oY2FsbGJhY2spCisgICAgICAgICAgICAgICAg
eworICAgICAgICAgICAgICAgICAgICBjYWxsYmFjayh0ZXN0LCB0aGlzX29iaik7CisgICAgICAg
ICAgICAgICAgfSk7CisKKyAgICAgICAgZm9yRWFjaF93aW5kb3dzKAorICAgICAgICAgICAgICAg
IGZ1bmN0aW9uKHcsIGlzX3NhbWVfb3JpZ2luKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAg
ICAgICAgICAgICAgaWYgKGlzX3NhbWVfb3JpZ2luICYmIHcucmVzdWx0X2NhbGxiYWNrKSB7Cisg
ICAgICAgICAgICAgICAgICAgICAgICB0cnkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHcucmVzdWx0X2NhbGxiYWNrKHRlc3QpOworICAgICAgICAgICAgICAgICAgICAgICAgfSBjYXRj
aCAoZSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChkZWJ1ZykgeworICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBlOworICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgICAgICAgICBpZiAoc3VwcG9ydHNfcG9zdF9tZXNzYWdlKHcpICYmIHcg
IT09IHNlbGYpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHcucG9zdE1lc3NhZ2UoeworICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6ICJyZXN1bHQiLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHRlc3Q6IHRlc3Quc3RydWN0dXJlZF9jbG9uZSgpCisgICAgICAgICAgICAg
ICAgICAgICAgICB9LCAiKiIpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAg
ICAgfSk7CisgICAgICAgIHRoaXMucHJvY2Vzc2luZ19jYWxsYmFja3MgPSBmYWxzZTsKKyAgICAg
ICAgaWYgKHRoaXNfb2JqLmFsbF9kb25lKCkpIHsKKyAgICAgICAgICAgIHRoaXNfb2JqLmNvbXBs
ZXRlKCk7CisgICAgICAgIH0KKyAgICB9OworCisgICAgVGVzdHMucHJvdG90eXBlLmNvbXBsZXRl
ID0gZnVuY3Rpb24oKSB7CisgICAgICAgIGlmICh0aGlzLnBoYXNlID09PSB0aGlzLnBoYXNlcy5D
T01QTEVURSkgeworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIHRoaXMu
cGhhc2UgPSB0aGlzLnBoYXNlcy5DT01QTEVURTsKKyAgICAgICAgdmFyIHRoaXNfb2JqID0gdGhp
czsKKyAgICAgICAgdGhpcy50ZXN0cy5mb3JFYWNoKAorICAgICAgICAgICAgZnVuY3Rpb24oeCkK
KyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBpZiAoeC5zdGF0dXMgPT09IHguTk9UUlVO
KSB7CisgICAgICAgICAgICAgICAgICAgIHRoaXNfb2JqLm5vdGlmeV9yZXN1bHQoeCk7CisgICAg
ICAgICAgICAgICAgICAgIHguY2xlYW51cCgpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIH0KKyAgICAgICAgKTsKKyAgICAgICAgdGhpcy5ub3RpZnlfY29tcGxldGUoKTsKKyAgICB9
OworCisgICAgVGVzdHMucHJvdG90eXBlLm5vdGlmeV9jb21wbGV0ZSA9IGZ1bmN0aW9uKCkKKyAg
ICB7CisgICAgICAgIGNsZWFyVGltZW91dCh0aGlzLnRpbWVvdXRfaWQpOworICAgICAgICB2YXIg
dGhpc19vYmogPSB0aGlzOworICAgICAgICB2YXIgdGVzdHMgPSBtYXAodGhpc19vYmoudGVzdHMs
CisgICAgICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbih0ZXN0KQorICAgICAgICAgICAgICAg
ICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0ZXN0LnN0cnVj
dHVyZWRfY2xvbmUoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0pOworICAgICAgICBpZiAo
dGhpcy5zdGF0dXMuc3RhdHVzID09PSBudWxsKSB7CisgICAgICAgICAgICB0aGlzLnN0YXR1cy5z
dGF0dXMgPSB0aGlzLnN0YXR1cy5PSzsKKyAgICAgICAgfQorCisgICAgICAgIGZvckVhY2ggKHRo
aXMuYWxsX2RvbmVfY2FsbGJhY2tzLAorICAgICAgICAgICAgICAgICBmdW5jdGlvbihjYWxsYmFj
aykKKyAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2sodGhp
c19vYmoudGVzdHMsIHRoaXNfb2JqLnN0YXR1cyk7CisgICAgICAgICAgICAgICAgIH0pOworCisg
ICAgICAgIGZvckVhY2hfd2luZG93cygKKyAgICAgICAgICAgICAgICBmdW5jdGlvbih3LCBpc19z
YW1lX29yaWdpbikKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGlmIChp
c19zYW1lX29yaWdpbiAmJiB3LmNvbXBsZXRpb25fY2FsbGJhY2spIHsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIHRyeSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdy5jb21wbGV0aW9u
X2NhbGxiYWNrKHRoaXNfb2JqLnRlc3RzLCB0aGlzX29iai5zdGF0dXMpOworICAgICAgICAgICAg
ICAgICAgICAgICAgfSBjYXRjaCAoZSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlm
IChkZWJ1ZykgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBlOworICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBpZiAoc3VwcG9ydHNfcG9z
dF9tZXNzYWdlKHcpICYmIHcgIT09IHNlbGYpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHcu
cG9zdE1lc3NhZ2UoeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6ICJjb21wbGV0
ZSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGVzdHM6IHRlc3RzLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHN0YXR1czogdGhpc19vYmouc3RhdHVzLnN0cnVjdHVyZWRfY2xv
bmUoKQorICAgICAgICAgICAgICAgICAgICAgICAgfSwgIioiKTsKKyAgICAgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgICAgIH0pOworICAgIH07CisKKyAgICB2YXIgdGVzdHMgPSBuZXcg
VGVzdHMoKTsKKworICAgIHdpbmRvdy5vbmVycm9yID0gZnVuY3Rpb24obXNnKSB7CisgICAgICAg
IGlmICghdGVzdHMuYWxsb3dfdW5jYXVnaHRfZXhjZXB0aW9uKSB7CisgICAgICAgICAgICB0ZXN0
cy5zdGF0dXMuc3RhdHVzID0gdGVzdHMuc3RhdHVzLkVSUk9SOworICAgICAgICAgICAgdGVzdHMu
c3RhdHVzLm1lc3NhZ2UgPSBtc2c7CisgICAgICAgICAgICB0ZXN0cy5jb21wbGV0ZSgpOworICAg
ICAgICB9CisgICAgfQorCisgICAgZnVuY3Rpb24gdGltZW91dCgpIHsKKyAgICAgICAgaWYgKHRl
c3RzLnRpbWVvdXRfbGVuZ3RoID09PSBudWxsKSB7CisgICAgICAgICAgICB0ZXN0cy50aW1lb3V0
KCk7CisgICAgICAgIH0KKyAgICB9CisgICAgZXhwb3NlKHRpbWVvdXQsICd0aW1lb3V0Jyk7CisK
KyAgICBmdW5jdGlvbiBhZGRfc3RhcnRfY2FsbGJhY2soY2FsbGJhY2spIHsKKyAgICAgICAgdGVz
dHMuc3RhcnRfY2FsbGJhY2tzLnB1c2goY2FsbGJhY2spOworICAgIH0KKworICAgIGZ1bmN0aW9u
IGFkZF9yZXN1bHRfY2FsbGJhY2soY2FsbGJhY2spCisgICAgeworICAgICAgICB0ZXN0cy50ZXN0
X2RvbmVfY2FsbGJhY2tzLnB1c2goY2FsbGJhY2spOworICAgIH0KKworICAgIGZ1bmN0aW9uIGFk
ZF9jb21wbGV0aW9uX2NhbGxiYWNrKGNhbGxiYWNrKQorICAgIHsKKyAgICAgICB0ZXN0cy5hbGxf
ZG9uZV9jYWxsYmFja3MucHVzaChjYWxsYmFjayk7CisgICAgfQorCisgICAgZXhwb3NlKGFkZF9z
dGFydF9jYWxsYmFjaywgJ2FkZF9zdGFydF9jYWxsYmFjaycpOworICAgIGV4cG9zZShhZGRfcmVz
dWx0X2NhbGxiYWNrLCAnYWRkX3Jlc3VsdF9jYWxsYmFjaycpOworICAgIGV4cG9zZShhZGRfY29t
cGxldGlvbl9jYWxsYmFjaywgJ2FkZF9jb21wbGV0aW9uX2NhbGxiYWNrJyk7CisKKyAgICAvKgor
ICAgICAqIE91dHB1dCBsaXN0ZW5lcgorICAgICovCisKKyAgICBmdW5jdGlvbiBPdXRwdXQoKSB7
CisgICAgICAgIHRoaXMub3V0cHV0X2RvY3VtZW50ID0gZG9jdW1lbnQ7CisgICAgICAgIHRoaXMu
b3V0cHV0X25vZGUgPSBudWxsOworICAgICAgICB0aGlzLmRvbmVfY291bnQgPSAwOworICAgICAg
ICB0aGlzLmVuYWJsZWQgPSBzZXR0aW5ncy5vdXRwdXQ7CisgICAgICAgIHRoaXMucGhhc2UgPSB0
aGlzLklOSVRJQUw7CisgICAgfQorCisgICAgT3V0cHV0LnByb3RvdHlwZS5JTklUSUFMID0gMDsK
KyAgICBPdXRwdXQucHJvdG90eXBlLlNUQVJURUQgPSAxOworICAgIE91dHB1dC5wcm90b3R5cGUu
SEFWRV9SRVNVTFRTID0gMjsKKyAgICBPdXRwdXQucHJvdG90eXBlLkNPTVBMRVRFID0gMzsKKwor
ICAgIE91dHB1dC5wcm90b3R5cGUuc2V0dXAgPSBmdW5jdGlvbihwcm9wZXJ0aWVzKSB7CisgICAg
ICAgIGlmICh0aGlzLnBoYXNlID4gdGhpcy5JTklUSUFMKSB7CisgICAgICAgICAgICByZXR1cm47
CisgICAgICAgIH0KKworICAgICAgICAvL0lmIG91dHB1dCBpcyBkaXNhYmxlZCBpbiB0ZXN0aGFy
bmVzc3JlcG9ydC5qcyB0aGUgdGVzdCBzaG91bGRuJ3QgYmUKKyAgICAgICAgLy9hYmxlIHRvIG92
ZXJyaWRlIHRoYXQKKyAgICAgICAgdGhpcy5lbmFibGVkID0gdGhpcy5lbmFibGVkICYmIChwcm9w
ZXJ0aWVzLmhhc093blByb3BlcnR5KCJvdXRwdXQiKSA/CisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgcHJvcGVydGllcy5vdXRwdXQgOiBzZXR0aW5ncy5vdXRwdXQpOwor
ICAgIH07CisKKyAgICBPdXRwdXQucHJvdG90eXBlLmluaXQgPSBmdW5jdGlvbihwcm9wZXJ0aWVz
KQorICAgIHsKKyAgICAgICAgaWYgKHRoaXMucGhhc2UgPj0gdGhpcy5TVEFSVEVEKSB7CisgICAg
ICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgaWYgKHByb3BlcnRpZXMub3V0cHV0
X2RvY3VtZW50KSB7CisgICAgICAgICAgICB0aGlzLm91dHB1dF9kb2N1bWVudCA9IHByb3BlcnRp
ZXMub3V0cHV0X2RvY3VtZW50OworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgdGhpcy5v
dXRwdXRfZG9jdW1lbnQgPSBkb2N1bWVudDsKKyAgICAgICAgfQorICAgICAgICB0aGlzLnBoYXNl
ID0gdGhpcy5TVEFSVEVEOworICAgIH07CisKKyAgICBPdXRwdXQucHJvdG90eXBlLnJlc29sdmVf
bG9nID0gZnVuY3Rpb24oKQorICAgIHsKKyAgICAgICAgdmFyIG91dHB1dF9kb2N1bWVudDsKKyAg
ICAgICAgaWYgKHR5cGVvZiB0aGlzLm91dHB1dF9kb2N1bWVudCA9PT0gImZ1bmN0aW9uIikgewor
ICAgICAgICAgICAgb3V0cHV0X2RvY3VtZW50ID0gdGhpcy5vdXRwdXRfZG9jdW1lbnQuYXBwbHko
dW5kZWZpbmVkKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIG91dHB1dF9kb2N1bWVu
dCA9IHRoaXMub3V0cHV0X2RvY3VtZW50OworICAgICAgICB9CisgICAgICAgIGlmICghb3V0cHV0
X2RvY3VtZW50KSB7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgdmFy
IG5vZGUgPSBvdXRwdXRfZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImxvZyIpOworICAgICAgICBp
ZiAobm9kZSkgeworICAgICAgICAgICAgdGhpcy5vdXRwdXRfZG9jdW1lbnQgPSBvdXRwdXRfZG9j
dW1lbnQ7CisgICAgICAgICAgICB0aGlzLm91dHB1dF9ub2RlID0gbm9kZTsKKyAgICAgICAgfQor
ICAgIH07CisKKyAgICBPdXRwdXQucHJvdG90eXBlLnNob3dfc3RhdHVzID0gZnVuY3Rpb24odGVz
dCkKKyAgICB7CisgICAgICAgIGlmICh0aGlzLnBoYXNlIDwgdGhpcy5TVEFSVEVEKSB7CisgICAg
ICAgICAgICB0aGlzLmluaXQoKTsKKyAgICAgICAgfQorICAgICAgICBpZiAoIXRoaXMuZW5hYmxl
ZCkgeworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIGlmICh0aGlzLnBo
YXNlIDwgdGhpcy5IQVZFX1JFU1VMVFMpIHsKKyAgICAgICAgICAgIHRoaXMucmVzb2x2ZV9sb2co
KTsKKyAgICAgICAgICAgIHRoaXMucGhhc2UgPSB0aGlzLkhBVkVfUkVTVUxUUzsKKyAgICAgICAg
fQorICAgICAgICB0aGlzLmRvbmVfY291bnQrKzsKKyAgICAgICAgaWYgKHRoaXMub3V0cHV0X25v
ZGUpIHsKKyAgICAgICAgICAgIGlmICh0aGlzLmRvbmVfY291bnQgPCAxMDAKKyAgICAgICAgICAg
IHx8ICh0aGlzLmRvbmVfY291bnQgPCAxMDAwICYmIHRoaXMuZG9uZV9jb3VudCAlIDEwMCA9PSAw
KQorICAgICAgICAgICAgfHwgdGhpcy5kb25lX2NvdW50ICUgMTAwMCA9PSAwKSB7CisgICAgICAg
ICAgICAgICAgdGhpcy5vdXRwdXRfbm9kZS50ZXh0Q29udGVudCA9ICJSdW5uaW5nLCAiCisgICAg
ICAgICAgICAgICAgICAgICsgdGhpcy5kb25lX2NvdW50ICsgIiBjb21wbGV0ZSwgIgorICAgICAg
ICAgICAgICAgICAgICArIHRlc3RzLm51bV9wZW5kaW5nICsgIiByZW1haW4iOworICAgICAgICAg
ICAgfQorICAgICAgICB9CisgICAgfTsKKworICAgIE91dHB1dC5wcm90b3R5cGUuc2hvd19yZXN1
bHRzID0gZnVuY3Rpb24gKHRlc3RzLCBoYXJuZXNzX3N0YXR1cykKKyAgICB7CisgICAgICAgIGlm
ICh0aGlzLnBoYXNlID49IHRoaXMuQ09NUExFVEUpIHsKKyAgICAgICAgICAgIHJldHVybjsKKyAg
ICAgICAgfQorICAgICAgICBpZiAoIXRoaXMuZW5hYmxlZCkgeworICAgICAgICAgICAgcmV0dXJu
OworICAgICAgICB9CisgICAgICAgIGlmICghdGhpcy5vdXRwdXRfbm9kZSkgeworICAgICAgICAg
ICAgdGhpcy5yZXNvbHZlX2xvZygpOworICAgICAgICB9CisgICAgICAgIHRoaXMucGhhc2UgPSB0
aGlzLkNPTVBMRVRFOworCisgICAgICAgIHZhciBsb2cgPSB0aGlzLm91dHB1dF9ub2RlOworICAg
ICAgICBpZiAoIWxvZykgeworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAg
IHZhciBvdXRwdXRfZG9jdW1lbnQgPSB0aGlzLm91dHB1dF9kb2N1bWVudDsKKworICAgICAgICB3
aGlsZSAobG9nLmxhc3RDaGlsZCkgeworICAgICAgICAgICAgbG9nLnJlbW92ZUNoaWxkKGxvZy5s
YXN0Q2hpbGQpOworICAgICAgICB9CisKKyAgICAgICAgaWYgKHNjcmlwdF9wcmVmaXggIT0gbnVs
bCkgeworICAgICAgICAgICAgdmFyIHN0eWxlc2hlZXQgPSBvdXRwdXRfZG9jdW1lbnQuY3JlYXRl
RWxlbWVudE5TKHhodG1sX25zLCAibGluayIpOworICAgICAgICAgICAgc3R5bGVzaGVldC5zZXRB
dHRyaWJ1dGUoInJlbCIsICJzdHlsZXNoZWV0Iik7CisgICAgICAgICAgICBzdHlsZXNoZWV0LnNl
dEF0dHJpYnV0ZSgiaHJlZiIsIHNjcmlwdF9wcmVmaXggKyAidGVzdGhhcm5lc3MuY3NzIik7Cisg
ICAgICAgICAgICB2YXIgaGVhZHMgPSBvdXRwdXRfZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05h
bWUoImhlYWQiKTsKKyAgICAgICAgICAgIGlmIChoZWFkcy5sZW5ndGgpIHsKKyAgICAgICAgICAg
ICAgICBoZWFkc1swXS5hcHBlbmRDaGlsZChzdHlsZXNoZWV0KTsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgfQorCisgICAgICAgIHZhciBzdGF0dXNfdGV4dF9oYXJuZXNzID0ge307CisgICAgICAg
IHN0YXR1c190ZXh0X2hhcm5lc3NbaGFybmVzc19zdGF0dXMuT0tdID0gIk9LIjsKKyAgICAgICAg
c3RhdHVzX3RleHRfaGFybmVzc1toYXJuZXNzX3N0YXR1cy5FUlJPUl0gPSAiRXJyb3IiOworICAg
ICAgICBzdGF0dXNfdGV4dF9oYXJuZXNzW2hhcm5lc3Nfc3RhdHVzLlRJTUVPVVRdID0gIlRpbWVv
dXQiOworCisgICAgICAgIHZhciBzdGF0dXNfdGV4dCA9IHt9OworICAgICAgICBzdGF0dXNfdGV4
dFtUZXN0LnByb3RvdHlwZS5QQVNTXSA9ICJQYXNzIjsKKyAgICAgICAgc3RhdHVzX3RleHRbVGVz
dC5wcm90b3R5cGUuRkFJTF0gPSAiRmFpbCI7CisgICAgICAgIHN0YXR1c190ZXh0W1Rlc3QucHJv
dG90eXBlLlRJTUVPVVRdID0gIlRpbWVvdXQiOworICAgICAgICBzdGF0dXNfdGV4dFtUZXN0LnBy
b3RvdHlwZS5OT1RSVU5dID0gIk5vdCBSdW4iOworCisgICAgICAgIHZhciBzdGF0dXNfbnVtYmVy
ID0ge307CisgICAgICAgIGZvckVhY2godGVzdHMsCisgICAgICAgICAgICAgICAgZnVuY3Rpb24o
dGVzdCkgeworICAgICAgICAgICAgICAgICAgICB2YXIgc3RhdHVzID0gc3RhdHVzX3RleHRbdGVz
dC5zdGF0dXNdOworICAgICAgICAgICAgICAgICAgICBpZiAoc3RhdHVzX251bWJlci5oYXNPd25Q
cm9wZXJ0eShzdGF0dXMpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBzdGF0dXNfbnVtYmVy
W3N0YXR1c10gKz0gMTsKKyAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIHN0YXR1c19udW1iZXJbc3RhdHVzXSA9IDE7CisgICAgICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgICAgICB9KTsKKworICAgICAgICBmdW5jdGlvbiBzdGF0dXNfY2xh
c3Moc3RhdHVzKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gc3RhdHVzLnJlcGxhY2Uo
L1xzL2csICcnKS50b0xvd2VyQ2FzZSgpOworICAgICAgICB9CisKKyAgICAgICAgdmFyIHN1bW1h
cnlfdGVtcGxhdGUgPSBbInNlY3Rpb24iLCB7ImlkIjoic3VtbWFyeSJ9LAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBbImgyIiwge30sICJTdW1tYXJ5Il0sCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uKHZhcnMpCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChoYXJu
ZXNzX3N0YXR1cy5zdGF0dXMgPT09IGhhcm5lc3Nfc3RhdHVzLk9LKSB7CisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7CisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHZhciBzdGF0dXMgPSBzdGF0dXNfdGV4dF9oYXJuZXNzW2hhcm5lc3Nfc3RhdHVzLnN0YXR1
c107CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgcnYgPSBbWyJwIiwg
eyJjbGFzcyI6c3RhdHVzX2NsYXNzKHN0YXR1cyl9XV07CisKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGlmIChoYXJuZXNzX3N0YXR1cy5zdGF0dXMgPT09IGhhcm5lc3Nfc3Rh
dHVzLkVSUk9SKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcnZb
MF0ucHVzaCgiSGFybmVzcyBlbmNvdW50ZXJlZCBhbiBlcnJvcjoiKTsKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBydi5wdXNoKFsicHJlIiwge30sIGhhcm5lc3Nfc3Rh
dHVzLm1lc3NhZ2VdKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxz
ZSBpZiAoaGFybmVzc19zdGF0dXMuc3RhdHVzID09PSBoYXJuZXNzX3N0YXR1cy5USU1FT1VUKSB7
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcnZbMF0ucHVzaCgiSGFy
bmVzcyB0aW1lZCBvdXQuIik7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9
IGVsc2UgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJ2WzBdLnB1
c2goIkhhcm5lc3MgZ290IGFuIHVuZXhwZWN0ZWQgc3RhdHVzLiIpOworICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICByZXR1cm4gcnY7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFsicCIsIHt9LCAiRm91bmQgJHtudW1fdGVzdHN9
IHRlc3RzIl0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uKHZhcnMp
IHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBydiA9IFtbImRpdiIs
IHt9XV07CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgaSA9IDA7Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aGlsZSAoc3RhdHVzX3RleHQuaGFz
T3duUHJvcGVydHkoaSkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBpZiAoc3RhdHVzX251bWJlci5oYXNPd25Qcm9wZXJ0eShzdGF0dXNfdGV4dFtpXSkpIHsKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHN0YXR1cyA9IHN0
YXR1c190ZXh0W2ldOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBydlswXS5wdXNoKFsiZGl2IiwgeyJjbGFzcyI6c3RhdHVzX2NsYXNzKHN0YXR1cyl9LAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbImxh
YmVsIiwge30sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBbImlucHV0Iiwge3R5cGU6ImNoZWNrYm94IiwgY2hlY2tlZDoiY2hlY2tlZCJ9
XSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHN0YXR1c19udW1iZXJbc3RhdHVzXSArICIgIiArIHN0YXR1c11dKTsKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgaSsrOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJ2OworICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB9XTsKKworICAgICAgICBsb2cuYXBwZW5kQ2hpbGQo
cmVuZGVyKHN1bW1hcnlfdGVtcGxhdGUsIHtudW1fdGVzdHM6dGVzdHMubGVuZ3RofSwgb3V0cHV0
X2RvY3VtZW50KSk7CisKKyAgICAgICAgZm9yRWFjaChvdXRwdXRfZG9jdW1lbnQucXVlcnlTZWxl
Y3RvckFsbCgic2VjdGlvbiNzdW1tYXJ5IGxhYmVsIiksCisgICAgICAgICAgICAgICAgZnVuY3Rp
b24oZWxlbWVudCkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIG9uX2V2
ZW50KGVsZW1lbnQsICJjbGljayIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0
aW9uKGUpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGlmIChvdXRwdXRfZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoInJlc3Vs
dHMiKSA9PT0gbnVsbCkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGUu
cHJldmVudERlZmF1bHQoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBy
ZXR1cm47CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB2YXIgcmVzdWx0X2NsYXNzID0gZWxlbWVudC5wYXJlbnROb2Rl
LmdldEF0dHJpYnV0ZSgiY2xhc3MiKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHZhciBzdHlsZV9lbGVtZW50ID0gb3V0cHV0X2RvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoInN0eWxl
I2hpZGUtIiArIHJlc3VsdF9jbGFzcyk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB2YXIgaW5wdXRfZWxlbWVudCA9IGVsZW1lbnQucXVlcnlTZWxlY3RvcigiaW5wdXQiKTsKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghc3R5bGVfZWxlbWVudCAmJiAhaW5w
dXRfZWxlbWVudC5jaGVja2VkKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgc3R5bGVfZWxlbWVudCA9IG91dHB1dF9kb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoeGh0bWxf
bnMsICJzdHlsZSIpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0eWxl
X2VsZW1lbnQuaWQgPSAiaGlkZS0iICsgcmVzdWx0X2NsYXNzOworICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHN0eWxlX2VsZW1lbnQudGV4dENvbnRlbnQgPSAidGFibGUjcmVz
dWx0cyA+IHRib2R5ID4gdHIuIityZXN1bHRfY2xhc3MrIntkaXNwbGF5Om5vbmV9IjsKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdXRwdXRfZG9jdW1lbnQuYm9keS5hcHBl
bmRDaGlsZChzdHlsZV9lbGVtZW50KTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IH0gZWxzZSBpZiAoc3R5bGVfZWxlbWVudCAmJiBpbnB1dF9lbGVtZW50LmNoZWNrZWQpIHsKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHlsZV9lbGVtZW50LnBhcmVudE5v
ZGUucmVtb3ZlQ2hpbGQoc3R5bGVfZWxlbWVudCk7CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pOworICAgICAgICAgICAg
ICAgIH0pOworCisgICAgICAgIC8vIFRoaXMgdXNlIG9mIGlubmVySFRNTCBwbHVzIG1hbnVhbCBl
c2NhcGluZyBpcyBub3QgcmVjb21tZW5kZWQgaW4KKyAgICAgICAgLy8gZ2VuZXJhbCwgYnV0IGlz
IG5lY2Vzc2FyeSBoZXJlIGZvciBwZXJmb3JtYW5jZS4gIFVzaW5nIHRleHRDb250ZW50CisgICAg
ICAgIC8vIG9uIGVhY2ggaW5kaXZpZHVhbCA8dGQ+IGFkZHMgdGVucyBvZiBzZWNvbmRzIG9mIGV4
ZWN1dGlvbiB0aW1lIGZvcgorICAgICAgICAvLyBsYXJnZSB0ZXN0IHN1aXRlcyAodGVucyBvZiB0
aG91c2FuZHMgb2YgdGVzdHMpLgorICAgICAgICBmdW5jdGlvbiBlc2NhcGVfaHRtbChzKQorICAg
ICAgICB7CisgICAgICAgICAgICByZXR1cm4gcy5yZXBsYWNlKC9cJi9nLCAiJmFtcDsiKQorICAg
ICAgICAgICAgICAgIC5yZXBsYWNlKC88L2csICImbHQ7IikKKyAgICAgICAgICAgICAgICAucmVw
bGFjZSgvIi9nLCAiJnF1b3Q7IikKKyAgICAgICAgICAgICAgICAucmVwbGFjZSgvJy9nLCAiJiMz
OTsiKTsKKyAgICAgICAgfQorCisgICAgICAgIGZ1bmN0aW9uIGhhc19hc3NlcnRpb25zKCkKKyAg
ICAgICAgeworICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0ZXN0cy5sZW5ndGg7IGkr
KykgeworICAgICAgICAgICAgICAgIGlmICh0ZXN0c1tpXS5wcm9wZXJ0aWVzLmhhc093blByb3Bl
cnR5KCJhc3NlcnQiKSkgeworICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgICAgIH0KKworICAgICAgICBmdW5jdGlvbiBnZXRfYXNzZXJ0aW9uKHRlc3QpCisgICAgICAg
IHsKKyAgICAgICAgICAgIGlmICh0ZXN0LnByb3BlcnRpZXMuaGFzT3duUHJvcGVydHkoImFzc2Vy
dCIpKSB7CisgICAgICAgICAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkodGVzdC5wcm9wZXJ0aWVz
LmFzc2VydCkpIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRlc3QucHJvcGVydGllcy5h
c3NlcnQuam9pbignICcpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICByZXR1
cm4gdGVzdC5wcm9wZXJ0aWVzLmFzc2VydDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJl
dHVybiAnJzsKKyAgICAgICAgfQorCisgICAgICAgIGxvZy5hcHBlbmRDaGlsZChkb2N1bWVudC5j
cmVhdGVFbGVtZW50TlMoeGh0bWxfbnMsICJzZWN0aW9uIikpOworICAgICAgICB2YXIgYXNzZXJ0
aW9ucyA9IGhhc19hc3NlcnRpb25zKCk7CisgICAgICAgIHZhciBodG1sID0gIjxoMj5EZXRhaWxz
PC9oMj48dGFibGUgaWQ9J3Jlc3VsdHMnICIgKyAoYXNzZXJ0aW9ucyA/ICJjbGFzcz0nYXNzZXJ0
aW9ucyciIDogIiIgKSArICI+IgorICAgICAgICAgICAgKyAiPHRoZWFkPjx0cj48dGg+UmVzdWx0
PC90aD48dGg+VGVzdCBOYW1lPC90aD4iCisgICAgICAgICAgICArIChhc3NlcnRpb25zID8gIjx0
aD5Bc3NlcnRpb248L3RoPiIgOiAiIikKKyAgICAgICAgICAgICsgIjx0aD5NZXNzYWdlPC90aD48
L3RyPjwvdGhlYWQ+IgorICAgICAgICAgICAgKyAiPHRib2R5PiI7CisgICAgICAgIGZvciAodmFy
IGkgPSAwOyBpIDwgdGVzdHMubGVuZ3RoOyBpKyspIHsKKyAgICAgICAgICAgIGh0bWwgKz0gJzx0
ciBjbGFzcz0iJworICAgICAgICAgICAgICAgICsgZXNjYXBlX2h0bWwoc3RhdHVzX2NsYXNzKHN0
YXR1c190ZXh0W3Rlc3RzW2ldLnN0YXR1c10pKQorICAgICAgICAgICAgICAgICsgJyI+PHRkPicK
KyAgICAgICAgICAgICAgICArIGVzY2FwZV9odG1sKHN0YXR1c190ZXh0W3Rlc3RzW2ldLnN0YXR1
c10pCisgICAgICAgICAgICAgICAgKyAiPC90ZD48dGQ+IgorICAgICAgICAgICAgICAgICsgZXNj
YXBlX2h0bWwodGVzdHNbaV0ubmFtZSkKKyAgICAgICAgICAgICAgICArICI8L3RkPjx0ZD4iCisg
ICAgICAgICAgICAgICAgKyAoYXNzZXJ0aW9ucyA/IGVzY2FwZV9odG1sKGdldF9hc3NlcnRpb24o
dGVzdHNbaV0pKSArICI8L3RkPjx0ZD4iIDogIiIpCisgICAgICAgICAgICAgICAgKyBlc2NhcGVf
aHRtbCh0ZXN0c1tpXS5tZXNzYWdlID8gdGVzdHNbaV0ubWVzc2FnZSA6ICIgIikKKyAgICAgICAg
ICAgICAgICArICI8L3RkPjwvdHI+IjsKKyAgICAgICAgfQorICAgICAgICBodG1sICs9ICI8L3Ri
b2R5PjwvdGFibGU+IjsKKyAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgIGxvZy5sYXN0Q2hpbGQu
aW5uZXJIVE1MID0gaHRtbDsKKyAgICAgICAgfSBjYXRjaCAoZSkgeworICAgICAgICAgICAgbG9n
LmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUyh4aHRtbF9ucywgInAiKSkKKyAg
ICAgICAgICAgICAgIC50ZXh0Q29udGVudCA9ICJTZXR0aW5nIGlubmVySFRNTCBmb3IgdGhlIGxv
ZyB0aHJldyBhbiBleGNlcHRpb24uIjsKKyAgICAgICAgICAgIGxvZy5hcHBlbmRDaGlsZChkb2N1
bWVudC5jcmVhdGVFbGVtZW50TlMoeGh0bWxfbnMsICJwcmUiKSkKKyAgICAgICAgICAgICAgIC50
ZXh0Q29udGVudCA9IGh0bWw7CisgICAgICAgIH0KKyAgICB9OworCisgICAgdmFyIG91dHB1dCA9
IG5ldyBPdXRwdXQoKTsKKyAgICBhZGRfc3RhcnRfY2FsbGJhY2soZnVuY3Rpb24gKHByb3BlcnRp
ZXMpIHtvdXRwdXQuaW5pdChwcm9wZXJ0aWVzKTt9KTsKKyAgICBhZGRfcmVzdWx0X2NhbGxiYWNr
KGZ1bmN0aW9uICh0ZXN0KSB7b3V0cHV0LnNob3dfc3RhdHVzKHRlc3RzKTt9KTsKKyAgICBhZGRf
Y29tcGxldGlvbl9jYWxsYmFjayhmdW5jdGlvbiAodGVzdHMsIGhhcm5lc3Nfc3RhdHVzKSB7b3V0
cHV0LnNob3dfcmVzdWx0cyh0ZXN0cywgaGFybmVzc19zdGF0dXMpO30pOworCisgICAgLyoKKyAg
ICAgKiBUZW1wbGF0ZSBjb2RlCisgICAgICoKKyAgICAgKiBBIHRlbXBsYXRlIGlzIGp1c3QgYSBq
YXZhc2NyaXB0IHN0cnVjdHVyZS4gQW4gZWxlbWVudCBpcyByZXByZXNlbnRlZCBhczoKKyAgICAg
KgorICAgICAqIFt0YWdfbmFtZSwge2F0dHJfbmFtZTphdHRyX3ZhbHVlfSwgY2hpbGQxLCBjaGls
ZDJdCisgICAgICoKKyAgICAgKiB0aGUgY2hpbGRyZW4gY2FuIGVpdGhlciBiZSBzdHJpbmdzICh3
aGljaCBhY3QgbGlrZSB0ZXh0IG5vZGVzKSwgb3RoZXIgdGVtcGxhdGVzIG9yCisgICAgICogZnVu
Y3Rpb25zIChzZWUgYmVsb3cpCisgICAgICoKKyAgICAgKiBBIHRleHQgbm9kZSBpcyByZXByZXNl
bnRlZCBhcworICAgICAqCisgICAgICogWyJ7dGV4dH0iLCB2YWx1ZV0KKyAgICAgKgorICAgICAq
IFN0cmluZyB2YWx1ZXMgaGF2ZSBhIHNpbXBsZSBzdWJzdGl0dXRpb24gc3ludGF4OyAke2Zvb30g
cmVwcmVzZW50cyBhIHZhcmlhYmxlIGZvby4KKyAgICAgKgorICAgICAqIEl0IGlzIHBvc3NpYmxl
IHRvIGVtYmVkIGxvZ2ljIGluIHRlbXBsYXRlcyBieSB1c2luZyBhIGZ1bmN0aW9uIGluIGEgcGxh
Y2Ugd2hlcmUgYQorICAgICAqIG5vZGUgd291bGQgdXN1YWxseSBnby4gVGhlIGZ1bmN0aW9uIG11
c3QgZWl0aGVyIHJldHVybiBwYXJ0IG9mIGEgdGVtcGxhdGUgb3IgbnVsbC4KKyAgICAgKgorICAg
ICAqIEluIGNhc2VzIHdoZXJlIGEgc2V0IG9mIG5vZGVzIGFyZSByZXF1aXJlZCBhcyBvdXRwdXQg
cmF0aGVyIHRoYW4gYSBzaW5nbGUgbm9kZQorICAgICAqIHdpdGggY2hpbGRyZW4gaXQgaXMgcG9z
c2libGUgdG8ganVzdCB1c2UgYSBsaXN0CisgICAgICogW25vZGUxLCBub2RlMiwgbm9kZTNdCisg
ICAgICoKKyAgICAgKiBVc2FnZToKKyAgICAgKgorICAgICAqIHJlbmRlcih0ZW1wbGF0ZSwgc3Vi
c3RpdHV0aW9ucykgLSB0YWtlIGEgdGVtcGxhdGUgYW5kIGFuIG9iamVjdCBtYXBwaW5nCisgICAg
ICogdmFyaWFibGUgbmFtZXMgdG8gcGFyYW1ldGVycyBhbmQgcmV0dXJuIGVpdGhlciBhIERPTSBu
b2RlIG9yIGEgbGlzdCBvZiBET00gbm9kZXMKKyAgICAgKgorICAgICAqIHN1YnN0aXR1dGUodGVt
cGxhdGUsIHN1YnN0aXR1dGlvbnMpIC0gdGFrZSBhIHRlbXBsYXRlIGFuZCB2YXJpYWJsZSBtYXBw
aW5nIG9iamVjdCwKKyAgICAgKiBtYWtlIHRoZSB2YXJpYWJsZSBzdWJzdGl0dXRpb25zIGFuZCBy
ZXR1cm4gdGhlIHN1YnN0aXR1dGVkIHRlbXBsYXRlCisgICAgICoKKyAgICAgKi8KKworICAgIGZ1
bmN0aW9uIGlzX3NpbmdsZV9ub2RlKHRlbXBsYXRlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHR5
cGVvZiB0ZW1wbGF0ZVswXSA9PT0gInN0cmluZyI7CisgICAgfQorCisgICAgZnVuY3Rpb24gc3Vi
c3RpdHV0ZSh0ZW1wbGF0ZSwgc3Vic3RpdHV0aW9ucykKKyAgICB7CisgICAgICAgIGlmICh0eXBl
b2YgdGVtcGxhdGUgPT09ICJmdW5jdGlvbiIpIHsKKyAgICAgICAgICAgIHZhciByZXBsYWNlbWVu
dCA9IHRlbXBsYXRlKHN1YnN0aXR1dGlvbnMpOworICAgICAgICAgICAgaWYgKCFyZXBsYWNlbWVu
dCkgeworICAgICAgICAgICAgICAgIHJldHVybiBudWxsOworICAgICAgICAgICAgfQorCisgICAg
ICAgICAgICByZXR1cm4gc3Vic3RpdHV0ZShyZXBsYWNlbWVudCwgc3Vic3RpdHV0aW9ucyk7Cisg
ICAgICAgIH0KKworICAgICAgICBpZiAoaXNfc2luZ2xlX25vZGUodGVtcGxhdGUpKSB7CisgICAg
ICAgICAgICByZXR1cm4gc3Vic3RpdHV0ZV9zaW5nbGUodGVtcGxhdGUsIHN1YnN0aXR1dGlvbnMp
OworICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIGZpbHRlcihtYXAodGVtcGxhdGUsIGZ1bmN0
aW9uKHgpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBzdWJzdGl0dXRl
KHgsIHN1YnN0aXR1dGlvbnMpOworICAgICAgICAgICAgICAgICAgICAgICAgICB9KSwgZnVuY3Rp
b24oeCkge3JldHVybiB4ICE9PSBudWxsO30pOworICAgIH0KKworICAgIGZ1bmN0aW9uIHN1YnN0
aXR1dGVfc2luZ2xlKHRlbXBsYXRlLCBzdWJzdGl0dXRpb25zKQorICAgIHsKKyAgICAgICAgdmFy
IHN1YnN0aXR1dGlvbl9yZSA9IC9cJHsoW14gfV0qKX0vZzsKKworICAgICAgICBmdW5jdGlvbiBk
b19zdWJzdGl0dXRpb24oaW5wdXQpIHsKKyAgICAgICAgICAgIHZhciBjb21wb25lbnRzID0gaW5w
dXQuc3BsaXQoc3Vic3RpdHV0aW9uX3JlKTsKKyAgICAgICAgICAgIHZhciBydiA9IFtdOworICAg
ICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBjb21wb25lbnRzLmxlbmd0aDsgaSArPSAyKSB7
CisgICAgICAgICAgICAgICAgcnYucHVzaChjb21wb25lbnRzW2ldKTsKKyAgICAgICAgICAgICAg
ICBpZiAoY29tcG9uZW50c1tpICsgMV0pIHsKKyAgICAgICAgICAgICAgICAgICAgcnYucHVzaChT
dHJpbmcoc3Vic3RpdHV0aW9uc1tjb21wb25lbnRzW2kgKyAxXV0pKTsKKyAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4gcnY7CisgICAgICAgIH0KKwor
ICAgICAgICB2YXIgcnYgPSBbXTsKKyAgICAgICAgcnYucHVzaChkb19zdWJzdGl0dXRpb24oU3Ry
aW5nKHRlbXBsYXRlWzBdKSkuam9pbigiIikpOworCisgICAgICAgIGlmICh0ZW1wbGF0ZVswXSA9
PT0gInt0ZXh0fSIpIHsKKyAgICAgICAgICAgIHN1YnN0aXR1dGVfY2hpbGRyZW4odGVtcGxhdGUu
c2xpY2UoMSksIHJ2KTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHN1YnN0aXR1dGVf
YXR0cnModGVtcGxhdGVbMV0sIHJ2KTsKKyAgICAgICAgICAgIHN1YnN0aXR1dGVfY2hpbGRyZW4o
dGVtcGxhdGUuc2xpY2UoMiksIHJ2KTsKKyAgICAgICAgfQorCisgICAgICAgIGZ1bmN0aW9uIHN1
YnN0aXR1dGVfYXR0cnMoYXR0cnMsIHJ2KQorICAgICAgICB7CisgICAgICAgICAgICBydlsxXSA9
IHt9OworICAgICAgICAgICAgZm9yICh2YXIgbmFtZSBpbiB0ZW1wbGF0ZVsxXSkgeworICAgICAg
ICAgICAgICAgIGlmIChhdHRycy5oYXNPd25Qcm9wZXJ0eShuYW1lKSkgeworICAgICAgICAgICAg
ICAgICAgICB2YXIgbmV3X25hbWUgPSBkb19zdWJzdGl0dXRpb24obmFtZSkuam9pbigiIik7Cisg
ICAgICAgICAgICAgICAgICAgIHZhciBuZXdfdmFsdWUgPSBkb19zdWJzdGl0dXRpb24oYXR0cnNb
bmFtZV0pLmpvaW4oIiIpOworICAgICAgICAgICAgICAgICAgICBydlsxXVtuZXdfbmFtZV0gPSBu
ZXdfdmFsdWU7CisgICAgICAgICAgICAgICAgfTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQor
CisgICAgICAgIGZ1bmN0aW9uIHN1YnN0aXR1dGVfY2hpbGRyZW4oY2hpbGRyZW4sIHJ2KQorICAg
ICAgICB7CisgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGNoaWxkcmVuLmxlbmd0aDsg
aSsrKSB7CisgICAgICAgICAgICAgICAgaWYgKGNoaWxkcmVuW2ldIGluc3RhbmNlb2YgT2JqZWN0
KSB7CisgICAgICAgICAgICAgICAgICAgIHZhciByZXBsYWNlbWVudCA9IHN1YnN0aXR1dGUoY2hp
bGRyZW5baV0sIHN1YnN0aXR1dGlvbnMpOworICAgICAgICAgICAgICAgICAgICBpZiAocmVwbGFj
ZW1lbnQgIT09IG51bGwpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpc19zaW5nbGVf
bm9kZShyZXBsYWNlbWVudCkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBydi5wdXNo
KHJlcGxhY2VtZW50KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgZXh0ZW5kKHJ2LCByZXBsYWNlbWVudCk7CisgICAgICAgICAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9
IGVsc2UgeworICAgICAgICAgICAgICAgICAgICBleHRlbmQocnYsIGRvX3N1YnN0aXR1dGlvbihT
dHJpbmcoY2hpbGRyZW5baV0pKSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQor
ICAgICAgICAgICAgcmV0dXJuIHJ2OworICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIHJ2Owor
ICAgIH0KKworICAgIGZ1bmN0aW9uIG1ha2VfZG9tX3NpbmdsZSh0ZW1wbGF0ZSwgZG9jKQorICAg
IHsKKyAgICAgICAgdmFyIG91dHB1dF9kb2N1bWVudCA9IGRvYyB8fCBkb2N1bWVudDsKKyAgICAg
ICAgaWYgKHRlbXBsYXRlWzBdID09PSAie3RleHR9IikgeworICAgICAgICAgICAgdmFyIGVsZW1l
bnQgPSBvdXRwdXRfZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoIiIpOworICAgICAgICAgICAgZm9y
ICh2YXIgaSA9IDE7IGkgPCB0ZW1wbGF0ZS5sZW5ndGg7IGkrKykgeworICAgICAgICAgICAgICAg
IGVsZW1lbnQuZGF0YSArPSB0ZW1wbGF0ZVtpXTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBl
bHNlIHsKKyAgICAgICAgICAgIHZhciBlbGVtZW50ID0gb3V0cHV0X2RvY3VtZW50LmNyZWF0ZUVs
ZW1lbnROUyh4aHRtbF9ucywgdGVtcGxhdGVbMF0pOworICAgICAgICAgICAgZm9yICh2YXIgbmFt
ZSBpbiB0ZW1wbGF0ZVsxXSkgeworICAgICAgICAgICAgICAgIGlmICh0ZW1wbGF0ZVsxXS5oYXNP
d25Qcm9wZXJ0eShuYW1lKSkgeworICAgICAgICAgICAgICAgICAgICBlbGVtZW50LnNldEF0dHJp
YnV0ZShuYW1lLCB0ZW1wbGF0ZVsxXVtuYW1lXSk7CisgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgfQorICAgICAgICAgICAgZm9yICh2YXIgaSA9IDI7IGkgPCB0ZW1wbGF0ZS5sZW5ndGg7
IGkrKykgeworICAgICAgICAgICAgICAgIGlmICh0ZW1wbGF0ZVtpXSBpbnN0YW5jZW9mIE9iamVj
dCkgeworICAgICAgICAgICAgICAgICAgICB2YXIgc3ViX2VsZW1lbnQgPSBtYWtlX2RvbSh0ZW1w
bGF0ZVtpXSk7CisgICAgICAgICAgICAgICAgICAgIGVsZW1lbnQuYXBwZW5kQ2hpbGQoc3ViX2Vs
ZW1lbnQpOworICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIHZh
ciB0ZXh0X25vZGUgPSBvdXRwdXRfZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUodGVtcGxhdGVbaV0p
OworICAgICAgICAgICAgICAgICAgICBlbGVtZW50LmFwcGVuZENoaWxkKHRleHRfbm9kZSk7Cisg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgcmV0
dXJuIGVsZW1lbnQ7CisgICAgfQorCisKKworICAgIGZ1bmN0aW9uIG1ha2VfZG9tKHRlbXBsYXRl
LCBzdWJzdGl0dXRpb25zLCBvdXRwdXRfZG9jdW1lbnQpCisgICAgeworICAgICAgICBpZiAoaXNf
c2luZ2xlX25vZGUodGVtcGxhdGUpKSB7CisgICAgICAgICAgICByZXR1cm4gbWFrZV9kb21fc2lu
Z2xlKHRlbXBsYXRlLCBvdXRwdXRfZG9jdW1lbnQpOworICAgICAgICB9CisKKyAgICAgICAgcmV0
dXJuIG1hcCh0ZW1wbGF0ZSwgZnVuY3Rpb24oeCkgeworICAgICAgICAgICAgICAgICAgICAgICBy
ZXR1cm4gbWFrZV9kb21fc2luZ2xlKHgsIG91dHB1dF9kb2N1bWVudCk7CisgICAgICAgICAgICAg
ICAgICAgfSk7CisgICAgfQorCisgICAgZnVuY3Rpb24gcmVuZGVyKHRlbXBsYXRlLCBzdWJzdGl0
dXRpb25zLCBvdXRwdXRfZG9jdW1lbnQpCisgICAgeworICAgICAgICByZXR1cm4gbWFrZV9kb20o
c3Vic3RpdHV0ZSh0ZW1wbGF0ZSwgc3Vic3RpdHV0aW9ucyksIG91dHB1dF9kb2N1bWVudCk7Cisg
ICAgfQorCisgICAgLyoKKyAgICAgKiBVdGlsaXR5IGZ1bmNpb25zCisgICAgICovCisgICAgZnVu
Y3Rpb24gYXNzZXJ0KGV4cGVjdGVkX3RydWUsIGZ1bmN0aW9uX25hbWUsIGRlc2NyaXB0aW9uLCBl
cnJvciwgc3Vic3RpdHV0aW9ucykKKyAgICB7CisgICAgICAgIGlmIChleHBlY3RlZF90cnVlICE9
PSB0cnVlKSB7CisgICAgICAgICAgICB0aHJvdyBuZXcgQXNzZXJ0aW9uRXJyb3IobWFrZV9tZXNz
YWdlKGZ1bmN0aW9uX25hbWUsIGRlc2NyaXB0aW9uLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBlcnJvciwgc3Vic3RpdHV0aW9ucykpOworICAgICAg
ICB9CisgICAgfQorCisgICAgZnVuY3Rpb24gQXNzZXJ0aW9uRXJyb3IobWVzc2FnZSkKKyAgICB7
CisgICAgICAgIHRoaXMubWVzc2FnZSA9IG1lc3NhZ2U7CisgICAgfQorCisgICAgZnVuY3Rpb24g
bWFrZV9tZXNzYWdlKGZ1bmN0aW9uX25hbWUsIGRlc2NyaXB0aW9uLCBlcnJvciwgc3Vic3RpdHV0
aW9ucykKKyAgICB7CisgICAgICAgIGZvciAodmFyIHAgaW4gc3Vic3RpdHV0aW9ucykgeworICAg
ICAgICAgICAgaWYgKHN1YnN0aXR1dGlvbnMuaGFzT3duUHJvcGVydHkocCkpIHsKKyAgICAgICAg
ICAgICAgICBzdWJzdGl0dXRpb25zW3BdID0gZm9ybWF0X3ZhbHVlKHN1YnN0aXR1dGlvbnNbcF0p
OworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIHZhciBub2RlX2Zvcm0gPSBzdWJz
dGl0dXRlKFsie3RleHR9IiwgIiR7ZnVuY3Rpb25fbmFtZX06ICR7ZGVzY3JpcHRpb259IiArIGVy
cm9yXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVyZ2Uoe2Z1bmN0aW9u
X25hbWU6ZnVuY3Rpb25fbmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGRlc2NyaXB0aW9uOihkZXNjcmlwdGlvbj9kZXNjcmlwdGlvbiArICIgIjoiIil9LAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Vic3RpdHV0aW9ucykp
OworICAgICAgICByZXR1cm4gbm9kZV9mb3JtLnNsaWNlKDEpLmpvaW4oIiIpOworICAgIH0KKwor
ICAgIGZ1bmN0aW9uIGZpbHRlcihhcnJheSwgY2FsbGFibGUsIHRoaXNPYmopIHsKKyAgICAgICAg
dmFyIHJ2ID0gW107CisgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYXJyYXkubGVuZ3RoOyBp
KyspIHsKKyAgICAgICAgICAgIGlmIChhcnJheS5oYXNPd25Qcm9wZXJ0eShpKSkgeworICAgICAg
ICAgICAgICAgIHZhciBwYXNzID0gY2FsbGFibGUuY2FsbCh0aGlzT2JqLCBhcnJheVtpXSwgaSwg
YXJyYXkpOworICAgICAgICAgICAgICAgIGlmIChwYXNzKSB7CisgICAgICAgICAgICAgICAgICAg
IHJ2LnB1c2goYXJyYXlbaV0pOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAg
ICAgICAgfQorICAgICAgICByZXR1cm4gcnY7CisgICAgfQorCisgICAgZnVuY3Rpb24gbWFwKGFy
cmF5LCBjYWxsYWJsZSwgdGhpc09iaikKKyAgICB7CisgICAgICAgIHZhciBydiA9IFtdOworICAg
ICAgICBydi5sZW5ndGggPSBhcnJheS5sZW5ndGg7CisgICAgICAgIGZvciAodmFyIGkgPSAwOyBp
IDwgYXJyYXkubGVuZ3RoOyBpKyspIHsKKyAgICAgICAgICAgIGlmIChhcnJheS5oYXNPd25Qcm9w
ZXJ0eShpKSkgeworICAgICAgICAgICAgICAgIHJ2W2ldID0gY2FsbGFibGUuY2FsbCh0aGlzT2Jq
LCBhcnJheVtpXSwgaSwgYXJyYXkpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAg
IHJldHVybiBydjsKKyAgICB9CisKKyAgICBmdW5jdGlvbiBleHRlbmQoYXJyYXksIGl0ZW1zKQor
ICAgIHsKKyAgICAgICAgQXJyYXkucHJvdG90eXBlLnB1c2guYXBwbHkoYXJyYXksIGl0ZW1zKTsK
KyAgICB9CisKKyAgICBmdW5jdGlvbiBmb3JFYWNoIChhcnJheSwgY2FsbGJhY2ssIHRoaXNPYmop
CisgICAgeworICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGFycmF5Lmxlbmd0aDsgaSsrKSB7
CisgICAgICAgICAgICBpZiAoYXJyYXkuaGFzT3duUHJvcGVydHkoaSkpIHsKKyAgICAgICAgICAg
ICAgICBjYWxsYmFjay5jYWxsKHRoaXNPYmosIGFycmF5W2ldLCBpLCBhcnJheSk7CisgICAgICAg
ICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICBmdW5jdGlvbiBtZXJnZShhLGIpCisgICAg
eworICAgICAgICB2YXIgcnYgPSB7fTsKKyAgICAgICAgdmFyIHA7CisgICAgICAgIGZvciAocCBp
biBhKSB7CisgICAgICAgICAgICBydltwXSA9IGFbcF07CisgICAgICAgIH0KKyAgICAgICAgZm9y
IChwIGluIGIpIHsKKyAgICAgICAgICAgIHJ2W3BdID0gYltwXTsKKyAgICAgICAgfQorICAgICAg
ICByZXR1cm4gcnY7CisgICAgfQorCisgICAgZnVuY3Rpb24gZXhwb3NlKG9iamVjdCwgbmFtZSkK
KyAgICB7CisgICAgICAgIHZhciBjb21wb25lbnRzID0gbmFtZS5zcGxpdCgiLiIpOworICAgICAg
ICB2YXIgdGFyZ2V0ID0gd2luZG93OworICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGNvbXBv
bmVudHMubGVuZ3RoIC0gMTsgaSsrKSB7CisgICAgICAgICAgICBpZiAoIShjb21wb25lbnRzW2ld
IGluIHRhcmdldCkpIHsKKyAgICAgICAgICAgICAgICB0YXJnZXRbY29tcG9uZW50c1tpXV0gPSB7
fTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHRhcmdldCA9IHRhcmdldFtjb21wb25lbnRz
W2ldXTsKKyAgICAgICAgfQorICAgICAgICB0YXJnZXRbY29tcG9uZW50c1tjb21wb25lbnRzLmxl
bmd0aCAtIDFdXSA9IG9iamVjdDsKKyAgICB9CisKKyAgICBmdW5jdGlvbiBmb3JFYWNoX3dpbmRv
d3MoY2FsbGJhY2spIHsKKyAgICAgICAgLy8gSXRlcmF0ZSBvZiB0aGUgdGhlIHdpbmRvd3MgW3Nl
bGYgLi4uIHRvcCwgb3BlbmVyXS4gVGhlIGNhbGxiYWNrIGlzIHBhc3NlZAorICAgICAgICAvLyB0
d28gb2JqZWN0cywgdGhlIGZpcnN0IG9uZSBpcyB0aGUgd2luZG93cyBvYmplY3QgaXRzZWxmLCB0
aGUgc2Vjb25kIG9uZQorICAgICAgICAvLyBpcyBhIGJvb2xlYW4gaW5kaWNhdGluZyB3aGV0aGVy
IG9yIG5vdCBpdHMgb24gdGhlIHNhbWUgb3JpZ2luIGFzIHRoZQorICAgICAgICAvLyBjdXJyZW50
IHdpbmRvdy4KKyAgICAgICAgdmFyIGNhY2hlID0gZm9yRWFjaF93aW5kb3dzLnJlc3VsdF9jYWNo
ZTsKKyAgICAgICAgaWYgKCFjYWNoZSkgeworICAgICAgICAgICAgY2FjaGUgPSBbW3NlbGYsIHRy
dWVdXTsKKyAgICAgICAgICAgIHZhciB3ID0gc2VsZjsKKyAgICAgICAgICAgIHZhciBpID0gMDsK
KyAgICAgICAgICAgIHZhciBzbzsKKyAgICAgICAgICAgIHZhciBvcmlnaW5zID0gbG9jYXRpb24u
YW5jZXN0b3JPcmlnaW5zOworICAgICAgICAgICAgd2hpbGUgKHcgIT0gdy5wYXJlbnQpIHsKKyAg
ICAgICAgICAgICAgICB3ID0gdy5wYXJlbnQ7CisgICAgICAgICAgICAgICAgLy8gSW4gV2ViS2l0
LCBjYWxscyB0byBwYXJlbnQgd2luZG93cycgcHJvcGVydGllcyB0aGF0IGFyZW4ndCBvbiB0aGUg
c2FtZQorICAgICAgICAgICAgICAgIC8vIG9yaWdpbiBjYXVzZSBhbiBlcnJvciBtZXNzYWdlIHRv
IGJlIGRpc3BsYXllZCBpbiB0aGUgZXJyb3IgY29uc29sZSBidXQKKyAgICAgICAgICAgICAgICAv
LyBkb24ndCB0aHJvdyBhbiBleGNlcHRpb24uIFRoaXMgaXMgYSBkZXZpYXRpb24gZnJvbSB0aGUg
Y3VycmVudCBIVE1MNQorICAgICAgICAgICAgICAgIC8vIHNwZWMuIFNlZTogaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTQzNTA0CisgICAgICAgICAgICAgICAgLy8gVGhl
IHByb2JsZW0gd2l0aCBXZWJLaXQncyBiZWhhdmlvciBpcyB0aGF0IGl0IHBvbGx1dGVzIHRoZSBl
cnJvciBjb25zb2xlCisgICAgICAgICAgICAgICAgLy8gd2l0aCBlcnJvciBtZXNzYWdlcyB0aGF0
IGNhbid0IGJlIGNhdWdodC4KKyAgICAgICAgICAgICAgICAvLworICAgICAgICAgICAgICAgIC8v
IFRoaXMgaXNzdWUgY2FuIGJlIG1pdGlnYXRlZCBieSByZWx5aW5nIG9uIHRoZSAoZm9yIG5vdykg
cHJvcHJpZXRhcnkKKyAgICAgICAgICAgICAgICAvLyBgbG9jYXRpb24uYW5jZXN0b3JPcmlnaW5z
YCBwcm9wZXJ0eSB3aGljaCByZXR1cm5zIGFuIG9yZGVyZWQgbGlzdCBvZgorICAgICAgICAgICAg
ICAgIC8vIHRoZSBvcmlnaW5zIG9mIGVuY2xvc2luZyB3aW5kb3dzLiBTZWU6CisgICAgICAgICAg
ICAgICAgLy8gaHR0cDovL3RyYWMud2Via2l0Lm9yZy9jaGFuZ2VzZXQvMTEzOTQ1LgorICAgICAg
ICAgICAgICAgIGlmIChvcmlnaW5zKSB7CisgICAgICAgICAgICAgICAgICAgIHNvID0gKGxvY2F0
aW9uLm9yaWdpbiA9PSBvcmlnaW5zW2ldKTsKKyAgICAgICAgICAgICAgICB9IGVsc2UgeworICAg
ICAgICAgICAgICAgICAgICBzbyA9IGlzX3NhbWVfb3JpZ2luKHcpOworICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgICAgICBjYWNoZS5wdXNoKFt3LCBzb10pOworICAgICAgICAgICAgICAg
IGkrKzsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHcgPSB3aW5kb3cub3BlbmVyOworICAg
ICAgICAgICAgaWYgKHcpIHsKKyAgICAgICAgICAgICAgICAvLyB3aW5kb3cub3BlbmVyIGlzbid0
IGluY2x1ZGVkIGluIHRoZSBgbG9jYXRpb24uYW5jZXN0b3JPcmlnaW5zYCBwcm9wLgorICAgICAg
ICAgICAgICAgIC8vIFdlJ2xsIGp1c3QgaGF2ZSB0byBkZWFsIHdpdGggYSBzaW1wbGUgY2hlY2sg
YW5kIGFuIGVycm9yIG1zZyBvbiBXZWJLaXQKKyAgICAgICAgICAgICAgICAvLyBicm93c2VycyBp
biB0aGlzIGNhc2UuCisgICAgICAgICAgICAgICAgY2FjaGUucHVzaChbdywgaXNfc2FtZV9vcmln
aW4odyldKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGZvckVhY2hfd2luZG93cy5yZXN1
bHRfY2FjaGUgPSBjYWNoZTsKKyAgICAgICAgfQorCisgICAgICAgIGZvckVhY2goY2FjaGUsCisg
ICAgICAgICAgICAgICAgZnVuY3Rpb24oYSkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAg
ICAgICAgICAgIGNhbGxiYWNrLmFwcGx5KG51bGwsIGEpOworICAgICAgICAgICAgICAgIH0pOwor
ICAgIH0KKworICAgIGZ1bmN0aW9uIGlzX3NhbWVfb3JpZ2luKHcpIHsKKyAgICAgICAgdHJ5IHsK
KyAgICAgICAgICAgICdyYW5kb21fcHJvcCcgaW4gdzsKKyAgICAgICAgICAgIHJldHVybiB0cnVl
OworICAgICAgICB9IGNhdGNoIChlKSB7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
ICAgIH0KKyAgICB9CisKKyAgICBmdW5jdGlvbiBzdXBwb3J0c19wb3N0X21lc3NhZ2UodykKKyAg
ICB7CisgICAgICAgIHZhciBzdXBwb3J0czsKKyAgICAgICAgdmFyIHR5cGU7CisgICAgICAgIC8v
IEdpdmVuIElFICBpbXBsZW1lbnRzIHBvc3RNZXNzYWdlIGFjcm9zcyBuZXN0ZWQgaWZyYW1lcyBi
dXQgbm90IGFjcm9zcworICAgICAgICAvLyB3aW5kb3dzIG9yIHRhYnMsIHlvdSBjYW4ndCBpbmZl
ciBjcm9zcy1vcmlnaW4gY29tbXVuaWNhdGlvbiBmcm9tIHRoZSBwcmVzZW5jZQorICAgICAgICAv
LyBvZiBwb3N0TWVzc2FnZSBvbiB0aGUgY3VycmVudCB3aW5kb3cgb2JqZWN0IG9ubHkuCisgICAg
ICAgIC8vCisgICAgICAgIC8vIFRvdWNoaW5nIHRoZSBwb3N0TWVzc2FnZSBwcm9wIG9uIGEgd2lu
ZG93IGNhbiB0aHJvdyBpZiB0aGUgd2luZG93IGlzCisgICAgICAgIC8vIG5vdCBmcm9tIHRoZSBz
YW1lIG9yaWdpbiBBTkQgcG9zdCBtZXNzYWdlIGlzIG5vdCBzdXBwb3J0ZWQgaW4gdGhhdAorICAg
ICAgICAvLyBicm93c2VyLiBTbyBqdXN0IGRvaW5nIGFuIGV4aXN0ZW5jZSB0ZXN0IGhlcmUgd29u
J3QgZG8sIHlvdSBhbHNvIG5lZWQKKyAgICAgICAgLy8gdG8gd3JhcCBpdCBpbiBhIHRyeS4uY2Fj
dGggYmxvY2suCisgICAgICAgIHRyeSB7CisgICAgICAgICAgICB0eXBlID0gdHlwZW9mIHcucG9z
dE1lc3NhZ2U7CisgICAgICAgICAgICBpZiAodHlwZSA9PT0gImZ1bmN0aW9uIikgeworICAgICAg
ICAgICAgICAgIHN1cHBvcnRzID0gdHJ1ZTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAg
Ly8gSUU4IHN1cHBvcnRzIHBvc3RNZXNzYWdlLCBidXQgaW1wbGVtZW50cyBpdCBhcyBhIGhvc3Qg
b2JqZWN0IHdoaWNoCisgICAgICAgICAgICAvLyByZXR1cm5zICJvYmplY3QiIGFzIGl0cyBgdHlw
ZW9mYC4KKyAgICAgICAgICAgIGVsc2UgaWYgKHR5cGUgPT09ICJvYmplY3QiKSB7CisgICAgICAg
ICAgICAgICAgc3VwcG9ydHMgPSB0cnVlOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICAv
LyBUaGlzIGlzIHRoZSBjYXNlIHdoZXJlIHBvc3RNZXNzYWdlIGlzbid0IHN1cHBvcnRlZCBBTkQg
YWNjZXNzaW5nIGEKKyAgICAgICAgICAgIC8vIHdpbmRvdyBwcm9wZXJ0eSBhY3Jvc3Mgb3JpZ2lu
cyBkb2VzIE5PVCB0aHJvdyAoZS5nLiBvbGQgU2FmYXJpIGJyb3dzZXIpLgorICAgICAgICAgICAg
ZWxzZSB7CisgICAgICAgICAgICAgICAgc3VwcG9ydHMgPSBmYWxzZTsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgfSBjYXRjaCAoZSkgeworICAgICAgICAgICAgLy8gVGhpcyBpcyB0aGUgY2FzZSB3
aGVyZSBwb3N0TWVzc2FnZSBpc24ndCBzdXBwb3J0ZWQgQU5EIGFjY2Vzc2luZyBhCisgICAgICAg
ICAgICAvLyB3aW5kb3cgcHJvcGVydHkgYWNyb3NzIG9yaWdpbnMgdGhyb3dzIChlLmcuIG9sZCBG
aXJlZm94IGJyb3dzZXIpLgorICAgICAgICAgICAgc3VwcG9ydHMgPSBmYWxzZTsKKyAgICAgICAg
fQorICAgICAgICByZXR1cm4gc3VwcG9ydHM7CisgICAgfQorfSkoKTsKKy8vIHZpbTogc2V0IGV4
cGFuZHRhYiBzaGlmdHdpZHRoPTQgdGFic3RvcD00Ogo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>234801</attachid>
            <date>2014-07-12 08:21:14 -0700</date>
            <delta_ts>2014-07-12 08:26:49 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-134852-20140712082056.patch</filename>
            <type>text/plain</type>
            <size>62679</size>
            <attacher name="Jer Noble">jer.noble</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTcxMDE3CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNGQ2YWZjNmE2NzdlY2Rk
ZmJlMzk3ZjYzNGUwN2FiZTZiNjM5MTczZC4uMjBhN2Y2MjBmNzRjYTFjYjRiNGViMmIwYjhiNDcw
ODhmMWI1N2I5MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSw1ICsxLDE0MCBAQAogMjAxNC0wNy0xMSAgSmVy
IE5vYmxlICA8amVyLm5vYmxlQGFwcGxlLmNvbT4KIAorICAgICAgICBbTVNFXSBodHRwL3Rlc3Rz
L21lZGlhL21lZGlhLXNvdXJjZS9tZWRpYXNvdXJjZS1kdXJhdGlvbi5odG1sIGlzIGZhaWxpbmcu
CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMzQ4NTIK
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBGaXhlcyB0
aGUgZm9sbG93aW5nIHRlc3RzOgorICAgICAgICBodHRwL3Rlc3RzL21lZGlhL21lZGlhLXNvdXJj
ZS9tZWRpYXNvdXJjZS1jb25maWctY2hhbmdlLW1wNC1hLWJpdHJhdGUuaHRtbAorICAgICAgICBo
dHRwL3Rlc3RzL21lZGlhL21lZGlhLXNvdXJjZS9tZWRpYXNvdXJjZS1jb25maWctY2hhbmdlLW1w
NC1hdi1hdWRpby1iaXRyYXRlLmh0bWwKKyAgICAgICAgaHR0cC90ZXN0cy9tZWRpYS9tZWRpYS1z
b3VyY2UvbWVkaWFzb3VyY2UtY29uZmlnLWNoYW5nZS1tcDQtYXYtdmlkZW8tYml0cmF0ZS5odG1s
CisgICAgICAgIGh0dHAvdGVzdHMvbWVkaWEvbWVkaWEtc291cmNlL21lZGlhc291cmNlLWNvbmZp
Zy1jaGFuZ2UtbXA0LXYtYml0cmF0ZS5odG1sCisgICAgICAgIGh0dHAvdGVzdHMvbWVkaWEvbWVk
aWEtc291cmNlL21lZGlhc291cmNlLWNvbmZpZy1jaGFuZ2UtbXA0LXYtZnJhbWVyYXRlLmh0bWwK
KyAgICAgICAgaHR0cC90ZXN0cy9tZWRpYS9tZWRpYS1zb3VyY2UvbWVkaWFzb3VyY2UtZHVyYXRp
b24uaHRtbAorICAgICAgICBodHRwL3Rlc3RzL21lZGlhL21lZGlhLXNvdXJjZS9tZWRpYXNvdXJj
ZS1wbGF5Lmh0bWwKKworICAgICAgICBUaGUgcHJpbWFyeSBjaGFuZ2UgbmVjZXNzYXJ5IHRvIGZp
eCB0aGUgbWVkaWFzb3VyY2UtZHVyYXRpb24uaHRtbCB0ZXN0IHdhcyB0byBhZGQgc3VwcG9ydAor
ICAgICAgICBmb3IgZGVsYXlpbmcgdGhlIGNvbXBsZXRpb24gb2YgYSBzZWVrIG9wZXJhdGlvbiB1
bnRpbCB0aGUgSFRNTE1lZGlhRWxlbWVudCdzIHJlYWR5U3RhdGUKKyAgICAgICAgcmlzZXMgdG8g
PiBIQVZFX0NVUlJFTlRfREFUQS4gVGhpcyBpcyBhY2NvbXBsaXNoZWQgYnkgbW9kaWZ5aW5nIE1l
ZGlhU291cmNlUHJpdmF0ZSB0byBoYXZlCisgICAgICAgIHdhaXRGb3JTZWVrQ29tcGxldGVkKCkg
YW5kIHNlZWtDb21wbGV0ZWQoKSB2aXJ0dWFsIG1ldGhvZHMuIFRoZXNlIGFyZSBjYWxsZWQgYnkg
TWVkaWFTb3VyY2UKKyAgICAgICAgd2hlbiBhIHNlZWsgb3BlcmF0aW9uIHJlc3VsdHMgaW4gdGhl
IGN1cnJlbnQgdGltZSBtb3Zpbmcgb3V0c2lkZSB0aGUgY3VycmVudGx5IGJ1ZmZlcmVkIHRpbWUK
KyAgICAgICAgcmFuZ2VzLCBhbmQgd2hlbiBhbiBhcHBlbmQgb3BlcmF0aW9uIHJlc3VsdHMgaW4g
dGhlIHJlYWR5U3RhdGUgY2hhbmdpbmcsIHJlc3BlY3RpdmVseS4KKworICAgICAgICBBIG51bWJl
ciBvZiBvdGhlciBkcml2ZS1ieSBmaXhlcyB3ZXJlIG5lY2Vzc2FyeSB0byBnZXQgdGhpcyB0ZXN0
IGZ1bGx5IHBhc3NpbmcsIGFzIG5vdGVkCisgICAgICAgIGJlbG93LgorCisgICAgICAgIE1ha2Ug
dGhlIE1lZGlhU291cmNlIHRoZSBwcmltYXJ5IG93bmVyIG9mIHRoZSBtZWRpYSdzIGR1cmF0aW9u
LCByYXRoZXIgdGhhbiB0aGUgTWVkaWFTb3VyY2VQcml2YXRlLgorICAgICAgICBNb3ZlIHRoZSBN
ZWRpYVNvdXJjZVByaXZhdGVDbGllbnQgcG9pbnRlciB0byB0aGUgTWVkaWFTb3VyY2VQcml2YXRl
IGZyb20gdGhlIE1lZGlhUGxheWVyUHJpdmF0ZSwgc28KKyAgICAgICAgdGhlIE1lZGlhU291cmNl
J3MgZHVyYXRpb24gY2FuIGJlIHJldHJpZXZlZC4gIFdoaWxlIHdlJ3JlIGF0IGl0LCBkbyB0aGUg
c2FtZSB0aGluZyBmb3IgYnVmZmVyZWQuCisKKyAgICAgICAgKiBNb2R1bGVzL21lZGlhc291cmNl
L01lZGlhU291cmNlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhU291cmNlOjpNZWRpYVNv
dXJjZSk6IEluaXRpYWxpemUgbV9kdXJhdGlvbi4KKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhU291
cmNlOjpkdXJhdGlvbik6IFNpbXBsZSBhY2Nlc3Nvci4KKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlh
U291cmNlOjpzZXREdXJhdGlvbkludGVybmFsKTogQnJpbmcgJ2R1cmF0aW9uIGNoYW5nZSBhbGdv
cml0aG0nIHVwIHRvIHNwZWMuCisgICAgICAgIChXZWJDb3JlOjpNZWRpYVNvdXJjZTo6c2V0UmVh
ZHlTdGF0ZSk6IFJlc2V0IG1fZHVyYXRpb24gb24gY2xvc2UuCisgICAgICAgICogTW9kdWxlcy9t
ZWRpYXNvdXJjZS9NZWRpYVNvdXJjZS5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL01l
ZGlhU291cmNlUHJpdmF0ZS5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRh
dGlvbi9vYmpjL01lZGlhUGxheWVyUHJpdmF0ZU1lZGlhU291cmNlQVZGT2JqQy5tbToKKyAgICAg
ICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZU1lZGlhU291cmNlQVZGT2JqQzo6bG9hZCk6
IERvIG5vdCBjYWxsIHNldFByaXZhdGVBbmRPcGVuKCkuCisgICAgICAgIChXZWJDb3JlOjpNZWRp
YVBsYXllclByaXZhdGVNZWRpYVNvdXJjZUFWRk9iakM6OmR1cmF0aW9uRG91YmxlKTogUGFzcyB0
aHJvdWdoIHRvIE1lZGlhU291cmNlUHJpdmF0ZUFWRk9iakMuCisgICAgICAgIChXZWJDb3JlOjpN
ZWRpYVBsYXllclByaXZhdGVNZWRpYVNvdXJjZUFWRk9iakM6OmJ1ZmZlcmVkKTogRGl0dG8uCisg
ICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL29iamMvTWVkaWFTb3VyY2VQ
cml2YXRlQVZGT2JqQy5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlv
bi9vYmpjL01lZGlhU291cmNlUHJpdmF0ZUFWRk9iakMubW06CisgICAgICAgIChXZWJDb3JlOjpN
ZWRpYVNvdXJjZVByaXZhdGVBVkZPYmpDOjpjcmVhdGUpOiBDYWxsIHNldFByaXZhdGVBbmRPcGVu
KCkuCisgICAgICAgIChXZWJDb3JlOjpNZWRpYVNvdXJjZVByaXZhdGVBVkZPYmpDOjpNZWRpYVNv
dXJjZVByaXZhdGVBVkZPYmpDKTogU2V0IG1fY2xpZW50LgorICAgICAgICAoV2ViQ29yZTo6TWVk
aWFTb3VyY2VQcml2YXRlQVZGT2JqQzo6ZHVyYXRpb24pOiBQYXNzIHRocm91Z2ggdG8gTWVkaWFT
b3VyY2VQcml2YXRlQ2xpZW50LgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFTb3VyY2VQcml2YXRl
QVZGT2JqQzo6YnVmZmVyZWQpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhU291cmNl
UHJpdmF0ZUFWRk9iakM6OmR1cmF0aW9uQ2hhbmdlZCk6IFBhc3MgdGhyb3VnaCB0byBNZWRpYVBs
YXllclByaXZhdGVNZWRpYVNvdXJjZUFWRk9iakMuCisgICAgICAgIChXZWJDb3JlOjpNZWRpYVNv
dXJjZVByaXZhdGVBVkZPYmpDOjpzZXREdXJhdGlvbik6IERlbGV0ZWQuCisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL01lZGlhU291cmNlR1N0cmVhbWVyLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6Ok1lZGlhU291cmNlR1N0cmVhbWVyOjpvcGVuKTogUGFzcyBpbiBNZWRpYVNv
dXJjZVByaXZhdGVDbGllbnQuCisgICAgICAgIChXZWJDb3JlOjpNZWRpYVNvdXJjZUdTdHJlYW1l
cjo6TWVkaWFTb3VyY2VHU3RyZWFtZXIpOiBJbml0aWFsaXplIG1fbWVkaWFTb3VyY2UuCisgICAg
ICAgIChXZWJDb3JlOjpNZWRpYVNvdXJjZUdTdHJlYW1lcjo6ZHVyYXRpb25DaGFuZ2VkKTogUmV0
cmlldmUgdGhlIGR1cmF0aW9uIGZyb20gTWVkaWFTb3VyY2VQcml2YXRlQ2xpZW50LgorICAgICAg
ICAoV2ViQ29yZTo6TWVkaWFTb3VyY2VHU3RyZWFtZXI6Om1hcmtFbmRPZlN0cmVhbSk6IFJlbW92
ZSB1bm5lY3NzYXJ5IEFTU0VSVC4KKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhU291cmNlR1N0cmVh
bWVyOjp1bm1hcmtFbmRPZlN0cmVhbSk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFT
b3VyY2VHU3RyZWFtZXI6OnNldER1cmF0aW9uKTogRGVsZXRlZC4KKyAgICAgICAgKiBwbGF0Zm9y
bS9ncmFwaGljcy9nc3RyZWFtZXIvTWVkaWFTb3VyY2VHU3RyZWFtZXIuaDoKKyAgICAgICAgKiBw
bGF0Zm9ybS9tb2NrL21lZGlhc291cmNlL01vY2tNZWRpYVBsYXllck1lZGlhU291cmNlLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6Ok1vY2tNZWRpYVBsYXllck1lZGlhU291cmNlOjpsb2FkKTogRG8g
bm90IGNhbGwgc2V0UHJpdmF0ZUFuZE9wZW4oKS4KKyAgICAgICAgKFdlYkNvcmU6Ok1vY2tNZWRp
YVBsYXllck1lZGlhU291cmNlOjpidWZmZXJlZCk6IFBhc3MgdGhyb3VnaCB0byBNb2NrTWVkaWFT
b3VyY2VQcml2YXRlLgorICAgICAgICAoV2ViQ29yZTo6TW9ja01lZGlhUGxheWVyTWVkaWFTb3Vy
Y2U6OmR1cmF0aW9uRG91YmxlKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpNb2NrTWVkaWFQ
bGF5ZXJNZWRpYVNvdXJjZTo6YWR2YW5jZUN1cnJlbnRUaW1lKTogRGl0dG8uCisgICAgICAgICog
cGxhdGZvcm0vbW9jay9tZWRpYXNvdXJjZS9Nb2NrTWVkaWFTb3VyY2VQcml2YXRlLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6Ok1vY2tNZWRpYVNvdXJjZVByaXZhdGU6OmNyZWF0ZSk6IENhbGwgc2V0
UHJpdmF0ZUFuZE9wZW4oKS4KKyAgICAgICAgKFdlYkNvcmU6Ok1vY2tNZWRpYVNvdXJjZVByaXZh
dGU6Ok1vY2tNZWRpYVNvdXJjZVByaXZhdGUpOiBTZXQgbV9jbGllbnQuCisgICAgICAgIChXZWJD
b3JlOjpNb2NrTWVkaWFTb3VyY2VQcml2YXRlOjpkdXJhdGlvbik6IFBhc3MgdGhyb3VnaCB0byBN
ZWRpYVNvdXJjZVByaXZhdGVDbGllbnQuCisgICAgICAgIChXZWJDb3JlOjpNb2NrTWVkaWFTb3Vy
Y2VQcml2YXRlOjpidWZmZXJlZCk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6TW9ja01lZGlh
U291cmNlUHJpdmF0ZTo6ZHVyYXRpb25DaGFuZ2VkKTogUGFzcyB0aG9ydWdoIHRvIE1vY2tNZWRp
YVBsYXllck1lZGlhU291cmNlLgorICAgICAgICAoV2ViQ29yZTo6TW9ja01lZGlhU291cmNlUHJp
dmF0ZTo6c2V0RHVyYXRpb24pOiBEZWxldGVkLgorCisgICAgICAgIFJvdXRlIHNlZWtUb1RpbWUg
dGhyb3VnaCBNZWRpYVNvdXJjZSwgcmF0aGVyIHRoYW4gdGhyb3VnaCBNZWRpYVNvdXJjZVByaXZh
dGUsIHNvIHRoYXQKKyAgICAgICAgdGhlIHRpbWUgY2FuIGJlIGNvbXBhcmVkIGFnYWluc3QgdGhl
IGJ1ZmZlcmVkIHJhbmdlcywgYW5kIHRyaWdnZXIgdGhlIGRlbGF5IG9mIHRoZSBzZWVrCisgICAg
ICAgIG9wZXJhdGlvbiBpZiBuZWNlc3NhcnkuIEFkZCBhIHNlZWtUaW1lciB0byBNZWRpYVBsYXll
clByaXZhdGVNZWRpYVNvdXJjZUFWRk9iakMsIGFzIHRoaXMKKyAgICAgICAgZ3VhcmFudGVlcyB0
aGUgb3JkZXIgb2YgYXN5bmNocm9ub3VzIG9wZXJhdGlvbnMsIHJhdGhlciB0aGFuIGNhbGxPbk1h
aW5UaHJlYWQsIHdoaWNoIGNhbgorICAgICAgICBjYXVzZSBhc3luYyBvcGVyYXRpb25zIHRvIG9j
Y3VyIG91dCBvZiBvcmRlci4KKworICAgICAgICAqIE1vZHVsZXMvbWVkaWFzb3VyY2UvTWVkaWFT
b3VyY2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFTb3VyY2U6OnNlZWtUb1RpbWUpOiBC
cmluZyB1cCB0byBzcGVjLgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFTb3VyY2U6OmNvbXBsZXRl
U2Vlayk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFTb3VyY2U6Om1vbml0b3JTb3Vy
Y2VCdWZmZXJzKTogQ2FsbCBjb21wbGV0ZVNlZWsoKSB3aGVuIGFwcHJvcHJpYXRlLgorICAgICAg
ICAqIE1vZHVsZXMvbWVkaWFzb3VyY2UvU291cmNlQnVmZmVyLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OlNvdXJjZUJ1ZmZlcjo6c291cmNlQnVmZmVyUHJpdmF0ZVNlZWtUb1RpbWUpOiBEZWxldGVk
LgorICAgICAgICAoV2ViQ29yZTo6U291cmNlQnVmZmVyOjpzZWVrVG9UaW1lKTogUmVuYW1lZCBm
cm9tIHNvdXJjZUJ1ZmZlclByaXZhdGVTZWVrVG9UaW1lKCkuCisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3MvTWVkaWFTb3VyY2VQcml2YXRlLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3MvTWVkaWFTb3VyY2VQcml2YXRlQ2xpZW50Lmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3MvYXZmb3VuZGF0aW9uL29iamMvTWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFTb3VyY2VBVkZPYmpD
Lmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL29iamMvTWVkaWFQ
bGF5ZXJQcml2YXRlTWVkaWFTb3VyY2VBVkZPYmpDLm1tOgorICAgICAgICAoV2ViQ29yZTo6TWVk
aWFQbGF5ZXJQcml2YXRlTWVkaWFTb3VyY2VBVkZPYmpDOjpNZWRpYVBsYXllclByaXZhdGVNZWRp
YVNvdXJjZUFWRk9iakMpOiBBZGQgc2Vla1RpbWVyLiBPbmx5CisgICAgICAgICAgICBjYWxsIHRp
bWVDaGFuZ2VkKCkgaWYgbm8gbG9uZ2VyIHNlZWtpbmcsIHRoZXJlYnkgdHJpZ2dlcmluZyBhICdz
ZWVrZWQnIGV2ZW50LgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFT
b3VyY2VBVkZPYmpDOjp+TWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFTb3VyY2VBVkZPYmpDKTogQ2xl
YXIgbV9zZWVrVGltZXIuCisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVNZWRp
YVNvdXJjZUFWRk9iakM6OnNlZWtXaXRoVG9sZXJhbmNlKTogVXNlIG1fc2Vla1RpbWVyLgorICAg
ICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFTb3VyY2VBVkZPYmpDOjpzZWVr
VGltZXJGaXJlZCk6IENhbGwgc2Vla0ludGVybmFsLgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQ
bGF5ZXJQcml2YXRlTWVkaWFTb3VyY2VBVkZPYmpDOjpzZWVrSW50ZXJuYWwpOiBBZGQgbG9nZ2lu
Zy4KKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZU1lZGlhU291cmNlQVZGT2Jq
Qzo6d2FpdEZvclNlZWtDb21wbGV0ZWQpOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlh
UGxheWVyUHJpdmF0ZU1lZGlhU291cmNlQVZGT2JqQzo6c2Vla0NvbXBsZXRlZCk6IEFkZGVkOyB0
cmlnZ2VyICdzZWVrZWQnLgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlTWVk
aWFTb3VyY2VBVkZPYmpDOjpzZXRSZWFkeVN0YXRlKTogTm8gbG9uZ2VyIGF0dGVtcHQgdG8gZmlu
aXNoIHNlZWsgd2hlbgorICAgICAgICAgICAgcmVhZHlTdGF0ZSBjaGFuZ2VzIGhlcmU7IHRoaXMg
aGFzIGJlZW4gbW92ZWQgdXAgdG8gTWVkaWFTb3VyY2UuY3BwLgorICAgICAgICAqIHBsYXRmb3Jt
L2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9vYmpjL01lZGlhU291cmNlUHJpdmF0ZUFWRk9iakMuaDoK
KyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24vb2JqYy9NZWRpYVNvdXJj
ZVByaXZhdGVBVkZPYmpDLm1tOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFTb3VyY2VQcml2YXRl
QVZGT2JqQzo6d2FpdEZvclNlZWtDb21wbGV0ZWQpOiBQYXNzIHRocm91Z2ggdG8gTWVkaWFQbGF5
ZXJQcml2YXRlTWVkaWFTb3VyY2VBVkZPYmpDLgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFTb3Vy
Y2VQcml2YXRlQVZGT2JqQzo6c2Vla0NvbXBsZXRlZCk6IERpdHRvLgorICAgICAgICAoV2ViQ29y
ZTo6TWVkaWFTb3VyY2VQcml2YXRlQVZGT2JqQzo6c2Vla1RvVGltZSk6IFBhc3MgdGhyb3VnaCB0
byBNZWRpYVNvdXJjZVByaXZhdGVDbGllbnQuCisgICAgICAgIChXZWJDb3JlOjpNZWRpYVNvdXJj
ZVByaXZhdGVBVkZPYmpDOjpmYXN0U2Vla1RpbWVGb3JNZWRpYVRpbWUpOiBEaXR0by4KKyAgICAg
ICAgKiBwbGF0Zm9ybS9tb2NrL21lZGlhc291cmNlL01vY2tNZWRpYVBsYXllck1lZGlhU291cmNl
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Ok1vY2tNZWRpYVBsYXllck1lZGlhU291cmNlOjpNb2Nr
TWVkaWFQbGF5ZXJNZWRpYVNvdXJjZSk6IEluaXRpYWxpemUgbV9zZWVrQ29tcGxldGVkLgorICAg
ICAgICAoV2ViQ29yZTo6TW9ja01lZGlhUGxheWVyTWVkaWFTb3VyY2U6OnNlZWtpbmcpOiBDaGVj
ayBmb3IgYW4gdW5jb21wbGV0ZWQgc2VlayBvcGVyYXRpb24uIAorICAgICAgICAoV2ViQ29yZTo6
TW9ja01lZGlhUGxheWVyTWVkaWFTb3VyY2U6OnNlZWtXaXRoVG9sZXJhbmNlKTogRGl0dG8uCisg
ICAgICAgIChXZWJDb3JlOjpNb2NrTWVkaWFQbGF5ZXJNZWRpYVNvdXJjZTo6d2FpdEZvclNlZWtD
b21wbGV0ZWQpOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6Ok1vY2tNZWRpYVBsYXllck1lZGlh
U291cmNlOjpzZWVrQ29tcGxldGVkKTogQWRkZWQ7IHRyaWdnZXIgJ3NlZWtlZCcuCisgICAgICAg
ICogcGxhdGZvcm0vbW9jay9tZWRpYXNvdXJjZS9Nb2NrTWVkaWFQbGF5ZXJNZWRpYVNvdXJjZS5o
OgorICAgICAgICAqIHBsYXRmb3JtL21vY2svbWVkaWFzb3VyY2UvTW9ja01lZGlhU291cmNlUHJp
dmF0ZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpNb2NrTWVkaWFTb3VyY2VQcml2YXRlOjp3YWl0
Rm9yU2Vla0NvbXBsZXRlZCk6IFBhc3MgdGhyb3VnaCB0byBNb2NrTWVkaWFQbGF5ZXJNZWRpYVNv
dXJjZS4KKyAgICAgICAgKFdlYkNvcmU6Ok1vY2tNZWRpYVNvdXJjZVByaXZhdGU6OnNlZWtDb21w
bGV0ZWQpOiBEaXR0by4KKyAgICAgICAgKiBwbGF0Zm9ybS9tb2NrL21lZGlhc291cmNlL01vY2tN
ZWRpYVNvdXJjZVByaXZhdGUuaDoKKworICAgICAgICBEcml2ZS1ieSBmaXhlcy4KKworICAgICAg
ICAqIE1vZHVsZXMvbWVkaWFzb3VyY2UvTWVkaWFTb3VyY2UuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6TWVkaWFTb3VyY2U6OnN0cmVhbUVuZGVkV2l0aEVycm9yKTogUmUtb3JkZXIgdGhlIHN0ZXBz
IGluIHN0cmVhbUVuZGVkV2l0aEVycm9yKCkKKyAgICAgICAgICAgIHRvIGF2b2lkIHRoZSBNZWRp
YVNvdXJjZSBiZWluZyBjbG9zZWQgYW5kIHJlLW9wZW5lZCBieSB0aGUgcmVzdWx0aW5nIGR1cmF0
aW9uIGNoYW5nZQorICAgICAgICAgICAgb3BlcmF0aW9uLgorICAgICAgICAqIE1vZHVsZXMvbWVk
aWFzb3VyY2UvTWVkaWFTb3VyY2UuaDoKKyAgICAgICAgKiBNb2R1bGVzL21lZGlhc291cmNlL1Nv
dXJjZUJ1ZmZlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTb3VyY2VCdWZmZXI6OnJlbW92ZSk6
IEFkZGVkIGxvZ2dpbmcuCisgICAgICAgIChXZWJDb3JlOjpTb3VyY2VCdWZmZXI6OnJlbW92ZUNv
ZGVkRnJhbWVzKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpTb3VyY2VCdWZmZXI6Omhhc0Z1
dHVyZVRpbWUpOiBTd2FwIGFuIEFTU0VSVCBmb3IgYW4gZWFybHktcmV0dXJuOyBpdCdzIHBvc3Np
YmxlCisgICAgICAgICAgICBmb3IgY3VycmVudFRpbWUoKSB0byBiZSBvdXRzaWRlIG9mIGEgYnVm
ZmVyZWQgYXJlYS4KKyAgICAgICAgKiBNb2R1bGVzL21lZGlhc291cmNlL1NvdXJjZUJ1ZmZlci5o
OgorICAgICAgICAqIGh0bWwvSFRNTE1lZGlhRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpIVE1MTWVkaWFFbGVtZW50OjpwYXJzZUF0dHJpYnV0ZSk6IERvIG5vdCBpc3N1ZSBhbiBhZGRp
dGlvbmFsICd0aW1ldXBkYXRlJyBldmVudAorICAgICAgICAgICAgYWZ0ZXIgZmluaXNoU2Vlaygp
IGlzc3VlcyBvbmUgb2YgaXRzIG93bi4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9hdmZv
dW5kYXRpb24vb2JqYy9Tb3VyY2VCdWZmZXJQcml2YXRlQVZGT2JqQy5tbToKKyAgICAgICAgKFdl
YkNvcmU6Omdsb2JhbERhdGFQYXJzZXJRdWV1ZSk6IEFsbG93IHBhcnNpbmcgb3BlcmF0aW9ucyB0
byBoYXBwZW4gY29uY3VycmVudGx5IG9uCisgICAgICAgICAgICBiYWNrZ3JvdW5kIHF1ZXVlcy4K
KworMjAxNC0wNy0xMSAgSmVyIE5vYmxlICA8amVyLm5vYmxlQGFwcGxlLmNvbT4KKwogICAgICAg
ICBbTVNFXSBTZXBhcmF0ZSBNZWRpYVNvdXJjZSBsb2dnaW5nIGludG8gaXRzIG93biBsb2cgY2hh
bm5lbAogICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTM0
ODA5CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzb3VyY2UvTWVk
aWFTb3VyY2UuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXNvdXJjZS9NZWRpYVNv
dXJjZS5jcHAKaW5kZXggNmVhMDI5NTA2NWMyM2IzMGU5MWMzMDM5ZjlkNjQyOGE4NDFhZmU5My4u
MjEzM2U1YzUzYmE1MWI0ZTFjZWFjM2JkNmY1OTkyYjk0M2M0YzQ0ZCAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXNvdXJjZS9NZWRpYVNvdXJjZS5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXNvdXJjZS9NZWRpYVNvdXJjZS5jcHAKQEAgLTc2LDYg
Kzc2LDggQEAgUGFzc1JlZlB0cjxNZWRpYVNvdXJjZT4gTWVkaWFTb3VyY2U6OmNyZWF0ZShTY3Jp
cHRFeGVjdXRpb25Db250ZXh0JiBjb250ZXh0KQogTWVkaWFTb3VyY2U6Ok1lZGlhU291cmNlKFNj
cmlwdEV4ZWN1dGlvbkNvbnRleHQmIGNvbnRleHQpCiAgICAgOiBBY3RpdmVET01PYmplY3QoJmNv
bnRleHQpCiAgICAgLCBtX21lZGlhRWxlbWVudCgwKQorICAgICwgbV9kdXJhdGlvbihzdGQ6Om51
bWVyaWNfbGltaXRzPGRvdWJsZT46OnF1aWV0X05hTigpKQorICAgICwgbV9wZW5kaW5nU2Vla1Rp
bWUoTWVkaWFUaW1lOjppbnZhbGlkVGltZSgpKQogICAgICwgbV9yZWFkeVN0YXRlKGNsb3NlZEtl
eXdvcmQoKSkKICAgICAsIG1fYXN5bmNFdmVudFF1ZXVlKCp0aGlzKQogewpAQCAtMTI4LDcgKzEz
MCw3IEBAIHZvaWQgTWVkaWFTb3VyY2U6OnJlbW92ZWRGcm9tUmVnaXN0cnkoKQogCiBkb3VibGUg
TWVkaWFTb3VyY2U6OmR1cmF0aW9uKCkgY29uc3QKIHsKLSAgICByZXR1cm4gaXNDbG9zZWQoKSA/
IHN0ZDo6bnVtZXJpY19saW1pdHM8ZmxvYXQ+OjpxdWlldF9OYU4oKSA6IG1fcHJpdmF0ZS0+ZHVy
YXRpb24oKS50b0RvdWJsZSgpOworICAgIHJldHVybiBtX2R1cmF0aW9uOwogfQogCiBkb3VibGUg
TWVkaWFTb3VyY2U6OmN1cnJlbnRUaW1lKCkgY29uc3QKQEAgLTE4MCw2ICsxODIsNjAgQEAgc3Rk
Ojp1bmlxdWVfcHRyPFBsYXRmb3JtVGltZVJhbmdlcz4gTWVkaWFTb3VyY2U6OmJ1ZmZlcmVkKCkg
Y29uc3QKICAgICByZXR1cm4gUGxhdGZvcm1UaW1lUmFuZ2VzOjpjcmVhdGUoaW50ZXJzZWN0aW9u
UmFuZ2VzLT5yYW5nZXMoKSk7CiB9CiAKK3ZvaWQgTWVkaWFTb3VyY2U6OnNlZWtUb1RpbWUoY29u
c3QgTWVkaWFUaW1lJiB0aW1lKQoreworICAgIC8vIDIuNC4zIFNlZWtpbmcKKyAgICAvLyBodHRw
czovL2R2Y3MudzMub3JnL2hnL2h0bWwtbWVkaWEvcmF3LWZpbGUvdGlwL21lZGlhLXNvdXJjZS9t
ZWRpYS1zb3VyY2UuaHRtbCNtZWRpYXNvdXJjZS1zZWVraW5nCisKKyAgICBtX3BlbmRpbmdTZWVr
VGltZSA9IHRpbWU7CisKKyAgICAvLyBSdW4gdGhlIGZvbGxvd2luZyBzdGVwcyBhcyBwYXJ0IG9m
IHRoZSAiV2FpdCB1bnRpbCB0aGUgdXNlciBhZ2VudCBoYXMgZXN0YWJsaXNoZWQgd2hldGhlciBv
ciBub3QgdGhlCisgICAgLy8gbWVkaWEgZGF0YSBmb3IgdGhlIG5ldyBwbGF5YmFjayBwb3NpdGlv
biBpcyBhdmFpbGFibGUsIGFuZCwgaWYgaXQgaXMsIHVudGlsIGl0IGhhcyBkZWNvZGVkIGVub3Vn
aCBkYXRhCisgICAgLy8gdG8gcGxheSBiYWNrIHRoYXQgcG9zaXRpb24iIHN0ZXAgb2YgdGhlIHNl
ZWsgYWxnb3JpdGhtOgorICAgIC8vIDEuIFRoZSBtZWRpYSBlbGVtZW50IGxvb2tzIGZvciBtZWRp
YSBzZWdtZW50cyBjb250YWluaW5nIHRoZSBuZXcgcGxheWJhY2sgcG9zaXRpb24gaW4gZWFjaCBT
b3VyY2VCdWZmZXIKKyAgICAvLyBvYmplY3QgaW4gYWN0aXZlU291cmNlQnVmZmVycy4KKyAgICBm
b3IgKGF1dG8mIHNvdXJjZUJ1ZmZlciA6ICptX2FjdGl2ZVNvdXJjZUJ1ZmZlcnMpIHsKKyAgICAg
ICAgLy8g4oazIElmIG9uZSBvciBtb3JlIG9mIHRoZSBvYmplY3RzIGluIGFjdGl2ZVNvdXJjZUJ1
ZmZlcnMgaXMgbWlzc2luZyBtZWRpYSBzZWdtZW50cyBmb3IgdGhlIG5ldworICAgICAgICAvLyBw
bGF5YmFjayBwb3NpdGlvbgorICAgICAgICBpZiAoIXNvdXJjZUJ1ZmZlci0+YnVmZmVyZWQoKS0+
cmFuZ2VzKCkuY29udGFpbih0aW1lKSkgeworICAgICAgICAgICAgLy8gMS4xIFNldCB0aGUgSFRN
TE1lZGlhRWxlbWVudC5yZWFkeVN0YXRlIGF0dHJpYnV0ZSB0byBIQVZFX01FVEFEQVRBLgorICAg
ICAgICAgICAgbV9wcml2YXRlLT5zZXRSZWFkeVN0YXRlKE1lZGlhUGxheWVyOjpIYXZlTWV0YWRh
dGEpOworCisgICAgICAgICAgICAvLyAxLjIgVGhlIG1lZGlhIGVsZW1lbnQgd2FpdHMgdW50aWwg
YW4gYXBwZW5kQnVmZmVyKCkgb3IgYW4gYXBwZW5kU3RyZWFtKCkgY2FsbCBjYXVzZXMgdGhlIGNv
ZGVkCisgICAgICAgICAgICAvLyBmcmFtZSBwcm9jZXNzaW5nIGFsZ29yaXRobSB0byBzZXQgdGhl
IEhUTUxNZWRpYUVsZW1lbnQucmVhZHlTdGF0ZSBhdHRyaWJ1dGUgdG8gYSB2YWx1ZSBncmVhdGVy
CisgICAgICAgICAgICAvLyB0aGFuIEhBVkVfTUVUQURBVEEuCisgICAgICAgICAgICBMT0coTWVk
aWFTb3VyY2UsICJNZWRpYVNvdXJjZTo6c2Vla1RvVGltZSglcCkgLSB3YWl0Rm9yU2Vla0NvbXBs
ZXRlZCgpIiwgdGhpcyk7CisgICAgICAgICAgICBtX3ByaXZhdGUtPndhaXRGb3JTZWVrQ29tcGxl
dGVkKCk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgLy8g4oazIE90
aGVyd2lzZQorICAgICAgICAvLyBDb250aW51ZQorICAgIH0KKworICAgIGNvbXBsZXRlU2Vlaygp
OworfQorCit2b2lkIE1lZGlhU291cmNlOjpjb21wbGV0ZVNlZWsoKQoreworICAgIC8vIDIuNC4z
IFNlZWtpbmcsIGN0ZC4KKyAgICAvLyBodHRwczovL2R2Y3MudzMub3JnL2hnL2h0bWwtbWVkaWEv
cmF3LWZpbGUvdGlwL21lZGlhLXNvdXJjZS9tZWRpYS1zb3VyY2UuaHRtbCNtZWRpYXNvdXJjZS1z
ZWVraW5nCisKKyAgICBBU1NFUlQobV9wZW5kaW5nU2Vla1RpbWUuaXNWYWxpZCgpKTsKKworICAg
IC8vIDIuIFRoZSBtZWRpYSBlbGVtZW50IHJlc2V0cyBhbGwgZGVjb2RlcnMgYW5kIGluaXRpYWxp
emVzIGVhY2ggb25lIHdpdGggZGF0YSBmcm9tIHRoZSBhcHByb3ByaWF0ZQorICAgIC8vIGluaXRp
YWxpemF0aW9uIHNlZ21lbnQuCisgICAgLy8gMy4gVGhlIG1lZGlhIGVsZW1lbnQgZmVlZHMgY29k
ZWQgZnJhbWVzIGZyb20gdGhlIGFjdGl2ZSB0cmFjayBidWZmZXJzIGludG8gdGhlIGRlY29kZXJz
IHN0YXJ0aW5nCisgICAgLy8gd2l0aCB0aGUgY2xvc2VzdCByYW5kb20gYWNjZXNzIHBvaW50IGJl
Zm9yZSB0aGUgbmV3IHBsYXliYWNrIHBvc2l0aW9uLgorICAgIGZvciAoYXV0byYgc291cmNlQnVm
ZmVyIDogKm1fYWN0aXZlU291cmNlQnVmZmVycykKKyAgICAgICAgc291cmNlQnVmZmVyLT5zZWVr
VG9UaW1lKG1fcGVuZGluZ1NlZWtUaW1lKTsKKworICAgIC8vIDQuIFJlc3VtZSB0aGUgc2VlayBh
bGdvcml0aG0gYXQgdGhlICJBd2FpdCBhIHN0YWJsZSBzdGF0ZSIgc3RlcC4KKyAgICBtX3ByaXZh
dGUtPnNlZWtDb21wbGV0ZWQoKTsKKworICAgIG1fcGVuZGluZ1NlZWtUaW1lID0gTWVkaWFUaW1l
OjppbnZhbGlkVGltZSgpOworICAgIG1vbml0b3JTb3VyY2VCdWZmZXJzKCk7Cit9CisKIHZvaWQg
TWVkaWFTb3VyY2U6Om1vbml0b3JTb3VyY2VCdWZmZXJzKCkKIHsKICAgICAvLyAyLjQuNCBTb3Vy
Y2VCdWZmZXIgTW9uaXRvcmluZwpAQCAtMjE3LDYgKzI3Myw5IEBAIHZvaWQgTWVkaWFTb3VyY2U6
Om1vbml0b3JTb3VyY2VCdWZmZXJzKCkKICAgICAgICAgLy8gMy4gUGxheWJhY2sgbWF5IHJlc3Vt
ZSBhdCB0aGlzIHBvaW50IGlmIGl0IHdhcyBwcmV2aW91c2x5IHN1c3BlbmRlZCBieSBhIHRyYW5z
aXRpb24gdG8gSEFWRV9DVVJSRU5UX0RBVEEuCiAgICAgICAgIG1fcHJpdmF0ZS0+c2V0UmVhZHlT
dGF0ZShNZWRpYVBsYXllcjo6SGF2ZUVub3VnaERhdGEpOwogCisgICAgICAgIGlmIChtX3BlbmRp
bmdTZWVrVGltZS5pc1ZhbGlkKCkpCisgICAgICAgICAgICBjb21wbGV0ZVNlZWsoKTsKKwogICAg
ICAgICAvLyA0LiBBYm9ydCB0aGVzZSBzdGVwcy4KICAgICAgICAgcmV0dXJuOwogICAgIH0KQEAg
LTIzMSw2ICsyOTAsOSBAQCB2b2lkIE1lZGlhU291cmNlOjptb25pdG9yU291cmNlQnVmZmVycygp
CiAgICAgICAgIC8vIDMuIFBsYXliYWNrIG1heSByZXN1bWUgYXQgdGhpcyBwb2ludCBpZiBpdCB3
YXMgcHJldmlvdXNseSBzdXNwZW5kZWQgYnkgYSB0cmFuc2l0aW9uIHRvIEhBVkVfQ1VSUkVOVF9E
QVRBLgogICAgICAgICBtX3ByaXZhdGUtPnNldFJlYWR5U3RhdGUoTWVkaWFQbGF5ZXI6OkhhdmVG
dXR1cmVEYXRhKTsKIAorICAgICAgICBpZiAobV9wZW5kaW5nU2Vla1RpbWUuaXNWYWxpZCgpKQor
ICAgICAgICAgICAgY29tcGxldGVTZWVrKCk7CisKICAgICAgICAgLy8gNC4gQWJvcnQgdGhlc2Ug
c3RlcHMuCiAgICAgICAgIHJldHVybjsKICAgICB9CkBAIC0yNDYsNyArMzA4LDEwIEBAIHZvaWQg
TWVkaWFTb3VyY2U6Om1vbml0b3JTb3VyY2VCdWZmZXJzKCkKICAgICAvLyAzLiBQbGF5YmFjayBp
cyBzdXNwZW5kZWQgYXQgdGhpcyBwb2ludCBzaW5jZSB0aGUgbWVkaWEgZWxlbWVudCBkb2Vzbid0
IGhhdmUgZW5vdWdoIGRhdGEgdG8KICAgICAvLyBhZHZhbmNlIHRoZSBtZWRpYSB0aW1lbGluZS4K
ICAgICBtX3ByaXZhdGUtPnNldFJlYWR5U3RhdGUoTWVkaWFQbGF5ZXI6OkhhdmVDdXJyZW50RGF0
YSk7Ci0gICAgCisKKyAgICBpZiAobV9wZW5kaW5nU2Vla1RpbWUuaXNWYWxpZCgpKQorICAgICAg
ICBjb21wbGV0ZVNlZWsoKTsKKwogICAgIC8vIDQuIEFib3J0IHRoZXNlIHN0ZXBzLgogfQogCkBA
IC0yODMsOSArMzQ4LDM3IEBAIHZvaWQgTWVkaWFTb3VyY2U6OnNldER1cmF0aW9uKGRvdWJsZSBk
dXJhdGlvbiwgRXhjZXB0aW9uQ29kZSYgZWMpCiAKIHZvaWQgTWVkaWFTb3VyY2U6OnNldER1cmF0
aW9uSW50ZXJuYWwoZG91YmxlIGR1cmF0aW9uKQogewotICAgIG1fcHJpdmF0ZS0+c2V0RHVyYXRp
b24oTWVkaWFUaW1lOjpjcmVhdGVXaXRoRG91YmxlKGR1cmF0aW9uKSk7Ci19CisgICAgLy8gRHVy
YXRpb24gQ2hhbmdlIEFsZ29yaXRobQorICAgIC8vIGh0dHBzOi8vZHZjcy53My5vcmcvaGcvaHRt
bC1tZWRpYS9yYXctZmlsZS90aXAvbWVkaWEtc291cmNlL21lZGlhLXNvdXJjZS5odG1sI2R1cmF0
aW9uLWNoYW5nZS1hbGdvcml0aG0KKworICAgIC8vIDEuIElmIHRoZSBjdXJyZW50IHZhbHVlIG9m
IGR1cmF0aW9uIGlzIGVxdWFsIHRvIG5ldyBkdXJhdGlvbiwgdGhlbiByZXR1cm4uCisgICAgaWYg
KGR1cmF0aW9uID09IG1fZHVyYXRpb24pCisgICAgICAgIHJldHVybjsKKworICAgIC8vIDIuIFNl
dCBvbGQgZHVyYXRpb24gdG8gdGhlIGN1cnJlbnQgdmFsdWUgb2YgZHVyYXRpb24uCisgICAgZG91
YmxlIG9sZER1cmF0aW9uID0gbV9kdXJhdGlvbjsKKworICAgIC8vIDMuIFVwZGF0ZSBkdXJhdGlv
biB0byBuZXcgZHVyYXRpb24uCisgICAgbV9kdXJhdGlvbiA9IGR1cmF0aW9uOworCisgICAgLy8g
NC4gSWYgdGhlIG5ldyBkdXJhdGlvbiBpcyBsZXNzIHRoYW4gb2xkIGR1cmF0aW9uLCB0aGVuIGNh
bGwgcmVtb3ZlKG5ldyBkdXJhdGlvbiwgb2xkIGR1cmF0aW9uKQorICAgIC8vIG9uIGFsbCBvYmpl
Y3RzIGluIHNvdXJjZUJ1ZmZlcnMuCisgICAgaWYgKCFpc25hbihvbGREdXJhdGlvbikgJiYgZHVy
YXRpb24gPCBvbGREdXJhdGlvbikgeworICAgICAgICBmb3IgKGF1dG8mIHNvdXJjZUJ1ZmZlciA6
ICptX3NvdXJjZUJ1ZmZlcnMpCisgICAgICAgICAgICBzb3VyY2VCdWZmZXItPnJlbW92ZShkdXJh
dGlvbiwgb2xkRHVyYXRpb24sIElHTk9SRV9FWENFUFRJT04pOworICAgIH0KIAorICAgIC8vIDUu
IElmIGEgdXNlciBhZ2VudCBpcyB1bmFibGUgdG8gcGFydGlhbGx5IHJlbmRlciBhdWRpbyBmcmFt
ZXMgb3IgdGV4dCBjdWVzIHRoYXQgc3RhcnQgYmVmb3JlIGFuZCBlbmQgYWZ0ZXIgdGhlCisgICAg
Ly8gZHVyYXRpb24sIHRoZW4gcnVuIHRoZSBmb2xsb3dpbmcgc3RlcHM6CisgICAgLy8gNS4xIFVw
ZGF0ZSBuZXcgZHVyYXRpb24gdG8gdGhlIGhpZ2hlc3QgZW5kIHRpbWUgcmVwb3J0ZWQgYnkgdGhl
IGJ1ZmZlcmVkIGF0dHJpYnV0ZSBhY3Jvc3MgYWxsIFNvdXJjZUJ1ZmZlciBvYmplY3RzCisgICAg
Ly8gaW4gc291cmNlQnVmZmVycy4KKyAgICAvLyA1LjIgVXBkYXRlIGR1cmF0aW9uIHRvIG5ldyBk
dXJhdGlvbi4KKyAgICAvLyBOT1RFOiBBc3N1bWUgVUEgaXMgYWJsZSB0byBwYXJ0aWFsbHkgcmVu
ZGVyIGF1ZGlvIGZyYW1lcy4KKworICAgIC8vIDYuIFVwZGF0ZSB0aGUgbWVkaWEgY29udHJvbGxl
ciBkdXJhdGlvbiB0byBuZXcgZHVyYXRpb24gYW5kIHJ1biB0aGUgSFRNTE1lZGlhRWxlbWVudCBk
dXJhdGlvbiBjaGFuZ2UgYWxnb3JpdGhtLgorICAgIExPRyhNZWRpYVNvdXJjZSwgIk1lZGlhU291
cmNlOjpzZXREdXJhdGlvbkludGVybmFsKCVwKSAtIGR1cmF0aW9uKCVnKSIsIHRoaXMsIGR1cmF0
aW9uKTsKKyAgICBtX3ByaXZhdGUtPmR1cmF0aW9uQ2hhbmdlZCgpOworfQogCiB2b2lkIE1lZGlh
U291cmNlOjpzZXRSZWFkeVN0YXRlKGNvbnN0IEF0b21pY1N0cmluZyYgc3RhdGUpCiB7CkBAIC0y
OTcsNiArMzkwLDcgQEAgdm9pZCBNZWRpYVNvdXJjZTo6c2V0UmVhZHlTdGF0ZShjb25zdCBBdG9t
aWNTdHJpbmcmIHN0YXRlKQogICAgIGlmIChzdGF0ZSA9PSBjbG9zZWRLZXl3b3JkKCkpIHsKICAg
ICAgICAgbV9wcml2YXRlLmNsZWFyKCk7CiAgICAgICAgIG1fbWVkaWFFbGVtZW50ID0gMDsKKyAg
ICAgICAgbV9kdXJhdGlvbiA9IHN0ZDo6bnVtZXJpY19saW1pdHM8ZG91YmxlPjo6cXVpZXRfTmFO
KCk7CiAgICAgfQogCiAgICAgaWYgKG9sZFN0YXRlID09IHN0YXRlKQpAQCAtMzQ0LDE5ICs0Mzgs
MTggQEAgdm9pZCBNZWRpYVNvdXJjZTo6c3RyZWFtRW5kZWRXaXRoRXJyb3IoY29uc3QgQXRvbWlj
U3RyaW5nJiBlcnJvciwgRXhjZXB0aW9uQ29kZSYKICAgICBERVBSRUNBVEVEX0RFRklORV9TVEFU
SUNfTE9DQUwoY29uc3QgQXRvbWljU3RyaW5nLCBkZWNvZGUsICgiZGVjb2RlIiwgQXRvbWljU3Ry
aW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCkpOwogCiAgICAgLy8gMi40LjcgaHR0cHM6Ly9kdmNz
LnczLm9yZy9oZy9odG1sLW1lZGlhL3Jhdy1maWxlL3RpcC9tZWRpYS1zb3VyY2UvbWVkaWEtc291
cmNlLmh0bWwjZW5kLW9mLXN0cmVhbS1hbGdvcml0aG0KLSAgICAvLyAxLiBDaGFuZ2UgdGhlIHJl
YWR5U3RhdGUgYXR0cmlidXRlIHZhbHVlIHRvICJlbmRlZCIuCi0gICAgLy8gMi4gUXVldWUgYSB0
YXNrIHRvIGZpcmUgYSBzaW1wbGUgZXZlbnQgbmFtZWQgc291cmNlZW5kZWQgYXQgdGhlIE1lZGlh
U291cmNlLgotICAgIHNldFJlYWR5U3RhdGUoZW5kZWRLZXl3b3JkKCkpOwogCiAgICAgLy8gMy4K
ICAgICBpZiAoZXJyb3IuaXNFbXB0eSgpKSB7CiAgICAgICAgIC8vIOKGsyBJZiBlcnJvciBpcyBu
b3Qgc2V0LCBpcyBudWxsLCBvciBpcyBhbiBlbXB0eSBzdHJpbmcKLSAgICAgICAgLy8gMS4gUnVu
IHRoZSBkdXJhdGlvbiBjaGFuZ2UgYWxnb3JpdGhtIHdpdGggbmV3IGR1cmF0aW9uIHNldCB0byB0
aGUgaGlnaGVzdCBlbmQgdGltZXN0YW1wCi0gICAgICAgIC8vIGFjcm9zcyBhbGwgU291cmNlQnVm
ZmVyIG9iamVjdHMgaW4gc291cmNlQnVmZmVycy4KLSAgICAgICAgTWVkaWFUaW1lIG1heEVuZFRp
bWVzdGFtcDsKLSAgICAgICAgZm9yIChhdXRvIGl0ID0gbV9zb3VyY2VCdWZmZXJzLT5iZWdpbigp
LCBlbmQgPSBtX3NvdXJjZUJ1ZmZlcnMtPmVuZCgpOyBpdCAhPSBlbmQ7ICsraXQpCi0gICAgICAg
ICAgICBtYXhFbmRUaW1lc3RhbXAgPSBzdGQ6Om1heCgoKml0KS0+aGlnaGVzdFByZXNlbnRhdGlv
bkVuZFRpbWVzdGFtcCgpLCBtYXhFbmRUaW1lc3RhbXApOwotICAgICAgICBtX3ByaXZhdGUtPnNl
dER1cmF0aW9uKG1heEVuZFRpbWVzdGFtcCk7CisgICAgICAgIC8vIDEuIFJ1biB0aGUgZHVyYXRp
b24gY2hhbmdlIGFsZ29yaXRobSB3aXRoIG5ldyBkdXJhdGlvbiBzZXQgdG8gdGhlIGhpZ2hlc3Qg
ZW5kIHRpbWUgcmVwb3J0ZWQgYnkKKyAgICAgICAgLy8gdGhlIGJ1ZmZlcmVkIGF0dHJpYnV0ZSBh
Y3Jvc3MgYWxsIFNvdXJjZUJ1ZmZlciBvYmplY3RzIGluIHNvdXJjZUJ1ZmZlcnMuCisgICAgICAg
IGRvdWJsZSBtYXhFbmRUaW1lID0gMDsKKyAgICAgICAgZm9yIChhdXRvJiBzb3VyY2VCdWZmZXIg
OiAqbV9zb3VyY2VCdWZmZXJzKSB7CisgICAgICAgICAgICBpZiAoYXV0byBsZW5ndGggPSBzb3Vy
Y2VCdWZmZXItPmJ1ZmZlcmVkKCktPmxlbmd0aCgpKQorICAgICAgICAgICAgICAgIG1heEVuZFRp
bWUgPSBzdGQ6Om1heChzb3VyY2VCdWZmZXItPmJ1ZmZlcmVkKCktPmVuZChsZW5ndGggLSAxLCBJ
R05PUkVfRVhDRVBUSU9OKSwgbWF4RW5kVGltZSk7CisgICAgICAgIH0KKyAgICAgICAgc2V0RHVy
YXRpb25JbnRlcm5hbChtYXhFbmRUaW1lKTsKIAogICAgICAgICAvLyAyLiBOb3RpZnkgdGhlIG1l
ZGlhIGVsZW1lbnQgdGhhdCBpdCBub3cgaGFzIGFsbCBvZiB0aGUgbWVkaWEgZGF0YS4KICAgICAg
ICAgbV9wcml2YXRlLT5tYXJrRW5kT2ZTdHJlYW0oTWVkaWFTb3VyY2VQcml2YXRlOjpFb3NOb0Vy
cm9yKTsKQEAgLTM5Niw2ICs0ODksMTMgQEAgdm9pZCBNZWRpYVNvdXJjZTo6c3RyZWFtRW5kZWRX
aXRoRXJyb3IoY29uc3QgQXRvbWljU3RyaW5nJiBlcnJvciwgRXhjZXB0aW9uQ29kZSYKICAgICAg
ICAgLy8gICBUaHJvdyBhbiBJTlZBTElEX0FDQ0VTU19FUlIgZXhjZXB0aW9uLgogICAgICAgICBl
YyA9IElOVkFMSURfQUNDRVNTX0VSUjsKICAgICB9CisKKyAgICAvLyBOT1RFOiBEbyBzdGVwcyAx
ICYgMiBhZnRlciBzdGVwIDMgdG8gYXZvaWQgdGhlIE1lZGlhU291cmNlJ3MgcmVhZHlTdGF0ZSBi
ZWluZyByZS1vcGVuZWQgYnkgYQorICAgIC8vIHJlbW92ZSgpIG9wZXJhdGlvbiByZXN1bHRpbmcg
ZnJvbSBhIGR1cmF0aW9uIGNoYW5nZS4KKyAgICAvLyBGSVhNRTogUmUtbnVtYmVyIG9yIHVwZGF0
ZSB0aGlzIHNlY3Rpb24gb25jZSA8aHR0cHM6Ly93d3cudzMub3JnL0J1Z3MvUHVibGljL3Nob3df
YnVnLmNnaT9pZD0yNjMxNj4gaXMgcmVzb2x2ZWQuCisgICAgLy8gMS4gQ2hhbmdlIHRoZSByZWFk
eVN0YXRlIGF0dHJpYnV0ZSB2YWx1ZSB0byAiZW5kZWQiLgorICAgIC8vIDIuIFF1ZXVlIGEgdGFz
ayB0byBmaXJlIGEgc2ltcGxlIGV2ZW50IG5hbWVkIHNvdXJjZWVuZGVkIGF0IHRoZSBNZWRpYVNv
dXJjZS4KKyAgICBzZXRSZWFkeVN0YXRlKGVuZGVkS2V5d29yZCgpKTsKIH0KIAogU291cmNlQnVm
ZmVyKiBNZWRpYVNvdXJjZTo6YWRkU291cmNlQnVmZmVyKGNvbnN0IFN0cmluZyYgdHlwZSwgRXhj
ZXB0aW9uQ29kZSYgZWMpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlh
c291cmNlL01lZGlhU291cmNlLmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc291cmNl
L01lZGlhU291cmNlLmgKaW5kZXggNDA3ZTg4NzE4ODVmNzQyOGNiMTRhYTI5N2VmMTM0YmJkYTQ3
YjEyNS4uNzM4OWRiMTQzNDUzNjkzOTBlYmEwNWI4OWQ0YWQ4MmE1NzA2NmExOSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXNvdXJjZS9NZWRpYVNvdXJjZS5oCisrKyBi
L1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzb3VyY2UvTWVkaWFTb3VyY2UuaApAQCAtNzIs
MTEgKzcyLDEzIEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgc2V0UHJpdmF0ZUFuZE9wZW4o
UGFzc1JlZjxNZWRpYVNvdXJjZVByaXZhdGU+KSBvdmVycmlkZTsKICAgICB2aXJ0dWFsIGRvdWJs
ZSBkdXJhdGlvbigpIGNvbnN0IG92ZXJyaWRlOwogICAgIHZpcnR1YWwgc3RkOjp1bmlxdWVfcHRy
PFBsYXRmb3JtVGltZVJhbmdlcz4gYnVmZmVyZWQoKSBjb25zdCBvdmVycmlkZTsKKyAgICB2aXJ0
dWFsIHZvaWQgc2Vla1RvVGltZShjb25zdCBNZWRpYVRpbWUmKSBvdmVycmlkZTsKIAogICAgIGJv
b2wgYXR0YWNoVG9FbGVtZW50KEhUTUxNZWRpYUVsZW1lbnQqKTsKICAgICB2b2lkIGNsb3NlKCk7
CiAgICAgYm9vbCBpc0Nsb3NlZCgpIGNvbnN0OwogICAgIHZvaWQgbW9uaXRvclNvdXJjZUJ1ZmZl
cnMoKTsKKyAgICB2b2lkIGNvbXBsZXRlU2VlaygpOwogCiAgICAgdm9pZCBzZXREdXJhdGlvbihk
b3VibGUsIEV4Y2VwdGlvbkNvZGUmKTsKICAgICB2b2lkIHNldER1cmF0aW9uSW50ZXJuYWwoZG91
YmxlKTsKQEAgLTEyNyw2ICsxMjksOCBAQCBwcm90ZWN0ZWQ6CiAgICAgUmVmUHRyPFNvdXJjZUJ1
ZmZlckxpc3Q+IG1fc291cmNlQnVmZmVyczsKICAgICBSZWZQdHI8U291cmNlQnVmZmVyTGlzdD4g
bV9hY3RpdmVTb3VyY2VCdWZmZXJzOwogICAgIEhUTUxNZWRpYUVsZW1lbnQqIG1fbWVkaWFFbGVt
ZW50OworICAgIGRvdWJsZSBtX2R1cmF0aW9uOworICAgIE1lZGlhVGltZSBtX3BlbmRpbmdTZWVr
VGltZTsKICAgICBBdG9taWNTdHJpbmcgbV9yZWFkeVN0YXRlOwogICAgIEdlbmVyaWNFdmVudFF1
ZXVlIG1fYXN5bmNFdmVudFF1ZXVlOwogfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvbWVkaWFzb3VyY2UvU291cmNlQnVmZmVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvbWVkaWFzb3VyY2UvU291cmNlQnVmZmVyLmNwcAppbmRleCAxYzUzMjg5MWY3ODJiOWEyOTM5
OTUzMDQ0NDg2Zjc2MzBhMDcxZjIzLi4wZjY3OTUwMjU3M2EyMDYyZDY1YWJhZjI1NWRiYThjNGQy
NDM1NWYyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc291cmNlL1Nv
dXJjZUJ1ZmZlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXNvdXJjZS9T
b3VyY2VCdWZmZXIuY3BwCkBAIC0yMzMsNiArMjMzLDcgQEAgdm9pZCBTb3VyY2VCdWZmZXI6OmFi
b3J0KEV4Y2VwdGlvbkNvZGUmIGVjKQogCiB2b2lkIFNvdXJjZUJ1ZmZlcjo6cmVtb3ZlKGRvdWJs
ZSBzdGFydCwgZG91YmxlIGVuZCwgRXhjZXB0aW9uQ29kZSYgZWMpCiB7CisgICAgTE9HKE1lZGlh
U291cmNlLCAiU291cmNlQnVmZmVyOjpyZW1vdmUoJXApIC0gc3RhcnQoJXMpLCBlbmQoJXMpIiwg
dGhpcywgdG9TdHJpbmcoc3RhcnQpLnV0ZjgoKS5kYXRhKCksIHRvU3RyaW5nKGVuZCkudXRmOCgp
LmRhdGEoKSk7CiAgICAgLy8gU2VjdGlvbiAzLjIgcmVtb3ZlKCkgbWV0aG9kIHN0ZXBzLgogICAg
IC8vIDEuIElmIHN0YXJ0IGlzIG5lZ2F0aXZlIG9yIGdyZWF0ZXIgdGhhbiBkdXJhdGlvbiwgdGhl
biB0aHJvdyBhbiBJbnZhbGlkQWNjZXNzRXJyb3IgZXhjZXB0aW9uIGFuZCBhYm9ydCB0aGVzZSBz
dGVwcy4KICAgICAvLyAyLiBJZiBlbmQgaXMgbGVzcyB0aGFuIG9yIGVxdWFsIHRvIHN0YXJ0LCB0
aGVuIHRocm93IGFuIEludmFsaWRBY2Nlc3NFcnJvciBleGNlcHRpb24gYW5kIGFib3J0IHRoZXNl
IHN0ZXBzLgpAQCAtMzA4LDkgKzMwOSw5IEBAIHZvaWQgU291cmNlQnVmZmVyOjpyZW1vdmVkRnJv
bU1lZGlhU291cmNlKCkKICAgICBtX3NvdXJjZSA9IDA7CiB9CiAKLXZvaWQgU291cmNlQnVmZmVy
Ojpzb3VyY2VCdWZmZXJQcml2YXRlU2Vla1RvVGltZShTb3VyY2VCdWZmZXJQcml2YXRlKiwgY29u
c3QgTWVkaWFUaW1lJiB0aW1lKQordm9pZCBTb3VyY2VCdWZmZXI6OnNlZWtUb1RpbWUoY29uc3Qg
TWVkaWFUaW1lJiB0aW1lKQogewotICAgIExPRyhNZWRpYVNvdXJjZSwgIlNvdXJjZUJ1ZmZlcjo6
c291cmNlQnVmZmVyUHJpdmF0ZVNlZWtUb1RpbWUoJXApIC0gdGltZSglcykiLCB0aGlzLCB0b1N0
cmluZyh0aW1lKS51dGY4KCkuZGF0YSgpKTsKKyAgICBMT0coTWVkaWFTb3VyY2UsICJTb3VyY2VC
dWZmZXI6OnNlZWtUb1RpbWUoJXApIC0gdGltZSglcykiLCB0aGlzLCB0b1N0cmluZyh0aW1lKS51
dGY4KCkuZGF0YSgpKTsKIAogICAgIGZvciAoYXV0byYgdHJhY2tCdWZmZXJQYWlyIDogbV90cmFj
a0J1ZmZlck1hcCkgewogICAgICAgICBUcmFja0J1ZmZlciYgdHJhY2tCdWZmZXIgPSB0cmFja0J1
ZmZlclBhaXIudmFsdWU7CkBAIC0zMTgsOCArMzE5LDYgQEAgdm9pZCBTb3VyY2VCdWZmZXI6OnNv
dXJjZUJ1ZmZlclByaXZhdGVTZWVrVG9UaW1lKFNvdXJjZUJ1ZmZlclByaXZhdGUqLCBjb25zdCBN
ZWQKIAogICAgICAgICByZWVucXVldWVNZWRpYUZvclRpbWUodHJhY2tCdWZmZXIsIHRyYWNrSUQs
IHRpbWUpOwogICAgIH0KLQotICAgIG1fc291cmNlLT5tb25pdG9yU291cmNlQnVmZmVycygpOwog
fQogCiBNZWRpYVRpbWUgU291cmNlQnVmZmVyOjpzb3VyY2VCdWZmZXJQcml2YXRlRmFzdFNlZWtU
aW1lRm9yTWVkaWFUaW1lKFNvdXJjZUJ1ZmZlclByaXZhdGUqLCBjb25zdCBNZWRpYVRpbWUmIHRh
cmdldFRpbWUsIGNvbnN0IE1lZGlhVGltZSYgbmVnYXRpdmVUaHJlc2hvbGQsIGNvbnN0IE1lZGlh
VGltZSYgcG9zaXRpdmVUaHJlc2hvbGQpCkBAIC01MjcsNiArNTI2LDggQEAgc3RhdGljIGJvb2wg
ZGVjb2RlVGltZUNvbXBhcmF0b3IoY29uc3QgUHJlc2VudGF0aW9uT3JkZXJTYW1wbGVNYXA6Ok1h
cFR5cGU6OnZhbHUKIAogdm9pZCBTb3VyY2VCdWZmZXI6OnJlbW92ZUNvZGVkRnJhbWVzKGNvbnN0
IE1lZGlhVGltZSYgc3RhcnQsIGNvbnN0IE1lZGlhVGltZSYgZW5kKQogeworICAgIExPRyhNZWRp
YVNvdXJjZSwgIlNvdXJjZUJ1ZmZlcjo6cmVtb3ZlQ29kZWRGcmFtZXMoJXApIC0gc3RhcnQoJXMp
LCBlbmQoJXMpIiwgdGhpcywgdG9TdHJpbmcoc3RhcnQpLnV0ZjgoKS5kYXRhKCksIHRvU3RyaW5n
KGVuZCkudXRmOCgpLmRhdGEoKSk7CisKICAgICAvLyAzLjUuOSBDb2RlZCBGcmFtZSBSZW1vdmFs
IEFsZ29yaXRobQogICAgIC8vIGh0dHBzOi8vZHZjcy53My5vcmcvaGcvaHRtbC1tZWRpYS9yYXct
ZmlsZS90aXAvbWVkaWEtc291cmNlL21lZGlhLXNvdXJjZS5odG1sI3NvdXJjZWJ1ZmZlci1jb2Rl
ZC1mcmFtZS1yZW1vdmFsCiAKQEAgLTE0NDksNyArMTQ1MCw4IEBAIGJvb2wgU291cmNlQnVmZmVy
OjpoYXNGdXR1cmVUaW1lKCkgY29uc3QKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgc2l6
ZV90IGZvdW5kID0gcmFuZ2VzLmZpbmQobmVhcmVzdCk7Ci0gICAgQVNTRVJUKGZvdW5kICE9IG5v
dEZvdW5kKTsKKyAgICBpZiAoZm91bmQgPT0gbm90Rm91bmQpCisgICAgICAgIHJldHVybiBmYWxz
ZTsKIAogICAgIGJvb2wgaWdub3JlZFZhbGlkID0gZmFsc2U7CiAgICAgcmV0dXJuIHJhbmdlcy5l
bmQoZm91bmQsIGlnbm9yZWRWYWxpZCkgLSBjdXJyZW50VGltZSA+IGN1cnJlbnRUaW1lRnVkZ2VG
YWN0b3IoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzb3VyY2Uv
U291cmNlQnVmZmVyLmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc291cmNlL1NvdXJj
ZUJ1ZmZlci5oCmluZGV4IDExNTA1MTZkYzgwMWI3MWFjMGU2MjZkN2E2NjE4MzIyZGNiZjhiNjMu
LjYzYzRkNGM1ZjNiODhjYjg1MjZkOTg5NjFhNmYyNjMwNDc1NjQzYmEgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzb3VyY2UvU291cmNlQnVmZmVyLmgKKysrIGIvU291
cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXNvdXJjZS9Tb3VyY2VCdWZmZXIuaApAQCAtNzcsNiAr
NzcsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBhYm9ydElmVXBkYXRpbmcoKTsKICAgICB2b2lkIHJl
bW92ZWRGcm9tTWVkaWFTb3VyY2UoKTsKICAgICBjb25zdCBNZWRpYVRpbWUmIGhpZ2hlc3RQcmVz
ZW50YXRpb25FbmRUaW1lc3RhbXAoKSBjb25zdCB7IHJldHVybiBtX2hpZ2hlc3RQcmVzZW50YXRp
b25FbmRUaW1lc3RhbXA7IH0KKyAgICB2b2lkIHNlZWtUb1RpbWUoY29uc3QgTWVkaWFUaW1lJik7
CiAKICNpZiBFTkFCTEUoVklERU9fVFJBQ0spCiAgICAgVmlkZW9UcmFja0xpc3QqIHZpZGVvVHJh
Y2tzKCk7CkBAIC0xMTYsNyArMTE3LDYgQEAgcHJpdmF0ZToKICAgICB2aXJ0dWFsIGJvb2wgc291
cmNlQnVmZmVyUHJpdmF0ZUhhc0F1ZGlvKGNvbnN0IFNvdXJjZUJ1ZmZlclByaXZhdGUqKSBjb25z
dCBvdmVycmlkZTsKICAgICB2aXJ0dWFsIGJvb2wgc291cmNlQnVmZmVyUHJpdmF0ZUhhc1ZpZGVv
KGNvbnN0IFNvdXJjZUJ1ZmZlclByaXZhdGUqKSBjb25zdCBvdmVycmlkZTsKICAgICB2aXJ0dWFs
IHZvaWQgc291cmNlQnVmZmVyUHJpdmF0ZURpZEJlY29tZVJlYWR5Rm9yTW9yZVNhbXBsZXMoU291
cmNlQnVmZmVyUHJpdmF0ZSosIEF0b21pY1N0cmluZyB0cmFja0lEKSBvdmVycmlkZTsKLSAgICB2
aXJ0dWFsIHZvaWQgc291cmNlQnVmZmVyUHJpdmF0ZVNlZWtUb1RpbWUoU291cmNlQnVmZmVyUHJp
dmF0ZSosIGNvbnN0IE1lZGlhVGltZSYpOwogICAgIHZpcnR1YWwgTWVkaWFUaW1lIHNvdXJjZUJ1
ZmZlclByaXZhdGVGYXN0U2Vla1RpbWVGb3JNZWRpYVRpbWUoU291cmNlQnVmZmVyUHJpdmF0ZSos
IGNvbnN0IE1lZGlhVGltZSYsIGNvbnN0IE1lZGlhVGltZSYgbmVnYXRpdmVUaHJlc2hvbGQsIGNv
bnN0IE1lZGlhVGltZSYgcG9zaXRpdmVUaHJlc2hvbGQpOwogICAgIHZpcnR1YWwgdm9pZCBzb3Vy
Y2VCdWZmZXJQcml2YXRlQXBwZW5kQ29tcGxldGUoU291cmNlQnVmZmVyUHJpdmF0ZSosIEFwcGVu
ZFJlc3VsdCkgb3ZlcnJpZGU7CiAgICAgdmlydHVhbCB2b2lkIHNvdXJjZUJ1ZmZlclByaXZhdGVE
aWRSZWNlaXZlUmVuZGVyaW5nRXJyb3IoU291cmNlQnVmZmVyUHJpdmF0ZSosIGludCBlcnJvckNv
ZGUpIG92ZXJyaWRlOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MTWVkaWFF
bGVtZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTE1lZGlhRWxlbWVudC5jcHAKaW5k
ZXggY2IxMTc1YTkwMWRkNzQyMTdkMzdkMzEyYzRmOTdhNDYwNzJjY2Q2MC4uNzdiZWJjMGRhNzE5
M2FmZDM4MTk3MTEyODgzOGIxNGY1OTAxMWJjMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
aHRtbC9IVE1MTWVkaWFFbGVtZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxN
ZWRpYUVsZW1lbnQuY3BwCkBAIC00MDkxLDcgKzQwOTEsOCBAQCB2b2lkIEhUTUxNZWRpYUVsZW1l
bnQ6Om1lZGlhUGxheWVyVGltZUNoYW5nZWQoTWVkaWFQbGF5ZXIqKQogICAgIC8vIEFsd2F5cyBj
YWxsIHNjaGVkdWxlVGltZXVwZGF0ZUV2ZW50IHdoZW4gdGhlIG1lZGlhIGVuZ2luZSByZXBvcnRz
IGEgdGltZSBkaXNjb250aW51aXR5LCAKICAgICAvLyBpdCB3aWxsIG9ubHkgcXVldWUgYSAndGlt
ZXVwZGF0ZScgZXZlbnQgaWYgd2UgaGF2ZW4ndCBhbHJlYWR5IHBvc3RlZCBvbmUgYXQgdGhlIGN1
cnJlbnQKICAgICAvLyBtb3ZpZSB0aW1lLgotICAgIHNjaGVkdWxlVGltZXVwZGF0ZUV2ZW50KGZh
bHNlKTsKKyAgICBlbHNlCisgICAgICAgIHNjaGVkdWxlVGltZXVwZGF0ZUV2ZW50KGZhbHNlKTsK
IAogICAgIGRvdWJsZSBub3cgPSBjdXJyZW50VGltZSgpOwogICAgIGRvdWJsZSBkdXIgPSBkdXJh
dGlvbigpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvTWVk
aWFTb3VyY2VQcml2YXRlLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9NZWRp
YVNvdXJjZVByaXZhdGUuaAppbmRleCBkYzI0ZTMxZTZmMjJkNTI3ZDY1ZGE3YjJlOTcxNWQ2ODhk
NzQzYWVjLi43MTg2NTg5MTBiY2UzOTJiOTVkYTU0NzZlNjg5ODk5OWU2NDU3ODQ3IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9NZWRpYVNvdXJjZVByaXZhdGUu
aAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9NZWRpYVNvdXJjZVByaXZh
dGUuaApAQCAtNTEsMTQgKzUxLDE2IEBAIHB1YmxpYzoKIAogICAgIGVudW0gQWRkU3RhdHVzIHsg
T2ssIE5vdFN1cHBvcnRlZCwgUmVhY2hlZElkTGltaXQgfTsKICAgICB2aXJ0dWFsIEFkZFN0YXR1
cyBhZGRTb3VyY2VCdWZmZXIoY29uc3QgQ29udGVudFR5cGUmLCBSZWZQdHI8U291cmNlQnVmZmVy
UHJpdmF0ZT4mKSA9IDA7Ci0gICAgdmlydHVhbCBNZWRpYVRpbWUgZHVyYXRpb24oKSA9IDA7Ci0g
ICAgdmlydHVhbCB2b2lkIHNldER1cmF0aW9uKGNvbnN0IE1lZGlhVGltZSYpID0gMDsKKyAgICB2
aXJ0dWFsIHZvaWQgZHVyYXRpb25DaGFuZ2VkKCkgPSAwOwogICAgIGVudW0gRW5kT2ZTdHJlYW1T
dGF0dXMgeyBFb3NOb0Vycm9yLCBFb3NOZXR3b3JrRXJyb3IsIEVvc0RlY29kZUVycm9yIH07CiAg
ICAgdmlydHVhbCB2b2lkIG1hcmtFbmRPZlN0cmVhbShFbmRPZlN0cmVhbVN0YXR1cykgPSAwOwog
ICAgIHZpcnR1YWwgdm9pZCB1bm1hcmtFbmRPZlN0cmVhbSgpID0gMDsKIAogICAgIHZpcnR1YWwg
TWVkaWFQbGF5ZXI6OlJlYWR5U3RhdGUgcmVhZHlTdGF0ZSgpIGNvbnN0ID0gMDsKICAgICB2aXJ0
dWFsIHZvaWQgc2V0UmVhZHlTdGF0ZShNZWRpYVBsYXllcjo6UmVhZHlTdGF0ZSkgPSAwOworCisg
ICAgdmlydHVhbCB2b2lkIHdhaXRGb3JTZWVrQ29tcGxldGVkKCkgPSAwOworICAgIHZpcnR1YWwg
dm9pZCBzZWVrQ29tcGxldGVkKCkgPSAwOwogfTsKIAogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvTWVkaWFTb3VyY2VQcml2YXRlQ2xpZW50LmggYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9NZWRpYVNvdXJjZVByaXZhdGVDbGllbnQuaApp
bmRleCBlNzY2ZjE0MGU4ZjIzYjE3NWY5ZWQyMWQ1ZTBkMzcxY2MyNGIyMTU4Li40M2YxNzE3YzNj
YmYxMDgxNTdhZWE2MjQzZjA0M2YzZjRkN2FkYTliIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9NZWRpYVNvdXJjZVByaXZhdGVDbGllbnQuaAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9NZWRpYVNvdXJjZVByaXZhdGVDbGllbnQuaApA
QCAtNDIsNiArNDIsNyBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIHNldFByaXZhdGVBbmRP
cGVuKFBhc3NSZWY8TWVkaWFTb3VyY2VQcml2YXRlPikgPSAwOwogICAgIHZpcnR1YWwgZG91Ymxl
IGR1cmF0aW9uKCkgY29uc3QgPSAwOwogICAgIHZpcnR1YWwgc3RkOjp1bmlxdWVfcHRyPFBsYXRm
b3JtVGltZVJhbmdlcz4gYnVmZmVyZWQoKSBjb25zdCA9IDA7CisgICAgdmlydHVhbCB2b2lkIHNl
ZWtUb1RpbWUoY29uc3QgTWVkaWFUaW1lJikgPSAwOwogfTsKIAogfQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL29iamMvTWVkaWFQbGF5
ZXJQcml2YXRlTWVkaWFTb3VyY2VBVkZPYmpDLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9hdmZvdW5kYXRpb24vb2JqYy9NZWRpYVBsYXllclByaXZhdGVNZWRpYVNvdXJjZUFW
Rk9iakMuaAppbmRleCA4MGJlZDQ1ZjMwNTlhZTlkMDQ3OTMwOGY1YmQ5MGMzYWJmZmFmNmViLi5m
MGFiZDI3NTNlOGU3NmE0ZGJhZDczOTA1MjBkN2UwODFkYjQ3MDNhIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24vb2JqYy9NZWRpYVBsYXll
clByaXZhdGVNZWRpYVNvdXJjZUFWRk9iakMuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9hdmZvdW5kYXRpb24vb2JqYy9NZWRpYVBsYXllclByaXZhdGVNZWRpYVNvdXJj
ZUFWRk9iakMuaApAQCAtNjUsNiArNjUsOCBAQCBwdWJsaWM6CiAgICAgdm9pZCBzZXROZXR3b3Jr
U3RhdGUoTWVkaWFQbGF5ZXI6Ok5ldHdvcmtTdGF0ZSk7CiAKICAgICB2b2lkIHNlZWtJbnRlcm5h
bCgpOworICAgIHZvaWQgd2FpdEZvclNlZWtDb21wbGV0ZWQoKTsKKyAgICB2b2lkIHNlZWtDb21w
bGV0ZWQoKTsKICAgICB2b2lkIHNldExvYWRpbmdQcm9ncmVzc3NlZChib29sIGZsYWcpIHsgbV9s
b2FkaW5nUHJvZ3Jlc3NlZCA9IGZsYWc7IH0KICAgICB2b2lkIHNldEhhc0F2YWlsYWJsZVZpZGVv
RnJhbWUoYm9vbCBmbGFnKSB7IG1faGFzQXZhaWxhYmxlVmlkZW9GcmFtZSA9IGZsYWc7IH0KICAg
ICB2b2lkIGR1cmF0aW9uQ2hhbmdlZCgpOwpAQCAtMTU3LDYgKzE1OSw3IEBAIHByaXZhdGU6CiAg
ICAgdm9pZCBlbnN1cmVMYXllcigpOwogICAgIHZvaWQgZGVzdHJveUxheWVyKCk7CiAgICAgYm9v
bCBzaG91bGRCZVBsYXlpbmcoKSBjb25zdDsKKyAgICB2b2lkIHNlZWtUaW1lckZpcmVkKFRpbWVy
PE1lZGlhUGxheWVyUHJpdmF0ZU1lZGlhU291cmNlQVZGT2JqQz4mKTsKIAogICAgIC8vIE1lZGlh
UGxheWVyIEZhY3RvcnkgTWV0aG9kcwogICAgIHN0YXRpYyBQYXNzT3duUHRyPE1lZGlhUGxheWVy
UHJpdmF0ZUludGVyZmFjZT4gY3JlYXRlKE1lZGlhUGxheWVyKik7CkBAIC0xODIsNyArMTg1LDYg
QEAgcHJpdmF0ZToKIAogICAgIE1lZGlhUGxheWVyKiBtX3BsYXllcjsKICAgICBXZWFrUHRyRmFj
dG9yeTxNZWRpYVBsYXllclByaXZhdGVNZWRpYVNvdXJjZUFWRk9iakM+IG1fd2Vha1B0ckZhY3Rv
cnk7Ci0gICAgUmVmUHRyPE1lZGlhU291cmNlUHJpdmF0ZUNsaWVudD4gbV9tZWRpYVNvdXJjZTsK
ICAgICBSZWZQdHI8TWVkaWFTb3VyY2VQcml2YXRlQVZGT2JqQz4gbV9tZWRpYVNvdXJjZVByaXZh
dGU7CiAgICAgUmV0YWluUHRyPEFWQXNzZXQ+IG1fYXNzZXQ7CiAgICAgUmV0YWluUHRyPEFWU2Ft
cGxlQnVmZmVyRGlzcGxheUxheWVyPiBtX3NhbXBsZUJ1ZmZlckRpc3BsYXlMYXllcjsKQEAgLTE5
MCw2ICsxOTIsNyBAQCBwcml2YXRlOgogICAgIFJldGFpblB0cjxBVlNhbXBsZUJ1ZmZlclJlbmRl
clN5bmNocm9uaXplcj4gbV9zeW5jaHJvbml6ZXI7CiAgICAgUmV0YWluUHRyPGlkPiBtX3RpbWVK
dW1wZWRPYnNlcnZlcjsKICAgICBSZXRhaW5QdHI8aWQ+IG1fZHVyYXRpb25PYnNlcnZlcjsKKyAg
ICBUaW1lcjxNZWRpYVBsYXllclByaXZhdGVNZWRpYVNvdXJjZUFWRk9iakM+IG1fc2Vla1RpbWVy
OwogICAgIE1lZGlhUGxheWVyOjpOZXR3b3JrU3RhdGUgbV9uZXR3b3JrU3RhdGU7CiAgICAgTWVk
aWFQbGF5ZXI6OlJlYWR5U3RhdGUgbV9yZWFkeVN0YXRlOwogICAgIGRvdWJsZSBtX3JhdGU7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24v
b2JqYy9NZWRpYVBsYXllclByaXZhdGVNZWRpYVNvdXJjZUFWRk9iakMubW0gYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24vb2JqYy9NZWRpYVBsYXllclByaXZh
dGVNZWRpYVNvdXJjZUFWRk9iakMubW0KaW5kZXggZDhiNjVmNjA4NjJiMGJmZTVjZjM4NjI4MThl
MzRmMzM2YWI3NDcxMy4uNWQ3MzYwMjFlMTRlYjIyZDExNmFiMmJkNTgzYjlkNTU0Zjg0Y2FhZiAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9u
L29iamMvTWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFTb3VyY2VBVkZPYmpDLm1tCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9vYmpjL01lZGlhUGxheWVy
UHJpdmF0ZU1lZGlhU291cmNlQVZGT2JqQy5tbQpAQCAtMjksNiArMjksNyBAQAogI2lmIEVOQUJM
RShNRURJQV9TT1VSQ0UpICYmIFVTRShBVkZPVU5EQVRJT04pCiAKICNpbXBvcnQgIkNETVNlc3Np
b24uaCIKKyNpbXBvcnQgIkxvZ2dpbmcuaCIKICNpbXBvcnQgIk1lZGlhU291cmNlUHJpdmF0ZUFW
Rk9iakMuaCIKICNpbXBvcnQgIk1lZGlhU291cmNlUHJpdmF0ZUNsaWVudC5oIgogI2ltcG9ydCAi
TWVkaWFUaW1lTWFjLmgiCkBAIC0xMzQsNiArMTM1LDcgQEAgTWVkaWFQbGF5ZXJQcml2YXRlTWVk
aWFTb3VyY2VBVkZPYmpDOjpNZWRpYVBsYXllclByaXZhdGVNZWRpYVNvdXJjZUFWRk9iakMoTWVk
aWEKICAgICA6IG1fcGxheWVyKHBsYXllcikKICAgICAsIG1fd2Vha1B0ckZhY3RvcnkodGhpcykK
ICAgICAsIG1fc3luY2hyb25pemVyKGFkb3B0TlMoW1tnZXRBVlNhbXBsZUJ1ZmZlclJlbmRlclN5
bmNocm9uaXplckNsYXNzKCkgYWxsb2NdIGluaXRdKSkKKyAgICAsIG1fc2Vla1RpbWVyKHRoaXMs
ICZNZWRpYVBsYXllclByaXZhdGVNZWRpYVNvdXJjZUFWRk9iakM6OnNlZWtUaW1lckZpcmVkKQog
ICAgICwgbV9uZXR3b3JrU3RhdGUoTWVkaWFQbGF5ZXI6OkVtcHR5KQogICAgICwgbV9yZWFkeVN0
YXRlKE1lZGlhUGxheWVyOjpIYXZlTm90aGluZykKICAgICAsIG1fcmF0ZSgxKQpAQCAtMTQ5LDE5
ICsxNTEsMjQgQEAgTWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFTb3VyY2VBVkZPYmpDOjpNZWRpYVBs
YXllclByaXZhdGVNZWRpYVNvdXJjZUFWRk9iakMoTWVkaWEKICAgICAvLyBhZGRQZXJpb2RpY1Rp
bWVPYnNlcnZlckZvckludGVydmFsOiB0aHJvd3MgYW4gZXhjZXB0aW9uIGlmIHlvdSBwYXNzIGEg
bm9uLW51bWVyaWMgQ01UaW1lLCBzbyBqdXN0IHVzZQogICAgIC8vIGFuIGFyYml0cmFyaWx5IGxh
cmdlIHRpbWUgdmFsdWUgb2Ygb25jZSBhbiBob3VyOgogICAgIF9fYmxvY2sgYXV0byB3ZWFrVGhp
cyA9IGNyZWF0ZVdlYWtQdHIoKTsKLSAgICBtX3RpbWVKdW1wZWRPYnNlcnZlciA9IFttX3N5bmNo
cm9uaXplciBhZGRQZXJpb2RpY1RpbWVPYnNlcnZlckZvckludGVydmFsOnRvQ01UaW1lKE1lZGlh
VGltZTo6Y3JlYXRlV2l0aERvdWJsZSgzNjAwKSkgcXVldWU6ZGlzcGF0Y2hfZ2V0X21haW5fcXVl
dWUoKSB1c2luZ0Jsb2NrOl4oQ01UaW1lKXsKKyAgICBtX3RpbWVKdW1wZWRPYnNlcnZlciA9IFtt
X3N5bmNocm9uaXplciBhZGRQZXJpb2RpY1RpbWVPYnNlcnZlckZvckludGVydmFsOnRvQ01UaW1l
KE1lZGlhVGltZTo6Y3JlYXRlV2l0aERvdWJsZSgzNjAwKSkgcXVldWU6ZGlzcGF0Y2hfZ2V0X21h
aW5fcXVldWUoKSB1c2luZ0Jsb2NrOl4oQ01UaW1lIHRpbWUpIHsKKyNpZiBMT0dfRElTQUJMRUQK
KyAgICAgICAgVU5VU0VEX1BBUkFNKHRpbWUpOworI2VuZGlmCiAgICAgICAgIC8vIEZJWE1FOiBS
ZW1vdmUgdGhlIGJlbG93IG9uY2UgPHJkYXI6Ly9wcm9ibGVtLzE1Nzk4MDUwPiBpcyBmaXhlZC4K
ICAgICAgICAgaWYgKCF3ZWFrVGhpcykKICAgICAgICAgICAgIHJldHVybjsKIAogICAgICAgICBp
ZiAobV9zZWVraW5nICYmICFtX3BlbmRpbmdTZWVrKSB7CisgICAgICAgICAgICBMT0coTWVkaWFT
b3VyY2UsICJNZWRpYVBsYXllclByaXZhdGVNZWRpYVNvdXJjZUFWRk9iakM6Om1fdGltZUp1bXBl
ZE9ic2VydmVyKCVwKSAtIHRpbWUoJXMpIiwgd2Vha1RoaXMuZ2V0KCksIHRvU3RyaW5nKHRvTWVk
aWFUaW1lKHRpbWUpKS51dGY4KCkuZGF0YSgpKTsKICAgICAgICAgICAgIG1fc2Vla2luZyA9IGZh
bHNlOworCiAgICAgICAgICAgICBpZiAoc2hvdWxkQmVQbGF5aW5nKCkpCiAgICAgICAgICAgICAg
ICAgW21fc3luY2hyb25pemVyIHNldFJhdGU6bV9yYXRlXTsKKyAgICAgICAgICAgIGlmICghc2Vl
a2luZygpKQorICAgICAgICAgICAgICAgIG1fcGxheWVyLT50aW1lQ2hhbmdlZCgpOwogICAgICAg
ICB9CiAKLSAgICAgICAgbV9wbGF5ZXItPnRpbWVDaGFuZ2VkKCk7Ci0KICAgICAgICAgaWYgKG1f
cGVuZGluZ1NlZWspCiAgICAgICAgICAgICBzZWVrSW50ZXJuYWwoKTsKICAgICB9XTsKQEAgLTE3
Nyw2ICsxODQsOCBAQCBNZWRpYVBsYXllclByaXZhdGVNZWRpYVNvdXJjZUFWRk9iakM6On5NZWRp
YVBsYXllclByaXZhdGVNZWRpYVNvdXJjZUFWRk9iakMoKQogICAgICAgICBbbV9zeW5jaHJvbml6
ZXIgcmVtb3ZlVGltZU9ic2VydmVyOm1fdGltZUp1bXBlZE9ic2VydmVyLmdldCgpXTsKICAgICBp
ZiAobV9kdXJhdGlvbk9ic2VydmVyKQogICAgICAgICBbbV9zeW5jaHJvbml6ZXIgcmVtb3ZlVGlt
ZU9ic2VydmVyOm1fZHVyYXRpb25PYnNlcnZlci5nZXQoKV07CisKKyAgICBtX3NlZWtUaW1lci5z
dG9wKCk7CiB9CiAKICNwcmFnbWEgbWFyayAtCkBAIC0yODYsMTQgKzI5NSwxMSBAQCB2b2lkIE1l
ZGlhUGxheWVyUHJpdmF0ZU1lZGlhU291cmNlQVZGT2JqQzo6bG9hZChjb25zdCBTdHJpbmcmKQog
ICAgIG1fcGxheWVyLT5uZXR3b3JrU3RhdGVDaGFuZ2VkKCk7CiB9CiAKLXZvaWQgTWVkaWFQbGF5
ZXJQcml2YXRlTWVkaWFTb3VyY2VBVkZPYmpDOjpsb2FkKGNvbnN0IFN0cmluZyYgdXJsLCBNZWRp
YVNvdXJjZVByaXZhdGVDbGllbnQqIHNvdXJjZSkKK3ZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlTWVk
aWFTb3VyY2VBVkZPYmpDOjpsb2FkKGNvbnN0IFN0cmluZyYgdXJsLCBNZWRpYVNvdXJjZVByaXZh
dGVDbGllbnQqIGNsaWVudCkKIHsKICAgICBVTlVTRURfUEFSQU0odXJsKTsKIAotICAgIG1fbWVk
aWFTb3VyY2UgPSBzb3VyY2U7Ci0gICAgbV9tZWRpYVNvdXJjZVByaXZhdGUgPSBNZWRpYVNvdXJj
ZVByaXZhdGVBVkZPYmpDOjpjcmVhdGUodGhpcyk7Ci0KLSAgICBtX21lZGlhU291cmNlLT5zZXRQ
cml2YXRlQW5kT3BlbigqbV9tZWRpYVNvdXJjZVByaXZhdGUpOworICAgIG1fbWVkaWFTb3VyY2VQ
cml2YXRlID0gTWVkaWFTb3VyY2VQcml2YXRlQVZGT2JqQzo6Y3JlYXRlKHRoaXMsIGNsaWVudCk7
CiB9CiAKIHZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFTb3VyY2VBVkZPYmpDOjpjYW5jZWxM
b2FkKCkKQEAgLTQwNiw3ICs0MTIsNyBAQCB2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZU1lZGlhU291
cmNlQVZGT2JqQzo6c2V0VmlzaWJsZShib29sKQogCiBkb3VibGUgTWVkaWFQbGF5ZXJQcml2YXRl
TWVkaWFTb3VyY2VBVkZPYmpDOjpkdXJhdGlvbkRvdWJsZSgpIGNvbnN0CiB7Ci0gICAgcmV0dXJu
IG1fbWVkaWFTb3VyY2UgPyBtX21lZGlhU291cmNlLT5kdXJhdGlvbigpIDogMDsKKyAgICByZXR1
cm4gbV9tZWRpYVNvdXJjZVByaXZhdGUgPyBtX21lZGlhU291cmNlUHJpdmF0ZS0+ZHVyYXRpb24o
KS50b0RvdWJsZSgpIDogMDsKIH0KIAogTWVkaWFUaW1lIE1lZGlhUGxheWVyUHJpdmF0ZU1lZGlh
U291cmNlQVZGT2JqQzo6Y3VycmVudE1lZGlhVGltZSgpIGNvbnN0CkBAIC00MzEsMTYgKzQzNywx
OSBAQCBkb3VibGUgTWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFTb3VyY2VBVkZPYmpDOjppbml0aWFs
VGltZSgpIGNvbnN0CiAKIHZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFTb3VyY2VBVkZPYmpD
OjpzZWVrV2l0aFRvbGVyYW5jZShkb3VibGUgdGltZSwgZG91YmxlIG5lZ2F0aXZlVGhyZXNob2xk
LCBkb3VibGUgcG9zaXRpdmVUaHJlc2hvbGQpCiB7CisgICAgTE9HKE1lZGlhU291cmNlLCAiTWVk
aWFQbGF5ZXJQcml2YXRlTWVkaWFTb3VyY2VBVkZPYmpDOjpzZWVrV2l0aFRvbGVyYW5jZSglcCkg
LSB0aW1lKCVzKSwgbmVnYXRpdmVUaHJlc2hvbGQoJXMpLCBwb3NpdGl2ZVRocmVzaG9sZCglcyki
LCB0aGlzLCB0b1N0cmluZyh0aW1lKS51dGY4KCkuZGF0YSgpLCB0b1N0cmluZyhuZWdhdGl2ZVRo
cmVzaG9sZCkudXRmOCgpLmRhdGEoKSwgdG9TdHJpbmcocG9zaXRpdmVUaHJlc2hvbGQpLnV0Zjgo
KS5kYXRhKCkpOwogICAgIG1fc2Vla2luZyA9IHRydWU7Ci0gICAgbV9zZWVrQ29tcGxldGVkID0g
ZmFsc2U7CiAgICAgYXV0byB3ZWFrVGhpcyA9IGNyZWF0ZVdlYWtQdHIoKTsKICAgICBtX3BlbmRp
bmdTZWVrID0gc3RkOjptYWtlX3VuaXF1ZTxQZW5kaW5nU2Vlaz4oTWVkaWFUaW1lOjpjcmVhdGVX
aXRoRG91YmxlKHRpbWUpLCBNZWRpYVRpbWU6OmNyZWF0ZVdpdGhEb3VibGUobmVnYXRpdmVUaHJl
c2hvbGQpLCBNZWRpYVRpbWU6OmNyZWF0ZVdpdGhEb3VibGUocG9zaXRpdmVUaHJlc2hvbGQpKTsK
IAotICAgIGNhbGxPbk1haW5UaHJlYWQoW3dlYWtUaGlzXSB7Ci0gICAgICAgIGlmICghd2Vha1Ro
aXMpCi0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIHdlYWtUaGlzLmdldCgpLT5zZWVrSW50
ZXJuYWwoKTsKLSAgICB9KTsKKyAgICBpZiAobV9zZWVrVGltZXIuaXNBY3RpdmUoKSkKKyAgICAg
ICAgbV9zZWVrVGltZXIuc3RvcCgpOworICAgIG1fc2Vla1RpbWVyLnN0YXJ0T25lU2hvdCgwKTsK
K30KKwordm9pZCBNZWRpYVBsYXllclByaXZhdGVNZWRpYVNvdXJjZUFWRk9iakM6OnNlZWtUaW1l
ckZpcmVkKFRpbWVyPE1lZGlhUGxheWVyUHJpdmF0ZU1lZGlhU291cmNlQVZGT2JqQz4mKQorewor
ICAgIHNlZWtJbnRlcm5hbCgpOwogfQogCiB2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZU1lZGlhU291
cmNlQVZGT2JqQzo6c2Vla0ludGVybmFsKCkKQEAgLTQ2MCwxMCArNDY5LDMwIEBAIHZvaWQgTWVk
aWFQbGF5ZXJQcml2YXRlTWVkaWFTb3VyY2VBVkZPYmpDOjpzZWVrSW50ZXJuYWwoKQogICAgIGVs
c2UKICAgICAgICAgc2Vla1RpbWUgPSBtX21lZGlhU291cmNlUHJpdmF0ZS0+ZmFzdFNlZWtUaW1l
Rm9yTWVkaWFUaW1lKHBlbmRpbmdTZWVrLT50YXJnZXRUaW1lLCBwZW5kaW5nU2Vlay0+cG9zaXRp
dmVUaHJlc2hvbGQsIHBlbmRpbmdTZWVrLT5uZWdhdGl2ZVRocmVzaG9sZCk7CiAKKyAgICBMT0co
TWVkaWFTb3VyY2UsICJNZWRpYVBsYXllclByaXZhdGVNZWRpYVNvdXJjZUFWRk9iakM6OnNlZWtJ
bnRlcm5hbCglcCkgLSBzZWVrVGltZSglcykiLCB0aGlzLCB0b1N0cmluZyhzZWVrVGltZSkudXRm
OCgpLmRhdGEoKSk7CisKICAgICBbbV9zeW5jaHJvbml6ZXIgc2V0UmF0ZTowIHRpbWU6dG9DTVRp
bWUoc2Vla1RpbWUpXTsKICAgICBtX21lZGlhU291cmNlUHJpdmF0ZS0+c2Vla1RvVGltZShzZWVr
VGltZSk7CiB9CiAKK3ZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFTb3VyY2VBVkZPYmpDOjp3
YWl0Rm9yU2Vla0NvbXBsZXRlZCgpCit7CisgICAgaWYgKCFtX3NlZWtpbmcpCisgICAgICAgIHJl
dHVybjsKKyAgICBMT0coTWVkaWFTb3VyY2UsICJNZWRpYVBsYXllclByaXZhdGVNZWRpYVNvdXJj
ZUFWRk9iakM6OndhaXRGb3JTZWVrQ29tcGxldGVkKCVwKSIsIHRoaXMpOworICAgIG1fc2Vla0Nv
bXBsZXRlZCA9IGZhbHNlOworfQorCit2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZU1lZGlhU291cmNl
QVZGT2JqQzo6c2Vla0NvbXBsZXRlZCgpCit7CisgICAgaWYgKG1fc2Vla0NvbXBsZXRlZCkKKyAg
ICAgICAgcmV0dXJuOworICAgIExPRyhNZWRpYVNvdXJjZSwgIk1lZGlhUGxheWVyUHJpdmF0ZU1l
ZGlhU291cmNlQVZGT2JqQzo6c2Vla0NvbXBsZXRlZCglcCkiLCB0aGlzKTsKKyAgICBtX3NlZWtD
b21wbGV0ZWQgPSB0cnVlOworICAgIGlmICghbV9zZWVraW5nKQorICAgICAgICBtX3BsYXllci0+
dGltZUNoYW5nZWQoKTsKK30KKwogYm9vbCBNZWRpYVBsYXllclByaXZhdGVNZWRpYVNvdXJjZUFW
Rk9iakM6OnNlZWtpbmcoKSBjb25zdAogewogICAgIHJldHVybiBtX3NlZWtpbmcgJiYgIW1fc2Vl
a0NvbXBsZXRlZDsKQEAgLTUwMyw3ICs1MzIsNyBAQCBkb3VibGUgTWVkaWFQbGF5ZXJQcml2YXRl
TWVkaWFTb3VyY2VBVkZPYmpDOjptaW5UaW1lU2Vla2FibGUoKSBjb25zdAogCiBzdGQ6OnVuaXF1
ZV9wdHI8UGxhdGZvcm1UaW1lUmFuZ2VzPiBNZWRpYVBsYXllclByaXZhdGVNZWRpYVNvdXJjZUFW
Rk9iakM6OmJ1ZmZlcmVkKCkgY29uc3QKIHsKLSAgICByZXR1cm4gbV9tZWRpYVNvdXJjZSA/IG1f
bWVkaWFTb3VyY2UtPmJ1ZmZlcmVkKCkgOiBQbGF0Zm9ybVRpbWVSYW5nZXM6OmNyZWF0ZSgpOwor
ICAgIHJldHVybiBtX21lZGlhU291cmNlUHJpdmF0ZSA/IG1fbWVkaWFTb3VyY2VQcml2YXRlLT5i
dWZmZXJlZCgpIDogUGxhdGZvcm1UaW1lUmFuZ2VzOjpjcmVhdGUoKTsKIH0KIAogYm9vbCBNZWRp
YVBsYXllclByaXZhdGVNZWRpYVNvdXJjZUFWRk9iakM6OmRpZExvYWRpbmdQcm9ncmVzcygpIGNv
bnN0CkBAIC02MzYsOCArNjY1LDEwIEBAIHZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFTb3Vy
Y2VBVkZPYmpDOjpkdXJhdGlvbkNoYW5nZWQoKQogICAgIGF1dG8gd2Vha1RoaXMgPSBjcmVhdGVX
ZWFrUHRyKCk7CiAgICAgTlNBcnJheSogdGltZXMgPSBAW1tOU1ZhbHVlIHZhbHVlV2l0aENNVGlt
ZTp0b0NNVGltZShkdXJhdGlvbildXTsKICAgICBtX2R1cmF0aW9uT2JzZXJ2ZXIgPSBbbV9zeW5j
aHJvbml6ZXIgYWRkQm91bmRhcnlUaW1lT2JzZXJ2ZXJGb3JUaW1lczp0aW1lcyBxdWV1ZTpkaXNw
YXRjaF9nZXRfbWFpbl9xdWV1ZSgpIHVzaW5nQmxvY2s6W3dlYWtUaGlzXSB7Ci0gICAgICAgIGlm
ICh3ZWFrVGhpcykKKyAgICAgICAgaWYgKHdlYWtUaGlzKSB7CiAgICAgICAgICAgICB3ZWFrVGhp
cy0+cGF1c2VJbnRlcm5hbCgpOworICAgICAgICAgICAgd2Vha1RoaXMtPm1fcGxheWVyLT50aW1l
Q2hhbmdlZCgpOworICAgICAgICB9CiAgICAgfV07CiAKICAgICBpZiAobV9wbGF5aW5nICYmIGR1
cmF0aW9uIDw9IGN1cnJlbnRNZWRpYVRpbWUoKSkKQEAgLTY3NiwxMSArNzA3LDYgQEAgdm9pZCBN
ZWRpYVBsYXllclByaXZhdGVNZWRpYVNvdXJjZUFWRk9iakM6OnNldFJlYWR5U3RhdGUoTWVkaWFQ
bGF5ZXI6OlJlYWR5U3RhdGUKIAogICAgIG1fcmVhZHlTdGF0ZSA9IHJlYWR5U3RhdGU7CiAKLSAg
ICBpZiAoIW1fc2Vla0NvbXBsZXRlZCAmJiBtX3JlYWR5U3RhdGUgPj0gTWVkaWFQbGF5ZXI6Okhh
dmVDdXJyZW50RGF0YSkgewotICAgICAgICBtX3NlZWtDb21wbGV0ZWQgPSB0cnVlOwotICAgICAg
ICBtX3BsYXllci0+dGltZUNoYW5nZWQoKTsKLSAgICB9Ci0KICAgICBpZiAoc2hvdWxkQmVQbGF5
aW5nKCkpCiAgICAgICAgIFttX3N5bmNocm9uaXplciBzZXRSYXRlOm1fcmF0ZV07CiAgICAgZWxz
ZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0
aW9uL29iamMvTWVkaWFTb3VyY2VQcml2YXRlQVZGT2JqQy5oIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL29iamMvTWVkaWFTb3VyY2VQcml2YXRlQVZGT2Jq
Qy5oCmluZGV4IDJhODExZTliNjdjZTgzMjdjMzE3ZGVmMGRlNTQ3MGJlOTk4YmQ3YzYuLmNiZDFk
NGU5MmEzYjU0Y2M3MzY2MzU3Nzc1ZGVkYTkxMzI4NDlkYTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9vYmpjL01lZGlhU291cmNlUHJp
dmF0ZUFWRk9iakMuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hdmZv
dW5kYXRpb24vb2JqYy9NZWRpYVNvdXJjZVByaXZhdGVBVkZPYmpDLmgKQEAgLTQ1LDMwICs0NSwz
NSBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIENETVNlc3Npb247CiBjbGFzcyBNZWRp
YVBsYXllclByaXZhdGVNZWRpYVNvdXJjZUFWRk9iakM7CitjbGFzcyBNZWRpYVNvdXJjZVByaXZh
dGVDbGllbnQ7CiBjbGFzcyBTb3VyY2VCdWZmZXJQcml2YXRlQVZGT2JqQzsKIGNsYXNzIFRpbWVS
YW5nZXM7CiAKIGNsYXNzIE1lZGlhU291cmNlUHJpdmF0ZUFWRk9iakMgZmluYWwgOiBwdWJsaWMg
TWVkaWFTb3VyY2VQcml2YXRlIHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgUmVmUHRyPE1lZGlhU291
cmNlUHJpdmF0ZUFWRk9iakM+IGNyZWF0ZShNZWRpYVBsYXllclByaXZhdGVNZWRpYVNvdXJjZUFW
Rk9iakMqKTsKKyAgICBzdGF0aWMgUmVmUHRyPE1lZGlhU291cmNlUHJpdmF0ZUFWRk9iakM+IGNy
ZWF0ZShNZWRpYVBsYXllclByaXZhdGVNZWRpYVNvdXJjZUFWRk9iakMqLCBNZWRpYVNvdXJjZVBy
aXZhdGVDbGllbnQqKTsKICAgICB2aXJ0dWFsIH5NZWRpYVNvdXJjZVByaXZhdGVBVkZPYmpDKCk7
CiAKICAgICBNZWRpYVBsYXllclByaXZhdGVNZWRpYVNvdXJjZUFWRk9iakMqIHBsYXllcigpIGNv
bnN0IHsgcmV0dXJuIG1fcGxheWVyOyB9CiAgICAgY29uc3QgVmVjdG9yPFNvdXJjZUJ1ZmZlclBy
aXZhdGVBVkZPYmpDKj4mIGFjdGl2ZVNvdXJjZUJ1ZmZlcnMoKSBjb25zdCB7IHJldHVybiBtX2Fj
dGl2ZVNvdXJjZUJ1ZmZlcnM7IH0KIAogICAgIHZpcnR1YWwgQWRkU3RhdHVzIGFkZFNvdXJjZUJ1
ZmZlcihjb25zdCBDb250ZW50VHlwZSYsIFJlZlB0cjxTb3VyY2VCdWZmZXJQcml2YXRlPiYpIG92
ZXJyaWRlOwotICAgIHZpcnR1YWwgTWVkaWFUaW1lIGR1cmF0aW9uKCkgb3ZlcnJpZGU7Ci0gICAg
dmlydHVhbCB2b2lkIHNldER1cmF0aW9uKGNvbnN0IE1lZGlhVGltZSYpIG92ZXJyaWRlOworICAg
IHZpcnR1YWwgdm9pZCBkdXJhdGlvbkNoYW5nZWQoKSBvdmVycmlkZTsKICAgICB2aXJ0dWFsIHZv
aWQgbWFya0VuZE9mU3RyZWFtKEVuZE9mU3RyZWFtU3RhdHVzKSBvdmVycmlkZTsKICAgICB2aXJ0
dWFsIHZvaWQgdW5tYXJrRW5kT2ZTdHJlYW0oKSBvdmVycmlkZTsKICAgICB2aXJ0dWFsIE1lZGlh
UGxheWVyOjpSZWFkeVN0YXRlIHJlYWR5U3RhdGUoKSBjb25zdCBvdmVycmlkZTsKICAgICB2aXJ0
dWFsIHZvaWQgc2V0UmVhZHlTdGF0ZShNZWRpYVBsYXllcjo6UmVhZHlTdGF0ZSkgb3ZlcnJpZGU7
CisgICAgdmlydHVhbCB2b2lkIHdhaXRGb3JTZWVrQ29tcGxldGVkKCkgb3ZlcnJpZGU7CisgICAg
dmlydHVhbCB2b2lkIHNlZWtDb21wbGV0ZWQoKSBvdmVycmlkZTsKKworICAgIE1lZGlhVGltZSBk
dXJhdGlvbigpOworICAgIHN0ZDo6dW5pcXVlX3B0cjxQbGF0Zm9ybVRpbWVSYW5nZXM+IGJ1ZmZl
cmVkKCk7CiAKICAgICBib29sIGhhc0F1ZGlvKCkgY29uc3Q7CiAgICAgYm9vbCBoYXNWaWRlbygp
IGNvbnN0OwogCi0gICAgdm9pZCBzZWVrVG9UaW1lKE1lZGlhVGltZSk7Ci0gICAgTWVkaWFUaW1l
IGZhc3RTZWVrVGltZUZvck1lZGlhVGltZShNZWRpYVRpbWUsIE1lZGlhVGltZSBuZWdhdGl2ZVRo
cmVzaG9sZCwgTWVkaWFUaW1lIHBvc2l0aXZlVGhyZXNob2xkKTsKKyAgICB2b2lkIHNlZWtUb1Rp
bWUoY29uc3QgTWVkaWFUaW1lJik7CisgICAgTWVkaWFUaW1lIGZhc3RTZWVrVGltZUZvck1lZGlh
VGltZShjb25zdCBNZWRpYVRpbWUmLCBjb25zdCBNZWRpYVRpbWUmIG5lZ2F0aXZlVGhyZXNob2xk
LCBjb25zdCBNZWRpYVRpbWUmIHBvc2l0aXZlVGhyZXNob2xkKTsKICAgICBJbnRTaXplIG5hdHVy
YWxTaXplKCkgY29uc3Q7CiAKICNpZiBFTkFCTEUoRU5DUllQVEVEX01FRElBX1YyKQpAQCAtNzYs
NyArODEsNyBAQCBwdWJsaWM6CiAjZW5kaWYKIAogcHJpdmF0ZToKLSAgICBNZWRpYVNvdXJjZVBy
aXZhdGVBVkZPYmpDKE1lZGlhUGxheWVyUHJpdmF0ZU1lZGlhU291cmNlQVZGT2JqQyopOworICAg
IE1lZGlhU291cmNlUHJpdmF0ZUFWRk9iakMoTWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFTb3VyY2VB
VkZPYmpDKiwgTWVkaWFTb3VyY2VQcml2YXRlQ2xpZW50Kik7CiAKICAgICB2b2lkIHNvdXJjZUJ1
ZmZlclByaXZhdGVEaWRDaGFuZ2VBY3RpdmVTdGF0ZShTb3VyY2VCdWZmZXJQcml2YXRlQVZGT2Jq
QyosIGJvb2wgYWN0aXZlKTsKICAgICB2b2lkIHNvdXJjZUJ1ZmZlclByaXZhdGVEaWRSZWNlaXZl
SW5pdGlhbGl6YXRpb25TZWdtZW50KFNvdXJjZUJ1ZmZlclByaXZhdGVBVkZPYmpDKik7CkBAIC04
OSw3ICs5NCw3IEBAIHByaXZhdGU6CiAgICAgZnJpZW5kIGNsYXNzIFNvdXJjZUJ1ZmZlclByaXZh
dGVBVkZPYmpDOwogCiAgICAgTWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFTb3VyY2VBVkZPYmpDKiBt
X3BsYXllcjsKLSAgICBNZWRpYVRpbWUgbV9kdXJhdGlvbjsKKyAgICBSZWZQdHI8TWVkaWFTb3Vy
Y2VQcml2YXRlQ2xpZW50PiBtX2NsaWVudDsKICAgICBWZWN0b3I8UmVmUHRyPFNvdXJjZUJ1ZmZl
clByaXZhdGVBVkZPYmpDPj4gbV9zb3VyY2VCdWZmZXJzOwogICAgIFZlY3RvcjxTb3VyY2VCdWZm
ZXJQcml2YXRlQVZGT2JqQyo+IG1fYWN0aXZlU291cmNlQnVmZmVyczsKICAgICBEZXF1ZTxTb3Vy
Y2VCdWZmZXJQcml2YXRlQVZGT2JqQyo+IG1fc291cmNlQnVmZmVyc05lZWRpbmdTZXNzaW9uczsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlv
bi9vYmpjL01lZGlhU291cmNlUHJpdmF0ZUFWRk9iakMubW0gYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24vb2JqYy9NZWRpYVNvdXJjZVByaXZhdGVBVkZPYmpD
Lm1tCmluZGV4IDFmYWYxOTdkMDQyM2JlYTNkZDBhYWI5ODI5MzM5YzFjYWZhMDFhMGYuLmYyYTRi
MzRmMzA0NzI2ZGRkZTNhZWMyY2ZjMDM1MGJhNDJlOWU1NDUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9vYmpjL01lZGlhU291cmNlUHJp
dmF0ZUFWRk9iakMubW0KKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYXZm
b3VuZGF0aW9uL29iamMvTWVkaWFTb3VyY2VQcml2YXRlQVZGT2JqQy5tbQpAQCAtMzIsNiArMzIs
NyBAQAogI2ltcG9ydCAiQ29udGVudFR5cGUuaCIKICNpbXBvcnQgIkV4Y2VwdGlvbkNvZGVQbGFj
ZWhvbGRlci5oIgogI2ltcG9ydCAiTWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFTb3VyY2VBVkZPYmpD
LmgiCisjaW1wb3J0ICJNZWRpYVNvdXJjZVByaXZhdGVDbGllbnQuaCIKICNpbXBvcnQgIlNvdXJj
ZUJ1ZmZlclByaXZhdGVBVkZPYmpDLmgiCiAjaW1wb3J0ICJTb2Z0TGlua2luZy5oIgogI2ltcG9y
dCA8b2JqYy9ydW50aW1lLmg+CkBAIC00MywxNCArNDQsMTYgQEAgbmFtZXNwYWNlIFdlYkNvcmUg
ewogI3ByYWdtYSBtYXJrIC0KICNwcmFnbWEgbWFyayBNZWRpYVNvdXJjZVByaXZhdGVBVkZPYmpD
CiAKLVJlZlB0cjxNZWRpYVNvdXJjZVByaXZhdGVBVkZPYmpDPiBNZWRpYVNvdXJjZVByaXZhdGVB
VkZPYmpDOjpjcmVhdGUoTWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFTb3VyY2VBVkZPYmpDKiBwYXJl
bnQpCitSZWZQdHI8TWVkaWFTb3VyY2VQcml2YXRlQVZGT2JqQz4gTWVkaWFTb3VyY2VQcml2YXRl
QVZGT2JqQzo6Y3JlYXRlKE1lZGlhUGxheWVyUHJpdmF0ZU1lZGlhU291cmNlQVZGT2JqQyogcGFy
ZW50LCBNZWRpYVNvdXJjZVByaXZhdGVDbGllbnQqIGNsaWVudCkKIHsKLSAgICByZXR1cm4gYWRv
cHRSZWYobmV3IE1lZGlhU291cmNlUHJpdmF0ZUFWRk9iakMocGFyZW50KSk7CisgICAgUmVmUHRy
PE1lZGlhU291cmNlUHJpdmF0ZUFWRk9iakM+IG1lZGlhU291cmNlUHJpdmF0ZSA9IGFkb3B0UmVm
KG5ldyBNZWRpYVNvdXJjZVByaXZhdGVBVkZPYmpDKHBhcmVudCwgY2xpZW50KSk7CisgICAgY2xp
ZW50LT5zZXRQcml2YXRlQW5kT3BlbigqbWVkaWFTb3VyY2VQcml2YXRlKTsKKyAgICByZXR1cm4g
bWVkaWFTb3VyY2VQcml2YXRlOwogfQogCi1NZWRpYVNvdXJjZVByaXZhdGVBVkZPYmpDOjpNZWRp
YVNvdXJjZVByaXZhdGVBVkZPYmpDKE1lZGlhUGxheWVyUHJpdmF0ZU1lZGlhU291cmNlQVZGT2Jq
QyogcGFyZW50KQorTWVkaWFTb3VyY2VQcml2YXRlQVZGT2JqQzo6TWVkaWFTb3VyY2VQcml2YXRl
QVZGT2JqQyhNZWRpYVBsYXllclByaXZhdGVNZWRpYVNvdXJjZUFWRk9iakMqIHBhcmVudCwgTWVk
aWFTb3VyY2VQcml2YXRlQ2xpZW50KiBjbGllbnQpCiAgICAgOiBtX3BsYXllcihwYXJlbnQpCi0g
ICAgLCBtX2R1cmF0aW9uKE1lZGlhVGltZTo6aW52YWxpZFRpbWUoKSkKKyAgICAsIG1fY2xpZW50
KGNsaWVudCkKICAgICAsIG1faXNFbmRlZChmYWxzZSkKIHsKIH0KQEAgLTkxLDE1ICs5NCwxNiBA
QCB2b2lkIE1lZGlhU291cmNlUHJpdmF0ZUFWRk9iakM6OnJlbW92ZVNvdXJjZUJ1ZmZlcihTb3Vy
Y2VCdWZmZXJQcml2YXRlKiBidWZmZXIpCiAKIE1lZGlhVGltZSBNZWRpYVNvdXJjZVByaXZhdGVB
VkZPYmpDOjpkdXJhdGlvbigpCiB7Ci0gICAgcmV0dXJuIG1fZHVyYXRpb247CisgICAgcmV0dXJu
IE1lZGlhVGltZTo6Y3JlYXRlV2l0aERvdWJsZShtX2NsaWVudC0+ZHVyYXRpb24oKSk7CiB9CiAK
LXZvaWQgTWVkaWFTb3VyY2VQcml2YXRlQVZGT2JqQzo6c2V0RHVyYXRpb24oY29uc3QgTWVkaWFU
aW1lJiBkdXJhdGlvbikKK3N0ZDo6dW5pcXVlX3B0cjxQbGF0Zm9ybVRpbWVSYW5nZXM+IE1lZGlh
U291cmNlUHJpdmF0ZUFWRk9iakM6OmJ1ZmZlcmVkKCkKIHsKLSAgICBpZiAoZHVyYXRpb24gPT0g
bV9kdXJhdGlvbikKLSAgICAgICAgcmV0dXJuOworICAgIHJldHVybiBtX2NsaWVudC0+YnVmZmVy
ZWQoKTsKK30KIAotICAgIG1fZHVyYXRpb24gPSBkdXJhdGlvbjsKK3ZvaWQgTWVkaWFTb3VyY2VQ
cml2YXRlQVZGT2JqQzo6ZHVyYXRpb25DaGFuZ2VkKCkKK3sKICAgICBtX3BsYXllci0+ZHVyYXRp
b25DaGFuZ2VkKCk7CiB9CiAKQEAgLTEyNiw2ICsxMzAsMTYgQEAgdm9pZCBNZWRpYVNvdXJjZVBy
aXZhdGVBVkZPYmpDOjpzZXRSZWFkeVN0YXRlKE1lZGlhUGxheWVyOjpSZWFkeVN0YXRlIHJlYWR5
U3RhdGUKICAgICBtX3BsYXllci0+c2V0UmVhZHlTdGF0ZShyZWFkeVN0YXRlKTsKIH0KIAordm9p
ZCBNZWRpYVNvdXJjZVByaXZhdGVBVkZPYmpDOjp3YWl0Rm9yU2Vla0NvbXBsZXRlZCgpCit7Cisg
ICAgbV9wbGF5ZXItPndhaXRGb3JTZWVrQ29tcGxldGVkKCk7Cit9CisKK3ZvaWQgTWVkaWFTb3Vy
Y2VQcml2YXRlQVZGT2JqQzo6c2Vla0NvbXBsZXRlZCgpCit7CisgICAgbV9wbGF5ZXItPnNlZWtD
b21wbGV0ZWQoKTsKK30KKwogdm9pZCBNZWRpYVNvdXJjZVByaXZhdGVBVkZPYmpDOjpzb3VyY2VC
dWZmZXJQcml2YXRlRGlkQ2hhbmdlQWN0aXZlU3RhdGUoU291cmNlQnVmZmVyUHJpdmF0ZUFWRk9i
akMqIGJ1ZmZlciwgYm9vbCBhY3RpdmUpCiB7CiAgICAgaWYgKGFjdGl2ZSAmJiAhbV9hY3RpdmVT
b3VyY2VCdWZmZXJzLmNvbnRhaW5zKGJ1ZmZlcikpCkBAIC0xNzgsMTMgKzE5MiwxMiBAQCBib29s
IE1lZGlhU291cmNlUHJpdmF0ZUFWRk9iakM6Omhhc1ZpZGVvKCkgY29uc3QKICAgICByZXR1cm4g
c3RkOjphbnlfb2YobV9hY3RpdmVTb3VyY2VCdWZmZXJzLmJlZ2luKCksIG1fYWN0aXZlU291cmNl
QnVmZmVycy5lbmQoKSwgTWVkaWFTb3VyY2VQcml2YXRlQVZGT2JqQ0hhc1ZpZGVvKTsKIH0KIAot
dm9pZCBNZWRpYVNvdXJjZVByaXZhdGVBVkZPYmpDOjpzZWVrVG9UaW1lKE1lZGlhVGltZSB0aW1l
KQordm9pZCBNZWRpYVNvdXJjZVByaXZhdGVBVkZPYmpDOjpzZWVrVG9UaW1lKGNvbnN0IE1lZGlh
VGltZSYgdGltZSkKIHsKLSAgICBmb3IgKGF1dG8mIGJ1ZmZlciA6IG1fYWN0aXZlU291cmNlQnVm
ZmVycykKLSAgICAgICAgYnVmZmVyLT5zZWVrVG9UaW1lKHRpbWUpOworICAgIG1fY2xpZW50LT5z
ZWVrVG9UaW1lKHRpbWUpOwogfQogCi1NZWRpYVRpbWUgTWVkaWFTb3VyY2VQcml2YXRlQVZGT2Jq
Qzo6ZmFzdFNlZWtUaW1lRm9yTWVkaWFUaW1lKE1lZGlhVGltZSB0YXJnZXRUaW1lLCBNZWRpYVRp
bWUgbmVnYXRpdmVUaHJlc2hvbGQsIE1lZGlhVGltZSBwb3NpdGl2ZVRocmVzaG9sZCkKK01lZGlh
VGltZSBNZWRpYVNvdXJjZVByaXZhdGVBVkZPYmpDOjpmYXN0U2Vla1RpbWVGb3JNZWRpYVRpbWUo
Y29uc3QgTWVkaWFUaW1lJiB0YXJnZXRUaW1lLCBjb25zdCBNZWRpYVRpbWUmIG5lZ2F0aXZlVGhy
ZXNob2xkLCBjb25zdCBNZWRpYVRpbWUmIHBvc2l0aXZlVGhyZXNob2xkKQogewogICAgIE1lZGlh
VGltZSBzZWVrVGltZSA9IHRhcmdldFRpbWU7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9vYmpjL1NvdXJjZUJ1ZmZlclByaXZhdGVB
VkZPYmpDLm1tIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9u
L29iamMvU291cmNlQnVmZmVyUHJpdmF0ZUFWRk9iakMubW0KaW5kZXggOTJlMjcwZGI2NDQ0NGUw
ZDBhNGRhZmIzMmNjY2E2MDIwYmVjOTliNC4uYmUyYTNjYTlhOTAyMDU5OTIwNzMzYTQ1MTQxZGY2
YWE4OWUyMTZjOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
YXZmb3VuZGF0aW9uL29iamMvU291cmNlQnVmZmVyUHJpdmF0ZUFWRk9iakMubW0KKysrIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL29iamMvU291cmNlQnVm
ZmVyUHJpdmF0ZUFWRk9iakMubW0KQEAgLTEyMiw2ICsxMjIsNyBAQCBTT0ZUX0xJTksoQ29yZU1l
ZGlhLCBDTVZpZGVvRm9ybWF0RGVzY3JpcHRpb25HZXRQcmVzZW50YXRpb25EaW1lbnNpb25zLCBD
R1NpemUsCiAtICh2b2lkKWFwcGVuZFN0cmVhbURhdGE6KE5TRGF0YSAqKWRhdGE7CiAtICh2b2lk
KXNldFNob3VsZFByb3ZpZGVNZWRpYURhdGE6KEJPT0wpc2hvdWxkUHJvdmlkZU1lZGlhRGF0YSBm
b3JUcmFja0lEOihDTVBlcnNpc3RlbnRUcmFja0lEKXRyYWNrSUQ7CiAtIChCT09MKXNob3VsZFBy
b3ZpZGVNZWRpYURhdGFGb3JUcmFja0lEOihDTVBlcnNpc3RlbnRUcmFja0lEKXRyYWNrSUQ7Cist
ICh2b2lkKXByb3ZpZGVQZW5kaW5nTWVkaWFEYXRhOwogLSAodm9pZClwcm9jZXNzQ29udGVudEtl
eVJlc3BvbnNlRGF0YTooTlNEYXRhICopY29udGVudEtleVJlc3BvbnNlRGF0YSBmb3JUcmFja0lE
OihDTVBlcnNpc3RlbnRUcmFja0lEKXRyYWNrSUQ7CiAtICh2b2lkKXByb2Nlc3NDb250ZW50S2V5
UmVzcG9uc2VFcnJvcjooTlNFcnJvciAqKWVycm9yIGZvclRyYWNrSUQ6KENNUGVyc2lzdGVudFRy
YWNrSUQpdHJhY2tJRDsKIC0gKHZvaWQpcmVuZXdFeHBpcmluZ0NvbnRlbnRLZXlSZXNwb25zZURh
dGFGb3JUcmFja0lEOihDTVBlcnNpc3RlbnRUcmFja0lEKXRyYWNrSUQ7CkBAIC02ODIsNyArNjgz
LDcgQEAgc3RhdGljIGRpc3BhdGNoX3F1ZXVlX3QgZ2xvYmFsRGF0YVBhcnNlclF1ZXVlKCkKICAg
ICBzdGF0aWMgZGlzcGF0Y2hfcXVldWVfdCBnbG9iYWxRdWV1ZTsKICAgICBzdGF0aWMgZGlzcGF0
Y2hfb25jZV90IG9uY2VUb2tlbjsKICAgICBkaXNwYXRjaF9vbmNlKCZvbmNlVG9rZW4sIF57Ci0g
ICAgICAgIGdsb2JhbFF1ZXVlID0gZGlzcGF0Y2hfcXVldWVfY3JlYXRlKCJTb3VyY2VCdWZmZXJQ
cml2YXRlQVZGT2JqQyBkYXRhIHBhcnNlciBxdWV1ZSIsIERJU1BBVENIX1FVRVVFX1NFUklBTCk7
CisgICAgICAgIGdsb2JhbFF1ZXVlID0gZGlzcGF0Y2hfcXVldWVfY3JlYXRlKCJTb3VyY2VCdWZm
ZXJQcml2YXRlQVZGT2JqQyBkYXRhIHBhcnNlciBxdWV1ZSIsIERJU1BBVENIX1FVRVVFX0NPTkNV
UlJFTlQpOwogICAgIH0pOwogICAgIHJldHVybiBnbG9iYWxRdWV1ZTsKIH0KZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9NZWRpYVNvdXJjZUdT
dHJlYW1lci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIv
TWVkaWFTb3VyY2VHU3RyZWFtZXIuY3BwCmluZGV4IGM0YmJhODQzNDI0MTczYmU4YTg2NTcyYTdk
YWJjODkzN2I3MjZlZGYuLmQzNmZiNjBiOGI5MDY5NDViNGQwNmM5Y2RkMTA0OWJhMzIxNDhkMDgg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9N
ZWRpYVNvdXJjZUdTdHJlYW1lci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvZ3N0cmVhbWVyL01lZGlhU291cmNlR1N0cmVhbWVyLmNwcApAQCAtNDIsMTMgKzQyLDE2
IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogdm9pZCBNZWRpYVNvdXJjZUdTdHJlYW1lcjo6b3Bl
bihNZWRpYVNvdXJjZVByaXZhdGVDbGllbnQqIG1lZGlhU291cmNlLCBXZWJLaXRNZWRpYVNyYyog
c3JjKQogewotICAgIG1lZGlhU291cmNlLT5zZXRQcml2YXRlQW5kT3BlbihhZG9wdFJlZigqbmV3
IE1lZGlhU291cmNlR1N0cmVhbWVyKHNyYykpKTsKKyAgICBBU1NFUlQobWVkaWFTb3VyY2UpOwor
ICAgIG1lZGlhU291cmNlLT5zZXRQcml2YXRlQW5kT3BlbihhZG9wdFJlZigqbmV3IE1lZGlhU291
cmNlR1N0cmVhbWVyKG1lZGlhU291cmNlLCBzcmMpKSk7CiB9CiAKLU1lZGlhU291cmNlR1N0cmVh
bWVyOjpNZWRpYVNvdXJjZUdTdHJlYW1lcihXZWJLaXRNZWRpYVNyYyogc3JjKQorTWVkaWFTb3Vy
Y2VHU3RyZWFtZXI6Ok1lZGlhU291cmNlR1N0cmVhbWVyKE1lZGlhU291cmNlUHJpdmF0ZUNsaWVu
dCogbWVkaWFTb3VyY2UsIFdlYktpdE1lZGlhU3JjKiBzcmMpCiAgICAgOiBtX2NsaWVudChhZG9w
dFJlZihuZXcgTWVkaWFTb3VyY2VDbGllbnRHc3RyZWFtZXIoc3JjKSkpCisgICAgLCBtX21lZGlh
U291cmNlKG1lZGlhU291cmNlKQogICAgICwgbV9yZWFkeVN0YXRlKE1lZGlhUGxheWVyOjpIYXZl
Tm90aGluZykKIHsKKyAgICBBU1NFUlQobV9jbGllbnQpOwogfQogCiBNZWRpYVNvdXJjZUdTdHJl
YW1lcjo6fk1lZGlhU291cmNlR1N0cmVhbWVyKCkKQEAgLTYxLDIyICs2NCwxOCBAQCBNZWRpYVNv
dXJjZUdTdHJlYW1lcjo6QWRkU3RhdHVzIE1lZGlhU291cmNlR1N0cmVhbWVyOjphZGRTb3VyY2VC
dWZmZXIoY29uc3QgQ29udAogICAgIHJldHVybiBNZWRpYVNvdXJjZUdTdHJlYW1lcjo6T2s7CiB9
CiAKLXZvaWQgTWVkaWFTb3VyY2VHU3RyZWFtZXI6OnNldER1cmF0aW9uKGNvbnN0IE1lZGlhVGlt
ZSYgZHVyYXRpb24pCit2b2lkIE1lZGlhU291cmNlR1N0cmVhbWVyOjpkdXJhdGlvbkNoYW5nZWQo
KQogewotICAgIEFTU0VSVChtX2NsaWVudCk7Ci0gICAgbV9kdXJhdGlvbiA9IGR1cmF0aW9uOwot
ICAgIG1fY2xpZW50LT5kaWRSZWNlaXZlRHVyYXRpb24oZHVyYXRpb24udG9Eb3VibGUoKSk7Cisg
ICAgbV9jbGllbnQtPmRpZFJlY2VpdmVEdXJhdGlvbihtX21lZGlhU291cmNlLT5kdXJhdGlvbigp
KTsKIH0KIAogdm9pZCBNZWRpYVNvdXJjZUdTdHJlYW1lcjo6bWFya0VuZE9mU3RyZWFtKEVuZE9m
U3RyZWFtU3RhdHVzKQogewotICAgIEFTU0VSVChtX2NsaWVudCk7CiAgICAgbV9jbGllbnQtPmRp
ZEZpbmlzaExvYWRpbmcoMCk7CiB9CiAKIHZvaWQgTWVkaWFTb3VyY2VHU3RyZWFtZXI6OnVubWFy
a0VuZE9mU3RyZWFtKCkKIHsKLSAgICBBU1NFUlQobV9jbGllbnQpOwogfQogCiB9CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvTWVkaWFTb3Vy
Y2VHU3RyZWFtZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1l
ci9NZWRpYVNvdXJjZUdTdHJlYW1lci5oCmluZGV4IDI3NDZhMTZkODU2NDcwMTNhY2M0ZTg2Zjg4
YmFmOWJkMDkzYzlmYmIuLmQyZmMzN2RhMDE3YWQ5ZWFmOTIxM2E0ZGFhMzE4MWRhOWI3OWU4OWIg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9N
ZWRpYVNvdXJjZUdTdHJlYW1lci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2dzdHJlYW1lci9NZWRpYVNvdXJjZUdTdHJlYW1lci5oCkBAIC0zOCwyMiArMzgsMjUgQEAK
IAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1jbGFzcyBNZWRpYVNvdXJjZUdTdHJlYW1lciBmaW5h
bCA6IHB1YmxpYyBNZWRpYVNvdXJjZVByaXZhdGUgeworY2xhc3MgTWVkaWFTb3VyY2VHU3RyZWFt
ZXIgZmluYWwgOiBNZWRpYVNvdXJjZVByaXZhdGUgewogcHVibGljOgogICAgIHN0YXRpYyB2b2lk
IG9wZW4oTWVkaWFTb3VyY2VQcml2YXRlQ2xpZW50KiwgV2ViS2l0TWVkaWFTcmMqKTsKICAgICB+
TWVkaWFTb3VyY2VHU3RyZWFtZXIoKTsKLSAgICBBZGRTdGF0dXMgYWRkU291cmNlQnVmZmVyKGNv
bnN0IENvbnRlbnRUeXBlJiwgUmVmUHRyPFNvdXJjZUJ1ZmZlclByaXZhdGU+Jik7Ci0gICAgTWVk
aWFUaW1lIGR1cmF0aW9uKCkgeyByZXR1cm4gbV9kdXJhdGlvbjsgfQotICAgIHZvaWQgc2V0RHVy
YXRpb24oY29uc3QgTWVkaWFUaW1lJik7Ci0gICAgdm9pZCBtYXJrRW5kT2ZTdHJlYW0oRW5kT2ZT
dHJlYW1TdGF0dXMpOwotICAgIHZvaWQgdW5tYXJrRW5kT2ZTdHJlYW0oKTsKLSAgICBNZWRpYVBs
YXllcjo6UmVhZHlTdGF0ZSByZWFkeVN0YXRlKCkgY29uc3QgeyByZXR1cm4gbV9yZWFkeVN0YXRl
OyB9Ci0gICAgdm9pZCBzZXRSZWFkeVN0YXRlKE1lZGlhUGxheWVyOjpSZWFkeVN0YXRlIHJlYWR5
U3RhdGUpIHsgbV9yZWFkeVN0YXRlID0gcmVhZHlTdGF0ZTsgfQogCiBwcml2YXRlOgorICAgIC8v
IE1lZGlhU291cmNlUHJpdmF0ZQorICAgIHZpcnR1YWwgQWRkU3RhdHVzIGFkZFNvdXJjZUJ1ZmZl
cihjb25zdCBDb250ZW50VHlwZSYsIFJlZlB0cjxTb3VyY2VCdWZmZXJQcml2YXRlPiYpIG92ZXJy
aWRlOworICAgIHZpcnR1YWwgdm9pZCBkdXJhdGlvbkNoYW5nZWQoKSBvdmVycmlkZTsKKyAgICB2
aXJ0dWFsIHZvaWQgbWFya0VuZE9mU3RyZWFtKEVuZE9mU3RyZWFtU3RhdHVzKSBvdmVycmlkZTsK
KyAgICB2aXJ0dWFsIHZvaWQgdW5tYXJrRW5kT2ZTdHJlYW0oKSBvdmVycmlkZTsKKyAgICB2aXJ0
dWFsIE1lZGlhUGxheWVyOjpSZWFkeVN0YXRlIHJlYWR5U3RhdGUoKSBjb25zdCBvdmVycmlkZSB7
IHJldHVybiBtX3JlYWR5U3RhdGU7IH0KKyAgICB2aXJ0dWFsIHZvaWQgc2V0UmVhZHlTdGF0ZShN
ZWRpYVBsYXllcjo6UmVhZHlTdGF0ZSByZWFkeVN0YXRlKSBvdmVycmlkZSB7IG1fcmVhZHlTdGF0
ZSA9IHJlYWR5U3RhdGU7IH0KKyAgICB2aXJ0dWFsIHZvaWQgd2FpdEZvclNlZWtDb21wbGV0ZWQo
KSBvdmVycmlkZSB7IH0KKyAgICB2aXJ0dWFsIHZvaWQgc2Vla0NvbXBsZXRlZCgpIG92ZXJyaWRl
IHsgfQorCiAgICAgUmVmUHRyPE1lZGlhU291cmNlQ2xpZW50R3N0cmVhbWVyPiBtX2NsaWVudDsK
KyAgICBNZWRpYVNvdXJjZVByaXZhdGVDbGllbnQqIG1fbWVkaWFTb3VyY2U7CiAgICAgTWVkaWFT
b3VyY2VHU3RyZWFtZXIoV2ViS2l0TWVkaWFTcmMqKTsKLSAgICBNZWRpYVRpbWUgbV9kdXJhdGlv
bjsKICAgICBNZWRpYVBsYXllcjo6UmVhZHlTdGF0ZSBtX3JlYWR5U3RhdGU7CiB9OwogCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tb2NrL21lZGlhc291cmNlL01vY2tNZWRp
YVBsYXllck1lZGlhU291cmNlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21vY2svbWVk
aWFzb3VyY2UvTW9ja01lZGlhUGxheWVyTWVkaWFTb3VyY2UuY3BwCmluZGV4IGUzNzVmY2U2YjRi
MmE5YTkxMjdhYmFiY2YyMjM0Njk3YmUyODNjN2IuLjZmNTFjMjQ4NjczZDQxMWY1OThkNWUyNmZh
YmE0MjA4YjkyOTg4NmYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21vY2sv
bWVkaWFzb3VyY2UvTW9ja01lZGlhUGxheWVyTWVkaWFTb3VyY2UuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL21vY2svbWVkaWFzb3VyY2UvTW9ja01lZGlhUGxheWVyTWVkaWFTb3Vy
Y2UuY3BwCkBAIC04NCwxMCArODQsMTAgQEAgTWVkaWFQbGF5ZXI6OlN1cHBvcnRzVHlwZSBNb2Nr
TWVkaWFQbGF5ZXJNZWRpYVNvdXJjZTo6c3VwcG9ydHNUeXBlKGNvbnN0IE1lZGlhRW4KIE1vY2tN
ZWRpYVBsYXllck1lZGlhU291cmNlOjpNb2NrTWVkaWFQbGF5ZXJNZWRpYVNvdXJjZShNZWRpYVBs
YXllciogcGxheWVyKQogICAgIDogbV9wbGF5ZXIocGxheWVyKQogICAgICwgbV9jdXJyZW50VGlt
ZShNZWRpYVRpbWU6Onplcm9UaW1lKCkpCi0gICAgLCBtX2R1cmF0aW9uKE1lZGlhVGltZTo6emVy
b1RpbWUoKSkKICAgICAsIG1fcmVhZHlTdGF0ZShNZWRpYVBsYXllcjo6SGF2ZU5vdGhpbmcpCiAg
ICAgLCBtX25ldHdvcmtTdGF0ZShNZWRpYVBsYXllcjo6RW1wdHkpCiAgICAgLCBtX3BsYXlpbmco
ZmFsc2UpCisgICAgLCBtX3NlZWtDb21wbGV0ZWQodHJ1ZSkKIHsKIH0KIApAQCAtMTAyLDkgKzEw
Miw3IEBAIHZvaWQgTW9ja01lZGlhUGxheWVyTWVkaWFTb3VyY2U6OmxvYWQoY29uc3QgU3RyaW5n
JikKIAogdm9pZCBNb2NrTWVkaWFQbGF5ZXJNZWRpYVNvdXJjZTo6bG9hZChjb25zdCBTdHJpbmcm
LCBNZWRpYVNvdXJjZVByaXZhdGVDbGllbnQqIHNvdXJjZSkKIHsKLSAgICBtX21lZGlhU291cmNl
ID0gc291cmNlOwotICAgIG1fbWVkaWFTb3VyY2VQcml2YXRlID0gTW9ja01lZGlhU291cmNlUHJp
dmF0ZTo6Y3JlYXRlKHRoaXMpOwotICAgIG1fbWVkaWFTb3VyY2UtPnNldFByaXZhdGVBbmRPcGVu
KCptX21lZGlhU291cmNlUHJpdmF0ZSk7CisgICAgbV9tZWRpYVNvdXJjZVByaXZhdGUgPSBNb2Nr
TWVkaWFTb3VyY2VQcml2YXRlOjpjcmVhdGUodGhpcywgc291cmNlKTsKIH0KIAogdm9pZCBNb2Nr
TWVkaWFQbGF5ZXJNZWRpYVNvdXJjZTo6Y2FuY2VsTG9hZCgpCkBAIC0xNDMsNyArMTQxLDcgQEAg
dm9pZCBNb2NrTWVkaWFQbGF5ZXJNZWRpYVNvdXJjZTo6c2V0VmlzaWJsZShib29sKQogCiBib29s
IE1vY2tNZWRpYVBsYXllck1lZGlhU291cmNlOjpzZWVraW5nKCkgY29uc3QKIHsKLSAgICByZXR1
cm4gZmFsc2U7CisgICAgcmV0dXJuICFtX3NlZWtDb21wbGV0ZWQ7CiB9CiAKIGJvb2wgTW9ja01l
ZGlhUGxheWVyTWVkaWFTb3VyY2U6OnBhdXNlZCgpIGNvbnN0CkBAIC0xNjgsOCArMTY2LDggQEAg
ZG91YmxlIE1vY2tNZWRpYVBsYXllck1lZGlhU291cmNlOjptYXhUaW1lU2Vla2FibGVEb3VibGUo
KSBjb25zdAogCiBzdGQ6OnVuaXF1ZV9wdHI8UGxhdGZvcm1UaW1lUmFuZ2VzPiBNb2NrTWVkaWFQ
bGF5ZXJNZWRpYVNvdXJjZTo6YnVmZmVyZWQoKSBjb25zdAogewotICAgIGlmIChtX21lZGlhU291
cmNlKQotICAgICAgICByZXR1cm4gbV9tZWRpYVNvdXJjZS0+YnVmZmVyZWQoKTsKKyAgICBpZiAo
bV9tZWRpYVNvdXJjZVByaXZhdGUpCisgICAgICAgIHJldHVybiBtX21lZGlhU291cmNlUHJpdmF0
ZS0+YnVmZmVyZWQoKTsKIAogICAgIHJldHVybiBQbGF0Zm9ybVRpbWVSYW5nZXM6OmNyZWF0ZSgp
OwogfQpAQCAtMTk0LDcgKzE5Miw3IEBAIGRvdWJsZSBNb2NrTWVkaWFQbGF5ZXJNZWRpYVNvdXJj
ZTo6Y3VycmVudFRpbWVEb3VibGUoKSBjb25zdAogCiBkb3VibGUgTW9ja01lZGlhUGxheWVyTWVk
aWFTb3VyY2U6OmR1cmF0aW9uRG91YmxlKCkgY29uc3QKIHsKLSAgICByZXR1cm4gbV9kdXJhdGlv
bi50b0RvdWJsZSgpOworICAgIHJldHVybiBtX21lZGlhU291cmNlUHJpdmF0ZSA/IG1fbWVkaWFT
b3VyY2VQcml2YXRlLT5kdXJhdGlvbigpIDogMDsKIH0KIAogdm9pZCBNb2NrTWVkaWFQbGF5ZXJN
ZWRpYVNvdXJjZTo6c2Vla1dpdGhUb2xlcmFuY2UoZG91YmxlIHRpbWUsIGRvdWJsZSBuZWdhdGl2
ZVRvbGVyYW5jZSwgZG91YmxlIHBvc2l0aXZlVG9sZXJhbmNlKQpAQCAtMjA0LDE4ICsyMDIsMjEg
QEAgdm9pZCBNb2NrTWVkaWFQbGF5ZXJNZWRpYVNvdXJjZTo6c2Vla1dpdGhUb2xlcmFuY2UoZG91
YmxlIHRpbWUsIGRvdWJsZSBuZWdhdGl2ZVQKICAgICAgICAgbV9tZWRpYVNvdXJjZVByaXZhdGUt
PnNlZWtUb1RpbWUoTWVkaWFUaW1lOjpjcmVhdGVXaXRoRG91YmxlKHRpbWUpKTsKICAgICB9IGVs
c2UKICAgICAgICAgbV9jdXJyZW50VGltZSA9IG1fbWVkaWFTb3VyY2VQcml2YXRlLT5zZWVrVG9U
aW1lKE1lZGlhVGltZTo6Y3JlYXRlV2l0aERvdWJsZSh0aW1lKSwgTWVkaWFUaW1lOjpjcmVhdGVX
aXRoRG91YmxlKG5lZ2F0aXZlVG9sZXJhbmNlKSwgTWVkaWFUaW1lOjpjcmVhdGVXaXRoRG91Ymxl
KHBvc2l0aXZlVG9sZXJhbmNlKSk7Ci0gICAgbV9wbGF5ZXItPnRpbWVDaGFuZ2VkKCk7CiAKLSAg
ICBpZiAobV9wbGF5aW5nKQotICAgICAgICBjYWxsT25NYWluVGhyZWFkKGJpbmQoJk1vY2tNZWRp
YVBsYXllck1lZGlhU291cmNlOjphZHZhbmNlQ3VycmVudFRpbWUsIHRoaXMpKTsKKyAgICBpZiAo
bV9zZWVrQ29tcGxldGVkKSB7CisgICAgICAgIG1fcGxheWVyLT50aW1lQ2hhbmdlZCgpOworCisg
ICAgICAgIGlmIChtX3BsYXlpbmcpCisgICAgICAgICAgICBjYWxsT25NYWluVGhyZWFkKGJpbmQo
Jk1vY2tNZWRpYVBsYXllck1lZGlhU291cmNlOjphZHZhbmNlQ3VycmVudFRpbWUsIHRoaXMpKTsK
KyAgICB9CiB9CiAKIHZvaWQgTW9ja01lZGlhUGxheWVyTWVkaWFTb3VyY2U6OmFkdmFuY2VDdXJy
ZW50VGltZSgpCiB7Ci0gICAgaWYgKCFtX21lZGlhU291cmNlKQorICAgIGlmICghbV9tZWRpYVNv
dXJjZVByaXZhdGUpCiAgICAgICAgIHJldHVybjsKIAotICAgIGF1dG8gYnVmZmVyZWQgPSBtX21l
ZGlhU291cmNlLT5idWZmZXJlZCgpOworICAgIGF1dG8gYnVmZmVyZWQgPSBtX21lZGlhU291cmNl
UHJpdmF0ZS0+YnVmZmVyZWQoKTsKICAgICBzaXplX3QgcG9zID0gYnVmZmVyZWQtPmZpbmQobV9j
dXJyZW50VGltZSk7CiAgICAgaWYgKHBvcyA9PSBub3RGb3VuZCkKICAgICAgICAgcmV0dXJuOwpA
QCAtMjUyLDYgKzI1MywyMyBAQCB2b2lkIE1vY2tNZWRpYVBsYXllck1lZGlhU291cmNlOjpzZXRO
ZXR3b3JrU3RhdGUoTWVkaWFQbGF5ZXI6Ok5ldHdvcmtTdGF0ZSBuZXR3bwogICAgIG1fcGxheWVy
LT5uZXR3b3JrU3RhdGVDaGFuZ2VkKCk7CiB9CiAKK3ZvaWQgTW9ja01lZGlhUGxheWVyTWVkaWFT
b3VyY2U6OndhaXRGb3JTZWVrQ29tcGxldGVkKCkKK3sKKyAgICBtX3NlZWtDb21wbGV0ZWQgPSBm
YWxzZTsKK30KKwordm9pZCBNb2NrTWVkaWFQbGF5ZXJNZWRpYVNvdXJjZTo6c2Vla0NvbXBsZXRl
ZCgpCit7CisgICAgaWYgKG1fc2Vla0NvbXBsZXRlZCkKKyAgICAgICAgcmV0dXJuOworICAgIG1f
c2Vla0NvbXBsZXRlZCA9IHRydWU7CisKKyAgICBtX3BsYXllci0+dGltZUNoYW5nZWQoKTsKKwor
ICAgIGlmIChtX3BsYXlpbmcpCisgICAgICAgIGNhbGxPbk1haW5UaHJlYWQoYmluZCgmTW9ja01l
ZGlhUGxheWVyTWVkaWFTb3VyY2U6OmFkdmFuY2VDdXJyZW50VGltZSwgdGhpcykpOworfQorCiB1
bnNpZ25lZCBsb25nIE1vY2tNZWRpYVBsYXllck1lZGlhU291cmNlOjp0b3RhbFZpZGVvRnJhbWVz
KCkKIHsKICAgICByZXR1cm4gbV9tZWRpYVNvdXJjZVByaXZhdGUgPyBtX21lZGlhU291cmNlUHJp
dmF0ZS0+dG90YWxWaWRlb0ZyYW1lcygpIDogMDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL21vY2svbWVkaWFzb3VyY2UvTW9ja01lZGlhUGxheWVyTWVkaWFTb3VyY2UuaCBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21vY2svbWVkaWFzb3VyY2UvTW9ja01lZGlhUGxheWVy
TWVkaWFTb3VyY2UuaAppbmRleCA5MmUxM2IxNjU5MmM1MWUyMWU0Njc0ZjU4MWY5YThmNmE2YmVm
YTgxLi41YTZkYTlkZDM5M2U5MDk5YjZkOTI2ZWVhM2VjOWJiMTBmNjg4Mjk1IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tb2NrL21lZGlhc291cmNlL01vY2tNZWRpYVBsYXll
ck1lZGlhU291cmNlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbW9jay9tZWRpYXNv
dXJjZS9Nb2NrTWVkaWFQbGF5ZXJNZWRpYVNvdXJjZS5oCkBAIC01Miw2ICs1Miw4IEBAIHB1Ymxp
YzoKICAgICB2aXJ0dWFsIE1lZGlhUGxheWVyOjpSZWFkeVN0YXRlIHJlYWR5U3RhdGUoKSBjb25z
dCBvdmVycmlkZTsKICAgICB2b2lkIHNldFJlYWR5U3RhdGUoTWVkaWFQbGF5ZXI6OlJlYWR5U3Rh
dGUpOwogICAgIHZvaWQgc2V0TmV0d29ya1N0YXRlKE1lZGlhUGxheWVyOjpOZXR3b3JrU3RhdGUp
OworICAgIHZvaWQgd2FpdEZvclNlZWtDb21wbGV0ZWQoKTsKKyAgICB2b2lkIHNlZWtDb21wbGV0
ZWQoKTsKIAogcHJpdmF0ZToKICAgICBNb2NrTWVkaWFQbGF5ZXJNZWRpYVNvdXJjZShNZWRpYVBs
YXllciopOwpAQCAtODMsNyArODUsNiBAQCBwcml2YXRlOgogICAgIHZpcnR1YWwgZG91YmxlIHRv
dGFsRnJhbWVEZWxheSgpIG92ZXJyaWRlOwogCiAgICAgTWVkaWFQbGF5ZXIqIG1fcGxheWVyOwot
ICAgIFJlZlB0cjxNZWRpYVNvdXJjZVByaXZhdGVDbGllbnQ+IG1fbWVkaWFTb3VyY2U7CiAgICAg
UmVmUHRyPE1vY2tNZWRpYVNvdXJjZVByaXZhdGU+IG1fbWVkaWFTb3VyY2VQcml2YXRlOwogCiAg
ICAgTWVkaWFUaW1lIG1fY3VycmVudFRpbWU7CkBAIC05MSw2ICs5Miw3IEBAIHByaXZhdGU6CiAg
ICAgTWVkaWFQbGF5ZXI6OlJlYWR5U3RhdGUgbV9yZWFkeVN0YXRlOwogICAgIE1lZGlhUGxheWVy
OjpOZXR3b3JrU3RhdGUgbV9uZXR3b3JrU3RhdGU7CiAgICAgYm9vbCBtX3BsYXlpbmc7CisgICAg
Ym9vbCBtX3NlZWtDb21wbGV0ZWQ7CiB9OwogCiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9tb2NrL21lZGlhc291cmNlL01vY2tNZWRpYVNvdXJjZVByaXZhdGUuY3BwIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbW9jay9tZWRpYXNvdXJjZS9Nb2NrTWVkaWFTb3VyY2VQ
cml2YXRlLmNwcAppbmRleCA3MjQ5MzczYWVlMzcwY2UxODgyMWRmMWZkZGY3NjAxMmNlNjQ1YTdk
Li5mYjQ5ZDRlZGMxMWI1MjkyNzM2YWZlZDIyYTU2NjQ3Yzc0ZjQ4ZTJmIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tb2NrL21lZGlhc291cmNlL01vY2tNZWRpYVNvdXJjZVBy
aXZhdGUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21vY2svbWVkaWFzb3VyY2Uv
TW9ja01lZGlhU291cmNlUHJpdmF0ZS5jcHAKQEAgLTMwLDE5ICszMCwyMiBAQAogCiAjaW5jbHVk
ZSAiQ29udGVudFR5cGUuaCIKICNpbmNsdWRlICJFeGNlcHRpb25Db2RlUGxhY2Vob2xkZXIuaCIK
KyNpbmNsdWRlICJNZWRpYVNvdXJjZVByaXZhdGVDbGllbnQuaCIKICNpbmNsdWRlICJNb2NrTWVk
aWFQbGF5ZXJNZWRpYVNvdXJjZS5oIgogI2luY2x1ZGUgIk1vY2tTb3VyY2VCdWZmZXJQcml2YXRl
LmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotUmVmUHRyPE1vY2tNZWRpYVNvdXJjZVByaXZh
dGU+IE1vY2tNZWRpYVNvdXJjZVByaXZhdGU6OmNyZWF0ZShNb2NrTWVkaWFQbGF5ZXJNZWRpYVNv
dXJjZSogcGFyZW50KQorUmVmUHRyPE1vY2tNZWRpYVNvdXJjZVByaXZhdGU+IE1vY2tNZWRpYVNv
dXJjZVByaXZhdGU6OmNyZWF0ZShNb2NrTWVkaWFQbGF5ZXJNZWRpYVNvdXJjZSogcGFyZW50LCBN
ZWRpYVNvdXJjZVByaXZhdGVDbGllbnQqIGNsaWVudCkKIHsKLSAgICByZXR1cm4gYWRvcHRSZWYo
bmV3IE1vY2tNZWRpYVNvdXJjZVByaXZhdGUocGFyZW50KSk7CisgICAgUmVmUHRyPE1vY2tNZWRp
YVNvdXJjZVByaXZhdGU+IG1lZGlhU291cmNlUHJpdmF0ZSA9IGFkb3B0UmVmKG5ldyBNb2NrTWVk
aWFTb3VyY2VQcml2YXRlKHBhcmVudCwgY2xpZW50KSk7CisgICAgY2xpZW50LT5zZXRQcml2YXRl
QW5kT3BlbigqbWVkaWFTb3VyY2VQcml2YXRlKTsKKyAgICByZXR1cm4gbWVkaWFTb3VyY2VQcml2
YXRlOwogfQogCi1Nb2NrTWVkaWFTb3VyY2VQcml2YXRlOjpNb2NrTWVkaWFTb3VyY2VQcml2YXRl
KE1vY2tNZWRpYVBsYXllck1lZGlhU291cmNlKiBwYXJlbnQpCitNb2NrTWVkaWFTb3VyY2VQcml2
YXRlOjpNb2NrTWVkaWFTb3VyY2VQcml2YXRlKE1vY2tNZWRpYVBsYXllck1lZGlhU291cmNlKiBw
YXJlbnQsIE1lZGlhU291cmNlUHJpdmF0ZUNsaWVudCogY2xpZW50KQogICAgIDogbV9wbGF5ZXIo
cGFyZW50KQotICAgICwgbV9kdXJhdGlvbihNZWRpYVRpbWU6OmludmFsaWRUaW1lKCkpCisgICAg
LCBtX2NsaWVudChjbGllbnQpCiAgICAgLCBtX2lzRW5kZWQoZmFsc2UpCiAgICAgLCBtX3RvdGFs
VmlkZW9GcmFtZXMoMCkKICAgICAsIG1fZHJvcHBlZFZpZGVvRnJhbWVzKDApCkBAIC04NCwxOCAr
ODcsMTkgQEAgdm9pZCBNb2NrTWVkaWFTb3VyY2VQcml2YXRlOjpyZW1vdmVTb3VyY2VCdWZmZXIo
U291cmNlQnVmZmVyUHJpdmF0ZSogYnVmZmVyKQogICAgIG1fc291cmNlQnVmZmVycy5yZW1vdmUo
cG9zKTsKIH0KIAotTWVkaWFUaW1lIE1vY2tNZWRpYVNvdXJjZVByaXZhdGU6OmR1cmF0aW9uKCkK
K2RvdWJsZSBNb2NrTWVkaWFTb3VyY2VQcml2YXRlOjpkdXJhdGlvbigpCiB7Ci0gICAgcmV0dXJu
IG1fZHVyYXRpb247CisgICAgcmV0dXJuIG1fY2xpZW50LT5kdXJhdGlvbigpOwogfQogCi12b2lk
IE1vY2tNZWRpYVNvdXJjZVByaXZhdGU6OnNldER1cmF0aW9uKGNvbnN0IE1lZGlhVGltZSYgZHVy
YXRpb24pCitzdGQ6OnVuaXF1ZV9wdHI8UGxhdGZvcm1UaW1lUmFuZ2VzPiBNb2NrTWVkaWFTb3Vy
Y2VQcml2YXRlOjpidWZmZXJlZCgpCiB7Ci0gICAgaWYgKGR1cmF0aW9uID09IG1fZHVyYXRpb24p
Ci0gICAgICAgIHJldHVybjsKKyAgICByZXR1cm4gbV9jbGllbnQtPmJ1ZmZlcmVkKCk7Cit9CiAK
LSAgICBtX2R1cmF0aW9uID0gZHVyYXRpb247Ci0gICAgbV9wbGF5ZXItPnVwZGF0ZUR1cmF0aW9u
KGR1cmF0aW9uKTsKK3ZvaWQgTW9ja01lZGlhU291cmNlUHJpdmF0ZTo6ZHVyYXRpb25DaGFuZ2Vk
KCkKK3sKKyAgICBtX3BsYXllci0+dXBkYXRlRHVyYXRpb24oTWVkaWFUaW1lOjpjcmVhdGVXaXRo
RG91YmxlKGR1cmF0aW9uKCkpKTsKIH0KIAogdm9pZCBNb2NrTWVkaWFTb3VyY2VQcml2YXRlOjpt
YXJrRW5kT2ZTdHJlYW0oRW5kT2ZTdHJlYW1TdGF0dXMgc3RhdHVzKQpAQCAtMTIwLDYgKzEyNCwx
NiBAQCB2b2lkIE1vY2tNZWRpYVNvdXJjZVByaXZhdGU6OnNldFJlYWR5U3RhdGUoTWVkaWFQbGF5
ZXI6OlJlYWR5U3RhdGUgcmVhZHlTdGF0ZSkKICAgICBtX3BsYXllci0+c2V0UmVhZHlTdGF0ZShy
ZWFkeVN0YXRlKTsKIH0KIAordm9pZCBNb2NrTWVkaWFTb3VyY2VQcml2YXRlOjp3YWl0Rm9yU2Vl
a0NvbXBsZXRlZCgpCit7CisgICAgbV9wbGF5ZXItPndhaXRGb3JTZWVrQ29tcGxldGVkKCk7Cit9
CisKK3ZvaWQgTW9ja01lZGlhU291cmNlUHJpdmF0ZTo6c2Vla0NvbXBsZXRlZCgpCit7CisgICAg
bV9wbGF5ZXItPnNlZWtDb21wbGV0ZWQoKTsKK30KKwogdm9pZCBNb2NrTWVkaWFTb3VyY2VQcml2
YXRlOjpzb3VyY2VCdWZmZXJQcml2YXRlRGlkQ2hhbmdlQWN0aXZlU3RhdGUoTW9ja1NvdXJjZUJ1
ZmZlclByaXZhdGUqIGJ1ZmZlciwgYm9vbCBhY3RpdmUpCiB7CiAgICAgaWYgKGFjdGl2ZSAmJiAh
bV9hY3RpdmVTb3VyY2VCdWZmZXJzLmNvbnRhaW5zKGJ1ZmZlcikpCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9tb2NrL21lZGlhc291cmNlL01vY2tNZWRpYVNvdXJjZVByaXZh
dGUuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21vY2svbWVkaWFzb3VyY2UvTW9ja01lZGlh
U291cmNlUHJpdmF0ZS5oCmluZGV4IGY3OWIxMTAyZDUyMjA0Y2U2MzNmNjAxMDFiYTZkZDlmYTQx
N2M4ZTUuLjBiMzVhMTBiOWY3NzczNmVlNGY1NTNkOWRmNjU3MWI4M2E4ZTYxNjEgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21vY2svbWVkaWFzb3VyY2UvTW9ja01lZGlhU291
cmNlUHJpdmF0ZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21vY2svbWVkaWFzb3Vy
Y2UvTW9ja01lZGlhU291cmNlUHJpdmF0ZS5oCkBAIC0zOSw3ICszOSw3IEBAIGNsYXNzIFRpbWVS
YW5nZXM7CiAKIGNsYXNzIE1vY2tNZWRpYVNvdXJjZVByaXZhdGUgZmluYWwgOiBwdWJsaWMgTWVk
aWFTb3VyY2VQcml2YXRlIHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgUmVmUHRyPE1vY2tNZWRpYVNv
dXJjZVByaXZhdGU+IGNyZWF0ZShNb2NrTWVkaWFQbGF5ZXJNZWRpYVNvdXJjZSopOworICAgIHN0
YXRpYyBSZWZQdHI8TW9ja01lZGlhU291cmNlUHJpdmF0ZT4gY3JlYXRlKE1vY2tNZWRpYVBsYXll
ck1lZGlhU291cmNlKiwgTWVkaWFTb3VyY2VQcml2YXRlQ2xpZW50Kik7CiAgICAgdmlydHVhbCB+
TW9ja01lZGlhU291cmNlUHJpdmF0ZSgpOwogCiAgICAgY29uc3QgVmVjdG9yPE1vY2tTb3VyY2VC
dWZmZXJQcml2YXRlKj4mIGFjdGl2ZVNvdXJjZUJ1ZmZlcnMoKSBjb25zdCB7IHJldHVybiBtX2Fj
dGl2ZVNvdXJjZUJ1ZmZlcnM7IH0KQEAgLTQ3LDYgKzQ3LDkgQEAgcHVibGljOgogICAgIGJvb2wg
aGFzQXVkaW8oKSBjb25zdDsKICAgICBib29sIGhhc1ZpZGVvKCkgY29uc3Q7CiAKKyAgICBkb3Vi
bGUgZHVyYXRpb24oKTsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8UGxhdGZvcm1UaW1lUmFuZ2VzPiBi
dWZmZXJlZCgpOworCiAgICAgTW9ja01lZGlhUGxheWVyTWVkaWFTb3VyY2UqIHBsYXllcigpIGNv
bnN0IHsgcmV0dXJuIG1fcGxheWVyOyB9CiAKICAgICB2b2lkIHNlZWtUb1RpbWUoY29uc3QgTWVk
aWFUaW1lJik7CkBAIC02MywxNiArNjYsMTcgQEAgcHVibGljOgogICAgIHZvaWQgaW5jcmVtZW50
VG90YWxGcmFtZURlbGF5QnkoZG91YmxlIGRlbGF5KSB7IG1fdG90YWxGcmFtZURlbGF5ICs9IGRl
bGF5OyB9CiAKIHByaXZhdGU6Ci0gICAgTW9ja01lZGlhU291cmNlUHJpdmF0ZShNb2NrTWVkaWFQ
bGF5ZXJNZWRpYVNvdXJjZSopOworICAgIE1vY2tNZWRpYVNvdXJjZVByaXZhdGUoTW9ja01lZGlh
UGxheWVyTWVkaWFTb3VyY2UqLCBNZWRpYVNvdXJjZVByaXZhdGVDbGllbnQqKTsKIAogICAgIC8v
IE1lZGlhU291cmNlUHJpdmF0ZSBPdmVycmlkZXMKICAgICB2aXJ0dWFsIEFkZFN0YXR1cyBhZGRT
b3VyY2VCdWZmZXIoY29uc3QgQ29udGVudFR5cGUmLCBSZWZQdHI8U291cmNlQnVmZmVyUHJpdmF0
ZT4mKSBvdmVycmlkZTsKLSAgICB2aXJ0dWFsIE1lZGlhVGltZSBkdXJhdGlvbigpIG92ZXJyaWRl
OwotICAgIHZpcnR1YWwgdm9pZCBzZXREdXJhdGlvbihjb25zdCBNZWRpYVRpbWUmKSBvdmVycmlk
ZTsKKyAgICB2aXJ0dWFsIHZvaWQgZHVyYXRpb25DaGFuZ2VkKCkgb3ZlcnJpZGU7CiAgICAgdmly
dHVhbCB2b2lkIG1hcmtFbmRPZlN0cmVhbShFbmRPZlN0cmVhbVN0YXR1cykgb3ZlcnJpZGU7CiAg
ICAgdmlydHVhbCB2b2lkIHVubWFya0VuZE9mU3RyZWFtKCkgb3ZlcnJpZGU7CiAgICAgdmlydHVh
bCBNZWRpYVBsYXllcjo6UmVhZHlTdGF0ZSByZWFkeVN0YXRlKCkgY29uc3Qgb3ZlcnJpZGU7CiAg
ICAgdmlydHVhbCB2b2lkIHNldFJlYWR5U3RhdGUoTWVkaWFQbGF5ZXI6OlJlYWR5U3RhdGUpIG92
ZXJyaWRlOworICAgIHZpcnR1YWwgdm9pZCB3YWl0Rm9yU2Vla0NvbXBsZXRlZCgpIG92ZXJyaWRl
OworICAgIHZpcnR1YWwgdm9pZCBzZWVrQ29tcGxldGVkKCkgb3ZlcnJpZGU7CiAKICAgICB2b2lk
IHNvdXJjZUJ1ZmZlclByaXZhdGVEaWRDaGFuZ2VBY3RpdmVTdGF0ZShNb2NrU291cmNlQnVmZmVy
UHJpdmF0ZSosIGJvb2wgYWN0aXZlKTsKICAgICB2b2lkIHJlbW92ZVNvdXJjZUJ1ZmZlcihTb3Vy
Y2VCdWZmZXJQcml2YXRlKik7CkBAIC04MCw3ICs4NCw3IEBAIHByaXZhdGU6CiAgICAgZnJpZW5k
IGNsYXNzIE1vY2tTb3VyY2VCdWZmZXJQcml2YXRlOwogCiAgICAgTW9ja01lZGlhUGxheWVyTWVk
aWFTb3VyY2UqIG1fcGxheWVyOwotICAgIE1lZGlhVGltZSBtX2R1cmF0aW9uOworICAgIFJlZlB0
cjxNZWRpYVNvdXJjZVByaXZhdGVDbGllbnQ+IG1fY2xpZW50OwogICAgIFZlY3RvcjxSZWZQdHI8
TW9ja1NvdXJjZUJ1ZmZlclByaXZhdGU+PiBtX3NvdXJjZUJ1ZmZlcnM7CiAgICAgVmVjdG9yPE1v
Y2tTb3VyY2VCdWZmZXJQcml2YXRlKj4gbV9hY3RpdmVTb3VyY2VCdWZmZXJzOwogICAgIGJvb2wg
bV9pc0VuZGVkOwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nIGIvTGF5b3V0VGVz
dHMvQ2hhbmdlTG9nCmluZGV4IDUyNDBhNDcxOGI3YTMxNzcwYzA0Y2I1NTczOTM2OTgyZTgxNzlh
NTguLjQ5ZGRkODFjNDRkNTIzNmRhOThhOTMwN2MwNWI1MzFhZDIwZjMzMWMgMTAwNjQ0Ci0tLSBh
L0xheW91dFRlc3RzL0NoYW5nZUxvZworKysgYi9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwxNyBAQAorMjAxNC0wNy0xMSAgSmVyIE5vYmxlICA8amVyLm5vYmxlQGFwcGxlLmNvbT4K
KworICAgICAgICBbTVNFXSBodHRwL3Rlc3RzL21lZGlhL21lZGlhLXNvdXJjZS9tZWRpYXNvdXJj
ZS1kdXJhdGlvbi5odG1sIGlzIGZhaWxpbmcuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0xMzQ4NTIKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICBFbGltaW5hdGUgZmxha2luZXNzIGluIHRoZSBtZWRpYXNvdXJj
ZS1kdXJhdGlvbi5odG1sIHRlc3QgYnkgbm90IHBsYXlpbmcKKyAgICAgICAgdGhlIG1lZGlhIHdo
aWxlIHRlc3Rpbmcgc2Vla2luZyBhbmQgZHVyYXRpb24uCisgICAgICAgICogaHR0cC90ZXN0cy9t
ZWRpYS9tZWRpYS1zb3VyY2UvbWVkaWFzb3VyY2UtZHVyYXRpb24uaHRtbDoKKworICAgICAgICBV
cGRhdGUgdGVzdGhhcm5lc3MuanMgdG8gdGhlIGxhdGVzdCBXM0MgdmVyc2lvbjoKKyAgICAgICAg
KiBodHRwL3Rlc3RzL3czYy9yZXNvdXJjZXMvdGVzdGhhcm5lc3MuanM6CisKIDIwMTQtMDctMTEg
IFphbGFuIEJ1anRhcyAgPHphbGFuQGFwcGxlLmNvbT4KIAogICAgICAgICBSRUdSRVNTSU9OIChy
MTY4ODY4KTogZUJheSAnc2VlIGFsbCcgbGlua3MgZmFpbCBkdWUgdG8gZGlmZmVyZW50IEpTIGJp
bmRpbmdzIGNvbnZlcnNpb24gYmVoYXZpb3IuCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9odHRw
L3Rlc3RzL21lZGlhL21lZGlhLXNvdXJjZS9tZWRpYXNvdXJjZS1kdXJhdGlvbi5odG1sIGIvTGF5
b3V0VGVzdHMvaHR0cC90ZXN0cy9tZWRpYS9tZWRpYS1zb3VyY2UvbWVkaWFzb3VyY2UtZHVyYXRp
b24uaHRtbAppbmRleCBkNDMzOTE2ZDhiN2VhYjQyY2U5OGVhNGJjMjg4YjNjN2MzMDViNmNkLi5i
YWM1YmE5ZGNiOGE4MmVjYmIzOTI0Zjg5MTBjYzIyYjRhYThmOGY0IDEwMDY0NAotLS0gYS9MYXlv
dXRUZXN0cy9odHRwL3Rlc3RzL21lZGlhL21lZGlhLXNvdXJjZS9tZWRpYXNvdXJjZS1kdXJhdGlv
bi5odG1sCisrKyBiL0xheW91dFRlc3RzL2h0dHAvdGVzdHMvbWVkaWEvbWVkaWEtc291cmNlL21l
ZGlhc291cmNlLWR1cmF0aW9uLmh0bWwKQEAgLTE4LDExICsxOCw4IEBACiAgICAgICAgICAgICAg
ICAgICB2YXIgc2Vla1RvID0gZnVsbER1cmF0aW9uIC8gMi4wOwogICAgICAgICAgICAgICAgICAg
dmFyIHRydW5jYXRlZER1cmF0aW9uID0gc2Vla1RvIC8gMi4wOwogCi0gICAgICAgICAgICAgICAg
ICBtZWRpYUVsZW1lbnQucGxheSgpOwotCiAgICAgICAgICAgICAgICAgICAvLyBBcHBlbmQgYWxs
IHRoZSBzZWdtZW50cwogICAgICAgICAgICAgICAgICAgdGVzdC5leHBlY3RFdmVudChzb3VyY2VC
dWZmZXIsICd1cGRhdGVlbmQnLCAnc291cmNlQnVmZmVyJyk7Ci0gICAgICAgICAgICAgICAgICB0
ZXN0LmV4cGVjdEV2ZW50KG1lZGlhRWxlbWVudCwgJ3BsYXlpbmcnLCAnUGxheWluZyB0cmlnZ2Vy
ZWQnKTsKICAgICAgICAgICAgICAgICAgIHNvdXJjZUJ1ZmZlci5hcHBlbmRCdWZmZXIobWVkaWFE
YXRhKTsKIAogICAgICAgICAgICAgICAgICAgdGVzdC53YWl0Rm9yRXhwZWN0ZWRFdmVudHMoZnVu
Y3Rpb24oKQpAQCAtMTI2LDExICsxMjMsMTEgQEAKIAogICAgICAgICAgICAgICB0ZXN0LndhaXRG
b3JFeHBlY3RlZEV2ZW50cyhmdW5jdGlvbigpCiAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAg
ICAgICAgIGFzc2VydF9lcXVhbHMobWVkaWFFbGVtZW50LmN1cnJlbnRUaW1lLCB0cnVuY2F0ZWRE
dXJhdGlvbiwKKyAgICAgICAgICAgICAgICAgIGFzc2VydF9hcHByb3hfZXF1YWxzKG1lZGlhRWxl
bWVudC5jdXJyZW50VGltZSwgdHJ1bmNhdGVkRHVyYXRpb24sIDAuMDUsCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICdQbGF5YmFjayB0aW1lIGhhcyByZWFjaGVkIHRydW5jYXRlZER1
cmF0aW9uJyk7Ci0gICAgICAgICAgICAgICAgICBhc3NlcnRfZXF1YWxzKG1lZGlhRWxlbWVudC5k
dXJhdGlvbiwgdHJ1bmNhdGVkRHVyYXRpb24sCisgICAgICAgICAgICAgICAgICBhc3NlcnRfYXBw
cm94X2VxdWFscyhtZWRpYUVsZW1lbnQuZHVyYXRpb24sIHRydW5jYXRlZER1cmF0aW9uLCAwLjA1
LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnbWVkaWFFbGVtZW50IHRydW5jYXRl
ZER1cmF0aW9uIGFmdGVyIHNlZWsgdG8gaXQnKTsKLSAgICAgICAgICAgICAgICAgIGFzc2VydF9l
cXVhbHMobWVkaWFTb3VyY2UuZHVyYXRpb24sIHRydW5jYXRlZER1cmF0aW9uLAorICAgICAgICAg
ICAgICAgICAgYXNzZXJ0X2FwcHJveF9lcXVhbHMobWVkaWFTb3VyY2UuZHVyYXRpb24sIHRydW5j
YXRlZER1cmF0aW9uLCAwLjA1LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnbWVk
aWFTb3VyY2UgdHJ1bmNhdGVkRHVyYXRpb24gYWZ0ZXIgc2VlayB0byBpdCcpOwogICAgICAgICAg
ICAgICAgICAgYXNzZXJ0X2ZhbHNlKG1lZGlhRWxlbWVudC5zZWVraW5nLCAnbWVkaWFFbGVtZW50
LnNlZWtpbmcgYWZ0ZXIgc2Vla2VkIHRvIHRydW5jYXRlZER1cmF0aW9uJyk7CiAKQEAgLTE1NCwx
MSArMTUxLDggQEAKICAgICAgICAgICAgICAgICAgIGR1cmF0aW9uY2hhbmdlRXZlbnRDb3VudGVy
Kys7CiAgICAgICAgICAgICAgIH0pOwogCi0gICAgICAgICAgICAgIG1lZGlhRWxlbWVudC5wbGF5
KCk7Ci0KICAgICAgICAgICAgICAgLy8gQXBwZW5kIGFsbCB0aGUgc2VnbWVudHMKICAgICAgICAg
ICAgICAgdGVzdC5leHBlY3RFdmVudChzb3VyY2VCdWZmZXIsICd1cGRhdGVlbmQnLCAnc291cmNl
QnVmZmVyJyk7Ci0gICAgICAgICAgICAgIHRlc3QuZXhwZWN0RXZlbnQobWVkaWFFbGVtZW50LCAn
cGxheWluZycsICdQbGF5aW5nIHRyaWdnZXJlZCcpOwogICAgICAgICAgICAgICBzb3VyY2VCdWZm
ZXIuYXBwZW5kQnVmZmVyKG1lZGlhRGF0YSk7CiAKICAgICAgICAgICAgICAgdGVzdC53YWl0Rm9y
RXhwZWN0ZWRFdmVudHMoZnVuY3Rpb24oKQpAQCAtMjAxLDcgKzE5NSwxMCBAQAogICAgICAgICAg
ICAgICAgICAgICAgICsrZXhwZWN0ZWREdXJhdGlvbkNoYW5nZUV2ZW50Q291bnQ7CiAgICAgICAg
ICAgICAgICAgICB9CiAKKyAgICAgICAgICAgICAgICAgIG1lZGlhRWxlbWVudC5wbGF5KCk7CisK
ICAgICAgICAgICAgICAgICAgIC8vIEFsbG93IG1lZGlhIHRvIHBsYXkgdG8gZW5kIHdoaWxlIGNv
dW50aW5nICdkdXJhdGlvbmNoYW5nZScgZXZlbnRzLgorICAgICAgICAgICAgICAgICAgdGVzdC5l
eHBlY3RFdmVudChtZWRpYUVsZW1lbnQsICdwbGF5aW5nJywgJ1BsYXlpbmcgdHJpZ2dlcmVkJyk7
CiAgICAgICAgICAgICAgICAgICB0ZXN0LmV4cGVjdEV2ZW50KG1lZGlhRWxlbWVudCwgJ2VuZGVk
JywgJ1BsYXliYWNrIGVuZGVkJyk7CiAgICAgICAgICAgICAgICAgICB0ZXN0LndhaXRGb3JFeHBl
Y3RlZEV2ZW50cyhmdW5jdGlvbigpCiAgICAgICAgICAgICAgICAgICB7CkBAIC0yMTEsNiArMjA4
LDcgQEAKICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICB9KTsKICAgICAgICAg
ICB9LCAnVGVzdCBzZXR0aW5nIHNhbWUgZHVyYXRpb24gbXVsdGlwbGUgdGltZXMgZG9lcyBub3Qg
ZmlyZSBkdXBsaWNhdGUgZHVyYXRpb25jaGFuZ2UnLCB7dGltZW91dDogMjUwMH0pOworCiAgICAg
ICAgIDwvc2NyaXB0PgogICAgIDwvYm9keT4KIDwvaHRtbD4K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>234802</attachid>
            <date>2014-07-12 08:26:56 -0700</date>
            <delta_ts>2014-07-12 08:33:26 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-134852-20140712082638.patch</filename>
            <type>text/plain</type>
            <size>222917</size>
            <attacher name="Jer Noble">jer.noble</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTcxMDE3CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNGQ2YWZjNmE2NzdlY2Rk
ZmJlMzk3ZjYzNGUwN2FiZTZiNjM5MTczZC4uMjBhN2Y2MjBmNzRjYTFjYjRiNGViMmIwYjhiNDcw
ODhmMWI1N2I5MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSw1ICsxLDE0MCBAQAogMjAxNC0wNy0xMSAgSmVy
IE5vYmxlICA8amVyLm5vYmxlQGFwcGxlLmNvbT4KIAorICAgICAgICBbTVNFXSBodHRwL3Rlc3Rz
L21lZGlhL21lZGlhLXNvdXJjZS9tZWRpYXNvdXJjZS1kdXJhdGlvbi5odG1sIGlzIGZhaWxpbmcu
CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMzQ4NTIK
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBGaXhlcyB0
aGUgZm9sbG93aW5nIHRlc3RzOgorICAgICAgICBodHRwL3Rlc3RzL21lZGlhL21lZGlhLXNvdXJj
ZS9tZWRpYXNvdXJjZS1jb25maWctY2hhbmdlLW1wNC1hLWJpdHJhdGUuaHRtbAorICAgICAgICBo
dHRwL3Rlc3RzL21lZGlhL21lZGlhLXNvdXJjZS9tZWRpYXNvdXJjZS1jb25maWctY2hhbmdlLW1w
NC1hdi1hdWRpby1iaXRyYXRlLmh0bWwKKyAgICAgICAgaHR0cC90ZXN0cy9tZWRpYS9tZWRpYS1z
b3VyY2UvbWVkaWFzb3VyY2UtY29uZmlnLWNoYW5nZS1tcDQtYXYtdmlkZW8tYml0cmF0ZS5odG1s
CisgICAgICAgIGh0dHAvdGVzdHMvbWVkaWEvbWVkaWEtc291cmNlL21lZGlhc291cmNlLWNvbmZp
Zy1jaGFuZ2UtbXA0LXYtYml0cmF0ZS5odG1sCisgICAgICAgIGh0dHAvdGVzdHMvbWVkaWEvbWVk
aWEtc291cmNlL21lZGlhc291cmNlLWNvbmZpZy1jaGFuZ2UtbXA0LXYtZnJhbWVyYXRlLmh0bWwK
KyAgICAgICAgaHR0cC90ZXN0cy9tZWRpYS9tZWRpYS1zb3VyY2UvbWVkaWFzb3VyY2UtZHVyYXRp
b24uaHRtbAorICAgICAgICBodHRwL3Rlc3RzL21lZGlhL21lZGlhLXNvdXJjZS9tZWRpYXNvdXJj
ZS1wbGF5Lmh0bWwKKworICAgICAgICBUaGUgcHJpbWFyeSBjaGFuZ2UgbmVjZXNzYXJ5IHRvIGZp
eCB0aGUgbWVkaWFzb3VyY2UtZHVyYXRpb24uaHRtbCB0ZXN0IHdhcyB0byBhZGQgc3VwcG9ydAor
ICAgICAgICBmb3IgZGVsYXlpbmcgdGhlIGNvbXBsZXRpb24gb2YgYSBzZWVrIG9wZXJhdGlvbiB1
bnRpbCB0aGUgSFRNTE1lZGlhRWxlbWVudCdzIHJlYWR5U3RhdGUKKyAgICAgICAgcmlzZXMgdG8g
PiBIQVZFX0NVUlJFTlRfREFUQS4gVGhpcyBpcyBhY2NvbXBsaXNoZWQgYnkgbW9kaWZ5aW5nIE1l
ZGlhU291cmNlUHJpdmF0ZSB0byBoYXZlCisgICAgICAgIHdhaXRGb3JTZWVrQ29tcGxldGVkKCkg
YW5kIHNlZWtDb21wbGV0ZWQoKSB2aXJ0dWFsIG1ldGhvZHMuIFRoZXNlIGFyZSBjYWxsZWQgYnkg
TWVkaWFTb3VyY2UKKyAgICAgICAgd2hlbiBhIHNlZWsgb3BlcmF0aW9uIHJlc3VsdHMgaW4gdGhl
IGN1cnJlbnQgdGltZSBtb3Zpbmcgb3V0c2lkZSB0aGUgY3VycmVudGx5IGJ1ZmZlcmVkIHRpbWUK
KyAgICAgICAgcmFuZ2VzLCBhbmQgd2hlbiBhbiBhcHBlbmQgb3BlcmF0aW9uIHJlc3VsdHMgaW4g
dGhlIHJlYWR5U3RhdGUgY2hhbmdpbmcsIHJlc3BlY3RpdmVseS4KKworICAgICAgICBBIG51bWJl
ciBvZiBvdGhlciBkcml2ZS1ieSBmaXhlcyB3ZXJlIG5lY2Vzc2FyeSB0byBnZXQgdGhpcyB0ZXN0
IGZ1bGx5IHBhc3NpbmcsIGFzIG5vdGVkCisgICAgICAgIGJlbG93LgorCisgICAgICAgIE1ha2Ug
dGhlIE1lZGlhU291cmNlIHRoZSBwcmltYXJ5IG93bmVyIG9mIHRoZSBtZWRpYSdzIGR1cmF0aW9u
LCByYXRoZXIgdGhhbiB0aGUgTWVkaWFTb3VyY2VQcml2YXRlLgorICAgICAgICBNb3ZlIHRoZSBN
ZWRpYVNvdXJjZVByaXZhdGVDbGllbnQgcG9pbnRlciB0byB0aGUgTWVkaWFTb3VyY2VQcml2YXRl
IGZyb20gdGhlIE1lZGlhUGxheWVyUHJpdmF0ZSwgc28KKyAgICAgICAgdGhlIE1lZGlhU291cmNl
J3MgZHVyYXRpb24gY2FuIGJlIHJldHJpZXZlZC4gIFdoaWxlIHdlJ3JlIGF0IGl0LCBkbyB0aGUg
c2FtZSB0aGluZyBmb3IgYnVmZmVyZWQuCisKKyAgICAgICAgKiBNb2R1bGVzL21lZGlhc291cmNl
L01lZGlhU291cmNlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhU291cmNlOjpNZWRpYVNv
dXJjZSk6IEluaXRpYWxpemUgbV9kdXJhdGlvbi4KKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhU291
cmNlOjpkdXJhdGlvbik6IFNpbXBsZSBhY2Nlc3Nvci4KKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlh
U291cmNlOjpzZXREdXJhdGlvbkludGVybmFsKTogQnJpbmcgJ2R1cmF0aW9uIGNoYW5nZSBhbGdv
cml0aG0nIHVwIHRvIHNwZWMuCisgICAgICAgIChXZWJDb3JlOjpNZWRpYVNvdXJjZTo6c2V0UmVh
ZHlTdGF0ZSk6IFJlc2V0IG1fZHVyYXRpb24gb24gY2xvc2UuCisgICAgICAgICogTW9kdWxlcy9t
ZWRpYXNvdXJjZS9NZWRpYVNvdXJjZS5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL01l
ZGlhU291cmNlUHJpdmF0ZS5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRh
dGlvbi9vYmpjL01lZGlhUGxheWVyUHJpdmF0ZU1lZGlhU291cmNlQVZGT2JqQy5tbToKKyAgICAg
ICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZU1lZGlhU291cmNlQVZGT2JqQzo6bG9hZCk6
IERvIG5vdCBjYWxsIHNldFByaXZhdGVBbmRPcGVuKCkuCisgICAgICAgIChXZWJDb3JlOjpNZWRp
YVBsYXllclByaXZhdGVNZWRpYVNvdXJjZUFWRk9iakM6OmR1cmF0aW9uRG91YmxlKTogUGFzcyB0
aHJvdWdoIHRvIE1lZGlhU291cmNlUHJpdmF0ZUFWRk9iakMuCisgICAgICAgIChXZWJDb3JlOjpN
ZWRpYVBsYXllclByaXZhdGVNZWRpYVNvdXJjZUFWRk9iakM6OmJ1ZmZlcmVkKTogRGl0dG8uCisg
ICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL29iamMvTWVkaWFTb3VyY2VQ
cml2YXRlQVZGT2JqQy5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlv
bi9vYmpjL01lZGlhU291cmNlUHJpdmF0ZUFWRk9iakMubW06CisgICAgICAgIChXZWJDb3JlOjpN
ZWRpYVNvdXJjZVByaXZhdGVBVkZPYmpDOjpjcmVhdGUpOiBDYWxsIHNldFByaXZhdGVBbmRPcGVu
KCkuCisgICAgICAgIChXZWJDb3JlOjpNZWRpYVNvdXJjZVByaXZhdGVBVkZPYmpDOjpNZWRpYVNv
dXJjZVByaXZhdGVBVkZPYmpDKTogU2V0IG1fY2xpZW50LgorICAgICAgICAoV2ViQ29yZTo6TWVk
aWFTb3VyY2VQcml2YXRlQVZGT2JqQzo6ZHVyYXRpb24pOiBQYXNzIHRocm91Z2ggdG8gTWVkaWFT
b3VyY2VQcml2YXRlQ2xpZW50LgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFTb3VyY2VQcml2YXRl
QVZGT2JqQzo6YnVmZmVyZWQpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhU291cmNl
UHJpdmF0ZUFWRk9iakM6OmR1cmF0aW9uQ2hhbmdlZCk6IFBhc3MgdGhyb3VnaCB0byBNZWRpYVBs
YXllclByaXZhdGVNZWRpYVNvdXJjZUFWRk9iakMuCisgICAgICAgIChXZWJDb3JlOjpNZWRpYVNv
dXJjZVByaXZhdGVBVkZPYmpDOjpzZXREdXJhdGlvbik6IERlbGV0ZWQuCisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL01lZGlhU291cmNlR1N0cmVhbWVyLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6Ok1lZGlhU291cmNlR1N0cmVhbWVyOjpvcGVuKTogUGFzcyBpbiBNZWRpYVNv
dXJjZVByaXZhdGVDbGllbnQuCisgICAgICAgIChXZWJDb3JlOjpNZWRpYVNvdXJjZUdTdHJlYW1l
cjo6TWVkaWFTb3VyY2VHU3RyZWFtZXIpOiBJbml0aWFsaXplIG1fbWVkaWFTb3VyY2UuCisgICAg
ICAgIChXZWJDb3JlOjpNZWRpYVNvdXJjZUdTdHJlYW1lcjo6ZHVyYXRpb25DaGFuZ2VkKTogUmV0
cmlldmUgdGhlIGR1cmF0aW9uIGZyb20gTWVkaWFTb3VyY2VQcml2YXRlQ2xpZW50LgorICAgICAg
ICAoV2ViQ29yZTo6TWVkaWFTb3VyY2VHU3RyZWFtZXI6Om1hcmtFbmRPZlN0cmVhbSk6IFJlbW92
ZSB1bm5lY3NzYXJ5IEFTU0VSVC4KKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhU291cmNlR1N0cmVh
bWVyOjp1bm1hcmtFbmRPZlN0cmVhbSk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFT
b3VyY2VHU3RyZWFtZXI6OnNldER1cmF0aW9uKTogRGVsZXRlZC4KKyAgICAgICAgKiBwbGF0Zm9y
bS9ncmFwaGljcy9nc3RyZWFtZXIvTWVkaWFTb3VyY2VHU3RyZWFtZXIuaDoKKyAgICAgICAgKiBw
bGF0Zm9ybS9tb2NrL21lZGlhc291cmNlL01vY2tNZWRpYVBsYXllck1lZGlhU291cmNlLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6Ok1vY2tNZWRpYVBsYXllck1lZGlhU291cmNlOjpsb2FkKTogRG8g
bm90IGNhbGwgc2V0UHJpdmF0ZUFuZE9wZW4oKS4KKyAgICAgICAgKFdlYkNvcmU6Ok1vY2tNZWRp
YVBsYXllck1lZGlhU291cmNlOjpidWZmZXJlZCk6IFBhc3MgdGhyb3VnaCB0byBNb2NrTWVkaWFT
b3VyY2VQcml2YXRlLgorICAgICAgICAoV2ViQ29yZTo6TW9ja01lZGlhUGxheWVyTWVkaWFTb3Vy
Y2U6OmR1cmF0aW9uRG91YmxlKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpNb2NrTWVkaWFQ
bGF5ZXJNZWRpYVNvdXJjZTo6YWR2YW5jZUN1cnJlbnRUaW1lKTogRGl0dG8uCisgICAgICAgICog
cGxhdGZvcm0vbW9jay9tZWRpYXNvdXJjZS9Nb2NrTWVkaWFTb3VyY2VQcml2YXRlLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6Ok1vY2tNZWRpYVNvdXJjZVByaXZhdGU6OmNyZWF0ZSk6IENhbGwgc2V0
UHJpdmF0ZUFuZE9wZW4oKS4KKyAgICAgICAgKFdlYkNvcmU6Ok1vY2tNZWRpYVNvdXJjZVByaXZh
dGU6Ok1vY2tNZWRpYVNvdXJjZVByaXZhdGUpOiBTZXQgbV9jbGllbnQuCisgICAgICAgIChXZWJD
b3JlOjpNb2NrTWVkaWFTb3VyY2VQcml2YXRlOjpkdXJhdGlvbik6IFBhc3MgdGhyb3VnaCB0byBN
ZWRpYVNvdXJjZVByaXZhdGVDbGllbnQuCisgICAgICAgIChXZWJDb3JlOjpNb2NrTWVkaWFTb3Vy
Y2VQcml2YXRlOjpidWZmZXJlZCk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6TW9ja01lZGlh
U291cmNlUHJpdmF0ZTo6ZHVyYXRpb25DaGFuZ2VkKTogUGFzcyB0aG9ydWdoIHRvIE1vY2tNZWRp
YVBsYXllck1lZGlhU291cmNlLgorICAgICAgICAoV2ViQ29yZTo6TW9ja01lZGlhU291cmNlUHJp
dmF0ZTo6c2V0RHVyYXRpb24pOiBEZWxldGVkLgorCisgICAgICAgIFJvdXRlIHNlZWtUb1RpbWUg
dGhyb3VnaCBNZWRpYVNvdXJjZSwgcmF0aGVyIHRoYW4gdGhyb3VnaCBNZWRpYVNvdXJjZVByaXZh
dGUsIHNvIHRoYXQKKyAgICAgICAgdGhlIHRpbWUgY2FuIGJlIGNvbXBhcmVkIGFnYWluc3QgdGhl
IGJ1ZmZlcmVkIHJhbmdlcywgYW5kIHRyaWdnZXIgdGhlIGRlbGF5IG9mIHRoZSBzZWVrCisgICAg
ICAgIG9wZXJhdGlvbiBpZiBuZWNlc3NhcnkuIEFkZCBhIHNlZWtUaW1lciB0byBNZWRpYVBsYXll
clByaXZhdGVNZWRpYVNvdXJjZUFWRk9iakMsIGFzIHRoaXMKKyAgICAgICAgZ3VhcmFudGVlcyB0
aGUgb3JkZXIgb2YgYXN5bmNocm9ub3VzIG9wZXJhdGlvbnMsIHJhdGhlciB0aGFuIGNhbGxPbk1h
aW5UaHJlYWQsIHdoaWNoIGNhbgorICAgICAgICBjYXVzZSBhc3luYyBvcGVyYXRpb25zIHRvIG9j
Y3VyIG91dCBvZiBvcmRlci4KKworICAgICAgICAqIE1vZHVsZXMvbWVkaWFzb3VyY2UvTWVkaWFT
b3VyY2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFTb3VyY2U6OnNlZWtUb1RpbWUpOiBC
cmluZyB1cCB0byBzcGVjLgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFTb3VyY2U6OmNvbXBsZXRl
U2Vlayk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFTb3VyY2U6Om1vbml0b3JTb3Vy
Y2VCdWZmZXJzKTogQ2FsbCBjb21wbGV0ZVNlZWsoKSB3aGVuIGFwcHJvcHJpYXRlLgorICAgICAg
ICAqIE1vZHVsZXMvbWVkaWFzb3VyY2UvU291cmNlQnVmZmVyLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OlNvdXJjZUJ1ZmZlcjo6c291cmNlQnVmZmVyUHJpdmF0ZVNlZWtUb1RpbWUpOiBEZWxldGVk
LgorICAgICAgICAoV2ViQ29yZTo6U291cmNlQnVmZmVyOjpzZWVrVG9UaW1lKTogUmVuYW1lZCBm
cm9tIHNvdXJjZUJ1ZmZlclByaXZhdGVTZWVrVG9UaW1lKCkuCisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3MvTWVkaWFTb3VyY2VQcml2YXRlLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3MvTWVkaWFTb3VyY2VQcml2YXRlQ2xpZW50Lmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3MvYXZmb3VuZGF0aW9uL29iamMvTWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFTb3VyY2VBVkZPYmpD
Lmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL29iamMvTWVkaWFQ
bGF5ZXJQcml2YXRlTWVkaWFTb3VyY2VBVkZPYmpDLm1tOgorICAgICAgICAoV2ViQ29yZTo6TWVk
aWFQbGF5ZXJQcml2YXRlTWVkaWFTb3VyY2VBVkZPYmpDOjpNZWRpYVBsYXllclByaXZhdGVNZWRp
YVNvdXJjZUFWRk9iakMpOiBBZGQgc2Vla1RpbWVyLiBPbmx5CisgICAgICAgICAgICBjYWxsIHRp
bWVDaGFuZ2VkKCkgaWYgbm8gbG9uZ2VyIHNlZWtpbmcsIHRoZXJlYnkgdHJpZ2dlcmluZyBhICdz
ZWVrZWQnIGV2ZW50LgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFT
b3VyY2VBVkZPYmpDOjp+TWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFTb3VyY2VBVkZPYmpDKTogQ2xl
YXIgbV9zZWVrVGltZXIuCisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVNZWRp
YVNvdXJjZUFWRk9iakM6OnNlZWtXaXRoVG9sZXJhbmNlKTogVXNlIG1fc2Vla1RpbWVyLgorICAg
ICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFTb3VyY2VBVkZPYmpDOjpzZWVr
VGltZXJGaXJlZCk6IENhbGwgc2Vla0ludGVybmFsLgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQ
bGF5ZXJQcml2YXRlTWVkaWFTb3VyY2VBVkZPYmpDOjpzZWVrSW50ZXJuYWwpOiBBZGQgbG9nZ2lu
Zy4KKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZU1lZGlhU291cmNlQVZGT2Jq
Qzo6d2FpdEZvclNlZWtDb21wbGV0ZWQpOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlh
UGxheWVyUHJpdmF0ZU1lZGlhU291cmNlQVZGT2JqQzo6c2Vla0NvbXBsZXRlZCk6IEFkZGVkOyB0
cmlnZ2VyICdzZWVrZWQnLgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlTWVk
aWFTb3VyY2VBVkZPYmpDOjpzZXRSZWFkeVN0YXRlKTogTm8gbG9uZ2VyIGF0dGVtcHQgdG8gZmlu
aXNoIHNlZWsgd2hlbgorICAgICAgICAgICAgcmVhZHlTdGF0ZSBjaGFuZ2VzIGhlcmU7IHRoaXMg
aGFzIGJlZW4gbW92ZWQgdXAgdG8gTWVkaWFTb3VyY2UuY3BwLgorICAgICAgICAqIHBsYXRmb3Jt
L2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9vYmpjL01lZGlhU291cmNlUHJpdmF0ZUFWRk9iakMuaDoK
KyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24vb2JqYy9NZWRpYVNvdXJj
ZVByaXZhdGVBVkZPYmpDLm1tOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFTb3VyY2VQcml2YXRl
QVZGT2JqQzo6d2FpdEZvclNlZWtDb21wbGV0ZWQpOiBQYXNzIHRocm91Z2ggdG8gTWVkaWFQbGF5
ZXJQcml2YXRlTWVkaWFTb3VyY2VBVkZPYmpDLgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFTb3Vy
Y2VQcml2YXRlQVZGT2JqQzo6c2Vla0NvbXBsZXRlZCk6IERpdHRvLgorICAgICAgICAoV2ViQ29y
ZTo6TWVkaWFTb3VyY2VQcml2YXRlQVZGT2JqQzo6c2Vla1RvVGltZSk6IFBhc3MgdGhyb3VnaCB0
byBNZWRpYVNvdXJjZVByaXZhdGVDbGllbnQuCisgICAgICAgIChXZWJDb3JlOjpNZWRpYVNvdXJj
ZVByaXZhdGVBVkZPYmpDOjpmYXN0U2Vla1RpbWVGb3JNZWRpYVRpbWUpOiBEaXR0by4KKyAgICAg
ICAgKiBwbGF0Zm9ybS9tb2NrL21lZGlhc291cmNlL01vY2tNZWRpYVBsYXllck1lZGlhU291cmNl
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Ok1vY2tNZWRpYVBsYXllck1lZGlhU291cmNlOjpNb2Nr
TWVkaWFQbGF5ZXJNZWRpYVNvdXJjZSk6IEluaXRpYWxpemUgbV9zZWVrQ29tcGxldGVkLgorICAg
ICAgICAoV2ViQ29yZTo6TW9ja01lZGlhUGxheWVyTWVkaWFTb3VyY2U6OnNlZWtpbmcpOiBDaGVj
ayBmb3IgYW4gdW5jb21wbGV0ZWQgc2VlayBvcGVyYXRpb24uIAorICAgICAgICAoV2ViQ29yZTo6
TW9ja01lZGlhUGxheWVyTWVkaWFTb3VyY2U6OnNlZWtXaXRoVG9sZXJhbmNlKTogRGl0dG8uCisg
ICAgICAgIChXZWJDb3JlOjpNb2NrTWVkaWFQbGF5ZXJNZWRpYVNvdXJjZTo6d2FpdEZvclNlZWtD
b21wbGV0ZWQpOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6Ok1vY2tNZWRpYVBsYXllck1lZGlh
U291cmNlOjpzZWVrQ29tcGxldGVkKTogQWRkZWQ7IHRyaWdnZXIgJ3NlZWtlZCcuCisgICAgICAg
ICogcGxhdGZvcm0vbW9jay9tZWRpYXNvdXJjZS9Nb2NrTWVkaWFQbGF5ZXJNZWRpYVNvdXJjZS5o
OgorICAgICAgICAqIHBsYXRmb3JtL21vY2svbWVkaWFzb3VyY2UvTW9ja01lZGlhU291cmNlUHJp
dmF0ZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpNb2NrTWVkaWFTb3VyY2VQcml2YXRlOjp3YWl0
Rm9yU2Vla0NvbXBsZXRlZCk6IFBhc3MgdGhyb3VnaCB0byBNb2NrTWVkaWFQbGF5ZXJNZWRpYVNv
dXJjZS4KKyAgICAgICAgKFdlYkNvcmU6Ok1vY2tNZWRpYVNvdXJjZVByaXZhdGU6OnNlZWtDb21w
bGV0ZWQpOiBEaXR0by4KKyAgICAgICAgKiBwbGF0Zm9ybS9tb2NrL21lZGlhc291cmNlL01vY2tN
ZWRpYVNvdXJjZVByaXZhdGUuaDoKKworICAgICAgICBEcml2ZS1ieSBmaXhlcy4KKworICAgICAg
ICAqIE1vZHVsZXMvbWVkaWFzb3VyY2UvTWVkaWFTb3VyY2UuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6TWVkaWFTb3VyY2U6OnN0cmVhbUVuZGVkV2l0aEVycm9yKTogUmUtb3JkZXIgdGhlIHN0ZXBz
IGluIHN0cmVhbUVuZGVkV2l0aEVycm9yKCkKKyAgICAgICAgICAgIHRvIGF2b2lkIHRoZSBNZWRp
YVNvdXJjZSBiZWluZyBjbG9zZWQgYW5kIHJlLW9wZW5lZCBieSB0aGUgcmVzdWx0aW5nIGR1cmF0
aW9uIGNoYW5nZQorICAgICAgICAgICAgb3BlcmF0aW9uLgorICAgICAgICAqIE1vZHVsZXMvbWVk
aWFzb3VyY2UvTWVkaWFTb3VyY2UuaDoKKyAgICAgICAgKiBNb2R1bGVzL21lZGlhc291cmNlL1Nv
dXJjZUJ1ZmZlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTb3VyY2VCdWZmZXI6OnJlbW92ZSk6
IEFkZGVkIGxvZ2dpbmcuCisgICAgICAgIChXZWJDb3JlOjpTb3VyY2VCdWZmZXI6OnJlbW92ZUNv
ZGVkRnJhbWVzKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpTb3VyY2VCdWZmZXI6Omhhc0Z1
dHVyZVRpbWUpOiBTd2FwIGFuIEFTU0VSVCBmb3IgYW4gZWFybHktcmV0dXJuOyBpdCdzIHBvc3Np
YmxlCisgICAgICAgICAgICBmb3IgY3VycmVudFRpbWUoKSB0byBiZSBvdXRzaWRlIG9mIGEgYnVm
ZmVyZWQgYXJlYS4KKyAgICAgICAgKiBNb2R1bGVzL21lZGlhc291cmNlL1NvdXJjZUJ1ZmZlci5o
OgorICAgICAgICAqIGh0bWwvSFRNTE1lZGlhRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpIVE1MTWVkaWFFbGVtZW50OjpwYXJzZUF0dHJpYnV0ZSk6IERvIG5vdCBpc3N1ZSBhbiBhZGRp
dGlvbmFsICd0aW1ldXBkYXRlJyBldmVudAorICAgICAgICAgICAgYWZ0ZXIgZmluaXNoU2Vlaygp
IGlzc3VlcyBvbmUgb2YgaXRzIG93bi4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9hdmZv
dW5kYXRpb24vb2JqYy9Tb3VyY2VCdWZmZXJQcml2YXRlQVZGT2JqQy5tbToKKyAgICAgICAgKFdl
YkNvcmU6Omdsb2JhbERhdGFQYXJzZXJRdWV1ZSk6IEFsbG93IHBhcnNpbmcgb3BlcmF0aW9ucyB0
byBoYXBwZW4gY29uY3VycmVudGx5IG9uCisgICAgICAgICAgICBiYWNrZ3JvdW5kIHF1ZXVlcy4K
KworMjAxNC0wNy0xMSAgSmVyIE5vYmxlICA8amVyLm5vYmxlQGFwcGxlLmNvbT4KKwogICAgICAg
ICBbTVNFXSBTZXBhcmF0ZSBNZWRpYVNvdXJjZSBsb2dnaW5nIGludG8gaXRzIG93biBsb2cgY2hh
bm5lbAogICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTM0
ODA5CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzb3VyY2UvTWVk
aWFTb3VyY2UuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXNvdXJjZS9NZWRpYVNv
dXJjZS5jcHAKaW5kZXggNmVhMDI5NTA2NWMyM2IzMGU5MWMzMDM5ZjlkNjQyOGE4NDFhZmU5My4u
MjEzM2U1YzUzYmE1MWI0ZTFjZWFjM2JkNmY1OTkyYjk0M2M0YzQ0ZCAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXNvdXJjZS9NZWRpYVNvdXJjZS5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXNvdXJjZS9NZWRpYVNvdXJjZS5jcHAKQEAgLTc2LDYg
Kzc2LDggQEAgUGFzc1JlZlB0cjxNZWRpYVNvdXJjZT4gTWVkaWFTb3VyY2U6OmNyZWF0ZShTY3Jp
cHRFeGVjdXRpb25Db250ZXh0JiBjb250ZXh0KQogTWVkaWFTb3VyY2U6Ok1lZGlhU291cmNlKFNj
cmlwdEV4ZWN1dGlvbkNvbnRleHQmIGNvbnRleHQpCiAgICAgOiBBY3RpdmVET01PYmplY3QoJmNv
bnRleHQpCiAgICAgLCBtX21lZGlhRWxlbWVudCgwKQorICAgICwgbV9kdXJhdGlvbihzdGQ6Om51
bWVyaWNfbGltaXRzPGRvdWJsZT46OnF1aWV0X05hTigpKQorICAgICwgbV9wZW5kaW5nU2Vla1Rp
bWUoTWVkaWFUaW1lOjppbnZhbGlkVGltZSgpKQogICAgICwgbV9yZWFkeVN0YXRlKGNsb3NlZEtl
eXdvcmQoKSkKICAgICAsIG1fYXN5bmNFdmVudFF1ZXVlKCp0aGlzKQogewpAQCAtMTI4LDcgKzEz
MCw3IEBAIHZvaWQgTWVkaWFTb3VyY2U6OnJlbW92ZWRGcm9tUmVnaXN0cnkoKQogCiBkb3VibGUg
TWVkaWFTb3VyY2U6OmR1cmF0aW9uKCkgY29uc3QKIHsKLSAgICByZXR1cm4gaXNDbG9zZWQoKSA/
IHN0ZDo6bnVtZXJpY19saW1pdHM8ZmxvYXQ+OjpxdWlldF9OYU4oKSA6IG1fcHJpdmF0ZS0+ZHVy
YXRpb24oKS50b0RvdWJsZSgpOworICAgIHJldHVybiBtX2R1cmF0aW9uOwogfQogCiBkb3VibGUg
TWVkaWFTb3VyY2U6OmN1cnJlbnRUaW1lKCkgY29uc3QKQEAgLTE4MCw2ICsxODIsNjAgQEAgc3Rk
Ojp1bmlxdWVfcHRyPFBsYXRmb3JtVGltZVJhbmdlcz4gTWVkaWFTb3VyY2U6OmJ1ZmZlcmVkKCkg
Y29uc3QKICAgICByZXR1cm4gUGxhdGZvcm1UaW1lUmFuZ2VzOjpjcmVhdGUoaW50ZXJzZWN0aW9u
UmFuZ2VzLT5yYW5nZXMoKSk7CiB9CiAKK3ZvaWQgTWVkaWFTb3VyY2U6OnNlZWtUb1RpbWUoY29u
c3QgTWVkaWFUaW1lJiB0aW1lKQoreworICAgIC8vIDIuNC4zIFNlZWtpbmcKKyAgICAvLyBodHRw
czovL2R2Y3MudzMub3JnL2hnL2h0bWwtbWVkaWEvcmF3LWZpbGUvdGlwL21lZGlhLXNvdXJjZS9t
ZWRpYS1zb3VyY2UuaHRtbCNtZWRpYXNvdXJjZS1zZWVraW5nCisKKyAgICBtX3BlbmRpbmdTZWVr
VGltZSA9IHRpbWU7CisKKyAgICAvLyBSdW4gdGhlIGZvbGxvd2luZyBzdGVwcyBhcyBwYXJ0IG9m
IHRoZSAiV2FpdCB1bnRpbCB0aGUgdXNlciBhZ2VudCBoYXMgZXN0YWJsaXNoZWQgd2hldGhlciBv
ciBub3QgdGhlCisgICAgLy8gbWVkaWEgZGF0YSBmb3IgdGhlIG5ldyBwbGF5YmFjayBwb3NpdGlv
biBpcyBhdmFpbGFibGUsIGFuZCwgaWYgaXQgaXMsIHVudGlsIGl0IGhhcyBkZWNvZGVkIGVub3Vn
aCBkYXRhCisgICAgLy8gdG8gcGxheSBiYWNrIHRoYXQgcG9zaXRpb24iIHN0ZXAgb2YgdGhlIHNl
ZWsgYWxnb3JpdGhtOgorICAgIC8vIDEuIFRoZSBtZWRpYSBlbGVtZW50IGxvb2tzIGZvciBtZWRp
YSBzZWdtZW50cyBjb250YWluaW5nIHRoZSBuZXcgcGxheWJhY2sgcG9zaXRpb24gaW4gZWFjaCBT
b3VyY2VCdWZmZXIKKyAgICAvLyBvYmplY3QgaW4gYWN0aXZlU291cmNlQnVmZmVycy4KKyAgICBm
b3IgKGF1dG8mIHNvdXJjZUJ1ZmZlciA6ICptX2FjdGl2ZVNvdXJjZUJ1ZmZlcnMpIHsKKyAgICAg
ICAgLy8g4oazIElmIG9uZSBvciBtb3JlIG9mIHRoZSBvYmplY3RzIGluIGFjdGl2ZVNvdXJjZUJ1
ZmZlcnMgaXMgbWlzc2luZyBtZWRpYSBzZWdtZW50cyBmb3IgdGhlIG5ldworICAgICAgICAvLyBw
bGF5YmFjayBwb3NpdGlvbgorICAgICAgICBpZiAoIXNvdXJjZUJ1ZmZlci0+YnVmZmVyZWQoKS0+
cmFuZ2VzKCkuY29udGFpbih0aW1lKSkgeworICAgICAgICAgICAgLy8gMS4xIFNldCB0aGUgSFRN
TE1lZGlhRWxlbWVudC5yZWFkeVN0YXRlIGF0dHJpYnV0ZSB0byBIQVZFX01FVEFEQVRBLgorICAg
ICAgICAgICAgbV9wcml2YXRlLT5zZXRSZWFkeVN0YXRlKE1lZGlhUGxheWVyOjpIYXZlTWV0YWRh
dGEpOworCisgICAgICAgICAgICAvLyAxLjIgVGhlIG1lZGlhIGVsZW1lbnQgd2FpdHMgdW50aWwg
YW4gYXBwZW5kQnVmZmVyKCkgb3IgYW4gYXBwZW5kU3RyZWFtKCkgY2FsbCBjYXVzZXMgdGhlIGNv
ZGVkCisgICAgICAgICAgICAvLyBmcmFtZSBwcm9jZXNzaW5nIGFsZ29yaXRobSB0byBzZXQgdGhl
IEhUTUxNZWRpYUVsZW1lbnQucmVhZHlTdGF0ZSBhdHRyaWJ1dGUgdG8gYSB2YWx1ZSBncmVhdGVy
CisgICAgICAgICAgICAvLyB0aGFuIEhBVkVfTUVUQURBVEEuCisgICAgICAgICAgICBMT0coTWVk
aWFTb3VyY2UsICJNZWRpYVNvdXJjZTo6c2Vla1RvVGltZSglcCkgLSB3YWl0Rm9yU2Vla0NvbXBs
ZXRlZCgpIiwgdGhpcyk7CisgICAgICAgICAgICBtX3ByaXZhdGUtPndhaXRGb3JTZWVrQ29tcGxl
dGVkKCk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgLy8g4oazIE90
aGVyd2lzZQorICAgICAgICAvLyBDb250aW51ZQorICAgIH0KKworICAgIGNvbXBsZXRlU2Vlaygp
OworfQorCit2b2lkIE1lZGlhU291cmNlOjpjb21wbGV0ZVNlZWsoKQoreworICAgIC8vIDIuNC4z
IFNlZWtpbmcsIGN0ZC4KKyAgICAvLyBodHRwczovL2R2Y3MudzMub3JnL2hnL2h0bWwtbWVkaWEv
cmF3LWZpbGUvdGlwL21lZGlhLXNvdXJjZS9tZWRpYS1zb3VyY2UuaHRtbCNtZWRpYXNvdXJjZS1z
ZWVraW5nCisKKyAgICBBU1NFUlQobV9wZW5kaW5nU2Vla1RpbWUuaXNWYWxpZCgpKTsKKworICAg
IC8vIDIuIFRoZSBtZWRpYSBlbGVtZW50IHJlc2V0cyBhbGwgZGVjb2RlcnMgYW5kIGluaXRpYWxp
emVzIGVhY2ggb25lIHdpdGggZGF0YSBmcm9tIHRoZSBhcHByb3ByaWF0ZQorICAgIC8vIGluaXRp
YWxpemF0aW9uIHNlZ21lbnQuCisgICAgLy8gMy4gVGhlIG1lZGlhIGVsZW1lbnQgZmVlZHMgY29k
ZWQgZnJhbWVzIGZyb20gdGhlIGFjdGl2ZSB0cmFjayBidWZmZXJzIGludG8gdGhlIGRlY29kZXJz
IHN0YXJ0aW5nCisgICAgLy8gd2l0aCB0aGUgY2xvc2VzdCByYW5kb20gYWNjZXNzIHBvaW50IGJl
Zm9yZSB0aGUgbmV3IHBsYXliYWNrIHBvc2l0aW9uLgorICAgIGZvciAoYXV0byYgc291cmNlQnVm
ZmVyIDogKm1fYWN0aXZlU291cmNlQnVmZmVycykKKyAgICAgICAgc291cmNlQnVmZmVyLT5zZWVr
VG9UaW1lKG1fcGVuZGluZ1NlZWtUaW1lKTsKKworICAgIC8vIDQuIFJlc3VtZSB0aGUgc2VlayBh
bGdvcml0aG0gYXQgdGhlICJBd2FpdCBhIHN0YWJsZSBzdGF0ZSIgc3RlcC4KKyAgICBtX3ByaXZh
dGUtPnNlZWtDb21wbGV0ZWQoKTsKKworICAgIG1fcGVuZGluZ1NlZWtUaW1lID0gTWVkaWFUaW1l
OjppbnZhbGlkVGltZSgpOworICAgIG1vbml0b3JTb3VyY2VCdWZmZXJzKCk7Cit9CisKIHZvaWQg
TWVkaWFTb3VyY2U6Om1vbml0b3JTb3VyY2VCdWZmZXJzKCkKIHsKICAgICAvLyAyLjQuNCBTb3Vy
Y2VCdWZmZXIgTW9uaXRvcmluZwpAQCAtMjE3LDYgKzI3Myw5IEBAIHZvaWQgTWVkaWFTb3VyY2U6
Om1vbml0b3JTb3VyY2VCdWZmZXJzKCkKICAgICAgICAgLy8gMy4gUGxheWJhY2sgbWF5IHJlc3Vt
ZSBhdCB0aGlzIHBvaW50IGlmIGl0IHdhcyBwcmV2aW91c2x5IHN1c3BlbmRlZCBieSBhIHRyYW5z
aXRpb24gdG8gSEFWRV9DVVJSRU5UX0RBVEEuCiAgICAgICAgIG1fcHJpdmF0ZS0+c2V0UmVhZHlT
dGF0ZShNZWRpYVBsYXllcjo6SGF2ZUVub3VnaERhdGEpOwogCisgICAgICAgIGlmIChtX3BlbmRp
bmdTZWVrVGltZS5pc1ZhbGlkKCkpCisgICAgICAgICAgICBjb21wbGV0ZVNlZWsoKTsKKwogICAg
ICAgICAvLyA0LiBBYm9ydCB0aGVzZSBzdGVwcy4KICAgICAgICAgcmV0dXJuOwogICAgIH0KQEAg
LTIzMSw2ICsyOTAsOSBAQCB2b2lkIE1lZGlhU291cmNlOjptb25pdG9yU291cmNlQnVmZmVycygp
CiAgICAgICAgIC8vIDMuIFBsYXliYWNrIG1heSByZXN1bWUgYXQgdGhpcyBwb2ludCBpZiBpdCB3
YXMgcHJldmlvdXNseSBzdXNwZW5kZWQgYnkgYSB0cmFuc2l0aW9uIHRvIEhBVkVfQ1VSUkVOVF9E
QVRBLgogICAgICAgICBtX3ByaXZhdGUtPnNldFJlYWR5U3RhdGUoTWVkaWFQbGF5ZXI6OkhhdmVG
dXR1cmVEYXRhKTsKIAorICAgICAgICBpZiAobV9wZW5kaW5nU2Vla1RpbWUuaXNWYWxpZCgpKQor
ICAgICAgICAgICAgY29tcGxldGVTZWVrKCk7CisKICAgICAgICAgLy8gNC4gQWJvcnQgdGhlc2Ug
c3RlcHMuCiAgICAgICAgIHJldHVybjsKICAgICB9CkBAIC0yNDYsNyArMzA4LDEwIEBAIHZvaWQg
TWVkaWFTb3VyY2U6Om1vbml0b3JTb3VyY2VCdWZmZXJzKCkKICAgICAvLyAzLiBQbGF5YmFjayBp
cyBzdXNwZW5kZWQgYXQgdGhpcyBwb2ludCBzaW5jZSB0aGUgbWVkaWEgZWxlbWVudCBkb2Vzbid0
IGhhdmUgZW5vdWdoIGRhdGEgdG8KICAgICAvLyBhZHZhbmNlIHRoZSBtZWRpYSB0aW1lbGluZS4K
ICAgICBtX3ByaXZhdGUtPnNldFJlYWR5U3RhdGUoTWVkaWFQbGF5ZXI6OkhhdmVDdXJyZW50RGF0
YSk7Ci0gICAgCisKKyAgICBpZiAobV9wZW5kaW5nU2Vla1RpbWUuaXNWYWxpZCgpKQorICAgICAg
ICBjb21wbGV0ZVNlZWsoKTsKKwogICAgIC8vIDQuIEFib3J0IHRoZXNlIHN0ZXBzLgogfQogCkBA
IC0yODMsOSArMzQ4LDM3IEBAIHZvaWQgTWVkaWFTb3VyY2U6OnNldER1cmF0aW9uKGRvdWJsZSBk
dXJhdGlvbiwgRXhjZXB0aW9uQ29kZSYgZWMpCiAKIHZvaWQgTWVkaWFTb3VyY2U6OnNldER1cmF0
aW9uSW50ZXJuYWwoZG91YmxlIGR1cmF0aW9uKQogewotICAgIG1fcHJpdmF0ZS0+c2V0RHVyYXRp
b24oTWVkaWFUaW1lOjpjcmVhdGVXaXRoRG91YmxlKGR1cmF0aW9uKSk7Ci19CisgICAgLy8gRHVy
YXRpb24gQ2hhbmdlIEFsZ29yaXRobQorICAgIC8vIGh0dHBzOi8vZHZjcy53My5vcmcvaGcvaHRt
bC1tZWRpYS9yYXctZmlsZS90aXAvbWVkaWEtc291cmNlL21lZGlhLXNvdXJjZS5odG1sI2R1cmF0
aW9uLWNoYW5nZS1hbGdvcml0aG0KKworICAgIC8vIDEuIElmIHRoZSBjdXJyZW50IHZhbHVlIG9m
IGR1cmF0aW9uIGlzIGVxdWFsIHRvIG5ldyBkdXJhdGlvbiwgdGhlbiByZXR1cm4uCisgICAgaWYg
KGR1cmF0aW9uID09IG1fZHVyYXRpb24pCisgICAgICAgIHJldHVybjsKKworICAgIC8vIDIuIFNl
dCBvbGQgZHVyYXRpb24gdG8gdGhlIGN1cnJlbnQgdmFsdWUgb2YgZHVyYXRpb24uCisgICAgZG91
YmxlIG9sZER1cmF0aW9uID0gbV9kdXJhdGlvbjsKKworICAgIC8vIDMuIFVwZGF0ZSBkdXJhdGlv
biB0byBuZXcgZHVyYXRpb24uCisgICAgbV9kdXJhdGlvbiA9IGR1cmF0aW9uOworCisgICAgLy8g
NC4gSWYgdGhlIG5ldyBkdXJhdGlvbiBpcyBsZXNzIHRoYW4gb2xkIGR1cmF0aW9uLCB0aGVuIGNh
bGwgcmVtb3ZlKG5ldyBkdXJhdGlvbiwgb2xkIGR1cmF0aW9uKQorICAgIC8vIG9uIGFsbCBvYmpl
Y3RzIGluIHNvdXJjZUJ1ZmZlcnMuCisgICAgaWYgKCFpc25hbihvbGREdXJhdGlvbikgJiYgZHVy
YXRpb24gPCBvbGREdXJhdGlvbikgeworICAgICAgICBmb3IgKGF1dG8mIHNvdXJjZUJ1ZmZlciA6
ICptX3NvdXJjZUJ1ZmZlcnMpCisgICAgICAgICAgICBzb3VyY2VCdWZmZXItPnJlbW92ZShkdXJh
dGlvbiwgb2xkRHVyYXRpb24sIElHTk9SRV9FWENFUFRJT04pOworICAgIH0KIAorICAgIC8vIDUu
IElmIGEgdXNlciBhZ2VudCBpcyB1bmFibGUgdG8gcGFydGlhbGx5IHJlbmRlciBhdWRpbyBmcmFt
ZXMgb3IgdGV4dCBjdWVzIHRoYXQgc3RhcnQgYmVmb3JlIGFuZCBlbmQgYWZ0ZXIgdGhlCisgICAg
Ly8gZHVyYXRpb24sIHRoZW4gcnVuIHRoZSBmb2xsb3dpbmcgc3RlcHM6CisgICAgLy8gNS4xIFVw
ZGF0ZSBuZXcgZHVyYXRpb24gdG8gdGhlIGhpZ2hlc3QgZW5kIHRpbWUgcmVwb3J0ZWQgYnkgdGhl
IGJ1ZmZlcmVkIGF0dHJpYnV0ZSBhY3Jvc3MgYWxsIFNvdXJjZUJ1ZmZlciBvYmplY3RzCisgICAg
Ly8gaW4gc291cmNlQnVmZmVycy4KKyAgICAvLyA1LjIgVXBkYXRlIGR1cmF0aW9uIHRvIG5ldyBk
dXJhdGlvbi4KKyAgICAvLyBOT1RFOiBBc3N1bWUgVUEgaXMgYWJsZSB0byBwYXJ0aWFsbHkgcmVu
ZGVyIGF1ZGlvIGZyYW1lcy4KKworICAgIC8vIDYuIFVwZGF0ZSB0aGUgbWVkaWEgY29udHJvbGxl
ciBkdXJhdGlvbiB0byBuZXcgZHVyYXRpb24gYW5kIHJ1biB0aGUgSFRNTE1lZGlhRWxlbWVudCBk
dXJhdGlvbiBjaGFuZ2UgYWxnb3JpdGhtLgorICAgIExPRyhNZWRpYVNvdXJjZSwgIk1lZGlhU291
cmNlOjpzZXREdXJhdGlvbkludGVybmFsKCVwKSAtIGR1cmF0aW9uKCVnKSIsIHRoaXMsIGR1cmF0
aW9uKTsKKyAgICBtX3ByaXZhdGUtPmR1cmF0aW9uQ2hhbmdlZCgpOworfQogCiB2b2lkIE1lZGlh
U291cmNlOjpzZXRSZWFkeVN0YXRlKGNvbnN0IEF0b21pY1N0cmluZyYgc3RhdGUpCiB7CkBAIC0y
OTcsNiArMzkwLDcgQEAgdm9pZCBNZWRpYVNvdXJjZTo6c2V0UmVhZHlTdGF0ZShjb25zdCBBdG9t
aWNTdHJpbmcmIHN0YXRlKQogICAgIGlmIChzdGF0ZSA9PSBjbG9zZWRLZXl3b3JkKCkpIHsKICAg
ICAgICAgbV9wcml2YXRlLmNsZWFyKCk7CiAgICAgICAgIG1fbWVkaWFFbGVtZW50ID0gMDsKKyAg
ICAgICAgbV9kdXJhdGlvbiA9IHN0ZDo6bnVtZXJpY19saW1pdHM8ZG91YmxlPjo6cXVpZXRfTmFO
KCk7CiAgICAgfQogCiAgICAgaWYgKG9sZFN0YXRlID09IHN0YXRlKQpAQCAtMzQ0LDE5ICs0Mzgs
MTggQEAgdm9pZCBNZWRpYVNvdXJjZTo6c3RyZWFtRW5kZWRXaXRoRXJyb3IoY29uc3QgQXRvbWlj
U3RyaW5nJiBlcnJvciwgRXhjZXB0aW9uQ29kZSYKICAgICBERVBSRUNBVEVEX0RFRklORV9TVEFU
SUNfTE9DQUwoY29uc3QgQXRvbWljU3RyaW5nLCBkZWNvZGUsICgiZGVjb2RlIiwgQXRvbWljU3Ry
aW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCkpOwogCiAgICAgLy8gMi40LjcgaHR0cHM6Ly9kdmNz
LnczLm9yZy9oZy9odG1sLW1lZGlhL3Jhdy1maWxlL3RpcC9tZWRpYS1zb3VyY2UvbWVkaWEtc291
cmNlLmh0bWwjZW5kLW9mLXN0cmVhbS1hbGdvcml0aG0KLSAgICAvLyAxLiBDaGFuZ2UgdGhlIHJl
YWR5U3RhdGUgYXR0cmlidXRlIHZhbHVlIHRvICJlbmRlZCIuCi0gICAgLy8gMi4gUXVldWUgYSB0
YXNrIHRvIGZpcmUgYSBzaW1wbGUgZXZlbnQgbmFtZWQgc291cmNlZW5kZWQgYXQgdGhlIE1lZGlh
U291cmNlLgotICAgIHNldFJlYWR5U3RhdGUoZW5kZWRLZXl3b3JkKCkpOwogCiAgICAgLy8gMy4K
ICAgICBpZiAoZXJyb3IuaXNFbXB0eSgpKSB7CiAgICAgICAgIC8vIOKGsyBJZiBlcnJvciBpcyBu
b3Qgc2V0LCBpcyBudWxsLCBvciBpcyBhbiBlbXB0eSBzdHJpbmcKLSAgICAgICAgLy8gMS4gUnVu
IHRoZSBkdXJhdGlvbiBjaGFuZ2UgYWxnb3JpdGhtIHdpdGggbmV3IGR1cmF0aW9uIHNldCB0byB0
aGUgaGlnaGVzdCBlbmQgdGltZXN0YW1wCi0gICAgICAgIC8vIGFjcm9zcyBhbGwgU291cmNlQnVm
ZmVyIG9iamVjdHMgaW4gc291cmNlQnVmZmVycy4KLSAgICAgICAgTWVkaWFUaW1lIG1heEVuZFRp
bWVzdGFtcDsKLSAgICAgICAgZm9yIChhdXRvIGl0ID0gbV9zb3VyY2VCdWZmZXJzLT5iZWdpbigp
LCBlbmQgPSBtX3NvdXJjZUJ1ZmZlcnMtPmVuZCgpOyBpdCAhPSBlbmQ7ICsraXQpCi0gICAgICAg
ICAgICBtYXhFbmRUaW1lc3RhbXAgPSBzdGQ6Om1heCgoKml0KS0+aGlnaGVzdFByZXNlbnRhdGlv
bkVuZFRpbWVzdGFtcCgpLCBtYXhFbmRUaW1lc3RhbXApOwotICAgICAgICBtX3ByaXZhdGUtPnNl
dER1cmF0aW9uKG1heEVuZFRpbWVzdGFtcCk7CisgICAgICAgIC8vIDEuIFJ1biB0aGUgZHVyYXRp
b24gY2hhbmdlIGFsZ29yaXRobSB3aXRoIG5ldyBkdXJhdGlvbiBzZXQgdG8gdGhlIGhpZ2hlc3Qg
ZW5kIHRpbWUgcmVwb3J0ZWQgYnkKKyAgICAgICAgLy8gdGhlIGJ1ZmZlcmVkIGF0dHJpYnV0ZSBh
Y3Jvc3MgYWxsIFNvdXJjZUJ1ZmZlciBvYmplY3RzIGluIHNvdXJjZUJ1ZmZlcnMuCisgICAgICAg
IGRvdWJsZSBtYXhFbmRUaW1lID0gMDsKKyAgICAgICAgZm9yIChhdXRvJiBzb3VyY2VCdWZmZXIg
OiAqbV9zb3VyY2VCdWZmZXJzKSB7CisgICAgICAgICAgICBpZiAoYXV0byBsZW5ndGggPSBzb3Vy
Y2VCdWZmZXItPmJ1ZmZlcmVkKCktPmxlbmd0aCgpKQorICAgICAgICAgICAgICAgIG1heEVuZFRp
bWUgPSBzdGQ6Om1heChzb3VyY2VCdWZmZXItPmJ1ZmZlcmVkKCktPmVuZChsZW5ndGggLSAxLCBJ
R05PUkVfRVhDRVBUSU9OKSwgbWF4RW5kVGltZSk7CisgICAgICAgIH0KKyAgICAgICAgc2V0RHVy
YXRpb25JbnRlcm5hbChtYXhFbmRUaW1lKTsKIAogICAgICAgICAvLyAyLiBOb3RpZnkgdGhlIG1l
ZGlhIGVsZW1lbnQgdGhhdCBpdCBub3cgaGFzIGFsbCBvZiB0aGUgbWVkaWEgZGF0YS4KICAgICAg
ICAgbV9wcml2YXRlLT5tYXJrRW5kT2ZTdHJlYW0oTWVkaWFTb3VyY2VQcml2YXRlOjpFb3NOb0Vy
cm9yKTsKQEAgLTM5Niw2ICs0ODksMTMgQEAgdm9pZCBNZWRpYVNvdXJjZTo6c3RyZWFtRW5kZWRX
aXRoRXJyb3IoY29uc3QgQXRvbWljU3RyaW5nJiBlcnJvciwgRXhjZXB0aW9uQ29kZSYKICAgICAg
ICAgLy8gICBUaHJvdyBhbiBJTlZBTElEX0FDQ0VTU19FUlIgZXhjZXB0aW9uLgogICAgICAgICBl
YyA9IElOVkFMSURfQUNDRVNTX0VSUjsKICAgICB9CisKKyAgICAvLyBOT1RFOiBEbyBzdGVwcyAx
ICYgMiBhZnRlciBzdGVwIDMgdG8gYXZvaWQgdGhlIE1lZGlhU291cmNlJ3MgcmVhZHlTdGF0ZSBi
ZWluZyByZS1vcGVuZWQgYnkgYQorICAgIC8vIHJlbW92ZSgpIG9wZXJhdGlvbiByZXN1bHRpbmcg
ZnJvbSBhIGR1cmF0aW9uIGNoYW5nZS4KKyAgICAvLyBGSVhNRTogUmUtbnVtYmVyIG9yIHVwZGF0
ZSB0aGlzIHNlY3Rpb24gb25jZSA8aHR0cHM6Ly93d3cudzMub3JnL0J1Z3MvUHVibGljL3Nob3df
YnVnLmNnaT9pZD0yNjMxNj4gaXMgcmVzb2x2ZWQuCisgICAgLy8gMS4gQ2hhbmdlIHRoZSByZWFk
eVN0YXRlIGF0dHJpYnV0ZSB2YWx1ZSB0byAiZW5kZWQiLgorICAgIC8vIDIuIFF1ZXVlIGEgdGFz
ayB0byBmaXJlIGEgc2ltcGxlIGV2ZW50IG5hbWVkIHNvdXJjZWVuZGVkIGF0IHRoZSBNZWRpYVNv
dXJjZS4KKyAgICBzZXRSZWFkeVN0YXRlKGVuZGVkS2V5d29yZCgpKTsKIH0KIAogU291cmNlQnVm
ZmVyKiBNZWRpYVNvdXJjZTo6YWRkU291cmNlQnVmZmVyKGNvbnN0IFN0cmluZyYgdHlwZSwgRXhj
ZXB0aW9uQ29kZSYgZWMpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlh
c291cmNlL01lZGlhU291cmNlLmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc291cmNl
L01lZGlhU291cmNlLmgKaW5kZXggNDA3ZTg4NzE4ODVmNzQyOGNiMTRhYTI5N2VmMTM0YmJkYTQ3
YjEyNS4uNzM4OWRiMTQzNDUzNjkzOTBlYmEwNWI4OWQ0YWQ4MmE1NzA2NmExOSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXNvdXJjZS9NZWRpYVNvdXJjZS5oCisrKyBi
L1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzb3VyY2UvTWVkaWFTb3VyY2UuaApAQCAtNzIs
MTEgKzcyLDEzIEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgc2V0UHJpdmF0ZUFuZE9wZW4o
UGFzc1JlZjxNZWRpYVNvdXJjZVByaXZhdGU+KSBvdmVycmlkZTsKICAgICB2aXJ0dWFsIGRvdWJs
ZSBkdXJhdGlvbigpIGNvbnN0IG92ZXJyaWRlOwogICAgIHZpcnR1YWwgc3RkOjp1bmlxdWVfcHRy
PFBsYXRmb3JtVGltZVJhbmdlcz4gYnVmZmVyZWQoKSBjb25zdCBvdmVycmlkZTsKKyAgICB2aXJ0
dWFsIHZvaWQgc2Vla1RvVGltZShjb25zdCBNZWRpYVRpbWUmKSBvdmVycmlkZTsKIAogICAgIGJv
b2wgYXR0YWNoVG9FbGVtZW50KEhUTUxNZWRpYUVsZW1lbnQqKTsKICAgICB2b2lkIGNsb3NlKCk7
CiAgICAgYm9vbCBpc0Nsb3NlZCgpIGNvbnN0OwogICAgIHZvaWQgbW9uaXRvclNvdXJjZUJ1ZmZl
cnMoKTsKKyAgICB2b2lkIGNvbXBsZXRlU2VlaygpOwogCiAgICAgdm9pZCBzZXREdXJhdGlvbihk
b3VibGUsIEV4Y2VwdGlvbkNvZGUmKTsKICAgICB2b2lkIHNldER1cmF0aW9uSW50ZXJuYWwoZG91
YmxlKTsKQEAgLTEyNyw2ICsxMjksOCBAQCBwcm90ZWN0ZWQ6CiAgICAgUmVmUHRyPFNvdXJjZUJ1
ZmZlckxpc3Q+IG1fc291cmNlQnVmZmVyczsKICAgICBSZWZQdHI8U291cmNlQnVmZmVyTGlzdD4g
bV9hY3RpdmVTb3VyY2VCdWZmZXJzOwogICAgIEhUTUxNZWRpYUVsZW1lbnQqIG1fbWVkaWFFbGVt
ZW50OworICAgIGRvdWJsZSBtX2R1cmF0aW9uOworICAgIE1lZGlhVGltZSBtX3BlbmRpbmdTZWVr
VGltZTsKICAgICBBdG9taWNTdHJpbmcgbV9yZWFkeVN0YXRlOwogICAgIEdlbmVyaWNFdmVudFF1
ZXVlIG1fYXN5bmNFdmVudFF1ZXVlOwogfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvbWVkaWFzb3VyY2UvU291cmNlQnVmZmVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvbWVkaWFzb3VyY2UvU291cmNlQnVmZmVyLmNwcAppbmRleCAxYzUzMjg5MWY3ODJiOWEyOTM5
OTUzMDQ0NDg2Zjc2MzBhMDcxZjIzLi4wZjY3OTUwMjU3M2EyMDYyZDY1YWJhZjI1NWRiYThjNGQy
NDM1NWYyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc291cmNlL1Nv
dXJjZUJ1ZmZlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXNvdXJjZS9T
b3VyY2VCdWZmZXIuY3BwCkBAIC0yMzMsNiArMjMzLDcgQEAgdm9pZCBTb3VyY2VCdWZmZXI6OmFi
b3J0KEV4Y2VwdGlvbkNvZGUmIGVjKQogCiB2b2lkIFNvdXJjZUJ1ZmZlcjo6cmVtb3ZlKGRvdWJs
ZSBzdGFydCwgZG91YmxlIGVuZCwgRXhjZXB0aW9uQ29kZSYgZWMpCiB7CisgICAgTE9HKE1lZGlh
U291cmNlLCAiU291cmNlQnVmZmVyOjpyZW1vdmUoJXApIC0gc3RhcnQoJXMpLCBlbmQoJXMpIiwg
dGhpcywgdG9TdHJpbmcoc3RhcnQpLnV0ZjgoKS5kYXRhKCksIHRvU3RyaW5nKGVuZCkudXRmOCgp
LmRhdGEoKSk7CiAgICAgLy8gU2VjdGlvbiAzLjIgcmVtb3ZlKCkgbWV0aG9kIHN0ZXBzLgogICAg
IC8vIDEuIElmIHN0YXJ0IGlzIG5lZ2F0aXZlIG9yIGdyZWF0ZXIgdGhhbiBkdXJhdGlvbiwgdGhl
biB0aHJvdyBhbiBJbnZhbGlkQWNjZXNzRXJyb3IgZXhjZXB0aW9uIGFuZCBhYm9ydCB0aGVzZSBz
dGVwcy4KICAgICAvLyAyLiBJZiBlbmQgaXMgbGVzcyB0aGFuIG9yIGVxdWFsIHRvIHN0YXJ0LCB0
aGVuIHRocm93IGFuIEludmFsaWRBY2Nlc3NFcnJvciBleGNlcHRpb24gYW5kIGFib3J0IHRoZXNl
IHN0ZXBzLgpAQCAtMzA4LDkgKzMwOSw5IEBAIHZvaWQgU291cmNlQnVmZmVyOjpyZW1vdmVkRnJv
bU1lZGlhU291cmNlKCkKICAgICBtX3NvdXJjZSA9IDA7CiB9CiAKLXZvaWQgU291cmNlQnVmZmVy
Ojpzb3VyY2VCdWZmZXJQcml2YXRlU2Vla1RvVGltZShTb3VyY2VCdWZmZXJQcml2YXRlKiwgY29u
c3QgTWVkaWFUaW1lJiB0aW1lKQordm9pZCBTb3VyY2VCdWZmZXI6OnNlZWtUb1RpbWUoY29uc3Qg
TWVkaWFUaW1lJiB0aW1lKQogewotICAgIExPRyhNZWRpYVNvdXJjZSwgIlNvdXJjZUJ1ZmZlcjo6
c291cmNlQnVmZmVyUHJpdmF0ZVNlZWtUb1RpbWUoJXApIC0gdGltZSglcykiLCB0aGlzLCB0b1N0
cmluZyh0aW1lKS51dGY4KCkuZGF0YSgpKTsKKyAgICBMT0coTWVkaWFTb3VyY2UsICJTb3VyY2VC
dWZmZXI6OnNlZWtUb1RpbWUoJXApIC0gdGltZSglcykiLCB0aGlzLCB0b1N0cmluZyh0aW1lKS51
dGY4KCkuZGF0YSgpKTsKIAogICAgIGZvciAoYXV0byYgdHJhY2tCdWZmZXJQYWlyIDogbV90cmFj
a0J1ZmZlck1hcCkgewogICAgICAgICBUcmFja0J1ZmZlciYgdHJhY2tCdWZmZXIgPSB0cmFja0J1
ZmZlclBhaXIudmFsdWU7CkBAIC0zMTgsOCArMzE5LDYgQEAgdm9pZCBTb3VyY2VCdWZmZXI6OnNv
dXJjZUJ1ZmZlclByaXZhdGVTZWVrVG9UaW1lKFNvdXJjZUJ1ZmZlclByaXZhdGUqLCBjb25zdCBN
ZWQKIAogICAgICAgICByZWVucXVldWVNZWRpYUZvclRpbWUodHJhY2tCdWZmZXIsIHRyYWNrSUQs
IHRpbWUpOwogICAgIH0KLQotICAgIG1fc291cmNlLT5tb25pdG9yU291cmNlQnVmZmVycygpOwog
fQogCiBNZWRpYVRpbWUgU291cmNlQnVmZmVyOjpzb3VyY2VCdWZmZXJQcml2YXRlRmFzdFNlZWtU
aW1lRm9yTWVkaWFUaW1lKFNvdXJjZUJ1ZmZlclByaXZhdGUqLCBjb25zdCBNZWRpYVRpbWUmIHRh
cmdldFRpbWUsIGNvbnN0IE1lZGlhVGltZSYgbmVnYXRpdmVUaHJlc2hvbGQsIGNvbnN0IE1lZGlh
VGltZSYgcG9zaXRpdmVUaHJlc2hvbGQpCkBAIC01MjcsNiArNTI2LDggQEAgc3RhdGljIGJvb2wg
ZGVjb2RlVGltZUNvbXBhcmF0b3IoY29uc3QgUHJlc2VudGF0aW9uT3JkZXJTYW1wbGVNYXA6Ok1h
cFR5cGU6OnZhbHUKIAogdm9pZCBTb3VyY2VCdWZmZXI6OnJlbW92ZUNvZGVkRnJhbWVzKGNvbnN0
IE1lZGlhVGltZSYgc3RhcnQsIGNvbnN0IE1lZGlhVGltZSYgZW5kKQogeworICAgIExPRyhNZWRp
YVNvdXJjZSwgIlNvdXJjZUJ1ZmZlcjo6cmVtb3ZlQ29kZWRGcmFtZXMoJXApIC0gc3RhcnQoJXMp
LCBlbmQoJXMpIiwgdGhpcywgdG9TdHJpbmcoc3RhcnQpLnV0ZjgoKS5kYXRhKCksIHRvU3RyaW5n
KGVuZCkudXRmOCgpLmRhdGEoKSk7CisKICAgICAvLyAzLjUuOSBDb2RlZCBGcmFtZSBSZW1vdmFs
IEFsZ29yaXRobQogICAgIC8vIGh0dHBzOi8vZHZjcy53My5vcmcvaGcvaHRtbC1tZWRpYS9yYXct
ZmlsZS90aXAvbWVkaWEtc291cmNlL21lZGlhLXNvdXJjZS5odG1sI3NvdXJjZWJ1ZmZlci1jb2Rl
ZC1mcmFtZS1yZW1vdmFsCiAKQEAgLTE0NDksNyArMTQ1MCw4IEBAIGJvb2wgU291cmNlQnVmZmVy
OjpoYXNGdXR1cmVUaW1lKCkgY29uc3QKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgc2l6
ZV90IGZvdW5kID0gcmFuZ2VzLmZpbmQobmVhcmVzdCk7Ci0gICAgQVNTRVJUKGZvdW5kICE9IG5v
dEZvdW5kKTsKKyAgICBpZiAoZm91bmQgPT0gbm90Rm91bmQpCisgICAgICAgIHJldHVybiBmYWxz
ZTsKIAogICAgIGJvb2wgaWdub3JlZFZhbGlkID0gZmFsc2U7CiAgICAgcmV0dXJuIHJhbmdlcy5l
bmQoZm91bmQsIGlnbm9yZWRWYWxpZCkgLSBjdXJyZW50VGltZSA+IGN1cnJlbnRUaW1lRnVkZ2VG
YWN0b3IoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzb3VyY2Uv
U291cmNlQnVmZmVyLmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc291cmNlL1NvdXJj
ZUJ1ZmZlci5oCmluZGV4IDExNTA1MTZkYzgwMWI3MWFjMGU2MjZkN2E2NjE4MzIyZGNiZjhiNjMu
LjYzYzRkNGM1ZjNiODhjYjg1MjZkOTg5NjFhNmYyNjMwNDc1NjQzYmEgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzb3VyY2UvU291cmNlQnVmZmVyLmgKKysrIGIvU291
cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXNvdXJjZS9Tb3VyY2VCdWZmZXIuaApAQCAtNzcsNiAr
NzcsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBhYm9ydElmVXBkYXRpbmcoKTsKICAgICB2b2lkIHJl
bW92ZWRGcm9tTWVkaWFTb3VyY2UoKTsKICAgICBjb25zdCBNZWRpYVRpbWUmIGhpZ2hlc3RQcmVz
ZW50YXRpb25FbmRUaW1lc3RhbXAoKSBjb25zdCB7IHJldHVybiBtX2hpZ2hlc3RQcmVzZW50YXRp
b25FbmRUaW1lc3RhbXA7IH0KKyAgICB2b2lkIHNlZWtUb1RpbWUoY29uc3QgTWVkaWFUaW1lJik7
CiAKICNpZiBFTkFCTEUoVklERU9fVFJBQ0spCiAgICAgVmlkZW9UcmFja0xpc3QqIHZpZGVvVHJh
Y2tzKCk7CkBAIC0xMTYsNyArMTE3LDYgQEAgcHJpdmF0ZToKICAgICB2aXJ0dWFsIGJvb2wgc291
cmNlQnVmZmVyUHJpdmF0ZUhhc0F1ZGlvKGNvbnN0IFNvdXJjZUJ1ZmZlclByaXZhdGUqKSBjb25z
dCBvdmVycmlkZTsKICAgICB2aXJ0dWFsIGJvb2wgc291cmNlQnVmZmVyUHJpdmF0ZUhhc1ZpZGVv
KGNvbnN0IFNvdXJjZUJ1ZmZlclByaXZhdGUqKSBjb25zdCBvdmVycmlkZTsKICAgICB2aXJ0dWFs
IHZvaWQgc291cmNlQnVmZmVyUHJpdmF0ZURpZEJlY29tZVJlYWR5Rm9yTW9yZVNhbXBsZXMoU291
cmNlQnVmZmVyUHJpdmF0ZSosIEF0b21pY1N0cmluZyB0cmFja0lEKSBvdmVycmlkZTsKLSAgICB2
aXJ0dWFsIHZvaWQgc291cmNlQnVmZmVyUHJpdmF0ZVNlZWtUb1RpbWUoU291cmNlQnVmZmVyUHJp
dmF0ZSosIGNvbnN0IE1lZGlhVGltZSYpOwogICAgIHZpcnR1YWwgTWVkaWFUaW1lIHNvdXJjZUJ1
ZmZlclByaXZhdGVGYXN0U2Vla1RpbWVGb3JNZWRpYVRpbWUoU291cmNlQnVmZmVyUHJpdmF0ZSos
IGNvbnN0IE1lZGlhVGltZSYsIGNvbnN0IE1lZGlhVGltZSYgbmVnYXRpdmVUaHJlc2hvbGQsIGNv
bnN0IE1lZGlhVGltZSYgcG9zaXRpdmVUaHJlc2hvbGQpOwogICAgIHZpcnR1YWwgdm9pZCBzb3Vy
Y2VCdWZmZXJQcml2YXRlQXBwZW5kQ29tcGxldGUoU291cmNlQnVmZmVyUHJpdmF0ZSosIEFwcGVu
ZFJlc3VsdCkgb3ZlcnJpZGU7CiAgICAgdmlydHVhbCB2b2lkIHNvdXJjZUJ1ZmZlclByaXZhdGVE
aWRSZWNlaXZlUmVuZGVyaW5nRXJyb3IoU291cmNlQnVmZmVyUHJpdmF0ZSosIGludCBlcnJvckNv
ZGUpIG92ZXJyaWRlOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MTWVkaWFF
bGVtZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTE1lZGlhRWxlbWVudC5jcHAKaW5k
ZXggY2IxMTc1YTkwMWRkNzQyMTdkMzdkMzEyYzRmOTdhNDYwNzJjY2Q2MC4uNzdiZWJjMGRhNzE5
M2FmZDM4MTk3MTEyODgzOGIxNGY1OTAxMWJjMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
aHRtbC9IVE1MTWVkaWFFbGVtZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxN
ZWRpYUVsZW1lbnQuY3BwCkBAIC00MDkxLDcgKzQwOTEsOCBAQCB2b2lkIEhUTUxNZWRpYUVsZW1l
bnQ6Om1lZGlhUGxheWVyVGltZUNoYW5nZWQoTWVkaWFQbGF5ZXIqKQogICAgIC8vIEFsd2F5cyBj
YWxsIHNjaGVkdWxlVGltZXVwZGF0ZUV2ZW50IHdoZW4gdGhlIG1lZGlhIGVuZ2luZSByZXBvcnRz
IGEgdGltZSBkaXNjb250aW51aXR5LCAKICAgICAvLyBpdCB3aWxsIG9ubHkgcXVldWUgYSAndGlt
ZXVwZGF0ZScgZXZlbnQgaWYgd2UgaGF2ZW4ndCBhbHJlYWR5IHBvc3RlZCBvbmUgYXQgdGhlIGN1
cnJlbnQKICAgICAvLyBtb3ZpZSB0aW1lLgotICAgIHNjaGVkdWxlVGltZXVwZGF0ZUV2ZW50KGZh
bHNlKTsKKyAgICBlbHNlCisgICAgICAgIHNjaGVkdWxlVGltZXVwZGF0ZUV2ZW50KGZhbHNlKTsK
IAogICAgIGRvdWJsZSBub3cgPSBjdXJyZW50VGltZSgpOwogICAgIGRvdWJsZSBkdXIgPSBkdXJh
dGlvbigpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvTWVk
aWFTb3VyY2VQcml2YXRlLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9NZWRp
YVNvdXJjZVByaXZhdGUuaAppbmRleCBkYzI0ZTMxZTZmMjJkNTI3ZDY1ZGE3YjJlOTcxNWQ2ODhk
NzQzYWVjLi43MTg2NTg5MTBiY2UzOTJiOTVkYTU0NzZlNjg5ODk5OWU2NDU3ODQ3IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9NZWRpYVNvdXJjZVByaXZhdGUu
aAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9NZWRpYVNvdXJjZVByaXZh
dGUuaApAQCAtNTEsMTQgKzUxLDE2IEBAIHB1YmxpYzoKIAogICAgIGVudW0gQWRkU3RhdHVzIHsg
T2ssIE5vdFN1cHBvcnRlZCwgUmVhY2hlZElkTGltaXQgfTsKICAgICB2aXJ0dWFsIEFkZFN0YXR1
cyBhZGRTb3VyY2VCdWZmZXIoY29uc3QgQ29udGVudFR5cGUmLCBSZWZQdHI8U291cmNlQnVmZmVy
UHJpdmF0ZT4mKSA9IDA7Ci0gICAgdmlydHVhbCBNZWRpYVRpbWUgZHVyYXRpb24oKSA9IDA7Ci0g
ICAgdmlydHVhbCB2b2lkIHNldER1cmF0aW9uKGNvbnN0IE1lZGlhVGltZSYpID0gMDsKKyAgICB2
aXJ0dWFsIHZvaWQgZHVyYXRpb25DaGFuZ2VkKCkgPSAwOwogICAgIGVudW0gRW5kT2ZTdHJlYW1T
dGF0dXMgeyBFb3NOb0Vycm9yLCBFb3NOZXR3b3JrRXJyb3IsIEVvc0RlY29kZUVycm9yIH07CiAg
ICAgdmlydHVhbCB2b2lkIG1hcmtFbmRPZlN0cmVhbShFbmRPZlN0cmVhbVN0YXR1cykgPSAwOwog
ICAgIHZpcnR1YWwgdm9pZCB1bm1hcmtFbmRPZlN0cmVhbSgpID0gMDsKIAogICAgIHZpcnR1YWwg
TWVkaWFQbGF5ZXI6OlJlYWR5U3RhdGUgcmVhZHlTdGF0ZSgpIGNvbnN0ID0gMDsKICAgICB2aXJ0
dWFsIHZvaWQgc2V0UmVhZHlTdGF0ZShNZWRpYVBsYXllcjo6UmVhZHlTdGF0ZSkgPSAwOworCisg
ICAgdmlydHVhbCB2b2lkIHdhaXRGb3JTZWVrQ29tcGxldGVkKCkgPSAwOworICAgIHZpcnR1YWwg
dm9pZCBzZWVrQ29tcGxldGVkKCkgPSAwOwogfTsKIAogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvTWVkaWFTb3VyY2VQcml2YXRlQ2xpZW50LmggYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9NZWRpYVNvdXJjZVByaXZhdGVDbGllbnQuaApp
bmRleCBlNzY2ZjE0MGU4ZjIzYjE3NWY5ZWQyMWQ1ZTBkMzcxY2MyNGIyMTU4Li40M2YxNzE3YzNj
YmYxMDgxNTdhZWE2MjQzZjA0M2YzZjRkN2FkYTliIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9NZWRpYVNvdXJjZVByaXZhdGVDbGllbnQuaAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9NZWRpYVNvdXJjZVByaXZhdGVDbGllbnQuaApA
QCAtNDIsNiArNDIsNyBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIHNldFByaXZhdGVBbmRP
cGVuKFBhc3NSZWY8TWVkaWFTb3VyY2VQcml2YXRlPikgPSAwOwogICAgIHZpcnR1YWwgZG91Ymxl
IGR1cmF0aW9uKCkgY29uc3QgPSAwOwogICAgIHZpcnR1YWwgc3RkOjp1bmlxdWVfcHRyPFBsYXRm
b3JtVGltZVJhbmdlcz4gYnVmZmVyZWQoKSBjb25zdCA9IDA7CisgICAgdmlydHVhbCB2b2lkIHNl
ZWtUb1RpbWUoY29uc3QgTWVkaWFUaW1lJikgPSAwOwogfTsKIAogfQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL29iamMvTWVkaWFQbGF5
ZXJQcml2YXRlTWVkaWFTb3VyY2VBVkZPYmpDLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9hdmZvdW5kYXRpb24vb2JqYy9NZWRpYVBsYXllclByaXZhdGVNZWRpYVNvdXJjZUFW
Rk9iakMuaAppbmRleCA4MGJlZDQ1ZjMwNTlhZTlkMDQ3OTMwOGY1YmQ5MGMzYWJmZmFmNmViLi5m
MGFiZDI3NTNlOGU3NmE0ZGJhZDczOTA1MjBkN2UwODFkYjQ3MDNhIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24vb2JqYy9NZWRpYVBsYXll
clByaXZhdGVNZWRpYVNvdXJjZUFWRk9iakMuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9hdmZvdW5kYXRpb24vb2JqYy9NZWRpYVBsYXllclByaXZhdGVNZWRpYVNvdXJj
ZUFWRk9iakMuaApAQCAtNjUsNiArNjUsOCBAQCBwdWJsaWM6CiAgICAgdm9pZCBzZXROZXR3b3Jr
U3RhdGUoTWVkaWFQbGF5ZXI6Ok5ldHdvcmtTdGF0ZSk7CiAKICAgICB2b2lkIHNlZWtJbnRlcm5h
bCgpOworICAgIHZvaWQgd2FpdEZvclNlZWtDb21wbGV0ZWQoKTsKKyAgICB2b2lkIHNlZWtDb21w
bGV0ZWQoKTsKICAgICB2b2lkIHNldExvYWRpbmdQcm9ncmVzc3NlZChib29sIGZsYWcpIHsgbV9s
b2FkaW5nUHJvZ3Jlc3NlZCA9IGZsYWc7IH0KICAgICB2b2lkIHNldEhhc0F2YWlsYWJsZVZpZGVv
RnJhbWUoYm9vbCBmbGFnKSB7IG1faGFzQXZhaWxhYmxlVmlkZW9GcmFtZSA9IGZsYWc7IH0KICAg
ICB2b2lkIGR1cmF0aW9uQ2hhbmdlZCgpOwpAQCAtMTU3LDYgKzE1OSw3IEBAIHByaXZhdGU6CiAg
ICAgdm9pZCBlbnN1cmVMYXllcigpOwogICAgIHZvaWQgZGVzdHJveUxheWVyKCk7CiAgICAgYm9v
bCBzaG91bGRCZVBsYXlpbmcoKSBjb25zdDsKKyAgICB2b2lkIHNlZWtUaW1lckZpcmVkKFRpbWVy
PE1lZGlhUGxheWVyUHJpdmF0ZU1lZGlhU291cmNlQVZGT2JqQz4mKTsKIAogICAgIC8vIE1lZGlh
UGxheWVyIEZhY3RvcnkgTWV0aG9kcwogICAgIHN0YXRpYyBQYXNzT3duUHRyPE1lZGlhUGxheWVy
UHJpdmF0ZUludGVyZmFjZT4gY3JlYXRlKE1lZGlhUGxheWVyKik7CkBAIC0xODIsNyArMTg1LDYg
QEAgcHJpdmF0ZToKIAogICAgIE1lZGlhUGxheWVyKiBtX3BsYXllcjsKICAgICBXZWFrUHRyRmFj
dG9yeTxNZWRpYVBsYXllclByaXZhdGVNZWRpYVNvdXJjZUFWRk9iakM+IG1fd2Vha1B0ckZhY3Rv
cnk7Ci0gICAgUmVmUHRyPE1lZGlhU291cmNlUHJpdmF0ZUNsaWVudD4gbV9tZWRpYVNvdXJjZTsK
ICAgICBSZWZQdHI8TWVkaWFTb3VyY2VQcml2YXRlQVZGT2JqQz4gbV9tZWRpYVNvdXJjZVByaXZh
dGU7CiAgICAgUmV0YWluUHRyPEFWQXNzZXQ+IG1fYXNzZXQ7CiAgICAgUmV0YWluUHRyPEFWU2Ft
cGxlQnVmZmVyRGlzcGxheUxheWVyPiBtX3NhbXBsZUJ1ZmZlckRpc3BsYXlMYXllcjsKQEAgLTE5
MCw2ICsxOTIsNyBAQCBwcml2YXRlOgogICAgIFJldGFpblB0cjxBVlNhbXBsZUJ1ZmZlclJlbmRl
clN5bmNocm9uaXplcj4gbV9zeW5jaHJvbml6ZXI7CiAgICAgUmV0YWluUHRyPGlkPiBtX3RpbWVK
dW1wZWRPYnNlcnZlcjsKICAgICBSZXRhaW5QdHI8aWQ+IG1fZHVyYXRpb25PYnNlcnZlcjsKKyAg
ICBUaW1lcjxNZWRpYVBsYXllclByaXZhdGVNZWRpYVNvdXJjZUFWRk9iakM+IG1fc2Vla1RpbWVy
OwogICAgIE1lZGlhUGxheWVyOjpOZXR3b3JrU3RhdGUgbV9uZXR3b3JrU3RhdGU7CiAgICAgTWVk
aWFQbGF5ZXI6OlJlYWR5U3RhdGUgbV9yZWFkeVN0YXRlOwogICAgIGRvdWJsZSBtX3JhdGU7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24v
b2JqYy9NZWRpYVBsYXllclByaXZhdGVNZWRpYVNvdXJjZUFWRk9iakMubW0gYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24vb2JqYy9NZWRpYVBsYXllclByaXZh
dGVNZWRpYVNvdXJjZUFWRk9iakMubW0KaW5kZXggZDhiNjVmNjA4NjJiMGJmZTVjZjM4NjI4MThl
MzRmMzM2YWI3NDcxMy4uNWQ3MzYwMjFlMTRlYjIyZDExNmFiMmJkNTgzYjlkNTU0Zjg0Y2FhZiAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9u
L29iamMvTWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFTb3VyY2VBVkZPYmpDLm1tCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9vYmpjL01lZGlhUGxheWVy
UHJpdmF0ZU1lZGlhU291cmNlQVZGT2JqQy5tbQpAQCAtMjksNiArMjksNyBAQAogI2lmIEVOQUJM
RShNRURJQV9TT1VSQ0UpICYmIFVTRShBVkZPVU5EQVRJT04pCiAKICNpbXBvcnQgIkNETVNlc3Np
b24uaCIKKyNpbXBvcnQgIkxvZ2dpbmcuaCIKICNpbXBvcnQgIk1lZGlhU291cmNlUHJpdmF0ZUFW
Rk9iakMuaCIKICNpbXBvcnQgIk1lZGlhU291cmNlUHJpdmF0ZUNsaWVudC5oIgogI2ltcG9ydCAi
TWVkaWFUaW1lTWFjLmgiCkBAIC0xMzQsNiArMTM1LDcgQEAgTWVkaWFQbGF5ZXJQcml2YXRlTWVk
aWFTb3VyY2VBVkZPYmpDOjpNZWRpYVBsYXllclByaXZhdGVNZWRpYVNvdXJjZUFWRk9iakMoTWVk
aWEKICAgICA6IG1fcGxheWVyKHBsYXllcikKICAgICAsIG1fd2Vha1B0ckZhY3RvcnkodGhpcykK
ICAgICAsIG1fc3luY2hyb25pemVyKGFkb3B0TlMoW1tnZXRBVlNhbXBsZUJ1ZmZlclJlbmRlclN5
bmNocm9uaXplckNsYXNzKCkgYWxsb2NdIGluaXRdKSkKKyAgICAsIG1fc2Vla1RpbWVyKHRoaXMs
ICZNZWRpYVBsYXllclByaXZhdGVNZWRpYVNvdXJjZUFWRk9iakM6OnNlZWtUaW1lckZpcmVkKQog
ICAgICwgbV9uZXR3b3JrU3RhdGUoTWVkaWFQbGF5ZXI6OkVtcHR5KQogICAgICwgbV9yZWFkeVN0
YXRlKE1lZGlhUGxheWVyOjpIYXZlTm90aGluZykKICAgICAsIG1fcmF0ZSgxKQpAQCAtMTQ5LDE5
ICsxNTEsMjQgQEAgTWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFTb3VyY2VBVkZPYmpDOjpNZWRpYVBs
YXllclByaXZhdGVNZWRpYVNvdXJjZUFWRk9iakMoTWVkaWEKICAgICAvLyBhZGRQZXJpb2RpY1Rp
bWVPYnNlcnZlckZvckludGVydmFsOiB0aHJvd3MgYW4gZXhjZXB0aW9uIGlmIHlvdSBwYXNzIGEg
bm9uLW51bWVyaWMgQ01UaW1lLCBzbyBqdXN0IHVzZQogICAgIC8vIGFuIGFyYml0cmFyaWx5IGxh
cmdlIHRpbWUgdmFsdWUgb2Ygb25jZSBhbiBob3VyOgogICAgIF9fYmxvY2sgYXV0byB3ZWFrVGhp
cyA9IGNyZWF0ZVdlYWtQdHIoKTsKLSAgICBtX3RpbWVKdW1wZWRPYnNlcnZlciA9IFttX3N5bmNo
cm9uaXplciBhZGRQZXJpb2RpY1RpbWVPYnNlcnZlckZvckludGVydmFsOnRvQ01UaW1lKE1lZGlh
VGltZTo6Y3JlYXRlV2l0aERvdWJsZSgzNjAwKSkgcXVldWU6ZGlzcGF0Y2hfZ2V0X21haW5fcXVl
dWUoKSB1c2luZ0Jsb2NrOl4oQ01UaW1lKXsKKyAgICBtX3RpbWVKdW1wZWRPYnNlcnZlciA9IFtt
X3N5bmNocm9uaXplciBhZGRQZXJpb2RpY1RpbWVPYnNlcnZlckZvckludGVydmFsOnRvQ01UaW1l
KE1lZGlhVGltZTo6Y3JlYXRlV2l0aERvdWJsZSgzNjAwKSkgcXVldWU6ZGlzcGF0Y2hfZ2V0X21h
aW5fcXVldWUoKSB1c2luZ0Jsb2NrOl4oQ01UaW1lIHRpbWUpIHsKKyNpZiBMT0dfRElTQUJMRUQK
KyAgICAgICAgVU5VU0VEX1BBUkFNKHRpbWUpOworI2VuZGlmCiAgICAgICAgIC8vIEZJWE1FOiBS
ZW1vdmUgdGhlIGJlbG93IG9uY2UgPHJkYXI6Ly9wcm9ibGVtLzE1Nzk4MDUwPiBpcyBmaXhlZC4K
ICAgICAgICAgaWYgKCF3ZWFrVGhpcykKICAgICAgICAgICAgIHJldHVybjsKIAogICAgICAgICBp
ZiAobV9zZWVraW5nICYmICFtX3BlbmRpbmdTZWVrKSB7CisgICAgICAgICAgICBMT0coTWVkaWFT
b3VyY2UsICJNZWRpYVBsYXllclByaXZhdGVNZWRpYVNvdXJjZUFWRk9iakM6Om1fdGltZUp1bXBl
ZE9ic2VydmVyKCVwKSAtIHRpbWUoJXMpIiwgd2Vha1RoaXMuZ2V0KCksIHRvU3RyaW5nKHRvTWVk
aWFUaW1lKHRpbWUpKS51dGY4KCkuZGF0YSgpKTsKICAgICAgICAgICAgIG1fc2Vla2luZyA9IGZh
bHNlOworCiAgICAgICAgICAgICBpZiAoc2hvdWxkQmVQbGF5aW5nKCkpCiAgICAgICAgICAgICAg
ICAgW21fc3luY2hyb25pemVyIHNldFJhdGU6bV9yYXRlXTsKKyAgICAgICAgICAgIGlmICghc2Vl
a2luZygpKQorICAgICAgICAgICAgICAgIG1fcGxheWVyLT50aW1lQ2hhbmdlZCgpOwogICAgICAg
ICB9CiAKLSAgICAgICAgbV9wbGF5ZXItPnRpbWVDaGFuZ2VkKCk7Ci0KICAgICAgICAgaWYgKG1f
cGVuZGluZ1NlZWspCiAgICAgICAgICAgICBzZWVrSW50ZXJuYWwoKTsKICAgICB9XTsKQEAgLTE3
Nyw2ICsxODQsOCBAQCBNZWRpYVBsYXllclByaXZhdGVNZWRpYVNvdXJjZUFWRk9iakM6On5NZWRp
YVBsYXllclByaXZhdGVNZWRpYVNvdXJjZUFWRk9iakMoKQogICAgICAgICBbbV9zeW5jaHJvbml6
ZXIgcmVtb3ZlVGltZU9ic2VydmVyOm1fdGltZUp1bXBlZE9ic2VydmVyLmdldCgpXTsKICAgICBp
ZiAobV9kdXJhdGlvbk9ic2VydmVyKQogICAgICAgICBbbV9zeW5jaHJvbml6ZXIgcmVtb3ZlVGlt
ZU9ic2VydmVyOm1fZHVyYXRpb25PYnNlcnZlci5nZXQoKV07CisKKyAgICBtX3NlZWtUaW1lci5z
dG9wKCk7CiB9CiAKICNwcmFnbWEgbWFyayAtCkBAIC0yODYsMTQgKzI5NSwxMSBAQCB2b2lkIE1l
ZGlhUGxheWVyUHJpdmF0ZU1lZGlhU291cmNlQVZGT2JqQzo6bG9hZChjb25zdCBTdHJpbmcmKQog
ICAgIG1fcGxheWVyLT5uZXR3b3JrU3RhdGVDaGFuZ2VkKCk7CiB9CiAKLXZvaWQgTWVkaWFQbGF5
ZXJQcml2YXRlTWVkaWFTb3VyY2VBVkZPYmpDOjpsb2FkKGNvbnN0IFN0cmluZyYgdXJsLCBNZWRp
YVNvdXJjZVByaXZhdGVDbGllbnQqIHNvdXJjZSkKK3ZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlTWVk
aWFTb3VyY2VBVkZPYmpDOjpsb2FkKGNvbnN0IFN0cmluZyYgdXJsLCBNZWRpYVNvdXJjZVByaXZh
dGVDbGllbnQqIGNsaWVudCkKIHsKICAgICBVTlVTRURfUEFSQU0odXJsKTsKIAotICAgIG1fbWVk
aWFTb3VyY2UgPSBzb3VyY2U7Ci0gICAgbV9tZWRpYVNvdXJjZVByaXZhdGUgPSBNZWRpYVNvdXJj
ZVByaXZhdGVBVkZPYmpDOjpjcmVhdGUodGhpcyk7Ci0KLSAgICBtX21lZGlhU291cmNlLT5zZXRQ
cml2YXRlQW5kT3BlbigqbV9tZWRpYVNvdXJjZVByaXZhdGUpOworICAgIG1fbWVkaWFTb3VyY2VQ
cml2YXRlID0gTWVkaWFTb3VyY2VQcml2YXRlQVZGT2JqQzo6Y3JlYXRlKHRoaXMsIGNsaWVudCk7
CiB9CiAKIHZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFTb3VyY2VBVkZPYmpDOjpjYW5jZWxM
b2FkKCkKQEAgLTQwNiw3ICs0MTIsNyBAQCB2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZU1lZGlhU291
cmNlQVZGT2JqQzo6c2V0VmlzaWJsZShib29sKQogCiBkb3VibGUgTWVkaWFQbGF5ZXJQcml2YXRl
TWVkaWFTb3VyY2VBVkZPYmpDOjpkdXJhdGlvbkRvdWJsZSgpIGNvbnN0CiB7Ci0gICAgcmV0dXJu
IG1fbWVkaWFTb3VyY2UgPyBtX21lZGlhU291cmNlLT5kdXJhdGlvbigpIDogMDsKKyAgICByZXR1
cm4gbV9tZWRpYVNvdXJjZVByaXZhdGUgPyBtX21lZGlhU291cmNlUHJpdmF0ZS0+ZHVyYXRpb24o
KS50b0RvdWJsZSgpIDogMDsKIH0KIAogTWVkaWFUaW1lIE1lZGlhUGxheWVyUHJpdmF0ZU1lZGlh
U291cmNlQVZGT2JqQzo6Y3VycmVudE1lZGlhVGltZSgpIGNvbnN0CkBAIC00MzEsMTYgKzQzNywx
OSBAQCBkb3VibGUgTWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFTb3VyY2VBVkZPYmpDOjppbml0aWFs
VGltZSgpIGNvbnN0CiAKIHZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFTb3VyY2VBVkZPYmpD
OjpzZWVrV2l0aFRvbGVyYW5jZShkb3VibGUgdGltZSwgZG91YmxlIG5lZ2F0aXZlVGhyZXNob2xk
LCBkb3VibGUgcG9zaXRpdmVUaHJlc2hvbGQpCiB7CisgICAgTE9HKE1lZGlhU291cmNlLCAiTWVk
aWFQbGF5ZXJQcml2YXRlTWVkaWFTb3VyY2VBVkZPYmpDOjpzZWVrV2l0aFRvbGVyYW5jZSglcCkg
LSB0aW1lKCVzKSwgbmVnYXRpdmVUaHJlc2hvbGQoJXMpLCBwb3NpdGl2ZVRocmVzaG9sZCglcyki
LCB0aGlzLCB0b1N0cmluZyh0aW1lKS51dGY4KCkuZGF0YSgpLCB0b1N0cmluZyhuZWdhdGl2ZVRo
cmVzaG9sZCkudXRmOCgpLmRhdGEoKSwgdG9TdHJpbmcocG9zaXRpdmVUaHJlc2hvbGQpLnV0Zjgo
KS5kYXRhKCkpOwogICAgIG1fc2Vla2luZyA9IHRydWU7Ci0gICAgbV9zZWVrQ29tcGxldGVkID0g
ZmFsc2U7CiAgICAgYXV0byB3ZWFrVGhpcyA9IGNyZWF0ZVdlYWtQdHIoKTsKICAgICBtX3BlbmRp
bmdTZWVrID0gc3RkOjptYWtlX3VuaXF1ZTxQZW5kaW5nU2Vlaz4oTWVkaWFUaW1lOjpjcmVhdGVX
aXRoRG91YmxlKHRpbWUpLCBNZWRpYVRpbWU6OmNyZWF0ZVdpdGhEb3VibGUobmVnYXRpdmVUaHJl
c2hvbGQpLCBNZWRpYVRpbWU6OmNyZWF0ZVdpdGhEb3VibGUocG9zaXRpdmVUaHJlc2hvbGQpKTsK
IAotICAgIGNhbGxPbk1haW5UaHJlYWQoW3dlYWtUaGlzXSB7Ci0gICAgICAgIGlmICghd2Vha1Ro
aXMpCi0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIHdlYWtUaGlzLmdldCgpLT5zZWVrSW50
ZXJuYWwoKTsKLSAgICB9KTsKKyAgICBpZiAobV9zZWVrVGltZXIuaXNBY3RpdmUoKSkKKyAgICAg
ICAgbV9zZWVrVGltZXIuc3RvcCgpOworICAgIG1fc2Vla1RpbWVyLnN0YXJ0T25lU2hvdCgwKTsK
K30KKwordm9pZCBNZWRpYVBsYXllclByaXZhdGVNZWRpYVNvdXJjZUFWRk9iakM6OnNlZWtUaW1l
ckZpcmVkKFRpbWVyPE1lZGlhUGxheWVyUHJpdmF0ZU1lZGlhU291cmNlQVZGT2JqQz4mKQorewor
ICAgIHNlZWtJbnRlcm5hbCgpOwogfQogCiB2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZU1lZGlhU291
cmNlQVZGT2JqQzo6c2Vla0ludGVybmFsKCkKQEAgLTQ2MCwxMCArNDY5LDMwIEBAIHZvaWQgTWVk
aWFQbGF5ZXJQcml2YXRlTWVkaWFTb3VyY2VBVkZPYmpDOjpzZWVrSW50ZXJuYWwoKQogICAgIGVs
c2UKICAgICAgICAgc2Vla1RpbWUgPSBtX21lZGlhU291cmNlUHJpdmF0ZS0+ZmFzdFNlZWtUaW1l
Rm9yTWVkaWFUaW1lKHBlbmRpbmdTZWVrLT50YXJnZXRUaW1lLCBwZW5kaW5nU2Vlay0+cG9zaXRp
dmVUaHJlc2hvbGQsIHBlbmRpbmdTZWVrLT5uZWdhdGl2ZVRocmVzaG9sZCk7CiAKKyAgICBMT0co
TWVkaWFTb3VyY2UsICJNZWRpYVBsYXllclByaXZhdGVNZWRpYVNvdXJjZUFWRk9iakM6OnNlZWtJ
bnRlcm5hbCglcCkgLSBzZWVrVGltZSglcykiLCB0aGlzLCB0b1N0cmluZyhzZWVrVGltZSkudXRm
OCgpLmRhdGEoKSk7CisKICAgICBbbV9zeW5jaHJvbml6ZXIgc2V0UmF0ZTowIHRpbWU6dG9DTVRp
bWUoc2Vla1RpbWUpXTsKICAgICBtX21lZGlhU291cmNlUHJpdmF0ZS0+c2Vla1RvVGltZShzZWVr
VGltZSk7CiB9CiAKK3ZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFTb3VyY2VBVkZPYmpDOjp3
YWl0Rm9yU2Vla0NvbXBsZXRlZCgpCit7CisgICAgaWYgKCFtX3NlZWtpbmcpCisgICAgICAgIHJl
dHVybjsKKyAgICBMT0coTWVkaWFTb3VyY2UsICJNZWRpYVBsYXllclByaXZhdGVNZWRpYVNvdXJj
ZUFWRk9iakM6OndhaXRGb3JTZWVrQ29tcGxldGVkKCVwKSIsIHRoaXMpOworICAgIG1fc2Vla0Nv
bXBsZXRlZCA9IGZhbHNlOworfQorCit2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZU1lZGlhU291cmNl
QVZGT2JqQzo6c2Vla0NvbXBsZXRlZCgpCit7CisgICAgaWYgKG1fc2Vla0NvbXBsZXRlZCkKKyAg
ICAgICAgcmV0dXJuOworICAgIExPRyhNZWRpYVNvdXJjZSwgIk1lZGlhUGxheWVyUHJpdmF0ZU1l
ZGlhU291cmNlQVZGT2JqQzo6c2Vla0NvbXBsZXRlZCglcCkiLCB0aGlzKTsKKyAgICBtX3NlZWtD
b21wbGV0ZWQgPSB0cnVlOworICAgIGlmICghbV9zZWVraW5nKQorICAgICAgICBtX3BsYXllci0+
dGltZUNoYW5nZWQoKTsKK30KKwogYm9vbCBNZWRpYVBsYXllclByaXZhdGVNZWRpYVNvdXJjZUFW
Rk9iakM6OnNlZWtpbmcoKSBjb25zdAogewogICAgIHJldHVybiBtX3NlZWtpbmcgJiYgIW1fc2Vl
a0NvbXBsZXRlZDsKQEAgLTUwMyw3ICs1MzIsNyBAQCBkb3VibGUgTWVkaWFQbGF5ZXJQcml2YXRl
TWVkaWFTb3VyY2VBVkZPYmpDOjptaW5UaW1lU2Vla2FibGUoKSBjb25zdAogCiBzdGQ6OnVuaXF1
ZV9wdHI8UGxhdGZvcm1UaW1lUmFuZ2VzPiBNZWRpYVBsYXllclByaXZhdGVNZWRpYVNvdXJjZUFW
Rk9iakM6OmJ1ZmZlcmVkKCkgY29uc3QKIHsKLSAgICByZXR1cm4gbV9tZWRpYVNvdXJjZSA/IG1f
bWVkaWFTb3VyY2UtPmJ1ZmZlcmVkKCkgOiBQbGF0Zm9ybVRpbWVSYW5nZXM6OmNyZWF0ZSgpOwor
ICAgIHJldHVybiBtX21lZGlhU291cmNlUHJpdmF0ZSA/IG1fbWVkaWFTb3VyY2VQcml2YXRlLT5i
dWZmZXJlZCgpIDogUGxhdGZvcm1UaW1lUmFuZ2VzOjpjcmVhdGUoKTsKIH0KIAogYm9vbCBNZWRp
YVBsYXllclByaXZhdGVNZWRpYVNvdXJjZUFWRk9iakM6OmRpZExvYWRpbmdQcm9ncmVzcygpIGNv
bnN0CkBAIC02MzYsOCArNjY1LDEwIEBAIHZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFTb3Vy
Y2VBVkZPYmpDOjpkdXJhdGlvbkNoYW5nZWQoKQogICAgIGF1dG8gd2Vha1RoaXMgPSBjcmVhdGVX
ZWFrUHRyKCk7CiAgICAgTlNBcnJheSogdGltZXMgPSBAW1tOU1ZhbHVlIHZhbHVlV2l0aENNVGlt
ZTp0b0NNVGltZShkdXJhdGlvbildXTsKICAgICBtX2R1cmF0aW9uT2JzZXJ2ZXIgPSBbbV9zeW5j
aHJvbml6ZXIgYWRkQm91bmRhcnlUaW1lT2JzZXJ2ZXJGb3JUaW1lczp0aW1lcyBxdWV1ZTpkaXNw
YXRjaF9nZXRfbWFpbl9xdWV1ZSgpIHVzaW5nQmxvY2s6W3dlYWtUaGlzXSB7Ci0gICAgICAgIGlm
ICh3ZWFrVGhpcykKKyAgICAgICAgaWYgKHdlYWtUaGlzKSB7CiAgICAgICAgICAgICB3ZWFrVGhp
cy0+cGF1c2VJbnRlcm5hbCgpOworICAgICAgICAgICAgd2Vha1RoaXMtPm1fcGxheWVyLT50aW1l
Q2hhbmdlZCgpOworICAgICAgICB9CiAgICAgfV07CiAKICAgICBpZiAobV9wbGF5aW5nICYmIGR1
cmF0aW9uIDw9IGN1cnJlbnRNZWRpYVRpbWUoKSkKQEAgLTY3NiwxMSArNzA3LDYgQEAgdm9pZCBN
ZWRpYVBsYXllclByaXZhdGVNZWRpYVNvdXJjZUFWRk9iakM6OnNldFJlYWR5U3RhdGUoTWVkaWFQ
bGF5ZXI6OlJlYWR5U3RhdGUKIAogICAgIG1fcmVhZHlTdGF0ZSA9IHJlYWR5U3RhdGU7CiAKLSAg
ICBpZiAoIW1fc2Vla0NvbXBsZXRlZCAmJiBtX3JlYWR5U3RhdGUgPj0gTWVkaWFQbGF5ZXI6Okhh
dmVDdXJyZW50RGF0YSkgewotICAgICAgICBtX3NlZWtDb21wbGV0ZWQgPSB0cnVlOwotICAgICAg
ICBtX3BsYXllci0+dGltZUNoYW5nZWQoKTsKLSAgICB9Ci0KICAgICBpZiAoc2hvdWxkQmVQbGF5
aW5nKCkpCiAgICAgICAgIFttX3N5bmNocm9uaXplciBzZXRSYXRlOm1fcmF0ZV07CiAgICAgZWxz
ZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0
aW9uL29iamMvTWVkaWFTb3VyY2VQcml2YXRlQVZGT2JqQy5oIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL29iamMvTWVkaWFTb3VyY2VQcml2YXRlQVZGT2Jq
Qy5oCmluZGV4IDJhODExZTliNjdjZTgzMjdjMzE3ZGVmMGRlNTQ3MGJlOTk4YmQ3YzYuLmNiZDFk
NGU5MmEzYjU0Y2M3MzY2MzU3Nzc1ZGVkYTkxMzI4NDlkYTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9vYmpjL01lZGlhU291cmNlUHJp
dmF0ZUFWRk9iakMuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hdmZv
dW5kYXRpb24vb2JqYy9NZWRpYVNvdXJjZVByaXZhdGVBVkZPYmpDLmgKQEAgLTQ1LDMwICs0NSwz
NSBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIENETVNlc3Npb247CiBjbGFzcyBNZWRp
YVBsYXllclByaXZhdGVNZWRpYVNvdXJjZUFWRk9iakM7CitjbGFzcyBNZWRpYVNvdXJjZVByaXZh
dGVDbGllbnQ7CiBjbGFzcyBTb3VyY2VCdWZmZXJQcml2YXRlQVZGT2JqQzsKIGNsYXNzIFRpbWVS
YW5nZXM7CiAKIGNsYXNzIE1lZGlhU291cmNlUHJpdmF0ZUFWRk9iakMgZmluYWwgOiBwdWJsaWMg
TWVkaWFTb3VyY2VQcml2YXRlIHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgUmVmUHRyPE1lZGlhU291
cmNlUHJpdmF0ZUFWRk9iakM+IGNyZWF0ZShNZWRpYVBsYXllclByaXZhdGVNZWRpYVNvdXJjZUFW
Rk9iakMqKTsKKyAgICBzdGF0aWMgUmVmUHRyPE1lZGlhU291cmNlUHJpdmF0ZUFWRk9iakM+IGNy
ZWF0ZShNZWRpYVBsYXllclByaXZhdGVNZWRpYVNvdXJjZUFWRk9iakMqLCBNZWRpYVNvdXJjZVBy
aXZhdGVDbGllbnQqKTsKICAgICB2aXJ0dWFsIH5NZWRpYVNvdXJjZVByaXZhdGVBVkZPYmpDKCk7
CiAKICAgICBNZWRpYVBsYXllclByaXZhdGVNZWRpYVNvdXJjZUFWRk9iakMqIHBsYXllcigpIGNv
bnN0IHsgcmV0dXJuIG1fcGxheWVyOyB9CiAgICAgY29uc3QgVmVjdG9yPFNvdXJjZUJ1ZmZlclBy
aXZhdGVBVkZPYmpDKj4mIGFjdGl2ZVNvdXJjZUJ1ZmZlcnMoKSBjb25zdCB7IHJldHVybiBtX2Fj
dGl2ZVNvdXJjZUJ1ZmZlcnM7IH0KIAogICAgIHZpcnR1YWwgQWRkU3RhdHVzIGFkZFNvdXJjZUJ1
ZmZlcihjb25zdCBDb250ZW50VHlwZSYsIFJlZlB0cjxTb3VyY2VCdWZmZXJQcml2YXRlPiYpIG92
ZXJyaWRlOwotICAgIHZpcnR1YWwgTWVkaWFUaW1lIGR1cmF0aW9uKCkgb3ZlcnJpZGU7Ci0gICAg
dmlydHVhbCB2b2lkIHNldER1cmF0aW9uKGNvbnN0IE1lZGlhVGltZSYpIG92ZXJyaWRlOworICAg
IHZpcnR1YWwgdm9pZCBkdXJhdGlvbkNoYW5nZWQoKSBvdmVycmlkZTsKICAgICB2aXJ0dWFsIHZv
aWQgbWFya0VuZE9mU3RyZWFtKEVuZE9mU3RyZWFtU3RhdHVzKSBvdmVycmlkZTsKICAgICB2aXJ0
dWFsIHZvaWQgdW5tYXJrRW5kT2ZTdHJlYW0oKSBvdmVycmlkZTsKICAgICB2aXJ0dWFsIE1lZGlh
UGxheWVyOjpSZWFkeVN0YXRlIHJlYWR5U3RhdGUoKSBjb25zdCBvdmVycmlkZTsKICAgICB2aXJ0
dWFsIHZvaWQgc2V0UmVhZHlTdGF0ZShNZWRpYVBsYXllcjo6UmVhZHlTdGF0ZSkgb3ZlcnJpZGU7
CisgICAgdmlydHVhbCB2b2lkIHdhaXRGb3JTZWVrQ29tcGxldGVkKCkgb3ZlcnJpZGU7CisgICAg
dmlydHVhbCB2b2lkIHNlZWtDb21wbGV0ZWQoKSBvdmVycmlkZTsKKworICAgIE1lZGlhVGltZSBk
dXJhdGlvbigpOworICAgIHN0ZDo6dW5pcXVlX3B0cjxQbGF0Zm9ybVRpbWVSYW5nZXM+IGJ1ZmZl
cmVkKCk7CiAKICAgICBib29sIGhhc0F1ZGlvKCkgY29uc3Q7CiAgICAgYm9vbCBoYXNWaWRlbygp
IGNvbnN0OwogCi0gICAgdm9pZCBzZWVrVG9UaW1lKE1lZGlhVGltZSk7Ci0gICAgTWVkaWFUaW1l
IGZhc3RTZWVrVGltZUZvck1lZGlhVGltZShNZWRpYVRpbWUsIE1lZGlhVGltZSBuZWdhdGl2ZVRo
cmVzaG9sZCwgTWVkaWFUaW1lIHBvc2l0aXZlVGhyZXNob2xkKTsKKyAgICB2b2lkIHNlZWtUb1Rp
bWUoY29uc3QgTWVkaWFUaW1lJik7CisgICAgTWVkaWFUaW1lIGZhc3RTZWVrVGltZUZvck1lZGlh
VGltZShjb25zdCBNZWRpYVRpbWUmLCBjb25zdCBNZWRpYVRpbWUmIG5lZ2F0aXZlVGhyZXNob2xk
LCBjb25zdCBNZWRpYVRpbWUmIHBvc2l0aXZlVGhyZXNob2xkKTsKICAgICBJbnRTaXplIG5hdHVy
YWxTaXplKCkgY29uc3Q7CiAKICNpZiBFTkFCTEUoRU5DUllQVEVEX01FRElBX1YyKQpAQCAtNzYs
NyArODEsNyBAQCBwdWJsaWM6CiAjZW5kaWYKIAogcHJpdmF0ZToKLSAgICBNZWRpYVNvdXJjZVBy
aXZhdGVBVkZPYmpDKE1lZGlhUGxheWVyUHJpdmF0ZU1lZGlhU291cmNlQVZGT2JqQyopOworICAg
IE1lZGlhU291cmNlUHJpdmF0ZUFWRk9iakMoTWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFTb3VyY2VB
VkZPYmpDKiwgTWVkaWFTb3VyY2VQcml2YXRlQ2xpZW50Kik7CiAKICAgICB2b2lkIHNvdXJjZUJ1
ZmZlclByaXZhdGVEaWRDaGFuZ2VBY3RpdmVTdGF0ZShTb3VyY2VCdWZmZXJQcml2YXRlQVZGT2Jq
QyosIGJvb2wgYWN0aXZlKTsKICAgICB2b2lkIHNvdXJjZUJ1ZmZlclByaXZhdGVEaWRSZWNlaXZl
SW5pdGlhbGl6YXRpb25TZWdtZW50KFNvdXJjZUJ1ZmZlclByaXZhdGVBVkZPYmpDKik7CkBAIC04
OSw3ICs5NCw3IEBAIHByaXZhdGU6CiAgICAgZnJpZW5kIGNsYXNzIFNvdXJjZUJ1ZmZlclByaXZh
dGVBVkZPYmpDOwogCiAgICAgTWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFTb3VyY2VBVkZPYmpDKiBt
X3BsYXllcjsKLSAgICBNZWRpYVRpbWUgbV9kdXJhdGlvbjsKKyAgICBSZWZQdHI8TWVkaWFTb3Vy
Y2VQcml2YXRlQ2xpZW50PiBtX2NsaWVudDsKICAgICBWZWN0b3I8UmVmUHRyPFNvdXJjZUJ1ZmZl
clByaXZhdGVBVkZPYmpDPj4gbV9zb3VyY2VCdWZmZXJzOwogICAgIFZlY3RvcjxTb3VyY2VCdWZm
ZXJQcml2YXRlQVZGT2JqQyo+IG1fYWN0aXZlU291cmNlQnVmZmVyczsKICAgICBEZXF1ZTxTb3Vy
Y2VCdWZmZXJQcml2YXRlQVZGT2JqQyo+IG1fc291cmNlQnVmZmVyc05lZWRpbmdTZXNzaW9uczsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlv
bi9vYmpjL01lZGlhU291cmNlUHJpdmF0ZUFWRk9iakMubW0gYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24vb2JqYy9NZWRpYVNvdXJjZVByaXZhdGVBVkZPYmpD
Lm1tCmluZGV4IDFmYWYxOTdkMDQyM2JlYTNkZDBhYWI5ODI5MzM5YzFjYWZhMDFhMGYuLmYyYTRi
MzRmMzA0NzI2ZGRkZTNhZWMyY2ZjMDM1MGJhNDJlOWU1NDUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9vYmpjL01lZGlhU291cmNlUHJp
dmF0ZUFWRk9iakMubW0KKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYXZm
b3VuZGF0aW9uL29iamMvTWVkaWFTb3VyY2VQcml2YXRlQVZGT2JqQy5tbQpAQCAtMzIsNiArMzIs
NyBAQAogI2ltcG9ydCAiQ29udGVudFR5cGUuaCIKICNpbXBvcnQgIkV4Y2VwdGlvbkNvZGVQbGFj
ZWhvbGRlci5oIgogI2ltcG9ydCAiTWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFTb3VyY2VBVkZPYmpD
LmgiCisjaW1wb3J0ICJNZWRpYVNvdXJjZVByaXZhdGVDbGllbnQuaCIKICNpbXBvcnQgIlNvdXJj
ZUJ1ZmZlclByaXZhdGVBVkZPYmpDLmgiCiAjaW1wb3J0ICJTb2Z0TGlua2luZy5oIgogI2ltcG9y
dCA8b2JqYy9ydW50aW1lLmg+CkBAIC00MywxNCArNDQsMTYgQEAgbmFtZXNwYWNlIFdlYkNvcmUg
ewogI3ByYWdtYSBtYXJrIC0KICNwcmFnbWEgbWFyayBNZWRpYVNvdXJjZVByaXZhdGVBVkZPYmpD
CiAKLVJlZlB0cjxNZWRpYVNvdXJjZVByaXZhdGVBVkZPYmpDPiBNZWRpYVNvdXJjZVByaXZhdGVB
VkZPYmpDOjpjcmVhdGUoTWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFTb3VyY2VBVkZPYmpDKiBwYXJl
bnQpCitSZWZQdHI8TWVkaWFTb3VyY2VQcml2YXRlQVZGT2JqQz4gTWVkaWFTb3VyY2VQcml2YXRl
QVZGT2JqQzo6Y3JlYXRlKE1lZGlhUGxheWVyUHJpdmF0ZU1lZGlhU291cmNlQVZGT2JqQyogcGFy
ZW50LCBNZWRpYVNvdXJjZVByaXZhdGVDbGllbnQqIGNsaWVudCkKIHsKLSAgICByZXR1cm4gYWRv
cHRSZWYobmV3IE1lZGlhU291cmNlUHJpdmF0ZUFWRk9iakMocGFyZW50KSk7CisgICAgUmVmUHRy
PE1lZGlhU291cmNlUHJpdmF0ZUFWRk9iakM+IG1lZGlhU291cmNlUHJpdmF0ZSA9IGFkb3B0UmVm
KG5ldyBNZWRpYVNvdXJjZVByaXZhdGVBVkZPYmpDKHBhcmVudCwgY2xpZW50KSk7CisgICAgY2xp
ZW50LT5zZXRQcml2YXRlQW5kT3BlbigqbWVkaWFTb3VyY2VQcml2YXRlKTsKKyAgICByZXR1cm4g
bWVkaWFTb3VyY2VQcml2YXRlOwogfQogCi1NZWRpYVNvdXJjZVByaXZhdGVBVkZPYmpDOjpNZWRp
YVNvdXJjZVByaXZhdGVBVkZPYmpDKE1lZGlhUGxheWVyUHJpdmF0ZU1lZGlhU291cmNlQVZGT2Jq
QyogcGFyZW50KQorTWVkaWFTb3VyY2VQcml2YXRlQVZGT2JqQzo6TWVkaWFTb3VyY2VQcml2YXRl
QVZGT2JqQyhNZWRpYVBsYXllclByaXZhdGVNZWRpYVNvdXJjZUFWRk9iakMqIHBhcmVudCwgTWVk
aWFTb3VyY2VQcml2YXRlQ2xpZW50KiBjbGllbnQpCiAgICAgOiBtX3BsYXllcihwYXJlbnQpCi0g
ICAgLCBtX2R1cmF0aW9uKE1lZGlhVGltZTo6aW52YWxpZFRpbWUoKSkKKyAgICAsIG1fY2xpZW50
KGNsaWVudCkKICAgICAsIG1faXNFbmRlZChmYWxzZSkKIHsKIH0KQEAgLTkxLDE1ICs5NCwxNiBA
QCB2b2lkIE1lZGlhU291cmNlUHJpdmF0ZUFWRk9iakM6OnJlbW92ZVNvdXJjZUJ1ZmZlcihTb3Vy
Y2VCdWZmZXJQcml2YXRlKiBidWZmZXIpCiAKIE1lZGlhVGltZSBNZWRpYVNvdXJjZVByaXZhdGVB
VkZPYmpDOjpkdXJhdGlvbigpCiB7Ci0gICAgcmV0dXJuIG1fZHVyYXRpb247CisgICAgcmV0dXJu
IE1lZGlhVGltZTo6Y3JlYXRlV2l0aERvdWJsZShtX2NsaWVudC0+ZHVyYXRpb24oKSk7CiB9CiAK
LXZvaWQgTWVkaWFTb3VyY2VQcml2YXRlQVZGT2JqQzo6c2V0RHVyYXRpb24oY29uc3QgTWVkaWFU
aW1lJiBkdXJhdGlvbikKK3N0ZDo6dW5pcXVlX3B0cjxQbGF0Zm9ybVRpbWVSYW5nZXM+IE1lZGlh
U291cmNlUHJpdmF0ZUFWRk9iakM6OmJ1ZmZlcmVkKCkKIHsKLSAgICBpZiAoZHVyYXRpb24gPT0g
bV9kdXJhdGlvbikKLSAgICAgICAgcmV0dXJuOworICAgIHJldHVybiBtX2NsaWVudC0+YnVmZmVy
ZWQoKTsKK30KIAotICAgIG1fZHVyYXRpb24gPSBkdXJhdGlvbjsKK3ZvaWQgTWVkaWFTb3VyY2VQ
cml2YXRlQVZGT2JqQzo6ZHVyYXRpb25DaGFuZ2VkKCkKK3sKICAgICBtX3BsYXllci0+ZHVyYXRp
b25DaGFuZ2VkKCk7CiB9CiAKQEAgLTEyNiw2ICsxMzAsMTYgQEAgdm9pZCBNZWRpYVNvdXJjZVBy
aXZhdGVBVkZPYmpDOjpzZXRSZWFkeVN0YXRlKE1lZGlhUGxheWVyOjpSZWFkeVN0YXRlIHJlYWR5
U3RhdGUKICAgICBtX3BsYXllci0+c2V0UmVhZHlTdGF0ZShyZWFkeVN0YXRlKTsKIH0KIAordm9p
ZCBNZWRpYVNvdXJjZVByaXZhdGVBVkZPYmpDOjp3YWl0Rm9yU2Vla0NvbXBsZXRlZCgpCit7Cisg
ICAgbV9wbGF5ZXItPndhaXRGb3JTZWVrQ29tcGxldGVkKCk7Cit9CisKK3ZvaWQgTWVkaWFTb3Vy
Y2VQcml2YXRlQVZGT2JqQzo6c2Vla0NvbXBsZXRlZCgpCit7CisgICAgbV9wbGF5ZXItPnNlZWtD
b21wbGV0ZWQoKTsKK30KKwogdm9pZCBNZWRpYVNvdXJjZVByaXZhdGVBVkZPYmpDOjpzb3VyY2VC
dWZmZXJQcml2YXRlRGlkQ2hhbmdlQWN0aXZlU3RhdGUoU291cmNlQnVmZmVyUHJpdmF0ZUFWRk9i
akMqIGJ1ZmZlciwgYm9vbCBhY3RpdmUpCiB7CiAgICAgaWYgKGFjdGl2ZSAmJiAhbV9hY3RpdmVT
b3VyY2VCdWZmZXJzLmNvbnRhaW5zKGJ1ZmZlcikpCkBAIC0xNzgsMTMgKzE5MiwxMiBAQCBib29s
IE1lZGlhU291cmNlUHJpdmF0ZUFWRk9iakM6Omhhc1ZpZGVvKCkgY29uc3QKICAgICByZXR1cm4g
c3RkOjphbnlfb2YobV9hY3RpdmVTb3VyY2VCdWZmZXJzLmJlZ2luKCksIG1fYWN0aXZlU291cmNl
QnVmZmVycy5lbmQoKSwgTWVkaWFTb3VyY2VQcml2YXRlQVZGT2JqQ0hhc1ZpZGVvKTsKIH0KIAot
dm9pZCBNZWRpYVNvdXJjZVByaXZhdGVBVkZPYmpDOjpzZWVrVG9UaW1lKE1lZGlhVGltZSB0aW1l
KQordm9pZCBNZWRpYVNvdXJjZVByaXZhdGVBVkZPYmpDOjpzZWVrVG9UaW1lKGNvbnN0IE1lZGlh
VGltZSYgdGltZSkKIHsKLSAgICBmb3IgKGF1dG8mIGJ1ZmZlciA6IG1fYWN0aXZlU291cmNlQnVm
ZmVycykKLSAgICAgICAgYnVmZmVyLT5zZWVrVG9UaW1lKHRpbWUpOworICAgIG1fY2xpZW50LT5z
ZWVrVG9UaW1lKHRpbWUpOwogfQogCi1NZWRpYVRpbWUgTWVkaWFTb3VyY2VQcml2YXRlQVZGT2Jq
Qzo6ZmFzdFNlZWtUaW1lRm9yTWVkaWFUaW1lKE1lZGlhVGltZSB0YXJnZXRUaW1lLCBNZWRpYVRp
bWUgbmVnYXRpdmVUaHJlc2hvbGQsIE1lZGlhVGltZSBwb3NpdGl2ZVRocmVzaG9sZCkKK01lZGlh
VGltZSBNZWRpYVNvdXJjZVByaXZhdGVBVkZPYmpDOjpmYXN0U2Vla1RpbWVGb3JNZWRpYVRpbWUo
Y29uc3QgTWVkaWFUaW1lJiB0YXJnZXRUaW1lLCBjb25zdCBNZWRpYVRpbWUmIG5lZ2F0aXZlVGhy
ZXNob2xkLCBjb25zdCBNZWRpYVRpbWUmIHBvc2l0aXZlVGhyZXNob2xkKQogewogICAgIE1lZGlh
VGltZSBzZWVrVGltZSA9IHRhcmdldFRpbWU7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9vYmpjL1NvdXJjZUJ1ZmZlclByaXZhdGVB
VkZPYmpDLm1tIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9u
L29iamMvU291cmNlQnVmZmVyUHJpdmF0ZUFWRk9iakMubW0KaW5kZXggOTJlMjcwZGI2NDQ0NGUw
ZDBhNGRhZmIzMmNjY2E2MDIwYmVjOTliNC4uYmUyYTNjYTlhOTAyMDU5OTIwNzMzYTQ1MTQxZGY2
YWE4OWUyMTZjOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
YXZmb3VuZGF0aW9uL29iamMvU291cmNlQnVmZmVyUHJpdmF0ZUFWRk9iakMubW0KKysrIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL29iamMvU291cmNlQnVm
ZmVyUHJpdmF0ZUFWRk9iakMubW0KQEAgLTEyMiw2ICsxMjIsNyBAQCBTT0ZUX0xJTksoQ29yZU1l
ZGlhLCBDTVZpZGVvRm9ybWF0RGVzY3JpcHRpb25HZXRQcmVzZW50YXRpb25EaW1lbnNpb25zLCBD
R1NpemUsCiAtICh2b2lkKWFwcGVuZFN0cmVhbURhdGE6KE5TRGF0YSAqKWRhdGE7CiAtICh2b2lk
KXNldFNob3VsZFByb3ZpZGVNZWRpYURhdGE6KEJPT0wpc2hvdWxkUHJvdmlkZU1lZGlhRGF0YSBm
b3JUcmFja0lEOihDTVBlcnNpc3RlbnRUcmFja0lEKXRyYWNrSUQ7CiAtIChCT09MKXNob3VsZFBy
b3ZpZGVNZWRpYURhdGFGb3JUcmFja0lEOihDTVBlcnNpc3RlbnRUcmFja0lEKXRyYWNrSUQ7Cist
ICh2b2lkKXByb3ZpZGVQZW5kaW5nTWVkaWFEYXRhOwogLSAodm9pZClwcm9jZXNzQ29udGVudEtl
eVJlc3BvbnNlRGF0YTooTlNEYXRhICopY29udGVudEtleVJlc3BvbnNlRGF0YSBmb3JUcmFja0lE
OihDTVBlcnNpc3RlbnRUcmFja0lEKXRyYWNrSUQ7CiAtICh2b2lkKXByb2Nlc3NDb250ZW50S2V5
UmVzcG9uc2VFcnJvcjooTlNFcnJvciAqKWVycm9yIGZvclRyYWNrSUQ6KENNUGVyc2lzdGVudFRy
YWNrSUQpdHJhY2tJRDsKIC0gKHZvaWQpcmVuZXdFeHBpcmluZ0NvbnRlbnRLZXlSZXNwb25zZURh
dGFGb3JUcmFja0lEOihDTVBlcnNpc3RlbnRUcmFja0lEKXRyYWNrSUQ7CkBAIC02ODIsNyArNjgz
LDcgQEAgc3RhdGljIGRpc3BhdGNoX3F1ZXVlX3QgZ2xvYmFsRGF0YVBhcnNlclF1ZXVlKCkKICAg
ICBzdGF0aWMgZGlzcGF0Y2hfcXVldWVfdCBnbG9iYWxRdWV1ZTsKICAgICBzdGF0aWMgZGlzcGF0
Y2hfb25jZV90IG9uY2VUb2tlbjsKICAgICBkaXNwYXRjaF9vbmNlKCZvbmNlVG9rZW4sIF57Ci0g
ICAgICAgIGdsb2JhbFF1ZXVlID0gZGlzcGF0Y2hfcXVldWVfY3JlYXRlKCJTb3VyY2VCdWZmZXJQ
cml2YXRlQVZGT2JqQyBkYXRhIHBhcnNlciBxdWV1ZSIsIERJU1BBVENIX1FVRVVFX1NFUklBTCk7
CisgICAgICAgIGdsb2JhbFF1ZXVlID0gZGlzcGF0Y2hfcXVldWVfY3JlYXRlKCJTb3VyY2VCdWZm
ZXJQcml2YXRlQVZGT2JqQyBkYXRhIHBhcnNlciBxdWV1ZSIsIERJU1BBVENIX1FVRVVFX0NPTkNV
UlJFTlQpOwogICAgIH0pOwogICAgIHJldHVybiBnbG9iYWxRdWV1ZTsKIH0KZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9NZWRpYVNvdXJjZUdT
dHJlYW1lci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIv
TWVkaWFTb3VyY2VHU3RyZWFtZXIuY3BwCmluZGV4IGM0YmJhODQzNDI0MTczYmU4YTg2NTcyYTdk
YWJjODkzN2I3MjZlZGYuLmQzNmZiNjBiOGI5MDY5NDViNGQwNmM5Y2RkMTA0OWJhMzIxNDhkMDgg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9N
ZWRpYVNvdXJjZUdTdHJlYW1lci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvZ3N0cmVhbWVyL01lZGlhU291cmNlR1N0cmVhbWVyLmNwcApAQCAtNDIsMTMgKzQyLDE2
IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogdm9pZCBNZWRpYVNvdXJjZUdTdHJlYW1lcjo6b3Bl
bihNZWRpYVNvdXJjZVByaXZhdGVDbGllbnQqIG1lZGlhU291cmNlLCBXZWJLaXRNZWRpYVNyYyog
c3JjKQogewotICAgIG1lZGlhU291cmNlLT5zZXRQcml2YXRlQW5kT3BlbihhZG9wdFJlZigqbmV3
IE1lZGlhU291cmNlR1N0cmVhbWVyKHNyYykpKTsKKyAgICBBU1NFUlQobWVkaWFTb3VyY2UpOwor
ICAgIG1lZGlhU291cmNlLT5zZXRQcml2YXRlQW5kT3BlbihhZG9wdFJlZigqbmV3IE1lZGlhU291
cmNlR1N0cmVhbWVyKG1lZGlhU291cmNlLCBzcmMpKSk7CiB9CiAKLU1lZGlhU291cmNlR1N0cmVh
bWVyOjpNZWRpYVNvdXJjZUdTdHJlYW1lcihXZWJLaXRNZWRpYVNyYyogc3JjKQorTWVkaWFTb3Vy
Y2VHU3RyZWFtZXI6Ok1lZGlhU291cmNlR1N0cmVhbWVyKE1lZGlhU291cmNlUHJpdmF0ZUNsaWVu
dCogbWVkaWFTb3VyY2UsIFdlYktpdE1lZGlhU3JjKiBzcmMpCiAgICAgOiBtX2NsaWVudChhZG9w
dFJlZihuZXcgTWVkaWFTb3VyY2VDbGllbnRHc3RyZWFtZXIoc3JjKSkpCisgICAgLCBtX21lZGlh
U291cmNlKG1lZGlhU291cmNlKQogICAgICwgbV9yZWFkeVN0YXRlKE1lZGlhUGxheWVyOjpIYXZl
Tm90aGluZykKIHsKKyAgICBBU1NFUlQobV9jbGllbnQpOwogfQogCiBNZWRpYVNvdXJjZUdTdHJl
YW1lcjo6fk1lZGlhU291cmNlR1N0cmVhbWVyKCkKQEAgLTYxLDIyICs2NCwxOCBAQCBNZWRpYVNv
dXJjZUdTdHJlYW1lcjo6QWRkU3RhdHVzIE1lZGlhU291cmNlR1N0cmVhbWVyOjphZGRTb3VyY2VC
dWZmZXIoY29uc3QgQ29udAogICAgIHJldHVybiBNZWRpYVNvdXJjZUdTdHJlYW1lcjo6T2s7CiB9
CiAKLXZvaWQgTWVkaWFTb3VyY2VHU3RyZWFtZXI6OnNldER1cmF0aW9uKGNvbnN0IE1lZGlhVGlt
ZSYgZHVyYXRpb24pCit2b2lkIE1lZGlhU291cmNlR1N0cmVhbWVyOjpkdXJhdGlvbkNoYW5nZWQo
KQogewotICAgIEFTU0VSVChtX2NsaWVudCk7Ci0gICAgbV9kdXJhdGlvbiA9IGR1cmF0aW9uOwot
ICAgIG1fY2xpZW50LT5kaWRSZWNlaXZlRHVyYXRpb24oZHVyYXRpb24udG9Eb3VibGUoKSk7Cisg
ICAgbV9jbGllbnQtPmRpZFJlY2VpdmVEdXJhdGlvbihtX21lZGlhU291cmNlLT5kdXJhdGlvbigp
KTsKIH0KIAogdm9pZCBNZWRpYVNvdXJjZUdTdHJlYW1lcjo6bWFya0VuZE9mU3RyZWFtKEVuZE9m
U3RyZWFtU3RhdHVzKQogewotICAgIEFTU0VSVChtX2NsaWVudCk7CiAgICAgbV9jbGllbnQtPmRp
ZEZpbmlzaExvYWRpbmcoMCk7CiB9CiAKIHZvaWQgTWVkaWFTb3VyY2VHU3RyZWFtZXI6OnVubWFy
a0VuZE9mU3RyZWFtKCkKIHsKLSAgICBBU1NFUlQobV9jbGllbnQpOwogfQogCiB9CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvTWVkaWFTb3Vy
Y2VHU3RyZWFtZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1l
ci9NZWRpYVNvdXJjZUdTdHJlYW1lci5oCmluZGV4IDI3NDZhMTZkODU2NDcwMTNhY2M0ZTg2Zjg4
YmFmOWJkMDkzYzlmYmIuLmEyMjA1N2IwOTFjNGRjZTZmZmJiM2I3ZWQ1NWUyMDVkZmQ2YmUyZTQg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9N
ZWRpYVNvdXJjZUdTdHJlYW1lci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2dzdHJlYW1lci9NZWRpYVNvdXJjZUdTdHJlYW1lci5oCkBAIC0zOCwyMiArMzgsMjUgQEAK
IAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1jbGFzcyBNZWRpYVNvdXJjZUdTdHJlYW1lciBmaW5h
bCA6IHB1YmxpYyBNZWRpYVNvdXJjZVByaXZhdGUgeworY2xhc3MgTWVkaWFTb3VyY2VHU3RyZWFt
ZXIgZmluYWwgOiBNZWRpYVNvdXJjZVByaXZhdGUgewogcHVibGljOgogICAgIHN0YXRpYyB2b2lk
IG9wZW4oTWVkaWFTb3VyY2VQcml2YXRlQ2xpZW50KiwgV2ViS2l0TWVkaWFTcmMqKTsKICAgICB+
TWVkaWFTb3VyY2VHU3RyZWFtZXIoKTsKLSAgICBBZGRTdGF0dXMgYWRkU291cmNlQnVmZmVyKGNv
bnN0IENvbnRlbnRUeXBlJiwgUmVmUHRyPFNvdXJjZUJ1ZmZlclByaXZhdGU+Jik7Ci0gICAgTWVk
aWFUaW1lIGR1cmF0aW9uKCkgeyByZXR1cm4gbV9kdXJhdGlvbjsgfQotICAgIHZvaWQgc2V0RHVy
YXRpb24oY29uc3QgTWVkaWFUaW1lJik7Ci0gICAgdm9pZCBtYXJrRW5kT2ZTdHJlYW0oRW5kT2ZT
dHJlYW1TdGF0dXMpOwotICAgIHZvaWQgdW5tYXJrRW5kT2ZTdHJlYW0oKTsKLSAgICBNZWRpYVBs
YXllcjo6UmVhZHlTdGF0ZSByZWFkeVN0YXRlKCkgY29uc3QgeyByZXR1cm4gbV9yZWFkeVN0YXRl
OyB9Ci0gICAgdm9pZCBzZXRSZWFkeVN0YXRlKE1lZGlhUGxheWVyOjpSZWFkeVN0YXRlIHJlYWR5
U3RhdGUpIHsgbV9yZWFkeVN0YXRlID0gcmVhZHlTdGF0ZTsgfQogCiBwcml2YXRlOgorICAgIC8v
IE1lZGlhU291cmNlUHJpdmF0ZQorICAgIHZpcnR1YWwgQWRkU3RhdHVzIGFkZFNvdXJjZUJ1ZmZl
cihjb25zdCBDb250ZW50VHlwZSYsIFJlZlB0cjxTb3VyY2VCdWZmZXJQcml2YXRlPiYpIG92ZXJy
aWRlOworICAgIHZpcnR1YWwgdm9pZCBkdXJhdGlvbkNoYW5nZWQoKSBvdmVycmlkZTsKKyAgICB2
aXJ0dWFsIHZvaWQgbWFya0VuZE9mU3RyZWFtKEVuZE9mU3RyZWFtU3RhdHVzKSBvdmVycmlkZTsK
KyAgICB2aXJ0dWFsIHZvaWQgdW5tYXJrRW5kT2ZTdHJlYW0oKSBvdmVycmlkZTsKKyAgICB2aXJ0
dWFsIE1lZGlhUGxheWVyOjpSZWFkeVN0YXRlIHJlYWR5U3RhdGUoKSBjb25zdCBvdmVycmlkZSB7
IHJldHVybiBtX3JlYWR5U3RhdGU7IH0KKyAgICB2aXJ0dWFsIHZvaWQgc2V0UmVhZHlTdGF0ZShN
ZWRpYVBsYXllcjo6UmVhZHlTdGF0ZSByZWFkeVN0YXRlKSBvdmVycmlkZSB7IG1fcmVhZHlTdGF0
ZSA9IHJlYWR5U3RhdGU7IH0KKyAgICB2aXJ0dWFsIHZvaWQgd2FpdEZvclNlZWtDb21wbGV0ZWQo
KSBvdmVycmlkZSB7IH0KKyAgICB2aXJ0dWFsIHZvaWQgc2Vla0NvbXBsZXRlZCgpIG92ZXJyaWRl
IHsgfQorCiAgICAgUmVmUHRyPE1lZGlhU291cmNlQ2xpZW50R3N0cmVhbWVyPiBtX2NsaWVudDsK
LSAgICBNZWRpYVNvdXJjZUdTdHJlYW1lcihXZWJLaXRNZWRpYVNyYyopOwotICAgIE1lZGlhVGlt
ZSBtX2R1cmF0aW9uOworICAgIE1lZGlhU291cmNlUHJpdmF0ZUNsaWVudCogbV9tZWRpYVNvdXJj
ZTsKKyAgICBNZWRpYVNvdXJjZUdTdHJlYW1lcihNZWRpYVNvdXJjZVByaXZhdGVDbGllbnQqLCBX
ZWJLaXRNZWRpYVNyYyopOwogICAgIE1lZGlhUGxheWVyOjpSZWFkeVN0YXRlIG1fcmVhZHlTdGF0
ZTsKIH07CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21vY2svbWVkaWFz
b3VyY2UvTW9ja01lZGlhUGxheWVyTWVkaWFTb3VyY2UuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vbW9jay9tZWRpYXNvdXJjZS9Nb2NrTWVkaWFQbGF5ZXJNZWRpYVNvdXJjZS5jcHAKaW5k
ZXggZTM3NWZjZTZiNGIyYTlhOTEyN2FiYWJjZjIyMzQ2OTdiZTI4M2M3Yi4uNmY1MWMyNDg2NzNk
NDExZjU5OGQ1ZTI2ZmFiYTQyMDhiOTI5ODg2ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vbW9jay9tZWRpYXNvdXJjZS9Nb2NrTWVkaWFQbGF5ZXJNZWRpYVNvdXJjZS5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbW9jay9tZWRpYXNvdXJjZS9Nb2NrTWVkaWFQ
bGF5ZXJNZWRpYVNvdXJjZS5jcHAKQEAgLTg0LDEwICs4NCwxMCBAQCBNZWRpYVBsYXllcjo6U3Vw
cG9ydHNUeXBlIE1vY2tNZWRpYVBsYXllck1lZGlhU291cmNlOjpzdXBwb3J0c1R5cGUoY29uc3Qg
TWVkaWFFbgogTW9ja01lZGlhUGxheWVyTWVkaWFTb3VyY2U6Ok1vY2tNZWRpYVBsYXllck1lZGlh
U291cmNlKE1lZGlhUGxheWVyKiBwbGF5ZXIpCiAgICAgOiBtX3BsYXllcihwbGF5ZXIpCiAgICAg
LCBtX2N1cnJlbnRUaW1lKE1lZGlhVGltZTo6emVyb1RpbWUoKSkKLSAgICAsIG1fZHVyYXRpb24o
TWVkaWFUaW1lOjp6ZXJvVGltZSgpKQogICAgICwgbV9yZWFkeVN0YXRlKE1lZGlhUGxheWVyOjpI
YXZlTm90aGluZykKICAgICAsIG1fbmV0d29ya1N0YXRlKE1lZGlhUGxheWVyOjpFbXB0eSkKICAg
ICAsIG1fcGxheWluZyhmYWxzZSkKKyAgICAsIG1fc2Vla0NvbXBsZXRlZCh0cnVlKQogewogfQog
CkBAIC0xMDIsOSArMTAyLDcgQEAgdm9pZCBNb2NrTWVkaWFQbGF5ZXJNZWRpYVNvdXJjZTo6bG9h
ZChjb25zdCBTdHJpbmcmKQogCiB2b2lkIE1vY2tNZWRpYVBsYXllck1lZGlhU291cmNlOjpsb2Fk
KGNvbnN0IFN0cmluZyYsIE1lZGlhU291cmNlUHJpdmF0ZUNsaWVudCogc291cmNlKQogewotICAg
IG1fbWVkaWFTb3VyY2UgPSBzb3VyY2U7Ci0gICAgbV9tZWRpYVNvdXJjZVByaXZhdGUgPSBNb2Nr
TWVkaWFTb3VyY2VQcml2YXRlOjpjcmVhdGUodGhpcyk7Ci0gICAgbV9tZWRpYVNvdXJjZS0+c2V0
UHJpdmF0ZUFuZE9wZW4oKm1fbWVkaWFTb3VyY2VQcml2YXRlKTsKKyAgICBtX21lZGlhU291cmNl
UHJpdmF0ZSA9IE1vY2tNZWRpYVNvdXJjZVByaXZhdGU6OmNyZWF0ZSh0aGlzLCBzb3VyY2UpOwog
fQogCiB2b2lkIE1vY2tNZWRpYVBsYXllck1lZGlhU291cmNlOjpjYW5jZWxMb2FkKCkKQEAgLTE0
Myw3ICsxNDEsNyBAQCB2b2lkIE1vY2tNZWRpYVBsYXllck1lZGlhU291cmNlOjpzZXRWaXNpYmxl
KGJvb2wpCiAKIGJvb2wgTW9ja01lZGlhUGxheWVyTWVkaWFTb3VyY2U6OnNlZWtpbmcoKSBjb25z
dAogewotICAgIHJldHVybiBmYWxzZTsKKyAgICByZXR1cm4gIW1fc2Vla0NvbXBsZXRlZDsKIH0K
IAogYm9vbCBNb2NrTWVkaWFQbGF5ZXJNZWRpYVNvdXJjZTo6cGF1c2VkKCkgY29uc3QKQEAgLTE2
OCw4ICsxNjYsOCBAQCBkb3VibGUgTW9ja01lZGlhUGxheWVyTWVkaWFTb3VyY2U6Om1heFRpbWVT
ZWVrYWJsZURvdWJsZSgpIGNvbnN0CiAKIHN0ZDo6dW5pcXVlX3B0cjxQbGF0Zm9ybVRpbWVSYW5n
ZXM+IE1vY2tNZWRpYVBsYXllck1lZGlhU291cmNlOjpidWZmZXJlZCgpIGNvbnN0CiB7Ci0gICAg
aWYgKG1fbWVkaWFTb3VyY2UpCi0gICAgICAgIHJldHVybiBtX21lZGlhU291cmNlLT5idWZmZXJl
ZCgpOworICAgIGlmIChtX21lZGlhU291cmNlUHJpdmF0ZSkKKyAgICAgICAgcmV0dXJuIG1fbWVk
aWFTb3VyY2VQcml2YXRlLT5idWZmZXJlZCgpOwogCiAgICAgcmV0dXJuIFBsYXRmb3JtVGltZVJh
bmdlczo6Y3JlYXRlKCk7CiB9CkBAIC0xOTQsNyArMTkyLDcgQEAgZG91YmxlIE1vY2tNZWRpYVBs
YXllck1lZGlhU291cmNlOjpjdXJyZW50VGltZURvdWJsZSgpIGNvbnN0CiAKIGRvdWJsZSBNb2Nr
TWVkaWFQbGF5ZXJNZWRpYVNvdXJjZTo6ZHVyYXRpb25Eb3VibGUoKSBjb25zdAogewotICAgIHJl
dHVybiBtX2R1cmF0aW9uLnRvRG91YmxlKCk7CisgICAgcmV0dXJuIG1fbWVkaWFTb3VyY2VQcml2
YXRlID8gbV9tZWRpYVNvdXJjZVByaXZhdGUtPmR1cmF0aW9uKCkgOiAwOwogfQogCiB2b2lkIE1v
Y2tNZWRpYVBsYXllck1lZGlhU291cmNlOjpzZWVrV2l0aFRvbGVyYW5jZShkb3VibGUgdGltZSwg
ZG91YmxlIG5lZ2F0aXZlVG9sZXJhbmNlLCBkb3VibGUgcG9zaXRpdmVUb2xlcmFuY2UpCkBAIC0y
MDQsMTggKzIwMiwyMSBAQCB2b2lkIE1vY2tNZWRpYVBsYXllck1lZGlhU291cmNlOjpzZWVrV2l0
aFRvbGVyYW5jZShkb3VibGUgdGltZSwgZG91YmxlIG5lZ2F0aXZlVAogICAgICAgICBtX21lZGlh
U291cmNlUHJpdmF0ZS0+c2Vla1RvVGltZShNZWRpYVRpbWU6OmNyZWF0ZVdpdGhEb3VibGUodGlt
ZSkpOwogICAgIH0gZWxzZQogICAgICAgICBtX2N1cnJlbnRUaW1lID0gbV9tZWRpYVNvdXJjZVBy
aXZhdGUtPnNlZWtUb1RpbWUoTWVkaWFUaW1lOjpjcmVhdGVXaXRoRG91YmxlKHRpbWUpLCBNZWRp
YVRpbWU6OmNyZWF0ZVdpdGhEb3VibGUobmVnYXRpdmVUb2xlcmFuY2UpLCBNZWRpYVRpbWU6OmNy
ZWF0ZVdpdGhEb3VibGUocG9zaXRpdmVUb2xlcmFuY2UpKTsKLSAgICBtX3BsYXllci0+dGltZUNo
YW5nZWQoKTsKIAotICAgIGlmIChtX3BsYXlpbmcpCi0gICAgICAgIGNhbGxPbk1haW5UaHJlYWQo
YmluZCgmTW9ja01lZGlhUGxheWVyTWVkaWFTb3VyY2U6OmFkdmFuY2VDdXJyZW50VGltZSwgdGhp
cykpOworICAgIGlmIChtX3NlZWtDb21wbGV0ZWQpIHsKKyAgICAgICAgbV9wbGF5ZXItPnRpbWVD
aGFuZ2VkKCk7CisKKyAgICAgICAgaWYgKG1fcGxheWluZykKKyAgICAgICAgICAgIGNhbGxPbk1h
aW5UaHJlYWQoYmluZCgmTW9ja01lZGlhUGxheWVyTWVkaWFTb3VyY2U6OmFkdmFuY2VDdXJyZW50
VGltZSwgdGhpcykpOworICAgIH0KIH0KIAogdm9pZCBNb2NrTWVkaWFQbGF5ZXJNZWRpYVNvdXJj
ZTo6YWR2YW5jZUN1cnJlbnRUaW1lKCkKIHsKLSAgICBpZiAoIW1fbWVkaWFTb3VyY2UpCisgICAg
aWYgKCFtX21lZGlhU291cmNlUHJpdmF0ZSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgYXV0byBi
dWZmZXJlZCA9IG1fbWVkaWFTb3VyY2UtPmJ1ZmZlcmVkKCk7CisgICAgYXV0byBidWZmZXJlZCA9
IG1fbWVkaWFTb3VyY2VQcml2YXRlLT5idWZmZXJlZCgpOwogICAgIHNpemVfdCBwb3MgPSBidWZm
ZXJlZC0+ZmluZChtX2N1cnJlbnRUaW1lKTsKICAgICBpZiAocG9zID09IG5vdEZvdW5kKQogICAg
ICAgICByZXR1cm47CkBAIC0yNTIsNiArMjUzLDIzIEBAIHZvaWQgTW9ja01lZGlhUGxheWVyTWVk
aWFTb3VyY2U6OnNldE5ldHdvcmtTdGF0ZShNZWRpYVBsYXllcjo6TmV0d29ya1N0YXRlIG5ldHdv
CiAgICAgbV9wbGF5ZXItPm5ldHdvcmtTdGF0ZUNoYW5nZWQoKTsKIH0KIAordm9pZCBNb2NrTWVk
aWFQbGF5ZXJNZWRpYVNvdXJjZTo6d2FpdEZvclNlZWtDb21wbGV0ZWQoKQoreworICAgIG1fc2Vl
a0NvbXBsZXRlZCA9IGZhbHNlOworfQorCit2b2lkIE1vY2tNZWRpYVBsYXllck1lZGlhU291cmNl
OjpzZWVrQ29tcGxldGVkKCkKK3sKKyAgICBpZiAobV9zZWVrQ29tcGxldGVkKQorICAgICAgICBy
ZXR1cm47CisgICAgbV9zZWVrQ29tcGxldGVkID0gdHJ1ZTsKKworICAgIG1fcGxheWVyLT50aW1l
Q2hhbmdlZCgpOworCisgICAgaWYgKG1fcGxheWluZykKKyAgICAgICAgY2FsbE9uTWFpblRocmVh
ZChiaW5kKCZNb2NrTWVkaWFQbGF5ZXJNZWRpYVNvdXJjZTo6YWR2YW5jZUN1cnJlbnRUaW1lLCB0
aGlzKSk7Cit9CisKIHVuc2lnbmVkIGxvbmcgTW9ja01lZGlhUGxheWVyTWVkaWFTb3VyY2U6OnRv
dGFsVmlkZW9GcmFtZXMoKQogewogICAgIHJldHVybiBtX21lZGlhU291cmNlUHJpdmF0ZSA/IG1f
bWVkaWFTb3VyY2VQcml2YXRlLT50b3RhbFZpZGVvRnJhbWVzKCkgOiAwOwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbW9jay9tZWRpYXNvdXJjZS9Nb2NrTWVkaWFQbGF5ZXJN
ZWRpYVNvdXJjZS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbW9jay9tZWRpYXNvdXJjZS9N
b2NrTWVkaWFQbGF5ZXJNZWRpYVNvdXJjZS5oCmluZGV4IDkyZTEzYjE2NTkyYzUxZTIxZTQ2NzRm
NTgxZjlhOGY2YTZiZWZhODEuLjVhNmRhOWRkMzkzZTkwOTliNmQ5MjZlZWEzZWM5YmIxMGY2ODgy
OTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21vY2svbWVkaWFzb3VyY2Uv
TW9ja01lZGlhUGxheWVyTWVkaWFTb3VyY2UuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9tb2NrL21lZGlhc291cmNlL01vY2tNZWRpYVBsYXllck1lZGlhU291cmNlLmgKQEAgLTUyLDYg
KzUyLDggQEAgcHVibGljOgogICAgIHZpcnR1YWwgTWVkaWFQbGF5ZXI6OlJlYWR5U3RhdGUgcmVh
ZHlTdGF0ZSgpIGNvbnN0IG92ZXJyaWRlOwogICAgIHZvaWQgc2V0UmVhZHlTdGF0ZShNZWRpYVBs
YXllcjo6UmVhZHlTdGF0ZSk7CiAgICAgdm9pZCBzZXROZXR3b3JrU3RhdGUoTWVkaWFQbGF5ZXI6
Ok5ldHdvcmtTdGF0ZSk7CisgICAgdm9pZCB3YWl0Rm9yU2Vla0NvbXBsZXRlZCgpOworICAgIHZv
aWQgc2Vla0NvbXBsZXRlZCgpOwogCiBwcml2YXRlOgogICAgIE1vY2tNZWRpYVBsYXllck1lZGlh
U291cmNlKE1lZGlhUGxheWVyKik7CkBAIC04Myw3ICs4NSw2IEBAIHByaXZhdGU6CiAgICAgdmly
dHVhbCBkb3VibGUgdG90YWxGcmFtZURlbGF5KCkgb3ZlcnJpZGU7CiAKICAgICBNZWRpYVBsYXll
ciogbV9wbGF5ZXI7Ci0gICAgUmVmUHRyPE1lZGlhU291cmNlUHJpdmF0ZUNsaWVudD4gbV9tZWRp
YVNvdXJjZTsKICAgICBSZWZQdHI8TW9ja01lZGlhU291cmNlUHJpdmF0ZT4gbV9tZWRpYVNvdXJj
ZVByaXZhdGU7CiAKICAgICBNZWRpYVRpbWUgbV9jdXJyZW50VGltZTsKQEAgLTkxLDYgKzkyLDcg
QEAgcHJpdmF0ZToKICAgICBNZWRpYVBsYXllcjo6UmVhZHlTdGF0ZSBtX3JlYWR5U3RhdGU7CiAg
ICAgTWVkaWFQbGF5ZXI6Ok5ldHdvcmtTdGF0ZSBtX25ldHdvcmtTdGF0ZTsKICAgICBib29sIG1f
cGxheWluZzsKKyAgICBib29sIG1fc2Vla0NvbXBsZXRlZDsKIH07CiAKIH0KZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21vY2svbWVkaWFzb3VyY2UvTW9ja01lZGlhU291cmNl
UHJpdmF0ZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tb2NrL21lZGlhc291cmNlL01v
Y2tNZWRpYVNvdXJjZVByaXZhdGUuY3BwCmluZGV4IDcyNDkzNzNhZWUzNzBjZTE4ODIxZGYxZmRk
Zjc2MDEyY2U2NDVhN2QuLmZiNDlkNGVkYzExYjUyOTI3MzZhZmVkMjJhNTY2NDdjNzRmNDhlMmYg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21vY2svbWVkaWFzb3VyY2UvTW9j
a01lZGlhU291cmNlUHJpdmF0ZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbW9j
ay9tZWRpYXNvdXJjZS9Nb2NrTWVkaWFTb3VyY2VQcml2YXRlLmNwcApAQCAtMzAsMTkgKzMwLDIy
IEBACiAKICNpbmNsdWRlICJDb250ZW50VHlwZS5oIgogI2luY2x1ZGUgIkV4Y2VwdGlvbkNvZGVQ
bGFjZWhvbGRlci5oIgorI2luY2x1ZGUgIk1lZGlhU291cmNlUHJpdmF0ZUNsaWVudC5oIgogI2lu
Y2x1ZGUgIk1vY2tNZWRpYVBsYXllck1lZGlhU291cmNlLmgiCiAjaW5jbHVkZSAiTW9ja1NvdXJj
ZUJ1ZmZlclByaXZhdGUuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1SZWZQdHI8TW9ja01l
ZGlhU291cmNlUHJpdmF0ZT4gTW9ja01lZGlhU291cmNlUHJpdmF0ZTo6Y3JlYXRlKE1vY2tNZWRp
YVBsYXllck1lZGlhU291cmNlKiBwYXJlbnQpCitSZWZQdHI8TW9ja01lZGlhU291cmNlUHJpdmF0
ZT4gTW9ja01lZGlhU291cmNlUHJpdmF0ZTo6Y3JlYXRlKE1vY2tNZWRpYVBsYXllck1lZGlhU291
cmNlKiBwYXJlbnQsIE1lZGlhU291cmNlUHJpdmF0ZUNsaWVudCogY2xpZW50KQogewotICAgIHJl
dHVybiBhZG9wdFJlZihuZXcgTW9ja01lZGlhU291cmNlUHJpdmF0ZShwYXJlbnQpKTsKKyAgICBS
ZWZQdHI8TW9ja01lZGlhU291cmNlUHJpdmF0ZT4gbWVkaWFTb3VyY2VQcml2YXRlID0gYWRvcHRS
ZWYobmV3IE1vY2tNZWRpYVNvdXJjZVByaXZhdGUocGFyZW50LCBjbGllbnQpKTsKKyAgICBjbGll
bnQtPnNldFByaXZhdGVBbmRPcGVuKCptZWRpYVNvdXJjZVByaXZhdGUpOworICAgIHJldHVybiBt
ZWRpYVNvdXJjZVByaXZhdGU7CiB9CiAKLU1vY2tNZWRpYVNvdXJjZVByaXZhdGU6Ok1vY2tNZWRp
YVNvdXJjZVByaXZhdGUoTW9ja01lZGlhUGxheWVyTWVkaWFTb3VyY2UqIHBhcmVudCkKK01vY2tN
ZWRpYVNvdXJjZVByaXZhdGU6Ok1vY2tNZWRpYVNvdXJjZVByaXZhdGUoTW9ja01lZGlhUGxheWVy
TWVkaWFTb3VyY2UqIHBhcmVudCwgTWVkaWFTb3VyY2VQcml2YXRlQ2xpZW50KiBjbGllbnQpCiAg
ICAgOiBtX3BsYXllcihwYXJlbnQpCi0gICAgLCBtX2R1cmF0aW9uKE1lZGlhVGltZTo6aW52YWxp
ZFRpbWUoKSkKKyAgICAsIG1fY2xpZW50KGNsaWVudCkKICAgICAsIG1faXNFbmRlZChmYWxzZSkK
ICAgICAsIG1fdG90YWxWaWRlb0ZyYW1lcygwKQogICAgICwgbV9kcm9wcGVkVmlkZW9GcmFtZXMo
MCkKQEAgLTg0LDE4ICs4NywxOSBAQCB2b2lkIE1vY2tNZWRpYVNvdXJjZVByaXZhdGU6OnJlbW92
ZVNvdXJjZUJ1ZmZlcihTb3VyY2VCdWZmZXJQcml2YXRlKiBidWZmZXIpCiAgICAgbV9zb3VyY2VC
dWZmZXJzLnJlbW92ZShwb3MpOwogfQogCi1NZWRpYVRpbWUgTW9ja01lZGlhU291cmNlUHJpdmF0
ZTo6ZHVyYXRpb24oKQorZG91YmxlIE1vY2tNZWRpYVNvdXJjZVByaXZhdGU6OmR1cmF0aW9uKCkK
IHsKLSAgICByZXR1cm4gbV9kdXJhdGlvbjsKKyAgICByZXR1cm4gbV9jbGllbnQtPmR1cmF0aW9u
KCk7CiB9CiAKLXZvaWQgTW9ja01lZGlhU291cmNlUHJpdmF0ZTo6c2V0RHVyYXRpb24oY29uc3Qg
TWVkaWFUaW1lJiBkdXJhdGlvbikKK3N0ZDo6dW5pcXVlX3B0cjxQbGF0Zm9ybVRpbWVSYW5nZXM+
IE1vY2tNZWRpYVNvdXJjZVByaXZhdGU6OmJ1ZmZlcmVkKCkKIHsKLSAgICBpZiAoZHVyYXRpb24g
PT0gbV9kdXJhdGlvbikKLSAgICAgICAgcmV0dXJuOworICAgIHJldHVybiBtX2NsaWVudC0+YnVm
ZmVyZWQoKTsKK30KIAotICAgIG1fZHVyYXRpb24gPSBkdXJhdGlvbjsKLSAgICBtX3BsYXllci0+
dXBkYXRlRHVyYXRpb24oZHVyYXRpb24pOwordm9pZCBNb2NrTWVkaWFTb3VyY2VQcml2YXRlOjpk
dXJhdGlvbkNoYW5nZWQoKQoreworICAgIG1fcGxheWVyLT51cGRhdGVEdXJhdGlvbihNZWRpYVRp
bWU6OmNyZWF0ZVdpdGhEb3VibGUoZHVyYXRpb24oKSkpOwogfQogCiB2b2lkIE1vY2tNZWRpYVNv
dXJjZVByaXZhdGU6Om1hcmtFbmRPZlN0cmVhbShFbmRPZlN0cmVhbVN0YXR1cyBzdGF0dXMpCkBA
IC0xMjAsNiArMTI0LDE2IEBAIHZvaWQgTW9ja01lZGlhU291cmNlUHJpdmF0ZTo6c2V0UmVhZHlT
dGF0ZShNZWRpYVBsYXllcjo6UmVhZHlTdGF0ZSByZWFkeVN0YXRlKQogICAgIG1fcGxheWVyLT5z
ZXRSZWFkeVN0YXRlKHJlYWR5U3RhdGUpOwogfQogCit2b2lkIE1vY2tNZWRpYVNvdXJjZVByaXZh
dGU6OndhaXRGb3JTZWVrQ29tcGxldGVkKCkKK3sKKyAgICBtX3BsYXllci0+d2FpdEZvclNlZWtD
b21wbGV0ZWQoKTsKK30KKwordm9pZCBNb2NrTWVkaWFTb3VyY2VQcml2YXRlOjpzZWVrQ29tcGxl
dGVkKCkKK3sKKyAgICBtX3BsYXllci0+c2Vla0NvbXBsZXRlZCgpOworfQorCiB2b2lkIE1vY2tN
ZWRpYVNvdXJjZVByaXZhdGU6OnNvdXJjZUJ1ZmZlclByaXZhdGVEaWRDaGFuZ2VBY3RpdmVTdGF0
ZShNb2NrU291cmNlQnVmZmVyUHJpdmF0ZSogYnVmZmVyLCBib29sIGFjdGl2ZSkKIHsKICAgICBp
ZiAoYWN0aXZlICYmICFtX2FjdGl2ZVNvdXJjZUJ1ZmZlcnMuY29udGFpbnMoYnVmZmVyKSkKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21vY2svbWVkaWFzb3VyY2UvTW9ja01l
ZGlhU291cmNlUHJpdmF0ZS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbW9jay9tZWRpYXNv
dXJjZS9Nb2NrTWVkaWFTb3VyY2VQcml2YXRlLmgKaW5kZXggZjc5YjExMDJkNTIyMDRjZTYzM2Y2
MDEwMWJhNmRkOWZhNDE3YzhlNS4uMGIzNWExMGI5Zjc3NzM2ZWU0ZjU1M2Q5ZGY2NTcxYjgzYThl
NjE2MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbW9jay9tZWRpYXNvdXJj
ZS9Nb2NrTWVkaWFTb3VyY2VQcml2YXRlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
bW9jay9tZWRpYXNvdXJjZS9Nb2NrTWVkaWFTb3VyY2VQcml2YXRlLmgKQEAgLTM5LDcgKzM5LDcg
QEAgY2xhc3MgVGltZVJhbmdlczsKIAogY2xhc3MgTW9ja01lZGlhU291cmNlUHJpdmF0ZSBmaW5h
bCA6IHB1YmxpYyBNZWRpYVNvdXJjZVByaXZhdGUgewogcHVibGljOgotICAgIHN0YXRpYyBSZWZQ
dHI8TW9ja01lZGlhU291cmNlUHJpdmF0ZT4gY3JlYXRlKE1vY2tNZWRpYVBsYXllck1lZGlhU291
cmNlKik7CisgICAgc3RhdGljIFJlZlB0cjxNb2NrTWVkaWFTb3VyY2VQcml2YXRlPiBjcmVhdGUo
TW9ja01lZGlhUGxheWVyTWVkaWFTb3VyY2UqLCBNZWRpYVNvdXJjZVByaXZhdGVDbGllbnQqKTsK
ICAgICB2aXJ0dWFsIH5Nb2NrTWVkaWFTb3VyY2VQcml2YXRlKCk7CiAKICAgICBjb25zdCBWZWN0
b3I8TW9ja1NvdXJjZUJ1ZmZlclByaXZhdGUqPiYgYWN0aXZlU291cmNlQnVmZmVycygpIGNvbnN0
IHsgcmV0dXJuIG1fYWN0aXZlU291cmNlQnVmZmVyczsgfQpAQCAtNDcsNiArNDcsOSBAQCBwdWJs
aWM6CiAgICAgYm9vbCBoYXNBdWRpbygpIGNvbnN0OwogICAgIGJvb2wgaGFzVmlkZW8oKSBjb25z
dDsKIAorICAgIGRvdWJsZSBkdXJhdGlvbigpOworICAgIHN0ZDo6dW5pcXVlX3B0cjxQbGF0Zm9y
bVRpbWVSYW5nZXM+IGJ1ZmZlcmVkKCk7CisKICAgICBNb2NrTWVkaWFQbGF5ZXJNZWRpYVNvdXJj
ZSogcGxheWVyKCkgY29uc3QgeyByZXR1cm4gbV9wbGF5ZXI7IH0KIAogICAgIHZvaWQgc2Vla1Rv
VGltZShjb25zdCBNZWRpYVRpbWUmKTsKQEAgLTYzLDE2ICs2NiwxNyBAQCBwdWJsaWM6CiAgICAg
dm9pZCBpbmNyZW1lbnRUb3RhbEZyYW1lRGVsYXlCeShkb3VibGUgZGVsYXkpIHsgbV90b3RhbEZy
YW1lRGVsYXkgKz0gZGVsYXk7IH0KIAogcHJpdmF0ZToKLSAgICBNb2NrTWVkaWFTb3VyY2VQcml2
YXRlKE1vY2tNZWRpYVBsYXllck1lZGlhU291cmNlKik7CisgICAgTW9ja01lZGlhU291cmNlUHJp
dmF0ZShNb2NrTWVkaWFQbGF5ZXJNZWRpYVNvdXJjZSosIE1lZGlhU291cmNlUHJpdmF0ZUNsaWVu
dCopOwogCiAgICAgLy8gTWVkaWFTb3VyY2VQcml2YXRlIE92ZXJyaWRlcwogICAgIHZpcnR1YWwg
QWRkU3RhdHVzIGFkZFNvdXJjZUJ1ZmZlcihjb25zdCBDb250ZW50VHlwZSYsIFJlZlB0cjxTb3Vy
Y2VCdWZmZXJQcml2YXRlPiYpIG92ZXJyaWRlOwotICAgIHZpcnR1YWwgTWVkaWFUaW1lIGR1cmF0
aW9uKCkgb3ZlcnJpZGU7Ci0gICAgdmlydHVhbCB2b2lkIHNldER1cmF0aW9uKGNvbnN0IE1lZGlh
VGltZSYpIG92ZXJyaWRlOworICAgIHZpcnR1YWwgdm9pZCBkdXJhdGlvbkNoYW5nZWQoKSBvdmVy
cmlkZTsKICAgICB2aXJ0dWFsIHZvaWQgbWFya0VuZE9mU3RyZWFtKEVuZE9mU3RyZWFtU3RhdHVz
KSBvdmVycmlkZTsKICAgICB2aXJ0dWFsIHZvaWQgdW5tYXJrRW5kT2ZTdHJlYW0oKSBvdmVycmlk
ZTsKICAgICB2aXJ0dWFsIE1lZGlhUGxheWVyOjpSZWFkeVN0YXRlIHJlYWR5U3RhdGUoKSBjb25z
dCBvdmVycmlkZTsKICAgICB2aXJ0dWFsIHZvaWQgc2V0UmVhZHlTdGF0ZShNZWRpYVBsYXllcjo6
UmVhZHlTdGF0ZSkgb3ZlcnJpZGU7CisgICAgdmlydHVhbCB2b2lkIHdhaXRGb3JTZWVrQ29tcGxl
dGVkKCkgb3ZlcnJpZGU7CisgICAgdmlydHVhbCB2b2lkIHNlZWtDb21wbGV0ZWQoKSBvdmVycmlk
ZTsKIAogICAgIHZvaWQgc291cmNlQnVmZmVyUHJpdmF0ZURpZENoYW5nZUFjdGl2ZVN0YXRlKE1v
Y2tTb3VyY2VCdWZmZXJQcml2YXRlKiwgYm9vbCBhY3RpdmUpOwogICAgIHZvaWQgcmVtb3ZlU291
cmNlQnVmZmVyKFNvdXJjZUJ1ZmZlclByaXZhdGUqKTsKQEAgLTgwLDcgKzg0LDcgQEAgcHJpdmF0
ZToKICAgICBmcmllbmQgY2xhc3MgTW9ja1NvdXJjZUJ1ZmZlclByaXZhdGU7CiAKICAgICBNb2Nr
TWVkaWFQbGF5ZXJNZWRpYVNvdXJjZSogbV9wbGF5ZXI7Ci0gICAgTWVkaWFUaW1lIG1fZHVyYXRp
b247CisgICAgUmVmUHRyPE1lZGlhU291cmNlUHJpdmF0ZUNsaWVudD4gbV9jbGllbnQ7CiAgICAg
VmVjdG9yPFJlZlB0cjxNb2NrU291cmNlQnVmZmVyUHJpdmF0ZT4+IG1fc291cmNlQnVmZmVyczsK
ICAgICBWZWN0b3I8TW9ja1NvdXJjZUJ1ZmZlclByaXZhdGUqPiBtX2FjdGl2ZVNvdXJjZUJ1ZmZl
cnM7CiAgICAgYm9vbCBtX2lzRW5kZWQ7CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9DaGFuZ2VM
b2cgYi9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKaW5kZXggNTI0MGE0NzE4YjdhMzE3NzBjMDRjYjU1
NzM5MzY5ODJlODE3OWE1OC4uNDlkZGQ4MWM0NGQ1MjM2ZGE5OGE5MzA3YzA1YjUzMWFkMjBmMzMx
YyAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCisrKyBiL0xheW91dFRlc3RzL0No
YW5nZUxvZwpAQCAtMSwzICsxLDE3IEBACisyMDE0LTA3LTExICBKZXIgTm9ibGUgIDxqZXIubm9i
bGVAYXBwbGUuY29tPgorCisgICAgICAgIFtNU0VdIGh0dHAvdGVzdHMvbWVkaWEvbWVkaWEtc291
cmNlL21lZGlhc291cmNlLWR1cmF0aW9uLmh0bWwgaXMgZmFpbGluZy4KKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEzNDg1MgorCisgICAgICAgIFJldmll
d2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEVsaW1pbmF0ZSBmbGFraW5lc3MgaW4g
dGhlIG1lZGlhc291cmNlLWR1cmF0aW9uLmh0bWwgdGVzdCBieSBub3QgcGxheWluZworICAgICAg
ICB0aGUgbWVkaWEgd2hpbGUgdGVzdGluZyBzZWVraW5nIGFuZCBkdXJhdGlvbi4KKyAgICAgICAg
KiBodHRwL3Rlc3RzL21lZGlhL21lZGlhLXNvdXJjZS9tZWRpYXNvdXJjZS1kdXJhdGlvbi5odG1s
OgorCisgICAgICAgIFVwZGF0ZSB0ZXN0aGFybmVzcy5qcyB0byB0aGUgbGF0ZXN0IFczQyB2ZXJz
aW9uOgorICAgICAgICAqIGh0dHAvdGVzdHMvdzNjL3Jlc291cmNlcy90ZXN0aGFybmVzcy5qczoK
KwogMjAxNC0wNy0xMSAgWmFsYW4gQnVqdGFzICA8emFsYW5AYXBwbGUuY29tPgogCiAgICAgICAg
IFJFR1JFU1NJT04gKHIxNjg4NjgpOiBlQmF5ICdzZWUgYWxsJyBsaW5rcyBmYWlsIGR1ZSB0byBk
aWZmZXJlbnQgSlMgYmluZGluZ3MgY29udmVyc2lvbiBiZWhhdmlvci4KZGlmZiAtLWdpdCBhL0xh
eW91dFRlc3RzL2h0dHAvdGVzdHMvbWVkaWEvbWVkaWEtc291cmNlL21lZGlhc291cmNlLWR1cmF0
aW9uLmh0bWwgYi9MYXlvdXRUZXN0cy9odHRwL3Rlc3RzL21lZGlhL21lZGlhLXNvdXJjZS9tZWRp
YXNvdXJjZS1kdXJhdGlvbi5odG1sCmluZGV4IGQ0MzM5MTZkOGI3ZWFiNDJjZTk4ZWE0YmMyODhi
M2M3YzMwNWI2Y2QuLmJhYzViYTlkY2I4YTgyZWNiYjM5MjRmODkxMGNjMjJiNGFhOGY4ZjQgMTAw
NjQ0Ci0tLSBhL0xheW91dFRlc3RzL2h0dHAvdGVzdHMvbWVkaWEvbWVkaWEtc291cmNlL21lZGlh
c291cmNlLWR1cmF0aW9uLmh0bWwKKysrIGIvTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9tZWRpYS9t
ZWRpYS1zb3VyY2UvbWVkaWFzb3VyY2UtZHVyYXRpb24uaHRtbApAQCAtMTgsMTEgKzE4LDggQEAK
ICAgICAgICAgICAgICAgICAgIHZhciBzZWVrVG8gPSBmdWxsRHVyYXRpb24gLyAyLjA7CiAgICAg
ICAgICAgICAgICAgICB2YXIgdHJ1bmNhdGVkRHVyYXRpb24gPSBzZWVrVG8gLyAyLjA7CiAKLSAg
ICAgICAgICAgICAgICAgIG1lZGlhRWxlbWVudC5wbGF5KCk7Ci0KICAgICAgICAgICAgICAgICAg
IC8vIEFwcGVuZCBhbGwgdGhlIHNlZ21lbnRzCiAgICAgICAgICAgICAgICAgICB0ZXN0LmV4cGVj
dEV2ZW50KHNvdXJjZUJ1ZmZlciwgJ3VwZGF0ZWVuZCcsICdzb3VyY2VCdWZmZXInKTsKLSAgICAg
ICAgICAgICAgICAgIHRlc3QuZXhwZWN0RXZlbnQobWVkaWFFbGVtZW50LCAncGxheWluZycsICdQ
bGF5aW5nIHRyaWdnZXJlZCcpOwogICAgICAgICAgICAgICAgICAgc291cmNlQnVmZmVyLmFwcGVu
ZEJ1ZmZlcihtZWRpYURhdGEpOwogCiAgICAgICAgICAgICAgICAgICB0ZXN0LndhaXRGb3JFeHBl
Y3RlZEV2ZW50cyhmdW5jdGlvbigpCkBAIC0xMjYsMTEgKzEyMywxMSBAQAogCiAgICAgICAgICAg
ICAgIHRlc3Qud2FpdEZvckV4cGVjdGVkRXZlbnRzKGZ1bmN0aW9uKCkKICAgICAgICAgICAgICAg
ewotICAgICAgICAgICAgICAgICAgYXNzZXJ0X2VxdWFscyhtZWRpYUVsZW1lbnQuY3VycmVudFRp
bWUsIHRydW5jYXRlZER1cmF0aW9uLAorICAgICAgICAgICAgICAgICAgYXNzZXJ0X2FwcHJveF9l
cXVhbHMobWVkaWFFbGVtZW50LmN1cnJlbnRUaW1lLCB0cnVuY2F0ZWREdXJhdGlvbiwgMC4wNSwK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ1BsYXliYWNrIHRpbWUgaGFzIHJlYWNo
ZWQgdHJ1bmNhdGVkRHVyYXRpb24nKTsKLSAgICAgICAgICAgICAgICAgIGFzc2VydF9lcXVhbHMo
bWVkaWFFbGVtZW50LmR1cmF0aW9uLCB0cnVuY2F0ZWREdXJhdGlvbiwKKyAgICAgICAgICAgICAg
ICAgIGFzc2VydF9hcHByb3hfZXF1YWxzKG1lZGlhRWxlbWVudC5kdXJhdGlvbiwgdHJ1bmNhdGVk
RHVyYXRpb24sIDAuMDUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdtZWRpYUVs
ZW1lbnQgdHJ1bmNhdGVkRHVyYXRpb24gYWZ0ZXIgc2VlayB0byBpdCcpOwotICAgICAgICAgICAg
ICAgICAgYXNzZXJ0X2VxdWFscyhtZWRpYVNvdXJjZS5kdXJhdGlvbiwgdHJ1bmNhdGVkRHVyYXRp
b24sCisgICAgICAgICAgICAgICAgICBhc3NlcnRfYXBwcm94X2VxdWFscyhtZWRpYVNvdXJjZS5k
dXJhdGlvbiwgdHJ1bmNhdGVkRHVyYXRpb24sIDAuMDUsCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICdtZWRpYVNvdXJjZSB0cnVuY2F0ZWREdXJhdGlvbiBhZnRlciBzZWVrIHRvIGl0
Jyk7CiAgICAgICAgICAgICAgICAgICBhc3NlcnRfZmFsc2UobWVkaWFFbGVtZW50LnNlZWtpbmcs
ICdtZWRpYUVsZW1lbnQuc2Vla2luZyBhZnRlciBzZWVrZWQgdG8gdHJ1bmNhdGVkRHVyYXRpb24n
KTsKIApAQCAtMTU0LDExICsxNTEsOCBAQAogICAgICAgICAgICAgICAgICAgZHVyYXRpb25jaGFu
Z2VFdmVudENvdW50ZXIrKzsKICAgICAgICAgICAgICAgfSk7CiAKLSAgICAgICAgICAgICAgbWVk
aWFFbGVtZW50LnBsYXkoKTsKLQogICAgICAgICAgICAgICAvLyBBcHBlbmQgYWxsIHRoZSBzZWdt
ZW50cwogICAgICAgICAgICAgICB0ZXN0LmV4cGVjdEV2ZW50KHNvdXJjZUJ1ZmZlciwgJ3VwZGF0
ZWVuZCcsICdzb3VyY2VCdWZmZXInKTsKLSAgICAgICAgICAgICAgdGVzdC5leHBlY3RFdmVudCht
ZWRpYUVsZW1lbnQsICdwbGF5aW5nJywgJ1BsYXlpbmcgdHJpZ2dlcmVkJyk7CiAgICAgICAgICAg
ICAgIHNvdXJjZUJ1ZmZlci5hcHBlbmRCdWZmZXIobWVkaWFEYXRhKTsKIAogICAgICAgICAgICAg
ICB0ZXN0LndhaXRGb3JFeHBlY3RlZEV2ZW50cyhmdW5jdGlvbigpCkBAIC0yMDEsNyArMTk1LDEw
IEBACiAgICAgICAgICAgICAgICAgICAgICAgKytleHBlY3RlZER1cmF0aW9uQ2hhbmdlRXZlbnRD
b3VudDsKICAgICAgICAgICAgICAgICAgIH0KIAorICAgICAgICAgICAgICAgICAgbWVkaWFFbGVt
ZW50LnBsYXkoKTsKKwogICAgICAgICAgICAgICAgICAgLy8gQWxsb3cgbWVkaWEgdG8gcGxheSB0
byBlbmQgd2hpbGUgY291bnRpbmcgJ2R1cmF0aW9uY2hhbmdlJyBldmVudHMuCisgICAgICAgICAg
ICAgICAgICB0ZXN0LmV4cGVjdEV2ZW50KG1lZGlhRWxlbWVudCwgJ3BsYXlpbmcnLCAnUGxheWlu
ZyB0cmlnZ2VyZWQnKTsKICAgICAgICAgICAgICAgICAgIHRlc3QuZXhwZWN0RXZlbnQobWVkaWFF
bGVtZW50LCAnZW5kZWQnLCAnUGxheWJhY2sgZW5kZWQnKTsKICAgICAgICAgICAgICAgICAgIHRl
c3Qud2FpdEZvckV4cGVjdGVkRXZlbnRzKGZ1bmN0aW9uKCkKICAgICAgICAgICAgICAgICAgIHsK
QEAgLTIxMSw2ICsyMDgsNyBAQAogICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAg
IH0pOwogICAgICAgICAgIH0sICdUZXN0IHNldHRpbmcgc2FtZSBkdXJhdGlvbiBtdWx0aXBsZSB0
aW1lcyBkb2VzIG5vdCBmaXJlIGR1cGxpY2F0ZSBkdXJhdGlvbmNoYW5nZScsIHt0aW1lb3V0OiAy
NTAwfSk7CisKICAgICAgICAgPC9zY3JpcHQ+CiAgICAgPC9ib2R5PgogPC9odG1sPgpkaWZmIC0t
Z2l0IGEvTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy93M2MvcmVzb3VyY2VzL3Rlc3RoYXJuZXNzLmpz
IGIvTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy93M2MvcmVzb3VyY2VzL3Rlc3RoYXJuZXNzLmpzCmlu
ZGV4IDc2NTUzODMyMjY0ZWEwNzhhMTZlZmI3YjYxNTdkZjViYzM3YzI1NWUuLmRhNjQ2ZThjNjky
YWU4ZWYxOWM0NDRhYTI0OTkwY2MxOTEyNTMwYzkgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL2h0
dHAvdGVzdHMvdzNjL3Jlc291cmNlcy90ZXN0aGFybmVzcy5qcworKysgYi9MYXlvdXRUZXN0cy9o
dHRwL3Rlc3RzL3czYy9yZXNvdXJjZXMvdGVzdGhhcm5lc3MuanMKQEAgLTEsMjE0NSArMSwyMjQ0
IEBACi0vKg0KLURpc3RyaWJ1dGVkIHVuZGVyIGJvdGggdGhlIFczQyBUZXN0IFN1aXRlIExpY2Vu
c2UgWzFdIGFuZCB0aGUgVzNDDQotMy1jbGF1c2UgQlNEIExpY2Vuc2UgWzJdLiBUbyBjb250cmli
dXRlIHRvIGEgVzNDIFRlc3QgU3VpdGUsIHNlZSB0aGUNCi1wb2xpY2llcyBhbmQgY29udHJpYnV0
aW9uIGZvcm1zIFszXS4NCi0NCi1bMV0gaHR0cDovL3d3dy53My5vcmcvQ29uc29ydGl1bS9MZWdh
bC8yMDA4LzA0LXRlc3RzdWl0ZS1saWNlbnNlDQotWzJdIGh0dHA6Ly93d3cudzMub3JnL0NvbnNv
cnRpdW0vTGVnYWwvMjAwOC8wMy1ic2QtbGljZW5zZQ0KLVszXSBodHRwOi8vd3d3LnczLm9yZy8y
MDA0LzEwLzI3LXRlc3RjYXNlcw0KLSovDQotDQotLyoNCi0gKiA9PSBJbnRyb2R1Y3Rpb24gPT0N
Ci0gKg0KLSAqIFRoaXMgZmlsZSBwcm92aWRlcyBhIGZyYW1ld29yayBmb3Igd3JpdGluZyB0ZXN0
Y2FzZXMuIEl0IGlzIGludGVuZGVkIHRvDQotICogcHJvdmlkZSBhIGNvbnZlbmllbnQgQVBJIGZv
ciBtYWtpbmcgY29tbW9uIGFzc2VydGlvbnMsIGFuZCB0byB3b3JrIGJvdGgNCi0gKiBmb3IgdGVz
dGluZyBzeW5jaHJvbm91cyBhbmQgYXN5bmNocm9ub3VzIERPTSBmZWF0dXJlcyBpbiBhIHdheSB0
aGF0DQotICogcHJvbW90ZXMgY2xlYXIsIHJvYnVzdCwgdGVzdHMuDQotICoNCi0gKiA9PSBCYXNp
YyBVc2FnZSA9PQ0KLSAqDQotICogVG8gdXNlIHRoaXMgZmlsZSwgaW1wb3J0IHRoZSBzY3JpcHQg
YW5kIHRoZSB0ZXN0aGFybmVzc3JlcG9ydCBzY3JpcHQgaW50bw0KLSAqIHRoZSB0ZXN0IGRvY3Vt
ZW50Og0KLSAqIDxzY3JpcHQgc3JjPSIvcmVzb3VyY2VzL3Rlc3RoYXJuZXNzLmpzIj48L3Njcmlw
dD4NCi0gKiA8c2NyaXB0IHNyYz0iL3Jlc291cmNlcy90ZXN0aGFybmVzc3JlcG9ydC5qcyI+PC9z
Y3JpcHQ+DQotICoNCi0gKiBXaXRoaW4gZWFjaCBmaWxlIG9uZSBtYXkgZGVmaW5lIG9uZSBvciBt
b3JlIHRlc3RzLiBFYWNoIHRlc3QgaXMgYXRvbWljDQotICogaW4gdGhlIHNlbnNlIHRoYXQgYSBz
aW5nbGUgdGVzdCBoYXMgYSBzaW5nbGUgcmVzdWx0IChwYXNzL2ZhaWwvdGltZW91dCkuDQotICog
V2l0aGluIGVhY2ggdGVzdCBvbmUgbWF5IGhhdmUgYSBudW1iZXIgb2YgYXNzZXJ0cy4gVGhlIHRl
c3QgZmFpbHMgYXQgdGhlDQotICogZmlyc3QgZmFpbGluZyBhc3NlcnQsIGFuZCB0aGUgcmVtYWlu
ZGVyIG9mIHRoZSB0ZXN0IGlzICh0eXBpY2FsbHkpIG5vdCBydW4uDQotICoNCi0gKiBJZiB0aGUg
ZmlsZSBjb250YWluaW5nIHRoZSB0ZXN0cyBpcyBhIEhUTUwgZmlsZSB3aXRoIGFuIGVsZW1lbnQg
b2YgaWQgImxvZyINCi0gKiB0aGlzIHdpbGwgYmUgcG9wdWxhdGVkIHdpdGggYSB0YWJsZSBjb250
YWluaW5nIHRoZSB0ZXN0IHJlc3VsdHMgYWZ0ZXIgYWxsDQotICogdGhlIHRlc3RzIGhhdmUgcnVu
Lg0KLSAqDQotICogTk9URTogQnkgZGVmYXVsdCB0ZXN0cyBtdXN0IGJlIGNyZWF0ZWQgYmVmb3Jl
IHRoZSBsb2FkIGV2ZW50IGZpcmVzLiBGb3Igd2F5cw0KLSAqICAgICAgIHRvIGNyZWF0ZSB0ZXN0
cyBhZnRlciB0aGUgbG9hZCBldmVudCwgc2VlICJEZXRlcm1pbmluZyB3aGVuIGFsbCB0ZXN0cw0K
LSAqICAgICAgIGFyZSBjb21wbGV0ZSIsIGJlbG93DQotICoNCi0gKiA9PSBTeW5jaHJvbm91cyBU
ZXN0cyA9PQ0KLSAqDQotICogVG8gY3JlYXRlIGEgc3luY2hyb25vdXMgdGVzdCB1c2UgdGhlIHRl
c3QoKSBmdW5jdGlvbjoNCi0gKg0KLSAqIHRlc3QodGVzdF9mdW5jdGlvbiwgbmFtZSwgcHJvcGVy
dGllcykNCi0gKg0KLSAqIHRlc3RfZnVuY3Rpb24gaXMgYSBmdW5jdGlvbiB0aGF0IGNvbnRhaW5z
IHRoZSBjb2RlIHRvIHRlc3QuIEZvciBleGFtcGxlIGENCi0gKiB0cml2aWFsIHBhc3NpbmcgdGVz
dCB3b3VsZCBiZToNCi0gKg0KLSAqIHRlc3QoZnVuY3Rpb24oKSB7YXNzZXJ0X3RydWUodHJ1ZSl9
LCAiYXNzZXJ0X3RydWUgd2l0aCB0cnVlIikNCi0gKg0KLSAqIFRoZSBmdW5jdGlvbiBwYXNzZWQg
aW4gaXMgcnVuIGluIHRoZSB0ZXN0KCkgY2FsbC4NCi0gKg0KLSAqIHByb3BlcnRpZXMgaXMgYW4g
b2JqZWN0IHRoYXQgb3ZlcnJpZGVzIGRlZmF1bHQgdGVzdCBwcm9wZXJ0aWVzLiBUaGUNCi0gKiBy
ZWNvZ25pc2VkIHByb3BlcnRpZXMgYXJlOg0KLSAqICAgIHRpbWVvdXQgLSB0aGUgdGVzdCB0aW1l
b3V0IGluIG1zDQotICoNCi0gKiBlLmcuDQotICogdGVzdCh0ZXN0X2Z1bmN0aW9uLCAiU2FtcGxl
IHRlc3QiLCB7dGltZW91dDoxMDAwfSkNCi0gKg0KLSAqIHdvdWxkIHJ1biB0ZXN0X2Z1bmN0aW9u
IHdpdGggYSB0aW1lb3V0IG9mIDFzLg0KLSAqDQotICogQWRkaXRpb25hbGx5LCB0ZXN0LXNwZWNp
ZmljIG1ldGFkYXRhIGNhbiBiZSBwYXNzZWQgaW4gdGhlIHByb3BlcnRpZXMuIFRoZXNlDQotICog
YXJlIHVzZWQgd2hlbiB0aGUgaW5kaXZpZHVhbCB0ZXN0IGhhcyBkaWZmZXJlbnQgbWV0YWRhdGEg
ZnJvbSB0aGF0IHN0b3JlZCANCi0gKiBpbiB0aGUgPGhlYWQ+Lg0KLSAqIFRoZSByZWNvZ25pemVk
IG1ldGFkYXRhIHByb3BlcnRpZXMgYXJlOg0KLSAqDQotICogICAgaGVscCAtIFRoZSB1cmwgb2Yg
dGhlIHBhcnQgb2YgdGhlIHNwZWNpZmljYXRpb24gYmVpbmcgdGVzdGVkDQotICoNCi0gKiAgICBh
c3NlcnQgLSBBIGh1bWFuIHJlYWRhYmxlIGRlc2NyaXB0aW9uIG9mIHdoYXQgdGhlIHRlc3QgaXMg
YXR0ZW1wdGluZyANCi0gKiAgICAgICAgICAgICB0byBwcm92ZQ0KLSAqDQotICogICAgYXV0aG9y
IC0gTmFtZSBhbmQgY29udGFjdCBpbmZvcm1hdGlvbiBmb3IgdGhlIGF1dGhvciBvZiB0aGUgdGVz
dCBpbiB0aGUNCi0gKiAgICAgICAgICAgICBmb3JtYXQ6ICJOYW1lIDxlbWFpbF9hZGRyPiIgb3Ig
Ik5hbWUgaHR0cDovL2NvbnRhY3QvdXJsIg0KLSAqDQotICogICAgZmxhZ3MgLSBzcGFjZSBzZXBh
cmF0ZWQgbGlzdCBvZiB0ZXN0IGZsYWdzIGluIGFkZGl0aW9uIHRvIGFueSBwcmVzZW50IGluDQot
ICogICAgICAgICAgICB0aGUgaGVhZCBtZXRhZGF0YQ0KLSAqDQotICogPT0gQXN5bmNocm9ub3Vz
IFRlc3RzID09DQotICoNCi0gKiBUZXN0aW5nIGFzeW5jaHJvbm91cyBmZWF0dXJlcyBpcyBzb21l
d2hhdCBtb3JlIGNvbXBsZXggc2luY2UgdGhlIHJlc3VsdCBvZg0KLSAqIGEgdGVzdCBtYXkgZGVw
ZW5kIG9uIG9uZSBvciBtb3JlIGV2ZW50cyBvciBvdGhlciBjYWxsYmFja3MuIFRoZSBBUEkgcHJv
dmlkZWQNCi0gKiBmb3IgdGVzdGluZyB0aGVzZSBmZWF0dXJlcyBpcyBpbmRlbmRlZCB0byBiZSBy
YXRoZXIgbG93LWxldmVsIGJ1dCBob3BlZnVsbHkNCi0gKiBhcHBsaWNhYmxlIHRvIG1hbnkgc2l0
dWF0aW9ucy4NCi0gKg0KLSAqIFRvIGNyZWF0ZSBhIHRlc3QsIG9uZSBzdGFydHMgYnkgZ2V0dGlu
ZyBhIFRlc3Qgb2JqZWN0IHVzaW5nIGFzeW5jX3Rlc3Q6DQotICoNCi0gKiBhc3luY190ZXN0KG5h
bWUsIHByb3BlcnRpZXMpDQotICoNCi0gKiBlLmcuDQotICogdmFyIHQgPSBhc3luY190ZXN0KCJT
aW1wbGUgYXN5bmMgdGVzdCIpDQotICoNCi0gKiBBc3NlcnRpb25zIGNhbiBiZSBhZGRlZCB0byB0
aGUgdGVzdCBieSBjYWxsaW5nIHRoZSBzdGVwIG1ldGhvZCBvZiB0aGUgdGVzdA0KLSAqIG9iamVj
dCB3aXRoIGEgZnVuY3Rpb24gY29udGFpbmluZyB0aGUgdGVzdCBhc3NlcnRpb25zOg0KLSAqDQot
ICogdC5zdGVwKGZ1bmN0aW9uKCkge2Fzc2VydF90cnVlKHRydWUpfSk7DQotICoNCi0gKiBXaGVu
IGFsbCB0aGUgc3RlcHMgYXJlIGNvbXBsZXRlLCB0aGUgZG9uZSgpIG1ldGhvZCBtdXN0IGJlIGNh
bGxlZDoNCi0gKg0KLSAqIHQuZG9uZSgpOw0KLSAqDQotICogQXMgYSBjb252ZW5pZW5jZSwgYXN5
bmNfdGVzdCBjYW4gYWxzbyB0YWtlcyBhIGZ1bmN0aW9uIGFzIGZpcnN0IGFyZ3VtZW50Lg0KLSAq
IFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIHdpdGggdGhlIHRlc3Qgb2JqZWN0IGFzIGJvdGggaXRz
IGB0aGlzYCBvYmplY3QgYW5kDQotICogZmlyc3QgYXJndW1lbnQuIFRoZSBhYm92ZSBleGFtcGxl
IGNhbiBiZSByZXdyaXR0ZW4gYXM6DQotICoNCi0gKiBhc3luY190ZXN0KGZ1bmN0aW9uKHQpIHsN
Ci0gKiAgICAgb2JqZWN0LnNvbWVfZXZlbnQgPSBmdW5jdGlvbigpIHsNCi0gKiAgICAgICAgIHQu
c3RlcChmdW5jdGlvbiAoKXthc3NlcnRfdHJ1ZSh0cnVlKTsgdC5kb25lKCk7fSk7DQotICogICAg
IH07DQotICogfSwgIlNpbXBsZSBhc3luYyB0ZXN0Iik7DQotICoNCi0gKiB3aGljaCBhdm9pZHMg
Y2x1dHRlcmluZyB0aGUgZ2xvYmFsIHNjb3BlIHdpdGggcmVmZXJlbmNlcyB0byBhc3luYw0KLSAq
IHRlc3RzIGluc3RhbmNlcy4NCi0gKg0KLSAqIFRoZSBwcm9wZXJ0aWVzIGFyZ3VtZW50IGlzIGlk
ZW50aWNhbCB0byB0aGF0IGZvciB0ZXN0KCkuDQotICoNCi0gKiBJbiBtYW55IGNhc2VzIGl0IGlz
IGNvbnZlbmllbnQgdG8gcnVuIGEgc3RlcCBpbiByZXNwb25zZSB0byBhbiBldmVudCBvciBhDQot
ICogY2FsbGJhY2suIEEgY29udmVuaWVudCBtZXRob2Qgb2YgZG9pbmcgdGhpcyBpcyB0aHJvdWdo
IHRoZSBzdGVwX2Z1bmMgbWV0aG9kDQotICogd2hpY2ggcmV0dXJucyBhIGZ1bmN0aW9uIHRoYXQs
IHdoZW4gY2FsbGVkIHJ1bnMgYSB0ZXN0IHN0ZXAuIEZvciBleGFtcGxlDQotICoNCi0gKiBvYmpl
Y3Quc29tZV9ldmVudCA9IHQuc3RlcF9mdW5jKGZ1bmN0aW9uKGUpIHthc3NlcnRfdHJ1ZShlLmEp
fSk7DQotICoNCi0gKiA9PSBNYWtpbmcgYXNzZXJ0aW9ucyA9PQ0KLSAqDQotICogRnVuY3Rpb25z
IGZvciBtYWtpbmcgYXNzZXJ0aW9ucyBzdGFydCBhc3NlcnRfDQotICogVGhlIGJlc3Qgd2F5IHRv
IGdldCBhIGxpc3QgaXMgdG8gbG9vayBpbiB0aGlzIGZpbGUgZm9yIGZ1bmN0aW9ucyBuYW1lcw0K
LSAqIG1hdGNoaW5nIHRoYXQgcGF0dGVybi4gVGhlIGdlbmVyYWwgc2lnbmF0dXJlIGlzDQotICoN
Ci0gKiBhc3NlcnRfc29tZXRoaW5nKGFjdHVhbCwgZXhwZWN0ZWQsIGRlc2NyaXB0aW9uKQ0KLSAq
DQotICogYWx0aG91Z2ggbm90IGFsbCBhc3NlcnRpb25zIHByZWNpc2VseSBtYXRjaCB0aGlzIHBh
dHRlcm4gZS5nLiBhc3NlcnRfdHJ1ZQ0KLSAqIG9ubHkgdGFrZXMgYWN0dWFsIGFuZCBkZXNjcmlw
dGlvbiBhcyBhcmd1bWVudHMuDQotICoNCi0gKiBUaGUgZGVzY3JpcHRpb24gcGFyYW1ldGVyIGlz
IHVzZWQgdG8gcHJlc2VudCBtb3JlIHVzZWZ1bCBlcnJvciBtZXNzYWdlcyB3aGVuDQotICogYSB0
ZXN0IGZhaWxzDQotICoNCi0gKiBOT1RFOiBBbGwgYXNzZXJ0cyBtdXN0IGJlIGxvY2F0ZWQgaW4g
YSB0ZXN0KCkgb3IgYSBzdGVwIG9mIGFuIGFzeW5jX3Rlc3QoKS4NCi0gKiAgICAgICBhc3NlcnRz
IG91dHNpZGUgdGhlc2UgcGxhY2VzIHdvbid0IGJlIGRldGVjdGVkIGNvcnJlY3RseSBieSB0aGUg
aGFybmVzcw0KLSAqICAgICAgIGFuZCBtYXkgY2F1c2UgYSBmaWxlIHRvIHN0b3AgdGVzdGluZy4N
Ci0gKg0KLSAqID09IFNldHVwID09DQotICoNCi0gKiBTb21ldGltZXMgdGVzdHMgcmVxdWlyZSBu
b24tdHJpdmlhbCBzZXR1cCB0aGF0IG1heSBmYWlsLiBGb3IgdGhpcyBwdXJwb3NlDQotICogdGhl
cmUgaXMgYSBzZXR1cCgpIGZ1bmN0aW9uLCB0aGF0IG1heSBiZSBjYWxsZWQgd2l0aCBvbmUgb3Ig
dHdvIGFyZ3VtZW50cy4NCi0gKiBUaGUgdHdvIGFyZ3VtZW50IHZlcnNpb24gaXM6DQotICoNCi0g
KiBzZXR1cChmdW5jLCBwcm9wZXJ0aWVzKQ0KLSAqDQotICogVGhlIG9uZSBhcmd1bWVudCB2ZXJz
aW9ucyBtYXkgb21pdCBlaXRoZXIgYXJndW1lbnQuDQotICogZnVuYyBpcyBhIGZ1bmN0aW9uIHRv
IGJlIHJ1biBzeW5jaHJvbm91c2x5LiBzZXR1cCgpIGJlY29tZXMgYSBuby1vcCBvbmNlDQotICog
YW55IHRlc3RzIGhhdmUgcmV0dXJuZWQgcmVzdWx0cy4gUHJvcGVydGllcyBhcmUgZ2xvYmFsIHBy
b3BlcnRpZXMgb2YgdGhlIHRlc3QNCi0gKiBoYXJuZXNzLiBDdXJyZW50bHkgcmVjb2duaXNlZCBw
cm9wZXJ0aWVzIGFyZToNCi0gKg0KLSAqIHRpbWVvdXQgLSBUaGUgdGltZSBpbiBtcyBhZnRlciB3
aGljaCB0aGUgaGFybmVzcyBzaG91bGQgc3RvcCB3YWl0aW5nIGZvcg0KLSAqICAgICAgICAgICB0
ZXN0cyB0byBjb21wbGV0ZSAodGhpcyBpcyBkaWZmZXJlbnQgdG8gdGhlIHBlci10ZXN0IHRpbWVv
dXQNCi0gKiAgICAgICAgICAgYmVjYXVzZSBhc3luYyB0ZXN0cyBkbyBub3Qgc3RhcnQgdGhlaXIg
dGltZXIgdW50aWwgLnN0ZXAgaXMgY2FsbGVkKQ0KLSAqDQotICogZXhwbGljaXRfZG9uZSAtIFdh
aXQgZm9yIGFuIGV4cGxpY2l0IGNhbGwgdG8gZG9uZSgpIGJlZm9yZSBkZWNsYXJpbmcgYWxsDQot
ICogICAgICAgICAgICAgICAgIHRlc3RzIGNvbXBsZXRlIChzZWUgYmVsb3cpDQotICoNCi0gKiBv
dXRwdXRfZG9jdW1lbnQgLSBUaGUgZG9jdW1lbnQgdG8gd2hpY2ggcmVzdWx0cyBzaG91bGQgYmUg
bG9nZ2VkLiBCeSBkZWZhdWx0DQotICogICAgICAgICAgICAgICAgICAgdGhpcyBpcyB0aGUgY3Vy
cmVudCBkb2N1bWVudCBidXQgY291bGQgYmUgYW4gYW5jZXN0b3INCi0gKiAgICAgICAgICAgICAg
ICAgICBkb2N1bWVudCBpbiBzb21lIGNhc2VzIGUuZy4gYSBTVkcgdGVzdCBsb2FkZWQgaW4gYW4g
SFRNTA0KLSAqICAgICAgICAgICAgICAgICAgIHdyYXBwZXINCi0gKg0KLSAqIGV4cGxpY2l0X3Rp
bWVvdXQgLSBkaXNhYmxlIGZpbGUgdGltZW91dDsgb25seSBzdG9wIHdhaXRpbmcgZm9yIHJlc3Vs
dHMNCi0gKiAgICAgICAgICAgICAgICAgICAgd2hlbiB0aGUgdGltZW91dCgpIGZ1bmN0aW9uIGlz
IGNhbGxlZCAodHlwaWNhbGx5IGZvcg0KLSAqICAgICAgICAgICAgICAgICAgICB1c2Ugd2hlbiBp
bnRlZ3JhdGluZyB3aXRoIHNvbWUgZXhpc3RpbmcgdGVzdCBmcmFtZXdvcmsNCi0gKiAgICAgICAg
ICAgICAgICAgICAgdGhhdCBoYXMgaXRzIG93biB0aW1lb3V0IG1lY2hhbmlzbSkuDQotICoNCi0g
KiA9PSBEZXRlcm1pbmluZyB3aGVuIGFsbCB0ZXN0cyBhcmUgY29tcGxldGUgPT0NCi0gKg0KLSAq
IEJ5IGRlZmF1bHQgdGhlIHRlc3QgaGFybmVzcyB3aWxsIGFzc3VtZSB0aGVyZSBhcmUgbm8gbW9y
ZSByZXN1bHRzIHRvIGNvbWUNCi0gKiB3aGVuOg0KLSAqIDEpIFRoZXJlIGFyZSBubyBUZXN0IG9i
amVjdHMgdGhhdCBoYXZlIGJlZW4gY3JlYXRlZCBidXQgbm90IGNvbXBsZXRlZA0KLSAqIDIpIFRo
ZSBsb2FkIGV2ZW50IG9uIHRoZSBkb2N1bWVudCBoYXMgZmlyZWQNCi0gKg0KLSAqIFRoaXMgYmVo
YXZpb3VyIGNhbiBiZSBvdmVycmlkZGVuIGJ5IHNldHRpbmcgdGhlIGV4cGxpY2l0X2RvbmUgcHJv
cGVydHkgdG8NCi0gKiB0cnVlIGluIGEgY2FsbCB0byBzZXR1cCgpLiBJZiBleHBsaWNpdF9kb25l
IGlzIHRydWUsIHRoZSB0ZXN0IGhhcm5lc3Mgd2lsbA0KLSAqIG5vdCBhc3N1bWUgaXQgaXMgZG9u
ZSB1bnRpbCB0aGUgZ2xvYmFsIGRvbmUoKSBmdW5jdGlvbiBpcyBjYWxsZWQuIE9uY2UgZG9uZSgp
DQotICogaXMgY2FsbGVkLCB0aGUgdHdvIGNvbmRpdGlvbnMgYWJvdmUgYXBwbHkgbGlrZSBub3Jt
YWwuDQotICoNCi0gKiA9PSBHZW5lcmF0aW5nIHRlc3RzID09DQotICoNCi0gKiBOT1RFOiB0aGlz
IGZ1bmN0aW9uYWxpdHkgbWF5IGJlIHJlbW92ZWQNCi0gKg0KLSAqIFRoZXJlIGFyZSBzY2VuYXJp
b3MgaW4gd2hpY2ggaXMgaXMgZGVzaXJhYmxlIHRvIGNyZWF0ZSBhIGxhcmdlIG51bWJlciBvZg0K
LSAqIChzeW5jaHJvbm91cykgdGVzdHMgdGhhdCBhcmUgaW50ZXJuYWxseSBzaW1pbGFyIGJ1dCB2
YXJ5IGluIHRoZSBwYXJhbWV0ZXJzDQotICogdXNlZC4gVG8gbWFrZSB0aGlzIGVhc2llciwgdGhl
IGdlbmVyYXRlX3Rlc3RzIGZ1bmN0aW9uIGFsbG93cyBhIHNpbmdsZQ0KLSAqIGZ1bmN0aW9uIHRv
IGJlIGNhbGxlZCB3aXRoIGVhY2ggc2V0IG9mIHBhcmFtZXRlcnMgaW4gYSBsaXN0Og0KLSAqDQot
ICogZ2VuZXJhdGVfdGVzdHModGVzdF9mdW5jdGlvbiwgcGFyYW1ldGVyX2xpc3RzLCBwcm9wZXJ0
aWVzKQ0KLSAqDQotICogRm9yIGV4YW1wbGU6DQotICoNCi0gKiBnZW5lcmF0ZV90ZXN0cyhhc3Nl
cnRfZXF1YWxzLCBbDQotICogICAgIFsiU3VtIG9uZSBhbmQgb25lIiwgMSsxLCAyXSwNCi0gKiAg
ICAgWyJTdW0gb25lIGFuZCB6ZXJvIiwgMSswLCAxXQ0KLSAqICAgICBdKQ0KLSAqDQotICogSXMg
ZXF1aXZhbGVudCB0bzoNCi0gKg0KLSAqIHRlc3QoZnVuY3Rpb24oKSB7YXNzZXJ0X2VxdWFscygx
KzEsIDIpfSwgIlN1bSBvbmUgYW5kIG9uZSIpDQotICogdGVzdChmdW5jdGlvbigpIHthc3NlcnRf
ZXF1YWxzKDErMCwgMSl9LCAiU3VtIG9uZSBhbmQgemVybyIpDQotICoNCi0gKiBOb3RlIHRoYXQg
dGhlIGZpcnN0IGl0ZW0gaW4gZWFjaCBwYXJhbWV0ZXIgbGlzdCBjb3JyZXNwb25kcyB0byB0aGUg
bmFtZSBvZg0KLSAqIHRoZSB0ZXN0Lg0KLSAqDQotICogVGhlIHByb3BlcnRpZXMgYXJndW1lbnQg
aXMgaWRlbnRpY2FsIHRvIHRoYXQgZm9yIHRlc3QoKS4gVGhpcyBtYXkgYmUgYSANCi0gKiBzaW5n
bGUgb2JqZWN0ICh1c2VkIGZvciBhbGwgZ2VuZXJhdGVkIHRlc3RzKSBvciBhbiBhcnJheS4NCi0g
Kg0KLSAqID09IENhbGxiYWNrIEFQSSA9PQ0KLSAqDQotICogVGhlIGZyYW1ld29yayBwcm92aWRl
cyBjYWxsYmFja3MgY29ycmVzcG9uZGluZyB0byAzIGV2ZW50czoNCi0gKg0KLSAqIHN0YXJ0IC0g
aGFwcGVucyB3aGVuIHRoZSBmaXJzdCBUZXN0IGlzIGNyZWF0ZWQNCi0gKiByZXN1bHQgLSBoYXBw
ZW5zIHdoZW4gYSB0ZXN0IHJlc3VsdCBpcyByZWNpZXZlZA0KLSAqIGNvbXBsZXRlIC0gaGFwcGVu
cyB3aGVuIGFsbCByZXN1bHRzIGFyZSByZWNpZXZlZA0KLSAqDQotICogVGhlIHBhZ2UgZGVmaW5p
bmcgdGhlIHRlc3RzIG1heSBhZGQgY2FsbGJhY2tzIGZvciB0aGVzZSBldmVudHMgYnkgY2FsbGlu
Zw0KLSAqIHRoZSBmb2xsb3dpbmcgbWV0aG9kczoNCi0gKg0KLSAqICAgYWRkX3N0YXJ0X2NhbGxi
YWNrKGNhbGxiYWNrKSAtIGNhbGxiYWNrIGNhbGxlZCB3aXRoIG5vIGFyZ3VtZW50cw0KLSAqICAg
YWRkX3Jlc3VsdF9jYWxsYmFjayhjYWxsYmFjaykgLSBjYWxsYmFjayBjYWxsZWQgd2l0aCBhIHRl
c3QgYXJndW1lbnQNCi0gKiAgIGFkZF9jb21wbGV0aW9uX2NhbGxiYWNrKGNhbGxiYWNrKSAtIGNh
bGxiYWNrIGNhbGxlZCB3aXRoIGFuIGFycmF5IG9mIHRlc3RzDQotICogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBhbmQgYW4gc3RhdHVzIG9iamVjdA0KLSAqDQotICogdGVz
dHMgaGF2ZSB0aGUgZm9sbG93aW5nIHByb3BlcnRpZXM6DQotICogICBzdGF0dXM6IEEgc3RhdHVz
IGNvZGUuIFRoaXMgY2FuIGJlIGNvbXBhcmVkIHRvIHRoZSBQQVNTLCBGQUlMLCBUSU1FT1VUIGFu
ZA0KLSAqICAgICAgICAgICBOT1RSVU4gcHJvcGVydGllcyBvbiB0aGUgdGVzdCBvYmplY3QNCi0g
KiAgIG1lc3NhZ2U6IEEgbWVzc2FnZSBpbmRpY2F0aW5nIHRoZSByZWFzb24gZm9yIGZhaWx1cmUu
IEluIHRoZSBmdXR1cmUgdGhpcw0KLSAqICAgICAgICAgICAgd2lsbCBhbHdheXMgYmUgYSBzdHJp
bmcNCi0gKg0KLSAqICBUaGUgc3RhdHVzIG9iamVjdCBnaXZlcyB0aGUgb3ZlcmFsbCBzdGF0dXMg
b2YgdGhlIGhhcm5lc3MuIEl0IGhhcyB0aGUNCi0gKiAgZm9sbG93aW5nIHByb3BlcnRpZXM6DQot
ICogICAgc3RhdHVzOiBDYW4gYmUgY29tcGFyZWQgdG8gdGhlIE9LLCBFUlJPUiBhbmQgVElNRU9V
VCBwcm9wZXJ0aWVzDQotICogICAgbWVzc2FnZTogQW4gZXJyb3IgbWVzc2FnZSBzZXQgd2hlbiB0
aGUgc3RhdHVzIGlzIEVSUk9SDQotICoNCi0gKiA9PSBFeHRlcm5hbCBBUEkgPT0NCi0gKg0KLSAq
IEluIG9yZGVyIHRvIGNvbGxlY3QgdGhlIHJlc3VsdHMgb2YgbXVsdGlwbGUgcGFnZXMgY29udGFp
bmluZyB0ZXN0cywgdGhlIHRlc3QNCi0gKiBoYXJuZXNzIHdpbGwsIHdoZW4gbG9hZGVkIGluIGEg
bmVzdGVkIGJyb3dzaW5nIGNvbnRleHQsIGF0dGVtcHQgdG8gY2FsbA0KLSAqIGNlcnRhaW4gZnVu
Y3Rpb25zIGluIGVhY2ggYW5jZXN0b3IgYW5kIG9wZW5lciBicm93c2luZyBjb250ZXh0Og0KLSAq
DQotICogc3RhcnQgLSBzdGFydF9jYWxsYmFjaw0KLSAqIHJlc3VsdCAtIHJlc3VsdF9jYWxsYmFj
aw0KLSAqIGNvbXBsZXRlIC0gY29tcGxldGlvbl9jYWxsYmFjaw0KLSAqDQotICogVGhlc2UgYXJl
IGdpdmVuIHRoZSBzYW1lIGFyZ3VtZW50cyBhcyB0aGUgY29ycmVzcG9uZGluZyBpbnRlcm5hbCBj
YWxsYmFja3MNCi0gKiBkZXNjcmliZWQgYWJvdmUuDQotICoNCi0gKiA9PSBFeHRlcm5hbCBBUEkg
dGhyb3VnaCBjcm9zcy1kb2N1bWVudCBtZXNzYWdpbmcgPT0NCi0gKg0KLSAqIFdoZXJlIHN1cHBv
cnRlZCwgdGhlIHRlc3QgaGFybmVzcyB3aWxsIGFsc28gc2VuZCBtZXNzYWdlcyB1c2luZw0KLSAq
IGNyb3NzLWRvY3VtZW50IG1lc3NhZ2luZyB0byBlYWNoIGFuY2VzdG9yIGFuZCBvcGVuZXIgYnJv
d3NpbmcgY29udGV4dC4gU2luY2UNCi0gKiBpdCB1c2VzIHRoZSB3aWxkY2FyZCBrZXl3b3JkICgq
KSwgY3Jvc3Mtb3JpZ2luIGNvbW11bmljYXRpb24gaXMgZW5hYmxlZCBhbmQNCi0gKiBzY3JpcHQg
b24gZGlmZmVyZW50IG9yaWdpbnMgY2FuIGNvbGxlY3QgdGhlIHJlc3VsdHMuDQotICoNCi0gKiBU
aGlzIEFQSSBmb2xsb3dzIHNpbWlsYXIgY29udmVudGlvbnMgYXMgdGhvc2UgZGVzY3JpYmVkIGFi
b3ZlIG9ubHkgc2xpZ2h0bHkNCi0gKiBtb2RpZmllZCB0byBhY2NvbW1vZGF0ZSBtZXNzYWdlIGV2
ZW50IEFQSS4gRWFjaCBtZXNzYWdlIGlzIHNlbnQgYnkgdGhlIGhhcm5lc3MNCi0gKiBpcyBwYXNz
ZWQgYSBzaW5nbGUgdmFuaWxsYSBvYmplY3QsIGF2YWlsYWJsZSBhcyB0aGUgYGRhdGFgIHByb3Bl
cnR5IG9mIHRoZQ0KLSAqIGV2ZW50IG9iamVjdC4gVGhlc2Ugb2JqZWN0cyBhcmUgc3RydWN0dXJl
cyBhcyBmb2xsb3dzOg0KLSAqDQotICogc3RhcnQgLSB7IHR5cGU6ICJzdGFydCIgfQ0KLSAqIHJl
c3VsdCAtIHsgdHlwZTogInJlc3VsdCIsIHRlc3Q6IFRlc3QgfQ0KLSAqIGNvbXBsZXRlIC0geyB0
eXBlOiAiY29tcGxldGUiLCB0ZXN0czogW1Rlc3QsIC4uLl0sIHN0YXR1czogVGVzdHNTdGF0dXMg
fQ0KLSAqDQotICogPT0gTGlzdCBvZiBhc3NlcnRpb25zID09DQotICoNCi0gKiBhc3NlcnRfdHJ1
ZShhY3R1YWwsIGRlc2NyaXB0aW9uKQ0KLSAqICAgYXNzZXJ0cyB0aGF0IC9hY3R1YWwvIGlzIHN0
cmljdGx5IHRydWUNCi0gKg0KLSAqIGFzc2VydF9mYWxzZShhY3R1YWwsIGRlc2NyaXB0aW9uKQ0K
LSAqICAgYXNzZXJ0cyB0aGF0IC9hY3R1YWwvIGlzIHN0cmljdGx5IGZhbHNlDQotICoNCi0gKiBh
c3NlcnRfZXF1YWxzKGFjdHVhbCwgZXhwZWN0ZWQsIGRlc2NyaXB0aW9uKQ0KLSAqICAgYXNzZXJ0
cyB0aGF0IC9hY3R1YWwvIGlzIHRoZSBzYW1lIHZhbHVlIGFzIC9leHBlY3RlZC8NCi0gKg0KLSAq
IGFzc2VydF9ub3RfZXF1YWxzKGFjdHVhbCwgZXhwZWN0ZWQsIGRlc2NyaXB0aW9uKQ0KLSAqICAg
YXNzZXJ0cyB0aGF0IC9hY3R1YWwvIGlzIGEgZGlmZmVyZW50IHZhbHVlIHRvIC9leHBlY3RlZC8u
IFllcywgdGhpcyBtZWFucw0KLSAqICAgdGhhdCAiZXhwZWN0ZWQiIGlzIGEgbWlzbm9tZXINCi0g
Kg0KLSAqIGFzc2VydF9pbl9hcnJheShhY3R1YWwsIGV4cGVjdGVkLCBkZXNjcmlwdGlvbikNCi0g
KiAgIGFzc2VydHMgdGhhdCAvZXhwZWN0ZWQvIGlzIGFuIEFycmF5LCBhbmQgL2FjdHVhbC8gaXMg
ZXF1YWwgdG8gb25lIG9mIHRoZQ0KLSAqICAgbWVtYmVycyAtLSBleHBlY3RlZC5pbmRleE9mKGFj
dHVhbCkgIT0gLTENCi0gKg0KLSAqIGFzc2VydF9hcnJheV9lcXVhbHMoYWN0dWFsLCBleHBlY3Rl
ZCwgZGVzY3JpcHRpb24pDQotICogICBhc3NlcnRzIHRoYXQgL2FjdHVhbC8gYW5kIC9leHBlY3Rl
ZC8gaGF2ZSB0aGUgc2FtZSBsZW5ndGggYW5kIHRoZSB2YWx1ZSBvZg0KLSAqICAgZWFjaCBpbmRl
eGVkIHByb3BlcnR5IGluIC9hY3R1YWwvIGlzIHRoZSBzdHJpY3RseSBlcXVhbCB0byB0aGUgY29y
cmVzcG9uZGluZw0KLSAqICAgcHJvcGVydHkgdmFsdWUgaW4gL2V4cGVjdGVkLw0KLSAqDQotICog
YXNzZXJ0X2FwcHJveF9lcXVhbHMoYWN0dWFsLCBleHBlY3RlZCwgZXBzaWxvbiwgZGVzY3JpcHRp
b24pDQotICogICBhc3NlcnRzIHRoYXQgL2FjdHVhbC8gaXMgYSBudW1iZXIgd2l0aGluICsvLSAv
ZXBzaWxvbi8gb2YgL2V4cGVjdGVkLw0KLSAqDQotICogYXNzZXJ0X3JlZ2V4cF9tYXRjaChhY3R1
YWwsIGV4cGVjdGVkLCBkZXNjcmlwdGlvbikNCi0gKiAgIGFzc2VydHMgdGhhdCAvYWN0dWFsLyBt
YXRjaGVzIHRoZSByZWdleHAgL2V4cGVjdGVkLw0KLSAqDQotICogYXNzZXJ0X2NsYXNzX3N0cmlu
ZyhvYmplY3QsIGNsYXNzX25hbWUsIGRlc2NyaXB0aW9uKQ0KLSAqICAgYXNzZXJ0cyB0aGF0IHRo
ZSBjbGFzcyBzdHJpbmcgb2YgL29iamVjdC8gYXMgcmV0dXJuZWQgaW4NCi0gKiAgIE9iamVjdC5w
cm90b3R5cGUudG9TdHJpbmcgaXMgZXF1YWwgdG8gL2NsYXNzX25hbWUvLg0KLSAqDQotICogYXNz
ZXJ0X293bl9wcm9wZXJ0eShvYmplY3QsIHByb3BlcnR5X25hbWUsIGRlc2NyaXB0aW9uKQ0KLSAq
ICAgYXNzZXJ0IHRoYXQgb2JqZWN0IGhhcyBvd24gcHJvcGVydHkgcHJvcGVydHlfbmFtZQ0KLSAq
DQotICogYXNzZXJ0X2luaGVyaXRzKG9iamVjdCwgcHJvcGVydHlfbmFtZSwgZGVzY3JpcHRpb24p
DQotICogICBhc3NlcnQgdGhhdCBvYmplY3QgZG9lcyBub3QgaGF2ZSBhbiBvd24gcHJvcGVydHkg
bmFtZWQgcHJvcGVydHlfbmFtZQ0KLSAqICAgYnV0IHRoYXQgcHJvcGVydHlfbmFtZSBpcyBwcmVz
ZW50IGluIHRoZSBwcm90b3R5cGUgY2hhaW4gZm9yIG9iamVjdA0KLSAqDQotICogYXNzZXJ0X2lk
bF9hdHRyaWJ1dGUob2JqZWN0LCBhdHRyaWJ1dGVfbmFtZSwgZGVzY3JpcHRpb24pDQotICogICBh
c3NlcnQgdGhhdCBhbiBvYmplY3QgdGhhdCBpcyBhbiBpbnN0YW5jZSBvZiBzb21lIGludGVyZmFj
ZSBoYXMgdGhlDQotICogICBhdHRyaWJ1dGUgYXR0cmlidXRlX25hbWUgZm9sbG93aW5nIHRoZSBj
b25kaXRpb25zIHNwZWNpZmllZCBieSBXZWJJREwNCi0gKg0KLSAqIGFzc2VydF9yZWFkb25seShv
YmplY3QsIHByb3BlcnR5X25hbWUsIGRlc2NyaXB0aW9uKQ0KLSAqICAgYXNzZXJ0IHRoYXQgcHJv
cGVydHkgcHJvcGVydHlfbmFtZSBvbiBvYmplY3QgaXMgcmVhZG9ubHkNCi0gKg0KLSAqIGFzc2Vy
dF90aHJvd3MoY29kZSwgZnVuYywgZGVzY3JpcHRpb24pDQotICogICBjb2RlIC0gdGhlIGV4cGVj
dGVkIGV4Y2VwdGlvbjoNCi0gKiAgICAgbyBzdHJpbmc6IHRoZSB0aHJvd24gZXhjZXB0aW9uIG11
c3QgYmUgYSBET01FeGNlcHRpb24gd2l0aCB0aGUgZ2l2ZW4NCi0gKiAgICAgICAgICAgICAgIG5h
bWUsIGUuZy4sICJUaW1lb3V0RXJyb3IiIChmb3IgY29tcGF0aWJpbGl0eSB3aXRoIGV4aXN0aW5n
DQotICogICAgICAgICAgICAgICB0ZXN0cywgYSBjb25zdGFudCBpcyBhbHNvIHN1cHBvcnRlZCwg
ZS5nLiwgIlRJTUVPVVRfRVJSIikNCi0gKiAgICAgbyBvYmplY3Q6IHRoZSB0aHJvd24gZXhjZXB0
aW9uIG11c3QgaGF2ZSBhIHByb3BlcnR5IGNhbGxlZCAibmFtZSIgdGhhdA0KLSAqICAgICAgICAg
ICAgICAgbWF0Y2hlcyBjb2RlLm5hbWUNCi0gKiAgICAgbyBudWxsOiAgIGFsbG93IGFueSBleGNl
cHRpb24gKGluIGdlbmVyYWwsIG9uZSBvZiB0aGUgb3B0aW9ucyBhYm92ZQ0KLSAqICAgICAgICAg
ICAgICAgc2hvdWxkIGJlIHVzZWQpDQotICogICBmdW5jIC0gYSBmdW5jdGlvbiB0aGF0IHNob3Vs
ZCB0aHJvdw0KLSAqDQotICogYXNzZXJ0X3VucmVhY2hlZChkZXNjcmlwdGlvbikNCi0gKiAgIGFz
c2VydHMgaWYgY2FsbGVkLiBVc2VkIHRvIGVuc3VyZSB0aGF0IHNvbWUgY29kZXBhdGggaXMgKm5v
dCogdGFrZW4gZS5nLg0KLSAqICAgYW4gZXZlbnQgZG9lcyBub3QgZmlyZS4NCi0gKg0KLSAqIGFz
c2VydF9hbnkoYXNzZXJ0X2Z1bmMsIGFjdHVhbCwgZXhwZWN0ZWRfYXJyYXksIGV4dHJhX2FyZ18x
LCAuLi4gZXh0cmFfYXJnX04pDQotICogICBhc3NlcnRzIHRoYXQgb25lIGFzc2VydF9mdW5jKGFj
dHVhbCwgZXhwZWN0ZWRfYXJyYXlfTiwgZXh0cmFfYXJnMSwgLi4uLCBleHRyYV9hcmdfTikNCi0g
KiAgIGlzIHRydWUgZm9yIHNvbWUgZXhwZWN0ZWRfYXJyYXlfTiBpbiBleHBlY3RlZF9hcnJheS4g
VGhpcyBvbmx5IHdvcmtzIGZvciBhc3NlcnRfZnVuYw0KLSAqICAgd2l0aCBzaWduYXR1cmUgYXNz
ZXJ0X2Z1bmMoYWN0dWFsLCBleHBlY3RlZCwgYXJnc18xLCAuLi4sIGFyZ3NfTikuIE5vdGUgdGhh
dCB0ZXN0cw0KLSAqICAgd2l0aCBtdWx0aXBsZSBhbGxvd2VkIHBhc3MgY29uZGl0aW9ucyBhcmUg
YmFkIHByYWN0aWNlIHVubGVzcyB0aGUgc3BlYyBzcGVjaWZpY2FsbHkNCi0gKiAgIGFsbG93cyBt
dWx0aXBsZSBiZWhhdmlvdXJzLiBUZXN0IGF1dGhvcnMgc2hvdWxkIG5vdCB1c2UgdGhpcyBtZXRo
b2Qgc2ltcGx5IHRvIGhpZGUgDQotICogICBVQSBidWdzLg0KLSAqDQotICogYXNzZXJ0X2V4aXN0
cyhvYmplY3QsIHByb3BlcnR5X25hbWUsIGRlc2NyaXB0aW9uKQ0KLSAqICAgKioqIGRlcHJlY2F0
ZWQgKioqDQotICogICBhc3NlcnRzIHRoYXQgb2JqZWN0IGhhcyBhbiBvd24gcHJvcGVydHkgcHJv
cGVydHlfbmFtZQ0KLSAqDQotICogYXNzZXJ0X25vdF9leGlzdHMob2JqZWN0LCBwcm9wZXJ0eV9u
YW1lLCBkZXNjcmlwdGlvbikNCi0gKiAgICoqKiBkZXByZWNhdGVkICoqKg0KLSAqICAgYXNzZXJ0
IHRoYXQgb2JqZWN0IGRvZXMgbm90IGhhdmUgb3duIHByb3BlcnR5IHByb3BlcnR5X25hbWUNCi0g
Ki8NCi0NCi0oZnVuY3Rpb24gKCkNCi17DQotICAgIHZhciBkZWJ1ZyA9IGZhbHNlOw0KLSAgICAv
LyBkZWZhdWx0IHRpbWVvdXQgaXMgNSBzZWNvbmRzLCB0ZXN0IGNhbiBvdmVycmlkZSBpZiBuZWVk
ZWQNCi0gICAgdmFyIHNldHRpbmdzID0gew0KLSAgICAgIG91dHB1dDp0cnVlLA0KLSAgICAgIHRp
bWVvdXQ6NTAwMCwNCi0gICAgICB0ZXN0X3RpbWVvdXQ6MjAwMA0KLSAgICB9Ow0KLQ0KLSAgICB2
YXIgeGh0bWxfbnMgPSAiaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbCI7DQotDQotICAgIC8v
IHNjcmlwdF9wcmVmaXggaXMgdXNlZCBieSBPdXRwdXQucHJvdG90eXBlLnNob3dfcmVzdWx0cygp
IHRvIGZpZ3VyZSBvdXQNCi0gICAgLy8gd2hlcmUgdG8gZ2V0IHRlc3RoYXJuZXNzLmNzcyBmcm9t
LiAgSXQncyBlbmNsb3NlZCBpbiBhbiBleHRyYSBjbG9zdXJlIHRvDQotICAgIC8vIG5vdCBwb2xs
dXRlIHRoZSBsaWJyYXJ5J3MgbmFtZXNwYWNlIHdpdGggdmFyaWFibGVzIGxpa2UgInNyYyIuDQot
ICAgIHZhciBzY3JpcHRfcHJlZml4ID0gbnVsbDsNCi0gICAgKGZ1bmN0aW9uICgpDQotICAgIHsN
Ci0gICAgICAgIHZhciBzY3JpcHRzID0gZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoInNj
cmlwdCIpOw0KLSAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBzY3JpcHRzLmxlbmd0aDsgaSsr
KQ0KLSAgICAgICAgew0KLSAgICAgICAgICAgIGlmIChzY3JpcHRzW2ldLnNyYykNCi0gICAgICAg
ICAgICB7DQotICAgICAgICAgICAgICAgIHZhciBzcmMgPSBzY3JpcHRzW2ldLnNyYzsNCi0gICAg
ICAgICAgICB9DQotICAgICAgICAgICAgZWxzZSBpZiAoc2NyaXB0c1tpXS5ocmVmKQ0KLSAgICAg
ICAgICAgIHsNCi0gICAgICAgICAgICAgICAgLy9TVkcgY2FzZQ0KLSAgICAgICAgICAgICAgICB2
YXIgc3JjID0gc2NyaXB0c1tpXS5ocmVmLmJhc2VWYWw7DQotICAgICAgICAgICAgfQ0KLSAgICAg
ICAgICAgIGlmIChzcmMgJiYgc3JjLnNsaWNlKHNyYy5sZW5ndGggLSAidGVzdGhhcm5lc3MuanMi
Lmxlbmd0aCkgPT09ICJ0ZXN0aGFybmVzcy5qcyIpDQotICAgICAgICAgICAgew0KLSAgICAgICAg
ICAgICAgICBzY3JpcHRfcHJlZml4ID0gc3JjLnNsaWNlKDAsIHNyYy5sZW5ndGggLSAidGVzdGhh
cm5lc3MuanMiLmxlbmd0aCk7DQotICAgICAgICAgICAgICAgIGJyZWFrOw0KLSAgICAgICAgICAg
IH0NCi0gICAgICAgIH0NCi0gICAgfSkoKTsNCi0NCi0gICAgLyoNCi0gICAgICogQVBJIGZ1bmN0
aW9ucw0KLSAgICAgKi8NCi0NCi0gICAgdmFyIG5hbWVfY291bnRlciA9IDA7DQotICAgIGZ1bmN0
aW9uIG5leHRfZGVmYXVsdF9uYW1lKCkNCi0gICAgew0KLSAgICAgICAgLy9Eb24ndCB1c2UgZG9j
dW1lbnQudGl0bGUgdG8gd29yayBhcm91bmQgYW4gT3BlcmEgYnVnIGluIFhIVE1MIGRvY3VtZW50
cw0KLSAgICAgICAgdmFyIHByZWZpeCA9IGRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCJ0
aXRsZSIpLmxlbmd0aCA+IDAgPw0KLSAgICAgICAgICAgICAgICAgICAgICAgICBkb2N1bWVudC5n
ZXRFbGVtZW50c0J5VGFnTmFtZSgidGl0bGUiKVswXS5maXJzdENoaWxkLmRhdGEgOg0KLSAgICAg
ICAgICAgICAgICAgICAgICAgICAiVW50aXRsZWQiOw0KLSAgICAgICAgdmFyIHN1ZmZpeCA9IG5h
bWVfY291bnRlciA+IDAgPyAiICIgKyBuYW1lX2NvdW50ZXIgOiAiIjsNCi0gICAgICAgIG5hbWVf
Y291bnRlcisrOw0KLSAgICAgICAgcmV0dXJuIHByZWZpeCArIHN1ZmZpeDsNCi0gICAgfQ0KLQ0K
LSAgICBmdW5jdGlvbiB0ZXN0KGZ1bmMsIG5hbWUsIHByb3BlcnRpZXMpDQotICAgIHsNCi0gICAg
ICAgIHZhciB0ZXN0X25hbWUgPSBuYW1lID8gbmFtZSA6IG5leHRfZGVmYXVsdF9uYW1lKCk7DQot
ICAgICAgICBwcm9wZXJ0aWVzID0gcHJvcGVydGllcyA/IHByb3BlcnRpZXMgOiB7fTsNCi0gICAg
ICAgIHZhciB0ZXN0X29iaiA9IG5ldyBUZXN0KHRlc3RfbmFtZSwgcHJvcGVydGllcyk7DQotICAg
ICAgICB0ZXN0X29iai5zdGVwKGZ1bmMpOw0KLSAgICAgICAgaWYgKHRlc3Rfb2JqLnN0YXR1cyA9
PT0gdGVzdF9vYmouTk9UUlVOKSB7DQotICAgICAgICAgICAgdGVzdF9vYmouZG9uZSgpOw0KLSAg
ICAgICAgfQ0KLSAgICB9DQotDQotICAgIGZ1bmN0aW9uIGFzeW5jX3Rlc3QoZnVuYywgbmFtZSwg
cHJvcGVydGllcykNCi0gICAgew0KLSAgICAgICAgaWYgKHR5cGVvZiBmdW5jICE9PSAiZnVuY3Rp
b24iKSB7DQotICAgICAgICAgICAgcHJvcGVydGllcyA9IG5hbWU7DQotICAgICAgICAgICAgbmFt
ZSA9IGZ1bmM7DQotICAgICAgICAgICAgZnVuYyA9IG51bGw7DQotICAgICAgICB9DQotICAgICAg
ICB2YXIgdGVzdF9uYW1lID0gbmFtZSA/IG5hbWUgOiBuZXh0X2RlZmF1bHRfbmFtZSgpOw0KLSAg
ICAgICAgcHJvcGVydGllcyA9IHByb3BlcnRpZXMgPyBwcm9wZXJ0aWVzIDoge307DQotICAgICAg
ICB2YXIgdGVzdF9vYmogPSBuZXcgVGVzdCh0ZXN0X25hbWUsIHByb3BlcnRpZXMpOw0KLSAgICAg
ICAgaWYgKGZ1bmMpIHsNCi0gICAgICAgICAgICB0ZXN0X29iai5zdGVwKGZ1bmMsIHRlc3Rfb2Jq
LCB0ZXN0X29iaik7DQotICAgICAgICB9DQotICAgICAgICByZXR1cm4gdGVzdF9vYmo7DQotICAg
IH0NCi0NCi0gICAgZnVuY3Rpb24gc2V0dXAoZnVuY19vcl9wcm9wZXJ0aWVzLCBtYXliZV9wcm9w
ZXJ0aWVzKQ0KLSAgICB7DQotICAgICAgICB2YXIgZnVuYyA9IG51bGw7DQotICAgICAgICB2YXIg
cHJvcGVydGllcyA9IHt9Ow0KLSAgICAgICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT09IDIpIHsN
Ci0gICAgICAgICAgICBmdW5jID0gZnVuY19vcl9wcm9wZXJ0aWVzOw0KLSAgICAgICAgICAgIHBy
b3BlcnRpZXMgPSBtYXliZV9wcm9wZXJ0aWVzOw0KLSAgICAgICAgfSBlbHNlIGlmIChmdW5jX29y
X3Byb3BlcnRpZXMgaW5zdGFuY2VvZiBGdW5jdGlvbil7DQotICAgICAgICAgICAgZnVuYyA9IGZ1
bmNfb3JfcHJvcGVydGllczsNCi0gICAgICAgIH0gZWxzZSB7DQotICAgICAgICAgICAgcHJvcGVy
dGllcyA9IGZ1bmNfb3JfcHJvcGVydGllczsNCi0gICAgICAgIH0NCi0gICAgICAgIHRlc3RzLnNl
dHVwKGZ1bmMsIHByb3BlcnRpZXMpOw0KLSAgICAgICAgb3V0cHV0LnNldHVwKHByb3BlcnRpZXMp
Ow0KLSAgICB9DQotDQotICAgIGZ1bmN0aW9uIGRvbmUoKSB7DQotICAgICAgICB0ZXN0cy5lbmRf
d2FpdCgpOw0KLSAgICB9DQotDQotICAgIGZ1bmN0aW9uIGdlbmVyYXRlX3Rlc3RzKGZ1bmMsIGFy
Z3MsIHByb3BlcnRpZXMpIHsNCi0gICAgICAgIGZvckVhY2goYXJncywgZnVuY3Rpb24oeCwgaSkN
Ci0gICAgICAgICAgICAgICAgew0KLSAgICAgICAgICAgICAgICAgICAgdmFyIG5hbWUgPSB4WzBd
Ow0KLSAgICAgICAgICAgICAgICAgICAgdGVzdChmdW5jdGlvbigpDQotICAgICAgICAgICAgICAg
ICAgICAgICAgIHsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmMuYXBwbHkodGhp
cywgeC5zbGljZSgxKSk7DQotICAgICAgICAgICAgICAgICAgICAgICAgIH0sIA0KLSAgICAgICAg
ICAgICAgICAgICAgICAgICBuYW1lLCANCi0gICAgICAgICAgICAgICAgICAgICAgICAgQXJyYXku
aXNBcnJheShwcm9wZXJ0aWVzKSA/IHByb3BlcnRpZXNbaV0gOiBwcm9wZXJ0aWVzKTsNCi0gICAg
ICAgICAgICAgICAgfSk7DQotICAgIH0NCi0NCi0gICAgZnVuY3Rpb24gb25fZXZlbnQob2JqZWN0
LCBldmVudCwgY2FsbGJhY2spDQotICAgIHsNCi0gICAgICBvYmplY3QuYWRkRXZlbnRMaXN0ZW5l
cihldmVudCwgY2FsbGJhY2ssIGZhbHNlKTsNCi0gICAgfQ0KLQ0KLSAgICBleHBvc2UodGVzdCwg
J3Rlc3QnKTsNCi0gICAgZXhwb3NlKGFzeW5jX3Rlc3QsICdhc3luY190ZXN0Jyk7DQotICAgIGV4
cG9zZShnZW5lcmF0ZV90ZXN0cywgJ2dlbmVyYXRlX3Rlc3RzJyk7DQotICAgIGV4cG9zZShzZXR1
cCwgJ3NldHVwJyk7DQotICAgIGV4cG9zZShkb25lLCAnZG9uZScpOw0KLSAgICBleHBvc2Uob25f
ZXZlbnQsICdvbl9ldmVudCcpOw0KLQ0KLSAgICAvKg0KLSAgICAgKiBSZXR1cm4gYSBzdHJpbmcg
dHJ1bmNhdGVkIHRvIHRoZSBnaXZlbiBsZW5ndGgsIHdpdGggLi4uIGFkZGVkIGF0IHRoZSBlbmQN
Ci0gICAgICogaWYgaXQgd2FzIGxvbmdlci4NCi0gICAgICovDQotICAgIGZ1bmN0aW9uIHRydW5j
YXRlKHMsIGxlbikNCi0gICAgew0KLSAgICAgICAgaWYgKHMubGVuZ3RoID4gbGVuKSB7DQotICAg
ICAgICAgICAgcmV0dXJuIHMuc3Vic3RyaW5nKDAsIGxlbiAtIDMpICsgIi4uLiI7DQotICAgICAg
ICB9DQotICAgICAgICByZXR1cm4gczsNCi0gICAgfQ0KLQ0KLSAgICAvKg0KLSAgICAgKiBDb252
ZXJ0IGEgdmFsdWUgdG8gYSBuaWNlLCBodW1hbi1yZWFkYWJsZSBzdHJpbmcNCi0gICAgICovDQot
ICAgIGZ1bmN0aW9uIGZvcm1hdF92YWx1ZSh2YWwpDQotICAgIHsNCi0gICAgICAgIGlmIChBcnJh
eS5pc0FycmF5KHZhbCkpDQotICAgICAgICB7DQotICAgICAgICAgICAgcmV0dXJuICJbIiArIHZh
bC5tYXAoZm9ybWF0X3ZhbHVlKS5qb2luKCIsICIpICsgIl0iOw0KLSAgICAgICAgfQ0KLQ0KLSAg
ICAgICAgc3dpdGNoICh0eXBlb2YgdmFsKQ0KLSAgICAgICAgew0KLSAgICAgICAgY2FzZSAic3Ry
aW5nIjoNCi0gICAgICAgICAgICB2YWwgPSB2YWwucmVwbGFjZSgiXFwiLCAiXFxcXCIpOw0KLSAg
ICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgMzI7IGkrKykNCi0gICAgICAgICAgICB7DQot
ICAgICAgICAgICAgICAgIHZhciByZXBsYWNlID0gIlxcIjsNCi0gICAgICAgICAgICAgICAgc3dp
dGNoIChpKSB7DQotICAgICAgICAgICAgICAgIGNhc2UgMDogcmVwbGFjZSArPSAiMCI7IGJyZWFr
Ow0KLSAgICAgICAgICAgICAgICBjYXNlIDE6IHJlcGxhY2UgKz0gIngwMSI7IGJyZWFrOw0KLSAg
ICAgICAgICAgICAgICBjYXNlIDI6IHJlcGxhY2UgKz0gIngwMiI7IGJyZWFrOw0KLSAgICAgICAg
ICAgICAgICBjYXNlIDM6IHJlcGxhY2UgKz0gIngwMyI7IGJyZWFrOw0KLSAgICAgICAgICAgICAg
ICBjYXNlIDQ6IHJlcGxhY2UgKz0gIngwNCI7IGJyZWFrOw0KLSAgICAgICAgICAgICAgICBjYXNl
IDU6IHJlcGxhY2UgKz0gIngwNSI7IGJyZWFrOw0KLSAgICAgICAgICAgICAgICBjYXNlIDY6IHJl
cGxhY2UgKz0gIngwNiI7IGJyZWFrOw0KLSAgICAgICAgICAgICAgICBjYXNlIDc6IHJlcGxhY2Ug
Kz0gIngwNyI7IGJyZWFrOw0KLSAgICAgICAgICAgICAgICBjYXNlIDg6IHJlcGxhY2UgKz0gImIi
OyBicmVhazsNCi0gICAgICAgICAgICAgICAgY2FzZSA5OiByZXBsYWNlICs9ICJ0IjsgYnJlYWs7
DQotICAgICAgICAgICAgICAgIGNhc2UgMTA6IHJlcGxhY2UgKz0gIm4iOyBicmVhazsNCi0gICAg
ICAgICAgICAgICAgY2FzZSAxMTogcmVwbGFjZSArPSAidiI7IGJyZWFrOw0KLSAgICAgICAgICAg
ICAgICBjYXNlIDEyOiByZXBsYWNlICs9ICJmIjsgYnJlYWs7DQotICAgICAgICAgICAgICAgIGNh
c2UgMTM6IHJlcGxhY2UgKz0gInIiOyBicmVhazsNCi0gICAgICAgICAgICAgICAgY2FzZSAxNDog
cmVwbGFjZSArPSAieDBlIjsgYnJlYWs7DQotICAgICAgICAgICAgICAgIGNhc2UgMTU6IHJlcGxh
Y2UgKz0gIngwZiI7IGJyZWFrOw0KLSAgICAgICAgICAgICAgICBjYXNlIDE2OiByZXBsYWNlICs9
ICJ4MTAiOyBicmVhazsNCi0gICAgICAgICAgICAgICAgY2FzZSAxNzogcmVwbGFjZSArPSAieDEx
IjsgYnJlYWs7DQotICAgICAgICAgICAgICAgIGNhc2UgMTg6IHJlcGxhY2UgKz0gIngxMiI7IGJy
ZWFrOw0KLSAgICAgICAgICAgICAgICBjYXNlIDE5OiByZXBsYWNlICs9ICJ4MTMiOyBicmVhazsN
Ci0gICAgICAgICAgICAgICAgY2FzZSAyMDogcmVwbGFjZSArPSAieDE0IjsgYnJlYWs7DQotICAg
ICAgICAgICAgICAgIGNhc2UgMjE6IHJlcGxhY2UgKz0gIngxNSI7IGJyZWFrOw0KLSAgICAgICAg
ICAgICAgICBjYXNlIDIyOiByZXBsYWNlICs9ICJ4MTYiOyBicmVhazsNCi0gICAgICAgICAgICAg
ICAgY2FzZSAyMzogcmVwbGFjZSArPSAieDE3IjsgYnJlYWs7DQotICAgICAgICAgICAgICAgIGNh
c2UgMjQ6IHJlcGxhY2UgKz0gIngxOCI7IGJyZWFrOw0KLSAgICAgICAgICAgICAgICBjYXNlIDI1
OiByZXBsYWNlICs9ICJ4MTkiOyBicmVhazsNCi0gICAgICAgICAgICAgICAgY2FzZSAyNjogcmVw
bGFjZSArPSAieDFhIjsgYnJlYWs7DQotICAgICAgICAgICAgICAgIGNhc2UgMjc6IHJlcGxhY2Ug
Kz0gIngxYiI7IGJyZWFrOw0KLSAgICAgICAgICAgICAgICBjYXNlIDI4OiByZXBsYWNlICs9ICJ4
MWMiOyBicmVhazsNCi0gICAgICAgICAgICAgICAgY2FzZSAyOTogcmVwbGFjZSArPSAieDFkIjsg
YnJlYWs7DQotICAgICAgICAgICAgICAgIGNhc2UgMzA6IHJlcGxhY2UgKz0gIngxZSI7IGJyZWFr
Ow0KLSAgICAgICAgICAgICAgICBjYXNlIDMxOiByZXBsYWNlICs9ICJ4MWYiOyBicmVhazsNCi0g
ICAgICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgICAgICB2YWwgPSB2YWwucmVwbGFjZShSZWdF
eHAoU3RyaW5nLmZyb21DaGFyQ29kZShpKSwgImciKSwgcmVwbGFjZSk7DQotICAgICAgICAgICAg
fQ0KLSAgICAgICAgICAgIHJldHVybiAnIicgKyB2YWwucmVwbGFjZSgvIi9nLCAnXFwiJykgKyAn
Iic7DQotICAgICAgICBjYXNlICJib29sZWFuIjoNCi0gICAgICAgIGNhc2UgInVuZGVmaW5lZCI6
DQotICAgICAgICAgICAgcmV0dXJuIFN0cmluZyh2YWwpOw0KLSAgICAgICAgY2FzZSAibnVtYmVy
IjoNCi0gICAgICAgICAgICAvLyBJbiBKYXZhU2NyaXB0LCAtMCA9PT0gMCBhbmQgU3RyaW5nKC0w
KSA9PSAiMCIsIHNvIHdlIGhhdmUgdG8NCi0gICAgICAgICAgICAvLyBzcGVjaWFsLWNhc2UuDQot
ICAgICAgICAgICAgaWYgKHZhbCA9PT0gLTAgJiYgMS92YWwgPT09IC1JbmZpbml0eSkNCi0gICAg
ICAgICAgICB7DQotICAgICAgICAgICAgICAgIHJldHVybiAiLTAiOw0KLSAgICAgICAgICAgIH0N
Ci0gICAgICAgICAgICByZXR1cm4gU3RyaW5nKHZhbCk7DQotICAgICAgICBjYXNlICJvYmplY3Qi
Og0KLSAgICAgICAgICAgIGlmICh2YWwgPT09IG51bGwpDQotICAgICAgICAgICAgew0KLSAgICAg
ICAgICAgICAgICByZXR1cm4gIm51bGwiOw0KLSAgICAgICAgICAgIH0NCi0NCi0gICAgICAgICAg
ICAvLyBTcGVjaWFsLWNhc2UgTm9kZSBvYmplY3RzLCBzaW5jZSB0aG9zZSBjb21lIHVwIGEgbG90
IGluIG15IHRlc3RzLiAgSQ0KLSAgICAgICAgICAgIC8vIGlnbm9yZSBuYW1lc3BhY2VzLiAgSSB1
c2UgZHVjay10eXBpbmcgaW5zdGVhZCBvZiBpbnN0YW5jZW9mLCBiZWNhdXNlDQotICAgICAgICAg
ICAgLy8gaW5zdGFuY2VvZiBkb2Vzbid0IHdvcmsgaWYgdGhlIG5vZGUgaXMgZnJvbSBhbm90aGVy
IHdpbmRvdyAobGlrZSBhbg0KLSAgICAgICAgICAgIC8vIGlmcmFtZSdzIGNvbnRlbnRXaW5kb3cp
Og0KLSAgICAgICAgICAgIC8vIGh0dHA6Ly93d3cudzMub3JnL0J1Z3MvUHVibGljL3Nob3dfYnVn
LmNnaT9pZD0xMjI5NQ0KLSAgICAgICAgICAgIGlmICgibm9kZVR5cGUiIGluIHZhbA0KLSAgICAg
ICAgICAgICYmICJub2RlTmFtZSIgaW4gdmFsDQotICAgICAgICAgICAgJiYgIm5vZGVWYWx1ZSIg
aW4gdmFsDQotICAgICAgICAgICAgJiYgImNoaWxkTm9kZXMiIGluIHZhbCkNCi0gICAgICAgICAg
ICB7DQotICAgICAgICAgICAgICAgIHN3aXRjaCAodmFsLm5vZGVUeXBlKQ0KLSAgICAgICAgICAg
ICAgICB7DQotICAgICAgICAgICAgICAgIGNhc2UgTm9kZS5FTEVNRU5UX05PREU6DQotICAgICAg
ICAgICAgICAgICAgICB2YXIgcmV0ID0gIjwiICsgdmFsLnRhZ05hbWUudG9Mb3dlckNhc2UoKTsN
Ci0gICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdmFsLmF0dHJpYnV0ZXMu
bGVuZ3RoOyBpKyspDQotICAgICAgICAgICAgICAgICAgICB7DQotICAgICAgICAgICAgICAgICAg
ICAgICAgcmV0ICs9ICIgIiArIHZhbC5hdHRyaWJ1dGVzW2ldLm5hbWUgKyAnPSInICsgdmFsLmF0
dHJpYnV0ZXNbaV0udmFsdWUgKyAnIic7DQotICAgICAgICAgICAgICAgICAgICB9DQotICAgICAg
ICAgICAgICAgICAgICByZXQgKz0gIj4iICsgdmFsLmlubmVySFRNTCArICI8LyIgKyB2YWwudGFn
TmFtZS50b0xvd2VyQ2FzZSgpICsgIj4iOw0KLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuICJF
bGVtZW50IG5vZGUgIiArIHRydW5jYXRlKHJldCwgNjApOw0KLSAgICAgICAgICAgICAgICBjYXNl
IE5vZGUuVEVYVF9OT0RFOg0KLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuICdUZXh0IG5vZGUg
IicgKyB0cnVuY2F0ZSh2YWwuZGF0YSwgNjApICsgJyInOw0KLSAgICAgICAgICAgICAgICBjYXNl
IE5vZGUuUFJPQ0VTU0lOR19JTlNUUlVDVElPTl9OT0RFOg0KLSAgICAgICAgICAgICAgICAgICAg
cmV0dXJuICJQcm9jZXNzaW5nSW5zdHJ1Y3Rpb24gbm9kZSB3aXRoIHRhcmdldCAiICsgZm9ybWF0
X3ZhbHVlKHRydW5jYXRlKHZhbC50YXJnZXQsIDYwKSkgKyAiIGFuZCBkYXRhICIgKyBmb3JtYXRf
dmFsdWUodHJ1bmNhdGUodmFsLmRhdGEsIDYwKSk7DQotICAgICAgICAgICAgICAgIGNhc2UgTm9k
ZS5DT01NRU5UX05PREU6DQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gIkNvbW1lbnQgbm9k
ZSA8IS0tIiArIHRydW5jYXRlKHZhbC5kYXRhLCA2MCkgKyAiLS0+IjsNCi0gICAgICAgICAgICAg
ICAgY2FzZSBOb2RlLkRPQ1VNRU5UX05PREU6DQotICAgICAgICAgICAgICAgICAgICByZXR1cm4g
IkRvY3VtZW50IG5vZGUgd2l0aCAiICsgdmFsLmNoaWxkTm9kZXMubGVuZ3RoICsgKHZhbC5jaGls
ZE5vZGVzLmxlbmd0aCA9PSAxID8gIiBjaGlsZCIgOiAiIGNoaWxkcmVuIik7DQotICAgICAgICAg
ICAgICAgIGNhc2UgTm9kZS5ET0NVTUVOVF9UWVBFX05PREU6DQotICAgICAgICAgICAgICAgICAg
ICByZXR1cm4gIkRvY3VtZW50VHlwZSBub2RlIjsNCi0gICAgICAgICAgICAgICAgY2FzZSBOb2Rl
LkRPQ1VNRU5UX0ZSQUdNRU5UX05PREU6DQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gIkRv
Y3VtZW50RnJhZ21lbnQgbm9kZSB3aXRoICIgKyB2YWwuY2hpbGROb2Rlcy5sZW5ndGggKyAodmFs
LmNoaWxkTm9kZXMubGVuZ3RoID09IDEgPyAiIGNoaWxkIiA6ICIgY2hpbGRyZW4iKTsNCi0gICAg
ICAgICAgICAgICAgZGVmYXVsdDoNCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiAiTm9kZSBv
YmplY3Qgb2YgdW5rbm93biB0eXBlIjsNCi0gICAgICAgICAgICAgICAgfQ0KLSAgICAgICAgICAg
IH0NCi0NCi0gICAgICAgICAgICAvLyBGYWxsIHRocm91Z2ggdG8gZGVmYXVsdA0KLSAgICAgICAg
ZGVmYXVsdDoNCi0gICAgICAgICAgICByZXR1cm4gdHlwZW9mIHZhbCArICcgIicgKyB0cnVuY2F0
ZShTdHJpbmcodmFsKSwgNjApICsgJyInOw0KLSAgICAgICAgfQ0KLSAgICB9DQotICAgIGV4cG9z
ZShmb3JtYXRfdmFsdWUsICJmb3JtYXRfdmFsdWUiKTsNCi0NCi0gICAgLyoNCi0gICAgICogQXNz
ZXJ0aW9ucw0KLSAgICAgKi8NCi0NCi0gICAgZnVuY3Rpb24gYXNzZXJ0X3RydWUoYWN0dWFsLCBk
ZXNjcmlwdGlvbikNCi0gICAgew0KLSAgICAgICAgYXNzZXJ0KGFjdHVhbCA9PT0gdHJ1ZSwgImFz
c2VydF90cnVlIiwgZGVzY3JpcHRpb24sDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAiZXhwZWN0ZWQgdHJ1ZSBnb3QgJHthY3R1YWx9Iiwge2FjdHVhbDphY3R1YWx9KTsNCi0gICAg
fTsNCi0gICAgZXhwb3NlKGFzc2VydF90cnVlLCAiYXNzZXJ0X3RydWUiKTsNCi0NCi0gICAgZnVu
Y3Rpb24gYXNzZXJ0X2ZhbHNlKGFjdHVhbCwgZGVzY3JpcHRpb24pDQotICAgIHsNCi0gICAgICAg
IGFzc2VydChhY3R1YWwgPT09IGZhbHNlLCAiYXNzZXJ0X2ZhbHNlIiwgZGVzY3JpcHRpb24sDQot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImV4cGVjdGVkIGZhbHNlIGdvdCAke2Fj
dHVhbH0iLCB7YWN0dWFsOmFjdHVhbH0pOw0KLSAgICB9Ow0KLSAgICBleHBvc2UoYXNzZXJ0X2Zh
bHNlLCAiYXNzZXJ0X2ZhbHNlIik7DQotDQotICAgIGZ1bmN0aW9uIHNhbWVfdmFsdWUoeCwgeSkg
ew0KLSAgICAgICAgaWYgKHkgIT09IHkpDQotICAgICAgICB7DQotICAgICAgICAgICAgLy9OYU4g
Y2FzZQ0KLSAgICAgICAgICAgIHJldHVybiB4ICE9PSB4Ow0KLSAgICAgICAgfQ0KLSAgICAgICAg
ZWxzZSBpZiAoeCA9PT0gMCAmJiB5ID09PSAwKSB7DQotICAgICAgICAgICAgLy9EaXN0aW5ndWlz
aCArMCBhbmQgLTANCi0gICAgICAgICAgICByZXR1cm4gMS94ID09PSAxL3k7DQotICAgICAgICB9
DQotICAgICAgICBlbHNlDQotICAgICAgICB7DQotICAgICAgICAgICAgLy90eXBpY2FsIGNhc2UN
Ci0gICAgICAgICAgICByZXR1cm4geCA9PT0geTsNCi0gICAgICAgIH0NCi0gICAgfQ0KLQ0KLSAg
ICBmdW5jdGlvbiBhc3NlcnRfZXF1YWxzKGFjdHVhbCwgZXhwZWN0ZWQsIGRlc2NyaXB0aW9uKQ0K
LSAgICB7DQotICAgICAgICAgLyoNCi0gICAgICAgICAgKiBUZXN0IGlmIHR3byBwcmltaXRpdmVz
IGFyZSBlcXVhbCBvciB0d28gb2JqZWN0cw0KLSAgICAgICAgICAqIGFyZSB0aGUgc2FtZSBvYmpl
Y3QNCi0gICAgICAgICAgKi8NCi0gICAgICAgIGlmICh0eXBlb2YgYWN0dWFsICE9IHR5cGVvZiBl
eHBlY3RlZCkNCi0gICAgICAgIHsNCi0gICAgICAgICAgICBhc3NlcnQoZmFsc2UsICJhc3NlcnRf
ZXF1YWxzIiwgZGVzY3JpcHRpb24sDQotICAgICAgICAgICAgICAgICAgICAgICAgICAiZXhwZWN0
ZWQgKCIgKyB0eXBlb2YgZXhwZWN0ZWQgKyAiKSAke2V4cGVjdGVkfSBidXQgZ290ICgiICsgdHlw
ZW9mIGFjdHVhbCArICIpICR7YWN0dWFsfSIsDQotICAgICAgICAgICAgICAgICAgICAgICAgICB7
ZXhwZWN0ZWQ6ZXhwZWN0ZWQsIGFjdHVhbDphY3R1YWx9KTsNCi0gICAgICAgICAgICByZXR1cm47
DQotICAgICAgICB9DQotICAgICAgICBhc3NlcnQoc2FtZV92YWx1ZShhY3R1YWwsIGV4cGVjdGVk
KSwgImFzc2VydF9lcXVhbHMiLCBkZXNjcmlwdGlvbiwNCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAiZXhwZWN0ZWQgJHtleHBlY3RlZH0gYnV0IGdvdCAke2Fj
dHVhbH0iLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtl
eHBlY3RlZDpleHBlY3RlZCwgYWN0dWFsOmFjdHVhbH0pOw0KLSAgICB9Ow0KLSAgICBleHBvc2Uo
YXNzZXJ0X2VxdWFscywgImFzc2VydF9lcXVhbHMiKTsNCi0NCi0gICAgZnVuY3Rpb24gYXNzZXJ0
X25vdF9lcXVhbHMoYWN0dWFsLCBleHBlY3RlZCwgZGVzY3JpcHRpb24pDQotICAgIHsNCi0gICAg
ICAgICAvKg0KLSAgICAgICAgICAqIFRlc3QgaWYgdHdvIHByaW1pdGl2ZXMgYXJlIHVuZXF1YWwg
b3IgdHdvIG9iamVjdHMNCi0gICAgICAgICAgKiBhcmUgZGlmZmVyZW50IG9iamVjdHMNCi0gICAg
ICAgICAgKi8NCi0gICAgICAgIGFzc2VydCghc2FtZV92YWx1ZShhY3R1YWwsIGV4cGVjdGVkKSwg
ImFzc2VydF9ub3RfZXF1YWxzIiwgZGVzY3JpcHRpb24sDQotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICJnb3QgZGlzYWxsb3dlZCB2YWx1ZSAke2FjdHVhbH0i
LA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7YWN0dWFs
OmFjdHVhbH0pOw0KLSAgICB9Ow0KLSAgICBleHBvc2UoYXNzZXJ0X25vdF9lcXVhbHMsICJhc3Nl
cnRfbm90X2VxdWFscyIpOw0KLQ0KLSAgICBmdW5jdGlvbiBhc3NlcnRfaW5fYXJyYXkoYWN0dWFs
LCBleHBlY3RlZCwgZGVzY3JpcHRpb24pDQotICAgIHsNCi0gICAgICAgIGFzc2VydChleHBlY3Rl
ZC5pbmRleE9mKGFjdHVhbCkgIT0gLTEsICJhc3NlcnRfaW5fYXJyYXkiLCBkZXNjcmlwdGlvbiwN
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ2YWx1ZSAk
e2FjdHVhbH0gbm90IGluIGFycmF5ICR7ZXhwZWN0ZWR9IiwNCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHthY3R1YWw6YWN0dWFsLCBleHBlY3RlZDpleHBl
Y3RlZH0pOw0KLSAgICB9DQotICAgIGV4cG9zZShhc3NlcnRfaW5fYXJyYXksICJhc3NlcnRfaW5f
YXJyYXkiKTsNCi0NCi0gICAgZnVuY3Rpb24gYXNzZXJ0X29iamVjdF9lcXVhbHMoYWN0dWFsLCBl
eHBlY3RlZCwgZGVzY3JpcHRpb24pDQotICAgIHsNCi0gICAgICAgICAvL1RoaXMgbmVlZHMgdG8g
YmUgaW1wcm92ZWQgYSBncmVhdCBkZWFsDQotICAgICAgICAgZnVuY3Rpb24gY2hlY2tfZXF1YWwo
YWN0dWFsLCBleHBlY3RlZCwgc3RhY2spDQotICAgICAgICAgew0KLSAgICAgICAgICAgICBzdGFj
ay5wdXNoKGFjdHVhbCk7DQotDQotICAgICAgICAgICAgIHZhciBwOw0KLSAgICAgICAgICAgICBm
b3IgKHAgaW4gYWN0dWFsKQ0KLSAgICAgICAgICAgICB7DQotICAgICAgICAgICAgICAgICBhc3Nl
cnQoZXhwZWN0ZWQuaGFzT3duUHJvcGVydHkocCksICJhc3NlcnRfb2JqZWN0X2VxdWFscyIsIGRl
c2NyaXB0aW9uLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAidW5leHBlY3RlZCBwcm9wZXJ0eSAke3B9Iiwge3A6cH0pOw0KLQ0KLSAgICAgICAg
ICAgICAgICAgaWYgKHR5cGVvZiBhY3R1YWxbcF0gPT09ICJvYmplY3QiICYmIGFjdHVhbFtwXSAh
PT0gbnVsbCkNCi0gICAgICAgICAgICAgICAgIHsNCi0gICAgICAgICAgICAgICAgICAgICBpZiAo
c3RhY2suaW5kZXhPZihhY3R1YWxbcF0pID09PSAtMSkNCi0gICAgICAgICAgICAgICAgICAgICB7
DQotICAgICAgICAgICAgICAgICAgICAgICAgIGNoZWNrX2VxdWFsKGFjdHVhbFtwXSwgZXhwZWN0
ZWRbcF0sIHN0YWNrKTsNCi0gICAgICAgICAgICAgICAgICAgICB9DQotICAgICAgICAgICAgICAg
ICB9DQotICAgICAgICAgICAgICAgICBlbHNlDQotICAgICAgICAgICAgICAgICB7DQotICAgICAg
ICAgICAgICAgICAgICAgYXNzZXJ0KHNhbWVfdmFsdWUoYWN0dWFsW3BdLCBleHBlY3RlZFtwXSks
ICJhc3NlcnRfb2JqZWN0X2VxdWFscyIsIGRlc2NyaXB0aW9uLA0KLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAicHJvcGVydHkgJHtwfSBleHBl
Y3RlZCAke2V4cGVjdGVkfSBnb3QgJHthY3R1YWx9IiwNCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3A6cCwgZXhwZWN0ZWQ6ZXhwZWN0ZWQs
IGFjdHVhbDphY3R1YWx9KTsNCi0gICAgICAgICAgICAgICAgIH0NCi0gICAgICAgICAgICAgfQ0K
LSAgICAgICAgICAgICBmb3IgKHAgaW4gZXhwZWN0ZWQpDQotICAgICAgICAgICAgIHsNCi0gICAg
ICAgICAgICAgICAgIGFzc2VydChhY3R1YWwuaGFzT3duUHJvcGVydHkocCksDQotICAgICAgICAg
ICAgICAgICAgICAgICAgImFzc2VydF9vYmplY3RfZXF1YWxzIiwgZGVzY3JpcHRpb24sDQotICAg
ICAgICAgICAgICAgICAgICAgICAgImV4cGVjdGVkIHByb3BlcnR5ICR7cH0gbWlzc2luZyIsIHtw
OnB9KTsNCi0gICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgICBzdGFjay5wb3AoKTsNCi0gICAg
ICAgICB9DQotICAgICAgICAgY2hlY2tfZXF1YWwoYWN0dWFsLCBleHBlY3RlZCwgW10pOw0KLSAg
ICB9Ow0KLSAgICBleHBvc2UoYXNzZXJ0X29iamVjdF9lcXVhbHMsICJhc3NlcnRfb2JqZWN0X2Vx
dWFscyIpOw0KLQ0KLSAgICBmdW5jdGlvbiBhc3NlcnRfYXJyYXlfZXF1YWxzKGFjdHVhbCwgZXhw
ZWN0ZWQsIGRlc2NyaXB0aW9uKQ0KLSAgICB7DQotICAgICAgICBhc3NlcnQoYWN0dWFsLmxlbmd0
aCA9PT0gZXhwZWN0ZWQubGVuZ3RoLA0KLSAgICAgICAgICAgICAgICJhc3NlcnRfYXJyYXlfZXF1
YWxzIiwgZGVzY3JpcHRpb24sDQotICAgICAgICAgICAgICAgImxlbmd0aHMgZGlmZmVyLCBleHBl
Y3RlZCAke2V4cGVjdGVkfSBnb3QgJHthY3R1YWx9IiwNCi0gICAgICAgICAgICAgICB7ZXhwZWN0
ZWQ6ZXhwZWN0ZWQubGVuZ3RoLCBhY3R1YWw6YWN0dWFsLmxlbmd0aH0pOw0KLQ0KLSAgICAgICAg
Zm9yICh2YXIgaT0wOyBpIDwgYWN0dWFsLmxlbmd0aDsgaSsrKQ0KLSAgICAgICAgew0KLSAgICAg
ICAgICAgIGFzc2VydChhY3R1YWwuaGFzT3duUHJvcGVydHkoaSkgPT09IGV4cGVjdGVkLmhhc093
blByb3BlcnR5KGkpLA0KLSAgICAgICAgICAgICAgICAgICAiYXNzZXJ0X2FycmF5X2VxdWFscyIs
IGRlc2NyaXB0aW9uLA0KLSAgICAgICAgICAgICAgICAgICAicHJvcGVydHkgJHtpfSwgcHJvcGVy
dHkgZXhwZWN0ZWQgdG8gYmUgJGV4cGVjdGVkIGJ1dCB3YXMgJGFjdHVhbCIsDQotICAgICAgICAg
ICAgICAgICAgIHtpOmksIGV4cGVjdGVkOmV4cGVjdGVkLmhhc093blByb3BlcnR5KGkpID8gInBy
ZXNlbnQiIDogIm1pc3NpbmciLA0KLSAgICAgICAgICAgICAgICAgICBhY3R1YWw6YWN0dWFsLmhh
c093blByb3BlcnR5KGkpID8gInByZXNlbnQiIDogIm1pc3NpbmcifSk7DQotICAgICAgICAgICAg
YXNzZXJ0KHNhbWVfdmFsdWUoZXhwZWN0ZWRbaV0sIGFjdHVhbFtpXSksDQotICAgICAgICAgICAg
ICAgICAgICJhc3NlcnRfYXJyYXlfZXF1YWxzIiwgZGVzY3JpcHRpb24sDQotICAgICAgICAgICAg
ICAgICAgICJwcm9wZXJ0eSAke2l9LCBleHBlY3RlZCAke2V4cGVjdGVkfSBidXQgZ290ICR7YWN0
dWFsfSIsDQotICAgICAgICAgICAgICAgICAgIHtpOmksIGV4cGVjdGVkOmV4cGVjdGVkW2ldLCBh
Y3R1YWw6YWN0dWFsW2ldfSk7DQotICAgICAgICB9DQotICAgIH0NCi0gICAgZXhwb3NlKGFzc2Vy
dF9hcnJheV9lcXVhbHMsICJhc3NlcnRfYXJyYXlfZXF1YWxzIik7DQotDQotICAgIGZ1bmN0aW9u
IGFzc2VydF9hcHByb3hfZXF1YWxzKGFjdHVhbCwgZXhwZWN0ZWQsIGVwc2lsb24sIGRlc2NyaXB0
aW9uKQ0KLSAgICB7DQotICAgICAgICAvKg0KLSAgICAgICAgICogVGVzdCBpZiB0d28gcHJpbWl0
aXZlIG51bWJlcnMgYXJlIGVxdWFsIHdpdGhpbmcgKy8tIGVwc2lsb24NCi0gICAgICAgICAqLw0K
LSAgICAgICAgYXNzZXJ0KHR5cGVvZiBhY3R1YWwgPT09ICJudW1iZXIiLA0KLSAgICAgICAgICAg
ICAgICJhc3NlcnRfYXBwcm94X2VxdWFscyIsIGRlc2NyaXB0aW9uLA0KLSAgICAgICAgICAgICAg
ICJleHBlY3RlZCBhIG51bWJlciBidXQgZ290IGEgJHt0eXBlX2FjdHVhbH0iLA0KLSAgICAgICAg
ICAgICAgIHt0eXBlX2FjdHVhbDp0eXBlb2YgYWN0dWFsfSk7DQotDQotICAgICAgICBhc3NlcnQo
TWF0aC5hYnMoYWN0dWFsIC0gZXhwZWN0ZWQpIDw9IGVwc2lsb24sDQotICAgICAgICAgICAgICAg
ImFzc2VydF9hcHByb3hfZXF1YWxzIiwgZGVzY3JpcHRpb24sDQotICAgICAgICAgICAgICAgImV4
cGVjdGVkICR7ZXhwZWN0ZWR9ICsvLSAke2Vwc2lsb259IGJ1dCBnb3QgJHthY3R1YWx9IiwNCi0g
ICAgICAgICAgICAgICB7ZXhwZWN0ZWQ6ZXhwZWN0ZWQsIGFjdHVhbDphY3R1YWwsIGVwc2lsb246
ZXBzaWxvbn0pOw0KLSAgICB9Ow0KLSAgICBleHBvc2UoYXNzZXJ0X2FwcHJveF9lcXVhbHMsICJh
c3NlcnRfYXBwcm94X2VxdWFscyIpOw0KLQ0KLSAgICBmdW5jdGlvbiBhc3NlcnRfcmVnZXhwX21h
dGNoKGFjdHVhbCwgZXhwZWN0ZWQsIGRlc2NyaXB0aW9uKSB7DQotICAgICAgICAvKg0KLSAgICAg
ICAgICogVGVzdCBpZiBhIHN0cmluZyAoYWN0dWFsKSBtYXRjaGVzIGEgcmVnZXhwIChleHBlY3Rl
ZCkNCi0gICAgICAgICAqLw0KLSAgICAgICAgYXNzZXJ0KGV4cGVjdGVkLnRlc3QoYWN0dWFsKSwN
Ci0gICAgICAgICAgICAgICAiYXNzZXJ0X3JlZ2V4cF9tYXRjaCIsIGRlc2NyaXB0aW9uLA0KLSAg
ICAgICAgICAgICAgICJleHBlY3RlZCAke2V4cGVjdGVkfSBidXQgZ290ICR7YWN0dWFsfSIsDQot
ICAgICAgICAgICAgICAge2V4cGVjdGVkOmV4cGVjdGVkLCBhY3R1YWw6YWN0dWFsfSk7DQotICAg
IH0NCi0gICAgZXhwb3NlKGFzc2VydF9yZWdleHBfbWF0Y2gsICJhc3NlcnRfcmVnZXhwX21hdGNo
Iik7DQotDQotICAgIGZ1bmN0aW9uIGFzc2VydF9jbGFzc19zdHJpbmcob2JqZWN0LCBjbGFzc19z
dHJpbmcsIGRlc2NyaXB0aW9uKSB7DQotICAgICAgICBhc3NlcnRfZXF1YWxzKHt9LnRvU3RyaW5n
LmNhbGwob2JqZWN0KSwgIltvYmplY3QgIiArIGNsYXNzX3N0cmluZyArICJdIiwNCi0gICAgICAg
ICAgICAgICAgICAgICAgZGVzY3JpcHRpb24pOw0KLSAgICB9DQotICAgIGV4cG9zZShhc3NlcnRf
Y2xhc3Nfc3RyaW5nLCAiYXNzZXJ0X2NsYXNzX3N0cmluZyIpOw0KLQ0KLQ0KLSAgICBmdW5jdGlv
biBfYXNzZXJ0X293bl9wcm9wZXJ0eShuYW1lKSB7DQotICAgICAgICByZXR1cm4gZnVuY3Rpb24o
b2JqZWN0LCBwcm9wZXJ0eV9uYW1lLCBkZXNjcmlwdGlvbikNCi0gICAgICAgIHsNCi0gICAgICAg
ICAgICBhc3NlcnQob2JqZWN0Lmhhc093blByb3BlcnR5KHByb3BlcnR5X25hbWUpLA0KLSAgICAg
ICAgICAgICAgICAgICBuYW1lLCBkZXNjcmlwdGlvbiwNCi0gICAgICAgICAgICAgICAgICAgImV4
cGVjdGVkIHByb3BlcnR5ICR7cH0gbWlzc2luZyIsIHtwOnByb3BlcnR5X25hbWV9KTsNCi0gICAg
ICAgIH07DQotICAgIH0NCi0gICAgZXhwb3NlKF9hc3NlcnRfb3duX3Byb3BlcnR5KCJhc3NlcnRf
ZXhpc3RzIiksICJhc3NlcnRfZXhpc3RzIik7DQotICAgIGV4cG9zZShfYXNzZXJ0X293bl9wcm9w
ZXJ0eSgiYXNzZXJ0X293bl9wcm9wZXJ0eSIpLCAiYXNzZXJ0X293bl9wcm9wZXJ0eSIpOw0KLQ0K
LSAgICBmdW5jdGlvbiBhc3NlcnRfbm90X2V4aXN0cyhvYmplY3QsIHByb3BlcnR5X25hbWUsIGRl
c2NyaXB0aW9uKQ0KLSAgICB7DQotICAgICAgICBhc3NlcnQoIW9iamVjdC5oYXNPd25Qcm9wZXJ0
eShwcm9wZXJ0eV9uYW1lKSwNCi0gICAgICAgICAgICAgICAiYXNzZXJ0X25vdF9leGlzdHMiLCBk
ZXNjcmlwdGlvbiwNCi0gICAgICAgICAgICAgICAidW5leHBlY3RlZCBwcm9wZXJ0eSAke3B9IGZv
dW5kIiwge3A6cHJvcGVydHlfbmFtZX0pOw0KLSAgICB9Ow0KLSAgICBleHBvc2UoYXNzZXJ0X25v
dF9leGlzdHMsICJhc3NlcnRfbm90X2V4aXN0cyIpOw0KLQ0KLSAgICBmdW5jdGlvbiBfYXNzZXJ0
X2luaGVyaXRzKG5hbWUpIHsNCi0gICAgICAgIHJldHVybiBmdW5jdGlvbiAob2JqZWN0LCBwcm9w
ZXJ0eV9uYW1lLCBkZXNjcmlwdGlvbikNCi0gICAgICAgIHsNCi0gICAgICAgICAgICBhc3NlcnQo
dHlwZW9mIG9iamVjdCA9PT0gIm9iamVjdCIsDQotICAgICAgICAgICAgICAgICAgIG5hbWUsIGRl
c2NyaXB0aW9uLA0KLSAgICAgICAgICAgICAgICAgICAicHJvdmlkZWQgdmFsdWUgaXMgbm90IGFu
IG9iamVjdCIpOw0KLQ0KLSAgICAgICAgICAgIGFzc2VydCgiaGFzT3duUHJvcGVydHkiIGluIG9i
amVjdCwNCi0gICAgICAgICAgICAgICAgICAgbmFtZSwgZGVzY3JpcHRpb24sDQotICAgICAgICAg
ICAgICAgICAgICJwcm92aWRlZCB2YWx1ZSBpcyBhbiBvYmplY3QgYnV0IGhhcyBubyBoYXNPd25Q
cm9wZXJ0eSBtZXRob2QiKTsNCi0NCi0gICAgICAgICAgICBhc3NlcnQoIW9iamVjdC5oYXNPd25Q
cm9wZXJ0eShwcm9wZXJ0eV9uYW1lKSwNCi0gICAgICAgICAgICAgICAgICAgbmFtZSwgZGVzY3Jp
cHRpb24sDQotICAgICAgICAgICAgICAgICAgICJwcm9wZXJ0eSAke3B9IGZvdW5kIG9uIG9iamVj
dCBleHBlY3RlZCBpbiBwcm90b3R5cGUgY2hhaW4iLA0KLSAgICAgICAgICAgICAgICAgICB7cDpw
cm9wZXJ0eV9uYW1lfSk7DQotDQotICAgICAgICAgICAgYXNzZXJ0KHByb3BlcnR5X25hbWUgaW4g
b2JqZWN0LA0KLSAgICAgICAgICAgICAgICAgICBuYW1lLCBkZXNjcmlwdGlvbiwNCi0gICAgICAg
ICAgICAgICAgICAgInByb3BlcnR5ICR7cH0gbm90IGZvdW5kIGluIHByb3RvdHlwZSBjaGFpbiIs
DQotICAgICAgICAgICAgICAgICAgIHtwOnByb3BlcnR5X25hbWV9KTsNCi0gICAgICAgIH07DQot
ICAgIH0NCi0gICAgZXhwb3NlKF9hc3NlcnRfaW5oZXJpdHMoImFzc2VydF9pbmhlcml0cyIpLCAi
YXNzZXJ0X2luaGVyaXRzIik7DQotICAgIGV4cG9zZShfYXNzZXJ0X2luaGVyaXRzKCJhc3NlcnRf
aWRsX2F0dHJpYnV0ZSIpLCAiYXNzZXJ0X2lkbF9hdHRyaWJ1dGUiKTsNCi0NCi0gICAgZnVuY3Rp
b24gYXNzZXJ0X3JlYWRvbmx5KG9iamVjdCwgcHJvcGVydHlfbmFtZSwgZGVzY3JpcHRpb24pDQot
ICAgIHsNCi0gICAgICAgICB2YXIgaW5pdGlhbF92YWx1ZSA9IG9iamVjdFtwcm9wZXJ0eV9uYW1l
XTsNCi0gICAgICAgICB0cnkgew0KLSAgICAgICAgICAgICAvL05vdGUgdGhhdCB0aGlzIGNhbiBo
YXZlIHNpZGUgZWZmZWN0cyBpbiB0aGUgY2FzZSB3aGVyZQ0KLSAgICAgICAgICAgICAvL3RoZSBw
cm9wZXJ0eSBoYXMgUHV0Rm9yd2FyZHMNCi0gICAgICAgICAgICAgb2JqZWN0W3Byb3BlcnR5X25h
bWVdID0gaW5pdGlhbF92YWx1ZSArICJhIjsgLy9YWFggdXNlIHNvbWUgb3RoZXIgdmFsdWUgaGVy
ZT8NCi0gICAgICAgICAgICAgYXNzZXJ0KHNhbWVfdmFsdWUob2JqZWN0W3Byb3BlcnR5X25hbWVd
LCBpbml0aWFsX3ZhbHVlKSwNCi0gICAgICAgICAgICAgICAgICAgICJhc3NlcnRfcmVhZG9ubHki
LCBkZXNjcmlwdGlvbiwNCi0gICAgICAgICAgICAgICAgICAgICJjaGFuZ2luZyBwcm9wZXJ0eSAk
e3B9IHN1Y2NlZWRlZCIsDQotICAgICAgICAgICAgICAgICAgICB7cDpwcm9wZXJ0eV9uYW1lfSk7
DQotICAgICAgICAgfQ0KLSAgICAgICAgIGZpbmFsbHkNCi0gICAgICAgICB7DQotICAgICAgICAg
ICAgIG9iamVjdFtwcm9wZXJ0eV9uYW1lXSA9IGluaXRpYWxfdmFsdWU7DQotICAgICAgICAgfQ0K
LSAgICB9Ow0KLSAgICBleHBvc2UoYXNzZXJ0X3JlYWRvbmx5LCAiYXNzZXJ0X3JlYWRvbmx5Iik7
DQotDQotICAgIGZ1bmN0aW9uIGFzc2VydF90aHJvd3MoY29kZSwgZnVuYywgZGVzY3JpcHRpb24p
DQotICAgIHsNCi0gICAgICAgIHRyeQ0KLSAgICAgICAgew0KLSAgICAgICAgICAgIGZ1bmMuY2Fs
bCh0aGlzKTsNCi0gICAgICAgICAgICBhc3NlcnQoZmFsc2UsICJhc3NlcnRfdGhyb3dzIiwgZGVz
Y3JpcHRpb24sDQotICAgICAgICAgICAgICAgICAgICIke2Z1bmN9IGRpZCBub3QgdGhyb3ciLCB7
ZnVuYzpmdW5jfSk7DQotICAgICAgICB9DQotICAgICAgICBjYXRjaChlKQ0KLSAgICAgICAgew0K
LSAgICAgICAgICAgIGlmIChlIGluc3RhbmNlb2YgQXNzZXJ0aW9uRXJyb3IpIHsNCi0gICAgICAg
ICAgICAgICAgdGhyb3coZSk7DQotICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgIGlmIChjb2Rl
ID09PSBudWxsKQ0KLSAgICAgICAgICAgIHsNCi0gICAgICAgICAgICAgICAgcmV0dXJuOw0KLSAg
ICAgICAgICAgIH0NCi0gICAgICAgICAgICBpZiAodHlwZW9mIGNvZGUgPT09ICJvYmplY3QiKQ0K
LSAgICAgICAgICAgIHsNCi0gICAgICAgICAgICAgICAgYXNzZXJ0KHR5cGVvZiBlID09ICJvYmpl
Y3QiICYmICJuYW1lIiBpbiBlICYmIGUubmFtZSA9PSBjb2RlLm5hbWUsDQotICAgICAgICAgICAg
ICAgICAgICAgICAiYXNzZXJ0X3Rocm93cyIsIGRlc2NyaXB0aW9uLA0KLSAgICAgICAgICAgICAg
ICAgICAgICAgIiR7ZnVuY30gdGhyZXcgJHthY3R1YWx9ICgke2FjdHVhbF9uYW1lfSkgZXhwZWN0
ZWQgJHtleHBlY3RlZH0gKCR7ZXhwZWN0ZWRfbmFtZX0pIiwNCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB7ZnVuYzpmdW5jLCBhY3R1YWw6ZSwgYWN0dWFsX25hbWU6ZS5uYW1l
LA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHBlY3RlZDpjb2RlLA0K
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHBlY3RlZF9uYW1lOmNvZGUu
bmFtZX0pOw0KLSAgICAgICAgICAgICAgICByZXR1cm47DQotICAgICAgICAgICAgfQ0KLQ0KLSAg
ICAgICAgICAgIHZhciBjb2RlX25hbWVfbWFwID0gew0KLSAgICAgICAgICAgICAgICBJTkRFWF9T
SVpFX0VSUjogJ0luZGV4U2l6ZUVycm9yJywNCi0gICAgICAgICAgICAgICAgSElFUkFSQ0hZX1JF
UVVFU1RfRVJSOiAnSGllcmFyY2h5UmVxdWVzdEVycm9yJywNCi0gICAgICAgICAgICAgICAgV1JP
TkdfRE9DVU1FTlRfRVJSOiAnV3JvbmdEb2N1bWVudEVycm9yJywNCi0gICAgICAgICAgICAgICAg
SU5WQUxJRF9DSEFSQUNURVJfRVJSOiAnSW52YWxpZENoYXJhY3RlckVycm9yJywNCi0gICAgICAg
ICAgICAgICAgTk9fTU9ESUZJQ0FUSU9OX0FMTE9XRURfRVJSOiAnTm9Nb2RpZmljYXRpb25BbGxv
d2VkRXJyb3InLA0KLSAgICAgICAgICAgICAgICBOT1RfRk9VTkRfRVJSOiAnTm90Rm91bmRFcnJv
cicsDQotICAgICAgICAgICAgICAgIE5PVF9TVVBQT1JURURfRVJSOiAnTm90U3VwcG9ydGVkRXJy
b3InLA0KLSAgICAgICAgICAgICAgICBJTlZBTElEX1NUQVRFX0VSUjogJ0ludmFsaWRTdGF0ZUVy
cm9yJywNCi0gICAgICAgICAgICAgICAgU1lOVEFYX0VSUjogJ1N5bnRheEVycm9yJywNCi0gICAg
ICAgICAgICAgICAgSU5WQUxJRF9NT0RJRklDQVRJT05fRVJSOiAnSW52YWxpZE1vZGlmaWNhdGlv
bkVycm9yJywNCi0gICAgICAgICAgICAgICAgTkFNRVNQQUNFX0VSUjogJ05hbWVzcGFjZUVycm9y
JywNCi0gICAgICAgICAgICAgICAgSU5WQUxJRF9BQ0NFU1NfRVJSOiAnSW52YWxpZEFjY2Vzc0Vy
cm9yJywNCi0gICAgICAgICAgICAgICAgVFlQRV9NSVNNQVRDSF9FUlI6ICdUeXBlTWlzbWF0Y2hF
cnJvcicsDQotICAgICAgICAgICAgICAgIFNFQ1VSSVRZX0VSUjogJ1NlY3VyaXR5RXJyb3InLA0K
LSAgICAgICAgICAgICAgICBORVRXT1JLX0VSUjogJ05ldHdvcmtFcnJvcicsDQotICAgICAgICAg
ICAgICAgIEFCT1JUX0VSUjogJ0Fib3J0RXJyb3InLA0KLSAgICAgICAgICAgICAgICBVUkxfTUlT
TUFUQ0hfRVJSOiAnVVJMTWlzbWF0Y2hFcnJvcicsDQotICAgICAgICAgICAgICAgIFFVT1RBX0VY
Q0VFREVEX0VSUjogJ1F1b3RhRXhjZWVkZWRFcnJvcicsDQotICAgICAgICAgICAgICAgIFRJTUVP
VVRfRVJSOiAnVGltZW91dEVycm9yJywNCi0gICAgICAgICAgICAgICAgSU5WQUxJRF9OT0RFX1RZ
UEVfRVJSOiAnSW52YWxpZE5vZGVUeXBlRXJyb3InLA0KLSAgICAgICAgICAgICAgICBEQVRBX0NM
T05FX0VSUjogJ0RhdGFDbG9uZUVycm9yJw0KLSAgICAgICAgICAgIH07DQotDQotICAgICAgICAg
ICAgdmFyIG5hbWUgPSBjb2RlIGluIGNvZGVfbmFtZV9tYXAgPyBjb2RlX25hbWVfbWFwW2NvZGVd
IDogY29kZTsNCi0NCi0gICAgICAgICAgICB2YXIgbmFtZV9jb2RlX21hcCA9IHsNCi0gICAgICAg
ICAgICAgICAgSW5kZXhTaXplRXJyb3I6IDEsDQotICAgICAgICAgICAgICAgIEhpZXJhcmNoeVJl
cXVlc3RFcnJvcjogMywNCi0gICAgICAgICAgICAgICAgV3JvbmdEb2N1bWVudEVycm9yOiA0LA0K
LSAgICAgICAgICAgICAgICBJbnZhbGlkQ2hhcmFjdGVyRXJyb3I6IDUsDQotICAgICAgICAgICAg
ICAgIE5vTW9kaWZpY2F0aW9uQWxsb3dlZEVycm9yOiA3LA0KLSAgICAgICAgICAgICAgICBOb3RG
b3VuZEVycm9yOiA4LA0KLSAgICAgICAgICAgICAgICBOb3RTdXBwb3J0ZWRFcnJvcjogOSwNCi0g
ICAgICAgICAgICAgICAgSW52YWxpZFN0YXRlRXJyb3I6IDExLA0KLSAgICAgICAgICAgICAgICBT
eW50YXhFcnJvcjogMTIsDQotICAgICAgICAgICAgICAgIEludmFsaWRNb2RpZmljYXRpb25FcnJv
cjogMTMsDQotICAgICAgICAgICAgICAgIE5hbWVzcGFjZUVycm9yOiAxNCwNCi0gICAgICAgICAg
ICAgICAgSW52YWxpZEFjY2Vzc0Vycm9yOiAxNSwNCi0gICAgICAgICAgICAgICAgVHlwZU1pc21h
dGNoRXJyb3I6IDE3LA0KLSAgICAgICAgICAgICAgICBTZWN1cml0eUVycm9yOiAxOCwNCi0gICAg
ICAgICAgICAgICAgTmV0d29ya0Vycm9yOiAxOSwNCi0gICAgICAgICAgICAgICAgQWJvcnRFcnJv
cjogMjAsDQotICAgICAgICAgICAgICAgIFVSTE1pc21hdGNoRXJyb3I6IDIxLA0KLSAgICAgICAg
ICAgICAgICBRdW90YUV4Y2VlZGVkRXJyb3I6IDIyLA0KLSAgICAgICAgICAgICAgICBUaW1lb3V0
RXJyb3I6IDIzLA0KLSAgICAgICAgICAgICAgICBJbnZhbGlkTm9kZVR5cGVFcnJvcjogMjQsDQot
ICAgICAgICAgICAgICAgIERhdGFDbG9uZUVycm9yOiAyNSwNCi0NCi0gICAgICAgICAgICAgICAg
VW5rbm93bkVycm9yOiAwLA0KLSAgICAgICAgICAgICAgICBDb25zdHJhaW50RXJyb3I6IDAsDQot
ICAgICAgICAgICAgICAgIERhdGFFcnJvcjogMCwNCi0gICAgICAgICAgICAgICAgVHJhbnNhY3Rp
b25JbmFjdGl2ZUVycm9yOiAwLA0KLSAgICAgICAgICAgICAgICBSZWFkT25seUVycm9yOiAwLA0K
LSAgICAgICAgICAgICAgICBWZXJzaW9uRXJyb3I6IDANCi0gICAgICAgICAgICB9Ow0KLQ0KLSAg
ICAgICAgICAgIGlmICghKG5hbWUgaW4gbmFtZV9jb2RlX21hcCkpDQotICAgICAgICAgICAgew0K
LSAgICAgICAgICAgICAgICB0aHJvdyBuZXcgQXNzZXJ0aW9uRXJyb3IoJ1Rlc3QgYnVnOiB1bnJl
Y29nbml6ZWQgRE9NRXhjZXB0aW9uIGNvZGUgIicgKyBjb2RlICsgJyIgcGFzc2VkIHRvIGFzc2Vy
dF90aHJvd3MoKScpOw0KLSAgICAgICAgICAgIH0NCi0NCi0gICAgICAgICAgICB2YXIgcmVxdWly
ZWRfcHJvcHMgPSB7IGNvZGU6IG5hbWVfY29kZV9tYXBbbmFtZV0gfTsNCi0NCi0gICAgICAgICAg
ICBpZiAocmVxdWlyZWRfcHJvcHMuY29kZSA9PT0gMA0KLSAgICAgICAgICAgIHx8ICgibmFtZSIg
aW4gZSAmJiBlLm5hbWUgIT09IGUubmFtZS50b1VwcGVyQ2FzZSgpICYmIGUubmFtZSAhPT0gIkRP
TUV4Y2VwdGlvbiIpKQ0KLSAgICAgICAgICAgIHsNCi0gICAgICAgICAgICAgICAgLy8gTmV3IHN0
eWxlIGV4Y2VwdGlvbjogYWxzbyB0ZXN0IHRoZSBuYW1lIHByb3BlcnR5Lg0KLSAgICAgICAgICAg
ICAgICByZXF1aXJlZF9wcm9wcy5uYW1lID0gbmFtZTsNCi0gICAgICAgICAgICB9DQotDQotICAg
ICAgICAgICAgLy9XZSdkIGxpa2UgdG8gdGVzdCB0aGF0IGUgaW5zdGFuY2VvZiB0aGUgYXBwcm9w
cmlhdGUgaW50ZXJmYWNlLA0KLSAgICAgICAgICAgIC8vYnV0IHdlIGNhbid0LCBiZWNhdXNlIHdl
IGRvbid0IGtub3cgd2hhdCB3aW5kb3cgaXQgd2FzIGNyZWF0ZWQNCi0gICAgICAgICAgICAvL2lu
LiAgSXQgbWlnaHQgYmUgYW4gaW5zdGFuY2VvZiB0aGUgYXBwcm9wcmlhdGUgaW50ZXJmYWNlIG9u
IHNvbWUNCi0gICAgICAgICAgICAvL3Vua25vd24gb3RoZXIgd2luZG93LiAgVE9ETzogV29yayBh
cm91bmQgdGhpcyBzb21laG93Pw0KLQ0KLSAgICAgICAgICAgIGFzc2VydCh0eXBlb2YgZSA9PSAi
b2JqZWN0IiwNCi0gICAgICAgICAgICAgICAgICAgImFzc2VydF90aHJvd3MiLCBkZXNjcmlwdGlv
biwNCi0gICAgICAgICAgICAgICAgICAgIiR7ZnVuY30gdGhyZXcgJHtlfSB3aXRoIHR5cGUgJHt0
eXBlfSwgbm90IGFuIG9iamVjdCIsDQotICAgICAgICAgICAgICAgICAgIHtmdW5jOmZ1bmMsIGU6
ZSwgdHlwZTp0eXBlb2YgZX0pOw0KLQ0KLSAgICAgICAgICAgIGZvciAodmFyIHByb3AgaW4gcmVx
dWlyZWRfcHJvcHMpDQotICAgICAgICAgICAgew0KLSAgICAgICAgICAgICAgICBhc3NlcnQodHlw
ZW9mIGUgPT0gIm9iamVjdCIgJiYgcHJvcCBpbiBlICYmIGVbcHJvcF0gPT0gcmVxdWlyZWRfcHJv
cHNbcHJvcF0sDQotICAgICAgICAgICAgICAgICAgICAgICAiYXNzZXJ0X3Rocm93cyIsIGRlc2Ny
aXB0aW9uLA0KLSAgICAgICAgICAgICAgICAgICAgICAgIiR7ZnVuY30gdGhyZXcgJHtlfSB0aGF0
IGlzIG5vdCBhIERPTUV4Y2VwdGlvbiAiICsgY29kZSArICI6IHByb3BlcnR5ICR7cHJvcH0gaXMg
ZXF1YWwgdG8gJHthY3R1YWx9LCBleHBlY3RlZCAke2V4cGVjdGVkfSIsDQotICAgICAgICAgICAg
ICAgICAgICAgICB7ZnVuYzpmdW5jLCBlOmUsIHByb3A6cHJvcCwgYWN0dWFsOmVbcHJvcF0sIGV4
cGVjdGVkOnJlcXVpcmVkX3Byb3BzW3Byb3BdfSk7DQotICAgICAgICAgICAgfQ0KLSAgICAgICAg
fQ0KLSAgICB9DQotICAgIGV4cG9zZShhc3NlcnRfdGhyb3dzLCAiYXNzZXJ0X3Rocm93cyIpOw0K
LQ0KLSAgICBmdW5jdGlvbiBhc3NlcnRfdW5yZWFjaGVkKGRlc2NyaXB0aW9uKSB7DQotICAgICAg
ICAgYXNzZXJ0KGZhbHNlLCAiYXNzZXJ0X3VucmVhY2hlZCIsIGRlc2NyaXB0aW9uLA0KLSAgICAg
ICAgICAgICAgICAiUmVhY2hlZCB1bnJlYWNoYWJsZSBjb2RlIik7DQotICAgIH0NCi0gICAgZXhw
b3NlKGFzc2VydF91bnJlYWNoZWQsICJhc3NlcnRfdW5yZWFjaGVkIik7DQotDQotICAgIGZ1bmN0
aW9uIGFzc2VydF9hbnkoYXNzZXJ0X2Z1bmMsIGFjdHVhbCwgZXhwZWN0ZWRfYXJyYXkpIA0KLSAg
ICB7DQotICAgICAgICB2YXIgYXJncyA9IFtdLnNsaWNlLmNhbGwoYXJndW1lbnRzLCAzKQ0KLSAg
ICAgICAgdmFyIGVycm9ycyA9IFtdDQotICAgICAgICB2YXIgcGFzc2VkID0gZmFsc2U7DQotICAg
ICAgICBmb3JFYWNoKGV4cGVjdGVkX2FycmF5LCANCi0gICAgICAgICAgICAgICAgZnVuY3Rpb24o
ZXhwZWN0ZWQpDQotICAgICAgICAgICAgICAgIHsNCi0gICAgICAgICAgICAgICAgICAgIHRyeSB7
DQotICAgICAgICAgICAgICAgICAgICAgICAgYXNzZXJ0X2Z1bmMuYXBwbHkodGhpcywgW2FjdHVh
bCwgZXhwZWN0ZWRdLmNvbmNhdChhcmdzKSkNCi0gICAgICAgICAgICAgICAgICAgICAgICBwYXNz
ZWQgPSB0cnVlOw0KLSAgICAgICAgICAgICAgICAgICAgfSBjYXRjaChlKSB7DQotICAgICAgICAg
ICAgICAgICAgICAgICAgZXJyb3JzLnB1c2goZS5tZXNzYWdlKTsNCi0gICAgICAgICAgICAgICAg
ICAgIH0NCi0gICAgICAgICAgICAgICAgfSk7DQotICAgICAgICBpZiAoIXBhc3NlZCkgew0KLSAg
ICAgICAgICAgIHRocm93IG5ldyBBc3NlcnRpb25FcnJvcihlcnJvcnMuam9pbigiXG5cbiIpKTsN
Ci0gICAgICAgIH0NCi0gICAgfQ0KLSAgICBleHBvc2UoYXNzZXJ0X2FueSwgImFzc2VydF9hbnki
KTsNCi0NCi0gICAgZnVuY3Rpb24gVGVzdChuYW1lLCBwcm9wZXJ0aWVzKQ0KLSAgICB7DQotICAg
ICAgICB0aGlzLm5hbWUgPSBuYW1lOw0KLSAgICAgICAgdGhpcy5zdGF0dXMgPSB0aGlzLk5PVFJV
TjsNCi0gICAgICAgIHRoaXMudGltZW91dF9pZCA9IG51bGw7DQotICAgICAgICB0aGlzLmlzX2Rv
bmUgPSBmYWxzZTsNCi0NCi0gICAgICAgIHRoaXMucHJvcGVydGllcyA9IHByb3BlcnRpZXM7DQot
ICAgICAgICB0aGlzLnRpbWVvdXRfbGVuZ3RoID0gcHJvcGVydGllcy50aW1lb3V0ID8gcHJvcGVy
dGllcy50aW1lb3V0IDogc2V0dGluZ3MudGVzdF90aW1lb3V0Ow0KLQ0KLSAgICAgICAgdGhpcy5t
ZXNzYWdlID0gbnVsbDsNCi0NCi0gICAgICAgIHZhciB0aGlzX29iaiA9IHRoaXM7DQotICAgICAg
ICB0aGlzLnN0ZXBzID0gW107DQotDQotICAgICAgICB0ZXN0cy5wdXNoKHRoaXMpOw0KLSAgICB9
DQotDQotICAgIFRlc3Quc3RhdHVzZXMgPSB7DQotICAgICAgICBQQVNTOjAsDQotICAgICAgICBG
QUlMOjEsDQotICAgICAgICBUSU1FT1VUOjIsDQotICAgICAgICBOT1RSVU46Mw0KLSAgICB9Ow0K
LQ0KLSAgICBUZXN0LnByb3RvdHlwZSA9IG1lcmdlKHt9LCBUZXN0LnN0YXR1c2VzKTsNCi0NCi0g
ICAgVGVzdC5wcm90b3R5cGUuc3RydWN0dXJlZF9jbG9uZSA9IGZ1bmN0aW9uKCkNCi0gICAgew0K
LSAgICAgICAgaWYoIXRoaXMuX3N0cnVjdHVyZWRfY2xvbmUpDQotICAgICAgICB7DQotICAgICAg
ICAgICAgdmFyIG1zZyA9IHRoaXMubWVzc2FnZTsNCi0gICAgICAgICAgICBtc2cgPSBtc2cgPyBT
dHJpbmcobXNnKSA6IG1zZzsNCi0gICAgICAgICAgICB0aGlzLl9zdHJ1Y3R1cmVkX2Nsb25lID0g
bWVyZ2Uoew0KLSAgICAgICAgICAgICAgICBuYW1lOlN0cmluZyh0aGlzLm5hbWUpLA0KLSAgICAg
ICAgICAgICAgICBzdGF0dXM6dGhpcy5zdGF0dXMsDQotICAgICAgICAgICAgICAgIG1lc3NhZ2U6
bXNnDQotICAgICAgICAgICAgfSwgVGVzdC5zdGF0dXNlcyk7DQotICAgICAgICB9DQotICAgICAg
ICByZXR1cm4gdGhpcy5fc3RydWN0dXJlZF9jbG9uZTsNCi0gICAgfTsNCi0NCi0gICAgVGVzdC5w
cm90b3R5cGUuc3RlcCA9IGZ1bmN0aW9uKGZ1bmMsIHRoaXNfb2JqKQ0KLSAgICB7DQotICAgICAg
ICAvL0luIGNhc2UgdGhlIHRlc3QgaGFzIGFscmVhZHkgZmFpbGVkDQotICAgICAgICBpZiAodGhp
cy5zdGF0dXMgIT09IHRoaXMuTk9UUlVOKQ0KLSAgICAgICAgew0KLSAgICAgICAgICByZXR1cm47
DQotICAgICAgICB9DQotDQotICAgICAgICB0ZXN0cy5zdGFydGVkID0gdHJ1ZTsNCi0NCi0gICAg
ICAgIGlmICh0aGlzLnRpbWVvdXRfaWQgPT09IG51bGwpIHsNCi0gICAgICAgICAgICB0aGlzLnNl
dF90aW1lb3V0KCk7DQotICAgICAgICB9DQotDQotICAgICAgICB0aGlzLnN0ZXBzLnB1c2goZnVu
Yyk7DQotDQotICAgICAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCA9PT0gMSkNCi0gICAgICAgIHsN
Ci0gICAgICAgICAgICB0aGlzX29iaiA9IHRoaXM7DQotICAgICAgICB9DQotDQotICAgICAgICB0
cnkNCi0gICAgICAgIHsNCi0gICAgICAgICAgICBmdW5jLmFwcGx5KHRoaXNfb2JqLCBBcnJheS5w
cm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMsIDIpKTsNCi0gICAgICAgIH0NCi0gICAgICAg
IGNhdGNoKGUpDQotICAgICAgICB7DQotICAgICAgICAgICAgLy9UaGlzIGNhbiBoYXBwZW4gaWYg
c29tZXRoaW5nIGNhbGxlZCBzeW5jaHJvbm91c2x5IGludm9rZWQgYW5vdGhlcg0KLSAgICAgICAg
ICAgIC8vc3RlcA0KLSAgICAgICAgICAgIGlmICh0aGlzLnN0YXR1cyAhPT0gdGhpcy5OT1RSVU4p
DQotICAgICAgICAgICAgew0KLSAgICAgICAgICAgICAgICByZXR1cm47DQotICAgICAgICAgICAg
fQ0KLSAgICAgICAgICAgIHRoaXMuc3RhdHVzID0gdGhpcy5GQUlMOw0KLSAgICAgICAgICAgIHRo
aXMubWVzc2FnZSA9ICh0eXBlb2YgZSA9PT0gIm9iamVjdCIgJiYgZSAhPT0gbnVsbCkgPyBlLm1l
c3NhZ2UgOiBlOw0KLSAgICAgICAgICAgIGlmICh0eXBlb2YgZS5zdGFjayAhPSAidW5kZWZpbmVk
IiAmJiB0eXBlb2YgZS5tZXNzYWdlID09ICJzdHJpbmciKSB7DQotICAgICAgICAgICAgICAgIC8v
VHJ5IHRvIG1ha2UgaXQgbW9yZSBpbmZvcm1hdGl2ZSBmb3Igc29tZSBleGNlcHRpb25zLCBhdCBs
ZWFzdA0KLSAgICAgICAgICAgICAgICAvL2luIEdlY2tvIGFuZCBXZWJLaXQuICBUaGlzIHJlc3Vs
dHMgaW4gYSBzdGFjayBkdW1wIGluc3RlYWQgb2YNCi0gICAgICAgICAgICAgICAgLy9qdXN0IGVy
cm9ycyBsaWtlICJDYW5ub3QgcmVhZCBwcm9wZXJ0eSAncGFyZW50Tm9kZScgb2YgbnVsbCINCi0g
ICAgICAgICAgICAgICAgLy9vciAicm9vdCBpcyBudWxsIi4gIE1ha2VzIGl0IGEgbG90IGxvbmdl
ciwgb2YgY291cnNlLg0KLSAgICAgICAgICAgICAgICB0aGlzLm1lc3NhZ2UgKz0gIihzdGFjazog
IiArIGUuc3RhY2sgKyAiKSI7DQotICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgIHRoaXMuZG9u
ZSgpOw0KLSAgICAgICAgICAgIGlmIChkZWJ1ZyAmJiBlLmNvbnN0cnVjdG9yICE9PSBBc3NlcnRp
b25FcnJvcikgew0KLSAgICAgICAgICAgICAgICB0aHJvdyBlOw0KLSAgICAgICAgICAgIH0NCi0g
ICAgICAgIH0NCi0gICAgfTsNCi0NCi0gICAgVGVzdC5wcm90b3R5cGUuc3RlcF9mdW5jID0gZnVu
Y3Rpb24oZnVuYywgdGhpc19vYmopDQotICAgIHsNCi0gICAgICAgIHZhciB0ZXN0X3RoaXMgPSB0
aGlzOw0KLQ0KLSAgICAgICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT09IDEpDQotICAgICAgICB7
DQotICAgICAgICAgICAgdGhpc19vYmogPSB0ZXN0X3RoaXM7DQotICAgICAgICB9DQotDQotICAg
ICAgICByZXR1cm4gZnVuY3Rpb24oKQ0KLSAgICAgICAgew0KLSAgICAgICAgICAgIHRlc3RfdGhp
cy5zdGVwLmFwcGx5KHRlc3RfdGhpcywgW2Z1bmMsIHRoaXNfb2JqXS5jb25jYXQoDQotICAgICAg
ICAgICAgICAgIEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cykpKTsNCi0gICAg
ICAgIH07DQotICAgIH07DQotDQotICAgIFRlc3QucHJvdG90eXBlLnN0ZXBfZnVuY19kb25lID0g
ZnVuY3Rpb24oZnVuYywgdGhpc19vYmopDQotICAgIHsNCi0gICAgICAgIHZhciB0ZXN0X3RoaXMg
PSB0aGlzOw0KLQ0KLSAgICAgICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT09IDEpDQotICAgICAg
ICB7DQotICAgICAgICAgICAgdGhpc19vYmogPSB0ZXN0X3RoaXM7DQotICAgICAgICB9DQotDQot
ICAgICAgICByZXR1cm4gZnVuY3Rpb24oKQ0KLSAgICAgICAgew0KLSAgICAgICAgICAgIHRlc3Rf
dGhpcy5zdGVwLmFwcGx5KHRlc3RfdGhpcywgW2Z1bmMsIHRoaXNfb2JqXS5jb25jYXQoDQotICAg
ICAgICAgICAgICAgIEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cykpKTsNCi0g
ICAgICAgICAgICB0ZXN0X3RoaXMuZG9uZSgpOw0KLSAgICAgICAgfTsNCi0gICAgfTsNCi0NCi0g
ICAgVGVzdC5wcm90b3R5cGUuc2V0X3RpbWVvdXQgPSBmdW5jdGlvbigpDQotICAgIHsNCi0gICAg
ICAgIHZhciB0aGlzX29iaiA9IHRoaXM7DQotICAgICAgICB0aGlzLnRpbWVvdXRfaWQgPSBzZXRU
aW1lb3V0KGZ1bmN0aW9uKCkNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ew0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpc19vYmoudGlt
ZW91dCgpOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LCB0aGlzLnRp
bWVvdXRfbGVuZ3RoKTsNCi0gICAgfTsNCi0NCi0gICAgVGVzdC5wcm90b3R5cGUudGltZW91dCA9
IGZ1bmN0aW9uKCkNCi0gICAgew0KLSAgICAgICAgdGhpcy5zdGF0dXMgPSB0aGlzLlRJTUVPVVQ7
DQotICAgICAgICB0aGlzLnRpbWVvdXRfaWQgPSBudWxsOw0KLSAgICAgICAgdGhpcy5tZXNzYWdl
ID0gIlRlc3QgdGltZWQgb3V0IjsNCi0gICAgICAgIHRoaXMuZG9uZSgpOw0KLSAgICB9Ow0KLQ0K
LSAgICBUZXN0LnByb3RvdHlwZS5kb25lID0gZnVuY3Rpb24oKQ0KLSAgICB7DQotICAgICAgICBp
ZiAodGhpcy5pc19kb25lKSB7DQotICAgICAgICAgICAgcmV0dXJuOw0KLSAgICAgICAgfQ0KLSAg
ICAgICAgY2xlYXJUaW1lb3V0KHRoaXMudGltZW91dF9pZCk7DQotICAgICAgICBpZiAodGhpcy5z
dGF0dXMgPT09IHRoaXMuTk9UUlVOKQ0KLSAgICAgICAgew0KLSAgICAgICAgICAgIHRoaXMuc3Rh
dHVzID0gdGhpcy5QQVNTOw0KLSAgICAgICAgfQ0KLSAgICAgICAgdGhpcy5pc19kb25lID0gdHJ1
ZTsNCi0gICAgICAgIHRlc3RzLnJlc3VsdCh0aGlzKTsNCi0gICAgfTsNCi0NCi0NCi0gICAgLyoN
Ci0gICAgICogSGFybmVzcw0KLSAgICAgKi8NCi0NCi0gICAgZnVuY3Rpb24gVGVzdHNTdGF0dXMo
KQ0KLSAgICB7DQotICAgICAgICB0aGlzLnN0YXR1cyA9IG51bGw7DQotICAgICAgICB0aGlzLm1l
c3NhZ2UgPSBudWxsOw0KLSAgICB9DQotDQotICAgIFRlc3RzU3RhdHVzLnN0YXR1c2VzID0gew0K
LSAgICAgICAgT0s6MCwNCi0gICAgICAgIEVSUk9SOjEsDQotICAgICAgICBUSU1FT1VUOjINCi0g
ICAgfTsNCi0NCi0gICAgVGVzdHNTdGF0dXMucHJvdG90eXBlID0gbWVyZ2Uoe30sIFRlc3RzU3Rh
dHVzLnN0YXR1c2VzKTsNCi0NCi0gICAgVGVzdHNTdGF0dXMucHJvdG90eXBlLnN0cnVjdHVyZWRf
Y2xvbmUgPSBmdW5jdGlvbigpDQotICAgIHsNCi0gICAgICAgIGlmKCF0aGlzLl9zdHJ1Y3R1cmVk
X2Nsb25lKQ0KLSAgICAgICAgew0KLSAgICAgICAgICAgIHZhciBtc2cgPSB0aGlzLm1lc3NhZ2U7
DQotICAgICAgICAgICAgbXNnID0gbXNnID8gU3RyaW5nKG1zZykgOiBtc2c7DQotICAgICAgICAg
ICAgdGhpcy5fc3RydWN0dXJlZF9jbG9uZSA9IG1lcmdlKHsNCi0gICAgICAgICAgICAgICAgc3Rh
dHVzOnRoaXMuc3RhdHVzLA0KLSAgICAgICAgICAgICAgICBtZXNzYWdlOm1zZw0KLSAgICAgICAg
ICAgIH0sIFRlc3RzU3RhdHVzLnN0YXR1c2VzKTsNCi0gICAgICAgIH0NCi0gICAgICAgIHJldHVy
biB0aGlzLl9zdHJ1Y3R1cmVkX2Nsb25lOw0KLSAgICB9Ow0KLQ0KLSAgICBmdW5jdGlvbiBUZXN0
cygpDQotICAgIHsNCi0gICAgICAgIHRoaXMudGVzdHMgPSBbXTsNCi0gICAgICAgIHRoaXMubnVt
X3BlbmRpbmcgPSAwOw0KLQ0KLSAgICAgICAgdGhpcy5waGFzZXMgPSB7DQotICAgICAgICAgICAg
SU5JVElBTDowLA0KLSAgICAgICAgICAgIFNFVFVQOjEsDQotICAgICAgICAgICAgSEFWRV9URVNU
UzoyLA0KLSAgICAgICAgICAgIEhBVkVfUkVTVUxUUzozLA0KLSAgICAgICAgICAgIENPTVBMRVRF
OjQNCi0gICAgICAgIH07DQotICAgICAgICB0aGlzLnBoYXNlID0gdGhpcy5waGFzZXMuSU5JVElB
TDsNCi0NCi0gICAgICAgIHRoaXMucHJvcGVydGllcyA9IHt9Ow0KLQ0KLSAgICAgICAgLy9BbGwg
dGVzdHMgY2FuJ3QgYmUgZG9uZSB1bnRpbCB0aGUgbG9hZCBldmVudCBmaXJlcw0KLSAgICAgICAg
dGhpcy5hbGxfbG9hZGVkID0gZmFsc2U7DQotICAgICAgICB0aGlzLndhaXRfZm9yX2ZpbmlzaCA9
IGZhbHNlOw0KLSAgICAgICAgdGhpcy5wcm9jZXNzaW5nX2NhbGxiYWNrcyA9IGZhbHNlOw0KLQ0K
LSAgICAgICAgdGhpcy50aW1lb3V0X2xlbmd0aCA9IHNldHRpbmdzLnRpbWVvdXQ7DQotICAgICAg
ICB0aGlzLnRpbWVvdXRfaWQgPSBudWxsOw0KLQ0KLSAgICAgICAgdGhpcy5zdGFydF9jYWxsYmFj
a3MgPSBbXTsNCi0gICAgICAgIHRoaXMudGVzdF9kb25lX2NhbGxiYWNrcyA9IFtdOw0KLSAgICAg
ICAgdGhpcy5hbGxfZG9uZV9jYWxsYmFja3MgPSBbXTsNCi0NCi0gICAgICAgIHRoaXMuc3RhdHVz
ID0gbmV3IFRlc3RzU3RhdHVzKCk7DQotDQotICAgICAgICB2YXIgdGhpc19vYmogPSB0aGlzOw0K
LQ0KLSAgICAgICAgb25fZXZlbnQod2luZG93LCAibG9hZCIsDQotICAgICAgICAgICAgICAgICBm
dW5jdGlvbigpDQotICAgICAgICAgICAgICAgICB7DQotICAgICAgICAgICAgICAgICAgICAgdGhp
c19vYmouYWxsX2xvYWRlZCA9IHRydWU7DQotICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXNf
b2JqLmFsbF9kb25lKCkpDQotICAgICAgICAgICAgICAgICAgICAgew0KLSAgICAgICAgICAgICAg
ICAgICAgICAgICB0aGlzX29iai5jb21wbGV0ZSgpOw0KLSAgICAgICAgICAgICAgICAgICAgIH0N
Ci0gICAgICAgICAgICAgICAgIH0pOw0KLQ0KLSAgICAgICAgdGhpcy5zZXRfdGltZW91dCgpOw0K
LSAgICB9DQotDQotICAgIFRlc3RzLnByb3RvdHlwZS5zZXR1cCA9IGZ1bmN0aW9uKGZ1bmMsIHBy
b3BlcnRpZXMpDQotICAgIHsNCi0gICAgICAgIGlmICh0aGlzLnBoYXNlID49IHRoaXMucGhhc2Vz
LkhBVkVfUkVTVUxUUykNCi0gICAgICAgIHsNCi0gICAgICAgICAgICByZXR1cm47DQotICAgICAg
ICB9DQotICAgICAgICBpZiAodGhpcy5waGFzZSA8IHRoaXMucGhhc2VzLlNFVFVQKQ0KLSAgICAg
ICAgew0KLSAgICAgICAgICAgIHRoaXMucGhhc2UgPSB0aGlzLnBoYXNlcy5TRVRVUDsNCi0gICAg
ICAgIH0NCi0NCi0gICAgICAgIGZvciAodmFyIHAgaW4gcHJvcGVydGllcykNCi0gICAgICAgIHsN
Ci0gICAgICAgICAgICBpZiAocHJvcGVydGllcy5oYXNPd25Qcm9wZXJ0eShwKSkNCi0gICAgICAg
ICAgICB7DQotICAgICAgICAgICAgICAgIHRoaXMucHJvcGVydGllc1twXSA9IHByb3BlcnRpZXNb
cF07DQotICAgICAgICAgICAgfQ0KLSAgICAgICAgfQ0KLQ0KLSAgICAgICAgaWYgKHByb3BlcnRp
ZXMudGltZW91dCkNCi0gICAgICAgIHsNCi0gICAgICAgICAgICB0aGlzLnRpbWVvdXRfbGVuZ3Ro
ID0gcHJvcGVydGllcy50aW1lb3V0Ow0KLSAgICAgICAgfQ0KLSAgICAgICAgaWYgKHByb3BlcnRp
ZXMuZXhwbGljaXRfZG9uZSkNCi0gICAgICAgIHsNCi0gICAgICAgICAgICB0aGlzLndhaXRfZm9y
X2ZpbmlzaCA9IHRydWU7DQotICAgICAgICB9DQotICAgICAgICBpZiAocHJvcGVydGllcy5leHBs
aWNpdF90aW1lb3V0KSB7DQotICAgICAgICAgICAgdGhpcy50aW1lb3V0X2xlbmd0aCA9IG51bGw7
DQotICAgICAgICB9DQotDQotICAgICAgICBpZiAoZnVuYykNCi0gICAgICAgIHsNCi0gICAgICAg
ICAgICB0cnkNCi0gICAgICAgICAgICB7DQotICAgICAgICAgICAgICAgIGZ1bmMoKTsNCi0gICAg
ICAgICAgICB9IGNhdGNoKGUpDQotICAgICAgICAgICAgew0KLSAgICAgICAgICAgICAgICB0aGlz
LnN0YXR1cy5zdGF0dXMgPSB0aGlzLnN0YXR1cy5FUlJPUjsNCi0gICAgICAgICAgICAgICAgdGhp
cy5zdGF0dXMubWVzc2FnZSA9IGU7DQotICAgICAgICAgICAgfTsNCi0gICAgICAgIH0NCi0gICAg
ICAgIHRoaXMuc2V0X3RpbWVvdXQoKTsNCi0gICAgfTsNCi0NCi0gICAgVGVzdHMucHJvdG90eXBl
LnNldF90aW1lb3V0ID0gZnVuY3Rpb24oKQ0KLSAgICB7DQotICAgICAgICB2YXIgdGhpc19vYmog
PSB0aGlzOw0KLSAgICAgICAgY2xlYXJUaW1lb3V0KHRoaXMudGltZW91dF9pZCk7DQotICAgICAg
ICBpZiAodGhpcy50aW1lb3V0X2xlbmd0aCAhPT0gbnVsbCkNCi0gICAgICAgIHsNCi0gICAgICAg
ICAgICB0aGlzLnRpbWVvdXRfaWQgPSBzZXRUaW1lb3V0KGZ1bmN0aW9uKCkgew0KLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXNfb2JqLnRpbWVvdXQoKTsN
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sIHRoaXMudGltZW91
dF9sZW5ndGgpOw0KLSAgICAgICAgfQ0KLSAgICB9Ow0KLQ0KLSAgICBUZXN0cy5wcm90b3R5cGUu
dGltZW91dCA9IGZ1bmN0aW9uKCkgew0KLSAgICAgICAgdGhpcy5zdGF0dXMuc3RhdHVzID0gdGhp
cy5zdGF0dXMuVElNRU9VVDsNCi0gICAgICAgIHRoaXMuY29tcGxldGUoKTsNCi0gICAgfTsNCi0N
Ci0gICAgVGVzdHMucHJvdG90eXBlLmVuZF93YWl0ID0gZnVuY3Rpb24oKQ0KLSAgICB7DQotICAg
ICAgICB0aGlzLndhaXRfZm9yX2ZpbmlzaCA9IGZhbHNlOw0KLSAgICAgICAgaWYgKHRoaXMuYWxs
X2RvbmUoKSkgew0KLSAgICAgICAgICAgIHRoaXMuY29tcGxldGUoKTsNCi0gICAgICAgIH0NCi0g
ICAgfTsNCi0NCi0gICAgVGVzdHMucHJvdG90eXBlLnB1c2ggPSBmdW5jdGlvbih0ZXN0KQ0KLSAg
ICB7DQotICAgICAgICBpZiAodGhpcy5waGFzZSA8IHRoaXMucGhhc2VzLkhBVkVfVEVTVFMpIHsN
Ci0gICAgICAgICAgICB0aGlzLnN0YXJ0KCk7DQotICAgICAgICB9DQotICAgICAgICB0aGlzLm51
bV9wZW5kaW5nKys7DQotICAgICAgICB0aGlzLnRlc3RzLnB1c2godGVzdCk7DQotICAgIH07DQot
DQotICAgIFRlc3RzLnByb3RvdHlwZS5hbGxfZG9uZSA9IGZ1bmN0aW9uKCkgew0KLSAgICAgICAg
cmV0dXJuICh0aGlzLmFsbF9sb2FkZWQgJiYgdGhpcy5udW1fcGVuZGluZyA9PT0gMCAmJg0KLSAg
ICAgICAgICAgICAgICAhdGhpcy53YWl0X2Zvcl9maW5pc2ggJiYgIXRoaXMucHJvY2Vzc2luZ19j
YWxsYmFja3MpOw0KLSAgICB9Ow0KLQ0KLSAgICBUZXN0cy5wcm90b3R5cGUuc3RhcnQgPSBmdW5j
dGlvbigpIHsNCi0gICAgICAgIHRoaXMucGhhc2UgPSB0aGlzLnBoYXNlcy5IQVZFX1RFU1RTOw0K
LSAgICAgICAgdGhpcy5ub3RpZnlfc3RhcnQoKTsNCi0gICAgfTsNCi0NCi0gICAgVGVzdHMucHJv
dG90eXBlLm5vdGlmeV9zdGFydCA9IGZ1bmN0aW9uKCkgew0KLSAgICAgICAgdmFyIHRoaXNfb2Jq
ID0gdGhpczsNCi0gICAgICAgIGZvckVhY2ggKHRoaXMuc3RhcnRfY2FsbGJhY2tzLA0KLSAgICAg
ICAgICAgICAgICAgZnVuY3Rpb24oY2FsbGJhY2spDQotICAgICAgICAgICAgICAgICB7DQotICAg
ICAgICAgICAgICAgICAgICAgY2FsbGJhY2sodGhpc19vYmoucHJvcGVydGllcyk7DQotICAgICAg
ICAgICAgICAgICB9KTsNCi0gICAgICAgIGZvckVhY2hfd2luZG93cygNCi0gICAgICAgICAgICAg
ICAgZnVuY3Rpb24odywgaXNfc2FtZV9vcmlnaW4pDQotICAgICAgICAgICAgICAgIHsNCi0gICAg
ICAgICAgICAgICAgICAgIGlmKGlzX3NhbWVfb3JpZ2luICYmIHcuc3RhcnRfY2FsbGJhY2spDQot
ICAgICAgICAgICAgICAgICAgICB7DQotICAgICAgICAgICAgICAgICAgICAgICAgdHJ5DQotICAg
ICAgICAgICAgICAgICAgICAgICAgew0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB3LnN0
YXJ0X2NhbGxiYWNrKHRoaXNfb2JqLnByb3BlcnRpZXMpOw0KLSAgICAgICAgICAgICAgICAgICAg
ICAgIH0NCi0gICAgICAgICAgICAgICAgICAgICAgICBjYXRjaChlKQ0KLSAgICAgICAgICAgICAg
ICAgICAgICAgIHsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGRlYnVnKQ0KLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB0aHJvdyhlKTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgfQ0KLSAgICAgICAg
ICAgICAgICAgICAgICAgIH0NCi0gICAgICAgICAgICAgICAgICAgIH0NCi0gICAgICAgICAgICAg
ICAgICAgIGlmIChzdXBwb3J0c19wb3N0X21lc3NhZ2UodykpDQotICAgICAgICAgICAgICAgICAg
ICB7DQotICAgICAgICAgICAgICAgICAgICAgICAgdy5wb3N0TWVzc2FnZSh7DQotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHR5cGU6ICJzdGFydCIsDQotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHByb3BlcnRpZXM6IHRoaXNfb2JqLnByb3BlcnRpZXMNCi0gICAgICAgICAgICAgICAg
ICAgICAgICB9LCAiKiIpOw0KLSAgICAgICAgICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgICAg
ICB9KTsNCi0gICAgfTsNCi0NCi0gICAgVGVzdHMucHJvdG90eXBlLnJlc3VsdCA9IGZ1bmN0aW9u
KHRlc3QpDQotICAgIHsNCi0gICAgICAgIGlmICh0aGlzLnBoYXNlID4gdGhpcy5waGFzZXMuSEFW
RV9SRVNVTFRTKQ0KLSAgICAgICAgew0KLSAgICAgICAgICAgIHJldHVybjsNCi0gICAgICAgIH0N
Ci0gICAgICAgIHRoaXMucGhhc2UgPSB0aGlzLnBoYXNlcy5IQVZFX1JFU1VMVFM7DQotICAgICAg
ICB0aGlzLm51bV9wZW5kaW5nLS07DQotICAgICAgICB0aGlzLm5vdGlmeV9yZXN1bHQodGVzdCk7
DQotICAgIH07DQotDQotICAgIFRlc3RzLnByb3RvdHlwZS5ub3RpZnlfcmVzdWx0ID0gZnVuY3Rp
b24odGVzdCkgew0KLSAgICAgICAgdmFyIHRoaXNfb2JqID0gdGhpczsNCi0gICAgICAgIHRoaXMu
cHJvY2Vzc2luZ19jYWxsYmFja3MgPSB0cnVlOw0KLSAgICAgICAgZm9yRWFjaCh0aGlzLnRlc3Rf
ZG9uZV9jYWxsYmFja3MsDQotICAgICAgICAgICAgICAgIGZ1bmN0aW9uKGNhbGxiYWNrKQ0KLSAg
ICAgICAgICAgICAgICB7DQotICAgICAgICAgICAgICAgICAgICBjYWxsYmFjayh0ZXN0LCB0aGlz
X29iaik7DQotICAgICAgICAgICAgICAgIH0pOw0KLQ0KLSAgICAgICAgZm9yRWFjaF93aW5kb3dz
KA0KLSAgICAgICAgICAgICAgICBmdW5jdGlvbih3LCBpc19zYW1lX29yaWdpbikNCi0gICAgICAg
ICAgICAgICAgew0KLSAgICAgICAgICAgICAgICAgICAgaWYoaXNfc2FtZV9vcmlnaW4gJiYgdy5y
ZXN1bHRfY2FsbGJhY2spDQotICAgICAgICAgICAgICAgICAgICB7DQotICAgICAgICAgICAgICAg
ICAgICAgICAgdHJ5DQotICAgICAgICAgICAgICAgICAgICAgICAgew0KLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB3LnJlc3VsdF9jYWxsYmFjayh0ZXN0KTsNCi0gICAgICAgICAgICAgICAg
ICAgICAgICB9DQotICAgICAgICAgICAgICAgICAgICAgICAgY2F0Y2goZSkNCi0gICAgICAgICAg
ICAgICAgICAgICAgICB7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKGRlYnVnKSB7
DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBlOw0KLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB9DQotICAgICAgICAgICAgICAgICAgICAgICAgfQ0KLSAgICAgICAg
ICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgICAgICAgICAgaWYgKHN1cHBvcnRzX3Bvc3RfbWVz
c2FnZSh3KSkNCi0gICAgICAgICAgICAgICAgICAgIHsNCi0gICAgICAgICAgICAgICAgICAgICAg
ICB3LnBvc3RNZXNzYWdlKHsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogInJl
c3VsdCIsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRlc3Q6IHRlc3Quc3RydWN0dXJl
ZF9jbG9uZSgpDQotICAgICAgICAgICAgICAgICAgICAgICAgfSwgIioiKTsNCi0gICAgICAgICAg
ICAgICAgICAgIH0NCi0gICAgICAgICAgICAgICAgfSk7DQotICAgICAgICB0aGlzLnByb2Nlc3Np
bmdfY2FsbGJhY2tzID0gZmFsc2U7DQotICAgICAgICBpZiAodGhpc19vYmouYWxsX2RvbmUoKSkN
Ci0gICAgICAgIHsNCi0gICAgICAgICAgICB0aGlzX29iai5jb21wbGV0ZSgpOw0KLSAgICAgICAg
fQ0KLSAgICB9Ow0KLQ0KLSAgICBUZXN0cy5wcm90b3R5cGUuY29tcGxldGUgPSBmdW5jdGlvbigp
IHsNCi0gICAgICAgIGlmICh0aGlzLnBoYXNlID09PSB0aGlzLnBoYXNlcy5DT01QTEVURSkgew0K
LSAgICAgICAgICAgIHJldHVybjsNCi0gICAgICAgIH0NCi0gICAgICAgIHRoaXMucGhhc2UgPSB0
aGlzLnBoYXNlcy5DT01QTEVURTsNCi0gICAgICAgIHZhciB0aGlzX29iaiA9IHRoaXM7DQotICAg
ICAgICB0aGlzLnRlc3RzLmZvckVhY2goDQotICAgICAgICAgICAgZnVuY3Rpb24oeCkNCi0gICAg
ICAgICAgICB7DQotICAgICAgICAgICAgICAgIGlmKHguc3RhdHVzID09PSB4Lk5PVFJVTikNCi0g
ICAgICAgICAgICAgICAgew0KLSAgICAgICAgICAgICAgICAgICAgdGhpc19vYmoubm90aWZ5X3Jl
c3VsdCh4KTsNCi0gICAgICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgIH0NCi0gICAgICAgICk7
DQotICAgICAgICB0aGlzLm5vdGlmeV9jb21wbGV0ZSgpOw0KLSAgICB9Ow0KLQ0KLSAgICBUZXN0
cy5wcm90b3R5cGUubm90aWZ5X2NvbXBsZXRlID0gZnVuY3Rpb24oKQ0KLSAgICB7DQotICAgICAg
ICBjbGVhclRpbWVvdXQodGhpcy50aW1lb3V0X2lkKTsNCi0gICAgICAgIHZhciB0aGlzX29iaiA9
IHRoaXM7DQotICAgICAgICB2YXIgdGVzdHMgPSBtYXAodGhpc19vYmoudGVzdHMsDQotICAgICAg
ICAgICAgICAgICAgICAgICAgZnVuY3Rpb24odGVzdCkNCi0gICAgICAgICAgICAgICAgICAgICAg
ICB7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0ZXN0LnN0cnVjdHVyZWRf
Y2xvbmUoKTsNCi0gICAgICAgICAgICAgICAgICAgICAgICB9KTsNCi0gICAgICAgIGlmICh0aGlz
LnN0YXR1cy5zdGF0dXMgPT09IG51bGwpDQotICAgICAgICB7DQotICAgICAgICAgICAgdGhpcy5z
dGF0dXMuc3RhdHVzID0gdGhpcy5zdGF0dXMuT0s7DQotICAgICAgICB9DQotDQotICAgICAgICBm
b3JFYWNoICh0aGlzLmFsbF9kb25lX2NhbGxiYWNrcywNCi0gICAgICAgICAgICAgICAgIGZ1bmN0
aW9uKGNhbGxiYWNrKQ0KLSAgICAgICAgICAgICAgICAgew0KLSAgICAgICAgICAgICAgICAgICAg
IGNhbGxiYWNrKHRoaXNfb2JqLnRlc3RzLCB0aGlzX29iai5zdGF0dXMpOw0KLSAgICAgICAgICAg
ICAgICAgfSk7DQotDQotICAgICAgICBmb3JFYWNoX3dpbmRvd3MoDQotICAgICAgICAgICAgICAg
IGZ1bmN0aW9uKHcsIGlzX3NhbWVfb3JpZ2luKQ0KLSAgICAgICAgICAgICAgICB7DQotICAgICAg
ICAgICAgICAgICAgICBpZihpc19zYW1lX29yaWdpbiAmJiB3LmNvbXBsZXRpb25fY2FsbGJhY2sp
DQotICAgICAgICAgICAgICAgICAgICB7DQotICAgICAgICAgICAgICAgICAgICAgICAgdHJ5DQot
ICAgICAgICAgICAgICAgICAgICAgICAgew0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB3
LmNvbXBsZXRpb25fY2FsbGJhY2sodGhpc19vYmoudGVzdHMsIHRoaXNfb2JqLnN0YXR1cyk7DQot
ICAgICAgICAgICAgICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgICAgICAgICAgICAgIGNhdGNo
KGUpDQotICAgICAgICAgICAgICAgICAgICAgICAgew0KLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBpZiAoZGVidWcpDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsNCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IGU7DQotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIH0NCi0gICAgICAgICAgICAgICAgICAgICAgICB9DQotICAgICAgICAgICAgICAgICAg
ICB9DQotICAgICAgICAgICAgICAgICAgICBpZiAoc3VwcG9ydHNfcG9zdF9tZXNzYWdlKHcpKQ0K
LSAgICAgICAgICAgICAgICAgICAgew0KLSAgICAgICAgICAgICAgICAgICAgICAgIHcucG9zdE1l
c3NhZ2Uoew0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiAiY29tcGxldGUiLA0K
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXN0czogdGVzdHMsDQotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHN0YXR1czogdGhpc19vYmouc3RhdHVzLnN0cnVjdHVyZWRfY2xvbmUo
KQ0KLSAgICAgICAgICAgICAgICAgICAgICAgIH0sICIqIik7DQotICAgICAgICAgICAgICAgICAg
ICB9DQotICAgICAgICAgICAgICAgIH0pOw0KLSAgICB9Ow0KLQ0KLSAgICB2YXIgdGVzdHMgPSBu
ZXcgVGVzdHMoKTsNCi0NCi0gICAgZnVuY3Rpb24gdGltZW91dCgpIHsNCi0gICAgICAgIGlmICh0
ZXN0cy50aW1lb3V0X2xlbmd0aCA9PT0gbnVsbCkNCi0gICAgICAgIHsNCi0gICAgICAgICAgICB0
ZXN0cy50aW1lb3V0KCk7DQotICAgICAgICB9DQotICAgIH0NCi0gICAgZXhwb3NlKHRpbWVvdXQs
ICd0aW1lb3V0Jyk7DQotDQotICAgIGZ1bmN0aW9uIGFkZF9zdGFydF9jYWxsYmFjayhjYWxsYmFj
aykgew0KLSAgICAgICAgdGVzdHMuc3RhcnRfY2FsbGJhY2tzLnB1c2goY2FsbGJhY2spOw0KLSAg
ICB9DQotDQotICAgIGZ1bmN0aW9uIGFkZF9yZXN1bHRfY2FsbGJhY2soY2FsbGJhY2spDQotICAg
IHsNCi0gICAgICAgIHRlc3RzLnRlc3RfZG9uZV9jYWxsYmFja3MucHVzaChjYWxsYmFjayk7DQot
ICAgIH0NCi0NCi0gICAgZnVuY3Rpb24gYWRkX2NvbXBsZXRpb25fY2FsbGJhY2soY2FsbGJhY2sp
DQotICAgIHsNCi0gICAgICAgdGVzdHMuYWxsX2RvbmVfY2FsbGJhY2tzLnB1c2goY2FsbGJhY2sp
Ow0KLSAgICB9DQotDQotICAgIGV4cG9zZShhZGRfc3RhcnRfY2FsbGJhY2ssICdhZGRfc3RhcnRf
Y2FsbGJhY2snKTsNCi0gICAgZXhwb3NlKGFkZF9yZXN1bHRfY2FsbGJhY2ssICdhZGRfcmVzdWx0
X2NhbGxiYWNrJyk7DQotICAgIGV4cG9zZShhZGRfY29tcGxldGlvbl9jYWxsYmFjaywgJ2FkZF9j
b21wbGV0aW9uX2NhbGxiYWNrJyk7DQotDQotICAgIC8qDQotICAgICAqIE91dHB1dCBsaXN0ZW5l
cg0KLSAgICAqLw0KLQ0KLSAgICBmdW5jdGlvbiBPdXRwdXQoKSB7DQotICAgICAgdGhpcy5vdXRw
dXRfZG9jdW1lbnQgPSBkb2N1bWVudDsNCi0gICAgICB0aGlzLm91dHB1dF9ub2RlID0gbnVsbDsN
Ci0gICAgICB0aGlzLmRvbmVfY291bnQgPSAwOw0KLSAgICAgIHRoaXMuZW5hYmxlZCA9IHNldHRp
bmdzLm91dHB1dDsNCi0gICAgICB0aGlzLnBoYXNlID0gdGhpcy5JTklUSUFMOw0KLSAgICB9DQot
DQotICAgIE91dHB1dC5wcm90b3R5cGUuSU5JVElBTCA9IDA7DQotICAgIE91dHB1dC5wcm90b3R5
cGUuU1RBUlRFRCA9IDE7DQotICAgIE91dHB1dC5wcm90b3R5cGUuSEFWRV9SRVNVTFRTID0gMjsN
Ci0gICAgT3V0cHV0LnByb3RvdHlwZS5DT01QTEVURSA9IDM7DQotDQotICAgIE91dHB1dC5wcm90
b3R5cGUuc2V0dXAgPSBmdW5jdGlvbihwcm9wZXJ0aWVzKSB7DQotICAgICAgICBpZiAodGhpcy5w
aGFzZSA+IHRoaXMuSU5JVElBTCkgew0KLSAgICAgICAgICAgIHJldHVybjsNCi0gICAgICAgIH0N
Ci0NCi0gICAgICAgIC8vSWYgb3V0cHV0IGlzIGRpc2FibGVkIGluIHRlc3RoYXJuZXNzcmVwb3J0
LmpzIHRoZSB0ZXN0IHNob3VsZG4ndCBiZQ0KLSAgICAgICAgLy9hYmxlIHRvIG92ZXJyaWRlIHRo
YXQNCi0gICAgICAgIHRoaXMuZW5hYmxlZCA9IHRoaXMuZW5hYmxlZCAmJiAocHJvcGVydGllcy5o
YXNPd25Qcm9wZXJ0eSgib3V0cHV0IikgPw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBwcm9wZXJ0aWVzLm91dHB1dCA6IHNldHRpbmdzLm91dHB1dCk7DQotICAgIH07
DQotDQotICAgIE91dHB1dC5wcm90b3R5cGUuaW5pdCA9IGZ1bmN0aW9uKHByb3BlcnRpZXMpDQot
ICAgIHsNCi0gICAgICAgIGlmICh0aGlzLnBoYXNlID49IHRoaXMuU1RBUlRFRCkgew0KLSAgICAg
ICAgICAgIHJldHVybjsNCi0gICAgICAgIH0NCi0gICAgICAgIGlmIChwcm9wZXJ0aWVzLm91dHB1
dF9kb2N1bWVudCkgew0KLSAgICAgICAgICAgIHRoaXMub3V0cHV0X2RvY3VtZW50ID0gcHJvcGVy
dGllcy5vdXRwdXRfZG9jdW1lbnQ7DQotICAgICAgICB9IGVsc2Ugew0KLSAgICAgICAgICAgIHRo
aXMub3V0cHV0X2RvY3VtZW50ID0gZG9jdW1lbnQ7DQotICAgICAgICB9DQotICAgICAgICB0aGlz
LnBoYXNlID0gdGhpcy5TVEFSVEVEOw0KLSAgICB9Ow0KLQ0KLSAgICBPdXRwdXQucHJvdG90eXBl
LnJlc29sdmVfbG9nID0gZnVuY3Rpb24oKQ0KLSAgICB7DQotICAgICAgICB2YXIgb3V0cHV0X2Rv
Y3VtZW50Ow0KLSAgICAgICAgaWYgKHR5cGVvZiB0aGlzLm91dHB1dF9kb2N1bWVudCA9PT0gImZ1
bmN0aW9uIikNCi0gICAgICAgIHsNCi0gICAgICAgICAgICBvdXRwdXRfZG9jdW1lbnQgPSB0aGlz
Lm91dHB1dF9kb2N1bWVudC5hcHBseSh1bmRlZmluZWQpOw0KLSAgICAgICAgfSBlbHNlDQotICAg
ICAgICB7DQotICAgICAgICAgICAgb3V0cHV0X2RvY3VtZW50ID0gdGhpcy5vdXRwdXRfZG9jdW1l
bnQ7DQotICAgICAgICB9DQotICAgICAgICBpZiAoIW91dHB1dF9kb2N1bWVudCkNCi0gICAgICAg
IHsNCi0gICAgICAgICAgICByZXR1cm47DQotICAgICAgICB9DQotICAgICAgICB2YXIgbm9kZSA9
IG91dHB1dF9kb2N1bWVudC5nZXRFbGVtZW50QnlJZCgibG9nIik7DQotICAgICAgICBpZiAobm9k
ZSkNCi0gICAgICAgIHsNCi0gICAgICAgICAgICB0aGlzLm91dHB1dF9kb2N1bWVudCA9IG91dHB1
dF9kb2N1bWVudDsNCi0gICAgICAgICAgICB0aGlzLm91dHB1dF9ub2RlID0gbm9kZTsNCi0gICAg
ICAgIH0NCi0gICAgfTsNCi0NCi0gICAgT3V0cHV0LnByb3RvdHlwZS5zaG93X3N0YXR1cyA9IGZ1
bmN0aW9uKHRlc3QpDQotICAgIHsNCi0gICAgICAgIGlmICh0aGlzLnBoYXNlIDwgdGhpcy5TVEFS
VEVEKQ0KLSAgICAgICAgew0KLSAgICAgICAgICAgIHRoaXMuaW5pdCgpOw0KLSAgICAgICAgfQ0K
LSAgICAgICAgaWYgKCF0aGlzLmVuYWJsZWQpDQotICAgICAgICB7DQotICAgICAgICAgICAgcmV0
dXJuOw0KLSAgICAgICAgfQ0KLSAgICAgICAgaWYgKHRoaXMucGhhc2UgPCB0aGlzLkhBVkVfUkVT
VUxUUykNCi0gICAgICAgIHsNCi0gICAgICAgICAgICB0aGlzLnJlc29sdmVfbG9nKCk7DQotICAg
ICAgICAgICAgdGhpcy5waGFzZSA9IHRoaXMuSEFWRV9SRVNVTFRTOw0KLSAgICAgICAgfQ0KLSAg
ICAgICAgdGhpcy5kb25lX2NvdW50Kys7DQotICAgICAgICBpZiAodGhpcy5vdXRwdXRfbm9kZSkN
Ci0gICAgICAgIHsNCi0gICAgICAgICAgICBpZiAodGhpcy5kb25lX2NvdW50IDwgMTAwDQotICAg
ICAgICAgICAgfHwgKHRoaXMuZG9uZV9jb3VudCA8IDEwMDAgJiYgdGhpcy5kb25lX2NvdW50ICUg
MTAwID09IDApDQotICAgICAgICAgICAgfHwgdGhpcy5kb25lX2NvdW50ICUgMTAwMCA9PSAwKSB7
DQotICAgICAgICAgICAgICAgIHRoaXMub3V0cHV0X25vZGUudGV4dENvbnRlbnQgPSAiUnVubmlu
ZywgIg0KLSAgICAgICAgICAgICAgICAgICAgKyB0aGlzLmRvbmVfY291bnQgKyAiIGNvbXBsZXRl
LCAiDQotICAgICAgICAgICAgICAgICAgICArIHRlc3RzLm51bV9wZW5kaW5nICsgIiByZW1haW4i
Ow0KLSAgICAgICAgICAgIH0NCi0gICAgICAgIH0NCi0gICAgfTsNCi0NCi0gICAgT3V0cHV0LnBy
b3RvdHlwZS5zaG93X3Jlc3VsdHMgPSBmdW5jdGlvbiAodGVzdHMsIGhhcm5lc3Nfc3RhdHVzKQ0K
LSAgICB7DQotICAgICAgICBpZiAodGhpcy5waGFzZSA+PSB0aGlzLkNPTVBMRVRFKSB7DQotICAg
ICAgICAgICAgcmV0dXJuOw0KLSAgICAgICAgfQ0KLSAgICAgICAgaWYgKCF0aGlzLmVuYWJsZWQp
DQotICAgICAgICB7DQotICAgICAgICAgICAgcmV0dXJuOw0KLSAgICAgICAgfQ0KLSAgICAgICAg
aWYgKCF0aGlzLm91dHB1dF9ub2RlKSB7DQotICAgICAgICAgICAgdGhpcy5yZXNvbHZlX2xvZygp
Ow0KLSAgICAgICAgfQ0KLSAgICAgICAgdGhpcy5waGFzZSA9IHRoaXMuQ09NUExFVEU7DQotDQot
ICAgICAgICB2YXIgbG9nID0gdGhpcy5vdXRwdXRfbm9kZTsNCi0gICAgICAgIGlmICghbG9nKQ0K
LSAgICAgICAgew0KLSAgICAgICAgICAgIHJldHVybjsNCi0gICAgICAgIH0NCi0gICAgICAgIHZh
ciBvdXRwdXRfZG9jdW1lbnQgPSB0aGlzLm91dHB1dF9kb2N1bWVudDsNCi0NCi0gICAgICAgIHdo
aWxlIChsb2cubGFzdENoaWxkKQ0KLSAgICAgICAgew0KLSAgICAgICAgICAgIGxvZy5yZW1vdmVD
aGlsZChsb2cubGFzdENoaWxkKTsNCi0gICAgICAgIH0NCi0NCi0gICAgICAgIGlmIChzY3JpcHRf
cHJlZml4ICE9IG51bGwpIHsNCi0gICAgICAgICAgICB2YXIgc3R5bGVzaGVldCA9IG91dHB1dF9k
b2N1bWVudC5jcmVhdGVFbGVtZW50TlMoeGh0bWxfbnMsICJsaW5rIik7DQotICAgICAgICAgICAg
c3R5bGVzaGVldC5zZXRBdHRyaWJ1dGUoInJlbCIsICJzdHlsZXNoZWV0Iik7DQotICAgICAgICAg
ICAgc3R5bGVzaGVldC5zZXRBdHRyaWJ1dGUoImhyZWYiLCBzY3JpcHRfcHJlZml4ICsgInRlc3Ro
YXJuZXNzLmNzcyIpOw0KLSAgICAgICAgICAgIHZhciBoZWFkcyA9IG91dHB1dF9kb2N1bWVudC5n
ZXRFbGVtZW50c0J5VGFnTmFtZSgiaGVhZCIpOw0KLSAgICAgICAgICAgIGlmIChoZWFkcy5sZW5n
dGgpIHsNCi0gICAgICAgICAgICAgICAgaGVhZHNbMF0uYXBwZW5kQ2hpbGQoc3R5bGVzaGVldCk7
DQotICAgICAgICAgICAgfQ0KLSAgICAgICAgfQ0KLQ0KLSAgICAgICAgdmFyIHN0YXR1c190ZXh0
ID0ge307DQotICAgICAgICBzdGF0dXNfdGV4dFtUZXN0LnByb3RvdHlwZS5QQVNTXSA9ICJQYXNz
IjsNCi0gICAgICAgIHN0YXR1c190ZXh0W1Rlc3QucHJvdG90eXBlLkZBSUxdID0gIkZhaWwiOw0K
LSAgICAgICAgc3RhdHVzX3RleHRbVGVzdC5wcm90b3R5cGUuVElNRU9VVF0gPSAiVGltZW91dCI7
DQotICAgICAgICBzdGF0dXNfdGV4dFtUZXN0LnByb3RvdHlwZS5OT1RSVU5dID0gIk5vdCBSdW4i
Ow0KLQ0KLSAgICAgICAgdmFyIHN0YXR1c19udW1iZXIgPSB7fTsNCi0gICAgICAgIGZvckVhY2go
dGVzdHMsIGZ1bmN0aW9uKHRlc3QpIHsNCi0gICAgICAgICAgICAgICAgICAgIHZhciBzdGF0dXMg
PSBzdGF0dXNfdGV4dFt0ZXN0LnN0YXR1c107DQotICAgICAgICAgICAgICAgICAgICBpZiAoc3Rh
dHVzX251bWJlci5oYXNPd25Qcm9wZXJ0eShzdGF0dXMpKQ0KLSAgICAgICAgICAgICAgICAgICAg
ew0KLSAgICAgICAgICAgICAgICAgICAgICAgIHN0YXR1c19udW1iZXJbc3RhdHVzXSArPSAxOw0K
LSAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsNCi0gICAgICAgICAgICAgICAgICAgICAgICBz
dGF0dXNfbnVtYmVyW3N0YXR1c10gPSAxOw0KLSAgICAgICAgICAgICAgICAgICAgfQ0KLSAgICAg
ICAgICAgICAgICB9KTsNCi0NCi0gICAgICAgIGZ1bmN0aW9uIHN0YXR1c19jbGFzcyhzdGF0dXMp
DQotICAgICAgICB7DQotICAgICAgICAgICAgcmV0dXJuIHN0YXR1cy5yZXBsYWNlKC9ccy9nLCAn
JykudG9Mb3dlckNhc2UoKTsNCi0gICAgICAgIH0NCi0NCi0gICAgICAgIHZhciBzdW1tYXJ5X3Rl
bXBsYXRlID0gWyJzZWN0aW9uIiwgeyJpZCI6InN1bW1hcnkifSwNCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIFsiaDIiLCB7fSwgIlN1bW1hcnkiXSwNCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIFsicCIsIHt9LCAiRm91bmQgJHtudW1fdGVzdHN9IHRlc3RzIl0sDQot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbih2YXJzKSB7DQotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHJ2ID0gW1siZGl2Iiwge31dXTsNCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgaT0wOw0KLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHdoaWxlIChzdGF0dXNfdGV4dC5oYXNPd25Qcm9wZXJ0
eShpKSkgew0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoc3Rh
dHVzX251bWJlci5oYXNPd25Qcm9wZXJ0eShzdGF0dXNfdGV4dFtpXSkpIHsNCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBzdGF0dXMgPSBzdGF0dXNfdGV4
dFtpXTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJ2WzBd
LnB1c2goWyJkaXYiLCB7ImNsYXNzIjpzdGF0dXNfY2xhc3Moc3RhdHVzKX0sDQotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbImxhYmVsIiwg
e30sDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgWyJpbnB1dCIsIHt0eXBlOiJjaGVja2JveCIsIGNoZWNrZWQ6ImNoZWNrZWQifV0sDQot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
c3RhdHVzX251bWJlcltzdGF0dXNdICsgIiAiICsgc3RhdHVzXV0pOw0KLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB9DQotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGkrKzsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9
DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJ2Ow0KLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgfV07DQotDQotICAgICAgICBsb2cuYXBwZW5kQ2hp
bGQocmVuZGVyKHN1bW1hcnlfdGVtcGxhdGUsIHtudW1fdGVzdHM6dGVzdHMubGVuZ3RofSwgb3V0
cHV0X2RvY3VtZW50KSk7DQotDQotICAgICAgICBmb3JFYWNoKG91dHB1dF9kb2N1bWVudC5xdWVy
eVNlbGVjdG9yQWxsKCJzZWN0aW9uI3N1bW1hcnkgbGFiZWwiKSwNCi0gICAgICAgICAgICAgICAg
ZnVuY3Rpb24oZWxlbWVudCkNCi0gICAgICAgICAgICAgICAgew0KLSAgICAgICAgICAgICAgICAg
ICAgb25fZXZlbnQoZWxlbWVudCwgImNsaWNrIiwNCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGZ1bmN0aW9uKGUpDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7DQotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG91dHB1dF9kb2N1bWVudC5nZXRFbGVtZW50
QnlJZCgicmVzdWx0cyIpID09PSBudWxsKQ0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZS5wcmV2ZW50RGVm
YXVsdCgpOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47DQot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHZhciByZXN1bHRfY2xhc3MgPSBlbGVtZW50LnBhcmVudE5vZGUuZ2V0QXR0
cmlidXRlKCJjbGFzcyIpOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBz
dHlsZV9lbGVtZW50ID0gb3V0cHV0X2RvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoInN0eWxlI2hpZGUt
IiArIHJlc3VsdF9jbGFzcyk7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFy
IGlucHV0X2VsZW1lbnQgPSBlbGVtZW50LnF1ZXJ5U2VsZWN0b3IoImlucHV0Iik7DQotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFzdHlsZV9lbGVtZW50ICYmICFpbnB1dF9l
bGVtZW50LmNoZWNrZWQpIHsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
c3R5bGVfZWxlbWVudCA9IG91dHB1dF9kb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoeGh0bWxfbnMs
ICJzdHlsZSIpOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHlsZV9l
bGVtZW50LmlkID0gImhpZGUtIiArIHJlc3VsdF9jbGFzczsNCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgc3R5bGVfZWxlbWVudC50ZXh0Q29udGVudCA9ICJ0YWJsZSNyZXN1
bHRzID4gdGJvZHkgPiB0ci4iK3Jlc3VsdF9jbGFzcysie2Rpc3BsYXk6bm9uZX0iOw0KLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdXRwdXRfZG9jdW1lbnQuYm9keS5hcHBl
bmRDaGlsZChzdHlsZV9lbGVtZW50KTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB9IGVsc2UgaWYgKHN0eWxlX2VsZW1lbnQgJiYgaW5wdXRfZWxlbWVudC5jaGVja2VkKSB7DQot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0eWxlX2VsZW1lbnQucGFyZW50
Tm9kZS5yZW1vdmVDaGlsZChzdHlsZV9lbGVtZW50KTsNCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB9DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTsNCi0gICAgICAg
ICAgICAgICAgfSk7DQotDQotICAgICAgICAvLyBUaGlzIHVzZSBvZiBpbm5lckhUTUwgcGx1cyBt
YW51YWwgZXNjYXBpbmcgaXMgbm90IHJlY29tbWVuZGVkIGluDQotICAgICAgICAvLyBnZW5lcmFs
LCBidXQgaXMgbmVjZXNzYXJ5IGhlcmUgZm9yIHBlcmZvcm1hbmNlLiAgVXNpbmcgdGV4dENvbnRl
bnQNCi0gICAgICAgIC8vIG9uIGVhY2ggaW5kaXZpZHVhbCA8dGQ+IGFkZHMgdGVucyBvZiBzZWNv
bmRzIG9mIGV4ZWN1dGlvbiB0aW1lIGZvcg0KLSAgICAgICAgLy8gbGFyZ2UgdGVzdCBzdWl0ZXMg
KHRlbnMgb2YgdGhvdXNhbmRzIG9mIHRlc3RzKS4NCi0gICAgICAgIGZ1bmN0aW9uIGVzY2FwZV9o
dG1sKHMpDQotICAgICAgICB7DQotICAgICAgICAgICAgcmV0dXJuIHMucmVwbGFjZSgvXCYvZywg
IiZhbXA7IikNCi0gICAgICAgICAgICAgICAgLnJlcGxhY2UoLzwvZywgIiZsdDsiKQ0KLSAgICAg
ICAgICAgICAgICAucmVwbGFjZSgvIi9nLCAiJnF1b3Q7IikNCi0gICAgICAgICAgICAgICAgLnJl
cGxhY2UoLycvZywgIiYjMzk7Iik7DQotICAgICAgICB9DQotDQotICAgICAgICBmdW5jdGlvbiBo
YXNfYXNzZXJ0aW9ucygpDQotICAgICAgICB7DQotICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7
IGkgPCB0ZXN0cy5sZW5ndGg7IGkrKykgew0KLSAgICAgICAgICAgICAgICBpZiAodGVzdHNbaV0u
cHJvcGVydGllcy5oYXNPd25Qcm9wZXJ0eSgiYXNzZXJ0IikpIHsNCi0gICAgICAgICAgICAgICAg
ICAgIHJldHVybiB0cnVlOw0KLSAgICAgICAgICAgICAgICB9DQotICAgICAgICAgICAgfQ0KLSAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsNCi0gICAgICAgIH0NCi0gICAgICAgIA0KLSAgICAgICAg
ZnVuY3Rpb24gZ2V0X2Fzc2VydGlvbih0ZXN0KQ0KLSAgICAgICAgew0KLSAgICAgICAgICAgIGlm
ICh0ZXN0LnByb3BlcnRpZXMuaGFzT3duUHJvcGVydHkoImFzc2VydCIpKSB7DQotICAgICAgICAg
ICAgICAgIGlmIChBcnJheS5pc0FycmF5KHRlc3QucHJvcGVydGllcy5hc3NlcnQpKSB7DQotICAg
ICAgICAgICAgICAgICAgICByZXR1cm4gdGVzdC5wcm9wZXJ0aWVzLmFzc2VydC5qb2luKCcgJyk7
DQotICAgICAgICAgICAgICAgIH0NCi0gICAgICAgICAgICAgICAgcmV0dXJuIHRlc3QucHJvcGVy
dGllcy5hc3NlcnQ7DQotICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgIHJldHVybiAnJzsNCi0g
ICAgICAgIH0NCi0gICAgICAgIA0KLSAgICAgICAgbG9nLmFwcGVuZENoaWxkKGRvY3VtZW50LmNy
ZWF0ZUVsZW1lbnROUyh4aHRtbF9ucywgInNlY3Rpb24iKSk7DQotICAgICAgICB2YXIgYXNzZXJ0
aW9ucyA9IGhhc19hc3NlcnRpb25zKCk7DQotICAgICAgICB2YXIgaHRtbCA9ICI8aDI+RGV0YWls
czwvaDI+PHRhYmxlIGlkPSdyZXN1bHRzJyAiICsgKGFzc2VydGlvbnMgPyAiY2xhc3M9J2Fzc2Vy
dGlvbnMnIiA6ICIiICkgKyAiPiINCi0gICAgICAgICAgICArICI8dGhlYWQ+PHRyPjx0aD5SZXN1
bHQ8L3RoPjx0aD5UZXN0IE5hbWU8L3RoPiINCi0gICAgICAgICAgICArIChhc3NlcnRpb25zID8g
Ijx0aD5Bc3NlcnRpb248L3RoPiIgOiAiIikNCi0gICAgICAgICAgICArICI8dGg+TWVzc2FnZTwv
dGg+PC90cj48L3RoZWFkPiINCi0gICAgICAgICAgICArICI8dGJvZHk+IjsNCi0gICAgICAgIGZv
ciAodmFyIGkgPSAwOyBpIDwgdGVzdHMubGVuZ3RoOyBpKyspIHsNCi0gICAgICAgICAgICBodG1s
ICs9ICc8dHIgY2xhc3M9IicNCi0gICAgICAgICAgICAgICAgKyBlc2NhcGVfaHRtbChzdGF0dXNf
Y2xhc3Moc3RhdHVzX3RleHRbdGVzdHNbaV0uc3RhdHVzXSkpDQotICAgICAgICAgICAgICAgICsg
JyI+PHRkPicNCi0gICAgICAgICAgICAgICAgKyBlc2NhcGVfaHRtbChzdGF0dXNfdGV4dFt0ZXN0
c1tpXS5zdGF0dXNdKQ0KLSAgICAgICAgICAgICAgICArICI8L3RkPjx0ZD4iDQotICAgICAgICAg
ICAgICAgICsgZXNjYXBlX2h0bWwodGVzdHNbaV0ubmFtZSkNCi0gICAgICAgICAgICAgICAgKyAi
PC90ZD48dGQ+Ig0KLSAgICAgICAgICAgICAgICArIChhc3NlcnRpb25zID8gZXNjYXBlX2h0bWwo
Z2V0X2Fzc2VydGlvbih0ZXN0c1tpXSkpICsgIjwvdGQ+PHRkPiIgOiAiIikNCi0gICAgICAgICAg
ICAgICAgKyBlc2NhcGVfaHRtbCh0ZXN0c1tpXS5tZXNzYWdlID8gdGVzdHNbaV0ubWVzc2FnZSA6
ICIgIikNCi0gICAgICAgICAgICAgICAgKyAiPC90ZD48L3RyPiI7DQotICAgICAgICB9DQotICAg
ICAgICBodG1sICs9ICI8L3Rib2R5PjwvdGFibGU+IjsNCi0gICAgICAgIHRyeSB7DQotICAgICAg
ICAgICAgbG9nLmxhc3RDaGlsZC5pbm5lckhUTUwgPSBodG1sOw0KLSAgICAgICAgfSBjYXRjaCAo
ZSkgew0KLSAgICAgICAgICAgIGxvZy5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVFbGVtZW50
TlMoeGh0bWxfbnMsICJwIikpDQotICAgICAgICAgICAgICAgLnRleHRDb250ZW50ID0gIlNldHRp
bmcgaW5uZXJIVE1MIGZvciB0aGUgbG9nIHRocmV3IGFuIGV4Y2VwdGlvbi4iOw0KLSAgICAgICAg
ICAgIGxvZy5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoeGh0bWxfbnMsICJw
cmUiKSkNCi0gICAgICAgICAgICAgICAudGV4dENvbnRlbnQgPSBodG1sOw0KLSAgICAgICAgfQ0K
LSAgICB9Ow0KLQ0KLSAgICB2YXIgb3V0cHV0ID0gbmV3IE91dHB1dCgpOw0KLSAgICBhZGRfc3Rh
cnRfY2FsbGJhY2soZnVuY3Rpb24gKHByb3BlcnRpZXMpIHtvdXRwdXQuaW5pdChwcm9wZXJ0aWVz
KTt9KTsNCi0gICAgYWRkX3Jlc3VsdF9jYWxsYmFjayhmdW5jdGlvbiAodGVzdCkge291dHB1dC5z
aG93X3N0YXR1cyh0ZXN0cyk7fSk7DQotICAgIGFkZF9jb21wbGV0aW9uX2NhbGxiYWNrKGZ1bmN0
aW9uICh0ZXN0cywgaGFybmVzc19zdGF0dXMpIHtvdXRwdXQuc2hvd19yZXN1bHRzKHRlc3RzLCBo
YXJuZXNzX3N0YXR1cyk7fSk7DQotDQotICAgIC8qDQotICAgICAqIFRlbXBsYXRlIGNvZGUNCi0g
ICAgICoNCi0gICAgICogQSB0ZW1wbGF0ZSBpcyBqdXN0IGEgamF2YXNjcmlwdCBzdHJ1Y3R1cmUu
IEFuIGVsZW1lbnQgaXMgcmVwcmVzZW50ZWQgYXM6DQotICAgICAqDQotICAgICAqIFt0YWdfbmFt
ZSwge2F0dHJfbmFtZTphdHRyX3ZhbHVlfSwgY2hpbGQxLCBjaGlsZDJdDQotICAgICAqDQotICAg
ICAqIHRoZSBjaGlsZHJlbiBjYW4gZWl0aGVyIGJlIHN0cmluZ3MgKHdoaWNoIGFjdCBsaWtlIHRl
eHQgbm9kZXMpLCBvdGhlciB0ZW1wbGF0ZXMgb3INCi0gICAgICogZnVuY3Rpb25zIChzZWUgYmVs
b3cpDQotICAgICAqDQotICAgICAqIEEgdGV4dCBub2RlIGlzIHJlcHJlc2VudGVkIGFzDQotICAg
ICAqDQotICAgICAqIFsie3RleHR9IiwgdmFsdWVdDQotICAgICAqDQotICAgICAqIFN0cmluZyB2
YWx1ZXMgaGF2ZSBhIHNpbXBsZSBzdWJzdGl0dXRpb24gc3ludGF4OyAke2Zvb30gcmVwcmVzZW50
cyBhIHZhcmlhYmxlIGZvby4NCi0gICAgICoNCi0gICAgICogSXQgaXMgcG9zc2libGUgdG8gZW1i
ZWQgbG9naWMgaW4gdGVtcGxhdGVzIGJ5IHVzaW5nIGEgZnVuY3Rpb24gaW4gYSBwbGFjZSB3aGVy
ZSBhDQotICAgICAqIG5vZGUgd291bGQgdXN1YWxseSBnby4gVGhlIGZ1bmN0aW9uIG11c3QgZWl0
aGVyIHJldHVybiBwYXJ0IG9mIGEgdGVtcGxhdGUgb3IgbnVsbC4NCi0gICAgICoNCi0gICAgICog
SW4gY2FzZXMgd2hlcmUgYSBzZXQgb2Ygbm9kZXMgYXJlIHJlcXVpcmVkIGFzIG91dHB1dCByYXRo
ZXIgdGhhbiBhIHNpbmdsZSBub2RlDQotICAgICAqIHdpdGggY2hpbGRyZW4gaXQgaXMgcG9zc2li
bGUgdG8ganVzdCB1c2UgYSBsaXN0DQotICAgICAqIFtub2RlMSwgbm9kZTIsIG5vZGUzXQ0KLSAg
ICAgKg0KLSAgICAgKiBVc2FnZToNCi0gICAgICoNCi0gICAgICogcmVuZGVyKHRlbXBsYXRlLCBz
dWJzdGl0dXRpb25zKSAtIHRha2UgYSB0ZW1wbGF0ZSBhbmQgYW4gb2JqZWN0IG1hcHBpbmcNCi0g
ICAgICogdmFyaWFibGUgbmFtZXMgdG8gcGFyYW1ldGVycyBhbmQgcmV0dXJuIGVpdGhlciBhIERP
TSBub2RlIG9yIGEgbGlzdCBvZiBET00gbm9kZXMNCi0gICAgICoNCi0gICAgICogc3Vic3RpdHV0
ZSh0ZW1wbGF0ZSwgc3Vic3RpdHV0aW9ucykgLSB0YWtlIGEgdGVtcGxhdGUgYW5kIHZhcmlhYmxl
IG1hcHBpbmcgb2JqZWN0LA0KLSAgICAgKiBtYWtlIHRoZSB2YXJpYWJsZSBzdWJzdGl0dXRpb25z
IGFuZCByZXR1cm4gdGhlIHN1YnN0aXR1dGVkIHRlbXBsYXRlDQotICAgICAqDQotICAgICAqLw0K
LQ0KLSAgICBmdW5jdGlvbiBpc19zaW5nbGVfbm9kZSh0ZW1wbGF0ZSkNCi0gICAgew0KLSAgICAg
ICAgcmV0dXJuIHR5cGVvZiB0ZW1wbGF0ZVswXSA9PT0gInN0cmluZyI7DQotICAgIH0NCi0NCi0g
ICAgZnVuY3Rpb24gc3Vic3RpdHV0ZSh0ZW1wbGF0ZSwgc3Vic3RpdHV0aW9ucykNCi0gICAgew0K
LSAgICAgICAgaWYgKHR5cGVvZiB0ZW1wbGF0ZSA9PT0gImZ1bmN0aW9uIikgew0KLSAgICAgICAg
ICAgIHZhciByZXBsYWNlbWVudCA9IHRlbXBsYXRlKHN1YnN0aXR1dGlvbnMpOw0KLSAgICAgICAg
ICAgIGlmIChyZXBsYWNlbWVudCkNCi0gICAgICAgICAgICB7DQotICAgICAgICAgICAgICAgIHZh
ciBydiA9IHN1YnN0aXR1dGUocmVwbGFjZW1lbnQsIHN1YnN0aXR1dGlvbnMpOw0KLSAgICAgICAg
ICAgICAgICByZXR1cm4gcnY7DQotICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgIGVsc2UNCi0g
ICAgICAgICAgICB7DQotICAgICAgICAgICAgICAgIHJldHVybiBudWxsOw0KLSAgICAgICAgICAg
IH0NCi0gICAgICAgIH0NCi0gICAgICAgIGVsc2UgaWYgKGlzX3NpbmdsZV9ub2RlKHRlbXBsYXRl
KSkNCi0gICAgICAgIHsNCi0gICAgICAgICAgICByZXR1cm4gc3Vic3RpdHV0ZV9zaW5nbGUodGVt
cGxhdGUsIHN1YnN0aXR1dGlvbnMpOw0KLSAgICAgICAgfQ0KLSAgICAgICAgZWxzZQ0KLSAgICAg
ICAgew0KLSAgICAgICAgICAgIHJldHVybiBmaWx0ZXIobWFwKHRlbXBsYXRlLCBmdW5jdGlvbih4
KSB7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBzdWJzdGl0dXRl
KHgsIHN1YnN0aXR1dGlvbnMpOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pLCBm
dW5jdGlvbih4KSB7cmV0dXJuIHggIT09IG51bGw7fSk7DQotICAgICAgICB9DQotICAgIH0NCi0N
Ci0gICAgZnVuY3Rpb24gc3Vic3RpdHV0ZV9zaW5nbGUodGVtcGxhdGUsIHN1YnN0aXR1dGlvbnMp
DQotICAgIHsNCi0gICAgICAgIHZhciBzdWJzdGl0dXRpb25fcmUgPSAvXCR7KFteIH1dKil9L2c7
DQotDQotICAgICAgICBmdW5jdGlvbiBkb19zdWJzdGl0dXRpb24oaW5wdXQpIHsNCi0gICAgICAg
ICAgICB2YXIgY29tcG9uZW50cyA9IGlucHV0LnNwbGl0KHN1YnN0aXR1dGlvbl9yZSk7DQotICAg
ICAgICAgICAgdmFyIHJ2ID0gW107DQotICAgICAgICAgICAgZm9yICh2YXIgaT0wOyBpPGNvbXBv
bmVudHMubGVuZ3RoOyBpKz0yKQ0KLSAgICAgICAgICAgIHsNCi0gICAgICAgICAgICAgICAgcnYu
cHVzaChjb21wb25lbnRzW2ldKTsNCi0gICAgICAgICAgICAgICAgaWYgKGNvbXBvbmVudHNbaSsx
XSkNCi0gICAgICAgICAgICAgICAgew0KLSAgICAgICAgICAgICAgICAgICAgcnYucHVzaChTdHJp
bmcoc3Vic3RpdHV0aW9uc1tjb21wb25lbnRzW2krMV1dKSk7DQotICAgICAgICAgICAgICAgIH0N
Ci0gICAgICAgICAgICB9DQotICAgICAgICAgICAgcmV0dXJuIHJ2Ow0KLSAgICAgICAgfQ0KLQ0K
LSAgICAgICAgdmFyIHJ2ID0gW107DQotICAgICAgICBydi5wdXNoKGRvX3N1YnN0aXR1dGlvbihT
dHJpbmcodGVtcGxhdGVbMF0pKS5qb2luKCIiKSk7DQotDQotICAgICAgICBpZiAodGVtcGxhdGVb
MF0gPT09ICJ7dGV4dH0iKSB7DQotICAgICAgICAgICAgc3Vic3RpdHV0ZV9jaGlsZHJlbih0ZW1w
bGF0ZS5zbGljZSgxKSwgcnYpOw0KLSAgICAgICAgfSBlbHNlIHsNCi0gICAgICAgICAgICBzdWJz
dGl0dXRlX2F0dHJzKHRlbXBsYXRlWzFdLCBydik7DQotICAgICAgICAgICAgc3Vic3RpdHV0ZV9j
aGlsZHJlbih0ZW1wbGF0ZS5zbGljZSgyKSwgcnYpOw0KLSAgICAgICAgfQ0KLQ0KLSAgICAgICAg
ZnVuY3Rpb24gc3Vic3RpdHV0ZV9hdHRycyhhdHRycywgcnYpDQotICAgICAgICB7DQotICAgICAg
ICAgICAgcnZbMV0gPSB7fTsNCi0gICAgICAgICAgICBmb3IgKHZhciBuYW1lIGluIHRlbXBsYXRl
WzFdKQ0KLSAgICAgICAgICAgIHsNCi0gICAgICAgICAgICAgICAgaWYgKGF0dHJzLmhhc093blBy
b3BlcnR5KG5hbWUpKQ0KLSAgICAgICAgICAgICAgICB7DQotICAgICAgICAgICAgICAgICAgICB2
YXIgbmV3X25hbWUgPSBkb19zdWJzdGl0dXRpb24obmFtZSkuam9pbigiIik7DQotICAgICAgICAg
ICAgICAgICAgICB2YXIgbmV3X3ZhbHVlID0gZG9fc3Vic3RpdHV0aW9uKGF0dHJzW25hbWVdKS5q
b2luKCIiKTsNCi0gICAgICAgICAgICAgICAgICAgIHJ2WzFdW25ld19uYW1lXSA9IG5ld192YWx1
ZTsNCi0gICAgICAgICAgICAgICAgfTsNCi0gICAgICAgICAgICB9DQotICAgICAgICB9DQotDQot
ICAgICAgICBmdW5jdGlvbiBzdWJzdGl0dXRlX2NoaWxkcmVuKGNoaWxkcmVuLCBydikNCi0gICAg
ICAgIHsNCi0gICAgICAgICAgICBmb3IgKHZhciBpPTA7IGk8Y2hpbGRyZW4ubGVuZ3RoOyBpKysp
DQotICAgICAgICAgICAgew0KLSAgICAgICAgICAgICAgICBpZiAoY2hpbGRyZW5baV0gaW5zdGFu
Y2VvZiBPYmplY3QpIHsNCi0gICAgICAgICAgICAgICAgICAgIHZhciByZXBsYWNlbWVudCA9IHN1
YnN0aXR1dGUoY2hpbGRyZW5baV0sIHN1YnN0aXR1dGlvbnMpOw0KLSAgICAgICAgICAgICAgICAg
ICAgaWYgKHJlcGxhY2VtZW50ICE9PSBudWxsKQ0KLSAgICAgICAgICAgICAgICAgICAgew0KLSAg
ICAgICAgICAgICAgICAgICAgICAgIGlmIChpc19zaW5nbGVfbm9kZShyZXBsYWNlbWVudCkpDQot
ICAgICAgICAgICAgICAgICAgICAgICAgew0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBy
di5wdXNoKHJlcGxhY2VtZW50KTsNCi0gICAgICAgICAgICAgICAgICAgICAgICB9DQotICAgICAg
ICAgICAgICAgICAgICAgICAgZWxzZQ0KLSAgICAgICAgICAgICAgICAgICAgICAgIHsNCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgZXh0ZW5kKHJ2LCByZXBsYWNlbWVudCk7DQotICAgICAg
ICAgICAgICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgICAgICAgICAgfQ0KLSAgICAgICAgICAg
ICAgICB9DQotICAgICAgICAgICAgICAgIGVsc2UNCi0gICAgICAgICAgICAgICAgew0KLSAgICAg
ICAgICAgICAgICAgICAgZXh0ZW5kKHJ2LCBkb19zdWJzdGl0dXRpb24oU3RyaW5nKGNoaWxkcmVu
W2ldKSkpOw0KLSAgICAgICAgICAgICAgICB9DQotICAgICAgICAgICAgfQ0KLSAgICAgICAgICAg
IHJldHVybiBydjsNCi0gICAgICAgIH0NCi0NCi0gICAgICAgIHJldHVybiBydjsNCi0gICAgfQ0K
LQ0KLSBmdW5jdGlvbiBtYWtlX2RvbV9zaW5nbGUodGVtcGxhdGUsIGRvYykNCi0gew0KLSAgICAg
dmFyIG91dHB1dF9kb2N1bWVudCA9IGRvYyB8fCBkb2N1bWVudDsNCi0gICAgIGlmICh0ZW1wbGF0
ZVswXSA9PT0gInt0ZXh0fSIpDQotICAgICB7DQotICAgICAgICAgdmFyIGVsZW1lbnQgPSBvdXRw
dXRfZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoIiIpOw0KLSAgICAgICAgIGZvciAodmFyIGk9MTsg
aTx0ZW1wbGF0ZS5sZW5ndGg7IGkrKykNCi0gICAgICAgICB7DQotICAgICAgICAgICAgIGVsZW1l
bnQuZGF0YSArPSB0ZW1wbGF0ZVtpXTsNCi0gICAgICAgICB9DQotICAgICB9DQotICAgICBlbHNl
DQotICAgICB7DQotICAgICAgICAgdmFyIGVsZW1lbnQgPSBvdXRwdXRfZG9jdW1lbnQuY3JlYXRl
RWxlbWVudE5TKHhodG1sX25zLCB0ZW1wbGF0ZVswXSk7DQotICAgICAgICAgZm9yICh2YXIgbmFt
ZSBpbiB0ZW1wbGF0ZVsxXSkgew0KLSAgICAgICAgICAgICBpZiAodGVtcGxhdGVbMV0uaGFzT3du
UHJvcGVydHkobmFtZSkpDQotICAgICAgICAgICAgIHsNCi0gICAgICAgICAgICAgICAgIGVsZW1l
bnQuc2V0QXR0cmlidXRlKG5hbWUsIHRlbXBsYXRlWzFdW25hbWVdKTsNCi0gICAgICAgICAgICAg
fQ0KLSAgICAgICAgIH0NCi0gICAgICAgICBmb3IgKHZhciBpPTI7IGk8dGVtcGxhdGUubGVuZ3Ro
OyBpKyspDQotICAgICAgICAgew0KLSAgICAgICAgICAgICBpZiAodGVtcGxhdGVbaV0gaW5zdGFu
Y2VvZiBPYmplY3QpDQotICAgICAgICAgICAgIHsNCi0gICAgICAgICAgICAgICAgIHZhciBzdWJf
ZWxlbWVudCA9IG1ha2VfZG9tKHRlbXBsYXRlW2ldKTsNCi0gICAgICAgICAgICAgICAgIGVsZW1l
bnQuYXBwZW5kQ2hpbGQoc3ViX2VsZW1lbnQpOw0KLSAgICAgICAgICAgICB9DQotICAgICAgICAg
ICAgIGVsc2UNCi0gICAgICAgICAgICAgew0KLSAgICAgICAgICAgICAgICAgdmFyIHRleHRfbm9k
ZSA9IG91dHB1dF9kb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSh0ZW1wbGF0ZVtpXSk7DQotICAgICAg
ICAgICAgICAgICBlbGVtZW50LmFwcGVuZENoaWxkKHRleHRfbm9kZSk7DQotICAgICAgICAgICAg
IH0NCi0gICAgICAgICB9DQotICAgICB9DQotDQotICAgICByZXR1cm4gZWxlbWVudDsNCi0gfQ0K
LQ0KLQ0KLQ0KLSBmdW5jdGlvbiBtYWtlX2RvbSh0ZW1wbGF0ZSwgc3Vic3RpdHV0aW9ucywgb3V0
cHV0X2RvY3VtZW50KQ0KLSAgICB7DQotICAgICAgICBpZiAoaXNfc2luZ2xlX25vZGUodGVtcGxh
dGUpKQ0KLSAgICAgICAgew0KLSAgICAgICAgICAgIHJldHVybiBtYWtlX2RvbV9zaW5nbGUodGVt
cGxhdGUsIG91dHB1dF9kb2N1bWVudCk7DQotICAgICAgICB9DQotICAgICAgICBlbHNlDQotICAg
ICAgICB7DQotICAgICAgICAgICAgcmV0dXJuIG1hcCh0ZW1wbGF0ZSwgZnVuY3Rpb24oeCkgew0K
LSAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBtYWtlX2RvbV9zaW5nbGUoeCwgb3V0
cHV0X2RvY3VtZW50KTsNCi0gICAgICAgICAgICAgICAgICAgICAgIH0pOw0KLSAgICAgICAgfQ0K
LSAgICB9DQotDQotIGZ1bmN0aW9uIHJlbmRlcih0ZW1wbGF0ZSwgc3Vic3RpdHV0aW9ucywgb3V0
cHV0X2RvY3VtZW50KQ0KLSAgICB7DQotICAgICAgICByZXR1cm4gbWFrZV9kb20oc3Vic3RpdHV0
ZSh0ZW1wbGF0ZSwgc3Vic3RpdHV0aW9ucyksIG91dHB1dF9kb2N1bWVudCk7DQotICAgIH0NCi0N
Ci0gICAgLyoNCi0gICAgICogVXRpbGl0eSBmdW5jaW9ucw0KLSAgICAgKi8NCi0gICAgZnVuY3Rp
b24gYXNzZXJ0KGV4cGVjdGVkX3RydWUsIGZ1bmN0aW9uX25hbWUsIGRlc2NyaXB0aW9uLCBlcnJv
ciwgc3Vic3RpdHV0aW9ucykNCi0gICAgew0KLSAgICAgICAgaWYgKGV4cGVjdGVkX3RydWUgIT09
IHRydWUpDQotICAgICAgICB7DQotICAgICAgICAgICAgdGhyb3cgbmV3IEFzc2VydGlvbkVycm9y
KG1ha2VfbWVzc2FnZShmdW5jdGlvbl9uYW1lLCBkZXNjcmlwdGlvbiwNCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yLCBzdWJzdGl0dXRpb25z
KSk7DQotICAgICAgICB9DQotICAgIH0NCi0NCi0gICAgZnVuY3Rpb24gQXNzZXJ0aW9uRXJyb3Io
bWVzc2FnZSkNCi0gICAgew0KLSAgICAgICAgdGhpcy5tZXNzYWdlID0gbWVzc2FnZTsNCi0gICAg
fQ0KLQ0KLSAgICBmdW5jdGlvbiBtYWtlX21lc3NhZ2UoZnVuY3Rpb25fbmFtZSwgZGVzY3JpcHRp
b24sIGVycm9yLCBzdWJzdGl0dXRpb25zKQ0KLSAgICB7DQotICAgICAgICBmb3IgKHZhciBwIGlu
IHN1YnN0aXR1dGlvbnMpIHsNCi0gICAgICAgICAgICBpZiAoc3Vic3RpdHV0aW9ucy5oYXNPd25Q
cm9wZXJ0eShwKSkgew0KLSAgICAgICAgICAgICAgICBzdWJzdGl0dXRpb25zW3BdID0gZm9ybWF0
X3ZhbHVlKHN1YnN0aXR1dGlvbnNbcF0pOw0KLSAgICAgICAgICAgIH0NCi0gICAgICAgIH0NCi0g
ICAgICAgIHZhciBub2RlX2Zvcm0gPSBzdWJzdGl0dXRlKFsie3RleHR9IiwgIiR7ZnVuY3Rpb25f
bmFtZX06ICR7ZGVzY3JpcHRpb259IiArIGVycm9yXSwNCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIG1lcmdlKHtmdW5jdGlvbl9uYW1lOmZ1bmN0aW9uX25hbWUsDQotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzY3JpcHRpb246KGRlc2NyaXB0
aW9uP2Rlc2NyaXB0aW9uICsgIiAiOiIiKX0sDQotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgc3Vic3RpdHV0aW9ucykpOw0KLSAgICAgICAgcmV0dXJuIG5vZGVfZm9y
bS5zbGljZSgxKS5qb2luKCIiKTsNCi0gICAgfQ0KLQ0KLSAgICBmdW5jdGlvbiBmaWx0ZXIoYXJy
YXksIGNhbGxhYmxlLCB0aGlzT2JqKSB7DQotICAgICAgICB2YXIgcnYgPSBbXTsNCi0gICAgICAg
IGZvciAodmFyIGk9MDsgaTxhcnJheS5sZW5ndGg7IGkrKykNCi0gICAgICAgIHsNCi0gICAgICAg
ICAgICBpZiAoYXJyYXkuaGFzT3duUHJvcGVydHkoaSkpDQotICAgICAgICAgICAgew0KLSAgICAg
ICAgICAgICAgICB2YXIgcGFzcyA9IGNhbGxhYmxlLmNhbGwodGhpc09iaiwgYXJyYXlbaV0sIGks
IGFycmF5KTsNCi0gICAgICAgICAgICAgICAgaWYgKHBhc3MpIHsNCi0gICAgICAgICAgICAgICAg
ICAgIHJ2LnB1c2goYXJyYXlbaV0pOw0KLSAgICAgICAgICAgICAgICB9DQotICAgICAgICAgICAg
fQ0KLSAgICAgICAgfQ0KLSAgICAgICAgcmV0dXJuIHJ2Ow0KLSAgICB9DQotDQotICAgIGZ1bmN0
aW9uIG1hcChhcnJheSwgY2FsbGFibGUsIHRoaXNPYmopDQotICAgIHsNCi0gICAgICAgIHZhciBy
diA9IFtdOw0KLSAgICAgICAgcnYubGVuZ3RoID0gYXJyYXkubGVuZ3RoOw0KLSAgICAgICAgZm9y
ICh2YXIgaT0wOyBpPGFycmF5Lmxlbmd0aDsgaSsrKQ0KLSAgICAgICAgew0KLSAgICAgICAgICAg
IGlmIChhcnJheS5oYXNPd25Qcm9wZXJ0eShpKSkNCi0gICAgICAgICAgICB7DQotICAgICAgICAg
ICAgICAgIHJ2W2ldID0gY2FsbGFibGUuY2FsbCh0aGlzT2JqLCBhcnJheVtpXSwgaSwgYXJyYXkp
Ow0KLSAgICAgICAgICAgIH0NCi0gICAgICAgIH0NCi0gICAgICAgIHJldHVybiBydjsNCi0gICAg
fQ0KLQ0KLSAgICBmdW5jdGlvbiBleHRlbmQoYXJyYXksIGl0ZW1zKQ0KLSAgICB7DQotICAgICAg
ICBBcnJheS5wcm90b3R5cGUucHVzaC5hcHBseShhcnJheSwgaXRlbXMpOw0KLSAgICB9DQotDQot
ICAgIGZ1bmN0aW9uIGZvckVhY2ggKGFycmF5LCBjYWxsYmFjaywgdGhpc09iaikNCi0gICAgew0K
LSAgICAgICAgZm9yICh2YXIgaT0wOyBpPGFycmF5Lmxlbmd0aDsgaSsrKQ0KLSAgICAgICAgew0K
LSAgICAgICAgICAgIGlmIChhcnJheS5oYXNPd25Qcm9wZXJ0eShpKSkNCi0gICAgICAgICAgICB7
DQotICAgICAgICAgICAgICAgIGNhbGxiYWNrLmNhbGwodGhpc09iaiwgYXJyYXlbaV0sIGksIGFy
cmF5KTsNCi0gICAgICAgICAgICB9DQotICAgICAgICB9DQotICAgIH0NCi0NCi0gICAgZnVuY3Rp
b24gbWVyZ2UoYSxiKQ0KLSAgICB7DQotICAgICAgICB2YXIgcnYgPSB7fTsNCi0gICAgICAgIHZh
ciBwOw0KLSAgICAgICAgZm9yIChwIGluIGEpDQotICAgICAgICB7DQotICAgICAgICAgICAgcnZb
cF0gPSBhW3BdOw0KLSAgICAgICAgfQ0KLSAgICAgICAgZm9yIChwIGluIGIpIHsNCi0gICAgICAg
ICAgICBydltwXSA9IGJbcF07DQotICAgICAgICB9DQotICAgICAgICByZXR1cm4gcnY7DQotICAg
IH0NCi0NCi0gICAgZnVuY3Rpb24gZXhwb3NlKG9iamVjdCwgbmFtZSkNCi0gICAgew0KLSAgICAg
ICAgdmFyIGNvbXBvbmVudHMgPSBuYW1lLnNwbGl0KCIuIik7DQotICAgICAgICB2YXIgdGFyZ2V0
ID0gd2luZG93Ow0KLSAgICAgICAgZm9yICh2YXIgaT0wOyBpPGNvbXBvbmVudHMubGVuZ3RoIC0g
MTsgaSsrKQ0KLSAgICAgICAgew0KLSAgICAgICAgICAgIGlmICghKGNvbXBvbmVudHNbaV0gaW4g
dGFyZ2V0KSkNCi0gICAgICAgICAgICB7DQotICAgICAgICAgICAgICAgIHRhcmdldFtjb21wb25l
bnRzW2ldXSA9IHt9Ow0KLSAgICAgICAgICAgIH0NCi0gICAgICAgICAgICB0YXJnZXQgPSB0YXJn
ZXRbY29tcG9uZW50c1tpXV07DQotICAgICAgICB9DQotICAgICAgICB0YXJnZXRbY29tcG9uZW50
c1tjb21wb25lbnRzLmxlbmd0aCAtIDFdXSA9IG9iamVjdDsNCi0gICAgfQ0KLQ0KLSAgICBmdW5j
dGlvbiBmb3JFYWNoX3dpbmRvd3MoY2FsbGJhY2spIHsNCi0gICAgICAgIC8vIEl0ZXJhdGUgb2Yg
dGhlIHRoZSB3aW5kb3dzIFtzZWxmIC4uLiB0b3AsIG9wZW5lcl0uIFRoZSBjYWxsYmFjayBpcyBw
YXNzZWQNCi0gICAgICAgIC8vIHR3byBvYmplY3RzLCB0aGUgZmlyc3Qgb25lIGlzIHRoZSB3aW5k
b3dzIG9iamVjdCBpdHNlbGYsIHRoZSBzZWNvbmQgb25lDQotICAgICAgICAvLyBpcyBhIGJvb2xl
YW4gaW5kaWNhdGluZyB3aGV0aGVyIG9yIG5vdCBpdHMgb24gdGhlIHNhbWUgb3JpZ2luIGFzIHRo
ZQ0KLSAgICAgICAgLy8gY3VycmVudCB3aW5kb3cuDQotICAgICAgICB2YXIgY2FjaGUgPSBmb3JF
YWNoX3dpbmRvd3MucmVzdWx0X2NhY2hlOw0KLSAgICAgICAgaWYgKCFjYWNoZSkgew0KLSAgICAg
ICAgICAgIGNhY2hlID0gW1tzZWxmLCB0cnVlXV07DQotICAgICAgICAgICAgdmFyIHcgPSBzZWxm
Ow0KLSAgICAgICAgICAgIHZhciBpID0gMDsNCi0gICAgICAgICAgICB2YXIgc287DQotICAgICAg
ICAgICAgdmFyIG9yaWdpbnMgPSBsb2NhdGlvbi5hbmNlc3Rvck9yaWdpbnM7DQotICAgICAgICAg
ICAgd2hpbGUgKHcgIT0gdy5wYXJlbnQpDQotICAgICAgICAgICAgew0KLSAgICAgICAgICAgICAg
ICB3ID0gdy5wYXJlbnQ7DQotICAgICAgICAgICAgICAgIC8vIEluIFdlYktpdCwgY2FsbHMgdG8g
cGFyZW50IHdpbmRvd3MnIHByb3BlcnRpZXMgdGhhdCBhcmVuJ3Qgb24gdGhlIHNhbWUNCi0gICAg
ICAgICAgICAgICAgLy8gb3JpZ2luIGNhdXNlIGFuIGVycm9yIG1lc3NhZ2UgdG8gYmUgZGlzcGxh
eWVkIGluIHRoZSBlcnJvciBjb25zb2xlIGJ1dA0KLSAgICAgICAgICAgICAgICAvLyBkb24ndCB0
aHJvdyBhbiBleGNlcHRpb24uIFRoaXMgaXMgYSBkZXZpYXRpb24gZnJvbSB0aGUgY3VycmVudCBI
VE1MNQ0KLSAgICAgICAgICAgICAgICAvLyBzcGVjLiBTZWU6IGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD00MzUwNA0KLSAgICAgICAgICAgICAgICAvLyBUaGUgcHJvYmxl
bSB3aXRoIFdlYktpdCdzIGJlaGF2aW9yIGlzIHRoYXQgaXQgcG9sbHV0ZXMgdGhlIGVycm9yIGNv
bnNvbGUNCi0gICAgICAgICAgICAgICAgLy8gd2l0aCBlcnJvciBtZXNzYWdlcyB0aGF0IGNhbid0
IGJlIGNhdWdodC4NCi0gICAgICAgICAgICAgICAgLy8NCi0gICAgICAgICAgICAgICAgLy8gVGhp
cyBpc3N1ZSBjYW4gYmUgbWl0aWdhdGVkIGJ5IHJlbHlpbmcgb24gdGhlIChmb3Igbm93KSBwcm9w
cmlldGFyeQ0KLSAgICAgICAgICAgICAgICAvLyBgbG9jYXRpb24uYW5jZXN0b3JPcmlnaW5zYCBw
cm9wZXJ0eSB3aGljaCByZXR1cm5zIGFuIG9yZGVyZWQgbGlzdCBvZg0KLSAgICAgICAgICAgICAg
ICAvLyB0aGUgb3JpZ2lucyBvZiBlbmNsb3Npbmcgd2luZG93cy4gU2VlOg0KLSAgICAgICAgICAg
ICAgICAvLyBodHRwOi8vdHJhYy53ZWJraXQub3JnL2NoYW5nZXNldC8xMTM5NDUuDQotICAgICAg
ICAgICAgICAgIGlmKG9yaWdpbnMpIHsNCi0gICAgICAgICAgICAgICAgICAgIHNvID0gKGxvY2F0
aW9uLm9yaWdpbiA9PSBvcmlnaW5zW2ldKTsNCi0gICAgICAgICAgICAgICAgfQ0KLSAgICAgICAg
ICAgICAgICBlbHNlDQotICAgICAgICAgICAgICAgIHsNCi0gICAgICAgICAgICAgICAgICAgIHNv
ID0gaXNfc2FtZV9vcmlnaW4odyk7DQotICAgICAgICAgICAgICAgIH0NCi0gICAgICAgICAgICAg
ICAgY2FjaGUucHVzaChbdywgc29dKTsNCi0gICAgICAgICAgICAgICAgaSsrOw0KLSAgICAgICAg
ICAgIH0NCi0gICAgICAgICAgICB3ID0gd2luZG93Lm9wZW5lcjsNCi0gICAgICAgICAgICBpZih3
KQ0KLSAgICAgICAgICAgIHsNCi0gICAgICAgICAgICAgICAgLy8gd2luZG93Lm9wZW5lciBpc24n
dCBpbmNsdWRlZCBpbiB0aGUgYGxvY2F0aW9uLmFuY2VzdG9yT3JpZ2luc2AgcHJvcC4NCi0gICAg
ICAgICAgICAgICAgLy8gV2UnbGwganVzdCBoYXZlIHRvIGRlYWwgd2l0aCBhIHNpbXBsZSBjaGVj
ayBhbmQgYW4gZXJyb3IgbXNnIG9uIFdlYktpdA0KLSAgICAgICAgICAgICAgICAvLyBicm93c2Vy
cyBpbiB0aGlzIGNhc2UuDQotICAgICAgICAgICAgICAgIGNhY2hlLnB1c2goW3csIGlzX3NhbWVf
b3JpZ2luKHcpXSk7DQotICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgIGZvckVhY2hfd2luZG93
cy5yZXN1bHRfY2FjaGUgPSBjYWNoZTsNCi0gICAgICAgIH0NCi0NCi0gICAgICAgIGZvckVhY2go
Y2FjaGUsDQotICAgICAgICAgICAgICAgIGZ1bmN0aW9uKGEpDQotICAgICAgICAgICAgICAgIHsN
Ci0gICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrLmFwcGx5KG51bGwsIGEpOw0KLSAgICAgICAg
ICAgICAgICB9KTsNCi0gICAgfQ0KLQ0KLSAgICBmdW5jdGlvbiBpc19zYW1lX29yaWdpbih3KSB7
DQotICAgICAgICB0cnkgew0KLSAgICAgICAgICAgICdyYW5kb21fcHJvcCcgaW4gdzsNCi0gICAg
ICAgICAgICByZXR1cm4gdHJ1ZTsNCi0gICAgICAgIH0gY2F0Y2goZSkgew0KLSAgICAgICAgICAg
IHJldHVybiBmYWxzZTsNCi0gICAgICAgIH0NCi0gICAgfQ0KLQ0KLSAgICBmdW5jdGlvbiBzdXBw
b3J0c19wb3N0X21lc3NhZ2UodykNCi0gICAgew0KLSAgICAgICAgdmFyIHN1cHBvcnRzOw0KLSAg
ICAgICAgdmFyIHR5cGU7DQotICAgICAgICAvLyBHaXZlbiBJRSAgaW1wbGVtZW50cyBwb3N0TWVz
c2FnZSBhY3Jvc3MgbmVzdGVkIGlmcmFtZXMgYnV0IG5vdCBhY3Jvc3MNCi0gICAgICAgIC8vIHdp
bmRvd3Mgb3IgdGFicywgeW91IGNhbid0IGluZmVyIGNyb3NzLW9yaWdpbiBjb21tdW5pY2F0aW9u
IGZyb20gdGhlIHByZXNlbmNlDQotICAgICAgICAvLyBvZiBwb3N0TWVzc2FnZSBvbiB0aGUgY3Vy
cmVudCB3aW5kb3cgb2JqZWN0IG9ubHkuDQotICAgICAgICAvLw0KLSAgICAgICAgLy8gVG91Y2hp
bmcgdGhlIHBvc3RNZXNzYWdlIHByb3Agb24gYSB3aW5kb3cgY2FuIHRocm93IGlmIHRoZSB3aW5k
b3cgaXMNCi0gICAgICAgIC8vIG5vdCBmcm9tIHRoZSBzYW1lIG9yaWdpbiBBTkQgcG9zdCBtZXNz
YWdlIGlzIG5vdCBzdXBwb3J0ZWQgaW4gdGhhdA0KLSAgICAgICAgLy8gYnJvd3Nlci4gU28ganVz
dCBkb2luZyBhbiBleGlzdGVuY2UgdGVzdCBoZXJlIHdvbid0IGRvLCB5b3UgYWxzbyBuZWVkDQot
ICAgICAgICAvLyB0byB3cmFwIGl0IGluIGEgdHJ5Li5jYWN0aCBibG9jay4NCi0gICAgICAgIHRy
eQ0KLSAgICAgICAgew0KLSAgICAgICAgICAgIHR5cGUgPSB0eXBlb2Ygdy5wb3N0TWVzc2FnZTsN
Ci0gICAgICAgICAgICBpZiAodHlwZSA9PT0gImZ1bmN0aW9uIikNCi0gICAgICAgICAgICB7DQot
ICAgICAgICAgICAgICAgIHN1cHBvcnRzID0gdHJ1ZTsNCi0gICAgICAgICAgICB9DQotICAgICAg
ICAgICAgLy8gSUU4IHN1cHBvcnRzIHBvc3RNZXNzYWdlLCBidXQgaW1wbGVtZW50cyBpdCBhcyBh
IGhvc3Qgb2JqZWN0IHdoaWNoDQotICAgICAgICAgICAgLy8gcmV0dXJucyAib2JqZWN0IiBhcyBp
dHMgYHR5cGVvZmAuDQotICAgICAgICAgICAgZWxzZSBpZiAodHlwZSA9PT0gIm9iamVjdCIpDQot
ICAgICAgICAgICAgew0KLSAgICAgICAgICAgICAgICBzdXBwb3J0cyA9IHRydWU7DQotICAgICAg
ICAgICAgfQ0KLSAgICAgICAgICAgIC8vIFRoaXMgaXMgdGhlIGNhc2Ugd2hlcmUgcG9zdE1lc3Nh
Z2UgaXNuJ3Qgc3VwcG9ydGVkIEFORCBhY2Nlc3NpbmcgYQ0KLSAgICAgICAgICAgIC8vIHdpbmRv
dyBwcm9wZXJ0eSBhY3Jvc3Mgb3JpZ2lucyBkb2VzIE5PVCB0aHJvdyAoZS5nLiBvbGQgU2FmYXJp
IGJyb3dzZXIpLg0KLSAgICAgICAgICAgIGVsc2UNCi0gICAgICAgICAgICB7DQotICAgICAgICAg
ICAgICAgIHN1cHBvcnRzID0gZmFsc2U7DQotICAgICAgICAgICAgfQ0KLSAgICAgICAgfQ0KLSAg
ICAgICAgY2F0Y2goZSkgew0KLSAgICAgICAgICAgIC8vIFRoaXMgaXMgdGhlIGNhc2Ugd2hlcmUg
cG9zdE1lc3NhZ2UgaXNuJ3Qgc3VwcG9ydGVkIEFORCBhY2Nlc3NpbmcgYQ0KLSAgICAgICAgICAg
IC8vIHdpbmRvdyBwcm9wZXJ0eSBhY3Jvc3Mgb3JpZ2lucyB0aHJvd3MgKGUuZy4gb2xkIEZpcmVm
b3ggYnJvd3NlcikuDQotICAgICAgICAgICAgc3VwcG9ydHMgPSBmYWxzZTsNCi0gICAgICAgIH0N
Ci0gICAgICAgIHJldHVybiBzdXBwb3J0czsNCi0gICAgfQ0KLX0pKCk7DQotLy8gdmltOiBzZXQg
ZXhwYW5kdGFiIHNoaWZ0d2lkdGg9NCB0YWJzdG9wPTQ6DQorLyoKK0Rpc3RyaWJ1dGVkIHVuZGVy
IGJvdGggdGhlIFczQyBUZXN0IFN1aXRlIExpY2Vuc2UgWzFdIGFuZCB0aGUgVzNDCiszLWNsYXVz
ZSBCU0QgTGljZW5zZSBbMl0uIFRvIGNvbnRyaWJ1dGUgdG8gYSBXM0MgVGVzdCBTdWl0ZSwgc2Vl
IHRoZQorcG9saWNpZXMgYW5kIGNvbnRyaWJ1dGlvbiBmb3JtcyBbM10uCisKK1sxXSBodHRwOi8v
d3d3LnczLm9yZy9Db25zb3J0aXVtL0xlZ2FsLzIwMDgvMDQtdGVzdHN1aXRlLWxpY2Vuc2UKK1sy
XSBodHRwOi8vd3d3LnczLm9yZy9Db25zb3J0aXVtL0xlZ2FsLzIwMDgvMDMtYnNkLWxpY2Vuc2UK
K1szXSBodHRwOi8vd3d3LnczLm9yZy8yMDA0LzEwLzI3LXRlc3RjYXNlcworKi8KKworLyoKKyAq
ID09IEludHJvZHVjdGlvbiA9PQorICoKKyAqIFRoaXMgZmlsZSBwcm92aWRlcyBhIGZyYW1ld29y
ayBmb3Igd3JpdGluZyB0ZXN0Y2FzZXMuIEl0IGlzIGludGVuZGVkIHRvCisgKiBwcm92aWRlIGEg
Y29udmVuaWVudCBBUEkgZm9yIG1ha2luZyBjb21tb24gYXNzZXJ0aW9ucywgYW5kIHRvIHdvcmsg
Ym90aAorICogZm9yIHRlc3Rpbmcgc3luY2hyb25vdXMgYW5kIGFzeW5jaHJvbm91cyBET00gZmVh
dHVyZXMgaW4gYSB3YXkgdGhhdAorICogcHJvbW90ZXMgY2xlYXIsIHJvYnVzdCwgdGVzdHMuCisg
KgorICogPT0gQmFzaWMgVXNhZ2UgPT0KKyAqCisgKiBUbyB1c2UgdGhpcyBmaWxlLCBpbXBvcnQg
dGhlIHNjcmlwdCBhbmQgdGhlIHRlc3RoYXJuZXNzcmVwb3J0IHNjcmlwdCBpbnRvCisgKiB0aGUg
dGVzdCBkb2N1bWVudDoKKyAqIDxzY3JpcHQgc3JjPSIvcmVzb3VyY2VzL3Rlc3RoYXJuZXNzLmpz
Ij48L3NjcmlwdD4KKyAqIDxzY3JpcHQgc3JjPSIvcmVzb3VyY2VzL3Rlc3RoYXJuZXNzcmVwb3J0
LmpzIj48L3NjcmlwdD4KKyAqCisgKiBXaXRoaW4gZWFjaCBmaWxlIG9uZSBtYXkgZGVmaW5lIG9u
ZSBvciBtb3JlIHRlc3RzLiBFYWNoIHRlc3QgaXMgYXRvbWljCisgKiBpbiB0aGUgc2Vuc2UgdGhh
dCBhIHNpbmdsZSB0ZXN0IGhhcyBhIHNpbmdsZSByZXN1bHQgKHBhc3MvZmFpbC90aW1lb3V0KS4K
KyAqIFdpdGhpbiBlYWNoIHRlc3Qgb25lIG1heSBoYXZlIGEgbnVtYmVyIG9mIGFzc2VydHMuIFRo
ZSB0ZXN0IGZhaWxzIGF0IHRoZQorICogZmlyc3QgZmFpbGluZyBhc3NlcnQsIGFuZCB0aGUgcmVt
YWluZGVyIG9mIHRoZSB0ZXN0IGlzICh0eXBpY2FsbHkpIG5vdCBydW4uCisgKgorICogSWYgdGhl
IGZpbGUgY29udGFpbmluZyB0aGUgdGVzdHMgaXMgYSBIVE1MIGZpbGUgd2l0aCBhbiBlbGVtZW50
IG9mIGlkICJsb2ciCisgKiB0aGlzIHdpbGwgYmUgcG9wdWxhdGVkIHdpdGggYSB0YWJsZSBjb250
YWluaW5nIHRoZSB0ZXN0IHJlc3VsdHMgYWZ0ZXIgYWxsCisgKiB0aGUgdGVzdHMgaGF2ZSBydW4u
CisgKgorICogTk9URTogQnkgZGVmYXVsdCB0ZXN0cyBtdXN0IGJlIGNyZWF0ZWQgYmVmb3JlIHRo
ZSBsb2FkIGV2ZW50IGZpcmVzLiBGb3Igd2F5cworICogICAgICAgdG8gY3JlYXRlIHRlc3RzIGFm
dGVyIHRoZSBsb2FkIGV2ZW50LCBzZWUgIkRldGVybWluaW5nIHdoZW4gYWxsIHRlc3RzCisgKiAg
ICAgICBhcmUgY29tcGxldGUiLCBiZWxvdworICoKKyAqID09IFN5bmNocm9ub3VzIFRlc3RzID09
CisgKgorICogVG8gY3JlYXRlIGEgc3luY2hyb25vdXMgdGVzdCB1c2UgdGhlIHRlc3QoKSBmdW5j
dGlvbjoKKyAqCisgKiB0ZXN0KHRlc3RfZnVuY3Rpb24sIG5hbWUsIHByb3BlcnRpZXMpCisgKgor
ICogdGVzdF9mdW5jdGlvbiBpcyBhIGZ1bmN0aW9uIHRoYXQgY29udGFpbnMgdGhlIGNvZGUgdG8g
dGVzdC4gRm9yIGV4YW1wbGUgYQorICogdHJpdmlhbCBwYXNzaW5nIHRlc3Qgd291bGQgYmU6Cisg
KgorICogdGVzdChmdW5jdGlvbigpIHthc3NlcnRfdHJ1ZSh0cnVlKX0sICJhc3NlcnRfdHJ1ZSB3
aXRoIHRydWUiKQorICoKKyAqIFRoZSBmdW5jdGlvbiBwYXNzZWQgaW4gaXMgcnVuIGluIHRoZSB0
ZXN0KCkgY2FsbC4KKyAqCisgKiBwcm9wZXJ0aWVzIGlzIGFuIG9iamVjdCB0aGF0IG92ZXJyaWRl
cyBkZWZhdWx0IHRlc3QgcHJvcGVydGllcy4gVGhlCisgKiByZWNvZ25pc2VkIHByb3BlcnRpZXMg
YXJlOgorICogICAgdGltZW91dCAtIHRoZSB0ZXN0IHRpbWVvdXQgaW4gbXMKKyAqCisgKiBlLmcu
CisgKiB0ZXN0KHRlc3RfZnVuY3Rpb24sICJTYW1wbGUgdGVzdCIsIHt0aW1lb3V0OjEwMDB9KQor
ICoKKyAqIHdvdWxkIHJ1biB0ZXN0X2Z1bmN0aW9uIHdpdGggYSB0aW1lb3V0IG9mIDFzLgorICoK
KyAqIEFkZGl0aW9uYWxseSwgdGVzdC1zcGVjaWZpYyBtZXRhZGF0YSBjYW4gYmUgcGFzc2VkIGlu
IHRoZSBwcm9wZXJ0aWVzLiBUaGVzZQorICogYXJlIHVzZWQgd2hlbiB0aGUgaW5kaXZpZHVhbCB0
ZXN0IGhhcyBkaWZmZXJlbnQgbWV0YWRhdGEgZnJvbSB0aGF0IHN0b3JlZAorICogaW4gdGhlIDxo
ZWFkPi4KKyAqIFRoZSByZWNvZ25pemVkIG1ldGFkYXRhIHByb3BlcnRpZXMgYXJlOgorICoKKyAq
ICAgIGhlbHAgLSBUaGUgdXJsIG9yIGFuIGFycmF5IG9mIHVybHMgb2YgdGhlIHBhcnQocykgb2Yg
dGhlIHNwZWNpZmljYXRpb24ocykKKyAqICAgICAgICAgICBiZWluZyB0ZXN0ZWQKKyAqCisgKiAg
ICBhc3NlcnQgLSBBIGh1bWFuIHJlYWRhYmxlIGRlc2NyaXB0aW9uIG9mIHdoYXQgdGhlIHRlc3Qg
aXMgYXR0ZW1wdGluZworICogICAgICAgICAgICAgdG8gcHJvdmUKKyAqCisgKiAgICBhdXRob3Ig
LSBOYW1lIGFuZCBjb250YWN0IGluZm9ybWF0aW9uIGZvciB0aGUgYXV0aG9yIG9mIHRoZSB0ZXN0
IGluIHRoZQorICogICAgICAgICAgICAgZm9ybWF0OiAiTmFtZSA8ZW1haWxfYWRkcj4iIG9yICJO
YW1lIGh0dHA6Ly9jb250YWN0L3VybCIKKyAqCisgKiA9PSBBc3luY2hyb25vdXMgVGVzdHMgPT0K
KyAqCisgKiBUZXN0aW5nIGFzeW5jaHJvbm91cyBmZWF0dXJlcyBpcyBzb21ld2hhdCBtb3JlIGNv
bXBsZXggc2luY2UgdGhlIHJlc3VsdCBvZgorICogYSB0ZXN0IG1heSBkZXBlbmQgb24gb25lIG9y
IG1vcmUgZXZlbnRzIG9yIG90aGVyIGNhbGxiYWNrcy4gVGhlIEFQSSBwcm92aWRlZAorICogZm9y
IHRlc3RpbmcgdGhlc2UgZmVhdHVyZXMgaXMgaW5kZW5kZWQgdG8gYmUgcmF0aGVyIGxvdy1sZXZl
bCBidXQgaG9wZWZ1bGx5CisgKiBhcHBsaWNhYmxlIHRvIG1hbnkgc2l0dWF0aW9ucy4KKyAqCisg
KiBUbyBjcmVhdGUgYSB0ZXN0LCBvbmUgc3RhcnRzIGJ5IGdldHRpbmcgYSBUZXN0IG9iamVjdCB1
c2luZyBhc3luY190ZXN0OgorICoKKyAqIGFzeW5jX3Rlc3QobmFtZSwgcHJvcGVydGllcykKKyAq
CisgKiBlLmcuCisgKiB2YXIgdCA9IGFzeW5jX3Rlc3QoIlNpbXBsZSBhc3luYyB0ZXN0IikKKyAq
CisgKiBBc3NlcnRpb25zIGNhbiBiZSBhZGRlZCB0byB0aGUgdGVzdCBieSBjYWxsaW5nIHRoZSBz
dGVwIG1ldGhvZCBvZiB0aGUgdGVzdAorICogb2JqZWN0IHdpdGggYSBmdW5jdGlvbiBjb250YWlu
aW5nIHRoZSB0ZXN0IGFzc2VydGlvbnM6CisgKgorICogdC5zdGVwKGZ1bmN0aW9uKCkge2Fzc2Vy
dF90cnVlKHRydWUpfSk7CisgKgorICogV2hlbiBhbGwgdGhlIHN0ZXBzIGFyZSBjb21wbGV0ZSwg
dGhlIGRvbmUoKSBtZXRob2QgbXVzdCBiZSBjYWxsZWQ6CisgKgorICogdC5kb25lKCk7CisgKgor
ICogQXMgYSBjb252ZW5pZW5jZSwgYXN5bmNfdGVzdCBjYW4gYWxzbyB0YWtlcyBhIGZ1bmN0aW9u
IGFzIGZpcnN0IGFyZ3VtZW50LgorICogVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgd2l0aCB0aGUg
dGVzdCBvYmplY3QgYXMgYm90aCBpdHMgYHRoaXNgIG9iamVjdCBhbmQKKyAqIGZpcnN0IGFyZ3Vt
ZW50LiBUaGUgYWJvdmUgZXhhbXBsZSBjYW4gYmUgcmV3cml0dGVuIGFzOgorICoKKyAqIGFzeW5j
X3Rlc3QoZnVuY3Rpb24odCkgeworICogICAgIG9iamVjdC5zb21lX2V2ZW50ID0gZnVuY3Rpb24o
KSB7CisgKiAgICAgICAgIHQuc3RlcChmdW5jdGlvbiAoKXthc3NlcnRfdHJ1ZSh0cnVlKTsgdC5k
b25lKCk7fSk7CisgKiAgICAgfTsKKyAqIH0sICJTaW1wbGUgYXN5bmMgdGVzdCIpOworICoKKyAq
IHdoaWNoIGF2b2lkcyBjbHV0dGVyaW5nIHRoZSBnbG9iYWwgc2NvcGUgd2l0aCByZWZlcmVuY2Vz
IHRvIGFzeW5jCisgKiB0ZXN0cyBpbnN0YW5jZXMuCisgKgorICogVGhlIHByb3BlcnRpZXMgYXJn
dW1lbnQgaXMgaWRlbnRpY2FsIHRvIHRoYXQgZm9yIHRlc3QoKS4KKyAqCisgKiBJbiBtYW55IGNh
c2VzIGl0IGlzIGNvbnZlbmllbnQgdG8gcnVuIGEgc3RlcCBpbiByZXNwb25zZSB0byBhbiBldmVu
dCBvciBhCisgKiBjYWxsYmFjay4gQSBjb252ZW5pZW50IG1ldGhvZCBvZiBkb2luZyB0aGlzIGlz
IHRocm91Z2ggdGhlIHN0ZXBfZnVuYyBtZXRob2QKKyAqIHdoaWNoIHJldHVybnMgYSBmdW5jdGlv
biB0aGF0LCB3aGVuIGNhbGxlZCBydW5zIGEgdGVzdCBzdGVwLiBGb3IgZXhhbXBsZQorICoKKyAq
IG9iamVjdC5zb21lX2V2ZW50ID0gdC5zdGVwX2Z1bmMoZnVuY3Rpb24oZSkge2Fzc2VydF90cnVl
KGUuYSl9KTsKKyAqCisgKiA9PSBNYWtpbmcgYXNzZXJ0aW9ucyA9PQorICoKKyAqIEZ1bmN0aW9u
cyBmb3IgbWFraW5nIGFzc2VydGlvbnMgc3RhcnQgYXNzZXJ0XworICogVGhlIGJlc3Qgd2F5IHRv
IGdldCBhIGxpc3QgaXMgdG8gbG9vayBpbiB0aGlzIGZpbGUgZm9yIGZ1bmN0aW9ucyBuYW1lcwor
ICogbWF0Y2hpbmcgdGhhdCBwYXR0ZXJuLiBUaGUgZ2VuZXJhbCBzaWduYXR1cmUgaXMKKyAqCisg
KiBhc3NlcnRfc29tZXRoaW5nKGFjdHVhbCwgZXhwZWN0ZWQsIGRlc2NyaXB0aW9uKQorICoKKyAq
IGFsdGhvdWdoIG5vdCBhbGwgYXNzZXJ0aW9ucyBwcmVjaXNlbHkgbWF0Y2ggdGhpcyBwYXR0ZXJu
IGUuZy4gYXNzZXJ0X3RydWUKKyAqIG9ubHkgdGFrZXMgYWN0dWFsIGFuZCBkZXNjcmlwdGlvbiBh
cyBhcmd1bWVudHMuCisgKgorICogVGhlIGRlc2NyaXB0aW9uIHBhcmFtZXRlciBpcyB1c2VkIHRv
IHByZXNlbnQgbW9yZSB1c2VmdWwgZXJyb3IgbWVzc2FnZXMgd2hlbgorICogYSB0ZXN0IGZhaWxz
CisgKgorICogTk9URTogQWxsIGFzc2VydHMgbXVzdCBiZSBsb2NhdGVkIGluIGEgdGVzdCgpIG9y
IGEgc3RlcCBvZiBhbiBhc3luY190ZXN0KCkuCisgKiAgICAgICBhc3NlcnRzIG91dHNpZGUgdGhl
c2UgcGxhY2VzIHdvbid0IGJlIGRldGVjdGVkIGNvcnJlY3RseSBieSB0aGUgaGFybmVzcworICog
ICAgICAgYW5kIG1heSBjYXVzZSBhIGZpbGUgdG8gc3RvcCB0ZXN0aW5nLgorICoKKyAqID09IENs
ZWFudXAgPT0KKyAqCisgKiBPY2Nhc2lvbmFsbHkgdGVzdHMgbWF5IGNyZWF0ZSBzdGF0ZSB0aGF0
IHdpbGwgcGVyc2lzdCBiZXlvbmQgdGhlIHRlc3QgaXRzZWxmLgorICogSW4gb3JkZXIgdG8gZW5z
dXJlIHRoYXQgdGVzdHMgYXJlIGluZGVwZW5kZW50LCBzdWNoIHN0YXRlIHNob3VsZCBiZSBjbGVh
bmVkCisgKiB1cCBvbmNlIHRoZSB0ZXN0IGhhcyBhIHJlc3VsdC4gVGhpcyBjYW4gYmUgYWNoaWV2
ZWQgYnkgYWRkaW5nIGNsZWFudXAKKyAqIGNhbGxiYWNrcyB0byB0aGUgdGVzdC4gU3VjaCBjYWxs
YmFja3MgYXJlIHJlZ2lzdGVyZWQgdXNpbmcgdGhlIGFkZF9jbGVhbnVwCisgKiBmdW5jdGlvbiBv
biB0aGUgdGVzdCBvYmplY3QuIEFsbCByZWdpc3RlcmVkIGNhbGxiYWNrcyB3aWxsIGJlIHJ1biBh
cyBzb29uIGFzCisgKiB0aGUgdGVzdCByZXN1bHQgaXMga25vd24uIEZvciBleGFtcGxlCisgKiB0
ZXN0KGZ1bmN0aW9uKCkgeworICogICAgICAgICAgd2luZG93LnNvbWVfZ2xvYmFsID0gImV4YW1w
bGUiOworICogICAgICAgICAgdGhpcy5hZGRfY2xlYW51cChmdW5jdGlvbigpIHtkZWxldGUgd2lu
ZG93LnNvbWVfZ2xvYmFsfSk7CisgKiAgICAgICAgICBhc3NlcnRfdHJ1ZShmYWxzZSk7CisgKiAg
ICAgIH0pOworICoKKyAqID09IEhhcm5lc3MgVGltZW91dCA9PQorICoKKyAqIFRoZSBvdmVyYWxs
IGhhcm5lc3MgYWRtaXRzIHR3byB0aW1lb3V0IHZhbHVlcyAibm9ybWFsIiAodGhlCisgKiBkZWZh
dWx0KSBhbmQgImxvbmciLCB1c2VkIGZvciB0ZXN0cyB3aGljaCBoYXZlIGFuIHVudXN1YWxseSBs
b25nCisgKiBydW50aW1lLiBBZnRlciB0aGUgdGltZW91dCBpcyByZWFjaGVkLCB0aGUgaGFybmVz
cyB3aWxsIHN0b3AKKyAqIHdhaXRpbmcgZm9yIGZ1cnRoZXIgYXN5bmMgdGVzdHMgdG8gY29tcGxl
dGUuIEJ5IGRlZmF1bHQgdGhlCisgKiB0aW1lb3V0cyBhcmUgc2V0IHRvIDEwcyBhbmQgNjBzLCBy
ZXNwZWN0aXZlbHksIGJ1dCBtYXkgYmUgY2hhbmdlZAorICogd2hlbiB0aGUgdGVzdCBpcyBydW4g
b24gaGFyZHdhcmUgd2l0aCBkaWZmZXJlbnQgcGVyZm9ybWFuY2UKKyAqIGNoYXJhY3RlcmlzdGlj
cyB0byBhIGNvbW1vbiBkZXNrdG9wIGNvbXB1dGVyLiAgSW4gb3JkZXIgdG8gb3B0LWluCisgKiB0
byB0aGUgbG9uZ2VyIHRlc3QgdGltZW91dCwgdGhlIHRlc3QgbXVzdCBzcGVjaWZ5IGEgbWV0YSBl
bGVtZW50OgorICogPG1ldGEgbmFtZT0idGltZW91dCIgY29udGVudD0ibG9uZyI+CisgKgorICog
PT0gU2V0dXAgPT0KKyAqCisgKiBTb21ldGltZXMgdGVzdHMgcmVxdWlyZSBub24tdHJpdmlhbCBz
ZXR1cCB0aGF0IG1heSBmYWlsLiBGb3IgdGhpcyBwdXJwb3NlCisgKiB0aGVyZSBpcyBhIHNldHVw
KCkgZnVuY3Rpb24sIHRoYXQgbWF5IGJlIGNhbGxlZCB3aXRoIG9uZSBvciB0d28gYXJndW1lbnRz
LgorICogVGhlIHR3byBhcmd1bWVudCB2ZXJzaW9uIGlzOgorICoKKyAqIHNldHVwKGZ1bmMsIHBy
b3BlcnRpZXMpCisgKgorICogVGhlIG9uZSBhcmd1bWVudCB2ZXJzaW9ucyBtYXkgb21pdCBlaXRo
ZXIgYXJndW1lbnQuCisgKiBmdW5jIGlzIGEgZnVuY3Rpb24gdG8gYmUgcnVuIHN5bmNocm9ub3Vz
bHkuIHNldHVwKCkgYmVjb21lcyBhIG5vLW9wIG9uY2UKKyAqIGFueSB0ZXN0cyBoYXZlIHJldHVy
bmVkIHJlc3VsdHMuIFByb3BlcnRpZXMgYXJlIGdsb2JhbCBwcm9wZXJ0aWVzIG9mIHRoZSB0ZXN0
CisgKiBoYXJuZXNzLiBDdXJyZW50bHkgcmVjb2duaXNlZCBwcm9wZXJ0aWVzIGFyZToKKyAqCisg
KgorICogZXhwbGljaXRfZG9uZSAtIFdhaXQgZm9yIGFuIGV4cGxpY2l0IGNhbGwgdG8gZG9uZSgp
IGJlZm9yZSBkZWNsYXJpbmcgYWxsCisgKiAgICAgICAgICAgICAgICAgdGVzdHMgY29tcGxldGUg
KHNlZSBiZWxvdykKKyAqCisgKiBvdXRwdXRfZG9jdW1lbnQgLSBUaGUgZG9jdW1lbnQgdG8gd2hp
Y2ggcmVzdWx0cyBzaG91bGQgYmUgbG9nZ2VkLiBCeSBkZWZhdWx0CisgKiAgICAgICAgICAgICAg
ICAgICB0aGlzIGlzIHRoZSBjdXJyZW50IGRvY3VtZW50IGJ1dCBjb3VsZCBiZSBhbiBhbmNlc3Rv
cgorICogICAgICAgICAgICAgICAgICAgZG9jdW1lbnQgaW4gc29tZSBjYXNlcyBlLmcuIGEgU1ZH
IHRlc3QgbG9hZGVkIGluIGFuIEhUTUwKKyAqICAgICAgICAgICAgICAgICAgIHdyYXBwZXIKKyAq
CisgKiBleHBsaWNpdF90aW1lb3V0IC0gZGlzYWJsZSBmaWxlIHRpbWVvdXQ7IG9ubHkgc3RvcCB3
YWl0aW5nIGZvciByZXN1bHRzCisgKiAgICAgICAgICAgICAgICAgICAgd2hlbiB0aGUgdGltZW91
dCgpIGZ1bmN0aW9uIGlzIGNhbGxlZCAodHlwaWNhbGx5IGZvcgorICogICAgICAgICAgICAgICAg
ICAgIHVzZSB3aGVuIGludGVncmF0aW5nIHdpdGggc29tZSBleGlzdGluZyB0ZXN0IGZyYW1ld29y
aworICogICAgICAgICAgICAgICAgICAgIHRoYXQgaGFzIGl0cyBvd24gdGltZW91dCBtZWNoYW5p
c20pLgorICoKKyAqIGFsbG93X3VuY2F1Z2h0X2V4Y2VwdGlvbiAtIGRvbid0IHRyZWF0IGFuIHVu
Y2F1Z2h0IGV4Y2VwdGlvbiBhcyBhbiBlcnJvcjsKKyAqICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIG5lZWRlZCB3aGVuIGUuZy4gdGVzdGluZyB0aGUgd2luZG93Lm9uZXJyb3IKKyAqICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGhhbmRsZXIuCisgKgorICogdGltZW91dF9tdWx0aXBsaWVy
IC0gTXVsdGlwbGllciB0byBhcHBseSB0byBwZXItdGVzdCB0aW1lb3V0cy4KKyAqCisgKiA9PSBE
ZXRlcm1pbmluZyB3aGVuIGFsbCB0ZXN0cyBhcmUgY29tcGxldGUgPT0KKyAqCisgKiBCeSBkZWZh
dWx0IHRoZSB0ZXN0IGhhcm5lc3Mgd2lsbCBhc3N1bWUgdGhlcmUgYXJlIG5vIG1vcmUgcmVzdWx0
cyB0byBjb21lCisgKiB3aGVuOgorICogMSkgVGhlcmUgYXJlIG5vIFRlc3Qgb2JqZWN0cyB0aGF0
IGhhdmUgYmVlbiBjcmVhdGVkIGJ1dCBub3QgY29tcGxldGVkCisgKiAyKSBUaGUgbG9hZCBldmVu
dCBvbiB0aGUgZG9jdW1lbnQgaGFzIGZpcmVkCisgKgorICogVGhpcyBiZWhhdmlvdXIgY2FuIGJl
IG92ZXJyaWRkZW4gYnkgc2V0dGluZyB0aGUgZXhwbGljaXRfZG9uZSBwcm9wZXJ0eSB0bworICog
dHJ1ZSBpbiBhIGNhbGwgdG8gc2V0dXAoKS4gSWYgZXhwbGljaXRfZG9uZSBpcyB0cnVlLCB0aGUg
dGVzdCBoYXJuZXNzIHdpbGwKKyAqIG5vdCBhc3N1bWUgaXQgaXMgZG9uZSB1bnRpbCB0aGUgZ2xv
YmFsIGRvbmUoKSBmdW5jdGlvbiBpcyBjYWxsZWQuIE9uY2UgZG9uZSgpCisgKiBpcyBjYWxsZWQs
IHRoZSB0d28gY29uZGl0aW9ucyBhYm92ZSBhcHBseSBsaWtlIG5vcm1hbC4KKyAqCisgKiA9PSBH
ZW5lcmF0aW5nIHRlc3RzID09CisgKgorICogTk9URTogdGhpcyBmdW5jdGlvbmFsaXR5IG1heSBi
ZSByZW1vdmVkCisgKgorICogVGhlcmUgYXJlIHNjZW5hcmlvcyBpbiB3aGljaCBpcyBpcyBkZXNp
cmFibGUgdG8gY3JlYXRlIGEgbGFyZ2UgbnVtYmVyIG9mCisgKiAoc3luY2hyb25vdXMpIHRlc3Rz
IHRoYXQgYXJlIGludGVybmFsbHkgc2ltaWxhciBidXQgdmFyeSBpbiB0aGUgcGFyYW1ldGVycwor
ICogdXNlZC4gVG8gbWFrZSB0aGlzIGVhc2llciwgdGhlIGdlbmVyYXRlX3Rlc3RzIGZ1bmN0aW9u
IGFsbG93cyBhIHNpbmdsZQorICogZnVuY3Rpb24gdG8gYmUgY2FsbGVkIHdpdGggZWFjaCBzZXQg
b2YgcGFyYW1ldGVycyBpbiBhIGxpc3Q6CisgKgorICogZ2VuZXJhdGVfdGVzdHModGVzdF9mdW5j
dGlvbiwgcGFyYW1ldGVyX2xpc3RzLCBwcm9wZXJ0aWVzKQorICoKKyAqIEZvciBleGFtcGxlOgor
ICoKKyAqIGdlbmVyYXRlX3Rlc3RzKGFzc2VydF9lcXVhbHMsIFsKKyAqICAgICBbIlN1bSBvbmUg
YW5kIG9uZSIsIDErMSwgMl0sCisgKiAgICAgWyJTdW0gb25lIGFuZCB6ZXJvIiwgMSswLCAxXQor
ICogICAgIF0pCisgKgorICogSXMgZXF1aXZhbGVudCB0bzoKKyAqCisgKiB0ZXN0KGZ1bmN0aW9u
KCkge2Fzc2VydF9lcXVhbHMoMSsxLCAyKX0sICJTdW0gb25lIGFuZCBvbmUiKQorICogdGVzdChm
dW5jdGlvbigpIHthc3NlcnRfZXF1YWxzKDErMCwgMSl9LCAiU3VtIG9uZSBhbmQgemVybyIpCisg
KgorICogTm90ZSB0aGF0IHRoZSBmaXJzdCBpdGVtIGluIGVhY2ggcGFyYW1ldGVyIGxpc3QgY29y
cmVzcG9uZHMgdG8gdGhlIG5hbWUgb2YKKyAqIHRoZSB0ZXN0LgorICoKKyAqIFRoZSBwcm9wZXJ0
aWVzIGFyZ3VtZW50IGlzIGlkZW50aWNhbCB0byB0aGF0IGZvciB0ZXN0KCkuIFRoaXMgbWF5IGJl
IGEKKyAqIHNpbmdsZSBvYmplY3QgKHVzZWQgZm9yIGFsbCBnZW5lcmF0ZWQgdGVzdHMpIG9yIGFu
IGFycmF5LgorICoKKyAqID09IENhbGxiYWNrIEFQSSA9PQorICoKKyAqIFRoZSBmcmFtZXdvcmsg
cHJvdmlkZXMgY2FsbGJhY2tzIGNvcnJlc3BvbmRpbmcgdG8gMyBldmVudHM6CisgKgorICogc3Rh
cnQgLSBoYXBwZW5zIHdoZW4gdGhlIGZpcnN0IFRlc3QgaXMgY3JlYXRlZAorICogcmVzdWx0IC0g
aGFwcGVucyB3aGVuIGEgdGVzdCByZXN1bHQgaXMgcmVjaWV2ZWQKKyAqIGNvbXBsZXRlIC0gaGFw
cGVucyB3aGVuIGFsbCByZXN1bHRzIGFyZSByZWNpZXZlZAorICoKKyAqIFRoZSBwYWdlIGRlZmlu
aW5nIHRoZSB0ZXN0cyBtYXkgYWRkIGNhbGxiYWNrcyBmb3IgdGhlc2UgZXZlbnRzIGJ5IGNhbGxp
bmcKKyAqIHRoZSBmb2xsb3dpbmcgbWV0aG9kczoKKyAqCisgKiAgIGFkZF9zdGFydF9jYWxsYmFj
ayhjYWxsYmFjaykgLSBjYWxsYmFjayBjYWxsZWQgd2l0aCBubyBhcmd1bWVudHMKKyAqICAgYWRk
X3Jlc3VsdF9jYWxsYmFjayhjYWxsYmFjaykgLSBjYWxsYmFjayBjYWxsZWQgd2l0aCBhIHRlc3Qg
YXJndW1lbnQKKyAqICAgYWRkX2NvbXBsZXRpb25fY2FsbGJhY2soY2FsbGJhY2spIC0gY2FsbGJh
Y2sgY2FsbGVkIHdpdGggYW4gYXJyYXkgb2YgdGVzdHMKKyAqICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgYW5kIGFuIHN0YXR1cyBvYmplY3QKKyAqCisgKiB0ZXN0cyBoYXZl
IHRoZSBmb2xsb3dpbmcgcHJvcGVydGllczoKKyAqICAgc3RhdHVzOiBBIHN0YXR1cyBjb2RlLiBU
aGlzIGNhbiBiZSBjb21wYXJlZCB0byB0aGUgUEFTUywgRkFJTCwgVElNRU9VVCBhbmQKKyAqICAg
ICAgICAgICBOT1RSVU4gcHJvcGVydGllcyBvbiB0aGUgdGVzdCBvYmplY3QKKyAqICAgbWVzc2Fn
ZTogQSBtZXNzYWdlIGluZGljYXRpbmcgdGhlIHJlYXNvbiBmb3IgZmFpbHVyZS4gSW4gdGhlIGZ1
dHVyZSB0aGlzCisgKiAgICAgICAgICAgIHdpbGwgYWx3YXlzIGJlIGEgc3RyaW5nCisgKgorICog
IFRoZSBzdGF0dXMgb2JqZWN0IGdpdmVzIHRoZSBvdmVyYWxsIHN0YXR1cyBvZiB0aGUgaGFybmVz
cy4gSXQgaGFzIHRoZQorICogIGZvbGxvd2luZyBwcm9wZXJ0aWVzOgorICogICAgc3RhdHVzOiBD
YW4gYmUgY29tcGFyZWQgdG8gdGhlIE9LLCBFUlJPUiBhbmQgVElNRU9VVCBwcm9wZXJ0aWVzCisg
KiAgICBtZXNzYWdlOiBBbiBlcnJvciBtZXNzYWdlIHNldCB3aGVuIHRoZSBzdGF0dXMgaXMgRVJS
T1IKKyAqCisgKiA9PSBFeHRlcm5hbCBBUEkgPT0KKyAqCisgKiBJbiBvcmRlciB0byBjb2xsZWN0
IHRoZSByZXN1bHRzIG9mIG11bHRpcGxlIHBhZ2VzIGNvbnRhaW5pbmcgdGVzdHMsIHRoZSB0ZXN0
CisgKiBoYXJuZXNzIHdpbGwsIHdoZW4gbG9hZGVkIGluIGEgbmVzdGVkIGJyb3dzaW5nIGNvbnRl
eHQsIGF0dGVtcHQgdG8gY2FsbAorICogY2VydGFpbiBmdW5jdGlvbnMgaW4gZWFjaCBhbmNlc3Rv
ciBhbmQgb3BlbmVyIGJyb3dzaW5nIGNvbnRleHQ6CisgKgorICogc3RhcnQgLSBzdGFydF9jYWxs
YmFjaworICogcmVzdWx0IC0gcmVzdWx0X2NhbGxiYWNrCisgKiBjb21wbGV0ZSAtIGNvbXBsZXRp
b25fY2FsbGJhY2sKKyAqCisgKiBUaGVzZSBhcmUgZ2l2ZW4gdGhlIHNhbWUgYXJndW1lbnRzIGFz
IHRoZSBjb3JyZXNwb25kaW5nIGludGVybmFsIGNhbGxiYWNrcworICogZGVzY3JpYmVkIGFib3Zl
LgorICoKKyAqID09IEV4dGVybmFsIEFQSSB0aHJvdWdoIGNyb3NzLWRvY3VtZW50IG1lc3NhZ2lu
ZyA9PQorICoKKyAqIFdoZXJlIHN1cHBvcnRlZCwgdGhlIHRlc3QgaGFybmVzcyB3aWxsIGFsc28g
c2VuZCBtZXNzYWdlcyB1c2luZworICogY3Jvc3MtZG9jdW1lbnQgbWVzc2FnaW5nIHRvIGVhY2gg
YW5jZXN0b3IgYW5kIG9wZW5lciBicm93c2luZyBjb250ZXh0LiBTaW5jZQorICogaXQgdXNlcyB0
aGUgd2lsZGNhcmQga2V5d29yZCAoKiksIGNyb3NzLW9yaWdpbiBjb21tdW5pY2F0aW9uIGlzIGVu
YWJsZWQgYW5kCisgKiBzY3JpcHQgb24gZGlmZmVyZW50IG9yaWdpbnMgY2FuIGNvbGxlY3QgdGhl
IHJlc3VsdHMuCisgKgorICogVGhpcyBBUEkgZm9sbG93cyBzaW1pbGFyIGNvbnZlbnRpb25zIGFz
IHRob3NlIGRlc2NyaWJlZCBhYm92ZSBvbmx5IHNsaWdodGx5CisgKiBtb2RpZmllZCB0byBhY2Nv
bW1vZGF0ZSBtZXNzYWdlIGV2ZW50IEFQSS4gRWFjaCBtZXNzYWdlIGlzIHNlbnQgYnkgdGhlIGhh
cm5lc3MKKyAqIGlzIHBhc3NlZCBhIHNpbmdsZSB2YW5pbGxhIG9iamVjdCwgYXZhaWxhYmxlIGFz
IHRoZSBgZGF0YWAgcHJvcGVydHkgb2YgdGhlCisgKiBldmVudCBvYmplY3QuIFRoZXNlIG9iamVj
dHMgYXJlIHN0cnVjdHVyZXMgYXMgZm9sbG93czoKKyAqCisgKiBzdGFydCAtIHsgdHlwZTogInN0
YXJ0IiB9CisgKiByZXN1bHQgLSB7IHR5cGU6ICJyZXN1bHQiLCB0ZXN0OiBUZXN0IH0KKyAqIGNv
bXBsZXRlIC0geyB0eXBlOiAiY29tcGxldGUiLCB0ZXN0czogW1Rlc3QsIC4uLl0sIHN0YXR1czog
VGVzdHNTdGF0dXMgfQorICoKKyAqID09IExpc3Qgb2YgYXNzZXJ0aW9ucyA9PQorICoKKyAqIGFz
c2VydF90cnVlKGFjdHVhbCwgZGVzY3JpcHRpb24pCisgKiAgIGFzc2VydHMgdGhhdCAvYWN0dWFs
LyBpcyBzdHJpY3RseSB0cnVlCisgKgorICogYXNzZXJ0X2ZhbHNlKGFjdHVhbCwgZGVzY3JpcHRp
b24pCisgKiAgIGFzc2VydHMgdGhhdCAvYWN0dWFsLyBpcyBzdHJpY3RseSBmYWxzZQorICoKKyAq
IGFzc2VydF9lcXVhbHMoYWN0dWFsLCBleHBlY3RlZCwgZGVzY3JpcHRpb24pCisgKiAgIGFzc2Vy
dHMgdGhhdCAvYWN0dWFsLyBpcyB0aGUgc2FtZSB2YWx1ZSBhcyAvZXhwZWN0ZWQvCisgKgorICog
YXNzZXJ0X25vdF9lcXVhbHMoYWN0dWFsLCBleHBlY3RlZCwgZGVzY3JpcHRpb24pCisgKiAgIGFz
c2VydHMgdGhhdCAvYWN0dWFsLyBpcyBhIGRpZmZlcmVudCB2YWx1ZSB0byAvZXhwZWN0ZWQvLiBZ
ZXMsIHRoaXMgbWVhbnMKKyAqICAgdGhhdCAiZXhwZWN0ZWQiIGlzIGEgbWlzbm9tZXIKKyAqCisg
KiBhc3NlcnRfaW5fYXJyYXkoYWN0dWFsLCBleHBlY3RlZCwgZGVzY3JpcHRpb24pCisgKiAgIGFz
c2VydHMgdGhhdCAvZXhwZWN0ZWQvIGlzIGFuIEFycmF5LCBhbmQgL2FjdHVhbC8gaXMgZXF1YWwg
dG8gb25lIG9mIHRoZQorICogICBtZW1iZXJzIC0tIGV4cGVjdGVkLmluZGV4T2YoYWN0dWFsKSAh
PSAtMQorICoKKyAqIGFzc2VydF9hcnJheV9lcXVhbHMoYWN0dWFsLCBleHBlY3RlZCwgZGVzY3Jp
cHRpb24pCisgKiAgIGFzc2VydHMgdGhhdCAvYWN0dWFsLyBhbmQgL2V4cGVjdGVkLyBoYXZlIHRo
ZSBzYW1lIGxlbmd0aCBhbmQgdGhlIHZhbHVlIG9mCisgKiAgIGVhY2ggaW5kZXhlZCBwcm9wZXJ0
eSBpbiAvYWN0dWFsLyBpcyB0aGUgc3RyaWN0bHkgZXF1YWwgdG8gdGhlIGNvcnJlc3BvbmRpbmcK
KyAqICAgcHJvcGVydHkgdmFsdWUgaW4gL2V4cGVjdGVkLworICoKKyAqIGFzc2VydF9hcHByb3hf
ZXF1YWxzKGFjdHVhbCwgZXhwZWN0ZWQsIGVwc2lsb24sIGRlc2NyaXB0aW9uKQorICogICBhc3Nl
cnRzIHRoYXQgL2FjdHVhbC8gaXMgYSBudW1iZXIgd2l0aGluICsvLSAvZXBzaWxvbi8gb2YgL2V4
cGVjdGVkLworICoKKyAqIGFzc2VydF9sZXNzX3RoYW4oYWN0dWFsLCBleHBlY3RlZCwgZGVzY3Jp
cHRpb24pCisgKiAgIGFzc2VydHMgdGhhdCAvYWN0dWFsLyBpcyBhIG51bWJlciBsZXNzIHRoYW4g
L2V4cGVjdGVkLworICoKKyAqIGFzc2VydF9ncmVhdGVyX3RoYW4oYWN0dWFsLCBleHBlY3RlZCwg
ZGVzY3JpcHRpb24pCisgKiAgIGFzc2VydHMgdGhhdCAvYWN0dWFsLyBpcyBhIG51bWJlciBncmVh
dGVyIHRoYW4gL2V4cGVjdGVkLworICoKKyAqIGFzc2VydF9sZXNzX3RoYW5fZXF1YWwoYWN0dWFs
LCBleHBlY3RlZCwgZGVzY3JpcHRpb24pCisgKiAgIGFzc2VydHMgdGhhdCAvYWN0dWFsLyBpcyBh
IG51bWJlciBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gL2V4cGVjdGVkLworICoKKyAqIGFzc2VydF9n
cmVhdGVyX3RoYW5fZXF1YWwoYWN0dWFsLCBleHBlY3RlZCwgZGVzY3JpcHRpb24pCisgKiAgIGFz
c2VydHMgdGhhdCAvYWN0dWFsLyBpcyBhIG51bWJlciBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8g
L2V4cGVjdGVkLworICoKKyAqIGFzc2VydF9yZWdleHBfbWF0Y2goYWN0dWFsLCBleHBlY3RlZCwg
ZGVzY3JpcHRpb24pCisgKiAgIGFzc2VydHMgdGhhdCAvYWN0dWFsLyBtYXRjaGVzIHRoZSByZWdl
eHAgL2V4cGVjdGVkLworICoKKyAqIGFzc2VydF9jbGFzc19zdHJpbmcob2JqZWN0LCBjbGFzc19u
YW1lLCBkZXNjcmlwdGlvbikKKyAqICAgYXNzZXJ0cyB0aGF0IHRoZSBjbGFzcyBzdHJpbmcgb2Yg
L29iamVjdC8gYXMgcmV0dXJuZWQgaW4KKyAqICAgT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZyBp
cyBlcXVhbCB0byAvY2xhc3NfbmFtZS8uCisgKgorICogYXNzZXJ0X293bl9wcm9wZXJ0eShvYmpl
Y3QsIHByb3BlcnR5X25hbWUsIGRlc2NyaXB0aW9uKQorICogICBhc3NlcnQgdGhhdCBvYmplY3Qg
aGFzIG93biBwcm9wZXJ0eSBwcm9wZXJ0eV9uYW1lCisgKgorICogYXNzZXJ0X2luaGVyaXRzKG9i
amVjdCwgcHJvcGVydHlfbmFtZSwgZGVzY3JpcHRpb24pCisgKiAgIGFzc2VydCB0aGF0IG9iamVj
dCBkb2VzIG5vdCBoYXZlIGFuIG93biBwcm9wZXJ0eSBuYW1lZCBwcm9wZXJ0eV9uYW1lCisgKiAg
IGJ1dCB0aGF0IHByb3BlcnR5X25hbWUgaXMgcHJlc2VudCBpbiB0aGUgcHJvdG90eXBlIGNoYWlu
IGZvciBvYmplY3QKKyAqCisgKiBhc3NlcnRfaWRsX2F0dHJpYnV0ZShvYmplY3QsIGF0dHJpYnV0
ZV9uYW1lLCBkZXNjcmlwdGlvbikKKyAqICAgYXNzZXJ0IHRoYXQgYW4gb2JqZWN0IHRoYXQgaXMg
YW4gaW5zdGFuY2Ugb2Ygc29tZSBpbnRlcmZhY2UgaGFzIHRoZQorICogICBhdHRyaWJ1dGUgYXR0
cmlidXRlX25hbWUgZm9sbG93aW5nIHRoZSBjb25kaXRpb25zIHNwZWNpZmllZCBieSBXZWJJREwK
KyAqCisgKiBhc3NlcnRfcmVhZG9ubHkob2JqZWN0LCBwcm9wZXJ0eV9uYW1lLCBkZXNjcmlwdGlv
bikKKyAqICAgYXNzZXJ0IHRoYXQgcHJvcGVydHkgcHJvcGVydHlfbmFtZSBvbiBvYmplY3QgaXMg
cmVhZG9ubHkKKyAqCisgKiBhc3NlcnRfdGhyb3dzKGNvZGUsIGZ1bmMsIGRlc2NyaXB0aW9uKQor
ICogICBjb2RlIC0gdGhlIGV4cGVjdGVkIGV4Y2VwdGlvbjoKKyAqICAgICBvIHN0cmluZzogdGhl
IHRocm93biBleGNlcHRpb24gbXVzdCBiZSBhIERPTUV4Y2VwdGlvbiB3aXRoIHRoZSBnaXZlbgor
ICogICAgICAgICAgICAgICBuYW1lLCBlLmcuLCAiVGltZW91dEVycm9yIiAoZm9yIGNvbXBhdGli
aWxpdHkgd2l0aCBleGlzdGluZworICogICAgICAgICAgICAgICB0ZXN0cywgYSBjb25zdGFudCBp
cyBhbHNvIHN1cHBvcnRlZCwgZS5nLiwgIlRJTUVPVVRfRVJSIikKKyAqICAgICBvIG9iamVjdDog
dGhlIHRocm93biBleGNlcHRpb24gbXVzdCBoYXZlIGEgcHJvcGVydHkgY2FsbGVkICJuYW1lIiB0
aGF0CisgKiAgICAgICAgICAgICAgIG1hdGNoZXMgY29kZS5uYW1lCisgKiAgICAgbyBudWxsOiAg
IGFsbG93IGFueSBleGNlcHRpb24gKGluIGdlbmVyYWwsIG9uZSBvZiB0aGUgb3B0aW9ucyBhYm92
ZQorICogICAgICAgICAgICAgICBzaG91bGQgYmUgdXNlZCkKKyAqICAgZnVuYyAtIGEgZnVuY3Rp
b24gdGhhdCBzaG91bGQgdGhyb3cKKyAqCisgKiBhc3NlcnRfdW5yZWFjaGVkKGRlc2NyaXB0aW9u
KQorICogICBhc3NlcnRzIGlmIGNhbGxlZC4gVXNlZCB0byBlbnN1cmUgdGhhdCBzb21lIGNvZGVw
YXRoIGlzICpub3QqIHRha2VuIGUuZy4KKyAqICAgYW4gZXZlbnQgZG9lcyBub3QgZmlyZS4KKyAq
CisgKiBhc3NlcnRfYW55KGFzc2VydF9mdW5jLCBhY3R1YWwsIGV4cGVjdGVkX2FycmF5LCBleHRy
YV9hcmdfMSwgLi4uIGV4dHJhX2FyZ19OKQorICogICBhc3NlcnRzIHRoYXQgb25lIGFzc2VydF9m
dW5jKGFjdHVhbCwgZXhwZWN0ZWRfYXJyYXlfTiwgZXh0cmFfYXJnMSwgLi4uLCBleHRyYV9hcmdf
TikKKyAqICAgaXMgdHJ1ZSBmb3Igc29tZSBleHBlY3RlZF9hcnJheV9OIGluIGV4cGVjdGVkX2Fy
cmF5LiBUaGlzIG9ubHkgd29ya3MgZm9yIGFzc2VydF9mdW5jCisgKiAgIHdpdGggc2lnbmF0dXJl
IGFzc2VydF9mdW5jKGFjdHVhbCwgZXhwZWN0ZWQsIGFyZ3NfMSwgLi4uLCBhcmdzX04pLiBOb3Rl
IHRoYXQgdGVzdHMKKyAqICAgd2l0aCBtdWx0aXBsZSBhbGxvd2VkIHBhc3MgY29uZGl0aW9ucyBh
cmUgYmFkIHByYWN0aWNlIHVubGVzcyB0aGUgc3BlYyBzcGVjaWZpY2FsbHkKKyAqICAgYWxsb3dz
IG11bHRpcGxlIGJlaGF2aW91cnMuIFRlc3QgYXV0aG9ycyBzaG91bGQgbm90IHVzZSB0aGlzIG1l
dGhvZCBzaW1wbHkgdG8gaGlkZQorICogICBVQSBidWdzLgorICoKKyAqIGFzc2VydF9leGlzdHMo
b2JqZWN0LCBwcm9wZXJ0eV9uYW1lLCBkZXNjcmlwdGlvbikKKyAqICAgKioqIGRlcHJlY2F0ZWQg
KioqCisgKiAgIGFzc2VydHMgdGhhdCBvYmplY3QgaGFzIGFuIG93biBwcm9wZXJ0eSBwcm9wZXJ0
eV9uYW1lCisgKgorICogYXNzZXJ0X25vdF9leGlzdHMob2JqZWN0LCBwcm9wZXJ0eV9uYW1lLCBk
ZXNjcmlwdGlvbikKKyAqICAgKioqIGRlcHJlY2F0ZWQgKioqCisgKiAgIGFzc2VydCB0aGF0IG9i
amVjdCBkb2VzIG5vdCBoYXZlIG93biBwcm9wZXJ0eSBwcm9wZXJ0eV9uYW1lCisgKi8KKworKGZ1
bmN0aW9uICgpCit7CisgICAgdmFyIGRlYnVnID0gZmFsc2U7CisgICAgLy8gZGVmYXVsdCB0aW1l
b3V0IGlzIDEwIHNlY29uZHMsIHRlc3QgY2FuIG92ZXJyaWRlIGlmIG5lZWRlZAorICAgIHZhciBz
ZXR0aW5ncyA9IHsKKyAgICAgICAgb3V0cHV0OnRydWUsCisgICAgICAgIGhhcm5lc3NfdGltZW91
dDp7CisgICAgICAgICAgICAibm9ybWFsIjoxMDAwMCwKKyAgICAgICAgICAgICJsb25nIjo2MDAw
MAorICAgICAgICB9LAorICAgICAgICB0ZXN0X3RpbWVvdXQ6bnVsbAorICAgIH07CisKKyAgICB2
YXIgeGh0bWxfbnMgPSAiaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbCI7CisKKyAgICAvLyBz
Y3JpcHRfcHJlZml4IGlzIHVzZWQgYnkgT3V0cHV0LnByb3RvdHlwZS5zaG93X3Jlc3VsdHMoKSB0
byBmaWd1cmUgb3V0CisgICAgLy8gd2hlcmUgdG8gZ2V0IHRlc3RoYXJuZXNzLmNzcyBmcm9tLiAg
SXQncyBlbmNsb3NlZCBpbiBhbiBleHRyYSBjbG9zdXJlIHRvCisgICAgLy8gbm90IHBvbGx1dGUg
dGhlIGxpYnJhcnkncyBuYW1lc3BhY2Ugd2l0aCB2YXJpYWJsZXMgbGlrZSAic3JjIi4KKyAgICB2
YXIgc2NyaXB0X3ByZWZpeCA9IG51bGw7CisgICAgKGZ1bmN0aW9uICgpCisgICAgeworICAgICAg
ICB2YXIgc2NyaXB0cyA9IGRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCJzY3JpcHQiKTsK
KyAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBzY3JpcHRzLmxlbmd0aDsgaSsrKSB7CisgICAg
ICAgICAgICBpZiAoc2NyaXB0c1tpXS5zcmMpIHsKKyAgICAgICAgICAgICAgICB2YXIgc3JjID0g
c2NyaXB0c1tpXS5zcmM7CisgICAgICAgICAgICB9IGVsc2UgaWYgKHNjcmlwdHNbaV0uaHJlZikg
eworICAgICAgICAgICAgICAgIC8vU1ZHIGNhc2UKKyAgICAgICAgICAgICAgICB2YXIgc3JjID0g
c2NyaXB0c1tpXS5ocmVmLmJhc2VWYWw7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlm
IChzcmMgJiYgc3JjLnNsaWNlKHNyYy5sZW5ndGggLSAidGVzdGhhcm5lc3MuanMiLmxlbmd0aCkg
PT09ICJ0ZXN0aGFybmVzcy5qcyIpIHsKKyAgICAgICAgICAgICAgICBzY3JpcHRfcHJlZml4ID0g
c3JjLnNsaWNlKDAsIHNyYy5sZW5ndGggLSAidGVzdGhhcm5lc3MuanMiLmxlbmd0aCk7CisgICAg
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9KSgpOwor
CisgICAgLyoKKyAgICAgKiBBUEkgZnVuY3Rpb25zCisgICAgICovCisKKyAgICB2YXIgbmFtZV9j
b3VudGVyID0gMDsKKyAgICBmdW5jdGlvbiBuZXh0X2RlZmF1bHRfbmFtZSgpCisgICAgeworICAg
ICAgICAvL0Rvbid0IHVzZSBkb2N1bWVudC50aXRsZSB0byB3b3JrIGFyb3VuZCBhbiBPcGVyYSBi
dWcgaW4gWEhUTUwgZG9jdW1lbnRzCisgICAgICAgIHZhciB0aXRsZSA9IGRvY3VtZW50LmdldEVs
ZW1lbnRzQnlUYWdOYW1lKCJ0aXRsZSIpWzBdOworICAgICAgICB2YXIgcHJlZml4ID0gKHRpdGxl
ICYmIHRpdGxlLmZpcnN0Q2hpbGQgJiYgdGl0bGUuZmlyc3RDaGlsZC5kYXRhKSB8fCAiVW50aXRs
ZWQiOworICAgICAgICB2YXIgc3VmZml4ID0gbmFtZV9jb3VudGVyID4gMCA/ICIgIiArIG5hbWVf
Y291bnRlciA6ICIiOworICAgICAgICBuYW1lX2NvdW50ZXIrKzsKKyAgICAgICAgcmV0dXJuIHBy
ZWZpeCArIHN1ZmZpeDsKKyAgICB9CisKKyAgICBmdW5jdGlvbiB0ZXN0KGZ1bmMsIG5hbWUsIHBy
b3BlcnRpZXMpCisgICAgeworICAgICAgICB2YXIgdGVzdF9uYW1lID0gbmFtZSA/IG5hbWUgOiBu
ZXh0X2RlZmF1bHRfbmFtZSgpOworICAgICAgICBwcm9wZXJ0aWVzID0gcHJvcGVydGllcyA/IHBy
b3BlcnRpZXMgOiB7fTsKKyAgICAgICAgdmFyIHRlc3Rfb2JqID0gbmV3IFRlc3QodGVzdF9uYW1l
LCBwcm9wZXJ0aWVzKTsKKyAgICAgICAgdGVzdF9vYmouc3RlcChmdW5jLCB0ZXN0X29iaiwgdGVz
dF9vYmopOworICAgICAgICBpZiAodGVzdF9vYmoucGhhc2UgPT09IHRlc3Rfb2JqLnBoYXNlcy5T
VEFSVEVEKSB7CisgICAgICAgICAgICB0ZXN0X29iai5kb25lKCk7CisgICAgICAgIH0KKyAgICB9
CisKKyAgICBmdW5jdGlvbiBhc3luY190ZXN0KGZ1bmMsIG5hbWUsIHByb3BlcnRpZXMpCisgICAg
eworICAgICAgICBpZiAodHlwZW9mIGZ1bmMgIT09ICJmdW5jdGlvbiIpIHsKKyAgICAgICAgICAg
IHByb3BlcnRpZXMgPSBuYW1lOworICAgICAgICAgICAgbmFtZSA9IGZ1bmM7CisgICAgICAgICAg
ICBmdW5jID0gbnVsbDsKKyAgICAgICAgfQorICAgICAgICB2YXIgdGVzdF9uYW1lID0gbmFtZSA/
IG5hbWUgOiBuZXh0X2RlZmF1bHRfbmFtZSgpOworICAgICAgICBwcm9wZXJ0aWVzID0gcHJvcGVy
dGllcyA/IHByb3BlcnRpZXMgOiB7fTsKKyAgICAgICAgdmFyIHRlc3Rfb2JqID0gbmV3IFRlc3Qo
dGVzdF9uYW1lLCBwcm9wZXJ0aWVzKTsKKyAgICAgICAgaWYgKGZ1bmMpIHsKKyAgICAgICAgICAg
IHRlc3Rfb2JqLnN0ZXAoZnVuYywgdGVzdF9vYmosIHRlc3Rfb2JqKTsKKyAgICAgICAgfQorICAg
ICAgICByZXR1cm4gdGVzdF9vYmo7CisgICAgfQorCisgICAgZnVuY3Rpb24gc2V0dXAoZnVuY19v
cl9wcm9wZXJ0aWVzLCBtYXliZV9wcm9wZXJ0aWVzKQorICAgIHsKKyAgICAgICAgdmFyIGZ1bmMg
PSBudWxsOworICAgICAgICB2YXIgcHJvcGVydGllcyA9IHt9OworICAgICAgICBpZiAoYXJndW1l
bnRzLmxlbmd0aCA9PT0gMikgeworICAgICAgICAgICAgZnVuYyA9IGZ1bmNfb3JfcHJvcGVydGll
czsKKyAgICAgICAgICAgIHByb3BlcnRpZXMgPSBtYXliZV9wcm9wZXJ0aWVzOworICAgICAgICB9
IGVsc2UgaWYgKGZ1bmNfb3JfcHJvcGVydGllcyBpbnN0YW5jZW9mIEZ1bmN0aW9uKSB7CisgICAg
ICAgICAgICBmdW5jID0gZnVuY19vcl9wcm9wZXJ0aWVzOworICAgICAgICB9IGVsc2UgeworICAg
ICAgICAgICAgcHJvcGVydGllcyA9IGZ1bmNfb3JfcHJvcGVydGllczsKKyAgICAgICAgfQorICAg
ICAgICB0ZXN0cy5zZXR1cChmdW5jLCBwcm9wZXJ0aWVzKTsKKyAgICAgICAgb3V0cHV0LnNldHVw
KHByb3BlcnRpZXMpOworICAgIH0KKworICAgIGZ1bmN0aW9uIGRvbmUoKSB7CisgICAgICAgIHRl
c3RzLmVuZF93YWl0KCk7CisgICAgfQorCisgICAgZnVuY3Rpb24gZ2VuZXJhdGVfdGVzdHMoZnVu
YywgYXJncywgcHJvcGVydGllcykgeworICAgICAgICBmb3JFYWNoKGFyZ3MsIGZ1bmN0aW9uKHgs
IGkpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICB2YXIgbmFtZSA9IHhb
MF07CisgICAgICAgICAgICAgICAgICAgIHRlc3QoZnVuY3Rpb24oKQorICAgICAgICAgICAgICAg
ICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnVuYy5hcHBseSh0aGlz
LCB4LnNsaWNlKDEpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICB9LAorICAgICAgICAgICAg
ICAgICAgICAgICAgIG5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgQXJyYXkuaXNBcnJh
eShwcm9wZXJ0aWVzKSA/IHByb3BlcnRpZXNbaV0gOiBwcm9wZXJ0aWVzKTsKKyAgICAgICAgICAg
ICAgICB9KTsKKyAgICB9CisKKyAgICBmdW5jdGlvbiBvbl9ldmVudChvYmplY3QsIGV2ZW50LCBj
YWxsYmFjaykKKyAgICB7CisgICAgICAgIG9iamVjdC5hZGRFdmVudExpc3RlbmVyKGV2ZW50LCBj
YWxsYmFjaywgZmFsc2UpOworICAgIH0KKworICAgIGV4cG9zZSh0ZXN0LCAndGVzdCcpOworICAg
IGV4cG9zZShhc3luY190ZXN0LCAnYXN5bmNfdGVzdCcpOworICAgIGV4cG9zZShnZW5lcmF0ZV90
ZXN0cywgJ2dlbmVyYXRlX3Rlc3RzJyk7CisgICAgZXhwb3NlKHNldHVwLCAnc2V0dXAnKTsKKyAg
ICBleHBvc2UoZG9uZSwgJ2RvbmUnKTsKKyAgICBleHBvc2Uob25fZXZlbnQsICdvbl9ldmVudCcp
OworCisgICAgLyoKKyAgICAgKiBSZXR1cm4gYSBzdHJpbmcgdHJ1bmNhdGVkIHRvIHRoZSBnaXZl
biBsZW5ndGgsIHdpdGggLi4uIGFkZGVkIGF0IHRoZSBlbmQKKyAgICAgKiBpZiBpdCB3YXMgbG9u
Z2VyLgorICAgICAqLworICAgIGZ1bmN0aW9uIHRydW5jYXRlKHMsIGxlbikKKyAgICB7CisgICAg
ICAgIGlmIChzLmxlbmd0aCA+IGxlbikgeworICAgICAgICAgICAgcmV0dXJuIHMuc3Vic3RyaW5n
KDAsIGxlbiAtIDMpICsgIi4uLiI7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHM7CisgICAg
fQorCisgICAgLyoKKyAgICAgKiBSZXR1cm4gdHJ1ZSBpZiBvYmplY3QgaXMgcHJvYmFibHkgYSBO
b2RlIG9iamVjdC4KKyAgICAgKi8KKyAgICBmdW5jdGlvbiBpc19ub2RlKG9iamVjdCkKKyAgICB7
CisgICAgICAgIC8vIEkgdXNlIGR1Y2stdHlwaW5nIGluc3RlYWQgb2YgaW5zdGFuY2VvZiwgYmVj
YXVzZQorICAgICAgICAvLyBpbnN0YW5jZW9mIGRvZXNuJ3Qgd29yayBpZiB0aGUgbm9kZSBpcyBm
cm9tIGFub3RoZXIgd2luZG93IChsaWtlIGFuCisgICAgICAgIC8vIGlmcmFtZSdzIGNvbnRlbnRX
aW5kb3cpOgorICAgICAgICAvLyBodHRwOi8vd3d3LnczLm9yZy9CdWdzL1B1YmxpYy9zaG93X2J1
Zy5jZ2k/aWQ9MTIyOTUKKyAgICAgICAgaWYgKCJub2RlVHlwZSIgaW4gb2JqZWN0CisgICAgICAg
ICYmICJub2RlTmFtZSIgaW4gb2JqZWN0CisgICAgICAgICYmICJub2RlVmFsdWUiIGluIG9iamVj
dAorICAgICAgICAmJiAiY2hpbGROb2RlcyIgaW4gb2JqZWN0KSB7CisgICAgICAgICAgICB0cnkg
eworICAgICAgICAgICAgICAgIG9iamVjdC5ub2RlVHlwZTsKKyAgICAgICAgICAgIH0gY2F0Y2gg
KGUpIHsKKyAgICAgICAgICAgICAgICAvLyBUaGUgb2JqZWN0IGlzIHByb2JhYmx5IE5vZGUucHJv
dG90eXBlIG9yIGFub3RoZXIgcHJvdG90eXBlCisgICAgICAgICAgICAgICAgLy8gb2JqZWN0IHRo
YXQgaW5oZXJpdHMgZnJvbSBpdCwgYW5kIG5vdCBhIE5vZGUgaW5zdGFuY2UuCisgICAgICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJuIHRy
dWU7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIC8qCisg
ICAgICogQ29udmVydCBhIHZhbHVlIHRvIGEgbmljZSwgaHVtYW4tcmVhZGFibGUgc3RyaW5nCisg
ICAgICovCisgICAgZnVuY3Rpb24gZm9ybWF0X3ZhbHVlKHZhbCwgc2VlbikKKyAgICB7CisgICAg
ICAgIGlmICghc2VlbikgeworICAgICAgICAgICAgc2VlbiA9IFtdOworICAgICAgICB9CisgICAg
ICAgIGlmICh0eXBlb2YgdmFsID09PSAib2JqZWN0IiAmJiB2YWwgIT09IG51bGwpIHsKKyAgICAg
ICAgICAgIGlmIChzZWVuLmluZGV4T2YodmFsKSA+PSAwKSB7CisgICAgICAgICAgICAgICAgcmV0
dXJuICJbLi4uXSI7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBzZWVuLnB1c2godmFsKTsK
KyAgICAgICAgfQorICAgICAgICBpZiAoQXJyYXkuaXNBcnJheSh2YWwpKSB7CisgICAgICAgICAg
ICByZXR1cm4gIlsiICsgdmFsLm1hcChmdW5jdGlvbih4KSB7cmV0dXJuIGZvcm1hdF92YWx1ZSh4
LCBzZWVuKX0pLmpvaW4oIiwgIikgKyAiXSI7CisgICAgICAgIH0KKworICAgICAgICBzd2l0Y2gg
KHR5cGVvZiB2YWwpIHsKKyAgICAgICAgY2FzZSAic3RyaW5nIjoKKyAgICAgICAgICAgIHZhbCA9
IHZhbC5yZXBsYWNlKCJcXCIsICJcXFxcIik7CisgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsg
aSA8IDMyOyBpKyspIHsKKyAgICAgICAgICAgICAgICB2YXIgcmVwbGFjZSA9ICJcXCI7CisgICAg
ICAgICAgICAgICAgc3dpdGNoIChpKSB7CisgICAgICAgICAgICAgICAgY2FzZSAwOiByZXBsYWNl
ICs9ICIwIjsgYnJlYWs7CisgICAgICAgICAgICAgICAgY2FzZSAxOiByZXBsYWNlICs9ICJ4MDEi
OyBicmVhazsKKyAgICAgICAgICAgICAgICBjYXNlIDI6IHJlcGxhY2UgKz0gIngwMiI7IGJyZWFr
OworICAgICAgICAgICAgICAgIGNhc2UgMzogcmVwbGFjZSArPSAieDAzIjsgYnJlYWs7CisgICAg
ICAgICAgICAgICAgY2FzZSA0OiByZXBsYWNlICs9ICJ4MDQiOyBicmVhazsKKyAgICAgICAgICAg
ICAgICBjYXNlIDU6IHJlcGxhY2UgKz0gIngwNSI7IGJyZWFrOworICAgICAgICAgICAgICAgIGNh
c2UgNjogcmVwbGFjZSArPSAieDA2IjsgYnJlYWs7CisgICAgICAgICAgICAgICAgY2FzZSA3OiBy
ZXBsYWNlICs9ICJ4MDciOyBicmVhazsKKyAgICAgICAgICAgICAgICBjYXNlIDg6IHJlcGxhY2Ug
Kz0gImIiOyBicmVhazsKKyAgICAgICAgICAgICAgICBjYXNlIDk6IHJlcGxhY2UgKz0gInQiOyBi
cmVhazsKKyAgICAgICAgICAgICAgICBjYXNlIDEwOiByZXBsYWNlICs9ICJuIjsgYnJlYWs7Cisg
ICAgICAgICAgICAgICAgY2FzZSAxMTogcmVwbGFjZSArPSAidiI7IGJyZWFrOworICAgICAgICAg
ICAgICAgIGNhc2UgMTI6IHJlcGxhY2UgKz0gImYiOyBicmVhazsKKyAgICAgICAgICAgICAgICBj
YXNlIDEzOiByZXBsYWNlICs9ICJyIjsgYnJlYWs7CisgICAgICAgICAgICAgICAgY2FzZSAxNDog
cmVwbGFjZSArPSAieDBlIjsgYnJlYWs7CisgICAgICAgICAgICAgICAgY2FzZSAxNTogcmVwbGFj
ZSArPSAieDBmIjsgYnJlYWs7CisgICAgICAgICAgICAgICAgY2FzZSAxNjogcmVwbGFjZSArPSAi
eDEwIjsgYnJlYWs7CisgICAgICAgICAgICAgICAgY2FzZSAxNzogcmVwbGFjZSArPSAieDExIjsg
YnJlYWs7CisgICAgICAgICAgICAgICAgY2FzZSAxODogcmVwbGFjZSArPSAieDEyIjsgYnJlYWs7
CisgICAgICAgICAgICAgICAgY2FzZSAxOTogcmVwbGFjZSArPSAieDEzIjsgYnJlYWs7CisgICAg
ICAgICAgICAgICAgY2FzZSAyMDogcmVwbGFjZSArPSAieDE0IjsgYnJlYWs7CisgICAgICAgICAg
ICAgICAgY2FzZSAyMTogcmVwbGFjZSArPSAieDE1IjsgYnJlYWs7CisgICAgICAgICAgICAgICAg
Y2FzZSAyMjogcmVwbGFjZSArPSAieDE2IjsgYnJlYWs7CisgICAgICAgICAgICAgICAgY2FzZSAy
MzogcmVwbGFjZSArPSAieDE3IjsgYnJlYWs7CisgICAgICAgICAgICAgICAgY2FzZSAyNDogcmVw
bGFjZSArPSAieDE4IjsgYnJlYWs7CisgICAgICAgICAgICAgICAgY2FzZSAyNTogcmVwbGFjZSAr
PSAieDE5IjsgYnJlYWs7CisgICAgICAgICAgICAgICAgY2FzZSAyNjogcmVwbGFjZSArPSAieDFh
IjsgYnJlYWs7CisgICAgICAgICAgICAgICAgY2FzZSAyNzogcmVwbGFjZSArPSAieDFiIjsgYnJl
YWs7CisgICAgICAgICAgICAgICAgY2FzZSAyODogcmVwbGFjZSArPSAieDFjIjsgYnJlYWs7Cisg
ICAgICAgICAgICAgICAgY2FzZSAyOTogcmVwbGFjZSArPSAieDFkIjsgYnJlYWs7CisgICAgICAg
ICAgICAgICAgY2FzZSAzMDogcmVwbGFjZSArPSAieDFlIjsgYnJlYWs7CisgICAgICAgICAgICAg
ICAgY2FzZSAzMTogcmVwbGFjZSArPSAieDFmIjsgYnJlYWs7CisgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgICAgIHZhbCA9IHZhbC5yZXBsYWNlKFJlZ0V4cChTdHJpbmcuZnJvbUNoYXJD
b2RlKGkpLCAiZyIpLCByZXBsYWNlKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldHVy
biAnIicgKyB2YWwucmVwbGFjZSgvIi9nLCAnXFwiJykgKyAnIic7CisgICAgICAgIGNhc2UgImJv
b2xlYW4iOgorICAgICAgICBjYXNlICJ1bmRlZmluZWQiOgorICAgICAgICAgICAgcmV0dXJuIFN0
cmluZyh2YWwpOworICAgICAgICBjYXNlICJudW1iZXIiOgorICAgICAgICAgICAgLy8gSW4gSmF2
YVNjcmlwdCwgLTAgPT09IDAgYW5kIFN0cmluZygtMCkgPT0gIjAiLCBzbyB3ZSBoYXZlIHRvCisg
ICAgICAgICAgICAvLyBzcGVjaWFsLWNhc2UuCisgICAgICAgICAgICBpZiAodmFsID09PSAtMCAm
JiAxL3ZhbCA9PT0gLUluZmluaXR5KSB7CisgICAgICAgICAgICAgICAgcmV0dXJuICItMCI7Cisg
ICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4gU3RyaW5nKHZhbCk7CisgICAgICAgIGNh
c2UgIm9iamVjdCI6CisgICAgICAgICAgICBpZiAodmFsID09PSBudWxsKSB7CisgICAgICAgICAg
ICAgICAgcmV0dXJuICJudWxsIjsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgLy8gU3Bl
Y2lhbC1jYXNlIE5vZGUgb2JqZWN0cywgc2luY2UgdGhvc2UgY29tZSB1cCBhIGxvdCBpbiBteSB0
ZXN0cy4gIEkKKyAgICAgICAgICAgIC8vIGlnbm9yZSBuYW1lc3BhY2VzLgorICAgICAgICAgICAg
aWYgKGlzX25vZGUodmFsKSkgeworICAgICAgICAgICAgICAgIHN3aXRjaCAodmFsLm5vZGVUeXBl
KSB7CisgICAgICAgICAgICAgICAgY2FzZSBOb2RlLkVMRU1FTlRfTk9ERToKKyAgICAgICAgICAg
ICAgICAgICAgdmFyIHJldCA9ICI8IiArIHZhbC50YWdOYW1lLnRvTG93ZXJDYXNlKCk7CisgICAg
ICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdmFsLmF0dHJpYnV0ZXMubGVuZ3Ro
OyBpKyspIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldCArPSAiICIgKyB2YWwuYXR0cmli
dXRlc1tpXS5uYW1lICsgJz0iJyArIHZhbC5hdHRyaWJ1dGVzW2ldLnZhbHVlICsgJyInOworICAg
ICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIHJldCArPSAiPiIgKyB2YWwu
aW5uZXJIVE1MICsgIjwvIiArIHZhbC50YWdOYW1lLnRvTG93ZXJDYXNlKCkgKyAiPiI7CisgICAg
ICAgICAgICAgICAgICAgIHJldHVybiAiRWxlbWVudCBub2RlICIgKyB0cnVuY2F0ZShyZXQsIDYw
KTsKKyAgICAgICAgICAgICAgICBjYXNlIE5vZGUuVEVYVF9OT0RFOgorICAgICAgICAgICAgICAg
ICAgICByZXR1cm4gJ1RleHQgbm9kZSAiJyArIHRydW5jYXRlKHZhbC5kYXRhLCA2MCkgKyAnIic7
CisgICAgICAgICAgICAgICAgY2FzZSBOb2RlLlBST0NFU1NJTkdfSU5TVFJVQ1RJT05fTk9ERToK
KyAgICAgICAgICAgICAgICAgICAgcmV0dXJuICJQcm9jZXNzaW5nSW5zdHJ1Y3Rpb24gbm9kZSB3
aXRoIHRhcmdldCAiICsgZm9ybWF0X3ZhbHVlKHRydW5jYXRlKHZhbC50YXJnZXQsIDYwKSkgKyAi
IGFuZCBkYXRhICIgKyBmb3JtYXRfdmFsdWUodHJ1bmNhdGUodmFsLmRhdGEsIDYwKSk7CisgICAg
ICAgICAgICAgICAgY2FzZSBOb2RlLkNPTU1FTlRfTk9ERToKKyAgICAgICAgICAgICAgICAgICAg
cmV0dXJuICJDb21tZW50IG5vZGUgPCEtLSIgKyB0cnVuY2F0ZSh2YWwuZGF0YSwgNjApICsgIi0t
PiI7CisgICAgICAgICAgICAgICAgY2FzZSBOb2RlLkRPQ1VNRU5UX05PREU6CisgICAgICAgICAg
ICAgICAgICAgIHJldHVybiAiRG9jdW1lbnQgbm9kZSB3aXRoICIgKyB2YWwuY2hpbGROb2Rlcy5s
ZW5ndGggKyAodmFsLmNoaWxkTm9kZXMubGVuZ3RoID09IDEgPyAiIGNoaWxkIiA6ICIgY2hpbGRy
ZW4iKTsKKyAgICAgICAgICAgICAgICBjYXNlIE5vZGUuRE9DVU1FTlRfVFlQRV9OT0RFOgorICAg
ICAgICAgICAgICAgICAgICByZXR1cm4gIkRvY3VtZW50VHlwZSBub2RlIjsKKyAgICAgICAgICAg
ICAgICBjYXNlIE5vZGUuRE9DVU1FTlRfRlJBR01FTlRfTk9ERToKKyAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuICJEb2N1bWVudEZyYWdtZW50IG5vZGUgd2l0aCAiICsgdmFsLmNoaWxkTm9kZXMu
bGVuZ3RoICsgKHZhbC5jaGlsZE5vZGVzLmxlbmd0aCA9PSAxID8gIiBjaGlsZCIgOiAiIGNoaWxk
cmVuIik7CisgICAgICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICAgICAgcmV0
dXJuICJOb2RlIG9iamVjdCBvZiB1bmtub3duIHR5cGUiOworICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIH0KKworICAgICAgICAgICAgLy8gRmFsbCB0aHJvdWdoIHRvIGRlZmF1bHQKKyAg
ICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIHJldHVybiB0eXBlb2YgdmFsICsgJyAiJyArIHRy
dW5jYXRlKFN0cmluZyh2YWwpLCA2MCkgKyAnIic7CisgICAgICAgIH0KKyAgICB9CisgICAgZXhw
b3NlKGZvcm1hdF92YWx1ZSwgImZvcm1hdF92YWx1ZSIpOworCisgICAgLyoKKyAgICAgKiBBc3Nl
cnRpb25zCisgICAgICovCisKKyAgICBmdW5jdGlvbiBhc3NlcnRfdHJ1ZShhY3R1YWwsIGRlc2Ny
aXB0aW9uKQorICAgIHsKKyAgICAgICAgYXNzZXJ0KGFjdHVhbCA9PT0gdHJ1ZSwgImFzc2VydF90
cnVlIiwgZGVzY3JpcHRpb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJleHBl
Y3RlZCB0cnVlIGdvdCAke2FjdHVhbH0iLCB7YWN0dWFsOmFjdHVhbH0pOworICAgIH07CisgICAg
ZXhwb3NlKGFzc2VydF90cnVlLCAiYXNzZXJ0X3RydWUiKTsKKworICAgIGZ1bmN0aW9uIGFzc2Vy
dF9mYWxzZShhY3R1YWwsIGRlc2NyaXB0aW9uKQorICAgIHsKKyAgICAgICAgYXNzZXJ0KGFjdHVh
bCA9PT0gZmFsc2UsICJhc3NlcnRfZmFsc2UiLCBkZXNjcmlwdGlvbiwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICJleHBlY3RlZCBmYWxzZSBnb3QgJHthY3R1YWx9Iiwge2FjdHVh
bDphY3R1YWx9KTsKKyAgICB9OworICAgIGV4cG9zZShhc3NlcnRfZmFsc2UsICJhc3NlcnRfZmFs
c2UiKTsKKworICAgIGZ1bmN0aW9uIHNhbWVfdmFsdWUoeCwgeSkgeworICAgICAgICBpZiAoeSAh
PT0geSkgeworICAgICAgICAgICAgLy9OYU4gY2FzZQorICAgICAgICAgICAgcmV0dXJuIHggIT09
IHg7CisgICAgICAgIH0KKyAgICAgICAgaWYgKHggPT09IDAgJiYgeSA9PT0gMCkgeworICAgICAg
ICAgICAgLy9EaXN0aW5ndWlzaCArMCBhbmQgLTAKKyAgICAgICAgICAgIHJldHVybiAxL3ggPT09
IDEveTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4geCA9PT0geTsKKyAgICB9CisKKyAgICBm
dW5jdGlvbiBhc3NlcnRfZXF1YWxzKGFjdHVhbCwgZXhwZWN0ZWQsIGRlc2NyaXB0aW9uKQorICAg
IHsKKyAgICAgICAgIC8qCisgICAgICAgICAgKiBUZXN0IGlmIHR3byBwcmltaXRpdmVzIGFyZSBl
cXVhbCBvciB0d28gb2JqZWN0cworICAgICAgICAgICogYXJlIHRoZSBzYW1lIG9iamVjdAorICAg
ICAgICAgICovCisgICAgICAgIGlmICh0eXBlb2YgYWN0dWFsICE9IHR5cGVvZiBleHBlY3RlZCkg
eworICAgICAgICAgICAgYXNzZXJ0KGZhbHNlLCAiYXNzZXJ0X2VxdWFscyIsIGRlc2NyaXB0aW9u
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAiZXhwZWN0ZWQgKCIgKyB0eXBlb2YgZXhwZWN0
ZWQgKyAiKSAke2V4cGVjdGVkfSBidXQgZ290ICgiICsgdHlwZW9mIGFjdHVhbCArICIpICR7YWN0
dWFsfSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgIHtleHBlY3RlZDpleHBlY3RlZCwgYWN0
dWFsOmFjdHVhbH0pOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIGFz
c2VydChzYW1lX3ZhbHVlKGFjdHVhbCwgZXhwZWN0ZWQpLCAiYXNzZXJ0X2VxdWFscyIsIGRlc2Ny
aXB0aW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImV4
cGVjdGVkICR7ZXhwZWN0ZWR9IGJ1dCBnb3QgJHthY3R1YWx9IiwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtleHBlY3RlZDpleHBlY3RlZCwgYWN0dWFsOmFj
dHVhbH0pOworICAgIH07CisgICAgZXhwb3NlKGFzc2VydF9lcXVhbHMsICJhc3NlcnRfZXF1YWxz
Iik7CisKKyAgICBmdW5jdGlvbiBhc3NlcnRfbm90X2VxdWFscyhhY3R1YWwsIGV4cGVjdGVkLCBk
ZXNjcmlwdGlvbikKKyAgICB7CisgICAgICAgICAvKgorICAgICAgICAgICogVGVzdCBpZiB0d28g
cHJpbWl0aXZlcyBhcmUgdW5lcXVhbCBvciB0d28gb2JqZWN0cworICAgICAgICAgICogYXJlIGRp
ZmZlcmVudCBvYmplY3RzCisgICAgICAgICAgKi8KKyAgICAgICAgYXNzZXJ0KCFzYW1lX3ZhbHVl
KGFjdHVhbCwgZXhwZWN0ZWQpLCAiYXNzZXJ0X25vdF9lcXVhbHMiLCBkZXNjcmlwdGlvbiwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZ290IGRpc2FsbG93
ZWQgdmFsdWUgJHthY3R1YWx9IiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB7YWN0dWFsOmFjdHVhbH0pOworICAgIH07CisgICAgZXhwb3NlKGFzc2VydF9u
b3RfZXF1YWxzLCAiYXNzZXJ0X25vdF9lcXVhbHMiKTsKKworICAgIGZ1bmN0aW9uIGFzc2VydF9p
bl9hcnJheShhY3R1YWwsIGV4cGVjdGVkLCBkZXNjcmlwdGlvbikKKyAgICB7CisgICAgICAgIGFz
c2VydChleHBlY3RlZC5pbmRleE9mKGFjdHVhbCkgIT0gLTEsICJhc3NlcnRfaW5fYXJyYXkiLCBk
ZXNjcmlwdGlvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgInZhbHVlICR7YWN0dWFsfSBub3QgaW4gYXJyYXkgJHtleHBlY3RlZH0iLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7YWN0dWFsOmFjdHVhbCwgZXhw
ZWN0ZWQ6ZXhwZWN0ZWR9KTsKKyAgICB9CisgICAgZXhwb3NlKGFzc2VydF9pbl9hcnJheSwgImFz
c2VydF9pbl9hcnJheSIpOworCisgICAgZnVuY3Rpb24gYXNzZXJ0X29iamVjdF9lcXVhbHMoYWN0
dWFsLCBleHBlY3RlZCwgZGVzY3JpcHRpb24pCisgICAgeworICAgICAgICAgLy9UaGlzIG5lZWRz
IHRvIGJlIGltcHJvdmVkIGEgZ3JlYXQgZGVhbAorICAgICAgICAgZnVuY3Rpb24gY2hlY2tfZXF1
YWwoYWN0dWFsLCBleHBlY3RlZCwgc3RhY2spCisgICAgICAgICB7CisgICAgICAgICAgICAgc3Rh
Y2sucHVzaChhY3R1YWwpOworCisgICAgICAgICAgICAgdmFyIHA7CisgICAgICAgICAgICAgZm9y
IChwIGluIGFjdHVhbCkgeworICAgICAgICAgICAgICAgICBhc3NlcnQoZXhwZWN0ZWQuaGFzT3du
UHJvcGVydHkocCksICJhc3NlcnRfb2JqZWN0X2VxdWFscyIsIGRlc2NyaXB0aW9uLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ1bmV4cGVjdGVk
IHByb3BlcnR5ICR7cH0iLCB7cDpwfSk7CisKKyAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBh
Y3R1YWxbcF0gPT09ICJvYmplY3QiICYmIGFjdHVhbFtwXSAhPT0gbnVsbCkgeworICAgICAgICAg
ICAgICAgICAgICAgaWYgKHN0YWNrLmluZGV4T2YoYWN0dWFsW3BdKSA9PT0gLTEpIHsKKyAgICAg
ICAgICAgICAgICAgICAgICAgICBjaGVja19lcXVhbChhY3R1YWxbcF0sIGV4cGVjdGVkW3BdLCBz
dGFjayk7CisgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgIH0gZWxzZSB7
CisgICAgICAgICAgICAgICAgICAgICBhc3NlcnQoc2FtZV92YWx1ZShhY3R1YWxbcF0sIGV4cGVj
dGVkW3BdKSwgImFzc2VydF9vYmplY3RfZXF1YWxzIiwgZGVzY3JpcHRpb24sCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInByb3BlcnR5ICR7
cH0gZXhwZWN0ZWQgJHtleHBlY3RlZH0gZ290ICR7YWN0dWFsfSIsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3A6cCwgZXhwZWN0ZWQ6ZXhw
ZWN0ZWQsIGFjdHVhbDphY3R1YWx9KTsKKyAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgICBmb3IgKHAgaW4gZXhwZWN0ZWQpIHsKKyAgICAgICAgICAgICAgICAg
YXNzZXJ0KGFjdHVhbC5oYXNPd25Qcm9wZXJ0eShwKSwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICJhc3NlcnRfb2JqZWN0X2VxdWFscyIsIGRlc2NyaXB0aW9uLAorICAgICAgICAgICAgICAgICAg
ICAgICAgImV4cGVjdGVkIHByb3BlcnR5ICR7cH0gbWlzc2luZyIsIHtwOnB9KTsKKyAgICAgICAg
ICAgICB9CisgICAgICAgICAgICAgc3RhY2sucG9wKCk7CisgICAgICAgICB9CisgICAgICAgICBj
aGVja19lcXVhbChhY3R1YWwsIGV4cGVjdGVkLCBbXSk7CisgICAgfTsKKyAgICBleHBvc2UoYXNz
ZXJ0X29iamVjdF9lcXVhbHMsICJhc3NlcnRfb2JqZWN0X2VxdWFscyIpOworCisgICAgZnVuY3Rp
b24gYXNzZXJ0X2FycmF5X2VxdWFscyhhY3R1YWwsIGV4cGVjdGVkLCBkZXNjcmlwdGlvbikKKyAg
ICB7CisgICAgICAgIGFzc2VydChhY3R1YWwubGVuZ3RoID09PSBleHBlY3RlZC5sZW5ndGgsCisg
ICAgICAgICAgICAgICAiYXNzZXJ0X2FycmF5X2VxdWFscyIsIGRlc2NyaXB0aW9uLAorICAgICAg
ICAgICAgICAgImxlbmd0aHMgZGlmZmVyLCBleHBlY3RlZCAke2V4cGVjdGVkfSBnb3QgJHthY3R1
YWx9IiwKKyAgICAgICAgICAgICAgIHtleHBlY3RlZDpleHBlY3RlZC5sZW5ndGgsIGFjdHVhbDph
Y3R1YWwubGVuZ3RofSk7CisKKyAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhY3R1YWwubGVu
Z3RoOyBpKyspIHsKKyAgICAgICAgICAgIGFzc2VydChhY3R1YWwuaGFzT3duUHJvcGVydHkoaSkg
PT09IGV4cGVjdGVkLmhhc093blByb3BlcnR5KGkpLAorICAgICAgICAgICAgICAgICAgICJhc3Nl
cnRfYXJyYXlfZXF1YWxzIiwgZGVzY3JpcHRpb24sCisgICAgICAgICAgICAgICAgICAgInByb3Bl
cnR5ICR7aX0sIHByb3BlcnR5IGV4cGVjdGVkIHRvIGJlICRleHBlY3RlZCBidXQgd2FzICRhY3R1
YWwiLAorICAgICAgICAgICAgICAgICAgIHtpOmksIGV4cGVjdGVkOmV4cGVjdGVkLmhhc093blBy
b3BlcnR5KGkpID8gInByZXNlbnQiIDogIm1pc3NpbmciLAorICAgICAgICAgICAgICAgICAgIGFj
dHVhbDphY3R1YWwuaGFzT3duUHJvcGVydHkoaSkgPyAicHJlc2VudCIgOiAibWlzc2luZyJ9KTsK
KyAgICAgICAgICAgIGFzc2VydChzYW1lX3ZhbHVlKGV4cGVjdGVkW2ldLCBhY3R1YWxbaV0pLAor
ICAgICAgICAgICAgICAgICAgICJhc3NlcnRfYXJyYXlfZXF1YWxzIiwgZGVzY3JpcHRpb24sCisg
ICAgICAgICAgICAgICAgICAgInByb3BlcnR5ICR7aX0sIGV4cGVjdGVkICR7ZXhwZWN0ZWR9IGJ1
dCBnb3QgJHthY3R1YWx9IiwKKyAgICAgICAgICAgICAgICAgICB7aTppLCBleHBlY3RlZDpleHBl
Y3RlZFtpXSwgYWN0dWFsOmFjdHVhbFtpXX0pOworICAgICAgICB9CisgICAgfQorICAgIGV4cG9z
ZShhc3NlcnRfYXJyYXlfZXF1YWxzLCAiYXNzZXJ0X2FycmF5X2VxdWFscyIpOworCisgICAgZnVu
Y3Rpb24gYXNzZXJ0X2FwcHJveF9lcXVhbHMoYWN0dWFsLCBleHBlY3RlZCwgZXBzaWxvbiwgZGVz
Y3JpcHRpb24pCisgICAgeworICAgICAgICAvKgorICAgICAgICAgKiBUZXN0IGlmIHR3byBwcmlt
aXRpdmUgbnVtYmVycyBhcmUgZXF1YWwgd2l0aGluZyArLy0gZXBzaWxvbgorICAgICAgICAgKi8K
KyAgICAgICAgYXNzZXJ0KHR5cGVvZiBhY3R1YWwgPT09ICJudW1iZXIiLAorICAgICAgICAgICAg
ICAgImFzc2VydF9hcHByb3hfZXF1YWxzIiwgZGVzY3JpcHRpb24sCisgICAgICAgICAgICAgICAi
ZXhwZWN0ZWQgYSBudW1iZXIgYnV0IGdvdCBhICR7dHlwZV9hY3R1YWx9IiwKKyAgICAgICAgICAg
ICAgIHt0eXBlX2FjdHVhbDp0eXBlb2YgYWN0dWFsfSk7CisKKyAgICAgICAgYXNzZXJ0KE1hdGgu
YWJzKGFjdHVhbCAtIGV4cGVjdGVkKSA8PSBlcHNpbG9uLAorICAgICAgICAgICAgICAgImFzc2Vy
dF9hcHByb3hfZXF1YWxzIiwgZGVzY3JpcHRpb24sCisgICAgICAgICAgICAgICAiZXhwZWN0ZWQg
JHtleHBlY3RlZH0gKy8tICR7ZXBzaWxvbn0gYnV0IGdvdCAke2FjdHVhbH0iLAorICAgICAgICAg
ICAgICAge2V4cGVjdGVkOmV4cGVjdGVkLCBhY3R1YWw6YWN0dWFsLCBlcHNpbG9uOmVwc2lsb259
KTsKKyAgICB9OworICAgIGV4cG9zZShhc3NlcnRfYXBwcm94X2VxdWFscywgImFzc2VydF9hcHBy
b3hfZXF1YWxzIik7CisKKyAgICBmdW5jdGlvbiBhc3NlcnRfbGVzc190aGFuKGFjdHVhbCwgZXhw
ZWN0ZWQsIGRlc2NyaXB0aW9uKQorICAgIHsKKyAgICAgICAgLyoKKyAgICAgICAgICogVGVzdCBp
ZiBhIHByaW1pdGl2ZSBudW1iZXIgaXMgbGVzcyB0aGFuIGFub3RoZXIKKyAgICAgICAgICovCisg
ICAgICAgIGFzc2VydCh0eXBlb2YgYWN0dWFsID09PSAibnVtYmVyIiwKKyAgICAgICAgICAgICAg
ICJhc3NlcnRfbGVzc190aGFuIiwgZGVzY3JpcHRpb24sCisgICAgICAgICAgICAgICAiZXhwZWN0
ZWQgYSBudW1iZXIgYnV0IGdvdCBhICR7dHlwZV9hY3R1YWx9IiwKKyAgICAgICAgICAgICAgIHt0
eXBlX2FjdHVhbDp0eXBlb2YgYWN0dWFsfSk7CisKKyAgICAgICAgYXNzZXJ0KGFjdHVhbCA8IGV4
cGVjdGVkLAorICAgICAgICAgICAgICAgImFzc2VydF9sZXNzX3RoYW4iLCBkZXNjcmlwdGlvbiwK
KyAgICAgICAgICAgICAgICJleHBlY3RlZCBhIG51bWJlciBsZXNzIHRoYW4gJHtleHBlY3RlZH0g
YnV0IGdvdCAke2FjdHVhbH0iLAorICAgICAgICAgICAgICAge2V4cGVjdGVkOmV4cGVjdGVkLCBh
Y3R1YWw6YWN0dWFsfSk7CisgICAgfTsKKyAgICBleHBvc2UoYXNzZXJ0X2xlc3NfdGhhbiwgImFz
c2VydF9sZXNzX3RoYW4iKTsKKworICAgIGZ1bmN0aW9uIGFzc2VydF9ncmVhdGVyX3RoYW4oYWN0
dWFsLCBleHBlY3RlZCwgZGVzY3JpcHRpb24pCisgICAgeworICAgICAgICAvKgorICAgICAgICAg
KiBUZXN0IGlmIGEgcHJpbWl0aXZlIG51bWJlciBpcyBncmVhdGVyIHRoYW4gYW5vdGhlcgorICAg
ICAgICAgKi8KKyAgICAgICAgYXNzZXJ0KHR5cGVvZiBhY3R1YWwgPT09ICJudW1iZXIiLAorICAg
ICAgICAgICAgICAgImFzc2VydF9ncmVhdGVyX3RoYW4iLCBkZXNjcmlwdGlvbiwKKyAgICAgICAg
ICAgICAgICJleHBlY3RlZCBhIG51bWJlciBidXQgZ290IGEgJHt0eXBlX2FjdHVhbH0iLAorICAg
ICAgICAgICAgICAge3R5cGVfYWN0dWFsOnR5cGVvZiBhY3R1YWx9KTsKKworICAgICAgICBhc3Nl
cnQoYWN0dWFsID4gZXhwZWN0ZWQsCisgICAgICAgICAgICAgICAiYXNzZXJ0X2dyZWF0ZXJfdGhh
biIsIGRlc2NyaXB0aW9uLAorICAgICAgICAgICAgICAgImV4cGVjdGVkIGEgbnVtYmVyIGdyZWF0
ZXIgdGhhbiAke2V4cGVjdGVkfSBidXQgZ290ICR7YWN0dWFsfSIsCisgICAgICAgICAgICAgICB7
ZXhwZWN0ZWQ6ZXhwZWN0ZWQsIGFjdHVhbDphY3R1YWx9KTsKKyAgICB9OworICAgIGV4cG9zZShh
c3NlcnRfZ3JlYXRlcl90aGFuLCAiYXNzZXJ0X2dyZWF0ZXJfdGhhbiIpOworCisgICAgZnVuY3Rp
b24gYXNzZXJ0X2xlc3NfdGhhbl9lcXVhbChhY3R1YWwsIGV4cGVjdGVkLCBkZXNjcmlwdGlvbikK
KyAgICB7CisgICAgICAgIC8qCisgICAgICAgICAqIFRlc3QgaWYgYSBwcmltaXRpdmUgbnVtYmVy
IGlzIGxlc3MgdGhhbiBvciBlcXVhbCB0byBhbm90aGVyCisgICAgICAgICAqLworICAgICAgICBh
c3NlcnQodHlwZW9mIGFjdHVhbCA9PT0gIm51bWJlciIsCisgICAgICAgICAgICAgICAiYXNzZXJ0
X2xlc3NfdGhhbl9lcXVhbCIsIGRlc2NyaXB0aW9uLAorICAgICAgICAgICAgICAgImV4cGVjdGVk
IGEgbnVtYmVyIGJ1dCBnb3QgYSAke3R5cGVfYWN0dWFsfSIsCisgICAgICAgICAgICAgICB7dHlw
ZV9hY3R1YWw6dHlwZW9mIGFjdHVhbH0pOworCisgICAgICAgIGFzc2VydChhY3R1YWwgPD0gZXhw
ZWN0ZWQsCisgICAgICAgICAgICAgICAiYXNzZXJ0X2xlc3NfdGhhbiIsIGRlc2NyaXB0aW9uLAor
ICAgICAgICAgICAgICAgImV4cGVjdGVkIGEgbnVtYmVyIGxlc3MgdGhhbiBvciBlcXVhbCB0byAk
e2V4cGVjdGVkfSBidXQgZ290ICR7YWN0dWFsfSIsCisgICAgICAgICAgICAgICB7ZXhwZWN0ZWQ6
ZXhwZWN0ZWQsIGFjdHVhbDphY3R1YWx9KTsKKyAgICB9OworICAgIGV4cG9zZShhc3NlcnRfbGVz
c190aGFuX2VxdWFsLCAiYXNzZXJ0X2xlc3NfdGhhbl9lcXVhbCIpOworCisgICAgZnVuY3Rpb24g
YXNzZXJ0X2dyZWF0ZXJfdGhhbl9lcXVhbChhY3R1YWwsIGV4cGVjdGVkLCBkZXNjcmlwdGlvbikK
KyAgICB7CisgICAgICAgIC8qCisgICAgICAgICAqIFRlc3QgaWYgYSBwcmltaXRpdmUgbnVtYmVy
IGlzIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byBhbm90aGVyCisgICAgICAgICAqLworICAgICAg
ICBhc3NlcnQodHlwZW9mIGFjdHVhbCA9PT0gIm51bWJlciIsCisgICAgICAgICAgICAgICAiYXNz
ZXJ0X2dyZWF0ZXJfdGhhbl9lcXVhbCIsIGRlc2NyaXB0aW9uLAorICAgICAgICAgICAgICAgImV4
cGVjdGVkIGEgbnVtYmVyIGJ1dCBnb3QgYSAke3R5cGVfYWN0dWFsfSIsCisgICAgICAgICAgICAg
ICB7dHlwZV9hY3R1YWw6dHlwZW9mIGFjdHVhbH0pOworCisgICAgICAgIGFzc2VydChhY3R1YWwg
Pj0gZXhwZWN0ZWQsCisgICAgICAgICAgICAgICAiYXNzZXJ0X2dyZWF0ZXJfdGhhbl9lcXVhbCIs
IGRlc2NyaXB0aW9uLAorICAgICAgICAgICAgICAgImV4cGVjdGVkIGEgbnVtYmVyIGdyZWF0ZXIg
dGhhbiBvciBlcXVhbCB0byAke2V4cGVjdGVkfSBidXQgZ290ICR7YWN0dWFsfSIsCisgICAgICAg
ICAgICAgICB7ZXhwZWN0ZWQ6ZXhwZWN0ZWQsIGFjdHVhbDphY3R1YWx9KTsKKyAgICB9OworICAg
IGV4cG9zZShhc3NlcnRfZ3JlYXRlcl90aGFuX2VxdWFsLCAiYXNzZXJ0X2dyZWF0ZXJfdGhhbl9l
cXVhbCIpOworCisgICAgZnVuY3Rpb24gYXNzZXJ0X3JlZ2V4cF9tYXRjaChhY3R1YWwsIGV4cGVj
dGVkLCBkZXNjcmlwdGlvbikgeworICAgICAgICAvKgorICAgICAgICAgKiBUZXN0IGlmIGEgc3Ry
aW5nIChhY3R1YWwpIG1hdGNoZXMgYSByZWdleHAgKGV4cGVjdGVkKQorICAgICAgICAgKi8KKyAg
ICAgICAgYXNzZXJ0KGV4cGVjdGVkLnRlc3QoYWN0dWFsKSwKKyAgICAgICAgICAgICAgICJhc3Nl
cnRfcmVnZXhwX21hdGNoIiwgZGVzY3JpcHRpb24sCisgICAgICAgICAgICAgICAiZXhwZWN0ZWQg
JHtleHBlY3RlZH0gYnV0IGdvdCAke2FjdHVhbH0iLAorICAgICAgICAgICAgICAge2V4cGVjdGVk
OmV4cGVjdGVkLCBhY3R1YWw6YWN0dWFsfSk7CisgICAgfQorICAgIGV4cG9zZShhc3NlcnRfcmVn
ZXhwX21hdGNoLCAiYXNzZXJ0X3JlZ2V4cF9tYXRjaCIpOworCisgICAgZnVuY3Rpb24gYXNzZXJ0
X2NsYXNzX3N0cmluZyhvYmplY3QsIGNsYXNzX3N0cmluZywgZGVzY3JpcHRpb24pIHsKKyAgICAg
ICAgYXNzZXJ0X2VxdWFscyh7fS50b1N0cmluZy5jYWxsKG9iamVjdCksICJbb2JqZWN0ICIgKyBj
bGFzc19zdHJpbmcgKyAiXSIsCisgICAgICAgICAgICAgICAgICAgICAgZGVzY3JpcHRpb24pOwor
ICAgIH0KKyAgICBleHBvc2UoYXNzZXJ0X2NsYXNzX3N0cmluZywgImFzc2VydF9jbGFzc19zdHJp
bmciKTsKKworCisgICAgZnVuY3Rpb24gX2Fzc2VydF9vd25fcHJvcGVydHkobmFtZSkgeworICAg
ICAgICByZXR1cm4gZnVuY3Rpb24ob2JqZWN0LCBwcm9wZXJ0eV9uYW1lLCBkZXNjcmlwdGlvbikK
KyAgICAgICAgeworICAgICAgICAgICAgYXNzZXJ0KG9iamVjdC5oYXNPd25Qcm9wZXJ0eShwcm9w
ZXJ0eV9uYW1lKSwKKyAgICAgICAgICAgICAgICAgICBuYW1lLCBkZXNjcmlwdGlvbiwKKyAgICAg
ICAgICAgICAgICAgICAiZXhwZWN0ZWQgcHJvcGVydHkgJHtwfSBtaXNzaW5nIiwge3A6cHJvcGVy
dHlfbmFtZX0pOworICAgICAgICB9OworICAgIH0KKyAgICBleHBvc2UoX2Fzc2VydF9vd25fcHJv
cGVydHkoImFzc2VydF9leGlzdHMiKSwgImFzc2VydF9leGlzdHMiKTsKKyAgICBleHBvc2UoX2Fz
c2VydF9vd25fcHJvcGVydHkoImFzc2VydF9vd25fcHJvcGVydHkiKSwgImFzc2VydF9vd25fcHJv
cGVydHkiKTsKKworICAgIGZ1bmN0aW9uIGFzc2VydF9ub3RfZXhpc3RzKG9iamVjdCwgcHJvcGVy
dHlfbmFtZSwgZGVzY3JpcHRpb24pCisgICAgeworICAgICAgICBhc3NlcnQoIW9iamVjdC5oYXNP
d25Qcm9wZXJ0eShwcm9wZXJ0eV9uYW1lKSwKKyAgICAgICAgICAgICAgICJhc3NlcnRfbm90X2V4
aXN0cyIsIGRlc2NyaXB0aW9uLAorICAgICAgICAgICAgICAgInVuZXhwZWN0ZWQgcHJvcGVydHkg
JHtwfSBmb3VuZCIsIHtwOnByb3BlcnR5X25hbWV9KTsKKyAgICB9OworICAgIGV4cG9zZShhc3Nl
cnRfbm90X2V4aXN0cywgImFzc2VydF9ub3RfZXhpc3RzIik7CisKKyAgICBmdW5jdGlvbiBfYXNz
ZXJ0X2luaGVyaXRzKG5hbWUpIHsKKyAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIChvYmplY3QsIHBy
b3BlcnR5X25hbWUsIGRlc2NyaXB0aW9uKQorICAgICAgICB7CisgICAgICAgICAgICBhc3NlcnQo
dHlwZW9mIG9iamVjdCA9PT0gIm9iamVjdCIsCisgICAgICAgICAgICAgICAgICAgbmFtZSwgZGVz
Y3JpcHRpb24sCisgICAgICAgICAgICAgICAgICAgInByb3ZpZGVkIHZhbHVlIGlzIG5vdCBhbiBv
YmplY3QiKTsKKworICAgICAgICAgICAgYXNzZXJ0KCJoYXNPd25Qcm9wZXJ0eSIgaW4gb2JqZWN0
LAorICAgICAgICAgICAgICAgICAgIG5hbWUsIGRlc2NyaXB0aW9uLAorICAgICAgICAgICAgICAg
ICAgICJwcm92aWRlZCB2YWx1ZSBpcyBhbiBvYmplY3QgYnV0IGhhcyBubyBoYXNPd25Qcm9wZXJ0
eSBtZXRob2QiKTsKKworICAgICAgICAgICAgYXNzZXJ0KCFvYmplY3QuaGFzT3duUHJvcGVydHko
cHJvcGVydHlfbmFtZSksCisgICAgICAgICAgICAgICAgICAgbmFtZSwgZGVzY3JpcHRpb24sCisg
ICAgICAgICAgICAgICAgICAgInByb3BlcnR5ICR7cH0gZm91bmQgb24gb2JqZWN0IGV4cGVjdGVk
IGluIHByb3RvdHlwZSBjaGFpbiIsCisgICAgICAgICAgICAgICAgICAge3A6cHJvcGVydHlfbmFt
ZX0pOworCisgICAgICAgICAgICBhc3NlcnQocHJvcGVydHlfbmFtZSBpbiBvYmplY3QsCisgICAg
ICAgICAgICAgICAgICAgbmFtZSwgZGVzY3JpcHRpb24sCisgICAgICAgICAgICAgICAgICAgInBy
b3BlcnR5ICR7cH0gbm90IGZvdW5kIGluIHByb3RvdHlwZSBjaGFpbiIsCisgICAgICAgICAgICAg
ICAgICAge3A6cHJvcGVydHlfbmFtZX0pOworICAgICAgICB9OworICAgIH0KKyAgICBleHBvc2Uo
X2Fzc2VydF9pbmhlcml0cygiYXNzZXJ0X2luaGVyaXRzIiksICJhc3NlcnRfaW5oZXJpdHMiKTsK
KyAgICBleHBvc2UoX2Fzc2VydF9pbmhlcml0cygiYXNzZXJ0X2lkbF9hdHRyaWJ1dGUiKSwgImFz
c2VydF9pZGxfYXR0cmlidXRlIik7CisKKyAgICBmdW5jdGlvbiBhc3NlcnRfcmVhZG9ubHkob2Jq
ZWN0LCBwcm9wZXJ0eV9uYW1lLCBkZXNjcmlwdGlvbikKKyAgICB7CisgICAgICAgICB2YXIgaW5p
dGlhbF92YWx1ZSA9IG9iamVjdFtwcm9wZXJ0eV9uYW1lXTsKKyAgICAgICAgIHRyeSB7CisgICAg
ICAgICAgICAgLy9Ob3RlIHRoYXQgdGhpcyBjYW4gaGF2ZSBzaWRlIGVmZmVjdHMgaW4gdGhlIGNh
c2Ugd2hlcmUKKyAgICAgICAgICAgICAvL3RoZSBwcm9wZXJ0eSBoYXMgUHV0Rm9yd2FyZHMKKyAg
ICAgICAgICAgICBvYmplY3RbcHJvcGVydHlfbmFtZV0gPSBpbml0aWFsX3ZhbHVlICsgImEiOyAv
L1hYWCB1c2Ugc29tZSBvdGhlciB2YWx1ZSBoZXJlPworICAgICAgICAgICAgIGFzc2VydChzYW1l
X3ZhbHVlKG9iamVjdFtwcm9wZXJ0eV9uYW1lXSwgaW5pdGlhbF92YWx1ZSksCisgICAgICAgICAg
ICAgICAgICAgICJhc3NlcnRfcmVhZG9ubHkiLCBkZXNjcmlwdGlvbiwKKyAgICAgICAgICAgICAg
ICAgICAgImNoYW5naW5nIHByb3BlcnR5ICR7cH0gc3VjY2VlZGVkIiwKKyAgICAgICAgICAgICAg
ICAgICAge3A6cHJvcGVydHlfbmFtZX0pOworICAgICAgICAgfSBmaW5hbGx5IHsKKyAgICAgICAg
ICAgICBvYmplY3RbcHJvcGVydHlfbmFtZV0gPSBpbml0aWFsX3ZhbHVlOworICAgICAgICAgfQor
ICAgIH07CisgICAgZXhwb3NlKGFzc2VydF9yZWFkb25seSwgImFzc2VydF9yZWFkb25seSIpOwor
CisgICAgZnVuY3Rpb24gYXNzZXJ0X3Rocm93cyhjb2RlLCBmdW5jLCBkZXNjcmlwdGlvbikKKyAg
ICB7CisgICAgICAgIHRyeSB7CisgICAgICAgICAgICBmdW5jLmNhbGwodGhpcyk7CisgICAgICAg
ICAgICBhc3NlcnQoZmFsc2UsICJhc3NlcnRfdGhyb3dzIiwgZGVzY3JpcHRpb24sCisgICAgICAg
ICAgICAgICAgICAgIiR7ZnVuY30gZGlkIG5vdCB0aHJvdyIsIHtmdW5jOmZ1bmN9KTsKKyAgICAg
ICAgfSBjYXRjaCAoZSkgeworICAgICAgICAgICAgaWYgKGUgaW5zdGFuY2VvZiBBc3NlcnRpb25F
cnJvcikgeworICAgICAgICAgICAgICAgIHRocm93IGU7CisgICAgICAgICAgICB9CisgICAgICAg
ICAgICBpZiAoY29kZSA9PT0gbnVsbCkgeworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIGlmICh0eXBlb2YgY29kZSA9PT0gIm9iamVjdCIpIHsKKyAg
ICAgICAgICAgICAgICBhc3NlcnQodHlwZW9mIGUgPT0gIm9iamVjdCIgJiYgIm5hbWUiIGluIGUg
JiYgZS5uYW1lID09IGNvZGUubmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgImFzc2VydF90
aHJvd3MiLCBkZXNjcmlwdGlvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgIiR7ZnVuY30gdGhy
ZXcgJHthY3R1YWx9ICgke2FjdHVhbF9uYW1lfSkgZXhwZWN0ZWQgJHtleHBlY3RlZH0gKCR7ZXhw
ZWN0ZWRfbmFtZX0pIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtmdW5j
OmZ1bmMsIGFjdHVhbDplLCBhY3R1YWxfbmFtZTplLm5hbWUsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgZXhwZWN0ZWQ6Y29kZSwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBleHBlY3RlZF9uYW1lOmNvZGUubmFtZX0pOworICAgICAgICAgICAgICAg
IHJldHVybjsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgdmFyIGNvZGVfbmFtZV9tYXAg
PSB7CisgICAgICAgICAgICAgICAgSU5ERVhfU0laRV9FUlI6ICdJbmRleFNpemVFcnJvcicsCisg
ICAgICAgICAgICAgICAgSElFUkFSQ0hZX1JFUVVFU1RfRVJSOiAnSGllcmFyY2h5UmVxdWVzdEVy
cm9yJywKKyAgICAgICAgICAgICAgICBXUk9OR19ET0NVTUVOVF9FUlI6ICdXcm9uZ0RvY3VtZW50
RXJyb3InLAorICAgICAgICAgICAgICAgIElOVkFMSURfQ0hBUkFDVEVSX0VSUjogJ0ludmFsaWRD
aGFyYWN0ZXJFcnJvcicsCisgICAgICAgICAgICAgICAgTk9fTU9ESUZJQ0FUSU9OX0FMTE9XRURf
RVJSOiAnTm9Nb2RpZmljYXRpb25BbGxvd2VkRXJyb3InLAorICAgICAgICAgICAgICAgIE5PVF9G
T1VORF9FUlI6ICdOb3RGb3VuZEVycm9yJywKKyAgICAgICAgICAgICAgICBOT1RfU1VQUE9SVEVE
X0VSUjogJ05vdFN1cHBvcnRlZEVycm9yJywKKyAgICAgICAgICAgICAgICBJTlZBTElEX1NUQVRF
X0VSUjogJ0ludmFsaWRTdGF0ZUVycm9yJywKKyAgICAgICAgICAgICAgICBTWU5UQVhfRVJSOiAn
U3ludGF4RXJyb3InLAorICAgICAgICAgICAgICAgIElOVkFMSURfTU9ESUZJQ0FUSU9OX0VSUjog
J0ludmFsaWRNb2RpZmljYXRpb25FcnJvcicsCisgICAgICAgICAgICAgICAgTkFNRVNQQUNFX0VS
UjogJ05hbWVzcGFjZUVycm9yJywKKyAgICAgICAgICAgICAgICBJTlZBTElEX0FDQ0VTU19FUlI6
ICdJbnZhbGlkQWNjZXNzRXJyb3InLAorICAgICAgICAgICAgICAgIFRZUEVfTUlTTUFUQ0hfRVJS
OiAnVHlwZU1pc21hdGNoRXJyb3InLAorICAgICAgICAgICAgICAgIFNFQ1VSSVRZX0VSUjogJ1Nl
Y3VyaXR5RXJyb3InLAorICAgICAgICAgICAgICAgIE5FVFdPUktfRVJSOiAnTmV0d29ya0Vycm9y
JywKKyAgICAgICAgICAgICAgICBBQk9SVF9FUlI6ICdBYm9ydEVycm9yJywKKyAgICAgICAgICAg
ICAgICBVUkxfTUlTTUFUQ0hfRVJSOiAnVVJMTWlzbWF0Y2hFcnJvcicsCisgICAgICAgICAgICAg
ICAgUVVPVEFfRVhDRUVERURfRVJSOiAnUXVvdGFFeGNlZWRlZEVycm9yJywKKyAgICAgICAgICAg
ICAgICBUSU1FT1VUX0VSUjogJ1RpbWVvdXRFcnJvcicsCisgICAgICAgICAgICAgICAgSU5WQUxJ
RF9OT0RFX1RZUEVfRVJSOiAnSW52YWxpZE5vZGVUeXBlRXJyb3InLAorICAgICAgICAgICAgICAg
IERBVEFfQ0xPTkVfRVJSOiAnRGF0YUNsb25lRXJyb3InCisgICAgICAgICAgICB9OworCisgICAg
ICAgICAgICB2YXIgbmFtZSA9IGNvZGUgaW4gY29kZV9uYW1lX21hcCA/IGNvZGVfbmFtZV9tYXBb
Y29kZV0gOiBjb2RlOworCisgICAgICAgICAgICB2YXIgbmFtZV9jb2RlX21hcCA9IHsKKyAgICAg
ICAgICAgICAgICBJbmRleFNpemVFcnJvcjogMSwKKyAgICAgICAgICAgICAgICBIaWVyYXJjaHlS
ZXF1ZXN0RXJyb3I6IDMsCisgICAgICAgICAgICAgICAgV3JvbmdEb2N1bWVudEVycm9yOiA0LAor
ICAgICAgICAgICAgICAgIEludmFsaWRDaGFyYWN0ZXJFcnJvcjogNSwKKyAgICAgICAgICAgICAg
ICBOb01vZGlmaWNhdGlvbkFsbG93ZWRFcnJvcjogNywKKyAgICAgICAgICAgICAgICBOb3RGb3Vu
ZEVycm9yOiA4LAorICAgICAgICAgICAgICAgIE5vdFN1cHBvcnRlZEVycm9yOiA5LAorICAgICAg
ICAgICAgICAgIEludmFsaWRTdGF0ZUVycm9yOiAxMSwKKyAgICAgICAgICAgICAgICBTeW50YXhF
cnJvcjogMTIsCisgICAgICAgICAgICAgICAgSW52YWxpZE1vZGlmaWNhdGlvbkVycm9yOiAxMywK
KyAgICAgICAgICAgICAgICBOYW1lc3BhY2VFcnJvcjogMTQsCisgICAgICAgICAgICAgICAgSW52
YWxpZEFjY2Vzc0Vycm9yOiAxNSwKKyAgICAgICAgICAgICAgICBUeXBlTWlzbWF0Y2hFcnJvcjog
MTcsCisgICAgICAgICAgICAgICAgU2VjdXJpdHlFcnJvcjogMTgsCisgICAgICAgICAgICAgICAg
TmV0d29ya0Vycm9yOiAxOSwKKyAgICAgICAgICAgICAgICBBYm9ydEVycm9yOiAyMCwKKyAgICAg
ICAgICAgICAgICBVUkxNaXNtYXRjaEVycm9yOiAyMSwKKyAgICAgICAgICAgICAgICBRdW90YUV4
Y2VlZGVkRXJyb3I6IDIyLAorICAgICAgICAgICAgICAgIFRpbWVvdXRFcnJvcjogMjMsCisgICAg
ICAgICAgICAgICAgSW52YWxpZE5vZGVUeXBlRXJyb3I6IDI0LAorICAgICAgICAgICAgICAgIERh
dGFDbG9uZUVycm9yOiAyNSwKKworICAgICAgICAgICAgICAgIFVua25vd25FcnJvcjogMCwKKyAg
ICAgICAgICAgICAgICBDb25zdHJhaW50RXJyb3I6IDAsCisgICAgICAgICAgICAgICAgRGF0YUVy
cm9yOiAwLAorICAgICAgICAgICAgICAgIFRyYW5zYWN0aW9uSW5hY3RpdmVFcnJvcjogMCwKKyAg
ICAgICAgICAgICAgICBSZWFkT25seUVycm9yOiAwLAorICAgICAgICAgICAgICAgIFZlcnNpb25F
cnJvcjogMAorICAgICAgICAgICAgfTsKKworICAgICAgICAgICAgaWYgKCEobmFtZSBpbiBuYW1l
X2NvZGVfbWFwKSkgeworICAgICAgICAgICAgICAgIHRocm93IG5ldyBBc3NlcnRpb25FcnJvcign
VGVzdCBidWc6IHVucmVjb2duaXplZCBET01FeGNlcHRpb24gY29kZSAiJyArIGNvZGUgKyAnIiBw
YXNzZWQgdG8gYXNzZXJ0X3Rocm93cygpJyk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAg
IHZhciByZXF1aXJlZF9wcm9wcyA9IHsgY29kZTogbmFtZV9jb2RlX21hcFtuYW1lXSB9OworCisg
ICAgICAgICAgICBpZiAocmVxdWlyZWRfcHJvcHMuY29kZSA9PT0gMAorICAgICAgICAgICAgfHwg
KCJuYW1lIiBpbiBlICYmIGUubmFtZSAhPT0gZS5uYW1lLnRvVXBwZXJDYXNlKCkgJiYgZS5uYW1l
ICE9PSAiRE9NRXhjZXB0aW9uIikpIHsKKyAgICAgICAgICAgICAgICAvLyBOZXcgc3R5bGUgZXhj
ZXB0aW9uOiBhbHNvIHRlc3QgdGhlIG5hbWUgcHJvcGVydHkuCisgICAgICAgICAgICAgICAgcmVx
dWlyZWRfcHJvcHMubmFtZSA9IG5hbWU7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIC8v
V2UnZCBsaWtlIHRvIHRlc3QgdGhhdCBlIGluc3RhbmNlb2YgdGhlIGFwcHJvcHJpYXRlIGludGVy
ZmFjZSwKKyAgICAgICAgICAgIC8vYnV0IHdlIGNhbid0LCBiZWNhdXNlIHdlIGRvbid0IGtub3cg
d2hhdCB3aW5kb3cgaXQgd2FzIGNyZWF0ZWQKKyAgICAgICAgICAgIC8vaW4uICBJdCBtaWdodCBi
ZSBhbiBpbnN0YW5jZW9mIHRoZSBhcHByb3ByaWF0ZSBpbnRlcmZhY2Ugb24gc29tZQorICAgICAg
ICAgICAgLy91bmtub3duIG90aGVyIHdpbmRvdy4gIFRPRE86IFdvcmsgYXJvdW5kIHRoaXMgc29t
ZWhvdz8KKworICAgICAgICAgICAgYXNzZXJ0KHR5cGVvZiBlID09ICJvYmplY3QiLAorICAgICAg
ICAgICAgICAgICAgICJhc3NlcnRfdGhyb3dzIiwgZGVzY3JpcHRpb24sCisgICAgICAgICAgICAg
ICAgICAgIiR7ZnVuY30gdGhyZXcgJHtlfSB3aXRoIHR5cGUgJHt0eXBlfSwgbm90IGFuIG9iamVj
dCIsCisgICAgICAgICAgICAgICAgICAge2Z1bmM6ZnVuYywgZTplLCB0eXBlOnR5cGVvZiBlfSk7
CisKKyAgICAgICAgICAgIGZvciAodmFyIHByb3AgaW4gcmVxdWlyZWRfcHJvcHMpIHsKKyAgICAg
ICAgICAgICAgICBhc3NlcnQodHlwZW9mIGUgPT0gIm9iamVjdCIgJiYgcHJvcCBpbiBlICYmIGVb
cHJvcF0gPT0gcmVxdWlyZWRfcHJvcHNbcHJvcF0sCisgICAgICAgICAgICAgICAgICAgICAgICJh
c3NlcnRfdGhyb3dzIiwgZGVzY3JpcHRpb24sCisgICAgICAgICAgICAgICAgICAgICAgICIke2Z1
bmN9IHRocmV3ICR7ZX0gdGhhdCBpcyBub3QgYSBET01FeGNlcHRpb24gIiArIGNvZGUgKyAiOiBw
cm9wZXJ0eSAke3Byb3B9IGlzIGVxdWFsIHRvICR7YWN0dWFsfSwgZXhwZWN0ZWQgJHtleHBlY3Rl
ZH0iLAorICAgICAgICAgICAgICAgICAgICAgICB7ZnVuYzpmdW5jLCBlOmUsIHByb3A6cHJvcCwg
YWN0dWFsOmVbcHJvcF0sIGV4cGVjdGVkOnJlcXVpcmVkX3Byb3BzW3Byb3BdfSk7CisgICAgICAg
ICAgICB9CisgICAgICAgIH0KKyAgICB9CisgICAgZXhwb3NlKGFzc2VydF90aHJvd3MsICJhc3Nl
cnRfdGhyb3dzIik7CisKKyAgICBmdW5jdGlvbiBhc3NlcnRfdW5yZWFjaGVkKGRlc2NyaXB0aW9u
KSB7CisgICAgICAgICBhc3NlcnQoZmFsc2UsICJhc3NlcnRfdW5yZWFjaGVkIiwgZGVzY3JpcHRp
b24sCisgICAgICAgICAgICAgICAgIlJlYWNoZWQgdW5yZWFjaGFibGUgY29kZSIpOworICAgIH0K
KyAgICBleHBvc2UoYXNzZXJ0X3VucmVhY2hlZCwgImFzc2VydF91bnJlYWNoZWQiKTsKKworICAg
IGZ1bmN0aW9uIGFzc2VydF9hbnkoYXNzZXJ0X2Z1bmMsIGFjdHVhbCwgZXhwZWN0ZWRfYXJyYXkp
CisgICAgeworICAgICAgICB2YXIgYXJncyA9IFtdLnNsaWNlLmNhbGwoYXJndW1lbnRzLCAzKQor
ICAgICAgICB2YXIgZXJyb3JzID0gW10KKyAgICAgICAgdmFyIHBhc3NlZCA9IGZhbHNlOworICAg
ICAgICBmb3JFYWNoKGV4cGVjdGVkX2FycmF5LAorICAgICAgICAgICAgICAgIGZ1bmN0aW9uKGV4
cGVjdGVkKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgdHJ5IHsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIGFzc2VydF9mdW5jLmFwcGx5KHRoaXMsIFthY3R1YWwsIGV4
cGVjdGVkXS5jb25jYXQoYXJncykpCisgICAgICAgICAgICAgICAgICAgICAgICBwYXNzZWQgPSB0
cnVlOworICAgICAgICAgICAgICAgICAgICB9IGNhdGNoIChlKSB7CisgICAgICAgICAgICAgICAg
ICAgICAgICBlcnJvcnMucHVzaChlLm1lc3NhZ2UpOworICAgICAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICAgICAgfSk7CisgICAgICAgIGlmICghcGFzc2VkKSB7CisgICAgICAgICAgICB0
aHJvdyBuZXcgQXNzZXJ0aW9uRXJyb3IoZXJyb3JzLmpvaW4oIlxuXG4iKSk7CisgICAgICAgIH0K
KyAgICB9CisgICAgZXhwb3NlKGFzc2VydF9hbnksICJhc3NlcnRfYW55Iik7CisKKyAgICBmdW5j
dGlvbiBUZXN0KG5hbWUsIHByb3BlcnRpZXMpCisgICAgeworICAgICAgICB0aGlzLm5hbWUgPSBu
YW1lOworCisgICAgICAgIHRoaXMucGhhc2VzID0geworICAgICAgICAgICAgSU5JVElBTDowLAor
ICAgICAgICAgICAgU1RBUlRFRDoxLAorICAgICAgICAgICAgSEFTX1JFU1VMVDoyLAorICAgICAg
ICAgICAgQ09NUExFVEU6MworICAgICAgICB9OworICAgICAgICB0aGlzLnBoYXNlID0gdGhpcy5w
aGFzZXMuSU5JVElBTDsKKworICAgICAgICB0aGlzLnN0YXR1cyA9IHRoaXMuTk9UUlVOOworICAg
ICAgICB0aGlzLnRpbWVvdXRfaWQgPSBudWxsOworCisgICAgICAgIHRoaXMucHJvcGVydGllcyA9
IHByb3BlcnRpZXM7CisgICAgICAgIHZhciB0aW1lb3V0ID0gcHJvcGVydGllcy50aW1lb3V0ID8g
cHJvcGVydGllcy50aW1lb3V0IDogc2V0dGluZ3MudGVzdF90aW1lb3V0CisgICAgICAgIGlmICh0
aW1lb3V0ICE9IG51bGwpIHsKKyAgICAgICAgICAgIHRoaXMudGltZW91dF9sZW5ndGggPSB0aW1l
b3V0ICogdGVzdHMudGltZW91dF9tdWx0aXBsaWVyOworICAgICAgICB9IGVsc2UgeworICAgICAg
ICAgICAgdGhpcy50aW1lb3V0X2xlbmd0aCA9IG51bGw7CisgICAgICAgIH0KKworICAgICAgICB0
aGlzLm1lc3NhZ2UgPSBudWxsOworCisgICAgICAgIHZhciB0aGlzX29iaiA9IHRoaXM7CisgICAg
ICAgIHRoaXMuc3RlcHMgPSBbXTsKKworICAgICAgICB0aGlzLmNsZWFudXBfY2FsbGJhY2tzID0g
W107CisKKyAgICAgICAgdGVzdHMucHVzaCh0aGlzKTsKKyAgICB9CisKKyAgICBUZXN0LnN0YXR1
c2VzID0geworICAgICAgICBQQVNTOjAsCisgICAgICAgIEZBSUw6MSwKKyAgICAgICAgVElNRU9V
VDoyLAorICAgICAgICBOT1RSVU46MworICAgIH07CisKKyAgICBUZXN0LnByb3RvdHlwZSA9IG1l
cmdlKHt9LCBUZXN0LnN0YXR1c2VzKTsKKworICAgIFRlc3QucHJvdG90eXBlLnN0cnVjdHVyZWRf
Y2xvbmUgPSBmdW5jdGlvbigpCisgICAgeworICAgICAgICBpZiAoIXRoaXMuX3N0cnVjdHVyZWRf
Y2xvbmUpIHsKKyAgICAgICAgICAgIHZhciBtc2cgPSB0aGlzLm1lc3NhZ2U7CisgICAgICAgICAg
ICBtc2cgPSBtc2cgPyBTdHJpbmcobXNnKSA6IG1zZzsKKyAgICAgICAgICAgIHRoaXMuX3N0cnVj
dHVyZWRfY2xvbmUgPSBtZXJnZSh7CisgICAgICAgICAgICAgICAgbmFtZTpTdHJpbmcodGhpcy5u
YW1lKSwKKyAgICAgICAgICAgICAgICBzdGF0dXM6dGhpcy5zdGF0dXMsCisgICAgICAgICAgICAg
ICAgbWVzc2FnZTptc2cKKyAgICAgICAgICAgIH0sIFRlc3Quc3RhdHVzZXMpOworICAgICAgICB9
CisgICAgICAgIHJldHVybiB0aGlzLl9zdHJ1Y3R1cmVkX2Nsb25lOworICAgIH07CisKKyAgICBU
ZXN0LnByb3RvdHlwZS5zdGVwID0gZnVuY3Rpb24oZnVuYywgdGhpc19vYmopCisgICAgeworICAg
ICAgICBpZiAodGhpcy5waGFzZSA+IHRoaXMucGhhc2VzLlNUQVJURUQpIHsKKyAgICAgICAgICAg
IHJldHVybjsKKyAgICAgICAgfQorICAgICAgICB0aGlzLnBoYXNlID0gdGhpcy5waGFzZXMuU1RB
UlRFRDsKKyAgICAgICAgLy9JZiB3ZSBkb24ndCBnZXQgYSByZXN1bHQgYmVmb3JlIHRoZSBoYXJu
ZXNzIHRpbWVzIG91dCB0aGF0IHdpbGwgYmUgYSB0ZXN0IHRpbW91dAorICAgICAgICB0aGlzLnNl
dF9zdGF0dXModGhpcy5USU1FT1VULCAiVGVzdCB0aW1lZCBvdXQiKTsKKworICAgICAgICB0ZXN0
cy5zdGFydGVkID0gdHJ1ZTsKKworICAgICAgICBpZiAodGhpcy50aW1lb3V0X2lkID09PSBudWxs
KSB7CisgICAgICAgICAgICB0aGlzLnNldF90aW1lb3V0KCk7CisgICAgICAgIH0KKworICAgICAg
ICB0aGlzLnN0ZXBzLnB1c2goZnVuYyk7CisKKyAgICAgICAgaWYgKGFyZ3VtZW50cy5sZW5ndGgg
PT09IDEpIHsKKyAgICAgICAgICAgIHRoaXNfb2JqID0gdGhpczsKKyAgICAgICAgfQorCisgICAg
ICAgIHRyeSB7CisgICAgICAgICAgICByZXR1cm4gZnVuYy5hcHBseSh0aGlzX29iaiwgQXJyYXku
cHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzLCAyKSk7CisgICAgICAgIH0gY2F0Y2ggKGUp
IHsKKyAgICAgICAgICAgIGlmICh0aGlzLnBoYXNlID49IHRoaXMucGhhc2VzLkhBU19SRVNVTFQp
IHsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisgICAgICAgICAgICB2
YXIgbWVzc2FnZSA9ICh0eXBlb2YgZSA9PT0gIm9iamVjdCIgJiYgZSAhPT0gbnVsbCkgPyBlLm1l
c3NhZ2UgOiBlOworICAgICAgICAgICAgaWYgKHR5cGVvZiBlLnN0YWNrICE9ICJ1bmRlZmluZWQi
ICYmIHR5cGVvZiBlLm1lc3NhZ2UgPT0gInN0cmluZyIpIHsKKyAgICAgICAgICAgICAgICAvL1Ry
eSB0byBtYWtlIGl0IG1vcmUgaW5mb3JtYXRpdmUgZm9yIHNvbWUgZXhjZXB0aW9ucywgYXQgbGVh
c3QKKyAgICAgICAgICAgICAgICAvL2luIEdlY2tvIGFuZCBXZWJLaXQuICBUaGlzIHJlc3VsdHMg
aW4gYSBzdGFjayBkdW1wIGluc3RlYWQgb2YKKyAgICAgICAgICAgICAgICAvL2p1c3QgZXJyb3Jz
IGxpa2UgIkNhbm5vdCByZWFkIHByb3BlcnR5ICdwYXJlbnROb2RlJyBvZiBudWxsIgorICAgICAg
ICAgICAgICAgIC8vb3IgInJvb3QgaXMgbnVsbCIuICBNYWtlcyBpdCBhIGxvdCBsb25nZXIsIG9m
IGNvdXJzZS4KKyAgICAgICAgICAgICAgICBtZXNzYWdlICs9ICIoc3RhY2s6ICIgKyBlLnN0YWNr
ICsgIikiOworICAgICAgICAgICAgfQorICAgICAgICAgICAgdGhpcy5zZXRfc3RhdHVzKHRoaXMu
RkFJTCwgbWVzc2FnZSk7CisgICAgICAgICAgICB0aGlzLnBoYXNlID0gdGhpcy5waGFzZXMuSEFT
X1JFU1VMVDsKKyAgICAgICAgICAgIHRoaXMuZG9uZSgpOworICAgICAgICB9CisgICAgfTsKKwor
ICAgIFRlc3QucHJvdG90eXBlLnN0ZXBfZnVuYyA9IGZ1bmN0aW9uKGZ1bmMsIHRoaXNfb2JqKQor
ICAgIHsKKyAgICAgICAgdmFyIHRlc3RfdGhpcyA9IHRoaXM7CisKKyAgICAgICAgaWYgKGFyZ3Vt
ZW50cy5sZW5ndGggPT09IDEpIHsKKyAgICAgICAgICAgIHRoaXNfb2JqID0gdGVzdF90aGlzOwor
ICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIGZ1bmN0aW9uKCkKKyAgICAgICAgeworICAgICAg
ICAgICAgdGVzdF90aGlzLnN0ZXAuYXBwbHkodGVzdF90aGlzLCBbZnVuYywgdGhpc19vYmpdLmNv
bmNhdCgKKyAgICAgICAgICAgICAgICBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVu
dHMpKSk7CisgICAgICAgIH07CisgICAgfTsKKworICAgIFRlc3QucHJvdG90eXBlLnN0ZXBfZnVu
Y19kb25lID0gZnVuY3Rpb24oZnVuYywgdGhpc19vYmopCisgICAgeworICAgICAgICB2YXIgdGVz
dF90aGlzID0gdGhpczsKKworICAgICAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCA9PT0gMSkgewor
ICAgICAgICAgICAgdGhpc19vYmogPSB0ZXN0X3RoaXM7CisgICAgICAgIH0KKworICAgICAgICBy
ZXR1cm4gZnVuY3Rpb24oKQorICAgICAgICB7CisgICAgICAgICAgICBpZiAoZnVuYykgeworICAg
ICAgICAgICAgICAgIHRlc3RfdGhpcy5zdGVwLmFwcGx5KHRlc3RfdGhpcywgW2Z1bmMsIHRoaXNf
b2JqXS5jb25jYXQoCisgICAgICAgICAgICAgICAgICAgIEFycmF5LnByb3RvdHlwZS5zbGljZS5j
YWxsKGFyZ3VtZW50cykpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHRlc3RfdGhpcy5k
b25lKCk7CisgICAgICAgIH07CisgICAgfQorCisgICAgVGVzdC5wcm90b3R5cGUuYWRkX2NsZWFu
dXAgPSBmdW5jdGlvbihjYWxsYmFjaykgeworICAgICAgICB0aGlzLmNsZWFudXBfY2FsbGJhY2tz
LnB1c2goY2FsbGJhY2spOworICAgIH0KKworICAgIFRlc3QucHJvdG90eXBlLnNldF90aW1lb3V0
ID0gZnVuY3Rpb24oKQorICAgIHsKKyAgICAgICAgaWYgKHRoaXMudGltZW91dF9sZW5ndGggIT09
IG51bGwpIHsKKyAgICAgICAgICAgIHZhciB0aGlzX29iaiA9IHRoaXM7CisgICAgICAgICAgICB0
aGlzLnRpbWVvdXRfaWQgPSBzZXRUaW1lb3V0KGZ1bmN0aW9uKCkKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgdGhpc19vYmoudGltZW91dCgpOworICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB9LCB0aGlzLnRpbWVvdXRfbGVuZ3RoKTsKKyAgICAgICAgfQor
ICAgIH0KKworICAgIFRlc3QucHJvdG90eXBlLnNldF9zdGF0dXMgPSBmdW5jdGlvbihzdGF0dXMs
IG1lc3NhZ2UpCisgICAgeworICAgICAgICB0aGlzLnN0YXR1cyA9IHN0YXR1czsKKyAgICAgICAg
dGhpcy5tZXNzYWdlID0gbWVzc2FnZTsKKyAgICB9CisKKyAgICBUZXN0LnByb3RvdHlwZS50aW1l
b3V0ID0gZnVuY3Rpb24oKQorICAgIHsKKyAgICAgICAgdGhpcy50aW1lb3V0X2lkID0gbnVsbDsK
KyAgICAgICAgdGhpcy5zZXRfc3RhdHVzKHRoaXMuVElNRU9VVCwgIlRlc3QgdGltZWQgb3V0IikK
KyAgICAgICAgdGhpcy5waGFzZSA9IHRoaXMucGhhc2VzLkhBU19SRVNVTFQ7CisgICAgICAgIHRo
aXMuZG9uZSgpOworICAgIH07CisKKyAgICBUZXN0LnByb3RvdHlwZS5kb25lID0gZnVuY3Rpb24o
KQorICAgIHsKKyAgICAgICAgaWYgKHRoaXMucGhhc2UgPT0gdGhpcy5waGFzZXMuQ09NUExFVEUp
IHsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIGlmICh0aGlzLnBo
YXNlIDw9IHRoaXMucGhhc2VzLlNUQVJURUQpIHsKKyAgICAgICAgICAgIHRoaXMuc2V0X3N0YXR1
cyh0aGlzLlBBU1MsIG51bGwpOworICAgICAgICB9CisKKyAgICAgICAgaWYgKHRoaXMuc3RhdHVz
ID09IHRoaXMuTk9UUlVOKSB7CisgICAgICAgICAgICBhbGVydCh0aGlzLnBoYXNlKTsKKyAgICAg
ICAgfQorCisgICAgICAgIHRoaXMucGhhc2UgPSB0aGlzLnBoYXNlcy5DT01QTEVURTsKKworICAg
ICAgICBjbGVhclRpbWVvdXQodGhpcy50aW1lb3V0X2lkKTsKKyAgICAgICAgdGVzdHMucmVzdWx0
KHRoaXMpOworICAgICAgICB0aGlzLmNsZWFudXAoKTsKKyAgICB9OworCisgICAgVGVzdC5wcm90
b3R5cGUuY2xlYW51cCA9IGZ1bmN0aW9uKCkgeworICAgICAgICBmb3JFYWNoKHRoaXMuY2xlYW51
cF9jYWxsYmFja3MsCisgICAgICAgICAgICAgICAgZnVuY3Rpb24oY2xlYW51cF9jYWxsYmFjaykg
eworICAgICAgICAgICAgICAgICAgICBjbGVhbnVwX2NhbGxiYWNrKCkKKyAgICAgICAgICAgICAg
ICB9KTsKKyAgICB9CisKKyAgICAvKgorICAgICAqIEhhcm5lc3MKKyAgICAgKi8KKworICAgIGZ1
bmN0aW9uIFRlc3RzU3RhdHVzKCkKKyAgICB7CisgICAgICAgIHRoaXMuc3RhdHVzID0gbnVsbDsK
KyAgICAgICAgdGhpcy5tZXNzYWdlID0gbnVsbDsKKyAgICB9CisKKyAgICBUZXN0c1N0YXR1cy5z
dGF0dXNlcyA9IHsKKyAgICAgICAgT0s6MCwKKyAgICAgICAgRVJST1I6MSwKKyAgICAgICAgVElN
RU9VVDoyCisgICAgfTsKKworICAgIFRlc3RzU3RhdHVzLnByb3RvdHlwZSA9IG1lcmdlKHt9LCBU
ZXN0c1N0YXR1cy5zdGF0dXNlcyk7CisKKyAgICBUZXN0c1N0YXR1cy5wcm90b3R5cGUuc3RydWN0
dXJlZF9jbG9uZSA9IGZ1bmN0aW9uKCkKKyAgICB7CisgICAgICAgIGlmICghdGhpcy5fc3RydWN0
dXJlZF9jbG9uZSkgeworICAgICAgICAgICAgdmFyIG1zZyA9IHRoaXMubWVzc2FnZTsKKyAgICAg
ICAgICAgIG1zZyA9IG1zZyA/IFN0cmluZyhtc2cpIDogbXNnOworICAgICAgICAgICAgdGhpcy5f
c3RydWN0dXJlZF9jbG9uZSA9IG1lcmdlKHsKKyAgICAgICAgICAgICAgICBzdGF0dXM6dGhpcy5z
dGF0dXMsCisgICAgICAgICAgICAgICAgbWVzc2FnZTptc2cKKyAgICAgICAgICAgIH0sIFRlc3Rz
U3RhdHVzLnN0YXR1c2VzKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gdGhpcy5fc3RydWN0
dXJlZF9jbG9uZTsKKyAgICB9OworCisgICAgZnVuY3Rpb24gVGVzdHMoKQorICAgIHsKKyAgICAg
ICAgdGhpcy50ZXN0cyA9IFtdOworICAgICAgICB0aGlzLm51bV9wZW5kaW5nID0gMDsKKworICAg
ICAgICB0aGlzLnBoYXNlcyA9IHsKKyAgICAgICAgICAgIElOSVRJQUw6MCwKKyAgICAgICAgICAg
IFNFVFVQOjEsCisgICAgICAgICAgICBIQVZFX1RFU1RTOjIsCisgICAgICAgICAgICBIQVZFX1JF
U1VMVFM6MywKKyAgICAgICAgICAgIENPTVBMRVRFOjQKKyAgICAgICAgfTsKKyAgICAgICAgdGhp
cy5waGFzZSA9IHRoaXMucGhhc2VzLklOSVRJQUw7CisKKyAgICAgICAgdGhpcy5wcm9wZXJ0aWVz
ID0ge307CisKKyAgICAgICAgLy9BbGwgdGVzdHMgY2FuJ3QgYmUgZG9uZSB1bnRpbCB0aGUgbG9h
ZCBldmVudCBmaXJlcworICAgICAgICB0aGlzLmFsbF9sb2FkZWQgPSBmYWxzZTsKKyAgICAgICAg
dGhpcy53YWl0X2Zvcl9maW5pc2ggPSBmYWxzZTsKKyAgICAgICAgdGhpcy5wcm9jZXNzaW5nX2Nh
bGxiYWNrcyA9IGZhbHNlOworCisgICAgICAgIHRoaXMuYWxsb3dfdW5jYXVnaHRfZXhjZXB0aW9u
ID0gZmFsc2U7CisKKyAgICAgICAgdGhpcy50aW1lb3V0X211bHRpcGxpZXIgPSAxOworICAgICAg
ICB0aGlzLnRpbWVvdXRfbGVuZ3RoID0gdGhpcy5nZXRfdGltZW91dCgpOworICAgICAgICB0aGlz
LnRpbWVvdXRfaWQgPSBudWxsOworCisgICAgICAgIHRoaXMuc3RhcnRfY2FsbGJhY2tzID0gW107
CisgICAgICAgIHRoaXMudGVzdF9kb25lX2NhbGxiYWNrcyA9IFtdOworICAgICAgICB0aGlzLmFs
bF9kb25lX2NhbGxiYWNrcyA9IFtdOworCisgICAgICAgIHRoaXMuc3RhdHVzID0gbmV3IFRlc3Rz
U3RhdHVzKCk7CisKKyAgICAgICAgdmFyIHRoaXNfb2JqID0gdGhpczsKKworICAgICAgICBvbl9l
dmVudCh3aW5kb3csICJsb2FkIiwKKyAgICAgICAgICAgICAgICAgZnVuY3Rpb24oKQorICAgICAg
ICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICB0aGlzX29iai5hbGxfbG9hZGVkID0g
dHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzX29iai5hbGxfZG9uZSgpKQorICAg
ICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXNfb2JqLmNv
bXBsZXRlKCk7CisgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgIH0pOwor
CisgICAgICAgIHRoaXMuc2V0X3RpbWVvdXQoKTsKKyAgICB9CisKKyAgICBUZXN0cy5wcm90b3R5
cGUuc2V0dXAgPSBmdW5jdGlvbihmdW5jLCBwcm9wZXJ0aWVzKQorICAgIHsKKyAgICAgICAgaWYg
KHRoaXMucGhhc2UgPj0gdGhpcy5waGFzZXMuSEFWRV9SRVNVTFRTKSB7CisgICAgICAgICAgICBy
ZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBpZiAodGhpcy5waGFzZSA8IHRoaXMucGhhc2Vz
LlNFVFVQKSB7CisgICAgICAgICAgICB0aGlzLnBoYXNlID0gdGhpcy5waGFzZXMuU0VUVVA7Cisg
ICAgICAgIH0KKworICAgICAgICB0aGlzLnByb3BlcnRpZXMgPSBwcm9wZXJ0aWVzOworCisgICAg
ICAgIGZvciAodmFyIHAgaW4gcHJvcGVydGllcykgeworICAgICAgICAgICAgaWYgKHByb3BlcnRp
ZXMuaGFzT3duUHJvcGVydHkocCkpIHsKKyAgICAgICAgICAgICAgICB2YXIgdmFsdWUgPSBwcm9w
ZXJ0aWVzW3BdCisgICAgICAgICAgICAgICAgaWYgKHAgPT0gImFsbG93X3VuY2F1Z2h0X2V4Y2Vw
dGlvbiIpIHsKKyAgICAgICAgICAgICAgICAgICAgdGhpcy5hbGxvd191bmNhdWdodF9leGNlcHRp
b24gPSB2YWx1ZTsKKyAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHAgPT0gImV4cGxpY2l0X2Rv
bmUiICYmIHZhbHVlKSB7CisgICAgICAgICAgICAgICAgICAgIHRoaXMud2FpdF9mb3JfZmluaXNo
ID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHAgPT0gImV4cGxpY2l0X3RpbWVv
dXQiICYmIHZhbHVlKSB7CisgICAgICAgICAgICAgICAgICAgIHRoaXMudGltZW91dF9sZW5ndGgg
PSBudWxsOworICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy50aW1lb3V0X2lkKQorICAgICAg
ICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICBjbGVhclRpbWVvdXQodGhp
cy50aW1lb3V0X2lkKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0g
ZWxzZSBpZiAocCA9PSAidGltZW91dF9tdWx0aXBsaWVyIikgeworICAgICAgICAgICAgICAgICAg
ICB0aGlzLnRpbWVvdXRfbXVsdGlwbGllciA9IHZhbHVlOworICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIGlmIChmdW5jKSB7CisgICAgICAgICAg
ICB0cnkgeworICAgICAgICAgICAgICAgIGZ1bmMoKTsKKyAgICAgICAgICAgIH0gY2F0Y2ggKGUp
IHsKKyAgICAgICAgICAgICAgICB0aGlzLnN0YXR1cy5zdGF0dXMgPSB0aGlzLnN0YXR1cy5FUlJP
UjsKKyAgICAgICAgICAgICAgICB0aGlzLnN0YXR1cy5tZXNzYWdlID0gU3RyaW5nKGUpOworICAg
ICAgICAgICAgfTsKKyAgICAgICAgfQorICAgICAgICB0aGlzLnNldF90aW1lb3V0KCk7CisgICAg
fTsKKworICAgIFRlc3RzLnByb3RvdHlwZS5nZXRfdGltZW91dCA9IGZ1bmN0aW9uKCkKKyAgICB7
CisgICAgICAgIHZhciBtZXRhcyA9IGRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCJtZXRh
Iik7CisgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbWV0YXMubGVuZ3RoOyBpKyspIHsKKyAg
ICAgICAgICAgIGlmIChtZXRhc1tpXS5uYW1lID09ICJ0aW1lb3V0IikgeworICAgICAgICAgICAg
ICAgIGlmIChtZXRhc1tpXS5jb250ZW50ID09ICJsb25nIikgeworICAgICAgICAgICAgICAgICAg
ICByZXR1cm4gc2V0dGluZ3MuaGFybmVzc190aW1lb3V0Lmxvbmc7CisgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAg
ICAgIHJldHVybiBzZXR0aW5ncy5oYXJuZXNzX3RpbWVvdXQubm9ybWFsOworICAgIH0KKworICAg
IFRlc3RzLnByb3RvdHlwZS5zZXRfdGltZW91dCA9IGZ1bmN0aW9uKCkKKyAgICB7CisgICAgICAg
IHZhciB0aGlzX29iaiA9IHRoaXM7CisgICAgICAgIGNsZWFyVGltZW91dCh0aGlzLnRpbWVvdXRf
aWQpOworICAgICAgICBpZiAodGhpcy50aW1lb3V0X2xlbmd0aCAhPT0gbnVsbCkgeworICAgICAg
ICAgICAgdGhpcy50aW1lb3V0X2lkID0gc2V0VGltZW91dChmdW5jdGlvbigpIHsKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXNfb2JqLnRpbWVvdXQoKTsK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwgdGhpcy50aW1lb3V0
X2xlbmd0aCk7CisgICAgICAgIH0KKyAgICB9OworCisgICAgVGVzdHMucHJvdG90eXBlLnRpbWVv
dXQgPSBmdW5jdGlvbigpIHsKKyAgICAgICAgdGhpcy5zdGF0dXMuc3RhdHVzID0gdGhpcy5zdGF0
dXMuVElNRU9VVDsKKyAgICAgICAgdGhpcy5jb21wbGV0ZSgpOworICAgIH07CisKKyAgICBUZXN0
cy5wcm90b3R5cGUuZW5kX3dhaXQgPSBmdW5jdGlvbigpCisgICAgeworICAgICAgICB0aGlzLndh
aXRfZm9yX2ZpbmlzaCA9IGZhbHNlOworICAgICAgICBpZiAodGhpcy5hbGxfZG9uZSgpKSB7Cisg
ICAgICAgICAgICB0aGlzLmNvbXBsZXRlKCk7CisgICAgICAgIH0KKyAgICB9OworCisgICAgVGVz
dHMucHJvdG90eXBlLnB1c2ggPSBmdW5jdGlvbih0ZXN0KQorICAgIHsKKyAgICAgICAgaWYgKHRo
aXMucGhhc2UgPCB0aGlzLnBoYXNlcy5IQVZFX1RFU1RTKSB7CisgICAgICAgICAgICB0aGlzLnN0
YXJ0KCk7CisgICAgICAgIH0KKyAgICAgICAgdGhpcy5udW1fcGVuZGluZysrOworICAgICAgICB0
aGlzLnRlc3RzLnB1c2godGVzdCk7CisgICAgfTsKKworICAgIFRlc3RzLnByb3RvdHlwZS5hbGxf
ZG9uZSA9IGZ1bmN0aW9uKCkgeworICAgICAgICByZXR1cm4gKHRoaXMuYWxsX2xvYWRlZCAmJiB0
aGlzLm51bV9wZW5kaW5nID09PSAwICYmCisgICAgICAgICAgICAgICAgIXRoaXMud2FpdF9mb3Jf
ZmluaXNoICYmICF0aGlzLnByb2Nlc3NpbmdfY2FsbGJhY2tzKTsKKyAgICB9OworCisgICAgVGVz
dHMucHJvdG90eXBlLnN0YXJ0ID0gZnVuY3Rpb24oKSB7CisgICAgICAgIHRoaXMucGhhc2UgPSB0
aGlzLnBoYXNlcy5IQVZFX1RFU1RTOworICAgICAgICB0aGlzLm5vdGlmeV9zdGFydCgpOworICAg
IH07CisKKyAgICBUZXN0cy5wcm90b3R5cGUubm90aWZ5X3N0YXJ0ID0gZnVuY3Rpb24oKSB7Cisg
ICAgICAgIHZhciB0aGlzX29iaiA9IHRoaXM7CisgICAgICAgIGZvckVhY2ggKHRoaXMuc3RhcnRf
Y2FsbGJhY2tzLAorICAgICAgICAgICAgICAgICBmdW5jdGlvbihjYWxsYmFjaykKKyAgICAgICAg
ICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2sodGhpc19vYmoucHJvcGVy
dGllcyk7CisgICAgICAgICAgICAgICAgIH0pOworICAgICAgICBmb3JFYWNoX3dpbmRvd3MoCisg
ICAgICAgICAgICAgICAgZnVuY3Rpb24odywgaXNfc2FtZV9vcmlnaW4pCisgICAgICAgICAgICAg
ICAgeworICAgICAgICAgICAgICAgICAgICBpZiAoaXNfc2FtZV9vcmlnaW4gJiYgdy5zdGFydF9j
YWxsYmFjaykgeworICAgICAgICAgICAgICAgICAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB3LnN0YXJ0X2NhbGxiYWNrKHRoaXNfb2JqLnByb3BlcnRpZXMpOworICAg
ICAgICAgICAgICAgICAgICAgICAgfSBjYXRjaCAoZSkgeworICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGlmIChkZWJ1ZykgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJv
dyBlOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBpZiAoc3Vw
cG9ydHNfcG9zdF9tZXNzYWdlKHcpICYmIHcgIT09IHNlbGYpIHsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIHcucG9zdE1lc3NhZ2UoeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6
ICJzdGFydCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvcGVydGllczogdGhpc19v
YmoucHJvcGVydGllcworICAgICAgICAgICAgICAgICAgICAgICAgfSwgIioiKTsKKyAgICAgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0pOworICAgIH07CisKKyAgICBUZXN0cy5w
cm90b3R5cGUucmVzdWx0ID0gZnVuY3Rpb24odGVzdCkKKyAgICB7CisgICAgICAgIGlmICh0aGlz
LnBoYXNlID4gdGhpcy5waGFzZXMuSEFWRV9SRVNVTFRTKSB7CisgICAgICAgICAgICByZXR1cm47
CisgICAgICAgIH0KKyAgICAgICAgdGhpcy5waGFzZSA9IHRoaXMucGhhc2VzLkhBVkVfUkVTVUxU
UzsKKyAgICAgICAgdGhpcy5udW1fcGVuZGluZy0tOworICAgICAgICB0aGlzLm5vdGlmeV9yZXN1
bHQodGVzdCk7CisgICAgfTsKKworICAgIFRlc3RzLnByb3RvdHlwZS5ub3RpZnlfcmVzdWx0ID0g
ZnVuY3Rpb24odGVzdCkgeworICAgICAgICB2YXIgdGhpc19vYmogPSB0aGlzOworICAgICAgICB0
aGlzLnByb2Nlc3NpbmdfY2FsbGJhY2tzID0gdHJ1ZTsKKyAgICAgICAgZm9yRWFjaCh0aGlzLnRl
c3RfZG9uZV9jYWxsYmFja3MsCisgICAgICAgICAgICAgICAgZnVuY3Rpb24oY2FsbGJhY2spCisg
ICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBjYWxsYmFjayh0ZXN0LCB0aGlz
X29iaik7CisgICAgICAgICAgICAgICAgfSk7CisKKyAgICAgICAgZm9yRWFjaF93aW5kb3dzKAor
ICAgICAgICAgICAgICAgIGZ1bmN0aW9uKHcsIGlzX3NhbWVfb3JpZ2luKQorICAgICAgICAgICAg
ICAgIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGlzX3NhbWVfb3JpZ2luICYmIHcucmVzdWx0
X2NhbGxiYWNrKSB7CisgICAgICAgICAgICAgICAgICAgICAgICB0cnkgeworICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHcucmVzdWx0X2NhbGxiYWNrKHRlc3QpOworICAgICAgICAgICAgICAg
ICAgICAgICAgfSBjYXRjaCAoZSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChk
ZWJ1ZykgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBlOworICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBpZiAoc3VwcG9ydHNfcG9zdF9t
ZXNzYWdlKHcpICYmIHcgIT09IHNlbGYpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHcucG9z
dE1lc3NhZ2UoeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6ICJyZXN1bHQiLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRlc3Q6IHRlc3Quc3RydWN0dXJlZF9jbG9uZSgp
CisgICAgICAgICAgICAgICAgICAgICAgICB9LCAiKiIpOworICAgICAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICAgICAgfSk7CisgICAgICAgIHRoaXMucHJvY2Vzc2luZ19jYWxsYmFja3Mg
PSBmYWxzZTsKKyAgICAgICAgaWYgKHRoaXNfb2JqLmFsbF9kb25lKCkpIHsKKyAgICAgICAgICAg
IHRoaXNfb2JqLmNvbXBsZXRlKCk7CisgICAgICAgIH0KKyAgICB9OworCisgICAgVGVzdHMucHJv
dG90eXBlLmNvbXBsZXRlID0gZnVuY3Rpb24oKSB7CisgICAgICAgIGlmICh0aGlzLnBoYXNlID09
PSB0aGlzLnBoYXNlcy5DT01QTEVURSkgeworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9
CisgICAgICAgIHRoaXMucGhhc2UgPSB0aGlzLnBoYXNlcy5DT01QTEVURTsKKyAgICAgICAgdmFy
IHRoaXNfb2JqID0gdGhpczsKKyAgICAgICAgdGhpcy50ZXN0cy5mb3JFYWNoKAorICAgICAgICAg
ICAgZnVuY3Rpb24oeCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBpZiAoeC5zdGF0
dXMgPT09IHguTk9UUlVOKSB7CisgICAgICAgICAgICAgICAgICAgIHRoaXNfb2JqLm5vdGlmeV9y
ZXN1bHQoeCk7CisgICAgICAgICAgICAgICAgICAgIHguY2xlYW51cCgpOworICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgKTsKKyAgICAgICAgdGhpcy5ub3RpZnlfY29t
cGxldGUoKTsKKyAgICB9OworCisgICAgVGVzdHMucHJvdG90eXBlLm5vdGlmeV9jb21wbGV0ZSA9
IGZ1bmN0aW9uKCkKKyAgICB7CisgICAgICAgIGNsZWFyVGltZW91dCh0aGlzLnRpbWVvdXRfaWQp
OworICAgICAgICB2YXIgdGhpc19vYmogPSB0aGlzOworICAgICAgICB2YXIgdGVzdHMgPSBtYXAo
dGhpc19vYmoudGVzdHMsCisgICAgICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbih0ZXN0KQor
ICAgICAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJl
dHVybiB0ZXN0LnN0cnVjdHVyZWRfY2xvbmUoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0p
OworICAgICAgICBpZiAodGhpcy5zdGF0dXMuc3RhdHVzID09PSBudWxsKSB7CisgICAgICAgICAg
ICB0aGlzLnN0YXR1cy5zdGF0dXMgPSB0aGlzLnN0YXR1cy5PSzsKKyAgICAgICAgfQorCisgICAg
ICAgIGZvckVhY2ggKHRoaXMuYWxsX2RvbmVfY2FsbGJhY2tzLAorICAgICAgICAgICAgICAgICBm
dW5jdGlvbihjYWxsYmFjaykKKyAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAg
ICAgY2FsbGJhY2sodGhpc19vYmoudGVzdHMsIHRoaXNfb2JqLnN0YXR1cyk7CisgICAgICAgICAg
ICAgICAgIH0pOworCisgICAgICAgIGZvckVhY2hfd2luZG93cygKKyAgICAgICAgICAgICAgICBm
dW5jdGlvbih3LCBpc19zYW1lX29yaWdpbikKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAg
ICAgICAgICAgIGlmIChpc19zYW1lX29yaWdpbiAmJiB3LmNvbXBsZXRpb25fY2FsbGJhY2spIHsK
KyAgICAgICAgICAgICAgICAgICAgICAgIHRyeSB7CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgdy5jb21wbGV0aW9uX2NhbGxiYWNrKHRoaXNfb2JqLnRlc3RzLCB0aGlzX29iai5zdGF0dXMp
OworICAgICAgICAgICAgICAgICAgICAgICAgfSBjYXRjaCAoZSkgeworICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGlmIChkZWJ1ZykgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB0aHJvdyBlOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBp
ZiAoc3VwcG9ydHNfcG9zdF9tZXNzYWdlKHcpICYmIHcgIT09IHNlbGYpIHsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIHcucG9zdE1lc3NhZ2UoeworICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHR5cGU6ICJjb21wbGV0ZSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGVzdHM6IHRl
c3RzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXR1czogdGhpc19vYmouc3RhdHVz
LnN0cnVjdHVyZWRfY2xvbmUoKQorICAgICAgICAgICAgICAgICAgICAgICAgfSwgIioiKTsKKyAg
ICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0pOworICAgIH07CisKKyAgICB2
YXIgdGVzdHMgPSBuZXcgVGVzdHMoKTsKKworICAgIHdpbmRvdy5vbmVycm9yID0gZnVuY3Rpb24o
bXNnKSB7CisgICAgICAgIGlmICghdGVzdHMuYWxsb3dfdW5jYXVnaHRfZXhjZXB0aW9uKSB7Cisg
ICAgICAgICAgICB0ZXN0cy5zdGF0dXMuc3RhdHVzID0gdGVzdHMuc3RhdHVzLkVSUk9SOworICAg
ICAgICAgICAgdGVzdHMuc3RhdHVzLm1lc3NhZ2UgPSBtc2c7CisgICAgICAgICAgICB0ZXN0cy5j
b21wbGV0ZSgpOworICAgICAgICB9CisgICAgfQorCisgICAgZnVuY3Rpb24gdGltZW91dCgpIHsK
KyAgICAgICAgaWYgKHRlc3RzLnRpbWVvdXRfbGVuZ3RoID09PSBudWxsKSB7CisgICAgICAgICAg
ICB0ZXN0cy50aW1lb3V0KCk7CisgICAgICAgIH0KKyAgICB9CisgICAgZXhwb3NlKHRpbWVvdXQs
ICd0aW1lb3V0Jyk7CisKKyAgICBmdW5jdGlvbiBhZGRfc3RhcnRfY2FsbGJhY2soY2FsbGJhY2sp
IHsKKyAgICAgICAgdGVzdHMuc3RhcnRfY2FsbGJhY2tzLnB1c2goY2FsbGJhY2spOworICAgIH0K
KworICAgIGZ1bmN0aW9uIGFkZF9yZXN1bHRfY2FsbGJhY2soY2FsbGJhY2spCisgICAgeworICAg
ICAgICB0ZXN0cy50ZXN0X2RvbmVfY2FsbGJhY2tzLnB1c2goY2FsbGJhY2spOworICAgIH0KKwor
ICAgIGZ1bmN0aW9uIGFkZF9jb21wbGV0aW9uX2NhbGxiYWNrKGNhbGxiYWNrKQorICAgIHsKKyAg
ICAgICB0ZXN0cy5hbGxfZG9uZV9jYWxsYmFja3MucHVzaChjYWxsYmFjayk7CisgICAgfQorCisg
ICAgZXhwb3NlKGFkZF9zdGFydF9jYWxsYmFjaywgJ2FkZF9zdGFydF9jYWxsYmFjaycpOworICAg
IGV4cG9zZShhZGRfcmVzdWx0X2NhbGxiYWNrLCAnYWRkX3Jlc3VsdF9jYWxsYmFjaycpOworICAg
IGV4cG9zZShhZGRfY29tcGxldGlvbl9jYWxsYmFjaywgJ2FkZF9jb21wbGV0aW9uX2NhbGxiYWNr
Jyk7CisKKyAgICAvKgorICAgICAqIE91dHB1dCBsaXN0ZW5lcgorICAgICovCisKKyAgICBmdW5j
dGlvbiBPdXRwdXQoKSB7CisgICAgICAgIHRoaXMub3V0cHV0X2RvY3VtZW50ID0gZG9jdW1lbnQ7
CisgICAgICAgIHRoaXMub3V0cHV0X25vZGUgPSBudWxsOworICAgICAgICB0aGlzLmRvbmVfY291
bnQgPSAwOworICAgICAgICB0aGlzLmVuYWJsZWQgPSBzZXR0aW5ncy5vdXRwdXQ7CisgICAgICAg
IHRoaXMucGhhc2UgPSB0aGlzLklOSVRJQUw7CisgICAgfQorCisgICAgT3V0cHV0LnByb3RvdHlw
ZS5JTklUSUFMID0gMDsKKyAgICBPdXRwdXQucHJvdG90eXBlLlNUQVJURUQgPSAxOworICAgIE91
dHB1dC5wcm90b3R5cGUuSEFWRV9SRVNVTFRTID0gMjsKKyAgICBPdXRwdXQucHJvdG90eXBlLkNP
TVBMRVRFID0gMzsKKworICAgIE91dHB1dC5wcm90b3R5cGUuc2V0dXAgPSBmdW5jdGlvbihwcm9w
ZXJ0aWVzKSB7CisgICAgICAgIGlmICh0aGlzLnBoYXNlID4gdGhpcy5JTklUSUFMKSB7CisgICAg
ICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICAvL0lmIG91dHB1dCBpcyBkaXNh
YmxlZCBpbiB0ZXN0aGFybmVzc3JlcG9ydC5qcyB0aGUgdGVzdCBzaG91bGRuJ3QgYmUKKyAgICAg
ICAgLy9hYmxlIHRvIG92ZXJyaWRlIHRoYXQKKyAgICAgICAgdGhpcy5lbmFibGVkID0gdGhpcy5l
bmFibGVkICYmIChwcm9wZXJ0aWVzLmhhc093blByb3BlcnR5KCJvdXRwdXQiKSA/CisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvcGVydGllcy5vdXRwdXQgOiBzZXR0
aW5ncy5vdXRwdXQpOworICAgIH07CisKKyAgICBPdXRwdXQucHJvdG90eXBlLmluaXQgPSBmdW5j
dGlvbihwcm9wZXJ0aWVzKQorICAgIHsKKyAgICAgICAgaWYgKHRoaXMucGhhc2UgPj0gdGhpcy5T
VEFSVEVEKSB7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgaWYgKHBy
b3BlcnRpZXMub3V0cHV0X2RvY3VtZW50KSB7CisgICAgICAgICAgICB0aGlzLm91dHB1dF9kb2N1
bWVudCA9IHByb3BlcnRpZXMub3V0cHV0X2RvY3VtZW50OworICAgICAgICB9IGVsc2UgeworICAg
ICAgICAgICAgdGhpcy5vdXRwdXRfZG9jdW1lbnQgPSBkb2N1bWVudDsKKyAgICAgICAgfQorICAg
ICAgICB0aGlzLnBoYXNlID0gdGhpcy5TVEFSVEVEOworICAgIH07CisKKyAgICBPdXRwdXQucHJv
dG90eXBlLnJlc29sdmVfbG9nID0gZnVuY3Rpb24oKQorICAgIHsKKyAgICAgICAgdmFyIG91dHB1
dF9kb2N1bWVudDsKKyAgICAgICAgaWYgKHR5cGVvZiB0aGlzLm91dHB1dF9kb2N1bWVudCA9PT0g
ImZ1bmN0aW9uIikgeworICAgICAgICAgICAgb3V0cHV0X2RvY3VtZW50ID0gdGhpcy5vdXRwdXRf
ZG9jdW1lbnQuYXBwbHkodW5kZWZpbmVkKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAg
IG91dHB1dF9kb2N1bWVudCA9IHRoaXMub3V0cHV0X2RvY3VtZW50OworICAgICAgICB9CisgICAg
ICAgIGlmICghb3V0cHV0X2RvY3VtZW50KSB7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAg
IH0KKyAgICAgICAgdmFyIG5vZGUgPSBvdXRwdXRfZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImxv
ZyIpOworICAgICAgICBpZiAobm9kZSkgeworICAgICAgICAgICAgdGhpcy5vdXRwdXRfZG9jdW1l
bnQgPSBvdXRwdXRfZG9jdW1lbnQ7CisgICAgICAgICAgICB0aGlzLm91dHB1dF9ub2RlID0gbm9k
ZTsKKyAgICAgICAgfQorICAgIH07CisKKyAgICBPdXRwdXQucHJvdG90eXBlLnNob3dfc3RhdHVz
ID0gZnVuY3Rpb24odGVzdCkKKyAgICB7CisgICAgICAgIGlmICh0aGlzLnBoYXNlIDwgdGhpcy5T
VEFSVEVEKSB7CisgICAgICAgICAgICB0aGlzLmluaXQoKTsKKyAgICAgICAgfQorICAgICAgICBp
ZiAoIXRoaXMuZW5hYmxlZCkgeworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAg
ICAgIGlmICh0aGlzLnBoYXNlIDwgdGhpcy5IQVZFX1JFU1VMVFMpIHsKKyAgICAgICAgICAgIHRo
aXMucmVzb2x2ZV9sb2coKTsKKyAgICAgICAgICAgIHRoaXMucGhhc2UgPSB0aGlzLkhBVkVfUkVT
VUxUUzsKKyAgICAgICAgfQorICAgICAgICB0aGlzLmRvbmVfY291bnQrKzsKKyAgICAgICAgaWYg
KHRoaXMub3V0cHV0X25vZGUpIHsKKyAgICAgICAgICAgIGlmICh0aGlzLmRvbmVfY291bnQgPCAx
MDAKKyAgICAgICAgICAgIHx8ICh0aGlzLmRvbmVfY291bnQgPCAxMDAwICYmIHRoaXMuZG9uZV9j
b3VudCAlIDEwMCA9PSAwKQorICAgICAgICAgICAgfHwgdGhpcy5kb25lX2NvdW50ICUgMTAwMCA9
PSAwKSB7CisgICAgICAgICAgICAgICAgdGhpcy5vdXRwdXRfbm9kZS50ZXh0Q29udGVudCA9ICJS
dW5uaW5nLCAiCisgICAgICAgICAgICAgICAgICAgICsgdGhpcy5kb25lX2NvdW50ICsgIiBjb21w
bGV0ZSwgIgorICAgICAgICAgICAgICAgICAgICArIHRlc3RzLm51bV9wZW5kaW5nICsgIiByZW1h
aW4iOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfTsKKworICAgIE91dHB1dC5wcm90
b3R5cGUuc2hvd19yZXN1bHRzID0gZnVuY3Rpb24gKHRlc3RzLCBoYXJuZXNzX3N0YXR1cykKKyAg
ICB7CisgICAgICAgIGlmICh0aGlzLnBoYXNlID49IHRoaXMuQ09NUExFVEUpIHsKKyAgICAgICAg
ICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICBpZiAoIXRoaXMuZW5hYmxlZCkgeworICAg
ICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIGlmICghdGhpcy5vdXRwdXRfbm9k
ZSkgeworICAgICAgICAgICAgdGhpcy5yZXNvbHZlX2xvZygpOworICAgICAgICB9CisgICAgICAg
IHRoaXMucGhhc2UgPSB0aGlzLkNPTVBMRVRFOworCisgICAgICAgIHZhciBsb2cgPSB0aGlzLm91
dHB1dF9ub2RlOworICAgICAgICBpZiAoIWxvZykgeworICAgICAgICAgICAgcmV0dXJuOworICAg
ICAgICB9CisgICAgICAgIHZhciBvdXRwdXRfZG9jdW1lbnQgPSB0aGlzLm91dHB1dF9kb2N1bWVu
dDsKKworICAgICAgICB3aGlsZSAobG9nLmxhc3RDaGlsZCkgeworICAgICAgICAgICAgbG9nLnJl
bW92ZUNoaWxkKGxvZy5sYXN0Q2hpbGQpOworICAgICAgICB9CisKKyAgICAgICAgaWYgKHNjcmlw
dF9wcmVmaXggIT0gbnVsbCkgeworICAgICAgICAgICAgdmFyIHN0eWxlc2hlZXQgPSBvdXRwdXRf
ZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKHhodG1sX25zLCAibGluayIpOworICAgICAgICAgICAg
c3R5bGVzaGVldC5zZXRBdHRyaWJ1dGUoInJlbCIsICJzdHlsZXNoZWV0Iik7CisgICAgICAgICAg
ICBzdHlsZXNoZWV0LnNldEF0dHJpYnV0ZSgiaHJlZiIsIHNjcmlwdF9wcmVmaXggKyAidGVzdGhh
cm5lc3MuY3NzIik7CisgICAgICAgICAgICB2YXIgaGVhZHMgPSBvdXRwdXRfZG9jdW1lbnQuZ2V0
RWxlbWVudHNCeVRhZ05hbWUoImhlYWQiKTsKKyAgICAgICAgICAgIGlmIChoZWFkcy5sZW5ndGgp
IHsKKyAgICAgICAgICAgICAgICBoZWFkc1swXS5hcHBlbmRDaGlsZChzdHlsZXNoZWV0KTsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIHZhciBzdGF0dXNfdGV4dF9oYXJuZXNz
ID0ge307CisgICAgICAgIHN0YXR1c190ZXh0X2hhcm5lc3NbaGFybmVzc19zdGF0dXMuT0tdID0g
Ik9LIjsKKyAgICAgICAgc3RhdHVzX3RleHRfaGFybmVzc1toYXJuZXNzX3N0YXR1cy5FUlJPUl0g
PSAiRXJyb3IiOworICAgICAgICBzdGF0dXNfdGV4dF9oYXJuZXNzW2hhcm5lc3Nfc3RhdHVzLlRJ
TUVPVVRdID0gIlRpbWVvdXQiOworCisgICAgICAgIHZhciBzdGF0dXNfdGV4dCA9IHt9OworICAg
ICAgICBzdGF0dXNfdGV4dFtUZXN0LnByb3RvdHlwZS5QQVNTXSA9ICJQYXNzIjsKKyAgICAgICAg
c3RhdHVzX3RleHRbVGVzdC5wcm90b3R5cGUuRkFJTF0gPSAiRmFpbCI7CisgICAgICAgIHN0YXR1
c190ZXh0W1Rlc3QucHJvdG90eXBlLlRJTUVPVVRdID0gIlRpbWVvdXQiOworICAgICAgICBzdGF0
dXNfdGV4dFtUZXN0LnByb3RvdHlwZS5OT1RSVU5dID0gIk5vdCBSdW4iOworCisgICAgICAgIHZh
ciBzdGF0dXNfbnVtYmVyID0ge307CisgICAgICAgIGZvckVhY2godGVzdHMsCisgICAgICAgICAg
ICAgICAgZnVuY3Rpb24odGVzdCkgeworICAgICAgICAgICAgICAgICAgICB2YXIgc3RhdHVzID0g
c3RhdHVzX3RleHRbdGVzdC5zdGF0dXNdOworICAgICAgICAgICAgICAgICAgICBpZiAoc3RhdHVz
X251bWJlci5oYXNPd25Qcm9wZXJ0eShzdGF0dXMpKSB7CisgICAgICAgICAgICAgICAgICAgICAg
ICBzdGF0dXNfbnVtYmVyW3N0YXR1c10gKz0gMTsKKyAgICAgICAgICAgICAgICAgICAgfSBlbHNl
IHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHN0YXR1c19udW1iZXJbc3RhdHVzXSA9IDE7Cisg
ICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9KTsKKworICAgICAgICBmdW5j
dGlvbiBzdGF0dXNfY2xhc3Moc3RhdHVzKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4g
c3RhdHVzLnJlcGxhY2UoL1xzL2csICcnKS50b0xvd2VyQ2FzZSgpOworICAgICAgICB9CisKKyAg
ICAgICAgdmFyIHN1bW1hcnlfdGVtcGxhdGUgPSBbInNlY3Rpb24iLCB7ImlkIjoic3VtbWFyeSJ9
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbImgyIiwge30sICJTdW1tYXJ5Il0s
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uKHZhcnMpCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGlmIChoYXJuZXNzX3N0YXR1cy5zdGF0dXMgPT09IGhhcm5lc3Nfc3RhdHVzLk9LKSB7
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHZhciBzdGF0dXMgPSBzdGF0dXNfdGV4dF9oYXJuZXNzW2hhcm5l
c3Nfc3RhdHVzLnN0YXR1c107CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2
YXIgcnYgPSBbWyJwIiwgeyJjbGFzcyI6c3RhdHVzX2NsYXNzKHN0YXR1cyl9XV07CisKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChoYXJuZXNzX3N0YXR1cy5zdGF0dXMg
PT09IGhhcm5lc3Nfc3RhdHVzLkVSUk9SKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgcnZbMF0ucHVzaCgiSGFybmVzcyBlbmNvdW50ZXJlZCBhbiBlcnJvcjoiKTsK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBydi5wdXNoKFsicHJlIiwg
e30sIGhhcm5lc3Nfc3RhdHVzLm1lc3NhZ2VdKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIH0gZWxzZSBpZiAoaGFybmVzc19zdGF0dXMuc3RhdHVzID09PSBoYXJuZXNzX3N0
YXR1cy5USU1FT1VUKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
cnZbMF0ucHVzaCgiSGFybmVzcyB0aW1lZCBvdXQuIik7CisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHJ2WzBdLnB1c2goIkhhcm5lc3MgZ290IGFuIHVuZXhwZWN0ZWQgc3RhdHVzLiIpOwor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gcnY7CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIH0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFsicCIsIHt9LCAiRm91
bmQgJHtudW1fdGVzdHN9IHRlc3RzIl0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGZ1bmN0aW9uKHZhcnMpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZh
ciBydiA9IFtbImRpdiIsIHt9XV07CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB2YXIgaSA9IDA7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aGlsZSAo
c3RhdHVzX3RleHQuaGFzT3duUHJvcGVydHkoaSkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBpZiAoc3RhdHVzX251bWJlci5oYXNPd25Qcm9wZXJ0eShzdGF0dXNf
dGV4dFtpXSkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
dmFyIHN0YXR1cyA9IHN0YXR1c190ZXh0W2ldOworICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBydlswXS5wdXNoKFsiZGl2IiwgeyJjbGFzcyI6c3RhdHVzX2NsYXNz
KHN0YXR1cyl9LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBbImxhYmVsIiwge30sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBbImlucHV0Iiwge3R5cGU6ImNoZWNrYm94IiwgY2hl
Y2tlZDoiY2hlY2tlZCJ9XSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHN0YXR1c19udW1iZXJbc3RhdHVzXSArICIgIiArIHN0YXR1c11d
KTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaSsrOworICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0
dXJuIHJ2OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XTsKKworICAgICAgICBs
b2cuYXBwZW5kQ2hpbGQocmVuZGVyKHN1bW1hcnlfdGVtcGxhdGUsIHtudW1fdGVzdHM6dGVzdHMu
bGVuZ3RofSwgb3V0cHV0X2RvY3VtZW50KSk7CisKKyAgICAgICAgZm9yRWFjaChvdXRwdXRfZG9j
dW1lbnQucXVlcnlTZWxlY3RvckFsbCgic2VjdGlvbiNzdW1tYXJ5IGxhYmVsIiksCisgICAgICAg
ICAgICAgICAgZnVuY3Rpb24oZWxlbWVudCkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAg
ICAgICAgICAgIG9uX2V2ZW50KGVsZW1lbnQsICJjbGljayIsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGZ1bmN0aW9uKGUpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChvdXRwdXRfZG9jdW1lbnQuZ2V0RWxl
bWVudEJ5SWQoInJlc3VsdHMiKSA9PT0gbnVsbCkgeworICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTsKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgcmVzdWx0X2NsYXNzID0gZWxl
bWVudC5wYXJlbnROb2RlLmdldEF0dHJpYnV0ZSgiY2xhc3MiKTsKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHZhciBzdHlsZV9lbGVtZW50ID0gb3V0cHV0X2RvY3VtZW50LnF1ZXJ5
U2VsZWN0b3IoInN0eWxlI2hpZGUtIiArIHJlc3VsdF9jbGFzcyk7CisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB2YXIgaW5wdXRfZWxlbWVudCA9IGVsZW1lbnQucXVlcnlTZWxlY3Rv
cigiaW5wdXQiKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghc3R5bGVf
ZWxlbWVudCAmJiAhaW5wdXRfZWxlbWVudC5jaGVja2VkKSB7CisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgc3R5bGVfZWxlbWVudCA9IG91dHB1dF9kb2N1bWVudC5jcmVhdGVF
bGVtZW50TlMoeGh0bWxfbnMsICJzdHlsZSIpOworICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHN0eWxlX2VsZW1lbnQuaWQgPSAiaGlkZS0iICsgcmVzdWx0X2NsYXNzOworICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0eWxlX2VsZW1lbnQudGV4dENvbnRl
bnQgPSAidGFibGUjcmVzdWx0cyA+IHRib2R5ID4gdHIuIityZXN1bHRfY2xhc3MrIntkaXNwbGF5
Om5vbmV9IjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdXRwdXRfZG9j
dW1lbnQuYm9keS5hcHBlbmRDaGlsZChzdHlsZV9lbGVtZW50KTsKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoc3R5bGVfZWxlbWVudCAmJiBpbnB1dF9lbGVtZW50
LmNoZWNrZWQpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHlsZV9l
bGVtZW50LnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQoc3R5bGVfZWxlbWVudCk7CisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0p
OworICAgICAgICAgICAgICAgIH0pOworCisgICAgICAgIC8vIFRoaXMgdXNlIG9mIGlubmVySFRN
TCBwbHVzIG1hbnVhbCBlc2NhcGluZyBpcyBub3QgcmVjb21tZW5kZWQgaW4KKyAgICAgICAgLy8g
Z2VuZXJhbCwgYnV0IGlzIG5lY2Vzc2FyeSBoZXJlIGZvciBwZXJmb3JtYW5jZS4gIFVzaW5nIHRl
eHRDb250ZW50CisgICAgICAgIC8vIG9uIGVhY2ggaW5kaXZpZHVhbCA8dGQ+IGFkZHMgdGVucyBv
ZiBzZWNvbmRzIG9mIGV4ZWN1dGlvbiB0aW1lIGZvcgorICAgICAgICAvLyBsYXJnZSB0ZXN0IHN1
aXRlcyAodGVucyBvZiB0aG91c2FuZHMgb2YgdGVzdHMpLgorICAgICAgICBmdW5jdGlvbiBlc2Nh
cGVfaHRtbChzKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gcy5yZXBsYWNlKC9cJi9n
LCAiJmFtcDsiKQorICAgICAgICAgICAgICAgIC5yZXBsYWNlKC88L2csICImbHQ7IikKKyAgICAg
ICAgICAgICAgICAucmVwbGFjZSgvIi9nLCAiJnF1b3Q7IikKKyAgICAgICAgICAgICAgICAucmVw
bGFjZSgvJy9nLCAiJiMzOTsiKTsKKyAgICAgICAgfQorCisgICAgICAgIGZ1bmN0aW9uIGhhc19h
c3NlcnRpb25zKCkKKyAgICAgICAgeworICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0
ZXN0cy5sZW5ndGg7IGkrKykgeworICAgICAgICAgICAgICAgIGlmICh0ZXN0c1tpXS5wcm9wZXJ0
aWVzLmhhc093blByb3BlcnR5KCJhc3NlcnQiKSkgeworICAgICAgICAgICAgICAgICAgICByZXR1
cm4gdHJ1ZTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKworICAgICAgICBmdW5jdGlvbiBnZXRfYXNzZXJ0aW9u
KHRlc3QpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmICh0ZXN0LnByb3BlcnRpZXMuaGFzT3du
UHJvcGVydHkoImFzc2VydCIpKSB7CisgICAgICAgICAgICAgICAgaWYgKEFycmF5LmlzQXJyYXko
dGVzdC5wcm9wZXJ0aWVzLmFzc2VydCkpIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRl
c3QucHJvcGVydGllcy5hc3NlcnQuam9pbignICcpOworICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgICAgICByZXR1cm4gdGVzdC5wcm9wZXJ0aWVzLmFzc2VydDsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIHJldHVybiAnJzsKKyAgICAgICAgfQorCisgICAgICAgIGxvZy5hcHBlbmRD
aGlsZChkb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoeGh0bWxfbnMsICJzZWN0aW9uIikpOworICAg
ICAgICB2YXIgYXNzZXJ0aW9ucyA9IGhhc19hc3NlcnRpb25zKCk7CisgICAgICAgIHZhciBodG1s
ID0gIjxoMj5EZXRhaWxzPC9oMj48dGFibGUgaWQ9J3Jlc3VsdHMnICIgKyAoYXNzZXJ0aW9ucyA/
ICJjbGFzcz0nYXNzZXJ0aW9ucyciIDogIiIgKSArICI+IgorICAgICAgICAgICAgKyAiPHRoZWFk
Pjx0cj48dGg+UmVzdWx0PC90aD48dGg+VGVzdCBOYW1lPC90aD4iCisgICAgICAgICAgICArIChh
c3NlcnRpb25zID8gIjx0aD5Bc3NlcnRpb248L3RoPiIgOiAiIikKKyAgICAgICAgICAgICsgIjx0
aD5NZXNzYWdlPC90aD48L3RyPjwvdGhlYWQ+IgorICAgICAgICAgICAgKyAiPHRib2R5PiI7Cisg
ICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGVzdHMubGVuZ3RoOyBpKyspIHsKKyAgICAgICAg
ICAgIGh0bWwgKz0gJzx0ciBjbGFzcz0iJworICAgICAgICAgICAgICAgICsgZXNjYXBlX2h0bWwo
c3RhdHVzX2NsYXNzKHN0YXR1c190ZXh0W3Rlc3RzW2ldLnN0YXR1c10pKQorICAgICAgICAgICAg
ICAgICsgJyI+PHRkPicKKyAgICAgICAgICAgICAgICArIGVzY2FwZV9odG1sKHN0YXR1c190ZXh0
W3Rlc3RzW2ldLnN0YXR1c10pCisgICAgICAgICAgICAgICAgKyAiPC90ZD48dGQ+IgorICAgICAg
ICAgICAgICAgICsgZXNjYXBlX2h0bWwodGVzdHNbaV0ubmFtZSkKKyAgICAgICAgICAgICAgICAr
ICI8L3RkPjx0ZD4iCisgICAgICAgICAgICAgICAgKyAoYXNzZXJ0aW9ucyA/IGVzY2FwZV9odG1s
KGdldF9hc3NlcnRpb24odGVzdHNbaV0pKSArICI8L3RkPjx0ZD4iIDogIiIpCisgICAgICAgICAg
ICAgICAgKyBlc2NhcGVfaHRtbCh0ZXN0c1tpXS5tZXNzYWdlID8gdGVzdHNbaV0ubWVzc2FnZSA6
ICIgIikKKyAgICAgICAgICAgICAgICArICI8L3RkPjwvdHI+IjsKKyAgICAgICAgfQorICAgICAg
ICBodG1sICs9ICI8L3Rib2R5PjwvdGFibGU+IjsKKyAgICAgICAgdHJ5IHsKKyAgICAgICAgICAg
IGxvZy5sYXN0Q2hpbGQuaW5uZXJIVE1MID0gaHRtbDsKKyAgICAgICAgfSBjYXRjaCAoZSkgewor
ICAgICAgICAgICAgbG9nLmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUyh4aHRt
bF9ucywgInAiKSkKKyAgICAgICAgICAgICAgIC50ZXh0Q29udGVudCA9ICJTZXR0aW5nIGlubmVy
SFRNTCBmb3IgdGhlIGxvZyB0aHJldyBhbiBleGNlcHRpb24uIjsKKyAgICAgICAgICAgIGxvZy5h
cHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoeGh0bWxfbnMsICJwcmUiKSkKKyAg
ICAgICAgICAgICAgIC50ZXh0Q29udGVudCA9IGh0bWw7CisgICAgICAgIH0KKyAgICB9OworCisg
ICAgdmFyIG91dHB1dCA9IG5ldyBPdXRwdXQoKTsKKyAgICBhZGRfc3RhcnRfY2FsbGJhY2soZnVu
Y3Rpb24gKHByb3BlcnRpZXMpIHtvdXRwdXQuaW5pdChwcm9wZXJ0aWVzKTt9KTsKKyAgICBhZGRf
cmVzdWx0X2NhbGxiYWNrKGZ1bmN0aW9uICh0ZXN0KSB7b3V0cHV0LnNob3dfc3RhdHVzKHRlc3Rz
KTt9KTsKKyAgICBhZGRfY29tcGxldGlvbl9jYWxsYmFjayhmdW5jdGlvbiAodGVzdHMsIGhhcm5l
c3Nfc3RhdHVzKSB7b3V0cHV0LnNob3dfcmVzdWx0cyh0ZXN0cywgaGFybmVzc19zdGF0dXMpO30p
OworCisgICAgLyoKKyAgICAgKiBUZW1wbGF0ZSBjb2RlCisgICAgICoKKyAgICAgKiBBIHRlbXBs
YXRlIGlzIGp1c3QgYSBqYXZhc2NyaXB0IHN0cnVjdHVyZS4gQW4gZWxlbWVudCBpcyByZXByZXNl
bnRlZCBhczoKKyAgICAgKgorICAgICAqIFt0YWdfbmFtZSwge2F0dHJfbmFtZTphdHRyX3ZhbHVl
fSwgY2hpbGQxLCBjaGlsZDJdCisgICAgICoKKyAgICAgKiB0aGUgY2hpbGRyZW4gY2FuIGVpdGhl
ciBiZSBzdHJpbmdzICh3aGljaCBhY3QgbGlrZSB0ZXh0IG5vZGVzKSwgb3RoZXIgdGVtcGxhdGVz
IG9yCisgICAgICogZnVuY3Rpb25zIChzZWUgYmVsb3cpCisgICAgICoKKyAgICAgKiBBIHRleHQg
bm9kZSBpcyByZXByZXNlbnRlZCBhcworICAgICAqCisgICAgICogWyJ7dGV4dH0iLCB2YWx1ZV0K
KyAgICAgKgorICAgICAqIFN0cmluZyB2YWx1ZXMgaGF2ZSBhIHNpbXBsZSBzdWJzdGl0dXRpb24g
c3ludGF4OyAke2Zvb30gcmVwcmVzZW50cyBhIHZhcmlhYmxlIGZvby4KKyAgICAgKgorICAgICAq
IEl0IGlzIHBvc3NpYmxlIHRvIGVtYmVkIGxvZ2ljIGluIHRlbXBsYXRlcyBieSB1c2luZyBhIGZ1
bmN0aW9uIGluIGEgcGxhY2Ugd2hlcmUgYQorICAgICAqIG5vZGUgd291bGQgdXN1YWxseSBnby4g
VGhlIGZ1bmN0aW9uIG11c3QgZWl0aGVyIHJldHVybiBwYXJ0IG9mIGEgdGVtcGxhdGUgb3IgbnVs
bC4KKyAgICAgKgorICAgICAqIEluIGNhc2VzIHdoZXJlIGEgc2V0IG9mIG5vZGVzIGFyZSByZXF1
aXJlZCBhcyBvdXRwdXQgcmF0aGVyIHRoYW4gYSBzaW5nbGUgbm9kZQorICAgICAqIHdpdGggY2hp
bGRyZW4gaXQgaXMgcG9zc2libGUgdG8ganVzdCB1c2UgYSBsaXN0CisgICAgICogW25vZGUxLCBu
b2RlMiwgbm9kZTNdCisgICAgICoKKyAgICAgKiBVc2FnZToKKyAgICAgKgorICAgICAqIHJlbmRl
cih0ZW1wbGF0ZSwgc3Vic3RpdHV0aW9ucykgLSB0YWtlIGEgdGVtcGxhdGUgYW5kIGFuIG9iamVj
dCBtYXBwaW5nCisgICAgICogdmFyaWFibGUgbmFtZXMgdG8gcGFyYW1ldGVycyBhbmQgcmV0dXJu
IGVpdGhlciBhIERPTSBub2RlIG9yIGEgbGlzdCBvZiBET00gbm9kZXMKKyAgICAgKgorICAgICAq
IHN1YnN0aXR1dGUodGVtcGxhdGUsIHN1YnN0aXR1dGlvbnMpIC0gdGFrZSBhIHRlbXBsYXRlIGFu
ZCB2YXJpYWJsZSBtYXBwaW5nIG9iamVjdCwKKyAgICAgKiBtYWtlIHRoZSB2YXJpYWJsZSBzdWJz
dGl0dXRpb25zIGFuZCByZXR1cm4gdGhlIHN1YnN0aXR1dGVkIHRlbXBsYXRlCisgICAgICoKKyAg
ICAgKi8KKworICAgIGZ1bmN0aW9uIGlzX3NpbmdsZV9ub2RlKHRlbXBsYXRlKQorICAgIHsKKyAg
ICAgICAgcmV0dXJuIHR5cGVvZiB0ZW1wbGF0ZVswXSA9PT0gInN0cmluZyI7CisgICAgfQorCisg
ICAgZnVuY3Rpb24gc3Vic3RpdHV0ZSh0ZW1wbGF0ZSwgc3Vic3RpdHV0aW9ucykKKyAgICB7Cisg
ICAgICAgIGlmICh0eXBlb2YgdGVtcGxhdGUgPT09ICJmdW5jdGlvbiIpIHsKKyAgICAgICAgICAg
IHZhciByZXBsYWNlbWVudCA9IHRlbXBsYXRlKHN1YnN0aXR1dGlvbnMpOworICAgICAgICAgICAg
aWYgKCFyZXBsYWNlbWVudCkgeworICAgICAgICAgICAgICAgIHJldHVybiBudWxsOworICAgICAg
ICAgICAgfQorCisgICAgICAgICAgICByZXR1cm4gc3Vic3RpdHV0ZShyZXBsYWNlbWVudCwgc3Vi
c3RpdHV0aW9ucyk7CisgICAgICAgIH0KKworICAgICAgICBpZiAoaXNfc2luZ2xlX25vZGUodGVt
cGxhdGUpKSB7CisgICAgICAgICAgICByZXR1cm4gc3Vic3RpdHV0ZV9zaW5nbGUodGVtcGxhdGUs
IHN1YnN0aXR1dGlvbnMpOworICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIGZpbHRlcihtYXAo
dGVtcGxhdGUsIGZ1bmN0aW9uKHgpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJl
dHVybiBzdWJzdGl0dXRlKHgsIHN1YnN0aXR1dGlvbnMpOworICAgICAgICAgICAgICAgICAgICAg
ICAgICB9KSwgZnVuY3Rpb24oeCkge3JldHVybiB4ICE9PSBudWxsO30pOworICAgIH0KKworICAg
IGZ1bmN0aW9uIHN1YnN0aXR1dGVfc2luZ2xlKHRlbXBsYXRlLCBzdWJzdGl0dXRpb25zKQorICAg
IHsKKyAgICAgICAgdmFyIHN1YnN0aXR1dGlvbl9yZSA9IC9cJHsoW14gfV0qKX0vZzsKKworICAg
ICAgICBmdW5jdGlvbiBkb19zdWJzdGl0dXRpb24oaW5wdXQpIHsKKyAgICAgICAgICAgIHZhciBj
b21wb25lbnRzID0gaW5wdXQuc3BsaXQoc3Vic3RpdHV0aW9uX3JlKTsKKyAgICAgICAgICAgIHZh
ciBydiA9IFtdOworICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBjb21wb25lbnRzLmxl
bmd0aDsgaSArPSAyKSB7CisgICAgICAgICAgICAgICAgcnYucHVzaChjb21wb25lbnRzW2ldKTsK
KyAgICAgICAgICAgICAgICBpZiAoY29tcG9uZW50c1tpICsgMV0pIHsKKyAgICAgICAgICAgICAg
ICAgICAgcnYucHVzaChTdHJpbmcoc3Vic3RpdHV0aW9uc1tjb21wb25lbnRzW2kgKyAxXV0pKTsK
KyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4gcnY7
CisgICAgICAgIH0KKworICAgICAgICB2YXIgcnYgPSBbXTsKKyAgICAgICAgcnYucHVzaChkb19z
dWJzdGl0dXRpb24oU3RyaW5nKHRlbXBsYXRlWzBdKSkuam9pbigiIikpOworCisgICAgICAgIGlm
ICh0ZW1wbGF0ZVswXSA9PT0gInt0ZXh0fSIpIHsKKyAgICAgICAgICAgIHN1YnN0aXR1dGVfY2hp
bGRyZW4odGVtcGxhdGUuc2xpY2UoMSksIHJ2KTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAg
ICAgIHN1YnN0aXR1dGVfYXR0cnModGVtcGxhdGVbMV0sIHJ2KTsKKyAgICAgICAgICAgIHN1YnN0
aXR1dGVfY2hpbGRyZW4odGVtcGxhdGUuc2xpY2UoMiksIHJ2KTsKKyAgICAgICAgfQorCisgICAg
ICAgIGZ1bmN0aW9uIHN1YnN0aXR1dGVfYXR0cnMoYXR0cnMsIHJ2KQorICAgICAgICB7CisgICAg
ICAgICAgICBydlsxXSA9IHt9OworICAgICAgICAgICAgZm9yICh2YXIgbmFtZSBpbiB0ZW1wbGF0
ZVsxXSkgeworICAgICAgICAgICAgICAgIGlmIChhdHRycy5oYXNPd25Qcm9wZXJ0eShuYW1lKSkg
eworICAgICAgICAgICAgICAgICAgICB2YXIgbmV3X25hbWUgPSBkb19zdWJzdGl0dXRpb24obmFt
ZSkuam9pbigiIik7CisgICAgICAgICAgICAgICAgICAgIHZhciBuZXdfdmFsdWUgPSBkb19zdWJz
dGl0dXRpb24oYXR0cnNbbmFtZV0pLmpvaW4oIiIpOworICAgICAgICAgICAgICAgICAgICBydlsx
XVtuZXdfbmFtZV0gPSBuZXdfdmFsdWU7CisgICAgICAgICAgICAgICAgfTsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgfQorCisgICAgICAgIGZ1bmN0aW9uIHN1YnN0aXR1dGVfY2hpbGRyZW4oY2hp
bGRyZW4sIHJ2KQorICAgICAgICB7CisgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGNo
aWxkcmVuLmxlbmd0aDsgaSsrKSB7CisgICAgICAgICAgICAgICAgaWYgKGNoaWxkcmVuW2ldIGlu
c3RhbmNlb2YgT2JqZWN0KSB7CisgICAgICAgICAgICAgICAgICAgIHZhciByZXBsYWNlbWVudCA9
IHN1YnN0aXR1dGUoY2hpbGRyZW5baV0sIHN1YnN0aXR1dGlvbnMpOworICAgICAgICAgICAgICAg
ICAgICBpZiAocmVwbGFjZW1lbnQgIT09IG51bGwpIHsKKyAgICAgICAgICAgICAgICAgICAgICAg
IGlmIChpc19zaW5nbGVfbm9kZShyZXBsYWNlbWVudCkpIHsKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBydi5wdXNoKHJlcGxhY2VtZW50KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0g
ZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXh0ZW5kKHJ2LCByZXBsYWNlbWVu
dCk7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICBleHRlbmQocnYsIGRv
X3N1YnN0aXR1dGlvbihTdHJpbmcoY2hpbGRyZW5baV0pKSk7CisgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJuIHJ2OworICAgICAgICB9CisKKyAgICAg
ICAgcmV0dXJuIHJ2OworICAgIH0KKworICAgIGZ1bmN0aW9uIG1ha2VfZG9tX3NpbmdsZSh0ZW1w
bGF0ZSwgZG9jKQorICAgIHsKKyAgICAgICAgdmFyIG91dHB1dF9kb2N1bWVudCA9IGRvYyB8fCBk
b2N1bWVudDsKKyAgICAgICAgaWYgKHRlbXBsYXRlWzBdID09PSAie3RleHR9IikgeworICAgICAg
ICAgICAgdmFyIGVsZW1lbnQgPSBvdXRwdXRfZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoIiIpOwor
ICAgICAgICAgICAgZm9yICh2YXIgaSA9IDE7IGkgPCB0ZW1wbGF0ZS5sZW5ndGg7IGkrKykgewor
ICAgICAgICAgICAgICAgIGVsZW1lbnQuZGF0YSArPSB0ZW1wbGF0ZVtpXTsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHZhciBlbGVtZW50ID0gb3V0cHV0X2Rv
Y3VtZW50LmNyZWF0ZUVsZW1lbnROUyh4aHRtbF9ucywgdGVtcGxhdGVbMF0pOworICAgICAgICAg
ICAgZm9yICh2YXIgbmFtZSBpbiB0ZW1wbGF0ZVsxXSkgeworICAgICAgICAgICAgICAgIGlmICh0
ZW1wbGF0ZVsxXS5oYXNPd25Qcm9wZXJ0eShuYW1lKSkgeworICAgICAgICAgICAgICAgICAgICBl
bGVtZW50LnNldEF0dHJpYnV0ZShuYW1lLCB0ZW1wbGF0ZVsxXVtuYW1lXSk7CisgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgZm9yICh2YXIgaSA9IDI7IGkgPCB0
ZW1wbGF0ZS5sZW5ndGg7IGkrKykgeworICAgICAgICAgICAgICAgIGlmICh0ZW1wbGF0ZVtpXSBp
bnN0YW5jZW9mIE9iamVjdCkgeworICAgICAgICAgICAgICAgICAgICB2YXIgc3ViX2VsZW1lbnQg
PSBtYWtlX2RvbSh0ZW1wbGF0ZVtpXSk7CisgICAgICAgICAgICAgICAgICAgIGVsZW1lbnQuYXBw
ZW5kQ2hpbGQoc3ViX2VsZW1lbnQpOworICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAg
ICAgICAgICAgICAgIHZhciB0ZXh0X25vZGUgPSBvdXRwdXRfZG9jdW1lbnQuY3JlYXRlVGV4dE5v
ZGUodGVtcGxhdGVbaV0pOworICAgICAgICAgICAgICAgICAgICBlbGVtZW50LmFwcGVuZENoaWxk
KHRleHRfbm9kZSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9
CisKKyAgICAgICAgcmV0dXJuIGVsZW1lbnQ7CisgICAgfQorCisKKworICAgIGZ1bmN0aW9uIG1h
a2VfZG9tKHRlbXBsYXRlLCBzdWJzdGl0dXRpb25zLCBvdXRwdXRfZG9jdW1lbnQpCisgICAgewor
ICAgICAgICBpZiAoaXNfc2luZ2xlX25vZGUodGVtcGxhdGUpKSB7CisgICAgICAgICAgICByZXR1
cm4gbWFrZV9kb21fc2luZ2xlKHRlbXBsYXRlLCBvdXRwdXRfZG9jdW1lbnQpOworICAgICAgICB9
CisKKyAgICAgICAgcmV0dXJuIG1hcCh0ZW1wbGF0ZSwgZnVuY3Rpb24oeCkgeworICAgICAgICAg
ICAgICAgICAgICAgICByZXR1cm4gbWFrZV9kb21fc2luZ2xlKHgsIG91dHB1dF9kb2N1bWVudCk7
CisgICAgICAgICAgICAgICAgICAgfSk7CisgICAgfQorCisgICAgZnVuY3Rpb24gcmVuZGVyKHRl
bXBsYXRlLCBzdWJzdGl0dXRpb25zLCBvdXRwdXRfZG9jdW1lbnQpCisgICAgeworICAgICAgICBy
ZXR1cm4gbWFrZV9kb20oc3Vic3RpdHV0ZSh0ZW1wbGF0ZSwgc3Vic3RpdHV0aW9ucyksIG91dHB1
dF9kb2N1bWVudCk7CisgICAgfQorCisgICAgLyoKKyAgICAgKiBVdGlsaXR5IGZ1bmNpb25zCisg
ICAgICovCisgICAgZnVuY3Rpb24gYXNzZXJ0KGV4cGVjdGVkX3RydWUsIGZ1bmN0aW9uX25hbWUs
IGRlc2NyaXB0aW9uLCBlcnJvciwgc3Vic3RpdHV0aW9ucykKKyAgICB7CisgICAgICAgIGlmIChl
eHBlY3RlZF90cnVlICE9PSB0cnVlKSB7CisgICAgICAgICAgICB0aHJvdyBuZXcgQXNzZXJ0aW9u
RXJyb3IobWFrZV9tZXNzYWdlKGZ1bmN0aW9uX25hbWUsIGRlc2NyaXB0aW9uLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnJvciwgc3Vic3RpdHV0
aW9ucykpOworICAgICAgICB9CisgICAgfQorCisgICAgZnVuY3Rpb24gQXNzZXJ0aW9uRXJyb3Io
bWVzc2FnZSkKKyAgICB7CisgICAgICAgIHRoaXMubWVzc2FnZSA9IG1lc3NhZ2U7CisgICAgfQor
CisgICAgZnVuY3Rpb24gbWFrZV9tZXNzYWdlKGZ1bmN0aW9uX25hbWUsIGRlc2NyaXB0aW9uLCBl
cnJvciwgc3Vic3RpdHV0aW9ucykKKyAgICB7CisgICAgICAgIGZvciAodmFyIHAgaW4gc3Vic3Rp
dHV0aW9ucykgeworICAgICAgICAgICAgaWYgKHN1YnN0aXR1dGlvbnMuaGFzT3duUHJvcGVydHko
cCkpIHsKKyAgICAgICAgICAgICAgICBzdWJzdGl0dXRpb25zW3BdID0gZm9ybWF0X3ZhbHVlKHN1
YnN0aXR1dGlvbnNbcF0pOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIHZhciBu
b2RlX2Zvcm0gPSBzdWJzdGl0dXRlKFsie3RleHR9IiwgIiR7ZnVuY3Rpb25fbmFtZX06ICR7ZGVz
Y3JpcHRpb259IiArIGVycm9yXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
bWVyZ2Uoe2Z1bmN0aW9uX25hbWU6ZnVuY3Rpb25fbmFtZSwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uOihkZXNjcmlwdGlvbj9kZXNjcmlwdGlv
biArICIgIjoiIil9LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
c3Vic3RpdHV0aW9ucykpOworICAgICAgICByZXR1cm4gbm9kZV9mb3JtLnNsaWNlKDEpLmpvaW4o
IiIpOworICAgIH0KKworICAgIGZ1bmN0aW9uIGZpbHRlcihhcnJheSwgY2FsbGFibGUsIHRoaXNP
YmopIHsKKyAgICAgICAgdmFyIHJ2ID0gW107CisgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwg
YXJyYXkubGVuZ3RoOyBpKyspIHsKKyAgICAgICAgICAgIGlmIChhcnJheS5oYXNPd25Qcm9wZXJ0
eShpKSkgeworICAgICAgICAgICAgICAgIHZhciBwYXNzID0gY2FsbGFibGUuY2FsbCh0aGlzT2Jq
LCBhcnJheVtpXSwgaSwgYXJyYXkpOworICAgICAgICAgICAgICAgIGlmIChwYXNzKSB7CisgICAg
ICAgICAgICAgICAgICAgIHJ2LnB1c2goYXJyYXlbaV0pOworICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICByZXR1cm4gcnY7CisgICAgfQorCisgICAg
ZnVuY3Rpb24gbWFwKGFycmF5LCBjYWxsYWJsZSwgdGhpc09iaikKKyAgICB7CisgICAgICAgIHZh
ciBydiA9IFtdOworICAgICAgICBydi5sZW5ndGggPSBhcnJheS5sZW5ndGg7CisgICAgICAgIGZv
ciAodmFyIGkgPSAwOyBpIDwgYXJyYXkubGVuZ3RoOyBpKyspIHsKKyAgICAgICAgICAgIGlmIChh
cnJheS5oYXNPd25Qcm9wZXJ0eShpKSkgeworICAgICAgICAgICAgICAgIHJ2W2ldID0gY2FsbGFi
bGUuY2FsbCh0aGlzT2JqLCBhcnJheVtpXSwgaSwgYXJyYXkpOworICAgICAgICAgICAgfQorICAg
ICAgICB9CisgICAgICAgIHJldHVybiBydjsKKyAgICB9CisKKyAgICBmdW5jdGlvbiBleHRlbmQo
YXJyYXksIGl0ZW1zKQorICAgIHsKKyAgICAgICAgQXJyYXkucHJvdG90eXBlLnB1c2guYXBwbHko
YXJyYXksIGl0ZW1zKTsKKyAgICB9CisKKyAgICBmdW5jdGlvbiBmb3JFYWNoIChhcnJheSwgY2Fs
bGJhY2ssIHRoaXNPYmopCisgICAgeworICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGFycmF5
Lmxlbmd0aDsgaSsrKSB7CisgICAgICAgICAgICBpZiAoYXJyYXkuaGFzT3duUHJvcGVydHkoaSkp
IHsKKyAgICAgICAgICAgICAgICBjYWxsYmFjay5jYWxsKHRoaXNPYmosIGFycmF5W2ldLCBpLCBh
cnJheSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICBmdW5jdGlvbiBt
ZXJnZShhLGIpCisgICAgeworICAgICAgICB2YXIgcnYgPSB7fTsKKyAgICAgICAgdmFyIHA7Cisg
ICAgICAgIGZvciAocCBpbiBhKSB7CisgICAgICAgICAgICBydltwXSA9IGFbcF07CisgICAgICAg
IH0KKyAgICAgICAgZm9yIChwIGluIGIpIHsKKyAgICAgICAgICAgIHJ2W3BdID0gYltwXTsKKyAg
ICAgICAgfQorICAgICAgICByZXR1cm4gcnY7CisgICAgfQorCisgICAgZnVuY3Rpb24gZXhwb3Nl
KG9iamVjdCwgbmFtZSkKKyAgICB7CisgICAgICAgIHZhciBjb21wb25lbnRzID0gbmFtZS5zcGxp
dCgiLiIpOworICAgICAgICB2YXIgdGFyZ2V0ID0gd2luZG93OworICAgICAgICBmb3IgKHZhciBp
ID0gMDsgaSA8IGNvbXBvbmVudHMubGVuZ3RoIC0gMTsgaSsrKSB7CisgICAgICAgICAgICBpZiAo
IShjb21wb25lbnRzW2ldIGluIHRhcmdldCkpIHsKKyAgICAgICAgICAgICAgICB0YXJnZXRbY29t
cG9uZW50c1tpXV0gPSB7fTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHRhcmdldCA9IHRh
cmdldFtjb21wb25lbnRzW2ldXTsKKyAgICAgICAgfQorICAgICAgICB0YXJnZXRbY29tcG9uZW50
c1tjb21wb25lbnRzLmxlbmd0aCAtIDFdXSA9IG9iamVjdDsKKyAgICB9CisKKyAgICBmdW5jdGlv
biBmb3JFYWNoX3dpbmRvd3MoY2FsbGJhY2spIHsKKyAgICAgICAgLy8gSXRlcmF0ZSBvZiB0aGUg
dGhlIHdpbmRvd3MgW3NlbGYgLi4uIHRvcCwgb3BlbmVyXS4gVGhlIGNhbGxiYWNrIGlzIHBhc3Nl
ZAorICAgICAgICAvLyB0d28gb2JqZWN0cywgdGhlIGZpcnN0IG9uZSBpcyB0aGUgd2luZG93cyBv
YmplY3QgaXRzZWxmLCB0aGUgc2Vjb25kIG9uZQorICAgICAgICAvLyBpcyBhIGJvb2xlYW4gaW5k
aWNhdGluZyB3aGV0aGVyIG9yIG5vdCBpdHMgb24gdGhlIHNhbWUgb3JpZ2luIGFzIHRoZQorICAg
ICAgICAvLyBjdXJyZW50IHdpbmRvdy4KKyAgICAgICAgdmFyIGNhY2hlID0gZm9yRWFjaF93aW5k
b3dzLnJlc3VsdF9jYWNoZTsKKyAgICAgICAgaWYgKCFjYWNoZSkgeworICAgICAgICAgICAgY2Fj
aGUgPSBbW3NlbGYsIHRydWVdXTsKKyAgICAgICAgICAgIHZhciB3ID0gc2VsZjsKKyAgICAgICAg
ICAgIHZhciBpID0gMDsKKyAgICAgICAgICAgIHZhciBzbzsKKyAgICAgICAgICAgIHZhciBvcmln
aW5zID0gbG9jYXRpb24uYW5jZXN0b3JPcmlnaW5zOworICAgICAgICAgICAgd2hpbGUgKHcgIT0g
dy5wYXJlbnQpIHsKKyAgICAgICAgICAgICAgICB3ID0gdy5wYXJlbnQ7CisgICAgICAgICAgICAg
ICAgLy8gSW4gV2ViS2l0LCBjYWxscyB0byBwYXJlbnQgd2luZG93cycgcHJvcGVydGllcyB0aGF0
IGFyZW4ndCBvbiB0aGUgc2FtZQorICAgICAgICAgICAgICAgIC8vIG9yaWdpbiBjYXVzZSBhbiBl
cnJvciBtZXNzYWdlIHRvIGJlIGRpc3BsYXllZCBpbiB0aGUgZXJyb3IgY29uc29sZSBidXQKKyAg
ICAgICAgICAgICAgICAvLyBkb24ndCB0aHJvdyBhbiBleGNlcHRpb24uIFRoaXMgaXMgYSBkZXZp
YXRpb24gZnJvbSB0aGUgY3VycmVudCBIVE1MNQorICAgICAgICAgICAgICAgIC8vIHNwZWMuIFNl
ZTogaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTQzNTA0CisgICAgICAg
ICAgICAgICAgLy8gVGhlIHByb2JsZW0gd2l0aCBXZWJLaXQncyBiZWhhdmlvciBpcyB0aGF0IGl0
IHBvbGx1dGVzIHRoZSBlcnJvciBjb25zb2xlCisgICAgICAgICAgICAgICAgLy8gd2l0aCBlcnJv
ciBtZXNzYWdlcyB0aGF0IGNhbid0IGJlIGNhdWdodC4KKyAgICAgICAgICAgICAgICAvLworICAg
ICAgICAgICAgICAgIC8vIFRoaXMgaXNzdWUgY2FuIGJlIG1pdGlnYXRlZCBieSByZWx5aW5nIG9u
IHRoZSAoZm9yIG5vdykgcHJvcHJpZXRhcnkKKyAgICAgICAgICAgICAgICAvLyBgbG9jYXRpb24u
YW5jZXN0b3JPcmlnaW5zYCBwcm9wZXJ0eSB3aGljaCByZXR1cm5zIGFuIG9yZGVyZWQgbGlzdCBv
ZgorICAgICAgICAgICAgICAgIC8vIHRoZSBvcmlnaW5zIG9mIGVuY2xvc2luZyB3aW5kb3dzLiBT
ZWU6CisgICAgICAgICAgICAgICAgLy8gaHR0cDovL3RyYWMud2Via2l0Lm9yZy9jaGFuZ2VzZXQv
MTEzOTQ1LgorICAgICAgICAgICAgICAgIGlmIChvcmlnaW5zKSB7CisgICAgICAgICAgICAgICAg
ICAgIHNvID0gKGxvY2F0aW9uLm9yaWdpbiA9PSBvcmlnaW5zW2ldKTsKKyAgICAgICAgICAgICAg
ICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICBzbyA9IGlzX3NhbWVfb3JpZ2luKHcpOwor
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBjYWNoZS5wdXNoKFt3LCBzb10pOwor
ICAgICAgICAgICAgICAgIGkrKzsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHcgPSB3aW5k
b3cub3BlbmVyOworICAgICAgICAgICAgaWYgKHcpIHsKKyAgICAgICAgICAgICAgICAvLyB3aW5k
b3cub3BlbmVyIGlzbid0IGluY2x1ZGVkIGluIHRoZSBgbG9jYXRpb24uYW5jZXN0b3JPcmlnaW5z
YCBwcm9wLgorICAgICAgICAgICAgICAgIC8vIFdlJ2xsIGp1c3QgaGF2ZSB0byBkZWFsIHdpdGgg
YSBzaW1wbGUgY2hlY2sgYW5kIGFuIGVycm9yIG1zZyBvbiBXZWJLaXQKKyAgICAgICAgICAgICAg
ICAvLyBicm93c2VycyBpbiB0aGlzIGNhc2UuCisgICAgICAgICAgICAgICAgY2FjaGUucHVzaChb
dywgaXNfc2FtZV9vcmlnaW4odyldKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGZvckVh
Y2hfd2luZG93cy5yZXN1bHRfY2FjaGUgPSBjYWNoZTsKKyAgICAgICAgfQorCisgICAgICAgIGZv
ckVhY2goY2FjaGUsCisgICAgICAgICAgICAgICAgZnVuY3Rpb24oYSkKKyAgICAgICAgICAgICAg
ICB7CisgICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrLmFwcGx5KG51bGwsIGEpOworICAgICAg
ICAgICAgICAgIH0pOworICAgIH0KKworICAgIGZ1bmN0aW9uIGlzX3NhbWVfb3JpZ2luKHcpIHsK
KyAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgICdyYW5kb21fcHJvcCcgaW4gdzsKKyAgICAgICAg
ICAgIHJldHVybiB0cnVlOworICAgICAgICB9IGNhdGNoIChlKSB7CisgICAgICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBmdW5jdGlvbiBzdXBwb3J0c19wb3N0
X21lc3NhZ2UodykKKyAgICB7CisgICAgICAgIHZhciBzdXBwb3J0czsKKyAgICAgICAgdmFyIHR5
cGU7CisgICAgICAgIC8vIEdpdmVuIElFICBpbXBsZW1lbnRzIHBvc3RNZXNzYWdlIGFjcm9zcyBu
ZXN0ZWQgaWZyYW1lcyBidXQgbm90IGFjcm9zcworICAgICAgICAvLyB3aW5kb3dzIG9yIHRhYnMs
IHlvdSBjYW4ndCBpbmZlciBjcm9zcy1vcmlnaW4gY29tbXVuaWNhdGlvbiBmcm9tIHRoZSBwcmVz
ZW5jZQorICAgICAgICAvLyBvZiBwb3N0TWVzc2FnZSBvbiB0aGUgY3VycmVudCB3aW5kb3cgb2Jq
ZWN0IG9ubHkuCisgICAgICAgIC8vCisgICAgICAgIC8vIFRvdWNoaW5nIHRoZSBwb3N0TWVzc2Fn
ZSBwcm9wIG9uIGEgd2luZG93IGNhbiB0aHJvdyBpZiB0aGUgd2luZG93IGlzCisgICAgICAgIC8v
IG5vdCBmcm9tIHRoZSBzYW1lIG9yaWdpbiBBTkQgcG9zdCBtZXNzYWdlIGlzIG5vdCBzdXBwb3J0
ZWQgaW4gdGhhdAorICAgICAgICAvLyBicm93c2VyLiBTbyBqdXN0IGRvaW5nIGFuIGV4aXN0ZW5j
ZSB0ZXN0IGhlcmUgd29uJ3QgZG8sIHlvdSBhbHNvIG5lZWQKKyAgICAgICAgLy8gdG8gd3JhcCBp
dCBpbiBhIHRyeS4uY2FjdGggYmxvY2suCisgICAgICAgIHRyeSB7CisgICAgICAgICAgICB0eXBl
ID0gdHlwZW9mIHcucG9zdE1lc3NhZ2U7CisgICAgICAgICAgICBpZiAodHlwZSA9PT0gImZ1bmN0
aW9uIikgeworICAgICAgICAgICAgICAgIHN1cHBvcnRzID0gdHJ1ZTsKKyAgICAgICAgICAgIH0K
KworICAgICAgICAgICAgLy8gSUU4IHN1cHBvcnRzIHBvc3RNZXNzYWdlLCBidXQgaW1wbGVtZW50
cyBpdCBhcyBhIGhvc3Qgb2JqZWN0IHdoaWNoCisgICAgICAgICAgICAvLyByZXR1cm5zICJvYmpl
Y3QiIGFzIGl0cyBgdHlwZW9mYC4KKyAgICAgICAgICAgIGVsc2UgaWYgKHR5cGUgPT09ICJvYmpl
Y3QiKSB7CisgICAgICAgICAgICAgICAgc3VwcG9ydHMgPSB0cnVlOworICAgICAgICAgICAgfQor
CisgICAgICAgICAgICAvLyBUaGlzIGlzIHRoZSBjYXNlIHdoZXJlIHBvc3RNZXNzYWdlIGlzbid0
IHN1cHBvcnRlZCBBTkQgYWNjZXNzaW5nIGEKKyAgICAgICAgICAgIC8vIHdpbmRvdyBwcm9wZXJ0
eSBhY3Jvc3Mgb3JpZ2lucyBkb2VzIE5PVCB0aHJvdyAoZS5nLiBvbGQgU2FmYXJpIGJyb3dzZXIp
LgorICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgc3VwcG9ydHMgPSBmYWxzZTsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgfSBjYXRjaCAoZSkgeworICAgICAgICAgICAgLy8gVGhp
cyBpcyB0aGUgY2FzZSB3aGVyZSBwb3N0TWVzc2FnZSBpc24ndCBzdXBwb3J0ZWQgQU5EIGFjY2Vz
c2luZyBhCisgICAgICAgICAgICAvLyB3aW5kb3cgcHJvcGVydHkgYWNyb3NzIG9yaWdpbnMgdGhy
b3dzIChlLmcuIG9sZCBGaXJlZm94IGJyb3dzZXIpLgorICAgICAgICAgICAgc3VwcG9ydHMgPSBm
YWxzZTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gc3VwcG9ydHM7CisgICAgfQorfSkoKTsK
Ky8vIHZpbTogc2V0IGV4cGFuZHRhYiBzaGlmdHdpZHRoPTQgdGFic3RvcD00Ogo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>234803</attachid>
            <date>2014-07-12 08:33:33 -0700</date>
            <delta_ts>2014-07-12 09:19:48 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-134852-20140712083315.patch</filename>
            <type>text/plain</type>
            <size>222834</size>
            <attacher name="Jer Noble">jer.noble</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTcxMDE3CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNGQ2YWZjNmE2NzdlY2Rk
ZmJlMzk3ZjYzNGUwN2FiZTZiNjM5MTczZC4uMjBhN2Y2MjBmNzRjYTFjYjRiNGViMmIwYjhiNDcw
ODhmMWI1N2I5MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSw1ICsxLDE0MCBAQAogMjAxNC0wNy0xMSAgSmVy
IE5vYmxlICA8amVyLm5vYmxlQGFwcGxlLmNvbT4KIAorICAgICAgICBbTVNFXSBodHRwL3Rlc3Rz
L21lZGlhL21lZGlhLXNvdXJjZS9tZWRpYXNvdXJjZS1kdXJhdGlvbi5odG1sIGlzIGZhaWxpbmcu
CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMzQ4NTIK
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBGaXhlcyB0
aGUgZm9sbG93aW5nIHRlc3RzOgorICAgICAgICBodHRwL3Rlc3RzL21lZGlhL21lZGlhLXNvdXJj
ZS9tZWRpYXNvdXJjZS1jb25maWctY2hhbmdlLW1wNC1hLWJpdHJhdGUuaHRtbAorICAgICAgICBo
dHRwL3Rlc3RzL21lZGlhL21lZGlhLXNvdXJjZS9tZWRpYXNvdXJjZS1jb25maWctY2hhbmdlLW1w
NC1hdi1hdWRpby1iaXRyYXRlLmh0bWwKKyAgICAgICAgaHR0cC90ZXN0cy9tZWRpYS9tZWRpYS1z
b3VyY2UvbWVkaWFzb3VyY2UtY29uZmlnLWNoYW5nZS1tcDQtYXYtdmlkZW8tYml0cmF0ZS5odG1s
CisgICAgICAgIGh0dHAvdGVzdHMvbWVkaWEvbWVkaWEtc291cmNlL21lZGlhc291cmNlLWNvbmZp
Zy1jaGFuZ2UtbXA0LXYtYml0cmF0ZS5odG1sCisgICAgICAgIGh0dHAvdGVzdHMvbWVkaWEvbWVk
aWEtc291cmNlL21lZGlhc291cmNlLWNvbmZpZy1jaGFuZ2UtbXA0LXYtZnJhbWVyYXRlLmh0bWwK
KyAgICAgICAgaHR0cC90ZXN0cy9tZWRpYS9tZWRpYS1zb3VyY2UvbWVkaWFzb3VyY2UtZHVyYXRp
b24uaHRtbAorICAgICAgICBodHRwL3Rlc3RzL21lZGlhL21lZGlhLXNvdXJjZS9tZWRpYXNvdXJj
ZS1wbGF5Lmh0bWwKKworICAgICAgICBUaGUgcHJpbWFyeSBjaGFuZ2UgbmVjZXNzYXJ5IHRvIGZp
eCB0aGUgbWVkaWFzb3VyY2UtZHVyYXRpb24uaHRtbCB0ZXN0IHdhcyB0byBhZGQgc3VwcG9ydAor
ICAgICAgICBmb3IgZGVsYXlpbmcgdGhlIGNvbXBsZXRpb24gb2YgYSBzZWVrIG9wZXJhdGlvbiB1
bnRpbCB0aGUgSFRNTE1lZGlhRWxlbWVudCdzIHJlYWR5U3RhdGUKKyAgICAgICAgcmlzZXMgdG8g
PiBIQVZFX0NVUlJFTlRfREFUQS4gVGhpcyBpcyBhY2NvbXBsaXNoZWQgYnkgbW9kaWZ5aW5nIE1l
ZGlhU291cmNlUHJpdmF0ZSB0byBoYXZlCisgICAgICAgIHdhaXRGb3JTZWVrQ29tcGxldGVkKCkg
YW5kIHNlZWtDb21wbGV0ZWQoKSB2aXJ0dWFsIG1ldGhvZHMuIFRoZXNlIGFyZSBjYWxsZWQgYnkg
TWVkaWFTb3VyY2UKKyAgICAgICAgd2hlbiBhIHNlZWsgb3BlcmF0aW9uIHJlc3VsdHMgaW4gdGhl
IGN1cnJlbnQgdGltZSBtb3Zpbmcgb3V0c2lkZSB0aGUgY3VycmVudGx5IGJ1ZmZlcmVkIHRpbWUK
KyAgICAgICAgcmFuZ2VzLCBhbmQgd2hlbiBhbiBhcHBlbmQgb3BlcmF0aW9uIHJlc3VsdHMgaW4g
dGhlIHJlYWR5U3RhdGUgY2hhbmdpbmcsIHJlc3BlY3RpdmVseS4KKworICAgICAgICBBIG51bWJl
ciBvZiBvdGhlciBkcml2ZS1ieSBmaXhlcyB3ZXJlIG5lY2Vzc2FyeSB0byBnZXQgdGhpcyB0ZXN0
IGZ1bGx5IHBhc3NpbmcsIGFzIG5vdGVkCisgICAgICAgIGJlbG93LgorCisgICAgICAgIE1ha2Ug
dGhlIE1lZGlhU291cmNlIHRoZSBwcmltYXJ5IG93bmVyIG9mIHRoZSBtZWRpYSdzIGR1cmF0aW9u
LCByYXRoZXIgdGhhbiB0aGUgTWVkaWFTb3VyY2VQcml2YXRlLgorICAgICAgICBNb3ZlIHRoZSBN
ZWRpYVNvdXJjZVByaXZhdGVDbGllbnQgcG9pbnRlciB0byB0aGUgTWVkaWFTb3VyY2VQcml2YXRl
IGZyb20gdGhlIE1lZGlhUGxheWVyUHJpdmF0ZSwgc28KKyAgICAgICAgdGhlIE1lZGlhU291cmNl
J3MgZHVyYXRpb24gY2FuIGJlIHJldHJpZXZlZC4gIFdoaWxlIHdlJ3JlIGF0IGl0LCBkbyB0aGUg
c2FtZSB0aGluZyBmb3IgYnVmZmVyZWQuCisKKyAgICAgICAgKiBNb2R1bGVzL21lZGlhc291cmNl
L01lZGlhU291cmNlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhU291cmNlOjpNZWRpYVNv
dXJjZSk6IEluaXRpYWxpemUgbV9kdXJhdGlvbi4KKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhU291
cmNlOjpkdXJhdGlvbik6IFNpbXBsZSBhY2Nlc3Nvci4KKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlh
U291cmNlOjpzZXREdXJhdGlvbkludGVybmFsKTogQnJpbmcgJ2R1cmF0aW9uIGNoYW5nZSBhbGdv
cml0aG0nIHVwIHRvIHNwZWMuCisgICAgICAgIChXZWJDb3JlOjpNZWRpYVNvdXJjZTo6c2V0UmVh
ZHlTdGF0ZSk6IFJlc2V0IG1fZHVyYXRpb24gb24gY2xvc2UuCisgICAgICAgICogTW9kdWxlcy9t
ZWRpYXNvdXJjZS9NZWRpYVNvdXJjZS5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL01l
ZGlhU291cmNlUHJpdmF0ZS5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRh
dGlvbi9vYmpjL01lZGlhUGxheWVyUHJpdmF0ZU1lZGlhU291cmNlQVZGT2JqQy5tbToKKyAgICAg
ICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZU1lZGlhU291cmNlQVZGT2JqQzo6bG9hZCk6
IERvIG5vdCBjYWxsIHNldFByaXZhdGVBbmRPcGVuKCkuCisgICAgICAgIChXZWJDb3JlOjpNZWRp
YVBsYXllclByaXZhdGVNZWRpYVNvdXJjZUFWRk9iakM6OmR1cmF0aW9uRG91YmxlKTogUGFzcyB0
aHJvdWdoIHRvIE1lZGlhU291cmNlUHJpdmF0ZUFWRk9iakMuCisgICAgICAgIChXZWJDb3JlOjpN
ZWRpYVBsYXllclByaXZhdGVNZWRpYVNvdXJjZUFWRk9iakM6OmJ1ZmZlcmVkKTogRGl0dG8uCisg
ICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL29iamMvTWVkaWFTb3VyY2VQ
cml2YXRlQVZGT2JqQy5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlv
bi9vYmpjL01lZGlhU291cmNlUHJpdmF0ZUFWRk9iakMubW06CisgICAgICAgIChXZWJDb3JlOjpN
ZWRpYVNvdXJjZVByaXZhdGVBVkZPYmpDOjpjcmVhdGUpOiBDYWxsIHNldFByaXZhdGVBbmRPcGVu
KCkuCisgICAgICAgIChXZWJDb3JlOjpNZWRpYVNvdXJjZVByaXZhdGVBVkZPYmpDOjpNZWRpYVNv
dXJjZVByaXZhdGVBVkZPYmpDKTogU2V0IG1fY2xpZW50LgorICAgICAgICAoV2ViQ29yZTo6TWVk
aWFTb3VyY2VQcml2YXRlQVZGT2JqQzo6ZHVyYXRpb24pOiBQYXNzIHRocm91Z2ggdG8gTWVkaWFT
b3VyY2VQcml2YXRlQ2xpZW50LgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFTb3VyY2VQcml2YXRl
QVZGT2JqQzo6YnVmZmVyZWQpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhU291cmNl
UHJpdmF0ZUFWRk9iakM6OmR1cmF0aW9uQ2hhbmdlZCk6IFBhc3MgdGhyb3VnaCB0byBNZWRpYVBs
YXllclByaXZhdGVNZWRpYVNvdXJjZUFWRk9iakMuCisgICAgICAgIChXZWJDb3JlOjpNZWRpYVNv
dXJjZVByaXZhdGVBVkZPYmpDOjpzZXREdXJhdGlvbik6IERlbGV0ZWQuCisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL01lZGlhU291cmNlR1N0cmVhbWVyLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6Ok1lZGlhU291cmNlR1N0cmVhbWVyOjpvcGVuKTogUGFzcyBpbiBNZWRpYVNv
dXJjZVByaXZhdGVDbGllbnQuCisgICAgICAgIChXZWJDb3JlOjpNZWRpYVNvdXJjZUdTdHJlYW1l
cjo6TWVkaWFTb3VyY2VHU3RyZWFtZXIpOiBJbml0aWFsaXplIG1fbWVkaWFTb3VyY2UuCisgICAg
ICAgIChXZWJDb3JlOjpNZWRpYVNvdXJjZUdTdHJlYW1lcjo6ZHVyYXRpb25DaGFuZ2VkKTogUmV0
cmlldmUgdGhlIGR1cmF0aW9uIGZyb20gTWVkaWFTb3VyY2VQcml2YXRlQ2xpZW50LgorICAgICAg
ICAoV2ViQ29yZTo6TWVkaWFTb3VyY2VHU3RyZWFtZXI6Om1hcmtFbmRPZlN0cmVhbSk6IFJlbW92
ZSB1bm5lY3NzYXJ5IEFTU0VSVC4KKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhU291cmNlR1N0cmVh
bWVyOjp1bm1hcmtFbmRPZlN0cmVhbSk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFT
b3VyY2VHU3RyZWFtZXI6OnNldER1cmF0aW9uKTogRGVsZXRlZC4KKyAgICAgICAgKiBwbGF0Zm9y
bS9ncmFwaGljcy9nc3RyZWFtZXIvTWVkaWFTb3VyY2VHU3RyZWFtZXIuaDoKKyAgICAgICAgKiBw
bGF0Zm9ybS9tb2NrL21lZGlhc291cmNlL01vY2tNZWRpYVBsYXllck1lZGlhU291cmNlLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6Ok1vY2tNZWRpYVBsYXllck1lZGlhU291cmNlOjpsb2FkKTogRG8g
bm90IGNhbGwgc2V0UHJpdmF0ZUFuZE9wZW4oKS4KKyAgICAgICAgKFdlYkNvcmU6Ok1vY2tNZWRp
YVBsYXllck1lZGlhU291cmNlOjpidWZmZXJlZCk6IFBhc3MgdGhyb3VnaCB0byBNb2NrTWVkaWFT
b3VyY2VQcml2YXRlLgorICAgICAgICAoV2ViQ29yZTo6TW9ja01lZGlhUGxheWVyTWVkaWFTb3Vy
Y2U6OmR1cmF0aW9uRG91YmxlKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpNb2NrTWVkaWFQ
bGF5ZXJNZWRpYVNvdXJjZTo6YWR2YW5jZUN1cnJlbnRUaW1lKTogRGl0dG8uCisgICAgICAgICog
cGxhdGZvcm0vbW9jay9tZWRpYXNvdXJjZS9Nb2NrTWVkaWFTb3VyY2VQcml2YXRlLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6Ok1vY2tNZWRpYVNvdXJjZVByaXZhdGU6OmNyZWF0ZSk6IENhbGwgc2V0
UHJpdmF0ZUFuZE9wZW4oKS4KKyAgICAgICAgKFdlYkNvcmU6Ok1vY2tNZWRpYVNvdXJjZVByaXZh
dGU6Ok1vY2tNZWRpYVNvdXJjZVByaXZhdGUpOiBTZXQgbV9jbGllbnQuCisgICAgICAgIChXZWJD
b3JlOjpNb2NrTWVkaWFTb3VyY2VQcml2YXRlOjpkdXJhdGlvbik6IFBhc3MgdGhyb3VnaCB0byBN
ZWRpYVNvdXJjZVByaXZhdGVDbGllbnQuCisgICAgICAgIChXZWJDb3JlOjpNb2NrTWVkaWFTb3Vy
Y2VQcml2YXRlOjpidWZmZXJlZCk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6TW9ja01lZGlh
U291cmNlUHJpdmF0ZTo6ZHVyYXRpb25DaGFuZ2VkKTogUGFzcyB0aG9ydWdoIHRvIE1vY2tNZWRp
YVBsYXllck1lZGlhU291cmNlLgorICAgICAgICAoV2ViQ29yZTo6TW9ja01lZGlhU291cmNlUHJp
dmF0ZTo6c2V0RHVyYXRpb24pOiBEZWxldGVkLgorCisgICAgICAgIFJvdXRlIHNlZWtUb1RpbWUg
dGhyb3VnaCBNZWRpYVNvdXJjZSwgcmF0aGVyIHRoYW4gdGhyb3VnaCBNZWRpYVNvdXJjZVByaXZh
dGUsIHNvIHRoYXQKKyAgICAgICAgdGhlIHRpbWUgY2FuIGJlIGNvbXBhcmVkIGFnYWluc3QgdGhl
IGJ1ZmZlcmVkIHJhbmdlcywgYW5kIHRyaWdnZXIgdGhlIGRlbGF5IG9mIHRoZSBzZWVrCisgICAg
ICAgIG9wZXJhdGlvbiBpZiBuZWNlc3NhcnkuIEFkZCBhIHNlZWtUaW1lciB0byBNZWRpYVBsYXll
clByaXZhdGVNZWRpYVNvdXJjZUFWRk9iakMsIGFzIHRoaXMKKyAgICAgICAgZ3VhcmFudGVlcyB0
aGUgb3JkZXIgb2YgYXN5bmNocm9ub3VzIG9wZXJhdGlvbnMsIHJhdGhlciB0aGFuIGNhbGxPbk1h
aW5UaHJlYWQsIHdoaWNoIGNhbgorICAgICAgICBjYXVzZSBhc3luYyBvcGVyYXRpb25zIHRvIG9j
Y3VyIG91dCBvZiBvcmRlci4KKworICAgICAgICAqIE1vZHVsZXMvbWVkaWFzb3VyY2UvTWVkaWFT
b3VyY2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFTb3VyY2U6OnNlZWtUb1RpbWUpOiBC
cmluZyB1cCB0byBzcGVjLgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFTb3VyY2U6OmNvbXBsZXRl
U2Vlayk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFTb3VyY2U6Om1vbml0b3JTb3Vy
Y2VCdWZmZXJzKTogQ2FsbCBjb21wbGV0ZVNlZWsoKSB3aGVuIGFwcHJvcHJpYXRlLgorICAgICAg
ICAqIE1vZHVsZXMvbWVkaWFzb3VyY2UvU291cmNlQnVmZmVyLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OlNvdXJjZUJ1ZmZlcjo6c291cmNlQnVmZmVyUHJpdmF0ZVNlZWtUb1RpbWUpOiBEZWxldGVk
LgorICAgICAgICAoV2ViQ29yZTo6U291cmNlQnVmZmVyOjpzZWVrVG9UaW1lKTogUmVuYW1lZCBm
cm9tIHNvdXJjZUJ1ZmZlclByaXZhdGVTZWVrVG9UaW1lKCkuCisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3MvTWVkaWFTb3VyY2VQcml2YXRlLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3MvTWVkaWFTb3VyY2VQcml2YXRlQ2xpZW50Lmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3MvYXZmb3VuZGF0aW9uL29iamMvTWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFTb3VyY2VBVkZPYmpD
Lmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL29iamMvTWVkaWFQ
bGF5ZXJQcml2YXRlTWVkaWFTb3VyY2VBVkZPYmpDLm1tOgorICAgICAgICAoV2ViQ29yZTo6TWVk
aWFQbGF5ZXJQcml2YXRlTWVkaWFTb3VyY2VBVkZPYmpDOjpNZWRpYVBsYXllclByaXZhdGVNZWRp
YVNvdXJjZUFWRk9iakMpOiBBZGQgc2Vla1RpbWVyLiBPbmx5CisgICAgICAgICAgICBjYWxsIHRp
bWVDaGFuZ2VkKCkgaWYgbm8gbG9uZ2VyIHNlZWtpbmcsIHRoZXJlYnkgdHJpZ2dlcmluZyBhICdz
ZWVrZWQnIGV2ZW50LgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFT
b3VyY2VBVkZPYmpDOjp+TWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFTb3VyY2VBVkZPYmpDKTogQ2xl
YXIgbV9zZWVrVGltZXIuCisgICAgICAgIChXZWJDb3JlOjpNZWRpYVBsYXllclByaXZhdGVNZWRp
YVNvdXJjZUFWRk9iakM6OnNlZWtXaXRoVG9sZXJhbmNlKTogVXNlIG1fc2Vla1RpbWVyLgorICAg
ICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFTb3VyY2VBVkZPYmpDOjpzZWVr
VGltZXJGaXJlZCk6IENhbGwgc2Vla0ludGVybmFsLgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQ
bGF5ZXJQcml2YXRlTWVkaWFTb3VyY2VBVkZPYmpDOjpzZWVrSW50ZXJuYWwpOiBBZGQgbG9nZ2lu
Zy4KKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZU1lZGlhU291cmNlQVZGT2Jq
Qzo6d2FpdEZvclNlZWtDb21wbGV0ZWQpOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlh
UGxheWVyUHJpdmF0ZU1lZGlhU291cmNlQVZGT2JqQzo6c2Vla0NvbXBsZXRlZCk6IEFkZGVkOyB0
cmlnZ2VyICdzZWVrZWQnLgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFQbGF5ZXJQcml2YXRlTWVk
aWFTb3VyY2VBVkZPYmpDOjpzZXRSZWFkeVN0YXRlKTogTm8gbG9uZ2VyIGF0dGVtcHQgdG8gZmlu
aXNoIHNlZWsgd2hlbgorICAgICAgICAgICAgcmVhZHlTdGF0ZSBjaGFuZ2VzIGhlcmU7IHRoaXMg
aGFzIGJlZW4gbW92ZWQgdXAgdG8gTWVkaWFTb3VyY2UuY3BwLgorICAgICAgICAqIHBsYXRmb3Jt
L2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9vYmpjL01lZGlhU291cmNlUHJpdmF0ZUFWRk9iakMuaDoK
KyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24vb2JqYy9NZWRpYVNvdXJj
ZVByaXZhdGVBVkZPYmpDLm1tOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFTb3VyY2VQcml2YXRl
QVZGT2JqQzo6d2FpdEZvclNlZWtDb21wbGV0ZWQpOiBQYXNzIHRocm91Z2ggdG8gTWVkaWFQbGF5
ZXJQcml2YXRlTWVkaWFTb3VyY2VBVkZPYmpDLgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFTb3Vy
Y2VQcml2YXRlQVZGT2JqQzo6c2Vla0NvbXBsZXRlZCk6IERpdHRvLgorICAgICAgICAoV2ViQ29y
ZTo6TWVkaWFTb3VyY2VQcml2YXRlQVZGT2JqQzo6c2Vla1RvVGltZSk6IFBhc3MgdGhyb3VnaCB0
byBNZWRpYVNvdXJjZVByaXZhdGVDbGllbnQuCisgICAgICAgIChXZWJDb3JlOjpNZWRpYVNvdXJj
ZVByaXZhdGVBVkZPYmpDOjpmYXN0U2Vla1RpbWVGb3JNZWRpYVRpbWUpOiBEaXR0by4KKyAgICAg
ICAgKiBwbGF0Zm9ybS9tb2NrL21lZGlhc291cmNlL01vY2tNZWRpYVBsYXllck1lZGlhU291cmNl
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Ok1vY2tNZWRpYVBsYXllck1lZGlhU291cmNlOjpNb2Nr
TWVkaWFQbGF5ZXJNZWRpYVNvdXJjZSk6IEluaXRpYWxpemUgbV9zZWVrQ29tcGxldGVkLgorICAg
ICAgICAoV2ViQ29yZTo6TW9ja01lZGlhUGxheWVyTWVkaWFTb3VyY2U6OnNlZWtpbmcpOiBDaGVj
ayBmb3IgYW4gdW5jb21wbGV0ZWQgc2VlayBvcGVyYXRpb24uIAorICAgICAgICAoV2ViQ29yZTo6
TW9ja01lZGlhUGxheWVyTWVkaWFTb3VyY2U6OnNlZWtXaXRoVG9sZXJhbmNlKTogRGl0dG8uCisg
ICAgICAgIChXZWJDb3JlOjpNb2NrTWVkaWFQbGF5ZXJNZWRpYVNvdXJjZTo6d2FpdEZvclNlZWtD
b21wbGV0ZWQpOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6Ok1vY2tNZWRpYVBsYXllck1lZGlh
U291cmNlOjpzZWVrQ29tcGxldGVkKTogQWRkZWQ7IHRyaWdnZXIgJ3NlZWtlZCcuCisgICAgICAg
ICogcGxhdGZvcm0vbW9jay9tZWRpYXNvdXJjZS9Nb2NrTWVkaWFQbGF5ZXJNZWRpYVNvdXJjZS5o
OgorICAgICAgICAqIHBsYXRmb3JtL21vY2svbWVkaWFzb3VyY2UvTW9ja01lZGlhU291cmNlUHJp
dmF0ZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpNb2NrTWVkaWFTb3VyY2VQcml2YXRlOjp3YWl0
Rm9yU2Vla0NvbXBsZXRlZCk6IFBhc3MgdGhyb3VnaCB0byBNb2NrTWVkaWFQbGF5ZXJNZWRpYVNv
dXJjZS4KKyAgICAgICAgKFdlYkNvcmU6Ok1vY2tNZWRpYVNvdXJjZVByaXZhdGU6OnNlZWtDb21w
bGV0ZWQpOiBEaXR0by4KKyAgICAgICAgKiBwbGF0Zm9ybS9tb2NrL21lZGlhc291cmNlL01vY2tN
ZWRpYVNvdXJjZVByaXZhdGUuaDoKKworICAgICAgICBEcml2ZS1ieSBmaXhlcy4KKworICAgICAg
ICAqIE1vZHVsZXMvbWVkaWFzb3VyY2UvTWVkaWFTb3VyY2UuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6TWVkaWFTb3VyY2U6OnN0cmVhbUVuZGVkV2l0aEVycm9yKTogUmUtb3JkZXIgdGhlIHN0ZXBz
IGluIHN0cmVhbUVuZGVkV2l0aEVycm9yKCkKKyAgICAgICAgICAgIHRvIGF2b2lkIHRoZSBNZWRp
YVNvdXJjZSBiZWluZyBjbG9zZWQgYW5kIHJlLW9wZW5lZCBieSB0aGUgcmVzdWx0aW5nIGR1cmF0
aW9uIGNoYW5nZQorICAgICAgICAgICAgb3BlcmF0aW9uLgorICAgICAgICAqIE1vZHVsZXMvbWVk
aWFzb3VyY2UvTWVkaWFTb3VyY2UuaDoKKyAgICAgICAgKiBNb2R1bGVzL21lZGlhc291cmNlL1Nv
dXJjZUJ1ZmZlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTb3VyY2VCdWZmZXI6OnJlbW92ZSk6
IEFkZGVkIGxvZ2dpbmcuCisgICAgICAgIChXZWJDb3JlOjpTb3VyY2VCdWZmZXI6OnJlbW92ZUNv
ZGVkRnJhbWVzKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpTb3VyY2VCdWZmZXI6Omhhc0Z1
dHVyZVRpbWUpOiBTd2FwIGFuIEFTU0VSVCBmb3IgYW4gZWFybHktcmV0dXJuOyBpdCdzIHBvc3Np
YmxlCisgICAgICAgICAgICBmb3IgY3VycmVudFRpbWUoKSB0byBiZSBvdXRzaWRlIG9mIGEgYnVm
ZmVyZWQgYXJlYS4KKyAgICAgICAgKiBNb2R1bGVzL21lZGlhc291cmNlL1NvdXJjZUJ1ZmZlci5o
OgorICAgICAgICAqIGh0bWwvSFRNTE1lZGlhRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpIVE1MTWVkaWFFbGVtZW50OjpwYXJzZUF0dHJpYnV0ZSk6IERvIG5vdCBpc3N1ZSBhbiBhZGRp
dGlvbmFsICd0aW1ldXBkYXRlJyBldmVudAorICAgICAgICAgICAgYWZ0ZXIgZmluaXNoU2Vlaygp
IGlzc3VlcyBvbmUgb2YgaXRzIG93bi4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9hdmZv
dW5kYXRpb24vb2JqYy9Tb3VyY2VCdWZmZXJQcml2YXRlQVZGT2JqQy5tbToKKyAgICAgICAgKFdl
YkNvcmU6Omdsb2JhbERhdGFQYXJzZXJRdWV1ZSk6IEFsbG93IHBhcnNpbmcgb3BlcmF0aW9ucyB0
byBoYXBwZW4gY29uY3VycmVudGx5IG9uCisgICAgICAgICAgICBiYWNrZ3JvdW5kIHF1ZXVlcy4K
KworMjAxNC0wNy0xMSAgSmVyIE5vYmxlICA8amVyLm5vYmxlQGFwcGxlLmNvbT4KKwogICAgICAg
ICBbTVNFXSBTZXBhcmF0ZSBNZWRpYVNvdXJjZSBsb2dnaW5nIGludG8gaXRzIG93biBsb2cgY2hh
bm5lbAogICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTM0
ODA5CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzb3VyY2UvTWVk
aWFTb3VyY2UuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXNvdXJjZS9NZWRpYVNv
dXJjZS5jcHAKaW5kZXggNmVhMDI5NTA2NWMyM2IzMGU5MWMzMDM5ZjlkNjQyOGE4NDFhZmU5My4u
MjEzM2U1YzUzYmE1MWI0ZTFjZWFjM2JkNmY1OTkyYjk0M2M0YzQ0ZCAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXNvdXJjZS9NZWRpYVNvdXJjZS5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXNvdXJjZS9NZWRpYVNvdXJjZS5jcHAKQEAgLTc2LDYg
Kzc2LDggQEAgUGFzc1JlZlB0cjxNZWRpYVNvdXJjZT4gTWVkaWFTb3VyY2U6OmNyZWF0ZShTY3Jp
cHRFeGVjdXRpb25Db250ZXh0JiBjb250ZXh0KQogTWVkaWFTb3VyY2U6Ok1lZGlhU291cmNlKFNj
cmlwdEV4ZWN1dGlvbkNvbnRleHQmIGNvbnRleHQpCiAgICAgOiBBY3RpdmVET01PYmplY3QoJmNv
bnRleHQpCiAgICAgLCBtX21lZGlhRWxlbWVudCgwKQorICAgICwgbV9kdXJhdGlvbihzdGQ6Om51
bWVyaWNfbGltaXRzPGRvdWJsZT46OnF1aWV0X05hTigpKQorICAgICwgbV9wZW5kaW5nU2Vla1Rp
bWUoTWVkaWFUaW1lOjppbnZhbGlkVGltZSgpKQogICAgICwgbV9yZWFkeVN0YXRlKGNsb3NlZEtl
eXdvcmQoKSkKICAgICAsIG1fYXN5bmNFdmVudFF1ZXVlKCp0aGlzKQogewpAQCAtMTI4LDcgKzEz
MCw3IEBAIHZvaWQgTWVkaWFTb3VyY2U6OnJlbW92ZWRGcm9tUmVnaXN0cnkoKQogCiBkb3VibGUg
TWVkaWFTb3VyY2U6OmR1cmF0aW9uKCkgY29uc3QKIHsKLSAgICByZXR1cm4gaXNDbG9zZWQoKSA/
IHN0ZDo6bnVtZXJpY19saW1pdHM8ZmxvYXQ+OjpxdWlldF9OYU4oKSA6IG1fcHJpdmF0ZS0+ZHVy
YXRpb24oKS50b0RvdWJsZSgpOworICAgIHJldHVybiBtX2R1cmF0aW9uOwogfQogCiBkb3VibGUg
TWVkaWFTb3VyY2U6OmN1cnJlbnRUaW1lKCkgY29uc3QKQEAgLTE4MCw2ICsxODIsNjAgQEAgc3Rk
Ojp1bmlxdWVfcHRyPFBsYXRmb3JtVGltZVJhbmdlcz4gTWVkaWFTb3VyY2U6OmJ1ZmZlcmVkKCkg
Y29uc3QKICAgICByZXR1cm4gUGxhdGZvcm1UaW1lUmFuZ2VzOjpjcmVhdGUoaW50ZXJzZWN0aW9u
UmFuZ2VzLT5yYW5nZXMoKSk7CiB9CiAKK3ZvaWQgTWVkaWFTb3VyY2U6OnNlZWtUb1RpbWUoY29u
c3QgTWVkaWFUaW1lJiB0aW1lKQoreworICAgIC8vIDIuNC4zIFNlZWtpbmcKKyAgICAvLyBodHRw
czovL2R2Y3MudzMub3JnL2hnL2h0bWwtbWVkaWEvcmF3LWZpbGUvdGlwL21lZGlhLXNvdXJjZS9t
ZWRpYS1zb3VyY2UuaHRtbCNtZWRpYXNvdXJjZS1zZWVraW5nCisKKyAgICBtX3BlbmRpbmdTZWVr
VGltZSA9IHRpbWU7CisKKyAgICAvLyBSdW4gdGhlIGZvbGxvd2luZyBzdGVwcyBhcyBwYXJ0IG9m
IHRoZSAiV2FpdCB1bnRpbCB0aGUgdXNlciBhZ2VudCBoYXMgZXN0YWJsaXNoZWQgd2hldGhlciBv
ciBub3QgdGhlCisgICAgLy8gbWVkaWEgZGF0YSBmb3IgdGhlIG5ldyBwbGF5YmFjayBwb3NpdGlv
biBpcyBhdmFpbGFibGUsIGFuZCwgaWYgaXQgaXMsIHVudGlsIGl0IGhhcyBkZWNvZGVkIGVub3Vn
aCBkYXRhCisgICAgLy8gdG8gcGxheSBiYWNrIHRoYXQgcG9zaXRpb24iIHN0ZXAgb2YgdGhlIHNl
ZWsgYWxnb3JpdGhtOgorICAgIC8vIDEuIFRoZSBtZWRpYSBlbGVtZW50IGxvb2tzIGZvciBtZWRp
YSBzZWdtZW50cyBjb250YWluaW5nIHRoZSBuZXcgcGxheWJhY2sgcG9zaXRpb24gaW4gZWFjaCBT
b3VyY2VCdWZmZXIKKyAgICAvLyBvYmplY3QgaW4gYWN0aXZlU291cmNlQnVmZmVycy4KKyAgICBm
b3IgKGF1dG8mIHNvdXJjZUJ1ZmZlciA6ICptX2FjdGl2ZVNvdXJjZUJ1ZmZlcnMpIHsKKyAgICAg
ICAgLy8g4oazIElmIG9uZSBvciBtb3JlIG9mIHRoZSBvYmplY3RzIGluIGFjdGl2ZVNvdXJjZUJ1
ZmZlcnMgaXMgbWlzc2luZyBtZWRpYSBzZWdtZW50cyBmb3IgdGhlIG5ldworICAgICAgICAvLyBw
bGF5YmFjayBwb3NpdGlvbgorICAgICAgICBpZiAoIXNvdXJjZUJ1ZmZlci0+YnVmZmVyZWQoKS0+
cmFuZ2VzKCkuY29udGFpbih0aW1lKSkgeworICAgICAgICAgICAgLy8gMS4xIFNldCB0aGUgSFRN
TE1lZGlhRWxlbWVudC5yZWFkeVN0YXRlIGF0dHJpYnV0ZSB0byBIQVZFX01FVEFEQVRBLgorICAg
ICAgICAgICAgbV9wcml2YXRlLT5zZXRSZWFkeVN0YXRlKE1lZGlhUGxheWVyOjpIYXZlTWV0YWRh
dGEpOworCisgICAgICAgICAgICAvLyAxLjIgVGhlIG1lZGlhIGVsZW1lbnQgd2FpdHMgdW50aWwg
YW4gYXBwZW5kQnVmZmVyKCkgb3IgYW4gYXBwZW5kU3RyZWFtKCkgY2FsbCBjYXVzZXMgdGhlIGNv
ZGVkCisgICAgICAgICAgICAvLyBmcmFtZSBwcm9jZXNzaW5nIGFsZ29yaXRobSB0byBzZXQgdGhl
IEhUTUxNZWRpYUVsZW1lbnQucmVhZHlTdGF0ZSBhdHRyaWJ1dGUgdG8gYSB2YWx1ZSBncmVhdGVy
CisgICAgICAgICAgICAvLyB0aGFuIEhBVkVfTUVUQURBVEEuCisgICAgICAgICAgICBMT0coTWVk
aWFTb3VyY2UsICJNZWRpYVNvdXJjZTo6c2Vla1RvVGltZSglcCkgLSB3YWl0Rm9yU2Vla0NvbXBs
ZXRlZCgpIiwgdGhpcyk7CisgICAgICAgICAgICBtX3ByaXZhdGUtPndhaXRGb3JTZWVrQ29tcGxl
dGVkKCk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgLy8g4oazIE90
aGVyd2lzZQorICAgICAgICAvLyBDb250aW51ZQorICAgIH0KKworICAgIGNvbXBsZXRlU2Vlaygp
OworfQorCit2b2lkIE1lZGlhU291cmNlOjpjb21wbGV0ZVNlZWsoKQoreworICAgIC8vIDIuNC4z
IFNlZWtpbmcsIGN0ZC4KKyAgICAvLyBodHRwczovL2R2Y3MudzMub3JnL2hnL2h0bWwtbWVkaWEv
cmF3LWZpbGUvdGlwL21lZGlhLXNvdXJjZS9tZWRpYS1zb3VyY2UuaHRtbCNtZWRpYXNvdXJjZS1z
ZWVraW5nCisKKyAgICBBU1NFUlQobV9wZW5kaW5nU2Vla1RpbWUuaXNWYWxpZCgpKTsKKworICAg
IC8vIDIuIFRoZSBtZWRpYSBlbGVtZW50IHJlc2V0cyBhbGwgZGVjb2RlcnMgYW5kIGluaXRpYWxp
emVzIGVhY2ggb25lIHdpdGggZGF0YSBmcm9tIHRoZSBhcHByb3ByaWF0ZQorICAgIC8vIGluaXRp
YWxpemF0aW9uIHNlZ21lbnQuCisgICAgLy8gMy4gVGhlIG1lZGlhIGVsZW1lbnQgZmVlZHMgY29k
ZWQgZnJhbWVzIGZyb20gdGhlIGFjdGl2ZSB0cmFjayBidWZmZXJzIGludG8gdGhlIGRlY29kZXJz
IHN0YXJ0aW5nCisgICAgLy8gd2l0aCB0aGUgY2xvc2VzdCByYW5kb20gYWNjZXNzIHBvaW50IGJl
Zm9yZSB0aGUgbmV3IHBsYXliYWNrIHBvc2l0aW9uLgorICAgIGZvciAoYXV0byYgc291cmNlQnVm
ZmVyIDogKm1fYWN0aXZlU291cmNlQnVmZmVycykKKyAgICAgICAgc291cmNlQnVmZmVyLT5zZWVr
VG9UaW1lKG1fcGVuZGluZ1NlZWtUaW1lKTsKKworICAgIC8vIDQuIFJlc3VtZSB0aGUgc2VlayBh
bGdvcml0aG0gYXQgdGhlICJBd2FpdCBhIHN0YWJsZSBzdGF0ZSIgc3RlcC4KKyAgICBtX3ByaXZh
dGUtPnNlZWtDb21wbGV0ZWQoKTsKKworICAgIG1fcGVuZGluZ1NlZWtUaW1lID0gTWVkaWFUaW1l
OjppbnZhbGlkVGltZSgpOworICAgIG1vbml0b3JTb3VyY2VCdWZmZXJzKCk7Cit9CisKIHZvaWQg
TWVkaWFTb3VyY2U6Om1vbml0b3JTb3VyY2VCdWZmZXJzKCkKIHsKICAgICAvLyAyLjQuNCBTb3Vy
Y2VCdWZmZXIgTW9uaXRvcmluZwpAQCAtMjE3LDYgKzI3Myw5IEBAIHZvaWQgTWVkaWFTb3VyY2U6
Om1vbml0b3JTb3VyY2VCdWZmZXJzKCkKICAgICAgICAgLy8gMy4gUGxheWJhY2sgbWF5IHJlc3Vt
ZSBhdCB0aGlzIHBvaW50IGlmIGl0IHdhcyBwcmV2aW91c2x5IHN1c3BlbmRlZCBieSBhIHRyYW5z
aXRpb24gdG8gSEFWRV9DVVJSRU5UX0RBVEEuCiAgICAgICAgIG1fcHJpdmF0ZS0+c2V0UmVhZHlT
dGF0ZShNZWRpYVBsYXllcjo6SGF2ZUVub3VnaERhdGEpOwogCisgICAgICAgIGlmIChtX3BlbmRp
bmdTZWVrVGltZS5pc1ZhbGlkKCkpCisgICAgICAgICAgICBjb21wbGV0ZVNlZWsoKTsKKwogICAg
ICAgICAvLyA0LiBBYm9ydCB0aGVzZSBzdGVwcy4KICAgICAgICAgcmV0dXJuOwogICAgIH0KQEAg
LTIzMSw2ICsyOTAsOSBAQCB2b2lkIE1lZGlhU291cmNlOjptb25pdG9yU291cmNlQnVmZmVycygp
CiAgICAgICAgIC8vIDMuIFBsYXliYWNrIG1heSByZXN1bWUgYXQgdGhpcyBwb2ludCBpZiBpdCB3
YXMgcHJldmlvdXNseSBzdXNwZW5kZWQgYnkgYSB0cmFuc2l0aW9uIHRvIEhBVkVfQ1VSUkVOVF9E
QVRBLgogICAgICAgICBtX3ByaXZhdGUtPnNldFJlYWR5U3RhdGUoTWVkaWFQbGF5ZXI6OkhhdmVG
dXR1cmVEYXRhKTsKIAorICAgICAgICBpZiAobV9wZW5kaW5nU2Vla1RpbWUuaXNWYWxpZCgpKQor
ICAgICAgICAgICAgY29tcGxldGVTZWVrKCk7CisKICAgICAgICAgLy8gNC4gQWJvcnQgdGhlc2Ug
c3RlcHMuCiAgICAgICAgIHJldHVybjsKICAgICB9CkBAIC0yNDYsNyArMzA4LDEwIEBAIHZvaWQg
TWVkaWFTb3VyY2U6Om1vbml0b3JTb3VyY2VCdWZmZXJzKCkKICAgICAvLyAzLiBQbGF5YmFjayBp
cyBzdXNwZW5kZWQgYXQgdGhpcyBwb2ludCBzaW5jZSB0aGUgbWVkaWEgZWxlbWVudCBkb2Vzbid0
IGhhdmUgZW5vdWdoIGRhdGEgdG8KICAgICAvLyBhZHZhbmNlIHRoZSBtZWRpYSB0aW1lbGluZS4K
ICAgICBtX3ByaXZhdGUtPnNldFJlYWR5U3RhdGUoTWVkaWFQbGF5ZXI6OkhhdmVDdXJyZW50RGF0
YSk7Ci0gICAgCisKKyAgICBpZiAobV9wZW5kaW5nU2Vla1RpbWUuaXNWYWxpZCgpKQorICAgICAg
ICBjb21wbGV0ZVNlZWsoKTsKKwogICAgIC8vIDQuIEFib3J0IHRoZXNlIHN0ZXBzLgogfQogCkBA
IC0yODMsOSArMzQ4LDM3IEBAIHZvaWQgTWVkaWFTb3VyY2U6OnNldER1cmF0aW9uKGRvdWJsZSBk
dXJhdGlvbiwgRXhjZXB0aW9uQ29kZSYgZWMpCiAKIHZvaWQgTWVkaWFTb3VyY2U6OnNldER1cmF0
aW9uSW50ZXJuYWwoZG91YmxlIGR1cmF0aW9uKQogewotICAgIG1fcHJpdmF0ZS0+c2V0RHVyYXRp
b24oTWVkaWFUaW1lOjpjcmVhdGVXaXRoRG91YmxlKGR1cmF0aW9uKSk7Ci19CisgICAgLy8gRHVy
YXRpb24gQ2hhbmdlIEFsZ29yaXRobQorICAgIC8vIGh0dHBzOi8vZHZjcy53My5vcmcvaGcvaHRt
bC1tZWRpYS9yYXctZmlsZS90aXAvbWVkaWEtc291cmNlL21lZGlhLXNvdXJjZS5odG1sI2R1cmF0
aW9uLWNoYW5nZS1hbGdvcml0aG0KKworICAgIC8vIDEuIElmIHRoZSBjdXJyZW50IHZhbHVlIG9m
IGR1cmF0aW9uIGlzIGVxdWFsIHRvIG5ldyBkdXJhdGlvbiwgdGhlbiByZXR1cm4uCisgICAgaWYg
KGR1cmF0aW9uID09IG1fZHVyYXRpb24pCisgICAgICAgIHJldHVybjsKKworICAgIC8vIDIuIFNl
dCBvbGQgZHVyYXRpb24gdG8gdGhlIGN1cnJlbnQgdmFsdWUgb2YgZHVyYXRpb24uCisgICAgZG91
YmxlIG9sZER1cmF0aW9uID0gbV9kdXJhdGlvbjsKKworICAgIC8vIDMuIFVwZGF0ZSBkdXJhdGlv
biB0byBuZXcgZHVyYXRpb24uCisgICAgbV9kdXJhdGlvbiA9IGR1cmF0aW9uOworCisgICAgLy8g
NC4gSWYgdGhlIG5ldyBkdXJhdGlvbiBpcyBsZXNzIHRoYW4gb2xkIGR1cmF0aW9uLCB0aGVuIGNh
bGwgcmVtb3ZlKG5ldyBkdXJhdGlvbiwgb2xkIGR1cmF0aW9uKQorICAgIC8vIG9uIGFsbCBvYmpl
Y3RzIGluIHNvdXJjZUJ1ZmZlcnMuCisgICAgaWYgKCFpc25hbihvbGREdXJhdGlvbikgJiYgZHVy
YXRpb24gPCBvbGREdXJhdGlvbikgeworICAgICAgICBmb3IgKGF1dG8mIHNvdXJjZUJ1ZmZlciA6
ICptX3NvdXJjZUJ1ZmZlcnMpCisgICAgICAgICAgICBzb3VyY2VCdWZmZXItPnJlbW92ZShkdXJh
dGlvbiwgb2xkRHVyYXRpb24sIElHTk9SRV9FWENFUFRJT04pOworICAgIH0KIAorICAgIC8vIDUu
IElmIGEgdXNlciBhZ2VudCBpcyB1bmFibGUgdG8gcGFydGlhbGx5IHJlbmRlciBhdWRpbyBmcmFt
ZXMgb3IgdGV4dCBjdWVzIHRoYXQgc3RhcnQgYmVmb3JlIGFuZCBlbmQgYWZ0ZXIgdGhlCisgICAg
Ly8gZHVyYXRpb24sIHRoZW4gcnVuIHRoZSBmb2xsb3dpbmcgc3RlcHM6CisgICAgLy8gNS4xIFVw
ZGF0ZSBuZXcgZHVyYXRpb24gdG8gdGhlIGhpZ2hlc3QgZW5kIHRpbWUgcmVwb3J0ZWQgYnkgdGhl
IGJ1ZmZlcmVkIGF0dHJpYnV0ZSBhY3Jvc3MgYWxsIFNvdXJjZUJ1ZmZlciBvYmplY3RzCisgICAg
Ly8gaW4gc291cmNlQnVmZmVycy4KKyAgICAvLyA1LjIgVXBkYXRlIGR1cmF0aW9uIHRvIG5ldyBk
dXJhdGlvbi4KKyAgICAvLyBOT1RFOiBBc3N1bWUgVUEgaXMgYWJsZSB0byBwYXJ0aWFsbHkgcmVu
ZGVyIGF1ZGlvIGZyYW1lcy4KKworICAgIC8vIDYuIFVwZGF0ZSB0aGUgbWVkaWEgY29udHJvbGxl
ciBkdXJhdGlvbiB0byBuZXcgZHVyYXRpb24gYW5kIHJ1biB0aGUgSFRNTE1lZGlhRWxlbWVudCBk
dXJhdGlvbiBjaGFuZ2UgYWxnb3JpdGhtLgorICAgIExPRyhNZWRpYVNvdXJjZSwgIk1lZGlhU291
cmNlOjpzZXREdXJhdGlvbkludGVybmFsKCVwKSAtIGR1cmF0aW9uKCVnKSIsIHRoaXMsIGR1cmF0
aW9uKTsKKyAgICBtX3ByaXZhdGUtPmR1cmF0aW9uQ2hhbmdlZCgpOworfQogCiB2b2lkIE1lZGlh
U291cmNlOjpzZXRSZWFkeVN0YXRlKGNvbnN0IEF0b21pY1N0cmluZyYgc3RhdGUpCiB7CkBAIC0y
OTcsNiArMzkwLDcgQEAgdm9pZCBNZWRpYVNvdXJjZTo6c2V0UmVhZHlTdGF0ZShjb25zdCBBdG9t
aWNTdHJpbmcmIHN0YXRlKQogICAgIGlmIChzdGF0ZSA9PSBjbG9zZWRLZXl3b3JkKCkpIHsKICAg
ICAgICAgbV9wcml2YXRlLmNsZWFyKCk7CiAgICAgICAgIG1fbWVkaWFFbGVtZW50ID0gMDsKKyAg
ICAgICAgbV9kdXJhdGlvbiA9IHN0ZDo6bnVtZXJpY19saW1pdHM8ZG91YmxlPjo6cXVpZXRfTmFO
KCk7CiAgICAgfQogCiAgICAgaWYgKG9sZFN0YXRlID09IHN0YXRlKQpAQCAtMzQ0LDE5ICs0Mzgs
MTggQEAgdm9pZCBNZWRpYVNvdXJjZTo6c3RyZWFtRW5kZWRXaXRoRXJyb3IoY29uc3QgQXRvbWlj
U3RyaW5nJiBlcnJvciwgRXhjZXB0aW9uQ29kZSYKICAgICBERVBSRUNBVEVEX0RFRklORV9TVEFU
SUNfTE9DQUwoY29uc3QgQXRvbWljU3RyaW5nLCBkZWNvZGUsICgiZGVjb2RlIiwgQXRvbWljU3Ry
aW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCkpOwogCiAgICAgLy8gMi40LjcgaHR0cHM6Ly9kdmNz
LnczLm9yZy9oZy9odG1sLW1lZGlhL3Jhdy1maWxlL3RpcC9tZWRpYS1zb3VyY2UvbWVkaWEtc291
cmNlLmh0bWwjZW5kLW9mLXN0cmVhbS1hbGdvcml0aG0KLSAgICAvLyAxLiBDaGFuZ2UgdGhlIHJl
YWR5U3RhdGUgYXR0cmlidXRlIHZhbHVlIHRvICJlbmRlZCIuCi0gICAgLy8gMi4gUXVldWUgYSB0
YXNrIHRvIGZpcmUgYSBzaW1wbGUgZXZlbnQgbmFtZWQgc291cmNlZW5kZWQgYXQgdGhlIE1lZGlh
U291cmNlLgotICAgIHNldFJlYWR5U3RhdGUoZW5kZWRLZXl3b3JkKCkpOwogCiAgICAgLy8gMy4K
ICAgICBpZiAoZXJyb3IuaXNFbXB0eSgpKSB7CiAgICAgICAgIC8vIOKGsyBJZiBlcnJvciBpcyBu
b3Qgc2V0LCBpcyBudWxsLCBvciBpcyBhbiBlbXB0eSBzdHJpbmcKLSAgICAgICAgLy8gMS4gUnVu
IHRoZSBkdXJhdGlvbiBjaGFuZ2UgYWxnb3JpdGhtIHdpdGggbmV3IGR1cmF0aW9uIHNldCB0byB0
aGUgaGlnaGVzdCBlbmQgdGltZXN0YW1wCi0gICAgICAgIC8vIGFjcm9zcyBhbGwgU291cmNlQnVm
ZmVyIG9iamVjdHMgaW4gc291cmNlQnVmZmVycy4KLSAgICAgICAgTWVkaWFUaW1lIG1heEVuZFRp
bWVzdGFtcDsKLSAgICAgICAgZm9yIChhdXRvIGl0ID0gbV9zb3VyY2VCdWZmZXJzLT5iZWdpbigp
LCBlbmQgPSBtX3NvdXJjZUJ1ZmZlcnMtPmVuZCgpOyBpdCAhPSBlbmQ7ICsraXQpCi0gICAgICAg
ICAgICBtYXhFbmRUaW1lc3RhbXAgPSBzdGQ6Om1heCgoKml0KS0+aGlnaGVzdFByZXNlbnRhdGlv
bkVuZFRpbWVzdGFtcCgpLCBtYXhFbmRUaW1lc3RhbXApOwotICAgICAgICBtX3ByaXZhdGUtPnNl
dER1cmF0aW9uKG1heEVuZFRpbWVzdGFtcCk7CisgICAgICAgIC8vIDEuIFJ1biB0aGUgZHVyYXRp
b24gY2hhbmdlIGFsZ29yaXRobSB3aXRoIG5ldyBkdXJhdGlvbiBzZXQgdG8gdGhlIGhpZ2hlc3Qg
ZW5kIHRpbWUgcmVwb3J0ZWQgYnkKKyAgICAgICAgLy8gdGhlIGJ1ZmZlcmVkIGF0dHJpYnV0ZSBh
Y3Jvc3MgYWxsIFNvdXJjZUJ1ZmZlciBvYmplY3RzIGluIHNvdXJjZUJ1ZmZlcnMuCisgICAgICAg
IGRvdWJsZSBtYXhFbmRUaW1lID0gMDsKKyAgICAgICAgZm9yIChhdXRvJiBzb3VyY2VCdWZmZXIg
OiAqbV9zb3VyY2VCdWZmZXJzKSB7CisgICAgICAgICAgICBpZiAoYXV0byBsZW5ndGggPSBzb3Vy
Y2VCdWZmZXItPmJ1ZmZlcmVkKCktPmxlbmd0aCgpKQorICAgICAgICAgICAgICAgIG1heEVuZFRp
bWUgPSBzdGQ6Om1heChzb3VyY2VCdWZmZXItPmJ1ZmZlcmVkKCktPmVuZChsZW5ndGggLSAxLCBJ
R05PUkVfRVhDRVBUSU9OKSwgbWF4RW5kVGltZSk7CisgICAgICAgIH0KKyAgICAgICAgc2V0RHVy
YXRpb25JbnRlcm5hbChtYXhFbmRUaW1lKTsKIAogICAgICAgICAvLyAyLiBOb3RpZnkgdGhlIG1l
ZGlhIGVsZW1lbnQgdGhhdCBpdCBub3cgaGFzIGFsbCBvZiB0aGUgbWVkaWEgZGF0YS4KICAgICAg
ICAgbV9wcml2YXRlLT5tYXJrRW5kT2ZTdHJlYW0oTWVkaWFTb3VyY2VQcml2YXRlOjpFb3NOb0Vy
cm9yKTsKQEAgLTM5Niw2ICs0ODksMTMgQEAgdm9pZCBNZWRpYVNvdXJjZTo6c3RyZWFtRW5kZWRX
aXRoRXJyb3IoY29uc3QgQXRvbWljU3RyaW5nJiBlcnJvciwgRXhjZXB0aW9uQ29kZSYKICAgICAg
ICAgLy8gICBUaHJvdyBhbiBJTlZBTElEX0FDQ0VTU19FUlIgZXhjZXB0aW9uLgogICAgICAgICBl
YyA9IElOVkFMSURfQUNDRVNTX0VSUjsKICAgICB9CisKKyAgICAvLyBOT1RFOiBEbyBzdGVwcyAx
ICYgMiBhZnRlciBzdGVwIDMgdG8gYXZvaWQgdGhlIE1lZGlhU291cmNlJ3MgcmVhZHlTdGF0ZSBi
ZWluZyByZS1vcGVuZWQgYnkgYQorICAgIC8vIHJlbW92ZSgpIG9wZXJhdGlvbiByZXN1bHRpbmcg
ZnJvbSBhIGR1cmF0aW9uIGNoYW5nZS4KKyAgICAvLyBGSVhNRTogUmUtbnVtYmVyIG9yIHVwZGF0
ZSB0aGlzIHNlY3Rpb24gb25jZSA8aHR0cHM6Ly93d3cudzMub3JnL0J1Z3MvUHVibGljL3Nob3df
YnVnLmNnaT9pZD0yNjMxNj4gaXMgcmVzb2x2ZWQuCisgICAgLy8gMS4gQ2hhbmdlIHRoZSByZWFk
eVN0YXRlIGF0dHJpYnV0ZSB2YWx1ZSB0byAiZW5kZWQiLgorICAgIC8vIDIuIFF1ZXVlIGEgdGFz
ayB0byBmaXJlIGEgc2ltcGxlIGV2ZW50IG5hbWVkIHNvdXJjZWVuZGVkIGF0IHRoZSBNZWRpYVNv
dXJjZS4KKyAgICBzZXRSZWFkeVN0YXRlKGVuZGVkS2V5d29yZCgpKTsKIH0KIAogU291cmNlQnVm
ZmVyKiBNZWRpYVNvdXJjZTo6YWRkU291cmNlQnVmZmVyKGNvbnN0IFN0cmluZyYgdHlwZSwgRXhj
ZXB0aW9uQ29kZSYgZWMpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlh
c291cmNlL01lZGlhU291cmNlLmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc291cmNl
L01lZGlhU291cmNlLmgKaW5kZXggNDA3ZTg4NzE4ODVmNzQyOGNiMTRhYTI5N2VmMTM0YmJkYTQ3
YjEyNS4uNzM4OWRiMTQzNDUzNjkzOTBlYmEwNWI4OWQ0YWQ4MmE1NzA2NmExOSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXNvdXJjZS9NZWRpYVNvdXJjZS5oCisrKyBi
L1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzb3VyY2UvTWVkaWFTb3VyY2UuaApAQCAtNzIs
MTEgKzcyLDEzIEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgc2V0UHJpdmF0ZUFuZE9wZW4o
UGFzc1JlZjxNZWRpYVNvdXJjZVByaXZhdGU+KSBvdmVycmlkZTsKICAgICB2aXJ0dWFsIGRvdWJs
ZSBkdXJhdGlvbigpIGNvbnN0IG92ZXJyaWRlOwogICAgIHZpcnR1YWwgc3RkOjp1bmlxdWVfcHRy
PFBsYXRmb3JtVGltZVJhbmdlcz4gYnVmZmVyZWQoKSBjb25zdCBvdmVycmlkZTsKKyAgICB2aXJ0
dWFsIHZvaWQgc2Vla1RvVGltZShjb25zdCBNZWRpYVRpbWUmKSBvdmVycmlkZTsKIAogICAgIGJv
b2wgYXR0YWNoVG9FbGVtZW50KEhUTUxNZWRpYUVsZW1lbnQqKTsKICAgICB2b2lkIGNsb3NlKCk7
CiAgICAgYm9vbCBpc0Nsb3NlZCgpIGNvbnN0OwogICAgIHZvaWQgbW9uaXRvclNvdXJjZUJ1ZmZl
cnMoKTsKKyAgICB2b2lkIGNvbXBsZXRlU2VlaygpOwogCiAgICAgdm9pZCBzZXREdXJhdGlvbihk
b3VibGUsIEV4Y2VwdGlvbkNvZGUmKTsKICAgICB2b2lkIHNldER1cmF0aW9uSW50ZXJuYWwoZG91
YmxlKTsKQEAgLTEyNyw2ICsxMjksOCBAQCBwcm90ZWN0ZWQ6CiAgICAgUmVmUHRyPFNvdXJjZUJ1
ZmZlckxpc3Q+IG1fc291cmNlQnVmZmVyczsKICAgICBSZWZQdHI8U291cmNlQnVmZmVyTGlzdD4g
bV9hY3RpdmVTb3VyY2VCdWZmZXJzOwogICAgIEhUTUxNZWRpYUVsZW1lbnQqIG1fbWVkaWFFbGVt
ZW50OworICAgIGRvdWJsZSBtX2R1cmF0aW9uOworICAgIE1lZGlhVGltZSBtX3BlbmRpbmdTZWVr
VGltZTsKICAgICBBdG9taWNTdHJpbmcgbV9yZWFkeVN0YXRlOwogICAgIEdlbmVyaWNFdmVudFF1
ZXVlIG1fYXN5bmNFdmVudFF1ZXVlOwogfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvbWVkaWFzb3VyY2UvU291cmNlQnVmZmVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvbWVkaWFzb3VyY2UvU291cmNlQnVmZmVyLmNwcAppbmRleCAxYzUzMjg5MWY3ODJiOWEyOTM5
OTUzMDQ0NDg2Zjc2MzBhMDcxZjIzLi4wZjY3OTUwMjU3M2EyMDYyZDY1YWJhZjI1NWRiYThjNGQy
NDM1NWYyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc291cmNlL1Nv
dXJjZUJ1ZmZlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXNvdXJjZS9T
b3VyY2VCdWZmZXIuY3BwCkBAIC0yMzMsNiArMjMzLDcgQEAgdm9pZCBTb3VyY2VCdWZmZXI6OmFi
b3J0KEV4Y2VwdGlvbkNvZGUmIGVjKQogCiB2b2lkIFNvdXJjZUJ1ZmZlcjo6cmVtb3ZlKGRvdWJs
ZSBzdGFydCwgZG91YmxlIGVuZCwgRXhjZXB0aW9uQ29kZSYgZWMpCiB7CisgICAgTE9HKE1lZGlh
U291cmNlLCAiU291cmNlQnVmZmVyOjpyZW1vdmUoJXApIC0gc3RhcnQoJXMpLCBlbmQoJXMpIiwg
dGhpcywgdG9TdHJpbmcoc3RhcnQpLnV0ZjgoKS5kYXRhKCksIHRvU3RyaW5nKGVuZCkudXRmOCgp
LmRhdGEoKSk7CiAgICAgLy8gU2VjdGlvbiAzLjIgcmVtb3ZlKCkgbWV0aG9kIHN0ZXBzLgogICAg
IC8vIDEuIElmIHN0YXJ0IGlzIG5lZ2F0aXZlIG9yIGdyZWF0ZXIgdGhhbiBkdXJhdGlvbiwgdGhl
biB0aHJvdyBhbiBJbnZhbGlkQWNjZXNzRXJyb3IgZXhjZXB0aW9uIGFuZCBhYm9ydCB0aGVzZSBz
dGVwcy4KICAgICAvLyAyLiBJZiBlbmQgaXMgbGVzcyB0aGFuIG9yIGVxdWFsIHRvIHN0YXJ0LCB0
aGVuIHRocm93IGFuIEludmFsaWRBY2Nlc3NFcnJvciBleGNlcHRpb24gYW5kIGFib3J0IHRoZXNl
IHN0ZXBzLgpAQCAtMzA4LDkgKzMwOSw5IEBAIHZvaWQgU291cmNlQnVmZmVyOjpyZW1vdmVkRnJv
bU1lZGlhU291cmNlKCkKICAgICBtX3NvdXJjZSA9IDA7CiB9CiAKLXZvaWQgU291cmNlQnVmZmVy
Ojpzb3VyY2VCdWZmZXJQcml2YXRlU2Vla1RvVGltZShTb3VyY2VCdWZmZXJQcml2YXRlKiwgY29u
c3QgTWVkaWFUaW1lJiB0aW1lKQordm9pZCBTb3VyY2VCdWZmZXI6OnNlZWtUb1RpbWUoY29uc3Qg
TWVkaWFUaW1lJiB0aW1lKQogewotICAgIExPRyhNZWRpYVNvdXJjZSwgIlNvdXJjZUJ1ZmZlcjo6
c291cmNlQnVmZmVyUHJpdmF0ZVNlZWtUb1RpbWUoJXApIC0gdGltZSglcykiLCB0aGlzLCB0b1N0
cmluZyh0aW1lKS51dGY4KCkuZGF0YSgpKTsKKyAgICBMT0coTWVkaWFTb3VyY2UsICJTb3VyY2VC
dWZmZXI6OnNlZWtUb1RpbWUoJXApIC0gdGltZSglcykiLCB0aGlzLCB0b1N0cmluZyh0aW1lKS51
dGY4KCkuZGF0YSgpKTsKIAogICAgIGZvciAoYXV0byYgdHJhY2tCdWZmZXJQYWlyIDogbV90cmFj
a0J1ZmZlck1hcCkgewogICAgICAgICBUcmFja0J1ZmZlciYgdHJhY2tCdWZmZXIgPSB0cmFja0J1
ZmZlclBhaXIudmFsdWU7CkBAIC0zMTgsOCArMzE5LDYgQEAgdm9pZCBTb3VyY2VCdWZmZXI6OnNv
dXJjZUJ1ZmZlclByaXZhdGVTZWVrVG9UaW1lKFNvdXJjZUJ1ZmZlclByaXZhdGUqLCBjb25zdCBN
ZWQKIAogICAgICAgICByZWVucXVldWVNZWRpYUZvclRpbWUodHJhY2tCdWZmZXIsIHRyYWNrSUQs
IHRpbWUpOwogICAgIH0KLQotICAgIG1fc291cmNlLT5tb25pdG9yU291cmNlQnVmZmVycygpOwog
fQogCiBNZWRpYVRpbWUgU291cmNlQnVmZmVyOjpzb3VyY2VCdWZmZXJQcml2YXRlRmFzdFNlZWtU
aW1lRm9yTWVkaWFUaW1lKFNvdXJjZUJ1ZmZlclByaXZhdGUqLCBjb25zdCBNZWRpYVRpbWUmIHRh
cmdldFRpbWUsIGNvbnN0IE1lZGlhVGltZSYgbmVnYXRpdmVUaHJlc2hvbGQsIGNvbnN0IE1lZGlh
VGltZSYgcG9zaXRpdmVUaHJlc2hvbGQpCkBAIC01MjcsNiArNTI2LDggQEAgc3RhdGljIGJvb2wg
ZGVjb2RlVGltZUNvbXBhcmF0b3IoY29uc3QgUHJlc2VudGF0aW9uT3JkZXJTYW1wbGVNYXA6Ok1h
cFR5cGU6OnZhbHUKIAogdm9pZCBTb3VyY2VCdWZmZXI6OnJlbW92ZUNvZGVkRnJhbWVzKGNvbnN0
IE1lZGlhVGltZSYgc3RhcnQsIGNvbnN0IE1lZGlhVGltZSYgZW5kKQogeworICAgIExPRyhNZWRp
YVNvdXJjZSwgIlNvdXJjZUJ1ZmZlcjo6cmVtb3ZlQ29kZWRGcmFtZXMoJXApIC0gc3RhcnQoJXMp
LCBlbmQoJXMpIiwgdGhpcywgdG9TdHJpbmcoc3RhcnQpLnV0ZjgoKS5kYXRhKCksIHRvU3RyaW5n
KGVuZCkudXRmOCgpLmRhdGEoKSk7CisKICAgICAvLyAzLjUuOSBDb2RlZCBGcmFtZSBSZW1vdmFs
IEFsZ29yaXRobQogICAgIC8vIGh0dHBzOi8vZHZjcy53My5vcmcvaGcvaHRtbC1tZWRpYS9yYXct
ZmlsZS90aXAvbWVkaWEtc291cmNlL21lZGlhLXNvdXJjZS5odG1sI3NvdXJjZWJ1ZmZlci1jb2Rl
ZC1mcmFtZS1yZW1vdmFsCiAKQEAgLTE0NDksNyArMTQ1MCw4IEBAIGJvb2wgU291cmNlQnVmZmVy
OjpoYXNGdXR1cmVUaW1lKCkgY29uc3QKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgc2l6
ZV90IGZvdW5kID0gcmFuZ2VzLmZpbmQobmVhcmVzdCk7Ci0gICAgQVNTRVJUKGZvdW5kICE9IG5v
dEZvdW5kKTsKKyAgICBpZiAoZm91bmQgPT0gbm90Rm91bmQpCisgICAgICAgIHJldHVybiBmYWxz
ZTsKIAogICAgIGJvb2wgaWdub3JlZFZhbGlkID0gZmFsc2U7CiAgICAgcmV0dXJuIHJhbmdlcy5l
bmQoZm91bmQsIGlnbm9yZWRWYWxpZCkgLSBjdXJyZW50VGltZSA+IGN1cnJlbnRUaW1lRnVkZ2VG
YWN0b3IoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzb3VyY2Uv
U291cmNlQnVmZmVyLmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc291cmNlL1NvdXJj
ZUJ1ZmZlci5oCmluZGV4IDExNTA1MTZkYzgwMWI3MWFjMGU2MjZkN2E2NjE4MzIyZGNiZjhiNjMu
LjYzYzRkNGM1ZjNiODhjYjg1MjZkOTg5NjFhNmYyNjMwNDc1NjQzYmEgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzb3VyY2UvU291cmNlQnVmZmVyLmgKKysrIGIvU291
cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXNvdXJjZS9Tb3VyY2VCdWZmZXIuaApAQCAtNzcsNiAr
NzcsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBhYm9ydElmVXBkYXRpbmcoKTsKICAgICB2b2lkIHJl
bW92ZWRGcm9tTWVkaWFTb3VyY2UoKTsKICAgICBjb25zdCBNZWRpYVRpbWUmIGhpZ2hlc3RQcmVz
ZW50YXRpb25FbmRUaW1lc3RhbXAoKSBjb25zdCB7IHJldHVybiBtX2hpZ2hlc3RQcmVzZW50YXRp
b25FbmRUaW1lc3RhbXA7IH0KKyAgICB2b2lkIHNlZWtUb1RpbWUoY29uc3QgTWVkaWFUaW1lJik7
CiAKICNpZiBFTkFCTEUoVklERU9fVFJBQ0spCiAgICAgVmlkZW9UcmFja0xpc3QqIHZpZGVvVHJh
Y2tzKCk7CkBAIC0xMTYsNyArMTE3LDYgQEAgcHJpdmF0ZToKICAgICB2aXJ0dWFsIGJvb2wgc291
cmNlQnVmZmVyUHJpdmF0ZUhhc0F1ZGlvKGNvbnN0IFNvdXJjZUJ1ZmZlclByaXZhdGUqKSBjb25z
dCBvdmVycmlkZTsKICAgICB2aXJ0dWFsIGJvb2wgc291cmNlQnVmZmVyUHJpdmF0ZUhhc1ZpZGVv
KGNvbnN0IFNvdXJjZUJ1ZmZlclByaXZhdGUqKSBjb25zdCBvdmVycmlkZTsKICAgICB2aXJ0dWFs
IHZvaWQgc291cmNlQnVmZmVyUHJpdmF0ZURpZEJlY29tZVJlYWR5Rm9yTW9yZVNhbXBsZXMoU291
cmNlQnVmZmVyUHJpdmF0ZSosIEF0b21pY1N0cmluZyB0cmFja0lEKSBvdmVycmlkZTsKLSAgICB2
aXJ0dWFsIHZvaWQgc291cmNlQnVmZmVyUHJpdmF0ZVNlZWtUb1RpbWUoU291cmNlQnVmZmVyUHJp
dmF0ZSosIGNvbnN0IE1lZGlhVGltZSYpOwogICAgIHZpcnR1YWwgTWVkaWFUaW1lIHNvdXJjZUJ1
ZmZlclByaXZhdGVGYXN0U2Vla1RpbWVGb3JNZWRpYVRpbWUoU291cmNlQnVmZmVyUHJpdmF0ZSos
IGNvbnN0IE1lZGlhVGltZSYsIGNvbnN0IE1lZGlhVGltZSYgbmVnYXRpdmVUaHJlc2hvbGQsIGNv
bnN0IE1lZGlhVGltZSYgcG9zaXRpdmVUaHJlc2hvbGQpOwogICAgIHZpcnR1YWwgdm9pZCBzb3Vy
Y2VCdWZmZXJQcml2YXRlQXBwZW5kQ29tcGxldGUoU291cmNlQnVmZmVyUHJpdmF0ZSosIEFwcGVu
ZFJlc3VsdCkgb3ZlcnJpZGU7CiAgICAgdmlydHVhbCB2b2lkIHNvdXJjZUJ1ZmZlclByaXZhdGVE
aWRSZWNlaXZlUmVuZGVyaW5nRXJyb3IoU291cmNlQnVmZmVyUHJpdmF0ZSosIGludCBlcnJvckNv
ZGUpIG92ZXJyaWRlOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MTWVkaWFF
bGVtZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTE1lZGlhRWxlbWVudC5jcHAKaW5k
ZXggY2IxMTc1YTkwMWRkNzQyMTdkMzdkMzEyYzRmOTdhNDYwNzJjY2Q2MC4uNzdiZWJjMGRhNzE5
M2FmZDM4MTk3MTEyODgzOGIxNGY1OTAxMWJjMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
aHRtbC9IVE1MTWVkaWFFbGVtZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxN
ZWRpYUVsZW1lbnQuY3BwCkBAIC00MDkxLDcgKzQwOTEsOCBAQCB2b2lkIEhUTUxNZWRpYUVsZW1l
bnQ6Om1lZGlhUGxheWVyVGltZUNoYW5nZWQoTWVkaWFQbGF5ZXIqKQogICAgIC8vIEFsd2F5cyBj
YWxsIHNjaGVkdWxlVGltZXVwZGF0ZUV2ZW50IHdoZW4gdGhlIG1lZGlhIGVuZ2luZSByZXBvcnRz
IGEgdGltZSBkaXNjb250aW51aXR5LCAKICAgICAvLyBpdCB3aWxsIG9ubHkgcXVldWUgYSAndGlt
ZXVwZGF0ZScgZXZlbnQgaWYgd2UgaGF2ZW4ndCBhbHJlYWR5IHBvc3RlZCBvbmUgYXQgdGhlIGN1
cnJlbnQKICAgICAvLyBtb3ZpZSB0aW1lLgotICAgIHNjaGVkdWxlVGltZXVwZGF0ZUV2ZW50KGZh
bHNlKTsKKyAgICBlbHNlCisgICAgICAgIHNjaGVkdWxlVGltZXVwZGF0ZUV2ZW50KGZhbHNlKTsK
IAogICAgIGRvdWJsZSBub3cgPSBjdXJyZW50VGltZSgpOwogICAgIGRvdWJsZSBkdXIgPSBkdXJh
dGlvbigpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvTWVk
aWFTb3VyY2VQcml2YXRlLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9NZWRp
YVNvdXJjZVByaXZhdGUuaAppbmRleCBkYzI0ZTMxZTZmMjJkNTI3ZDY1ZGE3YjJlOTcxNWQ2ODhk
NzQzYWVjLi43MTg2NTg5MTBiY2UzOTJiOTVkYTU0NzZlNjg5ODk5OWU2NDU3ODQ3IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9NZWRpYVNvdXJjZVByaXZhdGUu
aAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9NZWRpYVNvdXJjZVByaXZh
dGUuaApAQCAtNTEsMTQgKzUxLDE2IEBAIHB1YmxpYzoKIAogICAgIGVudW0gQWRkU3RhdHVzIHsg
T2ssIE5vdFN1cHBvcnRlZCwgUmVhY2hlZElkTGltaXQgfTsKICAgICB2aXJ0dWFsIEFkZFN0YXR1
cyBhZGRTb3VyY2VCdWZmZXIoY29uc3QgQ29udGVudFR5cGUmLCBSZWZQdHI8U291cmNlQnVmZmVy
UHJpdmF0ZT4mKSA9IDA7Ci0gICAgdmlydHVhbCBNZWRpYVRpbWUgZHVyYXRpb24oKSA9IDA7Ci0g
ICAgdmlydHVhbCB2b2lkIHNldER1cmF0aW9uKGNvbnN0IE1lZGlhVGltZSYpID0gMDsKKyAgICB2
aXJ0dWFsIHZvaWQgZHVyYXRpb25DaGFuZ2VkKCkgPSAwOwogICAgIGVudW0gRW5kT2ZTdHJlYW1T
dGF0dXMgeyBFb3NOb0Vycm9yLCBFb3NOZXR3b3JrRXJyb3IsIEVvc0RlY29kZUVycm9yIH07CiAg
ICAgdmlydHVhbCB2b2lkIG1hcmtFbmRPZlN0cmVhbShFbmRPZlN0cmVhbVN0YXR1cykgPSAwOwog
ICAgIHZpcnR1YWwgdm9pZCB1bm1hcmtFbmRPZlN0cmVhbSgpID0gMDsKIAogICAgIHZpcnR1YWwg
TWVkaWFQbGF5ZXI6OlJlYWR5U3RhdGUgcmVhZHlTdGF0ZSgpIGNvbnN0ID0gMDsKICAgICB2aXJ0
dWFsIHZvaWQgc2V0UmVhZHlTdGF0ZShNZWRpYVBsYXllcjo6UmVhZHlTdGF0ZSkgPSAwOworCisg
ICAgdmlydHVhbCB2b2lkIHdhaXRGb3JTZWVrQ29tcGxldGVkKCkgPSAwOworICAgIHZpcnR1YWwg
dm9pZCBzZWVrQ29tcGxldGVkKCkgPSAwOwogfTsKIAogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvTWVkaWFTb3VyY2VQcml2YXRlQ2xpZW50LmggYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9NZWRpYVNvdXJjZVByaXZhdGVDbGllbnQuaApp
bmRleCBlNzY2ZjE0MGU4ZjIzYjE3NWY5ZWQyMWQ1ZTBkMzcxY2MyNGIyMTU4Li40M2YxNzE3YzNj
YmYxMDgxNTdhZWE2MjQzZjA0M2YzZjRkN2FkYTliIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9NZWRpYVNvdXJjZVByaXZhdGVDbGllbnQuaAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9NZWRpYVNvdXJjZVByaXZhdGVDbGllbnQuaApA
QCAtNDIsNiArNDIsNyBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIHNldFByaXZhdGVBbmRP
cGVuKFBhc3NSZWY8TWVkaWFTb3VyY2VQcml2YXRlPikgPSAwOwogICAgIHZpcnR1YWwgZG91Ymxl
IGR1cmF0aW9uKCkgY29uc3QgPSAwOwogICAgIHZpcnR1YWwgc3RkOjp1bmlxdWVfcHRyPFBsYXRm
b3JtVGltZVJhbmdlcz4gYnVmZmVyZWQoKSBjb25zdCA9IDA7CisgICAgdmlydHVhbCB2b2lkIHNl
ZWtUb1RpbWUoY29uc3QgTWVkaWFUaW1lJikgPSAwOwogfTsKIAogfQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL29iamMvTWVkaWFQbGF5
ZXJQcml2YXRlTWVkaWFTb3VyY2VBVkZPYmpDLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9hdmZvdW5kYXRpb24vb2JqYy9NZWRpYVBsYXllclByaXZhdGVNZWRpYVNvdXJjZUFW
Rk9iakMuaAppbmRleCA4MGJlZDQ1ZjMwNTlhZTlkMDQ3OTMwOGY1YmQ5MGMzYWJmZmFmNmViLi5m
MGFiZDI3NTNlOGU3NmE0ZGJhZDczOTA1MjBkN2UwODFkYjQ3MDNhIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24vb2JqYy9NZWRpYVBsYXll
clByaXZhdGVNZWRpYVNvdXJjZUFWRk9iakMuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9hdmZvdW5kYXRpb24vb2JqYy9NZWRpYVBsYXllclByaXZhdGVNZWRpYVNvdXJj
ZUFWRk9iakMuaApAQCAtNjUsNiArNjUsOCBAQCBwdWJsaWM6CiAgICAgdm9pZCBzZXROZXR3b3Jr
U3RhdGUoTWVkaWFQbGF5ZXI6Ok5ldHdvcmtTdGF0ZSk7CiAKICAgICB2b2lkIHNlZWtJbnRlcm5h
bCgpOworICAgIHZvaWQgd2FpdEZvclNlZWtDb21wbGV0ZWQoKTsKKyAgICB2b2lkIHNlZWtDb21w
bGV0ZWQoKTsKICAgICB2b2lkIHNldExvYWRpbmdQcm9ncmVzc3NlZChib29sIGZsYWcpIHsgbV9s
b2FkaW5nUHJvZ3Jlc3NlZCA9IGZsYWc7IH0KICAgICB2b2lkIHNldEhhc0F2YWlsYWJsZVZpZGVv
RnJhbWUoYm9vbCBmbGFnKSB7IG1faGFzQXZhaWxhYmxlVmlkZW9GcmFtZSA9IGZsYWc7IH0KICAg
ICB2b2lkIGR1cmF0aW9uQ2hhbmdlZCgpOwpAQCAtMTU3LDYgKzE1OSw3IEBAIHByaXZhdGU6CiAg
ICAgdm9pZCBlbnN1cmVMYXllcigpOwogICAgIHZvaWQgZGVzdHJveUxheWVyKCk7CiAgICAgYm9v
bCBzaG91bGRCZVBsYXlpbmcoKSBjb25zdDsKKyAgICB2b2lkIHNlZWtUaW1lckZpcmVkKFRpbWVy
PE1lZGlhUGxheWVyUHJpdmF0ZU1lZGlhU291cmNlQVZGT2JqQz4mKTsKIAogICAgIC8vIE1lZGlh
UGxheWVyIEZhY3RvcnkgTWV0aG9kcwogICAgIHN0YXRpYyBQYXNzT3duUHRyPE1lZGlhUGxheWVy
UHJpdmF0ZUludGVyZmFjZT4gY3JlYXRlKE1lZGlhUGxheWVyKik7CkBAIC0xODIsNyArMTg1LDYg
QEAgcHJpdmF0ZToKIAogICAgIE1lZGlhUGxheWVyKiBtX3BsYXllcjsKICAgICBXZWFrUHRyRmFj
dG9yeTxNZWRpYVBsYXllclByaXZhdGVNZWRpYVNvdXJjZUFWRk9iakM+IG1fd2Vha1B0ckZhY3Rv
cnk7Ci0gICAgUmVmUHRyPE1lZGlhU291cmNlUHJpdmF0ZUNsaWVudD4gbV9tZWRpYVNvdXJjZTsK
ICAgICBSZWZQdHI8TWVkaWFTb3VyY2VQcml2YXRlQVZGT2JqQz4gbV9tZWRpYVNvdXJjZVByaXZh
dGU7CiAgICAgUmV0YWluUHRyPEFWQXNzZXQ+IG1fYXNzZXQ7CiAgICAgUmV0YWluUHRyPEFWU2Ft
cGxlQnVmZmVyRGlzcGxheUxheWVyPiBtX3NhbXBsZUJ1ZmZlckRpc3BsYXlMYXllcjsKQEAgLTE5
MCw2ICsxOTIsNyBAQCBwcml2YXRlOgogICAgIFJldGFpblB0cjxBVlNhbXBsZUJ1ZmZlclJlbmRl
clN5bmNocm9uaXplcj4gbV9zeW5jaHJvbml6ZXI7CiAgICAgUmV0YWluUHRyPGlkPiBtX3RpbWVK
dW1wZWRPYnNlcnZlcjsKICAgICBSZXRhaW5QdHI8aWQ+IG1fZHVyYXRpb25PYnNlcnZlcjsKKyAg
ICBUaW1lcjxNZWRpYVBsYXllclByaXZhdGVNZWRpYVNvdXJjZUFWRk9iakM+IG1fc2Vla1RpbWVy
OwogICAgIE1lZGlhUGxheWVyOjpOZXR3b3JrU3RhdGUgbV9uZXR3b3JrU3RhdGU7CiAgICAgTWVk
aWFQbGF5ZXI6OlJlYWR5U3RhdGUgbV9yZWFkeVN0YXRlOwogICAgIGRvdWJsZSBtX3JhdGU7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24v
b2JqYy9NZWRpYVBsYXllclByaXZhdGVNZWRpYVNvdXJjZUFWRk9iakMubW0gYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24vb2JqYy9NZWRpYVBsYXllclByaXZh
dGVNZWRpYVNvdXJjZUFWRk9iakMubW0KaW5kZXggZDhiNjVmNjA4NjJiMGJmZTVjZjM4NjI4MThl
MzRmMzM2YWI3NDcxMy4uNWQ3MzYwMjFlMTRlYjIyZDExNmFiMmJkNTgzYjlkNTU0Zjg0Y2FhZiAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9u
L29iamMvTWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFTb3VyY2VBVkZPYmpDLm1tCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9vYmpjL01lZGlhUGxheWVy
UHJpdmF0ZU1lZGlhU291cmNlQVZGT2JqQy5tbQpAQCAtMjksNiArMjksNyBAQAogI2lmIEVOQUJM
RShNRURJQV9TT1VSQ0UpICYmIFVTRShBVkZPVU5EQVRJT04pCiAKICNpbXBvcnQgIkNETVNlc3Np
b24uaCIKKyNpbXBvcnQgIkxvZ2dpbmcuaCIKICNpbXBvcnQgIk1lZGlhU291cmNlUHJpdmF0ZUFW
Rk9iakMuaCIKICNpbXBvcnQgIk1lZGlhU291cmNlUHJpdmF0ZUNsaWVudC5oIgogI2ltcG9ydCAi
TWVkaWFUaW1lTWFjLmgiCkBAIC0xMzQsNiArMTM1LDcgQEAgTWVkaWFQbGF5ZXJQcml2YXRlTWVk
aWFTb3VyY2VBVkZPYmpDOjpNZWRpYVBsYXllclByaXZhdGVNZWRpYVNvdXJjZUFWRk9iakMoTWVk
aWEKICAgICA6IG1fcGxheWVyKHBsYXllcikKICAgICAsIG1fd2Vha1B0ckZhY3RvcnkodGhpcykK
ICAgICAsIG1fc3luY2hyb25pemVyKGFkb3B0TlMoW1tnZXRBVlNhbXBsZUJ1ZmZlclJlbmRlclN5
bmNocm9uaXplckNsYXNzKCkgYWxsb2NdIGluaXRdKSkKKyAgICAsIG1fc2Vla1RpbWVyKHRoaXMs
ICZNZWRpYVBsYXllclByaXZhdGVNZWRpYVNvdXJjZUFWRk9iakM6OnNlZWtUaW1lckZpcmVkKQog
ICAgICwgbV9uZXR3b3JrU3RhdGUoTWVkaWFQbGF5ZXI6OkVtcHR5KQogICAgICwgbV9yZWFkeVN0
YXRlKE1lZGlhUGxheWVyOjpIYXZlTm90aGluZykKICAgICAsIG1fcmF0ZSgxKQpAQCAtMTQ5LDE5
ICsxNTEsMjQgQEAgTWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFTb3VyY2VBVkZPYmpDOjpNZWRpYVBs
YXllclByaXZhdGVNZWRpYVNvdXJjZUFWRk9iakMoTWVkaWEKICAgICAvLyBhZGRQZXJpb2RpY1Rp
bWVPYnNlcnZlckZvckludGVydmFsOiB0aHJvd3MgYW4gZXhjZXB0aW9uIGlmIHlvdSBwYXNzIGEg
bm9uLW51bWVyaWMgQ01UaW1lLCBzbyBqdXN0IHVzZQogICAgIC8vIGFuIGFyYml0cmFyaWx5IGxh
cmdlIHRpbWUgdmFsdWUgb2Ygb25jZSBhbiBob3VyOgogICAgIF9fYmxvY2sgYXV0byB3ZWFrVGhp
cyA9IGNyZWF0ZVdlYWtQdHIoKTsKLSAgICBtX3RpbWVKdW1wZWRPYnNlcnZlciA9IFttX3N5bmNo
cm9uaXplciBhZGRQZXJpb2RpY1RpbWVPYnNlcnZlckZvckludGVydmFsOnRvQ01UaW1lKE1lZGlh
VGltZTo6Y3JlYXRlV2l0aERvdWJsZSgzNjAwKSkgcXVldWU6ZGlzcGF0Y2hfZ2V0X21haW5fcXVl
dWUoKSB1c2luZ0Jsb2NrOl4oQ01UaW1lKXsKKyAgICBtX3RpbWVKdW1wZWRPYnNlcnZlciA9IFtt
X3N5bmNocm9uaXplciBhZGRQZXJpb2RpY1RpbWVPYnNlcnZlckZvckludGVydmFsOnRvQ01UaW1l
KE1lZGlhVGltZTo6Y3JlYXRlV2l0aERvdWJsZSgzNjAwKSkgcXVldWU6ZGlzcGF0Y2hfZ2V0X21h
aW5fcXVldWUoKSB1c2luZ0Jsb2NrOl4oQ01UaW1lIHRpbWUpIHsKKyNpZiBMT0dfRElTQUJMRUQK
KyAgICAgICAgVU5VU0VEX1BBUkFNKHRpbWUpOworI2VuZGlmCiAgICAgICAgIC8vIEZJWE1FOiBS
ZW1vdmUgdGhlIGJlbG93IG9uY2UgPHJkYXI6Ly9wcm9ibGVtLzE1Nzk4MDUwPiBpcyBmaXhlZC4K
ICAgICAgICAgaWYgKCF3ZWFrVGhpcykKICAgICAgICAgICAgIHJldHVybjsKIAogICAgICAgICBp
ZiAobV9zZWVraW5nICYmICFtX3BlbmRpbmdTZWVrKSB7CisgICAgICAgICAgICBMT0coTWVkaWFT
b3VyY2UsICJNZWRpYVBsYXllclByaXZhdGVNZWRpYVNvdXJjZUFWRk9iakM6Om1fdGltZUp1bXBl
ZE9ic2VydmVyKCVwKSAtIHRpbWUoJXMpIiwgd2Vha1RoaXMuZ2V0KCksIHRvU3RyaW5nKHRvTWVk
aWFUaW1lKHRpbWUpKS51dGY4KCkuZGF0YSgpKTsKICAgICAgICAgICAgIG1fc2Vla2luZyA9IGZh
bHNlOworCiAgICAgICAgICAgICBpZiAoc2hvdWxkQmVQbGF5aW5nKCkpCiAgICAgICAgICAgICAg
ICAgW21fc3luY2hyb25pemVyIHNldFJhdGU6bV9yYXRlXTsKKyAgICAgICAgICAgIGlmICghc2Vl
a2luZygpKQorICAgICAgICAgICAgICAgIG1fcGxheWVyLT50aW1lQ2hhbmdlZCgpOwogICAgICAg
ICB9CiAKLSAgICAgICAgbV9wbGF5ZXItPnRpbWVDaGFuZ2VkKCk7Ci0KICAgICAgICAgaWYgKG1f
cGVuZGluZ1NlZWspCiAgICAgICAgICAgICBzZWVrSW50ZXJuYWwoKTsKICAgICB9XTsKQEAgLTE3
Nyw2ICsxODQsOCBAQCBNZWRpYVBsYXllclByaXZhdGVNZWRpYVNvdXJjZUFWRk9iakM6On5NZWRp
YVBsYXllclByaXZhdGVNZWRpYVNvdXJjZUFWRk9iakMoKQogICAgICAgICBbbV9zeW5jaHJvbml6
ZXIgcmVtb3ZlVGltZU9ic2VydmVyOm1fdGltZUp1bXBlZE9ic2VydmVyLmdldCgpXTsKICAgICBp
ZiAobV9kdXJhdGlvbk9ic2VydmVyKQogICAgICAgICBbbV9zeW5jaHJvbml6ZXIgcmVtb3ZlVGlt
ZU9ic2VydmVyOm1fZHVyYXRpb25PYnNlcnZlci5nZXQoKV07CisKKyAgICBtX3NlZWtUaW1lci5z
dG9wKCk7CiB9CiAKICNwcmFnbWEgbWFyayAtCkBAIC0yODYsMTQgKzI5NSwxMSBAQCB2b2lkIE1l
ZGlhUGxheWVyUHJpdmF0ZU1lZGlhU291cmNlQVZGT2JqQzo6bG9hZChjb25zdCBTdHJpbmcmKQog
ICAgIG1fcGxheWVyLT5uZXR3b3JrU3RhdGVDaGFuZ2VkKCk7CiB9CiAKLXZvaWQgTWVkaWFQbGF5
ZXJQcml2YXRlTWVkaWFTb3VyY2VBVkZPYmpDOjpsb2FkKGNvbnN0IFN0cmluZyYgdXJsLCBNZWRp
YVNvdXJjZVByaXZhdGVDbGllbnQqIHNvdXJjZSkKK3ZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlTWVk
aWFTb3VyY2VBVkZPYmpDOjpsb2FkKGNvbnN0IFN0cmluZyYgdXJsLCBNZWRpYVNvdXJjZVByaXZh
dGVDbGllbnQqIGNsaWVudCkKIHsKICAgICBVTlVTRURfUEFSQU0odXJsKTsKIAotICAgIG1fbWVk
aWFTb3VyY2UgPSBzb3VyY2U7Ci0gICAgbV9tZWRpYVNvdXJjZVByaXZhdGUgPSBNZWRpYVNvdXJj
ZVByaXZhdGVBVkZPYmpDOjpjcmVhdGUodGhpcyk7Ci0KLSAgICBtX21lZGlhU291cmNlLT5zZXRQ
cml2YXRlQW5kT3BlbigqbV9tZWRpYVNvdXJjZVByaXZhdGUpOworICAgIG1fbWVkaWFTb3VyY2VQ
cml2YXRlID0gTWVkaWFTb3VyY2VQcml2YXRlQVZGT2JqQzo6Y3JlYXRlKHRoaXMsIGNsaWVudCk7
CiB9CiAKIHZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFTb3VyY2VBVkZPYmpDOjpjYW5jZWxM
b2FkKCkKQEAgLTQwNiw3ICs0MTIsNyBAQCB2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZU1lZGlhU291
cmNlQVZGT2JqQzo6c2V0VmlzaWJsZShib29sKQogCiBkb3VibGUgTWVkaWFQbGF5ZXJQcml2YXRl
TWVkaWFTb3VyY2VBVkZPYmpDOjpkdXJhdGlvbkRvdWJsZSgpIGNvbnN0CiB7Ci0gICAgcmV0dXJu
IG1fbWVkaWFTb3VyY2UgPyBtX21lZGlhU291cmNlLT5kdXJhdGlvbigpIDogMDsKKyAgICByZXR1
cm4gbV9tZWRpYVNvdXJjZVByaXZhdGUgPyBtX21lZGlhU291cmNlUHJpdmF0ZS0+ZHVyYXRpb24o
KS50b0RvdWJsZSgpIDogMDsKIH0KIAogTWVkaWFUaW1lIE1lZGlhUGxheWVyUHJpdmF0ZU1lZGlh
U291cmNlQVZGT2JqQzo6Y3VycmVudE1lZGlhVGltZSgpIGNvbnN0CkBAIC00MzEsMTYgKzQzNywx
OSBAQCBkb3VibGUgTWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFTb3VyY2VBVkZPYmpDOjppbml0aWFs
VGltZSgpIGNvbnN0CiAKIHZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFTb3VyY2VBVkZPYmpD
OjpzZWVrV2l0aFRvbGVyYW5jZShkb3VibGUgdGltZSwgZG91YmxlIG5lZ2F0aXZlVGhyZXNob2xk
LCBkb3VibGUgcG9zaXRpdmVUaHJlc2hvbGQpCiB7CisgICAgTE9HKE1lZGlhU291cmNlLCAiTWVk
aWFQbGF5ZXJQcml2YXRlTWVkaWFTb3VyY2VBVkZPYmpDOjpzZWVrV2l0aFRvbGVyYW5jZSglcCkg
LSB0aW1lKCVzKSwgbmVnYXRpdmVUaHJlc2hvbGQoJXMpLCBwb3NpdGl2ZVRocmVzaG9sZCglcyki
LCB0aGlzLCB0b1N0cmluZyh0aW1lKS51dGY4KCkuZGF0YSgpLCB0b1N0cmluZyhuZWdhdGl2ZVRo
cmVzaG9sZCkudXRmOCgpLmRhdGEoKSwgdG9TdHJpbmcocG9zaXRpdmVUaHJlc2hvbGQpLnV0Zjgo
KS5kYXRhKCkpOwogICAgIG1fc2Vla2luZyA9IHRydWU7Ci0gICAgbV9zZWVrQ29tcGxldGVkID0g
ZmFsc2U7CiAgICAgYXV0byB3ZWFrVGhpcyA9IGNyZWF0ZVdlYWtQdHIoKTsKICAgICBtX3BlbmRp
bmdTZWVrID0gc3RkOjptYWtlX3VuaXF1ZTxQZW5kaW5nU2Vlaz4oTWVkaWFUaW1lOjpjcmVhdGVX
aXRoRG91YmxlKHRpbWUpLCBNZWRpYVRpbWU6OmNyZWF0ZVdpdGhEb3VibGUobmVnYXRpdmVUaHJl
c2hvbGQpLCBNZWRpYVRpbWU6OmNyZWF0ZVdpdGhEb3VibGUocG9zaXRpdmVUaHJlc2hvbGQpKTsK
IAotICAgIGNhbGxPbk1haW5UaHJlYWQoW3dlYWtUaGlzXSB7Ci0gICAgICAgIGlmICghd2Vha1Ro
aXMpCi0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIHdlYWtUaGlzLmdldCgpLT5zZWVrSW50
ZXJuYWwoKTsKLSAgICB9KTsKKyAgICBpZiAobV9zZWVrVGltZXIuaXNBY3RpdmUoKSkKKyAgICAg
ICAgbV9zZWVrVGltZXIuc3RvcCgpOworICAgIG1fc2Vla1RpbWVyLnN0YXJ0T25lU2hvdCgwKTsK
K30KKwordm9pZCBNZWRpYVBsYXllclByaXZhdGVNZWRpYVNvdXJjZUFWRk9iakM6OnNlZWtUaW1l
ckZpcmVkKFRpbWVyPE1lZGlhUGxheWVyUHJpdmF0ZU1lZGlhU291cmNlQVZGT2JqQz4mKQorewor
ICAgIHNlZWtJbnRlcm5hbCgpOwogfQogCiB2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZU1lZGlhU291
cmNlQVZGT2JqQzo6c2Vla0ludGVybmFsKCkKQEAgLTQ2MCwxMCArNDY5LDMwIEBAIHZvaWQgTWVk
aWFQbGF5ZXJQcml2YXRlTWVkaWFTb3VyY2VBVkZPYmpDOjpzZWVrSW50ZXJuYWwoKQogICAgIGVs
c2UKICAgICAgICAgc2Vla1RpbWUgPSBtX21lZGlhU291cmNlUHJpdmF0ZS0+ZmFzdFNlZWtUaW1l
Rm9yTWVkaWFUaW1lKHBlbmRpbmdTZWVrLT50YXJnZXRUaW1lLCBwZW5kaW5nU2Vlay0+cG9zaXRp
dmVUaHJlc2hvbGQsIHBlbmRpbmdTZWVrLT5uZWdhdGl2ZVRocmVzaG9sZCk7CiAKKyAgICBMT0co
TWVkaWFTb3VyY2UsICJNZWRpYVBsYXllclByaXZhdGVNZWRpYVNvdXJjZUFWRk9iakM6OnNlZWtJ
bnRlcm5hbCglcCkgLSBzZWVrVGltZSglcykiLCB0aGlzLCB0b1N0cmluZyhzZWVrVGltZSkudXRm
OCgpLmRhdGEoKSk7CisKICAgICBbbV9zeW5jaHJvbml6ZXIgc2V0UmF0ZTowIHRpbWU6dG9DTVRp
bWUoc2Vla1RpbWUpXTsKICAgICBtX21lZGlhU291cmNlUHJpdmF0ZS0+c2Vla1RvVGltZShzZWVr
VGltZSk7CiB9CiAKK3ZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFTb3VyY2VBVkZPYmpDOjp3
YWl0Rm9yU2Vla0NvbXBsZXRlZCgpCit7CisgICAgaWYgKCFtX3NlZWtpbmcpCisgICAgICAgIHJl
dHVybjsKKyAgICBMT0coTWVkaWFTb3VyY2UsICJNZWRpYVBsYXllclByaXZhdGVNZWRpYVNvdXJj
ZUFWRk9iakM6OndhaXRGb3JTZWVrQ29tcGxldGVkKCVwKSIsIHRoaXMpOworICAgIG1fc2Vla0Nv
bXBsZXRlZCA9IGZhbHNlOworfQorCit2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZU1lZGlhU291cmNl
QVZGT2JqQzo6c2Vla0NvbXBsZXRlZCgpCit7CisgICAgaWYgKG1fc2Vla0NvbXBsZXRlZCkKKyAg
ICAgICAgcmV0dXJuOworICAgIExPRyhNZWRpYVNvdXJjZSwgIk1lZGlhUGxheWVyUHJpdmF0ZU1l
ZGlhU291cmNlQVZGT2JqQzo6c2Vla0NvbXBsZXRlZCglcCkiLCB0aGlzKTsKKyAgICBtX3NlZWtD
b21wbGV0ZWQgPSB0cnVlOworICAgIGlmICghbV9zZWVraW5nKQorICAgICAgICBtX3BsYXllci0+
dGltZUNoYW5nZWQoKTsKK30KKwogYm9vbCBNZWRpYVBsYXllclByaXZhdGVNZWRpYVNvdXJjZUFW
Rk9iakM6OnNlZWtpbmcoKSBjb25zdAogewogICAgIHJldHVybiBtX3NlZWtpbmcgJiYgIW1fc2Vl
a0NvbXBsZXRlZDsKQEAgLTUwMyw3ICs1MzIsNyBAQCBkb3VibGUgTWVkaWFQbGF5ZXJQcml2YXRl
TWVkaWFTb3VyY2VBVkZPYmpDOjptaW5UaW1lU2Vla2FibGUoKSBjb25zdAogCiBzdGQ6OnVuaXF1
ZV9wdHI8UGxhdGZvcm1UaW1lUmFuZ2VzPiBNZWRpYVBsYXllclByaXZhdGVNZWRpYVNvdXJjZUFW
Rk9iakM6OmJ1ZmZlcmVkKCkgY29uc3QKIHsKLSAgICByZXR1cm4gbV9tZWRpYVNvdXJjZSA/IG1f
bWVkaWFTb3VyY2UtPmJ1ZmZlcmVkKCkgOiBQbGF0Zm9ybVRpbWVSYW5nZXM6OmNyZWF0ZSgpOwor
ICAgIHJldHVybiBtX21lZGlhU291cmNlUHJpdmF0ZSA/IG1fbWVkaWFTb3VyY2VQcml2YXRlLT5i
dWZmZXJlZCgpIDogUGxhdGZvcm1UaW1lUmFuZ2VzOjpjcmVhdGUoKTsKIH0KIAogYm9vbCBNZWRp
YVBsYXllclByaXZhdGVNZWRpYVNvdXJjZUFWRk9iakM6OmRpZExvYWRpbmdQcm9ncmVzcygpIGNv
bnN0CkBAIC02MzYsOCArNjY1LDEwIEBAIHZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFTb3Vy
Y2VBVkZPYmpDOjpkdXJhdGlvbkNoYW5nZWQoKQogICAgIGF1dG8gd2Vha1RoaXMgPSBjcmVhdGVX
ZWFrUHRyKCk7CiAgICAgTlNBcnJheSogdGltZXMgPSBAW1tOU1ZhbHVlIHZhbHVlV2l0aENNVGlt
ZTp0b0NNVGltZShkdXJhdGlvbildXTsKICAgICBtX2R1cmF0aW9uT2JzZXJ2ZXIgPSBbbV9zeW5j
aHJvbml6ZXIgYWRkQm91bmRhcnlUaW1lT2JzZXJ2ZXJGb3JUaW1lczp0aW1lcyBxdWV1ZTpkaXNw
YXRjaF9nZXRfbWFpbl9xdWV1ZSgpIHVzaW5nQmxvY2s6W3dlYWtUaGlzXSB7Ci0gICAgICAgIGlm
ICh3ZWFrVGhpcykKKyAgICAgICAgaWYgKHdlYWtUaGlzKSB7CiAgICAgICAgICAgICB3ZWFrVGhp
cy0+cGF1c2VJbnRlcm5hbCgpOworICAgICAgICAgICAgd2Vha1RoaXMtPm1fcGxheWVyLT50aW1l
Q2hhbmdlZCgpOworICAgICAgICB9CiAgICAgfV07CiAKICAgICBpZiAobV9wbGF5aW5nICYmIGR1
cmF0aW9uIDw9IGN1cnJlbnRNZWRpYVRpbWUoKSkKQEAgLTY3NiwxMSArNzA3LDYgQEAgdm9pZCBN
ZWRpYVBsYXllclByaXZhdGVNZWRpYVNvdXJjZUFWRk9iakM6OnNldFJlYWR5U3RhdGUoTWVkaWFQ
bGF5ZXI6OlJlYWR5U3RhdGUKIAogICAgIG1fcmVhZHlTdGF0ZSA9IHJlYWR5U3RhdGU7CiAKLSAg
ICBpZiAoIW1fc2Vla0NvbXBsZXRlZCAmJiBtX3JlYWR5U3RhdGUgPj0gTWVkaWFQbGF5ZXI6Okhh
dmVDdXJyZW50RGF0YSkgewotICAgICAgICBtX3NlZWtDb21wbGV0ZWQgPSB0cnVlOwotICAgICAg
ICBtX3BsYXllci0+dGltZUNoYW5nZWQoKTsKLSAgICB9Ci0KICAgICBpZiAoc2hvdWxkQmVQbGF5
aW5nKCkpCiAgICAgICAgIFttX3N5bmNocm9uaXplciBzZXRSYXRlOm1fcmF0ZV07CiAgICAgZWxz
ZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0
aW9uL29iamMvTWVkaWFTb3VyY2VQcml2YXRlQVZGT2JqQy5oIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL29iamMvTWVkaWFTb3VyY2VQcml2YXRlQVZGT2Jq
Qy5oCmluZGV4IDJhODExZTliNjdjZTgzMjdjMzE3ZGVmMGRlNTQ3MGJlOTk4YmQ3YzYuLmNiZDFk
NGU5MmEzYjU0Y2M3MzY2MzU3Nzc1ZGVkYTkxMzI4NDlkYTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9vYmpjL01lZGlhU291cmNlUHJp
dmF0ZUFWRk9iakMuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9hdmZv
dW5kYXRpb24vb2JqYy9NZWRpYVNvdXJjZVByaXZhdGVBVkZPYmpDLmgKQEAgLTQ1LDMwICs0NSwz
NSBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIENETVNlc3Npb247CiBjbGFzcyBNZWRp
YVBsYXllclByaXZhdGVNZWRpYVNvdXJjZUFWRk9iakM7CitjbGFzcyBNZWRpYVNvdXJjZVByaXZh
dGVDbGllbnQ7CiBjbGFzcyBTb3VyY2VCdWZmZXJQcml2YXRlQVZGT2JqQzsKIGNsYXNzIFRpbWVS
YW5nZXM7CiAKIGNsYXNzIE1lZGlhU291cmNlUHJpdmF0ZUFWRk9iakMgZmluYWwgOiBwdWJsaWMg
TWVkaWFTb3VyY2VQcml2YXRlIHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgUmVmUHRyPE1lZGlhU291
cmNlUHJpdmF0ZUFWRk9iakM+IGNyZWF0ZShNZWRpYVBsYXllclByaXZhdGVNZWRpYVNvdXJjZUFW
Rk9iakMqKTsKKyAgICBzdGF0aWMgUmVmUHRyPE1lZGlhU291cmNlUHJpdmF0ZUFWRk9iakM+IGNy
ZWF0ZShNZWRpYVBsYXllclByaXZhdGVNZWRpYVNvdXJjZUFWRk9iakMqLCBNZWRpYVNvdXJjZVBy
aXZhdGVDbGllbnQqKTsKICAgICB2aXJ0dWFsIH5NZWRpYVNvdXJjZVByaXZhdGVBVkZPYmpDKCk7
CiAKICAgICBNZWRpYVBsYXllclByaXZhdGVNZWRpYVNvdXJjZUFWRk9iakMqIHBsYXllcigpIGNv
bnN0IHsgcmV0dXJuIG1fcGxheWVyOyB9CiAgICAgY29uc3QgVmVjdG9yPFNvdXJjZUJ1ZmZlclBy
aXZhdGVBVkZPYmpDKj4mIGFjdGl2ZVNvdXJjZUJ1ZmZlcnMoKSBjb25zdCB7IHJldHVybiBtX2Fj
dGl2ZVNvdXJjZUJ1ZmZlcnM7IH0KIAogICAgIHZpcnR1YWwgQWRkU3RhdHVzIGFkZFNvdXJjZUJ1
ZmZlcihjb25zdCBDb250ZW50VHlwZSYsIFJlZlB0cjxTb3VyY2VCdWZmZXJQcml2YXRlPiYpIG92
ZXJyaWRlOwotICAgIHZpcnR1YWwgTWVkaWFUaW1lIGR1cmF0aW9uKCkgb3ZlcnJpZGU7Ci0gICAg
dmlydHVhbCB2b2lkIHNldER1cmF0aW9uKGNvbnN0IE1lZGlhVGltZSYpIG92ZXJyaWRlOworICAg
IHZpcnR1YWwgdm9pZCBkdXJhdGlvbkNoYW5nZWQoKSBvdmVycmlkZTsKICAgICB2aXJ0dWFsIHZv
aWQgbWFya0VuZE9mU3RyZWFtKEVuZE9mU3RyZWFtU3RhdHVzKSBvdmVycmlkZTsKICAgICB2aXJ0
dWFsIHZvaWQgdW5tYXJrRW5kT2ZTdHJlYW0oKSBvdmVycmlkZTsKICAgICB2aXJ0dWFsIE1lZGlh
UGxheWVyOjpSZWFkeVN0YXRlIHJlYWR5U3RhdGUoKSBjb25zdCBvdmVycmlkZTsKICAgICB2aXJ0
dWFsIHZvaWQgc2V0UmVhZHlTdGF0ZShNZWRpYVBsYXllcjo6UmVhZHlTdGF0ZSkgb3ZlcnJpZGU7
CisgICAgdmlydHVhbCB2b2lkIHdhaXRGb3JTZWVrQ29tcGxldGVkKCkgb3ZlcnJpZGU7CisgICAg
dmlydHVhbCB2b2lkIHNlZWtDb21wbGV0ZWQoKSBvdmVycmlkZTsKKworICAgIE1lZGlhVGltZSBk
dXJhdGlvbigpOworICAgIHN0ZDo6dW5pcXVlX3B0cjxQbGF0Zm9ybVRpbWVSYW5nZXM+IGJ1ZmZl
cmVkKCk7CiAKICAgICBib29sIGhhc0F1ZGlvKCkgY29uc3Q7CiAgICAgYm9vbCBoYXNWaWRlbygp
IGNvbnN0OwogCi0gICAgdm9pZCBzZWVrVG9UaW1lKE1lZGlhVGltZSk7Ci0gICAgTWVkaWFUaW1l
IGZhc3RTZWVrVGltZUZvck1lZGlhVGltZShNZWRpYVRpbWUsIE1lZGlhVGltZSBuZWdhdGl2ZVRo
cmVzaG9sZCwgTWVkaWFUaW1lIHBvc2l0aXZlVGhyZXNob2xkKTsKKyAgICB2b2lkIHNlZWtUb1Rp
bWUoY29uc3QgTWVkaWFUaW1lJik7CisgICAgTWVkaWFUaW1lIGZhc3RTZWVrVGltZUZvck1lZGlh
VGltZShjb25zdCBNZWRpYVRpbWUmLCBjb25zdCBNZWRpYVRpbWUmIG5lZ2F0aXZlVGhyZXNob2xk
LCBjb25zdCBNZWRpYVRpbWUmIHBvc2l0aXZlVGhyZXNob2xkKTsKICAgICBJbnRTaXplIG5hdHVy
YWxTaXplKCkgY29uc3Q7CiAKICNpZiBFTkFCTEUoRU5DUllQVEVEX01FRElBX1YyKQpAQCAtNzYs
NyArODEsNyBAQCBwdWJsaWM6CiAjZW5kaWYKIAogcHJpdmF0ZToKLSAgICBNZWRpYVNvdXJjZVBy
aXZhdGVBVkZPYmpDKE1lZGlhUGxheWVyUHJpdmF0ZU1lZGlhU291cmNlQVZGT2JqQyopOworICAg
IE1lZGlhU291cmNlUHJpdmF0ZUFWRk9iakMoTWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFTb3VyY2VB
VkZPYmpDKiwgTWVkaWFTb3VyY2VQcml2YXRlQ2xpZW50Kik7CiAKICAgICB2b2lkIHNvdXJjZUJ1
ZmZlclByaXZhdGVEaWRDaGFuZ2VBY3RpdmVTdGF0ZShTb3VyY2VCdWZmZXJQcml2YXRlQVZGT2Jq
QyosIGJvb2wgYWN0aXZlKTsKICAgICB2b2lkIHNvdXJjZUJ1ZmZlclByaXZhdGVEaWRSZWNlaXZl
SW5pdGlhbGl6YXRpb25TZWdtZW50KFNvdXJjZUJ1ZmZlclByaXZhdGVBVkZPYmpDKik7CkBAIC04
OSw3ICs5NCw3IEBAIHByaXZhdGU6CiAgICAgZnJpZW5kIGNsYXNzIFNvdXJjZUJ1ZmZlclByaXZh
dGVBVkZPYmpDOwogCiAgICAgTWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFTb3VyY2VBVkZPYmpDKiBt
X3BsYXllcjsKLSAgICBNZWRpYVRpbWUgbV9kdXJhdGlvbjsKKyAgICBSZWZQdHI8TWVkaWFTb3Vy
Y2VQcml2YXRlQ2xpZW50PiBtX2NsaWVudDsKICAgICBWZWN0b3I8UmVmUHRyPFNvdXJjZUJ1ZmZl
clByaXZhdGVBVkZPYmpDPj4gbV9zb3VyY2VCdWZmZXJzOwogICAgIFZlY3RvcjxTb3VyY2VCdWZm
ZXJQcml2YXRlQVZGT2JqQyo+IG1fYWN0aXZlU291cmNlQnVmZmVyczsKICAgICBEZXF1ZTxTb3Vy
Y2VCdWZmZXJQcml2YXRlQVZGT2JqQyo+IG1fc291cmNlQnVmZmVyc05lZWRpbmdTZXNzaW9uczsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlv
bi9vYmpjL01lZGlhU291cmNlUHJpdmF0ZUFWRk9iakMubW0gYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9hdmZvdW5kYXRpb24vb2JqYy9NZWRpYVNvdXJjZVByaXZhdGVBVkZPYmpD
Lm1tCmluZGV4IDFmYWYxOTdkMDQyM2JlYTNkZDBhYWI5ODI5MzM5YzFjYWZhMDFhMGYuLmYyYTRi
MzRmMzA0NzI2ZGRkZTNhZWMyY2ZjMDM1MGJhNDJlOWU1NDUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9vYmpjL01lZGlhU291cmNlUHJp
dmF0ZUFWRk9iakMubW0KKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYXZm
b3VuZGF0aW9uL29iamMvTWVkaWFTb3VyY2VQcml2YXRlQVZGT2JqQy5tbQpAQCAtMzIsNiArMzIs
NyBAQAogI2ltcG9ydCAiQ29udGVudFR5cGUuaCIKICNpbXBvcnQgIkV4Y2VwdGlvbkNvZGVQbGFj
ZWhvbGRlci5oIgogI2ltcG9ydCAiTWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFTb3VyY2VBVkZPYmpD
LmgiCisjaW1wb3J0ICJNZWRpYVNvdXJjZVByaXZhdGVDbGllbnQuaCIKICNpbXBvcnQgIlNvdXJj
ZUJ1ZmZlclByaXZhdGVBVkZPYmpDLmgiCiAjaW1wb3J0ICJTb2Z0TGlua2luZy5oIgogI2ltcG9y
dCA8b2JqYy9ydW50aW1lLmg+CkBAIC00MywxNCArNDQsMTYgQEAgbmFtZXNwYWNlIFdlYkNvcmUg
ewogI3ByYWdtYSBtYXJrIC0KICNwcmFnbWEgbWFyayBNZWRpYVNvdXJjZVByaXZhdGVBVkZPYmpD
CiAKLVJlZlB0cjxNZWRpYVNvdXJjZVByaXZhdGVBVkZPYmpDPiBNZWRpYVNvdXJjZVByaXZhdGVB
VkZPYmpDOjpjcmVhdGUoTWVkaWFQbGF5ZXJQcml2YXRlTWVkaWFTb3VyY2VBVkZPYmpDKiBwYXJl
bnQpCitSZWZQdHI8TWVkaWFTb3VyY2VQcml2YXRlQVZGT2JqQz4gTWVkaWFTb3VyY2VQcml2YXRl
QVZGT2JqQzo6Y3JlYXRlKE1lZGlhUGxheWVyUHJpdmF0ZU1lZGlhU291cmNlQVZGT2JqQyogcGFy
ZW50LCBNZWRpYVNvdXJjZVByaXZhdGVDbGllbnQqIGNsaWVudCkKIHsKLSAgICByZXR1cm4gYWRv
cHRSZWYobmV3IE1lZGlhU291cmNlUHJpdmF0ZUFWRk9iakMocGFyZW50KSk7CisgICAgUmVmUHRy
PE1lZGlhU291cmNlUHJpdmF0ZUFWRk9iakM+IG1lZGlhU291cmNlUHJpdmF0ZSA9IGFkb3B0UmVm
KG5ldyBNZWRpYVNvdXJjZVByaXZhdGVBVkZPYmpDKHBhcmVudCwgY2xpZW50KSk7CisgICAgY2xp
ZW50LT5zZXRQcml2YXRlQW5kT3BlbigqbWVkaWFTb3VyY2VQcml2YXRlKTsKKyAgICByZXR1cm4g
bWVkaWFTb3VyY2VQcml2YXRlOwogfQogCi1NZWRpYVNvdXJjZVByaXZhdGVBVkZPYmpDOjpNZWRp
YVNvdXJjZVByaXZhdGVBVkZPYmpDKE1lZGlhUGxheWVyUHJpdmF0ZU1lZGlhU291cmNlQVZGT2Jq
QyogcGFyZW50KQorTWVkaWFTb3VyY2VQcml2YXRlQVZGT2JqQzo6TWVkaWFTb3VyY2VQcml2YXRl
QVZGT2JqQyhNZWRpYVBsYXllclByaXZhdGVNZWRpYVNvdXJjZUFWRk9iakMqIHBhcmVudCwgTWVk
aWFTb3VyY2VQcml2YXRlQ2xpZW50KiBjbGllbnQpCiAgICAgOiBtX3BsYXllcihwYXJlbnQpCi0g
ICAgLCBtX2R1cmF0aW9uKE1lZGlhVGltZTo6aW52YWxpZFRpbWUoKSkKKyAgICAsIG1fY2xpZW50
KGNsaWVudCkKICAgICAsIG1faXNFbmRlZChmYWxzZSkKIHsKIH0KQEAgLTkxLDE1ICs5NCwxNiBA
QCB2b2lkIE1lZGlhU291cmNlUHJpdmF0ZUFWRk9iakM6OnJlbW92ZVNvdXJjZUJ1ZmZlcihTb3Vy
Y2VCdWZmZXJQcml2YXRlKiBidWZmZXIpCiAKIE1lZGlhVGltZSBNZWRpYVNvdXJjZVByaXZhdGVB
VkZPYmpDOjpkdXJhdGlvbigpCiB7Ci0gICAgcmV0dXJuIG1fZHVyYXRpb247CisgICAgcmV0dXJu
IE1lZGlhVGltZTo6Y3JlYXRlV2l0aERvdWJsZShtX2NsaWVudC0+ZHVyYXRpb24oKSk7CiB9CiAK
LXZvaWQgTWVkaWFTb3VyY2VQcml2YXRlQVZGT2JqQzo6c2V0RHVyYXRpb24oY29uc3QgTWVkaWFU
aW1lJiBkdXJhdGlvbikKK3N0ZDo6dW5pcXVlX3B0cjxQbGF0Zm9ybVRpbWVSYW5nZXM+IE1lZGlh
U291cmNlUHJpdmF0ZUFWRk9iakM6OmJ1ZmZlcmVkKCkKIHsKLSAgICBpZiAoZHVyYXRpb24gPT0g
bV9kdXJhdGlvbikKLSAgICAgICAgcmV0dXJuOworICAgIHJldHVybiBtX2NsaWVudC0+YnVmZmVy
ZWQoKTsKK30KIAotICAgIG1fZHVyYXRpb24gPSBkdXJhdGlvbjsKK3ZvaWQgTWVkaWFTb3VyY2VQ
cml2YXRlQVZGT2JqQzo6ZHVyYXRpb25DaGFuZ2VkKCkKK3sKICAgICBtX3BsYXllci0+ZHVyYXRp
b25DaGFuZ2VkKCk7CiB9CiAKQEAgLTEyNiw2ICsxMzAsMTYgQEAgdm9pZCBNZWRpYVNvdXJjZVBy
aXZhdGVBVkZPYmpDOjpzZXRSZWFkeVN0YXRlKE1lZGlhUGxheWVyOjpSZWFkeVN0YXRlIHJlYWR5
U3RhdGUKICAgICBtX3BsYXllci0+c2V0UmVhZHlTdGF0ZShyZWFkeVN0YXRlKTsKIH0KIAordm9p
ZCBNZWRpYVNvdXJjZVByaXZhdGVBVkZPYmpDOjp3YWl0Rm9yU2Vla0NvbXBsZXRlZCgpCit7Cisg
ICAgbV9wbGF5ZXItPndhaXRGb3JTZWVrQ29tcGxldGVkKCk7Cit9CisKK3ZvaWQgTWVkaWFTb3Vy
Y2VQcml2YXRlQVZGT2JqQzo6c2Vla0NvbXBsZXRlZCgpCit7CisgICAgbV9wbGF5ZXItPnNlZWtD
b21wbGV0ZWQoKTsKK30KKwogdm9pZCBNZWRpYVNvdXJjZVByaXZhdGVBVkZPYmpDOjpzb3VyY2VC
dWZmZXJQcml2YXRlRGlkQ2hhbmdlQWN0aXZlU3RhdGUoU291cmNlQnVmZmVyUHJpdmF0ZUFWRk9i
akMqIGJ1ZmZlciwgYm9vbCBhY3RpdmUpCiB7CiAgICAgaWYgKGFjdGl2ZSAmJiAhbV9hY3RpdmVT
b3VyY2VCdWZmZXJzLmNvbnRhaW5zKGJ1ZmZlcikpCkBAIC0xNzgsMTMgKzE5MiwxMiBAQCBib29s
IE1lZGlhU291cmNlUHJpdmF0ZUFWRk9iakM6Omhhc1ZpZGVvKCkgY29uc3QKICAgICByZXR1cm4g
c3RkOjphbnlfb2YobV9hY3RpdmVTb3VyY2VCdWZmZXJzLmJlZ2luKCksIG1fYWN0aXZlU291cmNl
QnVmZmVycy5lbmQoKSwgTWVkaWFTb3VyY2VQcml2YXRlQVZGT2JqQ0hhc1ZpZGVvKTsKIH0KIAot
dm9pZCBNZWRpYVNvdXJjZVByaXZhdGVBVkZPYmpDOjpzZWVrVG9UaW1lKE1lZGlhVGltZSB0aW1l
KQordm9pZCBNZWRpYVNvdXJjZVByaXZhdGVBVkZPYmpDOjpzZWVrVG9UaW1lKGNvbnN0IE1lZGlh
VGltZSYgdGltZSkKIHsKLSAgICBmb3IgKGF1dG8mIGJ1ZmZlciA6IG1fYWN0aXZlU291cmNlQnVm
ZmVycykKLSAgICAgICAgYnVmZmVyLT5zZWVrVG9UaW1lKHRpbWUpOworICAgIG1fY2xpZW50LT5z
ZWVrVG9UaW1lKHRpbWUpOwogfQogCi1NZWRpYVRpbWUgTWVkaWFTb3VyY2VQcml2YXRlQVZGT2Jq
Qzo6ZmFzdFNlZWtUaW1lRm9yTWVkaWFUaW1lKE1lZGlhVGltZSB0YXJnZXRUaW1lLCBNZWRpYVRp
bWUgbmVnYXRpdmVUaHJlc2hvbGQsIE1lZGlhVGltZSBwb3NpdGl2ZVRocmVzaG9sZCkKK01lZGlh
VGltZSBNZWRpYVNvdXJjZVByaXZhdGVBVkZPYmpDOjpmYXN0U2Vla1RpbWVGb3JNZWRpYVRpbWUo
Y29uc3QgTWVkaWFUaW1lJiB0YXJnZXRUaW1lLCBjb25zdCBNZWRpYVRpbWUmIG5lZ2F0aXZlVGhy
ZXNob2xkLCBjb25zdCBNZWRpYVRpbWUmIHBvc2l0aXZlVGhyZXNob2xkKQogewogICAgIE1lZGlh
VGltZSBzZWVrVGltZSA9IHRhcmdldFRpbWU7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2F2Zm91bmRhdGlvbi9vYmpjL1NvdXJjZUJ1ZmZlclByaXZhdGVB
VkZPYmpDLm1tIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9u
L29iamMvU291cmNlQnVmZmVyUHJpdmF0ZUFWRk9iakMubW0KaW5kZXggOTJlMjcwZGI2NDQ0NGUw
ZDBhNGRhZmIzMmNjY2E2MDIwYmVjOTliNC4uYmUyYTNjYTlhOTAyMDU5OTIwNzMzYTQ1MTQxZGY2
YWE4OWUyMTZjOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
YXZmb3VuZGF0aW9uL29iamMvU291cmNlQnVmZmVyUHJpdmF0ZUFWRk9iakMubW0KKysrIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvYXZmb3VuZGF0aW9uL29iamMvU291cmNlQnVm
ZmVyUHJpdmF0ZUFWRk9iakMubW0KQEAgLTEyMiw2ICsxMjIsNyBAQCBTT0ZUX0xJTksoQ29yZU1l
ZGlhLCBDTVZpZGVvRm9ybWF0RGVzY3JpcHRpb25HZXRQcmVzZW50YXRpb25EaW1lbnNpb25zLCBD
R1NpemUsCiAtICh2b2lkKWFwcGVuZFN0cmVhbURhdGE6KE5TRGF0YSAqKWRhdGE7CiAtICh2b2lk
KXNldFNob3VsZFByb3ZpZGVNZWRpYURhdGE6KEJPT0wpc2hvdWxkUHJvdmlkZU1lZGlhRGF0YSBm
b3JUcmFja0lEOihDTVBlcnNpc3RlbnRUcmFja0lEKXRyYWNrSUQ7CiAtIChCT09MKXNob3VsZFBy
b3ZpZGVNZWRpYURhdGFGb3JUcmFja0lEOihDTVBlcnNpc3RlbnRUcmFja0lEKXRyYWNrSUQ7Cist
ICh2b2lkKXByb3ZpZGVQZW5kaW5nTWVkaWFEYXRhOwogLSAodm9pZClwcm9jZXNzQ29udGVudEtl
eVJlc3BvbnNlRGF0YTooTlNEYXRhICopY29udGVudEtleVJlc3BvbnNlRGF0YSBmb3JUcmFja0lE
OihDTVBlcnNpc3RlbnRUcmFja0lEKXRyYWNrSUQ7CiAtICh2b2lkKXByb2Nlc3NDb250ZW50S2V5
UmVzcG9uc2VFcnJvcjooTlNFcnJvciAqKWVycm9yIGZvclRyYWNrSUQ6KENNUGVyc2lzdGVudFRy
YWNrSUQpdHJhY2tJRDsKIC0gKHZvaWQpcmVuZXdFeHBpcmluZ0NvbnRlbnRLZXlSZXNwb25zZURh
dGFGb3JUcmFja0lEOihDTVBlcnNpc3RlbnRUcmFja0lEKXRyYWNrSUQ7CkBAIC02ODIsNyArNjgz
LDcgQEAgc3RhdGljIGRpc3BhdGNoX3F1ZXVlX3QgZ2xvYmFsRGF0YVBhcnNlclF1ZXVlKCkKICAg
ICBzdGF0aWMgZGlzcGF0Y2hfcXVldWVfdCBnbG9iYWxRdWV1ZTsKICAgICBzdGF0aWMgZGlzcGF0
Y2hfb25jZV90IG9uY2VUb2tlbjsKICAgICBkaXNwYXRjaF9vbmNlKCZvbmNlVG9rZW4sIF57Ci0g
ICAgICAgIGdsb2JhbFF1ZXVlID0gZGlzcGF0Y2hfcXVldWVfY3JlYXRlKCJTb3VyY2VCdWZmZXJQ
cml2YXRlQVZGT2JqQyBkYXRhIHBhcnNlciBxdWV1ZSIsIERJU1BBVENIX1FVRVVFX1NFUklBTCk7
CisgICAgICAgIGdsb2JhbFF1ZXVlID0gZGlzcGF0Y2hfcXVldWVfY3JlYXRlKCJTb3VyY2VCdWZm
ZXJQcml2YXRlQVZGT2JqQyBkYXRhIHBhcnNlciBxdWV1ZSIsIERJU1BBVENIX1FVRVVFX0NPTkNV
UlJFTlQpOwogICAgIH0pOwogICAgIHJldHVybiBnbG9iYWxRdWV1ZTsKIH0KZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9NZWRpYVNvdXJjZUdT
dHJlYW1lci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIv
TWVkaWFTb3VyY2VHU3RyZWFtZXIuY3BwCmluZGV4IGM0YmJhODQzNDI0MTczYmU4YTg2NTcyYTdk
YWJjODkzN2I3MjZlZGYuLmQzNmZiNjBiOGI5MDY5NDViNGQwNmM5Y2RkMTA0OWJhMzIxNDhkMDgg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9N
ZWRpYVNvdXJjZUdTdHJlYW1lci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvZ3N0cmVhbWVyL01lZGlhU291cmNlR1N0cmVhbWVyLmNwcApAQCAtNDIsMTMgKzQyLDE2
IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogdm9pZCBNZWRpYVNvdXJjZUdTdHJlYW1lcjo6b3Bl
bihNZWRpYVNvdXJjZVByaXZhdGVDbGllbnQqIG1lZGlhU291cmNlLCBXZWJLaXRNZWRpYVNyYyog
c3JjKQogewotICAgIG1lZGlhU291cmNlLT5zZXRQcml2YXRlQW5kT3BlbihhZG9wdFJlZigqbmV3
IE1lZGlhU291cmNlR1N0cmVhbWVyKHNyYykpKTsKKyAgICBBU1NFUlQobWVkaWFTb3VyY2UpOwor
ICAgIG1lZGlhU291cmNlLT5zZXRQcml2YXRlQW5kT3BlbihhZG9wdFJlZigqbmV3IE1lZGlhU291
cmNlR1N0cmVhbWVyKG1lZGlhU291cmNlLCBzcmMpKSk7CiB9CiAKLU1lZGlhU291cmNlR1N0cmVh
bWVyOjpNZWRpYVNvdXJjZUdTdHJlYW1lcihXZWJLaXRNZWRpYVNyYyogc3JjKQorTWVkaWFTb3Vy
Y2VHU3RyZWFtZXI6Ok1lZGlhU291cmNlR1N0cmVhbWVyKE1lZGlhU291cmNlUHJpdmF0ZUNsaWVu
dCogbWVkaWFTb3VyY2UsIFdlYktpdE1lZGlhU3JjKiBzcmMpCiAgICAgOiBtX2NsaWVudChhZG9w
dFJlZihuZXcgTWVkaWFTb3VyY2VDbGllbnRHc3RyZWFtZXIoc3JjKSkpCisgICAgLCBtX21lZGlh
U291cmNlKG1lZGlhU291cmNlKQogICAgICwgbV9yZWFkeVN0YXRlKE1lZGlhUGxheWVyOjpIYXZl
Tm90aGluZykKIHsKKyAgICBBU1NFUlQobV9jbGllbnQpOwogfQogCiBNZWRpYVNvdXJjZUdTdHJl
YW1lcjo6fk1lZGlhU291cmNlR1N0cmVhbWVyKCkKQEAgLTYxLDIyICs2NCwxOCBAQCBNZWRpYVNv
dXJjZUdTdHJlYW1lcjo6QWRkU3RhdHVzIE1lZGlhU291cmNlR1N0cmVhbWVyOjphZGRTb3VyY2VC
dWZmZXIoY29uc3QgQ29udAogICAgIHJldHVybiBNZWRpYVNvdXJjZUdTdHJlYW1lcjo6T2s7CiB9
CiAKLXZvaWQgTWVkaWFTb3VyY2VHU3RyZWFtZXI6OnNldER1cmF0aW9uKGNvbnN0IE1lZGlhVGlt
ZSYgZHVyYXRpb24pCit2b2lkIE1lZGlhU291cmNlR1N0cmVhbWVyOjpkdXJhdGlvbkNoYW5nZWQo
KQogewotICAgIEFTU0VSVChtX2NsaWVudCk7Ci0gICAgbV9kdXJhdGlvbiA9IGR1cmF0aW9uOwot
ICAgIG1fY2xpZW50LT5kaWRSZWNlaXZlRHVyYXRpb24oZHVyYXRpb24udG9Eb3VibGUoKSk7Cisg
ICAgbV9jbGllbnQtPmRpZFJlY2VpdmVEdXJhdGlvbihtX21lZGlhU291cmNlLT5kdXJhdGlvbigp
KTsKIH0KIAogdm9pZCBNZWRpYVNvdXJjZUdTdHJlYW1lcjo6bWFya0VuZE9mU3RyZWFtKEVuZE9m
U3RyZWFtU3RhdHVzKQogewotICAgIEFTU0VSVChtX2NsaWVudCk7CiAgICAgbV9jbGllbnQtPmRp
ZEZpbmlzaExvYWRpbmcoMCk7CiB9CiAKIHZvaWQgTWVkaWFTb3VyY2VHU3RyZWFtZXI6OnVubWFy
a0VuZE9mU3RyZWFtKCkKIHsKLSAgICBBU1NFUlQobV9jbGllbnQpOwogfQogCiB9CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvTWVkaWFTb3Vy
Y2VHU3RyZWFtZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1l
ci9NZWRpYVNvdXJjZUdTdHJlYW1lci5oCmluZGV4IDI3NDZhMTZkODU2NDcwMTNhY2M0ZTg2Zjg4
YmFmOWJkMDkzYzlmYmIuLmFhY2E0NWUxODg0NjA2MDBhY2NhMzBlMDQ0MjdjN2M0MThjNzcyOTMg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9N
ZWRpYVNvdXJjZUdTdHJlYW1lci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2dzdHJlYW1lci9NZWRpYVNvdXJjZUdTdHJlYW1lci5oCkBAIC00MiwxOCArNDIsMjEgQEAg
Y2xhc3MgTWVkaWFTb3VyY2VHU3RyZWFtZXIgZmluYWwgOiBwdWJsaWMgTWVkaWFTb3VyY2VQcml2
YXRlIHsKIHB1YmxpYzoKICAgICBzdGF0aWMgdm9pZCBvcGVuKE1lZGlhU291cmNlUHJpdmF0ZUNs
aWVudCosIFdlYktpdE1lZGlhU3JjKik7CiAgICAgfk1lZGlhU291cmNlR1N0cmVhbWVyKCk7Ci0g
ICAgQWRkU3RhdHVzIGFkZFNvdXJjZUJ1ZmZlcihjb25zdCBDb250ZW50VHlwZSYsIFJlZlB0cjxT
b3VyY2VCdWZmZXJQcml2YXRlPiYpOwotICAgIE1lZGlhVGltZSBkdXJhdGlvbigpIHsgcmV0dXJu
IG1fZHVyYXRpb247IH0KLSAgICB2b2lkIHNldER1cmF0aW9uKGNvbnN0IE1lZGlhVGltZSYpOwot
ICAgIHZvaWQgbWFya0VuZE9mU3RyZWFtKEVuZE9mU3RyZWFtU3RhdHVzKTsKLSAgICB2b2lkIHVu
bWFya0VuZE9mU3RyZWFtKCk7Ci0gICAgTWVkaWFQbGF5ZXI6OlJlYWR5U3RhdGUgcmVhZHlTdGF0
ZSgpIGNvbnN0IHsgcmV0dXJuIG1fcmVhZHlTdGF0ZTsgfQotICAgIHZvaWQgc2V0UmVhZHlTdGF0
ZShNZWRpYVBsYXllcjo6UmVhZHlTdGF0ZSByZWFkeVN0YXRlKSB7IG1fcmVhZHlTdGF0ZSA9IHJl
YWR5U3RhdGU7IH0KIAogcHJpdmF0ZToKKyAgICAvLyBNZWRpYVNvdXJjZVByaXZhdGUKKyAgICB2
aXJ0dWFsIEFkZFN0YXR1cyBhZGRTb3VyY2VCdWZmZXIoY29uc3QgQ29udGVudFR5cGUmLCBSZWZQ
dHI8U291cmNlQnVmZmVyUHJpdmF0ZT4mKSBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIHZvaWQgZHVy
YXRpb25DaGFuZ2VkKCkgb3ZlcnJpZGU7CisgICAgdmlydHVhbCB2b2lkIG1hcmtFbmRPZlN0cmVh
bShFbmRPZlN0cmVhbVN0YXR1cykgb3ZlcnJpZGU7CisgICAgdmlydHVhbCB2b2lkIHVubWFya0Vu
ZE9mU3RyZWFtKCkgb3ZlcnJpZGU7CisgICAgdmlydHVhbCBNZWRpYVBsYXllcjo6UmVhZHlTdGF0
ZSByZWFkeVN0YXRlKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gbV9yZWFkeVN0YXRlOyB9Cisg
ICAgdmlydHVhbCB2b2lkIHNldFJlYWR5U3RhdGUoTWVkaWFQbGF5ZXI6OlJlYWR5U3RhdGUgcmVh
ZHlTdGF0ZSkgb3ZlcnJpZGUgeyBtX3JlYWR5U3RhdGUgPSByZWFkeVN0YXRlOyB9CisgICAgdmly
dHVhbCB2b2lkIHdhaXRGb3JTZWVrQ29tcGxldGVkKCkgb3ZlcnJpZGUgeyB9CisgICAgdmlydHVh
bCB2b2lkIHNlZWtDb21wbGV0ZWQoKSBvdmVycmlkZSB7IH0KKwogICAgIFJlZlB0cjxNZWRpYVNv
dXJjZUNsaWVudEdzdHJlYW1lcj4gbV9jbGllbnQ7Ci0gICAgTWVkaWFTb3VyY2VHU3RyZWFtZXIo
V2ViS2l0TWVkaWFTcmMqKTsKLSAgICBNZWRpYVRpbWUgbV9kdXJhdGlvbjsKKyAgICBNZWRpYVNv
dXJjZVByaXZhdGVDbGllbnQqIG1fbWVkaWFTb3VyY2U7CisgICAgTWVkaWFTb3VyY2VHU3RyZWFt
ZXIoTWVkaWFTb3VyY2VQcml2YXRlQ2xpZW50KiwgV2ViS2l0TWVkaWFTcmMqKTsKICAgICBNZWRp
YVBsYXllcjo6UmVhZHlTdGF0ZSBtX3JlYWR5U3RhdGU7CiB9OwogCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9tb2NrL21lZGlhc291cmNlL01vY2tNZWRpYVBsYXllck1lZGlh
U291cmNlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21vY2svbWVkaWFzb3VyY2UvTW9j
a01lZGlhUGxheWVyTWVkaWFTb3VyY2UuY3BwCmluZGV4IGUzNzVmY2U2YjRiMmE5YTkxMjdhYmFi
Y2YyMjM0Njk3YmUyODNjN2IuLjZmNTFjMjQ4NjczZDQxMWY1OThkNWUyNmZhYmE0MjA4YjkyOTg4
NmYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21vY2svbWVkaWFzb3VyY2Uv
TW9ja01lZGlhUGxheWVyTWVkaWFTb3VyY2UuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL21vY2svbWVkaWFzb3VyY2UvTW9ja01lZGlhUGxheWVyTWVkaWFTb3VyY2UuY3BwCkBAIC04
NCwxMCArODQsMTAgQEAgTWVkaWFQbGF5ZXI6OlN1cHBvcnRzVHlwZSBNb2NrTWVkaWFQbGF5ZXJN
ZWRpYVNvdXJjZTo6c3VwcG9ydHNUeXBlKGNvbnN0IE1lZGlhRW4KIE1vY2tNZWRpYVBsYXllck1l
ZGlhU291cmNlOjpNb2NrTWVkaWFQbGF5ZXJNZWRpYVNvdXJjZShNZWRpYVBsYXllciogcGxheWVy
KQogICAgIDogbV9wbGF5ZXIocGxheWVyKQogICAgICwgbV9jdXJyZW50VGltZShNZWRpYVRpbWU6
Onplcm9UaW1lKCkpCi0gICAgLCBtX2R1cmF0aW9uKE1lZGlhVGltZTo6emVyb1RpbWUoKSkKICAg
ICAsIG1fcmVhZHlTdGF0ZShNZWRpYVBsYXllcjo6SGF2ZU5vdGhpbmcpCiAgICAgLCBtX25ldHdv
cmtTdGF0ZShNZWRpYVBsYXllcjo6RW1wdHkpCiAgICAgLCBtX3BsYXlpbmcoZmFsc2UpCisgICAg
LCBtX3NlZWtDb21wbGV0ZWQodHJ1ZSkKIHsKIH0KIApAQCAtMTAyLDkgKzEwMiw3IEBAIHZvaWQg
TW9ja01lZGlhUGxheWVyTWVkaWFTb3VyY2U6OmxvYWQoY29uc3QgU3RyaW5nJikKIAogdm9pZCBN
b2NrTWVkaWFQbGF5ZXJNZWRpYVNvdXJjZTo6bG9hZChjb25zdCBTdHJpbmcmLCBNZWRpYVNvdXJj
ZVByaXZhdGVDbGllbnQqIHNvdXJjZSkKIHsKLSAgICBtX21lZGlhU291cmNlID0gc291cmNlOwot
ICAgIG1fbWVkaWFTb3VyY2VQcml2YXRlID0gTW9ja01lZGlhU291cmNlUHJpdmF0ZTo6Y3JlYXRl
KHRoaXMpOwotICAgIG1fbWVkaWFTb3VyY2UtPnNldFByaXZhdGVBbmRPcGVuKCptX21lZGlhU291
cmNlUHJpdmF0ZSk7CisgICAgbV9tZWRpYVNvdXJjZVByaXZhdGUgPSBNb2NrTWVkaWFTb3VyY2VQ
cml2YXRlOjpjcmVhdGUodGhpcywgc291cmNlKTsKIH0KIAogdm9pZCBNb2NrTWVkaWFQbGF5ZXJN
ZWRpYVNvdXJjZTo6Y2FuY2VsTG9hZCgpCkBAIC0xNDMsNyArMTQxLDcgQEAgdm9pZCBNb2NrTWVk
aWFQbGF5ZXJNZWRpYVNvdXJjZTo6c2V0VmlzaWJsZShib29sKQogCiBib29sIE1vY2tNZWRpYVBs
YXllck1lZGlhU291cmNlOjpzZWVraW5nKCkgY29uc3QKIHsKLSAgICByZXR1cm4gZmFsc2U7Cisg
ICAgcmV0dXJuICFtX3NlZWtDb21wbGV0ZWQ7CiB9CiAKIGJvb2wgTW9ja01lZGlhUGxheWVyTWVk
aWFTb3VyY2U6OnBhdXNlZCgpIGNvbnN0CkBAIC0xNjgsOCArMTY2LDggQEAgZG91YmxlIE1vY2tN
ZWRpYVBsYXllck1lZGlhU291cmNlOjptYXhUaW1lU2Vla2FibGVEb3VibGUoKSBjb25zdAogCiBz
dGQ6OnVuaXF1ZV9wdHI8UGxhdGZvcm1UaW1lUmFuZ2VzPiBNb2NrTWVkaWFQbGF5ZXJNZWRpYVNv
dXJjZTo6YnVmZmVyZWQoKSBjb25zdAogewotICAgIGlmIChtX21lZGlhU291cmNlKQotICAgICAg
ICByZXR1cm4gbV9tZWRpYVNvdXJjZS0+YnVmZmVyZWQoKTsKKyAgICBpZiAobV9tZWRpYVNvdXJj
ZVByaXZhdGUpCisgICAgICAgIHJldHVybiBtX21lZGlhU291cmNlUHJpdmF0ZS0+YnVmZmVyZWQo
KTsKIAogICAgIHJldHVybiBQbGF0Zm9ybVRpbWVSYW5nZXM6OmNyZWF0ZSgpOwogfQpAQCAtMTk0
LDcgKzE5Miw3IEBAIGRvdWJsZSBNb2NrTWVkaWFQbGF5ZXJNZWRpYVNvdXJjZTo6Y3VycmVudFRp
bWVEb3VibGUoKSBjb25zdAogCiBkb3VibGUgTW9ja01lZGlhUGxheWVyTWVkaWFTb3VyY2U6OmR1
cmF0aW9uRG91YmxlKCkgY29uc3QKIHsKLSAgICByZXR1cm4gbV9kdXJhdGlvbi50b0RvdWJsZSgp
OworICAgIHJldHVybiBtX21lZGlhU291cmNlUHJpdmF0ZSA/IG1fbWVkaWFTb3VyY2VQcml2YXRl
LT5kdXJhdGlvbigpIDogMDsKIH0KIAogdm9pZCBNb2NrTWVkaWFQbGF5ZXJNZWRpYVNvdXJjZTo6
c2Vla1dpdGhUb2xlcmFuY2UoZG91YmxlIHRpbWUsIGRvdWJsZSBuZWdhdGl2ZVRvbGVyYW5jZSwg
ZG91YmxlIHBvc2l0aXZlVG9sZXJhbmNlKQpAQCAtMjA0LDE4ICsyMDIsMjEgQEAgdm9pZCBNb2Nr
TWVkaWFQbGF5ZXJNZWRpYVNvdXJjZTo6c2Vla1dpdGhUb2xlcmFuY2UoZG91YmxlIHRpbWUsIGRv
dWJsZSBuZWdhdGl2ZVQKICAgICAgICAgbV9tZWRpYVNvdXJjZVByaXZhdGUtPnNlZWtUb1RpbWUo
TWVkaWFUaW1lOjpjcmVhdGVXaXRoRG91YmxlKHRpbWUpKTsKICAgICB9IGVsc2UKICAgICAgICAg
bV9jdXJyZW50VGltZSA9IG1fbWVkaWFTb3VyY2VQcml2YXRlLT5zZWVrVG9UaW1lKE1lZGlhVGlt
ZTo6Y3JlYXRlV2l0aERvdWJsZSh0aW1lKSwgTWVkaWFUaW1lOjpjcmVhdGVXaXRoRG91YmxlKG5l
Z2F0aXZlVG9sZXJhbmNlKSwgTWVkaWFUaW1lOjpjcmVhdGVXaXRoRG91YmxlKHBvc2l0aXZlVG9s
ZXJhbmNlKSk7Ci0gICAgbV9wbGF5ZXItPnRpbWVDaGFuZ2VkKCk7CiAKLSAgICBpZiAobV9wbGF5
aW5nKQotICAgICAgICBjYWxsT25NYWluVGhyZWFkKGJpbmQoJk1vY2tNZWRpYVBsYXllck1lZGlh
U291cmNlOjphZHZhbmNlQ3VycmVudFRpbWUsIHRoaXMpKTsKKyAgICBpZiAobV9zZWVrQ29tcGxl
dGVkKSB7CisgICAgICAgIG1fcGxheWVyLT50aW1lQ2hhbmdlZCgpOworCisgICAgICAgIGlmICht
X3BsYXlpbmcpCisgICAgICAgICAgICBjYWxsT25NYWluVGhyZWFkKGJpbmQoJk1vY2tNZWRpYVBs
YXllck1lZGlhU291cmNlOjphZHZhbmNlQ3VycmVudFRpbWUsIHRoaXMpKTsKKyAgICB9CiB9CiAK
IHZvaWQgTW9ja01lZGlhUGxheWVyTWVkaWFTb3VyY2U6OmFkdmFuY2VDdXJyZW50VGltZSgpCiB7
Ci0gICAgaWYgKCFtX21lZGlhU291cmNlKQorICAgIGlmICghbV9tZWRpYVNvdXJjZVByaXZhdGUp
CiAgICAgICAgIHJldHVybjsKIAotICAgIGF1dG8gYnVmZmVyZWQgPSBtX21lZGlhU291cmNlLT5i
dWZmZXJlZCgpOworICAgIGF1dG8gYnVmZmVyZWQgPSBtX21lZGlhU291cmNlUHJpdmF0ZS0+YnVm
ZmVyZWQoKTsKICAgICBzaXplX3QgcG9zID0gYnVmZmVyZWQtPmZpbmQobV9jdXJyZW50VGltZSk7
CiAgICAgaWYgKHBvcyA9PSBub3RGb3VuZCkKICAgICAgICAgcmV0dXJuOwpAQCAtMjUyLDYgKzI1
MywyMyBAQCB2b2lkIE1vY2tNZWRpYVBsYXllck1lZGlhU291cmNlOjpzZXROZXR3b3JrU3RhdGUo
TWVkaWFQbGF5ZXI6Ok5ldHdvcmtTdGF0ZSBuZXR3bwogICAgIG1fcGxheWVyLT5uZXR3b3JrU3Rh
dGVDaGFuZ2VkKCk7CiB9CiAKK3ZvaWQgTW9ja01lZGlhUGxheWVyTWVkaWFTb3VyY2U6OndhaXRG
b3JTZWVrQ29tcGxldGVkKCkKK3sKKyAgICBtX3NlZWtDb21wbGV0ZWQgPSBmYWxzZTsKK30KKwor
dm9pZCBNb2NrTWVkaWFQbGF5ZXJNZWRpYVNvdXJjZTo6c2Vla0NvbXBsZXRlZCgpCit7CisgICAg
aWYgKG1fc2Vla0NvbXBsZXRlZCkKKyAgICAgICAgcmV0dXJuOworICAgIG1fc2Vla0NvbXBsZXRl
ZCA9IHRydWU7CisKKyAgICBtX3BsYXllci0+dGltZUNoYW5nZWQoKTsKKworICAgIGlmIChtX3Bs
YXlpbmcpCisgICAgICAgIGNhbGxPbk1haW5UaHJlYWQoYmluZCgmTW9ja01lZGlhUGxheWVyTWVk
aWFTb3VyY2U6OmFkdmFuY2VDdXJyZW50VGltZSwgdGhpcykpOworfQorCiB1bnNpZ25lZCBsb25n
IE1vY2tNZWRpYVBsYXllck1lZGlhU291cmNlOjp0b3RhbFZpZGVvRnJhbWVzKCkKIHsKICAgICBy
ZXR1cm4gbV9tZWRpYVNvdXJjZVByaXZhdGUgPyBtX21lZGlhU291cmNlUHJpdmF0ZS0+dG90YWxW
aWRlb0ZyYW1lcygpIDogMDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21v
Y2svbWVkaWFzb3VyY2UvTW9ja01lZGlhUGxheWVyTWVkaWFTb3VyY2UuaCBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL21vY2svbWVkaWFzb3VyY2UvTW9ja01lZGlhUGxheWVyTWVkaWFTb3VyY2Uu
aAppbmRleCA5MmUxM2IxNjU5MmM1MWUyMWU0Njc0ZjU4MWY5YThmNmE2YmVmYTgxLi41YTZkYTlk
ZDM5M2U5MDk5YjZkOTI2ZWVhM2VjOWJiMTBmNjg4Mjk1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9tb2NrL21lZGlhc291cmNlL01vY2tNZWRpYVBsYXllck1lZGlhU291cmNl
LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbW9jay9tZWRpYXNvdXJjZS9Nb2NrTWVk
aWFQbGF5ZXJNZWRpYVNvdXJjZS5oCkBAIC01Miw2ICs1Miw4IEBAIHB1YmxpYzoKICAgICB2aXJ0
dWFsIE1lZGlhUGxheWVyOjpSZWFkeVN0YXRlIHJlYWR5U3RhdGUoKSBjb25zdCBvdmVycmlkZTsK
ICAgICB2b2lkIHNldFJlYWR5U3RhdGUoTWVkaWFQbGF5ZXI6OlJlYWR5U3RhdGUpOwogICAgIHZv
aWQgc2V0TmV0d29ya1N0YXRlKE1lZGlhUGxheWVyOjpOZXR3b3JrU3RhdGUpOworICAgIHZvaWQg
d2FpdEZvclNlZWtDb21wbGV0ZWQoKTsKKyAgICB2b2lkIHNlZWtDb21wbGV0ZWQoKTsKIAogcHJp
dmF0ZToKICAgICBNb2NrTWVkaWFQbGF5ZXJNZWRpYVNvdXJjZShNZWRpYVBsYXllciopOwpAQCAt
ODMsNyArODUsNiBAQCBwcml2YXRlOgogICAgIHZpcnR1YWwgZG91YmxlIHRvdGFsRnJhbWVEZWxh
eSgpIG92ZXJyaWRlOwogCiAgICAgTWVkaWFQbGF5ZXIqIG1fcGxheWVyOwotICAgIFJlZlB0cjxN
ZWRpYVNvdXJjZVByaXZhdGVDbGllbnQ+IG1fbWVkaWFTb3VyY2U7CiAgICAgUmVmUHRyPE1vY2tN
ZWRpYVNvdXJjZVByaXZhdGU+IG1fbWVkaWFTb3VyY2VQcml2YXRlOwogCiAgICAgTWVkaWFUaW1l
IG1fY3VycmVudFRpbWU7CkBAIC05MSw2ICs5Miw3IEBAIHByaXZhdGU6CiAgICAgTWVkaWFQbGF5
ZXI6OlJlYWR5U3RhdGUgbV9yZWFkeVN0YXRlOwogICAgIE1lZGlhUGxheWVyOjpOZXR3b3JrU3Rh
dGUgbV9uZXR3b3JrU3RhdGU7CiAgICAgYm9vbCBtX3BsYXlpbmc7CisgICAgYm9vbCBtX3NlZWtD
b21wbGV0ZWQ7CiB9OwogCiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9t
b2NrL21lZGlhc291cmNlL01vY2tNZWRpYVNvdXJjZVByaXZhdGUuY3BwIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vbW9jay9tZWRpYXNvdXJjZS9Nb2NrTWVkaWFTb3VyY2VQcml2YXRlLmNwcApp
bmRleCA3MjQ5MzczYWVlMzcwY2UxODgyMWRmMWZkZGY3NjAxMmNlNjQ1YTdkLi5mYjQ5ZDRlZGMx
MWI1MjkyNzM2YWZlZDIyYTU2NjQ3Yzc0ZjQ4ZTJmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9tb2NrL21lZGlhc291cmNlL01vY2tNZWRpYVNvdXJjZVByaXZhdGUuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21vY2svbWVkaWFzb3VyY2UvTW9ja01lZGlhU291
cmNlUHJpdmF0ZS5jcHAKQEAgLTMwLDE5ICszMCwyMiBAQAogCiAjaW5jbHVkZSAiQ29udGVudFR5
cGUuaCIKICNpbmNsdWRlICJFeGNlcHRpb25Db2RlUGxhY2Vob2xkZXIuaCIKKyNpbmNsdWRlICJN
ZWRpYVNvdXJjZVByaXZhdGVDbGllbnQuaCIKICNpbmNsdWRlICJNb2NrTWVkaWFQbGF5ZXJNZWRp
YVNvdXJjZS5oIgogI2luY2x1ZGUgIk1vY2tTb3VyY2VCdWZmZXJQcml2YXRlLmgiCiAKIG5hbWVz
cGFjZSBXZWJDb3JlIHsKIAotUmVmUHRyPE1vY2tNZWRpYVNvdXJjZVByaXZhdGU+IE1vY2tNZWRp
YVNvdXJjZVByaXZhdGU6OmNyZWF0ZShNb2NrTWVkaWFQbGF5ZXJNZWRpYVNvdXJjZSogcGFyZW50
KQorUmVmUHRyPE1vY2tNZWRpYVNvdXJjZVByaXZhdGU+IE1vY2tNZWRpYVNvdXJjZVByaXZhdGU6
OmNyZWF0ZShNb2NrTWVkaWFQbGF5ZXJNZWRpYVNvdXJjZSogcGFyZW50LCBNZWRpYVNvdXJjZVBy
aXZhdGVDbGllbnQqIGNsaWVudCkKIHsKLSAgICByZXR1cm4gYWRvcHRSZWYobmV3IE1vY2tNZWRp
YVNvdXJjZVByaXZhdGUocGFyZW50KSk7CisgICAgUmVmUHRyPE1vY2tNZWRpYVNvdXJjZVByaXZh
dGU+IG1lZGlhU291cmNlUHJpdmF0ZSA9IGFkb3B0UmVmKG5ldyBNb2NrTWVkaWFTb3VyY2VQcml2
YXRlKHBhcmVudCwgY2xpZW50KSk7CisgICAgY2xpZW50LT5zZXRQcml2YXRlQW5kT3BlbigqbWVk
aWFTb3VyY2VQcml2YXRlKTsKKyAgICByZXR1cm4gbWVkaWFTb3VyY2VQcml2YXRlOwogfQogCi1N
b2NrTWVkaWFTb3VyY2VQcml2YXRlOjpNb2NrTWVkaWFTb3VyY2VQcml2YXRlKE1vY2tNZWRpYVBs
YXllck1lZGlhU291cmNlKiBwYXJlbnQpCitNb2NrTWVkaWFTb3VyY2VQcml2YXRlOjpNb2NrTWVk
aWFTb3VyY2VQcml2YXRlKE1vY2tNZWRpYVBsYXllck1lZGlhU291cmNlKiBwYXJlbnQsIE1lZGlh
U291cmNlUHJpdmF0ZUNsaWVudCogY2xpZW50KQogICAgIDogbV9wbGF5ZXIocGFyZW50KQotICAg
ICwgbV9kdXJhdGlvbihNZWRpYVRpbWU6OmludmFsaWRUaW1lKCkpCisgICAgLCBtX2NsaWVudChj
bGllbnQpCiAgICAgLCBtX2lzRW5kZWQoZmFsc2UpCiAgICAgLCBtX3RvdGFsVmlkZW9GcmFtZXMo
MCkKICAgICAsIG1fZHJvcHBlZFZpZGVvRnJhbWVzKDApCkBAIC04NCwxOCArODcsMTkgQEAgdm9p
ZCBNb2NrTWVkaWFTb3VyY2VQcml2YXRlOjpyZW1vdmVTb3VyY2VCdWZmZXIoU291cmNlQnVmZmVy
UHJpdmF0ZSogYnVmZmVyKQogICAgIG1fc291cmNlQnVmZmVycy5yZW1vdmUocG9zKTsKIH0KIAot
TWVkaWFUaW1lIE1vY2tNZWRpYVNvdXJjZVByaXZhdGU6OmR1cmF0aW9uKCkKK2RvdWJsZSBNb2Nr
TWVkaWFTb3VyY2VQcml2YXRlOjpkdXJhdGlvbigpCiB7Ci0gICAgcmV0dXJuIG1fZHVyYXRpb247
CisgICAgcmV0dXJuIG1fY2xpZW50LT5kdXJhdGlvbigpOwogfQogCi12b2lkIE1vY2tNZWRpYVNv
dXJjZVByaXZhdGU6OnNldER1cmF0aW9uKGNvbnN0IE1lZGlhVGltZSYgZHVyYXRpb24pCitzdGQ6
OnVuaXF1ZV9wdHI8UGxhdGZvcm1UaW1lUmFuZ2VzPiBNb2NrTWVkaWFTb3VyY2VQcml2YXRlOjpi
dWZmZXJlZCgpCiB7Ci0gICAgaWYgKGR1cmF0aW9uID09IG1fZHVyYXRpb24pCi0gICAgICAgIHJl
dHVybjsKKyAgICByZXR1cm4gbV9jbGllbnQtPmJ1ZmZlcmVkKCk7Cit9CiAKLSAgICBtX2R1cmF0
aW9uID0gZHVyYXRpb247Ci0gICAgbV9wbGF5ZXItPnVwZGF0ZUR1cmF0aW9uKGR1cmF0aW9uKTsK
K3ZvaWQgTW9ja01lZGlhU291cmNlUHJpdmF0ZTo6ZHVyYXRpb25DaGFuZ2VkKCkKK3sKKyAgICBt
X3BsYXllci0+dXBkYXRlRHVyYXRpb24oTWVkaWFUaW1lOjpjcmVhdGVXaXRoRG91YmxlKGR1cmF0
aW9uKCkpKTsKIH0KIAogdm9pZCBNb2NrTWVkaWFTb3VyY2VQcml2YXRlOjptYXJrRW5kT2ZTdHJl
YW0oRW5kT2ZTdHJlYW1TdGF0dXMgc3RhdHVzKQpAQCAtMTIwLDYgKzEyNCwxNiBAQCB2b2lkIE1v
Y2tNZWRpYVNvdXJjZVByaXZhdGU6OnNldFJlYWR5U3RhdGUoTWVkaWFQbGF5ZXI6OlJlYWR5U3Rh
dGUgcmVhZHlTdGF0ZSkKICAgICBtX3BsYXllci0+c2V0UmVhZHlTdGF0ZShyZWFkeVN0YXRlKTsK
IH0KIAordm9pZCBNb2NrTWVkaWFTb3VyY2VQcml2YXRlOjp3YWl0Rm9yU2Vla0NvbXBsZXRlZCgp
Cit7CisgICAgbV9wbGF5ZXItPndhaXRGb3JTZWVrQ29tcGxldGVkKCk7Cit9CisKK3ZvaWQgTW9j
a01lZGlhU291cmNlUHJpdmF0ZTo6c2Vla0NvbXBsZXRlZCgpCit7CisgICAgbV9wbGF5ZXItPnNl
ZWtDb21wbGV0ZWQoKTsKK30KKwogdm9pZCBNb2NrTWVkaWFTb3VyY2VQcml2YXRlOjpzb3VyY2VC
dWZmZXJQcml2YXRlRGlkQ2hhbmdlQWN0aXZlU3RhdGUoTW9ja1NvdXJjZUJ1ZmZlclByaXZhdGUq
IGJ1ZmZlciwgYm9vbCBhY3RpdmUpCiB7CiAgICAgaWYgKGFjdGl2ZSAmJiAhbV9hY3RpdmVTb3Vy
Y2VCdWZmZXJzLmNvbnRhaW5zKGJ1ZmZlcikpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9tb2NrL21lZGlhc291cmNlL01vY2tNZWRpYVNvdXJjZVByaXZhdGUuaCBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL21vY2svbWVkaWFzb3VyY2UvTW9ja01lZGlhU291cmNlUHJpdmF0
ZS5oCmluZGV4IGY3OWIxMTAyZDUyMjA0Y2U2MzNmNjAxMDFiYTZkZDlmYTQxN2M4ZTUuLjBiMzVh
MTBiOWY3NzczNmVlNGY1NTNkOWRmNjU3MWI4M2E4ZTYxNjEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL21vY2svbWVkaWFzb3VyY2UvTW9ja01lZGlhU291cmNlUHJpdmF0ZS5o
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21vY2svbWVkaWFzb3VyY2UvTW9ja01lZGlh
U291cmNlUHJpdmF0ZS5oCkBAIC0zOSw3ICszOSw3IEBAIGNsYXNzIFRpbWVSYW5nZXM7CiAKIGNs
YXNzIE1vY2tNZWRpYVNvdXJjZVByaXZhdGUgZmluYWwgOiBwdWJsaWMgTWVkaWFTb3VyY2VQcml2
YXRlIHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgUmVmUHRyPE1vY2tNZWRpYVNvdXJjZVByaXZhdGU+
IGNyZWF0ZShNb2NrTWVkaWFQbGF5ZXJNZWRpYVNvdXJjZSopOworICAgIHN0YXRpYyBSZWZQdHI8
TW9ja01lZGlhU291cmNlUHJpdmF0ZT4gY3JlYXRlKE1vY2tNZWRpYVBsYXllck1lZGlhU291cmNl
KiwgTWVkaWFTb3VyY2VQcml2YXRlQ2xpZW50Kik7CiAgICAgdmlydHVhbCB+TW9ja01lZGlhU291
cmNlUHJpdmF0ZSgpOwogCiAgICAgY29uc3QgVmVjdG9yPE1vY2tTb3VyY2VCdWZmZXJQcml2YXRl
Kj4mIGFjdGl2ZVNvdXJjZUJ1ZmZlcnMoKSBjb25zdCB7IHJldHVybiBtX2FjdGl2ZVNvdXJjZUJ1
ZmZlcnM7IH0KQEAgLTQ3LDYgKzQ3LDkgQEAgcHVibGljOgogICAgIGJvb2wgaGFzQXVkaW8oKSBj
b25zdDsKICAgICBib29sIGhhc1ZpZGVvKCkgY29uc3Q7CiAKKyAgICBkb3VibGUgZHVyYXRpb24o
KTsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8UGxhdGZvcm1UaW1lUmFuZ2VzPiBidWZmZXJlZCgpOwor
CiAgICAgTW9ja01lZGlhUGxheWVyTWVkaWFTb3VyY2UqIHBsYXllcigpIGNvbnN0IHsgcmV0dXJu
IG1fcGxheWVyOyB9CiAKICAgICB2b2lkIHNlZWtUb1RpbWUoY29uc3QgTWVkaWFUaW1lJik7CkBA
IC02MywxNiArNjYsMTcgQEAgcHVibGljOgogICAgIHZvaWQgaW5jcmVtZW50VG90YWxGcmFtZURl
bGF5QnkoZG91YmxlIGRlbGF5KSB7IG1fdG90YWxGcmFtZURlbGF5ICs9IGRlbGF5OyB9CiAKIHBy
aXZhdGU6Ci0gICAgTW9ja01lZGlhU291cmNlUHJpdmF0ZShNb2NrTWVkaWFQbGF5ZXJNZWRpYVNv
dXJjZSopOworICAgIE1vY2tNZWRpYVNvdXJjZVByaXZhdGUoTW9ja01lZGlhUGxheWVyTWVkaWFT
b3VyY2UqLCBNZWRpYVNvdXJjZVByaXZhdGVDbGllbnQqKTsKIAogICAgIC8vIE1lZGlhU291cmNl
UHJpdmF0ZSBPdmVycmlkZXMKICAgICB2aXJ0dWFsIEFkZFN0YXR1cyBhZGRTb3VyY2VCdWZmZXIo
Y29uc3QgQ29udGVudFR5cGUmLCBSZWZQdHI8U291cmNlQnVmZmVyUHJpdmF0ZT4mKSBvdmVycmlk
ZTsKLSAgICB2aXJ0dWFsIE1lZGlhVGltZSBkdXJhdGlvbigpIG92ZXJyaWRlOwotICAgIHZpcnR1
YWwgdm9pZCBzZXREdXJhdGlvbihjb25zdCBNZWRpYVRpbWUmKSBvdmVycmlkZTsKKyAgICB2aXJ0
dWFsIHZvaWQgZHVyYXRpb25DaGFuZ2VkKCkgb3ZlcnJpZGU7CiAgICAgdmlydHVhbCB2b2lkIG1h
cmtFbmRPZlN0cmVhbShFbmRPZlN0cmVhbVN0YXR1cykgb3ZlcnJpZGU7CiAgICAgdmlydHVhbCB2
b2lkIHVubWFya0VuZE9mU3RyZWFtKCkgb3ZlcnJpZGU7CiAgICAgdmlydHVhbCBNZWRpYVBsYXll
cjo6UmVhZHlTdGF0ZSByZWFkeVN0YXRlKCkgY29uc3Qgb3ZlcnJpZGU7CiAgICAgdmlydHVhbCB2
b2lkIHNldFJlYWR5U3RhdGUoTWVkaWFQbGF5ZXI6OlJlYWR5U3RhdGUpIG92ZXJyaWRlOworICAg
IHZpcnR1YWwgdm9pZCB3YWl0Rm9yU2Vla0NvbXBsZXRlZCgpIG92ZXJyaWRlOworICAgIHZpcnR1
YWwgdm9pZCBzZWVrQ29tcGxldGVkKCkgb3ZlcnJpZGU7CiAKICAgICB2b2lkIHNvdXJjZUJ1ZmZl
clByaXZhdGVEaWRDaGFuZ2VBY3RpdmVTdGF0ZShNb2NrU291cmNlQnVmZmVyUHJpdmF0ZSosIGJv
b2wgYWN0aXZlKTsKICAgICB2b2lkIHJlbW92ZVNvdXJjZUJ1ZmZlcihTb3VyY2VCdWZmZXJQcml2
YXRlKik7CkBAIC04MCw3ICs4NCw3IEBAIHByaXZhdGU6CiAgICAgZnJpZW5kIGNsYXNzIE1vY2tT
b3VyY2VCdWZmZXJQcml2YXRlOwogCiAgICAgTW9ja01lZGlhUGxheWVyTWVkaWFTb3VyY2UqIG1f
cGxheWVyOwotICAgIE1lZGlhVGltZSBtX2R1cmF0aW9uOworICAgIFJlZlB0cjxNZWRpYVNvdXJj
ZVByaXZhdGVDbGllbnQ+IG1fY2xpZW50OwogICAgIFZlY3RvcjxSZWZQdHI8TW9ja1NvdXJjZUJ1
ZmZlclByaXZhdGU+PiBtX3NvdXJjZUJ1ZmZlcnM7CiAgICAgVmVjdG9yPE1vY2tTb3VyY2VCdWZm
ZXJQcml2YXRlKj4gbV9hY3RpdmVTb3VyY2VCdWZmZXJzOwogICAgIGJvb2wgbV9pc0VuZGVkOwpk
aWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9n
CmluZGV4IDUyNDBhNDcxOGI3YTMxNzcwYzA0Y2I1NTczOTM2OTgyZTgxNzlhNTguLjQ5ZGRkODFj
NDRkNTIzNmRhOThhOTMwN2MwNWI1MzFhZDIwZjMzMWMgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3Rz
L0NoYW5nZUxvZworKysgYi9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxNyBAQAor
MjAxNC0wNy0xMSAgSmVyIE5vYmxlICA8amVyLm5vYmxlQGFwcGxlLmNvbT4KKworICAgICAgICBb
TVNFXSBodHRwL3Rlc3RzL21lZGlhL21lZGlhLXNvdXJjZS9tZWRpYXNvdXJjZS1kdXJhdGlvbi5o
dG1sIGlzIGZhaWxpbmcuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD0xMzQ4NTIKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKwor
ICAgICAgICBFbGltaW5hdGUgZmxha2luZXNzIGluIHRoZSBtZWRpYXNvdXJjZS1kdXJhdGlvbi5o
dG1sIHRlc3QgYnkgbm90IHBsYXlpbmcKKyAgICAgICAgdGhlIG1lZGlhIHdoaWxlIHRlc3Rpbmcg
c2Vla2luZyBhbmQgZHVyYXRpb24uCisgICAgICAgICogaHR0cC90ZXN0cy9tZWRpYS9tZWRpYS1z
b3VyY2UvbWVkaWFzb3VyY2UtZHVyYXRpb24uaHRtbDoKKworICAgICAgICBVcGRhdGUgdGVzdGhh
cm5lc3MuanMgdG8gdGhlIGxhdGVzdCBXM0MgdmVyc2lvbjoKKyAgICAgICAgKiBodHRwL3Rlc3Rz
L3czYy9yZXNvdXJjZXMvdGVzdGhhcm5lc3MuanM6CisKIDIwMTQtMDctMTEgIFphbGFuIEJ1anRh
cyAgPHphbGFuQGFwcGxlLmNvbT4KIAogICAgICAgICBSRUdSRVNTSU9OIChyMTY4ODY4KTogZUJh
eSAnc2VlIGFsbCcgbGlua3MgZmFpbCBkdWUgdG8gZGlmZmVyZW50IEpTIGJpbmRpbmdzIGNvbnZl
cnNpb24gYmVoYXZpb3IuCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9odHRwL3Rlc3RzL21lZGlh
L21lZGlhLXNvdXJjZS9tZWRpYXNvdXJjZS1kdXJhdGlvbi5odG1sIGIvTGF5b3V0VGVzdHMvaHR0
cC90ZXN0cy9tZWRpYS9tZWRpYS1zb3VyY2UvbWVkaWFzb3VyY2UtZHVyYXRpb24uaHRtbAppbmRl
eCBkNDMzOTE2ZDhiN2VhYjQyY2U5OGVhNGJjMjg4YjNjN2MzMDViNmNkLi5iYWM1YmE5ZGNiOGE4
MmVjYmIzOTI0Zjg5MTBjYzIyYjRhYThmOGY0IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9odHRw
L3Rlc3RzL21lZGlhL21lZGlhLXNvdXJjZS9tZWRpYXNvdXJjZS1kdXJhdGlvbi5odG1sCisrKyBi
L0xheW91dFRlc3RzL2h0dHAvdGVzdHMvbWVkaWEvbWVkaWEtc291cmNlL21lZGlhc291cmNlLWR1
cmF0aW9uLmh0bWwKQEAgLTE4LDExICsxOCw4IEBACiAgICAgICAgICAgICAgICAgICB2YXIgc2Vl
a1RvID0gZnVsbER1cmF0aW9uIC8gMi4wOwogICAgICAgICAgICAgICAgICAgdmFyIHRydW5jYXRl
ZER1cmF0aW9uID0gc2Vla1RvIC8gMi4wOwogCi0gICAgICAgICAgICAgICAgICBtZWRpYUVsZW1l
bnQucGxheSgpOwotCiAgICAgICAgICAgICAgICAgICAvLyBBcHBlbmQgYWxsIHRoZSBzZWdtZW50
cwogICAgICAgICAgICAgICAgICAgdGVzdC5leHBlY3RFdmVudChzb3VyY2VCdWZmZXIsICd1cGRh
dGVlbmQnLCAnc291cmNlQnVmZmVyJyk7Ci0gICAgICAgICAgICAgICAgICB0ZXN0LmV4cGVjdEV2
ZW50KG1lZGlhRWxlbWVudCwgJ3BsYXlpbmcnLCAnUGxheWluZyB0cmlnZ2VyZWQnKTsKICAgICAg
ICAgICAgICAgICAgIHNvdXJjZUJ1ZmZlci5hcHBlbmRCdWZmZXIobWVkaWFEYXRhKTsKIAogICAg
ICAgICAgICAgICAgICAgdGVzdC53YWl0Rm9yRXhwZWN0ZWRFdmVudHMoZnVuY3Rpb24oKQpAQCAt
MTI2LDExICsxMjMsMTEgQEAKIAogICAgICAgICAgICAgICB0ZXN0LndhaXRGb3JFeHBlY3RlZEV2
ZW50cyhmdW5jdGlvbigpCiAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgIGFzc2Vy
dF9lcXVhbHMobWVkaWFFbGVtZW50LmN1cnJlbnRUaW1lLCB0cnVuY2F0ZWREdXJhdGlvbiwKKyAg
ICAgICAgICAgICAgICAgIGFzc2VydF9hcHByb3hfZXF1YWxzKG1lZGlhRWxlbWVudC5jdXJyZW50
VGltZSwgdHJ1bmNhdGVkRHVyYXRpb24sIDAuMDUsCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICdQbGF5YmFjayB0aW1lIGhhcyByZWFjaGVkIHRydW5jYXRlZER1cmF0aW9uJyk7Ci0g
ICAgICAgICAgICAgICAgICBhc3NlcnRfZXF1YWxzKG1lZGlhRWxlbWVudC5kdXJhdGlvbiwgdHJ1
bmNhdGVkRHVyYXRpb24sCisgICAgICAgICAgICAgICAgICBhc3NlcnRfYXBwcm94X2VxdWFscyht
ZWRpYUVsZW1lbnQuZHVyYXRpb24sIHRydW5jYXRlZER1cmF0aW9uLCAwLjA1LAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAnbWVkaWFFbGVtZW50IHRydW5jYXRlZER1cmF0aW9uIGFm
dGVyIHNlZWsgdG8gaXQnKTsKLSAgICAgICAgICAgICAgICAgIGFzc2VydF9lcXVhbHMobWVkaWFT
b3VyY2UuZHVyYXRpb24sIHRydW5jYXRlZER1cmF0aW9uLAorICAgICAgICAgICAgICAgICAgYXNz
ZXJ0X2FwcHJveF9lcXVhbHMobWVkaWFTb3VyY2UuZHVyYXRpb24sIHRydW5jYXRlZER1cmF0aW9u
LCAwLjA1LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnbWVkaWFTb3VyY2UgdHJ1
bmNhdGVkRHVyYXRpb24gYWZ0ZXIgc2VlayB0byBpdCcpOwogICAgICAgICAgICAgICAgICAgYXNz
ZXJ0X2ZhbHNlKG1lZGlhRWxlbWVudC5zZWVraW5nLCAnbWVkaWFFbGVtZW50LnNlZWtpbmcgYWZ0
ZXIgc2Vla2VkIHRvIHRydW5jYXRlZER1cmF0aW9uJyk7CiAKQEAgLTE1NCwxMSArMTUxLDggQEAK
ICAgICAgICAgICAgICAgICAgIGR1cmF0aW9uY2hhbmdlRXZlbnRDb3VudGVyKys7CiAgICAgICAg
ICAgICAgIH0pOwogCi0gICAgICAgICAgICAgIG1lZGlhRWxlbWVudC5wbGF5KCk7Ci0KICAgICAg
ICAgICAgICAgLy8gQXBwZW5kIGFsbCB0aGUgc2VnbWVudHMKICAgICAgICAgICAgICAgdGVzdC5l
eHBlY3RFdmVudChzb3VyY2VCdWZmZXIsICd1cGRhdGVlbmQnLCAnc291cmNlQnVmZmVyJyk7Ci0g
ICAgICAgICAgICAgIHRlc3QuZXhwZWN0RXZlbnQobWVkaWFFbGVtZW50LCAncGxheWluZycsICdQ
bGF5aW5nIHRyaWdnZXJlZCcpOwogICAgICAgICAgICAgICBzb3VyY2VCdWZmZXIuYXBwZW5kQnVm
ZmVyKG1lZGlhRGF0YSk7CiAKICAgICAgICAgICAgICAgdGVzdC53YWl0Rm9yRXhwZWN0ZWRFdmVu
dHMoZnVuY3Rpb24oKQpAQCAtMjAxLDcgKzE5NSwxMCBAQAogICAgICAgICAgICAgICAgICAgICAg
ICsrZXhwZWN0ZWREdXJhdGlvbkNoYW5nZUV2ZW50Q291bnQ7CiAgICAgICAgICAgICAgICAgICB9
CiAKKyAgICAgICAgICAgICAgICAgIG1lZGlhRWxlbWVudC5wbGF5KCk7CisKICAgICAgICAgICAg
ICAgICAgIC8vIEFsbG93IG1lZGlhIHRvIHBsYXkgdG8gZW5kIHdoaWxlIGNvdW50aW5nICdkdXJh
dGlvbmNoYW5nZScgZXZlbnRzLgorICAgICAgICAgICAgICAgICAgdGVzdC5leHBlY3RFdmVudCht
ZWRpYUVsZW1lbnQsICdwbGF5aW5nJywgJ1BsYXlpbmcgdHJpZ2dlcmVkJyk7CiAgICAgICAgICAg
ICAgICAgICB0ZXN0LmV4cGVjdEV2ZW50KG1lZGlhRWxlbWVudCwgJ2VuZGVkJywgJ1BsYXliYWNr
IGVuZGVkJyk7CiAgICAgICAgICAgICAgICAgICB0ZXN0LndhaXRGb3JFeHBlY3RlZEV2ZW50cyhm
dW5jdGlvbigpCiAgICAgICAgICAgICAgICAgICB7CkBAIC0yMTEsNiArMjA4LDcgQEAKICAgICAg
ICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICB9KTsKICAgICAgICAgICB9LCAnVGVzdCBz
ZXR0aW5nIHNhbWUgZHVyYXRpb24gbXVsdGlwbGUgdGltZXMgZG9lcyBub3QgZmlyZSBkdXBsaWNh
dGUgZHVyYXRpb25jaGFuZ2UnLCB7dGltZW91dDogMjUwMH0pOworCiAgICAgICAgIDwvc2NyaXB0
PgogICAgIDwvYm9keT4KIDwvaHRtbD4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2h0dHAvdGVz
dHMvdzNjL3Jlc291cmNlcy90ZXN0aGFybmVzcy5qcyBiL0xheW91dFRlc3RzL2h0dHAvdGVzdHMv
dzNjL3Jlc291cmNlcy90ZXN0aGFybmVzcy5qcwppbmRleCA3NjU1MzgzMjI2NGVhMDc4YTE2ZWZi
N2I2MTU3ZGY1YmMzN2MyNTVlLi5kYTY0NmU4YzY5MmFlOGVmMTljNDQ0YWEyNDk5MGNjMTkxMjUz
MGM5IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3czYy9yZXNvdXJjZXMvdGVz
dGhhcm5lc3MuanMKKysrIGIvTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy93M2MvcmVzb3VyY2VzL3Rl
c3RoYXJuZXNzLmpzCkBAIC0xLDIxNDUgKzEsMjI0NCBAQAotLyoNCi1EaXN0cmlidXRlZCB1bmRl
ciBib3RoIHRoZSBXM0MgVGVzdCBTdWl0ZSBMaWNlbnNlIFsxXSBhbmQgdGhlIFczQw0KLTMtY2xh
dXNlIEJTRCBMaWNlbnNlIFsyXS4gVG8gY29udHJpYnV0ZSB0byBhIFczQyBUZXN0IFN1aXRlLCBz
ZWUgdGhlDQotcG9saWNpZXMgYW5kIGNvbnRyaWJ1dGlvbiBmb3JtcyBbM10uDQotDQotWzFdIGh0
dHA6Ly93d3cudzMub3JnL0NvbnNvcnRpdW0vTGVnYWwvMjAwOC8wNC10ZXN0c3VpdGUtbGljZW5z
ZQ0KLVsyXSBodHRwOi8vd3d3LnczLm9yZy9Db25zb3J0aXVtL0xlZ2FsLzIwMDgvMDMtYnNkLWxp
Y2Vuc2UNCi1bM10gaHR0cDovL3d3dy53My5vcmcvMjAwNC8xMC8yNy10ZXN0Y2FzZXMNCi0qLw0K
LQ0KLS8qDQotICogPT0gSW50cm9kdWN0aW9uID09DQotICoNCi0gKiBUaGlzIGZpbGUgcHJvdmlk
ZXMgYSBmcmFtZXdvcmsgZm9yIHdyaXRpbmcgdGVzdGNhc2VzLiBJdCBpcyBpbnRlbmRlZCB0bw0K
LSAqIHByb3ZpZGUgYSBjb252ZW5pZW50IEFQSSBmb3IgbWFraW5nIGNvbW1vbiBhc3NlcnRpb25z
LCBhbmQgdG8gd29yayBib3RoDQotICogZm9yIHRlc3Rpbmcgc3luY2hyb25vdXMgYW5kIGFzeW5j
aHJvbm91cyBET00gZmVhdHVyZXMgaW4gYSB3YXkgdGhhdA0KLSAqIHByb21vdGVzIGNsZWFyLCBy
b2J1c3QsIHRlc3RzLg0KLSAqDQotICogPT0gQmFzaWMgVXNhZ2UgPT0NCi0gKg0KLSAqIFRvIHVz
ZSB0aGlzIGZpbGUsIGltcG9ydCB0aGUgc2NyaXB0IGFuZCB0aGUgdGVzdGhhcm5lc3NyZXBvcnQg
c2NyaXB0IGludG8NCi0gKiB0aGUgdGVzdCBkb2N1bWVudDoNCi0gKiA8c2NyaXB0IHNyYz0iL3Jl
c291cmNlcy90ZXN0aGFybmVzcy5qcyI+PC9zY3JpcHQ+DQotICogPHNjcmlwdCBzcmM9Ii9yZXNv
dXJjZXMvdGVzdGhhcm5lc3NyZXBvcnQuanMiPjwvc2NyaXB0Pg0KLSAqDQotICogV2l0aGluIGVh
Y2ggZmlsZSBvbmUgbWF5IGRlZmluZSBvbmUgb3IgbW9yZSB0ZXN0cy4gRWFjaCB0ZXN0IGlzIGF0
b21pYw0KLSAqIGluIHRoZSBzZW5zZSB0aGF0IGEgc2luZ2xlIHRlc3QgaGFzIGEgc2luZ2xlIHJl
c3VsdCAocGFzcy9mYWlsL3RpbWVvdXQpLg0KLSAqIFdpdGhpbiBlYWNoIHRlc3Qgb25lIG1heSBo
YXZlIGEgbnVtYmVyIG9mIGFzc2VydHMuIFRoZSB0ZXN0IGZhaWxzIGF0IHRoZQ0KLSAqIGZpcnN0
IGZhaWxpbmcgYXNzZXJ0LCBhbmQgdGhlIHJlbWFpbmRlciBvZiB0aGUgdGVzdCBpcyAodHlwaWNh
bGx5KSBub3QgcnVuLg0KLSAqDQotICogSWYgdGhlIGZpbGUgY29udGFpbmluZyB0aGUgdGVzdHMg
aXMgYSBIVE1MIGZpbGUgd2l0aCBhbiBlbGVtZW50IG9mIGlkICJsb2ciDQotICogdGhpcyB3aWxs
IGJlIHBvcHVsYXRlZCB3aXRoIGEgdGFibGUgY29udGFpbmluZyB0aGUgdGVzdCByZXN1bHRzIGFm
dGVyIGFsbA0KLSAqIHRoZSB0ZXN0cyBoYXZlIHJ1bi4NCi0gKg0KLSAqIE5PVEU6IEJ5IGRlZmF1
bHQgdGVzdHMgbXVzdCBiZSBjcmVhdGVkIGJlZm9yZSB0aGUgbG9hZCBldmVudCBmaXJlcy4gRm9y
IHdheXMNCi0gKiAgICAgICB0byBjcmVhdGUgdGVzdHMgYWZ0ZXIgdGhlIGxvYWQgZXZlbnQsIHNl
ZSAiRGV0ZXJtaW5pbmcgd2hlbiBhbGwgdGVzdHMNCi0gKiAgICAgICBhcmUgY29tcGxldGUiLCBi
ZWxvdw0KLSAqDQotICogPT0gU3luY2hyb25vdXMgVGVzdHMgPT0NCi0gKg0KLSAqIFRvIGNyZWF0
ZSBhIHN5bmNocm9ub3VzIHRlc3QgdXNlIHRoZSB0ZXN0KCkgZnVuY3Rpb246DQotICoNCi0gKiB0
ZXN0KHRlc3RfZnVuY3Rpb24sIG5hbWUsIHByb3BlcnRpZXMpDQotICoNCi0gKiB0ZXN0X2Z1bmN0
aW9uIGlzIGEgZnVuY3Rpb24gdGhhdCBjb250YWlucyB0aGUgY29kZSB0byB0ZXN0LiBGb3IgZXhh
bXBsZSBhDQotICogdHJpdmlhbCBwYXNzaW5nIHRlc3Qgd291bGQgYmU6DQotICoNCi0gKiB0ZXN0
KGZ1bmN0aW9uKCkge2Fzc2VydF90cnVlKHRydWUpfSwgImFzc2VydF90cnVlIHdpdGggdHJ1ZSIp
DQotICoNCi0gKiBUaGUgZnVuY3Rpb24gcGFzc2VkIGluIGlzIHJ1biBpbiB0aGUgdGVzdCgpIGNh
bGwuDQotICoNCi0gKiBwcm9wZXJ0aWVzIGlzIGFuIG9iamVjdCB0aGF0IG92ZXJyaWRlcyBkZWZh
dWx0IHRlc3QgcHJvcGVydGllcy4gVGhlDQotICogcmVjb2duaXNlZCBwcm9wZXJ0aWVzIGFyZToN
Ci0gKiAgICB0aW1lb3V0IC0gdGhlIHRlc3QgdGltZW91dCBpbiBtcw0KLSAqDQotICogZS5nLg0K
LSAqIHRlc3QodGVzdF9mdW5jdGlvbiwgIlNhbXBsZSB0ZXN0Iiwge3RpbWVvdXQ6MTAwMH0pDQot
ICoNCi0gKiB3b3VsZCBydW4gdGVzdF9mdW5jdGlvbiB3aXRoIGEgdGltZW91dCBvZiAxcy4NCi0g
Kg0KLSAqIEFkZGl0aW9uYWxseSwgdGVzdC1zcGVjaWZpYyBtZXRhZGF0YSBjYW4gYmUgcGFzc2Vk
IGluIHRoZSBwcm9wZXJ0aWVzLiBUaGVzZQ0KLSAqIGFyZSB1c2VkIHdoZW4gdGhlIGluZGl2aWR1
YWwgdGVzdCBoYXMgZGlmZmVyZW50IG1ldGFkYXRhIGZyb20gdGhhdCBzdG9yZWQgDQotICogaW4g
dGhlIDxoZWFkPi4NCi0gKiBUaGUgcmVjb2duaXplZCBtZXRhZGF0YSBwcm9wZXJ0aWVzIGFyZToN
Ci0gKg0KLSAqICAgIGhlbHAgLSBUaGUgdXJsIG9mIHRoZSBwYXJ0IG9mIHRoZSBzcGVjaWZpY2F0
aW9uIGJlaW5nIHRlc3RlZA0KLSAqDQotICogICAgYXNzZXJ0IC0gQSBodW1hbiByZWFkYWJsZSBk
ZXNjcmlwdGlvbiBvZiB3aGF0IHRoZSB0ZXN0IGlzIGF0dGVtcHRpbmcgDQotICogICAgICAgICAg
ICAgdG8gcHJvdmUNCi0gKg0KLSAqICAgIGF1dGhvciAtIE5hbWUgYW5kIGNvbnRhY3QgaW5mb3Jt
YXRpb24gZm9yIHRoZSBhdXRob3Igb2YgdGhlIHRlc3QgaW4gdGhlDQotICogICAgICAgICAgICAg
Zm9ybWF0OiAiTmFtZSA8ZW1haWxfYWRkcj4iIG9yICJOYW1lIGh0dHA6Ly9jb250YWN0L3VybCIN
Ci0gKg0KLSAqICAgIGZsYWdzIC0gc3BhY2Ugc2VwYXJhdGVkIGxpc3Qgb2YgdGVzdCBmbGFncyBp
biBhZGRpdGlvbiB0byBhbnkgcHJlc2VudCBpbg0KLSAqICAgICAgICAgICAgdGhlIGhlYWQgbWV0
YWRhdGENCi0gKg0KLSAqID09IEFzeW5jaHJvbm91cyBUZXN0cyA9PQ0KLSAqDQotICogVGVzdGlu
ZyBhc3luY2hyb25vdXMgZmVhdHVyZXMgaXMgc29tZXdoYXQgbW9yZSBjb21wbGV4IHNpbmNlIHRo
ZSByZXN1bHQgb2YNCi0gKiBhIHRlc3QgbWF5IGRlcGVuZCBvbiBvbmUgb3IgbW9yZSBldmVudHMg
b3Igb3RoZXIgY2FsbGJhY2tzLiBUaGUgQVBJIHByb3ZpZGVkDQotICogZm9yIHRlc3RpbmcgdGhl
c2UgZmVhdHVyZXMgaXMgaW5kZW5kZWQgdG8gYmUgcmF0aGVyIGxvdy1sZXZlbCBidXQgaG9wZWZ1
bGx5DQotICogYXBwbGljYWJsZSB0byBtYW55IHNpdHVhdGlvbnMuDQotICoNCi0gKiBUbyBjcmVh
dGUgYSB0ZXN0LCBvbmUgc3RhcnRzIGJ5IGdldHRpbmcgYSBUZXN0IG9iamVjdCB1c2luZyBhc3lu
Y190ZXN0Og0KLSAqDQotICogYXN5bmNfdGVzdChuYW1lLCBwcm9wZXJ0aWVzKQ0KLSAqDQotICog
ZS5nLg0KLSAqIHZhciB0ID0gYXN5bmNfdGVzdCgiU2ltcGxlIGFzeW5jIHRlc3QiKQ0KLSAqDQot
ICogQXNzZXJ0aW9ucyBjYW4gYmUgYWRkZWQgdG8gdGhlIHRlc3QgYnkgY2FsbGluZyB0aGUgc3Rl
cCBtZXRob2Qgb2YgdGhlIHRlc3QNCi0gKiBvYmplY3Qgd2l0aCBhIGZ1bmN0aW9uIGNvbnRhaW5p
bmcgdGhlIHRlc3QgYXNzZXJ0aW9uczoNCi0gKg0KLSAqIHQuc3RlcChmdW5jdGlvbigpIHthc3Nl
cnRfdHJ1ZSh0cnVlKX0pOw0KLSAqDQotICogV2hlbiBhbGwgdGhlIHN0ZXBzIGFyZSBjb21wbGV0
ZSwgdGhlIGRvbmUoKSBtZXRob2QgbXVzdCBiZSBjYWxsZWQ6DQotICoNCi0gKiB0LmRvbmUoKTsN
Ci0gKg0KLSAqIEFzIGEgY29udmVuaWVuY2UsIGFzeW5jX3Rlc3QgY2FuIGFsc28gdGFrZXMgYSBm
dW5jdGlvbiBhcyBmaXJzdCBhcmd1bWVudC4NCi0gKiBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCB3
aXRoIHRoZSB0ZXN0IG9iamVjdCBhcyBib3RoIGl0cyBgdGhpc2Agb2JqZWN0IGFuZA0KLSAqIGZp
cnN0IGFyZ3VtZW50LiBUaGUgYWJvdmUgZXhhbXBsZSBjYW4gYmUgcmV3cml0dGVuIGFzOg0KLSAq
DQotICogYXN5bmNfdGVzdChmdW5jdGlvbih0KSB7DQotICogICAgIG9iamVjdC5zb21lX2V2ZW50
ID0gZnVuY3Rpb24oKSB7DQotICogICAgICAgICB0LnN0ZXAoZnVuY3Rpb24gKCl7YXNzZXJ0X3Ry
dWUodHJ1ZSk7IHQuZG9uZSgpO30pOw0KLSAqICAgICB9Ow0KLSAqIH0sICJTaW1wbGUgYXN5bmMg
dGVzdCIpOw0KLSAqDQotICogd2hpY2ggYXZvaWRzIGNsdXR0ZXJpbmcgdGhlIGdsb2JhbCBzY29w
ZSB3aXRoIHJlZmVyZW5jZXMgdG8gYXN5bmMNCi0gKiB0ZXN0cyBpbnN0YW5jZXMuDQotICoNCi0g
KiBUaGUgcHJvcGVydGllcyBhcmd1bWVudCBpcyBpZGVudGljYWwgdG8gdGhhdCBmb3IgdGVzdCgp
Lg0KLSAqDQotICogSW4gbWFueSBjYXNlcyBpdCBpcyBjb252ZW5pZW50IHRvIHJ1biBhIHN0ZXAg
aW4gcmVzcG9uc2UgdG8gYW4gZXZlbnQgb3IgYQ0KLSAqIGNhbGxiYWNrLiBBIGNvbnZlbmllbnQg
bWV0aG9kIG9mIGRvaW5nIHRoaXMgaXMgdGhyb3VnaCB0aGUgc3RlcF9mdW5jIG1ldGhvZA0KLSAq
IHdoaWNoIHJldHVybnMgYSBmdW5jdGlvbiB0aGF0LCB3aGVuIGNhbGxlZCBydW5zIGEgdGVzdCBz
dGVwLiBGb3IgZXhhbXBsZQ0KLSAqDQotICogb2JqZWN0LnNvbWVfZXZlbnQgPSB0LnN0ZXBfZnVu
YyhmdW5jdGlvbihlKSB7YXNzZXJ0X3RydWUoZS5hKX0pOw0KLSAqDQotICogPT0gTWFraW5nIGFz
c2VydGlvbnMgPT0NCi0gKg0KLSAqIEZ1bmN0aW9ucyBmb3IgbWFraW5nIGFzc2VydGlvbnMgc3Rh
cnQgYXNzZXJ0Xw0KLSAqIFRoZSBiZXN0IHdheSB0byBnZXQgYSBsaXN0IGlzIHRvIGxvb2sgaW4g
dGhpcyBmaWxlIGZvciBmdW5jdGlvbnMgbmFtZXMNCi0gKiBtYXRjaGluZyB0aGF0IHBhdHRlcm4u
IFRoZSBnZW5lcmFsIHNpZ25hdHVyZSBpcw0KLSAqDQotICogYXNzZXJ0X3NvbWV0aGluZyhhY3R1
YWwsIGV4cGVjdGVkLCBkZXNjcmlwdGlvbikNCi0gKg0KLSAqIGFsdGhvdWdoIG5vdCBhbGwgYXNz
ZXJ0aW9ucyBwcmVjaXNlbHkgbWF0Y2ggdGhpcyBwYXR0ZXJuIGUuZy4gYXNzZXJ0X3RydWUNCi0g
KiBvbmx5IHRha2VzIGFjdHVhbCBhbmQgZGVzY3JpcHRpb24gYXMgYXJndW1lbnRzLg0KLSAqDQot
ICogVGhlIGRlc2NyaXB0aW9uIHBhcmFtZXRlciBpcyB1c2VkIHRvIHByZXNlbnQgbW9yZSB1c2Vm
dWwgZXJyb3IgbWVzc2FnZXMgd2hlbg0KLSAqIGEgdGVzdCBmYWlscw0KLSAqDQotICogTk9URTog
QWxsIGFzc2VydHMgbXVzdCBiZSBsb2NhdGVkIGluIGEgdGVzdCgpIG9yIGEgc3RlcCBvZiBhbiBh
c3luY190ZXN0KCkuDQotICogICAgICAgYXNzZXJ0cyBvdXRzaWRlIHRoZXNlIHBsYWNlcyB3b24n
dCBiZSBkZXRlY3RlZCBjb3JyZWN0bHkgYnkgdGhlIGhhcm5lc3MNCi0gKiAgICAgICBhbmQgbWF5
IGNhdXNlIGEgZmlsZSB0byBzdG9wIHRlc3RpbmcuDQotICoNCi0gKiA9PSBTZXR1cCA9PQ0KLSAq
DQotICogU29tZXRpbWVzIHRlc3RzIHJlcXVpcmUgbm9uLXRyaXZpYWwgc2V0dXAgdGhhdCBtYXkg
ZmFpbC4gRm9yIHRoaXMgcHVycG9zZQ0KLSAqIHRoZXJlIGlzIGEgc2V0dXAoKSBmdW5jdGlvbiwg
dGhhdCBtYXkgYmUgY2FsbGVkIHdpdGggb25lIG9yIHR3byBhcmd1bWVudHMuDQotICogVGhlIHR3
byBhcmd1bWVudCB2ZXJzaW9uIGlzOg0KLSAqDQotICogc2V0dXAoZnVuYywgcHJvcGVydGllcykN
Ci0gKg0KLSAqIFRoZSBvbmUgYXJndW1lbnQgdmVyc2lvbnMgbWF5IG9taXQgZWl0aGVyIGFyZ3Vt
ZW50Lg0KLSAqIGZ1bmMgaXMgYSBmdW5jdGlvbiB0byBiZSBydW4gc3luY2hyb25vdXNseS4gc2V0
dXAoKSBiZWNvbWVzIGEgbm8tb3Agb25jZQ0KLSAqIGFueSB0ZXN0cyBoYXZlIHJldHVybmVkIHJl
c3VsdHMuIFByb3BlcnRpZXMgYXJlIGdsb2JhbCBwcm9wZXJ0aWVzIG9mIHRoZSB0ZXN0DQotICog
aGFybmVzcy4gQ3VycmVudGx5IHJlY29nbmlzZWQgcHJvcGVydGllcyBhcmU6DQotICoNCi0gKiB0
aW1lb3V0IC0gVGhlIHRpbWUgaW4gbXMgYWZ0ZXIgd2hpY2ggdGhlIGhhcm5lc3Mgc2hvdWxkIHN0
b3Agd2FpdGluZyBmb3INCi0gKiAgICAgICAgICAgdGVzdHMgdG8gY29tcGxldGUgKHRoaXMgaXMg
ZGlmZmVyZW50IHRvIHRoZSBwZXItdGVzdCB0aW1lb3V0DQotICogICAgICAgICAgIGJlY2F1c2Ug
YXN5bmMgdGVzdHMgZG8gbm90IHN0YXJ0IHRoZWlyIHRpbWVyIHVudGlsIC5zdGVwIGlzIGNhbGxl
ZCkNCi0gKg0KLSAqIGV4cGxpY2l0X2RvbmUgLSBXYWl0IGZvciBhbiBleHBsaWNpdCBjYWxsIHRv
IGRvbmUoKSBiZWZvcmUgZGVjbGFyaW5nIGFsbA0KLSAqICAgICAgICAgICAgICAgICB0ZXN0cyBj
b21wbGV0ZSAoc2VlIGJlbG93KQ0KLSAqDQotICogb3V0cHV0X2RvY3VtZW50IC0gVGhlIGRvY3Vt
ZW50IHRvIHdoaWNoIHJlc3VsdHMgc2hvdWxkIGJlIGxvZ2dlZC4gQnkgZGVmYXVsdA0KLSAqICAg
ICAgICAgICAgICAgICAgIHRoaXMgaXMgdGhlIGN1cnJlbnQgZG9jdW1lbnQgYnV0IGNvdWxkIGJl
IGFuIGFuY2VzdG9yDQotICogICAgICAgICAgICAgICAgICAgZG9jdW1lbnQgaW4gc29tZSBjYXNl
cyBlLmcuIGEgU1ZHIHRlc3QgbG9hZGVkIGluIGFuIEhUTUwNCi0gKiAgICAgICAgICAgICAgICAg
ICB3cmFwcGVyDQotICoNCi0gKiBleHBsaWNpdF90aW1lb3V0IC0gZGlzYWJsZSBmaWxlIHRpbWVv
dXQ7IG9ubHkgc3RvcCB3YWl0aW5nIGZvciByZXN1bHRzDQotICogICAgICAgICAgICAgICAgICAg
IHdoZW4gdGhlIHRpbWVvdXQoKSBmdW5jdGlvbiBpcyBjYWxsZWQgKHR5cGljYWxseSBmb3INCi0g
KiAgICAgICAgICAgICAgICAgICAgdXNlIHdoZW4gaW50ZWdyYXRpbmcgd2l0aCBzb21lIGV4aXN0
aW5nIHRlc3QgZnJhbWV3b3JrDQotICogICAgICAgICAgICAgICAgICAgIHRoYXQgaGFzIGl0cyBv
d24gdGltZW91dCBtZWNoYW5pc20pLg0KLSAqDQotICogPT0gRGV0ZXJtaW5pbmcgd2hlbiBhbGwg
dGVzdHMgYXJlIGNvbXBsZXRlID09DQotICoNCi0gKiBCeSBkZWZhdWx0IHRoZSB0ZXN0IGhhcm5l
c3Mgd2lsbCBhc3N1bWUgdGhlcmUgYXJlIG5vIG1vcmUgcmVzdWx0cyB0byBjb21lDQotICogd2hl
bjoNCi0gKiAxKSBUaGVyZSBhcmUgbm8gVGVzdCBvYmplY3RzIHRoYXQgaGF2ZSBiZWVuIGNyZWF0
ZWQgYnV0IG5vdCBjb21wbGV0ZWQNCi0gKiAyKSBUaGUgbG9hZCBldmVudCBvbiB0aGUgZG9jdW1l
bnQgaGFzIGZpcmVkDQotICoNCi0gKiBUaGlzIGJlaGF2aW91ciBjYW4gYmUgb3ZlcnJpZGRlbiBi
eSBzZXR0aW5nIHRoZSBleHBsaWNpdF9kb25lIHByb3BlcnR5IHRvDQotICogdHJ1ZSBpbiBhIGNh
bGwgdG8gc2V0dXAoKS4gSWYgZXhwbGljaXRfZG9uZSBpcyB0cnVlLCB0aGUgdGVzdCBoYXJuZXNz
IHdpbGwNCi0gKiBub3QgYXNzdW1lIGl0IGlzIGRvbmUgdW50aWwgdGhlIGdsb2JhbCBkb25lKCkg
ZnVuY3Rpb24gaXMgY2FsbGVkLiBPbmNlIGRvbmUoKQ0KLSAqIGlzIGNhbGxlZCwgdGhlIHR3byBj
b25kaXRpb25zIGFib3ZlIGFwcGx5IGxpa2Ugbm9ybWFsLg0KLSAqDQotICogPT0gR2VuZXJhdGlu
ZyB0ZXN0cyA9PQ0KLSAqDQotICogTk9URTogdGhpcyBmdW5jdGlvbmFsaXR5IG1heSBiZSByZW1v
dmVkDQotICoNCi0gKiBUaGVyZSBhcmUgc2NlbmFyaW9zIGluIHdoaWNoIGlzIGlzIGRlc2lyYWJs
ZSB0byBjcmVhdGUgYSBsYXJnZSBudW1iZXIgb2YNCi0gKiAoc3luY2hyb25vdXMpIHRlc3RzIHRo
YXQgYXJlIGludGVybmFsbHkgc2ltaWxhciBidXQgdmFyeSBpbiB0aGUgcGFyYW1ldGVycw0KLSAq
IHVzZWQuIFRvIG1ha2UgdGhpcyBlYXNpZXIsIHRoZSBnZW5lcmF0ZV90ZXN0cyBmdW5jdGlvbiBh
bGxvd3MgYSBzaW5nbGUNCi0gKiBmdW5jdGlvbiB0byBiZSBjYWxsZWQgd2l0aCBlYWNoIHNldCBv
ZiBwYXJhbWV0ZXJzIGluIGEgbGlzdDoNCi0gKg0KLSAqIGdlbmVyYXRlX3Rlc3RzKHRlc3RfZnVu
Y3Rpb24sIHBhcmFtZXRlcl9saXN0cywgcHJvcGVydGllcykNCi0gKg0KLSAqIEZvciBleGFtcGxl
Og0KLSAqDQotICogZ2VuZXJhdGVfdGVzdHMoYXNzZXJ0X2VxdWFscywgWw0KLSAqICAgICBbIlN1
bSBvbmUgYW5kIG9uZSIsIDErMSwgMl0sDQotICogICAgIFsiU3VtIG9uZSBhbmQgemVybyIsIDEr
MCwgMV0NCi0gKiAgICAgXSkNCi0gKg0KLSAqIElzIGVxdWl2YWxlbnQgdG86DQotICoNCi0gKiB0
ZXN0KGZ1bmN0aW9uKCkge2Fzc2VydF9lcXVhbHMoMSsxLCAyKX0sICJTdW0gb25lIGFuZCBvbmUi
KQ0KLSAqIHRlc3QoZnVuY3Rpb24oKSB7YXNzZXJ0X2VxdWFscygxKzAsIDEpfSwgIlN1bSBvbmUg
YW5kIHplcm8iKQ0KLSAqDQotICogTm90ZSB0aGF0IHRoZSBmaXJzdCBpdGVtIGluIGVhY2ggcGFy
YW1ldGVyIGxpc3QgY29ycmVzcG9uZHMgdG8gdGhlIG5hbWUgb2YNCi0gKiB0aGUgdGVzdC4NCi0g
Kg0KLSAqIFRoZSBwcm9wZXJ0aWVzIGFyZ3VtZW50IGlzIGlkZW50aWNhbCB0byB0aGF0IGZvciB0
ZXN0KCkuIFRoaXMgbWF5IGJlIGEgDQotICogc2luZ2xlIG9iamVjdCAodXNlZCBmb3IgYWxsIGdl
bmVyYXRlZCB0ZXN0cykgb3IgYW4gYXJyYXkuDQotICoNCi0gKiA9PSBDYWxsYmFjayBBUEkgPT0N
Ci0gKg0KLSAqIFRoZSBmcmFtZXdvcmsgcHJvdmlkZXMgY2FsbGJhY2tzIGNvcnJlc3BvbmRpbmcg
dG8gMyBldmVudHM6DQotICoNCi0gKiBzdGFydCAtIGhhcHBlbnMgd2hlbiB0aGUgZmlyc3QgVGVz
dCBpcyBjcmVhdGVkDQotICogcmVzdWx0IC0gaGFwcGVucyB3aGVuIGEgdGVzdCByZXN1bHQgaXMg
cmVjaWV2ZWQNCi0gKiBjb21wbGV0ZSAtIGhhcHBlbnMgd2hlbiBhbGwgcmVzdWx0cyBhcmUgcmVj
aWV2ZWQNCi0gKg0KLSAqIFRoZSBwYWdlIGRlZmluaW5nIHRoZSB0ZXN0cyBtYXkgYWRkIGNhbGxi
YWNrcyBmb3IgdGhlc2UgZXZlbnRzIGJ5IGNhbGxpbmcNCi0gKiB0aGUgZm9sbG93aW5nIG1ldGhv
ZHM6DQotICoNCi0gKiAgIGFkZF9zdGFydF9jYWxsYmFjayhjYWxsYmFjaykgLSBjYWxsYmFjayBj
YWxsZWQgd2l0aCBubyBhcmd1bWVudHMNCi0gKiAgIGFkZF9yZXN1bHRfY2FsbGJhY2soY2FsbGJh
Y2spIC0gY2FsbGJhY2sgY2FsbGVkIHdpdGggYSB0ZXN0IGFyZ3VtZW50DQotICogICBhZGRfY29t
cGxldGlvbl9jYWxsYmFjayhjYWxsYmFjaykgLSBjYWxsYmFjayBjYWxsZWQgd2l0aCBhbiBhcnJh
eSBvZiB0ZXN0cw0KLSAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYW5k
IGFuIHN0YXR1cyBvYmplY3QNCi0gKg0KLSAqIHRlc3RzIGhhdmUgdGhlIGZvbGxvd2luZyBwcm9w
ZXJ0aWVzOg0KLSAqICAgc3RhdHVzOiBBIHN0YXR1cyBjb2RlLiBUaGlzIGNhbiBiZSBjb21wYXJl
ZCB0byB0aGUgUEFTUywgRkFJTCwgVElNRU9VVCBhbmQNCi0gKiAgICAgICAgICAgTk9UUlVOIHBy
b3BlcnRpZXMgb24gdGhlIHRlc3Qgb2JqZWN0DQotICogICBtZXNzYWdlOiBBIG1lc3NhZ2UgaW5k
aWNhdGluZyB0aGUgcmVhc29uIGZvciBmYWlsdXJlLiBJbiB0aGUgZnV0dXJlIHRoaXMNCi0gKiAg
ICAgICAgICAgIHdpbGwgYWx3YXlzIGJlIGEgc3RyaW5nDQotICoNCi0gKiAgVGhlIHN0YXR1cyBv
YmplY3QgZ2l2ZXMgdGhlIG92ZXJhbGwgc3RhdHVzIG9mIHRoZSBoYXJuZXNzLiBJdCBoYXMgdGhl
DQotICogIGZvbGxvd2luZyBwcm9wZXJ0aWVzOg0KLSAqICAgIHN0YXR1czogQ2FuIGJlIGNvbXBh
cmVkIHRvIHRoZSBPSywgRVJST1IgYW5kIFRJTUVPVVQgcHJvcGVydGllcw0KLSAqICAgIG1lc3Nh
Z2U6IEFuIGVycm9yIG1lc3NhZ2Ugc2V0IHdoZW4gdGhlIHN0YXR1cyBpcyBFUlJPUg0KLSAqDQot
ICogPT0gRXh0ZXJuYWwgQVBJID09DQotICoNCi0gKiBJbiBvcmRlciB0byBjb2xsZWN0IHRoZSBy
ZXN1bHRzIG9mIG11bHRpcGxlIHBhZ2VzIGNvbnRhaW5pbmcgdGVzdHMsIHRoZSB0ZXN0DQotICog
aGFybmVzcyB3aWxsLCB3aGVuIGxvYWRlZCBpbiBhIG5lc3RlZCBicm93c2luZyBjb250ZXh0LCBh
dHRlbXB0IHRvIGNhbGwNCi0gKiBjZXJ0YWluIGZ1bmN0aW9ucyBpbiBlYWNoIGFuY2VzdG9yIGFu
ZCBvcGVuZXIgYnJvd3NpbmcgY29udGV4dDoNCi0gKg0KLSAqIHN0YXJ0IC0gc3RhcnRfY2FsbGJh
Y2sNCi0gKiByZXN1bHQgLSByZXN1bHRfY2FsbGJhY2sNCi0gKiBjb21wbGV0ZSAtIGNvbXBsZXRp
b25fY2FsbGJhY2sNCi0gKg0KLSAqIFRoZXNlIGFyZSBnaXZlbiB0aGUgc2FtZSBhcmd1bWVudHMg
YXMgdGhlIGNvcnJlc3BvbmRpbmcgaW50ZXJuYWwgY2FsbGJhY2tzDQotICogZGVzY3JpYmVkIGFi
b3ZlLg0KLSAqDQotICogPT0gRXh0ZXJuYWwgQVBJIHRocm91Z2ggY3Jvc3MtZG9jdW1lbnQgbWVz
c2FnaW5nID09DQotICoNCi0gKiBXaGVyZSBzdXBwb3J0ZWQsIHRoZSB0ZXN0IGhhcm5lc3Mgd2ls
bCBhbHNvIHNlbmQgbWVzc2FnZXMgdXNpbmcNCi0gKiBjcm9zcy1kb2N1bWVudCBtZXNzYWdpbmcg
dG8gZWFjaCBhbmNlc3RvciBhbmQgb3BlbmVyIGJyb3dzaW5nIGNvbnRleHQuIFNpbmNlDQotICog
aXQgdXNlcyB0aGUgd2lsZGNhcmQga2V5d29yZCAoKiksIGNyb3NzLW9yaWdpbiBjb21tdW5pY2F0
aW9uIGlzIGVuYWJsZWQgYW5kDQotICogc2NyaXB0IG9uIGRpZmZlcmVudCBvcmlnaW5zIGNhbiBj
b2xsZWN0IHRoZSByZXN1bHRzLg0KLSAqDQotICogVGhpcyBBUEkgZm9sbG93cyBzaW1pbGFyIGNv
bnZlbnRpb25zIGFzIHRob3NlIGRlc2NyaWJlZCBhYm92ZSBvbmx5IHNsaWdodGx5DQotICogbW9k
aWZpZWQgdG8gYWNjb21tb2RhdGUgbWVzc2FnZSBldmVudCBBUEkuIEVhY2ggbWVzc2FnZSBpcyBz
ZW50IGJ5IHRoZSBoYXJuZXNzDQotICogaXMgcGFzc2VkIGEgc2luZ2xlIHZhbmlsbGEgb2JqZWN0
LCBhdmFpbGFibGUgYXMgdGhlIGBkYXRhYCBwcm9wZXJ0eSBvZiB0aGUNCi0gKiBldmVudCBvYmpl
Y3QuIFRoZXNlIG9iamVjdHMgYXJlIHN0cnVjdHVyZXMgYXMgZm9sbG93czoNCi0gKg0KLSAqIHN0
YXJ0IC0geyB0eXBlOiAic3RhcnQiIH0NCi0gKiByZXN1bHQgLSB7IHR5cGU6ICJyZXN1bHQiLCB0
ZXN0OiBUZXN0IH0NCi0gKiBjb21wbGV0ZSAtIHsgdHlwZTogImNvbXBsZXRlIiwgdGVzdHM6IFtU
ZXN0LCAuLi5dLCBzdGF0dXM6IFRlc3RzU3RhdHVzIH0NCi0gKg0KLSAqID09IExpc3Qgb2YgYXNz
ZXJ0aW9ucyA9PQ0KLSAqDQotICogYXNzZXJ0X3RydWUoYWN0dWFsLCBkZXNjcmlwdGlvbikNCi0g
KiAgIGFzc2VydHMgdGhhdCAvYWN0dWFsLyBpcyBzdHJpY3RseSB0cnVlDQotICoNCi0gKiBhc3Nl
cnRfZmFsc2UoYWN0dWFsLCBkZXNjcmlwdGlvbikNCi0gKiAgIGFzc2VydHMgdGhhdCAvYWN0dWFs
LyBpcyBzdHJpY3RseSBmYWxzZQ0KLSAqDQotICogYXNzZXJ0X2VxdWFscyhhY3R1YWwsIGV4cGVj
dGVkLCBkZXNjcmlwdGlvbikNCi0gKiAgIGFzc2VydHMgdGhhdCAvYWN0dWFsLyBpcyB0aGUgc2Ft
ZSB2YWx1ZSBhcyAvZXhwZWN0ZWQvDQotICoNCi0gKiBhc3NlcnRfbm90X2VxdWFscyhhY3R1YWws
IGV4cGVjdGVkLCBkZXNjcmlwdGlvbikNCi0gKiAgIGFzc2VydHMgdGhhdCAvYWN0dWFsLyBpcyBh
IGRpZmZlcmVudCB2YWx1ZSB0byAvZXhwZWN0ZWQvLiBZZXMsIHRoaXMgbWVhbnMNCi0gKiAgIHRo
YXQgImV4cGVjdGVkIiBpcyBhIG1pc25vbWVyDQotICoNCi0gKiBhc3NlcnRfaW5fYXJyYXkoYWN0
dWFsLCBleHBlY3RlZCwgZGVzY3JpcHRpb24pDQotICogICBhc3NlcnRzIHRoYXQgL2V4cGVjdGVk
LyBpcyBhbiBBcnJheSwgYW5kIC9hY3R1YWwvIGlzIGVxdWFsIHRvIG9uZSBvZiB0aGUNCi0gKiAg
IG1lbWJlcnMgLS0gZXhwZWN0ZWQuaW5kZXhPZihhY3R1YWwpICE9IC0xDQotICoNCi0gKiBhc3Nl
cnRfYXJyYXlfZXF1YWxzKGFjdHVhbCwgZXhwZWN0ZWQsIGRlc2NyaXB0aW9uKQ0KLSAqICAgYXNz
ZXJ0cyB0aGF0IC9hY3R1YWwvIGFuZCAvZXhwZWN0ZWQvIGhhdmUgdGhlIHNhbWUgbGVuZ3RoIGFu
ZCB0aGUgdmFsdWUgb2YNCi0gKiAgIGVhY2ggaW5kZXhlZCBwcm9wZXJ0eSBpbiAvYWN0dWFsLyBp
cyB0aGUgc3RyaWN0bHkgZXF1YWwgdG8gdGhlIGNvcnJlc3BvbmRpbmcNCi0gKiAgIHByb3BlcnR5
IHZhbHVlIGluIC9leHBlY3RlZC8NCi0gKg0KLSAqIGFzc2VydF9hcHByb3hfZXF1YWxzKGFjdHVh
bCwgZXhwZWN0ZWQsIGVwc2lsb24sIGRlc2NyaXB0aW9uKQ0KLSAqICAgYXNzZXJ0cyB0aGF0IC9h
Y3R1YWwvIGlzIGEgbnVtYmVyIHdpdGhpbiArLy0gL2Vwc2lsb24vIG9mIC9leHBlY3RlZC8NCi0g
Kg0KLSAqIGFzc2VydF9yZWdleHBfbWF0Y2goYWN0dWFsLCBleHBlY3RlZCwgZGVzY3JpcHRpb24p
DQotICogICBhc3NlcnRzIHRoYXQgL2FjdHVhbC8gbWF0Y2hlcyB0aGUgcmVnZXhwIC9leHBlY3Rl
ZC8NCi0gKg0KLSAqIGFzc2VydF9jbGFzc19zdHJpbmcob2JqZWN0LCBjbGFzc19uYW1lLCBkZXNj
cmlwdGlvbikNCi0gKiAgIGFzc2VydHMgdGhhdCB0aGUgY2xhc3Mgc3RyaW5nIG9mIC9vYmplY3Qv
IGFzIHJldHVybmVkIGluDQotICogICBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nIGlzIGVxdWFs
IHRvIC9jbGFzc19uYW1lLy4NCi0gKg0KLSAqIGFzc2VydF9vd25fcHJvcGVydHkob2JqZWN0LCBw
cm9wZXJ0eV9uYW1lLCBkZXNjcmlwdGlvbikNCi0gKiAgIGFzc2VydCB0aGF0IG9iamVjdCBoYXMg
b3duIHByb3BlcnR5IHByb3BlcnR5X25hbWUNCi0gKg0KLSAqIGFzc2VydF9pbmhlcml0cyhvYmpl
Y3QsIHByb3BlcnR5X25hbWUsIGRlc2NyaXB0aW9uKQ0KLSAqICAgYXNzZXJ0IHRoYXQgb2JqZWN0
IGRvZXMgbm90IGhhdmUgYW4gb3duIHByb3BlcnR5IG5hbWVkIHByb3BlcnR5X25hbWUNCi0gKiAg
IGJ1dCB0aGF0IHByb3BlcnR5X25hbWUgaXMgcHJlc2VudCBpbiB0aGUgcHJvdG90eXBlIGNoYWlu
IGZvciBvYmplY3QNCi0gKg0KLSAqIGFzc2VydF9pZGxfYXR0cmlidXRlKG9iamVjdCwgYXR0cmli
dXRlX25hbWUsIGRlc2NyaXB0aW9uKQ0KLSAqICAgYXNzZXJ0IHRoYXQgYW4gb2JqZWN0IHRoYXQg
aXMgYW4gaW5zdGFuY2Ugb2Ygc29tZSBpbnRlcmZhY2UgaGFzIHRoZQ0KLSAqICAgYXR0cmlidXRl
IGF0dHJpYnV0ZV9uYW1lIGZvbGxvd2luZyB0aGUgY29uZGl0aW9ucyBzcGVjaWZpZWQgYnkgV2Vi
SURMDQotICoNCi0gKiBhc3NlcnRfcmVhZG9ubHkob2JqZWN0LCBwcm9wZXJ0eV9uYW1lLCBkZXNj
cmlwdGlvbikNCi0gKiAgIGFzc2VydCB0aGF0IHByb3BlcnR5IHByb3BlcnR5X25hbWUgb24gb2Jq
ZWN0IGlzIHJlYWRvbmx5DQotICoNCi0gKiBhc3NlcnRfdGhyb3dzKGNvZGUsIGZ1bmMsIGRlc2Ny
aXB0aW9uKQ0KLSAqICAgY29kZSAtIHRoZSBleHBlY3RlZCBleGNlcHRpb246DQotICogICAgIG8g
c3RyaW5nOiB0aGUgdGhyb3duIGV4Y2VwdGlvbiBtdXN0IGJlIGEgRE9NRXhjZXB0aW9uIHdpdGgg
dGhlIGdpdmVuDQotICogICAgICAgICAgICAgICBuYW1lLCBlLmcuLCAiVGltZW91dEVycm9yIiAo
Zm9yIGNvbXBhdGliaWxpdHkgd2l0aCBleGlzdGluZw0KLSAqICAgICAgICAgICAgICAgdGVzdHMs
IGEgY29uc3RhbnQgaXMgYWxzbyBzdXBwb3J0ZWQsIGUuZy4sICJUSU1FT1VUX0VSUiIpDQotICog
ICAgIG8gb2JqZWN0OiB0aGUgdGhyb3duIGV4Y2VwdGlvbiBtdXN0IGhhdmUgYSBwcm9wZXJ0eSBj
YWxsZWQgIm5hbWUiIHRoYXQNCi0gKiAgICAgICAgICAgICAgIG1hdGNoZXMgY29kZS5uYW1lDQot
ICogICAgIG8gbnVsbDogICBhbGxvdyBhbnkgZXhjZXB0aW9uIChpbiBnZW5lcmFsLCBvbmUgb2Yg
dGhlIG9wdGlvbnMgYWJvdmUNCi0gKiAgICAgICAgICAgICAgIHNob3VsZCBiZSB1c2VkKQ0KLSAq
ICAgZnVuYyAtIGEgZnVuY3Rpb24gdGhhdCBzaG91bGQgdGhyb3cNCi0gKg0KLSAqIGFzc2VydF91
bnJlYWNoZWQoZGVzY3JpcHRpb24pDQotICogICBhc3NlcnRzIGlmIGNhbGxlZC4gVXNlZCB0byBl
bnN1cmUgdGhhdCBzb21lIGNvZGVwYXRoIGlzICpub3QqIHRha2VuIGUuZy4NCi0gKiAgIGFuIGV2
ZW50IGRvZXMgbm90IGZpcmUuDQotICoNCi0gKiBhc3NlcnRfYW55KGFzc2VydF9mdW5jLCBhY3R1
YWwsIGV4cGVjdGVkX2FycmF5LCBleHRyYV9hcmdfMSwgLi4uIGV4dHJhX2FyZ19OKQ0KLSAqICAg
YXNzZXJ0cyB0aGF0IG9uZSBhc3NlcnRfZnVuYyhhY3R1YWwsIGV4cGVjdGVkX2FycmF5X04sIGV4
dHJhX2FyZzEsIC4uLiwgZXh0cmFfYXJnX04pDQotICogICBpcyB0cnVlIGZvciBzb21lIGV4cGVj
dGVkX2FycmF5X04gaW4gZXhwZWN0ZWRfYXJyYXkuIFRoaXMgb25seSB3b3JrcyBmb3IgYXNzZXJ0
X2Z1bmMNCi0gKiAgIHdpdGggc2lnbmF0dXJlIGFzc2VydF9mdW5jKGFjdHVhbCwgZXhwZWN0ZWQs
IGFyZ3NfMSwgLi4uLCBhcmdzX04pLiBOb3RlIHRoYXQgdGVzdHMNCi0gKiAgIHdpdGggbXVsdGlw
bGUgYWxsb3dlZCBwYXNzIGNvbmRpdGlvbnMgYXJlIGJhZCBwcmFjdGljZSB1bmxlc3MgdGhlIHNw
ZWMgc3BlY2lmaWNhbGx5DQotICogICBhbGxvd3MgbXVsdGlwbGUgYmVoYXZpb3Vycy4gVGVzdCBh
dXRob3JzIHNob3VsZCBub3QgdXNlIHRoaXMgbWV0aG9kIHNpbXBseSB0byBoaWRlIA0KLSAqICAg
VUEgYnVncy4NCi0gKg0KLSAqIGFzc2VydF9leGlzdHMob2JqZWN0LCBwcm9wZXJ0eV9uYW1lLCBk
ZXNjcmlwdGlvbikNCi0gKiAgICoqKiBkZXByZWNhdGVkICoqKg0KLSAqICAgYXNzZXJ0cyB0aGF0
IG9iamVjdCBoYXMgYW4gb3duIHByb3BlcnR5IHByb3BlcnR5X25hbWUNCi0gKg0KLSAqIGFzc2Vy
dF9ub3RfZXhpc3RzKG9iamVjdCwgcHJvcGVydHlfbmFtZSwgZGVzY3JpcHRpb24pDQotICogICAq
KiogZGVwcmVjYXRlZCAqKioNCi0gKiAgIGFzc2VydCB0aGF0IG9iamVjdCBkb2VzIG5vdCBoYXZl
IG93biBwcm9wZXJ0eSBwcm9wZXJ0eV9uYW1lDQotICovDQotDQotKGZ1bmN0aW9uICgpDQotew0K
LSAgICB2YXIgZGVidWcgPSBmYWxzZTsNCi0gICAgLy8gZGVmYXVsdCB0aW1lb3V0IGlzIDUgc2Vj
b25kcywgdGVzdCBjYW4gb3ZlcnJpZGUgaWYgbmVlZGVkDQotICAgIHZhciBzZXR0aW5ncyA9IHsN
Ci0gICAgICBvdXRwdXQ6dHJ1ZSwNCi0gICAgICB0aW1lb3V0OjUwMDAsDQotICAgICAgdGVzdF90
aW1lb3V0OjIwMDANCi0gICAgfTsNCi0NCi0gICAgdmFyIHhodG1sX25zID0gImh0dHA6Ly93d3cu
dzMub3JnLzE5OTkveGh0bWwiOw0KLQ0KLSAgICAvLyBzY3JpcHRfcHJlZml4IGlzIHVzZWQgYnkg
T3V0cHV0LnByb3RvdHlwZS5zaG93X3Jlc3VsdHMoKSB0byBmaWd1cmUgb3V0DQotICAgIC8vIHdo
ZXJlIHRvIGdldCB0ZXN0aGFybmVzcy5jc3MgZnJvbS4gIEl0J3MgZW5jbG9zZWQgaW4gYW4gZXh0
cmEgY2xvc3VyZSB0bw0KLSAgICAvLyBub3QgcG9sbHV0ZSB0aGUgbGlicmFyeSdzIG5hbWVzcGFj
ZSB3aXRoIHZhcmlhYmxlcyBsaWtlICJzcmMiLg0KLSAgICB2YXIgc2NyaXB0X3ByZWZpeCA9IG51
bGw7DQotICAgIChmdW5jdGlvbiAoKQ0KLSAgICB7DQotICAgICAgICB2YXIgc2NyaXB0cyA9IGRv
Y3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCJzY3JpcHQiKTsNCi0gICAgICAgIGZvciAodmFy
IGkgPSAwOyBpIDwgc2NyaXB0cy5sZW5ndGg7IGkrKykNCi0gICAgICAgIHsNCi0gICAgICAgICAg
ICBpZiAoc2NyaXB0c1tpXS5zcmMpDQotICAgICAgICAgICAgew0KLSAgICAgICAgICAgICAgICB2
YXIgc3JjID0gc2NyaXB0c1tpXS5zcmM7DQotICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgIGVs
c2UgaWYgKHNjcmlwdHNbaV0uaHJlZikNCi0gICAgICAgICAgICB7DQotICAgICAgICAgICAgICAg
IC8vU1ZHIGNhc2UNCi0gICAgICAgICAgICAgICAgdmFyIHNyYyA9IHNjcmlwdHNbaV0uaHJlZi5i
YXNlVmFsOw0KLSAgICAgICAgICAgIH0NCi0gICAgICAgICAgICBpZiAoc3JjICYmIHNyYy5zbGlj
ZShzcmMubGVuZ3RoIC0gInRlc3RoYXJuZXNzLmpzIi5sZW5ndGgpID09PSAidGVzdGhhcm5lc3Mu
anMiKQ0KLSAgICAgICAgICAgIHsNCi0gICAgICAgICAgICAgICAgc2NyaXB0X3ByZWZpeCA9IHNy
Yy5zbGljZSgwLCBzcmMubGVuZ3RoIC0gInRlc3RoYXJuZXNzLmpzIi5sZW5ndGgpOw0KLSAgICAg
ICAgICAgICAgICBicmVhazsNCi0gICAgICAgICAgICB9DQotICAgICAgICB9DQotICAgIH0pKCk7
DQotDQotICAgIC8qDQotICAgICAqIEFQSSBmdW5jdGlvbnMNCi0gICAgICovDQotDQotICAgIHZh
ciBuYW1lX2NvdW50ZXIgPSAwOw0KLSAgICBmdW5jdGlvbiBuZXh0X2RlZmF1bHRfbmFtZSgpDQot
ICAgIHsNCi0gICAgICAgIC8vRG9uJ3QgdXNlIGRvY3VtZW50LnRpdGxlIHRvIHdvcmsgYXJvdW5k
IGFuIE9wZXJhIGJ1ZyBpbiBYSFRNTCBkb2N1bWVudHMNCi0gICAgICAgIHZhciBwcmVmaXggPSBk
b2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZSgidGl0bGUiKS5sZW5ndGggPiAwID8NCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoInRpdGxl
IilbMF0uZmlyc3RDaGlsZC5kYXRhIDoNCi0gICAgICAgICAgICAgICAgICAgICAgICAgIlVudGl0
bGVkIjsNCi0gICAgICAgIHZhciBzdWZmaXggPSBuYW1lX2NvdW50ZXIgPiAwID8gIiAiICsgbmFt
ZV9jb3VudGVyIDogIiI7DQotICAgICAgICBuYW1lX2NvdW50ZXIrKzsNCi0gICAgICAgIHJldHVy
biBwcmVmaXggKyBzdWZmaXg7DQotICAgIH0NCi0NCi0gICAgZnVuY3Rpb24gdGVzdChmdW5jLCBu
YW1lLCBwcm9wZXJ0aWVzKQ0KLSAgICB7DQotICAgICAgICB2YXIgdGVzdF9uYW1lID0gbmFtZSA/
IG5hbWUgOiBuZXh0X2RlZmF1bHRfbmFtZSgpOw0KLSAgICAgICAgcHJvcGVydGllcyA9IHByb3Bl
cnRpZXMgPyBwcm9wZXJ0aWVzIDoge307DQotICAgICAgICB2YXIgdGVzdF9vYmogPSBuZXcgVGVz
dCh0ZXN0X25hbWUsIHByb3BlcnRpZXMpOw0KLSAgICAgICAgdGVzdF9vYmouc3RlcChmdW5jKTsN
Ci0gICAgICAgIGlmICh0ZXN0X29iai5zdGF0dXMgPT09IHRlc3Rfb2JqLk5PVFJVTikgew0KLSAg
ICAgICAgICAgIHRlc3Rfb2JqLmRvbmUoKTsNCi0gICAgICAgIH0NCi0gICAgfQ0KLQ0KLSAgICBm
dW5jdGlvbiBhc3luY190ZXN0KGZ1bmMsIG5hbWUsIHByb3BlcnRpZXMpDQotICAgIHsNCi0gICAg
ICAgIGlmICh0eXBlb2YgZnVuYyAhPT0gImZ1bmN0aW9uIikgew0KLSAgICAgICAgICAgIHByb3Bl
cnRpZXMgPSBuYW1lOw0KLSAgICAgICAgICAgIG5hbWUgPSBmdW5jOw0KLSAgICAgICAgICAgIGZ1
bmMgPSBudWxsOw0KLSAgICAgICAgfQ0KLSAgICAgICAgdmFyIHRlc3RfbmFtZSA9IG5hbWUgPyBu
YW1lIDogbmV4dF9kZWZhdWx0X25hbWUoKTsNCi0gICAgICAgIHByb3BlcnRpZXMgPSBwcm9wZXJ0
aWVzID8gcHJvcGVydGllcyA6IHt9Ow0KLSAgICAgICAgdmFyIHRlc3Rfb2JqID0gbmV3IFRlc3Qo
dGVzdF9uYW1lLCBwcm9wZXJ0aWVzKTsNCi0gICAgICAgIGlmIChmdW5jKSB7DQotICAgICAgICAg
ICAgdGVzdF9vYmouc3RlcChmdW5jLCB0ZXN0X29iaiwgdGVzdF9vYmopOw0KLSAgICAgICAgfQ0K
LSAgICAgICAgcmV0dXJuIHRlc3Rfb2JqOw0KLSAgICB9DQotDQotICAgIGZ1bmN0aW9uIHNldHVw
KGZ1bmNfb3JfcHJvcGVydGllcywgbWF5YmVfcHJvcGVydGllcykNCi0gICAgew0KLSAgICAgICAg
dmFyIGZ1bmMgPSBudWxsOw0KLSAgICAgICAgdmFyIHByb3BlcnRpZXMgPSB7fTsNCi0gICAgICAg
IGlmIChhcmd1bWVudHMubGVuZ3RoID09PSAyKSB7DQotICAgICAgICAgICAgZnVuYyA9IGZ1bmNf
b3JfcHJvcGVydGllczsNCi0gICAgICAgICAgICBwcm9wZXJ0aWVzID0gbWF5YmVfcHJvcGVydGll
czsNCi0gICAgICAgIH0gZWxzZSBpZiAoZnVuY19vcl9wcm9wZXJ0aWVzIGluc3RhbmNlb2YgRnVu
Y3Rpb24pew0KLSAgICAgICAgICAgIGZ1bmMgPSBmdW5jX29yX3Byb3BlcnRpZXM7DQotICAgICAg
ICB9IGVsc2Ugew0KLSAgICAgICAgICAgIHByb3BlcnRpZXMgPSBmdW5jX29yX3Byb3BlcnRpZXM7
DQotICAgICAgICB9DQotICAgICAgICB0ZXN0cy5zZXR1cChmdW5jLCBwcm9wZXJ0aWVzKTsNCi0g
ICAgICAgIG91dHB1dC5zZXR1cChwcm9wZXJ0aWVzKTsNCi0gICAgfQ0KLQ0KLSAgICBmdW5jdGlv
biBkb25lKCkgew0KLSAgICAgICAgdGVzdHMuZW5kX3dhaXQoKTsNCi0gICAgfQ0KLQ0KLSAgICBm
dW5jdGlvbiBnZW5lcmF0ZV90ZXN0cyhmdW5jLCBhcmdzLCBwcm9wZXJ0aWVzKSB7DQotICAgICAg
ICBmb3JFYWNoKGFyZ3MsIGZ1bmN0aW9uKHgsIGkpDQotICAgICAgICAgICAgICAgIHsNCi0gICAg
ICAgICAgICAgICAgICAgIHZhciBuYW1lID0geFswXTsNCi0gICAgICAgICAgICAgICAgICAgIHRl
c3QoZnVuY3Rpb24oKQ0KLSAgICAgICAgICAgICAgICAgICAgICAgICB7DQotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBmdW5jLmFwcGx5KHRoaXMsIHguc2xpY2UoMSkpOw0KLSAgICAgICAg
ICAgICAgICAgICAgICAgICB9LCANCi0gICAgICAgICAgICAgICAgICAgICAgICAgbmFtZSwgDQot
ICAgICAgICAgICAgICAgICAgICAgICAgIEFycmF5LmlzQXJyYXkocHJvcGVydGllcykgPyBwcm9w
ZXJ0aWVzW2ldIDogcHJvcGVydGllcyk7DQotICAgICAgICAgICAgICAgIH0pOw0KLSAgICB9DQot
DQotICAgIGZ1bmN0aW9uIG9uX2V2ZW50KG9iamVjdCwgZXZlbnQsIGNhbGxiYWNrKQ0KLSAgICB7
DQotICAgICAgb2JqZWN0LmFkZEV2ZW50TGlzdGVuZXIoZXZlbnQsIGNhbGxiYWNrLCBmYWxzZSk7
DQotICAgIH0NCi0NCi0gICAgZXhwb3NlKHRlc3QsICd0ZXN0Jyk7DQotICAgIGV4cG9zZShhc3lu
Y190ZXN0LCAnYXN5bmNfdGVzdCcpOw0KLSAgICBleHBvc2UoZ2VuZXJhdGVfdGVzdHMsICdnZW5l
cmF0ZV90ZXN0cycpOw0KLSAgICBleHBvc2Uoc2V0dXAsICdzZXR1cCcpOw0KLSAgICBleHBvc2Uo
ZG9uZSwgJ2RvbmUnKTsNCi0gICAgZXhwb3NlKG9uX2V2ZW50LCAnb25fZXZlbnQnKTsNCi0NCi0g
ICAgLyoNCi0gICAgICogUmV0dXJuIGEgc3RyaW5nIHRydW5jYXRlZCB0byB0aGUgZ2l2ZW4gbGVu
Z3RoLCB3aXRoIC4uLiBhZGRlZCBhdCB0aGUgZW5kDQotICAgICAqIGlmIGl0IHdhcyBsb25nZXIu
DQotICAgICAqLw0KLSAgICBmdW5jdGlvbiB0cnVuY2F0ZShzLCBsZW4pDQotICAgIHsNCi0gICAg
ICAgIGlmIChzLmxlbmd0aCA+IGxlbikgew0KLSAgICAgICAgICAgIHJldHVybiBzLnN1YnN0cmlu
ZygwLCBsZW4gLSAzKSArICIuLi4iOw0KLSAgICAgICAgfQ0KLSAgICAgICAgcmV0dXJuIHM7DQot
ICAgIH0NCi0NCi0gICAgLyoNCi0gICAgICogQ29udmVydCBhIHZhbHVlIHRvIGEgbmljZSwgaHVt
YW4tcmVhZGFibGUgc3RyaW5nDQotICAgICAqLw0KLSAgICBmdW5jdGlvbiBmb3JtYXRfdmFsdWUo
dmFsKQ0KLSAgICB7DQotICAgICAgICBpZiAoQXJyYXkuaXNBcnJheSh2YWwpKQ0KLSAgICAgICAg
ew0KLSAgICAgICAgICAgIHJldHVybiAiWyIgKyB2YWwubWFwKGZvcm1hdF92YWx1ZSkuam9pbigi
LCAiKSArICJdIjsNCi0gICAgICAgIH0NCi0NCi0gICAgICAgIHN3aXRjaCAodHlwZW9mIHZhbCkN
Ci0gICAgICAgIHsNCi0gICAgICAgIGNhc2UgInN0cmluZyI6DQotICAgICAgICAgICAgdmFsID0g
dmFsLnJlcGxhY2UoIlxcIiwgIlxcXFwiKTsNCi0gICAgICAgICAgICBmb3IgKHZhciBpID0gMDsg
aSA8IDMyOyBpKyspDQotICAgICAgICAgICAgew0KLSAgICAgICAgICAgICAgICB2YXIgcmVwbGFj
ZSA9ICJcXCI7DQotICAgICAgICAgICAgICAgIHN3aXRjaCAoaSkgew0KLSAgICAgICAgICAgICAg
ICBjYXNlIDA6IHJlcGxhY2UgKz0gIjAiOyBicmVhazsNCi0gICAgICAgICAgICAgICAgY2FzZSAx
OiByZXBsYWNlICs9ICJ4MDEiOyBicmVhazsNCi0gICAgICAgICAgICAgICAgY2FzZSAyOiByZXBs
YWNlICs9ICJ4MDIiOyBicmVhazsNCi0gICAgICAgICAgICAgICAgY2FzZSAzOiByZXBsYWNlICs9
ICJ4MDMiOyBicmVhazsNCi0gICAgICAgICAgICAgICAgY2FzZSA0OiByZXBsYWNlICs9ICJ4MDQi
OyBicmVhazsNCi0gICAgICAgICAgICAgICAgY2FzZSA1OiByZXBsYWNlICs9ICJ4MDUiOyBicmVh
azsNCi0gICAgICAgICAgICAgICAgY2FzZSA2OiByZXBsYWNlICs9ICJ4MDYiOyBicmVhazsNCi0g
ICAgICAgICAgICAgICAgY2FzZSA3OiByZXBsYWNlICs9ICJ4MDciOyBicmVhazsNCi0gICAgICAg
ICAgICAgICAgY2FzZSA4OiByZXBsYWNlICs9ICJiIjsgYnJlYWs7DQotICAgICAgICAgICAgICAg
IGNhc2UgOTogcmVwbGFjZSArPSAidCI7IGJyZWFrOw0KLSAgICAgICAgICAgICAgICBjYXNlIDEw
OiByZXBsYWNlICs9ICJuIjsgYnJlYWs7DQotICAgICAgICAgICAgICAgIGNhc2UgMTE6IHJlcGxh
Y2UgKz0gInYiOyBicmVhazsNCi0gICAgICAgICAgICAgICAgY2FzZSAxMjogcmVwbGFjZSArPSAi
ZiI7IGJyZWFrOw0KLSAgICAgICAgICAgICAgICBjYXNlIDEzOiByZXBsYWNlICs9ICJyIjsgYnJl
YWs7DQotICAgICAgICAgICAgICAgIGNhc2UgMTQ6IHJlcGxhY2UgKz0gIngwZSI7IGJyZWFrOw0K
LSAgICAgICAgICAgICAgICBjYXNlIDE1OiByZXBsYWNlICs9ICJ4MGYiOyBicmVhazsNCi0gICAg
ICAgICAgICAgICAgY2FzZSAxNjogcmVwbGFjZSArPSAieDEwIjsgYnJlYWs7DQotICAgICAgICAg
ICAgICAgIGNhc2UgMTc6IHJlcGxhY2UgKz0gIngxMSI7IGJyZWFrOw0KLSAgICAgICAgICAgICAg
ICBjYXNlIDE4OiByZXBsYWNlICs9ICJ4MTIiOyBicmVhazsNCi0gICAgICAgICAgICAgICAgY2Fz
ZSAxOTogcmVwbGFjZSArPSAieDEzIjsgYnJlYWs7DQotICAgICAgICAgICAgICAgIGNhc2UgMjA6
IHJlcGxhY2UgKz0gIngxNCI7IGJyZWFrOw0KLSAgICAgICAgICAgICAgICBjYXNlIDIxOiByZXBs
YWNlICs9ICJ4MTUiOyBicmVhazsNCi0gICAgICAgICAgICAgICAgY2FzZSAyMjogcmVwbGFjZSAr
PSAieDE2IjsgYnJlYWs7DQotICAgICAgICAgICAgICAgIGNhc2UgMjM6IHJlcGxhY2UgKz0gIngx
NyI7IGJyZWFrOw0KLSAgICAgICAgICAgICAgICBjYXNlIDI0OiByZXBsYWNlICs9ICJ4MTgiOyBi
cmVhazsNCi0gICAgICAgICAgICAgICAgY2FzZSAyNTogcmVwbGFjZSArPSAieDE5IjsgYnJlYWs7
DQotICAgICAgICAgICAgICAgIGNhc2UgMjY6IHJlcGxhY2UgKz0gIngxYSI7IGJyZWFrOw0KLSAg
ICAgICAgICAgICAgICBjYXNlIDI3OiByZXBsYWNlICs9ICJ4MWIiOyBicmVhazsNCi0gICAgICAg
ICAgICAgICAgY2FzZSAyODogcmVwbGFjZSArPSAieDFjIjsgYnJlYWs7DQotICAgICAgICAgICAg
ICAgIGNhc2UgMjk6IHJlcGxhY2UgKz0gIngxZCI7IGJyZWFrOw0KLSAgICAgICAgICAgICAgICBj
YXNlIDMwOiByZXBsYWNlICs9ICJ4MWUiOyBicmVhazsNCi0gICAgICAgICAgICAgICAgY2FzZSAz
MTogcmVwbGFjZSArPSAieDFmIjsgYnJlYWs7DQotICAgICAgICAgICAgICAgIH0NCi0gICAgICAg
ICAgICAgICAgdmFsID0gdmFsLnJlcGxhY2UoUmVnRXhwKFN0cmluZy5mcm9tQ2hhckNvZGUoaSks
ICJnIiksIHJlcGxhY2UpOw0KLSAgICAgICAgICAgIH0NCi0gICAgICAgICAgICByZXR1cm4gJyIn
ICsgdmFsLnJlcGxhY2UoLyIvZywgJ1xcIicpICsgJyInOw0KLSAgICAgICAgY2FzZSAiYm9vbGVh
biI6DQotICAgICAgICBjYXNlICJ1bmRlZmluZWQiOg0KLSAgICAgICAgICAgIHJldHVybiBTdHJp
bmcodmFsKTsNCi0gICAgICAgIGNhc2UgIm51bWJlciI6DQotICAgICAgICAgICAgLy8gSW4gSmF2
YVNjcmlwdCwgLTAgPT09IDAgYW5kIFN0cmluZygtMCkgPT0gIjAiLCBzbyB3ZSBoYXZlIHRvDQot
ICAgICAgICAgICAgLy8gc3BlY2lhbC1jYXNlLg0KLSAgICAgICAgICAgIGlmICh2YWwgPT09IC0w
ICYmIDEvdmFsID09PSAtSW5maW5pdHkpDQotICAgICAgICAgICAgew0KLSAgICAgICAgICAgICAg
ICByZXR1cm4gIi0wIjsNCi0gICAgICAgICAgICB9DQotICAgICAgICAgICAgcmV0dXJuIFN0cmlu
Zyh2YWwpOw0KLSAgICAgICAgY2FzZSAib2JqZWN0IjoNCi0gICAgICAgICAgICBpZiAodmFsID09
PSBudWxsKQ0KLSAgICAgICAgICAgIHsNCi0gICAgICAgICAgICAgICAgcmV0dXJuICJudWxsIjsN
Ci0gICAgICAgICAgICB9DQotDQotICAgICAgICAgICAgLy8gU3BlY2lhbC1jYXNlIE5vZGUgb2Jq
ZWN0cywgc2luY2UgdGhvc2UgY29tZSB1cCBhIGxvdCBpbiBteSB0ZXN0cy4gIEkNCi0gICAgICAg
ICAgICAvLyBpZ25vcmUgbmFtZXNwYWNlcy4gIEkgdXNlIGR1Y2stdHlwaW5nIGluc3RlYWQgb2Yg
aW5zdGFuY2VvZiwgYmVjYXVzZQ0KLSAgICAgICAgICAgIC8vIGluc3RhbmNlb2YgZG9lc24ndCB3
b3JrIGlmIHRoZSBub2RlIGlzIGZyb20gYW5vdGhlciB3aW5kb3cgKGxpa2UgYW4NCi0gICAgICAg
ICAgICAvLyBpZnJhbWUncyBjb250ZW50V2luZG93KToNCi0gICAgICAgICAgICAvLyBodHRwOi8v
d3d3LnczLm9yZy9CdWdzL1B1YmxpYy9zaG93X2J1Zy5jZ2k/aWQ9MTIyOTUNCi0gICAgICAgICAg
ICBpZiAoIm5vZGVUeXBlIiBpbiB2YWwNCi0gICAgICAgICAgICAmJiAibm9kZU5hbWUiIGluIHZh
bA0KLSAgICAgICAgICAgICYmICJub2RlVmFsdWUiIGluIHZhbA0KLSAgICAgICAgICAgICYmICJj
aGlsZE5vZGVzIiBpbiB2YWwpDQotICAgICAgICAgICAgew0KLSAgICAgICAgICAgICAgICBzd2l0
Y2ggKHZhbC5ub2RlVHlwZSkNCi0gICAgICAgICAgICAgICAgew0KLSAgICAgICAgICAgICAgICBj
YXNlIE5vZGUuRUxFTUVOVF9OT0RFOg0KLSAgICAgICAgICAgICAgICAgICAgdmFyIHJldCA9ICI8
IiArIHZhbC50YWdOYW1lLnRvTG93ZXJDYXNlKCk7DQotICAgICAgICAgICAgICAgICAgICBmb3Ig
KHZhciBpID0gMDsgaSA8IHZhbC5hdHRyaWJ1dGVzLmxlbmd0aDsgaSsrKQ0KLSAgICAgICAgICAg
ICAgICAgICAgew0KLSAgICAgICAgICAgICAgICAgICAgICAgIHJldCArPSAiICIgKyB2YWwuYXR0
cmlidXRlc1tpXS5uYW1lICsgJz0iJyArIHZhbC5hdHRyaWJ1dGVzW2ldLnZhbHVlICsgJyInOw0K
LSAgICAgICAgICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgICAgICAgICAgcmV0ICs9ICI+IiAr
IHZhbC5pbm5lckhUTUwgKyAiPC8iICsgdmFsLnRhZ05hbWUudG9Mb3dlckNhc2UoKSArICI+IjsN
Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiAiRWxlbWVudCBub2RlICIgKyB0cnVuY2F0ZShy
ZXQsIDYwKTsNCi0gICAgICAgICAgICAgICAgY2FzZSBOb2RlLlRFWFRfTk9ERToNCi0gICAgICAg
ICAgICAgICAgICAgIHJldHVybiAnVGV4dCBub2RlICInICsgdHJ1bmNhdGUodmFsLmRhdGEsIDYw
KSArICciJzsNCi0gICAgICAgICAgICAgICAgY2FzZSBOb2RlLlBST0NFU1NJTkdfSU5TVFJVQ1RJ
T05fTk9ERToNCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiAiUHJvY2Vzc2luZ0luc3RydWN0
aW9uIG5vZGUgd2l0aCB0YXJnZXQgIiArIGZvcm1hdF92YWx1ZSh0cnVuY2F0ZSh2YWwudGFyZ2V0
LCA2MCkpICsgIiBhbmQgZGF0YSAiICsgZm9ybWF0X3ZhbHVlKHRydW5jYXRlKHZhbC5kYXRhLCA2
MCkpOw0KLSAgICAgICAgICAgICAgICBjYXNlIE5vZGUuQ09NTUVOVF9OT0RFOg0KLSAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuICJDb21tZW50IG5vZGUgPCEtLSIgKyB0cnVuY2F0ZSh2YWwuZGF0
YSwgNjApICsgIi0tPiI7DQotICAgICAgICAgICAgICAgIGNhc2UgTm9kZS5ET0NVTUVOVF9OT0RF
Og0KLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuICJEb2N1bWVudCBub2RlIHdpdGggIiArIHZh
bC5jaGlsZE5vZGVzLmxlbmd0aCArICh2YWwuY2hpbGROb2Rlcy5sZW5ndGggPT0gMSA/ICIgY2hp
bGQiIDogIiBjaGlsZHJlbiIpOw0KLSAgICAgICAgICAgICAgICBjYXNlIE5vZGUuRE9DVU1FTlRf
VFlQRV9OT0RFOg0KLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuICJEb2N1bWVudFR5cGUgbm9k
ZSI7DQotICAgICAgICAgICAgICAgIGNhc2UgTm9kZS5ET0NVTUVOVF9GUkFHTUVOVF9OT0RFOg0K
LSAgICAgICAgICAgICAgICAgICAgcmV0dXJuICJEb2N1bWVudEZyYWdtZW50IG5vZGUgd2l0aCAi
ICsgdmFsLmNoaWxkTm9kZXMubGVuZ3RoICsgKHZhbC5jaGlsZE5vZGVzLmxlbmd0aCA9PSAxID8g
IiBjaGlsZCIgOiAiIGNoaWxkcmVuIik7DQotICAgICAgICAgICAgICAgIGRlZmF1bHQ6DQotICAg
ICAgICAgICAgICAgICAgICByZXR1cm4gIk5vZGUgb2JqZWN0IG9mIHVua25vd24gdHlwZSI7DQot
ICAgICAgICAgICAgICAgIH0NCi0gICAgICAgICAgICB9DQotDQotICAgICAgICAgICAgLy8gRmFs
bCB0aHJvdWdoIHRvIGRlZmF1bHQNCi0gICAgICAgIGRlZmF1bHQ6DQotICAgICAgICAgICAgcmV0
dXJuIHR5cGVvZiB2YWwgKyAnICInICsgdHJ1bmNhdGUoU3RyaW5nKHZhbCksIDYwKSArICciJzsN
Ci0gICAgICAgIH0NCi0gICAgfQ0KLSAgICBleHBvc2UoZm9ybWF0X3ZhbHVlLCAiZm9ybWF0X3Zh
bHVlIik7DQotDQotICAgIC8qDQotICAgICAqIEFzc2VydGlvbnMNCi0gICAgICovDQotDQotICAg
IGZ1bmN0aW9uIGFzc2VydF90cnVlKGFjdHVhbCwgZGVzY3JpcHRpb24pDQotICAgIHsNCi0gICAg
ICAgIGFzc2VydChhY3R1YWwgPT09IHRydWUsICJhc3NlcnRfdHJ1ZSIsIGRlc2NyaXB0aW9uLA0K
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImV4cGVjdGVkIHRydWUgZ290ICR7YWN0
dWFsfSIsIHthY3R1YWw6YWN0dWFsfSk7DQotICAgIH07DQotICAgIGV4cG9zZShhc3NlcnRfdHJ1
ZSwgImFzc2VydF90cnVlIik7DQotDQotICAgIGZ1bmN0aW9uIGFzc2VydF9mYWxzZShhY3R1YWws
IGRlc2NyaXB0aW9uKQ0KLSAgICB7DQotICAgICAgICBhc3NlcnQoYWN0dWFsID09PSBmYWxzZSwg
ImFzc2VydF9mYWxzZSIsIGRlc2NyaXB0aW9uLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICJleHBlY3RlZCBmYWxzZSBnb3QgJHthY3R1YWx9Iiwge2FjdHVhbDphY3R1YWx9KTsN
Ci0gICAgfTsNCi0gICAgZXhwb3NlKGFzc2VydF9mYWxzZSwgImFzc2VydF9mYWxzZSIpOw0KLQ0K
LSAgICBmdW5jdGlvbiBzYW1lX3ZhbHVlKHgsIHkpIHsNCi0gICAgICAgIGlmICh5ICE9PSB5KQ0K
LSAgICAgICAgew0KLSAgICAgICAgICAgIC8vTmFOIGNhc2UNCi0gICAgICAgICAgICByZXR1cm4g
eCAhPT0geDsNCi0gICAgICAgIH0NCi0gICAgICAgIGVsc2UgaWYgKHggPT09IDAgJiYgeSA9PT0g
MCkgew0KLSAgICAgICAgICAgIC8vRGlzdGluZ3Vpc2ggKzAgYW5kIC0wDQotICAgICAgICAgICAg
cmV0dXJuIDEveCA9PT0gMS95Ow0KLSAgICAgICAgfQ0KLSAgICAgICAgZWxzZQ0KLSAgICAgICAg
ew0KLSAgICAgICAgICAgIC8vdHlwaWNhbCBjYXNlDQotICAgICAgICAgICAgcmV0dXJuIHggPT09
IHk7DQotICAgICAgICB9DQotICAgIH0NCi0NCi0gICAgZnVuY3Rpb24gYXNzZXJ0X2VxdWFscyhh
Y3R1YWwsIGV4cGVjdGVkLCBkZXNjcmlwdGlvbikNCi0gICAgew0KLSAgICAgICAgIC8qDQotICAg
ICAgICAgICogVGVzdCBpZiB0d28gcHJpbWl0aXZlcyBhcmUgZXF1YWwgb3IgdHdvIG9iamVjdHMN
Ci0gICAgICAgICAgKiBhcmUgdGhlIHNhbWUgb2JqZWN0DQotICAgICAgICAgICovDQotICAgICAg
ICBpZiAodHlwZW9mIGFjdHVhbCAhPSB0eXBlb2YgZXhwZWN0ZWQpDQotICAgICAgICB7DQotICAg
ICAgICAgICAgYXNzZXJ0KGZhbHNlLCAiYXNzZXJ0X2VxdWFscyIsIGRlc2NyaXB0aW9uLA0KLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgImV4cGVjdGVkICgiICsgdHlwZW9mIGV4cGVjdGVkICsg
IikgJHtleHBlY3RlZH0gYnV0IGdvdCAoIiArIHR5cGVvZiBhY3R1YWwgKyAiKSAke2FjdHVhbH0i
LA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAge2V4cGVjdGVkOmV4cGVjdGVkLCBhY3R1YWw6
YWN0dWFsfSk7DQotICAgICAgICAgICAgcmV0dXJuOw0KLSAgICAgICAgfQ0KLSAgICAgICAgYXNz
ZXJ0KHNhbWVfdmFsdWUoYWN0dWFsLCBleHBlY3RlZCksICJhc3NlcnRfZXF1YWxzIiwgZGVzY3Jp
cHRpb24sDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImV4
cGVjdGVkICR7ZXhwZWN0ZWR9IGJ1dCBnb3QgJHthY3R1YWx9IiwNCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7ZXhwZWN0ZWQ6ZXhwZWN0ZWQsIGFjdHVhbDph
Y3R1YWx9KTsNCi0gICAgfTsNCi0gICAgZXhwb3NlKGFzc2VydF9lcXVhbHMsICJhc3NlcnRfZXF1
YWxzIik7DQotDQotICAgIGZ1bmN0aW9uIGFzc2VydF9ub3RfZXF1YWxzKGFjdHVhbCwgZXhwZWN0
ZWQsIGRlc2NyaXB0aW9uKQ0KLSAgICB7DQotICAgICAgICAgLyoNCi0gICAgICAgICAgKiBUZXN0
IGlmIHR3byBwcmltaXRpdmVzIGFyZSB1bmVxdWFsIG9yIHR3byBvYmplY3RzDQotICAgICAgICAg
ICogYXJlIGRpZmZlcmVudCBvYmplY3RzDQotICAgICAgICAgICovDQotICAgICAgICBhc3NlcnQo
IXNhbWVfdmFsdWUoYWN0dWFsLCBleHBlY3RlZCksICJhc3NlcnRfbm90X2VxdWFscyIsIGRlc2Ny
aXB0aW9uLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAi
Z290IGRpc2FsbG93ZWQgdmFsdWUgJHthY3R1YWx9IiwNCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAge2FjdHVhbDphY3R1YWx9KTsNCi0gICAgfTsNCi0gICAg
ZXhwb3NlKGFzc2VydF9ub3RfZXF1YWxzLCAiYXNzZXJ0X25vdF9lcXVhbHMiKTsNCi0NCi0gICAg
ZnVuY3Rpb24gYXNzZXJ0X2luX2FycmF5KGFjdHVhbCwgZXhwZWN0ZWQsIGRlc2NyaXB0aW9uKQ0K
LSAgICB7DQotICAgICAgICBhc3NlcnQoZXhwZWN0ZWQuaW5kZXhPZihhY3R1YWwpICE9IC0xLCAi
YXNzZXJ0X2luX2FycmF5IiwgZGVzY3JpcHRpb24sDQotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAidmFsdWUgJHthY3R1YWx9IG5vdCBpbiBhcnJheSAke2V4
cGVjdGVkfSIsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB7YWN0dWFsOmFjdHVhbCwgZXhwZWN0ZWQ6ZXhwZWN0ZWR9KTsNCi0gICAgfQ0KLSAgICBleHBv
c2UoYXNzZXJ0X2luX2FycmF5LCAiYXNzZXJ0X2luX2FycmF5Iik7DQotDQotICAgIGZ1bmN0aW9u
IGFzc2VydF9vYmplY3RfZXF1YWxzKGFjdHVhbCwgZXhwZWN0ZWQsIGRlc2NyaXB0aW9uKQ0KLSAg
ICB7DQotICAgICAgICAgLy9UaGlzIG5lZWRzIHRvIGJlIGltcHJvdmVkIGEgZ3JlYXQgZGVhbA0K
LSAgICAgICAgIGZ1bmN0aW9uIGNoZWNrX2VxdWFsKGFjdHVhbCwgZXhwZWN0ZWQsIHN0YWNrKQ0K
LSAgICAgICAgIHsNCi0gICAgICAgICAgICAgc3RhY2sucHVzaChhY3R1YWwpOw0KLQ0KLSAgICAg
ICAgICAgICB2YXIgcDsNCi0gICAgICAgICAgICAgZm9yIChwIGluIGFjdHVhbCkNCi0gICAgICAg
ICAgICAgew0KLSAgICAgICAgICAgICAgICAgYXNzZXJ0KGV4cGVjdGVkLmhhc093blByb3BlcnR5
KHApLCAiYXNzZXJ0X29iamVjdF9lcXVhbHMiLCBkZXNjcmlwdGlvbiwNCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInVuZXhwZWN0ZWQgcHJvcGVy
dHkgJHtwfSIsIHtwOnB9KTsNCi0NCi0gICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgYWN0dWFs
W3BdID09PSAib2JqZWN0IiAmJiBhY3R1YWxbcF0gIT09IG51bGwpDQotICAgICAgICAgICAgICAg
ICB7DQotICAgICAgICAgICAgICAgICAgICAgaWYgKHN0YWNrLmluZGV4T2YoYWN0dWFsW3BdKSA9
PT0gLTEpDQotICAgICAgICAgICAgICAgICAgICAgew0KLSAgICAgICAgICAgICAgICAgICAgICAg
ICBjaGVja19lcXVhbChhY3R1YWxbcF0sIGV4cGVjdGVkW3BdLCBzdGFjayk7DQotICAgICAgICAg
ICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgICAgICAgZWxz
ZQ0KLSAgICAgICAgICAgICAgICAgew0KLSAgICAgICAgICAgICAgICAgICAgIGFzc2VydChzYW1l
X3ZhbHVlKGFjdHVhbFtwXSwgZXhwZWN0ZWRbcF0pLCAiYXNzZXJ0X29iamVjdF9lcXVhbHMiLCBk
ZXNjcmlwdGlvbiwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgInByb3BlcnR5ICR7cH0gZXhwZWN0ZWQgJHtleHBlY3RlZH0gZ290ICR7YWN0
dWFsfSIsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHtwOnAsIGV4cGVjdGVkOmV4cGVjdGVkLCBhY3R1YWw6YWN0dWFsfSk7DQotICAgICAg
ICAgICAgICAgICB9DQotICAgICAgICAgICAgIH0NCi0gICAgICAgICAgICAgZm9yIChwIGluIGV4
cGVjdGVkKQ0KLSAgICAgICAgICAgICB7DQotICAgICAgICAgICAgICAgICBhc3NlcnQoYWN0dWFs
Lmhhc093blByb3BlcnR5KHApLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICJhc3NlcnRfb2Jq
ZWN0X2VxdWFscyIsIGRlc2NyaXB0aW9uLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICJleHBl
Y3RlZCBwcm9wZXJ0eSAke3B9IG1pc3NpbmciLCB7cDpwfSk7DQotICAgICAgICAgICAgIH0NCi0g
ICAgICAgICAgICAgc3RhY2sucG9wKCk7DQotICAgICAgICAgfQ0KLSAgICAgICAgIGNoZWNrX2Vx
dWFsKGFjdHVhbCwgZXhwZWN0ZWQsIFtdKTsNCi0gICAgfTsNCi0gICAgZXhwb3NlKGFzc2VydF9v
YmplY3RfZXF1YWxzLCAiYXNzZXJ0X29iamVjdF9lcXVhbHMiKTsNCi0NCi0gICAgZnVuY3Rpb24g
YXNzZXJ0X2FycmF5X2VxdWFscyhhY3R1YWwsIGV4cGVjdGVkLCBkZXNjcmlwdGlvbikNCi0gICAg
ew0KLSAgICAgICAgYXNzZXJ0KGFjdHVhbC5sZW5ndGggPT09IGV4cGVjdGVkLmxlbmd0aCwNCi0g
ICAgICAgICAgICAgICAiYXNzZXJ0X2FycmF5X2VxdWFscyIsIGRlc2NyaXB0aW9uLA0KLSAgICAg
ICAgICAgICAgICJsZW5ndGhzIGRpZmZlciwgZXhwZWN0ZWQgJHtleHBlY3RlZH0gZ290ICR7YWN0
dWFsfSIsDQotICAgICAgICAgICAgICAge2V4cGVjdGVkOmV4cGVjdGVkLmxlbmd0aCwgYWN0dWFs
OmFjdHVhbC5sZW5ndGh9KTsNCi0NCi0gICAgICAgIGZvciAodmFyIGk9MDsgaSA8IGFjdHVhbC5s
ZW5ndGg7IGkrKykNCi0gICAgICAgIHsNCi0gICAgICAgICAgICBhc3NlcnQoYWN0dWFsLmhhc093
blByb3BlcnR5KGkpID09PSBleHBlY3RlZC5oYXNPd25Qcm9wZXJ0eShpKSwNCi0gICAgICAgICAg
ICAgICAgICAgImFzc2VydF9hcnJheV9lcXVhbHMiLCBkZXNjcmlwdGlvbiwNCi0gICAgICAgICAg
ICAgICAgICAgInByb3BlcnR5ICR7aX0sIHByb3BlcnR5IGV4cGVjdGVkIHRvIGJlICRleHBlY3Rl
ZCBidXQgd2FzICRhY3R1YWwiLA0KLSAgICAgICAgICAgICAgICAgICB7aTppLCBleHBlY3RlZDpl
eHBlY3RlZC5oYXNPd25Qcm9wZXJ0eShpKSA/ICJwcmVzZW50IiA6ICJtaXNzaW5nIiwNCi0gICAg
ICAgICAgICAgICAgICAgYWN0dWFsOmFjdHVhbC5oYXNPd25Qcm9wZXJ0eShpKSA/ICJwcmVzZW50
IiA6ICJtaXNzaW5nIn0pOw0KLSAgICAgICAgICAgIGFzc2VydChzYW1lX3ZhbHVlKGV4cGVjdGVk
W2ldLCBhY3R1YWxbaV0pLA0KLSAgICAgICAgICAgICAgICAgICAiYXNzZXJ0X2FycmF5X2VxdWFs
cyIsIGRlc2NyaXB0aW9uLA0KLSAgICAgICAgICAgICAgICAgICAicHJvcGVydHkgJHtpfSwgZXhw
ZWN0ZWQgJHtleHBlY3RlZH0gYnV0IGdvdCAke2FjdHVhbH0iLA0KLSAgICAgICAgICAgICAgICAg
ICB7aTppLCBleHBlY3RlZDpleHBlY3RlZFtpXSwgYWN0dWFsOmFjdHVhbFtpXX0pOw0KLSAgICAg
ICAgfQ0KLSAgICB9DQotICAgIGV4cG9zZShhc3NlcnRfYXJyYXlfZXF1YWxzLCAiYXNzZXJ0X2Fy
cmF5X2VxdWFscyIpOw0KLQ0KLSAgICBmdW5jdGlvbiBhc3NlcnRfYXBwcm94X2VxdWFscyhhY3R1
YWwsIGV4cGVjdGVkLCBlcHNpbG9uLCBkZXNjcmlwdGlvbikNCi0gICAgew0KLSAgICAgICAgLyoN
Ci0gICAgICAgICAqIFRlc3QgaWYgdHdvIHByaW1pdGl2ZSBudW1iZXJzIGFyZSBlcXVhbCB3aXRo
aW5nICsvLSBlcHNpbG9uDQotICAgICAgICAgKi8NCi0gICAgICAgIGFzc2VydCh0eXBlb2YgYWN0
dWFsID09PSAibnVtYmVyIiwNCi0gICAgICAgICAgICAgICAiYXNzZXJ0X2FwcHJveF9lcXVhbHMi
LCBkZXNjcmlwdGlvbiwNCi0gICAgICAgICAgICAgICAiZXhwZWN0ZWQgYSBudW1iZXIgYnV0IGdv
dCBhICR7dHlwZV9hY3R1YWx9IiwNCi0gICAgICAgICAgICAgICB7dHlwZV9hY3R1YWw6dHlwZW9m
IGFjdHVhbH0pOw0KLQ0KLSAgICAgICAgYXNzZXJ0KE1hdGguYWJzKGFjdHVhbCAtIGV4cGVjdGVk
KSA8PSBlcHNpbG9uLA0KLSAgICAgICAgICAgICAgICJhc3NlcnRfYXBwcm94X2VxdWFscyIsIGRl
c2NyaXB0aW9uLA0KLSAgICAgICAgICAgICAgICJleHBlY3RlZCAke2V4cGVjdGVkfSArLy0gJHtl
cHNpbG9ufSBidXQgZ290ICR7YWN0dWFsfSIsDQotICAgICAgICAgICAgICAge2V4cGVjdGVkOmV4
cGVjdGVkLCBhY3R1YWw6YWN0dWFsLCBlcHNpbG9uOmVwc2lsb259KTsNCi0gICAgfTsNCi0gICAg
ZXhwb3NlKGFzc2VydF9hcHByb3hfZXF1YWxzLCAiYXNzZXJ0X2FwcHJveF9lcXVhbHMiKTsNCi0N
Ci0gICAgZnVuY3Rpb24gYXNzZXJ0X3JlZ2V4cF9tYXRjaChhY3R1YWwsIGV4cGVjdGVkLCBkZXNj
cmlwdGlvbikgew0KLSAgICAgICAgLyoNCi0gICAgICAgICAqIFRlc3QgaWYgYSBzdHJpbmcgKGFj
dHVhbCkgbWF0Y2hlcyBhIHJlZ2V4cCAoZXhwZWN0ZWQpDQotICAgICAgICAgKi8NCi0gICAgICAg
IGFzc2VydChleHBlY3RlZC50ZXN0KGFjdHVhbCksDQotICAgICAgICAgICAgICAgImFzc2VydF9y
ZWdleHBfbWF0Y2giLCBkZXNjcmlwdGlvbiwNCi0gICAgICAgICAgICAgICAiZXhwZWN0ZWQgJHtl
eHBlY3RlZH0gYnV0IGdvdCAke2FjdHVhbH0iLA0KLSAgICAgICAgICAgICAgIHtleHBlY3RlZDpl
eHBlY3RlZCwgYWN0dWFsOmFjdHVhbH0pOw0KLSAgICB9DQotICAgIGV4cG9zZShhc3NlcnRfcmVn
ZXhwX21hdGNoLCAiYXNzZXJ0X3JlZ2V4cF9tYXRjaCIpOw0KLQ0KLSAgICBmdW5jdGlvbiBhc3Nl
cnRfY2xhc3Nfc3RyaW5nKG9iamVjdCwgY2xhc3Nfc3RyaW5nLCBkZXNjcmlwdGlvbikgew0KLSAg
ICAgICAgYXNzZXJ0X2VxdWFscyh7fS50b1N0cmluZy5jYWxsKG9iamVjdCksICJbb2JqZWN0ICIg
KyBjbGFzc19zdHJpbmcgKyAiXSIsDQotICAgICAgICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9u
KTsNCi0gICAgfQ0KLSAgICBleHBvc2UoYXNzZXJ0X2NsYXNzX3N0cmluZywgImFzc2VydF9jbGFz
c19zdHJpbmciKTsNCi0NCi0NCi0gICAgZnVuY3Rpb24gX2Fzc2VydF9vd25fcHJvcGVydHkobmFt
ZSkgew0KLSAgICAgICAgcmV0dXJuIGZ1bmN0aW9uKG9iamVjdCwgcHJvcGVydHlfbmFtZSwgZGVz
Y3JpcHRpb24pDQotICAgICAgICB7DQotICAgICAgICAgICAgYXNzZXJ0KG9iamVjdC5oYXNPd25Q
cm9wZXJ0eShwcm9wZXJ0eV9uYW1lKSwNCi0gICAgICAgICAgICAgICAgICAgbmFtZSwgZGVzY3Jp
cHRpb24sDQotICAgICAgICAgICAgICAgICAgICJleHBlY3RlZCBwcm9wZXJ0eSAke3B9IG1pc3Np
bmciLCB7cDpwcm9wZXJ0eV9uYW1lfSk7DQotICAgICAgICB9Ow0KLSAgICB9DQotICAgIGV4cG9z
ZShfYXNzZXJ0X293bl9wcm9wZXJ0eSgiYXNzZXJ0X2V4aXN0cyIpLCAiYXNzZXJ0X2V4aXN0cyIp
Ow0KLSAgICBleHBvc2UoX2Fzc2VydF9vd25fcHJvcGVydHkoImFzc2VydF9vd25fcHJvcGVydHki
KSwgImFzc2VydF9vd25fcHJvcGVydHkiKTsNCi0NCi0gICAgZnVuY3Rpb24gYXNzZXJ0X25vdF9l
eGlzdHMob2JqZWN0LCBwcm9wZXJ0eV9uYW1lLCBkZXNjcmlwdGlvbikNCi0gICAgew0KLSAgICAg
ICAgYXNzZXJ0KCFvYmplY3QuaGFzT3duUHJvcGVydHkocHJvcGVydHlfbmFtZSksDQotICAgICAg
ICAgICAgICAgImFzc2VydF9ub3RfZXhpc3RzIiwgZGVzY3JpcHRpb24sDQotICAgICAgICAgICAg
ICAgInVuZXhwZWN0ZWQgcHJvcGVydHkgJHtwfSBmb3VuZCIsIHtwOnByb3BlcnR5X25hbWV9KTsN
Ci0gICAgfTsNCi0gICAgZXhwb3NlKGFzc2VydF9ub3RfZXhpc3RzLCAiYXNzZXJ0X25vdF9leGlz
dHMiKTsNCi0NCi0gICAgZnVuY3Rpb24gX2Fzc2VydF9pbmhlcml0cyhuYW1lKSB7DQotICAgICAg
ICByZXR1cm4gZnVuY3Rpb24gKG9iamVjdCwgcHJvcGVydHlfbmFtZSwgZGVzY3JpcHRpb24pDQot
ICAgICAgICB7DQotICAgICAgICAgICAgYXNzZXJ0KHR5cGVvZiBvYmplY3QgPT09ICJvYmplY3Qi
LA0KLSAgICAgICAgICAgICAgICAgICBuYW1lLCBkZXNjcmlwdGlvbiwNCi0gICAgICAgICAgICAg
ICAgICAgInByb3ZpZGVkIHZhbHVlIGlzIG5vdCBhbiBvYmplY3QiKTsNCi0NCi0gICAgICAgICAg
ICBhc3NlcnQoImhhc093blByb3BlcnR5IiBpbiBvYmplY3QsDQotICAgICAgICAgICAgICAgICAg
IG5hbWUsIGRlc2NyaXB0aW9uLA0KLSAgICAgICAgICAgICAgICAgICAicHJvdmlkZWQgdmFsdWUg
aXMgYW4gb2JqZWN0IGJ1dCBoYXMgbm8gaGFzT3duUHJvcGVydHkgbWV0aG9kIik7DQotDQotICAg
ICAgICAgICAgYXNzZXJ0KCFvYmplY3QuaGFzT3duUHJvcGVydHkocHJvcGVydHlfbmFtZSksDQot
ICAgICAgICAgICAgICAgICAgIG5hbWUsIGRlc2NyaXB0aW9uLA0KLSAgICAgICAgICAgICAgICAg
ICAicHJvcGVydHkgJHtwfSBmb3VuZCBvbiBvYmplY3QgZXhwZWN0ZWQgaW4gcHJvdG90eXBlIGNo
YWluIiwNCi0gICAgICAgICAgICAgICAgICAge3A6cHJvcGVydHlfbmFtZX0pOw0KLQ0KLSAgICAg
ICAgICAgIGFzc2VydChwcm9wZXJ0eV9uYW1lIGluIG9iamVjdCwNCi0gICAgICAgICAgICAgICAg
ICAgbmFtZSwgZGVzY3JpcHRpb24sDQotICAgICAgICAgICAgICAgICAgICJwcm9wZXJ0eSAke3B9
IG5vdCBmb3VuZCBpbiBwcm90b3R5cGUgY2hhaW4iLA0KLSAgICAgICAgICAgICAgICAgICB7cDpw
cm9wZXJ0eV9uYW1lfSk7DQotICAgICAgICB9Ow0KLSAgICB9DQotICAgIGV4cG9zZShfYXNzZXJ0
X2luaGVyaXRzKCJhc3NlcnRfaW5oZXJpdHMiKSwgImFzc2VydF9pbmhlcml0cyIpOw0KLSAgICBl
eHBvc2UoX2Fzc2VydF9pbmhlcml0cygiYXNzZXJ0X2lkbF9hdHRyaWJ1dGUiKSwgImFzc2VydF9p
ZGxfYXR0cmlidXRlIik7DQotDQotICAgIGZ1bmN0aW9uIGFzc2VydF9yZWFkb25seShvYmplY3Qs
IHByb3BlcnR5X25hbWUsIGRlc2NyaXB0aW9uKQ0KLSAgICB7DQotICAgICAgICAgdmFyIGluaXRp
YWxfdmFsdWUgPSBvYmplY3RbcHJvcGVydHlfbmFtZV07DQotICAgICAgICAgdHJ5IHsNCi0gICAg
ICAgICAgICAgLy9Ob3RlIHRoYXQgdGhpcyBjYW4gaGF2ZSBzaWRlIGVmZmVjdHMgaW4gdGhlIGNh
c2Ugd2hlcmUNCi0gICAgICAgICAgICAgLy90aGUgcHJvcGVydHkgaGFzIFB1dEZvcndhcmRzDQot
ICAgICAgICAgICAgIG9iamVjdFtwcm9wZXJ0eV9uYW1lXSA9IGluaXRpYWxfdmFsdWUgKyAiYSI7
IC8vWFhYIHVzZSBzb21lIG90aGVyIHZhbHVlIGhlcmU/DQotICAgICAgICAgICAgIGFzc2VydChz
YW1lX3ZhbHVlKG9iamVjdFtwcm9wZXJ0eV9uYW1lXSwgaW5pdGlhbF92YWx1ZSksDQotICAgICAg
ICAgICAgICAgICAgICAiYXNzZXJ0X3JlYWRvbmx5IiwgZGVzY3JpcHRpb24sDQotICAgICAgICAg
ICAgICAgICAgICAiY2hhbmdpbmcgcHJvcGVydHkgJHtwfSBzdWNjZWVkZWQiLA0KLSAgICAgICAg
ICAgICAgICAgICAge3A6cHJvcGVydHlfbmFtZX0pOw0KLSAgICAgICAgIH0NCi0gICAgICAgICBm
aW5hbGx5DQotICAgICAgICAgew0KLSAgICAgICAgICAgICBvYmplY3RbcHJvcGVydHlfbmFtZV0g
PSBpbml0aWFsX3ZhbHVlOw0KLSAgICAgICAgIH0NCi0gICAgfTsNCi0gICAgZXhwb3NlKGFzc2Vy
dF9yZWFkb25seSwgImFzc2VydF9yZWFkb25seSIpOw0KLQ0KLSAgICBmdW5jdGlvbiBhc3NlcnRf
dGhyb3dzKGNvZGUsIGZ1bmMsIGRlc2NyaXB0aW9uKQ0KLSAgICB7DQotICAgICAgICB0cnkNCi0g
ICAgICAgIHsNCi0gICAgICAgICAgICBmdW5jLmNhbGwodGhpcyk7DQotICAgICAgICAgICAgYXNz
ZXJ0KGZhbHNlLCAiYXNzZXJ0X3Rocm93cyIsIGRlc2NyaXB0aW9uLA0KLSAgICAgICAgICAgICAg
ICAgICAiJHtmdW5jfSBkaWQgbm90IHRocm93Iiwge2Z1bmM6ZnVuY30pOw0KLSAgICAgICAgfQ0K
LSAgICAgICAgY2F0Y2goZSkNCi0gICAgICAgIHsNCi0gICAgICAgICAgICBpZiAoZSBpbnN0YW5j
ZW9mIEFzc2VydGlvbkVycm9yKSB7DQotICAgICAgICAgICAgICAgIHRocm93KGUpOw0KLSAgICAg
ICAgICAgIH0NCi0gICAgICAgICAgICBpZiAoY29kZSA9PT0gbnVsbCkNCi0gICAgICAgICAgICB7
DQotICAgICAgICAgICAgICAgIHJldHVybjsNCi0gICAgICAgICAgICB9DQotICAgICAgICAgICAg
aWYgKHR5cGVvZiBjb2RlID09PSAib2JqZWN0IikNCi0gICAgICAgICAgICB7DQotICAgICAgICAg
ICAgICAgIGFzc2VydCh0eXBlb2YgZSA9PSAib2JqZWN0IiAmJiAibmFtZSIgaW4gZSAmJiBlLm5h
bWUgPT0gY29kZS5uYW1lLA0KLSAgICAgICAgICAgICAgICAgICAgICAgImFzc2VydF90aHJvd3Mi
LCBkZXNjcmlwdGlvbiwNCi0gICAgICAgICAgICAgICAgICAgICAgICIke2Z1bmN9IHRocmV3ICR7
YWN0dWFsfSAoJHthY3R1YWxfbmFtZX0pIGV4cGVjdGVkICR7ZXhwZWN0ZWR9ICgke2V4cGVjdGVk
X25hbWV9KSIsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge2Z1bmM6ZnVu
YywgYWN0dWFsOmUsIGFjdHVhbF9uYW1lOmUubmFtZSwNCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgZXhwZWN0ZWQ6Y29kZSwNCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgZXhwZWN0ZWRfbmFtZTpjb2RlLm5hbWV9KTsNCi0gICAgICAgICAgICAgICAg
cmV0dXJuOw0KLSAgICAgICAgICAgIH0NCi0NCi0gICAgICAgICAgICB2YXIgY29kZV9uYW1lX21h
cCA9IHsNCi0gICAgICAgICAgICAgICAgSU5ERVhfU0laRV9FUlI6ICdJbmRleFNpemVFcnJvcics
DQotICAgICAgICAgICAgICAgIEhJRVJBUkNIWV9SRVFVRVNUX0VSUjogJ0hpZXJhcmNoeVJlcXVl
c3RFcnJvcicsDQotICAgICAgICAgICAgICAgIFdST05HX0RPQ1VNRU5UX0VSUjogJ1dyb25nRG9j
dW1lbnRFcnJvcicsDQotICAgICAgICAgICAgICAgIElOVkFMSURfQ0hBUkFDVEVSX0VSUjogJ0lu
dmFsaWRDaGFyYWN0ZXJFcnJvcicsDQotICAgICAgICAgICAgICAgIE5PX01PRElGSUNBVElPTl9B
TExPV0VEX0VSUjogJ05vTW9kaWZpY2F0aW9uQWxsb3dlZEVycm9yJywNCi0gICAgICAgICAgICAg
ICAgTk9UX0ZPVU5EX0VSUjogJ05vdEZvdW5kRXJyb3InLA0KLSAgICAgICAgICAgICAgICBOT1Rf
U1VQUE9SVEVEX0VSUjogJ05vdFN1cHBvcnRlZEVycm9yJywNCi0gICAgICAgICAgICAgICAgSU5W
QUxJRF9TVEFURV9FUlI6ICdJbnZhbGlkU3RhdGVFcnJvcicsDQotICAgICAgICAgICAgICAgIFNZ
TlRBWF9FUlI6ICdTeW50YXhFcnJvcicsDQotICAgICAgICAgICAgICAgIElOVkFMSURfTU9ESUZJ
Q0FUSU9OX0VSUjogJ0ludmFsaWRNb2RpZmljYXRpb25FcnJvcicsDQotICAgICAgICAgICAgICAg
IE5BTUVTUEFDRV9FUlI6ICdOYW1lc3BhY2VFcnJvcicsDQotICAgICAgICAgICAgICAgIElOVkFM
SURfQUNDRVNTX0VSUjogJ0ludmFsaWRBY2Nlc3NFcnJvcicsDQotICAgICAgICAgICAgICAgIFRZ
UEVfTUlTTUFUQ0hfRVJSOiAnVHlwZU1pc21hdGNoRXJyb3InLA0KLSAgICAgICAgICAgICAgICBT
RUNVUklUWV9FUlI6ICdTZWN1cml0eUVycm9yJywNCi0gICAgICAgICAgICAgICAgTkVUV09SS19F
UlI6ICdOZXR3b3JrRXJyb3InLA0KLSAgICAgICAgICAgICAgICBBQk9SVF9FUlI6ICdBYm9ydEVy
cm9yJywNCi0gICAgICAgICAgICAgICAgVVJMX01JU01BVENIX0VSUjogJ1VSTE1pc21hdGNoRXJy
b3InLA0KLSAgICAgICAgICAgICAgICBRVU9UQV9FWENFRURFRF9FUlI6ICdRdW90YUV4Y2VlZGVk
RXJyb3InLA0KLSAgICAgICAgICAgICAgICBUSU1FT1VUX0VSUjogJ1RpbWVvdXRFcnJvcicsDQot
ICAgICAgICAgICAgICAgIElOVkFMSURfTk9ERV9UWVBFX0VSUjogJ0ludmFsaWROb2RlVHlwZUVy
cm9yJywNCi0gICAgICAgICAgICAgICAgREFUQV9DTE9ORV9FUlI6ICdEYXRhQ2xvbmVFcnJvcicN
Ci0gICAgICAgICAgICB9Ow0KLQ0KLSAgICAgICAgICAgIHZhciBuYW1lID0gY29kZSBpbiBjb2Rl
X25hbWVfbWFwID8gY29kZV9uYW1lX21hcFtjb2RlXSA6IGNvZGU7DQotDQotICAgICAgICAgICAg
dmFyIG5hbWVfY29kZV9tYXAgPSB7DQotICAgICAgICAgICAgICAgIEluZGV4U2l6ZUVycm9yOiAx
LA0KLSAgICAgICAgICAgICAgICBIaWVyYXJjaHlSZXF1ZXN0RXJyb3I6IDMsDQotICAgICAgICAg
ICAgICAgIFdyb25nRG9jdW1lbnRFcnJvcjogNCwNCi0gICAgICAgICAgICAgICAgSW52YWxpZENo
YXJhY3RlckVycm9yOiA1LA0KLSAgICAgICAgICAgICAgICBOb01vZGlmaWNhdGlvbkFsbG93ZWRF
cnJvcjogNywNCi0gICAgICAgICAgICAgICAgTm90Rm91bmRFcnJvcjogOCwNCi0gICAgICAgICAg
ICAgICAgTm90U3VwcG9ydGVkRXJyb3I6IDksDQotICAgICAgICAgICAgICAgIEludmFsaWRTdGF0
ZUVycm9yOiAxMSwNCi0gICAgICAgICAgICAgICAgU3ludGF4RXJyb3I6IDEyLA0KLSAgICAgICAg
ICAgICAgICBJbnZhbGlkTW9kaWZpY2F0aW9uRXJyb3I6IDEzLA0KLSAgICAgICAgICAgICAgICBO
YW1lc3BhY2VFcnJvcjogMTQsDQotICAgICAgICAgICAgICAgIEludmFsaWRBY2Nlc3NFcnJvcjog
MTUsDQotICAgICAgICAgICAgICAgIFR5cGVNaXNtYXRjaEVycm9yOiAxNywNCi0gICAgICAgICAg
ICAgICAgU2VjdXJpdHlFcnJvcjogMTgsDQotICAgICAgICAgICAgICAgIE5ldHdvcmtFcnJvcjog
MTksDQotICAgICAgICAgICAgICAgIEFib3J0RXJyb3I6IDIwLA0KLSAgICAgICAgICAgICAgICBV
UkxNaXNtYXRjaEVycm9yOiAyMSwNCi0gICAgICAgICAgICAgICAgUXVvdGFFeGNlZWRlZEVycm9y
OiAyMiwNCi0gICAgICAgICAgICAgICAgVGltZW91dEVycm9yOiAyMywNCi0gICAgICAgICAgICAg
ICAgSW52YWxpZE5vZGVUeXBlRXJyb3I6IDI0LA0KLSAgICAgICAgICAgICAgICBEYXRhQ2xvbmVF
cnJvcjogMjUsDQotDQotICAgICAgICAgICAgICAgIFVua25vd25FcnJvcjogMCwNCi0gICAgICAg
ICAgICAgICAgQ29uc3RyYWludEVycm9yOiAwLA0KLSAgICAgICAgICAgICAgICBEYXRhRXJyb3I6
IDAsDQotICAgICAgICAgICAgICAgIFRyYW5zYWN0aW9uSW5hY3RpdmVFcnJvcjogMCwNCi0gICAg
ICAgICAgICAgICAgUmVhZE9ubHlFcnJvcjogMCwNCi0gICAgICAgICAgICAgICAgVmVyc2lvbkVy
cm9yOiAwDQotICAgICAgICAgICAgfTsNCi0NCi0gICAgICAgICAgICBpZiAoIShuYW1lIGluIG5h
bWVfY29kZV9tYXApKQ0KLSAgICAgICAgICAgIHsNCi0gICAgICAgICAgICAgICAgdGhyb3cgbmV3
IEFzc2VydGlvbkVycm9yKCdUZXN0IGJ1ZzogdW5yZWNvZ25pemVkIERPTUV4Y2VwdGlvbiBjb2Rl
ICInICsgY29kZSArICciIHBhc3NlZCB0byBhc3NlcnRfdGhyb3dzKCknKTsNCi0gICAgICAgICAg
ICB9DQotDQotICAgICAgICAgICAgdmFyIHJlcXVpcmVkX3Byb3BzID0geyBjb2RlOiBuYW1lX2Nv
ZGVfbWFwW25hbWVdIH07DQotDQotICAgICAgICAgICAgaWYgKHJlcXVpcmVkX3Byb3BzLmNvZGUg
PT09IDANCi0gICAgICAgICAgICB8fCAoIm5hbWUiIGluIGUgJiYgZS5uYW1lICE9PSBlLm5hbWUu
dG9VcHBlckNhc2UoKSAmJiBlLm5hbWUgIT09ICJET01FeGNlcHRpb24iKSkNCi0gICAgICAgICAg
ICB7DQotICAgICAgICAgICAgICAgIC8vIE5ldyBzdHlsZSBleGNlcHRpb246IGFsc28gdGVzdCB0
aGUgbmFtZSBwcm9wZXJ0eS4NCi0gICAgICAgICAgICAgICAgcmVxdWlyZWRfcHJvcHMubmFtZSA9
IG5hbWU7DQotICAgICAgICAgICAgfQ0KLQ0KLSAgICAgICAgICAgIC8vV2UnZCBsaWtlIHRvIHRl
c3QgdGhhdCBlIGluc3RhbmNlb2YgdGhlIGFwcHJvcHJpYXRlIGludGVyZmFjZSwNCi0gICAgICAg
ICAgICAvL2J1dCB3ZSBjYW4ndCwgYmVjYXVzZSB3ZSBkb24ndCBrbm93IHdoYXQgd2luZG93IGl0
IHdhcyBjcmVhdGVkDQotICAgICAgICAgICAgLy9pbi4gIEl0IG1pZ2h0IGJlIGFuIGluc3RhbmNl
b2YgdGhlIGFwcHJvcHJpYXRlIGludGVyZmFjZSBvbiBzb21lDQotICAgICAgICAgICAgLy91bmtu
b3duIG90aGVyIHdpbmRvdy4gIFRPRE86IFdvcmsgYXJvdW5kIHRoaXMgc29tZWhvdz8NCi0NCi0g
ICAgICAgICAgICBhc3NlcnQodHlwZW9mIGUgPT0gIm9iamVjdCIsDQotICAgICAgICAgICAgICAg
ICAgICJhc3NlcnRfdGhyb3dzIiwgZGVzY3JpcHRpb24sDQotICAgICAgICAgICAgICAgICAgICIk
e2Z1bmN9IHRocmV3ICR7ZX0gd2l0aCB0eXBlICR7dHlwZX0sIG5vdCBhbiBvYmplY3QiLA0KLSAg
ICAgICAgICAgICAgICAgICB7ZnVuYzpmdW5jLCBlOmUsIHR5cGU6dHlwZW9mIGV9KTsNCi0NCi0g
ICAgICAgICAgICBmb3IgKHZhciBwcm9wIGluIHJlcXVpcmVkX3Byb3BzKQ0KLSAgICAgICAgICAg
IHsNCi0gICAgICAgICAgICAgICAgYXNzZXJ0KHR5cGVvZiBlID09ICJvYmplY3QiICYmIHByb3Ag
aW4gZSAmJiBlW3Byb3BdID09IHJlcXVpcmVkX3Byb3BzW3Byb3BdLA0KLSAgICAgICAgICAgICAg
ICAgICAgICAgImFzc2VydF90aHJvd3MiLCBkZXNjcmlwdGlvbiwNCi0gICAgICAgICAgICAgICAg
ICAgICAgICIke2Z1bmN9IHRocmV3ICR7ZX0gdGhhdCBpcyBub3QgYSBET01FeGNlcHRpb24gIiAr
IGNvZGUgKyAiOiBwcm9wZXJ0eSAke3Byb3B9IGlzIGVxdWFsIHRvICR7YWN0dWFsfSwgZXhwZWN0
ZWQgJHtleHBlY3RlZH0iLA0KLSAgICAgICAgICAgICAgICAgICAgICAge2Z1bmM6ZnVuYywgZTpl
LCBwcm9wOnByb3AsIGFjdHVhbDplW3Byb3BdLCBleHBlY3RlZDpyZXF1aXJlZF9wcm9wc1twcm9w
XX0pOw0KLSAgICAgICAgICAgIH0NCi0gICAgICAgIH0NCi0gICAgfQ0KLSAgICBleHBvc2UoYXNz
ZXJ0X3Rocm93cywgImFzc2VydF90aHJvd3MiKTsNCi0NCi0gICAgZnVuY3Rpb24gYXNzZXJ0X3Vu
cmVhY2hlZChkZXNjcmlwdGlvbikgew0KLSAgICAgICAgIGFzc2VydChmYWxzZSwgImFzc2VydF91
bnJlYWNoZWQiLCBkZXNjcmlwdGlvbiwNCi0gICAgICAgICAgICAgICAgIlJlYWNoZWQgdW5yZWFj
aGFibGUgY29kZSIpOw0KLSAgICB9DQotICAgIGV4cG9zZShhc3NlcnRfdW5yZWFjaGVkLCAiYXNz
ZXJ0X3VucmVhY2hlZCIpOw0KLQ0KLSAgICBmdW5jdGlvbiBhc3NlcnRfYW55KGFzc2VydF9mdW5j
LCBhY3R1YWwsIGV4cGVjdGVkX2FycmF5KSANCi0gICAgew0KLSAgICAgICAgdmFyIGFyZ3MgPSBb
XS5zbGljZS5jYWxsKGFyZ3VtZW50cywgMykNCi0gICAgICAgIHZhciBlcnJvcnMgPSBbXQ0KLSAg
ICAgICAgdmFyIHBhc3NlZCA9IGZhbHNlOw0KLSAgICAgICAgZm9yRWFjaChleHBlY3RlZF9hcnJh
eSwgDQotICAgICAgICAgICAgICAgIGZ1bmN0aW9uKGV4cGVjdGVkKQ0KLSAgICAgICAgICAgICAg
ICB7DQotICAgICAgICAgICAgICAgICAgICB0cnkgew0KLSAgICAgICAgICAgICAgICAgICAgICAg
IGFzc2VydF9mdW5jLmFwcGx5KHRoaXMsIFthY3R1YWwsIGV4cGVjdGVkXS5jb25jYXQoYXJncykp
DQotICAgICAgICAgICAgICAgICAgICAgICAgcGFzc2VkID0gdHJ1ZTsNCi0gICAgICAgICAgICAg
ICAgICAgIH0gY2F0Y2goZSkgew0KLSAgICAgICAgICAgICAgICAgICAgICAgIGVycm9ycy5wdXNo
KGUubWVzc2FnZSk7DQotICAgICAgICAgICAgICAgICAgICB9DQotICAgICAgICAgICAgICAgIH0p
Ow0KLSAgICAgICAgaWYgKCFwYXNzZWQpIHsNCi0gICAgICAgICAgICB0aHJvdyBuZXcgQXNzZXJ0
aW9uRXJyb3IoZXJyb3JzLmpvaW4oIlxuXG4iKSk7DQotICAgICAgICB9DQotICAgIH0NCi0gICAg
ZXhwb3NlKGFzc2VydF9hbnksICJhc3NlcnRfYW55Iik7DQotDQotICAgIGZ1bmN0aW9uIFRlc3Qo
bmFtZSwgcHJvcGVydGllcykNCi0gICAgew0KLSAgICAgICAgdGhpcy5uYW1lID0gbmFtZTsNCi0g
ICAgICAgIHRoaXMuc3RhdHVzID0gdGhpcy5OT1RSVU47DQotICAgICAgICB0aGlzLnRpbWVvdXRf
aWQgPSBudWxsOw0KLSAgICAgICAgdGhpcy5pc19kb25lID0gZmFsc2U7DQotDQotICAgICAgICB0
aGlzLnByb3BlcnRpZXMgPSBwcm9wZXJ0aWVzOw0KLSAgICAgICAgdGhpcy50aW1lb3V0X2xlbmd0
aCA9IHByb3BlcnRpZXMudGltZW91dCA/IHByb3BlcnRpZXMudGltZW91dCA6IHNldHRpbmdzLnRl
c3RfdGltZW91dDsNCi0NCi0gICAgICAgIHRoaXMubWVzc2FnZSA9IG51bGw7DQotDQotICAgICAg
ICB2YXIgdGhpc19vYmogPSB0aGlzOw0KLSAgICAgICAgdGhpcy5zdGVwcyA9IFtdOw0KLQ0KLSAg
ICAgICAgdGVzdHMucHVzaCh0aGlzKTsNCi0gICAgfQ0KLQ0KLSAgICBUZXN0LnN0YXR1c2VzID0g
ew0KLSAgICAgICAgUEFTUzowLA0KLSAgICAgICAgRkFJTDoxLA0KLSAgICAgICAgVElNRU9VVDoy
LA0KLSAgICAgICAgTk9UUlVOOjMNCi0gICAgfTsNCi0NCi0gICAgVGVzdC5wcm90b3R5cGUgPSBt
ZXJnZSh7fSwgVGVzdC5zdGF0dXNlcyk7DQotDQotICAgIFRlc3QucHJvdG90eXBlLnN0cnVjdHVy
ZWRfY2xvbmUgPSBmdW5jdGlvbigpDQotICAgIHsNCi0gICAgICAgIGlmKCF0aGlzLl9zdHJ1Y3R1
cmVkX2Nsb25lKQ0KLSAgICAgICAgew0KLSAgICAgICAgICAgIHZhciBtc2cgPSB0aGlzLm1lc3Nh
Z2U7DQotICAgICAgICAgICAgbXNnID0gbXNnID8gU3RyaW5nKG1zZykgOiBtc2c7DQotICAgICAg
ICAgICAgdGhpcy5fc3RydWN0dXJlZF9jbG9uZSA9IG1lcmdlKHsNCi0gICAgICAgICAgICAgICAg
bmFtZTpTdHJpbmcodGhpcy5uYW1lKSwNCi0gICAgICAgICAgICAgICAgc3RhdHVzOnRoaXMuc3Rh
dHVzLA0KLSAgICAgICAgICAgICAgICBtZXNzYWdlOm1zZw0KLSAgICAgICAgICAgIH0sIFRlc3Qu
c3RhdHVzZXMpOw0KLSAgICAgICAgfQ0KLSAgICAgICAgcmV0dXJuIHRoaXMuX3N0cnVjdHVyZWRf
Y2xvbmU7DQotICAgIH07DQotDQotICAgIFRlc3QucHJvdG90eXBlLnN0ZXAgPSBmdW5jdGlvbihm
dW5jLCB0aGlzX29iaikNCi0gICAgew0KLSAgICAgICAgLy9JbiBjYXNlIHRoZSB0ZXN0IGhhcyBh
bHJlYWR5IGZhaWxlZA0KLSAgICAgICAgaWYgKHRoaXMuc3RhdHVzICE9PSB0aGlzLk5PVFJVTikN
Ci0gICAgICAgIHsNCi0gICAgICAgICAgcmV0dXJuOw0KLSAgICAgICAgfQ0KLQ0KLSAgICAgICAg
dGVzdHMuc3RhcnRlZCA9IHRydWU7DQotDQotICAgICAgICBpZiAodGhpcy50aW1lb3V0X2lkID09
PSBudWxsKSB7DQotICAgICAgICAgICAgdGhpcy5zZXRfdGltZW91dCgpOw0KLSAgICAgICAgfQ0K
LQ0KLSAgICAgICAgdGhpcy5zdGVwcy5wdXNoKGZ1bmMpOw0KLQ0KLSAgICAgICAgaWYgKGFyZ3Vt
ZW50cy5sZW5ndGggPT09IDEpDQotICAgICAgICB7DQotICAgICAgICAgICAgdGhpc19vYmogPSB0
aGlzOw0KLSAgICAgICAgfQ0KLQ0KLSAgICAgICAgdHJ5DQotICAgICAgICB7DQotICAgICAgICAg
ICAgZnVuYy5hcHBseSh0aGlzX29iaiwgQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1l
bnRzLCAyKSk7DQotICAgICAgICB9DQotICAgICAgICBjYXRjaChlKQ0KLSAgICAgICAgew0KLSAg
ICAgICAgICAgIC8vVGhpcyBjYW4gaGFwcGVuIGlmIHNvbWV0aGluZyBjYWxsZWQgc3luY2hyb25v
dXNseSBpbnZva2VkIGFub3RoZXINCi0gICAgICAgICAgICAvL3N0ZXANCi0gICAgICAgICAgICBp
ZiAodGhpcy5zdGF0dXMgIT09IHRoaXMuTk9UUlVOKQ0KLSAgICAgICAgICAgIHsNCi0gICAgICAg
ICAgICAgICAgcmV0dXJuOw0KLSAgICAgICAgICAgIH0NCi0gICAgICAgICAgICB0aGlzLnN0YXR1
cyA9IHRoaXMuRkFJTDsNCi0gICAgICAgICAgICB0aGlzLm1lc3NhZ2UgPSAodHlwZW9mIGUgPT09
ICJvYmplY3QiICYmIGUgIT09IG51bGwpID8gZS5tZXNzYWdlIDogZTsNCi0gICAgICAgICAgICBp
ZiAodHlwZW9mIGUuc3RhY2sgIT0gInVuZGVmaW5lZCIgJiYgdHlwZW9mIGUubWVzc2FnZSA9PSAi
c3RyaW5nIikgew0KLSAgICAgICAgICAgICAgICAvL1RyeSB0byBtYWtlIGl0IG1vcmUgaW5mb3Jt
YXRpdmUgZm9yIHNvbWUgZXhjZXB0aW9ucywgYXQgbGVhc3QNCi0gICAgICAgICAgICAgICAgLy9p
biBHZWNrbyBhbmQgV2ViS2l0LiAgVGhpcyByZXN1bHRzIGluIGEgc3RhY2sgZHVtcCBpbnN0ZWFk
IG9mDQotICAgICAgICAgICAgICAgIC8vanVzdCBlcnJvcnMgbGlrZSAiQ2Fubm90IHJlYWQgcHJv
cGVydHkgJ3BhcmVudE5vZGUnIG9mIG51bGwiDQotICAgICAgICAgICAgICAgIC8vb3IgInJvb3Qg
aXMgbnVsbCIuICBNYWtlcyBpdCBhIGxvdCBsb25nZXIsIG9mIGNvdXJzZS4NCi0gICAgICAgICAg
ICAgICAgdGhpcy5tZXNzYWdlICs9ICIoc3RhY2s6ICIgKyBlLnN0YWNrICsgIikiOw0KLSAgICAg
ICAgICAgIH0NCi0gICAgICAgICAgICB0aGlzLmRvbmUoKTsNCi0gICAgICAgICAgICBpZiAoZGVi
dWcgJiYgZS5jb25zdHJ1Y3RvciAhPT0gQXNzZXJ0aW9uRXJyb3IpIHsNCi0gICAgICAgICAgICAg
ICAgdGhyb3cgZTsNCi0gICAgICAgICAgICB9DQotICAgICAgICB9DQotICAgIH07DQotDQotICAg
IFRlc3QucHJvdG90eXBlLnN0ZXBfZnVuYyA9IGZ1bmN0aW9uKGZ1bmMsIHRoaXNfb2JqKQ0KLSAg
ICB7DQotICAgICAgICB2YXIgdGVzdF90aGlzID0gdGhpczsNCi0NCi0gICAgICAgIGlmIChhcmd1
bWVudHMubGVuZ3RoID09PSAxKQ0KLSAgICAgICAgew0KLSAgICAgICAgICAgIHRoaXNfb2JqID0g
dGVzdF90aGlzOw0KLSAgICAgICAgfQ0KLQ0KLSAgICAgICAgcmV0dXJuIGZ1bmN0aW9uKCkNCi0g
ICAgICAgIHsNCi0gICAgICAgICAgICB0ZXN0X3RoaXMuc3RlcC5hcHBseSh0ZXN0X3RoaXMsIFtm
dW5jLCB0aGlzX29ial0uY29uY2F0KA0KLSAgICAgICAgICAgICAgICBBcnJheS5wcm90b3R5cGUu
c2xpY2UuY2FsbChhcmd1bWVudHMpKSk7DQotICAgICAgICB9Ow0KLSAgICB9Ow0KLQ0KLSAgICBU
ZXN0LnByb3RvdHlwZS5zdGVwX2Z1bmNfZG9uZSA9IGZ1bmN0aW9uKGZ1bmMsIHRoaXNfb2JqKQ0K
LSAgICB7DQotICAgICAgICB2YXIgdGVzdF90aGlzID0gdGhpczsNCi0NCi0gICAgICAgIGlmIChh
cmd1bWVudHMubGVuZ3RoID09PSAxKQ0KLSAgICAgICAgew0KLSAgICAgICAgICAgIHRoaXNfb2Jq
ID0gdGVzdF90aGlzOw0KLSAgICAgICAgfQ0KLQ0KLSAgICAgICAgcmV0dXJuIGZ1bmN0aW9uKCkN
Ci0gICAgICAgIHsNCi0gICAgICAgICAgICB0ZXN0X3RoaXMuc3RlcC5hcHBseSh0ZXN0X3RoaXMs
IFtmdW5jLCB0aGlzX29ial0uY29uY2F0KA0KLSAgICAgICAgICAgICAgICBBcnJheS5wcm90b3R5
cGUuc2xpY2UuY2FsbChhcmd1bWVudHMpKSk7DQotICAgICAgICAgICAgdGVzdF90aGlzLmRvbmUo
KTsNCi0gICAgICAgIH07DQotICAgIH07DQotDQotICAgIFRlc3QucHJvdG90eXBlLnNldF90aW1l
b3V0ID0gZnVuY3Rpb24oKQ0KLSAgICB7DQotICAgICAgICB2YXIgdGhpc19vYmogPSB0aGlzOw0K
LSAgICAgICAgdGhpcy50aW1lb3V0X2lkID0gc2V0VGltZW91dChmdW5jdGlvbigpDQotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsNCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHRoaXNfb2JqLnRpbWVvdXQoKTsNCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgfSwgdGhpcy50aW1lb3V0X2xlbmd0aCk7DQotICAgIH07DQot
DQotICAgIFRlc3QucHJvdG90eXBlLnRpbWVvdXQgPSBmdW5jdGlvbigpDQotICAgIHsNCi0gICAg
ICAgIHRoaXMuc3RhdHVzID0gdGhpcy5USU1FT1VUOw0KLSAgICAgICAgdGhpcy50aW1lb3V0X2lk
ID0gbnVsbDsNCi0gICAgICAgIHRoaXMubWVzc2FnZSA9ICJUZXN0IHRpbWVkIG91dCI7DQotICAg
ICAgICB0aGlzLmRvbmUoKTsNCi0gICAgfTsNCi0NCi0gICAgVGVzdC5wcm90b3R5cGUuZG9uZSA9
IGZ1bmN0aW9uKCkNCi0gICAgew0KLSAgICAgICAgaWYgKHRoaXMuaXNfZG9uZSkgew0KLSAgICAg
ICAgICAgIHJldHVybjsNCi0gICAgICAgIH0NCi0gICAgICAgIGNsZWFyVGltZW91dCh0aGlzLnRp
bWVvdXRfaWQpOw0KLSAgICAgICAgaWYgKHRoaXMuc3RhdHVzID09PSB0aGlzLk5PVFJVTikNCi0g
ICAgICAgIHsNCi0gICAgICAgICAgICB0aGlzLnN0YXR1cyA9IHRoaXMuUEFTUzsNCi0gICAgICAg
IH0NCi0gICAgICAgIHRoaXMuaXNfZG9uZSA9IHRydWU7DQotICAgICAgICB0ZXN0cy5yZXN1bHQo
dGhpcyk7DQotICAgIH07DQotDQotDQotICAgIC8qDQotICAgICAqIEhhcm5lc3MNCi0gICAgICov
DQotDQotICAgIGZ1bmN0aW9uIFRlc3RzU3RhdHVzKCkNCi0gICAgew0KLSAgICAgICAgdGhpcy5z
dGF0dXMgPSBudWxsOw0KLSAgICAgICAgdGhpcy5tZXNzYWdlID0gbnVsbDsNCi0gICAgfQ0KLQ0K
LSAgICBUZXN0c1N0YXR1cy5zdGF0dXNlcyA9IHsNCi0gICAgICAgIE9LOjAsDQotICAgICAgICBF
UlJPUjoxLA0KLSAgICAgICAgVElNRU9VVDoyDQotICAgIH07DQotDQotICAgIFRlc3RzU3RhdHVz
LnByb3RvdHlwZSA9IG1lcmdlKHt9LCBUZXN0c1N0YXR1cy5zdGF0dXNlcyk7DQotDQotICAgIFRl
c3RzU3RhdHVzLnByb3RvdHlwZS5zdHJ1Y3R1cmVkX2Nsb25lID0gZnVuY3Rpb24oKQ0KLSAgICB7
DQotICAgICAgICBpZighdGhpcy5fc3RydWN0dXJlZF9jbG9uZSkNCi0gICAgICAgIHsNCi0gICAg
ICAgICAgICB2YXIgbXNnID0gdGhpcy5tZXNzYWdlOw0KLSAgICAgICAgICAgIG1zZyA9IG1zZyA/
IFN0cmluZyhtc2cpIDogbXNnOw0KLSAgICAgICAgICAgIHRoaXMuX3N0cnVjdHVyZWRfY2xvbmUg
PSBtZXJnZSh7DQotICAgICAgICAgICAgICAgIHN0YXR1czp0aGlzLnN0YXR1cywNCi0gICAgICAg
ICAgICAgICAgbWVzc2FnZTptc2cNCi0gICAgICAgICAgICB9LCBUZXN0c1N0YXR1cy5zdGF0dXNl
cyk7DQotICAgICAgICB9DQotICAgICAgICByZXR1cm4gdGhpcy5fc3RydWN0dXJlZF9jbG9uZTsN
Ci0gICAgfTsNCi0NCi0gICAgZnVuY3Rpb24gVGVzdHMoKQ0KLSAgICB7DQotICAgICAgICB0aGlz
LnRlc3RzID0gW107DQotICAgICAgICB0aGlzLm51bV9wZW5kaW5nID0gMDsNCi0NCi0gICAgICAg
IHRoaXMucGhhc2VzID0gew0KLSAgICAgICAgICAgIElOSVRJQUw6MCwNCi0gICAgICAgICAgICBT
RVRVUDoxLA0KLSAgICAgICAgICAgIEhBVkVfVEVTVFM6MiwNCi0gICAgICAgICAgICBIQVZFX1JF
U1VMVFM6MywNCi0gICAgICAgICAgICBDT01QTEVURTo0DQotICAgICAgICB9Ow0KLSAgICAgICAg
dGhpcy5waGFzZSA9IHRoaXMucGhhc2VzLklOSVRJQUw7DQotDQotICAgICAgICB0aGlzLnByb3Bl
cnRpZXMgPSB7fTsNCi0NCi0gICAgICAgIC8vQWxsIHRlc3RzIGNhbid0IGJlIGRvbmUgdW50aWwg
dGhlIGxvYWQgZXZlbnQgZmlyZXMNCi0gICAgICAgIHRoaXMuYWxsX2xvYWRlZCA9IGZhbHNlOw0K
LSAgICAgICAgdGhpcy53YWl0X2Zvcl9maW5pc2ggPSBmYWxzZTsNCi0gICAgICAgIHRoaXMucHJv
Y2Vzc2luZ19jYWxsYmFja3MgPSBmYWxzZTsNCi0NCi0gICAgICAgIHRoaXMudGltZW91dF9sZW5n
dGggPSBzZXR0aW5ncy50aW1lb3V0Ow0KLSAgICAgICAgdGhpcy50aW1lb3V0X2lkID0gbnVsbDsN
Ci0NCi0gICAgICAgIHRoaXMuc3RhcnRfY2FsbGJhY2tzID0gW107DQotICAgICAgICB0aGlzLnRl
c3RfZG9uZV9jYWxsYmFja3MgPSBbXTsNCi0gICAgICAgIHRoaXMuYWxsX2RvbmVfY2FsbGJhY2tz
ID0gW107DQotDQotICAgICAgICB0aGlzLnN0YXR1cyA9IG5ldyBUZXN0c1N0YXR1cygpOw0KLQ0K
LSAgICAgICAgdmFyIHRoaXNfb2JqID0gdGhpczsNCi0NCi0gICAgICAgIG9uX2V2ZW50KHdpbmRv
dywgImxvYWQiLA0KLSAgICAgICAgICAgICAgICAgZnVuY3Rpb24oKQ0KLSAgICAgICAgICAgICAg
ICAgew0KLSAgICAgICAgICAgICAgICAgICAgIHRoaXNfb2JqLmFsbF9sb2FkZWQgPSB0cnVlOw0K
LSAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzX29iai5hbGxfZG9uZSgpKQ0KLSAgICAgICAg
ICAgICAgICAgICAgIHsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgdGhpc19vYmouY29tcGxl
dGUoKTsNCi0gICAgICAgICAgICAgICAgICAgICB9DQotICAgICAgICAgICAgICAgICB9KTsNCi0N
Ci0gICAgICAgIHRoaXMuc2V0X3RpbWVvdXQoKTsNCi0gICAgfQ0KLQ0KLSAgICBUZXN0cy5wcm90
b3R5cGUuc2V0dXAgPSBmdW5jdGlvbihmdW5jLCBwcm9wZXJ0aWVzKQ0KLSAgICB7DQotICAgICAg
ICBpZiAodGhpcy5waGFzZSA+PSB0aGlzLnBoYXNlcy5IQVZFX1JFU1VMVFMpDQotICAgICAgICB7
DQotICAgICAgICAgICAgcmV0dXJuOw0KLSAgICAgICAgfQ0KLSAgICAgICAgaWYgKHRoaXMucGhh
c2UgPCB0aGlzLnBoYXNlcy5TRVRVUCkNCi0gICAgICAgIHsNCi0gICAgICAgICAgICB0aGlzLnBo
YXNlID0gdGhpcy5waGFzZXMuU0VUVVA7DQotICAgICAgICB9DQotDQotICAgICAgICBmb3IgKHZh
ciBwIGluIHByb3BlcnRpZXMpDQotICAgICAgICB7DQotICAgICAgICAgICAgaWYgKHByb3BlcnRp
ZXMuaGFzT3duUHJvcGVydHkocCkpDQotICAgICAgICAgICAgew0KLSAgICAgICAgICAgICAgICB0
aGlzLnByb3BlcnRpZXNbcF0gPSBwcm9wZXJ0aWVzW3BdOw0KLSAgICAgICAgICAgIH0NCi0gICAg
ICAgIH0NCi0NCi0gICAgICAgIGlmIChwcm9wZXJ0aWVzLnRpbWVvdXQpDQotICAgICAgICB7DQot
ICAgICAgICAgICAgdGhpcy50aW1lb3V0X2xlbmd0aCA9IHByb3BlcnRpZXMudGltZW91dDsNCi0g
ICAgICAgIH0NCi0gICAgICAgIGlmIChwcm9wZXJ0aWVzLmV4cGxpY2l0X2RvbmUpDQotICAgICAg
ICB7DQotICAgICAgICAgICAgdGhpcy53YWl0X2Zvcl9maW5pc2ggPSB0cnVlOw0KLSAgICAgICAg
fQ0KLSAgICAgICAgaWYgKHByb3BlcnRpZXMuZXhwbGljaXRfdGltZW91dCkgew0KLSAgICAgICAg
ICAgIHRoaXMudGltZW91dF9sZW5ndGggPSBudWxsOw0KLSAgICAgICAgfQ0KLQ0KLSAgICAgICAg
aWYgKGZ1bmMpDQotICAgICAgICB7DQotICAgICAgICAgICAgdHJ5DQotICAgICAgICAgICAgew0K
LSAgICAgICAgICAgICAgICBmdW5jKCk7DQotICAgICAgICAgICAgfSBjYXRjaChlKQ0KLSAgICAg
ICAgICAgIHsNCi0gICAgICAgICAgICAgICAgdGhpcy5zdGF0dXMuc3RhdHVzID0gdGhpcy5zdGF0
dXMuRVJST1I7DQotICAgICAgICAgICAgICAgIHRoaXMuc3RhdHVzLm1lc3NhZ2UgPSBlOw0KLSAg
ICAgICAgICAgIH07DQotICAgICAgICB9DQotICAgICAgICB0aGlzLnNldF90aW1lb3V0KCk7DQot
ICAgIH07DQotDQotICAgIFRlc3RzLnByb3RvdHlwZS5zZXRfdGltZW91dCA9IGZ1bmN0aW9uKCkN
Ci0gICAgew0KLSAgICAgICAgdmFyIHRoaXNfb2JqID0gdGhpczsNCi0gICAgICAgIGNsZWFyVGlt
ZW91dCh0aGlzLnRpbWVvdXRfaWQpOw0KLSAgICAgICAgaWYgKHRoaXMudGltZW91dF9sZW5ndGgg
IT09IG51bGwpDQotICAgICAgICB7DQotICAgICAgICAgICAgdGhpcy50aW1lb3V0X2lkID0gc2V0
VGltZW91dChmdW5jdGlvbigpIHsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB0aGlzX29iai50aW1lb3V0KCk7DQotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB9LCB0aGlzLnRpbWVvdXRfbGVuZ3RoKTsNCi0gICAgICAgIH0NCi0g
ICAgfTsNCi0NCi0gICAgVGVzdHMucHJvdG90eXBlLnRpbWVvdXQgPSBmdW5jdGlvbigpIHsNCi0g
ICAgICAgIHRoaXMuc3RhdHVzLnN0YXR1cyA9IHRoaXMuc3RhdHVzLlRJTUVPVVQ7DQotICAgICAg
ICB0aGlzLmNvbXBsZXRlKCk7DQotICAgIH07DQotDQotICAgIFRlc3RzLnByb3RvdHlwZS5lbmRf
d2FpdCA9IGZ1bmN0aW9uKCkNCi0gICAgew0KLSAgICAgICAgdGhpcy53YWl0X2Zvcl9maW5pc2gg
PSBmYWxzZTsNCi0gICAgICAgIGlmICh0aGlzLmFsbF9kb25lKCkpIHsNCi0gICAgICAgICAgICB0
aGlzLmNvbXBsZXRlKCk7DQotICAgICAgICB9DQotICAgIH07DQotDQotICAgIFRlc3RzLnByb3Rv
dHlwZS5wdXNoID0gZnVuY3Rpb24odGVzdCkNCi0gICAgew0KLSAgICAgICAgaWYgKHRoaXMucGhh
c2UgPCB0aGlzLnBoYXNlcy5IQVZFX1RFU1RTKSB7DQotICAgICAgICAgICAgdGhpcy5zdGFydCgp
Ow0KLSAgICAgICAgfQ0KLSAgICAgICAgdGhpcy5udW1fcGVuZGluZysrOw0KLSAgICAgICAgdGhp
cy50ZXN0cy5wdXNoKHRlc3QpOw0KLSAgICB9Ow0KLQ0KLSAgICBUZXN0cy5wcm90b3R5cGUuYWxs
X2RvbmUgPSBmdW5jdGlvbigpIHsNCi0gICAgICAgIHJldHVybiAodGhpcy5hbGxfbG9hZGVkICYm
IHRoaXMubnVtX3BlbmRpbmcgPT09IDAgJiYNCi0gICAgICAgICAgICAgICAgIXRoaXMud2FpdF9m
b3JfZmluaXNoICYmICF0aGlzLnByb2Nlc3NpbmdfY2FsbGJhY2tzKTsNCi0gICAgfTsNCi0NCi0g
ICAgVGVzdHMucHJvdG90eXBlLnN0YXJ0ID0gZnVuY3Rpb24oKSB7DQotICAgICAgICB0aGlzLnBo
YXNlID0gdGhpcy5waGFzZXMuSEFWRV9URVNUUzsNCi0gICAgICAgIHRoaXMubm90aWZ5X3N0YXJ0
KCk7DQotICAgIH07DQotDQotICAgIFRlc3RzLnByb3RvdHlwZS5ub3RpZnlfc3RhcnQgPSBmdW5j
dGlvbigpIHsNCi0gICAgICAgIHZhciB0aGlzX29iaiA9IHRoaXM7DQotICAgICAgICBmb3JFYWNo
ICh0aGlzLnN0YXJ0X2NhbGxiYWNrcywNCi0gICAgICAgICAgICAgICAgIGZ1bmN0aW9uKGNhbGxi
YWNrKQ0KLSAgICAgICAgICAgICAgICAgew0KLSAgICAgICAgICAgICAgICAgICAgIGNhbGxiYWNr
KHRoaXNfb2JqLnByb3BlcnRpZXMpOw0KLSAgICAgICAgICAgICAgICAgfSk7DQotICAgICAgICBm
b3JFYWNoX3dpbmRvd3MoDQotICAgICAgICAgICAgICAgIGZ1bmN0aW9uKHcsIGlzX3NhbWVfb3Jp
Z2luKQ0KLSAgICAgICAgICAgICAgICB7DQotICAgICAgICAgICAgICAgICAgICBpZihpc19zYW1l
X29yaWdpbiAmJiB3LnN0YXJ0X2NhbGxiYWNrKQ0KLSAgICAgICAgICAgICAgICAgICAgew0KLSAg
ICAgICAgICAgICAgICAgICAgICAgIHRyeQ0KLSAgICAgICAgICAgICAgICAgICAgICAgIHsNCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgdy5zdGFydF9jYWxsYmFjayh0aGlzX29iai5wcm9w
ZXJ0aWVzKTsNCi0gICAgICAgICAgICAgICAgICAgICAgICB9DQotICAgICAgICAgICAgICAgICAg
ICAgICAgY2F0Y2goZSkNCi0gICAgICAgICAgICAgICAgICAgICAgICB7DQotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGlmIChkZWJ1ZykNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ew0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3coZSk7DQotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIH0NCi0gICAgICAgICAgICAgICAgICAgICAgICB9DQotICAgICAg
ICAgICAgICAgICAgICB9DQotICAgICAgICAgICAgICAgICAgICBpZiAoc3VwcG9ydHNfcG9zdF9t
ZXNzYWdlKHcpKQ0KLSAgICAgICAgICAgICAgICAgICAgew0KLSAgICAgICAgICAgICAgICAgICAg
ICAgIHcucG9zdE1lc3NhZ2Uoew0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiAi
c3RhcnQiLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9wZXJ0aWVzOiB0aGlzX29i
ai5wcm9wZXJ0aWVzDQotICAgICAgICAgICAgICAgICAgICAgICAgfSwgIioiKTsNCi0gICAgICAg
ICAgICAgICAgICAgIH0NCi0gICAgICAgICAgICAgICAgfSk7DQotICAgIH07DQotDQotICAgIFRl
c3RzLnByb3RvdHlwZS5yZXN1bHQgPSBmdW5jdGlvbih0ZXN0KQ0KLSAgICB7DQotICAgICAgICBp
ZiAodGhpcy5waGFzZSA+IHRoaXMucGhhc2VzLkhBVkVfUkVTVUxUUykNCi0gICAgICAgIHsNCi0g
ICAgICAgICAgICByZXR1cm47DQotICAgICAgICB9DQotICAgICAgICB0aGlzLnBoYXNlID0gdGhp
cy5waGFzZXMuSEFWRV9SRVNVTFRTOw0KLSAgICAgICAgdGhpcy5udW1fcGVuZGluZy0tOw0KLSAg
ICAgICAgdGhpcy5ub3RpZnlfcmVzdWx0KHRlc3QpOw0KLSAgICB9Ow0KLQ0KLSAgICBUZXN0cy5w
cm90b3R5cGUubm90aWZ5X3Jlc3VsdCA9IGZ1bmN0aW9uKHRlc3QpIHsNCi0gICAgICAgIHZhciB0
aGlzX29iaiA9IHRoaXM7DQotICAgICAgICB0aGlzLnByb2Nlc3NpbmdfY2FsbGJhY2tzID0gdHJ1
ZTsNCi0gICAgICAgIGZvckVhY2godGhpcy50ZXN0X2RvbmVfY2FsbGJhY2tzLA0KLSAgICAgICAg
ICAgICAgICBmdW5jdGlvbihjYWxsYmFjaykNCi0gICAgICAgICAgICAgICAgew0KLSAgICAgICAg
ICAgICAgICAgICAgY2FsbGJhY2sodGVzdCwgdGhpc19vYmopOw0KLSAgICAgICAgICAgICAgICB9
KTsNCi0NCi0gICAgICAgIGZvckVhY2hfd2luZG93cygNCi0gICAgICAgICAgICAgICAgZnVuY3Rp
b24odywgaXNfc2FtZV9vcmlnaW4pDQotICAgICAgICAgICAgICAgIHsNCi0gICAgICAgICAgICAg
ICAgICAgIGlmKGlzX3NhbWVfb3JpZ2luICYmIHcucmVzdWx0X2NhbGxiYWNrKQ0KLSAgICAgICAg
ICAgICAgICAgICAgew0KLSAgICAgICAgICAgICAgICAgICAgICAgIHRyeQ0KLSAgICAgICAgICAg
ICAgICAgICAgICAgIHsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgdy5yZXN1bHRfY2Fs
bGJhY2sodGVzdCk7DQotICAgICAgICAgICAgICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgICAg
ICAgICAgICAgIGNhdGNoKGUpDQotICAgICAgICAgICAgICAgICAgICAgICAgew0KLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBpZihkZWJ1Zykgew0KLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgdGhyb3cgZTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgfQ0KLSAgICAg
ICAgICAgICAgICAgICAgICAgIH0NCi0gICAgICAgICAgICAgICAgICAgIH0NCi0gICAgICAgICAg
ICAgICAgICAgIGlmIChzdXBwb3J0c19wb3N0X21lc3NhZ2UodykpDQotICAgICAgICAgICAgICAg
ICAgICB7DQotICAgICAgICAgICAgICAgICAgICAgICAgdy5wb3N0TWVzc2FnZSh7DQotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHR5cGU6ICJyZXN1bHQiLA0KLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB0ZXN0OiB0ZXN0LnN0cnVjdHVyZWRfY2xvbmUoKQ0KLSAgICAgICAgICAgICAg
ICAgICAgICAgIH0sICIqIik7DQotICAgICAgICAgICAgICAgICAgICB9DQotICAgICAgICAgICAg
ICAgIH0pOw0KLSAgICAgICAgdGhpcy5wcm9jZXNzaW5nX2NhbGxiYWNrcyA9IGZhbHNlOw0KLSAg
ICAgICAgaWYgKHRoaXNfb2JqLmFsbF9kb25lKCkpDQotICAgICAgICB7DQotICAgICAgICAgICAg
dGhpc19vYmouY29tcGxldGUoKTsNCi0gICAgICAgIH0NCi0gICAgfTsNCi0NCi0gICAgVGVzdHMu
cHJvdG90eXBlLmNvbXBsZXRlID0gZnVuY3Rpb24oKSB7DQotICAgICAgICBpZiAodGhpcy5waGFz
ZSA9PT0gdGhpcy5waGFzZXMuQ09NUExFVEUpIHsNCi0gICAgICAgICAgICByZXR1cm47DQotICAg
ICAgICB9DQotICAgICAgICB0aGlzLnBoYXNlID0gdGhpcy5waGFzZXMuQ09NUExFVEU7DQotICAg
ICAgICB2YXIgdGhpc19vYmogPSB0aGlzOw0KLSAgICAgICAgdGhpcy50ZXN0cy5mb3JFYWNoKA0K
LSAgICAgICAgICAgIGZ1bmN0aW9uKHgpDQotICAgICAgICAgICAgew0KLSAgICAgICAgICAgICAg
ICBpZih4LnN0YXR1cyA9PT0geC5OT1RSVU4pDQotICAgICAgICAgICAgICAgIHsNCi0gICAgICAg
ICAgICAgICAgICAgIHRoaXNfb2JqLm5vdGlmeV9yZXN1bHQoeCk7DQotICAgICAgICAgICAgICAg
IH0NCi0gICAgICAgICAgICB9DQotICAgICAgICApOw0KLSAgICAgICAgdGhpcy5ub3RpZnlfY29t
cGxldGUoKTsNCi0gICAgfTsNCi0NCi0gICAgVGVzdHMucHJvdG90eXBlLm5vdGlmeV9jb21wbGV0
ZSA9IGZ1bmN0aW9uKCkNCi0gICAgew0KLSAgICAgICAgY2xlYXJUaW1lb3V0KHRoaXMudGltZW91
dF9pZCk7DQotICAgICAgICB2YXIgdGhpc19vYmogPSB0aGlzOw0KLSAgICAgICAgdmFyIHRlc3Rz
ID0gbWFwKHRoaXNfb2JqLnRlc3RzLA0KLSAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9u
KHRlc3QpDQotICAgICAgICAgICAgICAgICAgICAgICAgew0KLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICByZXR1cm4gdGVzdC5zdHJ1Y3R1cmVkX2Nsb25lKCk7DQotICAgICAgICAgICAgICAg
ICAgICAgICAgfSk7DQotICAgICAgICBpZiAodGhpcy5zdGF0dXMuc3RhdHVzID09PSBudWxsKQ0K
LSAgICAgICAgew0KLSAgICAgICAgICAgIHRoaXMuc3RhdHVzLnN0YXR1cyA9IHRoaXMuc3RhdHVz
Lk9LOw0KLSAgICAgICAgfQ0KLQ0KLSAgICAgICAgZm9yRWFjaCAodGhpcy5hbGxfZG9uZV9jYWxs
YmFja3MsDQotICAgICAgICAgICAgICAgICBmdW5jdGlvbihjYWxsYmFjaykNCi0gICAgICAgICAg
ICAgICAgIHsNCi0gICAgICAgICAgICAgICAgICAgICBjYWxsYmFjayh0aGlzX29iai50ZXN0cywg
dGhpc19vYmouc3RhdHVzKTsNCi0gICAgICAgICAgICAgICAgIH0pOw0KLQ0KLSAgICAgICAgZm9y
RWFjaF93aW5kb3dzKA0KLSAgICAgICAgICAgICAgICBmdW5jdGlvbih3LCBpc19zYW1lX29yaWdp
bikNCi0gICAgICAgICAgICAgICAgew0KLSAgICAgICAgICAgICAgICAgICAgaWYoaXNfc2FtZV9v
cmlnaW4gJiYgdy5jb21wbGV0aW9uX2NhbGxiYWNrKQ0KLSAgICAgICAgICAgICAgICAgICAgew0K
LSAgICAgICAgICAgICAgICAgICAgICAgIHRyeQ0KLSAgICAgICAgICAgICAgICAgICAgICAgIHsN
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgdy5jb21wbGV0aW9uX2NhbGxiYWNrKHRoaXNf
b2JqLnRlc3RzLCB0aGlzX29iai5zdGF0dXMpOw0KLSAgICAgICAgICAgICAgICAgICAgICAgIH0N
Ci0gICAgICAgICAgICAgICAgICAgICAgICBjYXRjaChlKQ0KLSAgICAgICAgICAgICAgICAgICAg
ICAgIHsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGRlYnVnKQ0KLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0
aHJvdyBlOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB9DQotICAgICAgICAgICAgICAg
ICAgICAgICAgfQ0KLSAgICAgICAgICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgICAgICAgICAg
aWYgKHN1cHBvcnRzX3Bvc3RfbWVzc2FnZSh3KSkNCi0gICAgICAgICAgICAgICAgICAgIHsNCi0g
ICAgICAgICAgICAgICAgICAgICAgICB3LnBvc3RNZXNzYWdlKHsNCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgdHlwZTogImNvbXBsZXRlIiwNCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgdGVzdHM6IHRlc3RzLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0dXM6IHRo
aXNfb2JqLnN0YXR1cy5zdHJ1Y3R1cmVkX2Nsb25lKCkNCi0gICAgICAgICAgICAgICAgICAgICAg
ICB9LCAiKiIpOw0KLSAgICAgICAgICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgICAgICB9KTsN
Ci0gICAgfTsNCi0NCi0gICAgdmFyIHRlc3RzID0gbmV3IFRlc3RzKCk7DQotDQotICAgIGZ1bmN0
aW9uIHRpbWVvdXQoKSB7DQotICAgICAgICBpZiAodGVzdHMudGltZW91dF9sZW5ndGggPT09IG51
bGwpDQotICAgICAgICB7DQotICAgICAgICAgICAgdGVzdHMudGltZW91dCgpOw0KLSAgICAgICAg
fQ0KLSAgICB9DQotICAgIGV4cG9zZSh0aW1lb3V0LCAndGltZW91dCcpOw0KLQ0KLSAgICBmdW5j
dGlvbiBhZGRfc3RhcnRfY2FsbGJhY2soY2FsbGJhY2spIHsNCi0gICAgICAgIHRlc3RzLnN0YXJ0
X2NhbGxiYWNrcy5wdXNoKGNhbGxiYWNrKTsNCi0gICAgfQ0KLQ0KLSAgICBmdW5jdGlvbiBhZGRf
cmVzdWx0X2NhbGxiYWNrKGNhbGxiYWNrKQ0KLSAgICB7DQotICAgICAgICB0ZXN0cy50ZXN0X2Rv
bmVfY2FsbGJhY2tzLnB1c2goY2FsbGJhY2spOw0KLSAgICB9DQotDQotICAgIGZ1bmN0aW9uIGFk
ZF9jb21wbGV0aW9uX2NhbGxiYWNrKGNhbGxiYWNrKQ0KLSAgICB7DQotICAgICAgIHRlc3RzLmFs
bF9kb25lX2NhbGxiYWNrcy5wdXNoKGNhbGxiYWNrKTsNCi0gICAgfQ0KLQ0KLSAgICBleHBvc2Uo
YWRkX3N0YXJ0X2NhbGxiYWNrLCAnYWRkX3N0YXJ0X2NhbGxiYWNrJyk7DQotICAgIGV4cG9zZShh
ZGRfcmVzdWx0X2NhbGxiYWNrLCAnYWRkX3Jlc3VsdF9jYWxsYmFjaycpOw0KLSAgICBleHBvc2Uo
YWRkX2NvbXBsZXRpb25fY2FsbGJhY2ssICdhZGRfY29tcGxldGlvbl9jYWxsYmFjaycpOw0KLQ0K
LSAgICAvKg0KLSAgICAgKiBPdXRwdXQgbGlzdGVuZXINCi0gICAgKi8NCi0NCi0gICAgZnVuY3Rp
b24gT3V0cHV0KCkgew0KLSAgICAgIHRoaXMub3V0cHV0X2RvY3VtZW50ID0gZG9jdW1lbnQ7DQot
ICAgICAgdGhpcy5vdXRwdXRfbm9kZSA9IG51bGw7DQotICAgICAgdGhpcy5kb25lX2NvdW50ID0g
MDsNCi0gICAgICB0aGlzLmVuYWJsZWQgPSBzZXR0aW5ncy5vdXRwdXQ7DQotICAgICAgdGhpcy5w
aGFzZSA9IHRoaXMuSU5JVElBTDsNCi0gICAgfQ0KLQ0KLSAgICBPdXRwdXQucHJvdG90eXBlLklO
SVRJQUwgPSAwOw0KLSAgICBPdXRwdXQucHJvdG90eXBlLlNUQVJURUQgPSAxOw0KLSAgICBPdXRw
dXQucHJvdG90eXBlLkhBVkVfUkVTVUxUUyA9IDI7DQotICAgIE91dHB1dC5wcm90b3R5cGUuQ09N
UExFVEUgPSAzOw0KLQ0KLSAgICBPdXRwdXQucHJvdG90eXBlLnNldHVwID0gZnVuY3Rpb24ocHJv
cGVydGllcykgew0KLSAgICAgICAgaWYgKHRoaXMucGhhc2UgPiB0aGlzLklOSVRJQUwpIHsNCi0g
ICAgICAgICAgICByZXR1cm47DQotICAgICAgICB9DQotDQotICAgICAgICAvL0lmIG91dHB1dCBp
cyBkaXNhYmxlZCBpbiB0ZXN0aGFybmVzc3JlcG9ydC5qcyB0aGUgdGVzdCBzaG91bGRuJ3QgYmUN
Ci0gICAgICAgIC8vYWJsZSB0byBvdmVycmlkZSB0aGF0DQotICAgICAgICB0aGlzLmVuYWJsZWQg
PSB0aGlzLmVuYWJsZWQgJiYgKHByb3BlcnRpZXMuaGFzT3duUHJvcGVydHkoIm91dHB1dCIpID8N
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvcGVydGllcy5vdXRw
dXQgOiBzZXR0aW5ncy5vdXRwdXQpOw0KLSAgICB9Ow0KLQ0KLSAgICBPdXRwdXQucHJvdG90eXBl
LmluaXQgPSBmdW5jdGlvbihwcm9wZXJ0aWVzKQ0KLSAgICB7DQotICAgICAgICBpZiAodGhpcy5w
aGFzZSA+PSB0aGlzLlNUQVJURUQpIHsNCi0gICAgICAgICAgICByZXR1cm47DQotICAgICAgICB9
DQotICAgICAgICBpZiAocHJvcGVydGllcy5vdXRwdXRfZG9jdW1lbnQpIHsNCi0gICAgICAgICAg
ICB0aGlzLm91dHB1dF9kb2N1bWVudCA9IHByb3BlcnRpZXMub3V0cHV0X2RvY3VtZW50Ow0KLSAg
ICAgICAgfSBlbHNlIHsNCi0gICAgICAgICAgICB0aGlzLm91dHB1dF9kb2N1bWVudCA9IGRvY3Vt
ZW50Ow0KLSAgICAgICAgfQ0KLSAgICAgICAgdGhpcy5waGFzZSA9IHRoaXMuU1RBUlRFRDsNCi0g
ICAgfTsNCi0NCi0gICAgT3V0cHV0LnByb3RvdHlwZS5yZXNvbHZlX2xvZyA9IGZ1bmN0aW9uKCkN
Ci0gICAgew0KLSAgICAgICAgdmFyIG91dHB1dF9kb2N1bWVudDsNCi0gICAgICAgIGlmICh0eXBl
b2YgdGhpcy5vdXRwdXRfZG9jdW1lbnQgPT09ICJmdW5jdGlvbiIpDQotICAgICAgICB7DQotICAg
ICAgICAgICAgb3V0cHV0X2RvY3VtZW50ID0gdGhpcy5vdXRwdXRfZG9jdW1lbnQuYXBwbHkodW5k
ZWZpbmVkKTsNCi0gICAgICAgIH0gZWxzZQ0KLSAgICAgICAgew0KLSAgICAgICAgICAgIG91dHB1
dF9kb2N1bWVudCA9IHRoaXMub3V0cHV0X2RvY3VtZW50Ow0KLSAgICAgICAgfQ0KLSAgICAgICAg
aWYgKCFvdXRwdXRfZG9jdW1lbnQpDQotICAgICAgICB7DQotICAgICAgICAgICAgcmV0dXJuOw0K
LSAgICAgICAgfQ0KLSAgICAgICAgdmFyIG5vZGUgPSBvdXRwdXRfZG9jdW1lbnQuZ2V0RWxlbWVu
dEJ5SWQoImxvZyIpOw0KLSAgICAgICAgaWYgKG5vZGUpDQotICAgICAgICB7DQotICAgICAgICAg
ICAgdGhpcy5vdXRwdXRfZG9jdW1lbnQgPSBvdXRwdXRfZG9jdW1lbnQ7DQotICAgICAgICAgICAg
dGhpcy5vdXRwdXRfbm9kZSA9IG5vZGU7DQotICAgICAgICB9DQotICAgIH07DQotDQotICAgIE91
dHB1dC5wcm90b3R5cGUuc2hvd19zdGF0dXMgPSBmdW5jdGlvbih0ZXN0KQ0KLSAgICB7DQotICAg
ICAgICBpZiAodGhpcy5waGFzZSA8IHRoaXMuU1RBUlRFRCkNCi0gICAgICAgIHsNCi0gICAgICAg
ICAgICB0aGlzLmluaXQoKTsNCi0gICAgICAgIH0NCi0gICAgICAgIGlmICghdGhpcy5lbmFibGVk
KQ0KLSAgICAgICAgew0KLSAgICAgICAgICAgIHJldHVybjsNCi0gICAgICAgIH0NCi0gICAgICAg
IGlmICh0aGlzLnBoYXNlIDwgdGhpcy5IQVZFX1JFU1VMVFMpDQotICAgICAgICB7DQotICAgICAg
ICAgICAgdGhpcy5yZXNvbHZlX2xvZygpOw0KLSAgICAgICAgICAgIHRoaXMucGhhc2UgPSB0aGlz
LkhBVkVfUkVTVUxUUzsNCi0gICAgICAgIH0NCi0gICAgICAgIHRoaXMuZG9uZV9jb3VudCsrOw0K
LSAgICAgICAgaWYgKHRoaXMub3V0cHV0X25vZGUpDQotICAgICAgICB7DQotICAgICAgICAgICAg
aWYgKHRoaXMuZG9uZV9jb3VudCA8IDEwMA0KLSAgICAgICAgICAgIHx8ICh0aGlzLmRvbmVfY291
bnQgPCAxMDAwICYmIHRoaXMuZG9uZV9jb3VudCAlIDEwMCA9PSAwKQ0KLSAgICAgICAgICAgIHx8
IHRoaXMuZG9uZV9jb3VudCAlIDEwMDAgPT0gMCkgew0KLSAgICAgICAgICAgICAgICB0aGlzLm91
dHB1dF9ub2RlLnRleHRDb250ZW50ID0gIlJ1bm5pbmcsICINCi0gICAgICAgICAgICAgICAgICAg
ICsgdGhpcy5kb25lX2NvdW50ICsgIiBjb21wbGV0ZSwgIg0KLSAgICAgICAgICAgICAgICAgICAg
KyB0ZXN0cy5udW1fcGVuZGluZyArICIgcmVtYWluIjsNCi0gICAgICAgICAgICB9DQotICAgICAg
ICB9DQotICAgIH07DQotDQotICAgIE91dHB1dC5wcm90b3R5cGUuc2hvd19yZXN1bHRzID0gZnVu
Y3Rpb24gKHRlc3RzLCBoYXJuZXNzX3N0YXR1cykNCi0gICAgew0KLSAgICAgICAgaWYgKHRoaXMu
cGhhc2UgPj0gdGhpcy5DT01QTEVURSkgew0KLSAgICAgICAgICAgIHJldHVybjsNCi0gICAgICAg
IH0NCi0gICAgICAgIGlmICghdGhpcy5lbmFibGVkKQ0KLSAgICAgICAgew0KLSAgICAgICAgICAg
IHJldHVybjsNCi0gICAgICAgIH0NCi0gICAgICAgIGlmICghdGhpcy5vdXRwdXRfbm9kZSkgew0K
LSAgICAgICAgICAgIHRoaXMucmVzb2x2ZV9sb2coKTsNCi0gICAgICAgIH0NCi0gICAgICAgIHRo
aXMucGhhc2UgPSB0aGlzLkNPTVBMRVRFOw0KLQ0KLSAgICAgICAgdmFyIGxvZyA9IHRoaXMub3V0
cHV0X25vZGU7DQotICAgICAgICBpZiAoIWxvZykNCi0gICAgICAgIHsNCi0gICAgICAgICAgICBy
ZXR1cm47DQotICAgICAgICB9DQotICAgICAgICB2YXIgb3V0cHV0X2RvY3VtZW50ID0gdGhpcy5v
dXRwdXRfZG9jdW1lbnQ7DQotDQotICAgICAgICB3aGlsZSAobG9nLmxhc3RDaGlsZCkNCi0gICAg
ICAgIHsNCi0gICAgICAgICAgICBsb2cucmVtb3ZlQ2hpbGQobG9nLmxhc3RDaGlsZCk7DQotICAg
ICAgICB9DQotDQotICAgICAgICBpZiAoc2NyaXB0X3ByZWZpeCAhPSBudWxsKSB7DQotICAgICAg
ICAgICAgdmFyIHN0eWxlc2hlZXQgPSBvdXRwdXRfZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKHho
dG1sX25zLCAibGluayIpOw0KLSAgICAgICAgICAgIHN0eWxlc2hlZXQuc2V0QXR0cmlidXRlKCJy
ZWwiLCAic3R5bGVzaGVldCIpOw0KLSAgICAgICAgICAgIHN0eWxlc2hlZXQuc2V0QXR0cmlidXRl
KCJocmVmIiwgc2NyaXB0X3ByZWZpeCArICJ0ZXN0aGFybmVzcy5jc3MiKTsNCi0gICAgICAgICAg
ICB2YXIgaGVhZHMgPSBvdXRwdXRfZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoImhlYWQi
KTsNCi0gICAgICAgICAgICBpZiAoaGVhZHMubGVuZ3RoKSB7DQotICAgICAgICAgICAgICAgIGhl
YWRzWzBdLmFwcGVuZENoaWxkKHN0eWxlc2hlZXQpOw0KLSAgICAgICAgICAgIH0NCi0gICAgICAg
IH0NCi0NCi0gICAgICAgIHZhciBzdGF0dXNfdGV4dCA9IHt9Ow0KLSAgICAgICAgc3RhdHVzX3Rl
eHRbVGVzdC5wcm90b3R5cGUuUEFTU10gPSAiUGFzcyI7DQotICAgICAgICBzdGF0dXNfdGV4dFtU
ZXN0LnByb3RvdHlwZS5GQUlMXSA9ICJGYWlsIjsNCi0gICAgICAgIHN0YXR1c190ZXh0W1Rlc3Qu
cHJvdG90eXBlLlRJTUVPVVRdID0gIlRpbWVvdXQiOw0KLSAgICAgICAgc3RhdHVzX3RleHRbVGVz
dC5wcm90b3R5cGUuTk9UUlVOXSA9ICJOb3QgUnVuIjsNCi0NCi0gICAgICAgIHZhciBzdGF0dXNf
bnVtYmVyID0ge307DQotICAgICAgICBmb3JFYWNoKHRlc3RzLCBmdW5jdGlvbih0ZXN0KSB7DQot
ICAgICAgICAgICAgICAgICAgICB2YXIgc3RhdHVzID0gc3RhdHVzX3RleHRbdGVzdC5zdGF0dXNd
Ow0KLSAgICAgICAgICAgICAgICAgICAgaWYgKHN0YXR1c19udW1iZXIuaGFzT3duUHJvcGVydHko
c3RhdHVzKSkNCi0gICAgICAgICAgICAgICAgICAgIHsNCi0gICAgICAgICAgICAgICAgICAgICAg
ICBzdGF0dXNfbnVtYmVyW3N0YXR1c10gKz0gMTsNCi0gICAgICAgICAgICAgICAgICAgIH0gZWxz
ZSB7DQotICAgICAgICAgICAgICAgICAgICAgICAgc3RhdHVzX251bWJlcltzdGF0dXNdID0gMTsN
Ci0gICAgICAgICAgICAgICAgICAgIH0NCi0gICAgICAgICAgICAgICAgfSk7DQotDQotICAgICAg
ICBmdW5jdGlvbiBzdGF0dXNfY2xhc3Moc3RhdHVzKQ0KLSAgICAgICAgew0KLSAgICAgICAgICAg
IHJldHVybiBzdGF0dXMucmVwbGFjZSgvXHMvZywgJycpLnRvTG93ZXJDYXNlKCk7DQotICAgICAg
ICB9DQotDQotICAgICAgICB2YXIgc3VtbWFyeV90ZW1wbGF0ZSA9IFsic2VjdGlvbiIsIHsiaWQi
OiJzdW1tYXJ5In0sDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbImgyIiwge30s
ICJTdW1tYXJ5Il0sDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbInAiLCB7fSwg
IkZvdW5kICR7bnVtX3Rlc3RzfSB0ZXN0cyJdLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgZnVuY3Rpb24odmFycykgew0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHZhciBydiA9IFtbImRpdiIsIHt9XV07DQotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgdmFyIGk9MDsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3
aGlsZSAoc3RhdHVzX3RleHQuaGFzT3duUHJvcGVydHkoaSkpIHsNCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHN0YXR1c19udW1iZXIuaGFzT3duUHJvcGVydHko
c3RhdHVzX3RleHRbaV0pKSB7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB2YXIgc3RhdHVzID0gc3RhdHVzX3RleHRbaV07DQotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBydlswXS5wdXNoKFsiZGl2IiwgeyJjbGFzcyI6c3Rh
dHVzX2NsYXNzKHN0YXR1cyl9LA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgWyJsYWJlbCIsIHt9LA0KLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFsiaW5wdXQiLCB7dHlwZToiY2hl
Y2tib3giLCBjaGVja2VkOiJjaGVja2VkIn1dLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXR1c19udW1iZXJbc3RhdHVzXSArICIg
IiArIHN0YXR1c11dKTsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
fQ0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpKys7DQotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHJldHVybiBydjsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IH1dOw0KLQ0KLSAgICAgICAgbG9nLmFwcGVuZENoaWxkKHJlbmRlcihzdW1tYXJ5X3RlbXBsYXRl
LCB7bnVtX3Rlc3RzOnRlc3RzLmxlbmd0aH0sIG91dHB1dF9kb2N1bWVudCkpOw0KLQ0KLSAgICAg
ICAgZm9yRWFjaChvdXRwdXRfZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgic2VjdGlvbiNzdW1t
YXJ5IGxhYmVsIiksDQotICAgICAgICAgICAgICAgIGZ1bmN0aW9uKGVsZW1lbnQpDQotICAgICAg
ICAgICAgICAgIHsNCi0gICAgICAgICAgICAgICAgICAgIG9uX2V2ZW50KGVsZW1lbnQsICJjbGlj
ayIsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbihlKQ0KLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgew0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGlmIChvdXRwdXRfZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoInJlc3VsdHMiKSA9PT0gbnVsbCkN
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7DQotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTsNCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIH0NCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgcmVzdWx0X2Ns
YXNzID0gZWxlbWVudC5wYXJlbnROb2RlLmdldEF0dHJpYnV0ZSgiY2xhc3MiKTsNCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgc3R5bGVfZWxlbWVudCA9IG91dHB1dF9kb2N1
bWVudC5xdWVyeVNlbGVjdG9yKCJzdHlsZSNoaWRlLSIgKyByZXN1bHRfY2xhc3MpOw0KLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBpbnB1dF9lbGVtZW50ID0gZWxlbWVudC5x
dWVyeVNlbGVjdG9yKCJpbnB1dCIpOw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGlmICghc3R5bGVfZWxlbWVudCAmJiAhaW5wdXRfZWxlbWVudC5jaGVja2VkKSB7DQotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0eWxlX2VsZW1lbnQgPSBvdXRwdXRfZG9j
dW1lbnQuY3JlYXRlRWxlbWVudE5TKHhodG1sX25zLCAic3R5bGUiKTsNCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgc3R5bGVfZWxlbWVudC5pZCA9ICJoaWRlLSIgKyByZXN1
bHRfY2xhc3M7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0eWxlX2Vs
ZW1lbnQudGV4dENvbnRlbnQgPSAidGFibGUjcmVzdWx0cyA+IHRib2R5ID4gdHIuIityZXN1bHRf
Y2xhc3MrIntkaXNwbGF5Om5vbmV9IjsNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgb3V0cHV0X2RvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoc3R5bGVfZWxlbWVudCk7DQot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChzdHlsZV9lbGVtZW50
ICYmIGlucHV0X2VsZW1lbnQuY2hlY2tlZCkgew0KLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBzdHlsZV9lbGVtZW50LnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQoc3R5bGVfZWxl
bWVudCk7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQ0KLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgfSk7DQotICAgICAgICAgICAgICAgIH0pOw0KLQ0KLSAgICAgICAg
Ly8gVGhpcyB1c2Ugb2YgaW5uZXJIVE1MIHBsdXMgbWFudWFsIGVzY2FwaW5nIGlzIG5vdCByZWNv
bW1lbmRlZCBpbg0KLSAgICAgICAgLy8gZ2VuZXJhbCwgYnV0IGlzIG5lY2Vzc2FyeSBoZXJlIGZv
ciBwZXJmb3JtYW5jZS4gIFVzaW5nIHRleHRDb250ZW50DQotICAgICAgICAvLyBvbiBlYWNoIGlu
ZGl2aWR1YWwgPHRkPiBhZGRzIHRlbnMgb2Ygc2Vjb25kcyBvZiBleGVjdXRpb24gdGltZSBmb3IN
Ci0gICAgICAgIC8vIGxhcmdlIHRlc3Qgc3VpdGVzICh0ZW5zIG9mIHRob3VzYW5kcyBvZiB0ZXN0
cykuDQotICAgICAgICBmdW5jdGlvbiBlc2NhcGVfaHRtbChzKQ0KLSAgICAgICAgew0KLSAgICAg
ICAgICAgIHJldHVybiBzLnJlcGxhY2UoL1wmL2csICImYW1wOyIpDQotICAgICAgICAgICAgICAg
IC5yZXBsYWNlKC88L2csICImbHQ7IikNCi0gICAgICAgICAgICAgICAgLnJlcGxhY2UoLyIvZywg
IiZxdW90OyIpDQotICAgICAgICAgICAgICAgIC5yZXBsYWNlKC8nL2csICImIzM5OyIpOw0KLSAg
ICAgICAgfQ0KLQ0KLSAgICAgICAgZnVuY3Rpb24gaGFzX2Fzc2VydGlvbnMoKQ0KLSAgICAgICAg
ew0KLSAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGVzdHMubGVuZ3RoOyBpKyspIHsN
Ci0gICAgICAgICAgICAgICAgaWYgKHRlc3RzW2ldLnByb3BlcnRpZXMuaGFzT3duUHJvcGVydHko
ImFzc2VydCIpKSB7DQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsNCi0gICAgICAg
ICAgICAgICAgfQ0KLSAgICAgICAgICAgIH0NCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7DQot
ICAgICAgICB9DQotICAgICAgICANCi0gICAgICAgIGZ1bmN0aW9uIGdldF9hc3NlcnRpb24odGVz
dCkNCi0gICAgICAgIHsNCi0gICAgICAgICAgICBpZiAodGVzdC5wcm9wZXJ0aWVzLmhhc093blBy
b3BlcnR5KCJhc3NlcnQiKSkgew0KLSAgICAgICAgICAgICAgICBpZiAoQXJyYXkuaXNBcnJheSh0
ZXN0LnByb3BlcnRpZXMuYXNzZXJ0KSkgew0KLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRl
c3QucHJvcGVydGllcy5hc3NlcnQuam9pbignICcpOw0KLSAgICAgICAgICAgICAgICB9DQotICAg
ICAgICAgICAgICAgIHJldHVybiB0ZXN0LnByb3BlcnRpZXMuYXNzZXJ0Ow0KLSAgICAgICAgICAg
IH0NCi0gICAgICAgICAgICByZXR1cm4gJyc7DQotICAgICAgICB9DQotICAgICAgICANCi0gICAg
ICAgIGxvZy5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoeGh0bWxfbnMsICJz
ZWN0aW9uIikpOw0KLSAgICAgICAgdmFyIGFzc2VydGlvbnMgPSBoYXNfYXNzZXJ0aW9ucygpOw0K
LSAgICAgICAgdmFyIGh0bWwgPSAiPGgyPkRldGFpbHM8L2gyPjx0YWJsZSBpZD0ncmVzdWx0cycg
IiArIChhc3NlcnRpb25zID8gImNsYXNzPSdhc3NlcnRpb25zJyIgOiAiIiApICsgIj4iDQotICAg
ICAgICAgICAgKyAiPHRoZWFkPjx0cj48dGg+UmVzdWx0PC90aD48dGg+VGVzdCBOYW1lPC90aD4i
DQotICAgICAgICAgICAgKyAoYXNzZXJ0aW9ucyA/ICI8dGg+QXNzZXJ0aW9uPC90aD4iIDogIiIp
DQotICAgICAgICAgICAgKyAiPHRoPk1lc3NhZ2U8L3RoPjwvdHI+PC90aGVhZD4iDQotICAgICAg
ICAgICAgKyAiPHRib2R5PiI7DQotICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRlc3RzLmxl
bmd0aDsgaSsrKSB7DQotICAgICAgICAgICAgaHRtbCArPSAnPHRyIGNsYXNzPSInDQotICAgICAg
ICAgICAgICAgICsgZXNjYXBlX2h0bWwoc3RhdHVzX2NsYXNzKHN0YXR1c190ZXh0W3Rlc3RzW2ld
LnN0YXR1c10pKQ0KLSAgICAgICAgICAgICAgICArICciPjx0ZD4nDQotICAgICAgICAgICAgICAg
ICsgZXNjYXBlX2h0bWwoc3RhdHVzX3RleHRbdGVzdHNbaV0uc3RhdHVzXSkNCi0gICAgICAgICAg
ICAgICAgKyAiPC90ZD48dGQ+Ig0KLSAgICAgICAgICAgICAgICArIGVzY2FwZV9odG1sKHRlc3Rz
W2ldLm5hbWUpDQotICAgICAgICAgICAgICAgICsgIjwvdGQ+PHRkPiINCi0gICAgICAgICAgICAg
ICAgKyAoYXNzZXJ0aW9ucyA/IGVzY2FwZV9odG1sKGdldF9hc3NlcnRpb24odGVzdHNbaV0pKSAr
ICI8L3RkPjx0ZD4iIDogIiIpDQotICAgICAgICAgICAgICAgICsgZXNjYXBlX2h0bWwodGVzdHNb
aV0ubWVzc2FnZSA/IHRlc3RzW2ldLm1lc3NhZ2UgOiAiICIpDQotICAgICAgICAgICAgICAgICsg
IjwvdGQ+PC90cj4iOw0KLSAgICAgICAgfQ0KLSAgICAgICAgaHRtbCArPSAiPC90Ym9keT48L3Rh
YmxlPiI7DQotICAgICAgICB0cnkgew0KLSAgICAgICAgICAgIGxvZy5sYXN0Q2hpbGQuaW5uZXJI
VE1MID0gaHRtbDsNCi0gICAgICAgIH0gY2F0Y2ggKGUpIHsNCi0gICAgICAgICAgICBsb2cuYXBw
ZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKHhodG1sX25zLCAicCIpKQ0KLSAgICAg
ICAgICAgICAgIC50ZXh0Q29udGVudCA9ICJTZXR0aW5nIGlubmVySFRNTCBmb3IgdGhlIGxvZyB0
aHJldyBhbiBleGNlcHRpb24uIjsNCi0gICAgICAgICAgICBsb2cuYXBwZW5kQ2hpbGQoZG9jdW1l
bnQuY3JlYXRlRWxlbWVudE5TKHhodG1sX25zLCAicHJlIikpDQotICAgICAgICAgICAgICAgLnRl
eHRDb250ZW50ID0gaHRtbDsNCi0gICAgICAgIH0NCi0gICAgfTsNCi0NCi0gICAgdmFyIG91dHB1
dCA9IG5ldyBPdXRwdXQoKTsNCi0gICAgYWRkX3N0YXJ0X2NhbGxiYWNrKGZ1bmN0aW9uIChwcm9w
ZXJ0aWVzKSB7b3V0cHV0LmluaXQocHJvcGVydGllcyk7fSk7DQotICAgIGFkZF9yZXN1bHRfY2Fs
bGJhY2soZnVuY3Rpb24gKHRlc3QpIHtvdXRwdXQuc2hvd19zdGF0dXModGVzdHMpO30pOw0KLSAg
ICBhZGRfY29tcGxldGlvbl9jYWxsYmFjayhmdW5jdGlvbiAodGVzdHMsIGhhcm5lc3Nfc3RhdHVz
KSB7b3V0cHV0LnNob3dfcmVzdWx0cyh0ZXN0cywgaGFybmVzc19zdGF0dXMpO30pOw0KLQ0KLSAg
ICAvKg0KLSAgICAgKiBUZW1wbGF0ZSBjb2RlDQotICAgICAqDQotICAgICAqIEEgdGVtcGxhdGUg
aXMganVzdCBhIGphdmFzY3JpcHQgc3RydWN0dXJlLiBBbiBlbGVtZW50IGlzIHJlcHJlc2VudGVk
IGFzOg0KLSAgICAgKg0KLSAgICAgKiBbdGFnX25hbWUsIHthdHRyX25hbWU6YXR0cl92YWx1ZX0s
IGNoaWxkMSwgY2hpbGQyXQ0KLSAgICAgKg0KLSAgICAgKiB0aGUgY2hpbGRyZW4gY2FuIGVpdGhl
ciBiZSBzdHJpbmdzICh3aGljaCBhY3QgbGlrZSB0ZXh0IG5vZGVzKSwgb3RoZXIgdGVtcGxhdGVz
IG9yDQotICAgICAqIGZ1bmN0aW9ucyAoc2VlIGJlbG93KQ0KLSAgICAgKg0KLSAgICAgKiBBIHRl
eHQgbm9kZSBpcyByZXByZXNlbnRlZCBhcw0KLSAgICAgKg0KLSAgICAgKiBbInt0ZXh0fSIsIHZh
bHVlXQ0KLSAgICAgKg0KLSAgICAgKiBTdHJpbmcgdmFsdWVzIGhhdmUgYSBzaW1wbGUgc3Vic3Rp
dHV0aW9uIHN5bnRheDsgJHtmb299IHJlcHJlc2VudHMgYSB2YXJpYWJsZSBmb28uDQotICAgICAq
DQotICAgICAqIEl0IGlzIHBvc3NpYmxlIHRvIGVtYmVkIGxvZ2ljIGluIHRlbXBsYXRlcyBieSB1
c2luZyBhIGZ1bmN0aW9uIGluIGEgcGxhY2Ugd2hlcmUgYQ0KLSAgICAgKiBub2RlIHdvdWxkIHVz
dWFsbHkgZ28uIFRoZSBmdW5jdGlvbiBtdXN0IGVpdGhlciByZXR1cm4gcGFydCBvZiBhIHRlbXBs
YXRlIG9yIG51bGwuDQotICAgICAqDQotICAgICAqIEluIGNhc2VzIHdoZXJlIGEgc2V0IG9mIG5v
ZGVzIGFyZSByZXF1aXJlZCBhcyBvdXRwdXQgcmF0aGVyIHRoYW4gYSBzaW5nbGUgbm9kZQ0KLSAg
ICAgKiB3aXRoIGNoaWxkcmVuIGl0IGlzIHBvc3NpYmxlIHRvIGp1c3QgdXNlIGEgbGlzdA0KLSAg
ICAgKiBbbm9kZTEsIG5vZGUyLCBub2RlM10NCi0gICAgICoNCi0gICAgICogVXNhZ2U6DQotICAg
ICAqDQotICAgICAqIHJlbmRlcih0ZW1wbGF0ZSwgc3Vic3RpdHV0aW9ucykgLSB0YWtlIGEgdGVt
cGxhdGUgYW5kIGFuIG9iamVjdCBtYXBwaW5nDQotICAgICAqIHZhcmlhYmxlIG5hbWVzIHRvIHBh
cmFtZXRlcnMgYW5kIHJldHVybiBlaXRoZXIgYSBET00gbm9kZSBvciBhIGxpc3Qgb2YgRE9NIG5v
ZGVzDQotICAgICAqDQotICAgICAqIHN1YnN0aXR1dGUodGVtcGxhdGUsIHN1YnN0aXR1dGlvbnMp
IC0gdGFrZSBhIHRlbXBsYXRlIGFuZCB2YXJpYWJsZSBtYXBwaW5nIG9iamVjdCwNCi0gICAgICog
bWFrZSB0aGUgdmFyaWFibGUgc3Vic3RpdHV0aW9ucyBhbmQgcmV0dXJuIHRoZSBzdWJzdGl0dXRl
ZCB0ZW1wbGF0ZQ0KLSAgICAgKg0KLSAgICAgKi8NCi0NCi0gICAgZnVuY3Rpb24gaXNfc2luZ2xl
X25vZGUodGVtcGxhdGUpDQotICAgIHsNCi0gICAgICAgIHJldHVybiB0eXBlb2YgdGVtcGxhdGVb
MF0gPT09ICJzdHJpbmciOw0KLSAgICB9DQotDQotICAgIGZ1bmN0aW9uIHN1YnN0aXR1dGUodGVt
cGxhdGUsIHN1YnN0aXR1dGlvbnMpDQotICAgIHsNCi0gICAgICAgIGlmICh0eXBlb2YgdGVtcGxh
dGUgPT09ICJmdW5jdGlvbiIpIHsNCi0gICAgICAgICAgICB2YXIgcmVwbGFjZW1lbnQgPSB0ZW1w
bGF0ZShzdWJzdGl0dXRpb25zKTsNCi0gICAgICAgICAgICBpZiAocmVwbGFjZW1lbnQpDQotICAg
ICAgICAgICAgew0KLSAgICAgICAgICAgICAgICB2YXIgcnYgPSBzdWJzdGl0dXRlKHJlcGxhY2Vt
ZW50LCBzdWJzdGl0dXRpb25zKTsNCi0gICAgICAgICAgICAgICAgcmV0dXJuIHJ2Ow0KLSAgICAg
ICAgICAgIH0NCi0gICAgICAgICAgICBlbHNlDQotICAgICAgICAgICAgew0KLSAgICAgICAgICAg
ICAgICByZXR1cm4gbnVsbDsNCi0gICAgICAgICAgICB9DQotICAgICAgICB9DQotICAgICAgICBl
bHNlIGlmIChpc19zaW5nbGVfbm9kZSh0ZW1wbGF0ZSkpDQotICAgICAgICB7DQotICAgICAgICAg
ICAgcmV0dXJuIHN1YnN0aXR1dGVfc2luZ2xlKHRlbXBsYXRlLCBzdWJzdGl0dXRpb25zKTsNCi0g
ICAgICAgIH0NCi0gICAgICAgIGVsc2UNCi0gICAgICAgIHsNCi0gICAgICAgICAgICByZXR1cm4g
ZmlsdGVyKG1hcCh0ZW1wbGF0ZSwgZnVuY3Rpb24oeCkgew0KLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICByZXR1cm4gc3Vic3RpdHV0ZSh4LCBzdWJzdGl0dXRpb25zKTsNCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB9KSwgZnVuY3Rpb24oeCkge3JldHVybiB4ICE9PSBu
dWxsO30pOw0KLSAgICAgICAgfQ0KLSAgICB9DQotDQotICAgIGZ1bmN0aW9uIHN1YnN0aXR1dGVf
c2luZ2xlKHRlbXBsYXRlLCBzdWJzdGl0dXRpb25zKQ0KLSAgICB7DQotICAgICAgICB2YXIgc3Vi
c3RpdHV0aW9uX3JlID0gL1wkeyhbXiB9XSopfS9nOw0KLQ0KLSAgICAgICAgZnVuY3Rpb24gZG9f
c3Vic3RpdHV0aW9uKGlucHV0KSB7DQotICAgICAgICAgICAgdmFyIGNvbXBvbmVudHMgPSBpbnB1
dC5zcGxpdChzdWJzdGl0dXRpb25fcmUpOw0KLSAgICAgICAgICAgIHZhciBydiA9IFtdOw0KLSAg
ICAgICAgICAgIGZvciAodmFyIGk9MDsgaTxjb21wb25lbnRzLmxlbmd0aDsgaSs9MikNCi0gICAg
ICAgICAgICB7DQotICAgICAgICAgICAgICAgIHJ2LnB1c2goY29tcG9uZW50c1tpXSk7DQotICAg
ICAgICAgICAgICAgIGlmIChjb21wb25lbnRzW2krMV0pDQotICAgICAgICAgICAgICAgIHsNCi0g
ICAgICAgICAgICAgICAgICAgIHJ2LnB1c2goU3RyaW5nKHN1YnN0aXR1dGlvbnNbY29tcG9uZW50
c1tpKzFdXSkpOw0KLSAgICAgICAgICAgICAgICB9DQotICAgICAgICAgICAgfQ0KLSAgICAgICAg
ICAgIHJldHVybiBydjsNCi0gICAgICAgIH0NCi0NCi0gICAgICAgIHZhciBydiA9IFtdOw0KLSAg
ICAgICAgcnYucHVzaChkb19zdWJzdGl0dXRpb24oU3RyaW5nKHRlbXBsYXRlWzBdKSkuam9pbigi
IikpOw0KLQ0KLSAgICAgICAgaWYgKHRlbXBsYXRlWzBdID09PSAie3RleHR9Iikgew0KLSAgICAg
ICAgICAgIHN1YnN0aXR1dGVfY2hpbGRyZW4odGVtcGxhdGUuc2xpY2UoMSksIHJ2KTsNCi0gICAg
ICAgIH0gZWxzZSB7DQotICAgICAgICAgICAgc3Vic3RpdHV0ZV9hdHRycyh0ZW1wbGF0ZVsxXSwg
cnYpOw0KLSAgICAgICAgICAgIHN1YnN0aXR1dGVfY2hpbGRyZW4odGVtcGxhdGUuc2xpY2UoMiks
IHJ2KTsNCi0gICAgICAgIH0NCi0NCi0gICAgICAgIGZ1bmN0aW9uIHN1YnN0aXR1dGVfYXR0cnMo
YXR0cnMsIHJ2KQ0KLSAgICAgICAgew0KLSAgICAgICAgICAgIHJ2WzFdID0ge307DQotICAgICAg
ICAgICAgZm9yICh2YXIgbmFtZSBpbiB0ZW1wbGF0ZVsxXSkNCi0gICAgICAgICAgICB7DQotICAg
ICAgICAgICAgICAgIGlmIChhdHRycy5oYXNPd25Qcm9wZXJ0eShuYW1lKSkNCi0gICAgICAgICAg
ICAgICAgew0KLSAgICAgICAgICAgICAgICAgICAgdmFyIG5ld19uYW1lID0gZG9fc3Vic3RpdHV0
aW9uKG5hbWUpLmpvaW4oIiIpOw0KLSAgICAgICAgICAgICAgICAgICAgdmFyIG5ld192YWx1ZSA9
IGRvX3N1YnN0aXR1dGlvbihhdHRyc1tuYW1lXSkuam9pbigiIik7DQotICAgICAgICAgICAgICAg
ICAgICBydlsxXVtuZXdfbmFtZV0gPSBuZXdfdmFsdWU7DQotICAgICAgICAgICAgICAgIH07DQot
ICAgICAgICAgICAgfQ0KLSAgICAgICAgfQ0KLQ0KLSAgICAgICAgZnVuY3Rpb24gc3Vic3RpdHV0
ZV9jaGlsZHJlbihjaGlsZHJlbiwgcnYpDQotICAgICAgICB7DQotICAgICAgICAgICAgZm9yICh2
YXIgaT0wOyBpPGNoaWxkcmVuLmxlbmd0aDsgaSsrKQ0KLSAgICAgICAgICAgIHsNCi0gICAgICAg
ICAgICAgICAgaWYgKGNoaWxkcmVuW2ldIGluc3RhbmNlb2YgT2JqZWN0KSB7DQotICAgICAgICAg
ICAgICAgICAgICB2YXIgcmVwbGFjZW1lbnQgPSBzdWJzdGl0dXRlKGNoaWxkcmVuW2ldLCBzdWJz
dGl0dXRpb25zKTsNCi0gICAgICAgICAgICAgICAgICAgIGlmIChyZXBsYWNlbWVudCAhPT0gbnVs
bCkNCi0gICAgICAgICAgICAgICAgICAgIHsNCi0gICAgICAgICAgICAgICAgICAgICAgICBpZiAo
aXNfc2luZ2xlX25vZGUocmVwbGFjZW1lbnQpKQ0KLSAgICAgICAgICAgICAgICAgICAgICAgIHsN
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcnYucHVzaChyZXBsYWNlbWVudCk7DQotICAg
ICAgICAgICAgICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UNCi0g
ICAgICAgICAgICAgICAgICAgICAgICB7DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4
dGVuZChydiwgcmVwbGFjZW1lbnQpOw0KLSAgICAgICAgICAgICAgICAgICAgICAgIH0NCi0gICAg
ICAgICAgICAgICAgICAgIH0NCi0gICAgICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgICAgICBl
bHNlDQotICAgICAgICAgICAgICAgIHsNCi0gICAgICAgICAgICAgICAgICAgIGV4dGVuZChydiwg
ZG9fc3Vic3RpdHV0aW9uKFN0cmluZyhjaGlsZHJlbltpXSkpKTsNCi0gICAgICAgICAgICAgICAg
fQ0KLSAgICAgICAgICAgIH0NCi0gICAgICAgICAgICByZXR1cm4gcnY7DQotICAgICAgICB9DQot
DQotICAgICAgICByZXR1cm4gcnY7DQotICAgIH0NCi0NCi0gZnVuY3Rpb24gbWFrZV9kb21fc2lu
Z2xlKHRlbXBsYXRlLCBkb2MpDQotIHsNCi0gICAgIHZhciBvdXRwdXRfZG9jdW1lbnQgPSBkb2Mg
fHwgZG9jdW1lbnQ7DQotICAgICBpZiAodGVtcGxhdGVbMF0gPT09ICJ7dGV4dH0iKQ0KLSAgICAg
ew0KLSAgICAgICAgIHZhciBlbGVtZW50ID0gb3V0cHV0X2RvY3VtZW50LmNyZWF0ZVRleHROb2Rl
KCIiKTsNCi0gICAgICAgICBmb3IgKHZhciBpPTE7IGk8dGVtcGxhdGUubGVuZ3RoOyBpKyspDQot
ICAgICAgICAgew0KLSAgICAgICAgICAgICBlbGVtZW50LmRhdGEgKz0gdGVtcGxhdGVbaV07DQot
ICAgICAgICAgfQ0KLSAgICAgfQ0KLSAgICAgZWxzZQ0KLSAgICAgew0KLSAgICAgICAgIHZhciBl
bGVtZW50ID0gb3V0cHV0X2RvY3VtZW50LmNyZWF0ZUVsZW1lbnROUyh4aHRtbF9ucywgdGVtcGxh
dGVbMF0pOw0KLSAgICAgICAgIGZvciAodmFyIG5hbWUgaW4gdGVtcGxhdGVbMV0pIHsNCi0gICAg
ICAgICAgICAgaWYgKHRlbXBsYXRlWzFdLmhhc093blByb3BlcnR5KG5hbWUpKQ0KLSAgICAgICAg
ICAgICB7DQotICAgICAgICAgICAgICAgICBlbGVtZW50LnNldEF0dHJpYnV0ZShuYW1lLCB0ZW1w
bGF0ZVsxXVtuYW1lXSk7DQotICAgICAgICAgICAgIH0NCi0gICAgICAgICB9DQotICAgICAgICAg
Zm9yICh2YXIgaT0yOyBpPHRlbXBsYXRlLmxlbmd0aDsgaSsrKQ0KLSAgICAgICAgIHsNCi0gICAg
ICAgICAgICAgaWYgKHRlbXBsYXRlW2ldIGluc3RhbmNlb2YgT2JqZWN0KQ0KLSAgICAgICAgICAg
ICB7DQotICAgICAgICAgICAgICAgICB2YXIgc3ViX2VsZW1lbnQgPSBtYWtlX2RvbSh0ZW1wbGF0
ZVtpXSk7DQotICAgICAgICAgICAgICAgICBlbGVtZW50LmFwcGVuZENoaWxkKHN1Yl9lbGVtZW50
KTsNCi0gICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgICBlbHNlDQotICAgICAgICAgICAgIHsN
Ci0gICAgICAgICAgICAgICAgIHZhciB0ZXh0X25vZGUgPSBvdXRwdXRfZG9jdW1lbnQuY3JlYXRl
VGV4dE5vZGUodGVtcGxhdGVbaV0pOw0KLSAgICAgICAgICAgICAgICAgZWxlbWVudC5hcHBlbmRD
aGlsZCh0ZXh0X25vZGUpOw0KLSAgICAgICAgICAgICB9DQotICAgICAgICAgfQ0KLSAgICAgfQ0K
LQ0KLSAgICAgcmV0dXJuIGVsZW1lbnQ7DQotIH0NCi0NCi0NCi0NCi0gZnVuY3Rpb24gbWFrZV9k
b20odGVtcGxhdGUsIHN1YnN0aXR1dGlvbnMsIG91dHB1dF9kb2N1bWVudCkNCi0gICAgew0KLSAg
ICAgICAgaWYgKGlzX3NpbmdsZV9ub2RlKHRlbXBsYXRlKSkNCi0gICAgICAgIHsNCi0gICAgICAg
ICAgICByZXR1cm4gbWFrZV9kb21fc2luZ2xlKHRlbXBsYXRlLCBvdXRwdXRfZG9jdW1lbnQpOw0K
LSAgICAgICAgfQ0KLSAgICAgICAgZWxzZQ0KLSAgICAgICAgew0KLSAgICAgICAgICAgIHJldHVy
biBtYXAodGVtcGxhdGUsIGZ1bmN0aW9uKHgpIHsNCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICByZXR1cm4gbWFrZV9kb21fc2luZ2xlKHgsIG91dHB1dF9kb2N1bWVudCk7DQotICAgICAgICAg
ICAgICAgICAgICAgICB9KTsNCi0gICAgICAgIH0NCi0gICAgfQ0KLQ0KLSBmdW5jdGlvbiByZW5k
ZXIodGVtcGxhdGUsIHN1YnN0aXR1dGlvbnMsIG91dHB1dF9kb2N1bWVudCkNCi0gICAgew0KLSAg
ICAgICAgcmV0dXJuIG1ha2VfZG9tKHN1YnN0aXR1dGUodGVtcGxhdGUsIHN1YnN0aXR1dGlvbnMp
LCBvdXRwdXRfZG9jdW1lbnQpOw0KLSAgICB9DQotDQotICAgIC8qDQotICAgICAqIFV0aWxpdHkg
ZnVuY2lvbnMNCi0gICAgICovDQotICAgIGZ1bmN0aW9uIGFzc2VydChleHBlY3RlZF90cnVlLCBm
dW5jdGlvbl9uYW1lLCBkZXNjcmlwdGlvbiwgZXJyb3IsIHN1YnN0aXR1dGlvbnMpDQotICAgIHsN
Ci0gICAgICAgIGlmIChleHBlY3RlZF90cnVlICE9PSB0cnVlKQ0KLSAgICAgICAgew0KLSAgICAg
ICAgICAgIHRocm93IG5ldyBBc3NlcnRpb25FcnJvcihtYWtlX21lc3NhZ2UoZnVuY3Rpb25fbmFt
ZSwgZGVzY3JpcHRpb24sDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBlcnJvciwgc3Vic3RpdHV0aW9ucykpOw0KLSAgICAgICAgfQ0KLSAgICB9DQot
DQotICAgIGZ1bmN0aW9uIEFzc2VydGlvbkVycm9yKG1lc3NhZ2UpDQotICAgIHsNCi0gICAgICAg
IHRoaXMubWVzc2FnZSA9IG1lc3NhZ2U7DQotICAgIH0NCi0NCi0gICAgZnVuY3Rpb24gbWFrZV9t
ZXNzYWdlKGZ1bmN0aW9uX25hbWUsIGRlc2NyaXB0aW9uLCBlcnJvciwgc3Vic3RpdHV0aW9ucykN
Ci0gICAgew0KLSAgICAgICAgZm9yICh2YXIgcCBpbiBzdWJzdGl0dXRpb25zKSB7DQotICAgICAg
ICAgICAgaWYgKHN1YnN0aXR1dGlvbnMuaGFzT3duUHJvcGVydHkocCkpIHsNCi0gICAgICAgICAg
ICAgICAgc3Vic3RpdHV0aW9uc1twXSA9IGZvcm1hdF92YWx1ZShzdWJzdGl0dXRpb25zW3BdKTsN
Ci0gICAgICAgICAgICB9DQotICAgICAgICB9DQotICAgICAgICB2YXIgbm9kZV9mb3JtID0gc3Vi
c3RpdHV0ZShbInt0ZXh0fSIsICIke2Z1bmN0aW9uX25hbWV9OiAke2Rlc2NyaXB0aW9ufSIgKyBl
cnJvcl0sDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXJnZSh7ZnVuY3Rp
b25fbmFtZTpmdW5jdGlvbl9uYW1lLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGRlc2NyaXB0aW9uOihkZXNjcmlwdGlvbj9kZXNjcmlwdGlvbiArICIgIjoiIil9
LA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN1YnN0aXR1dGlv
bnMpKTsNCi0gICAgICAgIHJldHVybiBub2RlX2Zvcm0uc2xpY2UoMSkuam9pbigiIik7DQotICAg
IH0NCi0NCi0gICAgZnVuY3Rpb24gZmlsdGVyKGFycmF5LCBjYWxsYWJsZSwgdGhpc09iaikgew0K
LSAgICAgICAgdmFyIHJ2ID0gW107DQotICAgICAgICBmb3IgKHZhciBpPTA7IGk8YXJyYXkubGVu
Z3RoOyBpKyspDQotICAgICAgICB7DQotICAgICAgICAgICAgaWYgKGFycmF5Lmhhc093blByb3Bl
cnR5KGkpKQ0KLSAgICAgICAgICAgIHsNCi0gICAgICAgICAgICAgICAgdmFyIHBhc3MgPSBjYWxs
YWJsZS5jYWxsKHRoaXNPYmosIGFycmF5W2ldLCBpLCBhcnJheSk7DQotICAgICAgICAgICAgICAg
IGlmIChwYXNzKSB7DQotICAgICAgICAgICAgICAgICAgICBydi5wdXNoKGFycmF5W2ldKTsNCi0g
ICAgICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgIH0NCi0gICAgICAgIH0NCi0gICAgICAgIHJl
dHVybiBydjsNCi0gICAgfQ0KLQ0KLSAgICBmdW5jdGlvbiBtYXAoYXJyYXksIGNhbGxhYmxlLCB0
aGlzT2JqKQ0KLSAgICB7DQotICAgICAgICB2YXIgcnYgPSBbXTsNCi0gICAgICAgIHJ2Lmxlbmd0
aCA9IGFycmF5Lmxlbmd0aDsNCi0gICAgICAgIGZvciAodmFyIGk9MDsgaTxhcnJheS5sZW5ndGg7
IGkrKykNCi0gICAgICAgIHsNCi0gICAgICAgICAgICBpZiAoYXJyYXkuaGFzT3duUHJvcGVydHko
aSkpDQotICAgICAgICAgICAgew0KLSAgICAgICAgICAgICAgICBydltpXSA9IGNhbGxhYmxlLmNh
bGwodGhpc09iaiwgYXJyYXlbaV0sIGksIGFycmF5KTsNCi0gICAgICAgICAgICB9DQotICAgICAg
ICB9DQotICAgICAgICByZXR1cm4gcnY7DQotICAgIH0NCi0NCi0gICAgZnVuY3Rpb24gZXh0ZW5k
KGFycmF5LCBpdGVtcykNCi0gICAgew0KLSAgICAgICAgQXJyYXkucHJvdG90eXBlLnB1c2guYXBw
bHkoYXJyYXksIGl0ZW1zKTsNCi0gICAgfQ0KLQ0KLSAgICBmdW5jdGlvbiBmb3JFYWNoIChhcnJh
eSwgY2FsbGJhY2ssIHRoaXNPYmopDQotICAgIHsNCi0gICAgICAgIGZvciAodmFyIGk9MDsgaTxh
cnJheS5sZW5ndGg7IGkrKykNCi0gICAgICAgIHsNCi0gICAgICAgICAgICBpZiAoYXJyYXkuaGFz
T3duUHJvcGVydHkoaSkpDQotICAgICAgICAgICAgew0KLSAgICAgICAgICAgICAgICBjYWxsYmFj
ay5jYWxsKHRoaXNPYmosIGFycmF5W2ldLCBpLCBhcnJheSk7DQotICAgICAgICAgICAgfQ0KLSAg
ICAgICAgfQ0KLSAgICB9DQotDQotICAgIGZ1bmN0aW9uIG1lcmdlKGEsYikNCi0gICAgew0KLSAg
ICAgICAgdmFyIHJ2ID0ge307DQotICAgICAgICB2YXIgcDsNCi0gICAgICAgIGZvciAocCBpbiBh
KQ0KLSAgICAgICAgew0KLSAgICAgICAgICAgIHJ2W3BdID0gYVtwXTsNCi0gICAgICAgIH0NCi0g
ICAgICAgIGZvciAocCBpbiBiKSB7DQotICAgICAgICAgICAgcnZbcF0gPSBiW3BdOw0KLSAgICAg
ICAgfQ0KLSAgICAgICAgcmV0dXJuIHJ2Ow0KLSAgICB9DQotDQotICAgIGZ1bmN0aW9uIGV4cG9z
ZShvYmplY3QsIG5hbWUpDQotICAgIHsNCi0gICAgICAgIHZhciBjb21wb25lbnRzID0gbmFtZS5z
cGxpdCgiLiIpOw0KLSAgICAgICAgdmFyIHRhcmdldCA9IHdpbmRvdzsNCi0gICAgICAgIGZvciAo
dmFyIGk9MDsgaTxjb21wb25lbnRzLmxlbmd0aCAtIDE7IGkrKykNCi0gICAgICAgIHsNCi0gICAg
ICAgICAgICBpZiAoIShjb21wb25lbnRzW2ldIGluIHRhcmdldCkpDQotICAgICAgICAgICAgew0K
LSAgICAgICAgICAgICAgICB0YXJnZXRbY29tcG9uZW50c1tpXV0gPSB7fTsNCi0gICAgICAgICAg
ICB9DQotICAgICAgICAgICAgdGFyZ2V0ID0gdGFyZ2V0W2NvbXBvbmVudHNbaV1dOw0KLSAgICAg
ICAgfQ0KLSAgICAgICAgdGFyZ2V0W2NvbXBvbmVudHNbY29tcG9uZW50cy5sZW5ndGggLSAxXV0g
PSBvYmplY3Q7DQotICAgIH0NCi0NCi0gICAgZnVuY3Rpb24gZm9yRWFjaF93aW5kb3dzKGNhbGxi
YWNrKSB7DQotICAgICAgICAvLyBJdGVyYXRlIG9mIHRoZSB0aGUgd2luZG93cyBbc2VsZiAuLi4g
dG9wLCBvcGVuZXJdLiBUaGUgY2FsbGJhY2sgaXMgcGFzc2VkDQotICAgICAgICAvLyB0d28gb2Jq
ZWN0cywgdGhlIGZpcnN0IG9uZSBpcyB0aGUgd2luZG93cyBvYmplY3QgaXRzZWxmLCB0aGUgc2Vj
b25kIG9uZQ0KLSAgICAgICAgLy8gaXMgYSBib29sZWFuIGluZGljYXRpbmcgd2hldGhlciBvciBu
b3QgaXRzIG9uIHRoZSBzYW1lIG9yaWdpbiBhcyB0aGUNCi0gICAgICAgIC8vIGN1cnJlbnQgd2lu
ZG93Lg0KLSAgICAgICAgdmFyIGNhY2hlID0gZm9yRWFjaF93aW5kb3dzLnJlc3VsdF9jYWNoZTsN
Ci0gICAgICAgIGlmICghY2FjaGUpIHsNCi0gICAgICAgICAgICBjYWNoZSA9IFtbc2VsZiwgdHJ1
ZV1dOw0KLSAgICAgICAgICAgIHZhciB3ID0gc2VsZjsNCi0gICAgICAgICAgICB2YXIgaSA9IDA7
DQotICAgICAgICAgICAgdmFyIHNvOw0KLSAgICAgICAgICAgIHZhciBvcmlnaW5zID0gbG9jYXRp
b24uYW5jZXN0b3JPcmlnaW5zOw0KLSAgICAgICAgICAgIHdoaWxlICh3ICE9IHcucGFyZW50KQ0K
LSAgICAgICAgICAgIHsNCi0gICAgICAgICAgICAgICAgdyA9IHcucGFyZW50Ow0KLSAgICAgICAg
ICAgICAgICAvLyBJbiBXZWJLaXQsIGNhbGxzIHRvIHBhcmVudCB3aW5kb3dzJyBwcm9wZXJ0aWVz
IHRoYXQgYXJlbid0IG9uIHRoZSBzYW1lDQotICAgICAgICAgICAgICAgIC8vIG9yaWdpbiBjYXVz
ZSBhbiBlcnJvciBtZXNzYWdlIHRvIGJlIGRpc3BsYXllZCBpbiB0aGUgZXJyb3IgY29uc29sZSBi
dXQNCi0gICAgICAgICAgICAgICAgLy8gZG9uJ3QgdGhyb3cgYW4gZXhjZXB0aW9uLiBUaGlzIGlz
IGEgZGV2aWF0aW9uIGZyb20gdGhlIGN1cnJlbnQgSFRNTDUNCi0gICAgICAgICAgICAgICAgLy8g
c3BlYy4gU2VlOiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDM1MDQN
Ci0gICAgICAgICAgICAgICAgLy8gVGhlIHByb2JsZW0gd2l0aCBXZWJLaXQncyBiZWhhdmlvciBp
cyB0aGF0IGl0IHBvbGx1dGVzIHRoZSBlcnJvciBjb25zb2xlDQotICAgICAgICAgICAgICAgIC8v
IHdpdGggZXJyb3IgbWVzc2FnZXMgdGhhdCBjYW4ndCBiZSBjYXVnaHQuDQotICAgICAgICAgICAg
ICAgIC8vDQotICAgICAgICAgICAgICAgIC8vIFRoaXMgaXNzdWUgY2FuIGJlIG1pdGlnYXRlZCBi
eSByZWx5aW5nIG9uIHRoZSAoZm9yIG5vdykgcHJvcHJpZXRhcnkNCi0gICAgICAgICAgICAgICAg
Ly8gYGxvY2F0aW9uLmFuY2VzdG9yT3JpZ2luc2AgcHJvcGVydHkgd2hpY2ggcmV0dXJucyBhbiBv
cmRlcmVkIGxpc3Qgb2YNCi0gICAgICAgICAgICAgICAgLy8gdGhlIG9yaWdpbnMgb2YgZW5jbG9z
aW5nIHdpbmRvd3MuIFNlZToNCi0gICAgICAgICAgICAgICAgLy8gaHR0cDovL3RyYWMud2Via2l0
Lm9yZy9jaGFuZ2VzZXQvMTEzOTQ1Lg0KLSAgICAgICAgICAgICAgICBpZihvcmlnaW5zKSB7DQot
ICAgICAgICAgICAgICAgICAgICBzbyA9IChsb2NhdGlvbi5vcmlnaW4gPT0gb3JpZ2luc1tpXSk7
DQotICAgICAgICAgICAgICAgIH0NCi0gICAgICAgICAgICAgICAgZWxzZQ0KLSAgICAgICAgICAg
ICAgICB7DQotICAgICAgICAgICAgICAgICAgICBzbyA9IGlzX3NhbWVfb3JpZ2luKHcpOw0KLSAg
ICAgICAgICAgICAgICB9DQotICAgICAgICAgICAgICAgIGNhY2hlLnB1c2goW3csIHNvXSk7DQot
ICAgICAgICAgICAgICAgIGkrKzsNCi0gICAgICAgICAgICB9DQotICAgICAgICAgICAgdyA9IHdp
bmRvdy5vcGVuZXI7DQotICAgICAgICAgICAgaWYodykNCi0gICAgICAgICAgICB7DQotICAgICAg
ICAgICAgICAgIC8vIHdpbmRvdy5vcGVuZXIgaXNuJ3QgaW5jbHVkZWQgaW4gdGhlIGBsb2NhdGlv
bi5hbmNlc3Rvck9yaWdpbnNgIHByb3AuDQotICAgICAgICAgICAgICAgIC8vIFdlJ2xsIGp1c3Qg
aGF2ZSB0byBkZWFsIHdpdGggYSBzaW1wbGUgY2hlY2sgYW5kIGFuIGVycm9yIG1zZyBvbiBXZWJL
aXQNCi0gICAgICAgICAgICAgICAgLy8gYnJvd3NlcnMgaW4gdGhpcyBjYXNlLg0KLSAgICAgICAg
ICAgICAgICBjYWNoZS5wdXNoKFt3LCBpc19zYW1lX29yaWdpbih3KV0pOw0KLSAgICAgICAgICAg
IH0NCi0gICAgICAgICAgICBmb3JFYWNoX3dpbmRvd3MucmVzdWx0X2NhY2hlID0gY2FjaGU7DQot
ICAgICAgICB9DQotDQotICAgICAgICBmb3JFYWNoKGNhY2hlLA0KLSAgICAgICAgICAgICAgICBm
dW5jdGlvbihhKQ0KLSAgICAgICAgICAgICAgICB7DQotICAgICAgICAgICAgICAgICAgICBjYWxs
YmFjay5hcHBseShudWxsLCBhKTsNCi0gICAgICAgICAgICAgICAgfSk7DQotICAgIH0NCi0NCi0g
ICAgZnVuY3Rpb24gaXNfc2FtZV9vcmlnaW4odykgew0KLSAgICAgICAgdHJ5IHsNCi0gICAgICAg
ICAgICAncmFuZG9tX3Byb3AnIGluIHc7DQotICAgICAgICAgICAgcmV0dXJuIHRydWU7DQotICAg
ICAgICB9IGNhdGNoKGUpIHsNCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7DQotICAgICAgICB9
DQotICAgIH0NCi0NCi0gICAgZnVuY3Rpb24gc3VwcG9ydHNfcG9zdF9tZXNzYWdlKHcpDQotICAg
IHsNCi0gICAgICAgIHZhciBzdXBwb3J0czsNCi0gICAgICAgIHZhciB0eXBlOw0KLSAgICAgICAg
Ly8gR2l2ZW4gSUUgIGltcGxlbWVudHMgcG9zdE1lc3NhZ2UgYWNyb3NzIG5lc3RlZCBpZnJhbWVz
IGJ1dCBub3QgYWNyb3NzDQotICAgICAgICAvLyB3aW5kb3dzIG9yIHRhYnMsIHlvdSBjYW4ndCBp
bmZlciBjcm9zcy1vcmlnaW4gY29tbXVuaWNhdGlvbiBmcm9tIHRoZSBwcmVzZW5jZQ0KLSAgICAg
ICAgLy8gb2YgcG9zdE1lc3NhZ2Ugb24gdGhlIGN1cnJlbnQgd2luZG93IG9iamVjdCBvbmx5Lg0K
LSAgICAgICAgLy8NCi0gICAgICAgIC8vIFRvdWNoaW5nIHRoZSBwb3N0TWVzc2FnZSBwcm9wIG9u
IGEgd2luZG93IGNhbiB0aHJvdyBpZiB0aGUgd2luZG93IGlzDQotICAgICAgICAvLyBub3QgZnJv
bSB0aGUgc2FtZSBvcmlnaW4gQU5EIHBvc3QgbWVzc2FnZSBpcyBub3Qgc3VwcG9ydGVkIGluIHRo
YXQNCi0gICAgICAgIC8vIGJyb3dzZXIuIFNvIGp1c3QgZG9pbmcgYW4gZXhpc3RlbmNlIHRlc3Qg
aGVyZSB3b24ndCBkbywgeW91IGFsc28gbmVlZA0KLSAgICAgICAgLy8gdG8gd3JhcCBpdCBpbiBh
IHRyeS4uY2FjdGggYmxvY2suDQotICAgICAgICB0cnkNCi0gICAgICAgIHsNCi0gICAgICAgICAg
ICB0eXBlID0gdHlwZW9mIHcucG9zdE1lc3NhZ2U7DQotICAgICAgICAgICAgaWYgKHR5cGUgPT09
ICJmdW5jdGlvbiIpDQotICAgICAgICAgICAgew0KLSAgICAgICAgICAgICAgICBzdXBwb3J0cyA9
IHRydWU7DQotICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgIC8vIElFOCBzdXBwb3J0cyBwb3N0
TWVzc2FnZSwgYnV0IGltcGxlbWVudHMgaXQgYXMgYSBob3N0IG9iamVjdCB3aGljaA0KLSAgICAg
ICAgICAgIC8vIHJldHVybnMgIm9iamVjdCIgYXMgaXRzIGB0eXBlb2ZgLg0KLSAgICAgICAgICAg
IGVsc2UgaWYgKHR5cGUgPT09ICJvYmplY3QiKQ0KLSAgICAgICAgICAgIHsNCi0gICAgICAgICAg
ICAgICAgc3VwcG9ydHMgPSB0cnVlOw0KLSAgICAgICAgICAgIH0NCi0gICAgICAgICAgICAvLyBU
aGlzIGlzIHRoZSBjYXNlIHdoZXJlIHBvc3RNZXNzYWdlIGlzbid0IHN1cHBvcnRlZCBBTkQgYWNj
ZXNzaW5nIGENCi0gICAgICAgICAgICAvLyB3aW5kb3cgcHJvcGVydHkgYWNyb3NzIG9yaWdpbnMg
ZG9lcyBOT1QgdGhyb3cgKGUuZy4gb2xkIFNhZmFyaSBicm93c2VyKS4NCi0gICAgICAgICAgICBl
bHNlDQotICAgICAgICAgICAgew0KLSAgICAgICAgICAgICAgICBzdXBwb3J0cyA9IGZhbHNlOw0K
LSAgICAgICAgICAgIH0NCi0gICAgICAgIH0NCi0gICAgICAgIGNhdGNoKGUpIHsNCi0gICAgICAg
ICAgICAvLyBUaGlzIGlzIHRoZSBjYXNlIHdoZXJlIHBvc3RNZXNzYWdlIGlzbid0IHN1cHBvcnRl
ZCBBTkQgYWNjZXNzaW5nIGENCi0gICAgICAgICAgICAvLyB3aW5kb3cgcHJvcGVydHkgYWNyb3Nz
IG9yaWdpbnMgdGhyb3dzIChlLmcuIG9sZCBGaXJlZm94IGJyb3dzZXIpLg0KLSAgICAgICAgICAg
IHN1cHBvcnRzID0gZmFsc2U7DQotICAgICAgICB9DQotICAgICAgICByZXR1cm4gc3VwcG9ydHM7
DQotICAgIH0NCi19KSgpOw0KLS8vIHZpbTogc2V0IGV4cGFuZHRhYiBzaGlmdHdpZHRoPTQgdGFi
c3RvcD00Og0KKy8qCitEaXN0cmlidXRlZCB1bmRlciBib3RoIHRoZSBXM0MgVGVzdCBTdWl0ZSBM
aWNlbnNlIFsxXSBhbmQgdGhlIFczQworMy1jbGF1c2UgQlNEIExpY2Vuc2UgWzJdLiBUbyBjb250
cmlidXRlIHRvIGEgVzNDIFRlc3QgU3VpdGUsIHNlZSB0aGUKK3BvbGljaWVzIGFuZCBjb250cmli
dXRpb24gZm9ybXMgWzNdLgorCitbMV0gaHR0cDovL3d3dy53My5vcmcvQ29uc29ydGl1bS9MZWdh
bC8yMDA4LzA0LXRlc3RzdWl0ZS1saWNlbnNlCitbMl0gaHR0cDovL3d3dy53My5vcmcvQ29uc29y
dGl1bS9MZWdhbC8yMDA4LzAzLWJzZC1saWNlbnNlCitbM10gaHR0cDovL3d3dy53My5vcmcvMjAw
NC8xMC8yNy10ZXN0Y2FzZXMKKyovCisKKy8qCisgKiA9PSBJbnRyb2R1Y3Rpb24gPT0KKyAqCisg
KiBUaGlzIGZpbGUgcHJvdmlkZXMgYSBmcmFtZXdvcmsgZm9yIHdyaXRpbmcgdGVzdGNhc2VzLiBJ
dCBpcyBpbnRlbmRlZCB0bworICogcHJvdmlkZSBhIGNvbnZlbmllbnQgQVBJIGZvciBtYWtpbmcg
Y29tbW9uIGFzc2VydGlvbnMsIGFuZCB0byB3b3JrIGJvdGgKKyAqIGZvciB0ZXN0aW5nIHN5bmNo
cm9ub3VzIGFuZCBhc3luY2hyb25vdXMgRE9NIGZlYXR1cmVzIGluIGEgd2F5IHRoYXQKKyAqIHBy
b21vdGVzIGNsZWFyLCByb2J1c3QsIHRlc3RzLgorICoKKyAqID09IEJhc2ljIFVzYWdlID09Cisg
KgorICogVG8gdXNlIHRoaXMgZmlsZSwgaW1wb3J0IHRoZSBzY3JpcHQgYW5kIHRoZSB0ZXN0aGFy
bmVzc3JlcG9ydCBzY3JpcHQgaW50bworICogdGhlIHRlc3QgZG9jdW1lbnQ6CisgKiA8c2NyaXB0
IHNyYz0iL3Jlc291cmNlcy90ZXN0aGFybmVzcy5qcyI+PC9zY3JpcHQ+CisgKiA8c2NyaXB0IHNy
Yz0iL3Jlc291cmNlcy90ZXN0aGFybmVzc3JlcG9ydC5qcyI+PC9zY3JpcHQ+CisgKgorICogV2l0
aGluIGVhY2ggZmlsZSBvbmUgbWF5IGRlZmluZSBvbmUgb3IgbW9yZSB0ZXN0cy4gRWFjaCB0ZXN0
IGlzIGF0b21pYworICogaW4gdGhlIHNlbnNlIHRoYXQgYSBzaW5nbGUgdGVzdCBoYXMgYSBzaW5n
bGUgcmVzdWx0IChwYXNzL2ZhaWwvdGltZW91dCkuCisgKiBXaXRoaW4gZWFjaCB0ZXN0IG9uZSBt
YXkgaGF2ZSBhIG51bWJlciBvZiBhc3NlcnRzLiBUaGUgdGVzdCBmYWlscyBhdCB0aGUKKyAqIGZp
cnN0IGZhaWxpbmcgYXNzZXJ0LCBhbmQgdGhlIHJlbWFpbmRlciBvZiB0aGUgdGVzdCBpcyAodHlw
aWNhbGx5KSBub3QgcnVuLgorICoKKyAqIElmIHRoZSBmaWxlIGNvbnRhaW5pbmcgdGhlIHRlc3Rz
IGlzIGEgSFRNTCBmaWxlIHdpdGggYW4gZWxlbWVudCBvZiBpZCAibG9nIgorICogdGhpcyB3aWxs
IGJlIHBvcHVsYXRlZCB3aXRoIGEgdGFibGUgY29udGFpbmluZyB0aGUgdGVzdCByZXN1bHRzIGFm
dGVyIGFsbAorICogdGhlIHRlc3RzIGhhdmUgcnVuLgorICoKKyAqIE5PVEU6IEJ5IGRlZmF1bHQg
dGVzdHMgbXVzdCBiZSBjcmVhdGVkIGJlZm9yZSB0aGUgbG9hZCBldmVudCBmaXJlcy4gRm9yIHdh
eXMKKyAqICAgICAgIHRvIGNyZWF0ZSB0ZXN0cyBhZnRlciB0aGUgbG9hZCBldmVudCwgc2VlICJE
ZXRlcm1pbmluZyB3aGVuIGFsbCB0ZXN0cworICogICAgICAgYXJlIGNvbXBsZXRlIiwgYmVsb3cK
KyAqCisgKiA9PSBTeW5jaHJvbm91cyBUZXN0cyA9PQorICoKKyAqIFRvIGNyZWF0ZSBhIHN5bmNo
cm9ub3VzIHRlc3QgdXNlIHRoZSB0ZXN0KCkgZnVuY3Rpb246CisgKgorICogdGVzdCh0ZXN0X2Z1
bmN0aW9uLCBuYW1lLCBwcm9wZXJ0aWVzKQorICoKKyAqIHRlc3RfZnVuY3Rpb24gaXMgYSBmdW5j
dGlvbiB0aGF0IGNvbnRhaW5zIHRoZSBjb2RlIHRvIHRlc3QuIEZvciBleGFtcGxlIGEKKyAqIHRy
aXZpYWwgcGFzc2luZyB0ZXN0IHdvdWxkIGJlOgorICoKKyAqIHRlc3QoZnVuY3Rpb24oKSB7YXNz
ZXJ0X3RydWUodHJ1ZSl9LCAiYXNzZXJ0X3RydWUgd2l0aCB0cnVlIikKKyAqCisgKiBUaGUgZnVu
Y3Rpb24gcGFzc2VkIGluIGlzIHJ1biBpbiB0aGUgdGVzdCgpIGNhbGwuCisgKgorICogcHJvcGVy
dGllcyBpcyBhbiBvYmplY3QgdGhhdCBvdmVycmlkZXMgZGVmYXVsdCB0ZXN0IHByb3BlcnRpZXMu
IFRoZQorICogcmVjb2duaXNlZCBwcm9wZXJ0aWVzIGFyZToKKyAqICAgIHRpbWVvdXQgLSB0aGUg
dGVzdCB0aW1lb3V0IGluIG1zCisgKgorICogZS5nLgorICogdGVzdCh0ZXN0X2Z1bmN0aW9uLCAi
U2FtcGxlIHRlc3QiLCB7dGltZW91dDoxMDAwfSkKKyAqCisgKiB3b3VsZCBydW4gdGVzdF9mdW5j
dGlvbiB3aXRoIGEgdGltZW91dCBvZiAxcy4KKyAqCisgKiBBZGRpdGlvbmFsbHksIHRlc3Qtc3Bl
Y2lmaWMgbWV0YWRhdGEgY2FuIGJlIHBhc3NlZCBpbiB0aGUgcHJvcGVydGllcy4gVGhlc2UKKyAq
IGFyZSB1c2VkIHdoZW4gdGhlIGluZGl2aWR1YWwgdGVzdCBoYXMgZGlmZmVyZW50IG1ldGFkYXRh
IGZyb20gdGhhdCBzdG9yZWQKKyAqIGluIHRoZSA8aGVhZD4uCisgKiBUaGUgcmVjb2duaXplZCBt
ZXRhZGF0YSBwcm9wZXJ0aWVzIGFyZToKKyAqCisgKiAgICBoZWxwIC0gVGhlIHVybCBvciBhbiBh
cnJheSBvZiB1cmxzIG9mIHRoZSBwYXJ0KHMpIG9mIHRoZSBzcGVjaWZpY2F0aW9uKHMpCisgKiAg
ICAgICAgICAgYmVpbmcgdGVzdGVkCisgKgorICogICAgYXNzZXJ0IC0gQSBodW1hbiByZWFkYWJs
ZSBkZXNjcmlwdGlvbiBvZiB3aGF0IHRoZSB0ZXN0IGlzIGF0dGVtcHRpbmcKKyAqICAgICAgICAg
ICAgIHRvIHByb3ZlCisgKgorICogICAgYXV0aG9yIC0gTmFtZSBhbmQgY29udGFjdCBpbmZvcm1h
dGlvbiBmb3IgdGhlIGF1dGhvciBvZiB0aGUgdGVzdCBpbiB0aGUKKyAqICAgICAgICAgICAgIGZv
cm1hdDogIk5hbWUgPGVtYWlsX2FkZHI+IiBvciAiTmFtZSBodHRwOi8vY29udGFjdC91cmwiCisg
KgorICogPT0gQXN5bmNocm9ub3VzIFRlc3RzID09CisgKgorICogVGVzdGluZyBhc3luY2hyb25v
dXMgZmVhdHVyZXMgaXMgc29tZXdoYXQgbW9yZSBjb21wbGV4IHNpbmNlIHRoZSByZXN1bHQgb2YK
KyAqIGEgdGVzdCBtYXkgZGVwZW5kIG9uIG9uZSBvciBtb3JlIGV2ZW50cyBvciBvdGhlciBjYWxs
YmFja3MuIFRoZSBBUEkgcHJvdmlkZWQKKyAqIGZvciB0ZXN0aW5nIHRoZXNlIGZlYXR1cmVzIGlz
IGluZGVuZGVkIHRvIGJlIHJhdGhlciBsb3ctbGV2ZWwgYnV0IGhvcGVmdWxseQorICogYXBwbGlj
YWJsZSB0byBtYW55IHNpdHVhdGlvbnMuCisgKgorICogVG8gY3JlYXRlIGEgdGVzdCwgb25lIHN0
YXJ0cyBieSBnZXR0aW5nIGEgVGVzdCBvYmplY3QgdXNpbmcgYXN5bmNfdGVzdDoKKyAqCisgKiBh
c3luY190ZXN0KG5hbWUsIHByb3BlcnRpZXMpCisgKgorICogZS5nLgorICogdmFyIHQgPSBhc3lu
Y190ZXN0KCJTaW1wbGUgYXN5bmMgdGVzdCIpCisgKgorICogQXNzZXJ0aW9ucyBjYW4gYmUgYWRk
ZWQgdG8gdGhlIHRlc3QgYnkgY2FsbGluZyB0aGUgc3RlcCBtZXRob2Qgb2YgdGhlIHRlc3QKKyAq
IG9iamVjdCB3aXRoIGEgZnVuY3Rpb24gY29udGFpbmluZyB0aGUgdGVzdCBhc3NlcnRpb25zOgor
ICoKKyAqIHQuc3RlcChmdW5jdGlvbigpIHthc3NlcnRfdHJ1ZSh0cnVlKX0pOworICoKKyAqIFdo
ZW4gYWxsIHRoZSBzdGVwcyBhcmUgY29tcGxldGUsIHRoZSBkb25lKCkgbWV0aG9kIG11c3QgYmUg
Y2FsbGVkOgorICoKKyAqIHQuZG9uZSgpOworICoKKyAqIEFzIGEgY29udmVuaWVuY2UsIGFzeW5j
X3Rlc3QgY2FuIGFsc28gdGFrZXMgYSBmdW5jdGlvbiBhcyBmaXJzdCBhcmd1bWVudC4KKyAqIFRo
aXMgZnVuY3Rpb24gaXMgY2FsbGVkIHdpdGggdGhlIHRlc3Qgb2JqZWN0IGFzIGJvdGggaXRzIGB0
aGlzYCBvYmplY3QgYW5kCisgKiBmaXJzdCBhcmd1bWVudC4gVGhlIGFib3ZlIGV4YW1wbGUgY2Fu
IGJlIHJld3JpdHRlbiBhczoKKyAqCisgKiBhc3luY190ZXN0KGZ1bmN0aW9uKHQpIHsKKyAqICAg
ICBvYmplY3Quc29tZV9ldmVudCA9IGZ1bmN0aW9uKCkgeworICogICAgICAgICB0LnN0ZXAoZnVu
Y3Rpb24gKCl7YXNzZXJ0X3RydWUodHJ1ZSk7IHQuZG9uZSgpO30pOworICogICAgIH07CisgKiB9
LCAiU2ltcGxlIGFzeW5jIHRlc3QiKTsKKyAqCisgKiB3aGljaCBhdm9pZHMgY2x1dHRlcmluZyB0
aGUgZ2xvYmFsIHNjb3BlIHdpdGggcmVmZXJlbmNlcyB0byBhc3luYworICogdGVzdHMgaW5zdGFu
Y2VzLgorICoKKyAqIFRoZSBwcm9wZXJ0aWVzIGFyZ3VtZW50IGlzIGlkZW50aWNhbCB0byB0aGF0
IGZvciB0ZXN0KCkuCisgKgorICogSW4gbWFueSBjYXNlcyBpdCBpcyBjb252ZW5pZW50IHRvIHJ1
biBhIHN0ZXAgaW4gcmVzcG9uc2UgdG8gYW4gZXZlbnQgb3IgYQorICogY2FsbGJhY2suIEEgY29u
dmVuaWVudCBtZXRob2Qgb2YgZG9pbmcgdGhpcyBpcyB0aHJvdWdoIHRoZSBzdGVwX2Z1bmMgbWV0
aG9kCisgKiB3aGljaCByZXR1cm5zIGEgZnVuY3Rpb24gdGhhdCwgd2hlbiBjYWxsZWQgcnVucyBh
IHRlc3Qgc3RlcC4gRm9yIGV4YW1wbGUKKyAqCisgKiBvYmplY3Quc29tZV9ldmVudCA9IHQuc3Rl
cF9mdW5jKGZ1bmN0aW9uKGUpIHthc3NlcnRfdHJ1ZShlLmEpfSk7CisgKgorICogPT0gTWFraW5n
IGFzc2VydGlvbnMgPT0KKyAqCisgKiBGdW5jdGlvbnMgZm9yIG1ha2luZyBhc3NlcnRpb25zIHN0
YXJ0IGFzc2VydF8KKyAqIFRoZSBiZXN0IHdheSB0byBnZXQgYSBsaXN0IGlzIHRvIGxvb2sgaW4g
dGhpcyBmaWxlIGZvciBmdW5jdGlvbnMgbmFtZXMKKyAqIG1hdGNoaW5nIHRoYXQgcGF0dGVybi4g
VGhlIGdlbmVyYWwgc2lnbmF0dXJlIGlzCisgKgorICogYXNzZXJ0X3NvbWV0aGluZyhhY3R1YWws
IGV4cGVjdGVkLCBkZXNjcmlwdGlvbikKKyAqCisgKiBhbHRob3VnaCBub3QgYWxsIGFzc2VydGlv
bnMgcHJlY2lzZWx5IG1hdGNoIHRoaXMgcGF0dGVybiBlLmcuIGFzc2VydF90cnVlCisgKiBvbmx5
IHRha2VzIGFjdHVhbCBhbmQgZGVzY3JpcHRpb24gYXMgYXJndW1lbnRzLgorICoKKyAqIFRoZSBk
ZXNjcmlwdGlvbiBwYXJhbWV0ZXIgaXMgdXNlZCB0byBwcmVzZW50IG1vcmUgdXNlZnVsIGVycm9y
IG1lc3NhZ2VzIHdoZW4KKyAqIGEgdGVzdCBmYWlscworICoKKyAqIE5PVEU6IEFsbCBhc3NlcnRz
IG11c3QgYmUgbG9jYXRlZCBpbiBhIHRlc3QoKSBvciBhIHN0ZXAgb2YgYW4gYXN5bmNfdGVzdCgp
LgorICogICAgICAgYXNzZXJ0cyBvdXRzaWRlIHRoZXNlIHBsYWNlcyB3b24ndCBiZSBkZXRlY3Rl
ZCBjb3JyZWN0bHkgYnkgdGhlIGhhcm5lc3MKKyAqICAgICAgIGFuZCBtYXkgY2F1c2UgYSBmaWxl
IHRvIHN0b3AgdGVzdGluZy4KKyAqCisgKiA9PSBDbGVhbnVwID09CisgKgorICogT2NjYXNpb25h
bGx5IHRlc3RzIG1heSBjcmVhdGUgc3RhdGUgdGhhdCB3aWxsIHBlcnNpc3QgYmV5b25kIHRoZSB0
ZXN0IGl0c2VsZi4KKyAqIEluIG9yZGVyIHRvIGVuc3VyZSB0aGF0IHRlc3RzIGFyZSBpbmRlcGVu
ZGVudCwgc3VjaCBzdGF0ZSBzaG91bGQgYmUgY2xlYW5lZAorICogdXAgb25jZSB0aGUgdGVzdCBo
YXMgYSByZXN1bHQuIFRoaXMgY2FuIGJlIGFjaGlldmVkIGJ5IGFkZGluZyBjbGVhbnVwCisgKiBj
YWxsYmFja3MgdG8gdGhlIHRlc3QuIFN1Y2ggY2FsbGJhY2tzIGFyZSByZWdpc3RlcmVkIHVzaW5n
IHRoZSBhZGRfY2xlYW51cAorICogZnVuY3Rpb24gb24gdGhlIHRlc3Qgb2JqZWN0LiBBbGwgcmVn
aXN0ZXJlZCBjYWxsYmFja3Mgd2lsbCBiZSBydW4gYXMgc29vbiBhcworICogdGhlIHRlc3QgcmVz
dWx0IGlzIGtub3duLiBGb3IgZXhhbXBsZQorICogdGVzdChmdW5jdGlvbigpIHsKKyAqICAgICAg
ICAgIHdpbmRvdy5zb21lX2dsb2JhbCA9ICJleGFtcGxlIjsKKyAqICAgICAgICAgIHRoaXMuYWRk
X2NsZWFudXAoZnVuY3Rpb24oKSB7ZGVsZXRlIHdpbmRvdy5zb21lX2dsb2JhbH0pOworICogICAg
ICAgICAgYXNzZXJ0X3RydWUoZmFsc2UpOworICogICAgICB9KTsKKyAqCisgKiA9PSBIYXJuZXNz
IFRpbWVvdXQgPT0KKyAqCisgKiBUaGUgb3ZlcmFsbCBoYXJuZXNzIGFkbWl0cyB0d28gdGltZW91
dCB2YWx1ZXMgIm5vcm1hbCIgKHRoZQorICogZGVmYXVsdCkgYW5kICJsb25nIiwgdXNlZCBmb3Ig
dGVzdHMgd2hpY2ggaGF2ZSBhbiB1bnVzdWFsbHkgbG9uZworICogcnVudGltZS4gQWZ0ZXIgdGhl
IHRpbWVvdXQgaXMgcmVhY2hlZCwgdGhlIGhhcm5lc3Mgd2lsbCBzdG9wCisgKiB3YWl0aW5nIGZv
ciBmdXJ0aGVyIGFzeW5jIHRlc3RzIHRvIGNvbXBsZXRlLiBCeSBkZWZhdWx0IHRoZQorICogdGlt
ZW91dHMgYXJlIHNldCB0byAxMHMgYW5kIDYwcywgcmVzcGVjdGl2ZWx5LCBidXQgbWF5IGJlIGNo
YW5nZWQKKyAqIHdoZW4gdGhlIHRlc3QgaXMgcnVuIG9uIGhhcmR3YXJlIHdpdGggZGlmZmVyZW50
IHBlcmZvcm1hbmNlCisgKiBjaGFyYWN0ZXJpc3RpY3MgdG8gYSBjb21tb24gZGVza3RvcCBjb21w
dXRlci4gIEluIG9yZGVyIHRvIG9wdC1pbgorICogdG8gdGhlIGxvbmdlciB0ZXN0IHRpbWVvdXQs
IHRoZSB0ZXN0IG11c3Qgc3BlY2lmeSBhIG1ldGEgZWxlbWVudDoKKyAqIDxtZXRhIG5hbWU9InRp
bWVvdXQiIGNvbnRlbnQ9ImxvbmciPgorICoKKyAqID09IFNldHVwID09CisgKgorICogU29tZXRp
bWVzIHRlc3RzIHJlcXVpcmUgbm9uLXRyaXZpYWwgc2V0dXAgdGhhdCBtYXkgZmFpbC4gRm9yIHRo
aXMgcHVycG9zZQorICogdGhlcmUgaXMgYSBzZXR1cCgpIGZ1bmN0aW9uLCB0aGF0IG1heSBiZSBj
YWxsZWQgd2l0aCBvbmUgb3IgdHdvIGFyZ3VtZW50cy4KKyAqIFRoZSB0d28gYXJndW1lbnQgdmVy
c2lvbiBpczoKKyAqCisgKiBzZXR1cChmdW5jLCBwcm9wZXJ0aWVzKQorICoKKyAqIFRoZSBvbmUg
YXJndW1lbnQgdmVyc2lvbnMgbWF5IG9taXQgZWl0aGVyIGFyZ3VtZW50LgorICogZnVuYyBpcyBh
IGZ1bmN0aW9uIHRvIGJlIHJ1biBzeW5jaHJvbm91c2x5LiBzZXR1cCgpIGJlY29tZXMgYSBuby1v
cCBvbmNlCisgKiBhbnkgdGVzdHMgaGF2ZSByZXR1cm5lZCByZXN1bHRzLiBQcm9wZXJ0aWVzIGFy
ZSBnbG9iYWwgcHJvcGVydGllcyBvZiB0aGUgdGVzdAorICogaGFybmVzcy4gQ3VycmVudGx5IHJl
Y29nbmlzZWQgcHJvcGVydGllcyBhcmU6CisgKgorICoKKyAqIGV4cGxpY2l0X2RvbmUgLSBXYWl0
IGZvciBhbiBleHBsaWNpdCBjYWxsIHRvIGRvbmUoKSBiZWZvcmUgZGVjbGFyaW5nIGFsbAorICog
ICAgICAgICAgICAgICAgIHRlc3RzIGNvbXBsZXRlIChzZWUgYmVsb3cpCisgKgorICogb3V0cHV0
X2RvY3VtZW50IC0gVGhlIGRvY3VtZW50IHRvIHdoaWNoIHJlc3VsdHMgc2hvdWxkIGJlIGxvZ2dl
ZC4gQnkgZGVmYXVsdAorICogICAgICAgICAgICAgICAgICAgdGhpcyBpcyB0aGUgY3VycmVudCBk
b2N1bWVudCBidXQgY291bGQgYmUgYW4gYW5jZXN0b3IKKyAqICAgICAgICAgICAgICAgICAgIGRv
Y3VtZW50IGluIHNvbWUgY2FzZXMgZS5nLiBhIFNWRyB0ZXN0IGxvYWRlZCBpbiBhbiBIVE1MCisg
KiAgICAgICAgICAgICAgICAgICB3cmFwcGVyCisgKgorICogZXhwbGljaXRfdGltZW91dCAtIGRp
c2FibGUgZmlsZSB0aW1lb3V0OyBvbmx5IHN0b3Agd2FpdGluZyBmb3IgcmVzdWx0cworICogICAg
ICAgICAgICAgICAgICAgIHdoZW4gdGhlIHRpbWVvdXQoKSBmdW5jdGlvbiBpcyBjYWxsZWQgKHR5
cGljYWxseSBmb3IKKyAqICAgICAgICAgICAgICAgICAgICB1c2Ugd2hlbiBpbnRlZ3JhdGluZyB3
aXRoIHNvbWUgZXhpc3RpbmcgdGVzdCBmcmFtZXdvcmsKKyAqICAgICAgICAgICAgICAgICAgICB0
aGF0IGhhcyBpdHMgb3duIHRpbWVvdXQgbWVjaGFuaXNtKS4KKyAqCisgKiBhbGxvd191bmNhdWdo
dF9leGNlcHRpb24gLSBkb24ndCB0cmVhdCBhbiB1bmNhdWdodCBleGNlcHRpb24gYXMgYW4gZXJy
b3I7CisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZWVkZWQgd2hlbiBlLmcuIHRlc3Rp
bmcgdGhlIHdpbmRvdy5vbmVycm9yCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYW5k
bGVyLgorICoKKyAqIHRpbWVvdXRfbXVsdGlwbGllciAtIE11bHRpcGxpZXIgdG8gYXBwbHkgdG8g
cGVyLXRlc3QgdGltZW91dHMuCisgKgorICogPT0gRGV0ZXJtaW5pbmcgd2hlbiBhbGwgdGVzdHMg
YXJlIGNvbXBsZXRlID09CisgKgorICogQnkgZGVmYXVsdCB0aGUgdGVzdCBoYXJuZXNzIHdpbGwg
YXNzdW1lIHRoZXJlIGFyZSBubyBtb3JlIHJlc3VsdHMgdG8gY29tZQorICogd2hlbjoKKyAqIDEp
IFRoZXJlIGFyZSBubyBUZXN0IG9iamVjdHMgdGhhdCBoYXZlIGJlZW4gY3JlYXRlZCBidXQgbm90
IGNvbXBsZXRlZAorICogMikgVGhlIGxvYWQgZXZlbnQgb24gdGhlIGRvY3VtZW50IGhhcyBmaXJl
ZAorICoKKyAqIFRoaXMgYmVoYXZpb3VyIGNhbiBiZSBvdmVycmlkZGVuIGJ5IHNldHRpbmcgdGhl
IGV4cGxpY2l0X2RvbmUgcHJvcGVydHkgdG8KKyAqIHRydWUgaW4gYSBjYWxsIHRvIHNldHVwKCku
IElmIGV4cGxpY2l0X2RvbmUgaXMgdHJ1ZSwgdGhlIHRlc3QgaGFybmVzcyB3aWxsCisgKiBub3Qg
YXNzdW1lIGl0IGlzIGRvbmUgdW50aWwgdGhlIGdsb2JhbCBkb25lKCkgZnVuY3Rpb24gaXMgY2Fs
bGVkLiBPbmNlIGRvbmUoKQorICogaXMgY2FsbGVkLCB0aGUgdHdvIGNvbmRpdGlvbnMgYWJvdmUg
YXBwbHkgbGlrZSBub3JtYWwuCisgKgorICogPT0gR2VuZXJhdGluZyB0ZXN0cyA9PQorICoKKyAq
IE5PVEU6IHRoaXMgZnVuY3Rpb25hbGl0eSBtYXkgYmUgcmVtb3ZlZAorICoKKyAqIFRoZXJlIGFy
ZSBzY2VuYXJpb3MgaW4gd2hpY2ggaXMgaXMgZGVzaXJhYmxlIHRvIGNyZWF0ZSBhIGxhcmdlIG51
bWJlciBvZgorICogKHN5bmNocm9ub3VzKSB0ZXN0cyB0aGF0IGFyZSBpbnRlcm5hbGx5IHNpbWls
YXIgYnV0IHZhcnkgaW4gdGhlIHBhcmFtZXRlcnMKKyAqIHVzZWQuIFRvIG1ha2UgdGhpcyBlYXNp
ZXIsIHRoZSBnZW5lcmF0ZV90ZXN0cyBmdW5jdGlvbiBhbGxvd3MgYSBzaW5nbGUKKyAqIGZ1bmN0
aW9uIHRvIGJlIGNhbGxlZCB3aXRoIGVhY2ggc2V0IG9mIHBhcmFtZXRlcnMgaW4gYSBsaXN0Ogor
ICoKKyAqIGdlbmVyYXRlX3Rlc3RzKHRlc3RfZnVuY3Rpb24sIHBhcmFtZXRlcl9saXN0cywgcHJv
cGVydGllcykKKyAqCisgKiBGb3IgZXhhbXBsZToKKyAqCisgKiBnZW5lcmF0ZV90ZXN0cyhhc3Nl
cnRfZXF1YWxzLCBbCisgKiAgICAgWyJTdW0gb25lIGFuZCBvbmUiLCAxKzEsIDJdLAorICogICAg
IFsiU3VtIG9uZSBhbmQgemVybyIsIDErMCwgMV0KKyAqICAgICBdKQorICoKKyAqIElzIGVxdWl2
YWxlbnQgdG86CisgKgorICogdGVzdChmdW5jdGlvbigpIHthc3NlcnRfZXF1YWxzKDErMSwgMil9
LCAiU3VtIG9uZSBhbmQgb25lIikKKyAqIHRlc3QoZnVuY3Rpb24oKSB7YXNzZXJ0X2VxdWFscygx
KzAsIDEpfSwgIlN1bSBvbmUgYW5kIHplcm8iKQorICoKKyAqIE5vdGUgdGhhdCB0aGUgZmlyc3Qg
aXRlbSBpbiBlYWNoIHBhcmFtZXRlciBsaXN0IGNvcnJlc3BvbmRzIHRvIHRoZSBuYW1lIG9mCisg
KiB0aGUgdGVzdC4KKyAqCisgKiBUaGUgcHJvcGVydGllcyBhcmd1bWVudCBpcyBpZGVudGljYWwg
dG8gdGhhdCBmb3IgdGVzdCgpLiBUaGlzIG1heSBiZSBhCisgKiBzaW5nbGUgb2JqZWN0ICh1c2Vk
IGZvciBhbGwgZ2VuZXJhdGVkIHRlc3RzKSBvciBhbiBhcnJheS4KKyAqCisgKiA9PSBDYWxsYmFj
ayBBUEkgPT0KKyAqCisgKiBUaGUgZnJhbWV3b3JrIHByb3ZpZGVzIGNhbGxiYWNrcyBjb3JyZXNw
b25kaW5nIHRvIDMgZXZlbnRzOgorICoKKyAqIHN0YXJ0IC0gaGFwcGVucyB3aGVuIHRoZSBmaXJz
dCBUZXN0IGlzIGNyZWF0ZWQKKyAqIHJlc3VsdCAtIGhhcHBlbnMgd2hlbiBhIHRlc3QgcmVzdWx0
IGlzIHJlY2lldmVkCisgKiBjb21wbGV0ZSAtIGhhcHBlbnMgd2hlbiBhbGwgcmVzdWx0cyBhcmUg
cmVjaWV2ZWQKKyAqCisgKiBUaGUgcGFnZSBkZWZpbmluZyB0aGUgdGVzdHMgbWF5IGFkZCBjYWxs
YmFja3MgZm9yIHRoZXNlIGV2ZW50cyBieSBjYWxsaW5nCisgKiB0aGUgZm9sbG93aW5nIG1ldGhv
ZHM6CisgKgorICogICBhZGRfc3RhcnRfY2FsbGJhY2soY2FsbGJhY2spIC0gY2FsbGJhY2sgY2Fs
bGVkIHdpdGggbm8gYXJndW1lbnRzCisgKiAgIGFkZF9yZXN1bHRfY2FsbGJhY2soY2FsbGJhY2sp
IC0gY2FsbGJhY2sgY2FsbGVkIHdpdGggYSB0ZXN0IGFyZ3VtZW50CisgKiAgIGFkZF9jb21wbGV0
aW9uX2NhbGxiYWNrKGNhbGxiYWNrKSAtIGNhbGxiYWNrIGNhbGxlZCB3aXRoIGFuIGFycmF5IG9m
IHRlc3RzCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFuZCBhbiBz
dGF0dXMgb2JqZWN0CisgKgorICogdGVzdHMgaGF2ZSB0aGUgZm9sbG93aW5nIHByb3BlcnRpZXM6
CisgKiAgIHN0YXR1czogQSBzdGF0dXMgY29kZS4gVGhpcyBjYW4gYmUgY29tcGFyZWQgdG8gdGhl
IFBBU1MsIEZBSUwsIFRJTUVPVVQgYW5kCisgKiAgICAgICAgICAgTk9UUlVOIHByb3BlcnRpZXMg
b24gdGhlIHRlc3Qgb2JqZWN0CisgKiAgIG1lc3NhZ2U6IEEgbWVzc2FnZSBpbmRpY2F0aW5nIHRo
ZSByZWFzb24gZm9yIGZhaWx1cmUuIEluIHRoZSBmdXR1cmUgdGhpcworICogICAgICAgICAgICB3
aWxsIGFsd2F5cyBiZSBhIHN0cmluZworICoKKyAqICBUaGUgc3RhdHVzIG9iamVjdCBnaXZlcyB0
aGUgb3ZlcmFsbCBzdGF0dXMgb2YgdGhlIGhhcm5lc3MuIEl0IGhhcyB0aGUKKyAqICBmb2xsb3dp
bmcgcHJvcGVydGllczoKKyAqICAgIHN0YXR1czogQ2FuIGJlIGNvbXBhcmVkIHRvIHRoZSBPSywg
RVJST1IgYW5kIFRJTUVPVVQgcHJvcGVydGllcworICogICAgbWVzc2FnZTogQW4gZXJyb3IgbWVz
c2FnZSBzZXQgd2hlbiB0aGUgc3RhdHVzIGlzIEVSUk9SCisgKgorICogPT0gRXh0ZXJuYWwgQVBJ
ID09CisgKgorICogSW4gb3JkZXIgdG8gY29sbGVjdCB0aGUgcmVzdWx0cyBvZiBtdWx0aXBsZSBw
YWdlcyBjb250YWluaW5nIHRlc3RzLCB0aGUgdGVzdAorICogaGFybmVzcyB3aWxsLCB3aGVuIGxv
YWRlZCBpbiBhIG5lc3RlZCBicm93c2luZyBjb250ZXh0LCBhdHRlbXB0IHRvIGNhbGwKKyAqIGNl
cnRhaW4gZnVuY3Rpb25zIGluIGVhY2ggYW5jZXN0b3IgYW5kIG9wZW5lciBicm93c2luZyBjb250
ZXh0OgorICoKKyAqIHN0YXJ0IC0gc3RhcnRfY2FsbGJhY2sKKyAqIHJlc3VsdCAtIHJlc3VsdF9j
YWxsYmFjaworICogY29tcGxldGUgLSBjb21wbGV0aW9uX2NhbGxiYWNrCisgKgorICogVGhlc2Ug
YXJlIGdpdmVuIHRoZSBzYW1lIGFyZ3VtZW50cyBhcyB0aGUgY29ycmVzcG9uZGluZyBpbnRlcm5h
bCBjYWxsYmFja3MKKyAqIGRlc2NyaWJlZCBhYm92ZS4KKyAqCisgKiA9PSBFeHRlcm5hbCBBUEkg
dGhyb3VnaCBjcm9zcy1kb2N1bWVudCBtZXNzYWdpbmcgPT0KKyAqCisgKiBXaGVyZSBzdXBwb3J0
ZWQsIHRoZSB0ZXN0IGhhcm5lc3Mgd2lsbCBhbHNvIHNlbmQgbWVzc2FnZXMgdXNpbmcKKyAqIGNy
b3NzLWRvY3VtZW50IG1lc3NhZ2luZyB0byBlYWNoIGFuY2VzdG9yIGFuZCBvcGVuZXIgYnJvd3Np
bmcgY29udGV4dC4gU2luY2UKKyAqIGl0IHVzZXMgdGhlIHdpbGRjYXJkIGtleXdvcmQgKCopLCBj
cm9zcy1vcmlnaW4gY29tbXVuaWNhdGlvbiBpcyBlbmFibGVkIGFuZAorICogc2NyaXB0IG9uIGRp
ZmZlcmVudCBvcmlnaW5zIGNhbiBjb2xsZWN0IHRoZSByZXN1bHRzLgorICoKKyAqIFRoaXMgQVBJ
IGZvbGxvd3Mgc2ltaWxhciBjb252ZW50aW9ucyBhcyB0aG9zZSBkZXNjcmliZWQgYWJvdmUgb25s
eSBzbGlnaHRseQorICogbW9kaWZpZWQgdG8gYWNjb21tb2RhdGUgbWVzc2FnZSBldmVudCBBUEku
IEVhY2ggbWVzc2FnZSBpcyBzZW50IGJ5IHRoZSBoYXJuZXNzCisgKiBpcyBwYXNzZWQgYSBzaW5n
bGUgdmFuaWxsYSBvYmplY3QsIGF2YWlsYWJsZSBhcyB0aGUgYGRhdGFgIHByb3BlcnR5IG9mIHRo
ZQorICogZXZlbnQgb2JqZWN0LiBUaGVzZSBvYmplY3RzIGFyZSBzdHJ1Y3R1cmVzIGFzIGZvbGxv
d3M6CisgKgorICogc3RhcnQgLSB7IHR5cGU6ICJzdGFydCIgfQorICogcmVzdWx0IC0geyB0eXBl
OiAicmVzdWx0IiwgdGVzdDogVGVzdCB9CisgKiBjb21wbGV0ZSAtIHsgdHlwZTogImNvbXBsZXRl
IiwgdGVzdHM6IFtUZXN0LCAuLi5dLCBzdGF0dXM6IFRlc3RzU3RhdHVzIH0KKyAqCisgKiA9PSBM
aXN0IG9mIGFzc2VydGlvbnMgPT0KKyAqCisgKiBhc3NlcnRfdHJ1ZShhY3R1YWwsIGRlc2NyaXB0
aW9uKQorICogICBhc3NlcnRzIHRoYXQgL2FjdHVhbC8gaXMgc3RyaWN0bHkgdHJ1ZQorICoKKyAq
IGFzc2VydF9mYWxzZShhY3R1YWwsIGRlc2NyaXB0aW9uKQorICogICBhc3NlcnRzIHRoYXQgL2Fj
dHVhbC8gaXMgc3RyaWN0bHkgZmFsc2UKKyAqCisgKiBhc3NlcnRfZXF1YWxzKGFjdHVhbCwgZXhw
ZWN0ZWQsIGRlc2NyaXB0aW9uKQorICogICBhc3NlcnRzIHRoYXQgL2FjdHVhbC8gaXMgdGhlIHNh
bWUgdmFsdWUgYXMgL2V4cGVjdGVkLworICoKKyAqIGFzc2VydF9ub3RfZXF1YWxzKGFjdHVhbCwg
ZXhwZWN0ZWQsIGRlc2NyaXB0aW9uKQorICogICBhc3NlcnRzIHRoYXQgL2FjdHVhbC8gaXMgYSBk
aWZmZXJlbnQgdmFsdWUgdG8gL2V4cGVjdGVkLy4gWWVzLCB0aGlzIG1lYW5zCisgKiAgIHRoYXQg
ImV4cGVjdGVkIiBpcyBhIG1pc25vbWVyCisgKgorICogYXNzZXJ0X2luX2FycmF5KGFjdHVhbCwg
ZXhwZWN0ZWQsIGRlc2NyaXB0aW9uKQorICogICBhc3NlcnRzIHRoYXQgL2V4cGVjdGVkLyBpcyBh
biBBcnJheSwgYW5kIC9hY3R1YWwvIGlzIGVxdWFsIHRvIG9uZSBvZiB0aGUKKyAqICAgbWVtYmVy
cyAtLSBleHBlY3RlZC5pbmRleE9mKGFjdHVhbCkgIT0gLTEKKyAqCisgKiBhc3NlcnRfYXJyYXlf
ZXF1YWxzKGFjdHVhbCwgZXhwZWN0ZWQsIGRlc2NyaXB0aW9uKQorICogICBhc3NlcnRzIHRoYXQg
L2FjdHVhbC8gYW5kIC9leHBlY3RlZC8gaGF2ZSB0aGUgc2FtZSBsZW5ndGggYW5kIHRoZSB2YWx1
ZSBvZgorICogICBlYWNoIGluZGV4ZWQgcHJvcGVydHkgaW4gL2FjdHVhbC8gaXMgdGhlIHN0cmlj
dGx5IGVxdWFsIHRvIHRoZSBjb3JyZXNwb25kaW5nCisgKiAgIHByb3BlcnR5IHZhbHVlIGluIC9l
eHBlY3RlZC8KKyAqCisgKiBhc3NlcnRfYXBwcm94X2VxdWFscyhhY3R1YWwsIGV4cGVjdGVkLCBl
cHNpbG9uLCBkZXNjcmlwdGlvbikKKyAqICAgYXNzZXJ0cyB0aGF0IC9hY3R1YWwvIGlzIGEgbnVt
YmVyIHdpdGhpbiArLy0gL2Vwc2lsb24vIG9mIC9leHBlY3RlZC8KKyAqCisgKiBhc3NlcnRfbGVz
c190aGFuKGFjdHVhbCwgZXhwZWN0ZWQsIGRlc2NyaXB0aW9uKQorICogICBhc3NlcnRzIHRoYXQg
L2FjdHVhbC8gaXMgYSBudW1iZXIgbGVzcyB0aGFuIC9leHBlY3RlZC8KKyAqCisgKiBhc3NlcnRf
Z3JlYXRlcl90aGFuKGFjdHVhbCwgZXhwZWN0ZWQsIGRlc2NyaXB0aW9uKQorICogICBhc3NlcnRz
IHRoYXQgL2FjdHVhbC8gaXMgYSBudW1iZXIgZ3JlYXRlciB0aGFuIC9leHBlY3RlZC8KKyAqCisg
KiBhc3NlcnRfbGVzc190aGFuX2VxdWFsKGFjdHVhbCwgZXhwZWN0ZWQsIGRlc2NyaXB0aW9uKQor
ICogICBhc3NlcnRzIHRoYXQgL2FjdHVhbC8gaXMgYSBudW1iZXIgbGVzcyB0aGFuIG9yIGVxdWFs
IHRvIC9leHBlY3RlZC8KKyAqCisgKiBhc3NlcnRfZ3JlYXRlcl90aGFuX2VxdWFsKGFjdHVhbCwg
ZXhwZWN0ZWQsIGRlc2NyaXB0aW9uKQorICogICBhc3NlcnRzIHRoYXQgL2FjdHVhbC8gaXMgYSBu
dW1iZXIgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvIC9leHBlY3RlZC8KKyAqCisgKiBhc3NlcnRf
cmVnZXhwX21hdGNoKGFjdHVhbCwgZXhwZWN0ZWQsIGRlc2NyaXB0aW9uKQorICogICBhc3NlcnRz
IHRoYXQgL2FjdHVhbC8gbWF0Y2hlcyB0aGUgcmVnZXhwIC9leHBlY3RlZC8KKyAqCisgKiBhc3Nl
cnRfY2xhc3Nfc3RyaW5nKG9iamVjdCwgY2xhc3NfbmFtZSwgZGVzY3JpcHRpb24pCisgKiAgIGFz
c2VydHMgdGhhdCB0aGUgY2xhc3Mgc3RyaW5nIG9mIC9vYmplY3QvIGFzIHJldHVybmVkIGluCisg
KiAgIE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcgaXMgZXF1YWwgdG8gL2NsYXNzX25hbWUvLgor
ICoKKyAqIGFzc2VydF9vd25fcHJvcGVydHkob2JqZWN0LCBwcm9wZXJ0eV9uYW1lLCBkZXNjcmlw
dGlvbikKKyAqICAgYXNzZXJ0IHRoYXQgb2JqZWN0IGhhcyBvd24gcHJvcGVydHkgcHJvcGVydHlf
bmFtZQorICoKKyAqIGFzc2VydF9pbmhlcml0cyhvYmplY3QsIHByb3BlcnR5X25hbWUsIGRlc2Ny
aXB0aW9uKQorICogICBhc3NlcnQgdGhhdCBvYmplY3QgZG9lcyBub3QgaGF2ZSBhbiBvd24gcHJv
cGVydHkgbmFtZWQgcHJvcGVydHlfbmFtZQorICogICBidXQgdGhhdCBwcm9wZXJ0eV9uYW1lIGlz
IHByZXNlbnQgaW4gdGhlIHByb3RvdHlwZSBjaGFpbiBmb3Igb2JqZWN0CisgKgorICogYXNzZXJ0
X2lkbF9hdHRyaWJ1dGUob2JqZWN0LCBhdHRyaWJ1dGVfbmFtZSwgZGVzY3JpcHRpb24pCisgKiAg
IGFzc2VydCB0aGF0IGFuIG9iamVjdCB0aGF0IGlzIGFuIGluc3RhbmNlIG9mIHNvbWUgaW50ZXJm
YWNlIGhhcyB0aGUKKyAqICAgYXR0cmlidXRlIGF0dHJpYnV0ZV9uYW1lIGZvbGxvd2luZyB0aGUg
Y29uZGl0aW9ucyBzcGVjaWZpZWQgYnkgV2ViSURMCisgKgorICogYXNzZXJ0X3JlYWRvbmx5KG9i
amVjdCwgcHJvcGVydHlfbmFtZSwgZGVzY3JpcHRpb24pCisgKiAgIGFzc2VydCB0aGF0IHByb3Bl
cnR5IHByb3BlcnR5X25hbWUgb24gb2JqZWN0IGlzIHJlYWRvbmx5CisgKgorICogYXNzZXJ0X3Ro
cm93cyhjb2RlLCBmdW5jLCBkZXNjcmlwdGlvbikKKyAqICAgY29kZSAtIHRoZSBleHBlY3RlZCBl
eGNlcHRpb246CisgKiAgICAgbyBzdHJpbmc6IHRoZSB0aHJvd24gZXhjZXB0aW9uIG11c3QgYmUg
YSBET01FeGNlcHRpb24gd2l0aCB0aGUgZ2l2ZW4KKyAqICAgICAgICAgICAgICAgbmFtZSwgZS5n
LiwgIlRpbWVvdXRFcnJvciIgKGZvciBjb21wYXRpYmlsaXR5IHdpdGggZXhpc3RpbmcKKyAqICAg
ICAgICAgICAgICAgdGVzdHMsIGEgY29uc3RhbnQgaXMgYWxzbyBzdXBwb3J0ZWQsIGUuZy4sICJU
SU1FT1VUX0VSUiIpCisgKiAgICAgbyBvYmplY3Q6IHRoZSB0aHJvd24gZXhjZXB0aW9uIG11c3Qg
aGF2ZSBhIHByb3BlcnR5IGNhbGxlZCAibmFtZSIgdGhhdAorICogICAgICAgICAgICAgICBtYXRj
aGVzIGNvZGUubmFtZQorICogICAgIG8gbnVsbDogICBhbGxvdyBhbnkgZXhjZXB0aW9uIChpbiBn
ZW5lcmFsLCBvbmUgb2YgdGhlIG9wdGlvbnMgYWJvdmUKKyAqICAgICAgICAgICAgICAgc2hvdWxk
IGJlIHVzZWQpCisgKiAgIGZ1bmMgLSBhIGZ1bmN0aW9uIHRoYXQgc2hvdWxkIHRocm93CisgKgor
ICogYXNzZXJ0X3VucmVhY2hlZChkZXNjcmlwdGlvbikKKyAqICAgYXNzZXJ0cyBpZiBjYWxsZWQu
IFVzZWQgdG8gZW5zdXJlIHRoYXQgc29tZSBjb2RlcGF0aCBpcyAqbm90KiB0YWtlbiBlLmcuCisg
KiAgIGFuIGV2ZW50IGRvZXMgbm90IGZpcmUuCisgKgorICogYXNzZXJ0X2FueShhc3NlcnRfZnVu
YywgYWN0dWFsLCBleHBlY3RlZF9hcnJheSwgZXh0cmFfYXJnXzEsIC4uLiBleHRyYV9hcmdfTikK
KyAqICAgYXNzZXJ0cyB0aGF0IG9uZSBhc3NlcnRfZnVuYyhhY3R1YWwsIGV4cGVjdGVkX2FycmF5
X04sIGV4dHJhX2FyZzEsIC4uLiwgZXh0cmFfYXJnX04pCisgKiAgIGlzIHRydWUgZm9yIHNvbWUg
ZXhwZWN0ZWRfYXJyYXlfTiBpbiBleHBlY3RlZF9hcnJheS4gVGhpcyBvbmx5IHdvcmtzIGZvciBh
c3NlcnRfZnVuYworICogICB3aXRoIHNpZ25hdHVyZSBhc3NlcnRfZnVuYyhhY3R1YWwsIGV4cGVj
dGVkLCBhcmdzXzEsIC4uLiwgYXJnc19OKS4gTm90ZSB0aGF0IHRlc3RzCisgKiAgIHdpdGggbXVs
dGlwbGUgYWxsb3dlZCBwYXNzIGNvbmRpdGlvbnMgYXJlIGJhZCBwcmFjdGljZSB1bmxlc3MgdGhl
IHNwZWMgc3BlY2lmaWNhbGx5CisgKiAgIGFsbG93cyBtdWx0aXBsZSBiZWhhdmlvdXJzLiBUZXN0
IGF1dGhvcnMgc2hvdWxkIG5vdCB1c2UgdGhpcyBtZXRob2Qgc2ltcGx5IHRvIGhpZGUKKyAqICAg
VUEgYnVncy4KKyAqCisgKiBhc3NlcnRfZXhpc3RzKG9iamVjdCwgcHJvcGVydHlfbmFtZSwgZGVz
Y3JpcHRpb24pCisgKiAgICoqKiBkZXByZWNhdGVkICoqKgorICogICBhc3NlcnRzIHRoYXQgb2Jq
ZWN0IGhhcyBhbiBvd24gcHJvcGVydHkgcHJvcGVydHlfbmFtZQorICoKKyAqIGFzc2VydF9ub3Rf
ZXhpc3RzKG9iamVjdCwgcHJvcGVydHlfbmFtZSwgZGVzY3JpcHRpb24pCisgKiAgICoqKiBkZXBy
ZWNhdGVkICoqKgorICogICBhc3NlcnQgdGhhdCBvYmplY3QgZG9lcyBub3QgaGF2ZSBvd24gcHJv
cGVydHkgcHJvcGVydHlfbmFtZQorICovCisKKyhmdW5jdGlvbiAoKQoreworICAgIHZhciBkZWJ1
ZyA9IGZhbHNlOworICAgIC8vIGRlZmF1bHQgdGltZW91dCBpcyAxMCBzZWNvbmRzLCB0ZXN0IGNh
biBvdmVycmlkZSBpZiBuZWVkZWQKKyAgICB2YXIgc2V0dGluZ3MgPSB7CisgICAgICAgIG91dHB1
dDp0cnVlLAorICAgICAgICBoYXJuZXNzX3RpbWVvdXQ6eworICAgICAgICAgICAgIm5vcm1hbCI6
MTAwMDAsCisgICAgICAgICAgICAibG9uZyI6NjAwMDAKKyAgICAgICAgfSwKKyAgICAgICAgdGVz
dF90aW1lb3V0Om51bGwKKyAgICB9OworCisgICAgdmFyIHhodG1sX25zID0gImh0dHA6Ly93d3cu
dzMub3JnLzE5OTkveGh0bWwiOworCisgICAgLy8gc2NyaXB0X3ByZWZpeCBpcyB1c2VkIGJ5IE91
dHB1dC5wcm90b3R5cGUuc2hvd19yZXN1bHRzKCkgdG8gZmlndXJlIG91dAorICAgIC8vIHdoZXJl
IHRvIGdldCB0ZXN0aGFybmVzcy5jc3MgZnJvbS4gIEl0J3MgZW5jbG9zZWQgaW4gYW4gZXh0cmEg
Y2xvc3VyZSB0bworICAgIC8vIG5vdCBwb2xsdXRlIHRoZSBsaWJyYXJ5J3MgbmFtZXNwYWNlIHdp
dGggdmFyaWFibGVzIGxpa2UgInNyYyIuCisgICAgdmFyIHNjcmlwdF9wcmVmaXggPSBudWxsOwor
ICAgIChmdW5jdGlvbiAoKQorICAgIHsKKyAgICAgICAgdmFyIHNjcmlwdHMgPSBkb2N1bWVudC5n
ZXRFbGVtZW50c0J5VGFnTmFtZSgic2NyaXB0Iik7CisgICAgICAgIGZvciAodmFyIGkgPSAwOyBp
IDwgc2NyaXB0cy5sZW5ndGg7IGkrKykgeworICAgICAgICAgICAgaWYgKHNjcmlwdHNbaV0uc3Jj
KSB7CisgICAgICAgICAgICAgICAgdmFyIHNyYyA9IHNjcmlwdHNbaV0uc3JjOworICAgICAgICAg
ICAgfSBlbHNlIGlmIChzY3JpcHRzW2ldLmhyZWYpIHsKKyAgICAgICAgICAgICAgICAvL1NWRyBj
YXNlCisgICAgICAgICAgICAgICAgdmFyIHNyYyA9IHNjcmlwdHNbaV0uaHJlZi5iYXNlVmFsOwor
ICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAoc3JjICYmIHNyYy5zbGljZShzcmMubGVu
Z3RoIC0gInRlc3RoYXJuZXNzLmpzIi5sZW5ndGgpID09PSAidGVzdGhhcm5lc3MuanMiKSB7Cisg
ICAgICAgICAgICAgICAgc2NyaXB0X3ByZWZpeCA9IHNyYy5zbGljZSgwLCBzcmMubGVuZ3RoIC0g
InRlc3RoYXJuZXNzLmpzIi5sZW5ndGgpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICAgICAgfQorICAgICAgICB9CisgICAgfSkoKTsKKworICAgIC8qCisgICAgICogQVBJIGZ1bmN0
aW9ucworICAgICAqLworCisgICAgdmFyIG5hbWVfY291bnRlciA9IDA7CisgICAgZnVuY3Rpb24g
bmV4dF9kZWZhdWx0X25hbWUoKQorICAgIHsKKyAgICAgICAgLy9Eb24ndCB1c2UgZG9jdW1lbnQu
dGl0bGUgdG8gd29yayBhcm91bmQgYW4gT3BlcmEgYnVnIGluIFhIVE1MIGRvY3VtZW50cworICAg
ICAgICB2YXIgdGl0bGUgPSBkb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZSgidGl0bGUiKVsw
XTsKKyAgICAgICAgdmFyIHByZWZpeCA9ICh0aXRsZSAmJiB0aXRsZS5maXJzdENoaWxkICYmIHRp
dGxlLmZpcnN0Q2hpbGQuZGF0YSkgfHwgIlVudGl0bGVkIjsKKyAgICAgICAgdmFyIHN1ZmZpeCA9
IG5hbWVfY291bnRlciA+IDAgPyAiICIgKyBuYW1lX2NvdW50ZXIgOiAiIjsKKyAgICAgICAgbmFt
ZV9jb3VudGVyKys7CisgICAgICAgIHJldHVybiBwcmVmaXggKyBzdWZmaXg7CisgICAgfQorCisg
ICAgZnVuY3Rpb24gdGVzdChmdW5jLCBuYW1lLCBwcm9wZXJ0aWVzKQorICAgIHsKKyAgICAgICAg
dmFyIHRlc3RfbmFtZSA9IG5hbWUgPyBuYW1lIDogbmV4dF9kZWZhdWx0X25hbWUoKTsKKyAgICAg
ICAgcHJvcGVydGllcyA9IHByb3BlcnRpZXMgPyBwcm9wZXJ0aWVzIDoge307CisgICAgICAgIHZh
ciB0ZXN0X29iaiA9IG5ldyBUZXN0KHRlc3RfbmFtZSwgcHJvcGVydGllcyk7CisgICAgICAgIHRl
c3Rfb2JqLnN0ZXAoZnVuYywgdGVzdF9vYmosIHRlc3Rfb2JqKTsKKyAgICAgICAgaWYgKHRlc3Rf
b2JqLnBoYXNlID09PSB0ZXN0X29iai5waGFzZXMuU1RBUlRFRCkgeworICAgICAgICAgICAgdGVz
dF9vYmouZG9uZSgpOworICAgICAgICB9CisgICAgfQorCisgICAgZnVuY3Rpb24gYXN5bmNfdGVz
dChmdW5jLCBuYW1lLCBwcm9wZXJ0aWVzKQorICAgIHsKKyAgICAgICAgaWYgKHR5cGVvZiBmdW5j
ICE9PSAiZnVuY3Rpb24iKSB7CisgICAgICAgICAgICBwcm9wZXJ0aWVzID0gbmFtZTsKKyAgICAg
ICAgICAgIG5hbWUgPSBmdW5jOworICAgICAgICAgICAgZnVuYyA9IG51bGw7CisgICAgICAgIH0K
KyAgICAgICAgdmFyIHRlc3RfbmFtZSA9IG5hbWUgPyBuYW1lIDogbmV4dF9kZWZhdWx0X25hbWUo
KTsKKyAgICAgICAgcHJvcGVydGllcyA9IHByb3BlcnRpZXMgPyBwcm9wZXJ0aWVzIDoge307Cisg
ICAgICAgIHZhciB0ZXN0X29iaiA9IG5ldyBUZXN0KHRlc3RfbmFtZSwgcHJvcGVydGllcyk7Cisg
ICAgICAgIGlmIChmdW5jKSB7CisgICAgICAgICAgICB0ZXN0X29iai5zdGVwKGZ1bmMsIHRlc3Rf
b2JqLCB0ZXN0X29iaik7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHRlc3Rfb2JqOworICAg
IH0KKworICAgIGZ1bmN0aW9uIHNldHVwKGZ1bmNfb3JfcHJvcGVydGllcywgbWF5YmVfcHJvcGVy
dGllcykKKyAgICB7CisgICAgICAgIHZhciBmdW5jID0gbnVsbDsKKyAgICAgICAgdmFyIHByb3Bl
cnRpZXMgPSB7fTsKKyAgICAgICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT09IDIpIHsKKyAgICAg
ICAgICAgIGZ1bmMgPSBmdW5jX29yX3Byb3BlcnRpZXM7CisgICAgICAgICAgICBwcm9wZXJ0aWVz
ID0gbWF5YmVfcHJvcGVydGllczsKKyAgICAgICAgfSBlbHNlIGlmIChmdW5jX29yX3Byb3BlcnRp
ZXMgaW5zdGFuY2VvZiBGdW5jdGlvbikgeworICAgICAgICAgICAgZnVuYyA9IGZ1bmNfb3JfcHJv
cGVydGllczsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHByb3BlcnRpZXMgPSBmdW5j
X29yX3Byb3BlcnRpZXM7CisgICAgICAgIH0KKyAgICAgICAgdGVzdHMuc2V0dXAoZnVuYywgcHJv
cGVydGllcyk7CisgICAgICAgIG91dHB1dC5zZXR1cChwcm9wZXJ0aWVzKTsKKyAgICB9CisKKyAg
ICBmdW5jdGlvbiBkb25lKCkgeworICAgICAgICB0ZXN0cy5lbmRfd2FpdCgpOworICAgIH0KKwor
ICAgIGZ1bmN0aW9uIGdlbmVyYXRlX3Rlc3RzKGZ1bmMsIGFyZ3MsIHByb3BlcnRpZXMpIHsKKyAg
ICAgICAgZm9yRWFjaChhcmdzLCBmdW5jdGlvbih4LCBpKQorICAgICAgICAgICAgICAgIHsKKyAg
ICAgICAgICAgICAgICAgICAgdmFyIG5hbWUgPSB4WzBdOworICAgICAgICAgICAgICAgICAgICB0
ZXN0KGZ1bmN0aW9uKCkKKyAgICAgICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGZ1bmMuYXBwbHkodGhpcywgeC5zbGljZSgxKSk7CisgICAgICAgICAg
ICAgICAgICAgICAgICAgfSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lLAorICAgICAg
ICAgICAgICAgICAgICAgICAgIEFycmF5LmlzQXJyYXkocHJvcGVydGllcykgPyBwcm9wZXJ0aWVz
W2ldIDogcHJvcGVydGllcyk7CisgICAgICAgICAgICAgICAgfSk7CisgICAgfQorCisgICAgZnVu
Y3Rpb24gb25fZXZlbnQob2JqZWN0LCBldmVudCwgY2FsbGJhY2spCisgICAgeworICAgICAgICBv
YmplY3QuYWRkRXZlbnRMaXN0ZW5lcihldmVudCwgY2FsbGJhY2ssIGZhbHNlKTsKKyAgICB9CisK
KyAgICBleHBvc2UodGVzdCwgJ3Rlc3QnKTsKKyAgICBleHBvc2UoYXN5bmNfdGVzdCwgJ2FzeW5j
X3Rlc3QnKTsKKyAgICBleHBvc2UoZ2VuZXJhdGVfdGVzdHMsICdnZW5lcmF0ZV90ZXN0cycpOwor
ICAgIGV4cG9zZShzZXR1cCwgJ3NldHVwJyk7CisgICAgZXhwb3NlKGRvbmUsICdkb25lJyk7Cisg
ICAgZXhwb3NlKG9uX2V2ZW50LCAnb25fZXZlbnQnKTsKKworICAgIC8qCisgICAgICogUmV0dXJu
IGEgc3RyaW5nIHRydW5jYXRlZCB0byB0aGUgZ2l2ZW4gbGVuZ3RoLCB3aXRoIC4uLiBhZGRlZCBh
dCB0aGUgZW5kCisgICAgICogaWYgaXQgd2FzIGxvbmdlci4KKyAgICAgKi8KKyAgICBmdW5jdGlv
biB0cnVuY2F0ZShzLCBsZW4pCisgICAgeworICAgICAgICBpZiAocy5sZW5ndGggPiBsZW4pIHsK
KyAgICAgICAgICAgIHJldHVybiBzLnN1YnN0cmluZygwLCBsZW4gLSAzKSArICIuLi4iOworICAg
ICAgICB9CisgICAgICAgIHJldHVybiBzOworICAgIH0KKworICAgIC8qCisgICAgICogUmV0dXJu
IHRydWUgaWYgb2JqZWN0IGlzIHByb2JhYmx5IGEgTm9kZSBvYmplY3QuCisgICAgICovCisgICAg
ZnVuY3Rpb24gaXNfbm9kZShvYmplY3QpCisgICAgeworICAgICAgICAvLyBJIHVzZSBkdWNrLXR5
cGluZyBpbnN0ZWFkIG9mIGluc3RhbmNlb2YsIGJlY2F1c2UKKyAgICAgICAgLy8gaW5zdGFuY2Vv
ZiBkb2Vzbid0IHdvcmsgaWYgdGhlIG5vZGUgaXMgZnJvbSBhbm90aGVyIHdpbmRvdyAobGlrZSBh
bgorICAgICAgICAvLyBpZnJhbWUncyBjb250ZW50V2luZG93KToKKyAgICAgICAgLy8gaHR0cDov
L3d3dy53My5vcmcvQnVncy9QdWJsaWMvc2hvd19idWcuY2dpP2lkPTEyMjk1CisgICAgICAgIGlm
ICgibm9kZVR5cGUiIGluIG9iamVjdAorICAgICAgICAmJiAibm9kZU5hbWUiIGluIG9iamVjdAor
ICAgICAgICAmJiAibm9kZVZhbHVlIiBpbiBvYmplY3QKKyAgICAgICAgJiYgImNoaWxkTm9kZXMi
IGluIG9iamVjdCkgeworICAgICAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgICAgICBvYmplY3Qu
bm9kZVR5cGU7CisgICAgICAgICAgICB9IGNhdGNoIChlKSB7CisgICAgICAgICAgICAgICAgLy8g
VGhlIG9iamVjdCBpcyBwcm9iYWJseSBOb2RlLnByb3RvdHlwZSBvciBhbm90aGVyIHByb3RvdHlw
ZQorICAgICAgICAgICAgICAgIC8vIG9iamVjdCB0aGF0IGluaGVyaXRzIGZyb20gaXQsIGFuZCBu
b3QgYSBOb2RlIGluc3RhbmNlLgorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICB9CisKKyAgICAvKgorICAgICAqIENvbnZlcnQgYSB2YWx1ZSB0byBh
IG5pY2UsIGh1bWFuLXJlYWRhYmxlIHN0cmluZworICAgICAqLworICAgIGZ1bmN0aW9uIGZvcm1h
dF92YWx1ZSh2YWwsIHNlZW4pCisgICAgeworICAgICAgICBpZiAoIXNlZW4pIHsKKyAgICAgICAg
ICAgIHNlZW4gPSBbXTsKKyAgICAgICAgfQorICAgICAgICBpZiAodHlwZW9mIHZhbCA9PT0gIm9i
amVjdCIgJiYgdmFsICE9PSBudWxsKSB7CisgICAgICAgICAgICBpZiAoc2Vlbi5pbmRleE9mKHZh
bCkgPj0gMCkgeworICAgICAgICAgICAgICAgIHJldHVybiAiWy4uLl0iOworICAgICAgICAgICAg
fQorICAgICAgICAgICAgc2Vlbi5wdXNoKHZhbCk7CisgICAgICAgIH0KKyAgICAgICAgaWYgKEFy
cmF5LmlzQXJyYXkodmFsKSkgeworICAgICAgICAgICAgcmV0dXJuICJbIiArIHZhbC5tYXAoZnVu
Y3Rpb24oeCkge3JldHVybiBmb3JtYXRfdmFsdWUoeCwgc2Vlbil9KS5qb2luKCIsICIpICsgIl0i
OworICAgICAgICB9CisKKyAgICAgICAgc3dpdGNoICh0eXBlb2YgdmFsKSB7CisgICAgICAgIGNh
c2UgInN0cmluZyI6CisgICAgICAgICAgICB2YWwgPSB2YWwucmVwbGFjZSgiXFwiLCAiXFxcXCIp
OworICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCAzMjsgaSsrKSB7CisgICAgICAgICAg
ICAgICAgdmFyIHJlcGxhY2UgPSAiXFwiOworICAgICAgICAgICAgICAgIHN3aXRjaCAoaSkgewor
ICAgICAgICAgICAgICAgIGNhc2UgMDogcmVwbGFjZSArPSAiMCI7IGJyZWFrOworICAgICAgICAg
ICAgICAgIGNhc2UgMTogcmVwbGFjZSArPSAieDAxIjsgYnJlYWs7CisgICAgICAgICAgICAgICAg
Y2FzZSAyOiByZXBsYWNlICs9ICJ4MDIiOyBicmVhazsKKyAgICAgICAgICAgICAgICBjYXNlIDM6
IHJlcGxhY2UgKz0gIngwMyI7IGJyZWFrOworICAgICAgICAgICAgICAgIGNhc2UgNDogcmVwbGFj
ZSArPSAieDA0IjsgYnJlYWs7CisgICAgICAgICAgICAgICAgY2FzZSA1OiByZXBsYWNlICs9ICJ4
MDUiOyBicmVhazsKKyAgICAgICAgICAgICAgICBjYXNlIDY6IHJlcGxhY2UgKz0gIngwNiI7IGJy
ZWFrOworICAgICAgICAgICAgICAgIGNhc2UgNzogcmVwbGFjZSArPSAieDA3IjsgYnJlYWs7Cisg
ICAgICAgICAgICAgICAgY2FzZSA4OiByZXBsYWNlICs9ICJiIjsgYnJlYWs7CisgICAgICAgICAg
ICAgICAgY2FzZSA5OiByZXBsYWNlICs9ICJ0IjsgYnJlYWs7CisgICAgICAgICAgICAgICAgY2Fz
ZSAxMDogcmVwbGFjZSArPSAibiI7IGJyZWFrOworICAgICAgICAgICAgICAgIGNhc2UgMTE6IHJl
cGxhY2UgKz0gInYiOyBicmVhazsKKyAgICAgICAgICAgICAgICBjYXNlIDEyOiByZXBsYWNlICs9
ICJmIjsgYnJlYWs7CisgICAgICAgICAgICAgICAgY2FzZSAxMzogcmVwbGFjZSArPSAiciI7IGJy
ZWFrOworICAgICAgICAgICAgICAgIGNhc2UgMTQ6IHJlcGxhY2UgKz0gIngwZSI7IGJyZWFrOwor
ICAgICAgICAgICAgICAgIGNhc2UgMTU6IHJlcGxhY2UgKz0gIngwZiI7IGJyZWFrOworICAgICAg
ICAgICAgICAgIGNhc2UgMTY6IHJlcGxhY2UgKz0gIngxMCI7IGJyZWFrOworICAgICAgICAgICAg
ICAgIGNhc2UgMTc6IHJlcGxhY2UgKz0gIngxMSI7IGJyZWFrOworICAgICAgICAgICAgICAgIGNh
c2UgMTg6IHJlcGxhY2UgKz0gIngxMiI7IGJyZWFrOworICAgICAgICAgICAgICAgIGNhc2UgMTk6
IHJlcGxhY2UgKz0gIngxMyI7IGJyZWFrOworICAgICAgICAgICAgICAgIGNhc2UgMjA6IHJlcGxh
Y2UgKz0gIngxNCI7IGJyZWFrOworICAgICAgICAgICAgICAgIGNhc2UgMjE6IHJlcGxhY2UgKz0g
IngxNSI7IGJyZWFrOworICAgICAgICAgICAgICAgIGNhc2UgMjI6IHJlcGxhY2UgKz0gIngxNiI7
IGJyZWFrOworICAgICAgICAgICAgICAgIGNhc2UgMjM6IHJlcGxhY2UgKz0gIngxNyI7IGJyZWFr
OworICAgICAgICAgICAgICAgIGNhc2UgMjQ6IHJlcGxhY2UgKz0gIngxOCI7IGJyZWFrOworICAg
ICAgICAgICAgICAgIGNhc2UgMjU6IHJlcGxhY2UgKz0gIngxOSI7IGJyZWFrOworICAgICAgICAg
ICAgICAgIGNhc2UgMjY6IHJlcGxhY2UgKz0gIngxYSI7IGJyZWFrOworICAgICAgICAgICAgICAg
IGNhc2UgMjc6IHJlcGxhY2UgKz0gIngxYiI7IGJyZWFrOworICAgICAgICAgICAgICAgIGNhc2Ug
Mjg6IHJlcGxhY2UgKz0gIngxYyI7IGJyZWFrOworICAgICAgICAgICAgICAgIGNhc2UgMjk6IHJl
cGxhY2UgKz0gIngxZCI7IGJyZWFrOworICAgICAgICAgICAgICAgIGNhc2UgMzA6IHJlcGxhY2Ug
Kz0gIngxZSI7IGJyZWFrOworICAgICAgICAgICAgICAgIGNhc2UgMzE6IHJlcGxhY2UgKz0gIngx
ZiI7IGJyZWFrOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB2YWwgPSB2YWwu
cmVwbGFjZShSZWdFeHAoU3RyaW5nLmZyb21DaGFyQ29kZShpKSwgImciKSwgcmVwbGFjZSk7Cisg
ICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4gJyInICsgdmFsLnJlcGxhY2UoLyIvZywg
J1xcIicpICsgJyInOworICAgICAgICBjYXNlICJib29sZWFuIjoKKyAgICAgICAgY2FzZSAidW5k
ZWZpbmVkIjoKKyAgICAgICAgICAgIHJldHVybiBTdHJpbmcodmFsKTsKKyAgICAgICAgY2FzZSAi
bnVtYmVyIjoKKyAgICAgICAgICAgIC8vIEluIEphdmFTY3JpcHQsIC0wID09PSAwIGFuZCBTdHJp
bmcoLTApID09ICIwIiwgc28gd2UgaGF2ZSB0bworICAgICAgICAgICAgLy8gc3BlY2lhbC1jYXNl
LgorICAgICAgICAgICAgaWYgKHZhbCA9PT0gLTAgJiYgMS92YWwgPT09IC1JbmZpbml0eSkgewor
ICAgICAgICAgICAgICAgIHJldHVybiAiLTAiOworICAgICAgICAgICAgfQorICAgICAgICAgICAg
cmV0dXJuIFN0cmluZyh2YWwpOworICAgICAgICBjYXNlICJvYmplY3QiOgorICAgICAgICAgICAg
aWYgKHZhbCA9PT0gbnVsbCkgeworICAgICAgICAgICAgICAgIHJldHVybiAibnVsbCI7CisgICAg
ICAgICAgICB9CisKKyAgICAgICAgICAgIC8vIFNwZWNpYWwtY2FzZSBOb2RlIG9iamVjdHMsIHNp
bmNlIHRob3NlIGNvbWUgdXAgYSBsb3QgaW4gbXkgdGVzdHMuICBJCisgICAgICAgICAgICAvLyBp
Z25vcmUgbmFtZXNwYWNlcy4KKyAgICAgICAgICAgIGlmIChpc19ub2RlKHZhbCkpIHsKKyAgICAg
ICAgICAgICAgICBzd2l0Y2ggKHZhbC5ub2RlVHlwZSkgeworICAgICAgICAgICAgICAgIGNhc2Ug
Tm9kZS5FTEVNRU5UX05PREU6CisgICAgICAgICAgICAgICAgICAgIHZhciByZXQgPSAiPCIgKyB2
YWwudGFnTmFtZS50b0xvd2VyQ2FzZSgpOworICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBp
ID0gMDsgaSA8IHZhbC5hdHRyaWJ1dGVzLmxlbmd0aDsgaSsrKSB7CisgICAgICAgICAgICAgICAg
ICAgICAgICByZXQgKz0gIiAiICsgdmFsLmF0dHJpYnV0ZXNbaV0ubmFtZSArICc9IicgKyB2YWwu
YXR0cmlidXRlc1tpXS52YWx1ZSArICciJzsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgICAgICAgICByZXQgKz0gIj4iICsgdmFsLmlubmVySFRNTCArICI8LyIgKyB2YWwudGFn
TmFtZS50b0xvd2VyQ2FzZSgpICsgIj4iOworICAgICAgICAgICAgICAgICAgICByZXR1cm4gIkVs
ZW1lbnQgbm9kZSAiICsgdHJ1bmNhdGUocmV0LCA2MCk7CisgICAgICAgICAgICAgICAgY2FzZSBO
b2RlLlRFWFRfTk9ERToKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuICdUZXh0IG5vZGUgIicg
KyB0cnVuY2F0ZSh2YWwuZGF0YSwgNjApICsgJyInOworICAgICAgICAgICAgICAgIGNhc2UgTm9k
ZS5QUk9DRVNTSU5HX0lOU1RSVUNUSU9OX05PREU6CisgICAgICAgICAgICAgICAgICAgIHJldHVy
biAiUHJvY2Vzc2luZ0luc3RydWN0aW9uIG5vZGUgd2l0aCB0YXJnZXQgIiArIGZvcm1hdF92YWx1
ZSh0cnVuY2F0ZSh2YWwudGFyZ2V0LCA2MCkpICsgIiBhbmQgZGF0YSAiICsgZm9ybWF0X3ZhbHVl
KHRydW5jYXRlKHZhbC5kYXRhLCA2MCkpOworICAgICAgICAgICAgICAgIGNhc2UgTm9kZS5DT01N
RU5UX05PREU6CisgICAgICAgICAgICAgICAgICAgIHJldHVybiAiQ29tbWVudCBub2RlIDwhLS0i
ICsgdHJ1bmNhdGUodmFsLmRhdGEsIDYwKSArICItLT4iOworICAgICAgICAgICAgICAgIGNhc2Ug
Tm9kZS5ET0NVTUVOVF9OT0RFOgorICAgICAgICAgICAgICAgICAgICByZXR1cm4gIkRvY3VtZW50
IG5vZGUgd2l0aCAiICsgdmFsLmNoaWxkTm9kZXMubGVuZ3RoICsgKHZhbC5jaGlsZE5vZGVzLmxl
bmd0aCA9PSAxID8gIiBjaGlsZCIgOiAiIGNoaWxkcmVuIik7CisgICAgICAgICAgICAgICAgY2Fz
ZSBOb2RlLkRPQ1VNRU5UX1RZUEVfTk9ERToKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuICJE
b2N1bWVudFR5cGUgbm9kZSI7CisgICAgICAgICAgICAgICAgY2FzZSBOb2RlLkRPQ1VNRU5UX0ZS
QUdNRU5UX05PREU6CisgICAgICAgICAgICAgICAgICAgIHJldHVybiAiRG9jdW1lbnRGcmFnbWVu
dCBub2RlIHdpdGggIiArIHZhbC5jaGlsZE5vZGVzLmxlbmd0aCArICh2YWwuY2hpbGROb2Rlcy5s
ZW5ndGggPT0gMSA/ICIgY2hpbGQiIDogIiBjaGlsZHJlbiIpOworICAgICAgICAgICAgICAgIGRl
ZmF1bHQ6CisgICAgICAgICAgICAgICAgICAgIHJldHVybiAiTm9kZSBvYmplY3Qgb2YgdW5rbm93
biB0eXBlIjsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAg
IC8vIEZhbGwgdGhyb3VnaCB0byBkZWZhdWx0CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAg
ICByZXR1cm4gdHlwZW9mIHZhbCArICcgIicgKyB0cnVuY2F0ZShTdHJpbmcodmFsKSwgNjApICsg
JyInOworICAgICAgICB9CisgICAgfQorICAgIGV4cG9zZShmb3JtYXRfdmFsdWUsICJmb3JtYXRf
dmFsdWUiKTsKKworICAgIC8qCisgICAgICogQXNzZXJ0aW9ucworICAgICAqLworCisgICAgZnVu
Y3Rpb24gYXNzZXJ0X3RydWUoYWN0dWFsLCBkZXNjcmlwdGlvbikKKyAgICB7CisgICAgICAgIGFz
c2VydChhY3R1YWwgPT09IHRydWUsICJhc3NlcnRfdHJ1ZSIsIGRlc2NyaXB0aW9uLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAiZXhwZWN0ZWQgdHJ1ZSBnb3QgJHthY3R1YWx9Iiwg
e2FjdHVhbDphY3R1YWx9KTsKKyAgICB9OworICAgIGV4cG9zZShhc3NlcnRfdHJ1ZSwgImFzc2Vy
dF90cnVlIik7CisKKyAgICBmdW5jdGlvbiBhc3NlcnRfZmFsc2UoYWN0dWFsLCBkZXNjcmlwdGlv
bikKKyAgICB7CisgICAgICAgIGFzc2VydChhY3R1YWwgPT09IGZhbHNlLCAiYXNzZXJ0X2ZhbHNl
IiwgZGVzY3JpcHRpb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZXhwZWN0
ZWQgZmFsc2UgZ290ICR7YWN0dWFsfSIsIHthY3R1YWw6YWN0dWFsfSk7CisgICAgfTsKKyAgICBl
eHBvc2UoYXNzZXJ0X2ZhbHNlLCAiYXNzZXJ0X2ZhbHNlIik7CisKKyAgICBmdW5jdGlvbiBzYW1l
X3ZhbHVlKHgsIHkpIHsKKyAgICAgICAgaWYgKHkgIT09IHkpIHsKKyAgICAgICAgICAgIC8vTmFO
IGNhc2UKKyAgICAgICAgICAgIHJldHVybiB4ICE9PSB4OworICAgICAgICB9CisgICAgICAgIGlm
ICh4ID09PSAwICYmIHkgPT09IDApIHsKKyAgICAgICAgICAgIC8vRGlzdGluZ3Vpc2ggKzAgYW5k
IC0wCisgICAgICAgICAgICByZXR1cm4gMS94ID09PSAxL3k7CisgICAgICAgIH0KKyAgICAgICAg
cmV0dXJuIHggPT09IHk7CisgICAgfQorCisgICAgZnVuY3Rpb24gYXNzZXJ0X2VxdWFscyhhY3R1
YWwsIGV4cGVjdGVkLCBkZXNjcmlwdGlvbikKKyAgICB7CisgICAgICAgICAvKgorICAgICAgICAg
ICogVGVzdCBpZiB0d28gcHJpbWl0aXZlcyBhcmUgZXF1YWwgb3IgdHdvIG9iamVjdHMKKyAgICAg
ICAgICAqIGFyZSB0aGUgc2FtZSBvYmplY3QKKyAgICAgICAgICAqLworICAgICAgICBpZiAodHlw
ZW9mIGFjdHVhbCAhPSB0eXBlb2YgZXhwZWN0ZWQpIHsKKyAgICAgICAgICAgIGFzc2VydChmYWxz
ZSwgImFzc2VydF9lcXVhbHMiLCBkZXNjcmlwdGlvbiwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgImV4cGVjdGVkICgiICsgdHlwZW9mIGV4cGVjdGVkICsgIikgJHtleHBlY3RlZH0gYnV0IGdv
dCAoIiArIHR5cGVvZiBhY3R1YWwgKyAiKSAke2FjdHVhbH0iLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICB7ZXhwZWN0ZWQ6ZXhwZWN0ZWQsIGFjdHVhbDphY3R1YWx9KTsKKyAgICAgICAgICAg
IHJldHVybjsKKyAgICAgICAgfQorICAgICAgICBhc3NlcnQoc2FtZV92YWx1ZShhY3R1YWwsIGV4
cGVjdGVkKSwgImFzc2VydF9lcXVhbHMiLCBkZXNjcmlwdGlvbiwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICJleHBlY3RlZCAke2V4cGVjdGVkfSBidXQgZ290
ICR7YWN0dWFsfSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB7ZXhwZWN0ZWQ6ZXhwZWN0ZWQsIGFjdHVhbDphY3R1YWx9KTsKKyAgICB9OworICAgIGV4cG9z
ZShhc3NlcnRfZXF1YWxzLCAiYXNzZXJ0X2VxdWFscyIpOworCisgICAgZnVuY3Rpb24gYXNzZXJ0
X25vdF9lcXVhbHMoYWN0dWFsLCBleHBlY3RlZCwgZGVzY3JpcHRpb24pCisgICAgeworICAgICAg
ICAgLyoKKyAgICAgICAgICAqIFRlc3QgaWYgdHdvIHByaW1pdGl2ZXMgYXJlIHVuZXF1YWwgb3Ig
dHdvIG9iamVjdHMKKyAgICAgICAgICAqIGFyZSBkaWZmZXJlbnQgb2JqZWN0cworICAgICAgICAg
ICovCisgICAgICAgIGFzc2VydCghc2FtZV92YWx1ZShhY3R1YWwsIGV4cGVjdGVkKSwgImFzc2Vy
dF9ub3RfZXF1YWxzIiwgZGVzY3JpcHRpb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgImdvdCBkaXNhbGxvd2VkIHZhbHVlICR7YWN0dWFsfSIsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge2FjdHVhbDphY3R1YWx9
KTsKKyAgICB9OworICAgIGV4cG9zZShhc3NlcnRfbm90X2VxdWFscywgImFzc2VydF9ub3RfZXF1
YWxzIik7CisKKyAgICBmdW5jdGlvbiBhc3NlcnRfaW5fYXJyYXkoYWN0dWFsLCBleHBlY3RlZCwg
ZGVzY3JpcHRpb24pCisgICAgeworICAgICAgICBhc3NlcnQoZXhwZWN0ZWQuaW5kZXhPZihhY3R1
YWwpICE9IC0xLCAiYXNzZXJ0X2luX2FycmF5IiwgZGVzY3JpcHRpb24sCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ2YWx1ZSAke2FjdHVhbH0gbm90IGlu
IGFycmF5ICR7ZXhwZWN0ZWR9IiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAge2FjdHVhbDphY3R1YWwsIGV4cGVjdGVkOmV4cGVjdGVkfSk7CisgICAgfQor
ICAgIGV4cG9zZShhc3NlcnRfaW5fYXJyYXksICJhc3NlcnRfaW5fYXJyYXkiKTsKKworICAgIGZ1
bmN0aW9uIGFzc2VydF9vYmplY3RfZXF1YWxzKGFjdHVhbCwgZXhwZWN0ZWQsIGRlc2NyaXB0aW9u
KQorICAgIHsKKyAgICAgICAgIC8vVGhpcyBuZWVkcyB0byBiZSBpbXByb3ZlZCBhIGdyZWF0IGRl
YWwKKyAgICAgICAgIGZ1bmN0aW9uIGNoZWNrX2VxdWFsKGFjdHVhbCwgZXhwZWN0ZWQsIHN0YWNr
KQorICAgICAgICAgeworICAgICAgICAgICAgIHN0YWNrLnB1c2goYWN0dWFsKTsKKworICAgICAg
ICAgICAgIHZhciBwOworICAgICAgICAgICAgIGZvciAocCBpbiBhY3R1YWwpIHsKKyAgICAgICAg
ICAgICAgICAgYXNzZXJ0KGV4cGVjdGVkLmhhc093blByb3BlcnR5KHApLCAiYXNzZXJ0X29iamVj
dF9lcXVhbHMiLCBkZXNjcmlwdGlvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAidW5leHBlY3RlZCBwcm9wZXJ0eSAke3B9Iiwge3A6cH0pOwor
CisgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgYWN0dWFsW3BdID09PSAib2JqZWN0IiAmJiBh
Y3R1YWxbcF0gIT09IG51bGwpIHsKKyAgICAgICAgICAgICAgICAgICAgIGlmIChzdGFjay5pbmRl
eE9mKGFjdHVhbFtwXSkgPT09IC0xKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgY2hlY2tf
ZXF1YWwoYWN0dWFsW3BdLCBleHBlY3RlZFtwXSwgc3RhY2spOworICAgICAgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICAgYXNz
ZXJ0KHNhbWVfdmFsdWUoYWN0dWFsW3BdLCBleHBlY3RlZFtwXSksICJhc3NlcnRfb2JqZWN0X2Vx
dWFscyIsIGRlc2NyaXB0aW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICJwcm9wZXJ0eSAke3B9IGV4cGVjdGVkICR7ZXhwZWN0ZWR9IGdv
dCAke2FjdHVhbH0iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHtwOnAsIGV4cGVjdGVkOmV4cGVjdGVkLCBhY3R1YWw6YWN0dWFsfSk7Cisg
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICB9CisgICAgICAgICAgICAgZm9yIChwIGlu
IGV4cGVjdGVkKSB7CisgICAgICAgICAgICAgICAgIGFzc2VydChhY3R1YWwuaGFzT3duUHJvcGVy
dHkocCksCisgICAgICAgICAgICAgICAgICAgICAgICAiYXNzZXJ0X29iamVjdF9lcXVhbHMiLCBk
ZXNjcmlwdGlvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICJleHBlY3RlZCBwcm9wZXJ0eSAk
e3B9IG1pc3NpbmciLCB7cDpwfSk7CisgICAgICAgICAgICAgfQorICAgICAgICAgICAgIHN0YWNr
LnBvcCgpOworICAgICAgICAgfQorICAgICAgICAgY2hlY2tfZXF1YWwoYWN0dWFsLCBleHBlY3Rl
ZCwgW10pOworICAgIH07CisgICAgZXhwb3NlKGFzc2VydF9vYmplY3RfZXF1YWxzLCAiYXNzZXJ0
X29iamVjdF9lcXVhbHMiKTsKKworICAgIGZ1bmN0aW9uIGFzc2VydF9hcnJheV9lcXVhbHMoYWN0
dWFsLCBleHBlY3RlZCwgZGVzY3JpcHRpb24pCisgICAgeworICAgICAgICBhc3NlcnQoYWN0dWFs
Lmxlbmd0aCA9PT0gZXhwZWN0ZWQubGVuZ3RoLAorICAgICAgICAgICAgICAgImFzc2VydF9hcnJh
eV9lcXVhbHMiLCBkZXNjcmlwdGlvbiwKKyAgICAgICAgICAgICAgICJsZW5ndGhzIGRpZmZlciwg
ZXhwZWN0ZWQgJHtleHBlY3RlZH0gZ290ICR7YWN0dWFsfSIsCisgICAgICAgICAgICAgICB7ZXhw
ZWN0ZWQ6ZXhwZWN0ZWQubGVuZ3RoLCBhY3R1YWw6YWN0dWFsLmxlbmd0aH0pOworCisgICAgICAg
IGZvciAodmFyIGkgPSAwOyBpIDwgYWN0dWFsLmxlbmd0aDsgaSsrKSB7CisgICAgICAgICAgICBh
c3NlcnQoYWN0dWFsLmhhc093blByb3BlcnR5KGkpID09PSBleHBlY3RlZC5oYXNPd25Qcm9wZXJ0
eShpKSwKKyAgICAgICAgICAgICAgICAgICAiYXNzZXJ0X2FycmF5X2VxdWFscyIsIGRlc2NyaXB0
aW9uLAorICAgICAgICAgICAgICAgICAgICJwcm9wZXJ0eSAke2l9LCBwcm9wZXJ0eSBleHBlY3Rl
ZCB0byBiZSAkZXhwZWN0ZWQgYnV0IHdhcyAkYWN0dWFsIiwKKyAgICAgICAgICAgICAgICAgICB7
aTppLCBleHBlY3RlZDpleHBlY3RlZC5oYXNPd25Qcm9wZXJ0eShpKSA/ICJwcmVzZW50IiA6ICJt
aXNzaW5nIiwKKyAgICAgICAgICAgICAgICAgICBhY3R1YWw6YWN0dWFsLmhhc093blByb3BlcnR5
KGkpID8gInByZXNlbnQiIDogIm1pc3NpbmcifSk7CisgICAgICAgICAgICBhc3NlcnQoc2FtZV92
YWx1ZShleHBlY3RlZFtpXSwgYWN0dWFsW2ldKSwKKyAgICAgICAgICAgICAgICAgICAiYXNzZXJ0
X2FycmF5X2VxdWFscyIsIGRlc2NyaXB0aW9uLAorICAgICAgICAgICAgICAgICAgICJwcm9wZXJ0
eSAke2l9LCBleHBlY3RlZCAke2V4cGVjdGVkfSBidXQgZ290ICR7YWN0dWFsfSIsCisgICAgICAg
ICAgICAgICAgICAge2k6aSwgZXhwZWN0ZWQ6ZXhwZWN0ZWRbaV0sIGFjdHVhbDphY3R1YWxbaV19
KTsKKyAgICAgICAgfQorICAgIH0KKyAgICBleHBvc2UoYXNzZXJ0X2FycmF5X2VxdWFscywgImFz
c2VydF9hcnJheV9lcXVhbHMiKTsKKworICAgIGZ1bmN0aW9uIGFzc2VydF9hcHByb3hfZXF1YWxz
KGFjdHVhbCwgZXhwZWN0ZWQsIGVwc2lsb24sIGRlc2NyaXB0aW9uKQorICAgIHsKKyAgICAgICAg
LyoKKyAgICAgICAgICogVGVzdCBpZiB0d28gcHJpbWl0aXZlIG51bWJlcnMgYXJlIGVxdWFsIHdp
dGhpbmcgKy8tIGVwc2lsb24KKyAgICAgICAgICovCisgICAgICAgIGFzc2VydCh0eXBlb2YgYWN0
dWFsID09PSAibnVtYmVyIiwKKyAgICAgICAgICAgICAgICJhc3NlcnRfYXBwcm94X2VxdWFscyIs
IGRlc2NyaXB0aW9uLAorICAgICAgICAgICAgICAgImV4cGVjdGVkIGEgbnVtYmVyIGJ1dCBnb3Qg
YSAke3R5cGVfYWN0dWFsfSIsCisgICAgICAgICAgICAgICB7dHlwZV9hY3R1YWw6dHlwZW9mIGFj
dHVhbH0pOworCisgICAgICAgIGFzc2VydChNYXRoLmFicyhhY3R1YWwgLSBleHBlY3RlZCkgPD0g
ZXBzaWxvbiwKKyAgICAgICAgICAgICAgICJhc3NlcnRfYXBwcm94X2VxdWFscyIsIGRlc2NyaXB0
aW9uLAorICAgICAgICAgICAgICAgImV4cGVjdGVkICR7ZXhwZWN0ZWR9ICsvLSAke2Vwc2lsb259
IGJ1dCBnb3QgJHthY3R1YWx9IiwKKyAgICAgICAgICAgICAgIHtleHBlY3RlZDpleHBlY3RlZCwg
YWN0dWFsOmFjdHVhbCwgZXBzaWxvbjplcHNpbG9ufSk7CisgICAgfTsKKyAgICBleHBvc2UoYXNz
ZXJ0X2FwcHJveF9lcXVhbHMsICJhc3NlcnRfYXBwcm94X2VxdWFscyIpOworCisgICAgZnVuY3Rp
b24gYXNzZXJ0X2xlc3NfdGhhbihhY3R1YWwsIGV4cGVjdGVkLCBkZXNjcmlwdGlvbikKKyAgICB7
CisgICAgICAgIC8qCisgICAgICAgICAqIFRlc3QgaWYgYSBwcmltaXRpdmUgbnVtYmVyIGlzIGxl
c3MgdGhhbiBhbm90aGVyCisgICAgICAgICAqLworICAgICAgICBhc3NlcnQodHlwZW9mIGFjdHVh
bCA9PT0gIm51bWJlciIsCisgICAgICAgICAgICAgICAiYXNzZXJ0X2xlc3NfdGhhbiIsIGRlc2Ny
aXB0aW9uLAorICAgICAgICAgICAgICAgImV4cGVjdGVkIGEgbnVtYmVyIGJ1dCBnb3QgYSAke3R5
cGVfYWN0dWFsfSIsCisgICAgICAgICAgICAgICB7dHlwZV9hY3R1YWw6dHlwZW9mIGFjdHVhbH0p
OworCisgICAgICAgIGFzc2VydChhY3R1YWwgPCBleHBlY3RlZCwKKyAgICAgICAgICAgICAgICJh
c3NlcnRfbGVzc190aGFuIiwgZGVzY3JpcHRpb24sCisgICAgICAgICAgICAgICAiZXhwZWN0ZWQg
YSBudW1iZXIgbGVzcyB0aGFuICR7ZXhwZWN0ZWR9IGJ1dCBnb3QgJHthY3R1YWx9IiwKKyAgICAg
ICAgICAgICAgIHtleHBlY3RlZDpleHBlY3RlZCwgYWN0dWFsOmFjdHVhbH0pOworICAgIH07Cisg
ICAgZXhwb3NlKGFzc2VydF9sZXNzX3RoYW4sICJhc3NlcnRfbGVzc190aGFuIik7CisKKyAgICBm
dW5jdGlvbiBhc3NlcnRfZ3JlYXRlcl90aGFuKGFjdHVhbCwgZXhwZWN0ZWQsIGRlc2NyaXB0aW9u
KQorICAgIHsKKyAgICAgICAgLyoKKyAgICAgICAgICogVGVzdCBpZiBhIHByaW1pdGl2ZSBudW1i
ZXIgaXMgZ3JlYXRlciB0aGFuIGFub3RoZXIKKyAgICAgICAgICovCisgICAgICAgIGFzc2VydCh0
eXBlb2YgYWN0dWFsID09PSAibnVtYmVyIiwKKyAgICAgICAgICAgICAgICJhc3NlcnRfZ3JlYXRl
cl90aGFuIiwgZGVzY3JpcHRpb24sCisgICAgICAgICAgICAgICAiZXhwZWN0ZWQgYSBudW1iZXIg
YnV0IGdvdCBhICR7dHlwZV9hY3R1YWx9IiwKKyAgICAgICAgICAgICAgIHt0eXBlX2FjdHVhbDp0
eXBlb2YgYWN0dWFsfSk7CisKKyAgICAgICAgYXNzZXJ0KGFjdHVhbCA+IGV4cGVjdGVkLAorICAg
ICAgICAgICAgICAgImFzc2VydF9ncmVhdGVyX3RoYW4iLCBkZXNjcmlwdGlvbiwKKyAgICAgICAg
ICAgICAgICJleHBlY3RlZCBhIG51bWJlciBncmVhdGVyIHRoYW4gJHtleHBlY3RlZH0gYnV0IGdv
dCAke2FjdHVhbH0iLAorICAgICAgICAgICAgICAge2V4cGVjdGVkOmV4cGVjdGVkLCBhY3R1YWw6
YWN0dWFsfSk7CisgICAgfTsKKyAgICBleHBvc2UoYXNzZXJ0X2dyZWF0ZXJfdGhhbiwgImFzc2Vy
dF9ncmVhdGVyX3RoYW4iKTsKKworICAgIGZ1bmN0aW9uIGFzc2VydF9sZXNzX3RoYW5fZXF1YWwo
YWN0dWFsLCBleHBlY3RlZCwgZGVzY3JpcHRpb24pCisgICAgeworICAgICAgICAvKgorICAgICAg
ICAgKiBUZXN0IGlmIGEgcHJpbWl0aXZlIG51bWJlciBpcyBsZXNzIHRoYW4gb3IgZXF1YWwgdG8g
YW5vdGhlcgorICAgICAgICAgKi8KKyAgICAgICAgYXNzZXJ0KHR5cGVvZiBhY3R1YWwgPT09ICJu
dW1iZXIiLAorICAgICAgICAgICAgICAgImFzc2VydF9sZXNzX3RoYW5fZXF1YWwiLCBkZXNjcmlw
dGlvbiwKKyAgICAgICAgICAgICAgICJleHBlY3RlZCBhIG51bWJlciBidXQgZ290IGEgJHt0eXBl
X2FjdHVhbH0iLAorICAgICAgICAgICAgICAge3R5cGVfYWN0dWFsOnR5cGVvZiBhY3R1YWx9KTsK
KworICAgICAgICBhc3NlcnQoYWN0dWFsIDw9IGV4cGVjdGVkLAorICAgICAgICAgICAgICAgImFz
c2VydF9sZXNzX3RoYW4iLCBkZXNjcmlwdGlvbiwKKyAgICAgICAgICAgICAgICJleHBlY3RlZCBh
IG51bWJlciBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gJHtleHBlY3RlZH0gYnV0IGdvdCAke2FjdHVh
bH0iLAorICAgICAgICAgICAgICAge2V4cGVjdGVkOmV4cGVjdGVkLCBhY3R1YWw6YWN0dWFsfSk7
CisgICAgfTsKKyAgICBleHBvc2UoYXNzZXJ0X2xlc3NfdGhhbl9lcXVhbCwgImFzc2VydF9sZXNz
X3RoYW5fZXF1YWwiKTsKKworICAgIGZ1bmN0aW9uIGFzc2VydF9ncmVhdGVyX3RoYW5fZXF1YWwo
YWN0dWFsLCBleHBlY3RlZCwgZGVzY3JpcHRpb24pCisgICAgeworICAgICAgICAvKgorICAgICAg
ICAgKiBUZXN0IGlmIGEgcHJpbWl0aXZlIG51bWJlciBpcyBncmVhdGVyIHRoYW4gb3IgZXF1YWwg
dG8gYW5vdGhlcgorICAgICAgICAgKi8KKyAgICAgICAgYXNzZXJ0KHR5cGVvZiBhY3R1YWwgPT09
ICJudW1iZXIiLAorICAgICAgICAgICAgICAgImFzc2VydF9ncmVhdGVyX3RoYW5fZXF1YWwiLCBk
ZXNjcmlwdGlvbiwKKyAgICAgICAgICAgICAgICJleHBlY3RlZCBhIG51bWJlciBidXQgZ290IGEg
JHt0eXBlX2FjdHVhbH0iLAorICAgICAgICAgICAgICAge3R5cGVfYWN0dWFsOnR5cGVvZiBhY3R1
YWx9KTsKKworICAgICAgICBhc3NlcnQoYWN0dWFsID49IGV4cGVjdGVkLAorICAgICAgICAgICAg
ICAgImFzc2VydF9ncmVhdGVyX3RoYW5fZXF1YWwiLCBkZXNjcmlwdGlvbiwKKyAgICAgICAgICAg
ICAgICJleHBlY3RlZCBhIG51bWJlciBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gJHtleHBlY3Rl
ZH0gYnV0IGdvdCAke2FjdHVhbH0iLAorICAgICAgICAgICAgICAge2V4cGVjdGVkOmV4cGVjdGVk
LCBhY3R1YWw6YWN0dWFsfSk7CisgICAgfTsKKyAgICBleHBvc2UoYXNzZXJ0X2dyZWF0ZXJfdGhh
bl9lcXVhbCwgImFzc2VydF9ncmVhdGVyX3RoYW5fZXF1YWwiKTsKKworICAgIGZ1bmN0aW9uIGFz
c2VydF9yZWdleHBfbWF0Y2goYWN0dWFsLCBleHBlY3RlZCwgZGVzY3JpcHRpb24pIHsKKyAgICAg
ICAgLyoKKyAgICAgICAgICogVGVzdCBpZiBhIHN0cmluZyAoYWN0dWFsKSBtYXRjaGVzIGEgcmVn
ZXhwIChleHBlY3RlZCkKKyAgICAgICAgICovCisgICAgICAgIGFzc2VydChleHBlY3RlZC50ZXN0
KGFjdHVhbCksCisgICAgICAgICAgICAgICAiYXNzZXJ0X3JlZ2V4cF9tYXRjaCIsIGRlc2NyaXB0
aW9uLAorICAgICAgICAgICAgICAgImV4cGVjdGVkICR7ZXhwZWN0ZWR9IGJ1dCBnb3QgJHthY3R1
YWx9IiwKKyAgICAgICAgICAgICAgIHtleHBlY3RlZDpleHBlY3RlZCwgYWN0dWFsOmFjdHVhbH0p
OworICAgIH0KKyAgICBleHBvc2UoYXNzZXJ0X3JlZ2V4cF9tYXRjaCwgImFzc2VydF9yZWdleHBf
bWF0Y2giKTsKKworICAgIGZ1bmN0aW9uIGFzc2VydF9jbGFzc19zdHJpbmcob2JqZWN0LCBjbGFz
c19zdHJpbmcsIGRlc2NyaXB0aW9uKSB7CisgICAgICAgIGFzc2VydF9lcXVhbHMoe30udG9TdHJp
bmcuY2FsbChvYmplY3QpLCAiW29iamVjdCAiICsgY2xhc3Nfc3RyaW5nICsgIl0iLAorICAgICAg
ICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uKTsKKyAgICB9CisgICAgZXhwb3NlKGFzc2VydF9j
bGFzc19zdHJpbmcsICJhc3NlcnRfY2xhc3Nfc3RyaW5nIik7CisKKworICAgIGZ1bmN0aW9uIF9h
c3NlcnRfb3duX3Byb3BlcnR5KG5hbWUpIHsKKyAgICAgICAgcmV0dXJuIGZ1bmN0aW9uKG9iamVj
dCwgcHJvcGVydHlfbmFtZSwgZGVzY3JpcHRpb24pCisgICAgICAgIHsKKyAgICAgICAgICAgIGFz
c2VydChvYmplY3QuaGFzT3duUHJvcGVydHkocHJvcGVydHlfbmFtZSksCisgICAgICAgICAgICAg
ICAgICAgbmFtZSwgZGVzY3JpcHRpb24sCisgICAgICAgICAgICAgICAgICAgImV4cGVjdGVkIHBy
b3BlcnR5ICR7cH0gbWlzc2luZyIsIHtwOnByb3BlcnR5X25hbWV9KTsKKyAgICAgICAgfTsKKyAg
ICB9CisgICAgZXhwb3NlKF9hc3NlcnRfb3duX3Byb3BlcnR5KCJhc3NlcnRfZXhpc3RzIiksICJh
c3NlcnRfZXhpc3RzIik7CisgICAgZXhwb3NlKF9hc3NlcnRfb3duX3Byb3BlcnR5KCJhc3NlcnRf
b3duX3Byb3BlcnR5IiksICJhc3NlcnRfb3duX3Byb3BlcnR5Iik7CisKKyAgICBmdW5jdGlvbiBh
c3NlcnRfbm90X2V4aXN0cyhvYmplY3QsIHByb3BlcnR5X25hbWUsIGRlc2NyaXB0aW9uKQorICAg
IHsKKyAgICAgICAgYXNzZXJ0KCFvYmplY3QuaGFzT3duUHJvcGVydHkocHJvcGVydHlfbmFtZSks
CisgICAgICAgICAgICAgICAiYXNzZXJ0X25vdF9leGlzdHMiLCBkZXNjcmlwdGlvbiwKKyAgICAg
ICAgICAgICAgICJ1bmV4cGVjdGVkIHByb3BlcnR5ICR7cH0gZm91bmQiLCB7cDpwcm9wZXJ0eV9u
YW1lfSk7CisgICAgfTsKKyAgICBleHBvc2UoYXNzZXJ0X25vdF9leGlzdHMsICJhc3NlcnRfbm90
X2V4aXN0cyIpOworCisgICAgZnVuY3Rpb24gX2Fzc2VydF9pbmhlcml0cyhuYW1lKSB7CisgICAg
ICAgIHJldHVybiBmdW5jdGlvbiAob2JqZWN0LCBwcm9wZXJ0eV9uYW1lLCBkZXNjcmlwdGlvbikK
KyAgICAgICAgeworICAgICAgICAgICAgYXNzZXJ0KHR5cGVvZiBvYmplY3QgPT09ICJvYmplY3Qi
LAorICAgICAgICAgICAgICAgICAgIG5hbWUsIGRlc2NyaXB0aW9uLAorICAgICAgICAgICAgICAg
ICAgICJwcm92aWRlZCB2YWx1ZSBpcyBub3QgYW4gb2JqZWN0Iik7CisKKyAgICAgICAgICAgIGFz
c2VydCgiaGFzT3duUHJvcGVydHkiIGluIG9iamVjdCwKKyAgICAgICAgICAgICAgICAgICBuYW1l
LCBkZXNjcmlwdGlvbiwKKyAgICAgICAgICAgICAgICAgICAicHJvdmlkZWQgdmFsdWUgaXMgYW4g
b2JqZWN0IGJ1dCBoYXMgbm8gaGFzT3duUHJvcGVydHkgbWV0aG9kIik7CisKKyAgICAgICAgICAg
IGFzc2VydCghb2JqZWN0Lmhhc093blByb3BlcnR5KHByb3BlcnR5X25hbWUpLAorICAgICAgICAg
ICAgICAgICAgIG5hbWUsIGRlc2NyaXB0aW9uLAorICAgICAgICAgICAgICAgICAgICJwcm9wZXJ0
eSAke3B9IGZvdW5kIG9uIG9iamVjdCBleHBlY3RlZCBpbiBwcm90b3R5cGUgY2hhaW4iLAorICAg
ICAgICAgICAgICAgICAgIHtwOnByb3BlcnR5X25hbWV9KTsKKworICAgICAgICAgICAgYXNzZXJ0
KHByb3BlcnR5X25hbWUgaW4gb2JqZWN0LAorICAgICAgICAgICAgICAgICAgIG5hbWUsIGRlc2Ny
aXB0aW9uLAorICAgICAgICAgICAgICAgICAgICJwcm9wZXJ0eSAke3B9IG5vdCBmb3VuZCBpbiBw
cm90b3R5cGUgY2hhaW4iLAorICAgICAgICAgICAgICAgICAgIHtwOnByb3BlcnR5X25hbWV9KTsK
KyAgICAgICAgfTsKKyAgICB9CisgICAgZXhwb3NlKF9hc3NlcnRfaW5oZXJpdHMoImFzc2VydF9p
bmhlcml0cyIpLCAiYXNzZXJ0X2luaGVyaXRzIik7CisgICAgZXhwb3NlKF9hc3NlcnRfaW5oZXJp
dHMoImFzc2VydF9pZGxfYXR0cmlidXRlIiksICJhc3NlcnRfaWRsX2F0dHJpYnV0ZSIpOworCisg
ICAgZnVuY3Rpb24gYXNzZXJ0X3JlYWRvbmx5KG9iamVjdCwgcHJvcGVydHlfbmFtZSwgZGVzY3Jp
cHRpb24pCisgICAgeworICAgICAgICAgdmFyIGluaXRpYWxfdmFsdWUgPSBvYmplY3RbcHJvcGVy
dHlfbmFtZV07CisgICAgICAgICB0cnkgeworICAgICAgICAgICAgIC8vTm90ZSB0aGF0IHRoaXMg
Y2FuIGhhdmUgc2lkZSBlZmZlY3RzIGluIHRoZSBjYXNlIHdoZXJlCisgICAgICAgICAgICAgLy90
aGUgcHJvcGVydHkgaGFzIFB1dEZvcndhcmRzCisgICAgICAgICAgICAgb2JqZWN0W3Byb3BlcnR5
X25hbWVdID0gaW5pdGlhbF92YWx1ZSArICJhIjsgLy9YWFggdXNlIHNvbWUgb3RoZXIgdmFsdWUg
aGVyZT8KKyAgICAgICAgICAgICBhc3NlcnQoc2FtZV92YWx1ZShvYmplY3RbcHJvcGVydHlfbmFt
ZV0sIGluaXRpYWxfdmFsdWUpLAorICAgICAgICAgICAgICAgICAgICAiYXNzZXJ0X3JlYWRvbmx5
IiwgZGVzY3JpcHRpb24sCisgICAgICAgICAgICAgICAgICAgICJjaGFuZ2luZyBwcm9wZXJ0eSAk
e3B9IHN1Y2NlZWRlZCIsCisgICAgICAgICAgICAgICAgICAgIHtwOnByb3BlcnR5X25hbWV9KTsK
KyAgICAgICAgIH0gZmluYWxseSB7CisgICAgICAgICAgICAgb2JqZWN0W3Byb3BlcnR5X25hbWVd
ID0gaW5pdGlhbF92YWx1ZTsKKyAgICAgICAgIH0KKyAgICB9OworICAgIGV4cG9zZShhc3NlcnRf
cmVhZG9ubHksICJhc3NlcnRfcmVhZG9ubHkiKTsKKworICAgIGZ1bmN0aW9uIGFzc2VydF90aHJv
d3MoY29kZSwgZnVuYywgZGVzY3JpcHRpb24pCisgICAgeworICAgICAgICB0cnkgeworICAgICAg
ICAgICAgZnVuYy5jYWxsKHRoaXMpOworICAgICAgICAgICAgYXNzZXJ0KGZhbHNlLCAiYXNzZXJ0
X3Rocm93cyIsIGRlc2NyaXB0aW9uLAorICAgICAgICAgICAgICAgICAgICIke2Z1bmN9IGRpZCBu
b3QgdGhyb3ciLCB7ZnVuYzpmdW5jfSk7CisgICAgICAgIH0gY2F0Y2ggKGUpIHsKKyAgICAgICAg
ICAgIGlmIChlIGluc3RhbmNlb2YgQXNzZXJ0aW9uRXJyb3IpIHsKKyAgICAgICAgICAgICAgICB0
aHJvdyBlOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKGNvZGUgPT09IG51bGwpIHsK
KyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAo
dHlwZW9mIGNvZGUgPT09ICJvYmplY3QiKSB7CisgICAgICAgICAgICAgICAgYXNzZXJ0KHR5cGVv
ZiBlID09ICJvYmplY3QiICYmICJuYW1lIiBpbiBlICYmIGUubmFtZSA9PSBjb2RlLm5hbWUsCisg
ICAgICAgICAgICAgICAgICAgICAgICJhc3NlcnRfdGhyb3dzIiwgZGVzY3JpcHRpb24sCisgICAg
ICAgICAgICAgICAgICAgICAgICIke2Z1bmN9IHRocmV3ICR7YWN0dWFsfSAoJHthY3R1YWxfbmFt
ZX0pIGV4cGVjdGVkICR7ZXhwZWN0ZWR9ICgke2V4cGVjdGVkX25hbWV9KSIsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB7ZnVuYzpmdW5jLCBhY3R1YWw6ZSwgYWN0dWFsX25h
bWU6ZS5uYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4cGVjdGVk
OmNvZGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhwZWN0ZWRfbmFt
ZTpjb2RlLm5hbWV9KTsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisK
KyAgICAgICAgICAgIHZhciBjb2RlX25hbWVfbWFwID0geworICAgICAgICAgICAgICAgIElOREVY
X1NJWkVfRVJSOiAnSW5kZXhTaXplRXJyb3InLAorICAgICAgICAgICAgICAgIEhJRVJBUkNIWV9S
RVFVRVNUX0VSUjogJ0hpZXJhcmNoeVJlcXVlc3RFcnJvcicsCisgICAgICAgICAgICAgICAgV1JP
TkdfRE9DVU1FTlRfRVJSOiAnV3JvbmdEb2N1bWVudEVycm9yJywKKyAgICAgICAgICAgICAgICBJ
TlZBTElEX0NIQVJBQ1RFUl9FUlI6ICdJbnZhbGlkQ2hhcmFjdGVyRXJyb3InLAorICAgICAgICAg
ICAgICAgIE5PX01PRElGSUNBVElPTl9BTExPV0VEX0VSUjogJ05vTW9kaWZpY2F0aW9uQWxsb3dl
ZEVycm9yJywKKyAgICAgICAgICAgICAgICBOT1RfRk9VTkRfRVJSOiAnTm90Rm91bmRFcnJvcics
CisgICAgICAgICAgICAgICAgTk9UX1NVUFBPUlRFRF9FUlI6ICdOb3RTdXBwb3J0ZWRFcnJvcics
CisgICAgICAgICAgICAgICAgSU5WQUxJRF9TVEFURV9FUlI6ICdJbnZhbGlkU3RhdGVFcnJvcics
CisgICAgICAgICAgICAgICAgU1lOVEFYX0VSUjogJ1N5bnRheEVycm9yJywKKyAgICAgICAgICAg
ICAgICBJTlZBTElEX01PRElGSUNBVElPTl9FUlI6ICdJbnZhbGlkTW9kaWZpY2F0aW9uRXJyb3In
LAorICAgICAgICAgICAgICAgIE5BTUVTUEFDRV9FUlI6ICdOYW1lc3BhY2VFcnJvcicsCisgICAg
ICAgICAgICAgICAgSU5WQUxJRF9BQ0NFU1NfRVJSOiAnSW52YWxpZEFjY2Vzc0Vycm9yJywKKyAg
ICAgICAgICAgICAgICBUWVBFX01JU01BVENIX0VSUjogJ1R5cGVNaXNtYXRjaEVycm9yJywKKyAg
ICAgICAgICAgICAgICBTRUNVUklUWV9FUlI6ICdTZWN1cml0eUVycm9yJywKKyAgICAgICAgICAg
ICAgICBORVRXT1JLX0VSUjogJ05ldHdvcmtFcnJvcicsCisgICAgICAgICAgICAgICAgQUJPUlRf
RVJSOiAnQWJvcnRFcnJvcicsCisgICAgICAgICAgICAgICAgVVJMX01JU01BVENIX0VSUjogJ1VS
TE1pc21hdGNoRXJyb3InLAorICAgICAgICAgICAgICAgIFFVT1RBX0VYQ0VFREVEX0VSUjogJ1F1
b3RhRXhjZWVkZWRFcnJvcicsCisgICAgICAgICAgICAgICAgVElNRU9VVF9FUlI6ICdUaW1lb3V0
RXJyb3InLAorICAgICAgICAgICAgICAgIElOVkFMSURfTk9ERV9UWVBFX0VSUjogJ0ludmFsaWRO
b2RlVHlwZUVycm9yJywKKyAgICAgICAgICAgICAgICBEQVRBX0NMT05FX0VSUjogJ0RhdGFDbG9u
ZUVycm9yJworICAgICAgICAgICAgfTsKKworICAgICAgICAgICAgdmFyIG5hbWUgPSBjb2RlIGlu
IGNvZGVfbmFtZV9tYXAgPyBjb2RlX25hbWVfbWFwW2NvZGVdIDogY29kZTsKKworICAgICAgICAg
ICAgdmFyIG5hbWVfY29kZV9tYXAgPSB7CisgICAgICAgICAgICAgICAgSW5kZXhTaXplRXJyb3I6
IDEsCisgICAgICAgICAgICAgICAgSGllcmFyY2h5UmVxdWVzdEVycm9yOiAzLAorICAgICAgICAg
ICAgICAgIFdyb25nRG9jdW1lbnRFcnJvcjogNCwKKyAgICAgICAgICAgICAgICBJbnZhbGlkQ2hh
cmFjdGVyRXJyb3I6IDUsCisgICAgICAgICAgICAgICAgTm9Nb2RpZmljYXRpb25BbGxvd2VkRXJy
b3I6IDcsCisgICAgICAgICAgICAgICAgTm90Rm91bmRFcnJvcjogOCwKKyAgICAgICAgICAgICAg
ICBOb3RTdXBwb3J0ZWRFcnJvcjogOSwKKyAgICAgICAgICAgICAgICBJbnZhbGlkU3RhdGVFcnJv
cjogMTEsCisgICAgICAgICAgICAgICAgU3ludGF4RXJyb3I6IDEyLAorICAgICAgICAgICAgICAg
IEludmFsaWRNb2RpZmljYXRpb25FcnJvcjogMTMsCisgICAgICAgICAgICAgICAgTmFtZXNwYWNl
RXJyb3I6IDE0LAorICAgICAgICAgICAgICAgIEludmFsaWRBY2Nlc3NFcnJvcjogMTUsCisgICAg
ICAgICAgICAgICAgVHlwZU1pc21hdGNoRXJyb3I6IDE3LAorICAgICAgICAgICAgICAgIFNlY3Vy
aXR5RXJyb3I6IDE4LAorICAgICAgICAgICAgICAgIE5ldHdvcmtFcnJvcjogMTksCisgICAgICAg
ICAgICAgICAgQWJvcnRFcnJvcjogMjAsCisgICAgICAgICAgICAgICAgVVJMTWlzbWF0Y2hFcnJv
cjogMjEsCisgICAgICAgICAgICAgICAgUXVvdGFFeGNlZWRlZEVycm9yOiAyMiwKKyAgICAgICAg
ICAgICAgICBUaW1lb3V0RXJyb3I6IDIzLAorICAgICAgICAgICAgICAgIEludmFsaWROb2RlVHlw
ZUVycm9yOiAyNCwKKyAgICAgICAgICAgICAgICBEYXRhQ2xvbmVFcnJvcjogMjUsCisKKyAgICAg
ICAgICAgICAgICBVbmtub3duRXJyb3I6IDAsCisgICAgICAgICAgICAgICAgQ29uc3RyYWludEVy
cm9yOiAwLAorICAgICAgICAgICAgICAgIERhdGFFcnJvcjogMCwKKyAgICAgICAgICAgICAgICBU
cmFuc2FjdGlvbkluYWN0aXZlRXJyb3I6IDAsCisgICAgICAgICAgICAgICAgUmVhZE9ubHlFcnJv
cjogMCwKKyAgICAgICAgICAgICAgICBWZXJzaW9uRXJyb3I6IDAKKyAgICAgICAgICAgIH07CisK
KyAgICAgICAgICAgIGlmICghKG5hbWUgaW4gbmFtZV9jb2RlX21hcCkpIHsKKyAgICAgICAgICAg
ICAgICB0aHJvdyBuZXcgQXNzZXJ0aW9uRXJyb3IoJ1Rlc3QgYnVnOiB1bnJlY29nbml6ZWQgRE9N
RXhjZXB0aW9uIGNvZGUgIicgKyBjb2RlICsgJyIgcGFzc2VkIHRvIGFzc2VydF90aHJvd3MoKScp
OworICAgICAgICAgICAgfQorCisgICAgICAgICAgICB2YXIgcmVxdWlyZWRfcHJvcHMgPSB7IGNv
ZGU6IG5hbWVfY29kZV9tYXBbbmFtZV0gfTsKKworICAgICAgICAgICAgaWYgKHJlcXVpcmVkX3By
b3BzLmNvZGUgPT09IDAKKyAgICAgICAgICAgIHx8ICgibmFtZSIgaW4gZSAmJiBlLm5hbWUgIT09
IGUubmFtZS50b1VwcGVyQ2FzZSgpICYmIGUubmFtZSAhPT0gIkRPTUV4Y2VwdGlvbiIpKSB7Cisg
ICAgICAgICAgICAgICAgLy8gTmV3IHN0eWxlIGV4Y2VwdGlvbjogYWxzbyB0ZXN0IHRoZSBuYW1l
IHByb3BlcnR5LgorICAgICAgICAgICAgICAgIHJlcXVpcmVkX3Byb3BzLm5hbWUgPSBuYW1lOwor
ICAgICAgICAgICAgfQorCisgICAgICAgICAgICAvL1dlJ2QgbGlrZSB0byB0ZXN0IHRoYXQgZSBp
bnN0YW5jZW9mIHRoZSBhcHByb3ByaWF0ZSBpbnRlcmZhY2UsCisgICAgICAgICAgICAvL2J1dCB3
ZSBjYW4ndCwgYmVjYXVzZSB3ZSBkb24ndCBrbm93IHdoYXQgd2luZG93IGl0IHdhcyBjcmVhdGVk
CisgICAgICAgICAgICAvL2luLiAgSXQgbWlnaHQgYmUgYW4gaW5zdGFuY2VvZiB0aGUgYXBwcm9w
cmlhdGUgaW50ZXJmYWNlIG9uIHNvbWUKKyAgICAgICAgICAgIC8vdW5rbm93biBvdGhlciB3aW5k
b3cuICBUT0RPOiBXb3JrIGFyb3VuZCB0aGlzIHNvbWVob3c/CisKKyAgICAgICAgICAgIGFzc2Vy
dCh0eXBlb2YgZSA9PSAib2JqZWN0IiwKKyAgICAgICAgICAgICAgICAgICAiYXNzZXJ0X3Rocm93
cyIsIGRlc2NyaXB0aW9uLAorICAgICAgICAgICAgICAgICAgICIke2Z1bmN9IHRocmV3ICR7ZX0g
d2l0aCB0eXBlICR7dHlwZX0sIG5vdCBhbiBvYmplY3QiLAorICAgICAgICAgICAgICAgICAgIHtm
dW5jOmZ1bmMsIGU6ZSwgdHlwZTp0eXBlb2YgZX0pOworCisgICAgICAgICAgICBmb3IgKHZhciBw
cm9wIGluIHJlcXVpcmVkX3Byb3BzKSB7CisgICAgICAgICAgICAgICAgYXNzZXJ0KHR5cGVvZiBl
ID09ICJvYmplY3QiICYmIHByb3AgaW4gZSAmJiBlW3Byb3BdID09IHJlcXVpcmVkX3Byb3BzW3By
b3BdLAorICAgICAgICAgICAgICAgICAgICAgICAiYXNzZXJ0X3Rocm93cyIsIGRlc2NyaXB0aW9u
LAorICAgICAgICAgICAgICAgICAgICAgICAiJHtmdW5jfSB0aHJldyAke2V9IHRoYXQgaXMgbm90
IGEgRE9NRXhjZXB0aW9uICIgKyBjb2RlICsgIjogcHJvcGVydHkgJHtwcm9wfSBpcyBlcXVhbCB0
byAke2FjdHVhbH0sIGV4cGVjdGVkICR7ZXhwZWN0ZWR9IiwKKyAgICAgICAgICAgICAgICAgICAg
ICAge2Z1bmM6ZnVuYywgZTplLCBwcm9wOnByb3AsIGFjdHVhbDplW3Byb3BdLCBleHBlY3RlZDpy
ZXF1aXJlZF9wcm9wc1twcm9wXX0pOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQor
ICAgIGV4cG9zZShhc3NlcnRfdGhyb3dzLCAiYXNzZXJ0X3Rocm93cyIpOworCisgICAgZnVuY3Rp
b24gYXNzZXJ0X3VucmVhY2hlZChkZXNjcmlwdGlvbikgeworICAgICAgICAgYXNzZXJ0KGZhbHNl
LCAiYXNzZXJ0X3VucmVhY2hlZCIsIGRlc2NyaXB0aW9uLAorICAgICAgICAgICAgICAgICJSZWFj
aGVkIHVucmVhY2hhYmxlIGNvZGUiKTsKKyAgICB9CisgICAgZXhwb3NlKGFzc2VydF91bnJlYWNo
ZWQsICJhc3NlcnRfdW5yZWFjaGVkIik7CisKKyAgICBmdW5jdGlvbiBhc3NlcnRfYW55KGFzc2Vy
dF9mdW5jLCBhY3R1YWwsIGV4cGVjdGVkX2FycmF5KQorICAgIHsKKyAgICAgICAgdmFyIGFyZ3Mg
PSBbXS5zbGljZS5jYWxsKGFyZ3VtZW50cywgMykKKyAgICAgICAgdmFyIGVycm9ycyA9IFtdCisg
ICAgICAgIHZhciBwYXNzZWQgPSBmYWxzZTsKKyAgICAgICAgZm9yRWFjaChleHBlY3RlZF9hcnJh
eSwKKyAgICAgICAgICAgICAgICBmdW5jdGlvbihleHBlY3RlZCkKKyAgICAgICAgICAgICAgICB7
CisgICAgICAgICAgICAgICAgICAgIHRyeSB7CisgICAgICAgICAgICAgICAgICAgICAgICBhc3Nl
cnRfZnVuYy5hcHBseSh0aGlzLCBbYWN0dWFsLCBleHBlY3RlZF0uY29uY2F0KGFyZ3MpKQorICAg
ICAgICAgICAgICAgICAgICAgICAgcGFzc2VkID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAg
fSBjYXRjaCAoZSkgeworICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3JzLnB1c2goZS5tZXNz
YWdlKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0pOworICAgICAg
ICBpZiAoIXBhc3NlZCkgeworICAgICAgICAgICAgdGhyb3cgbmV3IEFzc2VydGlvbkVycm9yKGVy
cm9ycy5qb2luKCJcblxuIikpOworICAgICAgICB9CisgICAgfQorICAgIGV4cG9zZShhc3NlcnRf
YW55LCAiYXNzZXJ0X2FueSIpOworCisgICAgZnVuY3Rpb24gVGVzdChuYW1lLCBwcm9wZXJ0aWVz
KQorICAgIHsKKyAgICAgICAgdGhpcy5uYW1lID0gbmFtZTsKKworICAgICAgICB0aGlzLnBoYXNl
cyA9IHsKKyAgICAgICAgICAgIElOSVRJQUw6MCwKKyAgICAgICAgICAgIFNUQVJURUQ6MSwKKyAg
ICAgICAgICAgIEhBU19SRVNVTFQ6MiwKKyAgICAgICAgICAgIENPTVBMRVRFOjMKKyAgICAgICAg
fTsKKyAgICAgICAgdGhpcy5waGFzZSA9IHRoaXMucGhhc2VzLklOSVRJQUw7CisKKyAgICAgICAg
dGhpcy5zdGF0dXMgPSB0aGlzLk5PVFJVTjsKKyAgICAgICAgdGhpcy50aW1lb3V0X2lkID0gbnVs
bDsKKworICAgICAgICB0aGlzLnByb3BlcnRpZXMgPSBwcm9wZXJ0aWVzOworICAgICAgICB2YXIg
dGltZW91dCA9IHByb3BlcnRpZXMudGltZW91dCA/IHByb3BlcnRpZXMudGltZW91dCA6IHNldHRp
bmdzLnRlc3RfdGltZW91dAorICAgICAgICBpZiAodGltZW91dCAhPSBudWxsKSB7CisgICAgICAg
ICAgICB0aGlzLnRpbWVvdXRfbGVuZ3RoID0gdGltZW91dCAqIHRlc3RzLnRpbWVvdXRfbXVsdGlw
bGllcjsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHRoaXMudGltZW91dF9sZW5ndGgg
PSBudWxsOworICAgICAgICB9CisKKyAgICAgICAgdGhpcy5tZXNzYWdlID0gbnVsbDsKKworICAg
ICAgICB2YXIgdGhpc19vYmogPSB0aGlzOworICAgICAgICB0aGlzLnN0ZXBzID0gW107CisKKyAg
ICAgICAgdGhpcy5jbGVhbnVwX2NhbGxiYWNrcyA9IFtdOworCisgICAgICAgIHRlc3RzLnB1c2go
dGhpcyk7CisgICAgfQorCisgICAgVGVzdC5zdGF0dXNlcyA9IHsKKyAgICAgICAgUEFTUzowLAor
ICAgICAgICBGQUlMOjEsCisgICAgICAgIFRJTUVPVVQ6MiwKKyAgICAgICAgTk9UUlVOOjMKKyAg
ICB9OworCisgICAgVGVzdC5wcm90b3R5cGUgPSBtZXJnZSh7fSwgVGVzdC5zdGF0dXNlcyk7CisK
KyAgICBUZXN0LnByb3RvdHlwZS5zdHJ1Y3R1cmVkX2Nsb25lID0gZnVuY3Rpb24oKQorICAgIHsK
KyAgICAgICAgaWYgKCF0aGlzLl9zdHJ1Y3R1cmVkX2Nsb25lKSB7CisgICAgICAgICAgICB2YXIg
bXNnID0gdGhpcy5tZXNzYWdlOworICAgICAgICAgICAgbXNnID0gbXNnID8gU3RyaW5nKG1zZykg
OiBtc2c7CisgICAgICAgICAgICB0aGlzLl9zdHJ1Y3R1cmVkX2Nsb25lID0gbWVyZ2UoeworICAg
ICAgICAgICAgICAgIG5hbWU6U3RyaW5nKHRoaXMubmFtZSksCisgICAgICAgICAgICAgICAgc3Rh
dHVzOnRoaXMuc3RhdHVzLAorICAgICAgICAgICAgICAgIG1lc3NhZ2U6bXNnCisgICAgICAgICAg
ICB9LCBUZXN0LnN0YXR1c2VzKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gdGhpcy5fc3Ry
dWN0dXJlZF9jbG9uZTsKKyAgICB9OworCisgICAgVGVzdC5wcm90b3R5cGUuc3RlcCA9IGZ1bmN0
aW9uKGZ1bmMsIHRoaXNfb2JqKQorICAgIHsKKyAgICAgICAgaWYgKHRoaXMucGhhc2UgPiB0aGlz
LnBoYXNlcy5TVEFSVEVEKSB7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAg
ICAgdGhpcy5waGFzZSA9IHRoaXMucGhhc2VzLlNUQVJURUQ7CisgICAgICAgIC8vSWYgd2UgZG9u
J3QgZ2V0IGEgcmVzdWx0IGJlZm9yZSB0aGUgaGFybmVzcyB0aW1lcyBvdXQgdGhhdCB3aWxsIGJl
IGEgdGVzdCB0aW1vdXQKKyAgICAgICAgdGhpcy5zZXRfc3RhdHVzKHRoaXMuVElNRU9VVCwgIlRl
c3QgdGltZWQgb3V0Iik7CisKKyAgICAgICAgdGVzdHMuc3RhcnRlZCA9IHRydWU7CisKKyAgICAg
ICAgaWYgKHRoaXMudGltZW91dF9pZCA9PT0gbnVsbCkgeworICAgICAgICAgICAgdGhpcy5zZXRf
dGltZW91dCgpOworICAgICAgICB9CisKKyAgICAgICAgdGhpcy5zdGVwcy5wdXNoKGZ1bmMpOwor
CisgICAgICAgIGlmIChhcmd1bWVudHMubGVuZ3RoID09PSAxKSB7CisgICAgICAgICAgICB0aGlz
X29iaiA9IHRoaXM7CisgICAgICAgIH0KKworICAgICAgICB0cnkgeworICAgICAgICAgICAgcmV0
dXJuIGZ1bmMuYXBwbHkodGhpc19vYmosIEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3Vt
ZW50cywgMikpOworICAgICAgICB9IGNhdGNoIChlKSB7CisgICAgICAgICAgICBpZiAodGhpcy5w
aGFzZSA+PSB0aGlzLnBoYXNlcy5IQVNfUkVTVUxUKSB7CisgICAgICAgICAgICAgICAgcmV0dXJu
OworICAgICAgICAgICAgfQorICAgICAgICAgICAgdmFyIG1lc3NhZ2UgPSAodHlwZW9mIGUgPT09
ICJvYmplY3QiICYmIGUgIT09IG51bGwpID8gZS5tZXNzYWdlIDogZTsKKyAgICAgICAgICAgIGlm
ICh0eXBlb2YgZS5zdGFjayAhPSAidW5kZWZpbmVkIiAmJiB0eXBlb2YgZS5tZXNzYWdlID09ICJz
dHJpbmciKSB7CisgICAgICAgICAgICAgICAgLy9UcnkgdG8gbWFrZSBpdCBtb3JlIGluZm9ybWF0
aXZlIGZvciBzb21lIGV4Y2VwdGlvbnMsIGF0IGxlYXN0CisgICAgICAgICAgICAgICAgLy9pbiBH
ZWNrbyBhbmQgV2ViS2l0LiAgVGhpcyByZXN1bHRzIGluIGEgc3RhY2sgZHVtcCBpbnN0ZWFkIG9m
CisgICAgICAgICAgICAgICAgLy9qdXN0IGVycm9ycyBsaWtlICJDYW5ub3QgcmVhZCBwcm9wZXJ0
eSAncGFyZW50Tm9kZScgb2YgbnVsbCIKKyAgICAgICAgICAgICAgICAvL29yICJyb290IGlzIG51
bGwiLiAgTWFrZXMgaXQgYSBsb3QgbG9uZ2VyLCBvZiBjb3Vyc2UuCisgICAgICAgICAgICAgICAg
bWVzc2FnZSArPSAiKHN0YWNrOiAiICsgZS5zdGFjayArICIpIjsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIHRoaXMuc2V0X3N0YXR1cyh0aGlzLkZBSUwsIG1lc3NhZ2UpOworICAgICAgICAg
ICAgdGhpcy5waGFzZSA9IHRoaXMucGhhc2VzLkhBU19SRVNVTFQ7CisgICAgICAgICAgICB0aGlz
LmRvbmUoKTsKKyAgICAgICAgfQorICAgIH07CisKKyAgICBUZXN0LnByb3RvdHlwZS5zdGVwX2Z1
bmMgPSBmdW5jdGlvbihmdW5jLCB0aGlzX29iaikKKyAgICB7CisgICAgICAgIHZhciB0ZXN0X3Ro
aXMgPSB0aGlzOworCisgICAgICAgIGlmIChhcmd1bWVudHMubGVuZ3RoID09PSAxKSB7CisgICAg
ICAgICAgICB0aGlzX29iaiA9IHRlc3RfdGhpczsKKyAgICAgICAgfQorCisgICAgICAgIHJldHVy
biBmdW5jdGlvbigpCisgICAgICAgIHsKKyAgICAgICAgICAgIHRlc3RfdGhpcy5zdGVwLmFwcGx5
KHRlc3RfdGhpcywgW2Z1bmMsIHRoaXNfb2JqXS5jb25jYXQoCisgICAgICAgICAgICAgICAgQXJy
YXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzKSkpOworICAgICAgICB9OworICAgIH07
CisKKyAgICBUZXN0LnByb3RvdHlwZS5zdGVwX2Z1bmNfZG9uZSA9IGZ1bmN0aW9uKGZ1bmMsIHRo
aXNfb2JqKQorICAgIHsKKyAgICAgICAgdmFyIHRlc3RfdGhpcyA9IHRoaXM7CisKKyAgICAgICAg
aWYgKGFyZ3VtZW50cy5sZW5ndGggPT09IDEpIHsKKyAgICAgICAgICAgIHRoaXNfb2JqID0gdGVz
dF90aGlzOworICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIGZ1bmN0aW9uKCkKKyAgICAgICAg
eworICAgICAgICAgICAgaWYgKGZ1bmMpIHsKKyAgICAgICAgICAgICAgICB0ZXN0X3RoaXMuc3Rl
cC5hcHBseSh0ZXN0X3RoaXMsIFtmdW5jLCB0aGlzX29ial0uY29uY2F0KAorICAgICAgICAgICAg
ICAgICAgICBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMpKSk7CisgICAgICAg
ICAgICB9CisgICAgICAgICAgICB0ZXN0X3RoaXMuZG9uZSgpOworICAgICAgICB9OworICAgIH0K
KworICAgIFRlc3QucHJvdG90eXBlLmFkZF9jbGVhbnVwID0gZnVuY3Rpb24oY2FsbGJhY2spIHsK
KyAgICAgICAgdGhpcy5jbGVhbnVwX2NhbGxiYWNrcy5wdXNoKGNhbGxiYWNrKTsKKyAgICB9CisK
KyAgICBUZXN0LnByb3RvdHlwZS5zZXRfdGltZW91dCA9IGZ1bmN0aW9uKCkKKyAgICB7CisgICAg
ICAgIGlmICh0aGlzLnRpbWVvdXRfbGVuZ3RoICE9PSBudWxsKSB7CisgICAgICAgICAgICB2YXIg
dGhpc19vYmogPSB0aGlzOworICAgICAgICAgICAgdGhpcy50aW1lb3V0X2lkID0gc2V0VGltZW91
dChmdW5jdGlvbigpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXNfb2JqLnRp
bWVvdXQoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwgdGhp
cy50aW1lb3V0X2xlbmd0aCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBUZXN0LnByb3RvdHlw
ZS5zZXRfc3RhdHVzID0gZnVuY3Rpb24oc3RhdHVzLCBtZXNzYWdlKQorICAgIHsKKyAgICAgICAg
dGhpcy5zdGF0dXMgPSBzdGF0dXM7CisgICAgICAgIHRoaXMubWVzc2FnZSA9IG1lc3NhZ2U7Cisg
ICAgfQorCisgICAgVGVzdC5wcm90b3R5cGUudGltZW91dCA9IGZ1bmN0aW9uKCkKKyAgICB7Cisg
ICAgICAgIHRoaXMudGltZW91dF9pZCA9IG51bGw7CisgICAgICAgIHRoaXMuc2V0X3N0YXR1cyh0
aGlzLlRJTUVPVVQsICJUZXN0IHRpbWVkIG91dCIpCisgICAgICAgIHRoaXMucGhhc2UgPSB0aGlz
LnBoYXNlcy5IQVNfUkVTVUxUOworICAgICAgICB0aGlzLmRvbmUoKTsKKyAgICB9OworCisgICAg
VGVzdC5wcm90b3R5cGUuZG9uZSA9IGZ1bmN0aW9uKCkKKyAgICB7CisgICAgICAgIGlmICh0aGlz
LnBoYXNlID09IHRoaXMucGhhc2VzLkNPTVBMRVRFKSB7CisgICAgICAgICAgICByZXR1cm47Cisg
ICAgICAgIH0KKworICAgICAgICBpZiAodGhpcy5waGFzZSA8PSB0aGlzLnBoYXNlcy5TVEFSVEVE
KSB7CisgICAgICAgICAgICB0aGlzLnNldF9zdGF0dXModGhpcy5QQVNTLCBudWxsKTsKKyAgICAg
ICAgfQorCisgICAgICAgIGlmICh0aGlzLnN0YXR1cyA9PSB0aGlzLk5PVFJVTikgeworICAgICAg
ICAgICAgYWxlcnQodGhpcy5waGFzZSk7CisgICAgICAgIH0KKworICAgICAgICB0aGlzLnBoYXNl
ID0gdGhpcy5waGFzZXMuQ09NUExFVEU7CisKKyAgICAgICAgY2xlYXJUaW1lb3V0KHRoaXMudGlt
ZW91dF9pZCk7CisgICAgICAgIHRlc3RzLnJlc3VsdCh0aGlzKTsKKyAgICAgICAgdGhpcy5jbGVh
bnVwKCk7CisgICAgfTsKKworICAgIFRlc3QucHJvdG90eXBlLmNsZWFudXAgPSBmdW5jdGlvbigp
IHsKKyAgICAgICAgZm9yRWFjaCh0aGlzLmNsZWFudXBfY2FsbGJhY2tzLAorICAgICAgICAgICAg
ICAgIGZ1bmN0aW9uKGNsZWFudXBfY2FsbGJhY2spIHsKKyAgICAgICAgICAgICAgICAgICAgY2xl
YW51cF9jYWxsYmFjaygpCisgICAgICAgICAgICAgICAgfSk7CisgICAgfQorCisgICAgLyoKKyAg
ICAgKiBIYXJuZXNzCisgICAgICovCisKKyAgICBmdW5jdGlvbiBUZXN0c1N0YXR1cygpCisgICAg
eworICAgICAgICB0aGlzLnN0YXR1cyA9IG51bGw7CisgICAgICAgIHRoaXMubWVzc2FnZSA9IG51
bGw7CisgICAgfQorCisgICAgVGVzdHNTdGF0dXMuc3RhdHVzZXMgPSB7CisgICAgICAgIE9LOjAs
CisgICAgICAgIEVSUk9SOjEsCisgICAgICAgIFRJTUVPVVQ6MgorICAgIH07CisKKyAgICBUZXN0
c1N0YXR1cy5wcm90b3R5cGUgPSBtZXJnZSh7fSwgVGVzdHNTdGF0dXMuc3RhdHVzZXMpOworCisg
ICAgVGVzdHNTdGF0dXMucHJvdG90eXBlLnN0cnVjdHVyZWRfY2xvbmUgPSBmdW5jdGlvbigpCisg
ICAgeworICAgICAgICBpZiAoIXRoaXMuX3N0cnVjdHVyZWRfY2xvbmUpIHsKKyAgICAgICAgICAg
IHZhciBtc2cgPSB0aGlzLm1lc3NhZ2U7CisgICAgICAgICAgICBtc2cgPSBtc2cgPyBTdHJpbmco
bXNnKSA6IG1zZzsKKyAgICAgICAgICAgIHRoaXMuX3N0cnVjdHVyZWRfY2xvbmUgPSBtZXJnZSh7
CisgICAgICAgICAgICAgICAgc3RhdHVzOnRoaXMuc3RhdHVzLAorICAgICAgICAgICAgICAgIG1l
c3NhZ2U6bXNnCisgICAgICAgICAgICB9LCBUZXN0c1N0YXR1cy5zdGF0dXNlcyk7CisgICAgICAg
IH0KKyAgICAgICAgcmV0dXJuIHRoaXMuX3N0cnVjdHVyZWRfY2xvbmU7CisgICAgfTsKKworICAg
IGZ1bmN0aW9uIFRlc3RzKCkKKyAgICB7CisgICAgICAgIHRoaXMudGVzdHMgPSBbXTsKKyAgICAg
ICAgdGhpcy5udW1fcGVuZGluZyA9IDA7CisKKyAgICAgICAgdGhpcy5waGFzZXMgPSB7CisgICAg
ICAgICAgICBJTklUSUFMOjAsCisgICAgICAgICAgICBTRVRVUDoxLAorICAgICAgICAgICAgSEFW
RV9URVNUUzoyLAorICAgICAgICAgICAgSEFWRV9SRVNVTFRTOjMsCisgICAgICAgICAgICBDT01Q
TEVURTo0CisgICAgICAgIH07CisgICAgICAgIHRoaXMucGhhc2UgPSB0aGlzLnBoYXNlcy5JTklU
SUFMOworCisgICAgICAgIHRoaXMucHJvcGVydGllcyA9IHt9OworCisgICAgICAgIC8vQWxsIHRl
c3RzIGNhbid0IGJlIGRvbmUgdW50aWwgdGhlIGxvYWQgZXZlbnQgZmlyZXMKKyAgICAgICAgdGhp
cy5hbGxfbG9hZGVkID0gZmFsc2U7CisgICAgICAgIHRoaXMud2FpdF9mb3JfZmluaXNoID0gZmFs
c2U7CisgICAgICAgIHRoaXMucHJvY2Vzc2luZ19jYWxsYmFja3MgPSBmYWxzZTsKKworICAgICAg
ICB0aGlzLmFsbG93X3VuY2F1Z2h0X2V4Y2VwdGlvbiA9IGZhbHNlOworCisgICAgICAgIHRoaXMu
dGltZW91dF9tdWx0aXBsaWVyID0gMTsKKyAgICAgICAgdGhpcy50aW1lb3V0X2xlbmd0aCA9IHRo
aXMuZ2V0X3RpbWVvdXQoKTsKKyAgICAgICAgdGhpcy50aW1lb3V0X2lkID0gbnVsbDsKKworICAg
ICAgICB0aGlzLnN0YXJ0X2NhbGxiYWNrcyA9IFtdOworICAgICAgICB0aGlzLnRlc3RfZG9uZV9j
YWxsYmFja3MgPSBbXTsKKyAgICAgICAgdGhpcy5hbGxfZG9uZV9jYWxsYmFja3MgPSBbXTsKKwor
ICAgICAgICB0aGlzLnN0YXR1cyA9IG5ldyBUZXN0c1N0YXR1cygpOworCisgICAgICAgIHZhciB0
aGlzX29iaiA9IHRoaXM7CisKKyAgICAgICAgb25fZXZlbnQod2luZG93LCAibG9hZCIsCisgICAg
ICAgICAgICAgICAgIGZ1bmN0aW9uKCkKKyAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAg
ICAgICAgICAgdGhpc19vYmouYWxsX2xvYWRlZCA9IHRydWU7CisgICAgICAgICAgICAgICAgICAg
ICBpZiAodGhpc19vYmouYWxsX2RvbmUoKSkKKyAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAg
ICAgICAgICAgICAgICAgICAgICB0aGlzX29iai5jb21wbGV0ZSgpOworICAgICAgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgICAgICB9KTsKKworICAgICAgICB0aGlzLnNldF90aW1lb3V0
KCk7CisgICAgfQorCisgICAgVGVzdHMucHJvdG90eXBlLnNldHVwID0gZnVuY3Rpb24oZnVuYywg
cHJvcGVydGllcykKKyAgICB7CisgICAgICAgIGlmICh0aGlzLnBoYXNlID49IHRoaXMucGhhc2Vz
LkhBVkVfUkVTVUxUUykgeworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAg
ICAgaWYgKHRoaXMucGhhc2UgPCB0aGlzLnBoYXNlcy5TRVRVUCkgeworICAgICAgICAgICAgdGhp
cy5waGFzZSA9IHRoaXMucGhhc2VzLlNFVFVQOworICAgICAgICB9CisKKyAgICAgICAgdGhpcy5w
cm9wZXJ0aWVzID0gcHJvcGVydGllczsKKworICAgICAgICBmb3IgKHZhciBwIGluIHByb3BlcnRp
ZXMpIHsKKyAgICAgICAgICAgIGlmIChwcm9wZXJ0aWVzLmhhc093blByb3BlcnR5KHApKSB7Cisg
ICAgICAgICAgICAgICAgdmFyIHZhbHVlID0gcHJvcGVydGllc1twXQorICAgICAgICAgICAgICAg
IGlmIChwID09ICJhbGxvd191bmNhdWdodF9leGNlcHRpb24iKSB7CisgICAgICAgICAgICAgICAg
ICAgIHRoaXMuYWxsb3dfdW5jYXVnaHRfZXhjZXB0aW9uID0gdmFsdWU7CisgICAgICAgICAgICAg
ICAgfSBlbHNlIGlmIChwID09ICJleHBsaWNpdF9kb25lIiAmJiB2YWx1ZSkgeworICAgICAgICAg
ICAgICAgICAgICB0aGlzLndhaXRfZm9yX2ZpbmlzaCA9IHRydWU7CisgICAgICAgICAgICAgICAg
fSBlbHNlIGlmIChwID09ICJleHBsaWNpdF90aW1lb3V0IiAmJiB2YWx1ZSkgeworICAgICAgICAg
ICAgICAgICAgICB0aGlzLnRpbWVvdXRfbGVuZ3RoID0gbnVsbDsKKyAgICAgICAgICAgICAgICAg
ICAgaWYgKHRoaXMudGltZW91dF9pZCkKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAg
ICAgICAgICAgICAgICAgY2xlYXJUaW1lb3V0KHRoaXMudGltZW91dF9pZCk7CisgICAgICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHAgPT0gInRpbWVvdXRfbXVs
dGlwbGllciIpIHsKKyAgICAgICAgICAgICAgICAgICAgdGhpcy50aW1lb3V0X211bHRpcGxpZXIg
PSB2YWx1ZTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKwor
ICAgICAgICBpZiAoZnVuYykgeworICAgICAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgICAgICBm
dW5jKCk7CisgICAgICAgICAgICB9IGNhdGNoIChlKSB7CisgICAgICAgICAgICAgICAgdGhpcy5z
dGF0dXMuc3RhdHVzID0gdGhpcy5zdGF0dXMuRVJST1I7CisgICAgICAgICAgICAgICAgdGhpcy5z
dGF0dXMubWVzc2FnZSA9IFN0cmluZyhlKTsKKyAgICAgICAgICAgIH07CisgICAgICAgIH0KKyAg
ICAgICAgdGhpcy5zZXRfdGltZW91dCgpOworICAgIH07CisKKyAgICBUZXN0cy5wcm90b3R5cGUu
Z2V0X3RpbWVvdXQgPSBmdW5jdGlvbigpCisgICAgeworICAgICAgICB2YXIgbWV0YXMgPSBkb2N1
bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZSgibWV0YSIpOworICAgICAgICBmb3IgKHZhciBpID0g
MDsgaSA8IG1ldGFzLmxlbmd0aDsgaSsrKSB7CisgICAgICAgICAgICBpZiAobWV0YXNbaV0ubmFt
ZSA9PSAidGltZW91dCIpIHsKKyAgICAgICAgICAgICAgICBpZiAobWV0YXNbaV0uY29udGVudCA9
PSAibG9uZyIpIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHNldHRpbmdzLmhhcm5lc3Nf
dGltZW91dC5sb25nOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICByZXR1cm4gc2V0dGluZ3MuaGFybmVz
c190aW1lb3V0Lm5vcm1hbDsKKyAgICB9CisKKyAgICBUZXN0cy5wcm90b3R5cGUuc2V0X3RpbWVv
dXQgPSBmdW5jdGlvbigpCisgICAgeworICAgICAgICB2YXIgdGhpc19vYmogPSB0aGlzOworICAg
ICAgICBjbGVhclRpbWVvdXQodGhpcy50aW1lb3V0X2lkKTsKKyAgICAgICAgaWYgKHRoaXMudGlt
ZW91dF9sZW5ndGggIT09IG51bGwpIHsKKyAgICAgICAgICAgIHRoaXMudGltZW91dF9pZCA9IHNl
dFRpbWVvdXQoZnVuY3Rpb24oKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB0aGlzX29iai50aW1lb3V0KCk7CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIH0sIHRoaXMudGltZW91dF9sZW5ndGgpOworICAgICAgICB9CisgICAg
fTsKKworICAgIFRlc3RzLnByb3RvdHlwZS50aW1lb3V0ID0gZnVuY3Rpb24oKSB7CisgICAgICAg
IHRoaXMuc3RhdHVzLnN0YXR1cyA9IHRoaXMuc3RhdHVzLlRJTUVPVVQ7CisgICAgICAgIHRoaXMu
Y29tcGxldGUoKTsKKyAgICB9OworCisgICAgVGVzdHMucHJvdG90eXBlLmVuZF93YWl0ID0gZnVu
Y3Rpb24oKQorICAgIHsKKyAgICAgICAgdGhpcy53YWl0X2Zvcl9maW5pc2ggPSBmYWxzZTsKKyAg
ICAgICAgaWYgKHRoaXMuYWxsX2RvbmUoKSkgeworICAgICAgICAgICAgdGhpcy5jb21wbGV0ZSgp
OworICAgICAgICB9CisgICAgfTsKKworICAgIFRlc3RzLnByb3RvdHlwZS5wdXNoID0gZnVuY3Rp
b24odGVzdCkKKyAgICB7CisgICAgICAgIGlmICh0aGlzLnBoYXNlIDwgdGhpcy5waGFzZXMuSEFW
RV9URVNUUykgeworICAgICAgICAgICAgdGhpcy5zdGFydCgpOworICAgICAgICB9CisgICAgICAg
IHRoaXMubnVtX3BlbmRpbmcrKzsKKyAgICAgICAgdGhpcy50ZXN0cy5wdXNoKHRlc3QpOworICAg
IH07CisKKyAgICBUZXN0cy5wcm90b3R5cGUuYWxsX2RvbmUgPSBmdW5jdGlvbigpIHsKKyAgICAg
ICAgcmV0dXJuICh0aGlzLmFsbF9sb2FkZWQgJiYgdGhpcy5udW1fcGVuZGluZyA9PT0gMCAmJgor
ICAgICAgICAgICAgICAgICF0aGlzLndhaXRfZm9yX2ZpbmlzaCAmJiAhdGhpcy5wcm9jZXNzaW5n
X2NhbGxiYWNrcyk7CisgICAgfTsKKworICAgIFRlc3RzLnByb3RvdHlwZS5zdGFydCA9IGZ1bmN0
aW9uKCkgeworICAgICAgICB0aGlzLnBoYXNlID0gdGhpcy5waGFzZXMuSEFWRV9URVNUUzsKKyAg
ICAgICAgdGhpcy5ub3RpZnlfc3RhcnQoKTsKKyAgICB9OworCisgICAgVGVzdHMucHJvdG90eXBl
Lm5vdGlmeV9zdGFydCA9IGZ1bmN0aW9uKCkgeworICAgICAgICB2YXIgdGhpc19vYmogPSB0aGlz
OworICAgICAgICBmb3JFYWNoICh0aGlzLnN0YXJ0X2NhbGxiYWNrcywKKyAgICAgICAgICAgICAg
ICAgZnVuY3Rpb24oY2FsbGJhY2spCisgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAg
ICAgICAgIGNhbGxiYWNrKHRoaXNfb2JqLnByb3BlcnRpZXMpOworICAgICAgICAgICAgICAgICB9
KTsKKyAgICAgICAgZm9yRWFjaF93aW5kb3dzKAorICAgICAgICAgICAgICAgIGZ1bmN0aW9uKHcs
IGlzX3NhbWVfb3JpZ2luKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAg
aWYgKGlzX3NhbWVfb3JpZ2luICYmIHcuc3RhcnRfY2FsbGJhY2spIHsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIHRyeSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdy5zdGFydF9jYWxs
YmFjayh0aGlzX29iai5wcm9wZXJ0aWVzKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0gY2F0
Y2ggKGUpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZGVidWcpIHsKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgZTsKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgICAgICAgICAgaWYgKHN1cHBvcnRzX3Bvc3RfbWVzc2FnZSh3KSAmJiB3
ICE9PSBzZWxmKSB7CisgICAgICAgICAgICAgICAgICAgICAgICB3LnBvc3RNZXNzYWdlKHsKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiAic3RhcnQiLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHByb3BlcnRpZXM6IHRoaXNfb2JqLnByb3BlcnRpZXMKKyAgICAgICAgICAg
ICAgICAgICAgICAgIH0sICIqIik7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
ICAgICB9KTsKKyAgICB9OworCisgICAgVGVzdHMucHJvdG90eXBlLnJlc3VsdCA9IGZ1bmN0aW9u
KHRlc3QpCisgICAgeworICAgICAgICBpZiAodGhpcy5waGFzZSA+IHRoaXMucGhhc2VzLkhBVkVf
UkVTVUxUUykgeworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIHRoaXMu
cGhhc2UgPSB0aGlzLnBoYXNlcy5IQVZFX1JFU1VMVFM7CisgICAgICAgIHRoaXMubnVtX3BlbmRp
bmctLTsKKyAgICAgICAgdGhpcy5ub3RpZnlfcmVzdWx0KHRlc3QpOworICAgIH07CisKKyAgICBU
ZXN0cy5wcm90b3R5cGUubm90aWZ5X3Jlc3VsdCA9IGZ1bmN0aW9uKHRlc3QpIHsKKyAgICAgICAg
dmFyIHRoaXNfb2JqID0gdGhpczsKKyAgICAgICAgdGhpcy5wcm9jZXNzaW5nX2NhbGxiYWNrcyA9
IHRydWU7CisgICAgICAgIGZvckVhY2godGhpcy50ZXN0X2RvbmVfY2FsbGJhY2tzLAorICAgICAg
ICAgICAgICAgIGZ1bmN0aW9uKGNhbGxiYWNrKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAg
ICAgICAgICAgICAgY2FsbGJhY2sodGVzdCwgdGhpc19vYmopOworICAgICAgICAgICAgICAgIH0p
OworCisgICAgICAgIGZvckVhY2hfd2luZG93cygKKyAgICAgICAgICAgICAgICBmdW5jdGlvbih3
LCBpc19zYW1lX29yaWdpbikKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAg
IGlmIChpc19zYW1lX29yaWdpbiAmJiB3LnJlc3VsdF9jYWxsYmFjaykgeworICAgICAgICAgICAg
ICAgICAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB3LnJlc3VsdF9j
YWxsYmFjayh0ZXN0KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHsKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZGVidWcpIHsKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgdGhyb3cgZTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgICAgICAgICAgaWYgKHN1cHBvcnRzX3Bvc3RfbWVzc2FnZSh3KSAmJiB3ICE9PSBzZWxmKSB7
CisgICAgICAgICAgICAgICAgICAgICAgICB3LnBvc3RNZXNzYWdlKHsKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB0eXBlOiAicmVzdWx0IiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB0ZXN0OiB0ZXN0LnN0cnVjdHVyZWRfY2xvbmUoKQorICAgICAgICAgICAgICAgICAgICAgICAg
fSwgIioiKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0pOworICAg
ICAgICB0aGlzLnByb2Nlc3NpbmdfY2FsbGJhY2tzID0gZmFsc2U7CisgICAgICAgIGlmICh0aGlz
X29iai5hbGxfZG9uZSgpKSB7CisgICAgICAgICAgICB0aGlzX29iai5jb21wbGV0ZSgpOworICAg
ICAgICB9CisgICAgfTsKKworICAgIFRlc3RzLnByb3RvdHlwZS5jb21wbGV0ZSA9IGZ1bmN0aW9u
KCkgeworICAgICAgICBpZiAodGhpcy5waGFzZSA9PT0gdGhpcy5waGFzZXMuQ09NUExFVEUpIHsK
KyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICB0aGlzLnBoYXNlID0gdGhp
cy5waGFzZXMuQ09NUExFVEU7CisgICAgICAgIHZhciB0aGlzX29iaiA9IHRoaXM7CisgICAgICAg
IHRoaXMudGVzdHMuZm9yRWFjaCgKKyAgICAgICAgICAgIGZ1bmN0aW9uKHgpCisgICAgICAgICAg
ICB7CisgICAgICAgICAgICAgICAgaWYgKHguc3RhdHVzID09PSB4Lk5PVFJVTikgeworICAgICAg
ICAgICAgICAgICAgICB0aGlzX29iai5ub3RpZnlfcmVzdWx0KHgpOworICAgICAgICAgICAgICAg
ICAgICB4LmNsZWFudXAoKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAg
ICAgICk7CisgICAgICAgIHRoaXMubm90aWZ5X2NvbXBsZXRlKCk7CisgICAgfTsKKworICAgIFRl
c3RzLnByb3RvdHlwZS5ub3RpZnlfY29tcGxldGUgPSBmdW5jdGlvbigpCisgICAgeworICAgICAg
ICBjbGVhclRpbWVvdXQodGhpcy50aW1lb3V0X2lkKTsKKyAgICAgICAgdmFyIHRoaXNfb2JqID0g
dGhpczsKKyAgICAgICAgdmFyIHRlc3RzID0gbWFwKHRoaXNfb2JqLnRlc3RzLAorICAgICAgICAg
ICAgICAgICAgICAgICAgZnVuY3Rpb24odGVzdCkKKyAgICAgICAgICAgICAgICAgICAgICAgIHsK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGVzdC5zdHJ1Y3R1cmVkX2Nsb25l
KCk7CisgICAgICAgICAgICAgICAgICAgICAgICB9KTsKKyAgICAgICAgaWYgKHRoaXMuc3RhdHVz
LnN0YXR1cyA9PT0gbnVsbCkgeworICAgICAgICAgICAgdGhpcy5zdGF0dXMuc3RhdHVzID0gdGhp
cy5zdGF0dXMuT0s7CisgICAgICAgIH0KKworICAgICAgICBmb3JFYWNoICh0aGlzLmFsbF9kb25l
X2NhbGxiYWNrcywKKyAgICAgICAgICAgICAgICAgZnVuY3Rpb24oY2FsbGJhY2spCisgICAgICAg
ICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrKHRoaXNfb2JqLnRlc3Rz
LCB0aGlzX29iai5zdGF0dXMpOworICAgICAgICAgICAgICAgICB9KTsKKworICAgICAgICBmb3JF
YWNoX3dpbmRvd3MoCisgICAgICAgICAgICAgICAgZnVuY3Rpb24odywgaXNfc2FtZV9vcmlnaW4p
CisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBpZiAoaXNfc2FtZV9vcmln
aW4gJiYgdy5jb21wbGV0aW9uX2NhbGxiYWNrKSB7CisgICAgICAgICAgICAgICAgICAgICAgICB0
cnkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHcuY29tcGxldGlvbl9jYWxsYmFjayh0
aGlzX29iai50ZXN0cywgdGhpc19vYmouc3RhdHVzKTsKKyAgICAgICAgICAgICAgICAgICAgICAg
IH0gY2F0Y2ggKGUpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZGVidWcpIHsK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgZTsKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgaWYgKHN1cHBvcnRzX3Bvc3RfbWVzc2FnZSh3
KSAmJiB3ICE9PSBzZWxmKSB7CisgICAgICAgICAgICAgICAgICAgICAgICB3LnBvc3RNZXNzYWdl
KHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiAiY29tcGxldGUiLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHRlc3RzOiB0ZXN0cywKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBzdGF0dXM6IHRoaXNfb2JqLnN0YXR1cy5zdHJ1Y3R1cmVkX2Nsb25lKCkKKyAgICAg
ICAgICAgICAgICAgICAgICAgIH0sICIqIik7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgICAgICB9KTsKKyAgICB9OworCisgICAgdmFyIHRlc3RzID0gbmV3IFRlc3RzKCk7CisK
KyAgICB3aW5kb3cub25lcnJvciA9IGZ1bmN0aW9uKG1zZykgeworICAgICAgICBpZiAoIXRlc3Rz
LmFsbG93X3VuY2F1Z2h0X2V4Y2VwdGlvbikgeworICAgICAgICAgICAgdGVzdHMuc3RhdHVzLnN0
YXR1cyA9IHRlc3RzLnN0YXR1cy5FUlJPUjsKKyAgICAgICAgICAgIHRlc3RzLnN0YXR1cy5tZXNz
YWdlID0gbXNnOworICAgICAgICAgICAgdGVzdHMuY29tcGxldGUoKTsKKyAgICAgICAgfQorICAg
IH0KKworICAgIGZ1bmN0aW9uIHRpbWVvdXQoKSB7CisgICAgICAgIGlmICh0ZXN0cy50aW1lb3V0
X2xlbmd0aCA9PT0gbnVsbCkgeworICAgICAgICAgICAgdGVzdHMudGltZW91dCgpOworICAgICAg
ICB9CisgICAgfQorICAgIGV4cG9zZSh0aW1lb3V0LCAndGltZW91dCcpOworCisgICAgZnVuY3Rp
b24gYWRkX3N0YXJ0X2NhbGxiYWNrKGNhbGxiYWNrKSB7CisgICAgICAgIHRlc3RzLnN0YXJ0X2Nh
bGxiYWNrcy5wdXNoKGNhbGxiYWNrKTsKKyAgICB9CisKKyAgICBmdW5jdGlvbiBhZGRfcmVzdWx0
X2NhbGxiYWNrKGNhbGxiYWNrKQorICAgIHsKKyAgICAgICAgdGVzdHMudGVzdF9kb25lX2NhbGxi
YWNrcy5wdXNoKGNhbGxiYWNrKTsKKyAgICB9CisKKyAgICBmdW5jdGlvbiBhZGRfY29tcGxldGlv
bl9jYWxsYmFjayhjYWxsYmFjaykKKyAgICB7CisgICAgICAgdGVzdHMuYWxsX2RvbmVfY2FsbGJh
Y2tzLnB1c2goY2FsbGJhY2spOworICAgIH0KKworICAgIGV4cG9zZShhZGRfc3RhcnRfY2FsbGJh
Y2ssICdhZGRfc3RhcnRfY2FsbGJhY2snKTsKKyAgICBleHBvc2UoYWRkX3Jlc3VsdF9jYWxsYmFj
aywgJ2FkZF9yZXN1bHRfY2FsbGJhY2snKTsKKyAgICBleHBvc2UoYWRkX2NvbXBsZXRpb25fY2Fs
bGJhY2ssICdhZGRfY29tcGxldGlvbl9jYWxsYmFjaycpOworCisgICAgLyoKKyAgICAgKiBPdXRw
dXQgbGlzdGVuZXIKKyAgICAqLworCisgICAgZnVuY3Rpb24gT3V0cHV0KCkgeworICAgICAgICB0
aGlzLm91dHB1dF9kb2N1bWVudCA9IGRvY3VtZW50OworICAgICAgICB0aGlzLm91dHB1dF9ub2Rl
ID0gbnVsbDsKKyAgICAgICAgdGhpcy5kb25lX2NvdW50ID0gMDsKKyAgICAgICAgdGhpcy5lbmFi
bGVkID0gc2V0dGluZ3Mub3V0cHV0OworICAgICAgICB0aGlzLnBoYXNlID0gdGhpcy5JTklUSUFM
OworICAgIH0KKworICAgIE91dHB1dC5wcm90b3R5cGUuSU5JVElBTCA9IDA7CisgICAgT3V0cHV0
LnByb3RvdHlwZS5TVEFSVEVEID0gMTsKKyAgICBPdXRwdXQucHJvdG90eXBlLkhBVkVfUkVTVUxU
UyA9IDI7CisgICAgT3V0cHV0LnByb3RvdHlwZS5DT01QTEVURSA9IDM7CisKKyAgICBPdXRwdXQu
cHJvdG90eXBlLnNldHVwID0gZnVuY3Rpb24ocHJvcGVydGllcykgeworICAgICAgICBpZiAodGhp
cy5waGFzZSA+IHRoaXMuSU5JVElBTCkgeworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9
CisKKyAgICAgICAgLy9JZiBvdXRwdXQgaXMgZGlzYWJsZWQgaW4gdGVzdGhhcm5lc3NyZXBvcnQu
anMgdGhlIHRlc3Qgc2hvdWxkbid0IGJlCisgICAgICAgIC8vYWJsZSB0byBvdmVycmlkZSB0aGF0
CisgICAgICAgIHRoaXMuZW5hYmxlZCA9IHRoaXMuZW5hYmxlZCAmJiAocHJvcGVydGllcy5oYXNP
d25Qcm9wZXJ0eSgib3V0cHV0IikgPworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHByb3BlcnRpZXMub3V0cHV0IDogc2V0dGluZ3Mub3V0cHV0KTsKKyAgICB9OworCisg
ICAgT3V0cHV0LnByb3RvdHlwZS5pbml0ID0gZnVuY3Rpb24ocHJvcGVydGllcykKKyAgICB7Cisg
ICAgICAgIGlmICh0aGlzLnBoYXNlID49IHRoaXMuU1RBUlRFRCkgeworICAgICAgICAgICAgcmV0
dXJuOworICAgICAgICB9CisgICAgICAgIGlmIChwcm9wZXJ0aWVzLm91dHB1dF9kb2N1bWVudCkg
eworICAgICAgICAgICAgdGhpcy5vdXRwdXRfZG9jdW1lbnQgPSBwcm9wZXJ0aWVzLm91dHB1dF9k
b2N1bWVudDsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHRoaXMub3V0cHV0X2RvY3Vt
ZW50ID0gZG9jdW1lbnQ7CisgICAgICAgIH0KKyAgICAgICAgdGhpcy5waGFzZSA9IHRoaXMuU1RB
UlRFRDsKKyAgICB9OworCisgICAgT3V0cHV0LnByb3RvdHlwZS5yZXNvbHZlX2xvZyA9IGZ1bmN0
aW9uKCkKKyAgICB7CisgICAgICAgIHZhciBvdXRwdXRfZG9jdW1lbnQ7CisgICAgICAgIGlmICh0
eXBlb2YgdGhpcy5vdXRwdXRfZG9jdW1lbnQgPT09ICJmdW5jdGlvbiIpIHsKKyAgICAgICAgICAg
IG91dHB1dF9kb2N1bWVudCA9IHRoaXMub3V0cHV0X2RvY3VtZW50LmFwcGx5KHVuZGVmaW5lZCk7
CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBvdXRwdXRfZG9jdW1lbnQgPSB0aGlzLm91
dHB1dF9kb2N1bWVudDsKKyAgICAgICAgfQorICAgICAgICBpZiAoIW91dHB1dF9kb2N1bWVudCkg
eworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIHZhciBub2RlID0gb3V0
cHV0X2RvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJsb2ciKTsKKyAgICAgICAgaWYgKG5vZGUpIHsK
KyAgICAgICAgICAgIHRoaXMub3V0cHV0X2RvY3VtZW50ID0gb3V0cHV0X2RvY3VtZW50OworICAg
ICAgICAgICAgdGhpcy5vdXRwdXRfbm9kZSA9IG5vZGU7CisgICAgICAgIH0KKyAgICB9OworCisg
ICAgT3V0cHV0LnByb3RvdHlwZS5zaG93X3N0YXR1cyA9IGZ1bmN0aW9uKHRlc3QpCisgICAgewor
ICAgICAgICBpZiAodGhpcy5waGFzZSA8IHRoaXMuU1RBUlRFRCkgeworICAgICAgICAgICAgdGhp
cy5pbml0KCk7CisgICAgICAgIH0KKyAgICAgICAgaWYgKCF0aGlzLmVuYWJsZWQpIHsKKyAgICAg
ICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICBpZiAodGhpcy5waGFzZSA8IHRoaXMu
SEFWRV9SRVNVTFRTKSB7CisgICAgICAgICAgICB0aGlzLnJlc29sdmVfbG9nKCk7CisgICAgICAg
ICAgICB0aGlzLnBoYXNlID0gdGhpcy5IQVZFX1JFU1VMVFM7CisgICAgICAgIH0KKyAgICAgICAg
dGhpcy5kb25lX2NvdW50Kys7CisgICAgICAgIGlmICh0aGlzLm91dHB1dF9ub2RlKSB7CisgICAg
ICAgICAgICBpZiAodGhpcy5kb25lX2NvdW50IDwgMTAwCisgICAgICAgICAgICB8fCAodGhpcy5k
b25lX2NvdW50IDwgMTAwMCAmJiB0aGlzLmRvbmVfY291bnQgJSAxMDAgPT0gMCkKKyAgICAgICAg
ICAgIHx8IHRoaXMuZG9uZV9jb3VudCAlIDEwMDAgPT0gMCkgeworICAgICAgICAgICAgICAgIHRo
aXMub3V0cHV0X25vZGUudGV4dENvbnRlbnQgPSAiUnVubmluZywgIgorICAgICAgICAgICAgICAg
ICAgICArIHRoaXMuZG9uZV9jb3VudCArICIgY29tcGxldGUsICIKKyAgICAgICAgICAgICAgICAg
ICAgKyB0ZXN0cy5udW1fcGVuZGluZyArICIgcmVtYWluIjsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgfQorICAgIH07CisKKyAgICBPdXRwdXQucHJvdG90eXBlLnNob3dfcmVzdWx0cyA9IGZ1bmN0
aW9uICh0ZXN0cywgaGFybmVzc19zdGF0dXMpCisgICAgeworICAgICAgICBpZiAodGhpcy5waGFz
ZSA+PSB0aGlzLkNPTVBMRVRFKSB7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAg
ICAgICAgaWYgKCF0aGlzLmVuYWJsZWQpIHsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAg
fQorICAgICAgICBpZiAoIXRoaXMub3V0cHV0X25vZGUpIHsKKyAgICAgICAgICAgIHRoaXMucmVz
b2x2ZV9sb2coKTsKKyAgICAgICAgfQorICAgICAgICB0aGlzLnBoYXNlID0gdGhpcy5DT01QTEVU
RTsKKworICAgICAgICB2YXIgbG9nID0gdGhpcy5vdXRwdXRfbm9kZTsKKyAgICAgICAgaWYgKCFs
b2cpIHsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICB2YXIgb3V0cHV0
X2RvY3VtZW50ID0gdGhpcy5vdXRwdXRfZG9jdW1lbnQ7CisKKyAgICAgICAgd2hpbGUgKGxvZy5s
YXN0Q2hpbGQpIHsKKyAgICAgICAgICAgIGxvZy5yZW1vdmVDaGlsZChsb2cubGFzdENoaWxkKTsK
KyAgICAgICAgfQorCisgICAgICAgIGlmIChzY3JpcHRfcHJlZml4ICE9IG51bGwpIHsKKyAgICAg
ICAgICAgIHZhciBzdHlsZXNoZWV0ID0gb3V0cHV0X2RvY3VtZW50LmNyZWF0ZUVsZW1lbnROUyh4
aHRtbF9ucywgImxpbmsiKTsKKyAgICAgICAgICAgIHN0eWxlc2hlZXQuc2V0QXR0cmlidXRlKCJy
ZWwiLCAic3R5bGVzaGVldCIpOworICAgICAgICAgICAgc3R5bGVzaGVldC5zZXRBdHRyaWJ1dGUo
ImhyZWYiLCBzY3JpcHRfcHJlZml4ICsgInRlc3RoYXJuZXNzLmNzcyIpOworICAgICAgICAgICAg
dmFyIGhlYWRzID0gb3V0cHV0X2RvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCJoZWFkIik7
CisgICAgICAgICAgICBpZiAoaGVhZHMubGVuZ3RoKSB7CisgICAgICAgICAgICAgICAgaGVhZHNb
MF0uYXBwZW5kQ2hpbGQoc3R5bGVzaGVldCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKwor
ICAgICAgICB2YXIgc3RhdHVzX3RleHRfaGFybmVzcyA9IHt9OworICAgICAgICBzdGF0dXNfdGV4
dF9oYXJuZXNzW2hhcm5lc3Nfc3RhdHVzLk9LXSA9ICJPSyI7CisgICAgICAgIHN0YXR1c190ZXh0
X2hhcm5lc3NbaGFybmVzc19zdGF0dXMuRVJST1JdID0gIkVycm9yIjsKKyAgICAgICAgc3RhdHVz
X3RleHRfaGFybmVzc1toYXJuZXNzX3N0YXR1cy5USU1FT1VUXSA9ICJUaW1lb3V0IjsKKworICAg
ICAgICB2YXIgc3RhdHVzX3RleHQgPSB7fTsKKyAgICAgICAgc3RhdHVzX3RleHRbVGVzdC5wcm90
b3R5cGUuUEFTU10gPSAiUGFzcyI7CisgICAgICAgIHN0YXR1c190ZXh0W1Rlc3QucHJvdG90eXBl
LkZBSUxdID0gIkZhaWwiOworICAgICAgICBzdGF0dXNfdGV4dFtUZXN0LnByb3RvdHlwZS5USU1F
T1VUXSA9ICJUaW1lb3V0IjsKKyAgICAgICAgc3RhdHVzX3RleHRbVGVzdC5wcm90b3R5cGUuTk9U
UlVOXSA9ICJOb3QgUnVuIjsKKworICAgICAgICB2YXIgc3RhdHVzX251bWJlciA9IHt9OworICAg
ICAgICBmb3JFYWNoKHRlc3RzLAorICAgICAgICAgICAgICAgIGZ1bmN0aW9uKHRlc3QpIHsKKyAg
ICAgICAgICAgICAgICAgICAgdmFyIHN0YXR1cyA9IHN0YXR1c190ZXh0W3Rlc3Quc3RhdHVzXTsK
KyAgICAgICAgICAgICAgICAgICAgaWYgKHN0YXR1c19udW1iZXIuaGFzT3duUHJvcGVydHkoc3Rh
dHVzKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgc3RhdHVzX251bWJlcltzdGF0dXNdICs9
IDE7CisgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAg
ICBzdGF0dXNfbnVtYmVyW3N0YXR1c10gPSAxOworICAgICAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICAgICAgfSk7CisKKyAgICAgICAgZnVuY3Rpb24gc3RhdHVzX2NsYXNzKHN0YXR1cykK
KyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIHN0YXR1cy5yZXBsYWNlKC9ccy9nLCAnJyku
dG9Mb3dlckNhc2UoKTsKKyAgICAgICAgfQorCisgICAgICAgIHZhciBzdW1tYXJ5X3RlbXBsYXRl
ID0gWyJzZWN0aW9uIiwgeyJpZCI6InN1bW1hcnkifSwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgWyJoMiIsIHt9LCAiU3VtbWFyeSJdLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBmdW5jdGlvbih2YXJzKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaGFybmVzc19zdGF0dXMu
c3RhdHVzID09PSBoYXJuZXNzX3N0YXR1cy5PSykgeworICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHJldHVybiBudWxsOworICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgc3Rh
dHVzID0gc3RhdHVzX3RleHRfaGFybmVzc1toYXJuZXNzX3N0YXR1cy5zdGF0dXNdOworICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHJ2ID0gW1sicCIsIHsiY2xhc3MiOnN0
YXR1c19jbGFzcyhzdGF0dXMpfV1dOworCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBpZiAoaGFybmVzc19zdGF0dXMuc3RhdHVzID09PSBoYXJuZXNzX3N0YXR1cy5FUlJPUikg
eworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJ2WzBdLnB1c2goIkhh
cm5lc3MgZW5jb3VudGVyZWQgYW4gZXJyb3I6Iik7CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgcnYucHVzaChbInByZSIsIHt9LCBoYXJuZXNzX3N0YXR1cy5tZXNzYWdl
XSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGhhcm5l
c3Nfc3RhdHVzLnN0YXR1cyA9PT0gaGFybmVzc19zdGF0dXMuVElNRU9VVCkgeworICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJ2WzBdLnB1c2goIkhhcm5lc3MgdGltZWQg
b3V0LiIpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBydlswXS5wdXNoKCJIYXJuZXNz
IGdvdCBhbiB1bmV4cGVjdGVkIHN0YXR1cy4iKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJu
IHJ2OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBbInAiLCB7fSwgIkZvdW5kICR7bnVtX3Rlc3RzfSB0ZXN0cyJdLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbih2YXJzKSB7CisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgcnYgPSBbWyJkaXYiLCB7fV1dOworICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGkgPSAwOworICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgd2hpbGUgKHN0YXR1c190ZXh0Lmhhc093blByb3BlcnR5
KGkpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHN0YXR1
c19udW1iZXIuaGFzT3duUHJvcGVydHkoc3RhdHVzX3RleHRbaV0pKSB7CisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBzdGF0dXMgPSBzdGF0dXNfdGV4dFtp
XTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcnZbMF0ucHVz
aChbImRpdiIsIHsiY2xhc3MiOnN0YXR1c19jbGFzcyhzdGF0dXMpfSwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWyJsYWJlbCIsIHt9LAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
WyJpbnB1dCIsIHt0eXBlOiJjaGVja2JveCIsIGNoZWNrZWQ6ImNoZWNrZWQifV0sCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0dXNf
bnVtYmVyW3N0YXR1c10gKyAiICIgKyBzdGF0dXNdXSk7CisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGkrKzsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBydjsKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgfV07CisKKyAgICAgICAgbG9nLmFwcGVuZENoaWxkKHJlbmRlcihzdW1t
YXJ5X3RlbXBsYXRlLCB7bnVtX3Rlc3RzOnRlc3RzLmxlbmd0aH0sIG91dHB1dF9kb2N1bWVudCkp
OworCisgICAgICAgIGZvckVhY2gob3V0cHV0X2RvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoInNl
Y3Rpb24jc3VtbWFyeSBsYWJlbCIpLAorICAgICAgICAgICAgICAgIGZ1bmN0aW9uKGVsZW1lbnQp
CisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBvbl9ldmVudChlbGVtZW50
LCAiY2xpY2siLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbihlKQorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBpZiAob3V0cHV0X2RvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJyZXN1bHRzIikgPT09IG51
bGwpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlLnByZXZlbnREZWZh
dWx0KCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgdmFyIHJlc3VsdF9jbGFzcyA9IGVsZW1lbnQucGFyZW50Tm9kZS5nZXRBdHRyaWJ1
dGUoImNsYXNzIik7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgc3R5bGVf
ZWxlbWVudCA9IG91dHB1dF9kb2N1bWVudC5xdWVyeVNlbGVjdG9yKCJzdHlsZSNoaWRlLSIgKyBy
ZXN1bHRfY2xhc3MpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGlucHV0
X2VsZW1lbnQgPSBlbGVtZW50LnF1ZXJ5U2VsZWN0b3IoImlucHV0Iik7CisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBpZiAoIXN0eWxlX2VsZW1lbnQgJiYgIWlucHV0X2VsZW1lbnQu
Y2hlY2tlZCkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0eWxlX2Vs
ZW1lbnQgPSBvdXRwdXRfZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKHhodG1sX25zLCAic3R5bGUi
KTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHlsZV9lbGVtZW50Lmlk
ID0gImhpZGUtIiArIHJlc3VsdF9jbGFzczsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBzdHlsZV9lbGVtZW50LnRleHRDb250ZW50ID0gInRhYmxlI3Jlc3VsdHMgPiB0Ym9k
eSA+IHRyLiIrcmVzdWx0X2NsYXNzKyJ7ZGlzcGxheTpub25lfSI7CisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgb3V0cHV0X2RvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoc3R5
bGVfZWxlbWVudCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYg
KHN0eWxlX2VsZW1lbnQgJiYgaW5wdXRfZWxlbWVudC5jaGVja2VkKSB7CisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgc3R5bGVfZWxlbWVudC5wYXJlbnROb2RlLnJlbW92ZUNo
aWxkKHN0eWxlX2VsZW1lbnQpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgICAgICB9KTsKKwor
ICAgICAgICAvLyBUaGlzIHVzZSBvZiBpbm5lckhUTUwgcGx1cyBtYW51YWwgZXNjYXBpbmcgaXMg
bm90IHJlY29tbWVuZGVkIGluCisgICAgICAgIC8vIGdlbmVyYWwsIGJ1dCBpcyBuZWNlc3Nhcnkg
aGVyZSBmb3IgcGVyZm9ybWFuY2UuICBVc2luZyB0ZXh0Q29udGVudAorICAgICAgICAvLyBvbiBl
YWNoIGluZGl2aWR1YWwgPHRkPiBhZGRzIHRlbnMgb2Ygc2Vjb25kcyBvZiBleGVjdXRpb24gdGlt
ZSBmb3IKKyAgICAgICAgLy8gbGFyZ2UgdGVzdCBzdWl0ZXMgKHRlbnMgb2YgdGhvdXNhbmRzIG9m
IHRlc3RzKS4KKyAgICAgICAgZnVuY3Rpb24gZXNjYXBlX2h0bWwocykKKyAgICAgICAgeworICAg
ICAgICAgICAgcmV0dXJuIHMucmVwbGFjZSgvXCYvZywgIiZhbXA7IikKKyAgICAgICAgICAgICAg
ICAucmVwbGFjZSgvPC9nLCAiJmx0OyIpCisgICAgICAgICAgICAgICAgLnJlcGxhY2UoLyIvZywg
IiZxdW90OyIpCisgICAgICAgICAgICAgICAgLnJlcGxhY2UoLycvZywgIiYjMzk7Iik7CisgICAg
ICAgIH0KKworICAgICAgICBmdW5jdGlvbiBoYXNfYXNzZXJ0aW9ucygpCisgICAgICAgIHsKKyAg
ICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGVzdHMubGVuZ3RoOyBpKyspIHsKKyAgICAg
ICAgICAgICAgICBpZiAodGVzdHNbaV0ucHJvcGVydGllcy5oYXNPd25Qcm9wZXJ0eSgiYXNzZXJ0
IikpIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisK
KyAgICAgICAgZnVuY3Rpb24gZ2V0X2Fzc2VydGlvbih0ZXN0KQorICAgICAgICB7CisgICAgICAg
ICAgICBpZiAodGVzdC5wcm9wZXJ0aWVzLmhhc093blByb3BlcnR5KCJhc3NlcnQiKSkgeworICAg
ICAgICAgICAgICAgIGlmIChBcnJheS5pc0FycmF5KHRlc3QucHJvcGVydGllcy5hc3NlcnQpKSB7
CisgICAgICAgICAgICAgICAgICAgIHJldHVybiB0ZXN0LnByb3BlcnRpZXMuYXNzZXJ0LmpvaW4o
JyAnKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgcmV0dXJuIHRlc3QucHJv
cGVydGllcy5hc3NlcnQ7CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4gJyc7Cisg
ICAgICAgIH0KKworICAgICAgICBsb2cuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlRWxlbWVu
dE5TKHhodG1sX25zLCAic2VjdGlvbiIpKTsKKyAgICAgICAgdmFyIGFzc2VydGlvbnMgPSBoYXNf
YXNzZXJ0aW9ucygpOworICAgICAgICB2YXIgaHRtbCA9ICI8aDI+RGV0YWlsczwvaDI+PHRhYmxl
IGlkPSdyZXN1bHRzJyAiICsgKGFzc2VydGlvbnMgPyAiY2xhc3M9J2Fzc2VydGlvbnMnIiA6ICIi
ICkgKyAiPiIKKyAgICAgICAgICAgICsgIjx0aGVhZD48dHI+PHRoPlJlc3VsdDwvdGg+PHRoPlRl
c3QgTmFtZTwvdGg+IgorICAgICAgICAgICAgKyAoYXNzZXJ0aW9ucyA/ICI8dGg+QXNzZXJ0aW9u
PC90aD4iIDogIiIpCisgICAgICAgICAgICArICI8dGg+TWVzc2FnZTwvdGg+PC90cj48L3RoZWFk
PiIKKyAgICAgICAgICAgICsgIjx0Ym9keT4iOworICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8
IHRlc3RzLmxlbmd0aDsgaSsrKSB7CisgICAgICAgICAgICBodG1sICs9ICc8dHIgY2xhc3M9IicK
KyAgICAgICAgICAgICAgICArIGVzY2FwZV9odG1sKHN0YXR1c19jbGFzcyhzdGF0dXNfdGV4dFt0
ZXN0c1tpXS5zdGF0dXNdKSkKKyAgICAgICAgICAgICAgICArICciPjx0ZD4nCisgICAgICAgICAg
ICAgICAgKyBlc2NhcGVfaHRtbChzdGF0dXNfdGV4dFt0ZXN0c1tpXS5zdGF0dXNdKQorICAgICAg
ICAgICAgICAgICsgIjwvdGQ+PHRkPiIKKyAgICAgICAgICAgICAgICArIGVzY2FwZV9odG1sKHRl
c3RzW2ldLm5hbWUpCisgICAgICAgICAgICAgICAgKyAiPC90ZD48dGQ+IgorICAgICAgICAgICAg
ICAgICsgKGFzc2VydGlvbnMgPyBlc2NhcGVfaHRtbChnZXRfYXNzZXJ0aW9uKHRlc3RzW2ldKSkg
KyAiPC90ZD48dGQ+IiA6ICIiKQorICAgICAgICAgICAgICAgICsgZXNjYXBlX2h0bWwodGVzdHNb
aV0ubWVzc2FnZSA/IHRlc3RzW2ldLm1lc3NhZ2UgOiAiICIpCisgICAgICAgICAgICAgICAgKyAi
PC90ZD48L3RyPiI7CisgICAgICAgIH0KKyAgICAgICAgaHRtbCArPSAiPC90Ym9keT48L3RhYmxl
PiI7CisgICAgICAgIHRyeSB7CisgICAgICAgICAgICBsb2cubGFzdENoaWxkLmlubmVySFRNTCA9
IGh0bWw7CisgICAgICAgIH0gY2F0Y2ggKGUpIHsKKyAgICAgICAgICAgIGxvZy5hcHBlbmRDaGls
ZChkb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoeGh0bWxfbnMsICJwIikpCisgICAgICAgICAgICAg
ICAudGV4dENvbnRlbnQgPSAiU2V0dGluZyBpbm5lckhUTUwgZm9yIHRoZSBsb2cgdGhyZXcgYW4g
ZXhjZXB0aW9uLiI7CisgICAgICAgICAgICBsb2cuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRl
RWxlbWVudE5TKHhodG1sX25zLCAicHJlIikpCisgICAgICAgICAgICAgICAudGV4dENvbnRlbnQg
PSBodG1sOworICAgICAgICB9CisgICAgfTsKKworICAgIHZhciBvdXRwdXQgPSBuZXcgT3V0cHV0
KCk7CisgICAgYWRkX3N0YXJ0X2NhbGxiYWNrKGZ1bmN0aW9uIChwcm9wZXJ0aWVzKSB7b3V0cHV0
LmluaXQocHJvcGVydGllcyk7fSk7CisgICAgYWRkX3Jlc3VsdF9jYWxsYmFjayhmdW5jdGlvbiAo
dGVzdCkge291dHB1dC5zaG93X3N0YXR1cyh0ZXN0cyk7fSk7CisgICAgYWRkX2NvbXBsZXRpb25f
Y2FsbGJhY2soZnVuY3Rpb24gKHRlc3RzLCBoYXJuZXNzX3N0YXR1cykge291dHB1dC5zaG93X3Jl
c3VsdHModGVzdHMsIGhhcm5lc3Nfc3RhdHVzKTt9KTsKKworICAgIC8qCisgICAgICogVGVtcGxh
dGUgY29kZQorICAgICAqCisgICAgICogQSB0ZW1wbGF0ZSBpcyBqdXN0IGEgamF2YXNjcmlwdCBz
dHJ1Y3R1cmUuIEFuIGVsZW1lbnQgaXMgcmVwcmVzZW50ZWQgYXM6CisgICAgICoKKyAgICAgKiBb
dGFnX25hbWUsIHthdHRyX25hbWU6YXR0cl92YWx1ZX0sIGNoaWxkMSwgY2hpbGQyXQorICAgICAq
CisgICAgICogdGhlIGNoaWxkcmVuIGNhbiBlaXRoZXIgYmUgc3RyaW5ncyAod2hpY2ggYWN0IGxp
a2UgdGV4dCBub2RlcyksIG90aGVyIHRlbXBsYXRlcyBvcgorICAgICAqIGZ1bmN0aW9ucyAoc2Vl
IGJlbG93KQorICAgICAqCisgICAgICogQSB0ZXh0IG5vZGUgaXMgcmVwcmVzZW50ZWQgYXMKKyAg
ICAgKgorICAgICAqIFsie3RleHR9IiwgdmFsdWVdCisgICAgICoKKyAgICAgKiBTdHJpbmcgdmFs
dWVzIGhhdmUgYSBzaW1wbGUgc3Vic3RpdHV0aW9uIHN5bnRheDsgJHtmb299IHJlcHJlc2VudHMg
YSB2YXJpYWJsZSBmb28uCisgICAgICoKKyAgICAgKiBJdCBpcyBwb3NzaWJsZSB0byBlbWJlZCBs
b2dpYyBpbiB0ZW1wbGF0ZXMgYnkgdXNpbmcgYSBmdW5jdGlvbiBpbiBhIHBsYWNlIHdoZXJlIGEK
KyAgICAgKiBub2RlIHdvdWxkIHVzdWFsbHkgZ28uIFRoZSBmdW5jdGlvbiBtdXN0IGVpdGhlciBy
ZXR1cm4gcGFydCBvZiBhIHRlbXBsYXRlIG9yIG51bGwuCisgICAgICoKKyAgICAgKiBJbiBjYXNl
cyB3aGVyZSBhIHNldCBvZiBub2RlcyBhcmUgcmVxdWlyZWQgYXMgb3V0cHV0IHJhdGhlciB0aGFu
IGEgc2luZ2xlIG5vZGUKKyAgICAgKiB3aXRoIGNoaWxkcmVuIGl0IGlzIHBvc3NpYmxlIHRvIGp1
c3QgdXNlIGEgbGlzdAorICAgICAqIFtub2RlMSwgbm9kZTIsIG5vZGUzXQorICAgICAqCisgICAg
ICogVXNhZ2U6CisgICAgICoKKyAgICAgKiByZW5kZXIodGVtcGxhdGUsIHN1YnN0aXR1dGlvbnMp
IC0gdGFrZSBhIHRlbXBsYXRlIGFuZCBhbiBvYmplY3QgbWFwcGluZworICAgICAqIHZhcmlhYmxl
IG5hbWVzIHRvIHBhcmFtZXRlcnMgYW5kIHJldHVybiBlaXRoZXIgYSBET00gbm9kZSBvciBhIGxp
c3Qgb2YgRE9NIG5vZGVzCisgICAgICoKKyAgICAgKiBzdWJzdGl0dXRlKHRlbXBsYXRlLCBzdWJz
dGl0dXRpb25zKSAtIHRha2UgYSB0ZW1wbGF0ZSBhbmQgdmFyaWFibGUgbWFwcGluZyBvYmplY3Qs
CisgICAgICogbWFrZSB0aGUgdmFyaWFibGUgc3Vic3RpdHV0aW9ucyBhbmQgcmV0dXJuIHRoZSBz
dWJzdGl0dXRlZCB0ZW1wbGF0ZQorICAgICAqCisgICAgICovCisKKyAgICBmdW5jdGlvbiBpc19z
aW5nbGVfbm9kZSh0ZW1wbGF0ZSkKKyAgICB7CisgICAgICAgIHJldHVybiB0eXBlb2YgdGVtcGxh
dGVbMF0gPT09ICJzdHJpbmciOworICAgIH0KKworICAgIGZ1bmN0aW9uIHN1YnN0aXR1dGUodGVt
cGxhdGUsIHN1YnN0aXR1dGlvbnMpCisgICAgeworICAgICAgICBpZiAodHlwZW9mIHRlbXBsYXRl
ID09PSAiZnVuY3Rpb24iKSB7CisgICAgICAgICAgICB2YXIgcmVwbGFjZW1lbnQgPSB0ZW1wbGF0
ZShzdWJzdGl0dXRpb25zKTsKKyAgICAgICAgICAgIGlmICghcmVwbGFjZW1lbnQpIHsKKyAgICAg
ICAgICAgICAgICByZXR1cm4gbnVsbDsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgcmV0
dXJuIHN1YnN0aXR1dGUocmVwbGFjZW1lbnQsIHN1YnN0aXR1dGlvbnMpOworICAgICAgICB9CisK
KyAgICAgICAgaWYgKGlzX3NpbmdsZV9ub2RlKHRlbXBsYXRlKSkgeworICAgICAgICAgICAgcmV0
dXJuIHN1YnN0aXR1dGVfc2luZ2xlKHRlbXBsYXRlLCBzdWJzdGl0dXRpb25zKTsKKyAgICAgICAg
fQorCisgICAgICAgIHJldHVybiBmaWx0ZXIobWFwKHRlbXBsYXRlLCBmdW5jdGlvbih4KSB7Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gc3Vic3RpdHV0ZSh4LCBzdWJzdGl0
dXRpb25zKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgfSksIGZ1bmN0aW9uKHgpIHtyZXR1
cm4geCAhPT0gbnVsbDt9KTsKKyAgICB9CisKKyAgICBmdW5jdGlvbiBzdWJzdGl0dXRlX3Npbmds
ZSh0ZW1wbGF0ZSwgc3Vic3RpdHV0aW9ucykKKyAgICB7CisgICAgICAgIHZhciBzdWJzdGl0dXRp
b25fcmUgPSAvXCR7KFteIH1dKil9L2c7CisKKyAgICAgICAgZnVuY3Rpb24gZG9fc3Vic3RpdHV0
aW9uKGlucHV0KSB7CisgICAgICAgICAgICB2YXIgY29tcG9uZW50cyA9IGlucHV0LnNwbGl0KHN1
YnN0aXR1dGlvbl9yZSk7CisgICAgICAgICAgICB2YXIgcnYgPSBbXTsKKyAgICAgICAgICAgIGZv
ciAodmFyIGkgPSAwOyBpIDwgY29tcG9uZW50cy5sZW5ndGg7IGkgKz0gMikgeworICAgICAgICAg
ICAgICAgIHJ2LnB1c2goY29tcG9uZW50c1tpXSk7CisgICAgICAgICAgICAgICAgaWYgKGNvbXBv
bmVudHNbaSArIDFdKSB7CisgICAgICAgICAgICAgICAgICAgIHJ2LnB1c2goU3RyaW5nKHN1YnN0
aXR1dGlvbnNbY29tcG9uZW50c1tpICsgMV1dKSk7CisgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgfQorICAgICAgICAgICAgcmV0dXJuIHJ2OworICAgICAgICB9CisKKyAgICAgICAgdmFy
IHJ2ID0gW107CisgICAgICAgIHJ2LnB1c2goZG9fc3Vic3RpdHV0aW9uKFN0cmluZyh0ZW1wbGF0
ZVswXSkpLmpvaW4oIiIpKTsKKworICAgICAgICBpZiAodGVtcGxhdGVbMF0gPT09ICJ7dGV4dH0i
KSB7CisgICAgICAgICAgICBzdWJzdGl0dXRlX2NoaWxkcmVuKHRlbXBsYXRlLnNsaWNlKDEpLCBy
dik7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBzdWJzdGl0dXRlX2F0dHJzKHRlbXBs
YXRlWzFdLCBydik7CisgICAgICAgICAgICBzdWJzdGl0dXRlX2NoaWxkcmVuKHRlbXBsYXRlLnNs
aWNlKDIpLCBydik7CisgICAgICAgIH0KKworICAgICAgICBmdW5jdGlvbiBzdWJzdGl0dXRlX2F0
dHJzKGF0dHJzLCBydikKKyAgICAgICAgeworICAgICAgICAgICAgcnZbMV0gPSB7fTsKKyAgICAg
ICAgICAgIGZvciAodmFyIG5hbWUgaW4gdGVtcGxhdGVbMV0pIHsKKyAgICAgICAgICAgICAgICBp
ZiAoYXR0cnMuaGFzT3duUHJvcGVydHkobmFtZSkpIHsKKyAgICAgICAgICAgICAgICAgICAgdmFy
IG5ld19uYW1lID0gZG9fc3Vic3RpdHV0aW9uKG5hbWUpLmpvaW4oIiIpOworICAgICAgICAgICAg
ICAgICAgICB2YXIgbmV3X3ZhbHVlID0gZG9fc3Vic3RpdHV0aW9uKGF0dHJzW25hbWVdKS5qb2lu
KCIiKTsKKyAgICAgICAgICAgICAgICAgICAgcnZbMV1bbmV3X25hbWVdID0gbmV3X3ZhbHVlOwor
ICAgICAgICAgICAgICAgIH07CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBm
dW5jdGlvbiBzdWJzdGl0dXRlX2NoaWxkcmVuKGNoaWxkcmVuLCBydikKKyAgICAgICAgeworICAg
ICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBjaGlsZHJlbi5sZW5ndGg7IGkrKykgeworICAg
ICAgICAgICAgICAgIGlmIChjaGlsZHJlbltpXSBpbnN0YW5jZW9mIE9iamVjdCkgeworICAgICAg
ICAgICAgICAgICAgICB2YXIgcmVwbGFjZW1lbnQgPSBzdWJzdGl0dXRlKGNoaWxkcmVuW2ldLCBz
dWJzdGl0dXRpb25zKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHJlcGxhY2VtZW50ICE9PSBu
dWxsKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaXNfc2luZ2xlX25vZGUocmVwbGFj
ZW1lbnQpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcnYucHVzaChyZXBsYWNlbWVu
dCk7CisgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGV4dGVuZChydiwgcmVwbGFjZW1lbnQpOworICAgICAgICAgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAg
ICAgICAgICAgICAgICAgICAgZXh0ZW5kKHJ2LCBkb19zdWJzdGl0dXRpb24oU3RyaW5nKGNoaWxk
cmVuW2ldKSkpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IHJldHVybiBydjsKKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiBydjsKKyAgICB9CisKKyAg
ICBmdW5jdGlvbiBtYWtlX2RvbV9zaW5nbGUodGVtcGxhdGUsIGRvYykKKyAgICB7CisgICAgICAg
IHZhciBvdXRwdXRfZG9jdW1lbnQgPSBkb2MgfHwgZG9jdW1lbnQ7CisgICAgICAgIGlmICh0ZW1w
bGF0ZVswXSA9PT0gInt0ZXh0fSIpIHsKKyAgICAgICAgICAgIHZhciBlbGVtZW50ID0gb3V0cHV0
X2RvY3VtZW50LmNyZWF0ZVRleHROb2RlKCIiKTsKKyAgICAgICAgICAgIGZvciAodmFyIGkgPSAx
OyBpIDwgdGVtcGxhdGUubGVuZ3RoOyBpKyspIHsKKyAgICAgICAgICAgICAgICBlbGVtZW50LmRh
dGEgKz0gdGVtcGxhdGVbaV07CisgICAgICAgICAgICB9CisgICAgICAgIH0gZWxzZSB7CisgICAg
ICAgICAgICB2YXIgZWxlbWVudCA9IG91dHB1dF9kb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoeGh0
bWxfbnMsIHRlbXBsYXRlWzBdKTsKKyAgICAgICAgICAgIGZvciAodmFyIG5hbWUgaW4gdGVtcGxh
dGVbMV0pIHsKKyAgICAgICAgICAgICAgICBpZiAodGVtcGxhdGVbMV0uaGFzT3duUHJvcGVydHko
bmFtZSkpIHsKKyAgICAgICAgICAgICAgICAgICAgZWxlbWVudC5zZXRBdHRyaWJ1dGUobmFtZSwg
dGVtcGxhdGVbMV1bbmFtZV0pOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIGZvciAodmFyIGkgPSAyOyBpIDwgdGVtcGxhdGUubGVuZ3RoOyBpKyspIHsKKyAg
ICAgICAgICAgICAgICBpZiAodGVtcGxhdGVbaV0gaW5zdGFuY2VvZiBPYmplY3QpIHsKKyAgICAg
ICAgICAgICAgICAgICAgdmFyIHN1Yl9lbGVtZW50ID0gbWFrZV9kb20odGVtcGxhdGVbaV0pOwor
ICAgICAgICAgICAgICAgICAgICBlbGVtZW50LmFwcGVuZENoaWxkKHN1Yl9lbGVtZW50KTsKKyAg
ICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICB2YXIgdGV4dF9ub2Rl
ID0gb3V0cHV0X2RvY3VtZW50LmNyZWF0ZVRleHROb2RlKHRlbXBsYXRlW2ldKTsKKyAgICAgICAg
ICAgICAgICAgICAgZWxlbWVudC5hcHBlbmRDaGlsZCh0ZXh0X25vZGUpOworICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiBlbGVtZW50
OworICAgIH0KKworCisKKyAgICBmdW5jdGlvbiBtYWtlX2RvbSh0ZW1wbGF0ZSwgc3Vic3RpdHV0
aW9ucywgb3V0cHV0X2RvY3VtZW50KQorICAgIHsKKyAgICAgICAgaWYgKGlzX3NpbmdsZV9ub2Rl
KHRlbXBsYXRlKSkgeworICAgICAgICAgICAgcmV0dXJuIG1ha2VfZG9tX3NpbmdsZSh0ZW1wbGF0
ZSwgb3V0cHV0X2RvY3VtZW50KTsKKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiBtYXAodGVt
cGxhdGUsIGZ1bmN0aW9uKHgpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG1ha2Vf
ZG9tX3NpbmdsZSh4LCBvdXRwdXRfZG9jdW1lbnQpOworICAgICAgICAgICAgICAgICAgIH0pOwor
ICAgIH0KKworICAgIGZ1bmN0aW9uIHJlbmRlcih0ZW1wbGF0ZSwgc3Vic3RpdHV0aW9ucywgb3V0
cHV0X2RvY3VtZW50KQorICAgIHsKKyAgICAgICAgcmV0dXJuIG1ha2VfZG9tKHN1YnN0aXR1dGUo
dGVtcGxhdGUsIHN1YnN0aXR1dGlvbnMpLCBvdXRwdXRfZG9jdW1lbnQpOworICAgIH0KKworICAg
IC8qCisgICAgICogVXRpbGl0eSBmdW5jaW9ucworICAgICAqLworICAgIGZ1bmN0aW9uIGFzc2Vy
dChleHBlY3RlZF90cnVlLCBmdW5jdGlvbl9uYW1lLCBkZXNjcmlwdGlvbiwgZXJyb3IsIHN1YnN0
aXR1dGlvbnMpCisgICAgeworICAgICAgICBpZiAoZXhwZWN0ZWRfdHJ1ZSAhPT0gdHJ1ZSkgewor
ICAgICAgICAgICAgdGhyb3cgbmV3IEFzc2VydGlvbkVycm9yKG1ha2VfbWVzc2FnZShmdW5jdGlv
bl9uYW1lLCBkZXNjcmlwdGlvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgZXJyb3IsIHN1YnN0aXR1dGlvbnMpKTsKKyAgICAgICAgfQorICAgIH0K
KworICAgIGZ1bmN0aW9uIEFzc2VydGlvbkVycm9yKG1lc3NhZ2UpCisgICAgeworICAgICAgICB0
aGlzLm1lc3NhZ2UgPSBtZXNzYWdlOworICAgIH0KKworICAgIGZ1bmN0aW9uIG1ha2VfbWVzc2Fn
ZShmdW5jdGlvbl9uYW1lLCBkZXNjcmlwdGlvbiwgZXJyb3IsIHN1YnN0aXR1dGlvbnMpCisgICAg
eworICAgICAgICBmb3IgKHZhciBwIGluIHN1YnN0aXR1dGlvbnMpIHsKKyAgICAgICAgICAgIGlm
IChzdWJzdGl0dXRpb25zLmhhc093blByb3BlcnR5KHApKSB7CisgICAgICAgICAgICAgICAgc3Vi
c3RpdHV0aW9uc1twXSA9IGZvcm1hdF92YWx1ZShzdWJzdGl0dXRpb25zW3BdKTsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgfQorICAgICAgICB2YXIgbm9kZV9mb3JtID0gc3Vic3RpdHV0ZShbInt0
ZXh0fSIsICIke2Z1bmN0aW9uX25hbWV9OiAke2Rlc2NyaXB0aW9ufSIgKyBlcnJvcl0sCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lcmdlKHtmdW5jdGlvbl9uYW1lOmZ1bmN0
aW9uX25hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXNj
cmlwdGlvbjooZGVzY3JpcHRpb24/ZGVzY3JpcHRpb24gKyAiICI6IiIpfSwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN1YnN0aXR1dGlvbnMpKTsKKyAgICAgICAg
cmV0dXJuIG5vZGVfZm9ybS5zbGljZSgxKS5qb2luKCIiKTsKKyAgICB9CisKKyAgICBmdW5jdGlv
biBmaWx0ZXIoYXJyYXksIGNhbGxhYmxlLCB0aGlzT2JqKSB7CisgICAgICAgIHZhciBydiA9IFtd
OworICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGFycmF5Lmxlbmd0aDsgaSsrKSB7CisgICAg
ICAgICAgICBpZiAoYXJyYXkuaGFzT3duUHJvcGVydHkoaSkpIHsKKyAgICAgICAgICAgICAgICB2
YXIgcGFzcyA9IGNhbGxhYmxlLmNhbGwodGhpc09iaiwgYXJyYXlbaV0sIGksIGFycmF5KTsKKyAg
ICAgICAgICAgICAgICBpZiAocGFzcykgeworICAgICAgICAgICAgICAgICAgICBydi5wdXNoKGFy
cmF5W2ldKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAg
ICAgICAgcmV0dXJuIHJ2OworICAgIH0KKworICAgIGZ1bmN0aW9uIG1hcChhcnJheSwgY2FsbGFi
bGUsIHRoaXNPYmopCisgICAgeworICAgICAgICB2YXIgcnYgPSBbXTsKKyAgICAgICAgcnYubGVu
Z3RoID0gYXJyYXkubGVuZ3RoOworICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGFycmF5Lmxl
bmd0aDsgaSsrKSB7CisgICAgICAgICAgICBpZiAoYXJyYXkuaGFzT3duUHJvcGVydHkoaSkpIHsK
KyAgICAgICAgICAgICAgICBydltpXSA9IGNhbGxhYmxlLmNhbGwodGhpc09iaiwgYXJyYXlbaV0s
IGksIGFycmF5KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICByZXR1cm4gcnY7
CisgICAgfQorCisgICAgZnVuY3Rpb24gZXh0ZW5kKGFycmF5LCBpdGVtcykKKyAgICB7CisgICAg
ICAgIEFycmF5LnByb3RvdHlwZS5wdXNoLmFwcGx5KGFycmF5LCBpdGVtcyk7CisgICAgfQorCisg
ICAgZnVuY3Rpb24gZm9yRWFjaCAoYXJyYXksIGNhbGxiYWNrLCB0aGlzT2JqKQorICAgIHsKKyAg
ICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhcnJheS5sZW5ndGg7IGkrKykgeworICAgICAgICAg
ICAgaWYgKGFycmF5Lmhhc093blByb3BlcnR5KGkpKSB7CisgICAgICAgICAgICAgICAgY2FsbGJh
Y2suY2FsbCh0aGlzT2JqLCBhcnJheVtpXSwgaSwgYXJyYXkpOworICAgICAgICAgICAgfQorICAg
ICAgICB9CisgICAgfQorCisgICAgZnVuY3Rpb24gbWVyZ2UoYSxiKQorICAgIHsKKyAgICAgICAg
dmFyIHJ2ID0ge307CisgICAgICAgIHZhciBwOworICAgICAgICBmb3IgKHAgaW4gYSkgeworICAg
ICAgICAgICAgcnZbcF0gPSBhW3BdOworICAgICAgICB9CisgICAgICAgIGZvciAocCBpbiBiKSB7
CisgICAgICAgICAgICBydltwXSA9IGJbcF07CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHJ2
OworICAgIH0KKworICAgIGZ1bmN0aW9uIGV4cG9zZShvYmplY3QsIG5hbWUpCisgICAgeworICAg
ICAgICB2YXIgY29tcG9uZW50cyA9IG5hbWUuc3BsaXQoIi4iKTsKKyAgICAgICAgdmFyIHRhcmdl
dCA9IHdpbmRvdzsKKyAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBjb21wb25lbnRzLmxlbmd0
aCAtIDE7IGkrKykgeworICAgICAgICAgICAgaWYgKCEoY29tcG9uZW50c1tpXSBpbiB0YXJnZXQp
KSB7CisgICAgICAgICAgICAgICAgdGFyZ2V0W2NvbXBvbmVudHNbaV1dID0ge307CisgICAgICAg
ICAgICB9CisgICAgICAgICAgICB0YXJnZXQgPSB0YXJnZXRbY29tcG9uZW50c1tpXV07CisgICAg
ICAgIH0KKyAgICAgICAgdGFyZ2V0W2NvbXBvbmVudHNbY29tcG9uZW50cy5sZW5ndGggLSAxXV0g
PSBvYmplY3Q7CisgICAgfQorCisgICAgZnVuY3Rpb24gZm9yRWFjaF93aW5kb3dzKGNhbGxiYWNr
KSB7CisgICAgICAgIC8vIEl0ZXJhdGUgb2YgdGhlIHRoZSB3aW5kb3dzIFtzZWxmIC4uLiB0b3As
IG9wZW5lcl0uIFRoZSBjYWxsYmFjayBpcyBwYXNzZWQKKyAgICAgICAgLy8gdHdvIG9iamVjdHMs
IHRoZSBmaXJzdCBvbmUgaXMgdGhlIHdpbmRvd3Mgb2JqZWN0IGl0c2VsZiwgdGhlIHNlY29uZCBv
bmUKKyAgICAgICAgLy8gaXMgYSBib29sZWFuIGluZGljYXRpbmcgd2hldGhlciBvciBub3QgaXRz
IG9uIHRoZSBzYW1lIG9yaWdpbiBhcyB0aGUKKyAgICAgICAgLy8gY3VycmVudCB3aW5kb3cuCisg
ICAgICAgIHZhciBjYWNoZSA9IGZvckVhY2hfd2luZG93cy5yZXN1bHRfY2FjaGU7CisgICAgICAg
IGlmICghY2FjaGUpIHsKKyAgICAgICAgICAgIGNhY2hlID0gW1tzZWxmLCB0cnVlXV07CisgICAg
ICAgICAgICB2YXIgdyA9IHNlbGY7CisgICAgICAgICAgICB2YXIgaSA9IDA7CisgICAgICAgICAg
ICB2YXIgc287CisgICAgICAgICAgICB2YXIgb3JpZ2lucyA9IGxvY2F0aW9uLmFuY2VzdG9yT3Jp
Z2luczsKKyAgICAgICAgICAgIHdoaWxlICh3ICE9IHcucGFyZW50KSB7CisgICAgICAgICAgICAg
ICAgdyA9IHcucGFyZW50OworICAgICAgICAgICAgICAgIC8vIEluIFdlYktpdCwgY2FsbHMgdG8g
cGFyZW50IHdpbmRvd3MnIHByb3BlcnRpZXMgdGhhdCBhcmVuJ3Qgb24gdGhlIHNhbWUKKyAgICAg
ICAgICAgICAgICAvLyBvcmlnaW4gY2F1c2UgYW4gZXJyb3IgbWVzc2FnZSB0byBiZSBkaXNwbGF5
ZWQgaW4gdGhlIGVycm9yIGNvbnNvbGUgYnV0CisgICAgICAgICAgICAgICAgLy8gZG9uJ3QgdGhy
b3cgYW4gZXhjZXB0aW9uLiBUaGlzIGlzIGEgZGV2aWF0aW9uIGZyb20gdGhlIGN1cnJlbnQgSFRN
TDUKKyAgICAgICAgICAgICAgICAvLyBzcGVjLiBTZWU6IGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD00MzUwNAorICAgICAgICAgICAgICAgIC8vIFRoZSBwcm9ibGVtIHdp
dGggV2ViS2l0J3MgYmVoYXZpb3IgaXMgdGhhdCBpdCBwb2xsdXRlcyB0aGUgZXJyb3IgY29uc29s
ZQorICAgICAgICAgICAgICAgIC8vIHdpdGggZXJyb3IgbWVzc2FnZXMgdGhhdCBjYW4ndCBiZSBj
YXVnaHQuCisgICAgICAgICAgICAgICAgLy8KKyAgICAgICAgICAgICAgICAvLyBUaGlzIGlzc3Vl
IGNhbiBiZSBtaXRpZ2F0ZWQgYnkgcmVseWluZyBvbiB0aGUgKGZvciBub3cpIHByb3ByaWV0YXJ5
CisgICAgICAgICAgICAgICAgLy8gYGxvY2F0aW9uLmFuY2VzdG9yT3JpZ2luc2AgcHJvcGVydHkg
d2hpY2ggcmV0dXJucyBhbiBvcmRlcmVkIGxpc3Qgb2YKKyAgICAgICAgICAgICAgICAvLyB0aGUg
b3JpZ2lucyBvZiBlbmNsb3Npbmcgd2luZG93cy4gU2VlOgorICAgICAgICAgICAgICAgIC8vIGh0
dHA6Ly90cmFjLndlYmtpdC5vcmcvY2hhbmdlc2V0LzExMzk0NS4KKyAgICAgICAgICAgICAgICBp
ZiAob3JpZ2lucykgeworICAgICAgICAgICAgICAgICAgICBzbyA9IChsb2NhdGlvbi5vcmlnaW4g
PT0gb3JpZ2luc1tpXSk7CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAg
ICAgICAgc28gPSBpc19zYW1lX29yaWdpbih3KTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICAgICAgY2FjaGUucHVzaChbdywgc29dKTsKKyAgICAgICAgICAgICAgICBpKys7CisgICAg
ICAgICAgICB9CisgICAgICAgICAgICB3ID0gd2luZG93Lm9wZW5lcjsKKyAgICAgICAgICAgIGlm
ICh3KSB7CisgICAgICAgICAgICAgICAgLy8gd2luZG93Lm9wZW5lciBpc24ndCBpbmNsdWRlZCBp
biB0aGUgYGxvY2F0aW9uLmFuY2VzdG9yT3JpZ2luc2AgcHJvcC4KKyAgICAgICAgICAgICAgICAv
LyBXZSdsbCBqdXN0IGhhdmUgdG8gZGVhbCB3aXRoIGEgc2ltcGxlIGNoZWNrIGFuZCBhbiBlcnJv
ciBtc2cgb24gV2ViS2l0CisgICAgICAgICAgICAgICAgLy8gYnJvd3NlcnMgaW4gdGhpcyBjYXNl
LgorICAgICAgICAgICAgICAgIGNhY2hlLnB1c2goW3csIGlzX3NhbWVfb3JpZ2luKHcpXSk7Cisg
ICAgICAgICAgICB9CisgICAgICAgICAgICBmb3JFYWNoX3dpbmRvd3MucmVzdWx0X2NhY2hlID0g
Y2FjaGU7CisgICAgICAgIH0KKworICAgICAgICBmb3JFYWNoKGNhY2hlLAorICAgICAgICAgICAg
ICAgIGZ1bmN0aW9uKGEpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBj
YWxsYmFjay5hcHBseShudWxsLCBhKTsKKyAgICAgICAgICAgICAgICB9KTsKKyAgICB9CisKKyAg
ICBmdW5jdGlvbiBpc19zYW1lX29yaWdpbih3KSB7CisgICAgICAgIHRyeSB7CisgICAgICAgICAg
ICAncmFuZG9tX3Byb3AnIGluIHc7CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAg
fSBjYXRjaCAoZSkgeworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAg
fQorCisgICAgZnVuY3Rpb24gc3VwcG9ydHNfcG9zdF9tZXNzYWdlKHcpCisgICAgeworICAgICAg
ICB2YXIgc3VwcG9ydHM7CisgICAgICAgIHZhciB0eXBlOworICAgICAgICAvLyBHaXZlbiBJRSAg
aW1wbGVtZW50cyBwb3N0TWVzc2FnZSBhY3Jvc3MgbmVzdGVkIGlmcmFtZXMgYnV0IG5vdCBhY3Jv
c3MKKyAgICAgICAgLy8gd2luZG93cyBvciB0YWJzLCB5b3UgY2FuJ3QgaW5mZXIgY3Jvc3Mtb3Jp
Z2luIGNvbW11bmljYXRpb24gZnJvbSB0aGUgcHJlc2VuY2UKKyAgICAgICAgLy8gb2YgcG9zdE1l
c3NhZ2Ugb24gdGhlIGN1cnJlbnQgd2luZG93IG9iamVjdCBvbmx5LgorICAgICAgICAvLworICAg
ICAgICAvLyBUb3VjaGluZyB0aGUgcG9zdE1lc3NhZ2UgcHJvcCBvbiBhIHdpbmRvdyBjYW4gdGhy
b3cgaWYgdGhlIHdpbmRvdyBpcworICAgICAgICAvLyBub3QgZnJvbSB0aGUgc2FtZSBvcmlnaW4g
QU5EIHBvc3QgbWVzc2FnZSBpcyBub3Qgc3VwcG9ydGVkIGluIHRoYXQKKyAgICAgICAgLy8gYnJv
d3Nlci4gU28ganVzdCBkb2luZyBhbiBleGlzdGVuY2UgdGVzdCBoZXJlIHdvbid0IGRvLCB5b3Ug
YWxzbyBuZWVkCisgICAgICAgIC8vIHRvIHdyYXAgaXQgaW4gYSB0cnkuLmNhY3RoIGJsb2NrLgor
ICAgICAgICB0cnkgeworICAgICAgICAgICAgdHlwZSA9IHR5cGVvZiB3LnBvc3RNZXNzYWdlOwor
ICAgICAgICAgICAgaWYgKHR5cGUgPT09ICJmdW5jdGlvbiIpIHsKKyAgICAgICAgICAgICAgICBz
dXBwb3J0cyA9IHRydWU7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIC8vIElFOCBzdXBw
b3J0cyBwb3N0TWVzc2FnZSwgYnV0IGltcGxlbWVudHMgaXQgYXMgYSBob3N0IG9iamVjdCB3aGlj
aAorICAgICAgICAgICAgLy8gcmV0dXJucyAib2JqZWN0IiBhcyBpdHMgYHR5cGVvZmAuCisgICAg
ICAgICAgICBlbHNlIGlmICh0eXBlID09PSAib2JqZWN0IikgeworICAgICAgICAgICAgICAgIHN1
cHBvcnRzID0gdHJ1ZTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgLy8gVGhpcyBpcyB0
aGUgY2FzZSB3aGVyZSBwb3N0TWVzc2FnZSBpc24ndCBzdXBwb3J0ZWQgQU5EIGFjY2Vzc2luZyBh
CisgICAgICAgICAgICAvLyB3aW5kb3cgcHJvcGVydHkgYWNyb3NzIG9yaWdpbnMgZG9lcyBOT1Qg
dGhyb3cgKGUuZy4gb2xkIFNhZmFyaSBicm93c2VyKS4KKyAgICAgICAgICAgIGVsc2UgeworICAg
ICAgICAgICAgICAgIHN1cHBvcnRzID0gZmFsc2U7CisgICAgICAgICAgICB9CisgICAgICAgIH0g
Y2F0Y2ggKGUpIHsKKyAgICAgICAgICAgIC8vIFRoaXMgaXMgdGhlIGNhc2Ugd2hlcmUgcG9zdE1l
c3NhZ2UgaXNuJ3Qgc3VwcG9ydGVkIEFORCBhY2Nlc3NpbmcgYQorICAgICAgICAgICAgLy8gd2lu
ZG93IHByb3BlcnR5IGFjcm9zcyBvcmlnaW5zIHRocm93cyAoZS5nLiBvbGQgRmlyZWZveCBicm93
c2VyKS4KKyAgICAgICAgICAgIHN1cHBvcnRzID0gZmFsc2U7CisgICAgICAgIH0KKyAgICAgICAg
cmV0dXJuIHN1cHBvcnRzOworICAgIH0KK30pKCk7CisvLyB2aW06IHNldCBleHBhbmR0YWIgc2hp
ZnR3aWR0aD00IHRhYnN0b3A9NDoK
</data>
<flag name="review"
          id="259343"
          type_id="1"
          status="+"
          setter="eric.carlson"
    />
          </attachment>
      

    </bug>

</bugzilla>