<?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>76765</bug_id>
          
          <creation_ts>2012-01-20 18:48:53 -0800</creation_ts>
          <short_desc>test-webkitpy should support files, directories, and packages as command line args</short_desc>
          <delta_ts>2012-03-28 13:59:16 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>New Bugs</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>76022</blocked>
    
    <blocked>78185</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Dirk Pranke">dpranke</reporter>
          <assigned_to name="Dirk Pranke">dpranke</assigned_to>
          <cc>abarth</cc>
    
    <cc>ojan</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>540002</commentid>
    <comment_count>0</comment_count>
    <who name="Dirk Pranke">dpranke</who>
    <bug_when>2012-01-20 18:48:53 -0800</bug_when>
    <thetext>test-webkitpy should support files, directories, and packages as command line args</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>540006</commentid>
    <comment_count>1</comment_count>
      <attachid>123425</attachid>
    <who name="Dirk Pranke">dpranke</who>
    <bug_when>2012-01-20 18:49:48 -0800</bug_when>
    <thetext>Created attachment 123425
Work in progress - this works, but isn&apos;t ready for review yet.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>549398</commentid>
    <comment_count>2</comment_count>
      <attachid>125485</attachid>
    <who name="Dirk Pranke">dpranke</who>
    <bug_when>2012-02-04 01:40:51 -0800</bug_when>
    <thetext>Created attachment 125485
work in progress

work in progress</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>588394</commentid>
    <comment_count>3</comment_count>
      <attachid>133946</attachid>
    <who name="Dirk Pranke">dpranke</who>
    <bug_when>2012-03-26 17:56:42 -0700</bug_when>
    <thetext>Created attachment 133946
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>590339</commentid>
    <comment_count>4</comment_count>
      <attachid>133946</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2012-03-28 13:21:50 -0700</bug_when>
    <thetext>Comment on attachment 133946
Patch

I thought I had reviewed this one already.  Sorry, I must not have clicked the right buttons.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>590397</commentid>
    <comment_count>5</comment_count>
    <who name="Dirk Pranke">dpranke</who>
    <bug_when>2012-03-28 13:59:16 -0700</bug_when>
    <thetext>Committed r112437: &lt;http://trac.webkit.org/changeset/112437&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>123425</attachid>
            <date>2012-01-20 18:49:48 -0800</date>
            <delta_ts>2012-02-04 01:40:47 -0800</delta_ts>
            <desc>Work in progress - this works, but isn&apos;t ready for review yet.</desc>
            <filename>bug-76765-20120120184947.patch</filename>
            <type>text/plain</type>
            <size>17912</size>
            <attacher name="Dirk Pranke">dpranke</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTA1NTU4CmRpZmYgLS1naXQgYS9Ub29scy9DaGFuZ2VMb2cg
