<?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>129580</bug_id>
          
          <creation_ts>2014-03-02 12:54:25 -0800</creation_ts>
          <short_desc>Add a fallback path for compiling the remaining attribute checkers</short_desc>
          <delta_ts>2014-03-02 23:06:14 -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>New Bugs</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</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>
          <dependson>129596</dependson>
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Benjamin Poulain">benjamin</reporter>
          <assigned_to name="Benjamin Poulain">benjamin</assigned_to>
          <cc>allan.jensen</cc>
    
    <cc>barraclough</cc>
    
    <cc>commit-queue</cc>
    
    <cc>esprehn+autocc</cc>
    
    <cc>ggaren</cc>
    
    <cc>glenn</cc>
    
    <cc>gyuyoung.kim</cc>
    
    <cc>kling</cc>
    
    <cc>macpherson</cc>
    
    <cc>menard</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>986156</commentid>
    <comment_count>0</comment_count>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2014-03-02 12:54:25 -0800</bug_when>
    <thetext>Add a fallback path for compiling the remaining attribute checkers</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>986157</commentid>
    <comment_count>1</comment_count>
      <attachid>225607</attachid>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2014-03-02 13:04:45 -0800</bug_when>
    <thetext>Created attachment 225607
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>986188</commentid>
    <comment_count>2</comment_count>
      <attachid>225607</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2014-03-02 15:32:51 -0800</bug_when>
    <thetext>Comment on attachment 225607
Patch

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

