<?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>154977</bug_id>
          
          <creation_ts>2016-03-03 11:31:11 -0800</creation_ts>
          <short_desc>Add support for the &quot;last&quot; value of the CSS3 hanging-punctuation property</short_desc>
          <delta_ts>2016-08-21 20:34:04 -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>Layout and Rendering</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          <see_also>https://bugs.webkit.org/show_bug.cgi?id=155899</see_also>
          <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="Dave Hyatt">hyatt</reporter>
          <assigned_to name="Dave Hyatt">hyatt</assigned_to>
          <cc>50167214</cc>
    
    <cc>commit-queue</cc>
    
    <cc>esprehn+autocc</cc>
    
    <cc>glenn</cc>
    
    <cc>kondapallykalyan</cc>
    
    <cc>mmaxfield</cc>
    
    <cc>simon.fraser</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1170291</commentid>
    <comment_count>0</comment_count>
    <who name="Dave Hyatt">hyatt</who>
    <bug_when>2016-03-03 11:31:11 -0800</bug_when>
    <thetext>Add support for the &quot;last&quot; value of the CSS3 hanging-punctuation property</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1170293</commentid>
    <comment_count>1</comment_count>
      <attachid>272767</attachid>
    <who name="Dave Hyatt">hyatt</who>
    <bug_when>2016-03-03 11:34:54 -0800</bug_when>
    <thetext>Created attachment 272767
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1170296</commentid>
    <comment_count>2</comment_count>
      <attachid>272767</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2016-03-03 11:45:27 -0800</bug_when>
    <thetext>Comment on attachment 272767
Patch

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

&gt; Source/WebCore/rendering/RenderBlockLineLayout.cpp:876
&gt; +                float hangEndWidth = renderText.hangablePunctuationEndWidth(run-&gt;m_stop - 1);

Is this right when the character just before run-&gt;m_stop is a surrogate pair? If not, we should write a simple function that handles that correctly.

&gt; Source/WebCore/rendering/RenderText.cpp:542
&gt; +    // FIXME: We can&apos;t hardcode &quot;textLength() - 1&quot; here, since the
&gt; +    // stripping of trailing spaces at the end of a text run could
&gt; +    // cause a character other than the last one to be the one to

Missing the end of this sentence.

Also, there is more than one reason we can’t hardcode textLength() - 1.

&gt; Source/WebCore/rendering/RenderText.cpp:564
&gt; +        if (text[i] != &apos; &apos; &amp;&amp; (text[i] != &apos;\n&apos; || style().preserveNewline()) &amp;&amp; text[i] != &apos;\t&apos;)
&gt; +            break;

I’d be tempted to factor this predicate out into an inline helper function member that takes a character. Just so it’s not repeated.

&gt; Source/WebCore/rendering/RenderText.cpp:575
&gt; +        return textLength() - 1;

Is this right when the last character is a surrogate pair? If not, we should write a simple function that handles that correctly.

&gt; Source/WebCore/rendering/RenderText.cpp:580
&gt; +    int i = textLength() - 1;

Is this right when the last character is a surrogate pair? If not, we should write a simple function that handles that correctly.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1170299</commentid>
    <comment_count>3</comment_count>
      <attachid>272767</attachid>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2016-03-03 11:46:30 -0800</bug_when>
    <thetext>Comment on attachment 272767
Patch

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

&gt; Source/WebCore/rendering/RenderBlockFlow.cpp:4363
&gt; +        unsigned endIndex = trailingSpaceChild == lastText ? lastText-&gt;lastCharacterIndexStrippingSpaces() : lastText-&gt;textLength() - 1;

Do we know that lastText-&gt;textLength() &gt; 0?

&gt; Source/WebCore/rendering/RenderText.cpp:515
&gt; +float RenderText::hangablePunctuationStartWidth(int index) const

unsigned?

&gt; Source/WebCore/rendering/RenderText.cpp:532
&gt; +float RenderText::hangablePunctuationEndWidth(int index) const

