<?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>64148</bug_id>
          
          <creation_ts>2011-07-07 22:28:25 -0700</creation_ts>
          <short_desc>webkit-file utility needs common interface for all platforms</short_desc>
          <delta_ts>2013-10-31 08:30:20 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Tools / Tests</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>LATER</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P3</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>61772</blocked>
    
    <blocked>63527</blocked>
    
    <blocked>61773</blocked>
    
    <blocked>64149</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Roland Steiner">rolandsteiner</reporter>
          <assigned_to name="Roland Steiner">rolandsteiner</assigned_to>
          <cc>abarth</cc>
    
    <cc>andersca</cc>
    
    <cc>dpranke</cc>
    
    <cc>eric</cc>
    
    <cc>haraken</cc>
    
    <cc>hayato</cc>
    
    <cc>morrita</cc>
    
    <cc>ojan</cc>
    
    <cc>pravind.2k4</cc>
    
    <cc>tony</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>433903</commentid>
    <comment_count>0</comment_count>
    <who name="Roland Steiner">rolandsteiner</who>
    <bug_when>2011-07-07 22:28:25 -0700</bug_when>
    <thetext>Parts of the webkit-file tool that are common to all platforms should be factored out into separate base classes, in order to remove code duplication and force uniform conventions.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>433912</commentid>
    <comment_count>1</comment_count>
      <attachid>100077</attachid>
    <who name="Roland Steiner">rolandsteiner</who>
    <bug_when>2011-07-07 22:57:39 -0700</bug_when>
    <thetext>Created attachment 100077
work-in-progress

Initial draft</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>433921</commentid>
    <comment_count>2</comment_count>
      <attachid>100077</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2011-07-07 23:50:05 -0700</bug_when>
    <thetext>Comment on attachment 100077
work-in-progress

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

&gt; Tools/Scripts/webkitpy/common/project/base.py:184
&gt; +    -) a function &apos;write_project_file(self, project, file_path)&apos; that writes the project into the passed-in file

A common pattern in Python is to define the function in this class an throw a NotImplemented exception.  If you search webkitpy, you&apos;ll see a bunch of examples of this pattern.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>530711</commentid>
    <comment_count>3</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2012-01-05 15:37:57 -0800</bug_when>
    <thetext>Is this work still active?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>579343</commentid>
    <comment_count>4</comment_count>
    <who name="Roland Steiner">rolandsteiner</who>
    <bug_when>2012-03-15 07:02:52 -0700</bug_when>
    <thetext>Yes, just recently returned to it - uploading a shiny new work-in-progress patch shortly</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>579354</commentid>
    <comment_count>5</comment_count>
      <attachid>132040</attachid>
    <who name="Roland Steiner">rolandsteiner</who>
    <bug_when>2012-03-15 07:17:57 -0700</bug_when>
    <thetext>Created attachment 132040
work-in-progress

Expanded and completely refactored work-in-progress.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>590947</commentid>
    <comment_count>6</comment_count>
      <attachid>134528</attachid>
    <who name="Roland Steiner">rolandsteiner</who>
    <bug_when>2012-03-29 01:46:05 -0700</bug_when>
    <thetext>Created attachment 134528
Non-project-specific base classes for the webkit-file tool. Everything else depends on them.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>591728</commentid>
    <comment_count>7</comment_count>
    <who name="Kentaro Hara">haraken</who>
    <bug_when>2012-03-29 17:09:41 -0700</bug_when>
    <thetext>The patch might be a bit too big for me to review... isn&apos;t it possible to break it down? (But if anyone could review the patch at a breath, that would be best:-)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>945529</commentid>
    <comment_count>8</comment_count>
      <attachid>134528</attachid>
    <who name="Anders Carlsson">andersca</who>
    <bug_when>2013-10-31 08:30:06 -0700</bug_when>
    <thetext>Comment on attachment 134528
Non-project-specific base classes for the webkit-file tool. Everything else depends on them.

Nobody is working on this and it&apos;s cluttering up the Bugzilla review queue so I&apos;m going to go ahead and close this.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>100077</attachid>
            <date>2011-07-07 22:57:39 -0700</date>
            <delta_ts>2012-03-15 07:17:57 -0700</delta_ts>
            <desc>work-in-progress</desc>
            <filename>bug-64148-20110708145737.patch</filename>
            <type>text/plain</type>
            <size>10168</size>
            <attacher name="Roland Steiner">rolandsteiner</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogOTA2MTEKZGlmZiAtLWdpdCBhL1Rvb2xzL0NoYW5nZUxvZyBi
L1Rvb2xzL0NoYW5nZUxvZwppbmRleCBiZGMyNTA0NjAxODRlZTdhMTlkNzhiMDNiMjUwMjhhZWJi
NmNlYTVlLi45Y2EzZWFhYWVmYjFkZjhhZmI4OTQ5NTMzZjk2M2M4YzhlZDdmMmVlIDEwMDY0NAot
LS0gYS9Ub29scy9DaGFuZ2VMb2cKKysrIGIvVG9vbHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTUg
QEAKKzIwMTEtMDctMDcgIFJvbGFuZCBTdGVpbmVyICA8cm9sYW5kc3RlaW5lckBjaHJvbWl1bS5v
cmc+CisKKyAgICAgICAgd2Via2l0LWZpbGUgdXRpbGl0eSBuZWVkcyBjb21tb24gaW50ZXJmYWNl
IGZvciBhbGwgcGxhdGZvcm1zCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD02NDE0OAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgor
CisgICAgICAgIEFkZCBiYXNlIGNsYXNzZXMgZm9yIHByb2plY3QgZmlsZSBtYW5pcHVsYXRpb24u
CisKKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L2NvbW1vbi9wcm9qZWN0L19faW5pdF9fLnB5
OiBBZGRlZC4KKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L2NvbW1vbi9wcm9qZWN0L2Jhc2Uu
cHk6IEFkZGVkLgorCiAyMDExLTA3LTA3ICBLZXZpbiBPbGxpdmllciAgPGtldmlub0B0aGVvbGxp
dmllcnMuY29tPgogCiAgICAgICAgIFt3eF0gVW5yZXZpZXdlZCBidWlsZCBmaXgsIHJlbW92ZSBv
bGQgZmlsZXMgZnJvbSB0aGUgdHJlZSBhbmQgdXBkYXRlIHBhdGhzIHRvIG5ldyBvbmVzLgpkaWZm
IC0tZ2l0IGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9jb21tb24vcHJvamVjdC9fX2luaXRfXy5w
eSBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvY29tbW9uL3Byb2plY3QvX19pbml0X18ucHkKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMC4uZWY2NWJlZTViYjc3ZTk2ZWJjN2NkOWM0NzY0MDY5MGZiZGE4YWMxOQotLS0gL2Rl
di9udWxsCisrKyBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvY29tbW9uL3Byb2plY3QvX19pbml0
X18ucHkKQEAgLTAsMCArMSBAQAorIyBSZXF1aXJlZCBmb3IgUHl0aG9uIHRvIHNlYXJjaCB0aGlz
IGRpcmVjdG9yeSBmb3IgbW9kdWxlIGZpbGVzCmRpZmYgLS1naXQgYS9Ub29scy9TY3JpcHRzL3dl
YmtpdHB5L2NvbW1vbi9wcm9qZWN0L2Jhc2UucHkgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2Nv
bW1vbi9wcm9qZWN0L2Jhc2UucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMjYwMjc3OWUyNTBjYTA3ZTNhM2U3ZjFi
ZDc1ZTQyNjQ2N2ZmNjVjNQotLS0gL2Rldi9udWxsCisrKyBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0
cHkvY29tbW9uL3Byb2plY3QvYmFzZS5weQpAQCAtMCwwICsxLDE5OSBAQAorIyEvdXNyL2Jpbi9l
bnYgcHl0aG9uCisjIENvcHlyaWdodCAoQykgMjAxMSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorIworIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorIyBtZXQ6CisjCisjICAg
ICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyMgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorIyAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyMgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorIyBpbiB0aGUgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisjIGRpc3Ry
aWJ1dGlvbi4KKyMgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUg
bmFtZXMgb2YgaXRzCisjIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHBy
b21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisjIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVj
aWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisjCisjIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyMgIkFTIElT
IiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QKKyMgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SCisjIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisjIE9XTkVSIE9SIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorIyBTUEVD
SUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UCisjIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLAorIyBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyMgVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorIyAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKKyMgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKworZnJvbSB3ZWJraXRweS5jb21tb24uc3lzdGVtIGlt
cG9ydCBmaWxlc3lzdGVtCisKKworY2xhc3MgUHJvamVjdEV4Y2VwdGlvbihFeGNlcHRpb24pOgor
ICAgIGRlZiBfX2luaXRfXyhzZWxmLCBtZXNzYWdlKToKKyAgICAgICAgc2VsZi5fbWVzc2FnZSA9
IG1lc3NhZ2UKKworICAgIGRlZiBfX3N0cl9fKHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZi5f
bWVzc2FnZQorCisgICAgZGVmIF9fcmVwcl9fKHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZi5f
bWVzc2FnZQorCisKK2NsYXNzIFByb2plY3RDb21tb24ob2JqZWN0KToKKyAgICAiIiJTdHVmZiBj
b21tb24gdG8gYWxsIHBsYXRmb3JtIHByb2plY3QgZmlsZXMgd2l0aGluIHRoZSBzYW1lIHByb2pl
Y3QgZGlyZWN0b3J5LiIiIgorICAgICMgT3V0cHV0cyBubyBtZXNzYWdlcyBhdCBhbGw6CisgICAg
VkVSQk9TSVRZX1NJTEVOVCA9IDAKKyAgICAjIE91dHB1dHMgd2FybmluZ3Mgb25seQorICAgIFZF
UkJPU0lUWV9OT1JNQUwgPSAxCisgICAgIyBPdXRwdXRzIGJyaWVmIG1lc3NhZ2VzOiByZWFkIHBy
b2plY3QsIG1hbmlwdWxhdGlvbiwgd3JpdGUgcHJvamVjdAorICAgIFZFUkJPU0lUWV9WRVJCT1NF
ID0gMgorICAgICMgT3V0cHV0cyBkZXRhaWxlZCBpbmZvcm1hdGlvbiBmb3IgZXZlcnkgb3BlcmF0
aW9uCisgICAgVkVSQk9TSVRZX1ZFUllfVkVSQk9TRSA9IDMKKworICAgIGRlZiBfX2luaXRfXyhz
ZWxmLCBzY21fYWJzcGF0aCwgcHJvamVjdF9yb290X2Fic3BhdGgsIHByb2plY3RfbmFtZSwgZmls
ZXN5c3RlbT1Ob25lKToKKyAgICAgICAgc2VsZi5maWxlc3lzdGVtID0gZmlsZXN5c3RlbSBvciBG
aWxlU3lzdGVtKCkKKyAgICAgICAgc2VsZi5zY21fYWJzcGF0aCA9IHNjbV9hYnNwYXRoCisgICAg
ICAgIHNlbGYucHJvamVjdF9yb290X2Fic3BhdGggPSBwcm9qZWN0X3Jvb3RfYWJzcGF0aAorICAg
ICAgICBzZWxmLnByb2plY3RfbmFtZSA9IHByb2plY3RfbmFtZQorICAgICAgICBzZWxmLnZlcmJv
c2l0eSA9IFByb2plY3RDb21tb24uVkVSQk9TSVRZX05PUk1BTAorCisKK2NsYXNzIFByb2plY3RG
aWxlQ29udGFpbmVyKG9iamVjdCk6CisgICAgIiIiQmFzZSBjbGFzcyBmb3Igb2JqZWN0cyB0aGF0
IGhvbGQgYSBsaXN0IG9mIGZpbGVzLiIiIgorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHByb2pl
Y3QpOgorICAgICAgICBzZWxmLnByb2plY3QgPSBwcm9qZWN0CisgICAgICAgIHNlbGYuZmlsZXMg
PSB7fSAgIyBkaWN0aW9uYXJ5OiBhYnNwYXRoIC0+IFByb2plY3RGaWxlIG9iamVjdAorCisgICAg
ZGVmIGFkZF9maWxlKHNlbGYsIGZpbGUpOgorICAgICAgICBpZiBub3QgaXNpbnN0YW5jZShmaWxl
LCBQcm9qZWN0RmlsZSk6CisgICAgICAgICAgICByYWlzZSBQcm9qZWN0RXhjZXB0aW9uKCJhZGRf
ZmlsZSgpOiBhdHRlbXB0IHRvIGFkZCBub24tZmlsZSBvYmplY3QhIikKKyAgICAgICAgaWYgbm90
IGZpbGUucHJvamVjdDoKKyAgICAgICAgICAgIHJhaXNlIFByb2plY3RFeGNlcHRpb24oImFkZF9m
aWxlKCk6IGZpbGUgJyVzJyBtdXN0IGJlIHJlZ2lzdGVyZWQgd2l0aCBwcm9qZWN0IGZpcnN0ISIg
JSBmaWxlLmFic3BhdGgpCisgICAgICAgIGlmIGZpbGUucHJvamVjdCAhPSBzZWxmLnByb2plY3Q6
CisgICAgICAgICAgICByYWlzZSBQcm9qZWN0RXhjZXB0aW9uKCJhZGRfZmlsZSgpOiBhdHRlbXB0
IHRvIGFkZCBmaWxlICclcycgb2YgcHJvamVjdCAnJXMnIHRvIHByb2plY3QgJyVzJyEiICUgKGZp
bGUuYWJzcGF0aCwgZmlsZS5wcm9qZWN0LmNvbW1vbi5wcm9qZWN0X25hbWUsIHNlbGYucHJvamVj
dC5jb21tb24ucHJvamVjdF9uYW1lKSkKKyAgICAgICAgaWYgZmlsZS5hYnNwYXRoIGluIHNlbGYu
ZmlsZXM6CisgICAgICAgICAgICByYWlzZSBQcm9qZWN0RXhjZXB0aW9uKCJhZGRfZmlsZSgpOiBm
aWxlICclcycgYWxyZWFkeSBleGlzdHMgaW4gY29udGFpbmVyISIgJSBmaWxlLmFic3BhdGgpCisg
ICAgICAgIHNlbGYuZmlsZXNbZmlsZS5hYnNwYXRoXSA9IGZpbGUKKworICAgIGRlZiByZW1vdmVf
ZmlsZShzZWxmLCBmaWxlKToKKyAgICAgICAgaWYgbm90IGlzaW5zdGFuY2UoZ3JvdXAsIFByb2pl
Y3RGaWxlKToKKyAgICAgICAgICAgIHJhaXNlIFByb2plY3RFeGNlcHRpb24oInJlbW92ZV9maWxl
KCk6IGF0dGVtcHQgdG8gcmVtb3ZlIG5vbi1maWxlIG9iamVjdCEiKQorICAgICAgICBpZiBub3Qg
ZmlsZS5wcm9qZWN0OgorICAgICAgICAgICAgcmFpc2UgUHJvamVjdEV4Y2VwdGlvbigicmVtb3Zl
X2ZpbGUoKTogZmlsZSAnJXMnIGlzbid0IGFzc2lnbmVkIHRvIHByb2plY3QgJyVzJyEiICUgKGZp
bGUuYWJzcGF0aCwgcHJvamVjdC5jb21tb24ucHJvamVjdF9uYW1lKSkKKyAgICAgICAgaWYgZmls
ZS5wcm9qZWN0ICE9IHNlbGYucHJvamVjdDoKKyAgICAgICAgICAgIHJhaXNlIFByb2plY3RFeGNl
cHRpb24oInJlbW92ZV9maWxlKCk6IGF0dGVtcHQgdG8gcmVtb3ZlIGZpbGUgJyVzJyBvZiBwcm9q
ZWN0ICclcycgZnJvbSBwcm9qZWN0ICclcychIiAlIChmaWxlLmFic3BhdGgsIGZpbGUucHJvamVj
dC5jb21tb24ucHJvamVjdF9uYW1lLCBzZWxmLnByb2plY3QuY29tbW9uLnByb2plY3RfbmFtZSkp
CisgICAgICAgIGRlbCBzZWxmLmZpbGVzW2ZpbGUuYWJzcGF0aF0KKworICAgIGRlZiBmaW5kX2Zp
bGVfd2l0aF9hYnNwYXRoKHNlbGYsIGFic3BhdGgpOgorICAgICAgICBpZiBhYnNwYXRoIGluIHNl
bGYuZmlsZXM6CisgICAgICAgICAgICByZXR1cm4gc2VsZi5maWxlc1thYnNwYXRoXQorICAgICAg
ICByZXR1cm4gTm9uZQorCisgICAgZGVmIGZpbmRfZmlsZV93aXRoX3JlbHBhdGhfdnNfcHJvamVj
dF9yb290KHNlbGYsIHJlbHBhdGgpOgorICAgICAgICBhYnNwYXRoID0gc2VsZi5wcm9qZWN0LmZp
bGVzeXN0ZW0uam9pbihzZWxmLnByb2plY3QuY29tbW9uLnByb2plY3Rfcm9vdF9hYnNwYXRoLCBy
ZWxwYXRoKQorICAgICAgICByZXR1cm4gc2VsZi5maW5kX2ZpbGVfd2l0aF9hYnNwYXRoKGFic3Bh
dGgpCisKKworY2xhc3MgUHJvamVjdEZpbGUob2JqZWN0KToKKyAgICAiIiJCYXNlIGNsYXNzIGZv
ciBwcm9qZWN0IGZpbGUgY2xhc3Nlcy4KKworICAgIEl0IGhvbGRzIGFuIGFic3RyYWN0IGRlc2Ny
aXB0b3Igb2JqZWN0LCBhcyB3ZWxsIGFzIG90aGVyIGJhc2ljIGZpbGUgaW5mb3JtYXRpb24uCisg
ICAgIiIiCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHByb2plY3QsIGFic3BhdGgpOgorICAgICAg
ICBzZWxmLnByb2plY3QgPSBwcm9qZWN0CisgICAgICAgIHNlbGYuYWJzcGF0aCA9IGFic3BhdGgK
KworCitjbGFzcyBQcm9qZWN0KG9iamVjdCk6CisgICAgIiIiQmFzZSBjbGFzcyBmb3IgcHJvamVj
dCBjbGFzc2VzLgorCisgICAgSXQgc3RvcmVzIGFsbCBmaWxlcyB0aGF0IGFyZSByZWZlcmVuY2Vk
IGluIHRoZSBwcm9qZWN0IGZpbGUKKyAgICAiIiIKKyAgICBGSUxFX0NMQVNTID0gUHJvamVjdEZp
bGUKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBjb21tb24sIHByb2plY3RfZmlsZV9hYnNwYXRo
KToKKyAgICAgICAgc2VsZi5jb21tb24gPSBjb21tb24KKyAgICAgICAgc2VsZi5maWxlc3lzdGVt
ID0gY29tbW9uLmZpbGVzeXN0ZW0KKyAgICAgICAgc2VsZi5uYW1lID0gY29tbW9uLnByb2plY3Rf
bmFtZQorICAgICAgICBzZWxmLnByb2plY3RfZmlsZV9hYnNwYXRoID0gcHJvamVjdF9maWxlX2Fi
c3BhdGgKKyAgICAgICAgIyBTdG9yZSBhbGwgKCEpIGZpbGVzIHJlZmVyZW5jZWQgd2l0aGluIHRo
ZSBwcm9qZWN0IGZpbGUgaW50byB0aGlzIGNvbnRhaW5lcjoKKyAgICAgICAgc2VsZi5hbGxfZmls
ZXMgPSBQcm9qZWN0RmlsZUNvbnRhaW5lcihzZWxmKQorCisgICAgZGVmIGNyZWF0ZV9uZXdfZmls
ZShzZWxmLCBhYnNwYXRoKToKKyAgICAgICAgZmlsZSA9IHNlbGYuRklMRV9DTEFTUyh0aGlzLCBw
cm9qZWN0LCBhYnNwYXRoLCBkZXNjcmlwdG9yKQorICAgICAgICBzZWxmLnJlZ2lzdGVyX2ZpbGUo
ZmlsZSkKKyAgICAgICAgcmV0dXJuIGZpbGUKKworICAgIGRlZiByZWdpc3Rlcl9maWxlKHNlbGYs
IGZpbGUpOgorICAgICAgICBpZiBmaWxlLnByb2plY3Q6CisgICAgICAgICAgICByYWlzZSBQcm9q
ZWN0RXhjZXB0aW9uKCJyZWdpc3Rlcl9maWxlKCk6IGF0dGVtcHQgdG8gcmVnaXN0ZXIgZmlsZSAn
JXMnIG9mIHByb2plY3QgJyVzJyB3aXRoIHByb2plY3QgJyVzJyEiICUgKGZpbGUuYWJzcGF0aCwg
ZmlsZS5wcm9qZWN0LmNvbW1vbi5wcm9qZWN0X25hbWUsIHNlbGYuY29tbW9uLnByb2plY3RfbmFt
ZSkpCisgICAgICAgIGlmIGZpbGUuYWJzcGF0aCBpbiBzZWxmLmFsbF9maWxlcy5maWxlczoKKyAg
ICAgICAgICAgIHJhaXNlIFByb2plY3RFeGNlcHRpb24oInJlZ2lzdGVyX2ZpbGUoKTogZmlsZSAn
JXMnIGFscmVhZHkgcmVnaXN0ZXJlZCB3aXRoIHByb2plY3QgJyVzJyEiIChmaWxlLmFic3BhdGgs
IHNlbGYuY29tbW9uLnByb2plY3RfbmFtZSkpCisgICAgICAgIGZpbGUucHJvamVjdCA9IHNlbGYK
KyAgICAgICAgc2VsZi5hbGxfZmlsZXMuYWRkX2ZpbGUoZmlsZSkKKworICAgIGRlZiB1bnJlZ2lz
dGVyX2ZpbGUoc2VsZiwgZmlsZSk6CisgICAgICAgIGlmIGZpbGUucHJvamVjdCAhPSBzZWxmOgor
ICAgICAgICAgICAgcmFpc2UgUHJvamVjdEV4Y2VwdGlvbigidW5yZWdpc3Rlcl9maWxlKCk6IGF0
dGVtcHQgdG8gdW5yZWdpc3RlciBmaWxlICclcycgb2YgcHJvamVjdCAnJXMnIGZyb20gcHJvamVj
dCAnJXMnISIgJSAoZmlsZS5hYnNwYXRoLCBmaWxlLnByb2plY3QuY29tbW9uLnByb2plY3RfbmFt
ZSwgc2VsZi5jb21tb24ucHJvamVjdF9uYW1lKSkKKyAgICAgICAgaWYgZmlsZS5hYnNwYXRoIG5v
dCBpbiBzZWxmLmFsbF9maWxlcy5maWxlczoKKyAgICAgICAgICAgIHJhaXNlIFByb2plY3RFeGNl
cHRpb24oInVucmVnaXN0ZXJfZmlsZSgpOiBmaWxlICclcycgbm90IHJlZ2lzdGVyZWQgd2l0aCBw
cm9qZWN0ICclcychIiAoZmlsZS5hYnNwYXRoLCBzZWxmLmNvbW1vbi5wcm9qZWN0X25hbWUpKQor
ICAgICAgICBzZWxmLmFsbF9maWxlcy5yZW1vdmVfZmlsZShmaWxlKQorICAgICAgICBmaWxlLnBy
b2plY3QgPSBOb25lCisKKyAgICBkZWYgZmluZF9maWxlX3dpdGhfYWJzcGF0aChzZWxmLCBhYnNw
YXRoKToKKyAgICAgICAgcmV0dXJuIHNlbGYuYWxsX2ZpbGVzLmZpbmRfZmlsZV93aXRoX2Fic3Bh
dGgoYWJzcGF0aCkKKworICAgIGRlZiBmaW5kX2ZpbGVfd2l0aF9yZWxwYXRoX3ZzX3Byb2plY3Qo
c2VsZiwgYWJzcGF0aCk6CisgICAgICAgIHJldHVybiBzZWxmLmFsbF9maWxlcy5maW5kX2ZpbGVf
d2l0aF9yZWxwYXRoX3ZzX3Byb2plY3Rfcm9vdChhYnNwYXRoKQorCisKK2NsYXNzIFByb2plY3RS
ZWFkZXIob2JqZWN0KToKKyAgICAiIiJCYXNlIGNsYXNzIGZvciBhIHByb2plY3QgZmlsZSBzZXJp
YWxpemVyIChyZWFkZXIpLgorCisgICAgRGVyaXZlZCBjbGFzc2VzIE1VU1QgZGVmaW5lOgorICAg
IC0pIGEgY2xhc3MgdmFyaWFibGUgJ1BST0pFQ1RfQ0xBU1MnIHRoYXQgY29udGFpbnMgdGhlIGNs
YXNzIG9mIHRoZSBwcm9qZWN0IHRvIGNyZWF0ZQorICAgIC0pIGEgZnVuY3Rpb24gJ3BhcnNlX3By
b2plY3RfZmlsZShzZWxmKScgdGhhdCByZWFkcyBpbiB0aGUgZmlsZSBhbmQgcG9wdWxhdGVzIHNl
bGYucHJvamVjdAorICAgICIiIgorICAgIFBST0pFQ1RfQ0xBU1MgPSBQcm9qZWN0CisKKyAgICBk
ZWYgX19pbml0X18oc2VsZiwgY29tbW9uKToKKyAgICAgICAgc2VsZi5jb21tb24gPSBjb21tb24K
KyAgICAgICAgc2VsZi5maWxlc3lzdGVtID0gY29tbW9uLmZpbGVzeXN0ZW0KKyAgICAgICAgc2Vs
Zi5wcm9qZWN0ID0gTm9uZQorCisgICAgZGVmIHJlYWQoc2VsZiwgcHJvamVjdF9maWxlX3BhdGgp
OgorICAgICAgICAiIiJSZWFkIGEgcHJvamVjdCBmaWxlIG9yIG1ha2VmaWxlIGZyb20gZGlzYyBh
bmQgcGFyc2UgaXQuCisKKyAgICAgICAgZmlsZV9wYXRoIG11c3QgY29udGFpbiB0aGUgcHJvamVj
dCBmaWxlIGl0c2VsZiwgbm90IGp1c3QgYSBkaXJlY3RvcnkuCisgICAgICAgICIiIgorICAgICAg
ICBpZiBub3Qgc2VsZi5maWxlc3lzdGVtLmlzZmlsZShwcm9qZWN0X2ZpbGVfcGF0aCk6CisgICAg
ICAgICAgICByYWlzZSBQcm9qZWN0RXhjZXB0aW9uKCJyZWFkOiBmaWxlICVzIG5vdCBmb3VuZCEi
ICUgcHJvamVjdF9maWxlX3BhdGgpCisgICAgICAgIHByb2plY3RfZmlsZV9hYnNwYXRoID0gc2Vs
Zi5maWxlc3lzdGVtLmFic3BhdGgocHJvamVjdF9maWxlX3BhdGgpCisgICAgICAgIHNlbGYucHJv
amVjdCA9IHNlbGYuUFJPSkVDVF9DTEFTUyhzZWxmLmNvbW1vbiwgcHJvamVjdF9maWxlX2Fic3Bh
dGgpCisgICAgICAgIHNlbGYucGFyc2VfcHJvamVjdF9maWxlKHByb2plY3RfZmlsZV9wYXRoKQor
ICAgICAgICByZXR1cm4gc2VsZi5wcm9qZWN0CisKKworY2xhc3MgUHJvamVjdFdyaXRlcihvYmpl
Y3QpOgorICAgICIiIkJhc2UgY2xhc3MgZm9yIGEgcHJvamVjdCBmaWxlIHNlcmlhbGl6ZXIgKHdy
aXRlcikuCisKKyAgICBEZXJpdmVkIGNsYXNzZXMgTVVTVCBkZWZpbmU6CisgICAgLSkgYSBmdW5j
dGlvbiAnd3JpdGVfcHJvamVjdF9maWxlKHNlbGYsIHByb2plY3QsIGZpbGVfcGF0aCknIHRoYXQg
d3JpdGVzIHRoZSBwcm9qZWN0IGludG8gdGhlIHBhc3NlZC1pbiBmaWxlCisgICAgIiIiCisgICAg
ZGVmIF9faW5pdF9fKHNlbGYpOgorICAgICAgICBzZWxmLmNvbW1vbiA9IE5vbmUKKyAgICAgICAg
c2VsZi5wcm9qZWN0ID0gTm9uZQorICAgICAgICBzZWxmLmZpbGVzeXN0ZW0gPSBOb25lCisKKyAg
ICBkZWYgd3JpdGUoc2VsZiwgcHJvamVjdCwgcHJvamVjdF9maWxlX3BhdGgpOgorICAgICAgICAi
IiJXcml0ZSBhIHByb2plY3QgZmlsZSBvciBtYWtlZmlsZSB0byBkaXNjLgorCisgICAgICAgIGZp
bGVfcGF0aCBtdXN0IGluY2x1ZGUgdGhlIHByb2plY3QgZmlsZSBpdHNlbGYgKG5vdCBqdXN0IGEg
ZGlyZWN0b3J5KS4KKyAgICAgICAgIiIiCisgICAgICAgIHNlbGYuY29tbW9uID0gcHJvamVjdC5j
b21tb24KKyAgICAgICAgc2VsZi5wcm9qZWN0ID0gcHJvamVjdAorICAgICAgICBzZWxmLmZpbGVz
eXN0ZW0gPSBwcm9qZWN0LmZpbGVzeXN0ZW0KKyAgICAgICAgc2VsZi53cml0ZV9wcm9qZWN0X2Zp
bGUocHJvamVjdF9maWxlX3BhdGgpCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>132040</attachid>
            <date>2012-03-15 07:17:57 -0700</date>
            <delta_ts>2012-03-29 01:45:58 -0700</delta_ts>
            <desc>work-in-progress</desc>
            <filename>webkit-file-common.patch</filename>
            <type>text/plain</type>
            <size>54101</size>
            <attacher name="Roland Steiner">rolandsteiner</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvY29tbW9uL3Byb2plY3QvX19pbml0
