<?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>219602</bug_id>
          
          <creation_ts>2020-12-07 09:21:15 -0800</creation_ts>
          <short_desc>[webkitscmpy] Support remote GitHub repository</short_desc>
          <delta_ts>2020-12-15 15:35:06 -0800</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=219790</see_also>
    
    <see_also>https://bugs.webkit.org/show_bug.cgi?id=219803</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>dewei_zhu</cc>
    
    <cc>jbedard</cc>
    
    <cc>slewis</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1712474</commentid>
    <comment_count>0</comment_count>
    <who name="Jonathan Bedard">jbedard</who>
    <bug_when>2020-12-07 09:21:15 -0800</bug_when>
    <thetext>Much like we have a remote Subversion repository, we also need a remote GitHub repository so that commit information can be retrieved without the presence of a checkout.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1712475</commentid>
    <comment_count>1</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2020-12-07 09:21:31 -0800</bug_when>
    <thetext>&lt;rdar://problem/72050026&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1712478</commentid>
    <comment_count>2</comment_count>
      <attachid>415559</attachid>
    <who name="Jonathan Bedard">jbedard</who>
    <bug_when>2020-12-07 09:29:29 -0800</bug_when>
    <thetext>Created attachment 415559
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1712648</commentid>
    <comment_count>3</comment_count>
      <attachid>415597</attachid>
    <who name="Jonathan Bedard">jbedard</who>
    <bug_when>2020-12-07 15:58:59 -0800</bug_when>
    <thetext>Created attachment 415597
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1713336</commentid>
    <comment_count>4</comment_count>
      <attachid>415597</attachid>
    <who name="Stephanie Lewis">slewis</who>
    <bug_when>2020-12-09 15:33:17 -0800</bug_when>
    <thetext>Comment on attachment 415597
Patch

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

&gt; Tools/Scripts/libraries/webkitscmpy/webkitscmpy/scm_base.py:40
&gt; +    GIT_SVN_REVISION = re.compile(r&apos;git-svn-id: \S+:\/\/.+@(?P&lt;revision&gt;\d+) .+-.+-.+-.+&apos;)

nit: I&apos;d have added regex or pattern to these names - it&apos;s not the revision is the pattern to match against to find the revision

&gt; Tools/Scripts/libraries/webkitscmpy/webkitscmpy/mocks/remote/git_hub.py:43
&gt; +        self.api_remote = &apos;api.{}/repos/{}&apos;.format(

nit: with the multiple values and the splitting/splciing I&apos;d use named variables for the {}

&gt; Tools/Scripts/libraries/webkitscmpy/webkitscmpy/mocks/remote/git_hub.py:50
&gt; +        super(GitHub, self).__init__(self.remote.split(&apos;/&apos;)[0], self.api_remote.split(&apos;/&apos;)[0])

nit: you&apos;re doing this splicing multiple times, maybe use a local variable, should also make the code more clear about what part you&apos;re passing around?

&gt; Tools/Scripts/libraries/webkitscmpy/webkitscmpy/mocks/remote/git_hub.py:54
&gt; +        self.commits = {

it&apos;s weird to me that the commits and branches are hard coded in the git mock object.  I think it also places limits on what can be tested.  I think it would make more sense to store that kind of information in a config file and load it into the git mock.  Especially since this data is nowhere near the tests themselves.  I feel like the unit tests should be a bit more self-contained for clarity

&gt; Tools/Scripts/libraries/webkitscmpy/webkitscmpy/mocks/remote/git_hub.py:152
&gt; +        if not url.startswith(&apos;http://&apos;) and not url.startswith(&apos;https://&apos;):

same as with branches and commits, hardcoding the responses rather than taking in a list of dictionary urls and responses seems like it will limit what we can test

&gt; Tools/Scripts/libraries/webkitscmpy/webkitscmpy/remote/git_hub.py:69
&gt; +        url = &apos;{}/repos/{}/{}{}&apos;.format(self.api_url, self.owner, self.name, &apos;/{}&apos;.format(path) if path else &apos;&apos;)

nit: with so many substitutions nice to use named options

&gt; Tools/Scripts/libraries/webkitscmpy/webkitscmpy/remote/git_hub.py:221
&gt; +            # A commit not on any branches cannot have an identifier

are you including main in that comment?  From what I can tell you&apos;re setting identifiers on the main branch to None so you can recompute? If that&apos;s true this comment doesn&apos;t make much sense

&gt; Tools/Scripts/libraries/webkitscmpy/webkitscmpy/test/git_unittest.py:254
&gt; +        self.assertEqual(remote.GitHub.is_webserver(&apos;https://svn.webkit.org/repository/webkit&apos;), False)

nit: test cases should probably not refer to real things</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1713937</commentid>
    <comment_count>5</comment_count>
      <attachid>415597</attachid>
    <who name="Jonathan Bedard">jbedard</who>
    <bug_when>2020-12-11 10:07:49 -0800</bug_when>
    <thetext>Comment on attachment 415597
Patch

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

&gt;&gt; Tools/Scripts/libraries/webkitscmpy/webkitscmpy/mocks/remote/git_hub.py:152
&gt;&gt; +        if not url.startswith(&apos;http://&apos;) and not url.startswith(&apos;https://&apos;):
&gt; 
&gt; same as with branches and commits, hardcoding the responses rather than taking in a list of dictionary urls and responses seems like it will limit what we can test

This part isn&apos;t really hard-coded, it&apos;s derived from the commits. We&apos;re already using the more general &quot;define the responses your mocking&quot; API, this is just a stubbed implementation of GitHub&apos;s API. It&apos;s a bit more advanced than hardcoding a set of responses, but not by much. Most of these endpoints are basically &quot;find the commit matching the provided ref, dump it out as json/html&quot;

&gt;&gt; Tools/Scripts/libraries/webkitscmpy/webkitscmpy/remote/git_hub.py:221
&gt;&gt; +            # A commit not on any branches cannot have an identifier
&gt; 
&gt; are you including main in that comment?  From what I can tell you&apos;re setting identifiers on the main branch to None so you can recompute? If that&apos;s true this comment doesn&apos;t make much sense

Oops! The comment is correct, the code is incorrect. Line 233 should be `elif branch:`</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1713943</commentid>
    <comment_count>6</comment_count>
      <attachid>416006</attachid>
    <who name="Jonathan Bedard">jbedard</who>
    <bug_when>2020-12-11 10:19:56 -0800</bug_when>
    <thetext>Created attachment 416006
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1714539</commentid>
    <comment_count>7</comment_count>
      <attachid>416181</attachid>
    <who name="Jonathan Bedard">jbedard</who>
    <bug_when>2020-12-14 12:10:56 -0800</bug_when>
    <thetext>Created attachment 416181
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1714911</commentid>
    <comment_count>8</comment_count>
      <attachid>416181</attachid>
    <who name="Stephanie Lewis">slewis</who>
    <bug_when>2020-12-15 13:45:06 -0800</bug_when>
    <thetext>Comment on attachment 416181
Patch

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

&gt; Tools/Scripts/libraries/webkitscmpy/webkitscmpy/remote/git_hub.py:84
&gt; +                return result

you didn&apos;t set the result to the error?  Did you want to return the good data and throw away the error?  I tend to regret throwing away requests errors

&gt; Tools/Scripts/libraries/webkitscmpy/webkitscmpy/remote/git_hub.py:88
&gt; +    def _count(self, ref=None):

name should reflect that its returning the count and the hash.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1714913</commentid>
    <comment_count>9</comment_count>
    <who name="Stephanie Lewis">slewis</who>
    <bug_when>2020-12-15 13:45:37 -0800</bug_when>
    <thetext>Talked over the rest of the patch with Jonathan</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1714939</commentid>
    <comment_count>10</comment_count>
      <attachid>416297</attachid>
    <who name="Jonathan Bedard">jbedard</who>
    <bug_when>2020-12-15 15:01:24 -0800</bug_when>
    <thetext>Created attachment 416297
Patch for landing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1714950</commentid>
    <comment_count>11</comment_count>
    <who name="EWS">ews-feeder</who>
    <bug_when>2020-12-15 15:35:05 -0800</bug_when>
    <thetext>Committed r270871: &lt;https://trac.webkit.org/changeset/270871&gt;

All reviewed patches have been landed. Closing bug and clearing flags on attachment 416297.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>415559</attachid>
            <date>2020-12-07 09:29:29 -0800</date>
            <delta_ts>2020-12-07 15:58:57 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-219602-20201207112928.patch</filename>
            <type>text/plain</type>
            <size>38811</size>
            <attacher name="Jonathan Bedard">jbedard</attacher>
            
              <data encoding="base64">SW5kZXg6IFRvb2xzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9DaGFuZ2VMb2cJKHJl
dmlzaW9uIDI3MDUwNykKKysrIFRvb2xzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwz
ICsxLDU2IEBACisyMDIwLTEyLTA3ICBKb25hdGhhbiBCZWRhcmQgIDxqYmVkYXJkQGFwcGxlLmNv
bT4KKworICAgICAgICBbd2Via2l0c2NtcHldIFN1cHBvcnQgcmVtb3RlIEdpdEh1YiByZXBvc2l0
b3J5CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMTk2
MDIKKyAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzcyMDUwMDI2PgorCisgICAgICAgIFJldmlld2Vk
IGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFNlcnZpY2VzIG9mdGVuIG5lZWQgdG8gaW50
ZXJhY3Qgd2l0aCB0aGUgV2ViS2l0IHJlcG9zaXRvcnkgd2l0aG91dCBhY3R1YWxseSBkb3dubG9h
ZGluZyB0aGUKKyAgICAgICAgcmVwb3NpdG9yeS4gSW4gcGFydGljdWxhciwgaXQgaXMgdXNlZnVs
IHRvIGJlIGFibGUgdG8gcmV0cmlldmUgY29tbWl0cyBhbmQgdGhlaXIgaWRlbnRpZmllcnMuCisK
KyAgICAgICAgKiBTY3JpcHRzL2xpYnJhcmllcy93ZWJraXRzY21weS93ZWJraXRzY21weS9fX2lu
aXRfXy5weTogQnVtcCB2ZXJzaW9uLgorICAgICAgICAqIFNjcmlwdHMvbGlicmFyaWVzL3dlYmtp
dHNjbXB5L3dlYmtpdHNjbXB5L2xvY2FsL2dpdC5weToKKyAgICAgICAgKEdpdCk6IE1vdmUgR0lU
X1NWTl9SRVZJU0lPTiByZWdleCB0byBiYXNlIGNsYXNzLgorICAgICAgICAqIFNjcmlwdHMvbGli
cmFyaWVzL3dlYmtpdHNjbXB5L3dlYmtpdHNjbXB5L21vY2tzL3JlbW90ZS9fX2luaXRfXy5weTog
QWRkIEdpdEh1YiBjbGFzcy4KKyAgICAgICAgKiBTY3JpcHRzL2xpYnJhcmllcy93ZWJraXRzY21w
eS93ZWJraXRzY21weS9tb2Nrcy9yZW1vdGUvZ2l0X2h1Yi5weTogQWRkZWQuCisgICAgICAgIChH
aXRIdWIpOiBNb2NrIHJlcXVlc3Qgcm91dGVyIGZvciBhIGxpbWl0ZWQgc3Vic2V0IG9mIEdpdEh1
YidzIEFQSS4KKyAgICAgICAgKEdpdEh1Yi5fX2luaXRfXyk6CisgICAgICAgIChHaXRIdWIuY29t
bWl0KTogUmV0dXJuIGEgY29tbWl0IG9iamVjdCBnaXZlbiBhIHJlZmVyZW5jZS4KKyAgICAgICAg
KEdpdEh1Yi5yZXF1ZXN0KTogUmV0dXJuIGEgcmVzcG9uc2Ugb2JqZWN0IGZvciB0aGUgc3BlY2lm
aWVkIHJlcXVlc3QuCisgICAgICAgICogU2NyaXB0cy9saWJyYXJpZXMvd2Via2l0c2NtcHkvd2Vi
a2l0c2NtcHkvcmVtb3RlL19faW5pdF9fLnB5OiBBZGQgR2l0SHViIGNsYXNzLgorICAgICAgICAq
IFNjcmlwdHMvbGlicmFyaWVzL3dlYmtpdHNjbXB5L3dlYmtpdHNjbXB5L3JlbW90ZS9naXRfaHVi
LnB5OiBBZGRlZC4KKyAgICAgICAgKEdpdEh1Yik6IFJlcG9zaXRvcnkgb2JqZWN0IHJlcHJlc2Vu
dGluZyBhIEdpdEh1YiByZW1vdGUuCisgICAgICAgIChHaXRIdWIuaXNfd2Vic2VydmVyKTogVHJ1
ZSBpZiB0aGUgcHJvdmlkZWQgVVJMIGlzIGEgR2l0SHViIHdlYnNlcnZlci4KKyAgICAgICAgKEdp
dEh1Yi5fX2luaXRfXyk6IFZlcmlmeSB0aGUgcHJvdmlkZWQgVVJMIGFuZCBzcGxpdCBpdCBpbnRv
IGl0J3MgY29tcG9zaXRlIHBhcnRzLgorICAgICAgICAoR2l0SHViLmlzX2dpdCk6IFJldHVybiBU
cnVlLgorICAgICAgICAoR2l0SHViLnJlcXVlc3QpOiBNYWtlIGFuIEFQSSByZXF1ZXN0LCBjb21i
aW5pbmcgcGFnaW5hdGlvbiBpbnRvIGEgc2luZ2xlIHJlcXVlc3QuCisgICAgICAgIChHaXRIdWIu
X2NvdW50KTogU2NyYXBlIHRoZSBHaXRIdWIgVUkgdG8gZmluZCB0aGUgbnVtYmVyIG9mIHBhcmVu
dCBjb21taXRzIGZvciBhIHNwZWNpZmllZAorICAgICAgICBicmFuY2ggb3IgY29tbWl0LgorICAg
ICAgICAoR2l0SHViLl9kaWZmZXJlbmNlKTogQ29tcHV0ZSB0aGUgbnVtYmVyIG9mIGNvbW1pdHMg
YSBzcGVjaWZpZWQgcmVmZXJlbmNlIGlzIGFoZWFkIG9mIGFub3RoZXIuCisgICAgICAgIChHaXRI
dWIuX2JyYW5jaGVzX2Zvcik6IFNjcmFwZSB0aGUgR2l0SHViIFVJIHRvIGRldGVybWluZSB3aGF0
IGJyYW5jaGVzIGEgY29tbWl0IGlzIG9uLgorICAgICAgICAoR2l0SHViLmRlZmF1bHRfYnJhbmNo
KTogUXVlcnkgR2l0SHViIHRvIGRldGVybWluZSB0aGUgZGVmYXVsdCBicmFuY2ggZm9yIGEgc3Bl
Y2lmaWVkIGNvbW1pdC4KKyAgICAgICAgKEdpdEh1Yi5icmFuY2hlcyk6IFJldHVybiBhbGwgYnJh
bmNoZXMgZm9yIGEgcmVwb3NpdG9yeS4KKyAgICAgICAgKEdpdEh1Yi50YWdzKTogUmV0dXJuIGFs
bCB0YWdzIGZvciBhIHJlcG9zaXRvcnkuCisgICAgICAgIChHaXRIdWIuY29tbWl0KTogUmV0dXJu
IGEgY29tbWl0IG9iamVjdCBnaXZlbiBhIHJldmlzaW9uLCBicmFuY2gsIGlkZW50aWZpZXIgb3Ig
dGFnLgorICAgICAgICAoR2l0SHViLmZpbmQpOiBVc2UgZ2l0IHRvIG1hdGNoIGJyYW5jaGVzIGFu
ZCB0YWdzIHRvIGEgaGFzaCBpbnN0ZWFkIG9mIHRyeWluZyB0byBkbyBpdCBvdXJzZWx2ZXMuCisg
ICAgICAgICogU2NyaXB0cy9saWJyYXJpZXMvd2Via2l0c2NtcHkvd2Via2l0c2NtcHkvcmVtb3Rl
L3NjbS5weToKKyAgICAgICAgKFNjbS5mcm9tX3VybCk6IEFkZCBHaXRIdWIgdG8gdGhlIHNldCBv
ZiBjYW5kaWRhdGUgcmVtb3RlIHJlcG9zaXRvcmllcy4KKyAgICAgICAgKiBTY3JpcHRzL2xpYnJh
cmllcy93ZWJraXRzY21weS93ZWJraXRzY21weS9zY21fYmFzZS5weToKKyAgICAgICAgKFNjbUJh
c2UpOiBNb3ZlIEdJVF9TVk5fUkVWSVNJT04gcmVnZXggdG8gYmFzZSBjbGFzcy4KKyAgICAgICAg
KiBTY3JpcHRzL2xpYnJhcmllcy93ZWJraXRzY21weS93ZWJraXRzY21weS90ZXN0L2dpdF91bml0
dGVzdC5weToKKyAgICAgICAgKFRlc3RHaXRIdWIpOgorICAgICAgICAoVGVzdEdpdEh1Yi50ZXN0
X2RldGVjdGlvbik6CisgICAgICAgIChUZXN0R2l0SHViLnRlc3RfYnJhbmNoZXMpOgorICAgICAg
ICAoVGVzdEdpdEh1Yi50ZXN0X3RhZ3MpOgorICAgICAgICAoVGVzdEdpdEh1Yi50ZXN0X3NjbV90
eXBlKToKKyAgICAgICAgKFRlc3RHaXRIdWIudGVzdF9jb21taXRfcmV2aXNpb24pOgorICAgICAg
ICAoVGVzdEdpdEh1Yi50ZXN0X2NvbW1pdF9mcm9tX2JyYW5jaCk6CisgICAgICAgIChUZXN0R2l0
SHViLnRlc3RfaWRlbnRpZmllcik6CisgICAgICAgIChUZXN0R2l0SHViLnRlc3Rfbm9uX2Nhbm5v
bmljYWxfaWRlbnRpZmllcnMpOgorICAgICAgICAoVGVzdEdpdEh1Yi50ZXN0X3RhZyk6CisgICAg
ICAgIChUZXN0R2l0SHViLnRlc3Rfbm9fbG9nKToKKwogMjAyMC0xMi0wNyAgWW91ZW5uIEZhYmxl
dCAgPHlvdWVubkBhcHBsZS5jb20+CiAKICAgICAgICAgQWRkIGEgU0ZyYW1lIEgyNjQgZXhwZXJp
bWVudGFsIGNvbXBhdGliaWxpdHkgbW9kZQpJbmRleDogVG9vbHMvU2NyaXB0cy9saWJyYXJpZXMv
d2Via2l0c2NtcHkvd2Via2l0c2NtcHkvX19pbml0X18ucHkKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMv
U2NyaXB0cy9saWJyYXJpZXMvd2Via2l0c2NtcHkvd2Via2l0c2NtcHkvX19pbml0X18ucHkJKHJl
dmlzaW9uIDI3MDUwNSkKKysrIFRvb2xzL1NjcmlwdHMvbGlicmFyaWVzL3dlYmtpdHNjbXB5L3dl
YmtpdHNjbXB5L19faW5pdF9fLnB5CSh3b3JraW5nIGNvcHkpCkBAIC00Niw3ICs0Niw3IEBAIGV4
Y2VwdCBJbXBvcnRFcnJvcjoKICAgICAgICAgIlBsZWFzZSBpbnN0YWxsIHdlYmtpdGNvcmVweSB3
aXRoIGBwaXAgaW5zdGFsbCB3ZWJraXRjb3JlcHkgLS1leHRyYS1pbmRleC11cmwgPHBhY2thZ2Ug
aW5kZXggVVJMPmAiCiAgICAgKQogCi12ZXJzaW9uID0gVmVyc2lvbigwLCA1LCAxKQordmVyc2lv
biA9IFZlcnNpb24oMCwgNiwgMCkKIAogQXV0b0luc3RhbGwucmVnaXN0ZXIoUGFja2FnZSgnZmFz
dGVuZXJzJywgVmVyc2lvbigwLCAxNSwgMCkpKQogQXV0b0luc3RhbGwucmVnaXN0ZXIoUGFja2Fn
ZSgnbW9ub3RvbmljJywgVmVyc2lvbigxLCA1KSkpCkluZGV4OiBUb29scy9TY3JpcHRzL2xpYnJh
cmllcy93ZWJraXRzY21weS93ZWJraXRzY21weS9zY21fYmFzZS5weQo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBU
b29scy9TY3JpcHRzL2xpYnJhcmllcy93ZWJraXRzY21weS93ZWJraXRzY21weS9zY21fYmFzZS5w
eQkocmV2aXNpb24gMjcwNTA1KQorKysgVG9vbHMvU2NyaXB0cy9saWJyYXJpZXMvd2Via2l0c2Nt
cHkvd2Via2l0c2NtcHkvc2NtX2Jhc2UucHkJKHdvcmtpbmcgY29weSkKQEAgLTM3LDYgKzM3LDcg
QEAgY2xhc3MgU2NtQmFzZShvYmplY3QpOgogICAgICMgdGhlIGZvbGxvd2luZyBpZGlvbXMgc2Vl
bSBjb21tb24gZW5vdWdoIHRvIGJlIHNoYXJlZC4KICAgICBERVZfQlJBTkNIRVMgPSByZS5jb21w
aWxlKHInLipbKGVuZykoZGV2KShidWcpXS8uKycpCiAgICAgUFJPRF9CUkFOQ0hFUyA9IHJlLmNv
bXBpbGUocidcUystW1xkK1wuXSstYnJhbmNoJykKKyAgICBHSVRfU1ZOX1JFVklTSU9OID0gcmUu
Y29tcGlsZShyJ2dpdC1zdm4taWQ6IFxTKzpcL1wvLitAKD9QPHJldmlzaW9uPlxkKykgListList
ListLisnKQogCiAgICAgZGVmIF9faW5pdF9fKHNlbGYsIGRldl9icmFuY2hlcz1Ob25lLCBwcm9k
X2JyYW5jaGVzPU5vbmUsIGNvbnRyaWJ1dG9ycz1Ob25lKToKICAgICAgICAgc2VsZi5kZXZfYnJh
bmNoZXMgPSBkZXZfYnJhbmNoZXMgb3Igc2VsZi5ERVZfQlJBTkNIRVMKSW5kZXg6IFRvb2xzL1Nj
cmlwdHMvbGlicmFyaWVzL3dlYmtpdHNjbXB5L3dlYmtpdHNjbXB5L2xvY2FsL2dpdC5weQo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBUb29scy9TY3JpcHRzL2xpYnJhcmllcy93ZWJraXRzY21weS93ZWJraXRzY21w
eS9sb2NhbC9naXQucHkJKHJldmlzaW9uIDI3MDUwNSkKKysrIFRvb2xzL1NjcmlwdHMvbGlicmFy
aWVzL3dlYmtpdHNjbXB5L3dlYmtpdHNjbXB5L2xvY2FsL2dpdC5weQkod29ya2luZyBjb3B5KQpA
QCAtMzEsNyArMzEsNiBAQCBmcm9tIHdlYmtpdHNjbXB5IGltcG9ydCBDb21taXQsIENvbnRyaWJ1
CiAKIGNsYXNzIEdpdChTY20pOgogICAgIEdJVF9DT01NSVQgPSByZS5jb21waWxlKHInY29tbWl0
ICg/UDxoYXNoPlswLTlhLWZdKyknKQotICAgIEdJVF9TVk5fUkVWSVNJT04gPSByZS5jb21waWxl
KHInZ2l0LXN2bi1pZDogXFMrOlwvXC8uK0AoP1A8cmV2aXNpb24+XGQrKSAuKy0uKy0uKy0uKycp
CiAKICAgICBAY2xhc3NtZXRob2QKICAgICBAZGVjb3JhdG9ycy5NZW1vaXplKCkKSW5kZXg6IFRv
b2xzL1NjcmlwdHMvbGlicmFyaWVzL3dlYmtpdHNjbXB5L3dlYmtpdHNjbXB5L21vY2tzL3JlbW90
ZS9fX2luaXRfXy5weQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9TY3JpcHRzL2xpYnJhcmllcy93ZWJr
aXRzY21weS93ZWJraXRzY21weS9tb2Nrcy9yZW1vdGUvX19pbml0X18ucHkJKHJldmlzaW9uIDI3
MDUwNSkKKysrIFRvb2xzL1NjcmlwdHMvbGlicmFyaWVzL3dlYmtpdHNjbXB5L3dlYmtpdHNjbXB5
L21vY2tzL3JlbW90ZS9fX2luaXRfXy5weQkod29ya2luZyBjb3B5KQpAQCAtMjAsNCArMjAsNSBA
QAogIyBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQogIyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgogCitmcm9tIHdlYmtpdHNj
bXB5Lm1vY2tzLnJlbW90ZS5naXRfaHViIGltcG9ydCBHaXRIdWIKIGZyb20gd2Via2l0c2NtcHku
bW9ja3MucmVtb3RlLnN2biBpbXBvcnQgU3ZuCkluZGV4OiBUb29scy9TY3JpcHRzL2xpYnJhcmll
cy93ZWJraXRzY21weS93ZWJraXRzY21weS9tb2Nrcy9yZW1vdGUvZ2l0X2h1Yi5weQo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBUb29scy9TY3JpcHRzL2xpYnJhcmllcy93ZWJraXRzY21weS93ZWJraXRzY21weS9t
b2Nrcy9yZW1vdGUvZ2l0X2h1Yi5weQkobm9uZXhpc3RlbnQpCisrKyBUb29scy9TY3JpcHRzL2xp
YnJhcmllcy93ZWJraXRzY21weS93ZWJraXRzY21weS9tb2Nrcy9yZW1vdGUvZ2l0X2h1Yi5weQko
d29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDI4MyBAQAorIyBDb3B5cmlnaHQgKEMpIDIwMjAgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorIworIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMgbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisjIGFyZSBtZXQ6CisjIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorIyAyLiAgUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMg
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyMgICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisjCisjIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORAor
IyBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBUSEUgSU1QTElFRAorIyBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisjIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SCisjIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwKKyMgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IKKyMgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIKKyMgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKKyMgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyMg
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KKworaW1wb3J0IGpzb24KKworZnJvbSBkYXRldGltZSBpbXBvcnQgZGF0ZXRp
bWUKK2Zyb20gd2Via2l0Y29yZXB5IGltcG9ydCBtb2NrcworZnJvbSB3ZWJraXRzY21weSBpbXBv
cnQgQ29tbWl0LCBDb250cmlidXRvciwgcmVtb3RlIGFzIHNjbXJlbW90ZQorCisKK2NsYXNzIEdp
dEh1Yihtb2Nrcy5SZXF1ZXN0cyk6CisgICAgdG9wID0gTm9uZQorCisgICAgZGVmIF9faW5pdF9f
KAorICAgICAgICBzZWxmLCByZW1vdGU9J2dpdGh1Yi5jb20vV2ViS2l0L3dlYmtpdCcsCisgICAg
ICAgIGJyYW5jaGVzPU5vbmUsIHRhZ3M9Tm9uZSwgZGVmYXVsdF9icmFuY2g9J21haW4nLAorICAg
ICAgICBnaXRfc3ZuPUZhbHNlLAorICAgICk6CisgICAgICAgIGlmIG5vdCBzY21yZW1vdGUuR2l0
SHViLmlzX3dlYnNlcnZlcignaHR0cHM6Ly97fScuZm9ybWF0KHJlbW90ZSkpOgorICAgICAgICAg
ICAgcmFpc2UgVmFsdWVFcnJvcignInt9IiBpcyBub3QgYSB2YWxpZCBHaXRIdWIgcmVtb3RlJy5m
b3JtYXQocmVtb3RlKSkKKworICAgICAgICBzZWxmLmRlZmF1bHRfYnJhbmNoID0gZGVmYXVsdF9i
cmFuY2gKKyAgICAgICAgc2VsZi5yZW1vdGUgPSByZW1vdGUKKyAgICAgICAgc2VsZi5hcGlfcmVt
b3RlID0gJ2FwaS57fS9yZXBvcy97fScuZm9ybWF0KAorICAgICAgICAgICAgc2VsZi5yZW1vdGUu
c3BsaXQoJy8nKVswXSwKKyAgICAgICAgICAgICcvJy5qb2luKHNlbGYucmVtb3RlLnNwbGl0KCcv
JylbMTpdKSwKKyAgICAgICAgKQorICAgICAgICBzZWxmLmJyYW5jaGVzID0gYnJhbmNoZXMgb3Ig
W10KKyAgICAgICAgc2VsZi50YWdzID0gdGFncyBvciB7fQorCisgICAgICAgIHN1cGVyKEdpdEh1
Yiwgc2VsZikuX19pbml0X18oc2VsZi5yZW1vdGUuc3BsaXQoJy8nKVswXSwgc2VsZi5hcGlfcmVt
b3RlLnNwbGl0KCcvJylbMF0pCisKKyAgICAgICAgIyBQcm92aWRlIGEgcmVhc29uYWJsZSBzZXQg
b2YgY29tbWl0cyB0byB0ZXN0IGFnYWluc3QKKyAgICAgICAgY29udHJpYnV0b3IgPSBDb250cmli
dXRvcihuYW1lPSdKb25hdGhhbiBCZWRhcmQnLCBlbWFpbHM9WydqYmVkYXJkQGFwcGxlLmNvbSdd
KQorICAgICAgICBzZWxmLmNvbW1pdHMgPSB7CisgICAgICAgICAgICBkZWZhdWx0X2JyYW5jaDog
WworICAgICAgICAgICAgICAgIENvbW1pdCgKKyAgICAgICAgICAgICAgICAgICAgaWRlbnRpZmll
cj0nMUB7fScuZm9ybWF0KGRlZmF1bHRfYnJhbmNoKSwKKyAgICAgICAgICAgICAgICAgICAgaGFz
aD0nOWI4MzExZjI1YTc3YmExNDkyM2Q5ZDVhNjUzMjEwM2Y1NGFiZWZjYicsCisgICAgICAgICAg
ICAgICAgICAgIHJldmlzaW9uPTEgaWYgZ2l0X3N2biBlbHNlIE5vbmUsCisgICAgICAgICAgICAg
ICAgICAgIGF1dGhvcj1jb250cmlidXRvciwKKyAgICAgICAgICAgICAgICAgICAgdGltZXN0YW1w
PTE2MDE2NjAwMDAsCisgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2U9JzFzdCBjb21taXRcbics
CisgICAgICAgICAgICAgICAgKSwgQ29tbWl0KAorICAgICAgICAgICAgICAgICAgICBpZGVudGlm
aWVyPScyQHt9Jy5mb3JtYXQoZGVmYXVsdF9icmFuY2gpLAorICAgICAgICAgICAgICAgICAgICBo
YXNoPSdmZmY4M2JiMmQ5MTcxYjRkOTE5NmU5NzdlYjA1MDhmZDU3ZTdhMDhkJywKKyAgICAgICAg
ICAgICAgICAgICAgcmV2aXNpb249MiBpZiBnaXRfc3ZuIGVsc2UgTm9uZSwKKyAgICAgICAgICAg
ICAgICAgICAgYXV0aG9yPWNvbnRyaWJ1dG9yLAorICAgICAgICAgICAgICAgICAgICB0aW1lc3Rh
bXA9MTYwMTY2MTAwMCwKKyAgICAgICAgICAgICAgICAgICAgbWVzc2FnZT0nMm5kIGNvbW1pdFxu
JywKKyAgICAgICAgICAgICAgICApLCBDb21taXQoCisgICAgICAgICAgICAgICAgICAgIGlkZW50
aWZpZXI9JzNAe30nLmZvcm1hdChkZWZhdWx0X2JyYW5jaCksCisgICAgICAgICAgICAgICAgICAg
IGhhc2g9JzFhYmUyNWI0NDNlOTg1ZjkzYjkwZDgzMGU0YTdlMzczMTMzNmFmNGQnLAorICAgICAg
ICAgICAgICAgICAgICByZXZpc2lvbj00IGlmIGdpdF9zdm4gZWxzZSBOb25lLAorICAgICAgICAg
ICAgICAgICAgICBhdXRob3I9Y29udHJpYnV0b3IsCisgICAgICAgICAgICAgICAgICAgIHRpbWVz
dGFtcD0xNjAxNjYzMDAwLAorICAgICAgICAgICAgICAgICAgICBtZXNzYWdlPSc0dGggY29tbWl0
XG4nLAorICAgICAgICAgICAgICAgICksIENvbW1pdCgKKyAgICAgICAgICAgICAgICAgICAgaWRl
bnRpZmllcj0nNEB7fScuZm9ybWF0KGRlZmF1bHRfYnJhbmNoKSwKKyAgICAgICAgICAgICAgICAg
ICAgaGFzaD0nYmFlNWQxZTkwOTk5ZDRmOTE2YThhMTU4MTBjY2ZhNDNmMzdhMmZkNicsCisgICAg
ICAgICAgICAgICAgICAgIHJldmlzaW9uPTYgaWYgZ2l0X3N2biBlbHNlIE5vbmUsCisgICAgICAg
ICAgICAgICAgICAgIGF1dGhvcj1jb250cmlidXRvciwKKyAgICAgICAgICAgICAgICAgICAgdGlt
ZXN0YW1wPTE2MDE2NjUwMDAsCisgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2U9JzZ0aCBjb21t
aXRcbicsCisgICAgICAgICAgICAgICAgKSwKKyAgICAgICAgICAgIF0sICdicmFuY2gtYSc6IFsK
KyAgICAgICAgICAgICAgICBDb21taXQoCisgICAgICAgICAgICAgICAgICAgIGlkZW50aWZpZXI9
JzIuMUBicmFuY2gtYScsCisgICAgICAgICAgICAgICAgICAgIGhhc2g9J2EzMGNlODQ5NGJmMWFj
MjgwN2E2OTg0NGY3MjZiZTRhOTg0M2NhNTUnLAorICAgICAgICAgICAgICAgICAgICByZXZpc2lv
bj0zIGlmIGdpdF9zdm4gZWxzZSBOb25lLAorICAgICAgICAgICAgICAgICAgICBhdXRob3I9Y29u
dHJpYnV0b3IsCisgICAgICAgICAgICAgICAgICAgIHRpbWVzdGFtcD0xNjAxNjYyMDAwLAorICAg
ICAgICAgICAgICAgICAgICBtZXNzYWdlPSczcmQgY29tbWl0XG4nLAorICAgICAgICAgICAgICAg
ICksIENvbW1pdCgKKyAgICAgICAgICAgICAgICAgICAgaWRlbnRpZmllcj0nMi4yQGJyYW5jaC1h
JywKKyAgICAgICAgICAgICAgICAgICAgaGFzaD0nNjIxNjUyYWRkN2ZjNDE2MDk5YmQyMDYzMzY2
Y2MzOGZmNjFhZmUzNicsCisgICAgICAgICAgICAgICAgICAgIHJldmlzaW9uPTcgaWYgZ2l0X3N2
biBlbHNlIE5vbmUsCisgICAgICAgICAgICAgICAgICAgIGF1dGhvcj1jb250cmlidXRvciwKKyAg
ICAgICAgICAgICAgICAgICAgdGltZXN0YW1wPTE2MDE2NjYwMDAsCisgICAgICAgICAgICAgICAg
ICAgIG1lc3NhZ2U9Jzd0aCBjb21taXRcbicsCisgICAgICAgICAgICAgICAgKSwKKyAgICAgICAg
ICAgIF0sCisgICAgICAgIH0KKyAgICAgICAgc2VsZi5jb21taXRzWydicmFuY2gtYiddID0gWwor
ICAgICAgICAgICAgc2VsZi5jb21taXRzWydicmFuY2gtYSddWzBdLCBDb21taXQoCisgICAgICAg
ICAgICAgICAgaWRlbnRpZmllcj0nMi4yQGJyYW5jaC1iJywKKyAgICAgICAgICAgICAgICBoYXNo
PSczY2QzMmUzNTI0MTA1NjViYjU0MzgyMWZiZjg1NmE2ZDNjYWFkMWM0JywKKyAgICAgICAgICAg
ICAgICByZXZpc2lvbj01IGlmIGdpdF9zdm4gZWxzZSBOb25lLAorICAgICAgICAgICAgICAgIGF1
dGhvcj1jb250cmlidXRvciwKKyAgICAgICAgICAgICAgICB0aW1lc3RhbXA9MTYwMTY2NDAwMCwK
KyAgICAgICAgICAgICAgICBtZXNzYWdlPSc1dGggY29tbWl0XG4nLAorICAgICAgICAgICAgKSwg
Q29tbWl0KAorICAgICAgICAgICAgICAgIGlkZW50aWZpZXI9JzIuM0BicmFuY2gtYicsCisgICAg
ICAgICAgICAgICAgaGFzaD0nNzkwNzI1YTZkNzllMjhkYjJlY2RkZTI5NTQ4ZDIyNjJjMGJkMDU5
ZCcsCisgICAgICAgICAgICAgICAgcmV2aXNpb249OCBpZiBnaXRfc3ZuIGVsc2UgTm9uZSwKKyAg
ICAgICAgICAgICAgICBhdXRob3I9Y29udHJpYnV0b3IsCisgICAgICAgICAgICAgICAgdGltZXN0
YW1wPTE2MDE2NjcwMDAsCisgICAgICAgICAgICAgICAgbWVzc2FnZT0nOHRoIGNvbW1pdFxuJywK
KyAgICAgICAgICAgICksCisgICAgICAgIF0KKyAgICAgICAgc2VsZi5oZWFkID0gc2VsZi5jb21t
aXRzW3NlbGYuZGVmYXVsdF9icmFuY2hdWzNdCisKKyAgICAgICAgc2VsZi50YWdzWyd0YWctMSdd
ID0gc2VsZi5jb21taXRzWydicmFuY2gtYSddWy0xXQorICAgICAgICBzZWxmLnRhZ3NbJ3RhZy0y
J10gPSBzZWxmLmNvbW1pdHNbJ2JyYW5jaC1iJ11bLTFdCisKKyAgICBkZWYgY29tbWl0KHNlbGYs
IHJlZik6CisgICAgICAgIGlmIHJlZiBpbiBzZWxmLmNvbW1pdHM6CisgICAgICAgICAgICByZXR1
cm4gc2VsZi5jb21taXRzW3JlZl1bLTFdCisgICAgICAgIGlmIHJlZiBpbiBzZWxmLnRhZ3M6Cisg
ICAgICAgICAgICByZXR1cm4gc2VsZi50YWdzW3JlZl0KKworICAgICAgICBmb3IgYnJhbmNoLCBj
b21taXRzIGluIHNlbGYuY29tbWl0cy5pdGVtcygpOgorICAgICAgICAgICAgZm9yIGNvbW1pdCBp
biBjb21taXRzOgorICAgICAgICAgICAgICAgIGlmIGNvbW1pdC5oYXNoLnN0YXJ0c3dpdGgocmVm
KToKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNvbW1pdAorCisgICAgICAgIGlmICd+JyBu
b3QgaW4gcmVmOgorICAgICAgICAgICAgcmV0dXJuIE5vbmUKKyAgICAgICAgcmVmLCBkZWx0YSA9
IHJlZi5zcGxpdCgnficpCisgICAgICAgIGNvbW1pdCA9IHNlbGYuY29tbWl0KHJlZikKKyAgICAg
ICAgaWYgbm90IGNvbW1pdDoKKyAgICAgICAgICAgIHJldHVybiBOb25lCisgICAgICAgIGRlbHRh
ID0gaW50KGRlbHRhKQorCisgICAgICAgIGlmIGRlbHRhIDwgY29tbWl0LmlkZW50aWZpZXI6Cisg
ICAgICAgICAgICByZXR1cm4gc2VsZi5jb21taXRzW2NvbW1pdC5icmFuY2hdW2NvbW1pdC5pZGVu
dGlmaWVyIC0gZGVsdGEgLSAxXQorICAgICAgICBkZWx0YSAtPSBjb21taXQuaWRlbnRpZmllcgor
ICAgICAgICBpZiBkZWx0YSA8IGNvbW1pdC5icmFuY2hfcG9pbnQ6CisgICAgICAgICAgICByZXR1
cm4gc2VsZi5jb21taXRzW3NlbGYuZGVmYXVsdF9icmFuY2hdW2NvbW1pdC5icmFuY2hfcG9pbnQg
LSBkZWx0YSAtIDFdCisgICAgICAgIHJldHVybiBOb25lCisKKyAgICBkZWYgcmVxdWVzdChzZWxm
LCBtZXRob2QsIHVybCwgZGF0YT1Ob25lLCAqKmt3YXJncyk6CisgICAgICAgIGlmIG5vdCB1cmwu
c3RhcnRzd2l0aCgnaHR0cDovLycpIGFuZCBub3QgdXJsLnN0YXJ0c3dpdGgoJ2h0dHBzOi8vJyk6
CisgICAgICAgICAgICByZXR1cm4gbW9ja3MuUmVzcG9uc2UuY3JlYXRlNDA0KHVybCkKKworICAg
ICAgICBzdHJpcHBlZF91cmwgPSB1cmwuc3BsaXQoJzovLycpWy0xXQorCisgICAgICAgICMgVG9w
LWxldmVsIEFQSSByZXF1ZXN0CisgICAgICAgIGlmIHN0cmlwcGVkX3VybCA9PSBzZWxmLmFwaV9y
ZW1vdGU6CisgICAgICAgICAgICByZXR1cm4gbW9ja3MuUmVzcG9uc2UuZnJvbUpzb24oeworICAg
ICAgICAgICAgICAgICdpZCc6IDEsCisgICAgICAgICAgICAgICAgJ25hbWUnOiBzZWxmLnJlbW90
ZS5zcGxpdCgnLycpWzJdLAorICAgICAgICAgICAgICAgICd1cmwnOiB1cmwsCisgICAgICAgICAg
ICAgICAgJ2RlZmF1bHRfYnJhbmNoJzogc2VsZi5kZWZhdWx0X2JyYW5jaCwKKyAgICAgICAgICAg
ICAgICAnb3duZXInOiB7CisgICAgICAgICAgICAgICAgICAgICdsb2dpbic6IHNlbGYucmVtb3Rl
LnNwbGl0KCcvJylbMV0sCisgICAgICAgICAgICAgICAgfSwgJ29yZ2FuaXphdGlvbic6IHsKKyAg
ICAgICAgICAgICAgICAgICAgJ2xvZ2luJzogc2VsZi5yZW1vdGUuc3BsaXQoJy8nKVsxXSwKKyAg
ICAgICAgICAgICAgICB9LCAnaHRtbF91cmwnOiBzZWxmLnJlbW90ZSwKKyAgICAgICAgICAgIH0s
IHVybD11cmwpCisKKyAgICAgICAgIyBCcmFuY2hlcy9UYWdzCisgICAgICAgIGlmIHN0cmlwcGVk
X3VybCBpbiBbJ3t9L2JyYW5jaGVzJy5mb3JtYXQoc2VsZi5hcGlfcmVtb3RlKSwgJ3t9L3RhZ3Mn
LmZvcm1hdChzZWxmLmFwaV9yZW1vdGUpXToKKyAgICAgICAgICAgIHJldHVybiBtb2Nrcy5SZXNw
b25zZS5mcm9tSnNvbihbCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAn
bmFtZSc6IHJlZmVyZW5jZSwKKyAgICAgICAgICAgICAgICAgICAgJ2NvbW1pdCc6IHsKKyAgICAg
ICAgICAgICAgICAgICAgICAgICdzaGEnOiBjb21taXRbLTFdLmhhc2ggaWYgaXNpbnN0YW5jZShj
b21taXQsIGxpc3QpIGVsc2UgY29tbWl0Lmhhc2gsCisgICAgICAgICAgICAgICAgICAgICAgICAn
dXJsJzogJ2h0dHBzOi8ve30vY29tbWl0cy97fScuZm9ybWF0KHNlbGYuYXBpX3JlbW90ZSwgY29t
bWl0Wy0xXS5oYXNoIGlmIGlzaW5zdGFuY2UoY29tbWl0LCBsaXN0KSBlbHNlIGNvbW1pdC5oYXNo
KSwKKyAgICAgICAgICAgICAgICAgICAgfSwKKyAgICAgICAgICAgICAgICB9IGZvciByZWZlcmVu
Y2UsIGNvbW1pdCBpbiAoc2VsZi5jb21taXRzIGlmIHN0cmlwcGVkX3VybC5lbmRzd2l0aCgnYnJh
bmNoZXMnKSBlbHNlIHNlbGYudGFncykuaXRlbXMoKQorICAgICAgICAgICAgXSwgdXJsPXVybCkK
KworICAgICAgICAjIEV4dHJhY3Qgc2luZ2xlIGNvbW1pdAorICAgICAgICBpZiBzdHJpcHBlZF91
cmwuc3RhcnRzd2l0aCgne30vY29tbWl0cy8nLmZvcm1hdChzZWxmLmFwaV9yZW1vdGUpKToKKyAg
ICAgICAgICAgIGNvbW1pdCA9IHNlbGYuY29tbWl0KHN0cmlwcGVkX3VybC5zcGxpdCgnLycpWy0x
XSkKKyAgICAgICAgICAgIGlmIG5vdCBjb21taXQ6CisgICAgICAgICAgICAgICAgcmV0dXJuIG1v
Y2tzLlJlc3BvbnNlKAorICAgICAgICAgICAgICAgICAgICBzdGF0dXNfY29kZT00MDQsCisgICAg
ICAgICAgICAgICAgICAgIHVybD11cmwsCisgICAgICAgICAgICAgICAgICAgIHRleHQ9anNvbi5k
dW1wcyhkaWN0KG1lc3NhZ2U9J05vIGNvbW1pdCBmb3VuZCBmb3IgU0hBOiB7fScuZm9ybWF0KHN0
cmlwcGVkX3VybC5zcGxpdCgnLycpWy0xXSkpKSwKKyAgICAgICAgICAgICAgICApCisgICAgICAg
ICAgICByZXR1cm4gbW9ja3MuUmVzcG9uc2UuZnJvbUpzb24oeworICAgICAgICAgICAgICAgICdz
aGEnOiBjb21taXQuaGFzaCwKKyAgICAgICAgICAgICAgICAnY29tbWl0JzogeworICAgICAgICAg
ICAgICAgICAgICAnYXV0aG9yJzogeworICAgICAgICAgICAgICAgICAgICAgICAgJ25hbWUnOiBj
b21taXQuYXV0aG9yLm5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAnZW1haWwnOiBjb21t
aXQuYXV0aG9yLmVtYWlsLAorICAgICAgICAgICAgICAgICAgICAgICAgJ2RhdGUnOiBkYXRldGlt
ZS5mcm9tdGltZXN0YW1wKGNvbW1pdC50aW1lc3RhbXApLnN0cmZ0aW1lKCclWS0lbS0lZFQlSDol
TTolU1onKSwKKyAgICAgICAgICAgICAgICAgICAgfSwgJ2NvbW1pdHRlcic6IHsKKyAgICAgICAg
ICAgICAgICAgICAgICAgICduYW1lJzogY29tbWl0LmF1dGhvci5uYW1lLAorICAgICAgICAgICAg
ICAgICAgICAgICAgJ2VtYWlsJzogY29tbWl0LmF1dGhvci5lbWFpbCwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICdkYXRlJzogZGF0ZXRpbWUuZnJvbXRpbWVzdGFtcChjb21taXQudGltZXN0YW1w
KS5zdHJmdGltZSgnJVktJW0tJWRUJUg6JU06JVNaJyksCisgICAgICAgICAgICAgICAgICAgIH0s
ICdtZXNzYWdlJzogY29tbWl0Lm1lc3NhZ2UsCisgICAgICAgICAgICAgICAgICAgICd1cmwnOiAn
aHR0cHM6Ly97fS9naXQvY29tbWl0cy97fScuZm9ybWF0KHNlbGYuYXBpX3JlbW90ZSwgY29tbWl0
Lmhhc2gpLAorICAgICAgICAgICAgICAgIH0sICd1cmwnOiAnaHR0cHM6Ly97fS9jb21taXRzL3t9
Jy5mb3JtYXQoc2VsZi5hcGlfcmVtb3RlLCBjb21taXQuaGFzaCksCisgICAgICAgICAgICAgICAg
J2h0bWxfdXJsJzogJ2h0dHBzOi8ve30vY29tbWl0L3t9Jy5mb3JtYXQoc2VsZi5yZW1vdGUsIGNv
bW1pdC5oYXNoKSwKKyAgICAgICAgICAgIH0sIHVybD11cmwpCisKKyAgICAgICAgIyBDb21wYXJl
IHR3byBjb21taXRzCisgICAgICAgIGlmIHN0cmlwcGVkX3VybC5zdGFydHN3aXRoKCd7fS9jb21w
YXJlLycuZm9ybWF0KHNlbGYuYXBpX3JlbW90ZSkpOgorICAgICAgICAgICAgcmVmX2EsIHJlZl9i
ID0gc3RyaXBwZWRfdXJsLnNwbGl0KCcvJylbLTFdLnNwbGl0KCcuLi4nKQorICAgICAgICAgICAg
Y29tbWl0X2EgPSBzZWxmLmNvbW1pdChyZWZfYSkKKyAgICAgICAgICAgIGNvbW1pdF9iID0gc2Vs
Zi5jb21taXQocmVmX2IpCisgICAgICAgICAgICBpZiBub3QgY29tbWl0X2Egb3Igbm90IGNvbW1p
dF9iOgorICAgICAgICAgICAgICAgIHJldHVybiBtb2Nrcy5SZXNwb25zZSgKKyAgICAgICAgICAg
ICAgICAgICAgc3RhdHVzX2NvZGU9NDA0LAorICAgICAgICAgICAgICAgICAgICB1cmw9dXJsLAor
ICAgICAgICAgICAgICAgICAgICB0ZXh0PWpzb24uZHVtcHMoZGljdChtZXNzYWdlPSdOb3QgZm91
bmQnKSksCisgICAgICAgICAgICAgICAgKQorCisgICAgICAgICAgICBpZiBjb21taXRfYS5icmFu
Y2ggIT0gc2VsZi5kZWZhdWx0X2JyYW5jaCBvciBjb21taXRfYi5icmFuY2ggPT0gc2VsZi5kZWZh
dWx0X2JyYW5jaDoKKyAgICAgICAgICAgICAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yKCdU
aGlzIGlzIGEgdmFsaWQgY29tcGFyaXNvbiBjb21tYW5kLCBidXQgaGFzIG5vdCBiZWVuIGltcGxl
bWVudGVkIGluIHRoZSBtb2NrIEdpdEh1YiBBUEknKQorCisgICAgICAgICAgICByZXR1cm4gbW9j
a3MuUmVzcG9uc2UuZnJvbUpzb24oeworICAgICAgICAgICAgICAgICdzdGF0dXMnOiAnZGl2ZXJn
ZWQnLAorICAgICAgICAgICAgICAgICdhaGVhZF9ieSc6IGNvbW1pdF9iLmlkZW50aWZpZXIsCisg
ICAgICAgICAgICAgICAgJ2JlaGluZF9ieSc6IGNvbW1pdF9hLmlkZW50aWZpZXIgLSBjb21taXRf
Yi5icmFuY2hfcG9pbnQsCisgICAgICAgICAgICB9LCB1cmw9dXJsKQorCisgICAgICAgICMgTGlz
dCBicmFuY2hlcyBhIGNvbW1pdCBvY2N1cnMgb24KKyAgICAgICAgaWYgc3RyaXBwZWRfdXJsLnN0
YXJ0c3dpdGgoJ3t9L2JyYW5jaF9jb21taXRzLycuZm9ybWF0KHNlbGYucmVtb3RlKSk6CisgICAg
ICAgICAgICBjb21taXQgPSBzZWxmLmNvbW1pdChzdHJpcHBlZF91cmwuc3BsaXQoJy8nKVstMV0p
CisgICAgICAgICAgICBpZiBub3QgY29tbWl0OgorICAgICAgICAgICAgICAgIHJldHVybiBtb2Nr
cy5SZXNwb25zZS5jcmVhdGU0MDQodXJsKQorICAgICAgICAgICAgcmV0dXJuIG1vY2tzLlJlc3Bv
bnNlLmZyb21UZXh0KAorICAgICAgICAgICAgICAgICdcblxuICAgIDxzdmcgY2xhc3M9Im9jdGlj
b24gb2N0aWNvbi1naXQtYnJhbmNoIj48cGF0aD48L3BhdGg+PC9zdmc+XG4nCisgICAgICAgICAg
ICAgICAgJyAgICA8dWwgY2xhc3M9ImJyYW5jaGVzLWxpc3QiPlxuJworICAgICAgICAgICAgICAg
ICcgICAgICAgIDxsaSBjbGFzcz0iYnJhbmNoIj48YSBocmVmPSIve30iPnt9PC9hPjwvbGk+XG4n
CisgICAgICAgICAgICAgICAgJyAgICA8L3VsPlxuJy5mb3JtYXQoCisgICAgICAgICAgICAgICAg
ICAgICcvJy5qb2luKHNlbGYucmVtb3RlLnNwbGl0KCcvJylbMTpdKSwKKyAgICAgICAgICAgICAg
ICAgICAgY29tbWl0LmJyYW5jaCwKKyAgICAgICAgICAgICAgICApLCB1cmw9dXJsCisgICAgICAg
ICAgICApCisKKyAgICAgICAgIyBGaW5kIHRoZSBudW1iZXIgb2YgcGFyZW50cyBhIGNvbW1pdCBo
YXMKKyAgICAgICAgaWYgc3RyaXBwZWRfdXJsLnN0YXJ0c3dpdGgoJ3t9L3RyZWUvJy5mb3JtYXQo
c2VsZi5yZW1vdGUpKToKKyAgICAgICAgICAgIGNvbW1pdCA9IHNlbGYuY29tbWl0KHN0cmlwcGVk
X3VybC5zcGxpdCgnLycpWy0xXSkKKyAgICAgICAgICAgIGlmIG5vdCBjb21taXQ6CisgICAgICAg
ICAgICAgICAgcmV0dXJuIG1vY2tzLlJlc3BvbnNlLmNyZWF0ZTQwNCh1cmwpCisKKyAgICAgICAg
ICAgICMgVGhpcyByZXNwb25zZSBpcyBhYmJyZXZpYXRlZCBzaW5jZSBtb3N0IGlzIHVudXNlZAor
ICAgICAgICAgICAgcmV0dXJuIG1vY2tzLlJlc3BvbnNlLmZyb21UZXh0KAorICAgICAgICAgICAg
ICAgICdcblxuXG5cbjwhRE9DVFlQRSBodG1sPlxuJworICAgICAgICAgICAgICAgICc8aHRtbCBs
YW5nPSJlbiI+XG4nCisgICAgICAgICAgICAgICAgJy4uLlxuJworICAgICAgICAgICAgICAgICc8
ZGl2IGNsYXNzPSJCb3ggbWItMyI+XG4nCisgICAgICAgICAgICAgICAgJyAgICA8ZGl2IGNsYXNz
PSJCb3gtaGVhZGVyIEJveC1oZWFkZXItLWJsdWUgcG9zaXRpb24tcmVsYXRpdmUiPlxuJworICAg
ICAgICAgICAgICAgICcgICAgICAgIDxoMiBjbGFzcz0ic3Itb25seSI+TGF0ZXN0IGNvbW1pdDwv
aDI+XG4nCisgICAgICAgICAgICAgICAgJyAgICAgICAgPGRpdiBjbGFzcz0iLi4uIiBkYXRhLWlz
c3VlLWFuZC1wci1ob3ZlcmNhcmRzLWVuYWJsZWQ+XG4nCisgICAgICAgICAgICAgICAgJyAgICAg
ICAgICAgIDxpbmNsdWRlLWZyYWdtZW50IHNyYz0iL1dlYktpdC93ZWJraXQvdHJlZS1jb21taXQv
e3JlZn0iIGFyaWEtbGFiZWw9IkxvYWRpbmcgbGF0ZXN0IGNvbW1pdCI+XG4nCisgICAgICAgICAg
ICAgICAgJyAgICAgICAgICAgIDwvaW5jbHVkZS1mcmFnbWVudD5cbicKKyAgICAgICAgICAgICAg
ICAnICAgICAgICA8dWwgY2xhc3M9Imxpc3Qtc3R5bGUtbm9uZSBkLWZsZXgiPlxuJworICAgICAg
ICAgICAgICAgICcgICAgICAgICAgICA8bGkgY2xhc3M9Im1sLTAgbWwtbWQtMyI+XG4nCisgICAg
ICAgICAgICAgICAgJyAgICAgICAgICAgICAgICA8YSBkYXRhLXBqYXggaHJlZj0iL1dlYktpdC93
ZWJraXQvY29tbWl0cy97cmVmfSI+XG4nCisgICAgICAgICAgICAgICAgJyAgICAgICAgICAgICAg
ICAgICAgPHN2ZyBjbGFzcz0ib2N0aWNvbiBvY3RpY29uLWhpc3RvcnkgdGV4dC1ncmF5Ij48cGF0
aD48L3BhdGg+PC9zdmc+XG4nCisgICAgICAgICAgICAgICAgJyAgICAgICAgICAgICAgICAgICAg
PHNwYW4gY2xhc3M9ImQtbm9uZSBkLXNtLWlubGluZSI+XG4nCisgICAgICAgICAgICAgICAgJyAg
ICAgICAgICAgICAgICAgICAgICAgIDxzdHJvbmc+e2NvdW50fTwvc3Ryb25nPlxuJworICAgICAg
ICAgICAgICAgICcgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBhcmlhLWxhYmVsPSJDb21t
aXRzIG9uICIgY2xhc3M9Ii4uLiI+Y29tbWl0czwvc3Bhbj5cbicKKyAgICAgICAgICAgICAgICAn
ICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuJworICAgICAgICAgICAgICAgICcgICAg
ICAgICAgICAgICAgPC9hPlxuJworICAgICAgICAgICAgICAgICcgICAgICAgICAgICA8L2xpPlxu
JworICAgICAgICAgICAgICAgICcgICAgICAgIDwvdWw+XG4nCisgICAgICAgICAgICAgICAgJyAg
ICAgICAgPC9kaXY+XG4nCisgICAgICAgICAgICAgICAgJyAgICA8L2Rpdj5cbicKKyAgICAgICAg
ICAgICAgICAnPC9kaXY+XG4nCisgICAgICAgICAgICAgICAgJy4uLlxuJworICAgICAgICAgICAg
ICAgICc8L2h0bWw+XG4nLmZvcm1hdCgKKyAgICAgICAgICAgICAgICAgICAgcmVmPWNvbW1pdC5o
YXNoLAorICAgICAgICAgICAgICAgICAgICBjb3VudD1jb21taXQuaWRlbnRpZmllciArIChjb21t
aXQuYnJhbmNoX3BvaW50IG9yIDApLAorICAgICAgICAgICAgICAgICksIHVybD11cmwKKyAgICAg
ICAgICAgICkKKworICAgICAgICByZXR1cm4gbW9ja3MuUmVzcG9uc2UuY3JlYXRlNDA0KHVybCkK
SW5kZXg6IFRvb2xzL1NjcmlwdHMvbGlicmFyaWVzL3dlYmtpdHNjbXB5L3dlYmtpdHNjbXB5L3Jl
bW90ZS9fX2luaXRfXy5weQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9TY3JpcHRzL2xpYnJhcmllcy93
ZWJraXRzY21weS93ZWJraXRzY21weS9yZW1vdGUvX19pbml0X18ucHkJKHJldmlzaW9uIDI3MDUw
NSkKKysrIFRvb2xzL1NjcmlwdHMvbGlicmFyaWVzL3dlYmtpdHNjbXB5L3dlYmtpdHNjbXB5L3Jl
bW90ZS9fX2luaXRfXy5weQkod29ya2luZyBjb3B5KQpAQCAtMjIsMyArMjIsNCBAQAogCiBmcm9t
IHdlYmtpdHNjbXB5LnJlbW90ZS5zY20gaW1wb3J0IFNjbQogZnJvbSB3ZWJraXRzY21weS5yZW1v
dGUuc3ZuIGltcG9ydCBTdm4KK2Zyb20gd2Via2l0c2NtcHkucmVtb3RlLmdpdF9odWIgaW1wb3J0
IEdpdEh1YgpJbmRleDogVG9vbHMvU2NyaXB0cy9saWJyYXJpZXMvd2Via2l0c2NtcHkvd2Via2l0
c2NtcHkvcmVtb3RlL2dpdF9odWIucHkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvU2NyaXB0cy9saWJy
YXJpZXMvd2Via2l0c2NtcHkvd2Via2l0c2NtcHkvcmVtb3RlL2dpdF9odWIucHkJKG5vbmV4aXN0
ZW50KQorKysgVG9vbHMvU2NyaXB0cy9saWJyYXJpZXMvd2Via2l0c2NtcHkvd2Via2l0c2NtcHkv
cmVtb3RlL2dpdF9odWIucHkJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwyNzIgQEAKKyMgQ29w
eXJpZ2h0IChDKSAyMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisjIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworIyBhcmUgbWV0OgorIyAxLiAgUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyMgMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisjICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisjICAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorIwor
IyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklC
VVRPUlMgIkFTIElTIiBBTkQKKyMgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyMgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFS
RQorIyBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUgorIyBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCisjIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SCisjIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSCisjIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCisjIE9SIFRP
UlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFCisjIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisKK2ltcG9ydCBjYWxlbmRhcgoraW1wb3J0
IHJlCitpbXBvcnQgcmVxdWVzdHMKK2ltcG9ydCBzaXgKKworZnJvbSBkYXRldGltZSBpbXBvcnQg
ZGF0ZXRpbWUKK2Zyb20gd2Via2l0Y29yZXB5IGltcG9ydCBkZWNvcmF0b3JzCitmcm9tIHdlYmtp
dHNjbXB5IGltcG9ydCBDb21taXQsIENvbnRyaWJ1dG9yCitmcm9tIHdlYmtpdHNjbXB5LnJlbW90
ZS5zY20gaW1wb3J0IFNjbQorZnJvbSB4bWwuZG9tIGltcG9ydCBtaW5pZG9tCisKKworY2xhc3Mg
R2l0SHViKFNjbSk6CisgICAgVVJMX1JFID0gcmUuY29tcGlsZShyJ1xBaHR0cHM/Oi8vZ2l0aHVi
Lig/UDxkb21haW4+XFMrKS8oP1A8b3duZXI+XFMrKS8oP1A8cmVwb3NpdG9yeT5cUyspXFonKQor
ICAgIEVNQUlMX1JFID0gcmUuY29tcGlsZShyJyg/UDxlbWFpbD5bXkBdK0BbXkBdKykoQC4qKT8n
KQorCisgICAgQGNsYXNzbWV0aG9kCisgICAgZGVmIGlzX3dlYnNlcnZlcihjbHMsIHVybCk6Cisg
ICAgICAgIHJldHVybiBUcnVlIGlmIGNscy5VUkxfUkUubWF0Y2godXJsKSBlbHNlIEZhbHNlCisK
KyAgICBkZWYgX19pbml0X18oc2VsZiwgdXJsLCBkZXZfYnJhbmNoZXM9Tm9uZSwgcHJvZF9icmFu
Y2hlcz1Ob25lLCBjb250cmlidXRvcnM9Tm9uZSk6CisgICAgICAgIG1hdGNoID0gc2VsZi5VUkxf
UkUubWF0Y2godXJsKQorICAgICAgICBpZiBub3QgbWF0Y2g6CisgICAgICAgICAgICByYWlzZSBz
ZWxmLkV4Y2VwdGlvbigiJ3t9JyBpcyBub3QgYSB2YWxpZCBHaXRIdWIgcHJvamVjdCIuZm9ybWF0
KHVybCkpCisgICAgICAgIHNlbGYuYXBpX3VybCA9ICdodHRwczovL2FwaS5naXRodWIue30nLmZv
cm1hdChtYXRjaC5ncm91cCgnZG9tYWluJykpCisgICAgICAgIHNlbGYub3duZXIgPSBtYXRjaC5n
cm91cCgnb3duZXInKQorICAgICAgICBzZWxmLm5hbWUgPSBtYXRjaC5ncm91cCgncmVwb3NpdG9y
eScpCisgICAgICAgIHNlbGYuX2hhc2hfbGlua19yZSA9IHJlLmNvbXBpbGUocicve30ve30vY29t
bWl0cz8vKD9QPGhhc2g+WzAtOWEtZl0rKScuZm9ybWF0KAorICAgICAgICAgICAgc2VsZi5vd25l
ciwKKyAgICAgICAgICAgIHNlbGYubmFtZSwKKyAgICAgICAgKSkKKworICAgICAgICBzdXBlcihH
aXRIdWIsIHNlbGYpLl9faW5pdF9fKHVybCwgZGV2X2JyYW5jaGVzPWRldl9icmFuY2hlcywgcHJv
ZF9icmFuY2hlcz1wcm9kX2JyYW5jaGVzLCBjb250cmlidXRvcnM9Y29udHJpYnV0b3JzKQorCisg
ICAgQHByb3BlcnR5CisgICAgZGVmIGlzX2dpdChzZWxmKToKKyAgICAgICAgcmV0dXJuIFRydWUK
KworICAgIGRlZiByZXF1ZXN0KHNlbGYsIHBhdGg9Tm9uZSwgcGFyYW1zPU5vbmUsIGhlYWRlcnM9
Tm9uZSk6CisgICAgICAgIGhlYWRlcnMgPSB7a2V5OiB2YWx1ZSBmb3Iga2V5LCB2YWx1ZSBpbiBo
ZWFkZXJzLml0ZW1zKCl9IGlmIGhlYWRlcnMgZWxzZSBkaWN0KCkKKyAgICAgICAgaGVhZGVyc1sn
QWNjZXB0J10gPSBoZWFkZXJzLmdldCgnQWNjZXB0JywgJ2FwcGxpY2F0aW9uL3ZuZC5naXRodWIu
djMranNvbicpCisKKyAgICAgICAgcGFyYW1zID0ge2tleTogdmFsdWUgZm9yIGtleSwgdmFsdWUg
aW4gcGFyYW1zLml0ZW1zKCl9IGlmIHBhcmFtcyBlbHNlIGRpY3QoKQorICAgICAgICBwYXJhbXNb
J3Blcl9wYWdlJ10gPSBwYXJhbXMuZ2V0KCdwZXJfcGFnZScsIDEwMCkKKyAgICAgICAgcGFyYW1z
WydwYWdlJ10gPSBwYXJhbXMuZ2V0KCdwYWdlJywgMSkKKworICAgICAgICB1cmwgPSAne30vcmVw
b3Mve30ve317fScuZm9ybWF0KHNlbGYuYXBpX3VybCwgc2VsZi5vd25lciwgc2VsZi5uYW1lLCAn
L3t9Jy5mb3JtYXQocGF0aCkgaWYgcGF0aCBlbHNlICcnKQorICAgICAgICByZXNwb25zZSA9IHJl
cXVlc3RzLmdldCh1cmwsIHBhcmFtcz1wYXJhbXMsIGhlYWRlcnM9aGVhZGVycykKKyAgICAgICAg
aWYgcmVzcG9uc2Uuc3RhdHVzX2NvZGUgIT0gMjAwOgorICAgICAgICAgICAgcmV0dXJuIE5vbmUK
KyAgICAgICAgcmVzdWx0ID0gcmVzcG9uc2UuanNvbigpCisKKyAgICAgICAgd2hpbGUgaXNpbnN0
YW5jZShyZXNwb25zZS5qc29uKCksIGxpc3QpIGFuZCBsZW4ocmVzcG9uc2UuanNvbigpKSA9PSBw
YXJhbXNbJ3Blcl9wYWdlJ106CisgICAgICAgICAgICBwYXJhbXNbJ3BhZ2UnXSArPSAxCisgICAg
ICAgICAgICByZXNwb25zZSA9IHJlcXVlc3RzLmdldCh1cmwsIHBhcmFtcz1wYXJhbXMsIGhlYWRl
cnM9aGVhZGVycykKKyAgICAgICAgICAgIGlmIHJlc3BvbnNlLnN0YXR1c19jb2RlICE9IDIwMDoK
KyAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0CisgICAgICAgICAgICByZXN1bHQgKz0gcmVz
cG9uc2UuanNvbigpCisgICAgICAgIHJldHVybiByZXN1bHQKKworICAgIEBkZWNvcmF0b3JzLk1l
bW9pemUoY2FjaGVkPUZhbHNlKQorICAgIGRlZiBfY291bnQoc2VsZiwgcmVmPU5vbmUpOgorICAg
ICAgICByZWYgPSByZWYgb3Igc2VsZi5kZWZhdWx0X2JyYW5jaAorCisgICAgICAgICMgV2UgbmVl
ZCB0aGUgbnVtYmVyIG9mIHBhcmVudHMgYSBjb21taXQgaGFzIHRvIGNvbnN0cnVjdCBpZGVudGlm
aWVycywgd2hpY2ggaXMgbm90IHNvbWV0aGluZyBHaXRIdWIncworICAgICAgICAjIEFQSSBsZXRz
IHVzIGZpbmQsIGFsdGhvdWdoIHRoZSBVSSBkb2VzIGhhdmUgdGhlIGluZm9ybWF0aW9uCisgICAg
ICAgIHJlc3BvbnNlID0gcmVxdWVzdHMuZ2V0KCd7fS90cmVlL3t9Jy5mb3JtYXQoc2VsZi51cmws
IHJlZikpCisgICAgICAgIGlmIHJlc3BvbnNlLnN0YXR1c19jb2RlICE9IDIwMDoKKyAgICAgICAg
ICAgIHJhaXNlIHNlbGYuRXhjZXB0aW9uKCJGYWlsZWQgdG8gcXVlcnkge30ncyBVSSB0byBmaW5k
IHRoZSBudW1iZXIgb2YgcGFyZW50cyB7fSBoYXMiLmZvcm1hdChzZWxmLnVybCwgcmVmKSkKKwor
ICAgICAgICAjIFRoaXMgcGFyc2luZyBpcyBwcmV0dHkgYnJpdHRsZSwgYnV0IHRoZSB3ZWJwYWdl
IG1heSBub3QgYmUgdmFsaWQgeG1sCisgICAgICAgIGNvdW50ID0gTm9uZQorICAgICAgICBoYXNo
ID0gTm9uZQorICAgICAgICBwcmV2aW91cyA9IE5vbmUKKyAgICAgICAgZm9yIGxpbmUgaW4gcmVz
cG9uc2UudGV4dC5zcGxpdGxpbmVzKCk6CisgICAgICAgICAgICBtYXRjaCA9IHNlbGYuX2hhc2hf
bGlua19yZS5zZWFyY2gobGluZSkKKyAgICAgICAgICAgIGlmIG1hdGNoOgorICAgICAgICAgICAg
ICAgIGhhc2ggPSBtYXRjaC5ncm91cCgnaGFzaCcpCisgICAgICAgICAgICBlbGlmICdhcmlhLWxh
YmVsPSJDb21taXRzIG9uICcgaW4gbGluZToKKyAgICAgICAgICAgICAgICBjb3VudCA9IGludCht
aW5pZG9tLnBhcnNlU3RyaW5nKHByZXZpb3VzKS5kb2N1bWVudEVsZW1lbnQuY2hpbGROb2Rlc1sw
XS5kYXRhLnJlcGxhY2UoJywnLCAnJykpCisgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAg
ICAgIHByZXZpb3VzID0gbGluZQorCisgICAgICAgIGlmIG5vdCBoYXNoIG9yIG5vdCBjb3VudDoK
KyAgICAgICAgICAgIHJhaXNlIHNlbGYuRXhjZXB0aW9uKCJGYWlsZWQgdG8gY29tcHV0ZSB0aGUg
bnVtYmVyIG9mIHBhcmVudHMgdG8gJ3t9JyIuZm9ybWF0KHJlZikpCisKKyAgICAgICAgcmV0dXJu
IGNvdW50LCBoYXNoCisKKyAgICBkZWYgX2RpZmZlcmVuY2Uoc2VsZiwgcmVmZXJlbmNlLCBoZWFk
KToKKyAgICAgICAgcmVzcG9uc2UgPSBzZWxmLnJlcXVlc3QoJ2NvbXBhcmUve30uLi57fScuZm9y
bWF0KHJlZmVyZW5jZSwgaGVhZCksIGhlYWRlcnM9ZGljdChBY2NlcHQ9J2FwcGxpY2F0aW9uL3Zu
ZC5naXRodWIuVkVSU0lPTi5zaGEnKSkKKyAgICAgICAgaWYgbm90IHJlc3BvbnNlIG9yIG5vdCBy
ZXNwb25zZS5nZXQoJ3N0YXR1cycpIGluIFsnZGl2ZXJnZWQnLCAnYWhlYWQnLCAnYmVoaW5kJ106
CisgICAgICAgICAgICByYWlzZSBzZWxmLkV4Y2VwdGlvbignRmFpbGVkIHRvIHJlcXVlc3QgdGhl
IGRpZmZlcmVuY2UgYmV0d2VlbiB7fSBhbmQge30nLmZvcm1hdChyZWZlcmVuY2UsIGhlYWQpKQor
ICAgICAgICByZXR1cm4gaW50KHJlc3BvbnNlWydiZWhpbmRfYnknIGlmIHJlc3BvbnNlLmdldCgn
c3RhdHVzJykgPT0gJ2JlaGluZCcgZWxzZSAnYWhlYWRfYnknXSkKKworICAgIGRlZiBfYnJhbmNo
ZXNfZm9yKHNlbGYsIGhhc2gpOgorICAgICAgICAjIFdlIG5lZWQgdG8gZmluZCB0aGUgYnJhbmNo
IHRoYXQgYSBjb21taXQgaXMgb24uIEdpdEh1YidzIFVJIHByb3ZpZGVzIHRoaXMgaW5mb3JtYXRp
b24sIGJ1dCB0aGUgb25seSB3YXkgdG8KKyAgICAgICAgIyByZXRyaWV2ZSB0aGlzIGluZm9ybWF0
aW9uIHZpYSB0aGUgQVBJIHdvdWxkIGJlIHRvIGNoZWNrIGFsbCBicmFuY2hlcyBmb3IgdGhlIGNv
bW1pdCwgc28gd2Ugc2NyYXBlIHRoZSBVSS4KKyAgICAgICAgcmVzcG9uc2UgPSByZXF1ZXN0cy5n
ZXQoJ3t9L2JyYW5jaF9jb21taXRzL3t9Jy5mb3JtYXQoc2VsZi51cmwsIGhhc2gpKQorICAgICAg
ICBpZiByZXNwb25zZS5zdGF0dXNfY29kZSAhPSAyMDA6CisgICAgICAgICAgICByZXR1cm4gW10K
KworICAgICAgICByZXN1bHQgPSBbXQorICAgICAgICBmb3IgbGluZSBpbiByZXNwb25zZS50ZXh0
LnNwbGl0bGluZXMoKToKKyAgICAgICAgICAgIGlmICdjbGFzcz0iYnJhbmNoIicgbm90IGluIGxp
bmU6CisgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQo
bWluaWRvbS5wYXJzZVN0cmluZyhsaW5lKS5kb2N1bWVudEVsZW1lbnQuY2hpbGROb2Rlc1swXS5j
aGlsZE5vZGVzWzBdLmRhdGEpCisKKyAgICAgICAgcmV0dXJuIHJlc3VsdAorCisgICAgQHByb3Bl
cnR5CisgICAgQGRlY29yYXRvcnMuTWVtb2l6ZSgpCisgICAgZGVmIGRlZmF1bHRfYnJhbmNoKHNl
bGYpOgorICAgICAgICByZXNwb25zZSA9IHNlbGYucmVxdWVzdCgpCisgICAgICAgIGlmIG5vdCBy
ZXNwb25zZToKKyAgICAgICAgICAgIHJhaXNlIHNlbGYuRXhjZXB0aW9uKCJGYWlsZWQgdG8gcXVl
cnkge30gZm9yIHt9J3MgZGVmYXVsdCBicmFuY2giLmZvcm1hdChzZWxmLnVybCwgc2VsZi5uYW1l
KSkKKyAgICAgICAgcmV0dXJuIHJlc3BvbnNlLmdldCgnZGVmYXVsdF9icmFuY2gnLCAnbWFzdGVy
JykKKworICAgIEBwcm9wZXJ0eQorICAgIGRlZiBicmFuY2hlcyhzZWxmKToKKyAgICAgICAgcmVz
cG9uc2UgPSBzZWxmLnJlcXVlc3QoJ2JyYW5jaGVzJykKKyAgICAgICAgaWYgbm90IHJlc3BvbnNl
OgorICAgICAgICAgICAgcmV0dXJuIFtzZWxmLmRlZmF1bHRfYnJhbmNoXQorICAgICAgICByZXR1
cm4gc29ydGVkKFtkZXRhaWxzLmdldCgnbmFtZScpIGZvciBkZXRhaWxzIGluIHJlc3BvbnNlIGlm
IGRldGFpbHMuZ2V0KCduYW1lJyldKQorCisgICAgQHByb3BlcnR5CisgICAgZGVmIHRhZ3Moc2Vs
Zik6CisgICAgICAgIHJlc3BvbnNlID0gc2VsZi5yZXF1ZXN0KCd0YWdzJykKKyAgICAgICAgaWYg
bm90IHJlc3BvbnNlOgorICAgICAgICAgICAgcmV0dXJuIFtdCisgICAgICAgIHJldHVybiBzb3J0
ZWQoW2RldGFpbHMuZ2V0KCduYW1lJykgZm9yIGRldGFpbHMgaW4gcmVzcG9uc2UgaWYgZGV0YWls
cy5nZXQoJ25hbWUnKV0pCisKKyAgICBkZWYgY29tbWl0KHNlbGYsIGhhc2g9Tm9uZSwgcmV2aXNp
b249Tm9uZSwgaWRlbnRpZmllcj1Ob25lLCBicmFuY2g9Tm9uZSwgdGFnPU5vbmUsIGluY2x1ZGVf
bG9nPVRydWUpOgorICAgICAgICBpZiByZXZpc2lvbjoKKyAgICAgICAgICAgIHJhaXNlIHNlbGYu
RXhjZXB0aW9uKCdDYW5ub3QgbWFwIHJldmlzaW9ucyB0byBjb21taXRzIG9uIEdpdEh1YicpCisK
KyAgICAgICAgaWYgaWRlbnRpZmllciBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIGlmIHJldmlz
aW9uOgorICAgICAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoJ0Nhbm5vdCBkZWZpbmUgYm90
aCByZXZpc2lvbiBhbmQgaWRlbnRpZmllcicpCisgICAgICAgICAgICBpZiBoYXNoOgorICAgICAg
ICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoJ0Nhbm5vdCBkZWZpbmUgYm90aCBoYXNoIGFuZCBp
ZGVudGlmaWVyJykKKyAgICAgICAgICAgIGlmIHRhZzoKKyAgICAgICAgICAgICAgICByYWlzZSBW
YWx1ZUVycm9yKCdDYW5ub3QgZGVmaW5lIGJvdGggdGFnIGFuZCBpZGVudGlmaWVyJykKKworICAg
ICAgICAgICAgcGFyc2VkX2JyYW5jaF9wb2ludCwgaWRlbnRpZmllciwgcGFyc2VkX2JyYW5jaCA9
IENvbW1pdC5fcGFyc2VfaWRlbnRpZmllcihpZGVudGlmaWVyLCBkb19hc3NlcnQ9VHJ1ZSkKKyAg
ICAgICAgICAgIGlmIHBhcnNlZF9icmFuY2g6CisgICAgICAgICAgICAgICAgaWYgYnJhbmNoIGFu
ZCBicmFuY2ggIT0gcGFyc2VkX2JyYW5jaDoKKyAgICAgICAgICAgICAgICAgICAgcmFpc2UgVmFs
dWVFcnJvcigKKyAgICAgICAgICAgICAgICAgICAgICAgICJDYWxsZXIgcGFzc2VkIGJvdGggJ2Jy
YW5jaCcgYW5kICdpZGVudGlmaWVyJywgYnV0IHNwZWNpZmllZCBkaWZmZXJlbnQgYnJhbmNoZXMg
KHt9IGFuZCB7fSkiLmZvcm1hdCgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmFuY2gs
IHBhcnNlZF9icmFuY2gsCisgICAgICAgICAgICAgICAgICAgICAgICApLAorICAgICAgICAgICAg
ICAgICAgICApCisgICAgICAgICAgICAgICAgYnJhbmNoID0gcGFyc2VkX2JyYW5jaAorCisgICAg
ICAgICAgICBicmFuY2ggPSBicmFuY2ggb3Igc2VsZi5kZWZhdWx0X2JyYW5jaAorICAgICAgICAg
ICAgaXNfZGVmYXVsdCA9IGJyYW5jaCA9PSBzZWxmLmRlZmF1bHRfYnJhbmNoCisKKyAgICAgICAg
ICAgIGlmIGlzX2RlZmF1bHQgYW5kIHBhcnNlZF9icmFuY2hfcG9pbnQ6CisgICAgICAgICAgICAg
ICAgcmFpc2Ugc2VsZi5FeGNlcHRpb24oJ0Nhbm5vdCBwcm92aWRlIGEgYnJhbmNoIHBvaW50IGZv
ciBhIGNvbW1pdCBvbiB0aGUgZGVmYXVsdCBicmFuY2gnKQorCisgICAgICAgICAgICBpZiBpc19k
ZWZhdWx0OgorICAgICAgICAgICAgICAgIGJhc2VfY291bnQsIGJhc2VfcmVmID0gc2VsZi5fY291
bnQocmVmPXNlbGYuZGVmYXVsdF9icmFuY2gpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAg
ICAgICAgIF8sIGJhc2VfcmVmID0gc2VsZi5fY291bnQocmVmPWJyYW5jaCkKKyAgICAgICAgICAg
ICAgICBiYXNlX2NvdW50ID0gc2VsZi5fZGlmZmVyZW5jZShzZWxmLmRlZmF1bHRfYnJhbmNoLCBi
YXNlX3JlZikKKworICAgICAgICAgICAgaWYgaWRlbnRpZmllciA+IGJhc2VfY291bnQ6CisgICAg
ICAgICAgICAgICAgcmFpc2Ugc2VsZi5FeGNlcHRpb24oJ0lkZW50aWZpZXIge30gY2Fubm90IGJl
IGZvdW5kIG9uIHt9Jy5mb3JtYXQoaWRlbnRpZmllciwgYnJhbmNoKSkKKworICAgICAgICAgICAg
IyBOZWdhdGl2ZSBpZGVudGlmaWVycyBhcmUgYWN0dWFsbHkgY29tbWl0cyBvbiB0aGUgZGVmYXVs
dCBicmFuY2gsIHdlIHdpbGwgbmVlZCB0byByZS1jb21wdXRlIHRoZSBpZGVudGlmaWVyCisgICAg
ICAgICAgICBpZiBpZGVudGlmaWVyIDwgMCBhbmQgaXNfZGVmYXVsdDoKKyAgICAgICAgICAgICAg
ICByYWlzZSBzZWxmLkV4Y2VwdGlvbignSWxsZWdhbCBuZWdhdGl2ZSBpZGVudGlmaWVyIG9uIHRo
ZSBkZWZhdWx0IGJyYW5jaCcpCisKKyAgICAgICAgICAgIGNvbW1pdF9kYXRhID0gc2VsZi5yZXF1
ZXN0KCdjb21taXRzL3t9fnt9Jy5mb3JtYXQoYmFzZV9yZWYsIGJhc2VfY291bnQgLSBpZGVudGlm
aWVyKSkKKyAgICAgICAgICAgIGlmIG5vdCBjb21taXRfZGF0YToKKyAgICAgICAgICAgICAgICBy
YWlzZSBzZWxmLkV4Y2VwdGlvbigiRmFpbGVkIHRvIHJldHJpZXZlIGNvbW1pdCBpbmZvcm1hdGlv
biBmb3IgJ3t9QHt9JyIuZm9ybWF0KGlkZW50aWZpZXIsIGJyYW5jaCBvciAnSEVBRCcpKQorCisg
ICAgICAgICAgICBpZiBpZGVudGlmaWVyIDwgMDoKKyAgICAgICAgICAgICAgICBpZGVudGlmaWVy
ID0gTm9uZQorCisgICAgICAgIGVsaWYgYnJhbmNoIG9yIHRhZzoKKyAgICAgICAgICAgIGlmIGhh
c2g6CisgICAgICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcignQ2Fubm90IGRlZmluZSBib3Ro
IHRhZy9icmFuY2ggYW5kIGhhc2gnKQorICAgICAgICAgICAgaWYgYnJhbmNoIGFuZCB0YWc6Cisg
ICAgICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcignQ2Fubm90IGRlZmluZSBib3RoIHRhZyBh
bmQgYnJhbmNoJykKKyAgICAgICAgICAgIGNvbW1pdF9kYXRhID0gc2VsZi5yZXF1ZXN0KCdjb21t
aXRzL3t9Jy5mb3JtYXQoYnJhbmNoIG9yIHRhZykpCisgICAgICAgICAgICBpZiBub3QgY29tbWl0
X2RhdGE6CisgICAgICAgICAgICAgICAgcmFpc2Ugc2VsZi5FeGNlcHRpb24oIkZhaWxlZCB0byBy
ZXRyaWV2ZSBjb21taXQgaW5mb3JtYXRpb24gZm9yICd7fSciLmZvcm1hdChicmFuY2ggb3IgdGFn
KSkKKworICAgICAgICBlbHNlOgorICAgICAgICAgICAgaGFzaCA9IENvbW1pdC5fcGFyc2VfaGFz
aChoYXNoLCBkb19hc3NlcnQ9VHJ1ZSkKKyAgICAgICAgICAgIGNvbW1pdF9kYXRhID0gc2VsZi5y
ZXF1ZXN0KCdjb21taXRzL3t9Jy5mb3JtYXQoaGFzaCBvciBzZWxmLmRlZmF1bHRfYnJhbmNoKSkK
KyAgICAgICAgICAgIGlmIG5vdCBjb21taXRfZGF0YToKKyAgICAgICAgICAgICAgICByYWlzZSBz
ZWxmLkV4Y2VwdGlvbigiRmFpbGVkIHRvIHJldHJpZXZlIGNvbW1pdCBpbmZvcm1hdGlvbiBmb3Ig
J3t9JyIuZm9ybWF0KGhhc2ggb3IgJ0hFQUQnKSkKKworICAgICAgICBicmFuY2hlcyA9IHNlbGYu
X2JyYW5jaGVzX2Zvcihjb21taXRfZGF0YVsnc2hhJ10pCisgICAgICAgIGlmIGJyYW5jaGVzOgor
ICAgICAgICAgICAgYnJhbmNoID0gc2VsZi5wcmlvcml0aXplX2JyYW5jaGVzKGJyYW5jaGVzKQor
CisgICAgICAgIGVsc2U6CisgICAgICAgICAgICAjIEEgY29tbWl0IG5vdCBvbiBhbnkgYnJhbmNo
ZXMgY2Fubm90IGhhdmUgYW4gaWRlbnRpZmllcgorICAgICAgICAgICAgaWRlbnRpZmllciA9IE5v
bmUKKyAgICAgICAgICAgIGJyYW5jaCA9IE5vbmUKKworICAgICAgICBpZiBicmFuY2ggYW5kIGJy
YW5jaCA9PSBzZWxmLmRlZmF1bHRfYnJhbmNoOgorICAgICAgICAgICAgaWYgbm90IGlkZW50aWZp
ZXI6CisgICAgICAgICAgICAgICAgaWRlbnRpZmllciwgXyA9IHNlbGYuX2NvdW50KHJlZj1jb21t
aXRfZGF0YVsnc2hhJ10sIGNhY2hlZD1UcnVlKQorICAgICAgICAgICAgYnJhbmNoX3BvaW50ID0g
Tm9uZQorCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBpZiBub3QgaWRlbnRpZmllcjoKKyAg
ICAgICAgICAgICAgICBpZGVudGlmaWVyID0gc2VsZi5fZGlmZmVyZW5jZShzZWxmLmRlZmF1bHRf
YnJhbmNoLCBjb21taXRfZGF0YVsnc2hhJ10pCisgICAgICAgICAgICBicmFuY2hfcG9pbnQgPSBz
ZWxmLl9jb3VudChyZWY9Y29tbWl0X2RhdGFbJ3NoYSddLCBjYWNoZWQ9VHJ1ZSlbMF0gLSBpZGVu
dGlmaWVyCisKKyAgICAgICAgbWF0Y2ggPSBzZWxmLkdJVF9TVk5fUkVWSVNJT04uc2VhcmNoKGNv
bW1pdF9kYXRhWydjb21taXQnXVsnbWVzc2FnZSddKQorICAgICAgICByZXZpc2lvbiA9IGludCht
YXRjaC5ncm91cCgncmV2aXNpb24nKSkgaWYgbWF0Y2ggZWxzZSBOb25lCisKKyAgICAgICAgZGF0
ZSA9IGRhdGV0aW1lLnN0cnB0aW1lKGNvbW1pdF9kYXRhWydjb21taXQnXVsnY29tbWl0dGVyJ11b
J2RhdGUnXSwgJyVZLSVtLSVkVCVIOiVNOiVTWicpCisgICAgICAgIGVtYWlsX21hdGNoID0gc2Vs
Zi5FTUFJTF9SRS5tYXRjaChjb21taXRfZGF0YVsnY29tbWl0J11bJ2F1dGhvciddWydlbWFpbCdd
KQorCisgICAgICAgIHJldHVybiBDb21taXQoCisgICAgICAgICAgICBoYXNoPWNvbW1pdF9kYXRh
WydzaGEnXSwKKyAgICAgICAgICAgIHJldmlzaW9uPXJldmlzaW9uLAorICAgICAgICAgICAgYnJh
bmNoX3BvaW50PWJyYW5jaF9wb2ludCwKKyAgICAgICAgICAgIGlkZW50aWZpZXI9aWRlbnRpZmll
ciwKKyAgICAgICAgICAgIGJyYW5jaD1icmFuY2gsCisgICAgICAgICAgICB0aW1lc3RhbXA9aW50
KGNhbGVuZGFyLnRpbWVnbShkYXRlLnRpbWV0dXBsZSgpKSksCisgICAgICAgICAgICBhdXRob3I9
c2VsZi5jb250cmlidXRvcnMuY3JlYXRlKAorICAgICAgICAgICAgICAgIGNvbW1pdF9kYXRhWydj
b21taXQnXVsnYXV0aG9yJ11bJ25hbWUnXSwKKyAgICAgICAgICAgICAgICBlbWFpbF9tYXRjaC5n
cm91cCgnZW1haWwnKSBpZiBlbWFpbF9tYXRjaCBlbHNlIE5vbmUsCisgICAgICAgICAgICApLCBt
ZXNzYWdlPWNvbW1pdF9kYXRhWydjb21taXQnXVsnbWVzc2FnZSddIGlmIGluY2x1ZGVfbG9nIGVs
c2UgTm9uZSwKKyAgICAgICAgKQorCisgICAgZGVmIGZpbmQoc2VsZiwgYXJndW1lbnQsIGluY2x1
ZGVfbG9nPVRydWUpOgorICAgICAgICBpZiBub3QgaXNpbnN0YW5jZShhcmd1bWVudCwgc2l4LnN0
cmluZ190eXBlcyk6CisgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCJFeHBlY3RlZCAnYXJn
dW1lbnQnIHRvIGJlIGEgc3RyaW5nLCBub3QgJ3t9JyIuZm9ybWF0KHR5cGUoYXJndW1lbnQpKSkK
KworICAgICAgICBwYXJzZWRfY29tbWl0ID0gQ29tbWl0LnBhcnNlKGFyZ3VtZW50LCBkb19hc3Nl
cnQ9RmFsc2UpCisgICAgICAgIGlmIHBhcnNlZF9jb21taXQ6CisgICAgICAgICAgICByZXR1cm4g
c2VsZi5jb21taXQoCisgICAgICAgICAgICAgICAgaGFzaD1wYXJzZWRfY29tbWl0Lmhhc2gsCisg
ICAgICAgICAgICAgICAgcmV2aXNpb249cGFyc2VkX2NvbW1pdC5yZXZpc2lvbiwKKyAgICAgICAg
ICAgICAgICBpZGVudGlmaWVyPXBhcnNlZF9jb21taXQuaWRlbnRpZmllciwKKyAgICAgICAgICAg
ICAgICBicmFuY2g9cGFyc2VkX2NvbW1pdC5icmFuY2gsCisgICAgICAgICAgICAgICAgaW5jbHVk
ZV9sb2c9aW5jbHVkZV9sb2csCisgICAgICAgICAgICApCisKKyAgICAgICAgY29tbWl0X2RhdGEg
PSBzZWxmLnJlcXVlc3QoJ2NvbW1pdHMve30nLmZvcm1hdChhcmd1bWVudCkpCisgICAgICAgIGlm
IG5vdCBjb21taXRfZGF0YToKKyAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoIid7fScgaXMg
bm90IGFuIGFyZ3VtZW50IHJlY29nbml6ZWQgYnkgZ2l0Ii5mb3JtYXQoYXJndW1lbnQpKQorICAg
ICAgICByZXR1cm4gc2VsZi5jb21taXQoaGFzaD1jb21taXRfZGF0YVsnc2hhJ10sIGluY2x1ZGVf
bG9nPWluY2x1ZGVfbG9nKQpJbmRleDogVG9vbHMvU2NyaXB0cy9saWJyYXJpZXMvd2Via2l0c2Nt
cHkvd2Via2l0c2NtcHkvcmVtb3RlL3NjbS5weQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9TY3JpcHRz
L2xpYnJhcmllcy93ZWJraXRzY21weS93ZWJraXRzY21weS9yZW1vdGUvc2NtLnB5CShyZXZpc2lv
biAyNzA1MDUpCisrKyBUb29scy9TY3JpcHRzL2xpYnJhcmllcy93ZWJraXRzY21weS93ZWJraXRz
Y21weS9yZW1vdGUvc2NtLnB5CSh3b3JraW5nIGNvcHkpCkBAIC0zMiw2ICszMiw4IEBAIGNsYXNz
IFNjbShTY21CYXNlKToKIAogICAgICAgICBpZiByZW1vdGUuU3ZuLmlzX3dlYnNlcnZlcih1cmwp
OgogICAgICAgICAgICAgcmV0dXJuIHJlbW90ZS5Tdm4odXJsLCBjb250cmlidXRvcnM9Y29udHJp
YnV0b3JzKQorICAgICAgICBpZiByZW1vdGUuR2l0SHViLmlzX3dlYnNlcnZlcih1cmwpOgorICAg
ICAgICAgICAgcmV0dXJuIHJlbW90ZS5HaXRIdWIodXJsLCBjb250cmlidXRvcnM9Y29udHJpYnV0
b3JzKQogICAgICAgICByYWlzZSBPU0Vycm9yKCIne30nIGlzIG5vdCBhIGtub3duIFNDTSBzZXJ2
ZXIiLmZvcm1hdCh1cmwpKQogCiAgICAgZGVmIF9faW5pdF9fKHNlbGYsIHVybCwgZGV2X2JyYW5j
aGVzPU5vbmUsIHByb2RfYnJhbmNoZXM9Tm9uZSwgY29udHJpYnV0b3JzPU5vbmUpOgpJbmRleDog
VG9vbHMvU2NyaXB0cy9saWJyYXJpZXMvd2Via2l0c2NtcHkvd2Via2l0c2NtcHkvdGVzdC9naXRf
dW5pdHRlc3QucHkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvU2NyaXB0cy9saWJyYXJpZXMvd2Via2l0
c2NtcHkvd2Via2l0c2NtcHkvdGVzdC9naXRfdW5pdHRlc3QucHkJKHJldmlzaW9uIDI3MDUwNSkK
KysrIFRvb2xzL1NjcmlwdHMvbGlicmFyaWVzL3dlYmtpdHNjbXB5L3dlYmtpdHNjbXB5L3Rlc3Qv
Z2l0X3VuaXR0ZXN0LnB5CSh3b3JraW5nIGNvcHkpCkBAIC0yNiw3ICsyNiw3IEBAIGltcG9ydCB1
bml0dGVzdAogZnJvbSBkYXRldGltZSBpbXBvcnQgZGF0ZXRpbWUKIGZyb20gd2Via2l0Y29yZXB5
IGltcG9ydCBMb2dnZXJDYXB0dXJlCiBmcm9tIHdlYmtpdGNvcmVweS5tb2NrcyBpbXBvcnQgVGlt
ZSBhcyBNb2NrVGltZQotZnJvbSB3ZWJraXRzY21weSBpbXBvcnQgbG9jYWwsIG1vY2tzCitmcm9t
IHdlYmtpdHNjbXB5IGltcG9ydCBsb2NhbCwgbW9ja3MsIHJlbW90ZQogCiAKIGNsYXNzIFRlc3RH
aXQodW5pdHRlc3QuVGVzdENhc2UpOgpAQCAtMjQzLDMgKzI0MywxMDEgQEAgY2xhc3MgVGVzdEdp
dCh1bml0dGVzdC5UZXN0Q2FzZSk6CiAgICAgICAgIGZvciBtb2NrIGluIFttb2Nrcy5sb2NhbC5H
aXQoc2VsZi5wYXRoKSwgbW9ja3MubG9jYWwuR2l0KHNlbGYucGF0aCwgZ2l0X3N2bj1UcnVlKV06
CiAgICAgICAgICAgICB3aXRoIG1vY2s6CiAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRJc05v
bmUobG9jYWwuR2l0KHNlbGYucGF0aCkuY29tbWl0KGlkZW50aWZpZXI9JzRAbWFpbicsIGluY2x1
ZGVfbG9nPUZhbHNlKS5tZXNzYWdlKQorCisKK2NsYXNzIFRlc3RHaXRIdWIodW5pdHRlc3QuVGVz
dENhc2UpOgorICAgIHJlbW90ZSA9ICdodHRwczovL2dpdGh1Yi5jb20vV2ViS2l0L3dlYmtpdCcK
KworICAgIGRlZiB0ZXN0X2RldGVjdGlvbihzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVh
bChyZW1vdGUuR2l0SHViLmlzX3dlYnNlcnZlcignaHR0cHM6Ly9naXRodWIuY29tL1dlYktpdC93
ZWJraXQnKSwgVHJ1ZSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZW1vdGUuR2l0SHViLmlz
X3dlYnNlcnZlcignaHR0cDovL2dpdGh1Yi5jb20vV2ViS2l0L3dlYmtpdCcpLCBUcnVlKQorICAg
ICAgICBzZWxmLmFzc2VydEVxdWFsKHJlbW90ZS5HaXRIdWIuaXNfd2Vic2VydmVyKCdodHRwczov
L3N2bi53ZWJraXQub3JnL3JlcG9zaXRvcnkvd2Via2l0JyksIEZhbHNlKQorCisgICAgZGVmIHRl
c3RfYnJhbmNoZXMoc2VsZik6CisgICAgICAgIHdpdGggbW9ja3MucmVtb3RlLkdpdEh1YigpOgor
ICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKKyAgICAgICAgICAgICAgICByZW1vdGUuR2l0
SHViKHNlbGYucmVtb3RlKS5icmFuY2hlcywKKyAgICAgICAgICAgICAgICBbJ2JyYW5jaC1hJywg
J2JyYW5jaC1iJywgJ21haW4nXSwKKyAgICAgICAgICAgICkKKworICAgIGRlZiB0ZXN0X3RhZ3Mo
c2VsZik6CisgICAgICAgIHdpdGggbW9ja3MucmVtb3RlLkdpdEh1YigpOgorICAgICAgICAgICAg
c2VsZi5hc3NlcnRFcXVhbCgKKyAgICAgICAgICAgICAgICByZW1vdGUuR2l0SHViKHNlbGYucmVt
b3RlKS50YWdzLAorICAgICAgICAgICAgICAgIFsndGFnLTEnLCAndGFnLTInXSwKKyAgICAgICAg
ICAgICkKKworICAgIGRlZiB0ZXN0X3NjbV90eXBlKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2Vy
dEZhbHNlKHJlbW90ZS5HaXRIdWIoc2VsZi5yZW1vdGUpLmlzX3N2bikKKyAgICAgICAgc2VsZi5h
c3NlcnRUcnVlKHJlbW90ZS5HaXRIdWIoc2VsZi5yZW1vdGUpLmlzX2dpdCkKKworICAgIGRlZiB0
ZXN0X2NvbW1pdF9yZXZpc2lvbihzZWxmKToKKyAgICAgICAgd2l0aCBtb2Nrcy5yZW1vdGUuR2l0
SHViKCk6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCcxQG1haW4nLCBzdHIocmVtb3Rl
LkdpdEh1YihzZWxmLnJlbW90ZSkuY29tbWl0KGhhc2g9JzliODMxMWYyJykpKQorICAgICAgICAg
ICAgc2VsZi5hc3NlcnRFcXVhbCgnMkBtYWluJywgc3RyKHJlbW90ZS5HaXRIdWIoc2VsZi5yZW1v
dGUpLmNvbW1pdChoYXNoPSdmZmY4M2JiMicpKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1
YWwoJzIuMUBicmFuY2gtYScsIHN0cihyZW1vdGUuR2l0SHViKHNlbGYucmVtb3RlKS5jb21taXQo
aGFzaD0nYTMwY2U4NDknKSkpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCczQG1haW4n
LCBzdHIocmVtb3RlLkdpdEh1YihzZWxmLnJlbW90ZSkuY29tbWl0KGhhc2g9JzFhYmUyNWI0Jykp
KQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgnMi4yQGJyYW5jaC1iJywgc3RyKHJlbW90
ZS5HaXRIdWIoc2VsZi5yZW1vdGUpLmNvbW1pdChoYXNoPSczY2QzMmUzNScpKSkKKyAgICAgICAg
ICAgIHNlbGYuYXNzZXJ0RXF1YWwoJzRAbWFpbicsIHN0cihyZW1vdGUuR2l0SHViKHNlbGYucmVt
b3RlKS5jb21taXQoaGFzaD0nYmFlNWQxZTknKSkpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVx
dWFsKCcyLjJAYnJhbmNoLWEnLCBzdHIocmVtb3RlLkdpdEh1YihzZWxmLnJlbW90ZSkuY29tbWl0
KGhhc2g9JzYyMTY1MmFkJykpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgnMi4zQGJy
YW5jaC1iJywgc3RyKHJlbW90ZS5HaXRIdWIoc2VsZi5yZW1vdGUpLmNvbW1pdChoYXNoPSc3OTA3
MjVhNicpKSkKKworICAgIGRlZiB0ZXN0X2NvbW1pdF9mcm9tX2JyYW5jaChzZWxmKToKKyAgICAg
ICAgd2l0aCBtb2Nrcy5yZW1vdGUuR2l0SHViKCk6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVx
dWFsKCc0QG1haW4nLCBzdHIocmVtb3RlLkdpdEh1YihzZWxmLnJlbW90ZSkuY29tbWl0KGJyYW5j
aD0nbWFpbicpKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJzIuMkBicmFuY2gtYScs
IHN0cihyZW1vdGUuR2l0SHViKHNlbGYucmVtb3RlKS5jb21taXQoYnJhbmNoPSdicmFuY2gtYScp
KSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJzIuM0BicmFuY2gtYicsIHN0cihyZW1v
dGUuR2l0SHViKHNlbGYucmVtb3RlKS5jb21taXQoYnJhbmNoPSdicmFuY2gtYicpKSkKKworICAg
IGRlZiB0ZXN0X2lkZW50aWZpZXIoc2VsZik6CisgICAgICAgIHdpdGggbW9ja3MucmVtb3RlLkdp
dEh1YigpOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKKyAgICAgICAgICAgICAgICAn
OWI4MzExZjI1YTc3YmExNDkyM2Q5ZDVhNjUzMjEwM2Y1NGFiZWZjYicsCisgICAgICAgICAgICAg
ICAgcmVtb3RlLkdpdEh1YihzZWxmLnJlbW90ZSkuY29tbWl0KGlkZW50aWZpZXI9JzFAbWFpbicp
Lmhhc2gsCisgICAgICAgICAgICApCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKAorICAg
ICAgICAgICAgICAgICdmZmY4M2JiMmQ5MTcxYjRkOTE5NmU5NzdlYjA1MDhmZDU3ZTdhMDhkJywK
KyAgICAgICAgICAgICAgICByZW1vdGUuR2l0SHViKHNlbGYucmVtb3RlKS5jb21taXQoaWRlbnRp
Zmllcj0nMkBtYWluJykuaGFzaCwKKyAgICAgICAgICAgICkKKyAgICAgICAgICAgIHNlbGYuYXNz
ZXJ0RXF1YWwoCisgICAgICAgICAgICAgICAgJ2EzMGNlODQ5NGJmMWFjMjgwN2E2OTg0NGY3MjZi
ZTRhOTg0M2NhNTUnLAorICAgICAgICAgICAgICAgIHJlbW90ZS5HaXRIdWIoc2VsZi5yZW1vdGUp
LmNvbW1pdChpZGVudGlmaWVyPScyLjFAYnJhbmNoLWEnKS5oYXNoLAorICAgICAgICAgICAgKQor
ICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKKyAgICAgICAgICAgICAgICAnMWFiZTI1YjQ0
M2U5ODVmOTNiOTBkODMwZTRhN2UzNzMxMzM2YWY0ZCcsCisgICAgICAgICAgICAgICAgcmVtb3Rl
LkdpdEh1YihzZWxmLnJlbW90ZSkuY29tbWl0KGlkZW50aWZpZXI9JzNAbWFpbicpLmhhc2gsCisg
ICAgICAgICAgICApCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKAorICAgICAgICAgICAg
ICAgICczY2QzMmUzNTI0MTA1NjViYjU0MzgyMWZiZjg1NmE2ZDNjYWFkMWM0JywKKyAgICAgICAg
ICAgICAgICByZW1vdGUuR2l0SHViKHNlbGYucmVtb3RlKS5jb21taXQoaWRlbnRpZmllcj0nMi4y
QGJyYW5jaC1iJykuaGFzaCwKKyAgICAgICAgICAgICkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0
RXF1YWwoCisgICAgICAgICAgICAgICAgJ2JhZTVkMWU5MDk5OWQ0ZjkxNmE4YTE1ODEwY2NmYTQz
ZjM3YTJmZDYnLAorICAgICAgICAgICAgICAgIHJlbW90ZS5HaXRIdWIoc2VsZi5yZW1vdGUpLmNv
bW1pdChpZGVudGlmaWVyPSc0QG1haW4nKS5oYXNoLAorICAgICAgICAgICAgKQorICAgICAgICAg
ICAgc2VsZi5hc3NlcnRFcXVhbCgKKyAgICAgICAgICAgICAgICAnNjIxNjUyYWRkN2ZjNDE2MDk5
YmQyMDYzMzY2Y2MzOGZmNjFhZmUzNicsCisgICAgICAgICAgICAgICAgcmVtb3RlLkdpdEh1Yihz
ZWxmLnJlbW90ZSkuY29tbWl0KGlkZW50aWZpZXI9JzIuMkBicmFuY2gtYScpLmhhc2gsCisgICAg
ICAgICAgICApCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKAorICAgICAgICAgICAgICAg
ICc3OTA3MjVhNmQ3OWUyOGRiMmVjZGRlMjk1NDhkMjI2MmMwYmQwNTlkJywKKyAgICAgICAgICAg
ICAgICByZW1vdGUuR2l0SHViKHNlbGYucmVtb3RlKS5jb21taXQoaWRlbnRpZmllcj0nMi4zQGJy
YW5jaC1iJykuaGFzaCwKKyAgICAgICAgICAgICkKKworICAgIGRlZiB0ZXN0X25vbl9jYW5ub25p
Y2FsX2lkZW50aWZpZXJzKHNlbGYpOgorICAgICAgICB3aXRoIG1vY2tzLnJlbW90ZS5HaXRIdWIo
KToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJzJAbWFpbicsIHN0cihyZW1vdGUuR2l0
SHViKHNlbGYucmVtb3RlKS5jb21taXQoaWRlbnRpZmllcj0nMEBicmFuY2gtYScpKSkKKyAgICAg
ICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJzFAbWFpbicsIHN0cihyZW1vdGUuR2l0SHViKHNlbGYu
cmVtb3RlKS5jb21taXQoaWRlbnRpZmllcj0nLTFAYnJhbmNoLWEnKSkpCisKKyAgICAgICAgICAg
IHNlbGYuYXNzZXJ0RXF1YWwoJzJAbWFpbicsIHN0cihyZW1vdGUuR2l0SHViKHNlbGYucmVtb3Rl
KS5jb21taXQoaWRlbnRpZmllcj0nMEBicmFuY2gtYicpKSkKKyAgICAgICAgICAgIHNlbGYuYXNz
ZXJ0RXF1YWwoJzFAbWFpbicsIHN0cihyZW1vdGUuR2l0SHViKHNlbGYucmVtb3RlKS5jb21taXQo
aWRlbnRpZmllcj0nLTFAYnJhbmNoLWInKSkpCisKKyAgICBkZWYgdGVzdF90YWcoc2VsZik6Cisg
ICAgICAgIHdpdGggbW9ja3MucmVtb3RlLkdpdEh1YigpOgorICAgICAgICAgICAgc2VsZi5hc3Nl
cnRFcXVhbCgKKyAgICAgICAgICAgICAgICAnNjIxNjUyYWRkN2ZjNDE2MDk5YmQyMDYzMzY2Y2Mz
OGZmNjFhZmUzNicsCisgICAgICAgICAgICAgICAgcmVtb3RlLkdpdEh1YihzZWxmLnJlbW90ZSku
Y29tbWl0KHRhZz0ndGFnLTEnKS5oYXNoLAorICAgICAgICAgICAgKQorCisgICAgZGVmIHRlc3Rf
bm9fbG9nKHNlbGYpOgorICAgICAgICB3aXRoIG1vY2tzLnJlbW90ZS5HaXRIdWIoKToKKyAgICAg
ICAgICAgIHNlbGYuYXNzZXJ0SXNOb25lKHJlbW90ZS5HaXRIdWIoc2VsZi5yZW1vdGUpLmNvbW1p
dChpZGVudGlmaWVyPSc0QG1haW4nLCBpbmNsdWRlX2xvZz1GYWxzZSkubWVzc2FnZSkK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>415597</attachid>
            <date>2020-12-07 15:58:59 -0800</date>
            <delta_ts>2020-12-11 10:19:53 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-219602-20201207175858.patch</filename>
            <type>text/plain</type>
            <size>38892</size>
            <attacher name="Jonathan Bedard">jbedard</attacher>
            
              <data encoding="base64">SW5kZXg6IFRvb2xzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9DaGFuZ2VMb2cJKHJl
dmlzaW9uIDI3MDUwOSkKKysrIFRvb2xzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwz
ICsxLDU2IEBACisyMDIwLTEyLTA3ICBKb25hdGhhbiBCZWRhcmQgIDxqYmVkYXJkQGFwcGxlLmNv
bT4KKworICAgICAgICBbd2Via2l0c2NtcHldIFN1cHBvcnQgcmVtb3RlIEdpdEh1YiByZXBvc2l0
b3J5CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMTk2
MDIKKyAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzcyMDUwMDI2PgorCisgICAgICAgIFJldmlld2Vk
IGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFNlcnZpY2VzIG9mdGVuIG5lZWQgdG8gaW50
ZXJhY3Qgd2l0aCB0aGUgV2ViS2l0IHJlcG9zaXRvcnkgd2l0aG91dCBhY3R1YWxseSBkb3dubG9h
ZGluZyB0aGUKKyAgICAgICAgcmVwb3NpdG9yeS4gSW4gcGFydGljdWxhciwgaXQgaXMgdXNlZnVs
IHRvIGJlIGFibGUgdG8gcmV0cmlldmUgY29tbWl0cyBhbmQgdGhlaXIgaWRlbnRpZmllcnMuCisK
KyAgICAgICAgKiBTY3JpcHRzL2xpYnJhcmllcy93ZWJraXRzY21weS93ZWJraXRzY21weS9fX2lu
aXRfXy5weTogQnVtcCB2ZXJzaW9uLgorICAgICAgICAqIFNjcmlwdHMvbGlicmFyaWVzL3dlYmtp
dHNjbXB5L3dlYmtpdHNjbXB5L2xvY2FsL2dpdC5weToKKyAgICAgICAgKEdpdCk6IE1vdmUgR0lU
X1NWTl9SRVZJU0lPTiByZWdleCB0byBiYXNlIGNsYXNzLgorICAgICAgICAqIFNjcmlwdHMvbGli
cmFyaWVzL3dlYmtpdHNjbXB5L3dlYmtpdHNjbXB5L21vY2tzL3JlbW90ZS9fX2luaXRfXy5weTog
QWRkIEdpdEh1YiBjbGFzcy4KKyAgICAgICAgKiBTY3JpcHRzL2xpYnJhcmllcy93ZWJraXRzY21w
eS93ZWJraXRzY21weS9tb2Nrcy9yZW1vdGUvZ2l0X2h1Yi5weTogQWRkZWQuCisgICAgICAgIChH
aXRIdWIpOiBNb2NrIHJlcXVlc3Qgcm91dGVyIGZvciBhIGxpbWl0ZWQgc3Vic2V0IG9mIEdpdEh1
YidzIEFQSS4KKyAgICAgICAgKEdpdEh1Yi5fX2luaXRfXyk6CisgICAgICAgIChHaXRIdWIuY29t
bWl0KTogUmV0dXJuIGEgY29tbWl0IG9iamVjdCBnaXZlbiBhIHJlZmVyZW5jZS4KKyAgICAgICAg
KEdpdEh1Yi5yZXF1ZXN0KTogUmV0dXJuIGEgcmVzcG9uc2Ugb2JqZWN0IGZvciB0aGUgc3BlY2lm
aWVkIHJlcXVlc3QuCisgICAgICAgICogU2NyaXB0cy9saWJyYXJpZXMvd2Via2l0c2NtcHkvd2Vi
a2l0c2NtcHkvcmVtb3RlL19faW5pdF9fLnB5OiBBZGQgR2l0SHViIGNsYXNzLgorICAgICAgICAq
IFNjcmlwdHMvbGlicmFyaWVzL3dlYmtpdHNjbXB5L3dlYmtpdHNjbXB5L3JlbW90ZS9naXRfaHVi
LnB5OiBBZGRlZC4KKyAgICAgICAgKEdpdEh1Yik6IFJlcG9zaXRvcnkgb2JqZWN0IHJlcHJlc2Vu
dGluZyBhIEdpdEh1YiByZW1vdGUuCisgICAgICAgIChHaXRIdWIuaXNfd2Vic2VydmVyKTogVHJ1
ZSBpZiB0aGUgcHJvdmlkZWQgVVJMIGlzIGEgR2l0SHViIHdlYnNlcnZlci4KKyAgICAgICAgKEdp
dEh1Yi5fX2luaXRfXyk6IFZlcmlmeSB0aGUgcHJvdmlkZWQgVVJMIGFuZCBzcGxpdCBpdCBpbnRv
IGl0J3MgY29tcG9zaXRlIHBhcnRzLgorICAgICAgICAoR2l0SHViLmlzX2dpdCk6IFJldHVybiBU
cnVlLgorICAgICAgICAoR2l0SHViLnJlcXVlc3QpOiBNYWtlIGFuIEFQSSByZXF1ZXN0LCBjb21i
aW5pbmcgcGFnaW5hdGlvbiBpbnRvIGEgc2luZ2xlIHJlcXVlc3QuCisgICAgICAgIChHaXRIdWIu
X2NvdW50KTogU2NyYXBlIHRoZSBHaXRIdWIgVUkgdG8gZmluZCB0aGUgbnVtYmVyIG9mIHBhcmVu
dCBjb21taXRzIGZvciBhIHNwZWNpZmllZAorICAgICAgICBicmFuY2ggb3IgY29tbWl0LgorICAg
ICAgICAoR2l0SHViLl9kaWZmZXJlbmNlKTogQ29tcHV0ZSB0aGUgbnVtYmVyIG9mIGNvbW1pdHMg
YSBzcGVjaWZpZWQgcmVmZXJlbmNlIGlzIGFoZWFkIG9mIGFub3RoZXIuCisgICAgICAgIChHaXRI
dWIuX2JyYW5jaGVzX2Zvcik6IFNjcmFwZSB0aGUgR2l0SHViIFVJIHRvIGRldGVybWluZSB3aGF0
IGJyYW5jaGVzIGEgY29tbWl0IGlzIG9uLgorICAgICAgICAoR2l0SHViLmRlZmF1bHRfYnJhbmNo
KTogUXVlcnkgR2l0SHViIHRvIGRldGVybWluZSB0aGUgZGVmYXVsdCBicmFuY2ggZm9yIGEgc3Bl
Y2lmaWVkIGNvbW1pdC4KKyAgICAgICAgKEdpdEh1Yi5icmFuY2hlcyk6IFJldHVybiBhbGwgYnJh
bmNoZXMgZm9yIGEgcmVwb3NpdG9yeS4KKyAgICAgICAgKEdpdEh1Yi50YWdzKTogUmV0dXJuIGFs
bCB0YWdzIGZvciBhIHJlcG9zaXRvcnkuCisgICAgICAgIChHaXRIdWIuY29tbWl0KTogUmV0dXJu
IGEgY29tbWl0IG9iamVjdCBnaXZlbiBhIHJldmlzaW9uLCBicmFuY2gsIGlkZW50aWZpZXIgb3Ig
dGFnLgorICAgICAgICAoR2l0SHViLmZpbmQpOiBVc2UgZ2l0IHRvIG1hdGNoIGJyYW5jaGVzIGFu
ZCB0YWdzIHRvIGEgaGFzaCBpbnN0ZWFkIG9mIHRyeWluZyB0byBkbyBpdCBvdXJzZWx2ZXMuCisg
ICAgICAgICogU2NyaXB0cy9saWJyYXJpZXMvd2Via2l0c2NtcHkvd2Via2l0c2NtcHkvcmVtb3Rl
L3NjbS5weToKKyAgICAgICAgKFNjbS5mcm9tX3VybCk6IEFkZCBHaXRIdWIgdG8gdGhlIHNldCBv
ZiBjYW5kaWRhdGUgcmVtb3RlIHJlcG9zaXRvcmllcy4KKyAgICAgICAgKiBTY3JpcHRzL2xpYnJh
cmllcy93ZWJraXRzY21weS93ZWJraXRzY21weS9zY21fYmFzZS5weToKKyAgICAgICAgKFNjbUJh
c2UpOiBNb3ZlIEdJVF9TVk5fUkVWSVNJT04gcmVnZXggdG8gYmFzZSBjbGFzcy4KKyAgICAgICAg
KiBTY3JpcHRzL2xpYnJhcmllcy93ZWJraXRzY21weS93ZWJraXRzY21weS90ZXN0L2dpdF91bml0
dGVzdC5weToKKyAgICAgICAgKFRlc3RHaXRIdWIpOgorICAgICAgICAoVGVzdEdpdEh1Yi50ZXN0
X2RldGVjdGlvbik6CisgICAgICAgIChUZXN0R2l0SHViLnRlc3RfYnJhbmNoZXMpOgorICAgICAg
ICAoVGVzdEdpdEh1Yi50ZXN0X3RhZ3MpOgorICAgICAgICAoVGVzdEdpdEh1Yi50ZXN0X3NjbV90
eXBlKToKKyAgICAgICAgKFRlc3RHaXRIdWIudGVzdF9jb21taXRfcmV2aXNpb24pOgorICAgICAg
ICAoVGVzdEdpdEh1Yi50ZXN0X2NvbW1pdF9mcm9tX2JyYW5jaCk6CisgICAgICAgIChUZXN0R2l0
SHViLnRlc3RfaWRlbnRpZmllcik6CisgICAgICAgIChUZXN0R2l0SHViLnRlc3Rfbm9uX2Nhbm5v
bmljYWxfaWRlbnRpZmllcnMpOgorICAgICAgICAoVGVzdEdpdEh1Yi50ZXN0X3RhZyk6CisgICAg
ICAgIChUZXN0R2l0SHViLnRlc3Rfbm9fbG9nKToKKwogMjAyMC0xMi0wNyAgWW91ZW5uIEZhYmxl
dCAgPHlvdWVubkBhcHBsZS5jb20+CiAKICAgICAgICAgQWRkIGEgU0ZyYW1lIEgyNjQgZXhwZXJp
bWVudGFsIGNvbXBhdGliaWxpdHkgbW9kZQpJbmRleDogVG9vbHMvU2NyaXB0cy9saWJyYXJpZXMv
d2Via2l0c2NtcHkvd2Via2l0c2NtcHkvX19pbml0X18ucHkKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMv
U2NyaXB0cy9saWJyYXJpZXMvd2Via2l0c2NtcHkvd2Via2l0c2NtcHkvX19pbml0X18ucHkJKHJl
dmlzaW9uIDI3MDUwOSkKKysrIFRvb2xzL1NjcmlwdHMvbGlicmFyaWVzL3dlYmtpdHNjbXB5L3dl
YmtpdHNjbXB5L19faW5pdF9fLnB5CSh3b3JraW5nIGNvcHkpCkBAIC00Niw3ICs0Niw3IEBAIGV4
Y2VwdCBJbXBvcnRFcnJvcjoKICAgICAgICAgIlBsZWFzZSBpbnN0YWxsIHdlYmtpdGNvcmVweSB3
aXRoIGBwaXAgaW5zdGFsbCB3ZWJraXRjb3JlcHkgLS1leHRyYS1pbmRleC11cmwgPHBhY2thZ2Ug
aW5kZXggVVJMPmAiCiAgICAgKQogCi12ZXJzaW9uID0gVmVyc2lvbigwLCA1LCAxKQordmVyc2lv
biA9IFZlcnNpb24oMCwgNiwgMCkKIAogQXV0b0luc3RhbGwucmVnaXN0ZXIoUGFja2FnZSgnZmFz
dGVuZXJzJywgVmVyc2lvbigwLCAxNSwgMCkpKQogQXV0b0luc3RhbGwucmVnaXN0ZXIoUGFja2Fn
ZSgnbW9ub3RvbmljJywgVmVyc2lvbigxLCA1KSkpCkluZGV4OiBUb29scy9TY3JpcHRzL2xpYnJh
cmllcy93ZWJraXRzY21weS93ZWJraXRzY21weS9zY21fYmFzZS5weQo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBU
b29scy9TY3JpcHRzL2xpYnJhcmllcy93ZWJraXRzY21weS93ZWJraXRzY21weS9zY21fYmFzZS5w
eQkocmV2aXNpb24gMjcwNTA5KQorKysgVG9vbHMvU2NyaXB0cy9saWJyYXJpZXMvd2Via2l0c2Nt
cHkvd2Via2l0c2NtcHkvc2NtX2Jhc2UucHkJKHdvcmtpbmcgY29weSkKQEAgLTM3LDYgKzM3LDcg
QEAgY2xhc3MgU2NtQmFzZShvYmplY3QpOgogICAgICMgdGhlIGZvbGxvd2luZyBpZGlvbXMgc2Vl
bSBjb21tb24gZW5vdWdoIHRvIGJlIHNoYXJlZC4KICAgICBERVZfQlJBTkNIRVMgPSByZS5jb21w
aWxlKHInLipbKGVuZykoZGV2KShidWcpXS8uKycpCiAgICAgUFJPRF9CUkFOQ0hFUyA9IHJlLmNv
bXBpbGUocidcUystW1xkK1wuXSstYnJhbmNoJykKKyAgICBHSVRfU1ZOX1JFVklTSU9OID0gcmUu
Y29tcGlsZShyJ2dpdC1zdm4taWQ6IFxTKzpcL1wvLitAKD9QPHJldmlzaW9uPlxkKykgListList
ListLisnKQogCiAgICAgZGVmIF9faW5pdF9fKHNlbGYsIGRldl9icmFuY2hlcz1Ob25lLCBwcm9k
X2JyYW5jaGVzPU5vbmUsIGNvbnRyaWJ1dG9ycz1Ob25lKToKICAgICAgICAgc2VsZi5kZXZfYnJh
bmNoZXMgPSBkZXZfYnJhbmNoZXMgb3Igc2VsZi5ERVZfQlJBTkNIRVMKSW5kZXg6IFRvb2xzL1Nj
cmlwdHMvbGlicmFyaWVzL3dlYmtpdHNjbXB5L3dlYmtpdHNjbXB5L2xvY2FsL2dpdC5weQo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBUb29scy9TY3JpcHRzL2xpYnJhcmllcy93ZWJraXRzY21weS93ZWJraXRzY21w
eS9sb2NhbC9naXQucHkJKHJldmlzaW9uIDI3MDUwOSkKKysrIFRvb2xzL1NjcmlwdHMvbGlicmFy
aWVzL3dlYmtpdHNjbXB5L3dlYmtpdHNjbXB5L2xvY2FsL2dpdC5weQkod29ya2luZyBjb3B5KQpA
QCAtMzEsNyArMzEsNiBAQCBmcm9tIHdlYmtpdHNjbXB5IGltcG9ydCBDb21taXQsIENvbnRyaWJ1
CiAKIGNsYXNzIEdpdChTY20pOgogICAgIEdJVF9DT01NSVQgPSByZS5jb21waWxlKHInY29tbWl0
ICg/UDxoYXNoPlswLTlhLWZdKyknKQotICAgIEdJVF9TVk5fUkVWSVNJT04gPSByZS5jb21waWxl
KHInZ2l0LXN2bi1pZDogXFMrOlwvXC8uK0AoP1A8cmV2aXNpb24+XGQrKSAuKy0uKy0uKy0uKycp
CiAKICAgICBAY2xhc3NtZXRob2QKICAgICBAZGVjb3JhdG9ycy5NZW1vaXplKCkKSW5kZXg6IFRv
b2xzL1NjcmlwdHMvbGlicmFyaWVzL3dlYmtpdHNjbXB5L3dlYmtpdHNjbXB5L21vY2tzL3JlbW90
ZS9fX2luaXRfXy5weQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9TY3JpcHRzL2xpYnJhcmllcy93ZWJr
aXRzY21weS93ZWJraXRzY21weS9tb2Nrcy9yZW1vdGUvX19pbml0X18ucHkJKHJldmlzaW9uIDI3
MDUwOSkKKysrIFRvb2xzL1NjcmlwdHMvbGlicmFyaWVzL3dlYmtpdHNjbXB5L3dlYmtpdHNjbXB5
L21vY2tzL3JlbW90ZS9fX2luaXRfXy5weQkod29ya2luZyBjb3B5KQpAQCAtMjAsNCArMjAsNSBA
QAogIyBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQogIyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgogCitmcm9tIHdlYmtpdHNj
bXB5Lm1vY2tzLnJlbW90ZS5naXRfaHViIGltcG9ydCBHaXRIdWIKIGZyb20gd2Via2l0c2NtcHku
bW9ja3MucmVtb3RlLnN2biBpbXBvcnQgU3ZuCkluZGV4OiBUb29scy9TY3JpcHRzL2xpYnJhcmll
cy93ZWJraXRzY21weS93ZWJraXRzY21weS9tb2Nrcy9yZW1vdGUvZ2l0X2h1Yi5weQo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBUb29scy9TY3JpcHRzL2xpYnJhcmllcy93ZWJraXRzY21weS93ZWJraXRzY21weS9t
b2Nrcy9yZW1vdGUvZ2l0X2h1Yi5weQkobm9uZXhpc3RlbnQpCisrKyBUb29scy9TY3JpcHRzL2xp
YnJhcmllcy93ZWJraXRzY21weS93ZWJraXRzY21weS9tb2Nrcy9yZW1vdGUvZ2l0X2h1Yi5weQko
d29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDI4MyBAQAorIyBDb3B5cmlnaHQgKEMpIDIwMjAgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorIworIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMgbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisjIGFyZSBtZXQ6CisjIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorIyAyLiAgUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMg
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyMgICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisjCisjIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORAor
IyBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBUSEUgSU1QTElFRAorIyBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisjIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SCisjIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwKKyMgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IKKyMgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIKKyMgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKKyMgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyMg
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KKworaW1wb3J0IGpzb24KKworZnJvbSBkYXRldGltZSBpbXBvcnQgZGF0ZXRp
bWUKK2Zyb20gd2Via2l0Y29yZXB5IGltcG9ydCBtb2NrcworZnJvbSB3ZWJraXRzY21weSBpbXBv
cnQgQ29tbWl0LCBDb250cmlidXRvciwgcmVtb3RlIGFzIHNjbXJlbW90ZQorCisKK2NsYXNzIEdp
dEh1Yihtb2Nrcy5SZXF1ZXN0cyk6CisgICAgdG9wID0gTm9uZQorCisgICAgZGVmIF9faW5pdF9f
KAorICAgICAgICBzZWxmLCByZW1vdGU9J2dpdGh1Yi5jb20vV2ViS2l0L3dlYmtpdCcsCisgICAg
ICAgIGJyYW5jaGVzPU5vbmUsIHRhZ3M9Tm9uZSwgZGVmYXVsdF9icmFuY2g9J21haW4nLAorICAg
ICAgICBnaXRfc3ZuPUZhbHNlLAorICAgICk6CisgICAgICAgIGlmIG5vdCBzY21yZW1vdGUuR2l0
SHViLmlzX3dlYnNlcnZlcignaHR0cHM6Ly97fScuZm9ybWF0KHJlbW90ZSkpOgorICAgICAgICAg
ICAgcmFpc2UgVmFsdWVFcnJvcignInt9IiBpcyBub3QgYSB2YWxpZCBHaXRIdWIgcmVtb3RlJy5m
b3JtYXQocmVtb3RlKSkKKworICAgICAgICBzZWxmLmRlZmF1bHRfYnJhbmNoID0gZGVmYXVsdF9i
cmFuY2gKKyAgICAgICAgc2VsZi5yZW1vdGUgPSByZW1vdGUKKyAgICAgICAgc2VsZi5hcGlfcmVt
b3RlID0gJ2FwaS57fS9yZXBvcy97fScuZm9ybWF0KAorICAgICAgICAgICAgc2VsZi5yZW1vdGUu
c3BsaXQoJy8nKVswXSwKKyAgICAgICAgICAgICcvJy5qb2luKHNlbGYucmVtb3RlLnNwbGl0KCcv
JylbMTpdKSwKKyAgICAgICAgKQorICAgICAgICBzZWxmLmJyYW5jaGVzID0gYnJhbmNoZXMgb3Ig
W10KKyAgICAgICAgc2VsZi50YWdzID0gdGFncyBvciB7fQorCisgICAgICAgIHN1cGVyKEdpdEh1
Yiwgc2VsZikuX19pbml0X18oc2VsZi5yZW1vdGUuc3BsaXQoJy8nKVswXSwgc2VsZi5hcGlfcmVt
b3RlLnNwbGl0KCcvJylbMF0pCisKKyAgICAgICAgIyBQcm92aWRlIGEgcmVhc29uYWJsZSBzZXQg
b2YgY29tbWl0cyB0byB0ZXN0IGFnYWluc3QKKyAgICAgICAgY29udHJpYnV0b3IgPSBDb250cmli
dXRvcihuYW1lPSdKb25hdGhhbiBCZWRhcmQnLCBlbWFpbHM9WydqYmVkYXJkQGFwcGxlLmNvbSdd
KQorICAgICAgICBzZWxmLmNvbW1pdHMgPSB7CisgICAgICAgICAgICBkZWZhdWx0X2JyYW5jaDog
WworICAgICAgICAgICAgICAgIENvbW1pdCgKKyAgICAgICAgICAgICAgICAgICAgaWRlbnRpZmll
cj0nMUB7fScuZm9ybWF0KGRlZmF1bHRfYnJhbmNoKSwKKyAgICAgICAgICAgICAgICAgICAgaGFz
aD0nOWI4MzExZjI1YTc3YmExNDkyM2Q5ZDVhNjUzMjEwM2Y1NGFiZWZjYicsCisgICAgICAgICAg
ICAgICAgICAgIHJldmlzaW9uPTEgaWYgZ2l0X3N2biBlbHNlIE5vbmUsCisgICAgICAgICAgICAg
ICAgICAgIGF1dGhvcj1jb250cmlidXRvciwKKyAgICAgICAgICAgICAgICAgICAgdGltZXN0YW1w
PTE2MDE2NjAwMDAsCisgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2U9JzFzdCBjb21taXRcbics
CisgICAgICAgICAgICAgICAgKSwgQ29tbWl0KAorICAgICAgICAgICAgICAgICAgICBpZGVudGlm
aWVyPScyQHt9Jy5mb3JtYXQoZGVmYXVsdF9icmFuY2gpLAorICAgICAgICAgICAgICAgICAgICBo
YXNoPSdmZmY4M2JiMmQ5MTcxYjRkOTE5NmU5NzdlYjA1MDhmZDU3ZTdhMDhkJywKKyAgICAgICAg
ICAgICAgICAgICAgcmV2aXNpb249MiBpZiBnaXRfc3ZuIGVsc2UgTm9uZSwKKyAgICAgICAgICAg
ICAgICAgICAgYXV0aG9yPWNvbnRyaWJ1dG9yLAorICAgICAgICAgICAgICAgICAgICB0aW1lc3Rh
bXA9MTYwMTY2MTAwMCwKKyAgICAgICAgICAgICAgICAgICAgbWVzc2FnZT0nMm5kIGNvbW1pdFxu
JywKKyAgICAgICAgICAgICAgICApLCBDb21taXQoCisgICAgICAgICAgICAgICAgICAgIGlkZW50
aWZpZXI9JzNAe30nLmZvcm1hdChkZWZhdWx0X2JyYW5jaCksCisgICAgICAgICAgICAgICAgICAg
IGhhc2g9JzFhYmUyNWI0NDNlOTg1ZjkzYjkwZDgzMGU0YTdlMzczMTMzNmFmNGQnLAorICAgICAg
ICAgICAgICAgICAgICByZXZpc2lvbj00IGlmIGdpdF9zdm4gZWxzZSBOb25lLAorICAgICAgICAg
ICAgICAgICAgICBhdXRob3I9Y29udHJpYnV0b3IsCisgICAgICAgICAgICAgICAgICAgIHRpbWVz
dGFtcD0xNjAxNjYzMDAwLAorICAgICAgICAgICAgICAgICAgICBtZXNzYWdlPSc0dGggY29tbWl0
XG4nLAorICAgICAgICAgICAgICAgICksIENvbW1pdCgKKyAgICAgICAgICAgICAgICAgICAgaWRl
bnRpZmllcj0nNEB7fScuZm9ybWF0KGRlZmF1bHRfYnJhbmNoKSwKKyAgICAgICAgICAgICAgICAg
ICAgaGFzaD0nYmFlNWQxZTkwOTk5ZDRmOTE2YThhMTU4MTBjY2ZhNDNmMzdhMmZkNicsCisgICAg
ICAgICAgICAgICAgICAgIHJldmlzaW9uPTYgaWYgZ2l0X3N2biBlbHNlIE5vbmUsCisgICAgICAg
ICAgICAgICAgICAgIGF1dGhvcj1jb250cmlidXRvciwKKyAgICAgICAgICAgICAgICAgICAgdGlt
ZXN0YW1wPTE2MDE2NjUwMDAsCisgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2U9JzZ0aCBjb21t
aXRcbicsCisgICAgICAgICAgICAgICAgKSwKKyAgICAgICAgICAgIF0sICdicmFuY2gtYSc6IFsK
KyAgICAgICAgICAgICAgICBDb21taXQoCisgICAgICAgICAgICAgICAgICAgIGlkZW50aWZpZXI9
JzIuMUBicmFuY2gtYScsCisgICAgICAgICAgICAgICAgICAgIGhhc2g9J2EzMGNlODQ5NGJmMWFj
MjgwN2E2OTg0NGY3MjZiZTRhOTg0M2NhNTUnLAorICAgICAgICAgICAgICAgICAgICByZXZpc2lv
bj0zIGlmIGdpdF9zdm4gZWxzZSBOb25lLAorICAgICAgICAgICAgICAgICAgICBhdXRob3I9Y29u
dHJpYnV0b3IsCisgICAgICAgICAgICAgICAgICAgIHRpbWVzdGFtcD0xNjAxNjYyMDAwLAorICAg
ICAgICAgICAgICAgICAgICBtZXNzYWdlPSczcmQgY29tbWl0XG4nLAorICAgICAgICAgICAgICAg
ICksIENvbW1pdCgKKyAgICAgICAgICAgICAgICAgICAgaWRlbnRpZmllcj0nMi4yQGJyYW5jaC1h
JywKKyAgICAgICAgICAgICAgICAgICAgaGFzaD0nNjIxNjUyYWRkN2ZjNDE2MDk5YmQyMDYzMzY2
Y2MzOGZmNjFhZmUzNicsCisgICAgICAgICAgICAgICAgICAgIHJldmlzaW9uPTcgaWYgZ2l0X3N2
biBlbHNlIE5vbmUsCisgICAgICAgICAgICAgICAgICAgIGF1dGhvcj1jb250cmlidXRvciwKKyAg
ICAgICAgICAgICAgICAgICAgdGltZXN0YW1wPTE2MDE2NjYwMDAsCisgICAgICAgICAgICAgICAg
ICAgIG1lc3NhZ2U9Jzd0aCBjb21taXRcbicsCisgICAgICAgICAgICAgICAgKSwKKyAgICAgICAg
ICAgIF0sCisgICAgICAgIH0KKyAgICAgICAgc2VsZi5jb21taXRzWydicmFuY2gtYiddID0gWwor
ICAgICAgICAgICAgc2VsZi5jb21taXRzWydicmFuY2gtYSddWzBdLCBDb21taXQoCisgICAgICAg
ICAgICAgICAgaWRlbnRpZmllcj0nMi4yQGJyYW5jaC1iJywKKyAgICAgICAgICAgICAgICBoYXNo
PSczY2QzMmUzNTI0MTA1NjViYjU0MzgyMWZiZjg1NmE2ZDNjYWFkMWM0JywKKyAgICAgICAgICAg
ICAgICByZXZpc2lvbj01IGlmIGdpdF9zdm4gZWxzZSBOb25lLAorICAgICAgICAgICAgICAgIGF1
dGhvcj1jb250cmlidXRvciwKKyAgICAgICAgICAgICAgICB0aW1lc3RhbXA9MTYwMTY2NDAwMCwK
KyAgICAgICAgICAgICAgICBtZXNzYWdlPSc1dGggY29tbWl0XG4nLAorICAgICAgICAgICAgKSwg
Q29tbWl0KAorICAgICAgICAgICAgICAgIGlkZW50aWZpZXI9JzIuM0BicmFuY2gtYicsCisgICAg
ICAgICAgICAgICAgaGFzaD0nNzkwNzI1YTZkNzllMjhkYjJlY2RkZTI5NTQ4ZDIyNjJjMGJkMDU5
ZCcsCisgICAgICAgICAgICAgICAgcmV2aXNpb249OCBpZiBnaXRfc3ZuIGVsc2UgTm9uZSwKKyAg
ICAgICAgICAgICAgICBhdXRob3I9Y29udHJpYnV0b3IsCisgICAgICAgICAgICAgICAgdGltZXN0
YW1wPTE2MDE2NjcwMDAsCisgICAgICAgICAgICAgICAgbWVzc2FnZT0nOHRoIGNvbW1pdFxuJywK
KyAgICAgICAgICAgICksCisgICAgICAgIF0KKyAgICAgICAgc2VsZi5oZWFkID0gc2VsZi5jb21t
aXRzW3NlbGYuZGVmYXVsdF9icmFuY2hdWzNdCisKKyAgICAgICAgc2VsZi50YWdzWyd0YWctMSdd
ID0gc2VsZi5jb21taXRzWydicmFuY2gtYSddWy0xXQorICAgICAgICBzZWxmLnRhZ3NbJ3RhZy0y
J10gPSBzZWxmLmNvbW1pdHNbJ2JyYW5jaC1iJ11bLTFdCisKKyAgICBkZWYgY29tbWl0KHNlbGYs
IHJlZik6CisgICAgICAgIGlmIHJlZiBpbiBzZWxmLmNvbW1pdHM6CisgICAgICAgICAgICByZXR1
cm4gc2VsZi5jb21taXRzW3JlZl1bLTFdCisgICAgICAgIGlmIHJlZiBpbiBzZWxmLnRhZ3M6Cisg
ICAgICAgICAgICByZXR1cm4gc2VsZi50YWdzW3JlZl0KKworICAgICAgICBmb3IgYnJhbmNoLCBj
b21taXRzIGluIHNlbGYuY29tbWl0cy5pdGVtcygpOgorICAgICAgICAgICAgZm9yIGNvbW1pdCBp
biBjb21taXRzOgorICAgICAgICAgICAgICAgIGlmIGNvbW1pdC5oYXNoLnN0YXJ0c3dpdGgocmVm
KToKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNvbW1pdAorCisgICAgICAgIGlmICd+JyBu
b3QgaW4gcmVmOgorICAgICAgICAgICAgcmV0dXJuIE5vbmUKKyAgICAgICAgcmVmLCBkZWx0YSA9
IHJlZi5zcGxpdCgnficpCisgICAgICAgIGNvbW1pdCA9IHNlbGYuY29tbWl0KHJlZikKKyAgICAg
ICAgaWYgbm90IGNvbW1pdDoKKyAgICAgICAgICAgIHJldHVybiBOb25lCisgICAgICAgIGRlbHRh
ID0gaW50KGRlbHRhKQorCisgICAgICAgIGlmIGRlbHRhIDwgY29tbWl0LmlkZW50aWZpZXI6Cisg
ICAgICAgICAgICByZXR1cm4gc2VsZi5jb21taXRzW2NvbW1pdC5icmFuY2hdW2NvbW1pdC5pZGVu
dGlmaWVyIC0gZGVsdGEgLSAxXQorICAgICAgICBkZWx0YSAtPSBjb21taXQuaWRlbnRpZmllcgor
ICAgICAgICBpZiBkZWx0YSA8IGNvbW1pdC5icmFuY2hfcG9pbnQ6CisgICAgICAgICAgICByZXR1
cm4gc2VsZi5jb21taXRzW3NlbGYuZGVmYXVsdF9icmFuY2hdW2NvbW1pdC5icmFuY2hfcG9pbnQg
LSBkZWx0YSAtIDFdCisgICAgICAgIHJldHVybiBOb25lCisKKyAgICBkZWYgcmVxdWVzdChzZWxm
LCBtZXRob2QsIHVybCwgZGF0YT1Ob25lLCAqKmt3YXJncyk6CisgICAgICAgIGlmIG5vdCB1cmwu
c3RhcnRzd2l0aCgnaHR0cDovLycpIGFuZCBub3QgdXJsLnN0YXJ0c3dpdGgoJ2h0dHBzOi8vJyk6
CisgICAgICAgICAgICByZXR1cm4gbW9ja3MuUmVzcG9uc2UuY3JlYXRlNDA0KHVybCkKKworICAg
ICAgICBzdHJpcHBlZF91cmwgPSB1cmwuc3BsaXQoJzovLycpWy0xXQorCisgICAgICAgICMgVG9w
LWxldmVsIEFQSSByZXF1ZXN0CisgICAgICAgIGlmIHN0cmlwcGVkX3VybCA9PSBzZWxmLmFwaV9y
ZW1vdGU6CisgICAgICAgICAgICByZXR1cm4gbW9ja3MuUmVzcG9uc2UuZnJvbUpzb24oeworICAg
ICAgICAgICAgICAgICdpZCc6IDEsCisgICAgICAgICAgICAgICAgJ25hbWUnOiBzZWxmLnJlbW90
ZS5zcGxpdCgnLycpWzJdLAorICAgICAgICAgICAgICAgICd1cmwnOiB1cmwsCisgICAgICAgICAg
ICAgICAgJ2RlZmF1bHRfYnJhbmNoJzogc2VsZi5kZWZhdWx0X2JyYW5jaCwKKyAgICAgICAgICAg
ICAgICAnb3duZXInOiB7CisgICAgICAgICAgICAgICAgICAgICdsb2dpbic6IHNlbGYucmVtb3Rl
LnNwbGl0KCcvJylbMV0sCisgICAgICAgICAgICAgICAgfSwgJ29yZ2FuaXphdGlvbic6IHsKKyAg
ICAgICAgICAgICAgICAgICAgJ2xvZ2luJzogc2VsZi5yZW1vdGUuc3BsaXQoJy8nKVsxXSwKKyAg
ICAgICAgICAgICAgICB9LCAnaHRtbF91cmwnOiBzZWxmLnJlbW90ZSwKKyAgICAgICAgICAgIH0s
IHVybD11cmwpCisKKyAgICAgICAgIyBCcmFuY2hlcy9UYWdzCisgICAgICAgIGlmIHN0cmlwcGVk
X3VybCBpbiBbJ3t9L2JyYW5jaGVzJy5mb3JtYXQoc2VsZi5hcGlfcmVtb3RlKSwgJ3t9L3RhZ3Mn
LmZvcm1hdChzZWxmLmFwaV9yZW1vdGUpXToKKyAgICAgICAgICAgIHJldHVybiBtb2Nrcy5SZXNw
b25zZS5mcm9tSnNvbihbCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAn
bmFtZSc6IHJlZmVyZW5jZSwKKyAgICAgICAgICAgICAgICAgICAgJ2NvbW1pdCc6IHsKKyAgICAg
ICAgICAgICAgICAgICAgICAgICdzaGEnOiBjb21taXRbLTFdLmhhc2ggaWYgaXNpbnN0YW5jZShj
b21taXQsIGxpc3QpIGVsc2UgY29tbWl0Lmhhc2gsCisgICAgICAgICAgICAgICAgICAgICAgICAn
dXJsJzogJ2h0dHBzOi8ve30vY29tbWl0cy97fScuZm9ybWF0KHNlbGYuYXBpX3JlbW90ZSwgY29t
bWl0Wy0xXS5oYXNoIGlmIGlzaW5zdGFuY2UoY29tbWl0LCBsaXN0KSBlbHNlIGNvbW1pdC5oYXNo
KSwKKyAgICAgICAgICAgICAgICAgICAgfSwKKyAgICAgICAgICAgICAgICB9IGZvciByZWZlcmVu
Y2UsIGNvbW1pdCBpbiAoc2VsZi5jb21taXRzIGlmIHN0cmlwcGVkX3VybC5lbmRzd2l0aCgnYnJh
bmNoZXMnKSBlbHNlIHNlbGYudGFncykuaXRlbXMoKQorICAgICAgICAgICAgXSwgdXJsPXVybCkK
KworICAgICAgICAjIEV4dHJhY3Qgc2luZ2xlIGNvbW1pdAorICAgICAgICBpZiBzdHJpcHBlZF91
cmwuc3RhcnRzd2l0aCgne30vY29tbWl0cy8nLmZvcm1hdChzZWxmLmFwaV9yZW1vdGUpKToKKyAg
ICAgICAgICAgIGNvbW1pdCA9IHNlbGYuY29tbWl0KHN0cmlwcGVkX3VybC5zcGxpdCgnLycpWy0x
XSkKKyAgICAgICAgICAgIGlmIG5vdCBjb21taXQ6CisgICAgICAgICAgICAgICAgcmV0dXJuIG1v
Y2tzLlJlc3BvbnNlKAorICAgICAgICAgICAgICAgICAgICBzdGF0dXNfY29kZT00MDQsCisgICAg
ICAgICAgICAgICAgICAgIHVybD11cmwsCisgICAgICAgICAgICAgICAgICAgIHRleHQ9anNvbi5k
dW1wcyhkaWN0KG1lc3NhZ2U9J05vIGNvbW1pdCBmb3VuZCBmb3IgU0hBOiB7fScuZm9ybWF0KHN0
cmlwcGVkX3VybC5zcGxpdCgnLycpWy0xXSkpKSwKKyAgICAgICAgICAgICAgICApCisgICAgICAg
ICAgICByZXR1cm4gbW9ja3MuUmVzcG9uc2UuZnJvbUpzb24oeworICAgICAgICAgICAgICAgICdz
aGEnOiBjb21taXQuaGFzaCwKKyAgICAgICAgICAgICAgICAnY29tbWl0JzogeworICAgICAgICAg
ICAgICAgICAgICAnYXV0aG9yJzogeworICAgICAgICAgICAgICAgICAgICAgICAgJ25hbWUnOiBj
b21taXQuYXV0aG9yLm5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAnZW1haWwnOiBjb21t
aXQuYXV0aG9yLmVtYWlsLAorICAgICAgICAgICAgICAgICAgICAgICAgJ2RhdGUnOiBkYXRldGlt
ZS5mcm9tdGltZXN0YW1wKGNvbW1pdC50aW1lc3RhbXApLnN0cmZ0aW1lKCclWS0lbS0lZFQlSDol
TTolU1onKSwKKyAgICAgICAgICAgICAgICAgICAgfSwgJ2NvbW1pdHRlcic6IHsKKyAgICAgICAg
ICAgICAgICAgICAgICAgICduYW1lJzogY29tbWl0LmF1dGhvci5uYW1lLAorICAgICAgICAgICAg
ICAgICAgICAgICAgJ2VtYWlsJzogY29tbWl0LmF1dGhvci5lbWFpbCwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICdkYXRlJzogZGF0ZXRpbWUuZnJvbXRpbWVzdGFtcChjb21taXQudGltZXN0YW1w
KS5zdHJmdGltZSgnJVktJW0tJWRUJUg6JU06JVNaJyksCisgICAgICAgICAgICAgICAgICAgIH0s
ICdtZXNzYWdlJzogY29tbWl0Lm1lc3NhZ2UsCisgICAgICAgICAgICAgICAgICAgICd1cmwnOiAn
aHR0cHM6Ly97fS9naXQvY29tbWl0cy97fScuZm9ybWF0KHNlbGYuYXBpX3JlbW90ZSwgY29tbWl0
Lmhhc2gpLAorICAgICAgICAgICAgICAgIH0sICd1cmwnOiAnaHR0cHM6Ly97fS9jb21taXRzL3t9
Jy5mb3JtYXQoc2VsZi5hcGlfcmVtb3RlLCBjb21taXQuaGFzaCksCisgICAgICAgICAgICAgICAg
J2h0bWxfdXJsJzogJ2h0dHBzOi8ve30vY29tbWl0L3t9Jy5mb3JtYXQoc2VsZi5yZW1vdGUsIGNv
bW1pdC5oYXNoKSwKKyAgICAgICAgICAgIH0sIHVybD11cmwpCisKKyAgICAgICAgIyBDb21wYXJl
IHR3byBjb21taXRzCisgICAgICAgIGlmIHN0cmlwcGVkX3VybC5zdGFydHN3aXRoKCd7fS9jb21w
YXJlLycuZm9ybWF0KHNlbGYuYXBpX3JlbW90ZSkpOgorICAgICAgICAgICAgcmVmX2EsIHJlZl9i
ID0gc3RyaXBwZWRfdXJsLnNwbGl0KCcvJylbLTFdLnNwbGl0KCcuLi4nKQorICAgICAgICAgICAg
Y29tbWl0X2EgPSBzZWxmLmNvbW1pdChyZWZfYSkKKyAgICAgICAgICAgIGNvbW1pdF9iID0gc2Vs
Zi5jb21taXQocmVmX2IpCisgICAgICAgICAgICBpZiBub3QgY29tbWl0X2Egb3Igbm90IGNvbW1p
dF9iOgorICAgICAgICAgICAgICAgIHJldHVybiBtb2Nrcy5SZXNwb25zZSgKKyAgICAgICAgICAg
ICAgICAgICAgc3RhdHVzX2NvZGU9NDA0LAorICAgICAgICAgICAgICAgICAgICB1cmw9dXJsLAor
ICAgICAgICAgICAgICAgICAgICB0ZXh0PWpzb24uZHVtcHMoZGljdChtZXNzYWdlPSdOb3QgZm91
bmQnKSksCisgICAgICAgICAgICAgICAgKQorCisgICAgICAgICAgICBpZiBjb21taXRfYS5icmFu
Y2ggIT0gc2VsZi5kZWZhdWx0X2JyYW5jaCBvciBjb21taXRfYi5icmFuY2ggPT0gc2VsZi5kZWZh
dWx0X2JyYW5jaDoKKyAgICAgICAgICAgICAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yKCdU
aGlzIGlzIGEgdmFsaWQgY29tcGFyaXNvbiBjb21tYW5kLCBidXQgaGFzIG5vdCBiZWVuIGltcGxl
bWVudGVkIGluIHRoZSBtb2NrIEdpdEh1YiBBUEknKQorCisgICAgICAgICAgICByZXR1cm4gbW9j
a3MuUmVzcG9uc2UuZnJvbUpzb24oeworICAgICAgICAgICAgICAgICdzdGF0dXMnOiAnZGl2ZXJn
ZWQnLAorICAgICAgICAgICAgICAgICdhaGVhZF9ieSc6IGNvbW1pdF9iLmlkZW50aWZpZXIsCisg
ICAgICAgICAgICAgICAgJ2JlaGluZF9ieSc6IGNvbW1pdF9hLmlkZW50aWZpZXIgLSBjb21taXRf
Yi5icmFuY2hfcG9pbnQsCisgICAgICAgICAgICB9LCB1cmw9dXJsKQorCisgICAgICAgICMgTGlz
dCBicmFuY2hlcyBhIGNvbW1pdCBvY2N1cnMgb24KKyAgICAgICAgaWYgc3RyaXBwZWRfdXJsLnN0
YXJ0c3dpdGgoJ3t9L2JyYW5jaF9jb21taXRzLycuZm9ybWF0KHNlbGYucmVtb3RlKSk6CisgICAg
ICAgICAgICBjb21taXQgPSBzZWxmLmNvbW1pdChzdHJpcHBlZF91cmwuc3BsaXQoJy8nKVstMV0p
CisgICAgICAgICAgICBpZiBub3QgY29tbWl0OgorICAgICAgICAgICAgICAgIHJldHVybiBtb2Nr
cy5SZXNwb25zZS5jcmVhdGU0MDQodXJsKQorICAgICAgICAgICAgcmV0dXJuIG1vY2tzLlJlc3Bv
bnNlLmZyb21UZXh0KAorICAgICAgICAgICAgICAgICdcblxuICAgIDxzdmcgY2xhc3M9Im9jdGlj
b24gb2N0aWNvbi1naXQtYnJhbmNoIj48cGF0aD48L3BhdGg+PC9zdmc+XG4nCisgICAgICAgICAg
ICAgICAgJyAgICA8dWwgY2xhc3M9ImJyYW5jaGVzLWxpc3QiPlxuJworICAgICAgICAgICAgICAg
ICcgICAgICAgIDxsaSBjbGFzcz0iYnJhbmNoIj48YSBocmVmPSIve30iPnt9PC9hPjwvbGk+XG4n
CisgICAgICAgICAgICAgICAgJyAgICA8L3VsPlxuJy5mb3JtYXQoCisgICAgICAgICAgICAgICAg
ICAgICcvJy5qb2luKHNlbGYucmVtb3RlLnNwbGl0KCcvJylbMTpdKSwKKyAgICAgICAgICAgICAg
ICAgICAgY29tbWl0LmJyYW5jaCwKKyAgICAgICAgICAgICAgICApLCB1cmw9dXJsCisgICAgICAg
ICAgICApCisKKyAgICAgICAgIyBGaW5kIHRoZSBudW1iZXIgb2YgcGFyZW50cyBhIGNvbW1pdCBo
YXMKKyAgICAgICAgaWYgc3RyaXBwZWRfdXJsLnN0YXJ0c3dpdGgoJ3t9L3RyZWUvJy5mb3JtYXQo
c2VsZi5yZW1vdGUpKToKKyAgICAgICAgICAgIGNvbW1pdCA9IHNlbGYuY29tbWl0KHN0cmlwcGVk
X3VybC5zcGxpdCgnLycpWy0xXSkKKyAgICAgICAgICAgIGlmIG5vdCBjb21taXQ6CisgICAgICAg
ICAgICAgICAgcmV0dXJuIG1vY2tzLlJlc3BvbnNlLmNyZWF0ZTQwNCh1cmwpCisKKyAgICAgICAg
ICAgICMgVGhpcyByZXNwb25zZSBpcyBhYmJyZXZpYXRlZCBzaW5jZSBtb3N0IGlzIHVudXNlZAor
ICAgICAgICAgICAgcmV0dXJuIG1vY2tzLlJlc3BvbnNlLmZyb21UZXh0KAorICAgICAgICAgICAg
ICAgICdcblxuXG5cbjwhRE9DVFlQRSBodG1sPlxuJworICAgICAgICAgICAgICAgICc8aHRtbCBs
YW5nPSJlbiI+XG4nCisgICAgICAgICAgICAgICAgJy4uLlxuJworICAgICAgICAgICAgICAgICc8
ZGl2IGNsYXNzPSJCb3ggbWItMyI+XG4nCisgICAgICAgICAgICAgICAgJyAgICA8ZGl2IGNsYXNz
PSJCb3gtaGVhZGVyIEJveC1oZWFkZXItLWJsdWUgcG9zaXRpb24tcmVsYXRpdmUiPlxuJworICAg
ICAgICAgICAgICAgICcgICAgICAgIDxoMiBjbGFzcz0ic3Itb25seSI+TGF0ZXN0IGNvbW1pdDwv
aDI+XG4nCisgICAgICAgICAgICAgICAgJyAgICAgICAgPGRpdiBjbGFzcz0iLi4uIiBkYXRhLWlz
c3VlLWFuZC1wci1ob3ZlcmNhcmRzLWVuYWJsZWQ+XG4nCisgICAgICAgICAgICAgICAgJyAgICAg
ICAgICAgIDxpbmNsdWRlLWZyYWdtZW50IHNyYz0iL1dlYktpdC93ZWJraXQvdHJlZS1jb21taXQv
e3JlZn0iIGFyaWEtbGFiZWw9IkxvYWRpbmcgbGF0ZXN0IGNvbW1pdCI+XG4nCisgICAgICAgICAg
ICAgICAgJyAgICAgICAgICAgIDwvaW5jbHVkZS1mcmFnbWVudD5cbicKKyAgICAgICAgICAgICAg
ICAnICAgICAgICA8dWwgY2xhc3M9Imxpc3Qtc3R5bGUtbm9uZSBkLWZsZXgiPlxuJworICAgICAg
ICAgICAgICAgICcgICAgICAgICAgICA8bGkgY2xhc3M9Im1sLTAgbWwtbWQtMyI+XG4nCisgICAg
ICAgICAgICAgICAgJyAgICAgICAgICAgICAgICA8YSBkYXRhLXBqYXggaHJlZj0iL1dlYktpdC93
ZWJraXQvY29tbWl0cy97cmVmfSI+XG4nCisgICAgICAgICAgICAgICAgJyAgICAgICAgICAgICAg
ICAgICAgPHN2ZyBjbGFzcz0ib2N0aWNvbiBvY3RpY29uLWhpc3RvcnkgdGV4dC1ncmF5Ij48cGF0
aD48L3BhdGg+PC9zdmc+XG4nCisgICAgICAgICAgICAgICAgJyAgICAgICAgICAgICAgICAgICAg
PHNwYW4gY2xhc3M9ImQtbm9uZSBkLXNtLWlubGluZSI+XG4nCisgICAgICAgICAgICAgICAgJyAg
ICAgICAgICAgICAgICAgICAgICAgIDxzdHJvbmc+e2NvdW50fTwvc3Ryb25nPlxuJworICAgICAg
ICAgICAgICAgICcgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBhcmlhLWxhYmVsPSJDb21t
aXRzIG9uICIgY2xhc3M9Ii4uLiI+Y29tbWl0czwvc3Bhbj5cbicKKyAgICAgICAgICAgICAgICAn
ICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuJworICAgICAgICAgICAgICAgICcgICAg
ICAgICAgICAgICAgPC9hPlxuJworICAgICAgICAgICAgICAgICcgICAgICAgICAgICA8L2xpPlxu
JworICAgICAgICAgICAgICAgICcgICAgICAgIDwvdWw+XG4nCisgICAgICAgICAgICAgICAgJyAg
ICAgICAgPC9kaXY+XG4nCisgICAgICAgICAgICAgICAgJyAgICA8L2Rpdj5cbicKKyAgICAgICAg
ICAgICAgICAnPC9kaXY+XG4nCisgICAgICAgICAgICAgICAgJy4uLlxuJworICAgICAgICAgICAg
ICAgICc8L2h0bWw+XG4nLmZvcm1hdCgKKyAgICAgICAgICAgICAgICAgICAgcmVmPWNvbW1pdC5o
YXNoLAorICAgICAgICAgICAgICAgICAgICBjb3VudD1jb21taXQuaWRlbnRpZmllciArIChjb21t
aXQuYnJhbmNoX3BvaW50IG9yIDApLAorICAgICAgICAgICAgICAgICksIHVybD11cmwKKyAgICAg
ICAgICAgICkKKworICAgICAgICByZXR1cm4gbW9ja3MuUmVzcG9uc2UuY3JlYXRlNDA0KHVybCkK
SW5kZXg6IFRvb2xzL1NjcmlwdHMvbGlicmFyaWVzL3dlYmtpdHNjbXB5L3dlYmtpdHNjbXB5L3Jl
bW90ZS9fX2luaXRfXy5weQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9TY3JpcHRzL2xpYnJhcmllcy93
ZWJraXRzY21weS93ZWJraXRzY21weS9yZW1vdGUvX19pbml0X18ucHkJKHJldmlzaW9uIDI3MDUw
OSkKKysrIFRvb2xzL1NjcmlwdHMvbGlicmFyaWVzL3dlYmtpdHNjbXB5L3dlYmtpdHNjbXB5L3Jl
bW90ZS9fX2luaXRfXy5weQkod29ya2luZyBjb3B5KQpAQCAtMjIsMyArMjIsNCBAQAogCiBmcm9t
IHdlYmtpdHNjbXB5LnJlbW90ZS5zY20gaW1wb3J0IFNjbQogZnJvbSB3ZWJraXRzY21weS5yZW1v
dGUuc3ZuIGltcG9ydCBTdm4KK2Zyb20gd2Via2l0c2NtcHkucmVtb3RlLmdpdF9odWIgaW1wb3J0
IEdpdEh1YgpJbmRleDogVG9vbHMvU2NyaXB0cy9saWJyYXJpZXMvd2Via2l0c2NtcHkvd2Via2l0
c2NtcHkvcmVtb3RlL2dpdF9odWIucHkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvU2NyaXB0cy9saWJy
YXJpZXMvd2Via2l0c2NtcHkvd2Via2l0c2NtcHkvcmVtb3RlL2dpdF9odWIucHkJKG5vbmV4aXN0
ZW50KQorKysgVG9vbHMvU2NyaXB0cy9saWJyYXJpZXMvd2Via2l0c2NtcHkvd2Via2l0c2NtcHkv
cmVtb3RlL2dpdF9odWIucHkJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwyNzQgQEAKKyMgQ29w
eXJpZ2h0IChDKSAyMDIwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisjIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworIyBhcmUgbWV0OgorIyAxLiAgUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyMgMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisjICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisjICAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorIwor
IyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklC
VVRPUlMgIkFTIElTIiBBTkQKKyMgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyMgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFS
RQorIyBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUgorIyBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCisjIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SCisjIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSCisjIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCisjIE9SIFRP
UlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFCisjIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisKK2ltcG9ydCBjYWxlbmRhcgoraW1wb3J0
IHJlCitpbXBvcnQgcmVxdWVzdHMKK2ltcG9ydCBzaXgKKworZnJvbSBkYXRldGltZSBpbXBvcnQg
ZGF0ZXRpbWUKK2Zyb20gd2Via2l0Y29yZXB5IGltcG9ydCBkZWNvcmF0b3JzCitmcm9tIHdlYmtp
dHNjbXB5IGltcG9ydCBDb21taXQsIENvbnRyaWJ1dG9yCitmcm9tIHdlYmtpdHNjbXB5LnJlbW90
ZS5zY20gaW1wb3J0IFNjbQorZnJvbSB4bWwuZG9tIGltcG9ydCBtaW5pZG9tCisKKworY2xhc3Mg
R2l0SHViKFNjbSk6CisgICAgVVJMX1JFID0gcmUuY29tcGlsZShyJ1xBaHR0cHM/Oi8vZ2l0aHVi
Lig/UDxkb21haW4+XFMrKS8oP1A8b3duZXI+XFMrKS8oP1A8cmVwb3NpdG9yeT5cUyspXFonKQor
ICAgIEVNQUlMX1JFID0gcmUuY29tcGlsZShyJyg/UDxlbWFpbD5bXkBdK0BbXkBdKykoQC4qKT8n
KQorCisgICAgQGNsYXNzbWV0aG9kCisgICAgZGVmIGlzX3dlYnNlcnZlcihjbHMsIHVybCk6Cisg
ICAgICAgIHJldHVybiBUcnVlIGlmIGNscy5VUkxfUkUubWF0Y2godXJsKSBlbHNlIEZhbHNlCisK
KyAgICBkZWYgX19pbml0X18oc2VsZiwgdXJsLCBkZXZfYnJhbmNoZXM9Tm9uZSwgcHJvZF9icmFu
Y2hlcz1Ob25lLCBjb250cmlidXRvcnM9Tm9uZSk6CisgICAgICAgIG1hdGNoID0gc2VsZi5VUkxf
UkUubWF0Y2godXJsKQorICAgICAgICBpZiBub3QgbWF0Y2g6CisgICAgICAgICAgICByYWlzZSBz
ZWxmLkV4Y2VwdGlvbigiJ3t9JyBpcyBub3QgYSB2YWxpZCBHaXRIdWIgcHJvamVjdCIuZm9ybWF0
KHVybCkpCisgICAgICAgIHNlbGYuYXBpX3VybCA9ICdodHRwczovL2FwaS5naXRodWIue30nLmZv
cm1hdChtYXRjaC5ncm91cCgnZG9tYWluJykpCisgICAgICAgIHNlbGYub3duZXIgPSBtYXRjaC5n
cm91cCgnb3duZXInKQorICAgICAgICBzZWxmLm5hbWUgPSBtYXRjaC5ncm91cCgncmVwb3NpdG9y
eScpCisgICAgICAgIHNlbGYuX2hhc2hfbGlua19yZSA9IHJlLmNvbXBpbGUocicve30ve30vY29t
bWl0cz8vKD9QPGhhc2g+WzAtOWEtZl0rKScuZm9ybWF0KAorICAgICAgICAgICAgc2VsZi5vd25l
ciwKKyAgICAgICAgICAgIHNlbGYubmFtZSwKKyAgICAgICAgKSkKKworICAgICAgICBzdXBlcihH
aXRIdWIsIHNlbGYpLl9faW5pdF9fKHVybCwgZGV2X2JyYW5jaGVzPWRldl9icmFuY2hlcywgcHJv
ZF9icmFuY2hlcz1wcm9kX2JyYW5jaGVzLCBjb250cmlidXRvcnM9Y29udHJpYnV0b3JzKQorCisg
ICAgQHByb3BlcnR5CisgICAgZGVmIGlzX2dpdChzZWxmKToKKyAgICAgICAgcmV0dXJuIFRydWUK
KworICAgIGRlZiByZXF1ZXN0KHNlbGYsIHBhdGg9Tm9uZSwgcGFyYW1zPU5vbmUsIGhlYWRlcnM9
Tm9uZSk6CisgICAgICAgIGhlYWRlcnMgPSB7a2V5OiB2YWx1ZSBmb3Iga2V5LCB2YWx1ZSBpbiBo
ZWFkZXJzLml0ZW1zKCl9IGlmIGhlYWRlcnMgZWxzZSBkaWN0KCkKKyAgICAgICAgaGVhZGVyc1sn
QWNjZXB0J10gPSBoZWFkZXJzLmdldCgnQWNjZXB0JywgJ2FwcGxpY2F0aW9uL3ZuZC5naXRodWIu
djMranNvbicpCisKKyAgICAgICAgcGFyYW1zID0ge2tleTogdmFsdWUgZm9yIGtleSwgdmFsdWUg
aW4gcGFyYW1zLml0ZW1zKCl9IGlmIHBhcmFtcyBlbHNlIGRpY3QoKQorICAgICAgICBwYXJhbXNb
J3Blcl9wYWdlJ10gPSBwYXJhbXMuZ2V0KCdwZXJfcGFnZScsIDEwMCkKKyAgICAgICAgcGFyYW1z
WydwYWdlJ10gPSBwYXJhbXMuZ2V0KCdwYWdlJywgMSkKKworICAgICAgICB1cmwgPSAne30vcmVw
b3Mve30ve317fScuZm9ybWF0KHNlbGYuYXBpX3VybCwgc2VsZi5vd25lciwgc2VsZi5uYW1lLCAn
L3t9Jy5mb3JtYXQocGF0aCkgaWYgcGF0aCBlbHNlICcnKQorICAgICAgICByZXNwb25zZSA9IHJl
cXVlc3RzLmdldCh1cmwsIHBhcmFtcz1wYXJhbXMsIGhlYWRlcnM9aGVhZGVycykKKyAgICAgICAg
aWYgcmVzcG9uc2Uuc3RhdHVzX2NvZGUgIT0gMjAwOgorICAgICAgICAgICAgcmV0dXJuIE5vbmUK
KyAgICAgICAgcmVzdWx0ID0gcmVzcG9uc2UuanNvbigpCisKKyAgICAgICAgd2hpbGUgaXNpbnN0
YW5jZShyZXNwb25zZS5qc29uKCksIGxpc3QpIGFuZCBsZW4ocmVzcG9uc2UuanNvbigpKSA9PSBw
YXJhbXNbJ3Blcl9wYWdlJ106CisgICAgICAgICAgICBwYXJhbXNbJ3BhZ2UnXSArPSAxCisgICAg
ICAgICAgICByZXNwb25zZSA9IHJlcXVlc3RzLmdldCh1cmwsIHBhcmFtcz1wYXJhbXMsIGhlYWRl
cnM9aGVhZGVycykKKyAgICAgICAgICAgIGlmIHJlc3BvbnNlLnN0YXR1c19jb2RlICE9IDIwMDoK
KyAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0CisgICAgICAgICAgICByZXN1bHQgKz0gcmVz
cG9uc2UuanNvbigpCisgICAgICAgIHJldHVybiByZXN1bHQKKworICAgIGRlZiBfY291bnQoc2Vs
ZiwgcmVmPU5vbmUpOgorICAgICAgICByZWYgPSByZWYgb3Igc2VsZi5kZWZhdWx0X2JyYW5jaAor
CisgICAgICAgICMgV2UgbmVlZCB0aGUgbnVtYmVyIG9mIHBhcmVudHMgYSBjb21taXQgaGFzIHRv
IGNvbnN0cnVjdCBpZGVudGlmaWVycywgd2hpY2ggaXMgbm90IHNvbWV0aGluZyBHaXRIdWIncwor
ICAgICAgICAjIEFQSSBsZXRzIHVzIGZpbmQsIGFsdGhvdWdoIHRoZSBVSSBkb2VzIGhhdmUgdGhl
IGluZm9ybWF0aW9uCisgICAgICAgIHJlc3BvbnNlID0gcmVxdWVzdHMuZ2V0KCd7fS90cmVlL3t9
Jy5mb3JtYXQoc2VsZi51cmwsIHJlZikpCisgICAgICAgIGlmIHJlc3BvbnNlLnN0YXR1c19jb2Rl
ICE9IDIwMDoKKyAgICAgICAgICAgIHJhaXNlIHNlbGYuRXhjZXB0aW9uKCJGYWlsZWQgdG8gcXVl
cnkge30ncyBVSSB0byBmaW5kIHRoZSBudW1iZXIgb2YgcGFyZW50cyB7fSBoYXMiLmZvcm1hdChz
ZWxmLnVybCwgcmVmKSkKKworICAgICAgICAjIFRoaXMgcGFyc2luZyBpcyBwcmV0dHkgYnJpdHRs
ZSwgYnV0IHRoZSB3ZWJwYWdlIG1heSBub3QgYmUgdmFsaWQgeG1sCisgICAgICAgIGNvdW50ID0g
Tm9uZQorICAgICAgICBoYXNoID0gTm9uZQorICAgICAgICBwcmV2aW91cyA9IE5vbmUKKyAgICAg
ICAgZm9yIGxpbmUgaW4gcmVzcG9uc2UudGV4dC5zcGxpdGxpbmVzKCk6CisgICAgICAgICAgICBt
YXRjaCA9IHNlbGYuX2hhc2hfbGlua19yZS5zZWFyY2gobGluZSkKKyAgICAgICAgICAgIGlmIG1h
dGNoOgorICAgICAgICAgICAgICAgIGhhc2ggPSBtYXRjaC5ncm91cCgnaGFzaCcpCisgICAgICAg
ICAgICBlbGlmICdhcmlhLWxhYmVsPSJDb21taXRzIG9uICcgaW4gbGluZToKKyAgICAgICAgICAg
ICAgICBjb3VudCA9IGludChtaW5pZG9tLnBhcnNlU3RyaW5nKHByZXZpb3VzKS5kb2N1bWVudEVs
ZW1lbnQuY2hpbGROb2Rlc1swXS5kYXRhLnJlcGxhY2UoJywnLCAnJykpCisgICAgICAgICAgICAg
ICAgYnJlYWsKKyAgICAgICAgICAgIHByZXZpb3VzID0gbGluZQorCisgICAgICAgIGlmIG5vdCBo
YXNoIG9yIG5vdCBjb3VudDoKKyAgICAgICAgICAgIHJhaXNlIHNlbGYuRXhjZXB0aW9uKCJGYWls
ZWQgdG8gY29tcHV0ZSB0aGUgbnVtYmVyIG9mIHBhcmVudHMgdG8gJ3t9JyIuZm9ybWF0KHJlZikp
CisKKyAgICAgICAgcmV0dXJuIGNvdW50LCBoYXNoCisKKyAgICBkZWYgX2RpZmZlcmVuY2Uoc2Vs
ZiwgcmVmZXJlbmNlLCBoZWFkKToKKyAgICAgICAgcmVzcG9uc2UgPSBzZWxmLnJlcXVlc3QoJ2Nv
bXBhcmUve30uLi57fScuZm9ybWF0KHJlZmVyZW5jZSwgaGVhZCksIGhlYWRlcnM9ZGljdChBY2Nl
cHQ9J2FwcGxpY2F0aW9uL3ZuZC5naXRodWIuVkVSU0lPTi5zaGEnKSkKKyAgICAgICAgaWYgbm90
IHJlc3BvbnNlIG9yIG5vdCByZXNwb25zZS5nZXQoJ3N0YXR1cycpIGluIFsnZGl2ZXJnZWQnLCAn
YWhlYWQnLCAnYmVoaW5kJ106CisgICAgICAgICAgICByYWlzZSBzZWxmLkV4Y2VwdGlvbignRmFp
bGVkIHRvIHJlcXVlc3QgdGhlIGRpZmZlcmVuY2UgYmV0d2VlbiB7fSBhbmQge30nLmZvcm1hdChy
ZWZlcmVuY2UsIGhlYWQpKQorICAgICAgICByZXR1cm4gaW50KHJlc3BvbnNlWydiZWhpbmRfYnkn
IGlmIHJlc3BvbnNlLmdldCgnc3RhdHVzJykgPT0gJ2JlaGluZCcgZWxzZSAnYWhlYWRfYnknXSkK
KworICAgIGRlZiBfYnJhbmNoZXNfZm9yKHNlbGYsIGhhc2gpOgorICAgICAgICAjIFdlIG5lZWQg
dG8gZmluZCB0aGUgYnJhbmNoIHRoYXQgYSBjb21taXQgaXMgb24uIEdpdEh1YidzIFVJIHByb3Zp
ZGVzIHRoaXMgaW5mb3JtYXRpb24sIGJ1dCB0aGUgb25seSB3YXkgdG8KKyAgICAgICAgIyByZXRy
aWV2ZSB0aGlzIGluZm9ybWF0aW9uIHZpYSB0aGUgQVBJIHdvdWxkIGJlIHRvIGNoZWNrIGFsbCBi
cmFuY2hlcyBmb3IgdGhlIGNvbW1pdCwgc28gd2Ugc2NyYXBlIHRoZSBVSS4KKyAgICAgICAgcmVz
cG9uc2UgPSByZXF1ZXN0cy5nZXQoJ3t9L2JyYW5jaF9jb21taXRzL3t9Jy5mb3JtYXQoc2VsZi51
cmwsIGhhc2gpKQorICAgICAgICBpZiByZXNwb25zZS5zdGF0dXNfY29kZSAhPSAyMDA6CisgICAg
ICAgICAgICByZXR1cm4gW10KKworICAgICAgICByZXN1bHQgPSBbXQorICAgICAgICBmb3IgbGlu
ZSBpbiByZXNwb25zZS50ZXh0LnNwbGl0bGluZXMoKToKKyAgICAgICAgICAgIGlmICdjbGFzcz0i
YnJhbmNoIicgbm90IGluIGxpbmU6CisgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAg
ICAgIHJlc3VsdC5hcHBlbmQobWluaWRvbS5wYXJzZVN0cmluZyhsaW5lKS5kb2N1bWVudEVsZW1l
bnQuY2hpbGROb2Rlc1swXS5jaGlsZE5vZGVzWzBdLmRhdGEpCisKKyAgICAgICAgcmV0dXJuIHJl
c3VsdAorCisgICAgQHByb3BlcnR5CisgICAgQGRlY29yYXRvcnMuTWVtb2l6ZSgpCisgICAgZGVm
IGRlZmF1bHRfYnJhbmNoKHNlbGYpOgorICAgICAgICByZXNwb25zZSA9IHNlbGYucmVxdWVzdCgp
CisgICAgICAgIGlmIG5vdCByZXNwb25zZToKKyAgICAgICAgICAgIHJhaXNlIHNlbGYuRXhjZXB0
aW9uKCJGYWlsZWQgdG8gcXVlcnkge30gZm9yIHt9J3MgZGVmYXVsdCBicmFuY2giLmZvcm1hdChz
ZWxmLnVybCwgc2VsZi5uYW1lKSkKKyAgICAgICAgcmV0dXJuIHJlc3BvbnNlLmdldCgnZGVmYXVs
dF9icmFuY2gnLCAnbWFzdGVyJykKKworICAgIEBwcm9wZXJ0eQorICAgIGRlZiBicmFuY2hlcyhz
ZWxmKToKKyAgICAgICAgcmVzcG9uc2UgPSBzZWxmLnJlcXVlc3QoJ2JyYW5jaGVzJykKKyAgICAg
ICAgaWYgbm90IHJlc3BvbnNlOgorICAgICAgICAgICAgcmV0dXJuIFtzZWxmLmRlZmF1bHRfYnJh
bmNoXQorICAgICAgICByZXR1cm4gc29ydGVkKFtkZXRhaWxzLmdldCgnbmFtZScpIGZvciBkZXRh
aWxzIGluIHJlc3BvbnNlIGlmIGRldGFpbHMuZ2V0KCduYW1lJyldKQorCisgICAgQHByb3BlcnR5
CisgICAgZGVmIHRhZ3Moc2VsZik6CisgICAgICAgIHJlc3BvbnNlID0gc2VsZi5yZXF1ZXN0KCd0
YWdzJykKKyAgICAgICAgaWYgbm90IHJlc3BvbnNlOgorICAgICAgICAgICAgcmV0dXJuIFtdCisg
ICAgICAgIHJldHVybiBzb3J0ZWQoW2RldGFpbHMuZ2V0KCduYW1lJykgZm9yIGRldGFpbHMgaW4g
cmVzcG9uc2UgaWYgZGV0YWlscy5nZXQoJ25hbWUnKV0pCisKKyAgICBkZWYgY29tbWl0KHNlbGYs
IGhhc2g9Tm9uZSwgcmV2aXNpb249Tm9uZSwgaWRlbnRpZmllcj1Ob25lLCBicmFuY2g9Tm9uZSwg
dGFnPU5vbmUsIGluY2x1ZGVfbG9nPVRydWUpOgorICAgICAgICBpZiByZXZpc2lvbjoKKyAgICAg
ICAgICAgIHJhaXNlIHNlbGYuRXhjZXB0aW9uKCdDYW5ub3QgbWFwIHJldmlzaW9ucyB0byBjb21t
aXRzIG9uIEdpdEh1YicpCisKKyAgICAgICAgaWYgaWRlbnRpZmllciBpcyBub3QgTm9uZToKKyAg
ICAgICAgICAgIGlmIHJldmlzaW9uOgorICAgICAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3Io
J0Nhbm5vdCBkZWZpbmUgYm90aCByZXZpc2lvbiBhbmQgaWRlbnRpZmllcicpCisgICAgICAgICAg
ICBpZiBoYXNoOgorICAgICAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoJ0Nhbm5vdCBkZWZp
bmUgYm90aCBoYXNoIGFuZCBpZGVudGlmaWVyJykKKyAgICAgICAgICAgIGlmIHRhZzoKKyAgICAg
ICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCdDYW5ub3QgZGVmaW5lIGJvdGggdGFnIGFuZCBp
ZGVudGlmaWVyJykKKworICAgICAgICAgICAgcGFyc2VkX2JyYW5jaF9wb2ludCwgaWRlbnRpZmll
ciwgcGFyc2VkX2JyYW5jaCA9IENvbW1pdC5fcGFyc2VfaWRlbnRpZmllcihpZGVudGlmaWVyLCBk
b19hc3NlcnQ9VHJ1ZSkKKyAgICAgICAgICAgIGlmIHBhcnNlZF9icmFuY2g6CisgICAgICAgICAg
ICAgICAgaWYgYnJhbmNoIGFuZCBicmFuY2ggIT0gcGFyc2VkX2JyYW5jaDoKKyAgICAgICAgICAg
ICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcigKKyAgICAgICAgICAgICAgICAgICAgICAgICJDYWxs
ZXIgcGFzc2VkIGJvdGggJ2JyYW5jaCcgYW5kICdpZGVudGlmaWVyJywgYnV0IHNwZWNpZmllZCBk
aWZmZXJlbnQgYnJhbmNoZXMgKHt9IGFuZCB7fSkiLmZvcm1hdCgKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBicmFuY2gsIHBhcnNlZF9icmFuY2gsCisgICAgICAgICAgICAgICAgICAgICAg
ICApLAorICAgICAgICAgICAgICAgICAgICApCisgICAgICAgICAgICAgICAgYnJhbmNoID0gcGFy
c2VkX2JyYW5jaAorCisgICAgICAgICAgICBicmFuY2ggPSBicmFuY2ggb3Igc2VsZi5kZWZhdWx0
X2JyYW5jaAorICAgICAgICAgICAgaXNfZGVmYXVsdCA9IGJyYW5jaCA9PSBzZWxmLmRlZmF1bHRf
YnJhbmNoCisKKyAgICAgICAgICAgIGlmIGlzX2RlZmF1bHQgYW5kIHBhcnNlZF9icmFuY2hfcG9p
bnQ6CisgICAgICAgICAgICAgICAgcmFpc2Ugc2VsZi5FeGNlcHRpb24oJ0Nhbm5vdCBwcm92aWRl
IGEgYnJhbmNoIHBvaW50IGZvciBhIGNvbW1pdCBvbiB0aGUgZGVmYXVsdCBicmFuY2gnKQorCisg
ICAgICAgICAgICBpZiBpc19kZWZhdWx0OgorICAgICAgICAgICAgICAgIGJhc2VfY291bnQsIGJh
c2VfcmVmID0gc2VsZi5fY291bnQocmVmPXNlbGYuZGVmYXVsdF9icmFuY2gpCisgICAgICAgICAg
ICBlbHNlOgorICAgICAgICAgICAgICAgIF8sIGJhc2VfcmVmID0gc2VsZi5fY291bnQocmVmPWJy
YW5jaCkKKyAgICAgICAgICAgICAgICBiYXNlX2NvdW50ID0gc2VsZi5fZGlmZmVyZW5jZShzZWxm
LmRlZmF1bHRfYnJhbmNoLCBiYXNlX3JlZikKKworICAgICAgICAgICAgaWYgaWRlbnRpZmllciA+
IGJhc2VfY291bnQ6CisgICAgICAgICAgICAgICAgcmFpc2Ugc2VsZi5FeGNlcHRpb24oJ0lkZW50
aWZpZXIge30gY2Fubm90IGJlIGZvdW5kIG9uIHt9Jy5mb3JtYXQoaWRlbnRpZmllciwgYnJhbmNo
KSkKKworICAgICAgICAgICAgIyBOZWdhdGl2ZSBpZGVudGlmaWVycyBhcmUgYWN0dWFsbHkgY29t
bWl0cyBvbiB0aGUgZGVmYXVsdCBicmFuY2gsIHdlIHdpbGwgbmVlZCB0byByZS1jb21wdXRlIHRo
ZSBpZGVudGlmaWVyCisgICAgICAgICAgICBpZiBpZGVudGlmaWVyIDwgMCBhbmQgaXNfZGVmYXVs
dDoKKyAgICAgICAgICAgICAgICByYWlzZSBzZWxmLkV4Y2VwdGlvbignSWxsZWdhbCBuZWdhdGl2
ZSBpZGVudGlmaWVyIG9uIHRoZSBkZWZhdWx0IGJyYW5jaCcpCisKKyAgICAgICAgICAgIGNvbW1p
dF9kYXRhID0gc2VsZi5yZXF1ZXN0KCdjb21taXRzL3t9fnt9Jy5mb3JtYXQoYmFzZV9yZWYsIGJh
c2VfY291bnQgLSBpZGVudGlmaWVyKSkKKyAgICAgICAgICAgIGlmIG5vdCBjb21taXRfZGF0YToK
KyAgICAgICAgICAgICAgICByYWlzZSBzZWxmLkV4Y2VwdGlvbigiRmFpbGVkIHRvIHJldHJpZXZl
IGNvbW1pdCBpbmZvcm1hdGlvbiBmb3IgJ3t9QHt9JyIuZm9ybWF0KGlkZW50aWZpZXIsIGJyYW5j
aCBvciAnSEVBRCcpKQorCisgICAgICAgICAgICBpZiBpZGVudGlmaWVyIDwgMDoKKyAgICAgICAg
ICAgICAgICBpZGVudGlmaWVyID0gTm9uZQorCisgICAgICAgIGVsaWYgYnJhbmNoIG9yIHRhZzoK
KyAgICAgICAgICAgIGlmIGhhc2g6CisgICAgICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcign
Q2Fubm90IGRlZmluZSBib3RoIHRhZy9icmFuY2ggYW5kIGhhc2gnKQorICAgICAgICAgICAgaWYg
YnJhbmNoIGFuZCB0YWc6CisgICAgICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcignQ2Fubm90
IGRlZmluZSBib3RoIHRhZyBhbmQgYnJhbmNoJykKKyAgICAgICAgICAgIGNvbW1pdF9kYXRhID0g
c2VsZi5yZXF1ZXN0KCdjb21taXRzL3t9Jy5mb3JtYXQoYnJhbmNoIG9yIHRhZykpCisgICAgICAg
ICAgICBpZiBub3QgY29tbWl0X2RhdGE6CisgICAgICAgICAgICAgICAgcmFpc2Ugc2VsZi5FeGNl
cHRpb24oIkZhaWxlZCB0byByZXRyaWV2ZSBjb21taXQgaW5mb3JtYXRpb24gZm9yICd7fSciLmZv
cm1hdChicmFuY2ggb3IgdGFnKSkKKworICAgICAgICBlbHNlOgorICAgICAgICAgICAgaGFzaCA9
IENvbW1pdC5fcGFyc2VfaGFzaChoYXNoLCBkb19hc3NlcnQ9VHJ1ZSkKKyAgICAgICAgICAgIGNv
bW1pdF9kYXRhID0gc2VsZi5yZXF1ZXN0KCdjb21taXRzL3t9Jy5mb3JtYXQoaGFzaCBvciBzZWxm
LmRlZmF1bHRfYnJhbmNoKSkKKyAgICAgICAgICAgIGlmIG5vdCBjb21taXRfZGF0YToKKyAgICAg
ICAgICAgICAgICByYWlzZSBzZWxmLkV4Y2VwdGlvbigiRmFpbGVkIHRvIHJldHJpZXZlIGNvbW1p
dCBpbmZvcm1hdGlvbiBmb3IgJ3t9JyIuZm9ybWF0KGhhc2ggb3IgJ0hFQUQnKSkKKworICAgICAg
ICBicmFuY2hlcyA9IHNlbGYuX2JyYW5jaGVzX2Zvcihjb21taXRfZGF0YVsnc2hhJ10pCisgICAg
ICAgIGlmIGJyYW5jaGVzOgorICAgICAgICAgICAgYnJhbmNoID0gc2VsZi5wcmlvcml0aXplX2Jy
YW5jaGVzKGJyYW5jaGVzKQorCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICAjIEEgY29tbWl0
IG5vdCBvbiBhbnkgYnJhbmNoZXMgY2Fubm90IGhhdmUgYW4gaWRlbnRpZmllcgorICAgICAgICAg
ICAgaWRlbnRpZmllciA9IE5vbmUKKyAgICAgICAgICAgIGJyYW5jaCA9IE5vbmUKKworICAgICAg
ICBpZiBicmFuY2ggYW5kIGJyYW5jaCA9PSBzZWxmLmRlZmF1bHRfYnJhbmNoOgorICAgICAgICAg
ICAgaWYgbm90IGlkZW50aWZpZXI6CisgICAgICAgICAgICAgICAgcmVzdWx0ID0gc2VsZi5fY291
bnQocmVmPWNvbW1pdF9kYXRhWydzaGEnXSkKKyAgICAgICAgICAgICAgICBpZiBub3QgcmVzdWx0
OgorICAgICAgICAgICAgICAgICAgICByYWlzZSBFeGNlcHRpb24oJ3t9IHt9Jy5mb3JtYXQocmVz
dWx0LCBjb21taXRfZGF0YVsnc2hhJ10pKQorICAgICAgICAgICAgICAgIGlkZW50aWZpZXIsIF8g
PSByZXN1bHQKKyAgICAgICAgICAgIGJyYW5jaF9wb2ludCA9IE5vbmUKKworICAgICAgICBlbHNl
OgorICAgICAgICAgICAgaWYgbm90IGlkZW50aWZpZXI6CisgICAgICAgICAgICAgICAgaWRlbnRp
ZmllciA9IHNlbGYuX2RpZmZlcmVuY2Uoc2VsZi5kZWZhdWx0X2JyYW5jaCwgY29tbWl0X2RhdGFb
J3NoYSddKQorICAgICAgICAgICAgYnJhbmNoX3BvaW50ID0gc2VsZi5fY291bnQocmVmPWNvbW1p
dF9kYXRhWydzaGEnXSlbMF0gLSBpZGVudGlmaWVyCisKKyAgICAgICAgbWF0Y2ggPSBzZWxmLkdJ
VF9TVk5fUkVWSVNJT04uc2VhcmNoKGNvbW1pdF9kYXRhWydjb21taXQnXVsnbWVzc2FnZSddKQor
ICAgICAgICByZXZpc2lvbiA9IGludChtYXRjaC5ncm91cCgncmV2aXNpb24nKSkgaWYgbWF0Y2gg
ZWxzZSBOb25lCisKKyAgICAgICAgZGF0ZSA9IGRhdGV0aW1lLnN0cnB0aW1lKGNvbW1pdF9kYXRh
Wydjb21taXQnXVsnY29tbWl0dGVyJ11bJ2RhdGUnXSwgJyVZLSVtLSVkVCVIOiVNOiVTWicpCisg
ICAgICAgIGVtYWlsX21hdGNoID0gc2VsZi5FTUFJTF9SRS5tYXRjaChjb21taXRfZGF0YVsnY29t
bWl0J11bJ2F1dGhvciddWydlbWFpbCddKQorCisgICAgICAgIHJldHVybiBDb21taXQoCisgICAg
ICAgICAgICBoYXNoPWNvbW1pdF9kYXRhWydzaGEnXSwKKyAgICAgICAgICAgIHJldmlzaW9uPXJl
dmlzaW9uLAorICAgICAgICAgICAgYnJhbmNoX3BvaW50PWJyYW5jaF9wb2ludCwKKyAgICAgICAg
ICAgIGlkZW50aWZpZXI9aWRlbnRpZmllciwKKyAgICAgICAgICAgIGJyYW5jaD1icmFuY2gsCisg
ICAgICAgICAgICB0aW1lc3RhbXA9aW50KGNhbGVuZGFyLnRpbWVnbShkYXRlLnRpbWV0dXBsZSgp
KSksCisgICAgICAgICAgICBhdXRob3I9c2VsZi5jb250cmlidXRvcnMuY3JlYXRlKAorICAgICAg
ICAgICAgICAgIGNvbW1pdF9kYXRhWydjb21taXQnXVsnYXV0aG9yJ11bJ25hbWUnXSwKKyAgICAg
ICAgICAgICAgICBlbWFpbF9tYXRjaC5ncm91cCgnZW1haWwnKSBpZiBlbWFpbF9tYXRjaCBlbHNl
IE5vbmUsCisgICAgICAgICAgICApLCBtZXNzYWdlPWNvbW1pdF9kYXRhWydjb21taXQnXVsnbWVz
c2FnZSddIGlmIGluY2x1ZGVfbG9nIGVsc2UgTm9uZSwKKyAgICAgICAgKQorCisgICAgZGVmIGZp
bmQoc2VsZiwgYXJndW1lbnQsIGluY2x1ZGVfbG9nPVRydWUpOgorICAgICAgICBpZiBub3QgaXNp
bnN0YW5jZShhcmd1bWVudCwgc2l4LnN0cmluZ190eXBlcyk6CisgICAgICAgICAgICByYWlzZSBW
YWx1ZUVycm9yKCJFeHBlY3RlZCAnYXJndW1lbnQnIHRvIGJlIGEgc3RyaW5nLCBub3QgJ3t9JyIu
Zm9ybWF0KHR5cGUoYXJndW1lbnQpKSkKKworICAgICAgICBwYXJzZWRfY29tbWl0ID0gQ29tbWl0
LnBhcnNlKGFyZ3VtZW50LCBkb19hc3NlcnQ9RmFsc2UpCisgICAgICAgIGlmIHBhcnNlZF9jb21t
aXQ6CisgICAgICAgICAgICByZXR1cm4gc2VsZi5jb21taXQoCisgICAgICAgICAgICAgICAgaGFz
aD1wYXJzZWRfY29tbWl0Lmhhc2gsCisgICAgICAgICAgICAgICAgcmV2aXNpb249cGFyc2VkX2Nv
bW1pdC5yZXZpc2lvbiwKKyAgICAgICAgICAgICAgICBpZGVudGlmaWVyPXBhcnNlZF9jb21taXQu
aWRlbnRpZmllciwKKyAgICAgICAgICAgICAgICBicmFuY2g9cGFyc2VkX2NvbW1pdC5icmFuY2gs
CisgICAgICAgICAgICAgICAgaW5jbHVkZV9sb2c9aW5jbHVkZV9sb2csCisgICAgICAgICAgICAp
CisKKyAgICAgICAgY29tbWl0X2RhdGEgPSBzZWxmLnJlcXVlc3QoJ2NvbW1pdHMve30nLmZvcm1h
dChhcmd1bWVudCkpCisgICAgICAgIGlmIG5vdCBjb21taXRfZGF0YToKKyAgICAgICAgICAgIHJh
aXNlIFZhbHVlRXJyb3IoIid7fScgaXMgbm90IGFuIGFyZ3VtZW50IHJlY29nbml6ZWQgYnkgZ2l0
Ii5mb3JtYXQoYXJndW1lbnQpKQorICAgICAgICByZXR1cm4gc2VsZi5jb21taXQoaGFzaD1jb21t
aXRfZGF0YVsnc2hhJ10sIGluY2x1ZGVfbG9nPWluY2x1ZGVfbG9nKQpJbmRleDogVG9vbHMvU2Ny
aXB0cy9saWJyYXJpZXMvd2Via2l0c2NtcHkvd2Via2l0c2NtcHkvcmVtb3RlL3NjbS5weQo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBUb29scy9TY3JpcHRzL2xpYnJhcmllcy93ZWJraXRzY21weS93ZWJraXRzY21w
eS9yZW1vdGUvc2NtLnB5CShyZXZpc2lvbiAyNzA1MDkpCisrKyBUb29scy9TY3JpcHRzL2xpYnJh
cmllcy93ZWJraXRzY21weS93ZWJraXRzY21weS9yZW1vdGUvc2NtLnB5CSh3b3JraW5nIGNvcHkp
CkBAIC0zMiw2ICszMiw4IEBAIGNsYXNzIFNjbShTY21CYXNlKToKIAogICAgICAgICBpZiByZW1v
dGUuU3ZuLmlzX3dlYnNlcnZlcih1cmwpOgogICAgICAgICAgICAgcmV0dXJuIHJlbW90ZS5Tdm4o
dXJsLCBjb250cmlidXRvcnM9Y29udHJpYnV0b3JzKQorICAgICAgICBpZiByZW1vdGUuR2l0SHVi
LmlzX3dlYnNlcnZlcih1cmwpOgorICAgICAgICAgICAgcmV0dXJuIHJlbW90ZS5HaXRIdWIodXJs
LCBjb250cmlidXRvcnM9Y29udHJpYnV0b3JzKQogICAgICAgICByYWlzZSBPU0Vycm9yKCIne30n
IGlzIG5vdCBhIGtub3duIFNDTSBzZXJ2ZXIiLmZvcm1hdCh1cmwpKQogCiAgICAgZGVmIF9faW5p
dF9fKHNlbGYsIHVybCwgZGV2X2JyYW5jaGVzPU5vbmUsIHByb2RfYnJhbmNoZXM9Tm9uZSwgY29u
dHJpYnV0b3JzPU5vbmUpOgpJbmRleDogVG9vbHMvU2NyaXB0cy9saWJyYXJpZXMvd2Via2l0c2Nt
cHkvd2Via2l0c2NtcHkvdGVzdC9naXRfdW5pdHRlc3QucHkKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMv
U2NyaXB0cy9saWJyYXJpZXMvd2Via2l0c2NtcHkvd2Via2l0c2NtcHkvdGVzdC9naXRfdW5pdHRl
c3QucHkJKHJldmlzaW9uIDI3MDUwOSkKKysrIFRvb2xzL1NjcmlwdHMvbGlicmFyaWVzL3dlYmtp
dHNjbXB5L3dlYmtpdHNjbXB5L3Rlc3QvZ2l0X3VuaXR0ZXN0LnB5CSh3b3JraW5nIGNvcHkpCkBA
IC0yNiw3ICsyNiw3IEBAIGltcG9ydCB1bml0dGVzdAogZnJvbSBkYXRldGltZSBpbXBvcnQgZGF0
ZXRpbWUKIGZyb20gd2Via2l0Y29yZXB5IGltcG9ydCBMb2dnZXJDYXB0dXJlCiBmcm9tIHdlYmtp
dGNvcmVweS5tb2NrcyBpbXBvcnQgVGltZSBhcyBNb2NrVGltZQotZnJvbSB3ZWJraXRzY21weSBp
bXBvcnQgbG9jYWwsIG1vY2tzCitmcm9tIHdlYmtpdHNjbXB5IGltcG9ydCBsb2NhbCwgbW9ja3Ms
IHJlbW90ZQogCiAKIGNsYXNzIFRlc3RHaXQodW5pdHRlc3QuVGVzdENhc2UpOgpAQCAtMjQzLDMg
KzI0MywxMDEgQEAgY2xhc3MgVGVzdEdpdCh1bml0dGVzdC5UZXN0Q2FzZSk6CiAgICAgICAgIGZv
ciBtb2NrIGluIFttb2Nrcy5sb2NhbC5HaXQoc2VsZi5wYXRoKSwgbW9ja3MubG9jYWwuR2l0KHNl
bGYucGF0aCwgZ2l0X3N2bj1UcnVlKV06CiAgICAgICAgICAgICB3aXRoIG1vY2s6CiAgICAgICAg
ICAgICAgICAgc2VsZi5hc3NlcnRJc05vbmUobG9jYWwuR2l0KHNlbGYucGF0aCkuY29tbWl0KGlk
ZW50aWZpZXI9JzRAbWFpbicsIGluY2x1ZGVfbG9nPUZhbHNlKS5tZXNzYWdlKQorCisKK2NsYXNz
IFRlc3RHaXRIdWIodW5pdHRlc3QuVGVzdENhc2UpOgorICAgIHJlbW90ZSA9ICdodHRwczovL2dp
dGh1Yi5jb20vV2ViS2l0L3dlYmtpdCcKKworICAgIGRlZiB0ZXN0X2RldGVjdGlvbihzZWxmKToK
KyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZW1vdGUuR2l0SHViLmlzX3dlYnNlcnZlcignaHR0
cHM6Ly9naXRodWIuY29tL1dlYktpdC93ZWJraXQnKSwgVHJ1ZSkKKyAgICAgICAgc2VsZi5hc3Nl
cnRFcXVhbChyZW1vdGUuR2l0SHViLmlzX3dlYnNlcnZlcignaHR0cDovL2dpdGh1Yi5jb20vV2Vi
S2l0L3dlYmtpdCcpLCBUcnVlKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlbW90ZS5HaXRI
dWIuaXNfd2Vic2VydmVyKCdodHRwczovL3N2bi53ZWJraXQub3JnL3JlcG9zaXRvcnkvd2Via2l0
JyksIEZhbHNlKQorCisgICAgZGVmIHRlc3RfYnJhbmNoZXMoc2VsZik6CisgICAgICAgIHdpdGgg
bW9ja3MucmVtb3RlLkdpdEh1YigpOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKKyAg
ICAgICAgICAgICAgICByZW1vdGUuR2l0SHViKHNlbGYucmVtb3RlKS5icmFuY2hlcywKKyAgICAg
ICAgICAgICAgICBbJ2JyYW5jaC1hJywgJ2JyYW5jaC1iJywgJ21haW4nXSwKKyAgICAgICAgICAg
ICkKKworICAgIGRlZiB0ZXN0X3RhZ3Moc2VsZik6CisgICAgICAgIHdpdGggbW9ja3MucmVtb3Rl
LkdpdEh1YigpOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKKyAgICAgICAgICAgICAg
ICByZW1vdGUuR2l0SHViKHNlbGYucmVtb3RlKS50YWdzLAorICAgICAgICAgICAgICAgIFsndGFn
LTEnLCAndGFnLTInXSwKKyAgICAgICAgICAgICkKKworICAgIGRlZiB0ZXN0X3NjbV90eXBlKHNl
bGYpOgorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHJlbW90ZS5HaXRIdWIoc2VsZi5yZW1vdGUp
LmlzX3N2bikKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHJlbW90ZS5HaXRIdWIoc2VsZi5yZW1v
dGUpLmlzX2dpdCkKKworICAgIGRlZiB0ZXN0X2NvbW1pdF9yZXZpc2lvbihzZWxmKToKKyAgICAg
ICAgd2l0aCBtb2Nrcy5yZW1vdGUuR2l0SHViKCk6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVx
dWFsKCcxQG1haW4nLCBzdHIocmVtb3RlLkdpdEh1YihzZWxmLnJlbW90ZSkuY29tbWl0KGhhc2g9
JzliODMxMWYyJykpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgnMkBtYWluJywgc3Ry
KHJlbW90ZS5HaXRIdWIoc2VsZi5yZW1vdGUpLmNvbW1pdChoYXNoPSdmZmY4M2JiMicpKSkKKyAg
ICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJzIuMUBicmFuY2gtYScsIHN0cihyZW1vdGUuR2l0
SHViKHNlbGYucmVtb3RlKS5jb21taXQoaGFzaD0nYTMwY2U4NDknKSkpCisgICAgICAgICAgICBz
ZWxmLmFzc2VydEVxdWFsKCczQG1haW4nLCBzdHIocmVtb3RlLkdpdEh1YihzZWxmLnJlbW90ZSku
Y29tbWl0KGhhc2g9JzFhYmUyNWI0JykpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgn
Mi4yQGJyYW5jaC1iJywgc3RyKHJlbW90ZS5HaXRIdWIoc2VsZi5yZW1vdGUpLmNvbW1pdChoYXNo
PSczY2QzMmUzNScpKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJzRAbWFpbicsIHN0
cihyZW1vdGUuR2l0SHViKHNlbGYucmVtb3RlKS5jb21taXQoaGFzaD0nYmFlNWQxZTknKSkpCisg
ICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCcyLjJAYnJhbmNoLWEnLCBzdHIocmVtb3RlLkdp
dEh1YihzZWxmLnJlbW90ZSkuY29tbWl0KGhhc2g9JzYyMTY1MmFkJykpKQorICAgICAgICAgICAg
c2VsZi5hc3NlcnRFcXVhbCgnMi4zQGJyYW5jaC1iJywgc3RyKHJlbW90ZS5HaXRIdWIoc2VsZi5y
ZW1vdGUpLmNvbW1pdChoYXNoPSc3OTA3MjVhNicpKSkKKworICAgIGRlZiB0ZXN0X2NvbW1pdF9m
cm9tX2JyYW5jaChzZWxmKToKKyAgICAgICAgd2l0aCBtb2Nrcy5yZW1vdGUuR2l0SHViKCk6Cisg
ICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCc0QG1haW4nLCBzdHIocmVtb3RlLkdpdEh1Yihz
ZWxmLnJlbW90ZSkuY29tbWl0KGJyYW5jaD0nbWFpbicpKSkKKyAgICAgICAgICAgIHNlbGYuYXNz
ZXJ0RXF1YWwoJzIuMkBicmFuY2gtYScsIHN0cihyZW1vdGUuR2l0SHViKHNlbGYucmVtb3RlKS5j
b21taXQoYnJhbmNoPSdicmFuY2gtYScpKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwo
JzIuM0BicmFuY2gtYicsIHN0cihyZW1vdGUuR2l0SHViKHNlbGYucmVtb3RlKS5jb21taXQoYnJh
bmNoPSdicmFuY2gtYicpKSkKKworICAgIGRlZiB0ZXN0X2lkZW50aWZpZXIoc2VsZik6CisgICAg
ICAgIHdpdGggbW9ja3MucmVtb3RlLkdpdEh1YigpOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRF
cXVhbCgKKyAgICAgICAgICAgICAgICAnOWI4MzExZjI1YTc3YmExNDkyM2Q5ZDVhNjUzMjEwM2Y1
NGFiZWZjYicsCisgICAgICAgICAgICAgICAgcmVtb3RlLkdpdEh1YihzZWxmLnJlbW90ZSkuY29t
bWl0KGlkZW50aWZpZXI9JzFAbWFpbicpLmhhc2gsCisgICAgICAgICAgICApCisgICAgICAgICAg
ICBzZWxmLmFzc2VydEVxdWFsKAorICAgICAgICAgICAgICAgICdmZmY4M2JiMmQ5MTcxYjRkOTE5
NmU5NzdlYjA1MDhmZDU3ZTdhMDhkJywKKyAgICAgICAgICAgICAgICByZW1vdGUuR2l0SHViKHNl
bGYucmVtb3RlKS5jb21taXQoaWRlbnRpZmllcj0nMkBtYWluJykuaGFzaCwKKyAgICAgICAgICAg
ICkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCisgICAgICAgICAgICAgICAgJ2EzMGNl
ODQ5NGJmMWFjMjgwN2E2OTg0NGY3MjZiZTRhOTg0M2NhNTUnLAorICAgICAgICAgICAgICAgIHJl
bW90ZS5HaXRIdWIoc2VsZi5yZW1vdGUpLmNvbW1pdChpZGVudGlmaWVyPScyLjFAYnJhbmNoLWEn
KS5oYXNoLAorICAgICAgICAgICAgKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKKyAg
ICAgICAgICAgICAgICAnMWFiZTI1YjQ0M2U5ODVmOTNiOTBkODMwZTRhN2UzNzMxMzM2YWY0ZCcs
CisgICAgICAgICAgICAgICAgcmVtb3RlLkdpdEh1YihzZWxmLnJlbW90ZSkuY29tbWl0KGlkZW50
aWZpZXI9JzNAbWFpbicpLmhhc2gsCisgICAgICAgICAgICApCisgICAgICAgICAgICBzZWxmLmFz
c2VydEVxdWFsKAorICAgICAgICAgICAgICAgICczY2QzMmUzNTI0MTA1NjViYjU0MzgyMWZiZjg1
NmE2ZDNjYWFkMWM0JywKKyAgICAgICAgICAgICAgICByZW1vdGUuR2l0SHViKHNlbGYucmVtb3Rl
KS5jb21taXQoaWRlbnRpZmllcj0nMi4yQGJyYW5jaC1iJykuaGFzaCwKKyAgICAgICAgICAgICkK
KyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCisgICAgICAgICAgICAgICAgJ2JhZTVkMWU5
MDk5OWQ0ZjkxNmE4YTE1ODEwY2NmYTQzZjM3YTJmZDYnLAorICAgICAgICAgICAgICAgIHJlbW90
ZS5HaXRIdWIoc2VsZi5yZW1vdGUpLmNvbW1pdChpZGVudGlmaWVyPSc0QG1haW4nKS5oYXNoLAor
ICAgICAgICAgICAgKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKKyAgICAgICAgICAg
ICAgICAnNjIxNjUyYWRkN2ZjNDE2MDk5YmQyMDYzMzY2Y2MzOGZmNjFhZmUzNicsCisgICAgICAg
ICAgICAgICAgcmVtb3RlLkdpdEh1YihzZWxmLnJlbW90ZSkuY29tbWl0KGlkZW50aWZpZXI9JzIu
MkBicmFuY2gtYScpLmhhc2gsCisgICAgICAgICAgICApCisgICAgICAgICAgICBzZWxmLmFzc2Vy
dEVxdWFsKAorICAgICAgICAgICAgICAgICc3OTA3MjVhNmQ3OWUyOGRiMmVjZGRlMjk1NDhkMjI2
MmMwYmQwNTlkJywKKyAgICAgICAgICAgICAgICByZW1vdGUuR2l0SHViKHNlbGYucmVtb3RlKS5j
b21taXQoaWRlbnRpZmllcj0nMi4zQGJyYW5jaC1iJykuaGFzaCwKKyAgICAgICAgICAgICkKKwor
ICAgIGRlZiB0ZXN0X25vbl9jYW5ub25pY2FsX2lkZW50aWZpZXJzKHNlbGYpOgorICAgICAgICB3
aXRoIG1vY2tzLnJlbW90ZS5HaXRIdWIoKToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwo
JzJAbWFpbicsIHN0cihyZW1vdGUuR2l0SHViKHNlbGYucmVtb3RlKS5jb21taXQoaWRlbnRpZmll
cj0nMEBicmFuY2gtYScpKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJzFAbWFpbics
IHN0cihyZW1vdGUuR2l0SHViKHNlbGYucmVtb3RlKS5jb21taXQoaWRlbnRpZmllcj0nLTFAYnJh
bmNoLWEnKSkpCisKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJzJAbWFpbicsIHN0cihy
ZW1vdGUuR2l0SHViKHNlbGYucmVtb3RlKS5jb21taXQoaWRlbnRpZmllcj0nMEBicmFuY2gtYicp
KSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJzFAbWFpbicsIHN0cihyZW1vdGUuR2l0
SHViKHNlbGYucmVtb3RlKS5jb21taXQoaWRlbnRpZmllcj0nLTFAYnJhbmNoLWInKSkpCisKKyAg
ICBkZWYgdGVzdF90YWcoc2VsZik6CisgICAgICAgIHdpdGggbW9ja3MucmVtb3RlLkdpdEh1Yigp
OgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKKyAgICAgICAgICAgICAgICAnNjIxNjUy
YWRkN2ZjNDE2MDk5YmQyMDYzMzY2Y2MzOGZmNjFhZmUzNicsCisgICAgICAgICAgICAgICAgcmVt
b3RlLkdpdEh1YihzZWxmLnJlbW90ZSkuY29tbWl0KHRhZz0ndGFnLTEnKS5oYXNoLAorICAgICAg
ICAgICAgKQorCisgICAgZGVmIHRlc3Rfbm9fbG9nKHNlbGYpOgorICAgICAgICB3aXRoIG1vY2tz
LnJlbW90ZS5HaXRIdWIoKToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXNOb25lKHJlbW90ZS5H
aXRIdWIoc2VsZi5yZW1vdGUpLmNvbW1pdChpZGVudGlmaWVyPSc0QG1haW4nLCBpbmNsdWRlX2xv
Zz1GYWxzZSkubWVzc2FnZSkK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>416006</attachid>
            <date>2020-12-11 10:19:56 -0800</date>
            <delta_ts>2020-12-14 12:10:54 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-219602-20201211121954.patch</filename>
            <type>text/plain</type>
            <size>39140</size>
            <attacher name="Jonathan Bedard">jbedard</attacher>
            
              <data encoding="base64">SW5kZXg6IFRvb2xzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9DaGFuZ2VMb2cJKHJl
dmlzaW9uIDI3MDY4MCkKKysrIFRvb2xzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwz
ICsxLDU2IEBACisyMDIwLTEyLTExICBKb25hdGhhbiBCZWRhcmQgIDxqYmVkYXJkQGFwcGxlLmNv
bT4KKworICAgICAgICBbd2Via2l0c2NtcHldIFN1cHBvcnQgcmVtb3RlIEdpdEh1YiByZXBvc2l0
b3J5CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMTk2
MDIKKyAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzcyMDUwMDI2PgorCisgICAgICAgIFJldmlld2Vk
IGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFNlcnZpY2VzIG9mdGVuIG5lZWQgdG8gaW50
ZXJhY3Qgd2l0aCB0aGUgV2ViS2l0IHJlcG9zaXRvcnkgd2l0aG91dCBhY3R1YWxseSBkb3dubG9h
ZGluZyB0aGUKKyAgICAgICAgcmVwb3NpdG9yeS4gSW4gcGFydGljdWxhciwgaXQgaXMgdXNlZnVs
IHRvIGJlIGFibGUgdG8gcmV0cmlldmUgY29tbWl0cyBhbmQgdGhlaXIgaWRlbnRpZmllcnMuCisK
KyAgICAgICAgKiBTY3JpcHRzL2xpYnJhcmllcy93ZWJraXRzY21weS93ZWJraXRzY21weS9fX2lu
aXRfXy5weTogQnVtcCB2ZXJzaW9uLgorICAgICAgICAqIFNjcmlwdHMvbGlicmFyaWVzL3dlYmtp
dHNjbXB5L3dlYmtpdHNjbXB5L2xvY2FsL2dpdC5weToKKyAgICAgICAgKEdpdCk6IE1vdmUgR0lU
X1NWTl9SRVZJU0lPTiByZWdleCB0byBiYXNlIGNsYXNzLgorICAgICAgICAqIFNjcmlwdHMvbGli
cmFyaWVzL3dlYmtpdHNjbXB5L3dlYmtpdHNjbXB5L21vY2tzL3JlbW90ZS9fX2luaXRfXy5weTog
QWRkIEdpdEh1YiBjbGFzcy4KKyAgICAgICAgKiBTY3JpcHRzL2xpYnJhcmllcy93ZWJraXRzY21w
eS93ZWJraXRzY21weS9tb2Nrcy9yZW1vdGUvZ2l0X2h1Yi5weTogQWRkZWQuCisgICAgICAgIChH
aXRIdWIpOiBNb2NrIHJlcXVlc3Qgcm91dGVyIGZvciBhIGxpbWl0ZWQgc3Vic2V0IG9mIEdpdEh1
YidzIEFQSS4KKyAgICAgICAgKEdpdEh1Yi5fX2luaXRfXyk6CisgICAgICAgIChHaXRIdWIuY29t
bWl0KTogUmV0dXJuIGEgY29tbWl0IG9iamVjdCBnaXZlbiBhIHJlZmVyZW5jZS4KKyAgICAgICAg
KEdpdEh1Yi5yZXF1ZXN0KTogUmV0dXJuIGEgcmVzcG9uc2Ugb2JqZWN0IGZvciB0aGUgc3BlY2lm
aWVkIHJlcXVlc3QuCisgICAgICAgICogU2NyaXB0cy9saWJyYXJpZXMvd2Via2l0c2NtcHkvd2Vi
a2l0c2NtcHkvcmVtb3RlL19faW5pdF9fLnB5OiBBZGQgR2l0SHViIGNsYXNzLgorICAgICAgICAq
IFNjcmlwdHMvbGlicmFyaWVzL3dlYmtpdHNjbXB5L3dlYmtpdHNjbXB5L3JlbW90ZS9naXRfaHVi
LnB5OiBBZGRlZC4KKyAgICAgICAgKEdpdEh1Yik6IFJlcG9zaXRvcnkgb2JqZWN0IHJlcHJlc2Vu
dGluZyBhIEdpdEh1YiByZW1vdGUuCisgICAgICAgIChHaXRIdWIuaXNfd2Vic2VydmVyKTogVHJ1
ZSBpZiB0aGUgcHJvdmlkZWQgVVJMIGlzIGEgR2l0SHViIHdlYnNlcnZlci4KKyAgICAgICAgKEdp
dEh1Yi5fX2luaXRfXyk6IFZlcmlmeSB0aGUgcHJvdmlkZWQgVVJMIGFuZCBzcGxpdCBpdCBpbnRv
IGl0J3MgY29tcG9zaXRlIHBhcnRzLgorICAgICAgICAoR2l0SHViLmlzX2dpdCk6IFJldHVybiBU
cnVlLgorICAgICAgICAoR2l0SHViLnJlcXVlc3QpOiBNYWtlIGFuIEFQSSByZXF1ZXN0LCBjb21i
aW5pbmcgcGFnaW5hdGlvbiBpbnRvIGEgc2luZ2xlIHJlcXVlc3QuCisgICAgICAgIChHaXRIdWIu
X2NvdW50KTogU2NyYXBlIHRoZSBHaXRIdWIgVUkgdG8gZmluZCB0aGUgbnVtYmVyIG9mIHBhcmVu
dCBjb21taXRzIGZvciBhIHNwZWNpZmllZAorICAgICAgICBicmFuY2ggb3IgY29tbWl0LgorICAg
ICAgICAoR2l0SHViLl9kaWZmZXJlbmNlKTogQ29tcHV0ZSB0aGUgbnVtYmVyIG9mIGNvbW1pdHMg
YSBzcGVjaWZpZWQgcmVmZXJlbmNlIGlzIGFoZWFkIG9mIGFub3RoZXIuCisgICAgICAgIChHaXRI
dWIuX2JyYW5jaGVzX2Zvcik6IFNjcmFwZSB0aGUgR2l0SHViIFVJIHRvIGRldGVybWluZSB3aGF0
IGJyYW5jaGVzIGEgY29tbWl0IGlzIG9uLgorICAgICAgICAoR2l0SHViLmRlZmF1bHRfYnJhbmNo
KTogUXVlcnkgR2l0SHViIHRvIGRldGVybWluZSB0aGUgZGVmYXVsdCBicmFuY2ggZm9yIGEgc3Bl
Y2lmaWVkIGNvbW1pdC4KKyAgICAgICAgKEdpdEh1Yi5icmFuY2hlcyk6IFJldHVybiBhbGwgYnJh
bmNoZXMgZm9yIGEgcmVwb3NpdG9yeS4KKyAgICAgICAgKEdpdEh1Yi50YWdzKTogUmV0dXJuIGFs
bCB0YWdzIGZvciBhIHJlcG9zaXRvcnkuCisgICAgICAgIChHaXRIdWIuY29tbWl0KTogUmV0dXJu
IGEgY29tbWl0IG9iamVjdCBnaXZlbiBhIHJldmlzaW9uLCBicmFuY2gsIGlkZW50aWZpZXIgb3Ig
dGFnLgorICAgICAgICAoR2l0SHViLmZpbmQpOiBVc2UgZ2l0IHRvIG1hdGNoIGJyYW5jaGVzIGFu
ZCB0YWdzIHRvIGEgaGFzaCBpbnN0ZWFkIG9mIHRyeWluZyB0byBkbyBpdCBvdXJzZWx2ZXMuCisg
ICAgICAgICogU2NyaXB0cy9saWJyYXJpZXMvd2Via2l0c2NtcHkvd2Via2l0c2NtcHkvcmVtb3Rl
L3NjbS5weToKKyAgICAgICAgKFNjbS5mcm9tX3VybCk6IEFkZCBHaXRIdWIgdG8gdGhlIHNldCBv
ZiBjYW5kaWRhdGUgcmVtb3RlIHJlcG9zaXRvcmllcy4KKyAgICAgICAgKiBTY3JpcHRzL2xpYnJh
cmllcy93ZWJraXRzY21weS93ZWJraXRzY21weS9zY21fYmFzZS5weToKKyAgICAgICAgKFNjbUJh
c2UpOiBNb3ZlIEdJVF9TVk5fUkVWSVNJT04gcmVnZXggdG8gYmFzZSBjbGFzcy4KKyAgICAgICAg
KiBTY3JpcHRzL2xpYnJhcmllcy93ZWJraXRzY21weS93ZWJraXRzY21weS90ZXN0L2dpdF91bml0
dGVzdC5weToKKyAgICAgICAgKFRlc3RHaXRIdWIpOgorICAgICAgICAoVGVzdEdpdEh1Yi50ZXN0
X2RldGVjdGlvbik6CisgICAgICAgIChUZXN0R2l0SHViLnRlc3RfYnJhbmNoZXMpOgorICAgICAg
ICAoVGVzdEdpdEh1Yi50ZXN0X3RhZ3MpOgorICAgICAgICAoVGVzdEdpdEh1Yi50ZXN0X3NjbV90
eXBlKToKKyAgICAgICAgKFRlc3RHaXRIdWIudGVzdF9jb21taXRfcmV2aXNpb24pOgorICAgICAg
ICAoVGVzdEdpdEh1Yi50ZXN0X2NvbW1pdF9mcm9tX2JyYW5jaCk6CisgICAgICAgIChUZXN0R2l0
SHViLnRlc3RfaWRlbnRpZmllcik6CisgICAgICAgIChUZXN0R2l0SHViLnRlc3Rfbm9uX2Nhbm5v
bmljYWxfaWRlbnRpZmllcnMpOgorICAgICAgICAoVGVzdEdpdEh1Yi50ZXN0X3RhZyk6CisgICAg
ICAgIChUZXN0R2l0SHViLnRlc3Rfbm9fbG9nKToKKwogMjAyMC0xMi0xMSAgQ2FybG9zIEdhcmNp
YSBDYW1wb3MgIDxjZ2FyY2lhQGlnYWxpYS5jb20+CiAKICAgICAgICAgUkVHUkVTU0lPTihyMjcw
MTg2KTogW0dUS10gTWluaUJyb3dzZXI6IGRvIG5vdCBleGl0IGFmdGVyIGxvYWQgd2hlbiBubyBh
cmd1bWVudHMgZ2l2ZW4KSW5kZXg6IFRvb2xzL1NjcmlwdHMvbGlicmFyaWVzL3dlYmtpdHNjbXB5
L3dlYmtpdHNjbXB5L19faW5pdF9fLnB5Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1NjcmlwdHMvbGli
cmFyaWVzL3dlYmtpdHNjbXB5L3dlYmtpdHNjbXB5L19faW5pdF9fLnB5CShyZXZpc2lvbiAyNzA2
ODApCisrKyBUb29scy9TY3JpcHRzL2xpYnJhcmllcy93ZWJraXRzY21weS93ZWJraXRzY21weS9f
X2luaXRfXy5weQkod29ya2luZyBjb3B5KQpAQCAtNDYsNyArNDYsNyBAQCBleGNlcHQgSW1wb3J0
RXJyb3I6CiAgICAgICAgICJQbGVhc2UgaW5zdGFsbCB3ZWJraXRjb3JlcHkgd2l0aCBgcGlwIGlu
c3RhbGwgd2Via2l0Y29yZXB5IC0tZXh0cmEtaW5kZXgtdXJsIDxwYWNrYWdlIGluZGV4IFVSTD5g
IgogICAgICkKIAotdmVyc2lvbiA9IFZlcnNpb24oMCwgNSwgMSkKK3ZlcnNpb24gPSBWZXJzaW9u
KDAsIDYsIDApCiAKIEF1dG9JbnN0YWxsLnJlZ2lzdGVyKFBhY2thZ2UoJ2Zhc3RlbmVycycsIFZl
cnNpb24oMCwgMTUsIDApKSkKIEF1dG9JbnN0YWxsLnJlZ2lzdGVyKFBhY2thZ2UoJ21vbm90b25p
YycsIFZlcnNpb24oMSwgNSkpKQpJbmRleDogVG9vbHMvU2NyaXB0cy9saWJyYXJpZXMvd2Via2l0
c2NtcHkvd2Via2l0c2NtcHkvc2NtX2Jhc2UucHkKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvU2NyaXB0
cy9saWJyYXJpZXMvd2Via2l0c2NtcHkvd2Via2l0c2NtcHkvc2NtX2Jhc2UucHkJKHJldmlzaW9u
IDI3MDY4MCkKKysrIFRvb2xzL1NjcmlwdHMvbGlicmFyaWVzL3dlYmtpdHNjbXB5L3dlYmtpdHNj
bXB5L3NjbV9iYXNlLnB5CSh3b3JraW5nIGNvcHkpCkBAIC0zNyw2ICszNyw3IEBAIGNsYXNzIFNj
bUJhc2Uob2JqZWN0KToKICAgICAjIHRoZSBmb2xsb3dpbmcgaWRpb21zIHNlZW0gY29tbW9uIGVu
b3VnaCB0byBiZSBzaGFyZWQuCiAgICAgREVWX0JSQU5DSEVTID0gcmUuY29tcGlsZShyJy4qWyhl
bmcpKGRldikoYnVnKV0vLisnKQogICAgIFBST0RfQlJBTkNIRVMgPSByZS5jb21waWxlKHInXFMr
LVtcZCtcLl0rLWJyYW5jaCcpCisgICAgR0lUX1NWTl9SRVZJU0lPTiA9IHJlLmNvbXBpbGUocidn
aXQtc3ZuLWlkOiBcUys6XC9cLy4rQCg/UDxyZXZpc2lvbj5cZCspIC4rLS4rLS4rLS4rJykKIAog
ICAgIGRlZiBfX2luaXRfXyhzZWxmLCBkZXZfYnJhbmNoZXM9Tm9uZSwgcHJvZF9icmFuY2hlcz1O
b25lLCBjb250cmlidXRvcnM9Tm9uZSk6CiAgICAgICAgIHNlbGYuZGV2X2JyYW5jaGVzID0gZGV2
X2JyYW5jaGVzIG9yIHNlbGYuREVWX0JSQU5DSEVTCkluZGV4OiBUb29scy9TY3JpcHRzL2xpYnJh
cmllcy93ZWJraXRzY21weS93ZWJraXRzY21weS9sb2NhbC9naXQucHkKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
VG9vbHMvU2NyaXB0cy9saWJyYXJpZXMvd2Via2l0c2NtcHkvd2Via2l0c2NtcHkvbG9jYWwvZ2l0
LnB5CShyZXZpc2lvbiAyNzA2ODApCisrKyBUb29scy9TY3JpcHRzL2xpYnJhcmllcy93ZWJraXRz
Y21weS93ZWJraXRzY21weS9sb2NhbC9naXQucHkJKHdvcmtpbmcgY29weSkKQEAgLTMxLDcgKzMx
LDYgQEAgZnJvbSB3ZWJraXRzY21weSBpbXBvcnQgQ29tbWl0LCBDb250cmlidQogCiBjbGFzcyBH
aXQoU2NtKToKICAgICBHSVRfQ09NTUlUID0gcmUuY29tcGlsZShyJ2NvbW1pdCAoP1A8aGFzaD5b
MC05YS1mXSspJykKLSAgICBHSVRfU1ZOX1JFVklTSU9OID0gcmUuY29tcGlsZShyJ2dpdC1zdm4t
aWQ6IFxTKzpcL1wvLitAKD9QPHJldmlzaW9uPlxkKykgListListListLisnKQogCiAgICAgQGNs
YXNzbWV0aG9kCiAgICAgQGRlY29yYXRvcnMuTWVtb2l6ZSgpCkluZGV4OiBUb29scy9TY3JpcHRz
L2xpYnJhcmllcy93ZWJraXRzY21weS93ZWJraXRzY21weS9tb2Nrcy9yZW1vdGUvX19pbml0X18u
cHkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gVG9vbHMvU2NyaXB0cy9saWJyYXJpZXMvd2Via2l0c2NtcHkvd2Vi
a2l0c2NtcHkvbW9ja3MvcmVtb3RlL19faW5pdF9fLnB5CShyZXZpc2lvbiAyNzA2ODApCisrKyBU
b29scy9TY3JpcHRzL2xpYnJhcmllcy93ZWJraXRzY21weS93ZWJraXRzY21weS9tb2Nrcy9yZW1v
dGUvX19pbml0X18ucHkJKHdvcmtpbmcgY29weSkKQEAgLTIwLDQgKzIwLDUgQEAKICMgT1IgVE9S
VCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKICMgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KIAorZnJvbSB3ZWJraXRzY21weS5tb2Nrcy5y
ZW1vdGUuZ2l0X2h1YiBpbXBvcnQgR2l0SHViCiBmcm9tIHdlYmtpdHNjbXB5Lm1vY2tzLnJlbW90
ZS5zdm4gaW1wb3J0IFN2bgpJbmRleDogVG9vbHMvU2NyaXB0cy9saWJyYXJpZXMvd2Via2l0c2Nt
cHkvd2Via2l0c2NtcHkvbW9ja3MvcmVtb3RlL2dpdF9odWIucHkKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9v
bHMvU2NyaXB0cy9saWJyYXJpZXMvd2Via2l0c2NtcHkvd2Via2l0c2NtcHkvbW9ja3MvcmVtb3Rl
L2dpdF9odWIucHkJKG5vbmV4aXN0ZW50KQorKysgVG9vbHMvU2NyaXB0cy9saWJyYXJpZXMvd2Vi
a2l0c2NtcHkvd2Via2l0c2NtcHkvbW9ja3MvcmVtb3RlL2dpdF9odWIucHkJKHdvcmtpbmcgY29w
eSkKQEAgLTAsMCArMSwyODQgQEAKKyMgQ29weXJpZ2h0IChDKSAyMDIwIEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisjIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworIyBhcmUgbWV0
OgorIyAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyMgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyMgMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisjICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorIworIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQKKyMgQU5ZIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFIElNUExJRUQKKyMgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorIyBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUgorIyBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMCisjIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SCisjIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSCisjIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksCisjIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisjIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
CisKK2ltcG9ydCBqc29uCisKK2Zyb20gZGF0ZXRpbWUgaW1wb3J0IGRhdGV0aW1lCitmcm9tIHdl
YmtpdGNvcmVweSBpbXBvcnQgbW9ja3MKK2Zyb20gd2Via2l0c2NtcHkgaW1wb3J0IENvbW1pdCwg
Q29udHJpYnV0b3IsIHJlbW90ZSBhcyBzY21yZW1vdGUKKworCitjbGFzcyBHaXRIdWIobW9ja3Mu
UmVxdWVzdHMpOgorICAgIHRvcCA9IE5vbmUKKworICAgIGRlZiBfX2luaXRfXygKKyAgICAgICAg
c2VsZiwgcmVtb3RlPSdnaXRodWIuZXhhbXBsZS5jb20vV2ViS2l0L3dlYmtpdCcsCisgICAgICAg
IGJyYW5jaGVzPU5vbmUsIHRhZ3M9Tm9uZSwgZGVmYXVsdF9icmFuY2g9J21haW4nLAorICAgICAg
ICBnaXRfc3ZuPUZhbHNlLAorICAgICk6CisgICAgICAgIGlmIG5vdCBzY21yZW1vdGUuR2l0SHVi
LmlzX3dlYnNlcnZlcignaHR0cHM6Ly97fScuZm9ybWF0KHJlbW90ZSkpOgorICAgICAgICAgICAg
cmFpc2UgVmFsdWVFcnJvcignInt9IiBpcyBub3QgYSB2YWxpZCBHaXRIdWIgcmVtb3RlJy5mb3Jt
YXQocmVtb3RlKSkKKworICAgICAgICBzZWxmLmRlZmF1bHRfYnJhbmNoID0gZGVmYXVsdF9icmFu
Y2gKKyAgICAgICAgc2VsZi5yZW1vdGUgPSByZW1vdGUKKyAgICAgICAgaG9zdG5hbWUgPSBzZWxm
LnJlbW90ZS5zcGxpdCgnLycpWzBdCisgICAgICAgIHNlbGYuYXBpX3JlbW90ZSA9ICdhcGkue2hv
c3RuYW1lfS9yZXBvcy97cmVwb30nLmZvcm1hdCgKKyAgICAgICAgICAgIGhvc3RuYW1lPWhvc3Ru
YW1lLAorICAgICAgICAgICAgcmVwbz0nLycuam9pbihzZWxmLnJlbW90ZS5zcGxpdCgnLycpWzE6
XSksCisgICAgICAgICkKKyAgICAgICAgc2VsZi5icmFuY2hlcyA9IGJyYW5jaGVzIG9yIFtdCisg
ICAgICAgIHNlbGYudGFncyA9IHRhZ3Mgb3Ige30KKworICAgICAgICBzdXBlcihHaXRIdWIsIHNl
bGYpLl9faW5pdF9fKGhvc3RuYW1lLCAnYXBpLnt9Jy5mb3JtYXQoaG9zdG5hbWUpKQorCisgICAg
ICAgICMgUHJvdmlkZSBhIHJlYXNvbmFibGUgc2V0IG9mIGNvbW1pdHMgdG8gdGVzdCBhZ2FpbnN0
CisgICAgICAgIGNvbnRyaWJ1dG9yID0gQ29udHJpYnV0b3IobmFtZT0nSm9uYXRoYW4gQmVkYXJk
JywgZW1haWxzPVsnamJlZGFyZEBhcHBsZS5jb20nXSkKKyAgICAgICAgc2VsZi5jb21taXRzID0g
eworICAgICAgICAgICAgZGVmYXVsdF9icmFuY2g6IFsKKyAgICAgICAgICAgICAgICBDb21taXQo
CisgICAgICAgICAgICAgICAgICAgIGlkZW50aWZpZXI9JzFAe30nLmZvcm1hdChkZWZhdWx0X2Jy
YW5jaCksCisgICAgICAgICAgICAgICAgICAgIGhhc2g9JzliODMxMWYyNWE3N2JhMTQ5MjNkOWQ1
YTY1MzIxMDNmNTRhYmVmY2InLAorICAgICAgICAgICAgICAgICAgICByZXZpc2lvbj0xIGlmIGdp
dF9zdm4gZWxzZSBOb25lLAorICAgICAgICAgICAgICAgICAgICBhdXRob3I9Y29udHJpYnV0b3Is
CisgICAgICAgICAgICAgICAgICAgIHRpbWVzdGFtcD0xNjAxNjYwMDAwLAorICAgICAgICAgICAg
ICAgICAgICBtZXNzYWdlPScxc3QgY29tbWl0XG4nLAorICAgICAgICAgICAgICAgICksIENvbW1p
dCgKKyAgICAgICAgICAgICAgICAgICAgaWRlbnRpZmllcj0nMkB7fScuZm9ybWF0KGRlZmF1bHRf
YnJhbmNoKSwKKyAgICAgICAgICAgICAgICAgICAgaGFzaD0nZmZmODNiYjJkOTE3MWI0ZDkxOTZl
OTc3ZWIwNTA4ZmQ1N2U3YTA4ZCcsCisgICAgICAgICAgICAgICAgICAgIHJldmlzaW9uPTIgaWYg
Z2l0X3N2biBlbHNlIE5vbmUsCisgICAgICAgICAgICAgICAgICAgIGF1dGhvcj1jb250cmlidXRv
ciwKKyAgICAgICAgICAgICAgICAgICAgdGltZXN0YW1wPTE2MDE2NjEwMDAsCisgICAgICAgICAg
ICAgICAgICAgIG1lc3NhZ2U9JzJuZCBjb21taXRcbicsCisgICAgICAgICAgICAgICAgKSwgQ29t
bWl0KAorICAgICAgICAgICAgICAgICAgICBpZGVudGlmaWVyPSczQHt9Jy5mb3JtYXQoZGVmYXVs
dF9icmFuY2gpLAorICAgICAgICAgICAgICAgICAgICBoYXNoPScxYWJlMjViNDQzZTk4NWY5M2I5
MGQ4MzBlNGE3ZTM3MzEzMzZhZjRkJywKKyAgICAgICAgICAgICAgICAgICAgcmV2aXNpb249NCBp
ZiBnaXRfc3ZuIGVsc2UgTm9uZSwKKyAgICAgICAgICAgICAgICAgICAgYXV0aG9yPWNvbnRyaWJ1
dG9yLAorICAgICAgICAgICAgICAgICAgICB0aW1lc3RhbXA9MTYwMTY2MzAwMCwKKyAgICAgICAg
ICAgICAgICAgICAgbWVzc2FnZT0nNHRoIGNvbW1pdFxuJywKKyAgICAgICAgICAgICAgICApLCBD
b21taXQoCisgICAgICAgICAgICAgICAgICAgIGlkZW50aWZpZXI9JzRAe30nLmZvcm1hdChkZWZh
dWx0X2JyYW5jaCksCisgICAgICAgICAgICAgICAgICAgIGhhc2g9J2JhZTVkMWU5MDk5OWQ0Zjkx
NmE4YTE1ODEwY2NmYTQzZjM3YTJmZDYnLAorICAgICAgICAgICAgICAgICAgICByZXZpc2lvbj02
IGlmIGdpdF9zdm4gZWxzZSBOb25lLAorICAgICAgICAgICAgICAgICAgICBhdXRob3I9Y29udHJp
YnV0b3IsCisgICAgICAgICAgICAgICAgICAgIHRpbWVzdGFtcD0xNjAxNjY1MDAwLAorICAgICAg
ICAgICAgICAgICAgICBtZXNzYWdlPSc2dGggY29tbWl0XG4nLAorICAgICAgICAgICAgICAgICks
CisgICAgICAgICAgICBdLCAnYnJhbmNoLWEnOiBbCisgICAgICAgICAgICAgICAgQ29tbWl0KAor
ICAgICAgICAgICAgICAgICAgICBpZGVudGlmaWVyPScyLjFAYnJhbmNoLWEnLAorICAgICAgICAg
ICAgICAgICAgICBoYXNoPSdhMzBjZTg0OTRiZjFhYzI4MDdhNjk4NDRmNzI2YmU0YTk4NDNjYTU1
JywKKyAgICAgICAgICAgICAgICAgICAgcmV2aXNpb249MyBpZiBnaXRfc3ZuIGVsc2UgTm9uZSwK
KyAgICAgICAgICAgICAgICAgICAgYXV0aG9yPWNvbnRyaWJ1dG9yLAorICAgICAgICAgICAgICAg
ICAgICB0aW1lc3RhbXA9MTYwMTY2MjAwMCwKKyAgICAgICAgICAgICAgICAgICAgbWVzc2FnZT0n
M3JkIGNvbW1pdFxuJywKKyAgICAgICAgICAgICAgICApLCBDb21taXQoCisgICAgICAgICAgICAg
ICAgICAgIGlkZW50aWZpZXI9JzIuMkBicmFuY2gtYScsCisgICAgICAgICAgICAgICAgICAgIGhh
c2g9JzYyMTY1MmFkZDdmYzQxNjA5OWJkMjA2MzM2NmNjMzhmZjYxYWZlMzYnLAorICAgICAgICAg
ICAgICAgICAgICByZXZpc2lvbj03IGlmIGdpdF9zdm4gZWxzZSBOb25lLAorICAgICAgICAgICAg
ICAgICAgICBhdXRob3I9Y29udHJpYnV0b3IsCisgICAgICAgICAgICAgICAgICAgIHRpbWVzdGFt
cD0xNjAxNjY2MDAwLAorICAgICAgICAgICAgICAgICAgICBtZXNzYWdlPSc3dGggY29tbWl0XG4n
LAorICAgICAgICAgICAgICAgICksCisgICAgICAgICAgICBdLAorICAgICAgICB9CisgICAgICAg
IHNlbGYuY29tbWl0c1snYnJhbmNoLWInXSA9IFsKKyAgICAgICAgICAgIHNlbGYuY29tbWl0c1sn
YnJhbmNoLWEnXVswXSwgQ29tbWl0KAorICAgICAgICAgICAgICAgIGlkZW50aWZpZXI9JzIuMkBi
cmFuY2gtYicsCisgICAgICAgICAgICAgICAgaGFzaD0nM2NkMzJlMzUyNDEwNTY1YmI1NDM4MjFm
YmY4NTZhNmQzY2FhZDFjNCcsCisgICAgICAgICAgICAgICAgcmV2aXNpb249NSBpZiBnaXRfc3Zu
IGVsc2UgTm9uZSwKKyAgICAgICAgICAgICAgICBhdXRob3I9Y29udHJpYnV0b3IsCisgICAgICAg
ICAgICAgICAgdGltZXN0YW1wPTE2MDE2NjQwMDAsCisgICAgICAgICAgICAgICAgbWVzc2FnZT0n
NXRoIGNvbW1pdFxuJywKKyAgICAgICAgICAgICksIENvbW1pdCgKKyAgICAgICAgICAgICAgICBp
ZGVudGlmaWVyPScyLjNAYnJhbmNoLWInLAorICAgICAgICAgICAgICAgIGhhc2g9Jzc5MDcyNWE2
ZDc5ZTI4ZGIyZWNkZGUyOTU0OGQyMjYyYzBiZDA1OWQnLAorICAgICAgICAgICAgICAgIHJldmlz
aW9uPTggaWYgZ2l0X3N2biBlbHNlIE5vbmUsCisgICAgICAgICAgICAgICAgYXV0aG9yPWNvbnRy
aWJ1dG9yLAorICAgICAgICAgICAgICAgIHRpbWVzdGFtcD0xNjAxNjY3MDAwLAorICAgICAgICAg
ICAgICAgIG1lc3NhZ2U9Jzh0aCBjb21taXRcbicsCisgICAgICAgICAgICApLAorICAgICAgICBd
CisgICAgICAgIHNlbGYuaGVhZCA9IHNlbGYuY29tbWl0c1tzZWxmLmRlZmF1bHRfYnJhbmNoXVsz
XQorCisgICAgICAgIHNlbGYudGFnc1sndGFnLTEnXSA9IHNlbGYuY29tbWl0c1snYnJhbmNoLWEn
XVstMV0KKyAgICAgICAgc2VsZi50YWdzWyd0YWctMiddID0gc2VsZi5jb21taXRzWydicmFuY2gt
YiddWy0xXQorCisgICAgZGVmIGNvbW1pdChzZWxmLCByZWYpOgorICAgICAgICBpZiByZWYgaW4g
c2VsZi5jb21taXRzOgorICAgICAgICAgICAgcmV0dXJuIHNlbGYuY29tbWl0c1tyZWZdWy0xXQor
ICAgICAgICBpZiByZWYgaW4gc2VsZi50YWdzOgorICAgICAgICAgICAgcmV0dXJuIHNlbGYudGFn
c1tyZWZdCisKKyAgICAgICAgZm9yIGJyYW5jaCwgY29tbWl0cyBpbiBzZWxmLmNvbW1pdHMuaXRl
bXMoKToKKyAgICAgICAgICAgIGZvciBjb21taXQgaW4gY29tbWl0czoKKyAgICAgICAgICAgICAg
ICBpZiBjb21taXQuaGFzaC5zdGFydHN3aXRoKHJlZik6CisgICAgICAgICAgICAgICAgICAgIHJl
dHVybiBjb21taXQKKworICAgICAgICBpZiAnficgbm90IGluIHJlZjoKKyAgICAgICAgICAgIHJl
dHVybiBOb25lCisgICAgICAgIHJlZiwgZGVsdGEgPSByZWYuc3BsaXQoJ34nKQorICAgICAgICBj
b21taXQgPSBzZWxmLmNvbW1pdChyZWYpCisgICAgICAgIGlmIG5vdCBjb21taXQ6CisgICAgICAg
ICAgICByZXR1cm4gTm9uZQorICAgICAgICBkZWx0YSA9IGludChkZWx0YSkKKworICAgICAgICBp
ZiBkZWx0YSA8IGNvbW1pdC5pZGVudGlmaWVyOgorICAgICAgICAgICAgcmV0dXJuIHNlbGYuY29t
bWl0c1tjb21taXQuYnJhbmNoXVtjb21taXQuaWRlbnRpZmllciAtIGRlbHRhIC0gMV0KKyAgICAg
ICAgZGVsdGEgLT0gY29tbWl0LmlkZW50aWZpZXIKKyAgICAgICAgaWYgZGVsdGEgPCBjb21taXQu
YnJhbmNoX3BvaW50OgorICAgICAgICAgICAgcmV0dXJuIHNlbGYuY29tbWl0c1tzZWxmLmRlZmF1
bHRfYnJhbmNoXVtjb21taXQuYnJhbmNoX3BvaW50IC0gZGVsdGEgLSAxXQorICAgICAgICByZXR1
cm4gTm9uZQorCisgICAgZGVmIHJlcXVlc3Qoc2VsZiwgbWV0aG9kLCB1cmwsIGRhdGE9Tm9uZSwg
Kiprd2FyZ3MpOgorICAgICAgICBpZiBub3QgdXJsLnN0YXJ0c3dpdGgoJ2h0dHA6Ly8nKSBhbmQg
bm90IHVybC5zdGFydHN3aXRoKCdodHRwczovLycpOgorICAgICAgICAgICAgcmV0dXJuIG1vY2tz
LlJlc3BvbnNlLmNyZWF0ZTQwNCh1cmwpCisKKyAgICAgICAgc3RyaXBwZWRfdXJsID0gdXJsLnNw
bGl0KCc6Ly8nKVstMV0KKworICAgICAgICAjIFRvcC1sZXZlbCBBUEkgcmVxdWVzdAorICAgICAg
ICBpZiBzdHJpcHBlZF91cmwgPT0gc2VsZi5hcGlfcmVtb3RlOgorICAgICAgICAgICAgcmV0dXJu
IG1vY2tzLlJlc3BvbnNlLmZyb21Kc29uKHsKKyAgICAgICAgICAgICAgICAnaWQnOiAxLAorICAg
ICAgICAgICAgICAgICduYW1lJzogc2VsZi5yZW1vdGUuc3BsaXQoJy8nKVsyXSwKKyAgICAgICAg
ICAgICAgICAndXJsJzogdXJsLAorICAgICAgICAgICAgICAgICdkZWZhdWx0X2JyYW5jaCc6IHNl
bGYuZGVmYXVsdF9icmFuY2gsCisgICAgICAgICAgICAgICAgJ293bmVyJzogeworICAgICAgICAg
ICAgICAgICAgICAnbG9naW4nOiBzZWxmLnJlbW90ZS5zcGxpdCgnLycpWzFdLAorICAgICAgICAg
ICAgICAgIH0sICdvcmdhbml6YXRpb24nOiB7CisgICAgICAgICAgICAgICAgICAgICdsb2dpbic6
IHNlbGYucmVtb3RlLnNwbGl0KCcvJylbMV0sCisgICAgICAgICAgICAgICAgfSwgJ2h0bWxfdXJs
Jzogc2VsZi5yZW1vdGUsCisgICAgICAgICAgICB9LCB1cmw9dXJsKQorCisgICAgICAgICMgQnJh
bmNoZXMvVGFncworICAgICAgICBpZiBzdHJpcHBlZF91cmwgaW4gWyd7fS9icmFuY2hlcycuZm9y
bWF0KHNlbGYuYXBpX3JlbW90ZSksICd7fS90YWdzJy5mb3JtYXQoc2VsZi5hcGlfcmVtb3RlKV06
CisgICAgICAgICAgICByZXR1cm4gbW9ja3MuUmVzcG9uc2UuZnJvbUpzb24oWworICAgICAgICAg
ICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgJ25hbWUnOiByZWZlcmVuY2UsCisgICAgICAg
ICAgICAgICAgICAgICdjb21taXQnOiB7CisgICAgICAgICAgICAgICAgICAgICAgICAnc2hhJzog
Y29tbWl0Wy0xXS5oYXNoIGlmIGlzaW5zdGFuY2UoY29tbWl0LCBsaXN0KSBlbHNlIGNvbW1pdC5o
YXNoLAorICAgICAgICAgICAgICAgICAgICAgICAgJ3VybCc6ICdodHRwczovL3t9L2NvbW1pdHMv
e30nLmZvcm1hdChzZWxmLmFwaV9yZW1vdGUsIGNvbW1pdFstMV0uaGFzaCBpZiBpc2luc3RhbmNl
KGNvbW1pdCwgbGlzdCkgZWxzZSBjb21taXQuaGFzaCksCisgICAgICAgICAgICAgICAgICAgIH0s
CisgICAgICAgICAgICAgICAgfSBmb3IgcmVmZXJlbmNlLCBjb21taXQgaW4gKHNlbGYuY29tbWl0
cyBpZiBzdHJpcHBlZF91cmwuZW5kc3dpdGgoJ2JyYW5jaGVzJykgZWxzZSBzZWxmLnRhZ3MpLml0
ZW1zKCkKKyAgICAgICAgICAgIF0sIHVybD11cmwpCisKKyAgICAgICAgIyBFeHRyYWN0IHNpbmds
ZSBjb21taXQKKyAgICAgICAgaWYgc3RyaXBwZWRfdXJsLnN0YXJ0c3dpdGgoJ3t9L2NvbW1pdHMv
Jy5mb3JtYXQoc2VsZi5hcGlfcmVtb3RlKSk6CisgICAgICAgICAgICBjb21taXQgPSBzZWxmLmNv
bW1pdChzdHJpcHBlZF91cmwuc3BsaXQoJy8nKVstMV0pCisgICAgICAgICAgICBpZiBub3QgY29t
bWl0OgorICAgICAgICAgICAgICAgIHJldHVybiBtb2Nrcy5SZXNwb25zZSgKKyAgICAgICAgICAg
ICAgICAgICAgc3RhdHVzX2NvZGU9NDA0LAorICAgICAgICAgICAgICAgICAgICB1cmw9dXJsLAor
ICAgICAgICAgICAgICAgICAgICB0ZXh0PWpzb24uZHVtcHMoZGljdChtZXNzYWdlPSdObyBjb21t
aXQgZm91bmQgZm9yIFNIQToge30nLmZvcm1hdChzdHJpcHBlZF91cmwuc3BsaXQoJy8nKVstMV0p
KSksCisgICAgICAgICAgICAgICAgKQorICAgICAgICAgICAgcmV0dXJuIG1vY2tzLlJlc3BvbnNl
LmZyb21Kc29uKHsKKyAgICAgICAgICAgICAgICAnc2hhJzogY29tbWl0Lmhhc2gsCisgICAgICAg
ICAgICAgICAgJ2NvbW1pdCc6IHsKKyAgICAgICAgICAgICAgICAgICAgJ2F1dGhvcic6IHsKKyAg
ICAgICAgICAgICAgICAgICAgICAgICduYW1lJzogY29tbWl0LmF1dGhvci5uYW1lLAorICAgICAg
ICAgICAgICAgICAgICAgICAgJ2VtYWlsJzogY29tbWl0LmF1dGhvci5lbWFpbCwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICdkYXRlJzogZGF0ZXRpbWUuZnJvbXRpbWVzdGFtcChjb21taXQudGlt
ZXN0YW1wKS5zdHJmdGltZSgnJVktJW0tJWRUJUg6JU06JVNaJyksCisgICAgICAgICAgICAgICAg
ICAgIH0sICdjb21taXR0ZXInOiB7CisgICAgICAgICAgICAgICAgICAgICAgICAnbmFtZSc6IGNv
bW1pdC5hdXRob3IubmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICdlbWFpbCc6IGNvbW1p
dC5hdXRob3IuZW1haWwsCisgICAgICAgICAgICAgICAgICAgICAgICAnZGF0ZSc6IGRhdGV0aW1l
LmZyb210aW1lc3RhbXAoY29tbWl0LnRpbWVzdGFtcCkuc3RyZnRpbWUoJyVZLSVtLSVkVCVIOiVN
OiVTWicpLAorICAgICAgICAgICAgICAgICAgICB9LCAnbWVzc2FnZSc6IGNvbW1pdC5tZXNzYWdl
LAorICAgICAgICAgICAgICAgICAgICAndXJsJzogJ2h0dHBzOi8ve30vZ2l0L2NvbW1pdHMve30n
LmZvcm1hdChzZWxmLmFwaV9yZW1vdGUsIGNvbW1pdC5oYXNoKSwKKyAgICAgICAgICAgICAgICB9
LCAndXJsJzogJ2h0dHBzOi8ve30vY29tbWl0cy97fScuZm9ybWF0KHNlbGYuYXBpX3JlbW90ZSwg
Y29tbWl0Lmhhc2gpLAorICAgICAgICAgICAgICAgICdodG1sX3VybCc6ICdodHRwczovL3t9L2Nv
bW1pdC97fScuZm9ybWF0KHNlbGYucmVtb3RlLCBjb21taXQuaGFzaCksCisgICAgICAgICAgICB9
LCB1cmw9dXJsKQorCisgICAgICAgICMgQ29tcGFyZSB0d28gY29tbWl0cworICAgICAgICBpZiBz
dHJpcHBlZF91cmwuc3RhcnRzd2l0aCgne30vY29tcGFyZS8nLmZvcm1hdChzZWxmLmFwaV9yZW1v
dGUpKToKKyAgICAgICAgICAgIHJlZl9hLCByZWZfYiA9IHN0cmlwcGVkX3VybC5zcGxpdCgnLycp
Wy0xXS5zcGxpdCgnLi4uJykKKyAgICAgICAgICAgIGNvbW1pdF9hID0gc2VsZi5jb21taXQocmVm
X2EpCisgICAgICAgICAgICBjb21taXRfYiA9IHNlbGYuY29tbWl0KHJlZl9iKQorICAgICAgICAg
ICAgaWYgbm90IGNvbW1pdF9hIG9yIG5vdCBjb21taXRfYjoKKyAgICAgICAgICAgICAgICByZXR1
cm4gbW9ja3MuUmVzcG9uc2UoCisgICAgICAgICAgICAgICAgICAgIHN0YXR1c19jb2RlPTQwNCwK
KyAgICAgICAgICAgICAgICAgICAgdXJsPXVybCwKKyAgICAgICAgICAgICAgICAgICAgdGV4dD1q
c29uLmR1bXBzKGRpY3QobWVzc2FnZT0nTm90IGZvdW5kJykpLAorICAgICAgICAgICAgICAgICkK
KworICAgICAgICAgICAgaWYgY29tbWl0X2EuYnJhbmNoICE9IHNlbGYuZGVmYXVsdF9icmFuY2gg
b3IgY29tbWl0X2IuYnJhbmNoID09IHNlbGYuZGVmYXVsdF9icmFuY2g6CisgICAgICAgICAgICAg
ICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvcignVGhpcyBpcyBhIHZhbGlkIGNvbXBhcmlzb24g
Y29tbWFuZCwgYnV0IGhhcyBub3QgYmVlbiBpbXBsZW1lbnRlZCBpbiB0aGUgbW9jayBHaXRIdWIg
QVBJJykKKworICAgICAgICAgICAgcmV0dXJuIG1vY2tzLlJlc3BvbnNlLmZyb21Kc29uKHsKKyAg
ICAgICAgICAgICAgICAnc3RhdHVzJzogJ2RpdmVyZ2VkJywKKyAgICAgICAgICAgICAgICAnYWhl
YWRfYnknOiBjb21taXRfYi5pZGVudGlmaWVyLAorICAgICAgICAgICAgICAgICdiZWhpbmRfYnkn
OiBjb21taXRfYS5pZGVudGlmaWVyIC0gY29tbWl0X2IuYnJhbmNoX3BvaW50LAorICAgICAgICAg
ICAgfSwgdXJsPXVybCkKKworICAgICAgICAjIExpc3QgYnJhbmNoZXMgYSBjb21taXQgb2NjdXJz
IG9uCisgICAgICAgIGlmIHN0cmlwcGVkX3VybC5zdGFydHN3aXRoKCd7fS9icmFuY2hfY29tbWl0
cy8nLmZvcm1hdChzZWxmLnJlbW90ZSkpOgorICAgICAgICAgICAgY29tbWl0ID0gc2VsZi5jb21t
aXQoc3RyaXBwZWRfdXJsLnNwbGl0KCcvJylbLTFdKQorICAgICAgICAgICAgaWYgbm90IGNvbW1p
dDoKKyAgICAgICAgICAgICAgICByZXR1cm4gbW9ja3MuUmVzcG9uc2UuY3JlYXRlNDA0KHVybCkK
KyAgICAgICAgICAgIHJldHVybiBtb2Nrcy5SZXNwb25zZS5mcm9tVGV4dCgKKyAgICAgICAgICAg
ICAgICAnXG5cbiAgICA8c3ZnIGNsYXNzPSJvY3RpY29uIG9jdGljb24tZ2l0LWJyYW5jaCI+PHBh
dGg+PC9wYXRoPjwvc3ZnPlxuJworICAgICAgICAgICAgICAgICcgICAgPHVsIGNsYXNzPSJicmFu
Y2hlcy1saXN0Ij5cbicKKyAgICAgICAgICAgICAgICAnICAgICAgICA8bGkgY2xhc3M9ImJyYW5j
aCI+PGEgaHJlZj0iL3t9Ij57fTwvYT48L2xpPlxuJworICAgICAgICAgICAgICAgICcgICAgPC91
bD5cbicuZm9ybWF0KAorICAgICAgICAgICAgICAgICAgICAnLycuam9pbihzZWxmLnJlbW90ZS5z
cGxpdCgnLycpWzE6XSksCisgICAgICAgICAgICAgICAgICAgIGNvbW1pdC5icmFuY2gsCisgICAg
ICAgICAgICAgICAgKSwgdXJsPXVybAorICAgICAgICAgICAgKQorCisgICAgICAgICMgRmluZCB0
aGUgbnVtYmVyIG9mIHBhcmVudHMgYSBjb21taXQgaGFzCisgICAgICAgIGlmIHN0cmlwcGVkX3Vy
bC5zdGFydHN3aXRoKCd7fS90cmVlLycuZm9ybWF0KHNlbGYucmVtb3RlKSk6CisgICAgICAgICAg
ICBjb21taXQgPSBzZWxmLmNvbW1pdChzdHJpcHBlZF91cmwuc3BsaXQoJy8nKVstMV0pCisgICAg
ICAgICAgICBpZiBub3QgY29tbWl0OgorICAgICAgICAgICAgICAgIHJldHVybiBtb2Nrcy5SZXNw
b25zZS5jcmVhdGU0MDQodXJsKQorCisgICAgICAgICAgICAjIFRoaXMgcmVzcG9uc2UgaXMgYWJi
cmV2aWF0ZWQgc2luY2UgbW9zdCBpcyB1bnVzZWQKKyAgICAgICAgICAgIHJldHVybiBtb2Nrcy5S
ZXNwb25zZS5mcm9tVGV4dCgKKyAgICAgICAgICAgICAgICAnXG5cblxuXG48IURPQ1RZUEUgaHRt
bD5cbicKKyAgICAgICAgICAgICAgICAnPGh0bWwgbGFuZz0iZW4iPlxuJworICAgICAgICAgICAg
ICAgICcuLi5cbicKKyAgICAgICAgICAgICAgICAnPGRpdiBjbGFzcz0iQm94IG1iLTMiPlxuJwor
ICAgICAgICAgICAgICAgICcgICAgPGRpdiBjbGFzcz0iQm94LWhlYWRlciBCb3gtaGVhZGVyLS1i
bHVlIHBvc2l0aW9uLXJlbGF0aXZlIj5cbicKKyAgICAgICAgICAgICAgICAnICAgICAgICA8aDIg
Y2xhc3M9InNyLW9ubHkiPkxhdGVzdCBjb21taXQ8L2gyPlxuJworICAgICAgICAgICAgICAgICcg
ICAgICAgIDxkaXYgY2xhc3M9Ii4uLiIgZGF0YS1pc3N1ZS1hbmQtcHItaG92ZXJjYXJkcy1lbmFi
bGVkPlxuJworICAgICAgICAgICAgICAgICcgICAgICAgICAgICA8aW5jbHVkZS1mcmFnbWVudCBz
cmM9Ii9XZWJLaXQvd2Via2l0L3RyZWUtY29tbWl0L3tyZWZ9IiBhcmlhLWxhYmVsPSJMb2FkaW5n
IGxhdGVzdCBjb21taXQiPlxuJworICAgICAgICAgICAgICAgICcgICAgICAgICAgICA8L2luY2x1
ZGUtZnJhZ21lbnQ+XG4nCisgICAgICAgICAgICAgICAgJyAgICAgICAgPHVsIGNsYXNzPSJsaXN0
LXN0eWxlLW5vbmUgZC1mbGV4Ij5cbicKKyAgICAgICAgICAgICAgICAnICAgICAgICAgICAgPGxp
IGNsYXNzPSJtbC0wIG1sLW1kLTMiPlxuJworICAgICAgICAgICAgICAgICcgICAgICAgICAgICAg
ICAgPGEgZGF0YS1wamF4IGhyZWY9Ii9XZWJLaXQvd2Via2l0L2NvbW1pdHMve3JlZn0iPlxuJwor
ICAgICAgICAgICAgICAgICcgICAgICAgICAgICAgICAgICAgIDxzdmcgY2xhc3M9Im9jdGljb24g
b2N0aWNvbi1oaXN0b3J5IHRleHQtZ3JheSI+PHBhdGg+PC9wYXRoPjwvc3ZnPlxuJworICAgICAg
ICAgICAgICAgICcgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJkLW5vbmUgZC1zbS1p
bmxpbmUiPlxuJworICAgICAgICAgICAgICAgICcgICAgICAgICAgICAgICAgICAgICAgICA8c3Ry
b25nPntjb3VudH08L3N0cm9uZz5cbicKKyAgICAgICAgICAgICAgICAnICAgICAgICAgICAgICAg
ICAgICAgICAgPHNwYW4gYXJpYS1sYWJlbD0iQ29tbWl0cyBvbiAiIGNsYXNzPSIuLi4iPmNvbW1p
dHM8L3NwYW4+XG4nCisgICAgICAgICAgICAgICAgJyAgICAgICAgICAgICAgICAgICAgICAgIDwv
c3Bhbj5cbicKKyAgICAgICAgICAgICAgICAnICAgICAgICAgICAgICAgIDwvYT5cbicKKyAgICAg
ICAgICAgICAgICAnICAgICAgICAgICAgPC9saT5cbicKKyAgICAgICAgICAgICAgICAnICAgICAg
ICA8L3VsPlxuJworICAgICAgICAgICAgICAgICcgICAgICAgIDwvZGl2PlxuJworICAgICAgICAg
ICAgICAgICcgICAgPC9kaXY+XG4nCisgICAgICAgICAgICAgICAgJzwvZGl2PlxuJworICAgICAg
ICAgICAgICAgICcuLi5cbicKKyAgICAgICAgICAgICAgICAnPC9odG1sPlxuJy5mb3JtYXQoCisg
ICAgICAgICAgICAgICAgICAgIHJlZj1jb21taXQuaGFzaCwKKyAgICAgICAgICAgICAgICAgICAg
Y291bnQ9Y29tbWl0LmlkZW50aWZpZXIgKyAoY29tbWl0LmJyYW5jaF9wb2ludCBvciAwKSwKKyAg
ICAgICAgICAgICAgICApLCB1cmw9dXJsCisgICAgICAgICAgICApCisKKyAgICAgICAgcmV0dXJu
IG1vY2tzLlJlc3BvbnNlLmNyZWF0ZTQwNCh1cmwpCkluZGV4OiBUb29scy9TY3JpcHRzL2xpYnJh
cmllcy93ZWJraXRzY21weS93ZWJraXRzY21weS9yZW1vdGUvX19pbml0X18ucHkKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gVG9vbHMvU2NyaXB0cy9saWJyYXJpZXMvd2Via2l0c2NtcHkvd2Via2l0c2NtcHkvcmVt
b3RlL19faW5pdF9fLnB5CShyZXZpc2lvbiAyNzA2ODApCisrKyBUb29scy9TY3JpcHRzL2xpYnJh
cmllcy93ZWJraXRzY21weS93ZWJraXRzY21weS9yZW1vdGUvX19pbml0X18ucHkJKHdvcmtpbmcg
Y29weSkKQEAgLTIyLDMgKzIyLDQgQEAKIAogZnJvbSB3ZWJraXRzY21weS5yZW1vdGUuc2NtIGlt
cG9ydCBTY20KIGZyb20gd2Via2l0c2NtcHkucmVtb3RlLnN2biBpbXBvcnQgU3ZuCitmcm9tIHdl
YmtpdHNjbXB5LnJlbW90ZS5naXRfaHViIGltcG9ydCBHaXRIdWIKSW5kZXg6IFRvb2xzL1Njcmlw
dHMvbGlicmFyaWVzL3dlYmtpdHNjbXB5L3dlYmtpdHNjbXB5L3JlbW90ZS9naXRfaHViLnB5Cj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFRvb2xzL1NjcmlwdHMvbGlicmFyaWVzL3dlYmtpdHNjbXB5L3dlYmtpdHNj
bXB5L3JlbW90ZS9naXRfaHViLnB5CShub25leGlzdGVudCkKKysrIFRvb2xzL1NjcmlwdHMvbGli
cmFyaWVzL3dlYmtpdHNjbXB5L3dlYmtpdHNjbXB5L3JlbW90ZS9naXRfaHViLnB5CSh3b3JraW5n
IGNvcHkpCkBAIC0wLDAgKzEsMjc5IEBACisjIENvcHlyaWdodCAoQykgMjAyMCBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjCisjIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorIyBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyMgYXJl
IG1ldDoKKyMgMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisjICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisjIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorIyAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyMKKyMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5ECisjIEFOWSBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFRIRSBJTVBMSUVECisjIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyMgRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IKKyMg
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTAorIyBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUgorIyBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUgor
IyBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLAorIyBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorIyBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgorCitpbXBvcnQgY2FsZW5kYXIKK2ltcG9ydCByZQoraW1wb3J0IHJlcXVlc3RzCitpbXBv
cnQgc2l4CisKK2Zyb20gZGF0ZXRpbWUgaW1wb3J0IGRhdGV0aW1lCitmcm9tIHdlYmtpdGNvcmVw
eSBpbXBvcnQgZGVjb3JhdG9ycworZnJvbSB3ZWJraXRzY21weSBpbXBvcnQgQ29tbWl0LCBDb250
cmlidXRvcgorZnJvbSB3ZWJraXRzY21weS5yZW1vdGUuc2NtIGltcG9ydCBTY20KK2Zyb20geG1s
LmRvbSBpbXBvcnQgbWluaWRvbQorCisKK2NsYXNzIEdpdEh1YihTY20pOgorICAgIFVSTF9SRSA9
IHJlLmNvbXBpbGUocidcQWh0dHBzPzovL2dpdGh1Yi4oP1A8ZG9tYWluPlxTKykvKD9QPG93bmVy
PlxTKykvKD9QPHJlcG9zaXRvcnk+XFMrKVxaJykKKyAgICBFTUFJTF9SRSA9IHJlLmNvbXBpbGUo
cicoP1A8ZW1haWw+W15AXStAW15AXSspKEAuKik/JykKKworICAgIEBjbGFzc21ldGhvZAorICAg
IGRlZiBpc193ZWJzZXJ2ZXIoY2xzLCB1cmwpOgorICAgICAgICByZXR1cm4gVHJ1ZSBpZiBjbHMu
VVJMX1JFLm1hdGNoKHVybCkgZWxzZSBGYWxzZQorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHVy
bCwgZGV2X2JyYW5jaGVzPU5vbmUsIHByb2RfYnJhbmNoZXM9Tm9uZSwgY29udHJpYnV0b3JzPU5v
bmUpOgorICAgICAgICBtYXRjaCA9IHNlbGYuVVJMX1JFLm1hdGNoKHVybCkKKyAgICAgICAgaWYg
bm90IG1hdGNoOgorICAgICAgICAgICAgcmFpc2Ugc2VsZi5FeGNlcHRpb24oIid7fScgaXMgbm90
IGEgdmFsaWQgR2l0SHViIHByb2plY3QiLmZvcm1hdCh1cmwpKQorICAgICAgICBzZWxmLmFwaV91
cmwgPSAnaHR0cHM6Ly9hcGkuZ2l0aHViLnt9Jy5mb3JtYXQobWF0Y2guZ3JvdXAoJ2RvbWFpbicp
KQorICAgICAgICBzZWxmLm93bmVyID0gbWF0Y2guZ3JvdXAoJ293bmVyJykKKyAgICAgICAgc2Vs
Zi5uYW1lID0gbWF0Y2guZ3JvdXAoJ3JlcG9zaXRvcnknKQorICAgICAgICBzZWxmLl9oYXNoX2xp
bmtfcmUgPSByZS5jb21waWxlKHInL3tvd25lcn0ve25hbWV9L2NvbW1pdHM/Lyg/UDxoYXNoPlsw
LTlhLWZdKyknLmZvcm1hdCgKKyAgICAgICAgICAgIG93bmVyPXNlbGYub3duZXIsCisgICAgICAg
ICAgICBuYW1lPXNlbGYubmFtZSwKKyAgICAgICAgKSkKKworICAgICAgICBzdXBlcihHaXRIdWIs
IHNlbGYpLl9faW5pdF9fKHVybCwgZGV2X2JyYW5jaGVzPWRldl9icmFuY2hlcywgcHJvZF9icmFu
Y2hlcz1wcm9kX2JyYW5jaGVzLCBjb250cmlidXRvcnM9Y29udHJpYnV0b3JzKQorCisgICAgQHBy
b3BlcnR5CisgICAgZGVmIGlzX2dpdChzZWxmKToKKyAgICAgICAgcmV0dXJuIFRydWUKKworICAg
IGRlZiByZXF1ZXN0KHNlbGYsIHBhdGg9Tm9uZSwgcGFyYW1zPU5vbmUsIGhlYWRlcnM9Tm9uZSk6
CisgICAgICAgIGhlYWRlcnMgPSB7a2V5OiB2YWx1ZSBmb3Iga2V5LCB2YWx1ZSBpbiBoZWFkZXJz
Lml0ZW1zKCl9IGlmIGhlYWRlcnMgZWxzZSBkaWN0KCkKKyAgICAgICAgaGVhZGVyc1snQWNjZXB0
J10gPSBoZWFkZXJzLmdldCgnQWNjZXB0JywgJ2FwcGxpY2F0aW9uL3ZuZC5naXRodWIudjMranNv
bicpCisKKyAgICAgICAgcGFyYW1zID0ge2tleTogdmFsdWUgZm9yIGtleSwgdmFsdWUgaW4gcGFy
YW1zLml0ZW1zKCl9IGlmIHBhcmFtcyBlbHNlIGRpY3QoKQorICAgICAgICBwYXJhbXNbJ3Blcl9w
YWdlJ10gPSBwYXJhbXMuZ2V0KCdwZXJfcGFnZScsIDEwMCkKKyAgICAgICAgcGFyYW1zWydwYWdl
J10gPSBwYXJhbXMuZ2V0KCdwYWdlJywgMSkKKworICAgICAgICB1cmwgPSAne2FwaV91cmx9L3Jl
cG9zL3tvd25lcn0ve25hbWV9e3BhdGh9Jy5mb3JtYXQoCisgICAgICAgICAgICBhcGlfdXJsPXNl
bGYuYXBpX3VybCwKKyAgICAgICAgICAgIG93bmVyPXNlbGYub3duZXIsCisgICAgICAgICAgICBu
YW1lPXNlbGYubmFtZSwKKyAgICAgICAgICAgIHBhdGg9Jy97fScuZm9ybWF0KHBhdGgpIGlmIHBh
dGggZWxzZSAnJywKKyAgICAgICAgKQorICAgICAgICByZXNwb25zZSA9IHJlcXVlc3RzLmdldCh1
cmwsIHBhcmFtcz1wYXJhbXMsIGhlYWRlcnM9aGVhZGVycykKKyAgICAgICAgaWYgcmVzcG9uc2Uu
c3RhdHVzX2NvZGUgIT0gMjAwOgorICAgICAgICAgICAgcmV0dXJuIE5vbmUKKyAgICAgICAgcmVz
dWx0ID0gcmVzcG9uc2UuanNvbigpCisKKyAgICAgICAgd2hpbGUgaXNpbnN0YW5jZShyZXNwb25z
ZS5qc29uKCksIGxpc3QpIGFuZCBsZW4ocmVzcG9uc2UuanNvbigpKSA9PSBwYXJhbXNbJ3Blcl9w
YWdlJ106CisgICAgICAgICAgICBwYXJhbXNbJ3BhZ2UnXSArPSAxCisgICAgICAgICAgICByZXNw
b25zZSA9IHJlcXVlc3RzLmdldCh1cmwsIHBhcmFtcz1wYXJhbXMsIGhlYWRlcnM9aGVhZGVycykK
KyAgICAgICAgICAgIGlmIHJlc3BvbnNlLnN0YXR1c19jb2RlICE9IDIwMDoKKyAgICAgICAgICAg
ICAgICByZXR1cm4gcmVzdWx0CisgICAgICAgICAgICByZXN1bHQgKz0gcmVzcG9uc2UuanNvbigp
CisgICAgICAgIHJldHVybiByZXN1bHQKKworICAgIGRlZiBfY291bnQoc2VsZiwgcmVmPU5vbmUp
OgorICAgICAgICByZWYgPSByZWYgb3Igc2VsZi5kZWZhdWx0X2JyYW5jaAorCisgICAgICAgICMg
V2UgbmVlZCB0aGUgbnVtYmVyIG9mIHBhcmVudHMgYSBjb21taXQgaGFzIHRvIGNvbnN0cnVjdCBp
ZGVudGlmaWVycywgd2hpY2ggaXMgbm90IHNvbWV0aGluZyBHaXRIdWIncworICAgICAgICAjIEFQ
SSBsZXRzIHVzIGZpbmQsIGFsdGhvdWdoIHRoZSBVSSBkb2VzIGhhdmUgdGhlIGluZm9ybWF0aW9u
CisgICAgICAgIHJlc3BvbnNlID0gcmVxdWVzdHMuZ2V0KCd7fS90cmVlL3t9Jy5mb3JtYXQoc2Vs
Zi51cmwsIHJlZikpCisgICAgICAgIGlmIHJlc3BvbnNlLnN0YXR1c19jb2RlICE9IDIwMDoKKyAg
ICAgICAgICAgIHJhaXNlIHNlbGYuRXhjZXB0aW9uKCJGYWlsZWQgdG8gcXVlcnkge30ncyBVSSB0
byBmaW5kIHRoZSBudW1iZXIgb2YgcGFyZW50cyB7fSBoYXMiLmZvcm1hdChzZWxmLnVybCwgcmVm
KSkKKworICAgICAgICAjIFRoaXMgcGFyc2luZyBpcyBwcmV0dHkgYnJpdHRsZSwgYnV0IHRoZSB3
ZWJwYWdlIG1heSBub3QgYmUgdmFsaWQgeG1sCisgICAgICAgIGNvdW50ID0gTm9uZQorICAgICAg
ICBoYXNoID0gTm9uZQorICAgICAgICBwcmV2aW91cyA9IE5vbmUKKyAgICAgICAgZm9yIGxpbmUg
aW4gcmVzcG9uc2UudGV4dC5zcGxpdGxpbmVzKCk6CisgICAgICAgICAgICBtYXRjaCA9IHNlbGYu
X2hhc2hfbGlua19yZS5zZWFyY2gobGluZSkKKyAgICAgICAgICAgIGlmIG1hdGNoOgorICAgICAg
ICAgICAgICAgIGhhc2ggPSBtYXRjaC5ncm91cCgnaGFzaCcpCisgICAgICAgICAgICBlbGlmICdh
cmlhLWxhYmVsPSJDb21taXRzIG9uICcgaW4gbGluZToKKyAgICAgICAgICAgICAgICBjb3VudCA9
IGludChtaW5pZG9tLnBhcnNlU3RyaW5nKHByZXZpb3VzKS5kb2N1bWVudEVsZW1lbnQuY2hpbGRO
b2Rlc1swXS5kYXRhLnJlcGxhY2UoJywnLCAnJykpCisgICAgICAgICAgICAgICAgYnJlYWsKKyAg
ICAgICAgICAgIHByZXZpb3VzID0gbGluZQorCisgICAgICAgIGlmIG5vdCBoYXNoIG9yIG5vdCBj
b3VudDoKKyAgICAgICAgICAgIHJhaXNlIHNlbGYuRXhjZXB0aW9uKCJGYWlsZWQgdG8gY29tcHV0
ZSB0aGUgbnVtYmVyIG9mIHBhcmVudHMgdG8gJ3t9JyIuZm9ybWF0KHJlZikpCisKKyAgICAgICAg
cmV0dXJuIGNvdW50LCBoYXNoCisKKyAgICBkZWYgX2RpZmZlcmVuY2Uoc2VsZiwgcmVmZXJlbmNl
LCBoZWFkKToKKyAgICAgICAgcmVzcG9uc2UgPSBzZWxmLnJlcXVlc3QoJ2NvbXBhcmUve30uLi57
fScuZm9ybWF0KHJlZmVyZW5jZSwgaGVhZCksIGhlYWRlcnM9ZGljdChBY2NlcHQ9J2FwcGxpY2F0
aW9uL3ZuZC5naXRodWIuVkVSU0lPTi5zaGEnKSkKKyAgICAgICAgaWYgbm90IHJlc3BvbnNlIG9y
IG5vdCByZXNwb25zZS5nZXQoJ3N0YXR1cycpIGluIFsnZGl2ZXJnZWQnLCAnYWhlYWQnLCAnYmVo
aW5kJ106CisgICAgICAgICAgICByYWlzZSBzZWxmLkV4Y2VwdGlvbignRmFpbGVkIHRvIHJlcXVl
c3QgdGhlIGRpZmZlcmVuY2UgYmV0d2VlbiB7fSBhbmQge30nLmZvcm1hdChyZWZlcmVuY2UsIGhl
YWQpKQorICAgICAgICByZXR1cm4gaW50KHJlc3BvbnNlWydiZWhpbmRfYnknIGlmIHJlc3BvbnNl
LmdldCgnc3RhdHVzJykgPT0gJ2JlaGluZCcgZWxzZSAnYWhlYWRfYnknXSkKKworICAgIGRlZiBf
YnJhbmNoZXNfZm9yKHNlbGYsIGhhc2gpOgorICAgICAgICAjIFdlIG5lZWQgdG8gZmluZCB0aGUg
YnJhbmNoIHRoYXQgYSBjb21taXQgaXMgb24uIEdpdEh1YidzIFVJIHByb3ZpZGVzIHRoaXMgaW5m
b3JtYXRpb24sIGJ1dCB0aGUgb25seSB3YXkgdG8KKyAgICAgICAgIyByZXRyaWV2ZSB0aGlzIGlu
Zm9ybWF0aW9uIHZpYSB0aGUgQVBJIHdvdWxkIGJlIHRvIGNoZWNrIGFsbCBicmFuY2hlcyBmb3Ig
dGhlIGNvbW1pdCwgc28gd2Ugc2NyYXBlIHRoZSBVSS4KKyAgICAgICAgcmVzcG9uc2UgPSByZXF1
ZXN0cy5nZXQoJ3t9L2JyYW5jaF9jb21taXRzL3t9Jy5mb3JtYXQoc2VsZi51cmwsIGhhc2gpKQor
ICAgICAgICBpZiByZXNwb25zZS5zdGF0dXNfY29kZSAhPSAyMDA6CisgICAgICAgICAgICByZXR1
cm4gW10KKworICAgICAgICByZXN1bHQgPSBbXQorICAgICAgICBmb3IgbGluZSBpbiByZXNwb25z
ZS50ZXh0LnNwbGl0bGluZXMoKToKKyAgICAgICAgICAgIGlmICdjbGFzcz0iYnJhbmNoIicgbm90
IGluIGxpbmU6CisgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgIHJlc3VsdC5h
cHBlbmQobWluaWRvbS5wYXJzZVN0cmluZyhsaW5lKS5kb2N1bWVudEVsZW1lbnQuY2hpbGROb2Rl
c1swXS5jaGlsZE5vZGVzWzBdLmRhdGEpCisKKyAgICAgICAgcmV0dXJuIHJlc3VsdAorCisgICAg
QHByb3BlcnR5CisgICAgQGRlY29yYXRvcnMuTWVtb2l6ZSgpCisgICAgZGVmIGRlZmF1bHRfYnJh
bmNoKHNlbGYpOgorICAgICAgICByZXNwb25zZSA9IHNlbGYucmVxdWVzdCgpCisgICAgICAgIGlm
IG5vdCByZXNwb25zZToKKyAgICAgICAgICAgIHJhaXNlIHNlbGYuRXhjZXB0aW9uKCJGYWlsZWQg
dG8gcXVlcnkge30gZm9yIHt9J3MgZGVmYXVsdCBicmFuY2giLmZvcm1hdChzZWxmLnVybCwgc2Vs
Zi5uYW1lKSkKKyAgICAgICAgcmV0dXJuIHJlc3BvbnNlLmdldCgnZGVmYXVsdF9icmFuY2gnLCAn
bWFzdGVyJykKKworICAgIEBwcm9wZXJ0eQorICAgIGRlZiBicmFuY2hlcyhzZWxmKToKKyAgICAg
ICAgcmVzcG9uc2UgPSBzZWxmLnJlcXVlc3QoJ2JyYW5jaGVzJykKKyAgICAgICAgaWYgbm90IHJl
c3BvbnNlOgorICAgICAgICAgICAgcmV0dXJuIFtzZWxmLmRlZmF1bHRfYnJhbmNoXQorICAgICAg
ICByZXR1cm4gc29ydGVkKFtkZXRhaWxzLmdldCgnbmFtZScpIGZvciBkZXRhaWxzIGluIHJlc3Bv
bnNlIGlmIGRldGFpbHMuZ2V0KCduYW1lJyldKQorCisgICAgQHByb3BlcnR5CisgICAgZGVmIHRh
Z3Moc2VsZik6CisgICAgICAgIHJlc3BvbnNlID0gc2VsZi5yZXF1ZXN0KCd0YWdzJykKKyAgICAg
ICAgaWYgbm90IHJlc3BvbnNlOgorICAgICAgICAgICAgcmV0dXJuIFtdCisgICAgICAgIHJldHVy
biBzb3J0ZWQoW2RldGFpbHMuZ2V0KCduYW1lJykgZm9yIGRldGFpbHMgaW4gcmVzcG9uc2UgaWYg
ZGV0YWlscy5nZXQoJ25hbWUnKV0pCisKKyAgICBkZWYgY29tbWl0KHNlbGYsIGhhc2g9Tm9uZSwg
cmV2aXNpb249Tm9uZSwgaWRlbnRpZmllcj1Ob25lLCBicmFuY2g9Tm9uZSwgdGFnPU5vbmUsIGlu
Y2x1ZGVfbG9nPVRydWUpOgorICAgICAgICBpZiByZXZpc2lvbjoKKyAgICAgICAgICAgIHJhaXNl
IHNlbGYuRXhjZXB0aW9uKCdDYW5ub3QgbWFwIHJldmlzaW9ucyB0byBjb21taXRzIG9uIEdpdEh1
YicpCisKKyAgICAgICAgaWYgaWRlbnRpZmllciBpcyBub3QgTm9uZToKKyAgICAgICAgICAgIGlm
IHJldmlzaW9uOgorICAgICAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoJ0Nhbm5vdCBkZWZp
bmUgYm90aCByZXZpc2lvbiBhbmQgaWRlbnRpZmllcicpCisgICAgICAgICAgICBpZiBoYXNoOgor
ICAgICAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoJ0Nhbm5vdCBkZWZpbmUgYm90aCBoYXNo
IGFuZCBpZGVudGlmaWVyJykKKyAgICAgICAgICAgIGlmIHRhZzoKKyAgICAgICAgICAgICAgICBy
YWlzZSBWYWx1ZUVycm9yKCdDYW5ub3QgZGVmaW5lIGJvdGggdGFnIGFuZCBpZGVudGlmaWVyJykK
KworICAgICAgICAgICAgcGFyc2VkX2JyYW5jaF9wb2ludCwgaWRlbnRpZmllciwgcGFyc2VkX2Jy
YW5jaCA9IENvbW1pdC5fcGFyc2VfaWRlbnRpZmllcihpZGVudGlmaWVyLCBkb19hc3NlcnQ9VHJ1
ZSkKKyAgICAgICAgICAgIGlmIHBhcnNlZF9icmFuY2g6CisgICAgICAgICAgICAgICAgaWYgYnJh
bmNoIGFuZCBicmFuY2ggIT0gcGFyc2VkX2JyYW5jaDoKKyAgICAgICAgICAgICAgICAgICAgcmFp
c2UgVmFsdWVFcnJvcigKKyAgICAgICAgICAgICAgICAgICAgICAgICJDYWxsZXIgcGFzc2VkIGJv
dGggJ2JyYW5jaCcgYW5kICdpZGVudGlmaWVyJywgYnV0IHNwZWNpZmllZCBkaWZmZXJlbnQgYnJh
bmNoZXMgKHt9IGFuZCB7fSkiLmZvcm1hdCgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBi
cmFuY2gsIHBhcnNlZF9icmFuY2gsCisgICAgICAgICAgICAgICAgICAgICAgICApLAorICAgICAg
ICAgICAgICAgICAgICApCisgICAgICAgICAgICAgICAgYnJhbmNoID0gcGFyc2VkX2JyYW5jaAor
CisgICAgICAgICAgICBicmFuY2ggPSBicmFuY2ggb3Igc2VsZi5kZWZhdWx0X2JyYW5jaAorICAg
ICAgICAgICAgaXNfZGVmYXVsdCA9IGJyYW5jaCA9PSBzZWxmLmRlZmF1bHRfYnJhbmNoCisKKyAg
ICAgICAgICAgIGlmIGlzX2RlZmF1bHQgYW5kIHBhcnNlZF9icmFuY2hfcG9pbnQ6CisgICAgICAg
ICAgICAgICAgcmFpc2Ugc2VsZi5FeGNlcHRpb24oJ0Nhbm5vdCBwcm92aWRlIGEgYnJhbmNoIHBv
aW50IGZvciBhIGNvbW1pdCBvbiB0aGUgZGVmYXVsdCBicmFuY2gnKQorCisgICAgICAgICAgICBp
ZiBpc19kZWZhdWx0OgorICAgICAgICAgICAgICAgIGJhc2VfY291bnQsIGJhc2VfcmVmID0gc2Vs
Zi5fY291bnQocmVmPXNlbGYuZGVmYXVsdF9icmFuY2gpCisgICAgICAgICAgICBlbHNlOgorICAg
ICAgICAgICAgICAgIF8sIGJhc2VfcmVmID0gc2VsZi5fY291bnQocmVmPWJyYW5jaCkKKyAgICAg
ICAgICAgICAgICBiYXNlX2NvdW50ID0gc2VsZi5fZGlmZmVyZW5jZShzZWxmLmRlZmF1bHRfYnJh
bmNoLCBiYXNlX3JlZikKKworICAgICAgICAgICAgaWYgaWRlbnRpZmllciA+IGJhc2VfY291bnQ6
CisgICAgICAgICAgICAgICAgcmFpc2Ugc2VsZi5FeGNlcHRpb24oJ0lkZW50aWZpZXIge30gY2Fu
bm90IGJlIGZvdW5kIG9uIHt9Jy5mb3JtYXQoaWRlbnRpZmllciwgYnJhbmNoKSkKKworICAgICAg
ICAgICAgIyBOZWdhdGl2ZSBpZGVudGlmaWVycyBhcmUgYWN0dWFsbHkgY29tbWl0cyBvbiB0aGUg
ZGVmYXVsdCBicmFuY2gsIHdlIHdpbGwgbmVlZCB0byByZS1jb21wdXRlIHRoZSBpZGVudGlmaWVy
CisgICAgICAgICAgICBpZiBpZGVudGlmaWVyIDwgMCBhbmQgaXNfZGVmYXVsdDoKKyAgICAgICAg
ICAgICAgICByYWlzZSBzZWxmLkV4Y2VwdGlvbignSWxsZWdhbCBuZWdhdGl2ZSBpZGVudGlmaWVy
IG9uIHRoZSBkZWZhdWx0IGJyYW5jaCcpCisKKyAgICAgICAgICAgIGNvbW1pdF9kYXRhID0gc2Vs
Zi5yZXF1ZXN0KCdjb21taXRzL3t9fnt9Jy5mb3JtYXQoYmFzZV9yZWYsIGJhc2VfY291bnQgLSBp
ZGVudGlmaWVyKSkKKyAgICAgICAgICAgIGlmIG5vdCBjb21taXRfZGF0YToKKyAgICAgICAgICAg
ICAgICByYWlzZSBzZWxmLkV4Y2VwdGlvbigiRmFpbGVkIHRvIHJldHJpZXZlIGNvbW1pdCBpbmZv
cm1hdGlvbiBmb3IgJ3t9QHt9JyIuZm9ybWF0KGlkZW50aWZpZXIsIGJyYW5jaCBvciAnSEVBRCcp
KQorCisgICAgICAgICAgICBpZiBpZGVudGlmaWVyIDwgMDoKKyAgICAgICAgICAgICAgICBpZGVu
dGlmaWVyID0gTm9uZQorCisgICAgICAgIGVsaWYgYnJhbmNoIG9yIHRhZzoKKyAgICAgICAgICAg
IGlmIGhhc2g6CisgICAgICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcignQ2Fubm90IGRlZmlu
ZSBib3RoIHRhZy9icmFuY2ggYW5kIGhhc2gnKQorICAgICAgICAgICAgaWYgYnJhbmNoIGFuZCB0
YWc6CisgICAgICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcignQ2Fubm90IGRlZmluZSBib3Ro
IHRhZyBhbmQgYnJhbmNoJykKKyAgICAgICAgICAgIGNvbW1pdF9kYXRhID0gc2VsZi5yZXF1ZXN0
KCdjb21taXRzL3t9Jy5mb3JtYXQoYnJhbmNoIG9yIHRhZykpCisgICAgICAgICAgICBpZiBub3Qg
Y29tbWl0X2RhdGE6CisgICAgICAgICAgICAgICAgcmFpc2Ugc2VsZi5FeGNlcHRpb24oIkZhaWxl
ZCB0byByZXRyaWV2ZSBjb21taXQgaW5mb3JtYXRpb24gZm9yICd7fSciLmZvcm1hdChicmFuY2gg
b3IgdGFnKSkKKworICAgICAgICBlbHNlOgorICAgICAgICAgICAgaGFzaCA9IENvbW1pdC5fcGFy
c2VfaGFzaChoYXNoLCBkb19hc3NlcnQ9VHJ1ZSkKKyAgICAgICAgICAgIGNvbW1pdF9kYXRhID0g
c2VsZi5yZXF1ZXN0KCdjb21taXRzL3t9Jy5mb3JtYXQoaGFzaCBvciBzZWxmLmRlZmF1bHRfYnJh
bmNoKSkKKyAgICAgICAgICAgIGlmIG5vdCBjb21taXRfZGF0YToKKyAgICAgICAgICAgICAgICBy
YWlzZSBzZWxmLkV4Y2VwdGlvbigiRmFpbGVkIHRvIHJldHJpZXZlIGNvbW1pdCBpbmZvcm1hdGlv
biBmb3IgJ3t9JyIuZm9ybWF0KGhhc2ggb3IgJ0hFQUQnKSkKKworICAgICAgICBicmFuY2hlcyA9
IHNlbGYuX2JyYW5jaGVzX2Zvcihjb21taXRfZGF0YVsnc2hhJ10pCisgICAgICAgIGlmIGJyYW5j
aGVzOgorICAgICAgICAgICAgYnJhbmNoID0gc2VsZi5wcmlvcml0aXplX2JyYW5jaGVzKGJyYW5j
aGVzKQorCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICAjIEEgY29tbWl0IG5vdCBvbiBhbnkg
YnJhbmNoZXMgY2Fubm90IGhhdmUgYW4gaWRlbnRpZmllcgorICAgICAgICAgICAgaWRlbnRpZmll
ciA9IE5vbmUKKyAgICAgICAgICAgIGJyYW5jaCA9IE5vbmUKKworICAgICAgICBpZiBicmFuY2gg
YW5kIGJyYW5jaCA9PSBzZWxmLmRlZmF1bHRfYnJhbmNoOgorICAgICAgICAgICAgaWYgbm90IGlk
ZW50aWZpZXI6CisgICAgICAgICAgICAgICAgcmVzdWx0ID0gc2VsZi5fY291bnQocmVmPWNvbW1p
dF9kYXRhWydzaGEnXSkKKyAgICAgICAgICAgICAgICBpZiBub3QgcmVzdWx0OgorICAgICAgICAg
ICAgICAgICAgICByYWlzZSBFeGNlcHRpb24oJ3t9IHt9Jy5mb3JtYXQocmVzdWx0LCBjb21taXRf
ZGF0YVsnc2hhJ10pKQorICAgICAgICAgICAgICAgIGlkZW50aWZpZXIsIF8gPSByZXN1bHQKKyAg
ICAgICAgICAgIGJyYW5jaF9wb2ludCA9IE5vbmUKKworICAgICAgICBlbGlmIGJyYW5jaDoKKyAg
ICAgICAgICAgIGlmIG5vdCBpZGVudGlmaWVyOgorICAgICAgICAgICAgICAgIGlkZW50aWZpZXIg
PSBzZWxmLl9kaWZmZXJlbmNlKHNlbGYuZGVmYXVsdF9icmFuY2gsIGNvbW1pdF9kYXRhWydzaGEn
XSkKKyAgICAgICAgICAgIGJyYW5jaF9wb2ludCA9IHNlbGYuX2NvdW50KHJlZj1jb21taXRfZGF0
YVsnc2hhJ10pWzBdIC0gaWRlbnRpZmllcgorCisgICAgICAgIG1hdGNoID0gc2VsZi5HSVRfU1ZO
X1JFVklTSU9OLnNlYXJjaChjb21taXRfZGF0YVsnY29tbWl0J11bJ21lc3NhZ2UnXSkKKyAgICAg
ICAgcmV2aXNpb24gPSBpbnQobWF0Y2guZ3JvdXAoJ3JldmlzaW9uJykpIGlmIG1hdGNoIGVsc2Ug
Tm9uZQorCisgICAgICAgIGRhdGUgPSBkYXRldGltZS5zdHJwdGltZShjb21taXRfZGF0YVsnY29t
bWl0J11bJ2NvbW1pdHRlciddWydkYXRlJ10sICclWS0lbS0lZFQlSDolTTolU1onKQorICAgICAg
ICBlbWFpbF9tYXRjaCA9IHNlbGYuRU1BSUxfUkUubWF0Y2goY29tbWl0X2RhdGFbJ2NvbW1pdCdd
WydhdXRob3InXVsnZW1haWwnXSkKKworICAgICAgICByZXR1cm4gQ29tbWl0KAorICAgICAgICAg
ICAgaGFzaD1jb21taXRfZGF0YVsnc2hhJ10sCisgICAgICAgICAgICByZXZpc2lvbj1yZXZpc2lv
biwKKyAgICAgICAgICAgIGJyYW5jaF9wb2ludD1icmFuY2hfcG9pbnQsCisgICAgICAgICAgICBp
ZGVudGlmaWVyPWlkZW50aWZpZXIsCisgICAgICAgICAgICBicmFuY2g9YnJhbmNoLAorICAgICAg
ICAgICAgdGltZXN0YW1wPWludChjYWxlbmRhci50aW1lZ20oZGF0ZS50aW1ldHVwbGUoKSkpLAor
ICAgICAgICAgICAgYXV0aG9yPXNlbGYuY29udHJpYnV0b3JzLmNyZWF0ZSgKKyAgICAgICAgICAg
ICAgICBjb21taXRfZGF0YVsnY29tbWl0J11bJ2F1dGhvciddWyduYW1lJ10sCisgICAgICAgICAg
ICAgICAgZW1haWxfbWF0Y2guZ3JvdXAoJ2VtYWlsJykgaWYgZW1haWxfbWF0Y2ggZWxzZSBOb25l
LAorICAgICAgICAgICAgKSwgbWVzc2FnZT1jb21taXRfZGF0YVsnY29tbWl0J11bJ21lc3NhZ2Un
XSBpZiBpbmNsdWRlX2xvZyBlbHNlIE5vbmUsCisgICAgICAgICkKKworICAgIGRlZiBmaW5kKHNl
bGYsIGFyZ3VtZW50LCBpbmNsdWRlX2xvZz1UcnVlKToKKyAgICAgICAgaWYgbm90IGlzaW5zdGFu
Y2UoYXJndW1lbnQsIHNpeC5zdHJpbmdfdHlwZXMpOgorICAgICAgICAgICAgcmFpc2UgVmFsdWVF
cnJvcigiRXhwZWN0ZWQgJ2FyZ3VtZW50JyB0byBiZSBhIHN0cmluZywgbm90ICd7fSciLmZvcm1h
dCh0eXBlKGFyZ3VtZW50KSkpCisKKyAgICAgICAgcGFyc2VkX2NvbW1pdCA9IENvbW1pdC5wYXJz
ZShhcmd1bWVudCwgZG9fYXNzZXJ0PUZhbHNlKQorICAgICAgICBpZiBwYXJzZWRfY29tbWl0Ogor
ICAgICAgICAgICAgcmV0dXJuIHNlbGYuY29tbWl0KAorICAgICAgICAgICAgICAgIGhhc2g9cGFy
c2VkX2NvbW1pdC5oYXNoLAorICAgICAgICAgICAgICAgIHJldmlzaW9uPXBhcnNlZF9jb21taXQu
cmV2aXNpb24sCisgICAgICAgICAgICAgICAgaWRlbnRpZmllcj1wYXJzZWRfY29tbWl0LmlkZW50
aWZpZXIsCisgICAgICAgICAgICAgICAgYnJhbmNoPXBhcnNlZF9jb21taXQuYnJhbmNoLAorICAg
ICAgICAgICAgICAgIGluY2x1ZGVfbG9nPWluY2x1ZGVfbG9nLAorICAgICAgICAgICAgKQorCisg
ICAgICAgIGNvbW1pdF9kYXRhID0gc2VsZi5yZXF1ZXN0KCdjb21taXRzL3t9Jy5mb3JtYXQoYXJn
dW1lbnQpKQorICAgICAgICBpZiBub3QgY29tbWl0X2RhdGE6CisgICAgICAgICAgICByYWlzZSBW
YWx1ZUVycm9yKCIne30nIGlzIG5vdCBhbiBhcmd1bWVudCByZWNvZ25pemVkIGJ5IGdpdCIuZm9y
bWF0KGFyZ3VtZW50KSkKKyAgICAgICAgcmV0dXJuIHNlbGYuY29tbWl0KGhhc2g9Y29tbWl0X2Rh
dGFbJ3NoYSddLCBpbmNsdWRlX2xvZz1pbmNsdWRlX2xvZykKSW5kZXg6IFRvb2xzL1NjcmlwdHMv
bGlicmFyaWVzL3dlYmtpdHNjbXB5L3dlYmtpdHNjbXB5L3JlbW90ZS9zY20ucHkKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gVG9vbHMvU2NyaXB0cy9saWJyYXJpZXMvd2Via2l0c2NtcHkvd2Via2l0c2NtcHkvcmVt
b3RlL3NjbS5weQkocmV2aXNpb24gMjcwNjgwKQorKysgVG9vbHMvU2NyaXB0cy9saWJyYXJpZXMv
d2Via2l0c2NtcHkvd2Via2l0c2NtcHkvcmVtb3RlL3NjbS5weQkod29ya2luZyBjb3B5KQpAQCAt
MzIsNiArMzIsOCBAQCBjbGFzcyBTY20oU2NtQmFzZSk6CiAKICAgICAgICAgaWYgcmVtb3RlLlN2
bi5pc193ZWJzZXJ2ZXIodXJsKToKICAgICAgICAgICAgIHJldHVybiByZW1vdGUuU3ZuKHVybCwg
Y29udHJpYnV0b3JzPWNvbnRyaWJ1dG9ycykKKyAgICAgICAgaWYgcmVtb3RlLkdpdEh1Yi5pc193
ZWJzZXJ2ZXIodXJsKToKKyAgICAgICAgICAgIHJldHVybiByZW1vdGUuR2l0SHViKHVybCwgY29u
dHJpYnV0b3JzPWNvbnRyaWJ1dG9ycykKICAgICAgICAgcmFpc2UgT1NFcnJvcigiJ3t9JyBpcyBu
b3QgYSBrbm93biBTQ00gc2VydmVyIi5mb3JtYXQodXJsKSkKIAogICAgIGRlZiBfX2luaXRfXyhz
ZWxmLCB1cmwsIGRldl9icmFuY2hlcz1Ob25lLCBwcm9kX2JyYW5jaGVzPU5vbmUsIGNvbnRyaWJ1
dG9ycz1Ob25lKToKSW5kZXg6IFRvb2xzL1NjcmlwdHMvbGlicmFyaWVzL3dlYmtpdHNjbXB5L3dl
YmtpdHNjbXB5L3Rlc3QvZ2l0X3VuaXR0ZXN0LnB5Cj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1Njcmlw
dHMvbGlicmFyaWVzL3dlYmtpdHNjbXB5L3dlYmtpdHNjbXB5L3Rlc3QvZ2l0X3VuaXR0ZXN0LnB5
CShyZXZpc2lvbiAyNzA2ODApCisrKyBUb29scy9TY3JpcHRzL2xpYnJhcmllcy93ZWJraXRzY21w
eS93ZWJraXRzY21weS90ZXN0L2dpdF91bml0dGVzdC5weQkod29ya2luZyBjb3B5KQpAQCAtMjYs
NyArMjYsNyBAQCBpbXBvcnQgdW5pdHRlc3QKIGZyb20gZGF0ZXRpbWUgaW1wb3J0IGRhdGV0aW1l
CiBmcm9tIHdlYmtpdGNvcmVweSBpbXBvcnQgTG9nZ2VyQ2FwdHVyZQogZnJvbSB3ZWJraXRjb3Jl
cHkubW9ja3MgaW1wb3J0IFRpbWUgYXMgTW9ja1RpbWUKLWZyb20gd2Via2l0c2NtcHkgaW1wb3J0
IGxvY2FsLCBtb2NrcworZnJvbSB3ZWJraXRzY21weSBpbXBvcnQgbG9jYWwsIG1vY2tzLCByZW1v
dGUKIAogCiBjbGFzcyBUZXN0R2l0KHVuaXR0ZXN0LlRlc3RDYXNlKToKQEAgLTI0MywzICsyNDMs
MTAxIEBAIGNsYXNzIFRlc3RHaXQodW5pdHRlc3QuVGVzdENhc2UpOgogICAgICAgICBmb3IgbW9j
ayBpbiBbbW9ja3MubG9jYWwuR2l0KHNlbGYucGF0aCksIG1vY2tzLmxvY2FsLkdpdChzZWxmLnBh
dGgsIGdpdF9zdm49VHJ1ZSldOgogICAgICAgICAgICAgd2l0aCBtb2NrOgogICAgICAgICAgICAg
ICAgIHNlbGYuYXNzZXJ0SXNOb25lKGxvY2FsLkdpdChzZWxmLnBhdGgpLmNvbW1pdChpZGVudGlm
aWVyPSc0QG1haW4nLCBpbmNsdWRlX2xvZz1GYWxzZSkubWVzc2FnZSkKKworCitjbGFzcyBUZXN0
R2l0SHViKHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICByZW1vdGUgPSAnaHR0cHM6Ly9naXRodWIu
ZXhhbXBsZS5jb20vV2ViS2l0L3dlYmtpdCcKKworICAgIGRlZiB0ZXN0X2RldGVjdGlvbihzZWxm
KToKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZW1vdGUuR2l0SHViLmlzX3dlYnNlcnZlcign
aHR0cHM6Ly9naXRodWIuZXhhbXBsZS5jb20vV2ViS2l0L3dlYmtpdCcpLCBUcnVlKQorICAgICAg
ICBzZWxmLmFzc2VydEVxdWFsKHJlbW90ZS5HaXRIdWIuaXNfd2Vic2VydmVyKCdodHRwOi8vZ2l0
aHViLmV4YW1wbGUuY29tL1dlYktpdC93ZWJraXQnKSwgVHJ1ZSkKKyAgICAgICAgc2VsZi5hc3Nl
cnRFcXVhbChyZW1vdGUuR2l0SHViLmlzX3dlYnNlcnZlcignaHR0cHM6Ly9zdm4uZXhhbXBsZS5v
cmcvcmVwb3NpdG9yeS93ZWJraXQnKSwgRmFsc2UpCisKKyAgICBkZWYgdGVzdF9icmFuY2hlcyhz
ZWxmKToKKyAgICAgICAgd2l0aCBtb2Nrcy5yZW1vdGUuR2l0SHViKCk6CisgICAgICAgICAgICBz
ZWxmLmFzc2VydEVxdWFsKAorICAgICAgICAgICAgICAgIHJlbW90ZS5HaXRIdWIoc2VsZi5yZW1v
dGUpLmJyYW5jaGVzLAorICAgICAgICAgICAgICAgIFsnYnJhbmNoLWEnLCAnYnJhbmNoLWInLCAn
bWFpbiddLAorICAgICAgICAgICAgKQorCisgICAgZGVmIHRlc3RfdGFncyhzZWxmKToKKyAgICAg
ICAgd2l0aCBtb2Nrcy5yZW1vdGUuR2l0SHViKCk6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVx
dWFsKAorICAgICAgICAgICAgICAgIHJlbW90ZS5HaXRIdWIoc2VsZi5yZW1vdGUpLnRhZ3MsCisg
ICAgICAgICAgICAgICAgWyd0YWctMScsICd0YWctMiddLAorICAgICAgICAgICAgKQorCisgICAg
ZGVmIHRlc3Rfc2NtX3R5cGUoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2UocmVtb3Rl
LkdpdEh1YihzZWxmLnJlbW90ZSkuaXNfc3ZuKQorICAgICAgICBzZWxmLmFzc2VydFRydWUocmVt
b3RlLkdpdEh1YihzZWxmLnJlbW90ZSkuaXNfZ2l0KQorCisgICAgZGVmIHRlc3RfY29tbWl0X3Jl
dmlzaW9uKHNlbGYpOgorICAgICAgICB3aXRoIG1vY2tzLnJlbW90ZS5HaXRIdWIoKToKKyAgICAg
ICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJzFAbWFpbicsIHN0cihyZW1vdGUuR2l0SHViKHNlbGYu
cmVtb3RlKS5jb21taXQoaGFzaD0nOWI4MzExZjInKSkpCisgICAgICAgICAgICBzZWxmLmFzc2Vy
dEVxdWFsKCcyQG1haW4nLCBzdHIocmVtb3RlLkdpdEh1YihzZWxmLnJlbW90ZSkuY29tbWl0KGhh
c2g9J2ZmZjgzYmIyJykpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgnMi4xQGJyYW5j
aC1hJywgc3RyKHJlbW90ZS5HaXRIdWIoc2VsZi5yZW1vdGUpLmNvbW1pdChoYXNoPSdhMzBjZTg0
OScpKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJzNAbWFpbicsIHN0cihyZW1vdGUu
R2l0SHViKHNlbGYucmVtb3RlKS5jb21taXQoaGFzaD0nMWFiZTI1YjQnKSkpCisgICAgICAgICAg
ICBzZWxmLmFzc2VydEVxdWFsKCcyLjJAYnJhbmNoLWInLCBzdHIocmVtb3RlLkdpdEh1YihzZWxm
LnJlbW90ZSkuY29tbWl0KGhhc2g9JzNjZDMyZTM1JykpKQorICAgICAgICAgICAgc2VsZi5hc3Nl
cnRFcXVhbCgnNEBtYWluJywgc3RyKHJlbW90ZS5HaXRIdWIoc2VsZi5yZW1vdGUpLmNvbW1pdCho
YXNoPSdiYWU1ZDFlOScpKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJzIuMkBicmFu
Y2gtYScsIHN0cihyZW1vdGUuR2l0SHViKHNlbGYucmVtb3RlKS5jb21taXQoaGFzaD0nNjIxNjUy
YWQnKSkpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCcyLjNAYnJhbmNoLWInLCBzdHIo
cmVtb3RlLkdpdEh1YihzZWxmLnJlbW90ZSkuY29tbWl0KGhhc2g9Jzc5MDcyNWE2JykpKQorCisg
ICAgZGVmIHRlc3RfY29tbWl0X2Zyb21fYnJhbmNoKHNlbGYpOgorICAgICAgICB3aXRoIG1vY2tz
LnJlbW90ZS5HaXRIdWIoKToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJzRAbWFpbics
IHN0cihyZW1vdGUuR2l0SHViKHNlbGYucmVtb3RlKS5jb21taXQoYnJhbmNoPSdtYWluJykpKQor
ICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgnMi4yQGJyYW5jaC1hJywgc3RyKHJlbW90ZS5H
aXRIdWIoc2VsZi5yZW1vdGUpLmNvbW1pdChicmFuY2g9J2JyYW5jaC1hJykpKQorICAgICAgICAg
ICAgc2VsZi5hc3NlcnRFcXVhbCgnMi4zQGJyYW5jaC1iJywgc3RyKHJlbW90ZS5HaXRIdWIoc2Vs
Zi5yZW1vdGUpLmNvbW1pdChicmFuY2g9J2JyYW5jaC1iJykpKQorCisgICAgZGVmIHRlc3RfaWRl
bnRpZmllcihzZWxmKToKKyAgICAgICAgd2l0aCBtb2Nrcy5yZW1vdGUuR2l0SHViKCk6CisgICAg
ICAgICAgICBzZWxmLmFzc2VydEVxdWFsKAorICAgICAgICAgICAgICAgICc5YjgzMTFmMjVhNzdi
YTE0OTIzZDlkNWE2NTMyMTAzZjU0YWJlZmNiJywKKyAgICAgICAgICAgICAgICByZW1vdGUuR2l0
SHViKHNlbGYucmVtb3RlKS5jb21taXQoaWRlbnRpZmllcj0nMUBtYWluJykuaGFzaCwKKyAgICAg
ICAgICAgICkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCisgICAgICAgICAgICAgICAg
J2ZmZjgzYmIyZDkxNzFiNGQ5MTk2ZTk3N2ViMDUwOGZkNTdlN2EwOGQnLAorICAgICAgICAgICAg
ICAgIHJlbW90ZS5HaXRIdWIoc2VsZi5yZW1vdGUpLmNvbW1pdChpZGVudGlmaWVyPScyQG1haW4n
KS5oYXNoLAorICAgICAgICAgICAgKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKKyAg
ICAgICAgICAgICAgICAnYTMwY2U4NDk0YmYxYWMyODA3YTY5ODQ0ZjcyNmJlNGE5ODQzY2E1NScs
CisgICAgICAgICAgICAgICAgcmVtb3RlLkdpdEh1YihzZWxmLnJlbW90ZSkuY29tbWl0KGlkZW50
aWZpZXI9JzIuMUBicmFuY2gtYScpLmhhc2gsCisgICAgICAgICAgICApCisgICAgICAgICAgICBz
ZWxmLmFzc2VydEVxdWFsKAorICAgICAgICAgICAgICAgICcxYWJlMjViNDQzZTk4NWY5M2I5MGQ4
MzBlNGE3ZTM3MzEzMzZhZjRkJywKKyAgICAgICAgICAgICAgICByZW1vdGUuR2l0SHViKHNlbGYu
cmVtb3RlKS5jb21taXQoaWRlbnRpZmllcj0nM0BtYWluJykuaGFzaCwKKyAgICAgICAgICAgICkK
KyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCisgICAgICAgICAgICAgICAgJzNjZDMyZTM1
MjQxMDU2NWJiNTQzODIxZmJmODU2YTZkM2NhYWQxYzQnLAorICAgICAgICAgICAgICAgIHJlbW90
ZS5HaXRIdWIoc2VsZi5yZW1vdGUpLmNvbW1pdChpZGVudGlmaWVyPScyLjJAYnJhbmNoLWInKS5o
YXNoLAorICAgICAgICAgICAgKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKKyAgICAg
ICAgICAgICAgICAnYmFlNWQxZTkwOTk5ZDRmOTE2YThhMTU4MTBjY2ZhNDNmMzdhMmZkNicsCisg
ICAgICAgICAgICAgICAgcmVtb3RlLkdpdEh1YihzZWxmLnJlbW90ZSkuY29tbWl0KGlkZW50aWZp
ZXI9JzRAbWFpbicpLmhhc2gsCisgICAgICAgICAgICApCisgICAgICAgICAgICBzZWxmLmFzc2Vy
dEVxdWFsKAorICAgICAgICAgICAgICAgICc2MjE2NTJhZGQ3ZmM0MTYwOTliZDIwNjMzNjZjYzM4
ZmY2MWFmZTM2JywKKyAgICAgICAgICAgICAgICByZW1vdGUuR2l0SHViKHNlbGYucmVtb3RlKS5j
b21taXQoaWRlbnRpZmllcj0nMi4yQGJyYW5jaC1hJykuaGFzaCwKKyAgICAgICAgICAgICkKKyAg
ICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCisgICAgICAgICAgICAgICAgJzc5MDcyNWE2ZDc5
ZTI4ZGIyZWNkZGUyOTU0OGQyMjYyYzBiZDA1OWQnLAorICAgICAgICAgICAgICAgIHJlbW90ZS5H
aXRIdWIoc2VsZi5yZW1vdGUpLmNvbW1pdChpZGVudGlmaWVyPScyLjNAYnJhbmNoLWInKS5oYXNo
LAorICAgICAgICAgICAgKQorCisgICAgZGVmIHRlc3Rfbm9uX2Nhbm5vbmljYWxfaWRlbnRpZmll
cnMoc2VsZik6CisgICAgICAgIHdpdGggbW9ja3MucmVtb3RlLkdpdEh1YigpOgorICAgICAgICAg
ICAgc2VsZi5hc3NlcnRFcXVhbCgnMkBtYWluJywgc3RyKHJlbW90ZS5HaXRIdWIoc2VsZi5yZW1v
dGUpLmNvbW1pdChpZGVudGlmaWVyPScwQGJyYW5jaC1hJykpKQorICAgICAgICAgICAgc2VsZi5h
c3NlcnRFcXVhbCgnMUBtYWluJywgc3RyKHJlbW90ZS5HaXRIdWIoc2VsZi5yZW1vdGUpLmNvbW1p
dChpZGVudGlmaWVyPSctMUBicmFuY2gtYScpKSkKKworICAgICAgICAgICAgc2VsZi5hc3NlcnRF
cXVhbCgnMkBtYWluJywgc3RyKHJlbW90ZS5HaXRIdWIoc2VsZi5yZW1vdGUpLmNvbW1pdChpZGVu
dGlmaWVyPScwQGJyYW5jaC1iJykpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgnMUBt
YWluJywgc3RyKHJlbW90ZS5HaXRIdWIoc2VsZi5yZW1vdGUpLmNvbW1pdChpZGVudGlmaWVyPSct
MUBicmFuY2gtYicpKSkKKworICAgIGRlZiB0ZXN0X3RhZyhzZWxmKToKKyAgICAgICAgd2l0aCBt
b2Nrcy5yZW1vdGUuR2l0SHViKCk6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKAorICAg
ICAgICAgICAgICAgICc2MjE2NTJhZGQ3ZmM0MTYwOTliZDIwNjMzNjZjYzM4ZmY2MWFmZTM2JywK
KyAgICAgICAgICAgICAgICByZW1vdGUuR2l0SHViKHNlbGYucmVtb3RlKS5jb21taXQodGFnPSd0
YWctMScpLmhhc2gsCisgICAgICAgICAgICApCisKKyAgICBkZWYgdGVzdF9ub19sb2coc2VsZik6
CisgICAgICAgIHdpdGggbW9ja3MucmVtb3RlLkdpdEh1YigpOgorICAgICAgICAgICAgc2VsZi5h
c3NlcnRJc05vbmUocmVtb3RlLkdpdEh1YihzZWxmLnJlbW90ZSkuY29tbWl0KGlkZW50aWZpZXI9
JzRAbWFpbicsIGluY2x1ZGVfbG9nPUZhbHNlKS5tZXNzYWdlKQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>416181</attachid>
            <date>2020-12-14 12:10:56 -0800</date>
            <delta_ts>2020-12-15 15:01:20 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-219602-20201214141055.patch</filename>
            <type>text/plain</type>
            <size>37024</size>
            <attacher name="Jonathan Bedard">jbedard</attacher>
            
              <data encoding="base64">SW5kZXg6IFRvb2xzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9DaGFuZ2VMb2cJKHJl
dmlzaW9uIDI3MDc5NikKKysrIFRvb2xzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwz
ICsxLDYyIEBACisyMDIwLTEyLTE0ICBKb25hdGhhbiBCZWRhcmQgIDxqYmVkYXJkQGFwcGxlLmNv
bT4KKworICAgICAgICBbd2Via2l0c2NtcHldIFN1cHBvcnQgcmVtb3RlIEdpdEh1YiByZXBvc2l0
b3J5CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMTk2
MDIKKyAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzcyMDUwMDI2PgorCisgICAgICAgIFJldmlld2Vk
IGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFNlcnZpY2VzIG9mdGVuIG5lZWQgdG8gaW50
ZXJhY3Qgd2l0aCB0aGUgV2ViS2l0IHJlcG9zaXRvcnkgd2l0aG91dCBhY3R1YWxseSBkb3dubG9h
ZGluZyB0aGUKKyAgICAgICAgcmVwb3NpdG9yeS4gSW4gcGFydGljdWxhciwgaXQgaXMgdXNlZnVs
IHRvIGJlIGFibGUgdG8gcmV0cmlldmUgY29tbWl0cyBhbmQgdGhlaXIgaWRlbnRpZmllcnMuCisK
KyAgICAgICAgKiBTY3JpcHRzL2xpYnJhcmllcy93ZWJraXRzY21weS93ZWJraXRzY21weS9fX2lu
aXRfXy5weTogQnVtcCB2ZXJzaW9uLgorICAgICAgICAqIFNjcmlwdHMvbGlicmFyaWVzL3dlYmtp
dHNjbXB5L3dlYmtpdHNjbXB5L2xvY2FsL2dpdC5weToKKyAgICAgICAgKEdpdCk6IE1vdmUgR0lU
X1NWTl9SRVZJU0lPTiByZWdleCB0byBiYXNlIGNsYXNzLgorICAgICAgICAqIFNjcmlwdHMvbGli
cmFyaWVzL3dlYmtpdHNjbXB5L3dlYmtpdHNjbXB5L21vY2tzL3JlbW90ZS9fX2luaXRfXy5weTog
QWRkIEdpdEh1YiBjbGFzcy4KKyAgICAgICAgKiBTY3JpcHRzL2xpYnJhcmllcy93ZWJraXRzY21w
eS93ZWJraXRzY21weS9tb2Nrcy9yZW1vdGUvZ2l0X2h1Yi5weTogQWRkZWQuCisgICAgICAgIChH
aXRIdWIpOiBNb2NrIHJlcXVlc3Qgcm91dGVyIGZvciBhIGxpbWl0ZWQgc3Vic2V0IG9mIEdpdEh1
YidzIEFQSS4KKyAgICAgICAgKEdpdEh1Yi5fX2luaXRfXyk6CisgICAgICAgIChHaXRIdWIuY29t
bWl0KTogUmV0dXJuIGEgY29tbWl0IG9iamVjdCBnaXZlbiBhIHJlZmVyZW5jZS4KKyAgICAgICAg
KEdpdEh1Yi5fYXBpX3Jlc3BvbnNlKToKKyAgICAgICAgKEdpdEh1Yi5fbGlzdF9yZWZzX3Jlc3Bv
bnNlKToKKyAgICAgICAgKEdpdEh1Yi5fY29tbWl0X3Jlc3BvbnNlKToKKyAgICAgICAgKEdpdEh1
Yi5fY29tcGFyZV9yZXNwb25zZSk6CisgICAgICAgIChHaXRIdWIuX2JyYW5jaGVzX2Zvcl9yZXF1
ZXN0KToKKyAgICAgICAgKEdpdEh1Yi5fcGFyZW50c19vZl9yZXF1ZXN0KToKKyAgICAgICAgKEdp
dEh1Yi5yZXF1ZXN0KTogUmV0dXJuIGEgcmVzcG9uc2Ugb2JqZWN0IGZvciB0aGUgc3BlY2lmaWVk
IHJlcXVlc3QuCisgICAgICAgICogU2NyaXB0cy9saWJyYXJpZXMvd2Via2l0c2NtcHkvd2Via2l0
c2NtcHkvcmVtb3RlL19faW5pdF9fLnB5OiBBZGQgR2l0SHViIGNsYXNzLgorICAgICAgICAqIFNj
cmlwdHMvbGlicmFyaWVzL3dlYmtpdHNjbXB5L3dlYmtpdHNjbXB5L3JlbW90ZS9naXRfaHViLnB5
OiBBZGRlZC4KKyAgICAgICAgKEdpdEh1Yik6IFJlcG9zaXRvcnkgb2JqZWN0IHJlcHJlc2VudGlu
ZyBhIEdpdEh1YiByZW1vdGUuCisgICAgICAgIChHaXRIdWIuaXNfd2Vic2VydmVyKTogVHJ1ZSBp
ZiB0aGUgcHJvdmlkZWQgVVJMIGlzIGEgR2l0SHViIHdlYnNlcnZlci4KKyAgICAgICAgKEdpdEh1
Yi5fX2luaXRfXyk6IFZlcmlmeSB0aGUgcHJvdmlkZWQgVVJMIGFuZCBzcGxpdCBpdCBpbnRvIGl0
J3MgY29tcG9zaXRlIHBhcnRzLgorICAgICAgICAoR2l0SHViLmlzX2dpdCk6IFJldHVybiBUcnVl
LgorICAgICAgICAoR2l0SHViLnJlcXVlc3QpOiBNYWtlIGFuIEFQSSByZXF1ZXN0LCBjb21iaW5p
bmcgcGFnaW5hdGlvbiBpbnRvIGEgc2luZ2xlIHJlcXVlc3QuCisgICAgICAgIChHaXRIdWIuX2Nv
dW50KTogU2NyYXBlIHRoZSBHaXRIdWIgVUkgdG8gZmluZCB0aGUgbnVtYmVyIG9mIHBhcmVudCBj
b21taXRzIGZvciBhIHNwZWNpZmllZAorICAgICAgICBicmFuY2ggb3IgY29tbWl0LgorICAgICAg
ICAoR2l0SHViLl9kaWZmZXJlbmNlKTogQ29tcHV0ZSB0aGUgbnVtYmVyIG9mIGNvbW1pdHMgYSBz
cGVjaWZpZWQgcmVmZXJlbmNlIGlzIGFoZWFkIG9mIGFub3RoZXIuCisgICAgICAgIChHaXRIdWIu
X2JyYW5jaGVzX2Zvcik6IFNjcmFwZSB0aGUgR2l0SHViIFVJIHRvIGRldGVybWluZSB3aGF0IGJy
YW5jaGVzIGEgY29tbWl0IGlzIG9uLgorICAgICAgICAoR2l0SHViLmRlZmF1bHRfYnJhbmNoKTog
UXVlcnkgR2l0SHViIHRvIGRldGVybWluZSB0aGUgZGVmYXVsdCBicmFuY2ggZm9yIGEgc3BlY2lm
aWVkIGNvbW1pdC4KKyAgICAgICAgKEdpdEh1Yi5icmFuY2hlcyk6IFJldHVybiBhbGwgYnJhbmNo
ZXMgZm9yIGEgcmVwb3NpdG9yeS4KKyAgICAgICAgKEdpdEh1Yi50YWdzKTogUmV0dXJuIGFsbCB0
YWdzIGZvciBhIHJlcG9zaXRvcnkuCisgICAgICAgIChHaXRIdWIuY29tbWl0KTogUmV0dXJuIGEg
Y29tbWl0IG9iamVjdCBnaXZlbiBhIHJldmlzaW9uLCBicmFuY2gsIGlkZW50aWZpZXIgb3IgdGFn
LgorICAgICAgICAoR2l0SHViLmZpbmQpOiBVc2UgZ2l0IHRvIG1hdGNoIGJyYW5jaGVzIGFuZCB0
YWdzIHRvIGEgaGFzaCBpbnN0ZWFkIG9mIHRyeWluZyB0byBkbyBpdCBvdXJzZWx2ZXMuCisgICAg
ICAgICogU2NyaXB0cy9saWJyYXJpZXMvd2Via2l0c2NtcHkvd2Via2l0c2NtcHkvcmVtb3RlL3Nj
bS5weToKKyAgICAgICAgKFNjbS5mcm9tX3VybCk6IEFkZCBHaXRIdWIgdG8gdGhlIHNldCBvZiBj
YW5kaWRhdGUgcmVtb3RlIHJlcG9zaXRvcmllcy4KKyAgICAgICAgKiBTY3JpcHRzL2xpYnJhcmll
cy93ZWJraXRzY21weS93ZWJraXRzY21weS9zY21fYmFzZS5weToKKyAgICAgICAgKFNjbUJhc2Up
OiBNb3ZlIEdJVF9TVk5fUkVWSVNJT04gcmVnZXggdG8gYmFzZSBjbGFzcy4KKyAgICAgICAgKiBT
Y3JpcHRzL2xpYnJhcmllcy93ZWJraXRzY21weS93ZWJraXRzY21weS90ZXN0L2dpdF91bml0dGVz
dC5weToKKyAgICAgICAgKFRlc3RHaXRIdWIpOgorICAgICAgICAoVGVzdEdpdEh1Yi50ZXN0X2Rl
dGVjdGlvbik6CisgICAgICAgIChUZXN0R2l0SHViLnRlc3RfYnJhbmNoZXMpOgorICAgICAgICAo
VGVzdEdpdEh1Yi50ZXN0X3RhZ3MpOgorICAgICAgICAoVGVzdEdpdEh1Yi50ZXN0X3NjbV90eXBl
KToKKyAgICAgICAgKFRlc3RHaXRIdWIudGVzdF9jb21taXRfcmV2aXNpb24pOgorICAgICAgICAo
VGVzdEdpdEh1Yi50ZXN0X2NvbW1pdF9mcm9tX2JyYW5jaCk6CisgICAgICAgIChUZXN0R2l0SHVi
LnRlc3RfaWRlbnRpZmllcik6CisgICAgICAgIChUZXN0R2l0SHViLnRlc3Rfbm9uX2Nhbm5vbmlj
YWxfaWRlbnRpZmllcnMpOgorICAgICAgICAoVGVzdEdpdEh1Yi50ZXN0X3RhZyk6CisgICAgICAg
IChUZXN0R2l0SHViLnRlc3Rfbm9fbG9nKToKKwogMjAyMC0xMi0xNCAgQWxleCBDaHJpc3RlbnNl
biAgPGFjaHJpc3RlbnNlbkB3ZWJraXQub3JnPgogCiAgICAgICAgIFJlbW92ZSBXS0Rvd25sb2Fk
RGVsZWdhdGUuZGlkV3JpdGVEYXRhCkluZGV4OiBUb29scy9TY3JpcHRzL2xpYnJhcmllcy93ZWJr
aXRzY21weS93ZWJraXRzY21weS9fX2luaXRfXy5weQo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9TY3Jp
cHRzL2xpYnJhcmllcy93ZWJraXRzY21weS93ZWJraXRzY21weS9fX2luaXRfXy5weQkocmV2aXNp
b24gMjcwNzY5KQorKysgVG9vbHMvU2NyaXB0cy9saWJyYXJpZXMvd2Via2l0c2NtcHkvd2Via2l0
c2NtcHkvX19pbml0X18ucHkJKHdvcmtpbmcgY29weSkKQEAgLTQ2LDcgKzQ2LDcgQEAgZXhjZXB0
IEltcG9ydEVycm9yOgogICAgICAgICAiUGxlYXNlIGluc3RhbGwgd2Via2l0Y29yZXB5IHdpdGgg
YHBpcCBpbnN0YWxsIHdlYmtpdGNvcmVweSAtLWV4dHJhLWluZGV4LXVybCA8cGFja2FnZSBpbmRl
eCBVUkw+YCIKICAgICApCiAKLXZlcnNpb24gPSBWZXJzaW9uKDAsIDUsIDMpCit2ZXJzaW9uID0g
VmVyc2lvbigwLCA2LCAwKQogCiBBdXRvSW5zdGFsbC5yZWdpc3RlcihQYWNrYWdlKCdmYXN0ZW5l
cnMnLCBWZXJzaW9uKDAsIDE1LCAwKSkpCiBBdXRvSW5zdGFsbC5yZWdpc3RlcihQYWNrYWdlKCdt
b25vdG9uaWMnLCBWZXJzaW9uKDEsIDUpKSkKSW5kZXg6IFRvb2xzL1NjcmlwdHMvbGlicmFyaWVz
L3dlYmtpdHNjbXB5L3dlYmtpdHNjbXB5L3NjbV9iYXNlLnB5Cj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xz
L1NjcmlwdHMvbGlicmFyaWVzL3dlYmtpdHNjbXB5L3dlYmtpdHNjbXB5L3NjbV9iYXNlLnB5CShy
ZXZpc2lvbiAyNzA3NjkpCisrKyBUb29scy9TY3JpcHRzL2xpYnJhcmllcy93ZWJraXRzY21weS93
ZWJraXRzY21weS9zY21fYmFzZS5weQkod29ya2luZyBjb3B5KQpAQCAtMzcsNiArMzcsNyBAQCBj
bGFzcyBTY21CYXNlKG9iamVjdCk6CiAgICAgIyB0aGUgZm9sbG93aW5nIGlkaW9tcyBzZWVtIGNv
bW1vbiBlbm91Z2ggdG8gYmUgc2hhcmVkLgogICAgIERFVl9CUkFOQ0hFUyA9IHJlLmNvbXBpbGUo
cicuKlsoZW5nKShkZXYpKGJ1ZyldLy4rJykKICAgICBQUk9EX0JSQU5DSEVTID0gcmUuY29tcGls
ZShyJ1xTKy1bXGQrXC5dKy1icmFuY2gnKQorICAgIEdJVF9TVk5fUkVWSVNJT04gPSByZS5jb21w
aWxlKHInZ2l0LXN2bi1pZDogXFMrOlwvXC8uK0AoP1A8cmV2aXNpb24+XGQrKSAuKy0uKy0uKy0u
KycpCiAKICAgICBkZWYgX19pbml0X18oc2VsZiwgZGV2X2JyYW5jaGVzPU5vbmUsIHByb2RfYnJh
bmNoZXM9Tm9uZSwgY29udHJpYnV0b3JzPU5vbmUpOgogICAgICAgICBzZWxmLmRldl9icmFuY2hl
cyA9IGRldl9icmFuY2hlcyBvciBzZWxmLkRFVl9CUkFOQ0hFUwpJbmRleDogVG9vbHMvU2NyaXB0
cy9saWJyYXJpZXMvd2Via2l0c2NtcHkvd2Via2l0c2NtcHkvbG9jYWwvZ2l0LnB5Cj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFRvb2xzL1NjcmlwdHMvbGlicmFyaWVzL3dlYmtpdHNjbXB5L3dlYmtpdHNjbXB5L2xv
Y2FsL2dpdC5weQkocmV2aXNpb24gMjcwNzY5KQorKysgVG9vbHMvU2NyaXB0cy9saWJyYXJpZXMv
d2Via2l0c2NtcHkvd2Via2l0c2NtcHkvbG9jYWwvZ2l0LnB5CSh3b3JraW5nIGNvcHkpCkBAIC0z
MSw3ICszMSw2IEBAIGZyb20gd2Via2l0c2NtcHkgaW1wb3J0IENvbW1pdCwgQ29udHJpYnUKIAog
Y2xhc3MgR2l0KFNjbSk6CiAgICAgR0lUX0NPTU1JVCA9IHJlLmNvbXBpbGUocidjb21taXQgKD9Q
PGhhc2g+WzAtOWEtZl0rKScpCi0gICAgR0lUX1NWTl9SRVZJU0lPTiA9IHJlLmNvbXBpbGUocidn
aXQtc3ZuLWlkOiBcUys6XC9cLy4rQCg/UDxyZXZpc2lvbj5cZCspIC4rLS4rLS4rLS4rJykKIAog
ICAgIEBjbGFzc21ldGhvZAogICAgIEBkZWNvcmF0b3JzLk1lbW9pemUoKQpJbmRleDogVG9vbHMv
U2NyaXB0cy9saWJyYXJpZXMvd2Via2l0c2NtcHkvd2Via2l0c2NtcHkvbW9ja3MvcmVtb3RlL19f
aW5pdF9fLnB5Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1NjcmlwdHMvbGlicmFyaWVzL3dlYmtpdHNj
bXB5L3dlYmtpdHNjbXB5L21vY2tzL3JlbW90ZS9fX2luaXRfXy5weQkocmV2aXNpb24gMjcwNzY5
KQorKysgVG9vbHMvU2NyaXB0cy9saWJyYXJpZXMvd2Via2l0c2NtcHkvd2Via2l0c2NtcHkvbW9j
a3MvcmVtb3RlL19faW5pdF9fLnB5CSh3b3JraW5nIGNvcHkpCkBAIC0yMCw0ICsyMCw1IEBACiAj
IE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFCiAjIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCiAKK2Zyb20gd2Via2l0c2NtcHku
bW9ja3MucmVtb3RlLmdpdF9odWIgaW1wb3J0IEdpdEh1YgogZnJvbSB3ZWJraXRzY21weS5tb2Nr
cy5yZW1vdGUuc3ZuIGltcG9ydCBTdm4KSW5kZXg6IFRvb2xzL1NjcmlwdHMvbGlicmFyaWVzL3dl
YmtpdHNjbXB5L3dlYmtpdHNjbXB5L21vY2tzL3JlbW90ZS9naXRfaHViLnB5Cj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFRvb2xzL1NjcmlwdHMvbGlicmFyaWVzL3dlYmtpdHNjbXB5L3dlYmtpdHNjbXB5L21vY2tz
L3JlbW90ZS9naXRfaHViLnB5CShub25leGlzdGVudCkKKysrIFRvb2xzL1NjcmlwdHMvbGlicmFy
aWVzL3dlYmtpdHNjbXB5L3dlYmtpdHNjbXB5L21vY2tzL3JlbW90ZS9naXRfaHViLnB5CSh3b3Jr
aW5nIGNvcHkpCkBAIC0wLDAgKzEsMjQwIEBACisjIENvcHlyaWdodCAoQykgMjAyMCBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjCisjIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorIyBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyMg
YXJlIG1ldDoKKyMgMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisjIDIuICBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorIyAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyMKKyMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5ECisjIEFO
WSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRSBJTVBMSUVECisjIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyMgRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IK
KyMgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTAorIyBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUgorIyBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UgorIyBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLAorIyBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorIyBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgorCitpbXBvcnQgb3MKK2ltcG9ydCBqc29uCisKK2Zyb20gZGF0ZXRpbWUgaW1wb3J0
IGRhdGV0aW1lCitmcm9tIHdlYmtpdGNvcmVweSBpbXBvcnQgbW9ja3MKK2Zyb20gd2Via2l0c2Nt
cHkgaW1wb3J0IENvbW1pdCwgcmVtb3RlIGFzIHNjbXJlbW90ZQorCisKK2NsYXNzIEdpdEh1Yiht
b2Nrcy5SZXF1ZXN0cyk6CisgICAgdG9wID0gTm9uZQorCisgICAgZGVmIF9faW5pdF9fKAorICAg
ICAgICBzZWxmLCByZW1vdGU9J2dpdGh1Yi5leGFtcGxlLmNvbS9XZWJLaXQvd2Via2l0JywgZGF0
YWZpbGU9Tm9uZSwKKyAgICAgICAgZGVmYXVsdF9icmFuY2g9J21haW4nLCBnaXRfc3ZuPUZhbHNl
LAorICAgICk6CisgICAgICAgIGlmIG5vdCBzY21yZW1vdGUuR2l0SHViLmlzX3dlYnNlcnZlcign
aHR0cHM6Ly97fScuZm9ybWF0KHJlbW90ZSkpOgorICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJv
cignInt9IiBpcyBub3QgYSB2YWxpZCBHaXRIdWIgcmVtb3RlJy5mb3JtYXQocmVtb3RlKSkKKwor
ICAgICAgICBzZWxmLmRlZmF1bHRfYnJhbmNoID0gZGVmYXVsdF9icmFuY2gKKyAgICAgICAgc2Vs
Zi5yZW1vdGUgPSByZW1vdGUKKyAgICAgICAgaG9zdG5hbWUgPSBzZWxmLnJlbW90ZS5zcGxpdCgn
LycpWzBdCisgICAgICAgIHNlbGYuYXBpX3JlbW90ZSA9ICdhcGkue2hvc3RuYW1lfS9yZXBvcy97
cmVwb30nLmZvcm1hdCgKKyAgICAgICAgICAgIGhvc3RuYW1lPWhvc3RuYW1lLAorICAgICAgICAg
ICAgcmVwbz0nLycuam9pbihzZWxmLnJlbW90ZS5zcGxpdCgnLycpWzE6XSksCisgICAgICAgICkK
KworICAgICAgICBzdXBlcihHaXRIdWIsIHNlbGYpLl9faW5pdF9fKGhvc3RuYW1lLCAnYXBpLnt9
Jy5mb3JtYXQoaG9zdG5hbWUpKQorCisgICAgICAgIHdpdGggb3BlbihkYXRhZmlsZSBvciBvcy5w
YXRoLmpvaW4ob3MucGF0aC5kaXJuYW1lKG9zLnBhdGguZGlybmFtZShfX2ZpbGVfXykpLCAnZ2l0
LXJlcG8uanNvbicpKSBhcyBmaWxlOgorICAgICAgICAgICAgc2VsZi5jb21taXRzID0ganNvbi5s
b2FkKGZpbGUpCisgICAgICAgIGZvciBrZXksIGNvbW1pdHMgaW4gc2VsZi5jb21taXRzLml0ZW1z
KCk6CisgICAgICAgICAgICBzZWxmLmNvbW1pdHNba2V5XSA9IFtDb21taXQoKiprd2FyZ3MpIGZv
ciBrd2FyZ3MgaW4gY29tbWl0c10KKyAgICAgICAgICAgIGlmIG5vdCBnaXRfc3ZuOgorICAgICAg
ICAgICAgICAgIGZvciBjb21taXQgaW4gc2VsZi5jb21taXRzW2tleV06CisgICAgICAgICAgICAg
ICAgICAgIGNvbW1pdC5yZXZpc2lvbiA9IE5vbmUKKworICAgICAgICBzZWxmLmhlYWQgPSBzZWxm
LmNvbW1pdHNbc2VsZi5kZWZhdWx0X2JyYW5jaF1bLTFdCisgICAgICAgIHNlbGYudGFncyA9IHt9
CisKKyAgICBkZWYgY29tbWl0KHNlbGYsIHJlZik6CisgICAgICAgIGlmIHJlZiBpbiBzZWxmLmNv
bW1pdHM6CisgICAgICAgICAgICByZXR1cm4gc2VsZi5jb21taXRzW3JlZl1bLTFdCisgICAgICAg
IGlmIHJlZiBpbiBzZWxmLnRhZ3M6CisgICAgICAgICAgICByZXR1cm4gc2VsZi50YWdzW3JlZl0K
KworICAgICAgICBmb3IgYnJhbmNoLCBjb21taXRzIGluIHNlbGYuY29tbWl0cy5pdGVtcygpOgor
ICAgICAgICAgICAgZm9yIGNvbW1pdCBpbiBjb21taXRzOgorICAgICAgICAgICAgICAgIGlmIGNv
bW1pdC5oYXNoLnN0YXJ0c3dpdGgocmVmKToKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNv
bW1pdAorCisgICAgICAgIGlmICd+JyBub3QgaW4gcmVmOgorICAgICAgICAgICAgcmV0dXJuIE5v
bmUKKyAgICAgICAgcmVmLCBkZWx0YSA9IHJlZi5zcGxpdCgnficpCisgICAgICAgIGNvbW1pdCA9
IHNlbGYuY29tbWl0KHJlZikKKyAgICAgICAgaWYgbm90IGNvbW1pdDoKKyAgICAgICAgICAgIHJl
dHVybiBOb25lCisgICAgICAgIGRlbHRhID0gaW50KGRlbHRhKQorCisgICAgICAgIGlmIGRlbHRh
IDwgY29tbWl0LmlkZW50aWZpZXI6CisgICAgICAgICAgICByZXR1cm4gc2VsZi5jb21taXRzW2Nv
bW1pdC5icmFuY2hdW2NvbW1pdC5pZGVudGlmaWVyIC0gZGVsdGEgLSAxXQorICAgICAgICBkZWx0
YSAtPSBjb21taXQuaWRlbnRpZmllcgorICAgICAgICBpZiBkZWx0YSA8IGNvbW1pdC5icmFuY2hf
cG9pbnQ6CisgICAgICAgICAgICByZXR1cm4gc2VsZi5jb21taXRzW3NlbGYuZGVmYXVsdF9icmFu
Y2hdW2NvbW1pdC5icmFuY2hfcG9pbnQgLSBkZWx0YSAtIDFdCisgICAgICAgIHJldHVybiBOb25l
CisKKyAgICBkZWYgX2FwaV9yZXNwb25zZShzZWxmLCB1cmwpOgorICAgICAgICByZXR1cm4gbW9j
a3MuUmVzcG9uc2UuZnJvbUpzb24oeworICAgICAgICAgICAgJ2lkJzogMSwKKyAgICAgICAgICAg
ICduYW1lJzogc2VsZi5yZW1vdGUuc3BsaXQoJy8nKVsyXSwKKyAgICAgICAgICAgICd1cmwnOiB1
cmwsCisgICAgICAgICAgICAnZGVmYXVsdF9icmFuY2gnOiBzZWxmLmRlZmF1bHRfYnJhbmNoLAor
ICAgICAgICAgICAgJ293bmVyJzogeworICAgICAgICAgICAgICAgICdsb2dpbic6IHNlbGYucmVt
b3RlLnNwbGl0KCcvJylbMV0sCisgICAgICAgICAgICB9LCAnb3JnYW5pemF0aW9uJzogeworICAg
ICAgICAgICAgICAgICdsb2dpbic6IHNlbGYucmVtb3RlLnNwbGl0KCcvJylbMV0sCisgICAgICAg
ICAgICB9LCAnaHRtbF91cmwnOiBzZWxmLnJlbW90ZSwKKyAgICAgICAgfSwgdXJsPXVybCkKKwor
ICAgIGRlZiBfbGlzdF9yZWZzX3Jlc3BvbnNlKHNlbGYsIHVybCwgdHlwZSk6CisgICAgICAgIHJl
dHVybiBtb2Nrcy5SZXNwb25zZS5mcm9tSnNvbihbCisgICAgICAgICAgICB7CisgICAgICAgICAg
ICAgICAgJ25hbWUnOiByZWZlcmVuY2UsCisgICAgICAgICAgICAgICAgJ2NvbW1pdCc6IHsKKyAg
ICAgICAgICAgICAgICAgICAgJ3NoYSc6IGNvbW1pdFstMV0uaGFzaCBpZiBpc2luc3RhbmNlKGNv
bW1pdCwgbGlzdCkgZWxzZSBjb21taXQuaGFzaCwKKyAgICAgICAgICAgICAgICAgICAgJ3VybCc6
ICdodHRwczovL3t9L2NvbW1pdHMve30nLmZvcm1hdChzZWxmLmFwaV9yZW1vdGUsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29tbWl0
Wy0xXS5oYXNoIGlmIGlzaW5zdGFuY2UoY29tbWl0LCBsaXN0KSBlbHNlIGNvbW1pdC5oYXNoKSwK
KyAgICAgICAgICAgICAgICB9LAorICAgICAgICAgICAgfSBmb3IgcmVmZXJlbmNlLCBjb21taXQg
aW4gKHNlbGYuY29tbWl0cyBpZiB0eXBlID09ICdicmFuY2hlcycgZWxzZSBzZWxmLnRhZ3MpLml0
ZW1zKCkKKyAgICAgICAgXSwgdXJsPXVybCkKKworICAgIGRlZiBfY29tbWl0X3Jlc3BvbnNlKHNl
bGYsIHVybCwgcmVmKToKKyAgICAgICAgY29tbWl0ID0gc2VsZi5jb21taXQocmVmKQorICAgICAg
ICBpZiBub3QgY29tbWl0OgorICAgICAgICAgICAgcmV0dXJuIG1vY2tzLlJlc3BvbnNlKAorICAg
ICAgICAgICAgICAgIHN0YXR1c19jb2RlPTQwNCwKKyAgICAgICAgICAgICAgICB1cmw9dXJsLAor
ICAgICAgICAgICAgICAgIHRleHQ9anNvbi5kdW1wcyhkaWN0KG1lc3NhZ2U9J05vIGNvbW1pdCBm
b3VuZCBmb3IgU0hBOiB7fScuZm9ybWF0KHJlZikpKSwKKyAgICAgICAgICAgICkKKyAgICAgICAg
cmV0dXJuIG1vY2tzLlJlc3BvbnNlLmZyb21Kc29uKHsKKyAgICAgICAgICAgICdzaGEnOiBjb21t
aXQuaGFzaCwKKyAgICAgICAgICAgICdjb21taXQnOiB7CisgICAgICAgICAgICAgICAgJ2F1dGhv
cic6IHsKKyAgICAgICAgICAgICAgICAgICAgJ25hbWUnOiBjb21taXQuYXV0aG9yLm5hbWUsCisg
ICAgICAgICAgICAgICAgICAgICdlbWFpbCc6IGNvbW1pdC5hdXRob3IuZW1haWwsCisgICAgICAg
ICAgICAgICAgICAgICdkYXRlJzogZGF0ZXRpbWUuZnJvbXRpbWVzdGFtcChjb21taXQudGltZXN0
YW1wKS5zdHJmdGltZSgnJVktJW0tJWRUJUg6JU06JVNaJyksCisgICAgICAgICAgICAgICAgfSwg
J2NvbW1pdHRlcic6IHsKKyAgICAgICAgICAgICAgICAgICAgJ25hbWUnOiBjb21taXQuYXV0aG9y
Lm5hbWUsCisgICAgICAgICAgICAgICAgICAgICdlbWFpbCc6IGNvbW1pdC5hdXRob3IuZW1haWws
CisgICAgICAgICAgICAgICAgICAgICdkYXRlJzogZGF0ZXRpbWUuZnJvbXRpbWVzdGFtcChjb21t
aXQudGltZXN0YW1wKS5zdHJmdGltZSgnJVktJW0tJWRUJUg6JU06JVNaJyksCisgICAgICAgICAg
ICAgICAgfSwgJ21lc3NhZ2UnOiBjb21taXQubWVzc2FnZSwKKyAgICAgICAgICAgICAgICAndXJs
JzogJ2h0dHBzOi8ve30vZ2l0L2NvbW1pdHMve30nLmZvcm1hdChzZWxmLmFwaV9yZW1vdGUsIGNv
bW1pdC5oYXNoKSwKKyAgICAgICAgICAgIH0sICd1cmwnOiAnaHR0cHM6Ly97fS9jb21taXRzL3t9
Jy5mb3JtYXQoc2VsZi5hcGlfcmVtb3RlLCBjb21taXQuaGFzaCksCisgICAgICAgICAgICAnaHRt
bF91cmwnOiAnaHR0cHM6Ly97fS9jb21taXQve30nLmZvcm1hdChzZWxmLnJlbW90ZSwgY29tbWl0
Lmhhc2gpLAorICAgICAgICB9LCB1cmw9dXJsKQorCisgICAgZGVmIF9jb21wYXJlX3Jlc3BvbnNl
KHNlbGYsIHVybCwgcmVmX2EsIHJlZl9iKToKKyAgICAgICAgY29tbWl0X2EgPSBzZWxmLmNvbW1p
dChyZWZfYSkKKyAgICAgICAgY29tbWl0X2IgPSBzZWxmLmNvbW1pdChyZWZfYikKKyAgICAgICAg
aWYgbm90IGNvbW1pdF9hIG9yIG5vdCBjb21taXRfYjoKKyAgICAgICAgICAgIHJldHVybiBtb2Nr
cy5SZXNwb25zZSgKKyAgICAgICAgICAgICAgICBzdGF0dXNfY29kZT00MDQsCisgICAgICAgICAg
ICAgICAgdXJsPXVybCwKKyAgICAgICAgICAgICAgICB0ZXh0PWpzb24uZHVtcHMoZGljdChtZXNz
YWdlPSdOb3QgZm91bmQnKSksCisgICAgICAgICAgICApCisKKyAgICAgICAgaWYgY29tbWl0X2Eu
YnJhbmNoICE9IHNlbGYuZGVmYXVsdF9icmFuY2ggb3IgY29tbWl0X2IuYnJhbmNoID09IHNlbGYu
ZGVmYXVsdF9icmFuY2g6CisgICAgICAgICAgICByYWlzZSBOb3RJbXBsZW1lbnRlZEVycm9yKAor
ICAgICAgICAgICAgICAgICdUaGlzIGlzIGEgdmFsaWQgY29tcGFyaXNvbiBjb21tYW5kLCBidXQg
aGFzIG5vdCBiZWVuIGltcGxlbWVudGVkIGluIHRoZSBtb2NrIEdpdEh1YiBBUEknKQorCisgICAg
ICAgIHJldHVybiBtb2Nrcy5SZXNwb25zZS5mcm9tSnNvbih7CisgICAgICAgICAgICAnc3RhdHVz
JzogJ2RpdmVyZ2VkJywKKyAgICAgICAgICAgICdhaGVhZF9ieSc6IGNvbW1pdF9iLmlkZW50aWZp
ZXIsCisgICAgICAgICAgICAnYmVoaW5kX2J5JzogY29tbWl0X2EuaWRlbnRpZmllciAtIGNvbW1p
dF9iLmJyYW5jaF9wb2ludCwKKyAgICAgICAgfSwgdXJsPXVybCkKKworICAgIGRlZiBfYnJhbmNo
ZXNfZm9yX3JlcXVlc3Qoc2VsZiwgdXJsLCByZWYpOgorICAgICAgICBjb21taXQgPSBzZWxmLmNv
bW1pdChyZWYpCisgICAgICAgIGlmIG5vdCBjb21taXQ6CisgICAgICAgICAgICByZXR1cm4gbW9j
a3MuUmVzcG9uc2UuY3JlYXRlNDA0KHVybCkKKyAgICAgICAgcmV0dXJuIG1vY2tzLlJlc3BvbnNl
LmZyb21UZXh0KAorICAgICAgICAgICAgJ1xuXG4gICAgPHN2ZyBjbGFzcz0ib2N0aWNvbiBvY3Rp
Y29uLWdpdC1icmFuY2giPjxwYXRoPjwvcGF0aD48L3N2Zz5cbicKKyAgICAgICAgICAgICcgICAg
PHVsIGNsYXNzPSJicmFuY2hlcy1saXN0Ij5cbicKKyAgICAgICAgICAgICcgICAgICAgIDxsaSBj
bGFzcz0iYnJhbmNoIj48YSBocmVmPSIve30iPnt9PC9hPjwvbGk+XG4nCisgICAgICAgICAgICAn
ICAgIDwvdWw+XG4nLmZvcm1hdCgKKyAgICAgICAgICAgICAgICAnLycuam9pbihzZWxmLnJlbW90
ZS5zcGxpdCgnLycpWzE6XSksCisgICAgICAgICAgICAgICAgY29tbWl0LmJyYW5jaCwKKyAgICAg
ICAgICAgICksIHVybD11cmwKKyAgICAgICAgKQorCisgICAgZGVmIF9wYXJlbnRzX29mX3JlcXVl
c3Qoc2VsZiwgdXJsLCByZWYpOgorICAgICAgICBjb21taXQgPSBzZWxmLmNvbW1pdChyZWYpCisg
ICAgICAgIGlmIG5vdCBjb21taXQ6CisgICAgICAgICAgICByZXR1cm4gbW9ja3MuUmVzcG9uc2Uu
Y3JlYXRlNDA0KHVybCkKKworICAgICAgICAjIFRoaXMgcmVzcG9uc2UgaXMgYWJicmV2aWF0ZWQg
c2luY2UgbW9zdCBpcyB1bnVzZWQKKyAgICAgICAgcmV0dXJuIG1vY2tzLlJlc3BvbnNlLmZyb21U
ZXh0KAorICAgICAgICAgICAgJ1xuXG5cblxuPCFET0NUWVBFIGh0bWw+XG4nCisgICAgICAgICAg
ICAnPGh0bWwgbGFuZz0iZW4iPlxuJworICAgICAgICAgICAgJy4uLlxuJworICAgICAgICAgICAg
JzxkaXYgY2xhc3M9IkJveCBtYi0zIj5cbicKKyAgICAgICAgICAgICcgICAgPGRpdiBjbGFzcz0i
Qm94LWhlYWRlciBCb3gtaGVhZGVyLS1ibHVlIHBvc2l0aW9uLXJlbGF0aXZlIj5cbicKKyAgICAg
ICAgICAgICcgICAgICAgIDxoMiBjbGFzcz0ic3Itb25seSI+TGF0ZXN0IGNvbW1pdDwvaDI+XG4n
CisgICAgICAgICAgICAnICAgICAgICA8ZGl2IGNsYXNzPSIuLi4iIGRhdGEtaXNzdWUtYW5kLXBy
LWhvdmVyY2FyZHMtZW5hYmxlZD5cbicKKyAgICAgICAgICAgICcgICAgICAgICAgICA8aW5jbHVk
ZS1mcmFnbWVudCBzcmM9Ii9XZWJLaXQvd2Via2l0L3RyZWUtY29tbWl0L3tyZWZ9IiBhcmlhLWxh
YmVsPSJMb2FkaW5nIGxhdGVzdCBjb21taXQiPlxuJworICAgICAgICAgICAgJyAgICAgICAgICAg
IDwvaW5jbHVkZS1mcmFnbWVudD5cbicKKyAgICAgICAgICAgICcgICAgICAgIDx1bCBjbGFzcz0i
bGlzdC1zdHlsZS1ub25lIGQtZmxleCI+XG4nCisgICAgICAgICAgICAnICAgICAgICAgICAgPGxp
IGNsYXNzPSJtbC0wIG1sLW1kLTMiPlxuJworICAgICAgICAgICAgJyAgICAgICAgICAgICAgICA8
YSBkYXRhLXBqYXggaHJlZj0iL1dlYktpdC93ZWJraXQvY29tbWl0cy97cmVmfSI+XG4nCisgICAg
ICAgICAgICAnICAgICAgICAgICAgICAgICAgICA8c3ZnIGNsYXNzPSJvY3RpY29uIG9jdGljb24t
aGlzdG9yeSB0ZXh0LWdyYXkiPjxwYXRoPjwvcGF0aD48L3N2Zz5cbicKKyAgICAgICAgICAgICcg
ICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJkLW5vbmUgZC1zbS1pbmxpbmUiPlxuJwor
ICAgICAgICAgICAgJyAgICAgICAgICAgICAgICAgICAgICAgIDxzdHJvbmc+e2NvdW50fTwvc3Ry
b25nPlxuJworICAgICAgICAgICAgJyAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGFyaWEt
bGFiZWw9IkNvbW1pdHMgb24gIiBjbGFzcz0iLi4uIj5jb21taXRzPC9zcGFuPlxuJworICAgICAg
ICAgICAgJyAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbicKKyAgICAgICAgICAgICcg
ICAgICAgICAgICAgICAgPC9hPlxuJworICAgICAgICAgICAgJyAgICAgICAgICAgIDwvbGk+XG4n
CisgICAgICAgICAgICAnICAgICAgICA8L3VsPlxuJworICAgICAgICAgICAgJyAgICAgICAgPC9k
aXY+XG4nCisgICAgICAgICAgICAnICAgIDwvZGl2PlxuJworICAgICAgICAgICAgJzwvZGl2Plxu
JworICAgICAgICAgICAgJy4uLlxuJworICAgICAgICAgICAgJzwvaHRtbD5cbicuZm9ybWF0KAor
ICAgICAgICAgICAgICAgIHJlZj1jb21taXQuaGFzaCwKKyAgICAgICAgICAgICAgICBjb3VudD1j
b21taXQuaWRlbnRpZmllciArIChjb21taXQuYnJhbmNoX3BvaW50IG9yIDApLAorICAgICAgICAg
ICAgKSwgdXJsPXVybAorICAgICAgICApCisKKyAgICBkZWYgcmVxdWVzdChzZWxmLCBtZXRob2Qs
IHVybCwgZGF0YT1Ob25lLCAqKmt3YXJncyk6CisgICAgICAgIGlmIG5vdCB1cmwuc3RhcnRzd2l0
aCgnaHR0cDovLycpIGFuZCBub3QgdXJsLnN0YXJ0c3dpdGgoJ2h0dHBzOi8vJyk6CisgICAgICAg
ICAgICByZXR1cm4gbW9ja3MuUmVzcG9uc2UuY3JlYXRlNDA0KHVybCkKKworICAgICAgICBzdHJp
cHBlZF91cmwgPSB1cmwuc3BsaXQoJzovLycpWy0xXQorCisgICAgICAgICMgVG9wLWxldmVsIEFQ
SSByZXF1ZXN0CisgICAgICAgIGlmIHN0cmlwcGVkX3VybCA9PSBzZWxmLmFwaV9yZW1vdGU6Cisg
ICAgICAgICAgICByZXR1cm4gc2VsZi5fYXBpX3Jlc3BvbnNlKHVybD11cmwpCisKKyAgICAgICAg
IyBCcmFuY2hlcy9UYWdzCisgICAgICAgIGlmIHN0cmlwcGVkX3VybCBpbiBbJ3t9L2JyYW5jaGVz
Jy5mb3JtYXQoc2VsZi5hcGlfcmVtb3RlKSwgJ3t9L3RhZ3MnLmZvcm1hdChzZWxmLmFwaV9yZW1v
dGUpXToKKyAgICAgICAgICAgIHJldHVybiBzZWxmLl9saXN0X3JlZnNfcmVzcG9uc2UodXJsPXVy
bCwgdHlwZT1zdHJpcHBlZF91cmwuc3BsaXQoJy8nKVstMV0pCisKKyAgICAgICAgIyBFeHRyYWN0
IHNpbmdsZSBjb21taXQKKyAgICAgICAgaWYgc3RyaXBwZWRfdXJsLnN0YXJ0c3dpdGgoJ3t9L2Nv
bW1pdHMvJy5mb3JtYXQoc2VsZi5hcGlfcmVtb3RlKSk6CisgICAgICAgICAgICByZXR1cm4gc2Vs
Zi5fY29tbWl0X3Jlc3BvbnNlKHVybD11cmwsIHJlZj1zdHJpcHBlZF91cmwuc3BsaXQoJy8nKVst
MV0pCisKKyAgICAgICAgIyBDb21wYXJlIHR3byBjb21taXRzCisgICAgICAgIGlmIHN0cmlwcGVk
X3VybC5zdGFydHN3aXRoKCd7fS9jb21wYXJlLycuZm9ybWF0KHNlbGYuYXBpX3JlbW90ZSkpOgor
ICAgICAgICAgICAgcmVmX2EsIHJlZl9iID0gc3RyaXBwZWRfdXJsLnNwbGl0KCcvJylbLTFdLnNw
bGl0KCcuLi4nKQorICAgICAgICAgICAgcmV0dXJuIHNlbGYuX2NvbXBhcmVfcmVzcG9uc2UodXJs
PXVybCwgcmVmX2E9cmVmX2EsIHJlZl9iPXJlZl9iKQorCisgICAgICAgICMgTGlzdCBicmFuY2hl
cyBhIGNvbW1pdCBvY2N1cnMgb24KKyAgICAgICAgaWYgc3RyaXBwZWRfdXJsLnN0YXJ0c3dpdGgo
J3t9L2JyYW5jaF9jb21taXRzLycuZm9ybWF0KHNlbGYucmVtb3RlKSk6CisgICAgICAgICAgICBy
ZXR1cm4gc2VsZi5fYnJhbmNoZXNfZm9yX3JlcXVlc3QodXJsPXVybCwgcmVmPXN0cmlwcGVkX3Vy
bC5zcGxpdCgnLycpWy0xXSkKKworICAgICAgICAjIEZpbmQgdGhlIG51bWJlciBvZiBwYXJlbnRz
IGEgY29tbWl0IGhhcworICAgICAgICBpZiBzdHJpcHBlZF91cmwuc3RhcnRzd2l0aCgne30vdHJl
ZS8nLmZvcm1hdChzZWxmLnJlbW90ZSkpOgorICAgICAgICAgICAgcmV0dXJuIHNlbGYuX3BhcmVu
dHNfb2ZfcmVxdWVzdCh1cmw9dXJsLCByZWY9c3RyaXBwZWRfdXJsLnNwbGl0KCcvJylbLTFdKQor
CisgICAgICAgIHJldHVybiBtb2Nrcy5SZXNwb25zZS5jcmVhdGU0MDQodXJsKQpJbmRleDogVG9v
bHMvU2NyaXB0cy9saWJyYXJpZXMvd2Via2l0c2NtcHkvd2Via2l0c2NtcHkvcmVtb3RlL19faW5p
dF9fLnB5Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1NjcmlwdHMvbGlicmFyaWVzL3dlYmtpdHNjbXB5
L3dlYmtpdHNjbXB5L3JlbW90ZS9fX2luaXRfXy5weQkocmV2aXNpb24gMjcwNzY5KQorKysgVG9v
bHMvU2NyaXB0cy9saWJyYXJpZXMvd2Via2l0c2NtcHkvd2Via2l0c2NtcHkvcmVtb3RlL19faW5p
dF9fLnB5CSh3b3JraW5nIGNvcHkpCkBAIC0yMiwzICsyMiw0IEBACiAKIGZyb20gd2Via2l0c2Nt
cHkucmVtb3RlLnNjbSBpbXBvcnQgU2NtCiBmcm9tIHdlYmtpdHNjbXB5LnJlbW90ZS5zdm4gaW1w
b3J0IFN2bgorZnJvbSB3ZWJraXRzY21weS5yZW1vdGUuZ2l0X2h1YiBpbXBvcnQgR2l0SHViCklu
ZGV4OiBUb29scy9TY3JpcHRzL2xpYnJhcmllcy93ZWJraXRzY21weS93ZWJraXRzY21weS9yZW1v
dGUvZ2l0X2h1Yi5weQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9TY3JpcHRzL2xpYnJhcmllcy93ZWJr
aXRzY21weS93ZWJraXRzY21weS9yZW1vdGUvZ2l0X2h1Yi5weQkobm9uZXhpc3RlbnQpCisrKyBU
b29scy9TY3JpcHRzL2xpYnJhcmllcy93ZWJraXRzY21weS93ZWJraXRzY21weS9yZW1vdGUvZ2l0
X2h1Yi5weQkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDI3OSBAQAorIyBDb3B5cmlnaHQgKEMp
IDIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorIworIyBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMg
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisjIGFyZSBtZXQ6CisjIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorIyAyLiAgUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyMgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyMgICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisjCisjIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMg
SVMiIEFORAorIyBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorIyBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisjIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SCisjIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyMgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IKKyMgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIKKyMgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKKyMgT1IgVE9SVCAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UKKyMgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KKworaW1wb3J0IGNhbGVuZGFyCitpbXBvcnQgcmUKK2ltcG9y
dCByZXF1ZXN0cworaW1wb3J0IHNpeAorCitmcm9tIGRhdGV0aW1lIGltcG9ydCBkYXRldGltZQor
ZnJvbSB3ZWJraXRjb3JlcHkgaW1wb3J0IGRlY29yYXRvcnMKK2Zyb20gd2Via2l0c2NtcHkgaW1w
b3J0IENvbW1pdCwgQ29udHJpYnV0b3IKK2Zyb20gd2Via2l0c2NtcHkucmVtb3RlLnNjbSBpbXBv
cnQgU2NtCitmcm9tIHhtbC5kb20gaW1wb3J0IG1pbmlkb20KKworCitjbGFzcyBHaXRIdWIoU2Nt
KToKKyAgICBVUkxfUkUgPSByZS5jb21waWxlKHInXEFodHRwcz86Ly9naXRodWIuKD9QPGRvbWFp
bj5cUyspLyg/UDxvd25lcj5cUyspLyg/UDxyZXBvc2l0b3J5PlxTKylcWicpCisgICAgRU1BSUxf
UkUgPSByZS5jb21waWxlKHInKD9QPGVtYWlsPlteQF0rQFteQF0rKShALiopPycpCisKKyAgICBA
Y2xhc3NtZXRob2QKKyAgICBkZWYgaXNfd2Vic2VydmVyKGNscywgdXJsKToKKyAgICAgICAgcmV0
dXJuIFRydWUgaWYgY2xzLlVSTF9SRS5tYXRjaCh1cmwpIGVsc2UgRmFsc2UKKworICAgIGRlZiBf
X2luaXRfXyhzZWxmLCB1cmwsIGRldl9icmFuY2hlcz1Ob25lLCBwcm9kX2JyYW5jaGVzPU5vbmUs
IGNvbnRyaWJ1dG9ycz1Ob25lKToKKyAgICAgICAgbWF0Y2ggPSBzZWxmLlVSTF9SRS5tYXRjaCh1
cmwpCisgICAgICAgIGlmIG5vdCBtYXRjaDoKKyAgICAgICAgICAgIHJhaXNlIHNlbGYuRXhjZXB0
aW9uKCIne30nIGlzIG5vdCBhIHZhbGlkIEdpdEh1YiBwcm9qZWN0Ii5mb3JtYXQodXJsKSkKKyAg
ICAgICAgc2VsZi5hcGlfdXJsID0gJ2h0dHBzOi8vYXBpLmdpdGh1Yi57fScuZm9ybWF0KG1hdGNo
Lmdyb3VwKCdkb21haW4nKSkKKyAgICAgICAgc2VsZi5vd25lciA9IG1hdGNoLmdyb3VwKCdvd25l
cicpCisgICAgICAgIHNlbGYubmFtZSA9IG1hdGNoLmdyb3VwKCdyZXBvc2l0b3J5JykKKyAgICAg
ICAgc2VsZi5faGFzaF9saW5rX3JlID0gcmUuY29tcGlsZShyJy97b3duZXJ9L3tuYW1lfS9jb21t
aXRzPy8oP1A8aGFzaD5bMC05YS1mXSspJy5mb3JtYXQoCisgICAgICAgICAgICBvd25lcj1zZWxm
Lm93bmVyLAorICAgICAgICAgICAgbmFtZT1zZWxmLm5hbWUsCisgICAgICAgICkpCisKKyAgICAg
ICAgc3VwZXIoR2l0SHViLCBzZWxmKS5fX2luaXRfXyh1cmwsIGRldl9icmFuY2hlcz1kZXZfYnJh
bmNoZXMsIHByb2RfYnJhbmNoZXM9cHJvZF9icmFuY2hlcywgY29udHJpYnV0b3JzPWNvbnRyaWJ1
dG9ycykKKworICAgIEBwcm9wZXJ0eQorICAgIGRlZiBpc19naXQoc2VsZik6CisgICAgICAgIHJl
dHVybiBUcnVlCisKKyAgICBkZWYgcmVxdWVzdChzZWxmLCBwYXRoPU5vbmUsIHBhcmFtcz1Ob25l
LCBoZWFkZXJzPU5vbmUpOgorICAgICAgICBoZWFkZXJzID0ge2tleTogdmFsdWUgZm9yIGtleSwg
dmFsdWUgaW4gaGVhZGVycy5pdGVtcygpfSBpZiBoZWFkZXJzIGVsc2UgZGljdCgpCisgICAgICAg
IGhlYWRlcnNbJ0FjY2VwdCddID0gaGVhZGVycy5nZXQoJ0FjY2VwdCcsICdhcHBsaWNhdGlvbi92
bmQuZ2l0aHViLnYzK2pzb24nKQorCisgICAgICAgIHBhcmFtcyA9IHtrZXk6IHZhbHVlIGZvciBr
ZXksIHZhbHVlIGluIHBhcmFtcy5pdGVtcygpfSBpZiBwYXJhbXMgZWxzZSBkaWN0KCkKKyAgICAg
ICAgcGFyYW1zWydwZXJfcGFnZSddID0gcGFyYW1zLmdldCgncGVyX3BhZ2UnLCAxMDApCisgICAg
ICAgIHBhcmFtc1sncGFnZSddID0gcGFyYW1zLmdldCgncGFnZScsIDEpCisKKyAgICAgICAgdXJs
ID0gJ3thcGlfdXJsfS9yZXBvcy97b3duZXJ9L3tuYW1lfXtwYXRofScuZm9ybWF0KAorICAgICAg
ICAgICAgYXBpX3VybD1zZWxmLmFwaV91cmwsCisgICAgICAgICAgICBvd25lcj1zZWxmLm93bmVy
LAorICAgICAgICAgICAgbmFtZT1zZWxmLm5hbWUsCisgICAgICAgICAgICBwYXRoPScve30nLmZv
cm1hdChwYXRoKSBpZiBwYXRoIGVsc2UgJycsCisgICAgICAgICkKKyAgICAgICAgcmVzcG9uc2Ug
PSByZXF1ZXN0cy5nZXQodXJsLCBwYXJhbXM9cGFyYW1zLCBoZWFkZXJzPWhlYWRlcnMpCisgICAg
ICAgIGlmIHJlc3BvbnNlLnN0YXR1c19jb2RlICE9IDIwMDoKKyAgICAgICAgICAgIHJldHVybiBO
b25lCisgICAgICAgIHJlc3VsdCA9IHJlc3BvbnNlLmpzb24oKQorCisgICAgICAgIHdoaWxlIGlz
aW5zdGFuY2UocmVzcG9uc2UuanNvbigpLCBsaXN0KSBhbmQgbGVuKHJlc3BvbnNlLmpzb24oKSkg
PT0gcGFyYW1zWydwZXJfcGFnZSddOgorICAgICAgICAgICAgcGFyYW1zWydwYWdlJ10gKz0gMQor
ICAgICAgICAgICAgcmVzcG9uc2UgPSByZXF1ZXN0cy5nZXQodXJsLCBwYXJhbXM9cGFyYW1zLCBo
ZWFkZXJzPWhlYWRlcnMpCisgICAgICAgICAgICBpZiByZXNwb25zZS5zdGF0dXNfY29kZSAhPSAy
MDA6CisgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdAorICAgICAgICAgICAgcmVzdWx0ICs9
IHJlc3BvbnNlLmpzb24oKQorICAgICAgICByZXR1cm4gcmVzdWx0CisKKyAgICBkZWYgX2NvdW50
KHNlbGYsIHJlZj1Ob25lKToKKyAgICAgICAgcmVmID0gcmVmIG9yIHNlbGYuZGVmYXVsdF9icmFu
Y2gKKworICAgICAgICAjIFdlIG5lZWQgdGhlIG51bWJlciBvZiBwYXJlbnRzIGEgY29tbWl0IGhh
cyB0byBjb25zdHJ1Y3QgaWRlbnRpZmllcnMsIHdoaWNoIGlzIG5vdCBzb21ldGhpbmcgR2l0SHVi
J3MKKyAgICAgICAgIyBBUEkgbGV0cyB1cyBmaW5kLCBhbHRob3VnaCB0aGUgVUkgZG9lcyBoYXZl
IHRoZSBpbmZvcm1hdGlvbgorICAgICAgICByZXNwb25zZSA9IHJlcXVlc3RzLmdldCgne30vdHJl
ZS97fScuZm9ybWF0KHNlbGYudXJsLCByZWYpKQorICAgICAgICBpZiByZXNwb25zZS5zdGF0dXNf
Y29kZSAhPSAyMDA6CisgICAgICAgICAgICByYWlzZSBzZWxmLkV4Y2VwdGlvbigiRmFpbGVkIHRv
IHF1ZXJ5IHt9J3MgVUkgdG8gZmluZCB0aGUgbnVtYmVyIG9mIHBhcmVudHMge30gaGFzIi5mb3Jt
YXQoc2VsZi51cmwsIHJlZikpCisKKyAgICAgICAgIyBUaGlzIHBhcnNpbmcgaXMgcHJldHR5IGJy
aXR0bGUsIGJ1dCB0aGUgd2VicGFnZSBtYXkgbm90IGJlIHZhbGlkIHhtbAorICAgICAgICBjb3Vu
dCA9IE5vbmUKKyAgICAgICAgaGFzaCA9IE5vbmUKKyAgICAgICAgcHJldmlvdXMgPSBOb25lCisg
ICAgICAgIGZvciBsaW5lIGluIHJlc3BvbnNlLnRleHQuc3BsaXRsaW5lcygpOgorICAgICAgICAg
ICAgbWF0Y2ggPSBzZWxmLl9oYXNoX2xpbmtfcmUuc2VhcmNoKGxpbmUpCisgICAgICAgICAgICBp
ZiBtYXRjaDoKKyAgICAgICAgICAgICAgICBoYXNoID0gbWF0Y2guZ3JvdXAoJ2hhc2gnKQorICAg
ICAgICAgICAgZWxpZiAnYXJpYS1sYWJlbD0iQ29tbWl0cyBvbiAnIGluIGxpbmU6CisgICAgICAg
ICAgICAgICAgY291bnQgPSBpbnQobWluaWRvbS5wYXJzZVN0cmluZyhwcmV2aW91cykuZG9jdW1l
bnRFbGVtZW50LmNoaWxkTm9kZXNbMF0uZGF0YS5yZXBsYWNlKCcsJywgJycpKQorICAgICAgICAg
ICAgICAgIGJyZWFrCisgICAgICAgICAgICBwcmV2aW91cyA9IGxpbmUKKworICAgICAgICBpZiBu
b3QgaGFzaCBvciBub3QgY291bnQ6CisgICAgICAgICAgICByYWlzZSBzZWxmLkV4Y2VwdGlvbigi
RmFpbGVkIHRvIGNvbXB1dGUgdGhlIG51bWJlciBvZiBwYXJlbnRzIHRvICd7fSciLmZvcm1hdChy
ZWYpKQorCisgICAgICAgIHJldHVybiBjb3VudCwgaGFzaAorCisgICAgZGVmIF9kaWZmZXJlbmNl
KHNlbGYsIHJlZmVyZW5jZSwgaGVhZCk6CisgICAgICAgIHJlc3BvbnNlID0gc2VsZi5yZXF1ZXN0
KCdjb21wYXJlL3t9Li4ue30nLmZvcm1hdChyZWZlcmVuY2UsIGhlYWQpLCBoZWFkZXJzPWRpY3Qo
QWNjZXB0PSdhcHBsaWNhdGlvbi92bmQuZ2l0aHViLlZFUlNJT04uc2hhJykpCisgICAgICAgIGlm
IG5vdCByZXNwb25zZSBvciBub3QgcmVzcG9uc2UuZ2V0KCdzdGF0dXMnKSBpbiBbJ2RpdmVyZ2Vk
JywgJ2FoZWFkJywgJ2JlaGluZCddOgorICAgICAgICAgICAgcmFpc2Ugc2VsZi5FeGNlcHRpb24o
J0ZhaWxlZCB0byByZXF1ZXN0IHRoZSBkaWZmZXJlbmNlIGJldHdlZW4ge30gYW5kIHt9Jy5mb3Jt
YXQocmVmZXJlbmNlLCBoZWFkKSkKKyAgICAgICAgcmV0dXJuIGludChyZXNwb25zZVsnYmVoaW5k
X2J5JyBpZiByZXNwb25zZS5nZXQoJ3N0YXR1cycpID09ICdiZWhpbmQnIGVsc2UgJ2FoZWFkX2J5
J10pCisKKyAgICBkZWYgX2JyYW5jaGVzX2ZvcihzZWxmLCBoYXNoKToKKyAgICAgICAgIyBXZSBu
ZWVkIHRvIGZpbmQgdGhlIGJyYW5jaCB0aGF0IGEgY29tbWl0IGlzIG9uLiBHaXRIdWIncyBVSSBw
cm92aWRlcyB0aGlzIGluZm9ybWF0aW9uLCBidXQgdGhlIG9ubHkgd2F5IHRvCisgICAgICAgICMg
cmV0cmlldmUgdGhpcyBpbmZvcm1hdGlvbiB2aWEgdGhlIEFQSSB3b3VsZCBiZSB0byBjaGVjayBh
bGwgYnJhbmNoZXMgZm9yIHRoZSBjb21taXQsIHNvIHdlIHNjcmFwZSB0aGUgVUkuCisgICAgICAg
IHJlc3BvbnNlID0gcmVxdWVzdHMuZ2V0KCd7fS9icmFuY2hfY29tbWl0cy97fScuZm9ybWF0KHNl
bGYudXJsLCBoYXNoKSkKKyAgICAgICAgaWYgcmVzcG9uc2Uuc3RhdHVzX2NvZGUgIT0gMjAwOgor
ICAgICAgICAgICAgcmV0dXJuIFtdCisKKyAgICAgICAgcmVzdWx0ID0gW10KKyAgICAgICAgZm9y
IGxpbmUgaW4gcmVzcG9uc2UudGV4dC5zcGxpdGxpbmVzKCk6CisgICAgICAgICAgICBpZiAnY2xh
c3M9ImJyYW5jaCInIG5vdCBpbiBsaW5lOgorICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAg
ICAgICAgICByZXN1bHQuYXBwZW5kKG1pbmlkb20ucGFyc2VTdHJpbmcobGluZSkuZG9jdW1lbnRF
bGVtZW50LmNoaWxkTm9kZXNbMF0uY2hpbGROb2Rlc1swXS5kYXRhKQorCisgICAgICAgIHJldHVy
biByZXN1bHQKKworICAgIEBwcm9wZXJ0eQorICAgIEBkZWNvcmF0b3JzLk1lbW9pemUoKQorICAg
IGRlZiBkZWZhdWx0X2JyYW5jaChzZWxmKToKKyAgICAgICAgcmVzcG9uc2UgPSBzZWxmLnJlcXVl
c3QoKQorICAgICAgICBpZiBub3QgcmVzcG9uc2U6CisgICAgICAgICAgICByYWlzZSBzZWxmLkV4
Y2VwdGlvbigiRmFpbGVkIHRvIHF1ZXJ5IHt9IGZvciB7fSdzIGRlZmF1bHQgYnJhbmNoIi5mb3Jt
YXQoc2VsZi51cmwsIHNlbGYubmFtZSkpCisgICAgICAgIHJldHVybiByZXNwb25zZS5nZXQoJ2Rl
ZmF1bHRfYnJhbmNoJywgJ21hc3RlcicpCisKKyAgICBAcHJvcGVydHkKKyAgICBkZWYgYnJhbmNo
ZXMoc2VsZik6CisgICAgICAgIHJlc3BvbnNlID0gc2VsZi5yZXF1ZXN0KCdicmFuY2hlcycpCisg
ICAgICAgIGlmIG5vdCByZXNwb25zZToKKyAgICAgICAgICAgIHJldHVybiBbc2VsZi5kZWZhdWx0
X2JyYW5jaF0KKyAgICAgICAgcmV0dXJuIHNvcnRlZChbZGV0YWlscy5nZXQoJ25hbWUnKSBmb3Ig
ZGV0YWlscyBpbiByZXNwb25zZSBpZiBkZXRhaWxzLmdldCgnbmFtZScpXSkKKworICAgIEBwcm9w
ZXJ0eQorICAgIGRlZiB0YWdzKHNlbGYpOgorICAgICAgICByZXNwb25zZSA9IHNlbGYucmVxdWVz
dCgndGFncycpCisgICAgICAgIGlmIG5vdCByZXNwb25zZToKKyAgICAgICAgICAgIHJldHVybiBb
XQorICAgICAgICByZXR1cm4gc29ydGVkKFtkZXRhaWxzLmdldCgnbmFtZScpIGZvciBkZXRhaWxz
IGluIHJlc3BvbnNlIGlmIGRldGFpbHMuZ2V0KCduYW1lJyldKQorCisgICAgZGVmIGNvbW1pdChz
ZWxmLCBoYXNoPU5vbmUsIHJldmlzaW9uPU5vbmUsIGlkZW50aWZpZXI9Tm9uZSwgYnJhbmNoPU5v
bmUsIHRhZz1Ob25lLCBpbmNsdWRlX2xvZz1UcnVlKToKKyAgICAgICAgaWYgcmV2aXNpb246Cisg
ICAgICAgICAgICByYWlzZSBzZWxmLkV4Y2VwdGlvbignQ2Fubm90IG1hcCByZXZpc2lvbnMgdG8g
Y29tbWl0cyBvbiBHaXRIdWInKQorCisgICAgICAgIGlmIGlkZW50aWZpZXIgaXMgbm90IE5vbmU6
CisgICAgICAgICAgICBpZiByZXZpc2lvbjoKKyAgICAgICAgICAgICAgICByYWlzZSBWYWx1ZUVy
cm9yKCdDYW5ub3QgZGVmaW5lIGJvdGggcmV2aXNpb24gYW5kIGlkZW50aWZpZXInKQorICAgICAg
ICAgICAgaWYgaGFzaDoKKyAgICAgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCdDYW5ub3Qg
ZGVmaW5lIGJvdGggaGFzaCBhbmQgaWRlbnRpZmllcicpCisgICAgICAgICAgICBpZiB0YWc6Cisg
ICAgICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcignQ2Fubm90IGRlZmluZSBib3RoIHRhZyBh
bmQgaWRlbnRpZmllcicpCisKKyAgICAgICAgICAgIHBhcnNlZF9icmFuY2hfcG9pbnQsIGlkZW50
aWZpZXIsIHBhcnNlZF9icmFuY2ggPSBDb21taXQuX3BhcnNlX2lkZW50aWZpZXIoaWRlbnRpZmll
ciwgZG9fYXNzZXJ0PVRydWUpCisgICAgICAgICAgICBpZiBwYXJzZWRfYnJhbmNoOgorICAgICAg
ICAgICAgICAgIGlmIGJyYW5jaCBhbmQgYnJhbmNoICE9IHBhcnNlZF9icmFuY2g6CisgICAgICAg
ICAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoCisgICAgICAgICAgICAgICAgICAgICAgICAi
Q2FsbGVyIHBhc3NlZCBib3RoICdicmFuY2gnIGFuZCAnaWRlbnRpZmllcicsIGJ1dCBzcGVjaWZp
ZWQgZGlmZmVyZW50IGJyYW5jaGVzICh7fSBhbmQge30pIi5mb3JtYXQoCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgYnJhbmNoLCBwYXJzZWRfYnJhbmNoLAorICAgICAgICAgICAgICAgICAg
ICAgICAgKSwKKyAgICAgICAgICAgICAgICAgICAgKQorICAgICAgICAgICAgICAgIGJyYW5jaCA9
IHBhcnNlZF9icmFuY2gKKworICAgICAgICAgICAgYnJhbmNoID0gYnJhbmNoIG9yIHNlbGYuZGVm
YXVsdF9icmFuY2gKKyAgICAgICAgICAgIGlzX2RlZmF1bHQgPSBicmFuY2ggPT0gc2VsZi5kZWZh
dWx0X2JyYW5jaAorCisgICAgICAgICAgICBpZiBpc19kZWZhdWx0IGFuZCBwYXJzZWRfYnJhbmNo
X3BvaW50OgorICAgICAgICAgICAgICAgIHJhaXNlIHNlbGYuRXhjZXB0aW9uKCdDYW5ub3QgcHJv
dmlkZSBhIGJyYW5jaCBwb2ludCBmb3IgYSBjb21taXQgb24gdGhlIGRlZmF1bHQgYnJhbmNoJykK
KworICAgICAgICAgICAgaWYgaXNfZGVmYXVsdDoKKyAgICAgICAgICAgICAgICBiYXNlX2NvdW50
LCBiYXNlX3JlZiA9IHNlbGYuX2NvdW50KHJlZj1zZWxmLmRlZmF1bHRfYnJhbmNoKQorICAgICAg
ICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBfLCBiYXNlX3JlZiA9IHNlbGYuX2NvdW50KHJl
Zj1icmFuY2gpCisgICAgICAgICAgICAgICAgYmFzZV9jb3VudCA9IHNlbGYuX2RpZmZlcmVuY2Uo
c2VsZi5kZWZhdWx0X2JyYW5jaCwgYmFzZV9yZWYpCisKKyAgICAgICAgICAgIGlmIGlkZW50aWZp
ZXIgPiBiYXNlX2NvdW50OgorICAgICAgICAgICAgICAgIHJhaXNlIHNlbGYuRXhjZXB0aW9uKCdJ
ZGVudGlmaWVyIHt9IGNhbm5vdCBiZSBmb3VuZCBvbiB7fScuZm9ybWF0KGlkZW50aWZpZXIsIGJy
YW5jaCkpCisKKyAgICAgICAgICAgICMgTmVnYXRpdmUgaWRlbnRpZmllcnMgYXJlIGFjdHVhbGx5
IGNvbW1pdHMgb24gdGhlIGRlZmF1bHQgYnJhbmNoLCB3ZSB3aWxsIG5lZWQgdG8gcmUtY29tcHV0
ZSB0aGUgaWRlbnRpZmllcgorICAgICAgICAgICAgaWYgaWRlbnRpZmllciA8IDAgYW5kIGlzX2Rl
ZmF1bHQ6CisgICAgICAgICAgICAgICAgcmFpc2Ugc2VsZi5FeGNlcHRpb24oJ0lsbGVnYWwgbmVn
YXRpdmUgaWRlbnRpZmllciBvbiB0aGUgZGVmYXVsdCBicmFuY2gnKQorCisgICAgICAgICAgICBj
b21taXRfZGF0YSA9IHNlbGYucmVxdWVzdCgnY29tbWl0cy97fX57fScuZm9ybWF0KGJhc2VfcmVm
LCBiYXNlX2NvdW50IC0gaWRlbnRpZmllcikpCisgICAgICAgICAgICBpZiBub3QgY29tbWl0X2Rh
dGE6CisgICAgICAgICAgICAgICAgcmFpc2Ugc2VsZi5FeGNlcHRpb24oIkZhaWxlZCB0byByZXRy
aWV2ZSBjb21taXQgaW5mb3JtYXRpb24gZm9yICd7fUB7fSciLmZvcm1hdChpZGVudGlmaWVyLCBi
cmFuY2ggb3IgJ0hFQUQnKSkKKworICAgICAgICAgICAgaWYgaWRlbnRpZmllciA8IDA6CisgICAg
ICAgICAgICAgICAgaWRlbnRpZmllciA9IE5vbmUKKworICAgICAgICBlbGlmIGJyYW5jaCBvciB0
YWc6CisgICAgICAgICAgICBpZiBoYXNoOgorICAgICAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJy
b3IoJ0Nhbm5vdCBkZWZpbmUgYm90aCB0YWcvYnJhbmNoIGFuZCBoYXNoJykKKyAgICAgICAgICAg
IGlmIGJyYW5jaCBhbmQgdGFnOgorICAgICAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoJ0Nh
bm5vdCBkZWZpbmUgYm90aCB0YWcgYW5kIGJyYW5jaCcpCisgICAgICAgICAgICBjb21taXRfZGF0
YSA9IHNlbGYucmVxdWVzdCgnY29tbWl0cy97fScuZm9ybWF0KGJyYW5jaCBvciB0YWcpKQorICAg
ICAgICAgICAgaWYgbm90IGNvbW1pdF9kYXRhOgorICAgICAgICAgICAgICAgIHJhaXNlIHNlbGYu
RXhjZXB0aW9uKCJGYWlsZWQgdG8gcmV0cmlldmUgY29tbWl0IGluZm9ybWF0aW9uIGZvciAne30n
Ii5mb3JtYXQoYnJhbmNoIG9yIHRhZykpCisKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIGhh
c2ggPSBDb21taXQuX3BhcnNlX2hhc2goaGFzaCwgZG9fYXNzZXJ0PVRydWUpCisgICAgICAgICAg
ICBjb21taXRfZGF0YSA9IHNlbGYucmVxdWVzdCgnY29tbWl0cy97fScuZm9ybWF0KGhhc2ggb3Ig
c2VsZi5kZWZhdWx0X2JyYW5jaCkpCisgICAgICAgICAgICBpZiBub3QgY29tbWl0X2RhdGE6Cisg
ICAgICAgICAgICAgICAgcmFpc2Ugc2VsZi5FeGNlcHRpb24oIkZhaWxlZCB0byByZXRyaWV2ZSBj
b21taXQgaW5mb3JtYXRpb24gZm9yICd7fSciLmZvcm1hdChoYXNoIG9yICdIRUFEJykpCisKKyAg
ICAgICAgYnJhbmNoZXMgPSBzZWxmLl9icmFuY2hlc19mb3IoY29tbWl0X2RhdGFbJ3NoYSddKQor
ICAgICAgICBpZiBicmFuY2hlczoKKyAgICAgICAgICAgIGJyYW5jaCA9IHNlbGYucHJpb3JpdGl6
ZV9icmFuY2hlcyhicmFuY2hlcykKKworICAgICAgICBlbHNlOgorICAgICAgICAgICAgIyBBIGNv
bW1pdCBub3Qgb24gYW55IGJyYW5jaGVzIGNhbm5vdCBoYXZlIGFuIGlkZW50aWZpZXIKKyAgICAg
ICAgICAgIGlkZW50aWZpZXIgPSBOb25lCisgICAgICAgICAgICBicmFuY2ggPSBOb25lCisKKyAg
ICAgICAgYnJhbmNoX3BvaW50ID0gTm9uZQorICAgICAgICBpZiBicmFuY2ggYW5kIGJyYW5jaCA9
PSBzZWxmLmRlZmF1bHRfYnJhbmNoOgorICAgICAgICAgICAgaWYgbm90IGlkZW50aWZpZXI6Cisg
ICAgICAgICAgICAgICAgcmVzdWx0ID0gc2VsZi5fY291bnQocmVmPWNvbW1pdF9kYXRhWydzaGEn
XSkKKyAgICAgICAgICAgICAgICBpZiBub3QgcmVzdWx0OgorICAgICAgICAgICAgICAgICAgICBy
YWlzZSBFeGNlcHRpb24oJ3t9IHt9Jy5mb3JtYXQocmVzdWx0LCBjb21taXRfZGF0YVsnc2hhJ10p
KQorICAgICAgICAgICAgICAgIGlkZW50aWZpZXIsIF8gPSByZXN1bHQKKworICAgICAgICBlbGlm
IGJyYW5jaDoKKyAgICAgICAgICAgIGlmIG5vdCBpZGVudGlmaWVyOgorICAgICAgICAgICAgICAg
IGlkZW50aWZpZXIgPSBzZWxmLl9kaWZmZXJlbmNlKHNlbGYuZGVmYXVsdF9icmFuY2gsIGNvbW1p
dF9kYXRhWydzaGEnXSkKKyAgICAgICAgICAgIGJyYW5jaF9wb2ludCA9IHNlbGYuX2NvdW50KHJl
Zj1jb21taXRfZGF0YVsnc2hhJ10pWzBdIC0gaWRlbnRpZmllcgorCisgICAgICAgIG1hdGNoID0g
c2VsZi5HSVRfU1ZOX1JFVklTSU9OLnNlYXJjaChjb21taXRfZGF0YVsnY29tbWl0J11bJ21lc3Nh
Z2UnXSkKKyAgICAgICAgcmV2aXNpb24gPSBpbnQobWF0Y2guZ3JvdXAoJ3JldmlzaW9uJykpIGlm
IG1hdGNoIGVsc2UgTm9uZQorCisgICAgICAgIGRhdGUgPSBkYXRldGltZS5zdHJwdGltZShjb21t
aXRfZGF0YVsnY29tbWl0J11bJ2NvbW1pdHRlciddWydkYXRlJ10sICclWS0lbS0lZFQlSDolTTol
U1onKQorICAgICAgICBlbWFpbF9tYXRjaCA9IHNlbGYuRU1BSUxfUkUubWF0Y2goY29tbWl0X2Rh
dGFbJ2NvbW1pdCddWydhdXRob3InXVsnZW1haWwnXSkKKworICAgICAgICByZXR1cm4gQ29tbWl0
KAorICAgICAgICAgICAgaGFzaD1jb21taXRfZGF0YVsnc2hhJ10sCisgICAgICAgICAgICByZXZp
c2lvbj1yZXZpc2lvbiwKKyAgICAgICAgICAgIGJyYW5jaF9wb2ludD1icmFuY2hfcG9pbnQsCisg
ICAgICAgICAgICBpZGVudGlmaWVyPWlkZW50aWZpZXIsCisgICAgICAgICAgICBicmFuY2g9YnJh
bmNoLAorICAgICAgICAgICAgdGltZXN0YW1wPWludChjYWxlbmRhci50aW1lZ20oZGF0ZS50aW1l
dHVwbGUoKSkpLAorICAgICAgICAgICAgYXV0aG9yPXNlbGYuY29udHJpYnV0b3JzLmNyZWF0ZSgK
KyAgICAgICAgICAgICAgICBjb21taXRfZGF0YVsnY29tbWl0J11bJ2F1dGhvciddWyduYW1lJ10s
CisgICAgICAgICAgICAgICAgZW1haWxfbWF0Y2guZ3JvdXAoJ2VtYWlsJykgaWYgZW1haWxfbWF0
Y2ggZWxzZSBOb25lLAorICAgICAgICAgICAgKSwgbWVzc2FnZT1jb21taXRfZGF0YVsnY29tbWl0
J11bJ21lc3NhZ2UnXSBpZiBpbmNsdWRlX2xvZyBlbHNlIE5vbmUsCisgICAgICAgICkKKworICAg
IGRlZiBmaW5kKHNlbGYsIGFyZ3VtZW50LCBpbmNsdWRlX2xvZz1UcnVlKToKKyAgICAgICAgaWYg
bm90IGlzaW5zdGFuY2UoYXJndW1lbnQsIHNpeC5zdHJpbmdfdHlwZXMpOgorICAgICAgICAgICAg
cmFpc2UgVmFsdWVFcnJvcigiRXhwZWN0ZWQgJ2FyZ3VtZW50JyB0byBiZSBhIHN0cmluZywgbm90
ICd7fSciLmZvcm1hdCh0eXBlKGFyZ3VtZW50KSkpCisKKyAgICAgICAgcGFyc2VkX2NvbW1pdCA9
IENvbW1pdC5wYXJzZShhcmd1bWVudCwgZG9fYXNzZXJ0PUZhbHNlKQorICAgICAgICBpZiBwYXJz
ZWRfY29tbWl0OgorICAgICAgICAgICAgcmV0dXJuIHNlbGYuY29tbWl0KAorICAgICAgICAgICAg
ICAgIGhhc2g9cGFyc2VkX2NvbW1pdC5oYXNoLAorICAgICAgICAgICAgICAgIHJldmlzaW9uPXBh
cnNlZF9jb21taXQucmV2aXNpb24sCisgICAgICAgICAgICAgICAgaWRlbnRpZmllcj1wYXJzZWRf
Y29tbWl0LmlkZW50aWZpZXIsCisgICAgICAgICAgICAgICAgYnJhbmNoPXBhcnNlZF9jb21taXQu
YnJhbmNoLAorICAgICAgICAgICAgICAgIGluY2x1ZGVfbG9nPWluY2x1ZGVfbG9nLAorICAgICAg
ICAgICAgKQorCisgICAgICAgIGNvbW1pdF9kYXRhID0gc2VsZi5yZXF1ZXN0KCdjb21taXRzL3t9
Jy5mb3JtYXQoYXJndW1lbnQpKQorICAgICAgICBpZiBub3QgY29tbWl0X2RhdGE6CisgICAgICAg
ICAgICByYWlzZSBWYWx1ZUVycm9yKCIne30nIGlzIG5vdCBhbiBhcmd1bWVudCByZWNvZ25pemVk
IGJ5IGdpdCIuZm9ybWF0KGFyZ3VtZW50KSkKKyAgICAgICAgcmV0dXJuIHNlbGYuY29tbWl0KGhh
c2g9Y29tbWl0X2RhdGFbJ3NoYSddLCBpbmNsdWRlX2xvZz1pbmNsdWRlX2xvZykKSW5kZXg6IFRv
b2xzL1NjcmlwdHMvbGlicmFyaWVzL3dlYmtpdHNjbXB5L3dlYmtpdHNjbXB5L3JlbW90ZS9zY20u
cHkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gVG9vbHMvU2NyaXB0cy9saWJyYXJpZXMvd2Via2l0c2NtcHkvd2Vi
a2l0c2NtcHkvcmVtb3RlL3NjbS5weQkocmV2aXNpb24gMjcwNzY5KQorKysgVG9vbHMvU2NyaXB0
cy9saWJyYXJpZXMvd2Via2l0c2NtcHkvd2Via2l0c2NtcHkvcmVtb3RlL3NjbS5weQkod29ya2lu
ZyBjb3B5KQpAQCAtMzIsNiArMzIsOCBAQCBjbGFzcyBTY20oU2NtQmFzZSk6CiAKICAgICAgICAg
aWYgcmVtb3RlLlN2bi5pc193ZWJzZXJ2ZXIodXJsKToKICAgICAgICAgICAgIHJldHVybiByZW1v
dGUuU3ZuKHVybCwgY29udHJpYnV0b3JzPWNvbnRyaWJ1dG9ycykKKyAgICAgICAgaWYgcmVtb3Rl
LkdpdEh1Yi5pc193ZWJzZXJ2ZXIodXJsKToKKyAgICAgICAgICAgIHJldHVybiByZW1vdGUuR2l0
SHViKHVybCwgY29udHJpYnV0b3JzPWNvbnRyaWJ1dG9ycykKICAgICAgICAgcmFpc2UgT1NFcnJv
cigiJ3t9JyBpcyBub3QgYSBrbm93biBTQ00gc2VydmVyIi5mb3JtYXQodXJsKSkKIAogICAgIGRl
ZiBfX2luaXRfXyhzZWxmLCB1cmwsIGRldl9icmFuY2hlcz1Ob25lLCBwcm9kX2JyYW5jaGVzPU5v
bmUsIGNvbnRyaWJ1dG9ycz1Ob25lKToKSW5kZXg6IFRvb2xzL1NjcmlwdHMvbGlicmFyaWVzL3dl
YmtpdHNjbXB5L3dlYmtpdHNjbXB5L3Rlc3QvZ2l0X3VuaXR0ZXN0LnB5Cj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFRvb2xzL1NjcmlwdHMvbGlicmFyaWVzL3dlYmtpdHNjbXB5L3dlYmtpdHNjbXB5L3Rlc3QvZ2l0
X3VuaXR0ZXN0LnB5CShyZXZpc2lvbiAyNzA3NjkpCisrKyBUb29scy9TY3JpcHRzL2xpYnJhcmll
cy93ZWJraXRzY21weS93ZWJraXRzY21weS90ZXN0L2dpdF91bml0dGVzdC5weQkod29ya2luZyBj
b3B5KQpAQCAtMjYsNyArMjYsNyBAQCBpbXBvcnQgdW5pdHRlc3QKIGZyb20gZGF0ZXRpbWUgaW1w
b3J0IGRhdGV0aW1lCiBmcm9tIHdlYmtpdGNvcmVweSBpbXBvcnQgTG9nZ2VyQ2FwdHVyZQogZnJv
bSB3ZWJraXRjb3JlcHkubW9ja3MgaW1wb3J0IFRpbWUgYXMgTW9ja1RpbWUKLWZyb20gd2Via2l0
c2NtcHkgaW1wb3J0IGxvY2FsLCBtb2NrcworZnJvbSB3ZWJraXRzY21weSBpbXBvcnQgbG9jYWws
IG1vY2tzLCByZW1vdGUKIAogCiBjbGFzcyBUZXN0R2l0KHVuaXR0ZXN0LlRlc3RDYXNlKToKQEAg
LTI1MCwzICsyNTAsMTA2IEBAIGNsYXNzIFRlc3RHaXQodW5pdHRlc3QuVGVzdENhc2UpOgogICAg
ICAgICBmb3IgbW9jayBpbiBbbW9ja3MubG9jYWwuR2l0KHNlbGYucGF0aCksIG1vY2tzLmxvY2Fs
LkdpdChzZWxmLnBhdGgsIGdpdF9zdm49VHJ1ZSldOgogICAgICAgICAgICAgd2l0aCBtb2NrOgog
ICAgICAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXNOb25lKGxvY2FsLkdpdChzZWxmLnBhdGgpLmNv
bW1pdChpZGVudGlmaWVyPSc0QG1haW4nLCBpbmNsdWRlX2xvZz1GYWxzZSkubWVzc2FnZSkKKwor
CitjbGFzcyBUZXN0R2l0SHViKHVuaXR0ZXN0LlRlc3RDYXNlKToKKyAgICByZW1vdGUgPSAnaHR0
cHM6Ly9naXRodWIuZXhhbXBsZS5jb20vV2ViS2l0L3dlYmtpdCcKKworICAgIGRlZiB0ZXN0X2Rl
dGVjdGlvbihzZWxmKToKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChyZW1vdGUuR2l0SHViLmlz
X3dlYnNlcnZlcignaHR0cHM6Ly9naXRodWIuZXhhbXBsZS5jb20vV2ViS2l0L3dlYmtpdCcpLCBU
cnVlKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlbW90ZS5HaXRIdWIuaXNfd2Vic2VydmVy
KCdodHRwOi8vZ2l0aHViLmV4YW1wbGUuY29tL1dlYktpdC93ZWJraXQnKSwgVHJ1ZSkKKyAgICAg
ICAgc2VsZi5hc3NlcnRFcXVhbChyZW1vdGUuR2l0SHViLmlzX3dlYnNlcnZlcignaHR0cHM6Ly9z
dm4uZXhhbXBsZS5vcmcvcmVwb3NpdG9yeS93ZWJraXQnKSwgRmFsc2UpCisKKyAgICBkZWYgdGVz
dF9icmFuY2hlcyhzZWxmKToKKyAgICAgICAgd2l0aCBtb2Nrcy5yZW1vdGUuR2l0SHViKCk6Cisg
ICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKAorICAgICAgICAgICAgICAgIHJlbW90ZS5HaXRI
dWIoc2VsZi5yZW1vdGUpLmJyYW5jaGVzLAorICAgICAgICAgICAgICAgIFsnYnJhbmNoLWEnLCAn
YnJhbmNoLWInLCAnbWFpbiddLAorICAgICAgICAgICAgKQorCisgICAgZGVmIHRlc3RfdGFncyhz
ZWxmKToKKyAgICAgICAgd2l0aCBtb2Nrcy5yZW1vdGUuR2l0SHViKCkgYXMgbW9jazoKKyAgICAg
ICAgICAgIG1vY2sudGFnc1sndGFnLTEnXSA9IG1vY2suY29tbWl0c1snYnJhbmNoLWEnXVstMV0K
KyAgICAgICAgICAgIG1vY2sudGFnc1sndGFnLTInXSA9IG1vY2suY29tbWl0c1snYnJhbmNoLWIn
XVstMV0KKworICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKKyAgICAgICAgICAgICAgICBy
ZW1vdGUuR2l0SHViKHNlbGYucmVtb3RlKS50YWdzLAorICAgICAgICAgICAgICAgIFsndGFnLTEn
LCAndGFnLTInXSwKKyAgICAgICAgICAgICkKKworICAgIGRlZiB0ZXN0X3NjbV90eXBlKHNlbGYp
OgorICAgICAgICBzZWxmLmFzc2VydEZhbHNlKHJlbW90ZS5HaXRIdWIoc2VsZi5yZW1vdGUpLmlz
X3N2bikKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHJlbW90ZS5HaXRIdWIoc2VsZi5yZW1vdGUp
LmlzX2dpdCkKKworICAgIGRlZiB0ZXN0X2NvbW1pdF9yZXZpc2lvbihzZWxmKToKKyAgICAgICAg
d2l0aCBtb2Nrcy5yZW1vdGUuR2l0SHViKCk6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFs
KCcxQG1haW4nLCBzdHIocmVtb3RlLkdpdEh1YihzZWxmLnJlbW90ZSkuY29tbWl0KGhhc2g9Jzli
ODMxMWYyJykpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgnMkBtYWluJywgc3RyKHJl
bW90ZS5HaXRIdWIoc2VsZi5yZW1vdGUpLmNvbW1pdChoYXNoPSdmZmY4M2JiMicpKSkKKyAgICAg
ICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJzIuMUBicmFuY2gtYScsIHN0cihyZW1vdGUuR2l0SHVi
KHNlbGYucmVtb3RlKS5jb21taXQoaGFzaD0nYTMwY2U4NDknKSkpCisgICAgICAgICAgICBzZWxm
LmFzc2VydEVxdWFsKCczQG1haW4nLCBzdHIocmVtb3RlLkdpdEh1YihzZWxmLnJlbW90ZSkuY29t
bWl0KGhhc2g9JzFhYmUyNWI0JykpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgnMi4y
QGJyYW5jaC1iJywgc3RyKHJlbW90ZS5HaXRIdWIoc2VsZi5yZW1vdGUpLmNvbW1pdChoYXNoPScz
Y2QzMmUzNScpKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJzRAbWFpbicsIHN0cihy
ZW1vdGUuR2l0SHViKHNlbGYucmVtb3RlKS5jb21taXQoaGFzaD0nYmFlNWQxZTknKSkpCisgICAg
ICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCcyLjJAYnJhbmNoLWEnLCBzdHIocmVtb3RlLkdpdEh1
YihzZWxmLnJlbW90ZSkuY29tbWl0KGhhc2g9JzYyMTY1MmFkJykpKQorICAgICAgICAgICAgc2Vs
Zi5hc3NlcnRFcXVhbCgnMi4zQGJyYW5jaC1iJywgc3RyKHJlbW90ZS5HaXRIdWIoc2VsZi5yZW1v
dGUpLmNvbW1pdChoYXNoPSc3OTA3MjVhNicpKSkKKworICAgIGRlZiB0ZXN0X2NvbW1pdF9mcm9t
X2JyYW5jaChzZWxmKToKKyAgICAgICAgd2l0aCBtb2Nrcy5yZW1vdGUuR2l0SHViKCk6CisgICAg
ICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCc0QG1haW4nLCBzdHIocmVtb3RlLkdpdEh1YihzZWxm
LnJlbW90ZSkuY29tbWl0KGJyYW5jaD0nbWFpbicpKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0
RXF1YWwoJzIuMkBicmFuY2gtYScsIHN0cihyZW1vdGUuR2l0SHViKHNlbGYucmVtb3RlKS5jb21t
aXQoYnJhbmNoPSdicmFuY2gtYScpKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJzIu
M0BicmFuY2gtYicsIHN0cihyZW1vdGUuR2l0SHViKHNlbGYucmVtb3RlKS5jb21taXQoYnJhbmNo
PSdicmFuY2gtYicpKSkKKworICAgIGRlZiB0ZXN0X2lkZW50aWZpZXIoc2VsZik6CisgICAgICAg
IHdpdGggbW9ja3MucmVtb3RlLkdpdEh1YigpOgorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVh
bCgKKyAgICAgICAgICAgICAgICAnOWI4MzExZjI1YTc3YmExNDkyM2Q5ZDVhNjUzMjEwM2Y1NGFi
ZWZjYicsCisgICAgICAgICAgICAgICAgcmVtb3RlLkdpdEh1YihzZWxmLnJlbW90ZSkuY29tbWl0
KGlkZW50aWZpZXI9JzFAbWFpbicpLmhhc2gsCisgICAgICAgICAgICApCisgICAgICAgICAgICBz
ZWxmLmFzc2VydEVxdWFsKAorICAgICAgICAgICAgICAgICdmZmY4M2JiMmQ5MTcxYjRkOTE5NmU5
NzdlYjA1MDhmZDU3ZTdhMDhkJywKKyAgICAgICAgICAgICAgICByZW1vdGUuR2l0SHViKHNlbGYu
cmVtb3RlKS5jb21taXQoaWRlbnRpZmllcj0nMkBtYWluJykuaGFzaCwKKyAgICAgICAgICAgICkK
KyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCisgICAgICAgICAgICAgICAgJ2EzMGNlODQ5
NGJmMWFjMjgwN2E2OTg0NGY3MjZiZTRhOTg0M2NhNTUnLAorICAgICAgICAgICAgICAgIHJlbW90
ZS5HaXRIdWIoc2VsZi5yZW1vdGUpLmNvbW1pdChpZGVudGlmaWVyPScyLjFAYnJhbmNoLWEnKS5o
YXNoLAorICAgICAgICAgICAgKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKKyAgICAg
ICAgICAgICAgICAnMWFiZTI1YjQ0M2U5ODVmOTNiOTBkODMwZTRhN2UzNzMxMzM2YWY0ZCcsCisg
ICAgICAgICAgICAgICAgcmVtb3RlLkdpdEh1YihzZWxmLnJlbW90ZSkuY29tbWl0KGlkZW50aWZp
ZXI9JzNAbWFpbicpLmhhc2gsCisgICAgICAgICAgICApCisgICAgICAgICAgICBzZWxmLmFzc2Vy
dEVxdWFsKAorICAgICAgICAgICAgICAgICczY2QzMmUzNTI0MTA1NjViYjU0MzgyMWZiZjg1NmE2
ZDNjYWFkMWM0JywKKyAgICAgICAgICAgICAgICByZW1vdGUuR2l0SHViKHNlbGYucmVtb3RlKS5j
b21taXQoaWRlbnRpZmllcj0nMi4yQGJyYW5jaC1iJykuaGFzaCwKKyAgICAgICAgICAgICkKKyAg
ICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCisgICAgICAgICAgICAgICAgJ2JhZTVkMWU5MDk5
OWQ0ZjkxNmE4YTE1ODEwY2NmYTQzZjM3YTJmZDYnLAorICAgICAgICAgICAgICAgIHJlbW90ZS5H
aXRIdWIoc2VsZi5yZW1vdGUpLmNvbW1pdChpZGVudGlmaWVyPSc0QG1haW4nKS5oYXNoLAorICAg
ICAgICAgICAgKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgKKyAgICAgICAgICAgICAg
ICAnNjIxNjUyYWRkN2ZjNDE2MDk5YmQyMDYzMzY2Y2MzOGZmNjFhZmUzNicsCisgICAgICAgICAg
ICAgICAgcmVtb3RlLkdpdEh1YihzZWxmLnJlbW90ZSkuY29tbWl0KGlkZW50aWZpZXI9JzIuMkBi
cmFuY2gtYScpLmhhc2gsCisgICAgICAgICAgICApCisgICAgICAgICAgICBzZWxmLmFzc2VydEVx
dWFsKAorICAgICAgICAgICAgICAgICc3OTA3MjVhNmQ3OWUyOGRiMmVjZGRlMjk1NDhkMjI2MmMw
YmQwNTlkJywKKyAgICAgICAgICAgICAgICByZW1vdGUuR2l0SHViKHNlbGYucmVtb3RlKS5jb21t
aXQoaWRlbnRpZmllcj0nMi4zQGJyYW5jaC1iJykuaGFzaCwKKyAgICAgICAgICAgICkKKworICAg
IGRlZiB0ZXN0X25vbl9jYW5ub25pY2FsX2lkZW50aWZpZXJzKHNlbGYpOgorICAgICAgICB3aXRo
IG1vY2tzLnJlbW90ZS5HaXRIdWIoKToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJzJA
bWFpbicsIHN0cihyZW1vdGUuR2l0SHViKHNlbGYucmVtb3RlKS5jb21taXQoaWRlbnRpZmllcj0n
MEBicmFuY2gtYScpKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJzFAbWFpbicsIHN0
cihyZW1vdGUuR2l0SHViKHNlbGYucmVtb3RlKS5jb21taXQoaWRlbnRpZmllcj0nLTFAYnJhbmNo
LWEnKSkpCisKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJzJAbWFpbicsIHN0cihyZW1v
dGUuR2l0SHViKHNlbGYucmVtb3RlKS5jb21taXQoaWRlbnRpZmllcj0nMEBicmFuY2gtYicpKSkK
KyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJzFAbWFpbicsIHN0cihyZW1vdGUuR2l0SHVi
KHNlbGYucmVtb3RlKS5jb21taXQoaWRlbnRpZmllcj0nLTFAYnJhbmNoLWInKSkpCisKKyAgICBk
ZWYgdGVzdF90YWcoc2VsZik6CisgICAgICAgIHdpdGggbW9ja3MucmVtb3RlLkdpdEh1YigpIGFz
IG1vY2s6CisgICAgICAgICAgICBtb2NrLnRhZ3NbJ3RhZy0xJ10gPSBtb2NrLmNvbW1pdHNbJ2Jy
YW5jaC1hJ11bLTFdCisKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCisgICAgICAgICAg
ICAgICAgJzYyMTY1MmFkZDdmYzQxNjA5OWJkMjA2MzM2NmNjMzhmZjYxYWZlMzYnLAorICAgICAg
ICAgICAgICAgIHJlbW90ZS5HaXRIdWIoc2VsZi5yZW1vdGUpLmNvbW1pdCh0YWc9J3RhZy0xJyku
aGFzaCwKKyAgICAgICAgICAgICkKKworICAgIGRlZiB0ZXN0X25vX2xvZyhzZWxmKToKKyAgICAg
ICAgd2l0aCBtb2Nrcy5yZW1vdGUuR2l0SHViKCk6CisgICAgICAgICAgICBzZWxmLmFzc2VydElz
Tm9uZShyZW1vdGUuR2l0SHViKHNlbGYucmVtb3RlKS5jb21taXQoaWRlbnRpZmllcj0nNEBtYWlu
JywgaW5jbHVkZV9sb2c9RmFsc2UpLm1lc3NhZ2UpCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>416297</attachid>
            <date>2020-12-15 15:01:24 -0800</date>
            <delta_ts>2020-12-15 15:35:05 -0800</delta_ts>
            <desc>Patch for landing</desc>
            <filename>bug-219602-20201215170123.patch</filename>
            <type>text/plain</type>
            <size>37281</size>
            <attacher name="Jonathan Bedard">jbedard</attacher>
            
              <data encoding="base64">SW5kZXg6IFRvb2xzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9DaGFuZ2VMb2cJKHJl
dmlzaW9uIDI3MDg2MSkKKysrIFRvb2xzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwz
ICsxLDYyIEBACisyMDIwLTEyLTE1ICBKb25hdGhhbiBCZWRhcmQgIDxqYmVkYXJkQGFwcGxlLmNv
bT4KKworICAgICAgICBbd2Via2l0c2NtcHldIFN1cHBvcnQgcmVtb3RlIEdpdEh1YiByZXBvc2l0
b3J5CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMTk2
MDIKKyAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzcyMDUwMDI2PgorCisgICAgICAgIFJldmlld2Vk
IGJ5IFN0ZXBoYW5pZSBMZXdpcy4KKworICAgICAgICBTZXJ2aWNlcyBvZnRlbiBuZWVkIHRvIGlu
dGVyYWN0IHdpdGggdGhlIFdlYktpdCByZXBvc2l0b3J5IHdpdGhvdXQgYWN0dWFsbHkgZG93bmxv
YWRpbmcgdGhlCisgICAgICAgIHJlcG9zaXRvcnkuIEluIHBhcnRpY3VsYXIsIGl0IGlzIHVzZWZ1
bCB0byBiZSBhYmxlIHRvIHJldHJpZXZlIGNvbW1pdHMgYW5kIHRoZWlyIGlkZW50aWZpZXJzLgor
CisgICAgICAgICogU2NyaXB0cy9saWJyYXJpZXMvd2Via2l0c2NtcHkvd2Via2l0c2NtcHkvX19p
bml0X18ucHk6IEJ1bXAgdmVyc2lvbi4KKyAgICAgICAgKiBTY3JpcHRzL2xpYnJhcmllcy93ZWJr
aXRzY21weS93ZWJraXRzY21weS9sb2NhbC9naXQucHk6CisgICAgICAgIChHaXQpOiBNb3ZlIEdJ
VF9TVk5fUkVWSVNJT04gcmVnZXggdG8gYmFzZSBjbGFzcy4KKyAgICAgICAgKiBTY3JpcHRzL2xp
YnJhcmllcy93ZWJraXRzY21weS93ZWJraXRzY21weS9tb2Nrcy9yZW1vdGUvX19pbml0X18ucHk6
IEFkZCBHaXRIdWIgY2xhc3MuCisgICAgICAgICogU2NyaXB0cy9saWJyYXJpZXMvd2Via2l0c2Nt
cHkvd2Via2l0c2NtcHkvbW9ja3MvcmVtb3RlL2dpdF9odWIucHk6IEFkZGVkLgorICAgICAgICAo
R2l0SHViKTogTW9jayByZXF1ZXN0IHJvdXRlciBmb3IgYSBsaW1pdGVkIHN1YnNldCBvZiBHaXRI
dWIncyBBUEkuCisgICAgICAgIChHaXRIdWIuX19pbml0X18pOgorICAgICAgICAoR2l0SHViLmNv
bW1pdCk6IFJldHVybiBhIGNvbW1pdCBvYmplY3QgZ2l2ZW4gYSByZWZlcmVuY2UuCisgICAgICAg
IChHaXRIdWIuX2FwaV9yZXNwb25zZSk6CisgICAgICAgIChHaXRIdWIuX2xpc3RfcmVmc19yZXNw
b25zZSk6CisgICAgICAgIChHaXRIdWIuX2NvbW1pdF9yZXNwb25zZSk6CisgICAgICAgIChHaXRI
dWIuX2NvbXBhcmVfcmVzcG9uc2UpOgorICAgICAgICAoR2l0SHViLl9icmFuY2hlc19mb3JfcmVx
dWVzdCk6CisgICAgICAgIChHaXRIdWIuX3BhcmVudHNfb2ZfcmVxdWVzdCk6CisgICAgICAgIChH
aXRIdWIucmVxdWVzdCk6IFJldHVybiBhIHJlc3BvbnNlIG9iamVjdCBmb3IgdGhlIHNwZWNpZmll
ZCByZXF1ZXN0LgorICAgICAgICAqIFNjcmlwdHMvbGlicmFyaWVzL3dlYmtpdHNjbXB5L3dlYmtp
dHNjbXB5L3JlbW90ZS9fX2luaXRfXy5weTogQWRkIEdpdEh1YiBjbGFzcy4KKyAgICAgICAgKiBT
Y3JpcHRzL2xpYnJhcmllcy93ZWJraXRzY21weS93ZWJraXRzY21weS9yZW1vdGUvZ2l0X2h1Yi5w
eTogQWRkZWQuCisgICAgICAgIChHaXRIdWIpOiBSZXBvc2l0b3J5IG9iamVjdCByZXByZXNlbnRp
bmcgYSBHaXRIdWIgcmVtb3RlLgorICAgICAgICAoR2l0SHViLmlzX3dlYnNlcnZlcik6IFRydWUg
aWYgdGhlIHByb3ZpZGVkIFVSTCBpcyBhIEdpdEh1YiB3ZWJzZXJ2ZXIuCisgICAgICAgIChHaXRI
dWIuX19pbml0X18pOiBWZXJpZnkgdGhlIHByb3ZpZGVkIFVSTCBhbmQgc3BsaXQgaXQgaW50byBp
dCdzIGNvbXBvc2l0ZSBwYXJ0cy4KKyAgICAgICAgKEdpdEh1Yi5pc19naXQpOiBSZXR1cm4gVHJ1
ZS4KKyAgICAgICAgKEdpdEh1Yi5yZXF1ZXN0KTogTWFrZSBhbiBBUEkgcmVxdWVzdCwgY29tYmlu
aW5nIHBhZ2luYXRpb24gaW50byBhIHNpbmdsZSByZXF1ZXN0LgorICAgICAgICAoR2l0SHViLl9j
b3VudF9mb3JfcmVmKTogU2NyYXBlIHRoZSBHaXRIdWIgVUkgdG8gZmluZCB0aGUgbnVtYmVyIG9m
IHBhcmVudCBjb21taXRzIGZvciBhIHNwZWNpZmllZAorICAgICAgICBicmFuY2ggb3IgY29tbWl0
LgorICAgICAgICAoR2l0SHViLl9kaWZmZXJlbmNlKTogQ29tcHV0ZSB0aGUgbnVtYmVyIG9mIGNv
bW1pdHMgYSBzcGVjaWZpZWQgcmVmZXJlbmNlIGlzIGFoZWFkIG9mIGFub3RoZXIuCisgICAgICAg
IChHaXRIdWIuX2JyYW5jaGVzX2Zvcik6IFNjcmFwZSB0aGUgR2l0SHViIFVJIHRvIGRldGVybWlu
ZSB3aGF0IGJyYW5jaGVzIGEgY29tbWl0IGlzIG9uLgorICAgICAgICAoR2l0SHViLmRlZmF1bHRf
YnJhbmNoKTogUXVlcnkgR2l0SHViIHRvIGRldGVybWluZSB0aGUgZGVmYXVsdCBicmFuY2ggZm9y
IGEgc3BlY2lmaWVkIGNvbW1pdC4KKyAgICAgICAgKEdpdEh1Yi5icmFuY2hlcyk6IFJldHVybiBh
bGwgYnJhbmNoZXMgZm9yIGEgcmVwb3NpdG9yeS4KKyAgICAgICAgKEdpdEh1Yi50YWdzKTogUmV0
dXJuIGFsbCB0YWdzIGZvciBhIHJlcG9zaXRvcnkuCisgICAgICAgIChHaXRIdWIuY29tbWl0KTog
UmV0dXJuIGEgY29tbWl0IG9iamVjdCBnaXZlbiBhIHJldmlzaW9uLCBicmFuY2gsIGlkZW50aWZp
ZXIgb3IgdGFnLgorICAgICAgICAoR2l0SHViLmZpbmQpOiBVc2UgZ2l0IHRvIG1hdGNoIGJyYW5j
aGVzIGFuZCB0YWdzIHRvIGEgaGFzaCBpbnN0ZWFkIG9mIHRyeWluZyB0byBkbyBpdCBvdXJzZWx2
ZXMuCisgICAgICAgICogU2NyaXB0cy9saWJyYXJpZXMvd2Via2l0c2NtcHkvd2Via2l0c2NtcHkv
cmVtb3RlL3NjbS5weToKKyAgICAgICAgKFNjbS5mcm9tX3VybCk6IEFkZCBHaXRIdWIgdG8gdGhl
IHNldCBvZiBjYW5kaWRhdGUgcmVtb3RlIHJlcG9zaXRvcmllcy4KKyAgICAgICAgKiBTY3JpcHRz
L2xpYnJhcmllcy93ZWJraXRzY21weS93ZWJraXRzY21weS9zY21fYmFzZS5weToKKyAgICAgICAg
KFNjbUJhc2UpOiBNb3ZlIEdJVF9TVk5fUkVWSVNJT04gcmVnZXggdG8gYmFzZSBjbGFzcy4KKyAg
ICAgICAgKiBTY3JpcHRzL2xpYnJhcmllcy93ZWJraXRzY21weS93ZWJraXRzY21weS90ZXN0L2dp
dF91bml0dGVzdC5weToKKyAgICAgICAgKFRlc3RHaXRIdWIpOgorICAgICAgICAoVGVzdEdpdEh1
Yi50ZXN0X2RldGVjdGlvbik6CisgICAgICAgIChUZXN0R2l0SHViLnRlc3RfYnJhbmNoZXMpOgor
ICAgICAgICAoVGVzdEdpdEh1Yi50ZXN0X3RhZ3MpOgorICAgICAgICAoVGVzdEdpdEh1Yi50ZXN0
X3NjbV90eXBlKToKKyAgICAgICAgKFRlc3RHaXRIdWIudGVzdF9jb21taXRfcmV2aXNpb24pOgor
ICAgICAgICAoVGVzdEdpdEh1Yi50ZXN0X2NvbW1pdF9mcm9tX2JyYW5jaCk6CisgICAgICAgIChU
ZXN0R2l0SHViLnRlc3RfaWRlbnRpZmllcik6CisgICAgICAgIChUZXN0R2l0SHViLnRlc3Rfbm9u
X2Nhbm5vbmljYWxfaWRlbnRpZmllcnMpOgorICAgICAgICAoVGVzdEdpdEh1Yi50ZXN0X3RhZyk6
CisgICAgICAgIChUZXN0R2l0SHViLnRlc3Rfbm9fbG9nKToKKwogMjAyMC0xMi0xNSAgSm9uYXRo
YW4gQmVkYXJkICA8amJlZGFyZEBhcHBsZS5jb20+CiAKICAgICAgICAgW3dlYmtpdHNjbXB5XSBT
YXZlIGNvbnRyaWJ1dG9ycyB0byBqc29uIGZpbGUKSW5kZXg6IFRvb2xzL1NjcmlwdHMvbGlicmFy
aWVzL3dlYmtpdHNjbXB5L3dlYmtpdHNjbXB5L19faW5pdF9fLnB5Cj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRv
b2xzL1NjcmlwdHMvbGlicmFyaWVzL3dlYmtpdHNjbXB5L3dlYmtpdHNjbXB5L19faW5pdF9fLnB5
CShyZXZpc2lvbiAyNzA4NjEpCisrKyBUb29scy9TY3JpcHRzL2xpYnJhcmllcy93ZWJraXRzY21w
eS93ZWJraXRzY21weS9fX2luaXRfXy5weQkod29ya2luZyBjb3B5KQpAQCAtNDYsNyArNDYsNyBA
QCBleGNlcHQgSW1wb3J0RXJyb3I6CiAgICAgICAgICJQbGVhc2UgaW5zdGFsbCB3ZWJraXRjb3Jl
cHkgd2l0aCBgcGlwIGluc3RhbGwgd2Via2l0Y29yZXB5IC0tZXh0cmEtaW5kZXgtdXJsIDxwYWNr
YWdlIGluZGV4IFVSTD5gIgogICAgICkKIAotdmVyc2lvbiA9IFZlcnNpb24oMCwgNSwgNSkKK3Zl
cnNpb24gPSBWZXJzaW9uKDAsIDYsIDApCiAKIEF1dG9JbnN0YWxsLnJlZ2lzdGVyKFBhY2thZ2Uo
J2Zhc3RlbmVycycsIFZlcnNpb24oMCwgMTUsIDApKSkKIEF1dG9JbnN0YWxsLnJlZ2lzdGVyKFBh
Y2thZ2UoJ21vbm90b25pYycsIFZlcnNpb24oMSwgNSkpKQpJbmRleDogVG9vbHMvU2NyaXB0cy9s
aWJyYXJpZXMvd2Via2l0c2NtcHkvd2Via2l0c2NtcHkvc2NtX2Jhc2UucHkKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gVG9vbHMvU2NyaXB0cy9saWJyYXJpZXMvd2Via2l0c2NtcHkvd2Via2l0c2NtcHkvc2NtX2Jh
c2UucHkJKHJldmlzaW9uIDI3MDg2MSkKKysrIFRvb2xzL1NjcmlwdHMvbGlicmFyaWVzL3dlYmtp
dHNjbXB5L3dlYmtpdHNjbXB5L3NjbV9iYXNlLnB5CSh3b3JraW5nIGNvcHkpCkBAIC0zNyw2ICsz
Nyw3IEBAIGNsYXNzIFNjbUJhc2Uob2JqZWN0KToKICAgICAjIHRoZSBmb2xsb3dpbmcgaWRpb21z
IHNlZW0gY29tbW9uIGVub3VnaCB0byBiZSBzaGFyZWQuCiAgICAgREVWX0JSQU5DSEVTID0gcmUu
Y29tcGlsZShyJy4qWyhlbmcpKGRldikoYnVnKV0vLisnKQogICAgIFBST0RfQlJBTkNIRVMgPSBy
ZS5jb21waWxlKHInXFMrLVtcZCtcLl0rLWJyYW5jaCcpCisgICAgR0lUX1NWTl9SRVZJU0lPTiA9
IHJlLmNvbXBpbGUocidnaXQtc3ZuLWlkOiBcUys6XC9cLy4rQCg/UDxyZXZpc2lvbj5cZCspIC4r
LS4rLS4rLS4rJykKIAogICAgIGRlZiBfX2luaXRfXyhzZWxmLCBkZXZfYnJhbmNoZXM9Tm9uZSwg
cHJvZF9icmFuY2hlcz1Ob25lLCBjb250cmlidXRvcnM9Tm9uZSk6CiAgICAgICAgIHNlbGYuZGV2
X2JyYW5jaGVzID0gZGV2X2JyYW5jaGVzIG9yIHNlbGYuREVWX0JSQU5DSEVTCkluZGV4OiBUb29s
cy9TY3JpcHRzL2xpYnJhcmllcy93ZWJraXRzY21weS93ZWJraXRzY21weS9sb2NhbC9naXQucHkK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gVG9vbHMvU2NyaXB0cy9saWJyYXJpZXMvd2Via2l0c2NtcHkvd2Via2l0
c2NtcHkvbG9jYWwvZ2l0LnB5CShyZXZpc2lvbiAyNzA4NjEpCisrKyBUb29scy9TY3JpcHRzL2xp
YnJhcmllcy93ZWJraXRzY21weS93ZWJraXRzY21weS9sb2NhbC9naXQucHkJKHdvcmtpbmcgY29w
eSkKQEAgLTMxLDcgKzMxLDYgQEAgZnJvbSB3ZWJraXRzY21weSBpbXBvcnQgQ29tbWl0LCBDb250
cmlidQogCiBjbGFzcyBHaXQoU2NtKToKICAgICBHSVRfQ09NTUlUID0gcmUuY29tcGlsZShyJ2Nv
bW1pdCAoP1A8aGFzaD5bMC05YS1mXSspJykKLSAgICBHSVRfU1ZOX1JFVklTSU9OID0gcmUuY29t
cGlsZShyJ2dpdC1zdm4taWQ6IFxTKzpcL1wvLitAKD9QPHJldmlzaW9uPlxkKykgListListList
LisnKQogCiAgICAgQGNsYXNzbWV0aG9kCiAgICAgQGRlY29yYXRvcnMuTWVtb2l6ZSgpCkluZGV4
OiBUb29scy9TY3JpcHRzL2xpYnJhcmllcy93ZWJraXRzY21weS93ZWJraXRzY21weS9tb2Nrcy9y
ZW1vdGUvX19pbml0X18ucHkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvU2NyaXB0cy9saWJyYXJpZXMv
d2Via2l0c2NtcHkvd2Via2l0c2NtcHkvbW9ja3MvcmVtb3RlL19faW5pdF9fLnB5CShyZXZpc2lv
biAyNzA4NjEpCisrKyBUb29scy9TY3JpcHRzL2xpYnJhcmllcy93ZWJraXRzY21weS93ZWJraXRz
Y21weS9tb2Nrcy9yZW1vdGUvX19pbml0X18ucHkJKHdvcmtpbmcgY29weSkKQEAgLTIwLDQgKzIw
LDUgQEAKICMgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKICMgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KIAorZnJvbSB3ZWJr
aXRzY21weS5tb2Nrcy5yZW1vdGUuZ2l0X2h1YiBpbXBvcnQgR2l0SHViCiBmcm9tIHdlYmtpdHNj
bXB5Lm1vY2tzLnJlbW90ZS5zdm4gaW1wb3J0IFN2bgpJbmRleDogVG9vbHMvU2NyaXB0cy9saWJy
YXJpZXMvd2Via2l0c2NtcHkvd2Via2l0c2NtcHkvbW9ja3MvcmVtb3RlL2dpdF9odWIucHkKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gVG9vbHMvU2NyaXB0cy9saWJyYXJpZXMvd2Via2l0c2NtcHkvd2Via2l0c2Nt
cHkvbW9ja3MvcmVtb3RlL2dpdF9odWIucHkJKG5vbmV4aXN0ZW50KQorKysgVG9vbHMvU2NyaXB0
cy9saWJyYXJpZXMvd2Via2l0c2NtcHkvd2Via2l0c2NtcHkvbW9ja3MvcmVtb3RlL2dpdF9odWIu
cHkJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwyNDAgQEAKKyMgQ29weXJpZ2h0IChDKSAyMDIw
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisjIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworIyBhcmUgbWV0OgorIyAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyMgMi4gIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisjICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisjICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorIworIyBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBB
TkQKKyMgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyMgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorIyBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUgorIyBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCisjIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SCisjIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSCisjIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCisjIE9SIFRPUlQgKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
CisjIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCisKK2ltcG9ydCBvcworaW1wb3J0IGpzb24KKworZnJvbSBkYXRldGlt
ZSBpbXBvcnQgZGF0ZXRpbWUKK2Zyb20gd2Via2l0Y29yZXB5IGltcG9ydCBtb2NrcworZnJvbSB3
ZWJraXRzY21weSBpbXBvcnQgQ29tbWl0LCByZW1vdGUgYXMgc2NtcmVtb3RlCisKKworY2xhc3Mg
R2l0SHViKG1vY2tzLlJlcXVlc3RzKToKKyAgICB0b3AgPSBOb25lCisKKyAgICBkZWYgX19pbml0
X18oCisgICAgICAgIHNlbGYsIHJlbW90ZT0nZ2l0aHViLmV4YW1wbGUuY29tL1dlYktpdC93ZWJr
aXQnLCBkYXRhZmlsZT1Ob25lLAorICAgICAgICBkZWZhdWx0X2JyYW5jaD0nbWFpbicsIGdpdF9z
dm49RmFsc2UsCisgICAgKToKKyAgICAgICAgaWYgbm90IHNjbXJlbW90ZS5HaXRIdWIuaXNfd2Vi
c2VydmVyKCdodHRwczovL3t9Jy5mb3JtYXQocmVtb3RlKSk6CisgICAgICAgICAgICByYWlzZSBW
YWx1ZUVycm9yKCcie30iIGlzIG5vdCBhIHZhbGlkIEdpdEh1YiByZW1vdGUnLmZvcm1hdChyZW1v
dGUpKQorCisgICAgICAgIHNlbGYuZGVmYXVsdF9icmFuY2ggPSBkZWZhdWx0X2JyYW5jaAorICAg
ICAgICBzZWxmLnJlbW90ZSA9IHJlbW90ZQorICAgICAgICBob3N0bmFtZSA9IHNlbGYucmVtb3Rl
LnNwbGl0KCcvJylbMF0KKyAgICAgICAgc2VsZi5hcGlfcmVtb3RlID0gJ2FwaS57aG9zdG5hbWV9
L3JlcG9zL3tyZXBvfScuZm9ybWF0KAorICAgICAgICAgICAgaG9zdG5hbWU9aG9zdG5hbWUsCisg
ICAgICAgICAgICByZXBvPScvJy5qb2luKHNlbGYucmVtb3RlLnNwbGl0KCcvJylbMTpdKSwKKyAg
ICAgICAgKQorCisgICAgICAgIHN1cGVyKEdpdEh1Yiwgc2VsZikuX19pbml0X18oaG9zdG5hbWUs
ICdhcGkue30nLmZvcm1hdChob3N0bmFtZSkpCisKKyAgICAgICAgd2l0aCBvcGVuKGRhdGFmaWxl
IG9yIG9zLnBhdGguam9pbihvcy5wYXRoLmRpcm5hbWUob3MucGF0aC5kaXJuYW1lKF9fZmlsZV9f
KSksICdnaXQtcmVwby5qc29uJykpIGFzIGZpbGU6CisgICAgICAgICAgICBzZWxmLmNvbW1pdHMg
PSBqc29uLmxvYWQoZmlsZSkKKyAgICAgICAgZm9yIGtleSwgY29tbWl0cyBpbiBzZWxmLmNvbW1p
dHMuaXRlbXMoKToKKyAgICAgICAgICAgIHNlbGYuY29tbWl0c1trZXldID0gW0NvbW1pdCgqKmt3
YXJncykgZm9yIGt3YXJncyBpbiBjb21taXRzXQorICAgICAgICAgICAgaWYgbm90IGdpdF9zdm46
CisgICAgICAgICAgICAgICAgZm9yIGNvbW1pdCBpbiBzZWxmLmNvbW1pdHNba2V5XToKKyAgICAg
ICAgICAgICAgICAgICAgY29tbWl0LnJldmlzaW9uID0gTm9uZQorCisgICAgICAgIHNlbGYuaGVh
ZCA9IHNlbGYuY29tbWl0c1tzZWxmLmRlZmF1bHRfYnJhbmNoXVstMV0KKyAgICAgICAgc2VsZi50
YWdzID0ge30KKworICAgIGRlZiBjb21taXQoc2VsZiwgcmVmKToKKyAgICAgICAgaWYgcmVmIGlu
IHNlbGYuY29tbWl0czoKKyAgICAgICAgICAgIHJldHVybiBzZWxmLmNvbW1pdHNbcmVmXVstMV0K
KyAgICAgICAgaWYgcmVmIGluIHNlbGYudGFnczoKKyAgICAgICAgICAgIHJldHVybiBzZWxmLnRh
Z3NbcmVmXQorCisgICAgICAgIGZvciBicmFuY2gsIGNvbW1pdHMgaW4gc2VsZi5jb21taXRzLml0
ZW1zKCk6CisgICAgICAgICAgICBmb3IgY29tbWl0IGluIGNvbW1pdHM6CisgICAgICAgICAgICAg
ICAgaWYgY29tbWl0Lmhhc2guc3RhcnRzd2l0aChyZWYpOgorICAgICAgICAgICAgICAgICAgICBy
ZXR1cm4gY29tbWl0CisKKyAgICAgICAgaWYgJ34nIG5vdCBpbiByZWY6CisgICAgICAgICAgICBy
ZXR1cm4gTm9uZQorICAgICAgICByZWYsIGRlbHRhID0gcmVmLnNwbGl0KCd+JykKKyAgICAgICAg
Y29tbWl0ID0gc2VsZi5jb21taXQocmVmKQorICAgICAgICBpZiBub3QgY29tbWl0OgorICAgICAg
ICAgICAgcmV0dXJuIE5vbmUKKyAgICAgICAgZGVsdGEgPSBpbnQoZGVsdGEpCisKKyAgICAgICAg
aWYgZGVsdGEgPCBjb21taXQuaWRlbnRpZmllcjoKKyAgICAgICAgICAgIHJldHVybiBzZWxmLmNv
bW1pdHNbY29tbWl0LmJyYW5jaF1bY29tbWl0LmlkZW50aWZpZXIgLSBkZWx0YSAtIDFdCisgICAg
ICAgIGRlbHRhIC09IGNvbW1pdC5pZGVudGlmaWVyCisgICAgICAgIGlmIGRlbHRhIDwgY29tbWl0
LmJyYW5jaF9wb2ludDoKKyAgICAgICAgICAgIHJldHVybiBzZWxmLmNvbW1pdHNbc2VsZi5kZWZh
dWx0X2JyYW5jaF1bY29tbWl0LmJyYW5jaF9wb2ludCAtIGRlbHRhIC0gMV0KKyAgICAgICAgcmV0
dXJuIE5vbmUKKworICAgIGRlZiBfYXBpX3Jlc3BvbnNlKHNlbGYsIHVybCk6CisgICAgICAgIHJl
dHVybiBtb2Nrcy5SZXNwb25zZS5mcm9tSnNvbih7CisgICAgICAgICAgICAnaWQnOiAxLAorICAg
ICAgICAgICAgJ25hbWUnOiBzZWxmLnJlbW90ZS5zcGxpdCgnLycpWzJdLAorICAgICAgICAgICAg
J3VybCc6IHVybCwKKyAgICAgICAgICAgICdkZWZhdWx0X2JyYW5jaCc6IHNlbGYuZGVmYXVsdF9i
cmFuY2gsCisgICAgICAgICAgICAnb3duZXInOiB7CisgICAgICAgICAgICAgICAgJ2xvZ2luJzog
c2VsZi5yZW1vdGUuc3BsaXQoJy8nKVsxXSwKKyAgICAgICAgICAgIH0sICdvcmdhbml6YXRpb24n
OiB7CisgICAgICAgICAgICAgICAgJ2xvZ2luJzogc2VsZi5yZW1vdGUuc3BsaXQoJy8nKVsxXSwK
KyAgICAgICAgICAgIH0sICdodG1sX3VybCc6IHNlbGYucmVtb3RlLAorICAgICAgICB9LCB1cmw9
dXJsKQorCisgICAgZGVmIF9saXN0X3JlZnNfcmVzcG9uc2Uoc2VsZiwgdXJsLCB0eXBlKToKKyAg
ICAgICAgcmV0dXJuIG1vY2tzLlJlc3BvbnNlLmZyb21Kc29uKFsKKyAgICAgICAgICAgIHsKKyAg
ICAgICAgICAgICAgICAnbmFtZSc6IHJlZmVyZW5jZSwKKyAgICAgICAgICAgICAgICAnY29tbWl0
JzogeworICAgICAgICAgICAgICAgICAgICAnc2hhJzogY29tbWl0Wy0xXS5oYXNoIGlmIGlzaW5z
dGFuY2UoY29tbWl0LCBsaXN0KSBlbHNlIGNvbW1pdC5oYXNoLAorICAgICAgICAgICAgICAgICAg
ICAndXJsJzogJ2h0dHBzOi8ve30vY29tbWl0cy97fScuZm9ybWF0KHNlbGYuYXBpX3JlbW90ZSwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBjb21taXRbLTFdLmhhc2ggaWYgaXNpbnN0YW5jZShjb21taXQsIGxpc3QpIGVsc2UgY29tbWl0
Lmhhc2gpLAorICAgICAgICAgICAgICAgIH0sCisgICAgICAgICAgICB9IGZvciByZWZlcmVuY2Us
IGNvbW1pdCBpbiAoc2VsZi5jb21taXRzIGlmIHR5cGUgPT0gJ2JyYW5jaGVzJyBlbHNlIHNlbGYu
dGFncykuaXRlbXMoKQorICAgICAgICBdLCB1cmw9dXJsKQorCisgICAgZGVmIF9jb21taXRfcmVz
cG9uc2Uoc2VsZiwgdXJsLCByZWYpOgorICAgICAgICBjb21taXQgPSBzZWxmLmNvbW1pdChyZWYp
CisgICAgICAgIGlmIG5vdCBjb21taXQ6CisgICAgICAgICAgICByZXR1cm4gbW9ja3MuUmVzcG9u
c2UoCisgICAgICAgICAgICAgICAgc3RhdHVzX2NvZGU9NDA0LAorICAgICAgICAgICAgICAgIHVy
bD11cmwsCisgICAgICAgICAgICAgICAgdGV4dD1qc29uLmR1bXBzKGRpY3QobWVzc2FnZT0nTm8g
Y29tbWl0IGZvdW5kIGZvciBTSEE6IHt9Jy5mb3JtYXQocmVmKSkpLAorICAgICAgICAgICAgKQor
ICAgICAgICByZXR1cm4gbW9ja3MuUmVzcG9uc2UuZnJvbUpzb24oeworICAgICAgICAgICAgJ3No
YSc6IGNvbW1pdC5oYXNoLAorICAgICAgICAgICAgJ2NvbW1pdCc6IHsKKyAgICAgICAgICAgICAg
ICAnYXV0aG9yJzogeworICAgICAgICAgICAgICAgICAgICAnbmFtZSc6IGNvbW1pdC5hdXRob3Iu
bmFtZSwKKyAgICAgICAgICAgICAgICAgICAgJ2VtYWlsJzogY29tbWl0LmF1dGhvci5lbWFpbCwK
KyAgICAgICAgICAgICAgICAgICAgJ2RhdGUnOiBkYXRldGltZS5mcm9tdGltZXN0YW1wKGNvbW1p
dC50aW1lc3RhbXApLnN0cmZ0aW1lKCclWS0lbS0lZFQlSDolTTolU1onKSwKKyAgICAgICAgICAg
ICAgICB9LCAnY29tbWl0dGVyJzogeworICAgICAgICAgICAgICAgICAgICAnbmFtZSc6IGNvbW1p
dC5hdXRob3IubmFtZSwKKyAgICAgICAgICAgICAgICAgICAgJ2VtYWlsJzogY29tbWl0LmF1dGhv
ci5lbWFpbCwKKyAgICAgICAgICAgICAgICAgICAgJ2RhdGUnOiBkYXRldGltZS5mcm9tdGltZXN0
YW1wKGNvbW1pdC50aW1lc3RhbXApLnN0cmZ0aW1lKCclWS0lbS0lZFQlSDolTTolU1onKSwKKyAg
ICAgICAgICAgICAgICB9LCAnbWVzc2FnZSc6IGNvbW1pdC5tZXNzYWdlLAorICAgICAgICAgICAg
ICAgICd1cmwnOiAnaHR0cHM6Ly97fS9naXQvY29tbWl0cy97fScuZm9ybWF0KHNlbGYuYXBpX3Jl
bW90ZSwgY29tbWl0Lmhhc2gpLAorICAgICAgICAgICAgfSwgJ3VybCc6ICdodHRwczovL3t9L2Nv
bW1pdHMve30nLmZvcm1hdChzZWxmLmFwaV9yZW1vdGUsIGNvbW1pdC5oYXNoKSwKKyAgICAgICAg
ICAgICdodG1sX3VybCc6ICdodHRwczovL3t9L2NvbW1pdC97fScuZm9ybWF0KHNlbGYucmVtb3Rl
LCBjb21taXQuaGFzaCksCisgICAgICAgIH0sIHVybD11cmwpCisKKyAgICBkZWYgX2NvbXBhcmVf
cmVzcG9uc2Uoc2VsZiwgdXJsLCByZWZfYSwgcmVmX2IpOgorICAgICAgICBjb21taXRfYSA9IHNl
bGYuY29tbWl0KHJlZl9hKQorICAgICAgICBjb21taXRfYiA9IHNlbGYuY29tbWl0KHJlZl9iKQor
ICAgICAgICBpZiBub3QgY29tbWl0X2Egb3Igbm90IGNvbW1pdF9iOgorICAgICAgICAgICAgcmV0
dXJuIG1vY2tzLlJlc3BvbnNlKAorICAgICAgICAgICAgICAgIHN0YXR1c19jb2RlPTQwNCwKKyAg
ICAgICAgICAgICAgICB1cmw9dXJsLAorICAgICAgICAgICAgICAgIHRleHQ9anNvbi5kdW1wcyhk
aWN0KG1lc3NhZ2U9J05vdCBmb3VuZCcpKSwKKyAgICAgICAgICAgICkKKworICAgICAgICBpZiBj
b21taXRfYS5icmFuY2ggIT0gc2VsZi5kZWZhdWx0X2JyYW5jaCBvciBjb21taXRfYi5icmFuY2gg
PT0gc2VsZi5kZWZhdWx0X2JyYW5jaDoKKyAgICAgICAgICAgIHJhaXNlIE5vdEltcGxlbWVudGVk
RXJyb3IoCisgICAgICAgICAgICAgICAgJ1RoaXMgaXMgYSB2YWxpZCBjb21wYXJpc29uIGNvbW1h
bmQsIGJ1dCBoYXMgbm90IGJlZW4gaW1wbGVtZW50ZWQgaW4gdGhlIG1vY2sgR2l0SHViIEFQSScp
CisKKyAgICAgICAgcmV0dXJuIG1vY2tzLlJlc3BvbnNlLmZyb21Kc29uKHsKKyAgICAgICAgICAg
ICdzdGF0dXMnOiAnZGl2ZXJnZWQnLAorICAgICAgICAgICAgJ2FoZWFkX2J5JzogY29tbWl0X2Iu
aWRlbnRpZmllciwKKyAgICAgICAgICAgICdiZWhpbmRfYnknOiBjb21taXRfYS5pZGVudGlmaWVy
IC0gY29tbWl0X2IuYnJhbmNoX3BvaW50LAorICAgICAgICB9LCB1cmw9dXJsKQorCisgICAgZGVm
IF9icmFuY2hlc19mb3JfcmVxdWVzdChzZWxmLCB1cmwsIHJlZik6CisgICAgICAgIGNvbW1pdCA9
IHNlbGYuY29tbWl0KHJlZikKKyAgICAgICAgaWYgbm90IGNvbW1pdDoKKyAgICAgICAgICAgIHJl
dHVybiBtb2Nrcy5SZXNwb25zZS5jcmVhdGU0MDQodXJsKQorICAgICAgICByZXR1cm4gbW9ja3Mu
UmVzcG9uc2UuZnJvbVRleHQoCisgICAgICAgICAgICAnXG5cbiAgICA8c3ZnIGNsYXNzPSJvY3Rp
Y29uIG9jdGljb24tZ2l0LWJyYW5jaCI+PHBhdGg+PC9wYXRoPjwvc3ZnPlxuJworICAgICAgICAg
ICAgJyAgICA8dWwgY2xhc3M9ImJyYW5jaGVzLWxpc3QiPlxuJworICAgICAgICAgICAgJyAgICAg
ICAgPGxpIGNsYXNzPSJicmFuY2giPjxhIGhyZWY9Ii97fSI+e308L2E+PC9saT5cbicKKyAgICAg
ICAgICAgICcgICAgPC91bD5cbicuZm9ybWF0KAorICAgICAgICAgICAgICAgICcvJy5qb2luKHNl
bGYucmVtb3RlLnNwbGl0KCcvJylbMTpdKSwKKyAgICAgICAgICAgICAgICBjb21taXQuYnJhbmNo
LAorICAgICAgICAgICAgKSwgdXJsPXVybAorICAgICAgICApCisKKyAgICBkZWYgX3BhcmVudHNf
b2ZfcmVxdWVzdChzZWxmLCB1cmwsIHJlZik6CisgICAgICAgIGNvbW1pdCA9IHNlbGYuY29tbWl0
KHJlZikKKyAgICAgICAgaWYgbm90IGNvbW1pdDoKKyAgICAgICAgICAgIHJldHVybiBtb2Nrcy5S
ZXNwb25zZS5jcmVhdGU0MDQodXJsKQorCisgICAgICAgICMgVGhpcyByZXNwb25zZSBpcyBhYmJy
ZXZpYXRlZCBzaW5jZSBtb3N0IGlzIHVudXNlZAorICAgICAgICByZXR1cm4gbW9ja3MuUmVzcG9u
c2UuZnJvbVRleHQoCisgICAgICAgICAgICAnXG5cblxuXG48IURPQ1RZUEUgaHRtbD5cbicKKyAg
ICAgICAgICAgICc8aHRtbCBsYW5nPSJlbiI+XG4nCisgICAgICAgICAgICAnLi4uXG4nCisgICAg
ICAgICAgICAnPGRpdiBjbGFzcz0iQm94IG1iLTMiPlxuJworICAgICAgICAgICAgJyAgICA8ZGl2
IGNsYXNzPSJCb3gtaGVhZGVyIEJveC1oZWFkZXItLWJsdWUgcG9zaXRpb24tcmVsYXRpdmUiPlxu
JworICAgICAgICAgICAgJyAgICAgICAgPGgyIGNsYXNzPSJzci1vbmx5Ij5MYXRlc3QgY29tbWl0
PC9oMj5cbicKKyAgICAgICAgICAgICcgICAgICAgIDxkaXYgY2xhc3M9Ii4uLiIgZGF0YS1pc3N1
ZS1hbmQtcHItaG92ZXJjYXJkcy1lbmFibGVkPlxuJworICAgICAgICAgICAgJyAgICAgICAgICAg
IDxpbmNsdWRlLWZyYWdtZW50IHNyYz0iL1dlYktpdC93ZWJraXQvdHJlZS1jb21taXQve3JlZn0i
IGFyaWEtbGFiZWw9IkxvYWRpbmcgbGF0ZXN0IGNvbW1pdCI+XG4nCisgICAgICAgICAgICAnICAg
ICAgICAgICAgPC9pbmNsdWRlLWZyYWdtZW50PlxuJworICAgICAgICAgICAgJyAgICAgICAgPHVs
IGNsYXNzPSJsaXN0LXN0eWxlLW5vbmUgZC1mbGV4Ij5cbicKKyAgICAgICAgICAgICcgICAgICAg
ICAgICA8bGkgY2xhc3M9Im1sLTAgbWwtbWQtMyI+XG4nCisgICAgICAgICAgICAnICAgICAgICAg
ICAgICAgIDxhIGRhdGEtcGpheCBocmVmPSIvV2ViS2l0L3dlYmtpdC9jb21taXRzL3tyZWZ9Ij5c
bicKKyAgICAgICAgICAgICcgICAgICAgICAgICAgICAgICAgIDxzdmcgY2xhc3M9Im9jdGljb24g
b2N0aWNvbi1oaXN0b3J5IHRleHQtZ3JheSI+PHBhdGg+PC9wYXRoPjwvc3ZnPlxuJworICAgICAg
ICAgICAgJyAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImQtbm9uZSBkLXNtLWlubGlu
ZSI+XG4nCisgICAgICAgICAgICAnICAgICAgICAgICAgICAgICAgICAgICAgPHN0cm9uZz57Y291
bnR9PC9zdHJvbmc+XG4nCisgICAgICAgICAgICAnICAgICAgICAgICAgICAgICAgICAgICAgPHNw
YW4gYXJpYS1sYWJlbD0iQ29tbWl0cyBvbiAiIGNsYXNzPSIuLi4iPmNvbW1pdHM8L3NwYW4+XG4n
CisgICAgICAgICAgICAnICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuJworICAgICAg
ICAgICAgJyAgICAgICAgICAgICAgICA8L2E+XG4nCisgICAgICAgICAgICAnICAgICAgICAgICAg
PC9saT5cbicKKyAgICAgICAgICAgICcgICAgICAgIDwvdWw+XG4nCisgICAgICAgICAgICAnICAg
ICAgICA8L2Rpdj5cbicKKyAgICAgICAgICAgICcgICAgPC9kaXY+XG4nCisgICAgICAgICAgICAn
PC9kaXY+XG4nCisgICAgICAgICAgICAnLi4uXG4nCisgICAgICAgICAgICAnPC9odG1sPlxuJy5m
b3JtYXQoCisgICAgICAgICAgICAgICAgcmVmPWNvbW1pdC5oYXNoLAorICAgICAgICAgICAgICAg
IGNvdW50PWNvbW1pdC5pZGVudGlmaWVyICsgKGNvbW1pdC5icmFuY2hfcG9pbnQgb3IgMCksCisg
ICAgICAgICAgICApLCB1cmw9dXJsCisgICAgICAgICkKKworICAgIGRlZiByZXF1ZXN0KHNlbGYs
IG1ldGhvZCwgdXJsLCBkYXRhPU5vbmUsICoqa3dhcmdzKToKKyAgICAgICAgaWYgbm90IHVybC5z
dGFydHN3aXRoKCdodHRwOi8vJykgYW5kIG5vdCB1cmwuc3RhcnRzd2l0aCgnaHR0cHM6Ly8nKToK
KyAgICAgICAgICAgIHJldHVybiBtb2Nrcy5SZXNwb25zZS5jcmVhdGU0MDQodXJsKQorCisgICAg
ICAgIHN0cmlwcGVkX3VybCA9IHVybC5zcGxpdCgnOi8vJylbLTFdCisKKyAgICAgICAgIyBUb3At
bGV2ZWwgQVBJIHJlcXVlc3QKKyAgICAgICAgaWYgc3RyaXBwZWRfdXJsID09IHNlbGYuYXBpX3Jl
bW90ZToKKyAgICAgICAgICAgIHJldHVybiBzZWxmLl9hcGlfcmVzcG9uc2UodXJsPXVybCkKKwor
ICAgICAgICAjIEJyYW5jaGVzL1RhZ3MKKyAgICAgICAgaWYgc3RyaXBwZWRfdXJsIGluIFsne30v
YnJhbmNoZXMnLmZvcm1hdChzZWxmLmFwaV9yZW1vdGUpLCAne30vdGFncycuZm9ybWF0KHNlbGYu
YXBpX3JlbW90ZSldOgorICAgICAgICAgICAgcmV0dXJuIHNlbGYuX2xpc3RfcmVmc19yZXNwb25z
ZSh1cmw9dXJsLCB0eXBlPXN0cmlwcGVkX3VybC5zcGxpdCgnLycpWy0xXSkKKworICAgICAgICAj
IEV4dHJhY3Qgc2luZ2xlIGNvbW1pdAorICAgICAgICBpZiBzdHJpcHBlZF91cmwuc3RhcnRzd2l0
aCgne30vY29tbWl0cy8nLmZvcm1hdChzZWxmLmFwaV9yZW1vdGUpKToKKyAgICAgICAgICAgIHJl
dHVybiBzZWxmLl9jb21taXRfcmVzcG9uc2UodXJsPXVybCwgcmVmPXN0cmlwcGVkX3VybC5zcGxp
dCgnLycpWy0xXSkKKworICAgICAgICAjIENvbXBhcmUgdHdvIGNvbW1pdHMKKyAgICAgICAgaWYg
c3RyaXBwZWRfdXJsLnN0YXJ0c3dpdGgoJ3t9L2NvbXBhcmUvJy5mb3JtYXQoc2VsZi5hcGlfcmVt
b3RlKSk6CisgICAgICAgICAgICByZWZfYSwgcmVmX2IgPSBzdHJpcHBlZF91cmwuc3BsaXQoJy8n
KVstMV0uc3BsaXQoJy4uLicpCisgICAgICAgICAgICByZXR1cm4gc2VsZi5fY29tcGFyZV9yZXNw
b25zZSh1cmw9dXJsLCByZWZfYT1yZWZfYSwgcmVmX2I9cmVmX2IpCisKKyAgICAgICAgIyBMaXN0
IGJyYW5jaGVzIGEgY29tbWl0IG9jY3VycyBvbgorICAgICAgICBpZiBzdHJpcHBlZF91cmwuc3Rh
cnRzd2l0aCgne30vYnJhbmNoX2NvbW1pdHMvJy5mb3JtYXQoc2VsZi5yZW1vdGUpKToKKyAgICAg
ICAgICAgIHJldHVybiBzZWxmLl9icmFuY2hlc19mb3JfcmVxdWVzdCh1cmw9dXJsLCByZWY9c3Ry
aXBwZWRfdXJsLnNwbGl0KCcvJylbLTFdKQorCisgICAgICAgICMgRmluZCB0aGUgbnVtYmVyIG9m
IHBhcmVudHMgYSBjb21taXQgaGFzCisgICAgICAgIGlmIHN0cmlwcGVkX3VybC5zdGFydHN3aXRo
KCd7fS90cmVlLycuZm9ybWF0KHNlbGYucmVtb3RlKSk6CisgICAgICAgICAgICByZXR1cm4gc2Vs
Zi5fcGFyZW50c19vZl9yZXF1ZXN0KHVybD11cmwsIHJlZj1zdHJpcHBlZF91cmwuc3BsaXQoJy8n
KVstMV0pCisKKyAgICAgICAgcmV0dXJuIG1vY2tzLlJlc3BvbnNlLmNyZWF0ZTQwNCh1cmwpCklu
ZGV4OiBUb29scy9TY3JpcHRzL2xpYnJhcmllcy93ZWJraXRzY21weS93ZWJraXRzY21weS9yZW1v
dGUvX19pbml0X18ucHkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvU2NyaXB0cy9saWJyYXJpZXMvd2Vi
a2l0c2NtcHkvd2Via2l0c2NtcHkvcmVtb3RlL19faW5pdF9fLnB5CShyZXZpc2lvbiAyNzA4NjEp
CisrKyBUb29scy9TY3JpcHRzL2xpYnJhcmllcy93ZWJraXRzY21weS93ZWJraXRzY21weS9yZW1v
dGUvX19pbml0X18ucHkJKHdvcmtpbmcgY29weSkKQEAgLTIyLDMgKzIyLDQgQEAKIAogZnJvbSB3
ZWJraXRzY21weS5yZW1vdGUuc2NtIGltcG9ydCBTY20KIGZyb20gd2Via2l0c2NtcHkucmVtb3Rl
LnN2biBpbXBvcnQgU3ZuCitmcm9tIHdlYmtpdHNjbXB5LnJlbW90ZS5naXRfaHViIGltcG9ydCBH
aXRIdWIKSW5kZXg6IFRvb2xzL1NjcmlwdHMvbGlicmFyaWVzL3dlYmtpdHNjbXB5L3dlYmtpdHNj
bXB5L3JlbW90ZS9naXRfaHViLnB5Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1NjcmlwdHMvbGlicmFy
aWVzL3dlYmtpdHNjbXB5L3dlYmtpdHNjbXB5L3JlbW90ZS9naXRfaHViLnB5CShub25leGlzdGVu
dCkKKysrIFRvb2xzL1NjcmlwdHMvbGlicmFyaWVzL3dlYmtpdHNjbXB5L3dlYmtpdHNjbXB5L3Jl
bW90ZS9naXRfaHViLnB5CSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMjgwIEBACisjIENvcHly
aWdodCAoQykgMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjCisjIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyMgYXJlIG1ldDoKKyMgMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisj
IDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorIyAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorIyAgICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyMKKyMg
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVU
T1JTICJBUyBJUyIgQU5ECisjIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisjIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUK
KyMgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IKKyMgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorIyBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UgorIyBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUgorIyBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLAorIyBPUiBUT1JU
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQorIyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorCitpbXBvcnQgY2FsZW5kYXIKK2ltcG9ydCBy
ZQoraW1wb3J0IHJlcXVlc3RzCitpbXBvcnQgc2l4CisKK2Zyb20gZGF0ZXRpbWUgaW1wb3J0IGRh
dGV0aW1lCitmcm9tIHdlYmtpdGNvcmVweSBpbXBvcnQgZGVjb3JhdG9ycworZnJvbSB3ZWJraXRz
Y21weSBpbXBvcnQgQ29tbWl0LCBDb250cmlidXRvcgorZnJvbSB3ZWJraXRzY21weS5yZW1vdGUu
c2NtIGltcG9ydCBTY20KK2Zyb20geG1sLmRvbSBpbXBvcnQgbWluaWRvbQorCisKK2NsYXNzIEdp
dEh1YihTY20pOgorICAgIFVSTF9SRSA9IHJlLmNvbXBpbGUocidcQWh0dHBzPzovL2dpdGh1Yi4o
P1A8ZG9tYWluPlxTKykvKD9QPG93bmVyPlxTKykvKD9QPHJlcG9zaXRvcnk+XFMrKVxaJykKKyAg
ICBFTUFJTF9SRSA9IHJlLmNvbXBpbGUocicoP1A8ZW1haWw+W15AXStAW15AXSspKEAuKik/JykK
KworICAgIEBjbGFzc21ldGhvZAorICAgIGRlZiBpc193ZWJzZXJ2ZXIoY2xzLCB1cmwpOgorICAg
ICAgICByZXR1cm4gVHJ1ZSBpZiBjbHMuVVJMX1JFLm1hdGNoKHVybCkgZWxzZSBGYWxzZQorCisg
ICAgZGVmIF9faW5pdF9fKHNlbGYsIHVybCwgZGV2X2JyYW5jaGVzPU5vbmUsIHByb2RfYnJhbmNo
ZXM9Tm9uZSwgY29udHJpYnV0b3JzPU5vbmUpOgorICAgICAgICBtYXRjaCA9IHNlbGYuVVJMX1JF
Lm1hdGNoKHVybCkKKyAgICAgICAgaWYgbm90IG1hdGNoOgorICAgICAgICAgICAgcmFpc2Ugc2Vs
Zi5FeGNlcHRpb24oIid7fScgaXMgbm90IGEgdmFsaWQgR2l0SHViIHByb2plY3QiLmZvcm1hdCh1
cmwpKQorICAgICAgICBzZWxmLmFwaV91cmwgPSAnaHR0cHM6Ly9hcGkuZ2l0aHViLnt9Jy5mb3Jt
YXQobWF0Y2guZ3JvdXAoJ2RvbWFpbicpKQorICAgICAgICBzZWxmLm93bmVyID0gbWF0Y2guZ3Jv
dXAoJ293bmVyJykKKyAgICAgICAgc2VsZi5uYW1lID0gbWF0Y2guZ3JvdXAoJ3JlcG9zaXRvcnkn
KQorICAgICAgICBzZWxmLl9oYXNoX2xpbmtfcmUgPSByZS5jb21waWxlKHInL3tvd25lcn0ve25h
bWV9L2NvbW1pdHM/Lyg/UDxoYXNoPlswLTlhLWZdKyknLmZvcm1hdCgKKyAgICAgICAgICAgIG93
bmVyPXNlbGYub3duZXIsCisgICAgICAgICAgICBuYW1lPXNlbGYubmFtZSwKKyAgICAgICAgKSkK
KworICAgICAgICBzdXBlcihHaXRIdWIsIHNlbGYpLl9faW5pdF9fKHVybCwgZGV2X2JyYW5jaGVz
PWRldl9icmFuY2hlcywgcHJvZF9icmFuY2hlcz1wcm9kX2JyYW5jaGVzLCBjb250cmlidXRvcnM9
Y29udHJpYnV0b3JzKQorCisgICAgQHByb3BlcnR5CisgICAgZGVmIGlzX2dpdChzZWxmKToKKyAg
ICAgICAgcmV0dXJuIFRydWUKKworICAgIGRlZiByZXF1ZXN0KHNlbGYsIHBhdGg9Tm9uZSwgcGFy
YW1zPU5vbmUsIGhlYWRlcnM9Tm9uZSk6CisgICAgICAgIGhlYWRlcnMgPSB7a2V5OiB2YWx1ZSBm
b3Iga2V5LCB2YWx1ZSBpbiBoZWFkZXJzLml0ZW1zKCl9IGlmIGhlYWRlcnMgZWxzZSBkaWN0KCkK
KyAgICAgICAgaGVhZGVyc1snQWNjZXB0J10gPSBoZWFkZXJzLmdldCgnQWNjZXB0JywgJ2FwcGxp
Y2F0aW9uL3ZuZC5naXRodWIudjMranNvbicpCisKKyAgICAgICAgcGFyYW1zID0ge2tleTogdmFs
dWUgZm9yIGtleSwgdmFsdWUgaW4gcGFyYW1zLml0ZW1zKCl9IGlmIHBhcmFtcyBlbHNlIGRpY3Qo
KQorICAgICAgICBwYXJhbXNbJ3Blcl9wYWdlJ10gPSBwYXJhbXMuZ2V0KCdwZXJfcGFnZScsIDEw
MCkKKyAgICAgICAgcGFyYW1zWydwYWdlJ10gPSBwYXJhbXMuZ2V0KCdwYWdlJywgMSkKKworICAg
ICAgICB1cmwgPSAne2FwaV91cmx9L3JlcG9zL3tvd25lcn0ve25hbWV9e3BhdGh9Jy5mb3JtYXQo
CisgICAgICAgICAgICBhcGlfdXJsPXNlbGYuYXBpX3VybCwKKyAgICAgICAgICAgIG93bmVyPXNl
bGYub3duZXIsCisgICAgICAgICAgICBuYW1lPXNlbGYubmFtZSwKKyAgICAgICAgICAgIHBhdGg9
Jy97fScuZm9ybWF0KHBhdGgpIGlmIHBhdGggZWxzZSAnJywKKyAgICAgICAgKQorICAgICAgICBy
ZXNwb25zZSA9IHJlcXVlc3RzLmdldCh1cmwsIHBhcmFtcz1wYXJhbXMsIGhlYWRlcnM9aGVhZGVy
cykKKyAgICAgICAgaWYgcmVzcG9uc2Uuc3RhdHVzX2NvZGUgIT0gMjAwOgorICAgICAgICAgICAg
cmV0dXJuIE5vbmUKKyAgICAgICAgcmVzdWx0ID0gcmVzcG9uc2UuanNvbigpCisKKyAgICAgICAg
d2hpbGUgaXNpbnN0YW5jZShyZXNwb25zZS5qc29uKCksIGxpc3QpIGFuZCBsZW4ocmVzcG9uc2Uu
anNvbigpKSA9PSBwYXJhbXNbJ3Blcl9wYWdlJ106CisgICAgICAgICAgICBwYXJhbXNbJ3BhZ2Un
XSArPSAxCisgICAgICAgICAgICByZXNwb25zZSA9IHJlcXVlc3RzLmdldCh1cmwsIHBhcmFtcz1w
YXJhbXMsIGhlYWRlcnM9aGVhZGVycykKKyAgICAgICAgICAgIGlmIHJlc3BvbnNlLnN0YXR1c19j
b2RlICE9IDIwMDoKKyAgICAgICAgICAgICAgICByYWlzZSBzZWxmLkV4Y2VwdGlvbigiRmFpbGVk
IHRvIGFzc2VtYmxlIHBhZ2luYXRpb24gcmVxdWVzdHMgZm9yICd7fScsIGZhaWxlZCBvbiBwYWdl
IHt9Ii5mb3JtYXQodXJsLCBwYXJhbXNbJ3BhZ2UnXSkpCisgICAgICAgICAgICByZXN1bHQgKz0g
cmVzcG9uc2UuanNvbigpCisgICAgICAgIHJldHVybiByZXN1bHQKKworICAgIGRlZiBfY291bnRf
Zm9yX3JlZihzZWxmLCByZWY9Tm9uZSk6CisgICAgICAgIHJlZiA9IHJlZiBvciBzZWxmLmRlZmF1
bHRfYnJhbmNoCisKKyAgICAgICAgIyBXZSBuZWVkIHRoZSBudW1iZXIgb2YgcGFyZW50cyBhIGNv
bW1pdCBoYXMgdG8gY29uc3RydWN0IGlkZW50aWZpZXJzLCB3aGljaCBpcyBub3Qgc29tZXRoaW5n
IEdpdEh1YidzCisgICAgICAgICMgQVBJIGxldHMgdXMgZmluZCwgYWx0aG91Z2ggdGhlIFVJIGRv
ZXMgaGF2ZSB0aGUgaW5mb3JtYXRpb24KKyAgICAgICAgcmVzcG9uc2UgPSByZXF1ZXN0cy5nZXQo
J3t9L3RyZWUve30nLmZvcm1hdChzZWxmLnVybCwgcmVmKSkKKyAgICAgICAgaWYgcmVzcG9uc2Uu
c3RhdHVzX2NvZGUgIT0gMjAwOgorICAgICAgICAgICAgcmFpc2Ugc2VsZi5FeGNlcHRpb24oIkZh
aWxlZCB0byBxdWVyeSB7fSdzIFVJIHRvIGZpbmQgdGhlIG51bWJlciBvZiBwYXJlbnRzIHt9IGhh
cyIuZm9ybWF0KHNlbGYudXJsLCByZWYpKQorCisgICAgICAgICMgVGhpcyBwYXJzaW5nIGlzIHBy
ZXR0eSBicml0dGxlLCBidXQgdGhlIHdlYnBhZ2UgbWF5IG5vdCBiZSB2YWxpZCB4bWwKKyAgICAg
ICAgY291bnQgPSBOb25lCisgICAgICAgIGhhc2ggPSBOb25lCisgICAgICAgIHByZXZpb3VzID0g
Tm9uZQorICAgICAgICBmb3IgbGluZSBpbiByZXNwb25zZS50ZXh0LnNwbGl0bGluZXMoKToKKyAg
ICAgICAgICAgIG1hdGNoID0gc2VsZi5faGFzaF9saW5rX3JlLnNlYXJjaChsaW5lKQorICAgICAg
ICAgICAgaWYgbWF0Y2g6CisgICAgICAgICAgICAgICAgaGFzaCA9IG1hdGNoLmdyb3VwKCdoYXNo
JykKKyAgICAgICAgICAgIGVsaWYgJ2FyaWEtbGFiZWw9IkNvbW1pdHMgb24gJyBpbiBsaW5lOgor
ICAgICAgICAgICAgICAgIGNvdW50ID0gaW50KG1pbmlkb20ucGFyc2VTdHJpbmcocHJldmlvdXMp
LmRvY3VtZW50RWxlbWVudC5jaGlsZE5vZGVzWzBdLmRhdGEucmVwbGFjZSgnLCcsICcnKSkKKyAg
ICAgICAgICAgICAgICBicmVhaworICAgICAgICAgICAgcHJldmlvdXMgPSBsaW5lCisKKyAgICAg
ICAgaWYgbm90IGhhc2ggb3Igbm90IGNvdW50OgorICAgICAgICAgICAgcmFpc2Ugc2VsZi5FeGNl
cHRpb24oIkZhaWxlZCB0byBjb21wdXRlIHRoZSBudW1iZXIgb2YgcGFyZW50cyB0byAne30nIi5m
b3JtYXQocmVmKSkKKworICAgICAgICByZXR1cm4gY291bnQsIGhhc2gKKworICAgIGRlZiBfZGlm
ZmVyZW5jZShzZWxmLCByZWZlcmVuY2UsIGhlYWQpOgorICAgICAgICByZXNwb25zZSA9IHNlbGYu
cmVxdWVzdCgnY29tcGFyZS97fS4uLnt9Jy5mb3JtYXQocmVmZXJlbmNlLCBoZWFkKSwgaGVhZGVy
cz1kaWN0KEFjY2VwdD0nYXBwbGljYXRpb24vdm5kLmdpdGh1Yi5WRVJTSU9OLnNoYScpKQorICAg
ICAgICBpZiBub3QgcmVzcG9uc2Ugb3Igbm90IHJlc3BvbnNlLmdldCgnc3RhdHVzJykgaW4gWydk
aXZlcmdlZCcsICdhaGVhZCcsICdiZWhpbmQnXToKKyAgICAgICAgICAgIHJhaXNlIHNlbGYuRXhj
ZXB0aW9uKCdGYWlsZWQgdG8gcmVxdWVzdCB0aGUgZGlmZmVyZW5jZSBiZXR3ZWVuIHt9IGFuZCB7
fScuZm9ybWF0KHJlZmVyZW5jZSwgaGVhZCkpCisgICAgICAgIHJldHVybiBpbnQocmVzcG9uc2Vb
J2JlaGluZF9ieScgaWYgcmVzcG9uc2UuZ2V0KCdzdGF0dXMnKSA9PSAnYmVoaW5kJyBlbHNlICdh
aGVhZF9ieSddKQorCisgICAgZGVmIF9icmFuY2hlc19mb3Ioc2VsZiwgaGFzaCk6CisgICAgICAg
ICMgV2UgbmVlZCB0byBmaW5kIHRoZSBicmFuY2ggdGhhdCBhIGNvbW1pdCBpcyBvbi4gR2l0SHVi
J3MgVUkgcHJvdmlkZXMgdGhpcyBpbmZvcm1hdGlvbiwgYnV0IHRoZSBvbmx5IHdheSB0bworICAg
ICAgICAjIHJldHJpZXZlIHRoaXMgaW5mb3JtYXRpb24gdmlhIHRoZSBBUEkgd291bGQgYmUgdG8g
Y2hlY2sgYWxsIGJyYW5jaGVzIGZvciB0aGUgY29tbWl0LCBzbyB3ZSBzY3JhcGUgdGhlIFVJLgor
ICAgICAgICByZXNwb25zZSA9IHJlcXVlc3RzLmdldCgne30vYnJhbmNoX2NvbW1pdHMve30nLmZv
cm1hdChzZWxmLnVybCwgaGFzaCkpCisgICAgICAgIGlmIHJlc3BvbnNlLnN0YXR1c19jb2RlICE9
IDIwMDoKKyAgICAgICAgICAgIHJldHVybiBbXQorCisgICAgICAgIHJlc3VsdCA9IFtdCisgICAg
ICAgIGZvciBsaW5lIGluIHJlc3BvbnNlLnRleHQuc3BsaXRsaW5lcygpOgorICAgICAgICAgICAg
aWYgJ2NsYXNzPSJicmFuY2giJyBub3QgaW4gbGluZToKKyAgICAgICAgICAgICAgICBjb250aW51
ZQorICAgICAgICAgICAgcmVzdWx0LmFwcGVuZChtaW5pZG9tLnBhcnNlU3RyaW5nKGxpbmUpLmRv
Y3VtZW50RWxlbWVudC5jaGlsZE5vZGVzWzBdLmNoaWxkTm9kZXNbMF0uZGF0YSkKKworICAgICAg
ICByZXR1cm4gcmVzdWx0CisKKyAgICBAcHJvcGVydHkKKyAgICBAZGVjb3JhdG9ycy5NZW1vaXpl
KCkKKyAgICBkZWYgZGVmYXVsdF9icmFuY2goc2VsZik6CisgICAgICAgIHJlc3BvbnNlID0gc2Vs
Zi5yZXF1ZXN0KCkKKyAgICAgICAgaWYgbm90IHJlc3BvbnNlOgorICAgICAgICAgICAgcmFpc2Ug
c2VsZi5FeGNlcHRpb24oIkZhaWxlZCB0byBxdWVyeSB7fSBmb3Ige30ncyBkZWZhdWx0IGJyYW5j
aCIuZm9ybWF0KHNlbGYudXJsLCBzZWxmLm5hbWUpKQorICAgICAgICByZXR1cm4gcmVzcG9uc2Uu
Z2V0KCdkZWZhdWx0X2JyYW5jaCcsICdtYXN0ZXInKQorCisgICAgQHByb3BlcnR5CisgICAgZGVm
IGJyYW5jaGVzKHNlbGYpOgorICAgICAgICByZXNwb25zZSA9IHNlbGYucmVxdWVzdCgnYnJhbmNo
ZXMnKQorICAgICAgICBpZiBub3QgcmVzcG9uc2U6CisgICAgICAgICAgICByZXR1cm4gW3NlbGYu
ZGVmYXVsdF9icmFuY2hdCisgICAgICAgIHJldHVybiBzb3J0ZWQoW2RldGFpbHMuZ2V0KCduYW1l
JykgZm9yIGRldGFpbHMgaW4gcmVzcG9uc2UgaWYgZGV0YWlscy5nZXQoJ25hbWUnKV0pCisKKyAg
ICBAcHJvcGVydHkKKyAgICBkZWYgdGFncyhzZWxmKToKKyAgICAgICAgcmVzcG9uc2UgPSBzZWxm
LnJlcXVlc3QoJ3RhZ3MnKQorICAgICAgICBpZiBub3QgcmVzcG9uc2U6CisgICAgICAgICAgICBy
ZXR1cm4gW10KKyAgICAgICAgcmV0dXJuIHNvcnRlZChbZGV0YWlscy5nZXQoJ25hbWUnKSBmb3Ig
ZGV0YWlscyBpbiByZXNwb25zZSBpZiBkZXRhaWxzLmdldCgnbmFtZScpXSkKKworICAgIGRlZiBj
b21taXQoc2VsZiwgaGFzaD1Ob25lLCByZXZpc2lvbj1Ob25lLCBpZGVudGlmaWVyPU5vbmUsIGJy
YW5jaD1Ob25lLCB0YWc9Tm9uZSwgaW5jbHVkZV9sb2c9VHJ1ZSk6CisgICAgICAgIGlmIHJldmlz
aW9uOgorICAgICAgICAgICAgcmFpc2Ugc2VsZi5FeGNlcHRpb24oJ0Nhbm5vdCBtYXAgcmV2aXNp
b25zIHRvIGNvbW1pdHMgb24gR2l0SHViJykKKworICAgICAgICBpZiBpZGVudGlmaWVyIGlzIG5v
dCBOb25lOgorICAgICAgICAgICAgaWYgcmV2aXNpb246CisgICAgICAgICAgICAgICAgcmFpc2Ug
VmFsdWVFcnJvcignQ2Fubm90IGRlZmluZSBib3RoIHJldmlzaW9uIGFuZCBpZGVudGlmaWVyJykK
KyAgICAgICAgICAgIGlmIGhhc2g6CisgICAgICAgICAgICAgICAgcmFpc2UgVmFsdWVFcnJvcign
Q2Fubm90IGRlZmluZSBib3RoIGhhc2ggYW5kIGlkZW50aWZpZXInKQorICAgICAgICAgICAgaWYg
dGFnOgorICAgICAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoJ0Nhbm5vdCBkZWZpbmUgYm90
aCB0YWcgYW5kIGlkZW50aWZpZXInKQorCisgICAgICAgICAgICBwYXJzZWRfYnJhbmNoX3BvaW50
LCBpZGVudGlmaWVyLCBwYXJzZWRfYnJhbmNoID0gQ29tbWl0Ll9wYXJzZV9pZGVudGlmaWVyKGlk
ZW50aWZpZXIsIGRvX2Fzc2VydD1UcnVlKQorICAgICAgICAgICAgaWYgcGFyc2VkX2JyYW5jaDoK
KyAgICAgICAgICAgICAgICBpZiBicmFuY2ggYW5kIGJyYW5jaCAhPSBwYXJzZWRfYnJhbmNoOgor
ICAgICAgICAgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKAorICAgICAgICAgICAgICAgICAg
ICAgICAgIkNhbGxlciBwYXNzZWQgYm90aCAnYnJhbmNoJyBhbmQgJ2lkZW50aWZpZXInLCBidXQg
c3BlY2lmaWVkIGRpZmZlcmVudCBicmFuY2hlcyAoe30gYW5kIHt9KSIuZm9ybWF0KAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGJyYW5jaCwgcGFyc2VkX2JyYW5jaCwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICksCisgICAgICAgICAgICAgICAgICAgICkKKyAgICAgICAgICAgICAgICBi
cmFuY2ggPSBwYXJzZWRfYnJhbmNoCisKKyAgICAgICAgICAgIGJyYW5jaCA9IGJyYW5jaCBvciBz
ZWxmLmRlZmF1bHRfYnJhbmNoCisgICAgICAgICAgICBpc19kZWZhdWx0ID0gYnJhbmNoID09IHNl
bGYuZGVmYXVsdF9icmFuY2gKKworICAgICAgICAgICAgaWYgaXNfZGVmYXVsdCBhbmQgcGFyc2Vk
X2JyYW5jaF9wb2ludDoKKyAgICAgICAgICAgICAgICByYWlzZSBzZWxmLkV4Y2VwdGlvbignQ2Fu
bm90IHByb3ZpZGUgYSBicmFuY2ggcG9pbnQgZm9yIGEgY29tbWl0IG9uIHRoZSBkZWZhdWx0IGJy
YW5jaCcpCisKKyAgICAgICAgICAgIGlmIGlzX2RlZmF1bHQ6CisgICAgICAgICAgICAgICAgYmFz
ZV9jb3VudCwgYmFzZV9yZWYgPSBzZWxmLl9jb3VudF9mb3JfcmVmKHJlZj1zZWxmLmRlZmF1bHRf
YnJhbmNoKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBfLCBiYXNlX3JlZiA9
IHNlbGYuX2NvdW50X2Zvcl9yZWYocmVmPWJyYW5jaCkKKyAgICAgICAgICAgICAgICBiYXNlX2Nv
dW50ID0gc2VsZi5fZGlmZmVyZW5jZShzZWxmLmRlZmF1bHRfYnJhbmNoLCBiYXNlX3JlZikKKwor
ICAgICAgICAgICAgaWYgaWRlbnRpZmllciA+IGJhc2VfY291bnQ6CisgICAgICAgICAgICAgICAg
cmFpc2Ugc2VsZi5FeGNlcHRpb24oJ0lkZW50aWZpZXIge30gY2Fubm90IGJlIGZvdW5kIG9uIHt9
Jy5mb3JtYXQoaWRlbnRpZmllciwgYnJhbmNoKSkKKworICAgICAgICAgICAgIyBOZWdhdGl2ZSBp
ZGVudGlmaWVycyBhcmUgYWN0dWFsbHkgY29tbWl0cyBvbiB0aGUgZGVmYXVsdCBicmFuY2gsIHdl
IHdpbGwgbmVlZCB0byByZS1jb21wdXRlIHRoZSBpZGVudGlmaWVyCisgICAgICAgICAgICBpZiBp
ZGVudGlmaWVyIDwgMCBhbmQgaXNfZGVmYXVsdDoKKyAgICAgICAgICAgICAgICByYWlzZSBzZWxm
LkV4Y2VwdGlvbignSWxsZWdhbCBuZWdhdGl2ZSBpZGVudGlmaWVyIG9uIHRoZSBkZWZhdWx0IGJy
YW5jaCcpCisKKyAgICAgICAgICAgIGNvbW1pdF9kYXRhID0gc2VsZi5yZXF1ZXN0KCdjb21taXRz
L3t9fnt9Jy5mb3JtYXQoYmFzZV9yZWYsIGJhc2VfY291bnQgLSBpZGVudGlmaWVyKSkKKyAgICAg
ICAgICAgIGlmIG5vdCBjb21taXRfZGF0YToKKyAgICAgICAgICAgICAgICByYWlzZSBzZWxmLkV4
Y2VwdGlvbigiRmFpbGVkIHRvIHJldHJpZXZlIGNvbW1pdCBpbmZvcm1hdGlvbiBmb3IgJ3t9QHt9
JyIuZm9ybWF0KGlkZW50aWZpZXIsIGJyYW5jaCBvciAnSEVBRCcpKQorCisgICAgICAgICAgICAj
IElmIGFuIGlkZW50aWZpZXIgaXMgbmVnYXRpdmUsIHVuc2V0IGl0IHNvIHdlIHJlLWNvbXB1dGUg
YmVmb3JlIGNvbnN0cnVjdGluZyB0aGUgY29tbWl0LgorICAgICAgICAgICAgaWYgaWRlbnRpZmll
ciA8PSAwOgorICAgICAgICAgICAgICAgIGlkZW50aWZpZXIgPSBOb25lCisKKyAgICAgICAgZWxp
ZiBicmFuY2ggb3IgdGFnOgorICAgICAgICAgICAgaWYgaGFzaDoKKyAgICAgICAgICAgICAgICBy
YWlzZSBWYWx1ZUVycm9yKCdDYW5ub3QgZGVmaW5lIGJvdGggdGFnL2JyYW5jaCBhbmQgaGFzaCcp
CisgICAgICAgICAgICBpZiBicmFuY2ggYW5kIHRhZzoKKyAgICAgICAgICAgICAgICByYWlzZSBW
YWx1ZUVycm9yKCdDYW5ub3QgZGVmaW5lIGJvdGggdGFnIGFuZCBicmFuY2gnKQorICAgICAgICAg
ICAgY29tbWl0X2RhdGEgPSBzZWxmLnJlcXVlc3QoJ2NvbW1pdHMve30nLmZvcm1hdChicmFuY2gg
b3IgdGFnKSkKKyAgICAgICAgICAgIGlmIG5vdCBjb21taXRfZGF0YToKKyAgICAgICAgICAgICAg
ICByYWlzZSBzZWxmLkV4Y2VwdGlvbigiRmFpbGVkIHRvIHJldHJpZXZlIGNvbW1pdCBpbmZvcm1h
dGlvbiBmb3IgJ3t9JyIuZm9ybWF0KGJyYW5jaCBvciB0YWcpKQorCisgICAgICAgIGVsc2U6Cisg
ICAgICAgICAgICBoYXNoID0gQ29tbWl0Ll9wYXJzZV9oYXNoKGhhc2gsIGRvX2Fzc2VydD1UcnVl
KQorICAgICAgICAgICAgY29tbWl0X2RhdGEgPSBzZWxmLnJlcXVlc3QoJ2NvbW1pdHMve30nLmZv
cm1hdChoYXNoIG9yIHNlbGYuZGVmYXVsdF9icmFuY2gpKQorICAgICAgICAgICAgaWYgbm90IGNv
bW1pdF9kYXRhOgorICAgICAgICAgICAgICAgIHJhaXNlIHNlbGYuRXhjZXB0aW9uKCJGYWlsZWQg
dG8gcmV0cmlldmUgY29tbWl0IGluZm9ybWF0aW9uIGZvciAne30nIi5mb3JtYXQoaGFzaCBvciAn
SEVBRCcpKQorCisgICAgICAgIGJyYW5jaGVzID0gc2VsZi5fYnJhbmNoZXNfZm9yKGNvbW1pdF9k
YXRhWydzaGEnXSkKKyAgICAgICAgaWYgYnJhbmNoZXM6CisgICAgICAgICAgICBicmFuY2ggPSBz
ZWxmLnByaW9yaXRpemVfYnJhbmNoZXMoYnJhbmNoZXMpCisKKyAgICAgICAgZWxzZToKKyAgICAg
ICAgICAgICMgQSBjb21taXQgbm90IG9uIGFueSBicmFuY2hlcyBjYW5ub3QgaGF2ZSBhbiBpZGVu
dGlmaWVyCisgICAgICAgICAgICBpZGVudGlmaWVyID0gTm9uZQorICAgICAgICAgICAgYnJhbmNo
ID0gTm9uZQorCisgICAgICAgIGJyYW5jaF9wb2ludCA9IE5vbmUKKyAgICAgICAgaWYgYnJhbmNo
IGFuZCBicmFuY2ggPT0gc2VsZi5kZWZhdWx0X2JyYW5jaDoKKyAgICAgICAgICAgIGlmIG5vdCBp
ZGVudGlmaWVyOgorICAgICAgICAgICAgICAgIHJlc3VsdCA9IHNlbGYuX2NvdW50X2Zvcl9yZWYo
cmVmPWNvbW1pdF9kYXRhWydzaGEnXSkKKyAgICAgICAgICAgICAgICBpZiBub3QgcmVzdWx0Ogor
ICAgICAgICAgICAgICAgICAgICByYWlzZSBFeGNlcHRpb24oJ3t9IHt9Jy5mb3JtYXQocmVzdWx0
LCBjb21taXRfZGF0YVsnc2hhJ10pKQorICAgICAgICAgICAgICAgIGlkZW50aWZpZXIsIF8gPSBy
ZXN1bHQKKworICAgICAgICBlbGlmIGJyYW5jaDoKKyAgICAgICAgICAgIGlmIG5vdCBpZGVudGlm
aWVyOgorICAgICAgICAgICAgICAgIGlkZW50aWZpZXIgPSBzZWxmLl9kaWZmZXJlbmNlKHNlbGYu
ZGVmYXVsdF9icmFuY2gsIGNvbW1pdF9kYXRhWydzaGEnXSkKKyAgICAgICAgICAgIGJyYW5jaF9w
b2ludCA9IHNlbGYuX2NvdW50X2Zvcl9yZWYocmVmPWNvbW1pdF9kYXRhWydzaGEnXSlbMF0gLSBp
ZGVudGlmaWVyCisKKyAgICAgICAgbWF0Y2ggPSBzZWxmLkdJVF9TVk5fUkVWSVNJT04uc2VhcmNo
KGNvbW1pdF9kYXRhWydjb21taXQnXVsnbWVzc2FnZSddKQorICAgICAgICByZXZpc2lvbiA9IGlu
dChtYXRjaC5ncm91cCgncmV2aXNpb24nKSkgaWYgbWF0Y2ggZWxzZSBOb25lCisKKyAgICAgICAg
ZGF0ZSA9IGRhdGV0aW1lLnN0cnB0aW1lKGNvbW1pdF9kYXRhWydjb21taXQnXVsnY29tbWl0dGVy
J11bJ2RhdGUnXSwgJyVZLSVtLSVkVCVIOiVNOiVTWicpCisgICAgICAgIGVtYWlsX21hdGNoID0g
c2VsZi5FTUFJTF9SRS5tYXRjaChjb21taXRfZGF0YVsnY29tbWl0J11bJ2F1dGhvciddWydlbWFp
bCddKQorCisgICAgICAgIHJldHVybiBDb21taXQoCisgICAgICAgICAgICBoYXNoPWNvbW1pdF9k
YXRhWydzaGEnXSwKKyAgICAgICAgICAgIHJldmlzaW9uPXJldmlzaW9uLAorICAgICAgICAgICAg
YnJhbmNoX3BvaW50PWJyYW5jaF9wb2ludCwKKyAgICAgICAgICAgIGlkZW50aWZpZXI9aWRlbnRp
ZmllciwKKyAgICAgICAgICAgIGJyYW5jaD1icmFuY2gsCisgICAgICAgICAgICB0aW1lc3RhbXA9
aW50KGNhbGVuZGFyLnRpbWVnbShkYXRlLnRpbWV0dXBsZSgpKSksCisgICAgICAgICAgICBhdXRo
b3I9c2VsZi5jb250cmlidXRvcnMuY3JlYXRlKAorICAgICAgICAgICAgICAgIGNvbW1pdF9kYXRh
Wydjb21taXQnXVsnYXV0aG9yJ11bJ25hbWUnXSwKKyAgICAgICAgICAgICAgICBlbWFpbF9tYXRj
aC5ncm91cCgnZW1haWwnKSBpZiBlbWFpbF9tYXRjaCBlbHNlIE5vbmUsCisgICAgICAgICAgICAp
LCBtZXNzYWdlPWNvbW1pdF9kYXRhWydjb21taXQnXVsnbWVzc2FnZSddIGlmIGluY2x1ZGVfbG9n
IGVsc2UgTm9uZSwKKyAgICAgICAgKQorCisgICAgZGVmIGZpbmQoc2VsZiwgYXJndW1lbnQsIGlu
Y2x1ZGVfbG9nPVRydWUpOgorICAgICAgICBpZiBub3QgaXNpbnN0YW5jZShhcmd1bWVudCwgc2l4
LnN0cmluZ190eXBlcyk6CisgICAgICAgICAgICByYWlzZSBWYWx1ZUVycm9yKCJFeHBlY3RlZCAn
YXJndW1lbnQnIHRvIGJlIGEgc3RyaW5nLCBub3QgJ3t9JyIuZm9ybWF0KHR5cGUoYXJndW1lbnQp
KSkKKworICAgICAgICBwYXJzZWRfY29tbWl0ID0gQ29tbWl0LnBhcnNlKGFyZ3VtZW50LCBkb19h
c3NlcnQ9RmFsc2UpCisgICAgICAgIGlmIHBhcnNlZF9jb21taXQ6CisgICAgICAgICAgICByZXR1
cm4gc2VsZi5jb21taXQoCisgICAgICAgICAgICAgICAgaGFzaD1wYXJzZWRfY29tbWl0Lmhhc2gs
CisgICAgICAgICAgICAgICAgcmV2aXNpb249cGFyc2VkX2NvbW1pdC5yZXZpc2lvbiwKKyAgICAg
ICAgICAgICAgICBpZGVudGlmaWVyPXBhcnNlZF9jb21taXQuaWRlbnRpZmllciwKKyAgICAgICAg
ICAgICAgICBicmFuY2g9cGFyc2VkX2NvbW1pdC5icmFuY2gsCisgICAgICAgICAgICAgICAgaW5j
bHVkZV9sb2c9aW5jbHVkZV9sb2csCisgICAgICAgICAgICApCisKKyAgICAgICAgY29tbWl0X2Rh
dGEgPSBzZWxmLnJlcXVlc3QoJ2NvbW1pdHMve30nLmZvcm1hdChhcmd1bWVudCkpCisgICAgICAg
IGlmIG5vdCBjb21taXRfZGF0YToKKyAgICAgICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoIid7fScg
aXMgbm90IGFuIGFyZ3VtZW50IHJlY29nbml6ZWQgYnkgZ2l0Ii5mb3JtYXQoYXJndW1lbnQpKQor
ICAgICAgICByZXR1cm4gc2VsZi5jb21taXQoaGFzaD1jb21taXRfZGF0YVsnc2hhJ10sIGluY2x1
ZGVfbG9nPWluY2x1ZGVfbG9nKQpJbmRleDogVG9vbHMvU2NyaXB0cy9saWJyYXJpZXMvd2Via2l0
c2NtcHkvd2Via2l0c2NtcHkvcmVtb3RlL3NjbS5weQo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9TY3Jp
cHRzL2xpYnJhcmllcy93ZWJraXRzY21weS93ZWJraXRzY21weS9yZW1vdGUvc2NtLnB5CShyZXZp
c2lvbiAyNzA4NjEpCisrKyBUb29scy9TY3JpcHRzL2xpYnJhcmllcy93ZWJraXRzY21weS93ZWJr
aXRzY21weS9yZW1vdGUvc2NtLnB5CSh3b3JraW5nIGNvcHkpCkBAIC0zMiw2ICszMiw4IEBAIGNs
YXNzIFNjbShTY21CYXNlKToKIAogICAgICAgICBpZiByZW1vdGUuU3ZuLmlzX3dlYnNlcnZlcih1
cmwpOgogICAgICAgICAgICAgcmV0dXJuIHJlbW90ZS5Tdm4odXJsLCBjb250cmlidXRvcnM9Y29u
dHJpYnV0b3JzKQorICAgICAgICBpZiByZW1vdGUuR2l0SHViLmlzX3dlYnNlcnZlcih1cmwpOgor
ICAgICAgICAgICAgcmV0dXJuIHJlbW90ZS5HaXRIdWIodXJsLCBjb250cmlidXRvcnM9Y29udHJp
YnV0b3JzKQogICAgICAgICByYWlzZSBPU0Vycm9yKCIne30nIGlzIG5vdCBhIGtub3duIFNDTSBz
ZXJ2ZXIiLmZvcm1hdCh1cmwpKQogCiAgICAgZGVmIF9faW5pdF9fKHNlbGYsIHVybCwgZGV2X2Jy
YW5jaGVzPU5vbmUsIHByb2RfYnJhbmNoZXM9Tm9uZSwgY29udHJpYnV0b3JzPU5vbmUpOgpJbmRl
eDogVG9vbHMvU2NyaXB0cy9saWJyYXJpZXMvd2Via2l0c2NtcHkvd2Via2l0c2NtcHkvdGVzdC9n
aXRfdW5pdHRlc3QucHkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvU2NyaXB0cy9saWJyYXJpZXMvd2Vi
a2l0c2NtcHkvd2Via2l0c2NtcHkvdGVzdC9naXRfdW5pdHRlc3QucHkJKHJldmlzaW9uIDI3MDg2
MSkKKysrIFRvb2xzL1NjcmlwdHMvbGlicmFyaWVzL3dlYmtpdHNjbXB5L3dlYmtpdHNjbXB5L3Rl
c3QvZ2l0X3VuaXR0ZXN0LnB5CSh3b3JraW5nIGNvcHkpCkBAIC0yNiw3ICsyNiw3IEBAIGltcG9y
dCB1bml0dGVzdAogZnJvbSBkYXRldGltZSBpbXBvcnQgZGF0ZXRpbWUKIGZyb20gd2Via2l0Y29y
ZXB5IGltcG9ydCBMb2dnZXJDYXB0dXJlCiBmcm9tIHdlYmtpdGNvcmVweS5tb2NrcyBpbXBvcnQg
VGltZSBhcyBNb2NrVGltZQotZnJvbSB3ZWJraXRzY21weSBpbXBvcnQgbG9jYWwsIG1vY2tzCitm
cm9tIHdlYmtpdHNjbXB5IGltcG9ydCBsb2NhbCwgbW9ja3MsIHJlbW90ZQogCiAKIGNsYXNzIFRl
c3RHaXQodW5pdHRlc3QuVGVzdENhc2UpOgpAQCAtMjUwLDMgKzI1MCwxMDYgQEAgY2xhc3MgVGVz
dEdpdCh1bml0dGVzdC5UZXN0Q2FzZSk6CiAgICAgICAgIGZvciBtb2NrIGluIFttb2Nrcy5sb2Nh
bC5HaXQoc2VsZi5wYXRoKSwgbW9ja3MubG9jYWwuR2l0KHNlbGYucGF0aCwgZ2l0X3N2bj1UcnVl
KV06CiAgICAgICAgICAgICB3aXRoIG1vY2s6CiAgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRJ
c05vbmUobG9jYWwuR2l0KHNlbGYucGF0aCkuY29tbWl0KGlkZW50aWZpZXI9JzRAbWFpbicsIGlu
Y2x1ZGVfbG9nPUZhbHNlKS5tZXNzYWdlKQorCisKK2NsYXNzIFRlc3RHaXRIdWIodW5pdHRlc3Qu
VGVzdENhc2UpOgorICAgIHJlbW90ZSA9ICdodHRwczovL2dpdGh1Yi5leGFtcGxlLmNvbS9XZWJL
aXQvd2Via2l0JworCisgICAgZGVmIHRlc3RfZGV0ZWN0aW9uKHNlbGYpOgorICAgICAgICBzZWxm
LmFzc2VydEVxdWFsKHJlbW90ZS5HaXRIdWIuaXNfd2Vic2VydmVyKCdodHRwczovL2dpdGh1Yi5l
eGFtcGxlLmNvbS9XZWJLaXQvd2Via2l0JyksIFRydWUpCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1
YWwocmVtb3RlLkdpdEh1Yi5pc193ZWJzZXJ2ZXIoJ2h0dHA6Ly9naXRodWIuZXhhbXBsZS5jb20v
V2ViS2l0L3dlYmtpdCcpLCBUcnVlKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHJlbW90ZS5H
aXRIdWIuaXNfd2Vic2VydmVyKCdodHRwczovL3N2bi5leGFtcGxlLm9yZy9yZXBvc2l0b3J5L3dl
YmtpdCcpLCBGYWxzZSkKKworICAgIGRlZiB0ZXN0X2JyYW5jaGVzKHNlbGYpOgorICAgICAgICB3
aXRoIG1vY2tzLnJlbW90ZS5HaXRIdWIoKToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwo
CisgICAgICAgICAgICAgICAgcmVtb3RlLkdpdEh1YihzZWxmLnJlbW90ZSkuYnJhbmNoZXMsCisg
ICAgICAgICAgICAgICAgWydicmFuY2gtYScsICdicmFuY2gtYicsICdtYWluJ10sCisgICAgICAg
ICAgICApCisKKyAgICBkZWYgdGVzdF90YWdzKHNlbGYpOgorICAgICAgICB3aXRoIG1vY2tzLnJl
bW90ZS5HaXRIdWIoKSBhcyBtb2NrOgorICAgICAgICAgICAgbW9jay50YWdzWyd0YWctMSddID0g
bW9jay5jb21taXRzWydicmFuY2gtYSddWy0xXQorICAgICAgICAgICAgbW9jay50YWdzWyd0YWct
MiddID0gbW9jay5jb21taXRzWydicmFuY2gtYiddWy0xXQorCisgICAgICAgICAgICBzZWxmLmFz
c2VydEVxdWFsKAorICAgICAgICAgICAgICAgIHJlbW90ZS5HaXRIdWIoc2VsZi5yZW1vdGUpLnRh
Z3MsCisgICAgICAgICAgICAgICAgWyd0YWctMScsICd0YWctMiddLAorICAgICAgICAgICAgKQor
CisgICAgZGVmIHRlc3Rfc2NtX3R5cGUoc2VsZik6CisgICAgICAgIHNlbGYuYXNzZXJ0RmFsc2Uo
cmVtb3RlLkdpdEh1YihzZWxmLnJlbW90ZSkuaXNfc3ZuKQorICAgICAgICBzZWxmLmFzc2VydFRy
dWUocmVtb3RlLkdpdEh1YihzZWxmLnJlbW90ZSkuaXNfZ2l0KQorCisgICAgZGVmIHRlc3RfY29t
bWl0X3JldmlzaW9uKHNlbGYpOgorICAgICAgICB3aXRoIG1vY2tzLnJlbW90ZS5HaXRIdWIoKToK
KyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJzFAbWFpbicsIHN0cihyZW1vdGUuR2l0SHVi
KHNlbGYucmVtb3RlKS5jb21taXQoaGFzaD0nOWI4MzExZjInKSkpCisgICAgICAgICAgICBzZWxm
LmFzc2VydEVxdWFsKCcyQG1haW4nLCBzdHIocmVtb3RlLkdpdEh1YihzZWxmLnJlbW90ZSkuY29t
bWl0KGhhc2g9J2ZmZjgzYmIyJykpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgnMi4x
QGJyYW5jaC1hJywgc3RyKHJlbW90ZS5HaXRIdWIoc2VsZi5yZW1vdGUpLmNvbW1pdChoYXNoPSdh
MzBjZTg0OScpKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJzNAbWFpbicsIHN0cihy
ZW1vdGUuR2l0SHViKHNlbGYucmVtb3RlKS5jb21taXQoaGFzaD0nMWFiZTI1YjQnKSkpCisgICAg
ICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCcyLjJAYnJhbmNoLWInLCBzdHIocmVtb3RlLkdpdEh1
YihzZWxmLnJlbW90ZSkuY29tbWl0KGhhc2g9JzNjZDMyZTM1JykpKQorICAgICAgICAgICAgc2Vs
Zi5hc3NlcnRFcXVhbCgnNEBtYWluJywgc3RyKHJlbW90ZS5HaXRIdWIoc2VsZi5yZW1vdGUpLmNv
bW1pdChoYXNoPSdiYWU1ZDFlOScpKSkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJzIu
MkBicmFuY2gtYScsIHN0cihyZW1vdGUuR2l0SHViKHNlbGYucmVtb3RlKS5jb21taXQoaGFzaD0n
NjIxNjUyYWQnKSkpCisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKCcyLjNAYnJhbmNoLWIn
LCBzdHIocmVtb3RlLkdpdEh1YihzZWxmLnJlbW90ZSkuY29tbWl0KGhhc2g9Jzc5MDcyNWE2Jykp
KQorCisgICAgZGVmIHRlc3RfY29tbWl0X2Zyb21fYnJhbmNoKHNlbGYpOgorICAgICAgICB3aXRo
IG1vY2tzLnJlbW90ZS5HaXRIdWIoKToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoJzRA
bWFpbicsIHN0cihyZW1vdGUuR2l0SHViKHNlbGYucmVtb3RlKS5jb21taXQoYnJhbmNoPSdtYWlu
JykpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgnMi4yQGJyYW5jaC1hJywgc3RyKHJl
bW90ZS5HaXRIdWIoc2VsZi5yZW1vdGUpLmNvbW1pdChicmFuY2g9J2JyYW5jaC1hJykpKQorICAg
ICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgnMi4zQGJyYW5jaC1iJywgc3RyKHJlbW90ZS5HaXRI
dWIoc2VsZi5yZW1vdGUpLmNvbW1pdChicmFuY2g9J2JyYW5jaC1iJykpKQorCisgICAgZGVmIHRl
c3RfaWRlbnRpZmllcihzZWxmKToKKyAgICAgICAgd2l0aCBtb2Nrcy5yZW1vdGUuR2l0SHViKCk6
CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKAorICAgICAgICAgICAgICAgICc5YjgzMTFm
MjVhNzdiYTE0OTIzZDlkNWE2NTMyMTAzZjU0YWJlZmNiJywKKyAgICAgICAgICAgICAgICByZW1v
dGUuR2l0SHViKHNlbGYucmVtb3RlKS5jb21taXQoaWRlbnRpZmllcj0nMUBtYWluJykuaGFzaCwK
KyAgICAgICAgICAgICkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCisgICAgICAgICAg
ICAgICAgJ2ZmZjgzYmIyZDkxNzFiNGQ5MTk2ZTk3N2ViMDUwOGZkNTdlN2EwOGQnLAorICAgICAg
ICAgICAgICAgIHJlbW90ZS5HaXRIdWIoc2VsZi5yZW1vdGUpLmNvbW1pdChpZGVudGlmaWVyPScy
QG1haW4nKS5oYXNoLAorICAgICAgICAgICAgKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVh
bCgKKyAgICAgICAgICAgICAgICAnYTMwY2U4NDk0YmYxYWMyODA3YTY5ODQ0ZjcyNmJlNGE5ODQz
Y2E1NScsCisgICAgICAgICAgICAgICAgcmVtb3RlLkdpdEh1YihzZWxmLnJlbW90ZSkuY29tbWl0
KGlkZW50aWZpZXI9JzIuMUBicmFuY2gtYScpLmhhc2gsCisgICAgICAgICAgICApCisgICAgICAg
ICAgICBzZWxmLmFzc2VydEVxdWFsKAorICAgICAgICAgICAgICAgICcxYWJlMjViNDQzZTk4NWY5
M2I5MGQ4MzBlNGE3ZTM3MzEzMzZhZjRkJywKKyAgICAgICAgICAgICAgICByZW1vdGUuR2l0SHVi
KHNlbGYucmVtb3RlKS5jb21taXQoaWRlbnRpZmllcj0nM0BtYWluJykuaGFzaCwKKyAgICAgICAg
ICAgICkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCisgICAgICAgICAgICAgICAgJzNj
ZDMyZTM1MjQxMDU2NWJiNTQzODIxZmJmODU2YTZkM2NhYWQxYzQnLAorICAgICAgICAgICAgICAg
IHJlbW90ZS5HaXRIdWIoc2VsZi5yZW1vdGUpLmNvbW1pdChpZGVudGlmaWVyPScyLjJAYnJhbmNo
LWInKS5oYXNoLAorICAgICAgICAgICAgKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgK
KyAgICAgICAgICAgICAgICAnYmFlNWQxZTkwOTk5ZDRmOTE2YThhMTU4MTBjY2ZhNDNmMzdhMmZk
NicsCisgICAgICAgICAgICAgICAgcmVtb3RlLkdpdEh1YihzZWxmLnJlbW90ZSkuY29tbWl0KGlk
ZW50aWZpZXI9JzRAbWFpbicpLmhhc2gsCisgICAgICAgICAgICApCisgICAgICAgICAgICBzZWxm
LmFzc2VydEVxdWFsKAorICAgICAgICAgICAgICAgICc2MjE2NTJhZGQ3ZmM0MTYwOTliZDIwNjMz
NjZjYzM4ZmY2MWFmZTM2JywKKyAgICAgICAgICAgICAgICByZW1vdGUuR2l0SHViKHNlbGYucmVt
b3RlKS5jb21taXQoaWRlbnRpZmllcj0nMi4yQGJyYW5jaC1hJykuaGFzaCwKKyAgICAgICAgICAg
ICkKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoCisgICAgICAgICAgICAgICAgJzc5MDcy
NWE2ZDc5ZTI4ZGIyZWNkZGUyOTU0OGQyMjYyYzBiZDA1OWQnLAorICAgICAgICAgICAgICAgIHJl
bW90ZS5HaXRIdWIoc2VsZi5yZW1vdGUpLmNvbW1pdChpZGVudGlmaWVyPScyLjNAYnJhbmNoLWIn
KS5oYXNoLAorICAgICAgICAgICAgKQorCisgICAgZGVmIHRlc3Rfbm9uX2Nhbm5vbmljYWxfaWRl
bnRpZmllcnMoc2VsZik6CisgICAgICAgIHdpdGggbW9ja3MucmVtb3RlLkdpdEh1YigpOgorICAg
ICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCgnMkBtYWluJywgc3RyKHJlbW90ZS5HaXRIdWIoc2Vs
Zi5yZW1vdGUpLmNvbW1pdChpZGVudGlmaWVyPScwQGJyYW5jaC1hJykpKQorICAgICAgICAgICAg
c2VsZi5hc3NlcnRFcXVhbCgnMUBtYWluJywgc3RyKHJlbW90ZS5HaXRIdWIoc2VsZi5yZW1vdGUp
LmNvbW1pdChpZGVudGlmaWVyPSctMUBicmFuY2gtYScpKSkKKworICAgICAgICAgICAgc2VsZi5h
c3NlcnRFcXVhbCgnMkBtYWluJywgc3RyKHJlbW90ZS5HaXRIdWIoc2VsZi5yZW1vdGUpLmNvbW1p
dChpZGVudGlmaWVyPScwQGJyYW5jaC1iJykpKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVh
bCgnMUBtYWluJywgc3RyKHJlbW90ZS5HaXRIdWIoc2VsZi5yZW1vdGUpLmNvbW1pdChpZGVudGlm
aWVyPSctMUBicmFuY2gtYicpKSkKKworICAgIGRlZiB0ZXN0X3RhZyhzZWxmKToKKyAgICAgICAg
d2l0aCBtb2Nrcy5yZW1vdGUuR2l0SHViKCkgYXMgbW9jazoKKyAgICAgICAgICAgIG1vY2sudGFn
c1sndGFnLTEnXSA9IG1vY2suY29tbWl0c1snYnJhbmNoLWEnXVstMV0KKworICAgICAgICAgICAg
c2VsZi5hc3NlcnRFcXVhbCgKKyAgICAgICAgICAgICAgICAnNjIxNjUyYWRkN2ZjNDE2MDk5YmQy
MDYzMzY2Y2MzOGZmNjFhZmUzNicsCisgICAgICAgICAgICAgICAgcmVtb3RlLkdpdEh1YihzZWxm
LnJlbW90ZSkuY29tbWl0KHRhZz0ndGFnLTEnKS5oYXNoLAorICAgICAgICAgICAgKQorCisgICAg
ZGVmIHRlc3Rfbm9fbG9nKHNlbGYpOgorICAgICAgICB3aXRoIG1vY2tzLnJlbW90ZS5HaXRIdWIo
KToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0SXNOb25lKHJlbW90ZS5HaXRIdWIoc2VsZi5yZW1v
dGUpLmNvbW1pdChpZGVudGlmaWVyPSc0QG1haW4nLCBpbmNsdWRlX2xvZz1GYWxzZSkubWVzc2Fn
ZSkK
</data>

          </attachment>
      

    </bug>

</bugzilla>