Yi9Ub29scy9DaGFuZ2VMb2cKaW5kZXggMmFmNjkyNDMzOWUyYmRhNjMzOWI3NTkxYWUxZGNiN2Y1
NTczMWViMC4uMTQ2ZmMyOTU0MDQ3ZWQ2MjFkMzIyY2RlZDJmYWYzNjVmOTU1ZGYzNiAxMDA2NDQK
LS0tIGEvVG9vbHMvQ2hhbmdlTG9nCisrKyBiL1Rvb2xzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDM5
IEBACisyMDEyLTAxLTIwICBEaXJrIFByYW5rZSAgPGRwcmFua2VAY2hyb21pdW0ub3JnPgorCisg
ICAgICAgIHRlc3Qtd2Via2l0cHkgc2hvdWxkIHN1cHBvcnQgZmlsZXMsIGRpcmVjdG9yaWVzLCBh
bmQgcGFja2FnZXMgYXMgY29tbWFuZCBsaW5lIGFyZ3MKKyAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTc2NzY1CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9C
T0RZIChPT1BTISkuCisKKyAgICAgICAgKiBTY3JpcHRzL3Rlc3Qtd2Via2l0cHk6CisgICAgICAg
ICogU2NyaXB0cy93ZWJraXRweS90ZXN0L21haW4ucHk6CisgICAgICAgIChUZXN0VHJlZSk6Cisg
ICAgICAgIChUZXN0VHJlZS5fX2luaXRfXyk6CisgICAgICAgIChUZXN0VHJlZS5jbGVhbik6Cisg
ICAgICAgIChUZXN0VHJlZS5maW5kX21vZHVsZXMpOgorICAgICAgICAoTG9hZGVyRXJyb3IpOgor
ICAgICAgICAoVGVzdGVyKToKKyAgICAgICAgKFRlc3Rlci5fX2luaXRfXyk6CisgICAgICAgIChU
ZXN0ZXIuYWRkX3RyZWUpOgorICAgICAgICAoVGVzdGVyLnJ1bik6CisgICAgICAgIChUZXN0ZXIu
X2ZpeF9wYXRoKToKKyAgICAgICAgKFRlc3Rlci5fY2xlYW5fdHJlZXMpOgorICAgICAgICAoVGVz
dGVyLl9zdGFydF9jb3ZlcmFnZSk6CisgICAgICAgIChUZXN0ZXIuX2ZpbmRfbW9kdWxlcyk6Cisg
ICAgICAgIChUZXN0ZXIuX2RlZmF1bHRfdGVzdHMpOgorICAgICAgICAoVGVzdGVyLl9za2lwX21v
ZHVsZXMpOgorICAgICAgICAoVGVzdGVyLl9maW5kX3Rlc3RzX2Zvcik6CisgICAgICAgIChUZXN0
ZXIuX3Rlc3RfZnJvbV9wYXRoKToKKyAgICAgICAgKFRlc3Rlci5fc3VpdGVfZnJvbV9uYW1lKToK
KyAgICAgICAgKFRlc3Rlci5fZmluZF90cmVlKToKKyAgICAgICAgKFRlc3Rlci5faXNfbW9kdWxl
KToKKyAgICAgICAgKFRlc3Rlci5fcnVuX3Rlc3RzKToKKyAgICAgICAgKFRlc3Rlci5fc3RvcF9j
b3ZlcmFnZSk6CisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS90ZXN0L21haW5faW50ZWdyYXRp
b250ZXN0LnB5OiBBZGRlZC4KKyAgICAgICAgKE1haW5UZXN0KToKKyAgICAgICAgKE1haW5UZXN0
Lm9iamVjdHMpOgorICAgICAgICAoTWFpblRlc3QuZmlsZXNfYW5kX2RpcnMpOgorCiAyMDEyLTAx
LTIwICBPamFuIFZhZmFpICA8b2phbkBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgcnVuLXdlYmtp
dC10ZXN0cyAtLWxpbnQtdGVzdC1maWxlcyBjcmF3bHMgdGhlIHdob2xlIExheW91dFRlc3RzIHN1
YnRyZWUKZGlmZiAtLWdpdCBhL1Rvb2xzL1NjcmlwdHMvdGVzdC13ZWJraXRweSBiL1Rvb2xzL1Nj
cmlwdHMvdGVzdC13ZWJraXRweQppbmRleCA1NWFkOTdiNTVkNDUxYjY1NDAxZTZhZTcwNzM0MTc2
MTBjZjBhMjFmLi5iOTcxYmJjOWUxZjRhZjYyZTBiOTNlNGViNWIzYWUxYmI0YmIyMDI1IDEwMDc1
NQotLS0gYS9Ub29scy9TY3JpcHRzL3Rlc3Qtd2Via2l0cHkKKysrIGIvVG9vbHMvU2NyaXB0cy90
ZXN0LXdlYmtpdHB5CkBAIC00NCwxMSArNDQsMTIgQEAgX2xvZyA9IGxvZ2dpbmcuZ2V0TG9nZ2Vy
KCJ0ZXN0LXdlYmtpdHB5IikKIGlmIF9fbmFtZV9fID09ICJfX21haW5fXyI6CiAgICAgd2Via2l0
X3Jvb3QgPSBvcy5wYXRoLmRpcm5hbWUob3MucGF0aC5kaXJuYW1lKG9zLnBhdGguZGlybmFtZShf
X2ZpbGVfXykpKQogCi0gICAgIyBGSVhNRTogV2Ugc2hvdWxkIHByb2JhYmx5IHRlc3QgZWFjaCBw
YWNrYWdlIHNlcGFyYXRlbHkgdG8gYXZvaWQgbmFtaW5nIGNvbmZsaWN0cy4KLSAgICBkaXJzID0g
WwotICAgICAgICBvcy5wYXRoLmpvaW4od2Via2l0X3Jvb3QsICdUb29scycsICdTY3JpcHRzJyks
Ci0gICAgICAgIG9zLnBhdGguam9pbih3ZWJraXRfcm9vdCwgJ1NvdXJjZScsICdXZWJLaXQyJywg
J1NjcmlwdHMnKSwKLSAgICBdCisgICAgdGVzdGVyID0gbWFpbi5UZXN0ZXIoKQorICAgIG9wdGlv
bnMsIGFyZ3MgPSB0ZXN0ZXIucGFyc2VfYXJncyhzeXMuYXJndikKKyAgICB0ZXN0ZXIuY29uZmln
dXJlKG9wdGlvbnMpCisKKyAgICB0ZXN0ZXIuYWRkX3RyZWUob3MucGF0aC5qb2luKHdlYmtpdF9y
b290LCAnVG9vbHMnLCAnU2NyaXB0cycpLCAnd2Via2l0cHknKQorICAgIHRlc3Rlci5hZGRfdHJl
ZShvcy5wYXRoLmpvaW4od2Via2l0X3Jvb3QsICdTb3VyY2UnLCAnV2ViS2l0MicsICdTY3JpcHRz
JyksICd3ZWJraXQyJykKIAogICAgICMgRklYTUU6IERvIHdlIG5lZWQgdG8gYmUgYWJsZSB0byB0
ZXN0IFF1ZXVlU3RhdHVzU2VydmVyIG9uIFdpbmRvd3MgYXMgd2VsbD8KICAgICBhcHBlbmdpbmVf
c2RrX3BhdGggPSAnL3Vzci9sb2NhbC9nb29nbGVfYXBwZW5naW5lJwpAQCAtNTksMTcgKzYwLDgg
QEAgaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKICAgICAgICAgZnJvbSBnb29nbGUuYXBwZW5n
aW5lLmRpc3QgaW1wb3J0IHVzZV9saWJyYXJ5CiAgICAgICAgIHVzZV9saWJyYXJ5KCdkamFuZ28n
LCAnMS4yJykKICAgICAgICAgZGV2X2FwcHNlcnZlci5maXhfc3lzX3BhdGgoKQotICAgICAgICBk
aXJzLmFwcGVuZChvcy5wYXRoLmpvaW4od2Via2l0X3Jvb3QsICdUb29scycsICdRdWV1ZVN0YXR1
c1NlcnZlcicpKQorICAgICAgICB0ZXN0ZXIuYWRkX3RyZWUob3MucGF0aC5qb2luKHdlYmtpdF9y
b290LCAnVG9vbHMnLCAnUXVldWVTdGF0dXNTZXJ2ZXInKSwgJycpCiAgICAgZWxzZToKICAgICAg
ICAgX2xvZy5pbmZvKCdTa2lwcGluZyBRdWV1ZVN0YXR1c1NlcnZlciB0ZXN0czsgdGhlIEdvb2ds
ZSBBcHBFbmdpbmUgUHl0aG9uIFNESyBpcyBub3QgaW5zdGFsbGVkLicpCiAKLSAgICBtYWluLlRl
c3Rlci5jbGVhbl9wYWNrYWdlcyhkaXJzKQotCi0gICAgdGVzdGVyID0gbWFpbi5UZXN0ZXIoKQot
ICAgIG9wdGlvbnMsIGFyZ3MgPSB0ZXN0ZXIucGFyc2VfYXJncyhzeXMuYXJndikKLSAgICB0ZXN0
ZXIuY29uZmlndXJlKG9wdGlvbnMpCi0KLSAgICAjIE1ha2Ugc3VyZSBQWVRIT05QQVRIIGlzIHNl
dCB1cCBjb3JyZWN0bHkgc28gdGhhdCBhbGwgb2YgdGhlIGltcG9ydHMgd2lsbCB3b3JrLgotICAg
IHN5cy5wYXRoID0gW2QgZm9yIGQgaW4gZGlycyBpZiBkIG5vdCBpbiBzeXMucGF0aF0gKyBzeXMu
cGF0aAotCi0gICAgc3lzLmV4aXQobm90IHRlc3Rlci5ydW4oZGlycywgYXJncykpCisgICAgc3lz
LmV4aXQobm90IHRlc3Rlci5ydW4oYXJncykpCmRpZmYgLS1naXQgYS9Ub29scy9TY3JpcHRzL3dl
YmtpdHB5L3Rlc3QvbWFpbi5weSBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvdGVzdC9tYWluLnB5
CmluZGV4IDc4YzM5ZGI1NTc5NTc2YmZmN2UyYjM3NzMzODkyNWFhZGE5OWVlY2IuLmU2M2YzNWE1
ZGVhNWU1YjQ4YTlmY2I2OGZkYzZkZmE3YzM2MmFjMDcgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1Njcmlw
dHMvd2Via2l0cHkvdGVzdC9tYWluLnB5CisrKyBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvdGVz
dC9tYWluLnB5CkBAIC0zNSwyMSArMzUsNDQgQEAgaW1wb3J0IHVuaXR0ZXN0CiBfbG9nID0gbG9n
Z2luZy5nZXRMb2dnZXIoX19uYW1lX18pCiAKIAotY2xhc3MgVGVzdGVyKG9iamVjdCk6Ci0gICAg
QHN0YXRpY21ldGhvZAotICAgIGRlZiBjbGVhbl9wYWNrYWdlcyhkaXJzKToKLSAgICAgICAgIiIi
RGVsZXRlIGFsbCAucHljIGZpbGVzIHVuZGVyIGRpcnMgdGhhdCBoYXZlIG5vIC5weSBmaWxlLiIi
IgotICAgICAgICBmb3IgZGlyX3RvX2NsZWFuIGluIGRpcnM6Ci0gICAgICAgICAgICBfbG9nLmRl
YnVnKCJDbGVhbmluZyBvcnBoYW5lZCAqLnB5YyBmaWxlcyBmcm9tOiAlcyIgJSBkaXJfdG9fY2xl
YW4pCi0gICAgICAgICAgICBmb3IgZGlyX3BhdGgsIGRpcl9uYW1lcywgZmlsZV9uYW1lcyBpbiBv
cy53YWxrKGRpcl90b19jbGVhbik6Ci0gICAgICAgICAgICAgICAgZm9yIGZpbGVfbmFtZSBpbiBm
aWxlX25hbWVzOgotICAgICAgICAgICAgICAgICAgICBpZiBmaWxlX25hbWUuZW5kc3dpdGgoIi5w
eWMiKSBhbmQgZmlsZV9uYW1lWzotMV0gbm90IGluIGZpbGVfbmFtZXM6Ci0gICAgICAgICAgICAg
ICAgICAgICAgICBmaWxlX3BhdGggPSBvcy5wYXRoLmpvaW4oZGlyX3BhdGgsIGZpbGVfbmFtZSkK
LSAgICAgICAgICAgICAgICAgICAgICAgIF9sb2cuaW5mbygiRGVsZXRpbmcgb3JwaGFuICoucHlj
IGZpbGU6ICVzIiAlIGZpbGVfcGF0aCkKLSAgICAgICAgICAgICAgICAgICAgICAgIG9zLnJlbW92
ZShmaWxlX3BhdGgpCitjbGFzcyBUZXN0VHJlZShvYmplY3QpOgorICAgIGRlZiBfX2luaXRfXyhz
ZWxmLCB0b3BfZGlyZWN0b3J5LCBzdGFydGluZ19zdWJkaXJlY3Rvcnk9Tm9uZSk6CisgICAgICAg
IHNlbGYudG9wX2RpcmVjdG9yeSA9IHRvcF9kaXJlY3RvcnkKKyAgICAgICAgc2VsZi5zZWFyY2hf
ZGlyZWN0b3J5ID0gdG9wX2RpcmVjdG9yeQorICAgICAgICBzZWxmLnRvcF9wYWNrYWdlID0gJycK
KyAgICAgICAgaWYgc3RhcnRpbmdfc3ViZGlyZWN0b3J5OgorICAgICAgICAgICAgc2VsZi50b3Bf
cGFja2FnZSA9IHN0YXJ0aW5nX3N1YmRpcmVjdG9yeS5yZXBsYWNlKG9zLnNlcCwgJy4nKSArICcu
JworICAgICAgICAgICAgc2VsZi5zZWFyY2hfZGlyZWN0b3J5ID0gb3MucGF0aC5qb2luKHRvcF9k
aXJlY3RvcnksIHN0YXJ0aW5nX3N1YmRpcmVjdG9yeSkKKworICAgIGRlZiBjbGVhbihzZWxmKToK
KyAgICAgICAgIiIiRGVsZXRlIGFsbCAucHljIGZpbGVzIGluIHRoZSB0cmVlIHRoYXQgaGF2ZSBu
byBtYXRjaGluZyAucHkgZmlsZS4iIiIKKyAgICAgICAgX2xvZy5kZWJ1ZygiQ2xlYW5pbmcgb3Jw
aGFuZWQgKi5weWMgZmlsZXMgZnJvbTogJXMiICUgc2VsZi5zZWFyY2hfZGlyZWN0b3J5KQorICAg
ICAgICBmb3IgZGlyX3BhdGgsIGRpcl9uYW1lcywgZmlsZV9uYW1lcyBpbiBvcy53YWxrKHNlbGYu
c2VhcmNoX2RpcmVjdG9yeSk6CisgICAgICAgICAgICBmb3IgZmlsZV9uYW1lIGluIGZpbGVfbmFt
ZXM6CisgICAgICAgICAgICAgICAgaWYgZmlsZV9uYW1lLmVuZHN3aXRoKCIucHljIikgYW5kIGZp
bGVfbmFtZVs6LTFdIG5vdCBpbiBmaWxlX25hbWVzOgorICAgICAgICAgICAgICAgICAgICBmaWxl
X3BhdGggPSBvcy5wYXRoLmpvaW4oZGlyX3BhdGgsIGZpbGVfbmFtZSkKKyAgICAgICAgICAgICAg
ICAgICAgX2xvZy5pbmZvKCJEZWxldGluZyBvcnBoYW4gKi5weWMgZmlsZTogJXMiICUgZmlsZV9w
YXRoKQorICAgICAgICAgICAgICAgICAgICBvcy5yZW1vdmUoZmlsZV9wYXRoKQorCisgICAgZGVm
IGZpbmRfbW9kdWxlcyhzZWxmLCBkaXJfdG9fc2VhcmNoLCBzdWZmaXhlcyk6CisgICAgICAgIG1v
ZHVsZXMgPSBbXQorICAgICAgICBmb3IgZGlyX3BhdGgsIF8sIGZpbGVuYW1lcyBpbiBvcy53YWxr
KGRpcl90b19zZWFyY2gpOgorICAgICAgICAgICAgZGlyX3BhdGggPSBvcy5wYXRoLmpvaW4oZGly
X3BhdGgsICcnKQorICAgICAgICAgICAgcGFja2FnZSA9IGRpcl9wYXRoLnJlcGxhY2Uoc2VsZi50
b3BfZGlyZWN0b3J5ICsgb3Muc2VwLCAnJykucmVwbGFjZShvcy5zZXAsICcuJykKKyAgICAgICAg
ICAgIGZvciBmIGluIGZpbGVuYW1lczoKKyAgICAgICAgICAgICAgICBpZiBhbnkoZi5lbmRzd2l0
aChzdWZmaXgpIGZvciBzdWZmaXggaW4gc3VmZml4ZXMpOgorICAgICAgICAgICAgICAgICAgICBt
b2R1bGVzLmFwcGVuZChwYWNrYWdlICsgZi5yZXBsYWNlKCcucHknLCAnJykpCisgICAgICAgIHJl
dHVybiBtb2R1bGVzCiAKKworY2xhc3MgTG9hZGVyRXJyb3IoRXhjZXB0aW9uKToKKyAgICBwYXNz
CisKKworY2xhc3MgVGVzdGVyKG9iamVjdCk6CiAgICAgZGVmIF9faW5pdF9fKHNlbGYpOgogICAg
ICAgICBzZWxmLl92ZXJib3NpdHkgPSAxCisgICAgICAgIHNlbGYudHJlZXMgPSBbXQogCiAgICAg
ZGVmIHBhcnNlX2FyZ3Moc2VsZiwgYXJndik6CiAgICAgICAgIHBhcnNlciA9IG9wdHBhcnNlLk9w
dGlvblBhcnNlcih1c2FnZT0ndXNhZ2U6ICVwcm9nIFtvcHRpb25zXSBbYXJncy4uLl0nKQpAQCAt
MTQxLDMyICsxNjQsNzUgQEAgY2xhc3MgVGVzdGVyKG9iamVjdCk6CiAgICAgICAgIF9sb2cuaW5m
bygiU3VwcHJlc3NpbmcgbW9zdCB3ZWJraXRweSBsb2dnaW5nIHdoaWxlIHJ1bm5pbmcgdW5pdCB0
ZXN0cy4iKQogICAgICAgICBoYW5kbGVyLmFkZEZpbHRlcih0ZXN0aW5nX2ZpbHRlcikKIAotICAg
IGRlZiBydW4oc2VsZiwgZGlycywgYXJncyk6Ci0gICAgICAgIGFyZ3MgPSBhcmdzIG9yIHNlbGYu
X2ZpbmRfbW9kdWxlcyhkaXJzKQotICAgICAgICByZXR1cm4gc2VsZi5fcnVuX3Rlc3RzKGRpcnMs
IGFyZ3MpCisgICAgZGVmIGFkZF90cmVlKHNlbGYsIHRvcF9kaXJlY3RvcnksIHN0YXJ0aW5nX3N1
YmRpcmVjdG9yeT1Ob25lKToKKyAgICAgICAgc2VsZi50cmVlcy5hcHBlbmQoVGVzdFRyZWUodG9w
X2RpcmVjdG9yeSwgc3RhcnRpbmdfc3ViZGlyZWN0b3J5KSkKIAotICAgIGRlZiBfZmluZF9tb2R1
bGVzKHNlbGYsIGRpcnMpOgotICAgICAgICBtb2R1bGVzID0gW10KLSAgICAgICAgZm9yIGRpcl90
b19zZWFyY2ggaW4gZGlyczoKLSAgICAgICAgICAgIG1vZHVsZXMuZXh0ZW5kKHNlbGYuX2ZpbmRf
bW9kdWxlc191bmRlcihkaXJfdG9fc2VhcmNoLCAnX3VuaXR0ZXN0LnB5JykpCi0gICAgICAgICAg
ICBpZiBub3Qgc2VsZi5fb3B0aW9ucy5za2lwX2ludGVncmF0aW9udGVzdHM6Ci0gICAgICAgICAg
ICAgICAgbW9kdWxlcy5leHRlbmQoc2VsZi5fZmluZF9tb2R1bGVzX3VuZGVyKGRpcl90b19zZWFy
Y2gsICdfaW50ZWdyYXRpb250ZXN0LnB5JykpCi0gICAgICAgIG1vZHVsZXMuc29ydCgpCi0KLSAg
ICAgICAgZm9yIG1vZHVsZSBpbiBtb2R1bGVzOgotICAgICAgICAgICAgX2xvZy5kZWJ1ZygiRm91
bmQ6ICVzIiAlIG1vZHVsZSkKLQotICAgICAgICAjIEZJWE1FOiBGaWd1cmUgb3V0IGhvdyB0byBt
b3ZlIHRoaXMgdG8gdGVzdC13ZWJraXRweSBpbiBvcmRlciB0byB0byBtYWtlIHRoaXMgZmlsZSBt
b3JlIGdlbmVyaWMuCi0gICAgICAgIGlmIG5vdCBzZWxmLl9vcHRpb25zLmFsbDoKLSAgICAgICAg
ICAgIHNsb3dfdGVzdHMgPSAoJ3dlYmtpdHB5LmNvbW1vbi5jaGVja291dC5zY20uc2NtX3VuaXR0
ZXN0JywpCi0gICAgICAgICAgICBzZWxmLl9leGNsdWRlKG1vZHVsZXMsIHNsb3dfdGVzdHMsICdh
cmUgcmVhbGx5LCByZWFsbHkgc2xvdycsIDMxODE4KQorICAgIGRlZiBydW4oc2VsZiwgYXJncyk6
CisgICAgICAgIHNlbGYuX2NsZWFuX3RyZWVzKCkKKyAgICAgICAgc2VsZi5fZml4X3BhdGgoKQog
Ci0gICAgICAgICAgICBpZiBzeXMucGxhdGZvcm0gPT0gJ3dpbjMyJzoKLSAgICAgICAgICAgICAg
ICB3aW4zMl9ibGFja2xpc3QgPSAoJ3dlYmtpdHB5LmNvbW1vbi5jaGVja291dCcsCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICd3ZWJraXRweS5jb21tb24uY29uZmlnJywKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3dlYmtpdHB5LnRvb2wnKQotICAgICAg
ICAgICAgICAgIHNlbGYuX2V4Y2x1ZGUobW9kdWxlcywgd2luMzJfYmxhY2tsaXN0LCAnZmFpbCBo
b3JyaWJseSBvbiB3aW4zMicsIDU0NTI2KQorICAgICAgICBpZiBzZWxmLl9vcHRpb25zLmNvdmVy
YWdlOgorICAgICAgICAgICAgc2VsZi5fc3RhcnRfY292ZXJhZ2UoKQorCisgICAgICAgIHRyeToK
KyAgICAgICAgICAgIF9sb2cuZGVidWcoIkxvYWRpbmcgdGhlIHRlc3RzLi4uIikKKyAgICAgICAg
ICAgIGlmIGFyZ3M6CisgICAgICAgICAgICAgICAgdGVzdHMgPSBbXQorICAgICAgICAgICAgICAg
IGZvciBhcmcgaW4gYXJnczoKKyAgICAgICAgICAgICAgICAgICAgdGVzdHMuZXh0ZW5kKHNlbGYu
X2ZpbmRfdGVzdHNfZm9yKGFyZykpCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAg
ICMgRklYTUU6IENvbnNpZGVyIHJ1bm5pbmcgZWFjaCB0cmVlIHNlcGFyYXRlbHkgdG8gYXZvaWQg
bmFtZXNwYWNlIGNsYXNoZXMuCisgICAgICAgICAgICAgICAgdGVzdHMgPSBzZWxmLl9kZWZhdWx0
X3Rlc3RzKCkKKworICAgICAgICAgICAgcmVzdWx0ID0gc2VsZi5fcnVuX3Rlc3RzKHRlc3RzKQor
ICAgICAgICBleGNlcHQgTG9hZGVyRXJyb3IsIGU6CisgICAgICAgICAgICBpZiBzZWxmLl9vcHRp
b25zLmNvdmVyYWdlOgorICAgICAgICAgICAgICAgIHNlbGYuX3N0b3BfY292ZXJhZ2UoKQorICAg
ICAgICAgICAgcmV0dXJuIEZhbHNlCiAKKyAgICAgICAgaWYgc2VsZi5fb3B0aW9ucy5jb3ZlcmFn
ZToKKyAgICAgICAgICAgIHNlbGYuX3N0b3BfY292ZXJhZ2UoKQorICAgICAgICByZXR1cm4gcmVz
dWx0Lndhc1N1Y2Nlc3NmdWwKKworICAgIGRlZiBfZml4X3BhdGgoc2VsZik6CisgICAgICAgICMg
TWFrZSBzdXJlIFBZVEhPTlBBVEggaXMgc2V0IHVwIGNvcnJlY3RseS4KKyAgICAgICAgc3lzLnBh
dGggPSBbdHJlZS50b3BfZGlyZWN0b3J5IGZvciB0cmVlIGluIHNlbGYudHJlZXMgaWYgdHJlZS50
b3BfZGlyZWN0b3J5IG5vdCBpbiBzeXMucGF0aF0gKyBzeXMucGF0aAorCisgICAgZGVmIF9jbGVh
bl90cmVlcyhzZWxmKToKKyAgICAgICAgZm9yIHRyZWUgaW4gc2VsZi50cmVlczoKKyAgICAgICAg
ICAgIHRyZWUuY2xlYW4oKQorCisgICAgZGVmIF9zdGFydF9jb3ZlcmFnZShzZWxmKToKKyAgICAg
ICAgdHJ5OgorICAgICAgICAgICAgaW1wb3J0IGNvdmVyYWdlCisgICAgICAgIGV4Y2VwdCBJbXBv
cnRFcnJvciwgZToKKyAgICAgICAgICAgIF9sb2cuZXJyb3IoIkZhaWxlZCB0byBpbXBvcnQgJ2Nv
dmVyYWdlJzsgY2FuJ3QgZ2VuZXJhdGUgY292ZXJhZ2UgbnVtYmVycy4iKQorICAgICAgICAgICAg
cmV0dXJuIEZhbHNlCisgICAgICAgIHNlbGYuY292ID0gY292ZXJhZ2UuY292ZXJhZ2UoKQorICAg
ICAgICBzZWxmLmNvdi5zdGFydCgpCisKKyAgICBkZWYgX2ZpbmRfbW9kdWxlcyhzZWxmLCB0cmVl
LCBkaXJfdG9fc2VhcmNoKToKKyAgICAgICAgc3VmZml4ZXMgPSAoJ191bml0dGVzdC5weScsICdf
aW50ZWdyYXRpb250ZXN0LnB5JykKKyAgICAgICAgaWYgc2VsZi5fb3B0aW9ucy5za2lwX2ludGVn
cmF0aW9udGVzdHM6CisgICAgICAgICAgICBzdWZmaXhlcyA9ICgnX3VuaXR0ZXN0LnB5JywpCisg
ICAgICAgIHJldHVybiB0cmVlLmZpbmRfbW9kdWxlcyhkaXJfdG9fc2VhcmNoLCBzdWZmaXhlcykK
KworICAgIGRlZiBfZGVmYXVsdF90ZXN0cyhzZWxmKToKKyAgICAgICAgdGVzdHMgPSBbXQorICAg
ICAgICBmb3IgdHJlZSBpbiBzZWxmLnRyZWVzOgorICAgICAgICAgICAgdGVzdHMuZXh0ZW5kKHNl
bGYuX2ZpbmRfbW9kdWxlcyh0cmVlLCB0cmVlLnNlYXJjaF9kaXJlY3RvcnkpKQorICAgICAgICBy
ZXR1cm4gdGVzdHMKKworICAgIGRlZiBfc2tpcF9tb2R1bGVzKHNlbGYsIG1vZHVsZXMpOgorICAg
ICAgICAjIEZJWE1FOiBUaGVzZSBzaG91bGQgYmUgcmVwbGFjZWQgdy8gQHNsb3cgYW5kIEBza2lw
X2lmIGRlY29yYXRvcnMKKyAgICAgICAgc2xvd190ZXN0cyA9ICgnd2Via2l0cHkuY29tbW9uLmNo
ZWNrb3V0LnNjbS5zY21fdW5pdHRlc3QnLCkKKyAgICAgICAgc2VsZi5fZXhjbHVkZShtb2R1bGVz
LCBzbG93X3Rlc3RzLCAnYXJlIHJlYWxseSwgcmVhbGx5IHNsb3cnLCAzMTgxOCkKKworICAgICAg
ICBpZiBzeXMucGxhdGZvcm0gPT0gJ3dpbjMyJzoKKyAgICAgICAgICAgIHdpbjMyX2JsYWNrbGlz
dCA9ICgnd2Via2l0cHkuY29tbW9uLmNoZWNrb3V0JywKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgJ3dlYmtpdHB5LmNvbW1vbi5jb25maWcnLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAnd2Via2l0cHkudG9vbCcpCisgICAgICAgICAgICBzZWxmLl9leGNsdWRlKG1v
ZHVsZXMsIHdpbjMyX2JsYWNrbGlzdCwgJ2ZhaWwgaG9ycmlibHkgb24gd2luMzInLCA1NDUyNikK
ICAgICAgICAgcmV0dXJuIG1vZHVsZXMKIAogICAgIGRlZiBfZXhjbHVkZShzZWxmLCBtb2R1bGVz
LCBtb2R1bGVfcHJlZml4ZXMsIHJlYXNvbiwgYnVnaWQpOgpAQCAtMTgxLDQ2ICsyNDcsNzcgQEAg
Y2xhc3MgVGVzdGVyKG9iamVjdCk6CiAgICAgICAgIF9sb2cuaW5mbygnICAgIChodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9JWQ7IHVzZSAtLWFsbCB0byBpbmNsdWRlKScg
JSBidWdpZCkKICAgICAgICAgX2xvZy5pbmZvKCcnKQogCi0gICAgZGVmIF9maW5kX21vZHVsZXNf
dW5kZXIoc2VsZiwgZGlyX3RvX3NlYXJjaCwgc3VmZml4KToKLQotICAgICAgICBkZWYgdG9fcGFj
a2FnZShkaXJfcGF0aCk6Ci0gICAgICAgICAgICByZXR1cm4gZGlyX3BhdGgucmVwbGFjZShkaXJf
dG9fc2VhcmNoICsgb3Muc2VwLCAnJykucmVwbGFjZShvcy5zZXAsICcuJykKKyAgICBkZWYgX2Zp
bmRfdGVzdHNfZm9yKHNlbGYsIG5hbWUpOgorICAgICAgICAodHJlZSwgc3RhcnRpbmdfZGlyZWN0
b3J5KSA9IHNlbGYuX2ZpbmRfdHJlZShuYW1lKQorICAgICAgICBpZiB0cmVlOgorICAgICAgICAg
ICAgcmV0dXJuIHNlbGYuX2ZpbmRfbW9kdWxlcyh0cmVlLCBzdGFydGluZ19kaXJlY3RvcnkpCisg
ICAgICAgIGVsaWYgb3MucGF0aC5leGlzdHMobmFtZSk6CisgICAgICAgICAgICByZXR1cm4gW3Nl
bGYuX3Rlc3RfZnJvbV9wYXRoKG5hbWUpXQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcmV0
dXJuIFtuYW1lXQorCisgICAgZGVmIF90ZXN0X2Zyb21fcGF0aChzZWxmLCBuYW1lKToKKyAgICAg
ICAgIyBGaXJzdCwgY2hlY2sgdG8gc2VlIGlmIHdlIGNhbiByZXNvbHZlIHRoZSBwYXRoIHJlbGF0
aXZlIHRvIHRoZSBjd2QuCisgICAgICAgIGZ1bGxfcGF0aCA9IG9zLnBhdGguYWJzcGF0aChuYW1l
KQorICAgICAgICBmb3IgdHJlZSBpbiBzZWxmLnRyZWVzOgorICAgICAgICAgICAgaWYgZnVsbF9w
YXRoLnN0YXJ0c3dpdGgodHJlZS50b3BfZGlyZWN0b3J5KToKKyAgICAgICAgICAgICAgICBtb2R1
bGUgPSBmdWxsX3BhdGgucmVwbGFjZSh0cmVlLnRvcF9kaXJlY3RvcnkgKyBvcy5zZXAsICcnKS5y
ZXBsYWNlKCcucHknLCAnJykucmVwbGFjZShvcy5zZXAsICcuJykKKyAgICAgICAgICAgICAgICBy
ZXR1cm4gc2VsZi5fc3VpdGVfZnJvbV9uYW1lKG1vZHVsZSkKKworICAgICAgICAjIEZJWE1FOiBU
aGUgcGF0aCBpcyBvdXRzaWRlIHRoZSBrbm93biB0cmVlcy4gU2hvdWxkIHdlIGFsbG93IHRoaXM/
CisgICAgICAgIHJhaXNlIExvYWRlckVycm9yKCclcyBpcyBub3QgaW4gb25lIG9mIHRoZSBXZWJL
aXQgcHl0aG9uIHRyZWVzJyAlIG5hbWUpCisKKyAgICBkZWYgX3N1aXRlX2Zyb21fbmFtZShzZWxm
LCBuYW1lKToKKyAgICAgICAgaWYgc2VsZi5faXNfbW9kdWxlKG5hbWUpOgorICAgICAgICAgICAg
IyBpbXBvcnQgbW9kdWxlcyBleHBsaWNpdGx5IGJlZm9yZSBsb2FkaW5nIHRoZWlyIHRlc3RzIGJl
Y2F1c2UKKyAgICAgICAgICAgICMgbG9hZFRlc3RzRnJvbU5hbWUoKSBwcm9kdWNlcyBsb3VzeSBl
cnJvciBtZXNzYWdlcyBmb3IgYmFkIG1vZHVsZXMuCisgICAgICAgICAgICB0cnk6CisgICAgICAg
ICAgICAgICAgX19pbXBvcnRfXyhuYW1lKQorICAgICAgICAgICAgZXhjZXB0IEltcG9ydEVycm9y
LCBlOgorICAgICAgICAgICAgICAgIF9sb2cuZmF0YWwoJ0ZhaWxlZCB0byBpbXBvcnQgJXM6JyAl
IG5hbWUpCisgICAgICAgICAgICAgICAgc2VsZi5fbG9nX2V4Y2VwdGlvbigpCisgICAgICAgICAg
ICAgICAgcmFpc2UgTG9hZGVyRXJyb3IKKyAgICAgICAgcmV0dXJuIHVuaXR0ZXN0LmRlZmF1bHRU
ZXN0TG9hZGVyLmxvYWRUZXN0c0Zyb21OYW1lKG5hbWUsIE5vbmUpCisKKyAgICBkZWYgX2ZpbmRf
dHJlZShzZWxmLCBuYW1lKToKKyAgICAgICAgIyBJcyB0aGUgbmFtZSBhIHN1YmRpcmVjdG9yeSBy
ZWxhdGl2ZSB0byB0aGUgY3VycmVudCB3b3JraW5nIGRpcmVjdG9yeSBhbmQgaW4gYSB0cmVlPwor
ICAgICAgICBmdWxsX3BhdGggPSBvcy5wYXRoLmFic3BhdGgobmFtZSkKKyAgICAgICAgZm9yIHRy
ZWUgaW4gc2VsZi50cmVlczoKKyAgICAgICAgICAgIGlmIG9zLnBhdGguaXNkaXIoZnVsbF9wYXRo
KToKKyAgICAgICAgICAgICAgICByZXR1cm4gKHRyZWUsIGZ1bGxfcGF0aCkKKworICAgICAgICAj
IElzIHRoZSBuYW1lIGEgc3ViZGlyZWN0b3J5IG9mIGEgdHJlZT8KKyAgICAgICAgaWYgbm90IG9z
LnBhdGguaXNhYnMobmFtZSk6CisgICAgICAgICAgICBmb3IgdHJlZSBpbiBzZWxmLnRyZWVzOgor
ICAgICAgICAgICAgICAgIGZ1bGxfcGF0aCA9IG9zLnBhdGguYWJzcGF0aChvcy5wYXRoLmpvaW4o
dHJlZS50b3BfZGlyZWN0b3J5LCBuYW1lKSkKKyAgICAgICAgICAgICAgICBpZiBvcy5wYXRoLmlz
ZGlyKGZ1bGxfcGF0aCk6CisgICAgICAgICAgICAgICAgICAgIHJldHVybiAodHJlZSwgb3MucGF0
aC5qb2luKHRyZWUudG9wX2RpcmVjdG9yeSwgbmFtZSkpCisKKyAgICAgICAgIyBJcyB0aGUgbmFt
ZSBhIHBhY2thZ2U/CisgICAgICAgIHJlbHBhdGggPSBuYW1lLnJlcGxhY2UoJy4nLCBvcy5zZXAp
CisgICAgICAgIGZvciB0cmVlIGluIHNlbGYudHJlZXM6CisgICAgICAgICAgICBmdWxsX3BhdGgg
PSBvcy5wYXRoLmpvaW4odHJlZS50b3BfZGlyZWN0b3J5LCByZWxwYXRoKQorICAgICAgICAgICAg
aWYgb3MucGF0aC5pc2RpcihmdWxsX3BhdGgpOgorICAgICAgICAgICAgICAgIHJldHVybiAodHJl
ZSwgZnVsbF9wYXRoKQorCisgICAgICAgIHJldHVybiAoTm9uZSwgTm9uZSkKKworICAgIGRlZiBf
aXNfbW9kdWxlKHNlbGYsIG5hbWUpOgorICAgICAgICByZWxwYXRoID0gbmFtZS5yZXBsYWNlKCcu
Jywgb3Muc2VwKSArICcucHknCisgICAgICAgIHJldHVybiBhbnkob3MucGF0aC5leGlzdHMob3Mu
cGF0aC5qb2luKHRyZWUudG9wX2RpcmVjdG9yeSwgcmVscGF0aCkpIGZvciB0cmVlIGluIHNlbGYu
dHJlZXMpCiAKLSAgICAgICAgZGVmIHRvX21vZHVsZShmaWxlbmFtZSwgcGFja2FnZSk6Ci0gICAg
ICAgICAgICByZXR1cm4gcGFja2FnZSArICcuJyArIGZpbGVuYW1lLnJlcGxhY2UoJy5weScsICcn
KQorICAgIGRlZiBfcnVuX3Rlc3RzKHNlbGYsIHRlc3RzKToKKyAgICAgICAgIyBTb3J0IGFuZCBk
ZWR1cGxpY2F0ZSBhbGwgb2YgdGhlIHRlc3RzCisgICAgICAgIHRlc3RzID0gc29ydGVkKFt0ZXN0
IGZvciB0ZXN0IGluIHNldCh0ZXN0cyldKQogCi0gICAgICAgIG1vZHVsZXMgPSBbXQotICAgICAg
ICBmb3IgZGlyX3BhdGgsIF8sIGZpbGVuYW1lcyBpbiBvcy53YWxrKGRpcl90b19zZWFyY2gpOgot
ICAgICAgICAgICAgcGFja2FnZSA9IHRvX3BhY2thZ2UoZGlyX3BhdGgpCi0gICAgICAgICAgICBt
b2R1bGVzLmV4dGVuZCh0b19tb2R1bGUoZiwgcGFja2FnZSkgZm9yIGYgaW4gZmlsZW5hbWVzIGlm
IGYuZW5kc3dpdGgoc3VmZml4KSkKLSAgICAgICAgcmV0dXJuIG1vZHVsZXMKKyAgICAgICAgZm9y
IHRlc3QgaW4gdGVzdHM6CisgICAgICAgICAgICBfbG9nLmRlYnVnKCJGb3VuZDogJXMiICUgdGVz
dCkKIAotICAgIGRlZiBfcnVuX3Rlc3RzKHNlbGYsIGRpcnMsIGFyZ3MpOgotICAgICAgICBpZiBz
ZWxmLl9vcHRpb25zLmNvdmVyYWdlOgotICAgICAgICAgICAgdHJ5OgotICAgICAgICAgICAgICAg
IGltcG9ydCBjb3ZlcmFnZQotICAgICAgICAgICAgZXhjZXB0IEltcG9ydEVycm9yLCBlOgotICAg
ICAgICAgICAgICAgIF9sb2cuZXJyb3IoIkZhaWxlZCB0byBpbXBvcnQgJ2NvdmVyYWdlJzsgY2Fu
J3QgZ2VuZXJhdGUgY292ZXJhZ2UgbnVtYmVycy4iKQotICAgICAgICAgICAgICAgIHJldHVybiBG
YWxzZQotICAgICAgICAgICAgY292ID0gY292ZXJhZ2UuY292ZXJhZ2UoKQotICAgICAgICAgICAg
Y292LnN0YXJ0KCkKLQotICAgICAgICBfbG9nLmRlYnVnKCJMb2FkaW5nIHRoZSB0ZXN0cy4uLiIp
Ci0KLSAgICAgICAgbG9hZGVyID0gdW5pdHRlc3QuZGVmYXVsdFRlc3RMb2FkZXIKLSAgICAgICAg
c3VpdGVzID0gW10KLSAgICAgICAgZm9yIG5hbWUgaW4gYXJnczoKLSAgICAgICAgICAgIGlmIHNl
bGYuX2lzX21vZHVsZShkaXJzLCBuYW1lKToKLSAgICAgICAgICAgICAgICAjIGltcG9ydCBtb2R1
bGVzIGV4cGxpY2l0bHkgYmVmb3JlIGxvYWRpbmcgdGhlaXIgdGVzdHMgYmVjYXVzZQotICAgICAg
ICAgICAgICAgICMgbG9hZFRlc3RzRnJvbU5hbWUoKSBwcm9kdWNlcyBsb3VzeSBlcnJvciBtZXNz
YWdlcyBmb3IgYmFkIG1vZHVsZXMuCi0gICAgICAgICAgICAgICAgdHJ5OgotICAgICAgICAgICAg
ICAgICAgICBfX2ltcG9ydF9fKG5hbWUpCi0gICAgICAgICAgICAgICAgZXhjZXB0IEltcG9ydEVy
cm9yLCBlOgotICAgICAgICAgICAgICAgICAgICBfbG9nLmZhdGFsKCdGYWlsZWQgdG8gaW1wb3J0
ICVzOicgJSBuYW1lKQotICAgICAgICAgICAgICAgICAgICBzZWxmLl9sb2dfZXhjZXB0aW9uKCkK
LSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEZhbHNlCi0gICAgICAgICAgICBzdWl0ZXMuYXBw
ZW5kKGxvYWRlci5sb2FkVGVzdHNGcm9tTmFtZShuYW1lLCBOb25lKSkKKyAgICAgICAgaWYgbm90
IHNlbGYuX29wdGlvbnMuYWxsOgorICAgICAgICAgICAgdGVzdHMgPSBzZWxmLl9za2lwX21vZHVs
ZXModGVzdHMpCiAKKyAgICAgICAgc3VpdGVzID0gW3NlbGYuX3N1aXRlX2Zyb21fbmFtZSh0ZXN0
KSBmb3IgdGVzdCBpbiB0ZXN0c10KKyAgICAgICAgX2xvZy5kZWJ1ZygiUnVubmluZyB0aGUgdGVz
dHMuIikKICAgICAgICAgdGVzdF9zdWl0ZSA9IHVuaXR0ZXN0LlRlc3RTdWl0ZShzdWl0ZXMpCiAg
ICAgICAgIGlmIHNlbGYuX29wdGlvbnMueG1sOgogICAgICAgICAgICAgZnJvbSB3ZWJraXRweS50
aGlyZHBhcnR5LmF1dG9pbnN0YWxsZWQueG1scnVubmVyIGltcG9ydCBYTUxUZXN0UnVubmVyCkBA
IC0yMjgsMTYgKzMyNSwxMSBAQCBjbGFzcyBUZXN0ZXIob2JqZWN0KToKICAgICAgICAgZWxzZToK
ICAgICAgICAgICAgIHRlc3RfcnVubmVyID0gdW5pdHRlc3QuVGV4dFRlc3RSdW5uZXIodmVyYm9z
aXR5PXNlbGYuX3ZlcmJvc2l0eSkKIAotICAgICAgICBfbG9nLmRlYnVnKCJSdW5uaW5nIHRoZSB0
ZXN0cy4iKQotICAgICAgICByZXN1bHQgPSB0ZXN0X3J1bm5lci5ydW4odGVzdF9zdWl0ZSkKLSAg
ICAgICAgaWYgc2VsZi5fb3B0aW9ucy5jb3ZlcmFnZToKLSAgICAgICAgICAgIGNvdi5zdG9wKCkK
LSAgICAgICAgICAgIGNvdi5zYXZlKCkKLSAgICAgICAgcmV0dXJuIHJlc3VsdC53YXNTdWNjZXNz
ZnVsKCkKKyAgICAgICAgcmV0dXJuIHRlc3RfcnVubmVyLnJ1bih0ZXN0X3N1aXRlKQogCi0gICAg
ZGVmIF9pc19tb2R1bGUoc2VsZiwgZGlycywgbmFtZSk6Ci0gICAgICAgIHJlbHBhdGggPSBuYW1l
LnJlcGxhY2UoJy4nLCBvcy5zZXApICsgJy5weScKLSAgICAgICAgcmV0dXJuIGFueShvcy5wYXRo
LmV4aXN0cyhvcy5wYXRoLmpvaW4oZCwgcmVscGF0aCkpIGZvciBkIGluIGRpcnMpCisgICAgZGVm
IF9zdG9wX2NvdmVyYWdlKHNlbGYpOgorICAgICAgICBzZWxmLmNvdi5zdG9wKCkKKyAgICAgICAg
c2VsZi5jb3Yuc2F2ZSgpCiAKICAgICBkZWYgX2xvZ19leGNlcHRpb24oc2VsZik6CiAgICAgICAg
IHMgPSBTdHJpbmdJTy5TdHJpbmdJTygpCmRpZmYgLS1naXQgYS9Ub29scy9TY3JpcHRzL3dlYmtp
dHB5L3Rlc3QvbWFpbl9pbnRlZ3JhdGlvbnRlc3QucHkgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5
L3Rlc3QvbWFpbl9pbnRlZ3JhdGlvbnRlc3QucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uOTY5Yzc1NzUzMzY4NWJk
ZDY0YzViZjAwOGE3ODg2ZDI3ZDY1MDg1OAotLS0gL2Rldi9udWxsCisrKyBiL1Rvb2xzL1Njcmlw
dHMvd2Via2l0cHkvdGVzdC9tYWluX2ludGVncmF0aW9udGVzdC5weQpAQCAtMCwwICsxLDQwIEBA
CisjIENvcHlyaWdodCAoQykgMjAxMSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
IworIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisjIGFyZSBtZXQ6CisjIDEuICBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorIyAg
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorIyAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyMgICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisjCisjIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRT
IENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECisjIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisjIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIg
UFVSUE9TRSBBUkUKKyMgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IKKyMgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorIyBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUgorIyBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUgorIyBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LAorIyBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorIyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorCitpbXBvcnQgdW5pdHRl
c3QKK2ltcG9ydCBtYWluCisKKworY2xhc3MgTWFpblRlc3QodW5pdHRlc3QuVGVzdENhc2UpOgor
ICAgIGRlZiBvYmplY3RzKHNlbGYpOgorICAgICAgICAnd2Via2l0cHkudGVzdCAtPiAxMycKKyAg
ICAgICAgJ3dlYmtpdHB5LnRlc3QuY2F0X3VuaXR0ZXN0IC0+IDQnCisgICAgICAgICd3ZWJraXRw
eS50ZXN0LmNhdF91bml0dGVzdC5DYXRUZXN0IC0+IDQnCisgICAgICAgICd3ZWJraXRweS50ZXN0
LmNhdF91bml0dGVzdC5DYXRUZXN0LnRlc3RfYmFzaWMgLT4gMScKKyAgICAgICAgJ3dlYmtpdHB5
L3Rlc3QgLT4gMTMnCisKKyAgICBkZWYgZmlsZXNfYW5kX2RpcnMoc2VsZik6CisgICAgICAgICco
aW4gcm9vdCkgd2Via2l0cHkvdGVzdC9jYXRfdW5pdHRlc3QucHkgLT4gNCcKKyAgICAgICAgJyhp
biBTY3JpcHRzKSB3ZWJraXRweS90ZXN0L2NhdF91bml0dGVzdC5weSAtPiA0JworICAgICAgICAn
KGluIHdlYmtpdHB5KSB0ZXN0IC0+IDEzJworICAgICAgICAnKGluIHdlYmtpdHB5KSB0ZXN0L2Nh
dF91bml0dGVzdC5weSAtPiA0JworICAgICAgICAnKGluIHdlYmtpdHB5L3Rlc3QpIGNhdF91bml0
dGVzdC5weSAtPiA0Jwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>125485</attachid>
            <date>2012-02-04 01:40:51 -0800</date>
            <delta_ts>2012-03-26 17:56:38 -0700</delta_ts>
            <desc>work in progress</desc>
            <filename>bug-76765-20120204014050.patch</filename>
            <type>text/plain</type>
            <size>26922</size>
            <attacher name="Dirk Pranke">dpranke</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTA2NzIxCmRpZmYgLS1naXQgYS9Ub29scy9DaGFuZ2VMb2cg