X18ucHkgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2NvbW1vbi9wcm9qZWN0L19faW5pdF9fLnB5
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVmNjViZWUKLS0tIC9kZXYvbnVs
bAorKysgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2NvbW1vbi9wcm9qZWN0L19faW5pdF9fLnB5
CkBAIC0wLDAgKzEgQEAKKyMgUmVxdWlyZWQgZm9yIFB5dGhvbiB0byBzZWFyY2ggdGhpcyBkaXJl
Y3RvcnkgZm9yIG1vZHVsZSBmaWxlcwpkaWZmIC0tZ2l0IGEvVG9vbHMvU2NyaXB0cy93ZWJraXRw
eS9jb21tb24vcHJvamVjdC9jb21tb24ucHkgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2NvbW1v
bi9wcm9qZWN0L2NvbW1vbi5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40
N2IwMWI1Ci0tLSAvZGV2L251bGwKKysrIGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9jb21tb24v
cHJvamVjdC9jb21tb24ucHkKQEAgLTAsMCArMSw1MTcgQEAKKyMhL3Vzci9iaW4vZW52IHB5dGhv
bgorIyBDb3B5cmlnaHQgKEMpIDIwMTIgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyMKKyMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisjIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyMgbWV0OgorIworIyAgICAqIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisjIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyMgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlCisjIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyMgaW4gdGhlIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorIyBkaXN0cmlidXRpb24u
CisjICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9m
IGl0cworIyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHBy
b2R1Y3RzIGRlcml2ZWQgZnJvbQorIyB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJp
b3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorIworIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisjICJBUyBJUyIgQU5EIEFO
WSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisjIExJ
TUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUgorIyBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorIyBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyMgU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorIyBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwKKyMgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisjIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyMgKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
CisjIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCisKK2Zyb20gd2Via2l0cHkuY29tbW9uLnByb2plY3Qub3B0aW9ucyBp
bXBvcnQgKgorZnJvbSB3ZWJraXRweS5jb21tb24uc3lzdGVtLmZpbGVzeXN0ZW0gaW1wb3J0IEZp
bGVTeXN0ZW0KKworaW1wb3J0IHN5cworCisjID09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09CisKK2NsYXNzIENvbW1vbkZpbGUob2JqZWN0KToKKyAgICAiIiIKKyAg
ICBDbGFzcyBkZXNjcmliaW5nIGEgZmlsZSBhcyBpdCBpcyBvbiBkaXNrLiBUaGlzIGlzIG5vdCBw
cm9qZWN0LXNwZWNpZmljLgorICAgIE5vIDIgQ29tbW9uRmlsZSBvYmplY3RzIGV2ZXIgZGVzY3Jp
YmUgdGhlIHNhbWUgZmlsZS4KKyAgICBMaXN0cyBhbGwgUHJvamVjdEZpbGVSZWZlcmVuY2VzIHRo
aXMgZmlsZSBpcyByZWZlcnJlZCBieS4KKyAgICAiIiIKKyAgICBJRF9DT1VOVEVSID0gMAorCisg
ICAgZGVmIF9faW5pdF9fKHNlbGYsIGRpcmVjdG9yeSwgZmlsZV9uYW1lKToKKyAgICAgICAgYXNz
ZXJ0IGRpcmVjdG9yeQorICAgICAgICBhc3NlcnQgaXNpbnN0YW5jZShkaXJlY3RvcnksIENvbW1v
bkRpcmVjdG9yeSkKKyAgICAgICAgYXNzZXJ0IGZpbGVfbmFtZQorICAgICAgICBhc3NlcnQgc2Vs
Zi5pc192YWxpZF9maWxlX25hbWUoZmlsZV9uYW1lKQorICAgICAgICBDb21tb25GaWxlLklEX0NP
VU5URVIgKz0gMQorICAgICAgICBzZWxmLl9pZCA9IENvbW1vbkZpbGUuSURfQ09VTlRFUgorICAg
ICAgICBzZWxmLmRpcmVjdG9yeSA9IGRpcmVjdG9yeQorICAgICAgICBzZWxmLm5hbWUgPSBmaWxl
X25hbWUKKworICAgIEBzdGF0aWNtZXRob2QKKyAgICBkZWYgaXNfdmFsaWRfZmlsZV9uYW1lKG5h
bWUpOgorICAgICAgICByZXR1cm4gbmFtZSBhbmQgbmFtZSAhPSAnLicgYW5kIG5hbWUgIT0gJy4u
JyBhbmQgJy8nIG5vdCBpbiBuYW1lIGFuZCAnXFwnIG5vdCBpbiBuYW1lCisKKyAgICBkZWYgaXNf
dmFsaWQoc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLmlzX3ZhbGlkX2ZpbGVfbmFtZShzZWxm
Lm5hbWUpIGFuZCBzZWxmLmRpcmVjdG9yeSBhbmQgc2VsZi5kaXJlY3RvcnkuaXNfdmFsaWQoKQor
CisgICAgZGVmIF9faGFzaF9fKHNlbGYpOgorICAgICAgICByZXR1cm4gaGFzaChzZWxmLl9pZCkK
KworICAgIGRlZiBfX2VxX18oc2VsZiwgb3RoZXIpOgorICAgICAgICBhc3NlcnQgc2VsZiBpcyBv
dGhlciBvciBzZWxmLl9pZCAhPSBvdGhlci5faWQKKyAgICAgICAgcmV0dXJuIHNlbGYgaXMgb3Ro
ZXIKKworICAgIGRlZiBfX25lX18oc2VsZiwgb3RoZXIpOgorICAgICAgICBhc3NlcnQgc2VsZiBp
cyBvdGhlciBvciBzZWxmLl9pZCAhPSBvdGhlci5faWQKKyAgICAgICAgcmV0dXJuIHNlbGYgaXMg
bm90IG90aGVyCisKKworIyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQorCitjbGFzcyBDb21tb25EaXJlY3Rvcnkob2JqZWN0KToKKyAgICAiIiIKKyAgICBDbGFz
cyBhYnN0cmFjdGx5IGRlc2NyaWJpbmcgYSBkaXJlY3RvcnkuIFRoaXMgaXMgbm90IHByb2plY3Qt
c3BlY2lmaWMuCisgICAgTm8gMiBDb21tb25EaXJlY3Rvcnkgb2JqZWN0cyBldmVyIGRlc2NyaWJl
IHRoZSBzYW1lIGRpcmVjdG9yeS4KKyAgICBDb21tb25GaWxlIG9iamVjdHMgYXJlIGFsd2F5cyBh
c3NpZ25lZCB0byBhIENvbW1vbkRpcmVjdG9yeS4KKyAgICBEaXJlY3RvcmllcyBmb3JtIGEgdHJl
ZSAtIGdyYXBoIHN0cnVjdHVyZXMsIGkuZS4gZGlmZmVyZW50IHBhdGhzIHRvIHRoZSBzYW1lIGRp
cmVjdG9yeSwgYXJlIG5vdCBzdXBwb3J0ZWQuCisgICAgIiIiCisgICAgSURfQ09VTlRFUiA9IDAK
KworICAgIGRlZiBfX2luaXRfXyhzZWxmLCBwYXJlbnRfZGlyZWN0b3J5LCBkaXJlY3RvcnlfbmFt
ZSk6CisgICAgICAgIENvbW1vbkRpcmVjdG9yeS5JRF9DT1VOVEVSICs9IDEKKyAgICAgICAgc2Vs
Zi5faWQgPSBDb21tb25EaXJlY3RvcnkuSURfQ09VTlRFUgorICAgICAgICBzZWxmLm5hbWUgPSBk
aXJlY3RvcnlfbmFtZQorICAgICAgICBzZWxmLnBhcmVudF9kaXJlY3RvcnkgPSBwYXJlbnRfZGly
ZWN0b3J5ICAgICMgbWF5IGJlIE5vbmUKKyAgICAgICAgc2VsZi5maWxlcyA9IHt9ICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAjIG1hcCBmaWxlIG5hbWUgKHN0cmluZykgLT4gQ29tbW9uRmls
ZQorICAgICAgICBzZWxmLmRpcmVjdG9yaWVzID0geyAnLic6ICBzZWxmIH0gICAgICAgICAgICMg
bWFwIGRpcmVjdG9yeSBuYW1lIChzdHJpbmcpIC0+IENvbW1vbkRpcmVjdG9yeQorCisgICAgZGVm
IF9faGFzaF9fKHNlbGYpOgorICAgICAgICByZXR1cm4gaGFzaChzZWxmLl9pZCkKKworICAgIGRl
ZiBfX2VxX18oc2VsZiwgb3RoZXIpOgorICAgICAgICBhc3NlcnQgbm90IG90aGVyIG9yIHNlbGYg
aXMgb3RoZXIgb3Igc2VsZi5faWQgIT0gb3RoZXIuX2lkCisgICAgICAgIHJldHVybiBzZWxmIGlz
IG90aGVyCisKKyAgICBkZWYgX19uZV9fKHNlbGYsIG90aGVyKToKKyAgICAgICAgYXNzZXJ0IG5v
dCBvdGhlciBvciBzZWxmIGlzIG90aGVyIG9yIHNlbGYuX2lkICE9IG90aGVyLl9pZAorICAgICAg
ICByZXR1cm4gc2VsZiBpcyBub3Qgb3RoZXIKKworICAgIGRlZiBpc19lbXB0eShzZWxmKToKKyAg
ICAgICAgYXNzZXJ0IGxlbihzZWxmLmRpcmVjdG9yaWVzKSA+PSAxCisgICAgICAgIHJldHVybiBs
ZW4oc2VsZi5kaXJlY3RvcmllcykgPD0gMQorCisgICAgZGVmIGFkZF9kaXJlY3Rvcnkoc2VsZiwg
ZGlyZWN0b3J5KToKKyAgICAgICAgYXNzZXJ0IGlzaW5zdGFuY2UoZGlyZWN0b3J5LCBDb21tb25E
aXJlY3RvcnkpCisgICAgICAgIGFzc2VydCBkaXJlY3RvcnkuaXNfdmFsaWQoKQorICAgICAgICBh
c3NlcnQgZGlyZWN0b3J5Lm5hbWUgbm90IGluIHNlbGYuZGlyZWN0b3JpZXMKKyAgICAgICAgYXNz
ZXJ0IGRpcmVjdG9yeS5uYW1lIG5vdCBpbiBzZWxmLmZpbGVzCisgICAgICAgIGFzc2VydCBkaXJl
Y3RvcnkucGFyZW50X2RpcmVjdG9yeSBpcyBzZWxmCisgICAgICAgIHNlbGYuZGlyZWN0b3JpZXNb
ZGlyZWN0b3J5Lm5hbWVdID0gZGlyZWN0b3J5CisKKyAgICBkZWYgcmVtb3ZlX2RpcmVjdG9yeShz
ZWxmLCBkaXJlY3RvcnkpOgorICAgICAgICBhc3NlcnQgaXNpbnN0YW5jZShkaXJlY3RvcnksIENv
bW1vbkRpcmVjdG9yeSkKKyAgICAgICAgYXNzZXJ0IGRpcmVjdG9yeS5uYW1lIGluIHNlbGYuZGly
ZWN0b3JpZXMKKyAgICAgICAgZGVsIHNlbGYuZGlyZWN0b3JpZXNbZGlyZWN0b3J5Lm5hbWVdCisK
KyAgICBkZWYgZ2V0X2RpcmVjdG9yeShzZWxmLCBkaXJlY3RvcnlfbmFtZSk6CisgICAgICAgIGFz
c2VydCBkaXJlY3RvcnlfbmFtZQorICAgICAgICBkaXJlY3RvcnkgPSBzZWxmLmRpcmVjdG9yaWVz
LmdldChkaXJlY3RvcnlfbmFtZSkKKyAgICAgICAgaWYgZGlyZWN0b3J5X25hbWUgPT0gJy4nOgor
ICAgICAgICAgICAgYXNzZXJ0IGRpcmVjdG9yeSBpcyBzZWxmCisgICAgICAgIGVsaWYgZGlyZWN0
b3J5X25hbWUgPT0gJy4uJzoKKyAgICAgICAgICAgIGFzc2VydCBkaXJlY3RvcnkgaXMgc2VsZi5w
YXJlbnRfZGlyZWN0b3J5CisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBhc3NlcnQgbm90IGRp
cmVjdG9yeSBvciBkaXJlY3RvcnkucGFyZW50X2RpcmVjdG9yeSBpcyBzZWxmCisgICAgICAgIHJl
dHVybiBkaXJlY3RvcnkKKworICAgIGRlZiBhZGRfZmlsZShzZWxmLCBmaWxlKToKKyAgICAgICAg
YXNzZXJ0IGlzaW5zdGFuY2UoZmlsZSwgQ29tbW9uRmlsZSkKKyAgICAgICAgYXNzZXJ0IENvbW1v
bkZpbGUuaXNfdmFsaWRfZmlsZV9uYW1lKGZpbGUubmFtZSkKKyAgICAgICAgYXNzZXJ0IGZpbGUu
bmFtZSBub3QgaW4gc2VsZi5kaXJlY3RvcmllcworICAgICAgICBhc3NlcnQgZmlsZS5uYW1lIG5v
dCBpbiBzZWxmLmZpbGVzCisgICAgICAgIHNlbGYuZmlsZXNbZmlsZS5uYW1lXSA9IGZpbGUKKyAg
ICAgICAgZmlsZS5kaXJlY3RvcnkgPSBzZWxmCisKKyAgICBkZWYgcmVtb3ZlX2ZpbGUoc2VsZiwg
ZmlsZSk6CisgICAgICAgIGFzc2VydCBpc2luc3RhbmNlKGZpbGUsIFByb2plY3RGaWxlKQorICAg
ICAgICBhc3NlcnQgZmlsZS5uYW1lIGluIHNlbGYuZmlsZXMKKyAgICAgICAgZGVsIHNlbGYuZmls
ZXNbZmlsZS5uYW1lXQorICAgICAgICBmaWxlLmRpcmVjdG9yeSA9IE5vbmUKKworICAgIGRlZiBn
ZXRfZmlsZShzZWxmLCBmaWxlX25hbWUpOgorICAgICAgICBhc3NlcnQgZmlsZV9uYW1lCisgICAg
ICAgIGZpbGUgPSBzZWxmLmZpbGVzLmdldChmaWxlX25hbWUpCisgICAgICAgIGFzc2VydCBub3Qg
ZmlsZSBvciBmaWxlLmRpcmVjdG9yeSBpcyBzZWxmCisgICAgICAgIHJldHVybiBmaWxlCisKKyAg
ICBkZWYgZ2V0X2VudHJ5KHNlbGYsIG5hbWUpOgorICAgICAgICByZXR1cm4gc2VsZi5nZXRfZGly
ZWN0b3J5KG5hbWUpIG9yIHNlbGYuZ2V0X2ZpbGUobmFtZSkKKworICAgIGRlZiBkaXJlY3Rvcnlf
bGlzdChzZWxmKToKKyAgICAgICAgaWYgc2VsZi5wYXJlbnRfZGlyZWN0b3J5OgorICAgICAgICAg
ICAgcmV0dXJuIHNlbGYucGFyZW50X2RpcmVjdG9yeS5kaXJlY3RvcnlfbGlzdCgpICsgW3NlbGZd
CisgICAgICAgIHJldHVybiBbc2VsZl0KKworICAgIGRlZiBiYXNlX2RpcmVjdG9yeShzZWxmKToK
KyAgICAgICAgaWYgc2VsZi5wYXJlbnRfZGlyZWN0b3J5OgorICAgICAgICAgICAgcmV0dXJuIHNl
bGYucGFyZW50X2RpcmVjdG9yeS5iYXNlX2RpcmVjdG9yeSgpCisgICAgICAgIHJldHVybiBzZWxm
CisKKyAgICBkZWYgY29tbW9uX2RpcmVjdG9yeShzZWxmLCBvdGhlcl9kaXJlY3RvcnkpOgorICAg
ICAgICBhc3NlcnQgb3RoZXJfZGlyZWN0b3J5CisgICAgICAgIGFzc2VydCBpc2luc3RhbmNlKG90
aGVyX2RpcmVjdG9yeSkKKyAgICAgICAgZGlyZWN0b3J5X2xpc3QxID0gc2VsZi5kaXJlY3Rvcnlf
bGlzdCgpCisgICAgICAgIGRpcmVjdG9yeV9saXN0MiA9IG90aGVyX2RpcmVjdG9yeS5kaXJlY3Rv
cnlfbGlzdCgpCisgICAgICAgIGNvbW1vbl9kaXJlY3RvcnkgPSBOb25lCisgICAgICAgIHdoaWxl
IGRpcmVjdG9yeV9saXN0MSBhbmQgZGlyZWN0b3J5X2xpc3QyIGFuZCBkaXJlY3RvcnlfbGlzdDFb
MF0gPT0gZGlyZWN0b3J5X2xpc3QyWzBdOgorICAgICAgICAgICAgY29tbW9uX2RpcmVjdG9yeSA9
IGRpcmVjdG9yeV9saXN0MS5wb3AoMCkKKyAgICAgICAgICAgIGRpcmVjdG9yeV9saXN0Mi5wb3Ao
MCkKKyAgICAgICAgcmV0dXJuIGNvbW1vbl9kaXJlY3RvcnkKKworCitjbGFzcyBDb21tb25Sb290
RGlyZWN0b3J5KENvbW1vbkRpcmVjdG9yeSk6CisgICAgIiIiCisgICAgQ2xhc3MgZGVzY3JpYmlu
ZyB0aGUgcm9vdCBkaXJlY3RvcnkuCisgICAgIiIiCisgICAgZGVmIF9faW5pdF9fKHNlbGYpOgor
ICAgICAgICBDb21tb25EaXJlY3RvcnkuX19pbml0X18oc2VsZiwgTm9uZSwgJy8nKQorCisgICAg
ZGVmIGlzX3ZhbGlkKHNlbGYpOgorICAgICAgICByZXR1cm4gVHJ1ZQorCisgICAgZGVmIF9kZXNj
cGF0aF93aXRoX3NlcChzZWxmLCBzZXApOgorICAgICAgICByZXR1cm4gc2VwCisKKworY2xhc3Mg
Q29tbW9uU0NNRGlyZWN0b3J5KENvbW1vbkRpcmVjdG9yeSk6CisgICAgIiIiCisgICAgQ2xhc3Mg
ZGVzY3JpYmluZyB0aGUgY2hlY2tvdXQgcm9vdCBkaXJlY3RvcnkuCisgICAgIiIiCisgICAgZGVm
IF9faW5pdF9fKHNlbGYsIGRpcmVjdG9yeV9uYW1lLCByb290X2RpcmVjdG9yeSwgYWJzcGF0aCk6
CisgICAgICAgIGFzc2VydCBkaXJlY3RvcnlfbmFtZQorICAgICAgICBhc3NlcnQgcm9vdF9kaXJl
Y3RvcnkKKyAgICAgICAgYXNzZXJ0IGlzaW5zdGFuY2Uocm9vdF9kaXJlY3RvcnksIENvbW1vblJv
b3REaXJlY3RvcnkpCisgICAgICAgIGFzc2VydCBhYnNwYXRoCisgICAgICAgIENvbW1vbkRpcmVj
dG9yeS5fX2luaXRfXyhzZWxmLCBOb25lLCBkaXJlY3RvcnlfbmFtZSkKKyAgICAgICAgc2VsZi5y
b290X2RpcmVjdG9yeSA9IHJvb3RfZGlyZWN0b3J5CisgICAgICAgIHNlbGYuYWJzcGF0aCA9IGFi
c3BhdGgKKworICAgIGRlZiBpc192YWxpZChzZWxmKToKKyAgICAgICAgcmV0dXJuIFRydWUKKwor
ICAgIGRlZiBfZGVzY3BhdGhfd2l0aF9zZXAoc2VsZiwgc2VwKToKKyAgICAgICAgcmV0dXJuIHNl
bGYubmFtZQorCisKK2NsYXNzIENvbW1vbkJhc2VEaXJlY3RvcnkoQ29tbW9uRGlyZWN0b3J5KToK
KyAgICAiIiIKKyAgICBDbGFzcyBkZXNjcmliaW5nIGEgYmFzZSBkaXJlY3RvcnkgdGhhdCBpcyBu
b3QgbG9jYXRlZCBhdCBhbnkgc3BlY2lmaWMgcGxhY2UuCisgICAgRm9yIGV4YW1wbGU6IGJ1aWxk
IG91dHB1dCBkaXJlY3RvcnksIHRlbXAgZGlyZWN0b3J5CisgICAgIiIiCisgICAgZGVmIF9faW5p
dF9fKHNlbGYsIGRpcmVjdG9yeV9uYW1lKToKKyAgICAgICAgYXNzZXJ0IGRpcmVjdG9yeV9uYW1l
CisgICAgICAgIENvbW1vbkRpcmVjdG9yeS5fX2luaXRfXyhzZWxmLCBOb25lLCBkaXJlY3Rvcnlf
bmFtZSkKKworICAgIGRlZiBpc192YWxpZChzZWxmKToKKyAgICAgICAgcmV0dXJuIFRydWUKKwor
ICAgIGRlZiBfZGVzY3BhdGhfd2l0aF9zZXAoc2VsZiwgc2VwKToKKyAgICAgICAgcmV0dXJuIHNl
bGYubmFtZSArIHNlcAorCisKK2NsYXNzIENvbW1vblN1YkRpcmVjdG9yeShDb21tb25EaXJlY3Rv
cnkpOgorICAgICIiIgorICAgIENsYXNzIGRlc2NyaWJpbmcgYSBzdWJkaXJlY3RvcnkgdW5kZXIg
YSByb290LSwgYmFzZS0gb3Igb3RoZXIgc3ViLWRpcmVjdG9yeS4KKyAgICAiIiIKKyAgICBkZWYg
X19pbml0X18oc2VsZiwgcGFyZW50X2RpcmVjdG9yeSwgZGlyZWN0b3J5X25hbWUpOgorICAgICAg
ICBhc3NlcnQgcGFyZW50X2RpcmVjdG9yeQorICAgICAgICBhc3NlcnQgaXNpbnN0YW5jZShwYXJl
bnRfZGlyZWN0b3J5LCBDb21tb25EaXJlY3RvcnkpCisgICAgICAgIGFzc2VydCBzZWxmLmlzX3Zh
bGlkX3N1YmRpcmVjdG9yeV9uYW1lKGRpcmVjdG9yeV9uYW1lKQorICAgICAgICBDb21tb25EaXJl
Y3RvcnkuX19pbml0X18oc2VsZiwgcGFyZW50X2RpcmVjdG9yeSwgZGlyZWN0b3J5X25hbWUpCisg
ICAgICAgIHNlbGYuZGlyZWN0b3JpZXNbJy4uJ10gPSBwYXJlbnRfZGlyZWN0b3J5CisKKyAgICBA
c3RhdGljbWV0aG9kCisgICAgZGVmIGlzX3ZhbGlkX3N1YmRpcmVjdG9yeV9uYW1lKG5hbWUpOgor
ICAgICAgICByZXR1cm4gbmFtZSBhbmQgbmFtZSAhPSAnLicgYW5kIG5hbWUgIT0gJy4uJyBhbmQg
Jy8nIG5vdCBpbiBuYW1lIGFuZCAnXFwnIG5vdCBpbiBuYW1lCisKKyAgICBkZWYgaXNfdmFsaWQo
c2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLnBhcmVudF9kaXJlY3RvcnkgYW5kIHNlbGYucGFy
ZW50X2RpcmVjdG9yeS5pc192YWxpZCgpIGFuZCBzZWxmLmlzX3ZhbGlkX3N1YmRpcmVjdG9yeV9u
YW1lKHNlbGYubmFtZSkKKworICAgIGRlZiBpc19lbXB0eShzZWxmKToKKyAgICAgICAgYXNzZXJ0
IGxlbihzZWxmLmRpcmVjdG9yaWVzKSA+PSAyCisgICAgICAgIHJldHVybiBsZW4oc2VsZi5kaXJl
Y3RvcmllcykgPD0gMgorCisgICAgZGVmIF9kZXNjcGF0aF93aXRoX3NlcChzZWxmLCBzZXApOgor
ICAgICAgICByZXR1cm4gc2VsZi5wYXJlbnRfZGlyZWN0b3J5Ll9kZXNjcGF0aF93aXRoX3NlcChz
ZXApICsgc2VsZi5uYW1lICsgc2VwCisKKworY2xhc3MgQ29tbW9uREVGSU5FKG9iamVjdCk6Cisg
ICAgIiIiCisgICAgQ2xhc3MgZGVzY3JpYmluZyBhIGdlbmVyYWwgRU5BQkxFXy4uLiBmbGFnLCBv
ciBzaW1pbGFyCisgICAgIiIiCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGZsYWdfbmFtZSk6Cisg
ICAgICAgIGFzc2VydCBmbGFnX25hbWUKKyAgICAgICAgc2VsZi5mbGFnX25hbWUgPSBmbGFnX25h
bWUKKworICAgIGRlZiBfX2hhc2hfXyhzZWxmKToKKyAgICAgICAgcmV0dXJuIGhhc2goc2VsZi5m
bGFnX25hbWUpCisKKyAgICBkZWYgX19lcV9fKHNlbGYsIG90aGVyKToKKyAgICAgICAgYXNzZXJ0
IG5vdCBvdGhlciBvciBpc2luc3RhbmNlKG90aGVyLCBDb21tb25ERUZJTkUpCisgICAgICAgIGFz
c2VydCBub3Qgb3RoZXIgb3Igc2VsZiBpcyBvdGhlciBvciBzZWxmLmZsYWdfbmFtZSAhPSBvdGhl
ci5mbGFnX25hbWUKKyAgICAgICAgcmV0dXJuIHNlbGYgaXMgb3RoZXIKKworICAgIGRlZiBfX25l
X18oc2VsZiwgb3RoZXIpOgorICAgICAgICBhc3NlcnQgbm90IG90aGVyIG9yIGlzaW5zdGFuY2Uo
b3RoZXIsIENvbW1vbkRFRklORSkKKyAgICAgICAgYXNzZXJ0IG5vdCBvdGhlciBvciBzZWxmIGlz
IG90aGVyIG9yIHNlbGYuZmxhZ19uYW1lICE9IG90aGVyLmZsYWdfbmFtZQorICAgICAgICByZXR1
cm4gc2VsZiBpcyBub3Qgb3RoZXIKKworCisjID09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09CisKK2NsYXNzIENvbW1vbkluZm8ob2JqZWN0KToKKyAgICAiIiIKKyAg
ICBTdHVmZiBjb21tb24gdG8gYWxsIHBsYXRmb3JtIHByb2plY3QgZmlsZXMgd2l0aGluIHRoZSBz
YW1lIGNoZWNrb3V0LgorICAgIEhvbGRzIGFsbCBkaXJlY3RvcmllcyBhbmQgYWxsIGZpbGVzIG9m
IHRoZSBjaGVja291dC4KKyAgICAiIiIKKyAgICBkZWYgX19pbml0X18oc2VsZiwgcHJvamVjdF9u
YW1lLCBzY21fYWJzcGF0aCwgb3B0aW9ucz1Ob25lLCBmaWxlc3lzdGVtPU5vbmUpOgorICAgICAg
ICBhc3NlcnQgcHJvamVjdF9uYW1lCisgICAgICAgIGFzc2VydCBzY21fYWJzcGF0aAorICAgICAg
ICAjIG5vbi1wbGF0Zm9ybS1zcGVjaWZpYyBuYW1lIG9mIHRoZSBwcm9qZWN0CisgICAgICAgIHNl
bGYucHJvamVjdF9uYW1lID0gcHJvamVjdF9uYW1lCisgICAgICAgIHNlbGYuc2NtX2Fic3BhdGgg
PSBzY21fYWJzcGF0aAorICAgICAgICAjIG9wdGlvbnMgdG8gdXNlCisgICAgICAgIHNlbGYub3B0
aW9ucyA9IG9wdGlvbnMgb3IgQ29tbW9uT3B0aW9ucygpCisgICAgICAgICMgdGhlIGZpbGUgc3lz
dGVtIG9iamVjdCB0byB1c2UgKHNlcGFyYXRlIGNsYXNzIHRvIGFsbG93IG1vY2tpbmcpCisgICAg
ICAgIHNlbGYuZmlsZXN5c3RlbSA9IGZpbGVzeXN0ZW0gb3IgRmlsZVN5c3RlbSgpCisgICAgICAg
ICMgU3RvcmUgYWxsIGRpcmVjdG9yaWVzIGFuZCBhbGwgZmlsZXMgZm9yIHF1aWNrIHJlZmVyZW5j
ZQorICAgICAgICBzZWxmLmFsbF9kaXJlY3RvcmllcyA9IHNldCgpCisgICAgICAgIHNlbGYuYWxs
X2ZpbGVzID0gc2V0KCkKKyAgICAgICAgIyBTdG9yZSBhbGwgZmxhZ3MgKG1hcCBmbGFnIG5hbWUg
LT4gQ29tbW9uREVGSU5FIG9iamVjdCkKKyAgICAgICAgc2VsZi5hbGxfREVGSU5FcyA9IHt9Cisg
ICAgICAgICMgZmlsZSBzeXN0ZW0gcm9vdCBkaXJlY3RvcnkKKyAgICAgICAgc2VsZi5yb290X2Rp
cmVjdG9yeSA9IHNlbGYuY3JlYXRlX3Jvb3RfZGlyZWN0b3J5KCkKKyAgICAgICAgIyBTQ00gYmFz
ZSBkaXJlY3RvcnkgLSB0aGlzIGlzIHJlbGF0aXZlLCBidXQgdGhlIGV4YWN0IGxvY2F0aW9uIGlz
IGlycmVsZXZhbnQKKyAgICAgICAgIyAoV2UgYXNzdW1lIG5vIGZpbGUgb3IgZGlyZWN0b3J5IHRo
YXQgaGFzIGFuIGFic29sdXRlIHBhdGggaXMgbG9jYXRlZCB3aXRoaW4gdGhlIFNDTSBkaXJlY3Rv
cnkuKQorICAgICAgICBzZWxmLnNjbV9kaXJlY3RvcnkgPSBzZWxmLmNyZWF0ZV9zY21fZGlyZWN0
b3J5KCIke1NDTX0iLCBzY21fYWJzcGF0aCkKKyAgICAgICAgIyBidWlsZCBvdXRwdXQgZGlyZWN0
b3J5CisgICAgICAgICMgKFRoaXMgbWF5IHdlbGwgYmUgbG9jYXRlZCB1bmRlciB0aGUgU0NNIHJv
b3QgZGlyZWN0b3J5LCBidXQgd2UgYXNzdW1lIG5vIGFic29sdXRlIG9yIHJlbGF0aXZlIHBhdGgg
d2lsbCBsZWFkIGludG8gaXQpCisgICAgICAgIHNlbGYuYnVpbGRfZGlyZWN0b3J5ID0gc2VsZi5j
cmVhdGVfYmFzZV9kaXJlY3RvcnkoIiR7QlVJTER9IikKKyAgICAgICAgIyBYY29kZS1zcGVjaWZp
YyBkaXJlY3RvcmllcworICAgICAgICAjIChBcyB3aXRoIHRoZSBhYm92ZSB3ZSBkb24ndCBjYXJl
IGFib3V0IHRoZSBleGFjdCBsb2NhdGlvbiBhbmQgYXNzdW1lIHRoZXkgZG9uJ3QgaW50cnVkZSBv
biBlYWNoIG90aGVyKQorICAgICAgICBzZWxmLkRFVkVMT1BFUl9ESVJfZGlyZWN0b3J5ID0gc2Vs
Zi5jcmVhdGVfYmFzZV9kaXJlY3RvcnkoIiR7REVWfSIpIAorICAgICAgICBzZWxmLlNES1JPT1Rf
ZGlyZWN0b3J5ID0gc2VsZi5jcmVhdGVfYmFzZV9kaXJlY3RvcnkoIiR7U0RLfSIpCisgICAgICAg
IHNlbGYuQ09ORklHVVJBVElPTl9URU1QX0RJUl9kaXJlY3RvcnkgPSBzZWxmLmNyZWF0ZV9iYXNl
X2RpcmVjdG9yeSgiJHtURU1QfSIpCisKKyAgICBkZWYgdmluZm8oc2VsZiwgbXNnLCB2ZXJib3Np
dHk9Q29tbW9uT3B0aW9ucy5WRVJCT1NJVFlfVkVSWV9WRVJCT1NFKToKKyAgICAgICAgaWYgc2Vs
Zi5vcHRpb25zLnZlcmJvc2l0eSgpID49IHZlcmJvc2l0eToKKyAgICAgICAgICAgIHByaW50ICJJ
TkZPOiAiICsgbXNnCisKKyAgICBkZWYgaW5mbyhzZWxmLCBtc2csIHZlcmJvc2l0eT1Db21tb25P
cHRpb25zLlZFUkJPU0lUWV9WRVJCT1NFKToKKyAgICAgICAgaWYgc2VsZi5vcHRpb25zLnZlcmJv
c2l0eSgpID49IHZlcmJvc2l0eToKKyAgICAgICAgICAgIHByaW50ICJJTkZPOiAiICsgbXNnCisK
KyAgICBkZWYgd2FybmluZyhzZWxmLCBtc2cpOgorICAgICAgICBpZiBzZWxmLm9wdGlvbnMudmVy
Ym9zaXR5KCkgPj0gQ29tbW9uT3B0aW9ucy5WRVJCT1NJVFlfTk9STUFMOgorICAgICAgICAgICAg
c3lzLnN0ZGVyci53cml0ZSgiV0FSTklORzogJXNcbiIgJSBtc2cpCisKKyAgICBkZWYgZXJyb3Io
c2VsZiwgbXNnKToKKyAgICAgICAgc3lzLnN0ZGVyci53cml0ZSgiRVJST1I6ICVzXG4iICUgbXNn
KQorCisgICAgZGVmIHZlcmlmeShzZWxmLCBleHByLCBtc2cpOgorICAgICAgICBpZiBub3QgZXhw
cjoKKyAgICAgICAgICAgIHNlbGYuZXJyb3IobXNnKQorCisgICAgZGVmIGNyZWF0ZV9yb290X2Rp
cmVjdG9yeShzZWxmKToKKyAgICAgICAgcm9vdF9kaXJlY3RvcnkgPSBDb21tb25Sb290RGlyZWN0
b3J5KCkKKyAgICAgICAgc2VsZi5hbGxfZGlyZWN0b3JpZXMuYWRkKHJvb3RfZGlyZWN0b3J5KQor
ICAgICAgICByZXR1cm4gcm9vdF9kaXJlY3RvcnkKKworICAgIGRlZiBjcmVhdGVfc2NtX2RpcmVj
dG9yeShzZWxmLCBkaXJlY3RvcnlfbmFtZSwgc2NtX2Fic3BhdGgpOgorICAgICAgICBhc3NlcnQg
c2NtX2Fic3BhdGgKKyAgICAgICAgc2NtX2RpcmVjdG9yeSA9IENvbW1vblNDTURpcmVjdG9yeShk
aXJlY3RvcnlfbmFtZSwgc2VsZi5yb290X2RpcmVjdG9yeSwgc2NtX2Fic3BhdGgpCisgICAgICAg
IHNlbGYuYWxsX2RpcmVjdG9yaWVzLmFkZChzY21fZGlyZWN0b3J5KQorICAgICAgICByZXR1cm4g
c2NtX2RpcmVjdG9yeQorCisgICAgZGVmIGNyZWF0ZV9iYXNlX2RpcmVjdG9yeShzZWxmLCBkaXJl
Y3RvcnlfbmFtZSk6CisgICAgICAgIGFzc2VydCBkaXJlY3RvcnlfbmFtZQorICAgICAgICBiYXNl
X2RpcmVjdG9yeSA9IENvbW1vbkJhc2VEaXJlY3RvcnkoZGlyZWN0b3J5X25hbWUpCisgICAgICAg
IHNlbGYuYWxsX2RpcmVjdG9yaWVzLmFkZChiYXNlX2RpcmVjdG9yeSkKKyAgICAgICAgcmV0dXJu
IGJhc2VfZGlyZWN0b3J5CisKKyAgICBkZWYgY3JlYXRlX3N1YmRpcmVjdG9yeShzZWxmLCBwYXJl
bnRfZGlyZWN0b3J5LCBkaXJlY3RvcnlfbmFtZSk6CisgICAgICAgIGFzc2VydCBwYXJlbnRfZGly
ZWN0b3J5CisgICAgICAgIGFzc2VydCBpc2luc3RhbmNlKHBhcmVudF9kaXJlY3RvcnksIENvbW1v
bkRpcmVjdG9yeSkKKyAgICAgICAgYXNzZXJ0IGRpcmVjdG9yeV9uYW1lCisgICAgICAgIGFzc2Vy
dCBDb21tb25TdWJEaXJlY3RvcnkuaXNfdmFsaWRfc3ViZGlyZWN0b3J5X25hbWUoZGlyZWN0b3J5
X25hbWUpCisgICAgICAgIGFzc2VydCBub3QgcGFyZW50X2RpcmVjdG9yeS5nZXRfZW50cnkoZGly
ZWN0b3J5X25hbWUpCisgICAgICAgIHN1YmRpcmVjdG9yeSA9IENvbW1vblN1YkRpcmVjdG9yeShw
YXJlbnRfZGlyZWN0b3J5LCBkaXJlY3RvcnlfbmFtZSkKKyAgICAgICAgcGFyZW50X2RpcmVjdG9y
eS5hZGRfZGlyZWN0b3J5KHN1YmRpcmVjdG9yeSkKKyAgICAgICAgc2VsZi5hbGxfZGlyZWN0b3Jp
ZXMuYWRkKHN1YmRpcmVjdG9yeSkKKyAgICAgICAgcmV0dXJuIHN1YmRpcmVjdG9yeQorCisgICAg
ZGVmIGVuc3VyZV9zdWJkaXJlY3Rvcnkoc2VsZiwgcGFyZW50X2RpcmVjdG9yeSwgZGlyZWN0b3J5
X25hbWUpOgorICAgICAgICAnJycKKyAgICAgICAgRW5zdXJlcyB0aGF0IHBhcmVudF9kaXJlY3Rv
cnkgaGFzIGEgc3ViLWRpcmVjdG9yeSB3aXRoIHRoZSBnaXZlbiBuYW1lIGFuZCByZXR1cm5zIGl0
LgorICAgICAgICBDcmVhdGVzIGEgQ29tbW9uRGlyZWN0b3J5IG9iamVjdCBpZiBuZWNlc3Nhcnku
CisgICAgICAgICcnJworICAgICAgICBhc3NlcnQgcGFyZW50X2RpcmVjdG9yeQorICAgICAgICBh
c3NlcnQgaXNpbnN0YW5jZShwYXJlbnRfZGlyZWN0b3J5LCBDb21tb25EaXJlY3RvcnkpCisgICAg
ICAgIGFzc2VydCBkaXJlY3RvcnlfbmFtZQorICAgICAgICBhc3NlcnQgbm90IHBhcmVudF9kaXJl
Y3RvcnkuZ2V0X2ZpbGUoZGlyZWN0b3J5X25hbWUpCisgICAgICAgIHJldHVybiBwYXJlbnRfZGly
ZWN0b3J5LmdldF9kaXJlY3RvcnkoZGlyZWN0b3J5X25hbWUpIG9yIHNlbGYuY3JlYXRlX3N1YmRp
cmVjdG9yeShwYXJlbnRfZGlyZWN0b3J5LCBkaXJlY3RvcnlfbmFtZSkKKworICAgIGRlZiBlbnN1
cmVfc3ViZGlyZWN0b3J5X3BhdGhfbGlzdChzZWxmLCBiYXNlX2RpcmVjdG9yeSwgZGlyZWN0b3J5
X25hbWVfbGlzdCwgZGlyZWN0b3J5X21hcD1Ob25lKToKKyAgICAgICAgJycnCisgICAgICAgIEVu
c3VyZXMgdGhhdCB0aGUgcGF0aCBnaXZlbiBieSBhIGxpc3Qgb2YgaW5kaXZpZHVhbCBkaXJlY3Rv
cnkgbmFtZXMgZXhpc3RzLgorICAgICAgICBDcmVhdGVzIENvbW1vbkRpcmVjdG9yeSBhbmQgQ29t
bW9uRmlsZSBvYmplY3RzIHdoZXJlIG5lY2Vzc2FyeS4KKyAgICAgICAgZGlyZWN0b3J5X21hcCwg
aWYgZ2l2ZW4sIG1hcHMgc3BlY2lmaWMgc3RyaW5ncyB0byBzcGVjaWZpYyBkaXJlY3RvcmllcyB3
aGVuIGVuY291bnRlcmVkLgorICAgICAgICAnJycKKyAgICAgICAgYXNzZXJ0IGJhc2VfZGlyZWN0
b3J5CisgICAgICAgIGFzc2VydCBpc2luc3RhbmNlKGJhc2VfZGlyZWN0b3J5LCBDb21tb25EaXJl
Y3RvcnkpCisgICAgICAgIGRpcmVjdG9yeSA9IGJhc2VfZGlyZWN0b3J5CisgICAgICAgIGRpcmVj
dG9yeV9tYXAgPSBkaXJlY3RvcnlfbWFwIG9yIHt9CisgICAgICAgIGZvciBuYW1lIGluIGRpcmVj
dG9yeV9uYW1lX2xpc3Q6CisgICAgICAgICAgICBhc3NlcnQgbmFtZSBub3QgaW4gZGlyZWN0b3J5
X21hcCBvciBpc2luc3RhbmNlKGRpcmVjdG9yeV9tYXBbbmFtZV0sIENvbW1vbkRpcmVjdG9yeSkK
KyAgICAgICAgICAgIGRpcmVjdG9yeSA9IGRpcmVjdG9yeV9tYXAuZ2V0KG5hbWUpIG9yIHNlbGYu
ZW5zdXJlX3N1YmRpcmVjdG9yeShkaXJlY3RvcnksIG5hbWUpCisgICAgICAgIHJldHVybiBkaXJl
Y3RvcnkKKworICAgIGRlZiBlbnN1cmVfc3ViZGlyZWN0b3J5X3BhdGgoc2VsZiwgYmFzZV9kaXJl
Y3RvcnksIHJlbHBhdGgsIHNlcD1Ob25lLCBkaXJlY3RvcnlfbWFwPU5vbmUpOgorICAgICAgICAn
JycKKyAgICAgICAgRW5zdXJlcyB0aGF0IHRoZSBwYXRoIGdpdmVuIGJ5IGEgYmFzZSBkaXJlY3Rv
cnkgYW5kIHJlbGF0aXZlIHBhdGggZXhpc3RzLgorICAgICAgICBDcmVhdGVzIENvbW1vbkRpcmVj
dG9yeSBvYmplY3RzIHdoZXJlIG5lY2Vzc2FyeS4KKyAgICAgICAgZGlyZWN0b3J5X21hcCwgaWYg
Z2l2ZW4sIG1hcHMgc3BlY2lmaWMgc3RyaW5ncyB0byBzcGVjaWZpYyBkaXJlY3RvcmllcyB3aGVu
IGVuY291bnRlcmVkLgorICAgICAgICAnJycKKyAgICAgICAgYXNzZXJ0IGJhc2VfZGlyZWN0b3J5
CisgICAgICAgIGFzc2VydCBpc2luc3RhbmNlKGJhc2VfZGlyZWN0b3J5LCBDb21tb25EaXJlY3Rv
cnkpCisgICAgICAgIGlmIG5vdCByZWxwYXRoOgorICAgICAgICAgICAgcmV0dXJuIGJhc2VfZGly
ZWN0b3J5CisgICAgICAgIHNlcCA9IHNlcCBvciAnLycKKyAgICAgICAgaWYgcmVscGF0aC5zdGFy
dHN3aXRoKHNlcCk6CisgICAgICAgICAgICBiYXNlX2RpcmVjdG9yeSA9IHNlbGYucm9vdF9kaXJl
Y3RvcnkKKyAgICAgICAgICAgIHJlbHBhdGggPSByZWxwYXRoWzE6XQorICAgICAgICByZXR1cm4g
c2VsZi5lbnN1cmVfc3ViZGlyZWN0b3J5X3BhdGhfbGlzdChiYXNlX2RpcmVjdG9yeSwgcmVscGF0
aC5zdHJpcChzZXApLnNwbGl0KHNlcCksIGRpcmVjdG9yeV9tYXApCisgICAgICAgIAorICAgIGRl
ZiBjcmVhdGVfZmlsZShzZWxmLCBjb250YWluaW5nX2RpcmVjdG9yeSwgZmlsZV9uYW1lKToKKyAg
ICAgICAgYXNzZXJ0IGNvbnRhaW5pbmdfZGlyZWN0b3J5CisgICAgICAgIGFzc2VydCBpc2luc3Rh
bmNlKGNvbnRhaW5pbmdfZGlyZWN0b3J5LCBDb21tb25EaXJlY3RvcnkpCisgICAgICAgIGFzc2Vy
dCBDb21tb25GaWxlLmlzX3ZhbGlkX2ZpbGVfbmFtZShmaWxlX25hbWUpCisgICAgICAgIGFzc2Vy
dCBub3QgY29udGFpbmluZ19kaXJlY3RvcnkuZ2V0X2VudHJ5KGZpbGVfbmFtZSkKKyAgICAgICAg
ZmlsZSA9IENvbW1vbkZpbGUoY29udGFpbmluZ19kaXJlY3RvcnksIGZpbGVfbmFtZSkKKyAgICAg
ICAgY29udGFpbmluZ19kaXJlY3RvcnkuYWRkX2ZpbGUoZmlsZSkKKyAgICAgICAgc2VsZi5hbGxf
ZmlsZXMuYWRkKGZpbGUpCisgICAgICAgIHJldHVybiBmaWxlCisKKyAgICBkZWYgZW5zdXJlX2Zp
bGUoc2VsZiwgY29udGFpbmluZ19kaXJlY3RvcnksIGZpbGVfbmFtZSk6CisgICAgICAgIGFzc2Vy
dCBjb250YWluaW5nX2RpcmVjdG9yeQorICAgICAgICBhc3NlcnQgaXNpbnN0YW5jZShjb250YWlu
aW5nX2RpcmVjdG9yeSwgQ29tbW9uRGlyZWN0b3J5KQorICAgICAgICBhc3NlcnQgQ29tbW9uRmls
ZS5pc192YWxpZF9maWxlX25hbWUoZmlsZV9uYW1lKQorICAgICAgICBhc3NlcnQgbm90IGNvbnRh
aW5pbmdfZGlyZWN0b3J5LmdldF9kaXJlY3RvcnkoZmlsZV9uYW1lKQorICAgICAgICByZXR1cm4g
Y29udGFpbmluZ19kaXJlY3RvcnkuZ2V0X2ZpbGUoZmlsZV9uYW1lKSBvciBzZWxmLmNyZWF0ZV9m
aWxlKGNvbnRhaW5pbmdfZGlyZWN0b3J5LCBmaWxlX25hbWUpCisKKyAgICBkZWYgZW5zdXJlX2Zp
bGVfcGF0aF9saXN0KHNlbGYsIGJhc2VfZGlyZWN0b3J5LCBuYW1lX2xpc3QsIGRpcmVjdG9yeV9t
YXA9Tm9uZSk6CisgICAgICAgICcnJworICAgICAgICBFbnN1cmVzIHRoYXQgdGhlIHBhdGggZ2l2
ZW4gYnkgYSBsaXN0IG9mIGluZGl2aWR1YWwgZGlyZWN0b3J5IG5hbWVzIGFuZCBhIGZpbGUgbmFt
ZSBleGlzdHMuCisgICAgICAgIENyZWF0ZXMgQ29tbW9uRGlyZWN0b3J5IGFuZCBDb21tb25GaWxl
IG9iamVjdHMgd2hlcmUgbmVjZXNzYXJ5LgorICAgICAgICBkaXJlY3RvcnlfbWFwLCBpZiBnaXZl
biwgbWFwcyBzcGVjaWZpYyBzdHJpbmdzIHRvIHNwZWNpZmljIGRpcmVjdG9yaWVzIHdoZW4gZW5j
b3VudGVyZWQuCisgICAgICAgICcnJworICAgICAgICBhc3NlcnQgYmFzZV9kaXJlY3RvcnkKKyAg
ICAgICAgYXNzZXJ0IGlzaW5zdGFuY2UoYmFzZV9kaXJlY3RvcnksIENvbW1vbkRpcmVjdG9yeSkK
KyAgICAgICAgYXNzZXJ0IG5hbWVfbGlzdAorICAgICAgICBmaWxlX25hbWUgPSBuYW1lX2xpc3Qu
cG9wKCkKKyAgICAgICAgZGlyZWN0b3J5ID0gc2VsZi5lbnN1cmVfc3ViZGlyZWN0b3J5X3BhdGhf
bGlzdChiYXNlX2RpcmVjdG9yeSwgbmFtZV9saXN0LCBkaXJlY3RvcnlfbWFwKQorICAgICAgICBy
ZXR1cm4gc2VsZi5lbnN1cmVfZmlsZShkaXJlY3RvcnksIGZpbGVfbmFtZSkKKworICAgIGRlZiBl
bnN1cmVfZmlsZV9wYXRoKHNlbGYsIGJhc2VfZGlyZWN0b3J5LCByZWxwYXRoLCBzZXA9Tm9uZSwg
ZGlyZWN0b3J5X21hcD1Ob25lKToKKyAgICAgICAgJycnCisgICAgICAgIEVuc3VyZXMgdGhhdCB0
aGUgcGF0aCBnaXZlbiBieSBhIGJhc2UgZGlyZWN0b3J5IGFuZCByZWxhdGl2ZSBwYXRoLCBpbmNs
dWRpbmcgYSBmaWxlIG5hbWUsIGV4aXN0cy4KKyAgICAgICAgQ3JlYXRlcyBDb21tb25EaXJlY3Rv
cnkgYW5kIENvbW1vbkZpbGUgb2JqZWN0cyB3aGVyZSBuZWNlc3NhcnkuCisgICAgICAgIGRpcmVj
dG9yeV9tYXAsIGlmIGdpdmVuLCBtYXBzIHNwZWNpZmljIHN0cmluZ3MgdG8gc3BlY2lmaWMgZGly
ZWN0b3JpZXMgd2hlbiBlbmNvdW50ZXJlZC4KKyAgICAgICAgJycnCisgICAgICAgIGFzc2VydCBi
YXNlX2RpcmVjdG9yeQorICAgICAgICBhc3NlcnQgaXNpbnN0YW5jZShiYXNlX2RpcmVjdG9yeSwg
Q29tbW9uRGlyZWN0b3J5KQorICAgICAgICBhc3NlcnQgcmVscGF0aAorICAgICAgICBzZXAgPSBz
ZXAgb3IgJy8nCisgICAgICAgIGFzc2VydCBub3QgcmVscGF0aC5lbmRzd2l0aChzZXApCisgICAg
ICAgIGlmIHJlbHBhdGguc3RhcnRzd2l0aChzZXApOgorICAgICAgICAgICAgYmFzZV9kaXJlY3Rv
cnkgPSBzZWxmLnJvb3RfZGlyZWN0b3J5CisgICAgICAgICAgICByZWxwYXRoID0gcmVscGF0aFsx
Ol0KKyAgICAgICAgcmV0dXJuIHNlbGYuZW5zdXJlX2ZpbGVfcGF0aF9saXN0KGJhc2VfZGlyZWN0
b3J5LCByZWxwYXRoLnN0cmlwKHNlcCkuc3BsaXQoc2VwKSwgZGlyZWN0b3J5X21hcCkKKworICAg
IGRlZiBfZGlyZWN0b3J5X2Fic3BhdGgoc2VsZiwgZGlyZWN0b3J5LCBzZXAsIGRpcmVjdG9yeV9t
YXApOgorICAgICAgICBtYXBwZWRfbmFtZSA9IGRpcmVjdG9yeV9tYXAuZ2V0KGRpcmVjdG9yeSkK
KyAgICAgICAgaWYgbWFwcGVkX25hbWUgaXMgbm90IE5vbmU6CisgICAgICAgICAgICByZXR1cm4g
bWFwcGVkX25hbWUKKyAgICAgICAgaWYgZGlyZWN0b3J5IGlzIHNlbGYucm9vdF9kaXJlY3Rvcnk6
CisgICAgICAgICAgICByZXR1cm4gJycKKyAgICAgICAgaWYgbm90IGRpcmVjdG9yeS5wYXJlbnRf
ZGlyZWN0b3J5OgorICAgICAgICAgICAgcmV0dXJuIGRpcmVjdG9yeS5uYW1lCisgICAgICAgIHJl
dHVybiBzZWxmLl9kaXJlY3RvcnlfYWJzcGF0aChkaXJlY3RvcnkucGFyZW50X2RpcmVjdG9yeSwg
c2VwLCBkaXJlY3RvcnlfbWFwKSArIHNlcCArIGRpcmVjdG9yeS5uYW1lCisKKyAgICBkZWYgZGly
ZWN0b3J5X2Fic3BhdGgoc2VsZiwgZGlyZWN0b3J5LCBzZXA9Tm9uZSwgZGlyZWN0b3J5X21hcD1O
b25lKToKKyAgICAgICAgJycnCisgICAgICAgIFJldHVybnMgdGhlIGFic29sdXRlIHBhdGggc3Ry
aW5nIGZvciB0aGUgZ2l2ZW4gZGlyZWN0b3J5LgorICAgICAgICBkaXJlY3RvcnlfbWFwLCBpZiBn
aXZlbiwgbWFwcyBzcGVjaWZpYyBkaXJlY3RvcmllcyB0byBkZXNpcmVkIG91dHB1dCBzdHJpbmdz
LgorICAgICAgICBJZiBhIGRpcmVjdG9yeSBpcyBmb3VuZCBpbiBkaXJlY3RvcnlfbWFwLCBpdHMg
cGFyZW50IGRpcmVjdG9yaWVzIGFyZSBOT1QgbG9va2VkIGF0IQorICAgICAgICA9PiBtYWtlIHN1
cmUgZGlyZWN0b3J5X21hcCBjb250YWlucyB0aGUgZnVsbCBwYXRoICh3aXRob3V0IHRyYWlsaW5n
IHNlcGFyYXRvcikgd2hlcmUgZGVzaXJlZAorICAgICAgICAnJycKKyAgICAgICAgYXNzZXJ0IGRp
cmVjdG9yeQorICAgICAgICBhc3NlcnQgaXNpbnN0YW5jZShkaXJlY3RvcnksIENvbW1vbkRpcmVj
dG9yeSkKKyAgICAgICAgc2VwID0gc2VwIG9yICcvJworICAgICAgICBkaXJlY3RvcnlfbWFwID0g
ZGlyZWN0b3J5X21hcCBvciB7fQorICAgICAgICBpZiBkaXJlY3RvcnkgaXMgc2VsZi5yb290X2Rp
cmVjdG9yeSBhbmQgZGlyZWN0b3J5IG5vdCBpbiBkaXJlY3RvcnlfbWFwOgorICAgICAgICAgICAg
cmV0dXJuIHNlcAorICAgICAgICByZXR1cm4gc2VsZi5fZGlyZWN0b3J5X2Fic3BhdGgoZGlyZWN0
b3J5LCBzZXAsIGRpcmVjdG9yeV9tYXApCisKKyAgICBkZWYgZGlyZWN0b3J5X3JlbHBhdGgoc2Vs
ZiwgYmFzZV9kaXJlY3RvcnksIGRpcmVjdG9yeSwgc2VwPU5vbmUpOgorICAgICAgICAnJycKKyAg
ICAgICAgUmV0dXJucyB0aGUgcmVsYXRpdmUgcGF0aCBzdHJpbmcgZnJvbSBiYXNlX2RpcmVjdG9y
eSB0byBkaXJlY3RvcnkuCisgICAgICAgICcnJworICAgICAgICBhc3NlcnQgYmFzZV9kaXJlY3Rv
cnkKKyAgICAgICAgYXNzZXJ0IGlzaW5zdGFuY2UoYmFzZV9kaXJlY3RvcnksIENvbW1vbkRpcmVj
dG9yeSkKKyAgICAgICAgYXNzZXJ0IGRpcmVjdG9yeQorICAgICAgICBhc3NlcnQgaXNpbnN0YW5j
ZShkaXJlY3RvcnksIENvbW1vbkRpcmVjdG9yeSkKKyAgICAgICAgaWYgYmFzZV9kaXJlY3Rvcnkg
PT0gZGlyZWN0b3J5OgorICAgICAgICAgICAgcmV0dXJuICcuJworICAgICAgICBkaXJlY3Rvcnlf
bGlzdDEgPSBiYXNlX2RpcmVjdG9yeS5kaXJlY3RvcnlfbGlzdCgpCisgICAgICAgIGRpcmVjdG9y
eV9saXN0MiA9IGRpcmVjdG9yeS5kaXJlY3RvcnlfbGlzdCgpCisgICAgICAgIGFzc2VydCBkaXJl
Y3RvcnlfbGlzdDEKKyAgICAgICAgYXNzZXJ0IGRpcmVjdG9yeV9saXN0MgorICAgICAgICBhc3Nl
cnQgZGlyZWN0b3J5X2xpc3QxWzBdID09IGRpcmVjdG9yeV9saXN0MlswXQorICAgICAgICB3aGls
ZSBkaXJlY3RvcnlfbGlzdDEgYW5kIGRpcmVjdG9yeV9saXN0MiBhbmQgZGlyZWN0b3J5X2xpc3Qx
WzBdID09IGRpcmVjdG9yeV9saXN0MlswXToKKyAgICAgICAgICAgIGRpcmVjdG9yeV9saXN0MS5w
b3AoMCkKKyAgICAgICAgICAgIGRpcmVjdG9yeV9saXN0Mi5wb3AoMCkKKyAgICAgICAgcmV0dXJu
IHNlcC5qb2luKG1hcChsYW1iZGEgZCA6ICcuLicsIGRpcmVjdG9yeV9saXN0MSkgKyBtYXAobGFt
YmRhIGQgOiBkLm5hbWUsIGRpcmVjdG9yeV9saXN0MikpCisKKyAgICBkZWYgZmlsZV9hYnNwYXRo
KHNlbGYsIGZpbGUsIHNlcD1Ob25lLCBkaXJlY3RvcnlfbWFwPU5vbmUpOgorICAgICAgICAnJycK
KyAgICAgICAgUmV0dXJucyB0aGUgYWJzb2x1dGUgcGF0aCBzdHJpbmcgZm9yIHRoZSBnaXZlbiBm
aWxlLgorICAgICAgICBkaXJlY3RvcnlfbWFwLCBpZiBnaXZlbiwgbWFwcyBzcGVjaWZpYyBkaXJl
Y3RvcmllcyB0byBkZXNpcmVkIG91dHB1dCBzdHJpbmdzLgorICAgICAgICBJZiBhIGRpcmVjdG9y
eSBpcyBmb3VuZCBpbiBkaXJlY3RvcnlfbWFwLCBpdHMgcGFyZW50IGRpcmVjdG9yaWVzIGFyZSBO
T1QgbG9va2VkIGF0IQorICAgICAgICA9PiBtYWtlIHN1cmUgZGlyZWN0b3J5X21hcCBjb250YWlu
cyB0aGUgZnVsbCBwYXRoICh3aXRob3V0IHRyYWlsaW5nIHNlcGFyYXRvcikgd2hlcmUgZGVzaXJl
ZAorICAgICAgICAnJycKKyAgICAgICAgYXNzZXJ0IGZpbGUKKyAgICAgICAgYXNzZXJ0IGlzaW5z
dGFuY2UoZmlsZSwgQ29tbW9uRmlsZSkKKyAgICAgICAgc2VwID0gc2VwIG9yICcvJworICAgICAg
ICByZXR1cm4gc2VsZi5fZGlyZWN0b3J5X2Fic3BhdGgoZmlsZS5kaXJlY3RvcnksIHNlcCwgZGly
ZWN0b3J5X21hcCBvciB7fSkgKyBzZXAgKyBmaWxlLm5hbWUKKworICAgIGRlZiBmaWxlX3JlbHBh
dGgoc2VsZiwgYmFzZV9kaXJlY3RvcnksIGZpbGUsIHNlcD1Ob25lKToKKyAgICAgICAgJycnCisg
ICAgICAgIFJldHVybnMgdGhlIHJlbGF0aXZlIHBhdGggc3RyaW5nIGZyb20gYmFzZV9kaXJlY3Rv
cnkgdG8gZmlsZS4KKyAgICAgICAgJycnCisgICAgICAgIGFzc2VydCBiYXNlX2RpcmVjdG9yeQor
ICAgICAgICBhc3NlcnQgaXNpbnN0YW5jZShiYXNlX2RpcmVjdG9yeSwgQ29tbW9uRGlyZWN0b3J5
KQorICAgICAgICBhc3NlcnQgZmlsZQorICAgICAgICBhc3NlcnQgaXNpbnN0YW5jZShmaWxlLCBD
b21tb25GaWxlKQorICAgICAgICBpZiBiYXNlX2RpcmVjdG9yeSA9PSBmaWxlLmRpcmVjdG9yeToK
KyAgICAgICAgICAgIHJldHVybiBmaWxlLm5hbWUKKyAgICAgICAgc2VwID0gc2VwIG9yICcvJwor
ICAgICAgICByZXR1cm4gc2VsZi5kaXJlY3RvcnlfcmVscGF0aChiYXNlX2RpcmVjdG9yeSwgZmls
ZS5kaXJlY3RvcnksIHNlcCkgKyBzZXAgKyBmaWxlLm5hbWUKKworICAgIGRlZiBlbnN1cmVfREVG
SU5FKHNlbGYsIGZsYWdfbmFtZSk6CisgICAgICAgIHJldHVybiBzZWxmLmFsbF9ERUZJTkVzLnNl
dGRlZmF1bHQoZmxhZ19uYW1lLCBDb21tb25ERUZJTkUoZmxhZ19uYW1lKSkKZGlmZiAtLWdpdCBh
L1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvY29tbW9uL3Byb2plY3QvZ3JvdXBiYXNlLnB5IGIvVG9v
bHMvU2NyaXB0cy93ZWJraXRweS9jb21tb24vcHJvamVjdC9ncm91cGJhc2UucHkKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDg4ZGUwYQotLS0gL2Rldi9udWxsCisrKyBiL1Rv
b2xzL1NjcmlwdHMvd2Via2l0cHkvY29tbW9uL3Byb2plY3QvZ3JvdXBiYXNlLnB5CkBAIC0wLDAg
KzEsMTUxIEBACisjIS91c3IvYmluL2VudiBweXRob24KKyMgQ29weXJpZ2h0IChDKSAyMDEyIEdv
b2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjCisjIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorIyBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMgYXJlCisjIG1ldDoKKyMKKyMgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorIyBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisjICAgICogUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorIyBjb3B5cmln
aHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyCisjIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUKKyMgZGlzdHJpYnV0aW9uLgorIyAgICAqIE5laXRoZXIgdGhlIG5hbWUg
b2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyMgY29udHJpYnV0b3JzIG1heSBi
ZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyMgdGhp
cyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyMK
KyMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5E
IENPTlRSSUJVVE9SUworIyAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorIyBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyMgQSBQQVJUSUNVTEFS
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQK
KyMgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsCisjIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyMgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisjIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WQorIyBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCisjIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorIyBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorCitmcm9tIHdl
YmtpdHB5LmNvbW1vbi5wcm9qZWN0LnByb2plY3QgaW1wb3J0ICoKKworCitjbGFzcyBQcm9qZWN0
R3JvdXBDb250YWluZXIob2JqZWN0KToKKyAgICAiIiIKKyAgICBDbGFzcyBob2xkaW5nIGEgbGlz
dCBvZiBQcm9qZWN0R3JvdXAgb2JqZWN0cy4KKyAgICAiIiIKKyAgICBkZWYgX19pbml0X18oc2Vs
Zik6CisgICAgICAgIHNlbGYuZ3JvdXBzID0gc2V0KCkKKworICAgIGRlZiBpc192YWxpZChzZWxm
KToKKyAgICAgICAgcmV0dXJuIFRydWUKKworICAgIGRlZiBpc19lbXB0eShzZWxmKToKKyAgICAg
ICAgcmV0dXJuIG5vdCBzZWxmLmdyb3VwcworCisgICAgZGVmIGFkZF9ncm91cChzZWxmLCBncm91
cCk6CisgICAgICAgIGFzc2VydCBncm91cAorICAgICAgICBhc3NlcnQgaXNpbnN0YW5jZShncm91
cCwgUHJvamVjdEdyb3VwKQorICAgICAgICBhc3NlcnQgZ3JvdXAgbm90IGluIHNlbGYuZ3JvdXBz
CisgICAgICAgIHNlbGYuZ3JvdXBzLmFkZChncm91cCkKKworICAgIGRlZiByZW1vdmVfZ3JvdXAo
c2VsZiwgZ3JvdXApOgorICAgICAgICBhc3NlcnQgZ3JvdXAKKyAgICAgICAgYXNzZXJ0IGlzaW5z
dGFuY2UoZ3JvdXAsIFByb2plY3RHcm91cCkKKyAgICAgICAgYXNzZXJ0IGdyb3VwIGluIHNlbGYu
Z3JvdXBzCisgICAgICAgIHNlbGYuZ3JvdXBzLnJlbW92ZShncm91cCkKKworCitjbGFzcyBQcm9q
ZWN0R3JvdXAoUHJvamVjdERpcmVjdG9yeVJlZmVyZW5jZSwgUHJvamVjdEdyb3VwQ29udGFpbmVy
LCBQcm9qZWN0RmlsZVJlZmVyZW5jZUNvbnRhaW5lcik6CisgICAgIiIiCisgICAgQ2xhc3MgaG9s
ZGluZyBhIGxpc3Qgb2YgZmlsZSByZWZlcmVuY2VzIGFuZCBhIGxpc3Qgb2Ygc3VwLWdyb3Vwcy4K
KyAgICBBbHNvLCBjb3JyZXNwb25kcyB0byBhIHNwZWNpZmljIGRpcmVjdG9yeS4KKyAgICAiIiIK
KyAgICBJRF9DT1VOVEVSID0gMAorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGNvbnRhaW5lcj1O
b25lLCBkaXJlY3Rvcnk9Tm9uZSk6CisgICAgICAgIGFzc2VydCBub3QgY29udGFpbmVyIG9yIGlz
aW5zdGFuY2UoY29udGFpbmVyLCBQcm9qZWN0R3JvdXBDb250YWluZXIpCisgICAgICAgIGFzc2Vy
dCBub3QgZGlyZWN0b3J5IG9yIGlzaW5zdGFuY2UoZGlyZWN0b3J5LCBDb21tb25EaXJlY3Rvcnkp
CisgICAgICAgIFByb2plY3REaXJlY3RvcnlSZWZlcmVuY2UuX19pbml0X18oc2VsZiwgZGlyZWN0
b3J5KQorICAgICAgICBQcm9qZWN0R3JvdXBDb250YWluZXIuX19pbml0X18oc2VsZikKKyAgICAg
ICAgUHJvamVjdEZpbGVSZWZlcmVuY2VDb250YWluZXIuX19pbml0X18oc2VsZikKKyAgICAgICAg
UHJvamVjdEdyb3VwLklEX0NPVU5URVIgKz0gMQorICAgICAgICBzZWxmLl9pZCA9IFByb2plY3RH
cm91cC5JRF9DT1VOVEVSCisgICAgICAgIHNlbGYuY29udGFpbmVyID0gY29udGFpbmVyCisKKyAg
ICBkZWYgX19oYXNoX18oc2VsZik6CisgICAgICAgIHJldHVybiBoYXNoKHNlbGYuX2lkKQorCisg
ICAgZGVmIF9fZXFfXyhzZWxmLCBvdGhlcik6CisgICAgICAgIGFzc2VydCBzZWxmIGlzIG90aGVy
IG9yIHNlbGYuX2lkICE9IG90aGVyLl9pZAorICAgICAgICByZXR1cm4gc2VsZiBpcyBvdGhlcgor
CisgICAgZGVmIF9fbmVfXyhzZWxmLCBvdGhlcik6CisgICAgICAgIGFzc2VydCBub3Qgb3RoZXIg
b3IgaXNpbnN0YW5jZShvdGhlciwgc2VsZi5Qcm9qZWN0R3JvdXApCisgICAgICAgIGFzc2VydCBz
ZWxmIGlzIG90aGVyIG9yIHNlbGYuX2lkICE9IG90aGVyLl9pZAorICAgICAgICByZXR1cm4gc2Vs
ZiBpcyBub3Qgb3RoZXIKKworICAgIGRlZiBpc192YWxpZChzZWxmKToKKyAgICAgICAgcmV0dXJu
IFByb2plY3REaXJlY3RvcnlSZWZlcmVuY2UuaXNfdmFsaWQoc2VsZikgYW5kIFByb2plY3RHcm91
cENvbnRhaW5lci5pc192YWxpZChzZWxmKSBhbmQgUHJvamVjdEZpbGVSZWZlcmVuY2VDb250YWlu
ZXIuaXNfdmFsaWQoc2VsZikKKworICAgIGRlZiBpc19lbXB0eShzZWxmKToKKyAgICAgICAgcmV0
dXJuIFByb2plY3RHcm91cENvbnRhaW5lci5pc19lbXB0eShzZWxmKSBhbmQgUHJvamVjdEZpbGVS
ZWZlcmVuY2VDb250YWluZXIuaXNfZW1wdHkoc2VsZikKKworICAgIGRlZiBzZXRfY29udGFpbmVy
KHNlbGYsIGNvbnRhaW5lcik6CisgICAgICAgIGFzc2VydCBub3QgY29udGFpbmVyIG9yIGlzaW5z
dGFuY2UoY29udGFpbmVyLCBQcm9qZWN0R3JvdXBDb250YWluZXIpCisgICAgICAgIGFzc2VydCBu
b3Qgc2VsZi5jb250YWluZXIKKyAgICAgICAgc2VsZi5jb250YWluZXIgPSBjb250YWluZXIKKwor
CitjbGFzcyBHcm91cFByb2plY3RGaWxlUmVmZXJlbmNlKFByb2plY3RGaWxlUmVmZXJlbmNlKToK
KyAgICAiIiIKKyAgICBGaWxlIHJlZmVyZW5jZSBjbGFzcyBpbiBhIGdyb3VwIHByb2plY3QuIFN0
b3JlcyB0aGUgY29udGFpbmVyICh1c3UuIGEgZ3JvdXApLgorICAgICIiIgorICAgIGRlZiBfX2lu
aXRfXyhzZWxmLCBmaWxlPU5vbmUsIGNvbnRhaW5lcj1Ob25lKTogICAgICAgIAorICAgICAgICBh
c3NlcnQgbm90IGNvbnRhaW5lciBvciBpc2luc3RhbmNlKGNvbnRhaW5lciwgUHJvamVjdEZpbGVS
ZWZlcmVuY2VDb250YWluZXIpCisgICAgICAgIFByb2plY3RGaWxlUmVmZXJlbmNlLl9faW5pdF9f
KHNlbGYsIGZpbGUpCisgICAgICAgIHNlbGYuY29udGFpbmVyID0gY29udGFpbmVyCisKKyAgICBk
ZWYgaXNfdmFsaWQoc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLmNvbnRhaW5lciBhbmQgUHJv
amVjdEZpbGVSZWZlcmVuY2UuaXNfdmFsaWQoc2VsZikKKworICAgIGRlZiBzZXRfY29udGFpbmVy
KHNlbGYsIGNvbnRhaW5lcik6CisgICAgICAgIGFzc2VydCBub3QgY29udGFpbmVyIG9yIGlzaW5z
dGFuY2UoY29udGFpbmVyLCBQcm9qZWN0RmlsZVJlZmVyZW5jZUNvbnRhaW5lcikKKyAgICAgICAg
YXNzZXJ0IG5vdCBzZWxmLmNvbnRhaW5lcgorICAgICAgICBzZWxmLmNvbnRhaW5lciA9IGNvbnRh
aW5lcgorCisKK2NsYXNzIEdyb3VwUHJvamVjdChQcm9qZWN0KToKKyAgICAiIiIKKyAgICBCYXNl
IGNsYXNzIGZvciBwcm9qZWN0cyB0aGF0IGNvbnNpc3Qgb2YgbmVzdGVkIGdyb3VwcyBhbmQgZmls
ZXMgKGUuZy4sIFhjb2RlLCBWaXN1YWwgU3R1ZGlvKS4KKworICAgIERlcml2ZWQgY2xhc3NlcyBN
VVNUIGRlZmluZToKKyAgICAtKSBhIGNsYXNzIHZhcmlhYmxlICdQUk9KRUNUX0dST1VQX0NMQVNT
JyB0aGF0IGNvbnRhaW5zIHRoZSBjbGFzcyBvZiBncm91cHMgd2l0aGluIHRoZSBwcm9qZWN0Cisg
ICAgIiIiCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGNvbW1vbiwgZmlsZSwgcHJvamVjdF9uYW1l
PU5vbmUpOgorICAgICAgICBQcm9qZWN0Ll9faW5pdF9fKHNlbGYsIGNvbW1vbiwgZmlsZSwgcHJv
amVjdF9uYW1lKQorICAgICAgICAjIENvdW50ZXIgb3ZlciBhbGwgZ3JvdXBzIGluIHRoZSBwcm9q
ZWN0LiBUaGlzIGFsc28gc2ltcGxpZmllcyB1bmlxdWVuZXNzIGFuZCBzYW1lbmVzcyB0ZXN0cy4K
KyAgICAgICAgc2VsZi5ncm91cF9pZF9jb3VudGVyID0gMAorICAgICAgICAjIG1haW4gZ3JvdXAg
Y29udGFpbmluZyBhbGwgb3RoZXIgZ3JvdXBzCisgICAgICAgIHNlbGYubWFpbl9ncm91cCA9IE5v
bmUKKyAgICAgICAgIyBhbGwgZ3JvdXBzIGZvciBxdWljayByZWZlcmVuY2UKKyAgICAgICAgc2Vs
Zi5hbGxfZ3JvdXBzID0gc2V0KCkKKworICAgIGRlZiBzZXRfbWFpbl9ncm91cChzZWxmLCBncm91
cCk6CisgICAgICAgIGFzc2VydCBub3QgZ3JvdXAgb3IgaXNpbnN0YW5jZShncm91cCwgUHJvamVj
dEdyb3VwKQorICAgICAgICBhc3NlcnQgbm90IGdyb3VwIG9yIG5vdCBzZWxmLm1haW5fZ3JvdXAK
KyAgICAgICAgYXNzZXJ0IG5vdCBncm91cCBvciBub3QgZ3JvdXAuY29udGFpbmVyCisgICAgICAg
IHNlbGYubWFpbl9ncm91cCA9IGdyb3VwCisKKyAgICBkZWYgYWRkX2dyb3VwKHNlbGYsIGdyb3Vw
KToKKyAgICAgICAgYXNzZXJ0IGdyb3VwCisgICAgICAgIGFzc2VydCBpc2luc3RhbmNlKGdyb3Vw
LCBQcm9qZWN0R3JvdXApCisgICAgICAgIGFzc2VydCBncm91cCBub3QgaW4gc2VsZi5hbGxfZ3Jv
dXBzCisgICAgICAgIHNlbGYuYWxsX2dyb3Vwcy5hZGQoZ3JvdXApCisKKyAgICBkZWYgcmVtb3Zl
X2dyb3VwKHNlbGYsIGdyb3VwKToKKyAgICAgICAgYXNzZXJ0IGdyb3VwCisgICAgICAgIGFzc2Vy
dCBpc2luc3RhbmNlKGdyb3VwLCBQcm9qZWN0R3JvdXApCisgICAgICAgIGFzc2VydCBncm91cCBp
biBzZWxmLmFsbF9ncm91cHMKKyAgICAgICAgc2VsZi5hbGxfZ3JvdXBzLnJlbW92ZShncm91cCkK
KwpkaWZmIC0tZ2l0IGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9jb21tb24vcHJvamVjdC9tYWtl
YmFzZS5weSBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvY29tbW9uL3Byb2plY3QvbWFrZWJhc2Uu
cHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTFiNmJmNAotLS0gL2Rldi9u
dWxsCisrKyBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvY29tbW9uL3Byb2plY3QvbWFrZWJhc2Uu
cHkKQEAgLTAsMCArMSwyNTQgQEAKKyMhL3Vzci9iaW4vZW52IHB5dGhvbgorIyBDb3B5cmlnaHQg
KEMpIDIwMTIgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisjIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucyBhcmUKKyMgbWV0OgorIworIyAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisjIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyMgICAg
KiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
CisjIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIKKyMgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorIyBkaXN0cmlidXRpb24uCisjICAgICogTmVpdGhl
ciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworIyBjb250cmli
dXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQg
ZnJvbQorIyB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJt
aXNzaW9uLgorIworIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQg
SE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisjICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisjIExJTUlURUQgVE8sIFRIRSBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorIyBB
IFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhF
IENPUFlSSUdIVAorIyBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyMgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorIyBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyMg
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZCisjIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyMgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisjIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
CisKK2Zyb20gd2Via2l0cHkuY29tbW9uLnByb2plY3QuYmFzZSBpbXBvcnQgKgorCisKK2NsYXNz
IElubGluZUNvbW1lbnRzKG9iamVjdCk6CisgICAgIiIiCisgICAgTWl4aW4gY2xhc3MgZm9yIGlu
bGluZSBjb21tZW50cyBhc3NpZ25lZCB0byBzdGF0ZW1lbnRzLgorICAgICIiIgorICAgIGRlZiBf
X2luaXRfXyhzZWxmKToKKyAgICAgICAgc2VsZi5pbmxpbmVfY29tbWVudHMgPSBbXSAgIyBhcnJh
eSBvZiBzdHJpbmdzLCByZXByZXNlbnRpbmcgbGluZXMgb2YgY29tbWVudHMKKworCitjbGFzcyBT
dGF0ZW1lbnQob2JqZWN0KToKKyAgICAiIiIKKyAgICBCYXNlIGNsYXNzIGZvciBzdGF0ZW1lbnRz
IGNvbnRhaW5lZCBpbiBhIFN0YXRlbWVudExpc3QuCisgICAgRXZlcnkgc3RhdGVtZW50IGFsc28g
c3RvcmVzIHdpdGggaXQgYSBzZXJpZXMgb2YgY29tbWVudCBsaW5lcyB0aGF0IGFyZSBhc3NvY2lh
dGVkIHdpdCBpdC4KKyAgICAiIiIKKyAgICBkZWYgX19pbml0X18oc2VsZiwgY29udGFpbmluZ19z
dGF0ZW1lbnRfbGlzdCk6CisgICAgICAgIGFzc2VydCBjb250YWluaW5nX3N0YXRlbWVudF9saXN0
CisgICAgICAgIGFzc2VydCBpc2luc3RhbmNlKGNvbnRhaW5pbmdfc3RhdGVtZW50X2xpc3QsIFN0
YXRlbWVudExpc3QpCisgICAgICAgIHNlbGYuY29udGFpbmluZ19zdGF0ZW1lbnRfbGlzdCA9IGNv
bnRhaW5pbmdfc3RhdGVtZW50X2xpc3QKKyAgICAgICAgc2VsZi5jb21tZW50cyA9IFtdCisKKyAg
ICBkZWYgcHJlcGVuZF9jb21tZW50KHNlbGYsIGNvbW1lbnQpOgorICAgICAgICBzZWxmLmNvbW1l
bnRzLmluc2VydCgwLCBjb21tZW50KQorCisgICAgZGVmIGFwcGVuZF9jb21tZW50KHNlbGYsIGNv
bW1lbnQpOgorICAgICAgICBzZWxmLmNvbW1lbnRzLmFwcGVuZChjb21tZW50KQorCisKK2NsYXNz
IFN0YXRlbWVudExpc3QoU3RhdGVtZW50KToKKyAgICAiIiIKKyAgICBDbGFzcyBjb250YWluaW5n
IGEgbGlzdCBvZiBzdGF0ZW1lbnRzLiBFaXRoZXIgdG9wLWxldmVsLCBvciBjb250YWluZWQgaW4g
YSBDb25kaXRpb25CcmFuY2guCisgICAgIiIiCisgICAgZGVmIF9faW5pdF9fKHNlbGYpOgorICAg
ICAgICBTdGF0ZW1lbnQuX19pbml0X18oc2VsZikKKyAgICAgICAgc2VsZi5zdGF0ZW1lbnRzID0g
W10KKyAgICAgICAgc2VsZi5jb25kaXRpb25zID0gW10gICMgcXVpY2sgYWNjZXNzIHRvIGFsbCBj
b25kaXRpb25zIGluIHRoZSBzdGF0ZW1lbnQgbGlzdAorCisgICAgZGVmIGFwcGVuZChzZWxmLCBz
dGF0ZW1lbnQpOgorICAgICAgICBzZWxmLnN0YXRlbWVtdHMuYXBwZW5kKHN0YXRlbWVudCkKKyAg
ICAgICAgaWYgaXNpbnN0YW5jZShzdGF0ZW1lbnQsIENvbmRpdGlvbik6CisgICAgICAgICAgICBz
ZWxmLmNvbmRpdGlvbnMuYXBwZW5kKGNvbmRpdGlvbikKKworICAgIGRlZiBwYXJlbnRfc3RhdGVt
ZW50X2xpc3Qoc2VsZik6CisgICAgICAgIGFzc2VydCBGYWxzZSAjIHRvIGJlIGltcGxlbWVudGVk
IGJ5IHN1Yi1jbGFzc2VzCisgICAgICAgIHJldHVybiBOb25lCisKKworY2xhc3MgQ29tbWVudChT
dGF0ZW1lbnQpOgorICAgICIiIgorICAgIENsYXNzIGhvbGRpbmcgYSBzaW5nbGUgY29tbWVudCBs
aW5lIGF0IHRoZSBzYW1lIGxldmVsIGFzIG90aGVyIHN0YXRlbWVudHMuCisgICAgIiIiCisgICAg
ZGVmIF9faW5pdF9fKHNlbGYsIGNvbnRhaW5pbmdfc3RhdGVtZW50X2xpc3QsIGNvbW1lbnQpOgor
ICAgICAgICBTdGF0ZW1lbnQuX19pbml0X18oc2VsZiwgY29udGFpbmluZ19zdGF0ZW1lbnRfbGlz
dCkKKyAgICAgICAgc2VsZi5jb21tZW50ID0gY29tbWVudAorCisKK2NsYXNzIEFzc2lnbm1lbnQo
U3RhdGVtZW50KToKKyAgICAiIiIKKyAgICBCYXNlIGNsYXNzIGZvciBhc3NpZ25tZW50IG9mIGEg
bGlzdCBvZiB2YWx1ZXMgdG8gYSB2YXJpYWJsZQorICAgICIiIgorICAgIGRlZiBfX2luaXRfXyhz
ZWxmLCBjb250YWluaW5nX3N0YXRlbWVudF9saXN0LCB2YXJpYWJsZSwgb3BlcmF0b3IpOgorICAg
ICAgICBhc3NlcnQgdmFyaWFibGUKKyAgICAgICAgYXNzZXJ0IG9wZXJhdG9yCisgICAgICAgIFN0
YXRlbWVudC5fX2luaXRfXyhzZWxmLCBjb250YWluaW5nX3N0YXRlbWVudF9saXN0KQorICAgICAg
ICBzZWxmLnZhcmlhYmxlID0gdmFyaWFibGUKKyAgICAgICAgc2VsZi5vcGVyYXRvciA9IG9wZXJh
dG9yCisKKworY2xhc3MgRmlsZVJlZmVyZW5jZXNBc3NpZ25tZW50KEFzc2lnbm1lbnQsIFByb2pl
Y3RGaWxlUmVmZXJlbmNlQ29udGFpbmVyKToKKyAgICAiIiIKKyAgICBBc3NpZ25tZW50IG9mIGEg
bGlzdCBvZiBmaWxlIHJlZmVyZW5jZXMgdG8gYSB2YXJpYWJsZS4KKyAgICAiIiIKKyAgICBkZWYg
X19pbml0X18oc2VsZiwgY29udGFpbmluZ19zdGF0ZW1lbnRfbGlzdCwgdmFyaWFibGUsIG9wZXJh
dG9yKToKKyAgICAgICAgQXNzaWdubWVudC5fX2luaXRfXyhzZWxmLCBjb250YWluaW5nX3N0YXRl
bWVudF9saXN0LCB2YXJpYWJsZSwgb3BlcmF0b3IpCisgICAgICAgIFByb2plY3RGaWxlUmVmZXJl
bmNlQ29udGFpbmVyLl9faW5pdF9fKHNlbGYpCisKKworY2xhc3MgRGlyZWN0b3J5UmVmZXJlbmNl
c0Fzc2lnbm1lbnQoQXNzaWdubWVudCwgUHJvamVjdERpcmVjdG9yeVJlZmVyZW5jZUNvbnRhaW5l
cik6CisgICAgIiIiCisgICAgQXNzaWdubWVudCBvZiBhIGxpc3Qgb2YgZmlsZSByZWZlcmVuY2Vz
IHRvIGEgdmFyaWFibGUuCisgICAgIiIiCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGNvbnRhaW5p
bmdfc3RhdGVtZW50X2xpc3QsIHZhcmlhYmxlLCBvcGVyYXRvcik6CisgICAgICAgIEFzc2lnbm1l
bnQuX19pbml0X18oc2VsZiwgY29udGFpbmluZ19zdGF0ZW1lbnRfbGlzdCwgdmFyaWFibGUsIG9w
ZXJhdG9yKQorICAgICAgICBQcm9qZWN0RGlyZWN0b3J5UmVmZXJlbmNlQ29udGFpbmVyLl9faW5p
dF9fKHNlbGYpCisKKworY2xhc3MgQXJiaXRhcnlBc3NpZ25tZW50KEFzc2lnbm1lbnQpOgorICAg
ICIiIgorICAgIEFzc2lnbm1lbnQgb2YgYSBsaXN0IG9mIG5vbi1maWxlIHZhbHVlcyB0byBhIHZh
cmlhYmxlLiBEb2VzIG5vdCBjb250YWluIChtYW5hZ2VkKSBmaWxlIHJlZmVyZW5jZXMuCisgICAg
IiIiCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGNvbnRhaW5pbmdfc3RhdGVtZW50X2xpc3QsIHZh
cmlhYmxlLCBvcGVyYXRvcik6CisgICAgICAgIEFzc2lnbm1lbnQuX19pbml0X18oc2VsZiwgY29u
dGFpbmluZ19zdGF0ZW1lbnRfbGlzdCwgdmFyaWFibGUsIG9wZXJhdG9yKQorICAgICAgICBzZWxm
LnZhbHVlcyA9IFtdICAjIG9yZGVyZWQgbGlzdCBvZiBhcmJpdHJhcnkgdmFsdWVzIChzdHJpbmdz
KQorCisgICAgZGVmIGFkZF92YWx1ZShzZWxmLCB2YWx1ZSk6CisgICAgICAgIHNlbGYudmFsdWVz
LmFwcGVuZCh2YWx1ZSkKKworCitjbGFzcyBDb25kaXRpb24oU3RhdGVtZW50KToKKyAgICAiIiIK
KyAgICBDb250YWluZXIgY2xhc3MgZm9yIGEgbGlzdCBvZiBDb25kaXRpb25CcmFuY2ggb2JqZWN0
cy4KKyAgICAiIiIKKyAgICBkZWYgX19pbml0X18oc2VsZiwgY29udGFpbmluZ19zdGF0ZW1lbnRf
bGlzdCk6CisgICAgICAgIFN0YXRlbWVudC5fX2luaXRfXyhzZWxmLCBjb250YWluaW5nX3N0YXRl
bWVudF9saXN0KQorICAgICAgICBzZWxmLmJyYW5jaGVzID0gW10gICMgbGlzdCBvZiBDb25kaXRp
b25CcmFuY2ggb2JqZWN0cworCisgICAgZGVmIGFkZF9icmFuY2goc2VsZiwgYnJhbmNoKToKKyAg
ICAgICAgYXNzZXJ0IGJyYW5jaAorICAgICAgICBhc3NlcnQgaXNpbnN0YW5jZShicmFuY2gsIENv
bmRpdGlvbkJyYW5jaCkKKyAgICAgICAgYXNzZXJ0IHNlbGYuYnJhbmNoZXMgb3Igbm90IGlzaW5z
dGFuY2UoYnJhbmNoLCBFbHNlQ29uZGl0aW9uQnJhbmNoKQorICAgICAgICBhc3NlcnQgbm90IHNl
bGYuYnJhbmNoZXMgb3Igbm90IGlzaW5zdGFuY2Uoc2VsZi5icmFuY2hlc1stMV0sIEVsc2VDb25k
aXRpb25CcmFuY2gpCisgICAgICAgIHNlbGYuYnJhbmNoZXMuYXBwZW5kKGJyYW5jaCkKKworCitj
bGFzcyBDb25kaXRpb25CcmFuY2goU3RhdGVtZW50TGlzdCk6CisgICAgIiIiCisgICAgQmFzZSBj
bGFzcyBmb3IgY29uZGl0aW9uIGJyYW5jaGVzLgorICAgICIiIgorICAgIGRlZiBfX2luaXRfXyhz
ZWxmLCBjb250YWluaW5nX2NvbmRpdGlvbik6CisgICAgICAgIGFzc2VydCBjb250YWluaW5nX2Nv
bmRpdGlvbgorICAgICAgICBTdGF0ZW1lbnRMaXN0Ll9faW5pdF9fKHNlbGYpCisgICAgICAgIHNl
bGYuY29udGFpbmluZ19jb25kaXRpb24gPSBjb25kaXRpb24KKworICAgIGRlZiBwYXJlbnRfc3Rh
dGVtZW50X2xpc3Qoc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLmNvbnRhaW5pbmdfY29uZGl0
aW9uLmNvbnRhaW5pbmdfc3RhdGVtZW50X2xpc3QKKworCitjbGFzcyBUZXN0Q29uZGl0aW9uQnJh
bmNoKENvbmRpdGlvbkJyYW5jaCk6CisgICAgIiIiCisgICAgQmFzZSBjbGFzcyBmb3IgY29uZGl0
aW9uIGJyYW5jaGVzIHRoYXQgaGF2ZSBhIHRlc3QgKGkuZS4sIGFyZSBub3QgJ2Vsc2UnKS4KKyAg
ICAiIiIKKyAgICBkZWYgX19pbml0X18oc2VsZiwgY29udGFpbmluZ19jb25kaXRpb24sIHRlc3Qp
OgorICAgICAgICBDb25kaXRpb25CcmFuY2guX19pbml0X18oc2VsZiwgY29udGFpbmluZ19jb25k
aXRpb24pCisgICAgICAgIHNlbGYudGVzdCA9IHRlc3QKKworCitjbGFzcyBBcmJpdHJhcnlUZXN0
Q29uZGl0aW9uQnJhbmNoKFRlc3RDb25kaXRpb25CcmFuY2gpOgorICAgICIiIgorICAgIFN0b3Jl
cyBhIHZlcmJhdGltIHRlc3QgZXhwcmVzc2lvbiB0aGF0IGRvZXMgbm90IHJlZmVyIGEgZGVmaW5l
LgorICAgICIiIgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBjb250YWluaW5nX2NvbmRpdGlvbiwg
dGVzdCk6CisgICAgICAgIFRlc3RDb25kaXRpb25CcmFuY2guX19pbml0X18oc2VsZiwgY29udGFp
bmluZ19jb25kaXRpb24sIHRlc3QpCisKKworY2xhc3MgREVGSU5FQ29uZGl0aW9uQnJhbmNoKFRl
c3RDb25kaXRpb25CcmFuY2gpOgorICAgICIiIgorICAgIFN0b3JlcyB0aGUgZGVmaW5lIHZhcmlh
YmxlIChlLmcuLCBFTkFCTEVfVklERU8pIGluIGFkZGl0aW9uIHRvIHRoZSB2ZXJiYXRpbSB0ZXN0
IGV4cHJlc3Npb24uCisgICAgIiIiCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGNvbnRhaW5pbmdf
Y29uZGl0aW9uLCB0ZXN0LCBkZWZpbmUsIG5lZ2F0ZWQ9RmFsc2UpOgorICAgICAgICBhc3NlcnQg
ZGVmaW5lCisgICAgICAgIGFzc2VydCBpc2luc3RhbmNlKGRlZmluZSwgQ29tbW9uREVGSU5FKQor
ICAgICAgICBUZXN0Q29uZGl0aW9uQnJhbmNoLl9faW5pdF9fKHNlbGYsIGNvbnRhaW5pbmdfY29u
ZGl0aW9uLCB0ZXN0KQorICAgICAgICBzZWxmLmRlZmluZSA9IGRlZmluZQorICAgICAgICBzZWxm
Lm5lZ2F0ZWQgPSBuZWdhdGVkCisKKyAgICBkZWYgc2F0aXNmaWVzKHZhcmlhYmxlLCBuZWdhdGVk
PUZhbHNlKToKKyAgICAgICAgcmV0dXJuIHNlbGYudmFyaWFibGUgPT0gdmFyaWFibGUgYW5kIHNl
bGYubmVnYXRlZCA9PSBuZWdhdGVkCisKKworY2xhc3MgRWxzZUNvbmRpdGlvbkJyYW5jaChDb25k
aXRpb25CcmFuY2gpOgorICAgICIiIgorICAgIFN0b3JlcyBhbiAnZWxzZScgY29uZGl0aW9uIGJy
YW5jaC4gVGhpcyBtdXN0IGJlIHRoZSBsYXN0IGJyYW5jaCBpbiB0aGUgY29udGFpbmluZyBjb2Rp
dGlvbiwgYW5kIGNhbm5vdCBiZSB0aGUgb25seSBvbmUuCisgICAgIiIiCisgICAgZGVmIF9faW5p
dF9fKHNlbGYpOgorICAgICAgICBDb25kaXRpb25CcmFuY2guX19pbml0X18oc2VsZikKKworCisj
IEZJWE1FOiAnTWFrZUZpbGUnIG1ha2VzIGl0IHNvdW5kIGxpa2UgaXQgc2hvdWxkIGJlIGEgQ29t
bW9uRmlsZSBvYmplY3QgLSB0cnkgdG8gZmluZCBhIGJldHRlciBuYW1lCitjbGFzcyBNYWtlRmls
ZShTdGF0ZW1lbnRMaXN0KToKKyAgICAiIiIKKyAgICBDbGFzcyBzdG9yaW5nIHRoZSBjb250ZW50
cyBvZiBhIHNpbmdsZSBtYWtlLWZpbGUuIEEgbWFrZS1iYXNlZCBwcm9qZWN0IG1heSBiZSBzcHJl
YWQgb3ZlciBtdWx0aXBsZSBtYWtlIGZpbGVzLgorICAgICIiIgorICAgIGRlZiBfX2luaXRfXyhz
ZWxmLCBmaWxlLCBwYXJlbnRfbWFrZV9maWxlPU5vbmUpOgorICAgICAgICBhc3NlcnQgZmlsZQor
ICAgICAgICBhc3NlcnQgaXNpbnN0YW5jZShmaWxlLCBDb21tb25GaWxlKQorICAgICAgICBTdGF0
ZW1lbnRMaXN0Ll9faW5pdF9fKHNlbGYpCisgICAgICAgIHNlbGYuZmlsZSA9IGZpbGUKKyAgICAg
ICAgc2VsZi5wYXJlbnRfbWFrZV9maWxlID0gcGFyZW50X21ha2VfZmlsZQorICAgICAgICBzZWxm
LnN1Yl9tYWtlX2ZpbGVzID0gc2V0KCkKKworICAgIGRlZiBfX2hhc2hfXyhzZWxmKToKKyAgICAg
ICAgcmV0dXJuIGhhc2goc2VsZi5maWxlKQorCisgICAgZGVmIF9fZXFfXyhzZWxmLCBvdGhlcik6
CisgICAgICAgIGFzc2VydCBub3Qgb3RoZXIgb3IgaXNpbnN0YW5jZShvdGhlciwgTWFrZUZpbGUp
CisgICAgICAgIGFzc2VydCBub3Qgb3RoZXIgb3Igc2VsZiBpcyBvdGhlciBvciBzZWxmLmZpbGUg
aXMgbm90IG90aGVyLmZpbGUKKyAgICAgICAgcmV0dXJuIHNlbGYgaXMgb3RoZXIKKworICAgIGRl
ZiBfX25lX18oc2VsZiwgb3RoZXIpOgorICAgICAgICBhc3NlcnQgbm90IG90aGVyIG9yIGlzaW5z
dGFuY2Uob3RoZXIsIE1ha2VGaWxlKQorICAgICAgICBhc3NlcnQgbm90IG90aGVyIG9yIHNlbGYg
aXMgb3RoZXIgb3Igc2VsZi5maWxlIGlzIG5vdCBvdGhlci5maWxlCisgICAgICAgIHJldHVybiBz
ZWxmIGlzIG5vdCBvdGhlcgorCisgICAgZGVmIHBhcmVudF9zdGF0ZW1lbnRfbGlzdChzZWxmKToK
KyAgICAgICAgcmV0dXJuIE5vbmUKKworICAgIGRlZiBhZGRfc3ViX21ha2VfZmlsZShzZWxmLCBt
YWtlX2ZpbGUpOgorICAgICAgICBhc3NlcnQgbWFrZV9maWxlCisgICAgICAgIGFzc2VydCBpc2lu
c3RhbmNlKG1ha2VfZmlsZSwgTWFrZUZpbGUpCisgICAgICAgIGFzc2VydCBtYWtlX2ZpbGUgbm90
IGluIHNlbGYuc3ViX21ha2VfZmlsZXMKKyAgICAgICAgc2VsZi5zdWJfbWFrZV9maWxlcy5hZGQo
bWFrZV9maWxlKQorCisKK2NsYXNzIE1ha2VQcm9qZWN0KFByb2plY3QpOgorICAgICIiIgorICAg
IEJhc2UgY2xhc3MgZm9yIHByb2plY3RzIHRoYXQgYXJlIG1ha2UtZmlsZSBsaWtlIChlLmcuLCBR
dCwgR05VbWFrZWZpbGUpCisgICAgU3VjaCBwcm9qZWN0cyBtYXkgYmUgc3ByZWFkIG92ZXIgc2V2
ZXJhbCBpbmRpdmlkdWFsIGZpbGVzLgorICAgIFRoZSBNYWtlRmlsZSBvYmplY3QgcGFzc2VkIGlu
IHRvIHRoZSBQcm9qZWN0IG9iamVjdCBzaG91bGQgcmVwcmVzZW50IHRoZSByb290IHByb2plY3Qg
ZmlsZSB0aGF0IGluY2x1ZGVzIHRoZSByZXN0LgorICAgICIiIgorICAgIGRlZiBfX2luaXRfXyhz
ZWxmLCBjb21tb24sIHJvb3RfbWFrZV9maWxlLCBwcm9qZWN0X25hbWU9Tm9uZSk6CisgICAgICAg
IGFzc2VydCByb290X21ha2VfZmlsZQorICAgICAgICBhc3NlcnQgaXNpbnN0YW5jZShyb290X21h
a2VfZmlsZSwgTWFrZUZpbGUpCisgICAgICAgIFByb2plY3QuX19pbml0X18oc2VsZiwgY29tbW9u
LCByb290X21ha2VfZmlsZS5maWxlLCBwcm9qZWN0X25hbWUpCisgICAgICAgIHNlbGYucm9vdF9t
YWtlX2ZpbGUgPSByb290X21ha2VfZmlsZQorICAgICAgICBzZWxmLmFsbF9tYWtlX2ZpbGVzID0g
c2V0KCkKKyAgICAgICAgc2VsZi5hZGRfbWFrZV9maWxlKHJvb3RfbWFrZV9maWxlKQorCisgICAg
ZGVmIGFkZF9tYWtlX2ZpbGUoc2VsZiwgbWFrZV9maWxlKToKKyAgICAgICAgYXNzZXJ0IG1ha2Vf
ZmlsZQorICAgICAgICBhc3NlcnQgaXNpbnN0YW5jZShtYWtlX2ZpbGUsIE1ha2VGaWxlKQorICAg
ICAgICBhc3NlcnQgbWFrZV9maWxlIG5vdCBpbiBzZWxmLmFsbF9tYWtlX2ZpbGVzCisgICAgICAg
IHNlbGYuYWxsX21ha2VfZmlsZXMuYWRkKG1ha2VfZmlsZSkKKworCmRpZmYgLS1naXQgYS9Ub29s
cy9TY3JpcHRzL3dlYmtpdHB5L2NvbW1vbi9wcm9qZWN0L29wdGlvbnMucHkgYi9Ub29scy9TY3Jp
cHRzL3dlYmtpdHB5L2NvbW1vbi9wcm9qZWN0L29wdGlvbnMucHkKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMC4uYmIxOTRjYgotLS0gL2Rldi9udWxsCisrKyBiL1Rvb2xzL1Njcmlw
dHMvd2Via2l0cHkvY29tbW9uL3Byb2plY3Qvb3B0aW9ucy5weQpAQCAtMCwwICsxLDEzOCBAQAor
IyEvdXNyL2Jpbi9lbnYgcHl0aG9uCisjIENvcHlyaWdodCAoQykgMjAxMiBHb29nbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorIworIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMgbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorIyBt
ZXQ6CisjCisjICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorIyAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyMgY29weXJpZ2h0IG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorIyBp
biB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlCisjIGRpc3RyaWJ1dGlvbi4KKyMgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJ
bmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisjIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBl
bmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisjIHRoaXMgc29mdHdhcmUg
d2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisjCisjIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRP
UlMKKyMgIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QKKyMgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisjIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisjIE9XTkVSIE9S
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLAorIyBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UCisjIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorIyBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyMgVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAorIyAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UKKyMgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKworY2xhc3MgQ29tbW9uT3B0aW9u
cyhvYmplY3QpOgorICAgICIiIgorICAgIE9wdGlvbnMgZm9yIHByb2plY3QgZmlsZSBtYW5pcHVs
YXRpb24uCisgICAgIiIiCisgICAgIyBMZXQgZGVmYXVsdCBkZWNpZGUgb24gb3B0aW9uCisgICAg
VVNFX0RFRkFVTFQgPSAtMQorCisgICAgIyBPdXRwdXRzIG5vIG1lc3NhZ2VzIGF0IGFsbCwgZXhj
ZXB0IGVycm9ycworICAgIFZFUkJPU0lUWV9TSUxFTlQgPSAwCisgICAgIyBPdXRwdXRzIHdhcm5p
bmdzIG9ubHkKKyAgICBWRVJCT1NJVFlfTk9STUFMID0gMQorICAgICMgT3V0cHV0cyBicmllZiBt
ZXNzYWdlczogcmVhZCBwcm9qZWN0LCBtYW5pcHVsYXRpb24sIHdyaXRlIHByb2plY3QKKyAgICBW
RVJCT1NJVFlfVkVSQk9TRSA9IDIKKyAgICAjIE91dHB1dHMgZGV0YWlsZWQgaW5mb3JtYXRpb24g
Zm9yIGV2ZXJ5IG9wZXJhdGlvbgorICAgIFZFUkJPU0lUWV9WRVJZX1ZFUkJPU0UgPSAzCisgICAg
IyBEZWZhdWx0IHZlcmJvc2l0eQorICAgICNWRVJCT1NJVFlfREVGQVVMVCA9IFZFUkJPU0lUWV9O
T1JNQUwKKyAgICBWRVJCT1NJVFlfREVGQVVMVCA9IFZFUkJPU0lUWV9WRVJZX1ZFUkJPU0UKKwor
ICAgICMgSGVhZGVycyBoYXZlIHB1YmxpYyByb2xlCisgICAgSEVBREVSU19ST0xFX1BVQkxJQyA9
IDAKKyAgICAjIEhlYWRlcnMgaGF2ZSBwcml2YXRlIHJvbGUKKyAgICBIRUFERVJTX1JPTEVfUFJJ
VkFURSA9IDEKKyAgICAjIERlZmF1bHQgaGVhZGVycyByb2xlCisgICAgSEVBREVSU19ST0xFX0RF
RkFVTFQgPSBIRUFERVJTX1JPTEVfUFVCTElDCisKKyAgICAjIERvIG5vdCBvcGVyYXRlIG9uIHBs
YXRmb3JtCisgICAgUExBVEZPUk1fRElTQUJMRSA9IDAKKyAgICAjIE9wZXJhdGUgb24gcGxhdGZv
cm0KKyAgICBQTEFURk9STV9FTkFCTEUgPSAxCisgICAgIyBEZWZhdWx0IHBsYXRmb3JtIHN0YXRl
CisgICAgUExBVEZPUk1fREVGQVVMVCA9IFVTRV9ERUZBVUxUCisKKyAgICAjIFhjb2RlIChNYWMp
IHBsYXRmb3JtCisgICAgUExBVEZPUk1fWENPREUgPSAneCcKKyAgICAjIFZpc3VhbCBTdHVkaW8g
cGxhdGZvcm0KKyAgICBQTEFURk9STV9WUyA9ICd2JworICAgICMgQ2hyb21pdW0gcGxhdGZvcm0K
KyAgICBQTEFURk9STV9DSFJPTUlVTSA9ICdjJworICAgICMgUXQgcGxhdGZvcm0KKyAgICBQTEFU
Rk9STV9RVCA9ICdxJworICAgICMgQ01ha2UtYmFzZWQgcGxhdGZvcm0KKyAgICBQTEFURk9STV9D
TUFLRSA9ICdtJworCisgICAgZGVmIF9faW5pdF9fKHNlbGYpOgorICAgICAgICBzZWxmLl92ZXJi
b3NpdHkgPSBDb21tb25PcHRpb25zLlVTRV9ERUZBVUxUCisgICAgICAgIHNlbGYuX2hlYWRlcl9y
b2xlID0gQ29tbW9uT3B0aW9ucy5VU0VfREVGQVVMVAorICAgICAgICBzZWxmLl9wbGF0Zm9ybV9k
ZWZhdWx0ID0gVHJ1ZQorICAgICAgICBzZWxmLl9wbGF0Zm9ybXMgPSB7CisgICAgICAgICAgICBD
b21tb25PcHRpb25zLlBMQVRGT1JNX1hDT0RFOiAgICAgIENvbW1vbk9wdGlvbnMuUExBVEZPUk1f
REVGQVVMVCwKKyAgICAgICAgICAgIENvbW1vbk9wdGlvbnMuUExBVEZPUk1fVlM6ICAgICAgICAg
Q29tbW9uT3B0aW9ucy5QTEFURk9STV9ERUZBVUxULAorICAgICAgICAgICAgQ29tbW9uT3B0aW9u
cy5QTEFURk9STV9DSFJPTUlVTTogICBDb21tb25PcHRpb25zLlBMQVRGT1JNX0RFRkFVTFQsCisg
ICAgICAgICAgICBDb21tb25PcHRpb25zLlBMQVRGT1JNX1FUOiAgICAgICAgIENvbW1vbk9wdGlv
bnMuUExBVEZPUk1fREVGQVVMVCwKKyAgICAgICAgICAgIENvbW1vbk9wdGlvbnMuUExBVEZPUk1f
Q01BS0U6ICAgICAgQ29tbW9uT3B0aW9ucy5QTEFURk9STV9ERUZBVUxULAorICAgICAgICB9CisK
KyAgICBkZWYgdmVyYm9zaXR5KHNlbGYpOgorICAgICAgICBpZiBzZWxmLl92ZXJib3NpdHkgPT0g
Q29tbW9uT3B0aW9ucy5VU0VfREVGQVVMVDoKKyAgICAgICAgICAgIHJldHVybiBDb21tb25PcHRp
b25zLlZFUkJPU0lUWV9ERUZBVUxUCisgICAgICAgIHJldHVybiBzZWxmLl92ZXJib3NpdHkKKwor
ICAgIGRlZiBzZXRfdmVyYm9zaXR5KHNlbGYsIHZlcmJvc2l0eSk6CisgICAgICAgIHNlbGYuX3Zl
cmJvc2l0eSA9IHZlcmJvc2l0eQorCisgICAgZGVmIGhlYWRlcnNfcm9sZShzZWxmKToKKyAgICAg
ICAgaWYgc2VsZi5faGVhZGVyc19yb2xlID09IENvbW1vbk9wdGlvbnMuVVNFX0RFRkFVTFQ6Cisg
ICAgICAgICAgICByZXR1cm4gQ29tbW9uT3B0aW9ucy5IRUFERVJTX1JPTEVfREVGQVVMVAorICAg
ICAgICByZXR1cm4gc2VsZi5faGVhZGVyc19yb2xlCisKKyAgICBkZWYgc2V0X2hlYWRlcnNfcm9s
ZShzZWxmLCByb2xlKToKKyAgICAgICAgc2VsZi5faGVhZGVyc19yb2xlID0gcm9sZQorCisgICAg
ZGVmIHNldF9wbGF0Zm9ybV9kZWZhdWx0KHNlbGYsIGJvb2xfdmFsdWUpOgorICAgICAgICBzZWxm
Ll9wbGF0Zm9ybV9kZWZhdWx0ID0gYm9vbF92YWx1ZQorCisgICAgZGVmIHNldF9wbGF0Zm9ybShz
ZWxmLCBwbGF0Zm9ybSwgdmFsdWUpOgorICAgICAgICBhc3NlcnQgcGxhdGZvcm0gaW4gc2VsZi5f
cGxhdGZvcm1zCisgICAgICAgIHNlbGYuX3BsYXRmb3Jtc1twbGF0Zm9ybV0gPSB2YWx1ZQorCisg
ICAgZGVmIGlzX3BsYXRmb3JtX2VuYWJsZWQoc2VsZiwgcGxhdGZvcm0pOgorICAgICAgICBpZiBz
ZWxmLl9wbGF0Zm9ybXNbcGxhdGZvcm1dID09IENvbW1vbk9wdGlvbnMuUExBVEZPUk1fRU5BQkxF
OgorICAgICAgICAgICAgcmV0dXJuIFRydWUKKyAgICAgICAgaWYgc2VsZi5fcGxhdGZvcm1zW3Bs
YXRmb3JtXSA9PSBDb21tb25PcHRpb25zLlBMQVRGT1JNX0RJU0FCTEU6CisgICAgICAgICAgICBy
ZXR1cm4gRmFsc2UKKyAgICAgICAgYXNzZXJ0IHNlbGYuX3BsYXRmb3Jtc1twbGF0Zm9ybV0gPT0g
Q29tbW9uT3B0aW9ucy5VU0VfREVGQVVMVAorICAgICAgICByZXR1cm4gc2VsZi5fcGxhdGZvcm1f
ZGVmYXVsdAorCisgICAgZGVmIG1lcmdlKHNlbGYsIG90aGVyX29wdGlvbnMpOgorICAgICAgICAi
IiIKKyAgICAgICAgTWVyZ2VzICdvdGhlcl9vcHRpb25zJyBvbnRvIHRoaXMgb3B0aW9ucyBzZXQg
YW5kIHJldHVybnMgdGhlIGNvbWJpbmVkIG9wdGlvbnMuCisgICAgICAgICdvdGhlcl9vcHRpb25z
JyBoYXMgcHJlY2VkZW5jZSBpbiBjb25mbGljdCBjYXNlcyB0byBhbGxvdyBvdmVycmlkZXMuCisg
ICAgICAgICIiIgorICAgICAgICByZXN1bHQgPSBDb21tb25PcHRpb25zKCkKKyAgICAgICAgaWYg
b3RoZXJfb3B0aW9ucy5fdmVyYm9zaXR5ID09IENvbW1vbk9wdGlvbnMuVVNFX0RFRkFVTFQ6Cisg
ICAgICAgICAgICByZXN1bHQuX3ZlcmJvc2l0eSA9IHNlbGYuX3ZlcmJvc2l0eQorICAgICAgICBl
bHNlOgorICAgICAgICAgICAgcmVzdWx0Ll92ZXJib3NpdHkgPSBvdGhlcl9vcHRpb25zLl92ZXJi
b3NpdHkKKyAgICAgICAgaWYgb3RoZXJfb3B0aW9ucy5faGVhZGVyX3JvbGUgPT0gQ29tbW9uT3B0
aW9ucy5VU0VfREVGQVVMVDoKKyAgICAgICAgICAgIHJlc3VsdC5faGVhZGVyX3JvbGUgPSBzZWxm
Ll9oZWFkZXJfcm9sZQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcmVzdWx0Ll9oZWFkZXJf
cm9sZSA9IG90aGVyX29wdGlvbnMuX2hlYWRlcl9yb2xlCisgICAgICAgIHJlc3VsdC5fcGxhdGZv
cm1fZGVmYXVsdCA9IG90aGVyX29wdGlvbnMuX3BsYXRmb3JtX2RlZmF1bHQKKyAgICAgICAgZm9y
IHBsYXRmb3JtIGluIHNlbGYuX3BsYXRmb3JtczoKKyAgICAgICAgICAgIGlmIG90aGVyX29wdGlv
bnMuX3BsYXRmb3Jtc1twbGF0Zm9ybV0gPT0gQ29tbW9uT3B0aW9ucy5VU0VfREVGQVVMVDoKKyAg
ICAgICAgICAgICAgICByZXN1bHQuX3BsYXRmb3Jtc1twbGF0Zm9ybV0gPSBzZWxmLl9wbGF0Zm9y
bXNbcGxhdGZvcm1dCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHJlc3VsdC5f
cGxhdGZvcm1zW3BsYXRmb3JtXSA9IG90aGVyX29wdGlvbnMuX3BsYXRmb3Jtc1twbGF0Zm9ybV0K
KyAgICAgICAgcmV0dXJuIHJlc3VsdAorCmRpZmYgLS1naXQgYS9Ub29scy9TY3JpcHRzL3dlYmtp
dHB5L2NvbW1vbi9wcm9qZWN0L3Byb2plY3QucHkgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2Nv
bW1vbi9wcm9qZWN0L3Byb2plY3QucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MC4uMjNkOTQwNwotLS0gL2Rldi9udWxsCisrKyBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvY29t
bW9uL3Byb2plY3QvcHJvamVjdC5weQpAQCAtMCwwICsxLDI0NSBAQAorIyEvdXNyL2Jpbi9lbnYg
cHl0aG9uCisjIENvcHlyaWdodCAoQykgMjAxMiBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorIworIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorIyBtZXQ6CisjCisjICAgICog
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyMgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorIyAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyMgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorIyBpbiB0aGUgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisjIGRpc3RyaWJ1
dGlvbi4KKyMgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFt
ZXMgb2YgaXRzCisjIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21v
dGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisjIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZp
YyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisjCisjIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyMgIkFTIElTIiBB
TkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QK
KyMgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SCisjIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisjIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorIyBTUEVDSUFM
LCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
CisjIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLAorIyBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyMgVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorIyAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UKKyMgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KKworZnJvbSB3ZWJraXRweS5jb21tb24ucHJvamVjdC5jb21t
b24gaW1wb3J0ICoKKworCitjbGFzcyBQcm9qZWN0RmlsZVJlZmVyZW5jZShvYmplY3QpOgorICAg
ICIiIgorICAgIENsYXNzIGhvbGRpbmcgYSBwcm9qZWN0LXNwZWNpZmljIHJlZmVyZW5jZSB0byBh
IENvbW1vbkZpbGUuIFRoaXMgYWxsb3dzIHByb2plY3Qtc3BlY2lmaWMgImVtYmVsbGlzaG1lbnRz
IiBzdWNoIGFzIGNvbW1lbnRzLgorICAgIEV2ZW4gd2l0aGluIGEgc2luZ2xlIHByb2plY3QsIG11
bHRpcGxlIHJlZmVyZW5jZXMgbWF5IGV4aXN0IHRvIHRoZSBzYW1lIGZpbGUgKGUuZy4sIGluIG1h
a2UgZmlsZXMgdW5kZXIgZGlmZmVyZW50IGNvbmRpdGlvbnMpLgorICAgICIiIgorICAgIElEX0NP
VU5URVIgPSAwCisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgZmlsZT1Ob25lKToKKyAgICAgICAg
YXNzZXJ0IG5vdCBmaWxlIG9yIGlzaW5zdGFuY2UoZmlsZSwgQ29tbW9uRmlsZSkKKyAgICAgICAg
c2VsZi5maWxlID0gZmlsZQorICAgICAgICBQcm9qZWN0RmlsZVJlZmVyZW5jZS5JRF9DT1VOVEVS
ICs9IDEKKyAgICAgICAgc2VsZi5faWQgPSBQcm9qZWN0RmlsZVJlZmVyZW5jZS5JRF9DT1VOVEVS
CisKKyAgICBkZWYgX19oYXNoX18oc2VsZik6CisgICAgICAgIHJldHVybiBoYXNoKHNlbGYuX2lk
KQorCisgICAgZGVmIGlzX3ZhbGlkKHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZi5maWxlIGFu
ZCBzZWxmLmZpbGUuaXNfdmFsaWQoKQorCisgICAgZGVmIHNldF9maWxlKHNlbGYsIGZpbGUpOgor
ICAgICAgICBhc3NlcnQgbm90IGZpbGUgb3IgaXNpbnN0YW5jZShmaWxlLCBDb21tb25GaWxlKQor
ICAgICAgICBzZWxmLmZpbGUgPSBmaWxlCisKKworY2xhc3MgUHJvamVjdEZpbGVSZWZlcmVuY2VD
b250YWluZXIob2JqZWN0KToKKyAgICAiIiIKKyAgICBDbGFzcyBjb250YWluaW5nIFByb2plY3RG
aWxlUmVmZXJlbmNlIG9iamVjdHMuCisgICAgRXZlbiB3aXRoaW4gYSBzaW5nbGUgcHJvamVjdCwg
bXVsdGlwbGUgcmVmZXJlbmNlcyBtYXkgZXhpc3QgdG8gdGhlIHNhbWUgZmlsZSAoZS5nLiwgaW4g
bWFrZSBmaWxlcyB1bmRlciBkaWZmZXJlbnQgY29uZGl0aW9ucykuCisgICAgIiIiCisgICAgZGVm
IF9faW5pdF9fKHNlbGYpOgorICAgICAgICBzZWxmLmZpbGVfcmVmZXJlbmNlcyA9IHNldCgpCisK
KyAgICBkZWYgaXNfdmFsaWQoc2VsZik6CisgICAgICAgIHJldHVybiBUcnVlCisKKyAgICBkZWYg
aXNfZW1wdHkoc2VsZik6CisgICAgICAgIHJldHVybiBub3Qgc2VsZi5maWxlX3JlZmVyZW5jZXMK
KworICAgIGRlZiBhZGRfZmlsZV9yZWZlcmVuY2Uoc2VsZiwgZmlsZV9yZWZlcmVuY2UpOgorICAg
ICAgICBhc3NlcnQgaXNpbnN0YW5jZShmaWxlX3JlZmVyZW5jZSwgUHJvamVjdEZpbGVSZWZlcmVu
Y2UpCisgICAgICAgIHNlbGYuZmlsZV9yZWZlcmVuY2VzLmFkZChmaWxlX3JlZmVyZW5jZSkKKwor
ICAgIGRlZiByZW1vdmVfZmlsZV9yZWZlcmVuY2Uoc2VsZiwgZmlsZV9yZWZlcmVuY2UpOgorICAg
ICAgICBhc3NlcnQgaXNpbnN0YW5jZShmaWxlX3JlZmVyZW5jZSwgUHJvamVjdEZpbGVSZWZlcmVu
Y2UpCisgICAgICAgIHNlbGYuZmlsZV9yZWZlcmVuY2VzLnJlbW92ZShmaWxlX3JlZmVyZW5jZSkK
KworCitjbGFzcyBQcm9qZWN0RGlyZWN0b3J5UmVmZXJlbmNlKG9iamVjdCk6CisgICAgIiIiCisg
ICAgQ2xhc3MgaG9sZGluZyBhIHByb2plY3Qtc3BlY2lmaWMgcmVmZXJlbmNlIHRvIGEgQ29tbW9u
RGlyZWN0b3J5LiBUaGlzIGFsbG93cyBwcm9qZWN0LXNwZWNpZmljICJlbWJlbGxpc2htZW50cyIg
c3VjaCBhcyBjb21tZW50cy4KKyAgICAiIiIKKyAgICBJRF9DT1VOVEVSID0gMAorCisgICAgZGVm
IF9faW5pdF9fKHNlbGYsIGRpcmVjdG9yeT1Ob25lKToKKyAgICAgICAgYXNzZXJ0IG5vdCBkaXJl
Y3Rvcnkgb3IgaXNpbnN0YW5jZShkaXJlY3RvcnksIENvbW1vbkRpcmVjdG9yeSkKKyAgICAgICAg
c2VsZi5kaXJlY3RvcnkgPSBkaXJlY3RvcnkKKyAgICAgICAgUHJvamVjdERpcmVjdG9yeVJlZmVy
ZW5jZS5JRF9DT1VOVEVSICs9IDEKKyAgICAgICAgc2VsZi5faWQgPSBQcm9qZWN0RGlyZWN0b3J5
UmVmZXJlbmNlLklEX0NPVU5URVIKKworICAgIGRlZiBfX2hhc2hfXyhzZWxmKToKKyAgICAgICAg
cmV0dXJuIGhhc2goc2VsZi5faWQpCisKKyAgICBkZWYgaXNfdmFsaWQoc2VsZik6CisgICAgICAg
IHJldHVybiBzZWxmLmRpcmVjdG9yeSBhbmQgc2VsZi5kaXJlY3RvcnkuaXNfdmFsaWQoKQorCisg
ICAgZGVmIHNldF9kaXJlY3Rvcnkoc2VsZiwgZGlyZWN0b3J5KToKKyAgICAgICAgYXNzZXJ0IG5v
dCBkaXJlY3Rvcnkgb3IgaXNpbnN0YW5jZShkaXJlY3RvcnksIENvbW1vbkRpcmVjdG9yeSkKKyAg
ICAgICAgc2VsZi5kaXJlY3RvcnkgPSBkaXJlY3RvcnkKKworCitjbGFzcyBQcm9qZWN0RGlyZWN0
b3J5UmVmZXJlbmNlQ29udGFpbmVyKG9iamVjdCk6CisgICAgIiIiCisgICAgQ2xhc3MgY29udGFp
bmluZyBQcm9qZWN0RGlyZWN0b3J5UmVmZXJlbmNlIG9iamVjdHMuCisgICAgRXZlbiB3aXRoaW4g
YSBzaW5nbGUgcHJvamVjdCwgbXVsdGlwbGUgcmVmZXJlbmNlcyBtYXkgZXhpc3QgdG8gdGhlIHNh
bWUgZGlyZWN0b3J5LgorICAgICIiIgorICAgIGRlZiBfX2luaXRfXyhzZWxmKToKKyAgICAgICAg
c2VsZi5kaXJlY3RvcnlfcmVmZXJlbmNlcyA9IHNldCgpCisKKyAgICBkZWYgaXNfdmFsaWQoc2Vs
Zik6CisgICAgICAgIHJldHVybiBUcnVlCisKKyAgICBkZWYgaXNfZW1wdHkoc2VsZik6CisgICAg
ICAgIHJldHVybiBub3Qgc2VsZi5kaXJlY3RvcnlfcmVmZXJlbmNlcworCisgICAgZGVmIGFkZF9k
aXJlY3RvcnlfcmVmZXJlbmNlKHNlbGYsIGRpcmVjdG9yeV9yZWZlcmVuY2UpOgorICAgICAgICBh
c3NlcnQgaXNpbnN0YW5jZShkaXJlY3RvcnlfcmVmZXJlbmNlLCBQcm9qZWN0RGlyZWN0b3J5UmVm
ZXJlbmNlKQorICAgICAgICBhc3NlcnQgZGlyZWN0b3J5X3JlZmVyZW5jZS5kaXJlY3RvcnkKKyAg
ICAgICAgc2VsZi5kaXJlY3RvcnlfcmVmZXJlbmNlcy5hZGQoZGlyZWN0b3J5X3JlZmVyZW5jZSkK
KworICAgIGRlZiByZW1vdmVfZGlyZWN0b3J5X3JlZmVyZW5jZShzZWxmLCBkaXJlY3RvcnlfcmVm
ZXJlbmNlKToKKyAgICAgICAgYXNzZXJ0IGlzaW5zdGFuY2UoZGlyZWN0b3J5X3JlZmVyZW5jZSwg
UHJvamVjdERpcmVjdG9yeVJlZmVyZW5jZSkKKyAgICAgICAgYXNzZXJ0IGRpcmVjdG9yeV9yZWZl
cmVuY2UuZGlyZWN0b3J5CisgICAgICAgIHNlbGYuZGlyZWN0b3J5X3JlZmVyZW5jZXMucmVtb3Zl
KGRpcmVjdG9yeV9yZWZlcmVuY2UuZGlyZWN0b3J5LnBhdGgpCisKKworY2xhc3MgUHJvamVjdChv
YmplY3QpOgorICAgICIiIgorICAgIEJhc2UgY2xhc3MgZm9yIHByb2plY3QgY2xhc3Nlcy4KKyAg
ICBBcyBiYXNlIGZ1bmN0aW9uYWxpdHkgaXQgc3RvcmVzIHJlZmVyZW5jZXMgdG8gYWxsIGZpbGVz
IGFuZCBkaXJlY3RvcmllcyB0aGF0IGFyZSBsaXN0ZWQgaW4gdGhlIHByb2plY3QgZmlsZQorICAg
IChkaXJlY3RseSwgbm90IGFzIFByb2plY3RGaWxlUmVmZXJlbmNlL1Byb2plY3REaXJlY3RvcnlS
ZWZlcmVuY2UpLgorICAgICIiIgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBjb21tb24sIGZpbGUs
IHByb2plY3RfbmFtZT1Ob25lKToKKyAgICAgICAgYXNzZXJ0IGlzaW5zdGFuY2UoY29tbW9uLCBD
b21tb25JbmZvKQorICAgICAgICBhc3NlcnQgaXNpbnN0YW5jZShmaWxlLCBDb21tb25GaWxlKQor
ICAgICAgICBzZWxmLmNvbW1vbiA9IGNvbW1vbgorICAgICAgICBzZWxmLmZpbGUgPSBmaWxlCisg
ICAgICAgIHNlbGYubmFtZSA9IHByb2plY3RfbmFtZSBvciBjb21tb24ucHJvamVjdF9uYW1lCisK
KworY2xhc3MgUHJvamVjdFJlYWRlcihvYmplY3QpOgorICAgICIiIgorICAgIEJhc2UgY2xhc3Mg
Zm9yIGEgcHJvamVjdCBmaWxlIHNlcmlhbGl6ZXIgKHJlYWRlcikuIERvZXMgYmFzaWMgc2V0dXAg
YmVmb3JlIGNhbGxpbmcgcGFyc2VfcHJvamVjdF9maWxlKCkuCisKKyAgICBEZXJpdmVkIGNsYXNz
ZXMgTVVTVCBkZWZpbmU6CisgICAgLSkgYSBmdW5jdGlvbiAncGFyc2VfcHJvamVjdF9maWxlKHNl
bGYpJyB0aGF0IHJlYWRzIGluIHRoZSBmaWxlIGFuZCBwb3B1bGF0ZXMgc2VsZi5wcm9qZWN0Cisg
ICAgIiIiCisgICAgUFJPSkVDVF9DTEFTUyA9IFByb2plY3QKKworICAgIGRlZiBfX2luaXRfXyhz
ZWxmLCBwcm9qZWN0LCBmaWxlc3lzdGVtPU5vbmUpOgorICAgICAgICBhc3NlcnQgcHJvamVjdAor
ICAgICAgICBhc3NlcnQgaXNpbnN0YW5jZShwcm9qZWN0LCBQcm9qZWN0KQorICAgICAgICBzZWxm
LnByb2plY3QgPSBwcm9qZWN0CisgICAgICAgIHNlbGYuY29tbW9uID0gcHJvamVjdC5jb21tb24K
KyAgICAgICAgc2VsZi5maWxlc3lzdGVtID0gZmlsZXN5c3RlbSBvciBwcm9qZWN0LmNvbW1vbi5m
aWxlc3lzdGVtCisgICAgICAgIHNlbGYuZmlsZSA9IE5vbmUKKworICAgIGRlZiB2aW5mbyhzZWxm
LCBtc2cpOgorICAgICAgICAjIFRPRE86IGFkZCBJRCBvZiBwcm9qZWN0IHRvIHNob3cgd2hpY2gg
cHJvamVjdCB0aGUgbWVzc2FnZSBpcyBmb3IKKyAgICAgICAgc2VsZi5jb21tb24udmluZm8obXNn
KQorCisgICAgZGVmIGluZm8oc2VsZiwgbXNnKToKKyAgICAgICAgIyBUT0RPOiBhZGQgSUQgb2Yg
cHJvamVjdCB0byBzaG93IHdoaWNoIHByb2plY3QgdGhlIG1lc3NhZ2UgaXMgZm9yCisgICAgICAg
IHNlbGYuY29tbW9uLmluZm8obXNnKQorCisgICAgZGVmIHdhcm5pbmcoc2VsZiwgbXNnKToKKyAg
ICAgICAgIyBUT0RPOiBhZGQgSUQgb2YgcHJvamVjdCB0byBzaG93IHdoaWNoIHByb2plY3QgdGhl
IG1lc3NhZ2UgaXMgZm9yCisgICAgICAgIHNlbGYuY29tbW9uLndhcm5pbmcobXNnKQorCisgICAg
ZGVmIGVycm9yKHNlbGYsIG1zZyk6CisgICAgICAgICMgVE9ETzogYWRkIElEIG9mIHByb2plY3Qg
dG8gc2hvdyB3aGljaCBwcm9qZWN0IHRoZSBtZXNzYWdlIGlzIGZvcgorICAgICAgICBzZWxmLmNv
bW1vbi5lcnJvcihtc2cpCisKKyAgICBkZWYgdmVyaWZ5KHNlbGYsIGV4cHIsIG1zZyk6CisgICAg
ICAgICMgVE9ETzogYWRkIElEIG9mIHByb2plY3QgdG8gc2hvdyB3aGljaCBwcm9qZWN0IHRoZSBt
ZXNzYWdlIGlzIGZvcgorICAgICAgICBzZWxmLmNvbW1vbi52ZXJpZnkoZXhwciwgbXNnKQorCisg
ICAgZGVmIHJlYWRfcHJvamVjdF9maWxlKHNlbGYsIHByb2plY3RfZmlsZV9wYXRoKToKKyAgICAg
ICAgcmFpc2UgTm90SW1wbGVtZW50ZWRFcnJvciwgInN1YmNsYXNzZXMgbXVzdCBpbXBsZW1lbnQi
CisKKyAgICBkZWYgcmVhZChzZWxmLCBwcm9qZWN0X2ZpbGVfcGF0aD1Ob25lKToKKyAgICAgICAg
IiIiCisgICAgICAgIFJlYWQgYSBwcm9qZWN0IGZpbGUgb3IgbWFrZWZpbGUgZnJvbSBkaXNjIGFu
ZCBwYXJzZSBpdC4KKyAgICAgICAgcHJvamVjdF9maWxlX3BhdGggbXVzdCBjb250YWluIHRoZSBw
cm9qZWN0IGZpbGUgaXRzZWxmLCBub3QganVzdCBhIGRpcmVjdG9yeS4KKyAgICAgICAgIiIiCisg
ICAgICAgIGFzc2VydCBzZWxmLnByb2plY3QuZmlsZQorICAgICAgICBhc3NlcnQgc2VsZi5wcm9q
ZWN0LmZpbGUubmFtZQorICAgICAgICBpZiBwcm9qZWN0X2ZpbGVfcGF0aDoKKyAgICAgICAgICAg
IHNlbGYudmVyaWZ5KHNlbGYuZmlsZXN5c3RlbS5pc2ZpbGUocHJvamVjdF9maWxlX3BhdGgpLCAi
U3BlY2lmaWVkIHByb2plY3QgZmlsZSBwYXRoICclcycgbm90IGZvdW5kIG9yIG5vdCBhIGZpbGUh
IiAlIHByb2plY3RfZmlsZV9wYXRoKQorICAgICAgICAgICAgcHJvamVjdF9maWxlX3BhdGggPSBz
ZWxmLmZpbGVzeXN0ZW0uYWJzcGF0aChwcm9qZWN0X2ZpbGVfcGF0aCkKKyAgICAgICAgZWxzZToK
KyAgICAgICAgICAgIHByb2plY3RfZmlsZV9wYXRoID0gc2VsZi5wcm9qZWN0LmNvbW1vbi5maWxl
X2Fic3BhdGgoc2VsZi5wcm9qZWN0LmZpbGUsIGRpcmVjdG9yeV9tYXA9e3NlbGYucHJvamVjdC5j
b21tb24uc2NtX2RpcmVjdG9yeTogc2VsZi5wcm9qZWN0LmNvbW1vbi5zY21fZGlyZWN0b3J5LmFi
c3BhdGh9KQorICAgICAgICBzZWxmLnJlYWRfcHJvamVjdF9maWxlKHByb2plY3RfZmlsZV9wYXRo
KQorCisKK2NsYXNzIFByb2plY3RXcml0ZXIob2JqZWN0KToKKyAgICAiIiIKKyAgICBCYXNlIGNs
YXNzIGZvciBhIHByb2plY3QgZmlsZSBzZXJpYWxpemVyICh3cml0ZXIpLiBEb2VzIGJhc2ljIHNl
dHVwIGJlZm9yZSBjYWxsaW5nIHdyaXRlX3Byb2plY3RfZmlsZSgpLgorCisgICAgRGVyaXZlZCBj
bGFzc2VzIE1VU1QgZGVmaW5lOgorICAgIC0pIGEgZnVuY3Rpb24gJ3dyaXRlX3Byb2plY3RfZmls
ZShzZWxmLCBwcm9qZWN0LCBmaWxlX3BhdGgpJyB0aGF0IHdyaXRlcyB0aGUgcHJvamVjdCBpbnRv
IHRoZSBwYXNzZWQtaW4gZmlsZQorICAgICIiIgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBwcm9q
ZWN0LCBmaWxlc3lzdGVtPU5vbmUpOgorICAgICAgICBhc3NlcnQgcHJvamVjdAorICAgICAgICBh
c3NlcnQgaXNpbnN0YW5jZShwcm9qZWN0LCBQcm9qZWN0KQorICAgICAgICBzZWxmLmNvbW1vbiA9
IHByb2plY3QuY29tbW9uCisgICAgICAgIHNlbGYucHJvamVjdCA9IHByb2plY3QKKyAgICAgICAg
c2VsZi5maWxlc3lzdGVtID0gZmlsZXN5c3RlbSBvciBwcm9qZWN0LmNvbW1vbi5maWxlc3lzdGVt
CisKKyAgICBkZWYgdmluZm8oc2VsZiwgbXNnKToKKyAgICAgICAgIyBUT0RPOiBhZGQgSUQgb2Yg
cHJvamVjdCB0byBzaG93IHdoaWNoIHByb2plY3QgdGhlIG1lc3NhZ2UgaXMgZm9yCisgICAgICAg
IHNlbGYuY29tbW9uLnZpbmZvKG1zZykKKworICAgIGRlZiBpbmZvKHNlbGYsIG1zZyk6CisgICAg
ICAgICMgVE9ETzogYWRkIElEIG9mIHByb2plY3QgdG8gc2hvdyB3aGljaCBwcm9qZWN0IHRoZSBt
ZXNzYWdlIGlzIGZvcgorICAgICAgICBzZWxmLmNvbW1vbi5pbmZvKG1zZykKKworICAgIGRlZiB3
YXJuaW5nKHNlbGYsIG1zZyk6CisgICAgICAgICMgVE9ETzogYWRkIElEIG9mIHByb2plY3QgdG8g
c2hvdyB3aGljaCBwcm9qZWN0IHRoZSBtZXNzYWdlIGlzIGZvcgorICAgICAgICBzZWxmLmNvbW1v
bi53YXJuaW5nKG1zZykKKworICAgIGRlZiBlcnJvcihzZWxmLCBtc2cpOgorICAgICAgICAjIFRP
RE86IGFkZCBJRCBvZiBwcm9qZWN0IHRvIHNob3cgd2hpY2ggcHJvamVjdCB0aGUgbWVzc2FnZSBp
cyBmb3IKKyAgICAgICAgc2VsZi5jb21tb24uZXJyb3IobXNnKQorCisgICAgZGVmIHdyaXRlX3By
b2plY3RfZmlsZShzZWxmLCBwcm9qZWN0X2ZpbGVfcGF0aCk6CisgICAgICAgIHJhaXNlIE5vdElt
cGxlbWVudGVkRXJyb3IsICJzdWJjbGFzc2VzIG11c3QgaW1wbGVtZW50IgorCisgICAgZGVmIHdy
aXRlKHNlbGYsIHByb2plY3RfZmlsZV9wYXRoPU5vbmUpOgorICAgICAgICAiIiIKKyAgICAgICAg
V3JpdGUgYSBwcm9qZWN0IGZpbGUgb3IgbWFrZWZpbGUgdG8gZGlzYy4KKyAgICAgICAgIiIiCisg
ICAgICAgIGFzc2VydCBzZWxmLnByb2plY3QuZmlsZQorICAgICAgICBhc3NlcnQgc2VsZi5wcm9q
ZWN0LmZpbGUubmFtZQorICAgICAgICBpZiBub3QgcHJvamVjdF9maWxlX3BhdGg6CisgICAgICAg
ICAgICAjIE5vIG5ldyBwYXRoIGdpdmVuOiB3cml0ZSBiYWNrIHRvIHRoZSBvcmlnaW5hbCBmaWxl
LgorICAgICAgICAgICAgcHJvamVjdF9maWxlX3BhdGggPSBzZWxmLnByb2plY3QuY29tbW9uLmZp
bGVfYWJzcGF0aChzZWxmLnByb2plY3QuZmlsZSwgZGlyZWN0b3J5X21hcD17c2VsZi5wcm9qZWN0
LmNvbW1vbi5zY21fZGlyZWN0b3J5OiBzZWxmLnByb2plY3QuY29tbW9uLnNjbV9kaXJlY3Rvcnku
YWJzcGF0aH0pCisgICAgICAgIGVsaWYgc2VsZi5maWxlc3lzdGVtLmlzZGlyKHByb2plY3RfZmls
ZV9wYXRoKToKKyAgICAgICAgICAgICMgR2l2ZW4gcGF0aCBpcyBqdXN0IGEgZGlyZWN0b3J5OiBh
cHBlbmQgb3JpZ2luYWwgZmlsZSBuYW1lLgorICAgICAgICAgICAgcHJvamVjdF9maWxlX3BhdGgg
PSBzZWxmLmZpbGVzeXN0ZW0uam9pbihzZWxmLmZpbGVzeXN0ZW0uYWJzcGF0aChwcm9qZWN0X2Zp
bGVfcGF0aCksIHNlbGYucHJvamVjdC5maWxlLm5hbWUpCisgICAgICAgIGVsc2U6CisgICAgICAg
ICAgICBwcm9qZWN0X2ZpbGVfcGF0aCA9IHNlbGYuZmlsZXN5c3RlbS5hYnNwYXRoKHByb2plY3Rf
ZmlsZV9wYXRoKQorICAgICAgICBzZWxmLndyaXRlX3Byb2plY3RfZmlsZShwcm9qZWN0X2ZpbGVf
cGF0aCkKKwo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>134528</attachid>
            <date>2012-03-29 01:46:05 -0700</date>
            <delta_ts>2013-10-31 08:30:06 -0700</delta_ts>
            <desc>Non-project-specific base classes for the webkit-file tool. Everything else depends on them.</desc>
            <filename>bug-64148-20120329174603.patch</filename>
            <type>text/plain</type>
            <size>49728</size>
            <attacher name="Roland Steiner">rolandsteiner</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTEyMDQxCmRpZmYgLS1naXQgYS9Ub29scy9DaGFuZ2VMb2cg
