<?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>31709</bug_id>
          
          <creation_ts>2009-11-20 00:27:38 -0800</creation_ts>
          <short_desc>[bugzilla-tool] Create LandingSequence as the all-sing, all-dance landing class</short_desc>
          <delta_ts>2009-11-20 01:01:19 -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>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Adam Barth">abarth</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>commit-queue</cc>
    
    <cc>eric</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>165234</commentid>
    <comment_count>0</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2009-11-20 00:27:38 -0800</bug_when>
    <thetext>Seems like a lot of work for creating build-attachment.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>165235</commentid>
    <comment_count>1</comment_count>
      <attachid>43560</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2009-11-20 00:29:12 -0800</bug_when>
    <thetext>Created attachment 43560
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>165240</commentid>
    <comment_count>2</comment_count>
      <attachid>43562</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2009-11-20 00:47:28 -0800</bug_when>
    <thetext>Created attachment 43562
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>165241</commentid>
    <comment_count>3</comment_count>
      <attachid>43562</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2009-11-20 00:48:04 -0800</bug_when>
    <thetext>Comment on attachment 43562
Patch

LGTM.  It&apos;s a good first step.  This yak still has way too much hair.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>165244</commentid>
    <comment_count>4</comment_count>
      <attachid>43562</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2009-11-20 01:01:10 -0800</bug_when>
    <thetext>Comment on attachment 43562
Patch

Clearing flags on attachment: 43562

Committed r51233: &lt;http://trac.webkit.org/changeset/51233&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>165245</commentid>
    <comment_count>5</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2009-11-20 01:01:19 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>43560</attachid>
            <date>2009-11-20 00:29:12 -0800</date>
            <delta_ts>2009-11-20 00:47:20 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-31709-20091120002911.patch</filename>
            <type>text/plain</type>
            <size>26112</size>
            <attacher name="Adam Barth">abarth</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYktpdFRvb2xzL0NoYW5nZUxvZyBiL1dlYktpdFRvb2xzL0NoYW5nZUxv