Yi9Ub29scy9DaGFuZ2VMb2cKaW5kZXggNGZhZTI1NzVkYTNhMGVjODhiYWNlM2JlN2Q2NmRlYzc1
NGU0MzZlNS4uNjAyYTQ4MDMwYmIyOTVkNWI0OGFjMWNkOWFhZjllMzMxY2EyNjA3OCAxMDA2NDQK
LS0tIGEvVG9vbHMvQ2hhbmdlTG9nCisrKyBiL1Rvb2xzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDU2
IEBACisyMDEyLTAyLTA0ICBEaXJrIFByYW5rZSAgPGRwcmFua2VAY2hyb21pdW0ub3JnPgorCisg
ICAgICAgIHRlc3Qtd2Via2l0cHkgc2hvdWxkIHN1cHBvcnQgZmlsZXMsIGRpcmVjdG9yaWVzLCBh
bmQgcGFja2FnZXMgYXMgY29tbWFuZCBsaW5lIGFyZ3MKKyAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTc2NzY1CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9C
T0RZIChPT1BTISkuCisKKyAgICAgICAgKiBTY3JpcHRzL3Rlc3Qtd2Via2l0cHk6CisgICAgICAg
ICogU2NyaXB0cy93ZWJraXRweS90ZXN0L21haW4ucHk6CisgICAgICAgIChUZXN0VHJlZSk6Cisg
ICAgICAgIChUZXN0VHJlZS5fX2luaXRfXyk6CisgICAgICAgIChUZXN0VHJlZS5jbGVhbik6Cisg
ICAgICAgIChUZXN0VHJlZS5maW5kX21vZHVsZXMpOgorICAgICAgICAoTG9hZGVyRXJyb3IpOgor
ICAgICAgICAoVGVzdGVyKToKKyAgICAgICAgKFRlc3Rlci5fX2luaXRfXyk6CisgICAgICAgIChU
ZXN0ZXIucGFyc2VfYXJncyk6CisgICAgICAgIChUZXN0ZXIuY29uZmlndXJlKToKKyAgICAgICAg
KFRlc3Rlci5jb25maWd1cmVfbG9nZ2luZyk6CisgICAgICAgIChUZXN0ZXIuYWRkX3RyZWUpOgor
ICAgICAgICAoVGVzdGVyLnJ1bik6CisgICAgICAgIChUZXN0ZXIuX2ZpeF9wYXRoKToKKyAgICAg
ICAgKFRlc3Rlci5fY2xlYW5fdHJlZXMpOgorICAgICAgICAoVGVzdGVyLl9jb3ZlcmFnZV9vYmpl
Y3QpOgorICAgICAgICAoVGVzdGVyLl9maW5kX21vZHVsZXMpOgorICAgICAgICAoVGVzdGVyLl9k
ZWZhdWx0X3Rlc3RzKToKKyAgICAgICAgKFRlc3Rlci5fc2tpcF9tb2R1bGVzKToKKyAgICAgICAg
KFRlc3Rlci5fZmluZF90ZXN0c19mb3IpOgorICAgICAgICAoVGVzdGVyLl90ZXN0X2Zyb21fcGF0
aCk6CisgICAgICAgIChUZXN0ZXIuX3N1aXRlX2Zyb21fbmFtZSk6CisgICAgICAgIChUZXN0ZXIu
X2ZpbmRfdHJlZSk6CisgICAgICAgIChUZXN0ZXIuX2lzX21vZHVsZSk6CisgICAgICAgIChUZXN0
ZXIuX3J1bl90ZXN0cyk6CisgICAgICAgIChUZXN0ZXIuX2xvZ19leGNlcHRpb24pOgorICAgICAg
ICAoVGVzdExvYWRlcik6CisgICAgICAgIChUZXN0TG9hZGVyLl9faW5pdF9fKToKKyAgICAgICAg
KFRlc3RMb2FkZXIuZ2V0VGVzdENhc2VOYW1lcyk6CisgICAgICAgIChUZXN0TG9hZGVyLmdldFRl
c3RDYXNlTmFtZXMuaXNUZXN0TWV0aG9kKToKKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L3Rl
c3QvbWFpbl91bml0dGVzdC5weTogQWRkZWQuCisgICAgICAgIChEdW1teVJlc3VsdCk6CisgICAg
ICAgIChEdW1teVJ1bm5lcik6CisgICAgICAgIChEdW1teVJ1bm5lci5fX2luaXRfXyk6CisgICAg
ICAgIChEdW1teVJ1bm5lci5ydW4pOgorICAgICAgICAoTWFpblRlc3QpOgorICAgICAgICAoTWFp
blRlc3QuY21kKToKKyAgICAgICAgKE1haW5UZXN0LmludGVncmF0aW9uX3Rlc3RfcGFja2FnZSk6
CisgICAgICAgIChNYWluVGVzdC5pbnRlZ3JhdGlvbl90ZXN0X21vZHVsZSk6CisgICAgICAgIChN
YWluVGVzdC5pbnRlZ3JhdGlvbl90ZXN0X2NsYXNzKToKKyAgICAgICAgKE1haW5UZXN0LmludGVn
cmF0aW9uX3Rlc3RfbWV0aG9kKToKKyAgICAgICAgKE1haW5UZXN0LmludGVncmF0aW9uX3Rlc3Rf
ZGlyZWN0b3J5KToKKyAgICAgICAgKE1haW5UZXN0LmludGVncmF0aW9uX3Rlc3RfY3dkKToKKyAg
ICAgICAgKE1haW5UZXN0LmludGVncmF0aW9uX3Rlc3RfZmlsZV9pbl9jd2QpOgorCiAyMDEyLTAy
LTAzICBEaXJrIFByYW5rZSAgPGRwcmFua2VAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIHdlYmtp
dHB5OiBjaGFuZ2UgZXhpdCgpIGNhbGxzIHRvIHN5cy5leGl0KCksIGZpeCBhIGxlYWsgaW4gb3V0
cHV0Y2FwdHVyZQpkaWZmIC0tZ2l0IGEvVG9vbHMvU2NyaXB0cy90ZXN0LXdlYmtpdHB5IGIvVG9v
bHMvU2NyaXB0cy90ZXN0LXdlYmtpdHB5CmluZGV4IDQyOThmZWFlMjM3M2E3YjhhMzdjNDBmYjlj
OGQwNTc0NjViZDk1NmEuLjZjMGY5MWYzOTE3ZWRhYjIzM2U3ZTRmYjY2MDRmZGYyZGI4NWFmODMg
MTAwNzU1Ci0tLSBhL1Rvb2xzL1NjcmlwdHMvdGVzdC13ZWJraXRweQorKysgYi9Ub29scy9TY3Jp
cHRzL3Rlc3Qtd2Via2l0cHkKQEAgLTM3LDE4ICszNywyMyBAQCBpbXBvcnQgc3lzCiBmcm9tIHdl
YmtpdHB5LmNvbW1vbiBpbXBvcnQgdmVyc2lvbl9jaGVjawogZnJvbSB3ZWJraXRweS50ZXN0IGlt
cG9ydCBtYWluCiAKLQotX2xvZyA9IGxvZ2dpbmcuZ2V0TG9nZ2VyKCJ0ZXN0LXdlYmtpdHB5IikK
LQorX2xvZyA9IGxvZ2dpbmcuZ2V0TG9nZ2VyKF9fbmFtZV9fKQogCiBpZiBfX25hbWVfXyA9PSAi
X19tYWluX18iOgogICAgIHdlYmtpdF9yb290ID0gb3MucGF0aC5kaXJuYW1lKG9zLnBhdGguZGly
bmFtZShvcy5wYXRoLmRpcm5hbWUob3MucGF0aC5hYnNwYXRoKF9fZmlsZV9fKSkpKQogCi0gICAg
IyBGSVhNRTogV2Ugc2hvdWxkIHByb2JhYmx5IHRlc3QgZWFjaCBwYWNrYWdlIHNlcGFyYXRlbHkg
dG8gYXZvaWQgbmFtaW5nIGNvbmZsaWN0cy4KLSAgICBkaXJzID0gWwotICAgICAgICBvcy5wYXRo
LmpvaW4od2Via2l0X3Jvb3QsICdUb29scycsICdTY3JpcHRzJyksCi0gICAgICAgIG9zLnBhdGgu
am9pbih3ZWJraXRfcm9vdCwgJ1NvdXJjZScsICdXZWJLaXQyJywgJ1NjcmlwdHMnKSwKLSAgICBd
CisgICAgdGVzdGVyID0gbWFpbi5UZXN0ZXIoc3lzLnN0ZGVycikKKyAgICBvcHRpb25zLCBhcmdz
ID0gdGVzdGVyLnBhcnNlX2FyZ3Moc3lzLmFyZ3ZbMTpdKQorICAgIHRlc3Rlci5jb25maWd1cmUo
b3B0aW9ucykKKyAgICB0ZXN0ZXIuY29uZmlndXJlX2xvZ2dpbmcoKQorCisgICAgdGhpcmRwYXJ0
eSA9IG9zLnBhdGguam9pbignd2Via2l0cHknLCAndGhpcmRwYXJ0eScpCisgICAgdGVzdGVyLmFk
ZF90cmVlKG9zLnBhdGguam9pbih3ZWJraXRfcm9vdCwgJ1Rvb2xzJywgJ1NjcmlwdHMnKSwgJ3dl
YmtpdHB5JywKKyAgICAgICAgICAgICAgICAgICAgW29zLnBhdGguam9pbih0aGlyZHBhcnR5LCAn
YXV0b2luc3RhbGxlZCcpLAorICAgICAgICAgICAgICAgICAgICAgb3MucGF0aC5qb2luKHRoaXJk
cGFydHksICdzaW1wbGVqc29uJyksCisgICAgICAgICAgICAgICAgICAgICBvcy5wYXRoLmpvaW4o
dGhpcmRwYXJ0eSwgJ0JlYXV0aWZ1bFNvdXAucHknKSwKKyAgICAgICAgICAgICAgICAgICAgIG9z
LnBhdGguam9pbih0aGlyZHBhcnR5LCAnbW9jay5weScpXSkKKyAgICB0ZXN0ZXIuYWRkX3RyZWUo
b3MucGF0aC5qb2luKHdlYmtpdF9yb290LCAnU291cmNlJywgJ1dlYktpdDInLCAnU2NyaXB0cycp
LCAnd2Via2l0MicpCiAKICAgICAjIEZJWE1FOiBEbyB3ZSBuZWVkIHRvIGJlIGFibGUgdG8gdGVz
dCBRdWV1ZVN0YXR1c1NlcnZlciBvbiBXaW5kb3dzIGFzIHdlbGw/CiAgICAgYXBwZW5naW5lX3Nk
a19wYXRoID0gJy91c3IvbG9jYWwvZ29vZ2xlX2FwcGVuZ2luZScKQEAgLTU5LDE3ICs2NCw3IEBA
IGlmIF9fbmFtZV9fID09ICJfX21haW5fXyI6CiAgICAgICAgIGZyb20gZ29vZ2xlLmFwcGVuZ2lu
ZS5kaXN0IGltcG9ydCB1c2VfbGlicmFyeQogICAgICAgICB1c2VfbGlicmFyeSgnZGphbmdvJywg
JzEuMicpCiAgICAgICAgIGRldl9hcHBzZXJ2ZXIuZml4X3N5c19wYXRoKCkKLSAgICAgICAgZGly
cy5hcHBlbmQob3MucGF0aC5qb2luKHdlYmtpdF9yb290LCAnVG9vbHMnLCAnUXVldWVTdGF0dXNT
ZXJ2ZXInKSkKKyAgICAgICAgdGVzdGVyLmFkZF90cmVlKG9zLnBhdGguam9pbih3ZWJraXRfcm9v
dCwgJ1Rvb2xzJywgJ1F1ZXVlU3RhdHVzU2VydmVyJyksICcnKQogICAgIGVsc2U6CiAgICAgICAg
IF9sb2cuaW5mbygnU2tpcHBpbmcgUXVldWVTdGF0dXNTZXJ2ZXIgdGVzdHM7IHRoZSBHb29nbGUg
QXBwRW5naW5lIFB5dGhvbiBTREsgaXMgbm90IGluc3RhbGxlZC4nKQotCi0gICAgbWFpbi5UZXN0
ZXIuY2xlYW5fcGFja2FnZXMoZGlycykKLQotICAgIHRlc3RlciA9IG1haW4uVGVzdGVyKCkKLSAg
ICBvcHRpb25zLCBhcmdzID0gdGVzdGVyLnBhcnNlX2FyZ3Moc3lzLmFyZ3YpCi0gICAgdGVzdGVy
LmNvbmZpZ3VyZShvcHRpb25zKQotCi0gICAgIyBNYWtlIHN1cmUgUFlUSE9OUEFUSCBpcyBzZXQg
dXAgY29ycmVjdGx5IHNvIHRoYXQgYWxsIG9mIHRoZSBpbXBvcnRzIHdpbGwgd29yay4KLSAgICBz
eXMucGF0aCA9IFtkIGZvciBkIGluIGRpcnMgaWYgZCBub3QgaW4gc3lzLnBhdGhdICsgc3lzLnBh
dGgKLQotICAgIHN5cy5leGl0KG5vdCB0ZXN0ZXIucnVuKGRpcnMsIGFyZ3MpKQorICAgIHN5cy5l
eGl0KG5vdCB0ZXN0ZXIucnVuKGFyZ3MpKQpkaWZmIC0tZ2l0IGEvVG9vbHMvU2NyaXB0cy93ZWJr
aXRweS90ZXN0L21haW4ucHkgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L3Rlc3QvbWFpbi5weQpp
bmRleCA3OGMzOWRiNTU3OTU3NmJmZjdlMmIzNzczMzg5MjVhYWRhOTllZWNiLi4wNzhiZDUyMWQw
ZDQwMTNjMDVjNTAwMmE2ODFlNWQ1NDg3ZGI1ZWFlIDEwMDY0NAotLS0gYS9Ub29scy9TY3JpcHRz
L3dlYmtpdHB5L3Rlc3QvbWFpbi5weQorKysgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L3Rlc3Qv
bWFpbi5weQpAQCAtMSwzICsxLDQgQEAKKyMgQ29weXJpZ2h0IChDKSAyMDExIEdvb2dsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAjIENvcHlyaWdodCAoQykgMjAxMCBDaHJpcyBKZXJkb25l
ayAoY2plcmRvbmVrQHdlYmtpdC5vcmcpCiAjCiAjIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dApAQCAtMjUsNiArMjYsNyBA
QAogaW1wb3J0IGxvZ2dpbmcKIGltcG9ydCBvcHRwYXJzZQogaW1wb3J0IG9zCitpbXBvcnQgcGRi
CiBpbXBvcnQgU3RyaW5nSU8KIGltcG9ydCBzeXMKIGltcG9ydCB0cmFjZWJhY2sKQEAgLTM1LDcy
ICszNywxMTUgQEAgaW1wb3J0IHVuaXR0ZXN0CiBfbG9nID0gbG9nZ2luZy5nZXRMb2dnZXIoX19u
YW1lX18pCiAKIAotY2xhc3MgVGVzdGVyKG9iamVjdCk6Ci0gICAgQHN0YXRpY21ldGhvZAotICAg
IGRlZiBjbGVhbl9wYWNrYWdlcyhkaXJzKToKLSAgICAgICAgIiIiRGVsZXRlIGFsbCAucHljIGZp
bGVzIHVuZGVyIGRpcnMgdGhhdCBoYXZlIG5vIC5weSBmaWxlLiIiIgotICAgICAgICBmb3IgZGly
X3RvX2NsZWFuIGluIGRpcnM6Ci0gICAgICAgICAgICBfbG9nLmRlYnVnKCJDbGVhbmluZyBvcnBo
YW5lZCAqLnB5YyBmaWxlcyBmcm9tOiAlcyIgJSBkaXJfdG9fY2xlYW4pCi0gICAgICAgICAgICBm
b3IgZGlyX3BhdGgsIGRpcl9uYW1lcywgZmlsZV9uYW1lcyBpbiBvcy53YWxrKGRpcl90b19jbGVh
bik6Ci0gICAgICAgICAgICAgICAgZm9yIGZpbGVfbmFtZSBpbiBmaWxlX25hbWVzOgotICAgICAg
ICAgICAgICAgICAgICBpZiBmaWxlX25hbWUuZW5kc3dpdGgoIi5weWMiKSBhbmQgZmlsZV9uYW1l
WzotMV0gbm90IGluIGZpbGVfbmFtZXM6Ci0gICAgICAgICAgICAgICAgICAgICAgICBmaWxlX3Bh
dGggPSBvcy5wYXRoLmpvaW4oZGlyX3BhdGgsIGZpbGVfbmFtZSkKLSAgICAgICAgICAgICAgICAg
ICAgICAgIF9sb2cuaW5mbygiRGVsZXRpbmcgb3JwaGFuICoucHljIGZpbGU6ICVzIiAlIGZpbGVf
cGF0aCkKLSAgICAgICAgICAgICAgICAgICAgICAgIG9zLnJlbW92ZShmaWxlX3BhdGgpCitjbGFz
cyBUZXN0VHJlZShvYmplY3QpOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCB0b3BfZGlyZWN0b3J5
LCBzdGFydGluZ19zdWJkaXJlY3RvcnksIGlnbm9yZV9saXN0KToKKyAgICAgICAgc2VsZi50b3Bf
ZGlyZWN0b3J5ID0gb3MucGF0aC5yZWFscGF0aCh0b3BfZGlyZWN0b3J5KQorICAgICAgICBzZWxm
LnNlYXJjaF9kaXJlY3RvcnkgPSBzZWxmLnRvcF9kaXJlY3RvcnkKKyAgICAgICAgc2VsZi5pZ25v
cmVfbGlzdCA9IFtvcy5wYXRoLmpvaW4oc2VsZi50b3BfZGlyZWN0b3J5LCB4KSBmb3IgeCBpbiBp
Z25vcmVfbGlzdF0KKyAgICAgICAgc2VsZi50b3BfcGFja2FnZSA9ICcnCisgICAgICAgIGlmIHN0
YXJ0aW5nX3N1YmRpcmVjdG9yeToKKyAgICAgICAgICAgIHNlbGYudG9wX3BhY2thZ2UgPSBzdGFy
dGluZ19zdWJkaXJlY3RvcnkucmVwbGFjZShvcy5zZXAsICcuJykgKyAnLicKKyAgICAgICAgICAg
IHNlbGYuc2VhcmNoX2RpcmVjdG9yeSA9IG9zLnBhdGguam9pbihzZWxmLnRvcF9kaXJlY3Rvcnks
IHN0YXJ0aW5nX3N1YmRpcmVjdG9yeSkKKworICAgIGRlZiBjbGVhbihzZWxmKToKKyAgICAgICAg
IiIiRGVsZXRlIGFsbCAucHljIGZpbGVzIGluIHRoZSB0cmVlIHRoYXQgaGF2ZSBubyBtYXRjaGlu
ZyAucHkgZmlsZS4iIiIKKyAgICAgICAgX2xvZy5kZWJ1ZygiQ2xlYW5pbmcgb3JwaGFuZWQgKi5w
eWMgZmlsZXMgZnJvbTogJXMiICUgc2VsZi5zZWFyY2hfZGlyZWN0b3J5KQorICAgICAgICBmb3Ig
ZGlyX3BhdGgsIGRpcl9uYW1lcywgZmlsZV9uYW1lcyBpbiBvcy53YWxrKHNlbGYuc2VhcmNoX2Rp
cmVjdG9yeSk6CisgICAgICAgICAgICAjIEZJWE1FOiBTaG91bGQgd2UgYmUgY2xlYW5pbmcgdGhl
IGlnbm9yZWQgc3ViZGlyZWN0b3JpZXMgYXMgd2VsbD8KKyAgICAgICAgICAgIGZvciBmaWxlX25h
bWUgaW4gZmlsZV9uYW1lczoKKyAgICAgICAgICAgICAgICBpZiBmaWxlX25hbWUuZW5kc3dpdGgo
Ii5weWMiKSBhbmQgZmlsZV9uYW1lWzotMV0gbm90IGluIGZpbGVfbmFtZXM6CisgICAgICAgICAg
ICAgICAgICAgIGZpbGVfcGF0aCA9IG9zLnBhdGguam9pbihkaXJfcGF0aCwgZmlsZV9uYW1lKQor
ICAgICAgICAgICAgICAgICAgICBfbG9nLmluZm8oIkRlbGV0aW5nIG9ycGhhbiAqLnB5YyBmaWxl
OiAlcyIgJSBmaWxlX3BhdGgpCisgICAgICAgICAgICAgICAgICAgIG9zLnJlbW92ZShmaWxlX3Bh
dGgpCisKKyAgICBkZWYgZmluZF9tb2R1bGVzKHNlbGYsIGRpcl90b19zZWFyY2gsIHN1ZmZpeGVz
KToKKyAgICAgICAgbW9kdWxlcyA9IFtdCisgICAgICAgIGZvciBkaXJfcGF0aCwgXywgZmlsZW5h
bWVzIGluIG9zLndhbGsoZGlyX3RvX3NlYXJjaCk6CisgICAgICAgICAgICBkaXJfcGF0aCA9IG9z
LnBhdGguam9pbihkaXJfcGF0aCwgJycpCisgICAgICAgICAgICBwYWNrYWdlID0gZGlyX3BhdGgu
cmVwbGFjZShzZWxmLnRvcF9kaXJlY3RvcnkgKyBvcy5zZXAsICcnKS5yZXBsYWNlKG9zLnNlcCwg
Jy4nKQorICAgICAgICAgICAgZm9yIGYgaW4gZmlsZW5hbWVzOgorICAgICAgICAgICAgICAgIGlm
IGFueShmLmVuZHN3aXRoKHN1ZmZpeCkgZm9yIHN1ZmZpeCBpbiBzdWZmaXhlcyk6CisgICAgICAg
ICAgICAgICAgICAgIG1vZHVsZXMuYXBwZW5kKHBhY2thZ2UgKyBmLnJlcGxhY2UoJy5weScsICcn
KSkKKyAgICAgICAgcmV0dXJuIG1vZHVsZXMKIAotICAgIGRlZiBfX2luaXRfXyhzZWxmKToKKwor
Y2xhc3MgTG9hZGVyRXJyb3IoRXhjZXB0aW9uKToKKyAgICBwYXNzCisKKworY2xhc3MgVGVzdGVy
KG9iamVjdCk6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHN0ZGVycik6CiAgICAgICAgIHNlbGYu
X3ZlcmJvc2l0eSA9IDEKKyAgICAgICAgc2VsZi50cmVlcyA9IFtdCisgICAgICAgIHNlbGYubG9h
ZGVyID0gTm9uZQorICAgICAgICBzZWxmLnJ1bm5lciA9IE5vbmUKKyAgICAgICAgc2VsZi5fbG9n
X2xldmVsID0gbG9nZ2luZy5JTkZPCisgICAgICAgIHNlbGYuc3RkZXJyID0gc3RkZXJyCiAKLSAg
ICBkZWYgcGFyc2VfYXJncyhzZWxmLCBhcmd2KToKKyAgICBkZWYgcGFyc2VfYXJncyhzZWxmLCBh
cmd2PU5vbmUpOgogICAgICAgICBwYXJzZXIgPSBvcHRwYXJzZS5PcHRpb25QYXJzZXIodXNhZ2U9
J3VzYWdlOiAlcHJvZyBbb3B0aW9uc10gW2FyZ3MuLi5dJykKICAgICAgICAgcGFyc2VyLmFkZF9v
cHRpb24oJy1hJywgJy0tYWxsJywgYWN0aW9uPSdzdG9yZV90cnVlJywgZGVmYXVsdD1GYWxzZSwK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVscD0ncnVuIGFsbCB0aGUgdGVzdHMnKSwKICAg
ICAgICAgcGFyc2VyLmFkZF9vcHRpb24oJy1jJywgJy0tY292ZXJhZ2UnLCBhY3Rpb249J3N0b3Jl
X3RydWUnLCBkZWZhdWx0PUZhbHNlLAotICAgICAgICAgICAgICAgICAgICAgICAgICBoZWxwPSdn
ZW5lcmF0ZSBjb2RlIGNvdmVyYWdlIGluZm8gKHJlcXVpcmVzIGh0dHA6Ly9weXBpLnB5dGhvbi5v
cmcvcHlwaS9jb3ZlcmFnZSknKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgaGVscD0nZ2Vu
ZXJhdGUgY29kZSBjb3ZlcmFnZSByZXBvcnQgKHJlcXVpcmVzIGh0dHA6Ly9weXBpLnB5dGhvbi5v
cmcvcHlwaS9jb3ZlcmFnZSknKSwKICAgICAgICAgcGFyc2VyLmFkZF9vcHRpb24oJy1xJywgJy0t
cXVpZXQnLCBhY3Rpb249J3N0b3JlX3RydWUnLCBkZWZhdWx0PUZhbHNlLAogICAgICAgICAgICAg
ICAgICAgICAgICAgICBoZWxwPSdydW4gcXVpZXRseSAoZXJyb3JzLCB3YXJuaW5ncywgYW5kIHBy
b2dyZXNzIG9ubHkpJyksCiAgICAgICAgIHBhcnNlci5hZGRfb3B0aW9uKCctcycsICctLXNpbGVu
dCcsIGFjdGlvbj0nc3RvcmVfdHJ1ZScsIGRlZmF1bHQ9RmFsc2UsCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGhlbHA9J3J1biBzaWxlbnRseSAoZXJyb3JzIGFuZCB3YXJuaW5ncyBvbmx5KScp
LAorICAgICAgICBwYXJzZXIuYWRkX29wdGlvbignLXQnLCAnLS10aW1pbmcnLCBhY3Rpb249J3N0
b3JlX3RydWUnLCBkZWZhdWx0PUZhbHNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICBoZWxw
PSdzaG93IGhvdyBsb25nIGVhY2ggdGVzdCB0YWtlcycpLAogICAgICAgICBwYXJzZXIuYWRkX29w
dGlvbignLXgnLCAnLS14bWwnLCBhY3Rpb249J3N0b3JlX3RydWUnLCBkZWZhdWx0PUZhbHNlLAog
ICAgICAgICAgICAgICAgICAgICAgICAgICBoZWxwPSdvdXRwdXQgeFVuaXQtc3R5bGUgWE1MIG91
dHB1dCcpCiAgICAgICAgIHBhcnNlci5hZGRfb3B0aW9uKCctdicsICctLXZlcmJvc2UnLCBhY3Rp
b249J2NvdW50JywgZGVmYXVsdD0wLAogICAgICAgICAgICAgICAgICAgICAgICAgICBoZWxwPSd2
ZXJib3NlIG91dHB1dCAoc3BlY2lmeSBvbmNlIGZvciBpbmRpdmlkdWFsIHRlc3QgcmVzdWx0cywg
dHdpY2UgZm9yIGRlYnVnIG1lc3NhZ2VzKScpCisKKyAgICAgICAgIyBGSVhNRTogV2UgbmVlZCB0
byB1bmlmeSB0aGVzZSB0d28gdHlwZXMgb2YgdGVzdHMgYW5kIG1ha2UgdGhlbSBjb25zaXN0ZW50
LgogICAgICAgICBwYXJzZXIuYWRkX29wdGlvbignLS1za2lwLWludGVncmF0aW9udGVzdHMnLCBh
Y3Rpb249J3N0b3JlX3RydWUnLCBkZWZhdWx0PUZhbHNlLAogICAgICAgICAgICAgICAgICAgICAg
ICAgICBoZWxwPSdkbyBub3QgcnVuIHRoZSBpbnRlZ3JhdGlvbiB0ZXN0cycpCisgICAgICAgIHBh
cnNlci5hZGRfb3B0aW9uKCctaScsICctLXJ1bi1yZWFsLWludGVncmF0aW9udGVzdHMnLCBhY3Rp
b249J3N0b3JlX3RydWUnLCBkZWZhdWx0PUZhbHNlLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICBoZWxwPSdkbyBub3QgcnVuIHRoZSByZWFsIGludGVncmF0aW9uIHRlc3RzJykKIAogICAgICAg
ICBwYXJzZXIuZXBpbG9nID0gKCdbYXJncy4uLl0gaXMgYW4gb3B0aW9uYWwgbGlzdCBvZiBtb2R1
bGVzLCB0ZXN0X2NsYXNzZXMsIG9yIGluZGl2aWR1YWwgdGVzdHMuICcKICAgICAgICAgICAgICAg
ICAgICAgICAgICAnSWYgbm8gYXJncyBhcmUgZ2l2ZW4sIGFsbCB0aGUgdGVzdHMgd2lsbCBiZSBy
dW4uJykKIAotICAgICAgICBzZWxmLnByb2dOYW1lID0gb3MucGF0aC5iYXNlbmFtZShhcmd2WzBd
KQotICAgICAgICByZXR1cm4gcGFyc2VyLnBhcnNlX2FyZ3MoYXJndlsxOl0pCisgICAgICAgIHJl
dHVybiBwYXJzZXIucGFyc2VfYXJncyhhcmd2KQogCiAgICAgZGVmIGNvbmZpZ3VyZShzZWxmLCBv
cHRpb25zKToKICAgICAgICAgc2VsZi5fb3B0aW9ucyA9IG9wdGlvbnMKIAogICAgICAgICBpZiBv
cHRpb25zLnNpbGVudDoKICAgICAgICAgICAgIHNlbGYuX3ZlcmJvc2l0eSA9IDAKLSAgICAgICAg
ICAgIHNlbGYuX2NvbmZpZ3VyZV9sb2dnaW5nKGxvZ2dpbmcuV0FSTklORykKKyAgICAgICAgICAg
IHNlbGYuX2xvZ19sZXZlbCA9IGxvZ2dpbmcuV0FSTklORwogICAgICAgICBlbGlmIG9wdGlvbnMu
cXVpZXQ6CiAgICAgICAgICAgICBzZWxmLl92ZXJib3NpdHkgPSAxCi0gICAgICAgICAgICBzZWxm
Ll9jb25maWd1cmVfbG9nZ2luZyhsb2dnaW5nLldBUk5JTkcpCisgICAgICAgICAgICBzZWxmLl9s
b2dfbGV2ZWwgPSBsb2dnaW5nLldBUk5JTkcKICAgICAgICAgZWxpZiBvcHRpb25zLnZlcmJvc2Ug
PT0gMDoKICAgICAgICAgICAgIHNlbGYuX3ZlcmJvc2l0eSA9IDEKLSAgICAgICAgICAgIHNlbGYu
X2NvbmZpZ3VyZV9sb2dnaW5nKGxvZ2dpbmcuSU5GTykKKyAgICAgICAgICAgIHNlbGYuX2xvZ19s
ZXZlbCA9IGxvZ2dpbmcuSU5GTwogICAgICAgICBlbGlmIG9wdGlvbnMudmVyYm9zZSA9PSAxOgog
ICAgICAgICAgICAgc2VsZi5fdmVyYm9zaXR5ID0gMgotICAgICAgICAgICAgc2VsZi5fY29uZmln
dXJlX2xvZ2dpbmcobG9nZ2luZy5JTkZPKQorICAgICAgICAgICAgc2VsZi5fbG9nX2xldmVsID0g
bG9nZ2luZy5JTkZPCiAgICAgICAgIGVsaWYgb3B0aW9ucy52ZXJib3NlID09IDI6CiAgICAgICAg
ICAgICBzZWxmLl92ZXJib3NpdHkgPSAyCi0gICAgICAgICAgICBzZWxmLl9jb25maWd1cmVfbG9n
Z2luZyhsb2dnaW5nLkRFQlVHKQorICAgICAgICAgICAgc2VsZi5fbG9nX2xldmVsID0gbG9nZ2lu
Zy5ERUJVRwogCi0gICAgZGVmIF9jb25maWd1cmVfbG9nZ2luZyhzZWxmLCBsb2dfbGV2ZWwpOgor
ICAgICAgICBzZWxmLmxvYWRlciA9IFRlc3RMb2FkZXIoKQorICAgICAgICBzZWxmLmxvYWRlci5y
dW5fcmVhbF9pbnRlZ3JhdGlvbl90ZXN0cyA9IG9wdGlvbnMucnVuX3JlYWxfaW50ZWdyYXRpb250
ZXN0cworICAgICAgICBpZiBzZWxmLl9vcHRpb25zLnhtbDoKKyAgICAgICAgICAgIGZyb20gd2Vi
a2l0cHkudGhpcmRwYXJ0eS5hdXRvaW5zdGFsbGVkLnhtbHJ1bm5lciBpbXBvcnQgWE1MVGVzdFJ1
bm5lcgorICAgICAgICAgICAgc2VsZi5ydW5uZXIgPSBYTUxUZXN0UnVubmVyKG91dHB1dD0ndGVz
dC13ZWJraXRweS14bWwtcmVwb3J0cycpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxm
LnJ1bm5lciA9IHVuaXR0ZXN0LlRleHRUZXN0UnVubmVyKHNlbGYuc3RkZXJyLCB2ZXJib3NpdHk9
c2VsZi5fdmVyYm9zaXR5KQorCisgICAgZGVmIGNvbmZpZ3VyZV9sb2dnaW5nKHNlbGYpOgogICAg
ICAgICAiIiJDb25maWd1cmUgdGhlIHJvb3QgbG9nZ2VyLgogCiAgICAgICAgIENvbmZpZ3VyZSB0
aGUgcm9vdCBsb2dnZXIgbm90IHRvIGxvZyBhbnkgbWVzc2FnZXMgZnJvbSB3ZWJraXRweSAtLQog
ICAgICAgICBleGNlcHQgZm9yIG1lc3NhZ2VzIGZyb20gdGhlIGF1dG9pbnN0YWxsIG1vZHVsZS4g
IEFsc28gc2V0IHRoZQogICAgICAgICBsb2dnaW5nIGxldmVsIGFzIGRlc2NyaWJlZCBiZWxvdy4K
ICAgICAgICAgIiIiCi0gICAgICAgIGhhbmRsZXIgPSBsb2dnaW5nLlN0cmVhbUhhbmRsZXIoc3lz
LnN0ZGVycikKKyAgICAgICAgbG9nX2xldmVsID0gc2VsZi5fbG9nX2xldmVsCisgICAgICAgIGhh
bmRsZXIgPSBsb2dnaW5nLlN0cmVhbUhhbmRsZXIoc2VsZi5zdGRlcnIpCiAgICAgICAgICMgV2Ug
Y29uc3RyYWluIHRoZSBsZXZlbCBvbiB0aGUgaGFuZGxlciByYXRoZXIgdGhhbiBvbiB0aGUgcm9v
dAogICAgICAgICAjIGxvZ2dlciBpdHNlbGYuICBUaGlzIGlzIHByb2JhYmx5IGJldHRlciBiZWNh
dXNlIHRoZSBoYW5kbGVyIGlzCiAgICAgICAgICMgY29uZmlndXJlZCBhbmQga25vd24gb25seSB0
byB0aGlzIG1vZHVsZSwgd2hlcmVhcyB0aGUgcm9vdCBsb2dnZXIKQEAgLTE0MSwzMiArMTg2LDg0
IEBAIGNsYXNzIFRlc3RlcihvYmplY3QpOgogICAgICAgICBfbG9nLmluZm8oIlN1cHByZXNzaW5n
IG1vc3Qgd2Via2l0cHkgbG9nZ2luZyB3aGlsZSBydW5uaW5nIHVuaXQgdGVzdHMuIikKICAgICAg
ICAgaGFuZGxlci5hZGRGaWx0ZXIodGVzdGluZ19maWx0ZXIpCiAKLSAgICBkZWYgcnVuKHNlbGYs
IGRpcnMsIGFyZ3MpOgotICAgICAgICBhcmdzID0gYXJncyBvciBzZWxmLl9maW5kX21vZHVsZXMo
ZGlycykKLSAgICAgICAgcmV0dXJuIHNlbGYuX3J1bl90ZXN0cyhkaXJzLCBhcmdzKQotCi0gICAg
ZGVmIF9maW5kX21vZHVsZXMoc2VsZiwgZGlycyk6Ci0gICAgICAgIG1vZHVsZXMgPSBbXQotICAg
ICAgICBmb3IgZGlyX3RvX3NlYXJjaCBpbiBkaXJzOgotICAgICAgICAgICAgbW9kdWxlcy5leHRl
bmQoc2VsZi5fZmluZF9tb2R1bGVzX3VuZGVyKGRpcl90b19zZWFyY2gsICdfdW5pdHRlc3QucHkn
KSkKLSAgICAgICAgICAgIGlmIG5vdCBzZWxmLl9vcHRpb25zLnNraXBfaW50ZWdyYXRpb250ZXN0
czoKLSAgICAgICAgICAgICAgICBtb2R1bGVzLmV4dGVuZChzZWxmLl9maW5kX21vZHVsZXNfdW5k
ZXIoZGlyX3RvX3NlYXJjaCwgJ19pbnRlZ3JhdGlvbnRlc3QucHknKSkKLSAgICAgICAgbW9kdWxl
cy5zb3J0KCkKLQotICAgICAgICBmb3IgbW9kdWxlIGluIG1vZHVsZXM6Ci0gICAgICAgICAgICBf
bG9nLmRlYnVnKCJGb3VuZDogJXMiICUgbW9kdWxlKQotCi0gICAgICAgICMgRklYTUU6IEZpZ3Vy
ZSBvdXQgaG93IHRvIG1vdmUgdGhpcyB0byB0ZXN0LXdlYmtpdHB5IGluIG9yZGVyIHRvIHRvIG1h
a2UgdGhpcyBmaWxlIG1vcmUgZ2VuZXJpYy4KLSAgICAgICAgaWYgbm90IHNlbGYuX29wdGlvbnMu
YWxsOgotICAgICAgICAgICAgc2xvd190ZXN0cyA9ICgnd2Via2l0cHkuY29tbW9uLmNoZWNrb3V0
LnNjbS5zY21fdW5pdHRlc3QnLCkKLSAgICAgICAgICAgIHNlbGYuX2V4Y2x1ZGUobW9kdWxlcywg
c2xvd190ZXN0cywgJ2FyZSByZWFsbHksIHJlYWxseSBzbG93JywgMzE4MTgpCi0KLSAgICAgICAg
ICAgIGlmIHN5cy5wbGF0Zm9ybSA9PSAnd2luMzInOgotICAgICAgICAgICAgICAgIHdpbjMyX2Js
YWNrbGlzdCA9ICgnd2Via2l0cHkuY29tbW9uLmNoZWNrb3V0JywKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgJ3dlYmtpdHB5LmNvbW1vbi5jb25maWcnLAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAnd2Via2l0cHkudG9vbCcpCi0gICAgICAgICAgICAgICAg
c2VsZi5fZXhjbHVkZShtb2R1bGVzLCB3aW4zMl9ibGFja2xpc3QsICdmYWlsIGhvcnJpYmx5IG9u
IHdpbjMyJywgNTQ1MjYpCi0KKyAgICBkZWYgYWRkX3RyZWUoc2VsZiwgdG9wX2RpcmVjdG9yeSwg
c3RhcnRpbmdfc3ViZGlyZWN0b3J5PU5vbmUsIGlnbm9yZV9saXN0PU5vbmUpOgorICAgICAgICBz
ZWxmLnRyZWVzLmFwcGVuZChUZXN0VHJlZSh0b3BfZGlyZWN0b3J5LCBzdGFydGluZ19zdWJkaXJl
Y3RvcnksIGlnbm9yZV9saXN0IG9yIFtdKSkKKworICAgIGRlZiBydW4oc2VsZiwgYXJncyk6Cisg
ICAgICAgIHNlbGYuX2NsZWFuX3RyZWVzKCkKKyAgICAgICAgc2VsZi5fZml4X3BhdGgoKQorCisg
ICAgICAgIHRyeToKKyAgICAgICAgICAgIGNvdiA9IE5vbmUKKyAgICAgICAgICAgIGlmIHNlbGYu
X29wdGlvbnMuY292ZXJhZ2U6CisgICAgICAgICAgICAgICAgY292ID0gc2VsZi5fY292ZXJhZ2Vf
b2JqZWN0KCkKKyAgICAgICAgICAgICAgICBjb3Yuc3RhcnQoKQorCisgICAgICAgICAgICBfbG9n
LmRlYnVnKCJMb2FkaW5nIHRoZSB0ZXN0cy4uLiIpCisgICAgICAgICAgICBpZiBhcmdzOgorICAg
ICAgICAgICAgICAgIHRlc3RzID0gW10KKyAgICAgICAgICAgICAgICBmb3IgYXJnIGluIGFyZ3M6
CisgICAgICAgICAgICAgICAgICAgIHRlc3RzLmV4dGVuZChzZWxmLl9maW5kX3Rlc3RzX2Zvcihh
cmcpKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAjIEZJWE1FOiBDb25zaWRl
ciBydW5uaW5nIGVhY2ggdHJlZSBzZXBhcmF0ZWx5IHRvIGF2b2lkIG5hbWVzcGFjZSBjbGFzaGVz
LgorICAgICAgICAgICAgICAgIHRlc3RzID0gc2VsZi5fZGVmYXVsdF90ZXN0cygpCisKKyAgICAg
ICAgICAgIHJlc3VsdCA9IHNlbGYuX3J1bl90ZXN0cyh0ZXN0cykKKyAgICAgICAgICAgIGlmIGNv
djoKKyAgICAgICAgICAgICAgICBjb3Yuc3RvcCgpCisgICAgICAgICAgICAgICAgY292LnJlcG9y
dChzaG93X21pc3Npbmc9RmFsc2UpCisgICAgICAgICAgICByZXR1cm4gcmVzdWx0Lndhc1N1Y2Nl
c3NmdWwKKworICAgICAgICBleGNlcHQgTG9hZGVyRXJyb3IsIGU6CisgICAgICAgICAgICByZXR1
cm4gRmFsc2UKKworICAgIGRlZiBfZml4X3BhdGgoc2VsZik6CisgICAgICAgICMgTWFrZSBzdXJl
IFBZVEhPTlBBVEggaXMgc2V0IHVwIGNvcnJlY3RseS4KKyAgICAgICAgc3lzLnBhdGggPSBbdHJl
ZS50b3BfZGlyZWN0b3J5IGZvciB0cmVlIGluIHNlbGYudHJlZXMgaWYgdHJlZS50b3BfZGlyZWN0
b3J5IG5vdCBpbiBzeXMucGF0aF0gKyBzeXMucGF0aAorCisgICAgZGVmIF9jbGVhbl90cmVlcyhz
ZWxmKToKKyAgICAgICAgZm9yIHRyZWUgaW4gc2VsZi50cmVlczoKKyAgICAgICAgICAgIHRyZWUu
Y2xlYW4oKQorCisgICAgZGVmIF9jb3ZlcmFnZV9vYmplY3Qoc2VsZik6CisgICAgICAgIHRyeToK
KyAgICAgICAgICAgIGltcG9ydCB3ZWJraXRweS50aGlyZHBhcnR5LmF1dG9pbnN0YWxsZWQuY292
ZXJhZ2UgYXMgY292ZXJhZ2UKKyAgICAgICAgZXhjZXB0IEltcG9ydEVycm9yLCBlOgorICAgICAg
ICAgICAgX2xvZy5lcnJvcigiRmFpbGVkIHRvIGltcG9ydCAnY292ZXJhZ2UnOyBjYW4ndCBnZW5l
cmF0ZSBjb3ZlcmFnZSBudW1iZXJzLiIpCisgICAgICAgICAgICByYWlzZSBMb2FkZXJFcnJvcigp
CisKKyAgICAgICAgaW5jbHVkZSA9IFtvcy5wYXRoLmpvaW4odHJlZS5zZWFyY2hfZGlyZWN0b3J5
LCAnKicpIGZvciB0cmVlIGluIHNlbGYudHJlZXNdCisgICAgICAgIG9taXQgPSBbXQorICAgICAg
ICBmb3IgdHJlZSBpbiBzZWxmLnRyZWVzOgorICAgICAgICAgICAgZm9yIHBhdGggaW4gdHJlZS5p
Z25vcmVfbGlzdDoKKyAgICAgICAgICAgICAgICBpZiBvcy5wYXRoLmlzZGlyKHBhdGgpOgorICAg
ICAgICAgICAgICAgICAgICBvbWl0LmFwcGVuZChvcy5wYXRoLmpvaW4ocGF0aCwgJyonKSkKKyAg
ICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICBvbWl0LmFwcGVuZChwYXRo
KQorICAgICAgICByZXR1cm4gY292ZXJhZ2UuY292ZXJhZ2UoaW5jbHVkZT1pbmNsdWRlLCBvbWl0
PW9taXQpCisKKyAgICBkZWYgX2ZpbmRfbW9kdWxlcyhzZWxmLCB0cmVlLCBkaXJfdG9fc2VhcmNo
KToKKyAgICAgICAgc3VmZml4ZXMgPSAoJ191bml0dGVzdC5weScsICdfaW50ZWdyYXRpb250ZXN0
LnB5JykKKyAgICAgICAgaWYgc2VsZi5fb3B0aW9ucy5za2lwX2ludGVncmF0aW9udGVzdHM6Cisg
ICAgICAgICAgICBzdWZmaXhlcyA9ICgnX3VuaXR0ZXN0LnB5JywpCisgICAgICAgIHJldHVybiB0
cmVlLmZpbmRfbW9kdWxlcyhkaXJfdG9fc2VhcmNoLCBzdWZmaXhlcykKKworICAgIGRlZiBfZGVm
YXVsdF90ZXN0cyhzZWxmKToKKyAgICAgICAgdGVzdHMgPSBbXQorICAgICAgICBmb3IgdHJlZSBp
biBzZWxmLnRyZWVzOgorICAgICAgICAgICAgdGVzdHMuZXh0ZW5kKHNlbGYuX2ZpbmRfbW9kdWxl
cyh0cmVlLCB0cmVlLnNlYXJjaF9kaXJlY3RvcnkpKQorICAgICAgICByZXR1cm4gdGVzdHMKKwor
ICAgIGRlZiBfc2tpcF9tb2R1bGVzKHNlbGYsIG1vZHVsZXMpOgorICAgICAgICAjIEZJWE1FOiBU
aGVzZSBzaG91bGQgYmUgcmVwbGFjZWQgdy8gQHNsb3cgYW5kIEBza2lwX2lmIGRlY29yYXRvcnMK
KyAgICAgICAgc2xvd190ZXN0cyA9ICgnd2Via2l0cHkuY29tbW9uLmNoZWNrb3V0LnNjbS5zY21f
dW5pdHRlc3QnLCkKKyAgICAgICAgc2VsZi5fZXhjbHVkZShtb2R1bGVzLCBzbG93X3Rlc3RzLCAn
YXJlIHJlYWxseSwgcmVhbGx5IHNsb3cnLCAzMTgxOCkKKworICAgICAgICBpZiBzeXMucGxhdGZv
cm0gPT0gJ3dpbjMyJzoKKyAgICAgICAgICAgIHdpbjMyX2JsYWNrbGlzdCA9ICgnd2Via2l0cHku
Y29tbW9uLmNoZWNrb3V0JywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3dlYmtp
dHB5LmNvbW1vbi5jb25maWcnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnd2Vi
a2l0cHkudG9vbCcpCisgICAgICAgICAgICBzZWxmLl9leGNsdWRlKG1vZHVsZXMsIHdpbjMyX2Js
YWNrbGlzdCwgJ2ZhaWwgaG9ycmlibHkgb24gd2luMzInLCA1NDUyNikKICAgICAgICAgcmV0dXJu
IG1vZHVsZXMKIAogICAgIGRlZiBfZXhjbHVkZShzZWxmLCBtb2R1bGVzLCBtb2R1bGVfcHJlZml4
ZXMsIHJlYXNvbiwgYnVnaWQpOgpAQCAtMTgxLDY2ICsyNzgsMTAwIEBAIGNsYXNzIFRlc3Rlcihv
YmplY3QpOgogICAgICAgICBfbG9nLmluZm8oJyAgICAoaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPSVkOyB1c2UgLS1hbGwgdG8gaW5jbHVkZSknICUgYnVnaWQpCiAgICAg
ICAgIF9sb2cuaW5mbygnJykKIAotICAgIGRlZiBfZmluZF9tb2R1bGVzX3VuZGVyKHNlbGYsIGRp
cl90b19zZWFyY2gsIHN1ZmZpeCk6Ci0KLSAgICAgICAgZGVmIHRvX3BhY2thZ2UoZGlyX3BhdGgp
OgotICAgICAgICAgICAgcmV0dXJuIGRpcl9wYXRoLnJlcGxhY2UoZGlyX3RvX3NlYXJjaCArIG9z
LnNlcCwgJycpLnJlcGxhY2Uob3Muc2VwLCAnLicpCi0KLSAgICAgICAgZGVmIHRvX21vZHVsZShm
aWxlbmFtZSwgcGFja2FnZSk6Ci0gICAgICAgICAgICByZXR1cm4gcGFja2FnZSArICcuJyArIGZp
bGVuYW1lLnJlcGxhY2UoJy5weScsICcnKQotCi0gICAgICAgIG1vZHVsZXMgPSBbXQotICAgICAg
ICBmb3IgZGlyX3BhdGgsIF8sIGZpbGVuYW1lcyBpbiBvcy53YWxrKGRpcl90b19zZWFyY2gpOgot
ICAgICAgICAgICAgcGFja2FnZSA9IHRvX3BhY2thZ2UoZGlyX3BhdGgpCi0gICAgICAgICAgICBt
b2R1bGVzLmV4dGVuZCh0b19tb2R1bGUoZiwgcGFja2FnZSkgZm9yIGYgaW4gZmlsZW5hbWVzIGlm
IGYuZW5kc3dpdGgoc3VmZml4KSkKLSAgICAgICAgcmV0dXJuIG1vZHVsZXMKLQotICAgIGRlZiBf
cnVuX3Rlc3RzKHNlbGYsIGRpcnMsIGFyZ3MpOgotICAgICAgICBpZiBzZWxmLl9vcHRpb25zLmNv
dmVyYWdlOgorICAgIGRlZiBfZmluZF90ZXN0c19mb3Ioc2VsZiwgbmFtZSk6CisgICAgICAgICh0
cmVlLCBzdGFydGluZ19kaXJlY3RvcnkpID0gc2VsZi5fZmluZF90cmVlKG5hbWUpCisgICAgICAg
IGlmIHRyZWUgYW5kIG5vdCBvcy5wYXRoLmlzZmlsZShzdGFydGluZ19kaXJlY3RvcnkpOgorICAg
ICAgICAgICAgcmV0dXJuIHNlbGYuX2ZpbmRfbW9kdWxlcyh0cmVlLCBzdGFydGluZ19kaXJlY3Rv
cnkpCisgICAgICAgIGVsaWYgb3MucGF0aC5leGlzdHMobmFtZSk6CisgICAgICAgICAgICByZXR1
cm4gW3NlbGYuX3Rlc3RfZnJvbV9wYXRoKG5hbWUpXQorICAgICAgICBlbHNlOgorICAgICAgICAg
ICAgcmV0dXJuIFtuYW1lXQorCisgICAgZGVmIF90ZXN0X2Zyb21fcGF0aChzZWxmLCBuYW1lKToK
KyAgICAgICAgIyBGaXJzdCwgY2hlY2sgdG8gc2VlIGlmIHdlIGNhbiByZXNvbHZlIHRoZSBwYXRo
IHJlbGF0aXZlIHRvIHRoZSBjd2QuCisgICAgICAgIGZ1bGxfcGF0aCA9IG9zLnBhdGgucmVhbHBh
dGgobmFtZSkKKyAgICAgICAgZm9yIHRyZWUgaW4gc2VsZi50cmVlczoKKyAgICAgICAgICAgICMg
RklYTUU6IERvIHdlIG5lZWQgdG8gd29ycnkgYWJvdXQgY2FzZS1pbnNlbnNpdGl2aXR5IGhlcmU/
CisgICAgICAgICAgICBpZiBmdWxsX3BhdGguc3RhcnRzd2l0aCh0cmVlLnRvcF9kaXJlY3Rvcnkp
OgorICAgICAgICAgICAgICAgIHJldHVybiBmdWxsX3BhdGgucmVwbGFjZSh0cmVlLnRvcF9kaXJl
Y3RvcnkgKyBvcy5zZXAsICcnKS5yZXBsYWNlKCcucHknLCAnJykucmVwbGFjZShvcy5zZXAsICcu
JykKKworICAgICAgICBlcnIgPSAnJXMgaXMgbm90IGluIG9uZSBvZiB0aGUgV2ViS2l0IHB5dGhv
biB0cmVlcycgJSBuYW1lCisgICAgICAgIF9sb2cuZmF0YWwoZXJyKQorICAgICAgICByYWlzZSBM
b2FkZXJFcnJvcihlcnIpCisKKyAgICBkZWYgX3N1aXRlX2Zyb21fbmFtZShzZWxmLCBuYW1lKToK
KyAgICAgICAgaWYgc2VsZi5faXNfbW9kdWxlKG5hbWUpOgorICAgICAgICAgICAgIyBpbXBvcnQg
bW9kdWxlcyBleHBsaWNpdGx5IGJlZm9yZSBsb2FkaW5nIHRoZWlyIHRlc3RzIGJlY2F1c2UKKyAg
ICAgICAgICAgICMgbG9hZFRlc3RzRnJvbU5hbWUoKSBwcm9kdWNlcyBsb3VzeSBlcnJvciBtZXNz
YWdlcyBmb3IgYmFkIG1vZHVsZXMuCiAgICAgICAgICAgICB0cnk6Ci0gICAgICAgICAgICAgICAg
aW1wb3J0IGNvdmVyYWdlCisgICAgICAgICAgICAgICAgX19pbXBvcnRfXyhuYW1lKQogICAgICAg
ICAgICAgZXhjZXB0IEltcG9ydEVycm9yLCBlOgotICAgICAgICAgICAgICAgIF9sb2cuZXJyb3Io
IkZhaWxlZCB0byBpbXBvcnQgJ2NvdmVyYWdlJzsgY2FuJ3QgZ2VuZXJhdGUgY292ZXJhZ2UgbnVt
YmVycy4iKQotICAgICAgICAgICAgICAgIHJldHVybiBGYWxzZQotICAgICAgICAgICAgY292ID0g
Y292ZXJhZ2UuY292ZXJhZ2UoKQotICAgICAgICAgICAgY292LnN0YXJ0KCkKLQotICAgICAgICBf
bG9nLmRlYnVnKCJMb2FkaW5nIHRoZSB0ZXN0cy4uLiIpCi0KLSAgICAgICAgbG9hZGVyID0gdW5p
dHRlc3QuZGVmYXVsdFRlc3RMb2FkZXIKLSAgICAgICAgc3VpdGVzID0gW10KLSAgICAgICAgZm9y
IG5hbWUgaW4gYXJnczoKLSAgICAgICAgICAgIGlmIHNlbGYuX2lzX21vZHVsZShkaXJzLCBuYW1l
KToKLSAgICAgICAgICAgICAgICAjIGltcG9ydCBtb2R1bGVzIGV4cGxpY2l0bHkgYmVmb3JlIGxv
YWRpbmcgdGhlaXIgdGVzdHMgYmVjYXVzZQotICAgICAgICAgICAgICAgICMgbG9hZFRlc3RzRnJv
bU5hbWUoKSBwcm9kdWNlcyBsb3VzeSBlcnJvciBtZXNzYWdlcyBmb3IgYmFkIG1vZHVsZXMuCi0g
ICAgICAgICAgICAgICAgdHJ5OgotICAgICAgICAgICAgICAgICAgICBfX2ltcG9ydF9fKG5hbWUp
Ci0gICAgICAgICAgICAgICAgZXhjZXB0IEltcG9ydEVycm9yLCBlOgotICAgICAgICAgICAgICAg
ICAgICBfbG9nLmZhdGFsKCdGYWlsZWQgdG8gaW1wb3J0ICVzOicgJSBuYW1lKQotICAgICAgICAg
ICAgICAgICAgICBzZWxmLl9sb2dfZXhjZXB0aW9uKCkKLSAgICAgICAgICAgICAgICAgICAgcmV0
dXJuIEZhbHNlCi0gICAgICAgICAgICBzdWl0ZXMuYXBwZW5kKGxvYWRlci5sb2FkVGVzdHNGcm9t
TmFtZShuYW1lLCBOb25lKSkKKyAgICAgICAgICAgICAgICBfbG9nLmZhdGFsKCdGYWlsZWQgdG8g
aW1wb3J0ICVzOicgJSBuYW1lKQorICAgICAgICAgICAgICAgIHNlbGYuX2xvZ19leGNlcHRpb24o
KQorICAgICAgICAgICAgICAgIHJhaXNlIExvYWRlckVycm9yKCkKKyAgICAgICAgcmV0dXJuIHNl
bGYubG9hZGVyLmxvYWRUZXN0c0Zyb21OYW1lKG5hbWUsIE5vbmUpCisKKyAgICBkZWYgX2ZpbmRf
dHJlZShzZWxmLCBuYW1lKToKKyAgICAgICAgIyBJcyB0aGUgbmFtZSBhIHN1YmRpcmVjdG9yeSBy
ZWxhdGl2ZSB0byB0aGUgY3VycmVudCB3b3JraW5nIGRpcmVjdG9yeSBhbmQgaW4gYSB0cmVlPwor
ICAgICAgICBpZiBvcy5wYXRoLmV4aXN0cyhuYW1lKToKKyAgICAgICAgICAgIGZ1bGxfcGF0aCA9
IG9zLnBhdGgucmVhbHBhdGgobmFtZSkKKyAgICAgICAgICAgIGZvciB0cmVlIGluIHNlbGYudHJl
ZXM6CisgICAgICAgICAgICAgICAgaWYgZnVsbF9wYXRoLnN0YXJ0c3dpdGgodHJlZS50b3BfZGly
ZWN0b3J5KToKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuICh0cmVlLCBmdWxsX3BhdGgpCisK
KyAgICAgICAgIyBJcyB0aGUgbmFtZSBhIHN1YmRpcmVjdG9yeSBvZiBhIHRyZWU/CisgICAgICAg
IGlmIG5vdCBvcy5wYXRoLmlzYWJzKG5hbWUpOgorICAgICAgICAgICAgZm9yIHRyZWUgaW4gc2Vs
Zi50cmVlczoKKyAgICAgICAgICAgICAgICBmdWxsX3BhdGggPSBvcy5wYXRoLnJlYWxwYXRoKG9z
LnBhdGguam9pbih0cmVlLnRvcF9kaXJlY3RvcnksIG5hbWUpKQorICAgICAgICAgICAgICAgIGlm
IG9zLnBhdGguaXNkaXIoZnVsbF9wYXRoKToKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuICh0
cmVlLCBvcy5wYXRoLmpvaW4odHJlZS50b3BfZGlyZWN0b3J5LCBuYW1lKSkKKworICAgICAgICAj
IElzIHRoZSBuYW1lIGEgcGFja2FnZT8KKyAgICAgICAgcmVscGF0aCA9IG5hbWUucmVwbGFjZSgn
LicsIG9zLnNlcCkKKyAgICAgICAgZm9yIHRyZWUgaW4gc2VsZi50cmVlczoKKyAgICAgICAgICAg
IGZ1bGxfcGF0aCA9IG9zLnBhdGguam9pbih0cmVlLnRvcF9kaXJlY3RvcnksIHJlbHBhdGgpCisg
ICAgICAgICAgICBpZiBvcy5wYXRoLmlzZGlyKGZ1bGxfcGF0aCk6CisgICAgICAgICAgICAgICAg
cmV0dXJuICh0cmVlLCBmdWxsX3BhdGgpCisKKyAgICAgICAgcmV0dXJuIChOb25lLCBOb25lKQor
CisgICAgZGVmIF9pc19tb2R1bGUoc2VsZiwgbmFtZSk6CisgICAgICAgIHJlbHBhdGggPSBuYW1l
LnJlcGxhY2UoJy4nLCBvcy5zZXApICsgJy5weScKKyAgICAgICAgcmV0dXJuIGFueShvcy5wYXRo
LmV4aXN0cyhvcy5wYXRoLmpvaW4odHJlZS50b3BfZGlyZWN0b3J5LCByZWxwYXRoKSkgZm9yIHRy
ZWUgaW4gc2VsZi50cmVlcykKIAotICAgICAgICB0ZXN0X3N1aXRlID0gdW5pdHRlc3QuVGVzdFN1
aXRlKHN1aXRlcykKLSAgICAgICAgaWYgc2VsZi5fb3B0aW9ucy54bWw6Ci0gICAgICAgICAgICBm
cm9tIHdlYmtpdHB5LnRoaXJkcGFydHkuYXV0b2luc3RhbGxlZC54bWxydW5uZXIgaW1wb3J0IFhN
TFRlc3RSdW5uZXIKLSAgICAgICAgICAgIHRlc3RfcnVubmVyID0gWE1MVGVzdFJ1bm5lcihvdXRw
dXQ9J3Rlc3Qtd2Via2l0cHkteG1sLXJlcG9ydHMnKQotICAgICAgICBlbHNlOgotICAgICAgICAg
ICAgdGVzdF9ydW5uZXIgPSB1bml0dGVzdC5UZXh0VGVzdFJ1bm5lcih2ZXJib3NpdHk9c2VsZi5f
dmVyYm9zaXR5KQorICAgIGRlZiBfcnVuX3Rlc3RzKHNlbGYsIHRlc3RzKToKKyAgICAgICAgIyBT
b3J0IGFuZCBkZWR1cGxpY2F0ZSBhbGwgb2YgdGhlIHRlc3RzCisgICAgICAgIHRlc3RzID0gc29y
dGVkKFt0ZXN0IGZvciB0ZXN0IGluIHNldCh0ZXN0cyldKQogCi0gICAgICAgIF9sb2cuZGVidWco
IlJ1bm5pbmcgdGhlIHRlc3RzLiIpCi0gICAgICAgIHJlc3VsdCA9IHRlc3RfcnVubmVyLnJ1bih0
ZXN0X3N1aXRlKQotICAgICAgICBpZiBzZWxmLl9vcHRpb25zLmNvdmVyYWdlOgotICAgICAgICAg
ICAgY292LnN0b3AoKQotICAgICAgICAgICAgY292LnNhdmUoKQotICAgICAgICByZXR1cm4gcmVz
dWx0Lndhc1N1Y2Nlc3NmdWwoKQorICAgICAgICBmb3IgdGVzdCBpbiB0ZXN0czoKKyAgICAgICAg
ICAgIF9sb2cuZGVidWcoIkZvdW5kOiAlcyIgJSB0ZXN0KQogCi0gICAgZGVmIF9pc19tb2R1bGUo
c2VsZiwgZGlycywgbmFtZSk6Ci0gICAgICAgIHJlbHBhdGggPSBuYW1lLnJlcGxhY2UoJy4nLCBv
cy5zZXApICsgJy5weScKLSAgICAgICAgcmV0dXJuIGFueShvcy5wYXRoLmV4aXN0cyhvcy5wYXRo
LmpvaW4oZCwgcmVscGF0aCkpIGZvciBkIGluIGRpcnMpCisgICAgICAgIGlmIG5vdCBzZWxmLl9v
cHRpb25zLmFsbDoKKyAgICAgICAgICAgIHRlc3RzID0gc2VsZi5fc2tpcF9tb2R1bGVzKHRlc3Rz
KQorCisgICAgICAgIHN1aXRlcyA9IFtzZWxmLl9zdWl0ZV9mcm9tX25hbWUodGVzdCkgZm9yIHRl
c3QgaW4gdGVzdHNdCisgICAgICAgIF9sb2cuZGVidWcoIlJ1bm5pbmcgdGhlIHRlc3RzLiIpCisg
ICAgICAgIHRlc3Rfc3VpdGUgPSB1bml0dGVzdC5UZXN0U3VpdGUoc3VpdGVzKQorICAgICAgICBy
ZXR1cm4gc2VsZi5ydW5uZXIucnVuKHRlc3Rfc3VpdGUpCiAKICAgICBkZWYgX2xvZ19leGNlcHRp
b24oc2VsZik6CiAgICAgICAgIHMgPSBTdHJpbmdJTy5TdHJpbmdJTygpCiAgICAgICAgIHRyYWNl
YmFjay5wcmludF9leGMoZmlsZT1zKQogICAgICAgICBmb3IgbCBpbiBzLmJ1Zmxpc3Q6CiAgICAg
ICAgICAgICBfbG9nLmVycm9yKCcgICcgKyBsLnJzdHJpcCgpKQorCisKK2NsYXNzIFRlc3RMb2Fk
ZXIodW5pdHRlc3QuVGVzdExvYWRlcik6CisgICAgZGVmIF9faW5pdF9fKHNlbGYpOgorICAgICAg
ICBzZWxmLnJ1bl9yZWFsX2ludGVncmF0aW9uX3Rlc3RzID0gRmFsc2UKKyAgICAgICAgc3VwZXIo
VGVzdExvYWRlciwgc2VsZikuX19pbml0X18oKQorCisgICAgZGVmIGdldFRlc3RDYXNlTmFtZXMo
c2VsZiwgdGVzdENhc2VDbGFzcyk6CisgICAgICAgIGRlZiBpc1Rlc3RNZXRob2QoYXR0cm5hbWUs
IHRlc3RDYXNlQ2xhc3M9dGVzdENhc2VDbGFzcyk6CisgICAgICAgICAgICBpZiBub3QgaGFzYXR0
cihnZXRhdHRyKHRlc3RDYXNlQ2xhc3MsIGF0dHJuYW1lKSwgJ19fY2FsbF9fJyk6CisgICAgICAg
ICAgICAgICAgcmV0dXJuIEZhbHNlCisgICAgICAgICAgICByZXR1cm4gKChhdHRybmFtZS5zdGFy
dHN3aXRoKCd0ZXN0JykpIG9yCisgICAgICAgICAgICAgICAgICAgIChzZWxmLnJ1bl9yZWFsX2lu
dGVncmF0aW9uX3Rlc3RzIGFuZCBhdHRybmFtZS5zdGFydHN3aXRoKCdpbnRlZ3JhdGlvbl90ZXN0
XycpKSkKKyAgICAgICAgdGVzdEZuTmFtZXMgPSBmaWx0ZXIoaXNUZXN0TWV0aG9kLCBkaXIodGVz
dENhc2VDbGFzcykpCisgICAgICAgIHRlc3RGbk5hbWVzLnNvcnQoKQorICAgICAgICByZXR1cm4g
dGVzdEZuTmFtZXMKZGlmZiAtLWdpdCBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvdGVzdC9tYWlu
X3VuaXR0ZXN0LnB5IGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS90ZXN0L21haW5fdW5pdHRlc3Qu
cHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMC4uMTQwNTg4OTczYWVhYWRlM2QwMmM2YmYwMjVjZGE4MzI5NmRkMGY0ZQot
LS0gL2Rldi9udWxsCisrKyBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvdGVzdC9tYWluX3VuaXR0
ZXN0LnB5CkBAIC0wLDAgKzEsOTQgQEAKKyMgQ29weXJpZ2h0IChDKSAyMDExIEdvb2dsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjCisjIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorIyBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyMgYXJl
IG1ldDoKKyMgMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisjICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisjIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorIyAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyMKKyMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKKyMgQU5Z
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgVEhFIElNUExJRUQKKyMgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorIyBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUgor
IyBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMCisjIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SCisjIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
CisjIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCisjIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisjIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCisKK2ltcG9ydCBvcworaW1wb3J0IHBkYgoraW1wb3J0IGNTdHJpbmdJTyBhcyBTdHJp
bmdJTworaW1wb3J0IHN5cworaW1wb3J0IHVuaXR0ZXN0CisKK2Zyb20gd2Via2l0cHkudGVzdC5t
YWluIGltcG9ydCBUZXN0ZXIKKworCitjbGFzcyBEdW1teVJlc3VsdChvYmplY3QpOgorICAgIHdh
c1N1Y2Nlc3NmdWwgPSBUcnVlCisKKworY2xhc3MgRHVtbXlSdW5uZXIob2JqZWN0KToKKyAgICBk
ZWYgX19pbml0X18oc2VsZiwgc3RyZWFtLCAqYXJncywgKiprd2FyZ3MpOgorICAgICAgICBzZWxm
LnN0cmVhbSA9IHN0cmVhbQorICAgICAgICBwYXNzCisKKyAgICBkZWYgcnVuKHNlbGYsIHN1aXRl
KToKKyAgICAgICAgc2VsZi5zdHJlYW0ud3JpdGUoJ1JhbiAlZCB0ZXN0cy4nICUgc3VpdGUuY291
bnRUZXN0Q2FzZXMoKSkKKyAgICAgICAgcmV0dXJuIER1bW15UmVzdWx0KCkKKword2Via2l0X3Jv
b3QgPSBvcy5wYXRoLmRpcm5hbWUob3MucGF0aC5kaXJuYW1lKG9zLnBhdGguZGlybmFtZShvcy5w
YXRoLmRpcm5hbWUob3MucGF0aC5kaXJuYW1lKF9fZmlsZV9fKSkpKSkKKworCitjbGFzcyBNYWlu
VGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgZGVmIGNtZChzZWxmLCBhcmdzLCBjd2Q9Tm9u
ZSwgc3RkZXJyPU5vbmUsIHJldD1UcnVlLCBudW1fdGVzdHM9Tm9uZSk6CisgICAgICAgIG9sZGN3
ZCA9IG9zLmdldGN3ZCgpCisgICAgICAgIGlmIG5vdCBjd2Q6CisgICAgICAgICAgICBjd2QgPSAn
L3NyYy93aycKKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgb3MuY2hkaXIoY3dkKQorICAgICAg
ICAgICAgZXJyID0gU3RyaW5nSU8uU3RyaW5nSU8oKQorICAgICAgICAgICAgdGVzdGVyID0gVGVz
dGVyKGVycikKKyAgICAgICAgICAgIG9wdGlvbnMsIGFyZ3MgPSB0ZXN0ZXIucGFyc2VfYXJncyhh
cmdzKQorICAgICAgICAgICAgdGVzdGVyLmNvbmZpZ3VyZShvcHRpb25zKQorICAgICAgICAgICAg
dGVzdGVyLmFkZF90cmVlKG9zLnBhdGguam9pbih3ZWJraXRfcm9vdCwgJ1Rvb2xzJywgJ1Njcmlw
dHMnKSwgJ3dlYmtpdHB5JykKKyAgICAgICAgICAgIHRlc3Rlci5ydW5uZXIgPSBEdW1teVJ1bm5l
cihlcnIpCisgICAgICAgICAgICByZXR1cm5jb2RlID0gdGVzdGVyLnJ1bihhcmdzKQorICAgICAg
ICBmaW5hbGx5OgorICAgICAgICAgICAgb3MuY2hkaXIob2xkY3dkKQorCisgICAgICAgIHNlbGYu
YXNzZXJ0RXF1YWwocmV0LCByZXR1cm5jb2RlKQorICAgICAgICBhY3R1YWxfZXJyID0gZXJyLmdl
dHZhbHVlKCkKKyAgICAgICAgaWYgc3RkZXJyIGlzIG5vdCBOb25lOgorICAgICAgICAgICAgc2Vs
Zi5hc3NlcnRFcXVhbChhY3R1YWxfZXJyLCBzdGRlcnIpCisgICAgICAgIGlmIG51bV90ZXN0cyBp
cyBub3QgTm9uZToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSgoJ1JhbiAlZCB0ZXN0JyAl
IG51bV90ZXN0cykgaW4gYWN0dWFsX2VyciwgYWN0dWFsX2VycikKKworICAgIGRlZiBpbnRlZ3Jh
dGlvbl90ZXN0X3BhY2thZ2Uoc2VsZik6CisgICAgICAgIHNlbGYuY21kKFsnd2Via2l0cHkuY29t
bW9uLndhdGNobGlzdCddLCBudW1fdGVzdHM9MzcpCisKKyAgICBkZWYgaW50ZWdyYXRpb25fdGVz
dF9tb2R1bGUoc2VsZik6CisgICAgICAgIHNlbGYuY21kKFsnd2Via2l0cHkuY29tbW9uLndhdGNo
bGlzdC53YXRjaGxpc3RfdW5pdHRlc3QnXSwgbnVtX3Rlc3RzPTEwKQorCisgICAgZGVmIGludGVn
cmF0aW9uX3Rlc3RfY2xhc3Moc2VsZik6CisgICAgICAgIHNlbGYuY21kKFsnd2Via2l0cHkuY29t
bW9uLndhdGNobGlzdC53YXRjaGxpc3RfdW5pdHRlc3QuV2F0Y2hMaXN0VGVzdCddLCBudW1fdGVz
dHM9MTApCisKKyAgICBkZWYgaW50ZWdyYXRpb25fdGVzdF9tZXRob2Qoc2VsZik6CisgICAgICAg
IHNlbGYuY21kKFsnd2Via2l0cHkuY29tbW9uLndhdGNobGlzdC53YXRjaGxpc3RfdW5pdHRlc3Qu
V2F0Y2hMaXN0VGVzdC50ZXN0X2ZpbGVuYW1lX2RlZmluaXRpb24nXSwgbnVtX3Rlc3RzPTEpCisK
KyAgICBkZWYgaW50ZWdyYXRpb25fdGVzdF9kaXJlY3Rvcnkoc2VsZik6CisgICAgICAgIHNlbGYu
Y21kKFsnd2Via2l0cHkvY29tbW9uL3dhdGNobGlzdCddLCBudW1fdGVzdHM9MzcpCisKKyAgICBk
ZWYgaW50ZWdyYXRpb25fdGVzdF9jd2Qoc2VsZik6CisgICAgICAgIHNlbGYuY21kKFsnLiddLCBj
d2Q9Jy9zcmMvd2svVG9vbHMvU2NyaXB0cy93ZWJraXRweS9jb21tb24vd2F0Y2hsaXN0JywgbnVt
X3Rlc3RzPTM3KQorCisgICAgZGVmIGludGVncmF0aW9uX3Rlc3RfY3dkKHNlbGYpOgorICAgICAg
ICBzZWxmLmNtZChbJ3dhdGNobGlzdCddLCBjd2Q9Jy9zcmMvd2svVG9vbHMvU2NyaXB0cy93ZWJr
aXRweS9jb21tb24nLCBudW1fdGVzdHM9MzcpCisKKyAgICBkZWYgaW50ZWdyYXRpb25fdGVzdF9m
aWxlX2luX2N3ZChzZWxmKToKKyAgICAgICAgc2VsZi5jbWQoWyd3YXRjaGxpc3Qvd2F0Y2hsaXN0
X3VuaXR0ZXN0LnB5J10sIGN3ZD0nL3NyYy93ay9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2NvbW1v
bicsIG51bV90ZXN0cz0xMCkK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>133946</attachid>
            <date>2012-03-26 17:56:42 -0700</date>
            <delta_ts>2012-03-28 13:21:50 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-76765-20120326175641.patch</filename>
            <type>text/plain</type>
            <size>13512</size>
            <attacher name="Dirk Pranke">dpranke</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTEyMTczCmRpZmYgLS1naXQgYS9Ub29scy9DaGFuZ2VMb2cg
