<?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>135733</bug_id>
          
          <creation_ts>2014-08-07 15:55:38 -0700</creation_ts>
          <short_desc>CSS JIT: support :scope</short_desc>
          <delta_ts>2014-08-11 13:24:54 -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>CSS</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>135255</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Yusuke Suzuki">ysuzuki</reporter>
          <assigned_to name="Yusuke Suzuki">ysuzuki</assigned_to>
          <cc>achristensen</cc>
    
    <cc>benjamin</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1027677</commentid>
    <comment_count>0</comment_count>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2014-08-07 15:55:38 -0700</bug_when>
    <thetext>Supporting :scope. It makes CheckingContext more similar to SelectorChecker::SelectorCheckingContext.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1027689</commentid>
    <comment_count>1</comment_count>
      <attachid>236240</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2014-08-07 16:47:32 -0700</bug_when>
    <thetext>Created attachment 236240
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1027692</commentid>
    <comment_count>2</comment_count>
      <attachid>236240</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2014-08-07 16:51:21 -0700</bug_when>
    <thetext>Comment on attachment 236240
Patch

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

Added comments.

&gt; Source/WebCore/cssjit/SelectorCompiler.cpp:528
&gt; +        return FunctionType::SelectorCheckerWithCheckingContext;

When the context is QuerySelecor, it requires CheckingContext. Otherwise, :scope works as :root since context.scope is nullptr.

&gt; Source/WebCore/cssjit/SelectorCompiler.cpp:-1629
&gt; -    RELEASE_ASSERT(m_selectorContext == SelectorContext::RuleCollector);

Now, QueryingRules can accept CheckingContext.

&gt; Source/WebCore/dom/SelectorQuery.cpp:384
&gt; +    checkingContext.scope = rootNode.isDocumentNode() ? nullptr : &amp;rootNode;

searchRootNode may be filtered with id. So taking rootNode additionally and set it to context.scope.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1027698</commentid>
    <comment_count>3</comment_count>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2014-08-07 17:01:55 -0700</bug_when>
    <thetext>Ah, since :scope process is very small, CSS JIT can inline it. I&apos;ll submit the patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1027728</commentid>
    <comment_count>4</comment_count>
      <attachid>236252</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2014-08-07 18:37:03 -0700</bug_when>
    <thetext>Created attachment 236252
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1027959</commentid>
    <comment_count>5</comment_count>
      <attachid>236252</attachid>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2014-08-08 14:54:56 -0700</bug_when>
    <thetext>Comment on attachment 236252
Patch

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

Great patch. Some nitpick below:

&gt; Source/WebCore/ChangeLog:17
&gt; +        * cssjit/SelectorCompiler.cpp:

addFlagsToElementStyleFromContext() should get an ASSERT(m_selectorContext == SelectorContext::QuerySelector).

Maybe shouldUseRenderStyleFromCheckingContext() could get one too. It is not really incorrect to call that for QuerySelector but that is suspicious if that happen. You would need to refactor some test functions.

&gt; Source/WebCore/cssjit/SelectorCompiler.cpp:2971
&gt; +    RELEASE_ASSERT(m_selectorContext == SelectorContext::QuerySelector);

This could be a regular assertion. Your code below handle the null case correctly if that were to happen.

&gt; Source/WebCore/cssjit/SelectorCompiler.cpp:2985
&gt; +    Assembler::Jump successCase;
&gt; +    {
&gt; +        LocalRegister checkingContext(m_registerAllocator);
&gt; +        loadCheckingContext(checkingContext);
&gt; +
&gt; +        Assembler::Jump scopeIsNull = m_assembler.branchTestPtr(Assembler::Zero, Assembler::Address(checkingContext, OBJECT_OFFSETOF(CheckingContext, scope)));
&gt; +        successCase = m_assembler.branchPtr(Assembler::Equal, Assembler::Address(checkingContext, OBJECT_OFFSETOF(CheckingContext, scope)), elementAddressRegister);
&gt; +        failureCases.append(m_assembler.jump());
&gt; +
&gt; +        scopeIsNull.link(&amp;m_assembler);
&gt; +    }
&gt; +    generateElementIsRoot(failureCases);
&gt; +    successCase.link(&amp;m_assembler);

Alternative idea to write this with fewer jumps:

1) Reserve register &quot;scope&quot;.
2) Load &quot;checkingContext, OBJECT_OFFSETOF(CheckingContext, scope)&quot; into &quot;scope&quot;.
3) Check for nullity, if null, jump to [5]
4) Load the root in scope with getDocument().
5) Compare scope and elementAddressRegister, fail if they are not equal.

Please put the update for review if you do this.

&gt; Source/WebCore/cssjit/SelectorCompiler.cpp:3002
&gt;      // When fragment doesn&apos;t have a pseudo element, there&apos;s no need to mark the pseudo element style.
&gt;      if (!fragment.pseudoElementSelector)
&gt;          return;

Ooops, loadCheckingContext() should have been after that if() :)

&gt; LayoutTests/ChangeLog:13
&gt; +        * fast/selectors/querySelector-scope-filtered-root.html: Added.

Good idea to test that!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1028001</commentid>
    <comment_count>6</comment_count>
      <attachid>236252</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2014-08-08 16:37:32 -0700</bug_when>
    <thetext>Comment on attachment 236252
Patch

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

Thank you for your great review!

&gt;&gt; Source/WebCore/ChangeLog:17
&gt;&gt; +        * cssjit/SelectorCompiler.cpp:
&gt; 
&gt; addFlagsToElementStyleFromContext() should get an ASSERT(m_selectorContext == SelectorContext::QuerySelector).
&gt; 
&gt; Maybe shouldUseRenderStyleFromCheckingContext() could get one too. It is not really incorrect to call that for QuerySelector but that is suspicious if that happen. You would need to refactor some test functions.

Seeing the implementation, threre&apos;s a lot of `if (m_selectorContext == SelectorChecker::QuerySelector)` check on the function entry of the test functions. As the result, the content of the function is splitted into 2.
In this time, I&apos;ve refactored them a little(1); Making the function&apos;s structure consistent like,

if (m_selectorContext == SelectorChecker::QuerySelector) {
   .... // content for QuerySelector
   return;    // return early
}
ASSERT(m_selectorContext == SelectorChecker::QuerySelector);
...  // content for RuleCollector


And inserting assertions.


But I think there&apos;s the more aggressive way(2) to do this;
Pushing selectorContext value into SelectorCodeGenerator&apos;s template variable (SelectorCodeGenerator&lt;SelectorContext&gt;) and split these test functions to `SelectorCodeGenerator&lt;QuerySelector&gt;::generateXXXTest` and `SelectorCodeGenerator&lt;RuleCollector&gt;::generateXXXTest`.
This can guarantee that SelectorContext is QuerySelector (vice versa) statically by the compiler.
Maybe this is a little bit radical change, in the following patch, I took (1). But if (2) is preferable, I&apos;ll open the new bug and fix it :)
What do you think about the plan (2)?

&gt;&gt; Source/WebCore/cssjit/SelectorCompiler.cpp:2971
&gt;&gt; +    RELEASE_ASSERT(m_selectorContext == SelectorContext::QuerySelector);
&gt; 
&gt; This could be a regular assertion. Your code below handle the null case correctly if that were to happen.

Fixed!

&gt;&gt; Source/WebCore/cssjit/SelectorCompiler.cpp:2985
&gt;&gt; +    successCase.link(&amp;m_assembler);
&gt; 
&gt; Alternative idea to write this with fewer jumps:
&gt; 
&gt; 1) Reserve register &quot;scope&quot;.
&gt; 2) Load &quot;checkingContext, OBJECT_OFFSETOF(CheckingContext, scope)&quot; into &quot;scope&quot;.
&gt; 3) Check for nullity, if null, jump to [5]
&gt; 4) Load the root in scope with getDocument().
&gt; 5) Compare scope and elementAddressRegister, fail if they are not equal.
&gt; 
&gt; Please put the update for review if you do this.

That&apos;s quite nice! I&apos;ll update and upload the patch for your review :)

&gt;&gt; Source/WebCore/cssjit/SelectorCompiler.cpp:3002
&gt;&gt;          return;
&gt; 
&gt; Ooops, loadCheckingContext() should have been after that if() :)

Yeah!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1028004</commentid>
    <comment_count>7</comment_count>
      <attachid>236323</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2014-08-08 16:41:23 -0700</bug_when>
    <thetext>Created attachment 236323
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1028006</commentid>
    <comment_count>8</comment_count>
      <attachid>236323</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2014-08-08 16:45:49 -0700</bug_when>
    <thetext>Comment on attachment 236323
Patch

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