ZwppbmRleCA3N2Y2YTcyLi40MTM5ZDE2IDEwMDY0NAotLS0gYS9XZWJLaXRUb29scy9DaGFuZ2VM
b2cKKysrIGIvV2ViS2l0VG9vbHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTcgQEAKKzIwMDktMTEt
MjAgIEFkYW0gQmFydGggIDxhYmFydGhAd2Via2l0Lm9yZz4KKworICAgICAgICBSZXZpZXdlZCBi
eSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBDcmVhdGUgTGFuZGluZ1NlcXVlbmNlIGFzIHRo
ZSBhbGwtc2luZywgYWxsLWRhbmNlIGxhbmRpbmcgY2xhc3MKKyAgICAgICAgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTMxNzA5CisKKyAgICAgICAgQ2xpZW50IGNhbiBp
bmhlcml0IGZyb20gdGhpcyBjbGFzcyB0byBjYXJlZnVsbHkgY29udHJvbCBleGFjdGx5IHdoaWNo
CisgICAgICAgIHN0ZXBzIHRoZXkgd2lzaCB0byBoYXZlIGhhcHBlbiBpbiB0aGUgbGFuZGluZyBz
ZXF1ZW5jZS4KKworICAgICAgICAqIFNjcmlwdHMvYnVnemlsbGEtdG9vbDoKKyAgICAgICAgKiBT
Y3JpcHRzL21vZHVsZXMvbGFuZGluZ3NlcXVlbmNlLnB5OiBBZGRlZC4KKyAgICAgICAgKiBTY3Jp
cHRzL21vZHVsZXMvd2Via2l0bGFuZGluZ3NjcmlwdHMucHk6IEFkZGVkLgorCiAyMDA5LTExLTE5
ICBBZGFtIEJhcnRoICA8YWJhcnRoQHdlYmtpdC5vcmc+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkg
RXJpYyBTZWlkZWwuCmRpZmYgLS1naXQgYS9XZWJLaXRUb29scy9TY3JpcHRzL2J1Z3ppbGxhLXRv
b2wgYi9XZWJLaXRUb29scy9TY3JpcHRzL2J1Z3ppbGxhLXRvb2wKaW5kZXggN2FjMTgwMi4uY2U2
YzFmNiAxMDA3NTUKLS0tIGEvV2ViS2l0VG9vbHMvU2NyaXB0cy9idWd6aWxsYS10b29sCisrKyBi
L1dlYktpdFRvb2xzL1NjcmlwdHMvYnVnemlsbGEtdG9vbApAQCAtNDQsMTYgKzQ0LDE2IEBAIGZy
b20gb3B0cGFyc2UgaW1wb3J0IG1ha2Vfb3B0aW9uCiBmcm9tIG1vZHVsZXMuYnVnemlsbGEgaW1w
b3J0IEJ1Z3ppbGxhLCBwYXJzZV9idWdfaWQKIGZyb20gbW9kdWxlcy5idWlsZGJvdCBpbXBvcnQg
QnVpbGRCb3QKIGZyb20gbW9kdWxlcy5jaGFuZ2Vsb2dzIGltcG9ydCBDaGFuZ2VMb2cKLWZyb20g
bW9kdWxlcy5jb21tZW50cyBpbXBvcnQgYnVnX2NvbW1lbnRfZnJvbV9jb21taXRfdGV4dAorZnJv
bSBtb2R1bGVzLmxhbmRpbmdzZXF1ZW5jZSBpbXBvcnQgQ29uZGl0aW9uYWxMYW5kaW5nU2VxdWVu
Y2UKIGZyb20gbW9kdWxlcy5sb2dnaW5nIGltcG9ydCBlcnJvciwgbG9nLCB0ZWUKIGZyb20gbW9k
dWxlcy5tdWx0aWNvbW1hbmR0b29sIGltcG9ydCBNdWx0aUNvbW1hbmRUb29sLCBDb21tYW5kCiBm
cm9tIG1vZHVsZXMucGF0Y2hjb2xsZWN0aW9uIGltcG9ydCBQYXRjaENvbGxlY3Rpb24KIGZyb20g
bW9kdWxlcy5zY20gaW1wb3J0IENvbW1pdE1lc3NhZ2UsIGRldGVjdF9zY21fc3lzdGVtLCBTY3Jp
cHRFcnJvciwgQ2hlY2tvdXROZWVkc1VwZGF0ZQogZnJvbSBtb2R1bGVzLnN0YXR1c2JvdCBpbXBv
cnQgU3RhdHVzQm90Citmcm9tIG1vZHVsZXMud2Via2l0bGFuZGluZ3NjcmlwdHMgaW1wb3J0IFdl
YktpdExhbmRpbmdTY3JpcHRzLCBjb21taXRfbWVzc2FnZV9mb3JfdGhpc19jb21taXQKIGZyb20g
bW9kdWxlcy53ZWJraXRwb3J0IGltcG9ydCBXZWJLaXRQb3J0CiBmcm9tIG1vZHVsZXMud29ya3F1
ZXVlIGltcG9ydCBXb3JrUXVldWUsIFdvcmtRdWV1ZURlbGVnYXRlCiAKLQogZGVmIHBsdXJhbChu
b3VuKToKICAgICAjIFRoaXMgaXMgYSBkdW1iIHBsdXJhbCgpIGltcGxlbWVudGF0aW9uIHdoaWNo
IHdhcyBqdXN0IGVub3VnaCBmb3Igb3VyIHVzZXMuCiAgICAgaWYgcmUuc2VhcmNoKCJoJCIsIG5v
dW4pOgpAQCAtNjYsMjQgKzY2LDYgQEAgZGVmIHBsdXJhbGl6ZShub3VuLCBjb3VudCk6CiAgICAg
ICAgIG5vdW4gPSBwbHVyYWwobm91bikKICAgICByZXR1cm4gIiVkICVzIiAlIChjb3VudCwgbm91
bikKIAotZGVmIGNvbW1pdF9tZXNzYWdlX2Zvcl90aGlzX2NvbW1pdChzY20pOgotICAgIGNoYW5n
ZWxvZ19wYXRocyA9IHNjbS5tb2RpZmllZF9jaGFuZ2Vsb2dzKCkKLSAgICBpZiBub3QgbGVuKGNo
YW5nZWxvZ19wYXRocyk6Ci0gICAgICAgIHJhaXNlIFNjcmlwdEVycm9yKG1lc3NhZ2U9IkZvdW5k
IG5vIG1vZGlmaWVkIENoYW5nZUxvZ3MsIGNhbm5vdCBjcmVhdGUgYSBjb21taXQgbWVzc2FnZS5c
biIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIkFsbCBjaGFuZ2VzIHJlcXVpcmUgYSBDaGFu
Z2VMb2cuICBTZWU6XG4iCi0gICAgICAgICAgICAgICAgICAgICAgICAgICJodHRwOi8vd2Via2l0
Lm9yZy9jb2RpbmcvY29udHJpYnV0aW5nLmh0bWwiKQotCi0gICAgY2hhbmdlbG9nX21lc3NhZ2Vz
ID0gW10KLSAgICBmb3IgY2hhbmdlbG9nX3BhdGggaW4gY2hhbmdlbG9nX3BhdGhzOgotICAgICAg
ICBsb2coIlBhcnNpbmcgQ2hhbmdlTG9nOiAlcyIgJSBjaGFuZ2Vsb2dfcGF0aCkKLSAgICAgICAg
Y2hhbmdlbG9nX2VudHJ5ID0gQ2hhbmdlTG9nKGNoYW5nZWxvZ19wYXRoKS5sYXRlc3RfZW50cnko
KQotICAgICAgICBpZiBub3QgY2hhbmdlbG9nX2VudHJ5OgotICAgICAgICAgICAgcmFpc2UgU2Ny
aXB0RXJyb3IobWVzc2FnZT0iRmFpbGVkIHRvIHBhcnNlIENoYW5nZUxvZzogIiArIG9zLnBhdGgu
YWJzcGF0aChjaGFuZ2Vsb2dfcGF0aCkpCi0gICAgICAgIGNoYW5nZWxvZ19tZXNzYWdlcy5hcHBl
bmQoY2hhbmdlbG9nX2VudHJ5KQotCi0gICAgIyBGSVhNRTogV2Ugc2hvdWxkIHNvcnQgYW5kIGxh
YmVsIHRoZSBDaGFuZ2VMb2cgbWVzc2FnZXMgbGlrZSBjb21taXQtbG9nLWVkaXRvciBkb2VzLgot
ICAgIHJldHVybiBDb21taXRNZXNzYWdlKCIiLmpvaW4oY2hhbmdlbG9nX21lc3NhZ2VzKS5zcGxp
dGxpbmVzKCkpCi0KIAogY2xhc3MgQnVnc1RvQ29tbWl0KENvbW1hbmQpOgogICAgIGRlZiBfX2lu
aXRfXyhzZWxmKToKQEAgLTE5NywxMzkgKzE3OSwzMyBAQCBjbGFzcyBXZWJLaXRBcHBseWluZ1Nj
cmlwdHM6CiAgICAgICAgICAgICAgICAgc2NtLmNvbW1pdF9sb2NhbGx5X3dpdGhfbWVzc2FnZShj
b21taXRfbWVzc2FnZS5tZXNzYWdlKCkgb3IgcGF0Y2hbIm5hbWUiXSkKIAogCi1jbGFzcyBXZWJL
aXRMYW5kaW5nU2NyaXB0czoKLSAgICBAc3RhdGljbWV0aG9kCi0gICAgZGVmIGNsZWFuaW5nX29w
dGlvbnMoKToKLSAgICAgICAgcmV0dXJuIFsKLSAgICAgICAgICAgIG1ha2Vfb3B0aW9uKCItLWZv
cmNlLWNsZWFuIiwgYWN0aW9uPSJzdG9yZV90cnVlIiwgZGVzdD0iZm9yY2VfY2xlYW4iLCBkZWZh
dWx0PUZhbHNlLCBoZWxwPSJDbGVhbiB3b3JraW5nIGRpcmVjdG9yeSBiZWZvcmUgYXBwbHlpbmcg
cGF0Y2hlcyAocmVtb3ZlcyBsb2NhbCBjaGFuZ2VzIGFuZCBjb21taXRzKSIpLAotICAgICAgICAg
ICAgbWFrZV9vcHRpb24oIi0tbm8tY2xlYW4iLCBhY3Rpb249InN0b3JlX2ZhbHNlIiwgZGVzdD0i
Y2xlYW4iLCBkZWZhdWx0PVRydWUsIGhlbHA9IkRvbid0IGNoZWNrIGlmIHRoZSB3b3JraW5nIGRp
cmVjdG9yeSBpcyBjbGVhbiBiZWZvcmUgYXBwbHlpbmcgcGF0Y2hlcyIpLAotICAgICAgICBdCi0K
LSAgICBAc3RhdGljbWV0aG9kCi0gICAgZGVmIGxhbmRfb3B0aW9ucygpOgotICAgICAgICByZXR1
cm4gWwotICAgICAgICAgICAgbWFrZV9vcHRpb24oIi0taWdub3JlLWJ1aWxkZXJzIiwgYWN0aW9u
PSJzdG9yZV9mYWxzZSIsIGRlc3Q9ImNoZWNrX2J1aWxkZXJzIiwgZGVmYXVsdD1UcnVlLCBoZWxw
PSJEb24ndCBjaGVjayB0byBzZWUgaWYgdGhlIGJ1aWxkLndlYmtpdC5vcmcgYnVpbGRlcnMgYXJl
IGdyZWVuIGJlZm9yZSBsYW5kaW5nLiIpLAotICAgICAgICAgICAgbWFrZV9vcHRpb24oIi0tbm8t
Y2xvc2UiLCBhY3Rpb249InN0b3JlX2ZhbHNlIiwgZGVzdD0iY2xvc2VfYnVnIiwgZGVmYXVsdD1U
cnVlLCBoZWxwPSJMZWF2ZSBidWcgb3BlbiBhZnRlciBsYW5kaW5nLiIpLAotICAgICAgICAgICAg
bWFrZV9vcHRpb24oIi0tbm8tYnVpbGQiLCBhY3Rpb249InN0b3JlX2ZhbHNlIiwgZGVzdD0iYnVp
bGQiLCBkZWZhdWx0PVRydWUsIGhlbHA9IkNvbW1pdCB3aXRob3V0IGJ1aWxkaW5nIGZpcnN0LCBp
bXBsaWVzIC0tbm8tdGVzdC4iKSwKLSAgICAgICAgICAgIG1ha2Vfb3B0aW9uKCItLW5vLXRlc3Qi
LCBhY3Rpb249InN0b3JlX2ZhbHNlIiwgZGVzdD0idGVzdCIsIGRlZmF1bHQ9VHJ1ZSwgaGVscD0i
Q29tbWl0IHdpdGhvdXQgcnVubmluZyBydW4td2Via2l0LXRlc3RzLiIpLAotICAgICAgICAgICAg
bWFrZV9vcHRpb24oIi0tcXVpZXQiLCBhY3Rpb249InN0b3JlX3RydWUiLCBkZXN0PSJxdWlldCIs
IGRlZmF1bHQ9RmFsc2UsIGhlbHA9IlByb2R1Y2UgbGVzcyBjb25zb2xlIG91dHB1dC4iKSwKLSAg
ICAgICAgICAgIG1ha2Vfb3B0aW9uKCItLW5vbi1pbnRlcmFjdGl2ZSIsIGFjdGlvbj0ic3RvcmVf
dHJ1ZSIsIGRlc3Q9Im5vbl9pbnRlcmFjdGl2ZSIsIGRlZmF1bHQ9RmFsc2UsIGhlbHA9Ik5ldmVy
IHByb21wdCB0aGUgdXNlciwgZmFpbCBhcyBmYXN0IGFzIHBvc3NpYmxlLiIpLAotICAgICAgICBd
ICsgV2ViS2l0UG9ydC5wb3J0X29wdGlvbnMoKQotCi0gICAgQHN0YXRpY21ldGhvZAotICAgIGRl
ZiBydW5fY29tbWFuZF93aXRoX3RlZWRfb3V0cHV0KGFyZ3MsIHRlZWRfb3V0cHV0KToKLSAgICAg
ICAgY2hpbGRfcHJvY2VzcyA9IHN1YnByb2Nlc3MuUG9wZW4oYXJncywgc3Rkb3V0PXN1YnByb2Nl
c3MuUElQRSwgc3RkZXJyPXN1YnByb2Nlc3MuU1RET1VUKQotCi0gICAgICAgICMgVXNlIG91ciBv
d24gY3VzdG9tIHdhaXQgbG9vcCBiZWNhdXNlIFBvcGVuIGlnbm9yZXMgYSB0ZWUnZCBzdGRlcnIv
c3Rkb3V0LgotICAgICAgICAjIEZJWE1FOiBUaGlzIGNvdWxkIGJlIGltcHJvdmVkIG5vdCB0byBm
bGF0dGVuIG91dHB1dCB0byBzdGRvdXQuCi0gICAgICAgIHdoaWxlIFRydWU6Ci0gICAgICAgICAg
ICBvdXRwdXRfbGluZSA9IGNoaWxkX3Byb2Nlc3Muc3Rkb3V0LnJlYWRsaW5lKCkKLSAgICAgICAg
ICAgIGlmIG91dHB1dF9saW5lID09ICIiIGFuZCBjaGlsZF9wcm9jZXNzLnBvbGwoKSAhPSBOb25l
OgotICAgICAgICAgICAgICAgIHJldHVybiBjaGlsZF9wcm9jZXNzLnBvbGwoKQotICAgICAgICAg
ICAgdGVlZF9vdXRwdXQud3JpdGUob3V0cHV0X2xpbmUpCi0KLSAgICBAc3RhdGljbWV0aG9kCi0g
ICAgZGVmIHJ1bl9hbmRfdGhyb3dfaWZfZmFpbChhcmdzLCBxdWlldD1GYWxzZSk6Ci0gICAgICAg
ICMgQ2FjaGUgdGhlIGNoaWxkJ3Mgb3V0cHV0IGxvY2FsbHkgc28gaXQgY2FuIGJlIHVzZWQgZm9y
IGVycm9yIHJlcG9ydHMuCi0gICAgICAgIGNoaWxkX291dF9maWxlID0gU3RyaW5nSU8uU3RyaW5n
SU8oKQotICAgICAgICBpZiBxdWlldDoKLSAgICAgICAgICAgIGRldl9udWxsID0gb3Blbihvcy5k
ZXZudWxsLCAidyIpCi0gICAgICAgIGNoaWxkX3N0ZG91dCA9IHRlZShjaGlsZF9vdXRfZmlsZSwg
ZGV2X251bGwgaWYgcXVpZXQgZWxzZSBzeXMuc3Rkb3V0KQotICAgICAgICBleGl0X2NvZGUgPSBX
ZWJLaXRMYW5kaW5nU2NyaXB0cy5ydW5fY29tbWFuZF93aXRoX3RlZWRfb3V0cHV0KGFyZ3MsIGNo
aWxkX3N0ZG91dCkKLSAgICAgICAgaWYgcXVpZXQ6Ci0gICAgICAgICAgICBkZXZfbnVsbC5jbG9z
ZSgpCi0KLSAgICAgICAgY2hpbGRfb3V0cHV0ID0gY2hpbGRfb3V0X2ZpbGUuZ2V0dmFsdWUoKQot
ICAgICAgICBjaGlsZF9vdXRfZmlsZS5jbG9zZSgpCi0KLSAgICAgICAgaWYgZXhpdF9jb2RlOgot
ICAgICAgICAgICAgcmFpc2UgU2NyaXB0RXJyb3Ioc2NyaXB0X2FyZ3M9YXJncywgZXhpdF9jb2Rl
PWV4aXRfY29kZSwgb3V0cHV0PWNoaWxkX291dHB1dCkKLQotICAgIEBjbGFzc21ldGhvZAotICAg
IGRlZiBydW5fd2Via2l0X3NjcmlwdChjbHMsIHNjcmlwdF9uYW1lLCBxdWlldD1GYWxzZSwgcG9y
dD1XZWJLaXRQb3J0KToKLSAgICAgICAgbG9nKCJSdW5uaW5nICVzIiAlIHNjcmlwdF9uYW1lKQot
ICAgICAgICBjbHMucnVuX2FuZF90aHJvd19pZl9mYWlsKHBvcnQuc2NyaXB0X3BhdGgoc2NyaXB0
X25hbWUpLCBxdWlldCkKLQotICAgIEBjbGFzc21ldGhvZAotICAgIGRlZiBidWlsZF93ZWJraXQo
Y2xzLCBxdWlldD1GYWxzZSwgcG9ydD1XZWJLaXRQb3J0KToKLSAgICAgICAgbG9nKCJCdWlsZGlu
ZyBXZWJLaXQiKQotICAgICAgICBjbHMucnVuX2FuZF90aHJvd19pZl9mYWlsKHBvcnQuYnVpbGRf
d2Via2l0X2NvbW1hbmQoKSwgcXVpZXQpCi0KLSAgICBAc3RhdGljbWV0aG9kCi0gICAgZGVmIGVu
c3VyZV9idWlsZGVyc19hcmVfZ3JlZW4oYnVpbGRib3QsIG9wdGlvbnMpOgotICAgICAgICBpZiBu
b3Qgb3B0aW9ucy5jaGVja19idWlsZGVycyBvciBidWlsZGJvdC5jb3JlX2J1aWxkZXJzX2FyZV9n
cmVlbigpOgotICAgICAgICAgICAgcmV0dXJuCi0gICAgICAgIGVycm9yKCJCdWlsZGVycyBhdCAl
cyBhcmUgcmVkLCBwbGVhc2UgZG8gbm90IGNvbW1pdC4gIFBhc3MgLS1pZ25vcmUtYnVpbGRlcnMg
dG8gYnlwYXNzIHRoaXMgY2hlY2suIiAlIChidWlsZGJvdC5idWlsZGJvdF9ob3N0KSkKLQotICAg
IEBjbGFzc21ldGhvZAotICAgIGRlZiBydW5fd2Via2l0X3Rlc3RzKGNscywgbGF1bmNoX3NhZmFy
aSwgZmFpbF9mYXN0PUZhbHNlLCBxdWlldD1GYWxzZSwgcG9ydD1XZWJLaXRQb3J0KToKLSAgICAg
ICAgYXJncyA9IHBvcnQucnVuX3dlYmtpdF90ZXN0c19jb21tYW5kKCkKLSAgICAgICAgaWYgbm90
IGxhdW5jaF9zYWZhcmk6Ci0gICAgICAgICAgICBhcmdzLmFwcGVuZCgiLS1uby1sYXVuY2gtc2Fm
YXJpIikKLSAgICAgICAgaWYgcXVpZXQ6Ci0gICAgICAgICAgICBhcmdzLmFwcGVuZCgiLS1xdWll
dCIpCi0gICAgICAgIGlmIGZhaWxfZmFzdDoKLSAgICAgICAgICAgIGFyZ3MuYXBwZW5kKCItLWV4
aXQtYWZ0ZXItbi1mYWlsdXJlcz0xIikKLSAgICAgICAgY2xzLnJ1bl9hbmRfdGhyb3dfaWZfZmFp
bChhcmdzKQotCi0gICAgQHN0YXRpY21ldGhvZAotICAgIGRlZiBwcmVwYXJlX2NsZWFuX3dvcmtp
bmdfZGlyZWN0b3J5KHNjbSwgb3B0aW9ucywgYWxsb3dfbG9jYWxfY29tbWl0cz1GYWxzZSk6Ci0g
ICAgICAgIG9zLmNoZGlyKHNjbS5jaGVja291dF9yb290KQotICAgICAgICBpZiBub3QgYWxsb3df
bG9jYWxfY29tbWl0czoKLSAgICAgICAgICAgIHNjbS5lbnN1cmVfbm9fbG9jYWxfY29tbWl0cyhv
cHRpb25zLmZvcmNlX2NsZWFuKQotICAgICAgICBpZiBvcHRpb25zLmNsZWFuOgotICAgICAgICAg
ICAgc2NtLmVuc3VyZV9jbGVhbl93b3JraW5nX2RpcmVjdG9yeShmb3JjZV9jbGVhbj1vcHRpb25z
LmZvcmNlX2NsZWFuKQotCi0gICAgQGNsYXNzbWV0aG9kCi0gICAgZGVmIGJ1aWxkX2FuZF9jb21t
aXQoY2xzLCBzY20sIG9wdGlvbnMpOgotICAgICAgICBwb3J0ID0gV2ViS2l0UG9ydC5nZXRfcG9y
dChvcHRpb25zKQotICAgICAgICBpZiBvcHRpb25zLmJ1aWxkOgotICAgICAgICAgICAgY2xzLmJ1
aWxkX3dlYmtpdChxdWlldD1vcHRpb25zLnF1aWV0LCBwb3J0PXBvcnQpCi0gICAgICAgICAgICBp
ZiBvcHRpb25zLnRlc3Q6Ci0gICAgICAgICAgICAgICAgIyBXaGVuIHJ1bm5pbmcgdGhlIGNvbW1p
dC1xdWV1ZSB3ZSBkb24ndCB3YW50IHRvIGxhdW5jaCBTYWZhcmkgYW5kIHdlIHdhbnQgdG8gZXhp
dCBhZnRlciB0aGUgZmlyc3QgZmFpbHVyZS4KLSAgICAgICAgICAgICAgICBjbHMucnVuX3dlYmtp
dF90ZXN0cyhsYXVuY2hfc2FmYXJpPW5vdCBvcHRpb25zLm5vbl9pbnRlcmFjdGl2ZSwgZmFpbF9m
YXN0PW9wdGlvbnMubm9uX2ludGVyYWN0aXZlLCBxdWlldD1vcHRpb25zLnF1aWV0LCBwb3J0PXBv
cnQpCi0gICAgICAgIGNvbW1pdF9tZXNzYWdlID0gY29tbWl0X21lc3NhZ2VfZm9yX3RoaXNfY29t
bWl0KHNjbSkKLSAgICAgICAgY29tbWl0X2xvZyA9IHNjbS5jb21taXRfd2l0aF9tZXNzYWdlKGNv
bW1pdF9tZXNzYWdlLm1lc3NhZ2UoKSkKLSAgICAgICAgcmV0dXJuIGJ1Z19jb21tZW50X2Zyb21f
Y29tbWl0X3RleHQoc2NtLCBjb21taXRfbG9nKQorY2xhc3MgTGFuZERpZmZMYW5kaW5nU2VxdWVu
Y2UoQ29uZGl0aW9uYWxMYW5kaW5nU2VxdWVuY2UpOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBw
YXRjaCwgb3B0aW9ucywgdG9vbCk6CisgICAgICAgIENvbmRpdGlvbmFsTGFuZGluZ1NlcXVlbmNl
Ll9faW5pdF9fKHNlbGYsIHBhdGNoLCBvcHRpb25zLCB0b29sKQogCi0gICAgQGNsYXNzbWV0aG9k
Ci0gICAgZGVmIF9jbG9zZV9idWdfaWZfbm9fYWN0aXZlX3BhdGNoZXMoY2xzLCBidWdzLCBidWdf
aWQpOgotICAgICAgICAjIENoZWNrIHRvIG1ha2Ugc3VyZSB0aGVyZSBhcmUgbm8gcj8gb3Igcisg
cGF0Y2hlcyBvbiB0aGUgYnVnIGJlZm9yZSBjbG9zaW5nLgotICAgICAgICAjIEFzc3VtZSB0aGF0
IHItIHBhdGNoZXMgYXJlIGp1c3QgcHJldmlvdXMgcGF0Y2hlcyBzb21lb25lIGZvcmdvdCB0byBv
YnNvbGV0ZS4KLSAgICAgICAgcGF0Y2hlcyA9IGJ1Z3MuZmV0Y2hfcGF0Y2hlc19mcm9tX2J1Zyhi
dWdfaWQpCi0gICAgICAgIGZvciBwYXRjaCBpbiBwYXRjaGVzOgotICAgICAgICAgICAgcmV2aWV3
X2ZsYWcgPSBwYXRjaC5nZXQoInJldmlldyIpCi0gICAgICAgICAgICBpZiByZXZpZXdfZmxhZyA9
PSAiPyIgb3IgcmV2aWV3X2ZsYWcgPT0gIisiOgotICAgICAgICAgICAgICAgIGxvZygiTm90IGNs
b3NpbmcgYnVnICVzIGFzIGF0dGFjaG1lbnQgJXMgaGFzIHJldmlldz0lcy4gIEFzc3VtaW5nIHRo
ZXJlIGFyZSBtb3JlIHBhdGNoZXMgdG8gbGFuZCBmcm9tIHRoaXMgYnVnLiIgJSAocGF0Y2hbImJ1
Z19pZCJdLCBwYXRjaFsiaWQiXSwgcmV2aWV3X2ZsYWcpKQotICAgICAgICAgICAgICAgIHJldHVy
bgotICAgICAgICBidWdzLmNsb3NlX2J1Z19hc19maXhlZChidWdfaWQsICJBbGwgcmV2aWV3ZWQg
cGF0Y2hlcyBoYXZlIGJlZW4gbGFuZGVkLiAgQ2xvc2luZyBidWcuIikKKyAgICBkZWYgdXBkYXRl
KHNlbGYpOgorICAgICAgICBwYXNzCiAKLSAgICBAY2xhc3NtZXRob2QKLSAgICBkZWYgX2xhbmRf
cGF0Y2goY2xzLCBwYXRjaCwgb3B0aW9ucywgdG9vbCk6Ci0gICAgICAgIHRvb2wuc2NtKCkudXBk
YXRlX3dlYmtpdCgpICMgVXBkYXRlIGJlZm9yZSBldmVyeSBwYXRjaCBpbiBjYXNlIHRoZSB0cmVl
IGhhcyBjaGFuZ2VkCi0gICAgICAgIGxvZygiQXBwbHlpbmcgcGF0Y2ggJXMgZnJvbSBidWcgJXMu
IiAlIChwYXRjaFsiaWQiXSwgcGF0Y2hbImJ1Z19pZCJdKSkKLSAgICAgICAgdG9vbC5zY20oKS5h
cHBseV9wYXRjaChwYXRjaCwgZm9yY2U9b3B0aW9ucy5ub25faW50ZXJhY3RpdmUpCisgICAgZGVm
IGFwcGx5X3BhdGNoKHNlbGYpOgorICAgICAgICBwYXNzCiAKLSAgICAgICAgIyBNYWtlIHN1cmUg
dGhlIHRyZWUgaXMgc3RpbGwgZ3JlZW4gYWZ0ZXIgdXBkYXRpbmcsIGJlZm9yZSBidWlsZGluZyB0
aGlzIHBhdGNoLgotICAgICAgICAjIFRoZSBmaXJzdCBwYXRjaCBlbmRzIHVwIGNoZWNraW5nIHRy
ZWUgc3RhdHVzIHR3aWNlLCBidXQgdGhhdCdzIE9LLgotICAgICAgICBXZWJLaXRMYW5kaW5nU2Ny
aXB0cy5lbnN1cmVfYnVpbGRlcnNfYXJlX2dyZWVuKHRvb2wuYnVpbGRib3QsIG9wdGlvbnMpCi0g
ICAgICAgIGNvbW1lbnRfdGV4dCA9IFdlYktpdExhbmRpbmdTY3JpcHRzLmJ1aWxkX2FuZF9jb21t
aXQodG9vbC5zY20oKSwgb3B0aW9ucykKLSAgICAgICAgdG9vbC5idWdzLmNsZWFyX2F0dGFjaG1l
bnRfZmxhZ3MocGF0Y2hbImlkIl0sIGNvbW1lbnRfdGV4dCkKKyAgICBkZWYgY2xvc2VfcGF0Y2go
c2VsZiwgY29tbWl0X2xvZyk6CisgICAgICAgIHNlbGYuX2NvbW1lbnRfdGVzdCA9IGJ1Z19jb21t
ZW50X2Zyb21fY29tbWl0X3RleHQoc2VsZi5fdG9vbC5zY20oKSwgY29tbWl0X2xvZykKKyAgICAg
ICAgIyBUaGVyZSBpcyBubyBwYXRjaCB0byBjbG9zZS4KIAotICAgIEBjbGFzc21ldGhvZAotICAg
IGRlZiBsYW5kX3BhdGNoX2FuZF9oYW5kbGVfZXJyb3JzKGNscywgcGF0Y2gsIG9wdGlvbnMsIHRv
b2wpOgotICAgICAgICB0cnk6Ci0gICAgICAgICAgICBjbHMuX2xhbmRfcGF0Y2gocGF0Y2gsIG9w
dGlvbnMsIHRvb2wpCi0gICAgICAgICAgICBpZiBvcHRpb25zLmNsb3NlX2J1ZzoKLSAgICAgICAg
ICAgICAgICBjbHMuX2Nsb3NlX2J1Z19pZl9ub19hY3RpdmVfcGF0Y2hlcyh0b29sLmJ1Z3MsIHBh
dGNoWyJidWdfaWQiXSkKLSAgICAgICAgZXhjZXB0IENoZWNrb3V0TmVlZHNVcGRhdGUsIGU6Ci0g
ICAgICAgICAgICBsb2coIkNvbW1pdCBmYWlsZWQgYmVjYXVzZSB0aGUgY2hlY2tvdXQgaXMgb3V0
IG9mIGRhdGUuICBQbGVhc2UgdXBkYXRlIGFuZCB0cnkgYWdhaW4uIikKLSAgICAgICAgICAgIGxv
ZygiWW91IGNhbiBwYXNzIC0tbm8tYnVpbGQgdG8gc2tpcCBidWlsZGluZy90ZXN0aW5nIGFmdGVy
IHVwZGF0ZSBpZiB5b3UgYmVsaWV2ZSB0aGUgbmV3IGNvbW1pdHMgZGlkIG5vdCBhZmZlY3QgdGhl
IHJlc3VsdHMuIikKLSAgICAgICAgICAgIFdvcmtRdWV1ZS5leGl0X2FmdGVyX2hhbmRsZWRfZXJy
b3IoZSkKLSAgICAgICAgZXhjZXB0IFNjcmlwdEVycm9yLCBlOgotICAgICAgICAgICAgIyBNYXJr
IHRoZSBwYXRjaCBhcyBjb21taXQtcXVldWUtIGFuZCBjb21tZW50IGluIHRoZSBidWcuCi0gICAg
ICAgICAgICB0b29sLmJ1Z3MucmVqZWN0X3BhdGNoX2Zyb21fY29tbWl0X3F1ZXVlKHBhdGNoWyJp
ZCJdLCBlLm1lc3NhZ2Vfd2l0aF9vdXRwdXQoKSkKLSAgICAgICAgICAgIFdvcmtRdWV1ZS5leGl0
X2FmdGVyX2hhbmRsZWRfZXJyb3IoZSkKKyAgICBkZWYgY2xvc2VfYnVnKHNlbGYpOgorICAgICAg
ICBidWdfaWQgPSBzZWxmLl9wYXRjaFsiYnVnX2lkIl0KKyAgICAgICAgaWYgYnVnX2lkOgorICAg
ICAgICAgICAgbG9nKCJVcGRhdGluZyBidWcgJXMiICUgYnVnX2lkKQorICAgICAgICAgICAgaWYg
c2VsZi5fb3B0aW9ucy5jbG9zZV9idWc6CisgICAgICAgICAgICAgICAgc2VsZi5fdG9vbC5idWdz
LmNsb3NlX2J1Z19hc19maXhlZChidWdfaWQsIHNlbGYuX2NvbW1lbnRfdGVzdCkKKyAgICAgICAg
ICAgIGVsc2U6CisgICAgICAgICAgICAgICAgIyBGSVhNRTogV2Ugc2hvdWxkIGEgc21hcnQgd2F5
IHRvIGZpZ3VyZSBvdXQgaWYgdGhlIHBhdGNoIGlzIGF0dGFjaGVkCisgICAgICAgICAgICAgICAg
IyB0byB0aGUgYnVnLCBhbmQgaWYgc28gb2Jzb2xldGUgaXQuCisgICAgICAgICAgICAgICAgc2Vs
Zi5fdG9vbC5idWdzLnBvc3RfY29tbWVudF90b19idWcoYnVnX2lkLCBzZWxmLl9jb21tZW50X3Rl
c3QpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBsb2coc2VsZi5fY29tbWVudF90ZXN0KQor
ICAgICAgICAgICAgbG9nKCJObyBidWcgaWQgcHJvdmlkZWQuIikKIAogCiBjbGFzcyBMYW5kRGlm
ZihDb21tYW5kKToKQEAgLTM3MiwxOCArMjQ4LDEzIEBAIGNsYXNzIExhbmREaWZmKENvbW1hbmQp
OgogICAgICAgICBvcy5jaGRpcih0b29sLnNjbSgpLmNoZWNrb3V0X3Jvb3QpCiAgICAgICAgIHNl
bGYudXBkYXRlX2NoYW5nZWxvZ3Nfd2l0aF9yZXZpZXdlcihvcHRpb25zLnJldmlld2VyLCBidWdf
aWQsIHRvb2wpCiAKLSAgICAgICAgY29tbWVudF90ZXh0ID0gV2ViS2l0TGFuZGluZ1NjcmlwdHMu
YnVpbGRfYW5kX2NvbW1pdCh0b29sLnNjbSgpLCBvcHRpb25zKQotICAgICAgICBpZiBidWdfaWQ6
Ci0gICAgICAgICAgICBsb2coIlVwZGF0aW5nIGJ1ZyAlcyIgJSBidWdfaWQpCi0gICAgICAgICAg
ICBpZiBvcHRpb25zLmNsb3NlX2J1ZzoKLSAgICAgICAgICAgICAgICB0b29sLmJ1Z3MuY2xvc2Vf
YnVnX2FzX2ZpeGVkKGJ1Z19pZCwgY29tbWVudF90ZXh0KQotICAgICAgICAgICAgZWxzZToKLSAg
ICAgICAgICAgICAgICAjIEZJWE1FOiBXZSBzaG91bGQgYSBzbWFydCB3YXkgdG8gZmlndXJlIG91
dCBpZiB0aGUgcGF0Y2ggaXMgYXR0YWNoZWQKLSAgICAgICAgICAgICAgICAjIHRvIHRoZSBidWcs
IGFuZCBpZiBzbyBvYnNvbGV0ZSBpdC4KLSAgICAgICAgICAgICAgICB0b29sLmJ1Z3MucG9zdF9j
b21tZW50X3RvX2J1ZyhidWdfaWQsIGNvbW1lbnRfdGV4dCkKLSAgICAgICAgZWxzZToKLSAgICAg
ICAgICAgIGxvZyhjb21tZW50X3RleHQpCi0gICAgICAgICAgICBsb2coIk5vIGJ1ZyBpZCBwcm92
aWRlZC4iKQorICAgICAgICBmYWtlX3BhdGNoID0geworICAgICAgICAgICAgImlkIjogTm9uZSwK
KyAgICAgICAgICAgICJidWdfaWQiOiBidWdfaWQKKyAgICAgICAgfQorCisgICAgICAgIHNlcXVl
bmNlID0gTGFuZERpZmZMYW5kaW5nU2VxdWVuY2UoZmFrZV9wYXRjaCwgb3B0aW9ucywgdG9vbCkK
KyAgICAgICAgc2VxdWVuY2UucnVuKCkKIAogCiBjbGFzcyBBYnN0cmFjdFBhdGNoUHJvY2Vzc2lu
Z0NvbW1hbmQoQ29tbWFuZCk6CkBAIC00MzAsOCArMzAxLDggQEAgY2xhc3MgQWJzdHJhY3RQYXRj
aExhbmRpbmdDb21tYW5kKEFic3RyYWN0UGF0Y2hQcm9jZXNzaW5nQ29tbWFuZCk6CiAgICAgICAg
IFdlYktpdExhbmRpbmdTY3JpcHRzLnByZXBhcmVfY2xlYW5fd29ya2luZ19kaXJlY3RvcnkodG9v
bC5zY20oKSwgb3B0aW9ucykKIAogICAgIGRlZiBfcHJvY2Vzc19wYXRjaChzZWxmLCBwYXRjaCwg
b3B0aW9ucywgYXJncywgdG9vbCk6Ci0gICAgICAgIFdlYktpdExhbmRpbmdTY3JpcHRzLmxhbmRf
cGF0Y2hfYW5kX2hhbmRsZV9lcnJvcnMocGF0Y2gsIG9wdGlvbnMsIHRvb2wpCi0KKyAgICAgICAg
c2VxdWVuY2UgPSBDb25kaXRpb25hbExhbmRpbmdTZXF1ZW5jZShwYXRjaCwgb3B0aW9ucywgdG9v
bCkKKyAgICAgICAgc2VxdWVuY2UucnVuX2FuZF9oYW5kbGVfZXJyb3JzKCkKIAogY2xhc3MgTGFu
ZEF0dGFjaG1lbnQoQWJzdHJhY3RQYXRjaExhbmRpbmdDb21tYW5kKToKICAgICBkZWYgX19pbml0
X18oc2VsZik6CmRpZmYgLS1naXQgYS9XZWJLaXRUb29scy9TY3JpcHRzL21vZHVsZXMvbGFuZGlu
Z3NlcXVlbmNlLnB5IGIvV2ViS2l0VG9vbHMvU2NyaXB0cy9tb2R1bGVzL2xhbmRpbmdzZXF1ZW5j
ZS5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xYWNlMTIzCi0tLSAvZGV2
L251bGwKKysrIGIvV2ViS2l0VG9vbHMvU2NyaXB0cy9tb2R1bGVzL2xhbmRpbmdzZXF1ZW5jZS5w
eQpAQCAtMCwwICsxLDExOCBAQAorIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCisjIENvcHlyaWdodCAo
YykgMjAwOSwgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMgQ29weXJpZ2h0IChj
KSAyMDA5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisj
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucyBhcmUKKyMgbWV0OgorIyAKKyMgICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorIyAgICAg
KiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
CisjIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIKKyMgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorIyBkaXN0cmlidXRpb24uCisjICAgICAqIE5laXRo
ZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyMgY29udHJp
YnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVk
IGZyb20KKyMgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVy
bWlzc2lvbi4KKyMgCisjIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdI
VCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyMgIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyMgTElNSVRFRCBUTywgVEhF
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisj
IEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBU
SEUgQ09QWVJJR0hUCisjIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorIyBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisjIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAor
IyBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkKKyMgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorIyAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyMgT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KKworZnJvbSBtb2R1bGVzLmNvbW1lbnRzIGltcG9ydCBidWdfY29tbWVudF9mcm9tX2NvbW1p
dF90ZXh0Citmcm9tIG1vZHVsZXMubG9nZ2luZyBpbXBvcnQgbG9nCitmcm9tIG1vZHVsZXMuc2Nt
IGltcG9ydCBTY3JpcHRFcnJvciwgQ2hlY2tvdXROZWVkc1VwZGF0ZQorZnJvbSBtb2R1bGVzLndl
YmtpdGxhbmRpbmdzY3JpcHRzIGltcG9ydCBXZWJLaXRMYW5kaW5nU2NyaXB0cywgY29tbWl0X21l
c3NhZ2VfZm9yX3RoaXNfY29tbWl0Citmcm9tIG1vZHVsZXMud2Via2l0cG9ydCBpbXBvcnQgV2Vi
S2l0UG9ydAorZnJvbSBtb2R1bGVzLndvcmtxdWV1ZSBpbXBvcnQgV29ya1F1ZXVlCisKK2NsYXNz
IExhbmRpbmdTZXF1ZW5jZToKKyAgICBkZWYgX19pbml0X18oc2VsZiwgcGF0Y2gsIG9wdGlvbnMs
IHRvb2wpOgorICAgICAgICBzZWxmLl9wYXRjaCA9IHBhdGNoCisgICAgICAgIHNlbGYuX29wdGlv
bnMgPSBvcHRpb25zCisgICAgICAgIHNlbGYuX3Rvb2wgPSB0b29sCisgICAgICAgIHNlbGYuX3Bv
cnQgPSBXZWJLaXRQb3J0LmdldF9wb3J0KHNlbGYuX29wdGlvbnMpCisKKyAgICBkZWYgcnVuKHNl
bGYpOgorICAgICAgICBzZWxmLnVwZGF0ZSgpCisgICAgICAgIHNlbGYuYXBwbHlfcGF0Y2goKQor
ICAgICAgICBzZWxmLmJ1aWxkKCkKKyAgICAgICAgc2VsZi50ZXN0KCkKKyAgICAgICAgY29tbWl0
X2xvZyA9IHNlbGYuY29tbWl0KCkKKyAgICAgICAgc2VsZi5jbG9zZV9wYXRjaChjb21taXRfbG9n
KQorICAgICAgICBzZWxmLmNsb3NlX2J1ZygpCisKKyAgICBkZWYgcnVuX2FuZF9oYW5kbGVfZXJy
b3JzKHNlbGYpOgorICAgICAgICB0cnk6CisgICAgICAgICAgICBzZWxmLnJ1bigpCisgICAgICAg
IGV4Y2VwdCBDaGVja291dE5lZWRzVXBkYXRlLCBlOgorICAgICAgICAgICAgbG9nKCJDb21taXQg
ZmFpbGVkIGJlY2F1c2UgdGhlIGNoZWNrb3V0IGlzIG91dCBvZiBkYXRlLiAgUGxlYXNlIHVwZGF0
ZSBhbmQgdHJ5IGFnYWluLiIpCisgICAgICAgICAgICBsb2coIllvdSBjYW4gcGFzcyAtLW5vLWJ1
aWxkIHRvIHNraXAgYnVpbGRpbmcvdGVzdGluZyBhZnRlciB1cGRhdGUgaWYgeW91IGJlbGlldmUg
dGhlIG5ldyBjb21taXRzIGRpZCBub3QgYWZmZWN0IHRoZSByZXN1bHRzLiIpCisgICAgICAgICAg
ICBXb3JrUXVldWUuZXhpdF9hZnRlcl9oYW5kbGVkX2Vycm9yKGUpCisgICAgICAgIGV4Y2VwdCBT
Y3JpcHRFcnJvciwgZToKKyAgICAgICAgICAgICMgTWFyayB0aGUgcGF0Y2ggYXMgY29tbWl0LXF1
ZXVlLSBhbmQgY29tbWVudCBpbiB0aGUgYnVnLgorICAgICAgICAgICAgc2VsZi5fdG9vbC5idWdz
LnJlamVjdF9wYXRjaF9mcm9tX2NvbW1pdF9xdWV1ZShzZWxmLl9wYXRjaFsiaWQiXSwgZS5tZXNz
YWdlX3dpdGhfb3V0cHV0KCkpCisgICAgICAgICAgICBXb3JrUXVldWUuZXhpdF9hZnRlcl9oYW5k
bGVkX2Vycm9yKGUpCisKKyAgICBkZWYgdXBkYXRlKHNlbGYpOgorICAgICAgICBzZWxmLl90b29s
LnNjbSgpLnVwZGF0ZV93ZWJraXQoKQorCisgICAgZGVmIGFwcGx5X3BhdGNoKHNlbGYpOgorICAg
ICAgICBsb2coIlByb2Nlc3NpbmcgcGF0Y2ggJXMgZnJvbSBidWcgJXMuIiAlIChzZWxmLl9wYXRj
aFsiaWQiXSwgc2VsZi5fcGF0Y2hbImJ1Z19pZCJdKSkKKyAgICAgICAgc2VsZi5fdG9vbC5zY20o
KS5hcHBseV9wYXRjaChzZWxmLl9wYXRjaCwgZm9yY2U9c2VsZi5fb3B0aW9ucy5ub25faW50ZXJh
Y3RpdmUpCisKKyAgICBkZWYgYnVpbGQoc2VsZik6CisgICAgICAgICMgTWFrZSBzdXJlIHRoZSB0
cmVlIGlzIHN0aWxsIGdyZWVuIGFmdGVyIHVwZGF0aW5nLCBiZWZvcmUgYnVpbGRpbmcgdGhpcyBw
YXRjaC4KKyAgICAgICAgIyBUaGUgZmlyc3QgcGF0Y2ggZW5kcyB1cCBjaGVja2luZyB0cmVlIHN0
YXR1cyB0d2ljZSwgYnV0IHRoYXQncyBPSy4KKyAgICAgICAgV2ViS2l0TGFuZGluZ1NjcmlwdHMu
ZW5zdXJlX2J1aWxkZXJzX2FyZV9ncmVlbihzZWxmLl90b29sLmJ1aWxkYm90LCBzZWxmLl9vcHRp
b25zKQorICAgICAgICBXZWJLaXRMYW5kaW5nU2NyaXB0cy5idWlsZF93ZWJraXQocXVpZXQ9c2Vs
Zi5fb3B0aW9ucy5xdWlldCwgcG9ydD1zZWxmLl9wb3J0KQorCisgICAgZGVmIHRlc3Qoc2VsZik6
CisgICAgICAgICMgV2hlbiBydW5uaW5nIG5vbi1pbnRlcmFjdGl2ZWx5IHdlIGRvbid0IHdhbnQg
dG8gbGF1bmNoIFNhZmFyaSBhbmQgd2Ugd2FudCB0byBleGl0IGFmdGVyIHRoZSBmaXJzdCBmYWls
dXJlLgorICAgICAgICBXZWJLaXRTY3JpcHRzLnJ1bl93ZWJraXRfdGVzdHMobGF1bmNoX3NhZmFy
aT1ub3Qgb3B0aW9ucy5ub25faW50ZXJhY3RpdmUsIGZhaWxfZmFzdD1vcHRpb25zLm5vbl9pbnRl
cmFjdGl2ZSwgcXVpZXQ9b3B0aW9ucy5xdWlldCwgcG9ydD1wb3J0KQorCisgICAgZGVmIGNvbW1p
dChzZWxmKToKKyAgICAgICAgY29tbWl0X21lc3NhZ2UgPSBjb21taXRfbWVzc2FnZV9mb3JfdGhp
c19jb21taXQoc2VsZi5fdG9vbC5zY20oKSkKKyAgICAgICAgcmV0dXJuIHNlbGYuX3Rvb2wuc2Nt
KCkuY29tbWl0X3dpdGhfbWVzc2FnZShjb21taXRfbWVzc2FnZS5tZXNzYWdlKCkpCisKKyAgICBk
ZWYgY2xvc2VfcGF0Y2goc2VsZiwgY29tbWl0X2xvZyk6CisgICAgICAgIGNvbW1lbnRfdGV4dCA9
IGJ1Z19jb21tZW50X2Zyb21fY29tbWl0X3RleHQoc2VsZi5fdG9vbC5zY20oKSwgY29tbWl0X2xv
ZykKKyAgICAgICAgc2VsZi5fdG9vbC5idWdzLmNsZWFyX2F0dGFjaG1lbnRfZmxhZ3Moc2VsZi5f
cGF0Y2hbImlkIl0sIGNvbW1lbnRfdGV4dCkKKworICAgIGRlZiBjbG9zZV9idWcoc2VsZik6Cisg
ICAgICAgICMgQ2hlY2sgdG8gbWFrZSBzdXJlIHRoZXJlIGFyZSBubyByPyBvciByKyBwYXRjaGVz
IG9uIHRoZSBidWcgYmVmb3JlIGNsb3NpbmcuCisgICAgICAgICMgQXNzdW1lIHRoYXQgci0gcGF0
Y2hlcyBhcmUganVzdCBwcmV2aW91cyBwYXRjaGVzIHNvbWVvbmUgZm9yZ290IHRvIG9ic29sZXRl
LgorICAgICAgICBwYXRjaGVzID0gc2VsZi5fdG9vbC5idWdzLmZldGNoX3BhdGNoZXNfZnJvbV9i
dWcoc2VsZi5fcGF0Y2hbImJ1Z19pZCJdKQorICAgICAgICBmb3IgcGF0Y2ggaW4gcGF0Y2hlczoK
KyAgICAgICAgICAgIHJldmlld19mbGFnID0gcGF0Y2guZ2V0KCJyZXZpZXciKQorICAgICAgICAg
ICAgaWYgcmV2aWV3X2ZsYWcgPT0gIj8iIG9yIHJldmlld19mbGFnID09ICIrIjoKKyAgICAgICAg
ICAgICAgICBsb2coIk5vdCBjbG9zaW5nIGJ1ZyAlcyBhcyBhdHRhY2htZW50ICVzIGhhcyByZXZp
ZXc9JXMuICBBc3N1bWluZyB0aGVyZSBhcmUgbW9yZSBwYXRjaGVzIHRvIGxhbmQgZnJvbSB0aGlz
IGJ1Zy4iICUgKHBhdGNoWyJidWdfaWQiXSwgcGF0Y2hbImlkIl0sIHJldmlld19mbGFnKSkKKyAg
ICAgICAgICAgICAgICByZXR1cm4KKyAgICAgICAgc2VsZi5fdG9vbC5idWdzLmNsb3NlX2J1Z19h
c19maXhlZChzZWxmLl9wYXRjaFsiYnVnX2lkIl0sICJBbGwgcmV2aWV3ZWQgcGF0Y2hlcyBoYXZl
IGJlZW4gbGFuZGVkLiAgQ2xvc2luZyBidWcuIikKKworCitjbGFzcyBDb25kaXRpb25hbExhbmRp
bmdTZXF1ZW5jZShMYW5kaW5nU2VxdWVuY2UpOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBwYXRj
aCwgb3B0aW9ucywgdG9vbCk6CisgICAgICAgIExhbmRpbmdTZXF1ZW5jZS5fX2luaXRfXyhzZWxm
LCBwYXRjaCwgb3B0aW9ucywgdG9vbCkKKworICAgIGRlZiBidWlsZChzZWxmKToKKyAgICAgICAg
aWYgc2VsZi5fb3B0aW9ucy5idWlsZDoKKyAgICAgICAgICAgIExhbmRpbmdTZXF1ZW5jZS5idWls
ZChzZWxmKQorCisgICAgZGVmIHRlc3Qoc2VsZik6CisgICAgICAgIGlmIHNlbGYuX29wdGlvbnMu
YnVpbGQgYW5kIHNlbGYuX29wdGlvbnMudGVzdDoKKyAgICAgICAgICAgIExhbmRpbmdTZXF1ZW5j
ZS50ZXN0KHNlbGYpCisKKyAgICBkZWYgY2xvc2VfYnVnKHNlbGYpOgorICAgICAgICBpZiBzZWxm
Ll9vcHRpb25zLmNsb3NlX2J1ZzoKKyAgICAgICAgICAgIExhbmRpbmdTZXF1ZW5jZS5jbG9zZV9i
dWcoc2VsZikKKwpkaWZmIC0tZ2l0IGEvV2ViS2l0VG9vbHMvU2NyaXB0cy9tb2R1bGVzL3dlYmtp
dGxhbmRpbmdzY3JpcHRzLnB5IGIvV2ViS2l0VG9vbHMvU2NyaXB0cy9tb2R1bGVzL3dlYmtpdGxh
bmRpbmdzY3JpcHRzLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZkMzE4
ODAKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJLaXRUb29scy9TY3JpcHRzL21vZHVsZXMvd2Via2l0
bGFuZGluZ3NjcmlwdHMucHkKQEAgLTAsMCArMSwxNDUgQEAKKyMhL3Vzci9iaW4vZW52IHB5dGhv
bgorIyBDb3B5cmlnaHQgKGMpIDIwMDksIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisjIENvcHlyaWdodCAoYykgMjAwOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisj
CisjIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisjIG1ldDoKKyMgCisjICAgICAqIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisjIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyMgICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZQorIyBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisjIGluIHRoZSBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyMgZGlzdHJpYnV0aW9u
LgorIyAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMg
b2YgaXRzCisjIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUg
cHJvZHVjdHMgZGVyaXZlZCBmcm9tCisjIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBw
cmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisjIAorIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisjICJBUyBJUyIgQU5E
IEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisj
IExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUgorIyBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorIyBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyMgU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAor
IyBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwKKyMgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisjIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyMgKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFCisjIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCisjCisjIEEgdG9vbCBmb3IgYXV0b21hdGluZyBkZWFsaW5nIHdp
dGggYnVnemlsbGEsIHBvc3RpbmcgcGF0Y2hlcywgY29tbWl0dGluZyBwYXRjaGVzLCBldGMuCisK
K2ltcG9ydCBvcworaW1wb3J0IFN0cmluZ0lPCitpbXBvcnQgc3VicHJvY2VzcworaW1wb3J0IHN5
cworCitmcm9tIG9wdHBhcnNlIGltcG9ydCBtYWtlX29wdGlvbgorCitmcm9tIG1vZHVsZXMuY2hh
bmdlbG9ncyBpbXBvcnQgQ2hhbmdlTG9nCitmcm9tIG1vZHVsZXMubG9nZ2luZyBpbXBvcnQgbG9n
LCB0ZWUKK2Zyb20gbW9kdWxlcy5zY20gaW1wb3J0IENvbW1pdE1lc3NhZ2UsIGRldGVjdF9zY21f
c3lzdGVtLCBTY3JpcHRFcnJvciwgQ2hlY2tvdXROZWVkc1VwZGF0ZQorZnJvbSBtb2R1bGVzLndl
YmtpdHBvcnQgaW1wb3J0IFdlYktpdFBvcnQKKworZGVmIGNvbW1pdF9tZXNzYWdlX2Zvcl90aGlz
X2NvbW1pdChzY20pOgorICAgIGNoYW5nZWxvZ19wYXRocyA9IHNjbS5tb2RpZmllZF9jaGFuZ2Vs
b2dzKCkKKyAgICBpZiBub3QgbGVuKGNoYW5nZWxvZ19wYXRocyk6CisgICAgICAgIHJhaXNlIFNj
cmlwdEVycm9yKG1lc3NhZ2U9IkZvdW5kIG5vIG1vZGlmaWVkIENoYW5nZUxvZ3MsIGNhbm5vdCBj
cmVhdGUgYSBjb21taXQgbWVzc2FnZS5cbiIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIkFs
bCBjaGFuZ2VzIHJlcXVpcmUgYSBDaGFuZ2VMb2cuICBTZWU6XG4iCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICJodHRwOi8vd2Via2l0Lm9yZy9jb2RpbmcvY29udHJpYnV0aW5nLmh0bWwiKQor
CisgICAgY2hhbmdlbG9nX21lc3NhZ2VzID0gW10KKyAgICBmb3IgY2hhbmdlbG9nX3BhdGggaW4g
Y2hhbmdlbG9nX3BhdGhzOgorICAgICAgICBsb2coIlBhcnNpbmcgQ2hhbmdlTG9nOiAlcyIgJSBj
aGFuZ2Vsb2dfcGF0aCkKKyAgICAgICAgY2hhbmdlbG9nX2VudHJ5ID0gQ2hhbmdlTG9nKGNoYW5n
ZWxvZ19wYXRoKS5sYXRlc3RfZW50cnkoKQorICAgICAgICBpZiBub3QgY2hhbmdlbG9nX2VudHJ5
OgorICAgICAgICAgICAgcmFpc2UgU2NyaXB0RXJyb3IobWVzc2FnZT0iRmFpbGVkIHRvIHBhcnNl
IENoYW5nZUxvZzogIiArIG9zLnBhdGguYWJzcGF0aChjaGFuZ2Vsb2dfcGF0aCkpCisgICAgICAg
IGNoYW5nZWxvZ19tZXNzYWdlcy5hcHBlbmQoY2hhbmdlbG9nX2VudHJ5KQorCisgICAgIyBGSVhN
RTogV2Ugc2hvdWxkIHNvcnQgYW5kIGxhYmVsIHRoZSBDaGFuZ2VMb2cgbWVzc2FnZXMgbGlrZSBj
b21taXQtbG9nLWVkaXRvciBkb2VzLgorICAgIHJldHVybiBDb21taXRNZXNzYWdlKCIiLmpvaW4o
Y2hhbmdlbG9nX21lc3NhZ2VzKS5zcGxpdGxpbmVzKCkpCisKKworY2xhc3MgV2ViS2l0TGFuZGlu
Z1NjcmlwdHM6CisgICAgQHN0YXRpY21ldGhvZAorICAgIGRlZiBjbGVhbmluZ19vcHRpb25zKCk6
CisgICAgICAgIHJldHVybiBbCisgICAgICAgICAgICBtYWtlX29wdGlvbigiLS1mb3JjZS1jbGVh
biIsIGFjdGlvbj0ic3RvcmVfdHJ1ZSIsIGRlc3Q9ImZvcmNlX2NsZWFuIiwgZGVmYXVsdD1GYWxz
ZSwgaGVscD0iQ2xlYW4gd29ya2luZyBkaXJlY3RvcnkgYmVmb3JlIGFwcGx5aW5nIHBhdGNoZXMg
KHJlbW92ZXMgbG9jYWwgY2hhbmdlcyBhbmQgY29tbWl0cykiKSwKKyAgICAgICAgICAgIG1ha2Vf
b3B0aW9uKCItLW5vLWNsZWFuIiwgYWN0aW9uPSJzdG9yZV9mYWxzZSIsIGRlc3Q9ImNsZWFuIiwg
ZGVmYXVsdD1UcnVlLCBoZWxwPSJEb24ndCBjaGVjayBpZiB0aGUgd29ya2luZyBkaXJlY3Rvcnkg
aXMgY2xlYW4gYmVmb3JlIGFwcGx5aW5nIHBhdGNoZXMiKSwKKyAgICAgICAgXQorCisgICAgQHN0
YXRpY21ldGhvZAorICAgIGRlZiBsYW5kX29wdGlvbnMoKToKKyAgICAgICAgcmV0dXJuIFsKKyAg
ICAgICAgICAgIG1ha2Vfb3B0aW9uKCItLWlnbm9yZS1idWlsZGVycyIsIGFjdGlvbj0ic3RvcmVf
ZmFsc2UiLCBkZXN0PSJjaGVja19idWlsZGVycyIsIGRlZmF1bHQ9VHJ1ZSwgaGVscD0iRG9uJ3Qg
Y2hlY2sgdG8gc2VlIGlmIHRoZSBidWlsZC53ZWJraXQub3JnIGJ1aWxkZXJzIGFyZSBncmVlbiBi
ZWZvcmUgbGFuZGluZy4iKSwKKyAgICAgICAgICAgIG1ha2Vfb3B0aW9uKCItLW5vLWNsb3NlIiwg
YWN0aW9uPSJzdG9yZV9mYWxzZSIsIGRlc3Q9ImNsb3NlX2J1ZyIsIGRlZmF1bHQ9VHJ1ZSwgaGVs
cD0iTGVhdmUgYnVnIG9wZW4gYWZ0ZXIgbGFuZGluZy4iKSwKKyAgICAgICAgICAgIG1ha2Vfb3B0
aW9uKCItLW5vLWJ1aWxkIiwgYWN0aW9uPSJzdG9yZV9mYWxzZSIsIGRlc3Q9ImJ1aWxkIiwgZGVm
YXVsdD1UcnVlLCBoZWxwPSJDb21taXQgd2l0aG91dCBidWlsZGluZyBmaXJzdCwgaW1wbGllcyAt
LW5vLXRlc3QuIiksCisgICAgICAgICAgICBtYWtlX29wdGlvbigiLS1uby10ZXN0IiwgYWN0aW9u
PSJzdG9yZV9mYWxzZSIsIGRlc3Q9InRlc3QiLCBkZWZhdWx0PVRydWUsIGhlbHA9IkNvbW1pdCB3
aXRob3V0IHJ1bm5pbmcgcnVuLXdlYmtpdC10ZXN0cy4iKSwKKyAgICAgICAgICAgIG1ha2Vfb3B0
aW9uKCItLXF1aWV0IiwgYWN0aW9uPSJzdG9yZV90cnVlIiwgZGVzdD0icXVpZXQiLCBkZWZhdWx0
PUZhbHNlLCBoZWxwPSJQcm9kdWNlIGxlc3MgY29uc29sZSBvdXRwdXQuIiksCisgICAgICAgICAg
ICBtYWtlX29wdGlvbigiLS1ub24taW50ZXJhY3RpdmUiLCBhY3Rpb249InN0b3JlX3RydWUiLCBk
ZXN0PSJub25faW50ZXJhY3RpdmUiLCBkZWZhdWx0PUZhbHNlLCBoZWxwPSJOZXZlciBwcm9tcHQg
dGhlIHVzZXIsIGZhaWwgYXMgZmFzdCBhcyBwb3NzaWJsZS4iKSwKKyAgICAgICAgXSArIFdlYktp
dFBvcnQucG9ydF9vcHRpb25zKCkKKworICAgIEBzdGF0aWNtZXRob2QKKyAgICBkZWYgcnVuX2Nv
bW1hbmRfd2l0aF90ZWVkX291dHB1dChhcmdzLCB0ZWVkX291dHB1dCk6CisgICAgICAgIGNoaWxk
X3Byb2Nlc3MgPSBzdWJwcm9jZXNzLlBvcGVuKGFyZ3MsIHN0ZG91dD1zdWJwcm9jZXNzLlBJUEUs
IHN0ZGVycj1zdWJwcm9jZXNzLlNURE9VVCkKKworICAgICAgICAjIFVzZSBvdXIgb3duIGN1c3Rv
bSB3YWl0IGxvb3AgYmVjYXVzZSBQb3BlbiBpZ25vcmVzIGEgdGVlJ2Qgc3RkZXJyL3N0ZG91dC4K
KyAgICAgICAgIyBGSVhNRTogVGhpcyBjb3VsZCBiZSBpbXByb3ZlZCBub3QgdG8gZmxhdHRlbiBv
dXRwdXQgdG8gc3Rkb3V0LgorICAgICAgICB3aGlsZSBUcnVlOgorICAgICAgICAgICAgb3V0cHV0
X2xpbmUgPSBjaGlsZF9wcm9jZXNzLnN0ZG91dC5yZWFkbGluZSgpCisgICAgICAgICAgICBpZiBv
dXRwdXRfbGluZSA9PSAiIiBhbmQgY2hpbGRfcHJvY2Vzcy5wb2xsKCkgIT0gTm9uZToKKyAgICAg
ICAgICAgICAgICByZXR1cm4gY2hpbGRfcHJvY2Vzcy5wb2xsKCkKKyAgICAgICAgICAgIHRlZWRf
b3V0cHV0LndyaXRlKG91dHB1dF9saW5lKQorCisgICAgQHN0YXRpY21ldGhvZAorICAgIGRlZiBy
dW5fYW5kX3Rocm93X2lmX2ZhaWwoYXJncywgcXVpZXQ9RmFsc2UpOgorICAgICAgICAjIENhY2hl
IHRoZSBjaGlsZCdzIG91dHB1dCBsb2NhbGx5IHNvIGl0IGNhbiBiZSB1c2VkIGZvciBlcnJvciBy
ZXBvcnRzLgorICAgICAgICBjaGlsZF9vdXRfZmlsZSA9IFN0cmluZ0lPLlN0cmluZ0lPKCkKKyAg
ICAgICAgaWYgcXVpZXQ6CisgICAgICAgICAgICBkZXZfbnVsbCA9IG9wZW4ob3MuZGV2bnVsbCwg
InciKQorICAgICAgICBjaGlsZF9zdGRvdXQgPSB0ZWUoY2hpbGRfb3V0X2ZpbGUsIGRldl9udWxs
IGlmIHF1aWV0IGVsc2Ugc3lzLnN0ZG91dCkKKyAgICAgICAgZXhpdF9jb2RlID0gV2ViS2l0TGFu
ZGluZ1NjcmlwdHMucnVuX2NvbW1hbmRfd2l0aF90ZWVkX291dHB1dChhcmdzLCBjaGlsZF9zdGRv
dXQpCisgICAgICAgIGlmIHF1aWV0OgorICAgICAgICAgICAgZGV2X251bGwuY2xvc2UoKQorCisg
ICAgICAgIGNoaWxkX291dHB1dCA9IGNoaWxkX291dF9maWxlLmdldHZhbHVlKCkKKyAgICAgICAg
Y2hpbGRfb3V0X2ZpbGUuY2xvc2UoKQorCisgICAgICAgIGlmIGV4aXRfY29kZToKKyAgICAgICAg
ICAgIHJhaXNlIFNjcmlwdEVycm9yKHNjcmlwdF9hcmdzPWFyZ3MsIGV4aXRfY29kZT1leGl0X2Nv
ZGUsIG91dHB1dD1jaGlsZF9vdXRwdXQpCisKKyAgICBAY2xhc3NtZXRob2QKKyAgICBkZWYgcnVu
X3dlYmtpdF9zY3JpcHQoY2xzLCBzY3JpcHRfbmFtZSwgcXVpZXQ9RmFsc2UsIHBvcnQ9V2ViS2l0
UG9ydCk6CisgICAgICAgIGxvZygiUnVubmluZyAlcyIgJSBzY3JpcHRfbmFtZSkKKyAgICAgICAg
Y2xzLnJ1bl9hbmRfdGhyb3dfaWZfZmFpbChwb3J0LnNjcmlwdF9wYXRoKHNjcmlwdF9uYW1lKSwg
cXVpZXQpCisKKyAgICBAY2xhc3NtZXRob2QKKyAgICBkZWYgYnVpbGRfd2Via2l0KGNscywgcXVp
ZXQ9RmFsc2UsIHBvcnQ9V2ViS2l0UG9ydCk6CisgICAgICAgIGxvZygiQnVpbGRpbmcgV2ViS2l0
IikKKyAgICAgICAgY2xzLnJ1bl9hbmRfdGhyb3dfaWZfZmFpbChwb3J0LmJ1aWxkX3dlYmtpdF9j
b21tYW5kKCksIHF1aWV0KQorCisgICAgQHN0YXRpY21ldGhvZAorICAgIGRlZiBlbnN1cmVfYnVp
bGRlcnNfYXJlX2dyZWVuKGJ1aWxkYm90LCBvcHRpb25zKToKKyAgICAgICAgaWYgbm90IG9wdGlv
bnMuY2hlY2tfYnVpbGRlcnMgb3IgYnVpbGRib3QuY29yZV9idWlsZGVyc19hcmVfZ3JlZW4oKToK
KyAgICAgICAgICAgIHJldHVybgorICAgICAgICBlcnJvcigiQnVpbGRlcnMgYXQgJXMgYXJlIHJl
ZCwgcGxlYXNlIGRvIG5vdCBjb21taXQuICBQYXNzIC0taWdub3JlLWJ1aWxkZXJzIHRvIGJ5cGFz
cyB0aGlzIGNoZWNrLiIgJSAoYnVpbGRib3QuYnVpbGRib3RfaG9zdCkpCisKKyAgICBAY2xhc3Nt
ZXRob2QKKyAgICBkZWYgcnVuX3dlYmtpdF90ZXN0cyhjbHMsIGxhdW5jaF9zYWZhcmksIGZhaWxf
ZmFzdD1GYWxzZSwgcXVpZXQ9RmFsc2UsIHBvcnQ9V2ViS2l0UG9ydCk6CisgICAgICAgIGFyZ3Mg
PSBwb3J0LnJ1bl93ZWJraXRfdGVzdHNfY29tbWFuZCgpCisgICAgICAgIGlmIG5vdCBsYXVuY2hf
c2FmYXJpOgorICAgICAgICAgICAgYXJncy5hcHBlbmQoIi0tbm8tbGF1bmNoLXNhZmFyaSIpCisg
ICAgICAgIGlmIHF1aWV0OgorICAgICAgICAgICAgYXJncy5hcHBlbmQoIi0tcXVpZXQiKQorICAg
ICAgICBpZiBmYWlsX2Zhc3Q6CisgICAgICAgICAgICBhcmdzLmFwcGVuZCgiLS1leGl0LWFmdGVy
LW4tZmFpbHVyZXM9MSIpCisgICAgICAgIGNscy5ydW5fYW5kX3Rocm93X2lmX2ZhaWwoYXJncykK
KworICAgIEBzdGF0aWNtZXRob2QKKyAgICBkZWYgcHJlcGFyZV9jbGVhbl93b3JraW5nX2RpcmVj
dG9yeShzY20sIG9wdGlvbnMsIGFsbG93X2xvY2FsX2NvbW1pdHM9RmFsc2UpOgorICAgICAgICBv
cy5jaGRpcihzY20uY2hlY2tvdXRfcm9vdCkKKyAgICAgICAgaWYgbm90IGFsbG93X2xvY2FsX2Nv
bW1pdHM6CisgICAgICAgICAgICBzY20uZW5zdXJlX25vX2xvY2FsX2NvbW1pdHMob3B0aW9ucy5m
b3JjZV9jbGVhbikKKyAgICAgICAgaWYgb3B0aW9ucy5jbGVhbjoKKyAgICAgICAgICAgIHNjbS5l
bnN1cmVfY2xlYW5fd29ya2luZ19kaXJlY3RvcnkoZm9yY2VfY2xlYW49b3B0aW9ucy5mb3JjZV9j
bGVhbikK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>43562</attachid>
            <date>2009-11-20 00:47:28 -0800</date>
            <delta_ts>2009-11-20 01:01:10 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-31709-20091120004726.patch</filename>
            <type>text/plain</type>
            <size>26019</size>
            <attacher name="Adam Barth">abarth</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYktpdFRvb2xzL0NoYW5nZUxvZyBiL1dlYktpdFRvb2xzL0NoYW5nZUxv
