<?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>180063</bug_id>
          
          <creation_ts>2017-11-27 18:01:51 -0800</creation_ts>
          <short_desc>[CMake] Add script to copy forwarding headers</short_desc>
          <delta_ts>2017-11-30 11:22:21 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Tools / Tests</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>NEW</bug_status>
          <resolution></resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>180064</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Don Olmstead">don.olmstead</reporter>
          <assigned_to name="Don Olmstead">don.olmstead</assigned_to>
          <cc>achristensen</cc>
    
    <cc>annulen</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>fujii</cc>
    
    <cc>lforschler</cc>
    
    <cc>mark.salisbury</cc>
    
    <cc>mcatanzaro</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1375236</commentid>
    <comment_count>0</comment_count>
    <who name="Don Olmstead">don.olmstead</who>
    <bug_when>2017-11-27 18:01:51 -0800</bug_when>
    <thetext>All Apple ports are currently copying headers during the build process. AppleWin and WinCairo follow this convention as well. However GTK and WPE do not follow this. For consistency between the ports copying should be the default.

A macro/function should be created for copying headers into the correct location for the builds.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1375243</commentid>
    <comment_count>1</comment_count>
      <attachid>327722</attachid>
    <who name="Don Olmstead">don.olmstead</who>
    <bug_when>2017-11-27 20:03:12 -0800</bug_when>
    <thetext>Created attachment 327722
[WIP] Patch

Here&apos;s a first stab at copying files within CMake to start a conversation.

This is currently just adding a custom_command for each include file which might not be ideal performance-wise.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1375258</commentid>
    <comment_count>2</comment_count>
    <who name="EWS Watchlist">ews-watchlist</who>
    <bug_when>2017-11-27 22:19:23 -0800</bug_when>
    <thetext>Attachment 327722 did not pass style-queue:


