<?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>22008</bug_id>
          
          <creation_ts>2008-10-31 13:04:45 -0700</creation_ts>
          <short_desc>Add windows support for selecting multiple files in a file upload control</short_desc>
          <delta_ts>2008-10-31 16:26:27 -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>Forms</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>PC</rep_platform>
          <op_sys>OS X 10.5</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Adele Peterson">adele</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>97291</commentid>
    <comment_count>0</comment_count>
    <who name="Adele Peterson">adele</who>
    <bug_when>2008-10-31 13:04:45 -0700</bug_when>
    <thetext>Add windows support for selecting multiple files in a file upload control</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>97292</commentid>
    <comment_count>1</comment_count>
      <attachid>24808</attachid>
    <who name="Adele Peterson">adele</who>
    <bug_when>2008-10-31 13:06:19 -0700</bug_when>
    <thetext>Created attachment 24808
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>97303</commentid>
    <comment_count>2</comment_count>
      <attachid>24808</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2008-10-31 13:54:32 -0700</bug_when>
    <thetext>Comment on attachment 24808
patch

&gt;  PassRefPtr&lt;Icon&gt; Icon::newIconForFiles(const Vector&lt;String&gt;&amp; filenames)

Since this function ignores the argument, you should leave out the argument name in the function definition. That will make it easier if we later turn on the warning for unused parameters.

Since these functions return PassRefPtr, I think they should use the word &quot;create&quot; in their names instead of &quot;new&quot;; but there&apos;s no rush to fix that now.

&gt; +    UINT length = ::GetSystemDirectory(buffer, MAX_PATH);

Is MAX_PATH right here, or should it be MAX_PATH - 1?

&gt; +    _tcsncpy_s(buffer + length, MAX_PATH - length, shell32, shell32Length);

I think this needs to be MAX_PATH - 1 - length to avoid overwriting the end of the buffer. How can we test this edge case?

&gt; +    buffer[length + shell32Length] = 0;

You could _TRUNCATE to take care of this in the tcsncpy_s call.

After considering these last two issues, I think you should use use _tcscat_s, and let it automatically pick up the buffer size. The only downside is that it will have to scan for the terminating null even though you already know exactly where it is, but I think that overall it&apos;s simpler and clearer and safer if you use _tcscat_s in a simpler way.

&gt; +    bool multiFile = fileChooser-&gt;allowsMultipleFiles();
&gt; +    Vector&lt;TCHAR&gt; fileBuf(multiFile ? USHRT_MAX : MAX_PATH);

This code says that you&apos;re actually allocating a vector with 65536 characters in it. Is that really what we want to do? Seems OK, but not great. Also seems like a magic number. I don&apos;t think that using the named constant USHRT_MAX makes this less of a magic number. I think there should be a named constant somewhere above with a comment explaining why it&apos;s big enough. Is there any way to use GetOpenFileName that finds out how big the buffer needs to be?

&gt; +    } // FIXME: Show some sort of error if too many files are selected and the buffer is too small.  For now, this will fail silently.

I think you should give this comment its own line instead of putting it on the end of a line with a brace on it. I also think this issue is so minor we&apos;re unlikely to ever fix it.

r=me as-is, I guess, but how about that tscsat_s thing?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>97319</commentid>
    <comment_count>3</comment_count>
      <attachid>24818</attachid>
    <who name="Adele Peterson">adele</who>
    <bug_when>2008-10-31 15:07:27 -0700</bug_when>
    <thetext>Created attachment 24818
updated patch

uploading an updated patch to make sure this correctly addresses Darin&apos;s concerns.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>97332</commentid>
    <comment_count>4</comment_count>
      <attachid>24818</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2008-10-31 16:17:17 -0700</bug_when>
    <thetext>Comment on attachment 24818
updated patch

&gt; +    if (_tcscat_s(buffer, ARRAYSIZE(buffer), TEXT(&quot;\\shell32.dll&quot;)))

As we discussed in person, you can leave out the ARRAYSIZE here and it will get the size automatically, and you should. Same in the other _tcscat_s call site.

&gt; +// When you call GetOpenFileName, if the size of the buffer is too small,
&gt; +// MSDN says that the first two bytes of the buffer contain the required size for the file selection, in bytes or characters
&gt; +// So we can assume the required size can&apos;t be more than the maximum value for a short.
&gt; +static const unsigned short maxFilePathsListSize = USHRT_MAX;

This should be size_t.

r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>97335</commentid>
    <comment_count>5</comment_count>
    <who name="Adele Peterson">adele</who>
    <bug_when>2008-10-31 16:26:27 -0700</bug_when>
    <thetext>Committed revision 38057.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>24808</attachid>
            <date>2008-10-31 13:06:19 -0700</date>
            <delta_ts>2008-10-31 15:07:27 -0700</delta_ts>
            <desc>patch</desc>
            <filename>patch_10-31-08-upload.txt</filename>
            <type>text/plain</type>
            <size>5677</size>
            <attacher name="Adele Peterson">adele</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiAzODA0NikKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMTMgQEAKKzIwMDgtMTAtMzEgIEFkZWxlIFBldGVyc29uICA8YWRlbGVAYXBwbGUu