ZwppbmRleCA3N2Y2YTcyLi40MTM5ZDE2IDEwMDY0NAotLS0gYS9XZWJLaXRUb29scy9DaGFuZ2VM
b2cKKysrIGIvV2ViS2l0VG9vbHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTcgQEAKKzIwMDktMTEt
MjAgIEFkYW0gQmFydGggIDxhYmFydGhAd2Via2l0Lm9yZz4KKworICAgICAgICBSZXZpZXdlZCBi
eSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBDcmVhdGUgTGFuZGluZ1NlcXVlbmNlIGFzIHRo
ZSBhbGwtc2luZywgYWxsLWRhbmNlIGxhbmRpbmcgY2xhc3MKKyAgICAgICAgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTMxNzA5CisKKyAgICAgICAgQ2xpZW50IGNhbiBp
bmhlcml0IGZyb20gdGhpcyBjbGFzcyB0byBjYXJlZnVsbHkgY29udHJvbCBleGFjdGx5IHdoaWNo
CisgICAgICAgIHN0ZXBzIHRoZXkgd2lzaCB0byBoYXZlIGhhcHBlbiBpbiB0aGUgbGFuZGluZyBz
ZXF1ZW5jZS4KKworICAgICAgICAqIFNjcmlwdHMvYnVnemlsbGEtdG9vbDoKKyAgICAgICAgKiBT
Y3JpcHRzL21vZHVsZXMvbGFuZGluZ3NlcXVlbmNlLnB5OiBBZGRlZC4KKyAgICAgICAgKiBTY3Jp
cHRzL21vZHVsZXMvd2Via2l0bGFuZGluZ3NjcmlwdHMucHk6IEFkZGVkLgorCiAyMDA5LTExLTE5
ICBBZGFtIEJhcnRoICA8YWJhcnRoQHdlYmtpdC5vcmc+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkg
RXJpYyBTZWlkZWwuCmRpZmYgLS1naXQgYS9XZWJLaXRUb29scy9TY3JpcHRzL2J1Z3ppbGxhLXRv
b2wgYi9XZWJLaXRUb29scy9TY3JpcHRzL2J1Z3ppbGxhLXRvb2wKaW5kZXggN2FjMTgwMi4uY2U2
YzFmNiAxMDA3NTUKLS0tIGEvV2ViS2l0VG9vbHMvU2NyaXB0cy9idWd6aWxsYS10b29sCisrKyBi
L1dlYktpdFRvb2xzL1NjcmlwdHMvYnVnemlsbGEtdG9vbApAQCAtNDQsMTYgKzQ0LDE2IEBAIGZy
b20gb3B0cGFyc2UgaW1wb3J0IG1ha2Vfb3B0aW9uCiBmcm9tIG1vZHVsZXMuYnVnemlsbGEgaW1w
b3J0IEJ1Z3ppbGxhLCBwYXJzZV9idWdfaWQKIGZyb20gbW9kdWxlcy5idWlsZGJvdCBpbXBvcnQg
QnVpbGRCb3QKIGZyb20gbW9kdWxlcy5jaGFuZ2Vsb2dzIGltcG9ydCBDaGFuZ2VMb2cKLWZyb20g
bW9kdWxlcy5jb21tZW50cyBpbXBvcnQgYnVnX2NvbW1lbnRfZnJvbV9jb21taXRfdGV4dAorZnJv
bSBtb2R1bGVzLmxhbmRpbmdzZXF1ZW5jZSBpbXBvcnQgQ29uZGl0aW9uYWxMYW5kaW5nU2VxdWVu
Y2UKIGZyb20gbW9kdWxlcy5sb2dnaW5nIGltcG9ydCBlcnJvciwgbG9nLCB0ZWUKIGZyb20gbW9k
dWxlcy5tdWx0aWNvbW1hbmR0b29sIGltcG9ydCBNdWx0aUNvbW1hbmRUb29sLCBDb21tYW5kCiBm
cm9tIG1vZHVsZXMucGF0Y2hjb2xsZWN0aW9uIGltcG9ydCBQYXRjaENvbGxlY3Rpb24KIGZyb20g
bW9kdWxlcy5zY20gaW1wb3J0IENvbW1pdE1lc3NhZ2UsIGRldGVjdF9zY21fc3lzdGVtLCBTY3Jp
cHRFcnJvciwgQ2hlY2tvdXROZWVkc1VwZGF0ZQogZnJvbSBtb2R1bGVzLnN0YXR1c2JvdCBpbXBv
cnQgU3RhdHVzQm90Citmcm9tIG1vZHVsZXMud2Via2l0bGFuZGluZ3NjcmlwdHMgaW1wb3J0IFdl
YktpdExhbmRpbmdTY3JpcHRzLCBjb21taXRfbWVzc2FnZV9mb3JfdGhpc19jb21taXQKIGZyb20g
bW9kdWxlcy53ZWJraXRwb3J0IGltcG9ydCBXZWJLaXRQb3J0CiBmcm9tIG1vZHVsZXMud29ya3F1
ZXVlIGltcG9ydCBXb3JrUXVldWUsIFdvcmtRdWV1ZURlbGVnYXRlCiAKLQogZGVmIHBsdXJhbChu
b3VuKToKICAgICAjIFRoaXMgaXMgYSBkdW1iIHBsdXJhbCgpIGltcGxlbWVudGF0aW9uIHdoaWNo
IHdhcyBqdXN0IGVub3VnaCBmb3Igb3VyIHVzZXMuCiAgICAgaWYgcmUuc2VhcmNoKCJoJCIsIG5v
dW4pOgpAQCAtNjYsMjQgKzY2LDYgQEAgZGVmIHBsdXJhbGl6ZShub3VuLCBjb3VudCk6CiAgICAg
ICAgIG5vdW4gPSBwbHVyYWwobm91bikKICAgICByZXR1cm4gIiVkICVzIiAlIChjb3VudCwgbm91
bikKIAotZGVmIGNvbW1pdF9tZXNzYWdlX2Zvcl90aGlzX2NvbW1pdChzY20pOgotICAgIGNoYW5n
ZWxvZ19wYXRocyA9IHNjbS5tb2RpZmllZF9jaGFuZ2Vsb2dzKCkKLSAgICBpZiBub3QgbGVuKGNo
YW5nZWxvZ19wYXRocyk6Ci0gICAgICAgIHJhaXNlIFNjcmlwdEVycm9yKG1lc3NhZ2U9IkZvdW5k
IG5vIG1vZGlmaWVkIENoYW5nZUxvZ3MsIGNhbm5vdCBjcmVhdGUgYSBjb21taXQgbWVzc2FnZS5c
biIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIkFsbCBjaGFuZ2VzIHJlcXVpcmUgYSBDaGFu
Z2VMb2cuICBTZWU6XG4iCi0gICAgICAgICAgICAgICAgICAgICAgICAgICJodHRwOi8vd2Via2l0
Lm9yZy9jb2RpbmcvY29udHJpYnV0aW5nLmh0bWwiKQotCi0gICAgY2hhbmdlbG9nX21lc3NhZ2Vz
ID0gW10KLSAgICBmb3IgY2hhbmdlbG9nX3BhdGggaW4gY2hhbmdlbG9nX3BhdGhzOgotICAgICAg
ICBsb2coIlBhcnNpbmcgQ2hhbmdlTG9nOiAlcyIgJSBjaGFuZ2Vsb2dfcGF0aCkKLSAgICAgICAg
Y2hhbmdlbG9nX2VudHJ5ID0gQ2hhbmdlTG9nKGNoYW5nZWxvZ19wYXRoKS5sYXRlc3RfZW50cnko
KQotICAgICAgICBpZiBub3QgY2hhbmdlbG9nX2VudHJ5OgotICAgICAgICAgICAgcmFpc2UgU2Ny
aXB0RXJyb3IobWVzc2FnZT0iRmFpbGVkIHRvIHBhcnNlIENoYW5nZUxvZzogIiArIG9zLnBhdGgu
YWJzcGF0aChjaGFuZ2Vsb2dfcGF0aCkpCi0gICAgICAgIGNoYW5nZWxvZ19tZXNzYWdlcy5hcHBl
bmQoY2hhbmdlbG9nX2VudHJ5KQotCi0gICAgIyBGSVhNRTogV2Ugc2hvdWxkIHNvcnQgYW5kIGxh
YmVsIHRoZSBDaGFuZ2VMb2cgbWVzc2FnZXMgbGlrZSBjb21taXQtbG9nLWVkaXRvciBkb2VzLgot
ICAgIHJldHVybiBDb21taXRNZXNzYWdlKCIiLmpvaW4oY2hhbmdlbG9nX21lc3NhZ2VzKS5zcGxp
dGxpbmVzKCkpCi0KIAogY2xhc3MgQnVnc1RvQ29tbWl0KENvbW1hbmQpOgogICAgIGRlZiBfX2lu
aXRfXyhzZWxmKToKQEAgLTE5NywxMzkgKzE3OSwzMyBAQCBjbGFzcyBXZWJLaXRBcHBseWluZ1Nj
cmlwdHM6CiAgICAgICAgICAgICAgICAgc2NtLmNvbW1pdF9sb2NhbGx5X3dpdGhfbWVzc2FnZShj
b21taXRfbWVzc2FnZS5tZXNzYWdlKCkgb3IgcGF0Y2hbIm5hbWUiXSkKIAogCi1jbGFzcyBXZWJL
aXRMYW5kaW5nU2NyaXB0czoKLSAgICBAc3RhdGljbWV0aG9kCi0gICAgZGVmIGNsZWFuaW5nX29w
dGlvbnMoKToKLSAgICAgICAgcmV0dXJuIFsKLSAgICAgICAgICAgIG1ha2Vfb3B0aW9uKCItLWZv
cmNlLWNsZWFuIiwgYWN0aW9uPSJzdG9yZV90cnVlIiwgZGVzdD0iZm9yY2VfY2xlYW4iLCBkZWZh
dWx0PUZhbHNlLCBoZWxwPSJDbGVhbiB3b3JraW5nIGRpcmVjdG9yeSBiZWZvcmUgYXBwbHlpbmcg
cGF0Y2hlcyAocmVtb3ZlcyBsb2NhbCBjaGFuZ2VzIGFuZCBjb21taXRzKSIpLAotICAgICAgICAg
ICAgbWFrZV9vcHRpb24oIi0tbm8tY2xlYW4iLCBhY3Rpb249InN0b3JlX2ZhbHNlIiwgZGVzdD0i
Y2xlYW4iLCBkZWZhdWx0PVRydWUsIGhlbHA9IkRvbid0IGNoZWNrIGlmIHRoZSB3b3JraW5nIGRp
cmVjdG9yeSBpcyBjbGVhbiBiZWZvcmUgYXBwbHlpbmcgcGF0Y2hlcyIpLAotICAgICAgICBdCi0K
LSAgICBAc3RhdGljbWV0aG9kCi0gICAgZGVmIGxhbmRfb3B0aW9ucygpOgotICAgICAgICByZXR1
cm4gWwotICAgICAgICAgICAgbWFrZV9vcHRpb24oIi0taWdub3JlLWJ1aWxkZXJzIiwgYWN0aW9u
PSJzdG9yZV9mYWxzZSIsIGRlc3Q9ImNoZWNrX2J1aWxkZXJzIiwgZGVmYXVsdD1UcnVlLCBoZWxw
PSJEb24ndCBjaGVjayB0byBzZWUgaWYgdGhlIGJ1aWxkLndlYmtpdC5vcmcgYnVpbGRlcnMgYXJl
IGdyZWVuIGJlZm9yZSBsYW5kaW5nLiIpLAotICAgICAgICAgICAgbWFrZV9vcHRpb24oIi0tbm8t
Y2xvc2UiLCBhY3Rpb249InN0b3JlX2ZhbHNlIiwgZGVzdD0iY2xvc2VfYnVnIiwgZGVmYXVsdD1U
cnVlLCBoZWxwPSJMZWF2ZSBidWcgb3BlbiBhZnRlciBsYW5kaW5nLiIpLAotICAgICAgICAgICAg
bWFrZV9vcHRpb24oIi0tbm8tYnVpbGQiLCBhY3Rpb249InN0b3JlX2ZhbHNlIiwgZGVzdD0iYnVp
bGQiLCBkZWZhdWx0PVRydWUsIGhlbHA9IkNvbW1pdCB3aXRob3V0IGJ1aWxkaW5nIGZpcnN0LCBp
bXBsaWVzIC0tbm8tdGVzdC4iKSwKLSAgICAgICAgICAgIG1ha2Vfb3B0aW9uKCItLW5vLXRlc3Qi
LCBhY3Rpb249InN0b3JlX2ZhbHNlIiwgZGVzdD0idGVzdCIsIGRlZmF1bHQ9VHJ1ZSwgaGVscD0i
Q29tbWl0IHdpdGhvdXQgcnVubmluZyBydW4td2Via2l0LXRlc3RzLiIpLAotICAgICAgICAgICAg
bWFrZV9vcHRpb24oIi0tcXVpZXQiLCBhY3Rpb249InN0b3JlX3RydWUiLCBkZXN0PSJxdWlldCIs
IGRlZmF1bHQ9RmFsc2UsIGhlbHA9IlByb2R1Y2UgbGVzcyBjb25zb2xlIG91dHB1dC4iKSwKLSAg
ICAgICAgICAgIG1ha2Vfb3B0aW9uKCItLW5vbi1pbnRlcmFjdGl2ZSIsIGFjdGlvbj0ic3RvcmVf
dHJ1ZSIsIGRlc3Q9Im5vbl9pbnRlcmFjdGl2ZSIsIGRlZmF1bHQ9RmFsc2UsIGhlbHA9Ik5ldmVy
IHByb21wdCB0aGUgdXNlciwgZmFpbCBhcyBmYXN0IGFzIHBvc3NpYmxlLiIpLAotICAgICAgICBd
ICsgV2ViS2l0UG9ydC5wb3J0X29wdGlvbnMoKQotCi0gICAgQHN0YXRpY21ldGhvZAotICAgIGRl
ZiBydW5fY29tbWFuZF93aXRoX3RlZWRfb3V0cHV0KGFyZ3MsIHRlZWRfb3V0cHV0KToKLSAgICAg
ICAgY2hpbGRfcHJvY2VzcyA9IHN1YnByb2Nlc3MuUG9wZW4oYXJncywgc3Rkb3V0PXN1YnByb2Nl
c3MuUElQRSwgc3RkZXJyPXN1YnByb2Nlc3MuU1RET1VUKQotCi0gICAgICAgICMgVXNlIG91ciBv
d24gY3VzdG9tIHdhaXQgbG9vcCBiZWNhdXNlIFBvcGVuIGlnbm9yZXMgYSB0ZWUnZCBzdGRlcnIv
c3Rkb3V0LgotICAgICAgICAjIEZJWE1FOiBUaGlzIGNvdWxkIGJlIGltcHJvdmVkIG5vdCB0byBm
bGF0dGVuIG91dHB1dCB0byBzdGRvdXQuCi0gICAgICAgIHdoaWxlIFRydWU6Ci0gICAgICAgICAg
ICBvdXRwdXRfbGluZSA9IGNoaWxkX3Byb2Nlc3Muc3Rkb3V0LnJlYWRsaW5lKCkKLSAgICAgICAg
ICAgIGlmIG91dHB1dF9saW5lID09ICIiIGFuZCBjaGlsZF9wcm9jZXNzLnBvbGwoKSAhPSBOb25l
OgotICAgICAgICAgICAgICAgIHJldHVybiBjaGlsZF9wcm9jZXNzLnBvbGwoKQotICAgICAgICAg
ICAgdGVlZF9vdXRwdXQud3JpdGUob3V0cHV0X2xpbmUpCi0KLSAgICBAc3RhdGljbWV0aG9kCi0g
ICAgZGVmIHJ1bl9hbmRfdGhyb3dfaWZfZmFpbChhcmdzLCBxdWlldD1GYWxzZSk6Ci0gICAgICAg
ICMgQ2FjaGUgdGhlIGNoaWxkJ3Mgb3V0cHV0IGxvY2FsbHkgc28gaXQgY2FuIGJlIHVzZWQgZm9y
IGVycm9yIHJlcG9ydHMuCi0gICAgICAgIGNoaWxkX291dF9maWxlID0gU3RyaW5nSU8uU3RyaW5n
SU8oKQotICAgICAgICBpZiBxdWlldDoKLSAgICAgICAgICAgIGRldl9udWxsID0gb3Blbihvcy5k
ZXZudWxsLCAidyIpCi0gICAgICAgIGNoaWxkX3N0ZG91dCA9IHRlZShjaGlsZF9vdXRfZmlsZSwg
ZGV2X251bGwgaWYgcXVpZXQgZWxzZSBzeXMuc3Rkb3V0KQotICAgICAgICBleGl0X2NvZGUgPSBX
ZWJLaXRMYW5kaW5nU2NyaXB0cy5ydW5fY29tbWFuZF93aXRoX3RlZWRfb3V0cHV0KGFyZ3MsIGNo
aWxkX3N0ZG91dCkKLSAgICAgICAgaWYgcXVpZXQ6Ci0gICAgICAgICAgICBkZXZfbnVsbC5jbG9z
ZSgpCi0KLSAgICAgICAgY2hpbGRfb3V0cHV0ID0gY2hpbGRfb3V0X2ZpbGUuZ2V0dmFsdWUoKQot
ICAgICAgICBjaGlsZF9vdXRfZmlsZS5jbG9zZSgpCi0KLSAgICAgICAgaWYgZXhpdF9jb2RlOgot
ICAgICAgICAgICAgcmFpc2UgU2NyaXB0RXJyb3Ioc2NyaXB0X2FyZ3M9YXJncywgZXhpdF9jb2Rl
PWV4aXRfY29kZSwgb3V0cHV0PWNoaWxkX291dHB1dCkKLQotICAgIEBjbGFzc21ldGhvZAotICAg
IGRlZiBydW5fd2Via2l0X3NjcmlwdChjbHMsIHNjcmlwdF9uYW1lLCBxdWlldD1GYWxzZSwgcG9y
dD1XZWJLaXRQb3J0KToKLSAgICAgICAgbG9nKCJSdW5uaW5nICVzIiAlIHNjcmlwdF9uYW1lKQot
ICAgICAgICBjbHMucnVuX2FuZF90aHJvd19pZl9mYWlsKHBvcnQuc2NyaXB0X3BhdGgoc2NyaXB0
X25hbWUpLCBxdWlldCkKLQotICAgIEBjbGFzc21ldGhvZAotICAgIGRlZiBidWlsZF93ZWJraXQo
Y2xzLCBxdWlldD1GYWxzZSwgcG9ydD1XZWJLaXRQb3J0KToKLSAgICAgICAgbG9nKCJCdWlsZGlu
ZyBXZWJLaXQiKQotICAgICAgICBjbHMucnVuX2FuZF90aHJvd19pZl9mYWlsKHBvcnQuYnVpbGRf
d2Via2l0X2NvbW1hbmQoKSwgcXVpZXQpCi0KLSAgICBAc3RhdGljbWV0aG9kCi0gICAgZGVmIGVu
c3VyZV9idWlsZGVyc19hcmVfZ3JlZW4oYnVpbGRib3QsIG9wdGlvbnMpOgotICAgICAgICBpZiBu
b3Qgb3B0aW9ucy5jaGVja19idWlsZGVycyBvciBidWlsZGJvdC5jb3JlX2J1aWxkZXJzX2FyZV9n
cmVlbigpOgotICAgICAgICAgICAgcmV0dXJuCi0gICAgICAgIGVycm9yKCJCdWlsZGVycyBhdCAl
cyBhcmUgcmVkLCBwbGVhc2UgZG8gbm90IGNvbW1pdC4gIFBhc3MgLS1pZ25vcmUtYnVpbGRlcnMg
dG8gYnlwYXNzIHRoaXMgY2hlY2suIiAlIChidWlsZGJvdC5idWlsZGJvdF9ob3N0KSkKLQotICAg
IEBjbGFzc21ldGhvZAotICAgIGRlZiBydW5fd2Via2l0X3Rlc3RzKGNscywgbGF1bmNoX3NhZmFy
aSwgZmFpbF9mYXN0PUZhbHNlLCBxdWlldD1GYWxzZSwgcG9ydD1XZWJLaXRQb3J0KToKLSAgICAg
ICAgYXJncyA9IHBvcnQucnVuX3dlYmtpdF90ZXN0c19jb21tYW5kKCkKLSAgICAgICAgaWYgbm90
IGxhdW5jaF9zYWZhcmk6Ci0gICAgICAgICAgICBhcmdzLmFwcGVuZCgiLS1uby1sYXVuY2gtc2Fm
YXJpIikKLSAgICAgICAgaWYgcXVpZXQ6Ci0gICAgICAgICAgICBhcmdzLmFwcGVuZCgiLS1xdWll
dCIpCi0gICAgICAgIGlmIGZhaWxfZmFzdDoKLSAgICAgICAgICAgIGFyZ3MuYXBwZW5kKCItLWV4
aXQtYWZ0ZXItbi1mYWlsdXJlcz0xIikKLSAgICAgICAgY2xzLnJ1bl9hbmRfdGhyb3dfaWZfZmFp
bChhcmdzKQotCi0gICAgQHN0YXRpY21ldGhvZAotICAgIGRlZiBwcmVwYXJlX2NsZWFuX3dvcmtp
bmdfZGlyZWN0b3J5KHNjbSwgb3B0aW9ucywgYWxsb3dfbG9jYWxfY29tbWl0cz1GYWxzZSk6Ci0g
ICAgICAgIG9zLmNoZGlyKHNjbS5jaGVja291dF9yb290KQotICAgICAgICBpZiBub3QgYWxsb3df
bG9jYWxfY29tbWl0czoKLSAgICAgICAgICAgIHNjbS5lbnN1cmVfbm9fbG9jYWxfY29tbWl0cyhv
cHRpb25zLmZvcmNlX2NsZWFuKQotICAgICAgICBpZiBvcHRpb25zLmNsZWFuOgotICAgICAgICAg
ICAgc2NtLmVuc3VyZV9jbGVhbl93b3JraW5nX2RpcmVjdG9yeShmb3JjZV9jbGVhbj1vcHRpb25z
LmZvcmNlX2NsZWFuKQotCi0gICAgQGNsYXNzbWV0aG9kCi0gICAgZGVmIGJ1aWxkX2FuZF9jb21t
aXQoY2xzLCBzY20sIG9wdGlvbnMpOgotICAgICAgICBwb3J0ID0gV2ViS2l0UG9ydC5nZXRfcG9y
dChvcHRpb25zKQotICAgICAgICBpZiBvcHRpb25zLmJ1aWxkOgotICAgICAgICAgICAgY2xzLmJ1
aWxkX3dlYmtpdChxdWlldD1vcHRpb25zLnF1aWV0LCBwb3J0PXBvcnQpCi0gICAgICAgICAgICBp
ZiBvcHRpb25zLnRlc3Q6Ci0gICAgICAgICAgICAgICAgIyBXaGVuIHJ1bm5pbmcgdGhlIGNvbW1p
dC1xdWV1ZSB3ZSBkb24ndCB3YW50IHRvIGxhdW5jaCBTYWZhcmkgYW5kIHdlIHdhbnQgdG8gZXhp
dCBhZnRlciB0aGUgZmlyc3QgZmFpbHVyZS4KLSAgICAgICAgICAgICAgICBjbHMucnVuX3dlYmtp
dF90ZXN0cyhsYXVuY2hfc2FmYXJpPW5vdCBvcHRpb25zLm5vbl9pbnRlcmFjdGl2ZSwgZmFpbF9m
YXN0PW9wdGlvbnMubm9uX2ludGVyYWN0aXZlLCBxdWlldD1vcHRpb25zLnF1aWV0LCBwb3J0PXBv
cnQpCi0gICAgICAgIGNvbW1pdF9tZXNzYWdlID0gY29tbWl0X21lc3NhZ2VfZm9yX3RoaXNfY29t
bWl0KHNjbSkKLSAgICAgICAgY29tbWl0X2xvZyA9IHNjbS5jb21taXRfd2l0aF9tZXNzYWdlKGNv
bW1pdF9tZXNzYWdlLm1lc3NhZ2UoKSkKLSAgICAgICAgcmV0dXJuIGJ1Z19jb21tZW50X2Zyb21f
Y29tbWl0X3RleHQoc2NtLCBjb21taXRfbG9nKQorY2xhc3MgTGFuZERpZmZMYW5kaW5nU2VxdWVu
Y2UoQ29uZGl0aW9uYWxMYW5kaW5nU2VxdWVuY2UpOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBw
YXRjaCwgb3B0aW9ucywgdG9vbCk6CisgICAgICAgIENvbmRpdGlvbmFsTGFuZGluZ1NlcXVlbmNl
Ll9faW5pdF9fKHNlbGYsIHBhdGNoLCBvcHRpb25zLCB0b29sKQogCi0gICAgQGNsYXNzbWV0aG9k
Ci0gICAgZGVmIF9jbG9zZV9idWdfaWZfbm9fYWN0aXZlX3BhdGNoZXMoY2xzLCBidWdzLCBidWdf
aWQpOgotICAgICAgICAjIENoZWNrIHRvIG1ha2Ugc3VyZSB0aGVyZSBhcmUgbm8gcj8gb3Igcisg
cGF0Y2hlcyBvbiB0aGUgYnVnIGJlZm9yZSBjbG9zaW5nLgotICAgICAgICAjIEFzc3VtZSB0aGF0
IHItIHBhdGNoZXMgYXJlIGp1c3QgcHJldmlvdXMgcGF0Y2hlcyBzb21lb25lIGZvcmdvdCB0byBv
YnNvbGV0ZS4KLSAgICAgICAgcGF0Y2hlcyA9IGJ1Z3MuZmV0Y2hfcGF0Y2hlc19mcm9tX2J1Zyhi
dWdfaWQpCi0gICAgICAgIGZvciBwYXRjaCBpbiBwYXRjaGVzOgotICAgICAgICAgICAgcmV2aWV3
X2ZsYWcgPSBwYXRjaC5nZXQoInJldmlldyIpCi0gICAgICAgICAgICBpZiByZXZpZXdfZmxhZyA9
PSAiPyIgb3IgcmV2aWV3X2ZsYWcgPT0gIisiOgotICAgICAgICAgICAgICAgIGxvZygiTm90IGNs
b3NpbmcgYnVnICVzIGFzIGF0dGFjaG1lbnQgJXMgaGFzIHJldmlldz0lcy4gIEFzc3VtaW5nIHRo
ZXJlIGFyZSBtb3JlIHBhdGNoZXMgdG8gbGFuZCBmcm9tIHRoaXMgYnVnLiIgJSAocGF0Y2hbImJ1
Z19pZCJdLCBwYXRjaFsiaWQiXSwgcmV2aWV3X2ZsYWcpKQotICAgICAgICAgICAgICAgIHJldHVy
bgotICAgICAgICBidWdzLmNsb3NlX2J1Z19hc19maXhlZChidWdfaWQsICJBbGwgcmV2aWV3ZWQg
cGF0Y2hlcyBoYXZlIGJlZW4gbGFuZGVkLiAgQ2xvc2luZyBidWcuIikKKyAgICBkZWYgdXBkYXRl
KHNlbGYpOgorICAgICAgICBwYXNzCiAKLSAgICBAY2xhc3NtZXRob2QKLSAgICBkZWYgX2xhbmRf
cGF0Y2goY2xzLCBwYXRjaCwgb3B0aW9ucywgdG9vbCk6Ci0gICAgICAgIHRvb2wuc2NtKCkudXBk
YXRlX3dlYmtpdCgpICMgVXBkYXRlIGJlZm9yZSBldmVyeSBwYXRjaCBpbiBjYXNlIHRoZSB0cmVl
IGhhcyBjaGFuZ2VkCi0gICAgICAgIGxvZygiQXBwbHlpbmcgcGF0Y2ggJXMgZnJvbSBidWcgJXMu
IiAlIChwYXRjaFsiaWQiXSwgcGF0Y2hbImJ1Z19pZCJdKSkKLSAgICAgICAgdG9vbC5zY20oKS5h
cHBseV9wYXRjaChwYXRjaCwgZm9yY2U9b3B0aW9ucy5ub25faW50ZXJhY3RpdmUpCisgICAgZGVm
IGFwcGx5X3BhdGNoKHNlbGYpOgorICAgICAgICBwYXNzCiAKLSAgICAgICAgIyBNYWtlIHN1cmUg
dGhlIHRyZWUgaXMgc3RpbGwgZ3JlZW4gYWZ0ZXIgdXBkYXRpbmcsIGJlZm9yZSBidWlsZGluZyB0
aGlzIHBhdGNoLgotICAgICAgICAjIFRoZSBmaXJzdCBwYXRjaCBlbmRzIHVwIGNoZWNraW5nIHRy
ZWUgc3RhdHVzIHR3aWNlLCBidXQgdGhhdCdzIE9LLgotICAgICAgICBXZWJLaXRMYW5kaW5nU2Ny
aXB0cy5lbnN1cmVfYnVpbGRlcnNfYXJlX2dyZWVuKHRvb2wuYnVpbGRib3QsIG9wdGlvbnMpCi0g
ICAgICAgIGNvbW1lbnRfdGV4dCA9IFdlYktpdExhbmRpbmdTY3JpcHRzLmJ1aWxkX2FuZF9jb21t
aXQodG9vbC5zY20oKSwgb3B0aW9ucykKLSAgICAgICAgdG9vbC5idWdzLmNsZWFyX2F0dGFjaG1l
bnRfZmxhZ3MocGF0Y2hbImlkIl0sIGNvbW1lbnRfdGV4dCkKKyAgICBkZWYgY2xvc2VfcGF0Y2go
c2VsZiwgY29tbWl0X2xvZyk6CisgICAgICAgIHNlbGYuX2NvbW1lbnRfdGVzdCA9IGJ1Z19jb21t
ZW50X2Zyb21fY29tbWl0X3RleHQoc2VsZi5fdG9vbC5zY20oKSwgY29tbWl0X2xvZykKKyAgICAg
ICAgIyBUaGVyZSBpcyBubyBwYXRjaCB0byBjbG9zZS4KIAotICAgIEBjbGFzc21ldGhvZAotICAg
IGRlZiBsYW5kX3BhdGNoX2FuZF9oYW5kbGVfZXJyb3JzKGNscywgcGF0Y2gsIG9wdGlvbnMsIHRv
b2wpOgotICAgICAgICB0cnk6Ci0gICAgICAgICAgICBjbHMuX2xhbmRfcGF0Y2gocGF0Y2gsIG9w
dGlvbnMsIHRvb2wpCi0gICAgICAgICAgICBpZiBvcHRpb25zLmNsb3NlX2J1ZzoKLSAgICAgICAg
ICAgICAgICBjbHMuX2Nsb3NlX2J1Z19pZl9ub19hY3RpdmVfcGF0Y2hlcyh0b29sLmJ1Z3MsIHBh
dGNoWyJidWdfaWQiXSkKLSAgICAgICAgZXhjZXB0IENoZWNrb3V0TmVlZHNVcGRhdGUsIGU6Ci0g
ICAgICAgICAgICBsb2coIkNvbW1pdCBmYWlsZWQgYmVjYXVzZSB0aGUgY2hlY2tvdXQgaXMgb3V0
IG9mIGRhdGUuICBQbGVhc2UgdXBkYXRlIGFuZCB0cnkgYWdhaW4uIikKLSAgICAgICAgICAgIGxv
ZygiWW91IGNhbiBwYXNzIC0tbm8tYnVpbGQgdG8gc2tpcCBidWlsZGluZy90ZXN0aW5nIGFmdGVy
IHVwZGF0ZSBpZiB5b3UgYmVsaWV2ZSB0aGUgbmV3IGNvbW1pdHMgZGlkIG5vdCBhZmZlY3QgdGhl
IHJlc3VsdHMuIikKLSAgICAgICAgICAgIFdvcmtRdWV1ZS5leGl0X2FmdGVyX2hhbmRsZWRfZXJy
b3IoZSkKLSAgICAgICAgZXhjZXB0IFNjcmlwdEVycm9yLCBlOgotICAgICAgICAgICAgIyBNYXJr
IHRoZSBwYXRjaCBhcyBjb21taXQtcXVldWUtIGFuZCBjb21tZW50IGluIHRoZSBidWcuCi0gICAg
ICAgICAgICB0b29sLmJ1Z3MucmVqZWN0X3BhdGNoX2Zyb21fY29tbWl0X3F1ZXVlKHBhdGNoWyJp
ZCJdLCBlLm1lc3NhZ2Vfd2l0aF9vdXRwdXQoKSkKLSAgICAgICAgICAgIFdvcmtRdWV1ZS5leGl0
X2FmdGVyX2hhbmRsZWRfZXJyb3IoZSkKKyAgICBkZWYgY2xvc2VfYnVnKHNlbGYpOgorICAgICAg
ICBidWdfaWQgPSBzZWxmLl9wYXRjaFsiYnVnX2lkIl0KKyAgICAgICAgaWYgYnVnX2lkOgorICAg
ICAgICAgICAgbG9nKCJVcGRhdGluZyBidWcgJXMiICUgYnVnX2lkKQorICAgICAgICAgICAgaWYg
c2VsZi5fb3B0aW9ucy5jbG9zZV9idWc6CisgICAgICAgICAgICAgICAgc2VsZi5fdG9vbC5idWdz
LmNsb3NlX2J1Z19hc19maXhlZChidWdfaWQsIHNlbGYuX2NvbW1lbnRfdGVzdCkKKyAgICAgICAg
ICAgIGVsc2U6CisgICAgICAgICAgICAgICAgIyBGSVhNRTogV2Ugc2hvdWxkIGEgc21hcnQgd2F5
IHRvIGZpZ3VyZSBvdXQgaWYgdGhlIHBhdGNoIGlzIGF0dGFjaGVkCisgICAgICAgICAgICAgICAg
IyB0byB0aGUgYnVnLCBhbmQgaWYgc28gb2Jzb2xldGUgaXQuCisgICAgICAgICAgICAgICAgc2Vs
Zi5fdG9vbC5idWdzLnBvc3RfY29tbWVudF90b19idWcoYnVnX2lkLCBzZWxmLl9jb21tZW50X3Rl
c3QpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBsb2coc2VsZi5fY29tbWVudF90ZXN0KQor
ICAgICAgICAgICAgbG9nKCJObyBidWcgaWQgcHJvdmlkZWQuIikKIAogCiBjbGFzcyBMYW5kRGlm
ZihDb21tYW5kKToKQEAgLTM3MiwxOCArMjQ4LDEzIEBAIGNsYXNzIExhbmREaWZmKENvbW1hbmQp
OgogICAgICAgICBvcy5jaGRpcih0b29sLnNjbSgpLmNoZWNrb3V0X3Jvb3QpCiAgICAgICAgIHNl
bGYudXBkYXRlX2NoYW5nZWxvZ3Nfd2l0aF9yZXZpZXdlcihvcHRpb25zLnJldmlld2VyLCBidWdf
aWQsIHRvb2wpCiAKLSAgICAgICAgY29tbWVudF90ZXh0ID0gV2ViS2l0TGFuZGluZ1NjcmlwdHMu
YnVpbGRfYW5kX2NvbW1pdCh0b29sLnNjbSgpLCBvcHRpb25zKQotICAgICAgICBpZiBidWdfaWQ6
Ci0gICAgICAgICAgICBsb2coIlVwZGF0aW5nIGJ1ZyAlcyIgJSBidWdfaWQpCi0gICAgICAgICAg
ICBpZiBvcHRpb25zLmNsb3NlX2J1ZzoKLSAgICAgICAgICAgICAgICB0b29sLmJ1Z3MuY2xvc2Vf
YnVnX2FzX2ZpeGVkKGJ1Z19pZCwgY29tbWVudF90ZXh0KQotICAgICAgICAgICAgZWxzZToKLSAg
ICAgICAgICAgICAgICAjIEZJWE1FOiBXZSBzaG91bGQgYSBzbWFydCB3YXkgdG8gZmlndXJlIG91
dCBpZiB0aGUgcGF0Y2ggaXMgYXR0YWNoZWQKLSAgICAgICAgICAgICAgICAjIHRvIHRoZSBidWcs
IGFuZCBpZiBzbyBvYnNvbGV0ZSBpdC4KLSAgICAgICAgICAgICAgICB0b29sLmJ1Z3MucG9zdF9j
b21tZW50X3RvX2J1ZyhidWdfaWQsIGNvbW1lbnRfdGV4dCkKLSAgICAgICAgZWxzZToKLSAgICAg
ICAgICAgIGxvZyhjb21tZW50X3RleHQpCi0gICAgICAgICAgICBsb2coIk5vIGJ1ZyBpZCBwcm92
aWRlZC4iKQorICAgICAgICBmYWtlX3BhdGNoID0geworICAgICAgICAgICAgImlkIjogTm9uZSwK
KyAgICAgICAgICAgICJidWdfaWQiOiBidWdfaWQKKyAgICAgICAgfQorCisgICAgICAgIHNlcXVl
bmNlID0gTGFuZERpZmZMYW5kaW5nU2VxdWVuY2UoZmFrZV9wYXRjaCwgb3B0aW9ucywgdG9vbCkK
KyAgICAgICAgc2VxdWVuY2UucnVuKCkKIAogCiBjbGFzcyBBYnN0cmFjdFBhdGNoUHJvY2Vzc2lu
Z0NvbW1hbmQoQ29tbWFuZCk6CkBAIC00MzAsOCArMzAxLDggQEAgY2xhc3MgQWJzdHJhY3RQYXRj
aExhbmRpbmdDb21tYW5kKEFic3RyYWN0UGF0Y2hQcm9jZXNzaW5nQ29tbWFuZCk6CiAgICAgICAg
IFdlYktpdExhbmRpbmdTY3JpcHRzLnByZXBhcmVfY2xlYW5fd29ya2luZ19kaXJlY3RvcnkodG9v
bC5zY20oKSwgb3B0aW9ucykKIAogICAgIGRlZiBfcHJvY2Vzc19wYXRjaChzZWxmLCBwYXRjaCwg
b3B0aW9ucywgYXJncywgdG9vbCk6Ci0gICAgICAgIFdlYktpdExhbmRpbmdTY3JpcHRzLmxhbmRf
cGF0Y2hfYW5kX2hhbmRsZV9lcnJvcnMocGF0Y2gsIG9wdGlvbnMsIHRvb2wpCi0KKyAgICAgICAg
c2VxdWVuY2UgPSBDb25kaXRpb25hbExhbmRpbmdTZXF1ZW5jZShwYXRjaCwgb3B0aW9ucywgdG9v
bCkKKyAgICAgICAgc2VxdWVuY2UucnVuX2FuZF9oYW5kbGVfZXJyb3JzKCkKIAogY2xhc3MgTGFu
ZEF0dGFjaG1lbnQoQWJzdHJhY3RQYXRjaExhbmRpbmdDb21tYW5kKToKICAgICBkZWYgX19pbml0
X18oc2VsZik6CmRpZmYgLS1naXQgYS9XZWJLaXRUb29scy9TY3JpcHRzL21vZHVsZXMvbGFuZGlu
Z3NlcXVlbmNlLnB5IGIvV2ViS2l0VG9vbHMvU2NyaXB0cy9tb2R1bGVzL2xhbmRpbmdzZXF1ZW5j
ZS5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xYWNlMTIzCi0tLSAvZGV2
L251bGwKKysrIGIvV2ViS2l0VG9vbHMvU2NyaXB0cy9tb2R1bGVzL2xhbmRpbmdzZXF1ZW5jZS5w
eQpAQCAtMCwwICsxLDExOCBAQAorIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCisjIENvcHlyaWdodCAo
YykgMjAwOSwgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMgQ29weXJpZ2h0IChj
KSAyMDA5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisj
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucyBhcmUKKyMgbWV0OgorIyAKKyMgICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorIyAgICAg
KiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
CisjIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIKKyMgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorIyBkaXN0cmlidXRpb24uCisjICAgICAqIE5laXRo
ZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyMgY29udHJp
YnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVk
IGZyb20KKyMgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVy
bWlzc2lvbi4KKyMgCisjIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdI
VCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyMgIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyMgTElNSVRFRCBUTywgVEhF
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisj
IEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBU
SEUgQ09QWVJJR0hUCisjIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorIyBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisjIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAor
IyBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkKKyMgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorIyAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyMgT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KKworZnJvbSBtb2R1bGVzLmNvbW1lbnRzIGltcG9ydCBidWdfY29tbWVudF9mcm9tX2NvbW1p
dF90ZXh0Citmcm9tIG1vZHVsZXMubG9nZ2luZyBpbXBvcnQgbG9nCitmcm9tIG1vZHVsZXMuc2Nt
IGltcG9ydCBTY3JpcHRFcnJvciwgQ2hlY2tvdXROZWVkc1VwZGF0ZQorZnJvbSBtb2R1bGVzLndl
YmtpdGxhbmRpbmdzY3JpcHRzIGltcG9ydCBXZWJLaXRMYW5kaW5nU2NyaXB0cywgY29tbWl0X21l
c3NhZ2VfZm9yX3RoaXNfY29tbWl0Citmcm9tIG1vZHVsZXMud2Via2l0cG9ydCBpbXBvcnQgV2Vi
S2l0UG9ydAorZnJvbSBtb2R1bGVzLndvcmtxdWV1ZSBpbXBvcnQgV29ya1F1ZXVlCisKK2NsYXNz
IExhbmRpbmdTZXF1ZW5jZToKKyAgICBkZWYgX19pbml0X18oc2VsZiwgcGF0Y2gsIG9wdGlvbnMs
IHRvb2wpOgorICAgICAgICBzZWxmLl9wYXRjaCA9IHBhdGNoCisgICAgICAgIHNlbGYuX29wdGlv
bnMgPSBvcHRpb25zCisgICAgICAgIHNlbGYuX3Rvb2wgPSB0b29sCisgICAgICAgIHNlbGYuX3Bv
cnQgPSBXZWJLaXRQb3J0LmdldF9wb3J0KHNlbGYuX29wdGlvbnMpCisKKyAgICBkZWYgcnVuKHNl
bGYpOgorICAgICAgICBzZWxmLnVwZGF0ZSgpCisgICAgICAgIHNlbGYuYXBwbHlfcGF0Y2goKQor
ICAgICAgICBzZWxmLmJ1aWxkKCkKKyAgICAgICAgc2VsZi50ZXN0KCkKKyAgICAgICAgY29tbWl0
X2xvZyA9IHNlbGYuY29tbWl0KCkKKyAgICAgICAgc2VsZi5jbG9zZV9wYXRjaChjb21taXRfbG9n
KQorICAgICAgICBzZWxmLmNsb3NlX2J1ZygpCisKKyAgICBkZWYgcnVuX2FuZF9oYW5kbGVfZXJy
b3JzKHNlbGYpOgorICAgICAgICB0cnk6CisgICAgICAgICAgICBzZWxmLnJ1bigpCisgICAgICAg
IGV4Y2VwdCBDaGVja291dE5lZWRzVXBkYXRlLCBlOgorICAgICAgICAgICAgbG9nKCJDb21taXQg
ZmFpbGVkIGJlY2F1c2UgdGhlIGNoZWNrb3V0IGlzIG91dCBvZiBkYXRlLiAgUGxlYXNlIHVwZGF0
ZSBhbmQgdHJ5IGFnYWluLiIpCisgICAgICAgICAgICBsb2coIllvdSBjYW4gcGFzcyAtLW5vLWJ1
aWxkIHRvIHNraXAgYnVpbGRpbmcvdGVzdGluZyBhZnRlciB1cGRhdGUgaWYgeW91IGJlbGlldmUg
dGhlIG5ldyBjb21taXRzIGRpZCBub3QgYWZmZWN0IHRoZSByZXN1bHRzLiIpCisgICAgICAgICAg
ICBXb3JrUXVldWUuZXhpdF9hZnRlcl9oYW5kbGVkX2Vycm9yKGUpCisgICAgICAgIGV4Y2VwdCBT
Y3JpcHRFcnJvciwgZToKKyAgICAgICAgICAgICMgTWFyayB0aGUgcGF0Y2ggYXMgY29tbWl0LXF1
ZXVlLSBhbmQgY29tbWVudCBpbiB0aGUgYnVnLgorICAgICAgICAgICAgc2VsZi5fdG9vbC5idWdz
LnJlamVjdF9wYXRjaF9mcm9tX2NvbW1pdF9xdWV1ZShzZWxmLl9wYXRjaFsiaWQiXSwgZS5tZXNz
YWdlX3dpdGhfb3V0cHV0KCkpCisgICAgICAgICAgICBXb3JrUXVldWUuZXhpdF9hZnRlcl9oYW5k
bGVkX2Vycm9yKGUpCisKKyAgICBkZWYgdXBkYXRlKHNlbGYpOgorICAgICAgICBzZWxmLl90b29s
LnNjbSgpLnVwZGF0ZV93ZWJraXQoKQorCisgICAgZGVmIGFwcGx5X3BhdGNoKHNlbGYpOgorICAg
ICAgICBsb2coIlByb2Nlc3NpbmcgcGF0Y2ggJXMgZnJvbSBidWcgJXMuIiAlIChzZWxmLl9wYXRj
aFsiaWQiXSwgc2VsZi5fcGF0Y2hbImJ1Z19pZCJdKSkKKyAgICAgICAgc2VsZi5fdG9vbC5zY20o
KS5hcHBseV9wYXRjaChzZWxmLl9wYXRjaCwgZm9yY2U9c2VsZi5fb3B0aW9ucy5ub25faW50ZXJh
Y3RpdmUpCisKKyAgICBkZWYgYnVpbGQoc2VsZik6CisgICAgICAgICMgTWFrZSBzdXJlIHRoZSB0
cmVlIGlzIHN0aWxsIGdyZWVuIGFmdGVyIHVwZGF0aW5nLCBiZWZvcmUgYnVpbGRpbmcgdGhpcyBw
YXRjaC4KKyAgICAgICAgIyBUaGUgZmlyc3QgcGF0Y2ggZW5kcyB1cCBjaGVja2luZyB0cmVlIHN0
YXR1cyB0d2ljZSwgYnV0IHRoYXQncyBPSy4KKyAgICAgICAgV2ViS2l0TGFuZGluZ1NjcmlwdHMu
ZW5zdXJlX2J1aWxkZXJzX2FyZV9ncmVlbihzZWxmLl90b29sLmJ1aWxkYm90LCBzZWxmLl9vcHRp
b25zKQorICAgICAgICBXZWJLaXRMYW5kaW5nU2NyaXB0cy5idWlsZF93ZWJraXQocXVpZXQ9c2Vs
Zi5fb3B0aW9ucy5xdWlldCwgcG9ydD1zZWxmLl9wb3J0KQorCisgICAgZGVmIHRlc3Qoc2VsZik6
CisgICAgICAgICMgV2hlbiBydW5uaW5nIG5vbi1pbnRlcmFjdGl2ZWx5IHdlIGRvbid0IHdhbnQg
dG8gbGF1bmNoIFNhZmFyaSBhbmQgd2Ugd2FudCB0byBleGl0IGFmdGVyIHRoZSBmaXJzdCBmYWls
dXJlLgorICAgICAgICBXZWJLaXRTY3JpcHRzLnJ1bl93ZWJraXRfdGVzdHMobGF1bmNoX3NhZmFy
aT1ub3Qgb3B0aW9ucy5ub25faW50ZXJhY3RpdmUsIGZhaWxfZmFzdD1vcHRpb25zLm5vbl9pbnRl
cmFjdGl2ZSwgcXVpZXQ9b3B0aW9ucy5xdWlldCwgcG9ydD1wb3J0KQorCisgICAgZGVmIGNvbW1p
dChzZWxmKToKKyAgICAgICAgY29tbWl0X21lc3NhZ2UgPSBjb21taXRfbWVzc2FnZV9mb3JfdGhp
c19jb21taXQoc2VsZi5fdG9vbC5zY20oKSkKKyAgICAgICAgcmV0dXJuIHNlbGYuX3Rvb2wuc2Nt
KCkuY29tbWl0X3dpdGhfbWVzc2FnZShjb21taXRfbWVzc2FnZS5tZXNzYWdlKCkpCisKKyAgICBk
ZWYgY2xvc2VfcGF0Y2goc2VsZiwgY29tbWl0X2xvZyk6CisgICAgICAgIGNvbW1lbnRfdGV4dCA9
IGJ1Z19jb21tZW50X2Zyb21fY29tbWl0X3RleHQoc2VsZi5fdG9vbC5zY20oKSwgY29tbWl0X2xv
ZykKKyAgICAgICAgc2VsZi5fdG9vbC5idWdzLmNsZWFyX2F0dGFjaG1lbnRfZmxhZ3Moc2VsZi5f
cGF0Y2hbImlkIl0sIGNvbW1lbnRfdGV4dCkKKworICAgIGRlZiBjbG9zZV9idWcoc2VsZik6Cisg
ICAgICAgICMgQ2hlY2sgdG8gbWFrZSBzdXJlIHRoZXJlIGFyZSBubyByPyBvciByKyBwYXRjaGVz
IG9uIHRoZSBidWcgYmVmb3JlIGNsb3NpbmcuCisgICAgICAgICMgQXNzdW1lIHRoYXQgci0gcGF0
Y2hlcyBhcmUganVzdCBwcmV2aW91cyBwYXRjaGVzIHNvbWVvbmUgZm9yZ290IHRvIG9ic29sZXRl
LgorICAgICAgICBwYXRjaGVzID0gc2VsZi5fdG9vbC5idWdzLmZldGNoX3BhdGNoZXNfZnJvbV9i
dWcoc2VsZi5fcGF0Y2hbImJ1Z19pZCJdKQorICAgICAgICBmb3IgcGF0Y2ggaW4gcGF0Y2hlczoK
KyAgICAgICAgICAgIHJldmlld19mbGFnID0gcGF0Y2guZ2V0KCJyZXZpZXciKQorICAgICAgICAg
ICAgaWYgcmV2aWV3X2ZsYWcgPT0gIj8iIG9yIHJldmlld19mbGFnID09ICIrIjoKKyAgICAgICAg
ICAgICAgICBsb2coIk5vdCBjbG9zaW5nIGJ1ZyAlcyBhcyBhdHRhY2htZW50ICVzIGhhcyByZXZp
ZXc9JXMuICBBc3N1bWluZyB0aGVyZSBhcmUgbW9yZSBwYXRjaGVzIHRvIGxhbmQgZnJvbSB0aGlz
IGJ1Zy4iICUgKHBhdGNoWyJidWdfaWQiXSwgcGF0Y2hbImlkIl0sIHJldmlld19mbGFnKSkKKyAg
ICAgICAgICAgICAgICByZXR1cm4KKyAgICAgICAgc2VsZi5fdG9vbC5idWdzLmNsb3NlX2J1Z19h
c19maXhlZChzZWxmLl9wYXRjaFsiYnVnX2lkIl0sICJBbGwgcmV2aWV3ZWQgcGF0Y2hlcyBoYXZl
IGJlZW4gbGFuZGVkLiAgQ2xvc2luZyBidWcuIikKKworCitjbGFzcyBDb25kaXRpb25hbExhbmRp
bmdTZXF1ZW5jZShMYW5kaW5nU2VxdWVuY2UpOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBwYXRj
aCwgb3B0aW9ucywgdG9vbCk6CisgICAgICAgIExhbmRpbmdTZXF1ZW5jZS5fX2luaXRfXyhzZWxm
LCBwYXRjaCwgb3B0aW9ucywgdG9vbCkKKworICAgIGRlZiBidWlsZChzZWxmKToKKyAgICAgICAg
aWYgc2VsZi5fb3B0aW9ucy5idWlsZDoKKyAgICAgICAgICAgIExhbmRpbmdTZXF1ZW5jZS5idWls
ZChzZWxmKQorCisgICAgZGVmIHRlc3Qoc2VsZik6CisgICAgICAgIGlmIHNlbGYuX29wdGlvbnMu
YnVpbGQgYW5kIHNlbGYuX29wdGlvbnMudGVzdDoKKyAgICAgICAgICAgIExhbmRpbmdTZXF1ZW5j
ZS50ZXN0KHNlbGYpCisKKyAgICBkZWYgY2xvc2VfYnVnKHNlbGYpOgorICAgICAgICBpZiBzZWxm
Ll9vcHRpb25zLmNsb3NlX2J1ZzoKKyAgICAgICAgICAgIExhbmRpbmdTZXF1ZW5jZS5jbG9zZV9i
dWcoc2VsZikKKwpkaWZmIC0tZ2l0IGEvV2ViS2l0VG9vbHMvU2NyaXB0cy9tb2R1bGVzL3dlYmtp
dGxhbmRpbmdzY3JpcHRzLnB5IGIvV2ViS2l0VG9vbHMvU2NyaXB0cy9tb2R1bGVzL3dlYmtpdGxh
bmRpbmdzY3JpcHRzLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJmY2E5
MGEKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJLaXRUb29scy9TY3JpcHRzL21vZHVsZXMvd2Via2l0
bGFuZGluZ3NjcmlwdHMucHkKQEAgLTAsMCArMSwxNDMgQEAKKyMhL3Vzci9iaW4vZW52IHB5dGhv
bgorIyBDb3B5cmlnaHQgKGMpIDIwMDksIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisjIENvcHlyaWdodCAoYykgMjAwOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisj
CisjIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisjIG1ldDoKKyMgCisjICAgICAqIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisjIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyMgICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZQorIyBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisjIGluIHRoZSBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyMgZGlzdHJpYnV0aW9u
LgorIyAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMg
b2YgaXRzCisjIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUg
cHJvZHVjdHMgZGVyaXZlZCBmcm9tCisjIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBw
cmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisjIAorIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisjICJBUyBJUyIgQU5E
IEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisj
IExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUgorIyBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorIyBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyMgU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAor
IyBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwKKyMgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisjIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyMgKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFCisjIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCisKK2ltcG9ydCBvcworaW1wb3J0IFN0cmluZ0lPCitpbXBvcnQg
c3VicHJvY2VzcworaW1wb3J0IHN5cworCitmcm9tIG9wdHBhcnNlIGltcG9ydCBtYWtlX29wdGlv
bgorCitmcm9tIG1vZHVsZXMuY2hhbmdlbG9ncyBpbXBvcnQgQ2hhbmdlTG9nCitmcm9tIG1vZHVs
ZXMubG9nZ2luZyBpbXBvcnQgbG9nLCB0ZWUKK2Zyb20gbW9kdWxlcy5zY20gaW1wb3J0IENvbW1p
dE1lc3NhZ2UsIGRldGVjdF9zY21fc3lzdGVtLCBTY3JpcHRFcnJvciwgQ2hlY2tvdXROZWVkc1Vw
ZGF0ZQorZnJvbSBtb2R1bGVzLndlYmtpdHBvcnQgaW1wb3J0IFdlYktpdFBvcnQKKworZGVmIGNv
bW1pdF9tZXNzYWdlX2Zvcl90aGlzX2NvbW1pdChzY20pOgorICAgIGNoYW5nZWxvZ19wYXRocyA9
IHNjbS5tb2RpZmllZF9jaGFuZ2Vsb2dzKCkKKyAgICBpZiBub3QgbGVuKGNoYW5nZWxvZ19wYXRo
cyk6CisgICAgICAgIHJhaXNlIFNjcmlwdEVycm9yKG1lc3NhZ2U9IkZvdW5kIG5vIG1vZGlmaWVk
IENoYW5nZUxvZ3MsIGNhbm5vdCBjcmVhdGUgYSBjb21taXQgbWVzc2FnZS5cbiIKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgIkFsbCBjaGFuZ2VzIHJlcXVpcmUgYSBDaGFuZ2VMb2cuICBTZWU6
XG4iCisgICAgICAgICAgICAgICAgICAgICAgICAgICJodHRwOi8vd2Via2l0Lm9yZy9jb2Rpbmcv
Y29udHJpYnV0aW5nLmh0bWwiKQorCisgICAgY2hhbmdlbG9nX21lc3NhZ2VzID0gW10KKyAgICBm
b3IgY2hhbmdlbG9nX3BhdGggaW4gY2hhbmdlbG9nX3BhdGhzOgorICAgICAgICBsb2coIlBhcnNp
bmcgQ2hhbmdlTG9nOiAlcyIgJSBjaGFuZ2Vsb2dfcGF0aCkKKyAgICAgICAgY2hhbmdlbG9nX2Vu
dHJ5ID0gQ2hhbmdlTG9nKGNoYW5nZWxvZ19wYXRoKS5sYXRlc3RfZW50cnkoKQorICAgICAgICBp
ZiBub3QgY2hhbmdlbG9nX2VudHJ5OgorICAgICAgICAgICAgcmFpc2UgU2NyaXB0RXJyb3IobWVz
c2FnZT0iRmFpbGVkIHRvIHBhcnNlIENoYW5nZUxvZzogIiArIG9zLnBhdGguYWJzcGF0aChjaGFu
Z2Vsb2dfcGF0aCkpCisgICAgICAgIGNoYW5nZWxvZ19tZXNzYWdlcy5hcHBlbmQoY2hhbmdlbG9n
X2VudHJ5KQorCisgICAgIyBGSVhNRTogV2Ugc2hvdWxkIHNvcnQgYW5kIGxhYmVsIHRoZSBDaGFu
Z2VMb2cgbWVzc2FnZXMgbGlrZSBjb21taXQtbG9nLWVkaXRvciBkb2VzLgorICAgIHJldHVybiBD
b21taXRNZXNzYWdlKCIiLmpvaW4oY2hhbmdlbG9nX21lc3NhZ2VzKS5zcGxpdGxpbmVzKCkpCisK
KworY2xhc3MgV2ViS2l0TGFuZGluZ1NjcmlwdHM6CisgICAgQHN0YXRpY21ldGhvZAorICAgIGRl
ZiBjbGVhbmluZ19vcHRpb25zKCk6CisgICAgICAgIHJldHVybiBbCisgICAgICAgICAgICBtYWtl
X29wdGlvbigiLS1mb3JjZS1jbGVhbiIsIGFjdGlvbj0ic3RvcmVfdHJ1ZSIsIGRlc3Q9ImZvcmNl
X2NsZWFuIiwgZGVmYXVsdD1GYWxzZSwgaGVscD0iQ2xlYW4gd29ya2luZyBkaXJlY3RvcnkgYmVm
b3JlIGFwcGx5aW5nIHBhdGNoZXMgKHJlbW92ZXMgbG9jYWwgY2hhbmdlcyBhbmQgY29tbWl0cyki
KSwKKyAgICAgICAgICAgIG1ha2Vfb3B0aW9uKCItLW5vLWNsZWFuIiwgYWN0aW9uPSJzdG9yZV9m
YWxzZSIsIGRlc3Q9ImNsZWFuIiwgZGVmYXVsdD1UcnVlLCBoZWxwPSJEb24ndCBjaGVjayBpZiB0
aGUgd29ya2luZyBkaXJlY3RvcnkgaXMgY2xlYW4gYmVmb3JlIGFwcGx5aW5nIHBhdGNoZXMiKSwK
KyAgICAgICAgXQorCisgICAgQHN0YXRpY21ldGhvZAorICAgIGRlZiBsYW5kX29wdGlvbnMoKToK
KyAgICAgICAgcmV0dXJuIFsKKyAgICAgICAgICAgIG1ha2Vfb3B0aW9uKCItLWlnbm9yZS1idWls
ZGVycyIsIGFjdGlvbj0ic3RvcmVfZmFsc2UiLCBkZXN0PSJjaGVja19idWlsZGVycyIsIGRlZmF1
bHQ9VHJ1ZSwgaGVscD0iRG9uJ3QgY2hlY2sgdG8gc2VlIGlmIHRoZSBidWlsZC53ZWJraXQub3Jn
IGJ1aWxkZXJzIGFyZSBncmVlbiBiZWZvcmUgbGFuZGluZy4iKSwKKyAgICAgICAgICAgIG1ha2Vf
b3B0aW9uKCItLW5vLWNsb3NlIiwgYWN0aW9uPSJzdG9yZV9mYWxzZSIsIGRlc3Q9ImNsb3NlX2J1
ZyIsIGRlZmF1bHQ9VHJ1ZSwgaGVscD0iTGVhdmUgYnVnIG9wZW4gYWZ0ZXIgbGFuZGluZy4iKSwK
KyAgICAgICAgICAgIG1ha2Vfb3B0aW9uKCItLW5vLWJ1aWxkIiwgYWN0aW9uPSJzdG9yZV9mYWxz
ZSIsIGRlc3Q9ImJ1aWxkIiwgZGVmYXVsdD1UcnVlLCBoZWxwPSJDb21taXQgd2l0aG91dCBidWls
ZGluZyBmaXJzdCwgaW1wbGllcyAtLW5vLXRlc3QuIiksCisgICAgICAgICAgICBtYWtlX29wdGlv
bigiLS1uby10ZXN0IiwgYWN0aW9uPSJzdG9yZV9mYWxzZSIsIGRlc3Q9InRlc3QiLCBkZWZhdWx0
PVRydWUsIGhlbHA9IkNvbW1pdCB3aXRob3V0IHJ1bm5pbmcgcnVuLXdlYmtpdC10ZXN0cy4iKSwK
KyAgICAgICAgICAgIG1ha2Vfb3B0aW9uKCItLXF1aWV0IiwgYWN0aW9uPSJzdG9yZV90cnVlIiwg
ZGVzdD0icXVpZXQiLCBkZWZhdWx0PUZhbHNlLCBoZWxwPSJQcm9kdWNlIGxlc3MgY29uc29sZSBv
dXRwdXQuIiksCisgICAgICAgICAgICBtYWtlX29wdGlvbigiLS1ub24taW50ZXJhY3RpdmUiLCBh
Y3Rpb249InN0b3JlX3RydWUiLCBkZXN0PSJub25faW50ZXJhY3RpdmUiLCBkZWZhdWx0PUZhbHNl
LCBoZWxwPSJOZXZlciBwcm9tcHQgdGhlIHVzZXIsIGZhaWwgYXMgZmFzdCBhcyBwb3NzaWJsZS4i
KSwKKyAgICAgICAgXSArIFdlYktpdFBvcnQucG9ydF9vcHRpb25zKCkKKworICAgIEBzdGF0aWNt
ZXRob2QKKyAgICBkZWYgcnVuX2NvbW1hbmRfd2l0aF90ZWVkX291dHB1dChhcmdzLCB0ZWVkX291
dHB1dCk6CisgICAgICAgIGNoaWxkX3Byb2Nlc3MgPSBzdWJwcm9jZXNzLlBvcGVuKGFyZ3MsIHN0
ZG91dD1zdWJwcm9jZXNzLlBJUEUsIHN0ZGVycj1zdWJwcm9jZXNzLlNURE9VVCkKKworICAgICAg
ICAjIFVzZSBvdXIgb3duIGN1c3RvbSB3YWl0IGxvb3AgYmVjYXVzZSBQb3BlbiBpZ25vcmVzIGEg
dGVlJ2Qgc3RkZXJyL3N0ZG91dC4KKyAgICAgICAgIyBGSVhNRTogVGhpcyBjb3VsZCBiZSBpbXBy
b3ZlZCBub3QgdG8gZmxhdHRlbiBvdXRwdXQgdG8gc3Rkb3V0LgorICAgICAgICB3aGlsZSBUcnVl
OgorICAgICAgICAgICAgb3V0cHV0X2xpbmUgPSBjaGlsZF9wcm9jZXNzLnN0ZG91dC5yZWFkbGlu
ZSgpCisgICAgICAgICAgICBpZiBvdXRwdXRfbGluZSA9PSAiIiBhbmQgY2hpbGRfcHJvY2Vzcy5w
b2xsKCkgIT0gTm9uZToKKyAgICAgICAgICAgICAgICByZXR1cm4gY2hpbGRfcHJvY2Vzcy5wb2xs
KCkKKyAgICAgICAgICAgIHRlZWRfb3V0cHV0LndyaXRlKG91dHB1dF9saW5lKQorCisgICAgQHN0
YXRpY21ldGhvZAorICAgIGRlZiBydW5fYW5kX3Rocm93X2lmX2ZhaWwoYXJncywgcXVpZXQ9RmFs
c2UpOgorICAgICAgICAjIENhY2hlIHRoZSBjaGlsZCdzIG91dHB1dCBsb2NhbGx5IHNvIGl0IGNh
biBiZSB1c2VkIGZvciBlcnJvciByZXBvcnRzLgorICAgICAgICBjaGlsZF9vdXRfZmlsZSA9IFN0
cmluZ0lPLlN0cmluZ0lPKCkKKyAgICAgICAgaWYgcXVpZXQ6CisgICAgICAgICAgICBkZXZfbnVs
bCA9IG9wZW4ob3MuZGV2bnVsbCwgInciKQorICAgICAgICBjaGlsZF9zdGRvdXQgPSB0ZWUoY2hp
bGRfb3V0X2ZpbGUsIGRldl9udWxsIGlmIHF1aWV0IGVsc2Ugc3lzLnN0ZG91dCkKKyAgICAgICAg
ZXhpdF9jb2RlID0gV2ViS2l0TGFuZGluZ1NjcmlwdHMucnVuX2NvbW1hbmRfd2l0aF90ZWVkX291
dHB1dChhcmdzLCBjaGlsZF9zdGRvdXQpCisgICAgICAgIGlmIHF1aWV0OgorICAgICAgICAgICAg
ZGV2X251bGwuY2xvc2UoKQorCisgICAgICAgIGNoaWxkX291dHB1dCA9IGNoaWxkX291dF9maWxl
LmdldHZhbHVlKCkKKyAgICAgICAgY2hpbGRfb3V0X2ZpbGUuY2xvc2UoKQorCisgICAgICAgIGlm
IGV4aXRfY29kZToKKyAgICAgICAgICAgIHJhaXNlIFNjcmlwdEVycm9yKHNjcmlwdF9hcmdzPWFy
Z3MsIGV4aXRfY29kZT1leGl0X2NvZGUsIG91dHB1dD1jaGlsZF9vdXRwdXQpCisKKyAgICBAY2xh
c3NtZXRob2QKKyAgICBkZWYgcnVuX3dlYmtpdF9zY3JpcHQoY2xzLCBzY3JpcHRfbmFtZSwgcXVp
ZXQ9RmFsc2UsIHBvcnQ9V2ViS2l0UG9ydCk6CisgICAgICAgIGxvZygiUnVubmluZyAlcyIgJSBz
Y3JpcHRfbmFtZSkKKyAgICAgICAgY2xzLnJ1bl9hbmRfdGhyb3dfaWZfZmFpbChwb3J0LnNjcmlw
dF9wYXRoKHNjcmlwdF9uYW1lKSwgcXVpZXQpCisKKyAgICBAY2xhc3NtZXRob2QKKyAgICBkZWYg
YnVpbGRfd2Via2l0KGNscywgcXVpZXQ9RmFsc2UsIHBvcnQ9V2ViS2l0UG9ydCk6CisgICAgICAg
IGxvZygiQnVpbGRpbmcgV2ViS2l0IikKKyAgICAgICAgY2xzLnJ1bl9hbmRfdGhyb3dfaWZfZmFp
bChwb3J0LmJ1aWxkX3dlYmtpdF9jb21tYW5kKCksIHF1aWV0KQorCisgICAgQHN0YXRpY21ldGhv
ZAorICAgIGRlZiBlbnN1cmVfYnVpbGRlcnNfYXJlX2dyZWVuKGJ1aWxkYm90LCBvcHRpb25zKToK
KyAgICAgICAgaWYgbm90IG9wdGlvbnMuY2hlY2tfYnVpbGRlcnMgb3IgYnVpbGRib3QuY29yZV9i
dWlsZGVyc19hcmVfZ3JlZW4oKToKKyAgICAgICAgICAgIHJldHVybgorICAgICAgICBlcnJvcigi
QnVpbGRlcnMgYXQgJXMgYXJlIHJlZCwgcGxlYXNlIGRvIG5vdCBjb21taXQuICBQYXNzIC0taWdu
b3JlLWJ1aWxkZXJzIHRvIGJ5cGFzcyB0aGlzIGNoZWNrLiIgJSAoYnVpbGRib3QuYnVpbGRib3Rf
aG9zdCkpCisKKyAgICBAY2xhc3NtZXRob2QKKyAgICBkZWYgcnVuX3dlYmtpdF90ZXN0cyhjbHMs
IGxhdW5jaF9zYWZhcmksIGZhaWxfZmFzdD1GYWxzZSwgcXVpZXQ9RmFsc2UsIHBvcnQ9V2ViS2l0
UG9ydCk6CisgICAgICAgIGFyZ3MgPSBwb3J0LnJ1bl93ZWJraXRfdGVzdHNfY29tbWFuZCgpCisg
ICAgICAgIGlmIG5vdCBsYXVuY2hfc2FmYXJpOgorICAgICAgICAgICAgYXJncy5hcHBlbmQoIi0t
bm8tbGF1bmNoLXNhZmFyaSIpCisgICAgICAgIGlmIHF1aWV0OgorICAgICAgICAgICAgYXJncy5h
cHBlbmQoIi0tcXVpZXQiKQorICAgICAgICBpZiBmYWlsX2Zhc3Q6CisgICAgICAgICAgICBhcmdz
LmFwcGVuZCgiLS1leGl0LWFmdGVyLW4tZmFpbHVyZXM9MSIpCisgICAgICAgIGNscy5ydW5fYW5k
X3Rocm93X2lmX2ZhaWwoYXJncykKKworICAgIEBzdGF0aWNtZXRob2QKKyAgICBkZWYgcHJlcGFy
ZV9jbGVhbl93b3JraW5nX2RpcmVjdG9yeShzY20sIG9wdGlvbnMsIGFsbG93X2xvY2FsX2NvbW1p
dHM9RmFsc2UpOgorICAgICAgICBvcy5jaGRpcihzY20uY2hlY2tvdXRfcm9vdCkKKyAgICAgICAg
aWYgbm90IGFsbG93X2xvY2FsX2NvbW1pdHM6CisgICAgICAgICAgICBzY20uZW5zdXJlX25vX2xv
Y2FsX2NvbW1pdHMob3B0aW9ucy5mb3JjZV9jbGVhbikKKyAgICAgICAgaWYgb3B0aW9ucy5jbGVh
bjoKKyAgICAgICAgICAgIHNjbS5lbnN1cmVfY2xlYW5fd29ya2luZ19kaXJlY3RvcnkoZm9yY2Vf
Y2xlYW49b3B0aW9ucy5mb3JjZV9jbGVhbikK
</data>

          </attachment>
      

    </bug>

</bugzilla>