unsigned index?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1170301</commentid>
    <comment_count>4</comment_count>
    <who name="Dave Hyatt">hyatt</who>
    <bug_when>2016-03-03 11:59:38 -0800</bug_when>
    <thetext>(In reply to comment #2)
&gt; 
&gt; Is this right when the character just before run-&gt;m_stop is a surrogate
&gt; pair? If not, we should write a simple function that handles that correctly.
&gt; 

It should not be an issue, since the hangable punctuation code tests the character at the index to see if it is in Ps/Pf/Pi categories, and so I believe surrogate pairs will fail that test.

&gt; &gt; Source/WebCore/rendering/RenderText.cpp:542
&gt; &gt; +    // FIXME: We can&apos;t hardcode &quot;textLength() - 1&quot; here, since the
&gt; &gt; +    // stripping of trailing spaces at the end of a text run could
&gt; &gt; +    // cause a character other than the last one to be the one to
&gt; 
&gt; Missing the end of this sentence.
&gt; 

Oh that comment no longer applies, since I removed the hardcoding. I will take it out.

&gt; Source/WebCore/rendering/RenderText.cpp:564
&gt; &gt; +        if (text[i] != &apos; &apos; &amp;&amp; (text[i] != &apos;\n&apos; || style().preserveNewline()) &amp;&amp; text[i] != &apos;\t&apos;)
&gt; &gt; +            break;
&gt; 
&gt; I’d be tempted to factor this predicate out into an inline helper function
&gt; member that takes a character. Just so it’s not repeated.
&gt;

We actually have a static helper in one of the files but it only tests the character at position 0. I could look into cleaning that up and letting it take an index.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1170321</commentid>
    <comment_count>5</comment_count>
    <who name="Dave Hyatt">hyatt</who>
    <bug_when>2016-03-03 13:49:42 -0800</bug_when>
    <thetext>Landed in r197519.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1170591</commentid>
    <comment_count>6</comment_count>
    <who name="yisibl">50167214</who>
    <bug_when>2016-03-04 08:17:14 -0800</bug_when>
    <thetext>(In reply to comment #5)
&gt; Landed in r197519.

Do you intend to support force-end and allow-end?

&gt; The allow-end and force-end are two variations of hanging punctuation used in East Asia.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>272767</attachid>
            <date>2016-03-03 11:34:54 -0800</date>
            <delta_ts>2016-03-03 11:45:27 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>patch.txt</filename>
            <type>text/plain</type>
            <size>23745</size>
            <attacher name="Dave Hyatt">hyatt</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE5NzUxMikKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDM0IEBACisyMDE2LTAzLTAzICBEYXZlIEh5
YXR0ICA8aHlhdHRAYXBwbGUuY29tPgorCisgICAgICAgIEFkZCBzdXBwb3J0IGZvciB0aGUgImxh
c3QiIHZhbHVlIG9mIGhhbmdpbmctcHVuY3R1YXRpb24KKyAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE1NDk3NworCisgICAgICAgIFJldmlld2VkIGJ5IE5P
Qk9EWSAoT09QUyEpLgorCisgICAgICAgIE5ldyB0ZXN0cyBpbiBmYXN0L3RleHQuCisKKyAgICAg
ICAgVGhpcyBwYXRjaCBhZGRzIHN1cHBvcnQgZm9yIHRoZSBuZXcgImxhc3QiIHZhbHVlIGFuZCBh
bHNvIGZpeGVzIHVwIGJvdGgKKyAgICAgICAgImZpcnN0IiBhbmQgImxhc3QiIHRvIHdvcmsgd2l0
aCBsZWFkaW5nIGFuZCB0cmFpbGluZyB3aGl0ZXNwYWNlIHRoYXQgZW5kcworICAgICAgICB1cCBn
ZXR0aW5nIGNvbGxhcHNlZCBhd2F5LgorCisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckJsb2Nr
Rmxvdy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9ja0Zsb3c6OmNvbXB1dGVJbmxp
bmVQcmVmZXJyZWRMb2dpY2FsV2lkdGhzKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyQmxv
Y2tMaW5lTGF5b3V0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmlubGluZUFuY2VzdG9ySGFzU3Rh
cnRCb3JkZXJQYWRkaW5nT3JNYXJnaW4pOgorICAgICAgICAoV2ViQ29yZTo6aW5saW5lQW5jZXN0
b3JIYXNFbmRCb3JkZXJQYWRkaW5nT3JNYXJnaW4pOgorICAgICAgICAoV2ViQ29yZTo6aXNMYXN0
SW5GbG93UnVuKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrRmxvdzo6Y29tcHV0ZUlu
bGluZURpcmVjdGlvblBvc2l0aW9uc0ZvclNlZ21lbnQpOgorICAgICAgICAqIHJlbmRlcmluZy9S
ZW5kZXJUZXh0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmlzSGFuZ2FibGVQdW5jdHVhdGlvbkF0
TGluZUVuZCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUZXh0OjpoYW5nYWJsZVB1bmN0dWF0
aW9uU3RhcnRXaWR0aCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUZXh0OjpoYW5nYWJsZVB1
bmN0dWF0aW9uRW5kV2lkdGgpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGV4dDo6Zmlyc3RD
aGFyYWN0ZXJJbmRleFN0cmlwcGluZ1NwYWNlcyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJU
ZXh0OjpsYXN0Q2hhcmFjdGVySW5kZXhTdHJpcHBpbmdTcGFjZXMpOgorICAgICAgICAoV2ViQ29y
ZTo6UmVuZGVyVGV4dDo6dHJpbW1lZFByZWZXaWR0aHMpOgorICAgICAgICAqIHJlbmRlcmluZy9S
ZW5kZXJUZXh0Lmg6CisgICAgICAgICogcmVuZGVyaW5nL2xpbmUvQnJlYWtpbmdDb250ZXh0Lmg6
CisgICAgICAgIChXZWJDb3JlOjpCcmVha2luZ0NvbnRleHQ6OmhhbmRsZVRleHQpOgorCiAyMDE2
LTAzLTAzICBNYW51ZWwgUmVnbyBDYXNhc25vdmFzICA8cmVnb0BpZ2FsaWEuY29tPgogCiAgICAg
ICAgIFtjc3MtZ3JpZF0gRml4IG9yZGVyIG9mIGdyaWQgc2hvcnRoYW5kcyBpbiBDU1NQcm9wZXJ0
eU5hbWVzLmluCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2tGbG93
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2tG
bG93LmNwcAkocmV2aXNpb24gMTk3NTA1KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlckJsb2NrRmxvdy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQwNjUsNiArNDA2NSw5IEBAIHZv
aWQgUmVuZGVyQmxvY2tGbG93Ojpjb21wdXRlSW5saW5lUHJlZmUKICAgICBib29sIGlzUHJldkNo
aWxkSW5saW5lRmxvdyA9IGZhbHNlOwogICAgIGJvb2wgc2hvdWxkQnJlYWtMaW5lQWZ0ZXJUZXh0
ID0gZmFsc2U7CiAgICAgYm9vbCBjYW5IYW5nUHVuY3R1YXRpb25BdFN0YXJ0ID0gc3R5bGVUb1Vz
ZS5oYW5naW5nUHVuY3R1YXRpb24oKSAmIEZpcnN0SGFuZ2luZ1B1bmN0dWF0aW9uOworICAgIGJv
b2wgY2FuSGFuZ1B1bmN0dWF0aW9uQXRFbmQgPSBzdHlsZVRvVXNlLmhhbmdpbmdQdW5jdHVhdGlv
bigpICYgTGFzdEhhbmdpbmdQdW5jdHVhdGlvbjsKKyAgICBSZW5kZXJUZXh0KiBsYXN0VGV4dCA9
IG51bGxwdHI7CisKICAgICBib29sIGFkZGVkU3RhcnRQdW5jdHVhdGlvbkhhbmcgPSBmYWxzZTsK
ICAgICAKICAgICB3aGlsZSAoUmVuZGVyT2JqZWN0KiBjaGlsZCA9IGNoaWxkSXRlcmF0b3IubmV4
dCgpKSB7CkBAIC00MTExLDYgKzQxMTQsNyBAQCB2b2lkIFJlbmRlckJsb2NrRmxvdzo6Y29tcHV0
ZUlubGluZVByZWZlCiAgICAgICAgICAgICBmbG9hdCBjaGlsZE1heCA9IDA7CiAKICAgICAgICAg
ICAgIGlmICghY2hpbGQtPmlzVGV4dCgpKSB7CisgICAgICAgICAgICAgICAgbGFzdFRleHQgPSBu
dWxscHRyOwogICAgICAgICAgICAgICAgIGlmIChjaGlsZC0+aXNMaW5lQnJlYWtPcHBvcnR1bml0
eSgpKSB7CiAgICAgICAgICAgICAgICAgICAgIG1pbkxvZ2ljYWxXaWR0aCA9IHByZWZlcnJlZFdp
ZHRoKG1pbkxvZ2ljYWxXaWR0aCwgaW5saW5lTWluKTsKICAgICAgICAgICAgICAgICAgICAgaW5s
aW5lTWluID0gMDsKQEAgLTQyMTcsNiArNDIyMSw3IEBAIHZvaWQgUmVuZGVyQmxvY2tGbG93Ojpj
b21wdXRlSW5saW5lUHJlZmUKICAgICAgICAgICAgICAgICBpZiAoIWNoaWxkLT5pc0Zsb2F0aW5n
KCkpIHsKICAgICAgICAgICAgICAgICAgICAgc3RyaXBGcm9udFNwYWNlcyA9IGZhbHNlOwogICAg
ICAgICAgICAgICAgICAgICB0cmFpbGluZ1NwYWNlQ2hpbGQgPSBudWxscHRyOworICAgICAgICAg
ICAgICAgICAgICBsYXN0VGV4dCA9IG51bGxwdHI7CiAgICAgICAgICAgICAgICAgfQogICAgICAg
ICAgICAgfSBlbHNlIGlmIChpczxSZW5kZXJUZXh0PigqY2hpbGQpKSB7CiAgICAgICAgICAgICAg
ICAgLy8gQ2FzZSAoMykuIFRleHQuCkBAIC00MjM0LDYgKzQyMzksNyBAQCB2b2lkIFJlbmRlckJs
b2NrRmxvdzo6Y29tcHV0ZUlubGluZVByZWZlCiAgICAgICAgICAgICAgICAgZmxvYXQgYmVnaW5N
aW4sIGVuZE1pbjsKICAgICAgICAgICAgICAgICBib29sIGJlZ2luV1MsIGVuZFdTOwogICAgICAg
ICAgICAgICAgIGZsb2F0IGJlZ2luTWF4LCBlbmRNYXg7CisgICAgICAgICAgICAgICAgYm9vbCBz
dHJpcHBpbmdCZWdpbldTID0gc3RyaXBGcm9udFNwYWNlczsKICAgICAgICAgICAgICAgICByZW5k
ZXJUZXh0LnRyaW1tZWRQcmVmV2lkdGhzKGlubGluZU1heCwgYmVnaW5NaW4sIGJlZ2luV1MsIGVu
ZE1pbiwgZW5kV1MsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFzQnJl
YWthYmxlQ2hhciwgaGFzQnJlYWssIGJlZ2luTWF4LCBlbmRNYXgsCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgY2hpbGRNaW4sIGNoaWxkTWF4LCBzdHJpcEZyb250U3BhY2Vz
KTsKQEAgLTQyNDYsNiArNDI1Miw4IEBAIHZvaWQgUmVuZGVyQmxvY2tGbG93Ojpjb21wdXRlSW5s
aW5lUHJlZmUKICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICBjb250
aW51ZTsKICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAg
ICAgbGFzdFRleHQgPSAmcmVuZGVyVGV4dDsKIAogICAgICAgICAgICAgICAgIGlmIChzdHJpcEZy
b250U3BhY2VzKQogICAgICAgICAgICAgICAgICAgICB0cmFpbGluZ1NwYWNlQ2hpbGQgPSBjaGls
ZDsKQEAgLTQyNzYsNyArNDI4NCw4IEBAIHZvaWQgUmVuZGVyQmxvY2tGbG93Ojpjb21wdXRlSW5s
aW5lUHJlZmUKICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAvLyBTZWUgaWYgd2Ug
aGF2ZSBhIGhhbmdpbmcgcHVuY3R1YXRpb24gc2l0dWF0aW9uIGF0IHRoZSBzdGFydC4KICAgICAg
ICAgICAgICAgICBpZiAoY2FuSGFuZ1B1bmN0dWF0aW9uQXRTdGFydCAmJiAhYWRkZWRTdGFydFB1
bmN0dWF0aW9uSGFuZykgewotICAgICAgICAgICAgICAgICAgICBmbG9hdCBoYW5nU3RhcnRXaWR0
aCA9IHJlbmRlclRleHQuaGFuZ2FibGVQdW5jdHVhdGlvblN0YXJ0V2lkdGgoKTsKKyAgICAgICAg
ICAgICAgICAgICAgdW5zaWduZWQgc3RhcnRJbmRleCA9IHN0cmlwcGluZ0JlZ2luV1MgPyByZW5k
ZXJUZXh0LmZpcnN0Q2hhcmFjdGVySW5kZXhTdHJpcHBpbmdTcGFjZXMoKSA6IDA7CisgICAgICAg
ICAgICAgICAgICAgIGZsb2F0IGhhbmdTdGFydFdpZHRoID0gcmVuZGVyVGV4dC5oYW5nYWJsZVB1
bmN0dWF0aW9uU3RhcnRXaWR0aChzdGFydEluZGV4KTsKICAgICAgICAgICAgICAgICAgICAgY2hp
bGRNaW4gLT0gaGFuZ1N0YXJ0V2lkdGg7CiAgICAgICAgICAgICAgICAgICAgIGJlZ2luTWluIC09
IGhhbmdTdGFydFdpZHRoOwogICAgICAgICAgICAgICAgICAgICBjaGlsZE1heCAtPSBoYW5nU3Rh
cnRXaWR0aDsKQEAgLTQzNDksNiArNDM1OCwxMyBAQCB2b2lkIFJlbmRlckJsb2NrRmxvdzo6Y29t
cHV0ZUlubGluZVByZWZlCiAKICAgICBpZiAoc3R5bGVUb1VzZS5jb2xsYXBzZVdoaXRlU3BhY2Uo
KSkKICAgICAgICAgc3RyaXBUcmFpbGluZ1NwYWNlKGlubGluZU1heCwgaW5saW5lTWluLCB0cmFp
bGluZ1NwYWNlQ2hpbGQpOworICAgIAorICAgIGlmIChjYW5IYW5nUHVuY3R1YXRpb25BdEVuZCAm
JiBsYXN0VGV4dCkgeworICAgICAgICB1bnNpZ25lZCBlbmRJbmRleCA9IHRyYWlsaW5nU3BhY2VD
aGlsZCA9PSBsYXN0VGV4dCA/IGxhc3RUZXh0LT5sYXN0Q2hhcmFjdGVySW5kZXhTdHJpcHBpbmdT
cGFjZXMoKSA6IGxhc3RUZXh0LT50ZXh0TGVuZ3RoKCkgLSAxOworICAgICAgICBmbG9hdCBlbmRI
YW5nV2lkdGggPSBsYXN0VGV4dC0+aGFuZ2FibGVQdW5jdHVhdGlvbkVuZFdpZHRoKGVuZEluZGV4
KTsKKyAgICAgICAgaW5saW5lTWluIC09IGVuZEhhbmdXaWR0aDsKKyAgICAgICAgaW5saW5lTWF4
IC09IGVuZEhhbmdXaWR0aDsKKyAgICB9CiAKICAgICBtaW5Mb2dpY2FsV2lkdGggPSBwcmVmZXJy
ZWRXaWR0aChtaW5Mb2dpY2FsV2lkdGgsIGlubGluZU1pbik7CiAgICAgbWF4TG9naWNhbFdpZHRo
ID0gcHJlZmVycmVkV2lkdGgobWF4TG9naWNhbFdpZHRoLCBpbmxpbmVNYXgpOwpJbmRleDogU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrTGluZUxheW91dC5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrTGluZUxheW91dC5jcHAJ
KHJldmlzaW9uIDE5NzUwNSkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9j
a0xpbmVMYXlvdXQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04MTcsNiArODE3LDE3IEBAIHN0YXRp
YyBib29sIGlubGluZUFuY2VzdG9ySGFzU3RhcnRCb3JkZXIKICAgICByZXR1cm4gZmFsc2U7CiB9
CiAKK3N0YXRpYyBib29sIGlubGluZUFuY2VzdG9ySGFzRW5kQm9yZGVyUGFkZGluZ09yTWFyZ2lu
KGNvbnN0IFJlbmRlckJsb2NrRmxvdyYgYmxvY2ssIGNvbnN0IElubGluZUJveCYgYm94KQorewor
ICAgIGJvb2wgaXNMVFIgPSBibG9jay5zdHlsZSgpLmlzTGVmdFRvUmlnaHREaXJlY3Rpb24oKTsK
KyAgICBmb3IgKGF1dG8qIGN1cnJlbnRCb3ggPSBib3gucGFyZW50KCk7IGN1cnJlbnRCb3g7IGN1
cnJlbnRCb3ggPSBjdXJyZW50Qm94LT5wYXJlbnQoKSkgeworICAgICAgICBpZiAoKGlzTFRSICYm
IGN1cnJlbnRCb3gtPm1hcmdpbkJvcmRlclBhZGRpbmdMb2dpY2FsUmlnaHQoKSA+IDApCisgICAg
ICAgICAgICB8fCAoIWlzTFRSICYmIGN1cnJlbnRCb3gtPm1hcmdpbkJvcmRlclBhZGRpbmdMb2dp
Y2FsTGVmdCgpID4gMCkpCisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgcmV0
dXJuIGZhbHNlOworfQorICAgIAogc3RhdGljIGJvb2wgaXNMYXN0SW5GbG93UnVuKEJpZGlSdW4m
IHJ1blRvQ2hlY2spCiB7CiAgICAgZm9yIChhdXRvKiBydW4gPSBydW5Ub0NoZWNrLm5leHQoKTsg
cnVuOyBydW4gPSBydW4tPm5leHQoKSkgewpAQCAtODMzLDYgKzg0NCw3IEBAIEJpZGlSdW4qIFJl
bmRlckJsb2NrRmxvdzo6Y29tcHV0ZUlubGluZUQKIHsKICAgICBib29sIG5lZWRzV29yZFNwYWNp
bmcgPSBmYWxzZTsKICAgICBib29sIGNhbkhhbmdQdW5jdHVhdGlvbkF0U3RhcnQgPSBzdHlsZSgp
LmhhbmdpbmdQdW5jdHVhdGlvbigpICYgRmlyc3RIYW5naW5nUHVuY3R1YXRpb247CisgICAgYm9v
bCBjYW5IYW5nUHVuY3R1YXRpb25BdEVuZCA9IHN0eWxlKCkuaGFuZ2luZ1B1bmN0dWF0aW9uKCkg
JiBMYXN0SGFuZ2luZ1B1bmN0dWF0aW9uOwogICAgIGJvb2wgaXNMVFIgPSBzdHlsZSgpLmlzTGVm
dFRvUmlnaHREaXJlY3Rpb24oKTsKICAgICBmbG9hdCB0b3RhbExvZ2ljYWxXaWR0aCA9IGxpbmVC
b3gtPmdldEZsb3dTcGFjaW5nTG9naWNhbFdpZHRoKCk7CiAgICAgdW5zaWduZWQgZXhwYW5zaW9u
T3Bwb3J0dW5pdHlDb3VudCA9IDA7CkBAIC04NTIsMTMgKzg2NCwyMiBAQCBCaWRpUnVuKiBSZW5k
ZXJCbG9ja0Zsb3c6OmNvbXB1dGVJbmxpbmVECiAgICAgICAgICAgICBhdXRvJiB0ZXh0Qm94ID0g
ZG93bmNhc3Q8SW5saW5lVGV4dEJveD4oKnJ1bi0+Ym94KCkpOwogICAgICAgICAgICAgaWYgKGNh
bkhhbmdQdW5jdHVhdGlvbkF0U3RhcnQgJiYgbGluZUluZm8uaXNGaXJzdExpbmUoKSAmJiAoaXNM
VFIgfHwgaXNMYXN0SW5GbG93UnVuKCpydW4pKQogICAgICAgICAgICAgICAgICYmICFpbmxpbmVB
bmNlc3Rvckhhc1N0YXJ0Qm9yZGVyUGFkZGluZ09yTWFyZ2luKCp0aGlzLCAqcnVuLT5ib3goKSkp
IHsKLSAgICAgICAgICAgICAgICBmbG9hdCBoYW5nU3RhcnRXaWR0aCA9IHJlbmRlclRleHQuaGFu
Z2FibGVQdW5jdHVhdGlvblN0YXJ0V2lkdGgoKTsKKyAgICAgICAgICAgICAgICBmbG9hdCBoYW5n
U3RhcnRXaWR0aCA9IHJlbmRlclRleHQuaGFuZ2FibGVQdW5jdHVhdGlvblN0YXJ0V2lkdGgocnVu
LT5tX3N0YXJ0KTsKICAgICAgICAgICAgICAgICBhdmFpbGFibGVMb2dpY2FsV2lkdGggKz0gaGFu
Z1N0YXJ0V2lkdGg7CiAgICAgICAgICAgICAgICAgaWYgKHN0eWxlKCkuaXNMZWZ0VG9SaWdodERp
cmVjdGlvbigpKQogICAgICAgICAgICAgICAgICAgICBsb2dpY2FsTGVmdCAtPSBoYW5nU3RhcnRX
aWR0aDsKICAgICAgICAgICAgICAgICBjYW5IYW5nUHVuY3R1YXRpb25BdFN0YXJ0ID0gZmFsc2U7
CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICAKKyAgICAgICAgICAgIGlmIChjYW5IYW5nUHVu
Y3R1YXRpb25BdEVuZCAmJiBsaW5lSW5mby5pc0xhc3RMaW5lKCkgJiYgKCFpc0xUUiB8fCBpc0xh
c3RJbkZsb3dSdW4oKnJ1bikpCisgICAgICAgICAgICAgICAgJiYgIWlubGluZUFuY2VzdG9ySGFz
RW5kQm9yZGVyUGFkZGluZ09yTWFyZ2luKCp0aGlzLCAqcnVuLT5ib3goKSkpIHsKKyAgICAgICAg
ICAgICAgICBmbG9hdCBoYW5nRW5kV2lkdGggPSByZW5kZXJUZXh0LmhhbmdhYmxlUHVuY3R1YXRp
b25FbmRXaWR0aChydW4tPm1fc3RvcCAtIDEpOworICAgICAgICAgICAgICAgIGF2YWlsYWJsZUxv
Z2ljYWxXaWR0aCArPSBoYW5nRW5kV2lkdGg7CisgICAgICAgICAgICAgICAgaWYgKCFzdHlsZSgp
LmlzTGVmdFRvUmlnaHREaXJlY3Rpb24oKSkKKyAgICAgICAgICAgICAgICAgICAgbG9naWNhbExl
ZnQgLT0gaGFuZ0VuZFdpZHRoOworICAgICAgICAgICAgICAgIGNhbkhhbmdQdW5jdHVhdGlvbkF0
RW5kID0gZmFsc2U7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAKICAgICAgICAgICAgIGlm
ICh0ZXh0QWxpZ24gPT0gSlVTVElGWSAmJiBydW4gIT0gdHJhaWxpbmdTcGFjZVJ1bikgewogICAg
ICAgICAgICAgICAgIEV4cGFuc2lvbkJlaGF2aW9yIGV4cGFuc2lvbkJlaGF2aW9yID0gZXhwYW5z
aW9uQmVoYXZpb3JGb3JJbmxpbmVUZXh0Qm94KCp0aGlzLCB0ZXh0Qm94LCBwcmV2aW91c1J1biwg
cnVuLT5uZXh0KCksIHRleHRBbGlnbiwgaXNBZnRlckV4cGFuc2lvbik7CiAgICAgICAgICAgICAg
ICAgYXBwbHlFeHBhbnNpb25CZWhhdmlvcih0ZXh0Qm94LCBleHBhbnNpb25CZWhhdmlvcik7Cklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4dC5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRleHQuY3BwCShyZXZpc2lvbiAxOTc1
MDUpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4dC5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTUxMiwxNCArNTEyLDE1IEBAIGlubGluZSBib29sIGlzSGFuZ2FibGVQdW5jdHVh
dGlvbkF0TGluZUUKICAgICByZXR1cm4gVV9HRVRfR0NfTUFTSyhjKSAmIChVX0dDX1BFX01BU0sg
fCBVX0dDX1BJX01BU0sgfCBVX0dDX1BGX01BU0spOwogfQogCi1mbG9hdCBSZW5kZXJUZXh0Ojpo
YW5nYWJsZVB1bmN0dWF0aW9uU3RhcnRXaWR0aCgpIGNvbnN0CitmbG9hdCBSZW5kZXJUZXh0Ojpo
YW5nYWJsZVB1bmN0dWF0aW9uU3RhcnRXaWR0aChpbnQgaW5kZXgpIGNvbnN0CiB7CiAgICAgaWYg
KCF0ZXh0TGVuZ3RoKCkpCiAgICAgICAgIHJldHVybiAwOwogICAgIAogICAgIEFTU0VSVChtX3Rl
eHQpOwogICAgIFN0cmluZ0ltcGwmIHRleHQgPSAqbV90ZXh0LmltcGwoKTsKLSAgICBpZiAoIWlz
SGFuZ2FibGVQdW5jdHVhdGlvbkF0TGluZVN0YXJ0KHRleHRbMF0pKQorICAgIAorICAgIGlmICgh
aXNIYW5nYWJsZVB1bmN0dWF0aW9uQXRMaW5lU3RhcnQodGV4dFtpbmRleF0pKQogICAgICAgICBy
ZXR1cm4gMDsKICAgICAKICAgICBjb25zdCBSZW5kZXJTdHlsZSYgc3R5bGUgPSB0aGlzLT5zdHls
ZSgpOwpAQCAtNTI3LDcgKzUyOCw2MyBAQCBmbG9hdCBSZW5kZXJUZXh0OjpoYW5nYWJsZVB1bmN0
dWF0aW9uU3RhCiAgICAgICAgIAogICAgIHJldHVybiB3aWR0aEZyb21DYWNoZShmb250LCAwLCAx
LCAwLCAwLCAwLCBzdHlsZSk7CiB9CisKK2Zsb2F0IFJlbmRlclRleHQ6OmhhbmdhYmxlUHVuY3R1
YXRpb25FbmRXaWR0aChpbnQgaW5kZXgpIGNvbnN0Cit7CisgICAgaWYgKCF0ZXh0TGVuZ3RoKCkp
CisgICAgICAgIHJldHVybiAwOworICAgIAorICAgIEFTU0VSVChtX3RleHQpOworICAgIFN0cmlu
Z0ltcGwmIHRleHQgPSAqbV90ZXh0LmltcGwoKTsKKyAgICAKKyAgICAvLyBGSVhNRTogV2UgY2Fu
J3QgaGFyZGNvZGUgInRleHRMZW5ndGgoKSAtIDEiIGhlcmUsIHNpbmNlIHRoZQorICAgIC8vIHN0
cmlwcGluZyBvZiB0cmFpbGluZyBzcGFjZXMgYXQgdGhlIGVuZCBvZiBhIHRleHQgcnVuIGNvdWxk
CisgICAgLy8gY2F1c2UgYSBjaGFyYWN0ZXIgb3RoZXIgdGhhbiB0aGUgbGFzdCBvbmUgdG8gYmUg
dGhlIG9uZSB0bworCisgICAgaWYgKCFpc0hhbmdhYmxlUHVuY3R1YXRpb25BdExpbmVFbmQodGV4
dFtpbmRleF0pKQorICAgICAgICByZXR1cm4gMDsKKyAgICAKKyAgICBjb25zdCBSZW5kZXJTdHls
ZSYgc3R5bGUgPSB0aGlzLT5zdHlsZSgpOworICAgIGNvbnN0IEZvbnRDYXNjYWRlJiBmb250ID0g
c3R5bGUuZm9udENhc2NhZGUoKTsKKyAgICAKKyAgICByZXR1cm4gd2lkdGhGcm9tQ2FjaGUoZm9u
dCwgMCwgMSwgMCwgMCwgMCwgc3R5bGUpOworfQorCit1bnNpZ25lZCBSZW5kZXJUZXh0OjpmaXJz
dENoYXJhY3RlckluZGV4U3RyaXBwaW5nU3BhY2VzKCkgY29uc3QKK3sKKyAgICBpZiAoIXN0eWxl
KCkuY29sbGFwc2VXaGl0ZVNwYWNlKCkpCisgICAgICAgIHJldHVybiAwOwogICAgIAorICAgIEFT
U0VSVChtX3RleHQpOworICAgIFN0cmluZ0ltcGwmIHRleHQgPSAqbV90ZXh0LmltcGwoKTsKKyAg
ICAKKyAgICB1bnNpZ25lZCBpID0gMDsKKyAgICBmb3IgKCA7IGkgPCB0ZXh0TGVuZ3RoKCk7ICsr
aSkgeworICAgICAgICBpZiAodGV4dFtpXSAhPSAnICcgJiYgKHRleHRbaV0gIT0gJ1xuJyB8fCBz
dHlsZSgpLnByZXNlcnZlTmV3bGluZSgpKSAmJiB0ZXh0W2ldICE9ICdcdCcpCisgICAgICAgICAg
ICBicmVhazsKKyAgICB9CisgICAgcmV0dXJuIGk7Cit9CisKK3Vuc2lnbmVkIFJlbmRlclRleHQ6
Omxhc3RDaGFyYWN0ZXJJbmRleFN0cmlwcGluZ1NwYWNlcygpIGNvbnN0Cit7CisgICAgaWYgKCF0
ZXh0TGVuZ3RoKCkpCisgICAgICAgIHJldHVybiAwOworCisgICAgaWYgKCFzdHlsZSgpLmNvbGxh
cHNlV2hpdGVTcGFjZSgpKQorICAgICAgICByZXR1cm4gdGV4dExlbmd0aCgpIC0gMTsKKyAgICAK
KyAgICBBU1NFUlQobV90ZXh0KTsKKyAgICBTdHJpbmdJbXBsJiB0ZXh0ID0gKm1fdGV4dC5pbXBs
KCk7CisgICAgCisgICAgaW50IGkgPSB0ZXh0TGVuZ3RoKCkgLSAxOworICAgIGZvciAoIDsgaSAg
Pj0gMDsgLS1pKSB7CisgICAgICAgIGlmICh0ZXh0W2ldICE9ICcgJyAmJiAodGV4dFtpXSAhPSAn
XG4nIHx8IHN0eWxlKCkucHJlc2VydmVOZXdsaW5lKCkpICYmIHRleHRbaV0gIT0gJ1x0JykKKyAg
ICAgICAgICAgIGJyZWFrOworICAgIH0KKyAgICByZXR1cm4gaTsKK30KKwogdm9pZCBSZW5kZXJU
ZXh0Ojp0cmltbWVkUHJlZldpZHRocyhmbG9hdCBsZWFkV2lkdGgsCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGZsb2F0JiBiZWdpbk1pblcsIGJvb2wmIGJlZ2luV1MsCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZsb2F0JiBlbmRNaW5XLCBib29sJiBlbmRX
UywKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0LmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRleHQuaAkocmV2aXNpb24gMTk3
NTA1KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRleHQuaAkod29ya2luZyBj
b3B5KQpAQCAtMTAyLDcgKzEwMiwxMCBAQCBwdWJsaWM6CiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBib29sJiBoYXNCcmVha2FibGVDaGFyLCBib29sJiBoYXNCcmVhaywKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGZsb2F0JiBiZWdpbk1heFcsIGZsb2F0JiBlbmRNYXhXLAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgZmxvYXQmIG1pblcsIGZsb2F0JiBtYXhXLCBib29sJiBzdHJp
cEZyb250U3BhY2VzKTsKLSAgICBmbG9hdCBoYW5nYWJsZVB1bmN0dWF0aW9uU3RhcnRXaWR0aCgp
IGNvbnN0OworICAgIGZsb2F0IGhhbmdhYmxlUHVuY3R1YXRpb25TdGFydFdpZHRoKGludCBpbmRl
eCkgY29uc3Q7CisgICAgZmxvYXQgaGFuZ2FibGVQdW5jdHVhdGlvbkVuZFdpZHRoKGludCBpbmRl
eCkgY29uc3Q7CisgICAgdW5zaWduZWQgZmlyc3RDaGFyYWN0ZXJJbmRleFN0cmlwcGluZ1NwYWNl
cygpIGNvbnN0OworICAgIHVuc2lnbmVkIGxhc3RDaGFyYWN0ZXJJbmRleFN0cmlwcGluZ1NwYWNl
cygpIGNvbnN0OwogCiAgICAgV0VCQ09SRV9FWFBPUlQgdmlydHVhbCBJbnRSZWN0IGxpbmVzQm91
bmRpbmdCb3goKSBjb25zdDsKICAgICBMYXlvdXRSZWN0IGxpbmVzVmlzdWFsT3ZlcmZsb3dCb3Vu
ZGluZ0JveCgpIGNvbnN0OwpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL2xpbmUvQnJl
YWtpbmdDb250ZXh0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL2xp
bmUvQnJlYWtpbmdDb250ZXh0LmgJKHJldmlzaW9uIDE5NzUwNSkKKysrIFNvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9saW5lL0JyZWFraW5nQ29udGV4dC5oCSh3b3JraW5nIGNvcHkpCkBAIC03Mzgs
NyArNzM4LDggQEAgaW5saW5lIGJvb2wgQnJlYWtpbmdDb250ZXh0OjpoYW5kbGVUZXh0KAogICAg
IGJvb2wgaXNGaXhlZFBpdGNoID0gZm9udC5pc0ZpeGVkUGl0Y2goKTsKICAgICBib29sIGNhbkh5
cGhlbmF0ZSA9IHN0eWxlLmh5cGhlbnMoKSA9PSBIeXBoZW5zQXV0byAmJiBXZWJDb3JlOjpjYW5I
eXBoZW5hdGUoc3R5bGUubG9jYWxlKCkpOwogICAgIGJvb2wgY2FuSGFuZ1B1bmN0dWF0aW9uQXRT
dGFydCA9IHN0eWxlLmhhbmdpbmdQdW5jdHVhdGlvbigpICYgRmlyc3RIYW5naW5nUHVuY3R1YXRp
b247Ci0gICAgCisgICAgYm9vbCBjYW5IYW5nUHVuY3R1YXRpb25BdEVuZCA9IHN0eWxlLmhhbmdp
bmdQdW5jdHVhdGlvbigpICYgTGFzdEhhbmdpbmdQdW5jdHVhdGlvbjsKKyAgICBpbnQgZW5kUHVu
Y3R1YXRpb25JbmRleCA9IGNhbkhhbmdQdW5jdHVhdGlvbkF0RW5kICYmIG1fY29sbGFwc2VXaGl0
ZVNwYWNlID8gcmVuZGVyVGV4dC5sYXN0Q2hhcmFjdGVySW5kZXhTdHJpcHBpbmdTcGFjZXMoKSA6
IHJlbmRlclRleHQudGV4dExlbmd0aCgpIC0gMTsKICAgICB1bnNpZ25lZCBsYXN0U3BhY2UgPSBt
X2N1cnJlbnQub2Zmc2V0KCk7CiAgICAgZmxvYXQgd29yZFNwYWNpbmcgPSBtX2N1cnJlbnRTdHls
ZS0+Zm9udENhc2NhZGUoKS53b3JkU3BhY2luZygpOwogICAgIGZsb2F0IGxhc3RTcGFjZVdvcmRT
cGFjaW5nID0gMDsKQEAgLTc4OCw5ICs3ODksMTYgQEAgaW5saW5lIGJvb2wgQnJlYWtpbmdDb250
ZXh0OjpoYW5kbGVUZXh0KAogICAgICAgICBVQ2hhciBjID0gbV9jdXJyZW50LmN1cnJlbnQoKTsK
ICAgICAgICAgbV9jdXJyZW50Q2hhcmFjdGVySXNTcGFjZSA9IGMgPT0gJyAnIHx8IGMgPT0gJ1x0
JyB8fCAoIW1fcHJlc2VydmVzTmV3bGluZSAmJiAoYyA9PSAnXG4nKSk7CiAKLSAgICAgICAgaWYg
KGNhbkhhbmdQdW5jdHVhdGlvbkF0U3RhcnQgJiYgIW1fY3VycmVudC5vZmZzZXQoKSAmJiBtX3dp
ZHRoLmlzRmlyc3RMaW5lKCkgJiYgIW1fd2lkdGguY29tbWl0dGVkV2lkdGgoKSAmJiAhd3JhcFcg
JiYgIW1fY3VycmVudC5vZmZzZXQoKSkKLSAgICAgICAgICAgIG1fd2lkdGguYWRkVW5jb21taXR0
ZWRXaWR0aCgtcmVuZGVyVGV4dC5oYW5nYWJsZVB1bmN0dWF0aW9uU3RhcnRXaWR0aCgpKTsKLSAg
ICAgICAgICAgIAorICAgICAgICBpZiAoY2FuSGFuZ1B1bmN0dWF0aW9uQXRTdGFydCAmJiBtX3dp
ZHRoLmlzRmlyc3RMaW5lKCkgJiYgIW1fd2lkdGguY29tbWl0dGVkV2lkdGgoKSAmJiAhd3JhcFcg
JiYgIWlubGluZUxvZ2ljYWxXaWR0aChtX2N1cnJlbnQucmVuZGVyZXIoKSwgdHJ1ZSwgZmFsc2Up
KSB7CisgICAgICAgICAgICBtX3dpZHRoLmFkZFVuY29tbWl0dGVkV2lkdGgoLXJlbmRlclRleHQu
aGFuZ2FibGVQdW5jdHVhdGlvblN0YXJ0V2lkdGgobV9jdXJyZW50Lm9mZnNldCgpKSk7CisgICAg
ICAgICAgICBjYW5IYW5nUHVuY3R1YXRpb25BdFN0YXJ0ID0gZmFsc2U7CisgICAgICAgIH0KKyAg
ICAgICAgCisgICAgICAgIGlmIChjYW5IYW5nUHVuY3R1YXRpb25BdEVuZCAmJiAhbV9uZXh0T2Jq
ZWN0ICYmIChpbnQpbV9jdXJyZW50Lm9mZnNldCgpID09IGVuZFB1bmN0dWF0aW9uSW5kZXggJiYg
IWlubGluZUxvZ2ljYWxXaWR0aChtX2N1cnJlbnQucmVuZGVyZXIoKSwgZmFsc2UsIHRydWUpKSB7
CisgICAgICAgICAgICBtX3dpZHRoLmFkZFVuY29tbWl0dGVkV2lkdGgoLXJlbmRlclRleHQuaGFu
Z2FibGVQdW5jdHVhdGlvbkVuZFdpZHRoKGVuZFB1bmN0dWF0aW9uSW5kZXgpKTsKKyAgICAgICAg
ICAgIGNhbkhhbmdQdW5jdHVhdGlvbkF0U3RhcnQgPSBmYWxzZTsKKyAgICAgICAgfQorCiAgICAg
ICAgIGlmICghbV9jb2xsYXBzZVdoaXRlU3BhY2UgfHwgIW1fY3VycmVudENoYXJhY3RlcklzU3Bh
Y2UpCiAgICAgICAgICAgICBtX2xpbmVJbmZvLnNldEVtcHR5KGZhbHNlLCAmbV9ibG9jaywgJm1f
d2lkdGgpOwogCkluZGV4OiBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5
b3V0VGVzdHMvQ2hhbmdlTG9nCShyZXZpc2lvbiAxOTc1MTIpCisrKyBMYXlvdXRUZXN0cy9DaGFu
Z2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwyMSBAQAorMjAxNi0wMy0wMyAgRGF2ZSBI
eWF0dCAgPGh5YXR0QGFwcGxlLmNvbT4KKworICAgICAgICBBZGQgc3VwcG9ydCBmb3IgdGhlICJs
YXN0IiB2YWx1ZSBvZiBoYW5naW5nLXB1bmN0dWF0aW9uCisgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNTQ5NzcKKworICAgICAgICBSZXZpZXdlZCBieSBO
T0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIGZhc3QvdGV4dC9oYW5naW5nLXB1bmN0dWF0aW9u
LWZpcnN0LWFuZC1sYXN0LXRvZ2V0aGVyLWV4cGVjdGVkLmh0bWw6IEFkZGVkLgorICAgICAgICAq
IGZhc3QvdGV4dC9oYW5naW5nLXB1bmN0dWF0aW9uLWZpcnN0LWFuZC1sYXN0LXRvZ2V0aGVyLmh0
bWw6IEFkZGVkLgorICAgICAgICAqIGZhc3QvdGV4dC9oYW5naW5nLXB1bmN0dWF0aW9uLWZpcnN0
LXdzLWV4cGVjdGVkLmh0bWw6IEFkZGVkLgorICAgICAgICAqIGZhc3QvdGV4dC9oYW5naW5nLXB1
bmN0dWF0aW9uLWZpcnN0LXdzLmh0bWw6IEFkZGVkLgorICAgICAgICAqIGZhc3QvdGV4dC9oYW5n
aW5nLXB1bmN0dWF0aW9uLWxhc3QtZXhwZWN0ZWQuaHRtbDogQWRkZWQuCisgICAgICAgICogZmFz
dC90ZXh0L2hhbmdpbmctcHVuY3R1YXRpb24tbGFzdC1ydGwtZXhwZWN0ZWQuaHRtbDogQWRkZWQu
CisgICAgICAgICogZmFzdC90ZXh0L2hhbmdpbmctcHVuY3R1YXRpb24tbGFzdC1ydGwuaHRtbDog
QWRkZWQuCisgICAgICAgICogZmFzdC90ZXh0L2hhbmdpbmctcHVuY3R1YXRpb24tbGFzdC13cy1l
eHBlY3RlZC5odG1sOiBBZGRlZC4KKyAgICAgICAgKiBmYXN0L3RleHQvaGFuZ2luZy1wdW5jdHVh
dGlvbi1sYXN0LXdzLmh0bWw6IEFkZGVkLgorICAgICAgICAqIGZhc3QvdGV4dC9oYW5naW5nLXB1
bmN0dWF0aW9uLWxhc3QuaHRtbDogQWRkZWQuCisKIDIwMTYtMDMtMDMgIEJyYWR5IEVpZHNvbiAg
PGJlaWRzb25AYXBwbGUuY29tPgogCiAgICAgICAgIHN0b3JhZ2UvaW5kZXhlZGRiL2ludHZlcnNp
b24tb3Blbi1pbi11cGdyYWRlbmVlZGVkLmh0bWwgaXMgZmxha3kgb24gbWFjLXdrMiBkZWJ1Zy4K
SW5kZXg6IExheW91dFRlc3RzL2Zhc3QvdGV4dC9oYW5naW5nLXB1bmN0dWF0aW9uLWZpcnN0LWFu
ZC1sYXN0LXRvZ2V0aGVyLWV4cGVjdGVkLmh0bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMv
ZmFzdC90ZXh0L2hhbmdpbmctcHVuY3R1YXRpb24tZmlyc3QtYW5kLWxhc3QtdG9nZXRoZXItZXhw
ZWN0ZWQuaHRtbAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2Zhc3QvdGV4dC9oYW5naW5n
LXB1bmN0dWF0aW9uLWZpcnN0LWFuZC1sYXN0LXRvZ2V0aGVyLWV4cGVjdGVkLmh0bWwJKHdvcmtp
bmcgY29weSkKQEAgLTAsMCArMSwxMCBAQAorPGhlYWQ+CisgICAgPHN0eWxlPgorICAgICAgICBi
b2R5IHsgZm9udC1mYW1pbHk6ICdBaGVtJzsgY29sb3I6Z3JlZW4gfQorICAgICAgICAuaGFuZyB7
IG1hcmdpbjoxZW07IGJvcmRlcjoxcHggc29saWQgYmxhY2sgfQorICAgICAgICA8L3N0eWxlPgor
PC9oZWFkPgorPGJvZHk+CisgICAgPGRpdiBzdHlsZT0iZmxvYXQ6bGVmdCIgY2xhc3M9Imhhbmci
PjxkaXYgc3R5bGU9Im1hcmdpbjogMCAtMWVtIj4oSGFuZyB0ZXN0KTwvZGl2PjwvZGl2PgorICAg
IDxkaXYgc3R5bGU9ImNsZWFyOmJvdGgiPgorICAgICAgICA8ZGl2IGNsYXNzPSJoYW5nIiBzdHls
ZT0id2lkdGg6MTBlbTsgdGV4dC1hbGlnbjpqdXN0aWZ5OyI+PHNwYW4gc3R5bGU9Im1hcmdpbjow
IC0xZW0iPihUaGlzIHNob3VsZCBoYW5nLjxicj4oVGhpcyBzaG91bGQgYWxzbyBoYW5nLik8L3Nw
YW4+PC9kaXY+CkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L3RleHQvaGFuZ2luZy1wdW5jdHVhdGlv
bi1maXJzdC1hbmQtbGFzdC10b2dldGhlci5odG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3Rz
L2Zhc3QvdGV4dC9oYW5naW5nLXB1bmN0dWF0aW9uLWZpcnN0LWFuZC1sYXN0LXRvZ2V0aGVyLmh0
bWwJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9mYXN0L3RleHQvaGFuZ2luZy1wdW5jdHVh
dGlvbi1maXJzdC1hbmQtbGFzdC10b2dldGhlci5odG1sCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAg
KzEsMTAgQEAKKzxoZWFkPgorPHN0eWxlPgorICAgIGJvZHkgeyBmb250LWZhbWlseTogJ0FoZW0n
OyBjb2xvcjpncmVlbiB9CisgICAgLmhhbmcgeyBoYW5naW5nLXB1bmN0dWF0aW9uOiBmaXJzdCBs
YXN0OyBtYXJnaW46MWVtOyBib3JkZXI6MXB4IHNvbGlkIGJsYWNrIH0KKzwvc3R5bGU+Cis8L2hl
YWQ+Cis8Ym9keT4KKzxkaXYgc3R5bGU9ImZsb2F0OmxlZnQiIGNsYXNzPSJoYW5nIj4oSGFuZyB0
ZXN0KTwvZGl2PgorPGRpdiBzdHlsZT0iY2xlYXI6Ym90aCI+Cis8ZGl2IGNsYXNzPSJoYW5nIiBz
dHlsZT0id2lkdGg6MTBlbTsgdGV4dC1hbGlnbjpqdXN0aWZ5OyI+KFRoaXMgc2hvdWxkIGhhbmcu
PGJyPihUaGlzIHNob3VsZCBhbHNvIGhhbmcuKTwvZGl2PgpJbmRleDogTGF5b3V0VGVzdHMvZmFz
dC90ZXh0L2hhbmdpbmctcHVuY3R1YXRpb24tZmlyc3Qtd3MtZXhwZWN0ZWQuaHRtbAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L3RleHQvaGFuZ2luZy1wdW5jdHVhdGlvbi1maXJzdC13
cy1leHBlY3RlZC5odG1sCShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvZmFzdC90ZXh0L2hh
bmdpbmctcHVuY3R1YXRpb24tZmlyc3Qtd3MtZXhwZWN0ZWQuaHRtbAkod29ya2luZyBjb3B5KQpA
QCAtMCwwICsxLDE0IEBACis8aGVhZD4KKzxzdHlsZT4KKyAgICBib2R5IHsgZm9udC1mYW1pbHk6
ICdBaGVtJzsgY29sb3I6Z3JlZW4gfQorICAgIC5oYW5nIHsgdGV4dC1pbmRlbnQ6IC0xZW07IG1h
cmdpbjoxZW0gfQorPC9zdHlsZT4KKzwvaGVhZD4KKzxib2R5PgorPGRpdiBzdHlsZT0iZmxvYXQ6
bGVmdCIgY2xhc3M9ImhhbmciPihIYW5nIHRlc3QpPC9kaXY+Cis8ZGl2IHN0eWxlPSJjbGVhcjpi
b3RoIj4KKzxkaXYgY2xhc3M9ImhhbmciPihUaGlzIHNob3VsZCBoYW5nLjxicj4oVGhpcyBzaG91
bGQgbm90LjwvZGl2PgorPGRpdiBjbGFzcz0iaGFuZyIgc3R5bGU9InRleHQtYWxpZ246anVzdGlm
eTsgd2lkdGg6MzAwcHg7Ij4oVGhpcyBzaG91bGQgaGFuZyBhbmQganVzdGlmeWJlY2F1c2UgYW5k
IG5vdyB3ZXJlIGZpbmUuPC9kaXY+Cis8ZGl2IGNsYXNzPSJoYW5nIiBzdHlsZT0idGV4dC1hbGln
bjpqdXN0aWZ5OyB3aWR0aDozMDBweDsiPjxzcGFuPig8L3NwYW4+VGhpcyBzaG91bGQgaGFuZy48
L2Rpdj4KKzxkaXYgc3R5bGU9Im1hcmdpbi1sZWZ0OjFlbTsgdGV4dC1hbGlnbjpqdXN0aWZ5OyB3
aWR0aDozMDBweDsiPjxzcGFuIHN0eWxlPSJib3JkZXItbGVmdDoxZW0gc29saWQgYmx1ZSI+KDwv
c3Bhbj5UaGlzIHNob3VsZCBub3QgaGFuZy48L2Rpdj4KKzxkaXYgY2xhc3M9ImhhbmciIHN0eWxl
PSJ0ZXh0LWluZGVudDoxZW07IHRleHQtYWxpZ246anVzdGlmeTsgd2lkdGg6MzAwcHg7Ij4oVGhp
cyBzaG91bGQgaGFuZyBpbnRvIHRoZSB0ZXh0LWluZGVudC48L2Rpdj4KXCBObyBuZXdsaW5lIGF0
IGVuZCBvZiBmaWxlCkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L3RleHQvaGFuZ2luZy1wdW5jdHVh
dGlvbi1maXJzdC13cy5odG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3QvdGV4dC9o
YW5naW5nLXB1bmN0dWF0aW9uLWZpcnN0LXdzLmh0bWwJKHJldmlzaW9uIDApCisrKyBMYXlvdXRU
ZXN0cy9mYXN0L3RleHQvaGFuZ2luZy1wdW5jdHVhdGlvbi1maXJzdC13cy5odG1sCSh3b3JraW5n
IGNvcHkpCkBAIC0wLDAgKzEsMTQgQEAKKzxoZWFkPgorPHN0eWxlPgorICAgIGJvZHkgeyBmb250
LWZhbWlseTogJ0FoZW0nOyBjb2xvcjpncmVlbiB9CisgICAgLmhhbmcgeyBoYW5naW5nLXB1bmN0
dWF0aW9uOiBmaXJzdDsgbWFyZ2luOjFlbSB9Cis8L3N0eWxlPgorPC9oZWFkPgorPGJvZHk+Cis8
ZGl2IHN0eWxlPSJmbG9hdDpsZWZ0IiBjbGFzcz0iaGFuZyI+ICAgIChIYW5nIHRlc3QpPC9kaXY+
Cis8ZGl2IHN0eWxlPSJjbGVhcjpib3RoIj4KKzxkaXYgY2xhc3M9ImhhbmciPiAgICAoVGhpcyBz
aG91bGQgaGFuZy48YnI+KFRoaXMgc2hvdWxkIG5vdC48L2Rpdj4KKzxkaXYgY2xhc3M9Imhhbmci
IHN0eWxlPSJ0ZXh0LWFsaWduOmp1c3RpZnk7IHdpZHRoOjMwMHB4OyI+ICAgKFRoaXMgc2hvdWxk
IGhhbmcgYW5kIGp1c3RpZnliZWNhdXNlIGFuZCBub3cgd2VyZSBmaW5lLjwvZGl2PgorPGRpdiBj
bGFzcz0iaGFuZyIgc3R5bGU9InRleHQtYWxpZ246anVzdGlmeTsgd2lkdGg6MzAwcHg7Ij4gICA8
c3Bhbj4gICAoPC9zcGFuPlRoaXMgc2hvdWxkIGhhbmcuPC9kaXY+Cis8ZGl2IGNsYXNzPSJoYW5n
IiBzdHlsZT0idGV4dC1hbGlnbjpqdXN0aWZ5OyB3aWR0aDozMDBweDsiPiAgIDxzcGFuIHN0eWxl
PSJib3JkZXItbGVmdDoxZW0gc29saWQgYmx1ZSI+ICAoPC9zcGFuPlRoaXMgc2hvdWxkIG5vdCBo
YW5nLjwvZGl2PgorPGRpdiBjbGFzcz0iaGFuZyIgc3R5bGU9InRleHQtaW5kZW50OjJlbTsgdGV4
dC1hbGlnbjpqdXN0aWZ5OyB3aWR0aDozMDBweDsiPiAgIChUaGlzIHNob3VsZCBoYW5nIGludG8g
dGhlIHRleHQtaW5kZW50LjwvZGl2PgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKSW5kZXg6
IExheW91dFRlc3RzL2Zhc3QvdGV4dC9oYW5naW5nLXB1bmN0dWF0aW9uLWxhc3QtZXhwZWN0ZWQu
aHRtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L3RleHQvaGFuZ2luZy1wdW5jdHVh
dGlvbi1sYXN0LWV4cGVjdGVkLmh0bWwJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9mYXN0
L3RleHQvaGFuZ2luZy1wdW5jdHVhdGlvbi1sYXN0LWV4cGVjdGVkLmh0bWwJKHdvcmtpbmcgY29w
eSkKQEAgLTAsMCArMSwxMiBAQAorPGhlYWQ+CisgICAgPHN0eWxlPgorICAgIGJvZHkgeyBmb250
LWZhbWlseTogJ0FoZW0nOyBjb2xvcjpncmVlbiB9CisgICAgLmhhbmcgeyBtYXJnaW46MWVtIH0K
KyAgICA8L3N0eWxlPgorPC9oZWFkPgorPGJvZHk+Cis8ZGl2IHN0eWxlPSJmbG9hdDpsZWZ0OyIg
Y2xhc3M9ImhhbmciPihIYW5nIHRlc3QpPC9kaXY+Cis8ZGl2IHN0eWxlPSJjbGVhcjpib3RoIj4K
KyAgICA8ZGl2IGNsYXNzPSJoYW5nIiBzdHlsZT0id2lkdGg6NWVtIj5Oby48YnI+WWVzLik8L2Rp
dj4KKyAgICA8ZGl2IGNsYXNzPSJoYW5nIiBzdHlsZT0idGV4dC1hbGlnbjpqdXN0aWZ5OyB3aWR0
aDo1ZW07Ij5ZZXMgPHNwYW4+KTwvc3Bhbj48L2Rpdj4KKyAgICA8ZGl2IGNsYXNzPSJoYW5nIiBz
dHlsZT0idGV4dC1hbGlnbjpqdXN0aWZ5OyB3aWR0aDo0ZW07Ij5Oby4gPHNwYW4gc3R5bGU9ImJv
cmRlci1yaWdodDoxZW0gc29saWQgYmx1ZSI+KTwvc3Bhbj48L2Rpdj4KSW5kZXg6IExheW91dFRl
c3RzL2Zhc3QvdGV4dC9oYW5naW5nLXB1bmN0dWF0aW9uLWxhc3QtcnRsLWV4cGVjdGVkLmh0bWwK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC90ZXh0L2hhbmdpbmctcHVuY3R1YXRpb24t
bGFzdC1ydGwtZXhwZWN0ZWQuaHRtbAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2Zhc3Qv
dGV4dC9oYW5naW5nLXB1bmN0dWF0aW9uLWxhc3QtcnRsLWV4cGVjdGVkLmh0bWwJKHdvcmtpbmcg
Y29weSkKQEAgLTAsMCArMSwxMiBAQAorPGhlYWQ+CisgICAgPHN0eWxlPgorICAgICAgICBib2R5
IHsgZm9udC1mYW1pbHk6ICdBaGVtJzsgY29sb3I6Z3JlZW47IGRpcmVjdGlvbjpydGwgfQorICAg
IC5oYW5nIHsgbWFyZ2luOjFlbSB9CisgICAgPC9zdHlsZT4KKzwvaGVhZD4KKzxib2R5PgorPGRp
diBzdHlsZT0iZmxvYXQ6cmlnaHQ7IiBjbGFzcz0iaGFuZyI+KEhhbmcgdGVzdCk8L2Rpdj4KKzxk
aXYgc3R5bGU9ImNsZWFyOmJvdGgiPgorICAgIDxkaXYgY2xhc3M9ImhhbmciIHN0eWxlPSJ3aWR0
aDo1ZW0iPk5vLjxicj5ZZXMuKTwvZGl2PgorICAgIDxkaXYgY2xhc3M9ImhhbmciIHN0eWxlPSJ0
ZXh0LWFsaWduOmp1c3RpZnk7IHdpZHRoOjVlbTsiPlllcyA8c3Bhbj4pPC9zcGFuPjwvZGl2Pgor
ICAgIDxkaXYgY2xhc3M9ImhhbmciIHN0eWxlPSJ0ZXh0LWFsaWduOmp1c3RpZnk7IHdpZHRoOjRl
bTsiPk5vLiA8c3BhbiBzdHlsZT0iYm9yZGVyLWxlZnQ6MWVtIHNvbGlkIGJsdWUiPik8L3NwYW4+
PC9kaXY+CkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L3RleHQvaGFuZ2luZy1wdW5jdHVhdGlvbi1s
YXN0LXJ0bC5odG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3QvdGV4dC9oYW5naW5n
LXB1bmN0dWF0aW9uLWxhc3QtcnRsLmh0bWwJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9m
YXN0L3RleHQvaGFuZ2luZy1wdW5jdHVhdGlvbi1sYXN0LXJ0bC5odG1sCSh3b3JraW5nIGNvcHkp
CkBAIC0wLDAgKzEsMTMgQEAKKzxoZWFkPgorPHN0eWxlPgorICAgIGJvZHkgeyBmb250LWZhbWls
eTogJ0FoZW0nOyBjb2xvcjpncmVlbjsgZGlyZWN0aW9uOnJ0bCB9CisgICAgLmhhbmcgeyBoYW5n
aW5nLXB1bmN0dWF0aW9uOiBsYXN0OyBtYXJnaW46MWVtIH0KKzwvc3R5bGU+Cis8L2hlYWQ+Cis8
Ym9keT4KKzxkaXYgc3R5bGU9ImZsb2F0OnJpZ2h0OyIgY2xhc3M9ImhhbmciPihIYW5nIHRlc3Qp
PC9kaXY+Cis8ZGl2IHN0eWxlPSJjbGVhcjpib3RoIj4KKzxkaXYgY2xhc3M9ImhhbmciIHN0eWxl
PSJ3aWR0aDo0ZW0iCisgICAgPk5vLjxicj5ZZXMuKTwvZGl2PgorPGRpdiBjbGFzcz0iaGFuZyIg
c3R5bGU9InRleHQtYWxpZ246anVzdGlmeTsgd2lkdGg6NGVtOyI+WWVzIDxzcGFuPik8L3NwYW4+
PC9kaXY+Cis8ZGl2IGNsYXNzPSJoYW5nIiBzdHlsZT0idGV4dC1hbGlnbjpqdXN0aWZ5OyB3aWR0
aDo0ZW07Ij5Oby4gPHNwYW4gc3R5bGU9ImJvcmRlci1sZWZ0OjFlbSBzb2xpZCBibHVlIj4pPC9z
cGFuPjwvZGl2PgpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC90ZXh0L2hhbmdpbmctcHVuY3R1YXRp
b24tbGFzdC13cy1leHBlY3RlZC5odG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3Qv
dGV4dC9oYW5naW5nLXB1bmN0dWF0aW9uLWxhc3Qtd3MtZXhwZWN0ZWQuaHRtbAkocmV2aXNpb24g
MCkKKysrIExheW91dFRlc3RzL2Zhc3QvdGV4dC9oYW5naW5nLXB1bmN0dWF0aW9uLWxhc3Qtd3Mt
ZXhwZWN0ZWQuaHRtbAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDEyIEBACis8aGVhZD4KKyAg
ICA8c3R5bGU+CisgICAgYm9keSB7IGZvbnQtZmFtaWx5OiAnQWhlbSc7IGNvbG9yOmdyZWVuIH0K
KyAgICAuaGFuZyB7IG1hcmdpbjoxZW0gfQorICAgIDwvc3R5bGU+Cis8L2hlYWQ+Cis8Ym9keT4K
KzxkaXYgc3R5bGU9ImZsb2F0OmxlZnQ7IiBjbGFzcz0iaGFuZyI+KEhhbmcgdGVzdCk8L2Rpdj4K
KzxkaXYgc3R5bGU9ImNsZWFyOmJvdGgiPgorICAgIDxkaXYgY2xhc3M9ImhhbmciIHN0eWxlPSJ3
aWR0aDo1ZW0iPk5vLjxicj5ZZXMuKTwvZGl2PgorICAgIDxkaXYgY2xhc3M9ImhhbmciIHN0eWxl
PSJ0ZXh0LWFsaWduOmp1c3RpZnk7IHdpZHRoOjVlbTsiPlllcyA8c3Bhbj4pPC9zcGFuPjwvZGl2
PgorICAgIDxkaXYgY2xhc3M9ImhhbmciIHN0eWxlPSJ0ZXh0LWFsaWduOmp1c3RpZnk7IHdpZHRo
OjRlbTsiPk5vLiA8c3BhbiBzdHlsZT0iYm9yZGVyLXJpZ2h0OjFlbSBzb2xpZCBibHVlIj4pPC9z
cGFuPjwvZGl2PgpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC90ZXh0L2hhbmdpbmctcHVuY3R1YXRp
b24tbGFzdC13cy5odG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3QvdGV4dC9oYW5n
aW5nLXB1bmN0dWF0aW9uLWxhc3Qtd3MuaHRtbAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3Rz
L2Zhc3QvdGV4dC9oYW5naW5nLXB1bmN0dWF0aW9uLWxhc3Qtd3MuaHRtbAkod29ya2luZyBjb3B5
KQpAQCAtMCwwICsxLDEyIEBACis8aGVhZD4KKzxzdHlsZT4KKyAgICBib2R5IHsgZm9udC1mYW1p
bHk6ICdBaGVtJzsgY29sb3I6Z3JlZW4gfQorICAgIC5oYW5nIHsgaGFuZ2luZy1wdW5jdHVhdGlv
bjogbGFzdDsgbWFyZ2luOjFlbSB9Cis8L3N0eWxlPgorPC9oZWFkPgorPGJvZHk+Cis8ZGl2IHN0
eWxlPSJmbG9hdDpsZWZ0OyIgY2xhc3M9ImhhbmciPihIYW5nIHRlc3QpICA8L2Rpdj4KKzxkaXYg
c3R5bGU9ImNsZWFyOmJvdGgiPgorPGRpdiBjbGFzcz0iaGFuZyIgc3R5bGU9IndpZHRoOjRlbSI+
Tm8uPGJyPlllcy4pICA8L2Rpdj4KKzxkaXYgY2xhc3M9ImhhbmciIHN0eWxlPSJ0ZXh0LWFsaWdu
Omp1c3RpZnk7IHdpZHRoOjRlbTsiPlllcyA8c3Bhbj4pIDwvc3Bhbj48L2Rpdj4KKzxkaXYgY2xh
c3M9ImhhbmciIHN0eWxlPSJ0ZXh0LWFsaWduOmp1c3RpZnk7IHdpZHRoOjRlbTsiPk5vLiA8c3Bh
biBzdHlsZT0iYm9yZGVyLXJpZ2h0OjFlbSBzb2xpZCBibHVlIj4pIDwvc3Bhbj4gIDwvZGl2PgpJ
bmRleDogTGF5b3V0VGVzdHMvZmFzdC90ZXh0L2hhbmdpbmctcHVuY3R1YXRpb24tbGFzdC5odG1s
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3QvdGV4dC9oYW5naW5nLXB1bmN0dWF0aW9u
LWxhc3QuaHRtbAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2Zhc3QvdGV4dC9oYW5naW5n
LXB1bmN0dWF0aW9uLWxhc3QuaHRtbAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDEzIEBACis8
aGVhZD4KKzxzdHlsZT4KKyAgICBib2R5IHsgZm9udC1mYW1pbHk6ICdBaGVtJzsgY29sb3I6Z3Jl
ZW4gfQorICAgIC5oYW5nIHsgaGFuZ2luZy1wdW5jdHVhdGlvbjogbGFzdDsgbWFyZ2luOjFlbSB9
Cis8L3N0eWxlPgorPC9oZWFkPgorPGJvZHk+Cis8ZGl2IHN0eWxlPSJmbG9hdDpsZWZ0OyIgY2xh
c3M9ImhhbmciPihIYW5nIHRlc3QpPC9kaXY+Cis8ZGl2IHN0eWxlPSJjbGVhcjpib3RoIj4KKzxk
aXYgY2xhc3M9ImhhbmciIHN0eWxlPSJ3aWR0aDo0ZW0iCisgICAgPk5vLjxicj5ZZXMuKTwvZGl2
PgorPGRpdiBjbGFzcz0iaGFuZyIgc3R5bGU9InRleHQtYWxpZ246anVzdGlmeTsgd2lkdGg6NGVt
OyI+WWVzIDxzcGFuPik8L3NwYW4+PC9kaXY+Cis8ZGl2IGNsYXNzPSJoYW5nIiBzdHlsZT0idGV4
dC1hbGlnbjpqdXN0aWZ5OyB3aWR0aDo0ZW07Ij5Oby4gPHNwYW4gc3R5bGU9ImJvcmRlci1yaWdo
dDoxZW0gc29saWQgYmx1ZSI+KTwvc3Bhbj48L2Rpdj4K
</data>
<flag name="review"
          id="297533"
          type_id="1"
          status="+"
          setter="darin"
    />
          </attachment>
      

    </bug>

</bugzilla>