<?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>169084</bug_id>
          
          <creation_ts>2017-03-02 10:33:50 -0800</creation_ts>
          <short_desc>Add a script for automatically running the buildbot configurations on a test environment.</short_desc>
          <delta_ts>2017-11-30 11:30:45 -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>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>164813</dependson>
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Carlos Alberto Lopez Perez">clopez</reporter>
          <assigned_to name="Carlos Alberto Lopez Perez">clopez</assigned_to>
          <cc>aakash_jain</cc>
    
    <cc>achristensen</cc>
    
    <cc>ap</cc>
    
    <cc>bugs-noreply</cc>
    
    <cc>commit-queue</cc>
    
    <cc>dino</cc>
    
    <cc>don.olmstead</cc>
    
    <cc>lforschler</cc>
    
    <cc>mcatanzaro</cc>
    
    <cc>ossy</cc>
    
    <cc>rniwa</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1282783</commentid>
    <comment_count>0</comment_count>
    <who name="Carlos Alberto Lopez Perez">clopez</who>
    <bug_when>2017-03-02 10:33:50 -0800</bug_when>
    <thetext>I have been working on a script that does the following:

 * Creates a temporal workingdir
 * Installs buildbot and its dependencies there (very same version used by the webkit.org buildbot master https://build.webkit.org/about ). This is important as there are problems that that may not be detected if you don&apos;t test with the same version that will be used on production.
 * Copies the buildmaster config files to the temporal workingdir.
 * Performs the required steps to start a buildmaster.
 * Creates the required config for each slave and starts all of them.


Then you can use your browser to log into the test buildmaster at http://localhost:8710/ and test to trigger manual builds, etc.

So you can actually test any configuration changes on the buildmaster on a test environment that is pretty much identical to the production one.

When you finish testing, simply press CTRL+C and all the temporal files will be cleaned. Note that if you actually want to trigger builds, the default path for the temporal workingdir on Linux (/tmp/) may have not enough free space. You can specify another temporal directory with the --base-temp-dir argument.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1282787</commentid>
    <comment_count>1</comment_count>
      <attachid>303216</attachid>
    <who name="Carlos Alberto Lopez Perez">clopez</who>
    <bug_when>2017-03-02 10:47:20 -0800</bug_when>
    <thetext>Created attachment 303216
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1282790</commentid>
    <comment_count>2</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2017-03-02 10:49:28 -0800</bug_when>
    <thetext>Attachment 303216 did not pass style-queue:


ERROR: Tools/BuildSlaveSupport/build.webkit.org-config/run-buildbot-test.py:213:  [start_worker] Instance of &apos;Popen&apos; has no &apos;kill&apos; member  [pylint/E1101] [5]
Total errors found: 1 in 2 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1282848</commentid>
    <comment_count>3</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2017-03-02 13:11:38 -0800</bug_when>
    <thetext>Interesting!

Aakash and Dean, did you have some automation for setting up test buildbot instances? What do you think?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1282901</commentid>
    <comment_count>4</comment_count>
      <attachid>303246</attachid>
    <who name="Carlos Alberto Lopez Perez">clopez</who>
    <bug_when>2017-03-02 14:45:02 -0800</bug_when>
    <thetext>Created attachment 303246
Patch

Fix some typos and improve the wording on the help strings for the arguments</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1282909</commentid>
    <comment_count>5</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2017-03-02 14:56:24 -0800</bug_when>
    <thetext>Attachment 303246 did not pass style-queue:


ERROR: Tools/BuildSlaveSupport/build.webkit.org-config/run-buildbot-test.py:213:  [start_worker] Instance of &apos;Popen&apos; has no &apos;kill&apos; member  [pylint/E1101] [5]
Total errors found: 1 in 2 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1284273</commentid>
    <comment_count>6</comment_count>
    <who name="Carlos Alberto Lopez Perez">clopez</who>
    <bug_when>2017-03-07 05:11:43 -0800</bug_when>
    <thetext>ping reviewers?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1351645</commentid>
    <comment_count>7</comment_count>
      <attachid>303246</attachid>
    <who name="Michael Catanzaro">mcatanzaro</who>
    <bug_when>2017-09-22 07:27:10 -0700</bug_when>
    <thetext>Comment on attachment 303246
Patch

I have not actually reviewed this script. Maybe that&apos;s bad of me. :) But you can commit it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1351675</commentid>
    <comment_count>8</comment_count>
    <who name="Aakash Jain">aakash_jain</who>
    <bug_when>2017-09-22 09:22:10 -0700</bug_when>
    <thetext>Thanks for adding the script. I have verified that the script works fine.

Let me review it today. I might have few comments.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1351684</commentid>
    <comment_count>9</comment_count>
      <attachid>303246</attachid>
    <who name="Michael Catanzaro">mcatanzaro</who>
    <bug_when>2017-09-22 09:45:22 -0700</bug_when>
    <thetext>Comment on attachment 303246
Patch

