<?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>68451</bug_id>
          
          <creation_ts>2011-09-20 10:38:58 -0700</creation_ts>
          <short_desc>Prevent the WebKit frameworks from defining inappropriately-named Objective-C classes</short_desc>
          <delta_ts>2011-09-21 11:48:47 -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>WebKit API</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Mac</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Enhancement</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter>mitz</reporter>
          <assigned_to>mitz</assigned_to>
          <cc>joepeck</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>470161</commentid>
    <comment_count>0</comment_count>
    <who name="">mitz</who>
    <bug_when>2011-09-20 10:38:58 -0700</bug_when>
    <thetext>Patch forthcoming</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>470166</commentid>
    <comment_count>1</comment_count>
      <attachid>108024</attachid>
    <who name="">mitz</who>
    <bug_when>2011-09-20 10:45:55 -0700</bug_when>
    <thetext>Created attachment 108024
Add build phases that invoke a script that checks that Objective-C class names have appropriately-prefixed names</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>470200</commentid>
    <comment_count>2</comment_count>
    <who name="Joseph Pecoraro">joepeck</who>
    <bug_when>2011-09-20 11:20:00 -0700</bug_when>
    <thetext>Reading the new shell script Tools/Scripts/check-for-inappropriate-objc-class-names
as a diff against Tools/Scripts/check-for-weak-vtables-and-externals is a bit confusing.
It might be worth attaching the shell script as a separate attachment so we can see it
as a whole.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>470201</commentid>
    <comment_count>3</comment_count>
      <attachid>108029</attachid>
    <who name="">mitz</who>
    <bug_when>2011-09-20 11:21:44 -0700</bug_when>
    <thetext>Created attachment 108029
bad attachment

This is the script added in attachment 108024</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>470202</commentid>
    <comment_count>4</comment_count>
      <attachid>108030</attachid>
    <who name="">mitz</who>
    <bug_when>2011-09-20 11:23:48 -0700</bug_when>
    <thetext>Created attachment 108030
check-for-inappropriate-objc-class-names

This is the script added in attachment 108024.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>470226</commentid>
    <comment_count>5</comment_count>
      <attachid>108024</attachid>
    <who name="Joseph Pecoraro">joepeck</who>
    <bug_when>2011-09-20 11:47:06 -0700</bug_when>
    <thetext>Comment on attachment 108024
Add build phases that invoke a script that checks that Objective-C class names have appropriately-prefixed names

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

Thanks for putting up the attachment! Some drive-by comments about the script not meant to be a review. The script looks good to me, but I think someone who knows more about the `nm` output would be a better reviewer.

&gt; Tools/Scripts/check-for-inappropriate-objc-class-names:55
&gt; +my $pattern = &quot;^(&quot; . join(&apos;|&apos;, @allowedPrefixes) . &quot;)&quot;;

Maybe consider regex escaping the @allowedPrefixes values. This can be done with \Qvalue\E inside of perl regexes. But here the input is known to be simple strings so that might just be overkill.
http://perldoc.perl.org/perlre.html#Quoting-metacharacters