&gt; Source/WebCore/css/SelectorChecker.cpp:282
&gt;      switch (match) {

Could we replace all the &quot;break;&quot; here with return true? Then we could remove the default case and move the ASSERT_NOT_REACHED out of the switch and get a warning if someone adds a new case we don’t handle here.

&gt; Source/WebCore/cssjit/SelectorCompiler.cpp:1241
&gt; +    bool valueStartsWithExpectedString;
&gt; +    if (caseSensitivity == CaseSensitive)
&gt; +        valueStartsWithExpectedString = valueImpl.startsWith(expectedString);
&gt; +    else
&gt; +        valueStartsWithExpectedString = valueImpl.startsWith(expectedString, false);
&gt; +
&gt; +    if (!valueStartsWithExpectedString)
&gt; +        return false;

Single line version of these 7 lines of code:

    if (!valueImpl.startsWith(expectedString, caseSensitivity == CaseSensitive))

&gt; Source/WebCore/cssjit/SelectorCompiler.cpp:1261
&gt; +        if (!foundPos || value[foundPos - 1] == &apos; &apos;) {
&gt; +            unsigned endStr = foundPos + expectedString-&gt;length();

foundPos and endStr? Not only are these abbreviated, but they are using different abbreviations even though their purposes are similar. Please use names made out of words instead of these abbreviations.

&gt; Source/WebCore/cssjit/SelectorCompiler.cpp:1299
&gt; +    default:
&gt; +        ASSERT_NOT_REACHED();

Can we use return instead of break and remove this default case?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>986193</commentid>
    <comment_count>3</comment_count>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2014-03-02 16:00:07 -0800</bug_when>
    <thetext>Thanks for the review!

(In reply to comment #2)
&gt; (From update of attachment 225607 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=225607&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/css/SelectorChecker.cpp:282
&gt; &gt;      switch (match) {
&gt; 
&gt; Could we replace all the &quot;break;&quot; here with return true? Then we could remove the default case and move the ASSERT_NOT_REACHED out of the switch and get a warning if someone adds a new case we don’t handle here.

Unfortunately, match can be any selector type, not just the attribute types.

&gt; &gt; Source/WebCore/cssjit/SelectorCompiler.cpp:1241
&gt; &gt; +    bool valueStartsWithExpectedString;
&gt; &gt; +    if (caseSensitivity == CaseSensitive)
&gt; &gt; +        valueStartsWithExpectedString = valueImpl.startsWith(expectedString);
&gt; &gt; +    else
&gt; &gt; +        valueStartsWithExpectedString = valueImpl.startsWith(expectedString, false);
&gt; &gt; +
&gt; &gt; +    if (!valueStartsWithExpectedString)
&gt; &gt; +        return false;
&gt; 
&gt; Single line version of these 7 lines of code:
&gt; 
&gt;     if (!valueImpl.startsWith(expectedString, caseSensitivity == CaseSensitive))

Unfortunately, the version taking a boolean is quite a bit less efficient.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>986220</commentid>
    <comment_count>4</comment_count>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2014-03-02 17:42:51 -0800</bug_when>
    <thetext>Committed r164961: &lt;http://trac.webkit.org/changeset/164961&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>986240</commentid>
    <comment_count>5</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2014-03-02 19:16:10 -0800</bug_when>
    <thetext>This change caused assertion failures all over the place, and Ben is not around, rolling out:

http://build.webkit.org/results/Apple%20Mavericks%20Debug%20WK2%20(Tests)/r164964%20(3038)/results.html</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>986242</commentid>
    <comment_count>6</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2014-03-02 19:16:30 -0800</bug_when>
    <thetext>Re-opened since this is blocked by bug 129596</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>986255</commentid>
    <comment_count>7</comment_count>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2014-03-02 19:58:16 -0800</bug_when>
    <thetext>(In reply to comment #5)
&gt; This change caused assertion failures all over the place, and Ben is not around, rolling out:
&gt; 
&gt; http://build.webkit.org/results/Apple%20Mavericks%20Debug%20WK2%20(Tests)/r164964%20(3038)/results.html

Damn, of course. Sorry about that, the assertion does not apply to one of the type.

I have been unable to test in debug because JavaScriptCore was crashing all over the place for me.
I&apos;ll fix the assertion.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>986273</commentid>
    <comment_count>8</comment_count>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2014-03-02 23:06:14 -0800</bug_when>
    <thetext>Committed r164972: &lt;http://trac.webkit.org/changeset/164972&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>225607</attachid>
            <date>2014-03-02 13:04:45 -0800</date>
            <delta_ts>2014-03-02 15:32:51 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-129580-20140302130443.patch</filename>
            <type>text/plain</type>
            <size>15199</size>
            <attacher name="Benjamin Poulain">benjamin</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTY0OTMyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggODBjYjQwYWY3MmQ2NzU4
Zjk5OTA2ZDA2NTk2YTJiYjY0MmFmZmI2Yi4uNmEyZDhjMGIwZTkzZTVhZWE4YzRhMTRiYTkwMzNm
ODNiZTRjZGY0NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQzIEBACisyMDE0LTAzLTAyICBCZW5q
YW1pbiBQb3VsYWluICA8YmVuamFtaW5Ad2Via2l0Lm9yZz4KKworICAgICAgICBBZGQgYSBmYWxs
YmFjayBwYXRoIGZvciBjb21waWxpbmcgdGhlIHJlbWFpbmluZyBhdHRyaWJ1dGUgY2hlY2tlcnMK
KyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEyOTU4MAor
CisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFRoZSByZW1h
aW5pbmcgYXR0cmlidXRlIGNoZWNrZXJzIGFwcGVhciB0byBiZSBsZXNzIGNvbW1vbiB0aGFuIHRo
ZSBzaW1wbGUgdmFsdWUgbWF0Y2guCisgICAgICAgIFRoaXMgcGF0Y2ggYWRkcyB0aGVtIHRvIFNl
bGVjdG9yQ29tcGlsZXIgZm9yIGNvbXBsZXRlbmVzcyBidXQgbm8gYXR0ZW1wdCBpcyBtYWRlIGF0
IG9wdGltaXppbmcgdGhlbSwKKyAgICAgICAgdGhleSBhbGwgZGVmYXVsdCB0byBmdW5jdGlvbiBj
YWxscy4KKworICAgICAgICBJZiB0aGUgYXNzdW1wdGlvbiB0aGF0IHRob3NlIHNlbGVjdG9ycyBh
cmUgbm90IGNvbW1vbiB0dXJuIG91dCB0byBiZSBpbmNvcnJlY3QsIHdlIHNob3VsZCBzZWUKKyAg
ICAgICAgdGhlIGZ1bmN0aW9uIGNhbGxzIGluIHByb2ZpbGVzIGFuZCBvcHRpbWl6ZSB0aGVtIGFz
IG5lZWRlZC4KKworICAgICAgICAqIGNzcy9TZWxlY3RvckNoZWNrZXIuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6YXR0cmlidXRlVmFsdWVNYXRjaGVzKToKKyAgICAgICAgSWYgd2UgZ2V0IGFueXRo
aW5nIGJ1dCBhdHRyaWJ1dGUgbWF0Y2ggaGVyZSwgc29tZXRoaW5nIGhhcyBnb25lIGhvcnJpYmx5
IHdyb25nLiBVcGRhdGUgdGhlIGNvZGUKKyAgICAgICAgdG8gZmFpbCBpZiB0aGF0IHdlcmUgdG8g
aGFwcGVuLgorCisgICAgICAgICogY3Nzaml0L1NlbGVjdG9yQ29tcGlsZXIuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6U2VsZWN0b3JDb21waWxlcjo6U2VsZWN0b3JDb2RlR2VuZXJhdG9yOjpTZWxl
Y3RvckNvZGVHZW5lcmF0b3IpOgorICAgICAgICBBZGQgdGhlIG1pc3NpbmcgbWF0Y2ggdHlwZSB0
byB0aGUgc2VsZWN0b3IgZnJhZ21lbnQuCisKKyAgICAgICAgQmVnaW4sIEVuZCwgQ29udGFpbiBj
YW5ub3QgbWF0Y2ggYW4gZW1wdHkgdmFsdWUgcGVyIHNwZWNpZmljYXRpb24uIFdlIGNhbiB0ZXN0
IHRoYXQgYXQgY29tcGlsZSB0aW1lCisgICAgICAgIGFuZCBmYWlsIGltbWVkaWF0ZWx5LiBTZWUg
aHR0cDovL3d3dy53My5vcmcvVFIvY3NzMy1zZWxlY3RvcnMvI2F0dHJpYnV0ZS1zdWJzdHJpbmdz
CisKKyAgICAgICAgTGlzdCBoYXMgdGhlIGV4dHJhIHJlcXVpcmVtZW50IHRoYXQgYSB2YWx1ZSBj
b250YWluaW5nIGEgc3BhY2UgZG9lcyBub3QgbWF0Y2ggYW55dGhpbmcuIEl0IGFsc28gY2Fubm90
CisgICAgICAgIG1hdGNoIHdpdGggYW4gZW1wdHkgc3RyaW5nLiBTZWUgaHR0cDovL3d3dy53My5v
cmcvVFIvY3NzMy1zZWxlY3RvcnMvI2F0dHJpYnV0ZS1yZXByZXNlbnRhdGlvbgorCisgICAgICAg
IChXZWJDb3JlOjpTZWxlY3RvckNvbXBpbGVyOjphdHRyaWJ1dGVWYWx1ZUJlZ2luc1dpdGgpOgor
ICAgICAgICAoV2ViQ29yZTo6U2VsZWN0b3JDb21waWxlcjo6YXR0cmlidXRlVmFsdWVDb250YWlu
cyk6CisgICAgICAgIChXZWJDb3JlOjpTZWxlY3RvckNvbXBpbGVyOjphdHRyaWJ1dGVWYWx1ZUVu
ZHNXaXRoKToKKyAgICAgICAgKFdlYkNvcmU6OlNlbGVjdG9yQ29tcGlsZXI6OmF0dHJpYnV0ZVZh
bHVlTWF0Y2hIeXBoZW5SdWxlKToKKyAgICAgICAgKFdlYkNvcmU6OlNlbGVjdG9yQ29tcGlsZXI6
OmF0dHJpYnV0ZVZhbHVlU3BhY2VTZXBhcmV0ZWRMaXN0Q29udGFpbnMpOgorICAgICAgICBUaGUg
c2xvdyBmYWxsYmFja3MuCisKKyAgICAgICAgKFdlYkNvcmU6OlNlbGVjdG9yQ29tcGlsZXI6OlNl
bGVjdG9yQ29kZUdlbmVyYXRvcjo6Z2VuZXJhdGVFbGVtZW50QXR0cmlidXRlVmFsdWVNYXRjaGlu
Zyk6CisgICAgICAgIChXZWJDb3JlOjpTZWxlY3RvckNvbXBpbGVyOjpTZWxlY3RvckNvZGVHZW5l
cmF0b3I6OmdlbmVyYXRlRWxlbWVudEF0dHJpYnV0ZUZ1bmN0aW9uQ2FsbFZhbHVlTWF0Y2hpbmcp
OgorICAgICAgICBBIGdlbmVyaWMgY29kZSBnZW5lcmF0b3IgbWFraW5nIGZ1bmN0aW9uIGNhbGwg
dG8gbWF0Y2ggYW4gYXR0cmlidXRlIHZhbHVlLgorCiAyMDE0LTAzLTAxICBCZW5qYW1pbiBQb3Vs
YWluICA8YmVuamFtaW5Ad2Via2l0Lm9yZz4KIAogICAgICAgICBUaWdodGVuIG1pbmltdW1SZWdp
c3RlclJlcXVpcmVtZW50cygpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3MvU2VsZWN0
b3JDaGVja2VyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9TZWxlY3RvckNoZWNrZXIuY3BwCmlu
ZGV4IDQ3MDY4ZjkzYzMxNDRkNmI5YTdiZjFmYWY3YTAxOGFhNGU0ZTEwMmMuLjc5ZTBkOTkyNmQ1
MjdiMzY1MzZhMTg2NzJiZDAzYTllYzM5ZjRiN2UgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L2Nzcy9TZWxlY3RvckNoZWNrZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9TZWxlY3Rv
ckNoZWNrZXIuY3BwCkBAIC0yODAsNiArMjgwLDggQEAgc3RhdGljIGJvb2wgYXR0cmlidXRlVmFs
dWVNYXRjaGVzKGNvbnN0IEF0dHJpYnV0ZSYgYXR0cmlidXRlLCBDU1NTZWxlY3Rvcjo6TWF0Y2gK
ICAgICBBU1NFUlQoIXZhbHVlLmlzTnVsbCgpKTsKIAogICAgIHN3aXRjaCAobWF0Y2gpIHsKKyAg
ICBjYXNlIENTU1NlbGVjdG9yOjpTZXQ6CisgICAgICAgIGJyZWFrOwogICAgIGNhc2UgQ1NTU2Vs
ZWN0b3I6OkV4YWN0OgogICAgICAgICBpZiAoY2FzZVNlbnNpdGl2ZSA/IHNlbGVjdG9yVmFsdWUg
IT0gdmFsdWUgOiAhZXF1YWxJZ25vcmluZ0Nhc2Uoc2VsZWN0b3JWYWx1ZSwgdmFsdWUpKQogICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOwpAQCAtMzI3LDEwICszMjksOSBAQCBzdGF0aWMgYm9vbCBh
dHRyaWJ1dGVWYWx1ZU1hdGNoZXMoY29uc3QgQXR0cmlidXRlJiBhdHRyaWJ1dGUsIENTU1NlbGVj
dG9yOjpNYXRjaAogICAgICAgICBpZiAodmFsdWUubGVuZ3RoKCkgIT0gc2VsZWN0b3JWYWx1ZS5s
ZW5ndGgoKSAmJiB2YWx1ZVtzZWxlY3RvclZhbHVlLmxlbmd0aCgpXSAhPSAnLScpCiAgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIGJyZWFrOwotICAgIGNhc2UgQ1NTU2VsZWN0b3I6
OlBzZXVkb0NsYXNzOgotICAgIGNhc2UgQ1NTU2VsZWN0b3I6OlBzZXVkb0VsZW1lbnQ6CiAgICAg
ZGVmYXVsdDoKLSAgICAgICAgYnJlYWs7CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwor
ICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogCiAgICAgcmV0dXJuIHRydWU7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3NqaXQvU2VsZWN0b3JDb21waWxlci5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9jc3NqaXQvU2VsZWN0b3JDb21waWxlci5jcHAKaW5kZXggNzhmMTA4MmI0ZTA1MjI0
ZmM5MjY2ZjhlZTE3ZGQyNmM3ZjQ3ZDI2Ni4uOTI1YTdjYTIzYTE2MWE0NWQzZGQyZWNhYzgyODJi
ZDQwZDZhNjM4MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY3Nzaml0L1NlbGVjdG9yQ29t
cGlsZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nzc2ppdC9TZWxlY3RvckNvbXBpbGVyLmNw
cApAQCAtMTc1LDYgKzE3NSw3IEBAIHByaXZhdGU6CiAgICAgdm9pZCBnZW5lcmF0ZUVsZW1lbnRB
dHRyaWJ1dGVNYXRjaGluZyhBc3NlbWJsZXI6Okp1bXBMaXN0JiBmYWlsdXJlQ2FzZXMsIEFzc2Vt
Ymxlcjo6UmVnaXN0ZXJJRCBjdXJyZW50QXR0cmlidXRlQWRkcmVzcywgQXNzZW1ibGVyOjpSZWdp
c3RlcklEIGRlY0luZGV4UmVnaXN0ZXIsIGNvbnN0IEF0dHJpYnV0ZU1hdGNoaW5nSW5mbyYgYXR0
cmlidXRlSW5mbyk7CiAgICAgdm9pZCBnZW5lcmF0ZUVsZW1lbnRBdHRyaWJ1dGVWYWx1ZU1hdGNo
aW5nKEFzc2VtYmxlcjo6SnVtcExpc3QmIGZhaWx1cmVDYXNlcywgQXNzZW1ibGVyOjpSZWdpc3Rl
cklEIGN1cnJlbnRBdHRyaWJ1dGVBZGRyZXNzLCBjb25zdCBBdHRyaWJ1dGVNYXRjaGluZ0luZm8m
IGF0dHJpYnV0ZUluZm8pOwogICAgIHZvaWQgZ2VuZXJhdGVFbGVtZW50QXR0cmlidXRlVmFsdWVF
eGFjdE1hdGNoaW5nKEFzc2VtYmxlcjo6SnVtcExpc3QmIGZhaWx1cmVDYXNlcywgQXNzZW1ibGVy
OjpSZWdpc3RlcklEIGN1cnJlbnRBdHRyaWJ1dGVBZGRyZXNzLCBjb25zdCBBdG9taWNTdHJpbmcm
IGV4cGVjdGVkVmFsdWUsIGJvb2wgY2FzZVNlbnNpdGl2ZSk7CisgICAgdm9pZCBnZW5lcmF0ZUVs
ZW1lbnRBdHRyaWJ1dGVGdW5jdGlvbkNhbGxWYWx1ZU1hdGNoaW5nKEFzc2VtYmxlcjo6SnVtcExp
c3QmIGZhaWx1cmVDYXNlcywgQXNzZW1ibGVyOjpSZWdpc3RlcklEIGN1cnJlbnRBdHRyaWJ1dGVB
ZGRyZXNzLCBjb25zdCBBdG9taWNTdHJpbmcmIGV4cGVjdGVkVmFsdWUsIGJvb2wgY2FzZVNlbnNp
dGl2ZSwgSlNDOjpGdW5jdGlvblB0ciBjYXNlU2Vuc2l0aXZlVGVzdCwgSlNDOjpGdW5jdGlvblB0
ciBjYXNlSW5zZW5zaXRpdmVUZXN0KTsKICAgICB2b2lkIGdlbmVyYXRlRWxlbWVudEhhc1RhZ05h
bWUoQXNzZW1ibGVyOjpKdW1wTGlzdCYgZmFpbHVyZUNhc2VzLCBjb25zdCBRdWFsaWZpZWROYW1l
JiBuYW1lVG9NYXRjaCk7CiAgICAgdm9pZCBnZW5lcmF0ZUVsZW1lbnRIYXNJZChBc3NlbWJsZXI6
Okp1bXBMaXN0JiBmYWlsdXJlQ2FzZXMsIGNvbnN0IExvY2FsUmVnaXN0ZXImIGVsZW1lbnREYXRh
QWRkcmVzcywgY29uc3QgQXRvbWljU3RyaW5nJiBpZFRvTWF0Y2gpOwogICAgIHZvaWQgZ2VuZXJh
dGVFbGVtZW50SGFzQ2xhc3NlcyhBc3NlbWJsZXI6Okp1bXBMaXN0JiBmYWlsdXJlQ2FzZXMsIGNv
bnN0IExvY2FsUmVnaXN0ZXImIGVsZW1lbnREYXRhQWRkcmVzcywgY29uc3QgVmVjdG9yPGNvbnN0
IEF0b21pY1N0cmluZ0ltcGwqPiYgY2xhc3NOYW1lcyk7CkBAIC0zNDgsMTkgKzM0OSwyOSBAQCBp
bmxpbmUgU2VsZWN0b3JDb2RlR2VuZXJhdG9yOjpTZWxlY3RvckNvZGVHZW5lcmF0b3IoY29uc3Qg
Q1NTU2VsZWN0b3IqIHJvb3RTZWxlYwogICAgICAgICAgICAgaWYgKG1fZnVuY3Rpb25UeXBlID09
IEZ1bmN0aW9uVHlwZTo6Q2Fubm90Q29tcGlsZSB8fCBtX2Z1bmN0aW9uVHlwZSA9PSBGdW5jdGlv
blR5cGU6OkNhbm5vdE1hdGNoQW55dGhpbmcpCiAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgQ1NTU2VsZWN0b3I6Okxpc3Q6CisgICAgICAg
ICAgICBpZiAoc2VsZWN0b3ItPnZhbHVlKCkuY29udGFpbnMoJyAnKSkgeworICAgICAgICAgICAg
ICAgIG1fZnVuY3Rpb25UeXBlID0gRnVuY3Rpb25UeXBlOjpDYW5ub3RNYXRjaEFueXRoaW5nOwor
ICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIEZBTExU
SFJPVUdIOworICAgICAgICBjYXNlIENTU1NlbGVjdG9yOjpCZWdpbjoKKyAgICAgICAgY2FzZSBD
U1NTZWxlY3Rvcjo6RW5kOgorICAgICAgICBjYXNlIENTU1NlbGVjdG9yOjpDb250YWluOgorICAg
ICAgICAgICAgaWYgKHNlbGVjdG9yLT52YWx1ZSgpLmlzRW1wdHkoKSkgeworICAgICAgICAgICAg
ICAgIG1fZnVuY3Rpb25UeXBlID0gRnVuY3Rpb25UeXBlOjpDYW5ub3RNYXRjaEFueXRoaW5nOwor
ICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIEZBTExU
SFJPVUdIOwogICAgICAgICBjYXNlIENTU1NlbGVjdG9yOjpFeGFjdDoKKyAgICAgICAgY2FzZSBD
U1NTZWxlY3Rvcjo6SHlwaGVuOgogICAgICAgICAgICAgZnJhZ21lbnQuYXR0cmlidXRlcy5hcHBl
bmQoQXR0cmlidXRlTWF0Y2hpbmdJbmZvKHNlbGVjdG9yLCBIVE1MRG9jdW1lbnQ6OmlzQ2FzZVNl
bnNpdGl2ZUF0dHJpYnV0ZShzZWxlY3Rvci0+YXR0cmlidXRlKCkpKSk7CiAgICAgICAgICAgICBi
cmVhazsKICAgICAgICAgY2FzZSBDU1NTZWxlY3Rvcjo6U2V0OgogICAgICAgICAgICAgZnJhZ21l
bnQuYXR0cmlidXRlcy5hcHBlbmQoQXR0cmlidXRlTWF0Y2hpbmdJbmZvKHNlbGVjdG9yLCB0cnVl
KSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBDU1NTZWxlY3Rvcjo6VW5rbm93
bjoKLSAgICAgICAgY2FzZSBDU1NTZWxlY3Rvcjo6TGlzdDoKLSAgICAgICAgY2FzZSBDU1NTZWxl
Y3Rvcjo6SHlwaGVuOgogICAgICAgICBjYXNlIENTU1NlbGVjdG9yOjpQc2V1ZG9FbGVtZW50Ogot
ICAgICAgICBjYXNlIENTU1NlbGVjdG9yOjpDb250YWluOgotICAgICAgICBjYXNlIENTU1NlbGVj
dG9yOjpCZWdpbjoKLSAgICAgICAgY2FzZSBDU1NTZWxlY3Rvcjo6RW5kOgogICAgICAgICBjYXNl
IENTU1NlbGVjdG9yOjpQYWdlUHNldWRvQ2xhc3M6CiAgICAgICAgICAgICBnb3RvIENhbm5vdEhh
bmRsZVNlbGVjdG9yOwogICAgICAgICB9CkBAIC0xMTgxLDE3ICsxMTkyLDExMiBAQCB2b2lkIFNl
bGVjdG9yQ29kZUdlbmVyYXRvcjo6Z2VuZXJhdGVFbGVtZW50QXR0cmlidXRlTWF0Y2hpbmcoQXNz
ZW1ibGVyOjpKdW1wTGlzdAogICAgIGxvY2FsRmFpbHVyZUNhc2VzLmxpbmtUbyhsb29wUmVFbnRy
eSwgJm1fYXNzZW1ibGVyKTsKIH0KIAorZW51bSBDYXNlU2Vuc2l0aXZpdHkgeworICAgIENhc2VT
ZW5zaXRpdmUsCisgICAgQ2FzZUluc2Vuc2l0aXZlCit9OworCit0ZW1wbGF0ZTxDYXNlU2Vuc2l0
aXZpdHkgY2FzZVNlbnNpdGl2aXR5Pgorc3RhdGljIGJvb2wgYXR0cmlidXRlVmFsdWVCZWdpbnNX
aXRoKGNvbnN0IEF0dHJpYnV0ZSogYXR0cmlidXRlLCBBdG9taWNTdHJpbmdJbXBsKiBleHBlY3Rl
ZFN0cmluZykKK3sKKyAgICBBdG9taWNTdHJpbmdJbXBsJiB2YWx1ZUltcGwgPSAqYXR0cmlidXRl
LT52YWx1ZSgpLmltcGwoKTsKKyAgICBpZiAoY2FzZVNlbnNpdGl2aXR5ID09IENhc2VTZW5zaXRp
dmUpCisgICAgICAgIHJldHVybiB2YWx1ZUltcGwuc3RhcnRzV2l0aChleHBlY3RlZFN0cmluZyk7
CisgICAgcmV0dXJuIHZhbHVlSW1wbC5zdGFydHNXaXRoKGV4cGVjdGVkU3RyaW5nLCBmYWxzZSk7
Cit9CisKK3RlbXBsYXRlPENhc2VTZW5zaXRpdml0eSBjYXNlU2Vuc2l0aXZpdHk+CitzdGF0aWMg
Ym9vbCBhdHRyaWJ1dGVWYWx1ZUNvbnRhaW5zKGNvbnN0IEF0dHJpYnV0ZSogYXR0cmlidXRlLCBB
dG9taWNTdHJpbmdJbXBsKiBleHBlY3RlZFN0cmluZykKK3sKKyAgICBBdG9taWNTdHJpbmdJbXBs
JiB2YWx1ZUltcGwgPSAqYXR0cmlidXRlLT52YWx1ZSgpLmltcGwoKTsKKyAgICBpZiAoY2FzZVNl
bnNpdGl2aXR5ID09IENhc2VTZW5zaXRpdmUpCisgICAgICAgIHJldHVybiB2YWx1ZUltcGwuZmlu
ZChleHBlY3RlZFN0cmluZykgIT0gbm90Rm91bmQ7CisgICAgcmV0dXJuIHZhbHVlSW1wbC5maW5k
SWdub3JpbmdDYXNlKGV4cGVjdGVkU3RyaW5nKSAhPSBub3RGb3VuZDsKK30KKwordGVtcGxhdGU8
Q2FzZVNlbnNpdGl2aXR5IGNhc2VTZW5zaXRpdml0eT4KK3N0YXRpYyBib29sIGF0dHJpYnV0ZVZh
bHVlRW5kc1dpdGgoY29uc3QgQXR0cmlidXRlKiBhdHRyaWJ1dGUsIEF0b21pY1N0cmluZ0ltcGwq
IGV4cGVjdGVkU3RyaW5nKQoreworICAgIEF0b21pY1N0cmluZ0ltcGwmIHZhbHVlSW1wbCA9ICph
dHRyaWJ1dGUtPnZhbHVlKCkuaW1wbCgpOworICAgIGlmIChjYXNlU2Vuc2l0aXZpdHkgPT0gQ2Fz
ZVNlbnNpdGl2ZSkKKyAgICAgICAgcmV0dXJuIHZhbHVlSW1wbC5lbmRzV2l0aChleHBlY3RlZFN0
cmluZyk7CisgICAgcmV0dXJuIHZhbHVlSW1wbC5lbmRzV2l0aChleHBlY3RlZFN0cmluZywgZmFs
c2UpOworfQorCit0ZW1wbGF0ZTxDYXNlU2Vuc2l0aXZpdHkgY2FzZVNlbnNpdGl2aXR5Pgorc3Rh
dGljIGJvb2wgYXR0cmlidXRlVmFsdWVNYXRjaEh5cGhlblJ1bGUoY29uc3QgQXR0cmlidXRlKiBh
dHRyaWJ1dGUsIEF0b21pY1N0cmluZ0ltcGwqIGV4cGVjdGVkU3RyaW5nKQoreworICAgIEF0b21p
Y1N0cmluZ0ltcGwmIHZhbHVlSW1wbCA9ICphdHRyaWJ1dGUtPnZhbHVlKCkuaW1wbCgpOworICAg
IGlmICh2YWx1ZUltcGwubGVuZ3RoKCkgPCBleHBlY3RlZFN0cmluZy0+bGVuZ3RoKCkpCisgICAg
ICAgIHJldHVybiBmYWxzZTsKKworICAgIGJvb2wgdmFsdWVTdGFydHNXaXRoRXhwZWN0ZWRTdHJp
bmc7CisgICAgaWYgKGNhc2VTZW5zaXRpdml0eSA9PSBDYXNlU2Vuc2l0aXZlKQorICAgICAgICB2
YWx1ZVN0YXJ0c1dpdGhFeHBlY3RlZFN0cmluZyA9IHZhbHVlSW1wbC5zdGFydHNXaXRoKGV4cGVj
dGVkU3RyaW5nKTsKKyAgICBlbHNlCisgICAgICAgIHZhbHVlU3RhcnRzV2l0aEV4cGVjdGVkU3Ry
aW5nID0gdmFsdWVJbXBsLnN0YXJ0c1dpdGgoZXhwZWN0ZWRTdHJpbmcsIGZhbHNlKTsKKworICAg
IGlmICghdmFsdWVTdGFydHNXaXRoRXhwZWN0ZWRTdHJpbmcpCisgICAgICAgIHJldHVybiBmYWxz
ZTsKKworICAgIHJldHVybiB2YWx1ZUltcGwubGVuZ3RoKCkgPT0gZXhwZWN0ZWRTdHJpbmctPmxl
bmd0aCgpIHx8IHZhbHVlSW1wbFtleHBlY3RlZFN0cmluZy0+bGVuZ3RoKCldID09ICctJzsKK30K
KwordGVtcGxhdGU8Q2FzZVNlbnNpdGl2aXR5IGNhc2VTZW5zaXRpdml0eT4KK3N0YXRpYyBib29s
IGF0dHJpYnV0ZVZhbHVlU3BhY2VTZXBhcmV0ZWRMaXN0Q29udGFpbnMoY29uc3QgQXR0cmlidXRl
KiBhdHRyaWJ1dGUsIEF0b21pY1N0cmluZ0ltcGwqIGV4cGVjdGVkU3RyaW5nKQoreworICAgIEF0
b21pY1N0cmluZ0ltcGwmIHZhbHVlID0gKmF0dHJpYnV0ZS0+dmFsdWUoKS5pbXBsKCk7CisKKyAg
ICB1bnNpZ25lZCBzdGFydFNlYXJjaEF0ID0gMDsKKyAgICB3aGlsZSAodHJ1ZSkgeworICAgICAg
ICBzaXplX3QgZm91bmRQb3M7CisgICAgICAgIGlmIChjYXNlU2Vuc2l0aXZpdHkgPT0gQ2FzZVNl
bnNpdGl2ZSkKKyAgICAgICAgICAgIGZvdW5kUG9zID0gdmFsdWUuZmluZChleHBlY3RlZFN0cmlu
Zywgc3RhcnRTZWFyY2hBdCk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGZvdW5kUG9zID0g
dmFsdWUuZmluZElnbm9yaW5nQ2FzZShleHBlY3RlZFN0cmluZywgc3RhcnRTZWFyY2hBdCk7Cisg
ICAgICAgIGlmIChmb3VuZFBvcyA9PSBub3RGb3VuZCkKKyAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICAgICAgaWYgKCFmb3VuZFBvcyB8fCB2YWx1ZVtmb3VuZFBvcyAtIDFdID09ICcgJykg
eworICAgICAgICAgICAgdW5zaWduZWQgZW5kU3RyID0gZm91bmRQb3MgKyBleHBlY3RlZFN0cmlu
Zy0+bGVuZ3RoKCk7CisgICAgICAgICAgICBpZiAoZW5kU3RyID09IHZhbHVlLmxlbmd0aCgpIHx8
IHZhbHVlW2VuZFN0cl0gPT0gJyAnKQorICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOworICAg
ICAgICB9CisgICAgICAgIHN0YXJ0U2VhcmNoQXQgPSBmb3VuZFBvcyArIDE7CisgICAgfQorICAg
IHJldHVybiBmYWxzZTsKK30KKwogdm9pZCBTZWxlY3RvckNvZGVHZW5lcmF0b3I6OmdlbmVyYXRl
RWxlbWVudEF0dHJpYnV0ZVZhbHVlTWF0Y2hpbmcoQXNzZW1ibGVyOjpKdW1wTGlzdCYgZmFpbHVy
ZUNhc2VzLCBBc3NlbWJsZXI6OlJlZ2lzdGVySUQgY3VycmVudEF0dHJpYnV0ZUFkZHJlc3MsIGNv
bnN0IEF0dHJpYnV0ZU1hdGNoaW5nSW5mbyYgYXR0cmlidXRlSW5mbykKIHsKICAgICBjb25zdCBD
U1NTZWxlY3RvciYgYXR0cmlidXRlU2VsZWN0b3IgPSBhdHRyaWJ1dGVJbmZvLnNlbGVjdG9yKCk7
Ci0gICAgaWYgKGF0dHJpYnV0ZVNlbGVjdG9yLm1fbWF0Y2ggPT0gQ1NTU2VsZWN0b3I6OlNldCkK
LSAgICAgICAgcmV0dXJuOwotCiAgICAgY29uc3QgQXRvbWljU3RyaW5nJiBleHBlY3RlZFZhbHVl
ID0gYXR0cmlidXRlU2VsZWN0b3IudmFsdWUoKTsKICAgICBBU1NFUlQoIWV4cGVjdGVkVmFsdWUu
aXNOdWxsKCkpOworICAgIGJvb2wgZGVmYXVsdFRvQ2FzZVNlbnNpdGl2ZVZhbHVlTWF0Y2ggPSBh
dHRyaWJ1dGVJbmZvLmNhbkRlZmF1bHRUb0Nhc2VTZW5zaXRpdmVWYWx1ZU1hdGNoKCk7CiAKLSAg
ICBSRUxFQVNFX0FTU0VSVChhdHRyaWJ1dGVTZWxlY3Rvci5tX21hdGNoID09IENTU1NlbGVjdG9y
OjpFeGFjdCk7Ci0gICAgZ2VuZXJhdGVFbGVtZW50QXR0cmlidXRlVmFsdWVFeGFjdE1hdGNoaW5n
KGZhaWx1cmVDYXNlcywgY3VycmVudEF0dHJpYnV0ZUFkZHJlc3MsIGV4cGVjdGVkVmFsdWUsIGF0
dHJpYnV0ZUluZm8uY2FuRGVmYXVsdFRvQ2FzZVNlbnNpdGl2ZVZhbHVlTWF0Y2goKSk7CisgICAg
c3dpdGNoIChhdHRyaWJ1dGVTZWxlY3Rvci5tX21hdGNoKSB7CisgICAgY2FzZSBDU1NTZWxlY3Rv
cjo6QmVnaW46CisgICAgICAgIGdlbmVyYXRlRWxlbWVudEF0dHJpYnV0ZUZ1bmN0aW9uQ2FsbFZh
bHVlTWF0Y2hpbmcoZmFpbHVyZUNhc2VzLCBjdXJyZW50QXR0cmlidXRlQWRkcmVzcywgZXhwZWN0
ZWRWYWx1ZSwgZGVmYXVsdFRvQ2FzZVNlbnNpdGl2ZVZhbHVlTWF0Y2gsIGF0dHJpYnV0ZVZhbHVl
QmVnaW5zV2l0aDxDYXNlU2Vuc2l0aXZlPiwgYXR0cmlidXRlVmFsdWVCZWdpbnNXaXRoPENhc2VJ
bnNlbnNpdGl2ZT4pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIENTU1NlbGVjdG9yOjpDb250
YWluOgorICAgICAgICBnZW5lcmF0ZUVsZW1lbnRBdHRyaWJ1dGVGdW5jdGlvbkNhbGxWYWx1ZU1h
dGNoaW5nKGZhaWx1cmVDYXNlcywgY3VycmVudEF0dHJpYnV0ZUFkZHJlc3MsIGV4cGVjdGVkVmFs
dWUsIGRlZmF1bHRUb0Nhc2VTZW5zaXRpdmVWYWx1ZU1hdGNoLCBhdHRyaWJ1dGVWYWx1ZUNvbnRh
aW5zPENhc2VTZW5zaXRpdmU+LCBhdHRyaWJ1dGVWYWx1ZUNvbnRhaW5zPENhc2VJbnNlbnNpdGl2
ZT4pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIENTU1NlbGVjdG9yOjpFbmQ6CisgICAgICAg
IGdlbmVyYXRlRWxlbWVudEF0dHJpYnV0ZUZ1bmN0aW9uQ2FsbFZhbHVlTWF0Y2hpbmcoZmFpbHVy
ZUNhc2VzLCBjdXJyZW50QXR0cmlidXRlQWRkcmVzcywgZXhwZWN0ZWRWYWx1ZSwgZGVmYXVsdFRv
Q2FzZVNlbnNpdGl2ZVZhbHVlTWF0Y2gsIGF0dHJpYnV0ZVZhbHVlRW5kc1dpdGg8Q2FzZVNlbnNp
dGl2ZT4sIGF0dHJpYnV0ZVZhbHVlRW5kc1dpdGg8Q2FzZUluc2Vuc2l0aXZlPik7CisgICAgICAg
IGJyZWFrOworICAgIGNhc2UgQ1NTU2VsZWN0b3I6OkV4YWN0OgorICAgICAgICBnZW5lcmF0ZUVs
ZW1lbnRBdHRyaWJ1dGVWYWx1ZUV4YWN0TWF0Y2hpbmcoZmFpbHVyZUNhc2VzLCBjdXJyZW50QXR0
cmlidXRlQWRkcmVzcywgZXhwZWN0ZWRWYWx1ZSwgZGVmYXVsdFRvQ2FzZVNlbnNpdGl2ZVZhbHVl
TWF0Y2gpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIENTU1NlbGVjdG9yOjpIeXBoZW46Cisg
ICAgICAgIGdlbmVyYXRlRWxlbWVudEF0dHJpYnV0ZUZ1bmN0aW9uQ2FsbFZhbHVlTWF0Y2hpbmco
ZmFpbHVyZUNhc2VzLCBjdXJyZW50QXR0cmlidXRlQWRkcmVzcywgZXhwZWN0ZWRWYWx1ZSwgZGVm
YXVsdFRvQ2FzZVNlbnNpdGl2ZVZhbHVlTWF0Y2gsIGF0dHJpYnV0ZVZhbHVlTWF0Y2hIeXBoZW5S
dWxlPENhc2VTZW5zaXRpdmU+LCBhdHRyaWJ1dGVWYWx1ZU1hdGNoSHlwaGVuUnVsZTxDYXNlSW5z
ZW5zaXRpdmU+KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBDU1NTZWxlY3Rvcjo6TGlzdDoK
KyAgICAgICAgZ2VuZXJhdGVFbGVtZW50QXR0cmlidXRlRnVuY3Rpb25DYWxsVmFsdWVNYXRjaGlu
ZyhmYWlsdXJlQ2FzZXMsIGN1cnJlbnRBdHRyaWJ1dGVBZGRyZXNzLCBleHBlY3RlZFZhbHVlLCBk
ZWZhdWx0VG9DYXNlU2Vuc2l0aXZlVmFsdWVNYXRjaCwgYXR0cmlidXRlVmFsdWVTcGFjZVNlcGFy
ZXRlZExpc3RDb250YWluczxDYXNlU2Vuc2l0aXZlPiwgYXR0cmlidXRlVmFsdWVTcGFjZVNlcGFy
ZXRlZExpc3RDb250YWluczxDYXNlSW5zZW5zaXRpdmU+KTsKKyAgICAgICAgYnJlYWs7CisgICAg
Y2FzZSBDU1NTZWxlY3Rvcjo6U2V0OgorICAgICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAg
ICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICB9CiB9CiAKIHN0YXRpYyBpbmxpbmUgQXNz
ZW1ibGVyOjpKdW1wIHRlc3RJc0hUTUxDbGFzc09uRG9jdW1lbnQoQXNzZW1ibGVyOjpSZXN1bHRD
b25kaXRpb24gY29uZGl0aW9uLCBBc3NlbWJsZXImIGFzc2VtYmxlciwgQXNzZW1ibGVyOjpSZWdp
c3RlcklEIGRvY3VtZW50QWRkcmVzcykKQEAgLTEyMzUsNiArMTM0MSw0OSBAQCB2b2lkIFNlbGVj
dG9yQ29kZUdlbmVyYXRvcjo6Z2VuZXJhdGVFbGVtZW50QXR0cmlidXRlVmFsdWVFeGFjdE1hdGNo
aW5nKEFzc2VtYmxlcgogICAgIH0KIH0KIAordm9pZCBTZWxlY3RvckNvZGVHZW5lcmF0b3I6Omdl
bmVyYXRlRWxlbWVudEF0dHJpYnV0ZUZ1bmN0aW9uQ2FsbFZhbHVlTWF0Y2hpbmcoQXNzZW1ibGVy
OjpKdW1wTGlzdCYgZmFpbHVyZUNhc2VzLCBBc3NlbWJsZXI6OlJlZ2lzdGVySUQgY3VycmVudEF0
dHJpYnV0ZUFkZHJlc3MsIGNvbnN0IEF0b21pY1N0cmluZyYgZXhwZWN0ZWRWYWx1ZSwgYm9vbCBj
YW5EZWZhdWx0VG9DYXNlU2Vuc2l0aXZlVmFsdWVNYXRjaCwgSlNDOjpGdW5jdGlvblB0ciBjYXNl
U2Vuc2l0aXZlVGVzdCwgSlNDOjpGdW5jdGlvblB0ciBjYXNlSW5zZW5zaXRpdmVUZXN0KQorewor
ICAgIExvY2FsUmVnaXN0ZXIgZXhwZWN0ZWRWYWx1ZVJlZ2lzdGVyKG1fcmVnaXN0ZXJBbGxvY2F0
b3IpOworICAgIG1fYXNzZW1ibGVyLm1vdmUoQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKGV4cGVj
dGVkVmFsdWUuaW1wbCgpKSwgZXhwZWN0ZWRWYWx1ZVJlZ2lzdGVyKTsKKworICAgIGlmIChjYW5E
ZWZhdWx0VG9DYXNlU2Vuc2l0aXZlVmFsdWVNYXRjaCkgeworICAgICAgICBGdW5jdGlvbkNhbGwg
ZnVuY3Rpb25DYWxsKG1fYXNzZW1ibGVyLCBtX3JlZ2lzdGVyQWxsb2NhdG9yLCBtX3N0YWNrQWxs
b2NhdG9yLCBtX2Z1bmN0aW9uQ2FsbHMpOworICAgICAgICBmdW5jdGlvbkNhbGwuc2V0RnVuY3Rp
b25BZGRyZXNzKGNhc2VTZW5zaXRpdmVUZXN0KTsKKyAgICAgICAgZnVuY3Rpb25DYWxsLnNldFR3
b0FyZ3VtZW50cyhjdXJyZW50QXR0cmlidXRlQWRkcmVzcywgZXhwZWN0ZWRWYWx1ZVJlZ2lzdGVy
KTsKKyAgICAgICAgZmFpbHVyZUNhc2VzLmFwcGVuZChmdW5jdGlvbkNhbGwuY2FsbEFuZEJyYW5j
aE9uQ29uZGl0aW9uKEFzc2VtYmxlcjo6WmVybykpOworICAgIH0gZWxzZSB7CisgICAgICAgIEFz
c2VtYmxlcjo6SnVtcExpc3Qgc2hvdWxkVXNlQ2FzZVNlbnNpdGl2ZUNvbXBhcmlzb247CisgICAg
ICAgIHNob3VsZFVzZUNhc2VTZW5zaXRpdmVDb21wYXJpc29uLmFwcGVuZCh0ZXN0SXNIVE1MRmxh
Z09uTm9kZShBc3NlbWJsZXI6Olplcm8sIG1fYXNzZW1ibGVyLCBlbGVtZW50QWRkcmVzc1JlZ2lz
dGVyKSk7CisgICAgICAgIHsKKyAgICAgICAgICAgIExvY2FsUmVnaXN0ZXIgc2NyYXRjaFJlZ2lz
dGVyKG1fcmVnaXN0ZXJBbGxvY2F0b3IpOworICAgICAgICAgICAgLy8gc2NyYXRjaFJlZ2lzdGVy
ID0gcG9pbnRlciB0byB0cmVlU2NvcGUuCisgICAgICAgICAgICBtX2Fzc2VtYmxlci5sb2FkUHRy
KEFzc2VtYmxlcjo6QWRkcmVzcyhlbGVtZW50QWRkcmVzc1JlZ2lzdGVyLCBOb2RlOjp0cmVlU2Nv
cGVNZW1vcnlPZmZzZXQoKSksIHNjcmF0Y2hSZWdpc3Rlcik7CisgICAgICAgICAgICAvLyBzY3Jh
dGNoUmVnaXN0ZXIgPSBwb2ludGVyIHRvIGRvY3VtZW50LgorICAgICAgICAgICAgbV9hc3NlbWJs
ZXIubG9hZFB0cihBc3NlbWJsZXI6OkFkZHJlc3Moc2NyYXRjaFJlZ2lzdGVyLCBUcmVlU2NvcGU6
OmRvY3VtZW50U2NvcGVNZW1vcnlPZmZzZXQoKSksIHNjcmF0Y2hSZWdpc3Rlcik7CisgICAgICAg
ICAgICBzaG91bGRVc2VDYXNlU2Vuc2l0aXZlQ29tcGFyaXNvbi5hcHBlbmQodGVzdElzSFRNTENs
YXNzT25Eb2N1bWVudChBc3NlbWJsZXI6Olplcm8sIG1fYXNzZW1ibGVyLCBzY3JhdGNoUmVnaXN0
ZXIpKTsKKyAgICAgICAgfQorCisgICAgICAgIHsKKyAgICAgICAgICAgIEZ1bmN0aW9uQ2FsbCBm
dW5jdGlvbkNhbGwobV9hc3NlbWJsZXIsIG1fcmVnaXN0ZXJBbGxvY2F0b3IsIG1fc3RhY2tBbGxv
Y2F0b3IsIG1fZnVuY3Rpb25DYWxscyk7CisgICAgICAgICAgICBmdW5jdGlvbkNhbGwuc2V0RnVu
Y3Rpb25BZGRyZXNzKGNhc2VJbnNlbnNpdGl2ZVRlc3QpOworICAgICAgICAgICAgZnVuY3Rpb25D
YWxsLnNldFR3b0FyZ3VtZW50cyhjdXJyZW50QXR0cmlidXRlQWRkcmVzcywgZXhwZWN0ZWRWYWx1
ZVJlZ2lzdGVyKTsKKyAgICAgICAgICAgIGZhaWx1cmVDYXNlcy5hcHBlbmQoZnVuY3Rpb25DYWxs
LmNhbGxBbmRCcmFuY2hPbkNvbmRpdGlvbihBc3NlbWJsZXI6Olplcm8pKTsKKyAgICAgICAgfQor
CisgICAgICAgIEFzc2VtYmxlcjo6SnVtcCBza2lwQ2FzZVNlbnNpdGl2ZUNhc2UgPSBtX2Fzc2Vt
Ymxlci5qdW1wKCk7CisKKyAgICAgICAgeworICAgICAgICAgICAgc2hvdWxkVXNlQ2FzZVNlbnNp
dGl2ZUNvbXBhcmlzb24ubGluaygmbV9hc3NlbWJsZXIpOworICAgICAgICAgICAgRnVuY3Rpb25D
YWxsIGZ1bmN0aW9uQ2FsbChtX2Fzc2VtYmxlciwgbV9yZWdpc3RlckFsbG9jYXRvciwgbV9zdGFj
a0FsbG9jYXRvciwgbV9mdW5jdGlvbkNhbGxzKTsKKyAgICAgICAgICAgIGZ1bmN0aW9uQ2FsbC5z
ZXRGdW5jdGlvbkFkZHJlc3MoY2FzZVNlbnNpdGl2ZVRlc3QpOworICAgICAgICAgICAgZnVuY3Rp
b25DYWxsLnNldFR3b0FyZ3VtZW50cyhjdXJyZW50QXR0cmlidXRlQWRkcmVzcywgZXhwZWN0ZWRW
YWx1ZVJlZ2lzdGVyKTsKKyAgICAgICAgICAgIGZhaWx1cmVDYXNlcy5hcHBlbmQoZnVuY3Rpb25D
YWxsLmNhbGxBbmRCcmFuY2hPbkNvbmRpdGlvbihBc3NlbWJsZXI6Olplcm8pKTsKKyAgICAgICAg
fQorCisgICAgICAgIHNraXBDYXNlU2Vuc2l0aXZlQ2FzZS5saW5rKCZtX2Fzc2VtYmxlcik7Cisg
ICAgfQorfQorCiB2b2lkIFNlbGVjdG9yQ29kZUdlbmVyYXRvcjo6Z2VuZXJhdGVFbGVtZW50RnVu
Y3Rpb25DYWxsVGVzdChBc3NlbWJsZXI6Okp1bXBMaXN0JiBmYWlsdXJlQ2FzZXMsIEpTQzo6RnVu
Y3Rpb25QdHIgdGVzdEZ1bmN0aW9uKQogewogICAgIEFzc2VtYmxlcjo6UmVnaXN0ZXJJRCBlbGVt
ZW50QWRkcmVzcyA9IGVsZW1lbnRBZGRyZXNzUmVnaXN0ZXI7Cg==
</data>
<flag name="review"
          id="249751"
          type_id="1"
          status="+"
          setter="darin"
    />
          </attachment>
      

    </bug>

</bugzilla>