&gt; Source/WebCore/cssjit/SelectorCompiler.cpp:1345
&gt; +    if (m_selectorContext != SelectorContext::QuerySelector &amp;&amp; m_functionType == FunctionType::SelectorCheckerWithCheckingContext) {

Since it is clear that the pseudo element has no effect when the context is QuerySelector, I wrote this guard here.
Is it preferable to pushing this guard into `generateRequestedPseudoElementEqualsToSelectorPseudoElement`?

&gt; Source/WebCore/cssjit/SelectorCompiler.cpp:1592
&gt; +    ASSERT(m_selectorContext != SelectorContext::QuerySelector);

Now `addFlagsToElementStyleFromContext` is called after ASSERT(m_selectorContext != SelectorContext::QuerySelector); assertion is passed in the caller side :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1028007</commentid>
    <comment_count>9</comment_count>
      <attachid>236323</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2014-08-08 16:46:51 -0700</bug_when>
    <thetext>Comment on attachment 236323
Patch

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

&gt; Source/WebCore/cssjit/SelectorCompiler.cpp:3005
&gt; +    failureCases.append(m_assembler.branchPtr(Assembler::NotEqual, scope, elementAddressRegister));

Quite simplified :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1028114</commentid>
    <comment_count>10</comment_count>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2014-08-10 16:00:43 -0700</bug_when>
    <thetext>(In reply to comment #6)
&gt; But I think there&apos;s the more aggressive way(2) to do this;
&gt; Pushing selectorContext value into SelectorCodeGenerator&apos;s template variable (SelectorCodeGenerator&lt;SelectorContext&gt;) and split these test functions to `SelectorCodeGenerator&lt;QuerySelector&gt;::generateXXXTest` and `SelectorCodeGenerator&lt;RuleCollector&gt;::generateXXXTest`.
&gt; This can guarantee that SelectorContext is QuerySelector (vice versa) statically by the compiler.
&gt; Maybe this is a little bit radical change, in the following patch, I took (1). But if (2) is preferable, I&apos;ll open the new bug and fix it :)
&gt; What do you think about the plan (2)?

That seems reasonable but I am afraid this would hurt binary size if the whole compiler becomes a template. ARM CPUs have a tiny Instruction Cache and increasing the binary size tend to hurt a lot. In this code, branch performance is not a bottleneck, we cannot justify increases in binary size.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1028116</commentid>
    <comment_count>11</comment_count>
      <attachid>236323</attachid>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2014-08-10 16:25:22 -0700</bug_when>
    <thetext>Comment on attachment 236323
Patch

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

Brilliant work as usual. Some minor comments below.

&gt;&gt; Source/WebCore/cssjit/SelectorCompiler.cpp:1345
&gt;&gt; +    if (m_selectorContext != SelectorContext::QuerySelector &amp;&amp; m_functionType == FunctionType::SelectorCheckerWithCheckingContext) {
&gt; 
&gt; Since it is clear that the pseudo element has no effect when the context is QuerySelector, I wrote this guard here.
&gt; Is it preferable to pushing this guard into `generateRequestedPseudoElementEqualsToSelectorPseudoElement`?

IMHO, this code is clear with this check...

&gt; Source/WebCore/cssjit/SelectorCompiler.cpp:1398
&gt; +    if (m_selectorContext != SelectorContext::QuerySelector &amp;&amp; m_functionType == FunctionType::SelectorCheckerWithCheckingContext) {

...and it is consistent with the counterpart here.

&gt; Source/WebCore/cssjit/SelectorCompiler.cpp:1642
&gt; +    ASSERT(m_functionType == FunctionType::SelectorCheckerWithCheckingContext);

A RELEASE_ASSERT() could be better here to guard any invalid access to m_checkingContextStackReference.

&gt; Source/WebCore/cssjit/SelectorCompiler.cpp:1827
&gt; +    ASSERT(m_selectorContext != SelectorContext::QuerySelector);
&gt; +

In WebKit we generally avoid ASSERT that repeat a early return.

What you can do is use ASSERT_WITH_MESSAGE to explain the early return.
E.g.: ASSERT_WITH_MESSAGE(m_selectorContext != SelectorContext::QuerySelector, &quot;We should never mark the tree from QuerySelector because that would cause useless style invalidation.&quot;)

...or you can remove this assertion.

&gt; Source/WebCore/cssjit/SelectorCompiler.cpp:1848
&gt; +    ASSERT(m_selectorContext != SelectorContext::QuerySelector);
&gt; +

ditto.

&gt; Source/WebCore/cssjit/SelectorCompiler.cpp:2444
&gt; +    ASSERT(m_selectorContext != SelectorContext::QuerySelector);

ditto.

&gt; Source/WebCore/cssjit/SelectorCompiler.cpp:2446
&gt; +    if (shouldUseRenderStyleFromCheckingContext(m_selectorContext, fragment)) {

This actually looks quite a bit better with your early return.

&gt; Source/WebCore/cssjit/SelectorCompiler.cpp:2479
&gt; +    ASSERT(m_selectorContext != SelectorContext::QuerySelector);

Same comment as above regarding the assertion.

&gt; Source/WebCore/cssjit/SelectorCompiler.cpp:2601
&gt; +    ASSERT(m_selectorContext != SelectorContext::QuerySelector);

ditto.

&gt; Source/WebCore/cssjit/SelectorCompiler.cpp:2673
&gt; +    ASSERT(m_selectorContext != SelectorContext::QuerySelector);

ditto.

&gt; Source/WebCore/cssjit/SelectorCompiler.cpp:2957
&gt; +    ASSERT_WITH_MESSAGE(m_selectorContext != SelectorContext::QuerySelector, &quot;When the fragment has pseudo element, the selector becomres CannotMatchAnything for QuerySelector and this test function is not called.&quot;);

Typo: &quot;becomres&quot;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1028272</commentid>
    <comment_count>12</comment_count>
      <attachid>236323</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2014-08-11 12:28:29 -0700</bug_when>
    <thetext>Comment on attachment 236323
Patch

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

Thank you for your review! So I&apos;ll land it manually with changes you pointed :)

&gt;&gt;&gt; Source/WebCore/cssjit/SelectorCompiler.cpp:1345
&gt;&gt;&gt; +    if (m_selectorContext != SelectorContext::QuerySelector &amp;&amp; m_functionType == FunctionType::SelectorCheckerWithCheckingContext) {
&gt;&gt; 
&gt;&gt; Since it is clear that the pseudo element has no effect when the context is QuerySelector, I wrote this guard here.
&gt;&gt; Is it preferable to pushing this guard into `generateRequestedPseudoElementEqualsToSelectorPseudoElement`?
&gt; 
&gt; IMHO, this code is clear with this check...

OK, so I&apos;ll use this form :)

&gt;&gt; Source/WebCore/cssjit/SelectorCompiler.cpp:1642
&gt;&gt; +    ASSERT(m_functionType == FunctionType::SelectorCheckerWithCheckingContext);
&gt; 
&gt; A RELEASE_ASSERT() could be better here to guard any invalid access to m_checkingContextStackReference.

Nice, I&apos;ve changed it to RELEASE_ASSERT.

&gt;&gt; Source/WebCore/cssjit/SelectorCompiler.cpp:1827
&gt;&gt; +
&gt; 
&gt; In WebKit we generally avoid ASSERT that repeat a early return.
&gt; 
&gt; What you can do is use ASSERT_WITH_MESSAGE to explain the early return.
&gt; E.g.: ASSERT_WITH_MESSAGE(m_selectorContext != SelectorContext::QuerySelector, &quot;We should never mark the tree from QuerySelector because that would cause useless style invalidation.&quot;)
&gt; 
&gt; ...or you can remove this assertion.

Thank you for your pointing. So in this time, I&apos;ve simply dropped it :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1028294</commentid>
    <comment_count>13</comment_count>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2014-08-11 13:24:54 -0700</bug_when>
    <thetext>Committed r172408: &lt;http://trac.webkit.org/changeset/172408&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>236240</attachid>
            <date>2014-08-07 16:47:32 -0700</date>
            <delta_ts>2014-08-07 18:36:59 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-135733-20140808084801.patch</filename>
            <type>text/plain</type>
            <size>23998</size>
            <attacher name="Yusuke Suzuki">ysuzuki</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTcyMjM1CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggN2ExODRiYjUxOTBkMmNl
ZGY2NGQ2ZGNkZWI0NGQwNDY2ODJmODc0YS4uZDA2MTU3N2Q0NzdkNjg0YTg3NGU3YmUxMThhZDBi
ODBmOWVmNjMyYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDM4IEBACisyMDE0LTA4LTA3ICBZdXN1
a2UgU3V6dWtpICA8dXRhdGFuZS50ZWFAZ21haWwuY29tPgorCisgICAgICAgIENTUyBKSVQ6IHN1
cHBvcnQgOnNjb3BlCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD0xMzU3MzMKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAg
ICAgICBJbXBsZW1lbnQgOnNjb3BlIGZvciBDU1MgSklULiBJdCBpbnRyb2R1Y2VzIHNjb3BlIGZp
ZWxkIHRvIENoZWNraW5nQ29udGV4dAorICAgICAgICBhbmQgaXQgbWFrZXMgQ2hlY2tpbmdDb250
ZXh0IG1vcmUgc2ltaWxhciB0byBTZWxlY3RvckNoZWNrZXI6OlNlbGVjdG9yQ2hlY2tpbmdDb250
ZXh0LgorICAgICAgICBBbmQgc2luY2UgOnNjb3BlIHJlcXVpcmVzIENoZWNraW5nQ29udGV4dCwg
UXVlcnlpbmdSdWxlcyBjYW4gYWNjZXB0IFNlbGVjdG9yQ2hlY2tlcldpdGhDaGVja2luZ0NvbnRl
eHQuCisKKyAgICAgICAgVGVzdHM6IGZhc3Qvc2VsZWN0b3JzL3F1ZXJ5U2VsZWN0b3Itc2NvcGUt
ZmlsdGVyZWQtcm9vdC5odG1sCisgICAgICAgICAgICAgICBmYXN0L3NlbGVjdG9ycy9zY29wZS13
b3Jrcy1hcy1yb290Lmh0bWwKKworICAgICAgICAqIGNzcy9FbGVtZW50UnVsZUNvbGxlY3Rvci5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpFbGVtZW50UnVsZUNvbGxlY3Rvcjo6cnVsZU1hdGNoZXMp
OgorICAgICAgICAqIGNzcy9TZWxlY3RvckNoZWNrZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
U2VsZWN0b3JDaGVja2VyOjpjaGVja09uZSk6CisgICAgICAgICogY3NzL1NlbGVjdG9yQ2hlY2tl
clRlc3RGdW5jdGlvbnMuaDoKKyAgICAgICAgKFdlYkNvcmU6Om1hdGNoZXNTY29wZVBzZXVkb0Ns
YXNzKToKKyAgICAgICAgKiBjc3NqaXQvU2VsZWN0b3JDb21waWxlci5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpTZWxlY3RvckNvbXBpbGVyOjphZGRQc2V1ZG9DbGFzc1R5cGUpOgorICAgICAgICAo
V2ViQ29yZTo6U2VsZWN0b3JDb21waWxlcjo6U2VsZWN0b3JDb2RlR2VuZXJhdG9yOjpsb2FkQ2hl
Y2tpbmdDb250ZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OlNlbGVjdG9yQ29tcGlsZXI6OlNlbGVj
dG9yQ29kZUdlbmVyYXRvcjo6Z2VuZXJhdGVFbGVtZW50TWF0Y2hpbmcpOgorICAgICAgICAoV2Vi
Q29yZTo6U2VsZWN0b3JDb21waWxlcjo6U2VsZWN0b3JDb2RlR2VuZXJhdG9yOjpnZW5lcmF0ZVJl
cXVlc3RlZFBzZXVkb0VsZW1lbnRFcXVhbHNUb1NlbGVjdG9yUHNldWRvRWxlbWVudCk6CisgICAg
ICAgIChXZWJDb3JlOjpTZWxlY3RvckNvbXBpbGVyOjpTZWxlY3RvckNvZGVHZW5lcmF0b3I6Omdl
bmVyYXRlRWxlbWVudElzU2NvcGVSb290KToKKyAgICAgICAgKFdlYkNvcmU6OlNlbGVjdG9yQ29t
cGlsZXI6OlNlbGVjdG9yQ29kZUdlbmVyYXRvcjo6Z2VuZXJhdGVNYXJrUHNldWRvU3R5bGVGb3JQ
c2V1ZG9FbGVtZW50KToKKyAgICAgICAgKiBjc3NqaXQvU2VsZWN0b3JDb21waWxlci5oOgorICAg
ICAgICAoV2ViQ29yZTo6U2VsZWN0b3JDb21waWxlcjo6Q2hlY2tpbmdDb250ZXh0OjpDaGVja2lu
Z0NvbnRleHQpOgorICAgICAgICAqIGRvbS9TZWxlY3RvclF1ZXJ5LmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OlNlbGVjdG9yRGF0YUxpc3Q6OmV4ZWN1dGVDb21waWxlZFNpbXBsZVNlbGVjdG9yQ2hl
Y2tlcik6CisgICAgICAgIChXZWJDb3JlOjpTZWxlY3RvckRhdGFMaXN0OjpleGVjdXRlQ29tcGls
ZWRTZWxlY3RvckNoZWNrZXJXaXRoQ2hlY2tpbmdDb250ZXh0KToKKyAgICAgICAgKFdlYkNvcmU6
OlNlbGVjdG9yRGF0YUxpc3Q6OmV4ZWN1dGUpOgorICAgICAgICAqIGRvbS9TZWxlY3RvclF1ZXJ5
Lmg6CisKIDIwMTQtMDgtMDcgIEdvcmRvbiBTaGVyaWRhbiAgPGdvcmRvbl9zaGVyaWRhbkBhcHBs
ZS5jb20+CiAKICAgICAgICAgUHJvdmlkZSBtZXRob2RzIHRvIGNsZWFyIHVuZGVzaXJlZCByZWZl
cmVuY2VzIHRvIEhpc3RvcnlJdGVtcyB0aGF0IGhhdmUgYmVlbiByZW1vdmVkIGZyb20gdGhlIGJh
Y2svZm9yYXJkIGxpc3QuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3MvRWxlbWVudFJ1
bGVDb2xsZWN0b3IuY3BwIGIvU291cmNlL1dlYkNvcmUvY3NzL0VsZW1lbnRSdWxlQ29sbGVjdG9y
LmNwcAppbmRleCBjY2I4ZGJmZTVhMmJkNTY4NWFhNTFjODM4NWU3ZjhlMjY2ZTUwZDgwLi4yMWYx
MjQwODA1NTI3OGUwMWZiYWM5OWI0NjY5MmVjOTdhMWY5YTM0IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9jc3MvRWxlbWVudFJ1bGVDb2xsZWN0b3IuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L2Nzcy9FbGVtZW50UnVsZUNvbGxlY3Rvci5jcHAKQEAgLTMwNyw5ICszMDcsOCBAQCBpbmxpbmUg
Ym9vbCBFbGVtZW50UnVsZUNvbGxlY3Rvcjo6cnVsZU1hdGNoZXMoY29uc3QgUnVsZURhdGEmIHJ1
bGVEYXRhKQogICAgICAgICBBU1NFUlQocnVsZURhdGEuY29tcGlsYXRpb25TdGF0dXMoKSA9PSBT
ZWxlY3RvckNvbXBpbGF0aW9uU3RhdHVzOjpTZWxlY3RvckNoZWNrZXJXaXRoQ2hlY2tpbmdDb250
ZXh0KTsKIAogICAgICAgICBTZWxlY3RvckNvbXBpbGVyOjpTZWxlY3RvckNoZWNrZXJXaXRoQ2hl
Y2tpbmdDb250ZXh0IHNlbGVjdG9yQ2hlY2tlciA9IFNlbGVjdG9yQ29tcGlsZXI6OnNlbGVjdG9y
Q2hlY2tlckZ1bmN0aW9uV2l0aENoZWNraW5nQ29udGV4dChjb21waWxlZFNlbGVjdG9yQ2hlY2tl
ciwgcnVsZURhdGEuY29tcGlsYXRpb25TdGF0dXMoKSk7Ci0gICAgICAgIFNlbGVjdG9yQ29tcGls
ZXI6OkNoZWNraW5nQ29udGV4dCBjb250ZXh0OworICAgICAgICBTZWxlY3RvckNvbXBpbGVyOjpD
aGVja2luZ0NvbnRleHQgY29udGV4dChtX21vZGUpOwogICAgICAgICBjb250ZXh0LmVsZW1lbnRT
dHlsZSA9IG1fc3R5bGU7Ci0gICAgICAgIGNvbnRleHQucmVzb2x2aW5nTW9kZSA9IG1fbW9kZTsK
ICAgICAgICAgY29udGV4dC5wc2V1ZG9JZCA9IG1fcHNldWRvU3R5bGVSZXF1ZXN0LnBzZXVkb0lk
OwogICAgICAgICBjb250ZXh0LnNjcm9sbGJhciA9IG1fcHNldWRvU3R5bGVSZXF1ZXN0LnNjcm9s
bGJhcjsKICAgICAgICAgY29udGV4dC5zY3JvbGxiYXJQYXJ0ID0gbV9wc2V1ZG9TdHlsZVJlcXVl
c3Quc2Nyb2xsYmFyUGFydDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9TZWxlY3Rv
ckNoZWNrZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvY3NzL1NlbGVjdG9yQ2hlY2tlci5jcHAKaW5k
ZXggZDY1ODViZDlmODlkZDRhNzY1ZTE1NTI4ODdjMmQxNDdhOGUxMTQ3OC4uNzk0M2NkZjVjOTFk
MTAzYmNhYmRkNzYwYTdhMTk2YjQxNzk1YzUxMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
Y3NzL1NlbGVjdG9yQ2hlY2tlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvY3NzL1NlbGVjdG9y
Q2hlY2tlci5jcHAKQEAgLTc3NywxMiArNzc3LDcgQEAgYm9vbCBTZWxlY3RvckNoZWNrZXI6OmNo
ZWNrT25lKGNvbnN0IFNlbGVjdG9yQ2hlY2tpbmdDb250ZXh0JiBjb250ZXh0KSBjb25zdAogI2Vu
ZGlmCiAKICAgICAgICAgY2FzZSBDU1NTZWxlY3Rvcjo6UHNldWRvQ2xhc3NTY29wZToKLSAgICAg
ICAgICAgIHsKLSAgICAgICAgICAgICAgICBjb25zdCBOb2RlKiBjb250ZXh0dWFsUmVmZXJlbmNl
Tm9kZSA9ICFjb250ZXh0LnNjb3BlID8gZWxlbWVudC0+ZG9jdW1lbnQoKS5kb2N1bWVudEVsZW1l
bnQoKSA6IGNvbnRleHQuc2NvcGU7Ci0gICAgICAgICAgICAgICAgaWYgKGVsZW1lbnQgPT0gY29u
dGV4dHVhbFJlZmVyZW5jZU5vZGUpCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwot
ICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJu
IG1hdGNoZXNTY29wZVBzZXVkb0NsYXNzKGVsZW1lbnQsIGNvbnRleHQpOwogCiAgICAgICAgIGNh
c2UgQ1NTU2VsZWN0b3I6OlBzZXVkb0NsYXNzV2luZG93SW5hY3RpdmU6CiAgICAgICAgICAgICBy
ZXR1cm4gaXNXaW5kb3dJbmFjdGl2ZShlbGVtZW50KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL2Nzcy9TZWxlY3RvckNoZWNrZXJUZXN0RnVuY3Rpb25zLmggYi9Tb3VyY2UvV2ViQ29yZS9j
c3MvU2VsZWN0b3JDaGVja2VyVGVzdEZ1bmN0aW9ucy5oCmluZGV4IDk3MzdhNjI4MjdhNDk3YjY5
MjVhM2NlMjQ0YzAyNjZkNjhjYjY0ODQuLjk4NmIwMTdlZDEwMjM1MGM1ZGY2YTUwZmZlYmQ5ZGNj
ZTdkYjQ5MWIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9TZWxlY3RvckNoZWNrZXJU
ZXN0RnVuY3Rpb25zLmgKKysrIGIvU291cmNlL1dlYkNvcmUvY3NzL1NlbGVjdG9yQ2hlY2tlclRl
c3RGdW5jdGlvbnMuaApAQCAtMTU5LDYgKzE1OSwxMyBAQCBBTFdBWVNfSU5MSU5FIGJvb2wgbWF0
Y2hlc1JlYWRXcml0ZVBzZXVkb0NsYXNzKGNvbnN0IEVsZW1lbnQqIGVsZW1lbnQpCiAgICAgcmV0
dXJuIGVsZW1lbnQtPm1hdGNoZXNSZWFkV3JpdGVQc2V1ZG9DbGFzcygpOwogfQogCit0ZW1wbGF0
ZSA8dHlwZW5hbWUgQ29udGV4dFR5cGU+CitBTFdBWVNfSU5MSU5FIGJvb2wgbWF0Y2hlc1Njb3Bl
UHNldWRvQ2xhc3MoY29uc3QgRWxlbWVudCogZWxlbWVudCwgY29uc3QgQ29udGV4dFR5cGUmIGNv
bnRleHQpCit7CisgICAgY29uc3QgTm9kZSogY29udGV4dHVhbFJlZmVyZW5jZU5vZGUgPSAhY29u
dGV4dC5zY29wZSA/IGVsZW1lbnQtPmRvY3VtZW50KCkuZG9jdW1lbnRFbGVtZW50KCkgOiBjb250
ZXh0LnNjb3BlOworICAgIHJldHVybiBlbGVtZW50ID09IGNvbnRleHR1YWxSZWZlcmVuY2VOb2Rl
OworfQorCiBBTFdBWVNfSU5MSU5FIGJvb2wgc2hvdWxkQXBwZWFySW5kZXRlcm1pbmF0ZShjb25z
dCBFbGVtZW50KiBlbGVtZW50KQogewogICAgIHJldHVybiBlbGVtZW50LT5zaG91bGRBcHBlYXJJ
bmRldGVybWluYXRlKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3NqaXQvU2VsZWN0
b3JDb21waWxlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9jc3NqaXQvU2VsZWN0b3JDb21waWxlci5j
cHAKaW5kZXggNDZmYzBlZmU4OGIyNDFhYTU0YjdhZDBmMWI2NDBmN2ViYjI1NjU5Yi4uNTY0NDM5
YzgzNzlhMWZlNjBhNjQyMjI2NDgzZWE4YjBlMjUzZWY2MSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvY3Nzaml0L1NlbGVjdG9yQ29tcGlsZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nz
c2ppdC9TZWxlY3RvckNvbXBpbGVyLmNwcApAQCAtMjU5LDYgKzI1OSw3IEBAIGNsYXNzIFNlbGVj
dG9yQ29kZUdlbmVyYXRvciB7CiAgICAgdm9pZCBnZW5lcmF0ZUVsZW1lbnRNYXRjaGVzQW55UHNl
dWRvQ2xhc3MoQXNzZW1ibGVyOjpKdW1wTGlzdCYgZmFpbHVyZUNhc2VzLCBjb25zdCBTZWxlY3Rv
ckZyYWdtZW50Jik7CiAgICAgdm9pZCBnZW5lcmF0ZUVsZW1lbnRIYXNQc2V1ZG9FbGVtZW50KEFz
c2VtYmxlcjo6SnVtcExpc3QmIGZhaWx1cmVDYXNlcywgY29uc3QgU2VsZWN0b3JGcmFnbWVudCYp
OwogICAgIHZvaWQgZ2VuZXJhdGVFbGVtZW50SXNSb290KEFzc2VtYmxlcjo6SnVtcExpc3QmIGZh
aWx1cmVDYXNlcyk7CisgICAgdm9pZCBnZW5lcmF0ZUVsZW1lbnRJc1Njb3BlUm9vdChBc3NlbWJs
ZXI6Okp1bXBMaXN0JiBmYWlsdXJlQ2FzZXMpOwogICAgIHZvaWQgZ2VuZXJhdGVFbGVtZW50SXNU
YXJnZXQoQXNzZW1ibGVyOjpKdW1wTGlzdCYgZmFpbHVyZUNhc2VzKTsKIAogICAgIC8vIEhlbHBl
cnMuCkBAIC01MDUsNyArNTA2LDYgQEAgc3RhdGljIGlubGluZSBGdW5jdGlvblR5cGUgYWRkUHNl
dWRvQ2xhc3NUeXBlKGNvbnN0IENTU1NlbGVjdG9yJiBzZWxlY3RvciwgU2VsZWMKICAgICBjYXNl
IENTU1NlbGVjdG9yOjpQc2V1ZG9DbGFzc1Zpc2l0ZWQ6CiAgICAgY2FzZSBDU1NTZWxlY3Rvcjo6
UHNldWRvQ2xhc3NEcmFnOgogICAgIGNhc2UgQ1NTU2VsZWN0b3I6OlBzZXVkb0NsYXNzRnVsbFBh
Z2VNZWRpYToKLSAgICBjYXNlIENTU1NlbGVjdG9yOjpQc2V1ZG9DbGFzc1Njb3BlOgogICAgICAg
ICByZXR1cm4gRnVuY3Rpb25UeXBlOjpDYW5ub3RDb21waWxlOwogCiAgICAgLy8gT3B0aW1pemVk
IHBzZXVkbyBzZWxlY3RvcnMuCkBAIC01MTksNiArNTE5LDE0IEBAIHN0YXRpYyBpbmxpbmUgRnVu
Y3Rpb25UeXBlIGFkZFBzZXVkb0NsYXNzVHlwZShjb25zdCBDU1NTZWxlY3RvciYgc2VsZWN0b3Is
IFNlbGVjCiAgICAgICAgIGZyYWdtZW50LnBzZXVkb0NsYXNzZXMuYWRkKHR5cGUpOwogICAgICAg
ICByZXR1cm4gRnVuY3Rpb25UeXBlOjpTaW1wbGVTZWxlY3RvckNoZWNrZXI7CiAKKyAgICBjYXNl
IENTU1NlbGVjdG9yOjpQc2V1ZG9DbGFzc1Njb3BlOgorICAgICAgICBpZiAoc2VsZWN0b3JDb250
ZXh0ICE9IFNlbGVjdG9yQ29udGV4dDo6UXVlcnlTZWxlY3RvcikgeworICAgICAgICAgICAgZnJh
Z21lbnQucHNldWRvQ2xhc3Nlcy5hZGQoQ1NTU2VsZWN0b3I6OlBzZXVkb0NsYXNzUm9vdCk7Cisg
ICAgICAgICAgICByZXR1cm4gRnVuY3Rpb25UeXBlOjpTaW1wbGVTZWxlY3RvckNoZWNrZXI7Cisg
ICAgICAgIH0KKyAgICAgICAgZnJhZ21lbnQucHNldWRvQ2xhc3Nlcy5hZGQoQ1NTU2VsZWN0b3I6
OlBzZXVkb0NsYXNzU2NvcGUpOworICAgICAgICByZXR1cm4gRnVuY3Rpb25UeXBlOjpTZWxlY3Rv
ckNoZWNrZXJXaXRoQ2hlY2tpbmdDb250ZXh0OworCiAgICAgY2FzZSBDU1NTZWxlY3Rvcjo6UHNl
dWRvQ2xhc3NBY3RpdmU6CiAgICAgY2FzZSBDU1NTZWxlY3Rvcjo6UHNldWRvQ2xhc3NGaXJzdENo
aWxkOgogICAgIGNhc2UgQ1NTU2VsZWN0b3I6OlBzZXVkb0NsYXNzSG92ZXI6CkBAIC02MTIsNiAr
NjIwLDcgQEAgc3RhdGljIGlubGluZSBGdW5jdGlvblR5cGUgYWRkUHNldWRvQ2xhc3NUeXBlKGNv
bnN0IENTU1NlbGVjdG9yJiBzZWxlY3RvciwgU2VsZWMKIAogICAgICAgICAgICAgcmV0dXJuIGZ1
bmN0aW9uVHlwZTsKICAgICAgICAgfQorCiAgICAgY2FzZSBDU1NTZWxlY3Rvcjo6UHNldWRvQ2xh
c3NMYW5nOgogICAgICAgICB7CiAgICAgICAgICAgICBjb25zdCBBdG9taWNTdHJpbmcmIGFyZ3Vt
ZW50ID0gc2VsZWN0b3IuYXJndW1lbnQoKTsKQEAgLTYzMSw3ICs2NDAsNyBAQCBzdGF0aWMgaW5s
aW5lIEZ1bmN0aW9uVHlwZSBhZGRQc2V1ZG9DbGFzc1R5cGUoY29uc3QgQ1NTU2VsZWN0b3ImIHNl
bGVjdG9yLCBTZWxlYwogICAgICAgICAgICAgfQogICAgICAgICAgICAgcmV0dXJuIEZ1bmN0aW9u
VHlwZTo6U2ltcGxlU2VsZWN0b3JDaGVja2VyOwogICAgICAgICB9Ci0gICAgICAgICAgICAKKwog
ICAgIGNhc2UgQ1NTU2VsZWN0b3I6OlBzZXVkb0NsYXNzVW5rbm93bjoKICAgICAgICAgQVNTRVJU
X05PVF9SRUFDSEVEKCk7CiAgICAgICAgIHJldHVybiBGdW5jdGlvblR5cGU6OkNhbm5vdE1hdGNo
QW55dGhpbmc7CkBAIC0xNjI2LDggKzE2MzUsNiBAQCB2b2lkIFNlbGVjdG9yQ29kZUdlbmVyYXRv
cjo6YWRkRmxhZ3NUb0VsZW1lbnRTdHlsZUZyb21Db250ZXh0KEFzc2VtYmxlcjo6UmVnaXN0ZQog
CiB2b2lkIFNlbGVjdG9yQ29kZUdlbmVyYXRvcjo6bG9hZENoZWNraW5nQ29udGV4dChBc3NlbWJs
ZXI6OlJlZ2lzdGVySUQgY2hlY2tpbmdDb250ZXh0KQogewotICAgIFJFTEVBU0VfQVNTRVJUKG1f
c2VsZWN0b3JDb250ZXh0ID09IFNlbGVjdG9yQ29udGV4dDo6UnVsZUNvbGxlY3Rvcik7Ci0KICAg
ICAvLyBHZXQgdGhlIGNoZWNraW5nIGNvbnRleHQuCiAgICAgdW5zaWduZWQgb2Zmc2V0VG9DaGVj
a2luZ0NvbnRleHQgPSBtX3N0YWNrQWxsb2NhdG9yLm9mZnNldFRvU3RhY2tSZWZlcmVuY2UobV9j
aGVja2luZ0NvbnRleHRTdGFja1JlZmVyZW5jZSk7CiAgICAgbV9hc3NlbWJsZXIubG9hZFB0cihB
c3NlbWJsZXI6OkFkZHJlc3MoQXNzZW1ibGVyOjpzdGFja1BvaW50ZXJSZWdpc3Rlciwgb2Zmc2V0
VG9DaGVja2luZ0NvbnRleHQpLCBjaGVja2luZ0NvbnRleHQpOwpAQCAtMTkzNiw2ICsxOTQzLDkg
QEAgdm9pZCBTZWxlY3RvckNvZGVHZW5lcmF0b3I6OmdlbmVyYXRlRWxlbWVudE1hdGNoaW5nKEFz
c2VtYmxlcjo6SnVtcExpc3QmIG1hdGNoaW4KICAgICBpZiAoZnJhZ21lbnQucHNldWRvQ2xhc3Nl
cy5jb250YWlucyhDU1NTZWxlY3Rvcjo6UHNldWRvQ2xhc3NSb290KSkKICAgICAgICAgZ2VuZXJh
dGVFbGVtZW50SXNSb290KG1hdGNoaW5nUG9zdFRhZ05hbWVGYWlsdXJlQ2FzZXMpOwogCisgICAg
aWYgKGZyYWdtZW50LnBzZXVkb0NsYXNzZXMuY29udGFpbnMoQ1NTU2VsZWN0b3I6OlBzZXVkb0Ns
YXNzU2NvcGUpKQorICAgICAgICBnZW5lcmF0ZUVsZW1lbnRJc1Njb3BlUm9vdChtYXRjaGluZ1Bv
c3RUYWdOYW1lRmFpbHVyZUNhc2VzKTsKKwogICAgIGlmIChmcmFnbWVudC5wc2V1ZG9DbGFzc2Vz
LmNvbnRhaW5zKENTU1NlbGVjdG9yOjpQc2V1ZG9DbGFzc1RhcmdldCkpCiAgICAgICAgIGdlbmVy
YXRlRWxlbWVudElzVGFyZ2V0KG1hdGNoaW5nUG9zdFRhZ05hbWVGYWlsdXJlQ2FzZXMpOwogCkBA
IC0yOTMyLDYgKzI5NDIsOSBAQCB2b2lkIFNlbGVjdG9yQ29kZUdlbmVyYXRvcjo6Z2VuZXJhdGVF
bGVtZW50SGFzUHNldWRvRWxlbWVudChBc3NlbWJsZXI6Okp1bXBMaXN0JgogCiB2b2lkIFNlbGVj
dG9yQ29kZUdlbmVyYXRvcjo6Z2VuZXJhdGVSZXF1ZXN0ZWRQc2V1ZG9FbGVtZW50RXF1YWxzVG9T
ZWxlY3RvclBzZXVkb0VsZW1lbnQoQXNzZW1ibGVyOjpKdW1wTGlzdCYgZmFpbHVyZUNhc2VzLCBj
b25zdCBTZWxlY3RvckZyYWdtZW50JiBmcmFnbWVudCwgQXNzZW1ibGVyOjpSZWdpc3RlcklEIGNo
ZWNraW5nQ29udGV4dCkKIHsKKyAgICBpZiAobV9zZWxlY3RvckNvbnRleHQgPT0gU2VsZWN0b3JD
b250ZXh0OjpRdWVyeVNlbGVjdG9yKQorICAgICAgICByZXR1cm47CisKICAgICAvLyBNYWtlIHN1
cmUgdGhhdCB0aGUgcmVxdWVzdGVkIHBzZXVkb0lkIGVxdWFscyB0byB0aGUgcHNldWRvIGVsZW1l
bnQgb2YgdGhlIHJpZ2h0bW9zdCBmcmFnbWVudC4KICAgICAvLyBJZiB0aGUgcmlnaHRtb3N0IGZy
YWdtZW50IGRvZXNuJ3QgaGF2ZSBhIHBzZXVkbyBlbGVtZW50LCB0aGUgcmVxdWVzdGVkIHBzZXVk
b0lkIG5lZWQgdG8gYmUgTk9QU0VVRE8gdG8gc3VjY2VlZCB0aGUgbWF0Y2hpbmcuCiAgICAgLy8g
T3RoZXJ3aXNlLCBpZiB0aGUgcmVxdWVzdGVkIHBzZXVkb0lkIGlzIG5vdCBOT1BTRVVETywgdGhl
IHJlcXVlc3RlZCBwc2V1ZG9JZCBuZWVkIHRvIGVxdWFsIHRvIHRoZSBwc2V1ZG8gZWxlbWVudCBv
ZiB0aGUgcmlnaHRtb3N0IGZyYWdtZW50LgpAQCAtMjk1Myw2ICsyOTY2LDE5IEBAIHZvaWQgU2Vs
ZWN0b3JDb2RlR2VuZXJhdG9yOjpnZW5lcmF0ZUVsZW1lbnRJc1Jvb3QoQXNzZW1ibGVyOjpKdW1w
TGlzdCYgZmFpbHVyZUNhCiAgICAgZmFpbHVyZUNhc2VzLmFwcGVuZChtX2Fzc2VtYmxlci5icmFu
Y2hQdHIoQXNzZW1ibGVyOjpOb3RFcXVhbCwgQXNzZW1ibGVyOjpBZGRyZXNzKGRvY3VtZW50LCBE
b2N1bWVudDo6ZG9jdW1lbnRFbGVtZW50TWVtb3J5T2Zmc2V0KCkpLCBlbGVtZW50QWRkcmVzc1Jl
Z2lzdGVyKSk7CiB9CiAKK3ZvaWQgU2VsZWN0b3JDb2RlR2VuZXJhdG9yOjpnZW5lcmF0ZUVsZW1l
bnRJc1Njb3BlUm9vdChBc3NlbWJsZXI6Okp1bXBMaXN0JiBmYWlsdXJlQ2FzZXMpCit7CisgICAg
UkVMRUFTRV9BU1NFUlQobV9zZWxlY3RvckNvbnRleHQgPT0gU2VsZWN0b3JDb250ZXh0OjpRdWVy
eVNlbGVjdG9yKTsKKyAgICBMb2NhbFJlZ2lzdGVyV2l0aFByZWZlcmVuY2UgY2hlY2tpbmdDb250
ZXh0KG1fcmVnaXN0ZXJBbGxvY2F0b3IsIEpTQzo6R1BSSW5mbzo6YXJndW1lbnRHUFIxKTsKKyAg
ICBsb2FkQ2hlY2tpbmdDb250ZXh0KGNoZWNraW5nQ29udGV4dCk7CisKKyAgICBBc3NlbWJsZXI6
OlJlZ2lzdGVySUQgZWxlbWVudEFkZHJlc3MgPSBlbGVtZW50QWRkcmVzc1JlZ2lzdGVyOworICAg
IEZ1bmN0aW9uQ2FsbCBmdW5jdGlvbkNhbGwobV9hc3NlbWJsZXIsIG1fcmVnaXN0ZXJBbGxvY2F0
b3IsIG1fc3RhY2tBbGxvY2F0b3IsIG1fZnVuY3Rpb25DYWxscyk7CisgICAgZnVuY3Rpb25DYWxs
LnNldEZ1bmN0aW9uQWRkcmVzcyhtYXRjaGVzU2NvcGVQc2V1ZG9DbGFzczxDaGVja2luZ0NvbnRl
eHQ+KTsKKyAgICBmdW5jdGlvbkNhbGwuc2V0VHdvQXJndW1lbnRzKGVsZW1lbnRBZGRyZXNzLCBj
aGVja2luZ0NvbnRleHQpOworICAgIGZhaWx1cmVDYXNlcy5hcHBlbmQoZnVuY3Rpb25DYWxsLmNh
bGxBbmRCcmFuY2hPbkJvb2xlYW5SZXR1cm5WYWx1ZShBc3NlbWJsZXI6Olplcm8pKTsKK30KKwog
dm9pZCBTZWxlY3RvckNvZGVHZW5lcmF0b3I6OmdlbmVyYXRlRWxlbWVudElzVGFyZ2V0KEFzc2Vt
Ymxlcjo6SnVtcExpc3QmIGZhaWx1cmVDYXNlcykKIHsKICAgICBMb2NhbFJlZ2lzdGVyIGRvY3Vt
ZW50KG1fcmVnaXN0ZXJBbGxvY2F0b3IpOwpAQCAtMjk2MiwxMyArMjk4OCwxNiBAQCB2b2lkIFNl
bGVjdG9yQ29kZUdlbmVyYXRvcjo6Z2VuZXJhdGVFbGVtZW50SXNUYXJnZXQoQXNzZW1ibGVyOjpK
dW1wTGlzdCYgZmFpbHVyZQogCiB2b2lkIFNlbGVjdG9yQ29kZUdlbmVyYXRvcjo6Z2VuZXJhdGVN
YXJrUHNldWRvU3R5bGVGb3JQc2V1ZG9FbGVtZW50KEFzc2VtYmxlcjo6SnVtcExpc3QmIGZhaWx1
cmVDYXNlcywgY29uc3QgU2VsZWN0b3JGcmFnbWVudCYgZnJhZ21lbnQpCiB7Ci0gICAgTG9jYWxS
ZWdpc3RlciBjaGVja2luZ0NvbnRleHQobV9yZWdpc3RlckFsbG9jYXRvcik7Ci0gICAgbG9hZENo
ZWNraW5nQ29udGV4dChjaGVja2luZ0NvbnRleHQpOworICAgIGlmIChtX3NlbGVjdG9yQ29udGV4
dCA9PSBTZWxlY3RvckNvbnRleHQ6OlF1ZXJ5U2VsZWN0b3IpCisgICAgICAgIHJldHVybjsKIAog
ICAgIC8vIFdoZW4gZnJhZ21lbnQgZG9lc24ndCBoYXZlIGEgcHNldWRvIGVsZW1lbnQsIHRoZXJl
J3Mgbm8gbmVlZCB0byBtYXJrIHRoZSBwc2V1ZG8gZWxlbWVudCBzdHlsZS4KICAgICBpZiAoIWZy
YWdtZW50LnBzZXVkb0VsZW1lbnRTZWxlY3RvcikKICAgICAgICAgcmV0dXJuOwogCisgICAgTG9j
YWxSZWdpc3RlciBjaGVja2luZ0NvbnRleHQobV9yZWdpc3RlckFsbG9jYXRvcik7CisgICAgbG9h
ZENoZWNraW5nQ29udGV4dChjaGVja2luZ0NvbnRleHQpOworCiAgICAgQXNzZW1ibGVyOjpKdW1w
TGlzdCBzdWNjZXNzQ2FzZXM7CiAKICAgICAvLyBXaGVuIHRoZSByZXF1ZXN0ZWQgcHNldWRvSWQg
aXNuJ3QgTk9QU0VVRE8sIHRoZXJlJ3Mgbm8gbmVlZCB0byBtYXJrIHRoZSBwc2V1ZG8gZWxlbWVu
dCBzdHlsZS4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzc2ppdC9TZWxlY3RvckNvbXBp
bGVyLmggYi9Tb3VyY2UvV2ViQ29yZS9jc3NqaXQvU2VsZWN0b3JDb21waWxlci5oCmluZGV4IGU5
NDQ1YmExYTllNjNmMmIyYTZhMTc4ZjNhZjdlNTExZmE4ODEzMmMuLmMwY2E1MzJkNTAzMzMxMWZm
ZjY3ZDE2MTA0MWNmNDU0ZTE0YmYyMTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nzc2pp
dC9TZWxlY3RvckNvbXBpbGVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvY3Nzaml0L1NlbGVjdG9y
Q29tcGlsZXIuaApAQCAtNzAsMTEgKzcwLDIxIEBAIGNsYXNzIFNlbGVjdG9yQ29tcGlsYXRpb25T
dGF0dXMgewogbmFtZXNwYWNlIFNlbGVjdG9yQ29tcGlsZXIgewogCiBzdHJ1Y3QgQ2hlY2tpbmdD
b250ZXh0IHsKKyAgICBDaGVja2luZ0NvbnRleHQoU2VsZWN0b3JDaGVja2VyOjpNb2RlIHJlc29s
dmluZ01vZGUpCisgICAgICAgIDogcmVzb2x2aW5nTW9kZShyZXNvbHZpbmdNb2RlKQorICAgICAg
ICAsIGVsZW1lbnRTdHlsZShudWxscHRyKQorICAgICAgICAsIHBzZXVkb0lkKE5PUFNFVURPKQor
ICAgICAgICAsIHNjcm9sbGJhcihudWxscHRyKQorICAgICAgICAsIHNjcm9sbGJhclBhcnQoTm9Q
YXJ0KQorICAgICAgICAsIHNjb3BlKG51bGxwdHIpCisgICAgeyB9CisKICAgICBTZWxlY3RvckNo
ZWNrZXI6Ok1vZGUgcmVzb2x2aW5nTW9kZTsKICAgICBSZW5kZXJTdHlsZSogZWxlbWVudFN0eWxl
OwogICAgIFBzZXVkb0lkIHBzZXVkb0lkOwogICAgIFJlbmRlclNjcm9sbGJhciogc2Nyb2xsYmFy
OwogICAgIFNjcm9sbGJhclBhcnQgc2Nyb2xsYmFyUGFydDsKKyAgICBjb25zdCBDb250YWluZXJO
b2RlKiBzY29wZTsKIH07CiAKIGVudW0gY2xhc3MgU2VsZWN0b3JDb250ZXh0IHsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9TZWxlY3RvclF1ZXJ5LmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L2RvbS9TZWxlY3RvclF1ZXJ5LmNwcAppbmRleCA3MjZjNDZlYTlmM2JiNDNiNWViOTRlODQ5OWEy
NzQzYmVmZDdlZTc5Li4xMGVmMDJmNDg0MjA4ODFiNmY3OThlZTY3ZmYzZWYzM2QwY2NhYjViIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vU2VsZWN0b3JRdWVyeS5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvZG9tL1NlbGVjdG9yUXVlcnkuY3BwCkBAIC0zNjEsOSArMzYxLDkgQEAgQUxX
QVlTX0lOTElORSB2b2lkIFNlbGVjdG9yRGF0YUxpc3Q6OmV4ZWN1dGVTaW5nbGVNdWx0aVNlbGVj
dG9yRGF0YShjb25zdCBDb250YWkKIAogI2lmIEVOQUJMRShDU1NfU0VMRUNUT1JfSklUKQogdGVt
cGxhdGUgPHR5cGVuYW1lIFNlbGVjdG9yUXVlcnlUcmFpdD4KLUFMV0FZU19JTkxJTkUgdm9pZCBT
ZWxlY3RvckRhdGFMaXN0OjpleGVjdXRlQ29tcGlsZWRTaW1wbGVTZWxlY3RvckNoZWNrZXIoY29u
c3QgQ29udGFpbmVyTm9kZSYgcm9vdE5vZGUsIFNlbGVjdG9yQ29tcGlsZXI6OlNpbXBsZVNlbGVj
dG9yQ2hlY2tlciBzZWxlY3RvckNoZWNrZXIsIHR5cGVuYW1lIFNlbGVjdG9yUXVlcnlUcmFpdDo6
T3V0cHV0VHlwZSYgb3V0cHV0LCBjb25zdCBTZWxlY3RvckRhdGEmIHNlbGVjdG9yRGF0YSkgY29u
c3QKK0FMV0FZU19JTkxJTkUgdm9pZCBTZWxlY3RvckRhdGFMaXN0OjpleGVjdXRlQ29tcGlsZWRT
aW1wbGVTZWxlY3RvckNoZWNrZXIoY29uc3QgQ29udGFpbmVyTm9kZSYgc2VhcmNoUm9vdE5vZGUs
IFNlbGVjdG9yQ29tcGlsZXI6OlNpbXBsZVNlbGVjdG9yQ2hlY2tlciBzZWxlY3RvckNoZWNrZXIs
IHR5cGVuYW1lIFNlbGVjdG9yUXVlcnlUcmFpdDo6T3V0cHV0VHlwZSYgb3V0cHV0LCBjb25zdCBT
ZWxlY3RvckRhdGEmIHNlbGVjdG9yRGF0YSkgY29uc3QKIHsKLSAgICBmb3IgKGF1dG8mIGVsZW1l
bnQgOiBlbGVtZW50RGVzY2VuZGFudHMoY29uc3RfY2FzdDxDb250YWluZXJOb2RlJj4ocm9vdE5v
ZGUpKSkgeworICAgIGZvciAoYXV0byYgZWxlbWVudCA6IGVsZW1lbnREZXNjZW5kYW50cyhjb25z
dF9jYXN0PENvbnRhaW5lck5vZGUmPihzZWFyY2hSb290Tm9kZSkpKSB7CiAjaWYgQ1NTX1NFTEVD
VE9SX0pJVF9QUk9GSUxJTkcKICAgICAgICAgc2VsZWN0b3JEYXRhLmNvbXBpbGVkU2VsZWN0b3JV
c2VkKCk7CiAjZWxzZQpAQCAtMzc2LDYgKzM3NiwyNiBAQCBBTFdBWVNfSU5MSU5FIHZvaWQgU2Vs
ZWN0b3JEYXRhTGlzdDo6ZXhlY3V0ZUNvbXBpbGVkU2ltcGxlU2VsZWN0b3JDaGVja2VyKGNvbnN0
CiAgICAgICAgIH0KICAgICB9CiB9CisKK3RlbXBsYXRlIDx0eXBlbmFtZSBTZWxlY3RvclF1ZXJ5
VHJhaXQ+CitBTFdBWVNfSU5MSU5FIHZvaWQgU2VsZWN0b3JEYXRhTGlzdDo6ZXhlY3V0ZUNvbXBp
bGVkU2VsZWN0b3JDaGVja2VyV2l0aENoZWNraW5nQ29udGV4dChjb25zdCBDb250YWluZXJOb2Rl
JiByb290Tm9kZSwgY29uc3QgQ29udGFpbmVyTm9kZSYgc2VhcmNoUm9vdE5vZGUsIFNlbGVjdG9y
Q29tcGlsZXI6OlNlbGVjdG9yQ2hlY2tlcldpdGhDaGVja2luZ0NvbnRleHQgc2VsZWN0b3JDaGVj
a2VyLCB0eXBlbmFtZSBTZWxlY3RvclF1ZXJ5VHJhaXQ6Ok91dHB1dFR5cGUmIG91dHB1dCwgY29u
c3QgU2VsZWN0b3JEYXRhJiBzZWxlY3RvckRhdGEpIGNvbnN0Cit7CisgICAgU2VsZWN0b3JDb21w
aWxlcjo6Q2hlY2tpbmdDb250ZXh0IGNoZWNraW5nQ29udGV4dChTZWxlY3RvckNoZWNrZXI6Ok1v
ZGU6OlF1ZXJ5aW5nUnVsZXMpOworICAgIGNoZWNraW5nQ29udGV4dC5zY29wZSA9IHJvb3ROb2Rl
LmlzRG9jdW1lbnROb2RlKCkgPyBudWxscHRyIDogJnJvb3ROb2RlOworCisgICAgZm9yIChhdXRv
JiBlbGVtZW50IDogZWxlbWVudERlc2NlbmRhbnRzKGNvbnN0X2Nhc3Q8Q29udGFpbmVyTm9kZSY+
KHNlYXJjaFJvb3ROb2RlKSkpIHsKKyNpZiBDU1NfU0VMRUNUT1JfSklUX1BST0ZJTElORworICAg
ICAgICBzZWxlY3RvckRhdGEuY29tcGlsZWRTZWxlY3RvclVzZWQoKTsKKyNlbHNlCisgICAgICAg
IFVOVVNFRF9QQVJBTShzZWxlY3RvckRhdGEpOworI2VuZGlmCisgICAgICAgIGlmIChzZWxlY3Rv
ckNoZWNrZXIoJmVsZW1lbnQsICZjaGVja2luZ0NvbnRleHQpKSB7CisgICAgICAgICAgICBTZWxl
Y3RvclF1ZXJ5VHJhaXQ6OmFwcGVuZE91dHB1dEZvckVsZW1lbnQob3V0cHV0LCAmZWxlbWVudCk7
CisgICAgICAgICAgICBpZiAoU2VsZWN0b3JRdWVyeVRyYWl0OjpzaG91bGRPbmx5TWF0Y2hGaXJz
dEVsZW1lbnQpCisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgfQorfQog
I2VuZGlmIC8vIEVOQUJMRShDU1NfU0VMRUNUT1JfSklUKQogCiB0ZW1wbGF0ZSA8dHlwZW5hbWUg
U2VsZWN0b3JRdWVyeVRyYWl0PgpAQCAtMzkxLDcgKzQxMSw3IEBAIEFMV0FZU19JTkxJTkUgdm9p
ZCBTZWxlY3RvckRhdGFMaXN0OjpleGVjdXRlKENvbnRhaW5lck5vZGUmIHJvb3ROb2RlLCB0eXBl
bmFtZSBTCiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogI2lmIEVOQUJMRShDU1NfU0VM
RUNUT1JfSklUKQotICAgICAgICBpZiAoc2VsZWN0b3JEYXRhLmNvbXBpbGF0aW9uU3RhdHVzID09
IFNlbGVjdG9yQ29tcGlsYXRpb25TdGF0dXM6OlNpbXBsZVNlbGVjdG9yQ2hlY2tlcikKKyAgICAg
ICAgaWYgKHNlbGVjdG9yRGF0YS5jb21waWxhdGlvblN0YXR1cyA9PSBTZWxlY3RvckNvbXBpbGF0
aW9uU3RhdHVzOjpTaW1wbGVTZWxlY3RvckNoZWNrZXIgfHwgc2VsZWN0b3JEYXRhLmNvbXBpbGF0
aW9uU3RhdHVzID09IFNlbGVjdG9yQ29tcGlsYXRpb25TdGF0dXM6OlNlbGVjdG9yQ2hlY2tlcldp
dGhDaGVja2luZ0NvbnRleHQpCiAgICAgICAgICAgICBnb3RvIENvbXBpbGVkU2luZ2xlQ2FzZTsK
ICNlbmRpZgogICAgICAgICB9CkBAIC00MDUsOSArNDI1LDggQEAgQUxXQVlTX0lOTElORSB2b2lk
IFNlbGVjdG9yRGF0YUxpc3Q6OmV4ZWN1dGUoQ29udGFpbmVyTm9kZSYgcm9vdE5vZGUsIHR5cGVu
YW1lIFMKIAogICAgICAgICBKU0M6OlZNJiB2bSA9IHNlYXJjaFJvb3ROb2RlLT5kb2N1bWVudCgp
LnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKS0+dm0oKTsKICAgICAgICAgc2VsZWN0b3JEYXRhLmNv
bXBpbGF0aW9uU3RhdHVzID0gU2VsZWN0b3JDb21waWxlcjo6Y29tcGlsZVNlbGVjdG9yKHNlbGVj
dG9yRGF0YS5zZWxlY3RvciwgJnZtLCBTZWxlY3RvckNvbXBpbGVyOjpTZWxlY3RvckNvbnRleHQ6
OlF1ZXJ5U2VsZWN0b3IsIHNlbGVjdG9yRGF0YS5jb21waWxlZFNlbGVjdG9yQ29kZVJlZik7Ci0g
ICAgICAgIFJFTEVBU0VfQVNTRVJUKHNlbGVjdG9yRGF0YS5jb21waWxhdGlvblN0YXR1cyAhPSBT
ZWxlY3RvckNvbXBpbGF0aW9uU3RhdHVzOjpTZWxlY3RvckNoZWNrZXJXaXRoQ2hlY2tpbmdDb250
ZXh0KTsKIAotICAgICAgICBpZiAoc2VsZWN0b3JEYXRhLmNvbXBpbGF0aW9uU3RhdHVzID09IFNl
bGVjdG9yQ29tcGlsYXRpb25TdGF0dXM6OlNpbXBsZVNlbGVjdG9yQ2hlY2tlcikgeworICAgICAg
ICBpZiAoc2VsZWN0b3JEYXRhLmNvbXBpbGF0aW9uU3RhdHVzID09IFNlbGVjdG9yQ29tcGlsYXRp
b25TdGF0dXM6OlNpbXBsZVNlbGVjdG9yQ2hlY2tlciB8fCBzZWxlY3RvckRhdGEuY29tcGlsYXRp
b25TdGF0dXMgPT0gU2VsZWN0b3JDb21waWxhdGlvblN0YXR1czo6U2VsZWN0b3JDaGVja2VyV2l0
aENoZWNraW5nQ29udGV4dCkgewogICAgICAgICAgICAgaWYgKG1fbWF0Y2hUeXBlID09IENvbXBp
bGFibGVTaW5nbGUpIHsKICAgICAgICAgICAgICAgICBtX21hdGNoVHlwZSA9IENvbXBpbGVkU2lu
Z2xlOwogICAgICAgICAgICAgICAgIGdvdG8gQ29tcGlsZWRTaW5nbGVDYXNlOwpAQCAtNDM5LDgg
KzQ1OCwxNCBAQCBBTFdBWVNfSU5MSU5FIHZvaWQgU2VsZWN0b3JEYXRhTGlzdDo6ZXhlY3V0ZShD
b250YWluZXJOb2RlJiByb290Tm9kZSwgdHlwZW5hbWUgUwogICAgICAgICBDb21waWxlZFNpbmds
ZUNhc2U6CiAgICAgICAgIGNvbnN0IFNlbGVjdG9yRGF0YSYgc2VsZWN0b3JEYXRhID0gbV9zZWxl
Y3RvcnMuZmlyc3QoKTsKICAgICAgICAgdm9pZCogY29tcGlsZWRTZWxlY3RvckNoZWNrZXIgPSBz
ZWxlY3RvckRhdGEuY29tcGlsZWRTZWxlY3RvckNvZGVSZWYuY29kZSgpLmV4ZWN1dGFibGVBZGRy
ZXNzKCk7Ci0gICAgICAgIFNlbGVjdG9yQ29tcGlsZXI6OlNpbXBsZVNlbGVjdG9yQ2hlY2tlciBz
ZWxlY3RvckNoZWNrZXIgPSBTZWxlY3RvckNvbXBpbGVyOjpzaW1wbGVTZWxlY3RvckNoZWNrZXJG
dW5jdGlvbihjb21waWxlZFNlbGVjdG9yQ2hlY2tlciwgc2VsZWN0b3JEYXRhLmNvbXBpbGF0aW9u
U3RhdHVzKTsKLSAgICAgICAgZXhlY3V0ZUNvbXBpbGVkU2ltcGxlU2VsZWN0b3JDaGVja2VyPFNl
bGVjdG9yUXVlcnlUcmFpdD4oKnNlYXJjaFJvb3ROb2RlLCBzZWxlY3RvckNoZWNrZXIsIG91dHB1
dCwgc2VsZWN0b3JEYXRhKTsKKyAgICAgICAgaWYgKHNlbGVjdG9yRGF0YS5jb21waWxhdGlvblN0
YXR1cyA9PSBTZWxlY3RvckNvbXBpbGF0aW9uU3RhdHVzOjpTaW1wbGVTZWxlY3RvckNoZWNrZXIp
IHsKKyAgICAgICAgICAgIFNlbGVjdG9yQ29tcGlsZXI6OlNpbXBsZVNlbGVjdG9yQ2hlY2tlciBz
ZWxlY3RvckNoZWNrZXIgPSBTZWxlY3RvckNvbXBpbGVyOjpzaW1wbGVTZWxlY3RvckNoZWNrZXJG
dW5jdGlvbihjb21waWxlZFNlbGVjdG9yQ2hlY2tlciwgc2VsZWN0b3JEYXRhLmNvbXBpbGF0aW9u
U3RhdHVzKTsKKyAgICAgICAgICAgIGV4ZWN1dGVDb21waWxlZFNpbXBsZVNlbGVjdG9yQ2hlY2tl
cjxTZWxlY3RvclF1ZXJ5VHJhaXQ+KCpzZWFyY2hSb290Tm9kZSwgc2VsZWN0b3JDaGVja2VyLCBv
dXRwdXQsIHNlbGVjdG9yRGF0YSk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBBU1NF
UlQoc2VsZWN0b3JEYXRhLmNvbXBpbGF0aW9uU3RhdHVzID09IFNlbGVjdG9yQ29tcGlsYXRpb25T
dGF0dXM6OlNlbGVjdG9yQ2hlY2tlcldpdGhDaGVja2luZ0NvbnRleHQpOworICAgICAgICAgICAg
U2VsZWN0b3JDb21waWxlcjo6U2VsZWN0b3JDaGVja2VyV2l0aENoZWNraW5nQ29udGV4dCBzZWxl
Y3RvckNoZWNrZXIgPSBTZWxlY3RvckNvbXBpbGVyOjpzZWxlY3RvckNoZWNrZXJGdW5jdGlvbldp
dGhDaGVja2luZ0NvbnRleHQoY29tcGlsZWRTZWxlY3RvckNoZWNrZXIsIHNlbGVjdG9yRGF0YS5j
b21waWxhdGlvblN0YXR1cyk7CisgICAgICAgICAgICBleGVjdXRlQ29tcGlsZWRTZWxlY3RvckNo
ZWNrZXJXaXRoQ2hlY2tpbmdDb250ZXh0PFNlbGVjdG9yUXVlcnlUcmFpdD4ocm9vdE5vZGUsICpz
ZWFyY2hSb290Tm9kZSwgc2VsZWN0b3JDaGVja2VyLCBvdXRwdXQsIHNlbGVjdG9yRGF0YSk7Cisg
ICAgICAgIH0KICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICNlbHNlCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9kb20vU2VsZWN0b3JRdWVyeS5oIGIvU291cmNlL1dlYkNvcmUvZG9tL1Nl
bGVjdG9yUXVlcnkuaAppbmRleCA0OTU2M2IyOWEzZDYwMDdjMDM5ZTViNDU2MWE1MDMzMWU0MjIz
NDc0Li5kODk2YTc2NWI2ODUxMmVlZTkyNzljZTJkYTZlYzUwN2U3ZGEzOGYzIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9kb20vU2VsZWN0b3JRdWVyeS5oCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L2RvbS9TZWxlY3RvclF1ZXJ5LmgKQEAgLTg5LDcgKzg5LDggQEAgY2xhc3MgU2VsZWN0b3JEYXRh
TGlzdCB7CiAgICAgdGVtcGxhdGUgPHR5cGVuYW1lIFNlbGVjdG9yUXVlcnlUcmFpdD4gdm9pZCBl
eGVjdXRlU2luZ2xlU2VsZWN0b3JEYXRhKGNvbnN0IENvbnRhaW5lck5vZGUmIHJvb3ROb2RlLCBj
b25zdCBTZWxlY3RvckRhdGEmLCB0eXBlbmFtZSBTZWxlY3RvclF1ZXJ5VHJhaXQ6Ok91dHB1dFR5
cGUmKSBjb25zdDsKICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgU2VsZWN0b3JRdWVyeVRyYWl0PiB2
b2lkIGV4ZWN1dGVTaW5nbGVNdWx0aVNlbGVjdG9yRGF0YShjb25zdCBDb250YWluZXJOb2RlJiBy
b290Tm9kZSwgdHlwZW5hbWUgU2VsZWN0b3JRdWVyeVRyYWl0OjpPdXRwdXRUeXBlJikgY29uc3Q7
CiAjaWYgRU5BQkxFKENTU19TRUxFQ1RPUl9KSVQpCi0gICAgdGVtcGxhdGUgPHR5cGVuYW1lIFNl
bGVjdG9yUXVlcnlUcmFpdD4gdm9pZCBleGVjdXRlQ29tcGlsZWRTaW1wbGVTZWxlY3RvckNoZWNr
ZXIoY29uc3QgQ29udGFpbmVyTm9kZSYgcm9vdE5vZGUsIFNlbGVjdG9yQ29tcGlsZXI6OlNpbXBs
ZVNlbGVjdG9yQ2hlY2tlciwgdHlwZW5hbWUgU2VsZWN0b3JRdWVyeVRyYWl0OjpPdXRwdXRUeXBl
JiwgY29uc3QgU2VsZWN0b3JEYXRhJikgY29uc3Q7CisgICAgdGVtcGxhdGUgPHR5cGVuYW1lIFNl
bGVjdG9yUXVlcnlUcmFpdD4gdm9pZCBleGVjdXRlQ29tcGlsZWRTaW1wbGVTZWxlY3RvckNoZWNr
ZXIoY29uc3QgQ29udGFpbmVyTm9kZSYgc2VhcmNoUm9vdE5vZGUsIFNlbGVjdG9yQ29tcGlsZXI6
OlNpbXBsZVNlbGVjdG9yQ2hlY2tlciwgdHlwZW5hbWUgU2VsZWN0b3JRdWVyeVRyYWl0OjpPdXRw
dXRUeXBlJiwgY29uc3QgU2VsZWN0b3JEYXRhJikgY29uc3Q7CisgICAgdGVtcGxhdGUgPHR5cGVu
YW1lIFNlbGVjdG9yUXVlcnlUcmFpdD4gdm9pZCBleGVjdXRlQ29tcGlsZWRTZWxlY3RvckNoZWNr
ZXJXaXRoQ2hlY2tpbmdDb250ZXh0KGNvbnN0IENvbnRhaW5lck5vZGUmIHJvb3ROb2RlLCBjb25z
dCBDb250YWluZXJOb2RlJiBzZWFyY2hSb290Tm9kZSwgU2VsZWN0b3JDb21waWxlcjo6U2VsZWN0
b3JDaGVja2VyV2l0aENoZWNraW5nQ29udGV4dCwgdHlwZW5hbWUgU2VsZWN0b3JRdWVyeVRyYWl0
OjpPdXRwdXRUeXBlJiwgY29uc3QgU2VsZWN0b3JEYXRhJikgY29uc3Q7CiAjZW5kaWYgLy8gRU5B
QkxFKENTU19TRUxFQ1RPUl9KSVQpCiAKICAgICBWZWN0b3I8U2VsZWN0b3JEYXRhPiBtX3NlbGVj
dG9yczsKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0No
YW5nZUxvZwppbmRleCBjYzM5YzdhYzIxNTExMGE4M2Y4NjZhZmI2YmQ3NmM2MTgxZWNhMGU4Li4z
ZDMwMzExYmFiYTEyMGQyNWM3Mzc4MTNmM2Q3ZDVlMjBmN2Y3NzIyIDEwMDY0NAotLS0gYS9MYXlv
dXRUZXN0cy9DaGFuZ2VMb2cKKysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEs
MjEgQEAKKzIwMTQtMDgtMDcgIFl1c3VrZSBTdXp1a2kgIDx1dGF0YW5lLnRlYUBnbWFpbC5jb20+
CisKKyAgICAgICAgQ1NTIEpJVDogc3VwcG9ydCA6c2NvcGUKKyAgICAgICAgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEzNTczMworCisgICAgICAgIFJldmlld2VkIGJ5
IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEltcGxlbWVudCA6c2NvcGUgZm9yIENTUyBKSVQu
IEl0IGludHJvZHVjZXMgc2NvcGUgZmllbGQgdG8gQ2hlY2tpbmdDb250ZXh0CisgICAgICAgIGFu
ZCBpdCBtYWtlcyBDaGVja2luZ0NvbnRleHQgbW9yZSBzaW1pbGFyIHRvIFNlbGVjdG9yQ2hlY2tl
cjo6U2VsZWN0b3JDaGVja2luZ0NvbnRleHQuCisgICAgICAgIEFuZCBzaW5jZSA6c2NvcGUgcmVx
dWlyZXMgQ2hlY2tpbmdDb250ZXh0LCBRdWVyeWluZ1J1bGVzIGNhbiBhY2NlcHQgU2VsZWN0b3JD
aGVja2VyV2l0aENoZWNraW5nQ29udGV4dC4KKworICAgICAgICAqIGZhc3Qvc2VsZWN0b3JzL3F1
ZXJ5U2VsZWN0b3Itc2NvcGUtZmlsdGVyZWQtcm9vdC1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAg
ICAgICAqIGZhc3Qvc2VsZWN0b3JzL3F1ZXJ5U2VsZWN0b3Itc2NvcGUtZmlsdGVyZWQtcm9vdC5o
dG1sOiBBZGRlZC4KKyAgICAgICAgU2VhcmNoaW5nIHJvb3Qgbm9kZSBvZiBxdWVyeVNlbGVjdG9y
QWxsIGlzIGZpbHRlcmVkIHRvIGlkIG5vZGUsIGJ1dCA6c2NvcGUgcm9vdCBub2RlIHNob3VsZCBu
b3QgYmUgY2hhbmdlZC4KKyAgICAgICAgKiBmYXN0L3NlbGVjdG9ycy9zY29wZS13b3Jrcy1hcy1y
b290LWV4cGVjdGVkLmh0bWw6IEFkZGVkLgorICAgICAgICAqIGZhc3Qvc2VsZWN0b3JzL3Njb3Bl
LXdvcmtzLWFzLXJvb3QuaHRtbDogQWRkZWQuCisgICAgICAgIDpzY29wZSBpbiBzdHlsZXNoZWV0
IHdvcmtzIGFzIDpyb290LgorCiAyMDE0LTA4LTA3ICBNYXJrIExhbSAgPG1hcmsubGFtQGFwcGxl
LmNvbT4KIAogICAgICAgICBHYXJkZW5pbmc6IE1hcmsgdGVzdCBhcyBmYWlsaW5nIGluIFRlc3RF
eHBlY3RhdGlvbnMgdW50aWwgdGhlIGlzc3VlIGNhbiBiZSBpbnZlc3RpZ2F0ZWQuCmRpZmYgLS1n
aXQgYS9MYXlvdXRUZXN0cy9mYXN0L3NlbGVjdG9ycy9xdWVyeVNlbGVjdG9yLXNjb3BlLWZpbHRl
cmVkLXJvb3QtZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvZmFzdC9zZWxlY3RvcnMvcXVlcnlT
ZWxlY3Rvci1zY29wZS1maWx0ZXJlZC1yb290LWV4cGVjdGVkLnR4dApuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi44NWU0
OTgwNDRiNDZhOTZiYTBkYzcxODAyMTU5NDA0ZjE4Njg1YzA1Ci0tLSAvZGV2L251bGwKKysrIGIv
TGF5b3V0VGVzdHMvZmFzdC9zZWxlY3RvcnMvcXVlcnlTZWxlY3Rvci1zY29wZS1maWx0ZXJlZC1y
b290LWV4cGVjdGVkLnR4dApAQCAtMCwwICsxLDE3IEBACitUaGlzIHRlc3QgbWFrZXMgc3VyZSB0
aGF0IDpzY29wZSB3aXRoIGlkIGZpbHRlciB3b3JrcyBjb3JyZWN0bHkuCisKK09uIHN1Y2Nlc3Ms
IHlvdSB3aWxsIHNlZSBhIHNlcmllcyBvZiAiUEFTUyIgbWVzc2FnZXMsIGZvbGxvd2VkIGJ5ICJU
RVNUIENPTVBMRVRFIi4KKworCitQQVNTIHNjb3BlLnBhcmVudE5vZGUucXVlcnlTZWxlY3RvckFs
bCgiOnNjb3BlICNzY29wZSBhIikuaXRlbSgwKSBpcyBzY29wZS5maXJzdENoaWxkCitQQVNTIHNj
b3BlLnBhcmVudE5vZGUucXVlcnlTZWxlY3RvckFsbCgiOnNjb3BlICNzY29wZSBhIikubGVuZ3Ro
IGlzIDEKK1BBU1Mgc2NvcGUucXVlcnlTZWxlY3RvckFsbCgiOnNjb3BlICNzY29wZSBhIikubGVu
Z3RoIGlzIDAKK1BBU1Mgc2NvcGUucGFyZW50Tm9kZS5xdWVyeVNlbGVjdG9yQWxsKCI6c2NvcGUg
I3Njb3BlICsgbGkiKS5sZW5ndGggaXMgMQorUEFTUyBzY29wZS5wYXJlbnROb2RlLnF1ZXJ5U2Vs
ZWN0b3JBbGwoIjpzY29wZSAjc2NvcGUgKyBsaSIpLml0ZW0oMCkgaXMgc2NvcGUucGFyZW50Tm9k
ZS5jaGlsZHJlblsxXQorUEFTUyBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCI6c2NvcGUgI3Nj
b3BlIGEiKS5pdGVtKDApIGlzIHNjb3BlLmZpcnN0Q2hpbGQKK1BBU1Mgc3VjY2Vzc2Z1bGx5UGFy
c2VkIGlzIHRydWUKKworVEVTVCBDT01QTEVURQorYWJjCitkZWYKK2VmZwpkaWZmIC0tZ2l0IGEv
TGF5b3V0VGVzdHMvZmFzdC9zZWxlY3RvcnMvcXVlcnlTZWxlY3Rvci1zY29wZS1maWx0ZXJlZC1y
b290Lmh0bWwgYi9MYXlvdXRUZXN0cy9mYXN0L3NlbGVjdG9ycy9xdWVyeVNlbGVjdG9yLXNjb3Bl
LWZpbHRlcmVkLXJvb3QuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5kY2VlZDQ2ZTk3OWQ5ZThhM2FkMTg1ODYx
MWJjYmU3NjkwNWMwMzI4Ci0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvZmFzdC9zZWxl
Y3RvcnMvcXVlcnlTZWxlY3Rvci1zY29wZS1maWx0ZXJlZC1yb290Lmh0bWwKQEAgLTAsMCArMSwz
MCBAQAorPCFkb2N0eXBlIGh0bWw+Cis8aHRtbD4KKzxoZWFkPgorPHNjcmlwdCBzcmM9Ii4uLy4u
L3Jlc291cmNlcy9qcy10ZXN0LXByZS5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0PgoraWYgKHdpbmRv
dy50ZXN0UnVubmVyKQorICAgIHRlc3RSdW5uZXIuZHVtcEFzVGV4dCgpOworPC9zY3JpcHQ+Cis8
L2hlYWQ+Cis8Ym9keT4KKyAgPHVsPgorICAgIDxsaSBpZD0nc2NvcGUnPjxhPmFiYzwvYT48L2xp
PgorICAgIDxsaT5kZWY8L2xpPgorICAgIDxsaT48YT5lZmc8L2E+PC9saT4KKyAgPC91bD4KKzwv
Ym9keT4KKzxzY3JpcHQ+CitkZXNjcmlwdGlvbignVGhpcyB0ZXN0IG1ha2VzIHN1cmUgdGhhdCA6
c2NvcGUgd2l0aCBpZCBmaWx0ZXIgd29ya3MgY29ycmVjdGx5LicpOworCit2YXIgc2NvcGUgPSBk
b2N1bWVudC5nZXRFbGVtZW50QnlJZCgnc2NvcGUnKTsKK3Nob3VsZEJlKCdzY29wZS5wYXJlbnRO
b2RlLnF1ZXJ5U2VsZWN0b3JBbGwoIjpzY29wZSAjc2NvcGUgYSIpLml0ZW0oMCknLCAnc2NvcGUu
Zmlyc3RDaGlsZCcpOworc2hvdWxkQmUoJ3Njb3BlLnBhcmVudE5vZGUucXVlcnlTZWxlY3RvckFs
bCgiOnNjb3BlICNzY29wZSBhIikubGVuZ3RoJywgJzEnKTsKK3Nob3VsZEJlKCdzY29wZS5xdWVy
eVNlbGVjdG9yQWxsKCI6c2NvcGUgI3Njb3BlIGEiKS5sZW5ndGgnLCAnMCcpOworc2hvdWxkQmUo
J3Njb3BlLnBhcmVudE5vZGUucXVlcnlTZWxlY3RvckFsbCgiOnNjb3BlICNzY29wZSArIGxpIiku
bGVuZ3RoJywgJzEnKTsKK3Nob3VsZEJlKCdzY29wZS5wYXJlbnROb2RlLnF1ZXJ5U2VsZWN0b3JB
bGwoIjpzY29wZSAjc2NvcGUgKyBsaSIpLml0ZW0oMCknLCAnc2NvcGUucGFyZW50Tm9kZS5jaGls
ZHJlblsxXScpOworc2hvdWxkQmUoJ2RvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoIjpzY29wZSAj
c2NvcGUgYSIpLml0ZW0oMCknLCAnc2NvcGUuZmlyc3RDaGlsZCcpOworCis8L3NjcmlwdD4KKzxz
Y3JpcHQgc3JjPSIuLi8uLi9yZXNvdXJjZXMvanMtdGVzdC1wb3N0LmpzIj48L3NjcmlwdD4KKzwv
aHRtbD4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2Zhc3Qvc2VsZWN0b3JzL3Njb3BlLXdvcmtz
LWFzLXJvb3QtZXhwZWN0ZWQuaHRtbCBiL0xheW91dFRlc3RzL2Zhc3Qvc2VsZWN0b3JzL3Njb3Bl
LXdvcmtzLWFzLXJvb3QtZXhwZWN0ZWQuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi43N2VlYWUyMzcyNWQ1MDAy
NzkzOTRiZjc5YWVmYzk3ZDdiOTAxYTkyCi0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMv
ZmFzdC9zZWxlY3RvcnMvc2NvcGUtd29ya3MtYXMtcm9vdC1leHBlY3RlZC5odG1sCkBAIC0wLDAg
KzEsNiBAQAorPCFET0NUWVBFIGh0bWw+Cis8aHRtbCBzdHlsZT0iYmFja2dyb3VuZC1jb2xvcjpn
cmVlbiI+Cis8Ym9keT4KKzxwPlRoZSBiYWNrZ3JvdW5kIG9mIHRoZSBkb2N1bWVudCBzaG91bGQg
YmUgZ3JlZW48L3A+Cis8L2JvZHk+Cis8L2h0bWw+CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9m
YXN0L3NlbGVjdG9ycy9zY29wZS13b3Jrcy1hcy1yb290Lmh0bWwgYi9MYXlvdXRUZXN0cy9mYXN0
L3NlbGVjdG9ycy9zY29wZS13b3Jrcy1hcy1yb290Lmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMTY2YWFmZDBl
M2YwMDA4MmNhM2Q5NGNmMGNmMDliMTY3NTZhM2E4MwotLS0gL2Rldi9udWxsCisrKyBiL0xheW91
dFRlc3RzL2Zhc3Qvc2VsZWN0b3JzL3Njb3BlLXdvcmtzLWFzLXJvb3QuaHRtbApAQCAtMCwwICsx
LDEyIEBACis8IURPQ1RZUEUgaHRtbD4KKzxodG1sPgorPGhlYWQ+Cis8c3R5bGU+CisvKiA6c2Nv
cGUgd29ya3MgYXMgOnJvb3QgaW4gc3R5bGVzaGVldC4gKi8KKzpzY29wZSB7IGJhY2tncm91bmQt
Y29sb3I6IGdyZWVuIH0KKzwvc3R5bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKzxwPlRoZSBiYWNrZ3Jv
dW5kIG9mIHRoZSBkb2N1bWVudCBzaG91bGQgYmUgZ3JlZW48L3A+Cis8L2JvZHk+Cis8L2h0bWw+
Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>236252</attachid>
            <date>2014-08-07 18:37:03 -0700</date>
            <delta_ts>2014-08-08 16:41:19 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-135733-20140808103732.patch</filename>
            <type>text/plain</type>
            <size>22165</size>
            <attacher name="Yusuke Suzuki">ysuzuki</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTcyMjM1CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggN2ExODRiYjUxOTBkMmNl
ZGY2NGQ2ZGNkZWI0NGQwNDY2ODJmODc0YS4uMWYzNGNiZTRjYjVhMjM3ZWZhOTIwNWM1Y2ZhNWZh
YjVkMjQyNmJmZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDM0IEBACisyMDE0LTA4LTA3ICBZdXN1
a2UgU3V6dWtpICA8dXRhdGFuZS50ZWFAZ21haWwuY29tPgorCisgICAgICAgIENTUyBKSVQ6IHN1
cHBvcnQgOnNjb3BlCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD0xMzU3MzMKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAg
ICAgICBJbXBsZW1lbnQgOnNjb3BlIGZvciBDU1MgSklULiBJdCBpbnRyb2R1Y2VzIHNjb3BlIGZp
ZWxkIHRvIENoZWNraW5nQ29udGV4dAorICAgICAgICBhbmQgaXQgbWFrZXMgQ2hlY2tpbmdDb250
ZXh0IG1vcmUgc2ltaWxhciB0byBTZWxlY3RvckNoZWNrZXI6OlNlbGVjdG9yQ2hlY2tpbmdDb250
ZXh0LgorICAgICAgICBBbmQgc2luY2UgOnNjb3BlIHJlcXVpcmVzIENoZWNraW5nQ29udGV4dCwg
UXVlcnlpbmdSdWxlcyBjYW4gYWNjZXB0IFNlbGVjdG9yQ2hlY2tlcldpdGhDaGVja2luZ0NvbnRl
eHQuCisKKyAgICAgICAgVGVzdHM6IGZhc3Qvc2VsZWN0b3JzL3F1ZXJ5U2VsZWN0b3Itc2NvcGUt
ZmlsdGVyZWQtcm9vdC5odG1sCisgICAgICAgICAgICAgICBmYXN0L3NlbGVjdG9ycy9zY29wZS13
b3Jrcy1hcy1yb290Lmh0bWwKKworICAgICAgICAqIGNzcy9FbGVtZW50UnVsZUNvbGxlY3Rvci5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpFbGVtZW50UnVsZUNvbGxlY3Rvcjo6cnVsZU1hdGNoZXMp
OgorICAgICAgICAqIGNzc2ppdC9TZWxlY3RvckNvbXBpbGVyLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OlNlbGVjdG9yQ29tcGlsZXI6OmFkZFBzZXVkb0NsYXNzVHlwZSk6CisgICAgICAgIChXZWJD
b3JlOjpTZWxlY3RvckNvbXBpbGVyOjpTZWxlY3RvckNvZGVHZW5lcmF0b3I6OmxvYWRDaGVja2lu
Z0NvbnRleHQpOgorICAgICAgICAoV2ViQ29yZTo6U2VsZWN0b3JDb21waWxlcjo6U2VsZWN0b3JD
b2RlR2VuZXJhdG9yOjpnZW5lcmF0ZUVsZW1lbnRNYXRjaGluZyk6CisgICAgICAgIChXZWJDb3Jl
OjpTZWxlY3RvckNvbXBpbGVyOjpTZWxlY3RvckNvZGVHZW5lcmF0b3I6OmdlbmVyYXRlUmVxdWVz
dGVkUHNldWRvRWxlbWVudEVxdWFsc1RvU2VsZWN0b3JQc2V1ZG9FbGVtZW50KToKKyAgICAgICAg
KFdlYkNvcmU6OlNlbGVjdG9yQ29tcGlsZXI6OlNlbGVjdG9yQ29kZUdlbmVyYXRvcjo6Z2VuZXJh
dGVFbGVtZW50SXNTY29wZVJvb3QpOgorICAgICAgICAoV2ViQ29yZTo6U2VsZWN0b3JDb21waWxl
cjo6U2VsZWN0b3JDb2RlR2VuZXJhdG9yOjpnZW5lcmF0ZU1hcmtQc2V1ZG9TdHlsZUZvclBzZXVk
b0VsZW1lbnQpOgorICAgICAgICAqIGNzc2ppdC9TZWxlY3RvckNvbXBpbGVyLmg6CisgICAgICAg
IChXZWJDb3JlOjpTZWxlY3RvckNvbXBpbGVyOjpDaGVja2luZ0NvbnRleHQ6OkNoZWNraW5nQ29u
dGV4dCk6CisgICAgICAgICogZG9tL1NlbGVjdG9yUXVlcnkuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6U2VsZWN0b3JEYXRhTGlzdDo6ZXhlY3V0ZUNvbXBpbGVkU2ltcGxlU2VsZWN0b3JDaGVja2Vy
KToKKyAgICAgICAgKFdlYkNvcmU6OlNlbGVjdG9yRGF0YUxpc3Q6OmV4ZWN1dGVDb21waWxlZFNl
bGVjdG9yQ2hlY2tlcldpdGhDaGVja2luZ0NvbnRleHQpOgorICAgICAgICAoV2ViQ29yZTo6U2Vs
ZWN0b3JEYXRhTGlzdDo6ZXhlY3V0ZSk6CisgICAgICAgICogZG9tL1NlbGVjdG9yUXVlcnkuaDoK
KwogMjAxNC0wOC0wNyAgR29yZG9uIFNoZXJpZGFuICA8Z29yZG9uX3NoZXJpZGFuQGFwcGxlLmNv
bT4KIAogICAgICAgICBQcm92aWRlIG1ldGhvZHMgdG8gY2xlYXIgdW5kZXNpcmVkIHJlZmVyZW5j
ZXMgdG8gSGlzdG9yeUl0ZW1zIHRoYXQgaGF2ZSBiZWVuIHJlbW92ZWQgZnJvbSB0aGUgYmFjay9m
b3JhcmQgbGlzdC4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9FbGVtZW50UnVsZUNv
bGxlY3Rvci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvRWxlbWVudFJ1bGVDb2xsZWN0b3IuY3Bw
CmluZGV4IGNjYjhkYmZlNWEyYmQ1Njg1YWE1MWM4Mzg1ZTdmOGUyNjZlNTBkODAuLjIxZjEyNDA4
MDU1Mjc4ZTAxZmJhYzk5YjQ2NjkyZWM5N2ExZjlhMzQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL2Nzcy9FbGVtZW50UnVsZUNvbGxlY3Rvci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvY3Nz
L0VsZW1lbnRSdWxlQ29sbGVjdG9yLmNwcApAQCAtMzA3LDkgKzMwNyw4IEBAIGlubGluZSBib29s
IEVsZW1lbnRSdWxlQ29sbGVjdG9yOjpydWxlTWF0Y2hlcyhjb25zdCBSdWxlRGF0YSYgcnVsZURh
dGEpCiAgICAgICAgIEFTU0VSVChydWxlRGF0YS5jb21waWxhdGlvblN0YXR1cygpID09IFNlbGVj
dG9yQ29tcGlsYXRpb25TdGF0dXM6OlNlbGVjdG9yQ2hlY2tlcldpdGhDaGVja2luZ0NvbnRleHQp
OwogCiAgICAgICAgIFNlbGVjdG9yQ29tcGlsZXI6OlNlbGVjdG9yQ2hlY2tlcldpdGhDaGVja2lu
Z0NvbnRleHQgc2VsZWN0b3JDaGVja2VyID0gU2VsZWN0b3JDb21waWxlcjo6c2VsZWN0b3JDaGVj
a2VyRnVuY3Rpb25XaXRoQ2hlY2tpbmdDb250ZXh0KGNvbXBpbGVkU2VsZWN0b3JDaGVja2VyLCBy
dWxlRGF0YS5jb21waWxhdGlvblN0YXR1cygpKTsKLSAgICAgICAgU2VsZWN0b3JDb21waWxlcjo6
Q2hlY2tpbmdDb250ZXh0IGNvbnRleHQ7CisgICAgICAgIFNlbGVjdG9yQ29tcGlsZXI6OkNoZWNr
aW5nQ29udGV4dCBjb250ZXh0KG1fbW9kZSk7CiAgICAgICAgIGNvbnRleHQuZWxlbWVudFN0eWxl
ID0gbV9zdHlsZTsKLSAgICAgICAgY29udGV4dC5yZXNvbHZpbmdNb2RlID0gbV9tb2RlOwogICAg
ICAgICBjb250ZXh0LnBzZXVkb0lkID0gbV9wc2V1ZG9TdHlsZVJlcXVlc3QucHNldWRvSWQ7CiAg
ICAgICAgIGNvbnRleHQuc2Nyb2xsYmFyID0gbV9wc2V1ZG9TdHlsZVJlcXVlc3Quc2Nyb2xsYmFy
OwogICAgICAgICBjb250ZXh0LnNjcm9sbGJhclBhcnQgPSBtX3BzZXVkb1N0eWxlUmVxdWVzdC5z
Y3JvbGxiYXJQYXJ0OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3Nzaml0L1NlbGVjdG9y
Q29tcGlsZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvY3Nzaml0L1NlbGVjdG9yQ29tcGlsZXIuY3Bw
CmluZGV4IDQ2ZmMwZWZlODhiMjQxYWE1NGI3YWQwZjFiNjQwZjdlYmIyNTY1OWIuLmZjYWFlYzg0
NzczY2ViYjNlODMwNjliN2QyYzU5NDJlZWVmY2U4ZTggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL2Nzc2ppdC9TZWxlY3RvckNvbXBpbGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jc3Nq
aXQvU2VsZWN0b3JDb21waWxlci5jcHAKQEAgLTI1OSw2ICsyNTksNyBAQCBjbGFzcyBTZWxlY3Rv
ckNvZGVHZW5lcmF0b3IgewogICAgIHZvaWQgZ2VuZXJhdGVFbGVtZW50TWF0Y2hlc0FueVBzZXVk
b0NsYXNzKEFzc2VtYmxlcjo6SnVtcExpc3QmIGZhaWx1cmVDYXNlcywgY29uc3QgU2VsZWN0b3JG
cmFnbWVudCYpOwogICAgIHZvaWQgZ2VuZXJhdGVFbGVtZW50SGFzUHNldWRvRWxlbWVudChBc3Nl
bWJsZXI6Okp1bXBMaXN0JiBmYWlsdXJlQ2FzZXMsIGNvbnN0IFNlbGVjdG9yRnJhZ21lbnQmKTsK
ICAgICB2b2lkIGdlbmVyYXRlRWxlbWVudElzUm9vdChBc3NlbWJsZXI6Okp1bXBMaXN0JiBmYWls
dXJlQ2FzZXMpOworICAgIHZvaWQgZ2VuZXJhdGVFbGVtZW50SXNTY29wZVJvb3QoQXNzZW1ibGVy
OjpKdW1wTGlzdCYgZmFpbHVyZUNhc2VzKTsKICAgICB2b2lkIGdlbmVyYXRlRWxlbWVudElzVGFy
Z2V0KEFzc2VtYmxlcjo6SnVtcExpc3QmIGZhaWx1cmVDYXNlcyk7CiAKICAgICAvLyBIZWxwZXJz
LgpAQCAtNTA1LDcgKzUwNiw2IEBAIHN0YXRpYyBpbmxpbmUgRnVuY3Rpb25UeXBlIGFkZFBzZXVk
b0NsYXNzVHlwZShjb25zdCBDU1NTZWxlY3RvciYgc2VsZWN0b3IsIFNlbGVjCiAgICAgY2FzZSBD
U1NTZWxlY3Rvcjo6UHNldWRvQ2xhc3NWaXNpdGVkOgogICAgIGNhc2UgQ1NTU2VsZWN0b3I6OlBz
ZXVkb0NsYXNzRHJhZzoKICAgICBjYXNlIENTU1NlbGVjdG9yOjpQc2V1ZG9DbGFzc0Z1bGxQYWdl
TWVkaWE6Ci0gICAgY2FzZSBDU1NTZWxlY3Rvcjo6UHNldWRvQ2xhc3NTY29wZToKICAgICAgICAg
cmV0dXJuIEZ1bmN0aW9uVHlwZTo6Q2Fubm90Q29tcGlsZTsKIAogICAgIC8vIE9wdGltaXplZCBw
c2V1ZG8gc2VsZWN0b3JzLgpAQCAtNTE5LDYgKzUxOSwxNCBAQCBzdGF0aWMgaW5saW5lIEZ1bmN0
aW9uVHlwZSBhZGRQc2V1ZG9DbGFzc1R5cGUoY29uc3QgQ1NTU2VsZWN0b3ImIHNlbGVjdG9yLCBT
ZWxlYwogICAgICAgICBmcmFnbWVudC5wc2V1ZG9DbGFzc2VzLmFkZCh0eXBlKTsKICAgICAgICAg
cmV0dXJuIEZ1bmN0aW9uVHlwZTo6U2ltcGxlU2VsZWN0b3JDaGVja2VyOwogCisgICAgY2FzZSBD
U1NTZWxlY3Rvcjo6UHNldWRvQ2xhc3NTY29wZToKKyAgICAgICAgaWYgKHNlbGVjdG9yQ29udGV4
dCAhPSBTZWxlY3RvckNvbnRleHQ6OlF1ZXJ5U2VsZWN0b3IpIHsKKyAgICAgICAgICAgIGZyYWdt
ZW50LnBzZXVkb0NsYXNzZXMuYWRkKENTU1NlbGVjdG9yOjpQc2V1ZG9DbGFzc1Jvb3QpOworICAg
ICAgICAgICAgcmV0dXJuIEZ1bmN0aW9uVHlwZTo6U2ltcGxlU2VsZWN0b3JDaGVja2VyOworICAg
ICAgICB9CisgICAgICAgIGZyYWdtZW50LnBzZXVkb0NsYXNzZXMuYWRkKENTU1NlbGVjdG9yOjpQ
c2V1ZG9DbGFzc1Njb3BlKTsKKyAgICAgICAgcmV0dXJuIEZ1bmN0aW9uVHlwZTo6U2VsZWN0b3JD
aGVja2VyV2l0aENoZWNraW5nQ29udGV4dDsKKwogICAgIGNhc2UgQ1NTU2VsZWN0b3I6OlBzZXVk
b0NsYXNzQWN0aXZlOgogICAgIGNhc2UgQ1NTU2VsZWN0b3I6OlBzZXVkb0NsYXNzRmlyc3RDaGls
ZDoKICAgICBjYXNlIENTU1NlbGVjdG9yOjpQc2V1ZG9DbGFzc0hvdmVyOgpAQCAtNjEyLDYgKzYy
MCw3IEBAIHN0YXRpYyBpbmxpbmUgRnVuY3Rpb25UeXBlIGFkZFBzZXVkb0NsYXNzVHlwZShjb25z
dCBDU1NTZWxlY3RvciYgc2VsZWN0b3IsIFNlbGVjCiAKICAgICAgICAgICAgIHJldHVybiBmdW5j
dGlvblR5cGU7CiAgICAgICAgIH0KKwogICAgIGNhc2UgQ1NTU2VsZWN0b3I6OlBzZXVkb0NsYXNz
TGFuZzoKICAgICAgICAgewogICAgICAgICAgICAgY29uc3QgQXRvbWljU3RyaW5nJiBhcmd1bWVu
dCA9IHNlbGVjdG9yLmFyZ3VtZW50KCk7CkBAIC02MzEsNyArNjQwLDcgQEAgc3RhdGljIGlubGlu
ZSBGdW5jdGlvblR5cGUgYWRkUHNldWRvQ2xhc3NUeXBlKGNvbnN0IENTU1NlbGVjdG9yJiBzZWxl
Y3RvciwgU2VsZWMKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIHJldHVybiBGdW5jdGlvblR5
cGU6OlNpbXBsZVNlbGVjdG9yQ2hlY2tlcjsKICAgICAgICAgfQotICAgICAgICAgICAgCisKICAg
ICBjYXNlIENTU1NlbGVjdG9yOjpQc2V1ZG9DbGFzc1Vua25vd246CiAgICAgICAgIEFTU0VSVF9O
T1RfUkVBQ0hFRCgpOwogICAgICAgICByZXR1cm4gRnVuY3Rpb25UeXBlOjpDYW5ub3RNYXRjaEFu
eXRoaW5nOwpAQCAtMTYyNiw4ICsxNjM1LDYgQEAgdm9pZCBTZWxlY3RvckNvZGVHZW5lcmF0b3I6
OmFkZEZsYWdzVG9FbGVtZW50U3R5bGVGcm9tQ29udGV4dChBc3NlbWJsZXI6OlJlZ2lzdGUKIAog
dm9pZCBTZWxlY3RvckNvZGVHZW5lcmF0b3I6OmxvYWRDaGVja2luZ0NvbnRleHQoQXNzZW1ibGVy
OjpSZWdpc3RlcklEIGNoZWNraW5nQ29udGV4dCkKIHsKLSAgICBSRUxFQVNFX0FTU0VSVChtX3Nl
bGVjdG9yQ29udGV4dCA9PSBTZWxlY3RvckNvbnRleHQ6OlJ1bGVDb2xsZWN0b3IpOwotCiAgICAg
Ly8gR2V0IHRoZSBjaGVja2luZyBjb250ZXh0LgogICAgIHVuc2lnbmVkIG9mZnNldFRvQ2hlY2tp
bmdDb250ZXh0ID0gbV9zdGFja0FsbG9jYXRvci5vZmZzZXRUb1N0YWNrUmVmZXJlbmNlKG1fY2hl
Y2tpbmdDb250ZXh0U3RhY2tSZWZlcmVuY2UpOwogICAgIG1fYXNzZW1ibGVyLmxvYWRQdHIoQXNz
ZW1ibGVyOjpBZGRyZXNzKEFzc2VtYmxlcjo6c3RhY2tQb2ludGVyUmVnaXN0ZXIsIG9mZnNldFRv
Q2hlY2tpbmdDb250ZXh0KSwgY2hlY2tpbmdDb250ZXh0KTsKQEAgLTE5MzYsNiArMTk0Myw5IEBA
IHZvaWQgU2VsZWN0b3JDb2RlR2VuZXJhdG9yOjpnZW5lcmF0ZUVsZW1lbnRNYXRjaGluZyhBc3Nl
bWJsZXI6Okp1bXBMaXN0JiBtYXRjaGluCiAgICAgaWYgKGZyYWdtZW50LnBzZXVkb0NsYXNzZXMu
Y29udGFpbnMoQ1NTU2VsZWN0b3I6OlBzZXVkb0NsYXNzUm9vdCkpCiAgICAgICAgIGdlbmVyYXRl
RWxlbWVudElzUm9vdChtYXRjaGluZ1Bvc3RUYWdOYW1lRmFpbHVyZUNhc2VzKTsKIAorICAgIGlm
IChmcmFnbWVudC5wc2V1ZG9DbGFzc2VzLmNvbnRhaW5zKENTU1NlbGVjdG9yOjpQc2V1ZG9DbGFz
c1Njb3BlKSkKKyAgICAgICAgZ2VuZXJhdGVFbGVtZW50SXNTY29wZVJvb3QobWF0Y2hpbmdQb3N0
VGFnTmFtZUZhaWx1cmVDYXNlcyk7CisKICAgICBpZiAoZnJhZ21lbnQucHNldWRvQ2xhc3Nlcy5j
b250YWlucyhDU1NTZWxlY3Rvcjo6UHNldWRvQ2xhc3NUYXJnZXQpKQogICAgICAgICBnZW5lcmF0
ZUVsZW1lbnRJc1RhcmdldChtYXRjaGluZ1Bvc3RUYWdOYW1lRmFpbHVyZUNhc2VzKTsKIApAQCAt
MjkzMiw2ICsyOTQyLDkgQEAgdm9pZCBTZWxlY3RvckNvZGVHZW5lcmF0b3I6OmdlbmVyYXRlRWxl
bWVudEhhc1BzZXVkb0VsZW1lbnQoQXNzZW1ibGVyOjpKdW1wTGlzdCYKIAogdm9pZCBTZWxlY3Rv
ckNvZGVHZW5lcmF0b3I6OmdlbmVyYXRlUmVxdWVzdGVkUHNldWRvRWxlbWVudEVxdWFsc1RvU2Vs
ZWN0b3JQc2V1ZG9FbGVtZW50KEFzc2VtYmxlcjo6SnVtcExpc3QmIGZhaWx1cmVDYXNlcywgY29u
c3QgU2VsZWN0b3JGcmFnbWVudCYgZnJhZ21lbnQsIEFzc2VtYmxlcjo6UmVnaXN0ZXJJRCBjaGVj
a2luZ0NvbnRleHQpCiB7CisgICAgaWYgKG1fc2VsZWN0b3JDb250ZXh0ID09IFNlbGVjdG9yQ29u
dGV4dDo6UXVlcnlTZWxlY3RvcikKKyAgICAgICAgcmV0dXJuOworCiAgICAgLy8gTWFrZSBzdXJl
IHRoYXQgdGhlIHJlcXVlc3RlZCBwc2V1ZG9JZCBlcXVhbHMgdG8gdGhlIHBzZXVkbyBlbGVtZW50
IG9mIHRoZSByaWdodG1vc3QgZnJhZ21lbnQuCiAgICAgLy8gSWYgdGhlIHJpZ2h0bW9zdCBmcmFn
bWVudCBkb2Vzbid0IGhhdmUgYSBwc2V1ZG8gZWxlbWVudCwgdGhlIHJlcXVlc3RlZCBwc2V1ZG9J
ZCBuZWVkIHRvIGJlIE5PUFNFVURPIHRvIHN1Y2NlZWQgdGhlIG1hdGNoaW5nLgogICAgIC8vIE90
aGVyd2lzZSwgaWYgdGhlIHJlcXVlc3RlZCBwc2V1ZG9JZCBpcyBub3QgTk9QU0VVRE8sIHRoZSBy
ZXF1ZXN0ZWQgcHNldWRvSWQgbmVlZCB0byBlcXVhbCB0byB0aGUgcHNldWRvIGVsZW1lbnQgb2Yg
dGhlIHJpZ2h0bW9zdCBmcmFnbWVudC4KQEAgLTI5NTMsNiArMjk2NiwyNSBAQCB2b2lkIFNlbGVj
dG9yQ29kZUdlbmVyYXRvcjo6Z2VuZXJhdGVFbGVtZW50SXNSb290KEFzc2VtYmxlcjo6SnVtcExp
c3QmIGZhaWx1cmVDYQogICAgIGZhaWx1cmVDYXNlcy5hcHBlbmQobV9hc3NlbWJsZXIuYnJhbmNo
UHRyKEFzc2VtYmxlcjo6Tm90RXF1YWwsIEFzc2VtYmxlcjo6QWRkcmVzcyhkb2N1bWVudCwgRG9j
dW1lbnQ6OmRvY3VtZW50RWxlbWVudE1lbW9yeU9mZnNldCgpKSwgZWxlbWVudEFkZHJlc3NSZWdp
c3RlcikpOwogfQogCit2b2lkIFNlbGVjdG9yQ29kZUdlbmVyYXRvcjo6Z2VuZXJhdGVFbGVtZW50
SXNTY29wZVJvb3QoQXNzZW1ibGVyOjpKdW1wTGlzdCYgZmFpbHVyZUNhc2VzKQoreworICAgIFJF
TEVBU0VfQVNTRVJUKG1fc2VsZWN0b3JDb250ZXh0ID09IFNlbGVjdG9yQ29udGV4dDo6UXVlcnlT
ZWxlY3Rvcik7CisKKyAgICBBc3NlbWJsZXI6Okp1bXAgc3VjY2Vzc0Nhc2U7CisgICAgeworICAg
ICAgICBMb2NhbFJlZ2lzdGVyIGNoZWNraW5nQ29udGV4dChtX3JlZ2lzdGVyQWxsb2NhdG9yKTsK
KyAgICAgICAgbG9hZENoZWNraW5nQ29udGV4dChjaGVja2luZ0NvbnRleHQpOworCisgICAgICAg
IEFzc2VtYmxlcjo6SnVtcCBzY29wZUlzTnVsbCA9IG1fYXNzZW1ibGVyLmJyYW5jaFRlc3RQdHIo
QXNzZW1ibGVyOjpaZXJvLCBBc3NlbWJsZXI6OkFkZHJlc3MoY2hlY2tpbmdDb250ZXh0LCBPQkpF
Q1RfT0ZGU0VUT0YoQ2hlY2tpbmdDb250ZXh0LCBzY29wZSkpKTsKKyAgICAgICAgc3VjY2Vzc0Nh
c2UgPSBtX2Fzc2VtYmxlci5icmFuY2hQdHIoQXNzZW1ibGVyOjpFcXVhbCwgQXNzZW1ibGVyOjpB
ZGRyZXNzKGNoZWNraW5nQ29udGV4dCwgT0JKRUNUX09GRlNFVE9GKENoZWNraW5nQ29udGV4dCwg
c2NvcGUpKSwgZWxlbWVudEFkZHJlc3NSZWdpc3Rlcik7CisgICAgICAgIGZhaWx1cmVDYXNlcy5h
cHBlbmQobV9hc3NlbWJsZXIuanVtcCgpKTsKKworICAgICAgICBzY29wZUlzTnVsbC5saW5rKCZt
X2Fzc2VtYmxlcik7CisgICAgfQorICAgIGdlbmVyYXRlRWxlbWVudElzUm9vdChmYWlsdXJlQ2Fz
ZXMpOworICAgIHN1Y2Nlc3NDYXNlLmxpbmsoJm1fYXNzZW1ibGVyKTsKK30KKwogdm9pZCBTZWxl
Y3RvckNvZGVHZW5lcmF0b3I6OmdlbmVyYXRlRWxlbWVudElzVGFyZ2V0KEFzc2VtYmxlcjo6SnVt
cExpc3QmIGZhaWx1cmVDYXNlcykKIHsKICAgICBMb2NhbFJlZ2lzdGVyIGRvY3VtZW50KG1fcmVn
aXN0ZXJBbGxvY2F0b3IpOwpAQCAtMjk2MiwxMyArMjk5NCwxNiBAQCB2b2lkIFNlbGVjdG9yQ29k
ZUdlbmVyYXRvcjo6Z2VuZXJhdGVFbGVtZW50SXNUYXJnZXQoQXNzZW1ibGVyOjpKdW1wTGlzdCYg
ZmFpbHVyZQogCiB2b2lkIFNlbGVjdG9yQ29kZUdlbmVyYXRvcjo6Z2VuZXJhdGVNYXJrUHNldWRv
U3R5bGVGb3JQc2V1ZG9FbGVtZW50KEFzc2VtYmxlcjo6SnVtcExpc3QmIGZhaWx1cmVDYXNlcywg
Y29uc3QgU2VsZWN0b3JGcmFnbWVudCYgZnJhZ21lbnQpCiB7Ci0gICAgTG9jYWxSZWdpc3RlciBj
aGVja2luZ0NvbnRleHQobV9yZWdpc3RlckFsbG9jYXRvcik7Ci0gICAgbG9hZENoZWNraW5nQ29u
dGV4dChjaGVja2luZ0NvbnRleHQpOworICAgIGlmIChtX3NlbGVjdG9yQ29udGV4dCA9PSBTZWxl
Y3RvckNvbnRleHQ6OlF1ZXJ5U2VsZWN0b3IpCisgICAgICAgIHJldHVybjsKIAogICAgIC8vIFdo
ZW4gZnJhZ21lbnQgZG9lc24ndCBoYXZlIGEgcHNldWRvIGVsZW1lbnQsIHRoZXJlJ3Mgbm8gbmVl
ZCB0byBtYXJrIHRoZSBwc2V1ZG8gZWxlbWVudCBzdHlsZS4KICAgICBpZiAoIWZyYWdtZW50LnBz
ZXVkb0VsZW1lbnRTZWxlY3RvcikKICAgICAgICAgcmV0dXJuOwogCisgICAgTG9jYWxSZWdpc3Rl
ciBjaGVja2luZ0NvbnRleHQobV9yZWdpc3RlckFsbG9jYXRvcik7CisgICAgbG9hZENoZWNraW5n
Q29udGV4dChjaGVja2luZ0NvbnRleHQpOworCiAgICAgQXNzZW1ibGVyOjpKdW1wTGlzdCBzdWNj
ZXNzQ2FzZXM7CiAKICAgICAvLyBXaGVuIHRoZSByZXF1ZXN0ZWQgcHNldWRvSWQgaXNuJ3QgTk9Q
U0VVRE8sIHRoZXJlJ3Mgbm8gbmVlZCB0byBtYXJrIHRoZSBwc2V1ZG8gZWxlbWVudCBzdHlsZS4K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzc2ppdC9TZWxlY3RvckNvbXBpbGVyLmggYi9T
b3VyY2UvV2ViQ29yZS9jc3NqaXQvU2VsZWN0b3JDb21waWxlci5oCmluZGV4IGU5NDQ1YmExYTll
NjNmMmIyYTZhMTc4ZjNhZjdlNTExZmE4ODEzMmMuLmMwY2E1MzJkNTAzMzMxMWZmZjY3ZDE2MTA0
MWNmNDU0ZTE0YmYyMTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nzc2ppdC9TZWxlY3Rv
ckNvbXBpbGVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvY3Nzaml0L1NlbGVjdG9yQ29tcGlsZXIu
aApAQCAtNzAsMTEgKzcwLDIxIEBAIGNsYXNzIFNlbGVjdG9yQ29tcGlsYXRpb25TdGF0dXMgewog
bmFtZXNwYWNlIFNlbGVjdG9yQ29tcGlsZXIgewogCiBzdHJ1Y3QgQ2hlY2tpbmdDb250ZXh0IHsK
KyAgICBDaGVja2luZ0NvbnRleHQoU2VsZWN0b3JDaGVja2VyOjpNb2RlIHJlc29sdmluZ01vZGUp
CisgICAgICAgIDogcmVzb2x2aW5nTW9kZShyZXNvbHZpbmdNb2RlKQorICAgICAgICAsIGVsZW1l
bnRTdHlsZShudWxscHRyKQorICAgICAgICAsIHBzZXVkb0lkKE5PUFNFVURPKQorICAgICAgICAs
IHNjcm9sbGJhcihudWxscHRyKQorICAgICAgICAsIHNjcm9sbGJhclBhcnQoTm9QYXJ0KQorICAg
ICAgICAsIHNjb3BlKG51bGxwdHIpCisgICAgeyB9CisKICAgICBTZWxlY3RvckNoZWNrZXI6Ok1v
ZGUgcmVzb2x2aW5nTW9kZTsKICAgICBSZW5kZXJTdHlsZSogZWxlbWVudFN0eWxlOwogICAgIFBz
ZXVkb0lkIHBzZXVkb0lkOwogICAgIFJlbmRlclNjcm9sbGJhciogc2Nyb2xsYmFyOwogICAgIFNj
cm9sbGJhclBhcnQgc2Nyb2xsYmFyUGFydDsKKyAgICBjb25zdCBDb250YWluZXJOb2RlKiBzY29w
ZTsKIH07CiAKIGVudW0gY2xhc3MgU2VsZWN0b3JDb250ZXh0IHsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL2RvbS9TZWxlY3RvclF1ZXJ5LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9TZWxl
Y3RvclF1ZXJ5LmNwcAppbmRleCA3MjZjNDZlYTlmM2JiNDNiNWViOTRlODQ5OWEyNzQzYmVmZDdl
ZTc5Li4xMGVmMDJmNDg0MjA4ODFiNmY3OThlZTY3ZmYzZWYzM2QwY2NhYjViIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9kb20vU2VsZWN0b3JRdWVyeS5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvZG9tL1NlbGVjdG9yUXVlcnkuY3BwCkBAIC0zNjEsOSArMzYxLDkgQEAgQUxXQVlTX0lOTElO
RSB2b2lkIFNlbGVjdG9yRGF0YUxpc3Q6OmV4ZWN1dGVTaW5nbGVNdWx0aVNlbGVjdG9yRGF0YShj
b25zdCBDb250YWkKIAogI2lmIEVOQUJMRShDU1NfU0VMRUNUT1JfSklUKQogdGVtcGxhdGUgPHR5
cGVuYW1lIFNlbGVjdG9yUXVlcnlUcmFpdD4KLUFMV0FZU19JTkxJTkUgdm9pZCBTZWxlY3RvckRh
dGFMaXN0OjpleGVjdXRlQ29tcGlsZWRTaW1wbGVTZWxlY3RvckNoZWNrZXIoY29uc3QgQ29udGFp
bmVyTm9kZSYgcm9vdE5vZGUsIFNlbGVjdG9yQ29tcGlsZXI6OlNpbXBsZVNlbGVjdG9yQ2hlY2tl
ciBzZWxlY3RvckNoZWNrZXIsIHR5cGVuYW1lIFNlbGVjdG9yUXVlcnlUcmFpdDo6T3V0cHV0VHlw
ZSYgb3V0cHV0LCBjb25zdCBTZWxlY3RvckRhdGEmIHNlbGVjdG9yRGF0YSkgY29uc3QKK0FMV0FZ
U19JTkxJTkUgdm9pZCBTZWxlY3RvckRhdGFMaXN0OjpleGVjdXRlQ29tcGlsZWRTaW1wbGVTZWxl
Y3RvckNoZWNrZXIoY29uc3QgQ29udGFpbmVyTm9kZSYgc2VhcmNoUm9vdE5vZGUsIFNlbGVjdG9y
Q29tcGlsZXI6OlNpbXBsZVNlbGVjdG9yQ2hlY2tlciBzZWxlY3RvckNoZWNrZXIsIHR5cGVuYW1l
IFNlbGVjdG9yUXVlcnlUcmFpdDo6T3V0cHV0VHlwZSYgb3V0cHV0LCBjb25zdCBTZWxlY3RvckRh
dGEmIHNlbGVjdG9yRGF0YSkgY29uc3QKIHsKLSAgICBmb3IgKGF1dG8mIGVsZW1lbnQgOiBlbGVt
ZW50RGVzY2VuZGFudHMoY29uc3RfY2FzdDxDb250YWluZXJOb2RlJj4ocm9vdE5vZGUpKSkgewor
ICAgIGZvciAoYXV0byYgZWxlbWVudCA6IGVsZW1lbnREZXNjZW5kYW50cyhjb25zdF9jYXN0PENv
bnRhaW5lck5vZGUmPihzZWFyY2hSb290Tm9kZSkpKSB7CiAjaWYgQ1NTX1NFTEVDVE9SX0pJVF9Q
Uk9GSUxJTkcKICAgICAgICAgc2VsZWN0b3JEYXRhLmNvbXBpbGVkU2VsZWN0b3JVc2VkKCk7CiAj
ZWxzZQpAQCAtMzc2LDYgKzM3NiwyNiBAQCBBTFdBWVNfSU5MSU5FIHZvaWQgU2VsZWN0b3JEYXRh
TGlzdDo6ZXhlY3V0ZUNvbXBpbGVkU2ltcGxlU2VsZWN0b3JDaGVja2VyKGNvbnN0CiAgICAgICAg
IH0KICAgICB9CiB9CisKK3RlbXBsYXRlIDx0eXBlbmFtZSBTZWxlY3RvclF1ZXJ5VHJhaXQ+CitB
TFdBWVNfSU5MSU5FIHZvaWQgU2VsZWN0b3JEYXRhTGlzdDo6ZXhlY3V0ZUNvbXBpbGVkU2VsZWN0
b3JDaGVja2VyV2l0aENoZWNraW5nQ29udGV4dChjb25zdCBDb250YWluZXJOb2RlJiByb290Tm9k
ZSwgY29uc3QgQ29udGFpbmVyTm9kZSYgc2VhcmNoUm9vdE5vZGUsIFNlbGVjdG9yQ29tcGlsZXI6
OlNlbGVjdG9yQ2hlY2tlcldpdGhDaGVja2luZ0NvbnRleHQgc2VsZWN0b3JDaGVja2VyLCB0eXBl
bmFtZSBTZWxlY3RvclF1ZXJ5VHJhaXQ6Ok91dHB1dFR5cGUmIG91dHB1dCwgY29uc3QgU2VsZWN0
b3JEYXRhJiBzZWxlY3RvckRhdGEpIGNvbnN0Cit7CisgICAgU2VsZWN0b3JDb21waWxlcjo6Q2hl
Y2tpbmdDb250ZXh0IGNoZWNraW5nQ29udGV4dChTZWxlY3RvckNoZWNrZXI6Ok1vZGU6OlF1ZXJ5
aW5nUnVsZXMpOworICAgIGNoZWNraW5nQ29udGV4dC5zY29wZSA9IHJvb3ROb2RlLmlzRG9jdW1l
bnROb2RlKCkgPyBudWxscHRyIDogJnJvb3ROb2RlOworCisgICAgZm9yIChhdXRvJiBlbGVtZW50
IDogZWxlbWVudERlc2NlbmRhbnRzKGNvbnN0X2Nhc3Q8Q29udGFpbmVyTm9kZSY+KHNlYXJjaFJv
b3ROb2RlKSkpIHsKKyNpZiBDU1NfU0VMRUNUT1JfSklUX1BST0ZJTElORworICAgICAgICBzZWxl
Y3RvckRhdGEuY29tcGlsZWRTZWxlY3RvclVzZWQoKTsKKyNlbHNlCisgICAgICAgIFVOVVNFRF9Q
QVJBTShzZWxlY3RvckRhdGEpOworI2VuZGlmCisgICAgICAgIGlmIChzZWxlY3RvckNoZWNrZXIo
JmVsZW1lbnQsICZjaGVja2luZ0NvbnRleHQpKSB7CisgICAgICAgICAgICBTZWxlY3RvclF1ZXJ5
VHJhaXQ6OmFwcGVuZE91dHB1dEZvckVsZW1lbnQob3V0cHV0LCAmZWxlbWVudCk7CisgICAgICAg
ICAgICBpZiAoU2VsZWN0b3JRdWVyeVRyYWl0OjpzaG91bGRPbmx5TWF0Y2hGaXJzdEVsZW1lbnQp
CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgfQorfQogI2VuZGlmIC8v
IEVOQUJMRShDU1NfU0VMRUNUT1JfSklUKQogCiB0ZW1wbGF0ZSA8dHlwZW5hbWUgU2VsZWN0b3JR
dWVyeVRyYWl0PgpAQCAtMzkxLDcgKzQxMSw3IEBAIEFMV0FZU19JTkxJTkUgdm9pZCBTZWxlY3Rv
ckRhdGFMaXN0OjpleGVjdXRlKENvbnRhaW5lck5vZGUmIHJvb3ROb2RlLCB0eXBlbmFtZSBTCiAg
ICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogI2lmIEVOQUJMRShDU1NfU0VMRUNUT1JfSklU
KQotICAgICAgICBpZiAoc2VsZWN0b3JEYXRhLmNvbXBpbGF0aW9uU3RhdHVzID09IFNlbGVjdG9y
Q29tcGlsYXRpb25TdGF0dXM6OlNpbXBsZVNlbGVjdG9yQ2hlY2tlcikKKyAgICAgICAgaWYgKHNl
bGVjdG9yRGF0YS5jb21waWxhdGlvblN0YXR1cyA9PSBTZWxlY3RvckNvbXBpbGF0aW9uU3RhdHVz
OjpTaW1wbGVTZWxlY3RvckNoZWNrZXIgfHwgc2VsZWN0b3JEYXRhLmNvbXBpbGF0aW9uU3RhdHVz
ID09IFNlbGVjdG9yQ29tcGlsYXRpb25TdGF0dXM6OlNlbGVjdG9yQ2hlY2tlcldpdGhDaGVja2lu
Z0NvbnRleHQpCiAgICAgICAgICAgICBnb3RvIENvbXBpbGVkU2luZ2xlQ2FzZTsKICNlbmRpZgog
ICAgICAgICB9CkBAIC00MDUsOSArNDI1LDggQEAgQUxXQVlTX0lOTElORSB2b2lkIFNlbGVjdG9y
RGF0YUxpc3Q6OmV4ZWN1dGUoQ29udGFpbmVyTm9kZSYgcm9vdE5vZGUsIHR5cGVuYW1lIFMKIAog
ICAgICAgICBKU0M6OlZNJiB2bSA9IHNlYXJjaFJvb3ROb2RlLT5kb2N1bWVudCgpLnNjcmlwdEV4
ZWN1dGlvbkNvbnRleHQoKS0+dm0oKTsKICAgICAgICAgc2VsZWN0b3JEYXRhLmNvbXBpbGF0aW9u
U3RhdHVzID0gU2VsZWN0b3JDb21waWxlcjo6Y29tcGlsZVNlbGVjdG9yKHNlbGVjdG9yRGF0YS5z
ZWxlY3RvciwgJnZtLCBTZWxlY3RvckNvbXBpbGVyOjpTZWxlY3RvckNvbnRleHQ6OlF1ZXJ5U2Vs
ZWN0b3IsIHNlbGVjdG9yRGF0YS5jb21waWxlZFNlbGVjdG9yQ29kZVJlZik7Ci0gICAgICAgIFJF
TEVBU0VfQVNTRVJUKHNlbGVjdG9yRGF0YS5jb21waWxhdGlvblN0YXR1cyAhPSBTZWxlY3RvckNv
bXBpbGF0aW9uU3RhdHVzOjpTZWxlY3RvckNoZWNrZXJXaXRoQ2hlY2tpbmdDb250ZXh0KTsKIAot
ICAgICAgICBpZiAoc2VsZWN0b3JEYXRhLmNvbXBpbGF0aW9uU3RhdHVzID09IFNlbGVjdG9yQ29t
cGlsYXRpb25TdGF0dXM6OlNpbXBsZVNlbGVjdG9yQ2hlY2tlcikgeworICAgICAgICBpZiAoc2Vs
ZWN0b3JEYXRhLmNvbXBpbGF0aW9uU3RhdHVzID09IFNlbGVjdG9yQ29tcGlsYXRpb25TdGF0dXM6
OlNpbXBsZVNlbGVjdG9yQ2hlY2tlciB8fCBzZWxlY3RvckRhdGEuY29tcGlsYXRpb25TdGF0dXMg
PT0gU2VsZWN0b3JDb21waWxhdGlvblN0YXR1czo6U2VsZWN0b3JDaGVja2VyV2l0aENoZWNraW5n
Q29udGV4dCkgewogICAgICAgICAgICAgaWYgKG1fbWF0Y2hUeXBlID09IENvbXBpbGFibGVTaW5n
bGUpIHsKICAgICAgICAgICAgICAgICBtX21hdGNoVHlwZSA9IENvbXBpbGVkU2luZ2xlOwogICAg
ICAgICAgICAgICAgIGdvdG8gQ29tcGlsZWRTaW5nbGVDYXNlOwpAQCAtNDM5LDggKzQ1OCwxNCBA
QCBBTFdBWVNfSU5MSU5FIHZvaWQgU2VsZWN0b3JEYXRhTGlzdDo6ZXhlY3V0ZShDb250YWluZXJO
b2RlJiByb290Tm9kZSwgdHlwZW5hbWUgUwogICAgICAgICBDb21waWxlZFNpbmdsZUNhc2U6CiAg
ICAgICAgIGNvbnN0IFNlbGVjdG9yRGF0YSYgc2VsZWN0b3JEYXRhID0gbV9zZWxlY3RvcnMuZmly
c3QoKTsKICAgICAgICAgdm9pZCogY29tcGlsZWRTZWxlY3RvckNoZWNrZXIgPSBzZWxlY3RvckRh
dGEuY29tcGlsZWRTZWxlY3RvckNvZGVSZWYuY29kZSgpLmV4ZWN1dGFibGVBZGRyZXNzKCk7Ci0g
ICAgICAgIFNlbGVjdG9yQ29tcGlsZXI6OlNpbXBsZVNlbGVjdG9yQ2hlY2tlciBzZWxlY3RvckNo
ZWNrZXIgPSBTZWxlY3RvckNvbXBpbGVyOjpzaW1wbGVTZWxlY3RvckNoZWNrZXJGdW5jdGlvbihj
b21waWxlZFNlbGVjdG9yQ2hlY2tlciwgc2VsZWN0b3JEYXRhLmNvbXBpbGF0aW9uU3RhdHVzKTsK
LSAgICAgICAgZXhlY3V0ZUNvbXBpbGVkU2ltcGxlU2VsZWN0b3JDaGVja2VyPFNlbGVjdG9yUXVl
cnlUcmFpdD4oKnNlYXJjaFJvb3ROb2RlLCBzZWxlY3RvckNoZWNrZXIsIG91dHB1dCwgc2VsZWN0
b3JEYXRhKTsKKyAgICAgICAgaWYgKHNlbGVjdG9yRGF0YS5jb21waWxhdGlvblN0YXR1cyA9PSBT
ZWxlY3RvckNvbXBpbGF0aW9uU3RhdHVzOjpTaW1wbGVTZWxlY3RvckNoZWNrZXIpIHsKKyAgICAg
ICAgICAgIFNlbGVjdG9yQ29tcGlsZXI6OlNpbXBsZVNlbGVjdG9yQ2hlY2tlciBzZWxlY3RvckNo
ZWNrZXIgPSBTZWxlY3RvckNvbXBpbGVyOjpzaW1wbGVTZWxlY3RvckNoZWNrZXJGdW5jdGlvbihj
b21waWxlZFNlbGVjdG9yQ2hlY2tlciwgc2VsZWN0b3JEYXRhLmNvbXBpbGF0aW9uU3RhdHVzKTsK
KyAgICAgICAgICAgIGV4ZWN1dGVDb21waWxlZFNpbXBsZVNlbGVjdG9yQ2hlY2tlcjxTZWxlY3Rv
clF1ZXJ5VHJhaXQ+KCpzZWFyY2hSb290Tm9kZSwgc2VsZWN0b3JDaGVja2VyLCBvdXRwdXQsIHNl
bGVjdG9yRGF0YSk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBBU1NFUlQoc2VsZWN0
b3JEYXRhLmNvbXBpbGF0aW9uU3RhdHVzID09IFNlbGVjdG9yQ29tcGlsYXRpb25TdGF0dXM6OlNl
bGVjdG9yQ2hlY2tlcldpdGhDaGVja2luZ0NvbnRleHQpOworICAgICAgICAgICAgU2VsZWN0b3JD
b21waWxlcjo6U2VsZWN0b3JDaGVja2VyV2l0aENoZWNraW5nQ29udGV4dCBzZWxlY3RvckNoZWNr
ZXIgPSBTZWxlY3RvckNvbXBpbGVyOjpzZWxlY3RvckNoZWNrZXJGdW5jdGlvbldpdGhDaGVja2lu
Z0NvbnRleHQoY29tcGlsZWRTZWxlY3RvckNoZWNrZXIsIHNlbGVjdG9yRGF0YS5jb21waWxhdGlv
blN0YXR1cyk7CisgICAgICAgICAgICBleGVjdXRlQ29tcGlsZWRTZWxlY3RvckNoZWNrZXJXaXRo
Q2hlY2tpbmdDb250ZXh0PFNlbGVjdG9yUXVlcnlUcmFpdD4ocm9vdE5vZGUsICpzZWFyY2hSb290
Tm9kZSwgc2VsZWN0b3JDaGVja2VyLCBvdXRwdXQsIHNlbGVjdG9yRGF0YSk7CisgICAgICAgIH0K
ICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICNlbHNlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9kb20vU2VsZWN0b3JRdWVyeS5oIGIvU291cmNlL1dlYkNvcmUvZG9tL1NlbGVjdG9yUXVl
cnkuaAppbmRleCA0OTU2M2IyOWEzZDYwMDdjMDM5ZTViNDU2MWE1MDMzMWU0MjIzNDc0Li5kODk2
YTc2NWI2ODUxMmVlZTkyNzljZTJkYTZlYzUwN2U3ZGEzOGYzIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9kb20vU2VsZWN0b3JRdWVyeS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9TZWxl
Y3RvclF1ZXJ5LmgKQEAgLTg5LDcgKzg5LDggQEAgY2xhc3MgU2VsZWN0b3JEYXRhTGlzdCB7CiAg
ICAgdGVtcGxhdGUgPHR5cGVuYW1lIFNlbGVjdG9yUXVlcnlUcmFpdD4gdm9pZCBleGVjdXRlU2lu
Z2xlU2VsZWN0b3JEYXRhKGNvbnN0IENvbnRhaW5lck5vZGUmIHJvb3ROb2RlLCBjb25zdCBTZWxl
Y3RvckRhdGEmLCB0eXBlbmFtZSBTZWxlY3RvclF1ZXJ5VHJhaXQ6Ok91dHB1dFR5cGUmKSBjb25z
dDsKICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgU2VsZWN0b3JRdWVyeVRyYWl0PiB2b2lkIGV4ZWN1
dGVTaW5nbGVNdWx0aVNlbGVjdG9yRGF0YShjb25zdCBDb250YWluZXJOb2RlJiByb290Tm9kZSwg
dHlwZW5hbWUgU2VsZWN0b3JRdWVyeVRyYWl0OjpPdXRwdXRUeXBlJikgY29uc3Q7CiAjaWYgRU5B
QkxFKENTU19TRUxFQ1RPUl9KSVQpCi0gICAgdGVtcGxhdGUgPHR5cGVuYW1lIFNlbGVjdG9yUXVl
cnlUcmFpdD4gdm9pZCBleGVjdXRlQ29tcGlsZWRTaW1wbGVTZWxlY3RvckNoZWNrZXIoY29uc3Qg
Q29udGFpbmVyTm9kZSYgcm9vdE5vZGUsIFNlbGVjdG9yQ29tcGlsZXI6OlNpbXBsZVNlbGVjdG9y
Q2hlY2tlciwgdHlwZW5hbWUgU2VsZWN0b3JRdWVyeVRyYWl0OjpPdXRwdXRUeXBlJiwgY29uc3Qg
U2VsZWN0b3JEYXRhJikgY29uc3Q7CisgICAgdGVtcGxhdGUgPHR5cGVuYW1lIFNlbGVjdG9yUXVl
cnlUcmFpdD4gdm9pZCBleGVjdXRlQ29tcGlsZWRTaW1wbGVTZWxlY3RvckNoZWNrZXIoY29uc3Qg
Q29udGFpbmVyTm9kZSYgc2VhcmNoUm9vdE5vZGUsIFNlbGVjdG9yQ29tcGlsZXI6OlNpbXBsZVNl
bGVjdG9yQ2hlY2tlciwgdHlwZW5hbWUgU2VsZWN0b3JRdWVyeVRyYWl0OjpPdXRwdXRUeXBlJiwg
Y29uc3QgU2VsZWN0b3JEYXRhJikgY29uc3Q7CisgICAgdGVtcGxhdGUgPHR5cGVuYW1lIFNlbGVj
dG9yUXVlcnlUcmFpdD4gdm9pZCBleGVjdXRlQ29tcGlsZWRTZWxlY3RvckNoZWNrZXJXaXRoQ2hl
Y2tpbmdDb250ZXh0KGNvbnN0IENvbnRhaW5lck5vZGUmIHJvb3ROb2RlLCBjb25zdCBDb250YWlu
ZXJOb2RlJiBzZWFyY2hSb290Tm9kZSwgU2VsZWN0b3JDb21waWxlcjo6U2VsZWN0b3JDaGVja2Vy
V2l0aENoZWNraW5nQ29udGV4dCwgdHlwZW5hbWUgU2VsZWN0b3JRdWVyeVRyYWl0OjpPdXRwdXRU
eXBlJiwgY29uc3QgU2VsZWN0b3JEYXRhJikgY29uc3Q7CiAjZW5kaWYgLy8gRU5BQkxFKENTU19T
RUxFQ1RPUl9KSVQpCiAKICAgICBWZWN0b3I8U2VsZWN0b3JEYXRhPiBtX3NlbGVjdG9yczsKZGlm
ZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwpp
bmRleCBjYzM5YzdhYzIxNTExMGE4M2Y4NjZhZmI2YmQ3NmM2MTgxZWNhMGU4Li4zZDMwMzExYmFi
YTEyMGQyNWM3Mzc4MTNmM2Q3ZDVlMjBmN2Y3NzIyIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9D
aGFuZ2VMb2cKKysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjEgQEAKKzIw
MTQtMDgtMDcgIFl1c3VrZSBTdXp1a2kgIDx1dGF0YW5lLnRlYUBnbWFpbC5jb20+CisKKyAgICAg
ICAgQ1NTIEpJVDogc3VwcG9ydCA6c2NvcGUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTEzNTczMworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAo
T09QUyEpLgorCisgICAgICAgIEltcGxlbWVudCA6c2NvcGUgZm9yIENTUyBKSVQuIEl0IGludHJv
ZHVjZXMgc2NvcGUgZmllbGQgdG8gQ2hlY2tpbmdDb250ZXh0CisgICAgICAgIGFuZCBpdCBtYWtl
cyBDaGVja2luZ0NvbnRleHQgbW9yZSBzaW1pbGFyIHRvIFNlbGVjdG9yQ2hlY2tlcjo6U2VsZWN0
b3JDaGVja2luZ0NvbnRleHQuCisgICAgICAgIEFuZCBzaW5jZSA6c2NvcGUgcmVxdWlyZXMgQ2hl
Y2tpbmdDb250ZXh0LCBRdWVyeWluZ1J1bGVzIGNhbiBhY2NlcHQgU2VsZWN0b3JDaGVja2VyV2l0
aENoZWNraW5nQ29udGV4dC4KKworICAgICAgICAqIGZhc3Qvc2VsZWN0b3JzL3F1ZXJ5U2VsZWN0
b3Itc2NvcGUtZmlsdGVyZWQtcm9vdC1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAqIGZh
c3Qvc2VsZWN0b3JzL3F1ZXJ5U2VsZWN0b3Itc2NvcGUtZmlsdGVyZWQtcm9vdC5odG1sOiBBZGRl
ZC4KKyAgICAgICAgU2VhcmNoaW5nIHJvb3Qgbm9kZSBvZiBxdWVyeVNlbGVjdG9yQWxsIGlzIGZp
bHRlcmVkIHRvIGlkIG5vZGUsIGJ1dCA6c2NvcGUgcm9vdCBub2RlIHNob3VsZCBub3QgYmUgY2hh
bmdlZC4KKyAgICAgICAgKiBmYXN0L3NlbGVjdG9ycy9zY29wZS13b3Jrcy1hcy1yb290LWV4cGVj
dGVkLmh0bWw6IEFkZGVkLgorICAgICAgICAqIGZhc3Qvc2VsZWN0b3JzL3Njb3BlLXdvcmtzLWFz
LXJvb3QuaHRtbDogQWRkZWQuCisgICAgICAgIDpzY29wZSBpbiBzdHlsZXNoZWV0IHdvcmtzIGFz
IDpyb290LgorCiAyMDE0LTA4LTA3ICBNYXJrIExhbSAgPG1hcmsubGFtQGFwcGxlLmNvbT4KIAog
ICAgICAgICBHYXJkZW5pbmc6IE1hcmsgdGVzdCBhcyBmYWlsaW5nIGluIFRlc3RFeHBlY3RhdGlv
bnMgdW50aWwgdGhlIGlzc3VlIGNhbiBiZSBpbnZlc3RpZ2F0ZWQuCmRpZmYgLS1naXQgYS9MYXlv
dXRUZXN0cy9mYXN0L3NlbGVjdG9ycy9xdWVyeVNlbGVjdG9yLXNjb3BlLWZpbHRlcmVkLXJvb3Qt
ZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvZmFzdC9zZWxlY3RvcnMvcXVlcnlTZWxlY3Rvci1z
Y29wZS1maWx0ZXJlZC1yb290LWV4cGVjdGVkLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi44NWU0OTgwNDRiNDZh
OTZiYTBkYzcxODAyMTU5NDA0ZjE4Njg1YzA1Ci0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVz
dHMvZmFzdC9zZWxlY3RvcnMvcXVlcnlTZWxlY3Rvci1zY29wZS1maWx0ZXJlZC1yb290LWV4cGVj
dGVkLnR4dApAQCAtMCwwICsxLDE3IEBACitUaGlzIHRlc3QgbWFrZXMgc3VyZSB0aGF0IDpzY29w
ZSB3aXRoIGlkIGZpbHRlciB3b3JrcyBjb3JyZWN0bHkuCisKK09uIHN1Y2Nlc3MsIHlvdSB3aWxs
IHNlZSBhIHNlcmllcyBvZiAiUEFTUyIgbWVzc2FnZXMsIGZvbGxvd2VkIGJ5ICJURVNUIENPTVBM
RVRFIi4KKworCitQQVNTIHNjb3BlLnBhcmVudE5vZGUucXVlcnlTZWxlY3RvckFsbCgiOnNjb3Bl
ICNzY29wZSBhIikuaXRlbSgwKSBpcyBzY29wZS5maXJzdENoaWxkCitQQVNTIHNjb3BlLnBhcmVu
dE5vZGUucXVlcnlTZWxlY3RvckFsbCgiOnNjb3BlICNzY29wZSBhIikubGVuZ3RoIGlzIDEKK1BB
U1Mgc2NvcGUucXVlcnlTZWxlY3RvckFsbCgiOnNjb3BlICNzY29wZSBhIikubGVuZ3RoIGlzIDAK
K1BBU1Mgc2NvcGUucGFyZW50Tm9kZS5xdWVyeVNlbGVjdG9yQWxsKCI6c2NvcGUgI3Njb3BlICsg
bGkiKS5sZW5ndGggaXMgMQorUEFTUyBzY29wZS5wYXJlbnROb2RlLnF1ZXJ5U2VsZWN0b3JBbGwo
IjpzY29wZSAjc2NvcGUgKyBsaSIpLml0ZW0oMCkgaXMgc2NvcGUucGFyZW50Tm9kZS5jaGlsZHJl
blsxXQorUEFTUyBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCI6c2NvcGUgI3Njb3BlIGEiKS5p
dGVtKDApIGlzIHNjb3BlLmZpcnN0Q2hpbGQKK1BBU1Mgc3VjY2Vzc2Z1bGx5UGFyc2VkIGlzIHRy
dWUKKworVEVTVCBDT01QTEVURQorYWJjCitkZWYKK2VmZwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVz
dHMvZmFzdC9zZWxlY3RvcnMvcXVlcnlTZWxlY3Rvci1zY29wZS1maWx0ZXJlZC1yb290Lmh0bWwg
Yi9MYXlvdXRUZXN0cy9mYXN0L3NlbGVjdG9ycy9xdWVyeVNlbGVjdG9yLXNjb3BlLWZpbHRlcmVk
LXJvb3QuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5kY2VlZDQ2ZTk3OWQ5ZThhM2FkMTg1ODYxMWJjYmU3Njkw
NWMwMzI4Ci0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvZmFzdC9zZWxlY3RvcnMvcXVl
cnlTZWxlY3Rvci1zY29wZS1maWx0ZXJlZC1yb290Lmh0bWwKQEAgLTAsMCArMSwzMCBAQAorPCFk
b2N0eXBlIGh0bWw+Cis8aHRtbD4KKzxoZWFkPgorPHNjcmlwdCBzcmM9Ii4uLy4uL3Jlc291cmNl
cy9qcy10ZXN0LXByZS5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0PgoraWYgKHdpbmRvdy50ZXN0UnVu
bmVyKQorICAgIHRlc3RSdW5uZXIuZHVtcEFzVGV4dCgpOworPC9zY3JpcHQ+Cis8L2hlYWQ+Cis8
Ym9keT4KKyAgPHVsPgorICAgIDxsaSBpZD0nc2NvcGUnPjxhPmFiYzwvYT48L2xpPgorICAgIDxs
aT5kZWY8L2xpPgorICAgIDxsaT48YT5lZmc8L2E+PC9saT4KKyAgPC91bD4KKzwvYm9keT4KKzxz
Y3JpcHQ+CitkZXNjcmlwdGlvbignVGhpcyB0ZXN0IG1ha2VzIHN1cmUgdGhhdCA6c2NvcGUgd2l0
aCBpZCBmaWx0ZXIgd29ya3MgY29ycmVjdGx5LicpOworCit2YXIgc2NvcGUgPSBkb2N1bWVudC5n
ZXRFbGVtZW50QnlJZCgnc2NvcGUnKTsKK3Nob3VsZEJlKCdzY29wZS5wYXJlbnROb2RlLnF1ZXJ5
U2VsZWN0b3JBbGwoIjpzY29wZSAjc2NvcGUgYSIpLml0ZW0oMCknLCAnc2NvcGUuZmlyc3RDaGls
ZCcpOworc2hvdWxkQmUoJ3Njb3BlLnBhcmVudE5vZGUucXVlcnlTZWxlY3RvckFsbCgiOnNjb3Bl
ICNzY29wZSBhIikubGVuZ3RoJywgJzEnKTsKK3Nob3VsZEJlKCdzY29wZS5xdWVyeVNlbGVjdG9y
QWxsKCI6c2NvcGUgI3Njb3BlIGEiKS5sZW5ndGgnLCAnMCcpOworc2hvdWxkQmUoJ3Njb3BlLnBh
cmVudE5vZGUucXVlcnlTZWxlY3RvckFsbCgiOnNjb3BlICNzY29wZSArIGxpIikubGVuZ3RoJywg
JzEnKTsKK3Nob3VsZEJlKCdzY29wZS5wYXJlbnROb2RlLnF1ZXJ5U2VsZWN0b3JBbGwoIjpzY29w
ZSAjc2NvcGUgKyBsaSIpLml0ZW0oMCknLCAnc2NvcGUucGFyZW50Tm9kZS5jaGlsZHJlblsxXScp
Oworc2hvdWxkQmUoJ2RvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoIjpzY29wZSAjc2NvcGUgYSIp
Lml0ZW0oMCknLCAnc2NvcGUuZmlyc3RDaGlsZCcpOworCis8L3NjcmlwdD4KKzxzY3JpcHQgc3Jj
PSIuLi8uLi9yZXNvdXJjZXMvanMtdGVzdC1wb3N0LmpzIj48L3NjcmlwdD4KKzwvaHRtbD4KZGlm
ZiAtLWdpdCBhL0xheW91dFRlc3RzL2Zhc3Qvc2VsZWN0b3JzL3Njb3BlLXdvcmtzLWFzLXJvb3Qt
ZXhwZWN0ZWQuaHRtbCBiL0xheW91dFRlc3RzL2Zhc3Qvc2VsZWN0b3JzL3Njb3BlLXdvcmtzLWFz
LXJvb3QtZXhwZWN0ZWQuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi43N2VlYWUyMzcyNWQ1MDAyNzkzOTRiZjc5
YWVmYzk3ZDdiOTAxYTkyCi0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvZmFzdC9zZWxl
Y3RvcnMvc2NvcGUtd29ya3MtYXMtcm9vdC1leHBlY3RlZC5odG1sCkBAIC0wLDAgKzEsNiBAQAor
PCFET0NUWVBFIGh0bWw+Cis8aHRtbCBzdHlsZT0iYmFja2dyb3VuZC1jb2xvcjpncmVlbiI+Cis8
Ym9keT4KKzxwPlRoZSBiYWNrZ3JvdW5kIG9mIHRoZSBkb2N1bWVudCBzaG91bGQgYmUgZ3JlZW48
L3A+Cis8L2JvZHk+Cis8L2h0bWw+CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9mYXN0L3NlbGVj
dG9ycy9zY29wZS13b3Jrcy1hcy1yb290Lmh0bWwgYi9MYXlvdXRUZXN0cy9mYXN0L3NlbGVjdG9y
cy9zY29wZS13b3Jrcy1hcy1yb290Lmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMTY2YWFmZDBlM2YwMDA4MmNh
M2Q5NGNmMGNmMDliMTY3NTZhM2E4MwotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2Zh
c3Qvc2VsZWN0b3JzL3Njb3BlLXdvcmtzLWFzLXJvb3QuaHRtbApAQCAtMCwwICsxLDEyIEBACis8
IURPQ1RZUEUgaHRtbD4KKzxodG1sPgorPGhlYWQ+Cis8c3R5bGU+CisvKiA6c2NvcGUgd29ya3Mg
YXMgOnJvb3QgaW4gc3R5bGVzaGVldC4gKi8KKzpzY29wZSB7IGJhY2tncm91bmQtY29sb3I6IGdy
ZWVuIH0KKzwvc3R5bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKzxwPlRoZSBiYWNrZ3JvdW5kIG9mIHRo
ZSBkb2N1bWVudCBzaG91bGQgYmUgZ3JlZW48L3A+Cis8L2JvZHk+Cis8L2h0bWw+Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>236323</attachid>
            <date>2014-08-08 16:41:23 -0700</date>
            <delta_ts>2014-08-11 12:28:29 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-135733-20140809084157.patch</filename>
            <type>text/plain</type>
            <size>37882</size>
            <attacher name="Yusuke Suzuki">ysuzuki</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTcyMjM1CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggN2ExODRiYjUxOTBkMmNl
ZGY2NGQ2ZGNkZWI0NGQwNDY2ODJmODc0YS4uMDcxZmQ3ODg3MTljNjRlYjk1NjFmOTM1MmIwZDNk
MjNhY2NjNjliOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQ1IEBACisyMDE0LTA4LTA4ICBZdXN1
a2UgU3V6dWtpICA8dXRhdGFuZS50ZWFAZ21haWwuY29tPgorCisgICAgICAgIENTUyBKSVQ6IHN1
cHBvcnQgOnNjb3BlCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD0xMzU3MzMKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAg
ICAgICBJbXBsZW1lbnQgOnNjb3BlIGZvciBDU1MgSklULiBJdCBpbnRyb2R1Y2VzIHNjb3BlIGZp
ZWxkIHRvIENoZWNraW5nQ29udGV4dAorICAgICAgICBhbmQgaXQgbWFrZXMgQ2hlY2tpbmdDb250
ZXh0IG1vcmUgc2ltaWxhciB0byBTZWxlY3RvckNoZWNrZXI6OlNlbGVjdG9yQ2hlY2tpbmdDb250
ZXh0LgorICAgICAgICBBbmQgc2luY2UgOnNjb3BlIHJlcXVpcmVzIENoZWNraW5nQ29udGV4dCwg
UXVlcnlpbmdSdWxlcyBjYW4gYWNjZXB0IFNlbGVjdG9yQ2hlY2tlcldpdGhDaGVja2luZ0NvbnRl
eHQuCisKKyAgICAgICAgVGVzdHM6IGZhc3Qvc2VsZWN0b3JzL3F1ZXJ5U2VsZWN0b3Itc2NvcGUt
ZmlsdGVyZWQtcm9vdC5odG1sCisgICAgICAgICAgICAgICBmYXN0L3NlbGVjdG9ycy9zY29wZS13
b3Jrcy1hcy1yb290Lmh0bWwKKworICAgICAgICAqIGNzcy9FbGVtZW50UnVsZUNvbGxlY3Rvci5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpFbGVtZW50UnVsZUNvbGxlY3Rvcjo6cnVsZU1hdGNoZXMp
OgorICAgICAgICAqIGNzc2ppdC9TZWxlY3RvckNvbXBpbGVyLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OlNlbGVjdG9yQ29tcGlsZXI6OnNob3VsZFVzZVJlbmRlclN0eWxlRnJvbUNoZWNraW5nQ29u
dGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpTZWxlY3RvckNvbXBpbGVyOjphZGRQc2V1ZG9DbGFz
c1R5cGUpOgorICAgICAgICAoV2ViQ29yZTo6U2VsZWN0b3JDb21waWxlcjo6U2VsZWN0b3JDb2Rl
R2VuZXJhdG9yOjpnZW5lcmF0ZVNlbGVjdG9yQ2hlY2tlcik6CisgICAgICAgIChXZWJDb3JlOjpT
ZWxlY3RvckNvbXBpbGVyOjpTZWxlY3RvckNvZGVHZW5lcmF0b3I6OmFkZEZsYWdzVG9FbGVtZW50
U3R5bGVGcm9tQ29udGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpTZWxlY3RvckNvbXBpbGVyOjpT
ZWxlY3RvckNvZGVHZW5lcmF0b3I6OmxvYWRDaGVja2luZ0NvbnRleHQpOgorICAgICAgICAoV2Vi
Q29yZTo6U2VsZWN0b3JDb21waWxlcjo6U2VsZWN0b3JDb2RlR2VuZXJhdG9yOjptYXJrUGFyZW50
RWxlbWVudElmUmVzb2x2aW5nU3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6U2VsZWN0b3JDb21w
aWxlcjo6U2VsZWN0b3JDb2RlR2VuZXJhdG9yOjpnZW5lcmF0ZUVsZW1lbnRNYXRjaGluZyk6Cisg
ICAgICAgIChXZWJDb3JlOjpTZWxlY3RvckNvbXBpbGVyOjpTZWxlY3RvckNvZGVHZW5lcmF0b3I6
OmdlbmVyYXRlRWxlbWVudElzQWN0aXZlKToKKyAgICAgICAgKFdlYkNvcmU6OlNlbGVjdG9yQ29t
cGlsZXI6OlNlbGVjdG9yQ29kZUdlbmVyYXRvcjo6Z2VuZXJhdGVFbGVtZW50SXNGaXJzdENoaWxk
KToKKyAgICAgICAgKFdlYkNvcmU6OlNlbGVjdG9yQ29tcGlsZXI6OlNlbGVjdG9yQ29kZUdlbmVy
YXRvcjo6Z2VuZXJhdGVFbGVtZW50SXNIb3ZlcmVkKToKKyAgICAgICAgKFdlYkNvcmU6OlNlbGVj
dG9yQ29tcGlsZXI6OlNlbGVjdG9yQ29kZUdlbmVyYXRvcjo6Z2VuZXJhdGVFbGVtZW50SXNMYXN0
Q2hpbGQpOgorICAgICAgICAoV2ViQ29yZTo6U2VsZWN0b3JDb21waWxlcjo6U2VsZWN0b3JDb2Rl
R2VuZXJhdG9yOjpnZW5lcmF0ZUVsZW1lbnRJc09ubHlDaGlsZCk6CisgICAgICAgIChXZWJDb3Jl
OjpTZWxlY3RvckNvbXBpbGVyOjpTZWxlY3RvckNvZGVHZW5lcmF0b3I6OmdlbmVyYXRlRWxlbWVu
dElzTnRoQ2hpbGQpOgorICAgICAgICAoV2ViQ29yZTo6U2VsZWN0b3JDb21waWxlcjo6U2VsZWN0
b3JDb2RlR2VuZXJhdG9yOjpnZW5lcmF0ZUVsZW1lbnRIYXNQc2V1ZG9FbGVtZW50KToKKyAgICAg
ICAgKFdlYkNvcmU6OlNlbGVjdG9yQ29tcGlsZXI6OlNlbGVjdG9yQ29kZUdlbmVyYXRvcjo6Z2Vu
ZXJhdGVSZXF1ZXN0ZWRQc2V1ZG9FbGVtZW50RXF1YWxzVG9TZWxlY3RvclBzZXVkb0VsZW1lbnQp
OgorICAgICAgICAoV2ViQ29yZTo6U2VsZWN0b3JDb21waWxlcjo6U2VsZWN0b3JDb2RlR2VuZXJh
dG9yOjpnZW5lcmF0ZUVsZW1lbnRJc1Njb3BlUm9vdCk6CisgICAgICAgIChXZWJDb3JlOjpTZWxl
Y3RvckNvbXBpbGVyOjpTZWxlY3RvckNvZGVHZW5lcmF0b3I6OmdlbmVyYXRlTWFya1BzZXVkb1N0
eWxlRm9yUHNldWRvRWxlbWVudCk6CisgICAgICAgICogY3Nzaml0L1NlbGVjdG9yQ29tcGlsZXIu
aDoKKyAgICAgICAgKFdlYkNvcmU6OlNlbGVjdG9yQ29tcGlsZXI6OkNoZWNraW5nQ29udGV4dDo6
Q2hlY2tpbmdDb250ZXh0KToKKyAgICAgICAgKiBkb20vU2VsZWN0b3JRdWVyeS5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpTZWxlY3RvckRhdGFMaXN0OjpleGVjdXRlQ29tcGlsZWRTaW1wbGVTZWxl
Y3RvckNoZWNrZXIpOgorICAgICAgICAoV2ViQ29yZTo6U2VsZWN0b3JEYXRhTGlzdDo6ZXhlY3V0
ZUNvbXBpbGVkU2VsZWN0b3JDaGVja2VyV2l0aENoZWNraW5nQ29udGV4dCk6CisgICAgICAgIChX
ZWJDb3JlOjpTZWxlY3RvckRhdGFMaXN0OjpleGVjdXRlKToKKyAgICAgICAgKiBkb20vU2VsZWN0
b3JRdWVyeS5oOgorCiAyMDE0LTA4LTA3ICBHb3Jkb24gU2hlcmlkYW4gIDxnb3Jkb25fc2hlcmlk
YW5AYXBwbGUuY29tPgogCiAgICAgICAgIFByb3ZpZGUgbWV0aG9kcyB0byBjbGVhciB1bmRlc2ly
ZWQgcmVmZXJlbmNlcyB0byBIaXN0b3J5SXRlbXMgdGhhdCBoYXZlIGJlZW4gcmVtb3ZlZCBmcm9t
IHRoZSBiYWNrL2ZvcmFyZCBsaXN0LgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3NzL0Vs
ZW1lbnRSdWxlQ29sbGVjdG9yLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9FbGVtZW50UnVsZUNv
bGxlY3Rvci5jcHAKaW5kZXggY2NiOGRiZmU1YTJiZDU2ODVhYTUxYzgzODVlN2Y4ZTI2NmU1MGQ4
MC4uMjFmMTI0MDgwNTUyNzhlMDFmYmFjOTliNDY2OTJlYzk3YTFmOWEzNCAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvY3NzL0VsZW1lbnRSdWxlQ29sbGVjdG9yLmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9jc3MvRWxlbWVudFJ1bGVDb2xsZWN0b3IuY3BwCkBAIC0zMDcsOSArMzA3LDggQEAg
aW5saW5lIGJvb2wgRWxlbWVudFJ1bGVDb2xsZWN0b3I6OnJ1bGVNYXRjaGVzKGNvbnN0IFJ1bGVE
YXRhJiBydWxlRGF0YSkKICAgICAgICAgQVNTRVJUKHJ1bGVEYXRhLmNvbXBpbGF0aW9uU3RhdHVz
KCkgPT0gU2VsZWN0b3JDb21waWxhdGlvblN0YXR1czo6U2VsZWN0b3JDaGVja2VyV2l0aENoZWNr
aW5nQ29udGV4dCk7CiAKICAgICAgICAgU2VsZWN0b3JDb21waWxlcjo6U2VsZWN0b3JDaGVja2Vy
V2l0aENoZWNraW5nQ29udGV4dCBzZWxlY3RvckNoZWNrZXIgPSBTZWxlY3RvckNvbXBpbGVyOjpz
ZWxlY3RvckNoZWNrZXJGdW5jdGlvbldpdGhDaGVja2luZ0NvbnRleHQoY29tcGlsZWRTZWxlY3Rv
ckNoZWNrZXIsIHJ1bGVEYXRhLmNvbXBpbGF0aW9uU3RhdHVzKCkpOwotICAgICAgICBTZWxlY3Rv
ckNvbXBpbGVyOjpDaGVja2luZ0NvbnRleHQgY29udGV4dDsKKyAgICAgICAgU2VsZWN0b3JDb21w
aWxlcjo6Q2hlY2tpbmdDb250ZXh0IGNvbnRleHQobV9tb2RlKTsKICAgICAgICAgY29udGV4dC5l
bGVtZW50U3R5bGUgPSBtX3N0eWxlOwotICAgICAgICBjb250ZXh0LnJlc29sdmluZ01vZGUgPSBt
X21vZGU7CiAgICAgICAgIGNvbnRleHQucHNldWRvSWQgPSBtX3BzZXVkb1N0eWxlUmVxdWVzdC5w
c2V1ZG9JZDsKICAgICAgICAgY29udGV4dC5zY3JvbGxiYXIgPSBtX3BzZXVkb1N0eWxlUmVxdWVz
dC5zY3JvbGxiYXI7CiAgICAgICAgIGNvbnRleHQuc2Nyb2xsYmFyUGFydCA9IG1fcHNldWRvU3R5
bGVSZXF1ZXN0LnNjcm9sbGJhclBhcnQ7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3Nq
aXQvU2VsZWN0b3JDb21waWxlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9jc3NqaXQvU2VsZWN0b3JD
b21waWxlci5jcHAKaW5kZXggNDZmYzBlZmU4OGIyNDFhYTU0YjdhZDBmMWI2NDBmN2ViYjI1NjU5
Yi4uN2ZjMjBkZGM4MTY2MDA1ODg5ZmI5NjRlYzNiNmI3OGM0ZWZhNjM5YSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvY3Nzaml0L1NlbGVjdG9yQ29tcGlsZXIuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL2Nzc2ppdC9TZWxlY3RvckNvbXBpbGVyLmNwcApAQCAtMjU5LDYgKzI1OSw3IEBAIGNs
YXNzIFNlbGVjdG9yQ29kZUdlbmVyYXRvciB7CiAgICAgdm9pZCBnZW5lcmF0ZUVsZW1lbnRNYXRj
aGVzQW55UHNldWRvQ2xhc3MoQXNzZW1ibGVyOjpKdW1wTGlzdCYgZmFpbHVyZUNhc2VzLCBjb25z
dCBTZWxlY3RvckZyYWdtZW50Jik7CiAgICAgdm9pZCBnZW5lcmF0ZUVsZW1lbnRIYXNQc2V1ZG9F
bGVtZW50KEFzc2VtYmxlcjo6SnVtcExpc3QmIGZhaWx1cmVDYXNlcywgY29uc3QgU2VsZWN0b3JG
cmFnbWVudCYpOwogICAgIHZvaWQgZ2VuZXJhdGVFbGVtZW50SXNSb290KEFzc2VtYmxlcjo6SnVt
cExpc3QmIGZhaWx1cmVDYXNlcyk7CisgICAgdm9pZCBnZW5lcmF0ZUVsZW1lbnRJc1Njb3BlUm9v
dChBc3NlbWJsZXI6Okp1bXBMaXN0JiBmYWlsdXJlQ2FzZXMpOwogICAgIHZvaWQgZ2VuZXJhdGVF
bGVtZW50SXNUYXJnZXQoQXNzZW1ibGVyOjpKdW1wTGlzdCYgZmFpbHVyZUNhc2VzKTsKIAogICAg
IC8vIEhlbHBlcnMuCkBAIC0zNTEsMTAgKzM1MiwxMSBAQCBzdGF0aWMgaW5saW5lIEZ1bmN0aW9u
VHlwZSBtb3N0UmVzdHJpY3RpdmVGdW5jdGlvblR5cGUoRnVuY3Rpb25UeXBlIGEsIEZ1bmN0aW9u
VAogICAgIHJldHVybiBzdGQ6Om1heChhLCBiKTsKIH0KIAotc3RhdGljIGlubGluZSBib29sIHNo
b3VsZFVzZVJlbmRlclN0eWxlRnJvbUNoZWNraW5nQ29udGV4dChjb25zdCBTZWxlY3RvckZyYWdt
ZW50JiBmcmFnbWVudCkKK3N0YXRpYyBpbmxpbmUgYm9vbCBzaG91bGRVc2VSZW5kZXJTdHlsZUZy
b21DaGVja2luZ0NvbnRleHQoU2VsZWN0b3JDb250ZXh0IHNlbGVjdG9yQ29udGV4dCwgY29uc3Qg
U2VsZWN0b3JGcmFnbWVudCYgZnJhZ21lbnQpCiB7CiAgICAgLy8gUmV0dXJuIHRydWUgaWYgdGhl
IHBvc2l0aW9uIG9mIHRoaXMgZnJhZ21lbnQgaXMgUmlnaHRtb3N0IGluIHRoZSByb290IGZyYWdt
ZW50cy4KICAgICAvLyBJbiB0aGlzIGNhc2UsIHdlIHNob3VsZCB1c2UgdGhlIFJlbmRlclN0eWxl
IHN0b3JlZCBpbiB0aGUgQ2hlY2tpbmdDb250ZXh0LgorICAgIEFTU0VSVF9VTlVTRUQoc2VsZWN0
b3JDb250ZXh0LCBzZWxlY3RvckNvbnRleHQgIT0gU2VsZWN0b3JDb250ZXh0OjpRdWVyeVNlbGVj
dG9yKTsKICAgICByZXR1cm4gZnJhZ21lbnQucmVsYXRpb25Ub1JpZ2h0RnJhZ21lbnQgPT0gRnJh
Z21lbnRSZWxhdGlvbjo6UmlnaHRtb3N0ICYmIGZyYWdtZW50LnBvc2l0aW9uSW5Sb290RnJhZ21l
bnRzID09IEZyYWdtZW50UG9zaXRpb25JblJvb3RGcmFnbWVudHM6OlJpZ2h0bW9zdDsKIH0KIApA
QCAtNTA1LDcgKzUwNyw2IEBAIHN0YXRpYyBpbmxpbmUgRnVuY3Rpb25UeXBlIGFkZFBzZXVkb0Ns
YXNzVHlwZShjb25zdCBDU1NTZWxlY3RvciYgc2VsZWN0b3IsIFNlbGVjCiAgICAgY2FzZSBDU1NT
ZWxlY3Rvcjo6UHNldWRvQ2xhc3NWaXNpdGVkOgogICAgIGNhc2UgQ1NTU2VsZWN0b3I6OlBzZXVk
b0NsYXNzRHJhZzoKICAgICBjYXNlIENTU1NlbGVjdG9yOjpQc2V1ZG9DbGFzc0Z1bGxQYWdlTWVk
aWE6Ci0gICAgY2FzZSBDU1NTZWxlY3Rvcjo6UHNldWRvQ2xhc3NTY29wZToKICAgICAgICAgcmV0
dXJuIEZ1bmN0aW9uVHlwZTo6Q2Fubm90Q29tcGlsZTsKIAogICAgIC8vIE9wdGltaXplZCBwc2V1
ZG8gc2VsZWN0b3JzLgpAQCAtNTE5LDYgKzUyMCwxNCBAQCBzdGF0aWMgaW5saW5lIEZ1bmN0aW9u
VHlwZSBhZGRQc2V1ZG9DbGFzc1R5cGUoY29uc3QgQ1NTU2VsZWN0b3ImIHNlbGVjdG9yLCBTZWxl
YwogICAgICAgICBmcmFnbWVudC5wc2V1ZG9DbGFzc2VzLmFkZCh0eXBlKTsKICAgICAgICAgcmV0
dXJuIEZ1bmN0aW9uVHlwZTo6U2ltcGxlU2VsZWN0b3JDaGVja2VyOwogCisgICAgY2FzZSBDU1NT
ZWxlY3Rvcjo6UHNldWRvQ2xhc3NTY29wZToKKyAgICAgICAgaWYgKHNlbGVjdG9yQ29udGV4dCAh
PSBTZWxlY3RvckNvbnRleHQ6OlF1ZXJ5U2VsZWN0b3IpIHsKKyAgICAgICAgICAgIGZyYWdtZW50
LnBzZXVkb0NsYXNzZXMuYWRkKENTU1NlbGVjdG9yOjpQc2V1ZG9DbGFzc1Jvb3QpOworICAgICAg
ICAgICAgcmV0dXJuIEZ1bmN0aW9uVHlwZTo6U2ltcGxlU2VsZWN0b3JDaGVja2VyOworICAgICAg
ICB9CisgICAgICAgIGZyYWdtZW50LnBzZXVkb0NsYXNzZXMuYWRkKENTU1NlbGVjdG9yOjpQc2V1
ZG9DbGFzc1Njb3BlKTsKKyAgICAgICAgcmV0dXJuIEZ1bmN0aW9uVHlwZTo6U2VsZWN0b3JDaGVj
a2VyV2l0aENoZWNraW5nQ29udGV4dDsKKwogICAgIGNhc2UgQ1NTU2VsZWN0b3I6OlBzZXVkb0Ns
YXNzQWN0aXZlOgogICAgIGNhc2UgQ1NTU2VsZWN0b3I6OlBzZXVkb0NsYXNzRmlyc3RDaGlsZDoK
ICAgICBjYXNlIENTU1NlbGVjdG9yOjpQc2V1ZG9DbGFzc0hvdmVyOgpAQCAtNjEyLDYgKzYyMSw3
IEBAIHN0YXRpYyBpbmxpbmUgRnVuY3Rpb25UeXBlIGFkZFBzZXVkb0NsYXNzVHlwZShjb25zdCBD
U1NTZWxlY3RvciYgc2VsZWN0b3IsIFNlbGVjCiAKICAgICAgICAgICAgIHJldHVybiBmdW5jdGlv
blR5cGU7CiAgICAgICAgIH0KKwogICAgIGNhc2UgQ1NTU2VsZWN0b3I6OlBzZXVkb0NsYXNzTGFu
ZzoKICAgICAgICAgewogICAgICAgICAgICAgY29uc3QgQXRvbWljU3RyaW5nJiBhcmd1bWVudCA9
IHNlbGVjdG9yLmFyZ3VtZW50KCk7CkBAIC02MzEsNyArNjQxLDcgQEAgc3RhdGljIGlubGluZSBG
dW5jdGlvblR5cGUgYWRkUHNldWRvQ2xhc3NUeXBlKGNvbnN0IENTU1NlbGVjdG9yJiBzZWxlY3Rv
ciwgU2VsZWMKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIHJldHVybiBGdW5jdGlvblR5cGU6
OlNpbXBsZVNlbGVjdG9yQ2hlY2tlcjsKICAgICAgICAgfQotICAgICAgICAgICAgCisKICAgICBj
YXNlIENTU1NlbGVjdG9yOjpQc2V1ZG9DbGFzc1Vua25vd246CiAgICAgICAgIEFTU0VSVF9OT1Rf
UkVBQ0hFRCgpOwogICAgICAgICByZXR1cm4gRnVuY3Rpb25UeXBlOjpDYW5ub3RNYXRjaEFueXRo
aW5nOwpAQCAtMTMzMiw4ICsxMzQyLDggQEAgdm9pZCBTZWxlY3RvckNvZGVHZW5lcmF0b3I6Omdl
bmVyYXRlU2VsZWN0b3JDaGVja2VyKCkKIAogICAgIEFzc2VtYmxlcjo6SnVtcExpc3QgZmFpbHVy
ZU9uRnVuY3Rpb25FbnRyeTsKICAgICAvLyBUZXN0IHNlbGVjdG9yJ3MgcHNldWRvIGVsZW1lbnQg
ZXF1YWxzIHRvIHJlcXVlc3RlZCBQc2V1ZG9JZC4KLSAgICBpZiAobV9mdW5jdGlvblR5cGUgPT0g
RnVuY3Rpb25UeXBlOjpTZWxlY3RvckNoZWNrZXJXaXRoQ2hlY2tpbmdDb250ZXh0KSB7Ci0gICAg
ICAgIEFTU0VSVF9XSVRIX01FU1NBR0Uoc2hvdWxkVXNlUmVuZGVyU3R5bGVGcm9tQ2hlY2tpbmdD
b250ZXh0KG1fc2VsZWN0b3JGcmFnbWVudHMuZmlyc3QoKSksICJNYXRjaGluZyBwc2V1ZG8gZWxl
bWVudHMgb25seSBtYWtlIHNlbnNlIGZvciB0aGUgcmlnaHRtb3N0IGZyYWdtZW50LiIpOworICAg
IGlmIChtX3NlbGVjdG9yQ29udGV4dCAhPSBTZWxlY3RvckNvbnRleHQ6OlF1ZXJ5U2VsZWN0b3Ig
JiYgbV9mdW5jdGlvblR5cGUgPT0gRnVuY3Rpb25UeXBlOjpTZWxlY3RvckNoZWNrZXJXaXRoQ2hl
Y2tpbmdDb250ZXh0KSB7CisgICAgICAgIEFTU0VSVF9XSVRIX01FU1NBR0Uoc2hvdWxkVXNlUmVu
ZGVyU3R5bGVGcm9tQ2hlY2tpbmdDb250ZXh0KG1fc2VsZWN0b3JDb250ZXh0LCBtX3NlbGVjdG9y
RnJhZ21lbnRzLmZpcnN0KCkpLCAiTWF0Y2hpbmcgcHNldWRvIGVsZW1lbnRzIG9ubHkgbWFrZSBz
ZW5zZSBmb3IgdGhlIHJpZ2h0bW9zdCBmcmFnbWVudC4iKTsKICAgICAgICAgZ2VuZXJhdGVSZXF1
ZXN0ZWRQc2V1ZG9FbGVtZW50RXF1YWxzVG9TZWxlY3RvclBzZXVkb0VsZW1lbnQoZmFpbHVyZU9u
RnVuY3Rpb25FbnRyeSwgbV9zZWxlY3RvckZyYWdtZW50cy5maXJzdCgpLCBjaGVja2luZ0NvbnRl
eHRSZWdpc3Rlcik7CiAgICAgfQogCkBAIC0xMzg1LDcgKzEzOTUsNyBAQCB2b2lkIFNlbGVjdG9y
Q29kZUdlbmVyYXRvcjo6Z2VuZXJhdGVTZWxlY3RvckNoZWNrZXIoKQogICAgICAgICBnZW5lcmF0
ZUJhY2t0cmFja2luZ1RhaWxzSWZOZWVkZWQoZmFpbHVyZUNhc2VzLCBmcmFnbWVudCk7CiAgICAg
fQogCi0gICAgaWYgKG1fZnVuY3Rpb25UeXBlID09IEZ1bmN0aW9uVHlwZTo6U2VsZWN0b3JDaGVj
a2VyV2l0aENoZWNraW5nQ29udGV4dCkgeworICAgIGlmIChtX3NlbGVjdG9yQ29udGV4dCAhPSBT
ZWxlY3RvckNvbnRleHQ6OlF1ZXJ5U2VsZWN0b3IgJiYgbV9mdW5jdGlvblR5cGUgPT0gRnVuY3Rp
b25UeXBlOjpTZWxlY3RvckNoZWNrZXJXaXRoQ2hlY2tpbmdDb250ZXh0KSB7CiAgICAgICAgIEFT
U0VSVCghbV9zZWxlY3RvckZyYWdtZW50cy5pc0VtcHR5KCkpOwogICAgICAgICBnZW5lcmF0ZU1h
cmtQc2V1ZG9TdHlsZUZvclBzZXVkb0VsZW1lbnQoZmFpbHVyZUNhc2VzLCBtX3NlbGVjdG9yRnJh
Z21lbnRzLmZpcnN0KCkpOwogICAgIH0KQEAgLTE1NzksNiArMTU4OSw4IEBAIHZvaWQgU2VsZWN0
b3JDb2RlR2VuZXJhdG9yOjpnZW5lcmF0ZUluZGlyZWN0QWRqYWNlbnRUcmVlV2Fsa2VyKEFzc2Vt
Ymxlcjo6SnVtcExpCiAKIHZvaWQgU2VsZWN0b3JDb2RlR2VuZXJhdG9yOjphZGRGbGFnc1RvRWxl
bWVudFN0eWxlRnJvbUNvbnRleHQoQXNzZW1ibGVyOjpSZWdpc3RlcklEIGNoZWNraW5nQ29udGV4
dCwgaW50NjRfdCBuZXdGbGFnKQogeworICAgIEFTU0VSVChtX3NlbGVjdG9yQ29udGV4dCAhPSBT
ZWxlY3RvckNvbnRleHQ6OlF1ZXJ5U2VsZWN0b3IpOworCiAgICAgTG9jYWxSZWdpc3RlciBjaGls
ZFN0eWxlKG1fcmVnaXN0ZXJBbGxvY2F0b3IpOwogICAgIG1fYXNzZW1ibGVyLmxvYWRQdHIoQXNz
ZW1ibGVyOjpBZGRyZXNzKGNoZWNraW5nQ29udGV4dCwgT0JKRUNUX09GRlNFVE9GKENoZWNraW5n
Q29udGV4dCwgZWxlbWVudFN0eWxlKSksIGNoaWxkU3R5bGUpOwogCkBAIC0xNjI2LDkgKzE2Mzgs
OCBAQCB2b2lkIFNlbGVjdG9yQ29kZUdlbmVyYXRvcjo6YWRkRmxhZ3NUb0VsZW1lbnRTdHlsZUZy
b21Db250ZXh0KEFzc2VtYmxlcjo6UmVnaXN0ZQogCiB2b2lkIFNlbGVjdG9yQ29kZUdlbmVyYXRv
cjo6bG9hZENoZWNraW5nQ29udGV4dChBc3NlbWJsZXI6OlJlZ2lzdGVySUQgY2hlY2tpbmdDb250
ZXh0KQogewotICAgIFJFTEVBU0VfQVNTRVJUKG1fc2VsZWN0b3JDb250ZXh0ID09IFNlbGVjdG9y
Q29udGV4dDo6UnVsZUNvbGxlY3Rvcik7Ci0KICAgICAvLyBHZXQgdGhlIGNoZWNraW5nIGNvbnRl
eHQuCisgICAgQVNTRVJUKG1fZnVuY3Rpb25UeXBlID09IEZ1bmN0aW9uVHlwZTo6U2VsZWN0b3JD
aGVja2VyV2l0aENoZWNraW5nQ29udGV4dCk7CiAgICAgdW5zaWduZWQgb2Zmc2V0VG9DaGVja2lu
Z0NvbnRleHQgPSBtX3N0YWNrQWxsb2NhdG9yLm9mZnNldFRvU3RhY2tSZWZlcmVuY2UobV9jaGVj
a2luZ0NvbnRleHRTdGFja1JlZmVyZW5jZSk7CiAgICAgbV9hc3NlbWJsZXIubG9hZFB0cihBc3Nl
bWJsZXI6OkFkZHJlc3MoQXNzZW1ibGVyOjpzdGFja1BvaW50ZXJSZWdpc3Rlciwgb2Zmc2V0VG9D
aGVja2luZ0NvbnRleHQpLCBjaGVja2luZ0NvbnRleHQpOwogfQpAQCAtMTgxMiw2ICsxODIzLDgg
QEAgdm9pZCBTZWxlY3RvckNvZGVHZW5lcmF0b3I6Om1hcmtQYXJlbnRFbGVtZW50SWZSZXNvbHZp
bmdTdHlsZShpbnQzMl90IG5vZGVGbGFnKQogICAgIGlmIChtX3NlbGVjdG9yQ29udGV4dCA9PSBT
ZWxlY3RvckNvbnRleHQ6OlF1ZXJ5U2VsZWN0b3IpCiAgICAgICAgIHJldHVybjsKIAorICAgIEFT
U0VSVChtX3NlbGVjdG9yQ29udGV4dCAhPSBTZWxlY3RvckNvbnRleHQ6OlF1ZXJ5U2VsZWN0b3Ip
OworCiAgICAgQXNzZW1ibGVyOjpKdW1wTGlzdCBza2lwTWFya2luZzsKICAgICB7CiAgICAgICAg
IExvY2FsUmVnaXN0ZXIgY2hlY2tpbmdDb250ZXh0KG1fcmVnaXN0ZXJBbGxvY2F0b3IpOwpAQCAt
MTgzMSw2ICsxODQ0LDggQEAgdm9pZCBTZWxlY3RvckNvZGVHZW5lcmF0b3I6Om1hcmtQYXJlbnRF
bGVtZW50SWZSZXNvbHZpbmdTdHlsZShKU0M6OkZ1bmN0aW9uUHRyIG0KICAgICBpZiAobV9zZWxl
Y3RvckNvbnRleHQgPT0gU2VsZWN0b3JDb250ZXh0OjpRdWVyeVNlbGVjdG9yKQogICAgICAgICBy
ZXR1cm47CiAKKyAgICBBU1NFUlQobV9zZWxlY3RvckNvbnRleHQgIT0gU2VsZWN0b3JDb250ZXh0
OjpRdWVyeVNlbGVjdG9yKTsKKwogICAgIC8vICAgICBpZiAoY2hlY2tpbmdDb250ZXh0LnJlc29s
dmluZ01vZGUgPT0gUmVzb2x2aW5nU3R5bGUpIHsKICAgICAvLyAgICAgICAgIEVsZW1lbnQqIHBh
cmVudCA9IGVsZW1lbnQtPnBhcmVudE5vZGUoKTsKICAgICAvLyAgICAgICAgIG1hcmtpbmdGdW5j
dGlvbihwYXJlbnQpOwpAQCAtMTkzNiw2ICsxOTUxLDkgQEAgdm9pZCBTZWxlY3RvckNvZGVHZW5l
cmF0b3I6OmdlbmVyYXRlRWxlbWVudE1hdGNoaW5nKEFzc2VtYmxlcjo6SnVtcExpc3QmIG1hdGNo
aW4KICAgICBpZiAoZnJhZ21lbnQucHNldWRvQ2xhc3Nlcy5jb250YWlucyhDU1NTZWxlY3Rvcjo6
UHNldWRvQ2xhc3NSb290KSkKICAgICAgICAgZ2VuZXJhdGVFbGVtZW50SXNSb290KG1hdGNoaW5n
UG9zdFRhZ05hbWVGYWlsdXJlQ2FzZXMpOwogCisgICAgaWYgKGZyYWdtZW50LnBzZXVkb0NsYXNz
ZXMuY29udGFpbnMoQ1NTU2VsZWN0b3I6OlBzZXVkb0NsYXNzU2NvcGUpKQorICAgICAgICBnZW5l
cmF0ZUVsZW1lbnRJc1Njb3BlUm9vdChtYXRjaGluZ1Bvc3RUYWdOYW1lRmFpbHVyZUNhc2VzKTsK
KwogICAgIGlmIChmcmFnbWVudC5wc2V1ZG9DbGFzc2VzLmNvbnRhaW5zKENTU1NlbGVjdG9yOjpQ
c2V1ZG9DbGFzc1RhcmdldCkpCiAgICAgICAgIGdlbmVyYXRlRWxlbWVudElzVGFyZ2V0KG1hdGNo
aW5nUG9zdFRhZ05hbWVGYWlsdXJlQ2FzZXMpOwogCkBAIC0yNDIwLDI3ICsyNDM4LDMwIEBAIHZv
aWQgU2VsZWN0b3JDb2RlR2VuZXJhdG9yOjpnZW5lcmF0ZUVsZW1lbnRJc0FjdGl2ZShBc3NlbWJs
ZXI6Okp1bXBMaXN0JiBmYWlsdXJlCiAgICAgICAgIGZ1bmN0aW9uQ2FsbC5zZXRGdW5jdGlvbkFk
ZHJlc3MoZWxlbWVudElzQWN0aXZlKTsKICAgICAgICAgZnVuY3Rpb25DYWxsLnNldE9uZUFyZ3Vt
ZW50KGVsZW1lbnRBZGRyZXNzUmVnaXN0ZXIpOwogICAgICAgICBmYWlsdXJlQ2FzZXMuYXBwZW5k
KGZ1bmN0aW9uQ2FsbC5jYWxsQW5kQnJhbmNoT25Cb29sZWFuUmV0dXJuVmFsdWUoQXNzZW1ibGVy
OjpaZXJvKSk7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgaWYgKHNob3VsZFVzZVJlbmRlclN0eWxl
RnJvbUNoZWNraW5nQ29udGV4dChmcmFnbWVudCkpIHsKLSAgICAgICAgICAgIExvY2FsUmVnaXN0
ZXIgY2hlY2tpbmdDb250ZXh0KG1fcmVnaXN0ZXJBbGxvY2F0b3IpOwotICAgICAgICAgICAgQXNz
ZW1ibGVyOjpKdW1wIG5vdFJlc29sdmluZ1N0eWxlID0ganVtcElmTm90UmVzb2x2aW5nU3R5bGUo
Y2hlY2tpbmdDb250ZXh0KTsKLSAgICAgICAgICAgIGFkZEZsYWdzVG9FbGVtZW50U3R5bGVGcm9t
Q29udGV4dChjaGVja2luZ0NvbnRleHQsIFJlbmRlclN0eWxlOjpOb25Jbmhlcml0ZWRGbGFnczo6
ZmxhZ0lzYWZmZWN0ZWRCeUFjdGl2ZSgpKTsKLSAgICAgICAgICAgIG5vdFJlc29sdmluZ1N0eWxl
LmxpbmsoJm1fYXNzZW1ibGVyKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KIAotICAgICAgICAg
ICAgRnVuY3Rpb25DYWxsIGZ1bmN0aW9uQ2FsbChtX2Fzc2VtYmxlciwgbV9yZWdpc3RlckFsbG9j
YXRvciwgbV9zdGFja0FsbG9jYXRvciwgbV9mdW5jdGlvbkNhbGxzKTsKLSAgICAgICAgICAgIGZ1
bmN0aW9uQ2FsbC5zZXRGdW5jdGlvbkFkZHJlc3MoZWxlbWVudElzQWN0aXZlKTsKLSAgICAgICAg
ICAgIGZ1bmN0aW9uQ2FsbC5zZXRPbmVBcmd1bWVudChlbGVtZW50QWRkcmVzc1JlZ2lzdGVyKTsK
LSAgICAgICAgICAgIGZhaWx1cmVDYXNlcy5hcHBlbmQoZnVuY3Rpb25DYWxsLmNhbGxBbmRCcmFu
Y2hPbkJvb2xlYW5SZXR1cm5WYWx1ZShBc3NlbWJsZXI6Olplcm8pKTsKLSAgICAgICAgfSBlbHNl
IHsKLSAgICAgICAgICAgIEFzc2VtYmxlcjo6UmVnaXN0ZXJJRCBjaGVja2luZ0NvbnRleHQgPSBt
X3JlZ2lzdGVyQWxsb2NhdG9yLmFsbG9jYXRlUmVnaXN0ZXJXaXRoUHJlZmVyZW5jZShKU0M6OkdQ
UkluZm86OmFyZ3VtZW50R1BSMSk7Ci0gICAgICAgICAgICBsb2FkQ2hlY2tpbmdDb250ZXh0KGNo
ZWNraW5nQ29udGV4dCk7Ci0gICAgICAgICAgICBtX3JlZ2lzdGVyQWxsb2NhdG9yLmRlYWxsb2Nh
dGVSZWdpc3RlcihjaGVja2luZ0NvbnRleHQpOworICAgIEFTU0VSVChtX3NlbGVjdG9yQ29udGV4
dCAhPSBTZWxlY3RvckNvbnRleHQ6OlF1ZXJ5U2VsZWN0b3IpOwogCi0gICAgICAgICAgICBGdW5j
dGlvbkNhbGwgZnVuY3Rpb25DYWxsKG1fYXNzZW1ibGVyLCBtX3JlZ2lzdGVyQWxsb2NhdG9yLCBt
X3N0YWNrQWxsb2NhdG9yLCBtX2Z1bmN0aW9uQ2FsbHMpOwotICAgICAgICAgICAgZnVuY3Rpb25D
YWxsLnNldEZ1bmN0aW9uQWRkcmVzcyhlbGVtZW50SXNBY3RpdmVGb3JTdHlsZVJlc29sdXRpb24p
OwotICAgICAgICAgICAgZnVuY3Rpb25DYWxsLnNldFR3b0FyZ3VtZW50cyhlbGVtZW50QWRkcmVz
c1JlZ2lzdGVyLCBjaGVja2luZ0NvbnRleHQpOwotICAgICAgICAgICAgZmFpbHVyZUNhc2VzLmFw
cGVuZChmdW5jdGlvbkNhbGwuY2FsbEFuZEJyYW5jaE9uQm9vbGVhblJldHVyblZhbHVlKEFzc2Vt
Ymxlcjo6WmVybykpOwotICAgICAgICB9CisgICAgaWYgKHNob3VsZFVzZVJlbmRlclN0eWxlRnJv
bUNoZWNraW5nQ29udGV4dChtX3NlbGVjdG9yQ29udGV4dCwgZnJhZ21lbnQpKSB7CisgICAgICAg
IExvY2FsUmVnaXN0ZXIgY2hlY2tpbmdDb250ZXh0KG1fcmVnaXN0ZXJBbGxvY2F0b3IpOworICAg
ICAgICBBc3NlbWJsZXI6Okp1bXAgbm90UmVzb2x2aW5nU3R5bGUgPSBqdW1wSWZOb3RSZXNvbHZp
bmdTdHlsZShjaGVja2luZ0NvbnRleHQpOworICAgICAgICBhZGRGbGFnc1RvRWxlbWVudFN0eWxl
RnJvbUNvbnRleHQoY2hlY2tpbmdDb250ZXh0LCBSZW5kZXJTdHlsZTo6Tm9uSW5oZXJpdGVkRmxh
Z3M6OmZsYWdJc2FmZmVjdGVkQnlBY3RpdmUoKSk7CisgICAgICAgIG5vdFJlc29sdmluZ1N0eWxl
LmxpbmsoJm1fYXNzZW1ibGVyKTsKKworICAgICAgICBGdW5jdGlvbkNhbGwgZnVuY3Rpb25DYWxs
KG1fYXNzZW1ibGVyLCBtX3JlZ2lzdGVyQWxsb2NhdG9yLCBtX3N0YWNrQWxsb2NhdG9yLCBtX2Z1
bmN0aW9uQ2FsbHMpOworICAgICAgICBmdW5jdGlvbkNhbGwuc2V0RnVuY3Rpb25BZGRyZXNzKGVs
ZW1lbnRJc0FjdGl2ZSk7CisgICAgICAgIGZ1bmN0aW9uQ2FsbC5zZXRPbmVBcmd1bWVudChlbGVt
ZW50QWRkcmVzc1JlZ2lzdGVyKTsKKyAgICAgICAgZmFpbHVyZUNhc2VzLmFwcGVuZChmdW5jdGlv
bkNhbGwuY2FsbEFuZEJyYW5jaE9uQm9vbGVhblJldHVyblZhbHVlKEFzc2VtYmxlcjo6WmVybykp
OworICAgIH0gZWxzZSB7CisgICAgICAgIEFzc2VtYmxlcjo6UmVnaXN0ZXJJRCBjaGVja2luZ0Nv
bnRleHQgPSBtX3JlZ2lzdGVyQWxsb2NhdG9yLmFsbG9jYXRlUmVnaXN0ZXJXaXRoUHJlZmVyZW5j
ZShKU0M6OkdQUkluZm86OmFyZ3VtZW50R1BSMSk7CisgICAgICAgIGxvYWRDaGVja2luZ0NvbnRl
eHQoY2hlY2tpbmdDb250ZXh0KTsKKyAgICAgICAgbV9yZWdpc3RlckFsbG9jYXRvci5kZWFsbG9j
YXRlUmVnaXN0ZXIoY2hlY2tpbmdDb250ZXh0KTsKKworICAgICAgICBGdW5jdGlvbkNhbGwgZnVu
Y3Rpb25DYWxsKG1fYXNzZW1ibGVyLCBtX3JlZ2lzdGVyQWxsb2NhdG9yLCBtX3N0YWNrQWxsb2Nh
dG9yLCBtX2Z1bmN0aW9uQ2FsbHMpOworICAgICAgICBmdW5jdGlvbkNhbGwuc2V0RnVuY3Rpb25B
ZGRyZXNzKGVsZW1lbnRJc0FjdGl2ZUZvclN0eWxlUmVzb2x1dGlvbik7CisgICAgICAgIGZ1bmN0
aW9uQ2FsbC5zZXRUd29Bcmd1bWVudHMoZWxlbWVudEFkZHJlc3NSZWdpc3RlciwgY2hlY2tpbmdD
b250ZXh0KTsKKyAgICAgICAgZmFpbHVyZUNhc2VzLmFwcGVuZChmdW5jdGlvbkNhbGwuY2FsbEFu
ZEJyYW5jaE9uQm9vbGVhblJldHVyblZhbHVlKEFzc2VtYmxlcjo6WmVybykpOwogICAgIH0KIH0K
IApAQCAtMjQ1NSw2ICsyNDc2LDggQEAgdm9pZCBTZWxlY3RvckNvZGVHZW5lcmF0b3I6OmdlbmVy
YXRlRWxlbWVudElzRmlyc3RDaGlsZChBc3NlbWJsZXI6Okp1bXBMaXN0JiBmYWkKICAgICAgICAg
cmV0dXJuOwogICAgIH0KIAorICAgIEFTU0VSVChtX3NlbGVjdG9yQ29udGV4dCAhPSBTZWxlY3Rv
ckNvbnRleHQ6OlF1ZXJ5U2VsZWN0b3IpOworCiAgICAgQXNzZW1ibGVyOjpSZWdpc3RlcklEIHBh
cmVudEVsZW1lbnQgPSBtX3JlZ2lzdGVyQWxsb2NhdG9yLmFsbG9jYXRlUmVnaXN0ZXIoKTsKICAg
ICBnZW5lcmF0ZVdhbGtUb1BhcmVudEVsZW1lbnQoZmFpbHVyZUNhc2VzLCBwYXJlbnRFbGVtZW50
KTsKIApAQCAtMjQ4MSw3ICsyNTA0LDcgQEAgdm9pZCBTZWxlY3RvckNvZGVHZW5lcmF0b3I6Omdl
bmVyYXRlRWxlbWVudElzRmlyc3RDaGlsZChBc3NlbWJsZXI6Okp1bXBMaXN0JiBmYWkKICAgICAv
LyBPdGhlcndpc2Ugd2UgbmVlZCB0byBhcHBseSBzZXRGaXJzdENoaWxkU3RhdGUoKSBvbiB0aGUg
UmVuZGVyU3R5bGUuCiAgICAgZmFpbHVyZUNhc2VzLmFwcGVuZChtX2Fzc2VtYmxlci5icmFuY2hU
ZXN0MzIoQXNzZW1ibGVyOjpOb25aZXJvLCBpc0ZpcnN0Q2hpbGRSZWdpc3RlcikpOwogCi0gICAg
aWYgKHNob3VsZFVzZVJlbmRlclN0eWxlRnJvbUNoZWNraW5nQ29udGV4dChmcmFnbWVudCkpCisg
ICAgaWYgKHNob3VsZFVzZVJlbmRlclN0eWxlRnJvbUNoZWNraW5nQ29udGV4dChtX3NlbGVjdG9y
Q29udGV4dCwgZnJhZ21lbnQpKQogICAgICAgICBhZGRGbGFnc1RvRWxlbWVudFN0eWxlRnJvbUNv
bnRleHQoY2hlY2tpbmdDb250ZXh0LCBSZW5kZXJTdHlsZTo6Tm9uSW5oZXJpdGVkRmxhZ3M6OnNl
dEZpcnN0Q2hpbGRTdGF0ZUZsYWdzKCkpOwogICAgIGVsc2UgewogICAgICAgICBGdW5jdGlvbkNh
bGwgZnVuY3Rpb25DYWxsKG1fYXNzZW1ibGVyLCBtX3JlZ2lzdGVyQWxsb2NhdG9yLCBtX3N0YWNr
QWxsb2NhdG9yLCBtX2Z1bmN0aW9uQ2FsbHMpOwpAQCAtMjUxNSwyNyArMjUzOCwzMCBAQCB2b2lk
IFNlbGVjdG9yQ29kZUdlbmVyYXRvcjo6Z2VuZXJhdGVFbGVtZW50SXNIb3ZlcmVkKEFzc2VtYmxl
cjo6SnVtcExpc3QmIGZhaWx1cgogICAgICAgICBmdW5jdGlvbkNhbGwuc2V0RnVuY3Rpb25BZGRy
ZXNzKGVsZW1lbnRJc0hvdmVyZWQpOwogICAgICAgICBmdW5jdGlvbkNhbGwuc2V0T25lQXJndW1l
bnQoZWxlbWVudEFkZHJlc3NSZWdpc3Rlcik7CiAgICAgICAgIGZhaWx1cmVDYXNlcy5hcHBlbmQo
ZnVuY3Rpb25DYWxsLmNhbGxBbmRCcmFuY2hPbkJvb2xlYW5SZXR1cm5WYWx1ZShBc3NlbWJsZXI6
Olplcm8pKTsKLSAgICB9IGVsc2UgewotICAgICAgICBpZiAoc2hvdWxkVXNlUmVuZGVyU3R5bGVG
cm9tQ2hlY2tpbmdDb250ZXh0KGZyYWdtZW50KSkgewotICAgICAgICAgICAgTG9jYWxSZWdpc3Rl
cldpdGhQcmVmZXJlbmNlIGNoZWNraW5nQ29udGV4dChtX3JlZ2lzdGVyQWxsb2NhdG9yLCBKU0M6
OkdQUkluZm86OmFyZ3VtZW50R1BSMSk7Ci0gICAgICAgICAgICBBc3NlbWJsZXI6Okp1bXAgbm90
UmVzb2x2aW5nU3R5bGUgPSBqdW1wSWZOb3RSZXNvbHZpbmdTdHlsZShjaGVja2luZ0NvbnRleHQp
OwotICAgICAgICAgICAgYWRkRmxhZ3NUb0VsZW1lbnRTdHlsZUZyb21Db250ZXh0KGNoZWNraW5n
Q29udGV4dCwgUmVuZGVyU3R5bGU6Ok5vbkluaGVyaXRlZEZsYWdzOjpmbGFnSXNhZmZlY3RlZEJ5
SG92ZXIoKSk7Ci0gICAgICAgICAgICBub3RSZXNvbHZpbmdTdHlsZS5saW5rKCZtX2Fzc2VtYmxl
cik7CisgICAgICAgIHJldHVybjsKKyAgICB9CiAKLSAgICAgICAgICAgIEZ1bmN0aW9uQ2FsbCBm
dW5jdGlvbkNhbGwobV9hc3NlbWJsZXIsIG1fcmVnaXN0ZXJBbGxvY2F0b3IsIG1fc3RhY2tBbGxv
Y2F0b3IsIG1fZnVuY3Rpb25DYWxscyk7Ci0gICAgICAgICAgICBmdW5jdGlvbkNhbGwuc2V0RnVu
Y3Rpb25BZGRyZXNzKGVsZW1lbnRJc0hvdmVyZWQpOwotICAgICAgICAgICAgZnVuY3Rpb25DYWxs
LnNldE9uZUFyZ3VtZW50KGVsZW1lbnRBZGRyZXNzUmVnaXN0ZXIpOwotICAgICAgICAgICAgZmFp
bHVyZUNhc2VzLmFwcGVuZChmdW5jdGlvbkNhbGwuY2FsbEFuZEJyYW5jaE9uQm9vbGVhblJldHVy
blZhbHVlKEFzc2VtYmxlcjo6WmVybykpOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAg
QXNzZW1ibGVyOjpSZWdpc3RlcklEIGNoZWNraW5nQ29udGV4dCA9IG1fcmVnaXN0ZXJBbGxvY2F0
b3IuYWxsb2NhdGVSZWdpc3RlcldpdGhQcmVmZXJlbmNlKEpTQzo6R1BSSW5mbzo6YXJndW1lbnRH
UFIxKTsKLSAgICAgICAgICAgIGxvYWRDaGVja2luZ0NvbnRleHQoY2hlY2tpbmdDb250ZXh0KTsK
LSAgICAgICAgICAgIG1fcmVnaXN0ZXJBbGxvY2F0b3IuZGVhbGxvY2F0ZVJlZ2lzdGVyKGNoZWNr
aW5nQ29udGV4dCk7CisgICAgQVNTRVJUKG1fc2VsZWN0b3JDb250ZXh0ICE9IFNlbGVjdG9yQ29u
dGV4dDo6UXVlcnlTZWxlY3Rvcik7CiAKLSAgICAgICAgICAgIEZ1bmN0aW9uQ2FsbCBmdW5jdGlv
bkNhbGwobV9hc3NlbWJsZXIsIG1fcmVnaXN0ZXJBbGxvY2F0b3IsIG1fc3RhY2tBbGxvY2F0b3Is
IG1fZnVuY3Rpb25DYWxscyk7Ci0gICAgICAgICAgICBmdW5jdGlvbkNhbGwuc2V0RnVuY3Rpb25B
ZGRyZXNzKGVsZW1lbnRJc0hvdmVyZWRGb3JTdHlsZVJlc29sdXRpb24pOwotICAgICAgICAgICAg
ZnVuY3Rpb25DYWxsLnNldFR3b0FyZ3VtZW50cyhlbGVtZW50QWRkcmVzc1JlZ2lzdGVyLCBjaGVj
a2luZ0NvbnRleHQpOwotICAgICAgICAgICAgZmFpbHVyZUNhc2VzLmFwcGVuZChmdW5jdGlvbkNh
bGwuY2FsbEFuZEJyYW5jaE9uQm9vbGVhblJldHVyblZhbHVlKEFzc2VtYmxlcjo6WmVybykpOwot
ICAgICAgICB9CisgICAgaWYgKHNob3VsZFVzZVJlbmRlclN0eWxlRnJvbUNoZWNraW5nQ29udGV4
dChtX3NlbGVjdG9yQ29udGV4dCwgZnJhZ21lbnQpKSB7CisgICAgICAgIExvY2FsUmVnaXN0ZXJX
aXRoUHJlZmVyZW5jZSBjaGVja2luZ0NvbnRleHQobV9yZWdpc3RlckFsbG9jYXRvciwgSlNDOjpH
UFJJbmZvOjphcmd1bWVudEdQUjEpOworICAgICAgICBBc3NlbWJsZXI6Okp1bXAgbm90UmVzb2x2
aW5nU3R5bGUgPSBqdW1wSWZOb3RSZXNvbHZpbmdTdHlsZShjaGVja2luZ0NvbnRleHQpOworICAg
ICAgICBhZGRGbGFnc1RvRWxlbWVudFN0eWxlRnJvbUNvbnRleHQoY2hlY2tpbmdDb250ZXh0LCBS
ZW5kZXJTdHlsZTo6Tm9uSW5oZXJpdGVkRmxhZ3M6OmZsYWdJc2FmZmVjdGVkQnlIb3ZlcigpKTsK
KyAgICAgICAgbm90UmVzb2x2aW5nU3R5bGUubGluaygmbV9hc3NlbWJsZXIpOworCisgICAgICAg
IEZ1bmN0aW9uQ2FsbCBmdW5jdGlvbkNhbGwobV9hc3NlbWJsZXIsIG1fcmVnaXN0ZXJBbGxvY2F0
b3IsIG1fc3RhY2tBbGxvY2F0b3IsIG1fZnVuY3Rpb25DYWxscyk7CisgICAgICAgIGZ1bmN0aW9u
Q2FsbC5zZXRGdW5jdGlvbkFkZHJlc3MoZWxlbWVudElzSG92ZXJlZCk7CisgICAgICAgIGZ1bmN0
aW9uQ2FsbC5zZXRPbmVBcmd1bWVudChlbGVtZW50QWRkcmVzc1JlZ2lzdGVyKTsKKyAgICAgICAg
ZmFpbHVyZUNhc2VzLmFwcGVuZChmdW5jdGlvbkNhbGwuY2FsbEFuZEJyYW5jaE9uQm9vbGVhblJl
dHVyblZhbHVlKEFzc2VtYmxlcjo6WmVybykpOworICAgIH0gZWxzZSB7CisgICAgICAgIEFzc2Vt
Ymxlcjo6UmVnaXN0ZXJJRCBjaGVja2luZ0NvbnRleHQgPSBtX3JlZ2lzdGVyQWxsb2NhdG9yLmFs
bG9jYXRlUmVnaXN0ZXJXaXRoUHJlZmVyZW5jZShKU0M6OkdQUkluZm86OmFyZ3VtZW50R1BSMSk7
CisgICAgICAgIGxvYWRDaGVja2luZ0NvbnRleHQoY2hlY2tpbmdDb250ZXh0KTsKKyAgICAgICAg
bV9yZWdpc3RlckFsbG9jYXRvci5kZWFsbG9jYXRlUmVnaXN0ZXIoY2hlY2tpbmdDb250ZXh0KTsK
KworICAgICAgICBGdW5jdGlvbkNhbGwgZnVuY3Rpb25DYWxsKG1fYXNzZW1ibGVyLCBtX3JlZ2lz
dGVyQWxsb2NhdG9yLCBtX3N0YWNrQWxsb2NhdG9yLCBtX2Z1bmN0aW9uQ2FsbHMpOworICAgICAg
ICBmdW5jdGlvbkNhbGwuc2V0RnVuY3Rpb25BZGRyZXNzKGVsZW1lbnRJc0hvdmVyZWRGb3JTdHls
ZVJlc29sdXRpb24pOworICAgICAgICBmdW5jdGlvbkNhbGwuc2V0VHdvQXJndW1lbnRzKGVsZW1l
bnRBZGRyZXNzUmVnaXN0ZXIsIGNoZWNraW5nQ29udGV4dCk7CisgICAgICAgIGZhaWx1cmVDYXNl
cy5hcHBlbmQoZnVuY3Rpb25DYWxsLmNhbGxBbmRCcmFuY2hPbkJvb2xlYW5SZXR1cm5WYWx1ZShB
c3NlbWJsZXI6Olplcm8pKTsKICAgICB9CiB9CiAKQEAgLTI1NzIsNiArMjU5OCw4IEBAIHZvaWQg
U2VsZWN0b3JDb2RlR2VuZXJhdG9yOjpnZW5lcmF0ZUVsZW1lbnRJc0xhc3RDaGlsZChBc3NlbWJs
ZXI6Okp1bXBMaXN0JiBmYWlsCiAgICAgICAgIHJldHVybjsKICAgICB9CiAKKyAgICBBU1NFUlQo
bV9zZWxlY3RvckNvbnRleHQgIT0gU2VsZWN0b3JDb250ZXh0OjpRdWVyeVNlbGVjdG9yKTsKKwog
ICAgIEFzc2VtYmxlcjo6UmVnaXN0ZXJJRCBwYXJlbnRFbGVtZW50ID0gbV9yZWdpc3RlckFsbG9j
YXRvci5hbGxvY2F0ZVJlZ2lzdGVyKCk7CiAgICAgZ2VuZXJhdGVXYWxrVG9QYXJlbnRFbGVtZW50
KGZhaWx1cmVDYXNlcywgcGFyZW50RWxlbWVudCk7CiAKQEAgLTI2MDAsNyArMjYyOCw3IEBAIHZv
aWQgU2VsZWN0b3JDb2RlR2VuZXJhdG9yOjpnZW5lcmF0ZUVsZW1lbnRJc0xhc3RDaGlsZChBc3Nl
bWJsZXI6Okp1bXBMaXN0JiBmYWlsCiAgICAgLy8gT3RoZXJ3aXNlIHdlIG5lZWQgdG8gYXBwbHkg
c2V0TGFzdENoaWxkU3RhdGUoKSBvbiB0aGUgUmVuZGVyU3R5bGUuCiAgICAgZmFpbHVyZUNhc2Vz
LmFwcGVuZChtX2Fzc2VtYmxlci5icmFuY2hUZXN0MzIoQXNzZW1ibGVyOjpOb25aZXJvLCBpc0xh
c3RDaGlsZFJlZ2lzdGVyKSk7CiAKLSAgICBpZiAoc2hvdWxkVXNlUmVuZGVyU3R5bGVGcm9tQ2hl
Y2tpbmdDb250ZXh0KGZyYWdtZW50KSkKKyAgICBpZiAoc2hvdWxkVXNlUmVuZGVyU3R5bGVGcm9t
Q2hlY2tpbmdDb250ZXh0KG1fc2VsZWN0b3JDb250ZXh0LCBmcmFnbWVudCkpCiAgICAgICAgIGFk
ZEZsYWdzVG9FbGVtZW50U3R5bGVGcm9tQ29udGV4dChjaGVja2luZ0NvbnRleHQsIFJlbmRlclN0
eWxlOjpOb25Jbmhlcml0ZWRGbGFnczo6c2V0TGFzdENoaWxkU3RhdGVGbGFncygpKTsKICAgICBl
bHNlIHsKICAgICAgICAgRnVuY3Rpb25DYWxsIGZ1bmN0aW9uQ2FsbChtX2Fzc2VtYmxlciwgbV9y
ZWdpc3RlckFsbG9jYXRvciwgbV9zdGFja0FsbG9jYXRvciwgbV9mdW5jdGlvbkNhbGxzKTsKQEAg
LTI2NDIsNiArMjY3MCw4IEBAIHZvaWQgU2VsZWN0b3JDb2RlR2VuZXJhdG9yOjpnZW5lcmF0ZUVs
ZW1lbnRJc09ubHlDaGlsZChBc3NlbWJsZXI6Okp1bXBMaXN0JiBmYWlsCiAgICAgICAgIHJldHVy
bjsKICAgICB9CiAKKyAgICBBU1NFUlQobV9zZWxlY3RvckNvbnRleHQgIT0gU2VsZWN0b3JDb250
ZXh0OjpRdWVyeVNlbGVjdG9yKTsKKwogICAgIEFzc2VtYmxlcjo6UmVnaXN0ZXJJRCBwYXJlbnRF
bGVtZW50ID0gbV9yZWdpc3RlckFsbG9jYXRvci5hbGxvY2F0ZVJlZ2lzdGVyKCk7CiAgICAgZ2Vu
ZXJhdGVXYWxrVG9QYXJlbnRFbGVtZW50KGZhaWx1cmVDYXNlcywgcGFyZW50RWxlbWVudCk7CiAK
QEAgLTI2NzUsNyArMjcwNSw3IEBAIHZvaWQgU2VsZWN0b3JDb2RlR2VuZXJhdG9yOjpnZW5lcmF0
ZUVsZW1lbnRJc09ubHlDaGlsZChBc3NlbWJsZXI6Okp1bXBMaXN0JiBmYWlsCiAgICAgLy8gT3Ro
ZXJ3aXNlIHdlIG5lZWQgdG8gYXBwbHkgc2V0TGFzdENoaWxkU3RhdGUoKSBvbiB0aGUgUmVuZGVy
U3R5bGUuCiAgICAgZmFpbHVyZUNhc2VzLmFwcGVuZChtX2Fzc2VtYmxlci5icmFuY2hUZXN0MzIo
QXNzZW1ibGVyOjpOb25aZXJvLCBpc09ubHlDaGlsZFJlZ2lzdGVyKSk7CiAKLSAgICBpZiAoc2hv
dWxkVXNlUmVuZGVyU3R5bGVGcm9tQ2hlY2tpbmdDb250ZXh0KGZyYWdtZW50KSkKKyAgICBpZiAo
c2hvdWxkVXNlUmVuZGVyU3R5bGVGcm9tQ2hlY2tpbmdDb250ZXh0KG1fc2VsZWN0b3JDb250ZXh0
LCBmcmFnbWVudCkpCiAgICAgICAgIGFkZEZsYWdzVG9FbGVtZW50U3R5bGVGcm9tQ29udGV4dChj
aGVja2luZ0NvbnRleHQsIFJlbmRlclN0eWxlOjpOb25Jbmhlcml0ZWRGbGFnczo6c2V0Rmlyc3RD
aGlsZFN0YXRlRmxhZ3MoKSB8IFJlbmRlclN0eWxlOjpOb25Jbmhlcml0ZWRGbGFnczo6c2V0TGFz
dENoaWxkU3RhdGVGbGFncygpKTsKICAgICBlbHNlIHsKICAgICAgICAgRnVuY3Rpb25DYWxsIGZ1
bmN0aW9uQ2FsbChtX2Fzc2VtYmxlciwgbV9yZWdpc3RlckFsbG9jYXRvciwgbV9zdGFja0FsbG9j
YXRvciwgbV9mdW5jdGlvbkNhbGxzKTsKQEAgLTI4NDUsNyArMjg3NSw3IEBAIHZvaWQgU2VsZWN0
b3JDb2RlR2VuZXJhdG9yOjpnZW5lcmF0ZUVsZW1lbnRJc050aENoaWxkKEFzc2VtYmxlcjo6SnVt
cExpc3QmIGZhaWx1CiAgICAgICAgIGZ1bmN0aW9uQ2FsbC5zZXRPbmVBcmd1bWVudChwYXJlbnRF
bGVtZW50KTsKICAgICAgICAgZnVuY3Rpb25DYWxsLmNhbGwoKTsKIAotICAgICAgICBpZiAoc2hv
dWxkVXNlUmVuZGVyU3R5bGVGcm9tQ2hlY2tpbmdDb250ZXh0KGZyYWdtZW50KSkgeworICAgICAg
ICBpZiAoc2hvdWxkVXNlUmVuZGVyU3R5bGVGcm9tQ2hlY2tpbmdDb250ZXh0KG1fc2VsZWN0b3JD
b250ZXh0LCBmcmFnbWVudCkpIHsKICAgICAgICAgICAgIGFkZEZsYWdzVG9FbGVtZW50U3R5bGVG
cm9tQ29udGV4dChjaGVja2luZ0NvbnRleHQsIFJlbmRlclN0eWxlOjpOb25Jbmhlcml0ZWRGbGFn
czo6ZmxhZ0lzVW5pcXVlKCkpOwogCiAgICAgICAgICAgICBBc3NlbWJsZXI6OlJlZ2lzdGVySUQg
ZWxlbWVudEFkZHJlc3MgPSBlbGVtZW50QWRkcmVzc1JlZ2lzdGVyOwpAQCAtMjkyMyw3ICsyOTUz
LDEwIEBAIHZvaWQgU2VsZWN0b3JDb2RlR2VuZXJhdG9yOjpnZW5lcmF0ZUVsZW1lbnRNYXRjaGVz
QW55UHNldWRvQ2xhc3MoQXNzZW1ibGVyOjpKdW1wCiAKIHZvaWQgU2VsZWN0b3JDb2RlR2VuZXJh
dG9yOjpnZW5lcmF0ZUVsZW1lbnRIYXNQc2V1ZG9FbGVtZW50KEFzc2VtYmxlcjo6SnVtcExpc3Qm
IGZhaWx1cmVDYXNlcywgY29uc3QgU2VsZWN0b3JGcmFnbWVudCYgZnJhZ21lbnQpCiB7Ci0gICAg
aWYgKCFzaG91bGRVc2VSZW5kZXJTdHlsZUZyb21DaGVja2luZ0NvbnRleHQoZnJhZ21lbnQpKSB7
CisgICAgQVNTRVJUKGZyYWdtZW50LnBzZXVkb0VsZW1lbnRTZWxlY3Rvcik7CisgICAgQVNTRVJU
X1dJVEhfTUVTU0FHRShtX3NlbGVjdG9yQ29udGV4dCAhPSBTZWxlY3RvckNvbnRleHQ6OlF1ZXJ5
U2VsZWN0b3IsICJXaGVuIHRoZSBmcmFnbWVudCBoYXMgcHNldWRvIGVsZW1lbnQsIHRoZSBzZWxl
Y3RvciBiZWNvbXJlcyBDYW5ub3RNYXRjaEFueXRoaW5nIGZvciBRdWVyeVNlbGVjdG9yIGFuZCB0
aGlzIHRlc3QgZnVuY3Rpb24gaXMgbm90IGNhbGxlZC4iKTsKKworICAgIGlmICghc2hvdWxkVXNl
UmVuZGVyU3R5bGVGcm9tQ2hlY2tpbmdDb250ZXh0KG1fc2VsZWN0b3JDb250ZXh0LCBmcmFnbWVu
dCkpIHsKICAgICAgICAgTG9jYWxSZWdpc3RlciBjaGVja2luZ0NvbnRleHQobV9yZWdpc3RlckFs
bG9jYXRvcik7CiAgICAgICAgIGxvYWRDaGVja2luZ0NvbnRleHQoY2hlY2tpbmdDb250ZXh0KTsK
ICAgICAgICAgZmFpbHVyZUNhc2VzLmFwcGVuZChicmFuY2hPblJlc29sdmluZ01vZGVXaXRoQ2hl
Y2tpbmdDb250ZXh0KEFzc2VtYmxlcjo6RXF1YWwsIFNlbGVjdG9yQ2hlY2tlcjo6TW9kZTo6UmVz
b2x2aW5nU3R5bGUsIGNoZWNraW5nQ29udGV4dCkpOwpAQCAtMjkzMiwxMCArMjk2NSwxMiBAQCB2
b2lkIFNlbGVjdG9yQ29kZUdlbmVyYXRvcjo6Z2VuZXJhdGVFbGVtZW50SGFzUHNldWRvRWxlbWVu
dChBc3NlbWJsZXI6Okp1bXBMaXN0JgogCiB2b2lkIFNlbGVjdG9yQ29kZUdlbmVyYXRvcjo6Z2Vu
ZXJhdGVSZXF1ZXN0ZWRQc2V1ZG9FbGVtZW50RXF1YWxzVG9TZWxlY3RvclBzZXVkb0VsZW1lbnQo
QXNzZW1ibGVyOjpKdW1wTGlzdCYgZmFpbHVyZUNhc2VzLCBjb25zdCBTZWxlY3RvckZyYWdtZW50
JiBmcmFnbWVudCwgQXNzZW1ibGVyOjpSZWdpc3RlcklEIGNoZWNraW5nQ29udGV4dCkKIHsKKyAg
ICBBU1NFUlQobV9zZWxlY3RvckNvbnRleHQgIT0gU2VsZWN0b3JDb250ZXh0OjpRdWVyeVNlbGVj
dG9yKTsKKwogICAgIC8vIE1ha2Ugc3VyZSB0aGF0IHRoZSByZXF1ZXN0ZWQgcHNldWRvSWQgZXF1
YWxzIHRvIHRoZSBwc2V1ZG8gZWxlbWVudCBvZiB0aGUgcmlnaHRtb3N0IGZyYWdtZW50LgogICAg
IC8vIElmIHRoZSByaWdodG1vc3QgZnJhZ21lbnQgZG9lc24ndCBoYXZlIGEgcHNldWRvIGVsZW1l
bnQsIHRoZSByZXF1ZXN0ZWQgcHNldWRvSWQgbmVlZCB0byBiZSBOT1BTRVVETyB0byBzdWNjZWVk
IHRoZSBtYXRjaGluZy4KICAgICAvLyBPdGhlcndpc2UsIGlmIHRoZSByZXF1ZXN0ZWQgcHNldWRv
SWQgaXMgbm90IE5PUFNFVURPLCB0aGUgcmVxdWVzdGVkIHBzZXVkb0lkIG5lZWQgdG8gZXF1YWwg
dG8gdGhlIHBzZXVkbyBlbGVtZW50IG9mIHRoZSByaWdodG1vc3QgZnJhZ21lbnQuCi0gICAgaWYg
KHNob3VsZFVzZVJlbmRlclN0eWxlRnJvbUNoZWNraW5nQ29udGV4dChmcmFnbWVudCkpIHsKKyAg
ICBpZiAoc2hvdWxkVXNlUmVuZGVyU3R5bGVGcm9tQ2hlY2tpbmdDb250ZXh0KG1fc2VsZWN0b3JD
b250ZXh0LCBmcmFnbWVudCkpIHsKICAgICAgICAgaWYgKCFmcmFnbWVudC5wc2V1ZG9FbGVtZW50
U2VsZWN0b3IpCiAgICAgICAgICAgICBmYWlsdXJlQ2FzZXMuYXBwZW5kKG1fYXNzZW1ibGVyLmJy
YW5jaDgoQXNzZW1ibGVyOjpOb3RFcXVhbCwgQXNzZW1ibGVyOjpBZGRyZXNzKGNoZWNraW5nQ29u
dGV4dCwgT0JKRUNUX09GRlNFVE9GKENoZWNraW5nQ29udGV4dCwgcHNldWRvSWQpKSwgQXNzZW1i
bGVyOjpUcnVzdGVkSW1tMzIoTk9QU0VVRE8pKSk7CiAgICAgICAgIGVsc2UgewpAQCAtMjk1Myw2
ICsyOTg4LDIzIEBAIHZvaWQgU2VsZWN0b3JDb2RlR2VuZXJhdG9yOjpnZW5lcmF0ZUVsZW1lbnRJ
c1Jvb3QoQXNzZW1ibGVyOjpKdW1wTGlzdCYgZmFpbHVyZUNhCiAgICAgZmFpbHVyZUNhc2VzLmFw
cGVuZChtX2Fzc2VtYmxlci5icmFuY2hQdHIoQXNzZW1ibGVyOjpOb3RFcXVhbCwgQXNzZW1ibGVy
OjpBZGRyZXNzKGRvY3VtZW50LCBEb2N1bWVudDo6ZG9jdW1lbnRFbGVtZW50TWVtb3J5T2Zmc2V0
KCkpLCBlbGVtZW50QWRkcmVzc1JlZ2lzdGVyKSk7CiB9CiAKK3ZvaWQgU2VsZWN0b3JDb2RlR2Vu
ZXJhdG9yOjpnZW5lcmF0ZUVsZW1lbnRJc1Njb3BlUm9vdChBc3NlbWJsZXI6Okp1bXBMaXN0JiBm
YWlsdXJlQ2FzZXMpCit7CisgICAgQVNTRVJUKG1fc2VsZWN0b3JDb250ZXh0ID09IFNlbGVjdG9y
Q29udGV4dDo6UXVlcnlTZWxlY3Rvcik7CisKKyAgICBMb2NhbFJlZ2lzdGVyIHNjb3BlKG1fcmVn
aXN0ZXJBbGxvY2F0b3IpOworICAgIGxvYWRDaGVja2luZ0NvbnRleHQoc2NvcGUpOworICAgIG1f
YXNzZW1ibGVyLmxvYWRQdHIoQXNzZW1ibGVyOjpBZGRyZXNzKHNjb3BlLCBPQkpFQ1RfT0ZGU0VU
T0YoQ2hlY2tpbmdDb250ZXh0LCBzY29wZSkpLCBzY29wZSk7CisKKyAgICBBc3NlbWJsZXI6Okp1
bXAgc2NvcGVJc05vdE51bGwgPSBtX2Fzc2VtYmxlci5icmFuY2hUZXN0UHRyKEFzc2VtYmxlcjo6
Tm9uWmVybywgc2NvcGUpOworCisgICAgZ2V0RG9jdW1lbnQobV9hc3NlbWJsZXIsIGVsZW1lbnRB
ZGRyZXNzUmVnaXN0ZXIsIHNjb3BlKTsKKyAgICBtX2Fzc2VtYmxlci5sb2FkUHRyKEFzc2VtYmxl
cjo6QWRkcmVzcyhzY29wZSwgRG9jdW1lbnQ6OmRvY3VtZW50RWxlbWVudE1lbW9yeU9mZnNldCgp
KSwgc2NvcGUpOworCisgICAgc2NvcGVJc05vdE51bGwubGluaygmbV9hc3NlbWJsZXIpOworICAg
IGZhaWx1cmVDYXNlcy5hcHBlbmQobV9hc3NlbWJsZXIuYnJhbmNoUHRyKEFzc2VtYmxlcjo6Tm90
RXF1YWwsIHNjb3BlLCBlbGVtZW50QWRkcmVzc1JlZ2lzdGVyKSk7Cit9CisKIHZvaWQgU2VsZWN0
b3JDb2RlR2VuZXJhdG9yOjpnZW5lcmF0ZUVsZW1lbnRJc1RhcmdldChBc3NlbWJsZXI6Okp1bXBM
aXN0JiBmYWlsdXJlQ2FzZXMpCiB7CiAgICAgTG9jYWxSZWdpc3RlciBkb2N1bWVudChtX3JlZ2lz
dGVyQWxsb2NhdG9yKTsKQEAgLTI5NjIsMTMgKzMwMTQsMTUgQEAgdm9pZCBTZWxlY3RvckNvZGVH
ZW5lcmF0b3I6OmdlbmVyYXRlRWxlbWVudElzVGFyZ2V0KEFzc2VtYmxlcjo6SnVtcExpc3QmIGZh
aWx1cmUKIAogdm9pZCBTZWxlY3RvckNvZGVHZW5lcmF0b3I6OmdlbmVyYXRlTWFya1BzZXVkb1N0
eWxlRm9yUHNldWRvRWxlbWVudChBc3NlbWJsZXI6Okp1bXBMaXN0JiBmYWlsdXJlQ2FzZXMsIGNv
bnN0IFNlbGVjdG9yRnJhZ21lbnQmIGZyYWdtZW50KQogewotICAgIExvY2FsUmVnaXN0ZXIgY2hl
Y2tpbmdDb250ZXh0KG1fcmVnaXN0ZXJBbGxvY2F0b3IpOwotICAgIGxvYWRDaGVja2luZ0NvbnRl
eHQoY2hlY2tpbmdDb250ZXh0KTsKKyAgICBBU1NFUlQobV9zZWxlY3RvckNvbnRleHQgIT0gU2Vs
ZWN0b3JDb250ZXh0OjpRdWVyeVNlbGVjdG9yKTsKIAogICAgIC8vIFdoZW4gZnJhZ21lbnQgZG9l
c24ndCBoYXZlIGEgcHNldWRvIGVsZW1lbnQsIHRoZXJlJ3Mgbm8gbmVlZCB0byBtYXJrIHRoZSBw
c2V1ZG8gZWxlbWVudCBzdHlsZS4KICAgICBpZiAoIWZyYWdtZW50LnBzZXVkb0VsZW1lbnRTZWxl
Y3RvcikKICAgICAgICAgcmV0dXJuOwogCisgICAgTG9jYWxSZWdpc3RlciBjaGVja2luZ0NvbnRl
eHQobV9yZWdpc3RlckFsbG9jYXRvcik7CisgICAgbG9hZENoZWNraW5nQ29udGV4dChjaGVja2lu
Z0NvbnRleHQpOworCiAgICAgQXNzZW1ibGVyOjpKdW1wTGlzdCBzdWNjZXNzQ2FzZXM7CiAKICAg
ICAvLyBXaGVuIHRoZSByZXF1ZXN0ZWQgcHNldWRvSWQgaXNuJ3QgTk9QU0VVRE8sIHRoZXJlJ3Mg
bm8gbmVlZCB0byBtYXJrIHRoZSBwc2V1ZG8gZWxlbWVudCBzdHlsZS4KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL2Nzc2ppdC9TZWxlY3RvckNvbXBpbGVyLmggYi9Tb3VyY2UvV2ViQ29yZS9j
c3NqaXQvU2VsZWN0b3JDb21waWxlci5oCmluZGV4IGU5NDQ1YmExYTllNjNmMmIyYTZhMTc4ZjNh
ZjdlNTExZmE4ODEzMmMuLmMwY2E1MzJkNTAzMzMxMWZmZjY3ZDE2MTA0MWNmNDU0ZTE0YmYyMTAg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nzc2ppdC9TZWxlY3RvckNvbXBpbGVyLmgKKysr
IGIvU291cmNlL1dlYkNvcmUvY3Nzaml0L1NlbGVjdG9yQ29tcGlsZXIuaApAQCAtNzAsMTEgKzcw
LDIxIEBAIGNsYXNzIFNlbGVjdG9yQ29tcGlsYXRpb25TdGF0dXMgewogbmFtZXNwYWNlIFNlbGVj
dG9yQ29tcGlsZXIgewogCiBzdHJ1Y3QgQ2hlY2tpbmdDb250ZXh0IHsKKyAgICBDaGVja2luZ0Nv
bnRleHQoU2VsZWN0b3JDaGVja2VyOjpNb2RlIHJlc29sdmluZ01vZGUpCisgICAgICAgIDogcmVz
b2x2aW5nTW9kZShyZXNvbHZpbmdNb2RlKQorICAgICAgICAsIGVsZW1lbnRTdHlsZShudWxscHRy
KQorICAgICAgICAsIHBzZXVkb0lkKE5PUFNFVURPKQorICAgICAgICAsIHNjcm9sbGJhcihudWxs
cHRyKQorICAgICAgICAsIHNjcm9sbGJhclBhcnQoTm9QYXJ0KQorICAgICAgICAsIHNjb3BlKG51
bGxwdHIpCisgICAgeyB9CisKICAgICBTZWxlY3RvckNoZWNrZXI6Ok1vZGUgcmVzb2x2aW5nTW9k
ZTsKICAgICBSZW5kZXJTdHlsZSogZWxlbWVudFN0eWxlOwogICAgIFBzZXVkb0lkIHBzZXVkb0lk
OwogICAgIFJlbmRlclNjcm9sbGJhciogc2Nyb2xsYmFyOwogICAgIFNjcm9sbGJhclBhcnQgc2Ny
b2xsYmFyUGFydDsKKyAgICBjb25zdCBDb250YWluZXJOb2RlKiBzY29wZTsKIH07CiAKIGVudW0g
Y2xhc3MgU2VsZWN0b3JDb250ZXh0IHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9T
ZWxlY3RvclF1ZXJ5LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9TZWxlY3RvclF1ZXJ5LmNwcApp
bmRleCA3MjZjNDZlYTlmM2JiNDNiNWViOTRlODQ5OWEyNzQzYmVmZDdlZTc5Li4xMGVmMDJmNDg0
MjA4ODFiNmY3OThlZTY3ZmYzZWYzM2QwY2NhYjViIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9kb20vU2VsZWN0b3JRdWVyeS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL1NlbGVjdG9y
UXVlcnkuY3BwCkBAIC0zNjEsOSArMzYxLDkgQEAgQUxXQVlTX0lOTElORSB2b2lkIFNlbGVjdG9y
RGF0YUxpc3Q6OmV4ZWN1dGVTaW5nbGVNdWx0aVNlbGVjdG9yRGF0YShjb25zdCBDb250YWkKIAog
I2lmIEVOQUJMRShDU1NfU0VMRUNUT1JfSklUKQogdGVtcGxhdGUgPHR5cGVuYW1lIFNlbGVjdG9y
UXVlcnlUcmFpdD4KLUFMV0FZU19JTkxJTkUgdm9pZCBTZWxlY3RvckRhdGFMaXN0OjpleGVjdXRl
Q29tcGlsZWRTaW1wbGVTZWxlY3RvckNoZWNrZXIoY29uc3QgQ29udGFpbmVyTm9kZSYgcm9vdE5v
ZGUsIFNlbGVjdG9yQ29tcGlsZXI6OlNpbXBsZVNlbGVjdG9yQ2hlY2tlciBzZWxlY3RvckNoZWNr
ZXIsIHR5cGVuYW1lIFNlbGVjdG9yUXVlcnlUcmFpdDo6T3V0cHV0VHlwZSYgb3V0cHV0LCBjb25z
dCBTZWxlY3RvckRhdGEmIHNlbGVjdG9yRGF0YSkgY29uc3QKK0FMV0FZU19JTkxJTkUgdm9pZCBT
ZWxlY3RvckRhdGFMaXN0OjpleGVjdXRlQ29tcGlsZWRTaW1wbGVTZWxlY3RvckNoZWNrZXIoY29u
c3QgQ29udGFpbmVyTm9kZSYgc2VhcmNoUm9vdE5vZGUsIFNlbGVjdG9yQ29tcGlsZXI6OlNpbXBs
ZVNlbGVjdG9yQ2hlY2tlciBzZWxlY3RvckNoZWNrZXIsIHR5cGVuYW1lIFNlbGVjdG9yUXVlcnlU
cmFpdDo6T3V0cHV0VHlwZSYgb3V0cHV0LCBjb25zdCBTZWxlY3RvckRhdGEmIHNlbGVjdG9yRGF0
YSkgY29uc3QKIHsKLSAgICBmb3IgKGF1dG8mIGVsZW1lbnQgOiBlbGVtZW50RGVzY2VuZGFudHMo
Y29uc3RfY2FzdDxDb250YWluZXJOb2RlJj4ocm9vdE5vZGUpKSkgeworICAgIGZvciAoYXV0byYg
ZWxlbWVudCA6IGVsZW1lbnREZXNjZW5kYW50cyhjb25zdF9jYXN0PENvbnRhaW5lck5vZGUmPihz
ZWFyY2hSb290Tm9kZSkpKSB7CiAjaWYgQ1NTX1NFTEVDVE9SX0pJVF9QUk9GSUxJTkcKICAgICAg
ICAgc2VsZWN0b3JEYXRhLmNvbXBpbGVkU2VsZWN0b3JVc2VkKCk7CiAjZWxzZQpAQCAtMzc2LDYg
KzM3NiwyNiBAQCBBTFdBWVNfSU5MSU5FIHZvaWQgU2VsZWN0b3JEYXRhTGlzdDo6ZXhlY3V0ZUNv
bXBpbGVkU2ltcGxlU2VsZWN0b3JDaGVja2VyKGNvbnN0CiAgICAgICAgIH0KICAgICB9CiB9CisK
K3RlbXBsYXRlIDx0eXBlbmFtZSBTZWxlY3RvclF1ZXJ5VHJhaXQ+CitBTFdBWVNfSU5MSU5FIHZv
aWQgU2VsZWN0b3JEYXRhTGlzdDo6ZXhlY3V0ZUNvbXBpbGVkU2VsZWN0b3JDaGVja2VyV2l0aENo
ZWNraW5nQ29udGV4dChjb25zdCBDb250YWluZXJOb2RlJiByb290Tm9kZSwgY29uc3QgQ29udGFp
bmVyTm9kZSYgc2VhcmNoUm9vdE5vZGUsIFNlbGVjdG9yQ29tcGlsZXI6OlNlbGVjdG9yQ2hlY2tl
cldpdGhDaGVja2luZ0NvbnRleHQgc2VsZWN0b3JDaGVja2VyLCB0eXBlbmFtZSBTZWxlY3RvclF1
ZXJ5VHJhaXQ6Ok91dHB1dFR5cGUmIG91dHB1dCwgY29uc3QgU2VsZWN0b3JEYXRhJiBzZWxlY3Rv
ckRhdGEpIGNvbnN0Cit7CisgICAgU2VsZWN0b3JDb21waWxlcjo6Q2hlY2tpbmdDb250ZXh0IGNo
ZWNraW5nQ29udGV4dChTZWxlY3RvckNoZWNrZXI6Ok1vZGU6OlF1ZXJ5aW5nUnVsZXMpOworICAg
IGNoZWNraW5nQ29udGV4dC5zY29wZSA9IHJvb3ROb2RlLmlzRG9jdW1lbnROb2RlKCkgPyBudWxs
cHRyIDogJnJvb3ROb2RlOworCisgICAgZm9yIChhdXRvJiBlbGVtZW50IDogZWxlbWVudERlc2Nl
bmRhbnRzKGNvbnN0X2Nhc3Q8Q29udGFpbmVyTm9kZSY+KHNlYXJjaFJvb3ROb2RlKSkpIHsKKyNp
ZiBDU1NfU0VMRUNUT1JfSklUX1BST0ZJTElORworICAgICAgICBzZWxlY3RvckRhdGEuY29tcGls
ZWRTZWxlY3RvclVzZWQoKTsKKyNlbHNlCisgICAgICAgIFVOVVNFRF9QQVJBTShzZWxlY3RvckRh
dGEpOworI2VuZGlmCisgICAgICAgIGlmIChzZWxlY3RvckNoZWNrZXIoJmVsZW1lbnQsICZjaGVj
a2luZ0NvbnRleHQpKSB7CisgICAgICAgICAgICBTZWxlY3RvclF1ZXJ5VHJhaXQ6OmFwcGVuZE91
dHB1dEZvckVsZW1lbnQob3V0cHV0LCAmZWxlbWVudCk7CisgICAgICAgICAgICBpZiAoU2VsZWN0
b3JRdWVyeVRyYWl0OjpzaG91bGRPbmx5TWF0Y2hGaXJzdEVsZW1lbnQpCisgICAgICAgICAgICAg
ICAgcmV0dXJuOworICAgICAgICB9CisgICAgfQorfQogI2VuZGlmIC8vIEVOQUJMRShDU1NfU0VM
RUNUT1JfSklUKQogCiB0ZW1wbGF0ZSA8dHlwZW5hbWUgU2VsZWN0b3JRdWVyeVRyYWl0PgpAQCAt
MzkxLDcgKzQxMSw3IEBAIEFMV0FZU19JTkxJTkUgdm9pZCBTZWxlY3RvckRhdGFMaXN0OjpleGVj
dXRlKENvbnRhaW5lck5vZGUmIHJvb3ROb2RlLCB0eXBlbmFtZSBTCiAgICAgICAgICAgICBicmVh
azsKICAgICAgICAgfQogI2lmIEVOQUJMRShDU1NfU0VMRUNUT1JfSklUKQotICAgICAgICBpZiAo
c2VsZWN0b3JEYXRhLmNvbXBpbGF0aW9uU3RhdHVzID09IFNlbGVjdG9yQ29tcGlsYXRpb25TdGF0
dXM6OlNpbXBsZVNlbGVjdG9yQ2hlY2tlcikKKyAgICAgICAgaWYgKHNlbGVjdG9yRGF0YS5jb21w
aWxhdGlvblN0YXR1cyA9PSBTZWxlY3RvckNvbXBpbGF0aW9uU3RhdHVzOjpTaW1wbGVTZWxlY3Rv
ckNoZWNrZXIgfHwgc2VsZWN0b3JEYXRhLmNvbXBpbGF0aW9uU3RhdHVzID09IFNlbGVjdG9yQ29t
cGlsYXRpb25TdGF0dXM6OlNlbGVjdG9yQ2hlY2tlcldpdGhDaGVja2luZ0NvbnRleHQpCiAgICAg
ICAgICAgICBnb3RvIENvbXBpbGVkU2luZ2xlQ2FzZTsKICNlbmRpZgogICAgICAgICB9CkBAIC00
MDUsOSArNDI1LDggQEAgQUxXQVlTX0lOTElORSB2b2lkIFNlbGVjdG9yRGF0YUxpc3Q6OmV4ZWN1
dGUoQ29udGFpbmVyTm9kZSYgcm9vdE5vZGUsIHR5cGVuYW1lIFMKIAogICAgICAgICBKU0M6OlZN
JiB2bSA9IHNlYXJjaFJvb3ROb2RlLT5kb2N1bWVudCgpLnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQo
KS0+dm0oKTsKICAgICAgICAgc2VsZWN0b3JEYXRhLmNvbXBpbGF0aW9uU3RhdHVzID0gU2VsZWN0
b3JDb21waWxlcjo6Y29tcGlsZVNlbGVjdG9yKHNlbGVjdG9yRGF0YS5zZWxlY3RvciwgJnZtLCBT
ZWxlY3RvckNvbXBpbGVyOjpTZWxlY3RvckNvbnRleHQ6OlF1ZXJ5U2VsZWN0b3IsIHNlbGVjdG9y
RGF0YS5jb21waWxlZFNlbGVjdG9yQ29kZVJlZik7Ci0gICAgICAgIFJFTEVBU0VfQVNTRVJUKHNl
bGVjdG9yRGF0YS5jb21waWxhdGlvblN0YXR1cyAhPSBTZWxlY3RvckNvbXBpbGF0aW9uU3RhdHVz
OjpTZWxlY3RvckNoZWNrZXJXaXRoQ2hlY2tpbmdDb250ZXh0KTsKIAotICAgICAgICBpZiAoc2Vs
ZWN0b3JEYXRhLmNvbXBpbGF0aW9uU3RhdHVzID09IFNlbGVjdG9yQ29tcGlsYXRpb25TdGF0dXM6
OlNpbXBsZVNlbGVjdG9yQ2hlY2tlcikgeworICAgICAgICBpZiAoc2VsZWN0b3JEYXRhLmNvbXBp
bGF0aW9uU3RhdHVzID09IFNlbGVjdG9yQ29tcGlsYXRpb25TdGF0dXM6OlNpbXBsZVNlbGVjdG9y
Q2hlY2tlciB8fCBzZWxlY3RvckRhdGEuY29tcGlsYXRpb25TdGF0dXMgPT0gU2VsZWN0b3JDb21w
aWxhdGlvblN0YXR1czo6U2VsZWN0b3JDaGVja2VyV2l0aENoZWNraW5nQ29udGV4dCkgewogICAg
ICAgICAgICAgaWYgKG1fbWF0Y2hUeXBlID09IENvbXBpbGFibGVTaW5nbGUpIHsKICAgICAgICAg
ICAgICAgICBtX21hdGNoVHlwZSA9IENvbXBpbGVkU2luZ2xlOwogICAgICAgICAgICAgICAgIGdv
dG8gQ29tcGlsZWRTaW5nbGVDYXNlOwpAQCAtNDM5LDggKzQ1OCwxNCBAQCBBTFdBWVNfSU5MSU5F
IHZvaWQgU2VsZWN0b3JEYXRhTGlzdDo6ZXhlY3V0ZShDb250YWluZXJOb2RlJiByb290Tm9kZSwg
dHlwZW5hbWUgUwogICAgICAgICBDb21waWxlZFNpbmdsZUNhc2U6CiAgICAgICAgIGNvbnN0IFNl
bGVjdG9yRGF0YSYgc2VsZWN0b3JEYXRhID0gbV9zZWxlY3RvcnMuZmlyc3QoKTsKICAgICAgICAg
dm9pZCogY29tcGlsZWRTZWxlY3RvckNoZWNrZXIgPSBzZWxlY3RvckRhdGEuY29tcGlsZWRTZWxl
Y3RvckNvZGVSZWYuY29kZSgpLmV4ZWN1dGFibGVBZGRyZXNzKCk7Ci0gICAgICAgIFNlbGVjdG9y
Q29tcGlsZXI6OlNpbXBsZVNlbGVjdG9yQ2hlY2tlciBzZWxlY3RvckNoZWNrZXIgPSBTZWxlY3Rv
ckNvbXBpbGVyOjpzaW1wbGVTZWxlY3RvckNoZWNrZXJGdW5jdGlvbihjb21waWxlZFNlbGVjdG9y
Q2hlY2tlciwgc2VsZWN0b3JEYXRhLmNvbXBpbGF0aW9uU3RhdHVzKTsKLSAgICAgICAgZXhlY3V0
ZUNvbXBpbGVkU2ltcGxlU2VsZWN0b3JDaGVja2VyPFNlbGVjdG9yUXVlcnlUcmFpdD4oKnNlYXJj
aFJvb3ROb2RlLCBzZWxlY3RvckNoZWNrZXIsIG91dHB1dCwgc2VsZWN0b3JEYXRhKTsKKyAgICAg
ICAgaWYgKHNlbGVjdG9yRGF0YS5jb21waWxhdGlvblN0YXR1cyA9PSBTZWxlY3RvckNvbXBpbGF0
aW9uU3RhdHVzOjpTaW1wbGVTZWxlY3RvckNoZWNrZXIpIHsKKyAgICAgICAgICAgIFNlbGVjdG9y
Q29tcGlsZXI6OlNpbXBsZVNlbGVjdG9yQ2hlY2tlciBzZWxlY3RvckNoZWNrZXIgPSBTZWxlY3Rv
ckNvbXBpbGVyOjpzaW1wbGVTZWxlY3RvckNoZWNrZXJGdW5jdGlvbihjb21waWxlZFNlbGVjdG9y
Q2hlY2tlciwgc2VsZWN0b3JEYXRhLmNvbXBpbGF0aW9uU3RhdHVzKTsKKyAgICAgICAgICAgIGV4
ZWN1dGVDb21waWxlZFNpbXBsZVNlbGVjdG9yQ2hlY2tlcjxTZWxlY3RvclF1ZXJ5VHJhaXQ+KCpz
ZWFyY2hSb290Tm9kZSwgc2VsZWN0b3JDaGVja2VyLCBvdXRwdXQsIHNlbGVjdG9yRGF0YSk7Cisg
ICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBBU1NFUlQoc2VsZWN0b3JEYXRhLmNvbXBpbGF0
aW9uU3RhdHVzID09IFNlbGVjdG9yQ29tcGlsYXRpb25TdGF0dXM6OlNlbGVjdG9yQ2hlY2tlcldp
dGhDaGVja2luZ0NvbnRleHQpOworICAgICAgICAgICAgU2VsZWN0b3JDb21waWxlcjo6U2VsZWN0
b3JDaGVja2VyV2l0aENoZWNraW5nQ29udGV4dCBzZWxlY3RvckNoZWNrZXIgPSBTZWxlY3RvckNv
bXBpbGVyOjpzZWxlY3RvckNoZWNrZXJGdW5jdGlvbldpdGhDaGVja2luZ0NvbnRleHQoY29tcGls
ZWRTZWxlY3RvckNoZWNrZXIsIHNlbGVjdG9yRGF0YS5jb21waWxhdGlvblN0YXR1cyk7CisgICAg
ICAgICAgICBleGVjdXRlQ29tcGlsZWRTZWxlY3RvckNoZWNrZXJXaXRoQ2hlY2tpbmdDb250ZXh0
PFNlbGVjdG9yUXVlcnlUcmFpdD4ocm9vdE5vZGUsICpzZWFyY2hSb290Tm9kZSwgc2VsZWN0b3JD
aGVja2VyLCBvdXRwdXQsIHNlbGVjdG9yRGF0YSk7CisgICAgICAgIH0KICAgICAgICAgYnJlYWs7
CiAgICAgICAgIH0KICNlbHNlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vU2VsZWN0
b3JRdWVyeS5oIGIvU291cmNlL1dlYkNvcmUvZG9tL1NlbGVjdG9yUXVlcnkuaAppbmRleCA0OTU2
M2IyOWEzZDYwMDdjMDM5ZTViNDU2MWE1MDMzMWU0MjIzNDc0Li5kODk2YTc2NWI2ODUxMmVlZTky
NzljZTJkYTZlYzUwN2U3ZGEzOGYzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vU2Vs
ZWN0b3JRdWVyeS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9TZWxlY3RvclF1ZXJ5LmgKQEAg
LTg5LDcgKzg5LDggQEAgY2xhc3MgU2VsZWN0b3JEYXRhTGlzdCB7CiAgICAgdGVtcGxhdGUgPHR5
cGVuYW1lIFNlbGVjdG9yUXVlcnlUcmFpdD4gdm9pZCBleGVjdXRlU2luZ2xlU2VsZWN0b3JEYXRh
KGNvbnN0IENvbnRhaW5lck5vZGUmIHJvb3ROb2RlLCBjb25zdCBTZWxlY3RvckRhdGEmLCB0eXBl
bmFtZSBTZWxlY3RvclF1ZXJ5VHJhaXQ6Ok91dHB1dFR5cGUmKSBjb25zdDsKICAgICB0ZW1wbGF0
ZSA8dHlwZW5hbWUgU2VsZWN0b3JRdWVyeVRyYWl0PiB2b2lkIGV4ZWN1dGVTaW5nbGVNdWx0aVNl
bGVjdG9yRGF0YShjb25zdCBDb250YWluZXJOb2RlJiByb290Tm9kZSwgdHlwZW5hbWUgU2VsZWN0
b3JRdWVyeVRyYWl0OjpPdXRwdXRUeXBlJikgY29uc3Q7CiAjaWYgRU5BQkxFKENTU19TRUxFQ1RP
Ul9KSVQpCi0gICAgdGVtcGxhdGUgPHR5cGVuYW1lIFNlbGVjdG9yUXVlcnlUcmFpdD4gdm9pZCBl
eGVjdXRlQ29tcGlsZWRTaW1wbGVTZWxlY3RvckNoZWNrZXIoY29uc3QgQ29udGFpbmVyTm9kZSYg
cm9vdE5vZGUsIFNlbGVjdG9yQ29tcGlsZXI6OlNpbXBsZVNlbGVjdG9yQ2hlY2tlciwgdHlwZW5h
bWUgU2VsZWN0b3JRdWVyeVRyYWl0OjpPdXRwdXRUeXBlJiwgY29uc3QgU2VsZWN0b3JEYXRhJikg
Y29uc3Q7CisgICAgdGVtcGxhdGUgPHR5cGVuYW1lIFNlbGVjdG9yUXVlcnlUcmFpdD4gdm9pZCBl
eGVjdXRlQ29tcGlsZWRTaW1wbGVTZWxlY3RvckNoZWNrZXIoY29uc3QgQ29udGFpbmVyTm9kZSYg
c2VhcmNoUm9vdE5vZGUsIFNlbGVjdG9yQ29tcGlsZXI6OlNpbXBsZVNlbGVjdG9yQ2hlY2tlciwg
dHlwZW5hbWUgU2VsZWN0b3JRdWVyeVRyYWl0OjpPdXRwdXRUeXBlJiwgY29uc3QgU2VsZWN0b3JE
YXRhJikgY29uc3Q7CisgICAgdGVtcGxhdGUgPHR5cGVuYW1lIFNlbGVjdG9yUXVlcnlUcmFpdD4g
dm9pZCBleGVjdXRlQ29tcGlsZWRTZWxlY3RvckNoZWNrZXJXaXRoQ2hlY2tpbmdDb250ZXh0KGNv
bnN0IENvbnRhaW5lck5vZGUmIHJvb3ROb2RlLCBjb25zdCBDb250YWluZXJOb2RlJiBzZWFyY2hS
b290Tm9kZSwgU2VsZWN0b3JDb21waWxlcjo6U2VsZWN0b3JDaGVja2VyV2l0aENoZWNraW5nQ29u
dGV4dCwgdHlwZW5hbWUgU2VsZWN0b3JRdWVyeVRyYWl0OjpPdXRwdXRUeXBlJiwgY29uc3QgU2Vs
ZWN0b3JEYXRhJikgY29uc3Q7CiAjZW5kaWYgLy8gRU5BQkxFKENTU19TRUxFQ1RPUl9KSVQpCiAK
ICAgICBWZWN0b3I8U2VsZWN0b3JEYXRhPiBtX3NlbGVjdG9yczsKZGlmZiAtLWdpdCBhL0xheW91
dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwppbmRleCBjYzM5YzdhYzIx
NTExMGE4M2Y4NjZhZmI2YmQ3NmM2MTgxZWNhMGU4Li40M2Y3MGNhMjY4ZTYwOGI2MjhiMjI2Nzc0
ODAwN2Y0Nzk5Mjk1ZDhiIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKKysrIGIv
TGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjEgQEAKKzIwMTQtMDgtMDggIFl1c3Vr
ZSBTdXp1a2kgIDx1dGF0YW5lLnRlYUBnbWFpbC5jb20+CisKKyAgICAgICAgQ1NTIEpJVDogc3Vw
cG9ydCA6c2NvcGUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTEzNTczMworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAg
ICAgIEltcGxlbWVudCA6c2NvcGUgZm9yIENTUyBKSVQuIEl0IGludHJvZHVjZXMgc2NvcGUgZmll
bGQgdG8gQ2hlY2tpbmdDb250ZXh0CisgICAgICAgIGFuZCBpdCBtYWtlcyBDaGVja2luZ0NvbnRl
eHQgbW9yZSBzaW1pbGFyIHRvIFNlbGVjdG9yQ2hlY2tlcjo6U2VsZWN0b3JDaGVja2luZ0NvbnRl
eHQuCisgICAgICAgIEFuZCBzaW5jZSA6c2NvcGUgcmVxdWlyZXMgQ2hlY2tpbmdDb250ZXh0LCBR
dWVyeWluZ1J1bGVzIGNhbiBhY2NlcHQgU2VsZWN0b3JDaGVja2VyV2l0aENoZWNraW5nQ29udGV4
dC4KKworICAgICAgICAqIGZhc3Qvc2VsZWN0b3JzL3F1ZXJ5U2VsZWN0b3Itc2NvcGUtZmlsdGVy
ZWQtcm9vdC1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAqIGZhc3Qvc2VsZWN0b3JzL3F1
ZXJ5U2VsZWN0b3Itc2NvcGUtZmlsdGVyZWQtcm9vdC5odG1sOiBBZGRlZC4KKyAgICAgICAgU2Vh
cmNoaW5nIHJvb3Qgbm9kZSBvZiBxdWVyeVNlbGVjdG9yQWxsIGlzIGZpbHRlcmVkIHRvIGlkIG5v
ZGUsIGJ1dCA6c2NvcGUgcm9vdCBub2RlIHNob3VsZCBub3QgYmUgY2hhbmdlZC4KKyAgICAgICAg
KiBmYXN0L3NlbGVjdG9ycy9zY29wZS13b3Jrcy1hcy1yb290LWV4cGVjdGVkLmh0bWw6IEFkZGVk
LgorICAgICAgICAqIGZhc3Qvc2VsZWN0b3JzL3Njb3BlLXdvcmtzLWFzLXJvb3QuaHRtbDogQWRk
ZWQuCisgICAgICAgIDpzY29wZSBpbiBzdHlsZXNoZWV0IHdvcmtzIGFzIDpyb290LgorCiAyMDE0
LTA4LTA3ICBNYXJrIExhbSAgPG1hcmsubGFtQGFwcGxlLmNvbT4KIAogICAgICAgICBHYXJkZW5p
bmc6IE1hcmsgdGVzdCBhcyBmYWlsaW5nIGluIFRlc3RFeHBlY3RhdGlvbnMgdW50aWwgdGhlIGlz
c3VlIGNhbiBiZSBpbnZlc3RpZ2F0ZWQuCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9mYXN0L3Nl
bGVjdG9ycy9xdWVyeVNlbGVjdG9yLXNjb3BlLWZpbHRlcmVkLXJvb3QtZXhwZWN0ZWQudHh0IGIv
TGF5b3V0VGVzdHMvZmFzdC9zZWxlY3RvcnMvcXVlcnlTZWxlY3Rvci1zY29wZS1maWx0ZXJlZC1y
b290LWV4cGVjdGVkLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi44NWU0OTgwNDRiNDZhOTZiYTBkYzcxODAyMTU5
NDA0ZjE4Njg1YzA1Ci0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvZmFzdC9zZWxlY3Rv
cnMvcXVlcnlTZWxlY3Rvci1zY29wZS1maWx0ZXJlZC1yb290LWV4cGVjdGVkLnR4dApAQCAtMCww
ICsxLDE3IEBACitUaGlzIHRlc3QgbWFrZXMgc3VyZSB0aGF0IDpzY29wZSB3aXRoIGlkIGZpbHRl
ciB3b3JrcyBjb3JyZWN0bHkuCisKK09uIHN1Y2Nlc3MsIHlvdSB3aWxsIHNlZSBhIHNlcmllcyBv
ZiAiUEFTUyIgbWVzc2FnZXMsIGZvbGxvd2VkIGJ5ICJURVNUIENPTVBMRVRFIi4KKworCitQQVNT
IHNjb3BlLnBhcmVudE5vZGUucXVlcnlTZWxlY3RvckFsbCgiOnNjb3BlICNzY29wZSBhIikuaXRl
bSgwKSBpcyBzY29wZS5maXJzdENoaWxkCitQQVNTIHNjb3BlLnBhcmVudE5vZGUucXVlcnlTZWxl
Y3RvckFsbCgiOnNjb3BlICNzY29wZSBhIikubGVuZ3RoIGlzIDEKK1BBU1Mgc2NvcGUucXVlcnlT
ZWxlY3RvckFsbCgiOnNjb3BlICNzY29wZSBhIikubGVuZ3RoIGlzIDAKK1BBU1Mgc2NvcGUucGFy
ZW50Tm9kZS5xdWVyeVNlbGVjdG9yQWxsKCI6c2NvcGUgI3Njb3BlICsgbGkiKS5sZW5ndGggaXMg
MQorUEFTUyBzY29wZS5wYXJlbnROb2RlLnF1ZXJ5U2VsZWN0b3JBbGwoIjpzY29wZSAjc2NvcGUg
KyBsaSIpLml0ZW0oMCkgaXMgc2NvcGUucGFyZW50Tm9kZS5jaGlsZHJlblsxXQorUEFTUyBkb2N1
bWVudC5xdWVyeVNlbGVjdG9yQWxsKCI6c2NvcGUgI3Njb3BlIGEiKS5pdGVtKDApIGlzIHNjb3Bl
LmZpcnN0Q2hpbGQKK1BBU1Mgc3VjY2Vzc2Z1bGx5UGFyc2VkIGlzIHRydWUKKworVEVTVCBDT01Q
TEVURQorYWJjCitkZWYKK2VmZwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvZmFzdC9zZWxlY3Rv
cnMvcXVlcnlTZWxlY3Rvci1zY29wZS1maWx0ZXJlZC1yb290Lmh0bWwgYi9MYXlvdXRUZXN0cy9m
YXN0L3NlbGVjdG9ycy9xdWVyeVNlbGVjdG9yLXNjb3BlLWZpbHRlcmVkLXJvb3QuaHRtbApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwLi5kY2VlZDQ2ZTk3OWQ5ZThhM2FkMTg1ODYxMWJjYmU3NjkwNWMwMzI4Ci0tLSAvZGV2
L251bGwKKysrIGIvTGF5b3V0VGVzdHMvZmFzdC9zZWxlY3RvcnMvcXVlcnlTZWxlY3Rvci1zY29w
ZS1maWx0ZXJlZC1yb290Lmh0bWwKQEAgLTAsMCArMSwzMCBAQAorPCFkb2N0eXBlIGh0bWw+Cis8
aHRtbD4KKzxoZWFkPgorPHNjcmlwdCBzcmM9Ii4uLy4uL3Jlc291cmNlcy9qcy10ZXN0LXByZS5q
cyI+PC9zY3JpcHQ+Cis8c2NyaXB0PgoraWYgKHdpbmRvdy50ZXN0UnVubmVyKQorICAgIHRlc3RS
dW5uZXIuZHVtcEFzVGV4dCgpOworPC9zY3JpcHQ+Cis8L2hlYWQ+Cis8Ym9keT4KKyAgPHVsPgor
ICAgIDxsaSBpZD0nc2NvcGUnPjxhPmFiYzwvYT48L2xpPgorICAgIDxsaT5kZWY8L2xpPgorICAg
IDxsaT48YT5lZmc8L2E+PC9saT4KKyAgPC91bD4KKzwvYm9keT4KKzxzY3JpcHQ+CitkZXNjcmlw
dGlvbignVGhpcyB0ZXN0IG1ha2VzIHN1cmUgdGhhdCA6c2NvcGUgd2l0aCBpZCBmaWx0ZXIgd29y
a3MgY29ycmVjdGx5LicpOworCit2YXIgc2NvcGUgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgn
c2NvcGUnKTsKK3Nob3VsZEJlKCdzY29wZS5wYXJlbnROb2RlLnF1ZXJ5U2VsZWN0b3JBbGwoIjpz
Y29wZSAjc2NvcGUgYSIpLml0ZW0oMCknLCAnc2NvcGUuZmlyc3RDaGlsZCcpOworc2hvdWxkQmUo
J3Njb3BlLnBhcmVudE5vZGUucXVlcnlTZWxlY3RvckFsbCgiOnNjb3BlICNzY29wZSBhIikubGVu
Z3RoJywgJzEnKTsKK3Nob3VsZEJlKCdzY29wZS5xdWVyeVNlbGVjdG9yQWxsKCI6c2NvcGUgI3Nj
b3BlIGEiKS5sZW5ndGgnLCAnMCcpOworc2hvdWxkQmUoJ3Njb3BlLnBhcmVudE5vZGUucXVlcnlT
ZWxlY3RvckFsbCgiOnNjb3BlICNzY29wZSArIGxpIikubGVuZ3RoJywgJzEnKTsKK3Nob3VsZEJl
KCdzY29wZS5wYXJlbnROb2RlLnF1ZXJ5U2VsZWN0b3JBbGwoIjpzY29wZSAjc2NvcGUgKyBsaSIp
Lml0ZW0oMCknLCAnc2NvcGUucGFyZW50Tm9kZS5jaGlsZHJlblsxXScpOworc2hvdWxkQmUoJ2Rv
Y3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoIjpzY29wZSAjc2NvcGUgYSIpLml0ZW0oMCknLCAnc2Nv
cGUuZmlyc3RDaGlsZCcpOworCis8L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSIuLi8uLi9yZXNvdXJj
ZXMvanMtdGVzdC1wb3N0LmpzIj48L3NjcmlwdD4KKzwvaHRtbD4KZGlmZiAtLWdpdCBhL0xheW91
dFRlc3RzL2Zhc3Qvc2VsZWN0b3JzL3Njb3BlLXdvcmtzLWFzLXJvb3QtZXhwZWN0ZWQuaHRtbCBi
L0xheW91dFRlc3RzL2Zhc3Qvc2VsZWN0b3JzL3Njb3BlLXdvcmtzLWFzLXJvb3QtZXhwZWN0ZWQu
aHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwLi43N2VlYWUyMzcyNWQ1MDAyNzkzOTRiZjc5YWVmYzk3ZDdiOTAxYTky
Ci0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvZmFzdC9zZWxlY3RvcnMvc2NvcGUtd29y
a3MtYXMtcm9vdC1leHBlY3RlZC5odG1sCkBAIC0wLDAgKzEsNiBAQAorPCFET0NUWVBFIGh0bWw+
Cis8aHRtbCBzdHlsZT0iYmFja2dyb3VuZC1jb2xvcjpncmVlbiI+Cis8Ym9keT4KKzxwPlRoZSBi
YWNrZ3JvdW5kIG9mIHRoZSBkb2N1bWVudCBzaG91bGQgYmUgZ3JlZW48L3A+Cis8L2JvZHk+Cis8
L2h0bWw+CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9mYXN0L3NlbGVjdG9ycy9zY29wZS13b3Jr
cy1hcy1yb290Lmh0bWwgYi9MYXlvdXRUZXN0cy9mYXN0L3NlbGVjdG9ycy9zY29wZS13b3Jrcy1h
cy1yb290Lmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMTY2YWFmZDBlM2YwMDA4MmNhM2Q5NGNmMGNmMDliMTY3
NTZhM2E4MwotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2Zhc3Qvc2VsZWN0b3JzL3Nj
b3BlLXdvcmtzLWFzLXJvb3QuaHRtbApAQCAtMCwwICsxLDEyIEBACis8IURPQ1RZUEUgaHRtbD4K
KzxodG1sPgorPGhlYWQ+Cis8c3R5bGU+CisvKiA6c2NvcGUgd29ya3MgYXMgOnJvb3QgaW4gc3R5
bGVzaGVldC4gKi8KKzpzY29wZSB7IGJhY2tncm91bmQtY29sb3I6IGdyZWVuIH0KKzwvc3R5bGU+
Cis8L2hlYWQ+Cis8Ym9keT4KKzxwPlRoZSBiYWNrZ3JvdW5kIG9mIHRoZSBkb2N1bWVudCBzaG91
bGQgYmUgZ3JlZW48L3A+Cis8L2JvZHk+Cis8L2h0bWw+Cg==
</data>
<flag name="review"
          id="260925"
          type_id="1"
          status="+"
          setter="benjamin"
    />
    <flag name="commit-queue"
          id="260956"
          type_id="3"
          status="-"
          setter="benjamin"
    />
          </attachment>
      

    </bug>

</bugzilla>