Y29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFdl
YkNvcmUgV2luZG93cyBwYXJ0IG9mIGZpeCBmb3IgPHJkYXI6Ly9wcm9ibGVtLzU4MzkyNTY+IEZJ
TEUgQ09OVFJPTDogbXVsdGktZmlsZSB1cGxvYWQuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMjAwOAorCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3Mvd2luL0ljb25XaW4uY3BwOiAoV2ViQ29yZTo6SWNvbjo6bmV3SWNvbkZvckZpbGVzKToKKyAg
ICAgICAgQWRkIGFuIGljb24gZm9yIG11bHRpcGxlIGZpbGVzLgorCiAyMDA4LTEwLTMxICBUaW1v
dGh5IEhhdGNoZXIgIDx0aW1vdGh5QGFwcGxlLmNvbT4KIAogICAgICAgICBBZGQgbWFudWFsIHRl
c3RzIHRoYXQgY2hlY2sgYnJlYWtwb2ludHMgb24gYSBibG9ja2xlc3MgYm9keSBvZiAiZm9yIiBs
b29wcy4KSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ljb25XaW4uY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ljb25XaW4uY3BwCShy
ZXZpc2lvbiAzODAxNikKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ljb25XaW4u
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMywxMCArMjMsMTMgQEAKIAogI2luY2x1ZGUgIkdyYXBo
aWNzQ29udGV4dC5oIgogI2luY2x1ZGUgIlBsYXRmb3JtU3RyaW5nLmgiCisjaW5jbHVkZSA8dGNo
YXIuaD4KICNpbmNsdWRlIDx3aW5kb3dzLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAorc3Rh
dGljIGNvbnN0IGludCBzaGVsbDMyTXVsdGlwbGVGaWxlSWNvbkluZGV4ID0gNTQ7CisKIEljb246
Okljb24oSElDT04gaWNvbikKICAgICA6IG1faEljb24oaWNvbikKIHsKQEAgLTUyLDggKzU1LDE4
IEBAIFBhc3NSZWZQdHI8SWNvbj4gSWNvbjo6bmV3SWNvbkZvckZpbGUoY28KIAogUGFzc1JlZlB0
cjxJY29uPiBJY29uOjpuZXdJY29uRm9yRmlsZXMoY29uc3QgVmVjdG9yPFN0cmluZz4mIGZpbGVu
YW1lcykKIHsKLSAgICAvL0ZJWE1FOiBJbXBsZW1lbnQgdGhpcwotICAgIHJldHVybiAwOworICAg
IExQQ1RTVFIgc2hlbGwzMiA9IF9UKCJcXHNoZWxsMzIuZGxsIik7CisgICAgaW50IHNoZWxsMzJM
ZW5ndGggPSBfdGNzbGVuKHNoZWxsMzIpOworICAgIFRDSEFSIGJ1ZmZlcltNQVhfUEFUSF07Cisg
ICAgVUlOVCBsZW5ndGggPSA6OkdldFN5c3RlbURpcmVjdG9yeShidWZmZXIsIE1BWF9QQVRIKTsK
KyAgICBpZiAoIWxlbmd0aCkKKyAgICAgICAgcmV0dXJuIDA7CisgICAgX3Rjc25jcHlfcyhidWZm
ZXIgKyBsZW5ndGgsIE1BWF9QQVRIIC0gbGVuZ3RoLCBzaGVsbDMyLCBzaGVsbDMyTGVuZ3RoKTsK
KyAgICBidWZmZXJbbGVuZ3RoICsgc2hlbGwzMkxlbmd0aF0gPSAwOworICAgIEhJQ09OIGhJY29u
OworICAgIGlmICghOjpFeHRyYWN0SWNvbkV4KGJ1ZmZlciwgc2hlbGwzMk11bHRpcGxlRmlsZUlj
b25JbmRleCwgMCwgJmhJY29uLCAxKSkKKyAgICAgICAgcmV0dXJuIDA7CisgICAgcmV0dXJuIGFk
b3B0UmVmKG5ldyBJY29uKGhJY29uKSk7CiB9CiAKIHZvaWQgSWNvbjo6cGFpbnQoR3JhcGhpY3ND
b250ZXh0KiBjb250ZXh0LCBjb25zdCBJbnRSZWN0JiByKQpJbmRleDogV2ViS2l0L3dpbi9DaGFu
Z2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L3dpbi9DaGFuZ2VMb2cJKHJldmlzaW9uIDM4MDQ2
KQorKysgV2ViS2l0L3dpbi9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwxMyBA
QAorMjAwOC0xMC0zMSAgQWRlbGUgUGV0ZXJzb24gIDxhZGVsZUBhcHBsZS5jb20+CisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgV2ViS2l0IFdpbmRvd3Mg
cGFydCBvZiBmaXggZm9yIDxyZGFyOi8vcHJvYmxlbS81ODM5MjU2PiBGSUxFIENPTlRST0w6IG11
bHRpLWZpbGUgdXBsb2FkLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MjIwMDgKKyAgICAgICAgCisgICAgICAgICogV2ViQ29yZVN1cHBvcnQvV2ViQ2hy
b21lQ2xpZW50LmNwcDogKFdlYkNocm9tZUNsaWVudDo6cnVuT3BlblBhbmVsKTogCisgICAgICAg
IEFkZCBzdXBwb3J0IGZvciBtdWxpdHBsZSBmaWxlIHNlbGVjdGlvbi4KKwogMjAwOC0xMC0zMSAg
RGFyaW4gQWRsZXIgIDxkYXJpbkBhcHBsZS5jb20+CiAKICAgICAgICAgLSB0cnkgdG8gZml4IGJ1
aWxkCkluZGV4OiBXZWJLaXQvd2luL1dlYkNvcmVTdXBwb3J0L1dlYkNocm9tZUNsaWVudC5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gV2ViS2l0L3dpbi9XZWJDb3JlU3VwcG9ydC9XZWJDaHJvbWVDbGllbnQu
Y3BwCShyZXZpc2lvbiAzODAxNikKKysrIFdlYktpdC93aW4vV2ViQ29yZVN1cHBvcnQvV2ViQ2hy
b21lQ2xpZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjI1LDE1ICs2MjUsMTUgQEAgYm9vbCBX
ZWJDaHJvbWVDbGllbnQ6OnBhaW50Q3VzdG9tU2Nyb2xsQwogCiB2b2lkIFdlYkNocm9tZUNsaWVu
dDo6cnVuT3BlblBhbmVsKEZyYW1lKiwgUGFzc1JlZlB0cjxGaWxlQ2hvb3Nlcj4gcHJwRmlsZUNo
b29zZXIpCiB7Ci0gICAgLy8gRklYTUU6IFN1cHBvcnQgbXVsdGlwbGUgZmlsZXMuCi0KICAgICBS
ZWZQdHI8RmlsZUNob29zZXI+IGZpbGVDaG9vc2VyID0gcHJwRmlsZUNob29zZXI7CiAKICAgICBI
V05EIHZpZXdXaW5kb3c7CiAgICAgaWYgKEZBSUxFRChtX3dlYlZpZXctPnZpZXdXaW5kb3cocmVp
bnRlcnByZXRfY2FzdDxPTEVfSEFORExFKj4oJnZpZXdXaW5kb3cpKSkpCiAgICAgICAgIHJldHVy
bjsKIAotICAgIFRDSEFSIGZpbGVCdWZbTUFYX1BBVEhdOworICAgIGJvb2wgbXVsdGlGaWxlID0g
ZmlsZUNob29zZXItPmFsbG93c011bHRpcGxlRmlsZXMoKTsKKyAgICBWZWN0b3I8VENIQVI+IGZp
bGVCdWYobXVsdGlGaWxlID8gVVNIUlRfTUFYIDogTUFYX1BBVEgpOworCiAgICAgT1BFTkZJTEVO
QU1FIG9mbjsKIAogICAgIG1lbXNldCgmb2ZuLCAwLCBzaXplb2Yob2ZuKSk7CkBAIC02NDYsMTQg
KzY0NiwzOCBAQCB2b2lkIFdlYkNocm9tZUNsaWVudDo6cnVuT3BlblBhbmVsKEZyYW1lCiAgICAg
U3RyaW5nIGFsbEZpbGVzID0gYWxsRmlsZXNUZXh0KCk7CiAgICAgYWxsRmlsZXMuYXBwZW5kKFRF
WFQoIlwwKi4qXDBcMCIpLCA2KTsKICAgICBvZm4ubHBzdHJGaWx0ZXIgPSBhbGxGaWxlcy5jaGFy
YWN0ZXJzV2l0aE51bGxUZXJtaW5hdGlvbigpOwotICAgIG9mbi5scHN0ckZpbGUgPSBmaWxlQnVm
OwotICAgIG9mbi5uTWF4RmlsZSA9IHNpemVvZihmaWxlQnVmKTsKKyAgICBvZm4ubHBzdHJGaWxl
ID0gZmlsZUJ1Zi5kYXRhKCk7CisgICAgb2ZuLm5NYXhGaWxlID0gZmlsZUJ1Zi5zaXplKCk7CiAg
ICAgU3RyaW5nIGRpYWxvZ1RpdGxlID0gdXBsb2FkRmlsZVRleHQoKTsKICAgICBvZm4ubHBzdHJU
aXRsZSA9IGRpYWxvZ1RpdGxlLmNoYXJhY3RlcnNXaXRoTnVsbFRlcm1pbmF0aW9uKCk7Ci0gICAg
b2ZuLkZsYWdzID0gT0ZOX0VOQUJMRVNJWklORyB8IE9GTl9GSUxFTVVTVEVYSVNUIHwgT0ZOX1BB
VEhNVVNURVhJU1Q7Ci0KLSAgICBpZiAoR2V0T3BlbkZpbGVOYW1lKCZvZm4pKQotICAgICAgICBm
aWxlQ2hvb3Nlci0+Y2hvb3NlRmlsZShTdHJpbmcoZmlsZUJ1ZikpOworICAgIG9mbi5GbGFncyA9
IE9GTl9FTkFCTEVTSVpJTkcgfCBPRk5fRklMRU1VU1RFWElTVCB8IE9GTl9QQVRITVVTVEVYSVNU
IHwgT0ZOX0VYUExPUkVSOworICAgIGlmIChtdWx0aUZpbGUpCisgICAgICAgIG9mbi5GbGFncyA9
IG9mbi5GbGFncyB8IE9GTl9BTExPV01VTFRJU0VMRUNUOworCisgICAgaWYgKEdldE9wZW5GaWxl
TmFtZSgmb2ZuKSkgeworICAgICAgICBUQ0hBUiogZmlsZXMgPSBmaWxlQnVmLmRhdGEoKTsKKyAg
ICAgICAgVmVjdG9yPFN0cmluZz4gZmlsZUxpc3Q7CisgICAgICAgIFN0cmluZyBmaWxlKGZpbGVz
KTsKKyAgICAgICAgaWYgKG11bHRpRmlsZSkgeworICAgICAgICAgICAgd2hpbGUgKCFmaWxlLmlz
RW1wdHkoKSkgeworICAgICAgICAgICAgICAgIC8vIFdoZW4gdXNpbmcgdGhlIE9GTl9FWFBMT1JF
UiBmbGFnLCB0aGUgZmlsZSBsaXN0IGlzIG51bGwgZGVsaW1pdGVkLgorICAgICAgICAgICAgICAg
IC8vIFdoZW4geW91IGNyZWF0ZSBhIFN0cmluZyBmcm9tIGEgcHRyIHRvIHRoaXMgbGlzdCwgaXQg
d2lsbCB1c2Ugc3RybGVuIHRvIGxvb2sgZm9yIHRoZSBudWxsIGNoYXJhY3Rlci4KKyAgICAgICAg
ICAgICAgICAvLyBUaGVuIHdlIGZpbmQgdGhlIG5leHQgZmlsZSBwYXRoIHN0cmluZyBieSB1c2lu
ZyB0aGUgbGVuZ3RoIG9mIHRoZSBzdHJpbmcgd2UganVzdCBjcmVhdGVkLgorICAgICAgICAgICAg
ICAgIFRDSEFSKiBuZXh0RmlsZVB0ciA9IGZpbGVzICsgZmlsZS5sZW5ndGgoKSArIDE7CisgICAg
ICAgICAgICAgICAgU3RyaW5nIG5leHRGaWxlKG5leHRGaWxlUHRyKTsKKyAgICAgICAgICAgICAg
ICAvLyBJZiBtdWx0aXBsZSBmaWxlcyBhcmUgc2VsZWN0ZWQsIHRoZXJlIHdpbGwgYmUgYSBkaXJl
Y3RvcnkgbmFtZSBmaXJzdCwgd2hpY2ggd2UgZG9uJ3Qgd2FudCB0byBhZGQgdG8gdGhlIHZlY3Rv
ci4KKyAgICAgICAgICAgICAgICAvLyBXZSBrbm93IGEgc2luZ2xlIGZpbGUgd2FzIHNlbGVjdGVk
IGlmIHRoZXJlIGlzIG9ubHkgb25lIGZpbGVuYW1lIGluIHRoZSBsaXN0LiAgCisgICAgICAgICAg
ICAgICAgLy8gSW4gdGhhdCBjYXNlLCB3ZSBkb24ndCB3YW50IHRvIHNraXAgYWRkaW5nIHRoZSBm
aXJzdCAoYW5kIG9ubHkpIG5hbWUuCisgICAgICAgICAgICAgICAgaWYgKGZpbGVzICE9IGZpbGVC
dWYuZGF0YSgpIHx8IG5leHRGaWxlLmlzRW1wdHkoKSkKKyAgICAgICAgICAgICAgICAgICAgZmls
ZUxpc3QuYXBwZW5kKGZpbGUpOworICAgICAgICAgICAgICAgIGZpbGVzID0gbmV4dEZpbGVQdHI7
CisgICAgICAgICAgICAgICAgZmlsZSA9IG5leHRGaWxlOworICAgICAgICAgICAgfQorICAgICAg
ICB9IGVsc2UKKyAgICAgICAgICAgIGZpbGVMaXN0LmFwcGVuZChmaWxlKTsKKyAgICAgICAgQVNT
RVJUKGZpbGVMaXN0LnNpemUoKSk7CisgICAgICAgIGZpbGVDaG9vc2VyLT5jaG9vc2VGaWxlcyhm
aWxlTGlzdCk7CisgICAgfSAvLyBGSVhNRTogU2hvdyBzb21lIHNvcnQgb2YgZXJyb3IgaWYgdG9v
IG1hbnkgZmlsZXMgYXJlIHNlbGVjdGVkIGFuZCB0aGUgYnVmZmVyIGlzIHRvbyBzbWFsbC4gIEZv
ciBub3csIHRoaXMgd2lsbCBmYWlsIHNpbGVudGx5LgogfQogCiBDT01QdHI8SVdlYlVJRGVsZWdh
dGU+IFdlYkNocm9tZUNsaWVudDo6dWlEZWxlZ2F0ZSgpCg==
</data>
<flag name="review"
          id="11357"
          type_id="1"
          status="+"
          setter="darin"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>24818</attachid>
            <date>2008-10-31 15:07:27 -0700</date>
            <delta_ts>2008-10-31 16:17:17 -0700</delta_ts>
            <desc>updated patch</desc>
            <filename>patch_10-31-08-upload.txt</filename>
            <type>text/plain</type>
            <size>14252</size>
            <attacher name="Adele Peterson">adele</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiAzODA1MikKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMzEgQEAKKzIwMDgtMTAtMzEgIEFkZWxlIFBldGVyc29uICA8YWRlbGVAYXBwbGUu