ERROR: Source/cmake/WebKitMacros.cmake:261:  One space between command &quot;endforeach&quot; and its parentheses, should be &quot;endforeach (&quot;  [whitespace/parentheses] [5]
Total errors found: 1 in 2 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1375284</commentid>
    <comment_count>3</comment_count>
    <who name="Konstantin Tokarev">annulen</who>
    <bug_when>2017-11-28 01:40:30 -0800</bug_when>
    <thetext>Copying headers is fundamentally wrong.

If anyone needs separate builds, they should do make install, which will copy public headers, libraries to installation prefix, and can also export cmake targets for use in other projects.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1375285</commentid>
    <comment_count>4</comment_count>
    <who name="Konstantin Tokarev">annulen</who>
    <bug_when>2017-11-28 01:44:01 -0800</bug_when>
    <thetext>If you just want to kill out xcopy, I&apos;m fine with that, but please remove xcopy call first so we don&apos;t have 4th way to make forwarding headers in the tree.

However, I liked a way from https://bugs.webkit.org/show_bug.cgi?id=179814 - script can be easily customized to do copies for AppleWin a don&apos;t do for other ports</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1375398</commentid>
    <comment_count>5</comment_count>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2017-11-28 10:40:52 -0800</bug_when>
    <thetext>(In reply to Konstantin Tokarev from comment #3)
&gt; Copying headers is fundamentally wrong.
&gt; 
&gt; If anyone needs separate builds, they should do make install, which will
&gt; copy public headers, libraries to installation prefix, and can also export
&gt; cmake targets for use in other projects.

Apple has a hard requirement to build WTF with only the WTF directory, build JavaScriptCore with only the JavaScriptCore directory, etc.  Copying headers is necessary and not including directly other Source subdirectories is absolutely necessary.  This will not change.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1375403</commentid>
    <comment_count>6</comment_count>
    <who name="Konstantin Tokarev">annulen</who>
    <bug_when>2017-11-28 10:43:33 -0800</bug_when>
    <thetext>So https://bugs.webkit.org/show_bug.cgi?id=165686 should be reverted?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1375406</commentid>
    <comment_count>7</comment_count>
    <who name="Konstantin Tokarev">annulen</who>
    <bug_when>2017-11-28 10:47:43 -0800</bug_when>
    <thetext>Actually no, it shouldn&apos;t be reverted, just forwarding headers should be made PUBLIC and internal headers PRIVATE</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1375421</commentid>
    <comment_count>8</comment_count>
    <who name="Don Olmstead">don.olmstead</who>
    <bug_when>2017-11-28 11:03:29 -0800</bug_when>
    <thetext>Alex are we in the ballpark with this particular setup? Should it all be in CMake or should there be a script.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1375422</commentid>
    <comment_count>9</comment_count>
      <attachid>327722</attachid>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2017-11-28 11:04:47 -0800</bug_when>
    <thetext>Comment on attachment 327722
[WIP] Patch

I think it needs to not be in CMake.  CMake is only run when a CMakeLists.txt file is touched like when we add or remove a file.  We need the copying to be done whenever a header is touched.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1375429</commentid>
    <comment_count>10</comment_count>
    <who name="Konstantin Tokarev">annulen</who>
    <bug_when>2017-11-28 11:13:31 -0800</bug_when>
    <thetext>It needs to be a custom target or custom command, preferredly separate command for each header which has that header as input and forwarding header as output. In this case, only changed headers will be processed in the incremental build. Implementation language is less important, though me personally would prefer real script instead of cmake -E</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1375990</commentid>
    <comment_count>11</comment_count>
    <who name="Don Olmstead">don.olmstead</who>
    <bug_when>2017-11-29 13:16:27 -0800</bug_when>
    <thetext>So I&apos;m of the opinion that we should try and match what XCode is up to as closely as possible.

It appears there are two paths here. With WTF and PAL there&apos;s an rsync style step while with the other projects the copying appears to be brought in through Xcode through a section PBXHeadersBuildPhase.

I&apos;m thinking of doing a python script and have it behave similarly to the generate-bindings script. So there would be a tmp file that contains the list of headers. This file would get read and then we could use filecmp to get a list of files that have changed. Then copy those all.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1376076</commentid>
    <comment_count>12</comment_count>
    <who name="Konstantin Tokarev">annulen</who>
    <bug_when>2017-11-29 15:45:49 -0800</bug_when>
    <thetext>&gt;I&apos;m thinking of doing a python script and have it behave similarly to the generate-bindings script. So there would be a tmp file that contains the list of headers. This file would get read and then we could use filecmp to get a list of files that have changed. Then copy those all.

This solution is overcomplicated. What should be done is just a cycle iterating over all header files to be copied, that does add_custom_command() for each header with output being file in ForwardingHeaders. 

Like

# Collect *.h files to copy
foreach (directory ${JavaScriptCore_FORWARDING_HEADERS_DIRECTORIES})
    file(GLOB _headers &quot;${JAVASCRIPTCORE_DIR}/${_directory}/*.h&quot;)
    list(APPEND JavaScriptCore_FORWARDED_HEADERS ${_headers})
    unset(_headers)
endforeach ()

# Create targets
foreach (header ${JavaScriptCore_FORWARDED_HEADERS})
    get_filename_component(_header_filename ${header} NAME)
    set(_fwd_header &quot;${DERIVED_SOURCES_DIR}/ForwardingHeaders/JavaScriptCore/${_header_filename}&quot;)
    add_cusom_command(OUTPUT ${_fwd_header}
        DEPENDS ${header}
        COMMAND ${CMAKE_COMMAND} -E copy_if_different ${header} ${_fwd_header}
        VERBATIM
    )
endforeach ()</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1376077</commentid>
    <comment_count>13</comment_count>
    <who name="Konstantin Tokarev">annulen</who>
    <bug_when>2017-11-29 15:48:12 -0800</bug_when>
    <thetext>You still can use a helper script instead of copy_if_different, but it can be useful for customization of process, e.g. it could create shallow forwarding headers for ports which don&apos;t need copying headers, or create symlinks instead of copies when OS allows that.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1376079</commentid>
    <comment_count>14</comment_count>
    <who name="Konstantin Tokarev">annulen</who>
    <bug_when>2017-11-29 15:53:13 -0800</bug_when>
    <thetext>Note that binding generation is more complicated out of necessity: idl files depend on each other and nobody implemented proper dependency extraction for them. If that was done it would be also possible to process them as separate makefile targets, increasing overall parallelism and avoiding a lot of excessive work.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1376092</commentid>
    <comment_count>15</comment_count>
      <attachid>327920</attachid>
    <who name="Mark Salisbury">mark.salisbury</who>
    <bug_when>2017-11-29 16:14:34 -0800</bug_when>
    <thetext>Created attachment 327920
This patch creates forwarding headers that #include the target header.

If it&apos;d be acceptable to have forwarding headers point to the real headers, instead of copying the files, consider this patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1376103</commentid>
    <comment_count>16</comment_count>
    <who name="Konstantin Tokarev">annulen</who>
    <bug_when>2017-11-29 16:32:53 -0800</bug_when>
    <thetext>I think that making forward headers that point to original ones is not only acceptable, but even preferred solution for ports which are always built as a single project and so don&apos;t have a requirement to copy headers. However, there is also opinion that it&apos;s better to standardize on one kludgy way of doing things than use different approaches in different ports.

However now I think that whatever paths we take, it&apos;s really neccessary to create separate makefile rules for each header, so only modified files are processed in incremental builds. This means that globs should be resolved on cmake side, and add_custom_command called for each header, possibly invoking script inside</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1376420</commentid>
    <comment_count>17</comment_count>
    <who name="Michael Catanzaro">mcatanzaro</who>
    <bug_when>2017-11-30 11:22:21 -0800</bug_when>
    <thetext>(In reply to Konstantin Tokarev from comment #16)
&gt; I think that making forward headers that point to original ones is not only
&gt; acceptable, but even preferred solution for ports which are always built as
&gt; a single project and so don&apos;t have a requirement to copy headers. However,
&gt; there is also opinion that it&apos;s better to standardize on one kludgy way of
&gt; doing things than use different approaches in different ports.

Yeah, agreed on both counts. I don&apos;t have a strong opinion about this, but Apple has a hard requirement to copy, and other ports don&apos;t really care either way, so copying would certainly reduce the difference between ports.

However, if we go the copying route, then I suggest tightening up our include directories. Don has suggested on IRC that if forwarding headers are copied, only the forwarding header directories would need to be PUBLIC include directories; the rest can be PRIVATE. That would probably fix Mark&apos;s build problem, or at least be a step in the right direction.

&gt; However now I think that whatever paths we take, it&apos;s really neccessary to
&gt; create separate makefile rules for each header, so only modified files are
&gt; processed in incremental builds. This means that globs should be resolved on
&gt; cmake side, and add_custom_command called for each header, possibly invoking
&gt; script inside

Makes sense.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>327722</attachid>
            <date>2017-11-27 20:03:12 -0800</date>
            <delta_ts>2017-11-27 20:03:12 -0800</delta_ts>
            <desc>[WIP] Patch</desc>
            <filename>bug-180063.diff</filename>
            <type>text/plain</type>
            <size>2599</size>
            <attacher name="Don Olmstead">don.olmstead</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0NoYW5nZUxvZyBiL0NoYW5nZUxvZwppbmRleCA5MDEzOWI0OGQxMS4uOWE1
N2FiNzdmODkgMTAwNjQ0Ci0tLSBhL0NoYW5nZUxvZworKysgYi9DaGFuZ2VMb2cKQEAgLTEsMyAr
MSwxMiBAQAorMjAxNy0xMS0yNyAgRG9uIE9sbXN0ZWFkICA8ZG9uLm9sbXN0ZWFkQHNvbnkuY29t
PgorCisgICAgICAgIFtDTWFrZV0gQWRkIG1hY3JvIHRvIGNvcHkgZm9yd2FyZGluZyBoZWFkZXJz
CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xODAwNjMK
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIFNvdXJj
ZS9jbWFrZS9XZWJLaXRNYWNyb3MuY21ha2U6CisKIDIwMTctMTEtMjcgIERvbiBPbG1zdGVhZCAg
PGRvbi5vbG1zdGVhZEBzb255LmNvbT4KIAogICAgICAgICBbQ01ha2VdW1dpbl0gQ29uZGl0aW9u
YWxseSBzZWxlY3QgRExMIENSVCBvciBzdGF0aWMgQ1JUCmRpZmYgLS1naXQgYS9Tb3VyY2UvY21h
a2UvV2ViS2l0TWFjcm9zLmNtYWtlIGIvU291cmNlL2NtYWtlL1dlYktpdE1hY3Jvcy5jbWFrZQpp
bmRleCBmYTMyZmU4ZTRlNC4uMTU4NWNhZWJiYzUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9jbWFrZS9X
ZWJLaXRNYWNyb3MuY21ha2UKKysrIGIvU291cmNlL2NtYWtlL1dlYktpdE1hY3Jvcy5jbWFrZQpA
QCAtMjE1LDYgKzIxNSw1MiBAQCBtYWNybyhXRUJLSVRfQ1JFQVRFX0ZPUldBUkRJTkdfSEVBREVS
UyBfZnJhbWV3b3JrKQogICAgIGVuZGlmICgpCiBlbmRtYWNybygpCiAKK21hY3JvKFdFQktJVF9D
T1BZX0ZPUldBUkRJTkdfSEVBREVSUyBfZnJhbWV3b3JrKQorICAgIHNldChfZmlsZV9saXN0KQor
CisgICAgc2V0KF9wcm9jZXNzaW5nX2RpcmVjdG9yaWVzIDApCisgICAgc2V0KF9wcm9jZXNzaW5n
X2ZpbGVzIDApCisgICAgc2V0KF90YXJnZXRfZGlyZWN0b3J5ICIke0ZPUldBUkRJTkdfSEVBREVS
U19ESVJ9LyR7X2ZyYW1ld29ya30iKQorCisgICAgZmlsZShHTE9CIF9maWxlcyAiJHtfdGFyZ2V0
X2RpcmVjdG9yeX0vKi5oIikKKyAgICBmb3JlYWNoIChfZmlsZSAke19maWxlc30pCisgICAgICAg
IGZpbGUoUkVBRCAiJHtfZmlsZX0iIF9jb250ZW50KQorICAgICAgICBzdHJpbmcoUkVHRVggTUFU
Q0ggIl4jaW5jbHVkZSBcIihbXlwiXSopXCIiIF9tYXRjaGVkICR7X2NvbnRlbnR9KQorICAgICAg
ICBpZiAoX21hdGNoZWQgQU5EIE5PVCBFWElTVFMgIiR7Q01BS0VfU09VUkNFX0RJUn0vU291cmNl
LyR7Q01BS0VfTUFUQ0hfMX0iKQorICAgICAgICAgICAgZmlsZShSRU1PVkUgIiR7X2ZpbGV9IikK
KyAgICAgICAgZW5kaWYgKCkKKyAgICBlbmRmb3JlYWNoICgpCisKKyAgICBmb3JlYWNoIChfY3Vy
cmVudEFyZyAke0FSR059KQorICAgICAgICBpZiAoIiR7X2N1cnJlbnRBcmd9IiBTVFJFUVVBTCAi
RElSRUNUT1JJRVMiKQorICAgICAgICAgICAgc2V0KF9wcm9jZXNzaW5nX2RpcmVjdG9yaWVzIDEp
CisgICAgICAgICAgICBzZXQoX3Byb2Nlc3NpbmdfZmlsZXMgMCkKKyAgICAgICAgZWxzZWlmICgi
JHtfY3VycmVudEFyZ30iIFNUUkVRVUFMICJGSUxFUyIpCisgICAgICAgICAgICBzZXQoX3Byb2Nl
c3NpbmdfZGlyZWN0b3JpZXMgMCkKKyAgICAgICAgICAgIHNldChfcHJvY2Vzc2luZ19maWxlcyAx
KQorICAgICAgICBlbHNlaWYgKF9wcm9jZXNzaW5nX2RpcmVjdG9yaWVzKQorICAgICAgICAgICAg
ZmlsZShHTE9CIF9maWxlcyAiJHtfY3VycmVudEFyZ30vKi5oIikKKyAgICAgICAgICAgIGZvcmVh
Y2ggKF9maWxlICR7X2ZpbGVzfSkKKyAgICAgICAgICAgICAgICBnZXRfZmlsZW5hbWVfY29tcG9u
ZW50KF9hYnNvbHV0ZSAke19maWxlfSBBQlNPTFVURSkKKyAgICAgICAgICAgICAgICBsaXN0KEFQ
UEVORCBfZmlsZV9saXN0ICR7X2Fic29sdXRlfSkKKyAgICAgICAgICAgIGVuZGZvcmVhY2ggKCkK
KyAgICAgICAgZWxzZWlmIChfcHJvY2Vzc2luZ19maWxlcykKKyAgICAgICAgICAgIGdldF9maWxl
bmFtZV9jb21wb25lbnQoX2Fic29sdXRlICR7X2N1cnJlbnRBcmd9IEFCU09MVVRFKQorICAgICAg
ICAgICAgbGlzdChBUFBFTkQgX2ZpbGVfbGlzdCAke19hYnNvbHV0ZX0pCisgICAgICAgIGVuZGlm
ICgpCisgICAgZW5kZm9yZWFjaCAoKQorCisgICAgZm9yZWFjaCAoX2ZpbGUgJHtfZmlsZV9saXN0
fSkKKyAgICAgICAgZ2V0X2ZpbGVuYW1lX2NvbXBvbmVudChfbmFtZSAiJHtfZmlsZX0iIE5BTUUp
CisgICAgICAgIGFkZF9jdXN0b21fY29tbWFuZCgKKyAgICAgICAgICAgIFRBUkdFVCAke19mcmFt
ZXdvcmt9CisgICAgICAgICAgICBQT1NUX0JVSUxECisgICAgICAgICAgICBNQUlOX0RFUEVOREVO
Q1kgJHtfZmlsZX0KKyAgICAgICAgICAgIENPTU1BTkQgJHtDTUFLRV9DT01NQU5EfSAtRSBjb3B5
X2lmX2RpZmZlcmVudCAke19maWxlfSAke190YXJnZXRfZGlyZWN0b3J5fQorICAgICAgICApCisg
ICAgZW5kZm9yZWFjaCgpCitlbmRtYWNybygpCisKICMgSGVscGVyIG1hY3JvcyBmb3IgZGVidWdn
aW5nIENNYWtlIHByb2JsZW1zLgogbWFjcm8oV0VCS0lUX0RFQlVHX0RVTVBfQ09NTUFORFMpCiAg
ICAgc2V0KENNQUtFX1ZFUkJPU0VfTUFLRUZJTEUgT04pCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>327920</attachid>
            <date>2017-11-29 16:14:34 -0800</date>
            <delta_ts>2017-11-29 16:14:34 -0800</delta_ts>
            <desc>This patch creates forwarding headers that #include the target header.</desc>
            <filename>0001-Win-forwarding-headers-should-not-be-copies.patch</filename>
            <type>text/plain</type>
            <size>7535</size>
            <attacher name="Mark Salisbury">mark.salisbury</attacher>
            
              <data encoding="base64">RnJvbSAzZDRlYjUwM2Q3N2FiNmVlMWNiNmZiNTlmODlkYWYyMjc5NzkzNzAzIE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBNYXJrIFNhbGlzYnVyeSA8bWFyay5zYWxpc2J1cnlAaHAuY29t
PgpEYXRlOiBGcmksIDE3IE5vdiAyMDE3IDA5OjU2OjQwICswOTAwClN1YmplY3Q6IFtQQVRDSF0g
W1dpbl0gZm9yd2FyZGluZyBoZWFkZXJzIHNob3VsZCBub3QgYmUgY29waWVzCgpGb3J3YXJkaW5n
IGhlYWRlcnMgY3JlYXRlZCBieSBKYXZhU2NyaXB0Q29yZSBhcmUgY3VycmVudGx5IGNvcGllcwpv
ZiBmaWxlcywgbm90IGZpbGVzIHdoaWNoIGhhdmUgYSAjaW5jbHVkZSBwYXRoIHRvIHRoZSByZWFs
IGhlYWRlciBmaWxlLgoKVGhlIHByb2JsZW0gd2l0aCB0aGlzIGFwcHJvYWNoIGlzIHRoYXQgaWYg
dGhlIHNhbWUgZmlsZSBlbmRzIHVwIGJlaW5nCmluY2x1ZGVkIHR3aWNlLCBidXQgYXQgZGlmZmVy
ZW50IHBhdGhzLCB0aGUgI3ByYWdtYSBvbmNlIGRvZXMgbm90aGluZwphbmQgY29tcGlsZSBlcnJv
cnMgb2NjdXIgZnJvbSBtdWx0aXBseSBkZWZpbmVkIHN5bWJvbHMuCgpTb3VyY2UvV2ViS2l0L1Nj
cmlwdHMvZ2VuZXJhdGUtZm9yd2FyZGluZy1oZWFkZXJzLnBsIHVzZXMgdGhlIGFwcHJvYWNoCm9m
IHNlYXJjaGluZyBhbiBhcmVhIG9mIGNvZGUgdG8gZGlzY292ZXIgd2hpY2ggZm9yd2FyZGluZyBo
ZWFkZXJzCmFyZSBuZWVkZWQuICBXaGVuIGl0J3MganVzdCBzZWFyY2hpbmcgU291cmNlL1dlYktp
dCwgdGhhdCdzIG5vdCB0b28gYmFkLgpTZWFyY2hpbmcgU291cmNlL1dlYkNvcmUgb3IgSmF2YVNj
cmlwdENvcmUgaXMgYSBsb3QgbW9yZSBmaWxlcyB0byBzZWFyY2guCgpTb3VyY2UvSmF2YVNjcmlw
dENvcmUvU2NyaXB0cy9tYWtlLWZvcndhcmRpbmctaGVhZGVycy5wbCBjcmVhdGVzCmZvcndhcmRp
bmcgaGVhZGVycyBmb3IgYWxsIC5oIGZpbGVzIGluIEphdmFTY3JpcHRDb3JlLCBtYXRjaGluZyB0
aGUKeGNvcHkgYmVoYXZpb3IgcHJldmlvdXNseSBpbiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvUGxh
dGZvcm1XaW4uY21ha2UuCgpDdXJyZW50bHkgRm9yd2FyZGluZ0hlYWRlcnMgaXMgdGhlIGZpcnN0
IHNlYXJjaCBwYXRoIHdoZW4gYnVpbGRpbmcKV2ViQ29yZS4gIFdoZW4gYSByZWxhdGl2ZSBwYXRo
IGluIGEgZm9yd2FyZGluZyBoZWFkZXIgbWF0Y2hlcyB0aGUgcGF0aAp0byB0aGUgZm9yd2FyZGlu
ZyBoZWFkZXIgaXRzZWxmLCB0aGlzIGNhdXNlcyBpbmZpbml0ZSBoZWFkZXIgcmVjdXJzaW9uLgpG
b3J3YXJkaW5nSGVhZGVycyBjYW4gZWl0aGVyIGJlIG1vdmVkIHRvIHRoZSBlbmQgb2YgdGhlIHNl
YXJjaCBwYXRoIG9yCmdlbmVyYXRlZCBmb3J3YXJkaW5nIGhlYWRlcnMgY2FuIHNwZWNpZnkgdGhl
IGZ1bGwgcGF0aC4gSSd2ZSBvcHRlZCB0bwpkbyB0aGUgbGF0dGVyLgotLS0KIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9DaGFuZ2VMb2cgICAgICAgICAgICAgICAgICAgIHwgIDcgKysrKysKIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9QbGF0Zm9ybVdpbi5jbWFrZSAgICAgICAgICAgIHwgMTEgKysrKy0t
LQogLi4uL1NjcmlwdHMvbWFrZS1mb3J3YXJkaW5nLWhlYWRlcnMucGwgICAgICAgICAgICAgfCAz
NiArKysrKysrKysrKysrKysrKysrKysrCiAuLi4vV2ViS2l0L1NjcmlwdHMvZ2VuZXJhdGUtZm9y
d2FyZGluZy1oZWFkZXJzLnBsICB8ICA1ICsrLQogNCBmaWxlcyBjaGFuZ2VkLCA1MSBpbnNlcnRp
b25zKCspLCA4IGRlbGV0aW9ucygtKQogY3JlYXRlIG1vZGUgMTAwNjQ0IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9TY3JpcHRzL21ha2UtZm9yd2FyZGluZy1oZWFkZXJzLnBsCgpkaWZmIC0tZ2l0IGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9D
aGFuZ2VMb2cKaW5kZXggZTgxOGZmZWFiMWEuLjVmNjNmMzg5YzQyIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9D
aGFuZ2VMb2cKQEAgLTEsMyArMSwxMCBAQAorMjAxNy0xMS0xNyAgTWFyayBTYWxpc2J1cnkgIDxt
YXJrLnNhbGlzYnVyeUBocC5jb20+CisKKyAgICAgICAgW1dpbl0gZm9yd2FyZGluZyBoZWFkZXJz
IHNob3VsZCBub3QgYmUgY29waWVzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD0xNzk4MTQKKworICAgICAgICBSZXZpZXdlZCBieSBLb25zdGFudGluIFRv
a2FyZXYuCisKIDIwMTctMTEtMTUgIFJ5YW4gSGFkZGFkICA8cnlhbmhhZGRhZEBhcHBsZS5jb20+
CiAKICAgICAgICAgVW5yZXZpZXdlZCwgcm9sbGluZyBvdXQgcjIyNDg2My4KZGlmZiAtLWdpdCBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9QbGF0Zm9ybVdpbi5jbWFrZSBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9QbGF0Zm9ybVdpbi5jbWFrZQppbmRleCBiMzQ4ZWFlYWZiYS4uZmQyNzJlNDkwOWEg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9QbGF0Zm9ybVdpbi5jbWFrZQorKysg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvUGxhdGZvcm1XaW4uY21ha2UKQEAgLTM0LDE1ICszNCwx
NiBAQCBmaWxlKENPUFkKICkKIAogZmlsZShNQUtFX0RJUkVDVE9SWSAke0ZPUldBUkRJTkdfSEVB
REVSU19ESVJ9L0phdmFTY3JpcHRDb3JlKQotCiBzZXQoSmF2YVNjcmlwdENvcmVfUFJFX0JVSUxE
X0NPTU1BTkQgIiR7Q01BS0VfQklOQVJZX0RJUn0vRGVyaXZlZFNvdXJjZXMvSmF2YVNjcmlwdENv
cmUvcHJlQnVpbGQuY21kIikKIGZpbGUoUkVNT1ZFICIke0phdmFTY3JpcHRDb3JlX1BSRV9CVUlM
RF9DT01NQU5EfSIpCiBmb3JlYWNoIChfZGlyZWN0b3J5ICR7SmF2YVNjcmlwdENvcmVfRk9SV0FS
RElOR19IRUFERVJTX0RJUkVDVE9SSUVTfSkKLSAgICBmaWxlKEFQUEVORCAiJHtKYXZhU2NyaXB0
Q29yZV9QUkVfQlVJTERfQ09NTUFORH0iICJAeGNvcHkgL3kgL2QgL2YgXCIke0pBVkFTQ1JJUFRD
T1JFX0RJUn0vJHtfZGlyZWN0b3J5fS8qLmhcIiBcIiR7Rk9SV0FSRElOR19IRUFERVJTX0RJUn0v
SmF2YVNjcmlwdENvcmVcIiA+bnVsIDI+bnVsXG4iKQorICAgIGZpbGUoQVBQRU5EICIke0phdmFT
Y3JpcHRDb3JlX1BSRV9CVUlMRF9DT01NQU5EfSIgInBlcmwgJHtKQVZBU0NSSVBUQ09SRV9ESVJ9
L1NjcmlwdHMvbWFrZS1mb3J3YXJkaW5nLWhlYWRlcnMucGwgLS1zZWFyY2gtcGF0aD1cIiR7SkFW
QVNDUklQVENPUkVfRElSfS8ke19kaXJlY3Rvcnl9LyouaFwiIC0taW5jbHVkZS1wYXRoPVwiJHtK
QVZBU0NSSVBUQ09SRV9ESVJ9LyR7X2RpcmVjdG9yeX1cIiAtLWZvcndhcmRpbmctZGlyPVwiJHtG
T1JXQVJESU5HX0hFQURFUlNfRElSfS9KYXZhU2NyaXB0Q29yZVwiXG4iKQorICAgIGZpbGUoQVBQ
RU5EICIke0phdmFTY3JpcHRDb3JlX1BSRV9CVUlMRF9DT01NQU5EfSIgImlmICVlcnJvcmxldmVs
JSBORVEgMCBleGl0IC9iIDFcbiIpCiBlbmRmb3JlYWNoICgpCi0KIHNldChKYXZhU2NyaXB0Q29y
ZV9QT1NUX0JVSUxEX0NPTU1BTkQgIiR7Q01BS0VfQklOQVJZX0RJUn0vRGVyaXZlZFNvdXJjZXMv
SmF2YVNjcmlwdENvcmUvcG9zdEJ1aWxkLmNtZCIpCi1maWxlKFdSSVRFICIke0phdmFTY3JpcHRD
b3JlX1BPU1RfQlVJTERfQ09NTUFORH0iICJAeGNvcHkgL3kgL2QgL2YgXCIke0RFUklWRURfU09V
UkNFU19ESVJ9L0phdmFTY3JpcHRDb3JlLyouaFwiIFwiJHtGT1JXQVJESU5HX0hFQURFUlNfRElS
fS9KYXZhU2NyaXB0Q29yZVwiID5udWwgMj5udWxcbiIpCi1maWxlKEFQUEVORCAiJHtKYXZhU2Ny
aXB0Q29yZV9QT1NUX0JVSUxEX0NPTU1BTkR9IiAiQHhjb3B5IC95IC9kIC9mIFwiJHtERVJJVkVE
X1NPVVJDRVNfRElSfS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3IvKi5oXCIgXCIke0ZPUldBUkRJ
TkdfSEVBREVSU19ESVJ9L0phdmFTY3JpcHRDb3JlXCIgPm51bCAyPm51bFxuIikKK2ZpbGUoV1JJ
VEUgIiR7SmF2YVNjcmlwdENvcmVfUE9TVF9CVUlMRF9DT01NQU5EfSIgInBlcmwgJHtKQVZBU0NS
SVBUQ09SRV9ESVJ9L1NjcmlwdHMvbWFrZS1mb3J3YXJkaW5nLWhlYWRlcnMucGwgLS1zZWFyY2gt
cGF0aD1cIiR7REVSSVZFRF9TT1VSQ0VTX0RJUn0vSmF2YVNjcmlwdENvcmUvKi5oXCIgLS1pbmNs
dWRlLXBhdGg9XCIke0RFUklWRURfU09VUkNFU19ESVJ9L0phdmFTY3JpcHRDb3JlXCIgLS1mb3J3
YXJkaW5nLWRpcj1cIiR7Rk9SV0FSRElOR19IRUFERVJTX0RJUn0vSmF2YVNjcmlwdENvcmVcIlxu
IikKK2ZpbGUoQVBQRU5EICIke0phdmFTY3JpcHRDb3JlX1BPU1RfQlVJTERfQ09NTUFORH0iICJp
ZiAlZXJyb3JsZXZlbCUgTkVRIDAgZXhpdCAvYiAxXG4iKQorZmlsZShBUFBFTkQgIiR7SmF2YVNj
cmlwdENvcmVfUE9TVF9CVUlMRF9DT01NQU5EfSIgInBlcmwgJHtKQVZBU0NSSVBUQ09SRV9ESVJ9
L1NjcmlwdHMvbWFrZS1mb3J3YXJkaW5nLWhlYWRlcnMucGwgLS1zZWFyY2gtcGF0aD1cIiR7REVS
SVZFRF9TT1VSQ0VTX0RJUn0vSmF2YVNjcmlwdENvcmUvaW5zcGVjdG9yLyouaFwiIC0taW5jbHVk
ZS1wYXRoPVwiJHtERVJJVkVEX1NPVVJDRVNfRElSfS9KYXZhU2NyaXB0Q29yZS9pbnNwZWN0b3Jc
IiAtLWZvcndhcmRpbmctZGlyPVwiJHtGT1JXQVJESU5HX0hFQURFUlNfRElSfS9KYXZhU2NyaXB0
Q29yZVwiXG4iKQorZmlsZShBUFBFTkQgIiR7SmF2YVNjcmlwdENvcmVfUE9TVF9CVUlMRF9DT01N
QU5EfSIgImlmICVlcnJvcmxldmVsJSBORVEgMCBleGl0IC9iIDFcbiIpCiAKIHNldChKYXZhU2Ny
aXB0Q29yZV9PVVRQVVRfTkFNRSBKYXZhU2NyaXB0Q29yZSR7REVCVUdfU1VGRklYfSkKZGlmZiAt
LWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9TY3JpcHRzL21ha2UtZm9yd2FyZGluZy1oZWFk
ZXJzLnBsIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL1NjcmlwdHMvbWFrZS1mb3J3YXJkaW5nLWhl
YWRlcnMucGwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLjk1MWZmYjli
OGRhCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL1NjcmlwdHMvbWFr
ZS1mb3J3YXJkaW5nLWhlYWRlcnMucGwKQEAgLTAsMCArMSwzNiBAQAordXNlIHN0cmljdDsKK3Vz
ZSB3YXJuaW5nczsKKwordXNlIEZpbGU6OkJhc2VuYW1lOwordXNlIEZpbGU6OlNwZWM7Cit1c2Ug
R2V0b3B0OjpMb25nOworCitteSAkc2VhcmNoUGF0aDsKK215ICRpbmNsdWRlUGF0aDsKK215ICRm
b3J3YXJkaW5nRGlyOworCitteSAlb3B0aW9ucyA9ICgKKyAgICAnc2VhcmNoLXBhdGg9cycgPT4g
XCRzZWFyY2hQYXRoLAorICAgICdpbmNsdWRlLXBhdGg9cycgPT4gXCRpbmNsdWRlUGF0aCwKKyAg
ICAnZm9yd2FyZGluZy1kaXI9cycgPT4gXCRmb3J3YXJkaW5nRGlyLAorKTsKK0dldE9wdGlvbnMg
KCVvcHRpb25zKTsKKworbXkgQGhlYWRlcnMgPSBnbG9iKCRzZWFyY2hQYXRoKTsKK2ZvcmVhY2gg
bXkgJGhlYWRlciAoQGhlYWRlcnMpIHsKKyAgICBteSAkZmlsZSA9IGJhc2VuYW1lKCRoZWFkZXIp
OworICAgIG15ICRmb3J3YXJkaW5nSGVhZGVyID0gRmlsZTo6U3BlYy0+am9pbigkZm9yd2FyZGlu
Z0RpciwgJGZpbGUpOworICAgIG15ICRmaWxlQ29udGVudCA9ICIjaW5jbHVkZSBcIiRpbmNsdWRl
UGF0aC8kZmlsZVwiIjsKKyAgICBpZiAoLWUgJGZvcndhcmRpbmdIZWFkZXIpIHsKKyAgICAgICAg
b3BlbiAobXkgJGZoLCAnPCcsICRmb3J3YXJkaW5nSGVhZGVyKSBvciBkaWUoIlVuYWJsZSB0byBv
cGVuICRmb3J3YXJkaW5nSGVhZGVyICgkISkiKTsKKyAgICAgICAgbXkgJGV4aXN0aW5nQ29udGVu
dCA9IDwkZmg+OworICAgICAgICBjbG9zZSgkZmgpOworICAgICAgICAkZmlsZUNvbnRlbnQgZXEg
JGV4aXN0aW5nQ29udGVudCBvciBkaWUoIiRmb3J3YXJkaW5nSGVhZGVyIGFscmVhZHkgZXhpc3Rz
IGFuZCBoYXMgY29udGVudDpcbiAgJGV4aXN0aW5nQ29udGVudFxuZXhwZWN0ZWQ6XG4gICRmaWxl
Q29udGVudFxuIik7CisgICAgfQorICAgIGVsc2UgeworICAgICAgICBvcGVuKG15ICRmaCwgJz4n
LCAkZm9yd2FyZGluZ0hlYWRlcik7CisgICAgICAgIHByaW50ICJDcmVhdGluZyBmb3J3YXJkaW5n
IGhlYWRlciAkZm9yd2FyZGluZ0hlYWRlciB3aXRoICNpbmNsdWRlIFwiJGluY2x1ZGVQYXRoLyRm
aWxlXCJcbiI7CisgICAgICAgIHByaW50ICRmaCAkZmlsZUNvbnRlbnQ7CisgICAgICAgIGNsb3Nl
KCRmaCkgb3IgZGllKCJGYWlsZWQgdG8gY2xvc2UgJGZvcndhcmRpbmdIZWFkZXIgKCQhKSIpOwor
ICAgIH0KK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvU2NyaXB0cy9nZW5lcmF0ZS1mb3J3
YXJkaW5nLWhlYWRlcnMucGwgYi9Tb3VyY2UvV2ViS2l0L1NjcmlwdHMvZ2VuZXJhdGUtZm9yd2Fy
ZGluZy1oZWFkZXJzLnBsCmluZGV4IDUwZDA4MjlkZmQ2Li5mNmM4NTcwZmNiNSAxMDA3NTUKLS0t
IGEvU291cmNlL1dlYktpdC9TY3JpcHRzL2dlbmVyYXRlLWZvcndhcmRpbmctaGVhZGVycy5wbAor
KysgYi9Tb3VyY2UvV2ViS2l0L1NjcmlwdHMvZ2VuZXJhdGUtZm9yd2FyZGluZy1oZWFkZXJzLnBs
CkBAIC0xMDcsMTYgKzEwNywxNSBAQCBzdWIgY3JlYXRlRm9yd2FyZGluZ0hlYWRlcnNGb3JGcmFt
ZXdvcmsgewogICAgICAgICB9CiAKICAgICAgICAgbXkgJGZvcndhcmRpbmdIZWFkZXJQYXRoID0g
RmlsZTo6U3BlYy0+Y2F0ZmlsZSgkdGFyZ2V0RGlyZWN0b3J5LCAkaGVhZGVyTmFtZSk7Ci0gICAg
ICAgIG15ICRleHBlY3RlZEluY2x1ZGVTdGF0ZW1lbnQgPSAiI2luY2x1ZGUgXCIkZnJhbWV3b3Jr
LyRoZWFkZXJcIiI7CisgICAgICAgIG15ICRleHBlY3RlZEluY2x1ZGVTdGF0ZW1lbnQgPSAiI2lu
Y2x1ZGUgXCIiLkZpbGU6OlNwZWMtPmpvaW4oJHNyY1Jvb3QsICRmcmFtZXdvcmspLiIvJGhlYWRl
clwiIjsKICAgICAgICAgbXkgJGZvdW5kSW5jbHVkZVN0YXRlbWVudCA9IDA7CiAKICAgICAgICAg
JGZvdW5kSW5jbHVkZVN0YXRlbWVudCA9IDxFWElTVElOR19IRUFERVI+IGlmIG9wZW4oRVhJU1RJ
TkdfSEVBREVSLCAiPCRmb3J3YXJkaW5nSGVhZGVyUGF0aCIpOwotICAgICAgICBjaG9tcCgkZm91
bmRJbmNsdWRlU3RhdGVtZW50KTsKIAogICAgICAgICBpZiAoISAkZm91bmRJbmNsdWRlU3RhdGVt
ZW50IHx8ICRmb3VuZEluY2x1ZGVTdGF0ZW1lbnQgbmUgJGV4cGVjdGVkSW5jbHVkZVN0YXRlbWVu
dCkgewogICAgICAgICAgICAgcHJpbnQgIltDcmVhdGluZyBmb3J3YXJkaW5nIGhlYWRlciBmb3Ig
JGZyYW1ld29yay8kaGVhZGVyXVxuIiBpZiAkdmVyYm9zZTsKICAgICAgICAgICAgIG9wZW4oRk9S
V0FSRElOR19IRUFERVIsICI+JGZvcndhcmRpbmdIZWFkZXJQYXRoIikgb3IgZGllICJDb3VsZCBu
b3Qgb3BlbiAkZm9yd2FyZGluZ0hlYWRlclBhdGguIjsKLSAgICAgICAgICAgIHByaW50IEZPUldB
UkRJTkdfSEVBREVSICIkZXhwZWN0ZWRJbmNsdWRlU3RhdGVtZW50XG4iOworICAgICAgICAgICAg
cHJpbnQgRk9SV0FSRElOR19IRUFERVIgJGV4cGVjdGVkSW5jbHVkZVN0YXRlbWVudDsKICAgICAg
ICAgICAgIGNsb3NlKEZPUldBUkRJTkdfSEVBREVSKTsKICAgICAgICAgfQogCi0tIAoyLjE0LjEu
d2luZG93cy4xCgo=
</data>

          </attachment>
      

    </bug>

</bugzilla>