Sure, I was just approving it because I figured nobody would want to review it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1360564</commentid>
    <comment_count>10</comment_count>
    <who name="Michael Catanzaro">mcatanzaro</who>
    <bug_when>2017-10-15 08:10:30 -0700</bug_when>
    <thetext>(In reply to Aakash Jain from comment #8)
&gt; Thanks for adding the script. I have verified that the script works fine.
&gt; 
&gt; Let me review it today. I might have few comments.

Aakash, are you still planning to review this?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1365222</commentid>
    <comment_count>11</comment_count>
      <attachid>303246</attachid>
    <who name="Michael Catanzaro">mcatanzaro</who>
    <bug_when>2017-10-26 20:11:30 -0700</bug_when>
    <thetext>Comment on attachment 303246
Patch

(Carlos Lopez, you can commit this, barring future negative feedback.)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1365224</commentid>
    <comment_count>12</comment_count>
    <who name="Aakash Jain">aakash_jain</who>
    <bug_when>2017-10-26 20:23:29 -0700</bug_when>
    <thetext>Yeah, please go ahead. The script works. We can make the improvements on ongoing basis.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1376396</commentid>
    <comment_count>13</comment_count>
    <who name="Aakash Jain">aakash_jain</who>
    <bug_when>2017-11-30 10:49:34 -0800</bug_when>
    <thetext>Carlos, can you please commit it?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1376425</commentid>
    <comment_count>14</comment_count>
      <attachid>303246</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2017-11-30 11:29:58 -0800</bug_when>
    <thetext>Comment on attachment 303246
Patch

Clearing flags on attachment: 303246

Committed r225336: &lt;https://trac.webkit.org/changeset/225336&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1376426</commentid>
    <comment_count>15</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2017-11-30 11:30:00 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1376428</commentid>
    <comment_count>16</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2017-11-30 11:30:45 -0800</bug_when>
    <thetext>&lt;rdar://problem/35777704&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>303216</attachid>
            <date>2017-03-02 10:47:20 -0800</date>
            <delta_ts>2017-03-02 14:44:52 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-169084-20170302194718.patch</filename>
            <type>text/plain</type>
            <size>17708</size>
            <attacher name="Carlos Alberto Lopez Perez">clopez</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjEzMjg5CmRpZmYgLS1naXQgYS9Ub29scy9DaGFuZ2VMb2cg
Yi9Ub29scy9DaGFuZ2VMb2cKaW5kZXggYzFkMGEzZjVkMzIxZTczMDc1MzZlODUxMTMxMzFmYjMw
NmI1YWU3OC4uZGYzMGJmNTYyOTY5OWQwN2U5YjQ2YThiYmI5MzJkM2Q1YWY3NzA2YiAxMDA2NDQK
LS0tIGEvVG9vbHMvQ2hhbmdlTG9nCisrKyBiL1Rvb2xzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDM4
IEBACisyMDE3LTAzLTAyICBDYXJsb3MgQWxiZXJ0byBMb3BleiBQZXJleiAgPGNsb3BlekBpZ2Fs
aWEuY29tPgorCisgICAgICAgIEFkZCBhIHNjcmlwdCBmb3IgYXV0b21hdGljYWxseSBydW5uaW5n
IHRoZSBidWlsZGJvdCBjb25maWd1cmF0aW9ucyBvbiBhIHRlc3QgZW52aXJvbm1lbnQuCisgICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjkwODQKKworICAg
ICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUaGlzIG5ldyBzY3Jp
cHQgZG9lcyB0aGUgZm9sbG93aW5nOgorICAgICAgICAtIENyZWF0ZXMgYSB0ZW1wb3JhbCB3b3Jr
aW5nZGlyLgorICAgICAgICAtIEluc3RhbGxzIGJ1aWxkYm90IGFuZCBpdHMgZGVwZW5kZW5jaWVz
IHRoZXJlICh2ZXJ5IHNhbWUgdmVyc2lvbiB1c2VkIGJ5IHRoZSB3ZWJraXQub3JnIGJ1aWxkYm90
IG1hc3RlciBodHRwczovL2J1aWxkLndlYmtpdC5vcmcvYWJvdXQgKS4KKyAgICAgICAgICBUaGlz
IGlzIGltcG9ydGFudCBhcyB0aGVyZSBhcmUgcHJvYmxlbXMgdGhhdCB0aGF0IG1heSBub3QgYmUg
ZGV0ZWN0ZWQgaWYgeW91IGRvbid0IHRlc3Qgd2l0aCB0aGUgc2FtZSB2ZXJzaW9uIHRoYXQgd2ls
bCBiZSB1c2VkIG9uIHByb2R1Y3Rpb24uCisgICAgICAgIC0gQ29waWVzIHRoZSBidWlsZG1hc3Rl
ciBjb25maWcgZmlsZXMgdG8gdGhlIHRlbXBvcmFsIHdvcmtpbmdkaXIuCisgICAgICAgIC0gUGVy
Zm9ybXMgdGhlIHJlcXVpcmVkIHN0ZXBzIHRvIHN0YXJ0IGEgYnVpbGRtYXN0ZXIuCisgICAgICAg
IC0gQ3JlYXRlcyB0aGUgcmVxdWlyZWQgY29uZmlnIGZvciBlYWNoIHNsYXZlIGFuZCBzdGFydHMg
YWxsIG9mIHRoZW0uCisKKyAgICAgICAgVGhlIHRlc3QgYnVpbGRtYXN0ZXIgc2hvdWxkIGJlIGFj
Y2Vzc2libGUgYXQgaHR0cDovL2xvY2FsaG9zdDo4NzEwLyBhbGxvd2luZyB0byB0cmlnZ2VyIG1h
bnVhbCBidWlsZHMuCisgICAgICAgIFRoaXMgYWxsb3dzIHRvIHRlc3QgYW55IGNvbmZpZ3VyYXRp
b24gY2hhbmdlcyBvbiB0aGlzIHRlc3QgZW52aXJvbm1lbnQgdGhhdCBpcyBwcmV0dHkgbXVjaCBp
ZGVudGljYWwgdG8gdGhlIHByb2R1Y3Rpb24gb25lLgorCisgICAgICAgICogQnVpbGRTbGF2ZVN1
cHBvcnQvYnVpbGQud2Via2l0Lm9yZy1jb25maWcvcnVuLWJ1aWxkYm90LXRlc3QucHk6IEFkZGVk
LgorICAgICAgICAoY2hlY2tfdGNwX3BvcnRfb3Blbik6CisgICAgICAgICh1cGdyYWRlX2RiX25l
ZWRlZCk6CisgICAgICAgIChjcmVhdGVfdGVtcGRpcik6CisgICAgICAgIChwcmludF9pZl9lcnJv
cl9zdGRvdXRfc3RkZXJyKToKKyAgICAgICAgKHNldHVwX21hc3Rlcl93b3JrZGlyKToKKyAgICAg
ICAgKHdhaXRfZm9yX21hc3Rlcl9yZWFkeSk6CisgICAgICAgIChzdGFydF9tYXN0ZXIpOgorICAg
ICAgICAoZ2V0X2xpc3Rfd29ya2Vycyk6CisgICAgICAgIChzdGFydF93b3JrZXIpOgorICAgICAg
ICAoY2xlYW4pOgorICAgICAgICAoY21kX2V4aXN0cyk6CisgICAgICAgIChjaGVja19idWlsZGJv
dF9pbnN0YWxsZWQpOgorICAgICAgICAoc2V0dXBfdmlydHVhbGVudik6CisgICAgICAgIChjb25m
aWdkaXJfaXNfdmFsaWQpOgorICAgICAgICAobWFpbik6CisKIDIwMTctMDMtMDIgIFJ5YW4gSGFk
ZGFkICA8cnlhbmhhZGRhZEBhcHBsZS5jb20+CiAKICAgICAgICAgVW5yZXZpZXdlZCwgcm9sbGlu
ZyBvdXQgcjIxMzI4MS4KZGlmZiAtLWdpdCBhL1Rvb2xzL0J1aWxkU2xhdmVTdXBwb3J0L2J1aWxk
LndlYmtpdC5vcmctY29uZmlnL3J1bi1idWlsZGJvdC10ZXN0LnB5IGIvVG9vbHMvQnVpbGRTbGF2
ZVN1cHBvcnQvYnVpbGQud2Via2l0Lm9yZy1jb25maWcvcnVuLWJ1aWxkYm90LXRlc3QucHkKbmV3
IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMC4uN2UzNjQ5N2ViODg1ODVlOWY4NTEzYTRiNDk5YzQ2NjNjZDYzMjc4MQotLS0gL2Rl
di9udWxsCisrKyBiL1Rvb2xzL0J1aWxkU2xhdmVTdXBwb3J0L2J1aWxkLndlYmtpdC5vcmctY29u
ZmlnL3J1bi1idWlsZGJvdC10ZXN0LnB5CkBAIC0wLDAgKzEsMzQ3IEBACisjIS91c3IvYmluL2Vu
diBweXRob24KKyMKKyMgQ29weXJpZ2h0IChDKSAyMDE3IElnYWxpYSBTLkwuCisjCisjIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMgYXJlCisjIG1ldDoKKyMKKyMgICAgICogUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
IworIyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlCisjIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyMgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorIyBkaXN0cmlidXRpb24uCisjCisj
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBD
T05UUklCVVRPUlMKKyMgIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyMgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisjIEEgUEFSVElDVUxBUiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisj
IE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLAorIyBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisjIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorIyBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkK
KyMgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAorIyAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyMgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyMKK2ltcG9ydCBz
eXMKK2ltcG9ydCBzaWduYWwKK2ltcG9ydCBvcworaW1wb3J0IGFyZ3BhcnNlCitpbXBvcnQgc3Vi
cHJvY2VzcworaW1wb3J0IHRlbXBmaWxlCitpbXBvcnQgc2h1dGlsCitpbXBvcnQgc29ja2V0Citp
bXBvcnQganNvbgoraW1wb3J0IHRyYWNlYmFjaworaW1wb3J0IG11bHRpcHJvY2Vzc2luZworZnJv
bSB0aW1lIGltcG9ydCBzbGVlcAorCit0ZXN0X2J1aWxkYm90X21hc3Rlcl90YWMgPSAiIiIKK2lt
cG9ydCBvcworZnJvbSB0d2lzdGVkLmFwcGxpY2F0aW9uIGltcG9ydCBzZXJ2aWNlCit0cnk6Cisg
ICAgZnJvbSBidWlsZGJvdC5tYXN0ZXIuYm90IGltcG9ydCBCdWlsZE1hc3RlcgorZXhjZXB0Ogor
ICAgIGZyb20gYnVpbGRib3QubWFzdGVyIGltcG9ydCBCdWlsZE1hc3RlcgorCitiYXNlZGlyID0g
b3MucGF0aC5kaXJuYW1lKG9zLnBhdGgucmVhbHBhdGgoX19maWxlX18pKQorY29uZmlnZmlsZSA9
IHInbWFzdGVyLmNmZycKKworYXBwbGljYXRpb24gPSBzZXJ2aWNlLkFwcGxpY2F0aW9uKCdidWls
ZG1hc3RlcicpCitCdWlsZE1hc3RlcihiYXNlZGlyLCBjb25maWdmaWxlKS5zZXRTZXJ2aWNlUGFy
ZW50KGFwcGxpY2F0aW9uKQorIiIiCisKK3dvcmtlcl9idWlsZGJvdF9tYXN0ZXJfdGFjID0gIiIi
CitpbXBvcnQgb3MKK2Zyb20gdHdpc3RlZC5hcHBsaWNhdGlvbiBpbXBvcnQgc2VydmljZQorZnJv
bSBidWlsZHNsYXZlLmJvdCBpbXBvcnQgQnVpbGRTbGF2ZQorCitiYXNlZGlyID0gb3MucGF0aC5k
aXJuYW1lKG9zLnBhdGgucmVhbHBhdGgoX19maWxlX18pKQorYnVpbGRtYXN0ZXJfaG9zdCA9ICds
b2NhbGhvc3QnCitwb3J0ID0gMTcwMDAKK3NsYXZlbmFtZSA9ICclKHdvcmtlcilzJworcGFzc3dk
ID0gJzEyMzQnCitrZWVwYWxpdmUgPSA2MDAKK3VzZXB0eSA9IDEKKworYXBwbGljYXRpb24gPSBz
ZXJ2aWNlLkFwcGxpY2F0aW9uKCdidWlsZHNsYXZlJykKK0J1aWxkU2xhdmUoYnVpbGRtYXN0ZXJf
aG9zdCwgcG9ydCwgc2xhdmVuYW1lLCBwYXNzd2QsIGJhc2VkaXIsIGtlZXBhbGl2ZSwgdXNlcHR5
KS5zZXRTZXJ2aWNlUGFyZW50KGFwcGxpY2F0aW9uKQorIiIiCisKKworZGVmIGNoZWNrX3RjcF9w
b3J0X29wZW4oYWRkcmVzcywgcG9ydCk6CisgICAgcyA9IHNvY2tldC5zb2NrZXQoKQorICAgIHRy
eToKKyAgICAgICAgcy5jb25uZWN0KChhZGRyZXNzLCBwb3J0KSkKKyAgICAgICAgcmV0dXJuIFRy
dWUKKyAgICBleGNlcHQ6CisgICAgICAgIHJldHVybiBGYWxzZQorCisKK2RlZiB1cGdyYWRlX2Ri
X25lZWRlZChsb2cpOgorICAgIHRyeToKKyAgICAgICAgd2l0aCBvcGVuKGxvZykgYXMgZjoKKyAg
ICAgICAgICAgIGZvciBsIGluIGY6CisgICAgICAgICAgICAgICAgaWYgJ3VwZ3JhZGUgdGhlIGRh
dGFiYXNlJyBpbiBsOgorICAgICAgICAgICAgICAgICAgICByZXR1cm4gVHJ1ZQorICAgIGV4Y2Vw
dDoKKyAgICAgICAgcmV0dXJuIEZhbHNlCisgICAgcmV0dXJuIEZhbHNlCisKKworZGVmIGNyZWF0
ZV90ZW1wZGlyKHRtcGRpcj1Ob25lKToKKyAgICBpZiB0bXBkaXIgaXMgbm90IE5vbmU6CisgICAg
ICAgIGlmIG5vdCBvcy5wYXRoLmlzZGlyKHRtcGRpcik6CisgICAgICAgICAgICByYWlzZSBWYWx1
ZUVycm9yKCclcyBpcyBub3QgYSBkaXJlY3RvcnknICUgdG1wZGlyKQorICAgICAgICByZXR1cm4g
dGVtcGZpbGUubWtkdGVtcChwcmVmaXg9b3MucGF0aC5qb2luKG9zLnBhdGguYWJzcGF0aCh0bXBk
aXIpLCAndG1wJykpCisgICAgcmV0dXJuIHRlbXBmaWxlLm1rZHRlbXAoKQorCisKK2RlZiBwcmlu
dF9pZl9lcnJvcl9zdGRvdXRfc3RkZXJyKGNtZCwgcmV0Y29kZSwgc3Rkb3V0PU5vbmUsIHN0ZGVy
cj1Ob25lLCBleHRyYW1zZz1Ob25lKToKKyAgICBpZiByZXRjb2RlICE9IDA6CisgICAgICAgIGlm
IHR5cGUoY21kKSA9PSB0eXBlKFtdKToKKyAgICAgICAgICAgIGNtZCA9ICcgJy5qb2luKGNtZCkK
KyAgICAgICAgcHJpbnQoJ1dBUk5JTkc6ICIlcyIgcmV0dXJuZWQgJXMgc3RhdHVzIGNvZGUnICUg
KGNtZCwgcmV0Y29kZSkpCisgICAgICAgIGlmIHN0ZG91dCBpcyBub3QgTm9uZToKKyAgICAgICAg
ICAgIHByaW50KHN0ZG91dCkKKyAgICAgICAgaWYgc3RkZXJyIGlzIG5vdCBOb25lOgorICAgICAg
ICAgICAgcHJpbnQoc3RkZXJyKQorICAgICAgICBpZiBleHRyYW1zZyBpcyBub3QgTm9uZToKKyAg
ICAgICAgICAgIHByaW50KGV4dHJhbXNnKQorCisKK2RlZiBzZXR1cF9tYXN0ZXJfd29ya2Rpcihj
b25maWdkaXIsIGJhc2Vfd29ya2Rpcik6CisgICAgbWFzdGVyX3dvcmtkaXIgPSBvcy5wYXRoLmpv
aW4oYmFzZV93b3JrZGlyLCAnbWFzdGVyJykKKyAgICBwcmludCgnQ29weWluZyBmaWxlcyBmcm9t
ICVzIHRvICVzIC4uLicgJSAoY29uZmlnZGlyLCBtYXN0ZXJfd29ya2RpcikpCisgICAgc2h1dGls
LmNvcHl0cmVlKGNvbmZpZ2RpciwgbWFzdGVyX3dvcmtkaXIpCisgICAgcHJpbnQoJ0dlbmVyYXRp
bmcgYnVpbGRib3QgZmlsZXMgYXQgJXMgLi4uJyAlIG1hc3Rlcl93b3JrZGlyKQorICAgIHdpdGgg
b3Blbihvcy5wYXRoLmpvaW4obWFzdGVyX3dvcmtkaXIsICdidWlsZGJvdC50YWMnKSwgJ3cnKSBh
cyBmOgorICAgICAgICBmLndyaXRlKHRlc3RfYnVpbGRib3RfbWFzdGVyX3RhYykKKyAgICBta3B3
ZF9jbWQgPSBbJy4vbWFrZV9wYXNzd29yZHNfanNvbi5weSddCisgICAgbWtwd2RfcHJvY2VzcyA9
IHN1YnByb2Nlc3MuUG9wZW4obWtwd2RfY21kLCBjd2Q9bWFzdGVyX3dvcmtkaXIsCisgICAgICAg
ICAgICAgICAgc3Rkb3V0PXN1YnByb2Nlc3MuUElQRSwgc3RkZXJyPXN1YnByb2Nlc3MuU1RET1VU
KQorICAgIHN0ZG91dCwgc3RkZXJyID0gbWtwd2RfcHJvY2Vzcy5jb21tdW5pY2F0ZSgpCisgICAg
cHJpbnRfaWZfZXJyb3Jfc3Rkb3V0X3N0ZGVycihta3B3ZF9jbWQsIG1rcHdkX3Byb2Nlc3MucmV0
dXJuY29kZSwgc3Rkb3V0LCBzdGRlcnIpCisgICAgcmV0dXJuIG1hc3Rlcl93b3JrZGlyCisKKwor
ZGVmIHdhaXRfZm9yX21hc3Rlcl9yZWFkeShtYXN0ZXJfd29ya2Rpcik6CisgICAgbWFzdGVyX3Jl
YWR5X2NoZWNrX2NvdW50ZXIgPSAwCisgICAgd2hpbGUgVHJ1ZToKKyAgICAgICAgaWYgb3MucGF0
aC5pc2ZpbGUob3MucGF0aC5qb2luKG1hc3Rlcl93b3JrZGlyLCAnLm1hc3Rlci1pcy1yZWFkeScp
KToKKyAgICAgICAgICAgIHJldHVybgorICAgICAgICBpZiBtYXN0ZXJfcmVhZHlfY2hlY2tfY291
bnRlciA+IDE1OgorICAgICAgICAgICAgcmFpc2UgUnVudGltZUVycm9yKCdFUlJPUjogQWJvcnRp
bmcgYWZ0ZXIgd2FpdGluZyAxNSBzZWNvbmRzIGZvciB0aGUgbWFzdGVyIHRvIHN0YXJ0LicpCisg
ICAgICAgIHNsZWVwKDEpCisgICAgICAgIG1hc3Rlcl9yZWFkeV9jaGVja19jb3VudGVyICs9IDEK
KworCitkZWYgc3RhcnRfbWFzdGVyKG1hc3Rlcl93b3JrZGlyKToKKyAgICAjIFRoaXMgaXMgc3Rh
cnRlZCB2aWEgbXVsdGlwcm9jZXNzaW5nLiBXZSBzZXQgYSBuZXcgcHJvY2VzcyBncm91cCBoZXJl
CisgICAgIyB0byBiZSBhYmxlIHRvIHJlbGlhYmx5IGtpbGwgdGhpcyBzdWJwcm9jZXNzIGFuZCBh
bGwgb2YgaXRzIGNoaWxkIG9uIGNsZWFuLgorICAgIG9zLnNldHNpZCgpCisgICAgYnVpbGRtYXN0
ZXJsb2cgPSBvcy5wYXRoLmpvaW4obWFzdGVyX3dvcmtkaXIsICdidWlsZG1hc3Rlci5sb2cnKQor
ICAgIGRidXBncmFkZWQgPSBGYWxzZQorICAgIHJldHJ5ID0gVHJ1ZQorICAgIGlmIGNoZWNrX3Rj
cF9wb3J0X29wZW4oJ2xvY2FsaG9zdCcsIDg3MTApOgorICAgICAgICBwcmludCgnRVJST1I6IFRo
ZXJlIGlzIHNvbWUgcHJvY2VzcyBhbHJlYWR5IGxpc3RlbmluZyBpbiBwb3J0IDgxNzAnKQorICAg
ICAgICByZXR1cm4gMQorICAgIHdoaWxlIHJldHJ5OgorICAgICAgICByZXRyeSA9IEZhbHNlCisg
ICAgICAgIHByaW50KCdTdGFydGluZyB0aGUgdHdpc3RkIHByb2Nlc3MgLi4uJykKKyAgICAgICAg
dHdpc3RkX2NtZCA9IFsndHdpc3RkJywgJy1sJywgYnVpbGRtYXN0ZXJsb2csICctbm95JywgJ2J1
aWxkYm90LnRhYyddCisgICAgICAgIHR3aXN0ZF9wcm9jZXNzID0gc3VicHJvY2Vzcy5Qb3Blbih0
d2lzdGRfY21kLCBjd2Q9bWFzdGVyX3dvcmtkaXIsCisgICAgICAgICAgICAgICAgICAgIHN0ZG91
dD1zdWJwcm9jZXNzLlBJUEUsIHN0ZGVycj1zdWJwcm9jZXNzLlNURE9VVCkKKyAgICAgICAgd2hp
bGUgdHdpc3RkX3Byb2Nlc3MucG9sbCgpIGlzIE5vbmU6CisgICAgICAgICAgICBpZiBjaGVja190
Y3BfcG9ydF9vcGVuKCdsb2NhbGhvc3QnLCA4NzEwKToKKyAgICAgICAgICAgICAgICBwcmludCgn
VGVzdCBidWlsZG1hc3RlciByZWFkeSEuXG5cbicKKyAgICAgICAgICAgICAgICAgICAgICsgJyAt
IFNlZSBidWlsZG1hc3RlciBsb2c6XG4nCisgICAgICAgICAgICAgICAgICAgICArICcgICAgIHRh
aWwgLWYgJXNcbicgJSBidWlsZG1hc3RlcmxvZworICAgICAgICAgICAgICAgICAgICAgKyAnIC0g
T3BlbiBhIGJyb3dzZXIgdG86XG4nCisgICAgICAgICAgICAgICAgICAgICArICcgICAgIGh0dHA6
Ly9sb2NhbGhvc3Q6ODcxMFxuJworICAgICAgICAgICAgICAgICAgICAgKyAnIC0gQ3JlZGVudGlh
bHMgZm9yIHRyaWdnZXJpbmcgbWFudWFsIGJ1aWxkczpcbicKKyAgICAgICAgICAgICAgICAgICAg
ICsgJyAgICAgbG9naW46ICAgICBjb21taXR0ZXJAd2Via2l0Lm9yZ1xuJworICAgICAgICAgICAg
ICAgICAgICAgKyAnICAgICBwYXNzd29yZDogIGNvbW1pdHRlcnBhc3N3b3JkXG4nKQorICAgICAg
ICAgICAgICAgIHdpdGggb3Blbihvcy5wYXRoLmpvaW4obWFzdGVyX3dvcmtkaXIsICcubWFzdGVy
LWlzLXJlYWR5JyksICd3JykgYXMgZjoKKyAgICAgICAgICAgICAgICAgICAgZi53cml0ZSgncmVh
ZHknKQorICAgICAgICAgICAgICAgIHR3aXN0ZF9wcm9jZXNzLndhaXQoKQorICAgICAgICAgICAg
ICAgIHJldHVybiAwCisgICAgICAgICAgICBzbGVlcCgxKQorICAgICAgICBzdGRvdXQsIHN0ZGVy
ciA9IHR3aXN0ZF9wcm9jZXNzLmNvbW11bmljYXRlKCkKKyAgICAgICAgaWYgdHdpc3RkX3Byb2Nl
c3MucmV0dXJuY29kZSA9PSAwIGFuZCB1cGdyYWRlX2RiX25lZWRlZChidWlsZG1hc3RlcmxvZykg
YW5kIG5vdCBkYnVwZ3JhZGVkOgorICAgICAgICAgICAgcmV0cnkgPSBUcnVlCisgICAgICAgICAg
ICBkYnVwZ3JhZGVkID0gVHJ1ZQorICAgICAgICAgICAgcHJpbnQoJ1VwZ3JhZGluZyB0aGUgZGF0
YWJhc2UgLi4uJykKKyAgICAgICAgICAgIHVwZ3JhZGVfY21kID0gWydidWlsZGJvdCcsICd1cGdy
YWRlLW1hc3RlcicsIG1hc3Rlcl93b3JrZGlyXQorICAgICAgICAgICAgdXBncmFkZV9wcm9jZXNz
ID0gc3VicHJvY2Vzcy5Qb3Blbih1cGdyYWRlX2NtZCwgY3dkPW1hc3Rlcl93b3JrZGlyLAorICAg
ICAgICAgICAgICAgICAgICBzdGRvdXQ9c3VicHJvY2Vzcy5QSVBFLCBzdGRlcnI9c3VicHJvY2Vz
cy5TVERPVVQpCisgICAgICAgICAgICBzdGRvdXQsIHN0ZGVyciA9IHVwZ3JhZGVfcHJvY2Vzcy5j
b21tdW5pY2F0ZSgpCisgICAgICAgICAgICBwcmludF9pZl9lcnJvcl9zdGRvdXRfc3RkZXJyKHVw
Z3JhZGVfY21kLCB1cGdyYWRlX3Byb2Nlc3MucmV0dXJuY29kZSwgc3Rkb3V0LCBzdGRlcnIpCisg
ICAgICAgIGVsc2U6CisgICAgICAgICAgICBwcmludF9pZl9lcnJvcl9zdGRvdXRfc3RkZXJyKHR3
aXN0ZF9jbWQsIHR3aXN0ZF9wcm9jZXNzLnJldHVybmNvZGUsIHN0ZG91dCwgc3RkZXJyLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnQ2hlY2sgdGhlIGxvZyBhdCAl
cycgJSBidWlsZG1hc3RlcmxvZykKKyAgICByZXR1cm4gMAorCisKK2RlZiBnZXRfbGlzdF93b3Jr
ZXJzKG1hc3Rlcl93b3JrZGlyKToKKyAgICBwYXNzd29yZF9saXN0ID0gb3MucGF0aC5qb2luKG1h
c3Rlcl93b3JrZGlyLCAncGFzc3dvcmRzLmpzb24nKQorICAgIHdpdGggb3BlbihwYXNzd29yZF9s
aXN0KSBhcyBmOgorICAgICAgICBwYXNzd29yZHMgPSBqc29uLmxvYWQoZikKKyAgICBsaXN0X3dv
cmtlcnMgPSBbXQorICAgIGZvciB3b3JrZXIgaW4gcGFzc3dvcmRzLmtleXMoKToKKyAgICAgICAg
bGlzdF93b3JrZXJzLmFwcGVuZChzdHIod29ya2VyKSkKKyAgICByZXR1cm4gbGlzdF93b3JrZXJz
CisKKworZGVmIHN0YXJ0X3dvcmtlcihiYXNlX3dvcmtkaXIsIHdvcmtlcik6CisgICAgIyBUaGlz
IGlzIHN0YXJ0ZWQgdmlhIG11bHRpcHJvY2Vzc2luZy4gV2Ugc2V0IGEgbmV3IHByb2Nlc3MgZ3Jv
dXAgaGVyZQorICAgICMgdG8gYmUgYWJsZSB0byByZWxpYWJseSBraWxsIHRoaXMgc3VicHJvY2Vz
cyBhbmQgYWxsIG9mIGl0cyBjaGlsZCBvbiBjbGVhbi4KKyAgICBvcy5zZXRzaWQoKQorICAgIHdv
cmtlcl93b3JrZGlyID0gb3MucGF0aC5qb2luKGJhc2Vfd29ya2Rpciwgd29ya2VyKQorICAgIG9z
Lm1rZGlyKHdvcmtlcl93b3JrZGlyKQorICAgIHdpdGggb3Blbihvcy5wYXRoLmpvaW4od29ya2Vy
X3dvcmtkaXIsICdidWlsZGJvdC50YWMnKSwgJ3cnKSBhcyBmOgorICAgICAgICBmLndyaXRlKHdv
cmtlcl9idWlsZGJvdF9tYXN0ZXJfdGFjICUgeyd3b3JrZXInOiB3b3JrZXJ9KQorICAgIHR3aXN0
ZF9jbWQgPSBbJ3R3aXN0ZCcsICctbCcsICd3b3JrZXIubG9nJywgJy1ub3knLCAnYnVpbGRib3Qu
dGFjJ10KKyAgICB0d2lzdGRfd29ya2VyX3Byb2Nlc3MgPSBzdWJwcm9jZXNzLlBvcGVuKHR3aXN0
ZF9jbWQsIGN3ZD13b3JrZXJfd29ya2RpciwKKyAgICAgICAgc3Rkb3V0PXN1YnByb2Nlc3MuUElQ
RSwgc3RkZXJyPXN1YnByb2Nlc3MuU1RET1VUKQorICAgIHRyeToKKyAgICAgICAgc3Rkb3V0LCBz
dGRlcnIgPSB0d2lzdGRfd29ya2VyX3Byb2Nlc3MuY29tbXVuaWNhdGUoKQorICAgIGV4Y2VwdDoK
KyAgICAgICAgdHdpc3RkX3dvcmtlcl9wcm9jZXNzLmtpbGwoKQorICAgICAgICByZXR1cm4KKyAg
ICBwcmludF9pZl9lcnJvcl9zdGRvdXRfc3RkZXJyKHR3aXN0ZF9jbWQsIHR3aXN0ZF93b3JrZXJf
cHJvY2Vzcy5yZXR1cm5jb2RlLCBzdGRvdXQsIHN0ZGVyciwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICdDaGVjayB0aGUgbG9nIGF0ICVzJyAlIG9zLnBhdGguam9pbih3b3JrZXJf
d29ya2RpciwgJ3dvcmtlci5sb2cnKSkKKworCitkZWYgY2xlYW4odGVtcF9kaXIpOgorICAgIGlm
IG9zLnBhdGguaXNkaXIodGVtcF9kaXIpOgorICAgICAgICBwcmludCgnXG5cbkNsZWFuaW5nICVz
IC4uLiBcbicgJSAodGVtcF9kaXIpKQorICAgICAgICAjIHNodXRpbC5ybXRyZWUgY2FuIGZhaWwg
aWYgd2UgaG9sZCBhbiBvcGVuIGZpbGUgZGVzY3JpcHRvciBvbiB0ZW1wX2RpcgorICAgICAgICAj
ICh3aGljaCBpcyB2ZXJ5IGxpa2VseSB3aGVuIGNsZWFuaW5nKSBvciBpZiB0ZW1wX2RpciBpcyBh
IE5GUyBtb3VudC4KKyAgICAgICAgIyBVc2Ugcm0gaW5zdGVhZCB0aGF0IGFsd2F5cyB3b3Jrcy4K
KyAgICAgICAgcm0gPSBzdWJwcm9jZXNzLlBvcGVuKFsncm0nLCAnLWZyJywgdGVtcF9kaXJdKQor
ICAgICAgICBybS53YWl0KCkKKworCitkZWYgY21kX2V4aXN0cyhjbWQpOgorICAgIHJldHVybiBh
bnkob3MuYWNjZXNzKG9zLnBhdGguam9pbihwYXRoLCBjbWQpLCBvcy5YX09LKQorICAgICAgICAg
ICAgICAgZm9yIHBhdGggaW4gb3MuZW52aXJvblsnUEFUSCddLnNwbGl0KG9zLnBhdGhzZXApKQor
CisKK2RlZiBjaGVja19idWlsZGJvdF9pbnN0YWxsZWQoKToKKyAgICBpZiBjbWRfZXhpc3RzKCd0
d2lzdGQnKSBhbmQgY21kX2V4aXN0cygnYnVpbGRib3QnKToKKyAgICAgICAgcmV0dXJuCisgICAg
cmFpc2UgUnVudGltZUVycm9yKCdCdWlsZGJvdCBpcyBub3QgaW5zdGFsbGVkLicpCisKKworZGVm
IHNldHVwX3ZpcnR1YWxlbnYoYmFzZV93b3JrZGlyX3RlbXApOgorICAgIGlmIGNtZF9leGlzdHMo
J3ZpcnR1YWxlbnYnKToKKyAgICAgICAgcHJpbnQoJ1NldHRpbmcgdXAgdmlydHVhbGVudiBhdCAl
cyAuLi4gJyAlIGJhc2Vfd29ya2Rpcl90ZW1wKQorICAgICAgICB2aXJ0dWFsZW52X2NtZCA9IFsn
dmlydHVhbGVudicsICctcCcsICdweXRob24yJywgJ3ZlbnYnXQorICAgICAgICB2aXJ0dWFsZW52
X3Byb2Nlc3MgPSBzdWJwcm9jZXNzLlBvcGVuKHZpcnR1YWxlbnZfY21kLCBjd2Q9YmFzZV93b3Jr
ZGlyX3RlbXAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBzdGRvdXQ9c3VicHJvY2Vzcy5QSVBFLCBzdGRlcnI9c3VicHJvY2Vzcy5TVERPVVQpCisgICAg
ICAgIHN0ZG91dCwgc3RkZXJyID0gdmlydHVhbGVudl9wcm9jZXNzLmNvbW11bmljYXRlKCkKKyAg
ICAgICAgcHJpbnRfaWZfZXJyb3Jfc3Rkb3V0X3N0ZGVycih2aXJ0dWFsZW52X2NtZCwgdmlydHVh
bGVudl9wcm9jZXNzLnJldHVybmNvZGUsIHN0ZG91dCwgc3RkZXJyKQorICAgICAgICB2aXJ0dWFs
ZW52X2JpbmRpciA9IG9zLnBhdGguam9pbihiYXNlX3dvcmtkaXJfdGVtcCwgJ3ZlbnYnLCAnYmlu
JykKKyAgICAgICAgdmlydHVhbGVudl9waXAgPSBvcy5wYXRoLmpvaW4odmlydHVhbGVudl9iaW5k
aXIsICdwaXAnKQorICAgICAgICBpZiBub3Qgb3MuYWNjZXNzKHZpcnR1YWxlbnZfcGlwLCBvcy5Y
X09LKToKKyAgICAgICAgICAgIHByaW50KCdTb21ldGhpbmcgd2VudCB3cm9uZyBzZXR0aW5nIHVw
IHZpcnR1YWxlbnYnCisgICAgICAgICAgICAgICAgICAnVHJ5aW5nIHRvIGNvbnRpbnVlIHVzaW5n
IHRoZSBzeXN0ZW0gdmVyc2lvbiBvZiBidWlsZGJvdCcpCisgICAgICAgICAgICByZXR1cm4KKyAg
ICAgICAgcHJpbnQoJ1NldHRpbmcgdXAgYnVpbGRib3QgZGVwZW5kZW5jaWVzIG9uIHRoZSB2aXJ0
dWFsZW52IC4uLiAnKQorICAgICAgICAjIFRoZSBpZGVhIGlzIHRvIGluc3RhbGwgdGhlIHZlcnkg
c2FtZSB2ZXJzaW9uIG9mIGJ1aWxkYm90IGFuZCBpdHMKKyAgICAgICAgIyBkZXBlbmRlbmNpZXMg
dGhhbiB0aGUgb25lcyB1c2VkIGZvciBydW5uaW5nIGh0dHBzOi8vYnVpbGQud2Via2l0Lm9yZy9h
Ym91dAorICAgICAgICBwaXBfY21kID0gW3ZpcnR1YWxlbnZfcGlwLCAnaW5zdGFsbCcsCisgICAg
ICAgICAgICAgICAgICAgICdidWlsZGJvdD09MC44LjZwMScsCisgICAgICAgICAgICAgICAgICAg
ICdidWlsZGJvdC1zbGF2ZT09MC44LjZwMScsCisgICAgICAgICAgICAgICAgICAgICd0d2lzdGVk
PT0xMi4xLjAnLAorICAgICAgICAgICAgICAgICAgICAnamluamEyPT0yLjYnLAorICAgICAgICAg
ICAgICAgICAgICAnc3FsYWxjaGVteT09MC43LjgnLAorICAgICAgICAgICAgICAgICAgICAnc3Fs
YWxjaGVteS1taWdyYXRlPT0wLjcuMiddCisgICAgICAgIHBpcF9wcm9jZXNzID0gc3VicHJvY2Vz
cy5Qb3BlbihwaXBfY21kLCBjd2Q9YmFzZV93b3JrZGlyX3RlbXAsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBzdGRvdXQ9c3VicHJvY2Vzcy5QSVBFLCBzdGRlcnI9c3Vi
cHJvY2Vzcy5TVERPVVQpCisgICAgICAgIHN0ZG91dCwgc3RkZXJyID0gcGlwX3Byb2Nlc3MuY29t
bXVuaWNhdGUoKQorICAgICAgICBwcmludF9pZl9lcnJvcl9zdGRvdXRfc3RkZXJyKHBpcF9jbWQs
IHBpcF9wcm9jZXNzLnJldHVybmNvZGUsIHN0ZG91dCwgc3RkZXJyKQorICAgICAgICBvcy5lbnZp
cm9uWydQQVRIJ10gPSB2aXJ0dWFsZW52X2JpbmRpciArICc6JyArIG9zLmVudmlyb25bJ1BBVEgn
XQorICAgICAgICByZXR1cm4KKyAgICBwcmludCgnV0FSTklORzogdmlydHVhbGVudiBub3QgaW5z
dGFsbGVkLiAnCisgICAgICAgICAgJ1RyeWluZyB0byBjb250aW51ZSB1c2luZyB0aGUgc3lzdGVt
IHZlcnNpb24gb2YgYnVpbGRib3QnKQorCisKK2RlZiBjb25maWdkaXJfaXNfdmFsaWQoY29uZmln
ZGlyKToKKyAgICByZXR1cm4ob3MucGF0aC5pc2Rpcihjb25maWdkaXIpIGFuZAorICAgICAgICAg
ICBvcy5wYXRoLmlzZmlsZShvcy5wYXRoLmpvaW4oY29uZmlnZGlyLCAnY29uZmlnLmpzb24nKSkg
YW5kCisgICAgICAgICAgIG9zLnBhdGguaXNmaWxlKG9zLnBhdGguam9pbihjb25maWdkaXIsICdt
YXN0ZXIuY2ZnJykpIGFuZAorICAgICAgICAgICBvcy5hY2Nlc3Mob3MucGF0aC5qb2luKGNvbmZp
Z2RpciwgJ21ha2VfcGFzc3dvcmRzX2pzb24ucHknKSwgb3MuWF9PSykpCisKKworZGVmIG1haW4o
Y29uZmlnZGlyLCBiYXNldGVtcGRpcj1Ob25lLCBub19jbGVhbj1GYWxzZSwgbm9fd29ya2Vycz1G
YWxzZSwgdXNlX3N5c3RlbV92ZXJzaW9uPUZhbHNlKToKKyAgICBjb25maWdkaXIgPSBvcy5wYXRo
LmFic3BhdGgob3MucGF0aC5yZWFscGF0aChjb25maWdkaXIpKQorICAgIGlmIG5vdCBjb25maWdk
aXJfaXNfdmFsaWQoY29uZmlnZGlyKToKKyAgICAgICAgcmFpc2UgVmFsdWVFcnJvcignVGhlIGNv
bmZpZ2RpciAlcyBkb250IGNvbnRhaW5zIHRoZSBidWlsZG1hc3RlciBmaWxlcyBleHBlY3RlZCBi
eSB0aGlzIHNjcmlwdCcgJSBjb25maWdkaXIpCisgICAgYmFzZV93b3JrZGlyX3RlbXAgPSBvcy5w
YXRoLmFic3BhdGgob3MucGF0aC5yZWFscGF0aChjcmVhdGVfdGVtcGRpcihiYXNldGVtcGRpcikp
KQorICAgIGlmIGJhc2Vfd29ya2Rpcl90ZW1wLnN0YXJ0c3dpdGgoY29uZmlnZGlyKToKKyAgICAg
ICAgcmFpc2UgVmFsdWVFcnJvcignVGhlIHRlbXBvcmFsIHdvcmtpbmcgZGlyZWN0b3J5ICVzIGNh
bnQgYmUgbG9jYXRlZCBpbnNpZGUgY29uZmlnZGlyICVzJyAlIChiYXNlX3dvcmtkaXJfdGVtcCwg
Y29uZmlnZGlyKSkKKyAgICB0cnk6CisgICAgICAgIGlmIG5vdCB1c2Vfc3lzdGVtX3ZlcnNpb246
CisgICAgICAgICAgICBzZXR1cF92aXJ0dWFsZW52KGJhc2Vfd29ya2Rpcl90ZW1wKQorICAgICAg
ICBjaGVja19idWlsZGJvdF9pbnN0YWxsZWQoKQorICAgICAgICBtYXN0ZXJfd29ya2RpciA9IHNl
dHVwX21hc3Rlcl93b3JrZGlyKGNvbmZpZ2RpciwgYmFzZV93b3JrZGlyX3RlbXApCisgICAgICAg
IG1hc3Rlcl9ydW5uZXIgPSBtdWx0aXByb2Nlc3NpbmcuUHJvY2Vzcyh0YXJnZXQ9c3RhcnRfbWFz
dGVyLCBhcmdzPShtYXN0ZXJfd29ya2RpciwpKQorICAgICAgICBtYXN0ZXJfcnVubmVyLnN0YXJ0
KCkKKyAgICAgICAgd2FpdF9mb3JfbWFzdGVyX3JlYWR5KG1hc3Rlcl93b3JrZGlyKQorICAgICAg
ICBpZiBub193b3JrZXJzOgorICAgICAgICAgICAgcHJpbnQoJyAtIFRvIG1hbnVhbGx5IGF0dGFj
aCBhIGJ1aWxkIHdvcmtlciB1c2UgdGhpcyBpbmZvOlxuJworICAgICAgICAgICAgICAgICArICcg
ICAgIFRDUCBwb3J0IGZvciB0aGUgd29ya2VyLXRvLW1hc3RlciBjb25uZWN0aW9uOiAxNzAwMFxu
JworICAgICAgICAgICAgICAgICArICcgICAgIHdvcmtlci1pZDogdGhlIG9uZSBkZWZpbmVkIGF0
ICVzXG4nICUgb3MucGF0aC5qb2luKG1hc3Rlcl93b3JrZGlyLCAncGFzc3dvcmRzLmpzb24nKQor
ICAgICAgICAgICAgICAgICArICcgICAgIHBhc3N3b3JkOiAgMTIzNFxuJykKKyAgICAgICAgZWxz
ZToKKyAgICAgICAgICAgIHdvcmtlcl9ydW5uZXJzID0gW10KKyAgICAgICAgICAgIGZvciB3b3Jr
ZXIgaW4gZ2V0X2xpc3Rfd29ya2VycyhtYXN0ZXJfd29ya2Rpcik6CisgICAgICAgICAgICAgICAg
d29ya2VyX3J1bm5lciA9IG11bHRpcHJvY2Vzc2luZy5Qcm9jZXNzKHRhcmdldD1zdGFydF93b3Jr
ZXIsIGFyZ3M9KGJhc2Vfd29ya2Rpcl90ZW1wLCB3b3JrZXIsKSkKKyAgICAgICAgICAgICAgICB3
b3JrZXJfcnVubmVyLnN0YXJ0KCkKKyAgICAgICAgICAgICAgICB3b3JrZXJfcnVubmVycy5hcHBl
bmQod29ya2VyX3J1bm5lcikKKyAgICAgICAgICAgIHByaW50KCcgLSBXb3JrZXJzIHN0YXJ0ZWQh
LlxuJworICAgICAgICAgICAgICAgICArICcgICAgIENoZWNrIHRoZSBsb2cgZm9yIGVhY2ggb25l
IGF0ICVzLyR7d29ya2VyLW5hbWUtaWR9L3dvcmtlci5sb2dcbicgJSBiYXNlX3dvcmtkaXJfdGVt
cAorICAgICAgICAgICAgICAgICArICcgICAgIHRhaWwgLWYgJXMvKi93b3JrZXIubG9nXG4nICUg
YmFzZV93b3JrZGlyX3RlbXApCisgICAgICAgICAgICBmb3Igd29ya2VyX3J1bm5lciBpbiB3b3Jr
ZXJfcnVubmVyczoKKyAgICAgICAgICAgICAgICB3b3JrZXJfcnVubmVyLmpvaW4oKQorICAgICAg
ICBtYXN0ZXJfcnVubmVyLmpvaW4oKQorICAgIGV4Y2VwdDoKKyAgICAgICAgdHJhY2ViYWNrLnBy
aW50X2V4YygpCisgICAgZmluYWxseToKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgIyBUaGUg
Y2hpbGRyZW4gbWF5IGV4aXQgYmV0d2VlbiB0aGUgY2hlY2sgYW5kIHRoZSBraWxsIGNhbGwuCisg
ICAgICAgICAgICAjIElnbm9yZSBhbnkgZXhjZXB0aW9uIHJhaXNlZCBoZXJlLgorICAgICAgICAg
ICAgZm9yIGMgaW4gbXVsdGlwcm9jZXNzaW5nLmFjdGl2ZV9jaGlsZHJlbigpOgorICAgICAgICAg
ICAgICAgICMgU2VuZCB0aGUgc2lnbmFsIHRvIHRoZSB3aG9sZSBwcm9jZXNzIGdyb3VwLgorICAg
ICAgICAgICAgICAgICMgT3RoZXJ3aXNlIHNvbWUgdHdpc3RkIHN1Yi1jaGlsZHMgY2FuIHJlbWFp
biBhbGl2ZS4KKyAgICAgICAgICAgICAgICBvcy5raWxscGcob3MuZ2V0cGdpZChjLnBpZCksIHNp
Z25hbC5TSUdLSUxMKQorICAgICAgICBleGNlcHQ6CisgICAgICAgICAgICBwYXNzCisgICAgICAg
IGlmIG5vdCBub19jbGVhbjoKKyAgICAgICAgICAgIGNsZWFuKGJhc2Vfd29ya2Rpcl90ZW1wKQor
ICAgICAgICBzeXMuZXhpdCgwKQorCisKK2lmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CisgICAg
cGFyc2VyID0gYXJncGFyc2UuQXJndW1lbnRQYXJzZXIoKQorICAgIHBhcnNlci5hZGRfYXJndW1l
bnQoJy0tY29uZmlnLWRpcicsIGhlbHA9J0RpcmVjdG9yeSB3aGVyZSB0byBidWlsZCBtYXN0ZXIg
Y29uZmlnIGZpbGVzIGFyZS4gJworICAgICAgICAgICAgICAgICAgICAgICAgJ0RlZmF1bHMgdG8g
dGhlIGN1cnJlbnQgZGlyZWN0b3J5IHdoZXJlIHRoaXMgc2NyaXB0IGlzIGxvY2F0ZWQnLAorICAg
ICAgICAgICAgICAgICAgICAgICAgZGVzdD0nY29uZmlnZGlyJywgdHlwZT1zdHIsCisgICAgICAg
ICAgICAgICAgICAgICAgICBkZWZhdWx0PW9zLnBhdGguZGlybmFtZShfX2ZpbGVfXykpCisgICAg
cGFyc2VyLmFkZF9hcmd1bWVudCgnLS1iYXNlLXRlbXAtZGlyJywgaGVscD0nRGlyZWN0b3J5IHdo
ZXJlIHRvIGNyZWF0ZSB0aGUgdGVzdCBidWlsZG1hc3RlciBhbmQgd29ya2Vycy4gJworICAgICAg
ICAgICAgICAgICAgICAgICAgJy90bXAgY2FuIGhhdmUgbm90IGVub3VnaCBmcmVlIHNwYWNlIGlm
IHlvdSB3YW50IHRvIHRyaWdnZXIgc29tZSB0ZXN0IGJ1aWxkIHdpdGggdGhlIHdvcmtlcnMnLAor
ICAgICAgICAgICAgICAgICAgICAgICAgZGVzdD0nYmFzZXRlbXBkaXInLCBkZWZhdWx0PU5vbmUs
IHR5cGU9c3RyKQorICAgIHBhcnNlci5hZGRfYXJndW1lbnQoJy0tbm8tY2xlYW4nLCBoZWxwPSdE
b250IHRyeSB0byBjbGVhbiB0aGUgd29ya2luZyBkaXInLAorICAgICAgICAgICAgICAgICAgICAg
ICAgZGVzdD0nbm9fY2xlYW4nLCBhY3Rpb249J3N0b3JlX3RydWUnKQorICAgIHBhcnNlci5hZGRf
YXJndW1lbnQoJy0tbm8td29ya2VycycsIGhlbHA9J0RvbnQgdHJ5IHRvIHN0YXJ0IHRoZSB0ZXN0
IHdvcmtlcnMnLAorICAgICAgICAgICAgICAgICAgICAgICAgZGVzdD0nbm9fd29ya2VycycsIGFj
dGlvbj0nc3RvcmVfdHJ1ZScpCisgICAgcGFyc2VyLmFkZF9hcmd1bWVudCgnLS11c2Utc3lzdGVt
LXZlcnNpb24nLCBoZWxwPSdJbnN0ZWFkIG9mIHNldHRpbmcgdXAgYSB2aXJ0dWFsZW52IHdpdGgg
dGhlIGJ1aWxkYm90IHZlcnNpb24gJworICAgICAgICAgICAgICAgICAgICAgICAgJ3VzZWQgYnkg
YnVpbGQud2Via2l0Lm9ydCwgdXNlIHRoZSBpbnN0YWxsZWQgc3lzdGVtIHZlcnNpb25zIG9mIGl0
JywKKyAgICAgICAgICAgICAgICAgICAgICAgIGRlc3Q9J3VzZV9zeXN0ZW1fdmVyc2lvbicsIGFj
dGlvbj0nc3RvcmVfdHJ1ZScpCisgICAgYXJncyA9IHBhcnNlci5wYXJzZV9hcmdzKCkKKyAgICBt
YWluKGFyZ3MuY29uZmlnZGlyLCBhcmdzLmJhc2V0ZW1wZGlyLCBhcmdzLm5vX2NsZWFuLCBhcmdz
Lm5vX3dvcmtlcnMsIGFyZ3MudXNlX3N5c3RlbV92ZXJzaW9uKQo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>303246</attachid>
            <date>2017-03-02 14:45:02 -0800</date>
            <delta_ts>2017-11-30 11:29:58 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-169084-20170302234500.patch</filename>
            <type>text/plain</type>
            <size>17726</size>
            <attacher name="Carlos Alberto Lopez Perez">clopez</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjEzMjg5CmRpZmYgLS1naXQgYS9Ub29scy9DaGFuZ2VMb2cg
Yi9Ub29scy9DaGFuZ2VMb2cKaW5kZXggYzFkMGEzZjVkMzIxZTczMDc1MzZlODUxMTMxMzFmYjMw
NmI1YWU3OC4uZGYzMGJmNTYyOTY5OWQwN2U5YjQ2YThiYmI5MzJkM2Q1YWY3NzA2YiAxMDA2NDQK
LS0tIGEvVG9vbHMvQ2hhbmdlTG9nCisrKyBiL1Rvb2xzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDM4
IEBACisyMDE3LTAzLTAyICBDYXJsb3MgQWxiZXJ0byBMb3BleiBQZXJleiAgPGNsb3BlekBpZ2Fs
aWEuY29tPgorCisgICAgICAgIEFkZCBhIHNjcmlwdCBmb3IgYXV0b21hdGljYWxseSBydW5uaW5n
IHRoZSBidWlsZGJvdCBjb25maWd1cmF0aW9ucyBvbiBhIHRlc3QgZW52aXJvbm1lbnQuCisgICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjkwODQKKworICAg
ICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUaGlzIG5ldyBzY3Jp
cHQgZG9lcyB0aGUgZm9sbG93aW5nOgorICAgICAgICAtIENyZWF0ZXMgYSB0ZW1wb3JhbCB3b3Jr
aW5nZGlyLgorICAgICAgICAtIEluc3RhbGxzIGJ1aWxkYm90IGFuZCBpdHMgZGVwZW5kZW5jaWVz
IHRoZXJlICh2ZXJ5IHNhbWUgdmVyc2lvbiB1c2VkIGJ5IHRoZSB3ZWJraXQub3JnIGJ1aWxkYm90
IG1hc3RlciBodHRwczovL2J1aWxkLndlYmtpdC5vcmcvYWJvdXQgKS4KKyAgICAgICAgICBUaGlz
IGlzIGltcG9ydGFudCBhcyB0aGVyZSBhcmUgcHJvYmxlbXMgdGhhdCB0aGF0IG1heSBub3QgYmUg
ZGV0ZWN0ZWQgaWYgeW91IGRvbid0IHRlc3Qgd2l0aCB0aGUgc2FtZSB2ZXJzaW9uIHRoYXQgd2ls
bCBiZSB1c2VkIG9uIHByb2R1Y3Rpb24uCisgICAgICAgIC0gQ29waWVzIHRoZSBidWlsZG1hc3Rl
ciBjb25maWcgZmlsZXMgdG8gdGhlIHRlbXBvcmFsIHdvcmtpbmdkaXIuCisgICAgICAgIC0gUGVy
Zm9ybXMgdGhlIHJlcXVpcmVkIHN0ZXBzIHRvIHN0YXJ0IGEgYnVpbGRtYXN0ZXIuCisgICAgICAg
IC0gQ3JlYXRlcyB0aGUgcmVxdWlyZWQgY29uZmlnIGZvciBlYWNoIHNsYXZlIGFuZCBzdGFydHMg
YWxsIG9mIHRoZW0uCisKKyAgICAgICAgVGhlIHRlc3QgYnVpbGRtYXN0ZXIgc2hvdWxkIGJlIGFj
Y2Vzc2libGUgYXQgaHR0cDovL2xvY2FsaG9zdDo4NzEwLyBhbGxvd2luZyB0byB0cmlnZ2VyIG1h
bnVhbCBidWlsZHMuCisgICAgICAgIFRoaXMgYWxsb3dzIHRvIHRlc3QgYW55IGNvbmZpZ3VyYXRp
b24gY2hhbmdlcyBvbiB0aGlzIHRlc3QgZW52aXJvbm1lbnQgdGhhdCBpcyBwcmV0dHkgbXVjaCBp
ZGVudGljYWwgdG8gdGhlIHByb2R1Y3Rpb24gb25lLgorCisgICAgICAgICogQnVpbGRTbGF2ZVN1
cHBvcnQvYnVpbGQud2Via2l0Lm9yZy1jb25maWcvcnVuLWJ1aWxkYm90LXRlc3QucHk6IEFkZGVk
LgorICAgICAgICAoY2hlY2tfdGNwX3BvcnRfb3Blbik6CisgICAgICAgICh1cGdyYWRlX2RiX25l
ZWRlZCk6CisgICAgICAgIChjcmVhdGVfdGVtcGRpcik6CisgICAgICAgIChwcmludF9pZl9lcnJv
cl9zdGRvdXRfc3RkZXJyKToKKyAgICAgICAgKHNldHVwX21hc3Rlcl93b3JrZGlyKToKKyAgICAg
ICAgKHdhaXRfZm9yX21hc3Rlcl9yZWFkeSk6CisgICAgICAgIChzdGFydF9tYXN0ZXIpOgorICAg
ICAgICAoZ2V0X2xpc3Rfd29ya2Vycyk6CisgICAgICAgIChzdGFydF93b3JrZXIpOgorICAgICAg
ICAoY2xlYW4pOgorICAgICAgICAoY21kX2V4aXN0cyk6CisgICAgICAgIChjaGVja19idWlsZGJv
dF9pbnN0YWxsZWQpOgorICAgICAgICAoc2V0dXBfdmlydHVhbGVudik6CisgICAgICAgIChjb25m
aWdkaXJfaXNfdmFsaWQpOgorICAgICAgICAobWFpbik6CisKIDIwMTctMDMtMDIgIFJ5YW4gSGFk
ZGFkICA8cnlhbmhhZGRhZEBhcHBsZS5jb20+CiAKICAgICAgICAgVW5yZXZpZXdlZCwgcm9sbGlu
ZyBvdXQgcjIxMzI4MS4KZGlmZiAtLWdpdCBhL1Rvb2xzL0J1aWxkU2xhdmVTdXBwb3J0L2J1aWxk
LndlYmtpdC5vcmctY29uZmlnL3J1bi1idWlsZGJvdC10ZXN0LnB5IGIvVG9vbHMvQnVpbGRTbGF2
ZVN1cHBvcnQvYnVpbGQud2Via2l0Lm9yZy1jb25maWcvcnVuLWJ1aWxkYm90LXRlc3QucHkKbmV3
IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMC4uNTUwNjQ0MWUwODllMzA1NWNmNjU5NzM5YTcwODMxMWJlZjMzYzIxOQotLS0gL2Rl
di9udWxsCisrKyBiL1Rvb2xzL0J1aWxkU2xhdmVTdXBwb3J0L2J1aWxkLndlYmtpdC5vcmctY29u
ZmlnL3J1bi1idWlsZGJvdC10ZXN0LnB5CkBAIC0wLDAgKzEsMzQ3IEBACisjIS91c3IvYmluL2Vu
diBweXRob24KKyMKKyMgQ29weXJpZ2h0IChDKSAyMDE3IElnYWxpYSBTLkwuCisjCisjIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMgYXJlCisjIG1ldDoKKyMKKyMgICAgICogUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
IworIyAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlCisjIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyMgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorIyBkaXN0cmlidXRpb24uCisjCisj
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBD
T05UUklCVVRPUlMKKyMgIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyMgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisjIEEgUEFSVElDVUxBUiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisj
IE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLAorIyBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisjIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorIyBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkK
KyMgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAorIyAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyMgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyMKK2ltcG9ydCBz
eXMKK2ltcG9ydCBzaWduYWwKK2ltcG9ydCBvcworaW1wb3J0IGFyZ3BhcnNlCitpbXBvcnQgc3Vi
cHJvY2VzcworaW1wb3J0IHRlbXBmaWxlCitpbXBvcnQgc2h1dGlsCitpbXBvcnQgc29ja2V0Citp
bXBvcnQganNvbgoraW1wb3J0IHRyYWNlYmFjaworaW1wb3J0IG11bHRpcHJvY2Vzc2luZworZnJv
bSB0aW1lIGltcG9ydCBzbGVlcAorCit0ZXN0X2J1aWxkYm90X21hc3Rlcl90YWMgPSAiIiIKK2lt
cG9ydCBvcworZnJvbSB0d2lzdGVkLmFwcGxpY2F0aW9uIGltcG9ydCBzZXJ2aWNlCit0cnk6Cisg
ICAgZnJvbSBidWlsZGJvdC5tYXN0ZXIuYm90IGltcG9ydCBCdWlsZE1hc3RlcgorZXhjZXB0Ogor
ICAgIGZyb20gYnVpbGRib3QubWFzdGVyIGltcG9ydCBCdWlsZE1hc3RlcgorCitiYXNlZGlyID0g
b3MucGF0aC5kaXJuYW1lKG9zLnBhdGgucmVhbHBhdGgoX19maWxlX18pKQorY29uZmlnZmlsZSA9
IHInbWFzdGVyLmNmZycKKworYXBwbGljYXRpb24gPSBzZXJ2aWNlLkFwcGxpY2F0aW9uKCdidWls
ZG1hc3RlcicpCitCdWlsZE1hc3RlcihiYXNlZGlyLCBjb25maWdmaWxlKS5zZXRTZXJ2aWNlUGFy
ZW50KGFwcGxpY2F0aW9uKQorIiIiCisKK3dvcmtlcl9idWlsZGJvdF9tYXN0ZXJfdGFjID0gIiIi
CitpbXBvcnQgb3MKK2Zyb20gdHdpc3RlZC5hcHBsaWNhdGlvbiBpbXBvcnQgc2VydmljZQorZnJv
bSBidWlsZHNsYXZlLmJvdCBpbXBvcnQgQnVpbGRTbGF2ZQorCitiYXNlZGlyID0gb3MucGF0aC5k
aXJuYW1lKG9zLnBhdGgucmVhbHBhdGgoX19maWxlX18pKQorYnVpbGRtYXN0ZXJfaG9zdCA9ICds
b2NhbGhvc3QnCitwb3J0ID0gMTcwMDAKK3NsYXZlbmFtZSA9ICclKHdvcmtlcilzJworcGFzc3dk
ID0gJzEyMzQnCitrZWVwYWxpdmUgPSA2MDAKK3VzZXB0eSA9IDEKKworYXBwbGljYXRpb24gPSBz
ZXJ2aWNlLkFwcGxpY2F0aW9uKCdidWlsZHNsYXZlJykKK0J1aWxkU2xhdmUoYnVpbGRtYXN0ZXJf
aG9zdCwgcG9ydCwgc2xhdmVuYW1lLCBwYXNzd2QsIGJhc2VkaXIsIGtlZXBhbGl2ZSwgdXNlcHR5
KS5zZXRTZXJ2aWNlUGFyZW50KGFwcGxpY2F0aW9uKQorIiIiCisKKworZGVmIGNoZWNrX3RjcF9w
b3J0X29wZW4oYWRkcmVzcywgcG9ydCk6CisgICAgcyA9IHNvY2tldC5zb2NrZXQoKQorICAgIHRy
eToKKyAgICAgICAgcy5jb25uZWN0KChhZGRyZXNzLCBwb3J0KSkKKyAgICAgICAgcmV0dXJuIFRy
dWUKKyAgICBleGNlcHQ6CisgICAgICAgIHJldHVybiBGYWxzZQorCisKK2RlZiB1cGdyYWRlX2Ri
X25lZWRlZChsb2cpOgorICAgIHRyeToKKyAgICAgICAgd2l0aCBvcGVuKGxvZykgYXMgZjoKKyAg
ICAgICAgICAgIGZvciBsIGluIGY6CisgICAgICAgICAgICAgICAgaWYgJ3VwZ3JhZGUgdGhlIGRh
dGFiYXNlJyBpbiBsOgorICAgICAgICAgICAgICAgICAgICByZXR1cm4gVHJ1ZQorICAgIGV4Y2Vw
dDoKKyAgICAgICAgcmV0dXJuIEZhbHNlCisgICAgcmV0dXJuIEZhbHNlCisKKworZGVmIGNyZWF0
ZV90ZW1wZGlyKHRtcGRpcj1Ob25lKToKKyAgICBpZiB0bXBkaXIgaXMgbm90IE5vbmU6CisgICAg
ICAgIGlmIG5vdCBvcy5wYXRoLmlzZGlyKHRtcGRpcik6CisgICAgICAgICAgICByYWlzZSBWYWx1
ZUVycm9yKCclcyBpcyBub3QgYSBkaXJlY3RvcnknICUgdG1wZGlyKQorICAgICAgICByZXR1cm4g
dGVtcGZpbGUubWtkdGVtcChwcmVmaXg9b3MucGF0aC5qb2luKG9zLnBhdGguYWJzcGF0aCh0bXBk
aXIpLCAndG1wJykpCisgICAgcmV0dXJuIHRlbXBmaWxlLm1rZHRlbXAoKQorCisKK2RlZiBwcmlu
dF9pZl9lcnJvcl9zdGRvdXRfc3RkZXJyKGNtZCwgcmV0Y29kZSwgc3Rkb3V0PU5vbmUsIHN0ZGVy
cj1Ob25lLCBleHRyYW1zZz1Ob25lKToKKyAgICBpZiByZXRjb2RlICE9IDA6CisgICAgICAgIGlm
IHR5cGUoY21kKSA9PSB0eXBlKFtdKToKKyAgICAgICAgICAgIGNtZCA9ICcgJy5qb2luKGNtZCkK
KyAgICAgICAgcHJpbnQoJ1dBUk5JTkc6ICIlcyIgcmV0dXJuZWQgJXMgc3RhdHVzIGNvZGUnICUg
KGNtZCwgcmV0Y29kZSkpCisgICAgICAgIGlmIHN0ZG91dCBpcyBub3QgTm9uZToKKyAgICAgICAg
ICAgIHByaW50KHN0ZG91dCkKKyAgICAgICAgaWYgc3RkZXJyIGlzIG5vdCBOb25lOgorICAgICAg
ICAgICAgcHJpbnQoc3RkZXJyKQorICAgICAgICBpZiBleHRyYW1zZyBpcyBub3QgTm9uZToKKyAg
ICAgICAgICAgIHByaW50KGV4dHJhbXNnKQorCisKK2RlZiBzZXR1cF9tYXN0ZXJfd29ya2Rpcihj
b25maWdkaXIsIGJhc2Vfd29ya2Rpcik6CisgICAgbWFzdGVyX3dvcmtkaXIgPSBvcy5wYXRoLmpv
aW4oYmFzZV93b3JrZGlyLCAnbWFzdGVyJykKKyAgICBwcmludCgnQ29weWluZyBmaWxlcyBmcm9t
ICVzIHRvICVzIC4uLicgJSAoY29uZmlnZGlyLCBtYXN0ZXJfd29ya2RpcikpCisgICAgc2h1dGls
LmNvcHl0cmVlKGNvbmZpZ2RpciwgbWFzdGVyX3dvcmtkaXIpCisgICAgcHJpbnQoJ0dlbmVyYXRp
bmcgYnVpbGRib3QgZmlsZXMgYXQgJXMgLi4uJyAlIG1hc3Rlcl93b3JrZGlyKQorICAgIHdpdGgg
b3Blbihvcy5wYXRoLmpvaW4obWFzdGVyX3dvcmtkaXIsICdidWlsZGJvdC50YWMnKSwgJ3cnKSBh
cyBmOgorICAgICAgICBmLndyaXRlKHRlc3RfYnVpbGRib3RfbWFzdGVyX3RhYykKKyAgICBta3B3
ZF9jbWQgPSBbJy4vbWFrZV9wYXNzd29yZHNfanNvbi5weSddCisgICAgbWtwd2RfcHJvY2VzcyA9
IHN1YnByb2Nlc3MuUG9wZW4obWtwd2RfY21kLCBjd2Q9bWFzdGVyX3dvcmtkaXIsCisgICAgICAg
ICAgICAgICAgc3Rkb3V0PXN1YnByb2Nlc3MuUElQRSwgc3RkZXJyPXN1YnByb2Nlc3MuU1RET1VU
KQorICAgIHN0ZG91dCwgc3RkZXJyID0gbWtwd2RfcHJvY2Vzcy5jb21tdW5pY2F0ZSgpCisgICAg
cHJpbnRfaWZfZXJyb3Jfc3Rkb3V0X3N0ZGVycihta3B3ZF9jbWQsIG1rcHdkX3Byb2Nlc3MucmV0
dXJuY29kZSwgc3Rkb3V0LCBzdGRlcnIpCisgICAgcmV0dXJuIG1hc3Rlcl93b3JrZGlyCisKKwor
ZGVmIHdhaXRfZm9yX21hc3Rlcl9yZWFkeShtYXN0ZXJfd29ya2Rpcik6CisgICAgbWFzdGVyX3Jl
YWR5X2NoZWNrX2NvdW50ZXIgPSAwCisgICAgd2hpbGUgVHJ1ZToKKyAgICAgICAgaWYgb3MucGF0
aC5pc2ZpbGUob3MucGF0aC5qb2luKG1hc3Rlcl93b3JrZGlyLCAnLm1hc3Rlci1pcy1yZWFkeScp
KToKKyAgICAgICAgICAgIHJldHVybgorICAgICAgICBpZiBtYXN0ZXJfcmVhZHlfY2hlY2tfY291
bnRlciA+IDE1OgorICAgICAgICAgICAgcmFpc2UgUnVudGltZUVycm9yKCdFUlJPUjogQWJvcnRp
bmcgYWZ0ZXIgd2FpdGluZyAxNSBzZWNvbmRzIGZvciB0aGUgbWFzdGVyIHRvIHN0YXJ0LicpCisg
ICAgICAgIHNsZWVwKDEpCisgICAgICAgIG1hc3Rlcl9yZWFkeV9jaGVja19jb3VudGVyICs9IDEK
KworCitkZWYgc3RhcnRfbWFzdGVyKG1hc3Rlcl93b3JrZGlyKToKKyAgICAjIFRoaXMgaXMgc3Rh
cnRlZCB2aWEgbXVsdGlwcm9jZXNzaW5nLiBXZSBzZXQgYSBuZXcgcHJvY2VzcyBncm91cCBoZXJl
CisgICAgIyB0byBiZSBhYmxlIHRvIHJlbGlhYmx5IGtpbGwgdGhpcyBzdWJwcm9jZXNzIGFuZCBh
bGwgb2YgaXRzIGNoaWxkIG9uIGNsZWFuLgorICAgIG9zLnNldHNpZCgpCisgICAgYnVpbGRtYXN0
ZXJsb2cgPSBvcy5wYXRoLmpvaW4obWFzdGVyX3dvcmtkaXIsICdidWlsZG1hc3Rlci5sb2cnKQor
ICAgIGRidXBncmFkZWQgPSBGYWxzZQorICAgIHJldHJ5ID0gVHJ1ZQorICAgIGlmIGNoZWNrX3Rj
cF9wb3J0X29wZW4oJ2xvY2FsaG9zdCcsIDg3MTApOgorICAgICAgICBwcmludCgnRVJST1I6IFRo
ZXJlIGlzIHNvbWUgcHJvY2VzcyBhbHJlYWR5IGxpc3RlbmluZyBpbiBwb3J0IDgxNzAnKQorICAg
ICAgICByZXR1cm4gMQorICAgIHdoaWxlIHJldHJ5OgorICAgICAgICByZXRyeSA9IEZhbHNlCisg
ICAgICAgIHByaW50KCdTdGFydGluZyB0aGUgdHdpc3RkIHByb2Nlc3MgLi4uJykKKyAgICAgICAg
dHdpc3RkX2NtZCA9IFsndHdpc3RkJywgJy1sJywgYnVpbGRtYXN0ZXJsb2csICctbm95JywgJ2J1
aWxkYm90LnRhYyddCisgICAgICAgIHR3aXN0ZF9wcm9jZXNzID0gc3VicHJvY2Vzcy5Qb3Blbih0
d2lzdGRfY21kLCBjd2Q9bWFzdGVyX3dvcmtkaXIsCisgICAgICAgICAgICAgICAgICAgIHN0ZG91
dD1zdWJwcm9jZXNzLlBJUEUsIHN0ZGVycj1zdWJwcm9jZXNzLlNURE9VVCkKKyAgICAgICAgd2hp
bGUgdHdpc3RkX3Byb2Nlc3MucG9sbCgpIGlzIE5vbmU6CisgICAgICAgICAgICBpZiBjaGVja190
Y3BfcG9ydF9vcGVuKCdsb2NhbGhvc3QnLCA4NzEwKToKKyAgICAgICAgICAgICAgICBwcmludCgn
VGVzdCBidWlsZG1hc3RlciByZWFkeSEuXG5cbicKKyAgICAgICAgICAgICAgICAgICAgICsgJyAt
IFNlZSBidWlsZG1hc3RlciBsb2c6XG4nCisgICAgICAgICAgICAgICAgICAgICArICcgICAgIHRh
aWwgLWYgJXNcbicgJSBidWlsZG1hc3RlcmxvZworICAgICAgICAgICAgICAgICAgICAgKyAnIC0g
T3BlbiBhIGJyb3dzZXIgdG86XG4nCisgICAgICAgICAgICAgICAgICAgICArICcgICAgIGh0dHA6
Ly9sb2NhbGhvc3Q6ODcxMFxuJworICAgICAgICAgICAgICAgICAgICAgKyAnIC0gQ3JlZGVudGlh
bHMgZm9yIHRyaWdnZXJpbmcgbWFudWFsIGJ1aWxkczpcbicKKyAgICAgICAgICAgICAgICAgICAg
ICsgJyAgICAgbG9naW46ICAgICBjb21taXR0ZXJAd2Via2l0Lm9yZ1xuJworICAgICAgICAgICAg
ICAgICAgICAgKyAnICAgICBwYXNzd29yZDogIGNvbW1pdHRlcnBhc3N3b3JkXG4nKQorICAgICAg
ICAgICAgICAgIHdpdGggb3Blbihvcy5wYXRoLmpvaW4obWFzdGVyX3dvcmtkaXIsICcubWFzdGVy
LWlzLXJlYWR5JyksICd3JykgYXMgZjoKKyAgICAgICAgICAgICAgICAgICAgZi53cml0ZSgncmVh
ZHknKQorICAgICAgICAgICAgICAgIHR3aXN0ZF9wcm9jZXNzLndhaXQoKQorICAgICAgICAgICAg
ICAgIHJldHVybiAwCisgICAgICAgICAgICBzbGVlcCgxKQorICAgICAgICBzdGRvdXQsIHN0ZGVy
ciA9IHR3aXN0ZF9wcm9jZXNzLmNvbW11bmljYXRlKCkKKyAgICAgICAgaWYgdHdpc3RkX3Byb2Nl
c3MucmV0dXJuY29kZSA9PSAwIGFuZCB1cGdyYWRlX2RiX25lZWRlZChidWlsZG1hc3RlcmxvZykg
YW5kIG5vdCBkYnVwZ3JhZGVkOgorICAgICAgICAgICAgcmV0cnkgPSBUcnVlCisgICAgICAgICAg
ICBkYnVwZ3JhZGVkID0gVHJ1ZQorICAgICAgICAgICAgcHJpbnQoJ1VwZ3JhZGluZyB0aGUgZGF0
YWJhc2UgLi4uJykKKyAgICAgICAgICAgIHVwZ3JhZGVfY21kID0gWydidWlsZGJvdCcsICd1cGdy
YWRlLW1hc3RlcicsIG1hc3Rlcl93b3JrZGlyXQorICAgICAgICAgICAgdXBncmFkZV9wcm9jZXNz
ID0gc3VicHJvY2Vzcy5Qb3Blbih1cGdyYWRlX2NtZCwgY3dkPW1hc3Rlcl93b3JrZGlyLAorICAg
ICAgICAgICAgICAgICAgICBzdGRvdXQ9c3VicHJvY2Vzcy5QSVBFLCBzdGRlcnI9c3VicHJvY2Vz
cy5TVERPVVQpCisgICAgICAgICAgICBzdGRvdXQsIHN0ZGVyciA9IHVwZ3JhZGVfcHJvY2Vzcy5j
b21tdW5pY2F0ZSgpCisgICAgICAgICAgICBwcmludF9pZl9lcnJvcl9zdGRvdXRfc3RkZXJyKHVw
Z3JhZGVfY21kLCB1cGdyYWRlX3Byb2Nlc3MucmV0dXJuY29kZSwgc3Rkb3V0LCBzdGRlcnIpCisg
ICAgICAgIGVsc2U6CisgICAgICAgICAgICBwcmludF9pZl9lcnJvcl9zdGRvdXRfc3RkZXJyKHR3
aXN0ZF9jbWQsIHR3aXN0ZF9wcm9jZXNzLnJldHVybmNvZGUsIHN0ZG91dCwgc3RkZXJyLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnQ2hlY2sgdGhlIGxvZyBhdCAl
cycgJSBidWlsZG1hc3RlcmxvZykKKyAgICByZXR1cm4gMAorCisKK2RlZiBnZXRfbGlzdF93b3Jr
ZXJzKG1hc3Rlcl93b3JrZGlyKToKKyAgICBwYXNzd29yZF9saXN0ID0gb3MucGF0aC5qb2luKG1h
c3Rlcl93b3JrZGlyLCAncGFzc3dvcmRzLmpzb24nKQorICAgIHdpdGggb3BlbihwYXNzd29yZF9s
aXN0KSBhcyBmOgorICAgICAgICBwYXNzd29yZHMgPSBqc29uLmxvYWQoZikKKyAgICBsaXN0X3dv
cmtlcnMgPSBbXQorICAgIGZvciB3b3JrZXIgaW4gcGFzc3dvcmRzLmtleXMoKToKKyAgICAgICAg
bGlzdF93b3JrZXJzLmFwcGVuZChzdHIod29ya2VyKSkKKyAgICByZXR1cm4gbGlzdF93b3JrZXJz
CisKKworZGVmIHN0YXJ0X3dvcmtlcihiYXNlX3dvcmtkaXIsIHdvcmtlcik6CisgICAgIyBUaGlz
IGlzIHN0YXJ0ZWQgdmlhIG11bHRpcHJvY2Vzc2luZy4gV2Ugc2V0IGEgbmV3IHByb2Nlc3MgZ3Jv
dXAgaGVyZQorICAgICMgdG8gYmUgYWJsZSB0byByZWxpYWJseSBraWxsIHRoaXMgc3VicHJvY2Vz
cyBhbmQgYWxsIG9mIGl0cyBjaGlsZCBvbiBjbGVhbi4KKyAgICBvcy5zZXRzaWQoKQorICAgIHdv
cmtlcl93b3JrZGlyID0gb3MucGF0aC5qb2luKGJhc2Vfd29ya2Rpciwgd29ya2VyKQorICAgIG9z
Lm1rZGlyKHdvcmtlcl93b3JrZGlyKQorICAgIHdpdGggb3Blbihvcy5wYXRoLmpvaW4od29ya2Vy
X3dvcmtkaXIsICdidWlsZGJvdC50YWMnKSwgJ3cnKSBhcyBmOgorICAgICAgICBmLndyaXRlKHdv
cmtlcl9idWlsZGJvdF9tYXN0ZXJfdGFjICUgeyd3b3JrZXInOiB3b3JrZXJ9KQorICAgIHR3aXN0
ZF9jbWQgPSBbJ3R3aXN0ZCcsICctbCcsICd3b3JrZXIubG9nJywgJy1ub3knLCAnYnVpbGRib3Qu
dGFjJ10KKyAgICB0d2lzdGRfd29ya2VyX3Byb2Nlc3MgPSBzdWJwcm9jZXNzLlBvcGVuKHR3aXN0
ZF9jbWQsIGN3ZD13b3JrZXJfd29ya2RpciwKKyAgICAgICAgc3Rkb3V0PXN1YnByb2Nlc3MuUElQ
RSwgc3RkZXJyPXN1YnByb2Nlc3MuU1RET1VUKQorICAgIHRyeToKKyAgICAgICAgc3Rkb3V0LCBz
dGRlcnIgPSB0d2lzdGRfd29ya2VyX3Byb2Nlc3MuY29tbXVuaWNhdGUoKQorICAgIGV4Y2VwdDoK
KyAgICAgICAgdHdpc3RkX3dvcmtlcl9wcm9jZXNzLmtpbGwoKQorICAgICAgICByZXR1cm4KKyAg
ICBwcmludF9pZl9lcnJvcl9zdGRvdXRfc3RkZXJyKHR3aXN0ZF9jbWQsIHR3aXN0ZF93b3JrZXJf
cHJvY2Vzcy5yZXR1cm5jb2RlLCBzdGRvdXQsIHN0ZGVyciwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICdDaGVjayB0aGUgbG9nIGF0ICVzJyAlIG9zLnBhdGguam9pbih3b3JrZXJf
d29ya2RpciwgJ3dvcmtlci5sb2cnKSkKKworCitkZWYgY2xlYW4odGVtcF9kaXIpOgorICAgIGlm
IG9zLnBhdGguaXNkaXIodGVtcF9kaXIpOgorICAgICAgICBwcmludCgnXG5cbkNsZWFuaW5nICVz
IC4uLiBcbicgJSAodGVtcF9kaXIpKQorICAgICAgICAjIHNodXRpbC5ybXRyZWUgY2FuIGZhaWwg
aWYgd2UgaG9sZCBhbiBvcGVuIGZpbGUgZGVzY3JpcHRvciBvbiB0ZW1wX2RpcgorICAgICAgICAj
ICh3aGljaCBpcyB2ZXJ5IGxpa2VseSB3aGVuIGNsZWFuaW5nKSBvciBpZiB0ZW1wX2RpciBpcyBh
IE5GUyBtb3VudC4KKyAgICAgICAgIyBVc2Ugcm0gaW5zdGVhZCB0aGF0IGFsd2F5cyB3b3Jrcy4K
KyAgICAgICAgcm0gPSBzdWJwcm9jZXNzLlBvcGVuKFsncm0nLCAnLWZyJywgdGVtcF9kaXJdKQor
ICAgICAgICBybS53YWl0KCkKKworCitkZWYgY21kX2V4aXN0cyhjbWQpOgorICAgIHJldHVybiBh
bnkob3MuYWNjZXNzKG9zLnBhdGguam9pbihwYXRoLCBjbWQpLCBvcy5YX09LKQorICAgICAgICAg
ICAgICAgZm9yIHBhdGggaW4gb3MuZW52aXJvblsnUEFUSCddLnNwbGl0KG9zLnBhdGhzZXApKQor
CisKK2RlZiBjaGVja19idWlsZGJvdF9pbnN0YWxsZWQoKToKKyAgICBpZiBjbWRfZXhpc3RzKCd0
d2lzdGQnKSBhbmQgY21kX2V4aXN0cygnYnVpbGRib3QnKToKKyAgICAgICAgcmV0dXJuCisgICAg
cmFpc2UgUnVudGltZUVycm9yKCdCdWlsZGJvdCBpcyBub3QgaW5zdGFsbGVkLicpCisKKworZGVm
IHNldHVwX3ZpcnR1YWxlbnYoYmFzZV93b3JrZGlyX3RlbXApOgorICAgIGlmIGNtZF9leGlzdHMo
J3ZpcnR1YWxlbnYnKToKKyAgICAgICAgcHJpbnQoJ1NldHRpbmcgdXAgdmlydHVhbGVudiBhdCAl
cyAuLi4gJyAlIGJhc2Vfd29ya2Rpcl90ZW1wKQorICAgICAgICB2aXJ0dWFsZW52X2NtZCA9IFsn
dmlydHVhbGVudicsICctcCcsICdweXRob24yJywgJ3ZlbnYnXQorICAgICAgICB2aXJ0dWFsZW52
X3Byb2Nlc3MgPSBzdWJwcm9jZXNzLlBvcGVuKHZpcnR1YWxlbnZfY21kLCBjd2Q9YmFzZV93b3Jr
ZGlyX3RlbXAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBzdGRvdXQ9c3VicHJvY2Vzcy5QSVBFLCBzdGRlcnI9c3VicHJvY2Vzcy5TVERPVVQpCisgICAg
ICAgIHN0ZG91dCwgc3RkZXJyID0gdmlydHVhbGVudl9wcm9jZXNzLmNvbW11bmljYXRlKCkKKyAg
ICAgICAgcHJpbnRfaWZfZXJyb3Jfc3Rkb3V0X3N0ZGVycih2aXJ0dWFsZW52X2NtZCwgdmlydHVh
bGVudl9wcm9jZXNzLnJldHVybmNvZGUsIHN0ZG91dCwgc3RkZXJyKQorICAgICAgICB2aXJ0dWFs
ZW52X2JpbmRpciA9IG9zLnBhdGguam9pbihiYXNlX3dvcmtkaXJfdGVtcCwgJ3ZlbnYnLCAnYmlu
JykKKyAgICAgICAgdmlydHVhbGVudl9waXAgPSBvcy5wYXRoLmpvaW4odmlydHVhbGVudl9iaW5k
aXIsICdwaXAnKQorICAgICAgICBpZiBub3Qgb3MuYWNjZXNzKHZpcnR1YWxlbnZfcGlwLCBvcy5Y
X09LKToKKyAgICAgICAgICAgIHByaW50KCdTb21ldGhpbmcgd2VudCB3cm9uZyBzZXR0aW5nIHVw
IHZpcnR1YWxlbnYnCisgICAgICAgICAgICAgICAgICAnVHJ5aW5nIHRvIGNvbnRpbnVlIHVzaW5n
IHRoZSBzeXN0ZW0gdmVyc2lvbiBvZiBidWlsZGJvdCcpCisgICAgICAgICAgICByZXR1cm4KKyAg
ICAgICAgcHJpbnQoJ1NldHRpbmcgdXAgYnVpbGRib3QgZGVwZW5kZW5jaWVzIG9uIHRoZSB2aXJ0
dWFsZW52IC4uLiAnKQorICAgICAgICAjIFRoZSBpZGVhIGlzIHRvIGluc3RhbGwgdGhlIHZlcnkg
c2FtZSB2ZXJzaW9uIG9mIGJ1aWxkYm90IGFuZCBpdHMKKyAgICAgICAgIyBkZXBlbmRlbmNpZXMg
dGhhbiB0aGUgb25lcyB1c2VkIGZvciBydW5uaW5nIGh0dHBzOi8vYnVpbGQud2Via2l0Lm9yZy9h
Ym91dAorICAgICAgICBwaXBfY21kID0gW3ZpcnR1YWxlbnZfcGlwLCAnaW5zdGFsbCcsCisgICAg
ICAgICAgICAgICAgICAgICdidWlsZGJvdD09MC44LjZwMScsCisgICAgICAgICAgICAgICAgICAg
ICdidWlsZGJvdC1zbGF2ZT09MC44LjZwMScsCisgICAgICAgICAgICAgICAgICAgICd0d2lzdGVk
PT0xMi4xLjAnLAorICAgICAgICAgICAgICAgICAgICAnamluamEyPT0yLjYnLAorICAgICAgICAg
ICAgICAgICAgICAnc3FsYWxjaGVteT09MC43LjgnLAorICAgICAgICAgICAgICAgICAgICAnc3Fs
YWxjaGVteS1taWdyYXRlPT0wLjcuMiddCisgICAgICAgIHBpcF9wcm9jZXNzID0gc3VicHJvY2Vz
cy5Qb3BlbihwaXBfY21kLCBjd2Q9YmFzZV93b3JrZGlyX3RlbXAsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBzdGRvdXQ9c3VicHJvY2Vzcy5QSVBFLCBzdGRlcnI9c3Vi
cHJvY2Vzcy5TVERPVVQpCisgICAgICAgIHN0ZG91dCwgc3RkZXJyID0gcGlwX3Byb2Nlc3MuY29t
bXVuaWNhdGUoKQorICAgICAgICBwcmludF9pZl9lcnJvcl9zdGRvdXRfc3RkZXJyKHBpcF9jbWQs
IHBpcF9wcm9jZXNzLnJldHVybmNvZGUsIHN0ZG91dCwgc3RkZXJyKQorICAgICAgICBvcy5lbnZp
cm9uWydQQVRIJ10gPSB2aXJ0dWFsZW52X2JpbmRpciArICc6JyArIG9zLmVudmlyb25bJ1BBVEgn
XQorICAgICAgICByZXR1cm4KKyAgICBwcmludCgnV0FSTklORzogdmlydHVhbGVudiBub3QgaW5z
dGFsbGVkLiAnCisgICAgICAgICAgJ1RyeWluZyB0byBjb250aW51ZSB1c2luZyB0aGUgc3lzdGVt
IHZlcnNpb24gb2YgYnVpbGRib3QnKQorCisKK2RlZiBjb25maWdkaXJfaXNfdmFsaWQoY29uZmln
ZGlyKToKKyAgICByZXR1cm4ob3MucGF0aC5pc2Rpcihjb25maWdkaXIpIGFuZAorICAgICAgICAg
ICBvcy5wYXRoLmlzZmlsZShvcy5wYXRoLmpvaW4oY29uZmlnZGlyLCAnY29uZmlnLmpzb24nKSkg
YW5kCisgICAgICAgICAgIG9zLnBhdGguaXNmaWxlKG9zLnBhdGguam9pbihjb25maWdkaXIsICdt
YXN0ZXIuY2ZnJykpIGFuZAorICAgICAgICAgICBvcy5hY2Nlc3Mob3MucGF0aC5qb2luKGNvbmZp
Z2RpciwgJ21ha2VfcGFzc3dvcmRzX2pzb24ucHknKSwgb3MuWF9PSykpCisKKworZGVmIG1haW4o
Y29uZmlnZGlyLCBiYXNldGVtcGRpcj1Ob25lLCBub19jbGVhbj1GYWxzZSwgbm9fd29ya2Vycz1G
YWxzZSwgdXNlX3N5c3RlbV92ZXJzaW9uPUZhbHNlKToKKyAgICBjb25maWdkaXIgPSBvcy5wYXRo
LmFic3BhdGgob3MucGF0aC5yZWFscGF0aChjb25maWdkaXIpKQorICAgIGlmIG5vdCBjb25maWdk
aXJfaXNfdmFsaWQoY29uZmlnZGlyKToKKyAgICAgICAgcmFpc2UgVmFsdWVFcnJvcignVGhlIGNv
bmZpZ2RpciAlcyBkb250IGNvbnRhaW5zIHRoZSBidWlsZG1hc3RlciBmaWxlcyBleHBlY3RlZCBi
eSB0aGlzIHNjcmlwdCcgJSBjb25maWdkaXIpCisgICAgYmFzZV93b3JrZGlyX3RlbXAgPSBvcy5w
YXRoLmFic3BhdGgob3MucGF0aC5yZWFscGF0aChjcmVhdGVfdGVtcGRpcihiYXNldGVtcGRpcikp
KQorICAgIGlmIGJhc2Vfd29ya2Rpcl90ZW1wLnN0YXJ0c3dpdGgoY29uZmlnZGlyKToKKyAgICAg
ICAgcmFpc2UgVmFsdWVFcnJvcignVGhlIHRlbXBvcmFsIHdvcmtpbmcgZGlyZWN0b3J5ICVzIGNh
bnQgYmUgbG9jYXRlZCBpbnNpZGUgY29uZmlnZGlyICVzJyAlIChiYXNlX3dvcmtkaXJfdGVtcCwg
Y29uZmlnZGlyKSkKKyAgICB0cnk6CisgICAgICAgIGlmIG5vdCB1c2Vfc3lzdGVtX3ZlcnNpb246
CisgICAgICAgICAgICBzZXR1cF92aXJ0dWFsZW52KGJhc2Vfd29ya2Rpcl90ZW1wKQorICAgICAg
ICBjaGVja19idWlsZGJvdF9pbnN0YWxsZWQoKQorICAgICAgICBtYXN0ZXJfd29ya2RpciA9IHNl
dHVwX21hc3Rlcl93b3JrZGlyKGNvbmZpZ2RpciwgYmFzZV93b3JrZGlyX3RlbXApCisgICAgICAg
IG1hc3Rlcl9ydW5uZXIgPSBtdWx0aXByb2Nlc3NpbmcuUHJvY2Vzcyh0YXJnZXQ9c3RhcnRfbWFz
dGVyLCBhcmdzPShtYXN0ZXJfd29ya2RpciwpKQorICAgICAgICBtYXN0ZXJfcnVubmVyLnN0YXJ0
KCkKKyAgICAgICAgd2FpdF9mb3JfbWFzdGVyX3JlYWR5KG1hc3Rlcl93b3JrZGlyKQorICAgICAg
ICBpZiBub193b3JrZXJzOgorICAgICAgICAgICAgcHJpbnQoJyAtIFRvIG1hbnVhbGx5IGF0dGFj
aCBhIGJ1aWxkIHdvcmtlciB1c2UgdGhpcyBpbmZvOlxuJworICAgICAgICAgICAgICAgICArICcg
ICAgIFRDUCBwb3J0IGZvciB0aGUgd29ya2VyLXRvLW1hc3RlciBjb25uZWN0aW9uOiAxNzAwMFxu
JworICAgICAgICAgICAgICAgICArICcgICAgIHdvcmtlci1pZDogdGhlIG9uZSBkZWZpbmVkIGF0
ICVzXG4nICUgb3MucGF0aC5qb2luKG1hc3Rlcl93b3JrZGlyLCAncGFzc3dvcmRzLmpzb24nKQor
ICAgICAgICAgICAgICAgICArICcgICAgIHBhc3N3b3JkOiAgMTIzNFxuJykKKyAgICAgICAgZWxz
ZToKKyAgICAgICAgICAgIHdvcmtlcl9ydW5uZXJzID0gW10KKyAgICAgICAgICAgIGZvciB3b3Jr
ZXIgaW4gZ2V0X2xpc3Rfd29ya2VycyhtYXN0ZXJfd29ya2Rpcik6CisgICAgICAgICAgICAgICAg
d29ya2VyX3J1bm5lciA9IG11bHRpcHJvY2Vzc2luZy5Qcm9jZXNzKHRhcmdldD1zdGFydF93b3Jr
ZXIsIGFyZ3M9KGJhc2Vfd29ya2Rpcl90ZW1wLCB3b3JrZXIsKSkKKyAgICAgICAgICAgICAgICB3
b3JrZXJfcnVubmVyLnN0YXJ0KCkKKyAgICAgICAgICAgICAgICB3b3JrZXJfcnVubmVycy5hcHBl
bmQod29ya2VyX3J1bm5lcikKKyAgICAgICAgICAgIHByaW50KCcgLSBXb3JrZXJzIHN0YXJ0ZWQh
LlxuJworICAgICAgICAgICAgICAgICArICcgICAgIENoZWNrIHRoZSBsb2cgZm9yIGVhY2ggb25l
IGF0ICVzLyR7d29ya2VyLW5hbWUtaWR9L3dvcmtlci5sb2dcbicgJSBiYXNlX3dvcmtkaXJfdGVt
cAorICAgICAgICAgICAgICAgICArICcgICAgIHRhaWwgLWYgJXMvKi93b3JrZXIubG9nXG4nICUg
YmFzZV93b3JrZGlyX3RlbXApCisgICAgICAgICAgICBmb3Igd29ya2VyX3J1bm5lciBpbiB3b3Jr
ZXJfcnVubmVyczoKKyAgICAgICAgICAgICAgICB3b3JrZXJfcnVubmVyLmpvaW4oKQorICAgICAg
ICBtYXN0ZXJfcnVubmVyLmpvaW4oKQorICAgIGV4Y2VwdDoKKyAgICAgICAgdHJhY2ViYWNrLnBy
aW50X2V4YygpCisgICAgZmluYWxseToKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgIyBUaGUg
Y2hpbGRyZW4gbWF5IGV4aXQgYmV0d2VlbiB0aGUgY2hlY2sgYW5kIHRoZSBraWxsIGNhbGwuCisg
ICAgICAgICAgICAjIElnbm9yZSBhbnkgZXhjZXB0aW9uIHJhaXNlZCBoZXJlLgorICAgICAgICAg
ICAgZm9yIGMgaW4gbXVsdGlwcm9jZXNzaW5nLmFjdGl2ZV9jaGlsZHJlbigpOgorICAgICAgICAg
ICAgICAgICMgU2VuZCB0aGUgc2lnbmFsIHRvIHRoZSB3aG9sZSBwcm9jZXNzIGdyb3VwLgorICAg
ICAgICAgICAgICAgICMgT3RoZXJ3aXNlIHNvbWUgdHdpc3RkIHN1Yi1jaGlsZHMgY2FuIHJlbWFp
biBhbGl2ZS4KKyAgICAgICAgICAgICAgICBvcy5raWxscGcob3MuZ2V0cGdpZChjLnBpZCksIHNp
Z25hbC5TSUdLSUxMKQorICAgICAgICBleGNlcHQ6CisgICAgICAgICAgICBwYXNzCisgICAgICAg
IGlmIG5vdCBub19jbGVhbjoKKyAgICAgICAgICAgIGNsZWFuKGJhc2Vfd29ya2Rpcl90ZW1wKQor
ICAgICAgICBzeXMuZXhpdCgwKQorCisKK2lmIF9fbmFtZV9fID09ICdfX21haW5fXyc6CisgICAg
cGFyc2VyID0gYXJncGFyc2UuQXJndW1lbnRQYXJzZXIoKQorICAgIHBhcnNlci5hZGRfYXJndW1l
bnQoJy0tY29uZmlnLWRpcicsIGhlbHA9J1BhdGggdG8gdGhlIGRpcmVjdG9yeSBvZiB0aGUgYnVp
bGQgbWFzdGVyIGNvbmZpZyBmaWxlcy4gJworICAgICAgICAgICAgICAgICAgICAgICAgJ0RlZmF1
bHMgdG8gdGhlIGRpcmVjdG9yeSB3aGVyZSB0aGlzIHNjcmlwdCBpcyBsb2NhdGVkLicsCisgICAg
ICAgICAgICAgICAgICAgICAgICBkZXN0PSdjb25maWdkaXInLCB0eXBlPXN0ciwKKyAgICAgICAg
ICAgICAgICAgICAgICAgIGRlZmF1bHQ9b3MucGF0aC5kaXJuYW1lKF9fZmlsZV9fKSkKKyAgICBw
YXJzZXIuYWRkX2FyZ3VtZW50KCctLWJhc2UtdGVtcC1kaXInLCBoZWxwPSdQYXRoIHdoZXJlIHRo
ZSB0ZW1wb3JhbCB3b3JraW5nIGRpcmVjdG9yeSB3aWxsIGJlIGNyZWF0ZWQuICcKKyAgICAgICAg
ICAgICAgICAgICAgICAgICdOb3RlOiBUbyB0cmlnZ2VyIHRlc3QgYnVpbGRzIHdpdGggdGhlIHRl
c3Qgd29ya2VycyB5b3UgbmVlZCBlbm91Z2ggZnJlZSBzcGFjZSBvbiB0aGF0IHBhdGguJywKKyAg
ICAgICAgICAgICAgICAgICAgICAgIGRlc3Q9J2Jhc2V0ZW1wZGlyJywgZGVmYXVsdD1Ob25lLCB0
eXBlPXN0cikKKyAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KCctLW5vLWNsZWFuJywgaGVscD0nRG8g
bm90IGNsZWFuIHRoZSB0ZW1wb3JhbCB3b3JraW5nIGRpciBvbiBleGl0LicsCisgICAgICAgICAg
ICAgICAgICAgICAgICBkZXN0PSdub19jbGVhbicsIGFjdGlvbj0nc3RvcmVfdHJ1ZScpCisgICAg
cGFyc2VyLmFkZF9hcmd1bWVudCgnLS1uby13b3JrZXJzJywgaGVscD0nRG8gbm90IHN0YXJ0IHRo
ZSB0ZXN0IHdvcmtlcnMuJywKKyAgICAgICAgICAgICAgICAgICAgICAgIGRlc3Q9J25vX3dvcmtl
cnMnLCBhY3Rpb249J3N0b3JlX3RydWUnKQorICAgIHBhcnNlci5hZGRfYXJndW1lbnQoJy0tdXNl
LXN5c3RlbS12ZXJzaW9uJywgaGVscD0nSW5zdGVhZCBvZiBzZXR0aW5nIHVwIGEgdmlydHVhbGVu
diB3aXRoIHRoZSBidWlsZGJvdCB2ZXJzaW9uICcKKyAgICAgICAgICAgICAgICAgICAgICAgICd1
c2VkIGJ5IGJ1aWxkLndlYmtpdC5vcmcsIHVzZSB0aGUgYnVpbGRib3QgdmVyc2lvbiBpbnN0YWxs
ZWQgb24gdGhpcyBzeXN0ZW0uJywKKyAgICAgICAgICAgICAgICAgICAgICAgIGRlc3Q9J3VzZV9z
eXN0ZW1fdmVyc2lvbicsIGFjdGlvbj0nc3RvcmVfdHJ1ZScpCisgICAgYXJncyA9IHBhcnNlci5w
YXJzZV9hcmdzKCkKKyAgICBtYWluKGFyZ3MuY29uZmlnZGlyLCBhcmdzLmJhc2V0ZW1wZGlyLCBh
cmdzLm5vX2NsZWFuLCBhcmdzLm5vX3dvcmtlcnMsIGFyZ3MudXNlX3N5c3RlbV92ZXJzaW9uKQo=
</data>

          </attachment>
      

    </bug>

</bugzilla>