Y29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IERhcmluIEFkbGVyLgorCisgICAgICAgIFdlYkNv
cmUgV2luZG93cyBwYXJ0IG9mIGZpeCBmb3IgPHJkYXI6Ly9wcm9ibGVtLzU4MzkyNTY+IEZJTEUg
Q09OVFJPTDogbXVsdGktZmlsZSB1cGxvYWQuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0yMjAwOAorCisgICAgICAgICogcGxhdGZvcm0vRmlsZUNob29z
ZXIuY3BwOiAoV2ViQ29yZTo6RmlsZUNob29zZXI6OmNob29zZUljb24pOiBSZW5hbWUgbmV3SWNv
bkZvckZpbGUgYW5kIG5ld0ljb25Gb3JGaWxlcyB0byBjcmVhdGVJY29uRm9yRmlsZSBhbmQgY3Jl
YXRlSWNvbkZvckZpbGVzLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0ljb24uaDogZGl0
dG8uCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZ3RrL0ljb25HdGsuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6SWNvbjo6Y3JlYXRlSWNvbkZvckZpbGUpOiBkaXR0by4KKyAgICAgICAgKFdl
YkNvcmU6Okljb246OmNyZWF0ZUljb25Gb3JGaWxlcyk6IGRpdHRvLgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL21hYy9JY29uTWFjLm1tOgorICAgICAgICAoV2ViQ29yZTo6SWNvbjo6Y3Jl
YXRlSWNvbkZvckZpbGUpOiBkaXR0by4KKyAgICAgICAgKFdlYkNvcmU6Okljb246OmNyZWF0ZUlj
b25Gb3JGaWxlcyk6IGRpdHRvLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3F0L0ljb25R
dC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJY29uOjpjcmVhdGVJY29uRm9yRmlsZSk6IGRpdHRv
LgorICAgICAgICAoV2ViQ29yZTo6SWNvbjo6Y3JlYXRlSWNvbkZvckZpbGVzKTogZGl0dG8uCisg
ICAgICAgICogcGxhdGZvcm0vd3gvVGVtcG9yYXJ5TGlua1N0dWJzLmNwcDoKKyAgICAgICAgKElj
b246OmNyZWF0ZUljb25Gb3JGaWxlKTogZGl0dG8uCisgICAgICAgIChJY29uOjpjcmVhdGVJY29u
Rm9yRmlsZXMpOiBkaXR0by4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy93aW4vSWNvbldp
bi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJY29uOjpjcmVhdGVJY29uRm9yRmlsZSk6IGRpdHRv
LgorICAgICAgICAoV2ViQ29yZTo6SWNvbjo6Y3JlYXRlSWNvbkZvckZpbGVzKTogQWRkIGNyZWF0
aW9uIG9mIGFuIGljb24gZm9yIG11bHRpcGxlIGZpbGVzLgorCisgICAgICAgICogcmVuZGVyaW5n
L1JlbmRlclRoZW1lV2luLmNwcDogKFdlYkNvcmU6OlJlbmRlclRoZW1lV2luOjpwYWludFNlYXJj
aEZpZWxkUmVzdWx0c0RlY29yYXRpb24pOiAgICAgICAgCisgICAgICAgIEltcHJvdmUgaWNvbiBj
cmVhdGlvbiBjb2RlIHRvIG1hdGNoIG5ldyBjb2RlIGluIEljb246OmNyZWF0ZUljb25Gb3JGaWxl
cworICAgICAgICAKIDIwMDgtMTAtMzEgIFRpbW90aHkgSGF0Y2hlciAgPHRpbW90aHlAYXBwbGUu
Y29tPgogCiAgICAgICAgIEFkZCBtYW51YWwgdGVzdHMgdGhhdCBjaGVjayBicmVha3BvaW50cyBv
biBhIGJsb2NrbGVzcyBib2R5IG9mICJmb3IiIGxvb3BzLgpJbmRleDogV2ViQ29yZS9wbGF0Zm9y
bS9GaWxlQ2hvb3Nlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9GaWxlQ2hv
b3Nlci5jcHAJKHJldmlzaW9uIDM4MDE2KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9GaWxlQ2hvb3Nl
ci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTgwLDE0ICs4MCwxNCBAQCB2b2lkIEZpbGVDaG9vc2Vy
OjpjaG9vc2VGaWxlcyhjb25zdCBWZWN0CiAKIFBhc3NSZWZQdHI8SWNvbj4gRmlsZUNob29zZXI6
OmNob29zZUljb24oY29uc3QgU3RyaW5nJiBmaWxlbmFtZSkKIHsKLSAgICByZXR1cm4gSWNvbjo6
bmV3SWNvbkZvckZpbGUoZmlsZW5hbWUpOworICAgIHJldHVybiBJY29uOjpjcmVhdGVJY29uRm9y
RmlsZShmaWxlbmFtZSk7CiB9CiAKIFBhc3NSZWZQdHI8SWNvbj4gRmlsZUNob29zZXI6OmNob29z
ZUljb24oVmVjdG9yPFN0cmluZz4gZmlsZW5hbWVzKQogewogICAgIGlmIChmaWxlbmFtZXMuc2l6
ZSgpID09IDEpCi0gICAgICAgIHJldHVybiBJY29uOjpuZXdJY29uRm9yRmlsZShmaWxlbmFtZXNb
MF0pOwotICAgIHJldHVybiBJY29uOjpuZXdJY29uRm9yRmlsZXMoZmlsZW5hbWVzKTsKKyAgICAg
ICAgcmV0dXJuIEljb246OmNyZWF0ZUljb25Gb3JGaWxlKGZpbGVuYW1lc1swXSk7CisgICAgcmV0
dXJuIEljb246OmNyZWF0ZUljb25Gb3JGaWxlcyhmaWxlbmFtZXMpOwogfQogCiB9CkluZGV4OiBX
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ljb24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL0ljb24uaAkocmV2aXNpb24gMzgwMTYpCisrKyBXZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL0ljb24uaAkod29ya2luZyBjb3B5KQpAQCAtNTEsOCArNTEsOCBAQCBjbGFz
cyBTdHJpbmc7CiAgICAgCiBjbGFzcyBJY29uIDogcHVibGljIFJlZkNvdW50ZWQ8SWNvbj4gewog
cHVibGljOgotICAgIHN0YXRpYyBQYXNzUmVmUHRyPEljb24+IG5ld0ljb25Gb3JGaWxlKGNvbnN0
IFN0cmluZyYgZmlsZW5hbWUpOwotICAgIHN0YXRpYyBQYXNzUmVmUHRyPEljb24+IG5ld0ljb25G
b3JGaWxlcyhjb25zdCBWZWN0b3I8U3RyaW5nPiYgZmlsZW5hbWVzKTsKKyAgICBzdGF0aWMgUGFz
c1JlZlB0cjxJY29uPiBjcmVhdGVJY29uRm9yRmlsZShjb25zdCBTdHJpbmcmIGZpbGVuYW1lKTsK
KyAgICBzdGF0aWMgUGFzc1JlZlB0cjxJY29uPiBjcmVhdGVJY29uRm9yRmlsZXMoY29uc3QgVmVj
dG9yPFN0cmluZz4mIGZpbGVuYW1lcyk7CiAKICAgICB+SWNvbigpOwogCkluZGV4OiBXZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2d0ay9JY29uR3RrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2d0ay9JY29uR3RrLmNwcAkocmV2aXNpb24gMzgwMTYpCisrKyBX
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2d0ay9JY29uR3RrLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtODgsNyArODgsNyBAQCBzdGF0aWMgU3RyaW5nIGxvb2t1cEljb25OYW1lKFN0cmluZyBNSU1F
CiAgICAgcmV0dXJuIEdUS19TVE9DS19GSUxFOwogfQogCi1QYXNzUmVmUHRyPEljb24+IEljb246
Om5ld0ljb25Gb3JGaWxlKGNvbnN0IFN0cmluZyYgZmlsZW5hbWUpCitQYXNzUmVmUHRyPEljb24+
IEljb246OmNyZWF0ZUljb25Gb3JGaWxlKGNvbnN0IFN0cmluZyYgZmlsZW5hbWUpCiB7CiAgICAg
aWYgKCFnX3BhdGhfc2tpcF9yb290KGZpbGVuYW1lLnV0ZjgoKS5kYXRhKCkpKQogICAgICAgICBy
ZXR1cm4gMDsKQEAgLTEwMyw3ICsxMDMsNyBAQCBQYXNzUmVmUHRyPEljb24+IEljb246Om5ld0lj
b25Gb3JGaWxlKGNvCiAgICAgcmV0dXJuIGljb24ucmVsZWFzZSgpOwogfQogCi1QYXNzUmVmUHRy
PEljb24+IEljb246Om5ld0ljb25Gb3JGaWxlcyhjb25zdCBWZWN0b3I8U3RyaW5nPiYgZmlsZW5h
bWVzKQorUGFzc1JlZlB0cjxJY29uPiBJY29uOjpjcmVhdGVJY29uRm9yRmlsZXMoY29uc3QgVmVj
dG9yPFN0cmluZz4mIGZpbGVuYW1lcykKIHsKICAgICAvL0ZJWE1FOiBJbXBsZW1lbnQgdGhpcwog
ICAgIHJldHVybiAwOwpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMvSWNvbk1h
Yy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL21hYy9JY29uTWFj
Lm1tCShyZXZpc2lvbiAzODAxNikKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0lj
b25NYWMubW0JKHdvcmtpbmcgY29weSkKQEAgLTM5LDcgKzM5LDcgQEAgSWNvbjo6fkljb24oKQog
ewogfQogCi1QYXNzUmVmUHRyPEljb24+IEljb246Om5ld0ljb25Gb3JGaWxlKGNvbnN0IFN0cmlu
ZyYgZmlsZW5hbWUpCitQYXNzUmVmUHRyPEljb24+IEljb246OmNyZWF0ZUljb25Gb3JGaWxlKGNv
bnN0IFN0cmluZyYgZmlsZW5hbWUpCiB7CiAgICAgLy8gRG9uJ3QgcGFzcyByZWxhdGl2ZSBmaWxl
bmFtZXMgLS0gd2UgZG9uJ3Qgd2FudCBhIHJlc3VsdCB0aGF0IGRlcGVuZHMgb24gdGhlIGN1cnJl
bnQgZGlyZWN0b3J5LgogICAgIC8vIE5lZWQgMFUgaGVyZSB0byBkaXNhbWJpZ3VhdGUgU3RyaW5n
OjpvcGVyYXRvcltdIGZyb20gb3BlcmF0b3IoTlNTdHJpbmcqLCBpbnQpW10KQEAgLTUzLDEzICs1
MywxMyBAQCBQYXNzUmVmUHRyPEljb24+IEljb246Om5ld0ljb25Gb3JGaWxlKGNvCiAgICAgcmV0
dXJuIGFkb3B0UmVmKG5ldyBJY29uKGltYWdlKSk7CiB9CiAKLVBhc3NSZWZQdHI8SWNvbj4gSWNv
bjo6bmV3SWNvbkZvckZpbGVzKGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBmaWxlbmFtZXMpCitQYXNz
UmVmUHRyPEljb24+IEljb246OmNyZWF0ZUljb25Gb3JGaWxlcyhjb25zdCBWZWN0b3I8U3RyaW5n
PiYgZmlsZW5hbWVzKQogewogICAgIGlmIChmaWxlbmFtZXMuaXNFbXB0eSgpKQogICAgICAgICBy
ZXR1cm4gMDsKICNpZmRlZiBCVUlMRElOR19PTl9USUdFUgogICAgIC8vIEZJWE1FOiBmaW5kIGEg
YmV0dGVyIGltYWdlIHRvIHVzZSBvbiBUaWdlci4KLSAgICByZXR1cm4gbmV3SWNvbkZvckZpbGUo
ZmlsZW5hbWVzWzBdKTsKKyAgICByZXR1cm4gY3JlYXRlSWNvbkZvckZpbGUoZmlsZW5hbWVzWzBd
KTsKICNlbHNlCiAgICAgTlNJbWFnZSogaW1hZ2UgPSBbTlNJbWFnZSBpbWFnZU5hbWVkOk5TSW1h
Z2VOYW1lTXVsdGlwbGVEb2N1bWVudHNdOwogICAgIGlmICghaW1hZ2UpCkluZGV4OiBXZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL3F0L0ljb25RdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9xdC9JY29uUXQuY3BwCShyZXZpc2lvbiAzODAxNikKKysrIFdlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQvSWNvblF0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDEs
MTQgKzQxLDE0IEBAIEljb246On5JY29uKCkKIHsKIH0KICAgICAKLVBhc3NSZWZQdHI8SWNvbj4g
SWNvbjo6bmV3SWNvbkZvckZpbGUoY29uc3QgU3RyaW5nJiBmaWxlbmFtZSkKK1Bhc3NSZWZQdHI8
SWNvbj4gSWNvbjo6Y3JlYXRlSWNvbkZvckZpbGUoY29uc3QgU3RyaW5nJiBmaWxlbmFtZSkKIHsK
ICAgICBSZWZQdHI8SWNvbj4gaSA9IGFkb3B0UmVmKG5ldyBJY29uKTsKICAgICBpLT5tX2ljb24g
PSBRSWNvbihmaWxlbmFtZSk7CiAgICAgcmV0dXJuIGkucmVsZWFzZSgpOwogfQogCi1QYXNzUmVm
UHRyPEljb24+IEljb246Om5ld0ljb25Gb3JGaWxlcyhjb25zdCBWZWN0b3I8U3RyaW5nPiYgZmls
ZW5hbWVzKQorUGFzc1JlZlB0cjxJY29uPiBJY29uOjpjcmVhdGVJY29uRm9yRmlsZXMoY29uc3Qg
VmVjdG9yPFN0cmluZz4mIGZpbGVuYW1lcykKIHsKICAgICAvL0ZJWE1FOiBJbXBsZW1lbnQgdGhp
cwogICAgIHJldHVybiAwOwpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vSWNv
bldpbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vSWNv
bldpbi5jcHAJKHJldmlzaW9uIDM4MDE2KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93
aW4vSWNvbldpbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIzLDEwICsyMywxMyBAQAogCiAjaW5j
bHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCiAjaW5jbHVkZSAiUGxhdGZvcm1TdHJpbmcuaCIKKyNp
bmNsdWRlIDx0Y2hhci5oPgogI2luY2x1ZGUgPHdpbmRvd3MuaD4KIAogbmFtZXNwYWNlIFdlYkNv
cmUgewogCitzdGF0aWMgY29uc3QgaW50IHNoZWxsMzJNdWx0aXBsZUZpbGVJY29uSW5kZXggPSA1
NDsKKwogSWNvbjo6SWNvbihISUNPTiBpY29uKQogICAgIDogbV9oSWNvbihpY29uKQogewpAQCAt
MzgsNyArNDEsNyBAQCBJY29uOjp+SWNvbigpCiAgICAgRGVzdHJveUljb24obV9oSWNvbik7CiB9
CiAKLVBhc3NSZWZQdHI8SWNvbj4gSWNvbjo6bmV3SWNvbkZvckZpbGUoY29uc3QgU3RyaW5nJiBm
aWxlbmFtZSkKK1Bhc3NSZWZQdHI8SWNvbj4gSWNvbjo6Y3JlYXRlSWNvbkZvckZpbGUoY29uc3Qg
U3RyaW5nJiBmaWxlbmFtZSkKIHsKICAgICBTSEZJTEVJTkZPIHNmaTsKICAgICBtZW1zZXQoJnNm
aSwgMCwgc2l6ZW9mKHNmaSkpOwpAQCAtNTAsMTAgKzUzLDIwIEBAIFBhc3NSZWZQdHI8SWNvbj4g
SWNvbjo6bmV3SWNvbkZvckZpbGUoY28KICAgICByZXR1cm4gYWRvcHRSZWYobmV3IEljb24oc2Zp
LmhJY29uKSk7CiB9CiAKLVBhc3NSZWZQdHI8SWNvbj4gSWNvbjo6bmV3SWNvbkZvckZpbGVzKGNv
bnN0IFZlY3RvcjxTdHJpbmc+JiBmaWxlbmFtZXMpCitQYXNzUmVmUHRyPEljb24+IEljb246OmNy
ZWF0ZUljb25Gb3JGaWxlcyhjb25zdCBWZWN0b3I8U3RyaW5nPiYpCiB7Ci0gICAgLy9GSVhNRTog
SW1wbGVtZW50IHRoaXMKLSAgICByZXR1cm4gMDsKKyAgICBUQ0hBUiBidWZmZXJbTUFYX1BBVEhd
OyAgICAKKyAgICBVSU5UIGxlbmd0aCA9IDo6R2V0U3lzdGVtRGlyZWN0b3J5KGJ1ZmZlciwgQVJS
QVlTSVpFKGJ1ZmZlcikpOworICAgIGlmICghbGVuZ3RoKQorICAgICAgICByZXR1cm4gMDsKKyAg
ICAKKyAgICBpZiAoX3Rjc2NhdF9zKGJ1ZmZlciwgQVJSQVlTSVpFKGJ1ZmZlciksIFRFWFQoIlxc
c2hlbGwzMi5kbGwiKSkpCisgICAgICAgIHJldHVybiAwOworCisgICAgSElDT04gaEljb247Cisg
ICAgaWYgKCE6OkV4dHJhY3RJY29uRXgoYnVmZmVyLCBzaGVsbDMyTXVsdGlwbGVGaWxlSWNvbklu
ZGV4LCAwLCAmaEljb24sIDEpKQorICAgICAgICByZXR1cm4gMDsKKyAgICByZXR1cm4gYWRvcHRS
ZWYobmV3IEljb24oaEljb24pKTsKIH0KIAogdm9pZCBJY29uOjpwYWludChHcmFwaGljc0NvbnRl
eHQqIGNvbnRleHQsIGNvbnN0IEludFJlY3QmIHIpCkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL3d4
L1RlbXBvcmFyeUxpbmtTdHVicy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS93
eC9UZW1wb3JhcnlMaW5rU3R1YnMuY3BwCShyZXZpc2lvbiAzODAxNikKKysrIFdlYkNvcmUvcGxh
dGZvcm0vd3gvVGVtcG9yYXJ5TGlua1N0dWJzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTMyLDgg
KzEzMiw4IEBAIFNjcm9sbGJhclRoZW1lKiBTY3JvbGxiYXJUaGVtZTo6bmF0aXZlVGgKIFN0cmlu
ZyBGaWxlQ2hvb3Nlcjo6YmFzZW5hbWVGb3JXaWR0aChjb25zdCBGb250JiwgaW50IHdpZHRoKSBj
b25zdCB7IG5vdEltcGxlbWVudGVkKCk7IHJldHVybiBTdHJpbmcoKTsgfQogCiBJY29uOjp+SWNv
bigpIHsgfQotUGFzc1JlZlB0cjxJY29uPiBJY29uOjpuZXdJY29uRm9yRmlsZShjb25zdCBTdHJp
bmcmIGZpbGVuYW1lKSB7IG5vdEltcGxlbWVudGVkKCk7IHJldHVybiAwOyB9Ci1QYXNzUmVmUHRy
PEljb24+IEljb246Om5ld0ljb25Gb3JGaWxlcyhjb25zdCBWZWN0b3I8U3RyaW5nPiYgZmlsZW5h
bWVzKSB7IG5vdEltcGxlbWVudGVkKCk7IHJldHVybiAwOyB9CitQYXNzUmVmUHRyPEljb24+IElj
b246OmNyZWF0ZUljb25Gb3JGaWxlKGNvbnN0IFN0cmluZyYgZmlsZW5hbWUpIHsgbm90SW1wbGVt
ZW50ZWQoKTsgcmV0dXJuIDA7IH0KK1Bhc3NSZWZQdHI8SWNvbj4gSWNvbjo6Y3JlYXRlSWNvbkZv
ckZpbGVzKGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBmaWxlbmFtZXMpIHsgbm90SW1wbGVtZW50ZWQo
KTsgcmV0dXJuIDA7IH0KIHZvaWQgSWNvbjo6cGFpbnQoR3JhcGhpY3NDb250ZXh0KiwgY29uc3Qg
SW50UmVjdCYpIHsgbm90SW1wbGVtZW50ZWQoKTsgfQogCiBDb250ZXh0TWVudTo6Q29udGV4dE1l
bnUoY29uc3QgSGl0VGVzdFJlc3VsdCYgcmVzdWx0KSA6IG1faGl0VGVzdFJlc3VsdChyZXN1bHQp
IHsgbm90SW1wbGVtZW50ZWQoKTsgfQpJbmRleDogV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhl
bWVXaW4uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lV2lu
LmNwcAkocmV2aXNpb24gMzgwMTYpCisrKyBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZVdp
bi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTg0LDYgKzg0LDggQEAKIC8vIFRoaXMgaXMgdGhlIGZp
eGVkIHdpZHRoIElFIGFuZCBGaXJlZm94IHVzZSBmb3IgYnV0dG9ucyBvbiBkcm9wZG93biBtZW51
cwogc3RhdGljIGNvbnN0IGludCBkcm9wRG93bkJ1dHRvbldpZHRoID0gMTc7CiAKK3N0YXRpYyBj
b25zdCBpbnQgc2hlbGwzMk1hZ25pZmllckljb25JbmRleCA9IDIyOworCiBTT0ZUX0xJTktfTElC
UkFSWSh1eHRoZW1lKQogU09GVF9MSU5LKHV4dGhlbWUsIE9wZW5UaGVtZURhdGEsIEhBTkRMRSwg
V0lOQVBJLCAoSFdORCBod25kLCBMUENXU1RSIHBzekNsYXNzTGlzdCksIChod25kLCBwc3pDbGFz
c0xpc3QpKQogU09GVF9MSU5LKHV4dGhlbWUsIENsb3NlVGhlbWVEYXRhLCBIUkVTVUxULCBXSU5B
UEksIChIQU5ETEUgaFRoZW1lKSwgKGhUaGVtZSkpCkBAIC03MjksMTggKzczMSwxOSBAQCBib29s
IFJlbmRlclRoZW1lV2luOjpwYWludFNlYXJjaEZpZWxkUmVzCiB7CiAgICAgSW50UmVjdCBib3Vu
ZHMgPSByOwogICAgIGJvdW5kcy5zZXRXaWR0aChib3VuZHMuaGVpZ2h0KCkpOwotICAgIExQQ1RT
VFIgc2hlbGwzMiA9IF9UKCJcXHNoZWxsMzIuZGxsIik7Ci0gICAgaW50IHNoZWxsMzJMZW5ndGgg
PSBfdGNzbGVuKHNoZWxsMzIpOworCiAgICAgVENIQVIgYnVmZmVyW01BWF9QQVRIXTsKLSAgICBV
SU5UIGxlbmd0aCA9IDo6R2V0U3lzdGVtRGlyZWN0b3J5KGJ1ZmZlciwgTUFYX1BBVEgpOworICAg
IFVJTlQgbGVuZ3RoID0gOjpHZXRTeXN0ZW1EaXJlY3RvcnkoYnVmZmVyLCBBUlJBWVNJWkUoYnVm
ZmVyKSk7CiAgICAgaWYgKCFsZW5ndGgpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBfdGNz
bmNweV9zKGJ1ZmZlciArIGxlbmd0aCwgTUFYX1BBVEggLSBsZW5ndGgsIHNoZWxsMzIsIHNoZWxs
MzJMZW5ndGgpOwotICAgIGJ1ZmZlcltsZW5ndGggKyBzaGVsbDMyTGVuZ3RoXSA9IDA7CisgICAg
ICAgIHJldHVybiAwOworICAgIAorICAgIGlmIChfdGNzY2F0X3MoYnVmZmVyLCBBUlJBWVNJWkUo
YnVmZmVyKSwgVEVYVCgiXFxzaGVsbDMyLmRsbCIpKSkKKyAgICAgICAgcmV0dXJuIDA7CisKICAg
ICBISUNPTiBoSWNvbjsKLSAgICBjb25zdCBpbnQgc2hlbGwzMk1hZ25pZmllckluZGV4ID0gMjI7
Ci0gICAgaWYgKCE6OkV4dHJhY3RJY29uRXgoYnVmZmVyLCBzaGVsbDMyTWFnbmlmaWVySW5kZXgs
IDAsICZoSWNvbiwgMSkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBpZiAoITo6RXh0cmFj
dEljb25FeChidWZmZXIsIHNoZWxsMzJNYWduaWZpZXJJY29uSW5kZXgsIDAsICZoSWNvbiwgMSkp
CisgICAgICAgIHJldHVybiAwOworCiAgICAgUmVmUHRyPEljb24+IGljb24gPSBJY29uOjpjcmVh
dGUoaEljb24pOwogICAgIGljb24tPnBhaW50KHBhaW50SW5mby5jb250ZXh0LCBib3VuZHMpOwog
ICAgIHJldHVybiBmYWxzZTsKSW5kZXg6IFdlYktpdC93aW4vQ2hhbmdlTG9nCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFdlYktpdC93aW4vQ2hhbmdlTG9nCShyZXZpc2lvbiAzODA1MykKKysrIFdlYktpdC93aW4v
Q2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTMgQEAKKzIwMDgtMTAtMzEgIEFk
ZWxlIFBldGVyc29uICA8YWRlbGVAYXBwbGUuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IERh
cmluIEFkbGVyLgorCisgICAgICAgIFdlYktpdCBXaW5kb3dzIHBhcnQgb2YgZml4IGZvciA8cmRh
cjovL3Byb2JsZW0vNTgzOTI1Nj4gRklMRSBDT05UUk9MOiBtdWx0aS1maWxlIHVwbG9hZC4KKyAg
ICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIyMDA4CisgICAg
ICAgIAorICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L1dlYkNocm9tZUNsaWVudC5jcHA6IChXZWJD
aHJvbWVDbGllbnQ6OnJ1bk9wZW5QYW5lbCk6IAorICAgICAgICBBZGQgc3VwcG9ydCBmb3IgbXVs
aXRwbGUgZmlsZSBzZWxlY3Rpb24uCisKIDIwMDgtMTAtMzEgIERhcmluIEFkbGVyICA8ZGFyaW5A
YXBwbGUuY29tPgogCiAgICAgICAgIC0gdHJ5IHRvIGZpeCBidWlsZApJbmRleDogV2ViS2l0L3dp
bi9XZWJDb3JlU3VwcG9ydC9XZWJDaHJvbWVDbGllbnQuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktp
dC93aW4vV2ViQ29yZVN1cHBvcnQvV2ViQ2hyb21lQ2xpZW50LmNwcAkocmV2aXNpb24gMzgwMTYp
CisrKyBXZWJLaXQvd2luL1dlYkNvcmVTdXBwb3J0L1dlYkNocm9tZUNsaWVudC5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTQ4LDYgKzQ4LDExIEBACiAKIHVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwog
CisvLyBXaGVuIHlvdSBjYWxsIEdldE9wZW5GaWxlTmFtZSwgaWYgdGhlIHNpemUgb2YgdGhlIGJ1
ZmZlciBpcyB0b28gc21hbGwsCisvLyBNU0ROIHNheXMgdGhhdCB0aGUgZmlyc3QgdHdvIGJ5dGVz
IG9mIHRoZSBidWZmZXIgY29udGFpbiB0aGUgcmVxdWlyZWQgc2l6ZSBmb3IgdGhlIGZpbGUgc2Vs
ZWN0aW9uLCBpbiBieXRlcyBvciBjaGFyYWN0ZXJzCisvLyBTbyB3ZSBjYW4gYXNzdW1lIHRoZSBy
ZXF1aXJlZCBzaXplIGNhbid0IGJlIG1vcmUgdGhhbiB0aGUgbWF4aW11bSB2YWx1ZSBmb3IgYSBz
aG9ydC4KK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBzaG9ydCBtYXhGaWxlUGF0aHNMaXN0U2l6ZSA9
IFVTSFJUX01BWDsKKwogV2ViQ2hyb21lQ2xpZW50OjpXZWJDaHJvbWVDbGllbnQoV2ViVmlldyog
d2ViVmlldykKICAgICA6IG1fd2ViVmlldyh3ZWJWaWV3KQogewpAQCAtNjI1LDE1ICs2MzAsMTUg
QEAgYm9vbCBXZWJDaHJvbWVDbGllbnQ6OnBhaW50Q3VzdG9tU2Nyb2xsQwogCiB2b2lkIFdlYkNo
cm9tZUNsaWVudDo6cnVuT3BlblBhbmVsKEZyYW1lKiwgUGFzc1JlZlB0cjxGaWxlQ2hvb3Nlcj4g
cHJwRmlsZUNob29zZXIpCiB7Ci0gICAgLy8gRklYTUU6IFN1cHBvcnQgbXVsdGlwbGUgZmlsZXMu
Ci0KICAgICBSZWZQdHI8RmlsZUNob29zZXI+IGZpbGVDaG9vc2VyID0gcHJwRmlsZUNob29zZXI7
CiAKICAgICBIV05EIHZpZXdXaW5kb3c7CiAgICAgaWYgKEZBSUxFRChtX3dlYlZpZXctPnZpZXdX
aW5kb3cocmVpbnRlcnByZXRfY2FzdDxPTEVfSEFORExFKj4oJnZpZXdXaW5kb3cpKSkpCiAgICAg
ICAgIHJldHVybjsKIAotICAgIFRDSEFSIGZpbGVCdWZbTUFYX1BBVEhdOworICAgIGJvb2wgbXVs
dGlGaWxlID0gZmlsZUNob29zZXItPmFsbG93c011bHRpcGxlRmlsZXMoKTsKKyAgICBWZWN0b3I8
VENIQVI+IGZpbGVCdWYobXVsdGlGaWxlID8gbWF4RmlsZVBhdGhzTGlzdFNpemUgOiBNQVhfUEFU
SCk7CisKICAgICBPUEVORklMRU5BTUUgb2ZuOwogCiAgICAgbWVtc2V0KCZvZm4sIDAsIHNpemVv
ZihvZm4pKTsKQEAgLTY0NiwxNCArNjUxLDM5IEBAIHZvaWQgV2ViQ2hyb21lQ2xpZW50OjpydW5P
cGVuUGFuZWwoRnJhbWUKICAgICBTdHJpbmcgYWxsRmlsZXMgPSBhbGxGaWxlc1RleHQoKTsKICAg
ICBhbGxGaWxlcy5hcHBlbmQoVEVYVCgiXDAqLipcMFwwIiksIDYpOwogICAgIG9mbi5scHN0ckZp
bHRlciA9IGFsbEZpbGVzLmNoYXJhY3RlcnNXaXRoTnVsbFRlcm1pbmF0aW9uKCk7Ci0gICAgb2Zu
Lmxwc3RyRmlsZSA9IGZpbGVCdWY7Ci0gICAgb2ZuLm5NYXhGaWxlID0gc2l6ZW9mKGZpbGVCdWYp
OworICAgIG9mbi5scHN0ckZpbGUgPSBmaWxlQnVmLmRhdGEoKTsKKyAgICBvZm4ubk1heEZpbGUg
PSBmaWxlQnVmLnNpemUoKTsKICAgICBTdHJpbmcgZGlhbG9nVGl0bGUgPSB1cGxvYWRGaWxlVGV4
dCgpOwogICAgIG9mbi5scHN0clRpdGxlID0gZGlhbG9nVGl0bGUuY2hhcmFjdGVyc1dpdGhOdWxs
VGVybWluYXRpb24oKTsKLSAgICBvZm4uRmxhZ3MgPSBPRk5fRU5BQkxFU0laSU5HIHwgT0ZOX0ZJ
TEVNVVNURVhJU1QgfCBPRk5fUEFUSE1VU1RFWElTVDsKLQotICAgIGlmIChHZXRPcGVuRmlsZU5h
bWUoJm9mbikpCi0gICAgICAgIGZpbGVDaG9vc2VyLT5jaG9vc2VGaWxlKFN0cmluZyhmaWxlQnVm
KSk7CisgICAgb2ZuLkZsYWdzID0gT0ZOX0VOQUJMRVNJWklORyB8IE9GTl9GSUxFTVVTVEVYSVNU
IHwgT0ZOX1BBVEhNVVNURVhJU1QgfCBPRk5fRVhQTE9SRVI7CisgICAgaWYgKG11bHRpRmlsZSkK
KyAgICAgICAgb2ZuLkZsYWdzID0gb2ZuLkZsYWdzIHwgT0ZOX0FMTE9XTVVMVElTRUxFQ1Q7CisK
KyAgICBpZiAoR2V0T3BlbkZpbGVOYW1lKCZvZm4pKSB7CisgICAgICAgIFRDSEFSKiBmaWxlcyA9
IGZpbGVCdWYuZGF0YSgpOworICAgICAgICBWZWN0b3I8U3RyaW5nPiBmaWxlTGlzdDsKKyAgICAg
ICAgU3RyaW5nIGZpbGUoZmlsZXMpOworICAgICAgICBpZiAobXVsdGlGaWxlKSB7CisgICAgICAg
ICAgICB3aGlsZSAoIWZpbGUuaXNFbXB0eSgpKSB7CisgICAgICAgICAgICAgICAgLy8gV2hlbiB1
c2luZyB0aGUgT0ZOX0VYUExPUkVSIGZsYWcsIHRoZSBmaWxlIGxpc3QgaXMgbnVsbCBkZWxpbWl0
ZWQuCisgICAgICAgICAgICAgICAgLy8gV2hlbiB5b3UgY3JlYXRlIGEgU3RyaW5nIGZyb20gYSBw
dHIgdG8gdGhpcyBsaXN0LCBpdCB3aWxsIHVzZSBzdHJsZW4gdG8gbG9vayBmb3IgdGhlIG51bGwg
Y2hhcmFjdGVyLgorICAgICAgICAgICAgICAgIC8vIFRoZW4gd2UgZmluZCB0aGUgbmV4dCBmaWxl
IHBhdGggc3RyaW5nIGJ5IHVzaW5nIHRoZSBsZW5ndGggb2YgdGhlIHN0cmluZyB3ZSBqdXN0IGNy
ZWF0ZWQuCisgICAgICAgICAgICAgICAgVENIQVIqIG5leHRGaWxlUHRyID0gZmlsZXMgKyBmaWxl
Lmxlbmd0aCgpICsgMTsKKyAgICAgICAgICAgICAgICBTdHJpbmcgbmV4dEZpbGUobmV4dEZpbGVQ
dHIpOworICAgICAgICAgICAgICAgIC8vIElmIG11bHRpcGxlIGZpbGVzIGFyZSBzZWxlY3RlZCwg
dGhlcmUgd2lsbCBiZSBhIGRpcmVjdG9yeSBuYW1lIGZpcnN0LCB3aGljaCB3ZSBkb24ndCB3YW50
IHRvIGFkZCB0byB0aGUgdmVjdG9yLgorICAgICAgICAgICAgICAgIC8vIFdlIGtub3cgYSBzaW5n
bGUgZmlsZSB3YXMgc2VsZWN0ZWQgaWYgdGhlcmUgaXMgb25seSBvbmUgZmlsZW5hbWUgaW4gdGhl
IGxpc3QuICAKKyAgICAgICAgICAgICAgICAvLyBJbiB0aGF0IGNhc2UsIHdlIGRvbid0IHdhbnQg
dG8gc2tpcCBhZGRpbmcgdGhlIGZpcnN0IChhbmQgb25seSkgbmFtZS4KKyAgICAgICAgICAgICAg
ICBpZiAoZmlsZXMgIT0gZmlsZUJ1Zi5kYXRhKCkgfHwgbmV4dEZpbGUuaXNFbXB0eSgpKQorICAg
ICAgICAgICAgICAgICAgICBmaWxlTGlzdC5hcHBlbmQoZmlsZSk7CisgICAgICAgICAgICAgICAg
ZmlsZXMgPSBuZXh0RmlsZVB0cjsKKyAgICAgICAgICAgICAgICBmaWxlID0gbmV4dEZpbGU7Cisg
ICAgICAgICAgICB9CisgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgZmlsZUxpc3QuYXBwZW5k
KGZpbGUpOworICAgICAgICBBU1NFUlQoZmlsZUxpc3Quc2l6ZSgpKTsKKyAgICAgICAgZmlsZUNo
b29zZXItPmNob29zZUZpbGVzKGZpbGVMaXN0KTsKKyAgICB9CisgICAgLy8gRklYTUU6IFNob3cg
c29tZSBzb3J0IG9mIGVycm9yIGlmIHRvbyBtYW55IGZpbGVzIGFyZSBzZWxlY3RlZCBhbmQgdGhl
IGJ1ZmZlciBpcyB0b28gc21hbGwuICBGb3Igbm93LCB0aGlzIHdpbGwgZmFpbCBzaWxlbnRseS4K
IH0KIAogQ09NUHRyPElXZWJVSURlbGVnYXRlPiBXZWJDaHJvbWVDbGllbnQ6OnVpRGVsZWdhdGUo
KQo=
</data>
<flag name="review"
          id="11360"
          type_id="1"
          status="+"
          setter="darin"
    />
          </attachment>
      

    </bug>

</bugzilla>