&gt; Tools/Scripts/check-for-inappropriate-objc-class-names:59
&gt; +if (!defined $executablePathAge || !defined $buildTimestampAge || $executablePathAge &lt; $buildTimestampAge || $scriptAge &lt; $buildTimestampAge) {

This $scriptAge check looks useful. Maybe you could add that to check-for-weak-vtables-and-externals and other build scripts?

&gt; Tools/Scripts/check-for-inappropriate-objc-class-names:91
&gt; +            print &quot;ERROR: Objective-C class names in $target must have the prefix \&quot;&quot; . $allowedPrefixes[0] . &quot;\&quot;.&quot;;

This should end with a &quot;\n&quot;.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>470995</commentid>
    <comment_count>6</comment_count>
    <who name="">mitz</who>
    <bug_when>2011-09-21 11:48:47 -0700</bug_when>
    <thetext>Landed as &lt;http://trac.webkit.org/r95655&gt;.

(In reply to comment #5)
&gt; (From update of attachment 108024 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=108024&amp;action=review
&gt; 
&gt; Thanks for putting up the attachment! Some drive-by comments about the script not meant to be a review. The script looks good to me, but I think someone who knows more about the `nm` output would be a better reviewer.

Thanks for the comments!

&gt; 
&gt; &gt; Tools/Scripts/check-for-inappropriate-objc-class-names:55
&gt; &gt; +my $pattern = &quot;^(&quot; . join(&apos;|&apos;, @allowedPrefixes) . &quot;)&quot;;
&gt; 
&gt; Maybe consider regex escaping the @allowedPrefixes values. This can be done with \Qvalue\E inside of perl regexes. But here the input is known to be simple strings so that might just be overkill.

I decided that it was overkill and would actually obfuscate the code.

&gt; This $scriptAge check looks useful. Maybe you could add that to check-for-weak-vtables-and-externals and other build scripts?

Seems like a good idea. One other script already has this check.

&gt; 
&gt; &gt; Tools/Scripts/check-for-inappropriate-objc-class-names:91
&gt; &gt; +            print &quot;ERROR: Objective-C class names in $target must have the prefix \&quot;&quot; . $allowedPrefixes[0] . &quot;\&quot;.&quot;;
&gt; 
&gt; This should end with a &quot;\n&quot;.

Done.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>108024</attachid>
            <date>2011-09-20 10:45:55 -0700</date>
            <delta_ts>2011-09-21 11:34:58 -0700</delta_ts>
            <desc>Add build phases that invoke a script that checks that Objective-C class names have appropriately-prefixed names</desc>
            <filename>bug-68451-20110920104555.patch</filename>
            <type>text/plain</type>
            <size>24253</size>
            <attacher>mitz</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gOTU1NTIpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTMgQEAK
KzIwMTEtMDktMjAgIERhbiBCZXJuc3RlaW4gIDxtaXR6QGFwcGxlLmNvbT4KKworICAgICAgICBK
YXZhU2NyaXB0Q29yZSBQYXJ0IG9mOiBQcmV2ZW50IHRoZSBXZWJLaXQgZnJhbWV3b3JrcyBmcm9t
IGRlZmluaW5nIGluYXBwcm9wcmlhdGVseS1uYW1lZCBPYmplY3RpdmUtQyBjbGFzc2VzCisgICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD02ODQ1MQorCisgICAg
ICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogSmF2YVNjcmlwdENv
cmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajogQWRkZWQgYSBzY3JpcHQgYnVpbGQgcGhhc2Ug
dGhhdCBpbnZva2VzCisgICAgICAgIGNoZWNrLWZvci1pbmFwcHJvcHJpYXRlLW9iamMtY2xhc3Mt
bmFtZXMsIGFsbG93aW5nIG9ubHkgY2xhc3MgbmFtZXMgcHJlZml4ZWQgd2l0aCAiSlMiLgorCiAy
MDExLTA5LTIwICBBZGFtIFJvYmVuICA8YXJvYmVuQGFwcGxlLmNvbT4KIAogICAgICAgICBXaW5k
b3dzIGJ1aWxkIGZpeCBhZnRlciByOTU1MjMKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9K
YXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhw
cm9qCShyZXZpc2lvbiA5NTU0NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0
Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC0yODY3LDYg
KzI4NjcsNyBAQAogCQkJCTkzMTk1ODZCMDlEOUY5MUEwMEE1NkZENCAvKiBDaGVjayBGb3IgR2xv
YmFsIEluaXRpYWxpemVycyAqLywKIAkJCQk5MzM0NTcyMDBFQkZEQzNGMDBCODA4OTQgLyogQ2hl
Y2sgRm9yIEV4aXQgVGltZSBEZXN0cnVjdG9ycyAqLywKIAkJCQk1RDI5RDhCRTBFOTg2MEI0MDBD
M0QyRDAgLyogQ2hlY2sgRm9yIFdlYWsgVlRhYmxlcyBhbmQgRXh0ZXJuYWxzICovLAorCQkJCTM3
MTNGMDE0MTQyOTA1MjQwMDM2Mzg3RiAvKiBDaGVjayBGb3IgSW5hcHByb3ByaWF0ZSBPYmplY3Rp
dmUtQyBDbGFzcyBOYW1lcyAqLywKIAkJCSk7CiAJCQlidWlsZFJ1bGVzID0gKAogCQkJKTsKQEAg
LTI5MzQsNiArMjkzNSwyMSBAQAogLyogRW5kIFBCWFByb2plY3Qgc2VjdGlvbiAqLwogCiAvKiBC
ZWdpbiBQQlhTaGVsbFNjcmlwdEJ1aWxkUGhhc2Ugc2VjdGlvbiAqLworCQkzNzEzRjAxNDE0Mjkw
NTI0MDAzNjM4N0YgLyogQ2hlY2sgRm9yIEluYXBwcm9wcmlhdGUgT2JqZWN0aXZlLUMgQ2xhc3Mg
TmFtZXMgKi8gPSB7CisJCQlpc2EgPSBQQlhTaGVsbFNjcmlwdEJ1aWxkUGhhc2U7CisJCQlidWls
ZEFjdGlvbk1hc2sgPSAyMTQ3NDgzNjQ3OworCQkJZmlsZXMgPSAoCisJCQkpOworCQkJaW5wdXRQ
YXRocyA9ICgKKwkJCQkiJChUQVJHRVRfQlVJTERfRElSKS8kKEVYRUNVVEFCTEVfUEFUSCkiLAor
CQkJKTsKKwkJCW5hbWUgPSAiQ2hlY2sgRm9yIEluYXBwcm9wcmlhdGUgT2JqZWN0aXZlLUMgQ2xh
c3MgTmFtZXMiOworCQkJb3V0cHV0UGF0aHMgPSAoCisJCQkpOworCQkJcnVuT25seUZvckRlcGxv
eW1lbnRQb3N0cHJvY2Vzc2luZyA9IDA7CisJCQlzaGVsbFBhdGggPSAvYmluL3NoOworCQkJc2hl
bGxTY3JpcHQgPSAiaWYgWyBcIiR7QUNUSU9OfVwiID0gXCJpbnN0YWxsaGRyc1wiIF07IHRoZW5c
biAgICBleGl0IDA7XG5maVxuXG5pZiBbIC1mIC4uLy4uL1Rvb2xzL1NjcmlwdHMvY2hlY2stZm9y
LWluYXBwcm9wcmlhdGUtb2JqYy1jbGFzcy1uYW1lcyBdOyB0aGVuXG4gICAgLi4vLi4vVG9vbHMv
U2NyaXB0cy9jaGVjay1mb3ItaW5hcHByb3ByaWF0ZS1vYmpjLWNsYXNzLW5hbWVzIEpTIHx8IGV4
aXQgJD9cbmZpIjsKKwkJfTsKIAkJNUQyOUQ4QkUwRTk4NjBCNDAwQzNEMkQwIC8qIENoZWNrIEZv
ciBXZWFrIFZUYWJsZXMgYW5kIEV4dGVybmFscyAqLyA9IHsKIAkJCWlzYSA9IFBCWFNoZWxsU2Ny
aXB0QnVpbGRQaGFzZTsKIAkJCWJ1aWxkQWN0aW9uTWFzayA9IDIxNDc0ODM2NDc7CkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvQ2hh
bmdlTG9nCShyZXZpc2lvbiA5NTU1MikKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwkod29y
a2luZyBjb3B5KQpAQCAtMSwzICsxLDEzIEBACisyMDExLTA5LTIwICBEYW4gQmVybnN0ZWluICA8
bWl0ekBhcHBsZS5jb20+CisKKyAgICAgICAgV2ViQ29yZSBwYXJ0IG9mOiBQcmV2ZW50IHRoZSBX
ZWJLaXQgZnJhbWV3b3JrcyBmcm9tIGRlZmluaW5nIGluYXBwcm9wcmlhdGVseS1uYW1lZCBPYmpl
Y3RpdmUtQyBjbGFzc2VzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD02ODQ1MQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisg
ICAgICAgICogV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOiBBZGRlZCBhIHNjcmlw
dCBidWlsZCBwaGFzZSB0aGF0IGludm9rZXMKKyAgICAgICAgY2hlY2stZm9yLWluYXBwcm9wcmlh
dGUtb2JqYy1jbGFzcy1uYW1lcywgYWxsb3dpbmcgb25seSBjbGFzcyBuYW1lcyBwcmVmaXhlZCB3
aXRoICJET00iIG9yICJXZWIiLgorCiAyMDExLTA5LTIwICBBbGV4aXMgTWVuYXJkICA8YWxleGlz
Lm1lbmFyZEBvcGVuYm9zc2Eub3JnPgogCiAgICAgICAgIFtRdF1bV0syXSBBZGQgc3R1YnMgZm9y
IEZVTExTQ1JFRU5fQVBJIG9uIFF0LgpJbmRleDogU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29k
ZXByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL1dlYkNv
cmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24gOTU1NDcpCisrKyBTb3VyY2Uv
V2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkK
QEAgLTIzNTU3LDYgKzIzNTU3LDcgQEAKIAkJCQk5MzlEMDUwMTA5RDlGRjZCMDA5ODQ5OTYgLyog
Q2hlY2sgRm9yIEdsb2JhbCBJbml0aWFsaXplcnMgKi8sCiAJCQkJOTMzNDU3RTYwRUJGREY2QjAw
QjgwODk0IC8qIENoZWNrIEZvciBFeGl0IFRpbWUgRGVzdHJ1Y3RvcnMgKi8sCiAJCQkJNUQwRDU0
MEQwRTk4NjJGNjAwMjlFMjIzIC8qIENoZWNrIEZvciBXZWFrIFZUYWJsZXMgYW5kIEV4dGVybmFs
cyAqLywKKwkJCQkzN0ExRUFBMzE0MjY5OUJDMDA4N0Y0MjUgLyogQ2hlY2sgRm9yIEluYXBwcm9w
cmlhdGUgT2JqZWN0aXZlLUMgQ2xhc3MgTmFtZXMgKi8sCiAJCQkJNURGNTA4ODcxMTZGMzA3NzAw
NTIwMkFCIC8qIENoZWNrIEZvciBJbmFwcHJvcHJpYXRlIEZpbGVzIEluIEZyYW1ld29yayAqLywK
IAkJCSk7CiAJCQlidWlsZFJ1bGVzID0gKApAQCAtMjM2ODgsNiArMjM2ODksMjEgQEAKIAkJCXNo
ZWxsUGF0aCA9IC9iaW4vc2g7CiAJCQlzaGVsbFNjcmlwdCA9ICIjIENvcHkgYWxsIHRoZSBJbnNw
ZWN0b3IgZnJvbnQtZW5kIHJlc291cmNlcy5cbmRpdHRvIFwiJHtTUkNST09UfS9pbnNwZWN0b3Iv
ZnJvbnQtZW5kXCIgXCIke1RBUkdFVF9CVUlMRF9ESVJ9LyR7VU5MT0NBTElaRURfUkVTT1VSQ0VT
X0ZPTERFUl9QQVRIfS9pbnNwZWN0b3JcIlxuZGl0dG8gXCIke0JVSUxUX1BST0RVQ1RTX0RJUn0v
RGVyaXZlZFNvdXJjZXMvV2ViQ29yZS9JbnNwZWN0b3JCYWNrZW5kU3R1Yi5qc1wiIFwiJHtUQVJH
RVRfQlVJTERfRElSfS8ke1VOTE9DQUxJWkVEX1JFU09VUkNFU19GT0xERVJfUEFUSH0vaW5zcGVj
dG9yXCJcblxuIyBSZW1vdmUgdGhlIFdlYktpdC5xcmMgZmlsZSBzaW5jZSBpdCBpcyBub3QgdXNl
ZCBvbiB0aGUgTWFjICh0aGlzIGZpbGUgaXMgZm9yIFF0KS5cbnJtIC1mIFwiJHtUQVJHRVRfQlVJ
TERfRElSfS8ke1VOTE9DQUxJWkVEX1JFU09VUkNFU19GT0xERVJfUEFUSH0vaW5zcGVjdG9yL1dl
YktpdC5xcmNcIlxuXG4jIFJlbW92ZSAqLnJlMmpzIGZpbGVzLCB0aGV5IGFyZSBvbmx5IHVzZWQg
dG8gZ2VuZXJhdGUgc29tZSAuanMgZmlsZXMuXG5ybSAtZiBcIiR7VEFSR0VUX0JVSUxEX0RJUn0v
JHtVTkxPQ0FMSVpFRF9SRVNPVVJDRVNfRk9MREVSX1BBVEh9L2luc3BlY3Rvci9cIioucmUyanNc
blxuIyBSZW1vdmUgYW55IC5zdm4gZGlyZWN0b3JpZXMgdGhhdCBtYXkgaGF2ZSBiZWVuIGNvcGll
ZCBvdmVyLlxuZmluZCBcIiR7VEFSR0VUX0JVSUxEX0RJUn0vJHtVTkxPQ0FMSVpFRF9SRVNPVVJD
RVNfRk9MREVSX1BBVEh9L2luc3BlY3RvclwiIC1uYW1lIFwiLnN2blwiIC10eXBlIGQgfCB4YXJn
cyBybSAtcmZcbiI7CiAJCX07CisJCTM3QTFFQUEzMTQyNjk5QkMwMDg3RjQyNSAvKiBDaGVjayBG
b3IgSW5hcHByb3ByaWF0ZSBPYmplY3RpdmUtQyBDbGFzcyBOYW1lcyAqLyA9IHsKKwkJCWlzYSA9
IFBCWFNoZWxsU2NyaXB0QnVpbGRQaGFzZTsKKwkJCWJ1aWxkQWN0aW9uTWFzayA9IDIxNDc0ODM2
NDc7CisJCQlmaWxlcyA9ICgKKwkJCSk7CisJCQlpbnB1dFBhdGhzID0gKAorCQkJCSIkKFRBUkdF
VF9CVUlMRF9ESVIpLyQoRVhFQ1VUQUJMRV9QQVRIKSIsCisJCQkpOworCQkJbmFtZSA9ICJDaGVj
ayBGb3IgSW5hcHByb3ByaWF0ZSBPYmplY3RpdmUtQyBDbGFzcyBOYW1lcyI7CisJCQlvdXRwdXRQ
YXRocyA9ICgKKwkJCSk7CisJCQlydW5Pbmx5Rm9yRGVwbG95bWVudFBvc3Rwcm9jZXNzaW5nID0g
MDsKKwkJCXNoZWxsUGF0aCA9IC9iaW4vc2g7CisJCQlzaGVsbFNjcmlwdCA9ICJpZiBbIFwiJHtB
Q1RJT059XCIgPSBcImluc3RhbGxoZHJzXCIgXTsgdGhlblxuICAgIGV4aXQgMDtcbmZpXG5cbmlm
IFsgLWYgLi4vLi4vVG9vbHMvU2NyaXB0cy9jaGVjay1mb3ItaW5hcHByb3ByaWF0ZS1vYmpjLWNs
YXNzLW5hbWVzIF07IHRoZW5cbiAgICAuLi8uLi9Ub29scy9TY3JpcHRzL2NoZWNrLWZvci1pbmFw
cHJvcHJpYXRlLW9iamMtY2xhc3MtbmFtZXMgRE9NIFdlYiB8fCBleGl0ICQ/XG5maSI7CisJCX07
CiAJCTVEMEQ1NDBEMEU5ODYyRjYwMDI5RTIyMyAvKiBDaGVjayBGb3IgV2VhayBWVGFibGVzIGFu
ZCBFeHRlcm5hbHMgKi8gPSB7CiAJCQlpc2EgPSBQQlhTaGVsbFNjcmlwdEJ1aWxkUGhhc2U7CiAJ
CQlidWlsZEFjdGlvbk1hc2sgPSAyMTQ3NDgzNjQ3OwpJbmRleDogU291cmNlL1dlYktpdDIvQ2hh
bmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwkocmV2aXNpb24g
OTU1NTIpCisrKyBTb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEs
MyArMSwxMyBAQAorMjAxMS0wOS0yMCAgRGFuIEJlcm5zdGVpbiAgPG1pdHpAYXBwbGUuY29tPgor
CisgICAgICAgIFdlYktpdDIgcGFydCBvZjogUHJldmVudCB0aGUgV2ViS2l0IGZyYW1ld29ya3Mg
ZnJvbSBkZWZpbmluZyBpbmFwcHJvcHJpYXRlbHktbmFtZWQgT2JqZWN0aXZlLUMgY2xhc3Nlcwor
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9Njg0NTEKKwor
ICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIFdlYktpdDIu
eGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajogQWRkZWQgYSBzY3JpcHQgYnVpbGQgcGhhc2UgdGhh
dCBpbnZva2VzCisgICAgICAgIGNoZWNrLWZvci1pbmFwcHJvcHJpYXRlLW9iamMtY2xhc3MtbmFt
ZXMsIGFsbG93aW5nIG9ubHkgY2xhc3MgbmFtZXMgcHJlZml4ZWQgd2l0aCAiV0siIG9yICJXZWIi
LgorCiAyMDExLTA5LTIwICBBbGV4aXMgTWVuYXJkICA8YWxleGlzLm1lbmFyZEBvcGVuYm9zc2Eu
b3JnPgogCiAgICAgICAgIFtRdF1bV0syXSBBZGQgc3R1YnMgZm9yIEZVTExTQ1JFRU5fQVBJIG9u
IFF0LgpJbmRleDogU291cmNlL1dlYktpdDIvV2ViS2l0Mi54Y29kZXByb2ovcHJvamVjdC5wYnhw
cm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1dlYktpdDIueGNvZGVwcm9qL3Byb2pl
Y3QucGJ4cHJvagkocmV2aXNpb24gOTU1NDcpCisrKyBTb3VyY2UvV2ViS2l0Mi9XZWJLaXQyLnhj
b2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTM5MjUsNiArMzkyNSw3
IEBACiAJCQkJNURGNDA4QzAxMzFERDM3QzAwMTMwMDcxIC8qIENoZWNrIEZvciBHbG9iYWwgSW5p
dGlhbGl6ZXJzICovLAogCQkJCTVERjQwOEM0MTMxREQzREIwMDEzMDA3MSAvKiBDaGVjayBGb3Ig
RXhpdCBUaW1lIERlc3RydWN0b3JzICovLAogCQkJCTVERjQwOEM1MTMxREQ0NjcwMDEzMDA3MSAv
KiBDaGVjayBGb3IgV2VhayBWVGFibGVzIGFuZCBFeHRlcm5hbHMgKi8sCisJCQkJMzcxM0YwMjMx
NDI5MDYzRDAwMzYzODdGIC8qIENoZWNrIEZvciBJbmFwcHJvcHJpYXRlIE9iamVjdGl2ZS1DIENs
YXNzIE5hbWVzICovLAogCQkJCTVERjQwOEM2MTMxREQ0OTcwMDEzMDA3MSAvKiBDaGVjayBGb3Ig
RnJhbWV3b3JrIEluY2x1ZGUgQ29uc2lzdGVuY3kgKi8sCiAJCQkJNURGNDA4RDExMzFEREJFQzAw
MTMwMDcxIC8qIENoZWNrIEZvciBJbmFwcHJvcHJpYXRlIEZpbGVzIEluIEZyYW1ld29yayAqLywK
IAkJCSk7CkBAIC00MDE3LDYgKzQwMTgsMjEgQEAKIC8qIEVuZCBQQlhSZXNvdXJjZXNCdWlsZFBo
YXNlIHNlY3Rpb24gKi8KIAogLyogQmVnaW4gUEJYU2hlbGxTY3JpcHRCdWlsZFBoYXNlIHNlY3Rp
b24gKi8KKwkJMzcxM0YwMjMxNDI5MDYzRDAwMzYzODdGIC8qIENoZWNrIEZvciBJbmFwcHJvcHJp
YXRlIE9iamVjdGl2ZS1DIENsYXNzIE5hbWVzICovID0geworCQkJaXNhID0gUEJYU2hlbGxTY3Jp
cHRCdWlsZFBoYXNlOworCQkJYnVpbGRBY3Rpb25NYXNrID0gMjE0NzQ4MzY0NzsKKwkJCWZpbGVz
ID0gKAorCQkJKTsKKwkJCWlucHV0UGF0aHMgPSAoCisJCQkJIiQoVEFSR0VUX0JVSUxEX0RJUikv
JChFWEVDVVRBQkxFX1BBVEgpIiwKKwkJCSk7CisJCQluYW1lID0gIkNoZWNrIEZvciBJbmFwcHJv
cHJpYXRlIE9iamVjdGl2ZS1DIENsYXNzIE5hbWVzIjsKKwkJCW91dHB1dFBhdGhzID0gKAorCQkJ
KTsKKwkJCXJ1bk9ubHlGb3JEZXBsb3ltZW50UG9zdHByb2Nlc3NpbmcgPSAwOworCQkJc2hlbGxQ
YXRoID0gL2Jpbi9zaDsKKwkJCXNoZWxsU2NyaXB0ID0gImlmIFsgXCIke0FDVElPTn1cIiA9IFwi
aW5zdGFsbGhkcnNcIiBdOyB0aGVuXG4gICAgZXhpdCAwO1xuZmlcblxuaWYgWyAtZiAuLi8uLi9U
b29scy9TY3JpcHRzL2NoZWNrLWZvci1pbmFwcHJvcHJpYXRlLW9iamMtY2xhc3MtbmFtZXMgXTsg
dGhlblxuICAgIC4uLy4uL1Rvb2xzL1NjcmlwdHMvY2hlY2stZm9yLWluYXBwcm9wcmlhdGUtb2Jq
Yy1jbGFzcy1uYW1lcyBXSyBXZWIgfHwgZXhpdCAkP1xuZmkiOworCQl9OwogCQk1REY0MDhDMDEz
MUREMzdDMDAxMzAwNzEgLyogQ2hlY2sgRm9yIEdsb2JhbCBJbml0aWFsaXplcnMgKi8gPSB7CiAJ
CQlpc2EgPSBQQlhTaGVsbFNjcmlwdEJ1aWxkUGhhc2U7CiAJCQlidWlsZEFjdGlvbk1hc2sgPSAy
MTQ3NDgzNjQ3OwpJbmRleDogU291cmNlL1dlYktpdC9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYktpdC9DaGFuZ2VMb2cJKHJldmlzaW9uIDk1NTUyKQorKysgU291cmNlL1dlYktp
dC9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwxMyBAQAorMjAxMS0wOS0yMCAg
RGFuIEJlcm5zdGVpbiAgPG1pdHpAYXBwbGUuY29tPgorCisgICAgICAgIFdlYktpdCBwYXJ0IG9m
OiBQcmV2ZW50IHRoZSBXZWJLaXQgZnJhbWV3b3JrcyBmcm9tIGRlZmluaW5nIGluYXBwcm9wcmlh
dGVseS1uYW1lZCBPYmplY3RpdmUtQyBjbGFzc2VzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD02ODQ1MQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9E
WSAoT09QUyEpLgorCisgICAgICAgICogV2ViS2l0Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6
IEFkZGVkIGEgc2NyaXB0IGJ1aWxkIHBoYXNlIHRoYXQgaW52b2tlcworICAgICAgICBjaGVjay1m
b3ItaW5hcHByb3ByaWF0ZS1vYmpjLWNsYXNzLW5hbWVzLCBhbGxvd2luZyBvbmx5IGNsYXNzIG5h
bWVzIHByZWZpeGVkIHdpdGggIldlYiIgb3IgIl9XZWIiLgorCiAyMDExLTA5LTE5ICBBbmRlcnMg
Q2FybHNzb24gIDxhbmRlcnNjYUBhcHBsZS5jb20+CiAKICAgICAgICAgUmVtb3ZlIFdlYlZpZXdF
dmVudEhhbmRsaW5nLm1tCkluZGV4OiBTb3VyY2UvV2ViS2l0L1dlYktpdC54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvV2ViS2l0Lnhjb2RlcHJv
ai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDk1NTQ3KQorKysgU291cmNlL1dlYktpdC9XZWJL
aXQueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkod29ya2luZyBjb3B5KQpAQCAtMTY0MSw2ICsx
NjQxLDcgQEAKIAkJCQk5MzlEMDU0RjA5REEwMkQ1MDA5ODQ5OTYgLyogQ2hlY2sgRm9yIEdsb2Jh
bCBJbml0aWFsaXplcnMgKi8sCiAJCQkJOTMzN0Q2NTQwRUJGRTU0RDAwREEzQ0I1IC8qIENoZWNr
IEZvciBFeGl0IFRpbWUgRGVzdHJ1Y3RvcnMgKi8sCiAJCQkJNUQwRDU0MjEwRTk4NjMxRDAwMjlF
MjIzIC8qIENoZWNrIEZvciBXZWFrIFZUYWJsZXMgYW5kIEV4dGVybmFscyAqLywKKwkJCQkzNzEz
RjAxODE0MjkwNUI3MDAzNjM4N0YgLyogQ2hlY2sgRm9yIEluYXBwcm9wcmlhdGUgT2JqZWN0aXZl
LUMgQ2xhc3MgTmFtZXMgKi8sCiAJCQkJNUQ4OEVFNkMxMTQwN0RFODAwQkMzQUJDIC8qIENoZWNr
IEZvciBGcmFtZXdvcmsgSW5jbHVkZSBDb25zaXN0ZW5jeSAqLywKIAkJCQk1REU2RDE4QzBGQ0Yy
MzFCMDAyREUyOEMgLyogU3ltbGluayBXZWJLaXRQbHVnaW5Ib3N0IGluIHRvIHBsYWNlICovLAog
CQkJKTsKQEAgLTE3MzEsNiArMTczMiwyMSBAQAogCQkJc2hlbGxQYXRoID0gL2Jpbi9zaDsKIAkJ
CXNoZWxsU2NyaXB0ID0gIm1rZGlyIC1wIFwiJHtUQVJHRVRfQlVJTERfRElSfS8ke1BSSVZBVEVf
SEVBREVSU19GT0xERVJfUEFUSH1cIlxubWtkaXIgLXAgXCIke1RBUkdFVF9CVUlMRF9ESVJ9LyR7
UFVCTElDX0hFQURFUlNfRk9MREVSX1BBVEh9XCJcbm1rZGlyIC1wIFwiJHtCVUlMVF9QUk9EVUNU
U19ESVJ9L0Rlcml2ZWRTb3VyY2VzL1dlYktpdFwiXG5cbmlmIFsgXCIke0FDVElPTn1cIiA9IFwi
YnVpbGRcIiAtbyBcIiR7QUNUSU9OfVwiID0gXCJpbnN0YWxsXCIgLW8gXCIke0FDVElPTn1cIiA9
IFwiaW5zdGFsbGhkcnNcIiBdOyB0aGVuXG4gICAgbWFrZSAtQyBtYWMgLWYgXCJNaWdyYXRlSGVh
ZGVycy5tYWtlXCIgLWogYC91c3Ivc2Jpbi9zeXNjdGwgLW4gaHcuYXZhaWxjcHVgXG5maVxuIjsK
IAkJfTsKKwkJMzcxM0YwMTgxNDI5MDVCNzAwMzYzODdGIC8qIENoZWNrIEZvciBJbmFwcHJvcHJp
YXRlIE9iamVjdGl2ZS1DIENsYXNzIE5hbWVzICovID0geworCQkJaXNhID0gUEJYU2hlbGxTY3Jp
cHRCdWlsZFBoYXNlOworCQkJYnVpbGRBY3Rpb25NYXNrID0gMjE0NzQ4MzY0NzsKKwkJCWZpbGVz
ID0gKAorCQkJKTsKKwkJCWlucHV0UGF0aHMgPSAoCisJCQkJIiQoVEFSR0VUX0JVSUxEX0RJUikv
JChFWEVDVVRBQkxFX1BBVEgpIiwKKwkJCSk7CisJCQluYW1lID0gIkNoZWNrIEZvciBJbmFwcHJv
cHJpYXRlIE9iamVjdGl2ZS1DIENsYXNzIE5hbWVzIjsKKwkJCW91dHB1dFBhdGhzID0gKAorCQkJ
KTsKKwkJCXJ1bk9ubHlGb3JEZXBsb3ltZW50UG9zdHByb2Nlc3NpbmcgPSAwOworCQkJc2hlbGxQ
YXRoID0gL2Jpbi9zaDsKKwkJCXNoZWxsU2NyaXB0ID0gImlmIFsgXCIke0FDVElPTn1cIiA9IFwi
aW5zdGFsbGhkcnNcIiBdOyB0aGVuXG4gICAgZXhpdCAwO1xuZmlcblxuaWYgWyAtZiAuLi8uLi9U
b29scy9TY3JpcHRzL2NoZWNrLWZvci1pbmFwcHJvcHJpYXRlLW9iamMtY2xhc3MtbmFtZXMgXTsg
dGhlblxuICAgIC4uLy4uL1Rvb2xzL1NjcmlwdHMvY2hlY2stZm9yLWluYXBwcm9wcmlhdGUtb2Jq
Yy1jbGFzcy1uYW1lcyBXZWIgX1dlYiB8fCBleGl0ICQ/XG5maSI7CisJCX07CiAJCTVEMEQ1NDIx
MEU5ODYzMUQwMDI5RTIyMyAvKiBDaGVjayBGb3IgV2VhayBWVGFibGVzIGFuZCBFeHRlcm5hbHMg
Ki8gPSB7CiAJCQlpc2EgPSBQQlhTaGVsbFNjcmlwdEJ1aWxkUGhhc2U7CiAJCQlidWlsZEFjdGlv
bk1hc2sgPSAyMTQ3NDgzNjQ3OwpJbmRleDogVG9vbHMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFRvb2xzL0NoYW5nZUxvZwkocmV2aXNpb24gOTU1NTIpCisrKyBUb29scy9DaGFuZ2VMb2cJKHdv
cmtpbmcgY29weSkKQEAgLTEsMyArMSwxNCBAQAorMjAxMS0wOS0yMCAgRGFuIEJlcm5zdGVpbiAg
PG1pdHpAYXBwbGUuY29tPgorCisgICAgICAgIFRvb2xzIHBhcnQgb2Y6IFByZXZlbnQgdGhlIFdl
YktpdCBmcmFtZXdvcmtzIGZyb20gZGVmaW5pbmcgaW5hcHByb3ByaWF0ZWx5LW5hbWVkIE9iamVj
dGl2ZS1DIGNsYXNzZXMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTY4NDUxCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAg
ICAgICAgKiBTY3JpcHRzL2NoZWNrLWZvci1pbmFwcHJvcHJpYXRlLW9iamMtY2xhc3MtbmFtZXM6
IEFkZGVkLiBDaGVja3MgZm9yCisgICAgICAgIE9iamVjdGl2ZS1DIGNsYXNzZXMgd2l0aCBuYW1l
cyBub3QgaGF2aW5nIG9uZSBvZiBhIGxpc3Qgb2YgcHJlZml4ZXMKKyAgICAgICAgcGFzc2VkIG9u
IHRoZSBjb21tYW5kIGxpbmUuCisKIDIwMTEtMDktMjAgIExlYW5kcm8gUGVyZWlyYSAgPGxlYW5k
cm9AcHJvZnVzaW9uLm1vYmk+CiAKICAgICAgICAgQ2hhbmdlbG9nIGNsYXNzIHNob3VsZCBoYXZl
IGEgbWV0aG9kIHRvIHJldHVybiBhbGwgZW50cmllcwpJbmRleDogVG9vbHMvU2NyaXB0cy9jaGVj
ay1mb3ItaW5hcHByb3ByaWF0ZS1vYmpjLWNsYXNzLW5hbWVzCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xz
L1NjcmlwdHMvY2hlY2stZm9yLWluYXBwcm9wcmlhdGUtb2JqYy1jbGFzcy1uYW1lcwkocmV2aXNp
b24gOTU1NDcpCShmcm9tIFRvb2xzL1NjcmlwdHMvY2hlY2stZm9yLXdlYWstdnRhYmxlcy1hbmQt
ZXh0ZXJuYWxzOjk1NTQ3KQorKysgVG9vbHMvU2NyaXB0cy9jaGVjay1mb3ItaW5hcHByb3ByaWF0
ZS1vYmpjLWNsYXNzLW5hbWVzCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTIwIEBACisjIS91
c3IvYmluL3BlcmwKKworIyBDb3B5cmlnaHQgKEMpIDIwMDYsIDIwMDcsIDIwMDgsIDIwMTAgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorIworIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMgbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisjIGFyZSBtZXQ6CisjCisjIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLiAKKyMgMi4gIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisjICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisjICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLiAKKyMgMy4gIE5laXRoZXIgdGhl
IG5hbWUgb2YgQXBwbGUgSW5jLiAoIkFwcGxlIikgbm9yIHRoZSBuYW1lcyBvZgorIyAgICAgaXRz
IGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMg
ZGVyaXZlZAorIyAgICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Ig
d3JpdHRlbiBwZXJtaXNzaW9uLiAKKyMKKyMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKKyMgRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1Q
TElFRAorIyBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSIFBVUlBPU0UgQVJFCisjIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyMgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMKKyMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworIyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyMgT04g
QU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKKyMgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisjIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisKKyMgImNoZWNr
LWZvci13ZWFrLXZ0YWJsZXMtYW5kLWV4dGVybmFscyIgc2NyaXB0IGZvciBXZWJLaXQgT3BlbiBT
b3VyY2UgUHJvamVjdAorCisjIEludGVuZGVkIHRvIGJlIGludm9rZWQgZnJvbSBhbiBYY29kZSBi
dWlsZCBzdGVwIHRvIGNoZWNrIGlmIHRoZXJlIGFyZQorIyBhbnkgd2VhayB2dGFibGVzIG9yIHdl
YWsgZXh0ZXJuYWxzIGluIGEgdGFyZ2V0LgorCit1c2Ugd2FybmluZ3M7Cit1c2Ugc3RyaWN0Owor
Cit1c2UgRmlsZTo6QmFzZW5hbWU7CisKK3N1YiB0b3VjaCgkKTsKKworbXkgJGFyY2ggPSAkRU5W
eydDVVJSRU5UX0FSQ0gnfTsKK215ICRjb25maWd1cmF0aW9uID0gJEVOVnsnQ09ORklHVVJBVElP
Tid9OworbXkgJHRhcmdldCA9ICRFTlZ7J1RBUkdFVF9OQU1FJ307CitteSAkdmFyaWFudCA9ICRF
TlZ7J0NVUlJFTlRfVkFSSUFOVCd9OworbXkgJGNvdmVyYWdlQnVpbGQgPSAkRU5WeydXRUJLSVRf
Q09WRVJBR0VfQlVJTEQnfTsKK215ICRkZWJ1Z1Jvb3QgPSAkRU5WeydXRUJLSVRfREVCVUdfUk9P
VCd9OworCiskYXJjaCA9ICRFTlZ7J05BVElWRV9BUkNIJ30gaWYgISRhcmNoOyAjIGZvciBYY29k
ZSAyLjEsIHdoaWNoIGRvZXMgbm90IGhhdmUgQ1VSUkVOVF9BUkNICiskdmFyaWFudCA9ICJub3Jt
YWwiIGlmICEkdmFyaWFudDsgIyBmb3IgWGNvZGUgMi4xLCB3aGljaCBkb2VzIG5vdCBoYXZlIENV
UlJFTlRfVkFSSUFOVAorCitteSAkZXhlY3V0YWJsZVBhdGggPSAiJEVOVnsnVEFSR0VUX0JVSUxE
X0RJUid9LyRFTlZ7J0VYRUNVVEFCTEVfUEFUSCd9IjsKKworbXkgJGJ1aWxkVGltZXN0YW1wUGF0
aCA9ICRFTlZ7J1RBUkdFVF9URU1QX0RJUid9IC4gIi8iIC4gYmFzZW5hbWUoJDApIC4gIi50aW1l
c3RhbXAiOworbXkgJGJ1aWxkVGltZXN0YW1wQWdlID0gLU0gJGJ1aWxkVGltZXN0YW1wUGF0aDsK
K215ICRleGVjdXRhYmxlUGF0aEFnZSA9IC1NICRleGVjdXRhYmxlUGF0aDsKKworbXkgJHNhd0Vy
cm9yID0gMDsKKworaWYgKCFkZWZpbmVkICRleGVjdXRhYmxlUGF0aEFnZSB8fCAhZGVmaW5lZCAk
YnVpbGRUaW1lc3RhbXBBZ2UgfHwgJGV4ZWN1dGFibGVQYXRoQWdlIDwgJGJ1aWxkVGltZXN0YW1w
QWdlKSB7CisgICAgaWYgKCFvcGVuIE5NLCAiKG5tIC1tICckZXhlY3V0YWJsZVBhdGgnIHwgYysr
ZmlsdCB8IHNlZCAncy9eL1NURE9VVDovJykgMj4mMSB8IikgeworICAgICAgICBwcmludCAiRVJS
T1I6IENvdWxkIG5vdCBvcGVuICRleGVjdXRhYmxlUGF0aFxuIjsKKyAgICAgICAgJHNhd0Vycm9y
ID0gMTsKKyAgICAgICAgbmV4dDsKKyAgICB9CisgICAgbXkgQHdlYWtWVGFibGVDbGFzc2VzID0g
KCk7CisgICAgbXkgQHdlYWtFeHRlcm5hbFN5bWJvbHMgPSAoKTsKKyAgICB3aGlsZSAoPE5NPikg
eworICAgICAgICBpZiAoL15TVERPVVQ6LykgeworICAgICAgICAgICAgIyBJZ25vcmUgdW5kZWZp
bmVkLCBSVFRJIGFuZCB0eXBlaW5mbyBzeW1ib2xzLgorICAgICAgICAgICAgbmV4dCBpZiAvXGJ1
bmRlZmluZWRcYi8gb3IgL1xiX19aVFtJU10vOworCisgICAgICAgICAgICBpZiAoL3dlYWsgZXh0
ZXJuYWwgdnRhYmxlIGZvciAoLiopJC8pIHsKKyAgICAgICAgICAgICAgICBwdXNoIEB3ZWFrVlRh
YmxlQ2xhc3NlcywgJDE7CisgICAgICAgICAgICB9IGVsc2lmICgvd2VhayBleHRlcm5hbCAoLiop
JC8pIHsKKyAgICAgICAgICAgICAgICBwdXNoIEB3ZWFrRXh0ZXJuYWxTeW1ib2xzLCAkMTsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHByaW50IFNUREVSUiBp
ZiAkXyBuZSAibm06IG5vIG5hbWUgbGlzdFxuIjsKKyAgICAgICAgfQorICAgIH0KKyAgICBjbG9z
ZSBOTTsKKworICAgIG15ICRzaG9ydE5hbWUgPSAkZXhlY3V0YWJsZVBhdGg7CisgICAgJHNob3J0
TmFtZSA9fiBzLy4qXC8vLzsKKworICAgIGlmIChAd2Vha1ZUYWJsZUNsYXNzZXMpIHsKKyAgICAg
ICAgcHJpbnQgIkVSUk9SOiAkc2hvcnROYW1lIGhhcyBhIHdlYWsgdnRhYmxlIGluIGl0ICgkZXhl
Y3V0YWJsZVBhdGgpXG4iOworICAgICAgICBwcmludCAiRVJST1I6IEZpeCBieSBtYWtpbmcgc3Vy
ZSB0aGUgZmlyc3QgdmlydHVhbCBmdW5jdGlvbiBpbiBlYWNoIG9mIHRoZXNlIGNsYXNzZXMgaXMg
bm90IGFuIGlubGluZTpcbiI7CisgICAgICAgIGZvciBteSAkY2xhc3MgKHNvcnQgQHdlYWtWVGFi
bGVDbGFzc2VzKSB7CisgICAgICAgICAgICBwcmludCAiRVJST1I6IGNsYXNzICRjbGFzc1xuIjsK
KyAgICAgICAgfQorICAgICAgICAkc2F3RXJyb3IgPSAxOworICAgIH0KKworICAgIGlmIChAd2Vh
a0V4dGVybmFsU3ltYm9scykgeworICAgICAgICBwcmludCAiRVJST1I6ICRzaG9ydE5hbWUgaGFz
IGEgd2VhayBleHRlcm5hbCBzeW1ib2wgaW4gaXQgKCRleGVjdXRhYmxlUGF0aClcbiI7CisgICAg
ICAgIHByaW50ICJFUlJPUjogQSB3ZWFrIGV4dGVybmFsIHN5bWJvbCBpcyBnZW5lcmF0ZWQgd2hl
biBhIHN5bWJvbCBpcyBkZWZpbmVkIGluIG11bHRpcGxlIGNvbXBpbGF0aW9uIHVuaXRzIGFuZCBp
cyBhbHNvIG1hcmtlZCBhcyBiZWluZyBleHBvcnRlZCBmcm9tIHRoZSBsaWJyYXJ5LlxuIjsKKyAg
ICAgICAgcHJpbnQgIkVSUk9SOiBBIGNvbW1vbiBjYXVzZSBvZiB3ZWFrIGV4dGVybmFsIHN5bWJv
bHMgaXMgd2hlbiBhbiBpbmxpbmUgZnVuY3Rpb24gaXMgbGlzdGVkIGluIHRoZSBsaW5rZXIgZXhw
b3J0IGZpbGUuXG4iOworICAgICAgICBmb3IgbXkgJHN5bWJvbCAoc29ydCBAd2Vha0V4dGVybmFs
U3ltYm9scykgeworICAgICAgICAgICAgcHJpbnQgIkVSUk9SOiBzeW1ib2wgJHN5bWJvbFxuIjsK
KyAgICAgICAgfQorICAgICAgICAkc2F3RXJyb3IgPSAxOworICAgIH0KK30KKworaWYgKCRzYXdF
cnJvciBhbmQgISRjb3ZlcmFnZUJ1aWxkKSB7CisgICAgdW5saW5rICRleGVjdXRhYmxlUGF0aDsK
KyAgICBleGl0IDE7Cit9CisKK3RvdWNoKCRidWlsZFRpbWVzdGFtcFBhdGgpOworCitleGl0IDA7
CisKK3N1YiB0b3VjaCgkKQoreworICAgIG15ICgkcGF0aCkgPSBAXzsKKyAgICBvcGVuKFRPVUNI
LCAiPiIsICRwYXRoKSBvciBkaWUgIiQhIjsKKyAgICBjbG9zZShUT1VDSCk7Cit9CkluZGV4OiBU
b29scy9TY3JpcHRzL2NoZWNrLWZvci1pbmFwcHJvcHJpYXRlLW9iamMtY2xhc3MtbmFtZXMKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gVG9vbHMvU2NyaXB0cy9jaGVjay1mb3ItaW5hcHByb3ByaWF0ZS1vYmpjLWNs
YXNzLW5hbWVzCShyZXZpc2lvbiA5NTU0NykKKysrIFRvb2xzL1NjcmlwdHMvY2hlY2stZm9yLWlu
YXBwcm9wcmlhdGUtb2JqYy1jbGFzcy1uYW1lcwkod29ya2luZyBjb3B5KQpAQCAtMSwzNSArMSwz
MyBAQAogIyEvdXNyL2Jpbi9wZXJsCiAKLSMgQ29weXJpZ2h0IChDKSAyMDA2LCAyMDA3LCAyMDA4
LCAyMDEwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMgQ29weXJpZ2h0IChDKSAy
MDA2LCAyMDA3LCAyMDA4LCAyMDEwLCAyMDExIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KICMKICMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CiAjIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwogIyBhcmUgbWV0OgotIwotIyAxLiAgUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKLSMgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4gCi0jIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotIyAgICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotIyAgICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4gCi0jIDMuICBOZWl0aGVyIHRoZSBuYW1lIG9mIEFwcGxlIEluYy4gKCJBcHBs
ZSIpIG5vciB0aGUgbmFtZXMgb2YKLSMgICAgIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQg
dG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKLSMgICAgIGZyb20gdGhpcyBz
b2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4gCi0jCi0j
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMg
IkFTIElTIiBBTkQgQU5ZCi0jIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKLSMgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQotIyBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZCi0jIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCi0jIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsKLSMgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECi0jIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0jIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRSBPRgotIyBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgotCi0jICJjaGVjay1mb3Itd2Vhay12dGFibGVzLWFuZC1leHRl
cm5hbHMiIHNjcmlwdCBmb3IgV2ViS2l0IE9wZW4gU291cmNlIFByb2plY3QKLQotIyBJbnRlbmRl
ZCB0byBiZSBpbnZva2VkIGZyb20gYW4gWGNvZGUgYnVpbGQgc3RlcCB0byBjaGVjayBpZiB0aGVy
ZSBhcmUKLSMgYW55IHdlYWsgdnRhYmxlcyBvciB3ZWFrIGV4dGVybmFscyBpbiBhIHRhcmdldC4K
KyMgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyMgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorIyAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisj
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisjIAorIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisjIEFORCBBTlkgRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorIyBU
SEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisjIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworIyBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisjIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GCisjIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworIyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorIyBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKQorIyBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GCisjIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
KworIyAiY2hlY2stZm9yLWluYXBwcm9wcmlhdGUtb2JqYy1jbGFzcy1uYW1lcyIgc2NyaXB0IGZv
ciBXZWJLaXQgT3BlbiBTb3VyY2UgUHJvamVjdAorCisjIEludGVuZGVkIHRvIGJlIGludm9rZWQg
ZnJvbSBhbiBYY29kZSBidWlsZCBzdGVwIHRvIGNoZWNrIGlmIGEgZnJhbWV3b3JrCisjIGRlZmlu
ZXMgYW55IE9iamVjdGl2ZS1DIGNsYXNzIHdob3NlIG5hbWUgZG9lcyBub3QgaGF2ZSBvbmUgb2Yg
dGhlIHByZWZpeGVzCisjIHRoZSBmcmFtZXdvcmsgaXMgYWxsb3dlZCB0byB1c2UuCiAKIHVzZSB3
YXJuaW5nczsKIHVzZSBzdHJpY3Q7CkBAIC0zOCw2NyArMzYsNjEgQEAgdXNlIEZpbGU6OkJhc2Vu
YW1lOwogCiBzdWIgdG91Y2goJCk7CiAKK215IEBhbGxvd2VkUHJlZml4ZXMgPSBAQVJHVjsKKwor
ZGllICJObyBhbGxvd2VkIHByZWZpeGVzIHBhc3NlZCBvbiB0aGUgY29tbWFuZCBsaW5lIiBpZiAh
QGFsbG93ZWRQcmVmaXhlczsKKwogbXkgJGFyY2ggPSAkRU5WeydDVVJSRU5UX0FSQ0gnfTsKLW15
ICRjb25maWd1cmF0aW9uID0gJEVOVnsnQ09ORklHVVJBVElPTid9OwogbXkgJHRhcmdldCA9ICRF
TlZ7J1RBUkdFVF9OQU1FJ307CiBteSAkdmFyaWFudCA9ICRFTlZ7J0NVUlJFTlRfVkFSSUFOVCd9
OwogbXkgJGNvdmVyYWdlQnVpbGQgPSAkRU5WeydXRUJLSVRfQ09WRVJBR0VfQlVJTEQnfTsKLW15
ICRkZWJ1Z1Jvb3QgPSAkRU5WeydXRUJLSVRfREVCVUdfUk9PVCd9OwotCi0kYXJjaCA9ICRFTlZ7
J05BVElWRV9BUkNIJ30gaWYgISRhcmNoOyAjIGZvciBYY29kZSAyLjEsIHdoaWNoIGRvZXMgbm90
IGhhdmUgQ1VSUkVOVF9BUkNICi0kdmFyaWFudCA9ICJub3JtYWwiIGlmICEkdmFyaWFudDsgIyBm
b3IgWGNvZGUgMi4xLCB3aGljaCBkb2VzIG5vdCBoYXZlIENVUlJFTlRfVkFSSUFOVAogCiBteSAk
ZXhlY3V0YWJsZVBhdGggPSAiJEVOVnsnVEFSR0VUX0JVSUxEX0RJUid9LyRFTlZ7J0VYRUNVVEFC
TEVfUEFUSCd9IjsKIAotbXkgJGJ1aWxkVGltZXN0YW1wUGF0aCA9ICRFTlZ7J1RBUkdFVF9URU1Q
X0RJUid9IC4gIi8iIC4gYmFzZW5hbWUoJDApIC4gIi50aW1lc3RhbXAiOworbXkgJGJ1aWxkVGlt
ZXN0YW1wUGF0aCA9ICRFTlZ7J1RBUkdFVF9URU1QX0RJUid9IC4gIi8iIC4gYmFzZW5hbWUoJDAp
IC4gam9pbignLScsIEBhbGxvd2VkUHJlZml4ZXMpIC4gIi50aW1lc3RhbXAiOwogbXkgJGJ1aWxk
VGltZXN0YW1wQWdlID0gLU0gJGJ1aWxkVGltZXN0YW1wUGF0aDsKIG15ICRleGVjdXRhYmxlUGF0
aEFnZSA9IC1NICRleGVjdXRhYmxlUGF0aDsKK215ICRzY3JpcHRBZ2UgPSAtTSAkMDsKKworbXkg
JHBhdHRlcm4gPSAiXigiIC4gam9pbignfCcsIEBhbGxvd2VkUHJlZml4ZXMpIC4gIikiOwogCiBt
eSAkc2F3RXJyb3IgPSAwOwogCi1pZiAoIWRlZmluZWQgJGV4ZWN1dGFibGVQYXRoQWdlIHx8ICFk
ZWZpbmVkICRidWlsZFRpbWVzdGFtcEFnZSB8fCAkZXhlY3V0YWJsZVBhdGhBZ2UgPCAkYnVpbGRU
aW1lc3RhbXBBZ2UpIHsKLSAgICBpZiAoIW9wZW4gTk0sICIobm0gLW0gJyRleGVjdXRhYmxlUGF0
aCcgfCBjKytmaWx0IHwgc2VkICdzL14vU1RET1VUOi8nKSAyPiYxIHwiKSB7CitpZiAoIWRlZmlu
ZWQgJGV4ZWN1dGFibGVQYXRoQWdlIHx8ICFkZWZpbmVkICRidWlsZFRpbWVzdGFtcEFnZSB8fCAk
ZXhlY3V0YWJsZVBhdGhBZ2UgPCAkYnVpbGRUaW1lc3RhbXBBZ2UgfHwgJHNjcmlwdEFnZSA8ICRi
dWlsZFRpbWVzdGFtcEFnZSkgeworICAgIGlmICghb3BlbiBOTSwgIihubSAtVWdqcCAnJGV4ZWN1
dGFibGVQYXRoJyB8IHNlZCAncy9eL1NURE9VVDovJykgMj4mMSB8IikgewogICAgICAgICBwcmlu
dCAiRVJST1I6IENvdWxkIG5vdCBvcGVuICRleGVjdXRhYmxlUGF0aFxuIjsKICAgICAgICAgJHNh
d0Vycm9yID0gMTsKICAgICAgICAgbmV4dDsKICAgICB9Ci0gICAgbXkgQHdlYWtWVGFibGVDbGFz
c2VzID0gKCk7Ci0gICAgbXkgQHdlYWtFeHRlcm5hbFN5bWJvbHMgPSAoKTsKKyAgICBteSBAYmFk
TmFtZXM7CiAgICAgd2hpbGUgKDxOTT4pIHsKICAgICAgICAgaWYgKC9eU1RET1VUOi8pIHsKLSAg
ICAgICAgICAgICMgSWdub3JlIHVuZGVmaW5lZCwgUlRUSSBhbmQgdHlwZWluZm8gc3ltYm9scy4K
LSAgICAgICAgICAgIG5leHQgaWYgL1xidW5kZWZpbmVkXGIvIG9yIC9cYl9fWlRbSVNdLzsKLQot
ICAgICAgICAgICAgaWYgKC93ZWFrIGV4dGVybmFsIHZ0YWJsZSBmb3IgKC4qKSQvKSB7Ci0gICAg
ICAgICAgICAgICAgcHVzaCBAd2Vha1ZUYWJsZUNsYXNzZXMsICQxOwotICAgICAgICAgICAgfSBl
bHNpZiAoL3dlYWsgZXh0ZXJuYWwgKC4qKSQvKSB7Ci0gICAgICAgICAgICAgICAgcHVzaCBAd2Vh
a0V4dGVybmFsU3ltYm9scywgJDE7Ci0gICAgICAgICAgICB9CisgICAgICAgICAgICBuZXh0IHVu
bGVzcyAvXlNURE9VVDpfT0JKQ19DTEFTU19cJF8vOworICAgICAgICAgICAgY2hvbXA7CisgICAg
ICAgICAgICBteSAkY2xhc3NOYW1lID0gc3Vic3RyKCRfLCAyMSk7CisgICAgICAgICAgICBwdXNo
KEBiYWROYW1lcywgJGNsYXNzTmFtZSkgdW5sZXNzICRjbGFzc05hbWUgPX4gLyRwYXR0ZXJuLzsK
ICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIHByaW50IFNUREVSUiBpZiAkXyBuZSAibm06
IG5vIG5hbWUgbGlzdFxuIjsKICAgICAgICAgfQogICAgIH0KICAgICBjbG9zZSBOTTsKIAotICAg
IG15ICRzaG9ydE5hbWUgPSAkZXhlY3V0YWJsZVBhdGg7Ci0gICAgJHNob3J0TmFtZSA9fiBzLy4q
XC8vLzsKKyAgICBpZiAoQGJhZE5hbWVzKSB7CisKKyAgICAgICAgbXkgJHNob3J0TmFtZSA9ICRl
eGVjdXRhYmxlUGF0aDsKKyAgICAgICAgJHNob3J0TmFtZSA9fiBzLy4qXC8vLzsKIAotICAgIGlm
IChAd2Vha1ZUYWJsZUNsYXNzZXMpIHsKLSAgICAgICAgcHJpbnQgIkVSUk9SOiAkc2hvcnROYW1l
IGhhcyBhIHdlYWsgdnRhYmxlIGluIGl0ICgkZXhlY3V0YWJsZVBhdGgpXG4iOwotICAgICAgICBw
cmludCAiRVJST1I6IEZpeCBieSBtYWtpbmcgc3VyZSB0aGUgZmlyc3QgdmlydHVhbCBmdW5jdGlv
biBpbiBlYWNoIG9mIHRoZXNlIGNsYXNzZXMgaXMgbm90IGFuIGlubGluZTpcbiI7Ci0gICAgICAg
IGZvciBteSAkY2xhc3MgKHNvcnQgQHdlYWtWVGFibGVDbGFzc2VzKSB7Ci0gICAgICAgICAgICBw
cmludCAiRVJST1I6IGNsYXNzICRjbGFzc1xuIjsKKyAgICAgICAgcHJpbnQgIkVSUk9SOiAkc2hv
cnROYW1lIGRlZmluZXMgb25lIG9yIG1vcmUgT2JqZWN0aXZlLUMgY2xhc3NlcyB3aXRoIGluYXBw
cm9wcmlhdGUgbmFtZXMuICgkZXhlY3V0YWJsZVBhdGgpXG4iOworICAgICAgICBmb3IgbXkgJGNs
YXNzTmFtZSAoQGJhZE5hbWVzKSB7CisgICAgICAgICAgICBwcmludCAiRVJST1I6IEluYXBwcm9y
aWF0ZSBPYmplY3RpdmUtQyBjbGFzcyBuYW1lOiAkY2xhc3NOYW1lLlxuIjsKICAgICAgICAgfQot
ICAgICAgICAkc2F3RXJyb3IgPSAxOwotICAgIH0KIAotICAgIGlmIChAd2Vha0V4dGVybmFsU3lt
Ym9scykgewotICAgICAgICBwcmludCAiRVJST1I6ICRzaG9ydE5hbWUgaGFzIGEgd2VhayBleHRl
cm5hbCBzeW1ib2wgaW4gaXQgKCRleGVjdXRhYmxlUGF0aClcbiI7Ci0gICAgICAgIHByaW50ICJF
UlJPUjogQSB3ZWFrIGV4dGVybmFsIHN5bWJvbCBpcyBnZW5lcmF0ZWQgd2hlbiBhIHN5bWJvbCBp
cyBkZWZpbmVkIGluIG11bHRpcGxlIGNvbXBpbGF0aW9uIHVuaXRzIGFuZCBpcyBhbHNvIG1hcmtl
ZCBhcyBiZWluZyBleHBvcnRlZCBmcm9tIHRoZSBsaWJyYXJ5LlxuIjsKLSAgICAgICAgcHJpbnQg
IkVSUk9SOiBBIGNvbW1vbiBjYXVzZSBvZiB3ZWFrIGV4dGVybmFsIHN5bWJvbHMgaXMgd2hlbiBh
biBpbmxpbmUgZnVuY3Rpb24gaXMgbGlzdGVkIGluIHRoZSBsaW5rZXIgZXhwb3J0IGZpbGUuXG4i
OwotICAgICAgICBmb3IgbXkgJHN5bWJvbCAoc29ydCBAd2Vha0V4dGVybmFsU3ltYm9scykgewot
ICAgICAgICAgICAgcHJpbnQgIkVSUk9SOiBzeW1ib2wgJHN5bWJvbFxuIjsKKyAgICAgICAgaWYg
KEBhbGxvd2VkUHJlZml4ZXMgPiAxKSB7CisgICAgICAgICAgICBwcmludCAiRVJST1I6IE9iamVj
dGl2ZS1DIGNsYXNzIG5hbWVzIGluICR0YXJnZXQgbXVzdCBoYXZlIG9uZSBvZiB0aGVzZSBwcmVm
aXhlczogIiAuIGpvaW4oIiwgIiwgbWFwKCciJyAuICRfIC4gJyInLCBAYWxsb3dlZFByZWZpeGVz
KSkgLiAiLlxuIjsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHByaW50ICJFUlJPUjog
T2JqZWN0aXZlLUMgY2xhc3MgbmFtZXMgaW4gJHRhcmdldCBtdXN0IGhhdmUgdGhlIHByZWZpeCBc
IiIgLiAkYWxsb3dlZFByZWZpeGVzWzBdIC4gIlwiLiI7CiAgICAgICAgIH0KKwogICAgICAgICAk
c2F3RXJyb3IgPSAxOwogICAgIH0KIH0KQEAgLTEwOSw3ICsxMDEsNiBAQCBpZiAoJHNhd0Vycm9y
IGFuZCAhJGNvdmVyYWdlQnVpbGQpIHsKIH0KIAogdG91Y2goJGJ1aWxkVGltZXN0YW1wUGF0aCk7
Ci0KIGV4aXQgMDsKIAogc3ViIHRvdWNoKCQpCg==
</data>
<flag name="review"
          id="104882"
          type_id="1"
          status="+"
          setter="darin"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="0"
              isprivate="0"
          >
            <attachid>108029</attachid>
            <date>2011-09-20 11:21:44 -0700</date>
            <delta_ts>2011-09-20 11:22:54 -0700</delta_ts>
            <desc>bad attachment</desc>
            <filename>check-for-inappropriate-objc-class-names</filename>
            <type>text/plain</type>
            <size>4551</size>
            <attacher>mitz</attacher>
            
              <data encoding="base64">IyEvdXNyL2Jpbi9wZXJsCgojIENvcHlyaWdodCAoQykgMjAwNiwgMjAwNywgMjAwOCwgMjAxMCBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiMKIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKIyBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
IyBhcmUgbWV0OgojCiMgMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CiMgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4gCiMgMi4gIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CiMgICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKIyAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4gCiMgMy4gIE5laXRoZXIgdGhlIG5hbWUgb2Yg
QXBwbGUgSW5jLiAoIkFwcGxlIikgbm9yIHRoZSBuYW1lcyBvZgojICAgICBpdHMgY29udHJpYnV0
b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCiMg
ICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVy
bWlzc2lvbi4gCiMKIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMg
Q09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQojIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKIyBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBP
U0UgQVJFCiMgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQojIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCiMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOwojIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAojIE9OIEFOWSBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCiMgKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFIE9GCiMgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KCiMgImNoZWNrLWZvci13ZWFrLXZ0YWJsZXMtYW5kLWV4
dGVybmFscyIgc2NyaXB0IGZvciBXZWJLaXQgT3BlbiBTb3VyY2UgUHJvamVjdAoKIyBJbnRlbmRl
ZCB0byBiZSBpbnZva2VkIGZyb20gYW4gWGNvZGUgYnVpbGQgc3RlcCB0byBjaGVjayBpZiB0aGVy
ZSBhcmUKIyBhbnkgd2VhayB2dGFibGVzIG9yIHdlYWsgZXh0ZXJuYWxzIGluIGEgdGFyZ2V0LgoK
dXNlIHdhcm5pbmdzOwp1c2Ugc3RyaWN0OwoKdXNlIEZpbGU6OkJhc2VuYW1lOwoKc3ViIHRvdWNo
KCQpOwoKbXkgJGFyY2ggPSAkRU5WeydDVVJSRU5UX0FSQ0gnfTsKbXkgJGNvbmZpZ3VyYXRpb24g
PSAkRU5WeydDT05GSUdVUkFUSU9OJ307Cm15ICR0YXJnZXQgPSAkRU5WeydUQVJHRVRfTkFNRSd9
OwpteSAkdmFyaWFudCA9ICRFTlZ7J0NVUlJFTlRfVkFSSUFOVCd9OwpteSAkY292ZXJhZ2VCdWls
ZCA9ICRFTlZ7J1dFQktJVF9DT1ZFUkFHRV9CVUlMRCd9OwpteSAkZGVidWdSb290ID0gJEVOVnsn
V0VCS0lUX0RFQlVHX1JPT1QnfTsKCiRhcmNoID0gJEVOVnsnTkFUSVZFX0FSQ0gnfSBpZiAhJGFy
Y2g7ICMgZm9yIFhjb2RlIDIuMSwgd2hpY2ggZG9lcyBub3QgaGF2ZSBDVVJSRU5UX0FSQ0gKJHZh
cmlhbnQgPSAibm9ybWFsIiBpZiAhJHZhcmlhbnQ7ICMgZm9yIFhjb2RlIDIuMSwgd2hpY2ggZG9l
cyBub3QgaGF2ZSBDVVJSRU5UX1ZBUklBTlQKCm15ICRleGVjdXRhYmxlUGF0aCA9ICIkRU5WeydU
QVJHRVRfQlVJTERfRElSJ30vJEVOVnsnRVhFQ1VUQUJMRV9QQVRIJ30iOwoKbXkgJGJ1aWxkVGlt
ZXN0YW1wUGF0aCA9ICRFTlZ7J1RBUkdFVF9URU1QX0RJUid9IC4gIi8iIC4gYmFzZW5hbWUoJDAp
IC4gIi50aW1lc3RhbXAiOwpteSAkYnVpbGRUaW1lc3RhbXBBZ2UgPSAtTSAkYnVpbGRUaW1lc3Rh
bXBQYXRoOwpteSAkZXhlY3V0YWJsZVBhdGhBZ2UgPSAtTSAkZXhlY3V0YWJsZVBhdGg7CgpteSAk
c2F3RXJyb3IgPSAwOwoKaWYgKCFkZWZpbmVkICRleGVjdXRhYmxlUGF0aEFnZSB8fCAhZGVmaW5l
ZCAkYnVpbGRUaW1lc3RhbXBBZ2UgfHwgJGV4ZWN1dGFibGVQYXRoQWdlIDwgJGJ1aWxkVGltZXN0
YW1wQWdlKSB7CiAgICBpZiAoIW9wZW4gTk0sICIobm0gLW0gJyRleGVjdXRhYmxlUGF0aCcgfCBj
KytmaWx0IHwgc2VkICdzL14vU1RET1VUOi8nKSAyPiYxIHwiKSB7CiAgICAgICAgcHJpbnQgIkVS
Uk9SOiBDb3VsZCBub3Qgb3BlbiAkZXhlY3V0YWJsZVBhdGhcbiI7CiAgICAgICAgJHNhd0Vycm9y
ID0gMTsKICAgICAgICBuZXh0OwogICAgfQogICAgbXkgQHdlYWtWVGFibGVDbGFzc2VzID0gKCk7
CiAgICBteSBAd2Vha0V4dGVybmFsU3ltYm9scyA9ICgpOwogICAgd2hpbGUgKDxOTT4pIHsKICAg
ICAgICBpZiAoL15TVERPVVQ6LykgewogICAgICAgICAgICAjIElnbm9yZSB1bmRlZmluZWQsIFJU
VEkgYW5kIHR5cGVpbmZvIHN5bWJvbHMuCiAgICAgICAgICAgIG5leHQgaWYgL1xidW5kZWZpbmVk
XGIvIG9yIC9cYl9fWlRbSVNdLzsKCiAgICAgICAgICAgIGlmICgvd2VhayBleHRlcm5hbCB2dGFi
bGUgZm9yICguKikkLykgewogICAgICAgICAgICAgICAgcHVzaCBAd2Vha1ZUYWJsZUNsYXNzZXMs
ICQxOwogICAgICAgICAgICB9IGVsc2lmICgvd2VhayBleHRlcm5hbCAoLiopJC8pIHsKICAgICAg
ICAgICAgICAgIHB1c2ggQHdlYWtFeHRlcm5hbFN5bWJvbHMsICQxOwogICAgICAgICAgICB9CiAg
ICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgcHJpbnQgU1RERVJSIGlmICRfIG5lICJubTogbm8g
bmFtZSBsaXN0XG4iOwogICAgICAgIH0KICAgIH0KICAgIGNsb3NlIE5NOwoKICAgIG15ICRzaG9y
dE5hbWUgPSAkZXhlY3V0YWJsZVBhdGg7CiAgICAkc2hvcnROYW1lID1+IHMvLipcLy8vOwoKICAg
IGlmIChAd2Vha1ZUYWJsZUNsYXNzZXMpIHsKICAgICAgICBwcmludCAiRVJST1I6ICRzaG9ydE5h
bWUgaGFzIGEgd2VhayB2dGFibGUgaW4gaXQgKCRleGVjdXRhYmxlUGF0aClcbiI7CiAgICAgICAg
cHJpbnQgIkVSUk9SOiBGaXggYnkgbWFraW5nIHN1cmUgdGhlIGZpcnN0IHZpcnR1YWwgZnVuY3Rp
b24gaW4gZWFjaCBvZiB0aGVzZSBjbGFzc2VzIGlzIG5vdCBhbiBpbmxpbmU6XG4iOwogICAgICAg
IGZvciBteSAkY2xhc3MgKHNvcnQgQHdlYWtWVGFibGVDbGFzc2VzKSB7CiAgICAgICAgICAgIHBy
aW50ICJFUlJPUjogY2xhc3MgJGNsYXNzXG4iOwogICAgICAgIH0KICAgICAgICAkc2F3RXJyb3Ig
PSAxOwogICAgfQoKICAgIGlmIChAd2Vha0V4dGVybmFsU3ltYm9scykgewogICAgICAgIHByaW50
ICJFUlJPUjogJHNob3J0TmFtZSBoYXMgYSB3ZWFrIGV4dGVybmFsIHN5bWJvbCBpbiBpdCAoJGV4
ZWN1dGFibGVQYXRoKVxuIjsKICAgICAgICBwcmludCAiRVJST1I6IEEgd2VhayBleHRlcm5hbCBz
eW1ib2wgaXMgZ2VuZXJhdGVkIHdoZW4gYSBzeW1ib2wgaXMgZGVmaW5lZCBpbiBtdWx0aXBsZSBj
b21waWxhdGlvbiB1bml0cyBhbmQgaXMgYWxzbyBtYXJrZWQgYXMgYmVpbmcgZXhwb3J0ZWQgZnJv
bSB0aGUgbGlicmFyeS5cbiI7CiAgICAgICAgcHJpbnQgIkVSUk9SOiBBIGNvbW1vbiBjYXVzZSBv
ZiB3ZWFrIGV4dGVybmFsIHN5bWJvbHMgaXMgd2hlbiBhbiBpbmxpbmUgZnVuY3Rpb24gaXMgbGlz
dGVkIGluIHRoZSBsaW5rZXIgZXhwb3J0IGZpbGUuXG4iOwogICAgICAgIGZvciBteSAkc3ltYm9s
IChzb3J0IEB3ZWFrRXh0ZXJuYWxTeW1ib2xzKSB7CiAgICAgICAgICAgIHByaW50ICJFUlJPUjog
c3ltYm9sICRzeW1ib2xcbiI7CiAgICAgICAgfQogICAgICAgICRzYXdFcnJvciA9IDE7CiAgICB9
Cn0KCmlmICgkc2F3RXJyb3IgYW5kICEkY292ZXJhZ2VCdWlsZCkgewogICAgdW5saW5rICRleGVj
dXRhYmxlUGF0aDsKICAgIGV4aXQgMTsKfQoKdG91Y2goJGJ1aWxkVGltZXN0YW1wUGF0aCk7Cgpl
eGl0IDA7CgpzdWIgdG91Y2goJCkKewogICAgbXkgKCRwYXRoKSA9IEBfOwogICAgb3BlbihUT1VD
SCwgIj4iLCAkcGF0aCkgb3IgZGllICIkISI7CiAgICBjbG9zZShUT1VDSCk7Cn0K
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="0"
              isprivate="0"
          >
            <attachid>108030</attachid>
            <date>2011-09-20 11:23:48 -0700</date>
            <delta_ts>2011-09-20 11:23:48 -0700</delta_ts>
            <desc>check-for-inappropriate-objc-class-names</desc>
            <filename>check-for-inappropriate-objc-class-names</filename>
            <type>text/plain</type>
            <size>3958</size>
            <attacher>mitz</attacher>
            
              <data encoding="base64">IyEvdXNyL2Jpbi9wZXJsCgojIENvcHlyaWdodCAoQykgMjAwNiwgMjAwNywgMjAwOCwgMjAxMCwg
MjAxMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiMKIyBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKIyBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKIyBhcmUgbWV0OgojIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CiMgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgojIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CiMgICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQojICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCiMgCiMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwojIEFORCBBTlkg
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAojIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKIyBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKIyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCiMg
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YKIyBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKIyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgojIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpCiMgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRgojIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
CiMgImNoZWNrLWZvci1pbmFwcHJvcHJpYXRlLW9iamMtY2xhc3MtbmFtZXMiIHNjcmlwdCBmb3Ig
V2ViS2l0IE9wZW4gU291cmNlIFByb2plY3QKCiMgSW50ZW5kZWQgdG8gYmUgaW52b2tlZCBmcm9t
IGFuIFhjb2RlIGJ1aWxkIHN0ZXAgdG8gY2hlY2sgaWYgYSBmcmFtZXdvcmsKIyBkZWZpbmVzIGFu
eSBPYmplY3RpdmUtQyBjbGFzcyB3aG9zZSBuYW1lIGRvZXMgbm90IGhhdmUgb25lIG9mIHRoZSBw
cmVmaXhlcwojIHRoZSBmcmFtZXdvcmsgaXMgYWxsb3dlZCB0byB1c2UuCgp1c2Ugd2FybmluZ3M7
CnVzZSBzdHJpY3Q7Cgp1c2UgRmlsZTo6QmFzZW5hbWU7CgpzdWIgdG91Y2goJCk7CgpteSBAYWxs
b3dlZFByZWZpeGVzID0gQEFSR1Y7CgpkaWUgIk5vIGFsbG93ZWQgcHJlZml4ZXMgcGFzc2VkIG9u
IHRoZSBjb21tYW5kIGxpbmUiIGlmICFAYWxsb3dlZFByZWZpeGVzOwoKbXkgJGFyY2ggPSAkRU5W
eydDVVJSRU5UX0FSQ0gnfTsKbXkgJHRhcmdldCA9ICRFTlZ7J1RBUkdFVF9OQU1FJ307Cm15ICR2
YXJpYW50ID0gJEVOVnsnQ1VSUkVOVF9WQVJJQU5UJ307Cm15ICRjb3ZlcmFnZUJ1aWxkID0gJEVO
VnsnV0VCS0lUX0NPVkVSQUdFX0JVSUxEJ307CgpteSAkZXhlY3V0YWJsZVBhdGggPSAiJEVOVnsn
VEFSR0VUX0JVSUxEX0RJUid9LyRFTlZ7J0VYRUNVVEFCTEVfUEFUSCd9IjsKCm15ICRidWlsZFRp
bWVzdGFtcFBhdGggPSAkRU5WeydUQVJHRVRfVEVNUF9ESVInfSAuICIvIiAuIGJhc2VuYW1lKCQw
KSAuIGpvaW4oJy0nLCBAYWxsb3dlZFByZWZpeGVzKSAuICIudGltZXN0YW1wIjsKbXkgJGJ1aWxk
VGltZXN0YW1wQWdlID0gLU0gJGJ1aWxkVGltZXN0YW1wUGF0aDsKbXkgJGV4ZWN1dGFibGVQYXRo
QWdlID0gLU0gJGV4ZWN1dGFibGVQYXRoOwpteSAkc2NyaXB0QWdlID0gLU0gJDA7CgpteSAkcGF0
dGVybiA9ICJeKCIgLiBqb2luKCd8JywgQGFsbG93ZWRQcmVmaXhlcykgLiAiKSI7CgpteSAkc2F3
RXJyb3IgPSAwOwoKaWYgKCFkZWZpbmVkICRleGVjdXRhYmxlUGF0aEFnZSB8fCAhZGVmaW5lZCAk
YnVpbGRUaW1lc3RhbXBBZ2UgfHwgJGV4ZWN1dGFibGVQYXRoQWdlIDwgJGJ1aWxkVGltZXN0YW1w
QWdlIHx8ICRzY3JpcHRBZ2UgPCAkYnVpbGRUaW1lc3RhbXBBZ2UpIHsKICAgIGlmICghb3BlbiBO
TSwgIihubSAtVWdqcCAnJGV4ZWN1dGFibGVQYXRoJyB8IHNlZCAncy9eL1NURE9VVDovJykgMj4m
MSB8IikgewogICAgICAgIHByaW50ICJFUlJPUjogQ291bGQgbm90IG9wZW4gJGV4ZWN1dGFibGVQ
YXRoXG4iOwogICAgICAgICRzYXdFcnJvciA9IDE7CiAgICAgICAgbmV4dDsKICAgIH0KICAgIG15
IEBiYWROYW1lczsKICAgIHdoaWxlICg8Tk0+KSB7CiAgICAgICAgaWYgKC9eU1RET1VUOi8pIHsK
ICAgICAgICAgICAgbmV4dCB1bmxlc3MgL15TVERPVVQ6X09CSkNfQ0xBU1NfXCRfLzsKICAgICAg
ICAgICAgY2hvbXA7CiAgICAgICAgICAgIG15ICRjbGFzc05hbWUgPSBzdWJzdHIoJF8sIDIxKTsK
ICAgICAgICAgICAgcHVzaChAYmFkTmFtZXMsICRjbGFzc05hbWUpIHVubGVzcyAkY2xhc3NOYW1l
ID1+IC8kcGF0dGVybi87CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgcHJpbnQgU1RERVJS
IGlmICRfIG5lICJubTogbm8gbmFtZSBsaXN0XG4iOwogICAgICAgIH0KICAgIH0KICAgIGNsb3Nl
IE5NOwoKICAgIGlmIChAYmFkTmFtZXMpIHsKCiAgICAgICAgbXkgJHNob3J0TmFtZSA9ICRleGVj
dXRhYmxlUGF0aDsKICAgICAgICAkc2hvcnROYW1lID1+IHMvLipcLy8vOwoKICAgICAgICBwcmlu
dCAiRVJST1I6ICRzaG9ydE5hbWUgZGVmaW5lcyBvbmUgb3IgbW9yZSBPYmplY3RpdmUtQyBjbGFz
c2VzIHdpdGggaW5hcHByb3ByaWF0ZSBuYW1lcy4gKCRleGVjdXRhYmxlUGF0aClcbiI7CiAgICAg
ICAgZm9yIG15ICRjbGFzc05hbWUgKEBiYWROYW1lcykgewogICAgICAgICAgICBwcmludCAiRVJS
T1I6IEluYXBwcm9yaWF0ZSBPYmplY3RpdmUtQyBjbGFzcyBuYW1lOiAkY2xhc3NOYW1lLlxuIjsK
ICAgICAgICB9CgogICAgICAgIGlmIChAYWxsb3dlZFByZWZpeGVzID4gMSkgewogICAgICAgICAg
ICBwcmludCAiRVJST1I6IE9iamVjdGl2ZS1DIGNsYXNzIG5hbWVzIGluICR0YXJnZXQgbXVzdCBo
YXZlIG9uZSBvZiB0aGVzZSBwcmVmaXhlczogIiAuIGpvaW4oIiwgIiwgbWFwKCciJyAuICRfIC4g
JyInLCBAYWxsb3dlZFByZWZpeGVzKSkgLiAiLlxuIjsKICAgICAgICB9IGVsc2UgewogICAgICAg
ICAgICBwcmludCAiRVJST1I6IE9iamVjdGl2ZS1DIGNsYXNzIG5hbWVzIGluICR0YXJnZXQgbXVz
dCBoYXZlIHRoZSBwcmVmaXggXCIiIC4gJGFsbG93ZWRQcmVmaXhlc1swXSAuICJcIi4iOwogICAg
ICAgIH0KCiAgICAgICAgJHNhd0Vycm9yID0gMTsKICAgIH0KfQoKaWYgKCRzYXdFcnJvciBhbmQg
ISRjb3ZlcmFnZUJ1aWxkKSB7CiAgICB1bmxpbmsgJGV4ZWN1dGFibGVQYXRoOwogICAgZXhpdCAx
Owp9Cgp0b3VjaCgkYnVpbGRUaW1lc3RhbXBQYXRoKTsKZXhpdCAwOwoKc3ViIHRvdWNoKCQpCnsK
ICAgIG15ICgkcGF0aCkgPSBAXzsKICAgIG9wZW4oVE9VQ0gsICI+IiwgJHBhdGgpIG9yIGRpZSAi
JCEiOwogICAgY2xvc2UoVE9VQ0gpOwp9Cg==
</data>

          </attachment>
      

    </bug>

</bugzilla>