<?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>220547</bug_id>
          
          <creation_ts>2021-01-12 09:25:16 -0800</creation_ts>
          <short_desc>[webkitcorepy] Add TaskPool</short_desc>
          <delta_ts>2021-10-01 12:46:13 -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>Tools / Tests</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          <see_also>https://bugs.webkit.org/show_bug.cgi?id=217680</see_also>
    
    <see_also>https://bugs.webkit.org/show_bug.cgi?id=220791</see_also>
    
    <see_also>https://bugs.webkit.org/show_bug.cgi?id=227715</see_also>
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Jonathan Bedard">jbedard</reporter>
          <assigned_to name="Jonathan Bedard">jbedard</assigned_to>
          <cc>aakash_jain</cc>
    
    <cc>dean_johnson</cc>
    
    <cc>dewei_zhu</cc>
    
    <cc>jlewis3</cc>
    
    <cc>slewis</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1719018</commentid>
    <comment_count>0</comment_count>
    <who name="Jonathan Bedard">jbedard</who>
    <bug_when>2021-01-12 09:25:16 -0800</bug_when>
    <thetext>We need a multiprocessing architecture compatible with Python 3.8. Rather than attempt to retro-fit webkitpy&apos;s existing architecture, I think we should develop a new one to use going forward.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1719021</commentid>
    <comment_count>1</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2021-01-12 09:26:10 -0800</bug_when>
    <thetext>&lt;rdar://problem/73043887&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1719022</commentid>
    <comment_count>2</comment_count>
      <attachid>417461</attachid>
    <who name="Jonathan Bedard">jbedard</who>
    <bug_when>2021-01-12 09:27:53 -0800</bug_when>
    <thetext>Created attachment 417461
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1719026</commentid>
    <comment_count>3</comment_count>
      <attachid>417463</attachid>
    <who name="Jonathan Bedard">jbedard</who>
    <bug_when>2021-01-12 09:35:52 -0800</bug_when>
    <thetext>Created attachment 417463
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1719186</commentid>
    <comment_count>4</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2021-01-12 17:54:39 -0800</bug_when>
    <thetext>*** Bug 220546 has been marked as a duplicate of this bug. ***</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1720526</commentid>
    <comment_count>5</comment_count>
      <attachid>417875</attachid>
    <who name="Jonathan Bedard">jbedard</who>
    <bug_when>2021-01-19 07:53:12 -0800</bug_when>
    <thetext>Created attachment 417875
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1720937</commentid>
    <comment_count>6</comment_count>
      <attachid>417981</attachid>
    <who name="Jonathan Bedard">jbedard</who>
    <bug_when>2021-01-20 11:27:08 -0800</bug_when>
    <thetext>Created attachment 417981
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1720939</commentid>
    <comment_count>7</comment_count>
    <who name="Jonathan Bedard">jbedard</who>
    <bug_when>2021-01-20 11:29:46 -0800</bug_when>
    <thetext>(In reply to Jonathan Bedard from comment #6)
&gt; Created attachment 417981 [details]
&gt; Patch

Sam and I talked today, they had some good points, namely: Making the queue a class variable of Process may encourage future code to mess with the state of the TaskPool and ensuring that we don&apos;t encounter deadlocks when queues get full.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1721009</commentid>
    <comment_count>8</comment_count>
    <who name="">dewei_zhu</who>
    <bug_when>2021-01-20 14:40:29 -0800</bug_when>
    <thetext>r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1721063</commentid>
    <comment_count>9</comment_count>
      <attachid>418010</attachid>
    <who name="Jonathan Bedard">jbedard</who>
    <bug_when>2021-01-20 18:11:04 -0800</bug_when>
    <thetext>Created attachment 418010
Patch for landing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1721073</commentid>
    <comment_count>10</comment_count>
    <who name="EWS">ews-feeder</who>
    <bug_when>2021-01-20 18:51:30 -0800</bug_when>
    <thetext>Committed r271683: &lt;https://trac.webkit.org/changeset/271683&gt;

All reviewed patches have been landed. Closing bug and clearing flags on attachment 418010.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1721123</commentid>
    <comment_count>11</comment_count>
    <who name="Aakash Jain">aakash_jain</who>
    <bug_when>2021-01-21 04:13:50 -0800</bug_when>
    <thetext>Noticing ImportError (while importing six) after this, see: https://bugs.webkit.org/show_bug.cgi?id=220791</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1799435</commentid>
    <comment_count>12</comment_count>
    <who name="Jonathan Bedard">jbedard</who>
    <bug_when>2021-10-01 11:48:24 -0700</bug_when>
    <thetext>Reopening to attach new patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1799436</commentid>
    <comment_count>13</comment_count>
      <attachid>439886</attachid>
    <who name="Jonathan Bedard">jbedard</who>
    <bug_when>2021-10-01 11:48:25 -0700</bug_when>
    <thetext>Created attachment 439886
Patch for landing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1799478</commentid>
    <comment_count>14</comment_count>
    <who name="EWS">ews-feeder</who>
    <bug_when>2021-10-01 12:46:11 -0700</bug_when>
    <thetext>Committed r283391 (242395@main): &lt;https://commits.webkit.org/242395@main&gt;

All reviewed patches have been landed. Closing bug and clearing flags on attachment 439886.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>417461</attachid>
            <date>2021-01-12 09:27:53 -0800</date>
            <delta_ts>2021-01-12 09:35:50 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-220547-20210112092752.patch</filename>
            <type>text/plain</type>
            <size>22057</size>
            <attacher name="Jonathan Bedard">jbedard</attacher>
            
              <data encoding="base64">SW5kZXg6IFRvb2xzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9DaGFuZ2VMb2cJKHJl
dmlzaW9uIDI3MTQwNCkKKysrIFRvb2xzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwz
ICsxLDU0IEBACisyMDIxLTAxLTEyICBKb25hdGhhbiBCZWRhcmQgIDxqYmVkYXJkQGFwcGxlLmNv
bT4KKworICAgICAgICBbd2Via2l0Y29yZXB5XSBBZGQgVGFza1Bvb2wKKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIyMDU0NworICAgICAgICA8cmRhcjov
L3Byb2JsZW0vNzMwNDM4ODc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISku
CisKKyAgICAgICAgVGhlIFRhc2tQb29sIG9iamVjdCBpcyBhIFB5dGhvbiAzLjggY29tcGF0aWJs
ZSBtdWx0aXByb2Nlc3NpbmcgdG9vbC4gTm90YWJsZSBmZWF0dXJlcyBhcmUgZm9yd2FyZGluZyBz
dGRvdXQsCisgICAgICAgIHN0ZGVyciBhbmQgbG9nZ2luZyB0byB0aGUgcGFyZW50IHByb2Nlc3Ms
IGV4Y2VwdGlvbiBwcm9wYWdhdGlvbiBiZXR3ZWVuIHByb2Nlc3NlcywgYW5kIGdyYWNlZnVsIGNs
ZWFuLXVwIHdoZW4KKyAgICAgICAgZXhjZXB0aW9ucyBpbiB0aGUgcGFyZW50IHByb2Nlc3MgYXJl
IGVuY291bnRlcmVkCisKKyAgICAgICAgKiBTY3JpcHRzL2xpYnJhcmllcy93ZWJraXRjb3JlcHkv
d2Via2l0Y29yZXB5L19faW5pdF9fLnB5OiBCdW1wIHZlcnNpb24sIGFkZCB0YmxpYi4KKyAgICAg
ICAgKiBTY3JpcHRzL2xpYnJhcmllcy93ZWJraXRjb3JlcHkvd2Via2l0Y29yZXB5L3Rhc2tfcG9v
bC5weTogQWRkZWQuCisgICAgICAgIChNZXNzYWdlKTogQmFzZSBjbGFzcyBmb3IgbWVzc2FnZSBw
YXNzZWQgYmV0d2VlbiBwcm9jZXNzZXMuCisgICAgICAgIChUYXNrKTogTWVzc2FnZSBpbmNsdWRp
bmcgZnVuY3Rpb24gYW5kIGFyZ3VtZW50cyB0byB0aGF0IGZ1bmN0aW9uLgorICAgICAgICAoUmVz
dWx0KTogUmV0dXJuIHZhbHVlIG9mIGEgdGFzayBwYXNzZWQgdG8gdGhlIHBhcmVudCBwcm9jZXNz
LgorICAgICAgICAoTG9nKTogUGFzcyBsb2cgbWVzc2FnZSBmcm9tIGNoaWxkIHByb2Nlc3MgdG8g
cGFyZW50IHByb2Nlc3MuCisgICAgICAgIChQcmludCk6IFBhc3Mgc3Rkb3V0IG9yIHN0ZGVyciBs
aW5lIGZyb20gY2hpbGQgcHJvY2VzcyB0byBwYXJlbnQgcHJvY2Vzcy4KKyAgICAgICAgKFN0YXRl
KTogTm90aWZ5IHBhcmVudCBwcm9jZXNzIHRoYXQgdGhlIGNoaWxkIHByb2Nlc3MgaGFzIGNoYW5n
ZWQgc3RhdGUuCisgICAgICAgIChDaGlsZEV4Y2VwdGlvbik6IFBhc3MgZXhjZXB0aW9uIGFuZCBz
dGFjayB0cmFjZSBmcm9tCisgICAgICAgIChNZXNzYWdlUXVldWUpOiBQYWlyIGZvciBtdWx0aXBy
b2Nlc3MgcXVldWVzIGFsbG93aW5nIGZvciBtZXNzYWdlcyB0byBiZSBwYXNzZWQgYmV0d2VlbiBw
cm9jZXNzZXMuCisgICAgICAgIChQcm9jZXNzKTogU2NvcGluZyBjbGFzcyBtYW5hZ2luZyBjaGls
ZC1wcm9jZXNzIGxvZ2ljLgorICAgICAgICAoUHJvY2Vzcy5Mb2dIYW5kbGVyKTogTG9nZ2luZyBo
YW5kbGVyIHRoYXQgcGFzc2VzIGxvZyBsaW5lcyBmcm9tIHRoZSBjaGlsZCBwcm9jZXNzIHRvIGl0
J3MgcGFyZW50LgorICAgICAgICAoUHJvY2Vzcy5TdHJlYW0pOiBXcml0YWJsZSBzdHJlYW0gd2hp
Y2ggcGFzc2VzIGNvbnRlbnQgZnJvbSB0aGUgY2hpbGQgcHJvY2VzcyB0byB0aGUgc3RhbmRhcmQg
b3V0IG9yIGVycm9yCisgICAgICAgIG9mIHRoYXQgcHJvY2VzcydzIHBhcmVudC4KKyAgICAgICAg
KFByb2Nlc3MuaGFuZGxlcik6IFNJR1RFUk0gc2hvdWxkIHByZXZlbnQgZnV0dXJlIHByb2Nlc3Np
bmcgYnV0IGFsbG93IGN1cnJlbnRseSBpbi1mbGlnaHQgdGFza3MgdG8gY29tcGxldGUuCisgICAg
ICAgIChQcm9jZXNzLm1haW4pOiBFbnRyeS1wb2ludCB0byBjaGlsZCBwcm9jZXNzLgorICAgICAg
ICAoVGFza1Bvb2wpOiBNYW5hZ2luZyBhbGxvY2F0aW9uIG9mIHRhc2tzIHRvIGNoaWxkIHByb2Nl
c3NlcyBhbmQgY2xlYW4gdXAgdGhvc2UgY2hpbGQgcHJvY2Vzc2VzLgorICAgICAgICAoVGFza1Bv
b2wuRXhjZXB0aW9uKTogRXhjZXB0aW9uIG93bmVkIGJ5IFRhc2tQb29sIG9iamVjdC4KKyAgICAg
ICAgKFRhc2tQb29sLl9faW5pdF9fKToKKyAgICAgICAgKFRhc2tQb29sLl9fZW50ZXJfXyk6Cisg
ICAgICAgIChUYXNrUG9vbC5kbyk6IFBhc3MgdGFzayB0byBjaGlsZCBwcm9jZXNzZXMuCisgICAg
ICAgIChUYXNrUG9vbC53YWl0KTogV2FpdCB1bnRpbCBhbGwgcHJvY2Vzc2VzIGFyZSBjb21wbGV0
ZWQuCisgICAgICAgIChUYXNrUG9vbC5fX2V4aXRfXyk6IFRlYXJkb3duIGFsbCBjaGlsZCBwcm9j
ZXNzZXMuCisgICAgICAgICogU2NyaXB0cy9saWJyYXJpZXMvd2Via2l0Y29yZXB5L3dlYmtpdGNv
cmVweS90ZXN0cy90YXNrX3Bvb2xfdW5pdHRlc3QucHk6IEFkZGVkLgorICAgICAgICAoc2V0dXAp
OgorICAgICAgICAodGVhcmRvd24pOgorICAgICAgICAoYWN0aW9uKToKKyAgICAgICAgKGxvZyk6
CisgICAgICAgICh3YWl0KToKKyAgICAgICAgKGV4Y2VwdGlvbik6CisgICAgICAgIChUYXNrUG9v
bFVuaXR0ZXN0KToKKyAgICAgICAgKFRhc2tQb29sVW5pdHRlc3QudGVzdF9zaW5nbGUpOgorICAg
ICAgICAoVGFza1Bvb2xVbml0dGVzdC50ZXN0X211bHRpcGxlKToKKyAgICAgICAgKFRhc2tQb29s
VW5pdHRlc3QudGVzdF9jYWxsYmFjayk6CisgICAgICAgIChUYXNrUG9vbFVuaXR0ZXN0LnRlc3Rf
ZXhjZXB0aW9uKToKKyAgICAgICAgKFRhc2tQb29sVW5pdHRlc3QudGVzdF9zZXR1cCk6CisgICAg
ICAgIChUYXNrUG9vbFVuaXR0ZXN0LnRlc3RfdGVhcmRvd24pOgorICAgICAgICAoVGFza1Bvb2xV
bml0dGVzdC50ZXN0X2ludmFsaWRfc2h1dGRvd24pOgorCiAyMDIxLTAxLTExICBMYXVybyBNb3Vy
YSAgPGxtb3VyYUBpZ2FsaWEuY29tPgogCiAgICAgICAgIFtXUEVdIEdhcmRlbmluZyBBUEkgdGVz
dCBjcmFzaApJbmRleDogVG9vbHMvU2NyaXB0cy9saWJyYXJpZXMvd2Via2l0Y29yZXB5L3NldHVw
LnB5Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1NjcmlwdHMvbGlicmFyaWVzL3dlYmtpdGNvcmVweS9z
ZXR1cC5weQkocmV2aXNpb24gMjcxMzY3KQorKysgVG9vbHMvU2NyaXB0cy9saWJyYXJpZXMvd2Vi
a2l0Y29yZXB5L3NldHVwLnB5CSh3b3JraW5nIGNvcHkpCkBAIC0zMCw3ICszMCw3IEBAIGRlZiBy
ZWFkbWUoKToKIAogc2V0dXAoCiAgICAgbmFtZT0nd2Via2l0Y29yZXB5JywKLSAgICB2ZXJzaW9u
PScwLjQuMjYnLAorICAgIHZlcnNpb249JzAuNS4wJywKICAgICBkZXNjcmlwdGlvbj0nTGlicmFy
eSBjb250YWluaW5nIHZhcmlvdXMgUHl0aG9uIHN1cHBvcnQgY2xhc3NlcyBhbmQgZnVuY3Rpb25z
LicsCiAgICAgbG9uZ19kZXNjcmlwdGlvbj1yZWFkbWUoKSwKICAgICBjbGFzc2lmaWVycz1bCklu
ZGV4OiBUb29scy9TY3JpcHRzL2xpYnJhcmllcy93ZWJraXRjb3JlcHkvd2Via2l0Y29yZXB5L19f
aW5pdF9fLnB5Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1NjcmlwdHMvbGlicmFyaWVzL3dlYmtpdGNv
cmVweS93ZWJraXRjb3JlcHkvX19pbml0X18ucHkJKHJldmlzaW9uIDI3MTM2NykKKysrIFRvb2xz
L1NjcmlwdHMvbGlicmFyaWVzL3dlYmtpdGNvcmVweS93ZWJraXRjb3JlcHkvX19pbml0X18ucHkJ
KHdvcmtpbmcgY29weSkKQEAgLTEsNCArMSw0IEBACi0jIENvcHlyaWdodCAoQykgMjAyMCBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjIENvcHlyaWdodCAoQykgMjAyMCwgMjAyMSBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAjCiAjIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogIyBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKQEAgLTM0LDggKzM0LDkgQEAgZnJvbSB3ZWJraXRjb3JlcHkuc3RyaW5nX3V0aWxzIGltcG9y
dCBCeQogZnJvbSB3ZWJraXRjb3JlcHkudGltZW91dCBpbXBvcnQgVGltZW91dAogZnJvbSB3ZWJr
aXRjb3JlcHkuc3VicHJvY2Vzc191dGlscyBpbXBvcnQgVGltZW91dEV4cGlyZWQsIENvbXBsZXRl
ZFByb2Nlc3MsIHJ1bgogZnJvbSB3ZWJraXRjb3JlcHkub3V0cHV0X2NhcHR1cmUgaW1wb3J0IExv
Z2dlckNhcHR1cmUsIE91dHB1dENhcHR1cmUsIE91dHB1dER1cGxpY2F0ZQorZnJvbSB3ZWJraXRj
b3JlcHkudGFza19wb29sIGltcG9ydCBUYXNrUG9vbAogCi12ZXJzaW9uID0gVmVyc2lvbigwLCA0
LCAyNikKK3ZlcnNpb24gPSBWZXJzaW9uKDAsIDUsIDApCiAKIGZyb20gd2Via2l0Y29yZXB5LmF1
dG9pbnN0YWxsIGltcG9ydCBQYWNrYWdlLCBBdXRvSW5zdGFsbAogaWYgc3lzLnZlcnNpb25faW5m
byA+ICgzLCAwKToKQEAgLTU1LDYgKzU2LDcgQEAgQXV0b0luc3RhbGwucmVnaXN0ZXIoUGFja2Fn
ZSgncmVxdWVzdHMnLAogQXV0b0luc3RhbGwucmVnaXN0ZXIoUGFja2FnZSgnc2V0dXB0b29scycs
IFZlcnNpb24oNDQsIDEsICAxKSkpCiBBdXRvSW5zdGFsbC5yZWdpc3RlcihQYWNrYWdlKCdzb2Nr
cycsIFZlcnNpb24oMSwgNywgMSksIHB5cGlfbmFtZT0nUHlTb2NrcycpKQogQXV0b0luc3RhbGwu
cmVnaXN0ZXIoUGFja2FnZSgnc2l4JywgVmVyc2lvbigxLCAxNSwgMCkpKQorQXV0b0luc3RhbGwu
cmVnaXN0ZXIoUGFja2FnZSgndGJsaWInLCBWZXJzaW9uKDEsIDcsIDApKSkKIEF1dG9JbnN0YWxs
LnJlZ2lzdGVyKFBhY2thZ2UoJ3VybGxpYjMnLCBWZXJzaW9uKDEsIDI1LCAxMCkpKQogQXV0b0lu
c3RhbGwucmVnaXN0ZXIoUGFja2FnZSgnd2hlZWwnLCBWZXJzaW9uKDAsIDM1LCAxKSkpCiAKSW5k
ZXg6IFRvb2xzL1NjcmlwdHMvbGlicmFyaWVzL3dlYmtpdGNvcmVweS93ZWJraXRjb3JlcHkvdGFz
a19wb29sLnB5Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1NjcmlwdHMvbGlicmFyaWVzL3dlYmtpdGNv
cmVweS93ZWJraXRjb3JlcHkvdGFza19wb29sLnB5CShub25leGlzdGVudCkKKysrIFRvb2xzL1Nj
cmlwdHMvbGlicmFyaWVzL3dlYmtpdGNvcmVweS93ZWJraXRjb3JlcHkvdGFza19wb29sLnB5CSh3
b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMzQ5IEBACisjIENvcHlyaWdodCAoQykgMjAyMSBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjCisjIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorIyBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyMgYXJlIG1ldDoKKyMgMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyMgMi4gIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyMgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyMKKyMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQgQU5Z
CisjIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFIElNUExJRUQKKyMgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorIyBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkKKyMgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworIyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04KKyMgQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyMgKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRI
SVMKKyMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCisKK2ltcG9ydCBpbworaW1wb3J0IG9zCitpbXBvcnQgbG9nZ2luZworaW1wb3J0
IG11bHRpcHJvY2Vzc2luZworaW1wb3J0IHNpZ25hbAoraW1wb3J0IHN5cworCitmcm9tIHNpeCBp
bXBvcnQgcmVyYWlzZQorZnJvbSB0YmxpYiBpbXBvcnQgcGlja2xpbmdfc3VwcG9ydAorZnJvbSB3
ZWJraXRjb3JlcHkgaW1wb3J0IE91dHB1dENhcHR1cmUsIFRpbWVvdXQsIGxvZworCisKK2NsYXNz
IE1lc3NhZ2Uob2JqZWN0KToKKyAgICBkZWYgX19pbml0X18oc2VsZiwgd2hvPU5vbmUpOgorICAg
ICAgICBzZWxmLndobyA9IHdobyBvciBQcm9jZXNzLm5hbWUKKworICAgIGRlZiBfX2NhbGxfXyhz
ZWxmLCBjYWxsZXIpOgorICAgICAgICBOb3RJbXBsZW1lbnRlZCgpCisKKworY2xhc3MgVGFzayhN
ZXNzYWdlKToKKyAgICBkZWYgX19pbml0X18oc2VsZiwgZnVuY3Rpb24sIGlkLCAqYXJncywgKipr
d2FyZ3MpOgorICAgICAgICBzdXBlcihUYXNrLCBzZWxmKS5fX2luaXRfXygpCisKKyAgICAgICAg
c2VsZi5mdW5jdGlvbiA9IGZ1bmN0aW9uCisgICAgICAgIHNlbGYuaWQgPSBpZAorICAgICAgICBz
ZWxmLmFyZ3MgPSB0dXBsZShhcmdzKQorICAgICAgICBzZWxmLmt3YXJncyA9IGt3YXJncworCisg
ICAgZGVmIF9fY2FsbF9fKHNlbGYsIGNhbGxlcik6CisgICAgICAgIHJldHVybiBzZWxmLmZ1bmN0
aW9uKCpzZWxmLmFyZ3MsICoqc2VsZi5rd2FyZ3MpCisKKworY2xhc3MgUmVzdWx0KE1lc3NhZ2Up
OgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCB2YWx1ZSwgaWQpOgorICAgICAgICBzdXBlcihSZXN1
bHQsIHNlbGYpLl9faW5pdF9fKCkKKyAgICAgICAgc2VsZi52YWx1ZSA9IHZhbHVlCisgICAgICAg
IHNlbGYuaWQgPSBpZAorCisgICAgZGVmIF9fY2FsbF9fKHNlbGYsIGNhbGxlcik6CisgICAgICAg
IGlmIGNhbGxlcjoKKyAgICAgICAgICAgIGNhbGxlci5jYWxsYmFja3MucG9wKHNlbGYuaWQsIGxh
bWJkYSB2YWx1ZTogdmFsdWUpKHNlbGYudmFsdWUpCisgICAgICAgIHJldHVybiBzZWxmLnZhbHVl
CisKKworY2xhc3MgTG9nKE1lc3NhZ2UpOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCByZWNvcmQp
OgorICAgICAgICBzdXBlcihMb2csIHNlbGYpLl9faW5pdF9fKCkKKyAgICAgICAgc2VsZi5yZWNv
cmQgPSByZWNvcmQKKworICAgIGRlZiBfX2NhbGxfXyhzZWxmLCBjYWxsZXIpOgorICAgICAgICBs
b2dnaW5nLmdldExvZ2dlcihzZWxmLnJlY29yZC5uYW1lKS5sb2coc2VsZi5yZWNvcmQubGV2ZWxu
bywgJ3t9IHt9Jy5mb3JtYXQoc2VsZi53aG8sIHNlbGYucmVjb3JkLmdldE1lc3NhZ2UoKSkpCisK
KworY2xhc3MgUHJpbnQoTWVzc2FnZSk6CisgICAgc3Rkb3V0ID0gMQorICAgIHN0ZGVyciA9IDIK
KworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBsaW5lcywgc3RyZWFtPXN0ZG91dCk6CisgICAgICAg
IHN1cGVyKFByaW50LCBzZWxmKS5fX2luaXRfXygpCisgICAgICAgIHNlbGYubGluZXMgPSBsaW5l
cworICAgICAgICBzZWxmLnN0cmVhbSA9IHN0cmVhbQorCisgICAgZGVmIF9fY2FsbF9fKHNlbGYs
IGNhbGxlcik6CisgICAgICAgIHN0cmVhbSA9IHsKKyAgICAgICAgICAgIHNlbGYuc3Rkb3V0OiBz
eXMuc3Rkb3V0LAorICAgICAgICAgICAgc2VsZi5zdGRlcnI6IHN5cy5zdGRlcnIsCisgICAgICAg
IH0uZ2V0KHNlbGYuc3RyZWFtLCBzeXMuc3RkZXJyKQorICAgICAgICBmb3IgbGluZSBpbiBzZWxm
LmxpbmVzOgorICAgICAgICAgICAgc3RyZWFtLndyaXRlKCd7fVxuJy5mb3JtYXQobGluZSkpCisK
KworY2xhc3MgU3RhdGUoTWVzc2FnZSk6CisgICAgU1RBUlRJTkcsIFNUT1BQSU5HID0gMSwgMAor
ICAgIFNUQVRFUyA9IFtTVEFSVElORywgU1RPUFBJTkddCisKKyAgICBkZWYgX19pbml0X18oc2Vs
Ziwgc3RhdGUpOgorICAgICAgICBzdXBlcihTdGF0ZSwgc2VsZikuX19pbml0X18oKQorICAgICAg
ICBzZWxmLnN0YXRlID0gc3RhdGUKKworICAgIGRlZiBfX2NhbGxfXyhzZWxmLCBjYWxsZXIpOgor
ICAgICAgICBsb2cuaW5mbygne30ge30nLmZvcm1hdCgKKyAgICAgICAgICAgIHNlbGYud2hvLCB7
CisgICAgICAgICAgICAgICAgU3RhdGUuU1RBUlRJTkc6ICdzdGFydGluZycsCisgICAgICAgICAg
ICAgICAgU3RhdGUuU1RPUFBJTkc6ICdzdG9wcGluZycsCisgICAgICAgICAgICB9LmdldChzZWxm
LnN0YXRlLCBzZWxmLnN0YXRlKSwKKyAgICAgICAgKSkKKyAgICAgICAgaWYgY2FsbGVyOgorICAg
ICAgICAgICAgY2FsbGVyLl9zdGFydGVkICs9IHsKKyAgICAgICAgICAgICAgICBTdGF0ZS5TVEFS
VElORzogMSwKKyAgICAgICAgICAgICAgICBTdGF0ZS5TVE9QUElORzogLTEsCisgICAgICAgICAg
ICB9LmdldChzZWxmLnN0YXRlLCAwKQorICAgICAgICByZXR1cm4gc2VsZi5zdGF0ZQorCisKK2Ns
YXNzIENoaWxkRXhjZXB0aW9uKE1lc3NhZ2UpOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBleGNf
aW5mbz1Ob25lKToKKyAgICAgICAgc3VwZXIoQ2hpbGRFeGNlcHRpb24sIHNlbGYpLl9faW5pdF9f
KCkKKyAgICAgICAgc2VsZi5leGNfaW5mbyA9IGV4Y19pbmZvIG9yIHN5cy5leGNfaW5mbygpCisK
KyAgICBkZWYgX19jYWxsX18oc2VsZiwgY2FsbGVyKToKKyAgICAgICAgXywgZXhjZXB0aW9uLCB0
cmFjZSA9IHN5cy5leGNfaW5mbygpCisgICAgICAgIGlmIGV4Y2VwdGlvbjoKKyAgICAgICAgICAg
IGxvZy5jcml0aWNhbCgiRXhjZXB0aW9uIGluIGZsaWdodCwgJ3t9JyBpZ25vcmVkIi5mb3JtYXQo
c2VsZi5leGNfaW5mb1sxXSkpCisgICAgICAgICAgICByZXR1cm4KKworICAgICAgICByZXJhaXNl
KCpzZWxmLmV4Y19pbmZvKQorCisKK2NsYXNzIE1lc3NhZ2VRdWV1ZShvYmplY3QpOgorICAgIGRl
ZiBfX2luaXRfXyhzZWxmLCBvdXRnb2luZz1Ob25lLCBpbmNvbWluZz1Ob25lKToKKyAgICAgICAg
c2VsZi5vdXRnb2luZyA9IG91dGdvaW5nIG9yIG11bHRpcHJvY2Vzc2luZy5RdWV1ZSgpCisgICAg
ICAgIHNlbGYuaW5jb21pbmcgPSBpbmNvbWluZyBvciBtdWx0aXByb2Nlc3NpbmcuUXVldWUoKQor
CisgICAgZGVmIHNlbmQoc2VsZiwgb2JqZWN0KToKKyAgICAgICAgcmV0dXJuIHNlbGYub3V0Z29p
bmcucHV0KG9iamVjdCkKKworICAgIGRlZiByZWNlaXZlKHNlbGYsIGJsb2NraW5nPVRydWUpOgor
ICAgICAgICB3aXRoIFRpbWVvdXQuRGlzYWJsZUFsYXJtKCk6CisgICAgICAgICAgICBpZiBub3Qg
YmxvY2tpbmc6CisgICAgICAgICAgICAgICAgcmV0dXJuIHNlbGYuaW5jb21pbmcuZ2V0KGJsb2Nr
PUZhbHNlKQorCisgICAgICAgICAgICBkaWZmZXJlbmNlID0gVGltZW91dC5kaWZmZXJlbmNlKCkK
KyAgICAgICAgICAgIGlmIGRpZmZlcmVuY2UgaXMgbm90IE5vbmU6CisgICAgICAgICAgICAgICAg
cmV0dXJuIHNlbGYuaW5jb21pbmcuZ2V0KHRpbWVvdXQ9ZGlmZmVyZW5jZSkKKyAgICAgICAgICAg
IHJldHVybiBzZWxmLmluY29taW5nLmdldCgpCisKKworY2xhc3MgUHJvY2VzcyhvYmplY3QpOgor
ICAgIG5hbWUgPSBOb25lCisgICAgcXVldWUgPSBOb25lCisgICAgd29ya2luZyA9IEZhbHNlCisK
KyAgICBjbGFzcyBMb2dIYW5kbGVyKGxvZ2dpbmcuSGFuZGxlcik6CisgICAgICAgIGRlZiBlbWl0
KHNlbGYsIHJlY29yZCk6CisgICAgICAgICAgICBQcm9jZXNzLnF1ZXVlLnNlbmQoTG9nKHJlY29y
ZCkpCisKKyAgICBjbGFzcyBTdHJlYW0oaW8uSU9CYXNlKToKKyAgICAgICAgZGVmIF9faW5pdF9f
KHNlbGYsIGhhbmRsZSk6CisgICAgICAgICAgICBpZiBub3QgaGFuZGxlOgorICAgICAgICAgICAg
ICAgIHJhaXNlIFZhbHVlRXJyb3IoJ05vIHRhcmdldCBzdHJlYW1zIHByb3ZpZGVkJykKKyAgICAg
ICAgICAgIHNlbGYuaGFuZGxlID0gaGFuZGxlCisgICAgICAgICAgICBzZWxmLmNhY2hlID0gTm9u
ZQorCisgICAgICAgIGRlZiBmbHVzaChzZWxmKToKKyAgICAgICAgICAgIGlmIHNlbGYuY2FjaGUg
aXMgbm90IE5vbmU6CisgICAgICAgICAgICAgICAgUHJvY2Vzcy5xdWV1ZS5zZW5kKFByaW50KGxp
bmVzPVtzZWxmLmNhY2hlXSwgc3RyZWFtPXNlbGYuaGFuZGxlKSkKKyAgICAgICAgICAgICAgICBz
ZWxmLmNhY2hlID0gTm9uZQorCisgICAgICAgIGRlZiB3cml0ZWxpbmVzKHNlbGYsIGxpbmVzKToK
KyAgICAgICAgICAgIGZvciBsaW5lIGluIGxpbmVzOgorICAgICAgICAgICAgICAgIHNlbGYud3Jp
dGUobGluZSkKKworICAgICAgICBkZWYgd3JpdGUoc2VsZiwgYik6CisgICAgICAgICAgICB0b19i
ZV9wcmludGVkID0gW10KKyAgICAgICAgICAgIGZvciBjIGluIGI6CisgICAgICAgICAgICAgICAg
aWYgYyA9PSAnXG4nOgorICAgICAgICAgICAgICAgICAgICB0b19iZV9wcmludGVkLmFwcGVuZChz
ZWxmLmNhY2hlIG9yICcnKQorICAgICAgICAgICAgICAgICAgICBzZWxmLmNhY2hlID0gTm9uZQor
ICAgICAgICAgICAgICAgIGVsaWYgYyBub3QgaW4gWydccicsICdcMCddOgorICAgICAgICAgICAg
ICAgICAgICBzZWxmLmNhY2hlID0gYyBpZiBzZWxmLmNhY2hlIGlzIE5vbmUgZWxzZSAoc2VsZi5j
YWNoZSArIGMpCisgICAgICAgICAgICBpZiB0b19iZV9wcmludGVkOgorICAgICAgICAgICAgICAg
IFByb2Nlc3MucXVldWUuc2VuZChQcmludChsaW5lcz10b19iZV9wcmludGVkLCBzdHJlYW09c2Vs
Zi5oYW5kbGUpKQorICAgICAgICAgICAgcmV0dXJuIGxlbihiKQorCisgICAgICAgIEBwcm9wZXJ0
eQorICAgICAgICBkZWYgY2xvc2VkKHNlbGYpOgorICAgICAgICAgICAgcmV0dXJuIEZhbHNlCisK
KyAgICAgICAgZGVmIGNsb3NlKHNlbGYpOgorICAgICAgICAgICAgc2VsZi5mbHVzaCgpCisKKyAg
ICAgICAgZGVmIGZpbGVubyhzZWxmKToKKyAgICAgICAgICAgIHJldHVybiBzZWxmLmhhbmRsZQor
CisgICAgICAgIGRlZiBpc2F0dHkoc2VsZik6CisgICAgICAgICAgICByZXR1cm4gRmFsc2UKKwor
ICAgICAgICBkZWYgcmVhZGFibGUoc2VsZik6CisgICAgICAgICAgICByZXR1cm4gRmFsc2UKKwor
ICAgICAgICBkZWYgcmVhZGxpbmUoc2VsZiwgc2l6ZT0tMSk6CisgICAgICAgICAgICByYWlzZSBO
b3RJbXBsZW1lbnRlZEVycm9yKCkKKworICAgICAgICBkZWYgcmVhZGxpbmVzKHNlbGYsIGhpbnQ9
LTEpOgorICAgICAgICAgICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcigpCisKKyAgICAgICAg
ZGVmIHNlZWsoc2VsZiwgb2Zmc2V0LCB3aGVuY2U9aW8uU0VFS19TRVQpOgorICAgICAgICAgICAg
cmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcigpCisKKyAgICAgICAgZGVmIHNlZWthYmxlKHNlbGYp
OgorICAgICAgICAgICAgcmV0dXJuIEZhbHNlCisKKyAgICAgICAgZGVmIHRlbGwoc2VsZik6Cisg
ICAgICAgICAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yKCkKKworICAgICAgICBkZWYgdHJ1
bmNhdGUoc2VsZiwgc2l6ZT1Ob25lKToKKyAgICAgICAgICAgIHJhaXNlIE5vdEltcGxlbWVudGVk
RXJyb3IoKQorCisgICAgICAgIGRlZiB3cml0YWJsZShzZWxmKToKKyAgICAgICAgICAgIHJldHVy
biBUcnVlCisKKyAgICBAY2xhc3NtZXRob2QKKyAgICBkZWYgaGFuZGxlcihjbHMsIHZhbHVlLCBf
KToKKyAgICAgICAgaWYgdmFsdWUgPT0gc2lnbmFsLlNJR1RFUk06CisgICAgICAgICAgICBjbHMu
d29ya2luZyA9IEZhbHNlCisKKyAgICBAY2xhc3NtZXRob2QKKyAgICBkZWYgbWFpbihjbHMsIG5h
bWUsIHNldHVwLCBtZXNzYWdlX3F1ZXVlLCB0ZWFyZG93bik6CisgICAgICAgIGNscy5uYW1lID0g
bmFtZQorICAgICAgICBjbHMucXVldWUgPSBtZXNzYWdlX3F1ZXVlCisgICAgICAgIGNscy53b3Jr
aW5nID0gVHJ1ZQorCisgICAgICAgIHNpZ25hbC5zaWduYWwoc2lnbmFsLlNJR1RFUk0sIGNscy5o
YW5kbGVyKQorCisgICAgICAgIGxvZ2dlciA9IGxvZ2dpbmcuZ2V0TG9nZ2VyKCkKKyAgICAgICAg
Zm9yIGhhbmRsZXIgaW4gbG9nZ2VyLmhhbmRsZXJzOgorICAgICAgICAgICAgbG9nZ2VyLnJlbW92
ZUhhbmRsZXIoaGFuZGxlcikKKyAgICAgICAgbG9nZ2VyLmFkZEhhbmRsZXIoY2xzLkxvZ0hhbmRs
ZXIoKSkKKworICAgICAgICBjbHMucXVldWUuc2VuZChTdGF0ZShTdGF0ZS5TVEFSVElORykpCisK
KyAgICAgICAgd2l0aCBPdXRwdXRDYXB0dXJlLlJlcGxhY2VTeXNTdHJlYW0oJ3N0ZGVycicsIGNs
cy5TdHJlYW0oUHJpbnQuc3RkZXJyKSksIE91dHB1dENhcHR1cmUuUmVwbGFjZVN5c1N0cmVhbSgn
c3Rkb3V0JywgY2xzLlN0cmVhbShQcmludC5zdGRvdXQpKToKKyAgICAgICAgICAgIHRyeToKKyAg
ICAgICAgICAgICAgICBwaWNrbGluZ19zdXBwb3J0Lmluc3RhbGwoKQorICAgICAgICAgICAgICAg
IGlmIHNldHVwOgorICAgICAgICAgICAgICAgICAgICBzZXR1cCgpCisKKyAgICAgICAgICAgICAg
ICB3aGlsZSBjbHMud29ya2luZzoKKyAgICAgICAgICAgICAgICAgICAgdGFzayA9IGNscy5xdWV1
ZS5yZWNlaXZlKCkKKyAgICAgICAgICAgICAgICAgICAgaWYgbm90IHRhc2s6CisgICAgICAgICAg
ICAgICAgICAgICAgICBicmVhaworICAgICAgICAgICAgICAgICAgICBjbHMucXVldWUuc2VuZChS
ZXN1bHQodmFsdWU9dGFzayhOb25lKSwgaWQ9dGFzay5pZCkpCisKKyAgICAgICAgICAgIGV4Y2Vw
dCBCYXNlRXhjZXB0aW9uOgorICAgICAgICAgICAgICAgIHR5cCwgZXhjZXB0aW9uLCB0cmFjZWJh
Y2sgPSBzeXMuZXhjX2luZm8oKQorICAgICAgICAgICAgICAgIGNscy5xdWV1ZS5zZW5kKENoaWxk
RXhjZXB0aW9uKGV4Y19pbmZvPSgKKyAgICAgICAgICAgICAgICAgICAgdHlwLCB0eXAoJ3t9IChm
cm9tIHt9KScuZm9ybWF0KHN0cihleGNlcHRpb24pLCBuYW1lKSksIHRyYWNlYmFjaywKKyAgICAg
ICAgICAgICAgICApKSkKKworICAgICAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgICAgICBp
ZiB0ZWFyZG93bjoKKyAgICAgICAgICAgICAgICAgICAgdGVhcmRvd24oKQorICAgICAgICAgICAg
ICAgIHN5cy5zdGRvdXQuZmx1c2goKQorICAgICAgICAgICAgICAgIHN5cy5zdGRlcnIuZmx1c2go
KQorICAgICAgICAgICAgICAgIGNscy5xdWV1ZS5zZW5kKFN0YXRlKFN0YXRlLlNUT1BQSU5HKSkK
KworCitjbGFzcyBUYXNrUG9vbChvYmplY3QpOgorCisgICAgY2xhc3MgRXhjZXB0aW9uKFJ1bnRp
bWVFcnJvcik6CisgICAgICAgIHBhc3MKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCB3b3JrZXJz
PTEsIG5hbWU9Tm9uZSwgc2V0dXA9Tm9uZSwgdGVhcmRvd249Tm9uZSwgZ3JhY2VfcGVyaW9kPTUp
OgorICAgICAgICBuYW1lID0gbmFtZSBvciAnd29ya2VyJworICAgICAgICBpZiBuYW1lID09IFBy
b2Nlc3MubmFtZToKKyAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoIlBhcmVudCBwcm9jZXNz
IGlzIGFscmVhZHkgbmFtZWQge30iLmZvcm1hdChuYW1lKSkKKworICAgICAgICBpZiB3b3JrZXJz
IDwgMToKKyAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoJ1Rhc2tQb29sIHJlcXVpcmVzIHBv
c2l0aXZlIG51bWJlciBvZiB3b3JrZXJzJykKKworICAgICAgICBzZWxmLm1lc3NhZ2VfcXVldWUg
PSBNZXNzYWdlUXVldWUoKQorCisgICAgICAgIHNlbGYud29ya2VycyA9IFttdWx0aXByb2Nlc3Np
bmcuUHJvY2VzcygKKyAgICAgICAgICAgIHRhcmdldD1Qcm9jZXNzLm1haW4sCisgICAgICAgICAg
ICBhcmdzPSgne30ve30nLmZvcm1hdChuYW1lLCBjb3VudCksIHNldHVwLCBNZXNzYWdlUXVldWUo
CisgICAgICAgICAgICAgICAgb3V0Z29pbmc9c2VsZi5tZXNzYWdlX3F1ZXVlLmluY29taW5nLAor
ICAgICAgICAgICAgICAgIGluY29taW5nPXNlbGYubWVzc2FnZV9xdWV1ZS5vdXRnb2luZywKKyAg
ICAgICAgICAgICksIHRlYXJkb3duKSwKKyAgICAgICAgKSBmb3IgY291bnQgaW4gcmFuZ2Uod29y
a2VycyldCisgICAgICAgIHNlbGYuX3N0YXJ0ZWQgPSAwCisKKyAgICAgICAgc2VsZi5jYWxsYmFj
a3MgPSB7fQorICAgICAgICBzZWxmLl9pZF9jb3VudCA9IDAKKyAgICAgICAgc2VsZi5ncmFjZV9w
ZXJpb2QgPSBncmFjZV9wZXJpb2QKKworICAgIGRlZiBfX2VudGVyX18oc2VsZik6CisgICAgICAg
IHdpdGggVGltZW91dChzZWNvbmRzPTEwLCBwYXRjaD1GYWxzZSwgaGFuZGxlcj1zZWxmLkV4Y2Vw
dGlvbignRmFpbGVkIHRvIHN0YXJ0IGFsbCB3b3JrZXJzJykpOgorICAgICAgICAgICAgZm9yIHdv
cmtlciBpbiBzZWxmLndvcmtlcnM6CisgICAgICAgICAgICAgICAgd29ya2VyLnN0YXJ0KCkKKyAg
ICAgICAgICAgIHdoaWxlIHNlbGYuX3N0YXJ0ZWQgPCBsZW4oc2VsZi53b3JrZXJzKToKKyAgICAg
ICAgICAgICAgICBzZWxmLm1lc3NhZ2VfcXVldWUucmVjZWl2ZSgpKHNlbGYpCisgICAgICAgIHJl
dHVybiBzZWxmCisKKyAgICBkZWYgZG8oc2VsZiwgZnVuY3Rpb24sICphcmdzLCAqKmt3YXJncyk6
CisgICAgICAgIGNhbGxiYWNrID0ga3dhcmdzLnBvcCgnY2FsbGJhY2snLCBOb25lKQorICAgICAg
ICBpZiBjYWxsYmFjazoKKyAgICAgICAgICAgIHNlbGYuY2FsbGJhY2tzW3NlbGYuX2lkX2NvdW50
XSA9IGNhbGxiYWNrCisgICAgICAgIHNlbGYubWVzc2FnZV9xdWV1ZS5zZW5kKFRhc2soZnVuY3Rp
b24sIHNlbGYuX2lkX2NvdW50LCAqYXJncywgKiprd2FyZ3MpKQorICAgICAgICBzZWxmLl9pZF9j
b3VudCArPSAxCisKKyAgICBkZWYgd2FpdChzZWxmKToKKyAgICAgICAgZm9yIF8gaW4gc2VsZi53
b3JrZXJzOgorICAgICAgICAgICAgc2VsZi5tZXNzYWdlX3F1ZXVlLnNlbmQoTm9uZSkKKworICAg
ICAgICB3aGlsZSBzZWxmLl9zdGFydGVkOgorICAgICAgICAgICAgc2VsZi5tZXNzYWdlX3F1ZXVl
LnJlY2VpdmUoKShzZWxmKQorCisgICAgZGVmIF9fZXhpdF9fKHNlbGYsICphcmdzLCAqKmt3YXJn
cyk6CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGluZmxpZ2h0ID0gc3lzLmV4Y19pbmZvKCkK
KworICAgICAgICAgICAgZm9yIHdvcmtlciBpbiBzZWxmLndvcmtlcnM6CisgICAgICAgICAgICAg
ICAgaWYgd29ya2VyLmlzX2FsaXZlKCk6CisgICAgICAgICAgICAgICAgICAgIHdvcmtlci50ZXJt
aW5hdGUoKQorCisgICAgICAgICAgICB3aXRoIFRpbWVvdXQoc2Vjb25kcz1zZWxmLmdyYWNlX3Bl
cmlvZCk6CisgICAgICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgICAgICB3aGlsZSBz
ZWxmLl9zdGFydGVkOgorICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5tZXNzYWdlX3F1ZXVl
LnJlY2VpdmUoKShzZWxmKQorICAgICAgICAgICAgICAgIGV4Y2VwdCBFeGNlcHRpb246CisgICAg
ICAgICAgICAgICAgICAgIGlmIGluZmxpZ2h0WzFdOgorICAgICAgICAgICAgICAgICAgICAgICAg
bG9nLmNyaXRpY2FsKCdTb21lIHdvcmtlcnMgZmFpbGVkIHRvIGdyYWNlZnVsbHkgc2h1dCBkb3du
LCBidXQgaW4tZmxpZ2h0IGV4Y2VwdGlvbiB0YWtpbmcgcHJlY2VkZW5jZScpCisgICAgICAgICAg
ICAgICAgICAgICAgICByZXJhaXNlKCppbmZsaWdodCkKKyAgICAgICAgICAgICAgICAgICAgcmFp
c2Ugc2VsZi5FeGNlcHRpb24oJ1NvbWUgd29ya2VycyBmYWlsZWQgdG8gZ3JhY2VmdWxseSBzaHV0
IGRvd24nKQorCisgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICBmb3Igd29ya2VyIGluIHNl
bGYud29ya2VyczoKKyAgICAgICAgICAgICAgICBpZiBub3Qgd29ya2VyLmlzX2FsaXZlKCk6Cisg
ICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCisKKyAgICAgICAgICAgICAgICBpZiBzeXMudmVy
c2lvbl9pbmZvID49ICgzLCA3KToKKyAgICAgICAgICAgICAgICAgICAgd29ya2VyLmtpbGwoKQor
ICAgICAgICAgICAgICAgIGVsaWYgaGFzYXR0cihzaWduYWwsICdTSUdLSUxMJyk6CisgICAgICAg
ICAgICAgICAgICAgIG9zLmtpbGwod29ya2VyLnBpZCwgc2lnbmFsLlNJR0tJTEwpCisgICAgICAg
ICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgd29ya2VyLnRlcm1pbmF0ZSgpCklu
ZGV4OiBUb29scy9TY3JpcHRzL2xpYnJhcmllcy93ZWJraXRjb3JlcHkvd2Via2l0Y29yZXB5L3Rl
c3RzL3Rhc2tfcG9vbF91bml0dGVzdC5weQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9TY3JpcHRzL2xp
YnJhcmllcy93ZWJraXRjb3JlcHkvd2Via2l0Y29yZXB5L3Rlc3RzL3Rhc2tfcG9vbF91bml0dGVz
dC5weQkobm9uZXhpc3RlbnQpCisrKyBUb29scy9TY3JpcHRzL2xpYnJhcmllcy93ZWJraXRjb3Jl
cHkvd2Via2l0Y29yZXB5L3Rlc3RzL3Rhc2tfcG9vbF91bml0dGVzdC5weQkod29ya2luZyBjb3B5
KQpAQCAtMCwwICsxLDEzNiBAQAorIyBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorIworIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMgbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisjIGFyZSBtZXQ6
CisjIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorIyAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisjIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisjICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisjCisjIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5EIEFOWQorIyBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI
RSBJTVBMSUVECisjIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyMgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisjIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTCisjIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyMgTE9TUyBPRiBVU0UsIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OCisjIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisjIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTCisjIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgor
CitpbXBvcnQgbG9nZ2luZworaW1wb3J0IHRpbWUKK2ltcG9ydCB1bml0dGVzdAorCitmcm9tIHdl
YmtpdGNvcmVweSBpbXBvcnQgT3V0cHV0Q2FwdHVyZSwgVGFza1Bvb2wsIGxvZyBhcyBsb2dnZXIK
KworCitkZWYgc2V0dXAoKToKKyAgICBsb2dnZXIud2FybmluZygnU2V0dGluZyB1cCcpCisKKwor
ZGVmIHRlYXJkb3duKCk6CisgICAgbG9nZ2VyLndhcm5pbmcoJ1RlYXJpbmcgZG93bicpCisKKwor
ZGVmIGFjdGlvbihhcmd1bWVudCk6CisgICAgcHJpbnQoJ2FjdGlvbih7fSknLmZvcm1hdChhcmd1
bWVudCkpCisgICAgcmV0dXJuIGFyZ3VtZW50CisKKworZGVmIGxvZyhsZXZlbCwgdmFsdWUpOgor
ICAgIGxvZ2dlci5sb2cobGV2ZWwsIHZhbHVlKQorICAgIHJldHVybiB2YWx1ZQorCisKK2RlZiB3
YWl0KHNlY29uZHMpOgorICAgIGxvZ2dlci5pbmZvKCd3YWl0aW5nIHt9IHNlY29uZHMuLi4nLmZv
cm1hdChzZWNvbmRzKSkKKyAgICB0aW1lLnNsZWVwKHNlY29uZHMpCisgICAgbG9nZ2VyLmluZm8o
J3dhaXRlZCB7fSBzZWNvbmRzIScuZm9ybWF0KHNlY29uZHMpKQorICAgIHJldHVybiBzZWNvbmRz
CisKKworZGVmIGV4Y2VwdGlvbih2YWx1ZSk6CisgICAgcmFpc2UgUnVudGltZUVycm9yKHZhbHVl
KQorCisKK2NsYXNzIFRhc2tQb29sVW5pdHRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgorICAgIGFs
cGhhYmV0ID0gJ2FiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6JworCisgICAgZGVmIHRlc3Rfc2lu
Z2xlKHNlbGYpOgorICAgICAgICB3aXRoIE91dHB1dENhcHR1cmUobGV2ZWw9bG9nZ2luZy5XQVJO
SU5HKSBhcyBjYXB0dXJlZDoKKyAgICAgICAgICAgIHdpdGggVGFza1Bvb2wod29ya2Vycz0xKSBh
cyBwb29sOgorICAgICAgICAgICAgICAgIHBvb2wuZG8oYWN0aW9uLCAnYScpCisgICAgICAgICAg
ICAgICAgcG9vbC5kbyhsb2csIGxvZ2dpbmcuV0FSTklORywgJzEnKQorICAgICAgICAgICAgICAg
IHBvb2wud2FpdCgpCisKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjYXB0dXJlZC5zdGRvdXQu
Z2V0dmFsdWUoKSwgJ2FjdGlvbihhKVxuJykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChjYXB0
dXJlZC53ZWJraXRjb3JlcHkubG9nLmdldHZhbHVlKCksICd3b3JrZXIvMCAxXG4nKQorCisgICAg
ZGVmIHRlc3RfbXVsdGlwbGUoc2VsZik6CisgICAgICAgIHdpdGggT3V0cHV0Q2FwdHVyZShsZXZl
bD1sb2dnaW5nLklORk8pIGFzIGNhcHR1cmVkOgorICAgICAgICAgICAgd2l0aCBUYXNrUG9vbCh3
b3JrZXJzPTQpIGFzIHBvb2w6CisgICAgICAgICAgICAgICAgZm9yIGNoYXJhY3RlciBpbiBzZWxm
LmFscGhhYmV0OgorICAgICAgICAgICAgICAgICAgICBwb29sLmRvKGFjdGlvbiwgY2hhcmFjdGVy
KQorICAgICAgICAgICAgICAgIHBvb2wud2FpdCgpCisKKyAgICAgICAgbGluZXMgPSBjYXB0dXJl
ZC5zdGRvdXQuZ2V0dmFsdWUoKS5zcGxpdGxpbmVzKCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVh
bHMoc29ydGVkKGxpbmVzKSwgWydhY3Rpb24oe30pJy5mb3JtYXQoY2hhcmFjdGVyKSBmb3IgY2hh
cmFjdGVyIGluIHNlbGYuYWxwaGFiZXRdKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKAorICAg
ICAgICAgICAgc29ydGVkKGNhcHR1cmVkLndlYmtpdGNvcmVweS5sb2cuZ2V0dmFsdWUoKS5zcGxp
dGxpbmVzKCkpLAorICAgICAgICAgICAgc29ydGVkKFsnd29ya2VyL3t9IHN0YXJ0aW5nJy5mb3Jt
YXQobnVtYmVyKSBmb3IgbnVtYmVyIGluIHJhbmdlKDQpXSArIFsnd29ya2VyL3t9IHN0b3BwaW5n
Jy5mb3JtYXQobnVtYmVyKSBmb3IgbnVtYmVyIGluIHJhbmdlKDQpXSksCisgICAgICAgICkKKwor
ICAgIGRlZiB0ZXN0X2NhbGxiYWNrKHNlbGYpOgorICAgICAgICBzZXF1ZW5jZSA9IFtdCisKKyAg
ICAgICAgd2l0aCBPdXRwdXRDYXB0dXJlKCk6CisgICAgICAgICAgICB3aXRoIFRhc2tQb29sKHdv
cmtlcnM9NCkgYXMgcG9vbDoKKyAgICAgICAgICAgICAgICBmb3IgY2hhcmFjdGVyIGluIHNlbGYu
YWxwaGFiZXQ6CisgICAgICAgICAgICAgICAgICAgIHBvb2wuZG8oYWN0aW9uLCBjaGFyYWN0ZXIs
IGNhbGxiYWNrPWxhbWJkYSB2YWx1ZTogc2VxdWVuY2UuYXBwZW5kKHZhbHVlKSkKKyAgICAgICAg
ICAgICAgICBwb29sLndhaXQoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKAorICAgICAgICAg
ICAgc2VsZi5hbHBoYWJldCwKKyAgICAgICAgICAgICcnLmpvaW4oc29ydGVkKHNlcXVlbmNlKSks
CisgICAgICAgICkKKworICAgIGRlZiB0ZXN0X2V4Y2VwdGlvbihzZWxmKToKKyAgICAgICAgd2l0
aCBPdXRwdXRDYXB0dXJlKGxldmVsPWxvZ2dpbmcuSU5GTykgYXMgY2FwdHVyZWQ6CisgICAgICAg
ICAgICB3aXRoIHNlbGYuYXNzZXJ0UmFpc2VzKFJ1bnRpbWVFcnJvcik6CisgICAgICAgICAgICAg
ICAgd2l0aCBUYXNrUG9vbCh3b3JrZXJzPTEpIGFzIHBvb2w6CisgICAgICAgICAgICAgICAgICAg
IHBvb2wuZG8oZXhjZXB0aW9uLCAnVGVzdGluZyBleGNlcHRpb24nKQorICAgICAgICAgICAgICAg
ICAgICBwb29sLndhaXQoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKAorICAgICAgICAgICAg
Y2FwdHVyZWQud2Via2l0Y29yZXB5LmxvZy5nZXR2YWx1ZSgpLnNwbGl0bGluZXMoKSwKKyAgICAg
ICAgICAgIFsnd29ya2VyLzAgc3RhcnRpbmcnLCAnd29ya2VyLzAgc3RvcHBpbmcnXSwKKyAgICAg
ICAgKQorCisgICAgZGVmIHRlc3Rfc2V0dXAoc2VsZik6CisgICAgICAgIHdpdGggT3V0cHV0Q2Fw
dHVyZSgpIGFzIGNhcHR1cmVkOgorICAgICAgICAgICAgd2l0aCBUYXNrUG9vbCh3b3JrZXJzPTQs
IHNldHVwPXNldHVwKSBhcyBwb29sOgorICAgICAgICAgICAgICAgIGZvciBjaGFyYWN0ZXIgaW4g
c2VsZi5hbHBoYWJldDoKKyAgICAgICAgICAgICAgICAgICAgcG9vbC5kbyhhY3Rpb24sIGNoYXJh
Y3RlcikKKyAgICAgICAgICAgICAgICBwb29sLndhaXQoKQorICAgICAgICBzZWxmLmFzc2VydEVx
dWFsKAorICAgICAgICAgICAgc29ydGVkKGNhcHR1cmVkLndlYmtpdGNvcmVweS5sb2cuZ2V0dmFs
dWUoKS5zcGxpdGxpbmVzKCkpLAorICAgICAgICAgICAgWyd3b3JrZXIve30gU2V0dGluZyB1cCcu
Zm9ybWF0KHgpIGZvciB4IGluIHJhbmdlKDQpXSwKKyAgICAgICAgKQorCisgICAgZGVmIHRlc3Rf
dGVhcmRvd24oc2VsZik6CisgICAgICAgIHdpdGggT3V0cHV0Q2FwdHVyZSgpIGFzIGNhcHR1cmVk
OgorICAgICAgICAgICAgd2l0aCBUYXNrUG9vbCh3b3JrZXJzPTQsIHRlYXJkb3duPXRlYXJkb3du
KSBhcyBwb29sOgorICAgICAgICAgICAgICAgIGZvciBjaGFyYWN0ZXIgaW4gc2VsZi5hbHBoYWJl
dDoKKyAgICAgICAgICAgICAgICAgICAgcG9vbC5kbyhhY3Rpb24sIGNoYXJhY3RlcikKKyAgICAg
ICAgICAgICAgICBwb29sLndhaXQoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKAorICAgICAg
ICAgICAgc29ydGVkKGNhcHR1cmVkLndlYmtpdGNvcmVweS5sb2cuZ2V0dmFsdWUoKS5zcGxpdGxp
bmVzKCkpLAorICAgICAgICAgICAgWyd3b3JrZXIve30gVGVhcmluZyBkb3duJy5mb3JtYXQoeCkg
Zm9yIHggaW4gcmFuZ2UoNCldLAorICAgICAgICApCisKKyAgICBkZWYgdGVzdF9pbnZhbGlkX3No
dXRkb3duKHNlbGYpOgorICAgICAgICB3aXRoIE91dHB1dENhcHR1cmUoKToKKyAgICAgICAgICAg
IHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoVGFza1Bvb2wuRXhjZXB0aW9uKToKKyAgICAgICAgICAg
ICAgICB3aXRoIFRhc2tQb29sKHdvcmtlcnM9MSwgdGVhcmRvd249dGVhcmRvd24sIGdyYWNlX3Bl
cmlvZD0xKSBhcyBwb29sOgorICAgICAgICAgICAgICAgICAgICBwb29sLmRvKHdhaXQsIDIpCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>417463</attachid>
            <date>2021-01-12 09:35:52 -0800</date>
            <delta_ts>2021-01-19 07:53:10 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-220547-20210112093551.patch</filename>
            <type>text/plain</type>
            <size>22160</size>
            <attacher name="Jonathan Bedard">jbedard</attacher>
            
              <data encoding="base64">SW5kZXg6IFRvb2xzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9DaGFuZ2VMb2cJKHJl
dmlzaW9uIDI3MTQwNCkKKysrIFRvb2xzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwz
ICsxLDU0IEBACisyMDIxLTAxLTEyICBKb25hdGhhbiBCZWRhcmQgIDxqYmVkYXJkQGFwcGxlLmNv
bT4KKworICAgICAgICBbd2Via2l0Y29yZXB5XSBBZGQgVGFza1Bvb2wKKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIyMDU0NworICAgICAgICA8cmRhcjov
L3Byb2JsZW0vNzMwNDM4ODc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISku
CisKKyAgICAgICAgVGhlIFRhc2tQb29sIG9iamVjdCBpcyBhIFB5dGhvbiAzLjggY29tcGF0aWJs
ZSBtdWx0aXByb2Nlc3NpbmcgdG9vbC4gTm90YWJsZSBmZWF0dXJlcyBhcmUgZm9yd2FyZGluZyBz
dGRvdXQsCisgICAgICAgIHN0ZGVyciBhbmQgbG9nZ2luZyB0byB0aGUgcGFyZW50IHByb2Nlc3Ms
IGV4Y2VwdGlvbiBwcm9wYWdhdGlvbiBiZXR3ZWVuIHByb2Nlc3NlcywgYW5kIGdyYWNlZnVsIGNs
ZWFuLXVwIHdoZW4KKyAgICAgICAgZXhjZXB0aW9ucyBpbiB0aGUgcGFyZW50IHByb2Nlc3MgYXJl
IGVuY291bnRlcmVkCisKKyAgICAgICAgKiBTY3JpcHRzL2xpYnJhcmllcy93ZWJraXRjb3JlcHkv
d2Via2l0Y29yZXB5L19faW5pdF9fLnB5OiBCdW1wIHZlcnNpb24sIGFkZCB0YmxpYi4KKyAgICAg
ICAgKiBTY3JpcHRzL2xpYnJhcmllcy93ZWJraXRjb3JlcHkvd2Via2l0Y29yZXB5L3Rhc2tfcG9v
bC5weTogQWRkZWQuCisgICAgICAgIChNZXNzYWdlKTogQmFzZSBjbGFzcyBmb3IgbWVzc2FnZSBw
YXNzZWQgYmV0d2VlbiBwcm9jZXNzZXMuCisgICAgICAgIChUYXNrKTogTWVzc2FnZSBpbmNsdWRp
bmcgZnVuY3Rpb24gYW5kIGFyZ3VtZW50cyB0byB0aGF0IGZ1bmN0aW9uLgorICAgICAgICAoUmVz
dWx0KTogUmV0dXJuIHZhbHVlIG9mIGEgdGFzayBwYXNzZWQgdG8gdGhlIHBhcmVudCBwcm9jZXNz
LgorICAgICAgICAoTG9nKTogUGFzcyBsb2cgbWVzc2FnZSBmcm9tIGNoaWxkIHByb2Nlc3MgdG8g
cGFyZW50IHByb2Nlc3MuCisgICAgICAgIChQcmludCk6IFBhc3Mgc3Rkb3V0IG9yIHN0ZGVyciBs
aW5lIGZyb20gY2hpbGQgcHJvY2VzcyB0byBwYXJlbnQgcHJvY2Vzcy4KKyAgICAgICAgKFN0YXRl
KTogTm90aWZ5IHBhcmVudCBwcm9jZXNzIHRoYXQgdGhlIGNoaWxkIHByb2Nlc3MgaGFzIGNoYW5n
ZWQgc3RhdGUuCisgICAgICAgIChDaGlsZEV4Y2VwdGlvbik6IFBhc3MgZXhjZXB0aW9uIGFuZCBz
dGFjayB0cmFjZSBmcm9tCisgICAgICAgIChNZXNzYWdlUXVldWUpOiBQYWlyIGZvciBtdWx0aXBy
b2Nlc3MgcXVldWVzIGFsbG93aW5nIGZvciBtZXNzYWdlcyB0byBiZSBwYXNzZWQgYmV0d2VlbiBw
cm9jZXNzZXMuCisgICAgICAgIChQcm9jZXNzKTogU2NvcGluZyBjbGFzcyBtYW5hZ2luZyBjaGls
ZC1wcm9jZXNzIGxvZ2ljLgorICAgICAgICAoUHJvY2Vzcy5Mb2dIYW5kbGVyKTogTG9nZ2luZyBo
YW5kbGVyIHRoYXQgcGFzc2VzIGxvZyBsaW5lcyBmcm9tIHRoZSBjaGlsZCBwcm9jZXNzIHRvIGl0
J3MgcGFyZW50LgorICAgICAgICAoUHJvY2Vzcy5TdHJlYW0pOiBXcml0YWJsZSBzdHJlYW0gd2hp
Y2ggcGFzc2VzIGNvbnRlbnQgZnJvbSB0aGUgY2hpbGQgcHJvY2VzcyB0byB0aGUgc3RhbmRhcmQg
b3V0IG9yIGVycm9yCisgICAgICAgIG9mIHRoYXQgcHJvY2VzcydzIHBhcmVudC4KKyAgICAgICAg
KFByb2Nlc3MuaGFuZGxlcik6IFNJR1RFUk0gc2hvdWxkIHByZXZlbnQgZnV0dXJlIHByb2Nlc3Np
bmcgYnV0IGFsbG93IGN1cnJlbnRseSBpbi1mbGlnaHQgdGFza3MgdG8gY29tcGxldGUuCisgICAg
ICAgIChQcm9jZXNzLm1haW4pOiBFbnRyeS1wb2ludCB0byBjaGlsZCBwcm9jZXNzLgorICAgICAg
ICAoVGFza1Bvb2wpOiBNYW5hZ2luZyBhbGxvY2F0aW9uIG9mIHRhc2tzIHRvIGNoaWxkIHByb2Nl
c3NlcyBhbmQgY2xlYW4gdXAgdGhvc2UgY2hpbGQgcHJvY2Vzc2VzLgorICAgICAgICAoVGFza1Bv
b2wuRXhjZXB0aW9uKTogRXhjZXB0aW9uIG93bmVkIGJ5IFRhc2tQb29sIG9iamVjdC4KKyAgICAg
ICAgKFRhc2tQb29sLl9faW5pdF9fKToKKyAgICAgICAgKFRhc2tQb29sLl9fZW50ZXJfXyk6Cisg
ICAgICAgIChUYXNrUG9vbC5kbyk6IFBhc3MgdGFzayB0byBjaGlsZCBwcm9jZXNzZXMuCisgICAg
ICAgIChUYXNrUG9vbC53YWl0KTogV2FpdCB1bnRpbCBhbGwgcHJvY2Vzc2VzIGFyZSBjb21wbGV0
ZWQuCisgICAgICAgIChUYXNrUG9vbC5fX2V4aXRfXyk6IFRlYXJkb3duIGFsbCBjaGlsZCBwcm9j
ZXNzZXMuCisgICAgICAgICogU2NyaXB0cy9saWJyYXJpZXMvd2Via2l0Y29yZXB5L3dlYmtpdGNv
cmVweS90ZXN0cy90YXNrX3Bvb2xfdW5pdHRlc3QucHk6IEFkZGVkLgorICAgICAgICAoc2V0dXAp
OgorICAgICAgICAodGVhcmRvd24pOgorICAgICAgICAoYWN0aW9uKToKKyAgICAgICAgKGxvZyk6
CisgICAgICAgICh3YWl0KToKKyAgICAgICAgKGV4Y2VwdGlvbik6CisgICAgICAgIChUYXNrUG9v
bFVuaXR0ZXN0KToKKyAgICAgICAgKFRhc2tQb29sVW5pdHRlc3QudGVzdF9zaW5nbGUpOgorICAg
ICAgICAoVGFza1Bvb2xVbml0dGVzdC50ZXN0X211bHRpcGxlKToKKyAgICAgICAgKFRhc2tQb29s
VW5pdHRlc3QudGVzdF9jYWxsYmFjayk6CisgICAgICAgIChUYXNrUG9vbFVuaXR0ZXN0LnRlc3Rf
ZXhjZXB0aW9uKToKKyAgICAgICAgKFRhc2tQb29sVW5pdHRlc3QudGVzdF9zZXR1cCk6CisgICAg
ICAgIChUYXNrUG9vbFVuaXR0ZXN0LnRlc3RfdGVhcmRvd24pOgorICAgICAgICAoVGFza1Bvb2xV
bml0dGVzdC50ZXN0X2ludmFsaWRfc2h1dGRvd24pOgorCiAyMDIxLTAxLTExICBMYXVybyBNb3Vy
YSAgPGxtb3VyYUBpZ2FsaWEuY29tPgogCiAgICAgICAgIFtXUEVdIEdhcmRlbmluZyBBUEkgdGVz
dCBjcmFzaApJbmRleDogVG9vbHMvU2NyaXB0cy9saWJyYXJpZXMvd2Via2l0Y29yZXB5L3NldHVw
LnB5Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1NjcmlwdHMvbGlicmFyaWVzL3dlYmtpdGNvcmVweS9z
ZXR1cC5weQkocmV2aXNpb24gMjcxMzY3KQorKysgVG9vbHMvU2NyaXB0cy9saWJyYXJpZXMvd2Vi
a2l0Y29yZXB5L3NldHVwLnB5CSh3b3JraW5nIGNvcHkpCkBAIC0zMCw3ICszMCw3IEBAIGRlZiBy
ZWFkbWUoKToKIAogc2V0dXAoCiAgICAgbmFtZT0nd2Via2l0Y29yZXB5JywKLSAgICB2ZXJzaW9u
PScwLjQuMjYnLAorICAgIHZlcnNpb249JzAuNS4wJywKICAgICBkZXNjcmlwdGlvbj0nTGlicmFy
eSBjb250YWluaW5nIHZhcmlvdXMgUHl0aG9uIHN1cHBvcnQgY2xhc3NlcyBhbmQgZnVuY3Rpb25z
LicsCiAgICAgbG9uZ19kZXNjcmlwdGlvbj1yZWFkbWUoKSwKICAgICBjbGFzc2lmaWVycz1bCklu
ZGV4OiBUb29scy9TY3JpcHRzL2xpYnJhcmllcy93ZWJraXRjb3JlcHkvd2Via2l0Y29yZXB5L19f
aW5pdF9fLnB5Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1NjcmlwdHMvbGlicmFyaWVzL3dlYmtpdGNv
cmVweS93ZWJraXRjb3JlcHkvX19pbml0X18ucHkJKHJldmlzaW9uIDI3MTM2NykKKysrIFRvb2xz
L1NjcmlwdHMvbGlicmFyaWVzL3dlYmtpdGNvcmVweS93ZWJraXRjb3JlcHkvX19pbml0X18ucHkJ
KHdvcmtpbmcgY29weSkKQEAgLTEsNCArMSw0IEBACi0jIENvcHlyaWdodCAoQykgMjAyMCBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjIENvcHlyaWdodCAoQykgMjAyMCwgMjAyMSBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAjCiAjIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogIyBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKQEAgLTM0LDggKzM0LDkgQEAgZnJvbSB3ZWJraXRjb3JlcHkuc3RyaW5nX3V0aWxzIGltcG9y
dCBCeQogZnJvbSB3ZWJraXRjb3JlcHkudGltZW91dCBpbXBvcnQgVGltZW91dAogZnJvbSB3ZWJr
aXRjb3JlcHkuc3VicHJvY2Vzc191dGlscyBpbXBvcnQgVGltZW91dEV4cGlyZWQsIENvbXBsZXRl
ZFByb2Nlc3MsIHJ1bgogZnJvbSB3ZWJraXRjb3JlcHkub3V0cHV0X2NhcHR1cmUgaW1wb3J0IExv
Z2dlckNhcHR1cmUsIE91dHB1dENhcHR1cmUsIE91dHB1dER1cGxpY2F0ZQorZnJvbSB3ZWJraXRj
b3JlcHkudGFza19wb29sIGltcG9ydCBUYXNrUG9vbAogCi12ZXJzaW9uID0gVmVyc2lvbigwLCA0
LCAyNikKK3ZlcnNpb24gPSBWZXJzaW9uKDAsIDUsIDApCiAKIGZyb20gd2Via2l0Y29yZXB5LmF1
dG9pbnN0YWxsIGltcG9ydCBQYWNrYWdlLCBBdXRvSW5zdGFsbAogaWYgc3lzLnZlcnNpb25faW5m
byA+ICgzLCAwKToKQEAgLTU1LDYgKzU2LDcgQEAgQXV0b0luc3RhbGwucmVnaXN0ZXIoUGFja2Fn
ZSgncmVxdWVzdHMnLAogQXV0b0luc3RhbGwucmVnaXN0ZXIoUGFja2FnZSgnc2V0dXB0b29scycs
IFZlcnNpb24oNDQsIDEsICAxKSkpCiBBdXRvSW5zdGFsbC5yZWdpc3RlcihQYWNrYWdlKCdzb2Nr
cycsIFZlcnNpb24oMSwgNywgMSksIHB5cGlfbmFtZT0nUHlTb2NrcycpKQogQXV0b0luc3RhbGwu
cmVnaXN0ZXIoUGFja2FnZSgnc2l4JywgVmVyc2lvbigxLCAxNSwgMCkpKQorQXV0b0luc3RhbGwu
cmVnaXN0ZXIoUGFja2FnZSgndGJsaWInLCBWZXJzaW9uKDEsIDcsIDApKSkKIEF1dG9JbnN0YWxs
LnJlZ2lzdGVyKFBhY2thZ2UoJ3VybGxpYjMnLCBWZXJzaW9uKDEsIDI1LCAxMCkpKQogQXV0b0lu
c3RhbGwucmVnaXN0ZXIoUGFja2FnZSgnd2hlZWwnLCBWZXJzaW9uKDAsIDM1LCAxKSkpCiAKSW5k
ZXg6IFRvb2xzL1NjcmlwdHMvbGlicmFyaWVzL3dlYmtpdGNvcmVweS93ZWJraXRjb3JlcHkvdGFz
a19wb29sLnB5Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1NjcmlwdHMvbGlicmFyaWVzL3dlYmtpdGNv
cmVweS93ZWJraXRjb3JlcHkvdGFza19wb29sLnB5CShub25leGlzdGVudCkKKysrIFRvb2xzL1Nj
cmlwdHMvbGlicmFyaWVzL3dlYmtpdGNvcmVweS93ZWJraXRjb3JlcHkvdGFza19wb29sLnB5CSh3
b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMzUzIEBACisjIENvcHlyaWdodCAoQykgMjAyMSBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjCisjIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorIyBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyMgYXJlIG1ldDoKKyMgMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyMgMi4gIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyMgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyMKKyMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQgQU5Z
CisjIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFIElNUExJRUQKKyMgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorIyBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkKKyMgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworIyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04KKyMgQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyMgKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRI
SVMKKyMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCisKK2ltcG9ydCBpbworaW1wb3J0IG9zCitpbXBvcnQgbG9nZ2luZworaW1wb3J0
IG11bHRpcHJvY2Vzc2luZworaW1wb3J0IHNpZ25hbAoraW1wb3J0IHN5cworCitmcm9tIHNpeCBp
bXBvcnQgcmVyYWlzZQorZnJvbSB3ZWJraXRjb3JlcHkgaW1wb3J0IE91dHB1dENhcHR1cmUsIFRp
bWVvdXQsIGxvZworCisKK2NsYXNzIE1lc3NhZ2Uob2JqZWN0KToKKyAgICBkZWYgX19pbml0X18o
c2VsZiwgd2hvPU5vbmUpOgorICAgICAgICBzZWxmLndobyA9IHdobyBvciBQcm9jZXNzLm5hbWUK
KworICAgIGRlZiBfX2NhbGxfXyhzZWxmLCBjYWxsZXIpOgorICAgICAgICBOb3RJbXBsZW1lbnRl
ZCgpCisKKworY2xhc3MgVGFzayhNZXNzYWdlKToKKyAgICBkZWYgX19pbml0X18oc2VsZiwgZnVu
Y3Rpb24sIGlkLCAqYXJncywgKiprd2FyZ3MpOgorICAgICAgICBzdXBlcihUYXNrLCBzZWxmKS5f
X2luaXRfXygpCisKKyAgICAgICAgc2VsZi5mdW5jdGlvbiA9IGZ1bmN0aW9uCisgICAgICAgIHNl
bGYuaWQgPSBpZAorICAgICAgICBzZWxmLmFyZ3MgPSB0dXBsZShhcmdzKQorICAgICAgICBzZWxm
Lmt3YXJncyA9IGt3YXJncworCisgICAgZGVmIF9fY2FsbF9fKHNlbGYsIGNhbGxlcik6CisgICAg
ICAgIHJldHVybiBzZWxmLmZ1bmN0aW9uKCpzZWxmLmFyZ3MsICoqc2VsZi5rd2FyZ3MpCisKKwor
Y2xhc3MgUmVzdWx0KE1lc3NhZ2UpOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCB2YWx1ZSwgaWQp
OgorICAgICAgICBzdXBlcihSZXN1bHQsIHNlbGYpLl9faW5pdF9fKCkKKyAgICAgICAgc2VsZi52
YWx1ZSA9IHZhbHVlCisgICAgICAgIHNlbGYuaWQgPSBpZAorCisgICAgZGVmIF9fY2FsbF9fKHNl
bGYsIGNhbGxlcik6CisgICAgICAgIGlmIGNhbGxlcjoKKyAgICAgICAgICAgIGNhbGxlci5jYWxs
YmFja3MucG9wKHNlbGYuaWQsIGxhbWJkYSB2YWx1ZTogdmFsdWUpKHNlbGYudmFsdWUpCisgICAg
ICAgIHJldHVybiBzZWxmLnZhbHVlCisKKworY2xhc3MgTG9nKE1lc3NhZ2UpOgorICAgIGRlZiBf
X2luaXRfXyhzZWxmLCByZWNvcmQpOgorICAgICAgICBzdXBlcihMb2csIHNlbGYpLl9faW5pdF9f
KCkKKyAgICAgICAgc2VsZi5yZWNvcmQgPSByZWNvcmQKKworICAgIGRlZiBfX2NhbGxfXyhzZWxm
LCBjYWxsZXIpOgorICAgICAgICBsb2dnaW5nLmdldExvZ2dlcihzZWxmLnJlY29yZC5uYW1lKS5s
b2coc2VsZi5yZWNvcmQubGV2ZWxubywgJ3t9IHt9Jy5mb3JtYXQoc2VsZi53aG8sIHNlbGYucmVj
b3JkLmdldE1lc3NhZ2UoKSkpCisKKworY2xhc3MgUHJpbnQoTWVzc2FnZSk6CisgICAgc3Rkb3V0
ID0gMQorICAgIHN0ZGVyciA9IDIKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBsaW5lcywgc3Ry
ZWFtPXN0ZG91dCk6CisgICAgICAgIHN1cGVyKFByaW50LCBzZWxmKS5fX2luaXRfXygpCisgICAg
ICAgIHNlbGYubGluZXMgPSBsaW5lcworICAgICAgICBzZWxmLnN0cmVhbSA9IHN0cmVhbQorCisg
ICAgZGVmIF9fY2FsbF9fKHNlbGYsIGNhbGxlcik6CisgICAgICAgIHN0cmVhbSA9IHsKKyAgICAg
ICAgICAgIHNlbGYuc3Rkb3V0OiBzeXMuc3Rkb3V0LAorICAgICAgICAgICAgc2VsZi5zdGRlcnI6
IHN5cy5zdGRlcnIsCisgICAgICAgIH0uZ2V0KHNlbGYuc3RyZWFtLCBzeXMuc3RkZXJyKQorICAg
ICAgICBmb3IgbGluZSBpbiBzZWxmLmxpbmVzOgorICAgICAgICAgICAgc3RyZWFtLndyaXRlKCd7
fVxuJy5mb3JtYXQobGluZSkpCisKKworY2xhc3MgU3RhdGUoTWVzc2FnZSk6CisgICAgU1RBUlRJ
TkcsIFNUT1BQSU5HID0gMSwgMAorICAgIFNUQVRFUyA9IFtTVEFSVElORywgU1RPUFBJTkddCisK
KyAgICBkZWYgX19pbml0X18oc2VsZiwgc3RhdGUpOgorICAgICAgICBzdXBlcihTdGF0ZSwgc2Vs
ZikuX19pbml0X18oKQorICAgICAgICBzZWxmLnN0YXRlID0gc3RhdGUKKworICAgIGRlZiBfX2Nh
bGxfXyhzZWxmLCBjYWxsZXIpOgorICAgICAgICBsb2cuaW5mbygne30ge30nLmZvcm1hdCgKKyAg
ICAgICAgICAgIHNlbGYud2hvLCB7CisgICAgICAgICAgICAgICAgU3RhdGUuU1RBUlRJTkc6ICdz
dGFydGluZycsCisgICAgICAgICAgICAgICAgU3RhdGUuU1RPUFBJTkc6ICdzdG9wcGluZycsCisg
ICAgICAgICAgICB9LmdldChzZWxmLnN0YXRlLCBzZWxmLnN0YXRlKSwKKyAgICAgICAgKSkKKyAg
ICAgICAgaWYgY2FsbGVyOgorICAgICAgICAgICAgY2FsbGVyLl9zdGFydGVkICs9IHsKKyAgICAg
ICAgICAgICAgICBTdGF0ZS5TVEFSVElORzogMSwKKyAgICAgICAgICAgICAgICBTdGF0ZS5TVE9Q
UElORzogLTEsCisgICAgICAgICAgICB9LmdldChzZWxmLnN0YXRlLCAwKQorICAgICAgICByZXR1
cm4gc2VsZi5zdGF0ZQorCisKK2NsYXNzIENoaWxkRXhjZXB0aW9uKE1lc3NhZ2UpOgorICAgIGRl
ZiBfX2luaXRfXyhzZWxmLCBleGNfaW5mbz1Ob25lKToKKyAgICAgICAgc3VwZXIoQ2hpbGRFeGNl
cHRpb24sIHNlbGYpLl9faW5pdF9fKCkKKyAgICAgICAgc2VsZi5leGNfaW5mbyA9IGV4Y19pbmZv
IG9yIHN5cy5leGNfaW5mbygpCisKKyAgICBkZWYgX19jYWxsX18oc2VsZiwgY2FsbGVyKToKKyAg
ICAgICAgXywgZXhjZXB0aW9uLCB0cmFjZSA9IHN5cy5leGNfaW5mbygpCisgICAgICAgIGlmIGV4
Y2VwdGlvbjoKKyAgICAgICAgICAgIGxvZy5jcml0aWNhbCgiRXhjZXB0aW9uIGluIGZsaWdodCwg
J3t9JyBpZ25vcmVkIi5mb3JtYXQoc2VsZi5leGNfaW5mb1sxXSkpCisgICAgICAgICAgICByZXR1
cm4KKworICAgICAgICByZXJhaXNlKCpzZWxmLmV4Y19pbmZvKQorCisKK2NsYXNzIE1lc3NhZ2VR
dWV1ZShvYmplY3QpOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBvdXRnb2luZz1Ob25lLCBpbmNv
bWluZz1Ob25lKToKKyAgICAgICAgc2VsZi5vdXRnb2luZyA9IG91dGdvaW5nIG9yIG11bHRpcHJv
Y2Vzc2luZy5RdWV1ZSgpCisgICAgICAgIHNlbGYuaW5jb21pbmcgPSBpbmNvbWluZyBvciBtdWx0
aXByb2Nlc3NpbmcuUXVldWUoKQorCisgICAgZGVmIHNlbmQoc2VsZiwgb2JqZWN0KToKKyAgICAg
ICAgcmV0dXJuIHNlbGYub3V0Z29pbmcucHV0KG9iamVjdCkKKworICAgIGRlZiByZWNlaXZlKHNl
bGYsIGJsb2NraW5nPVRydWUpOgorICAgICAgICB3aXRoIFRpbWVvdXQuRGlzYWJsZUFsYXJtKCk6
CisgICAgICAgICAgICBpZiBub3QgYmxvY2tpbmc6CisgICAgICAgICAgICAgICAgcmV0dXJuIHNl
bGYuaW5jb21pbmcuZ2V0KGJsb2NrPUZhbHNlKQorCisgICAgICAgICAgICBkaWZmZXJlbmNlID0g
VGltZW91dC5kaWZmZXJlbmNlKCkKKyAgICAgICAgICAgIGlmIGRpZmZlcmVuY2UgaXMgbm90IE5v
bmU6CisgICAgICAgICAgICAgICAgcmV0dXJuIHNlbGYuaW5jb21pbmcuZ2V0KHRpbWVvdXQ9ZGlm
ZmVyZW5jZSkKKyAgICAgICAgICAgIHJldHVybiBzZWxmLmluY29taW5nLmdldCgpCisKKworY2xh
c3MgUHJvY2VzcyhvYmplY3QpOgorICAgIG5hbWUgPSBOb25lCisgICAgcXVldWUgPSBOb25lCisg
ICAgd29ya2luZyA9IEZhbHNlCisKKyAgICBjbGFzcyBMb2dIYW5kbGVyKGxvZ2dpbmcuSGFuZGxl
cik6CisgICAgICAgIGRlZiBlbWl0KHNlbGYsIHJlY29yZCk6CisgICAgICAgICAgICBQcm9jZXNz
LnF1ZXVlLnNlbmQoTG9nKHJlY29yZCkpCisKKyAgICBjbGFzcyBTdHJlYW0oaW8uSU9CYXNlKToK
KyAgICAgICAgZGVmIF9faW5pdF9fKHNlbGYsIGhhbmRsZSk6CisgICAgICAgICAgICBpZiBub3Qg
aGFuZGxlOgorICAgICAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoJ05vIHRhcmdldCBzdHJl
YW1zIHByb3ZpZGVkJykKKyAgICAgICAgICAgIHNlbGYuaGFuZGxlID0gaGFuZGxlCisgICAgICAg
ICAgICBzZWxmLmNhY2hlID0gTm9uZQorCisgICAgICAgIGRlZiBmbHVzaChzZWxmKToKKyAgICAg
ICAgICAgIGlmIHNlbGYuY2FjaGUgaXMgbm90IE5vbmU6CisgICAgICAgICAgICAgICAgUHJvY2Vz
cy5xdWV1ZS5zZW5kKFByaW50KGxpbmVzPVtzZWxmLmNhY2hlXSwgc3RyZWFtPXNlbGYuaGFuZGxl
KSkKKyAgICAgICAgICAgICAgICBzZWxmLmNhY2hlID0gTm9uZQorCisgICAgICAgIGRlZiB3cml0
ZWxpbmVzKHNlbGYsIGxpbmVzKToKKyAgICAgICAgICAgIGZvciBsaW5lIGluIGxpbmVzOgorICAg
ICAgICAgICAgICAgIHNlbGYud3JpdGUobGluZSkKKworICAgICAgICBkZWYgd3JpdGUoc2VsZiwg
Yik6CisgICAgICAgICAgICB0b19iZV9wcmludGVkID0gW10KKyAgICAgICAgICAgIGZvciBjIGlu
IGI6CisgICAgICAgICAgICAgICAgaWYgYyA9PSAnXG4nOgorICAgICAgICAgICAgICAgICAgICB0
b19iZV9wcmludGVkLmFwcGVuZChzZWxmLmNhY2hlIG9yICcnKQorICAgICAgICAgICAgICAgICAg
ICBzZWxmLmNhY2hlID0gTm9uZQorICAgICAgICAgICAgICAgIGVsaWYgYyBub3QgaW4gWydccics
ICdcMCddOgorICAgICAgICAgICAgICAgICAgICBzZWxmLmNhY2hlID0gYyBpZiBzZWxmLmNhY2hl
IGlzIE5vbmUgZWxzZSAoc2VsZi5jYWNoZSArIGMpCisgICAgICAgICAgICBpZiB0b19iZV9wcmlu
dGVkOgorICAgICAgICAgICAgICAgIFByb2Nlc3MucXVldWUuc2VuZChQcmludChsaW5lcz10b19i
ZV9wcmludGVkLCBzdHJlYW09c2VsZi5oYW5kbGUpKQorICAgICAgICAgICAgcmV0dXJuIGxlbihi
KQorCisgICAgICAgIEBwcm9wZXJ0eQorICAgICAgICBkZWYgY2xvc2VkKHNlbGYpOgorICAgICAg
ICAgICAgcmV0dXJuIEZhbHNlCisKKyAgICAgICAgZGVmIGNsb3NlKHNlbGYpOgorICAgICAgICAg
ICAgc2VsZi5mbHVzaCgpCisKKyAgICAgICAgZGVmIGZpbGVubyhzZWxmKToKKyAgICAgICAgICAg
IHJldHVybiBzZWxmLmhhbmRsZQorCisgICAgICAgIGRlZiBpc2F0dHkoc2VsZik6CisgICAgICAg
ICAgICByZXR1cm4gRmFsc2UKKworICAgICAgICBkZWYgcmVhZGFibGUoc2VsZik6CisgICAgICAg
ICAgICByZXR1cm4gRmFsc2UKKworICAgICAgICBkZWYgcmVhZGxpbmUoc2VsZiwgc2l6ZT0tMSk6
CisgICAgICAgICAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yKCkKKworICAgICAgICBkZWYg
cmVhZGxpbmVzKHNlbGYsIGhpbnQ9LTEpOgorICAgICAgICAgICAgcmFpc2UgTm90SW1wbGVtZW50
ZWRFcnJvcigpCisKKyAgICAgICAgZGVmIHNlZWsoc2VsZiwgb2Zmc2V0LCB3aGVuY2U9aW8uU0VF
S19TRVQpOgorICAgICAgICAgICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcigpCisKKyAgICAg
ICAgZGVmIHNlZWthYmxlKHNlbGYpOgorICAgICAgICAgICAgcmV0dXJuIEZhbHNlCisKKyAgICAg
ICAgZGVmIHRlbGwoc2VsZik6CisgICAgICAgICAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9y
KCkKKworICAgICAgICBkZWYgdHJ1bmNhdGUoc2VsZiwgc2l6ZT1Ob25lKToKKyAgICAgICAgICAg
IHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IoKQorCisgICAgICAgIGRlZiB3cml0YWJsZShzZWxm
KToKKyAgICAgICAgICAgIHJldHVybiBUcnVlCisKKyAgICBAY2xhc3NtZXRob2QKKyAgICBkZWYg
aGFuZGxlcihjbHMsIHZhbHVlLCBfKToKKyAgICAgICAgaWYgdmFsdWUgPT0gc2lnbmFsLlNJR1RF
Uk06CisgICAgICAgICAgICBjbHMud29ya2luZyA9IEZhbHNlCisKKyAgICBAY2xhc3NtZXRob2QK
KyAgICBkZWYgbWFpbihjbHMsIG5hbWUsIHNldHVwLCBtZXNzYWdlX3F1ZXVlLCB0ZWFyZG93bik6
CisgICAgICAgIGZyb20gdGJsaWIgaW1wb3J0IHBpY2tsaW5nX3N1cHBvcnQKKworICAgICAgICBj
bHMubmFtZSA9IG5hbWUKKyAgICAgICAgY2xzLnF1ZXVlID0gbWVzc2FnZV9xdWV1ZQorICAgICAg
ICBjbHMud29ya2luZyA9IFRydWUKKworICAgICAgICBzaWduYWwuc2lnbmFsKHNpZ25hbC5TSUdU
RVJNLCBjbHMuaGFuZGxlcikKKworICAgICAgICBsb2dnZXIgPSBsb2dnaW5nLmdldExvZ2dlcigp
CisgICAgICAgIGZvciBoYW5kbGVyIGluIGxvZ2dlci5oYW5kbGVyczoKKyAgICAgICAgICAgIGxv
Z2dlci5yZW1vdmVIYW5kbGVyKGhhbmRsZXIpCisgICAgICAgIGxvZ2dlci5hZGRIYW5kbGVyKGNs
cy5Mb2dIYW5kbGVyKCkpCisKKyAgICAgICAgY2xzLnF1ZXVlLnNlbmQoU3RhdGUoU3RhdGUuU1RB
UlRJTkcpKQorCisgICAgICAgIHdpdGggT3V0cHV0Q2FwdHVyZS5SZXBsYWNlU3lzU3RyZWFtKCdz
dGRlcnInLCBjbHMuU3RyZWFtKFByaW50LnN0ZGVycikpLCBPdXRwdXRDYXB0dXJlLlJlcGxhY2VT
eXNTdHJlYW0oJ3N0ZG91dCcsIGNscy5TdHJlYW0oUHJpbnQuc3Rkb3V0KSk6CisgICAgICAgICAg
ICB0cnk6CisgICAgICAgICAgICAgICAgcGlja2xpbmdfc3VwcG9ydC5pbnN0YWxsKCkKKyAgICAg
ICAgICAgICAgICBpZiBzZXR1cDoKKyAgICAgICAgICAgICAgICAgICAgc2V0dXAoKQorCisgICAg
ICAgICAgICAgICAgd2hpbGUgY2xzLndvcmtpbmc6CisgICAgICAgICAgICAgICAgICAgIHRhc2sg
PSBjbHMucXVldWUucmVjZWl2ZSgpCisgICAgICAgICAgICAgICAgICAgIGlmIG5vdCB0YXNrOgor
ICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgICAgICAgICAgICAgY2xzLnF1
ZXVlLnNlbmQoUmVzdWx0KHZhbHVlPXRhc2soTm9uZSksIGlkPXRhc2suaWQpKQorCisgICAgICAg
ICAgICBleGNlcHQgQmFzZUV4Y2VwdGlvbjoKKyAgICAgICAgICAgICAgICB0eXAsIGV4Y2VwdGlv
biwgdHJhY2ViYWNrID0gc3lzLmV4Y19pbmZvKCkKKyAgICAgICAgICAgICAgICBjbHMucXVldWUu
c2VuZChDaGlsZEV4Y2VwdGlvbihleGNfaW5mbz0oCisgICAgICAgICAgICAgICAgICAgIHR5cCwg
dHlwKCd7fSAoZnJvbSB7fSknLmZvcm1hdChzdHIoZXhjZXB0aW9uKSwgbmFtZSkpLCB0cmFjZWJh
Y2ssCisgICAgICAgICAgICAgICAgKSkpCisKKyAgICAgICAgICAgIGZpbmFsbHk6CisgICAgICAg
ICAgICAgICAgaWYgdGVhcmRvd246CisgICAgICAgICAgICAgICAgICAgIHRlYXJkb3duKCkKKyAg
ICAgICAgICAgICAgICBzeXMuc3Rkb3V0LmZsdXNoKCkKKyAgICAgICAgICAgICAgICBzeXMuc3Rk
ZXJyLmZsdXNoKCkKKyAgICAgICAgICAgICAgICBjbHMucXVldWUuc2VuZChTdGF0ZShTdGF0ZS5T
VE9QUElORykpCisKKworY2xhc3MgVGFza1Bvb2wob2JqZWN0KToKKworICAgIGNsYXNzIEV4Y2Vw
dGlvbihSdW50aW1lRXJyb3IpOgorICAgICAgICBwYXNzCisKKyAgICBkZWYgX19pbml0X18oc2Vs
Ziwgd29ya2Vycz0xLCBuYW1lPU5vbmUsIHNldHVwPU5vbmUsIHRlYXJkb3duPU5vbmUsIGdyYWNl
X3BlcmlvZD01KToKKyAgICAgICAgIyBFbnN1cmUgdGJsaWIgaXMgaW5zdGFsbGVkIGJlZm9yZSBj
cmVhdGluZyBjaGlsZCBwcm9jZXNzZXMKKyAgICAgICAgaW1wb3J0IHRibGliCisKKyAgICAgICAg
bmFtZSA9IG5hbWUgb3IgJ3dvcmtlcicKKyAgICAgICAgaWYgbmFtZSA9PSBQcm9jZXNzLm5hbWU6
CisgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCJQYXJlbnQgcHJvY2VzcyBpcyBhbHJlYWR5
IG5hbWVkIHt9Ii5mb3JtYXQobmFtZSkpCisKKyAgICAgICAgaWYgd29ya2VycyA8IDE6CisgICAg
ICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCdUYXNrUG9vbCByZXF1aXJlcyBwb3NpdGl2ZSBudW1i
ZXIgb2Ygd29ya2VycycpCisKKyAgICAgICAgc2VsZi5tZXNzYWdlX3F1ZXVlID0gTWVzc2FnZVF1
ZXVlKCkKKworICAgICAgICBzZWxmLndvcmtlcnMgPSBbbXVsdGlwcm9jZXNzaW5nLlByb2Nlc3Mo
CisgICAgICAgICAgICB0YXJnZXQ9UHJvY2Vzcy5tYWluLAorICAgICAgICAgICAgYXJncz0oJ3t9
L3t9Jy5mb3JtYXQobmFtZSwgY291bnQpLCBzZXR1cCwgTWVzc2FnZVF1ZXVlKAorICAgICAgICAg
ICAgICAgIG91dGdvaW5nPXNlbGYubWVzc2FnZV9xdWV1ZS5pbmNvbWluZywKKyAgICAgICAgICAg
ICAgICBpbmNvbWluZz1zZWxmLm1lc3NhZ2VfcXVldWUub3V0Z29pbmcsCisgICAgICAgICAgICAp
LCB0ZWFyZG93biksCisgICAgICAgICkgZm9yIGNvdW50IGluIHJhbmdlKHdvcmtlcnMpXQorICAg
ICAgICBzZWxmLl9zdGFydGVkID0gMAorCisgICAgICAgIHNlbGYuY2FsbGJhY2tzID0ge30KKyAg
ICAgICAgc2VsZi5faWRfY291bnQgPSAwCisgICAgICAgIHNlbGYuZ3JhY2VfcGVyaW9kID0gZ3Jh
Y2VfcGVyaW9kCisKKyAgICBkZWYgX19lbnRlcl9fKHNlbGYpOgorICAgICAgICB3aXRoIFRpbWVv
dXQoc2Vjb25kcz0xMCwgcGF0Y2g9RmFsc2UsIGhhbmRsZXI9c2VsZi5FeGNlcHRpb24oJ0ZhaWxl
ZCB0byBzdGFydCBhbGwgd29ya2VycycpKToKKyAgICAgICAgICAgIGZvciB3b3JrZXIgaW4gc2Vs
Zi53b3JrZXJzOgorICAgICAgICAgICAgICAgIHdvcmtlci5zdGFydCgpCisgICAgICAgICAgICB3
aGlsZSBzZWxmLl9zdGFydGVkIDwgbGVuKHNlbGYud29ya2Vycyk6CisgICAgICAgICAgICAgICAg
c2VsZi5tZXNzYWdlX3F1ZXVlLnJlY2VpdmUoKShzZWxmKQorICAgICAgICByZXR1cm4gc2VsZgor
CisgICAgZGVmIGRvKHNlbGYsIGZ1bmN0aW9uLCAqYXJncywgKiprd2FyZ3MpOgorICAgICAgICBj
YWxsYmFjayA9IGt3YXJncy5wb3AoJ2NhbGxiYWNrJywgTm9uZSkKKyAgICAgICAgaWYgY2FsbGJh
Y2s6CisgICAgICAgICAgICBzZWxmLmNhbGxiYWNrc1tzZWxmLl9pZF9jb3VudF0gPSBjYWxsYmFj
aworICAgICAgICBzZWxmLm1lc3NhZ2VfcXVldWUuc2VuZChUYXNrKGZ1bmN0aW9uLCBzZWxmLl9p
ZF9jb3VudCwgKmFyZ3MsICoqa3dhcmdzKSkKKyAgICAgICAgc2VsZi5faWRfY291bnQgKz0gMQor
CisgICAgZGVmIHdhaXQoc2VsZik6CisgICAgICAgIGZvciBfIGluIHNlbGYud29ya2VyczoKKyAg
ICAgICAgICAgIHNlbGYubWVzc2FnZV9xdWV1ZS5zZW5kKE5vbmUpCisKKyAgICAgICAgd2hpbGUg
c2VsZi5fc3RhcnRlZDoKKyAgICAgICAgICAgIHNlbGYubWVzc2FnZV9xdWV1ZS5yZWNlaXZlKCko
c2VsZikKKworICAgIGRlZiBfX2V4aXRfXyhzZWxmLCAqYXJncywgKiprd2FyZ3MpOgorICAgICAg
ICB0cnk6CisgICAgICAgICAgICBpbmZsaWdodCA9IHN5cy5leGNfaW5mbygpCisKKyAgICAgICAg
ICAgIGZvciB3b3JrZXIgaW4gc2VsZi53b3JrZXJzOgorICAgICAgICAgICAgICAgIGlmIHdvcmtl
ci5pc19hbGl2ZSgpOgorICAgICAgICAgICAgICAgICAgICB3b3JrZXIudGVybWluYXRlKCkKKwor
ICAgICAgICAgICAgd2l0aCBUaW1lb3V0KHNlY29uZHM9c2VsZi5ncmFjZV9wZXJpb2QpOgorICAg
ICAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICAgICAgd2hpbGUgc2VsZi5fc3RhcnRl
ZDoKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYubWVzc2FnZV9xdWV1ZS5yZWNlaXZlKCko
c2VsZikKKyAgICAgICAgICAgICAgICBleGNlcHQgRXhjZXB0aW9uOgorICAgICAgICAgICAgICAg
ICAgICBpZiBpbmZsaWdodFsxXToKKyAgICAgICAgICAgICAgICAgICAgICAgIGxvZy5jcml0aWNh
bCgnU29tZSB3b3JrZXJzIGZhaWxlZCB0byBncmFjZWZ1bGx5IHNodXQgZG93biwgYnV0IGluLWZs
aWdodCBleGNlcHRpb24gdGFraW5nIHByZWNlZGVuY2UnKQorICAgICAgICAgICAgICAgICAgICAg
ICAgcmVyYWlzZSgqaW5mbGlnaHQpCisgICAgICAgICAgICAgICAgICAgIHJhaXNlIHNlbGYuRXhj
ZXB0aW9uKCdTb21lIHdvcmtlcnMgZmFpbGVkIHRvIGdyYWNlZnVsbHkgc2h1dCBkb3duJykKKwor
ICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgZm9yIHdvcmtlciBpbiBzZWxmLndvcmtlcnM6
CisgICAgICAgICAgICAgICAgaWYgbm90IHdvcmtlci5pc19hbGl2ZSgpOgorICAgICAgICAgICAg
ICAgICAgICBjb250aW51ZQorCisgICAgICAgICAgICAgICAgaWYgc3lzLnZlcnNpb25faW5mbyA+
PSAoMywgNyk6CisgICAgICAgICAgICAgICAgICAgIHdvcmtlci5raWxsKCkKKyAgICAgICAgICAg
ICAgICBlbGlmIGhhc2F0dHIoc2lnbmFsLCAnU0lHS0lMTCcpOgorICAgICAgICAgICAgICAgICAg
ICBvcy5raWxsKHdvcmtlci5waWQsIHNpZ25hbC5TSUdLSUxMKQorICAgICAgICAgICAgICAgIGVs
c2U6CisgICAgICAgICAgICAgICAgICAgIHdvcmtlci50ZXJtaW5hdGUoKQpJbmRleDogVG9vbHMv
U2NyaXB0cy9saWJyYXJpZXMvd2Via2l0Y29yZXB5L3dlYmtpdGNvcmVweS90ZXN0cy90YXNrX3Bv
b2xfdW5pdHRlc3QucHkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvU2NyaXB0cy9saWJyYXJpZXMvd2Vi
a2l0Y29yZXB5L3dlYmtpdGNvcmVweS90ZXN0cy90YXNrX3Bvb2xfdW5pdHRlc3QucHkJKG5vbmV4
aXN0ZW50KQorKysgVG9vbHMvU2NyaXB0cy9saWJyYXJpZXMvd2Via2l0Y29yZXB5L3dlYmtpdGNv
cmVweS90ZXN0cy90YXNrX3Bvb2xfdW5pdHRlc3QucHkJKHdvcmtpbmcgY29weSkKQEAgLTAsMCAr
MSwxMzYgQEAKKyMgQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyMKKyMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisjIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworIyBhcmUgbWV0OgorIyAxLiAgUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyMgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorIyAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorIyAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorIworIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5E
IElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORCBBTlkKKyMgRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAor
IyBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSIFBVUlBPU0UgQVJFCisjIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorIyBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUworIyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisjIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTgorIyBB
TlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAorIyAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUworIyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKworaW1wb3J0IGxv
Z2dpbmcKK2ltcG9ydCB0aW1lCitpbXBvcnQgdW5pdHRlc3QKKworZnJvbSB3ZWJraXRjb3JlcHkg
aW1wb3J0IE91dHB1dENhcHR1cmUsIFRhc2tQb29sLCBsb2cgYXMgbG9nZ2VyCisKKworZGVmIHNl
dHVwKCk6CisgICAgbG9nZ2VyLndhcm5pbmcoJ1NldHRpbmcgdXAnKQorCisKK2RlZiB0ZWFyZG93
bigpOgorICAgIGxvZ2dlci53YXJuaW5nKCdUZWFyaW5nIGRvd24nKQorCisKK2RlZiBhY3Rpb24o
YXJndW1lbnQpOgorICAgIHByaW50KCdhY3Rpb24oe30pJy5mb3JtYXQoYXJndW1lbnQpKQorICAg
IHJldHVybiBhcmd1bWVudAorCisKK2RlZiBsb2cobGV2ZWwsIHZhbHVlKToKKyAgICBsb2dnZXIu
bG9nKGxldmVsLCB2YWx1ZSkKKyAgICByZXR1cm4gdmFsdWUKKworCitkZWYgd2FpdChzZWNvbmRz
KToKKyAgICBsb2dnZXIuaW5mbygnd2FpdGluZyB7fSBzZWNvbmRzLi4uJy5mb3JtYXQoc2Vjb25k
cykpCisgICAgdGltZS5zbGVlcChzZWNvbmRzKQorICAgIGxvZ2dlci5pbmZvKCd3YWl0ZWQge30g
c2Vjb25kcyEnLmZvcm1hdChzZWNvbmRzKSkKKyAgICByZXR1cm4gc2Vjb25kcworCisKK2RlZiBl
eGNlcHRpb24odmFsdWUpOgorICAgIHJhaXNlIFJ1bnRpbWVFcnJvcih2YWx1ZSkKKworCitjbGFz
cyBUYXNrUG9vbFVuaXR0ZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICBhbHBoYWJldCA9ICdh
YmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5eicKKworICAgIGRlZiB0ZXN0X3NpbmdsZShzZWxmKToK
KyAgICAgICAgd2l0aCBPdXRwdXRDYXB0dXJlKGxldmVsPWxvZ2dpbmcuV0FSTklORykgYXMgY2Fw
dHVyZWQ6CisgICAgICAgICAgICB3aXRoIFRhc2tQb29sKHdvcmtlcnM9MSkgYXMgcG9vbDoKKyAg
ICAgICAgICAgICAgICBwb29sLmRvKGFjdGlvbiwgJ2EnKQorICAgICAgICAgICAgICAgIHBvb2wu
ZG8obG9nLCBsb2dnaW5nLldBUk5JTkcsICcxJykKKyAgICAgICAgICAgICAgICBwb29sLndhaXQo
KQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY2FwdHVyZWQuc3Rkb3V0LmdldHZhbHVlKCks
ICdhY3Rpb24oYSlcbicpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY2FwdHVyZWQud2Via2l0
Y29yZXB5LmxvZy5nZXR2YWx1ZSgpLCAnd29ya2VyLzAgMVxuJykKKworICAgIGRlZiB0ZXN0X211
bHRpcGxlKHNlbGYpOgorICAgICAgICB3aXRoIE91dHB1dENhcHR1cmUobGV2ZWw9bG9nZ2luZy5J
TkZPKSBhcyBjYXB0dXJlZDoKKyAgICAgICAgICAgIHdpdGggVGFza1Bvb2wod29ya2Vycz00KSBh
cyBwb29sOgorICAgICAgICAgICAgICAgIGZvciBjaGFyYWN0ZXIgaW4gc2VsZi5hbHBoYWJldDoK
KyAgICAgICAgICAgICAgICAgICAgcG9vbC5kbyhhY3Rpb24sIGNoYXJhY3RlcikKKyAgICAgICAg
ICAgICAgICBwb29sLndhaXQoKQorCisgICAgICAgIGxpbmVzID0gY2FwdHVyZWQuc3Rkb3V0Lmdl
dHZhbHVlKCkuc3BsaXRsaW5lcygpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKHNvcnRlZChs
aW5lcyksIFsnYWN0aW9uKHt9KScuZm9ybWF0KGNoYXJhY3RlcikgZm9yIGNoYXJhY3RlciBpbiBz
ZWxmLmFscGhhYmV0XSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKKyAgICAgICAgICAgIHNv
cnRlZChjYXB0dXJlZC53ZWJraXRjb3JlcHkubG9nLmdldHZhbHVlKCkuc3BsaXRsaW5lcygpKSwK
KyAgICAgICAgICAgIHNvcnRlZChbJ3dvcmtlci97fSBzdGFydGluZycuZm9ybWF0KG51bWJlcikg
Zm9yIG51bWJlciBpbiByYW5nZSg0KV0gKyBbJ3dvcmtlci97fSBzdG9wcGluZycuZm9ybWF0KG51
bWJlcikgZm9yIG51bWJlciBpbiByYW5nZSg0KV0pLAorICAgICAgICApCisKKyAgICBkZWYgdGVz
dF9jYWxsYmFjayhzZWxmKToKKyAgICAgICAgc2VxdWVuY2UgPSBbXQorCisgICAgICAgIHdpdGgg
T3V0cHV0Q2FwdHVyZSgpOgorICAgICAgICAgICAgd2l0aCBUYXNrUG9vbCh3b3JrZXJzPTQpIGFz
IHBvb2w6CisgICAgICAgICAgICAgICAgZm9yIGNoYXJhY3RlciBpbiBzZWxmLmFscGhhYmV0Ogor
ICAgICAgICAgICAgICAgICAgICBwb29sLmRvKGFjdGlvbiwgY2hhcmFjdGVyLCBjYWxsYmFjaz1s
YW1iZGEgdmFsdWU6IHNlcXVlbmNlLmFwcGVuZCh2YWx1ZSkpCisgICAgICAgICAgICAgICAgcG9v
bC53YWl0KCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKKyAgICAgICAgICAgIHNlbGYuYWxw
aGFiZXQsCisgICAgICAgICAgICAnJy5qb2luKHNvcnRlZChzZXF1ZW5jZSkpLAorICAgICAgICAp
CisKKyAgICBkZWYgdGVzdF9leGNlcHRpb24oc2VsZik6CisgICAgICAgIHdpdGggT3V0cHV0Q2Fw
dHVyZShsZXZlbD1sb2dnaW5nLklORk8pIGFzIGNhcHR1cmVkOgorICAgICAgICAgICAgd2l0aCBz
ZWxmLmFzc2VydFJhaXNlcyhSdW50aW1lRXJyb3IpOgorICAgICAgICAgICAgICAgIHdpdGggVGFz
a1Bvb2wod29ya2Vycz0xKSBhcyBwb29sOgorICAgICAgICAgICAgICAgICAgICBwb29sLmRvKGV4
Y2VwdGlvbiwgJ1Rlc3RpbmcgZXhjZXB0aW9uJykKKyAgICAgICAgICAgICAgICAgICAgcG9vbC53
YWl0KCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKKyAgICAgICAgICAgIGNhcHR1cmVkLndl
YmtpdGNvcmVweS5sb2cuZ2V0dmFsdWUoKS5zcGxpdGxpbmVzKCksCisgICAgICAgICAgICBbJ3dv
cmtlci8wIHN0YXJ0aW5nJywgJ3dvcmtlci8wIHN0b3BwaW5nJ10sCisgICAgICAgICkKKworICAg
IGRlZiB0ZXN0X3NldHVwKHNlbGYpOgorICAgICAgICB3aXRoIE91dHB1dENhcHR1cmUoKSBhcyBj
YXB0dXJlZDoKKyAgICAgICAgICAgIHdpdGggVGFza1Bvb2wod29ya2Vycz00LCBzZXR1cD1zZXR1
cCkgYXMgcG9vbDoKKyAgICAgICAgICAgICAgICBmb3IgY2hhcmFjdGVyIGluIHNlbGYuYWxwaGFi
ZXQ6CisgICAgICAgICAgICAgICAgICAgIHBvb2wuZG8oYWN0aW9uLCBjaGFyYWN0ZXIpCisgICAg
ICAgICAgICAgICAgcG9vbC53YWl0KCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKKyAgICAg
ICAgICAgIHNvcnRlZChjYXB0dXJlZC53ZWJraXRjb3JlcHkubG9nLmdldHZhbHVlKCkuc3BsaXRs
aW5lcygpKSwKKyAgICAgICAgICAgIFsnd29ya2VyL3t9IFNldHRpbmcgdXAnLmZvcm1hdCh4KSBm
b3IgeCBpbiByYW5nZSg0KV0sCisgICAgICAgICkKKworICAgIGRlZiB0ZXN0X3RlYXJkb3duKHNl
bGYpOgorICAgICAgICB3aXRoIE91dHB1dENhcHR1cmUoKSBhcyBjYXB0dXJlZDoKKyAgICAgICAg
ICAgIHdpdGggVGFza1Bvb2wod29ya2Vycz00LCB0ZWFyZG93bj10ZWFyZG93bikgYXMgcG9vbDoK
KyAgICAgICAgICAgICAgICBmb3IgY2hhcmFjdGVyIGluIHNlbGYuYWxwaGFiZXQ6CisgICAgICAg
ICAgICAgICAgICAgIHBvb2wuZG8oYWN0aW9uLCBjaGFyYWN0ZXIpCisgICAgICAgICAgICAgICAg
cG9vbC53YWl0KCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKKyAgICAgICAgICAgIHNvcnRl
ZChjYXB0dXJlZC53ZWJraXRjb3JlcHkubG9nLmdldHZhbHVlKCkuc3BsaXRsaW5lcygpKSwKKyAg
ICAgICAgICAgIFsnd29ya2VyL3t9IFRlYXJpbmcgZG93bicuZm9ybWF0KHgpIGZvciB4IGluIHJh
bmdlKDQpXSwKKyAgICAgICAgKQorCisgICAgZGVmIHRlc3RfaW52YWxpZF9zaHV0ZG93bihzZWxm
KToKKyAgICAgICAgd2l0aCBPdXRwdXRDYXB0dXJlKCk6CisgICAgICAgICAgICB3aXRoIHNlbGYu
YXNzZXJ0UmFpc2VzKFRhc2tQb29sLkV4Y2VwdGlvbik6CisgICAgICAgICAgICAgICAgd2l0aCBU
YXNrUG9vbCh3b3JrZXJzPTEsIHRlYXJkb3duPXRlYXJkb3duLCBncmFjZV9wZXJpb2Q9MSkgYXMg
cG9vbDoKKyAgICAgICAgICAgICAgICAgICAgcG9vbC5kbyh3YWl0LCAyKQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>417875</attachid>
            <date>2021-01-19 07:53:12 -0800</date>
            <delta_ts>2021-01-20 11:27:06 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-220547-20210119075311.patch</filename>
            <type>text/plain</type>
            <size>22188</size>
            <attacher name="Jonathan Bedard">jbedard</attacher>
            
              <data encoding="base64">SW5kZXg6IFRvb2xzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9DaGFuZ2VMb2cJKHJl
dmlzaW9uIDI3MTYwMCkKKysrIFRvb2xzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwz
ICsxLDU0IEBACisyMDIxLTAxLTE5ICBKb25hdGhhbiBCZWRhcmQgIDxqYmVkYXJkQGFwcGxlLmNv
bT4KKworICAgICAgICBbd2Via2l0Y29yZXB5XSBBZGQgVGFza1Bvb2wKKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIyMDU0NworICAgICAgICA8cmRhcjov
L3Byb2JsZW0vNzMwNDM4ODc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISku
CisKKyAgICAgICAgVGhlIFRhc2tQb29sIG9iamVjdCBpcyBhIFB5dGhvbiAzLjggY29tcGF0aWJs
ZSBtdWx0aXByb2Nlc3NpbmcgdG9vbC4gTm90YWJsZSBmZWF0dXJlcyBhcmUgZm9yd2FyZGluZyBz
dGRvdXQsCisgICAgICAgIHN0ZGVyciBhbmQgbG9nZ2luZyB0byB0aGUgcGFyZW50IHByb2Nlc3Ms
IGV4Y2VwdGlvbiBwcm9wYWdhdGlvbiBiZXR3ZWVuIHByb2Nlc3NlcywgYW5kIGdyYWNlZnVsIGNs
ZWFuLXVwIHdoZW4KKyAgICAgICAgZXhjZXB0aW9ucyBpbiB0aGUgcGFyZW50IHByb2Nlc3MgYXJl
IGVuY291bnRlcmVkCisKKyAgICAgICAgKiBTY3JpcHRzL2xpYnJhcmllcy93ZWJraXRjb3JlcHkv
d2Via2l0Y29yZXB5L19faW5pdF9fLnB5OiBCdW1wIHZlcnNpb24sIGFkZCB0YmxpYi4KKyAgICAg
ICAgKiBTY3JpcHRzL2xpYnJhcmllcy93ZWJraXRjb3JlcHkvd2Via2l0Y29yZXB5L3Rhc2tfcG9v
bC5weTogQWRkZWQuCisgICAgICAgIChNZXNzYWdlKTogQmFzZSBjbGFzcyBmb3IgbWVzc2FnZSBw
YXNzZWQgYmV0d2VlbiBwcm9jZXNzZXMuCisgICAgICAgIChUYXNrKTogTWVzc2FnZSBpbmNsdWRp
bmcgZnVuY3Rpb24gYW5kIGFyZ3VtZW50cyB0byB0aGF0IGZ1bmN0aW9uLgorICAgICAgICAoUmVz
dWx0KTogUmV0dXJuIHZhbHVlIG9mIGEgdGFzayBwYXNzZWQgdG8gdGhlIHBhcmVudCBwcm9jZXNz
LgorICAgICAgICAoTG9nKTogUGFzcyBsb2cgbWVzc2FnZSBmcm9tIGNoaWxkIHByb2Nlc3MgdG8g
cGFyZW50IHByb2Nlc3MuCisgICAgICAgIChQcmludCk6IFBhc3Mgc3Rkb3V0IG9yIHN0ZGVyciBs
aW5lIGZyb20gY2hpbGQgcHJvY2VzcyB0byBwYXJlbnQgcHJvY2Vzcy4KKyAgICAgICAgKFN0YXRl
KTogTm90aWZ5IHBhcmVudCBwcm9jZXNzIHRoYXQgdGhlIGNoaWxkIHByb2Nlc3MgaGFzIGNoYW5n
ZWQgc3RhdGUuCisgICAgICAgIChDaGlsZEV4Y2VwdGlvbik6IFBhc3MgZXhjZXB0aW9uIGFuZCBz
dGFjayB0cmFjZSBmcm9tCisgICAgICAgIChNZXNzYWdlUXVldWUpOiBQYWlyIGZvciBtdWx0aXBy
b2Nlc3MgcXVldWVzIGFsbG93aW5nIGZvciBtZXNzYWdlcyB0byBiZSBwYXNzZWQgYmV0d2VlbiBw
cm9jZXNzZXMuCisgICAgICAgIChQcm9jZXNzKTogU2NvcGluZyBjbGFzcyBtYW5hZ2luZyBjaGls
ZC1wcm9jZXNzIGxvZ2ljLgorICAgICAgICAoUHJvY2Vzcy5Mb2dIYW5kbGVyKTogTG9nZ2luZyBo
YW5kbGVyIHRoYXQgcGFzc2VzIGxvZyBsaW5lcyBmcm9tIHRoZSBjaGlsZCBwcm9jZXNzIHRvIGl0
J3MgcGFyZW50LgorICAgICAgICAoUHJvY2Vzcy5TdHJlYW0pOiBXcml0YWJsZSBzdHJlYW0gd2hp
Y2ggcGFzc2VzIGNvbnRlbnQgZnJvbSB0aGUgY2hpbGQgcHJvY2VzcyB0byB0aGUgc3RhbmRhcmQg
b3V0IG9yIGVycm9yCisgICAgICAgIG9mIHRoYXQgcHJvY2VzcydzIHBhcmVudC4KKyAgICAgICAg
KFByb2Nlc3MuaGFuZGxlcik6IFNJR1RFUk0gc2hvdWxkIHByZXZlbnQgZnV0dXJlIHByb2Nlc3Np
bmcgYnV0IGFsbG93IGN1cnJlbnRseSBpbi1mbGlnaHQgdGFza3MgdG8gY29tcGxldGUuCisgICAg
ICAgIChQcm9jZXNzLm1haW4pOiBFbnRyeS1wb2ludCB0byBjaGlsZCBwcm9jZXNzLgorICAgICAg
ICAoVGFza1Bvb2wpOiBNYW5hZ2luZyBhbGxvY2F0aW9uIG9mIHRhc2tzIHRvIGNoaWxkIHByb2Nl
c3NlcyBhbmQgY2xlYW4gdXAgdGhvc2UgY2hpbGQgcHJvY2Vzc2VzLgorICAgICAgICAoVGFza1Bv
b2wuRXhjZXB0aW9uKTogRXhjZXB0aW9uIG93bmVkIGJ5IFRhc2tQb29sIG9iamVjdC4KKyAgICAg
ICAgKFRhc2tQb29sLl9faW5pdF9fKToKKyAgICAgICAgKFRhc2tQb29sLl9fZW50ZXJfXyk6Cisg
ICAgICAgIChUYXNrUG9vbC5kbyk6IFBhc3MgdGFzayB0byBjaGlsZCBwcm9jZXNzZXMuCisgICAg
ICAgIChUYXNrUG9vbC53YWl0KTogV2FpdCB1bnRpbCBhbGwgcHJvY2Vzc2VzIGFyZSBjb21wbGV0
ZWQuCisgICAgICAgIChUYXNrUG9vbC5fX2V4aXRfXyk6IFRlYXJkb3duIGFsbCBjaGlsZCBwcm9j
ZXNzZXMuCisgICAgICAgICogU2NyaXB0cy9saWJyYXJpZXMvd2Via2l0Y29yZXB5L3dlYmtpdGNv
cmVweS90ZXN0cy90YXNrX3Bvb2xfdW5pdHRlc3QucHk6IEFkZGVkLgorICAgICAgICAoc2V0dXAp
OgorICAgICAgICAodGVhcmRvd24pOgorICAgICAgICAoYWN0aW9uKToKKyAgICAgICAgKGxvZyk6
CisgICAgICAgICh3YWl0KToKKyAgICAgICAgKGV4Y2VwdGlvbik6CisgICAgICAgIChUYXNrUG9v
bFVuaXR0ZXN0KToKKyAgICAgICAgKFRhc2tQb29sVW5pdHRlc3QudGVzdF9zaW5nbGUpOgorICAg
ICAgICAoVGFza1Bvb2xVbml0dGVzdC50ZXN0X211bHRpcGxlKToKKyAgICAgICAgKFRhc2tQb29s
VW5pdHRlc3QudGVzdF9jYWxsYmFjayk6CisgICAgICAgIChUYXNrUG9vbFVuaXR0ZXN0LnRlc3Rf
ZXhjZXB0aW9uKToKKyAgICAgICAgKFRhc2tQb29sVW5pdHRlc3QudGVzdF9zZXR1cCk6CisgICAg
ICAgIChUYXNrUG9vbFVuaXR0ZXN0LnRlc3RfdGVhcmRvd24pOgorICAgICAgICAoVGFza1Bvb2xV
bml0dGVzdC50ZXN0X2ludmFsaWRfc2h1dGRvd24pOgorCiAyMDIxLTAxLTE5ICBKb25hdGhhbiBC
ZWRhcmQgIDxqYmVkYXJkQGFwcGxlLmNvbT4KIAogICAgICAgICBbR2l0SHViXSBVc2UgZ2l0aHVi
LmNvbSBhcyB0aGUgc291cmNlIG9mIHRydXRoIGZvciBFV1MKSW5kZXg6IFRvb2xzL1NjcmlwdHMv
bGlicmFyaWVzL3dlYmtpdGNvcmVweS9zZXR1cC5weQo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9TY3Jp
cHRzL2xpYnJhcmllcy93ZWJraXRjb3JlcHkvc2V0dXAucHkJKHJldmlzaW9uIDI3MTYwMCkKKysr
IFRvb2xzL1NjcmlwdHMvbGlicmFyaWVzL3dlYmtpdGNvcmVweS9zZXR1cC5weQkod29ya2luZyBj
b3B5KQpAQCAtMzAsNyArMzAsNyBAQCBkZWYgcmVhZG1lKCk6CiAKIHNldHVwKAogICAgIG5hbWU9
J3dlYmtpdGNvcmVweScsCi0gICAgdmVyc2lvbj0nMC40LjI2JywKKyAgICB2ZXJzaW9uPScwLjUu
MCcsCiAgICAgZGVzY3JpcHRpb249J0xpYnJhcnkgY29udGFpbmluZyB2YXJpb3VzIFB5dGhvbiBz
dXBwb3J0IGNsYXNzZXMgYW5kIGZ1bmN0aW9ucy4nLAogICAgIGxvbmdfZGVzY3JpcHRpb249cmVh
ZG1lKCksCiAgICAgY2xhc3NpZmllcnM9WwpJbmRleDogVG9vbHMvU2NyaXB0cy9saWJyYXJpZXMv
d2Via2l0Y29yZXB5L3dlYmtpdGNvcmVweS9fX2luaXRfXy5weQo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29s
cy9TY3JpcHRzL2xpYnJhcmllcy93ZWJraXRjb3JlcHkvd2Via2l0Y29yZXB5L19faW5pdF9fLnB5
CShyZXZpc2lvbiAyNzE2MDApCisrKyBUb29scy9TY3JpcHRzL2xpYnJhcmllcy93ZWJraXRjb3Jl
cHkvd2Via2l0Y29yZXB5L19faW5pdF9fLnB5CSh3b3JraW5nIGNvcHkpCkBAIC0xLDQgKzEsNCBA
QAotIyBDb3B5cmlnaHQgKEMpIDIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
IyBDb3B5cmlnaHQgKEMpIDIwMjAsIDIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgogIwogIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKICMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zNCw4ICszNCw5IEBAIGZyb20gd2Vi
a2l0Y29yZXB5LnN0cmluZ191dGlscyBpbXBvcnQgQnkKIGZyb20gd2Via2l0Y29yZXB5LnRpbWVv
dXQgaW1wb3J0IFRpbWVvdXQKIGZyb20gd2Via2l0Y29yZXB5LnN1YnByb2Nlc3NfdXRpbHMgaW1w
b3J0IFRpbWVvdXRFeHBpcmVkLCBDb21wbGV0ZWRQcm9jZXNzLCBydW4KIGZyb20gd2Via2l0Y29y
ZXB5Lm91dHB1dF9jYXB0dXJlIGltcG9ydCBMb2dnZXJDYXB0dXJlLCBPdXRwdXRDYXB0dXJlLCBP
dXRwdXREdXBsaWNhdGUKK2Zyb20gd2Via2l0Y29yZXB5LnRhc2tfcG9vbCBpbXBvcnQgVGFza1Bv
b2wKIAotdmVyc2lvbiA9IFZlcnNpb24oMCwgNCwgMjYpCit2ZXJzaW9uID0gVmVyc2lvbigwLCA1
LCAwKQogCiBmcm9tIHdlYmtpdGNvcmVweS5hdXRvaW5zdGFsbCBpbXBvcnQgUGFja2FnZSwgQXV0
b0luc3RhbGwKIGlmIHN5cy52ZXJzaW9uX2luZm8gPiAoMywgMCk6CkBAIC01NSw2ICs1Niw3IEBA
IEF1dG9JbnN0YWxsLnJlZ2lzdGVyKFBhY2thZ2UoJ3JlcXVlc3RzJywKIEF1dG9JbnN0YWxsLnJl
Z2lzdGVyKFBhY2thZ2UoJ3NldHVwdG9vbHMnLCBWZXJzaW9uKDQ0LCAxLCAgMSkpKQogQXV0b0lu
c3RhbGwucmVnaXN0ZXIoUGFja2FnZSgnc29ja3MnLCBWZXJzaW9uKDEsIDcsIDEpLCBweXBpX25h
bWU9J1B5U29ja3MnKSkKIEF1dG9JbnN0YWxsLnJlZ2lzdGVyKFBhY2thZ2UoJ3NpeCcsIFZlcnNp
b24oMSwgMTUsIDApKSkKK0F1dG9JbnN0YWxsLnJlZ2lzdGVyKFBhY2thZ2UoJ3RibGliJywgVmVy
c2lvbigxLCA3LCAwKSkpCiBBdXRvSW5zdGFsbC5yZWdpc3RlcihQYWNrYWdlKCd1cmxsaWIzJywg
VmVyc2lvbigxLCAyNSwgMTApKSkKIEF1dG9JbnN0YWxsLnJlZ2lzdGVyKFBhY2thZ2UoJ3doZWVs
JywgVmVyc2lvbigwLCAzNSwgMSkpKQogCkluZGV4OiBUb29scy9TY3JpcHRzL2xpYnJhcmllcy93
ZWJraXRjb3JlcHkvd2Via2l0Y29yZXB5L3Rhc2tfcG9vbC5weQo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29s
cy9TY3JpcHRzL2xpYnJhcmllcy93ZWJraXRjb3JlcHkvd2Via2l0Y29yZXB5L3Rhc2tfcG9vbC5w
eQkobm9uZXhpc3RlbnQpCisrKyBUb29scy9TY3JpcHRzL2xpYnJhcmllcy93ZWJraXRjb3JlcHkv
d2Via2l0Y29yZXB5L3Rhc2tfcG9vbC5weQkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDM1MyBA
QAorIyBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
IworIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisjIGFyZSBtZXQ6CisjIDEuICBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorIyAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisjIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisjICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisjCisjIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENP
TlRSSUJVVE9SUyBgYEFTIElTJycgQU5EIEFOWQorIyBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisjIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVS
UE9TRSBBUkUKKyMgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJ
VFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisjIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisj
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsKKyMgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OCisjIEFOWSBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCisjIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTCisjIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorCitpbXBvcnQgaW8KK2ltcG9y
dCBvcworaW1wb3J0IGxvZ2dpbmcKK2ltcG9ydCBtdWx0aXByb2Nlc3NpbmcKK2ltcG9ydCBzaWdu
YWwKK2ltcG9ydCBzeXMKKworZnJvbSBzaXggaW1wb3J0IHJlcmFpc2UKK2Zyb20gd2Via2l0Y29y
ZXB5IGltcG9ydCBPdXRwdXRDYXB0dXJlLCBUaW1lb3V0LCBsb2cKKworCitjbGFzcyBNZXNzYWdl
KG9iamVjdCk6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHdobz1Ob25lKToKKyAgICAgICAgc2Vs
Zi53aG8gPSB3aG8gb3IgUHJvY2Vzcy5uYW1lCisKKyAgICBkZWYgX19jYWxsX18oc2VsZiwgY2Fs
bGVyKToKKyAgICAgICAgTm90SW1wbGVtZW50ZWQoKQorCisKK2NsYXNzIFRhc2soTWVzc2FnZSk6
CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGZ1bmN0aW9uLCBpZCwgKmFyZ3MsICoqa3dhcmdzKToK
KyAgICAgICAgc3VwZXIoVGFzaywgc2VsZikuX19pbml0X18oKQorCisgICAgICAgIHNlbGYuZnVu
Y3Rpb24gPSBmdW5jdGlvbgorICAgICAgICBzZWxmLmlkID0gaWQKKyAgICAgICAgc2VsZi5hcmdz
ID0gdHVwbGUoYXJncykKKyAgICAgICAgc2VsZi5rd2FyZ3MgPSBrd2FyZ3MKKworICAgIGRlZiBf
X2NhbGxfXyhzZWxmLCBjYWxsZXIpOgorICAgICAgICByZXR1cm4gc2VsZi5mdW5jdGlvbigqc2Vs
Zi5hcmdzLCAqKnNlbGYua3dhcmdzKQorCisKK2NsYXNzIFJlc3VsdChNZXNzYWdlKToKKyAgICBk
ZWYgX19pbml0X18oc2VsZiwgdmFsdWUsIGlkKToKKyAgICAgICAgc3VwZXIoUmVzdWx0LCBzZWxm
KS5fX2luaXRfXygpCisgICAgICAgIHNlbGYudmFsdWUgPSB2YWx1ZQorICAgICAgICBzZWxmLmlk
ID0gaWQKKworICAgIGRlZiBfX2NhbGxfXyhzZWxmLCBjYWxsZXIpOgorICAgICAgICBpZiBjYWxs
ZXI6CisgICAgICAgICAgICBjYWxsZXIuY2FsbGJhY2tzLnBvcChzZWxmLmlkLCBsYW1iZGEgdmFs
dWU6IHZhbHVlKShzZWxmLnZhbHVlKQorICAgICAgICByZXR1cm4gc2VsZi52YWx1ZQorCisKK2Ns
YXNzIExvZyhNZXNzYWdlKToKKyAgICBkZWYgX19pbml0X18oc2VsZiwgcmVjb3JkKToKKyAgICAg
ICAgc3VwZXIoTG9nLCBzZWxmKS5fX2luaXRfXygpCisgICAgICAgIHNlbGYucmVjb3JkID0gcmVj
b3JkCisKKyAgICBkZWYgX19jYWxsX18oc2VsZiwgY2FsbGVyKToKKyAgICAgICAgbG9nZ2luZy5n
ZXRMb2dnZXIoc2VsZi5yZWNvcmQubmFtZSkubG9nKHNlbGYucmVjb3JkLmxldmVsbm8sICd7fSB7
fScuZm9ybWF0KHNlbGYud2hvLCBzZWxmLnJlY29yZC5nZXRNZXNzYWdlKCkpKQorCisKK2NsYXNz
IFByaW50KE1lc3NhZ2UpOgorICAgIHN0ZG91dCA9IDEKKyAgICBzdGRlcnIgPSAyCisKKyAgICBk
ZWYgX19pbml0X18oc2VsZiwgbGluZXMsIHN0cmVhbT1zdGRvdXQpOgorICAgICAgICBzdXBlcihQ
cmludCwgc2VsZikuX19pbml0X18oKQorICAgICAgICBzZWxmLmxpbmVzID0gbGluZXMKKyAgICAg
ICAgc2VsZi5zdHJlYW0gPSBzdHJlYW0KKworICAgIGRlZiBfX2NhbGxfXyhzZWxmLCBjYWxsZXIp
OgorICAgICAgICBzdHJlYW0gPSB7CisgICAgICAgICAgICBzZWxmLnN0ZG91dDogc3lzLnN0ZG91
dCwKKyAgICAgICAgICAgIHNlbGYuc3RkZXJyOiBzeXMuc3RkZXJyLAorICAgICAgICB9LmdldChz
ZWxmLnN0cmVhbSwgc3lzLnN0ZGVycikKKyAgICAgICAgZm9yIGxpbmUgaW4gc2VsZi5saW5lczoK
KyAgICAgICAgICAgIHN0cmVhbS53cml0ZSgne31cbicuZm9ybWF0KGxpbmUpKQorCisKK2NsYXNz
IFN0YXRlKE1lc3NhZ2UpOgorICAgIFNUQVJUSU5HLCBTVE9QUElORyA9IDEsIDAKKyAgICBTVEFU
RVMgPSBbU1RBUlRJTkcsIFNUT1BQSU5HXQorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHN0YXRl
KToKKyAgICAgICAgc3VwZXIoU3RhdGUsIHNlbGYpLl9faW5pdF9fKCkKKyAgICAgICAgc2VsZi5z
dGF0ZSA9IHN0YXRlCisKKyAgICBkZWYgX19jYWxsX18oc2VsZiwgY2FsbGVyKToKKyAgICAgICAg
bG9nLmluZm8oJ3t9IHt9Jy5mb3JtYXQoCisgICAgICAgICAgICBzZWxmLndobywgeworICAgICAg
ICAgICAgICAgIFN0YXRlLlNUQVJUSU5HOiAnc3RhcnRpbmcnLAorICAgICAgICAgICAgICAgIFN0
YXRlLlNUT1BQSU5HOiAnc3RvcHBpbmcnLAorICAgICAgICAgICAgfS5nZXQoc2VsZi5zdGF0ZSwg
c2VsZi5zdGF0ZSksCisgICAgICAgICkpCisgICAgICAgIGlmIGNhbGxlcjoKKyAgICAgICAgICAg
IGNhbGxlci5fc3RhcnRlZCArPSB7CisgICAgICAgICAgICAgICAgU3RhdGUuU1RBUlRJTkc6IDEs
CisgICAgICAgICAgICAgICAgU3RhdGUuU1RPUFBJTkc6IC0xLAorICAgICAgICAgICAgfS5nZXQo
c2VsZi5zdGF0ZSwgMCkKKyAgICAgICAgcmV0dXJuIHNlbGYuc3RhdGUKKworCitjbGFzcyBDaGls
ZEV4Y2VwdGlvbihNZXNzYWdlKToKKyAgICBkZWYgX19pbml0X18oc2VsZiwgZXhjX2luZm89Tm9u
ZSk6CisgICAgICAgIHN1cGVyKENoaWxkRXhjZXB0aW9uLCBzZWxmKS5fX2luaXRfXygpCisgICAg
ICAgIHNlbGYuZXhjX2luZm8gPSBleGNfaW5mbyBvciBzeXMuZXhjX2luZm8oKQorCisgICAgZGVm
IF9fY2FsbF9fKHNlbGYsIGNhbGxlcik6CisgICAgICAgIF8sIGV4Y2VwdGlvbiwgdHJhY2UgPSBz
eXMuZXhjX2luZm8oKQorICAgICAgICBpZiBleGNlcHRpb246CisgICAgICAgICAgICBsb2cuY3Jp
dGljYWwoIkV4Y2VwdGlvbiBpbiBmbGlnaHQsICd7fScgaWdub3JlZCIuZm9ybWF0KHNlbGYuZXhj
X2luZm9bMV0pKQorICAgICAgICAgICAgcmV0dXJuCisKKyAgICAgICAgcmVyYWlzZSgqc2VsZi5l
eGNfaW5mbykKKworCitjbGFzcyBNZXNzYWdlUXVldWUob2JqZWN0KToKKyAgICBkZWYgX19pbml0
X18oc2VsZiwgb3V0Z29pbmc9Tm9uZSwgaW5jb21pbmc9Tm9uZSk6CisgICAgICAgIHNlbGYub3V0
Z29pbmcgPSBvdXRnb2luZyBvciBtdWx0aXByb2Nlc3NpbmcuUXVldWUoKQorICAgICAgICBzZWxm
LmluY29taW5nID0gaW5jb21pbmcgb3IgbXVsdGlwcm9jZXNzaW5nLlF1ZXVlKCkKKworICAgIGRl
ZiBzZW5kKHNlbGYsIG9iamVjdCk6CisgICAgICAgIHJldHVybiBzZWxmLm91dGdvaW5nLnB1dChv
YmplY3QpCisKKyAgICBkZWYgcmVjZWl2ZShzZWxmLCBibG9ja2luZz1UcnVlKToKKyAgICAgICAg
d2l0aCBUaW1lb3V0LkRpc2FibGVBbGFybSgpOgorICAgICAgICAgICAgaWYgbm90IGJsb2NraW5n
OgorICAgICAgICAgICAgICAgIHJldHVybiBzZWxmLmluY29taW5nLmdldChibG9jaz1GYWxzZSkK
KworICAgICAgICAgICAgZGlmZmVyZW5jZSA9IFRpbWVvdXQuZGlmZmVyZW5jZSgpCisgICAgICAg
ICAgICBpZiBkaWZmZXJlbmNlIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgICAgIHJldHVybiBz
ZWxmLmluY29taW5nLmdldCh0aW1lb3V0PWRpZmZlcmVuY2UpCisgICAgICAgICAgICByZXR1cm4g
c2VsZi5pbmNvbWluZy5nZXQoKQorCisKK2NsYXNzIFByb2Nlc3Mob2JqZWN0KToKKyAgICBuYW1l
ID0gTm9uZQorICAgIHF1ZXVlID0gTm9uZQorICAgIHdvcmtpbmcgPSBGYWxzZQorCisgICAgY2xh
c3MgTG9nSGFuZGxlcihsb2dnaW5nLkhhbmRsZXIpOgorICAgICAgICBkZWYgZW1pdChzZWxmLCBy
ZWNvcmQpOgorICAgICAgICAgICAgUHJvY2Vzcy5xdWV1ZS5zZW5kKExvZyhyZWNvcmQpKQorCisg
ICAgY2xhc3MgU3RyZWFtKGlvLklPQmFzZSk6CisgICAgICAgIGRlZiBfX2luaXRfXyhzZWxmLCBo
YW5kbGUpOgorICAgICAgICAgICAgaWYgbm90IGhhbmRsZToKKyAgICAgICAgICAgICAgICByYWlz
ZSBWYWx1ZUVycm9yKCdObyB0YXJnZXQgc3RyZWFtcyBwcm92aWRlZCcpCisgICAgICAgICAgICBz
ZWxmLmhhbmRsZSA9IGhhbmRsZQorICAgICAgICAgICAgc2VsZi5jYWNoZSA9IE5vbmUKKworICAg
ICAgICBkZWYgZmx1c2goc2VsZik6CisgICAgICAgICAgICBpZiBzZWxmLmNhY2hlIGlzIG5vdCBO
b25lOgorICAgICAgICAgICAgICAgIFByb2Nlc3MucXVldWUuc2VuZChQcmludChsaW5lcz1bc2Vs
Zi5jYWNoZV0sIHN0cmVhbT1zZWxmLmhhbmRsZSkpCisgICAgICAgICAgICAgICAgc2VsZi5jYWNo
ZSA9IE5vbmUKKworICAgICAgICBkZWYgd3JpdGVsaW5lcyhzZWxmLCBsaW5lcyk6CisgICAgICAg
ICAgICBmb3IgbGluZSBpbiBsaW5lczoKKyAgICAgICAgICAgICAgICBzZWxmLndyaXRlKGxpbmUp
CisKKyAgICAgICAgZGVmIHdyaXRlKHNlbGYsIGIpOgorICAgICAgICAgICAgdG9fYmVfcHJpbnRl
ZCA9IFtdCisgICAgICAgICAgICBmb3IgYyBpbiBiOgorICAgICAgICAgICAgICAgIGlmIGMgPT0g
J1xuJzoKKyAgICAgICAgICAgICAgICAgICAgdG9fYmVfcHJpbnRlZC5hcHBlbmQoc2VsZi5jYWNo
ZSBvciAnJykKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5jYWNoZSA9IE5vbmUKKyAgICAgICAg
ICAgICAgICBlbGlmIGMgbm90IGluIFsnXHInLCAnXDAnXToKKyAgICAgICAgICAgICAgICAgICAg
c2VsZi5jYWNoZSA9IGMgaWYgc2VsZi5jYWNoZSBpcyBOb25lIGVsc2UgKHNlbGYuY2FjaGUgKyBj
KQorICAgICAgICAgICAgaWYgdG9fYmVfcHJpbnRlZDoKKyAgICAgICAgICAgICAgICBQcm9jZXNz
LnF1ZXVlLnNlbmQoUHJpbnQobGluZXM9dG9fYmVfcHJpbnRlZCwgc3RyZWFtPXNlbGYuaGFuZGxl
KSkKKyAgICAgICAgICAgIHJldHVybiBsZW4oYikKKworICAgICAgICBAcHJvcGVydHkKKyAgICAg
ICAgZGVmIGNsb3NlZChzZWxmKToKKyAgICAgICAgICAgIHJldHVybiBGYWxzZQorCisgICAgICAg
IGRlZiBjbG9zZShzZWxmKToKKyAgICAgICAgICAgIHNlbGYuZmx1c2goKQorCisgICAgICAgIGRl
ZiBmaWxlbm8oc2VsZik6CisgICAgICAgICAgICByZXR1cm4gc2VsZi5oYW5kbGUKKworICAgICAg
ICBkZWYgaXNhdHR5KHNlbGYpOgorICAgICAgICAgICAgcmV0dXJuIEZhbHNlCisKKyAgICAgICAg
ZGVmIHJlYWRhYmxlKHNlbGYpOgorICAgICAgICAgICAgcmV0dXJuIEZhbHNlCisKKyAgICAgICAg
ZGVmIHJlYWRsaW5lKHNlbGYsIHNpemU9LTEpOgorICAgICAgICAgICAgcmFpc2UgTm90SW1wbGVt
ZW50ZWRFcnJvcigpCisKKyAgICAgICAgZGVmIHJlYWRsaW5lcyhzZWxmLCBoaW50PS0xKToKKyAg
ICAgICAgICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IoKQorCisgICAgICAgIGRlZiBzZWVr
KHNlbGYsIG9mZnNldCwgd2hlbmNlPWlvLlNFRUtfU0VUKToKKyAgICAgICAgICAgIHJhaXNlIE5v
dEltcGxlbWVudGVkRXJyb3IoKQorCisgICAgICAgIGRlZiBzZWVrYWJsZShzZWxmKToKKyAgICAg
ICAgICAgIHJldHVybiBGYWxzZQorCisgICAgICAgIGRlZiB0ZWxsKHNlbGYpOgorICAgICAgICAg
ICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcigpCisKKyAgICAgICAgZGVmIHRydW5jYXRlKHNl
bGYsIHNpemU9Tm9uZSk6CisgICAgICAgICAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yKCkK
KworICAgICAgICBkZWYgd3JpdGFibGUoc2VsZik6CisgICAgICAgICAgICByZXR1cm4gVHJ1ZQor
CisgICAgQGNsYXNzbWV0aG9kCisgICAgZGVmIGhhbmRsZXIoY2xzLCB2YWx1ZSwgXyk6CisgICAg
ICAgIGlmIHZhbHVlID09IHNpZ25hbC5TSUdURVJNOgorICAgICAgICAgICAgY2xzLndvcmtpbmcg
PSBGYWxzZQorCisgICAgQGNsYXNzbWV0aG9kCisgICAgZGVmIG1haW4oY2xzLCBuYW1lLCBzZXR1
cCwgbWVzc2FnZV9xdWV1ZSwgdGVhcmRvd24pOgorICAgICAgICBmcm9tIHRibGliIGltcG9ydCBw
aWNrbGluZ19zdXBwb3J0CisKKyAgICAgICAgY2xzLm5hbWUgPSBuYW1lCisgICAgICAgIGNscy5x
dWV1ZSA9IG1lc3NhZ2VfcXVldWUKKyAgICAgICAgY2xzLndvcmtpbmcgPSBUcnVlCisKKyAgICAg
ICAgc2lnbmFsLnNpZ25hbChzaWduYWwuU0lHVEVSTSwgY2xzLmhhbmRsZXIpCisKKyAgICAgICAg
bG9nZ2VyID0gbG9nZ2luZy5nZXRMb2dnZXIoKQorICAgICAgICBmb3IgaGFuZGxlciBpbiBsb2dn
ZXIuaGFuZGxlcnM6CisgICAgICAgICAgICBsb2dnZXIucmVtb3ZlSGFuZGxlcihoYW5kbGVyKQor
ICAgICAgICBsb2dnZXIuYWRkSGFuZGxlcihjbHMuTG9nSGFuZGxlcigpKQorCisgICAgICAgIGNs
cy5xdWV1ZS5zZW5kKFN0YXRlKFN0YXRlLlNUQVJUSU5HKSkKKworICAgICAgICB3aXRoIE91dHB1
dENhcHR1cmUuUmVwbGFjZVN5c1N0cmVhbSgnc3RkZXJyJywgY2xzLlN0cmVhbShQcmludC5zdGRl
cnIpKSwgT3V0cHV0Q2FwdHVyZS5SZXBsYWNlU3lzU3RyZWFtKCdzdGRvdXQnLCBjbHMuU3RyZWFt
KFByaW50LnN0ZG91dCkpOgorICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgIHBpY2ts
aW5nX3N1cHBvcnQuaW5zdGFsbCgpCisgICAgICAgICAgICAgICAgaWYgc2V0dXA6CisgICAgICAg
ICAgICAgICAgICAgIHNldHVwKCkKKworICAgICAgICAgICAgICAgIHdoaWxlIGNscy53b3JraW5n
OgorICAgICAgICAgICAgICAgICAgICB0YXNrID0gY2xzLnF1ZXVlLnJlY2VpdmUoKQorICAgICAg
ICAgICAgICAgICAgICBpZiBub3QgdGFzazoKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFr
CisgICAgICAgICAgICAgICAgICAgIGNscy5xdWV1ZS5zZW5kKFJlc3VsdCh2YWx1ZT10YXNrKE5v
bmUpLCBpZD10YXNrLmlkKSkKKworICAgICAgICAgICAgZXhjZXB0IEJhc2VFeGNlcHRpb246Cisg
ICAgICAgICAgICAgICAgdHlwLCBleGNlcHRpb24sIHRyYWNlYmFjayA9IHN5cy5leGNfaW5mbygp
CisgICAgICAgICAgICAgICAgY2xzLnF1ZXVlLnNlbmQoQ2hpbGRFeGNlcHRpb24oZXhjX2luZm89
KAorICAgICAgICAgICAgICAgICAgICB0eXAsIHR5cCgne30gKGZyb20ge30pJy5mb3JtYXQoc3Ry
KGV4Y2VwdGlvbiksIG5hbWUpKSwgdHJhY2ViYWNrLAorICAgICAgICAgICAgICAgICkpKQorCisg
ICAgICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgICAgIGlmIHRlYXJkb3duOgorICAgICAg
ICAgICAgICAgICAgICB0ZWFyZG93bigpCisgICAgICAgICAgICAgICAgc3lzLnN0ZG91dC5mbHVz
aCgpCisgICAgICAgICAgICAgICAgc3lzLnN0ZGVyci5mbHVzaCgpCisgICAgICAgICAgICAgICAg
Y2xzLnF1ZXVlLnNlbmQoU3RhdGUoU3RhdGUuU1RPUFBJTkcpKQorCisKK2NsYXNzIFRhc2tQb29s
KG9iamVjdCk6CisKKyAgICBjbGFzcyBFeGNlcHRpb24oUnVudGltZUVycm9yKToKKyAgICAgICAg
cGFzcworCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHdvcmtlcnM9MSwgbmFtZT1Ob25lLCBzZXR1
cD1Ob25lLCB0ZWFyZG93bj1Ob25lLCBncmFjZV9wZXJpb2Q9NSk6CisgICAgICAgICMgRW5zdXJl
IHRibGliIGlzIGluc3RhbGxlZCBiZWZvcmUgY3JlYXRpbmcgY2hpbGQgcHJvY2Vzc2VzCisgICAg
ICAgIGltcG9ydCB0YmxpYgorCisgICAgICAgIG5hbWUgPSBuYW1lIG9yICd3b3JrZXInCisgICAg
ICAgIGlmIG5hbWUgPT0gUHJvY2Vzcy5uYW1lOgorICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJv
cigiUGFyZW50IHByb2Nlc3MgaXMgYWxyZWFkeSBuYW1lZCB7fSIuZm9ybWF0KG5hbWUpKQorCisg
ICAgICAgIGlmIHdvcmtlcnMgPCAxOgorICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcignVGFz
a1Bvb2wgcmVxdWlyZXMgcG9zaXRpdmUgbnVtYmVyIG9mIHdvcmtlcnMnKQorCisgICAgICAgIHNl
bGYubWVzc2FnZV9xdWV1ZSA9IE1lc3NhZ2VRdWV1ZSgpCisKKyAgICAgICAgc2VsZi53b3JrZXJz
ID0gW211bHRpcHJvY2Vzc2luZy5Qcm9jZXNzKAorICAgICAgICAgICAgdGFyZ2V0PVByb2Nlc3Mu
bWFpbiwKKyAgICAgICAgICAgIGFyZ3M9KCd7fS97fScuZm9ybWF0KG5hbWUsIGNvdW50KSwgc2V0
dXAsIE1lc3NhZ2VRdWV1ZSgKKyAgICAgICAgICAgICAgICBvdXRnb2luZz1zZWxmLm1lc3NhZ2Vf
cXVldWUuaW5jb21pbmcsCisgICAgICAgICAgICAgICAgaW5jb21pbmc9c2VsZi5tZXNzYWdlX3F1
ZXVlLm91dGdvaW5nLAorICAgICAgICAgICAgKSwgdGVhcmRvd24pLAorICAgICAgICApIGZvciBj
b3VudCBpbiByYW5nZSh3b3JrZXJzKV0KKyAgICAgICAgc2VsZi5fc3RhcnRlZCA9IDAKKworICAg
ICAgICBzZWxmLmNhbGxiYWNrcyA9IHt9CisgICAgICAgIHNlbGYuX2lkX2NvdW50ID0gMAorICAg
ICAgICBzZWxmLmdyYWNlX3BlcmlvZCA9IGdyYWNlX3BlcmlvZAorCisgICAgZGVmIF9fZW50ZXJf
XyhzZWxmKToKKyAgICAgICAgd2l0aCBUaW1lb3V0KHNlY29uZHM9MTAsIHBhdGNoPUZhbHNlLCBo
YW5kbGVyPXNlbGYuRXhjZXB0aW9uKCdGYWlsZWQgdG8gc3RhcnQgYWxsIHdvcmtlcnMnKSk6Cisg
ICAgICAgICAgICBmb3Igd29ya2VyIGluIHNlbGYud29ya2VyczoKKyAgICAgICAgICAgICAgICB3
b3JrZXIuc3RhcnQoKQorICAgICAgICAgICAgd2hpbGUgc2VsZi5fc3RhcnRlZCA8IGxlbihzZWxm
LndvcmtlcnMpOgorICAgICAgICAgICAgICAgIHNlbGYubWVzc2FnZV9xdWV1ZS5yZWNlaXZlKCko
c2VsZikKKyAgICAgICAgcmV0dXJuIHNlbGYKKworICAgIGRlZiBkbyhzZWxmLCBmdW5jdGlvbiwg
KmFyZ3MsICoqa3dhcmdzKToKKyAgICAgICAgY2FsbGJhY2sgPSBrd2FyZ3MucG9wKCdjYWxsYmFj
aycsIE5vbmUpCisgICAgICAgIGlmIGNhbGxiYWNrOgorICAgICAgICAgICAgc2VsZi5jYWxsYmFj
a3Nbc2VsZi5faWRfY291bnRdID0gY2FsbGJhY2sKKyAgICAgICAgc2VsZi5tZXNzYWdlX3F1ZXVl
LnNlbmQoVGFzayhmdW5jdGlvbiwgc2VsZi5faWRfY291bnQsICphcmdzLCAqKmt3YXJncykpCisg
ICAgICAgIHNlbGYuX2lkX2NvdW50ICs9IDEKKworICAgIGRlZiB3YWl0KHNlbGYpOgorICAgICAg
ICBmb3IgXyBpbiBzZWxmLndvcmtlcnM6CisgICAgICAgICAgICBzZWxmLm1lc3NhZ2VfcXVldWUu
c2VuZChOb25lKQorCisgICAgICAgIHdoaWxlIHNlbGYuX3N0YXJ0ZWQ6CisgICAgICAgICAgICBz
ZWxmLm1lc3NhZ2VfcXVldWUucmVjZWl2ZSgpKHNlbGYpCisKKyAgICBkZWYgX19leGl0X18oc2Vs
ZiwgKmFyZ3MsICoqa3dhcmdzKToKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgaW5mbGlnaHQg
PSBzeXMuZXhjX2luZm8oKQorCisgICAgICAgICAgICBmb3Igd29ya2VyIGluIHNlbGYud29ya2Vy
czoKKyAgICAgICAgICAgICAgICBpZiB3b3JrZXIuaXNfYWxpdmUoKToKKyAgICAgICAgICAgICAg
ICAgICAgd29ya2VyLnRlcm1pbmF0ZSgpCisKKyAgICAgICAgICAgIHdpdGggVGltZW91dChzZWNv
bmRzPXNlbGYuZ3JhY2VfcGVyaW9kKToKKyAgICAgICAgICAgICAgICB0cnk6CisgICAgICAgICAg
ICAgICAgICAgIHdoaWxlIHNlbGYuX3N0YXJ0ZWQ6CisgICAgICAgICAgICAgICAgICAgICAgICBz
ZWxmLm1lc3NhZ2VfcXVldWUucmVjZWl2ZSgpKHNlbGYpCisgICAgICAgICAgICAgICAgZXhjZXB0
IEV4Y2VwdGlvbjoKKyAgICAgICAgICAgICAgICAgICAgaWYgaW5mbGlnaHRbMV06CisgICAgICAg
ICAgICAgICAgICAgICAgICBsb2cuY3JpdGljYWwoJ1NvbWUgd29ya2VycyBmYWlsZWQgdG8gZ3Jh
Y2VmdWxseSBzaHV0IGRvd24sIGJ1dCBpbi1mbGlnaHQgZXhjZXB0aW9uIHRha2luZyBwcmVjZWRl
bmNlJykKKyAgICAgICAgICAgICAgICAgICAgICAgIHJlcmFpc2UoKmluZmxpZ2h0KQorICAgICAg
ICAgICAgICAgICAgICByYWlzZSBzZWxmLkV4Y2VwdGlvbignU29tZSB3b3JrZXJzIGZhaWxlZCB0
byBncmFjZWZ1bGx5IHNodXQgZG93bicpCisKKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAg
IGZvciB3b3JrZXIgaW4gc2VsZi53b3JrZXJzOgorICAgICAgICAgICAgICAgIGlmIG5vdCB3b3Jr
ZXIuaXNfYWxpdmUoKToKKyAgICAgICAgICAgICAgICAgICAgY29udGludWUKKworICAgICAgICAg
ICAgICAgIGlmIHN5cy52ZXJzaW9uX2luZm8gPj0gKDMsIDcpOgorICAgICAgICAgICAgICAgICAg
ICB3b3JrZXIua2lsbCgpCisgICAgICAgICAgICAgICAgZWxpZiBoYXNhdHRyKHNpZ25hbCwgJ1NJ
R0tJTEwnKToKKyAgICAgICAgICAgICAgICAgICAgb3Mua2lsbCh3b3JrZXIucGlkLCBzaWduYWwu
U0lHS0lMTCkKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICB3b3Jr
ZXIudGVybWluYXRlKCkKSW5kZXg6IFRvb2xzL1NjcmlwdHMvbGlicmFyaWVzL3dlYmtpdGNvcmVw
eS93ZWJraXRjb3JlcHkvdGVzdHMvdGFza19wb29sX3VuaXR0ZXN0LnB5Cj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFRvb2xzL1NjcmlwdHMvbGlicmFyaWVzL3dlYmtpdGNvcmVweS93ZWJraXRjb3JlcHkvdGVzdHMv
dGFza19wb29sX3VuaXR0ZXN0LnB5CShub25leGlzdGVudCkKKysrIFRvb2xzL1NjcmlwdHMvbGli
cmFyaWVzL3dlYmtpdGNvcmVweS93ZWJraXRjb3JlcHkvdGVzdHMvdGFza19wb29sX3VuaXR0ZXN0
LnB5CSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTM2IEBACisjIENvcHlyaWdodCAoQykgMjAy
MSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjCisjIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorIyBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyMgYXJlIG1ldDoKKyMgMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyMgMi4gIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisjICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyMgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyMKKyMgVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBB
TkQgQU5ZCisjIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyMgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorIyBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkKKyMgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwor
IyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04KKyMgQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyMgKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
IE9GIFRISVMKKyMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCisKK2ltcG9ydCBsb2dnaW5nCitpbXBvcnQgdGltZQoraW1wb3J0IHVu
aXR0ZXN0CisKK2Zyb20gd2Via2l0Y29yZXB5IGltcG9ydCBPdXRwdXRDYXB0dXJlLCBUYXNrUG9v
bCwgbG9nIGFzIGxvZ2dlcgorCisKK2RlZiBzZXR1cCgpOgorICAgIGxvZ2dlci53YXJuaW5nKCdT
ZXR0aW5nIHVwJykKKworCitkZWYgdGVhcmRvd24oKToKKyAgICBsb2dnZXIud2FybmluZygnVGVh
cmluZyBkb3duJykKKworCitkZWYgYWN0aW9uKGFyZ3VtZW50KToKKyAgICBwcmludCgnYWN0aW9u
KHt9KScuZm9ybWF0KGFyZ3VtZW50KSkKKyAgICByZXR1cm4gYXJndW1lbnQKKworCitkZWYgbG9n
KGxldmVsLCB2YWx1ZSk6CisgICAgbG9nZ2VyLmxvZyhsZXZlbCwgdmFsdWUpCisgICAgcmV0dXJu
IHZhbHVlCisKKworZGVmIHdhaXQoc2Vjb25kcyk6CisgICAgbG9nZ2VyLmluZm8oJ3dhaXRpbmcg
e30gc2Vjb25kcy4uLicuZm9ybWF0KHNlY29uZHMpKQorICAgIHRpbWUuc2xlZXAoc2Vjb25kcykK
KyAgICBsb2dnZXIuaW5mbygnd2FpdGVkIHt9IHNlY29uZHMhJy5mb3JtYXQoc2Vjb25kcykpCisg
ICAgcmV0dXJuIHNlY29uZHMKKworCitkZWYgZXhjZXB0aW9uKHZhbHVlKToKKyAgICByYWlzZSBS
dW50aW1lRXJyb3IodmFsdWUpCisKKworY2xhc3MgVGFza1Bvb2xVbml0dGVzdCh1bml0dGVzdC5U
ZXN0Q2FzZSk6CisgICAgYWxwaGFiZXQgPSAnYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXonCisK
KyAgICBkZWYgdGVzdF9zaW5nbGUoc2VsZik6CisgICAgICAgIHdpdGggT3V0cHV0Q2FwdHVyZShs
ZXZlbD1sb2dnaW5nLldBUk5JTkcpIGFzIGNhcHR1cmVkOgorICAgICAgICAgICAgd2l0aCBUYXNr
UG9vbCh3b3JrZXJzPTEpIGFzIHBvb2w6CisgICAgICAgICAgICAgICAgcG9vbC5kbyhhY3Rpb24s
ICdhJykKKyAgICAgICAgICAgICAgICBwb29sLmRvKGxvZywgbG9nZ2luZy5XQVJOSU5HLCAnMScp
CisgICAgICAgICAgICAgICAgcG9vbC53YWl0KCkKKworICAgICAgICBzZWxmLmFzc2VydEVxdWFs
KGNhcHR1cmVkLnN0ZG91dC5nZXR2YWx1ZSgpLCAnYWN0aW9uKGEpXG4nKQorICAgICAgICBzZWxm
LmFzc2VydEVxdWFsKGNhcHR1cmVkLndlYmtpdGNvcmVweS5sb2cuZ2V0dmFsdWUoKSwgJ3dvcmtl
ci8wIDFcbicpCisKKyAgICBkZWYgdGVzdF9tdWx0aXBsZShzZWxmKToKKyAgICAgICAgd2l0aCBP
dXRwdXRDYXB0dXJlKGxldmVsPWxvZ2dpbmcuSU5GTykgYXMgY2FwdHVyZWQ6CisgICAgICAgICAg
ICB3aXRoIFRhc2tQb29sKHdvcmtlcnM9NCkgYXMgcG9vbDoKKyAgICAgICAgICAgICAgICBmb3Ig
Y2hhcmFjdGVyIGluIHNlbGYuYWxwaGFiZXQ6CisgICAgICAgICAgICAgICAgICAgIHBvb2wuZG8o
YWN0aW9uLCBjaGFyYWN0ZXIpCisgICAgICAgICAgICAgICAgcG9vbC53YWl0KCkKKworICAgICAg
ICBsaW5lcyA9IGNhcHR1cmVkLnN0ZG91dC5nZXR2YWx1ZSgpLnNwbGl0bGluZXMoKQorICAgICAg
ICBzZWxmLmFzc2VydEVxdWFscyhzb3J0ZWQobGluZXMpLCBbJ2FjdGlvbih7fSknLmZvcm1hdChj
aGFyYWN0ZXIpIGZvciBjaGFyYWN0ZXIgaW4gc2VsZi5hbHBoYWJldF0pCisgICAgICAgIHNlbGYu
YXNzZXJ0RXF1YWwoCisgICAgICAgICAgICBzb3J0ZWQoY2FwdHVyZWQud2Via2l0Y29yZXB5Lmxv
Zy5nZXR2YWx1ZSgpLnNwbGl0bGluZXMoKSksCisgICAgICAgICAgICBzb3J0ZWQoWyd3b3JrZXIv
e30gc3RhcnRpbmcnLmZvcm1hdChudW1iZXIpIGZvciBudW1iZXIgaW4gcmFuZ2UoNCldICsgWyd3
b3JrZXIve30gc3RvcHBpbmcnLmZvcm1hdChudW1iZXIpIGZvciBudW1iZXIgaW4gcmFuZ2UoNCld
KSwKKyAgICAgICAgKQorCisgICAgZGVmIHRlc3RfY2FsbGJhY2soc2VsZik6CisgICAgICAgIHNl
cXVlbmNlID0gW10KKworICAgICAgICB3aXRoIE91dHB1dENhcHR1cmUoKToKKyAgICAgICAgICAg
IHdpdGggVGFza1Bvb2wod29ya2Vycz00KSBhcyBwb29sOgorICAgICAgICAgICAgICAgIGZvciBj
aGFyYWN0ZXIgaW4gc2VsZi5hbHBoYWJldDoKKyAgICAgICAgICAgICAgICAgICAgcG9vbC5kbyhh
Y3Rpb24sIGNoYXJhY3RlciwgY2FsbGJhY2s9bGFtYmRhIHZhbHVlOiBzZXF1ZW5jZS5hcHBlbmQo
dmFsdWUpKQorICAgICAgICAgICAgICAgIHBvb2wud2FpdCgpCisgICAgICAgIHNlbGYuYXNzZXJ0
RXF1YWwoCisgICAgICAgICAgICBzZWxmLmFscGhhYmV0LAorICAgICAgICAgICAgJycuam9pbihz
b3J0ZWQoc2VxdWVuY2UpKSwKKyAgICAgICAgKQorCisgICAgZGVmIHRlc3RfZXhjZXB0aW9uKHNl
bGYpOgorICAgICAgICB3aXRoIE91dHB1dENhcHR1cmUobGV2ZWw9bG9nZ2luZy5JTkZPKSBhcyBj
YXB0dXJlZDoKKyAgICAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoUnVudGltZUVycm9y
KToKKyAgICAgICAgICAgICAgICB3aXRoIFRhc2tQb29sKHdvcmtlcnM9MSkgYXMgcG9vbDoKKyAg
ICAgICAgICAgICAgICAgICAgcG9vbC5kbyhleGNlcHRpb24sICdUZXN0aW5nIGV4Y2VwdGlvbicp
CisgICAgICAgICAgICAgICAgICAgIHBvb2wud2FpdCgpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1
YWwoCisgICAgICAgICAgICBjYXB0dXJlZC53ZWJraXRjb3JlcHkubG9nLmdldHZhbHVlKCkuc3Bs
aXRsaW5lcygpLAorICAgICAgICAgICAgWyd3b3JrZXIvMCBzdGFydGluZycsICd3b3JrZXIvMCBz
dG9wcGluZyddLAorICAgICAgICApCisKKyAgICBkZWYgdGVzdF9zZXR1cChzZWxmKToKKyAgICAg
ICAgd2l0aCBPdXRwdXRDYXB0dXJlKCkgYXMgY2FwdHVyZWQ6CisgICAgICAgICAgICB3aXRoIFRh
c2tQb29sKHdvcmtlcnM9NCwgc2V0dXA9c2V0dXApIGFzIHBvb2w6CisgICAgICAgICAgICAgICAg
Zm9yIGNoYXJhY3RlciBpbiBzZWxmLmFscGhhYmV0OgorICAgICAgICAgICAgICAgICAgICBwb29s
LmRvKGFjdGlvbiwgY2hhcmFjdGVyKQorICAgICAgICAgICAgICAgIHBvb2wud2FpdCgpCisgICAg
ICAgIHNlbGYuYXNzZXJ0RXF1YWwoCisgICAgICAgICAgICBzb3J0ZWQoY2FwdHVyZWQud2Via2l0
Y29yZXB5LmxvZy5nZXR2YWx1ZSgpLnNwbGl0bGluZXMoKSksCisgICAgICAgICAgICBbJ3dvcmtl
ci97fSBTZXR0aW5nIHVwJy5mb3JtYXQoeCkgZm9yIHggaW4gcmFuZ2UoNCldLAorICAgICAgICAp
CisKKyAgICBkZWYgdGVzdF90ZWFyZG93bihzZWxmKToKKyAgICAgICAgd2l0aCBPdXRwdXRDYXB0
dXJlKCkgYXMgY2FwdHVyZWQ6CisgICAgICAgICAgICB3aXRoIFRhc2tQb29sKHdvcmtlcnM9NCwg
dGVhcmRvd249dGVhcmRvd24pIGFzIHBvb2w6CisgICAgICAgICAgICAgICAgZm9yIGNoYXJhY3Rl
ciBpbiBzZWxmLmFscGhhYmV0OgorICAgICAgICAgICAgICAgICAgICBwb29sLmRvKGFjdGlvbiwg
Y2hhcmFjdGVyKQorICAgICAgICAgICAgICAgIHBvb2wud2FpdCgpCisgICAgICAgIHNlbGYuYXNz
ZXJ0RXF1YWwoCisgICAgICAgICAgICBzb3J0ZWQoY2FwdHVyZWQud2Via2l0Y29yZXB5LmxvZy5n
ZXR2YWx1ZSgpLnNwbGl0bGluZXMoKSksCisgICAgICAgICAgICBbJ3dvcmtlci97fSBUZWFyaW5n
IGRvd24nLmZvcm1hdCh4KSBmb3IgeCBpbiByYW5nZSg0KV0sCisgICAgICAgICkKKworICAgIGRl
ZiB0ZXN0X2ludmFsaWRfc2h1dGRvd24oc2VsZik6CisgICAgICAgIHdpdGggT3V0cHV0Q2FwdHVy
ZSgpOgorICAgICAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhUYXNrUG9vbC5FeGNlcHRp
b24pOgorICAgICAgICAgICAgICAgIHdpdGggVGFza1Bvb2wod29ya2Vycz0xLCB0ZWFyZG93bj10
ZWFyZG93biwgZ3JhY2VfcGVyaW9kPTEpIGFzIHBvb2w6CisgICAgICAgICAgICAgICAgICAgIHBv
b2wuZG8od2FpdCwgMikK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>417981</attachid>
            <date>2021-01-20 11:27:08 -0800</date>
            <delta_ts>2021-01-20 18:11:02 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-220547-20210120112707.patch</filename>
            <type>text/plain</type>
            <size>22676</size>
            <attacher name="Jonathan Bedard">jbedard</attacher>
            
              <data encoding="base64">SW5kZXg6IFRvb2xzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9DaGFuZ2VMb2cJKHJl
dmlzaW9uIDI3MTY0OSkKKysrIFRvb2xzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwz
ICsxLDU0IEBACisyMDIxLTAxLTIwICBKb25hdGhhbiBCZWRhcmQgIDxqYmVkYXJkQGFwcGxlLmNv
bT4KKworICAgICAgICBbd2Via2l0Y29yZXB5XSBBZGQgVGFza1Bvb2wKKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIyMDU0NworICAgICAgICA8cmRhcjov
L3Byb2JsZW0vNzMwNDM4ODc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISku
CisKKyAgICAgICAgVGhlIFRhc2tQb29sIG9iamVjdCBpcyBhIFB5dGhvbiAzLjggY29tcGF0aWJs
ZSBtdWx0aXByb2Nlc3NpbmcgdG9vbC4gTm90YWJsZSBmZWF0dXJlcyBhcmUgZm9yd2FyZGluZyBz
dGRvdXQsCisgICAgICAgIHN0ZGVyciBhbmQgbG9nZ2luZyB0byB0aGUgcGFyZW50IHByb2Nlc3Ms
IGV4Y2VwdGlvbiBwcm9wYWdhdGlvbiBiZXR3ZWVuIHByb2Nlc3NlcywgYW5kIGdyYWNlZnVsIGNs
ZWFuLXVwIHdoZW4KKyAgICAgICAgZXhjZXB0aW9ucyBpbiB0aGUgcGFyZW50IHByb2Nlc3MgYXJl
IGVuY291bnRlcmVkCisKKyAgICAgICAgKiBTY3JpcHRzL2xpYnJhcmllcy93ZWJraXRjb3JlcHkv
d2Via2l0Y29yZXB5L19faW5pdF9fLnB5OiBCdW1wIHZlcnNpb24sIGFkZCB0YmxpYi4KKyAgICAg
ICAgKiBTY3JpcHRzL2xpYnJhcmllcy93ZWJraXRjb3JlcHkvd2Via2l0Y29yZXB5L3Rhc2tfcG9v
bC5weTogQWRkZWQuCisgICAgICAgIChNZXNzYWdlKTogQmFzZSBjbGFzcyBmb3IgbWVzc2FnZSBw
YXNzZWQgYmV0d2VlbiBwcm9jZXNzZXMuCisgICAgICAgIChUYXNrKTogTWVzc2FnZSBpbmNsdWRp
bmcgZnVuY3Rpb24gYW5kIGFyZ3VtZW50cyB0byB0aGF0IGZ1bmN0aW9uLgorICAgICAgICAoUmVz
dWx0KTogUmV0dXJuIHZhbHVlIG9mIGEgdGFzayBwYXNzZWQgdG8gdGhlIHBhcmVudCBwcm9jZXNz
LgorICAgICAgICAoTG9nKTogUGFzcyBsb2cgbWVzc2FnZSBmcm9tIGNoaWxkIHByb2Nlc3MgdG8g
cGFyZW50IHByb2Nlc3MuCisgICAgICAgIChQcmludCk6IFBhc3Mgc3Rkb3V0IG9yIHN0ZGVyciBs
aW5lIGZyb20gY2hpbGQgcHJvY2VzcyB0byBwYXJlbnQgcHJvY2Vzcy4KKyAgICAgICAgKFN0YXRl
KTogTm90aWZ5IHBhcmVudCBwcm9jZXNzIHRoYXQgdGhlIGNoaWxkIHByb2Nlc3MgaGFzIGNoYW5n
ZWQgc3RhdGUuCisgICAgICAgIChDaGlsZEV4Y2VwdGlvbik6IFBhc3MgZXhjZXB0aW9uIGFuZCBz
dGFjayB0cmFjZSBmcm9tCisgICAgICAgIChCaURpcmVjdGlvbmFsUXVldWUpOiBQYWlyIGZvciBt
dWx0aXByb2Nlc3MgcXVldWVzIGFsbG93aW5nIGZvciBtZXNzYWdlcyB0byBiZSBwYXNzZWQgYmV0
d2VlbiBwcm9jZXNzZXMuCisgICAgICAgIChQcm9jZXNzKTogU2NvcGluZyBjbGFzcyBtYW5hZ2lu
ZyBjaGlsZC1wcm9jZXNzIGxvZ2ljLgorICAgICAgICAoUHJvY2Vzcy5Mb2dIYW5kbGVyKTogTG9n
Z2luZyBoYW5kbGVyIHRoYXQgcGFzc2VzIGxvZyBsaW5lcyBmcm9tIHRoZSBjaGlsZCBwcm9jZXNz
IHRvIGl0J3MgcGFyZW50LgorICAgICAgICAoUHJvY2Vzcy5TdHJlYW0pOiBXcml0YWJsZSBzdHJl
YW0gd2hpY2ggcGFzc2VzIGNvbnRlbnQgZnJvbSB0aGUgY2hpbGQgcHJvY2VzcyB0byB0aGUgc3Rh
bmRhcmQgb3V0IG9yIGVycm9yCisgICAgICAgIG9mIHRoYXQgcHJvY2VzcydzIHBhcmVudC4KKyAg
ICAgICAgKFByb2Nlc3MuaGFuZGxlcik6IFNJR1RFUk0gc2hvdWxkIHByZXZlbnQgZnV0dXJlIHBy
b2Nlc3NpbmcgYnV0IGFsbG93IGN1cnJlbnRseSBpbi1mbGlnaHQgdGFza3MgdG8gY29tcGxldGUu
CisgICAgICAgIChQcm9jZXNzLm1haW4pOiBFbnRyeS1wb2ludCB0byBjaGlsZCBwcm9jZXNzLgor
ICAgICAgICAoVGFza1Bvb2wpOiBNYW5hZ2luZyBhbGxvY2F0aW9uIG9mIHRhc2tzIHRvIGNoaWxk
IHByb2Nlc3NlcyBhbmQgY2xlYW4gdXAgdGhvc2UgY2hpbGQgcHJvY2Vzc2VzLgorICAgICAgICAo
VGFza1Bvb2wuRXhjZXB0aW9uKTogRXhjZXB0aW9uIG93bmVkIGJ5IFRhc2tQb29sIG9iamVjdC4K
KyAgICAgICAgKFRhc2tQb29sLl9faW5pdF9fKToKKyAgICAgICAgKFRhc2tQb29sLl9fZW50ZXJf
Xyk6CisgICAgICAgIChUYXNrUG9vbC5kbyk6IFBhc3MgdGFzayB0byBjaGlsZCBwcm9jZXNzZXMu
CisgICAgICAgIChUYXNrUG9vbC53YWl0KTogV2FpdCB1bnRpbCBhbGwgcHJvY2Vzc2VzIGFyZSBj
b21wbGV0ZWQuCisgICAgICAgIChUYXNrUG9vbC5fX2V4aXRfXyk6IFRlYXJkb3duIGFsbCBjaGls
ZCBwcm9jZXNzZXMuCisgICAgICAgICogU2NyaXB0cy9saWJyYXJpZXMvd2Via2l0Y29yZXB5L3dl
YmtpdGNvcmVweS90ZXN0cy90YXNrX3Bvb2xfdW5pdHRlc3QucHk6IEFkZGVkLgorICAgICAgICAo
c2V0dXApOgorICAgICAgICAodGVhcmRvd24pOgorICAgICAgICAoYWN0aW9uKToKKyAgICAgICAg
KGxvZyk6CisgICAgICAgICh3YWl0KToKKyAgICAgICAgKGV4Y2VwdGlvbik6CisgICAgICAgIChU
YXNrUG9vbFVuaXR0ZXN0KToKKyAgICAgICAgKFRhc2tQb29sVW5pdHRlc3QudGVzdF9zaW5nbGUp
OgorICAgICAgICAoVGFza1Bvb2xVbml0dGVzdC50ZXN0X211bHRpcGxlKToKKyAgICAgICAgKFRh
c2tQb29sVW5pdHRlc3QudGVzdF9jYWxsYmFjayk6CisgICAgICAgIChUYXNrUG9vbFVuaXR0ZXN0
LnRlc3RfZXhjZXB0aW9uKToKKyAgICAgICAgKFRhc2tQb29sVW5pdHRlc3QudGVzdF9zZXR1cCk6
CisgICAgICAgIChUYXNrUG9vbFVuaXR0ZXN0LnRlc3RfdGVhcmRvd24pOgorICAgICAgICAoVGFz
a1Bvb2xVbml0dGVzdC50ZXN0X2ludmFsaWRfc2h1dGRvd24pOgorCiAyMDIxLTAxLTIwICBKb25h
dGhhbiBCZWRhcmQgIDxqYmVkYXJkQGFwcGxlLmNvbT4KIAogICAgICAgICBbd2Via2l0Y29yZXB5
XSBTdXBwb3J0IGFsdGVybmF0aXZlIGRlZmF1bHQgcHlwaSB1cmwgb24gbWFjT1MgKEZvbGxvdy11
cCBmaXgpCkluZGV4OiBUb29scy9TY3JpcHRzL2xpYnJhcmllcy93ZWJraXRjb3JlcHkvc2V0dXAu
cHkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gVG9vbHMvU2NyaXB0cy9saWJyYXJpZXMvd2Via2l0Y29yZXB5L3Nl
dHVwLnB5CShyZXZpc2lvbiAyNzE2NDkpCisrKyBUb29scy9TY3JpcHRzL2xpYnJhcmllcy93ZWJr
aXRjb3JlcHkvc2V0dXAucHkJKHdvcmtpbmcgY29weSkKQEAgLTMwLDcgKzMwLDcgQEAgZGVmIHJl
YWRtZSgpOgogCiBzZXR1cCgKICAgICBuYW1lPSd3ZWJraXRjb3JlcHknLAotICAgIHZlcnNpb249
JzAuNC4yNycsCisgICAgdmVyc2lvbj0nMC41LjAnLAogICAgIGRlc2NyaXB0aW9uPSdMaWJyYXJ5
IGNvbnRhaW5pbmcgdmFyaW91cyBQeXRob24gc3VwcG9ydCBjbGFzc2VzIGFuZCBmdW5jdGlvbnMu
JywKICAgICBsb25nX2Rlc2NyaXB0aW9uPXJlYWRtZSgpLAogICAgIGNsYXNzaWZpZXJzPVsKSW5k
ZXg6IFRvb2xzL1NjcmlwdHMvbGlicmFyaWVzL3dlYmtpdGNvcmVweS93ZWJraXRjb3JlcHkvX19p
bml0X18ucHkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvU2NyaXB0cy9saWJyYXJpZXMvd2Via2l0Y29y
ZXB5L3dlYmtpdGNvcmVweS9fX2luaXRfXy5weQkocmV2aXNpb24gMjcxNjQ5KQorKysgVG9vbHMv
U2NyaXB0cy9saWJyYXJpZXMvd2Via2l0Y29yZXB5L3dlYmtpdGNvcmVweS9fX2luaXRfXy5weQko
d29ya2luZyBjb3B5KQpAQCAtMSw0ICsxLDQgQEAKLSMgQ29weXJpZ2h0IChDKSAyMDIwIEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMgQ29weXJpZ2h0IChDKSAyMDIwLCAyMDIxIEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICMKICMgUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAjIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cwpAQCAtMzQsOCArMzQsOSBAQCBmcm9tIHdlYmtpdGNvcmVweS5zdHJpbmdfdXRpbHMgaW1wb3J0
IEJ5CiBmcm9tIHdlYmtpdGNvcmVweS50aW1lb3V0IGltcG9ydCBUaW1lb3V0CiBmcm9tIHdlYmtp
dGNvcmVweS5zdWJwcm9jZXNzX3V0aWxzIGltcG9ydCBUaW1lb3V0RXhwaXJlZCwgQ29tcGxldGVk
UHJvY2VzcywgcnVuCiBmcm9tIHdlYmtpdGNvcmVweS5vdXRwdXRfY2FwdHVyZSBpbXBvcnQgTG9n
Z2VyQ2FwdHVyZSwgT3V0cHV0Q2FwdHVyZSwgT3V0cHV0RHVwbGljYXRlCitmcm9tIHdlYmtpdGNv
cmVweS50YXNrX3Bvb2wgaW1wb3J0IFRhc2tQb29sCiAKLXZlcnNpb24gPSBWZXJzaW9uKDAsIDQs
IDI3KQordmVyc2lvbiA9IFZlcnNpb24oMCwgNSwgMCkKIAogZnJvbSB3ZWJraXRjb3JlcHkuYXV0
b2luc3RhbGwgaW1wb3J0IFBhY2thZ2UsIEF1dG9JbnN0YWxsCiBpZiBzeXMudmVyc2lvbl9pbmZv
ID4gKDMsIDApOgpAQCAtNTUsNiArNTYsNyBAQCBBdXRvSW5zdGFsbC5yZWdpc3RlcihQYWNrYWdl
KCdyZXF1ZXN0cycsCiBBdXRvSW5zdGFsbC5yZWdpc3RlcihQYWNrYWdlKCdzZXR1cHRvb2xzJywg
VmVyc2lvbig0NCwgMSwgIDEpKSkKIEF1dG9JbnN0YWxsLnJlZ2lzdGVyKFBhY2thZ2UoJ3NvY2tz
JywgVmVyc2lvbigxLCA3LCAxKSwgcHlwaV9uYW1lPSdQeVNvY2tzJykpCiBBdXRvSW5zdGFsbC5y
ZWdpc3RlcihQYWNrYWdlKCdzaXgnLCBWZXJzaW9uKDEsIDE1LCAwKSkpCitBdXRvSW5zdGFsbC5y
ZWdpc3RlcihQYWNrYWdlKCd0YmxpYicsIFZlcnNpb24oMSwgNywgMCkpKQogQXV0b0luc3RhbGwu
cmVnaXN0ZXIoUGFja2FnZSgndXJsbGliMycsIFZlcnNpb24oMSwgMjUsIDEwKSkpCiBBdXRvSW5z
dGFsbC5yZWdpc3RlcihQYWNrYWdlKCd3aGVlbCcsIFZlcnNpb24oMCwgMzUsIDEpKSkKIApJbmRl
eDogVG9vbHMvU2NyaXB0cy9saWJyYXJpZXMvd2Via2l0Y29yZXB5L3dlYmtpdGNvcmVweS90YXNr
X3Bvb2wucHkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvU2NyaXB0cy9saWJyYXJpZXMvd2Via2l0Y29y
ZXB5L3dlYmtpdGNvcmVweS90YXNrX3Bvb2wucHkJKG5vbmV4aXN0ZW50KQorKysgVG9vbHMvU2Ny
aXB0cy9saWJyYXJpZXMvd2Via2l0Y29yZXB5L3dlYmtpdGNvcmVweS90YXNrX3Bvb2wucHkJKHdv
cmtpbmcgY29weSkKQEAgLTAsMCArMSwzNjUgQEAKKyMgQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisjIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
IyBhcmUgbWV0OgorIyAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorIyAyLiAgUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorIyAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorIworIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORCBBTlkK
KyMgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBUSEUgSU1QTElFRAorIyBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisjIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWQorIyBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworIyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisjIExPU1Mg
T0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTgorIyBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorIyAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJ
UworIyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KKworaW1wb3J0IGlvCitpbXBvcnQgb3MKK2ltcG9ydCBsb2dnaW5nCitpbXBvcnQg
bXVsdGlwcm9jZXNzaW5nCitpbXBvcnQgc2lnbmFsCitpbXBvcnQgc3lzCisKK2Zyb20gc2l4IGlt
cG9ydCByZXJhaXNlCitmcm9tIHdlYmtpdGNvcmVweSBpbXBvcnQgT3V0cHV0Q2FwdHVyZSwgVGlt
ZW91dCwgbG9nCisKKworY2xhc3MgTWVzc2FnZShvYmplY3QpOgorICAgIGRlZiBfX2luaXRfXyhz
ZWxmLCB3aG89Tm9uZSk6CisgICAgICAgIHNlbGYud2hvID0gd2hvIG9yIFByb2Nlc3MubmFtZQor
CisgICAgZGVmIF9fY2FsbF9fKHNlbGYsIGNhbGxlcik6CisgICAgICAgIE5vdEltcGxlbWVudGVk
KCkKKworCitjbGFzcyBUYXNrKE1lc3NhZ2UpOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBmdW5j
dGlvbiwgaWQsICphcmdzLCAqKmt3YXJncyk6CisgICAgICAgIHN1cGVyKFRhc2ssIHNlbGYpLl9f
aW5pdF9fKCkKKworICAgICAgICBzZWxmLmZ1bmN0aW9uID0gZnVuY3Rpb24KKyAgICAgICAgc2Vs
Zi5pZCA9IGlkCisgICAgICAgIHNlbGYuYXJncyA9IHR1cGxlKGFyZ3MpCisgICAgICAgIHNlbGYu
a3dhcmdzID0ga3dhcmdzCisKKyAgICBkZWYgX19jYWxsX18oc2VsZiwgY2FsbGVyKToKKyAgICAg
ICAgcmV0dXJuIHNlbGYuZnVuY3Rpb24oKnNlbGYuYXJncywgKipzZWxmLmt3YXJncykKKworCitj
bGFzcyBSZXN1bHQoTWVzc2FnZSk6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHZhbHVlLCBpZCk6
CisgICAgICAgIHN1cGVyKFJlc3VsdCwgc2VsZikuX19pbml0X18oKQorICAgICAgICBzZWxmLnZh
bHVlID0gdmFsdWUKKyAgICAgICAgc2VsZi5pZCA9IGlkCisKKyAgICBkZWYgX19jYWxsX18oc2Vs
ZiwgY2FsbGVyKToKKyAgICAgICAgaWYgY2FsbGVyOgorICAgICAgICAgICAgY2FsbGVyLmNhbGxi
YWNrcy5wb3Aoc2VsZi5pZCwgbGFtYmRhIHZhbHVlOiB2YWx1ZSkoc2VsZi52YWx1ZSkKKyAgICAg
ICAgcmV0dXJuIHNlbGYudmFsdWUKKworCitjbGFzcyBMb2coTWVzc2FnZSk6CisgICAgZGVmIF9f
aW5pdF9fKHNlbGYsIHJlY29yZCk6CisgICAgICAgIHN1cGVyKExvZywgc2VsZikuX19pbml0X18o
KQorICAgICAgICBzZWxmLnJlY29yZCA9IHJlY29yZAorCisgICAgZGVmIF9fY2FsbF9fKHNlbGYs
IGNhbGxlcik6CisgICAgICAgIGxvZ2dpbmcuZ2V0TG9nZ2VyKHNlbGYucmVjb3JkLm5hbWUpLmxv
ZyhzZWxmLnJlY29yZC5sZXZlbG5vLCAne30ge30nLmZvcm1hdChzZWxmLndobywgc2VsZi5yZWNv
cmQuZ2V0TWVzc2FnZSgpKSkKKworCitjbGFzcyBQcmludChNZXNzYWdlKToKKyAgICBzdGRvdXQg
PSAxCisgICAgc3RkZXJyID0gMgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGxpbmVzLCBzdHJl
YW09c3Rkb3V0KToKKyAgICAgICAgc3VwZXIoUHJpbnQsIHNlbGYpLl9faW5pdF9fKCkKKyAgICAg
ICAgc2VsZi5saW5lcyA9IGxpbmVzCisgICAgICAgIHNlbGYuc3RyZWFtID0gc3RyZWFtCisKKyAg
ICBkZWYgX19jYWxsX18oc2VsZiwgY2FsbGVyKToKKyAgICAgICAgc3RyZWFtID0geworICAgICAg
ICAgICAgc2VsZi5zdGRvdXQ6IHN5cy5zdGRvdXQsCisgICAgICAgICAgICBzZWxmLnN0ZGVycjog
c3lzLnN0ZGVyciwKKyAgICAgICAgfS5nZXQoc2VsZi5zdHJlYW0sIHN5cy5zdGRlcnIpCisgICAg
ICAgIGZvciBsaW5lIGluIHNlbGYubGluZXM6CisgICAgICAgICAgICBzdHJlYW0ud3JpdGUoJ3t9
XG4nLmZvcm1hdChsaW5lKSkKKworCitjbGFzcyBTdGF0ZShNZXNzYWdlKToKKyAgICBTVEFSVElO
RywgU1RPUFBJTkcgPSAxLCAwCisgICAgU1RBVEVTID0gW1NUQVJUSU5HLCBTVE9QUElOR10KKwor
ICAgIGRlZiBfX2luaXRfXyhzZWxmLCBzdGF0ZSk6CisgICAgICAgIHN1cGVyKFN0YXRlLCBzZWxm
KS5fX2luaXRfXygpCisgICAgICAgIHNlbGYuc3RhdGUgPSBzdGF0ZQorCisgICAgZGVmIF9fY2Fs
bF9fKHNlbGYsIGNhbGxlcik6CisgICAgICAgIGxvZy5pbmZvKCd7fSB7fScuZm9ybWF0KAorICAg
ICAgICAgICAgc2VsZi53aG8sIHsKKyAgICAgICAgICAgICAgICBTdGF0ZS5TVEFSVElORzogJ3N0
YXJ0aW5nJywKKyAgICAgICAgICAgICAgICBTdGF0ZS5TVE9QUElORzogJ3N0b3BwaW5nJywKKyAg
ICAgICAgICAgIH0uZ2V0KHNlbGYuc3RhdGUsIHNlbGYuc3RhdGUpLAorICAgICAgICApKQorICAg
ICAgICBpZiBjYWxsZXI6CisgICAgICAgICAgICBjYWxsZXIuX3N0YXJ0ZWQgKz0geworICAgICAg
ICAgICAgICAgIFN0YXRlLlNUQVJUSU5HOiAxLAorICAgICAgICAgICAgICAgIFN0YXRlLlNUT1BQ
SU5HOiAtMSwKKyAgICAgICAgICAgIH0uZ2V0KHNlbGYuc3RhdGUsIDApCisgICAgICAgIHJldHVy
biBzZWxmLnN0YXRlCisKKworY2xhc3MgQ2hpbGRFeGNlcHRpb24oTWVzc2FnZSk6CisgICAgZGVm
IF9faW5pdF9fKHNlbGYsIGV4Y19pbmZvPU5vbmUpOgorICAgICAgICBzdXBlcihDaGlsZEV4Y2Vw
dGlvbiwgc2VsZikuX19pbml0X18oKQorICAgICAgICBzZWxmLmV4Y19pbmZvID0gZXhjX2luZm8g
b3Igc3lzLmV4Y19pbmZvKCkKKworICAgIGRlZiBfX2NhbGxfXyhzZWxmLCBjYWxsZXIpOgorICAg
ICAgICBfLCBleGNlcHRpb24sIHRyYWNlID0gc3lzLmV4Y19pbmZvKCkKKyAgICAgICAgaWYgZXhj
ZXB0aW9uOgorICAgICAgICAgICAgbG9nLmNyaXRpY2FsKCJFeGNlcHRpb24gaW4gZmxpZ2h0LCAn
e30nIGlnbm9yZWQiLmZvcm1hdChzZWxmLmV4Y19pbmZvWzFdKSkKKyAgICAgICAgICAgIHJldHVy
bgorCisgICAgICAgIHJlcmFpc2UoKnNlbGYuZXhjX2luZm8pCisKKworY2xhc3MgQmlEaXJlY3Rp
b25hbFF1ZXVlKG9iamVjdCk6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIG91dGdvaW5nPU5vbmUs
IGluY29taW5nPU5vbmUpOgorICAgICAgICBzZWxmLm91dGdvaW5nID0gb3V0Z29pbmcgb3IgbXVs
dGlwcm9jZXNzaW5nLlF1ZXVlKCkKKyAgICAgICAgc2VsZi5pbmNvbWluZyA9IGluY29taW5nIG9y
IG11bHRpcHJvY2Vzc2luZy5RdWV1ZSgpCisKKyAgICBkZWYgc2VuZChzZWxmLCBvYmplY3QpOgor
ICAgICAgICByZXR1cm4gc2VsZi5vdXRnb2luZy5wdXQob2JqZWN0KQorCisgICAgZGVmIHJlY2Vp
dmUoc2VsZiwgYmxvY2tpbmc9VHJ1ZSk6CisgICAgICAgIHdpdGggVGltZW91dC5EaXNhYmxlQWxh
cm0oKToKKyAgICAgICAgICAgIGlmIG5vdCBibG9ja2luZzoKKyAgICAgICAgICAgICAgICByZXR1
cm4gc2VsZi5pbmNvbWluZy5nZXQoYmxvY2s9RmFsc2UpCisKKyAgICAgICAgICAgIGRpZmZlcmVu
Y2UgPSBUaW1lb3V0LmRpZmZlcmVuY2UoKQorICAgICAgICAgICAgaWYgZGlmZmVyZW5jZSBpcyBu
b3QgTm9uZToKKyAgICAgICAgICAgICAgICByZXR1cm4gc2VsZi5pbmNvbWluZy5nZXQodGltZW91
dD1kaWZmZXJlbmNlKQorICAgICAgICAgICAgcmV0dXJuIHNlbGYuaW5jb21pbmcuZ2V0KCkKKwor
CitjbGFzcyBQcm9jZXNzKG9iamVjdCk6CisgICAgbmFtZSA9IE5vbmUKKyAgICB3b3JraW5nID0g
RmFsc2UKKworICAgIGNsYXNzIExvZ0hhbmRsZXIobG9nZ2luZy5IYW5kbGVyKToKKyAgICAgICAg
ZGVmIF9faW5pdF9fKHNlbGYsIHF1ZXVlLCAqKmt3YXJncyk6CisgICAgICAgICAgICBzZWxmLl9x
dWV1ZSA9IHF1ZXVlCisgICAgICAgICAgICBzdXBlcihQcm9jZXNzLkxvZ0hhbmRsZXIsIHNlbGYp
Ll9faW5pdF9fKCoqa3dhcmdzKQorCisgICAgICAgIGRlZiBlbWl0KHNlbGYsIHJlY29yZCk6Cisg
ICAgICAgICAgICBzZWxmLl9xdWV1ZS5zZW5kKExvZyhyZWNvcmQpKQorCisgICAgY2xhc3MgU3Ry
ZWFtKGlvLklPQmFzZSk6CisgICAgICAgIGRlZiBfX2luaXRfXyhzZWxmLCBoYW5kbGUsIHF1ZXVl
KToKKyAgICAgICAgICAgIGlmIG5vdCBoYW5kbGU6CisgICAgICAgICAgICAgICAgcmFpc2UgVmFs
dWVFcnJvcignTm8gdGFyZ2V0IHN0cmVhbXMgcHJvdmlkZWQnKQorICAgICAgICAgICAgc2VsZi5o
YW5kbGUgPSBoYW5kbGUKKyAgICAgICAgICAgIHNlbGYuY2FjaGUgPSBOb25lCisgICAgICAgICAg
ICBzZWxmLl9xdWV1ZSA9IHF1ZXVlCisKKyAgICAgICAgZGVmIGZsdXNoKHNlbGYpOgorICAgICAg
ICAgICAgaWYgc2VsZi5jYWNoZSBpcyBub3QgTm9uZToKKyAgICAgICAgICAgICAgICBzZWxmLl9x
dWV1ZS5zZW5kKFByaW50KGxpbmVzPVtzZWxmLmNhY2hlXSwgc3RyZWFtPXNlbGYuaGFuZGxlKSkK
KyAgICAgICAgICAgICAgICBzZWxmLmNhY2hlID0gTm9uZQorCisgICAgICAgIGRlZiB3cml0ZWxp
bmVzKHNlbGYsIGxpbmVzKToKKyAgICAgICAgICAgIGZvciBsaW5lIGluIGxpbmVzOgorICAgICAg
ICAgICAgICAgIHNlbGYud3JpdGUobGluZSkKKworICAgICAgICBkZWYgd3JpdGUoc2VsZiwgYik6
CisgICAgICAgICAgICB0b19iZV9wcmludGVkID0gW10KKyAgICAgICAgICAgIGZvciBjIGluIGI6
CisgICAgICAgICAgICAgICAgaWYgYyA9PSAnXG4nOgorICAgICAgICAgICAgICAgICAgICB0b19i
ZV9wcmludGVkLmFwcGVuZChzZWxmLmNhY2hlIG9yICcnKQorICAgICAgICAgICAgICAgICAgICBz
ZWxmLmNhY2hlID0gTm9uZQorICAgICAgICAgICAgICAgIGVsaWYgYyBub3QgaW4gWydccicsICdc
MCddOgorICAgICAgICAgICAgICAgICAgICBzZWxmLmNhY2hlID0gYyBpZiBzZWxmLmNhY2hlIGlz
IE5vbmUgZWxzZSAoc2VsZi5jYWNoZSArIGMpCisgICAgICAgICAgICBpZiB0b19iZV9wcmludGVk
OgorICAgICAgICAgICAgICAgIHNlbGYuX3F1ZXVlLnNlbmQoUHJpbnQobGluZXM9dG9fYmVfcHJp
bnRlZCwgc3RyZWFtPXNlbGYuaGFuZGxlKSkKKyAgICAgICAgICAgIHJldHVybiBsZW4oYikKKwor
ICAgICAgICBAcHJvcGVydHkKKyAgICAgICAgZGVmIGNsb3NlZChzZWxmKToKKyAgICAgICAgICAg
IHJldHVybiBGYWxzZQorCisgICAgICAgIGRlZiBjbG9zZShzZWxmKToKKyAgICAgICAgICAgIHNl
bGYuZmx1c2goKQorCisgICAgICAgIGRlZiBmaWxlbm8oc2VsZik6CisgICAgICAgICAgICByZXR1
cm4gc2VsZi5oYW5kbGUKKworICAgICAgICBkZWYgaXNhdHR5KHNlbGYpOgorICAgICAgICAgICAg
cmV0dXJuIEZhbHNlCisKKyAgICAgICAgZGVmIHJlYWRhYmxlKHNlbGYpOgorICAgICAgICAgICAg
cmV0dXJuIEZhbHNlCisKKyAgICAgICAgZGVmIHJlYWRsaW5lKHNlbGYsIHNpemU9LTEpOgorICAg
ICAgICAgICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcigpCisKKyAgICAgICAgZGVmIHJlYWRs
aW5lcyhzZWxmLCBoaW50PS0xKToKKyAgICAgICAgICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJy
b3IoKQorCisgICAgICAgIGRlZiBzZWVrKHNlbGYsIG9mZnNldCwgd2hlbmNlPWlvLlNFRUtfU0VU
KToKKyAgICAgICAgICAgIHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IoKQorCisgICAgICAgIGRl
ZiBzZWVrYWJsZShzZWxmKToKKyAgICAgICAgICAgIHJldHVybiBGYWxzZQorCisgICAgICAgIGRl
ZiB0ZWxsKHNlbGYpOgorICAgICAgICAgICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcigpCisK
KyAgICAgICAgZGVmIHRydW5jYXRlKHNlbGYsIHNpemU9Tm9uZSk6CisgICAgICAgICAgICByYWlz
ZSBOb3RJbXBsZW1lbnRlZEVycm9yKCkKKworICAgICAgICBkZWYgd3JpdGFibGUoc2VsZik6Cisg
ICAgICAgICAgICByZXR1cm4gVHJ1ZQorCisgICAgQGNsYXNzbWV0aG9kCisgICAgZGVmIGhhbmRs
ZXIoY2xzLCB2YWx1ZSwgXyk6CisgICAgICAgIGlmIHZhbHVlID09IHNpZ25hbC5TSUdURVJNOgor
ICAgICAgICAgICAgY2xzLndvcmtpbmcgPSBGYWxzZQorCisgICAgQGNsYXNzbWV0aG9kCisgICAg
ZGVmIG1haW4oY2xzLCBuYW1lLCBzZXR1cCwgcXVldWUsIHRlYXJkb3duKToKKyAgICAgICAgZnJv
bSB0YmxpYiBpbXBvcnQgcGlja2xpbmdfc3VwcG9ydAorCisgICAgICAgIGNscy5uYW1lID0gbmFt
ZQorICAgICAgICBjbHMud29ya2luZyA9IFRydWUKKworICAgICAgICBzaWduYWwuc2lnbmFsKHNp
Z25hbC5TSUdURVJNLCBjbHMuaGFuZGxlcikKKworICAgICAgICBsb2dnZXIgPSBsb2dnaW5nLmdl
dExvZ2dlcigpCisgICAgICAgIGZvciBoYW5kbGVyIGluIGxvZ2dlci5oYW5kbGVyczoKKyAgICAg
ICAgICAgIGxvZ2dlci5yZW1vdmVIYW5kbGVyKGhhbmRsZXIpCisgICAgICAgIGxvZ2dlci5hZGRI
YW5kbGVyKGNscy5Mb2dIYW5kbGVyKHF1ZXVlKSkKKworICAgICAgICBxdWV1ZS5zZW5kKFN0YXRl
KFN0YXRlLlNUQVJUSU5HKSkKKworICAgICAgICB3aXRoIE91dHB1dENhcHR1cmUuUmVwbGFjZVN5
c1N0cmVhbSgnc3RkZXJyJywgY2xzLlN0cmVhbShQcmludC5zdGRlcnIsIHF1ZXVlKSksIE91dHB1
dENhcHR1cmUuUmVwbGFjZVN5c1N0cmVhbSgnc3Rkb3V0JywgY2xzLlN0cmVhbShQcmludC5zdGRv
dXQsIHF1ZXVlKSk6CisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgcGlja2xpbmdf
c3VwcG9ydC5pbnN0YWxsKCkKKyAgICAgICAgICAgICAgICBpZiBzZXR1cDoKKyAgICAgICAgICAg
ICAgICAgICAgc2V0dXAoKQorCisgICAgICAgICAgICAgICAgd2hpbGUgY2xzLndvcmtpbmc6Cisg
ICAgICAgICAgICAgICAgICAgIHRhc2sgPSBxdWV1ZS5yZWNlaXZlKCkKKyAgICAgICAgICAgICAg
ICAgICAgaWYgbm90IHRhc2s6CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhaworICAgICAg
ICAgICAgICAgICAgICBxdWV1ZS5zZW5kKFJlc3VsdCh2YWx1ZT10YXNrKE5vbmUpLCBpZD10YXNr
LmlkKSkKKworICAgICAgICAgICAgZXhjZXB0IEJhc2VFeGNlcHRpb246CisgICAgICAgICAgICAg
ICAgdHlwLCBleGNlcHRpb24sIHRyYWNlYmFjayA9IHN5cy5leGNfaW5mbygpCisgICAgICAgICAg
ICAgICAgcXVldWUuc2VuZChDaGlsZEV4Y2VwdGlvbihleGNfaW5mbz0oCisgICAgICAgICAgICAg
ICAgICAgIHR5cCwgdHlwKCd7fSAoZnJvbSB7fSknLmZvcm1hdChzdHIoZXhjZXB0aW9uKSwgbmFt
ZSkpLCB0cmFjZWJhY2ssCisgICAgICAgICAgICAgICAgKSkpCisKKyAgICAgICAgICAgIGZpbmFs
bHk6CisgICAgICAgICAgICAgICAgaWYgdGVhcmRvd246CisgICAgICAgICAgICAgICAgICAgIHRl
YXJkb3duKCkKKyAgICAgICAgICAgICAgICBzeXMuc3Rkb3V0LmZsdXNoKCkKKyAgICAgICAgICAg
ICAgICBzeXMuc3RkZXJyLmZsdXNoKCkKKyAgICAgICAgICAgICAgICBxdWV1ZS5zZW5kKFN0YXRl
KFN0YXRlLlNUT1BQSU5HKSkKKworCitjbGFzcyBUYXNrUG9vbChvYmplY3QpOgorCisgICAgY2xh
c3MgRXhjZXB0aW9uKFJ1bnRpbWVFcnJvcik6CisgICAgICAgIHBhc3MKKworICAgIGRlZiBfX2lu
aXRfXyhzZWxmLCB3b3JrZXJzPTEsIG5hbWU9Tm9uZSwgc2V0dXA9Tm9uZSwgdGVhcmRvd249Tm9u
ZSwgZ3JhY2VfcGVyaW9kPTUsIGJsb2NrX3NpemU9MTAwMCk6CisgICAgICAgICMgRW5zdXJlIHRi
bGliIGlzIGluc3RhbGxlZCBiZWZvcmUgY3JlYXRpbmcgY2hpbGQgcHJvY2Vzc2VzCisgICAgICAg
IGltcG9ydCB0YmxpYgorCisgICAgICAgIG5hbWUgPSBuYW1lIG9yICd3b3JrZXInCisgICAgICAg
IGlmIG5hbWUgPT0gUHJvY2Vzcy5uYW1lOgorICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigi
UGFyZW50IHByb2Nlc3MgaXMgYWxyZWFkeSBuYW1lZCB7fSIuZm9ybWF0KG5hbWUpKQorCisgICAg
ICAgIGlmIHdvcmtlcnMgPCAxOgorICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcignVGFza1Bv
b2wgcmVxdWlyZXMgcG9zaXRpdmUgbnVtYmVyIG9mIHdvcmtlcnMnKQorCisgICAgICAgIHNlbGYu
cXVldWUgPSBCaURpcmVjdGlvbmFsUXVldWUoKQorCisgICAgICAgIHNlbGYud29ya2VycyA9IFtt
dWx0aXByb2Nlc3NpbmcuUHJvY2VzcygKKyAgICAgICAgICAgIHRhcmdldD1Qcm9jZXNzLm1haW4s
CisgICAgICAgICAgICBhcmdzPSgne30ve30nLmZvcm1hdChuYW1lLCBjb3VudCksIHNldHVwLCBC
aURpcmVjdGlvbmFsUXVldWUoCisgICAgICAgICAgICAgICAgb3V0Z29pbmc9c2VsZi5xdWV1ZS5p
bmNvbWluZywKKyAgICAgICAgICAgICAgICBpbmNvbWluZz1zZWxmLnF1ZXVlLm91dGdvaW5nLAor
ICAgICAgICAgICAgKSwgdGVhcmRvd24pLAorICAgICAgICApIGZvciBjb3VudCBpbiByYW5nZSh3
b3JrZXJzKV0KKyAgICAgICAgc2VsZi5fc3RhcnRlZCA9IDAKKworICAgICAgICBzZWxmLmNhbGxi
YWNrcyA9IHt9CisgICAgICAgIHNlbGYuX2lkX2NvdW50ID0gMAorICAgICAgICBzZWxmLmdyYWNl
X3BlcmlvZCA9IGdyYWNlX3BlcmlvZAorICAgICAgICBzZWxmLmJsb2NrX3NpemUgPSBibG9ja19z
aXplCisKKyAgICBkZWYgX19lbnRlcl9fKHNlbGYpOgorICAgICAgICB3aXRoIFRpbWVvdXQoc2Vj
b25kcz0xMCwgcGF0Y2g9RmFsc2UsIGhhbmRsZXI9c2VsZi5FeGNlcHRpb24oJ0ZhaWxlZCB0byBz
dGFydCBhbGwgd29ya2VycycpKToKKyAgICAgICAgICAgIGZvciB3b3JrZXIgaW4gc2VsZi53b3Jr
ZXJzOgorICAgICAgICAgICAgICAgIHdvcmtlci5zdGFydCgpCisgICAgICAgICAgICB3aGlsZSBz
ZWxmLl9zdGFydGVkIDwgbGVuKHNlbGYud29ya2Vycyk6CisgICAgICAgICAgICAgICAgc2VsZi5x
dWV1ZS5yZWNlaXZlKCkoc2VsZikKKyAgICAgICAgcmV0dXJuIHNlbGYKKworICAgIGRlZiBkbyhz
ZWxmLCBmdW5jdGlvbiwgKmFyZ3MsICoqa3dhcmdzKToKKyAgICAgICAgY2FsbGJhY2sgPSBrd2Fy
Z3MucG9wKCdjYWxsYmFjaycsIE5vbmUpCisgICAgICAgIGlmIGNhbGxiYWNrOgorICAgICAgICAg
ICAgc2VsZi5jYWxsYmFja3Nbc2VsZi5faWRfY291bnRdID0gY2FsbGJhY2sKKyAgICAgICAgc2Vs
Zi5xdWV1ZS5zZW5kKFRhc2soZnVuY3Rpb24sIHNlbGYuX2lkX2NvdW50LCAqYXJncywgKiprd2Fy
Z3MpKQorICAgICAgICBzZWxmLl9pZF9jb3VudCArPSAxCisKKyAgICAgICAgIyBGb3IgZXZlcnkg
YmxvY2sgb2YgdGFza3MgcGFzc2VkIHRvIG91ciB3b3JrZXJzLCB3ZSBuZWVkIGNvbnN1bWUgbWVz
c2FnZXMgc28gd2UgZG9uJ3QgZ2V0IGRlYWRsb2NrZWQKKyAgICAgICAgaWYgbm90IHNlbGYuX2lk
X2NvdW50ICUgc2VsZi5ibG9ja19zaXplOgorICAgICAgICAgICAgd2hpbGUgVHJ1ZToKKyAgICAg
ICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgICAgIHNlbGYucXVldWUucmVjZWl2ZShi
bG9ja2luZz1GYWxzZSkoc2VsZikKKyAgICAgICAgICAgICAgICBleGNlcHQgRXhjZXB0aW9uOgor
ICAgICAgICAgICAgICAgICAgICBicmVhaworCisgICAgZGVmIHdhaXQoc2VsZik6CisgICAgICAg
IGZvciBfIGluIHNlbGYud29ya2VyczoKKyAgICAgICAgICAgIHNlbGYucXVldWUuc2VuZChOb25l
KQorCisgICAgICAgIHdoaWxlIHNlbGYuX3N0YXJ0ZWQ6CisgICAgICAgICAgICBzZWxmLnF1ZXVl
LnJlY2VpdmUoKShzZWxmKQorCisgICAgZGVmIF9fZXhpdF9fKHNlbGYsICphcmdzLCAqKmt3YXJn
cyk6CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIGluZmxpZ2h0ID0gc3lzLmV4Y19pbmZvKCkK
KworICAgICAgICAgICAgZm9yIHdvcmtlciBpbiBzZWxmLndvcmtlcnM6CisgICAgICAgICAgICAg
ICAgaWYgd29ya2VyLmlzX2FsaXZlKCk6CisgICAgICAgICAgICAgICAgICAgIHdvcmtlci50ZXJt
aW5hdGUoKQorCisgICAgICAgICAgICB3aXRoIFRpbWVvdXQoc2Vjb25kcz1zZWxmLmdyYWNlX3Bl
cmlvZCk6CisgICAgICAgICAgICAgICAgdHJ5OgorICAgICAgICAgICAgICAgICAgICB3aGlsZSBz
ZWxmLl9zdGFydGVkOgorICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5xdWV1ZS5yZWNlaXZl
KCkoc2VsZikKKyAgICAgICAgICAgICAgICBleGNlcHQgRXhjZXB0aW9uOgorICAgICAgICAgICAg
ICAgICAgICBpZiBpbmZsaWdodFsxXToKKyAgICAgICAgICAgICAgICAgICAgICAgIGxvZy5jcml0
aWNhbCgnU29tZSB3b3JrZXJzIGZhaWxlZCB0byBncmFjZWZ1bGx5IHNodXQgZG93biwgYnV0IGlu
LWZsaWdodCBleGNlcHRpb24gdGFraW5nIHByZWNlZGVuY2UnKQorICAgICAgICAgICAgICAgICAg
ICAgICAgcmVyYWlzZSgqaW5mbGlnaHQpCisgICAgICAgICAgICAgICAgICAgIHJhaXNlIHNlbGYu
RXhjZXB0aW9uKCdTb21lIHdvcmtlcnMgZmFpbGVkIHRvIGdyYWNlZnVsbHkgc2h1dCBkb3duJykK
KworICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgZm9yIHdvcmtlciBpbiBzZWxmLndvcmtl
cnM6CisgICAgICAgICAgICAgICAgaWYgbm90IHdvcmtlci5pc19hbGl2ZSgpOgorICAgICAgICAg
ICAgICAgICAgICBjb250aW51ZQorCisgICAgICAgICAgICAgICAgaWYgc3lzLnZlcnNpb25faW5m
byA+PSAoMywgNyk6CisgICAgICAgICAgICAgICAgICAgIHdvcmtlci5raWxsKCkKKyAgICAgICAg
ICAgICAgICBlbGlmIGhhc2F0dHIoc2lnbmFsLCAnU0lHS0lMTCcpOgorICAgICAgICAgICAgICAg
ICAgICBvcy5raWxsKHdvcmtlci5waWQsIHNpZ25hbC5TSUdLSUxMKQorICAgICAgICAgICAgICAg
IGVsc2U6CisgICAgICAgICAgICAgICAgICAgIHdvcmtlci50ZXJtaW5hdGUoKQpJbmRleDogVG9v
bHMvU2NyaXB0cy9saWJyYXJpZXMvd2Via2l0Y29yZXB5L3dlYmtpdGNvcmVweS90ZXN0cy90YXNr
X3Bvb2xfdW5pdHRlc3QucHkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvU2NyaXB0cy9saWJyYXJpZXMv
d2Via2l0Y29yZXB5L3dlYmtpdGNvcmVweS90ZXN0cy90YXNrX3Bvb2xfdW5pdHRlc3QucHkJKG5v
bmV4aXN0ZW50KQorKysgVG9vbHMvU2NyaXB0cy9saWJyYXJpZXMvd2Via2l0Y29yZXB5L3dlYmtp
dGNvcmVweS90ZXN0cy90YXNrX3Bvb2xfdW5pdHRlc3QucHkJKHdvcmtpbmcgY29weSkKQEAgLTAs
MCArMSwxMzYgQEAKKyMgQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyMKKyMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisjIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworIyBhcmUgbWV0OgorIyAxLiAg
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyMgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorIyAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorIyAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorIworIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
QU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORCBBTlkKKyMgRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElF
RAorIyBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSIFBVUlBPU0UgQVJFCisjIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorIyBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUworIyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisjIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTgor
IyBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAorIyAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUworIyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKworaW1wb3J0
IGxvZ2dpbmcKK2ltcG9ydCB0aW1lCitpbXBvcnQgdW5pdHRlc3QKKworZnJvbSB3ZWJraXRjb3Jl
cHkgaW1wb3J0IE91dHB1dENhcHR1cmUsIFRhc2tQb29sLCBsb2cgYXMgbG9nZ2VyCisKKworZGVm
IHNldHVwKCk6CisgICAgbG9nZ2VyLndhcm5pbmcoJ1NldHRpbmcgdXAnKQorCisKK2RlZiB0ZWFy
ZG93bigpOgorICAgIGxvZ2dlci53YXJuaW5nKCdUZWFyaW5nIGRvd24nKQorCisKK2RlZiBhY3Rp
b24oYXJndW1lbnQpOgorICAgIHByaW50KCdhY3Rpb24oe30pJy5mb3JtYXQoYXJndW1lbnQpKQor
ICAgIHJldHVybiBhcmd1bWVudAorCisKK2RlZiBsb2cobGV2ZWwsIHZhbHVlKToKKyAgICBsb2dn
ZXIubG9nKGxldmVsLCB2YWx1ZSkKKyAgICByZXR1cm4gdmFsdWUKKworCitkZWYgd2FpdChzZWNv
bmRzKToKKyAgICBsb2dnZXIuaW5mbygnd2FpdGluZyB7fSBzZWNvbmRzLi4uJy5mb3JtYXQoc2Vj
b25kcykpCisgICAgdGltZS5zbGVlcChzZWNvbmRzKQorICAgIGxvZ2dlci5pbmZvKCd3YWl0ZWQg
e30gc2Vjb25kcyEnLmZvcm1hdChzZWNvbmRzKSkKKyAgICByZXR1cm4gc2Vjb25kcworCisKK2Rl
ZiBleGNlcHRpb24odmFsdWUpOgorICAgIHJhaXNlIFJ1bnRpbWVFcnJvcih2YWx1ZSkKKworCitj
bGFzcyBUYXNrUG9vbFVuaXR0ZXN0KHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICBhbHBoYWJldCA9
ICdhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5eicKKworICAgIGRlZiB0ZXN0X3NpbmdsZShzZWxm
KToKKyAgICAgICAgd2l0aCBPdXRwdXRDYXB0dXJlKGxldmVsPWxvZ2dpbmcuV0FSTklORykgYXMg
Y2FwdHVyZWQ6CisgICAgICAgICAgICB3aXRoIFRhc2tQb29sKHdvcmtlcnM9MSkgYXMgcG9vbDoK
KyAgICAgICAgICAgICAgICBwb29sLmRvKGFjdGlvbiwgJ2EnKQorICAgICAgICAgICAgICAgIHBv
b2wuZG8obG9nLCBsb2dnaW5nLldBUk5JTkcsICcxJykKKyAgICAgICAgICAgICAgICBwb29sLndh
aXQoKQorCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY2FwdHVyZWQuc3Rkb3V0LmdldHZhbHVl
KCksICdhY3Rpb24oYSlcbicpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoY2FwdHVyZWQud2Vi
a2l0Y29yZXB5LmxvZy5nZXR2YWx1ZSgpLCAnd29ya2VyLzAgMVxuJykKKworICAgIGRlZiB0ZXN0
X211bHRpcGxlKHNlbGYpOgorICAgICAgICB3aXRoIE91dHB1dENhcHR1cmUobGV2ZWw9bG9nZ2lu
Zy5JTkZPKSBhcyBjYXB0dXJlZDoKKyAgICAgICAgICAgIHdpdGggVGFza1Bvb2wod29ya2Vycz00
KSBhcyBwb29sOgorICAgICAgICAgICAgICAgIGZvciBjaGFyYWN0ZXIgaW4gc2VsZi5hbHBoYWJl
dDoKKyAgICAgICAgICAgICAgICAgICAgcG9vbC5kbyhhY3Rpb24sIGNoYXJhY3RlcikKKyAgICAg
ICAgICAgICAgICBwb29sLndhaXQoKQorCisgICAgICAgIGxpbmVzID0gY2FwdHVyZWQuc3Rkb3V0
LmdldHZhbHVlKCkuc3BsaXRsaW5lcygpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKHNvcnRl
ZChsaW5lcyksIFsnYWN0aW9uKHt9KScuZm9ybWF0KGNoYXJhY3RlcikgZm9yIGNoYXJhY3RlciBp
biBzZWxmLmFscGhhYmV0XSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKKyAgICAgICAgICAg
IHNvcnRlZChjYXB0dXJlZC53ZWJraXRjb3JlcHkubG9nLmdldHZhbHVlKCkuc3BsaXRsaW5lcygp
KSwKKyAgICAgICAgICAgIHNvcnRlZChbJ3dvcmtlci97fSBzdGFydGluZycuZm9ybWF0KG51bWJl
cikgZm9yIG51bWJlciBpbiByYW5nZSg0KV0gKyBbJ3dvcmtlci97fSBzdG9wcGluZycuZm9ybWF0
KG51bWJlcikgZm9yIG51bWJlciBpbiByYW5nZSg0KV0pLAorICAgICAgICApCisKKyAgICBkZWYg
dGVzdF9jYWxsYmFjayhzZWxmKToKKyAgICAgICAgc2VxdWVuY2UgPSBbXQorCisgICAgICAgIHdp
dGggT3V0cHV0Q2FwdHVyZSgpOgorICAgICAgICAgICAgd2l0aCBUYXNrUG9vbCh3b3JrZXJzPTQp
IGFzIHBvb2w6CisgICAgICAgICAgICAgICAgZm9yIGNoYXJhY3RlciBpbiBzZWxmLmFscGhhYmV0
OgorICAgICAgICAgICAgICAgICAgICBwb29sLmRvKGFjdGlvbiwgY2hhcmFjdGVyLCBjYWxsYmFj
az1sYW1iZGEgdmFsdWU6IHNlcXVlbmNlLmFwcGVuZCh2YWx1ZSkpCisgICAgICAgICAgICAgICAg
cG9vbC53YWl0KCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKKyAgICAgICAgICAgIHNlbGYu
YWxwaGFiZXQsCisgICAgICAgICAgICAnJy5qb2luKHNvcnRlZChzZXF1ZW5jZSkpLAorICAgICAg
ICApCisKKyAgICBkZWYgdGVzdF9leGNlcHRpb24oc2VsZik6CisgICAgICAgIHdpdGggT3V0cHV0
Q2FwdHVyZShsZXZlbD1sb2dnaW5nLklORk8pIGFzIGNhcHR1cmVkOgorICAgICAgICAgICAgd2l0
aCBzZWxmLmFzc2VydFJhaXNlcyhSdW50aW1lRXJyb3IpOgorICAgICAgICAgICAgICAgIHdpdGgg
VGFza1Bvb2wod29ya2Vycz0xKSBhcyBwb29sOgorICAgICAgICAgICAgICAgICAgICBwb29sLmRv
KGV4Y2VwdGlvbiwgJ1Rlc3RpbmcgZXhjZXB0aW9uJykKKyAgICAgICAgICAgICAgICAgICAgcG9v
bC53YWl0KCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKKyAgICAgICAgICAgIGNhcHR1cmVk
LndlYmtpdGNvcmVweS5sb2cuZ2V0dmFsdWUoKS5zcGxpdGxpbmVzKCksCisgICAgICAgICAgICBb
J3dvcmtlci8wIHN0YXJ0aW5nJywgJ3dvcmtlci8wIHN0b3BwaW5nJ10sCisgICAgICAgICkKKwor
ICAgIGRlZiB0ZXN0X3NldHVwKHNlbGYpOgorICAgICAgICB3aXRoIE91dHB1dENhcHR1cmUoKSBh
cyBjYXB0dXJlZDoKKyAgICAgICAgICAgIHdpdGggVGFza1Bvb2wod29ya2Vycz00LCBzZXR1cD1z
ZXR1cCkgYXMgcG9vbDoKKyAgICAgICAgICAgICAgICBmb3IgY2hhcmFjdGVyIGluIHNlbGYuYWxw
aGFiZXQ6CisgICAgICAgICAgICAgICAgICAgIHBvb2wuZG8oYWN0aW9uLCBjaGFyYWN0ZXIpCisg
ICAgICAgICAgICAgICAgcG9vbC53YWl0KCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKKyAg
ICAgICAgICAgIHNvcnRlZChjYXB0dXJlZC53ZWJraXRjb3JlcHkubG9nLmdldHZhbHVlKCkuc3Bs
aXRsaW5lcygpKSwKKyAgICAgICAgICAgIFsnd29ya2VyL3t9IFNldHRpbmcgdXAnLmZvcm1hdCh4
KSBmb3IgeCBpbiByYW5nZSg0KV0sCisgICAgICAgICkKKworICAgIGRlZiB0ZXN0X3RlYXJkb3du
KHNlbGYpOgorICAgICAgICB3aXRoIE91dHB1dENhcHR1cmUoKSBhcyBjYXB0dXJlZDoKKyAgICAg
ICAgICAgIHdpdGggVGFza1Bvb2wod29ya2Vycz00LCB0ZWFyZG93bj10ZWFyZG93bikgYXMgcG9v
bDoKKyAgICAgICAgICAgICAgICBmb3IgY2hhcmFjdGVyIGluIHNlbGYuYWxwaGFiZXQ6CisgICAg
ICAgICAgICAgICAgICAgIHBvb2wuZG8oYWN0aW9uLCBjaGFyYWN0ZXIpCisgICAgICAgICAgICAg
ICAgcG9vbC53YWl0KCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKKyAgICAgICAgICAgIHNv
cnRlZChjYXB0dXJlZC53ZWJraXRjb3JlcHkubG9nLmdldHZhbHVlKCkuc3BsaXRsaW5lcygpKSwK
KyAgICAgICAgICAgIFsnd29ya2VyL3t9IFRlYXJpbmcgZG93bicuZm9ybWF0KHgpIGZvciB4IGlu
IHJhbmdlKDQpXSwKKyAgICAgICAgKQorCisgICAgZGVmIHRlc3RfaW52YWxpZF9zaHV0ZG93bihz
ZWxmKToKKyAgICAgICAgd2l0aCBPdXRwdXRDYXB0dXJlKCk6CisgICAgICAgICAgICB3aXRoIHNl
bGYuYXNzZXJ0UmFpc2VzKFRhc2tQb29sLkV4Y2VwdGlvbik6CisgICAgICAgICAgICAgICAgd2l0
aCBUYXNrUG9vbCh3b3JrZXJzPTEsIHRlYXJkb3duPXRlYXJkb3duLCBncmFjZV9wZXJpb2Q9MSkg
YXMgcG9vbDoKKyAgICAgICAgICAgICAgICAgICAgcG9vbC5kbyh3YWl0LCAyKQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>418010</attachid>
            <date>2021-01-20 18:11:04 -0800</date>
            <delta_ts>2021-10-01 11:48:21 -0700</delta_ts>
            <desc>Patch for landing</desc>
            <filename>bug-220547-20210120181103.patch</filename>
            <type>text/plain</type>
            <size>22650</size>
            <attacher name="Jonathan Bedard">jbedard</attacher>
            
              <data encoding="base64">SW5kZXg6IFRvb2xzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9DaGFuZ2VMb2cJKHJl
dmlzaW9uIDI3MTY3OSkKKysrIFRvb2xzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwz
ICsxLDU0IEBACisyMDIxLTAxLTIwICBKb25hdGhhbiBCZWRhcmQgIDxqYmVkYXJkQGFwcGxlLmNv
bT4KKworICAgICAgICBbd2Via2l0Y29yZXB5XSBBZGQgVGFza1Bvb2wKKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIyMDU0NworICAgICAgICA8cmRhcjov
L3Byb2JsZW0vNzMwNDM4ODc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgRGV3ZWkgWmh1LgorCisg
ICAgICAgIFRoZSBUYXNrUG9vbCBvYmplY3QgaXMgYSBQeXRob24gMy44IGNvbXBhdGlibGUgbXVs
dGlwcm9jZXNzaW5nIHRvb2wuIE5vdGFibGUgZmVhdHVyZXMgYXJlIGZvcndhcmRpbmcgc3Rkb3V0
LAorICAgICAgICBzdGRlcnIgYW5kIGxvZ2dpbmcgdG8gdGhlIHBhcmVudCBwcm9jZXNzLCBleGNl
cHRpb24gcHJvcGFnYXRpb24gYmV0d2VlbiBwcm9jZXNzZXMsIGFuZCBncmFjZWZ1bCBjbGVhbi11
cCB3aGVuCisgICAgICAgIGV4Y2VwdGlvbnMgaW4gdGhlIHBhcmVudCBwcm9jZXNzIGFyZSBlbmNv
dW50ZXJlZAorCisgICAgICAgICogU2NyaXB0cy9saWJyYXJpZXMvd2Via2l0Y29yZXB5L3dlYmtp
dGNvcmVweS9fX2luaXRfXy5weTogQnVtcCB2ZXJzaW9uLCBhZGQgdGJsaWIuCisgICAgICAgICog
U2NyaXB0cy9saWJyYXJpZXMvd2Via2l0Y29yZXB5L3dlYmtpdGNvcmVweS90YXNrX3Bvb2wucHk6
IEFkZGVkLgorICAgICAgICAoTWVzc2FnZSk6IEJhc2UgY2xhc3MgZm9yIG1lc3NhZ2UgcGFzc2Vk
IGJldHdlZW4gcHJvY2Vzc2VzLgorICAgICAgICAoVGFzayk6IE1lc3NhZ2UgaW5jbHVkaW5nIGZ1
bmN0aW9uIGFuZCBhcmd1bWVudHMgdG8gdGhhdCBmdW5jdGlvbi4KKyAgICAgICAgKFJlc3VsdCk6
IFJldHVybiB2YWx1ZSBvZiBhIHRhc2sgcGFzc2VkIHRvIHRoZSBwYXJlbnQgcHJvY2Vzcy4KKyAg
ICAgICAgKExvZyk6IFBhc3MgbG9nIG1lc3NhZ2UgZnJvbSBjaGlsZCBwcm9jZXNzIHRvIHBhcmVu
dCBwcm9jZXNzLgorICAgICAgICAoUHJpbnQpOiBQYXNzIHN0ZG91dCBvciBzdGRlcnIgbGluZSBm
cm9tIGNoaWxkIHByb2Nlc3MgdG8gcGFyZW50IHByb2Nlc3MuCisgICAgICAgIChTdGF0ZSk6IE5v
dGlmeSBwYXJlbnQgcHJvY2VzcyB0aGF0IHRoZSBjaGlsZCBwcm9jZXNzIGhhcyBjaGFuZ2VkIHN0
YXRlLgorICAgICAgICAoQ2hpbGRFeGNlcHRpb24pOiBQYXNzIGV4Y2VwdGlvbiBhbmQgc3RhY2sg
dHJhY2UgZnJvbQorICAgICAgICAoQmlEaXJlY3Rpb25hbFF1ZXVlKTogUGFpciBmb3IgbXVsdGlw
cm9jZXNzIHF1ZXVlcyBhbGxvd2luZyBmb3IgbWVzc2FnZXMgdG8gYmUgcGFzc2VkIGJldHdlZW4g
cHJvY2Vzc2VzLgorICAgICAgICAoUHJvY2Vzcyk6IFNjb3BpbmcgY2xhc3MgbWFuYWdpbmcgY2hp
bGQtcHJvY2VzcyBsb2dpYy4KKyAgICAgICAgKFByb2Nlc3MuTG9nSGFuZGxlcik6IExvZ2dpbmcg
aGFuZGxlciB0aGF0IHBhc3NlcyBsb2cgbGluZXMgZnJvbSB0aGUgY2hpbGQgcHJvY2VzcyB0byBp
dCdzIHBhcmVudC4KKyAgICAgICAgKFByb2Nlc3MuU3RyZWFtKTogV3JpdGFibGUgc3RyZWFtIHdo
aWNoIHBhc3NlcyBjb250ZW50IGZyb20gdGhlIGNoaWxkIHByb2Nlc3MgdG8gdGhlIHN0YW5kYXJk
IG91dCBvciBlcnJvcgorICAgICAgICBvZiB0aGF0IHByb2Nlc3MncyBwYXJlbnQuCisgICAgICAg
IChQcm9jZXNzLmhhbmRsZXIpOiBTSUdURVJNIHNob3VsZCBwcmV2ZW50IGZ1dHVyZSBwcm9jZXNz
aW5nIGJ1dCBhbGxvdyBjdXJyZW50bHkgaW4tZmxpZ2h0IHRhc2tzIHRvIGNvbXBsZXRlLgorICAg
ICAgICAoUHJvY2Vzcy5tYWluKTogRW50cnktcG9pbnQgdG8gY2hpbGQgcHJvY2Vzcy4KKyAgICAg
ICAgKFRhc2tQb29sKTogTWFuYWdpbmcgYWxsb2NhdGlvbiBvZiB0YXNrcyB0byBjaGlsZCBwcm9j
ZXNzZXMgYW5kIGNsZWFuIHVwIHRob3NlIGNoaWxkIHByb2Nlc3Nlcy4KKyAgICAgICAgKFRhc2tQ
b29sLkV4Y2VwdGlvbik6IEV4Y2VwdGlvbiBvd25lZCBieSBUYXNrUG9vbCBvYmplY3QuCisgICAg
ICAgIChUYXNrUG9vbC5fX2luaXRfXyk6CisgICAgICAgIChUYXNrUG9vbC5fX2VudGVyX18pOgor
ICAgICAgICAoVGFza1Bvb2wuZG8pOiBQYXNzIHRhc2sgdG8gY2hpbGQgcHJvY2Vzc2VzLgorICAg
ICAgICAoVGFza1Bvb2wud2FpdCk6IFdhaXQgdW50aWwgYWxsIHByb2Nlc3NlcyBhcmUgY29tcGxl
dGVkLgorICAgICAgICAoVGFza1Bvb2wuX19leGl0X18pOiBUZWFyZG93biBhbGwgY2hpbGQgcHJv
Y2Vzc2VzLgorICAgICAgICAqIFNjcmlwdHMvbGlicmFyaWVzL3dlYmtpdGNvcmVweS93ZWJraXRj
b3JlcHkvdGVzdHMvdGFza19wb29sX3VuaXR0ZXN0LnB5OiBBZGRlZC4KKyAgICAgICAgKHNldHVw
KToKKyAgICAgICAgKHRlYXJkb3duKToKKyAgICAgICAgKGFjdGlvbik6CisgICAgICAgIChsb2cp
OgorICAgICAgICAod2FpdCk6CisgICAgICAgIChleGNlcHRpb24pOgorICAgICAgICAoVGFza1Bv
b2xVbml0dGVzdCk6CisgICAgICAgIChUYXNrUG9vbFVuaXR0ZXN0LnRlc3Rfc2luZ2xlKToKKyAg
ICAgICAgKFRhc2tQb29sVW5pdHRlc3QudGVzdF9tdWx0aXBsZSk6CisgICAgICAgIChUYXNrUG9v
bFVuaXR0ZXN0LnRlc3RfY2FsbGJhY2spOgorICAgICAgICAoVGFza1Bvb2xVbml0dGVzdC50ZXN0
X2V4Y2VwdGlvbik6CisgICAgICAgIChUYXNrUG9vbFVuaXR0ZXN0LnRlc3Rfc2V0dXApOgorICAg
ICAgICAoVGFza1Bvb2xVbml0dGVzdC50ZXN0X3RlYXJkb3duKToKKyAgICAgICAgKFRhc2tQb29s
VW5pdHRlc3QudGVzdF9pbnZhbGlkX3NodXRkb3duKToKKwogMjAyMS0wMS0yMCAgQWFrYXNoIEph
aW4gIDxhYWthc2hfamFpbkBhcHBsZS5jb20+CiAKICAgICAgICAgRVdTIHNob3VsZCBkaXNwbGF5
IGNvbW1pdCBpZGVudGlmaWVyIGluIGJ1aWxkcwpJbmRleDogVG9vbHMvU2NyaXB0cy9saWJyYXJp
ZXMvd2Via2l0Y29yZXB5L3NldHVwLnB5Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1NjcmlwdHMvbGli
cmFyaWVzL3dlYmtpdGNvcmVweS9zZXR1cC5weQkocmV2aXNpb24gMjcxNjc5KQorKysgVG9vbHMv
U2NyaXB0cy9saWJyYXJpZXMvd2Via2l0Y29yZXB5L3NldHVwLnB5CSh3b3JraW5nIGNvcHkpCkBA
IC0zMCw3ICszMCw3IEBAIGRlZiByZWFkbWUoKToKIAogc2V0dXAoCiAgICAgbmFtZT0nd2Via2l0
Y29yZXB5JywKLSAgICB2ZXJzaW9uPScwLjQuMjcnLAorICAgIHZlcnNpb249JzAuNS4wJywKICAg
ICBkZXNjcmlwdGlvbj0nTGlicmFyeSBjb250YWluaW5nIHZhcmlvdXMgUHl0aG9uIHN1cHBvcnQg
Y2xhc3NlcyBhbmQgZnVuY3Rpb25zLicsCiAgICAgbG9uZ19kZXNjcmlwdGlvbj1yZWFkbWUoKSwK
ICAgICBjbGFzc2lmaWVycz1bCkluZGV4OiBUb29scy9TY3JpcHRzL2xpYnJhcmllcy93ZWJraXRj
b3JlcHkvd2Via2l0Y29yZXB5L19faW5pdF9fLnB5Cj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1Njcmlw
dHMvbGlicmFyaWVzL3dlYmtpdGNvcmVweS93ZWJraXRjb3JlcHkvX19pbml0X18ucHkJKHJldmlz
aW9uIDI3MTY3OSkKKysrIFRvb2xzL1NjcmlwdHMvbGlicmFyaWVzL3dlYmtpdGNvcmVweS93ZWJr
aXRjb3JlcHkvX19pbml0X18ucHkJKHdvcmtpbmcgY29weSkKQEAgLTEsNCArMSw0IEBACi0jIENv
cHlyaWdodCAoQykgMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjIENvcHly
aWdodCAoQykgMjAyMCwgMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAjCiAj
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAogIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTM0LDggKzM0LDkgQEAgZnJvbSB3ZWJraXRjb3Jl
cHkuc3RyaW5nX3V0aWxzIGltcG9ydCBCeQogZnJvbSB3ZWJraXRjb3JlcHkudGltZW91dCBpbXBv
cnQgVGltZW91dAogZnJvbSB3ZWJraXRjb3JlcHkuc3VicHJvY2Vzc191dGlscyBpbXBvcnQgVGlt
ZW91dEV4cGlyZWQsIENvbXBsZXRlZFByb2Nlc3MsIHJ1bgogZnJvbSB3ZWJraXRjb3JlcHkub3V0
cHV0X2NhcHR1cmUgaW1wb3J0IExvZ2dlckNhcHR1cmUsIE91dHB1dENhcHR1cmUsIE91dHB1dER1
cGxpY2F0ZQorZnJvbSB3ZWJraXRjb3JlcHkudGFza19wb29sIGltcG9ydCBUYXNrUG9vbAogCi12
ZXJzaW9uID0gVmVyc2lvbigwLCA0LCAyNykKK3ZlcnNpb24gPSBWZXJzaW9uKDAsIDUsIDApCiAK
IGZyb20gd2Via2l0Y29yZXB5LmF1dG9pbnN0YWxsIGltcG9ydCBQYWNrYWdlLCBBdXRvSW5zdGFs
bAogaWYgc3lzLnZlcnNpb25faW5mbyA+ICgzLCAwKToKQEAgLTU1LDYgKzU2LDcgQEAgQXV0b0lu
c3RhbGwucmVnaXN0ZXIoUGFja2FnZSgncmVxdWVzdHMnLAogQXV0b0luc3RhbGwucmVnaXN0ZXIo
UGFja2FnZSgnc2V0dXB0b29scycsIFZlcnNpb24oNDQsIDEsICAxKSkpCiBBdXRvSW5zdGFsbC5y
ZWdpc3RlcihQYWNrYWdlKCdzb2NrcycsIFZlcnNpb24oMSwgNywgMSksIHB5cGlfbmFtZT0nUHlT
b2NrcycpKQogQXV0b0luc3RhbGwucmVnaXN0ZXIoUGFja2FnZSgnc2l4JywgVmVyc2lvbigxLCAx
NSwgMCkpKQorQXV0b0luc3RhbGwucmVnaXN0ZXIoUGFja2FnZSgndGJsaWInLCBWZXJzaW9uKDEs
IDcsIDApKSkKIEF1dG9JbnN0YWxsLnJlZ2lzdGVyKFBhY2thZ2UoJ3VybGxpYjMnLCBWZXJzaW9u
KDEsIDI1LCAxMCkpKQogQXV0b0luc3RhbGwucmVnaXN0ZXIoUGFja2FnZSgnd2hlZWwnLCBWZXJz
aW9uKDAsIDM1LCAxKSkpCiAKSW5kZXg6IFRvb2xzL1NjcmlwdHMvbGlicmFyaWVzL3dlYmtpdGNv
cmVweS93ZWJraXRjb3JlcHkvdGFza19wb29sLnB5Cj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1Njcmlw
dHMvbGlicmFyaWVzL3dlYmtpdGNvcmVweS93ZWJraXRjb3JlcHkvdGFza19wb29sLnB5CShub25l
eGlzdGVudCkKKysrIFRvb2xzL1NjcmlwdHMvbGlicmFyaWVzL3dlYmtpdGNvcmVweS93ZWJraXRj
b3JlcHkvdGFza19wb29sLnB5CSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMzY1IEBACisjIENv
cHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjCisjIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyMgYXJlIG1ldDoKKyMgMS4gIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyMgMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisjICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyMgICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyMKKyMg
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVU
T1JTIGBgQVMgSVMnJyBBTkQgQU5ZCisjIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyMgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFS
RQorIyBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyMgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOworIyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04KKyMgQU5ZIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
KyMgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKKyMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisKK2ltcG9ydCBpbworaW1wb3J0IG9zCitp
bXBvcnQgbG9nZ2luZworaW1wb3J0IG11bHRpcHJvY2Vzc2luZworaW1wb3J0IHNpZ25hbAoraW1w
b3J0IHN5cworCitmcm9tIHNpeCBpbXBvcnQgcmVyYWlzZQorZnJvbSB3ZWJraXRjb3JlcHkgaW1w
b3J0IE91dHB1dENhcHR1cmUsIFRpbWVvdXQsIGxvZworCisKK2NsYXNzIE1lc3NhZ2Uob2JqZWN0
KToKKyAgICBkZWYgX19pbml0X18oc2VsZiwgd2hvPU5vbmUpOgorICAgICAgICBzZWxmLndobyA9
IHdobyBvciBQcm9jZXNzLm5hbWUKKworICAgIGRlZiBfX2NhbGxfXyhzZWxmLCBjYWxsZXIpOgor
ICAgICAgICBOb3RJbXBsZW1lbnRlZCgpCisKKworY2xhc3MgVGFzayhNZXNzYWdlKToKKyAgICBk
ZWYgX19pbml0X18oc2VsZiwgZnVuY3Rpb24sIGlkLCAqYXJncywgKiprd2FyZ3MpOgorICAgICAg
ICBzdXBlcihUYXNrLCBzZWxmKS5fX2luaXRfXygpCisKKyAgICAgICAgc2VsZi5mdW5jdGlvbiA9
IGZ1bmN0aW9uCisgICAgICAgIHNlbGYuaWQgPSBpZAorICAgICAgICBzZWxmLmFyZ3MgPSB0dXBs
ZShhcmdzKQorICAgICAgICBzZWxmLmt3YXJncyA9IGt3YXJncworCisgICAgZGVmIF9fY2FsbF9f
KHNlbGYsIGNhbGxlcik6CisgICAgICAgIHJldHVybiBzZWxmLmZ1bmN0aW9uKCpzZWxmLmFyZ3Ms
ICoqc2VsZi5rd2FyZ3MpCisKKworY2xhc3MgUmVzdWx0KE1lc3NhZ2UpOgorICAgIGRlZiBfX2lu
aXRfXyhzZWxmLCB2YWx1ZSwgaWQpOgorICAgICAgICBzdXBlcihSZXN1bHQsIHNlbGYpLl9faW5p
dF9fKCkKKyAgICAgICAgc2VsZi52YWx1ZSA9IHZhbHVlCisgICAgICAgIHNlbGYuaWQgPSBpZAor
CisgICAgZGVmIF9fY2FsbF9fKHNlbGYsIGNhbGxlcik6CisgICAgICAgIGlmIGNhbGxlcjoKKyAg
ICAgICAgICAgIGNhbGxlci5jYWxsYmFja3MucG9wKHNlbGYuaWQsIGxhbWJkYSB2YWx1ZTogdmFs
dWUpKHNlbGYudmFsdWUpCisgICAgICAgIHJldHVybiBzZWxmLnZhbHVlCisKKworY2xhc3MgTG9n
KE1lc3NhZ2UpOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCByZWNvcmQpOgorICAgICAgICBzdXBl
cihMb2csIHNlbGYpLl9faW5pdF9fKCkKKyAgICAgICAgc2VsZi5yZWNvcmQgPSByZWNvcmQKKwor
ICAgIGRlZiBfX2NhbGxfXyhzZWxmLCBjYWxsZXIpOgorICAgICAgICBsb2dnaW5nLmdldExvZ2dl
cihzZWxmLnJlY29yZC5uYW1lKS5sb2coc2VsZi5yZWNvcmQubGV2ZWxubywgJ3t9IHt9Jy5mb3Jt
YXQoc2VsZi53aG8sIHNlbGYucmVjb3JkLmdldE1lc3NhZ2UoKSkpCisKKworY2xhc3MgUHJpbnQo
TWVzc2FnZSk6CisgICAgc3Rkb3V0ID0gMQorICAgIHN0ZGVyciA9IDIKKworICAgIGRlZiBfX2lu
aXRfXyhzZWxmLCBsaW5lcywgc3RyZWFtPXN0ZG91dCk6CisgICAgICAgIHN1cGVyKFByaW50LCBz
ZWxmKS5fX2luaXRfXygpCisgICAgICAgIHNlbGYubGluZXMgPSBsaW5lcworICAgICAgICBzZWxm
LnN0cmVhbSA9IHN0cmVhbQorCisgICAgZGVmIF9fY2FsbF9fKHNlbGYsIGNhbGxlcik6CisgICAg
ICAgIHN0cmVhbSA9IHsKKyAgICAgICAgICAgIHNlbGYuc3Rkb3V0OiBzeXMuc3Rkb3V0LAorICAg
ICAgICAgICAgc2VsZi5zdGRlcnI6IHN5cy5zdGRlcnIsCisgICAgICAgIH0uZ2V0KHNlbGYuc3Ry
ZWFtLCBzeXMuc3RkZXJyKQorICAgICAgICBmb3IgbGluZSBpbiBzZWxmLmxpbmVzOgorICAgICAg
ICAgICAgc3RyZWFtLndyaXRlKCd7fVxuJy5mb3JtYXQobGluZSkpCisKKworY2xhc3MgU3RhdGUo
TWVzc2FnZSk6CisgICAgU1RBUlRJTkcsIFNUT1BQSU5HID0gMSwgMAorICAgIFNUQVRFUyA9IFtT
VEFSVElORywgU1RPUFBJTkddCisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgc3RhdGUpOgorICAg
ICAgICBzdXBlcihTdGF0ZSwgc2VsZikuX19pbml0X18oKQorICAgICAgICBzZWxmLnN0YXRlID0g
c3RhdGUKKworICAgIGRlZiBfX2NhbGxfXyhzZWxmLCBjYWxsZXIpOgorICAgICAgICBsb2cuaW5m
bygne30ge30nLmZvcm1hdCgKKyAgICAgICAgICAgIHNlbGYud2hvLCB7CisgICAgICAgICAgICAg
ICAgU3RhdGUuU1RBUlRJTkc6ICdzdGFydGluZycsCisgICAgICAgICAgICAgICAgU3RhdGUuU1RP
UFBJTkc6ICdzdG9wcGluZycsCisgICAgICAgICAgICB9LmdldChzZWxmLnN0YXRlLCBzZWxmLnN0
YXRlKSwKKyAgICAgICAgKSkKKyAgICAgICAgaWYgY2FsbGVyOgorICAgICAgICAgICAgY2FsbGVy
Ll9zdGFydGVkICs9IHsKKyAgICAgICAgICAgICAgICBTdGF0ZS5TVEFSVElORzogMSwKKyAgICAg
ICAgICAgICAgICBTdGF0ZS5TVE9QUElORzogLTEsCisgICAgICAgICAgICB9LmdldChzZWxmLnN0
YXRlLCAwKQorICAgICAgICByZXR1cm4gc2VsZi5zdGF0ZQorCisKK2NsYXNzIENoaWxkRXhjZXB0
aW9uKE1lc3NhZ2UpOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBleGNfaW5mbz1Ob25lKToKKyAg
ICAgICAgc3VwZXIoQ2hpbGRFeGNlcHRpb24sIHNlbGYpLl9faW5pdF9fKCkKKyAgICAgICAgc2Vs
Zi5leGNfaW5mbyA9IGV4Y19pbmZvIG9yIHN5cy5leGNfaW5mbygpCisKKyAgICBkZWYgX19jYWxs
X18oc2VsZiwgY2FsbGVyKToKKyAgICAgICAgXywgZXhjZXB0aW9uLCB0cmFjZSA9IHN5cy5leGNf
aW5mbygpCisgICAgICAgIGlmIGV4Y2VwdGlvbjoKKyAgICAgICAgICAgIGxvZy5jcml0aWNhbCgi
RXhjZXB0aW9uIGluIGZsaWdodCwgJ3t9JyBpZ25vcmVkIi5mb3JtYXQoc2VsZi5leGNfaW5mb1sx
XSkpCisgICAgICAgICAgICByZXR1cm4KKworICAgICAgICByZXJhaXNlKCpzZWxmLmV4Y19pbmZv
KQorCisKK2NsYXNzIEJpRGlyZWN0aW9uYWxRdWV1ZShvYmplY3QpOgorICAgIGRlZiBfX2luaXRf
XyhzZWxmLCBvdXRnb2luZz1Ob25lLCBpbmNvbWluZz1Ob25lKToKKyAgICAgICAgc2VsZi5vdXRn
b2luZyA9IG91dGdvaW5nIG9yIG11bHRpcHJvY2Vzc2luZy5RdWV1ZSgpCisgICAgICAgIHNlbGYu
aW5jb21pbmcgPSBpbmNvbWluZyBvciBtdWx0aXByb2Nlc3NpbmcuUXVldWUoKQorCisgICAgZGVm
IHNlbmQoc2VsZiwgb2JqZWN0KToKKyAgICAgICAgcmV0dXJuIHNlbGYub3V0Z29pbmcucHV0KG9i
amVjdCkKKworICAgIGRlZiByZWNlaXZlKHNlbGYsIGJsb2NraW5nPVRydWUpOgorICAgICAgICB3
aXRoIFRpbWVvdXQuRGlzYWJsZUFsYXJtKCk6CisgICAgICAgICAgICBpZiBub3QgYmxvY2tpbmc6
CisgICAgICAgICAgICAgICAgcmV0dXJuIHNlbGYuaW5jb21pbmcuZ2V0KGJsb2NrPUZhbHNlKQor
CisgICAgICAgICAgICBkaWZmZXJlbmNlID0gVGltZW91dC5kaWZmZXJlbmNlKCkKKyAgICAgICAg
ICAgIGlmIGRpZmZlcmVuY2UgaXMgbm90IE5vbmU6CisgICAgICAgICAgICAgICAgcmV0dXJuIHNl
bGYuaW5jb21pbmcuZ2V0KHRpbWVvdXQ9ZGlmZmVyZW5jZSkKKyAgICAgICAgICAgIHJldHVybiBz
ZWxmLmluY29taW5nLmdldCgpCisKKworY2xhc3MgUHJvY2VzcyhvYmplY3QpOgorICAgIG5hbWUg
PSBOb25lCisgICAgd29ya2luZyA9IEZhbHNlCisKKyAgICBjbGFzcyBMb2dIYW5kbGVyKGxvZ2dp
bmcuSGFuZGxlcik6CisgICAgICAgIGRlZiBfX2luaXRfXyhzZWxmLCBxdWV1ZSwgKiprd2FyZ3Mp
OgorICAgICAgICAgICAgc2VsZi5fcXVldWUgPSBxdWV1ZQorICAgICAgICAgICAgc3VwZXIoUHJv
Y2Vzcy5Mb2dIYW5kbGVyLCBzZWxmKS5fX2luaXRfXygqKmt3YXJncykKKworICAgICAgICBkZWYg
ZW1pdChzZWxmLCByZWNvcmQpOgorICAgICAgICAgICAgc2VsZi5fcXVldWUuc2VuZChMb2cocmVj
b3JkKSkKKworICAgIGNsYXNzIFN0cmVhbShpby5JT0Jhc2UpOgorICAgICAgICBkZWYgX19pbml0
X18oc2VsZiwgaGFuZGxlLCBxdWV1ZSk6CisgICAgICAgICAgICBpZiBub3QgaGFuZGxlOgorICAg
ICAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoJ05vIHRhcmdldCBzdHJlYW1zIHByb3ZpZGVk
JykKKyAgICAgICAgICAgIHNlbGYuaGFuZGxlID0gaGFuZGxlCisgICAgICAgICAgICBzZWxmLmNh
Y2hlID0gTm9uZQorICAgICAgICAgICAgc2VsZi5fcXVldWUgPSBxdWV1ZQorCisgICAgICAgIGRl
ZiBmbHVzaChzZWxmKToKKyAgICAgICAgICAgIGlmIHNlbGYuY2FjaGUgaXMgbm90IE5vbmU6Cisg
ICAgICAgICAgICAgICAgc2VsZi5fcXVldWUuc2VuZChQcmludChsaW5lcz1bc2VsZi5jYWNoZV0s
IHN0cmVhbT1zZWxmLmhhbmRsZSkpCisgICAgICAgICAgICAgICAgc2VsZi5jYWNoZSA9IE5vbmUK
KworICAgICAgICBkZWYgd3JpdGVsaW5lcyhzZWxmLCBsaW5lcyk6CisgICAgICAgICAgICBmb3Ig
bGluZSBpbiBsaW5lczoKKyAgICAgICAgICAgICAgICBzZWxmLndyaXRlKGxpbmUpCisKKyAgICAg
ICAgZGVmIHdyaXRlKHNlbGYsIGRhdGEpOgorICAgICAgICAgICAgdG9fYmVfcHJpbnRlZCA9IFtd
CisgICAgICAgICAgICBmb3IgYyBpbiBkYXRhOgorICAgICAgICAgICAgICAgIGlmIGMgPT0gJ1xu
JzoKKyAgICAgICAgICAgICAgICAgICAgdG9fYmVfcHJpbnRlZC5hcHBlbmQoc2VsZi5jYWNoZSBv
ciAnJykKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5jYWNoZSA9IE5vbmUKKyAgICAgICAgICAg
ICAgICBlbGlmIGMgbm90IGluIFsnXHInLCAnXDAnXToKKyAgICAgICAgICAgICAgICAgICAgc2Vs
Zi5jYWNoZSA9IGMgaWYgc2VsZi5jYWNoZSBpcyBOb25lIGVsc2UgKHNlbGYuY2FjaGUgKyBjKQor
ICAgICAgICAgICAgaWYgdG9fYmVfcHJpbnRlZDoKKyAgICAgICAgICAgICAgICBzZWxmLl9xdWV1
ZS5zZW5kKFByaW50KGxpbmVzPXRvX2JlX3ByaW50ZWQsIHN0cmVhbT1zZWxmLmhhbmRsZSkpCisg
ICAgICAgICAgICByZXR1cm4gbGVuKGRhdGEpCisKKyAgICAgICAgQHByb3BlcnR5CisgICAgICAg
IGRlZiBjbG9zZWQoc2VsZik6CisgICAgICAgICAgICByZXR1cm4gRmFsc2UKKworICAgICAgICBk
ZWYgY2xvc2Uoc2VsZik6CisgICAgICAgICAgICBzZWxmLmZsdXNoKCkKKworICAgICAgICBkZWYg
ZmlsZW5vKHNlbGYpOgorICAgICAgICAgICAgcmV0dXJuIHNlbGYuaGFuZGxlCisKKyAgICAgICAg
ZGVmIGlzYXR0eShzZWxmKToKKyAgICAgICAgICAgIHJldHVybiBGYWxzZQorCisgICAgICAgIGRl
ZiByZWFkYWJsZShzZWxmKToKKyAgICAgICAgICAgIHJldHVybiBGYWxzZQorCisgICAgICAgIGRl
ZiByZWFkbGluZShzZWxmLCBzaXplPS0xKToKKyAgICAgICAgICAgIHJhaXNlIE5vdEltcGxlbWVu
dGVkRXJyb3IoKQorCisgICAgICAgIGRlZiByZWFkbGluZXMoc2VsZiwgaGludD0tMSk6CisgICAg
ICAgICAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yKCkKKworICAgICAgICBkZWYgc2Vlayhz
ZWxmLCBvZmZzZXQsIHdoZW5jZT1pby5TRUVLX1NFVCk6CisgICAgICAgICAgICByYWlzZSBOb3RJ
bXBsZW1lbnRlZEVycm9yKCkKKworICAgICAgICBkZWYgc2Vla2FibGUoc2VsZik6CisgICAgICAg
ICAgICByZXR1cm4gRmFsc2UKKworICAgICAgICBkZWYgdGVsbChzZWxmKToKKyAgICAgICAgICAg
IHJhaXNlIE5vdEltcGxlbWVudGVkRXJyb3IoKQorCisgICAgICAgIGRlZiB0cnVuY2F0ZShzZWxm
LCBzaXplPU5vbmUpOgorICAgICAgICAgICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcigpCisK
KyAgICAgICAgZGVmIHdyaXRhYmxlKHNlbGYpOgorICAgICAgICAgICAgcmV0dXJuIFRydWUKKwor
ICAgIEBjbGFzc21ldGhvZAorICAgIGRlZiBoYW5kbGVyKGNscywgdmFsdWUsIF8pOgorICAgICAg
ICBpZiB2YWx1ZSA9PSBzaWduYWwuU0lHVEVSTToKKyAgICAgICAgICAgIGNscy53b3JraW5nID0g
RmFsc2UKKworICAgIEBjbGFzc21ldGhvZAorICAgIGRlZiBtYWluKGNscywgbmFtZSwgc2V0dXAs
IHF1ZXVlLCB0ZWFyZG93bik6CisgICAgICAgIGZyb20gdGJsaWIgaW1wb3J0IHBpY2tsaW5nX3N1
cHBvcnQKKworICAgICAgICBjbHMubmFtZSA9IG5hbWUKKyAgICAgICAgY2xzLndvcmtpbmcgPSBU
cnVlCisKKyAgICAgICAgc2lnbmFsLnNpZ25hbChzaWduYWwuU0lHVEVSTSwgY2xzLmhhbmRsZXIp
CisKKyAgICAgICAgbG9nZ2VyID0gbG9nZ2luZy5nZXRMb2dnZXIoKQorICAgICAgICBmb3IgaGFu
ZGxlciBpbiBsb2dnZXIuaGFuZGxlcnM6CisgICAgICAgICAgICBsb2dnZXIucmVtb3ZlSGFuZGxl
cihoYW5kbGVyKQorICAgICAgICBsb2dnZXIuYWRkSGFuZGxlcihjbHMuTG9nSGFuZGxlcihxdWV1
ZSkpCisKKyAgICAgICAgcXVldWUuc2VuZChTdGF0ZShTdGF0ZS5TVEFSVElORykpCisKKyAgICAg
ICAgd2l0aCBPdXRwdXRDYXB0dXJlLlJlcGxhY2VTeXNTdHJlYW0oJ3N0ZGVycicsIGNscy5TdHJl
YW0oUHJpbnQuc3RkZXJyLCBxdWV1ZSkpLCBPdXRwdXRDYXB0dXJlLlJlcGxhY2VTeXNTdHJlYW0o
J3N0ZG91dCcsIGNscy5TdHJlYW0oUHJpbnQuc3Rkb3V0LCBxdWV1ZSkpOgorICAgICAgICAgICAg
dHJ5OgorICAgICAgICAgICAgICAgIHBpY2tsaW5nX3N1cHBvcnQuaW5zdGFsbCgpCisgICAgICAg
ICAgICAgICAgaWYgc2V0dXA6CisgICAgICAgICAgICAgICAgICAgIHNldHVwKCkKKworICAgICAg
ICAgICAgICAgIHdoaWxlIGNscy53b3JraW5nOgorICAgICAgICAgICAgICAgICAgICB0YXNrID0g
cXVldWUucmVjZWl2ZSgpCisgICAgICAgICAgICAgICAgICAgIGlmIG5vdCB0YXNrOgorICAgICAg
ICAgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgICAgICAgICAgICAgcXVldWUuc2VuZChS
ZXN1bHQodmFsdWU9dGFzayhOb25lKSwgaWQ9dGFzay5pZCkpCisKKyAgICAgICAgICAgIGV4Y2Vw
dCBCYXNlRXhjZXB0aW9uOgorICAgICAgICAgICAgICAgIHR5cCwgZXhjZXB0aW9uLCB0cmFjZWJh
Y2sgPSBzeXMuZXhjX2luZm8oKQorICAgICAgICAgICAgICAgIHF1ZXVlLnNlbmQoQ2hpbGRFeGNl
cHRpb24oZXhjX2luZm89KAorICAgICAgICAgICAgICAgICAgICB0eXAsIHR5cCgne30gKGZyb20g
e30pJy5mb3JtYXQoc3RyKGV4Y2VwdGlvbiksIG5hbWUpKSwgdHJhY2ViYWNrLAorICAgICAgICAg
ICAgICAgICkpKQorCisgICAgICAgICAgICBmaW5hbGx5OgorICAgICAgICAgICAgICAgIGlmIHRl
YXJkb3duOgorICAgICAgICAgICAgICAgICAgICB0ZWFyZG93bigpCisgICAgICAgICAgICAgICAg
c3lzLnN0ZG91dC5mbHVzaCgpCisgICAgICAgICAgICAgICAgc3lzLnN0ZGVyci5mbHVzaCgpCisg
ICAgICAgICAgICAgICAgcXVldWUuc2VuZChTdGF0ZShTdGF0ZS5TVE9QUElORykpCisKKworY2xh
c3MgVGFza1Bvb2wob2JqZWN0KToKKworICAgIGNsYXNzIEV4Y2VwdGlvbihSdW50aW1lRXJyb3Ip
OgorICAgICAgICBwYXNzCisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgd29ya2Vycz0xLCBuYW1l
PU5vbmUsIHNldHVwPU5vbmUsIHRlYXJkb3duPU5vbmUsIGdyYWNlX3BlcmlvZD01LCBibG9ja19z
aXplPTEwMDApOgorICAgICAgICAjIEVuc3VyZSB0YmxpYiBpcyBpbnN0YWxsZWQgYmVmb3JlIGNy
ZWF0aW5nIGNoaWxkIHByb2Nlc3NlcworICAgICAgICBpbXBvcnQgdGJsaWIKKworICAgICAgICBu
YW1lID0gbmFtZSBvciAnd29ya2VyJworICAgICAgICBpZiBuYW1lID09IFByb2Nlc3MubmFtZToK
KyAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoIlBhcmVudCBwcm9jZXNzIGlzIGFscmVhZHkg
bmFtZWQge30iLmZvcm1hdChuYW1lKSkKKworICAgICAgICBpZiB3b3JrZXJzIDwgMToKKyAgICAg
ICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoJ1Rhc2tQb29sIHJlcXVpcmVzIHBvc2l0aXZlIG51bWJl
ciBvZiB3b3JrZXJzJykKKworICAgICAgICBzZWxmLnF1ZXVlID0gQmlEaXJlY3Rpb25hbFF1ZXVl
KCkKKworICAgICAgICBzZWxmLndvcmtlcnMgPSBbbXVsdGlwcm9jZXNzaW5nLlByb2Nlc3MoCisg
ICAgICAgICAgICB0YXJnZXQ9UHJvY2Vzcy5tYWluLAorICAgICAgICAgICAgYXJncz0oJ3t9L3t9
Jy5mb3JtYXQobmFtZSwgY291bnQpLCBzZXR1cCwgQmlEaXJlY3Rpb25hbFF1ZXVlKAorICAgICAg
ICAgICAgICAgIG91dGdvaW5nPXNlbGYucXVldWUuaW5jb21pbmcsCisgICAgICAgICAgICAgICAg
aW5jb21pbmc9c2VsZi5xdWV1ZS5vdXRnb2luZywKKyAgICAgICAgICAgICksIHRlYXJkb3duKSwK
KyAgICAgICAgKSBmb3IgY291bnQgaW4gcmFuZ2Uod29ya2VycyldCisgICAgICAgIHNlbGYuX3N0
YXJ0ZWQgPSAwCisKKyAgICAgICAgc2VsZi5jYWxsYmFja3MgPSB7fQorICAgICAgICBzZWxmLl9p
ZF9jb3VudCA9IDAKKyAgICAgICAgc2VsZi5ncmFjZV9wZXJpb2QgPSBncmFjZV9wZXJpb2QKKyAg
ICAgICAgc2VsZi5ibG9ja19zaXplID0gYmxvY2tfc2l6ZQorCisgICAgZGVmIF9fZW50ZXJfXyhz
ZWxmKToKKyAgICAgICAgd2l0aCBUaW1lb3V0KHNlY29uZHM9MTAsIHBhdGNoPUZhbHNlLCBoYW5k
bGVyPXNlbGYuRXhjZXB0aW9uKCdGYWlsZWQgdG8gc3RhcnQgYWxsIHdvcmtlcnMnKSk6CisgICAg
ICAgICAgICBmb3Igd29ya2VyIGluIHNlbGYud29ya2VyczoKKyAgICAgICAgICAgICAgICB3b3Jr
ZXIuc3RhcnQoKQorICAgICAgICAgICAgd2hpbGUgc2VsZi5fc3RhcnRlZCA8IGxlbihzZWxmLndv
cmtlcnMpOgorICAgICAgICAgICAgICAgIHNlbGYucXVldWUucmVjZWl2ZSgpKHNlbGYpCisgICAg
ICAgIHJldHVybiBzZWxmCisKKyAgICBkZWYgZG8oc2VsZiwgZnVuY3Rpb24sICphcmdzLCAqKmt3
YXJncyk6CisgICAgICAgIGNhbGxiYWNrID0ga3dhcmdzLnBvcCgnY2FsbGJhY2snLCBOb25lKQor
ICAgICAgICBpZiBjYWxsYmFjazoKKyAgICAgICAgICAgIHNlbGYuY2FsbGJhY2tzW3NlbGYuX2lk
X2NvdW50XSA9IGNhbGxiYWNrCisgICAgICAgIHNlbGYucXVldWUuc2VuZChUYXNrKGZ1bmN0aW9u
LCBzZWxmLl9pZF9jb3VudCwgKmFyZ3MsICoqa3dhcmdzKSkKKyAgICAgICAgc2VsZi5faWRfY291
bnQgKz0gMQorCisgICAgICAgICMgRm9yIGV2ZXJ5IGJsb2NrIG9mIHRhc2tzIHBhc3NlZCB0byBv
dXIgd29ya2Vycywgd2UgbmVlZCBjb25zdW1lIG1lc3NhZ2VzIHNvIHdlIGRvbid0IGdldCBkZWFk
bG9ja2VkCisgICAgICAgIGlmIG5vdCBzZWxmLl9pZF9jb3VudCAlIHNlbGYuYmxvY2tfc2l6ZToK
KyAgICAgICAgICAgIHdoaWxlIFRydWU6CisgICAgICAgICAgICAgICAgdHJ5OgorICAgICAgICAg
ICAgICAgICAgICBzZWxmLnF1ZXVlLnJlY2VpdmUoYmxvY2tpbmc9RmFsc2UpKHNlbGYpCisgICAg
ICAgICAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbjoKKyAgICAgICAgICAgICAgICAgICAgYnJlYWsK
KworICAgIGRlZiB3YWl0KHNlbGYpOgorICAgICAgICBmb3IgXyBpbiBzZWxmLndvcmtlcnM6Cisg
ICAgICAgICAgICBzZWxmLnF1ZXVlLnNlbmQoTm9uZSkKKworICAgICAgICB3aGlsZSBzZWxmLl9z
dGFydGVkOgorICAgICAgICAgICAgc2VsZi5xdWV1ZS5yZWNlaXZlKCkoc2VsZikKKworICAgIGRl
ZiBfX2V4aXRfXyhzZWxmLCAqYXJncywgKiprd2FyZ3MpOgorICAgICAgICB0cnk6CisgICAgICAg
ICAgICBpbmZsaWdodCA9IHN5cy5leGNfaW5mbygpCisKKyAgICAgICAgICAgIGZvciB3b3JrZXIg
aW4gc2VsZi53b3JrZXJzOgorICAgICAgICAgICAgICAgIGlmIHdvcmtlci5pc19hbGl2ZSgpOgor
ICAgICAgICAgICAgICAgICAgICB3b3JrZXIudGVybWluYXRlKCkKKworICAgICAgICAgICAgd2l0
aCBUaW1lb3V0KHNlY29uZHM9c2VsZi5ncmFjZV9wZXJpb2QpOgorICAgICAgICAgICAgICAgIHRy
eToKKyAgICAgICAgICAgICAgICAgICAgd2hpbGUgc2VsZi5fc3RhcnRlZDoKKyAgICAgICAgICAg
ICAgICAgICAgICAgIHNlbGYucXVldWUucmVjZWl2ZSgpKHNlbGYpCisgICAgICAgICAgICAgICAg
ZXhjZXB0IEV4Y2VwdGlvbjoKKyAgICAgICAgICAgICAgICAgICAgaWYgaW5mbGlnaHRbMV06Cisg
ICAgICAgICAgICAgICAgICAgICAgICBsb2cuY3JpdGljYWwoJ1NvbWUgd29ya2VycyBmYWlsZWQg
dG8gZ3JhY2VmdWxseSBzaHV0IGRvd24sIGJ1dCBpbi1mbGlnaHQgZXhjZXB0aW9uIHRha2luZyBw
cmVjZWRlbmNlJykKKyAgICAgICAgICAgICAgICAgICAgICAgIHJlcmFpc2UoKmluZmxpZ2h0KQor
ICAgICAgICAgICAgICAgICAgICByYWlzZSBzZWxmLkV4Y2VwdGlvbignU29tZSB3b3JrZXJzIGZh
aWxlZCB0byBncmFjZWZ1bGx5IHNodXQgZG93bicpCisKKyAgICAgICAgZmluYWxseToKKyAgICAg
ICAgICAgIGZvciB3b3JrZXIgaW4gc2VsZi53b3JrZXJzOgorICAgICAgICAgICAgICAgIGlmIG5v
dCB3b3JrZXIuaXNfYWxpdmUoKToKKyAgICAgICAgICAgICAgICAgICAgY29udGludWUKKworICAg
ICAgICAgICAgICAgIGlmIHN5cy52ZXJzaW9uX2luZm8gPj0gKDMsIDcpOgorICAgICAgICAgICAg
ICAgICAgICB3b3JrZXIua2lsbCgpCisgICAgICAgICAgICAgICAgZWxpZiBoYXNhdHRyKHNpZ25h
bCwgJ1NJR0tJTEwnKToKKyAgICAgICAgICAgICAgICAgICAgb3Mua2lsbCh3b3JrZXIucGlkLCBz
aWduYWwuU0lHS0lMTCkKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAg
ICB3b3JrZXIudGVybWluYXRlKCkKSW5kZXg6IFRvb2xzL1NjcmlwdHMvbGlicmFyaWVzL3dlYmtp
dGNvcmVweS93ZWJraXRjb3JlcHkvdGVzdHMvdGFza19wb29sX3VuaXR0ZXN0LnB5Cj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFRvb2xzL1NjcmlwdHMvbGlicmFyaWVzL3dlYmtpdGNvcmVweS93ZWJraXRjb3JlcHkv
dGVzdHMvdGFza19wb29sX3VuaXR0ZXN0LnB5CShub25leGlzdGVudCkKKysrIFRvb2xzL1Njcmlw
dHMvbGlicmFyaWVzL3dlYmtpdGNvcmVweS93ZWJraXRjb3JlcHkvdGVzdHMvdGFza19wb29sX3Vu
aXR0ZXN0LnB5CSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTM2IEBACisjIENvcHlyaWdodCAo
QykgMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjCisjIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
IyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyMgYXJlIG1ldDoKKyMgMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyMgMi4gIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisjICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyMgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyMKKyMgVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMg
SVMnJyBBTkQgQU5ZCisjIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyMgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorIyBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkKKyMgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOworIyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04KKyMgQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyMgKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFIE9GIFRISVMKKyMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisKK2ltcG9ydCBsb2dnaW5nCitpbXBvcnQgdGltZQoraW1w
b3J0IHVuaXR0ZXN0CisKK2Zyb20gd2Via2l0Y29yZXB5IGltcG9ydCBPdXRwdXRDYXB0dXJlLCBU
YXNrUG9vbCwgbG9nIGFzIGxvZ2dlcgorCisKK2RlZiBzZXR1cCgpOgorICAgIGxvZ2dlci53YXJu
aW5nKCdTZXR0aW5nIHVwJykKKworCitkZWYgdGVhcmRvd24oKToKKyAgICBsb2dnZXIud2Fybmlu
ZygnVGVhcmluZyBkb3duJykKKworCitkZWYgYWN0aW9uKGFyZ3VtZW50KToKKyAgICBwcmludCgn
YWN0aW9uKHt9KScuZm9ybWF0KGFyZ3VtZW50KSkKKyAgICByZXR1cm4gYXJndW1lbnQKKworCitk
ZWYgbG9nKGxldmVsLCB2YWx1ZSk6CisgICAgbG9nZ2VyLmxvZyhsZXZlbCwgdmFsdWUpCisgICAg
cmV0dXJuIHZhbHVlCisKKworZGVmIHdhaXQoc2Vjb25kcyk6CisgICAgbG9nZ2VyLmluZm8oJ3dh
aXRpbmcge30gc2Vjb25kcy4uLicuZm9ybWF0KHNlY29uZHMpKQorICAgIHRpbWUuc2xlZXAoc2Vj
b25kcykKKyAgICBsb2dnZXIuaW5mbygnd2FpdGVkIHt9IHNlY29uZHMhJy5mb3JtYXQoc2Vjb25k
cykpCisgICAgcmV0dXJuIHNlY29uZHMKKworCitkZWYgZXhjZXB0aW9uKHZhbHVlKToKKyAgICBy
YWlzZSBSdW50aW1lRXJyb3IodmFsdWUpCisKKworY2xhc3MgVGFza1Bvb2xVbml0dGVzdCh1bml0
dGVzdC5UZXN0Q2FzZSk6CisgICAgYWxwaGFiZXQgPSAnYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4
eXonCisKKyAgICBkZWYgdGVzdF9zaW5nbGUoc2VsZik6CisgICAgICAgIHdpdGggT3V0cHV0Q2Fw
dHVyZShsZXZlbD1sb2dnaW5nLldBUk5JTkcpIGFzIGNhcHR1cmVkOgorICAgICAgICAgICAgd2l0
aCBUYXNrUG9vbCh3b3JrZXJzPTEpIGFzIHBvb2w6CisgICAgICAgICAgICAgICAgcG9vbC5kbyhh
Y3Rpb24sICdhJykKKyAgICAgICAgICAgICAgICBwb29sLmRvKGxvZywgbG9nZ2luZy5XQVJOSU5H
LCAnMScpCisgICAgICAgICAgICAgICAgcG9vbC53YWl0KCkKKworICAgICAgICBzZWxmLmFzc2Vy
dEVxdWFsKGNhcHR1cmVkLnN0ZG91dC5nZXR2YWx1ZSgpLCAnYWN0aW9uKGEpXG4nKQorICAgICAg
ICBzZWxmLmFzc2VydEVxdWFsKGNhcHR1cmVkLndlYmtpdGNvcmVweS5sb2cuZ2V0dmFsdWUoKSwg
J3dvcmtlci8wIDFcbicpCisKKyAgICBkZWYgdGVzdF9tdWx0aXBsZShzZWxmKToKKyAgICAgICAg
d2l0aCBPdXRwdXRDYXB0dXJlKGxldmVsPWxvZ2dpbmcuSU5GTykgYXMgY2FwdHVyZWQ6CisgICAg
ICAgICAgICB3aXRoIFRhc2tQb29sKHdvcmtlcnM9NCkgYXMgcG9vbDoKKyAgICAgICAgICAgICAg
ICBmb3IgY2hhcmFjdGVyIGluIHNlbGYuYWxwaGFiZXQ6CisgICAgICAgICAgICAgICAgICAgIHBv
b2wuZG8oYWN0aW9uLCBjaGFyYWN0ZXIpCisgICAgICAgICAgICAgICAgcG9vbC53YWl0KCkKKwor
ICAgICAgICBsaW5lcyA9IGNhcHR1cmVkLnN0ZG91dC5nZXR2YWx1ZSgpLnNwbGl0bGluZXMoKQor
ICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhzb3J0ZWQobGluZXMpLCBbJ2FjdGlvbih7fSknLmZv
cm1hdChjaGFyYWN0ZXIpIGZvciBjaGFyYWN0ZXIgaW4gc2VsZi5hbHBoYWJldF0pCisgICAgICAg
IHNlbGYuYXNzZXJ0RXF1YWwoCisgICAgICAgICAgICBzb3J0ZWQoY2FwdHVyZWQud2Via2l0Y29y
ZXB5LmxvZy5nZXR2YWx1ZSgpLnNwbGl0bGluZXMoKSksCisgICAgICAgICAgICBzb3J0ZWQoWyd3
b3JrZXIve30gc3RhcnRpbmcnLmZvcm1hdChudW1iZXIpIGZvciBudW1iZXIgaW4gcmFuZ2UoNCld
ICsgWyd3b3JrZXIve30gc3RvcHBpbmcnLmZvcm1hdChudW1iZXIpIGZvciBudW1iZXIgaW4gcmFu
Z2UoNCldKSwKKyAgICAgICAgKQorCisgICAgZGVmIHRlc3RfY2FsbGJhY2soc2VsZik6CisgICAg
ICAgIHNlcXVlbmNlID0gW10KKworICAgICAgICB3aXRoIE91dHB1dENhcHR1cmUoKToKKyAgICAg
ICAgICAgIHdpdGggVGFza1Bvb2wod29ya2Vycz00KSBhcyBwb29sOgorICAgICAgICAgICAgICAg
IGZvciBjaGFyYWN0ZXIgaW4gc2VsZi5hbHBoYWJldDoKKyAgICAgICAgICAgICAgICAgICAgcG9v
bC5kbyhhY3Rpb24sIGNoYXJhY3RlciwgY2FsbGJhY2s9bGFtYmRhIHZhbHVlOiBzZXF1ZW5jZS5h
cHBlbmQodmFsdWUpKQorICAgICAgICAgICAgICAgIHBvb2wud2FpdCgpCisgICAgICAgIHNlbGYu
YXNzZXJ0RXF1YWwoCisgICAgICAgICAgICBzZWxmLmFscGhhYmV0LAorICAgICAgICAgICAgJycu
am9pbihzb3J0ZWQoc2VxdWVuY2UpKSwKKyAgICAgICAgKQorCisgICAgZGVmIHRlc3RfZXhjZXB0
aW9uKHNlbGYpOgorICAgICAgICB3aXRoIE91dHB1dENhcHR1cmUobGV2ZWw9bG9nZ2luZy5JTkZP
KSBhcyBjYXB0dXJlZDoKKyAgICAgICAgICAgIHdpdGggc2VsZi5hc3NlcnRSYWlzZXMoUnVudGlt
ZUVycm9yKToKKyAgICAgICAgICAgICAgICB3aXRoIFRhc2tQb29sKHdvcmtlcnM9MSkgYXMgcG9v
bDoKKyAgICAgICAgICAgICAgICAgICAgcG9vbC5kbyhleGNlcHRpb24sICdUZXN0aW5nIGV4Y2Vw
dGlvbicpCisgICAgICAgICAgICAgICAgICAgIHBvb2wud2FpdCgpCisgICAgICAgIHNlbGYuYXNz
ZXJ0RXF1YWwoCisgICAgICAgICAgICBjYXB0dXJlZC53ZWJraXRjb3JlcHkubG9nLmdldHZhbHVl
KCkuc3BsaXRsaW5lcygpLAorICAgICAgICAgICAgWyd3b3JrZXIvMCBzdGFydGluZycsICd3b3Jr
ZXIvMCBzdG9wcGluZyddLAorICAgICAgICApCisKKyAgICBkZWYgdGVzdF9zZXR1cChzZWxmKToK
KyAgICAgICAgd2l0aCBPdXRwdXRDYXB0dXJlKCkgYXMgY2FwdHVyZWQ6CisgICAgICAgICAgICB3
aXRoIFRhc2tQb29sKHdvcmtlcnM9NCwgc2V0dXA9c2V0dXApIGFzIHBvb2w6CisgICAgICAgICAg
ICAgICAgZm9yIGNoYXJhY3RlciBpbiBzZWxmLmFscGhhYmV0OgorICAgICAgICAgICAgICAgICAg
ICBwb29sLmRvKGFjdGlvbiwgY2hhcmFjdGVyKQorICAgICAgICAgICAgICAgIHBvb2wud2FpdCgp
CisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCisgICAgICAgICAgICBzb3J0ZWQoY2FwdHVyZWQu
d2Via2l0Y29yZXB5LmxvZy5nZXR2YWx1ZSgpLnNwbGl0bGluZXMoKSksCisgICAgICAgICAgICBb
J3dvcmtlci97fSBTZXR0aW5nIHVwJy5mb3JtYXQoeCkgZm9yIHggaW4gcmFuZ2UoNCldLAorICAg
ICAgICApCisKKyAgICBkZWYgdGVzdF90ZWFyZG93bihzZWxmKToKKyAgICAgICAgd2l0aCBPdXRw
dXRDYXB0dXJlKCkgYXMgY2FwdHVyZWQ6CisgICAgICAgICAgICB3aXRoIFRhc2tQb29sKHdvcmtl
cnM9NCwgdGVhcmRvd249dGVhcmRvd24pIGFzIHBvb2w6CisgICAgICAgICAgICAgICAgZm9yIGNo
YXJhY3RlciBpbiBzZWxmLmFscGhhYmV0OgorICAgICAgICAgICAgICAgICAgICBwb29sLmRvKGFj
dGlvbiwgY2hhcmFjdGVyKQorICAgICAgICAgICAgICAgIHBvb2wud2FpdCgpCisgICAgICAgIHNl
bGYuYXNzZXJ0RXF1YWwoCisgICAgICAgICAgICBzb3J0ZWQoY2FwdHVyZWQud2Via2l0Y29yZXB5
LmxvZy5nZXR2YWx1ZSgpLnNwbGl0bGluZXMoKSksCisgICAgICAgICAgICBbJ3dvcmtlci97fSBU
ZWFyaW5nIGRvd24nLmZvcm1hdCh4KSBmb3IgeCBpbiByYW5nZSg0KV0sCisgICAgICAgICkKKwor
ICAgIGRlZiB0ZXN0X2ludmFsaWRfc2h1dGRvd24oc2VsZik6CisgICAgICAgIHdpdGggT3V0cHV0
Q2FwdHVyZSgpOgorICAgICAgICAgICAgd2l0aCBzZWxmLmFzc2VydFJhaXNlcyhUYXNrUG9vbC5F
eGNlcHRpb24pOgorICAgICAgICAgICAgICAgIHdpdGggVGFza1Bvb2wod29ya2Vycz0xLCB0ZWFy
ZG93bj10ZWFyZG93biwgZ3JhY2VfcGVyaW9kPTEpIGFzIHBvb2w6CisgICAgICAgICAgICAgICAg
ICAgIHBvb2wuZG8od2FpdCwgMikK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>439886</attachid>
            <date>2021-10-01 11:48:25 -0700</date>
            <delta_ts>2021-10-01 12:46:12 -0700</delta_ts>
            <desc>Patch for landing</desc>
            <filename>bug-220547-20211001114825.patch</filename>
            <type>text/plain</type>
            <size>2144</size>
            <attacher name="Jonathan Bedard">jbedard</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjgzMzgzCmRpZmYgLS1naXQgYS9Ub29scy9DaGFuZ2VMb2cg
Yi9Ub29scy9DaGFuZ2VMb2cKaW5kZXggNjFjMTNhNWFiNTcwMGVkYWE2ODU4NmE5OWYxNTVmMjhm
MDI1ODBiOC4uMWZiMzY5NzQ4OTBhM2IxNjEwNDhjNzY4MzczMzc4OTQ4YjY2NmI1MyAxMDA2NDQK
LS0tIGEvVG9vbHMvQ2hhbmdlTG9nCisrKyBiL1Rvb2xzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE0
IEBACisyMDIxLTEwLTAxICBKb25hdGhhbiBCZWRhcmQgIDxqYmVkYXJkQGFwcGxlLmNvbT4KKwor
ICAgICAgICBbd2Via2l0Y29yZXB5XSBBZGQgVGFza1Bvb2wgKEZvbGxvdy11cCBmaXgpCisgICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMjA1NDcKKyAgICAg
ICAgPHJkYXI6Ly9wcm9ibGVtLzczMDQzODg3PgorCisgICAgICAgIFVucmV2aWV3ZWQgcGlwIGlu
c3RhbGwgbW9kaWZpY2F0aW9uLgorCisgICAgICAgICogU2NyaXB0cy9saWJyYXJpZXMvd2Via2l0
Y29yZXB5L3NldHVwLnB5OiBCdW1wIHZlcnNpb24sIGFkZCB0YmxpYi4KKyAgICAgICAgKiBTY3Jp
cHRzL2xpYnJhcmllcy93ZWJraXRjb3JlcHkvd2Via2l0Y29yZXB5L19faW5pdF9fLnB5OiBCdW1w
IHZlcnNpb24sXS4KKwogMjAyMS0xMC0wMSAgQ2hyaXMgRHVtZXogIDxjZHVtZXpAYXBwbGUuY29t
PgogCiAgICAgICAgIERyb3AgbGVnYWN5IFVTRShMRUdBQ1lfQ0ZORVRXT1JLX0RPV05MT0FEUykg
Y29kZSBwYXRocwpkaWZmIC0tZ2l0IGEvVG9vbHMvU2NyaXB0cy9saWJyYXJpZXMvd2Via2l0Y29y
ZXB5L3NldHVwLnB5IGIvVG9vbHMvU2NyaXB0cy9saWJyYXJpZXMvd2Via2l0Y29yZXB5L3NldHVw
LnB5CmluZGV4IGIyMDQ2NTcwMDc4ZTdmYjM0NjEzYWFiMjQ4N2FlMmE3Yjg2ODEwNWEuLmFlYzJj
ODJiMWYxZmQxMjIyMzIwOTM1NjdhMjllYjA1MmE4NjYzYmEgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1Nj
cmlwdHMvbGlicmFyaWVzL3dlYmtpdGNvcmVweS9zZXR1cC5weQorKysgYi9Ub29scy9TY3JpcHRz
L2xpYnJhcmllcy93ZWJraXRjb3JlcHkvc2V0dXAucHkKQEAgLTMwLDcgKzMwLDcgQEAgZGVmIHJl
YWRtZSgpOgogCiBzZXR1cCgKICAgICBuYW1lPSd3ZWJraXRjb3JlcHknLAotICAgIHZlcnNpb249
JzAuMTEuMCcsCisgICAgdmVyc2lvbj0nMC4xMS4xJywKICAgICBkZXNjcmlwdGlvbj0nTGlicmFy
eSBjb250YWluaW5nIHZhcmlvdXMgUHl0aG9uIHN1cHBvcnQgY2xhc3NlcyBhbmQgZnVuY3Rpb25z
LicsCiAgICAgbG9uZ19kZXNjcmlwdGlvbj1yZWFkbWUoKSwKICAgICBjbGFzc2lmaWVycz1bCkBA
IC01Nyw2ICs1Nyw3IEBAIHNldHVwKAogICAgICAgICAnbW9jaycsCiAgICAgICAgICdyZXF1ZXN0
cycsCiAgICAgICAgICdzaXgnLAorICAgICAgICAndGJsaWInLAogICAgICAgICAnd2hpY2hjcmFm
dCcsCiAgICAgXSwKICAgICBpbmNsdWRlX3BhY2thZ2VfZGF0YT1UcnVlLApkaWZmIC0tZ2l0IGEv
VG9vbHMvU2NyaXB0cy9saWJyYXJpZXMvd2Via2l0Y29yZXB5L3dlYmtpdGNvcmVweS9fX2luaXRf
Xy5weSBiL1Rvb2xzL1NjcmlwdHMvbGlicmFyaWVzL3dlYmtpdGNvcmVweS93ZWJraXRjb3JlcHkv
X19pbml0X18ucHkKaW5kZXggMGI1NjRjODBjZWUwYTA3YWM2NjAwNWUwMzMwOTU5ZTNlMjA1ZjZj
NC4uZWEzNTM5OWNkNjg4Mzg0MWIxZDMyMDI4NmRjODJmYzIzZDhkZmY2OSAxMDA2NDQKLS0tIGEv
VG9vbHMvU2NyaXB0cy9saWJyYXJpZXMvd2Via2l0Y29yZXB5L3dlYmtpdGNvcmVweS9fX2luaXRf
Xy5weQorKysgYi9Ub29scy9TY3JpcHRzL2xpYnJhcmllcy93ZWJraXRjb3JlcHkvd2Via2l0Y29y
ZXB5L19faW5pdF9fLnB5CkBAIC00Myw3ICs0Myw3IEBAIGZyb20gd2Via2l0Y29yZXB5LmNhbGxf
YnlfbmVlZCBpbXBvcnQgQ2FsbEJ5TmVlZAogZnJvbSB3ZWJraXRjb3JlcHkuZWRpdG9yIGltcG9y
dCBFZGl0b3IKIGZyb20gd2Via2l0Y29yZXB5LmZpbGVfbG9jayBpbXBvcnQgRmlsZUxvY2sKIAot
dmVyc2lvbiA9IFZlcnNpb24oMCwgMTEsIDApCit2ZXJzaW9uID0gVmVyc2lvbigwLCAxMSwgMSkK
IAogZnJvbSB3ZWJraXRjb3JlcHkuYXV0b2luc3RhbGwgaW1wb3J0IFBhY2thZ2UsIEF1dG9JbnN0
YWxsCiBpZiBzeXMudmVyc2lvbl9pbmZvID4gKDMsIDApOgo=
</data>

          </attachment>
      

    </bug>

</bugzilla>