<?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>36419</bug_id>
          
          <creation_ts>2010-03-20 14:39:29 -0700</creation_ts>
          <short_desc>A backslash in EUC-JP becomes to a yen sign when it is copied</short_desc>
          <delta_ts>2010-04-20 22:25:33 -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>WebCore Misc.</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>24906</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Shinichiro Hamaji">hamaji</reporter>
          <assigned_to name="Shinichiro Hamaji">hamaji</assigned_to>
          <cc>abarth</cc>
    
    <cc>ap</cc>
    
    <cc>darin</cc>
    
    <cc>eric</cc>
    
    <cc>jshin</cc>
    
    <cc>mitz</cc>
    
    <cc>webkit.review.bot</cc>
    
    <cc>yuzo</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>202246</commentid>
    <comment_count>0</comment_count>
    <who name="Shinichiro Hamaji">hamaji</who>
    <bug_when>2010-03-20 14:39:29 -0700</bug_when>
    <thetext>Discussion about this issue can be found in Bug 24906. This happens because WebKit is calling display(String|Buffer)ModifiedByEncoding even when the strings are not for displaying.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>202247</commentid>
    <comment_count>1</comment_count>
      <attachid>51234</attachid>
    <who name="Shinichiro Hamaji">hamaji</who>
    <bug_when>2010-03-20 14:46:25 -0700</bug_when>
    <thetext>Created attachment 51234
Patch v1</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>202248</commentid>
    <comment_count>2</comment_count>
    <who name="Shinichiro Hamaji">hamaji</who>
    <bug_when>2010-03-20 15:01:35 -0700</bug_when>
    <thetext>As I wrote in Bug 24906, I&apos;d like to fix this issue first.

This patch adds a parameter isForCopying into TextIterator and plainText uses this version. I examined how plainText is used and if I understand correctly, it is used by copying, spell checker, and transpose. I think our transcoding doesn&apos;t affect the spell checker. Copying and transpose are covered by the layout tests in my patch. Note that this patch fixes the issue of transpose as well as copying. Before this patch, transposing &quot;\\&quot; yields &quot;&lt;yen&gt;&lt;yen&gt;&quot;.

I&apos;ll reply comments in Bug 24906 related to this issue.

&gt; I don&apos;t understand the meaning here. What is a &quot;non-display string&quot;? A display
&gt; string is a string intended for display to the end user. But &quot;non-display&quot;
&gt; doesn&apos;t tell me anything.

I&apos;m using textForCopying in this patch. It might not be the best name as this will be used by a few other ways such as spell checker and transpose. I hope this naming makes more sense because the main purpose of having this function is copying.

&gt; Does searching work correctly with this patch, so that a yen sign as visible on
&gt; a web page can always be found by searching for a yen sign? I think it should
&gt; work, but nothing beats actual testing.

As I wrote in Bug 24906, my patch in Bug 24906 broke searching, but this patch won&apos;t. Thanks again for this catch.

&gt; Do these tests pass in IE?

Yes, actually they are doing nothing, but the backslash in their font is the yen sign.

&gt; 2. In the text-transform + transcoding case, you just fall back on using the (transcoded) text() as the nonDisplayString(). Perhaps in this case you nonDisplayString() could apply the transform on the fly to the original string (so it will return a transformed, yet not transcoded, string).

Nice suggestion! Now my patch is doing on the fly transformation.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>209594</commentid>
    <comment_count>3</comment_count>
    <who name="Shinichiro Hamaji">hamaji</who>
    <bug_when>2010-04-07 06:03:04 -0700</bug_when>
    <thetext>Ping?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>209711</commentid>
    <comment_count>4</comment_count>
      <attachid>51234</attachid>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2010-04-07 10:33:51 -0700</bug_when>
    <thetext>Comment on attachment 51234
Patch v1

This looks good enough for me to say r+. But it would be even better if Dan and/or Darin could take a look, too. Some comments below.

&gt; +(Note that this test makes sense only when you are using DumpRenderTree and dumpAsText. You will see yen signs when you are using Safari because of transcoding)

It seems that this test can be made to work in Safari with String.charCodeAt().

&gt; +    for (TextIterator it(r, false, false, !isDisplayString); !it.atEnd(); it.advance()) {

This is really hard to read. It&apos;s a common problem in WebCore, but we are trying to improve argument readability (usually by adding new overloaded methods, or using named enums for argument values).

&gt; +    bool m_isForCopying;

As you said, this name can be  confusing. I don&apos;t have a better suggestion, but there should be at least a comment.

&gt; +void RenderText::updateNeedsTranscode()
&gt; +{
&gt; +    const TextEncoding* encoding = document()-&gt;decoder() ? &amp;document()-&gt;decoder()-&gt;encoding() : 0;
&gt; +    m_needsTranscode = (encoding &amp;&amp; encoding-&gt;backslashAsCurrencySymbol() != &apos;\\&apos;);
&gt; +}

TextResourceDecoder always has an encoding, so you could save a null check by writing this in a different way.

Thanks for the good test coverage!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>213855</commentid>
    <comment_count>5</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2010-04-18 16:29:30 -0700</bug_when>
    <thetext>Attachment 51234 was posted by a committer and has review+, assigning to Shinichiro Hamaji for commit.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>214600</commentid>
    <comment_count>6</comment_count>
      <attachid>53805</attachid>
    <who name="Shinichiro Hamaji">hamaji</who>
    <bug_when>2010-04-20 06:08:56 -0700</bug_when>
    <thetext>Created attachment 53805
Patch v2</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>214607</commentid>
    <comment_count>7</comment_count>
      <attachid>53807</attachid>
    <who name="Shinichiro Hamaji">hamaji</who>
    <bug_when>2010-04-20 06:27:25 -0700</bug_when>
    <thetext>Created attachment 53807
Patch v3</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>214608</commentid>
    <comment_count>8</comment_count>
    <who name="Shinichiro Hamaji">hamaji</who>
    <bug_when>2010-04-20 06:28:45 -0700</bug_when>
    <thetext>Thanks for your review!

&gt; &gt; +(Note that this test makes sense only when you are using DumpRenderTree and dumpAsText. You will see yen signs when you are using Safari because of transcoding)
&gt; 
&gt; It seems that this test can be made to work in Safari with String.charCodeAt().

True. I modified the test.

&gt; This is really hard to read. It&apos;s a common problem in WebCore, but we are
&gt; trying to improve argument readability (usually by adding new overloaded
&gt; methods, or using named enums for argument values).

Added an enum TextIteratorBehavior. I didn&apos;t remove the older TextIterator because 1. I&apos;m not sure this change improves the readability a lot and 2. the change becomes bigger. If someone thinks we should remove the boolean version of TextIterator, I&apos;ll do this, but in a separated change.

&gt; &gt; +    bool m_isForCopying;
&gt; 
&gt; As you said, this name can be  confusing. I don&apos;t have a better suggestion, but
&gt; there should be at least a comment.

Added a comment. Also, I guess m_emitsTextsWithoutTranscoding is easier to understand. I changed the name of this member.

&gt; TextResourceDecoder always has an encoding, so you could save a null check by
&gt; writing this in a different way.

Done.

I&apos;ve updated copy-backslash-with-euc.html between Patch v2 and v3 because I uploaded the wrong version of this in v2.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>214733</commentid>
    <comment_count>9</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2010-04-20 10:17:27 -0700</bug_when>
    <thetext>(In reply to comment #8)
&gt; Added an enum TextIteratorBehavior. I didn&apos;t remove the older TextIterator
&gt; because 1. I&apos;m not sure this change improves the readability a lot and 2. the
&gt; change becomes bigger. If someone thinks we should remove the boolean version
&gt; of TextIterator, I&apos;ll do this, but in a separated change.

I do think it does improve readability at call sites like the one in visible_units.cpp and I would like to do that in a separate change.

The functions in TextIterator.h that use booleans in a confusing way are:

    - plainTextToMallocAllocatedBuffer
    - findPlainText
    - TextIterator constructor
    - TextIterator::rangeLength
    - TextIterator::rangeFromLocationAndLength
    - CharacterIterator constructor</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>214734</commentid>
    <comment_count>10</comment_count>
      <attachid>53807</attachid>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2010-04-20 10:18:52 -0700</bug_when>
    <thetext>Comment on attachment 53807
Patch v3

+&lt;script charset=&quot;UTF-8&quot;&gt;

I don&apos;t think this charset attribute has any effect, other than adding confusion. Script charset attribute is only used for external scripts.

&gt; If someone thinks we should remove the boolean version
&gt; of TextIterator, I&apos;ll do this, but in a separated change.

That sounds like a good change to make.

r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>214835</commentid>
    <comment_count>11</comment_count>
      <attachid>53807</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2010-04-20 12:12:47 -0700</bug_when>
    <thetext>Comment on attachment 53807
Patch v3

&gt; +    , m_emitsTextsWithoutTranscoding(false)

Should be m_emitsTextWithoutTranscoding. The word &quot;texts&quot; is not appropriate here, because it doesn&apos;t mean &quot;more than one piece of text&quot; in normal English usage. That plural normally only used with the word &quot;text&quot; in the sense of &quot;an entire book&quot;. And the name works fine without the plural. The word &quot;text&quot; can mean &quot;the text from inside multiple text nodes&quot;.

&gt; -    String str = renderer-&gt;text();
&gt; +    String str;
&gt; +    if (m_emitsTextsWithoutTranscoding)
&gt; +        str = renderer-&gt;textWithoutTranscoding();
&gt; +    else
&gt; +        str = renderer-&gt;text();

I think this would be more efficient (no empty construction before assignment) as well as slightly clearer with a trinary operator instead of an if statement. Or it might end up making the line too long and so be less clear. Not sure.

&gt; +enum TextIteratorBehavior {
&gt; +    TextIteratorBehaviorDefault = 0,
&gt; +    TextIteratorBehaviorEmitCharactersBetweenAllVisiblePositions = 1 &lt;&lt; 0,
&gt; +    TextIteratorBehaviorEnterTextControls = 1 &lt;&lt; 1,
&gt; +    TextIteratorBehaviorEmitsTextsWithoutTranscoding = 1 &lt;&lt; 2,
&gt; +};

A problem with using an enum for a bit mask is that if you use the &quot;|&quot; operator then the result is an integer, not a TextIteratorBehavior. I could not find a good example of a better solution elsewhere in WebCore, so I suppose this is OK.

&gt; +    explicit TextIterator(const Range*, TextIteratorBehavior);

The explicit keyword has no meaning on a constructor with more than one argument so you should omit it.

&gt; +    // FIXME: check fonts when we implement font-based transcoding.

This comment is about future plans, but I&apos;m not sure it&apos;s helpful. For example, it says &quot;FIXME&quot; but there is nothing to fix unless we add font-based transcoding.

&gt; +void RenderText::transformText(String&amp; text) const
&gt; +{
&gt; +    ASSERT(style());
&gt; +    switch (style()-&gt;textTransform()) {
&gt; +    case TTNONE:
&gt; +        break;
&gt; +    case CAPITALIZE:
&gt; +        makeCapitalized(&amp;text, previousCharacter());
&gt; +        break;
&gt; +    case UPPERCASE:
&gt; +        text.makeUpper();
&gt; +        break;
&gt; +    case LOWERCASE:
&gt; +        text.makeLower();
&gt; +        break;
&gt; +    }
&gt; +}

I think this function should be moved up higher in the file and marked inline since there are only two callers, both inside this source file. My guess is that would make the code smaller and reduce overhead in the common case of no transform.

Another possibility would be to make it illegal to call this function when the transform is TTNONE and add another check of the transform. One call site has it already.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>214938</commentid>
    <comment_count>12</comment_count>
      <attachid>53878</attachid>
    <who name="Shinichiro Hamaji">hamaji</who>
    <bug_when>2010-04-20 14:13:06 -0700</bug_when>
    <thetext>Created attachment 53878
Patch v4</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>214942</commentid>
    <comment_count>13</comment_count>
    <who name="Shinichiro Hamaji">hamaji</who>
    <bug_when>2010-04-20 14:20:12 -0700</bug_when>
    <thetext>Thanks for your reviews! I think I addressed all comments. I&apos;ll create another patch for the readability of TextIterator&apos;s callers.

&gt; +&lt;script charset=&quot;UTF-8&quot;&gt;
&gt; 
&gt; I don&apos;t think this charset attribute has any effect, other than adding
&gt; confusion. Script charset attribute is only used for external scripts.

Thanks for this comment. I didn&apos;t know this. I wanted to get 92 by &quot;\\&quot;.charCodeAt(0) even if the backslash in &lt;script&gt; tag is transcoded into a currency sign due to future changes. I modified the code so we just use 92.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>214971</commentid>
    <comment_count>14</comment_count>
      <attachid>53878</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2010-04-20 14:58:05 -0700</bug_when>
    <thetext>Comment on attachment 53878
Patch v4

&gt; -    explicit TextIterator(const Range*, bool emitCharactersBetweenAllVisiblePositions = false, bool enterTextControls = false);
&gt; -    
&gt; +    TextIterator(const Range*, bool emitCharactersBetweenAllVisiblePositions = false, bool enterTextControls = false);

My comment about &quot;explicit&quot; does not apply to this one. This does need &quot;explicit&quot; because all the arguments except the first are optional.

Otherwise looks good to me.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>214975</commentid>
    <comment_count>15</comment_count>
      <attachid>53885</attachid>
    <who name="Shinichiro Hamaji">hamaji</who>
    <bug_when>2010-04-20 15:02:23 -0700</bug_when>
    <thetext>Created attachment 53885
Patch v5</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>214979</commentid>
    <comment_count>16</comment_count>
    <who name="Shinichiro Hamaji">hamaji</who>
    <bug_when>2010-04-20 15:04:40 -0700</bug_when>
    <thetext>&gt; My comment about &quot;explicit&quot; does not apply to this one. This does need
&gt; &quot;explicit&quot; because all the arguments except the first are optional.

Oops! I might be sleeping when I changed this... Thanks for your comment!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>215125</commentid>
    <comment_count>17</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-04-20 20:54:00 -0700</bug_when>
    <thetext>http://trac.webkit.org/changeset/57940 might have broken Qt Windows 32-bit Debug
The following changes are on the blame list:
http://trac.webkit.org/changeset/57936
http://trac.webkit.org/changeset/57937
http://trac.webkit.org/changeset/57938
http://trac.webkit.org/changeset/57939
http://trac.webkit.org/changeset/57940
http://trac.webkit.org/changeset/57941
http://trac.webkit.org/changeset/57942
http://trac.webkit.org/changeset/57943
http://trac.webkit.org/changeset/57944
http://trac.webkit.org/changeset/57945
http://trac.webkit.org/changeset/57946</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>215136</commentid>
    <comment_count>18</comment_count>
    <who name="Yuzo Fujishima">yuzo</who>
    <bug_when>2010-04-20 22:25:33 -0700</bug_when>
    <thetext>Committed r57952: &lt;http://trac.webkit.org/changeset/57952&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>51234</attachid>
            <date>2010-03-20 14:46:25 -0700</date>
            <delta_ts>2010-04-20 06:08:49 -0700</delta_ts>
            <desc>Patch v1</desc>
            <filename>bug-36419-20100320144623.patch</filename>
            <type>text/plain</type>
            <size>26423</size>
            <attacher name="Shinichiro Hamaji">hamaji</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxv
ZwppbmRleCAwMTBkMWIxLi4yZGNhZDBjIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9DaGFuZ2VM
b2cKKysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTYgQEAKKzIwMTAtMDMt
MjAgIFNoaW5pY2hpcm8gSGFtYWppICA8aGFtYWppQGNocm9taXVtLm9yZz4KKworICAgICAgICBS
ZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBBIGJhY2tzbGFzaCBpbiBFVUMt
SlAgYmVjb21lcyB0byBhIHllbiBzaWduIHdoZW4gaXQgaXMgY29waWVkCisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0zNjQxOQorCisgICAgICAgICogZWRp
dGluZy9leGVjQ29tbWFuZC90cmFuc3Bvc2UtYmFja3NsYXNoLXdpdGgtZXVjLWV4cGVjdGVkLnR4
dDogQWRkZWQuCisgICAgICAgICogZWRpdGluZy9leGVjQ29tbWFuZC90cmFuc3Bvc2UtYmFja3Ns
YXNoLXdpdGgtZXVjLmh0bWw6IEFkZGVkLgorICAgICAgICAqIGVkaXRpbmcvcGFzdGVib2FyZC9j
b3B5LWJhY2tzbGFzaC13aXRoLWV1Yy1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAqIGVk
aXRpbmcvcGFzdGVib2FyZC9jb3B5LWJhY2tzbGFzaC13aXRoLWV1Yy5odG1sOiBBZGRlZC4KKyAg
ICAgICAgKiBlZGl0aW5nL3Bhc3RlYm9hcmQvcmVzb3VyY2VzL2NvcHktYmFja3NsYXNoLWV1Yy5o
dG1sOiBBZGRlZC4KKwogMjAxMC0wMy0xOSAgU2hpbmljaGlybyBIYW1hamkgIDxoYW1hamlAY2hy
b21pdW0ub3JnPgogCiAgICAgICAgIFJldmlld2VkIGJ5IERhbiBCZXJuc3RlaW4uCmRpZmYgLS1n
aXQgYS9MYXlvdXRUZXN0cy9lZGl0aW5nL2V4ZWNDb21tYW5kL3RyYW5zcG9zZS1iYWNrc2xhc2gt
d2l0aC1ldWMtZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvZWRpdGluZy9leGVjQ29tbWFuZC90
cmFuc3Bvc2UtYmFja3NsYXNoLXdpdGgtZXVjLWV4cGVjdGVkLnR4dApuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwLi5mMzhmZDVmCi0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVz
dHMvZWRpdGluZy9leGVjQ29tbWFuZC90cmFuc3Bvc2UtYmFja3NsYXNoLXdpdGgtZXVjLWV4cGVj
dGVkLnR4dApAQCAtMCwwICsxLDIgQEAKK1RoZXJlIHNob3VsZCBiZSB0d28gYmFja3NsYXNoZXMs
IG5vdCB5ZW4gc2lnbnM6IFxcCisoTm90ZSB0aGF0IHRoaXMgdGVzdCBtYWtlcyBzZW5zZSBvbmx5
IHdoZW4geW91IGFyZSB1c2luZyBEdW1wUmVuZGVyVHJlZSBhbmQgZHVtcEFzVGV4dC4gWW91IHdp
bGwgc2VlIHllbiBzaWducyB3aGVuIHlvdSBhcmUgdXNpbmcgU2FmYXJpIGJlY2F1c2Ugb2YgdHJh
bnNjb2RpbmcpCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9lZGl0aW5nL2V4ZWNDb21tYW5kL3Ry
YW5zcG9zZS1iYWNrc2xhc2gtd2l0aC1ldWMuaHRtbCBiL0xheW91dFRlc3RzL2VkaXRpbmcvZXhl
Y0NvbW1hbmQvdHJhbnNwb3NlLWJhY2tzbGFzaC13aXRoLWV1Yy5odG1sCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAuLjcyZWVmODAKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRU
ZXN0cy9lZGl0aW5nL2V4ZWNDb21tYW5kL3RyYW5zcG9zZS1iYWNrc2xhc2gtd2l0aC1ldWMuaHRt
bApAQCAtMCwwICsxLDI5IEBACis8IURPQ1RZUEUgaHRtbD4KKzxodG1sPgorCis8aGVhZD4KKzxt
ZXRhIGNoYXJzZXQ9IkVVQy1KUCI+Cis8c2NyaXB0PgorCitpZiAod2luZG93LmxheW91dFRlc3RD
b250cm9sbGVyKQorICAgIGxheW91dFRlc3RDb250cm9sbGVyLmR1bXBBc1RleHQoKTsKKworZnVu
Y3Rpb24gdGVzdCgpCit7CisgICAgdmFyIGJhY2tzbGFzaERpdkVsZW1lbnQgPSBkb2N1bWVudC5n
ZXRFbGVtZW50QnlJZCgiYmFja3NsYXNoIik7CisgICAgZ2V0U2VsZWN0aW9uKCkuc2VsZWN0QWxs
Q2hpbGRyZW4oYmFja3NsYXNoRGl2RWxlbWVudCk7CisgICAgZG9jdW1lbnQuZXhlY0NvbW1hbmQo
IlRyYW5zcG9zZSIpOworfQorCis8L3NjcmlwdD4KKzwvaGVhZD4KKworPGJvZHkgb25sb2FkPSJ0
ZXN0KCkiPgorCis8ZGl2PlRoZXJlIHNob3VsZCBiZSB0d28gYmFja3NsYXNoZXMsIG5vdCB5ZW4g
c2lnbnM6IDxzcGFuIGlkPSdiYWNrc2xhc2gnIGNvbnRlbnRFZGl0YWJsZT0ndHJ1ZSc+XFw8L3Nw
YW4+PC9kaXY+CisKKzxkaXY+KE5vdGUgdGhhdCB0aGlzIHRlc3QgbWFrZXMgc2Vuc2Ugb25seSB3
aGVuIHlvdSBhcmUgdXNpbmcgRHVtcFJlbmRlclRyZWUgYW5kIGR1bXBBc1RleHQuIFlvdSB3aWxs
IHNlZSB5ZW4gc2lnbnMgd2hlbiB5b3UgYXJlIHVzaW5nIFNhZmFyaSBiZWNhdXNlIG9mIHRyYW5z
Y29kaW5nKTwvZGl2PgorCis8L2JvZHk+CisKKzwvaHRtbD4KZGlmZiAtLWdpdCBhL0xheW91dFRl
c3RzL2VkaXRpbmcvcGFzdGVib2FyZC9jb3B5LWJhY2tzbGFzaC13aXRoLWV1Yy1leHBlY3RlZC50
eHQgYi9MYXlvdXRUZXN0cy9lZGl0aW5nL3Bhc3RlYm9hcmQvY29weS1iYWNrc2xhc2gtd2l0aC1l
dWMtZXhwZWN0ZWQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhjMDFj
OTQKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9lZGl0aW5nL3Bhc3RlYm9hcmQvY29w
eS1iYWNrc2xhc2gtd2l0aC1ldWMtZXhwZWN0ZWQudHh0CkBAIC0wLDAgKzEsNDAgQEAKKworT3Jp
Z2luYWwgdGV4dHMgd2hpY2ggd2lsbCBiZSBjb3BpZWQKKworXCBmcm9tIFVURjggcGFnZQorXCBG
Uk9NIFVURjggUEFHRSAoVFJBTlNGT1JNRUQpCivigKLigKLigKLigKLigKLigKLigKLigKLigKLi
gKLigKLigKLigKLigKLigKLigKLigKLigKLigKLigKLigKLigKLigKLigKLigKIKKworVGV4dHMg
aW4gdGhlIEVVQyBmcmFtZSB3aWxsIGJlIHBhc3RlZCBoZXJlCisKK2Zyb20gRVVDIGRpdiB0byBV
VEY4IHRleHQtY29udHJvbDogCitmcm9tIEVVQyBkaXYgdG8gVVRGOCBjb250ZW50LWVkaXRhYmxl
OiBcIGZyb20gRVVDIHBhZ2UKKworZnJvbSBFVUMgdHJhbnNmb3JtIHRvIFVURjggdGV4dC1jb250
cm9sOiAKK2Zyb20gRVVDIHRyYW5zZm9ybSB0byBVVEY4IGNvbnRlbnQtZWRpdGFibGU6IFwgRlJP
TSBFVUMgUEFHRSAoVFJBTlNGT1JNRUQpCisKK2Zyb20gRVVDIHNlY3VyZSB0byBVVEY4IHRleHQt
Y29udHJvbDogCitmcm9tIEVVQyBzZWN1cmUgdG8gVVRGOCBjb250ZW50LWVkaXRhYmxlOiDigKLi
gKLigKLigKLigKLigKLigKLigKLigKLigKLigKLigKLigKLigKLigKLigKLigKLigKLigKLigKLi
gKLigKLigKLigKIKKworZnJvbSBFVUMgY29udHJvbCB0byBVVEY4IHRleHQtY29udHJvbDogCitm
cm9tIEVVQyBjb250cm9sIHRvIFVURjggY29udGVudC1lZGl0YWJsZTogXCBmcm9tIEVVQyB0ZXh0
IGNvbnRyb2wKKworUmVzdWx0cworCitmcm9tIEVVQyBkaXYgdG8gVVRGOCB0ZXh0LWNvbnRyb2w6
IFBBU1MKK2Zyb20gRVVDIGRpdiB0byBVVEY4IGNvbnRlbnQtZWRpdGFibGU6IFBBU1MKK2Zyb20g
RVVDIHRyYW5zZm9ybSB0byBVVEY4IHRleHQtY29udHJvbDogUEFTUworZnJvbSBFVUMgdHJhbnNm
b3JtIHRvIFVURjggY29udGVudC1lZGl0YWJsZTogUEFTUworZnJvbSBFVUMgc2VjdXJlIHRvIFVU
RjggdGV4dC1jb250cm9sOiBQQVNTCitmcm9tIEVVQyBzZWN1cmUgdG8gVVRGOCBjb250ZW50LWVk
aXRhYmxlOiBQQVNTCitmcm9tIEVVQyBjb250cm9sIHRvIFVURjggdGV4dC1jb250cm9sOiBQQVNT
Citmcm9tIEVVQyBjb250cm9sIHRvIFVURjggY29udGVudC1lZGl0YWJsZTogUEFTUworZnJvbSBV
VEY4IGRpdiB0byBFVUMgdGV4dC1jb250cm9sOiBQQVNTCitmcm9tIFVURjggZGl2IHRvIEVVQyBj
b250ZW50LWVkaXRhYmxlOiBQQVNTCitmcm9tIFVURjggdHJhbnNmb3JtIHRvIEVVQyB0ZXh0LWNv
bnRyb2w6IFBBU1MKK2Zyb20gVVRGOCB0cmFuc2Zvcm0gdG8gRVVDIGNvbnRlbnQtZWRpdGFibGU6
IFBBU1MKK2Zyb20gVVRGOCBzZWN1cmUgdG8gRVVDIHRleHQtY29udHJvbDogUEFTUworZnJvbSBV
VEY4IHNlY3VyZSB0byBFVUMgY29udGVudC1lZGl0YWJsZTogUEFTUworZnJvbSBVVEY4IGNvbnRy
b2wgdG8gRVVDIHRleHQtY29udHJvbDogUEFTUworZnJvbSBVVEY4IGNvbnRyb2wgdG8gRVVDIGNv
bnRlbnQtZWRpdGFibGU6IFBBU1MKKwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvZWRpdGluZy9w
YXN0ZWJvYXJkL2NvcHktYmFja3NsYXNoLXdpdGgtZXVjLmh0bWwgYi9MYXlvdXRUZXN0cy9lZGl0
aW5nL3Bhc3RlYm9hcmQvY29weS1iYWNrc2xhc2gtd2l0aC1ldWMuaHRtbApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwLi5mYjIyMTIyCi0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0
VGVzdHMvZWRpdGluZy9wYXN0ZWJvYXJkL2NvcHktYmFja3NsYXNoLXdpdGgtZXVjLmh0bWwKQEAg
LTAsMCArMSwxMDYgQEAKKzwhRE9DVFlQRSBodG1sPgorPGh0bWw+CisKKzxoZWFkPgorPG1ldGEg
Y2hhcnNldD0iVVRGLTgiPgorPHNjcmlwdD4KKworaWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29udHJv
bGxlcikKKyAgICBsYXlvdXRUZXN0Q29udHJvbGxlci5kdW1wQXNUZXh0KCk7CisKKy8vIFNlbGVj
dCBhbiBlbGVtZW50IGFuIHJldHVybiBpdHMgdmFsdWUuCitmdW5jdGlvbiBzZWxlY3RFbGVtZW50
KGVsZW1lbnQpCit7CisgICAgaWYgKGVsZW1lbnQudGFnTmFtZS50b0xvd2VyQ2FzZSgpID09ICdp
bnB1dCcpIHsKKyAgICAgICAgZWxlbWVudC5mb2N1cygpOworICAgICAgICBlbGVtZW50LnNlbGVj
dCgpOworICAgICAgICByZXR1cm4gZWxlbWVudC52YWx1ZTsKKyAgICB9IGVsc2UgeworICAgICAg
ICBnZXRTZWxlY3Rpb24oKS5zZWxlY3RBbGxDaGlsZHJlbihlbGVtZW50KTsKKyAgICAgICAgcmV0
dXJuIGVsZW1lbnQuaW5uZXJUZXh0OworICAgIH0KK30KKworZnVuY3Rpb24gdGVzdENvcHlBbmRQ
YXN0ZVRleHRzKGZyb21Eb2N1bWVudCwgZnJvbU5hbWUsIHRvRG9jdW1lbnQsIHRvTmFtZSkKK3sK
KyAgICB2YXIgcmVzdWx0c0VsZW1lbnQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgicmVzdWx0
cyIpOworCisgICAgdmFyIHBhc3RlYm9hcmRFbGVtZW50ID0gdG9Eb2N1bWVudC5nZXRFbGVtZW50
QnlJZCgicGFzdGVib2FyZCIpOworCisgICAgdmFyIGZyb21FbGVtZW50TmFtZXMgPSBbImRpdiIs
ICJ0cmFuc2Zvcm0iLCAic2VjdXJlIiwgImNvbnRyb2wiXTsKKyAgICBmb3IgKHZhciBpID0gMDsg
aSA8IGZyb21FbGVtZW50TmFtZXMubGVuZ3RoOyBpKyspIHsKKyAgICAgICAgdmFyIGZyb21FbGVt
ZW50TmFtZSA9IGZyb21FbGVtZW50TmFtZXNbaV07CisgICAgICAgIHZhciBmcm9tRWxlbWVudCA9
IGZyb21Eb2N1bWVudC5nZXRFbGVtZW50QnlJZChmcm9tRWxlbWVudE5hbWUpOworICAgICAgICBz
ZWxlY3RFbGVtZW50KGZyb21FbGVtZW50KTsKKyAgICAgICAgZnJvbURvY3VtZW50LmV4ZWNDb21t
YW5kKCJDb3B5Iik7CisKKyAgICAgICAgdmFyIHRvRWxlbWVudE5hbWVTdWZmaXhlcyA9IFsidGV4
dC1jb250cm9sIiwgImNvbnRlbnQtZWRpdGFibGUiXTsKKyAgICAgICAgZm9yICh2YXIgaiA9IDA7
IGogPCB0b0VsZW1lbnROYW1lU3VmZml4ZXMubGVuZ3RoOyBqKyspIHsKKyAgICAgICAgICAgIHZh
ciB0b0VsZW1lbnROYW1lU3VmZml4ID0gdG9FbGVtZW50TmFtZVN1ZmZpeGVzW2pdOworCisgICAg
ICAgICAgICB2YXIgdGVzdE5hbWUgPSAiZnJvbSAiICsgZnJvbU5hbWUudG9VcHBlckNhc2UoKSAr
ICIgIiArIGZyb21FbGVtZW50TmFtZSArICIgdG8gIiArIHRvTmFtZS50b1VwcGVyQ2FzZSgpICsg
IiAiICsgdG9FbGVtZW50TmFtZVN1ZmZpeCArICI6ICI7CisgICAgICAgICAgICB2YXIgdG9EZXNj
cmlwdGlvblRleHQgPSB0b0RvY3VtZW50LmNyZWF0ZVRleHROb2RlKHRlc3ROYW1lKTsKKyAgICAg
ICAgICAgIHBhc3RlYm9hcmRFbGVtZW50LmFwcGVuZENoaWxkKHRvRGVzY3JpcHRpb25UZXh0KTsK
KyAgICAgICAgICAgIHZhciB0b0VsZW1lbnQgPSBudWxsOworICAgICAgICAgICAgaWYgKHRvRWxl
bWVudE5hbWVTdWZmaXggPT0gInRleHQtY29udHJvbCIpIHsKKyAgICAgICAgICAgICAgICB0b0Vs
ZW1lbnQgPSB0b0RvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImlucHV0Iik7CisgICAgICAgICAgICAg
ICAgdG9FbGVtZW50LnZhbHVlID0gIkZBSUwiOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAg
ICAgICAgICAgICB0b0VsZW1lbnQgPSB0b0RvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInNwYW4iKTsK
KyAgICAgICAgICAgICAgICB0b0VsZW1lbnQuY29udGVudEVkaXRhYmxlID0gInRydWUiOworICAg
ICAgICAgICAgICAgIHRvRWxlbWVudC5pbm5lckhUTUwgPSAiRkFJTCI7CisgICAgICAgICAgICB9
CisgICAgICAgICAgICBwYXN0ZWJvYXJkRWxlbWVudC5hcHBlbmRDaGlsZCh0b0VsZW1lbnQpOwor
ICAgICAgICAgICAgcGFzdGVib2FyZEVsZW1lbnQuYXBwZW5kQ2hpbGQodG9Eb2N1bWVudC5jcmVh
dGVFbGVtZW50KCJiciIpKTsKKworICAgICAgICAgICAgc2VsZWN0RWxlbWVudCh0b0VsZW1lbnQp
OworICAgICAgICAgICAgdG9Eb2N1bWVudC5leGVjQ29tbWFuZCgiUGFzdGUiKTsKKyAgICAgICAg
ICAgIHZhciBhY3R1YWxUZXh0ID0gc2VsZWN0RWxlbWVudCh0b0VsZW1lbnQpOworCisgICAgICAg
ICAgICB2YXIgcmVzdWx0ID0gIlBBU1MiOworICAgICAgICAgICAgdmFyIGV4cGVjdGVkTGVhZGlu
Z1N0cmluZyA9ICJcIGZyb20gIjsKKyAgICAgICAgICAgIGlmIChmcm9tRWxlbWVudE5hbWUgPT0g
InNlY3VyZSIpCisgICAgICAgICAgICAgICAgZXhwZWN0ZWRMZWFkaW5nU3RyaW5nID0gIuKAouKA
ouKAouKAouKAouKAouKAoiI7CisgICAgICAgICAgICBlbHNlIGlmIChmcm9tRWxlbWVudE5hbWUg
PT0gInRyYW5zZm9ybSIpCisgICAgICAgICAgICAgICAgZXhwZWN0ZWRMZWFkaW5nU3RyaW5nID0g
ZXhwZWN0ZWRMZWFkaW5nU3RyaW5nLnRvVXBwZXJDYXNlKCk7CisgICAgICAgICAgICBpZiAoYWN0
dWFsVGV4dC5zZWFyY2goZXhwZWN0ZWRMZWFkaW5nU3RyaW5nKSA8IDApCisgICAgICAgICAgICAg
ICAgcmVzdWx0ID0gIkZBSUw6ICIgKyBhY3R1YWxUZXh0OworCisgICAgICAgICAgICByZXN1bHRz
RWxlbWVudC5pbm5lckhUTUwgKz0gdGVzdE5hbWUgKyByZXN1bHQgKyAiPGJyPiI7CisgICAgICAg
IH0KKyAgICB9Cit9CisKK2Z1bmN0aW9uIHRlc3QoKQoreworICAgIHRlc3RDb3B5QW5kUGFzdGVU
ZXh0cyhmcmFtZXNbMF0uZG9jdW1lbnQsICJldWMiLCBkb2N1bWVudCwgInV0ZjgiKTsKKyAgICB0
ZXN0Q29weUFuZFBhc3RlVGV4dHMoZG9jdW1lbnQsICJ1dGY4IiwgZnJhbWVzWzBdLmRvY3VtZW50
LCAiZXVjIik7Cit9CisKKzwvc2NyaXB0PgorPC9oZWFkPgorCis8Ym9keSBvbmxvYWQ9InRlc3Qo
KSI+CisKKzxkaXY+Cis8aWZyYW1lIHNyYz0icmVzb3VyY2VzL2NvcHktYmFja3NsYXNoLWV1Yy5o
dG1sIiB3aWR0aD0iNjAwIiBoZWlnaHQ9IjMwMCI+PC9pZnJhbWU+Cis8L2Rpdj4KKworPGgyPk9y
aWdpbmFsIHRleHRzIHdoaWNoIHdpbGwgYmUgY29waWVkPC9oMj4KKzxkaXYgaWQ9ImRpdiI+XCBm
cm9tIFVURjggcGFnZTwvZGl2PgorPGRpdiBpZD0idHJhbnNmb3JtIiBzdHlsZT0idGV4dC10cmFu
c2Zvcm06dXBwZXJjYXNlIj5cIGZyb20gVVRGOCBwYWdlICh0cmFuc2Zvcm1lZCk8L2Rpdj4KKzxk
aXYgaWQ9InNlY3VyZSIgc3R5bGU9Ii13ZWJraXQtdGV4dC1zZWN1cml0eTpkaXNjIj5cIGZyb20g
VVRGOCBwYWdlIChzZWN1cmUpPC9kaXY+Cis8aW5wdXQgaWQ9ImNvbnRyb2wiIHZhbHVlPSJcIGZy
b20gVVRGOCB0ZXh0IGNvbnRyb2wiPgorCis8aDI+VGV4dHMgaW4gdGhlIEVVQyBmcmFtZSB3aWxs
IGJlIHBhc3RlZCBoZXJlPC9oMj4KKzxkaXYgaWQ9InBhc3RlYm9hcmQiPjwvZGl2PgorCis8YnI+
CisKKzxoMj5SZXN1bHRzPC9oMj4KKzxwIGlkPSJyZXN1bHRzIj4KKzwvcD4KKworPC9ib2R5Pgor
Cis8L2h0bWw+CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9lZGl0aW5nL3Bhc3RlYm9hcmQvcmVz
b3VyY2VzL2NvcHktYmFja3NsYXNoLWV1Yy5odG1sIGIvTGF5b3V0VGVzdHMvZWRpdGluZy9wYXN0
ZWJvYXJkL3Jlc291cmNlcy9jb3B5LWJhY2tzbGFzaC1ldWMuaHRtbApuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwLi41YTlmNDAyCi0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVz
dHMvZWRpdGluZy9wYXN0ZWJvYXJkL3Jlc291cmNlcy9jb3B5LWJhY2tzbGFzaC1ldWMuaHRtbApA
QCAtMCwwICsxLDIxIEBACis8IURPQ1RZUEUgaHRtbD4KKzxodG1sPgorCis8aGVhZD4KKzxtZXRh
IGNoYXJzZXQ9IkVVQy1KUCI+Cis8L2hlYWQ+CisKKzxib2R5PgorCis8aDI+T3JpZ2luYWwgdGV4
dHMgd2hpY2ggd2lsbCBiZSBjb3BpZWQ8L2gyPgorPGRpdiBpZD0iZGl2Ij5cIGZyb20gRVVDIHBh
Z2U8L2Rpdj4KKzxkaXYgaWQ9InRyYW5zZm9ybSIgc3R5bGU9InRleHQtdHJhbnNmb3JtOnVwcGVy
Y2FzZSI+XCBmcm9tIEVVQyBwYWdlICh0cmFuc2Zvcm1lZCk8L2Rpdj4KKzxkaXYgaWQ9InNlY3Vy
ZSIgc3R5bGU9Ii13ZWJraXQtdGV4dC1zZWN1cml0eTpkaXNjIj5cIGZyb20gRVVDIHBhZ2UgKHNl
Y3VyZSk8L2Rpdj4KKzxpbnB1dCBpZD0iY29udHJvbCIgdmFsdWU9IlwgZnJvbSBFVUMgdGV4dCBj
b250cm9sIj4KKworPGgyPlRleHRzIGluIHRoZSBVVEY4IGZyYW1lIHdpbGwgYmUgcGFzdGVkIGhl
cmU8L2gyPgorPGRpdiBpZD0icGFzdGVib2FyZCI+PC9kaXY+CisKKzwvYm9keT4KKworPC9odG1s
PgpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9DaGFuZ2VMb2cgYi9XZWJDb3JlL0NoYW5nZUxvZwppbmRl
eCBjZmNkMjQ3Li4yYmQ0MTE3IDEwMDY0NAotLS0gYS9XZWJDb3JlL0NoYW5nZUxvZworKysgYi9X
ZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQxIEBACisyMDEwLTAzLTIwICBTaGluaWNoaXJv
IEhhbWFqaSAgPGhhbWFqaUBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9C
T0RZIChPT1BTISkuCisKKyAgICAgICAgQSBiYWNrc2xhc2ggaW4gRVVDLUpQIGJlY29tZXMgdG8g
YSB5ZW4gc2lnbiB3aGVuIGl0IGlzIGNvcGllZAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MzY0MTkKKworICAgICAgICBUZXN0czogZWRpdGluZy9leGVj
Q29tbWFuZC90cmFuc3Bvc2UtYmFja3NsYXNoLXdpdGgtZXVjLmh0bWwKKyAgICAgICAgICAgICAg
IGVkaXRpbmcvcGFzdGVib2FyZC9jb3B5LWJhY2tzbGFzaC13aXRoLWV1Yy5odG1sCisKKyAgICAg
ICAgKiBXZWJDb3JlLmJhc2UuZXhwOiBOb3cgVGV4dEl0ZXJhdG9yJ3MgY29uc3RydWN0b3IgdGFr
ZXMgYm9vbCBpc0ZvckNvcHlpbmcKKyAgICAgICAgKiBlZGl0aW5nL0VkaXRvci5jcHA6IFJlbW92
ZSBhbiB1bm5lY2Vzc2FyeSBkaXNwbGF5U3RyaW5nTW9kaWZpZWRCeUVuY29kaW5nIGNhbGxzLgor
ICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjphZGRUb0tpbGxSaW5nKToKKyAgICAgICAgKiBlZGl0
aW5nL1RleHRJdGVyYXRvci5jcHA6IFRleHRJdGVyYXRvciBjYW4gdXNlIFJlbmRlclRleHQ6OnRl
eHRGb3JDb3B5aW5nIGFuZCBub3cgcGxhaW5UZXh0KCkgdXNlcyB0aGlzIHZlcnNpb24KKyAgICAg
ICAgKFdlYkNvcmU6OlRleHRJdGVyYXRvcjo6VGV4dEl0ZXJhdG9yKToKKyAgICAgICAgKFdlYkNv
cmU6OlRleHRJdGVyYXRvcjo6ZW1pdFRleHQpOgorICAgICAgICAoV2ViQ29yZTo6cGxhaW5UZXh0
VG9NYWxsb2NBbGxvY2F0ZWRCdWZmZXIpOgorICAgICAgICAqIGVkaXRpbmcvVGV4dEl0ZXJhdG9y
Lmg6CisgICAgICAgICogcGxhdGZvcm0vbWFjL1Bhc3RlYm9hcmRNYWMubW06IFJlbW92ZSBhbiB1
bm5lY2Vzc2FyeSBkaXNwbGF5U3RyaW5nTW9kaWZpZWRCeUVuY29kaW5nIGNhbGwuCisgICAgICAg
IChXZWJDb3JlOjpQYXN0ZWJvYXJkOjp3cml0ZVNlbGVjdGlvbik6CisgICAgICAgICogcGxhdGZv
cm0vdGV4dC9UZXh0RW5jb2RpbmcuaDogTWFrZSBiYWNrc2xhc2hBc0N1cnJlbmN5U3ltYm9sIHB1
YmxpYy4KKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyVGV4dC5jcHA6IEFkZCBSZW5kZXJUZXh0
Ojp0ZXh0Rm9yQ29weWluZywgd2hpY2ggcmV0dXJucyBhIHN0cmluZyB3aXRob3V0IHRyYW5zY29k
aW5nLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGV4dDo6UmVuZGVyVGV4dCk6CisgICAgICAg
IChXZWJDb3JlOjpSZW5kZXJUZXh0Ojp1cGRhdGVOZWVkc1RyYW5zY29kZSk6CisgICAgICAgIChX
ZWJDb3JlOjpSZW5kZXJUZXh0OjpzdHlsZURpZENoYW5nZSk6CisgICAgICAgIChXZWJDb3JlOjpp
c0lubGluZUZsb3dPckVtcHR5VGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUZXh0Ojpw
cmV2aW91c0NoYXJhY3Rlcik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUZXh0OjpzZXRUZXh0
SW50ZXJuYWwpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGV4dDo6dGV4dEZvckNvcHlpbmcp
OgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGV4dDo6dHJhbnNmb3JtVGV4dCk6CisgICAgICAg
ICogcmVuZGVyaW5nL1JlbmRlclRleHQuaDoKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyVGV4
dENvbnRyb2wuY3BwOiBSZW1vdmUgYW4gdW5uZWNlc3NhcnkgZGlzcGxheVN0cmluZ01vZGlmaWVk
QnlFbmNvZGluZyBjYWxsLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGV4dENvbnRyb2w6OnNl
dElubmVyVGV4dFZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRleHRDb250cm9sOjpm
aW5pc2hUZXh0KToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyVGV4dEZyYWdtZW50LmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRleHRGcmFnbWVudDo6cHJldmlvdXNDaGFyYWN0ZXIp
OgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJUZXh0RnJhZ21lbnQuaDoKKwogMjAxMC0wMy0x
OSAgU2hpbmljaGlybyBIYW1hamkgIDxoYW1hamlAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFJl
dmlld2VkIGJ5IERhbiBCZXJuc3RlaW4uCmRpZmYgLS1naXQgYS9XZWJDb3JlL1dlYkNvcmUuYmFz
ZS5leHAgYi9XZWJDb3JlL1dlYkNvcmUuYmFzZS5leHAKaW5kZXggMzY1YWZkNC4uNTg2MGFjOCAx
MDA2NDQKLS0tIGEvV2ViQ29yZS9XZWJDb3JlLmJhc2UuZXhwCisrKyBiL1dlYkNvcmUvV2ViQ29y
ZS5iYXNlLmV4cApAQCAtMjYxLDcgKzI2MSw3IEBAIF9fWk43V2ViQ29yZTEyVGV4dEVuY29kaW5n
QzFFUktOU182U3RyaW5nRQogX19aTjdXZWJDb3JlMTJUZXh0SXRlcmF0b3IxMXJhbmdlTGVuZ3Ro
RVBLTlNfNVJhbmdlRWIKIF9fWk43V2ViQ29yZTEyVGV4dEl0ZXJhdG9yMjZyYW5nZUZyb21Mb2Nh
dGlvbkFuZExlbmd0aEVQTlNfN0VsZW1lbnRFaWliCiBfX1pON1dlYkNvcmUxMlRleHRJdGVyYXRv
cjdhZHZhbmNlRXYKLV9fWk43V2ViQ29yZTEyVGV4dEl0ZXJhdG9yQzFFUEtOU181UmFuZ2VFYmIK
K19fWk43V2ViQ29yZTEyVGV4dEl0ZXJhdG9yQzFFUEtOU181UmFuZ2VFYmJiCiBfX1pON1dlYkNv
cmUxMldvcmtlclRocmVhZDE3d29ya2VyVGhyZWFkQ291bnRFdgogX19aTjdXZWJDb3JlMTJhcHBs
eUNvbW1hbmRFTjNXVEYxMFBhc3NSZWZQdHJJTlNfMTFFZGl0Q29tbWFuZEVFRQogX19aTjdXZWJD
b3JlMTJjYWNoZVN0b3JhZ2VFdgpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9lZGl0aW5nL0VkaXRvci5j
cHAgYi9XZWJDb3JlL2VkaXRpbmcvRWRpdG9yLmNwcAppbmRleCAxMDYxZGQyLi5lMTcxYWMxIDEw
MDY0NAotLS0gYS9XZWJDb3JlL2VkaXRpbmcvRWRpdG9yLmNwcAorKysgYi9XZWJDb3JlL2VkaXRp
bmcvRWRpdG9yLmNwcApAQCAtMjcwMyw3ICsyNzAzLDcgQEAgdm9pZCBFZGl0b3I6OmFkZFRvS2ls
bFJpbmcoUmFuZ2UqIHJhbmdlLCBib29sIHByZXBlbmQpCiAgICAgaWYgKG1fc2hvdWxkU3RhcnRO
ZXdLaWxsUmluZ1NlcXVlbmNlKQogICAgICAgICBzdGFydE5ld0tpbGxSaW5nU2VxdWVuY2UoKTsK
IAotICAgIFN0cmluZyB0ZXh0ID0gbV9mcmFtZS0+ZGlzcGxheVN0cmluZ01vZGlmaWVkQnlFbmNv
ZGluZyhwbGFpblRleHQocmFuZ2UpKTsKKyAgICBTdHJpbmcgdGV4dCA9IHBsYWluVGV4dChyYW5n
ZSk7CiAgICAgaWYgKHByZXBlbmQpCiAgICAgICAgIHByZXBlbmRUb0tpbGxSaW5nKHRleHQpOwog
ICAgIGVsc2UKZGlmZiAtLWdpdCBhL1dlYkNvcmUvZWRpdGluZy9UZXh0SXRlcmF0b3IuY3BwIGIv
V2ViQ29yZS9lZGl0aW5nL1RleHRJdGVyYXRvci5jcHAKaW5kZXggYTM4NmM2ZS4uNjRmNmRmYSAx
MDA2NDQKLS0tIGEvV2ViQ29yZS9lZGl0aW5nL1RleHRJdGVyYXRvci5jcHAKKysrIGIvV2ViQ29y
ZS9lZGl0aW5nL1RleHRJdGVyYXRvci5jcHAKQEAgLTI1NiwxMCArMjU2LDExIEBAIFRleHRJdGVy
YXRvcjo6VGV4dEl0ZXJhdG9yKCkKICAgICAsIG1fbGFzdENoYXJhY3RlcigwKQogICAgICwgbV9l
bWl0Q2hhcmFjdGVyc0JldHdlZW5BbGxWaXNpYmxlUG9zaXRpb25zKGZhbHNlKQogICAgICwgbV9l
bnRlclRleHRDb250cm9scyhmYWxzZSkKKyAgICAsIG1faXNGb3JDb3B5aW5nKGZhbHNlKQogewog
fQogCi1UZXh0SXRlcmF0b3I6OlRleHRJdGVyYXRvcihjb25zdCBSYW5nZSogciwgYm9vbCBlbWl0
Q2hhcmFjdGVyc0JldHdlZW5BbGxWaXNpYmxlUG9zaXRpb25zLCBib29sIGVudGVyVGV4dENvbnRy
b2xzKSAKK1RleHRJdGVyYXRvcjo6VGV4dEl0ZXJhdG9yKGNvbnN0IFJhbmdlKiByLCBib29sIGVt
aXRDaGFyYWN0ZXJzQmV0d2VlbkFsbFZpc2libGVQb3NpdGlvbnMsIGJvb2wgZW50ZXJUZXh0Q29u
dHJvbHMsIGJvb2wgaXNGb3JDb3B5aW5nKQogICAgIDogbV9zdGFydENvbnRhaW5lcigwKSAKICAg
ICAsIG1fc3RhcnRPZmZzZXQoMCkKICAgICAsIG1fZW5kQ29udGFpbmVyKDApCkBAIC0yNjksNiAr
MjcwLDcgQEAgVGV4dEl0ZXJhdG9yOjpUZXh0SXRlcmF0b3IoY29uc3QgUmFuZ2UqIHIsIGJvb2wg
ZW1pdENoYXJhY3RlcnNCZXR3ZWVuQWxsVmlzaWJsZVAKICAgICAsIG1fdGV4dExlbmd0aCgwKQog
ICAgICwgbV9lbWl0Q2hhcmFjdGVyc0JldHdlZW5BbGxWaXNpYmxlUG9zaXRpb25zKGVtaXRDaGFy
YWN0ZXJzQmV0d2VlbkFsbFZpc2libGVQb3NpdGlvbnMpCiAgICAgLCBtX2VudGVyVGV4dENvbnRy
b2xzKGVudGVyVGV4dENvbnRyb2xzKQorICAgICwgbV9pc0ZvckNvcHlpbmcoaXNGb3JDb3B5aW5n
KQogewogICAgIGlmICghcikKICAgICAgICAgcmV0dXJuOwpAQCAtODg5LDcgKzg5MSwxMSBAQCB2
b2lkIFRleHRJdGVyYXRvcjo6ZW1pdENoYXJhY3RlcihVQ2hhciBjLCBOb2RlKiB0ZXh0Tm9kZSwg
Tm9kZSogb2Zmc2V0QmFzZU5vZGUsCiB2b2lkIFRleHRJdGVyYXRvcjo6ZW1pdFRleHQoTm9kZSog
dGV4dE5vZGUsIGludCB0ZXh0U3RhcnRPZmZzZXQsIGludCB0ZXh0RW5kT2Zmc2V0KQogewogICAg
IFJlbmRlclRleHQqIHJlbmRlcmVyID0gdG9SZW5kZXJUZXh0KG1fbm9kZS0+cmVuZGVyZXIoKSk7
Ci0gICAgU3RyaW5nIHN0ciA9IHJlbmRlcmVyLT50ZXh0KCk7CisgICAgU3RyaW5nIHN0cjsKKyAg
ICBpZiAobV9pc0ZvckNvcHlpbmcpCisgICAgICAgIHN0ciA9IHJlbmRlcmVyLT50ZXh0Rm9yQ29w
eWluZygpOworICAgIGVsc2UKKyAgICAgICAgc3RyID0gcmVuZGVyZXItPnRleHQoKTsKICAgICBB
U1NFUlQoc3RyLmNoYXJhY3RlcnMoKSk7CiAKICAgICBtX3Bvc2l0aW9uTm9kZSA9IHRleHROb2Rl
OwpAQCAtMjEwNCw3ICsyMTEwLDcgQEAgUGFzc1JlZlB0cjxSYW5nZT4gVGV4dEl0ZXJhdG9yOjpy
YW5nZUZyb21Mb2NhdGlvbkFuZExlbmd0aChFbGVtZW50KiBzY29wZSwgaW50IHIKIAogLy8gLS0t
LS0tLS0KICAgICAKLVVDaGFyKiBwbGFpblRleHRUb01hbGxvY0FsbG9jYXRlZEJ1ZmZlcihjb25z
dCBSYW5nZSogciwgdW5zaWduZWQmIGJ1ZmZlckxlbmd0aCwgYm9vbCBpc0Rpc3BsYXlTdHJpbmcp
IAorVUNoYXIqIHBsYWluVGV4dFRvTWFsbG9jQWxsb2NhdGVkQnVmZmVyKGNvbnN0IFJhbmdlKiBy
LCB1bnNpZ25lZCYgYnVmZmVyTGVuZ3RoLCBib29sIGlzRGlzcGxheVN0cmluZykKIHsKICAgICBV
Q2hhciogcmVzdWx0ID0gMDsKIApAQCAtMjExNiw3ICsyMTIyLDcgQEAgVUNoYXIqIHBsYWluVGV4
dFRvTWFsbG9jQWxsb2NhdGVkQnVmZmVyKGNvbnN0IFJhbmdlKiByLCB1bnNpZ25lZCYgYnVmZmVy
TGVuZ3RoLAogICAgIFZlY3RvcjxUZXh0U2VnbWVudD4qIHRleHRTZWdtZW50cyA9IDA7CiAgICAg
VmVjdG9yPFVDaGFyPiB0ZXh0QnVmZmVyOwogICAgIHRleHRCdWZmZXIucmVzZXJ2ZUluaXRpYWxD
YXBhY2l0eShjTWF4U2VnbWVudFNpemUpOwotICAgIGZvciAoVGV4dEl0ZXJhdG9yIGl0KHIpOyAh
aXQuYXRFbmQoKTsgaXQuYWR2YW5jZSgpKSB7CisgICAgZm9yIChUZXh0SXRlcmF0b3IgaXQociwg
ZmFsc2UsIGZhbHNlLCAhaXNEaXNwbGF5U3RyaW5nKTsgIWl0LmF0RW5kKCk7IGl0LmFkdmFuY2Uo
KSkgewogICAgICAgICBpZiAodGV4dEJ1ZmZlci5zaXplKCkgJiYgdGV4dEJ1ZmZlci5zaXplKCkg
KyBpdC5sZW5ndGgoKSA+IGNNYXhTZWdtZW50U2l6ZSkgewogICAgICAgICAgICAgVUNoYXIqIG5l
d1NlZ21lbnRCdWZmZXIgPSBzdGF0aWNfY2FzdDxVQ2hhcio+KG1hbGxvYyh0ZXh0QnVmZmVyLnNp
emUoKSAqIHNpemVvZihVQ2hhcikpKTsKICAgICAgICAgICAgIGlmICghbmV3U2VnbWVudEJ1ZmZl
cikKZGlmZiAtLWdpdCBhL1dlYkNvcmUvZWRpdGluZy9UZXh0SXRlcmF0b3IuaCBiL1dlYkNvcmUv
ZWRpdGluZy9UZXh0SXRlcmF0b3IuaAppbmRleCA0NGFmM2U1Li5hZTQ2MWYxIDEwMDY0NAotLS0g
YS9XZWJDb3JlL2VkaXRpbmcvVGV4dEl0ZXJhdG9yLmgKKysrIGIvV2ViQ29yZS9lZGl0aW5nL1Rl
eHRJdGVyYXRvci5oCkBAIC03MSw3ICs3MSw3IEBAIHByaXZhdGU6CiBjbGFzcyBUZXh0SXRlcmF0
b3IgewogcHVibGljOgogICAgIFRleHRJdGVyYXRvcigpOwotICAgIGV4cGxpY2l0IFRleHRJdGVy
YXRvcihjb25zdCBSYW5nZSosIGJvb2wgZW1pdENoYXJhY3RlcnNCZXR3ZWVuQWxsVmlzaWJsZVBv
c2l0aW9ucyA9IGZhbHNlLCBib29sIGVudGVyVGV4dENvbnRyb2xzID0gZmFsc2UpOworICAgIGV4
cGxpY2l0IFRleHRJdGVyYXRvcihjb25zdCBSYW5nZSosIGJvb2wgZW1pdENoYXJhY3RlcnNCZXR3
ZWVuQWxsVmlzaWJsZVBvc2l0aW9ucyA9IGZhbHNlLCBib29sIGVudGVyVGV4dENvbnRyb2xzID0g
ZmFsc2UsIGJvb2wgaXNGb3JDb3B5aW5nID0gZmFsc2UpOwogICAgIAogICAgIGJvb2wgYXRFbmQo
KSBjb25zdCB7IHJldHVybiAhbV9wb3NpdGlvbk5vZGU7IH0KICAgICB2b2lkIGFkdmFuY2UoKTsK
QEAgLTE0Nyw2ICsxNDcsOCBAQCBwcml2YXRlOgogICAgIC8vIG1vdmVQYXJhZ3JhcGhzIHRvIG5v
dCBjbG9uZS9kZXN0cm95IG1vdmVkIGNvbnRlbnQuCiAgICAgYm9vbCBtX2VtaXRDaGFyYWN0ZXJz
QmV0d2VlbkFsbFZpc2libGVQb3NpdGlvbnM7CiAgICAgYm9vbCBtX2VudGVyVGV4dENvbnRyb2xz
OworCisgICAgYm9vbCBtX2lzRm9yQ29weWluZzsKIH07CiAKIC8vIEl0ZXJhdGVzIHRocm91Z2gg
dGhlIERPTSByYW5nZSwgcmV0dXJuaW5nIGFsbCB0aGUgdGV4dCwgYW5kIDAtbGVuZ3RoIGJvdW5k
YXJpZXMKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vbWFjL1Bhc3RlYm9hcmRNYWMubW0g
Yi9XZWJDb3JlL3BsYXRmb3JtL21hYy9QYXN0ZWJvYXJkTWFjLm1tCmluZGV4IDA4NmIyNzIuLjAz
ZWRlMDMgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcGxhdGZvcm0vbWFjL1Bhc3RlYm9hcmRNYWMubW0K
KysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvUGFzdGVib2FyZE1hYy5tbQpAQCAtMTg0LDcgKzE4
NCw3IEBAIHZvaWQgUGFzdGVib2FyZDo6d3JpdGVTZWxlY3Rpb24oTlNQYXN0ZWJvYXJkKiBwYXN0
ZWJvYXJkLCBSYW5nZSogc2VsZWN0ZWRSYW5nZSwKICAgICBpZiAoW3R5cGVzIGNvbnRhaW5zT2Jq
ZWN0Ok5TU3RyaW5nUGJvYXJkVHlwZV0pIHsKICAgICAgICAgLy8gTWFwICZuYnNwOyB0byBhIHBs
YWluIG9sZCBzcGFjZSBiZWNhdXNlIHRoaXMgaXMgYmV0dGVyIGZvciBzb3VyY2UgY29kZSwgb3Ro
ZXIgYnJvd3NlcnMgZG8gaXQsCiAgICAgICAgIC8vIGFuZCBiZWNhdXNlIEhUTUwgZm9yY2VzIHlv
dSB0byBkbyB0aGlzIGFueSB0aW1lIHlvdSB3YW50IHR3byBzcGFjZXMgaW4gYSByb3cuCi0gICAg
ICAgIFN0cmluZyB0ZXh0ID0gZnJhbWUtPmRpc3BsYXlTdHJpbmdNb2RpZmllZEJ5RW5jb2Rpbmco
c2VsZWN0ZWRSYW5nZS0+dGV4dCgpKTsKKyAgICAgICAgU3RyaW5nIHRleHQgPSBzZWxlY3RlZFJh
bmdlLT50ZXh0KCk7CiAgICAgICAgIE5TTXV0YWJsZVN0cmluZyAqcyA9IFtbWyhOU1N0cmluZyop
dGV4dCBjb3B5XSBhdXRvcmVsZWFzZV0gbXV0YWJsZUNvcHldOwogICAgICAgICAKICAgICAgICAg
TlNTdHJpbmcgKk5vbkJyZWFraW5nU3BhY2VTdHJpbmcgPSBbTlNTdHJpbmcgc3RyaW5nV2l0aENo
YXJhY3RlcnM6Jm5vQnJlYWtTcGFjZSBsZW5ndGg6MV07CmRpZmYgLS1naXQgYS9XZWJDb3JlL3Bs
YXRmb3JtL3RleHQvVGV4dEVuY29kaW5nLmggYi9XZWJDb3JlL3BsYXRmb3JtL3RleHQvVGV4dEVu
Y29kaW5nLmgKaW5kZXggYTk5YmZjOC4uNTMzZTUxMiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9wbGF0
Zm9ybS90ZXh0L1RleHRFbmNvZGluZy5oCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9UZXh0
RW5jb2RpbmcuaApAQCAtNzMsOCArNzMsOSBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAg
IFN0cmluZyBkZWNvZGUoY29uc3QgY2hhciosIHNpemVfdCBsZW5ndGgsIGJvb2wgc3RvcE9uRXJy
b3IsIGJvb2wmIHNhd0Vycm9yKSBjb25zdDsKICAgICAgICAgQ1N0cmluZyBlbmNvZGUoY29uc3Qg
VUNoYXIqLCBzaXplX3QgbGVuZ3RoLCBVbmVuY29kYWJsZUhhbmRsaW5nKSBjb25zdDsKIAotICAg
IHByaXZhdGU6CiAgICAgICAgIFVDaGFyIGJhY2tzbGFzaEFzQ3VycmVuY3lTeW1ib2woKSBjb25z
dDsKKworICAgIHByaXZhdGU6CiAgICAgICAgIGJvb2wgaXNOb25CeXRlQmFzZWRFbmNvZGluZygp
IGNvbnN0OwogICAgICAgICBib29sIGlzVVRGN0VuY29kaW5nKCkgY29uc3Q7CiAKZGlmZiAtLWdp
dCBhL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRleHQuY3BwIGIvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyVGV4dC5jcHAKaW5kZXggYWE5MTllMC4uMTljNmFkNiAxMDA2NDQKLS0tIGEvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyVGV4dC5jcHAKKysrIGIvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
VGV4dC5jcHAKQEAgLTM4LDYgKzM4LDcgQEAKICNpbmNsdWRlICJSZW5kZXJWaWV3LmgiCiAjaW5j
bHVkZSAiVGV4dC5oIgogI2luY2x1ZGUgIlRleHRCcmVha0l0ZXJhdG9yLmgiCisjaW5jbHVkZSAi
VGV4dFJlc291cmNlRGVjb2Rlci5oIgogI2luY2x1ZGUgIlZpc2libGVQb3NpdGlvbi5oIgogI2lu
Y2x1ZGUgImJyZWFrX2xpbmVzLmgiCiAjaW5jbHVkZSA8d3RmL0Fsd2F5c0lubGluZS5oPgpAQCAt
NTEsNyArNTIsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiBSZW5kZXJUZXh0OjpSZW5kZXJUZXh0
KE5vZGUqIG5vZGUsIFBhc3NSZWZQdHI8U3RyaW5nSW1wbD4gc3RyKQogICAgICA6IFJlbmRlck9i
amVjdChub2RlKQogICAgICAsIG1fbWluV2lkdGgoLTEpCi0gICAgICwgbV90ZXh0KGRvY3VtZW50
KCktPmRpc3BsYXlTdHJpbmdNb2RpZmllZEJ5RW5jb2Rpbmcoc3RyKSkKKyAgICAgLCBtX3RleHQo
c3RyKQogICAgICAsIG1fZmlyc3RUZXh0Qm94KDApCiAgICAgICwgbV9sYXN0VGV4dEJveCgwKQog
ICAgICAsIG1fbWF4V2lkdGgoLTEpCkBAIC02Miw2ICs2Myw3IEBAIFJlbmRlclRleHQ6OlJlbmRl
clRleHQoTm9kZSogbm9kZSwgUGFzc1JlZlB0cjxTdHJpbmdJbXBsPiBzdHIpCiAgICAgICwgbV9j
b250YWluc1JldmVyc2VkVGV4dChmYWxzZSkKICAgICAgLCBtX2lzQWxsQVNDSUkobV90ZXh0LmNv
bnRhaW5zT25seUFTQ0lJKCkpCiAgICAgICwgbV9rbm93bk5vdFRvVXNlRmFsbGJhY2tGb250cyhm
YWxzZSkKKyAgICAgLCBtX25lZWRzVHJhbnNjb2RlKGZhbHNlKQogewogICAgIEFTU0VSVChtX3Rl
eHQpOwogCkBAIC05OCw2ICsxMDAsMTIgQEAgYm9vbCBSZW5kZXJUZXh0Ojppc1dvcmRCcmVhaygp
IGNvbnN0CiAgICAgcmV0dXJuIGZhbHNlOwogfQogCit2b2lkIFJlbmRlclRleHQ6OnVwZGF0ZU5l
ZWRzVHJhbnNjb2RlKCkKK3sKKyAgICBjb25zdCBUZXh0RW5jb2RpbmcqIGVuY29kaW5nID0gZG9j
dW1lbnQoKS0+ZGVjb2RlcigpID8gJmRvY3VtZW50KCktPmRlY29kZXIoKS0+ZW5jb2RpbmcoKSA6
IDA7CisgICAgbV9uZWVkc1RyYW5zY29kZSA9IChlbmNvZGluZyAmJiBlbmNvZGluZy0+YmFja3Ns
YXNoQXNDdXJyZW5jeVN5bWJvbCgpICE9ICdcXCcpOworfQorCiB2b2lkIFJlbmRlclRleHQ6OnN0
eWxlRGlkQ2hhbmdlKFN0eWxlRGlmZmVyZW5jZSBkaWZmLCBjb25zdCBSZW5kZXJTdHlsZSogb2xk
U3R5bGUpCiB7CiAgICAgLy8gVGhlcmUgaXMgbm8gbmVlZCB0byBldmVyIHNjaGVkdWxlIHJlcGFp
bnRzIGZyb20gYSBzdHlsZSBjaGFuZ2Ugb2YgYSB0ZXh0IHJ1biwgc2luY2UKQEAgLTEwOSwxMCAr
MTE3LDE2IEBAIHZvaWQgUmVuZGVyVGV4dDo6c3R5bGVEaWRDaGFuZ2UoU3R5bGVEaWZmZXJlbmNl
IGRpZmYsIGNvbnN0IFJlbmRlclN0eWxlKiBvbGRTdHlsCiAgICAgICAgIG1fa25vd25Ob3RUb1Vz
ZUZhbGxiYWNrRm9udHMgPSBmYWxzZTsKICAgICB9CiAKKyAgICBib29sIG5lZWRzUmVzZXRUZXh0
ID0gZmFsc2U7CisgICAgaWYgKCFvbGRTdHlsZSkgeworICAgICAgICB1cGRhdGVOZWVkc1RyYW5z
Y29kZSgpOworICAgICAgICBuZWVkc1Jlc2V0VGV4dCA9IG1fbmVlZHNUcmFuc2NvZGU7CisgICAg
fQorICAgIC8vIEZJWE1FOiBjaGVjayBmb250cyB3aGVuIHdlIGltcGxlbWVudCBmb250LWJhc2Vk
IHRyYW5zY29kaW5nLgorCiAgICAgRVRleHRUcmFuc2Zvcm0gb2xkVHJhbnNmb3JtID0gb2xkU3R5
bGUgPyBvbGRTdHlsZS0+dGV4dFRyYW5zZm9ybSgpIDogVFROT05FOwogICAgIEVUZXh0U2VjdXJp
dHkgb2xkU2VjdXJpdHkgPSBvbGRTdHlsZSA/IG9sZFN0eWxlLT50ZXh0U2VjdXJpdHkoKSA6IFRT
Tk9ORTsKLQotICAgIGlmIChvbGRUcmFuc2Zvcm0gIT0gc3R5bGUoKS0+dGV4dFRyYW5zZm9ybSgp
IHx8IG9sZFNlY3VyaXR5ICE9IHN0eWxlKCktPnRleHRTZWN1cml0eSgpKSB7CisgICAgaWYgKG5l
ZWRzUmVzZXRUZXh0IHx8IG9sZFRyYW5zZm9ybSAhPSBzdHlsZSgpLT50ZXh0VHJhbnNmb3JtKCkg
fHwgb2xkU2VjdXJpdHkgIT0gc3R5bGUoKS0+dGV4dFNlY3VyaXR5KCkpIHsKICAgICAgICAgaWYg
KFJlZlB0cjxTdHJpbmdJbXBsPiB0ZXh0VG9UcmFuc2Zvcm0gPSBvcmlnaW5hbFRleHQoKSkKICAg
ICAgICAgICAgIHNldFRleHQodGV4dFRvVHJhbnNmb3JtLnJlbGVhc2UoKSwgdHJ1ZSk7CiAgICAg
fQpAQCAtOTEyLDcgKzkyNiw3IEBAIHZvaWQgUmVuZGVyVGV4dDo6c2V0VGV4dFdpdGhPZmZzZXQo
UGFzc1JlZlB0cjxTdHJpbmdJbXBsPiB0ZXh0LCB1bnNpZ25lZCBvZmZzZXQsCiAgICAgc2V0VGV4
dCh0ZXh0LCBmb3JjZSk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgYm9vbCBpc0lubGluZUZsb3dPckVt
cHR5VGV4dChSZW5kZXJPYmplY3QqIG8pCitzdGF0aWMgaW5saW5lIGJvb2wgaXNJbmxpbmVGbG93
T3JFbXB0eVRleHQoY29uc3QgUmVuZGVyT2JqZWN0KiBvKQogewogICAgIGlmIChvLT5pc1JlbmRl
cklubGluZSgpKQogICAgICAgICByZXR1cm4gdHJ1ZTsKQEAgLTkyNCwxMCArOTM4LDEwIEBAIHN0
YXRpYyBpbmxpbmUgYm9vbCBpc0lubGluZUZsb3dPckVtcHR5VGV4dChSZW5kZXJPYmplY3QqIG8p
CiAgICAgcmV0dXJuICF0ZXh0LT5sZW5ndGgoKTsKIH0KIAotVUNoYXIgUmVuZGVyVGV4dDo6cHJl
dmlvdXNDaGFyYWN0ZXIoKQorVUNoYXIgUmVuZGVyVGV4dDo6cHJldmlvdXNDaGFyYWN0ZXIoKSBj
b25zdAogewogICAgIC8vIGZpbmQgcHJldmlvdXMgdGV4dCByZW5kZXJlciBpZiBvbmUgZXhpc3Rz
Ci0gICAgUmVuZGVyT2JqZWN0KiBwcmV2aW91c1RleHQgPSB0aGlzOworICAgIGNvbnN0IFJlbmRl
ck9iamVjdCogcHJldmlvdXNUZXh0ID0gdGhpczsKICAgICB3aGlsZSAoKHByZXZpb3VzVGV4dCA9
IHByZXZpb3VzVGV4dC0+cHJldmlvdXNJblByZU9yZGVyKCkpKQogICAgICAgICBpZiAoIWlzSW5s
aW5lRmxvd09yRW1wdHlUZXh0KHByZXZpb3VzVGV4dCkpCiAgICAgICAgICAgICBicmVhazsKQEAg
LTk0MSw3ICs5NTUsMTAgQEAgVUNoYXIgUmVuZGVyVGV4dDo6cHJldmlvdXNDaGFyYWN0ZXIoKQog
dm9pZCBSZW5kZXJUZXh0OjpzZXRUZXh0SW50ZXJuYWwoUGFzc1JlZlB0cjxTdHJpbmdJbXBsPiB0
ZXh0KQogewogICAgIEFTU0VSVCh0ZXh0KTsKLSAgICBtX3RleHQgPSBkb2N1bWVudCgpLT5kaXNw
bGF5U3RyaW5nTW9kaWZpZWRCeUVuY29kaW5nKHRleHQpOworICAgIGlmIChtX25lZWRzVHJhbnNj
b2RlKQorICAgICAgICBtX3RleHQgPSBkb2N1bWVudCgpLT5kaXNwbGF5U3RyaW5nTW9kaWZpZWRC
eUVuY29kaW5nKHRleHQpOworICAgIGVsc2UKKyAgICAgICAgbV90ZXh0ID0gdGV4dDsKICAgICBB
U1NFUlQobV90ZXh0KTsKIAogI2lmIEVOQUJMRShTVkcpCkBAIC05NzQsMzMgKzk5MSwyMSBAQCB2
b2lkIFJlbmRlclRleHQ6OnNldFRleHRJbnRlcm5hbChQYXNzUmVmUHRyPFN0cmluZ0ltcGw+IHRl
eHQpCiAjZW5kaWYKIAogICAgIGlmIChzdHlsZSgpKSB7Ci0gICAgICAgIHN3aXRjaCAoc3R5bGUo
KS0+dGV4dFRyYW5zZm9ybSgpKSB7Ci0gICAgICAgICAgICBjYXNlIFRUTk9ORToKLSAgICAgICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNhc2UgQ0FQSVRBTElaRToKLSAgICAgICAgICAg
ICAgICBtX3RleHQubWFrZUNhcGl0YWxpemVkKHByZXZpb3VzQ2hhcmFjdGVyKCkpOwotICAgICAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSBVUFBFUkNBU0U6Ci0gICAgICAgICAg
ICAgICAgbV90ZXh0Lm1ha2VVcHBlcigpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICAgICAgY2FzZSBMT1dFUkNBU0U6Ci0gICAgICAgICAgICAgICAgbV90ZXh0Lm1ha2VMb3dlcigp
OwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9CisgICAgICAgIHRyYW5zZm9ybVRl
eHQobV90ZXh0KTsKIAogICAgICAgICAvLyBXZSB1c2UgdGhlIHNhbWUgY2hhcmFjdGVycyBoZXJl
IGFzIGZvciBsaXN0IG1hcmtlcnMuCiAgICAgICAgIC8vIFNlZSB0aGUgbGlzdE1hcmtlclRleHQg
ZnVuY3Rpb24gaW4gUmVuZGVyTGlzdE1hcmtlci5jcHAuCiAgICAgICAgIHN3aXRjaCAoc3R5bGUo
KS0+dGV4dFNlY3VyaXR5KCkpIHsKLSAgICAgICAgICAgIGNhc2UgVFNOT05FOgotICAgICAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSBUU0NJUkNMRToKLSAgICAgICAgICAgICAg
ICBtX3RleHQubWFrZVNlY3VyZSh3aGl0ZUJ1bGxldCk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgICAgICBjYXNlIFRTRElTQzoKLSAgICAgICAgICAgICAgICBtX3RleHQubWFrZVNl
Y3VyZShidWxsZXQpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSBU
U1NRVUFSRToKLSAgICAgICAgICAgICAgICBtX3RleHQubWFrZVNlY3VyZShibGFja1NxdWFyZSk7
CisgICAgICAgIGNhc2UgVFNOT05FOgorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2Ug
VFNDSVJDTEU6CisgICAgICAgICAgICBtX3RleHQubWFrZVNlY3VyZSh3aGl0ZUJ1bGxldCk7Cisg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBUU0RJU0M6CisgICAgICAgICAgICBtX3Rl
eHQubWFrZVNlY3VyZShidWxsZXQpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2Ug
VFNTUVVBUkU6CisgICAgICAgICAgICBtX3RleHQubWFrZVNlY3VyZShibGFja1NxdWFyZSk7CiAg
ICAgICAgIH0KICAgICB9CiAKQEAgLTEwMjYsNiArMTAzMSwzOCBAQCB2b2lkIFJlbmRlclRleHQ6
OnNldFRleHQoUGFzc1JlZlB0cjxTdHJpbmdJbXBsPiB0ZXh0LCBib29sIGZvcmNlKQogICAgICAg
ICBheE9iamVjdENhY2hlLT5jb250ZW50Q2hhbmdlZCh0aGlzKTsKIH0KIAorU3RyaW5nIFJlbmRl
clRleHQ6OnRleHRGb3JDb3B5aW5nKCkgY29uc3QKK3sKKyAgICAvLyBJZiBtX3RleHQgaXNuJ3Qg
dHJhbnNjb2RlZCBvciBpcyBzZWN1cmUsIHdlIGNhbiBqdXN0IHJldHVybiB0aGUgbW9kaWZpZWQg
dGV4dC4KKyAgICBpZiAoIW1fbmVlZHNUcmFuc2NvZGUgfHwgc3R5bGUoKS0+dGV4dFNlY3VyaXR5
KCkgIT0gVFNOT05FKQorICAgICAgICByZXR1cm4gdGV4dCgpOworCisgICAgLy8gT3RoZXJ3aXNl
LCB3ZSBzaG91bGQgdXNlIG9yaWdpbmFsIHRleHQuIElmIHRleHQtdHJhbnNmb3JtIGlzCisgICAg
Ly8gc3BlY2lmaWVkLCB3ZSBzaG91bGQgdHJhbnNmb3JtIHRoZSB0ZXh0IG9uIHRoZSBmbHkuCisg
ICAgU3RyaW5nIHRleHQgPSBvcmlnaW5hbFRleHQoKTsKKyAgICBpZiAoc3R5bGUoKSAmJiBzdHls
ZSgpLT50ZXh0VHJhbnNmb3JtKCkgIT0gVFROT05FKQorICAgICAgICB0cmFuc2Zvcm1UZXh0KHRl
eHQpOworICAgIHJldHVybiB0ZXh0OworfQorCit2b2lkIFJlbmRlclRleHQ6OnRyYW5zZm9ybVRl
eHQoU3RyaW5nJiB0ZXh0KSBjb25zdAoreworICAgIEFTU0VSVChzdHlsZSgpKTsKKyAgICBzd2l0
Y2ggKHN0eWxlKCktPnRleHRUcmFuc2Zvcm0oKSkgeworICAgIGNhc2UgVFROT05FOgorICAgICAg
ICBicmVhazsKKyAgICBjYXNlIENBUElUQUxJWkU6CisgICAgICAgIHRleHQubWFrZUNhcGl0YWxp
emVkKHByZXZpb3VzQ2hhcmFjdGVyKCkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFVQUEVS
Q0FTRToKKyAgICAgICAgdGV4dC5tYWtlVXBwZXIoKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2Fz
ZSBMT1dFUkNBU0U6CisgICAgICAgIHRleHQubWFrZUxvd2VyKCk7CisgICAgICAgIGJyZWFrOwor
ICAgIH0KK30KKwogaW50IFJlbmRlclRleHQ6OmxpbmVIZWlnaHQoYm9vbCBmaXJzdExpbmUsIGJv
b2wpIGNvbnN0CiB7CiAgICAgLy8gQWx3YXlzIHVzZSB0aGUgaW50ZXJpb3IgbGluZSBoZWlnaHQg
b2YgdGhlIHBhcmVudCAoZS5nLiwgaWYgb3VyIHBhcmVudCBpcyBhbiBpbmxpbmUgYmxvY2spLgpk
aWZmIC0tZ2l0IGEvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4dC5oIGIvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyVGV4dC5oCmluZGV4IGU5ZWQxNDcuLmJlNmM1MTkgMTAwNjQ0Ci0tLSBhL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlclRleHQuaAorKysgYi9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJUZXh0LmgKQEAgLTUxLDYgKzUxLDcgQEAgcHVibGljOgogICAgIHZpcnR1YWwgdm9pZCBkZXN0
cm95KCk7CiAKICAgICBTdHJpbmdJbXBsKiB0ZXh0KCkgY29uc3QgeyByZXR1cm4gbV90ZXh0Lmlt
cGwoKTsgfQorICAgIFN0cmluZyB0ZXh0Rm9yQ29weWluZygpIGNvbnN0OwogCiAgICAgSW5saW5l
VGV4dEJveCogY3JlYXRlSW5saW5lVGV4dEJveCgpOwogICAgIHZvaWQgZGlydHlMaW5lQm94ZXMo
Ym9vbCBmdWxsTGF5b3V0KTsKQEAgLTEyOCw3ICsxMjksNyBAQCBwcm90ZWN0ZWQ6CiAgICAgdmly
dHVhbCB2b2lkIHN0eWxlRGlkQ2hhbmdlKFN0eWxlRGlmZmVyZW5jZSwgY29uc3QgUmVuZGVyU3R5
bGUqIG9sZFN0eWxlKTsKIAogICAgIHZpcnR1YWwgdm9pZCBzZXRUZXh0SW50ZXJuYWwoUGFzc1Jl
ZlB0cjxTdHJpbmdJbXBsPik7Ci0gICAgdmlydHVhbCBVQ2hhciBwcmV2aW91c0NoYXJhY3Rlcigp
OworICAgIHZpcnR1YWwgVUNoYXIgcHJldmlvdXNDaGFyYWN0ZXIoKSBjb25zdDsKICAgICAKICAg
ICB2aXJ0dWFsIElubGluZVRleHRCb3gqIGNyZWF0ZVRleHRCb3goKTsgLy8gU3ViY2xhc3NlZCBi
eSBTVkcuCiAKQEAgLTE0OCw2ICsxNDksOSBAQCBwcml2YXRlOgogICAgIGJvb2wgY29udGFpbnNP
bmx5V2hpdGVzcGFjZSh1bnNpZ25lZCBmcm9tLCB1bnNpZ25lZCBsZW4pIGNvbnN0OwogICAgIGlu
dCB3aWR0aEZyb21DYWNoZShjb25zdCBGb250JiwgaW50IHN0YXJ0LCBpbnQgbGVuLCBpbnQgeFBv
cywgSGFzaFNldDxjb25zdCBTaW1wbGVGb250RGF0YSo+KiBmYWxsYmFja0ZvbnRzKSBjb25zdDsK
ICAgICBib29sIGlzQWxsQVNDSUkoKSBjb25zdCB7IHJldHVybiBtX2lzQWxsQVNDSUk7IH0KKyAg
ICB2b2lkIHVwZGF0ZU5lZWRzVHJhbnNjb2RlKCk7CisKKyAgICB2b2lkIHRyYW5zZm9ybVRleHQo
U3RyaW5nJikgY29uc3Q7CiAKICAgICBpbnQgbV9taW5XaWR0aDsgLy8gaGVyZSB0byBtaW5pbWl6
ZSBwYWRkaW5nIGluIDY0LWJpdC4KIApAQCAtMTcyLDYgKzE3Niw3IEBAIHByaXZhdGU6CiAgICAg
Ym9vbCBtX2NvbnRhaW5zUmV2ZXJzZWRUZXh0IDogMTsKICAgICBib29sIG1faXNBbGxBU0NJSSA6
IDE7CiAgICAgbXV0YWJsZSBib29sIG1fa25vd25Ob3RUb1VzZUZhbGxiYWNrRm9udHMgOiAxOwor
ICAgIGJvb2wgbV9uZWVkc1RyYW5zY29kZSA6IDE7CiB9OwogCiBpbmxpbmUgUmVuZGVyVGV4dCog
dG9SZW5kZXJUZXh0KFJlbmRlck9iamVjdCogb2JqZWN0KQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyVGV4dENvbnRyb2wuY3BwIGIvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
VGV4dENvbnRyb2wuY3BwCmluZGV4IGI5ODkwMGEuLjUwMDdkNGMgMTAwNjQ0Ci0tLSBhL1dlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlclRleHRDb250cm9sLmNwcAorKysgYi9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJUZXh0Q29udHJvbC5jcHAKQEAgLTE2NywxNSArMTY3LDcgQEAgdm9pZCBSZW5kZXJU
ZXh0Q29udHJvbDo6dXBkYXRlRnJvbUVsZW1lbnQoKQogCiB2b2lkIFJlbmRlclRleHRDb250cm9s
OjpzZXRJbm5lclRleHRWYWx1ZShjb25zdCBTdHJpbmcmIGlubmVyVGV4dFZhbHVlKQogewotICAg
IFN0cmluZyB2YWx1ZTsKLQotICAgIGlmIChpbm5lclRleHRWYWx1ZS5pc051bGwoKSkKLSAgICAg
ICAgdmFsdWUgPSAiIjsKLSAgICBlbHNlIHsKLSAgICAgICAgdmFsdWUgPSBpbm5lclRleHRWYWx1
ZTsgCi0gICAgICAgIHZhbHVlID0gZG9jdW1lbnQoKS0+ZGlzcGxheVN0cmluZ01vZGlmaWVkQnlF
bmNvZGluZyh2YWx1ZSk7Ci0gICAgfQotCisgICAgU3RyaW5nIHZhbHVlID0gaW5uZXJUZXh0VmFs
dWU7CiAgICAgaWYgKHZhbHVlICE9IHRleHQoKSB8fCAhbV9pbm5lclRleHQtPmhhc0NoaWxkTm9k
ZXMoKSkgewogICAgICAgICBpZiAodmFsdWUgIT0gdGV4dCgpKSB7CiAgICAgICAgICAgICBpZiAo
RnJhbWUqIGZyYW1lID0gZG9jdW1lbnQoKS0+ZnJhbWUoKSkgewpAQCAtMzE4LDkgKzMxMCw2IEBA
IFN0cmluZyBSZW5kZXJUZXh0Q29udHJvbDo6ZmluaXNoVGV4dChWZWN0b3I8VUNoYXI+JiByZXN1
bHQpIGNvbnN0CiAgICAgaWYgKHNpemUgJiYgcmVzdWx0W3NpemUgLSAxXSA9PSAnXG4nKQogICAg
ICAgICByZXN1bHQuc2hyaW5rKC0tc2l6ZSk7CiAKLSAgICAvLyBDb252ZXJ0IGJhY2tzbGFzaCB0
byBjdXJyZW5jeSBzeW1ib2wuCi0gICAgZG9jdW1lbnQoKS0+ZGlzcGxheUJ1ZmZlck1vZGlmaWVk
QnlFbmNvZGluZyhyZXN1bHQuZGF0YSgpLCByZXN1bHQuc2l6ZSgpKTsKLSAgICAKICAgICByZXR1
cm4gU3RyaW5nOjphZG9wdChyZXN1bHQpOwogfQogCmRpZmYgLS1naXQgYS9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJUZXh0RnJhZ21lbnQuY3BwIGIvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4
dEZyYWdtZW50LmNwcAppbmRleCBmMzM5OGEzLi4yMTY0YWUxIDEwMDY0NAotLS0gYS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJUZXh0RnJhZ21lbnQuY3BwCisrKyBiL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlclRleHRGcmFnbWVudC5jcHAKQEAgLTc2LDcgKzc2LDcgQEAgdm9pZCBSZW5kZXJUZXh0
RnJhZ21lbnQ6OnNldFRleHRJbnRlcm5hbChQYXNzUmVmUHRyPFN0cmluZ0ltcGw+IHRleHQpCiAg
ICAgfQogfQogCi1VQ2hhciBSZW5kZXJUZXh0RnJhZ21lbnQ6OnByZXZpb3VzQ2hhcmFjdGVyKCkK
K1VDaGFyIFJlbmRlclRleHRGcmFnbWVudDo6cHJldmlvdXNDaGFyYWN0ZXIoKSBjb25zdAogewog
ICAgIGlmIChzdGFydCgpKSB7CiAgICAgICAgIE5vZGUqIGUgPSBub2RlKCk7CmRpZmYgLS1naXQg
YS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0RnJhZ21lbnQuaCBiL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlclRleHRGcmFnbWVudC5oCmluZGV4IDFmYTUwOWEuLmUzNTE0MzYgMTAwNjQ0Ci0t
LSBhL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRleHRGcmFnbWVudC5oCisrKyBiL1dlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlclRleHRGcmFnbWVudC5oCkBAIC01MSw3ICs1MSw3IEBAIHB1YmxpYzoK
IAogcHJpdmF0ZToKICAgICB2aXJ0dWFsIHZvaWQgc2V0VGV4dEludGVybmFsKFBhc3NSZWZQdHI8
U3RyaW5nSW1wbD4pOwotICAgIHZpcnR1YWwgVUNoYXIgcHJldmlvdXNDaGFyYWN0ZXIoKTsKKyAg
ICB2aXJ0dWFsIFVDaGFyIHByZXZpb3VzQ2hhcmFjdGVyKCkgY29uc3Q7CiAKICAgICB1bnNpZ25l
ZCBtX3N0YXJ0OwogICAgIHVuc2lnbmVkIG1fZW5kOwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>53805</attachid>
            <date>2010-04-20 06:08:56 -0700</date>
            <delta_ts>2010-04-20 06:27:18 -0700</delta_ts>
            <desc>Patch v2</desc>
            <filename>bug-36419-20100420060853.patch</filename>
            <type>text/plain</type>
            <size>27500</size>
            <attacher name="Shinichiro Hamaji">hamaji</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxv
ZwppbmRleCA1MDI1MzRlLi42OWVjOGU4IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9DaGFuZ2VM
b2cKKysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTYgQEAKKzIwMTAtMDQt
MjAgIFNoaW5pY2hpcm8gSGFtYWppICA8aGFtYWppQGNocm9taXVtLm9yZz4KKworICAgICAgICBS
ZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBBIGJhY2tzbGFzaCBpbiBFVUMt
SlAgYmVjb21lcyB0byBhIHllbiBzaWduIHdoZW4gaXQgaXMgY29waWVkCisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0zNjQxOQorCisgICAgICAgICogZWRp
dGluZy9leGVjQ29tbWFuZC90cmFuc3Bvc2UtYmFja3NsYXNoLXdpdGgtZXVjLWV4cGVjdGVkLnR4
dDogQWRkZWQuCisgICAgICAgICogZWRpdGluZy9leGVjQ29tbWFuZC90cmFuc3Bvc2UtYmFja3Ns
YXNoLXdpdGgtZXVjLmh0bWw6IEFkZGVkLgorICAgICAgICAqIGVkaXRpbmcvcGFzdGVib2FyZC9j
b3B5LWJhY2tzbGFzaC13aXRoLWV1Yy1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAqIGVk
aXRpbmcvcGFzdGVib2FyZC9jb3B5LWJhY2tzbGFzaC13aXRoLWV1Yy5odG1sOiBBZGRlZC4KKyAg
ICAgICAgKiBlZGl0aW5nL3Bhc3RlYm9hcmQvcmVzb3VyY2VzL2NvcHktYmFja3NsYXNoLWV1Yy5o
dG1sOiBBZGRlZC4KKwogMjAxMC0wNC0xOSAgSmFtZXMgUm9iaW5zb24gIDxqYW1lc3JAY2hyb21p
dW0ub3JnPgogCiAgICAgICAgIFVucmV2aWV3ZWQuIFVwZGF0ZSBjaHJvbWl1bSB0ZXN0IGV4cGVj
dGF0aW9ucy4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2VkaXRpbmcvZXhlY0NvbW1hbmQvdHJh
bnNwb3NlLWJhY2tzbGFzaC13aXRoLWV1Yy1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy9lZGl0
aW5nL2V4ZWNDb21tYW5kL3RyYW5zcG9zZS1iYWNrc2xhc2gtd2l0aC1ldWMtZXhwZWN0ZWQudHh0
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU3ODY2ZjcKLS0tIC9kZXYvbnVs
bAorKysgYi9MYXlvdXRUZXN0cy9lZGl0aW5nL2V4ZWNDb21tYW5kL3RyYW5zcG9zZS1iYWNrc2xh
c2gtd2l0aC1ldWMtZXhwZWN0ZWQudHh0CkBAIC0wLDAgKzEsMiBAQAorXFwKK1BBU1MKZGlmZiAt
LWdpdCBhL0xheW91dFRlc3RzL2VkaXRpbmcvZXhlY0NvbW1hbmQvdHJhbnNwb3NlLWJhY2tzbGFz
aC13aXRoLWV1Yy5odG1sIGIvTGF5b3V0VGVzdHMvZWRpdGluZy9leGVjQ29tbWFuZC90cmFuc3Bv
c2UtYmFja3NsYXNoLXdpdGgtZXVjLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMC4uYjJhNjQyMQotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2VkaXRpbmcvZXhl
Y0NvbW1hbmQvdHJhbnNwb3NlLWJhY2tzbGFzaC13aXRoLWV1Yy5odG1sCkBAIC0wLDAgKzEsMzMg
QEAKKzwhRE9DVFlQRSBodG1sPgorPGh0bWw+CisKKzxoZWFkPgorPG1ldGEgY2hhcnNldD0iRVVD
LUpQIj4KKzxzY3JpcHQgY2hhcnNldD0iVVRGLTgiPgorCitpZiAod2luZG93LmxheW91dFRlc3RD
b250cm9sbGVyKQorICAgIGxheW91dFRlc3RDb250cm9sbGVyLmR1bXBBc1RleHQoKTsKKworZnVu
Y3Rpb24gdGVzdCgpCit7CisgICAgdmFyIGJhY2tzbGFzaERpdkVsZW1lbnQgPSBkb2N1bWVudC5n
ZXRFbGVtZW50QnlJZCgiYmFja3NsYXNoIik7CisgICAgZ2V0U2VsZWN0aW9uKCkuZXh0ZW5kKGJh
Y2tzbGFzaERpdkVsZW1lbnQsIDEpOworICAgIGRvY3VtZW50LmV4ZWNDb21tYW5kKCJUcmFuc3Bv
c2UiKTsKKworICAgIHZhciBiYWNrc2xhc2ggPSAiXFwiLmNoYXJDb2RlQXQoMCk7CisgICAgaWYg
KGJhY2tzbGFzaCA9PSBiYWNrc2xhc2hEaXZFbGVtZW50LmlubmVySFRNTC5jaGFyQ29kZUF0KDAp
ICYmIGJhY2tzbGFzaCA9PSBiYWNrc2xhc2hEaXZFbGVtZW50LmlubmVySFRNTC5jaGFyQ29kZUF0
KDEpKQorICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgicmVzdWx0IikuaW5uZXJIVE1M
ID0gIlBBU1MiOworfQorCis8L3NjcmlwdD4KKzwvaGVhZD4KKworPGJvZHkgb25sb2FkPSJ0ZXN0
KCkiPgorCis8ZGl2IGlkPSJiYWNrc2xhc2giIGNvbnRlbnRFZGl0YWJsZT0idHJ1ZSI+XFw8L2Rp
dj4KKworPGRpdiBpZD0icmVzdWx0Ij5GQUlMPC9kaXY+CisKKzwvYm9keT4KKworPC9odG1sPgpk
aWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvZWRpdGluZy9wYXN0ZWJvYXJkL2NvcHktYmFja3NsYXNo
LXdpdGgtZXVjLWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL2VkaXRpbmcvcGFzdGVib2FyZC9j
b3B5LWJhY2tzbGFzaC13aXRoLWV1Yy1leHBlY3RlZC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMC4uOGMwMWM5NAotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2Vk
aXRpbmcvcGFzdGVib2FyZC9jb3B5LWJhY2tzbGFzaC13aXRoLWV1Yy1leHBlY3RlZC50eHQKQEAg
LTAsMCArMSw0MCBAQAorCitPcmlnaW5hbCB0ZXh0cyB3aGljaCB3aWxsIGJlIGNvcGllZAorCitc
IGZyb20gVVRGOCBwYWdlCitcIEZST00gVVRGOCBQQUdFIChUUkFOU0ZPUk1FRCkKK+KAouKAouKA
ouKAouKAouKAouKAouKAouKAouKAouKAouKAouKAouKAouKAouKAouKAouKAouKAouKAouKAouKA
ouKAouKAouKAogorCitUZXh0cyBpbiB0aGUgRVVDIGZyYW1lIHdpbGwgYmUgcGFzdGVkIGhlcmUK
KworZnJvbSBFVUMgZGl2IHRvIFVURjggdGV4dC1jb250cm9sOiAKK2Zyb20gRVVDIGRpdiB0byBV
VEY4IGNvbnRlbnQtZWRpdGFibGU6IFwgZnJvbSBFVUMgcGFnZQorCitmcm9tIEVVQyB0cmFuc2Zv
cm0gdG8gVVRGOCB0ZXh0LWNvbnRyb2w6IAorZnJvbSBFVUMgdHJhbnNmb3JtIHRvIFVURjggY29u
dGVudC1lZGl0YWJsZTogXCBGUk9NIEVVQyBQQUdFIChUUkFOU0ZPUk1FRCkKKworZnJvbSBFVUMg
c2VjdXJlIHRvIFVURjggdGV4dC1jb250cm9sOiAKK2Zyb20gRVVDIHNlY3VyZSB0byBVVEY4IGNv
bnRlbnQtZWRpdGFibGU6IOKAouKAouKAouKAouKAouKAouKAouKAouKAouKAouKAouKAouKAouKA
ouKAouKAouKAouKAouKAouKAouKAouKAouKAouKAogorCitmcm9tIEVVQyBjb250cm9sIHRvIFVU
RjggdGV4dC1jb250cm9sOiAKK2Zyb20gRVVDIGNvbnRyb2wgdG8gVVRGOCBjb250ZW50LWVkaXRh
YmxlOiBcIGZyb20gRVVDIHRleHQgY29udHJvbAorCitSZXN1bHRzCisKK2Zyb20gRVVDIGRpdiB0
byBVVEY4IHRleHQtY29udHJvbDogUEFTUworZnJvbSBFVUMgZGl2IHRvIFVURjggY29udGVudC1l
ZGl0YWJsZTogUEFTUworZnJvbSBFVUMgdHJhbnNmb3JtIHRvIFVURjggdGV4dC1jb250cm9sOiBQ
QVNTCitmcm9tIEVVQyB0cmFuc2Zvcm0gdG8gVVRGOCBjb250ZW50LWVkaXRhYmxlOiBQQVNTCitm
cm9tIEVVQyBzZWN1cmUgdG8gVVRGOCB0ZXh0LWNvbnRyb2w6IFBBU1MKK2Zyb20gRVVDIHNlY3Vy
ZSB0byBVVEY4IGNvbnRlbnQtZWRpdGFibGU6IFBBU1MKK2Zyb20gRVVDIGNvbnRyb2wgdG8gVVRG
OCB0ZXh0LWNvbnRyb2w6IFBBU1MKK2Zyb20gRVVDIGNvbnRyb2wgdG8gVVRGOCBjb250ZW50LWVk
aXRhYmxlOiBQQVNTCitmcm9tIFVURjggZGl2IHRvIEVVQyB0ZXh0LWNvbnRyb2w6IFBBU1MKK2Zy
b20gVVRGOCBkaXYgdG8gRVVDIGNvbnRlbnQtZWRpdGFibGU6IFBBU1MKK2Zyb20gVVRGOCB0cmFu
c2Zvcm0gdG8gRVVDIHRleHQtY29udHJvbDogUEFTUworZnJvbSBVVEY4IHRyYW5zZm9ybSB0byBF
VUMgY29udGVudC1lZGl0YWJsZTogUEFTUworZnJvbSBVVEY4IHNlY3VyZSB0byBFVUMgdGV4dC1j
b250cm9sOiBQQVNTCitmcm9tIFVURjggc2VjdXJlIHRvIEVVQyBjb250ZW50LWVkaXRhYmxlOiBQ
QVNTCitmcm9tIFVURjggY29udHJvbCB0byBFVUMgdGV4dC1jb250cm9sOiBQQVNTCitmcm9tIFVU
RjggY29udHJvbCB0byBFVUMgY29udGVudC1lZGl0YWJsZTogUEFTUworCmRpZmYgLS1naXQgYS9M
YXlvdXRUZXN0cy9lZGl0aW5nL3Bhc3RlYm9hcmQvY29weS1iYWNrc2xhc2gtd2l0aC1ldWMuaHRt
bCBiL0xheW91dFRlc3RzL2VkaXRpbmcvcGFzdGVib2FyZC9jb3B5LWJhY2tzbGFzaC13aXRoLWV1
Yy5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRjOTczZDQKLS0tIC9k
ZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9lZGl0aW5nL3Bhc3RlYm9hcmQvY29weS1iYWNrc2xh
c2gtd2l0aC1ldWMuaHRtbApAQCAtMCwwICsxLDExMCBAQAorPCFET0NUWVBFIGh0bWw+Cis8aHRt
bD4KKworPGhlYWQ+Cis8bWV0YSBjaGFyc2V0PSJVVEYtOCI+Cis8c2NyaXB0PgorCitpZiAod2lu
ZG93LmxheW91dFRlc3RDb250cm9sbGVyKQorICAgIGxheW91dFRlc3RDb250cm9sbGVyLmR1bXBB
c1RleHQoKTsKKworLy8gU2VsZWN0IGFuIGVsZW1lbnQgYW4gcmV0dXJuIGl0cyB2YWx1ZS4KK2Z1
bmN0aW9uIHNlbGVjdEVsZW1lbnQoZG9jLCBlbGVtZW50KQoreworICAgIGlmIChlbGVtZW50LnRh
Z05hbWUudG9Mb3dlckNhc2UoKSA9PSAnaW5wdXQnKSB7CisgICAgICAgIGVsZW1lbnQuZm9jdXMo
KTsKKyAgICAgICAgZWxlbWVudC5zZWxlY3QoKTsKKyAgICAgICAgcmV0dXJuIGVsZW1lbnQudmFs
dWU7CisgICAgfSBlbHNlIHsKKyAgICAgICAgZG9jLmdldFNlbGVjdGlvbigpLnNlbGVjdEFsbENo
aWxkcmVuKGVsZW1lbnQpOworICAgICAgICByZXR1cm4gZWxlbWVudC5pbm5lclRleHQ7CisgICAg
fQorfQorCitmdW5jdGlvbiB0ZXN0Q29weUFuZFBhc3RlVGV4dHMoZnJvbURvY3VtZW50LCBmcm9t
TmFtZSwgdG9Eb2N1bWVudCwgdG9OYW1lKQoreworICAgIHZhciByZXN1bHRzRWxlbWVudCA9IGRv
Y3VtZW50LmdldEVsZW1lbnRCeUlkKCJyZXN1bHRzIik7CisKKyAgICB2YXIgcGFzdGVib2FyZEVs
ZW1lbnQgPSB0b0RvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJwYXN0ZWJvYXJkIik7CisKKyAgICB2
YXIgZnJvbUVsZW1lbnROYW1lcyA9IFsiZGl2IiwgInRyYW5zZm9ybSIsICJzZWN1cmUiLCAiY29u
dHJvbCJdOworICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZnJvbUVsZW1lbnROYW1lcy5sZW5ndGg7
IGkrKykgeworICAgICAgICB2YXIgZnJvbUVsZW1lbnROYW1lID0gZnJvbUVsZW1lbnROYW1lc1tp
XTsKKyAgICAgICAgdmFyIGZyb21FbGVtZW50ID0gZnJvbURvY3VtZW50LmdldEVsZW1lbnRCeUlk
KGZyb21FbGVtZW50TmFtZSk7CisgICAgICAgIHNlbGVjdEVsZW1lbnQoZnJvbURvY3VtZW50LCBm
cm9tRWxlbWVudCk7CisgICAgICAgIGZyb21Eb2N1bWVudC5leGVjQ29tbWFuZCgiQ29weSIpOwor
CisgICAgICAgIHZhciB0b0VsZW1lbnROYW1lU3VmZml4ZXMgPSBbInRleHQtY29udHJvbCIsICJj
b250ZW50LWVkaXRhYmxlIl07CisgICAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgdG9FbGVtZW50
TmFtZVN1ZmZpeGVzLmxlbmd0aDsgaisrKSB7CisgICAgICAgICAgICB2YXIgdG9FbGVtZW50TmFt
ZVN1ZmZpeCA9IHRvRWxlbWVudE5hbWVTdWZmaXhlc1tqXTsKKworICAgICAgICAgICAgdmFyIHRl
c3ROYW1lID0gImZyb20gIiArIGZyb21OYW1lLnRvVXBwZXJDYXNlKCkgKyAiICIgKyBmcm9tRWxl
bWVudE5hbWUgKyAiIHRvICIgKyB0b05hbWUudG9VcHBlckNhc2UoKSArICIgIiArIHRvRWxlbWVu
dE5hbWVTdWZmaXggKyAiOiAiOworICAgICAgICAgICAgdmFyIHRvRGVzY3JpcHRpb25UZXh0ID0g
dG9Eb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSh0ZXN0TmFtZSk7CisgICAgICAgICAgICBwYXN0ZWJv
YXJkRWxlbWVudC5hcHBlbmRDaGlsZCh0b0Rlc2NyaXB0aW9uVGV4dCk7CisgICAgICAgICAgICB2
YXIgdG9FbGVtZW50ID0gbnVsbDsKKyAgICAgICAgICAgIGlmICh0b0VsZW1lbnROYW1lU3VmZml4
ID09ICJ0ZXh0LWNvbnRyb2wiKSB7CisgICAgICAgICAgICAgICAgdG9FbGVtZW50ID0gdG9Eb2N1
bWVudC5jcmVhdGVFbGVtZW50KCJpbnB1dCIpOworICAgICAgICAgICAgICAgIHRvRWxlbWVudC52
YWx1ZSA9ICJGQUlMIjsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgdG9F
bGVtZW50ID0gdG9Eb2N1bWVudC5jcmVhdGVFbGVtZW50KCJzcGFuIik7CisgICAgICAgICAgICAg
ICAgdG9FbGVtZW50LmNvbnRlbnRFZGl0YWJsZSA9ICJ0cnVlIjsKKyAgICAgICAgICAgICAgICB0
b0VsZW1lbnQuaW5uZXJIVE1MID0gIkZBSUwiOworICAgICAgICAgICAgfQorICAgICAgICAgICAg
cGFzdGVib2FyZEVsZW1lbnQuYXBwZW5kQ2hpbGQodG9FbGVtZW50KTsKKyAgICAgICAgICAgIHBh
c3RlYm9hcmRFbGVtZW50LmFwcGVuZENoaWxkKHRvRG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiYnIi
KSk7CisKKyAgICAgICAgICAgIHNlbGVjdEVsZW1lbnQodG9Eb2N1bWVudCwgdG9FbGVtZW50KTsK
KyAgICAgICAgICAgIHRvRG9jdW1lbnQuZXhlY0NvbW1hbmQoIlBhc3RlIik7CisgICAgICAgICAg
ICB2YXIgYWN0dWFsVGV4dCA9IHNlbGVjdEVsZW1lbnQodG9Eb2N1bWVudCwgdG9FbGVtZW50KTsK
KworICAgICAgICAgICAgdmFyIHJlc3VsdCA9ICJQQVNTIjsKKyAgICAgICAgICAgIHZhciBleHBl
Y3RlZENoYXJDb2RlID0gIlxcIi5jaGFyQ29kZUF0KDApOworICAgICAgICAgICAgaWYgKGZyb21F
bGVtZW50TmFtZSA9PSAic2VjdXJlIikKKyAgICAgICAgICAgICAgICBleHBlY3RlZENoYXJDb2Rl
ID0gIuKAoiIuY2hhckNvZGVBdCgwKTsKKyAgICAgICAgICAgIGlmIChhY3R1YWxUZXh0LmNoYXJD
b2RlQXQoMCkgIT0gZXhwZWN0ZWRDaGFyQ29kZSkKKyAgICAgICAgICAgICAgICByZXN1bHQgPSAi
RkFJTDogZXhwZWN0ZWQgIiArIGV4cGVjdGVkQ2hhckNvZGUgKyAiIGJ1dCBjb21lcyAiICsgYWN0
dWFsVGV4dC5jaGFyQ29kZUF0KDApICsgIiwgdGhlIGFjdHVhbCB0ZXh0IHdhcyAnIiArIGFjdHVh
bFRleHQgKyAiJyI7CisKKyAgICAgICAgICAgIGlmIChmcm9tRWxlbWVudE5hbWUgPT0gInRyYW5z
Zm9ybSIpIHsKKyAgICAgICAgICAgICAgICBleHBlY3RlZENoYXJDb2RlID0gIkYiLmNoYXJDb2Rl
QXQoMCk7CisgICAgICAgICAgICAgICAgaWYgKGFjdHVhbFRleHQuY2hhckNvZGVBdCgyKSAhPSBl
eHBlY3RlZENoYXJDb2RlKQorICAgICAgICAgICAgICAgICAgICByZXN1bHQgPSAiRkFJTCh0cmFu
c2Zvcm0pOiBleHBlY3RlZCAiICsgZXhwZWN0ZWRDaGFyQ29kZSArICIgYnV0IGNvbWVzICIgKyBh
Y3R1YWxUZXh0LmNoYXJDb2RlQXQoMikgKyAiLCB0aGUgYWN0dWFsIHRleHQgd2FzICciICsgYWN0
dWFsVGV4dCArICInIjsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgcmVzdWx0c0VsZW1l
bnQuaW5uZXJIVE1MICs9IHRlc3ROYW1lICsgcmVzdWx0ICsgIjxicj4iOworICAgICAgICB9Cisg
ICAgfQorfQorCitmdW5jdGlvbiB0ZXN0KCkKK3sKKyAgICB0ZXN0Q29weUFuZFBhc3RlVGV4dHMo
ZnJhbWVzWzBdLmRvY3VtZW50LCAiZXVjIiwgZG9jdW1lbnQsICJ1dGY4Iik7CisgICAgdGVzdENv
cHlBbmRQYXN0ZVRleHRzKGRvY3VtZW50LCAidXRmOCIsIGZyYW1lc1swXS5kb2N1bWVudCwgImV1
YyIpOworfQorCis8L3NjcmlwdD4KKzwvaGVhZD4KKworPGJvZHkgb25sb2FkPSJ0ZXN0KCkiPgor
Cis8ZGl2PgorPGlmcmFtZSBzcmM9InJlc291cmNlcy9jb3B5LWJhY2tzbGFzaC1ldWMuaHRtbCIg
d2lkdGg9IjYwMCIgaGVpZ2h0PSIzMDAiPjwvaWZyYW1lPgorPC9kaXY+CisKKzxoMj5PcmlnaW5h
bCB0ZXh0cyB3aGljaCB3aWxsIGJlIGNvcGllZDwvaDI+Cis8ZGl2IGlkPSJkaXYiPlwgZnJvbSBV
VEY4IHBhZ2U8L2Rpdj4KKzxkaXYgaWQ9InRyYW5zZm9ybSIgc3R5bGU9InRleHQtdHJhbnNmb3Jt
OnVwcGVyY2FzZSI+XCBmcm9tIFVURjggcGFnZSAodHJhbnNmb3JtZWQpPC9kaXY+Cis8ZGl2IGlk
PSJzZWN1cmUiIHN0eWxlPSItd2Via2l0LXRleHQtc2VjdXJpdHk6ZGlzYyI+XCBmcm9tIFVURjgg
cGFnZSAoc2VjdXJlKTwvZGl2PgorPGlucHV0IGlkPSJjb250cm9sIiB2YWx1ZT0iXCBmcm9tIFVU
RjggdGV4dCBjb250cm9sIj4KKworPGgyPlRleHRzIGluIHRoZSBFVUMgZnJhbWUgd2lsbCBiZSBw
YXN0ZWQgaGVyZTwvaDI+Cis8ZGl2IGlkPSJwYXN0ZWJvYXJkIj48L2Rpdj4KKworPGJyPgorCis8
aDI+UmVzdWx0czwvaDI+Cis8cCBpZD0icmVzdWx0cyI+Cis8L3A+CisKKzwvYm9keT4KKworPC9o
dG1sPgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvZWRpdGluZy9wYXN0ZWJvYXJkL3Jlc291cmNl
cy9jb3B5LWJhY2tzbGFzaC1ldWMuaHRtbCBiL0xheW91dFRlc3RzL2VkaXRpbmcvcGFzdGVib2Fy
ZC9yZXNvdXJjZXMvY29weS1iYWNrc2xhc2gtZXVjLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMC4uNWE5ZjQwMgotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2Vk
aXRpbmcvcGFzdGVib2FyZC9yZXNvdXJjZXMvY29weS1iYWNrc2xhc2gtZXVjLmh0bWwKQEAgLTAs
MCArMSwyMSBAQAorPCFET0NUWVBFIGh0bWw+Cis8aHRtbD4KKworPGhlYWQ+Cis8bWV0YSBjaGFy
c2V0PSJFVUMtSlAiPgorPC9oZWFkPgorCis8Ym9keT4KKworPGgyPk9yaWdpbmFsIHRleHRzIHdo
aWNoIHdpbGwgYmUgY29waWVkPC9oMj4KKzxkaXYgaWQ9ImRpdiI+XCBmcm9tIEVVQyBwYWdlPC9k
aXY+Cis8ZGl2IGlkPSJ0cmFuc2Zvcm0iIHN0eWxlPSJ0ZXh0LXRyYW5zZm9ybTp1cHBlcmNhc2Ui
PlwgZnJvbSBFVUMgcGFnZSAodHJhbnNmb3JtZWQpPC9kaXY+Cis8ZGl2IGlkPSJzZWN1cmUiIHN0
eWxlPSItd2Via2l0LXRleHQtc2VjdXJpdHk6ZGlzYyI+XCBmcm9tIEVVQyBwYWdlIChzZWN1cmUp
PC9kaXY+Cis8aW5wdXQgaWQ9ImNvbnRyb2wiIHZhbHVlPSJcIGZyb20gRVVDIHRleHQgY29udHJv
bCI+CisKKzxoMj5UZXh0cyBpbiB0aGUgVVRGOCBmcmFtZSB3aWxsIGJlIHBhc3RlZCBoZXJlPC9o
Mj4KKzxkaXYgaWQ9InBhc3RlYm9hcmQiPjwvZGl2PgorCis8L2JvZHk+CisKKzwvaHRtbD4KZGlm
ZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMDlm
YWQ4Yy4uZTEyNzllOSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvV2ViQ29y
ZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSw0MiBAQAorMjAxMC0wNC0yMCAgU2hpbmljaGlybyBIYW1h
amkgIDxoYW1hamlAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAo
T09QUyEpLgorCisgICAgICAgIEEgYmFja3NsYXNoIGluIEVVQy1KUCBiZWNvbWVzIHRvIGEgeWVu
IHNpZ24gd2hlbiBpdCBpcyBjb3BpZWQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTM2NDE5CisKKyAgICAgICAgVGVzdHM6IGVkaXRpbmcvZXhlY0NvbW1h
bmQvdHJhbnNwb3NlLWJhY2tzbGFzaC13aXRoLWV1Yy5odG1sCisgICAgICAgICAgICAgICBlZGl0
aW5nL3Bhc3RlYm9hcmQvY29weS1iYWNrc2xhc2gtd2l0aC1ldWMuaHRtbAorCisgICAgICAgICog
ZWRpdGluZy9FZGl0b3IuY3BwOiBSZW1vdmUgYW4gdW5uZWNlc3NhcnkgZGlzcGxheVN0cmluZ01v
ZGlmaWVkQnlFbmNvZGluZyBjYWxscy4KKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6YWRkVG9L
aWxsUmluZyk6CisgICAgICAgICogZWRpdGluZy9UZXh0SXRlcmF0b3IuY3BwOiBUZXh0SXRlcmF0
b3IgY2FuIHVzZSBSZW5kZXJUZXh0Ojp0ZXh0V2l0aG91dFRyYW5zY29kaW5nIGFuZCBub3cgcGxh
aW5UZXh0KCkgdXNlcyB0aGlzIHZlcnNpb24KKyAgICAgICAgKFdlYkNvcmU6OlRleHRJdGVyYXRv
cjo6VGV4dEl0ZXJhdG9yKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHRJdGVyYXRvcjo6aW5pdCk6
CisgICAgICAgIChXZWJDb3JlOjpUZXh0SXRlcmF0b3I6OmVtaXRUZXh0KToKKyAgICAgICAgKFdl
YkNvcmU6OnBsYWluVGV4dFRvTWFsbG9jQWxsb2NhdGVkQnVmZmVyKToKKyAgICAgICAgKiBlZGl0
aW5nL1RleHRJdGVyYXRvci5oOgorICAgICAgICAoV2ViQ29yZTo6KToKKyAgICAgICAgKiBwbGF0
Zm9ybS9tYWMvUGFzdGVib2FyZE1hYy5tbTogUmVtb3ZlIGFuIHVubmVjZXNzYXJ5IGRpc3BsYXlT
dHJpbmdNb2RpZmllZEJ5RW5jb2RpbmcgY2FsbC4KKyAgICAgICAgKFdlYkNvcmU6OlBhc3RlYm9h
cmQ6OndyaXRlU2VsZWN0aW9uKToKKyAgICAgICAgKiBwbGF0Zm9ybS90ZXh0L1RleHRFbmNvZGlu
Zy5oOiBNYWtlIGJhY2tzbGFzaEFzQ3VycmVuY3lTeW1ib2wgcHVibGljLgorICAgICAgICAqIHJl
bmRlcmluZy9SZW5kZXJUZXh0LmNwcDogQWRkIFJlbmRlclRleHQ6OnRleHRXaXRob3V0VHJhbnNj
b2RpbmcKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRleHQ6OlJlbmRlclRleHQpOgorICAgICAg
ICAoV2ViQ29yZTo6UmVuZGVyVGV4dDo6dXBkYXRlTmVlZHNUcmFuc2NvZGluZyk6CisgICAgICAg
IChXZWJDb3JlOjpSZW5kZXJUZXh0OjpzdHlsZURpZENoYW5nZSk6CisgICAgICAgIChXZWJDb3Jl
Ojppc0lubGluZUZsb3dPckVtcHR5VGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUZXh0
OjpwcmV2aW91c0NoYXJhY3Rlcik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUZXh0OjpzZXRU
ZXh0SW50ZXJuYWwpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGV4dDo6dGV4dFdpdGhvdXRU
cmFuc2NvZGluZyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUZXh0Ojp0cmFuc2Zvcm1UZXh0
KToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyVGV4dC5oOgorICAgICAgICAqIHJlbmRlcmlu
Zy9SZW5kZXJUZXh0Q29udHJvbC5jcHA6IFJlbW92ZSBhbiB1bm5lY2Vzc2FyeSBkaXNwbGF5U3Ry
aW5nTW9kaWZpZWRCeUVuY29kaW5nIGNhbGwuCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUZXh0
Q29udHJvbDo6c2V0SW5uZXJUZXh0VmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGV4
dENvbnRyb2w6OmZpbmlzaFRleHQpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJUZXh0RnJh
Z21lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGV4dEZyYWdtZW50OjpwcmV2aW91
c0NoYXJhY3Rlcik6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlclRleHRGcmFnbWVudC5oOgor
CiAyMDEwLTA0LTE5ICBTaW1vbiBGcmFzZXIgIDxzaW1vbi5mcmFzZXJAYXBwbGUuY29tPgogCiAg
ICAgICAgIFJldmlld2VkIGJ5IEdlb2ZmIEdhcmVuLgpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9lZGl0
aW5nL0VkaXRvci5jcHAgYi9XZWJDb3JlL2VkaXRpbmcvRWRpdG9yLmNwcAppbmRleCAxMDYxZGQy
Li5lMTcxYWMxIDEwMDY0NAotLS0gYS9XZWJDb3JlL2VkaXRpbmcvRWRpdG9yLmNwcAorKysgYi9X
ZWJDb3JlL2VkaXRpbmcvRWRpdG9yLmNwcApAQCAtMjcwMyw3ICsyNzAzLDcgQEAgdm9pZCBFZGl0
b3I6OmFkZFRvS2lsbFJpbmcoUmFuZ2UqIHJhbmdlLCBib29sIHByZXBlbmQpCiAgICAgaWYgKG1f
c2hvdWxkU3RhcnROZXdLaWxsUmluZ1NlcXVlbmNlKQogICAgICAgICBzdGFydE5ld0tpbGxSaW5n
U2VxdWVuY2UoKTsKIAotICAgIFN0cmluZyB0ZXh0ID0gbV9mcmFtZS0+ZGlzcGxheVN0cmluZ01v
ZGlmaWVkQnlFbmNvZGluZyhwbGFpblRleHQocmFuZ2UpKTsKKyAgICBTdHJpbmcgdGV4dCA9IHBs
YWluVGV4dChyYW5nZSk7CiAgICAgaWYgKHByZXBlbmQpCiAgICAgICAgIHByZXBlbmRUb0tpbGxS
aW5nKHRleHQpOwogICAgIGVsc2UKZGlmZiAtLWdpdCBhL1dlYkNvcmUvZWRpdGluZy9UZXh0SXRl
cmF0b3IuY3BwIGIvV2ViQ29yZS9lZGl0aW5nL1RleHRJdGVyYXRvci5jcHAKaW5kZXggYTM4NmM2
ZS4uOWNjZjZiZiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9lZGl0aW5nL1RleHRJdGVyYXRvci5jcHAK
KysrIGIvV2ViQ29yZS9lZGl0aW5nL1RleHRJdGVyYXRvci5jcHAKQEAgLTI1NiwxMCArMjU2LDEx
IEBAIFRleHRJdGVyYXRvcjo6VGV4dEl0ZXJhdG9yKCkKICAgICAsIG1fbGFzdENoYXJhY3Rlcigw
KQogICAgICwgbV9lbWl0Q2hhcmFjdGVyc0JldHdlZW5BbGxWaXNpYmxlUG9zaXRpb25zKGZhbHNl
KQogICAgICwgbV9lbnRlclRleHRDb250cm9scyhmYWxzZSkKKyAgICAsIG1fZW1pdHNUZXh0c1dp
dGhvdXRUcmFuc2NvZGluZyhmYWxzZSkKIHsKIH0KIAotVGV4dEl0ZXJhdG9yOjpUZXh0SXRlcmF0
b3IoY29uc3QgUmFuZ2UqIHIsIGJvb2wgZW1pdENoYXJhY3RlcnNCZXR3ZWVuQWxsVmlzaWJsZVBv
c2l0aW9ucywgYm9vbCBlbnRlclRleHRDb250cm9scykgCitUZXh0SXRlcmF0b3I6OlRleHRJdGVy
YXRvcihjb25zdCBSYW5nZSogciwgYm9vbCBlbWl0Q2hhcmFjdGVyc0JldHdlZW5BbGxWaXNpYmxl
UG9zaXRpb25zLCBib29sIGVudGVyVGV4dENvbnRyb2xzKQogICAgIDogbV9zdGFydENvbnRhaW5l
cigwKSAKICAgICAsIG1fc3RhcnRPZmZzZXQoMCkKICAgICAsIG1fZW5kQ29udGFpbmVyKDApCkBA
IC0yNjksNiArMjcwLDI3IEBAIFRleHRJdGVyYXRvcjo6VGV4dEl0ZXJhdG9yKGNvbnN0IFJhbmdl
KiByLCBib29sIGVtaXRDaGFyYWN0ZXJzQmV0d2VlbkFsbFZpc2libGVQCiAgICAgLCBtX3RleHRM
ZW5ndGgoMCkKICAgICAsIG1fZW1pdENoYXJhY3RlcnNCZXR3ZWVuQWxsVmlzaWJsZVBvc2l0aW9u
cyhlbWl0Q2hhcmFjdGVyc0JldHdlZW5BbGxWaXNpYmxlUG9zaXRpb25zKQogICAgICwgbV9lbnRl
clRleHRDb250cm9scyhlbnRlclRleHRDb250cm9scykKKyAgICAsIG1fZW1pdHNUZXh0c1dpdGhv
dXRUcmFuc2NvZGluZyhmYWxzZSkKK3sKKyAgICBpbml0KHIpOworfQorCitUZXh0SXRlcmF0b3I6
OlRleHRJdGVyYXRvcihjb25zdCBSYW5nZSogciwgVGV4dEl0ZXJhdG9yQmVoYXZpb3IgYmVoYXZp
b3IpCisgICAgOiBtX3N0YXJ0Q29udGFpbmVyKDApCisgICAgLCBtX3N0YXJ0T2Zmc2V0KDApCisg
ICAgLCBtX2VuZENvbnRhaW5lcigwKQorICAgICwgbV9lbmRPZmZzZXQoMCkKKyAgICAsIG1fcG9z
aXRpb25Ob2RlKDApCisgICAgLCBtX3RleHRDaGFyYWN0ZXJzKDApCisgICAgLCBtX3RleHRMZW5n
dGgoMCkKKyAgICAsIG1fZW1pdENoYXJhY3RlcnNCZXR3ZWVuQWxsVmlzaWJsZVBvc2l0aW9ucyhi
ZWhhdmlvciAmIFRleHRJdGVyYXRvckJlaGF2aW9yRW1pdENoYXJhY3RlcnNCZXR3ZWVuQWxsVmlz
aWJsZVBvc2l0aW9ucykKKyAgICAsIG1fZW50ZXJUZXh0Q29udHJvbHMoYmVoYXZpb3IgJiBUZXh0
SXRlcmF0b3JCZWhhdmlvckVudGVyVGV4dENvbnRyb2xzKQorICAgICwgbV9lbWl0c1RleHRzV2l0
aG91dFRyYW5zY29kaW5nKGJlaGF2aW9yICYgVGV4dEl0ZXJhdG9yQmVoYXZpb3JFbWl0c1RleHRz
V2l0aG91dFRyYW5zY29kaW5nKQoreworICAgIGluaXQocik7Cit9CisKK3ZvaWQgVGV4dEl0ZXJh
dG9yOjppbml0KGNvbnN0IFJhbmdlKiByKQogewogICAgIGlmICghcikKICAgICAgICAgcmV0dXJu
OwpAQCAtODg5LDcgKzkxMSwxMSBAQCB2b2lkIFRleHRJdGVyYXRvcjo6ZW1pdENoYXJhY3RlcihV
Q2hhciBjLCBOb2RlKiB0ZXh0Tm9kZSwgTm9kZSogb2Zmc2V0QmFzZU5vZGUsCiB2b2lkIFRleHRJ
dGVyYXRvcjo6ZW1pdFRleHQoTm9kZSogdGV4dE5vZGUsIGludCB0ZXh0U3RhcnRPZmZzZXQsIGlu
dCB0ZXh0RW5kT2Zmc2V0KQogewogICAgIFJlbmRlclRleHQqIHJlbmRlcmVyID0gdG9SZW5kZXJU
ZXh0KG1fbm9kZS0+cmVuZGVyZXIoKSk7Ci0gICAgU3RyaW5nIHN0ciA9IHJlbmRlcmVyLT50ZXh0
KCk7CisgICAgU3RyaW5nIHN0cjsKKyAgICBpZiAobV9lbWl0c1RleHRzV2l0aG91dFRyYW5zY29k
aW5nKQorICAgICAgICBzdHIgPSByZW5kZXJlci0+dGV4dFdpdGhvdXRUcmFuc2NvZGluZygpOwor
ICAgIGVsc2UKKyAgICAgICAgc3RyID0gcmVuZGVyZXItPnRleHQoKTsKICAgICBBU1NFUlQoc3Ry
LmNoYXJhY3RlcnMoKSk7CiAKICAgICBtX3Bvc2l0aW9uTm9kZSA9IHRleHROb2RlOwpAQCAtMjEw
NCw3ICsyMTMwLDcgQEAgUGFzc1JlZlB0cjxSYW5nZT4gVGV4dEl0ZXJhdG9yOjpyYW5nZUZyb21M
b2NhdGlvbkFuZExlbmd0aChFbGVtZW50KiBzY29wZSwgaW50IHIKIAogLy8gLS0tLS0tLS0KICAg
ICAKLVVDaGFyKiBwbGFpblRleHRUb01hbGxvY0FsbG9jYXRlZEJ1ZmZlcihjb25zdCBSYW5nZSog
ciwgdW5zaWduZWQmIGJ1ZmZlckxlbmd0aCwgYm9vbCBpc0Rpc3BsYXlTdHJpbmcpIAorVUNoYXIq
IHBsYWluVGV4dFRvTWFsbG9jQWxsb2NhdGVkQnVmZmVyKGNvbnN0IFJhbmdlKiByLCB1bnNpZ25l
ZCYgYnVmZmVyTGVuZ3RoLCBib29sIGlzRGlzcGxheVN0cmluZykKIHsKICAgICBVQ2hhciogcmVz
dWx0ID0gMDsKIApAQCAtMjExNiw3ICsyMTQyLDcgQEAgVUNoYXIqIHBsYWluVGV4dFRvTWFsbG9j
QWxsb2NhdGVkQnVmZmVyKGNvbnN0IFJhbmdlKiByLCB1bnNpZ25lZCYgYnVmZmVyTGVuZ3RoLAog
ICAgIFZlY3RvcjxUZXh0U2VnbWVudD4qIHRleHRTZWdtZW50cyA9IDA7CiAgICAgVmVjdG9yPFVD
aGFyPiB0ZXh0QnVmZmVyOwogICAgIHRleHRCdWZmZXIucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShj
TWF4U2VnbWVudFNpemUpOwotICAgIGZvciAoVGV4dEl0ZXJhdG9yIGl0KHIpOyAhaXQuYXRFbmQo
KTsgaXQuYWR2YW5jZSgpKSB7CisgICAgZm9yIChUZXh0SXRlcmF0b3IgaXQociwgaXNEaXNwbGF5
U3RyaW5nID8gVGV4dEl0ZXJhdG9yQmVoYXZpb3JEZWZhdWx0IDogVGV4dEl0ZXJhdG9yQmVoYXZp
b3JFbWl0c1RleHRzV2l0aG91dFRyYW5zY29kaW5nKTsgIWl0LmF0RW5kKCk7IGl0LmFkdmFuY2Uo
KSkgewogICAgICAgICBpZiAodGV4dEJ1ZmZlci5zaXplKCkgJiYgdGV4dEJ1ZmZlci5zaXplKCkg
KyBpdC5sZW5ndGgoKSA+IGNNYXhTZWdtZW50U2l6ZSkgewogICAgICAgICAgICAgVUNoYXIqIG5l
d1NlZ21lbnRCdWZmZXIgPSBzdGF0aWNfY2FzdDxVQ2hhcio+KG1hbGxvYyh0ZXh0QnVmZmVyLnNp
emUoKSAqIHNpemVvZihVQ2hhcikpKTsKICAgICAgICAgICAgIGlmICghbmV3U2VnbWVudEJ1ZmZl
cikKZGlmZiAtLWdpdCBhL1dlYkNvcmUvZWRpdGluZy9UZXh0SXRlcmF0b3IuaCBiL1dlYkNvcmUv
ZWRpdGluZy9UZXh0SXRlcmF0b3IuaAppbmRleCA0NGFmM2U1Li5lNGJhMmI1IDEwMDY0NAotLS0g
YS9XZWJDb3JlL2VkaXRpbmcvVGV4dEl0ZXJhdG9yLmgKKysrIGIvV2ViQ29yZS9lZGl0aW5nL1Rl
eHRJdGVyYXRvci5oCkBAIC02OCwxMSArNjgsMTkgQEAgcHJpdmF0ZToKIC8vIGF0IHBvaW50cyB3
aGVyZSByZXBsYWNlZCBlbGVtZW50cyBicmVhayB1cCB0aGUgdGV4dCBmbG93LiAgVGhlIHRleHQg
Y29tZXMgYmFjayBpbgogLy8gY2h1bmtzIHNvIGFzIHRvIG9wdGltaXplIGZvciBwZXJmb3JtYW5j
ZSBvZiB0aGUgaXRlcmF0aW9uLgogCitlbnVtIFRleHRJdGVyYXRvckJlaGF2aW9yIHsKKyAgICBU
ZXh0SXRlcmF0b3JCZWhhdmlvckRlZmF1bHQgPSAwLAorICAgIFRleHRJdGVyYXRvckJlaGF2aW9y
RW1pdENoYXJhY3RlcnNCZXR3ZWVuQWxsVmlzaWJsZVBvc2l0aW9ucyA9IDEgPDwgMCwKKyAgICBU
ZXh0SXRlcmF0b3JCZWhhdmlvckVudGVyVGV4dENvbnRyb2xzID0gMSA8PCAxLAorICAgIFRleHRJ
dGVyYXRvckJlaGF2aW9yRW1pdHNUZXh0c1dpdGhvdXRUcmFuc2NvZGluZyA9IDEgPDwgMiwKK307
CisKIGNsYXNzIFRleHRJdGVyYXRvciB7CiBwdWJsaWM6CiAgICAgVGV4dEl0ZXJhdG9yKCk7CiAg
ICAgZXhwbGljaXQgVGV4dEl0ZXJhdG9yKGNvbnN0IFJhbmdlKiwgYm9vbCBlbWl0Q2hhcmFjdGVy
c0JldHdlZW5BbGxWaXNpYmxlUG9zaXRpb25zID0gZmFsc2UsIGJvb2wgZW50ZXJUZXh0Q29udHJv
bHMgPSBmYWxzZSk7Ci0gICAgCisgICAgZXhwbGljaXQgVGV4dEl0ZXJhdG9yKGNvbnN0IFJhbmdl
KiwgVGV4dEl0ZXJhdG9yQmVoYXZpb3IpOworCiAgICAgYm9vbCBhdEVuZCgpIGNvbnN0IHsgcmV0
dXJuICFtX3Bvc2l0aW9uTm9kZTsgfQogICAgIHZvaWQgYWR2YW5jZSgpOwogICAgIApAQCAtODcs
NiArOTUsNyBAQCBwdWJsaWM6CiAgICAgc3RhdGljIFBhc3NSZWZQdHI8UmFuZ2U+IHN1YnJhbmdl
KFJhbmdlKiBlbnRpcmVSYW5nZSwgaW50IGNoYXJhY3Rlck9mZnNldCwgaW50IGNoYXJhY3RlckNv
dW50KTsKICAgICAKIHByaXZhdGU6CisgICAgdm9pZCBpbml0KGNvbnN0IFJhbmdlKik7CiAgICAg
dm9pZCBleGl0Tm9kZSgpOwogICAgIGJvb2wgc2hvdWxkUmVwcmVzZW50Tm9kZU9mZnNldFplcm8o
KTsKICAgICBib29sIHNob3VsZEVtaXRTcGFjZUJlZm9yZUFuZEFmdGVyTm9kZShOb2RlKik7CkBA
IC0xNDcsNiArMTU2LDkgQEAgcHJpdmF0ZToKICAgICAvLyBtb3ZlUGFyYWdyYXBocyB0byBub3Qg
Y2xvbmUvZGVzdHJveSBtb3ZlZCBjb250ZW50LgogICAgIGJvb2wgbV9lbWl0Q2hhcmFjdGVyc0Jl
dHdlZW5BbGxWaXNpYmxlUG9zaXRpb25zOwogICAgIGJvb2wgbV9lbnRlclRleHRDb250cm9sczsK
KworICAgIC8vIFVzZWQgd2hlbiB3ZSB3YW50IHRleHRzIGZvciBjb3B5aW5nLCBwYXN0aW5nLCBh
bmQgdHJhbnNwb3NpbmcuCisgICAgYm9vbCBtX2VtaXRzVGV4dHNXaXRob3V0VHJhbnNjb2Rpbmc7
CiB9OwogCiAvLyBJdGVyYXRlcyB0aHJvdWdoIHRoZSBET00gcmFuZ2UsIHJldHVybmluZyBhbGwg
dGhlIHRleHQsIGFuZCAwLWxlbmd0aCBib3VuZGFyaWVzCmRpZmYgLS1naXQgYS9XZWJDb3JlL3Bs
YXRmb3JtL21hYy9QYXN0ZWJvYXJkTWFjLm1tIGIvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvUGFzdGVi
b2FyZE1hYy5tbQppbmRleCAwODZiMjcyLi4wM2VkZTAzIDEwMDY0NAotLS0gYS9XZWJDb3JlL3Bs
YXRmb3JtL21hYy9QYXN0ZWJvYXJkTWFjLm1tCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vbWFjL1Bh
c3RlYm9hcmRNYWMubW0KQEAgLTE4NCw3ICsxODQsNyBAQCB2b2lkIFBhc3RlYm9hcmQ6OndyaXRl
U2VsZWN0aW9uKE5TUGFzdGVib2FyZCogcGFzdGVib2FyZCwgUmFuZ2UqIHNlbGVjdGVkUmFuZ2Us
CiAgICAgaWYgKFt0eXBlcyBjb250YWluc09iamVjdDpOU1N0cmluZ1Bib2FyZFR5cGVdKSB7CiAg
ICAgICAgIC8vIE1hcCAmbmJzcDsgdG8gYSBwbGFpbiBvbGQgc3BhY2UgYmVjYXVzZSB0aGlzIGlz
IGJldHRlciBmb3Igc291cmNlIGNvZGUsIG90aGVyIGJyb3dzZXJzIGRvIGl0LAogICAgICAgICAv
LyBhbmQgYmVjYXVzZSBIVE1MIGZvcmNlcyB5b3UgdG8gZG8gdGhpcyBhbnkgdGltZSB5b3Ugd2Fu
dCB0d28gc3BhY2VzIGluIGEgcm93LgotICAgICAgICBTdHJpbmcgdGV4dCA9IGZyYW1lLT5kaXNw
bGF5U3RyaW5nTW9kaWZpZWRCeUVuY29kaW5nKHNlbGVjdGVkUmFuZ2UtPnRleHQoKSk7CisgICAg
ICAgIFN0cmluZyB0ZXh0ID0gc2VsZWN0ZWRSYW5nZS0+dGV4dCgpOwogICAgICAgICBOU011dGFi
bGVTdHJpbmcgKnMgPSBbW1soTlNTdHJpbmcqKXRleHQgY29weV0gYXV0b3JlbGVhc2VdIG11dGFi
bGVDb3B5XTsKICAgICAgICAgCiAgICAgICAgIE5TU3RyaW5nICpOb25CcmVha2luZ1NwYWNlU3Ry
aW5nID0gW05TU3RyaW5nIHN0cmluZ1dpdGhDaGFyYWN0ZXJzOiZub0JyZWFrU3BhY2UgbGVuZ3Ro
OjFdOwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L1RleHRFbmNvZGluZy5oIGIv
V2ViQ29yZS9wbGF0Zm9ybS90ZXh0L1RleHRFbmNvZGluZy5oCmluZGV4IDc1NzQzNDQuLjM0Mjli
YjUgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9UZXh0RW5jb2RpbmcuaAorKysg
Yi9XZWJDb3JlL3BsYXRmb3JtL3RleHQvVGV4dEVuY29kaW5nLmgKQEAgLTc3LDggKzc3LDkgQEAg
bmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICBTdHJpbmcgZGVjb2RlKGNvbnN0IGNoYXIqLCBz
aXplX3QgbGVuZ3RoLCBib29sIHN0b3BPbkVycm9yLCBib29sJiBzYXdFcnJvcikgY29uc3Q7CiAg
ICAgICAgIFdURjo6Q1N0cmluZyBlbmNvZGUoY29uc3QgVUNoYXIqLCBzaXplX3QgbGVuZ3RoLCBV
bmVuY29kYWJsZUhhbmRsaW5nKSBjb25zdDsKIAotICAgIHByaXZhdGU6CiAgICAgICAgIFVDaGFy
IGJhY2tzbGFzaEFzQ3VycmVuY3lTeW1ib2woKSBjb25zdDsKKworICAgIHByaXZhdGU6CiAgICAg
ICAgIGJvb2wgaXNOb25CeXRlQmFzZWRFbmNvZGluZygpIGNvbnN0OwogICAgICAgICBib29sIGlz
VVRGN0VuY29kaW5nKCkgY29uc3Q7CiAKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlclRleHQuY3BwIGIvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4dC5jcHAKaW5kZXggNjk1
Mjk4Zi4uNTA3NWI0YyAxMDA2NDQKLS0tIGEvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4dC5j
cHAKKysrIGIvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4dC5jcHAKQEAgLTM5LDYgKzM5LDcg
QEAKICNpbmNsdWRlICJTdHJpbmdCdWZmZXIuaCIKICNpbmNsdWRlICJUZXh0LmgiCiAjaW5jbHVk
ZSAiVGV4dEJyZWFrSXRlcmF0b3IuaCIKKyNpbmNsdWRlICJUZXh0UmVzb3VyY2VEZWNvZGVyLmgi
CiAjaW5jbHVkZSAiVmlzaWJsZVBvc2l0aW9uLmgiCiAjaW5jbHVkZSAiYnJlYWtfbGluZXMuaCIK
ICNpbmNsdWRlIDx3dGYvQWx3YXlzSW5saW5lLmg+CkBAIC04OCw3ICs4OSw3IEBAIHN0YXRpYyB2
b2lkIG1ha2VDYXBpdGFsaXplZChTdHJpbmcqIHN0cmluZywgVUNoYXIgcHJldmlvdXMpCiBSZW5k
ZXJUZXh0OjpSZW5kZXJUZXh0KE5vZGUqIG5vZGUsIFBhc3NSZWZQdHI8U3RyaW5nSW1wbD4gc3Ry
KQogICAgICA6IFJlbmRlck9iamVjdChub2RlKQogICAgICAsIG1fbWluV2lkdGgoLTEpCi0gICAg
ICwgbV90ZXh0KGRvY3VtZW50KCktPmRpc3BsYXlTdHJpbmdNb2RpZmllZEJ5RW5jb2Rpbmcoc3Ry
KSkKKyAgICAgLCBtX3RleHQoc3RyKQogICAgICAsIG1fZmlyc3RUZXh0Qm94KDApCiAgICAgICwg
bV9sYXN0VGV4dEJveCgwKQogICAgICAsIG1fbWF4V2lkdGgoLTEpCkBAIC05OSw2ICsxMDAsNyBA
QCBSZW5kZXJUZXh0OjpSZW5kZXJUZXh0KE5vZGUqIG5vZGUsIFBhc3NSZWZQdHI8U3RyaW5nSW1w
bD4gc3RyKQogICAgICAsIG1fY29udGFpbnNSZXZlcnNlZFRleHQoZmFsc2UpCiAgICAgICwgbV9p
c0FsbEFTQ0lJKG1fdGV4dC5jb250YWluc09ubHlBU0NJSSgpKQogICAgICAsIG1fa25vd25Ub0hh
dmVOb092ZXJmbG93QW5kTm9GYWxsYmFja0ZvbnRzKGZhbHNlKQorICAgICAsIG1fbmVlZHNUcmFu
c2NvZGluZyhmYWxzZSkKIHsKICAgICBBU1NFUlQobV90ZXh0KTsKIApAQCAtMTM1LDYgKzEzNywx
MSBAQCBib29sIFJlbmRlclRleHQ6OmlzV29yZEJyZWFrKCkgY29uc3QKICAgICByZXR1cm4gZmFs
c2U7CiB9CiAKK3ZvaWQgUmVuZGVyVGV4dDo6dXBkYXRlTmVlZHNUcmFuc2NvZGluZygpCit7Cisg
ICAgbV9uZWVkc1RyYW5zY29kaW5nID0gZG9jdW1lbnQoKS0+ZGVjb2RlcigpICYmIGRvY3VtZW50
KCktPmRlY29kZXIoKS0+ZW5jb2RpbmcoKS5iYWNrc2xhc2hBc0N1cnJlbmN5U3ltYm9sKCkgIT0g
J1xcJzsKK30KKwogdm9pZCBSZW5kZXJUZXh0OjpzdHlsZURpZENoYW5nZShTdHlsZURpZmZlcmVu
Y2UgZGlmZiwgY29uc3QgUmVuZGVyU3R5bGUqIG9sZFN0eWxlKQogewogICAgIC8vIFRoZXJlIGlz
IG5vIG5lZWQgdG8gZXZlciBzY2hlZHVsZSByZXBhaW50cyBmcm9tIGEgc3R5bGUgY2hhbmdlIG9m
IGEgdGV4dCBydW4sIHNpbmNlCkBAIC0xNDYsMTAgKzE1MywxNiBAQCB2b2lkIFJlbmRlclRleHQ6
OnN0eWxlRGlkQ2hhbmdlKFN0eWxlRGlmZmVyZW5jZSBkaWZmLCBjb25zdCBSZW5kZXJTdHlsZSog
b2xkU3R5bAogICAgICAgICBtX2tub3duVG9IYXZlTm9PdmVyZmxvd0FuZE5vRmFsbGJhY2tGb250
cyA9IGZhbHNlOwogICAgIH0KIAorICAgIGJvb2wgbmVlZHNSZXNldFRleHQgPSBmYWxzZTsKKyAg
ICBpZiAoIW9sZFN0eWxlKSB7CisgICAgICAgIHVwZGF0ZU5lZWRzVHJhbnNjb2RpbmcoKTsKKyAg
ICAgICAgbmVlZHNSZXNldFRleHQgPSBtX25lZWRzVHJhbnNjb2Rpbmc7CisgICAgfQorICAgIC8v
IEZJWE1FOiBjaGVjayBmb250cyB3aGVuIHdlIGltcGxlbWVudCBmb250LWJhc2VkIHRyYW5zY29k
aW5nLgorCiAgICAgRVRleHRUcmFuc2Zvcm0gb2xkVHJhbnNmb3JtID0gb2xkU3R5bGUgPyBvbGRT
dHlsZS0+dGV4dFRyYW5zZm9ybSgpIDogVFROT05FOwogICAgIEVUZXh0U2VjdXJpdHkgb2xkU2Vj
dXJpdHkgPSBvbGRTdHlsZSA/IG9sZFN0eWxlLT50ZXh0U2VjdXJpdHkoKSA6IFRTTk9ORTsKLQot
ICAgIGlmIChvbGRUcmFuc2Zvcm0gIT0gc3R5bGUoKS0+dGV4dFRyYW5zZm9ybSgpIHx8IG9sZFNl
Y3VyaXR5ICE9IHN0eWxlKCktPnRleHRTZWN1cml0eSgpKSB7CisgICAgaWYgKG5lZWRzUmVzZXRU
ZXh0IHx8IG9sZFRyYW5zZm9ybSAhPSBzdHlsZSgpLT50ZXh0VHJhbnNmb3JtKCkgfHwgb2xkU2Vj
dXJpdHkgIT0gc3R5bGUoKS0+dGV4dFNlY3VyaXR5KCkpIHsKICAgICAgICAgaWYgKFJlZlB0cjxT
dHJpbmdJbXBsPiB0ZXh0VG9UcmFuc2Zvcm0gPSBvcmlnaW5hbFRleHQoKSkKICAgICAgICAgICAg
IHNldFRleHQodGV4dFRvVHJhbnNmb3JtLnJlbGVhc2UoKSwgdHJ1ZSk7CiAgICAgfQpAQCAtOTYw
LDcgKzk3Myw3IEBAIHZvaWQgUmVuZGVyVGV4dDo6c2V0VGV4dFdpdGhPZmZzZXQoUGFzc1JlZlB0
cjxTdHJpbmdJbXBsPiB0ZXh0LCB1bnNpZ25lZCBvZmZzZXQsCiAgICAgc2V0VGV4dCh0ZXh0LCBm
b3JjZSk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgYm9vbCBpc0lubGluZUZsb3dPckVtcHR5VGV4dChS
ZW5kZXJPYmplY3QqIG8pCitzdGF0aWMgaW5saW5lIGJvb2wgaXNJbmxpbmVGbG93T3JFbXB0eVRl
eHQoY29uc3QgUmVuZGVyT2JqZWN0KiBvKQogewogICAgIGlmIChvLT5pc1JlbmRlcklubGluZSgp
KQogICAgICAgICByZXR1cm4gdHJ1ZTsKQEAgLTk3MiwxMCArOTg1LDEwIEBAIHN0YXRpYyBpbmxp
bmUgYm9vbCBpc0lubGluZUZsb3dPckVtcHR5VGV4dChSZW5kZXJPYmplY3QqIG8pCiAgICAgcmV0
dXJuICF0ZXh0LT5sZW5ndGgoKTsKIH0KIAotVUNoYXIgUmVuZGVyVGV4dDo6cHJldmlvdXNDaGFy
YWN0ZXIoKQorVUNoYXIgUmVuZGVyVGV4dDo6cHJldmlvdXNDaGFyYWN0ZXIoKSBjb25zdAogewog
ICAgIC8vIGZpbmQgcHJldmlvdXMgdGV4dCByZW5kZXJlciBpZiBvbmUgZXhpc3RzCi0gICAgUmVu
ZGVyT2JqZWN0KiBwcmV2aW91c1RleHQgPSB0aGlzOworICAgIGNvbnN0IFJlbmRlck9iamVjdCog
cHJldmlvdXNUZXh0ID0gdGhpczsKICAgICB3aGlsZSAoKHByZXZpb3VzVGV4dCA9IHByZXZpb3Vz
VGV4dC0+cHJldmlvdXNJblByZU9yZGVyKCkpKQogICAgICAgICBpZiAoIWlzSW5saW5lRmxvd09y
RW1wdHlUZXh0KHByZXZpb3VzVGV4dCkpCiAgICAgICAgICAgICBicmVhazsKQEAgLTk4OSw3ICsx
MDAyLDEwIEBAIFVDaGFyIFJlbmRlclRleHQ6OnByZXZpb3VzQ2hhcmFjdGVyKCkKIHZvaWQgUmVu
ZGVyVGV4dDo6c2V0VGV4dEludGVybmFsKFBhc3NSZWZQdHI8U3RyaW5nSW1wbD4gdGV4dCkKIHsK
ICAgICBBU1NFUlQodGV4dCk7Ci0gICAgbV90ZXh0ID0gZG9jdW1lbnQoKS0+ZGlzcGxheVN0cmlu
Z01vZGlmaWVkQnlFbmNvZGluZyh0ZXh0KTsKKyAgICBpZiAobV9uZWVkc1RyYW5zY29kaW5nKQor
ICAgICAgICBtX3RleHQgPSBkb2N1bWVudCgpLT5kaXNwbGF5U3RyaW5nTW9kaWZpZWRCeUVuY29k
aW5nKHRleHQpOworICAgIGVsc2UKKyAgICAgICAgbV90ZXh0ID0gdGV4dDsKICAgICBBU1NFUlQo
bV90ZXh0KTsKIAogI2lmIEVOQUJMRShTVkcpCkBAIC0xMDIyLDMzICsxMDM4LDIxIEBAIHZvaWQg
UmVuZGVyVGV4dDo6c2V0VGV4dEludGVybmFsKFBhc3NSZWZQdHI8U3RyaW5nSW1wbD4gdGV4dCkK
ICNlbmRpZgogCiAgICAgaWYgKHN0eWxlKCkpIHsKLSAgICAgICAgc3dpdGNoIChzdHlsZSgpLT50
ZXh0VHJhbnNmb3JtKCkpIHsKLSAgICAgICAgICAgIGNhc2UgVFROT05FOgotICAgICAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSBDQVBJVEFMSVpFOgotICAgICAgICAgICAgICAg
IG1ha2VDYXBpdGFsaXplZCgmbV90ZXh0LCBwcmV2aW91c0NoYXJhY3RlcigpKTsKLSAgICAgICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNhc2UgVVBQRVJDQVNFOgotICAgICAgICAgICAg
ICAgIG1fdGV4dC5tYWtlVXBwZXIoKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAg
ICAgIGNhc2UgTE9XRVJDQVNFOgotICAgICAgICAgICAgICAgIG1fdGV4dC5tYWtlTG93ZXIoKTsK
LSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQorICAgICAgICB0cmFuc2Zvcm1UZXh0
KG1fdGV4dCk7CiAKICAgICAgICAgLy8gV2UgdXNlIHRoZSBzYW1lIGNoYXJhY3RlcnMgaGVyZSBh
cyBmb3IgbGlzdCBtYXJrZXJzLgogICAgICAgICAvLyBTZWUgdGhlIGxpc3RNYXJrZXJUZXh0IGZ1
bmN0aW9uIGluIFJlbmRlckxpc3RNYXJrZXIuY3BwLgogICAgICAgICBzd2l0Y2ggKHN0eWxlKCkt
PnRleHRTZWN1cml0eSgpKSB7Ci0gICAgICAgICAgICBjYXNlIFRTTk9ORToKLSAgICAgICAgICAg
ICAgICBicmVhazsKLSAgICAgICAgICAgIGNhc2UgVFNDSVJDTEU6Ci0gICAgICAgICAgICAgICAg
bV90ZXh0Lm1ha2VTZWN1cmUod2hpdGVCdWxsZXQpOwotICAgICAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICAgICAgY2FzZSBUU0RJU0M6Ci0gICAgICAgICAgICAgICAgbV90ZXh0Lm1ha2VTZWN1
cmUoYnVsbGV0KTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNhc2UgVFNT
UVVBUkU6Ci0gICAgICAgICAgICAgICAgbV90ZXh0Lm1ha2VTZWN1cmUoYmxhY2tTcXVhcmUpOwor
ICAgICAgICBjYXNlIFRTTk9ORToKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFRT
Q0lSQ0xFOgorICAgICAgICAgICAgbV90ZXh0Lm1ha2VTZWN1cmUod2hpdGVCdWxsZXQpOworICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgVFNESVNDOgorICAgICAgICAgICAgbV90ZXh0
Lm1ha2VTZWN1cmUoYnVsbGV0KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFRT
U1FVQVJFOgorICAgICAgICAgICAgbV90ZXh0Lm1ha2VTZWN1cmUoYmxhY2tTcXVhcmUpOwogICAg
ICAgICB9CiAgICAgfQogCkBAIC0xMDc0LDYgKzEwNzgsMzggQEAgdm9pZCBSZW5kZXJUZXh0Ojpz
ZXRUZXh0KFBhc3NSZWZQdHI8U3RyaW5nSW1wbD4gdGV4dCwgYm9vbCBmb3JjZSkKICAgICAgICAg
YXhPYmplY3RDYWNoZS0+Y29udGVudENoYW5nZWQodGhpcyk7CiB9CiAKK1N0cmluZyBSZW5kZXJU
ZXh0Ojp0ZXh0V2l0aG91dFRyYW5zY29kaW5nKCkgY29uc3QKK3sKKyAgICAvLyBJZiBtX3RleHQg
aXNuJ3QgdHJhbnNjb2RlZCBvciBpcyBzZWN1cmUsIHdlIGNhbiBqdXN0IHJldHVybiB0aGUgbW9k
aWZpZWQgdGV4dC4KKyAgICBpZiAoIW1fbmVlZHNUcmFuc2NvZGluZyB8fCBzdHlsZSgpLT50ZXh0
U2VjdXJpdHkoKSAhPSBUU05PTkUpCisgICAgICAgIHJldHVybiB0ZXh0KCk7CisKKyAgICAvLyBP
dGhlcndpc2UsIHdlIHNob3VsZCB1c2Ugb3JpZ2luYWwgdGV4dC4gSWYgdGV4dC10cmFuc2Zvcm0g
aXMKKyAgICAvLyBzcGVjaWZpZWQsIHdlIHNob3VsZCB0cmFuc2Zvcm0gdGhlIHRleHQgb24gdGhl
IGZseS4KKyAgICBTdHJpbmcgdGV4dCA9IG9yaWdpbmFsVGV4dCgpOworICAgIGlmIChzdHlsZSgp
ICYmIHN0eWxlKCktPnRleHRUcmFuc2Zvcm0oKSAhPSBUVE5PTkUpCisgICAgICAgIHRyYW5zZm9y
bVRleHQodGV4dCk7CisgICAgcmV0dXJuIHRleHQ7Cit9CisKK3ZvaWQgUmVuZGVyVGV4dDo6dHJh
bnNmb3JtVGV4dChTdHJpbmcmIHRleHQpIGNvbnN0Cit7CisgICAgQVNTRVJUKHN0eWxlKCkpOwor
ICAgIHN3aXRjaCAoc3R5bGUoKS0+dGV4dFRyYW5zZm9ybSgpKSB7CisgICAgY2FzZSBUVE5PTkU6
CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQ0FQSVRBTElaRToKKyAgICAgICAgbWFrZUNhcGl0
YWxpemVkKCZ0ZXh0LCBwcmV2aW91c0NoYXJhY3RlcigpKTsKKyAgICAgICAgYnJlYWs7CisgICAg
Y2FzZSBVUFBFUkNBU0U6CisgICAgICAgIHRleHQubWFrZVVwcGVyKCk7CisgICAgICAgIGJyZWFr
OworICAgIGNhc2UgTE9XRVJDQVNFOgorICAgICAgICB0ZXh0Lm1ha2VMb3dlcigpOworICAgICAg
ICBicmVhazsKKyAgICB9Cit9CisKIGludCBSZW5kZXJUZXh0OjpsaW5lSGVpZ2h0KGJvb2wgZmly
c3RMaW5lLCBib29sKSBjb25zdAogewogICAgIC8vIEFsd2F5cyB1c2UgdGhlIGludGVyaW9yIGxp
bmUgaGVpZ2h0IG9mIHRoZSBwYXJlbnQgKGUuZy4sIGlmIG91ciBwYXJlbnQgaXMgYW4gaW5saW5l
IGJsb2NrKS4KZGlmZiAtLWdpdCBhL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRleHQuaCBiL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlclRleHQuaAppbmRleCA5YjE0NjdkLi4wNzVlOTg1IDEwMDY0
NAotLS0gYS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0LmgKKysrIGIvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyVGV4dC5oCkBAIC01MSw2ICs1MSw3IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFs
IHZvaWQgZGVzdHJveSgpOwogCiAgICAgU3RyaW5nSW1wbCogdGV4dCgpIGNvbnN0IHsgcmV0dXJu
IG1fdGV4dC5pbXBsKCk7IH0KKyAgICBTdHJpbmcgdGV4dFdpdGhvdXRUcmFuc2NvZGluZygpIGNv
bnN0OwogCiAgICAgSW5saW5lVGV4dEJveCogY3JlYXRlSW5saW5lVGV4dEJveCgpOwogICAgIHZv
aWQgZGlydHlMaW5lQm94ZXMoYm9vbCBmdWxsTGF5b3V0KTsKQEAgLTEyOCw3ICsxMjksNyBAQCBw
cm90ZWN0ZWQ6CiAgICAgdmlydHVhbCB2b2lkIHN0eWxlRGlkQ2hhbmdlKFN0eWxlRGlmZmVyZW5j
ZSwgY29uc3QgUmVuZGVyU3R5bGUqIG9sZFN0eWxlKTsKIAogICAgIHZpcnR1YWwgdm9pZCBzZXRU
ZXh0SW50ZXJuYWwoUGFzc1JlZlB0cjxTdHJpbmdJbXBsPik7Ci0gICAgdmlydHVhbCBVQ2hhciBw
cmV2aW91c0NoYXJhY3RlcigpOworICAgIHZpcnR1YWwgVUNoYXIgcHJldmlvdXNDaGFyYWN0ZXIo
KSBjb25zdDsKICAgICAKICAgICB2aXJ0dWFsIElubGluZVRleHRCb3gqIGNyZWF0ZVRleHRCb3go
KTsgLy8gU3ViY2xhc3NlZCBieSBTVkcuCiAKQEAgLTE0OCw2ICsxNDksOSBAQCBwcml2YXRlOgog
ICAgIGJvb2wgY29udGFpbnNPbmx5V2hpdGVzcGFjZSh1bnNpZ25lZCBmcm9tLCB1bnNpZ25lZCBs
ZW4pIGNvbnN0OwogICAgIGludCB3aWR0aEZyb21DYWNoZShjb25zdCBGb250JiwgaW50IHN0YXJ0
LCBpbnQgbGVuLCBpbnQgeFBvcywgSGFzaFNldDxjb25zdCBTaW1wbGVGb250RGF0YSo+KiBmYWxs
YmFja0ZvbnRzLCBHbHlwaE92ZXJmbG93KikgY29uc3Q7CiAgICAgYm9vbCBpc0FsbEFTQ0lJKCkg
Y29uc3QgeyByZXR1cm4gbV9pc0FsbEFTQ0lJOyB9CisgICAgdm9pZCB1cGRhdGVOZWVkc1RyYW5z
Y29kaW5nKCk7CisKKyAgICB2b2lkIHRyYW5zZm9ybVRleHQoU3RyaW5nJikgY29uc3Q7CiAKICAg
ICBpbnQgbV9taW5XaWR0aDsgLy8gaGVyZSB0byBtaW5pbWl6ZSBwYWRkaW5nIGluIDY0LWJpdC4K
IApAQCAtMTcyLDYgKzE3Niw3IEBAIHByaXZhdGU6CiAgICAgYm9vbCBtX2NvbnRhaW5zUmV2ZXJz
ZWRUZXh0IDogMTsKICAgICBib29sIG1faXNBbGxBU0NJSSA6IDE7CiAgICAgbXV0YWJsZSBib29s
IG1fa25vd25Ub0hhdmVOb092ZXJmbG93QW5kTm9GYWxsYmFja0ZvbnRzIDogMTsKKyAgICBib29s
IG1fbmVlZHNUcmFuc2NvZGluZyA6IDE7CiB9OwogCiBpbmxpbmUgUmVuZGVyVGV4dCogdG9SZW5k
ZXJUZXh0KFJlbmRlck9iamVjdCogb2JqZWN0KQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyVGV4dENvbnRyb2wuY3BwIGIvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4dENv
bnRyb2wuY3BwCmluZGV4IGExMWIyOWIuLjVlMTkzNjIgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlclRleHRDb250cm9sLmNwcAorKysgYi9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJUZXh0Q29udHJvbC5jcHAKQEAgLTE2NywxNSArMTY3LDcgQEAgdm9pZCBSZW5kZXJUZXh0Q29u
dHJvbDo6dXBkYXRlRnJvbUVsZW1lbnQoKQogCiB2b2lkIFJlbmRlclRleHRDb250cm9sOjpzZXRJ
bm5lclRleHRWYWx1ZShjb25zdCBTdHJpbmcmIGlubmVyVGV4dFZhbHVlKQogewotICAgIFN0cmlu
ZyB2YWx1ZTsKLQotICAgIGlmIChpbm5lclRleHRWYWx1ZS5pc051bGwoKSkKLSAgICAgICAgdmFs
dWUgPSAiIjsKLSAgICBlbHNlIHsKLSAgICAgICAgdmFsdWUgPSBpbm5lclRleHRWYWx1ZTsgCi0g
ICAgICAgIHZhbHVlID0gZG9jdW1lbnQoKS0+ZGlzcGxheVN0cmluZ01vZGlmaWVkQnlFbmNvZGlu
Zyh2YWx1ZSk7Ci0gICAgfQotCisgICAgU3RyaW5nIHZhbHVlID0gaW5uZXJUZXh0VmFsdWU7CiAg
ICAgaWYgKHZhbHVlICE9IHRleHQoKSB8fCAhbV9pbm5lclRleHQtPmhhc0NoaWxkTm9kZXMoKSkg
ewogICAgICAgICBpZiAodmFsdWUgIT0gdGV4dCgpKSB7CiAgICAgICAgICAgICBpZiAoRnJhbWUq
IGZyYW1lID0gZG9jdW1lbnQoKS0+ZnJhbWUoKSkgewpAQCAtMzE4LDkgKzMxMCw2IEBAIFN0cmlu
ZyBSZW5kZXJUZXh0Q29udHJvbDo6ZmluaXNoVGV4dChWZWN0b3I8VUNoYXI+JiByZXN1bHQpIGNv
bnN0CiAgICAgaWYgKHNpemUgJiYgcmVzdWx0W3NpemUgLSAxXSA9PSAnXG4nKQogICAgICAgICBy
ZXN1bHQuc2hyaW5rKC0tc2l6ZSk7CiAKLSAgICAvLyBDb252ZXJ0IGJhY2tzbGFzaCB0byBjdXJy
ZW5jeSBzeW1ib2wuCi0gICAgZG9jdW1lbnQoKS0+ZGlzcGxheUJ1ZmZlck1vZGlmaWVkQnlFbmNv
ZGluZyhyZXN1bHQuZGF0YSgpLCByZXN1bHQuc2l6ZSgpKTsKLSAgICAKICAgICByZXR1cm4gU3Ry
aW5nOjphZG9wdChyZXN1bHQpOwogfQogCmRpZmYgLS1naXQgYS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJUZXh0RnJhZ21lbnQuY3BwIGIvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4dEZyYWdt
ZW50LmNwcAppbmRleCBmMzM5OGEzLi4yMTY0YWUxIDEwMDY0NAotLS0gYS9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJUZXh0RnJhZ21lbnQuY3BwCisrKyBiL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
clRleHRGcmFnbWVudC5jcHAKQEAgLTc2LDcgKzc2LDcgQEAgdm9pZCBSZW5kZXJUZXh0RnJhZ21l
bnQ6OnNldFRleHRJbnRlcm5hbChQYXNzUmVmUHRyPFN0cmluZ0ltcGw+IHRleHQpCiAgICAgfQog
fQogCi1VQ2hhciBSZW5kZXJUZXh0RnJhZ21lbnQ6OnByZXZpb3VzQ2hhcmFjdGVyKCkKK1VDaGFy
IFJlbmRlclRleHRGcmFnbWVudDo6cHJldmlvdXNDaGFyYWN0ZXIoKSBjb25zdAogewogICAgIGlm
IChzdGFydCgpKSB7CiAgICAgICAgIE5vZGUqIGUgPSBub2RlKCk7CmRpZmYgLS1naXQgYS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0RnJhZ21lbnQuaCBiL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlclRleHRGcmFnbWVudC5oCmluZGV4IDFmYTUwOWEuLmUzNTE0MzYgMTAwNjQ0Ci0tLSBhL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlclRleHRGcmFnbWVudC5oCisrKyBiL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlclRleHRGcmFnbWVudC5oCkBAIC01MSw3ICs1MSw3IEBAIHB1YmxpYzoKIAogcHJp
dmF0ZToKICAgICB2aXJ0dWFsIHZvaWQgc2V0VGV4dEludGVybmFsKFBhc3NSZWZQdHI8U3RyaW5n
SW1wbD4pOwotICAgIHZpcnR1YWwgVUNoYXIgcHJldmlvdXNDaGFyYWN0ZXIoKTsKKyAgICB2aXJ0
dWFsIFVDaGFyIHByZXZpb3VzQ2hhcmFjdGVyKCkgY29uc3Q7CiAKICAgICB1bnNpZ25lZCBtX3N0
YXJ0OwogICAgIHVuc2lnbmVkIG1fZW5kOwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>53807</attachid>
            <date>2010-04-20 06:27:25 -0700</date>
            <delta_ts>2010-04-20 14:12:59 -0700</delta_ts>
            <desc>Patch v3</desc>
            <filename>bug-36419-20100420062722.patch</filename>
            <type>text/plain</type>
            <size>27276</size>
            <attacher name="Shinichiro Hamaji">hamaji</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxv
ZwppbmRleCA1MDI1MzRlLi42OWVjOGU4IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9DaGFuZ2VM
b2cKKysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTYgQEAKKzIwMTAtMDQt
MjAgIFNoaW5pY2hpcm8gSGFtYWppICA8aGFtYWppQGNocm9taXVtLm9yZz4KKworICAgICAgICBS
ZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBBIGJhY2tzbGFzaCBpbiBFVUMt
SlAgYmVjb21lcyB0byBhIHllbiBzaWduIHdoZW4gaXQgaXMgY29waWVkCisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0zNjQxOQorCisgICAgICAgICogZWRp
dGluZy9leGVjQ29tbWFuZC90cmFuc3Bvc2UtYmFja3NsYXNoLXdpdGgtZXVjLWV4cGVjdGVkLnR4
dDogQWRkZWQuCisgICAgICAgICogZWRpdGluZy9leGVjQ29tbWFuZC90cmFuc3Bvc2UtYmFja3Ns
YXNoLXdpdGgtZXVjLmh0bWw6IEFkZGVkLgorICAgICAgICAqIGVkaXRpbmcvcGFzdGVib2FyZC9j
b3B5LWJhY2tzbGFzaC13aXRoLWV1Yy1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAqIGVk
aXRpbmcvcGFzdGVib2FyZC9jb3B5LWJhY2tzbGFzaC13aXRoLWV1Yy5odG1sOiBBZGRlZC4KKyAg
ICAgICAgKiBlZGl0aW5nL3Bhc3RlYm9hcmQvcmVzb3VyY2VzL2NvcHktYmFja3NsYXNoLWV1Yy5o
dG1sOiBBZGRlZC4KKwogMjAxMC0wNC0xOSAgSmFtZXMgUm9iaW5zb24gIDxqYW1lc3JAY2hyb21p
dW0ub3JnPgogCiAgICAgICAgIFVucmV2aWV3ZWQuIFVwZGF0ZSBjaHJvbWl1bSB0ZXN0IGV4cGVj
dGF0aW9ucy4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2VkaXRpbmcvZXhlY0NvbW1hbmQvdHJh
bnNwb3NlLWJhY2tzbGFzaC13aXRoLWV1Yy1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy9lZGl0
aW5nL2V4ZWNDb21tYW5kL3RyYW5zcG9zZS1iYWNrc2xhc2gtd2l0aC1ldWMtZXhwZWN0ZWQudHh0
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU3ODY2ZjcKLS0tIC9kZXYvbnVs
bAorKysgYi9MYXlvdXRUZXN0cy9lZGl0aW5nL2V4ZWNDb21tYW5kL3RyYW5zcG9zZS1iYWNrc2xh
c2gtd2l0aC1ldWMtZXhwZWN0ZWQudHh0CkBAIC0wLDAgKzEsMiBAQAorXFwKK1BBU1MKZGlmZiAt
LWdpdCBhL0xheW91dFRlc3RzL2VkaXRpbmcvZXhlY0NvbW1hbmQvdHJhbnNwb3NlLWJhY2tzbGFz
aC13aXRoLWV1Yy5odG1sIGIvTGF5b3V0VGVzdHMvZWRpdGluZy9leGVjQ29tbWFuZC90cmFuc3Bv
c2UtYmFja3NsYXNoLXdpdGgtZXVjLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMC4uYjJhNjQyMQotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2VkaXRpbmcvZXhl
Y0NvbW1hbmQvdHJhbnNwb3NlLWJhY2tzbGFzaC13aXRoLWV1Yy5odG1sCkBAIC0wLDAgKzEsMzMg
QEAKKzwhRE9DVFlQRSBodG1sPgorPGh0bWw+CisKKzxoZWFkPgorPG1ldGEgY2hhcnNldD0iRVVD
LUpQIj4KKzxzY3JpcHQgY2hhcnNldD0iVVRGLTgiPgorCitpZiAod2luZG93LmxheW91dFRlc3RD
b250cm9sbGVyKQorICAgIGxheW91dFRlc3RDb250cm9sbGVyLmR1bXBBc1RleHQoKTsKKworZnVu
Y3Rpb24gdGVzdCgpCit7CisgICAgdmFyIGJhY2tzbGFzaERpdkVsZW1lbnQgPSBkb2N1bWVudC5n
ZXRFbGVtZW50QnlJZCgiYmFja3NsYXNoIik7CisgICAgZ2V0U2VsZWN0aW9uKCkuZXh0ZW5kKGJh
Y2tzbGFzaERpdkVsZW1lbnQsIDEpOworICAgIGRvY3VtZW50LmV4ZWNDb21tYW5kKCJUcmFuc3Bv
c2UiKTsKKworICAgIHZhciBiYWNrc2xhc2ggPSAiXFwiLmNoYXJDb2RlQXQoMCk7CisgICAgaWYg
KGJhY2tzbGFzaCA9PSBiYWNrc2xhc2hEaXZFbGVtZW50LmlubmVySFRNTC5jaGFyQ29kZUF0KDAp
ICYmIGJhY2tzbGFzaCA9PSBiYWNrc2xhc2hEaXZFbGVtZW50LmlubmVySFRNTC5jaGFyQ29kZUF0
KDEpKQorICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgicmVzdWx0IikuaW5uZXJIVE1M
ID0gIlBBU1MiOworfQorCis8L3NjcmlwdD4KKzwvaGVhZD4KKworPGJvZHkgb25sb2FkPSJ0ZXN0
KCkiPgorCis8ZGl2IGlkPSJiYWNrc2xhc2giIGNvbnRlbnRFZGl0YWJsZT0idHJ1ZSI+XFw8L2Rp
dj4KKworPGRpdiBpZD0icmVzdWx0Ij5GQUlMPC9kaXY+CisKKzwvYm9keT4KKworPC9odG1sPgpk
aWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvZWRpdGluZy9wYXN0ZWJvYXJkL2NvcHktYmFja3NsYXNo
LXdpdGgtZXVjLWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL2VkaXRpbmcvcGFzdGVib2FyZC9j
b3B5LWJhY2tzbGFzaC13aXRoLWV1Yy1leHBlY3RlZC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMC4uOGMwMWM5NAotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2Vk
aXRpbmcvcGFzdGVib2FyZC9jb3B5LWJhY2tzbGFzaC13aXRoLWV1Yy1leHBlY3RlZC50eHQKQEAg
LTAsMCArMSw0MCBAQAorCitPcmlnaW5hbCB0ZXh0cyB3aGljaCB3aWxsIGJlIGNvcGllZAorCitc
IGZyb20gVVRGOCBwYWdlCitcIEZST00gVVRGOCBQQUdFIChUUkFOU0ZPUk1FRCkKK+KAouKAouKA
ouKAouKAouKAouKAouKAouKAouKAouKAouKAouKAouKAouKAouKAouKAouKAouKAouKAouKAouKA
ouKAouKAouKAogorCitUZXh0cyBpbiB0aGUgRVVDIGZyYW1lIHdpbGwgYmUgcGFzdGVkIGhlcmUK
KworZnJvbSBFVUMgZGl2IHRvIFVURjggdGV4dC1jb250cm9sOiAKK2Zyb20gRVVDIGRpdiB0byBV
VEY4IGNvbnRlbnQtZWRpdGFibGU6IFwgZnJvbSBFVUMgcGFnZQorCitmcm9tIEVVQyB0cmFuc2Zv
cm0gdG8gVVRGOCB0ZXh0LWNvbnRyb2w6IAorZnJvbSBFVUMgdHJhbnNmb3JtIHRvIFVURjggY29u
dGVudC1lZGl0YWJsZTogXCBGUk9NIEVVQyBQQUdFIChUUkFOU0ZPUk1FRCkKKworZnJvbSBFVUMg
c2VjdXJlIHRvIFVURjggdGV4dC1jb250cm9sOiAKK2Zyb20gRVVDIHNlY3VyZSB0byBVVEY4IGNv
bnRlbnQtZWRpdGFibGU6IOKAouKAouKAouKAouKAouKAouKAouKAouKAouKAouKAouKAouKAouKA
ouKAouKAouKAouKAouKAouKAouKAouKAouKAouKAogorCitmcm9tIEVVQyBjb250cm9sIHRvIFVU
RjggdGV4dC1jb250cm9sOiAKK2Zyb20gRVVDIGNvbnRyb2wgdG8gVVRGOCBjb250ZW50LWVkaXRh
YmxlOiBcIGZyb20gRVVDIHRleHQgY29udHJvbAorCitSZXN1bHRzCisKK2Zyb20gRVVDIGRpdiB0
byBVVEY4IHRleHQtY29udHJvbDogUEFTUworZnJvbSBFVUMgZGl2IHRvIFVURjggY29udGVudC1l
ZGl0YWJsZTogUEFTUworZnJvbSBFVUMgdHJhbnNmb3JtIHRvIFVURjggdGV4dC1jb250cm9sOiBQ
QVNTCitmcm9tIEVVQyB0cmFuc2Zvcm0gdG8gVVRGOCBjb250ZW50LWVkaXRhYmxlOiBQQVNTCitm
cm9tIEVVQyBzZWN1cmUgdG8gVVRGOCB0ZXh0LWNvbnRyb2w6IFBBU1MKK2Zyb20gRVVDIHNlY3Vy
ZSB0byBVVEY4IGNvbnRlbnQtZWRpdGFibGU6IFBBU1MKK2Zyb20gRVVDIGNvbnRyb2wgdG8gVVRG
OCB0ZXh0LWNvbnRyb2w6IFBBU1MKK2Zyb20gRVVDIGNvbnRyb2wgdG8gVVRGOCBjb250ZW50LWVk
aXRhYmxlOiBQQVNTCitmcm9tIFVURjggZGl2IHRvIEVVQyB0ZXh0LWNvbnRyb2w6IFBBU1MKK2Zy
b20gVVRGOCBkaXYgdG8gRVVDIGNvbnRlbnQtZWRpdGFibGU6IFBBU1MKK2Zyb20gVVRGOCB0cmFu
c2Zvcm0gdG8gRVVDIHRleHQtY29udHJvbDogUEFTUworZnJvbSBVVEY4IHRyYW5zZm9ybSB0byBF
VUMgY29udGVudC1lZGl0YWJsZTogUEFTUworZnJvbSBVVEY4IHNlY3VyZSB0byBFVUMgdGV4dC1j
b250cm9sOiBQQVNTCitmcm9tIFVURjggc2VjdXJlIHRvIEVVQyBjb250ZW50LWVkaXRhYmxlOiBQ
QVNTCitmcm9tIFVURjggY29udHJvbCB0byBFVUMgdGV4dC1jb250cm9sOiBQQVNTCitmcm9tIFVU
RjggY29udHJvbCB0byBFVUMgY29udGVudC1lZGl0YWJsZTogUEFTUworCmRpZmYgLS1naXQgYS9M
YXlvdXRUZXN0cy9lZGl0aW5nL3Bhc3RlYm9hcmQvY29weS1iYWNrc2xhc2gtd2l0aC1ldWMuaHRt
bCBiL0xheW91dFRlc3RzL2VkaXRpbmcvcGFzdGVib2FyZC9jb3B5LWJhY2tzbGFzaC13aXRoLWV1
Yy5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAwNTE0NjcKLS0tIC9k
ZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9lZGl0aW5nL3Bhc3RlYm9hcmQvY29weS1iYWNrc2xh
c2gtd2l0aC1ldWMuaHRtbApAQCAtMCwwICsxLDEwNiBAQAorPCFET0NUWVBFIGh0bWw+Cis8aHRt
bD4KKworPGhlYWQ+Cis8bWV0YSBjaGFyc2V0PSJVVEYtOCI+Cis8c2NyaXB0PgorCitpZiAod2lu
ZG93LmxheW91dFRlc3RDb250cm9sbGVyKQorICAgIGxheW91dFRlc3RDb250cm9sbGVyLmR1bXBB
c1RleHQoKTsKKworLy8gU2VsZWN0IGFuIGVsZW1lbnQgYW4gcmV0dXJuIGl0cyB2YWx1ZS4KK2Z1
bmN0aW9uIHNlbGVjdEVsZW1lbnQoZG9jLCBlbGVtZW50KQoreworICAgIGlmIChlbGVtZW50LnRh
Z05hbWUudG9Mb3dlckNhc2UoKSA9PSAnaW5wdXQnKSB7CisgICAgICAgIGVsZW1lbnQuZm9jdXMo
KTsKKyAgICAgICAgZWxlbWVudC5zZWxlY3QoKTsKKyAgICAgICAgcmV0dXJuIGVsZW1lbnQudmFs
dWU7CisgICAgfSBlbHNlIHsKKyAgICAgICAgZG9jLmdldFNlbGVjdGlvbigpLnNlbGVjdEFsbENo
aWxkcmVuKGVsZW1lbnQpOworICAgICAgICByZXR1cm4gZWxlbWVudC5pbm5lclRleHQ7CisgICAg
fQorfQorCitmdW5jdGlvbiB0ZXN0Q29weUFuZFBhc3RlVGV4dHMoZnJvbURvY3VtZW50LCBmcm9t
TmFtZSwgdG9Eb2N1bWVudCwgdG9OYW1lKQoreworICAgIHZhciByZXN1bHRzRWxlbWVudCA9IGRv
Y3VtZW50LmdldEVsZW1lbnRCeUlkKCJyZXN1bHRzIik7CisKKyAgICB2YXIgcGFzdGVib2FyZEVs
ZW1lbnQgPSB0b0RvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJwYXN0ZWJvYXJkIik7CisKKyAgICB2
YXIgZnJvbUVsZW1lbnROYW1lcyA9IFsiZGl2IiwgInRyYW5zZm9ybSIsICJzZWN1cmUiLCAiY29u
dHJvbCJdOworICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZnJvbUVsZW1lbnROYW1lcy5sZW5ndGg7
IGkrKykgeworICAgICAgICB2YXIgZnJvbUVsZW1lbnROYW1lID0gZnJvbUVsZW1lbnROYW1lc1tp
XTsKKyAgICAgICAgdmFyIGZyb21FbGVtZW50ID0gZnJvbURvY3VtZW50LmdldEVsZW1lbnRCeUlk
KGZyb21FbGVtZW50TmFtZSk7CisgICAgICAgIHNlbGVjdEVsZW1lbnQoZnJvbURvY3VtZW50LCBm
cm9tRWxlbWVudCk7CisgICAgICAgIGZyb21Eb2N1bWVudC5leGVjQ29tbWFuZCgiQ29weSIpOwor
CisgICAgICAgIHZhciB0b0VsZW1lbnROYW1lU3VmZml4ZXMgPSBbInRleHQtY29udHJvbCIsICJj
b250ZW50LWVkaXRhYmxlIl07CisgICAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgdG9FbGVtZW50
TmFtZVN1ZmZpeGVzLmxlbmd0aDsgaisrKSB7CisgICAgICAgICAgICB2YXIgdG9FbGVtZW50TmFt
ZVN1ZmZpeCA9IHRvRWxlbWVudE5hbWVTdWZmaXhlc1tqXTsKKworICAgICAgICAgICAgdmFyIHRl
c3ROYW1lID0gImZyb20gIiArIGZyb21OYW1lLnRvVXBwZXJDYXNlKCkgKyAiICIgKyBmcm9tRWxl
bWVudE5hbWUgKyAiIHRvICIgKyB0b05hbWUudG9VcHBlckNhc2UoKSArICIgIiArIHRvRWxlbWVu
dE5hbWVTdWZmaXggKyAiOiAiOworICAgICAgICAgICAgdmFyIHRvRGVzY3JpcHRpb25UZXh0ID0g
dG9Eb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSh0ZXN0TmFtZSk7CisgICAgICAgICAgICBwYXN0ZWJv
YXJkRWxlbWVudC5hcHBlbmRDaGlsZCh0b0Rlc2NyaXB0aW9uVGV4dCk7CisgICAgICAgICAgICB2
YXIgdG9FbGVtZW50ID0gbnVsbDsKKyAgICAgICAgICAgIGlmICh0b0VsZW1lbnROYW1lU3VmZml4
ID09ICJ0ZXh0LWNvbnRyb2wiKSB7CisgICAgICAgICAgICAgICAgdG9FbGVtZW50ID0gdG9Eb2N1
bWVudC5jcmVhdGVFbGVtZW50KCJpbnB1dCIpOworICAgICAgICAgICAgICAgIHRvRWxlbWVudC52
YWx1ZSA9ICJGQUlMIjsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgdG9F
bGVtZW50ID0gdG9Eb2N1bWVudC5jcmVhdGVFbGVtZW50KCJzcGFuIik7CisgICAgICAgICAgICAg
ICAgdG9FbGVtZW50LmNvbnRlbnRFZGl0YWJsZSA9ICJ0cnVlIjsKKyAgICAgICAgICAgICAgICB0
b0VsZW1lbnQuaW5uZXJIVE1MID0gIkZBSUwiOworICAgICAgICAgICAgfQorICAgICAgICAgICAg
cGFzdGVib2FyZEVsZW1lbnQuYXBwZW5kQ2hpbGQodG9FbGVtZW50KTsKKyAgICAgICAgICAgIHBh
c3RlYm9hcmRFbGVtZW50LmFwcGVuZENoaWxkKHRvRG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiYnIi
KSk7CisKKyAgICAgICAgICAgIHNlbGVjdEVsZW1lbnQodG9Eb2N1bWVudCwgdG9FbGVtZW50KTsK
KyAgICAgICAgICAgIHRvRG9jdW1lbnQuZXhlY0NvbW1hbmQoIlBhc3RlIik7CisgICAgICAgICAg
ICB2YXIgYWN0dWFsVGV4dCA9IHNlbGVjdEVsZW1lbnQodG9Eb2N1bWVudCwgdG9FbGVtZW50KTsK
KworICAgICAgICAgICAgdmFyIHJlc3VsdCA9ICJQQVNTIjsKKyAgICAgICAgICAgIHZhciBleHBl
Y3RlZExlYWRpbmdTdHJpbmcgPSAiXFxcXCBmcm9tICI7CisgICAgICAgICAgICBpZiAoZnJvbUVs
ZW1lbnROYW1lID09ICJzZWN1cmUiKQorICAgICAgICAgICAgICAgIGV4cGVjdGVkTGVhZGluZ1N0
cmluZyA9ICLigKLigKLigKLigKLigKLigKLigKIiOworICAgICAgICAgICAgZWxzZSBpZiAoZnJv
bUVsZW1lbnROYW1lID09ICJ0cmFuc2Zvcm0iKQorICAgICAgICAgICAgICAgIGV4cGVjdGVkTGVh
ZGluZ1N0cmluZyA9IGV4cGVjdGVkTGVhZGluZ1N0cmluZy50b1VwcGVyQ2FzZSgpOworICAgICAg
ICAgICAgaWYgKGFjdHVhbFRleHQuc2VhcmNoKGV4cGVjdGVkTGVhZGluZ1N0cmluZykgIT0gMCkK
KyAgICAgICAgICAgICAgICByZXN1bHQgPSAiRkFJTDogdGhlIGFjdHVhbCB0ZXh0IHdhcyAnIiAr
IGFjdHVhbFRleHQgKyAiJyAoY2hhciBjb2RlIG9mIHRoZSBmaXJzdCBjaGFyYWN0ZXIgd2FzICIg
KyBhY3R1YWxUZXh0LmNoYXJDb2RlQXQoMCkgKyAiKSI7CisKKyAgICAgICAgICAgIHJlc3VsdHNF
bGVtZW50LmlubmVySFRNTCArPSB0ZXN0TmFtZSArIHJlc3VsdCArICI8YnI+IjsKKyAgICAgICAg
fQorICAgIH0KK30KKworZnVuY3Rpb24gdGVzdCgpCit7CisgICAgdGVzdENvcHlBbmRQYXN0ZVRl
eHRzKGZyYW1lc1swXS5kb2N1bWVudCwgImV1YyIsIGRvY3VtZW50LCAidXRmOCIpOworICAgIHRl
c3RDb3B5QW5kUGFzdGVUZXh0cyhkb2N1bWVudCwgInV0ZjgiLCBmcmFtZXNbMF0uZG9jdW1lbnQs
ICJldWMiKTsKK30KKworPC9zY3JpcHQ+Cis8L2hlYWQ+CisKKzxib2R5IG9ubG9hZD0idGVzdCgp
Ij4KKworPGRpdj4KKzxpZnJhbWUgc3JjPSJyZXNvdXJjZXMvY29weS1iYWNrc2xhc2gtZXVjLmh0
bWwiIHdpZHRoPSI2MDAiIGhlaWdodD0iMzAwIj48L2lmcmFtZT4KKzwvZGl2PgorCis8aDI+T3Jp
Z2luYWwgdGV4dHMgd2hpY2ggd2lsbCBiZSBjb3BpZWQ8L2gyPgorPGRpdiBpZD0iZGl2Ij5cIGZy
b20gVVRGOCBwYWdlPC9kaXY+Cis8ZGl2IGlkPSJ0cmFuc2Zvcm0iIHN0eWxlPSJ0ZXh0LXRyYW5z
Zm9ybTp1cHBlcmNhc2UiPlwgZnJvbSBVVEY4IHBhZ2UgKHRyYW5zZm9ybWVkKTwvZGl2PgorPGRp
diBpZD0ic2VjdXJlIiBzdHlsZT0iLXdlYmtpdC10ZXh0LXNlY3VyaXR5OmRpc2MiPlwgZnJvbSBV
VEY4IHBhZ2UgKHNlY3VyZSk8L2Rpdj4KKzxpbnB1dCBpZD0iY29udHJvbCIgdmFsdWU9IlwgZnJv
bSBVVEY4IHRleHQgY29udHJvbCI+CisKKzxoMj5UZXh0cyBpbiB0aGUgRVVDIGZyYW1lIHdpbGwg
YmUgcGFzdGVkIGhlcmU8L2gyPgorPGRpdiBpZD0icGFzdGVib2FyZCI+PC9kaXY+CisKKzxicj4K
KworPGgyPlJlc3VsdHM8L2gyPgorPHAgaWQ9InJlc3VsdHMiPgorPC9wPgorCis8L2JvZHk+CisK
KzwvaHRtbD4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2VkaXRpbmcvcGFzdGVib2FyZC9yZXNv
dXJjZXMvY29weS1iYWNrc2xhc2gtZXVjLmh0bWwgYi9MYXlvdXRUZXN0cy9lZGl0aW5nL3Bhc3Rl
Ym9hcmQvcmVzb3VyY2VzL2NvcHktYmFja3NsYXNoLWV1Yy5odG1sCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAuLjVhOWY0MDIKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0
cy9lZGl0aW5nL3Bhc3RlYm9hcmQvcmVzb3VyY2VzL2NvcHktYmFja3NsYXNoLWV1Yy5odG1sCkBA
IC0wLDAgKzEsMjEgQEAKKzwhRE9DVFlQRSBodG1sPgorPGh0bWw+CisKKzxoZWFkPgorPG1ldGEg
Y2hhcnNldD0iRVVDLUpQIj4KKzwvaGVhZD4KKworPGJvZHk+CisKKzxoMj5PcmlnaW5hbCB0ZXh0
cyB3aGljaCB3aWxsIGJlIGNvcGllZDwvaDI+Cis8ZGl2IGlkPSJkaXYiPlwgZnJvbSBFVUMgcGFn
ZTwvZGl2PgorPGRpdiBpZD0idHJhbnNmb3JtIiBzdHlsZT0idGV4dC10cmFuc2Zvcm06dXBwZXJj
YXNlIj5cIGZyb20gRVVDIHBhZ2UgKHRyYW5zZm9ybWVkKTwvZGl2PgorPGRpdiBpZD0ic2VjdXJl
IiBzdHlsZT0iLXdlYmtpdC10ZXh0LXNlY3VyaXR5OmRpc2MiPlwgZnJvbSBFVUMgcGFnZSAoc2Vj
dXJlKTwvZGl2PgorPGlucHV0IGlkPSJjb250cm9sIiB2YWx1ZT0iXCBmcm9tIEVVQyB0ZXh0IGNv
bnRyb2wiPgorCis8aDI+VGV4dHMgaW4gdGhlIFVURjggZnJhbWUgd2lsbCBiZSBwYXN0ZWQgaGVy
ZTwvaDI+Cis8ZGl2IGlkPSJwYXN0ZWJvYXJkIj48L2Rpdj4KKworPC9ib2R5PgorCis8L2h0bWw+
CmRpZmYgLS1naXQgYS9XZWJDb3JlL0NoYW5nZUxvZyBiL1dlYkNvcmUvQ2hhbmdlTG9nCmluZGV4
IDA5ZmFkOGMuLmUxMjc5ZTkgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1dl
YkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNDIgQEAKKzIwMTAtMDQtMjAgIFNoaW5pY2hpcm8g
SGFtYWppICA8aGFtYWppQGNocm9taXVtLm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JP
RFkgKE9PUFMhKS4KKworICAgICAgICBBIGJhY2tzbGFzaCBpbiBFVUMtSlAgYmVjb21lcyB0byBh
IHllbiBzaWduIHdoZW4gaXQgaXMgY29waWVkCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0zNjQxOQorCisgICAgICAgIFRlc3RzOiBlZGl0aW5nL2V4ZWND
b21tYW5kL3RyYW5zcG9zZS1iYWNrc2xhc2gtd2l0aC1ldWMuaHRtbAorICAgICAgICAgICAgICAg
ZWRpdGluZy9wYXN0ZWJvYXJkL2NvcHktYmFja3NsYXNoLXdpdGgtZXVjLmh0bWwKKworICAgICAg
ICAqIGVkaXRpbmcvRWRpdG9yLmNwcDogUmVtb3ZlIGFuIHVubmVjZXNzYXJ5IGRpc3BsYXlTdHJp
bmdNb2RpZmllZEJ5RW5jb2RpbmcgY2FsbHMuCisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6OmFk
ZFRvS2lsbFJpbmcpOgorICAgICAgICAqIGVkaXRpbmcvVGV4dEl0ZXJhdG9yLmNwcDogVGV4dEl0
ZXJhdG9yIGNhbiB1c2UgUmVuZGVyVGV4dDo6dGV4dFdpdGhvdXRUcmFuc2NvZGluZyBhbmQgbm93
IHBsYWluVGV4dCgpIHVzZXMgdGhpcyB2ZXJzaW9uCisgICAgICAgIChXZWJDb3JlOjpUZXh0SXRl
cmF0b3I6OlRleHRJdGVyYXRvcik6CisgICAgICAgIChXZWJDb3JlOjpUZXh0SXRlcmF0b3I6Omlu
aXQpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dEl0ZXJhdG9yOjplbWl0VGV4dCk6CisgICAgICAg
IChXZWJDb3JlOjpwbGFpblRleHRUb01hbGxvY0FsbG9jYXRlZEJ1ZmZlcik6CisgICAgICAgICog
ZWRpdGluZy9UZXh0SXRlcmF0b3IuaDoKKyAgICAgICAgKFdlYkNvcmU6Oik6CisgICAgICAgICog
cGxhdGZvcm0vbWFjL1Bhc3RlYm9hcmRNYWMubW06IFJlbW92ZSBhbiB1bm5lY2Vzc2FyeSBkaXNw
bGF5U3RyaW5nTW9kaWZpZWRCeUVuY29kaW5nIGNhbGwuCisgICAgICAgIChXZWJDb3JlOjpQYXN0
ZWJvYXJkOjp3cml0ZVNlbGVjdGlvbik6CisgICAgICAgICogcGxhdGZvcm0vdGV4dC9UZXh0RW5j
b2RpbmcuaDogTWFrZSBiYWNrc2xhc2hBc0N1cnJlbmN5U3ltYm9sIHB1YmxpYy4KKyAgICAgICAg
KiByZW5kZXJpbmcvUmVuZGVyVGV4dC5jcHA6IEFkZCBSZW5kZXJUZXh0Ojp0ZXh0V2l0aG91dFRy
YW5zY29kaW5nCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUZXh0OjpSZW5kZXJUZXh0KToKKyAg
ICAgICAgKFdlYkNvcmU6OlJlbmRlclRleHQ6OnVwZGF0ZU5lZWRzVHJhbnNjb2RpbmcpOgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyVGV4dDo6c3R5bGVEaWRDaGFuZ2UpOgorICAgICAgICAoV2Vi
Q29yZTo6aXNJbmxpbmVGbG93T3JFbXB0eVRleHQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVy
VGV4dDo6cHJldmlvdXNDaGFyYWN0ZXIpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGV4dDo6
c2V0VGV4dEludGVybmFsKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRleHQ6OnRleHRXaXRo
b3V0VHJhbnNjb2RpbmcpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGV4dDo6dHJhbnNmb3Jt
VGV4dCk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlclRleHQuaDoKKyAgICAgICAgKiByZW5k
ZXJpbmcvUmVuZGVyVGV4dENvbnRyb2wuY3BwOiBSZW1vdmUgYW4gdW5uZWNlc3NhcnkgZGlzcGxh
eVN0cmluZ01vZGlmaWVkQnlFbmNvZGluZyBjYWxsLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVy
VGV4dENvbnRyb2w6OnNldElubmVyVGV4dFZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRl
clRleHRDb250cm9sOjpmaW5pc2hUZXh0KToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyVGV4
dEZyYWdtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRleHRGcmFnbWVudDo6cHJl
dmlvdXNDaGFyYWN0ZXIpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJUZXh0RnJhZ21lbnQu
aDoKKwogMjAxMC0wNC0xOSAgU2ltb24gRnJhc2VyICA8c2ltb24uZnJhc2VyQGFwcGxlLmNvbT4K
IAogICAgICAgICBSZXZpZXdlZCBieSBHZW9mZiBHYXJlbi4KZGlmZiAtLWdpdCBhL1dlYkNvcmUv
ZWRpdGluZy9FZGl0b3IuY3BwIGIvV2ViQ29yZS9lZGl0aW5nL0VkaXRvci5jcHAKaW5kZXggMTA2
MWRkMi4uZTE3MWFjMSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9lZGl0aW5nL0VkaXRvci5jcHAKKysr
IGIvV2ViQ29yZS9lZGl0aW5nL0VkaXRvci5jcHAKQEAgLTI3MDMsNyArMjcwMyw3IEBAIHZvaWQg
RWRpdG9yOjphZGRUb0tpbGxSaW5nKFJhbmdlKiByYW5nZSwgYm9vbCBwcmVwZW5kKQogICAgIGlm
IChtX3Nob3VsZFN0YXJ0TmV3S2lsbFJpbmdTZXF1ZW5jZSkKICAgICAgICAgc3RhcnROZXdLaWxs
UmluZ1NlcXVlbmNlKCk7CiAKLSAgICBTdHJpbmcgdGV4dCA9IG1fZnJhbWUtPmRpc3BsYXlTdHJp
bmdNb2RpZmllZEJ5RW5jb2RpbmcocGxhaW5UZXh0KHJhbmdlKSk7CisgICAgU3RyaW5nIHRleHQg
PSBwbGFpblRleHQocmFuZ2UpOwogICAgIGlmIChwcmVwZW5kKQogICAgICAgICBwcmVwZW5kVG9L
aWxsUmluZyh0ZXh0KTsKICAgICBlbHNlCmRpZmYgLS1naXQgYS9XZWJDb3JlL2VkaXRpbmcvVGV4
dEl0ZXJhdG9yLmNwcCBiL1dlYkNvcmUvZWRpdGluZy9UZXh0SXRlcmF0b3IuY3BwCmluZGV4IGEz
ODZjNmUuLjljY2Y2YmYgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvZWRpdGluZy9UZXh0SXRlcmF0b3Iu
Y3BwCisrKyBiL1dlYkNvcmUvZWRpdGluZy9UZXh0SXRlcmF0b3IuY3BwCkBAIC0yNTYsMTAgKzI1
NiwxMSBAQCBUZXh0SXRlcmF0b3I6OlRleHRJdGVyYXRvcigpCiAgICAgLCBtX2xhc3RDaGFyYWN0
ZXIoMCkKICAgICAsIG1fZW1pdENoYXJhY3RlcnNCZXR3ZWVuQWxsVmlzaWJsZVBvc2l0aW9ucyhm
YWxzZSkKICAgICAsIG1fZW50ZXJUZXh0Q29udHJvbHMoZmFsc2UpCisgICAgLCBtX2VtaXRzVGV4
dHNXaXRob3V0VHJhbnNjb2RpbmcoZmFsc2UpCiB7CiB9CiAKLVRleHRJdGVyYXRvcjo6VGV4dEl0
ZXJhdG9yKGNvbnN0IFJhbmdlKiByLCBib29sIGVtaXRDaGFyYWN0ZXJzQmV0d2VlbkFsbFZpc2li
bGVQb3NpdGlvbnMsIGJvb2wgZW50ZXJUZXh0Q29udHJvbHMpIAorVGV4dEl0ZXJhdG9yOjpUZXh0
SXRlcmF0b3IoY29uc3QgUmFuZ2UqIHIsIGJvb2wgZW1pdENoYXJhY3RlcnNCZXR3ZWVuQWxsVmlz
aWJsZVBvc2l0aW9ucywgYm9vbCBlbnRlclRleHRDb250cm9scykKICAgICA6IG1fc3RhcnRDb250
YWluZXIoMCkgCiAgICAgLCBtX3N0YXJ0T2Zmc2V0KDApCiAgICAgLCBtX2VuZENvbnRhaW5lcigw
KQpAQCAtMjY5LDYgKzI3MCwyNyBAQCBUZXh0SXRlcmF0b3I6OlRleHRJdGVyYXRvcihjb25zdCBS
YW5nZSogciwgYm9vbCBlbWl0Q2hhcmFjdGVyc0JldHdlZW5BbGxWaXNpYmxlUAogICAgICwgbV90
ZXh0TGVuZ3RoKDApCiAgICAgLCBtX2VtaXRDaGFyYWN0ZXJzQmV0d2VlbkFsbFZpc2libGVQb3Np
dGlvbnMoZW1pdENoYXJhY3RlcnNCZXR3ZWVuQWxsVmlzaWJsZVBvc2l0aW9ucykKICAgICAsIG1f
ZW50ZXJUZXh0Q29udHJvbHMoZW50ZXJUZXh0Q29udHJvbHMpCisgICAgLCBtX2VtaXRzVGV4dHNX
aXRob3V0VHJhbnNjb2RpbmcoZmFsc2UpCit7CisgICAgaW5pdChyKTsKK30KKworVGV4dEl0ZXJh
dG9yOjpUZXh0SXRlcmF0b3IoY29uc3QgUmFuZ2UqIHIsIFRleHRJdGVyYXRvckJlaGF2aW9yIGJl
aGF2aW9yKQorICAgIDogbV9zdGFydENvbnRhaW5lcigwKQorICAgICwgbV9zdGFydE9mZnNldCgw
KQorICAgICwgbV9lbmRDb250YWluZXIoMCkKKyAgICAsIG1fZW5kT2Zmc2V0KDApCisgICAgLCBt
X3Bvc2l0aW9uTm9kZSgwKQorICAgICwgbV90ZXh0Q2hhcmFjdGVycygwKQorICAgICwgbV90ZXh0
TGVuZ3RoKDApCisgICAgLCBtX2VtaXRDaGFyYWN0ZXJzQmV0d2VlbkFsbFZpc2libGVQb3NpdGlv
bnMoYmVoYXZpb3IgJiBUZXh0SXRlcmF0b3JCZWhhdmlvckVtaXRDaGFyYWN0ZXJzQmV0d2VlbkFs
bFZpc2libGVQb3NpdGlvbnMpCisgICAgLCBtX2VudGVyVGV4dENvbnRyb2xzKGJlaGF2aW9yICYg
VGV4dEl0ZXJhdG9yQmVoYXZpb3JFbnRlclRleHRDb250cm9scykKKyAgICAsIG1fZW1pdHNUZXh0
c1dpdGhvdXRUcmFuc2NvZGluZyhiZWhhdmlvciAmIFRleHRJdGVyYXRvckJlaGF2aW9yRW1pdHNU
ZXh0c1dpdGhvdXRUcmFuc2NvZGluZykKK3sKKyAgICBpbml0KHIpOworfQorCit2b2lkIFRleHRJ
dGVyYXRvcjo6aW5pdChjb25zdCBSYW5nZSogcikKIHsKICAgICBpZiAoIXIpCiAgICAgICAgIHJl
dHVybjsKQEAgLTg4OSw3ICs5MTEsMTEgQEAgdm9pZCBUZXh0SXRlcmF0b3I6OmVtaXRDaGFyYWN0
ZXIoVUNoYXIgYywgTm9kZSogdGV4dE5vZGUsIE5vZGUqIG9mZnNldEJhc2VOb2RlLAogdm9pZCBU
ZXh0SXRlcmF0b3I6OmVtaXRUZXh0KE5vZGUqIHRleHROb2RlLCBpbnQgdGV4dFN0YXJ0T2Zmc2V0
LCBpbnQgdGV4dEVuZE9mZnNldCkKIHsKICAgICBSZW5kZXJUZXh0KiByZW5kZXJlciA9IHRvUmVu
ZGVyVGV4dChtX25vZGUtPnJlbmRlcmVyKCkpOwotICAgIFN0cmluZyBzdHIgPSByZW5kZXJlci0+
dGV4dCgpOworICAgIFN0cmluZyBzdHI7CisgICAgaWYgKG1fZW1pdHNUZXh0c1dpdGhvdXRUcmFu
c2NvZGluZykKKyAgICAgICAgc3RyID0gcmVuZGVyZXItPnRleHRXaXRob3V0VHJhbnNjb2Rpbmco
KTsKKyAgICBlbHNlCisgICAgICAgIHN0ciA9IHJlbmRlcmVyLT50ZXh0KCk7CiAgICAgQVNTRVJU
KHN0ci5jaGFyYWN0ZXJzKCkpOwogCiAgICAgbV9wb3NpdGlvbk5vZGUgPSB0ZXh0Tm9kZTsKQEAg
LTIxMDQsNyArMjEzMCw3IEBAIFBhc3NSZWZQdHI8UmFuZ2U+IFRleHRJdGVyYXRvcjo6cmFuZ2VG
cm9tTG9jYXRpb25BbmRMZW5ndGgoRWxlbWVudCogc2NvcGUsIGludCByCiAKIC8vIC0tLS0tLS0t
CiAgICAgCi1VQ2hhciogcGxhaW5UZXh0VG9NYWxsb2NBbGxvY2F0ZWRCdWZmZXIoY29uc3QgUmFu
Z2UqIHIsIHVuc2lnbmVkJiBidWZmZXJMZW5ndGgsIGJvb2wgaXNEaXNwbGF5U3RyaW5nKSAKK1VD
aGFyKiBwbGFpblRleHRUb01hbGxvY0FsbG9jYXRlZEJ1ZmZlcihjb25zdCBSYW5nZSogciwgdW5z
aWduZWQmIGJ1ZmZlckxlbmd0aCwgYm9vbCBpc0Rpc3BsYXlTdHJpbmcpCiB7CiAgICAgVUNoYXIq
IHJlc3VsdCA9IDA7CiAKQEAgLTIxMTYsNyArMjE0Miw3IEBAIFVDaGFyKiBwbGFpblRleHRUb01h
bGxvY0FsbG9jYXRlZEJ1ZmZlcihjb25zdCBSYW5nZSogciwgdW5zaWduZWQmIGJ1ZmZlckxlbmd0
aCwKICAgICBWZWN0b3I8VGV4dFNlZ21lbnQ+KiB0ZXh0U2VnbWVudHMgPSAwOwogICAgIFZlY3Rv
cjxVQ2hhcj4gdGV4dEJ1ZmZlcjsKICAgICB0ZXh0QnVmZmVyLnJlc2VydmVJbml0aWFsQ2FwYWNp
dHkoY01heFNlZ21lbnRTaXplKTsKLSAgICBmb3IgKFRleHRJdGVyYXRvciBpdChyKTsgIWl0LmF0
RW5kKCk7IGl0LmFkdmFuY2UoKSkgeworICAgIGZvciAoVGV4dEl0ZXJhdG9yIGl0KHIsIGlzRGlz
cGxheVN0cmluZyA/IFRleHRJdGVyYXRvckJlaGF2aW9yRGVmYXVsdCA6IFRleHRJdGVyYXRvckJl
aGF2aW9yRW1pdHNUZXh0c1dpdGhvdXRUcmFuc2NvZGluZyk7ICFpdC5hdEVuZCgpOyBpdC5hZHZh
bmNlKCkpIHsKICAgICAgICAgaWYgKHRleHRCdWZmZXIuc2l6ZSgpICYmIHRleHRCdWZmZXIuc2l6
ZSgpICsgaXQubGVuZ3RoKCkgPiBjTWF4U2VnbWVudFNpemUpIHsKICAgICAgICAgICAgIFVDaGFy
KiBuZXdTZWdtZW50QnVmZmVyID0gc3RhdGljX2Nhc3Q8VUNoYXIqPihtYWxsb2ModGV4dEJ1ZmZl
ci5zaXplKCkgKiBzaXplb2YoVUNoYXIpKSk7CiAgICAgICAgICAgICBpZiAoIW5ld1NlZ21lbnRC
dWZmZXIpCmRpZmYgLS1naXQgYS9XZWJDb3JlL2VkaXRpbmcvVGV4dEl0ZXJhdG9yLmggYi9XZWJD
b3JlL2VkaXRpbmcvVGV4dEl0ZXJhdG9yLmgKaW5kZXggNDRhZjNlNS4uZTRiYTJiNSAxMDA2NDQK
LS0tIGEvV2ViQ29yZS9lZGl0aW5nL1RleHRJdGVyYXRvci5oCisrKyBiL1dlYkNvcmUvZWRpdGlu
Zy9UZXh0SXRlcmF0b3IuaApAQCAtNjgsMTEgKzY4LDE5IEBAIHByaXZhdGU6CiAvLyBhdCBwb2lu
dHMgd2hlcmUgcmVwbGFjZWQgZWxlbWVudHMgYnJlYWsgdXAgdGhlIHRleHQgZmxvdy4gIFRoZSB0
ZXh0IGNvbWVzIGJhY2sgaW4KIC8vIGNodW5rcyBzbyBhcyB0byBvcHRpbWl6ZSBmb3IgcGVyZm9y
bWFuY2Ugb2YgdGhlIGl0ZXJhdGlvbi4KIAorZW51bSBUZXh0SXRlcmF0b3JCZWhhdmlvciB7Cisg
ICAgVGV4dEl0ZXJhdG9yQmVoYXZpb3JEZWZhdWx0ID0gMCwKKyAgICBUZXh0SXRlcmF0b3JCZWhh
dmlvckVtaXRDaGFyYWN0ZXJzQmV0d2VlbkFsbFZpc2libGVQb3NpdGlvbnMgPSAxIDw8IDAsCisg
ICAgVGV4dEl0ZXJhdG9yQmVoYXZpb3JFbnRlclRleHRDb250cm9scyA9IDEgPDwgMSwKKyAgICBU
ZXh0SXRlcmF0b3JCZWhhdmlvckVtaXRzVGV4dHNXaXRob3V0VHJhbnNjb2RpbmcgPSAxIDw8IDIs
Cit9OworCiBjbGFzcyBUZXh0SXRlcmF0b3IgewogcHVibGljOgogICAgIFRleHRJdGVyYXRvcigp
OwogICAgIGV4cGxpY2l0IFRleHRJdGVyYXRvcihjb25zdCBSYW5nZSosIGJvb2wgZW1pdENoYXJh
Y3RlcnNCZXR3ZWVuQWxsVmlzaWJsZVBvc2l0aW9ucyA9IGZhbHNlLCBib29sIGVudGVyVGV4dENv
bnRyb2xzID0gZmFsc2UpOwotICAgIAorICAgIGV4cGxpY2l0IFRleHRJdGVyYXRvcihjb25zdCBS
YW5nZSosIFRleHRJdGVyYXRvckJlaGF2aW9yKTsKKwogICAgIGJvb2wgYXRFbmQoKSBjb25zdCB7
IHJldHVybiAhbV9wb3NpdGlvbk5vZGU7IH0KICAgICB2b2lkIGFkdmFuY2UoKTsKICAgICAKQEAg
LTg3LDYgKzk1LDcgQEAgcHVibGljOgogICAgIHN0YXRpYyBQYXNzUmVmUHRyPFJhbmdlPiBzdWJy
YW5nZShSYW5nZSogZW50aXJlUmFuZ2UsIGludCBjaGFyYWN0ZXJPZmZzZXQsIGludCBjaGFyYWN0
ZXJDb3VudCk7CiAgICAgCiBwcml2YXRlOgorICAgIHZvaWQgaW5pdChjb25zdCBSYW5nZSopOwog
ICAgIHZvaWQgZXhpdE5vZGUoKTsKICAgICBib29sIHNob3VsZFJlcHJlc2VudE5vZGVPZmZzZXRa
ZXJvKCk7CiAgICAgYm9vbCBzaG91bGRFbWl0U3BhY2VCZWZvcmVBbmRBZnRlck5vZGUoTm9kZSop
OwpAQCAtMTQ3LDYgKzE1Niw5IEBAIHByaXZhdGU6CiAgICAgLy8gbW92ZVBhcmFncmFwaHMgdG8g
bm90IGNsb25lL2Rlc3Ryb3kgbW92ZWQgY29udGVudC4KICAgICBib29sIG1fZW1pdENoYXJhY3Rl
cnNCZXR3ZWVuQWxsVmlzaWJsZVBvc2l0aW9uczsKICAgICBib29sIG1fZW50ZXJUZXh0Q29udHJv
bHM7CisKKyAgICAvLyBVc2VkIHdoZW4gd2Ugd2FudCB0ZXh0cyBmb3IgY29weWluZywgcGFzdGlu
ZywgYW5kIHRyYW5zcG9zaW5nLgorICAgIGJvb2wgbV9lbWl0c1RleHRzV2l0aG91dFRyYW5zY29k
aW5nOwogfTsKIAogLy8gSXRlcmF0ZXMgdGhyb3VnaCB0aGUgRE9NIHJhbmdlLCByZXR1cm5pbmcg
YWxsIHRoZSB0ZXh0LCBhbmQgMC1sZW5ndGggYm91bmRhcmllcwpkaWZmIC0tZ2l0IGEvV2ViQ29y
ZS9wbGF0Zm9ybS9tYWMvUGFzdGVib2FyZE1hYy5tbSBiL1dlYkNvcmUvcGxhdGZvcm0vbWFjL1Bh
c3RlYm9hcmRNYWMubW0KaW5kZXggMDg2YjI3Mi4uMDNlZGUwMyAxMDA2NDQKLS0tIGEvV2ViQ29y
ZS9wbGF0Zm9ybS9tYWMvUGFzdGVib2FyZE1hYy5tbQorKysgYi9XZWJDb3JlL3BsYXRmb3JtL21h
Yy9QYXN0ZWJvYXJkTWFjLm1tCkBAIC0xODQsNyArMTg0LDcgQEAgdm9pZCBQYXN0ZWJvYXJkOjp3
cml0ZVNlbGVjdGlvbihOU1Bhc3RlYm9hcmQqIHBhc3RlYm9hcmQsIFJhbmdlKiBzZWxlY3RlZFJh
bmdlLAogICAgIGlmIChbdHlwZXMgY29udGFpbnNPYmplY3Q6TlNTdHJpbmdQYm9hcmRUeXBlXSkg
ewogICAgICAgICAvLyBNYXAgJm5ic3A7IHRvIGEgcGxhaW4gb2xkIHNwYWNlIGJlY2F1c2UgdGhp
cyBpcyBiZXR0ZXIgZm9yIHNvdXJjZSBjb2RlLCBvdGhlciBicm93c2VycyBkbyBpdCwKICAgICAg
ICAgLy8gYW5kIGJlY2F1c2UgSFRNTCBmb3JjZXMgeW91IHRvIGRvIHRoaXMgYW55IHRpbWUgeW91
IHdhbnQgdHdvIHNwYWNlcyBpbiBhIHJvdy4KLSAgICAgICAgU3RyaW5nIHRleHQgPSBmcmFtZS0+
ZGlzcGxheVN0cmluZ01vZGlmaWVkQnlFbmNvZGluZyhzZWxlY3RlZFJhbmdlLT50ZXh0KCkpOwor
ICAgICAgICBTdHJpbmcgdGV4dCA9IHNlbGVjdGVkUmFuZ2UtPnRleHQoKTsKICAgICAgICAgTlNN
dXRhYmxlU3RyaW5nICpzID0gW1tbKE5TU3RyaW5nKil0ZXh0IGNvcHldIGF1dG9yZWxlYXNlXSBt
dXRhYmxlQ29weV07CiAgICAgICAgIAogICAgICAgICBOU1N0cmluZyAqTm9uQnJlYWtpbmdTcGFj
ZVN0cmluZyA9IFtOU1N0cmluZyBzdHJpbmdXaXRoQ2hhcmFjdGVyczombm9CcmVha1NwYWNlIGxl
bmd0aDoxXTsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9UZXh0RW5jb2Rpbmcu
aCBiL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9UZXh0RW5jb2RpbmcuaAppbmRleCA3NTc0MzQ0Li4z
NDI5YmI1IDEwMDY0NAotLS0gYS9XZWJDb3JlL3BsYXRmb3JtL3RleHQvVGV4dEVuY29kaW5nLmgK
KysrIGIvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L1RleHRFbmNvZGluZy5oCkBAIC03Nyw4ICs3Nyw5
IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgU3RyaW5nIGRlY29kZShjb25zdCBjaGFy
Kiwgc2l6ZV90IGxlbmd0aCwgYm9vbCBzdG9wT25FcnJvciwgYm9vbCYgc2F3RXJyb3IpIGNvbnN0
OwogICAgICAgICBXVEY6OkNTdHJpbmcgZW5jb2RlKGNvbnN0IFVDaGFyKiwgc2l6ZV90IGxlbmd0
aCwgVW5lbmNvZGFibGVIYW5kbGluZykgY29uc3Q7CiAKLSAgICBwcml2YXRlOgogICAgICAgICBV
Q2hhciBiYWNrc2xhc2hBc0N1cnJlbmN5U3ltYm9sKCkgY29uc3Q7CisKKyAgICBwcml2YXRlOgog
ICAgICAgICBib29sIGlzTm9uQnl0ZUJhc2VkRW5jb2RpbmcoKSBjb25zdDsKICAgICAgICAgYm9v
bCBpc1VURjdFbmNvZGluZygpIGNvbnN0OwogCmRpZmYgLS1naXQgYS9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJUZXh0LmNwcCBiL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRleHQuY3BwCmluZGV4
IDY5NTI5OGYuLjUwNzViNGMgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRl
eHQuY3BwCisrKyBiL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRleHQuY3BwCkBAIC0zOSw2ICsz
OSw3IEBACiAjaW5jbHVkZSAiU3RyaW5nQnVmZmVyLmgiCiAjaW5jbHVkZSAiVGV4dC5oIgogI2lu
Y2x1ZGUgIlRleHRCcmVha0l0ZXJhdG9yLmgiCisjaW5jbHVkZSAiVGV4dFJlc291cmNlRGVjb2Rl
ci5oIgogI2luY2x1ZGUgIlZpc2libGVQb3NpdGlvbi5oIgogI2luY2x1ZGUgImJyZWFrX2xpbmVz
LmgiCiAjaW5jbHVkZSA8d3RmL0Fsd2F5c0lubGluZS5oPgpAQCAtODgsNyArODksNyBAQCBzdGF0
aWMgdm9pZCBtYWtlQ2FwaXRhbGl6ZWQoU3RyaW5nKiBzdHJpbmcsIFVDaGFyIHByZXZpb3VzKQog
UmVuZGVyVGV4dDo6UmVuZGVyVGV4dChOb2RlKiBub2RlLCBQYXNzUmVmUHRyPFN0cmluZ0ltcGw+
IHN0cikKICAgICAgOiBSZW5kZXJPYmplY3Qobm9kZSkKICAgICAgLCBtX21pbldpZHRoKC0xKQot
ICAgICAsIG1fdGV4dChkb2N1bWVudCgpLT5kaXNwbGF5U3RyaW5nTW9kaWZpZWRCeUVuY29kaW5n
KHN0cikpCisgICAgICwgbV90ZXh0KHN0cikKICAgICAgLCBtX2ZpcnN0VGV4dEJveCgwKQogICAg
ICAsIG1fbGFzdFRleHRCb3goMCkKICAgICAgLCBtX21heFdpZHRoKC0xKQpAQCAtOTksNiArMTAw
LDcgQEAgUmVuZGVyVGV4dDo6UmVuZGVyVGV4dChOb2RlKiBub2RlLCBQYXNzUmVmUHRyPFN0cmlu
Z0ltcGw+IHN0cikKICAgICAgLCBtX2NvbnRhaW5zUmV2ZXJzZWRUZXh0KGZhbHNlKQogICAgICAs
IG1faXNBbGxBU0NJSShtX3RleHQuY29udGFpbnNPbmx5QVNDSUkoKSkKICAgICAgLCBtX2tub3du
VG9IYXZlTm9PdmVyZmxvd0FuZE5vRmFsbGJhY2tGb250cyhmYWxzZSkKKyAgICAgLCBtX25lZWRz
VHJhbnNjb2RpbmcoZmFsc2UpCiB7CiAgICAgQVNTRVJUKG1fdGV4dCk7CiAKQEAgLTEzNSw2ICsx
MzcsMTEgQEAgYm9vbCBSZW5kZXJUZXh0Ojppc1dvcmRCcmVhaygpIGNvbnN0CiAgICAgcmV0dXJu
IGZhbHNlOwogfQogCit2b2lkIFJlbmRlclRleHQ6OnVwZGF0ZU5lZWRzVHJhbnNjb2RpbmcoKQor
eworICAgIG1fbmVlZHNUcmFuc2NvZGluZyA9IGRvY3VtZW50KCktPmRlY29kZXIoKSAmJiBkb2N1
bWVudCgpLT5kZWNvZGVyKCktPmVuY29kaW5nKCkuYmFja3NsYXNoQXNDdXJyZW5jeVN5bWJvbCgp
ICE9ICdcXCc7Cit9CisKIHZvaWQgUmVuZGVyVGV4dDo6c3R5bGVEaWRDaGFuZ2UoU3R5bGVEaWZm
ZXJlbmNlIGRpZmYsIGNvbnN0IFJlbmRlclN0eWxlKiBvbGRTdHlsZSkKIHsKICAgICAvLyBUaGVy
ZSBpcyBubyBuZWVkIHRvIGV2ZXIgc2NoZWR1bGUgcmVwYWludHMgZnJvbSBhIHN0eWxlIGNoYW5n
ZSBvZiBhIHRleHQgcnVuLCBzaW5jZQpAQCAtMTQ2LDEwICsxNTMsMTYgQEAgdm9pZCBSZW5kZXJU
ZXh0OjpzdHlsZURpZENoYW5nZShTdHlsZURpZmZlcmVuY2UgZGlmZiwgY29uc3QgUmVuZGVyU3R5
bGUqIG9sZFN0eWwKICAgICAgICAgbV9rbm93blRvSGF2ZU5vT3ZlcmZsb3dBbmROb0ZhbGxiYWNr
Rm9udHMgPSBmYWxzZTsKICAgICB9CiAKKyAgICBib29sIG5lZWRzUmVzZXRUZXh0ID0gZmFsc2U7
CisgICAgaWYgKCFvbGRTdHlsZSkgeworICAgICAgICB1cGRhdGVOZWVkc1RyYW5zY29kaW5nKCk7
CisgICAgICAgIG5lZWRzUmVzZXRUZXh0ID0gbV9uZWVkc1RyYW5zY29kaW5nOworICAgIH0KKyAg
ICAvLyBGSVhNRTogY2hlY2sgZm9udHMgd2hlbiB3ZSBpbXBsZW1lbnQgZm9udC1iYXNlZCB0cmFu
c2NvZGluZy4KKwogICAgIEVUZXh0VHJhbnNmb3JtIG9sZFRyYW5zZm9ybSA9IG9sZFN0eWxlID8g
b2xkU3R5bGUtPnRleHRUcmFuc2Zvcm0oKSA6IFRUTk9ORTsKICAgICBFVGV4dFNlY3VyaXR5IG9s
ZFNlY3VyaXR5ID0gb2xkU3R5bGUgPyBvbGRTdHlsZS0+dGV4dFNlY3VyaXR5KCkgOiBUU05PTkU7
Ci0KLSAgICBpZiAob2xkVHJhbnNmb3JtICE9IHN0eWxlKCktPnRleHRUcmFuc2Zvcm0oKSB8fCBv
bGRTZWN1cml0eSAhPSBzdHlsZSgpLT50ZXh0U2VjdXJpdHkoKSkgeworICAgIGlmIChuZWVkc1Jl
c2V0VGV4dCB8fCBvbGRUcmFuc2Zvcm0gIT0gc3R5bGUoKS0+dGV4dFRyYW5zZm9ybSgpIHx8IG9s
ZFNlY3VyaXR5ICE9IHN0eWxlKCktPnRleHRTZWN1cml0eSgpKSB7CiAgICAgICAgIGlmIChSZWZQ
dHI8U3RyaW5nSW1wbD4gdGV4dFRvVHJhbnNmb3JtID0gb3JpZ2luYWxUZXh0KCkpCiAgICAgICAg
ICAgICBzZXRUZXh0KHRleHRUb1RyYW5zZm9ybS5yZWxlYXNlKCksIHRydWUpOwogICAgIH0KQEAg
LTk2MCw3ICs5NzMsNyBAQCB2b2lkIFJlbmRlclRleHQ6OnNldFRleHRXaXRoT2Zmc2V0KFBhc3NS
ZWZQdHI8U3RyaW5nSW1wbD4gdGV4dCwgdW5zaWduZWQgb2Zmc2V0LAogICAgIHNldFRleHQodGV4
dCwgZm9yY2UpOwogfQogCi1zdGF0aWMgaW5saW5lIGJvb2wgaXNJbmxpbmVGbG93T3JFbXB0eVRl
eHQoUmVuZGVyT2JqZWN0KiBvKQorc3RhdGljIGlubGluZSBib29sIGlzSW5saW5lRmxvd09yRW1w
dHlUZXh0KGNvbnN0IFJlbmRlck9iamVjdCogbykKIHsKICAgICBpZiAoby0+aXNSZW5kZXJJbmxp
bmUoKSkKICAgICAgICAgcmV0dXJuIHRydWU7CkBAIC05NzIsMTAgKzk4NSwxMCBAQCBzdGF0aWMg
aW5saW5lIGJvb2wgaXNJbmxpbmVGbG93T3JFbXB0eVRleHQoUmVuZGVyT2JqZWN0KiBvKQogICAg
IHJldHVybiAhdGV4dC0+bGVuZ3RoKCk7CiB9CiAKLVVDaGFyIFJlbmRlclRleHQ6OnByZXZpb3Vz
Q2hhcmFjdGVyKCkKK1VDaGFyIFJlbmRlclRleHQ6OnByZXZpb3VzQ2hhcmFjdGVyKCkgY29uc3QK
IHsKICAgICAvLyBmaW5kIHByZXZpb3VzIHRleHQgcmVuZGVyZXIgaWYgb25lIGV4aXN0cwotICAg
IFJlbmRlck9iamVjdCogcHJldmlvdXNUZXh0ID0gdGhpczsKKyAgICBjb25zdCBSZW5kZXJPYmpl
Y3QqIHByZXZpb3VzVGV4dCA9IHRoaXM7CiAgICAgd2hpbGUgKChwcmV2aW91c1RleHQgPSBwcmV2
aW91c1RleHQtPnByZXZpb3VzSW5QcmVPcmRlcigpKSkKICAgICAgICAgaWYgKCFpc0lubGluZUZs
b3dPckVtcHR5VGV4dChwcmV2aW91c1RleHQpKQogICAgICAgICAgICAgYnJlYWs7CkBAIC05ODks
NyArMTAwMiwxMCBAQCBVQ2hhciBSZW5kZXJUZXh0OjpwcmV2aW91c0NoYXJhY3RlcigpCiB2b2lk
IFJlbmRlclRleHQ6OnNldFRleHRJbnRlcm5hbChQYXNzUmVmUHRyPFN0cmluZ0ltcGw+IHRleHQp
CiB7CiAgICAgQVNTRVJUKHRleHQpOwotICAgIG1fdGV4dCA9IGRvY3VtZW50KCktPmRpc3BsYXlT
dHJpbmdNb2RpZmllZEJ5RW5jb2RpbmcodGV4dCk7CisgICAgaWYgKG1fbmVlZHNUcmFuc2NvZGlu
ZykKKyAgICAgICAgbV90ZXh0ID0gZG9jdW1lbnQoKS0+ZGlzcGxheVN0cmluZ01vZGlmaWVkQnlF
bmNvZGluZyh0ZXh0KTsKKyAgICBlbHNlCisgICAgICAgIG1fdGV4dCA9IHRleHQ7CiAgICAgQVNT
RVJUKG1fdGV4dCk7CiAKICNpZiBFTkFCTEUoU1ZHKQpAQCAtMTAyMiwzMyArMTAzOCwyMSBAQCB2
b2lkIFJlbmRlclRleHQ6OnNldFRleHRJbnRlcm5hbChQYXNzUmVmUHRyPFN0cmluZ0ltcGw+IHRl
eHQpCiAjZW5kaWYKIAogICAgIGlmIChzdHlsZSgpKSB7Ci0gICAgICAgIHN3aXRjaCAoc3R5bGUo
KS0+dGV4dFRyYW5zZm9ybSgpKSB7Ci0gICAgICAgICAgICBjYXNlIFRUTk9ORToKLSAgICAgICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNhc2UgQ0FQSVRBTElaRToKLSAgICAgICAgICAg
ICAgICBtYWtlQ2FwaXRhbGl6ZWQoJm1fdGV4dCwgcHJldmlvdXNDaGFyYWN0ZXIoKSk7Ci0gICAg
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIFVQUEVSQ0FTRToKLSAgICAgICAg
ICAgICAgICBtX3RleHQubWFrZVVwcGVyKCk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgICAgICBjYXNlIExPV0VSQ0FTRToKLSAgICAgICAgICAgICAgICBtX3RleHQubWFrZUxvd2Vy
KCk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KKyAgICAgICAgdHJhbnNmb3Jt
VGV4dChtX3RleHQpOwogCiAgICAgICAgIC8vIFdlIHVzZSB0aGUgc2FtZSBjaGFyYWN0ZXJzIGhl
cmUgYXMgZm9yIGxpc3QgbWFya2Vycy4KICAgICAgICAgLy8gU2VlIHRoZSBsaXN0TWFya2VyVGV4
dCBmdW5jdGlvbiBpbiBSZW5kZXJMaXN0TWFya2VyLmNwcC4KICAgICAgICAgc3dpdGNoIChzdHls
ZSgpLT50ZXh0U2VjdXJpdHkoKSkgewotICAgICAgICAgICAgY2FzZSBUU05PTkU6Ci0gICAgICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIFRTQ0lSQ0xFOgotICAgICAgICAgICAg
ICAgIG1fdGV4dC5tYWtlU2VjdXJlKHdoaXRlQnVsbGV0KTsKLSAgICAgICAgICAgICAgICBicmVh
azsKLSAgICAgICAgICAgIGNhc2UgVFNESVNDOgotICAgICAgICAgICAgICAgIG1fdGV4dC5tYWtl
U2VjdXJlKGJ1bGxldCk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNl
IFRTU1FVQVJFOgotICAgICAgICAgICAgICAgIG1fdGV4dC5tYWtlU2VjdXJlKGJsYWNrU3F1YXJl
KTsKKyAgICAgICAgY2FzZSBUU05PTkU6CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2Fz
ZSBUU0NJUkNMRToKKyAgICAgICAgICAgIG1fdGV4dC5tYWtlU2VjdXJlKHdoaXRlQnVsbGV0KTsK
KyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFRTRElTQzoKKyAgICAgICAgICAgIG1f
dGV4dC5tYWtlU2VjdXJlKGJ1bGxldCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2Fz
ZSBUU1NRVUFSRToKKyAgICAgICAgICAgIG1fdGV4dC5tYWtlU2VjdXJlKGJsYWNrU3F1YXJlKTsK
ICAgICAgICAgfQogICAgIH0KIApAQCAtMTA3NCw2ICsxMDc4LDM4IEBAIHZvaWQgUmVuZGVyVGV4
dDo6c2V0VGV4dChQYXNzUmVmUHRyPFN0cmluZ0ltcGw+IHRleHQsIGJvb2wgZm9yY2UpCiAgICAg
ICAgIGF4T2JqZWN0Q2FjaGUtPmNvbnRlbnRDaGFuZ2VkKHRoaXMpOwogfQogCitTdHJpbmcgUmVu
ZGVyVGV4dDo6dGV4dFdpdGhvdXRUcmFuc2NvZGluZygpIGNvbnN0Cit7CisgICAgLy8gSWYgbV90
ZXh0IGlzbid0IHRyYW5zY29kZWQgb3IgaXMgc2VjdXJlLCB3ZSBjYW4ganVzdCByZXR1cm4gdGhl
IG1vZGlmaWVkIHRleHQuCisgICAgaWYgKCFtX25lZWRzVHJhbnNjb2RpbmcgfHwgc3R5bGUoKS0+
dGV4dFNlY3VyaXR5KCkgIT0gVFNOT05FKQorICAgICAgICByZXR1cm4gdGV4dCgpOworCisgICAg
Ly8gT3RoZXJ3aXNlLCB3ZSBzaG91bGQgdXNlIG9yaWdpbmFsIHRleHQuIElmIHRleHQtdHJhbnNm
b3JtIGlzCisgICAgLy8gc3BlY2lmaWVkLCB3ZSBzaG91bGQgdHJhbnNmb3JtIHRoZSB0ZXh0IG9u
IHRoZSBmbHkuCisgICAgU3RyaW5nIHRleHQgPSBvcmlnaW5hbFRleHQoKTsKKyAgICBpZiAoc3R5
bGUoKSAmJiBzdHlsZSgpLT50ZXh0VHJhbnNmb3JtKCkgIT0gVFROT05FKQorICAgICAgICB0cmFu
c2Zvcm1UZXh0KHRleHQpOworICAgIHJldHVybiB0ZXh0OworfQorCit2b2lkIFJlbmRlclRleHQ6
OnRyYW5zZm9ybVRleHQoU3RyaW5nJiB0ZXh0KSBjb25zdAoreworICAgIEFTU0VSVChzdHlsZSgp
KTsKKyAgICBzd2l0Y2ggKHN0eWxlKCktPnRleHRUcmFuc2Zvcm0oKSkgeworICAgIGNhc2UgVFRO
T05FOgorICAgICAgICBicmVhazsKKyAgICBjYXNlIENBUElUQUxJWkU6CisgICAgICAgIG1ha2VD
YXBpdGFsaXplZCgmdGV4dCwgcHJldmlvdXNDaGFyYWN0ZXIoKSk7CisgICAgICAgIGJyZWFrOwor
ICAgIGNhc2UgVVBQRVJDQVNFOgorICAgICAgICB0ZXh0Lm1ha2VVcHBlcigpOworICAgICAgICBi
cmVhazsKKyAgICBjYXNlIExPV0VSQ0FTRToKKyAgICAgICAgdGV4dC5tYWtlTG93ZXIoKTsKKyAg
ICAgICAgYnJlYWs7CisgICAgfQorfQorCiBpbnQgUmVuZGVyVGV4dDo6bGluZUhlaWdodChib29s
IGZpcnN0TGluZSwgYm9vbCkgY29uc3QKIHsKICAgICAvLyBBbHdheXMgdXNlIHRoZSBpbnRlcmlv
ciBsaW5lIGhlaWdodCBvZiB0aGUgcGFyZW50IChlLmcuLCBpZiBvdXIgcGFyZW50IGlzIGFuIGlu
bGluZSBibG9jaykuCmRpZmYgLS1naXQgYS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0Lmgg
Yi9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0LmgKaW5kZXggOWIxNDY3ZC4uMDc1ZTk4NSAx
MDA2NDQKLS0tIGEvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4dC5oCisrKyBiL1dlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlclRleHQuaApAQCAtNTEsNiArNTEsNyBAQCBwdWJsaWM6CiAgICAgdmly
dHVhbCB2b2lkIGRlc3Ryb3koKTsKIAogICAgIFN0cmluZ0ltcGwqIHRleHQoKSBjb25zdCB7IHJl
dHVybiBtX3RleHQuaW1wbCgpOyB9CisgICAgU3RyaW5nIHRleHRXaXRob3V0VHJhbnNjb2Rpbmco
KSBjb25zdDsKIAogICAgIElubGluZVRleHRCb3gqIGNyZWF0ZUlubGluZVRleHRCb3goKTsKICAg
ICB2b2lkIGRpcnR5TGluZUJveGVzKGJvb2wgZnVsbExheW91dCk7CkBAIC0xMjgsNyArMTI5LDcg
QEAgcHJvdGVjdGVkOgogICAgIHZpcnR1YWwgdm9pZCBzdHlsZURpZENoYW5nZShTdHlsZURpZmZl
cmVuY2UsIGNvbnN0IFJlbmRlclN0eWxlKiBvbGRTdHlsZSk7CiAKICAgICB2aXJ0dWFsIHZvaWQg
c2V0VGV4dEludGVybmFsKFBhc3NSZWZQdHI8U3RyaW5nSW1wbD4pOwotICAgIHZpcnR1YWwgVUNo
YXIgcHJldmlvdXNDaGFyYWN0ZXIoKTsKKyAgICB2aXJ0dWFsIFVDaGFyIHByZXZpb3VzQ2hhcmFj
dGVyKCkgY29uc3Q7CiAgICAgCiAgICAgdmlydHVhbCBJbmxpbmVUZXh0Qm94KiBjcmVhdGVUZXh0
Qm94KCk7IC8vIFN1YmNsYXNzZWQgYnkgU1ZHLgogCkBAIC0xNDgsNiArMTQ5LDkgQEAgcHJpdmF0
ZToKICAgICBib29sIGNvbnRhaW5zT25seVdoaXRlc3BhY2UodW5zaWduZWQgZnJvbSwgdW5zaWdu
ZWQgbGVuKSBjb25zdDsKICAgICBpbnQgd2lkdGhGcm9tQ2FjaGUoY29uc3QgRm9udCYsIGludCBz
dGFydCwgaW50IGxlbiwgaW50IHhQb3MsIEhhc2hTZXQ8Y29uc3QgU2ltcGxlRm9udERhdGEqPiog
ZmFsbGJhY2tGb250cywgR2x5cGhPdmVyZmxvdyopIGNvbnN0OwogICAgIGJvb2wgaXNBbGxBU0NJ
SSgpIGNvbnN0IHsgcmV0dXJuIG1faXNBbGxBU0NJSTsgfQorICAgIHZvaWQgdXBkYXRlTmVlZHNU
cmFuc2NvZGluZygpOworCisgICAgdm9pZCB0cmFuc2Zvcm1UZXh0KFN0cmluZyYpIGNvbnN0Owog
CiAgICAgaW50IG1fbWluV2lkdGg7IC8vIGhlcmUgdG8gbWluaW1pemUgcGFkZGluZyBpbiA2NC1i
aXQuCiAKQEAgLTE3Miw2ICsxNzYsNyBAQCBwcml2YXRlOgogICAgIGJvb2wgbV9jb250YWluc1Jl
dmVyc2VkVGV4dCA6IDE7CiAgICAgYm9vbCBtX2lzQWxsQVNDSUkgOiAxOwogICAgIG11dGFibGUg
Ym9vbCBtX2tub3duVG9IYXZlTm9PdmVyZmxvd0FuZE5vRmFsbGJhY2tGb250cyA6IDE7CisgICAg
Ym9vbCBtX25lZWRzVHJhbnNjb2RpbmcgOiAxOwogfTsKIAogaW5saW5lIFJlbmRlclRleHQqIHRv
UmVuZGVyVGV4dChSZW5kZXJPYmplY3QqIG9iamVjdCkKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlclRleHRDb250cm9sLmNwcCBiL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRl
eHRDb250cm9sLmNwcAppbmRleCBhMTFiMjliLi41ZTE5MzYyIDEwMDY0NAotLS0gYS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJUZXh0Q29udHJvbC5jcHAKKysrIGIvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyVGV4dENvbnRyb2wuY3BwCkBAIC0xNjcsMTUgKzE2Nyw3IEBAIHZvaWQgUmVuZGVyVGV4
dENvbnRyb2w6OnVwZGF0ZUZyb21FbGVtZW50KCkKIAogdm9pZCBSZW5kZXJUZXh0Q29udHJvbDo6
c2V0SW5uZXJUZXh0VmFsdWUoY29uc3QgU3RyaW5nJiBpbm5lclRleHRWYWx1ZSkKIHsKLSAgICBT
dHJpbmcgdmFsdWU7Ci0KLSAgICBpZiAoaW5uZXJUZXh0VmFsdWUuaXNOdWxsKCkpCi0gICAgICAg
IHZhbHVlID0gIiI7Ci0gICAgZWxzZSB7Ci0gICAgICAgIHZhbHVlID0gaW5uZXJUZXh0VmFsdWU7
IAotICAgICAgICB2YWx1ZSA9IGRvY3VtZW50KCktPmRpc3BsYXlTdHJpbmdNb2RpZmllZEJ5RW5j
b2RpbmcodmFsdWUpOwotICAgIH0KLQorICAgIFN0cmluZyB2YWx1ZSA9IGlubmVyVGV4dFZhbHVl
OwogICAgIGlmICh2YWx1ZSAhPSB0ZXh0KCkgfHwgIW1faW5uZXJUZXh0LT5oYXNDaGlsZE5vZGVz
KCkpIHsKICAgICAgICAgaWYgKHZhbHVlICE9IHRleHQoKSkgewogICAgICAgICAgICAgaWYgKEZy
YW1lKiBmcmFtZSA9IGRvY3VtZW50KCktPmZyYW1lKCkpIHsKQEAgLTMxOCw5ICszMTAsNiBAQCBT
dHJpbmcgUmVuZGVyVGV4dENvbnRyb2w6OmZpbmlzaFRleHQoVmVjdG9yPFVDaGFyPiYgcmVzdWx0
KSBjb25zdAogICAgIGlmIChzaXplICYmIHJlc3VsdFtzaXplIC0gMV0gPT0gJ1xuJykKICAgICAg
ICAgcmVzdWx0LnNocmluaygtLXNpemUpOwogCi0gICAgLy8gQ29udmVydCBiYWNrc2xhc2ggdG8g
Y3VycmVuY3kgc3ltYm9sLgotICAgIGRvY3VtZW50KCktPmRpc3BsYXlCdWZmZXJNb2RpZmllZEJ5
RW5jb2RpbmcocmVzdWx0LmRhdGEoKSwgcmVzdWx0LnNpemUoKSk7Ci0gICAgCiAgICAgcmV0dXJu
IFN0cmluZzo6YWRvcHQocmVzdWx0KTsKIH0KIApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyVGV4dEZyYWdtZW50LmNwcCBiL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRleHRG
cmFnbWVudC5jcHAKaW5kZXggZjMzOThhMy4uMjE2NGFlMSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyVGV4dEZyYWdtZW50LmNwcAorKysgYi9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJUZXh0RnJhZ21lbnQuY3BwCkBAIC03Niw3ICs3Niw3IEBAIHZvaWQgUmVuZGVyVGV4dEZy
YWdtZW50OjpzZXRUZXh0SW50ZXJuYWwoUGFzc1JlZlB0cjxTdHJpbmdJbXBsPiB0ZXh0KQogICAg
IH0KIH0KIAotVUNoYXIgUmVuZGVyVGV4dEZyYWdtZW50OjpwcmV2aW91c0NoYXJhY3RlcigpCitV
Q2hhciBSZW5kZXJUZXh0RnJhZ21lbnQ6OnByZXZpb3VzQ2hhcmFjdGVyKCkgY29uc3QKIHsKICAg
ICBpZiAoc3RhcnQoKSkgewogICAgICAgICBOb2RlKiBlID0gbm9kZSgpOwpkaWZmIC0tZ2l0IGEv
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4dEZyYWdtZW50LmggYi9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJUZXh0RnJhZ21lbnQuaAppbmRleCAxZmE1MDlhLi5lMzUxNDM2IDEwMDY0NAotLS0g
YS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0RnJhZ21lbnQuaAorKysgYi9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJUZXh0RnJhZ21lbnQuaApAQCAtNTEsNyArNTEsNyBAQCBwdWJsaWM6CiAK
IHByaXZhdGU6CiAgICAgdmlydHVhbCB2b2lkIHNldFRleHRJbnRlcm5hbChQYXNzUmVmUHRyPFN0
cmluZ0ltcGw+KTsKLSAgICB2aXJ0dWFsIFVDaGFyIHByZXZpb3VzQ2hhcmFjdGVyKCk7CisgICAg
dmlydHVhbCBVQ2hhciBwcmV2aW91c0NoYXJhY3RlcigpIGNvbnN0OwogCiAgICAgdW5zaWduZWQg
bV9zdGFydDsKICAgICB1bnNpZ25lZCBtX2VuZDsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>53878</attachid>
            <date>2010-04-20 14:13:06 -0700</date>
            <delta_ts>2010-04-20 15:02:16 -0700</delta_ts>
            <desc>Patch v4</desc>
            <filename>bug-36419-20100420141304.patch</filename>
            <type>text/plain</type>
            <size>27270</size>
            <attacher name="Shinichiro Hamaji">hamaji</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxv
ZwppbmRleCA1MDI1MzRlLi42OWVjOGU4IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9DaGFuZ2VM
b2cKKysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTYgQEAKKzIwMTAtMDQt
MjAgIFNoaW5pY2hpcm8gSGFtYWppICA8aGFtYWppQGNocm9taXVtLm9yZz4KKworICAgICAgICBS
ZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBBIGJhY2tzbGFzaCBpbiBFVUMt
SlAgYmVjb21lcyB0byBhIHllbiBzaWduIHdoZW4gaXQgaXMgY29waWVkCisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0zNjQxOQorCisgICAgICAgICogZWRp
dGluZy9leGVjQ29tbWFuZC90cmFuc3Bvc2UtYmFja3NsYXNoLXdpdGgtZXVjLWV4cGVjdGVkLnR4
dDogQWRkZWQuCisgICAgICAgICogZWRpdGluZy9leGVjQ29tbWFuZC90cmFuc3Bvc2UtYmFja3Ns
YXNoLXdpdGgtZXVjLmh0bWw6IEFkZGVkLgorICAgICAgICAqIGVkaXRpbmcvcGFzdGVib2FyZC9j
b3B5LWJhY2tzbGFzaC13aXRoLWV1Yy1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAqIGVk
aXRpbmcvcGFzdGVib2FyZC9jb3B5LWJhY2tzbGFzaC13aXRoLWV1Yy5odG1sOiBBZGRlZC4KKyAg
ICAgICAgKiBlZGl0aW5nL3Bhc3RlYm9hcmQvcmVzb3VyY2VzL2NvcHktYmFja3NsYXNoLWV1Yy5o
dG1sOiBBZGRlZC4KKwogMjAxMC0wNC0xOSAgSmFtZXMgUm9iaW5zb24gIDxqYW1lc3JAY2hyb21p
dW0ub3JnPgogCiAgICAgICAgIFVucmV2aWV3ZWQuIFVwZGF0ZSBjaHJvbWl1bSB0ZXN0IGV4cGVj
dGF0aW9ucy4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2VkaXRpbmcvZXhlY0NvbW1hbmQvdHJh
bnNwb3NlLWJhY2tzbGFzaC13aXRoLWV1Yy1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy9lZGl0
aW5nL2V4ZWNDb21tYW5kL3RyYW5zcG9zZS1iYWNrc2xhc2gtd2l0aC1ldWMtZXhwZWN0ZWQudHh0
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU3ODY2ZjcKLS0tIC9kZXYvbnVs
bAorKysgYi9MYXlvdXRUZXN0cy9lZGl0aW5nL2V4ZWNDb21tYW5kL3RyYW5zcG9zZS1iYWNrc2xh
c2gtd2l0aC1ldWMtZXhwZWN0ZWQudHh0CkBAIC0wLDAgKzEsMiBAQAorXFwKK1BBU1MKZGlmZiAt
LWdpdCBhL0xheW91dFRlc3RzL2VkaXRpbmcvZXhlY0NvbW1hbmQvdHJhbnNwb3NlLWJhY2tzbGFz
aC13aXRoLWV1Yy5odG1sIGIvTGF5b3V0VGVzdHMvZWRpdGluZy9leGVjQ29tbWFuZC90cmFuc3Bv
c2UtYmFja3NsYXNoLXdpdGgtZXVjLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMC4uNzdhMTc2OQotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2VkaXRpbmcvZXhl
Y0NvbW1hbmQvdHJhbnNwb3NlLWJhY2tzbGFzaC13aXRoLWV1Yy5odG1sCkBAIC0wLDAgKzEsMzQg
QEAKKzwhRE9DVFlQRSBodG1sPgorPGh0bWw+CisKKzxoZWFkPgorPG1ldGEgY2hhcnNldD0iRVVD
LUpQIj4KKzxzY3JpcHQ+CisKK2lmICh3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIpCisgICAg
bGF5b3V0VGVzdENvbnRyb2xsZXIuZHVtcEFzVGV4dCgpOworCitmdW5jdGlvbiB0ZXN0KCkKK3sK
KyAgICB2YXIgYmFja3NsYXNoRGl2RWxlbWVudCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJi
YWNrc2xhc2giKTsKKyAgICBnZXRTZWxlY3Rpb24oKS5leHRlbmQoYmFja3NsYXNoRGl2RWxlbWVu
dCwgMSk7CisgICAgZG9jdW1lbnQuZXhlY0NvbW1hbmQoIlRyYW5zcG9zZSIpOworCisgICAgLy8g
OTIgaXMgdGhlIGNoYXIgY29kZSBvZiBhIGJhY2tzbGFzaC4KKyAgICB2YXIgYmFja3NsYXNoID0g
OTI7CisgICAgaWYgKGJhY2tzbGFzaCA9PSBiYWNrc2xhc2hEaXZFbGVtZW50LmlubmVySFRNTC5j
aGFyQ29kZUF0KDApICYmIGJhY2tzbGFzaCA9PSBiYWNrc2xhc2hEaXZFbGVtZW50LmlubmVySFRN
TC5jaGFyQ29kZUF0KDEpKQorICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgicmVzdWx0
IikuaW5uZXJIVE1MID0gIlBBU1MiOworfQorCis8L3NjcmlwdD4KKzwvaGVhZD4KKworPGJvZHkg
b25sb2FkPSJ0ZXN0KCkiPgorCis8ZGl2IGlkPSJiYWNrc2xhc2giIGNvbnRlbnRFZGl0YWJsZT0i
dHJ1ZSI+XFw8L2Rpdj4KKworPGRpdiBpZD0icmVzdWx0Ij5GQUlMPC9kaXY+CisKKzwvYm9keT4K
KworPC9odG1sPgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvZWRpdGluZy9wYXN0ZWJvYXJkL2Nv
cHktYmFja3NsYXNoLXdpdGgtZXVjLWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL2VkaXRpbmcv
cGFzdGVib2FyZC9jb3B5LWJhY2tzbGFzaC13aXRoLWV1Yy1leHBlY3RlZC50eHQKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGMwMWM5NAotLS0gL2Rldi9udWxsCisrKyBiL0xh
eW91dFRlc3RzL2VkaXRpbmcvcGFzdGVib2FyZC9jb3B5LWJhY2tzbGFzaC13aXRoLWV1Yy1leHBl
Y3RlZC50eHQKQEAgLTAsMCArMSw0MCBAQAorCitPcmlnaW5hbCB0ZXh0cyB3aGljaCB3aWxsIGJl
IGNvcGllZAorCitcIGZyb20gVVRGOCBwYWdlCitcIEZST00gVVRGOCBQQUdFIChUUkFOU0ZPUk1F
RCkKK+KAouKAouKAouKAouKAouKAouKAouKAouKAouKAouKAouKAouKAouKAouKAouKAouKAouKA
ouKAouKAouKAouKAouKAouKAouKAogorCitUZXh0cyBpbiB0aGUgRVVDIGZyYW1lIHdpbGwgYmUg
cGFzdGVkIGhlcmUKKworZnJvbSBFVUMgZGl2IHRvIFVURjggdGV4dC1jb250cm9sOiAKK2Zyb20g
RVVDIGRpdiB0byBVVEY4IGNvbnRlbnQtZWRpdGFibGU6IFwgZnJvbSBFVUMgcGFnZQorCitmcm9t
IEVVQyB0cmFuc2Zvcm0gdG8gVVRGOCB0ZXh0LWNvbnRyb2w6IAorZnJvbSBFVUMgdHJhbnNmb3Jt
IHRvIFVURjggY29udGVudC1lZGl0YWJsZTogXCBGUk9NIEVVQyBQQUdFIChUUkFOU0ZPUk1FRCkK
KworZnJvbSBFVUMgc2VjdXJlIHRvIFVURjggdGV4dC1jb250cm9sOiAKK2Zyb20gRVVDIHNlY3Vy
ZSB0byBVVEY4IGNvbnRlbnQtZWRpdGFibGU6IOKAouKAouKAouKAouKAouKAouKAouKAouKAouKA
ouKAouKAouKAouKAouKAouKAouKAouKAouKAouKAouKAouKAouKAouKAogorCitmcm9tIEVVQyBj
b250cm9sIHRvIFVURjggdGV4dC1jb250cm9sOiAKK2Zyb20gRVVDIGNvbnRyb2wgdG8gVVRGOCBj
b250ZW50LWVkaXRhYmxlOiBcIGZyb20gRVVDIHRleHQgY29udHJvbAorCitSZXN1bHRzCisKK2Zy
b20gRVVDIGRpdiB0byBVVEY4IHRleHQtY29udHJvbDogUEFTUworZnJvbSBFVUMgZGl2IHRvIFVU
RjggY29udGVudC1lZGl0YWJsZTogUEFTUworZnJvbSBFVUMgdHJhbnNmb3JtIHRvIFVURjggdGV4
dC1jb250cm9sOiBQQVNTCitmcm9tIEVVQyB0cmFuc2Zvcm0gdG8gVVRGOCBjb250ZW50LWVkaXRh
YmxlOiBQQVNTCitmcm9tIEVVQyBzZWN1cmUgdG8gVVRGOCB0ZXh0LWNvbnRyb2w6IFBBU1MKK2Zy
b20gRVVDIHNlY3VyZSB0byBVVEY4IGNvbnRlbnQtZWRpdGFibGU6IFBBU1MKK2Zyb20gRVVDIGNv
bnRyb2wgdG8gVVRGOCB0ZXh0LWNvbnRyb2w6IFBBU1MKK2Zyb20gRVVDIGNvbnRyb2wgdG8gVVRG
OCBjb250ZW50LWVkaXRhYmxlOiBQQVNTCitmcm9tIFVURjggZGl2IHRvIEVVQyB0ZXh0LWNvbnRy
b2w6IFBBU1MKK2Zyb20gVVRGOCBkaXYgdG8gRVVDIGNvbnRlbnQtZWRpdGFibGU6IFBBU1MKK2Zy
b20gVVRGOCB0cmFuc2Zvcm0gdG8gRVVDIHRleHQtY29udHJvbDogUEFTUworZnJvbSBVVEY4IHRy
YW5zZm9ybSB0byBFVUMgY29udGVudC1lZGl0YWJsZTogUEFTUworZnJvbSBVVEY4IHNlY3VyZSB0
byBFVUMgdGV4dC1jb250cm9sOiBQQVNTCitmcm9tIFVURjggc2VjdXJlIHRvIEVVQyBjb250ZW50
LWVkaXRhYmxlOiBQQVNTCitmcm9tIFVURjggY29udHJvbCB0byBFVUMgdGV4dC1jb250cm9sOiBQ
QVNTCitmcm9tIFVURjggY29udHJvbCB0byBFVUMgY29udGVudC1lZGl0YWJsZTogUEFTUworCmRp
ZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9lZGl0aW5nL3Bhc3RlYm9hcmQvY29weS1iYWNrc2xhc2gt
d2l0aC1ldWMuaHRtbCBiL0xheW91dFRlc3RzL2VkaXRpbmcvcGFzdGVib2FyZC9jb3B5LWJhY2tz
bGFzaC13aXRoLWV1Yy5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAw
NTE0NjcKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9lZGl0aW5nL3Bhc3RlYm9hcmQv
Y29weS1iYWNrc2xhc2gtd2l0aC1ldWMuaHRtbApAQCAtMCwwICsxLDEwNiBAQAorPCFET0NUWVBF
IGh0bWw+Cis8aHRtbD4KKworPGhlYWQ+Cis8bWV0YSBjaGFyc2V0PSJVVEYtOCI+Cis8c2NyaXB0
PgorCitpZiAod2luZG93LmxheW91dFRlc3RDb250cm9sbGVyKQorICAgIGxheW91dFRlc3RDb250
cm9sbGVyLmR1bXBBc1RleHQoKTsKKworLy8gU2VsZWN0IGFuIGVsZW1lbnQgYW4gcmV0dXJuIGl0
cyB2YWx1ZS4KK2Z1bmN0aW9uIHNlbGVjdEVsZW1lbnQoZG9jLCBlbGVtZW50KQoreworICAgIGlm
IChlbGVtZW50LnRhZ05hbWUudG9Mb3dlckNhc2UoKSA9PSAnaW5wdXQnKSB7CisgICAgICAgIGVs
ZW1lbnQuZm9jdXMoKTsKKyAgICAgICAgZWxlbWVudC5zZWxlY3QoKTsKKyAgICAgICAgcmV0dXJu
IGVsZW1lbnQudmFsdWU7CisgICAgfSBlbHNlIHsKKyAgICAgICAgZG9jLmdldFNlbGVjdGlvbigp
LnNlbGVjdEFsbENoaWxkcmVuKGVsZW1lbnQpOworICAgICAgICByZXR1cm4gZWxlbWVudC5pbm5l
clRleHQ7CisgICAgfQorfQorCitmdW5jdGlvbiB0ZXN0Q29weUFuZFBhc3RlVGV4dHMoZnJvbURv
Y3VtZW50LCBmcm9tTmFtZSwgdG9Eb2N1bWVudCwgdG9OYW1lKQoreworICAgIHZhciByZXN1bHRz
RWxlbWVudCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJyZXN1bHRzIik7CisKKyAgICB2YXIg
cGFzdGVib2FyZEVsZW1lbnQgPSB0b0RvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJwYXN0ZWJvYXJk
Iik7CisKKyAgICB2YXIgZnJvbUVsZW1lbnROYW1lcyA9IFsiZGl2IiwgInRyYW5zZm9ybSIsICJz
ZWN1cmUiLCAiY29udHJvbCJdOworICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZnJvbUVsZW1lbnRO
YW1lcy5sZW5ndGg7IGkrKykgeworICAgICAgICB2YXIgZnJvbUVsZW1lbnROYW1lID0gZnJvbUVs
ZW1lbnROYW1lc1tpXTsKKyAgICAgICAgdmFyIGZyb21FbGVtZW50ID0gZnJvbURvY3VtZW50Lmdl
dEVsZW1lbnRCeUlkKGZyb21FbGVtZW50TmFtZSk7CisgICAgICAgIHNlbGVjdEVsZW1lbnQoZnJv
bURvY3VtZW50LCBmcm9tRWxlbWVudCk7CisgICAgICAgIGZyb21Eb2N1bWVudC5leGVjQ29tbWFu
ZCgiQ29weSIpOworCisgICAgICAgIHZhciB0b0VsZW1lbnROYW1lU3VmZml4ZXMgPSBbInRleHQt
Y29udHJvbCIsICJjb250ZW50LWVkaXRhYmxlIl07CisgICAgICAgIGZvciAodmFyIGogPSAwOyBq
IDwgdG9FbGVtZW50TmFtZVN1ZmZpeGVzLmxlbmd0aDsgaisrKSB7CisgICAgICAgICAgICB2YXIg
dG9FbGVtZW50TmFtZVN1ZmZpeCA9IHRvRWxlbWVudE5hbWVTdWZmaXhlc1tqXTsKKworICAgICAg
ICAgICAgdmFyIHRlc3ROYW1lID0gImZyb20gIiArIGZyb21OYW1lLnRvVXBwZXJDYXNlKCkgKyAi
ICIgKyBmcm9tRWxlbWVudE5hbWUgKyAiIHRvICIgKyB0b05hbWUudG9VcHBlckNhc2UoKSArICIg
IiArIHRvRWxlbWVudE5hbWVTdWZmaXggKyAiOiAiOworICAgICAgICAgICAgdmFyIHRvRGVzY3Jp
cHRpb25UZXh0ID0gdG9Eb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSh0ZXN0TmFtZSk7CisgICAgICAg
ICAgICBwYXN0ZWJvYXJkRWxlbWVudC5hcHBlbmRDaGlsZCh0b0Rlc2NyaXB0aW9uVGV4dCk7Cisg
ICAgICAgICAgICB2YXIgdG9FbGVtZW50ID0gbnVsbDsKKyAgICAgICAgICAgIGlmICh0b0VsZW1l
bnROYW1lU3VmZml4ID09ICJ0ZXh0LWNvbnRyb2wiKSB7CisgICAgICAgICAgICAgICAgdG9FbGVt
ZW50ID0gdG9Eb2N1bWVudC5jcmVhdGVFbGVtZW50KCJpbnB1dCIpOworICAgICAgICAgICAgICAg
IHRvRWxlbWVudC52YWx1ZSA9ICJGQUlMIjsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAg
ICAgICAgICAgdG9FbGVtZW50ID0gdG9Eb2N1bWVudC5jcmVhdGVFbGVtZW50KCJzcGFuIik7Cisg
ICAgICAgICAgICAgICAgdG9FbGVtZW50LmNvbnRlbnRFZGl0YWJsZSA9ICJ0cnVlIjsKKyAgICAg
ICAgICAgICAgICB0b0VsZW1lbnQuaW5uZXJIVE1MID0gIkZBSUwiOworICAgICAgICAgICAgfQor
ICAgICAgICAgICAgcGFzdGVib2FyZEVsZW1lbnQuYXBwZW5kQ2hpbGQodG9FbGVtZW50KTsKKyAg
ICAgICAgICAgIHBhc3RlYm9hcmRFbGVtZW50LmFwcGVuZENoaWxkKHRvRG9jdW1lbnQuY3JlYXRl
RWxlbWVudCgiYnIiKSk7CisKKyAgICAgICAgICAgIHNlbGVjdEVsZW1lbnQodG9Eb2N1bWVudCwg
dG9FbGVtZW50KTsKKyAgICAgICAgICAgIHRvRG9jdW1lbnQuZXhlY0NvbW1hbmQoIlBhc3RlIik7
CisgICAgICAgICAgICB2YXIgYWN0dWFsVGV4dCA9IHNlbGVjdEVsZW1lbnQodG9Eb2N1bWVudCwg
dG9FbGVtZW50KTsKKworICAgICAgICAgICAgdmFyIHJlc3VsdCA9ICJQQVNTIjsKKyAgICAgICAg
ICAgIHZhciBleHBlY3RlZExlYWRpbmdTdHJpbmcgPSAiXFxcXCBmcm9tICI7CisgICAgICAgICAg
ICBpZiAoZnJvbUVsZW1lbnROYW1lID09ICJzZWN1cmUiKQorICAgICAgICAgICAgICAgIGV4cGVj
dGVkTGVhZGluZ1N0cmluZyA9ICLigKLigKLigKLigKLigKLigKLigKIiOworICAgICAgICAgICAg
ZWxzZSBpZiAoZnJvbUVsZW1lbnROYW1lID09ICJ0cmFuc2Zvcm0iKQorICAgICAgICAgICAgICAg
IGV4cGVjdGVkTGVhZGluZ1N0cmluZyA9IGV4cGVjdGVkTGVhZGluZ1N0cmluZy50b1VwcGVyQ2Fz
ZSgpOworICAgICAgICAgICAgaWYgKGFjdHVhbFRleHQuc2VhcmNoKGV4cGVjdGVkTGVhZGluZ1N0
cmluZykgIT0gMCkKKyAgICAgICAgICAgICAgICByZXN1bHQgPSAiRkFJTDogdGhlIGFjdHVhbCB0
ZXh0IHdhcyAnIiArIGFjdHVhbFRleHQgKyAiJyAoY2hhciBjb2RlIG9mIHRoZSBmaXJzdCBjaGFy
YWN0ZXIgd2FzICIgKyBhY3R1YWxUZXh0LmNoYXJDb2RlQXQoMCkgKyAiKSI7CisKKyAgICAgICAg
ICAgIHJlc3VsdHNFbGVtZW50LmlubmVySFRNTCArPSB0ZXN0TmFtZSArIHJlc3VsdCArICI8YnI+
IjsKKyAgICAgICAgfQorICAgIH0KK30KKworZnVuY3Rpb24gdGVzdCgpCit7CisgICAgdGVzdENv
cHlBbmRQYXN0ZVRleHRzKGZyYW1lc1swXS5kb2N1bWVudCwgImV1YyIsIGRvY3VtZW50LCAidXRm
OCIpOworICAgIHRlc3RDb3B5QW5kUGFzdGVUZXh0cyhkb2N1bWVudCwgInV0ZjgiLCBmcmFtZXNb
MF0uZG9jdW1lbnQsICJldWMiKTsKK30KKworPC9zY3JpcHQ+Cis8L2hlYWQ+CisKKzxib2R5IG9u
bG9hZD0idGVzdCgpIj4KKworPGRpdj4KKzxpZnJhbWUgc3JjPSJyZXNvdXJjZXMvY29weS1iYWNr
c2xhc2gtZXVjLmh0bWwiIHdpZHRoPSI2MDAiIGhlaWdodD0iMzAwIj48L2lmcmFtZT4KKzwvZGl2
PgorCis8aDI+T3JpZ2luYWwgdGV4dHMgd2hpY2ggd2lsbCBiZSBjb3BpZWQ8L2gyPgorPGRpdiBp
ZD0iZGl2Ij5cIGZyb20gVVRGOCBwYWdlPC9kaXY+Cis8ZGl2IGlkPSJ0cmFuc2Zvcm0iIHN0eWxl
PSJ0ZXh0LXRyYW5zZm9ybTp1cHBlcmNhc2UiPlwgZnJvbSBVVEY4IHBhZ2UgKHRyYW5zZm9ybWVk
KTwvZGl2PgorPGRpdiBpZD0ic2VjdXJlIiBzdHlsZT0iLXdlYmtpdC10ZXh0LXNlY3VyaXR5OmRp
c2MiPlwgZnJvbSBVVEY4IHBhZ2UgKHNlY3VyZSk8L2Rpdj4KKzxpbnB1dCBpZD0iY29udHJvbCIg
dmFsdWU9IlwgZnJvbSBVVEY4IHRleHQgY29udHJvbCI+CisKKzxoMj5UZXh0cyBpbiB0aGUgRVVD
IGZyYW1lIHdpbGwgYmUgcGFzdGVkIGhlcmU8L2gyPgorPGRpdiBpZD0icGFzdGVib2FyZCI+PC9k
aXY+CisKKzxicj4KKworPGgyPlJlc3VsdHM8L2gyPgorPHAgaWQ9InJlc3VsdHMiPgorPC9wPgor
Cis8L2JvZHk+CisKKzwvaHRtbD4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2VkaXRpbmcvcGFz
dGVib2FyZC9yZXNvdXJjZXMvY29weS1iYWNrc2xhc2gtZXVjLmh0bWwgYi9MYXlvdXRUZXN0cy9l
ZGl0aW5nL3Bhc3RlYm9hcmQvcmVzb3VyY2VzL2NvcHktYmFja3NsYXNoLWV1Yy5odG1sCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVhOWY0MDIKLS0tIC9kZXYvbnVsbAorKysg
Yi9MYXlvdXRUZXN0cy9lZGl0aW5nL3Bhc3RlYm9hcmQvcmVzb3VyY2VzL2NvcHktYmFja3NsYXNo
LWV1Yy5odG1sCkBAIC0wLDAgKzEsMjEgQEAKKzwhRE9DVFlQRSBodG1sPgorPGh0bWw+CisKKzxo
ZWFkPgorPG1ldGEgY2hhcnNldD0iRVVDLUpQIj4KKzwvaGVhZD4KKworPGJvZHk+CisKKzxoMj5P
cmlnaW5hbCB0ZXh0cyB3aGljaCB3aWxsIGJlIGNvcGllZDwvaDI+Cis8ZGl2IGlkPSJkaXYiPlwg
ZnJvbSBFVUMgcGFnZTwvZGl2PgorPGRpdiBpZD0idHJhbnNmb3JtIiBzdHlsZT0idGV4dC10cmFu
c2Zvcm06dXBwZXJjYXNlIj5cIGZyb20gRVVDIHBhZ2UgKHRyYW5zZm9ybWVkKTwvZGl2PgorPGRp
diBpZD0ic2VjdXJlIiBzdHlsZT0iLXdlYmtpdC10ZXh0LXNlY3VyaXR5OmRpc2MiPlwgZnJvbSBF
VUMgcGFnZSAoc2VjdXJlKTwvZGl2PgorPGlucHV0IGlkPSJjb250cm9sIiB2YWx1ZT0iXCBmcm9t
IEVVQyB0ZXh0IGNvbnRyb2wiPgorCis8aDI+VGV4dHMgaW4gdGhlIFVURjggZnJhbWUgd2lsbCBi
ZSBwYXN0ZWQgaGVyZTwvaDI+Cis8ZGl2IGlkPSJwYXN0ZWJvYXJkIj48L2Rpdj4KKworPC9ib2R5
PgorCis8L2h0bWw+CmRpZmYgLS1naXQgYS9XZWJDb3JlL0NoYW5nZUxvZyBiL1dlYkNvcmUvQ2hh
bmdlTG9nCmluZGV4IDA5ZmFkOGMuLmUxMjc5ZTkgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvQ2hhbmdl
TG9nCisrKyBiL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNDIgQEAKKzIwMTAtMDQtMjAg
IFNoaW5pY2hpcm8gSGFtYWppICA8aGFtYWppQGNocm9taXVtLm9yZz4KKworICAgICAgICBSZXZp
ZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBBIGJhY2tzbGFzaCBpbiBFVUMtSlAg
YmVjb21lcyB0byBhIHllbiBzaWduIHdoZW4gaXQgaXMgY29waWVkCisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0zNjQxOQorCisgICAgICAgIFRlc3RzOiBl
ZGl0aW5nL2V4ZWNDb21tYW5kL3RyYW5zcG9zZS1iYWNrc2xhc2gtd2l0aC1ldWMuaHRtbAorICAg
ICAgICAgICAgICAgZWRpdGluZy9wYXN0ZWJvYXJkL2NvcHktYmFja3NsYXNoLXdpdGgtZXVjLmh0
bWwKKworICAgICAgICAqIGVkaXRpbmcvRWRpdG9yLmNwcDogUmVtb3ZlIGFuIHVubmVjZXNzYXJ5
IGRpc3BsYXlTdHJpbmdNb2RpZmllZEJ5RW5jb2RpbmcgY2FsbHMuCisgICAgICAgIChXZWJDb3Jl
OjpFZGl0b3I6OmFkZFRvS2lsbFJpbmcpOgorICAgICAgICAqIGVkaXRpbmcvVGV4dEl0ZXJhdG9y
LmNwcDogVGV4dEl0ZXJhdG9yIGNhbiB1c2UgUmVuZGVyVGV4dDo6dGV4dFdpdGhvdXRUcmFuc2Nv
ZGluZyBhbmQgbm93IHBsYWluVGV4dCgpIHVzZXMgdGhpcyB2ZXJzaW9uCisgICAgICAgIChXZWJD
b3JlOjpUZXh0SXRlcmF0b3I6OlRleHRJdGVyYXRvcik6CisgICAgICAgIChXZWJDb3JlOjpUZXh0
SXRlcmF0b3I6OmluaXQpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dEl0ZXJhdG9yOjplbWl0VGV4
dCk6CisgICAgICAgIChXZWJDb3JlOjpwbGFpblRleHRUb01hbGxvY0FsbG9jYXRlZEJ1ZmZlcik6
CisgICAgICAgICogZWRpdGluZy9UZXh0SXRlcmF0b3IuaDoKKyAgICAgICAgKFdlYkNvcmU6Oik6
CisgICAgICAgICogcGxhdGZvcm0vbWFjL1Bhc3RlYm9hcmRNYWMubW06IFJlbW92ZSBhbiB1bm5l
Y2Vzc2FyeSBkaXNwbGF5U3RyaW5nTW9kaWZpZWRCeUVuY29kaW5nIGNhbGwuCisgICAgICAgIChX
ZWJDb3JlOjpQYXN0ZWJvYXJkOjp3cml0ZVNlbGVjdGlvbik6CisgICAgICAgICogcGxhdGZvcm0v
dGV4dC9UZXh0RW5jb2RpbmcuaDogTWFrZSBiYWNrc2xhc2hBc0N1cnJlbmN5U3ltYm9sIHB1Ymxp
Yy4KKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyVGV4dC5jcHA6IEFkZCBSZW5kZXJUZXh0Ojp0
ZXh0V2l0aG91dFRyYW5zY29kaW5nCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUZXh0OjpSZW5k
ZXJUZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRleHQ6OnVwZGF0ZU5lZWRzVHJhbnNj
b2RpbmcpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGV4dDo6c3R5bGVEaWRDaGFuZ2UpOgor
ICAgICAgICAoV2ViQ29yZTo6aXNJbmxpbmVGbG93T3JFbXB0eVRleHQpOgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyVGV4dDo6cHJldmlvdXNDaGFyYWN0ZXIpOgorICAgICAgICAoV2ViQ29yZTo6
UmVuZGVyVGV4dDo6c2V0VGV4dEludGVybmFsKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRl
eHQ6OnRleHRXaXRob3V0VHJhbnNjb2RpbmcpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGV4
dDo6dHJhbnNmb3JtVGV4dCk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlclRleHQuaDoKKyAg
ICAgICAgKiByZW5kZXJpbmcvUmVuZGVyVGV4dENvbnRyb2wuY3BwOiBSZW1vdmUgYW4gdW5uZWNl
c3NhcnkgZGlzcGxheVN0cmluZ01vZGlmaWVkQnlFbmNvZGluZyBjYWxsLgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyVGV4dENvbnRyb2w6OnNldElubmVyVGV4dFZhbHVlKToKKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlclRleHRDb250cm9sOjpmaW5pc2hUZXh0KToKKyAgICAgICAgKiByZW5kZXJp
bmcvUmVuZGVyVGV4dEZyYWdtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRleHRG
cmFnbWVudDo6cHJldmlvdXNDaGFyYWN0ZXIpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJU
ZXh0RnJhZ21lbnQuaDoKKwogMjAxMC0wNC0xOSAgU2ltb24gRnJhc2VyICA8c2ltb24uZnJhc2Vy
QGFwcGxlLmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBieSBHZW9mZiBHYXJlbi4KZGlmZiAtLWdp
dCBhL1dlYkNvcmUvZWRpdGluZy9FZGl0b3IuY3BwIGIvV2ViQ29yZS9lZGl0aW5nL0VkaXRvci5j
cHAKaW5kZXggMTA2MWRkMi4uZTE3MWFjMSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9lZGl0aW5nL0Vk
aXRvci5jcHAKKysrIGIvV2ViQ29yZS9lZGl0aW5nL0VkaXRvci5jcHAKQEAgLTI3MDMsNyArMjcw
Myw3IEBAIHZvaWQgRWRpdG9yOjphZGRUb0tpbGxSaW5nKFJhbmdlKiByYW5nZSwgYm9vbCBwcmVw
ZW5kKQogICAgIGlmIChtX3Nob3VsZFN0YXJ0TmV3S2lsbFJpbmdTZXF1ZW5jZSkKICAgICAgICAg
c3RhcnROZXdLaWxsUmluZ1NlcXVlbmNlKCk7CiAKLSAgICBTdHJpbmcgdGV4dCA9IG1fZnJhbWUt
PmRpc3BsYXlTdHJpbmdNb2RpZmllZEJ5RW5jb2RpbmcocGxhaW5UZXh0KHJhbmdlKSk7CisgICAg
U3RyaW5nIHRleHQgPSBwbGFpblRleHQocmFuZ2UpOwogICAgIGlmIChwcmVwZW5kKQogICAgICAg
ICBwcmVwZW5kVG9LaWxsUmluZyh0ZXh0KTsKICAgICBlbHNlCmRpZmYgLS1naXQgYS9XZWJDb3Jl
L2VkaXRpbmcvVGV4dEl0ZXJhdG9yLmNwcCBiL1dlYkNvcmUvZWRpdGluZy9UZXh0SXRlcmF0b3Iu
Y3BwCmluZGV4IGEzODZjNmUuLmUwMjJlM2IgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvZWRpdGluZy9U
ZXh0SXRlcmF0b3IuY3BwCisrKyBiL1dlYkNvcmUvZWRpdGluZy9UZXh0SXRlcmF0b3IuY3BwCkBA
IC0yNTYsMTAgKzI1NiwxMSBAQCBUZXh0SXRlcmF0b3I6OlRleHRJdGVyYXRvcigpCiAgICAgLCBt
X2xhc3RDaGFyYWN0ZXIoMCkKICAgICAsIG1fZW1pdENoYXJhY3RlcnNCZXR3ZWVuQWxsVmlzaWJs
ZVBvc2l0aW9ucyhmYWxzZSkKICAgICAsIG1fZW50ZXJUZXh0Q29udHJvbHMoZmFsc2UpCisgICAg
LCBtX2VtaXRzVGV4dFdpdGhvdXRUcmFuc2NvZGluZyhmYWxzZSkKIHsKIH0KIAotVGV4dEl0ZXJh
dG9yOjpUZXh0SXRlcmF0b3IoY29uc3QgUmFuZ2UqIHIsIGJvb2wgZW1pdENoYXJhY3RlcnNCZXR3
ZWVuQWxsVmlzaWJsZVBvc2l0aW9ucywgYm9vbCBlbnRlclRleHRDb250cm9scykgCitUZXh0SXRl
cmF0b3I6OlRleHRJdGVyYXRvcihjb25zdCBSYW5nZSogciwgYm9vbCBlbWl0Q2hhcmFjdGVyc0Jl
dHdlZW5BbGxWaXNpYmxlUG9zaXRpb25zLCBib29sIGVudGVyVGV4dENvbnRyb2xzKQogICAgIDog
bV9zdGFydENvbnRhaW5lcigwKSAKICAgICAsIG1fc3RhcnRPZmZzZXQoMCkKICAgICAsIG1fZW5k
Q29udGFpbmVyKDApCkBAIC0yNjksNiArMjcwLDI3IEBAIFRleHRJdGVyYXRvcjo6VGV4dEl0ZXJh
dG9yKGNvbnN0IFJhbmdlKiByLCBib29sIGVtaXRDaGFyYWN0ZXJzQmV0d2VlbkFsbFZpc2libGVQ
CiAgICAgLCBtX3RleHRMZW5ndGgoMCkKICAgICAsIG1fZW1pdENoYXJhY3RlcnNCZXR3ZWVuQWxs
VmlzaWJsZVBvc2l0aW9ucyhlbWl0Q2hhcmFjdGVyc0JldHdlZW5BbGxWaXNpYmxlUG9zaXRpb25z
KQogICAgICwgbV9lbnRlclRleHRDb250cm9scyhlbnRlclRleHRDb250cm9scykKKyAgICAsIG1f
ZW1pdHNUZXh0V2l0aG91dFRyYW5zY29kaW5nKGZhbHNlKQoreworICAgIGluaXQocik7Cit9CisK
K1RleHRJdGVyYXRvcjo6VGV4dEl0ZXJhdG9yKGNvbnN0IFJhbmdlKiByLCBUZXh0SXRlcmF0b3JC
ZWhhdmlvciBiZWhhdmlvcikKKyAgICA6IG1fc3RhcnRDb250YWluZXIoMCkKKyAgICAsIG1fc3Rh
cnRPZmZzZXQoMCkKKyAgICAsIG1fZW5kQ29udGFpbmVyKDApCisgICAgLCBtX2VuZE9mZnNldCgw
KQorICAgICwgbV9wb3NpdGlvbk5vZGUoMCkKKyAgICAsIG1fdGV4dENoYXJhY3RlcnMoMCkKKyAg
ICAsIG1fdGV4dExlbmd0aCgwKQorICAgICwgbV9lbWl0Q2hhcmFjdGVyc0JldHdlZW5BbGxWaXNp
YmxlUG9zaXRpb25zKGJlaGF2aW9yICYgVGV4dEl0ZXJhdG9yQmVoYXZpb3JFbWl0Q2hhcmFjdGVy
c0JldHdlZW5BbGxWaXNpYmxlUG9zaXRpb25zKQorICAgICwgbV9lbnRlclRleHRDb250cm9scyhi
ZWhhdmlvciAmIFRleHRJdGVyYXRvckJlaGF2aW9yRW50ZXJUZXh0Q29udHJvbHMpCisgICAgLCBt
X2VtaXRzVGV4dFdpdGhvdXRUcmFuc2NvZGluZyhiZWhhdmlvciAmIFRleHRJdGVyYXRvckJlaGF2
aW9yRW1pdHNUZXh0c1dpdGhvdXRUcmFuc2NvZGluZykKK3sKKyAgICBpbml0KHIpOworfQorCit2
b2lkIFRleHRJdGVyYXRvcjo6aW5pdChjb25zdCBSYW5nZSogcikKIHsKICAgICBpZiAoIXIpCiAg
ICAgICAgIHJldHVybjsKQEAgLTg4OSw3ICs5MTEsNyBAQCB2b2lkIFRleHRJdGVyYXRvcjo6ZW1p
dENoYXJhY3RlcihVQ2hhciBjLCBOb2RlKiB0ZXh0Tm9kZSwgTm9kZSogb2Zmc2V0QmFzZU5vZGUs
CiB2b2lkIFRleHRJdGVyYXRvcjo6ZW1pdFRleHQoTm9kZSogdGV4dE5vZGUsIGludCB0ZXh0U3Rh
cnRPZmZzZXQsIGludCB0ZXh0RW5kT2Zmc2V0KQogewogICAgIFJlbmRlclRleHQqIHJlbmRlcmVy
ID0gdG9SZW5kZXJUZXh0KG1fbm9kZS0+cmVuZGVyZXIoKSk7Ci0gICAgU3RyaW5nIHN0ciA9IHJl
bmRlcmVyLT50ZXh0KCk7CisgICAgU3RyaW5nIHN0ciA9IG1fZW1pdHNUZXh0V2l0aG91dFRyYW5z
Y29kaW5nID8gcmVuZGVyZXItPnRleHRXaXRob3V0VHJhbnNjb2RpbmcoKSA6IHJlbmRlcmVyLT50
ZXh0KCk7CiAgICAgQVNTRVJUKHN0ci5jaGFyYWN0ZXJzKCkpOwogCiAgICAgbV9wb3NpdGlvbk5v
ZGUgPSB0ZXh0Tm9kZTsKQEAgLTIxMDQsNyArMjEyNiw3IEBAIFBhc3NSZWZQdHI8UmFuZ2U+IFRl
eHRJdGVyYXRvcjo6cmFuZ2VGcm9tTG9jYXRpb25BbmRMZW5ndGgoRWxlbWVudCogc2NvcGUsIGlu
dCByCiAKIC8vIC0tLS0tLS0tCiAgICAgCi1VQ2hhciogcGxhaW5UZXh0VG9NYWxsb2NBbGxvY2F0
ZWRCdWZmZXIoY29uc3QgUmFuZ2UqIHIsIHVuc2lnbmVkJiBidWZmZXJMZW5ndGgsIGJvb2wgaXNE
aXNwbGF5U3RyaW5nKSAKK1VDaGFyKiBwbGFpblRleHRUb01hbGxvY0FsbG9jYXRlZEJ1ZmZlcihj
b25zdCBSYW5nZSogciwgdW5zaWduZWQmIGJ1ZmZlckxlbmd0aCwgYm9vbCBpc0Rpc3BsYXlTdHJp
bmcpCiB7CiAgICAgVUNoYXIqIHJlc3VsdCA9IDA7CiAKQEAgLTIxMTYsNyArMjEzOCw3IEBAIFVD
aGFyKiBwbGFpblRleHRUb01hbGxvY0FsbG9jYXRlZEJ1ZmZlcihjb25zdCBSYW5nZSogciwgdW5z
aWduZWQmIGJ1ZmZlckxlbmd0aCwKICAgICBWZWN0b3I8VGV4dFNlZ21lbnQ+KiB0ZXh0U2VnbWVu
dHMgPSAwOwogICAgIFZlY3RvcjxVQ2hhcj4gdGV4dEJ1ZmZlcjsKICAgICB0ZXh0QnVmZmVyLnJl
c2VydmVJbml0aWFsQ2FwYWNpdHkoY01heFNlZ21lbnRTaXplKTsKLSAgICBmb3IgKFRleHRJdGVy
YXRvciBpdChyKTsgIWl0LmF0RW5kKCk7IGl0LmFkdmFuY2UoKSkgeworICAgIGZvciAoVGV4dEl0
ZXJhdG9yIGl0KHIsIGlzRGlzcGxheVN0cmluZyA/IFRleHRJdGVyYXRvckJlaGF2aW9yRGVmYXVs
dCA6IFRleHRJdGVyYXRvckJlaGF2aW9yRW1pdHNUZXh0c1dpdGhvdXRUcmFuc2NvZGluZyk7ICFp
dC5hdEVuZCgpOyBpdC5hZHZhbmNlKCkpIHsKICAgICAgICAgaWYgKHRleHRCdWZmZXIuc2l6ZSgp
ICYmIHRleHRCdWZmZXIuc2l6ZSgpICsgaXQubGVuZ3RoKCkgPiBjTWF4U2VnbWVudFNpemUpIHsK
ICAgICAgICAgICAgIFVDaGFyKiBuZXdTZWdtZW50QnVmZmVyID0gc3RhdGljX2Nhc3Q8VUNoYXIq
PihtYWxsb2ModGV4dEJ1ZmZlci5zaXplKCkgKiBzaXplb2YoVUNoYXIpKSk7CiAgICAgICAgICAg
ICBpZiAoIW5ld1NlZ21lbnRCdWZmZXIpCmRpZmYgLS1naXQgYS9XZWJDb3JlL2VkaXRpbmcvVGV4
dEl0ZXJhdG9yLmggYi9XZWJDb3JlL2VkaXRpbmcvVGV4dEl0ZXJhdG9yLmgKaW5kZXggNDRhZjNl
NS4uODdmNGM1MyAxMDA2NDQKLS0tIGEvV2ViQ29yZS9lZGl0aW5nL1RleHRJdGVyYXRvci5oCisr
KyBiL1dlYkNvcmUvZWRpdGluZy9UZXh0SXRlcmF0b3IuaApAQCAtNjgsMTEgKzY4LDE5IEBAIHBy
aXZhdGU6CiAvLyBhdCBwb2ludHMgd2hlcmUgcmVwbGFjZWQgZWxlbWVudHMgYnJlYWsgdXAgdGhl
IHRleHQgZmxvdy4gIFRoZSB0ZXh0IGNvbWVzIGJhY2sgaW4KIC8vIGNodW5rcyBzbyBhcyB0byBv
cHRpbWl6ZSBmb3IgcGVyZm9ybWFuY2Ugb2YgdGhlIGl0ZXJhdGlvbi4KIAorZW51bSBUZXh0SXRl
cmF0b3JCZWhhdmlvciB7CisgICAgVGV4dEl0ZXJhdG9yQmVoYXZpb3JEZWZhdWx0ID0gMCwKKyAg
ICBUZXh0SXRlcmF0b3JCZWhhdmlvckVtaXRDaGFyYWN0ZXJzQmV0d2VlbkFsbFZpc2libGVQb3Np
dGlvbnMgPSAxIDw8IDAsCisgICAgVGV4dEl0ZXJhdG9yQmVoYXZpb3JFbnRlclRleHRDb250cm9s
cyA9IDEgPDwgMSwKKyAgICBUZXh0SXRlcmF0b3JCZWhhdmlvckVtaXRzVGV4dHNXaXRob3V0VHJh
bnNjb2RpbmcgPSAxIDw8IDIsCit9OworCiBjbGFzcyBUZXh0SXRlcmF0b3IgewogcHVibGljOgog
ICAgIFRleHRJdGVyYXRvcigpOwotICAgIGV4cGxpY2l0IFRleHRJdGVyYXRvcihjb25zdCBSYW5n
ZSosIGJvb2wgZW1pdENoYXJhY3RlcnNCZXR3ZWVuQWxsVmlzaWJsZVBvc2l0aW9ucyA9IGZhbHNl
LCBib29sIGVudGVyVGV4dENvbnRyb2xzID0gZmFsc2UpOwotICAgIAorICAgIFRleHRJdGVyYXRv
cihjb25zdCBSYW5nZSosIGJvb2wgZW1pdENoYXJhY3RlcnNCZXR3ZWVuQWxsVmlzaWJsZVBvc2l0
aW9ucyA9IGZhbHNlLCBib29sIGVudGVyVGV4dENvbnRyb2xzID0gZmFsc2UpOworICAgIFRleHRJ
dGVyYXRvcihjb25zdCBSYW5nZSosIFRleHRJdGVyYXRvckJlaGF2aW9yKTsKKwogICAgIGJvb2wg
YXRFbmQoKSBjb25zdCB7IHJldHVybiAhbV9wb3NpdGlvbk5vZGU7IH0KICAgICB2b2lkIGFkdmFu
Y2UoKTsKICAgICAKQEAgLTg3LDYgKzk1LDcgQEAgcHVibGljOgogICAgIHN0YXRpYyBQYXNzUmVm
UHRyPFJhbmdlPiBzdWJyYW5nZShSYW5nZSogZW50aXJlUmFuZ2UsIGludCBjaGFyYWN0ZXJPZmZz
ZXQsIGludCBjaGFyYWN0ZXJDb3VudCk7CiAgICAgCiBwcml2YXRlOgorICAgIHZvaWQgaW5pdChj
b25zdCBSYW5nZSopOwogICAgIHZvaWQgZXhpdE5vZGUoKTsKICAgICBib29sIHNob3VsZFJlcHJl
c2VudE5vZGVPZmZzZXRaZXJvKCk7CiAgICAgYm9vbCBzaG91bGRFbWl0U3BhY2VCZWZvcmVBbmRB
ZnRlck5vZGUoTm9kZSopOwpAQCAtMTQ3LDYgKzE1Niw5IEBAIHByaXZhdGU6CiAgICAgLy8gbW92
ZVBhcmFncmFwaHMgdG8gbm90IGNsb25lL2Rlc3Ryb3kgbW92ZWQgY29udGVudC4KICAgICBib29s
IG1fZW1pdENoYXJhY3RlcnNCZXR3ZWVuQWxsVmlzaWJsZVBvc2l0aW9uczsKICAgICBib29sIG1f
ZW50ZXJUZXh0Q29udHJvbHM7CisKKyAgICAvLyBVc2VkIHdoZW4gd2Ugd2FudCB0ZXh0cyBmb3Ig
Y29weWluZywgcGFzdGluZywgYW5kIHRyYW5zcG9zaW5nLgorICAgIGJvb2wgbV9lbWl0c1RleHRX
aXRob3V0VHJhbnNjb2Rpbmc7CiB9OwogCiAvLyBJdGVyYXRlcyB0aHJvdWdoIHRoZSBET00gcmFu
Z2UsIHJldHVybmluZyBhbGwgdGhlIHRleHQsIGFuZCAwLWxlbmd0aCBib3VuZGFyaWVzCmRpZmYg
LS1naXQgYS9XZWJDb3JlL3BsYXRmb3JtL21hYy9QYXN0ZWJvYXJkTWFjLm1tIGIvV2ViQ29yZS9w
bGF0Zm9ybS9tYWMvUGFzdGVib2FyZE1hYy5tbQppbmRleCAwODZiMjcyLi4wM2VkZTAzIDEwMDY0
NAotLS0gYS9XZWJDb3JlL3BsYXRmb3JtL21hYy9QYXN0ZWJvYXJkTWFjLm1tCisrKyBiL1dlYkNv
cmUvcGxhdGZvcm0vbWFjL1Bhc3RlYm9hcmRNYWMubW0KQEAgLTE4NCw3ICsxODQsNyBAQCB2b2lk
IFBhc3RlYm9hcmQ6OndyaXRlU2VsZWN0aW9uKE5TUGFzdGVib2FyZCogcGFzdGVib2FyZCwgUmFu
Z2UqIHNlbGVjdGVkUmFuZ2UsCiAgICAgaWYgKFt0eXBlcyBjb250YWluc09iamVjdDpOU1N0cmlu
Z1Bib2FyZFR5cGVdKSB7CiAgICAgICAgIC8vIE1hcCAmbmJzcDsgdG8gYSBwbGFpbiBvbGQgc3Bh
Y2UgYmVjYXVzZSB0aGlzIGlzIGJldHRlciBmb3Igc291cmNlIGNvZGUsIG90aGVyIGJyb3dzZXJz
IGRvIGl0LAogICAgICAgICAvLyBhbmQgYmVjYXVzZSBIVE1MIGZvcmNlcyB5b3UgdG8gZG8gdGhp
cyBhbnkgdGltZSB5b3Ugd2FudCB0d28gc3BhY2VzIGluIGEgcm93LgotICAgICAgICBTdHJpbmcg
dGV4dCA9IGZyYW1lLT5kaXNwbGF5U3RyaW5nTW9kaWZpZWRCeUVuY29kaW5nKHNlbGVjdGVkUmFu
Z2UtPnRleHQoKSk7CisgICAgICAgIFN0cmluZyB0ZXh0ID0gc2VsZWN0ZWRSYW5nZS0+dGV4dCgp
OwogICAgICAgICBOU011dGFibGVTdHJpbmcgKnMgPSBbW1soTlNTdHJpbmcqKXRleHQgY29weV0g
YXV0b3JlbGVhc2VdIG11dGFibGVDb3B5XTsKICAgICAgICAgCiAgICAgICAgIE5TU3RyaW5nICpO
b25CcmVha2luZ1NwYWNlU3RyaW5nID0gW05TU3RyaW5nIHN0cmluZ1dpdGhDaGFyYWN0ZXJzOiZu
b0JyZWFrU3BhY2UgbGVuZ3RoOjFdOwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0
L1RleHRFbmNvZGluZy5oIGIvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L1RleHRFbmNvZGluZy5oCmlu
ZGV4IDc1NzQzNDQuLjM0MjliYjUgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9U
ZXh0RW5jb2RpbmcuaAorKysgYi9XZWJDb3JlL3BsYXRmb3JtL3RleHQvVGV4dEVuY29kaW5nLmgK
QEAgLTc3LDggKzc3LDkgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICBTdHJpbmcgZGVj
b2RlKGNvbnN0IGNoYXIqLCBzaXplX3QgbGVuZ3RoLCBib29sIHN0b3BPbkVycm9yLCBib29sJiBz
YXdFcnJvcikgY29uc3Q7CiAgICAgICAgIFdURjo6Q1N0cmluZyBlbmNvZGUoY29uc3QgVUNoYXIq
LCBzaXplX3QgbGVuZ3RoLCBVbmVuY29kYWJsZUhhbmRsaW5nKSBjb25zdDsKIAotICAgIHByaXZh
dGU6CiAgICAgICAgIFVDaGFyIGJhY2tzbGFzaEFzQ3VycmVuY3lTeW1ib2woKSBjb25zdDsKKwor
ICAgIHByaXZhdGU6CiAgICAgICAgIGJvb2wgaXNOb25CeXRlQmFzZWRFbmNvZGluZygpIGNvbnN0
OwogICAgICAgICBib29sIGlzVVRGN0VuY29kaW5nKCkgY29uc3Q7CiAKZGlmZiAtLWdpdCBhL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlclRleHQuY3BwIGIvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
VGV4dC5jcHAKaW5kZXggNjk1Mjk4Zi4uOTBhZDZkOCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyVGV4dC5jcHAKKysrIGIvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4dC5j
cHAKQEAgLTM5LDYgKzM5LDcgQEAKICNpbmNsdWRlICJTdHJpbmdCdWZmZXIuaCIKICNpbmNsdWRl
ICJUZXh0LmgiCiAjaW5jbHVkZSAiVGV4dEJyZWFrSXRlcmF0b3IuaCIKKyNpbmNsdWRlICJUZXh0
UmVzb3VyY2VEZWNvZGVyLmgiCiAjaW5jbHVkZSAiVmlzaWJsZVBvc2l0aW9uLmgiCiAjaW5jbHVk
ZSAiYnJlYWtfbGluZXMuaCIKICNpbmNsdWRlIDx3dGYvQWx3YXlzSW5saW5lLmg+CkBAIC04OCw3
ICs4OSw3IEBAIHN0YXRpYyB2b2lkIG1ha2VDYXBpdGFsaXplZChTdHJpbmcqIHN0cmluZywgVUNo
YXIgcHJldmlvdXMpCiBSZW5kZXJUZXh0OjpSZW5kZXJUZXh0KE5vZGUqIG5vZGUsIFBhc3NSZWZQ
dHI8U3RyaW5nSW1wbD4gc3RyKQogICAgICA6IFJlbmRlck9iamVjdChub2RlKQogICAgICAsIG1f
bWluV2lkdGgoLTEpCi0gICAgICwgbV90ZXh0KGRvY3VtZW50KCktPmRpc3BsYXlTdHJpbmdNb2Rp
ZmllZEJ5RW5jb2Rpbmcoc3RyKSkKKyAgICAgLCBtX3RleHQoc3RyKQogICAgICAsIG1fZmlyc3RU
ZXh0Qm94KDApCiAgICAgICwgbV9sYXN0VGV4dEJveCgwKQogICAgICAsIG1fbWF4V2lkdGgoLTEp
CkBAIC05OSw2ICsxMDAsNyBAQCBSZW5kZXJUZXh0OjpSZW5kZXJUZXh0KE5vZGUqIG5vZGUsIFBh
c3NSZWZQdHI8U3RyaW5nSW1wbD4gc3RyKQogICAgICAsIG1fY29udGFpbnNSZXZlcnNlZFRleHQo
ZmFsc2UpCiAgICAgICwgbV9pc0FsbEFTQ0lJKG1fdGV4dC5jb250YWluc09ubHlBU0NJSSgpKQog
ICAgICAsIG1fa25vd25Ub0hhdmVOb092ZXJmbG93QW5kTm9GYWxsYmFja0ZvbnRzKGZhbHNlKQor
ICAgICAsIG1fbmVlZHNUcmFuc2NvZGluZyhmYWxzZSkKIHsKICAgICBBU1NFUlQobV90ZXh0KTsK
IApAQCAtMTM1LDYgKzEzNywxMSBAQCBib29sIFJlbmRlclRleHQ6OmlzV29yZEJyZWFrKCkgY29u
c3QKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKK3ZvaWQgUmVuZGVyVGV4dDo6dXBkYXRlTmVlZHNU
cmFuc2NvZGluZygpCit7CisgICAgbV9uZWVkc1RyYW5zY29kaW5nID0gZG9jdW1lbnQoKS0+ZGVj
b2RlcigpICYmIGRvY3VtZW50KCktPmRlY29kZXIoKS0+ZW5jb2RpbmcoKS5iYWNrc2xhc2hBc0N1
cnJlbmN5U3ltYm9sKCkgIT0gJ1xcJzsKK30KKwogdm9pZCBSZW5kZXJUZXh0OjpzdHlsZURpZENo
YW5nZShTdHlsZURpZmZlcmVuY2UgZGlmZiwgY29uc3QgUmVuZGVyU3R5bGUqIG9sZFN0eWxlKQog
ewogICAgIC8vIFRoZXJlIGlzIG5vIG5lZWQgdG8gZXZlciBzY2hlZHVsZSByZXBhaW50cyBmcm9t
IGEgc3R5bGUgY2hhbmdlIG9mIGEgdGV4dCBydW4sIHNpbmNlCkBAIC0xNDYsMTAgKzE1MywxNSBA
QCB2b2lkIFJlbmRlclRleHQ6OnN0eWxlRGlkQ2hhbmdlKFN0eWxlRGlmZmVyZW5jZSBkaWZmLCBj
b25zdCBSZW5kZXJTdHlsZSogb2xkU3R5bAogICAgICAgICBtX2tub3duVG9IYXZlTm9PdmVyZmxv
d0FuZE5vRmFsbGJhY2tGb250cyA9IGZhbHNlOwogICAgIH0KIAorICAgIGJvb2wgbmVlZHNSZXNl
dFRleHQgPSBmYWxzZTsKKyAgICBpZiAoIW9sZFN0eWxlKSB7CisgICAgICAgIHVwZGF0ZU5lZWRz
VHJhbnNjb2RpbmcoKTsKKyAgICAgICAgbmVlZHNSZXNldFRleHQgPSBtX25lZWRzVHJhbnNjb2Rp
bmc7CisgICAgfQorCiAgICAgRVRleHRUcmFuc2Zvcm0gb2xkVHJhbnNmb3JtID0gb2xkU3R5bGUg
PyBvbGRTdHlsZS0+dGV4dFRyYW5zZm9ybSgpIDogVFROT05FOwogICAgIEVUZXh0U2VjdXJpdHkg
b2xkU2VjdXJpdHkgPSBvbGRTdHlsZSA/IG9sZFN0eWxlLT50ZXh0U2VjdXJpdHkoKSA6IFRTTk9O
RTsKLQotICAgIGlmIChvbGRUcmFuc2Zvcm0gIT0gc3R5bGUoKS0+dGV4dFRyYW5zZm9ybSgpIHx8
IG9sZFNlY3VyaXR5ICE9IHN0eWxlKCktPnRleHRTZWN1cml0eSgpKSB7CisgICAgaWYgKG5lZWRz
UmVzZXRUZXh0IHx8IG9sZFRyYW5zZm9ybSAhPSBzdHlsZSgpLT50ZXh0VHJhbnNmb3JtKCkgfHwg
b2xkU2VjdXJpdHkgIT0gc3R5bGUoKS0+dGV4dFNlY3VyaXR5KCkpIHsKICAgICAgICAgaWYgKFJl
ZlB0cjxTdHJpbmdJbXBsPiB0ZXh0VG9UcmFuc2Zvcm0gPSBvcmlnaW5hbFRleHQoKSkKICAgICAg
ICAgICAgIHNldFRleHQodGV4dFRvVHJhbnNmb3JtLnJlbGVhc2UoKSwgdHJ1ZSk7CiAgICAgfQpA
QCAtOTYwLDcgKzk3Miw3IEBAIHZvaWQgUmVuZGVyVGV4dDo6c2V0VGV4dFdpdGhPZmZzZXQoUGFz
c1JlZlB0cjxTdHJpbmdJbXBsPiB0ZXh0LCB1bnNpZ25lZCBvZmZzZXQsCiAgICAgc2V0VGV4dCh0
ZXh0LCBmb3JjZSk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgYm9vbCBpc0lubGluZUZsb3dPckVtcHR5
VGV4dChSZW5kZXJPYmplY3QqIG8pCitzdGF0aWMgaW5saW5lIGJvb2wgaXNJbmxpbmVGbG93T3JF
bXB0eVRleHQoY29uc3QgUmVuZGVyT2JqZWN0KiBvKQogewogICAgIGlmIChvLT5pc1JlbmRlcklu
bGluZSgpKQogICAgICAgICByZXR1cm4gdHJ1ZTsKQEAgLTk3MiwxMCArOTg0LDEwIEBAIHN0YXRp
YyBpbmxpbmUgYm9vbCBpc0lubGluZUZsb3dPckVtcHR5VGV4dChSZW5kZXJPYmplY3QqIG8pCiAg
ICAgcmV0dXJuICF0ZXh0LT5sZW5ndGgoKTsKIH0KIAotVUNoYXIgUmVuZGVyVGV4dDo6cHJldmlv
dXNDaGFyYWN0ZXIoKQorVUNoYXIgUmVuZGVyVGV4dDo6cHJldmlvdXNDaGFyYWN0ZXIoKSBjb25z
dAogewogICAgIC8vIGZpbmQgcHJldmlvdXMgdGV4dCByZW5kZXJlciBpZiBvbmUgZXhpc3RzCi0g
ICAgUmVuZGVyT2JqZWN0KiBwcmV2aW91c1RleHQgPSB0aGlzOworICAgIGNvbnN0IFJlbmRlck9i
amVjdCogcHJldmlvdXNUZXh0ID0gdGhpczsKICAgICB3aGlsZSAoKHByZXZpb3VzVGV4dCA9IHBy
ZXZpb3VzVGV4dC0+cHJldmlvdXNJblByZU9yZGVyKCkpKQogICAgICAgICBpZiAoIWlzSW5saW5l
Rmxvd09yRW1wdHlUZXh0KHByZXZpb3VzVGV4dCkpCiAgICAgICAgICAgICBicmVhazsKQEAgLTk4
NiwxMCArOTk4LDMxIEBAIFVDaGFyIFJlbmRlclRleHQ6OnByZXZpb3VzQ2hhcmFjdGVyKCkKICAg
ICByZXR1cm4gcHJldjsKIH0KIAordm9pZCBSZW5kZXJUZXh0Ojp0cmFuc2Zvcm1UZXh0KFN0cmlu
ZyYgdGV4dCkgY29uc3QKK3sKKyAgICBBU1NFUlQoc3R5bGUoKSk7CisgICAgc3dpdGNoIChzdHls
ZSgpLT50ZXh0VHJhbnNmb3JtKCkpIHsKKyAgICBjYXNlIFRUTk9ORToKKyAgICAgICAgYnJlYWs7
CisgICAgY2FzZSBDQVBJVEFMSVpFOgorICAgICAgICBtYWtlQ2FwaXRhbGl6ZWQoJnRleHQsIHBy
ZXZpb3VzQ2hhcmFjdGVyKCkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFVQUEVSQ0FTRToK
KyAgICAgICAgdGV4dC5tYWtlVXBwZXIoKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBMT1dF
UkNBU0U6CisgICAgICAgIHRleHQubWFrZUxvd2VyKCk7CisgICAgICAgIGJyZWFrOworICAgIH0K
K30KKwogdm9pZCBSZW5kZXJUZXh0OjpzZXRUZXh0SW50ZXJuYWwoUGFzc1JlZlB0cjxTdHJpbmdJ
bXBsPiB0ZXh0KQogewogICAgIEFTU0VSVCh0ZXh0KTsKLSAgICBtX3RleHQgPSBkb2N1bWVudCgp
LT5kaXNwbGF5U3RyaW5nTW9kaWZpZWRCeUVuY29kaW5nKHRleHQpOworICAgIGlmIChtX25lZWRz
VHJhbnNjb2RpbmcpCisgICAgICAgIG1fdGV4dCA9IGRvY3VtZW50KCktPmRpc3BsYXlTdHJpbmdN
b2RpZmllZEJ5RW5jb2RpbmcodGV4dCk7CisgICAgZWxzZQorICAgICAgICBtX3RleHQgPSB0ZXh0
OwogICAgIEFTU0VSVChtX3RleHQpOwogCiAjaWYgRU5BQkxFKFNWRykKQEAgLTEwMjIsMzMgKzEw
NTUsMjEgQEAgdm9pZCBSZW5kZXJUZXh0OjpzZXRUZXh0SW50ZXJuYWwoUGFzc1JlZlB0cjxTdHJp
bmdJbXBsPiB0ZXh0KQogI2VuZGlmCiAKICAgICBpZiAoc3R5bGUoKSkgewotICAgICAgICBzd2l0
Y2ggKHN0eWxlKCktPnRleHRUcmFuc2Zvcm0oKSkgewotICAgICAgICAgICAgY2FzZSBUVE5PTkU6
Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIENBUElUQUxJWkU6Ci0g
ICAgICAgICAgICAgICAgbWFrZUNhcGl0YWxpemVkKCZtX3RleHQsIHByZXZpb3VzQ2hhcmFjdGVy
KCkpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSBVUFBFUkNBU0U6
Ci0gICAgICAgICAgICAgICAgbV90ZXh0Lm1ha2VVcHBlcigpOwotICAgICAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICAgICAgY2FzZSBMT1dFUkNBU0U6Ci0gICAgICAgICAgICAgICAgbV90ZXh0
Lm1ha2VMb3dlcigpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9CisgICAgICAg
IHRyYW5zZm9ybVRleHQobV90ZXh0KTsKIAogICAgICAgICAvLyBXZSB1c2UgdGhlIHNhbWUgY2hh
cmFjdGVycyBoZXJlIGFzIGZvciBsaXN0IG1hcmtlcnMuCiAgICAgICAgIC8vIFNlZSB0aGUgbGlz
dE1hcmtlclRleHQgZnVuY3Rpb24gaW4gUmVuZGVyTGlzdE1hcmtlci5jcHAuCiAgICAgICAgIHN3
aXRjaCAoc3R5bGUoKS0+dGV4dFNlY3VyaXR5KCkpIHsKLSAgICAgICAgICAgIGNhc2UgVFNOT05F
OgotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSBUU0NJUkNMRToKLSAg
ICAgICAgICAgICAgICBtX3RleHQubWFrZVNlY3VyZSh3aGl0ZUJ1bGxldCk7Ci0gICAgICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIFRTRElTQzoKLSAgICAgICAgICAgICAgICBt
X3RleHQubWFrZVNlY3VyZShidWxsZXQpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICAgICAgY2FzZSBUU1NRVUFSRToKLSAgICAgICAgICAgICAgICBtX3RleHQubWFrZVNlY3VyZShi
bGFja1NxdWFyZSk7CisgICAgICAgIGNhc2UgVFNOT05FOgorICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgIGNhc2UgVFNDSVJDTEU6CisgICAgICAgICAgICBtX3RleHQubWFrZVNlY3VyZSh3aGl0
ZUJ1bGxldCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBUU0RJU0M6CisgICAg
ICAgICAgICBtX3RleHQubWFrZVNlY3VyZShidWxsZXQpOworICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgIGNhc2UgVFNTUVVBUkU6CisgICAgICAgICAgICBtX3RleHQubWFrZVNlY3VyZShibGFj
a1NxdWFyZSk7CiAgICAgICAgIH0KICAgICB9CiAKQEAgLTEwNzQsNiArMTA5NSwyMCBAQCB2b2lk
IFJlbmRlclRleHQ6OnNldFRleHQoUGFzc1JlZlB0cjxTdHJpbmdJbXBsPiB0ZXh0LCBib29sIGZv
cmNlKQogICAgICAgICBheE9iamVjdENhY2hlLT5jb250ZW50Q2hhbmdlZCh0aGlzKTsKIH0KIAor
U3RyaW5nIFJlbmRlclRleHQ6OnRleHRXaXRob3V0VHJhbnNjb2RpbmcoKSBjb25zdAoreworICAg
IC8vIElmIG1fdGV4dCBpc24ndCB0cmFuc2NvZGVkIG9yIGlzIHNlY3VyZSwgd2UgY2FuIGp1c3Qg
cmV0dXJuIHRoZSBtb2RpZmllZCB0ZXh0LgorICAgIGlmICghbV9uZWVkc1RyYW5zY29kaW5nIHx8
IHN0eWxlKCktPnRleHRTZWN1cml0eSgpICE9IFRTTk9ORSkKKyAgICAgICAgcmV0dXJuIHRleHQo
KTsKKworICAgIC8vIE90aGVyd2lzZSwgd2Ugc2hvdWxkIHVzZSBvcmlnaW5hbCB0ZXh0LiBJZiB0
ZXh0LXRyYW5zZm9ybSBpcworICAgIC8vIHNwZWNpZmllZCwgd2Ugc2hvdWxkIHRyYW5zZm9ybSB0
aGUgdGV4dCBvbiB0aGUgZmx5LgorICAgIFN0cmluZyB0ZXh0ID0gb3JpZ2luYWxUZXh0KCk7Cisg
ICAgaWYgKHN0eWxlKCkpCisgICAgICAgIHRyYW5zZm9ybVRleHQodGV4dCk7CisgICAgcmV0dXJu
IHRleHQ7Cit9CisKIGludCBSZW5kZXJUZXh0OjpsaW5lSGVpZ2h0KGJvb2wgZmlyc3RMaW5lLCBi
b29sKSBjb25zdAogewogICAgIC8vIEFsd2F5cyB1c2UgdGhlIGludGVyaW9yIGxpbmUgaGVpZ2h0
IG9mIHRoZSBwYXJlbnQgKGUuZy4sIGlmIG91ciBwYXJlbnQgaXMgYW4gaW5saW5lIGJsb2NrKS4K
ZGlmZiAtLWdpdCBhL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRleHQuaCBiL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlclRleHQuaAppbmRleCA5YjE0NjdkLi45MmM4MmUxIDEwMDY0NAotLS0gYS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0LmgKKysrIGIvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyVGV4dC5oCkBAIC01MSw2ICs1MSw3IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgZGVz
dHJveSgpOwogCiAgICAgU3RyaW5nSW1wbCogdGV4dCgpIGNvbnN0IHsgcmV0dXJuIG1fdGV4dC5p
bXBsKCk7IH0KKyAgICBTdHJpbmcgdGV4dFdpdGhvdXRUcmFuc2NvZGluZygpIGNvbnN0OwogCiAg
ICAgSW5saW5lVGV4dEJveCogY3JlYXRlSW5saW5lVGV4dEJveCgpOwogICAgIHZvaWQgZGlydHlM
aW5lQm94ZXMoYm9vbCBmdWxsTGF5b3V0KTsKQEAgLTEyOCw3ICsxMjksNyBAQCBwcm90ZWN0ZWQ6
CiAgICAgdmlydHVhbCB2b2lkIHN0eWxlRGlkQ2hhbmdlKFN0eWxlRGlmZmVyZW5jZSwgY29uc3Qg
UmVuZGVyU3R5bGUqIG9sZFN0eWxlKTsKIAogICAgIHZpcnR1YWwgdm9pZCBzZXRUZXh0SW50ZXJu
YWwoUGFzc1JlZlB0cjxTdHJpbmdJbXBsPik7Ci0gICAgdmlydHVhbCBVQ2hhciBwcmV2aW91c0No
YXJhY3RlcigpOworICAgIHZpcnR1YWwgVUNoYXIgcHJldmlvdXNDaGFyYWN0ZXIoKSBjb25zdDsK
ICAgICAKICAgICB2aXJ0dWFsIElubGluZVRleHRCb3gqIGNyZWF0ZVRleHRCb3goKTsgLy8gU3Vi
Y2xhc3NlZCBieSBTVkcuCiAKQEAgLTE0OCw2ICsxNDksOSBAQCBwcml2YXRlOgogICAgIGJvb2wg
Y29udGFpbnNPbmx5V2hpdGVzcGFjZSh1bnNpZ25lZCBmcm9tLCB1bnNpZ25lZCBsZW4pIGNvbnN0
OwogICAgIGludCB3aWR0aEZyb21DYWNoZShjb25zdCBGb250JiwgaW50IHN0YXJ0LCBpbnQgbGVu
LCBpbnQgeFBvcywgSGFzaFNldDxjb25zdCBTaW1wbGVGb250RGF0YSo+KiBmYWxsYmFja0ZvbnRz
LCBHbHlwaE92ZXJmbG93KikgY29uc3Q7CiAgICAgYm9vbCBpc0FsbEFTQ0lJKCkgY29uc3QgeyBy
ZXR1cm4gbV9pc0FsbEFTQ0lJOyB9CisgICAgdm9pZCB1cGRhdGVOZWVkc1RyYW5zY29kaW5nKCk7
CisKKyAgICBpbmxpbmUgdm9pZCB0cmFuc2Zvcm1UZXh0KFN0cmluZyYpIGNvbnN0OwogCiAgICAg
aW50IG1fbWluV2lkdGg7IC8vIGhlcmUgdG8gbWluaW1pemUgcGFkZGluZyBpbiA2NC1iaXQuCiAK
QEAgLTE3Miw2ICsxNzYsNyBAQCBwcml2YXRlOgogICAgIGJvb2wgbV9jb250YWluc1JldmVyc2Vk
VGV4dCA6IDE7CiAgICAgYm9vbCBtX2lzQWxsQVNDSUkgOiAxOwogICAgIG11dGFibGUgYm9vbCBt
X2tub3duVG9IYXZlTm9PdmVyZmxvd0FuZE5vRmFsbGJhY2tGb250cyA6IDE7CisgICAgYm9vbCBt
X25lZWRzVHJhbnNjb2RpbmcgOiAxOwogfTsKIAogaW5saW5lIFJlbmRlclRleHQqIHRvUmVuZGVy
VGV4dChSZW5kZXJPYmplY3QqIG9iamVjdCkKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlclRleHRDb250cm9sLmNwcCBiL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRleHRDb250
cm9sLmNwcAppbmRleCBhMTFiMjliLi41ZTE5MzYyIDEwMDY0NAotLS0gYS9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJUZXh0Q29udHJvbC5jcHAKKysrIGIvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
VGV4dENvbnRyb2wuY3BwCkBAIC0xNjcsMTUgKzE2Nyw3IEBAIHZvaWQgUmVuZGVyVGV4dENvbnRy
b2w6OnVwZGF0ZUZyb21FbGVtZW50KCkKIAogdm9pZCBSZW5kZXJUZXh0Q29udHJvbDo6c2V0SW5u
ZXJUZXh0VmFsdWUoY29uc3QgU3RyaW5nJiBpbm5lclRleHRWYWx1ZSkKIHsKLSAgICBTdHJpbmcg
dmFsdWU7Ci0KLSAgICBpZiAoaW5uZXJUZXh0VmFsdWUuaXNOdWxsKCkpCi0gICAgICAgIHZhbHVl
ID0gIiI7Ci0gICAgZWxzZSB7Ci0gICAgICAgIHZhbHVlID0gaW5uZXJUZXh0VmFsdWU7IAotICAg
ICAgICB2YWx1ZSA9IGRvY3VtZW50KCktPmRpc3BsYXlTdHJpbmdNb2RpZmllZEJ5RW5jb2Rpbmco
dmFsdWUpOwotICAgIH0KLQorICAgIFN0cmluZyB2YWx1ZSA9IGlubmVyVGV4dFZhbHVlOwogICAg
IGlmICh2YWx1ZSAhPSB0ZXh0KCkgfHwgIW1faW5uZXJUZXh0LT5oYXNDaGlsZE5vZGVzKCkpIHsK
ICAgICAgICAgaWYgKHZhbHVlICE9IHRleHQoKSkgewogICAgICAgICAgICAgaWYgKEZyYW1lKiBm
cmFtZSA9IGRvY3VtZW50KCktPmZyYW1lKCkpIHsKQEAgLTMxOCw5ICszMTAsNiBAQCBTdHJpbmcg
UmVuZGVyVGV4dENvbnRyb2w6OmZpbmlzaFRleHQoVmVjdG9yPFVDaGFyPiYgcmVzdWx0KSBjb25z
dAogICAgIGlmIChzaXplICYmIHJlc3VsdFtzaXplIC0gMV0gPT0gJ1xuJykKICAgICAgICAgcmVz
dWx0LnNocmluaygtLXNpemUpOwogCi0gICAgLy8gQ29udmVydCBiYWNrc2xhc2ggdG8gY3VycmVu
Y3kgc3ltYm9sLgotICAgIGRvY3VtZW50KCktPmRpc3BsYXlCdWZmZXJNb2RpZmllZEJ5RW5jb2Rp
bmcocmVzdWx0LmRhdGEoKSwgcmVzdWx0LnNpemUoKSk7Ci0gICAgCiAgICAgcmV0dXJuIFN0cmlu
Zzo6YWRvcHQocmVzdWx0KTsKIH0KIApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyVGV4dEZyYWdtZW50LmNwcCBiL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRleHRGcmFnbWVu
dC5jcHAKaW5kZXggZjMzOThhMy4uMjE2NGFlMSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyVGV4dEZyYWdtZW50LmNwcAorKysgYi9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJU
ZXh0RnJhZ21lbnQuY3BwCkBAIC03Niw3ICs3Niw3IEBAIHZvaWQgUmVuZGVyVGV4dEZyYWdtZW50
OjpzZXRUZXh0SW50ZXJuYWwoUGFzc1JlZlB0cjxTdHJpbmdJbXBsPiB0ZXh0KQogICAgIH0KIH0K
IAotVUNoYXIgUmVuZGVyVGV4dEZyYWdtZW50OjpwcmV2aW91c0NoYXJhY3RlcigpCitVQ2hhciBS
ZW5kZXJUZXh0RnJhZ21lbnQ6OnByZXZpb3VzQ2hhcmFjdGVyKCkgY29uc3QKIHsKICAgICBpZiAo
c3RhcnQoKSkgewogICAgICAgICBOb2RlKiBlID0gbm9kZSgpOwpkaWZmIC0tZ2l0IGEvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyVGV4dEZyYWdtZW50LmggYi9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJUZXh0RnJhZ21lbnQuaAppbmRleCAxZmE1MDlhLi5lMzUxNDM2IDEwMDY0NAotLS0gYS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0RnJhZ21lbnQuaAorKysgYi9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJUZXh0RnJhZ21lbnQuaApAQCAtNTEsNyArNTEsNyBAQCBwdWJsaWM6CiAKIHByaXZh
dGU6CiAgICAgdmlydHVhbCB2b2lkIHNldFRleHRJbnRlcm5hbChQYXNzUmVmUHRyPFN0cmluZ0lt
cGw+KTsKLSAgICB2aXJ0dWFsIFVDaGFyIHByZXZpb3VzQ2hhcmFjdGVyKCk7CisgICAgdmlydHVh
bCBVQ2hhciBwcmV2aW91c0NoYXJhY3RlcigpIGNvbnN0OwogCiAgICAgdW5zaWduZWQgbV9zdGFy
dDsKICAgICB1bnNpZ25lZCBtX2VuZDsK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>53885</attachid>
            <date>2010-04-20 15:02:23 -0700</date>
            <delta_ts>2010-04-20 15:04:14 -0700</delta_ts>
            <desc>Patch v5</desc>
            <filename>bug-36419-20100420150221.patch</filename>
            <type>text/plain</type>
            <size>27150</size>
            <attacher name="Shinichiro Hamaji">hamaji</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxv
ZwppbmRleCA1MDI1MzRlLi42OWVjOGU4IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9DaGFuZ2VM
b2cKKysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTYgQEAKKzIwMTAtMDQt
MjAgIFNoaW5pY2hpcm8gSGFtYWppICA8aGFtYWppQGNocm9taXVtLm9yZz4KKworICAgICAgICBS
ZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBBIGJhY2tzbGFzaCBpbiBFVUMt
SlAgYmVjb21lcyB0byBhIHllbiBzaWduIHdoZW4gaXQgaXMgY29waWVkCisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0zNjQxOQorCisgICAgICAgICogZWRp
dGluZy9leGVjQ29tbWFuZC90cmFuc3Bvc2UtYmFja3NsYXNoLXdpdGgtZXVjLWV4cGVjdGVkLnR4
dDogQWRkZWQuCisgICAgICAgICogZWRpdGluZy9leGVjQ29tbWFuZC90cmFuc3Bvc2UtYmFja3Ns
YXNoLXdpdGgtZXVjLmh0bWw6IEFkZGVkLgorICAgICAgICAqIGVkaXRpbmcvcGFzdGVib2FyZC9j
b3B5LWJhY2tzbGFzaC13aXRoLWV1Yy1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAqIGVk
aXRpbmcvcGFzdGVib2FyZC9jb3B5LWJhY2tzbGFzaC13aXRoLWV1Yy5odG1sOiBBZGRlZC4KKyAg
ICAgICAgKiBlZGl0aW5nL3Bhc3RlYm9hcmQvcmVzb3VyY2VzL2NvcHktYmFja3NsYXNoLWV1Yy5o
dG1sOiBBZGRlZC4KKwogMjAxMC0wNC0xOSAgSmFtZXMgUm9iaW5zb24gIDxqYW1lc3JAY2hyb21p
dW0ub3JnPgogCiAgICAgICAgIFVucmV2aWV3ZWQuIFVwZGF0ZSBjaHJvbWl1bSB0ZXN0IGV4cGVj
dGF0aW9ucy4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2VkaXRpbmcvZXhlY0NvbW1hbmQvdHJh
bnNwb3NlLWJhY2tzbGFzaC13aXRoLWV1Yy1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy9lZGl0
aW5nL2V4ZWNDb21tYW5kL3RyYW5zcG9zZS1iYWNrc2xhc2gtd2l0aC1ldWMtZXhwZWN0ZWQudHh0
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU3ODY2ZjcKLS0tIC9kZXYvbnVs
bAorKysgYi9MYXlvdXRUZXN0cy9lZGl0aW5nL2V4ZWNDb21tYW5kL3RyYW5zcG9zZS1iYWNrc2xh
c2gtd2l0aC1ldWMtZXhwZWN0ZWQudHh0CkBAIC0wLDAgKzEsMiBAQAorXFwKK1BBU1MKZGlmZiAt
LWdpdCBhL0xheW91dFRlc3RzL2VkaXRpbmcvZXhlY0NvbW1hbmQvdHJhbnNwb3NlLWJhY2tzbGFz
aC13aXRoLWV1Yy5odG1sIGIvTGF5b3V0VGVzdHMvZWRpdGluZy9leGVjQ29tbWFuZC90cmFuc3Bv
c2UtYmFja3NsYXNoLXdpdGgtZXVjLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMC4uNzdhMTc2OQotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2VkaXRpbmcvZXhl
Y0NvbW1hbmQvdHJhbnNwb3NlLWJhY2tzbGFzaC13aXRoLWV1Yy5odG1sCkBAIC0wLDAgKzEsMzQg
QEAKKzwhRE9DVFlQRSBodG1sPgorPGh0bWw+CisKKzxoZWFkPgorPG1ldGEgY2hhcnNldD0iRVVD
LUpQIj4KKzxzY3JpcHQ+CisKK2lmICh3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIpCisgICAg
bGF5b3V0VGVzdENvbnRyb2xsZXIuZHVtcEFzVGV4dCgpOworCitmdW5jdGlvbiB0ZXN0KCkKK3sK
KyAgICB2YXIgYmFja3NsYXNoRGl2RWxlbWVudCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJi
YWNrc2xhc2giKTsKKyAgICBnZXRTZWxlY3Rpb24oKS5leHRlbmQoYmFja3NsYXNoRGl2RWxlbWVu
dCwgMSk7CisgICAgZG9jdW1lbnQuZXhlY0NvbW1hbmQoIlRyYW5zcG9zZSIpOworCisgICAgLy8g
OTIgaXMgdGhlIGNoYXIgY29kZSBvZiBhIGJhY2tzbGFzaC4KKyAgICB2YXIgYmFja3NsYXNoID0g
OTI7CisgICAgaWYgKGJhY2tzbGFzaCA9PSBiYWNrc2xhc2hEaXZFbGVtZW50LmlubmVySFRNTC5j
aGFyQ29kZUF0KDApICYmIGJhY2tzbGFzaCA9PSBiYWNrc2xhc2hEaXZFbGVtZW50LmlubmVySFRN
TC5jaGFyQ29kZUF0KDEpKQorICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgicmVzdWx0
IikuaW5uZXJIVE1MID0gIlBBU1MiOworfQorCis8L3NjcmlwdD4KKzwvaGVhZD4KKworPGJvZHkg
b25sb2FkPSJ0ZXN0KCkiPgorCis8ZGl2IGlkPSJiYWNrc2xhc2giIGNvbnRlbnRFZGl0YWJsZT0i
dHJ1ZSI+XFw8L2Rpdj4KKworPGRpdiBpZD0icmVzdWx0Ij5GQUlMPC9kaXY+CisKKzwvYm9keT4K
KworPC9odG1sPgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvZWRpdGluZy9wYXN0ZWJvYXJkL2Nv
cHktYmFja3NsYXNoLXdpdGgtZXVjLWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL2VkaXRpbmcv
cGFzdGVib2FyZC9jb3B5LWJhY2tzbGFzaC13aXRoLWV1Yy1leHBlY3RlZC50eHQKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGMwMWM5NAotLS0gL2Rldi9udWxsCisrKyBiL0xh
eW91dFRlc3RzL2VkaXRpbmcvcGFzdGVib2FyZC9jb3B5LWJhY2tzbGFzaC13aXRoLWV1Yy1leHBl
Y3RlZC50eHQKQEAgLTAsMCArMSw0MCBAQAorCitPcmlnaW5hbCB0ZXh0cyB3aGljaCB3aWxsIGJl
IGNvcGllZAorCitcIGZyb20gVVRGOCBwYWdlCitcIEZST00gVVRGOCBQQUdFIChUUkFOU0ZPUk1F
RCkKK+KAouKAouKAouKAouKAouKAouKAouKAouKAouKAouKAouKAouKAouKAouKAouKAouKAouKA
ouKAouKAouKAouKAouKAouKAouKAogorCitUZXh0cyBpbiB0aGUgRVVDIGZyYW1lIHdpbGwgYmUg
cGFzdGVkIGhlcmUKKworZnJvbSBFVUMgZGl2IHRvIFVURjggdGV4dC1jb250cm9sOiAKK2Zyb20g
RVVDIGRpdiB0byBVVEY4IGNvbnRlbnQtZWRpdGFibGU6IFwgZnJvbSBFVUMgcGFnZQorCitmcm9t
IEVVQyB0cmFuc2Zvcm0gdG8gVVRGOCB0ZXh0LWNvbnRyb2w6IAorZnJvbSBFVUMgdHJhbnNmb3Jt
IHRvIFVURjggY29udGVudC1lZGl0YWJsZTogXCBGUk9NIEVVQyBQQUdFIChUUkFOU0ZPUk1FRCkK
KworZnJvbSBFVUMgc2VjdXJlIHRvIFVURjggdGV4dC1jb250cm9sOiAKK2Zyb20gRVVDIHNlY3Vy
ZSB0byBVVEY4IGNvbnRlbnQtZWRpdGFibGU6IOKAouKAouKAouKAouKAouKAouKAouKAouKAouKA
ouKAouKAouKAouKAouKAouKAouKAouKAouKAouKAouKAouKAouKAouKAogorCitmcm9tIEVVQyBj
b250cm9sIHRvIFVURjggdGV4dC1jb250cm9sOiAKK2Zyb20gRVVDIGNvbnRyb2wgdG8gVVRGOCBj
b250ZW50LWVkaXRhYmxlOiBcIGZyb20gRVVDIHRleHQgY29udHJvbAorCitSZXN1bHRzCisKK2Zy
b20gRVVDIGRpdiB0byBVVEY4IHRleHQtY29udHJvbDogUEFTUworZnJvbSBFVUMgZGl2IHRvIFVU
RjggY29udGVudC1lZGl0YWJsZTogUEFTUworZnJvbSBFVUMgdHJhbnNmb3JtIHRvIFVURjggdGV4
dC1jb250cm9sOiBQQVNTCitmcm9tIEVVQyB0cmFuc2Zvcm0gdG8gVVRGOCBjb250ZW50LWVkaXRh
YmxlOiBQQVNTCitmcm9tIEVVQyBzZWN1cmUgdG8gVVRGOCB0ZXh0LWNvbnRyb2w6IFBBU1MKK2Zy
b20gRVVDIHNlY3VyZSB0byBVVEY4IGNvbnRlbnQtZWRpdGFibGU6IFBBU1MKK2Zyb20gRVVDIGNv
bnRyb2wgdG8gVVRGOCB0ZXh0LWNvbnRyb2w6IFBBU1MKK2Zyb20gRVVDIGNvbnRyb2wgdG8gVVRG
OCBjb250ZW50LWVkaXRhYmxlOiBQQVNTCitmcm9tIFVURjggZGl2IHRvIEVVQyB0ZXh0LWNvbnRy
b2w6IFBBU1MKK2Zyb20gVVRGOCBkaXYgdG8gRVVDIGNvbnRlbnQtZWRpdGFibGU6IFBBU1MKK2Zy
b20gVVRGOCB0cmFuc2Zvcm0gdG8gRVVDIHRleHQtY29udHJvbDogUEFTUworZnJvbSBVVEY4IHRy
YW5zZm9ybSB0byBFVUMgY29udGVudC1lZGl0YWJsZTogUEFTUworZnJvbSBVVEY4IHNlY3VyZSB0
byBFVUMgdGV4dC1jb250cm9sOiBQQVNTCitmcm9tIFVURjggc2VjdXJlIHRvIEVVQyBjb250ZW50
LWVkaXRhYmxlOiBQQVNTCitmcm9tIFVURjggY29udHJvbCB0byBFVUMgdGV4dC1jb250cm9sOiBQ
QVNTCitmcm9tIFVURjggY29udHJvbCB0byBFVUMgY29udGVudC1lZGl0YWJsZTogUEFTUworCmRp
ZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9lZGl0aW5nL3Bhc3RlYm9hcmQvY29weS1iYWNrc2xhc2gt
d2l0aC1ldWMuaHRtbCBiL0xheW91dFRlc3RzL2VkaXRpbmcvcGFzdGVib2FyZC9jb3B5LWJhY2tz
bGFzaC13aXRoLWV1Yy5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAw
NTE0NjcKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9lZGl0aW5nL3Bhc3RlYm9hcmQv
Y29weS1iYWNrc2xhc2gtd2l0aC1ldWMuaHRtbApAQCAtMCwwICsxLDEwNiBAQAorPCFET0NUWVBF
IGh0bWw+Cis8aHRtbD4KKworPGhlYWQ+Cis8bWV0YSBjaGFyc2V0PSJVVEYtOCI+Cis8c2NyaXB0
PgorCitpZiAod2luZG93LmxheW91dFRlc3RDb250cm9sbGVyKQorICAgIGxheW91dFRlc3RDb250
cm9sbGVyLmR1bXBBc1RleHQoKTsKKworLy8gU2VsZWN0IGFuIGVsZW1lbnQgYW4gcmV0dXJuIGl0
cyB2YWx1ZS4KK2Z1bmN0aW9uIHNlbGVjdEVsZW1lbnQoZG9jLCBlbGVtZW50KQoreworICAgIGlm
IChlbGVtZW50LnRhZ05hbWUudG9Mb3dlckNhc2UoKSA9PSAnaW5wdXQnKSB7CisgICAgICAgIGVs
ZW1lbnQuZm9jdXMoKTsKKyAgICAgICAgZWxlbWVudC5zZWxlY3QoKTsKKyAgICAgICAgcmV0dXJu
IGVsZW1lbnQudmFsdWU7CisgICAgfSBlbHNlIHsKKyAgICAgICAgZG9jLmdldFNlbGVjdGlvbigp
LnNlbGVjdEFsbENoaWxkcmVuKGVsZW1lbnQpOworICAgICAgICByZXR1cm4gZWxlbWVudC5pbm5l
clRleHQ7CisgICAgfQorfQorCitmdW5jdGlvbiB0ZXN0Q29weUFuZFBhc3RlVGV4dHMoZnJvbURv
Y3VtZW50LCBmcm9tTmFtZSwgdG9Eb2N1bWVudCwgdG9OYW1lKQoreworICAgIHZhciByZXN1bHRz
RWxlbWVudCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJyZXN1bHRzIik7CisKKyAgICB2YXIg
cGFzdGVib2FyZEVsZW1lbnQgPSB0b0RvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJwYXN0ZWJvYXJk
Iik7CisKKyAgICB2YXIgZnJvbUVsZW1lbnROYW1lcyA9IFsiZGl2IiwgInRyYW5zZm9ybSIsICJz
ZWN1cmUiLCAiY29udHJvbCJdOworICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZnJvbUVsZW1lbnRO
YW1lcy5sZW5ndGg7IGkrKykgeworICAgICAgICB2YXIgZnJvbUVsZW1lbnROYW1lID0gZnJvbUVs
ZW1lbnROYW1lc1tpXTsKKyAgICAgICAgdmFyIGZyb21FbGVtZW50ID0gZnJvbURvY3VtZW50Lmdl
dEVsZW1lbnRCeUlkKGZyb21FbGVtZW50TmFtZSk7CisgICAgICAgIHNlbGVjdEVsZW1lbnQoZnJv
bURvY3VtZW50LCBmcm9tRWxlbWVudCk7CisgICAgICAgIGZyb21Eb2N1bWVudC5leGVjQ29tbWFu
ZCgiQ29weSIpOworCisgICAgICAgIHZhciB0b0VsZW1lbnROYW1lU3VmZml4ZXMgPSBbInRleHQt
Y29udHJvbCIsICJjb250ZW50LWVkaXRhYmxlIl07CisgICAgICAgIGZvciAodmFyIGogPSAwOyBq
IDwgdG9FbGVtZW50TmFtZVN1ZmZpeGVzLmxlbmd0aDsgaisrKSB7CisgICAgICAgICAgICB2YXIg
dG9FbGVtZW50TmFtZVN1ZmZpeCA9IHRvRWxlbWVudE5hbWVTdWZmaXhlc1tqXTsKKworICAgICAg
ICAgICAgdmFyIHRlc3ROYW1lID0gImZyb20gIiArIGZyb21OYW1lLnRvVXBwZXJDYXNlKCkgKyAi
ICIgKyBmcm9tRWxlbWVudE5hbWUgKyAiIHRvICIgKyB0b05hbWUudG9VcHBlckNhc2UoKSArICIg
IiArIHRvRWxlbWVudE5hbWVTdWZmaXggKyAiOiAiOworICAgICAgICAgICAgdmFyIHRvRGVzY3Jp
cHRpb25UZXh0ID0gdG9Eb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSh0ZXN0TmFtZSk7CisgICAgICAg
ICAgICBwYXN0ZWJvYXJkRWxlbWVudC5hcHBlbmRDaGlsZCh0b0Rlc2NyaXB0aW9uVGV4dCk7Cisg
ICAgICAgICAgICB2YXIgdG9FbGVtZW50ID0gbnVsbDsKKyAgICAgICAgICAgIGlmICh0b0VsZW1l
bnROYW1lU3VmZml4ID09ICJ0ZXh0LWNvbnRyb2wiKSB7CisgICAgICAgICAgICAgICAgdG9FbGVt
ZW50ID0gdG9Eb2N1bWVudC5jcmVhdGVFbGVtZW50KCJpbnB1dCIpOworICAgICAgICAgICAgICAg
IHRvRWxlbWVudC52YWx1ZSA9ICJGQUlMIjsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAg
ICAgICAgICAgdG9FbGVtZW50ID0gdG9Eb2N1bWVudC5jcmVhdGVFbGVtZW50KCJzcGFuIik7Cisg
ICAgICAgICAgICAgICAgdG9FbGVtZW50LmNvbnRlbnRFZGl0YWJsZSA9ICJ0cnVlIjsKKyAgICAg
ICAgICAgICAgICB0b0VsZW1lbnQuaW5uZXJIVE1MID0gIkZBSUwiOworICAgICAgICAgICAgfQor
ICAgICAgICAgICAgcGFzdGVib2FyZEVsZW1lbnQuYXBwZW5kQ2hpbGQodG9FbGVtZW50KTsKKyAg
ICAgICAgICAgIHBhc3RlYm9hcmRFbGVtZW50LmFwcGVuZENoaWxkKHRvRG9jdW1lbnQuY3JlYXRl
RWxlbWVudCgiYnIiKSk7CisKKyAgICAgICAgICAgIHNlbGVjdEVsZW1lbnQodG9Eb2N1bWVudCwg
dG9FbGVtZW50KTsKKyAgICAgICAgICAgIHRvRG9jdW1lbnQuZXhlY0NvbW1hbmQoIlBhc3RlIik7
CisgICAgICAgICAgICB2YXIgYWN0dWFsVGV4dCA9IHNlbGVjdEVsZW1lbnQodG9Eb2N1bWVudCwg
dG9FbGVtZW50KTsKKworICAgICAgICAgICAgdmFyIHJlc3VsdCA9ICJQQVNTIjsKKyAgICAgICAg
ICAgIHZhciBleHBlY3RlZExlYWRpbmdTdHJpbmcgPSAiXFxcXCBmcm9tICI7CisgICAgICAgICAg
ICBpZiAoZnJvbUVsZW1lbnROYW1lID09ICJzZWN1cmUiKQorICAgICAgICAgICAgICAgIGV4cGVj
dGVkTGVhZGluZ1N0cmluZyA9ICLigKLigKLigKLigKLigKLigKLigKIiOworICAgICAgICAgICAg
ZWxzZSBpZiAoZnJvbUVsZW1lbnROYW1lID09ICJ0cmFuc2Zvcm0iKQorICAgICAgICAgICAgICAg
IGV4cGVjdGVkTGVhZGluZ1N0cmluZyA9IGV4cGVjdGVkTGVhZGluZ1N0cmluZy50b1VwcGVyQ2Fz
ZSgpOworICAgICAgICAgICAgaWYgKGFjdHVhbFRleHQuc2VhcmNoKGV4cGVjdGVkTGVhZGluZ1N0
cmluZykgIT0gMCkKKyAgICAgICAgICAgICAgICByZXN1bHQgPSAiRkFJTDogdGhlIGFjdHVhbCB0
ZXh0IHdhcyAnIiArIGFjdHVhbFRleHQgKyAiJyAoY2hhciBjb2RlIG9mIHRoZSBmaXJzdCBjaGFy
YWN0ZXIgd2FzICIgKyBhY3R1YWxUZXh0LmNoYXJDb2RlQXQoMCkgKyAiKSI7CisKKyAgICAgICAg
ICAgIHJlc3VsdHNFbGVtZW50LmlubmVySFRNTCArPSB0ZXN0TmFtZSArIHJlc3VsdCArICI8YnI+
IjsKKyAgICAgICAgfQorICAgIH0KK30KKworZnVuY3Rpb24gdGVzdCgpCit7CisgICAgdGVzdENv
cHlBbmRQYXN0ZVRleHRzKGZyYW1lc1swXS5kb2N1bWVudCwgImV1YyIsIGRvY3VtZW50LCAidXRm
OCIpOworICAgIHRlc3RDb3B5QW5kUGFzdGVUZXh0cyhkb2N1bWVudCwgInV0ZjgiLCBmcmFtZXNb
MF0uZG9jdW1lbnQsICJldWMiKTsKK30KKworPC9zY3JpcHQ+Cis8L2hlYWQ+CisKKzxib2R5IG9u
bG9hZD0idGVzdCgpIj4KKworPGRpdj4KKzxpZnJhbWUgc3JjPSJyZXNvdXJjZXMvY29weS1iYWNr
c2xhc2gtZXVjLmh0bWwiIHdpZHRoPSI2MDAiIGhlaWdodD0iMzAwIj48L2lmcmFtZT4KKzwvZGl2
PgorCis8aDI+T3JpZ2luYWwgdGV4dHMgd2hpY2ggd2lsbCBiZSBjb3BpZWQ8L2gyPgorPGRpdiBp
ZD0iZGl2Ij5cIGZyb20gVVRGOCBwYWdlPC9kaXY+Cis8ZGl2IGlkPSJ0cmFuc2Zvcm0iIHN0eWxl
PSJ0ZXh0LXRyYW5zZm9ybTp1cHBlcmNhc2UiPlwgZnJvbSBVVEY4IHBhZ2UgKHRyYW5zZm9ybWVk
KTwvZGl2PgorPGRpdiBpZD0ic2VjdXJlIiBzdHlsZT0iLXdlYmtpdC10ZXh0LXNlY3VyaXR5OmRp
c2MiPlwgZnJvbSBVVEY4IHBhZ2UgKHNlY3VyZSk8L2Rpdj4KKzxpbnB1dCBpZD0iY29udHJvbCIg
dmFsdWU9IlwgZnJvbSBVVEY4IHRleHQgY29udHJvbCI+CisKKzxoMj5UZXh0cyBpbiB0aGUgRVVD
IGZyYW1lIHdpbGwgYmUgcGFzdGVkIGhlcmU8L2gyPgorPGRpdiBpZD0icGFzdGVib2FyZCI+PC9k
aXY+CisKKzxicj4KKworPGgyPlJlc3VsdHM8L2gyPgorPHAgaWQ9InJlc3VsdHMiPgorPC9wPgor
Cis8L2JvZHk+CisKKzwvaHRtbD4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2VkaXRpbmcvcGFz
dGVib2FyZC9yZXNvdXJjZXMvY29weS1iYWNrc2xhc2gtZXVjLmh0bWwgYi9MYXlvdXRUZXN0cy9l
ZGl0aW5nL3Bhc3RlYm9hcmQvcmVzb3VyY2VzL2NvcHktYmFja3NsYXNoLWV1Yy5odG1sCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVhOWY0MDIKLS0tIC9kZXYvbnVsbAorKysg
Yi9MYXlvdXRUZXN0cy9lZGl0aW5nL3Bhc3RlYm9hcmQvcmVzb3VyY2VzL2NvcHktYmFja3NsYXNo
LWV1Yy5odG1sCkBAIC0wLDAgKzEsMjEgQEAKKzwhRE9DVFlQRSBodG1sPgorPGh0bWw+CisKKzxo
ZWFkPgorPG1ldGEgY2hhcnNldD0iRVVDLUpQIj4KKzwvaGVhZD4KKworPGJvZHk+CisKKzxoMj5P
cmlnaW5hbCB0ZXh0cyB3aGljaCB3aWxsIGJlIGNvcGllZDwvaDI+Cis8ZGl2IGlkPSJkaXYiPlwg
ZnJvbSBFVUMgcGFnZTwvZGl2PgorPGRpdiBpZD0idHJhbnNmb3JtIiBzdHlsZT0idGV4dC10cmFu
c2Zvcm06dXBwZXJjYXNlIj5cIGZyb20gRVVDIHBhZ2UgKHRyYW5zZm9ybWVkKTwvZGl2PgorPGRp
diBpZD0ic2VjdXJlIiBzdHlsZT0iLXdlYmtpdC10ZXh0LXNlY3VyaXR5OmRpc2MiPlwgZnJvbSBF
VUMgcGFnZSAoc2VjdXJlKTwvZGl2PgorPGlucHV0IGlkPSJjb250cm9sIiB2YWx1ZT0iXCBmcm9t
IEVVQyB0ZXh0IGNvbnRyb2wiPgorCis8aDI+VGV4dHMgaW4gdGhlIFVURjggZnJhbWUgd2lsbCBi
ZSBwYXN0ZWQgaGVyZTwvaDI+Cis8ZGl2IGlkPSJwYXN0ZWJvYXJkIj48L2Rpdj4KKworPC9ib2R5
PgorCis8L2h0bWw+CmRpZmYgLS1naXQgYS9XZWJDb3JlL0NoYW5nZUxvZyBiL1dlYkNvcmUvQ2hh
bmdlTG9nCmluZGV4IDA5ZmFkOGMuLmUxMjc5ZTkgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvQ2hhbmdl
TG9nCisrKyBiL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNDIgQEAKKzIwMTAtMDQtMjAg
IFNoaW5pY2hpcm8gSGFtYWppICA8aGFtYWppQGNocm9taXVtLm9yZz4KKworICAgICAgICBSZXZp
ZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBBIGJhY2tzbGFzaCBpbiBFVUMtSlAg
YmVjb21lcyB0byBhIHllbiBzaWduIHdoZW4gaXQgaXMgY29waWVkCisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0zNjQxOQorCisgICAgICAgIFRlc3RzOiBl
ZGl0aW5nL2V4ZWNDb21tYW5kL3RyYW5zcG9zZS1iYWNrc2xhc2gtd2l0aC1ldWMuaHRtbAorICAg
ICAgICAgICAgICAgZWRpdGluZy9wYXN0ZWJvYXJkL2NvcHktYmFja3NsYXNoLXdpdGgtZXVjLmh0
bWwKKworICAgICAgICAqIGVkaXRpbmcvRWRpdG9yLmNwcDogUmVtb3ZlIGFuIHVubmVjZXNzYXJ5
IGRpc3BsYXlTdHJpbmdNb2RpZmllZEJ5RW5jb2RpbmcgY2FsbHMuCisgICAgICAgIChXZWJDb3Jl
OjpFZGl0b3I6OmFkZFRvS2lsbFJpbmcpOgorICAgICAgICAqIGVkaXRpbmcvVGV4dEl0ZXJhdG9y
LmNwcDogVGV4dEl0ZXJhdG9yIGNhbiB1c2UgUmVuZGVyVGV4dDo6dGV4dFdpdGhvdXRUcmFuc2Nv
ZGluZyBhbmQgbm93IHBsYWluVGV4dCgpIHVzZXMgdGhpcyB2ZXJzaW9uCisgICAgICAgIChXZWJD
b3JlOjpUZXh0SXRlcmF0b3I6OlRleHRJdGVyYXRvcik6CisgICAgICAgIChXZWJDb3JlOjpUZXh0
SXRlcmF0b3I6OmluaXQpOgorICAgICAgICAoV2ViQ29yZTo6VGV4dEl0ZXJhdG9yOjplbWl0VGV4
dCk6CisgICAgICAgIChXZWJDb3JlOjpwbGFpblRleHRUb01hbGxvY0FsbG9jYXRlZEJ1ZmZlcik6
CisgICAgICAgICogZWRpdGluZy9UZXh0SXRlcmF0b3IuaDoKKyAgICAgICAgKFdlYkNvcmU6Oik6
CisgICAgICAgICogcGxhdGZvcm0vbWFjL1Bhc3RlYm9hcmRNYWMubW06IFJlbW92ZSBhbiB1bm5l
Y2Vzc2FyeSBkaXNwbGF5U3RyaW5nTW9kaWZpZWRCeUVuY29kaW5nIGNhbGwuCisgICAgICAgIChX
ZWJDb3JlOjpQYXN0ZWJvYXJkOjp3cml0ZVNlbGVjdGlvbik6CisgICAgICAgICogcGxhdGZvcm0v
dGV4dC9UZXh0RW5jb2RpbmcuaDogTWFrZSBiYWNrc2xhc2hBc0N1cnJlbmN5U3ltYm9sIHB1Ymxp
Yy4KKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyVGV4dC5jcHA6IEFkZCBSZW5kZXJUZXh0Ojp0
ZXh0V2l0aG91dFRyYW5zY29kaW5nCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUZXh0OjpSZW5k
ZXJUZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRleHQ6OnVwZGF0ZU5lZWRzVHJhbnNj
b2RpbmcpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGV4dDo6c3R5bGVEaWRDaGFuZ2UpOgor
ICAgICAgICAoV2ViQ29yZTo6aXNJbmxpbmVGbG93T3JFbXB0eVRleHQpOgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyVGV4dDo6cHJldmlvdXNDaGFyYWN0ZXIpOgorICAgICAgICAoV2ViQ29yZTo6
UmVuZGVyVGV4dDo6c2V0VGV4dEludGVybmFsKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRl
eHQ6OnRleHRXaXRob3V0VHJhbnNjb2RpbmcpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGV4
dDo6dHJhbnNmb3JtVGV4dCk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlclRleHQuaDoKKyAg
ICAgICAgKiByZW5kZXJpbmcvUmVuZGVyVGV4dENvbnRyb2wuY3BwOiBSZW1vdmUgYW4gdW5uZWNl
c3NhcnkgZGlzcGxheVN0cmluZ01vZGlmaWVkQnlFbmNvZGluZyBjYWxsLgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyVGV4dENvbnRyb2w6OnNldElubmVyVGV4dFZhbHVlKToKKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlclRleHRDb250cm9sOjpmaW5pc2hUZXh0KToKKyAgICAgICAgKiByZW5kZXJp
bmcvUmVuZGVyVGV4dEZyYWdtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRleHRG
cmFnbWVudDo6cHJldmlvdXNDaGFyYWN0ZXIpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJU
ZXh0RnJhZ21lbnQuaDoKKwogMjAxMC0wNC0xOSAgU2ltb24gRnJhc2VyICA8c2ltb24uZnJhc2Vy
QGFwcGxlLmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBieSBHZW9mZiBHYXJlbi4KZGlmZiAtLWdp
dCBhL1dlYkNvcmUvZWRpdGluZy9FZGl0b3IuY3BwIGIvV2ViQ29yZS9lZGl0aW5nL0VkaXRvci5j
cHAKaW5kZXggMTA2MWRkMi4uZTE3MWFjMSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9lZGl0aW5nL0Vk
aXRvci5jcHAKKysrIGIvV2ViQ29yZS9lZGl0aW5nL0VkaXRvci5jcHAKQEAgLTI3MDMsNyArMjcw
Myw3IEBAIHZvaWQgRWRpdG9yOjphZGRUb0tpbGxSaW5nKFJhbmdlKiByYW5nZSwgYm9vbCBwcmVw
ZW5kKQogICAgIGlmIChtX3Nob3VsZFN0YXJ0TmV3S2lsbFJpbmdTZXF1ZW5jZSkKICAgICAgICAg
c3RhcnROZXdLaWxsUmluZ1NlcXVlbmNlKCk7CiAKLSAgICBTdHJpbmcgdGV4dCA9IG1fZnJhbWUt
PmRpc3BsYXlTdHJpbmdNb2RpZmllZEJ5RW5jb2RpbmcocGxhaW5UZXh0KHJhbmdlKSk7CisgICAg
U3RyaW5nIHRleHQgPSBwbGFpblRleHQocmFuZ2UpOwogICAgIGlmIChwcmVwZW5kKQogICAgICAg
ICBwcmVwZW5kVG9LaWxsUmluZyh0ZXh0KTsKICAgICBlbHNlCmRpZmYgLS1naXQgYS9XZWJDb3Jl
L2VkaXRpbmcvVGV4dEl0ZXJhdG9yLmNwcCBiL1dlYkNvcmUvZWRpdGluZy9UZXh0SXRlcmF0b3Iu
Y3BwCmluZGV4IGEzODZjNmUuLmUwMjJlM2IgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvZWRpdGluZy9U
ZXh0SXRlcmF0b3IuY3BwCisrKyBiL1dlYkNvcmUvZWRpdGluZy9UZXh0SXRlcmF0b3IuY3BwCkBA
IC0yNTYsMTAgKzI1NiwxMSBAQCBUZXh0SXRlcmF0b3I6OlRleHRJdGVyYXRvcigpCiAgICAgLCBt
X2xhc3RDaGFyYWN0ZXIoMCkKICAgICAsIG1fZW1pdENoYXJhY3RlcnNCZXR3ZWVuQWxsVmlzaWJs
ZVBvc2l0aW9ucyhmYWxzZSkKICAgICAsIG1fZW50ZXJUZXh0Q29udHJvbHMoZmFsc2UpCisgICAg
LCBtX2VtaXRzVGV4dFdpdGhvdXRUcmFuc2NvZGluZyhmYWxzZSkKIHsKIH0KIAotVGV4dEl0ZXJh
dG9yOjpUZXh0SXRlcmF0b3IoY29uc3QgUmFuZ2UqIHIsIGJvb2wgZW1pdENoYXJhY3RlcnNCZXR3
ZWVuQWxsVmlzaWJsZVBvc2l0aW9ucywgYm9vbCBlbnRlclRleHRDb250cm9scykgCitUZXh0SXRl
cmF0b3I6OlRleHRJdGVyYXRvcihjb25zdCBSYW5nZSogciwgYm9vbCBlbWl0Q2hhcmFjdGVyc0Jl
dHdlZW5BbGxWaXNpYmxlUG9zaXRpb25zLCBib29sIGVudGVyVGV4dENvbnRyb2xzKQogICAgIDog
bV9zdGFydENvbnRhaW5lcigwKSAKICAgICAsIG1fc3RhcnRPZmZzZXQoMCkKICAgICAsIG1fZW5k
Q29udGFpbmVyKDApCkBAIC0yNjksNiArMjcwLDI3IEBAIFRleHRJdGVyYXRvcjo6VGV4dEl0ZXJh
dG9yKGNvbnN0IFJhbmdlKiByLCBib29sIGVtaXRDaGFyYWN0ZXJzQmV0d2VlbkFsbFZpc2libGVQ
CiAgICAgLCBtX3RleHRMZW5ndGgoMCkKICAgICAsIG1fZW1pdENoYXJhY3RlcnNCZXR3ZWVuQWxs
VmlzaWJsZVBvc2l0aW9ucyhlbWl0Q2hhcmFjdGVyc0JldHdlZW5BbGxWaXNpYmxlUG9zaXRpb25z
KQogICAgICwgbV9lbnRlclRleHRDb250cm9scyhlbnRlclRleHRDb250cm9scykKKyAgICAsIG1f
ZW1pdHNUZXh0V2l0aG91dFRyYW5zY29kaW5nKGZhbHNlKQoreworICAgIGluaXQocik7Cit9CisK
K1RleHRJdGVyYXRvcjo6VGV4dEl0ZXJhdG9yKGNvbnN0IFJhbmdlKiByLCBUZXh0SXRlcmF0b3JC
ZWhhdmlvciBiZWhhdmlvcikKKyAgICA6IG1fc3RhcnRDb250YWluZXIoMCkKKyAgICAsIG1fc3Rh
cnRPZmZzZXQoMCkKKyAgICAsIG1fZW5kQ29udGFpbmVyKDApCisgICAgLCBtX2VuZE9mZnNldCgw
KQorICAgICwgbV9wb3NpdGlvbk5vZGUoMCkKKyAgICAsIG1fdGV4dENoYXJhY3RlcnMoMCkKKyAg
ICAsIG1fdGV4dExlbmd0aCgwKQorICAgICwgbV9lbWl0Q2hhcmFjdGVyc0JldHdlZW5BbGxWaXNp
YmxlUG9zaXRpb25zKGJlaGF2aW9yICYgVGV4dEl0ZXJhdG9yQmVoYXZpb3JFbWl0Q2hhcmFjdGVy
c0JldHdlZW5BbGxWaXNpYmxlUG9zaXRpb25zKQorICAgICwgbV9lbnRlclRleHRDb250cm9scyhi
ZWhhdmlvciAmIFRleHRJdGVyYXRvckJlaGF2aW9yRW50ZXJUZXh0Q29udHJvbHMpCisgICAgLCBt
X2VtaXRzVGV4dFdpdGhvdXRUcmFuc2NvZGluZyhiZWhhdmlvciAmIFRleHRJdGVyYXRvckJlaGF2
aW9yRW1pdHNUZXh0c1dpdGhvdXRUcmFuc2NvZGluZykKK3sKKyAgICBpbml0KHIpOworfQorCit2
b2lkIFRleHRJdGVyYXRvcjo6aW5pdChjb25zdCBSYW5nZSogcikKIHsKICAgICBpZiAoIXIpCiAg
ICAgICAgIHJldHVybjsKQEAgLTg4OSw3ICs5MTEsNyBAQCB2b2lkIFRleHRJdGVyYXRvcjo6ZW1p
dENoYXJhY3RlcihVQ2hhciBjLCBOb2RlKiB0ZXh0Tm9kZSwgTm9kZSogb2Zmc2V0QmFzZU5vZGUs
CiB2b2lkIFRleHRJdGVyYXRvcjo6ZW1pdFRleHQoTm9kZSogdGV4dE5vZGUsIGludCB0ZXh0U3Rh
cnRPZmZzZXQsIGludCB0ZXh0RW5kT2Zmc2V0KQogewogICAgIFJlbmRlclRleHQqIHJlbmRlcmVy
ID0gdG9SZW5kZXJUZXh0KG1fbm9kZS0+cmVuZGVyZXIoKSk7Ci0gICAgU3RyaW5nIHN0ciA9IHJl
bmRlcmVyLT50ZXh0KCk7CisgICAgU3RyaW5nIHN0ciA9IG1fZW1pdHNUZXh0V2l0aG91dFRyYW5z
Y29kaW5nID8gcmVuZGVyZXItPnRleHRXaXRob3V0VHJhbnNjb2RpbmcoKSA6IHJlbmRlcmVyLT50
ZXh0KCk7CiAgICAgQVNTRVJUKHN0ci5jaGFyYWN0ZXJzKCkpOwogCiAgICAgbV9wb3NpdGlvbk5v
ZGUgPSB0ZXh0Tm9kZTsKQEAgLTIxMDQsNyArMjEyNiw3IEBAIFBhc3NSZWZQdHI8UmFuZ2U+IFRl
eHRJdGVyYXRvcjo6cmFuZ2VGcm9tTG9jYXRpb25BbmRMZW5ndGgoRWxlbWVudCogc2NvcGUsIGlu
dCByCiAKIC8vIC0tLS0tLS0tCiAgICAgCi1VQ2hhciogcGxhaW5UZXh0VG9NYWxsb2NBbGxvY2F0
ZWRCdWZmZXIoY29uc3QgUmFuZ2UqIHIsIHVuc2lnbmVkJiBidWZmZXJMZW5ndGgsIGJvb2wgaXNE
aXNwbGF5U3RyaW5nKSAKK1VDaGFyKiBwbGFpblRleHRUb01hbGxvY0FsbG9jYXRlZEJ1ZmZlcihj
b25zdCBSYW5nZSogciwgdW5zaWduZWQmIGJ1ZmZlckxlbmd0aCwgYm9vbCBpc0Rpc3BsYXlTdHJp
bmcpCiB7CiAgICAgVUNoYXIqIHJlc3VsdCA9IDA7CiAKQEAgLTIxMTYsNyArMjEzOCw3IEBAIFVD
aGFyKiBwbGFpblRleHRUb01hbGxvY0FsbG9jYXRlZEJ1ZmZlcihjb25zdCBSYW5nZSogciwgdW5z
aWduZWQmIGJ1ZmZlckxlbmd0aCwKICAgICBWZWN0b3I8VGV4dFNlZ21lbnQ+KiB0ZXh0U2VnbWVu
dHMgPSAwOwogICAgIFZlY3RvcjxVQ2hhcj4gdGV4dEJ1ZmZlcjsKICAgICB0ZXh0QnVmZmVyLnJl
c2VydmVJbml0aWFsQ2FwYWNpdHkoY01heFNlZ21lbnRTaXplKTsKLSAgICBmb3IgKFRleHRJdGVy
YXRvciBpdChyKTsgIWl0LmF0RW5kKCk7IGl0LmFkdmFuY2UoKSkgeworICAgIGZvciAoVGV4dEl0
ZXJhdG9yIGl0KHIsIGlzRGlzcGxheVN0cmluZyA/IFRleHRJdGVyYXRvckJlaGF2aW9yRGVmYXVs
dCA6IFRleHRJdGVyYXRvckJlaGF2aW9yRW1pdHNUZXh0c1dpdGhvdXRUcmFuc2NvZGluZyk7ICFp
dC5hdEVuZCgpOyBpdC5hZHZhbmNlKCkpIHsKICAgICAgICAgaWYgKHRleHRCdWZmZXIuc2l6ZSgp
ICYmIHRleHRCdWZmZXIuc2l6ZSgpICsgaXQubGVuZ3RoKCkgPiBjTWF4U2VnbWVudFNpemUpIHsK
ICAgICAgICAgICAgIFVDaGFyKiBuZXdTZWdtZW50QnVmZmVyID0gc3RhdGljX2Nhc3Q8VUNoYXIq
PihtYWxsb2ModGV4dEJ1ZmZlci5zaXplKCkgKiBzaXplb2YoVUNoYXIpKSk7CiAgICAgICAgICAg
ICBpZiAoIW5ld1NlZ21lbnRCdWZmZXIpCmRpZmYgLS1naXQgYS9XZWJDb3JlL2VkaXRpbmcvVGV4
dEl0ZXJhdG9yLmggYi9XZWJDb3JlL2VkaXRpbmcvVGV4dEl0ZXJhdG9yLmgKaW5kZXggNDRhZjNl
NS4uYWJkODE2MSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9lZGl0aW5nL1RleHRJdGVyYXRvci5oCisr
KyBiL1dlYkNvcmUvZWRpdGluZy9UZXh0SXRlcmF0b3IuaApAQCAtNjgsMTEgKzY4LDE5IEBAIHBy
aXZhdGU6CiAvLyBhdCBwb2ludHMgd2hlcmUgcmVwbGFjZWQgZWxlbWVudHMgYnJlYWsgdXAgdGhl
IHRleHQgZmxvdy4gIFRoZSB0ZXh0IGNvbWVzIGJhY2sgaW4KIC8vIGNodW5rcyBzbyBhcyB0byBv
cHRpbWl6ZSBmb3IgcGVyZm9ybWFuY2Ugb2YgdGhlIGl0ZXJhdGlvbi4KIAorZW51bSBUZXh0SXRl
cmF0b3JCZWhhdmlvciB7CisgICAgVGV4dEl0ZXJhdG9yQmVoYXZpb3JEZWZhdWx0ID0gMCwKKyAg
ICBUZXh0SXRlcmF0b3JCZWhhdmlvckVtaXRDaGFyYWN0ZXJzQmV0d2VlbkFsbFZpc2libGVQb3Np
dGlvbnMgPSAxIDw8IDAsCisgICAgVGV4dEl0ZXJhdG9yQmVoYXZpb3JFbnRlclRleHRDb250cm9s
cyA9IDEgPDwgMSwKKyAgICBUZXh0SXRlcmF0b3JCZWhhdmlvckVtaXRzVGV4dHNXaXRob3V0VHJh
bnNjb2RpbmcgPSAxIDw8IDIsCit9OworCiBjbGFzcyBUZXh0SXRlcmF0b3IgewogcHVibGljOgog
ICAgIFRleHRJdGVyYXRvcigpOwogICAgIGV4cGxpY2l0IFRleHRJdGVyYXRvcihjb25zdCBSYW5n
ZSosIGJvb2wgZW1pdENoYXJhY3RlcnNCZXR3ZWVuQWxsVmlzaWJsZVBvc2l0aW9ucyA9IGZhbHNl
LCBib29sIGVudGVyVGV4dENvbnRyb2xzID0gZmFsc2UpOwotICAgIAorICAgIFRleHRJdGVyYXRv
cihjb25zdCBSYW5nZSosIFRleHRJdGVyYXRvckJlaGF2aW9yKTsKKwogICAgIGJvb2wgYXRFbmQo
KSBjb25zdCB7IHJldHVybiAhbV9wb3NpdGlvbk5vZGU7IH0KICAgICB2b2lkIGFkdmFuY2UoKTsK
ICAgICAKQEAgLTg3LDYgKzk1LDcgQEAgcHVibGljOgogICAgIHN0YXRpYyBQYXNzUmVmUHRyPFJh
bmdlPiBzdWJyYW5nZShSYW5nZSogZW50aXJlUmFuZ2UsIGludCBjaGFyYWN0ZXJPZmZzZXQsIGlu
dCBjaGFyYWN0ZXJDb3VudCk7CiAgICAgCiBwcml2YXRlOgorICAgIHZvaWQgaW5pdChjb25zdCBS
YW5nZSopOwogICAgIHZvaWQgZXhpdE5vZGUoKTsKICAgICBib29sIHNob3VsZFJlcHJlc2VudE5v
ZGVPZmZzZXRaZXJvKCk7CiAgICAgYm9vbCBzaG91bGRFbWl0U3BhY2VCZWZvcmVBbmRBZnRlck5v
ZGUoTm9kZSopOwpAQCAtMTQ3LDYgKzE1Niw5IEBAIHByaXZhdGU6CiAgICAgLy8gbW92ZVBhcmFn
cmFwaHMgdG8gbm90IGNsb25lL2Rlc3Ryb3kgbW92ZWQgY29udGVudC4KICAgICBib29sIG1fZW1p
dENoYXJhY3RlcnNCZXR3ZWVuQWxsVmlzaWJsZVBvc2l0aW9uczsKICAgICBib29sIG1fZW50ZXJU
ZXh0Q29udHJvbHM7CisKKyAgICAvLyBVc2VkIHdoZW4gd2Ugd2FudCB0ZXh0cyBmb3IgY29weWlu
ZywgcGFzdGluZywgYW5kIHRyYW5zcG9zaW5nLgorICAgIGJvb2wgbV9lbWl0c1RleHRXaXRob3V0
VHJhbnNjb2Rpbmc7CiB9OwogCiAvLyBJdGVyYXRlcyB0aHJvdWdoIHRoZSBET00gcmFuZ2UsIHJl
dHVybmluZyBhbGwgdGhlIHRleHQsIGFuZCAwLWxlbmd0aCBib3VuZGFyaWVzCmRpZmYgLS1naXQg
YS9XZWJDb3JlL3BsYXRmb3JtL21hYy9QYXN0ZWJvYXJkTWFjLm1tIGIvV2ViQ29yZS9wbGF0Zm9y
bS9tYWMvUGFzdGVib2FyZE1hYy5tbQppbmRleCAwODZiMjcyLi4wM2VkZTAzIDEwMDY0NAotLS0g
YS9XZWJDb3JlL3BsYXRmb3JtL21hYy9QYXN0ZWJvYXJkTWFjLm1tCisrKyBiL1dlYkNvcmUvcGxh
dGZvcm0vbWFjL1Bhc3RlYm9hcmRNYWMubW0KQEAgLTE4NCw3ICsxODQsNyBAQCB2b2lkIFBhc3Rl
Ym9hcmQ6OndyaXRlU2VsZWN0aW9uKE5TUGFzdGVib2FyZCogcGFzdGVib2FyZCwgUmFuZ2UqIHNl
bGVjdGVkUmFuZ2UsCiAgICAgaWYgKFt0eXBlcyBjb250YWluc09iamVjdDpOU1N0cmluZ1Bib2Fy
ZFR5cGVdKSB7CiAgICAgICAgIC8vIE1hcCAmbmJzcDsgdG8gYSBwbGFpbiBvbGQgc3BhY2UgYmVj
YXVzZSB0aGlzIGlzIGJldHRlciBmb3Igc291cmNlIGNvZGUsIG90aGVyIGJyb3dzZXJzIGRvIGl0
LAogICAgICAgICAvLyBhbmQgYmVjYXVzZSBIVE1MIGZvcmNlcyB5b3UgdG8gZG8gdGhpcyBhbnkg
dGltZSB5b3Ugd2FudCB0d28gc3BhY2VzIGluIGEgcm93LgotICAgICAgICBTdHJpbmcgdGV4dCA9
IGZyYW1lLT5kaXNwbGF5U3RyaW5nTW9kaWZpZWRCeUVuY29kaW5nKHNlbGVjdGVkUmFuZ2UtPnRl
eHQoKSk7CisgICAgICAgIFN0cmluZyB0ZXh0ID0gc2VsZWN0ZWRSYW5nZS0+dGV4dCgpOwogICAg
ICAgICBOU011dGFibGVTdHJpbmcgKnMgPSBbW1soTlNTdHJpbmcqKXRleHQgY29weV0gYXV0b3Jl
bGVhc2VdIG11dGFibGVDb3B5XTsKICAgICAgICAgCiAgICAgICAgIE5TU3RyaW5nICpOb25CcmVh
a2luZ1NwYWNlU3RyaW5nID0gW05TU3RyaW5nIHN0cmluZ1dpdGhDaGFyYWN0ZXJzOiZub0JyZWFr
U3BhY2UgbGVuZ3RoOjFdOwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L1RleHRF
bmNvZGluZy5oIGIvV2ViQ29yZS9wbGF0Zm9ybS90ZXh0L1RleHRFbmNvZGluZy5oCmluZGV4IDc1
NzQzNDQuLjM0MjliYjUgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcGxhdGZvcm0vdGV4dC9UZXh0RW5j
b2RpbmcuaAorKysgYi9XZWJDb3JlL3BsYXRmb3JtL3RleHQvVGV4dEVuY29kaW5nLmgKQEAgLTc3
LDggKzc3LDkgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICBTdHJpbmcgZGVjb2RlKGNv
bnN0IGNoYXIqLCBzaXplX3QgbGVuZ3RoLCBib29sIHN0b3BPbkVycm9yLCBib29sJiBzYXdFcnJv
cikgY29uc3Q7CiAgICAgICAgIFdURjo6Q1N0cmluZyBlbmNvZGUoY29uc3QgVUNoYXIqLCBzaXpl
X3QgbGVuZ3RoLCBVbmVuY29kYWJsZUhhbmRsaW5nKSBjb25zdDsKIAotICAgIHByaXZhdGU6CiAg
ICAgICAgIFVDaGFyIGJhY2tzbGFzaEFzQ3VycmVuY3lTeW1ib2woKSBjb25zdDsKKworICAgIHBy
aXZhdGU6CiAgICAgICAgIGJvb2wgaXNOb25CeXRlQmFzZWRFbmNvZGluZygpIGNvbnN0OwogICAg
ICAgICBib29sIGlzVVRGN0VuY29kaW5nKCkgY29uc3Q7CiAKZGlmZiAtLWdpdCBhL1dlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlclRleHQuY3BwIGIvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4dC5j
cHAKaW5kZXggNjk1Mjk4Zi4uOTBhZDZkOCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyVGV4dC5jcHAKKysrIGIvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4dC5jcHAKQEAg
LTM5LDYgKzM5LDcgQEAKICNpbmNsdWRlICJTdHJpbmdCdWZmZXIuaCIKICNpbmNsdWRlICJUZXh0
LmgiCiAjaW5jbHVkZSAiVGV4dEJyZWFrSXRlcmF0b3IuaCIKKyNpbmNsdWRlICJUZXh0UmVzb3Vy
Y2VEZWNvZGVyLmgiCiAjaW5jbHVkZSAiVmlzaWJsZVBvc2l0aW9uLmgiCiAjaW5jbHVkZSAiYnJl
YWtfbGluZXMuaCIKICNpbmNsdWRlIDx3dGYvQWx3YXlzSW5saW5lLmg+CkBAIC04OCw3ICs4OSw3
IEBAIHN0YXRpYyB2b2lkIG1ha2VDYXBpdGFsaXplZChTdHJpbmcqIHN0cmluZywgVUNoYXIgcHJl
dmlvdXMpCiBSZW5kZXJUZXh0OjpSZW5kZXJUZXh0KE5vZGUqIG5vZGUsIFBhc3NSZWZQdHI8U3Ry
aW5nSW1wbD4gc3RyKQogICAgICA6IFJlbmRlck9iamVjdChub2RlKQogICAgICAsIG1fbWluV2lk
dGgoLTEpCi0gICAgICwgbV90ZXh0KGRvY3VtZW50KCktPmRpc3BsYXlTdHJpbmdNb2RpZmllZEJ5
RW5jb2Rpbmcoc3RyKSkKKyAgICAgLCBtX3RleHQoc3RyKQogICAgICAsIG1fZmlyc3RUZXh0Qm94
KDApCiAgICAgICwgbV9sYXN0VGV4dEJveCgwKQogICAgICAsIG1fbWF4V2lkdGgoLTEpCkBAIC05
OSw2ICsxMDAsNyBAQCBSZW5kZXJUZXh0OjpSZW5kZXJUZXh0KE5vZGUqIG5vZGUsIFBhc3NSZWZQ
dHI8U3RyaW5nSW1wbD4gc3RyKQogICAgICAsIG1fY29udGFpbnNSZXZlcnNlZFRleHQoZmFsc2Up
CiAgICAgICwgbV9pc0FsbEFTQ0lJKG1fdGV4dC5jb250YWluc09ubHlBU0NJSSgpKQogICAgICAs
IG1fa25vd25Ub0hhdmVOb092ZXJmbG93QW5kTm9GYWxsYmFja0ZvbnRzKGZhbHNlKQorICAgICAs
IG1fbmVlZHNUcmFuc2NvZGluZyhmYWxzZSkKIHsKICAgICBBU1NFUlQobV90ZXh0KTsKIApAQCAt
MTM1LDYgKzEzNywxMSBAQCBib29sIFJlbmRlclRleHQ6OmlzV29yZEJyZWFrKCkgY29uc3QKICAg
ICByZXR1cm4gZmFsc2U7CiB9CiAKK3ZvaWQgUmVuZGVyVGV4dDo6dXBkYXRlTmVlZHNUcmFuc2Nv
ZGluZygpCit7CisgICAgbV9uZWVkc1RyYW5zY29kaW5nID0gZG9jdW1lbnQoKS0+ZGVjb2Rlcigp
ICYmIGRvY3VtZW50KCktPmRlY29kZXIoKS0+ZW5jb2RpbmcoKS5iYWNrc2xhc2hBc0N1cnJlbmN5
U3ltYm9sKCkgIT0gJ1xcJzsKK30KKwogdm9pZCBSZW5kZXJUZXh0OjpzdHlsZURpZENoYW5nZShT
dHlsZURpZmZlcmVuY2UgZGlmZiwgY29uc3QgUmVuZGVyU3R5bGUqIG9sZFN0eWxlKQogewogICAg
IC8vIFRoZXJlIGlzIG5vIG5lZWQgdG8gZXZlciBzY2hlZHVsZSByZXBhaW50cyBmcm9tIGEgc3R5
bGUgY2hhbmdlIG9mIGEgdGV4dCBydW4sIHNpbmNlCkBAIC0xNDYsMTAgKzE1MywxNSBAQCB2b2lk
IFJlbmRlclRleHQ6OnN0eWxlRGlkQ2hhbmdlKFN0eWxlRGlmZmVyZW5jZSBkaWZmLCBjb25zdCBS
ZW5kZXJTdHlsZSogb2xkU3R5bAogICAgICAgICBtX2tub3duVG9IYXZlTm9PdmVyZmxvd0FuZE5v
RmFsbGJhY2tGb250cyA9IGZhbHNlOwogICAgIH0KIAorICAgIGJvb2wgbmVlZHNSZXNldFRleHQg
PSBmYWxzZTsKKyAgICBpZiAoIW9sZFN0eWxlKSB7CisgICAgICAgIHVwZGF0ZU5lZWRzVHJhbnNj
b2RpbmcoKTsKKyAgICAgICAgbmVlZHNSZXNldFRleHQgPSBtX25lZWRzVHJhbnNjb2Rpbmc7Cisg
ICAgfQorCiAgICAgRVRleHRUcmFuc2Zvcm0gb2xkVHJhbnNmb3JtID0gb2xkU3R5bGUgPyBvbGRT
dHlsZS0+dGV4dFRyYW5zZm9ybSgpIDogVFROT05FOwogICAgIEVUZXh0U2VjdXJpdHkgb2xkU2Vj
dXJpdHkgPSBvbGRTdHlsZSA/IG9sZFN0eWxlLT50ZXh0U2VjdXJpdHkoKSA6IFRTTk9ORTsKLQot
ICAgIGlmIChvbGRUcmFuc2Zvcm0gIT0gc3R5bGUoKS0+dGV4dFRyYW5zZm9ybSgpIHx8IG9sZFNl
Y3VyaXR5ICE9IHN0eWxlKCktPnRleHRTZWN1cml0eSgpKSB7CisgICAgaWYgKG5lZWRzUmVzZXRU
ZXh0IHx8IG9sZFRyYW5zZm9ybSAhPSBzdHlsZSgpLT50ZXh0VHJhbnNmb3JtKCkgfHwgb2xkU2Vj
dXJpdHkgIT0gc3R5bGUoKS0+dGV4dFNlY3VyaXR5KCkpIHsKICAgICAgICAgaWYgKFJlZlB0cjxT
dHJpbmdJbXBsPiB0ZXh0VG9UcmFuc2Zvcm0gPSBvcmlnaW5hbFRleHQoKSkKICAgICAgICAgICAg
IHNldFRleHQodGV4dFRvVHJhbnNmb3JtLnJlbGVhc2UoKSwgdHJ1ZSk7CiAgICAgfQpAQCAtOTYw
LDcgKzk3Miw3IEBAIHZvaWQgUmVuZGVyVGV4dDo6c2V0VGV4dFdpdGhPZmZzZXQoUGFzc1JlZlB0
cjxTdHJpbmdJbXBsPiB0ZXh0LCB1bnNpZ25lZCBvZmZzZXQsCiAgICAgc2V0VGV4dCh0ZXh0LCBm
b3JjZSk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgYm9vbCBpc0lubGluZUZsb3dPckVtcHR5VGV4dChS
ZW5kZXJPYmplY3QqIG8pCitzdGF0aWMgaW5saW5lIGJvb2wgaXNJbmxpbmVGbG93T3JFbXB0eVRl
eHQoY29uc3QgUmVuZGVyT2JqZWN0KiBvKQogewogICAgIGlmIChvLT5pc1JlbmRlcklubGluZSgp
KQogICAgICAgICByZXR1cm4gdHJ1ZTsKQEAgLTk3MiwxMCArOTg0LDEwIEBAIHN0YXRpYyBpbmxp
bmUgYm9vbCBpc0lubGluZUZsb3dPckVtcHR5VGV4dChSZW5kZXJPYmplY3QqIG8pCiAgICAgcmV0
dXJuICF0ZXh0LT5sZW5ndGgoKTsKIH0KIAotVUNoYXIgUmVuZGVyVGV4dDo6cHJldmlvdXNDaGFy
YWN0ZXIoKQorVUNoYXIgUmVuZGVyVGV4dDo6cHJldmlvdXNDaGFyYWN0ZXIoKSBjb25zdAogewog
ICAgIC8vIGZpbmQgcHJldmlvdXMgdGV4dCByZW5kZXJlciBpZiBvbmUgZXhpc3RzCi0gICAgUmVu
ZGVyT2JqZWN0KiBwcmV2aW91c1RleHQgPSB0aGlzOworICAgIGNvbnN0IFJlbmRlck9iamVjdCog
cHJldmlvdXNUZXh0ID0gdGhpczsKICAgICB3aGlsZSAoKHByZXZpb3VzVGV4dCA9IHByZXZpb3Vz
VGV4dC0+cHJldmlvdXNJblByZU9yZGVyKCkpKQogICAgICAgICBpZiAoIWlzSW5saW5lRmxvd09y
RW1wdHlUZXh0KHByZXZpb3VzVGV4dCkpCiAgICAgICAgICAgICBicmVhazsKQEAgLTk4NiwxMCAr
OTk4LDMxIEBAIFVDaGFyIFJlbmRlclRleHQ6OnByZXZpb3VzQ2hhcmFjdGVyKCkKICAgICByZXR1
cm4gcHJldjsKIH0KIAordm9pZCBSZW5kZXJUZXh0Ojp0cmFuc2Zvcm1UZXh0KFN0cmluZyYgdGV4
dCkgY29uc3QKK3sKKyAgICBBU1NFUlQoc3R5bGUoKSk7CisgICAgc3dpdGNoIChzdHlsZSgpLT50
ZXh0VHJhbnNmb3JtKCkpIHsKKyAgICBjYXNlIFRUTk9ORToKKyAgICAgICAgYnJlYWs7CisgICAg
Y2FzZSBDQVBJVEFMSVpFOgorICAgICAgICBtYWtlQ2FwaXRhbGl6ZWQoJnRleHQsIHByZXZpb3Vz
Q2hhcmFjdGVyKCkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFVQUEVSQ0FTRToKKyAgICAg
ICAgdGV4dC5tYWtlVXBwZXIoKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBMT1dFUkNBU0U6
CisgICAgICAgIHRleHQubWFrZUxvd2VyKCk7CisgICAgICAgIGJyZWFrOworICAgIH0KK30KKwog
dm9pZCBSZW5kZXJUZXh0OjpzZXRUZXh0SW50ZXJuYWwoUGFzc1JlZlB0cjxTdHJpbmdJbXBsPiB0
ZXh0KQogewogICAgIEFTU0VSVCh0ZXh0KTsKLSAgICBtX3RleHQgPSBkb2N1bWVudCgpLT5kaXNw
bGF5U3RyaW5nTW9kaWZpZWRCeUVuY29kaW5nKHRleHQpOworICAgIGlmIChtX25lZWRzVHJhbnNj
b2RpbmcpCisgICAgICAgIG1fdGV4dCA9IGRvY3VtZW50KCktPmRpc3BsYXlTdHJpbmdNb2RpZmll
ZEJ5RW5jb2RpbmcodGV4dCk7CisgICAgZWxzZQorICAgICAgICBtX3RleHQgPSB0ZXh0OwogICAg
IEFTU0VSVChtX3RleHQpOwogCiAjaWYgRU5BQkxFKFNWRykKQEAgLTEwMjIsMzMgKzEwNTUsMjEg
QEAgdm9pZCBSZW5kZXJUZXh0OjpzZXRUZXh0SW50ZXJuYWwoUGFzc1JlZlB0cjxTdHJpbmdJbXBs
PiB0ZXh0KQogI2VuZGlmCiAKICAgICBpZiAoc3R5bGUoKSkgewotICAgICAgICBzd2l0Y2ggKHN0
eWxlKCktPnRleHRUcmFuc2Zvcm0oKSkgewotICAgICAgICAgICAgY2FzZSBUVE5PTkU6Ci0gICAg
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIENBUElUQUxJWkU6Ci0gICAgICAg
ICAgICAgICAgbWFrZUNhcGl0YWxpemVkKCZtX3RleHQsIHByZXZpb3VzQ2hhcmFjdGVyKCkpOwot
ICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSBVUFBFUkNBU0U6Ci0gICAg
ICAgICAgICAgICAgbV90ZXh0Lm1ha2VVcHBlcigpOwotICAgICAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICAgICAgY2FzZSBMT1dFUkNBU0U6Ci0gICAgICAgICAgICAgICAgbV90ZXh0Lm1ha2VM
b3dlcigpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9CisgICAgICAgIHRyYW5z
Zm9ybVRleHQobV90ZXh0KTsKIAogICAgICAgICAvLyBXZSB1c2UgdGhlIHNhbWUgY2hhcmFjdGVy
cyBoZXJlIGFzIGZvciBsaXN0IG1hcmtlcnMuCiAgICAgICAgIC8vIFNlZSB0aGUgbGlzdE1hcmtl
clRleHQgZnVuY3Rpb24gaW4gUmVuZGVyTGlzdE1hcmtlci5jcHAuCiAgICAgICAgIHN3aXRjaCAo
c3R5bGUoKS0+dGV4dFNlY3VyaXR5KCkpIHsKLSAgICAgICAgICAgIGNhc2UgVFNOT05FOgotICAg
ICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSBUU0NJUkNMRToKLSAgICAgICAg
ICAgICAgICBtX3RleHQubWFrZVNlY3VyZSh3aGl0ZUJ1bGxldCk7Ci0gICAgICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgICAgICBjYXNlIFRTRElTQzoKLSAgICAgICAgICAgICAgICBtX3RleHQu
bWFrZVNlY3VyZShidWxsZXQpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAg
Y2FzZSBUU1NRVUFSRToKLSAgICAgICAgICAgICAgICBtX3RleHQubWFrZVNlY3VyZShibGFja1Nx
dWFyZSk7CisgICAgICAgIGNhc2UgVFNOT05FOgorICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
IGNhc2UgVFNDSVJDTEU6CisgICAgICAgICAgICBtX3RleHQubWFrZVNlY3VyZSh3aGl0ZUJ1bGxl
dCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBUU0RJU0M6CisgICAgICAgICAg
ICBtX3RleHQubWFrZVNlY3VyZShidWxsZXQpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
IGNhc2UgVFNTUVVBUkU6CisgICAgICAgICAgICBtX3RleHQubWFrZVNlY3VyZShibGFja1NxdWFy
ZSk7CiAgICAgICAgIH0KICAgICB9CiAKQEAgLTEwNzQsNiArMTA5NSwyMCBAQCB2b2lkIFJlbmRl
clRleHQ6OnNldFRleHQoUGFzc1JlZlB0cjxTdHJpbmdJbXBsPiB0ZXh0LCBib29sIGZvcmNlKQog
ICAgICAgICBheE9iamVjdENhY2hlLT5jb250ZW50Q2hhbmdlZCh0aGlzKTsKIH0KIAorU3RyaW5n
IFJlbmRlclRleHQ6OnRleHRXaXRob3V0VHJhbnNjb2RpbmcoKSBjb25zdAoreworICAgIC8vIElm
IG1fdGV4dCBpc24ndCB0cmFuc2NvZGVkIG9yIGlzIHNlY3VyZSwgd2UgY2FuIGp1c3QgcmV0dXJu
IHRoZSBtb2RpZmllZCB0ZXh0LgorICAgIGlmICghbV9uZWVkc1RyYW5zY29kaW5nIHx8IHN0eWxl
KCktPnRleHRTZWN1cml0eSgpICE9IFRTTk9ORSkKKyAgICAgICAgcmV0dXJuIHRleHQoKTsKKwor
ICAgIC8vIE90aGVyd2lzZSwgd2Ugc2hvdWxkIHVzZSBvcmlnaW5hbCB0ZXh0LiBJZiB0ZXh0LXRy
YW5zZm9ybSBpcworICAgIC8vIHNwZWNpZmllZCwgd2Ugc2hvdWxkIHRyYW5zZm9ybSB0aGUgdGV4
dCBvbiB0aGUgZmx5LgorICAgIFN0cmluZyB0ZXh0ID0gb3JpZ2luYWxUZXh0KCk7CisgICAgaWYg
KHN0eWxlKCkpCisgICAgICAgIHRyYW5zZm9ybVRleHQodGV4dCk7CisgICAgcmV0dXJuIHRleHQ7
Cit9CisKIGludCBSZW5kZXJUZXh0OjpsaW5lSGVpZ2h0KGJvb2wgZmlyc3RMaW5lLCBib29sKSBj
b25zdAogewogICAgIC8vIEFsd2F5cyB1c2UgdGhlIGludGVyaW9yIGxpbmUgaGVpZ2h0IG9mIHRo
ZSBwYXJlbnQgKGUuZy4sIGlmIG91ciBwYXJlbnQgaXMgYW4gaW5saW5lIGJsb2NrKS4KZGlmZiAt
LWdpdCBhL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRleHQuaCBiL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlclRleHQuaAppbmRleCA5YjE0NjdkLi45MmM4MmUxIDEwMDY0NAotLS0gYS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJUZXh0LmgKKysrIGIvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4
dC5oCkBAIC01MSw2ICs1MSw3IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgZGVzdHJveSgp
OwogCiAgICAgU3RyaW5nSW1wbCogdGV4dCgpIGNvbnN0IHsgcmV0dXJuIG1fdGV4dC5pbXBsKCk7
IH0KKyAgICBTdHJpbmcgdGV4dFdpdGhvdXRUcmFuc2NvZGluZygpIGNvbnN0OwogCiAgICAgSW5s
aW5lVGV4dEJveCogY3JlYXRlSW5saW5lVGV4dEJveCgpOwogICAgIHZvaWQgZGlydHlMaW5lQm94
ZXMoYm9vbCBmdWxsTGF5b3V0KTsKQEAgLTEyOCw3ICsxMjksNyBAQCBwcm90ZWN0ZWQ6CiAgICAg
dmlydHVhbCB2b2lkIHN0eWxlRGlkQ2hhbmdlKFN0eWxlRGlmZmVyZW5jZSwgY29uc3QgUmVuZGVy
U3R5bGUqIG9sZFN0eWxlKTsKIAogICAgIHZpcnR1YWwgdm9pZCBzZXRUZXh0SW50ZXJuYWwoUGFz
c1JlZlB0cjxTdHJpbmdJbXBsPik7Ci0gICAgdmlydHVhbCBVQ2hhciBwcmV2aW91c0NoYXJhY3Rl
cigpOworICAgIHZpcnR1YWwgVUNoYXIgcHJldmlvdXNDaGFyYWN0ZXIoKSBjb25zdDsKICAgICAK
ICAgICB2aXJ0dWFsIElubGluZVRleHRCb3gqIGNyZWF0ZVRleHRCb3goKTsgLy8gU3ViY2xhc3Nl
ZCBieSBTVkcuCiAKQEAgLTE0OCw2ICsxNDksOSBAQCBwcml2YXRlOgogICAgIGJvb2wgY29udGFp
bnNPbmx5V2hpdGVzcGFjZSh1bnNpZ25lZCBmcm9tLCB1bnNpZ25lZCBsZW4pIGNvbnN0OwogICAg
IGludCB3aWR0aEZyb21DYWNoZShjb25zdCBGb250JiwgaW50IHN0YXJ0LCBpbnQgbGVuLCBpbnQg
eFBvcywgSGFzaFNldDxjb25zdCBTaW1wbGVGb250RGF0YSo+KiBmYWxsYmFja0ZvbnRzLCBHbHlw
aE92ZXJmbG93KikgY29uc3Q7CiAgICAgYm9vbCBpc0FsbEFTQ0lJKCkgY29uc3QgeyByZXR1cm4g
bV9pc0FsbEFTQ0lJOyB9CisgICAgdm9pZCB1cGRhdGVOZWVkc1RyYW5zY29kaW5nKCk7CisKKyAg
ICBpbmxpbmUgdm9pZCB0cmFuc2Zvcm1UZXh0KFN0cmluZyYpIGNvbnN0OwogCiAgICAgaW50IG1f
bWluV2lkdGg7IC8vIGhlcmUgdG8gbWluaW1pemUgcGFkZGluZyBpbiA2NC1iaXQuCiAKQEAgLTE3
Miw2ICsxNzYsNyBAQCBwcml2YXRlOgogICAgIGJvb2wgbV9jb250YWluc1JldmVyc2VkVGV4dCA6
IDE7CiAgICAgYm9vbCBtX2lzQWxsQVNDSUkgOiAxOwogICAgIG11dGFibGUgYm9vbCBtX2tub3du
VG9IYXZlTm9PdmVyZmxvd0FuZE5vRmFsbGJhY2tGb250cyA6IDE7CisgICAgYm9vbCBtX25lZWRz
VHJhbnNjb2RpbmcgOiAxOwogfTsKIAogaW5saW5lIFJlbmRlclRleHQqIHRvUmVuZGVyVGV4dChS
ZW5kZXJPYmplY3QqIG9iamVjdCkKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
clRleHRDb250cm9sLmNwcCBiL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRleHRDb250cm9sLmNw
cAppbmRleCBhMTFiMjliLi41ZTE5MzYyIDEwMDY0NAotLS0gYS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJUZXh0Q29udHJvbC5jcHAKKysrIGIvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4dENv
bnRyb2wuY3BwCkBAIC0xNjcsMTUgKzE2Nyw3IEBAIHZvaWQgUmVuZGVyVGV4dENvbnRyb2w6OnVw
ZGF0ZUZyb21FbGVtZW50KCkKIAogdm9pZCBSZW5kZXJUZXh0Q29udHJvbDo6c2V0SW5uZXJUZXh0
VmFsdWUoY29uc3QgU3RyaW5nJiBpbm5lclRleHRWYWx1ZSkKIHsKLSAgICBTdHJpbmcgdmFsdWU7
Ci0KLSAgICBpZiAoaW5uZXJUZXh0VmFsdWUuaXNOdWxsKCkpCi0gICAgICAgIHZhbHVlID0gIiI7
Ci0gICAgZWxzZSB7Ci0gICAgICAgIHZhbHVlID0gaW5uZXJUZXh0VmFsdWU7IAotICAgICAgICB2
YWx1ZSA9IGRvY3VtZW50KCktPmRpc3BsYXlTdHJpbmdNb2RpZmllZEJ5RW5jb2RpbmcodmFsdWUp
OwotICAgIH0KLQorICAgIFN0cmluZyB2YWx1ZSA9IGlubmVyVGV4dFZhbHVlOwogICAgIGlmICh2
YWx1ZSAhPSB0ZXh0KCkgfHwgIW1faW5uZXJUZXh0LT5oYXNDaGlsZE5vZGVzKCkpIHsKICAgICAg
ICAgaWYgKHZhbHVlICE9IHRleHQoKSkgewogICAgICAgICAgICAgaWYgKEZyYW1lKiBmcmFtZSA9
IGRvY3VtZW50KCktPmZyYW1lKCkpIHsKQEAgLTMxOCw5ICszMTAsNiBAQCBTdHJpbmcgUmVuZGVy
VGV4dENvbnRyb2w6OmZpbmlzaFRleHQoVmVjdG9yPFVDaGFyPiYgcmVzdWx0KSBjb25zdAogICAg
IGlmIChzaXplICYmIHJlc3VsdFtzaXplIC0gMV0gPT0gJ1xuJykKICAgICAgICAgcmVzdWx0LnNo
cmluaygtLXNpemUpOwogCi0gICAgLy8gQ29udmVydCBiYWNrc2xhc2ggdG8gY3VycmVuY3kgc3lt
Ym9sLgotICAgIGRvY3VtZW50KCktPmRpc3BsYXlCdWZmZXJNb2RpZmllZEJ5RW5jb2RpbmcocmVz
dWx0LmRhdGEoKSwgcmVzdWx0LnNpemUoKSk7Ci0gICAgCiAgICAgcmV0dXJuIFN0cmluZzo6YWRv
cHQocmVzdWx0KTsKIH0KIApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4
dEZyYWdtZW50LmNwcCBiL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRleHRGcmFnbWVudC5jcHAK
aW5kZXggZjMzOThhMy4uMjE2NGFlMSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyVGV4dEZyYWdtZW50LmNwcAorKysgYi9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0RnJh
Z21lbnQuY3BwCkBAIC03Niw3ICs3Niw3IEBAIHZvaWQgUmVuZGVyVGV4dEZyYWdtZW50OjpzZXRU
ZXh0SW50ZXJuYWwoUGFzc1JlZlB0cjxTdHJpbmdJbXBsPiB0ZXh0KQogICAgIH0KIH0KIAotVUNo
YXIgUmVuZGVyVGV4dEZyYWdtZW50OjpwcmV2aW91c0NoYXJhY3RlcigpCitVQ2hhciBSZW5kZXJU
ZXh0RnJhZ21lbnQ6OnByZXZpb3VzQ2hhcmFjdGVyKCkgY29uc3QKIHsKICAgICBpZiAoc3RhcnQo
KSkgewogICAgICAgICBOb2RlKiBlID0gbm9kZSgpOwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyVGV4dEZyYWdtZW50LmggYi9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0
RnJhZ21lbnQuaAppbmRleCAxZmE1MDlhLi5lMzUxNDM2IDEwMDY0NAotLS0gYS9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJUZXh0RnJhZ21lbnQuaAorKysgYi9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJUZXh0RnJhZ21lbnQuaApAQCAtNTEsNyArNTEsNyBAQCBwdWJsaWM6CiAKIHByaXZhdGU6CiAg
ICAgdmlydHVhbCB2b2lkIHNldFRleHRJbnRlcm5hbChQYXNzUmVmUHRyPFN0cmluZ0ltcGw+KTsK
LSAgICB2aXJ0dWFsIFVDaGFyIHByZXZpb3VzQ2hhcmFjdGVyKCk7CisgICAgdmlydHVhbCBVQ2hh
ciBwcmV2aW91c0NoYXJhY3RlcigpIGNvbnN0OwogCiAgICAgdW5zaWduZWQgbV9zdGFydDsKICAg
ICB1bnNpZ25lZCBtX2VuZDsK
</data>
<flag name="review"
          id="37711"
          type_id="1"
          status="+"
          setter="darin"
    />
          </attachment>
      

    </bug>

</bugzilla>