Yi9Ub29scy9DaGFuZ2VMb2cKaW5kZXggNWQ4NDNmNmNlZjNhYmVmMDdjNjFhYmE4Y2FiYThhMTU5
ODYwMmEwMS4uNDYxZDg5MWFmNGIyNTBmNzdlMjZhNmU4YzI2ZjZkZGEwYWU3MGUzYiAxMDA2NDQK
LS0tIGEvVG9vbHMvQ2hhbmdlTG9nCisrKyBiL1Rvb2xzL0NoYW5nZUxvZwpAQCAtMSw1ICsxLDQy
IEBACiAyMDEyLTAzLTI2ICBEaXJrIFByYW5rZSAgPGRwcmFua2VAY2hyb21pdW0ub3JnPgogCisg
ICAgICAgIHRlc3Qtd2Via2l0cHkgc2hvdWxkIHN1cHBvcnQgZmlsZXMsIGRpcmVjdG9yaWVzLCBh
bmQgcGFja2FnZXMgYXMgY29tbWFuZCBsaW5lIGFyZ3MKKyAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTc2NzY1CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9C
T0RZIChPT1BTISkuCisKKyAgICAgICAgVGhpcyBwYXRjaCBhZGRzIHN1cHBvcnQgZm9yIHNwZWNp
ZnlpbmcgZmlsZXMsIGRpcmVjdG9yaWVzLCBhbmQKKyAgICAgICAgcGFja2FnZXMgdG8gdGVzdC13
ZWJraXRweSBhbG9uZyB3aXRoIHRoZSBhbHJlYWR5IGV4aXN0aW5nCisgICAgICAgIHN1cHBvcnQg
Zm9yIG1vZHVsZXMsIHRlc3QgY2xhc3NlcywgYW5kIGluZGl2aWR1YWwgdGVzdCBuYW1lcy4KKwor
ICAgICAgICBBbHNvLCBmaXggYSBidWcgaW4gZmlsZXN5c3RlbV9tb2NrIHdoZXJlIHdlIHdvdWxk
bid0IG5vcm1hbGl6ZSBhCisgICAgICAgIHBhdGggY29udGFpbmluZyBhIHJlZmVyZW5jZSB0byB0
aGUgY3VycmVudCBkaXJlY3RvcnkgcHJvcGVybHksCisgICAgICAgIGZvciBleGFtcGxlLCAnL2Zv
by8uL2Jhci5weScuCisKKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L2NvbW1vbi9zeXN0ZW0v
ZmlsZXN5c3RlbV9tb2NrLnB5OgorICAgICAgICAoTW9ja0ZpbGVTeXN0ZW0ubm9ybXBhdGgpOgor
ICAgICAgICAqIFNjcmlwdHMvd2Via2l0cHkvdGVzdC9tYWluLnB5OgorICAgICAgICAoVGVzdGVy
Ll9jb25maWd1cmVfbG9nZ2luZyk6CisgICAgICAgIChUZXN0ZXIuX3J1bl90ZXN0cyk6CisgICAg
ICAgICogU2NyaXB0cy93ZWJraXRweS90ZXN0L3Rlc3RfZmluZGVyLnB5OgorICAgICAgICAoVGVz
dERpcmVjdG9yeVRyZWUuZmluZF9tb2R1bGVzKToKKyAgICAgICAgKFRlc3REaXJlY3RvcnlUcmVl
LnN1YnBhdGgpOgorICAgICAgICAoVGVzdEZpbmRlci5pc19kb3R0ZWRfbmFtZSk6CisgICAgICAg
IChUZXN0RmluZGVyLmZpbmRfbmFtZXMpOgorICAgICAgICAoVGVzdEZpbmRlcik6CisgICAgICAg
IChUZXN0RmluZGVyLl9maW5kX25hbWVzX2Zvcl9hcmcpOgorICAgICAgICAoVGVzdEZpbmRlci5f
ZmluZF9pbl90cmVlcyk6CisgICAgICAgIChUZXN0RmluZGVyLl9kZWZhdWx0X25hbWVzKToKKyAg
ICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L3Rlc3QvdGVzdF9maW5kZXJfdW5pdHRlc3QucHk6Cisg
ICAgICAgIChUZXN0RmluZGVyVGVzdC5zZXRVcCk6CisgICAgICAgIChUZXN0RmluZGVyVGVzdC50
ZWFyRG93bik6CisgICAgICAgIChUZXN0RmluZGVyVGVzdC5jaGVja19uYW1lcyk6CisgICAgICAg
IChUZXN0RmluZGVyVGVzdC50ZXN0X2RlZmF1bHRfbmFtZXMpOgorICAgICAgICAoVGVzdEZpbmRl
clRlc3QpOgorICAgICAgICAoVGVzdEZpbmRlclRlc3QudGVzdF9wYXRocyk6CisKKzIwMTItMDMt
MjYgIERpcmsgUHJhbmtlICA8ZHByYW5rZUBjaHJvbWl1bS5vcmc+CisKICAgICAgICAgRml4IGR1
cGxpY2F0ZWQgQ2hhbmdlTG9nIGVudHJ5IGZyb20gcjExMjE3MS4KIAogICAgICAgICBVbnJldmll
d2VkLCBidWlsZCBmaXguCmRpZmYgLS1naXQgYS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2NvbW1v
bi9zeXN0ZW0vZmlsZXN5c3RlbV9tb2NrLnB5IGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9jb21t
b24vc3lzdGVtL2ZpbGVzeXN0ZW1fbW9jay5weQppbmRleCA4ODk5NjY4N2MxOWEwZmNjODA1MTcw
ZDg1NTQxMzAyN2I2NDgxNzA3Li40ZjU2NzdkZjgyZGFlMjkxNDQwYWZiZGU1NWQyYmQ0NGRiYjQ3
ZDcwIDEwMDY0NAotLS0gYS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2NvbW1vbi9zeXN0ZW0vZmls
ZXN5c3RlbV9tb2NrLnB5CisrKyBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvY29tbW9uL3N5c3Rl
bS9maWxlc3lzdGVtX21vY2sucHkKQEAgLTI3OCw3ICsyNzgsNyBAQCBjbGFzcyBNb2NrRmlsZVN5
c3RlbShvYmplY3QpOgogICAgIGRlZiBub3JtcGF0aChzZWxmLCBwYXRoKToKICAgICAgICAgIyBU
aGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBhIGxvdCwgc28gd2UgdHJ5IHRvIG9wdGltaXplIHRoZSBj
b21tb24gY2FzZXMKICAgICAgICAgIyBpbnN0ZWFkIG9mIGFsd2F5cyBjYWxsaW5nIF9zbG93X2J1
dF9jb3JyZWN0X25vcm1wYXRoKCksIGFib3ZlLgotICAgICAgICBpZiAnLi4nIGluIHBhdGg6Cisg
ICAgICAgIGlmICcuLicgaW4gcGF0aCBvciAnLy4vJyBpbiBwYXRoOgogICAgICAgICAgICAgIyBU
aGlzIGRvZXNuJ3QgaGFwcGVuIHZlcnkgb2Z0ZW47IGRvbid0IGJvdGhlciB0cnlpbmcgdG8gb3B0
aW1pemUgaXQuCiAgICAgICAgICAgICByZXR1cm4gc2VsZi5fc2xvd19idXRfY29ycmVjdF9ub3Jt
cGF0aChwYXRoKQogICAgICAgICBpZiBub3QgcGF0aDoKZGlmZiAtLWdpdCBhL1Rvb2xzL1Njcmlw
dHMvd2Via2l0cHkvdGVzdC9tYWluLnB5IGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS90ZXN0L21h
aW4ucHkKaW5kZXggYjJlYmFiZTRjZjE5ZmNiZDBiMTJiNjIwNGU0MTM5NGZiYzlmZGMxNC4uYjZl
ZTY1MGNiMjI4YmM0ZTYwZjI0NzNlMmUyNmFiYmRlYjIzZmEyZCAxMDA2NDQKLS0tIGEvVG9vbHMv
U2NyaXB0cy93ZWJraXRweS90ZXN0L21haW4ucHkKKysrIGIvVG9vbHMvU2NyaXB0cy93ZWJraXRw
eS90ZXN0L21haW4ucHkKQEAgLTI0LDcgKzI0LDYgQEAKIAogaW1wb3J0IGxvZ2dpbmcKIGltcG9y
dCBvcHRwYXJzZQotaW1wb3J0IG9zCiBpbXBvcnQgU3RyaW5nSU8KIGltcG9ydCBzeXMKIGltcG9y
dCB0cmFjZWJhY2sKQEAgLTEwMCw2ICs5OSw3IEBAIGNsYXNzIFRlc3RlcihvYmplY3QpOgogICAg
ICAgICAjIE1vZGlmeWluZyB0aGUgaGFuZGxlciwgdGhlbiwgaXMgbGVzcyBpbnRydXNpdmUgYW5k
IGxlc3MgbGlrZWx5IHRvCiAgICAgICAgICMgaW50ZXJmZXJlIHdpdGggbW9kaWZpY2F0aW9ucyBt
YWRlIGJ5IG90aGVyIG1vZHVsZXMgKGUuZy4gaW4gdW5pdAogICAgICAgICAjIHRlc3RzKS4KKyAg
ICAgICAgaGFuZGxlci5uYW1lID0gX19uYW1lX18KICAgICAgICAgaGFuZGxlci5zZXRMZXZlbChs
b2dfbGV2ZWwpCiAgICAgICAgIGZvcm1hdHRlciA9IGxvZ2dpbmcuRm9ybWF0dGVyKCIlKG1lc3Nh
Z2UpcyIpCiAgICAgICAgIGhhbmRsZXIuc2V0Rm9ybWF0dGVyKGZvcm1hdHRlcikKQEAgLTE0Miw3
ICsxNDIsNyBAQCBjbGFzcyBUZXN0ZXIob2JqZWN0KToKICAgICAgICAgbmFtZXMgPSBzZWxmLmZp
bmRlci5maW5kX25hbWVzKGFyZ3MsIHNlbGYuX29wdGlvbnMuc2tpcF9pbnRlZ3JhdGlvbnRlc3Rz
LCBzZWxmLl9vcHRpb25zLmFsbCkKICAgICAgICAgcmV0dXJuIHNlbGYuX3J1bl90ZXN0cyhuYW1l
cykKIAotICAgIGRlZiBfcnVuX3Rlc3RzKHNlbGYsIGFyZ3MpOgorICAgIGRlZiBfcnVuX3Rlc3Rz
KHNlbGYsIG5hbWVzKToKICAgICAgICAgaWYgc2VsZi5fb3B0aW9ucy5jb3ZlcmFnZToKICAgICAg
ICAgICAgIHRyeToKICAgICAgICAgICAgICAgICBpbXBvcnQgd2Via2l0cHkudGhpcmRwYXJ0eS5h
dXRvaW5zdGFsbGVkLmNvdmVyYWdlIGFzIGNvdmVyYWdlCkBAIC0xNTksNyArMTU5LDcgQEAgY2xh
c3MgVGVzdGVyKG9iamVjdCk6CiAKICAgICAgICAgbG9hZGVyID0gdW5pdHRlc3QuZGVmYXVsdFRl
c3RMb2FkZXIKICAgICAgICAgc3VpdGVzID0gW10KLSAgICAgICAgZm9yIG5hbWUgaW4gYXJnczoK
KyAgICAgICAgZm9yIG5hbWUgaW4gbmFtZXM6CiAgICAgICAgICAgICBpZiBzZWxmLmZpbmRlci5p
c19tb2R1bGUobmFtZSk6CiAgICAgICAgICAgICAgICAgIyBpbXBvcnQgbW9kdWxlcyBleHBsaWNp
dGx5IGJlZm9yZSBsb2FkaW5nIHRoZWlyIHRlc3RzIGJlY2F1c2UKICAgICAgICAgICAgICAgICAj
IGxvYWRUZXN0c0Zyb21OYW1lKCkgcHJvZHVjZXMgbG91c3kgZXJyb3IgbWVzc2FnZXMgZm9yIGJh
ZCBtb2R1bGVzLgpkaWZmIC0tZ2l0IGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS90ZXN0L3Rlc3Rf
ZmluZGVyLnB5IGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS90ZXN0L3Rlc3RfZmluZGVyLnB5Cmlu
ZGV4IGNhZTQ2OTUzZmMxODA3Y2NhYTA3MmM2YzhmYWM2ZjlmNGIzYzA4NGUuLjNhOTAxOTdlOWUy
NzEyMGZhNDEyZjM5YmMxMmI0MGQwNTBmOTkyYTQgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1NjcmlwdHMv
d2Via2l0cHkvdGVzdC90ZXN0X2ZpbmRlci5weQorKysgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5
L3Rlc3QvdGVzdF9maW5kZXIucHkKQEAgLTI0LDYgKzI0LDcgQEAKICIiInRoaXMgbW9kdWxlIGlz
IHJlc3BvbnNpYmxlIGZvciBmaW5kaW5nIHB5dGhvbiB0ZXN0cy4iIiIKIAogaW1wb3J0IGxvZ2dp
bmcKK2ltcG9ydCByZQogaW1wb3J0IHN5cwogCiAKQEAgLTQwLDE3ICs0MSwyOSBAQCBjbGFzcyBU
ZXN0RGlyZWN0b3J5VHJlZShvYmplY3QpOgogICAgICAgICAgICAgc2VsZi50b3BfcGFja2FnZSA9
IHN0YXJ0aW5nX3N1YmRpcmVjdG9yeS5yZXBsYWNlKGZpbGVzeXN0ZW0uc2VwLCAnLicpICsgJy4n
CiAgICAgICAgICAgICBzZWxmLnNlYXJjaF9kaXJlY3RvcnkgPSBmaWxlc3lzdGVtLmpvaW4oc2Vs
Zi50b3BfZGlyZWN0b3J5LCBzdGFydGluZ19zdWJkaXJlY3RvcnkpCiAKLSAgICBkZWYgZmluZF9t
b2R1bGVzKHNlbGYsIHN1ZmZpeGVzKToKKyAgICBkZWYgZmluZF9tb2R1bGVzKHNlbGYsIHN1ZmZp
eGVzLCBzdWJfZGlyZWN0b3J5PU5vbmUpOgorICAgICAgICBpZiBzdWJfZGlyZWN0b3J5OgorICAg
ICAgICAgICAgc2VhcmNoX2RpcmVjdG9yeSA9IHNlbGYuZmlsZXN5c3RlbS5qb2luKHNlbGYudG9w
X2RpcmVjdG9yeSwgc3ViX2RpcmVjdG9yeSkKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNl
YXJjaF9kaXJlY3RvcnkgPSBzZWxmLnNlYXJjaF9kaXJlY3RvcnkKIAogICAgICAgICBkZWYgZmls
ZV9maWx0ZXIoZmlsZXN5c3RlbSwgZGlybmFtZSwgYmFzZW5hbWUpOgogICAgICAgICAgICAgcmV0
dXJuIGFueShiYXNlbmFtZS5lbmRzd2l0aChzdWZmaXgpIGZvciBzdWZmaXggaW4gc3VmZml4ZXMp
CiAKLSAgICAgICAgZmlsZW5hbWVzID0gc2VsZi5maWxlc3lzdGVtLmZpbGVzX3VuZGVyKHNlbGYu
c2VhcmNoX2RpcmVjdG9yeSwgZmlsZV9maWx0ZXI9ZmlsZV9maWx0ZXIpCisgICAgICAgIGZpbGVu
YW1lcyA9IHNlbGYuZmlsZXN5c3RlbS5maWxlc191bmRlcihzZWFyY2hfZGlyZWN0b3J5LCBmaWxl
X2ZpbHRlcj1maWxlX2ZpbHRlcikKICAgICAgICAgcmV0dXJuIFtzZWxmLnRvX21vZHVsZShmaWxl
bmFtZSkgZm9yIGZpbGVuYW1lIGluIGZpbGVuYW1lc10KIAogICAgIGRlZiB0b19tb2R1bGUoc2Vs
ZiwgcGF0aCk6CiAgICAgICAgIHJldHVybiBwYXRoLnJlcGxhY2Uoc2VsZi50b3BfZGlyZWN0b3J5
ICsgc2VsZi5maWxlc3lzdGVtLnNlcCwgJycpLnJlcGxhY2Uoc2VsZi5maWxlc3lzdGVtLnNlcCwg
Jy4nKVs6LTNdCiAKKyAgICBkZWYgc3VicGF0aChzZWxmLCBwYXRoKToKKyAgICAgICAgIiIiUmV0
dXJucyB0aGUgcmVsYXRpdmUgcGF0aCBmcm9tIHRoZSB0b3Agb2YgdGhlIHRyZWUgdG8gdGhlIHBh
dGgsIG9yIE5vbmUgaWYgdGhlIHBhdGggaXMgbm90IHVuZGVyIHRoZSB0b3Agb2YgdGhlIHRyZWUu
IiIiCisgICAgICAgIHJlYWxwYXRoID0gc2VsZi5maWxlc3lzdGVtLnJlYWxwYXRoKHNlbGYuZmls
ZXN5c3RlbS5qb2luKHNlbGYudG9wX2RpcmVjdG9yeSwgcGF0aCkpCisgICAgICAgIGlmIHJlYWxw
YXRoLnN0YXJ0c3dpdGgoc2VsZi50b3BfZGlyZWN0b3J5ICsgc2VsZi5maWxlc3lzdGVtLnNlcCk6
CisgICAgICAgICAgICByZXR1cm4gcmVhbHBhdGgucmVwbGFjZShzZWxmLnRvcF9kaXJlY3Rvcnkg
KyBzZWxmLmZpbGVzeXN0ZW0uc2VwLCAnJykKKyAgICAgICAgcmV0dXJuIE5vbmUKKworCiAgICAg
ZGVmIGNsZWFuKHNlbGYpOgogICAgICAgICAiIiJEZWxldGUgYWxsIC5weWMgZmlsZXMgaW4gdGhl
IHRyZWUgdGhhdCBoYXZlIG5vIG1hdGNoaW5nIC5weSBmaWxlLiIiIgogICAgICAgICBfbG9nLmRl
YnVnKCJDbGVhbmluZyBvcnBoYW5lZCAqLnB5YyBmaWxlcyBmcm9tOiAlcyIgJSBzZWxmLnNlYXJj
aF9kaXJlY3RvcnkpCkBAIC04MCw2ICs5Myw5IEBAIGNsYXNzIFRlc3RGaW5kZXIob2JqZWN0KToK
ICAgICAgICAgcmVscGF0aCA9IG5hbWUucmVwbGFjZSgnLicsIHNlbGYuZmlsZXN5c3RlbS5zZXAp
ICsgJy5weScKICAgICAgICAgcmV0dXJuIGFueShzZWxmLmZpbGVzeXN0ZW0uZXhpc3RzKHNlbGYu
ZmlsZXN5c3RlbS5qb2luKHRyZWUudG9wX2RpcmVjdG9yeSwgcmVscGF0aCkpIGZvciB0cmVlIGlu
IHNlbGYudHJlZXMpCiAKKyAgICBkZWYgaXNfZG90dGVkX25hbWUoc2VsZiwgbmFtZSk6CisgICAg
ICAgIHJldHVybiByZS5tYXRjaChyJ1thLXpBLVouXVthLXpBLVowLTlfLl0qJywgbmFtZSkKKwog
ICAgIGRlZiB0b19tb2R1bGUoc2VsZiwgcGF0aCk6CiAgICAgICAgIGZvciB0cmVlIGluIHNlbGYu
dHJlZXM6CiAgICAgICAgICAgICBpZiBwYXRoLnN0YXJ0c3dpdGgodHJlZS50b3BfZGlyZWN0b3J5
KToKQEAgLTg3LDEzICsxMDMsNTAgQEAgY2xhc3MgVGVzdEZpbmRlcihvYmplY3QpOgogICAgICAg
ICByZXR1cm4gTm9uZQogCiAgICAgZGVmIGZpbmRfbmFtZXMoc2VsZiwgYXJncywgc2tpcF9pbnRl
Z3JhdGlvbnRlc3RzLCBmaW5kX2FsbCk6Ci0gICAgICAgIGlmIGFyZ3M6Ci0gICAgICAgICAgICBy
ZXR1cm4gYXJncwotCiAgICAgICAgIHN1ZmZpeGVzID0gWydfdW5pdHRlc3QucHknXQogICAgICAg
ICBpZiBub3Qgc2tpcF9pbnRlZ3JhdGlvbnRlc3RzOgogICAgICAgICAgICAgc3VmZml4ZXMuYXBw
ZW5kKCdfaW50ZWdyYXRpb250ZXN0LnB5JykKIAorICAgICAgICBpZiBhcmdzOgorICAgICAgICAg
ICAgbmFtZXMgPSBbXQorICAgICAgICAgICAgZm9yIGFyZyBpbiBhcmdzOgorICAgICAgICAgICAg
ICAgIG5hbWVzLmV4dGVuZChzZWxmLl9maW5kX25hbWVzX2Zvcl9hcmcoYXJnLCBzdWZmaXhlcykp
CisgICAgICAgICAgICByZXR1cm4gbmFtZXMKKworICAgICAgICByZXR1cm4gc2VsZi5fZGVmYXVs
dF9uYW1lcyhzdWZmaXhlcywgZmluZF9hbGwpCisKKyAgICBkZWYgX2ZpbmRfbmFtZXNfZm9yX2Fy
ZyhzZWxmLCBhcmcsIHN1ZmZpeGVzKToKKyAgICAgICAgcmVhbHBhdGggPSBzZWxmLmZpbGVzeXN0
ZW0ucmVhbHBhdGgoYXJnKQorICAgICAgICBpZiBzZWxmLmZpbGVzeXN0ZW0uZXhpc3RzKHJlYWxw
YXRoKToKKyAgICAgICAgICAgIG5hbWVzID0gc2VsZi5fZmluZF9pbl90cmVlcyhyZWFscGF0aCwg
c3VmZml4ZXMpCisgICAgICAgICAgICBpZiBub3QgbmFtZXM6CisgICAgICAgICAgICAgICAgX2xv
Zy5lcnJvcigiJXMgaXMgbm90IGluIG9uZSBvZiB0aGUgdGVzdCB0cmVlcy4iICUgYXJnKQorICAg
ICAgICAgICAgcmV0dXJuIG5hbWVzCisKKyAgICAgICAgIyBTZWUgaWYgaXQncyBhIHB5dGhvbiBw
YWNrYWdlIGluIGEgdHJlZSAob3IgYSByZWxhdGl2ZSBwYXRoIGZyb20gdGhlIHRvcCBvZiBhIHRy
ZWUpLgorICAgICAgICBuYW1lcyA9IHNlbGYuX2ZpbmRfaW5fdHJlZXMoYXJnLnJlcGxhY2UoJy4n
LCBzZWxmLmZpbGVzeXN0ZW0uc2VwKSwgc3VmZml4ZXMpCisgICAgICAgIGlmIG5hbWVzOgorICAg
ICAgICAgICAgcmV0dXJuIG5hbWVzCisKKyAgICAgICAgaWYgc2VsZi5pc19kb3R0ZWRfbmFtZShh
cmcpOgorICAgICAgICAgICAgIyBUaGUgbmFtZSBtYXkgbm90IGV4aXN0LCBidXQgdGhhdCdzIG9r
YXk7IHdlJ2xsIGZpbmQgb3V0IGxhdGVyLgorICAgICAgICAgICAgcmV0dXJuIFthcmddCisKKyAg
ICAgICAgX2xvZy5lcnJvcigiJXMgaXMgbm90IGEgcHl0aG9uIG5hbWUgb3IgYW4gZXhpc3Rpbmcg
ZmlsZSBvciBkaXJlY3RvcnkuIiAlIGFyZykKKyAgICAgICAgcmV0dXJuIFtdCisKKyAgICBkZWYg
X2ZpbmRfaW5fdHJlZXMoc2VsZiwgcGF0aCwgc3VmZml4ZXMpOgorICAgICAgICBmb3IgdHJlZSBp
biBzZWxmLnRyZWVzOgorICAgICAgICAgICAgcmVscGF0aCA9IHRyZWUuc3VicGF0aChwYXRoKQor
ICAgICAgICAgICAgaWYgbm90IHJlbHBhdGg6CisgICAgICAgICAgICAgICAgY29udGludWUKKyAg
ICAgICAgICAgIGlmIHNlbGYuZmlsZXN5c3RlbS5pc2ZpbGUocGF0aCk6CisgICAgICAgICAgICAg
ICAgcmV0dXJuIFt0cmVlLnRvX21vZHVsZShwYXRoKV0KKyAgICAgICAgICAgIGVsc2U6CisgICAg
ICAgICAgICAgICAgcmV0dXJuIHRyZWUuZmluZF9tb2R1bGVzKHN1ZmZpeGVzLCBwYXRoKQorICAg
ICAgICByZXR1cm4gW10KKworICAgIGRlZiBfZGVmYXVsdF9uYW1lcyhzZWxmLCBzdWZmaXhlcywg
ZmluZF9hbGwpOgogICAgICAgICBtb2R1bGVzID0gW10KICAgICAgICAgZm9yIHRyZWUgaW4gc2Vs
Zi50cmVlczoKICAgICAgICAgICAgIG1vZHVsZXMuZXh0ZW5kKHRyZWUuZmluZF9tb2R1bGVzKHN1
ZmZpeGVzKSkKZGlmZiAtLWdpdCBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvdGVzdC90ZXN0X2Zp
bmRlcl91bml0dGVzdC5weSBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvdGVzdC90ZXN0X2ZpbmRl
cl91bml0dGVzdC5weQppbmRleCAyZjc0NmRhZjU1YmI3YTBkZjE0ZTU5M2UxM2I0MTVlM2E1NDcw
N2EyLi41YjZiM2IwMzA2Nzc3ODUxMWM3ZTBjZDM1OGQxMzk4NjFhMzI0MzA3IDEwMDY0NAotLS0g
YS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L3Rlc3QvdGVzdF9maW5kZXJfdW5pdHRlc3QucHkKKysr
IGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS90ZXN0L3Rlc3RfZmluZGVyX3VuaXR0ZXN0LnB5CkBA
IC0yNCw2ICsyNCw3IEBAIGltcG9ydCBsb2dnaW5nCiBpbXBvcnQgdW5pdHRlc3QKIAogZnJvbSB3
ZWJraXRweS5jb21tb24uc3lzdGVtLmZpbGVzeXN0ZW1fbW9jayBpbXBvcnQgTW9ja0ZpbGVTeXN0
ZW0KK2Zyb20gd2Via2l0cHkuY29tbW9uLnN5c3RlbS5vdXRwdXRjYXB0dXJlIGltcG9ydCBPdXRw
dXRDYXB0dXJlCiBmcm9tIHdlYmtpdHB5LnRlc3QudGVzdF9maW5kZXIgaW1wb3J0IFRlc3RGaW5k
ZXIKIAogCkBAIC0zNiwxNyArMzcsMjggQEAgY2xhc3MgVGVzdEZpbmRlclRlc3QodW5pdHRlc3Qu
VGVzdENhc2UpOgogICAgICAgICAgICcvZm9vMi9iYXIyL2JhejIucHljJzogJycsCiAgICAgICAg
ICAgJy9mb28yL2JhcjIvYmF6Ml9pbnRlZ3JhdGlvbnRlc3QucHknOiAnJywKICAgICAgICAgICAn
L2ZvbzIvYmFyMi9taXNzaW5nLnB5Yyc6ICcnLAorICAgICAgICAgICcvdG1wL2Fub3RoZXJfdW5p
dHRlc3QucHknOiAnJywKICAgICAgICAgfQogICAgICAgICBzZWxmLmZzID0gTW9ja0ZpbGVTeXN0
ZW0oZmlsZXMpCiAgICAgICAgIHNlbGYuZmluZGVyID0gVGVzdEZpbmRlcihzZWxmLmZzKQogICAg
ICAgICBzZWxmLmZpbmRlci5hZGRfdHJlZSgnL2ZvbycsICdiYXInKQogICAgICAgICBzZWxmLmZp
bmRlci5hZGRfdHJlZSgnL2ZvbzInKQorCisgICAgICAgICMgSGVyZSB3ZSBoYXZlIHRvIGp1bXAg
dGhyb3VnaCBhIGhvb3AgdG8gbWFrZSBzdXJlIHRlc3Qtd2Via2l0cHkgZG9lc24ndCBsb2cKKyAg
ICAgICAgIyBhbnkgbWVzc2FnZXMgZnJvbSB0aGVzZSB0ZXN0cyA6KC4KICAgICAgICAgc2VsZi5y
b290X2xvZ2dlciA9IGxvZ2dpbmcuZ2V0TG9nZ2VyKCkKLSAgICAgICAgc2VsZi5sb2dfbGV2ZWwg
PSBzZWxmLnJvb3RfbG9nZ2VyLmxldmVsCi0gICAgICAgIHNlbGYucm9vdF9sb2dnZXIuc2V0TGV2
ZWwobG9nZ2luZy5XQVJOSU5HKQorICAgICAgICBzZWxmLmxvZ19oYW5kbGVyID0gTm9uZQorICAg
ICAgICBmb3IgaCBpbiBzZWxmLnJvb3RfbG9nZ2VyLmhhbmRsZXJzOgorICAgICAgICAgICAgaWYg
Z2V0YXR0cihoLCAnbmFtZScsIE5vbmUpID09ICd3ZWJraXRweS50ZXN0Lm1haW4nOgorICAgICAg
ICAgICAgICAgIHNlbGYubG9nX2hhbmRsZXIgPSBoCisgICAgICAgICAgICAgICAgYnJlYWsKKyAg
ICAgICAgaWYgc2VsZi5sb2dfaGFuZGxlcjoKKyAgICAgICAgICAgIHNlbGYubG9nX2xldmVsID0g
c2VsZi5sb2dfaGFuZGxlci5sZXZlbAorICAgICAgICAgICAgc2VsZi5sb2dfaGFuZGxlci5sZXZl
bCA9IGxvZ2dpbmcuQ1JJVElDQUwKIAogICAgIGRlZiB0ZWFyRG93bihzZWxmKToKLSAgICAgICAg
c2VsZi5yb290X2xvZ2dlci5zZXRMZXZlbChzZWxmLmxvZ19sZXZlbCkKKyAgICAgICAgaWYgc2Vs
Zi5sb2dfaGFuZGxlcjoKKyAgICAgICAgICAgIHNlbGYubG9nX2hhbmRsZXIuc2V0TGV2ZWwoc2Vs
Zi5sb2dfbGV2ZWwpCiAKICAgICBkZWYgdGVzdF9hZGRpdGlvbmFsX3N5c3RlbV9wYXRocyhzZWxm
KToKICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbHMoc2VsZi5maW5kZXIuYWRkaXRpb25hbF9wYXRo
cyhbJy91c3InXSksCkBAIC03MCwxOSArODIsNTMgQEAgY2xhc3MgVGVzdEZpbmRlclRlc3QodW5p
dHRlc3QuVGVzdENhc2UpOgogICAgICAgICBzZWxmLmZpbmRlci5jbGVhbl90cmVlcygpCiAgICAg
ICAgIHNlbGYuYXNzZXJ0RmFsc2Uoc2VsZi5mcy5leGlzdHMoJy9mb28yL2JhcjIvbWlzc2luZy5w
eWMnKSkKIAotICAgIGRlZiB0ZXN0X2ZpbmRfbmFtZXMoc2VsZik6Ci0gICAgICAgIHNlbGYuYXNz
ZXJ0RXF1YWxzKHNlbGYuZmluZGVyLmZpbmRfbmFtZXMoW10sIHNraXBfaW50ZWdyYXRpb250ZXN0
cz1GYWxzZSwgZmluZF9hbGw9VHJ1ZSksCi0gICAgICAgICAgICBbJ2Jhci5iYXpfdW5pdHRlc3Qn
LCAnYmFyMi5iYXoyX2ludGVncmF0aW9udGVzdCddKQorICAgIGRlZiBjaGVja19uYW1lcyhzZWxm
LCBuYW1lcywgZXhwZWN0ZWRfbmFtZXMsIHNraXBfaW50ZWdyYXRpb250ZXN0cz1GYWxzZSwgZmlu
ZF9hbGw9RmFsc2UpOgorICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhzZWxmLmZpbmRlci5maW5k
X25hbWVzKG5hbWVzLCBza2lwX2ludGVncmF0aW9udGVzdHMsIGZpbmRfYWxsKSwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgZXhwZWN0ZWRfbmFtZXMpCiAKLSAgICAgICAgc2VsZi5hc3NlcnRF
cXVhbHMoc2VsZi5maW5kZXIuZmluZF9uYW1lcyhbXSwgc2tpcF9pbnRlZ3JhdGlvbnRlc3RzPVRy
dWUsIGZpbmRfYWxsPVRydWUpLAotICAgICAgICAgICAgWydiYXIuYmF6X3VuaXR0ZXN0J10pCi0g
ICAgICAgIHNlbGYuYXNzZXJ0RXF1YWxzKHNlbGYuZmluZGVyLmZpbmRfbmFtZXMoW10sIHNraXBf
aW50ZWdyYXRpb250ZXN0cz1UcnVlLCBmaW5kX2FsbD1GYWxzZSksCi0gICAgICAgICAgICBbJ2Jh
ci5iYXpfdW5pdHRlc3QnXSkKKyAgICBkZWYgdGVzdF9kZWZhdWx0X25hbWVzKHNlbGYpOgorICAg
ICAgICBzZWxmLmNoZWNrX25hbWVzKFtdLCBbJ2Jhci5iYXpfdW5pdHRlc3QnLCAnYmFyMi5iYXoy
X2ludGVncmF0aW9udGVzdCddKQorICAgICAgICBzZWxmLmNoZWNrX25hbWVzKFtdLCBbJ2Jhci5i
YXpfdW5pdHRlc3QnXSwgc2tpcF9pbnRlZ3JhdGlvbnRlc3RzPVRydWUsIGZpbmRfYWxsPVRydWUp
CisgICAgICAgIHNlbGYuY2hlY2tfbmFtZXMoW10sIFsnYmFyLmJhel91bml0dGVzdCddLCBza2lw
X2ludGVncmF0aW9udGVzdHM9VHJ1ZSwgZmluZF9hbGw9RmFsc2UpCiAKICAgICAgICAgIyBTaG91
bGQgcmV0dXJuIHRoZSBuYW1lcyBnaXZlbiBpdCwgZXZlbiBpZiB0aGV5IGRvbid0IGV4aXN0Lgot
ICAgICAgICBzZWxmLmFzc2VydEVxdWFscyhzZWxmLmZpbmRlci5maW5kX25hbWVzKFsnZm9vYmFy
J10sIHNraXBfaW50ZWdyYXRpb250ZXN0cz1UcnVlLCBmaW5kX2FsbD1UcnVlKSwKLSAgICAgICAg
ICAgIFsnZm9vYmFyJ10pCisgICAgICAgIHNlbGYuY2hlY2tfbmFtZXMoWydmb29iYXInXSwgWydm
b29iYXInXSwgc2tpcF9pbnRlZ3JhdGlvbnRlc3RzPVRydWUsIGZpbmRfYWxsPUZhbHNlKQorCisg
ICAgZGVmIHRlc3RfcGF0aHMoc2VsZik6CisgICAgICAgIHNlbGYuZnMuY2hkaXIoJy9mb28vYmFy
JykKKyAgICAgICAgc2VsZi5jaGVja19uYW1lcyhbJ2Jhel91bml0dGVzdC5weSddLCBbJ2Jhci5i
YXpfdW5pdHRlc3QnXSkKKyAgICAgICAgc2VsZi5jaGVja19uYW1lcyhbJy4vYmF6X3VuaXR0ZXN0
LnB5J10sIFsnYmFyLmJhel91bml0dGVzdCddKQorICAgICAgICBzZWxmLmNoZWNrX25hbWVzKFsn
L2Zvby9iYXIvYmF6X3VuaXR0ZXN0LnB5J10sIFsnYmFyLmJhel91bml0dGVzdCddKQorICAgICAg
ICBzZWxmLmNoZWNrX25hbWVzKFsnLiddLCBbJ2Jhci5iYXpfdW5pdHRlc3QnXSkKKyAgICAgICAg
c2VsZi5jaGVja19uYW1lcyhbJy4uLy4uL2ZvbzIvYmFyMiddLCBbJ2JhcjIuYmF6Ml9pbnRlZ3Jh
dGlvbnRlc3QnXSkKKworICAgICAgICBzZWxmLmZzLmNoZGlyKCcvJykKKyAgICAgICAgc2VsZi5j
aGVja19uYW1lcyhbJ2JhciddLCBbJ2Jhci5iYXpfdW5pdHRlc3QnXSkKKyAgICAgICAgc2VsZi5j
aGVja19uYW1lcyhbJy9mb28vYmFyLyddLCBbJ2Jhci5iYXpfdW5pdHRlc3QnXSkKKworICAgICAg
ICAjIFRoaXMgd29ya3MgJ2J5IGFjY2lkZW50JyBzaW5jZSBpdCBtYXBzIG9udG8gYSBwYWNrYWdl
LgorICAgICAgICBzZWxmLmNoZWNrX25hbWVzKFsnYmFyLyddLCBbJ2Jhci5iYXpfdW5pdHRlc3Qn
XSkKKworICAgICAgICAjIFRoaXMgc2hvdWxkIGxvZyBhbiBlcnJvciwgc2luY2UgaXQncyBvdXRz
aWRlIHRoZSB0cmVlcy4KKyAgICAgICAgb2MgPSBPdXRwdXRDYXB0dXJlKCkKKyAgICAgICAgb2Mu
c2V0X2xvZ19sZXZlbChsb2dnaW5nLkVSUk9SKQorICAgICAgICBvYy5jYXB0dXJlX291dHB1dCgp
CisgICAgICAgIHRyeToKKyAgICAgICAgICAgIHNlbGYuY2hlY2tfbmFtZXMoWycvdG1wL2Fub3Ro
ZXJfdW5pdHRlc3QucHknXSwgW10pCisgICAgICAgIGZpbmFsbHk6CisgICAgICAgICAgICBfLCBf
LCBsb2dzID0gb2MucmVzdG9yZV9vdXRwdXQoKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRUcnVl
KCdhbm90aGVyX3VuaXR0ZXN0LnB5JyBpbiBsb2dzKQorCisgICAgICAgICMgUGF0aHMgdGhhdCBk
b24ndCBleGlzdCBhcmUgZXJyb3JzLgorICAgICAgICBvYy5jYXB0dXJlX291dHB1dCgpCisgICAg
ICAgIHRyeToKKyAgICAgICAgICAgIHNlbGYuY2hlY2tfbmFtZXMoWycvZm9vL2Jhci9ub3RleGlz
dF91bml0dGVzdC5weSddLCBbXSkKKyAgICAgICAgZmluYWxseToKKyAgICAgICAgICAgIF8sIF8s
IGxvZ3MgPSBvYy5yZXN0b3JlX291dHB1dCgpCisgICAgICAgICAgICBzZWxmLmFzc2VydFRydWUo
J25vdGV4aXN0X3VuaXR0ZXN0LnB5JyBpbiBsb2dzKQogCisgICAgICAgICMgTmFtZXMgdGhhdCBk
b24ndCBleGlzdCBhcmUgY2F1Z2h0IGxhdGVyLCBhdCBsb2FkIHRpbWUuCisgICAgICAgIHNlbGYu
Y2hlY2tfbmFtZXMoWydiYXIubm90ZXhpc3RfdW5pdHRlc3QnXSwgWydiYXIubm90ZXhpc3RfdW5p
dHRlc3QnXSkKIAogaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKICAgICB1bml0dGVzdC5tYWlu
KCkK
</data>
<flag name="review"
          id="138077"
          type_id="1"
          status="+"
          setter="abarth"
    />
          </attachment>
      

    </bug>

</bugzilla>