Yi9Ub29scy9DaGFuZ2VMb2cKaW5kZXggOGQwNWI2ZjM1MmE1ZjFjZTRjMzFlYzE3ZmJhNDIxMzhh
NjljMjZiMi4uMjQ1NDg5MGUwOTY0MDE1YTFiOTFmMmU4YTMwNTBlMGM4MmUwMzBiNyAxMDA2NDQK
LS0tIGEvVG9vbHMvQ2hhbmdlTG9nCisrKyBiL1Rvb2xzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDEy
NiBAQAorMjAxMi0wMy0yOSAgUm9sYW5kIFN0ZWluZXIgIDxyb2xhbmRzdGVpbmVyQGNocm9taXVt
Lm9yZz4KKworICAgICAgICB3ZWJraXQtZmlsZSB1dGlsaXR5IG5lZWRzIGNvbW1vbiBpbnRlcmZh
Y2UgZm9yIGFsbCBwbGF0Zm9ybXMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTY0MTQ4CisKKyAgICAgICAgQ2xhc3NlcyBmb3Igb2JqZWN0cyBpbiB0aGUg
d2Via2l0LWZpbGUgdXRpbGl0eSAodG9vbCB0byBtYW5pcHVsYXRlIHByb2plY3QgZmlsZXMpCisg
ICAgICAgIHRoYXQgYXJlIHNoYXJlZCBiZXR3ZWVuIHBsYXRmb3JtcywgcGx1cyB1bml0LXRlc3Rz
LgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogU2Ny
aXB0cy93ZWJraXRweS9jb21tb24vcHJvamVjdC9fX2luaXRfXy5weTogQWRkZWQuCisgICAgICAg
ICogU2NyaXB0cy93ZWJraXRweS9jb21tb24vcHJvamVjdC9jb21tb24ucHk6IEFkZGVkLgorICAg
ICAgICAoQ29tbW9uRmlsZSk6IHVuaXF1ZWx5IHJlcHJlc2VudHMgYSBmaWxlIHdpdGhpbiB0aGUg
c291cmNlIGNoZWNrb3V0CisgICAgICAgIChDb21tb25GaWxlLl9faW5pdF9fKToKKyAgICAgICAg
KENvbW1vbkZpbGUuaXNfdmFsaWRfZmlsZV9uYW1lKToKKyAgICAgICAgKENvbW1vbkZpbGUuaXNf
dmFsaWQpOgorICAgICAgICAoQ29tbW9uRmlsZS5fX2hhc2hfXyk6CisgICAgICAgIChDb21tb25G
aWxlLl9fZXFfXyk6CisgICAgICAgIChDb21tb25GaWxlLl9fbmVfXyk6CisgICAgICAgIChDb21t
b25GaWxlLmRlYnVnX3BhdGgpOgorICAgICAgICAoQ29tbW9uRGlyZWN0b3J5KTogdW5pcXVlbHkg
cmVwcmVzZW50cyBhIGRpcmVjdG9yeSB3aXRoaW4gdGhlIHNvdXJjZSBjaGVja291dAorICAgICAg
ICAoQ29tbW9uRGlyZWN0b3J5Ll9faW5pdF9fKToKKyAgICAgICAgKENvbW1vbkRpcmVjdG9yeS5f
X2hhc2hfXyk6CisgICAgICAgIChDb21tb25EaXJlY3RvcnkuX19lcV9fKToKKyAgICAgICAgKENv
bW1vbkRpcmVjdG9yeS5fX25lX18pOgorICAgICAgICAoQ29tbW9uRGlyZWN0b3J5Ll9hZGRfZGly
ZWN0b3J5KToKKyAgICAgICAgKENvbW1vbkRpcmVjdG9yeS5fcmVtb3ZlX2RpcmVjdG9yeSk6Cisg
ICAgICAgIChDb21tb25EaXJlY3RvcnkuX2FkZF9maWxlKToKKyAgICAgICAgKENvbW1vbkRpcmVj
dG9yeS5fcmVtb3ZlX2ZpbGUpOgorICAgICAgICAoQ29tbW9uRGlyZWN0b3J5LmRlYnVnX3BhdGgp
OgorICAgICAgICAoQ29tbW9uRGlyZWN0b3J5LmlzX2VtcHR5KToKKyAgICAgICAgKENvbW1vbkRp
cmVjdG9yeS5nZXRfZGlyZWN0b3J5KToKKyAgICAgICAgKENvbW1vbkRpcmVjdG9yeS5hZGRfZmls
ZSk6CisgICAgICAgIChDb21tb25EaXJlY3RvcnkucmVtb3ZlX2ZpbGUpOgorICAgICAgICAoQ29t
bW9uRGlyZWN0b3J5LmdldF9maWxlKToKKyAgICAgICAgKENvbW1vbkRpcmVjdG9yeS5nZXRfZW50
cnkpOgorICAgICAgICAoQ29tbW9uRGlyZWN0b3J5LmRpcmVjdG9yeV9saXN0KToKKyAgICAgICAg
KENvbW1vbkRpcmVjdG9yeS5iYXNlX2RpcmVjdG9yeSk6CisgICAgICAgIChDb21tb25EaXJlY3Rv
cnkuY29tbW9uX2RpcmVjdG9yeSk6CisgICAgICAgIChDb21tb25Sb290RGlyZWN0b3J5KTogdW5p
cXVlbHkgcmVwcmVzZW50cyB0aGUgcm9vdCBkaXJlY3RvcnkgJy8nCisgICAgICAgIChDb21tb25S
b290RGlyZWN0b3J5Ll9faW5pdF9fKToKKyAgICAgICAgKENvbW1vblJvb3REaXJlY3RvcnkuaXNf
dmFsaWQpOgorICAgICAgICAoQ29tbW9uUm9vdERpcmVjdG9yeS5fZGVzY3BhdGhfd2l0aF9zZXAp
OgorICAgICAgICAoQ29tbW9uU0NNRGlyZWN0b3J5KTogdW5pcXVlbHkgcmVwcmVzZW50cyB0aGUg
c291cmNlIGNoZWNrb3V0IHJvb3QgZGlyZWN0b3J5CisgICAgICAgIChDb21tb25TQ01EaXJlY3Rv
cnkuX19pbml0X18pOgorICAgICAgICAoQ29tbW9uU0NNRGlyZWN0b3J5LmlzX3ZhbGlkKToKKyAg
ICAgICAgKENvbW1vblNDTURpcmVjdG9yeS5fZGVzY3BhdGhfd2l0aF9zZXApOgorICAgICAgICAo
Q29tbW9uQmFzZURpcmVjdG9yeSk6IHVuaXF1ZWx5IHJlcHJlc2VudHMgYSBkaXJlY3RvcnkgdGhh
dCBhY3RzIGFzIGFic3RyYWN0IHJvb3QgZm9yIHN1Yi10cmVlcyBpbiB0aGUgY2hlY2tvdXQgKGUu
Zy4sIERlcml2ZWRTb3VyY2VzL1dlYkNvcmUpCisgICAgICAgIChDb21tb25CYXNlRGlyZWN0b3J5
Ll9faW5pdF9fKToKKyAgICAgICAgKENvbW1vbkJhc2VEaXJlY3RvcnkuaXNfdmFsaWQpOgorICAg
ICAgICAoQ29tbW9uQmFzZURpcmVjdG9yeS5fZGVzY3BhdGhfd2l0aF9zZXApOgorICAgICAgICAo
Q29tbW9uU3ViRGlyZWN0b3J5KTogdW5pcXVlbHkgcmVwcmVzZW50cyBhIHN1Yi1kaXJlY3Rvcnkg
b2YgYW5vdGhlciBkaXJlY3RvcnkKKyAgICAgICAgKENvbW1vblN1YkRpcmVjdG9yeS5fX2luaXRf
Xyk6CisgICAgICAgIChDb21tb25TdWJEaXJlY3RvcnkuaXNfdmFsaWRfc3ViZGlyZWN0b3J5X25h
bWUpOgorICAgICAgICAoQ29tbW9uU3ViRGlyZWN0b3J5LmlzX3ZhbGlkKToKKyAgICAgICAgKENv
bW1vblN1YkRpcmVjdG9yeS5pc19lbXB0eSk6CisgICAgICAgIChDb21tb25TdWJEaXJlY3Rvcnku
X2Rlc2NwYXRoX3dpdGhfc2VwKToKKyAgICAgICAgKENvbW1vbkNyb3Nzb3ZlclN1YkRpcmVjdG9y
eSk6IHN1Yi1kaXJlY3RvcnkgdGhhdCBjYW4gaGF2ZSBiYXNlLWRpcmVjdG9yaWVzIGFzIGNoaWxk
cmVuCisgICAgICAgIChDb21tb25Dcm9zc292ZXJTdWJEaXJlY3RvcnkuX19pbml0X18pOgorICAg
ICAgICAoQ29tbW9uREVGSU5FKTogdW5pcXVlbHkgcmVwcmVzZW50cyBhIERFRklORV94eXogKG9y
IEVOQUJMRV94eXopIHZhcmlhYmxlCisgICAgICAgIChDb21tb25ERUZJTkUuX19pbml0X18pOgor
ICAgICAgICAoQ29tbW9uREVGSU5FLl9faGFzaF9fKToKKyAgICAgICAgKENvbW1vbkRFRklORS5f
X2VxX18pOgorICAgICAgICAoQ29tbW9uREVGSU5FLl9fbmVfXyk6CisgICAgICAgIChDb21tb25J
bmZvKTogY2VudHJhbCBvYmplY3Qgd2l0aCBtZW1iZXJzIHJlcXVpcmVkIGJ5IGFsbCBwbGF0Zm9y
bXMKKyAgICAgICAgKENvbW1vbkluZm8uX19pbml0X18pOgorICAgICAgICAoQ29tbW9uSW5mby5f
X2luaXRfXy50byk6CisgICAgICAgIChDb21tb25JbmZvLnNldF9vcHRpb25zKToKKyAgICAgICAg
KENvbW1vbkluZm8uZGVidWcpOgorICAgICAgICAoQ29tbW9uSW5mby5pbmZvKToKKyAgICAgICAg
KENvbW1vbkluZm8ud2FybmluZyk6CisgICAgICAgIChDb21tb25JbmZvLmVycm9yKToKKyAgICAg
ICAgKENvbW1vbkluZm8udmVyaWZ5KToKKyAgICAgICAgKENvbW1vbkluZm8uX2NyZWF0ZV9yb290
X2RpcmVjdG9yeSk6CisgICAgICAgIChDb21tb25JbmZvLl9jcmVhdGVfc2NtX2RpcmVjdG9yeSk6
CisgICAgICAgIChDb21tb25JbmZvLmNyZWF0ZV9iYXNlX2RpcmVjdG9yeSk6CisgICAgICAgIChD
b21tb25JbmZvLmNyZWF0ZV9jcm9zc292ZXJfc3ViZGlyZWN0b3J5KToKKyAgICAgICAgKENvbW1v
bkluZm8uY3JlYXRlX3N1YmRpcmVjdG9yeSk6CisgICAgICAgIChDb21tb25JbmZvLmVuc3VyZV9z
dWJkaXJlY3RvcnkpOgorICAgICAgICAoQ29tbW9uSW5mby5lbnN1cmVfc3ViZGlyZWN0b3J5X3Bh
dGgpOgorICAgICAgICAoQ29tbW9uSW5mby5jcmVhdGVfZmlsZSk6CisgICAgICAgIChDb21tb25J
bmZvLmVuc3VyZV9maWxlKToKKyAgICAgICAgKENvbW1vbkluZm8uZW5zdXJlX2ZpbGVfcGF0aCk6
CisgICAgICAgIChDb21tb25JbmZvLmJhc2VfZGlyZWN0b3J5X2Zvcl9kaXJlY3RvcnkpOgorICAg
ICAgICAoQ29tbW9uSW5mby5iYXNlX2RpcmVjdG9yeV9mb3JfZmlsZSk6CisgICAgICAgIChDb21t
b25JbmZvLl9kaXJlY3RvcnlfYWJzcGF0aF9wcmVmaXgpOgorICAgICAgICAoQ29tbW9uSW5mby5k
aXJlY3RvcnlfYWJzcGF0aCk6CisgICAgICAgIChDb21tb25JbmZvLmRpcmVjdG9yeV9yZWxwYXRo
KToKKyAgICAgICAgKENvbW1vbkluZm8uZmlsZV9hYnNwYXRoKToKKyAgICAgICAgKENvbW1vbklu
Zm8uZmlsZV9yZWxwYXRoKToKKyAgICAgICAgKENvbW1vbkluZm8uZW5zdXJlX0RFRklORSk6CisK
KyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdHB5L2NvbW1vbi9wcm9qZWN0L2NvbW1vbl91bml0dGVz
dC5weTogQWRkZWQuCisgICAgICAgIChDb21tb25JbmZvVGVzdCk6IHVuaXQtdGVzdHMgZm9yIGNv
bW1vbi5weQorICAgICAgICAoQ29tbW9uSW5mb1Rlc3Quc2V0VXApOgorICAgICAgICAoQ29tbW9u
SW5mb1Rlc3QudmVyaWZ5X3N1YmRpcmVjdG9yeSk6CisgICAgICAgIChDb21tb25JbmZvVGVzdC52
ZXJpZnlfZmlsZSk6CisgICAgICAgIChDb21tb25JbmZvVGVzdC50ZXN0X0NvbW1vbkluZm9fbWVt
YmVycyk6CisgICAgICAgIChDb21tb25JbmZvVGVzdC50ZXN0X2NyZWF0ZV9iYXNlX2RpcmVjdG9y
eSk6CisgICAgICAgIChDb21tb25JbmZvVGVzdC50ZXN0X2NyZWF0ZV9zdWJkaXJlY3RvcnkpOgor
ICAgICAgICAoQ29tbW9uSW5mb1Rlc3QudGVzdF9jcmVhdGVfY3Jvc3NvdmVyX3N1YmRpcmVjdG9y
eSk6CisgICAgICAgIChDb21tb25JbmZvVGVzdC50ZXN0X2NyZWF0ZV9maWxlKToKKyAgICAgICAg
KENvbW1vbkluZm9UZXN0LnRlc3RfZW5zdXJlX3N1YmRpcmVjdG9yeSk6CisgICAgICAgIChDb21t
b25JbmZvVGVzdC50ZXN0X2Vuc3VyZV9zdWJkaXJlY3RvcnlfcGF0aCk6CisgICAgICAgIChDb21t
b25JbmZvVGVzdC50ZXN0X2Vuc3VyZV9maWxlX3BhdGgpOgorCisgICAgICAgICogU2NyaXB0cy93
ZWJraXRweS9jb21tb24vcHJvamVjdC9vcHRpb25zLnB5OiBBZGRlZC4KKyAgICAgICAgKENvbW1v
bk9wdGlvbnMpOiBzdG9yZXMgY29tbWFuZCBsaW5lIG9wdGlvbnMKKyAgICAgICAgKENvbW1vbk9w
dGlvbnMuX19pbml0X18pOgorICAgICAgICAoQ29tbW9uT3B0aW9ucy5oZWxwKToKKyAgICAgICAg
KENvbW1vbk9wdGlvbnMudmVyYm9zaXR5KToKKyAgICAgICAgKENvbW1vbk9wdGlvbnMuc2V0X3Zl
cmJvc2l0eSk6CisgICAgICAgIChDb21tb25PcHRpb25zLmhlYWRlcnNfcm9sZSk6CisgICAgICAg
IChDb21tb25PcHRpb25zLnNldF9oZWFkZXJzX3JvbGUpOgorICAgICAgICAoQ29tbW9uT3B0aW9u
cy5zZXRfcGxhdGZvcm1fZGVmYXVsdCk6CisgICAgICAgIChDb21tb25PcHRpb25zLnNldF9wbGF0
Zm9ybSk6CisgICAgICAgIChDb21tb25PcHRpb25zLmlzX3BsYXRmb3JtX2VuYWJsZWQpOgorICAg
ICAgICAoQ29tbW9uT3B0aW9ucy5zZXRfZmlsZV90eXBlKToKKyAgICAgICAgKENvbW1vbk9wdGlv
bnMuaXNfZmlsZV90eXBlX2VuYWJsZWQpOgorICAgICAgICAoQ29tbW9uT3B0aW9ucy5hdXRvX2Fk
ZF9ncm91cHMpOgorICAgICAgICAoQ29tbW9uT3B0aW9ucy5zZXRfYXV0b19hZGRfZ3JvdXBzKToK
KyAgICAgICAgKENvbW1vbk9wdGlvbnMucGFyc2UpOgorCiAyMDEyLTAzLTI0ICBDaHJpcyBGbGVp
emFjaCAgPGNmbGVpemFjaEBhcHBsZS5jb20+CiAKICAgICAgICAgQVg6IFN1cHBvcnQgc29sdXRp
b24gdG8gaGFuZGxlIGludmFsaWQgYXggdGV4dCBtYXJrZXIKZGlmZiAtLWdpdCBhL1Rvb2xzL1Nj
cmlwdHMvd2Via2l0cHkvY29tbW9uL3Byb2plY3QvX19pbml0X18ucHkgYi9Ub29scy9TY3JpcHRz
L3dlYmtpdHB5L2NvbW1vbi9wcm9qZWN0L19faW5pdF9fLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmVmNjViZWU1
YmI3N2U5NmViYzdjZDljNDc2NDA2OTBmYmRhOGFjMTkKLS0tIC9kZXYvbnVsbAorKysgYi9Ub29s
cy9TY3JpcHRzL3dlYmtpdHB5L2NvbW1vbi9wcm9qZWN0L19faW5pdF9fLnB5CkBAIC0wLDAgKzEg
QEAKKyMgUmVxdWlyZWQgZm9yIFB5dGhvbiB0byBzZWFyY2ggdGhpcyBkaXJlY3RvcnkgZm9yIG1v
ZHVsZSBmaWxlcwpkaWZmIC0tZ2l0IGEvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9jb21tb24vcHJv
amVjdC9jb21tb24ucHkgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2NvbW1vbi9wcm9qZWN0L2Nv
bW1vbi5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwLi5jNmY2MDQ3NDY5MWQzOWQ1NWY2YTc2MWRkMTcxYzUwZDIxZDZl
M2M5Ci0tLSAvZGV2L251bGwKKysrIGIvVG9vbHMvU2NyaXB0cy93ZWJraXRweS9jb21tb24vcHJv
amVjdC9jb21tb24ucHkKQEAgLTAsMCArMSw1NzcgQEAKKyMhL3Vzci9iaW4vZW52IHB5dGhvbgor
IyBDb3B5cmlnaHQgKEMpIDIwMTIgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMK
KyMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisjIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyMgbWV0OgorIworIyAgICAqIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisj
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyMgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlCisjIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyMgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorIyBkaXN0cmlidXRpb24uCisj
ICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0
cworIyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1
Y3RzIGRlcml2ZWQgZnJvbQorIyB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Ig
d3JpdHRlbiBwZXJtaXNzaW9uLgorIworIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRI
RSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisjICJBUyBJUyIgQU5EIEFOWSBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisjIExJTUlU
RUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUgorIyBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgVEhFIENPUFlSSUdIVAorIyBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyMgU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorIyBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwKKyMgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisjIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyMgKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisj
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCisKK2Zyb20gd2Via2l0cHkuY29tbW9uLmNoZWNrb3V0LnNjbS5kZXRlY3Rp
b24gaW1wb3J0IFNDTURldGVjdG9yCitmcm9tIHdlYmtpdHB5LmNvbW1vbi5wcm9qZWN0Lm9wdGlv
bnMgaW1wb3J0ICoKK2Zyb20gd2Via2l0cHkuY29tbW9uLnN5c3RlbS5maWxlc3lzdGVtIGltcG9y
dCBGaWxlU3lzdGVtCitmcm9tIHdlYmtpdHB5LmNvbW1vbi5zeXN0ZW0uZXhlY3V0aXZlIGltcG9y
dCBFeGVjdXRpdmUKKworaW1wb3J0IHN5cworCisjID09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09CisKKworY2xhc3MgQ29tbW9uRmlsZShvYmplY3QpOgorICAgICIi
IgorICAgIENsYXNzIGRlc2NyaWJpbmcgYSBmaWxlIGFzIGl0IGlzIG9uIGRpc2suIFRoaXMgaXMg
bm90IHByb2plY3Qtc3BlY2lmaWMuCisgICAgTm8gMiBDb21tb25GaWxlIG9iamVjdHMgZXZlciBk
ZXNjcmliZSB0aGUgc2FtZSBmaWxlLgorICAgIExpc3RzIGFsbCBQcm9qZWN0RmlsZVJlZmVyZW5j
ZXMgdGhpcyBmaWxlIGlzIHJlZmVycmVkIGJ5LgorICAgICIiIgorICAgIElEX0NPVU5URVIgPSAw
CisKKyAgICBkZWYgX19pbml0X18oc2VsZiwgZGlyZWN0b3J5LCBmaWxlX25hbWUpOgorICAgICAg
ICBhc3NlcnQgZGlyZWN0b3J5CisgICAgICAgIGFzc2VydCBpc2luc3RhbmNlKGRpcmVjdG9yeSwg
Q29tbW9uRGlyZWN0b3J5KQorICAgICAgICBhc3NlcnQgZmlsZV9uYW1lCisgICAgICAgIGFzc2Vy
dCBzZWxmLmlzX3ZhbGlkX2ZpbGVfbmFtZShmaWxlX25hbWUpCisgICAgICAgIENvbW1vbkZpbGUu
SURfQ09VTlRFUiArPSAxCisgICAgICAgIHNlbGYuX2lkID0gQ29tbW9uRmlsZS5JRF9DT1VOVEVS
CisgICAgICAgIHNlbGYuZGlyZWN0b3J5ID0gZGlyZWN0b3J5CisgICAgICAgIHNlbGYubmFtZSA9
IGZpbGVfbmFtZQorCisgICAgQHN0YXRpY21ldGhvZAorICAgIGRlZiBpc192YWxpZF9maWxlX25h
bWUobmFtZSk6CisgICAgICAgIHJldHVybiBuYW1lIGFuZCBuYW1lICE9ICcuJyBhbmQgbmFtZSAh
PSAnLi4nIGFuZCAnLycgbm90IGluIG5hbWUgYW5kICdcXCcgbm90IGluIG5hbWUKKworICAgIGRl
ZiBpc192YWxpZChzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYuaXNfdmFsaWRfZmlsZV9uYW1l
KHNlbGYubmFtZSkgYW5kIHNlbGYuZGlyZWN0b3J5IGFuZCBzZWxmLmRpcmVjdG9yeS5pc192YWxp
ZCgpCisKKyAgICBkZWYgX19oYXNoX18oc2VsZik6CisgICAgICAgIHJldHVybiBoYXNoKHNlbGYu
X2lkKQorCisgICAgZGVmIF9fZXFfXyhzZWxmLCBvdGhlcik6CisgICAgICAgIGFzc2VydCBzZWxm
IGlzIG90aGVyIG9yIHNlbGYuX2lkICE9IG90aGVyLl9pZAorICAgICAgICByZXR1cm4gc2VsZiBp
cyBvdGhlcgorCisgICAgZGVmIF9fbmVfXyhzZWxmLCBvdGhlcik6CisgICAgICAgIGFzc2VydCBz
ZWxmIGlzIG90aGVyIG9yIHNlbGYuX2lkICE9IG90aGVyLl9pZAorICAgICAgICByZXR1cm4gc2Vs
ZiBpcyBub3Qgb3RoZXIKKworICAgIGRlZiBkZWJ1Z19wYXRoKHNlbGYpOgorICAgICAgICByZXR1
cm4gc2VsZi5kaXJlY3RvcnkuZGVidWdfcGF0aCgpICsgJy8nICsgc2VsZi5uYW1lCisKKworIyA9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCitjbGFzcyBDb21t
b25EaXJlY3Rvcnkob2JqZWN0KToKKyAgICAiIiIKKyAgICBDbGFzcyBhYnN0cmFjdGx5IGRlc2Ny
aWJpbmcgYSBkaXJlY3RvcnkuIFRoaXMgaXMgbm90IHByb2plY3Qtc3BlY2lmaWMuCisgICAgTm8g
MiBDb21tb25EaXJlY3Rvcnkgb2JqZWN0cyBldmVyIGRlc2NyaWJlIHRoZSBzYW1lIGRpcmVjdG9y
eS4KKyAgICBDb21tb25GaWxlIG9iamVjdHMgYXJlIGFsd2F5cyBhc3NpZ25lZCB0byBhIENvbW1v
bkRpcmVjdG9yeS4KKyAgICBEaXJlY3RvcmllcyBmb3JtIGEgdHJlZSAtIGdyYXBoIHN0cnVjdHVy
ZXMsIGkuZS4gZGlmZmVyZW50IHBhdGhzIHRvIHRoZSBzYW1lIGRpcmVjdG9yeSwgYXJlIG5vdCBz
dXBwb3J0ZWQuCisgICAgIiIiCisgICAgSURfQ09VTlRFUiA9IDAKKworICAgIGRlZiBfX2luaXRf
XyhzZWxmLCBwYXJlbnRfZGlyZWN0b3J5LCBkaXJlY3RvcnlfbmFtZSk6CisgICAgICAgIENvbW1v
bkRpcmVjdG9yeS5JRF9DT1VOVEVSICs9IDEKKyAgICAgICAgc2VsZi5faWQgPSBDb21tb25EaXJl
Y3RvcnkuSURfQ09VTlRFUgorICAgICAgICBzZWxmLm5hbWUgPSBkaXJlY3RvcnlfbmFtZQorICAg
ICAgICBzZWxmLnBhcmVudF9kaXJlY3RvcnkgPSBwYXJlbnRfZGlyZWN0b3J5ICAgICMgbWF5IGJl
IE5vbmUKKyAgICAgICAgc2VsZi5maWxlcyA9IHt9ICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAjIG1hcCBmaWxlIG5hbWUgKHN0cmluZykgLT4gQ29tbW9uRmlsZQorICAgICAgICBzZWxmLmRp
cmVjdG9yaWVzID0geycuJzogIHNlbGZ9ICAgICAgICAgICAgICMgbWFwIGRpcmVjdG9yeSBuYW1l
IChzdHJpbmcpIC0+IENvbW1vbkRpcmVjdG9yeQorCisgICAgZGVmIF9faGFzaF9fKHNlbGYpOgor
ICAgICAgICByZXR1cm4gaGFzaChzZWxmLl9pZCkKKworICAgIGRlZiBfX2VxX18oc2VsZiwgb3Ro
ZXIpOgorICAgICAgICBhc3NlcnQgbm90IG90aGVyIG9yIHNlbGYgaXMgb3RoZXIgb3Igc2VsZi5f
aWQgIT0gb3RoZXIuX2lkCisgICAgICAgIHJldHVybiBzZWxmIGlzIG90aGVyCisKKyAgICBkZWYg
X19uZV9fKHNlbGYsIG90aGVyKToKKyAgICAgICAgYXNzZXJ0IG5vdCBvdGhlciBvciBzZWxmIGlz
IG90aGVyIG9yIHNlbGYuX2lkICE9IG90aGVyLl9pZAorICAgICAgICByZXR1cm4gc2VsZiBpcyBu
b3Qgb3RoZXIKKworICAgIGRlZiBfYWRkX2RpcmVjdG9yeShzZWxmLCBkaXJlY3RvcnkpOgorICAg
ICAgICBhc3NlcnQgaXNpbnN0YW5jZShkaXJlY3RvcnksIENvbW1vbkRpcmVjdG9yeSkKKyAgICAg
ICAgYXNzZXJ0IGRpcmVjdG9yeS5pc192YWxpZCgpCisgICAgICAgIGFzc2VydCBkaXJlY3Rvcnku
bmFtZSBub3QgaW4gc2VsZi5kaXJlY3RvcmllcworICAgICAgICBhc3NlcnQgZGlyZWN0b3J5Lm5h
bWUgbm90IGluIHNlbGYuZmlsZXMKKyAgICAgICAgYXNzZXJ0IGRpcmVjdG9yeS5wYXJlbnRfZGly
ZWN0b3J5IGlzIHNlbGYKKyAgICAgICAgc2VsZi5kaXJlY3Rvcmllc1tkaXJlY3RvcnkubmFtZV0g
PSBkaXJlY3RvcnkKKworICAgIGRlZiBfcmVtb3ZlX2RpcmVjdG9yeShzZWxmLCBkaXJlY3Rvcnkp
OgorICAgICAgICBhc3NlcnQgaXNpbnN0YW5jZShkaXJlY3RvcnksIENvbW1vbkRpcmVjdG9yeSkK
KyAgICAgICAgYXNzZXJ0IGRpcmVjdG9yeS5uYW1lIGluIHNlbGYuZGlyZWN0b3JpZXMKKyAgICAg
ICAgZGVsIHNlbGYuZGlyZWN0b3JpZXNbZGlyZWN0b3J5Lm5hbWVdCisKKyAgICBkZWYgX2FkZF9m
aWxlKHNlbGYsIGZpbGUpOgorICAgICAgICBhc3NlcnQgaXNpbnN0YW5jZShmaWxlLCBDb21tb25G
aWxlKQorICAgICAgICBhc3NlcnQgQ29tbW9uRmlsZS5pc192YWxpZF9maWxlX25hbWUoZmlsZS5u
YW1lKQorICAgICAgICBhc3NlcnQgZmlsZS5uYW1lIG5vdCBpbiBzZWxmLmRpcmVjdG9yaWVzCisg
ICAgICAgIGFzc2VydCBmaWxlLm5hbWUgbm90IGluIHNlbGYuZmlsZXMKKyAgICAgICAgc2VsZi5m
aWxlc1tmaWxlLm5hbWVdID0gZmlsZQorCisgICAgZGVmIF9yZW1vdmVfZmlsZShzZWxmLCBmaWxl
KToKKyAgICAgICAgYXNzZXJ0IGlzaW5zdGFuY2UoZmlsZSwgUHJvamVjdEZpbGUpCisgICAgICAg
IGFzc2VydCBmaWxlLm5hbWUgaW4gc2VsZi5maWxlcworICAgICAgICBkZWwgc2VsZi5maWxlc1tm
aWxlLm5hbWVdCisKKyAgICBkZWYgZGVidWdfcGF0aChzZWxmKToKKyAgICAgICAgaWYgc2VsZi5w
YXJlbnRfZGlyZWN0b3J5OgorICAgICAgICAgICAgcmV0dXJuIHNlbGYucGFyZW50X2RpcmVjdG9y
eS5kZWJ1Z19wYXRoKCkgKyAnLycgKyBzZWxmLm5hbWUKKyAgICAgICAgcmV0dXJuIHNlbGYubmFt
ZQorCisgICAgZGVmIGlzX2VtcHR5KHNlbGYpOgorICAgICAgICBhc3NlcnQgbGVuKHNlbGYuZGly
ZWN0b3JpZXMpID49IDEKKyAgICAgICAgcmV0dXJuIGxlbihzZWxmLmRpcmVjdG9yaWVzKSA8PSAx
CisKKyAgICBkZWYgZ2V0X2RpcmVjdG9yeShzZWxmLCBkaXJlY3RvcnlfbmFtZSk6CisgICAgICAg
IGFzc2VydCBkaXJlY3RvcnlfbmFtZQorICAgICAgICBkaXJlY3RvcnkgPSBzZWxmLmRpcmVjdG9y
aWVzLmdldChkaXJlY3RvcnlfbmFtZSkKKyAgICAgICAgaWYgZGlyZWN0b3J5X25hbWUgPT0gJy4n
OgorICAgICAgICAgICAgYXNzZXJ0IGRpcmVjdG9yeSBpcyBzZWxmCisgICAgICAgIGVsaWYgZGly
ZWN0b3J5X25hbWUgPT0gJy4uJzoKKyAgICAgICAgICAgIGFzc2VydCBkaXJlY3RvcnkgaXMgc2Vs
Zi5wYXJlbnRfZGlyZWN0b3J5CisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBhc3NlcnQgbm90
IGRpcmVjdG9yeSBvciBkaXJlY3RvcnkucGFyZW50X2RpcmVjdG9yeSBpcyBzZWxmIG9yIChpc2lu
c3RhbmNlKHNlbGYsIENvbW1vbkNyb3Nzb3ZlclN1YkRpcmVjdG9yeSkgYW5kIGlzaW5zdGFuY2Uo
ZGlyZWN0b3J5LCBDb21tb25CYXNlRGlyZWN0b3J5KSkKKyAgICAgICAgcmV0dXJuIGRpcmVjdG9y
eQorCisgICAgZGVmIGFkZF9maWxlKHNlbGYsIGZpbGUpOgorICAgICAgICBhc3NlcnQgaXNpbnN0
YW5jZShmaWxlLCBDb21tb25GaWxlKQorICAgICAgICBhc3NlcnQgQ29tbW9uRmlsZS5pc192YWxp
ZF9maWxlX25hbWUoZmlsZS5uYW1lKQorICAgICAgICBhc3NlcnQgZmlsZS5uYW1lIG5vdCBpbiBz
ZWxmLmRpcmVjdG9yaWVzCisgICAgICAgIGFzc2VydCBmaWxlLm5hbWUgbm90IGluIHNlbGYuZmls
ZXMKKyAgICAgICAgc2VsZi5fYWRkX2ZpbGUoZmlsZSkKKyAgICAgICAgZmlsZS5kaXJlY3Rvcnkg
PSBzZWxmCisKKyAgICBkZWYgcmVtb3ZlX2ZpbGUoc2VsZiwgZmlsZSk6CisgICAgICAgIGFzc2Vy
dCBpc2luc3RhbmNlKGZpbGUsIFByb2plY3RGaWxlKQorICAgICAgICBhc3NlcnQgZmlsZS5uYW1l
IGluIHNlbGYuZmlsZXMKKyAgICAgICAgc2VsZi5fcmVtb3ZlX2ZpbGUoZmlsZSkKKyAgICAgICAg
ZmlsZS5kaXJlY3RvcnkgPSBOb25lCisKKyAgICBkZWYgZ2V0X2ZpbGUoc2VsZiwgZmlsZV9uYW1l
KToKKyAgICAgICAgYXNzZXJ0IGZpbGVfbmFtZQorICAgICAgICBmaWxlID0gc2VsZi5maWxlcy5n
ZXQoZmlsZV9uYW1lKQorICAgICAgICBhc3NlcnQgbm90IGZpbGUgb3IgZmlsZS5kaXJlY3Rvcnkg
aXMgc2VsZgorICAgICAgICByZXR1cm4gZmlsZQorCisgICAgZGVmIGdldF9lbnRyeShzZWxmLCBu
YW1lKToKKyAgICAgICAgcmV0dXJuIHNlbGYuZ2V0X2RpcmVjdG9yeShuYW1lKSBvciBzZWxmLmdl
dF9maWxlKG5hbWUpCisKKyAgICBkZWYgZGlyZWN0b3J5X2xpc3Qoc2VsZik6CisgICAgICAgIGlm
IHNlbGYucGFyZW50X2RpcmVjdG9yeToKKyAgICAgICAgICAgIHJldHVybiBzZWxmLnBhcmVudF9k
aXJlY3RvcnkuZGlyZWN0b3J5X2xpc3QoKSArIFtzZWxmXQorICAgICAgICByZXR1cm4gW3NlbGZd
CisKKyAgICBkZWYgYmFzZV9kaXJlY3Rvcnkoc2VsZik6CisgICAgICAgIGlmIHNlbGYucGFyZW50
X2RpcmVjdG9yeToKKyAgICAgICAgICAgIHJldHVybiBzZWxmLnBhcmVudF9kaXJlY3RvcnkuYmFz
ZV9kaXJlY3RvcnkoKQorICAgICAgICByZXR1cm4gc2VsZgorCisgICAgZGVmIGNvbW1vbl9kaXJl
Y3Rvcnkoc2VsZiwgb3RoZXJfZGlyZWN0b3J5KToKKyAgICAgICAgYXNzZXJ0IG90aGVyX2RpcmVj
dG9yeQorICAgICAgICBhc3NlcnQgaXNpbnN0YW5jZShvdGhlcl9kaXJlY3RvcnkpCisgICAgICAg
IGRpcmVjdG9yeV9saXN0MSA9IHNlbGYuZGlyZWN0b3J5X2xpc3QoKQorICAgICAgICBkaXJlY3Rv
cnlfbGlzdDIgPSBvdGhlcl9kaXJlY3RvcnkuZGlyZWN0b3J5X2xpc3QoKQorICAgICAgICBjb21t
b25fZGlyZWN0b3J5ID0gTm9uZQorICAgICAgICB3aGlsZSBkaXJlY3RvcnlfbGlzdDEgYW5kIGRp
cmVjdG9yeV9saXN0MiBhbmQgZGlyZWN0b3J5X2xpc3QxWzBdID09IGRpcmVjdG9yeV9saXN0Mlsw
XToKKyAgICAgICAgICAgIGNvbW1vbl9kaXJlY3RvcnkgPSBkaXJlY3RvcnlfbGlzdDEucG9wKDAp
CisgICAgICAgICAgICBkaXJlY3RvcnlfbGlzdDIucG9wKDApCisgICAgICAgIHJldHVybiBjb21t
b25fZGlyZWN0b3J5CisKKworY2xhc3MgQ29tbW9uUm9vdERpcmVjdG9yeShDb21tb25EaXJlY3Rv
cnkpOgorICAgICIiIgorICAgIENsYXNzIGRlc2NyaWJpbmcgdGhlIHJvb3QgZGlyZWN0b3J5Lgor
ICAgICIiIgorICAgIE5BTUUgPSAnLycKKworICAgIGRlZiBfX2luaXRfXyhzZWxmKToKKyAgICAg
ICAgQ29tbW9uRGlyZWN0b3J5Ll9faW5pdF9fKHNlbGYsIE5vbmUsIENvbW1vblJvb3REaXJlY3Rv
cnkuTkFNRSkKKworICAgIGRlZiBpc192YWxpZChzZWxmKToKKyAgICAgICAgcmV0dXJuIFRydWUK
KworICAgIGRlZiBfZGVzY3BhdGhfd2l0aF9zZXAoc2VsZiwgc2VwKToKKyAgICAgICAgcmV0dXJu
IHNlcAorCisKK2NsYXNzIENvbW1vblNDTURpcmVjdG9yeShDb21tb25EaXJlY3RvcnkpOgorICAg
ICIiIgorICAgIENsYXNzIGRlc2NyaWJpbmcgdGhlIGNoZWNrb3V0IHJvb3QgZGlyZWN0b3J5Lgor
ICAgICIiIgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBkaXJlY3RvcnlfbmFtZSwgcm9vdF9kaXJl
Y3RvcnksIGFic3BhdGgpOgorICAgICAgICBhc3NlcnQgZGlyZWN0b3J5X25hbWUKKyAgICAgICAg
YXNzZXJ0IHJvb3RfZGlyZWN0b3J5CisgICAgICAgIGFzc2VydCBpc2luc3RhbmNlKHJvb3RfZGly
ZWN0b3J5LCBDb21tb25Sb290RGlyZWN0b3J5KQorICAgICAgICBhc3NlcnQgYWJzcGF0aAorICAg
ICAgICBDb21tb25EaXJlY3RvcnkuX19pbml0X18oc2VsZiwgTm9uZSwgZGlyZWN0b3J5X25hbWUp
CisgICAgICAgIHNlbGYucm9vdF9kaXJlY3RvcnkgPSByb290X2RpcmVjdG9yeQorICAgICAgICBz
ZWxmLmFic3BhdGggPSBhYnNwYXRoCisKKyAgICBkZWYgaXNfdmFsaWQoc2VsZik6CisgICAgICAg
IHJldHVybiBUcnVlCisKKyAgICBkZWYgX2Rlc2NwYXRoX3dpdGhfc2VwKHNlbGYsIHNlcCk6Cisg
ICAgICAgIHJldHVybiBzZWxmLm5hbWUKKworCitjbGFzcyBDb21tb25CYXNlRGlyZWN0b3J5KENv
bW1vbkRpcmVjdG9yeSk6CisgICAgIiIiCisgICAgQ2xhc3MgZGVzY3JpYmluZyBhIGJhc2UgZGly
ZWN0b3J5IHRoYXQgaXMgbm90IGxvY2F0ZWQgYXQgYW55IHNwZWNpZmljIHBsYWNlLgorICAgIEZv
ciBleGFtcGxlOiBidWlsZCBvdXRwdXQgZGlyZWN0b3J5LCB0ZW1wIGRpcmVjdG9yeQorICAgICIi
IgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBkaXJlY3RvcnlfbmFtZSk6CisgICAgICAgIGFzc2Vy
dCBkaXJlY3RvcnlfbmFtZQorICAgICAgICBDb21tb25EaXJlY3RvcnkuX19pbml0X18oc2VsZiwg
Tm9uZSwgZGlyZWN0b3J5X25hbWUpCisKKyAgICBkZWYgaXNfdmFsaWQoc2VsZik6CisgICAgICAg
IHJldHVybiBUcnVlCisKKyAgICBkZWYgX2Rlc2NwYXRoX3dpdGhfc2VwKHNlbGYsIHNlcCk6Cisg
ICAgICAgIHJldHVybiBzZWxmLm5hbWUgKyBzZXAKKworCitjbGFzcyBDb21tb25TdWJEaXJlY3Rv
cnkoQ29tbW9uRGlyZWN0b3J5KToKKyAgICAiIiIKKyAgICBDbGFzcyBkZXNjcmliaW5nIGEgc3Vi
ZGlyZWN0b3J5IHVuZGVyIGEgcm9vdC0sIGJhc2UtIG9yIG90aGVyIHN1Yi1kaXJlY3RvcnkuCisg
ICAgIiIiCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHBhcmVudF9kaXJlY3RvcnksIGRpcmVjdG9y
eV9uYW1lKToKKyAgICAgICAgYXNzZXJ0IHBhcmVudF9kaXJlY3RvcnkKKyAgICAgICAgYXNzZXJ0
IGlzaW5zdGFuY2UocGFyZW50X2RpcmVjdG9yeSwgQ29tbW9uRGlyZWN0b3J5KQorICAgICAgICBh
c3NlcnQgc2VsZi5pc192YWxpZF9zdWJkaXJlY3RvcnlfbmFtZShkaXJlY3RvcnlfbmFtZSkKKyAg
ICAgICAgQ29tbW9uRGlyZWN0b3J5Ll9faW5pdF9fKHNlbGYsIHBhcmVudF9kaXJlY3RvcnksIGRp
cmVjdG9yeV9uYW1lKQorICAgICAgICBzZWxmLmRpcmVjdG9yaWVzWycuLiddID0gcGFyZW50X2Rp
cmVjdG9yeQorCisgICAgQHN0YXRpY21ldGhvZAorICAgIGRlZiBpc192YWxpZF9zdWJkaXJlY3Rv
cnlfbmFtZShuYW1lKToKKyAgICAgICAgcmV0dXJuIG5hbWUgYW5kIG5hbWUgIT0gJy4nIGFuZCBu
YW1lICE9ICcuLicgYW5kICcvJyBub3QgaW4gbmFtZSBhbmQgJ1xcJyBub3QgaW4gbmFtZQorCisg
ICAgZGVmIGlzX3ZhbGlkKHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZi5wYXJlbnRfZGlyZWN0
b3J5IGFuZCBzZWxmLnBhcmVudF9kaXJlY3RvcnkuaXNfdmFsaWQoKSBhbmQgc2VsZi5pc192YWxp
ZF9zdWJkaXJlY3RvcnlfbmFtZShzZWxmLm5hbWUpCisKKyAgICBkZWYgaXNfZW1wdHkoc2VsZik6
CisgICAgICAgIGFzc2VydCBsZW4oc2VsZi5kaXJlY3RvcmllcykgPj0gMgorICAgICAgICByZXR1
cm4gbGVuKHNlbGYuZGlyZWN0b3JpZXMpIDw9IDIKKworICAgIGRlZiBfZGVzY3BhdGhfd2l0aF9z
ZXAoc2VsZiwgc2VwKToKKyAgICAgICAgcmV0dXJuIHNlbGYucGFyZW50X2RpcmVjdG9yeS5fZGVz
Y3BhdGhfd2l0aF9zZXAoc2VwKSArIHNlbGYubmFtZSArIHNlcAorCisKK2NsYXNzIENvbW1vbkNy
b3Nzb3ZlclN1YkRpcmVjdG9yeShDb21tb25TdWJEaXJlY3RvcnkpOgorICAgICIiIgorICAgIENs
YXNzIGZvciBzcGVjaWFsIGRpcmVjdG9yaWVzIHRoYXQgaGF2ZSBhdCBsZWFzdCBzb21lIHN1Yi1k
aXJlY3RvcmllcyB0aGF0IGFyZSBDb21tb25CYXNlRGlyZWN0b3J5IG9iamVjdHMgcmF0aGVyIHRo
YW4gQ29tbW9uU3ViRGlyZWN0b3J5LgorICAgIEZvciBleGFtcGxlLCAnRGVyaXZlZFNvdXJjZXMn
IHVuZGVyICcke0JVSUxEfScgaXMgc3VjaCBhIGNhc2UsIGFzIGl0J3Mgb3duICdXZWJDb3JlJyBz
dWItZGlyZWN0b3J5IGVudHJ5IGNyb3NzZXMgb3ZlciBpbnRvIGFub3RoZXIgYmFzZSBkaXJlY3Rv
cnkuCisgICAgIiIiCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHBhcmVudF9kaXJlY3RvcnksIGRp
cmVjdG9yeV9uYW1lLCBuYW1lX3RvX3N1YmRpcmVjdG9yeSk6CisgICAgICAgIGFzc2VydCBwYXJl
bnRfZGlyZWN0b3J5CisgICAgICAgIGFzc2VydCBpc2luc3RhbmNlKHBhcmVudF9kaXJlY3Rvcnks
IENvbW1vbkRpcmVjdG9yeSkKKyAgICAgICAgYXNzZXJ0IHNlbGYuaXNfdmFsaWRfc3ViZGlyZWN0
b3J5X25hbWUoZGlyZWN0b3J5X25hbWUpCisgICAgICAgIGFzc2VydCBuYW1lX3RvX3N1YmRpcmVj
dG9yeQorICAgICAgICBDb21tb25TdWJEaXJlY3RvcnkuX19pbml0X18oc2VsZiwgcGFyZW50X2Rp
cmVjdG9yeSwgZGlyZWN0b3J5X25hbWUpCisgICAgICAgIHNlbGYuZGlyZWN0b3JpZXMudXBkYXRl
KG5hbWVfdG9fc3ViZGlyZWN0b3J5KQorCisKK2NsYXNzIENvbW1vbkRFRklORShvYmplY3QpOgor
ICAgICIiIgorICAgIENsYXNzIGRlc2NyaWJpbmcgYSBnZW5lcmFsIEVOQUJMRV8uLi4gZmxhZywg
b3Igc2ltaWxhcgorICAgICIiIgorICAgIGRlZiBfX2luaXRfXyhzZWxmLCBmbGFnX25hbWUpOgor
ICAgICAgICBhc3NlcnQgZmxhZ19uYW1lCisgICAgICAgIHNlbGYuZmxhZ19uYW1lID0gZmxhZ19u
YW1lCisKKyAgICBkZWYgX19oYXNoX18oc2VsZik6CisgICAgICAgIHJldHVybiBoYXNoKHNlbGYu
ZmxhZ19uYW1lKQorCisgICAgZGVmIF9fZXFfXyhzZWxmLCBvdGhlcik6CisgICAgICAgIGFzc2Vy
dCBub3Qgb3RoZXIgb3IgaXNpbnN0YW5jZShvdGhlciwgQ29tbW9uREVGSU5FKQorICAgICAgICBh
c3NlcnQgbm90IG90aGVyIG9yIHNlbGYgaXMgb3RoZXIgb3Igc2VsZi5mbGFnX25hbWUgIT0gb3Ro
ZXIuZmxhZ19uYW1lCisgICAgICAgIHJldHVybiBzZWxmIGlzIG90aGVyCisKKyAgICBkZWYgX19u
ZV9fKHNlbGYsIG90aGVyKToKKyAgICAgICAgYXNzZXJ0IG5vdCBvdGhlciBvciBpc2luc3RhbmNl
KG90aGVyLCBDb21tb25ERUZJTkUpCisgICAgICAgIGFzc2VydCBub3Qgb3RoZXIgb3Igc2VsZiBp
cyBvdGhlciBvciBzZWxmLmZsYWdfbmFtZSAhPSBvdGhlci5mbGFnX25hbWUKKyAgICAgICAgcmV0
dXJuIHNlbGYgaXMgbm90IG90aGVyCisKKworIyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQorCitjbGFzcyBDb21tb25JbmZvKG9iamVjdCk6CisgICAgIiIiCisg
ICAgU3R1ZmYgY29tbW9uIHRvIGFsbCBwbGF0Zm9ybSBwcm9qZWN0IGZpbGVzIHdpdGhpbiB0aGUg
c2FtZSBjaGVja291dC4KKyAgICBIb2xkcyBhbGwgZGlyZWN0b3JpZXMgYW5kIGFsbCBmaWxlcyBv
ZiB0aGUgY2hlY2tvdXQuCisgICAgIiIiCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHByb2plY3Rf
bmFtZSwgb3B0aW9ucz1Ob25lLCBmaWxlc3lzdGVtPU5vbmUpOgorICAgICAgICBhc3NlcnQgcHJv
amVjdF9uYW1lCisgICAgICAgIHNlbGYuZXhlY3V0aXZlID0gRXhlY3V0aXZlKCkKKyAgICAgICAg
IyB0aGUgZmlsZSBzeXN0ZW0gb2JqZWN0IHRvIHVzZSAoc2VwYXJhdGUgY2xhc3MgdG8gYWxsb3cg
bW9ja2luZykKKyAgICAgICAgc2VsZi5maWxlc3lzdGVtID0gZmlsZXN5c3RlbSBvciBGaWxlU3lz
dGVtKCkKKyAgICAgICAgIyB0aGUgc291cmNlIGNvbnRyb2wgbWFuYWdlbWVudCBvYmplY3QKKyAg
ICAgICAgc2VsZi5zY20gPSBTQ01EZXRlY3RvcihzZWxmLmZpbGVzeXN0ZW0sIHNlbGYuZXhlY3V0
aXZlKS5kZWZhdWx0X3NjbSgpCisgICAgICAgICMgYWJzb2x1dGUgcGF0aCBvZiB0aGUgY2hlY2tv
dXQgcm9vdCAoc3RyaXAgdHJhaWxpbmcgc2xhc2hlcykKKyAgICAgICAgc2VsZi5zY21fYWJzcGF0
aCA9IHNlbGYuc2NtLmNoZWNrb3V0X3Jvb3QucnN0cmlwKCcvJykucnN0cmlwKCdcXCcpCisgICAg
ICAgICMgbm9uLXBsYXRmb3JtLXNwZWNpZmljIG5hbWUgb2YgdGhlIHByb2plY3QKKyAgICAgICAg
c2VsZi5wcm9qZWN0X25hbWUgPSBwcm9qZWN0X25hbWUKKyAgICAgICAgIyBvcHRpb25zIHRvIHVz
ZQorICAgICAgICBzZWxmLm9wdGlvbnMgPSBvcHRpb25zIG9yIENvbW1vbk9wdGlvbnMoKQorICAg
ICAgICAjIFN0b3JlIGFsbCBkaXJlY3RvcmllcyBhbmQgYWxsIGZpbGVzIGZvciBxdWljayByZWZl
cmVuY2UKKyAgICAgICAgc2VsZi5hbGxfZGlyZWN0b3JpZXMgPSBzZXQoKQorICAgICAgICBzZWxm
LmFsbF9maWxlcyA9IHNldCgpCisgICAgICAgICMgU3RvcmUgYWxsIGZsYWdzIChtYXAgZmxhZyBu
YW1lIC0+IENvbW1vbkRFRklORSBvYmplY3QpCisgICAgICAgIHNlbGYuYWxsX0RFRklORXMgPSB7
fQorICAgICAgICAjIGZpbGUgc3lzdGVtIHJvb3QgZGlyZWN0b3J5CisgICAgICAgIHNlbGYucm9v
dF9kaXJlY3RvcnkgPSBzZWxmLl9jcmVhdGVfcm9vdF9kaXJlY3RvcnkoKQorICAgICAgICAjIFND
TSBiYXNlIGRpcmVjdG9yeSAtIHRoaXMgaXMgcmVsYXRpdmUsIGJ1dCB0aGUgZXhhY3QgbG9jYXRp
b24gaXMgaXJyZWxldmFudAorICAgICAgICAjIChXZSBhc3N1bWUgbm8gZmlsZSBvciBkaXJlY3Rv
cnkgdGhhdCBoYXMgYW4gYWJzb2x1dGUgcGF0aCBpcyBsb2NhdGVkIHdpdGhpbiB0aGUgU0NNIGRp
cmVjdG9yeS4pCisgICAgICAgIHNlbGYuc2NtX2RpcmVjdG9yeSA9IHNlbGYuX2NyZWF0ZV9zY21f
ZGlyZWN0b3J5KCIke1NDTX0iLCBzZWxmLnNjbV9hYnNwYXRoKQorCisgICAgZGVmIHNldF9vcHRp
b25zKHNlbGYsIG9wdGlvbnMpOgorICAgICAgICBhc3NlcnQgb3B0aW9ucworICAgICAgICBhc3Nl
cnQgaXNpbnN0YW5jZShvcHRpb25zLCBDb21tb25PcHRpb25zKQorICAgICAgICBzZWxmLm9wdGlv
bnMgPSBvcHRpb25zCisKKyAgICBkZWYgZGVidWcoc2VsZiwgbXNnLCB2ZXJib3NpdHk9Q29tbW9u
T3B0aW9ucy5WRVJCT1NJVFlfREVCVUcpOgorICAgICAgICBpZiBzZWxmLm9wdGlvbnMudmVyYm9z
aXR5KCkgPj0gdmVyYm9zaXR5OgorICAgICAgICAgICAgcHJpbnQgIkRFQlVHOiAiICsgbXNnCisK
KyAgICBkZWYgaW5mbyhzZWxmLCBtc2csIHZlcmJvc2l0eT1Db21tb25PcHRpb25zLlZFUkJPU0lU
WV9WRVJCT1NFKToKKyAgICAgICAgaWYgc2VsZi5vcHRpb25zLnZlcmJvc2l0eSgpID49IHZlcmJv
c2l0eToKKyAgICAgICAgICAgIHByaW50ICJJTkZPOiAiICsgbXNnCisKKyAgICBkZWYgd2Fybmlu
ZyhzZWxmLCBtc2cpOgorICAgICAgICBpZiBzZWxmLm9wdGlvbnMudmVyYm9zaXR5KCkgPj0gQ29t
bW9uT3B0aW9ucy5WRVJCT1NJVFlfTk9STUFMOgorICAgICAgICAgICAgc3lzLnN0ZGVyci53cml0
ZSgiV0FSTklORzogJXNcbiIgJSBtc2cpCisKKyAgICBkZWYgZXJyb3Ioc2VsZiwgbXNnKToKKyAg
ICAgICAgc3lzLnN0ZGVyci53cml0ZSgiRVJST1I6ICVzXG4iICUgbXNnKQorICAgICAgICByYWlz
ZSBFeGNlcHRpb24obXNnKQorCisgICAgZGVmIHZlcmlmeShzZWxmLCBleHByLCBtc2cpOgorICAg
ICAgICBpZiBub3QgZXhwcjoKKyAgICAgICAgICAgIHNlbGYuZXJyb3IobXNnKQorCisgICAgZGVm
IF9jcmVhdGVfcm9vdF9kaXJlY3Rvcnkoc2VsZik6CisgICAgICAgIHJvb3RfZGlyZWN0b3J5ID0g
Q29tbW9uUm9vdERpcmVjdG9yeSgpCisgICAgICAgIHNlbGYuYWxsX2RpcmVjdG9yaWVzLmFkZChy
b290X2RpcmVjdG9yeSkKKyAgICAgICAgcmV0dXJuIHJvb3RfZGlyZWN0b3J5CisKKyAgICBkZWYg
X2NyZWF0ZV9zY21fZGlyZWN0b3J5KHNlbGYsIGRpcmVjdG9yeV9uYW1lLCBzY21fYWJzcGF0aCk6
CisgICAgICAgIGFzc2VydCBzY21fYWJzcGF0aAorICAgICAgICBzY21fZGlyZWN0b3J5ID0gQ29t
bW9uU0NNRGlyZWN0b3J5KGRpcmVjdG9yeV9uYW1lLCBzZWxmLnJvb3RfZGlyZWN0b3J5LCBzY21f
YWJzcGF0aCkKKyAgICAgICAgc2VsZi5hbGxfZGlyZWN0b3JpZXMuYWRkKHNjbV9kaXJlY3Rvcnkp
CisgICAgICAgIHJldHVybiBzY21fZGlyZWN0b3J5CisKKyAgICBkZWYgY3JlYXRlX2Jhc2VfZGly
ZWN0b3J5KHNlbGYsIGRpcmVjdG9yeV9uYW1lKToKKyAgICAgICAgYXNzZXJ0IGRpcmVjdG9yeV9u
YW1lCisgICAgICAgIGJhc2VfZGlyZWN0b3J5ID0gQ29tbW9uQmFzZURpcmVjdG9yeShkaXJlY3Rv
cnlfbmFtZSkKKyAgICAgICAgc2VsZi5hbGxfZGlyZWN0b3JpZXMuYWRkKGJhc2VfZGlyZWN0b3J5
KQorICAgICAgICByZXR1cm4gYmFzZV9kaXJlY3RvcnkKKworICAgIGRlZiBjcmVhdGVfY3Jvc3Nv
dmVyX3N1YmRpcmVjdG9yeShzZWxmLCBwYXJlbnRfZGlyZWN0b3J5LCBkaXJlY3RvcnlfbmFtZSwg
bmFtZV90b19zdWJkaXJlY3RvcnkpOgorICAgICAgICBhc3NlcnQgcGFyZW50X2RpcmVjdG9yeQor
ICAgICAgICBhc3NlcnQgaXNpbnN0YW5jZShwYXJlbnRfZGlyZWN0b3J5LCBDb21tb25EaXJlY3Rv
cnkpCisgICAgICAgIGFzc2VydCBkaXJlY3RvcnlfbmFtZQorICAgICAgICBhc3NlcnQgQ29tbW9u
U3ViRGlyZWN0b3J5LmlzX3ZhbGlkX3N1YmRpcmVjdG9yeV9uYW1lKGRpcmVjdG9yeV9uYW1lKQor
ICAgICAgICBhc3NlcnQgbm90IHBhcmVudF9kaXJlY3RvcnkuZ2V0X2VudHJ5KGRpcmVjdG9yeV9u
YW1lKQorICAgICAgICBjcm9zc292ZXJfc3ViZGlyZWN0b3J5ID0gQ29tbW9uQ3Jvc3NvdmVyU3Vi
RGlyZWN0b3J5KHBhcmVudF9kaXJlY3RvcnksIGRpcmVjdG9yeV9uYW1lLCBuYW1lX3RvX3N1YmRp
cmVjdG9yeSkKKyAgICAgICAgcGFyZW50X2RpcmVjdG9yeS5fYWRkX2RpcmVjdG9yeShjcm9zc292
ZXJfc3ViZGlyZWN0b3J5KQorICAgICAgICBzZWxmLmFsbF9kaXJlY3Rvcmllcy5hZGQoY3Jvc3Nv
dmVyX3N1YmRpcmVjdG9yeSkKKyAgICAgICAgcmV0dXJuIGNyb3Nzb3Zlcl9zdWJkaXJlY3RvcnkK
KworICAgIGRlZiBjcmVhdGVfc3ViZGlyZWN0b3J5KHNlbGYsIHBhcmVudF9kaXJlY3RvcnksIGRp
cmVjdG9yeV9uYW1lKToKKyAgICAgICAgYXNzZXJ0IHBhcmVudF9kaXJlY3RvcnkKKyAgICAgICAg
YXNzZXJ0IGlzaW5zdGFuY2UocGFyZW50X2RpcmVjdG9yeSwgQ29tbW9uRGlyZWN0b3J5KQorICAg
ICAgICBhc3NlcnQgZGlyZWN0b3J5X25hbWUKKyAgICAgICAgYXNzZXJ0IENvbW1vblN1YkRpcmVj
dG9yeS5pc192YWxpZF9zdWJkaXJlY3RvcnlfbmFtZShkaXJlY3RvcnlfbmFtZSkKKyAgICAgICAg
YXNzZXJ0IG5vdCBwYXJlbnRfZGlyZWN0b3J5LmdldF9lbnRyeShkaXJlY3RvcnlfbmFtZSkKKyAg
ICAgICAgc3ViZGlyZWN0b3J5ID0gQ29tbW9uU3ViRGlyZWN0b3J5KHBhcmVudF9kaXJlY3Rvcnks
IGRpcmVjdG9yeV9uYW1lKQorICAgICAgICBwYXJlbnRfZGlyZWN0b3J5Ll9hZGRfZGlyZWN0b3J5
KHN1YmRpcmVjdG9yeSkKKyAgICAgICAgc2VsZi5hbGxfZGlyZWN0b3JpZXMuYWRkKHN1YmRpcmVj
dG9yeSkKKyAgICAgICAgcmV0dXJuIHN1YmRpcmVjdG9yeQorCisgICAgZGVmIGVuc3VyZV9zdWJk
aXJlY3Rvcnkoc2VsZiwgcGFyZW50X2RpcmVjdG9yeSwgZGlyZWN0b3J5X25hbWUpOgorICAgICAg
ICAnJycKKyAgICAgICAgRW5zdXJlcyB0aGF0IHBhcmVudF9kaXJlY3RvcnkgaGFzIGEgc3ViLWRp
cmVjdG9yeSB3aXRoIHRoZSBnaXZlbiBuYW1lIGFuZCByZXR1cm5zIGl0LgorICAgICAgICBDcmVh
dGVzIGEgQ29tbW9uRGlyZWN0b3J5IG9iamVjdCBpZiBuZWNlc3NhcnkuCisgICAgICAgICcnJwor
ICAgICAgICBhc3NlcnQgcGFyZW50X2RpcmVjdG9yeQorICAgICAgICBhc3NlcnQgaXNpbnN0YW5j
ZShwYXJlbnRfZGlyZWN0b3J5LCBDb21tb25EaXJlY3RvcnkpCisgICAgICAgIGFzc2VydCBkaXJl
Y3RvcnlfbmFtZQorICAgICAgICBhc3NlcnQgbm90IHBhcmVudF9kaXJlY3RvcnkuZ2V0X2ZpbGUo
ZGlyZWN0b3J5X25hbWUpCisgICAgICAgIHJldHVybiBwYXJlbnRfZGlyZWN0b3J5LmdldF9kaXJl
Y3RvcnkoZGlyZWN0b3J5X25hbWUpIG9yIHNlbGYuY3JlYXRlX3N1YmRpcmVjdG9yeShwYXJlbnRf
ZGlyZWN0b3J5LCBkaXJlY3RvcnlfbmFtZSkKKworICAgIGRlZiBlbnN1cmVfc3ViZGlyZWN0b3J5
X3BhdGgoc2VsZiwgYmFzZV9kaXJlY3RvcnksIHJlbHBhdGgsIHNlcD1Ob25lLCB2YXJpYWJsZV90
b19kaXJlY3Rvcnk9Tm9uZSk6CisgICAgICAgICcnJworICAgICAgICBFbnN1cmVzIHRoYXQgdGhl
IHBhdGggZ2l2ZW4gYnkgYSBiYXNlIGRpcmVjdG9yeSBhbmQgcmVsYXRpdmUgcGF0aCBleGlzdHMu
CisgICAgICAgIENyZWF0ZXMgQ29tbW9uRGlyZWN0b3J5IG9iamVjdHMgd2hlcmUgbmVjZXNzYXJ5
LgorICAgICAgICB2YXJpYWJsZV90b19kaXJlY3RvcnksIGlmIGdpdmVuLCBtYXBzIHNwZWNpZmlj
IHN0cmluZ3MgdG8gc3BlY2lmaWMgZGlyZWN0b3JpZXMgd2hlbiBlbmNvdW50ZXJlZC4KKyAgICAg
ICAgJycnCisgICAgICAgIGFzc2VydCBiYXNlX2RpcmVjdG9yeQorICAgICAgICBhc3NlcnQgaXNp
bnN0YW5jZShiYXNlX2RpcmVjdG9yeSwgQ29tbW9uRGlyZWN0b3J5KQorICAgICAgICBpZiBub3Qg
cmVscGF0aDoKKyAgICAgICAgICAgIHJldHVybiBiYXNlX2RpcmVjdG9yeQorICAgICAgICBzZXAg
PSBzZXAgb3IgJy8nCisgICAgICAgIHZhcmlhYmxlX3RvX2RpcmVjdG9yeSA9IHZhcmlhYmxlX3Rv
X2RpcmVjdG9yeSBvciB7fQorICAgICAgICBpZiByZWxwYXRoLnN0YXJ0c3dpdGgoc2VwKToKKyAg
ICAgICAgICAgIGJhc2VfZGlyZWN0b3J5ID0gc2VsZi5yb290X2RpcmVjdG9yeQorICAgICAgICBy
ZWxwYXRoID0gcmVscGF0aC5zdHJpcChzZXApCisgICAgICAgICMgVGhlIGZvbGxvd2luZyBhc3N1
bWVzIHNwZWNpYWwgZGlyZWN0b3J5IG5hbWVzIG9jY3VyIGF0IHRoZSBiZWdpbm5pbmcgb2YgdGhl
IHBhdGggc3RyaW5nIG9ubHkuCisgICAgICAgIGZvciAoZGlyZWN0b3J5X25hbWUsIGRpcmVjdG9y
eSkgaW4gdmFyaWFibGVfdG9fZGlyZWN0b3J5Lml0ZW1zKCk6CisgICAgICAgICAgICBpZiByZWxw
YXRoLnN0YXJ0c3dpdGgoZGlyZWN0b3J5X25hbWUgKyBzZXApIG9yIHJlbHBhdGggPT0gZGlyZWN0
b3J5X25hbWU6CisgICAgICAgICAgICAgICAgYmFzZV9kaXJlY3RvcnkgPSBkaXJlY3RvcnkKKyAg
ICAgICAgICAgICAgICByZWxwYXRoID0gcmVscGF0aFtsZW4oZGlyZWN0b3J5X25hbWUpOl0ubHN0
cmlwKHNlcCkKKyAgICAgICAgICAgICAgICBicmVhaworICAgICAgICBmb3IgZGlyZWN0b3J5X25h
bWUgaW4gcmVscGF0aC5zcGxpdChzZXApOgorICAgICAgICAgICAgYmFzZV9kaXJlY3RvcnkgPSBz
ZWxmLmVuc3VyZV9zdWJkaXJlY3RvcnkoYmFzZV9kaXJlY3RvcnksIGRpcmVjdG9yeV9uYW1lKQor
ICAgICAgICByZXR1cm4gYmFzZV9kaXJlY3RvcnkKKworICAgIGRlZiBjcmVhdGVfZmlsZShzZWxm
LCBjb250YWluaW5nX2RpcmVjdG9yeSwgZmlsZV9uYW1lKToKKyAgICAgICAgYXNzZXJ0IGNvbnRh
aW5pbmdfZGlyZWN0b3J5CisgICAgICAgIGFzc2VydCBpc2luc3RhbmNlKGNvbnRhaW5pbmdfZGly
ZWN0b3J5LCBDb21tb25EaXJlY3RvcnkpCisgICAgICAgIGFzc2VydCBDb21tb25GaWxlLmlzX3Zh
bGlkX2ZpbGVfbmFtZShmaWxlX25hbWUpCisgICAgICAgIGFzc2VydCBub3QgY29udGFpbmluZ19k
aXJlY3RvcnkuZ2V0X2VudHJ5KGZpbGVfbmFtZSkKKyAgICAgICAgZmlsZSA9IENvbW1vbkZpbGUo
Y29udGFpbmluZ19kaXJlY3RvcnksIGZpbGVfbmFtZSkKKyAgICAgICAgY29udGFpbmluZ19kaXJl
Y3RvcnkuYWRkX2ZpbGUoZmlsZSkKKyAgICAgICAgc2VsZi5hbGxfZmlsZXMuYWRkKGZpbGUpCisg
ICAgICAgIHJldHVybiBmaWxlCisKKyAgICBkZWYgZW5zdXJlX2ZpbGUoc2VsZiwgY29udGFpbmlu
Z19kaXJlY3RvcnksIGZpbGVfbmFtZSk6CisgICAgICAgIGFzc2VydCBjb250YWluaW5nX2RpcmVj
dG9yeQorICAgICAgICBhc3NlcnQgaXNpbnN0YW5jZShjb250YWluaW5nX2RpcmVjdG9yeSwgQ29t
bW9uRGlyZWN0b3J5KQorICAgICAgICBhc3NlcnQgQ29tbW9uRmlsZS5pc192YWxpZF9maWxlX25h
bWUoZmlsZV9uYW1lKQorICAgICAgICBhc3NlcnQgbm90IGNvbnRhaW5pbmdfZGlyZWN0b3J5Lmdl
dF9kaXJlY3RvcnkoZmlsZV9uYW1lKQorICAgICAgICByZXR1cm4gY29udGFpbmluZ19kaXJlY3Rv
cnkuZ2V0X2ZpbGUoZmlsZV9uYW1lKSBvciBzZWxmLmNyZWF0ZV9maWxlKGNvbnRhaW5pbmdfZGly
ZWN0b3J5LCBmaWxlX25hbWUpCisKKyAgICBkZWYgZW5zdXJlX2ZpbGVfcGF0aChzZWxmLCBiYXNl
X2RpcmVjdG9yeSwgcmVscGF0aCwgc2VwPU5vbmUsIHZhcmlhYmxlX3RvX2RpcmVjdG9yeT1Ob25l
KToKKyAgICAgICAgJycnCisgICAgICAgIEVuc3VyZXMgdGhhdCB0aGUgcGF0aCBnaXZlbiBieSBh
IGJhc2UgZGlyZWN0b3J5IGFuZCByZWxhdGl2ZSBwYXRoLCBpbmNsdWRpbmcgYSBmaWxlIG5hbWUs
IGV4aXN0cy4KKyAgICAgICAgQ3JlYXRlcyBDb21tb25EaXJlY3RvcnkgYW5kIENvbW1vbkZpbGUg
b2JqZWN0cyB3aGVyZSBuZWNlc3NhcnkuCisgICAgICAgIHZhcmlhYmxlX3RvX2RpcmVjdG9yeSwg
aWYgZ2l2ZW4sIG1hcHMgc3BlY2lmaWMgc3RyaW5ncyB0byBzcGVjaWZpYyBkaXJlY3RvcmllcyB3
aGVuIGVuY291bnRlcmVkLgorICAgICAgICAnJycKKyAgICAgICAgYXNzZXJ0IGJhc2VfZGlyZWN0
b3J5CisgICAgICAgIGFzc2VydCBpc2luc3RhbmNlKGJhc2VfZGlyZWN0b3J5LCBDb21tb25EaXJl
Y3RvcnkpCisgICAgICAgIGFzc2VydCByZWxwYXRoCisgICAgICAgIHNlcCA9IHNlcCBvciAnLycK
KyAgICAgICAgZGlyZWN0b3J5X25hbWVzLCBzZXBhcmF0b3IsIGZpbGVfbmFtZSA9IHJlbHBhdGgu
cnBhcnRpdGlvbihzZXApCisgICAgICAgIGlmIHNlcGFyYXRvcjoKKyAgICAgICAgICAgIGlmIGRp
cmVjdG9yeV9uYW1lczoKKyAgICAgICAgICAgICAgICBiYXNlX2RpcmVjdG9yeSA9IHNlbGYuZW5z
dXJlX3N1YmRpcmVjdG9yeV9wYXRoKGJhc2VfZGlyZWN0b3J5LCBkaXJlY3RvcnlfbmFtZXMpCisg
ICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIGJhc2VfZGlyZWN0b3J5ID0gc2VsZi5y
b290X2RpcmVjdG9yeQorICAgICAgICByZXR1cm4gc2VsZi5lbnN1cmVfZmlsZShiYXNlX2RpcmVj
dG9yeSwgZmlsZV9uYW1lKQorCisgICAgZGVmIGJhc2VfZGlyZWN0b3J5X2Zvcl9kaXJlY3Rvcnko
c2VsZiwgZGlyZWN0b3J5LCBkaXJlY3RvcnlfdG9fdmFyaWFibGU9Tm9uZSk6CisgICAgICAgIGFz
c2VydCBkaXJlY3RvcnkKKyAgICAgICAgYXNzZXJ0IGlzaW5zdGFuY2UoZGlyZWN0b3J5LCBDb21t
b25EaXJlY3RvcnkpCisgICAgICAgIGRpcmVjdG9yeV90b192YXJpYWJsZSA9IGRpcmVjdG9yeV90
b192YXJpYWJsZSBvciB7fQorICAgICAgICBpZiBkaXJlY3RvcnkgaW4gZGlyZWN0b3J5X3RvX3Zh
cmlhYmxlOgorICAgICAgICAgICAgcmV0dXJuIGRpcmVjdG9yeQorICAgICAgICBpZiBkaXJlY3Rv
cnkucGFyZW50X2RpcmVjdG9yeToKKyAgICAgICAgICAgIHJldHVybiBzZWxmLmJhc2VfZGlyZWN0
b3J5X2Zvcl9kaXJlY3RvcnkoZGlyZWN0b3J5LnBhcmVudF9kaXJlY3RvcnksIGRpcmVjdG9yeV90
b192YXJpYWJsZSkKKyAgICAgICAgcmV0dXJuIGRpcmVjdG9yeQorCisgICAgZGVmIGJhc2VfZGly
ZWN0b3J5X2Zvcl9maWxlKHNlbGYsIGZpbGUsIGRpcmVjdG9yeV90b192YXJpYWJsZT1Ob25lKToK
KyAgICAgICAgYXNzZXJ0IGZpbGUKKyAgICAgICAgYXNzZXJ0IGlzaW5zdGFuY2UoZmlsZSwgQ29t
bW9uRmlsZSkKKyAgICAgICAgcmV0dXJuIHNlbGYuYmFzZV9kaXJlY3RvcnlfZm9yX2RpcmVjdG9y
eShzZWxmLCBmaWxlLmRpcmVjdG9yeSwgZGlyZWN0b3J5X3RvX3ZhcmlhYmxlKQorCisgICAgZGVm
IF9kaXJlY3RvcnlfYWJzcGF0aF9wcmVmaXgoc2VsZiwgZGlyZWN0b3J5LCBzZXAsIGRpcmVjdG9y
eV90b192YXJpYWJsZSk6CisgICAgICAgIG1hcHBlZF9uYW1lID0gZGlyZWN0b3J5X3RvX3Zhcmlh
YmxlLmdldChkaXJlY3RvcnkpCisgICAgICAgIGlmIG1hcHBlZF9uYW1lIGlzIG5vdCBOb25lOgor
ICAgICAgICAgICAgcmV0dXJuIG1hcHBlZF9uYW1lCisgICAgICAgIGlmIGRpcmVjdG9yeSBpcyBz
ZWxmLnJvb3RfZGlyZWN0b3J5OgorICAgICAgICAgICAgcmV0dXJuICcnCisgICAgICAgIGlmIG5v
dCBkaXJlY3RvcnkucGFyZW50X2RpcmVjdG9yeToKKyAgICAgICAgICAgIGFzc2VydCBGYWxzZSwg
IkJhc2UgZGlyZWN0b3J5ICclcycgbm90IGZvdW5kIGluIHRoZSBkaXJlY3RvcnkgbWFwIHdoZW4g
Z2VuZXJhdGluZyBwYXRoISIgJSBkaXJlY3RvcnkubmFtZQorICAgICAgICAgICAgcmV0dXJuIGRp
cmVjdG9yeS5uYW1lCisgICAgICAgIHByZWZpeF9zdHJpbmcgPSBzZWxmLl9kaXJlY3RvcnlfYWJz
cGF0aF9wcmVmaXgoZGlyZWN0b3J5LnBhcmVudF9kaXJlY3RvcnksIHNlcCwgZGlyZWN0b3J5X3Rv
X3ZhcmlhYmxlKQorICAgICAgICByZXR1cm4gcHJlZml4X3N0cmluZyArIHNlcCArIGRpcmVjdG9y
eS5uYW1lCisKKyAgICBkZWYgZGlyZWN0b3J5X2Fic3BhdGgoc2VsZiwgZGlyZWN0b3J5LCBzZXA9
Tm9uZSwgZGlyZWN0b3J5X3RvX3ZhcmlhYmxlPU5vbmUpOgorICAgICAgICAnJycKKyAgICAgICAg
UmV0dXJucyB0aGUgYWJzb2x1dGUgcGF0aCBzdHJpbmcgZm9yIHRoZSBnaXZlbiBkaXJlY3Rvcnku
CisgICAgICAgIGRpcmVjdG9yeV90b192YXJpYWJsZSwgaWYgZ2l2ZW4sIG1hcHMgc3BlY2lmaWMg
ZGlyZWN0b3JpZXMgdG8gZGVzaXJlZCBvdXRwdXQgc3RyaW5ncy4KKyAgICAgICAgSWYgYSBkaXJl
Y3RvcnkgaXMgZm91bmQgaW4gZGlyZWN0b3J5X3RvX3ZhcmlhYmxlLCBpdHMgcGFyZW50IGRpcmVj
dG9yaWVzIGFyZSBOT1QgbG9va2VkIGF0IQorICAgICAgICA9PiBtYWtlIHN1cmUgZGlyZWN0b3J5
X3RvX3ZhcmlhYmxlIGNvbnRhaW5zIHRoZSBmdWxsIHBhdGggKHdpdGhvdXQgdHJhaWxpbmcgc2Vw
YXJhdG9yKSB3aGVyZSBkZXNpcmVkCisgICAgICAgICcnJworICAgICAgICBhc3NlcnQgZGlyZWN0
b3J5CisgICAgICAgIGFzc2VydCBpc2luc3RhbmNlKGRpcmVjdG9yeSwgQ29tbW9uRGlyZWN0b3J5
KQorICAgICAgICBzZXAgPSBzZXAgb3IgJy8nCisgICAgICAgIGRpcmVjdG9yeV90b192YXJpYWJs
ZSA9IGRpcmVjdG9yeV90b192YXJpYWJsZSBvciB7fQorICAgICAgICBpZiBkaXJlY3RvcnkgaXMg
c2VsZi5yb290X2RpcmVjdG9yeSBhbmQgZGlyZWN0b3J5IG5vdCBpbiBkaXJlY3RvcnlfdG9fdmFy
aWFibGU6CisgICAgICAgICAgICByZXR1cm4gc2VwCisgICAgICAgIHJldHVybiBzZWxmLl9kaXJl
Y3RvcnlfYWJzcGF0aF9wcmVmaXgoZGlyZWN0b3J5LCBzZXAsIGRpcmVjdG9yeV90b192YXJpYWJs
ZSkKKworICAgIGRlZiBkaXJlY3RvcnlfcmVscGF0aChzZWxmLCBiYXNlX2RpcmVjdG9yeSwgZGly
ZWN0b3J5LCBzZXA9Tm9uZSwgZGlyZWN0b3J5X3RvX3ZhcmlhYmxlPU5vbmUsIGFsd2F5c19wcmVm
aXg9RmFsc2UpOgorICAgICAgICAnJycKKyAgICAgICAgUmV0dXJucyB0aGUgcmVsYXRpdmUgcGF0
aCBzdHJpbmcgZnJvbSBiYXNlX2RpcmVjdG9yeSB0byBkaXJlY3RvcnkuCisgICAgICAgIElmIGRp
cmVjdG9yeSBpcyBub3QgaW4gdGhlIHNhbWUgZGlyZWN0b3J5IHRyZWUgYXMgYmFzZV9kaXJlY3Rv
cnksIGl0IHdpbGwgcmV0dXJuIGFuIGFic29sdXRlIHBhdGggaW5zdGVhZC4KKyAgICAgICAgJycn
CisgICAgICAgIGFzc2VydCBiYXNlX2RpcmVjdG9yeQorICAgICAgICBhc3NlcnQgaXNpbnN0YW5j
ZShiYXNlX2RpcmVjdG9yeSwgQ29tbW9uRGlyZWN0b3J5KQorICAgICAgICBhc3NlcnQgZGlyZWN0
b3J5CisgICAgICAgIGFzc2VydCBpc2luc3RhbmNlKGRpcmVjdG9yeSwgQ29tbW9uRGlyZWN0b3J5
KQorICAgICAgICBpZiBiYXNlX2RpcmVjdG9yeSA9PSBkaXJlY3Rvcnk6CisgICAgICAgICAgICBy
ZXR1cm4gJy4nCisgICAgICAgIHNlcCA9IHNlcCBvciAnLycKKyAgICAgICAgZGlyZWN0b3J5X2xp
c3QxID0gYmFzZV9kaXJlY3RvcnkuZGlyZWN0b3J5X2xpc3QoKQorICAgICAgICBkaXJlY3Rvcnlf
bGlzdDIgPSBkaXJlY3RvcnkuZGlyZWN0b3J5X2xpc3QoKQorICAgICAgICBhc3NlcnQgZGlyZWN0
b3J5X2xpc3QxCisgICAgICAgIGFzc2VydCBkaXJlY3RvcnlfbGlzdDIKKyAgICAgICAgaWYgZGly
ZWN0b3J5X2xpc3QxWzBdICE9IGRpcmVjdG9yeV9saXN0MlswXToKKyAgICAgICAgICAgIHJldHVy
biBzZWxmLmRpcmVjdG9yeV9hYnNwYXRoKGRpcmVjdG9yeSwgc2VwLCBkaXJlY3RvcnlfdG9fdmFy
aWFibGUpCisgICAgICAgIHdoaWxlIGRpcmVjdG9yeV9saXN0MSBhbmQgZGlyZWN0b3J5X2xpc3Qy
IGFuZCBkaXJlY3RvcnlfbGlzdDFbMF0gPT0gZGlyZWN0b3J5X2xpc3QyWzBdOgorICAgICAgICAg
ICAgZGlyZWN0b3J5X2xpc3QxLnBvcCgwKQorICAgICAgICAgICAgZGlyZWN0b3J5X2xpc3QyLnBv
cCgwKQorICAgICAgICBpZiBhbHdheXNfcHJlZml4OgorICAgICAgICAgICAgYXNzZXJ0IGJhc2Vf
ZGlyZWN0b3J5IGluIGRpcmVjdG9yeV90b192YXJpYWJsZQorICAgICAgICAgICAgcHJlZml4ID0g
ZGlyZWN0b3J5X3RvX3ZhcmlhYmxlW2Jhc2VfZGlyZWN0b3J5XSArIHNlcAorICAgICAgICBlbHNl
OgorICAgICAgICAgICAgcHJlZml4ID0gJycKKyAgICAgICAgcmV0dXJuIHByZWZpeCArIHNlcC5q
b2luKG1hcChsYW1iZGEgZDogJy4uJywgZGlyZWN0b3J5X2xpc3QxKSArIG1hcChsYW1iZGEgZDog
ZC5uYW1lLCBkaXJlY3RvcnlfbGlzdDIpKQorCisgICAgZGVmIGZpbGVfYWJzcGF0aChzZWxmLCBm
aWxlLCBzZXA9Tm9uZSwgZGlyZWN0b3J5X3RvX3ZhcmlhYmxlPU5vbmUpOgorICAgICAgICAnJycK
KyAgICAgICAgUmV0dXJucyB0aGUgYWJzb2x1dGUgcGF0aCBzdHJpbmcgZm9yIHRoZSBnaXZlbiBm
aWxlLgorICAgICAgICBkaXJlY3RvcnlfdG9fdmFyaWFibGUsIGlmIGdpdmVuLCBtYXBzIHNwZWNp
ZmljIGRpcmVjdG9yaWVzIHRvIGRlc2lyZWQgb3V0cHV0IHN0cmluZ3MuCisgICAgICAgIElmIGEg
ZGlyZWN0b3J5IGlzIGZvdW5kIGluIGRpcmVjdG9yeV90b192YXJpYWJsZSwgaXRzIHBhcmVudCBk
aXJlY3RvcmllcyBhcmUgTk9UIGxvb2tlZCBhdCEKKyAgICAgICAgPT4gbWFrZSBzdXJlIGRpcmVj
dG9yeV90b192YXJpYWJsZSBjb250YWlucyB0aGUgZnVsbCBwYXRoICh3aXRob3V0IHRyYWlsaW5n
IHNlcGFyYXRvcikgd2hlcmUgZGVzaXJlZAorICAgICAgICAnJycKKyAgICAgICAgYXNzZXJ0IGZp
bGUKKyAgICAgICAgYXNzZXJ0IGlzaW5zdGFuY2UoZmlsZSwgQ29tbW9uRmlsZSkKKyAgICAgICAg
c2VwID0gc2VwIG9yICcvJworICAgICAgICByZXR1cm4gc2VsZi5fZGlyZWN0b3J5X2Fic3BhdGhf
cHJlZml4KGZpbGUuZGlyZWN0b3J5LCBzZXAsIGRpcmVjdG9yeV90b192YXJpYWJsZSBvciB7fSkg
KyBzZXAgKyBmaWxlLm5hbWUKKworICAgIGRlZiBmaWxlX3JlbHBhdGgoc2VsZiwgYmFzZV9kaXJl
Y3RvcnksIGZpbGUsIHNlcD1Ob25lLCBkaXJlY3RvcnlfdG9fdmFyaWFibGU9Tm9uZSwgYWx3YXlz
X3ByZWZpeD1GYWxzZSk6CisgICAgICAgICcnJworICAgICAgICBSZXR1cm5zIHRoZSByZWxhdGl2
ZSBwYXRoIHN0cmluZyBmcm9tIGJhc2VfZGlyZWN0b3J5IHRvIGZpbGUuCisgICAgICAgIElmIGZp
bGUgaXMgbm90IGluIHRoZSBzYW1lIGRpcmVjdG9yeSB0cmVlIGFzIGJhc2VfZGlyZWN0b3J5LCBp
dCB3aWxsIHJldHVybiBhbiBhYnNvbHV0ZSBwYXRoIGluc3RlYWQuCisgICAgICAgICcnJworICAg
ICAgICBhc3NlcnQgYmFzZV9kaXJlY3RvcnkKKyAgICAgICAgYXNzZXJ0IGlzaW5zdGFuY2UoYmFz
ZV9kaXJlY3RvcnksIENvbW1vbkRpcmVjdG9yeSkKKyAgICAgICAgYXNzZXJ0IGZpbGUKKyAgICAg
ICAgYXNzZXJ0IGlzaW5zdGFuY2UoZmlsZSwgQ29tbW9uRmlsZSkKKyAgICAgICAgaWYgYmFzZV9k
aXJlY3RvcnkgPT0gZmlsZS5kaXJlY3RvcnkgYW5kIG5vdCBhbHdheXNfcHJlZml4OgorICAgICAg
ICAgICAgcmV0dXJuIGZpbGUubmFtZQorICAgICAgICBzZXAgPSBzZXAgb3IgJy8nCisgICAgICAg
IHJldHVybiBzZWxmLmRpcmVjdG9yeV9yZWxwYXRoKGJhc2VfZGlyZWN0b3J5LCBmaWxlLmRpcmVj
dG9yeSwgc2VwLCBkaXJlY3RvcnlfdG9fdmFyaWFibGUsIGFsd2F5c19wcmVmaXgpICsgc2VwICsg
ZmlsZS5uYW1lCisKKyAgICBkZWYgZW5zdXJlX0RFRklORShzZWxmLCBmbGFnX25hbWUpOgorICAg
ICAgICByZXR1cm4gc2VsZi5hbGxfREVGSU5Fcy5zZXRkZWZhdWx0KGZsYWdfbmFtZSwgQ29tbW9u
REVGSU5FKGZsYWdfbmFtZSkpCmRpZmYgLS1naXQgYS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L2Nv
bW1vbi9wcm9qZWN0L2NvbW1vbl91bml0dGVzdC5weSBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkv
Y29tbW9uL3Byb2plY3QvY29tbW9uX3VuaXR0ZXN0LnB5Cm5ldyBmaWxlIG1vZGUgMTAwNzU1Cmlu
ZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjdhZmVjYjA3NDA5
OGNmYzEzMjUxYTY4MThmODE3ZmNlZWI4NDhiOGQKLS0tIC9kZXYvbnVsbAorKysgYi9Ub29scy9T
Y3JpcHRzL3dlYmtpdHB5L2NvbW1vbi9wcm9qZWN0L2NvbW1vbl91bml0dGVzdC5weQpAQCAtMCww
ICsxLDE4MiBAQAorIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCisjIENvcHlyaWdodCAoQykgMjAxMiBH
b29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorIworIyBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMgbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zIGFyZQorIyBtZXQ6CisjCisjICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorIyAgICAqIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyMgY29weXJp
Z2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lcgorIyBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlCisjIGRpc3RyaWJ1dGlvbi4KKyMgICAgKiBOZWl0aGVyIHRoZSBuYW1l
IG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisjIGNvbnRyaWJ1dG9ycyBtYXkg
YmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisjIHRo
aXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisj
CisjIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFO
RCBDT05UUklCVVRPUlMKKyMgIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyMgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisjIEEgUEFSVElDVUxB
UiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hU
CisjIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLAorIyBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisjIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorIyBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkKKyMgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAorIyAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyMgT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKworCitpbXBv
cnQgdW5pdHRlc3QKKworZnJvbSB3ZWJraXRweS5jb21tb24ucHJvamVjdC5jb21tb24gaW1wb3J0
ICoKKworCitjbGFzcyBDb21tb25JbmZvVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgZGVm
IHNldFVwKHNlbGYpOgorICAgICAgICBzZWxmLmNvbW1vbiA9IENvbW1vbkluZm8oIldlYkNvcmUi
KQorCisgICAgZGVmIHZlcmlmeV9zdWJkaXJlY3Rvcnkoc2VsZiwgcGFyZW50X2RpcmVjdG9yeSwg
c3ViZGlyZWN0b3J5LCBuYW1lKToKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGlzaW5zdGFuY2Uo
c3ViZGlyZWN0b3J5LCBDb21tb25TdWJEaXJlY3RvcnkpKQorICAgICAgICBzZWxmLmFzc2VydFRy
dWUocGFyZW50X2RpcmVjdG9yeSBpbiBzZWxmLmNvbW1vbi5hbGxfZGlyZWN0b3JpZXMpCisgICAg
ICAgIHNlbGYuYXNzZXJ0VHJ1ZShzdWJkaXJlY3RvcnkgaW4gc2VsZi5jb21tb24uYWxsX2RpcmVj
dG9yaWVzKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoc3ViZGlyZWN0b3J5LnBhcmVudF9kaXJl
Y3RvcnkgaXMgcGFyZW50X2RpcmVjdG9yeSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKCcuJyBp
biBzdWJkaXJlY3RvcnkuZGlyZWN0b3JpZXMpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZSgnLi4n
IGluIHN1YmRpcmVjdG9yeS5kaXJlY3RvcmllcykKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHN1
YmRpcmVjdG9yeS5nZXRfZGlyZWN0b3J5KCcuJykgaXMgc3ViZGlyZWN0b3J5KQorICAgICAgICBz
ZWxmLmFzc2VydFRydWUoc3ViZGlyZWN0b3J5LmdldF9kaXJlY3RvcnkoJy4uJykgaXMgcGFyZW50
X2RpcmVjdG9yeSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHN1YmRpcmVjdG9yeS5nZXRfZW50
cnkoJy4nKSBpcyBzdWJkaXJlY3RvcnkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzdWJkaXJl
Y3RvcnkuZ2V0X2VudHJ5KCcuLicpIGlzIHBhcmVudF9kaXJlY3RvcnkpCisgICAgICAgIHNlbGYu
YXNzZXJ0VHJ1ZShuYW1lIGluIHBhcmVudF9kaXJlY3RvcnkuZGlyZWN0b3JpZXMpCisgICAgICAg
IHNlbGYuYXNzZXJ0VHJ1ZShwYXJlbnRfZGlyZWN0b3J5LmdldF9kaXJlY3RvcnkobmFtZSkgaXMg
c3ViZGlyZWN0b3J5KQorICAgICAgICBzZWxmLmFzc2VydFRydWUocGFyZW50X2RpcmVjdG9yeS5n
ZXRfZmlsZShuYW1lKSBpcyBOb25lKQorICAgICAgICBzZWxmLmFzc2VydFRydWUocGFyZW50X2Rp
cmVjdG9yeS5nZXRfZW50cnkobmFtZSkgaXMgc3ViZGlyZWN0b3J5KQorCisgICAgZGVmIHZlcmlm
eV9maWxlKHNlbGYsIGRpcmVjdG9yeSwgZmlsZSwgbmFtZSk6CisgICAgICAgIHNlbGYuYXNzZXJ0
VHJ1ZShpc2luc3RhbmNlKGZpbGUsIENvbW1vbkZpbGUpKQorICAgICAgICBzZWxmLmFzc2VydFRy
dWUoZmlsZS5kaXJlY3RvcnkgaXMgZGlyZWN0b3J5KQorICAgICAgICBzZWxmLmFzc2VydEVxdWFs
KGZpbGUubmFtZSwgbmFtZSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGZpbGUgaW4gc2VsZi5j
b21tb24uYWxsX2ZpbGVzKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoZGlyZWN0b3J5LmdldF9m
aWxlKG5hbWUpIGlzIGZpbGUpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShkaXJlY3RvcnkuZ2V0
X2RpcmVjdG9yeShuYW1lKSBpcyBOb25lKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoZGlyZWN0
b3J5LmdldF9lbnRyeShuYW1lKSBpcyBmaWxlKQorCisgICAgZGVmIHRlc3RfQ29tbW9uSW5mb19t
ZW1iZXJzKHNlbGYpOgorICAgICAgICBzZWxmLmFzc2VydFRydWUoaXNpbnN0YW5jZShzZWxmLmNv
bW1vbi5zY21fYWJzcGF0aCwgYmFzZXN0cmluZykpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShp
c2luc3RhbmNlKHNlbGYuY29tbW9uLnByb2plY3RfbmFtZSwgYmFzZXN0cmluZykpCisgICAgICAg
IHNlbGYuYXNzZXJ0VHJ1ZShpc2luc3RhbmNlKHNlbGYuY29tbW9uLm9wdGlvbnMsIENvbW1vbk9w
dGlvbnMpKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoaXNpbnN0YW5jZShzZWxmLmNvbW1vbi5y
b290X2RpcmVjdG9yeSwgQ29tbW9uUm9vdERpcmVjdG9yeSkpCisgICAgICAgIHNlbGYuYXNzZXJ0
VHJ1ZShpc2luc3RhbmNlKHNlbGYuY29tbW9uLnNjbV9kaXJlY3RvcnksIENvbW1vblNDTURpcmVj
dG9yeSkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzZWxmLmNvbW1vbi5yb290X2RpcmVjdG9y
eSBpcyBub3Qgc2VsZi5jb21tb24uc2NtX2RpcmVjdG9yeSkKKyAgICAgICAgc2VsZi5hc3NlcnRF
cXVhbChzZWxmLmNvbW1vbi5yb290X2RpcmVjdG9yeS5uYW1lLCAnLycpCisgICAgICAgIHNlbGYu
YXNzZXJ0RXF1YWwoc2VsZi5jb21tb24uc2NtX2RpcmVjdG9yeS5uYW1lLCAnJHtTQ019JykKKyAg
ICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4oc2VsZi5jb21tb24uYWxsX2RpcmVjdG9yaWVzKSwg
MikKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNlbGYuY29tbW9uLnJvb3RfZGlyZWN0b3J5IGlu
IHNlbGYuY29tbW9uLmFsbF9kaXJlY3RvcmllcykKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHNl
bGYuY29tbW9uLnNjbV9kaXJlY3RvcnkgaW4gc2VsZi5jb21tb24uYWxsX2RpcmVjdG9yaWVzKQor
ICAgICAgICBzZWxmLmFzc2VydFRydWUoJy4nIGluIHNlbGYuY29tbW9uLnJvb3RfZGlyZWN0b3J5
LmRpcmVjdG9yaWVzKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoJy4uJyBub3QgaW4gc2VsZi5j
b21tb24ucm9vdF9kaXJlY3RvcnkuZGlyZWN0b3JpZXMpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1
ZShzZWxmLmNvbW1vbi5yb290X2RpcmVjdG9yeS5nZXRfZGlyZWN0b3J5KCcuJykgaXMgc2VsZi5j
b21tb24ucm9vdF9kaXJlY3RvcnkpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzZWxmLmNvbW1v
bi5yb290X2RpcmVjdG9yeS5nZXRfZGlyZWN0b3J5KCcuLicpIGlzIE5vbmUpCisgICAgICAgIHNl
bGYuYXNzZXJ0VHJ1ZSgnLicgaW4gc2VsZi5jb21tb24uc2NtX2RpcmVjdG9yeS5kaXJlY3Rvcmll
cykKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKCcuLicgbm90IGluIHNlbGYuY29tbW9uLnNjbV9k
aXJlY3RvcnkuZGlyZWN0b3JpZXMpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzZWxmLmNvbW1v
bi5zY21fZGlyZWN0b3J5LmdldF9kaXJlY3RvcnkoJy4nKSBpcyBzZWxmLmNvbW1vbi5zY21fZGly
ZWN0b3J5KQorICAgICAgICBzZWxmLmFzc2VydFRydWUoc2VsZi5jb21tb24uc2NtX2RpcmVjdG9y
eS5nZXRfZGlyZWN0b3J5KCcuLicpIGlzIE5vbmUpCisKKyAgICBkZWYgdGVzdF9jcmVhdGVfYmFz
ZV9kaXJlY3Rvcnkoc2VsZik6CisgICAgICAgIGJhc2VfZGlyZWN0b3J5ID0gc2VsZi5jb21tb24u
Y3JlYXRlX2Jhc2VfZGlyZWN0b3J5KCcke1RFU1R9JykKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVl
KGlzaW5zdGFuY2UoYmFzZV9kaXJlY3RvcnksIENvbW1vbkJhc2VEaXJlY3RvcnkpKQorICAgICAg
ICBzZWxmLmFzc2VydFRydWUoYmFzZV9kaXJlY3RvcnkgaW4gc2VsZi5jb21tb24uYWxsX2RpcmVj
dG9yaWVzKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoYmFzZV9kaXJlY3RvcnkucGFyZW50X2Rp
cmVjdG9yeSBpcyBOb25lKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoJy4nIGluIGJhc2VfZGly
ZWN0b3J5LmRpcmVjdG9yaWVzKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoJy4uJyBub3QgaW4g
YmFzZV9kaXJlY3RvcnkuZGlyZWN0b3JpZXMpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShiYXNl
X2RpcmVjdG9yeS5nZXRfZGlyZWN0b3J5KCcuJykgaXMgYmFzZV9kaXJlY3RvcnkpCisgICAgICAg
IHNlbGYuYXNzZXJ0VHJ1ZShzZWxmLmNvbW1vbi5zY21fZGlyZWN0b3J5LmdldF9kaXJlY3Rvcnko
Jy4uJykgaXMgTm9uZSkKKworICAgIGRlZiB0ZXN0X2NyZWF0ZV9zdWJkaXJlY3Rvcnkoc2VsZik6
CisgICAgICAgIHN1YmRpcmVjdG9yeSA9IHNlbGYuY29tbW9uLmNyZWF0ZV9zdWJkaXJlY3Rvcnko
c2VsZi5jb21tb24uc2NtX2RpcmVjdG9yeSwgJ3Rlc3QnKQorICAgICAgICBzZWxmLnZlcmlmeV9z
dWJkaXJlY3Rvcnkoc2VsZi5jb21tb24uc2NtX2RpcmVjdG9yeSwgc3ViZGlyZWN0b3J5LCAndGVz
dCcpCisKKyAgICBkZWYgdGVzdF9jcmVhdGVfY3Jvc3NvdmVyX3N1YmRpcmVjdG9yeShzZWxmKToK
KyAgICAgICAgbmFtZSA9ICcke1RFU1R9JworICAgICAgICBiYXNlX2RpcmVjdG9yeSA9IHNlbGYu
Y29tbW9uLmNyZWF0ZV9iYXNlX2RpcmVjdG9yeShuYW1lKQorICAgICAgICBjcm9zc292ZXJfZGly
ZWN0b3J5ID0gc2VsZi5jb21tb24uY3JlYXRlX2Nyb3Nzb3Zlcl9zdWJkaXJlY3Rvcnkoc2VsZi5j
b21tb24uc2NtX2RpcmVjdG9yeSwgJ3Rlc3QnLCB7bmFtZTogYmFzZV9kaXJlY3Rvcnl9KQorICAg
ICAgICBzZWxmLmFzc2VydFRydWUoaXNpbnN0YW5jZShjcm9zc292ZXJfZGlyZWN0b3J5LCBDb21t
b25Dcm9zc292ZXJTdWJEaXJlY3RvcnkpKQorICAgICAgICBzZWxmLnZlcmlmeV9zdWJkaXJlY3Rv
cnkoc2VsZi5jb21tb24uc2NtX2RpcmVjdG9yeSwgY3Jvc3NvdmVyX2RpcmVjdG9yeSwgJ3Rlc3Qn
KQorICAgICAgICBzZWxmLmFzc2VydFRydWUoYmFzZV9kaXJlY3RvcnkucGFyZW50X2RpcmVjdG9y
eSBpcyBOb25lKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoJy4nIGluIGJhc2VfZGlyZWN0b3J5
LmRpcmVjdG9yaWVzKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoJy4uJyBub3QgaW4gYmFzZV9k
aXJlY3RvcnkuZGlyZWN0b3JpZXMpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShiYXNlX2RpcmVj
dG9yeS5nZXRfZGlyZWN0b3J5KCcuJykgaXMgYmFzZV9kaXJlY3RvcnkpCisgICAgICAgIHNlbGYu
YXNzZXJ0VHJ1ZShuYW1lIGluIGNyb3Nzb3Zlcl9kaXJlY3RvcnkuZGlyZWN0b3JpZXMpCisgICAg
ICAgIHNlbGYuYXNzZXJ0VHJ1ZShjcm9zc292ZXJfZGlyZWN0b3J5LmdldF9kaXJlY3RvcnkobmFt
ZSkgaXMgYmFzZV9kaXJlY3RvcnkpCisKKyAgICBkZWYgdGVzdF9jcmVhdGVfZmlsZShzZWxmKToK
KyAgICAgICAgZGlyZWN0b3J5ID0gc2VsZi5jb21tb24uc2NtX2RpcmVjdG9yeQorICAgICAgICBu
YW1lID0gJ3Rlc3QuY3BwJworICAgICAgICBmaWxlID0gc2VsZi5jb21tb24uY3JlYXRlX2ZpbGUo
ZGlyZWN0b3J5LCBuYW1lKQorICAgICAgICBzZWxmLnZlcmlmeV9maWxlKGRpcmVjdG9yeSwgZmls
ZSwgbmFtZSkKKworICAgIGRlZiB0ZXN0X2NyZWF0ZV9maWxlKHNlbGYpOgorICAgICAgICBkaXJl
Y3RvcnkgPSBzZWxmLmNvbW1vbi5zY21fZGlyZWN0b3J5CisgICAgICAgIG5hbWUgPSAndGVzdC5j
cHAnCisgICAgICAgIGZpbGUgPSBzZWxmLmNvbW1vbi5jcmVhdGVfZmlsZShkaXJlY3RvcnksIG5h
bWUpCisgICAgICAgIHNlbGYudmVyaWZ5X2ZpbGUoZGlyZWN0b3J5LCBmaWxlLCBuYW1lKQorCisg
ICAgZGVmIHRlc3RfZW5zdXJlX3N1YmRpcmVjdG9yeShzZWxmKToKKyAgICAgICAgbmFtZTEgPSAn
dGVzdDEnCisgICAgICAgIG5hbWUyID0gJ3Rlc3QyJworICAgICAgICBkaXJlY3RvcnkgPSBzZWxm
LmNvbW1vbi5zY21fZGlyZWN0b3J5CisgICAgICAgIHN1YmRpcmVjdG9yeTFhID0gc2VsZi5jb21t
b24uY3JlYXRlX3N1YmRpcmVjdG9yeShkaXJlY3RvcnksIG5hbWUxKQorICAgICAgICBzdWJkaXJl
Y3RvcnkxYiA9IHNlbGYuY29tbW9uLmVuc3VyZV9zdWJkaXJlY3RvcnkoZGlyZWN0b3J5LCBuYW1l
MSkKKyAgICAgICAgc3ViZGlyZWN0b3J5MiA9IHNlbGYuY29tbW9uLmVuc3VyZV9zdWJkaXJlY3Rv
cnkoZGlyZWN0b3J5LCBuYW1lMikKKyAgICAgICAgc2VsZi52ZXJpZnlfc3ViZGlyZWN0b3J5KGRp
cmVjdG9yeSwgc3ViZGlyZWN0b3J5MWEsIG5hbWUxKQorICAgICAgICBzZWxmLnZlcmlmeV9zdWJk
aXJlY3RvcnkoZGlyZWN0b3J5LCBzdWJkaXJlY3RvcnkxYiwgbmFtZTEpCisgICAgICAgIHNlbGYu
dmVyaWZ5X3N1YmRpcmVjdG9yeShkaXJlY3RvcnksIHN1YmRpcmVjdG9yeTIsIG5hbWUyKQorICAg
ICAgICBzZWxmLmFzc2VydFRydWUoc3ViZGlyZWN0b3J5MWEgaXMgc3ViZGlyZWN0b3J5MWIpCisg
ICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzdWJkaXJlY3RvcnkxYSBpcyBub3Qgc3ViZGlyZWN0b3J5
MikKKworICAgIGRlZiB0ZXN0X2Vuc3VyZV9zdWJkaXJlY3RvcnlfcGF0aChzZWxmKToKKyAgICAg
ICAgbmFtZTEgPSAndGVzdDEnCisgICAgICAgIG5hbWUyID0gJ3Rlc3QyJworICAgICAgICBzdWJz
dWJuYW1lID0gJ3Rlc3QnCisgICAgICAgIHBhdGgxID0gbmFtZTEgKyAnLycgKyBzdWJzdWJuYW1l
CisgICAgICAgIHBhdGgyID0gbmFtZTIgKyAnLycgKyBzdWJzdWJuYW1lCisgICAgICAgIGRpcmVj
dG9yeSA9IHNlbGYuY29tbW9uLnNjbV9kaXJlY3RvcnkKKyAgICAgICAgc3ViZGlyZWN0b3J5MSA9
IHNlbGYuY29tbW9uLmNyZWF0ZV9zdWJkaXJlY3RvcnkoZGlyZWN0b3J5LCBuYW1lMSkKKyAgICAg
ICAgc3Vic3ViZGlyZWN0b3J5MSA9IHNlbGYuY29tbW9uLmVuc3VyZV9zdWJkaXJlY3RvcnlfcGF0
aChkaXJlY3RvcnksIHBhdGgxKQorICAgICAgICBzdWJzdWJkaXJlY3RvcnkyID0gc2VsZi5jb21t
b24uZW5zdXJlX3N1YmRpcmVjdG9yeV9wYXRoKGRpcmVjdG9yeSwgcGF0aDIpCisgICAgICAgIHN1
YmRpcmVjdG9yeTIgPSBkaXJlY3RvcnkuZ2V0X2VudHJ5KG5hbWUyKQorICAgICAgICBzZWxmLmFz
c2VydFRydWUoaXNpbnN0YW5jZShzdWJkaXJlY3RvcnkyLCBDb21tb25EaXJlY3RvcnkpKQorICAg
ICAgICBzZWxmLnZlcmlmeV9zdWJkaXJlY3RvcnkoZGlyZWN0b3J5LCBzdWJkaXJlY3RvcnkxLCBu
YW1lMSkKKyAgICAgICAgc2VsZi52ZXJpZnlfc3ViZGlyZWN0b3J5KGRpcmVjdG9yeSwgc3ViZGly
ZWN0b3J5MiwgbmFtZTIpCisgICAgICAgIHNlbGYudmVyaWZ5X3N1YmRpcmVjdG9yeShzdWJkaXJl
Y3RvcnkxLCBzdWJzdWJkaXJlY3RvcnkxLCBzdWJzdWJuYW1lKQorICAgICAgICBzZWxmLnZlcmlm
eV9zdWJkaXJlY3Rvcnkoc3ViZGlyZWN0b3J5Miwgc3Vic3ViZGlyZWN0b3J5Miwgc3Vic3VibmFt
ZSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKHN1YmRpcmVjdG9yeTEgaXMgbm90IHN1YmRpcmVj
dG9yeTIpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShzdWJzdWJkaXJlY3RvcnkxIGlzIG5vdCBz
dWJzdWJkaXJlY3RvcnkyKQorCisgICAgZGVmIHRlc3RfZW5zdXJlX2ZpbGVfcGF0aChzZWxmKToK
KyAgICAgICAgZGlyZWN0b3J5X25hbWUgPSAndGVzdCcKKyAgICAgICAgZmlsZV9uYW1lID0gJ3Rl
c3QuY3BwJworICAgICAgICBwYXRoMSA9IGZpbGVfbmFtZQorICAgICAgICBwYXRoMiA9IGRpcmVj
dG9yeV9uYW1lICsgJy8nICsgZmlsZV9uYW1lCisgICAgICAgIHBhdGgzID0gZGlyZWN0b3J5X25h
bWUgKyAnLycgKyBkaXJlY3RvcnlfbmFtZSArICcvJyArIGZpbGVfbmFtZQorICAgICAgICBkaXJl
Y3RvcnkxID0gc2VsZi5jb21tb24uc2NtX2RpcmVjdG9yeQorICAgICAgICBkaXJlY3RvcnkyID0g
c2VsZi5jb21tb24uY3JlYXRlX3N1YmRpcmVjdG9yeShkaXJlY3RvcnkxLCBkaXJlY3RvcnlfbmFt
ZSkKKyAgICAgICAgZmlsZTEgPSBzZWxmLmNvbW1vbi5lbnN1cmVfZmlsZV9wYXRoKGRpcmVjdG9y
eTEsIHBhdGgxKQorICAgICAgICBmaWxlMyA9IHNlbGYuY29tbW9uLmVuc3VyZV9maWxlX3BhdGgo
ZGlyZWN0b3J5MSwgcGF0aDMpCisgICAgICAgIGZpbGUyID0gc2VsZi5jb21tb24uZW5zdXJlX2Zp
bGVfcGF0aChkaXJlY3RvcnkxLCBwYXRoMikKKyAgICAgICAgZGlyZWN0b3J5MyA9IGRpcmVjdG9y
eTIuZ2V0X2VudHJ5KGRpcmVjdG9yeV9uYW1lKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoaXNp
bnN0YW5jZShkaXJlY3RvcnkzLCBDb21tb25EaXJlY3RvcnkpKQorICAgICAgICBzZWxmLnZlcmlm
eV9zdWJkaXJlY3RvcnkoZGlyZWN0b3J5MSwgZGlyZWN0b3J5MiwgZGlyZWN0b3J5X25hbWUpCisg
ICAgICAgIHNlbGYudmVyaWZ5X3N1YmRpcmVjdG9yeShkaXJlY3RvcnkyLCBkaXJlY3RvcnkzLCBk
aXJlY3RvcnlfbmFtZSkKKyAgICAgICAgc2VsZi52ZXJpZnlfZmlsZShkaXJlY3RvcnkxLCBmaWxl
MSwgZmlsZV9uYW1lKQorICAgICAgICBzZWxmLnZlcmlmeV9maWxlKGRpcmVjdG9yeTIsIGZpbGUy
LCBmaWxlX25hbWUpCisgICAgICAgIHNlbGYudmVyaWZ5X2ZpbGUoZGlyZWN0b3J5MywgZmlsZTMs
IGZpbGVfbmFtZSkKKyAgICAgICAgc2VsZi5hc3NlcnRUcnVlKGRpcmVjdG9yeTEgaXMgbm90IGRp
cmVjdG9yeTIpCisgICAgICAgIHNlbGYuYXNzZXJ0VHJ1ZShkaXJlY3RvcnkyIGlzIG5vdCBkaXJl
Y3RvcnkzKQorICAgICAgICBzZWxmLmFzc2VydFRydWUoZmlsZTEgaXMgbm90IGZpbGUyKQorICAg
ICAgICBzZWxmLmFzc2VydFRydWUoZmlsZTIgaXMgbm90IGZpbGUzKQorCisKK2lmIF9fbmFtZV9f
ID09ICdfX21haW5fXyc6CisgICAgdW5pdHRlc3QubWFpbigpCmRpZmYgLS1naXQgYS9Ub29scy9T
Y3JpcHRzL3dlYmtpdHB5L2NvbW1vbi9wcm9qZWN0L29wdGlvbnMucHkgYi9Ub29scy9TY3JpcHRz
L3dlYmtpdHB5L2NvbW1vbi9wcm9qZWN0L29wdGlvbnMucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNTQxMTUyNTNi
ZGEyMmEyYTc5ZTQ1MDIxNzU0OWEzZWE4OGRiNjZlZQotLS0gL2Rldi9udWxsCisrKyBiL1Rvb2xz
L1NjcmlwdHMvd2Via2l0cHkvY29tbW9uL3Byb2plY3Qvb3B0aW9ucy5weQpAQCAtMCwwICsxLDE5
MSBAQAorIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCisjIENvcHlyaWdodCAoQykgMjAxMiBHb29nbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorIworIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMgbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFy
ZQorIyBtZXQ6CisjCisjICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorIyAgICAqIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyMgY29weXJpZ2h0IG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
cgorIyBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlCisjIGRpc3RyaWJ1dGlvbi4KKyMgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdv
b2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisjIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNl
ZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisjIHRoaXMgc29m
dHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisjCisjIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05U
UklCVVRPUlMKKyMgIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QKKyMgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisjIEEgUEFSVElDVUxBUiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisjIE9X
TkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLAorIyBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UCisjIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorIyBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyMg
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAorIyAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyMgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKworCitjbGFzcyBDb21t
b25PcHRpb25zKG9iamVjdCk6CisgICAgIiIiCisgICAgT3B0aW9ucyBmb3IgcHJvamVjdCBmaWxl
IG1hbmlwdWxhdGlvbi4KKyAgICAiIiIKKyAgICAjIExldCBkZWZhdWx0IGRlY2lkZSBvbiBvcHRp
b24KKyAgICBVU0VfREVGQVVMVCA9IE5vbmUKKyAgICAjIERpc2FibGUgdGhlIG9wdGlvbi9mZWF0
dXJlCisgICAgRElTQUJMRSA9IEZhbHNlCisgICAgIyBFbmFibGUgdGhlIG9wdGlvbi9mZWF0dXJl
CisgICAgRU5BQkxFID0gVHJ1ZQorCisgICAgIyBPdXRwdXRzIG5vIG1lc3NhZ2VzIGF0IGFsbCwg
ZXhjZXB0IGVycm9ycworICAgIFZFUkJPU0lUWV9TSUxFTlQgPSAwCisgICAgIyBPdXRwdXRzIHdh
cm5pbmdzIG9ubHkKKyAgICBWRVJCT1NJVFlfTk9STUFMID0gMQorICAgICMgT3V0cHV0cyBicmll
ZiBtZXNzYWdlczogcmVhZCBwcm9qZWN0LCBtYW5pcHVsYXRpb24sIHdyaXRlIHByb2plY3QKKyAg
ICBWRVJCT1NJVFlfVkVSQk9TRSA9IDIKKyAgICAjIE91dHB1dHMgZGV0YWlsZWQgaW5mb3JtYXRp
b24gZm9yIGV2ZXJ5IG9wZXJhdGlvbiwgbWFpbmx5IGZvciBkZWJ1Z2dpbmcgcHVycG9zZXMKKyAg
ICBWRVJCT1NJVFlfREVCVUcgPSAzCisgICAgIyBEZWZhdWx0IHZlcmJvc2l0eQorICAgICNWRVJC
T1NJVFlfREVGQVVMVCA9IFZFUkJPU0lUWV9OT1JNQUwKKyAgICBWRVJCT1NJVFlfREVGQVVMVCA9
IFZFUkJPU0lUWV9ERUJVRworCisgICAgIyBIZWFkZXJzIGhhdmUgcHVibGljIHJvbGUKKyAgICBI
RUFERVJTX1JPTEVfUFVCTElDID0gMAorICAgICMgSGVhZGVycyBoYXZlIHByaXZhdGUgcm9sZQor
ICAgIEhFQURFUlNfUk9MRV9QUklWQVRFID0gMQorICAgICMgRGVmYXVsdCBoZWFkZXJzIHJvbGUK
KyAgICBIRUFERVJTX1JPTEVfREVGQVVMVCA9IEhFQURFUlNfUk9MRV9QVUJMSUMKKworICAgICMg
dXNlIHRoZSBkZWZhdWx0IGZvciB0aGUgb3B0aW9uL2ZlYXR1cmUKKyAgICBQTEFURk9STV9ERUZB
VUxUID0gRU5BQkxFCisKKyAgICAjIFhjb2RlIChNYWMpIHBsYXRmb3JtCisgICAgUExBVEZPUk1f
WENPREUgPSAneCcKKyAgICAjIFZpc3VhbCBTdHVkaW8gcGxhdGZvcm0KKyAgICBQTEFURk9STV9W
UyA9ICd2JworICAgICMgQ2hyb21pdW0gcGxhdGZvcm0KKyAgICBQTEFURk9STV9DSFJPTUlVTSA9
ICdjJworICAgICMgUXQgcGxhdGZvcm0KKyAgICBQTEFURk9STV9RVCA9ICdxJworICAgICMgQ01h
a2UtYmFzZWQgcGxhdGZvcm0KKyAgICBQTEFURk9STV9DTUFLRSA9ICdtJworCisgICAgIyBEZWZh
dWx0IGZpbGUgdHlwZSBnZW5lcmF0aW9uCisgICAgRklMRV9UWVBFX0RFRkFVTFQgPSBFTkFCTEUK
KworICAgICMgSGVhZGVyIGZpbGVzCisgICAgRklMRV9UWVBFX0ggPSAnaCcKKyAgICAjIENQUCBm
aWxlcworICAgIEZJTEVfVFlQRV9DUFAgPSAnY3BwJworICAgICMgT2JqZWN0aXZlLUMgZmlsZXMK
KyAgICBGSUxFX1RZUEVfTU0gPSAnbW0nCisgICAgIyBJREwgZmlsZXMKKyAgICBGSUxFX1RZUEVf
SURMID0gJ2lkbCcKKyAgICAjIFNlY29uZGFyeSBmaWxlcworICAgIEZJTEVfVFlQRV9TRUNPTkRB
UlkgPSAnMicKKworICAgICMgRGVmYXVsdCBmaWxlIHR5cGUgZ2VuZXJhdGlvbgorICAgIEFVVE9f
QUREX0dST1VQU19ERUZBVUxUID0gRU5BQkxFCisKKyAgICBkZWYgX19pbml0X18oc2VsZik6Cisg
ICAgICAgIHNlbGYuX2hlbHAgPSBGYWxzZQorICAgICAgICBzZWxmLl92ZXJib3NpdHkgPSBDb21t
b25PcHRpb25zLlVTRV9ERUZBVUxUCisgICAgICAgIHNlbGYuX2hlYWRlcl9yb2xlID0gQ29tbW9u
T3B0aW9ucy5VU0VfREVGQVVMVAorICAgICAgICBzZWxmLl9wbGF0Zm9ybV9kZWZhdWx0ID0gQ29t
bW9uT3B0aW9ucy5VU0VfREVGQVVMVAorICAgICAgICBzZWxmLl9wbGF0Zm9ybXMgPSB7CisgICAg
ICAgICAgICBDb21tb25PcHRpb25zLlBMQVRGT1JNX1hDT0RFOiAgICAgIENvbW1vbk9wdGlvbnMu
VVNFX0RFRkFVTFQsCisgICAgICAgICAgICBDb21tb25PcHRpb25zLlBMQVRGT1JNX1ZTOiAgICAg
ICAgIENvbW1vbk9wdGlvbnMuVVNFX0RFRkFVTFQsCisgICAgICAgICAgICBDb21tb25PcHRpb25z
LlBMQVRGT1JNX0NIUk9NSVVNOiAgIENvbW1vbk9wdGlvbnMuVVNFX0RFRkFVTFQsCisgICAgICAg
ICAgICBDb21tb25PcHRpb25zLlBMQVRGT1JNX1FUOiAgICAgICAgIENvbW1vbk9wdGlvbnMuVVNF
X0RFRkFVTFQsCisgICAgICAgICAgICBDb21tb25PcHRpb25zLlBMQVRGT1JNX0NNQUtFOiAgICAg
IENvbW1vbk9wdGlvbnMuVVNFX0RFRkFVTFQsCisgICAgICAgIH0KKyAgICAgICAgc2VsZi5fZmls
ZV90eXBlX2RlZmF1bHQgPSBDb21tb25PcHRpb25zLlVTRV9ERUZBVUxUCisgICAgICAgIHNlbGYu
X2ZpbGVfdHlwZXMgPSB7CisgICAgICAgICAgICBDb21tb25PcHRpb25zLkZJTEVfVFlQRV9IOiAg
ICAgICAgICBDb21tb25PcHRpb25zLlVTRV9ERUZBVUxULAorICAgICAgICAgICAgQ29tbW9uT3B0
aW9ucy5GSUxFX1RZUEVfQ1BQOiAgICAgICAgQ29tbW9uT3B0aW9ucy5VU0VfREVGQVVMVCwKKyAg
ICAgICAgICAgIENvbW1vbk9wdGlvbnMuRklMRV9UWVBFX01NOiAgICAgICAgIENvbW1vbk9wdGlv
bnMuVVNFX0RFRkFVTFQsCisgICAgICAgICAgICBDb21tb25PcHRpb25zLkZJTEVfVFlQRV9JREw6
ICAgICAgICBDb21tb25PcHRpb25zLlVTRV9ERUZBVUxULAorICAgICAgICAgICAgQ29tbW9uT3B0
aW9ucy5GSUxFX1RZUEVfU0VDT05EQVJZOiAgQ29tbW9uT3B0aW9ucy5VU0VfREVGQVVMVCwKKyAg
ICAgICAgfQorICAgICAgICBzZWxmLl9hdXRvX2FkZF9ncm91cHMgPSBDb21tb25PcHRpb25zLlVT
RV9ERUZBVUxUCisKKyAgICBkZWYgaGVscChzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYuX2hl
bHAKKworICAgIGRlZiB2ZXJib3NpdHkoc2VsZik6CisgICAgICAgIGlmIHNlbGYuX3ZlcmJvc2l0
eSA9PSBDb21tb25PcHRpb25zLlVTRV9ERUZBVUxUOgorICAgICAgICAgICAgcmV0dXJuIENvbW1v
bk9wdGlvbnMuVkVSQk9TSVRZX0RFRkFVTFQKKyAgICAgICAgcmV0dXJuIHNlbGYuX3ZlcmJvc2l0
eQorCisgICAgZGVmIHNldF92ZXJib3NpdHkoc2VsZiwgdmVyYm9zaXR5KToKKyAgICAgICAgc2Vs
Zi5fdmVyYm9zaXR5ID0gdmVyYm9zaXR5CisKKyAgICBkZWYgaGVhZGVyc19yb2xlKHNlbGYpOgor
ICAgICAgICBpZiBzZWxmLl9oZWFkZXJzX3JvbGUgPT0gQ29tbW9uT3B0aW9ucy5VU0VfREVGQVVM
VDoKKyAgICAgICAgICAgIHJldHVybiBDb21tb25PcHRpb25zLkhFQURFUlNfUk9MRV9ERUZBVUxU
CisgICAgICAgIHJldHVybiBzZWxmLl9oZWFkZXJzX3JvbGUKKworICAgIGRlZiBzZXRfaGVhZGVy
c19yb2xlKHNlbGYsIHJvbGUpOgorICAgICAgICBzZWxmLl9oZWFkZXJzX3JvbGUgPSByb2xlCisK
KyAgICBkZWYgc2V0X3BsYXRmb3JtX2RlZmF1bHQoc2VsZiwgZGVmYXVsdCk6CisgICAgICAgIHNl
bGYuX3BsYXRmb3JtX2RlZmF1bHQgPSBkZWZhdWx0CisKKyAgICBkZWYgc2V0X3BsYXRmb3JtKHNl
bGYsIHBsYXRmb3JtLCB2YWx1ZSk6CisgICAgICAgIGFzc2VydCBwbGF0Zm9ybSBpbiBzZWxmLl9w
bGF0Zm9ybXMKKyAgICAgICAgc2VsZi5fcGxhdGZvcm1zW3BsYXRmb3JtXSA9IHZhbHVlCisKKyAg
ICBkZWYgaXNfcGxhdGZvcm1fZW5hYmxlZChzZWxmLCBwbGF0Zm9ybSk6CisgICAgICAgIGFzc2Vy
dCBwbGF0Zm9ybSBpbiBzZWxmLl9wbGF0Zm9ybXMKKyAgICAgICAgaWYgc2VsZi5fcGxhdGZvcm1z
W3BsYXRmb3JtXSA9PSBDb21tb25PcHRpb25zLkVOQUJMRToKKyAgICAgICAgICAgIHJldHVybiBU
cnVlCisgICAgICAgIGlmIHNlbGYuX3BsYXRmb3Jtc1twbGF0Zm9ybV0gPT0gQ29tbW9uT3B0aW9u
cy5ESVNBQkxFOgorICAgICAgICAgICAgcmV0dXJuIEZhbHNlCisgICAgICAgIGFzc2VydCBzZWxm
Ll9wbGF0Zm9ybXNbcGxhdGZvcm1dID09IENvbW1vbk9wdGlvbnMuVVNFX0RFRkFVTFQKKyAgICAg
ICAgaWYgc2VsZi5fcGxhdGZvcm1fZGVmYXVsdCA9PSBDb21tb25PcHRpb25zLlVTRV9ERUZBVUxU
OgorICAgICAgICAgICAgcmV0dXJuIENvbW1vbk9wdGlvbnMuUExBVEZPUk1fREVGQVVMVAorICAg
ICAgICByZXR1cm4gc2VsZi5fcGxhdGZvcm1fZGVmYXVsdAorCisgICAgZGVmIHNldF9maWxlX3R5
cGUoc2VsZiwgZmlsZV90eXBlLCB2YWx1ZSk6CisgICAgICAgIGFzc2VydCBmaWxlX3R5cGUgaW4g
c2VsZi5fZmlsZV90eXBlcworICAgICAgICBzZWxmLl9maWxlX3R5cGVzW2ZpbGVfdHlwZV0gPSB2
YWx1ZQorCisgICAgZGVmIGlzX2ZpbGVfdHlwZV9lbmFibGVkKHNlbGYsIGZpbGVfdHlwZSk6Cisg
ICAgICAgIGlmIHNlbGYuX2ZpbGVfdHlwZXNbZmlsZV90eXBlXSA9PSBDb21tb25PcHRpb25zLkVO
QUJMRToKKyAgICAgICAgICAgIHJldHVybiBUcnVlCisgICAgICAgIGlmIHNlbGYuX2ZpbGVfdHlw
ZXNbZmlsZV90eXBlXSA9PSBDb21tb25PcHRpb25zLkRJU0FCTEU6CisgICAgICAgICAgICByZXR1
cm4gRmFsc2UKKyAgICAgICAgYXNzZXJ0IHNlbGYuX2ZpbGVfdHlwZXNbZmlsZV90eXBlXSA9PSBD
b21tb25PcHRpb25zLlVTRV9ERUZBVUxUCisgICAgICAgIGlmIHNlbGYuX2ZpbGVfdHlwZV9kZWZh
dWx0ID09IENvbW1vbk9wdGlvbnMuVVNFX0RFRkFVTFQ6CisgICAgICAgICAgICByZXR1cm4gQ29t
bW9uT3B0aW9ucy5GSUxFX1RZUEVfREVGQVVMVAorICAgICAgICByZXR1cm4gc2VsZi5fZmlsZV90
eXBlX2RlZmF1bHQKKworICAgIGRlZiBhdXRvX2FkZF9ncm91cHMoc2VsZik6CisgICAgICAgIGlm
IHNlbGYuX2F1dG9fYWRkX2dyb3VwcyA9PSBDb21tb25PcHRpb25zLlVTRV9ERUZBVUxUOgorICAg
ICAgICAgICAgcmV0dXJuIENvbW1vbk9wdGlvbnMuQVVUT19BRERfR1JPVVBTX0RFRkFVTFQKKyAg
ICAgICAgcmV0dXJuIHNlbGYuX2F1dG9fYWRkX2dyb3VwcworCisgICAgZGVmIHNldF9hdXRvX2Fk
ZF9ncm91cHMoc2VsZiwgdmFsdWUpOgorICAgICAgICBzZWxmLl9hdXRvX2FkZF9ncm91cHMgPSB2
YWx1ZQorCisgICAgZGVmIHBhcnNlKHNlbGYsIGNvbW1vbiwgbGlzdCk6CisgICAgICAgIHdoaWxl
IGxpc3QgYW5kIGxpc3RbMF1bMF0gPT0gJy0nOgorICAgICAgICAgICAgb3B0aW9uX3N0cmluZyA9
IGxpc3QucG9wKDApCisgICAgICAgICAgICBpZiBvcHRpb25fc3RyaW5nID09ICctaCcgb3Igb3B0
aW9uX3N0cmluZyA9PSAnLS1oZWxwJzoKKyAgICAgICAgICAgICAgICBzZWxmLl9oZWxwID0gVHJ1
ZQorICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICBpZiBvcHRpb25fc3RyaW5n
ID09ICctLXNpbGVudCcgb3Igb3B0aW9uX3N0cmluZyA9PSAnLS12ZXJib3NpdHk9c2lsZW50JyBv
ciBvcHRpb25fc3RyaW5nID09ICctLXZlcmJvc2l0eT0wJzoKKyAgICAgICAgICAgICAgICBzZWxm
Ll92ZXJib3NpdHkgPSBDb21tb25PcHRpb25zLlZFUkJPU0lUWV9TSUxFTlQKKyAgICAgICAgICAg
ICAgICBjb250aW51ZQorICAgICAgICAgICAgaWYgb3B0aW9uX3N0cmluZyA9PSAnLS1ub3JtYWwn
IG9yIG9wdGlvbl9zdHJpbmcgPT0gJy0tdmVyYm9zaXR5PW5vcm1hbCcgb3Igb3B0aW9uX3N0cmlu
ZyA9PSAnLS12ZXJib3NpdHk9MSc6CisgICAgICAgICAgICAgICAgc2VsZi5fdmVyYm9zaXR5ID0g
Q29tbW9uT3B0aW9ucy5WRVJCT1NJVFlfTk9STUFMCisgICAgICAgICAgICAgICAgY29udGludWUK
KyAgICAgICAgICAgIGlmIG9wdGlvbl9zdHJpbmcgPT0gJy12JyBvciBvcHRpb25fc3RyaW5nID09
ICctLXZlcmJvc2UnIG9yIG9wdGlvbl9zdHJpbmcgPT0gJy0tdmVyYm9zaXR5PXZlcmJvc2UnIG9y
IG9wdGlvbl9zdHJpbmcgPT0gJy0tdmVyYm9zaXR5PTInOgorICAgICAgICAgICAgICAgIHNlbGYu
X3ZlcmJvc2l0eSA9IENvbW1vbk9wdGlvbnMuVkVSQk9TSVRZX1ZFUkJPU0UKKyAgICAgICAgICAg
ICAgICBjb250aW51ZQorICAgICAgICAgICAgaWYgb3B0aW9uX3N0cmluZyA9PSAnLS1kZWJ1Zycg
b3Igb3B0aW9uX3N0cmluZyA9PSAnLS12ZXJib3NpdHk9ZGVidWcnIG9yIG9wdGlvbl9zdHJpbmcg
PT0gJy0tdmVyYm9zaXR5PTMnOgorICAgICAgICAgICAgICAgIHNlbGYuX3ZlcmJvc2l0eSA9IENv
bW1vbk9wdGlvbnMuVkVSQk9TSVRZX1ZFUllfVkVSQk9TRQorICAgICAgICAgICAgICAgIGNvbnRp
bnVlCisgICAgICAgICAgICBjb21tb24uZXJyb3IoIlVua25vd24gY29tbWFuZC1saW5lIG9wdGlv
biAlcyEiICUgb3B0aW9uX3N0cmluZykK
</data>
<flag name="review"
          id="138807"
          type_id="1"
          status="-"
          setter="andersca"
    />
    <flag name="commit-queue"
          id="138808"
          type_id="3"
          status="-"
          setter="andersca"
    />
          </attachment>
      

    </bug>

</bugzilla>