<?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>161371</bug_id>
          
          <creation_ts>2016-08-30 00:23:52 -0700</creation_ts>
          <short_desc>More refactoring of RenderMathMLScripts</short_desc>
          <delta_ts>2016-09-05 02:21:51 -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>MathML</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Frédéric Wang Nélar">fred.wang</reporter>
          <assigned_to name="Frédéric Wang Nélar">fred.wang</assigned_to>
          <cc>bfulgham</cc>
    
    <cc>commit-queue</cc>
    
    <cc>darin</cc>
    
    <cc>dbarton</cc>
    
    <cc>esprehn+autocc</cc>
    
    <cc>glenn</cc>
    
    <cc>kondapallykalyan</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1224518</commentid>
    <comment_count>0</comment_count>
    <who name="Frédéric Wang Nélar">fred.wang</who>
    <bug_when>2016-08-30 00:23:52 -0700</bug_when>
    <thetext>- Make clear that getBaseAndScripts verify the validity, store reference children into a struct and improve the browsing of the child list.
- Split getScriptMetricsAndLayoutIfNeeded into three separate parts (see bug 161084 comment 4)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1224524</commentid>
    <comment_count>1</comment_count>
      <attachid>287379</attachid>
    <who name="Frédéric Wang Nélar">fred.wang</who>
    <bug_when>2016-08-30 01:44:37 -0700</bug_when>
    <thetext>Created attachment 287379
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1224720</commentid>
    <comment_count>2</comment_count>
      <attachid>287379</attachid>
    <who name="Javier Fernandez">jfernandez</who>
    <bug_when>2016-08-30 14:49:10 -0700</bug_when>
    <thetext>Comment on attachment 287379
Patch

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

&gt; Source/WebCore/rendering/mathml/RenderMathMLScripts.cpp:179
&gt; +    if (!validateAndGetReferenceChildren(reference))

We only use this method to create a valid instance of ReferenceChildren. Why not just define the typical &quot;create&quot; function, which returns a pointer ? In case of no valid reference, then we will just get nullptr.

&gt; Source/WebCore/rendering/mathml/RenderMathMLScripts.cpp:222
&gt; +RenderMathMLScripts::VerticalParameters RenderMathMLScripts::verticalParameters() const

do you need the class name in the return type ?

&gt; Source/WebCore/rendering/mathml/RenderMathMLScripts.cpp:224
&gt; +    VerticalParameters parameters;

The lines to get each parameter are indeed too long, but perhaps you can find a way to implement it clear and use static initializers, like this:

return { baseAscent, baseDescent, ... }

&gt; Source/WebCore/rendering/mathml/RenderMathMLScripts.cpp:251
&gt; +    VerticalParameters parameters = verticalParameters();

Ditto.

&gt; Source/WebCore/rendering/mathml/RenderMathMLScripts.cpp:303
&gt; +        auto subScript = reference.firstPostScript;

suggestion: why not in a  single line ? 

   auto subscript = reference.firstPostScript ? reference.firstPostScript : reference.firstPreScript;

&gt; Source/WebCore/rendering/mathml/RenderMathMLScripts.cpp:356
&gt; +    if (!validateAndGetReferenceChildren(reference)) {

Ditto.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1224738</commentid>
    <comment_count>3</comment_count>
      <attachid>287379</attachid>
    <who name="Frédéric Wang Nélar">fred.wang</who>
    <bug_when>2016-08-30 15:15:30 -0700</bug_when>
    <thetext>Comment on attachment 287379
Patch

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

&gt;&gt; Source/WebCore/rendering/mathml/RenderMathMLScripts.cpp:179
&gt;&gt; +    if (!validateAndGetReferenceChildren(reference))
&gt; 
&gt; We only use this method to create a valid instance of ReferenceChildren. Why not just define the typical &quot;create&quot; function, which returns a pointer ? In case of no valid reference, then we will just get nullptr.

So I believe the idea would be to return an Optional&lt;ReferenceChildren&gt; where Nullopt means a failure. I considered that but then validateAndGetReferenceChildren needed a bit more refactoring and that made the use of &quot;reference&quot; elsewhere more verbose, so I suspected it would complicate the readability/review.

&gt;&gt; Source/WebCore/rendering/mathml/RenderMathMLScripts.cpp:222
&gt;&gt; +RenderMathMLScripts::VerticalParameters RenderMathMLScripts::verticalParameters() const
&gt; 
&gt; do you need the class name in the return type ?

Yes.

&gt;&gt; Source/WebCore/rendering/mathml/RenderMathMLScripts.cpp:224
&gt;&gt; +    VerticalParameters parameters;
&gt; 
&gt; The lines to get each parameter are indeed too long, but perhaps you can find a way to implement it clear and use static initializers, like this:
&gt; 
&gt; return { baseAscent, baseDescent, ... }

Not sure this will work very well here.

&gt;&gt; Source/WebCore/rendering/mathml/RenderMathMLScripts.cpp:251
&gt;&gt; +    VerticalParameters parameters = verticalParameters();
&gt; 
&gt; Ditto.

I guess you mean initializing the VerticalMetrics below with { 0, 0, 0, 0 }?

&gt;&gt; Source/WebCore/rendering/mathml/RenderMathMLScripts.cpp:303
&gt;&gt; +        auto subScript = reference.firstPostScript;
&gt; 
&gt; suggestion: why not in a  single line ? 
&gt; 
&gt;    auto subscript = reference.firstPostScript ? reference.firstPostScript : reference.firstPreScript;

Yes I can do that, thanks for the suggestion.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1226157</commentid>
    <comment_count>4</comment_count>
      <attachid>287379</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2016-09-03 12:56:45 -0700</bug_when>
    <thetext>Comment on attachment 287379
Patch

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

&gt;&gt;&gt; Source/WebCore/rendering/mathml/RenderMathMLScripts.cpp:179
&gt;&gt;&gt; +    if (!validateAndGetReferenceChildren(reference))
&gt;&gt; 
&gt;&gt; We only use this method to create a valid instance of ReferenceChildren. Why not just define the typical &quot;create&quot; function, which returns a pointer ? In case of no valid reference, then we will just get nullptr.
&gt; 
&gt; So I believe the idea would be to return an Optional&lt;ReferenceChildren&gt; where Nullopt means a failure. I considered that but then validateAndGetReferenceChildren needed a bit more refactoring and that made the use of &quot;reference&quot; elsewhere more verbose, so I suspected it would complicate the readability/review.

You can write it like this:

    auto possibleReference = validateAndGetReferenceChildren();
    if (!possibleReference)
        return;
    auto&amp; reference = possibleReference.value();

There is no need to make the code below more verbose. The only annoying thing is the need to have two different names for the local variable. I think the idea is a good one. We should move away from out arguments and also move away from function interfaces where we return multiple independent values, but you should not look at one based on the other.

&gt;&gt;&gt; Source/WebCore/rendering/mathml/RenderMathMLScripts.cpp:222
&gt;&gt;&gt; +RenderMathMLScripts::VerticalParameters RenderMathMLScripts::verticalParameters() const
&gt;&gt; 
&gt;&gt; do you need the class name in the return type ?
&gt; 
&gt; Yes.

If you want to avoid it you can use the &quot;auto&quot; syntax:

    auto RenderMathMLScripts::verticalParameters() const -&gt; VerticalParameters

&gt;&gt;&gt; Source/WebCore/rendering/mathml/RenderMathMLScripts.cpp:224
&gt;&gt;&gt; +    VerticalParameters parameters;
&gt;&gt; 
&gt;&gt; The lines to get each parameter are indeed too long, but perhaps you can find a way to implement it clear and use static initializers, like this:
&gt;&gt; 
&gt;&gt; return { baseAscent, baseDescent, ... }
&gt; 
&gt; Not sure this will work very well here.

I think it’s worth, at some point, investigating alternate coding patterns. It’s not great to have all this boilerplate code.

&gt; Source/WebCore/rendering/mathml/RenderMathMLScripts.cpp:257
&gt; +    VerticalMetrics metrics;
&gt; +    metrics.subShift = 0;
&gt; +    metrics.supShift = 0;
&gt; +    metrics.descent = 0;
&gt; +    metrics.ascent = 0;

Yes, = { 0, 0, 0, 0 } would be very nice here.

&gt; Source/WebCore/rendering/mathml/RenderMathMLScripts.cpp:284
&gt; +        LayoutUnit subAscent = ascentForChild(*reference.firstPostScript);
&gt; +        LayoutUnit subDescent = reference.firstPostScript-&gt;logicalHeight() - subAscent;

I like auto better than LayoutUnit for these.

&gt; Source/WebCore/rendering/mathml/RenderMathMLScripts.cpp:292
&gt; +        LayoutUnit supAscent = ascentForChild(*reference.firstPostScript);
&gt; +        LayoutUnit supDescent = reference.firstPostScript-&gt;logicalHeight() - supAscent;

And these. And lots more places below. Not sure everyone agrees though.

&gt;&gt; Source/WebCore/rendering/mathml/RenderMathMLScripts.cpp:356
&gt;&gt; +    if (!validateAndGetReferenceChildren(reference)) {
&gt; 
&gt; Ditto.

I agree that the Optional trick would be cleaner here.

&gt; Source/WebCore/rendering/mathml/RenderMathMLScripts.h:61
&gt; +    struct ReferenceChildren {
&gt; +        RenderBox* base;
&gt; +        RenderBox* prescriptDelimiter;
&gt; +        RenderBox* firstPostScript;
&gt; +        RenderBox* firstPreScript;
&gt; +    };

This struct doesn’t have to be in the header. It can be forward declared here in the class definition:

    struct ReferenceChildren;

And then in the .cpp file:

    struct RenderMathMLScripts::ReferenceChildren {
        ...
    };

As long as the code here simply declares functions using the type and doesn’t actually contain code that uses the type, which is the case here.

&gt; Source/WebCore/rendering/mathml/RenderMathMLScripts.h:74
&gt; +    struct VerticalParameters {
&gt; +        LayoutUnit subscriptShiftDown;
&gt; +        LayoutUnit superscriptShiftUp;
&gt; +        LayoutUnit subscriptBaselineDropMin;
&gt; +        LayoutUnit superScriptBaselineDropMax;
&gt; +        LayoutUnit subSuperscriptGapMin;
&gt; +        LayoutUnit superscriptBottomMin;
&gt; +        LayoutUnit subscriptTopMax;
&gt; +        LayoutUnit superscriptBottomMaxWithSubscript;
&gt; +    };

Same thing here.

&gt; Source/WebCore/rendering/mathml/RenderMathMLScripts.h:81
&gt; +    struct VerticalMetrics {
&gt;          LayoutUnit subShift;
&gt;          LayoutUnit supShift;
&gt;          LayoutUnit ascent;
&gt;          LayoutUnit descent;
&gt;      };

Same thing here.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1226391</commentid>
    <comment_count>5</comment_count>
      <attachid>287941</attachid>
    <who name="Frédéric Wang Nélar">fred.wang</who>
    <bug_when>2016-09-05 01:42:47 -0700</bug_when>
    <thetext>Created attachment 287941
Patch

&gt; The lines to get each parameter are indeed too long, but perhaps you can find a way to implement it clear and use static initializers, like this:
&gt; I like auto better than LayoutUnit for these.
&gt; This struct doesn’t have to be in the header.

The changeset of this patch is already big, these three points are not specific to scripts and should be considered for other MathML classes too and I won&apos;t be able to come back to this soon. So I&apos;ll leave them for another patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1226395</commentid>
    <comment_count>6</comment_count>
    <who name="Frédéric Wang Nélar">fred.wang</who>
    <bug_when>2016-09-05 02:21:51 -0700</bug_when>
    <thetext>Committed r205441: &lt;http://trac.webkit.org/changeset/205441&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>287379</attachid>
            <date>2016-08-30 01:44:37 -0700</date>
            <delta_ts>2016-09-03 12:56:45 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-161371-20160830104226.patch</filename>
            <type>text/plain</type>
            <size>34372</size>
            <attacher name="Frédéric Wang Nélar">fred.wang</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjA1MTc3CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNGQwZjE4NzBlNDkxY2Uw
ZjU4MmM3YmIyZTExM2M5ZGY4MjBhMGQ4NS4uMTA2ZTY1NzVhNTJjMjIxYjczOGFkYzllNDMxODg1
MDkxZjU1MDliYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDU4IEBACisyMDE2LTA4LTMwICBGcmVk
ZXJpYyBXYW5nICA8ZndhbmdAaWdhbGlhLmNvbT4KKworICAgICAgICBNb3JlIHJlZmFjdG9yaW5n
IG9mIFJlbmRlck1hdGhNTFNjcmlwdHMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTE2MTM3MQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09Q
UyEpLgorCisgICAgICAgIFRoaXMgaXMgYSBmb2xsb3ctdXAgb2YgYnVnIDE2MTA4NC4gVGhlIGZ1
bmN0aW9uIGdldFNjcmlwdE1ldHJpY3NBbmRMYXlvdXRJZk5lZWRlZCB3YXMgcXVpdGUKKyAgICAg
ICAgY29tcGxpY2F0ZWQgYW5kIGl0IHdhcyBub3Qgb2J2aW91cyB0aGF0IHdlIGhhdmUgdG8gY2Fs
bCBpdCB0d2ljZSB3aXRoIHRoZSBzYW1lIHJlZmVyZW5jZQorICAgICAgICB0byBhIHN0cnV0dXJl
IGhvbGRpbmcgdmVydGljYWwgbWV0cmljcy4gV2UgZXh0cmFjdCB0aGUgcGFydCByZXRyaWV2aW5n
IGxheW91dCBwYXJhbWV0ZXJzCisgICAgICAgIGludG8gdmVydGljYWxQYXJhbWV0ZXJzIGFuZCBt
b3ZlIGl0cyBsYXlvdXRJZk5lZWRlZCBjYWxscyBpbnRvIGxheW91dEJsb2NrLiBUaGVuIGl0IGNh
bgorICAgICAgICBiZSByZWR1Y2VkIHRvIGEgc2ltcGxlIGZ1bmN0aW9uIHRoYXQgcmV0cmlldmUg
dGhlIHZlcnRpY2FsIG1ldHJpY3MgaW4gb25lIGNhbGwuCisgICAgICAgIFdlIGFsc28gaW1wcm92
ZSBnZXRCYXNlQW5kU2NyaXB0cyB0byBtYWtlIGNsZWFyIHRoYXQgaXQgaXMgcGVyZm9ybWluZyB2
YWxpZGF0aW9uLiBJdCByZXR1cm5zCisgICAgICAgIGEgUmVmZXJlbmNlQ2hpbGRyZW4gc3RydWN0
dXJlIGVuY2Fwc3VsYXRpbmcgcG9pbnRlcnMgdG8gaW1wb3J0YW50IGNoaWxkcmVuIHNvIHRoYXQg
d2Ugbm8KKyAgICAgICAgbG9uZ2VyIHBhc3MgdGhlc2UgcG9pbnRlcnMgYXMgZnVuY3Rpb24gcGFy
YW1ldGVycy4gV2UgY29udGludWUgdG8gbmVlZCB0aGVtIHRvIGJyb3dzZSB0aGUKKyAgICAgICAg
bGlzdCBvZiBwcmVzY3JpcHRzICYgcG9zdHNjcmlwdHMgYnV0IHdlIHJlZmFjdG9yIGEgYml0IHRo
ZSBsb29wIHRvIGF2b2lkIGV4cGxpY2l0IG1lbnRpb24KKyAgICAgICAgb2YgUmVuZGVyQm94Ki4K
KworICAgICAgICBObyBuZXcgdGVzdHMsIGFscmVhZHkgY292ZXJlZCBieSBleGlzdGluZyB0ZXN0
cy4KKworICAgICAgICAqIHJlbmRlcmluZy9tYXRobWwvUmVuZGVyTWF0aE1MU2NyaXB0cy5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJNYXRoTUxTY3JpcHRzOjp2YWxpZGF0ZUFuZEdldFJl
ZmVyZW5jZUNoaWxkcmVuKTogV2Ugbm93IHN0b3JlIHRoZSBwb2ludGVycyB0bworICAgICAgICB0
aGUgYmFzZSwgZmlyc3RQb3N0U2NyaXB0IGFuZCBmaXJzdFByZVNjcmlwdCBjaGlsZHJlbiBpbiB0
aGUgUmVmZXJlbmNlQ2hpbGRyZW4gc3RydWN0dXJlLiBXZQorICAgICAgICBhbHNvIGFkZCBhIHBv
aW50ZXIgdG8gdGhlIHByZXNjcmlwdERlbGltaXRlciBmb3IgY29udmVuaWVuY2UuCisgICAgICAg
IChXZWJDb3JlOjpSZW5kZXJNYXRoTUxTY3JpcHRzOjppdGFsaWNDb3JyZWN0aW9uKTogVXNlIHRo
ZSBSZWZlcmVuY2VDaGlsZHJlbiBzdHJ1Y3R1cmUgc28gdGhhdAorICAgICAgICB3ZSBhcmUgc3Vy
ZSB0aGUgYmFzZSBoYXMgYmVlbiB2YWxpZGF0ZWQgYmVmb3JlIGNhbGxpbmcgdGhpcyBmdW5jdGlv
bi4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlck1hdGhNTFNjcmlwdHM6OmNvbXB1dGVQcmVmZXJy
ZWRMb2dpY2FsV2lkdGhzKTogUmV0cmlldmUgdGhlIHJlZmVyZW5jZQorICAgICAgICBjaGlsZHJl
biB3aXRoIHZhbGlkYXRlQW5kR2V0UmVmZXJlbmNlQ2hpbGRyZW4gaW5zdGVhZCBvZiBjYWxsaW5n
IGdldEJhc2VBbmRTY3JpcHRzIGFuZCB1c2UKKyAgICAgICAgUmVmZXJlbmNlQ2hpbGRyZW4gdG8g
aGFuZGxlIHRoZXNlIGNoaWxkcmVuIGFuZCB0byBjYWxsIGl0YWxpY0NvcnJlY3Rpb24uIFRoZSBs
b29wcyBmb3IKKyAgICAgICAgU3ViU3VwLCBVbmRlck92ZXIsIE11bHRpc2NyaXB0cyBhcmUgYWxz
byByZXdyaXR0ZW4gYSBiaXQgdG8gYXZvaWQgZGVjbGFyaW5nIGEgbnVsbCBSZW5kZXJCb3gqCisg
ICAgICAgIG91dHNpZGUgb2YgdGhlbSBhbmQgaGVuY2UgYWxsb3cgdG8gdXNlIGF1dG8uCisgICAg
ICAgIChXZWJDb3JlOjpSZW5kZXJNYXRoTUxTY3JpcHRzOjp2ZXJ0aWNhbFBhcmFtZXRlcnMpOiBU
aGlzIHBhcnQgdG8gZXh0cmFjdCB0aGUgbGF5b3V0CisgICAgICAgIHBhcmFtZXRlcnMgaXMgZXh0
cmFjdGVkIGZyb20gZ2V0U2NyaXB0TWV0cmljc0FuZExheW91dElmTmVlZGVkLiBUaGUgcGFyYW1l
dGVycyBhcmUgcmV0dXJuZWQKKyAgICAgICAgYXMgYSBWZXJ0aWNhbFBhcmFtZXRlcnMgc3RydWN0
LgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTWF0aE1MU2NyaXB0czo6dmVydGljYWxNZXRyaWNz
KTogVGhpcyBpcyB0aGUgcmVtYWluaW5nIHBhcnQgb2YKKyAgICAgICAgZ2V0U2NyaXB0TWV0cmlj
c0FuZExheW91dElmTmVlZGVkIEl0IHVzZWQgdG8gY2FsbCBsYXlvdXRJZk5lZWRlZCBvbiBjaGls
ZHJlbiBhbmQgdG8KKyAgICAgICAgY2FsY3VsYXRlIG1heGltdW0gdmVydGljYWwgbWV0cmljcy4g
Rm9yIE11bHRpc2NyaXB0cyBpdCB3YXMgY2FsbGVkIHR3aWNlOiBXZSBkaWQgYSBmaXJzdAorICAg
ICAgICBjYWxsIHRvIGhhbmRsZSB0aGUgcHJlc2NyaXB0cyBhbmQgdGhlbiBwYXNzIHRoZSByZXN1
bHQgYWdhaW4gaW4gdGhlIHNlY29uZCBjYWxsIHRvIGhhbmRsZQorICAgICAgICB0aGUgcG9zdHNj
cmlwdHMuIFdlIG1vZGlmeSBhIGJpdCB0aGUgbG9vcCBzbyB0aGF0IGFsbCB0aGUgc2NyaXB0cyBh
cmUgaGFuZGxlZCBpbiBvbmUgY2FsbCBhbmQKKyAgICAgICAgaGVuY2Ugd2UgY2FuIGRpcmVjdGx5
IHJldHVybiBhIFZlcnRpY2FsTWV0cmljcy4gQWdhaW4sIHRoZSByZWZlcmVuY2UgY2hpbGRyZW4g
YXJlIG5vdyBoYW5kbGVkCisgICAgICAgIHVzaW5nIHRoZSBSZWZlcmVuY2VDaGlsZHJlbiBzdHJ1
Y3R1cmUgcGFzc2VkIGFzIGEgcGFyYW1ldGVyLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTWF0
aE1MU2NyaXB0czo6bGF5b3V0QmxvY2spOiBXZSByZXRyaWV2ZSB0aGUgcmVmZXJlbmNlIGNoaWxk
cmVuIHdpdGgKKyAgICAgICAgdmFsaWRhdGVBbmRHZXRSZWZlcmVuY2VDaGlsZHJlbiBpbnN0ZWFk
IG9mIGNhbGxpbmcgZ2V0QmFzZUFuZFNjcmlwdHMgYW5kIHVzZQorICAgICAgICBSZWZlcmVuY2VD
aGlsZHJlbiB0byBoYW5kbGUgdGhlc2UgY2hpbGRyZW4gYW5kIHRvIGNhbGwgaXRhbGljQ29ycmVj
dGlvbi4gV2UgbGF5b3V0IGFsbCB0aGUKKyAgICAgICAgY2hpbGRyZW4gaWYgbmVlZGVkIGluIG9u
ZSBsb29wIGF0IHRoZSBiZWdpbm5pbmcgaW5zdGVhZCBvZiBkb2luZyB0aGF0IHdoZW4gdGhlaXIg
dmVydGljYWwKKyAgICAgICAgbWV0cmljcyBhcmUgbmVlZGVkLiBXZSBjYW4gbm93IGFsc28gcmV0
cmlldmUgdmVydGljYWwgbWV0cmljcyB3aXRoIGEgc2luZ2xlIGNhbGwuCisgICAgICAgIChXZWJD
b3JlOjpSZW5kZXJNYXRoTUxTY3JpcHRzOjpnZXRCYXNlQW5kU2NyaXB0cyk6IFJlbmFtZWQgdmFs
aWRhdGVBbmRHZXRSZWZlcmVuY2VDaGlsZHJlbi4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlck1h
dGhNTFNjcmlwdHM6OmdldFNjcmlwdE1ldHJpY3NBbmRMYXlvdXRJZk5lZWRlZCk6IERlbGV0ZWQu
IFNwbGl0IGludG8KKyAgICAgICAgdmVydGljYWxQYXJhbWV0ZXJzIGFuZCB2ZXJ0aWNhbE1ldHJp
Y3MuCisgICAgICAgICogcmVuZGVyaW5nL21hdGhtbC9SZW5kZXJNYXRoTUxTY3JpcHRzLmg6IE5l
dyBzdHJ1Y3R1cmUgdG8gaGFuZGxlIHRoZSBwb2ludGVycyB0byByZWZlcmVuY2UKKyAgICAgICAg
Y2hpbGRyZW4uIFVwZGF0ZSB0aGUgc2lnbmF0dXJlIG9mIGdldEJhc2VBbmRTY3JpcHRzIHRvIHVz
ZSB0aGlzIHN0cnV0dXJlIGFuZCBnaXZlIGEgY2xlYXJlcgorICAgICAgICBuYW1lLiBVcGRhdGUg
dGhlIHNpZ25hdHVyZSBvZiBpdGFsaWNDb3JyZWN0aW9uIHRvIHVzZSB0aGlzIHN0cnVjdHVyZSB0
b28uIEFkZCBhIG5ldyBzdHJ1Y3R1cmUKKyAgICAgICAgVmVydGljYWxQYXJhbWV0ZXJzIGFuZCBk
ZWNsYXJlIHRoZSBoZWxwZXIgZnVuY3Rpb24gdG8gcmV0cmlldmUgdGhlbS4gUmVuYW1lIFNjcmlw
dE1ldHJpY3MKKyAgICAgICAgdG8gVmVydGljYWxNZXRyaWNzIGFuZCB1cGRhdGUgdGhlIHNpZ25h
dHVyZSBvZiB0aGUgZnVuY3Rpb24gbmVlZGVkIHRvIHJldHJpZXZlIGl0LgorCiAyMDE2LTA4LTI5
ICBBbGV4IENocmlzdGVuc2VuICA8YWNocmlzdGVuc2VuQHdlYmtpdC5vcmc+CiAKICAgICAgICAg
Rml4IFdpbmRvd3MgYnVpbGQgYWZ0ZXIgcjIwNTE2MQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL21hdGhtbC9SZW5kZXJNYXRoTUxTY3JpcHRzLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9tYXRobWwvUmVuZGVyTWF0aE1MU2NyaXB0cy5jcHAKaW5kZXggZjk2MjA5
NzU2NzYwOGQyMmYwYWZiYjM4NzQ0MDQwMzg1YzgwN2ZjYi4uOTAzNDA5NTlmNjE2ODE2M2ViYjlm
NWRhZDA5ODA2NDRmNzk0MGUyZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L21hdGhtbC9SZW5kZXJNYXRoTUxTY3JpcHRzLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvbWF0aG1sL1JlbmRlck1hdGhNTFNjcmlwdHMuY3BwCkBAIC03NiwxNCArNzYsMTUgQEAg
UmVuZGVyTWF0aE1MT3BlcmF0b3IqIFJlbmRlck1hdGhNTFNjcmlwdHM6OnVuZW1iZWxsaXNoZWRP
cGVyYXRvcigpCiAgICAgcmV0dXJuIGRvd25jYXN0PFJlbmRlck1hdGhNTEJsb2NrPihiYXNlKS0+
dW5lbWJlbGxpc2hlZE9wZXJhdG9yKCk7CiB9CiAKLWJvb2wgUmVuZGVyTWF0aE1MU2NyaXB0czo6
Z2V0QmFzZUFuZFNjcmlwdHMoUmVuZGVyQm94KiYgYmFzZSwgUmVuZGVyQm94KiYgZmlyc3RQb3N0
U2NyaXB0LCBSZW5kZXJCb3gqJiBmaXJzdFByZVNjcmlwdCkKK2Jvb2wgUmVuZGVyTWF0aE1MU2Ny
aXB0czo6dmFsaWRhdGVBbmRHZXRSZWZlcmVuY2VDaGlsZHJlbihSZWZlcmVuY2VDaGlsZHJlbiYg
cmVmZXJlbmNlKQogewogICAgIC8vIEFsbCBzY3JpcHRlZCBlbGVtZW50cyBtdXN0IGhhdmUgYXQg
bGVhc3Qgb25lIGNoaWxkLgogICAgIC8vIFRoZSBmaXJzdCBjaGlsZCBpcyB0aGUgYmFzZS4KLSAg
ICBiYXNlID0gZmlyc3RDaGlsZEJveCgpOwotICAgIGZpcnN0UG9zdFNjcmlwdCA9IG51bGxwdHI7
Ci0gICAgZmlyc3RQcmVTY3JpcHQgPSBudWxscHRyOwotICAgIGlmICghYmFzZSkKKyAgICByZWZl
cmVuY2UuYmFzZSA9IGZpcnN0Q2hpbGRCb3goKTsKKyAgICByZWZlcmVuY2UuZmlyc3RQb3N0U2Ny
aXB0ID0gbnVsbHB0cjsKKyAgICByZWZlcmVuY2UuZmlyc3RQcmVTY3JpcHQgPSBudWxscHRyOwor
ICAgIHJlZmVyZW5jZS5wcmVzY3JpcHREZWxpbWl0ZXIgPSBudWxscHRyOworICAgIGlmICghcmVm
ZXJlbmNlLmJhc2UpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIHN3aXRjaCAobV9zY3Jp
cHRUeXBlKSB7CkBAIC05NywxOCArOTgsMTggQEAgYm9vbCBSZW5kZXJNYXRoTUxTY3JpcHRzOjpn
ZXRCYXNlQW5kU2NyaXB0cyhSZW5kZXJCb3gqJiBiYXNlLCBSZW5kZXJCb3gqJiBmaXJzdFAKICAg
ICAgICAgLy8gPG1zdXA+IGJhc2Ugc3VwZXJzY3JpcHQgPC9tc3VwPgogICAgICAgICAvLyA8bXVu
ZGVyPiBiYXNlIHVuZGVyc2NyaXB0IDwvbXVuZGVyPgogICAgICAgICAvLyA8bW92ZXI+IGJhc2Ug
b3ZlcnNjcmlwdCA8L21vdmVyPgotICAgICAgICBmaXJzdFBvc3RTY3JpcHQgPSBiYXNlLT5uZXh0
U2libGluZ0JveCgpOwotICAgICAgICByZXR1cm4gZmlyc3RQb3N0U2NyaXB0ICYmICFpc1ByZXNj
cmlwdERlbGltaXRlcigqZmlyc3RQb3N0U2NyaXB0KSAmJiAhZmlyc3RQb3N0U2NyaXB0LT5uZXh0
U2libGluZ0JveCgpOworICAgICAgICByZWZlcmVuY2UuZmlyc3RQb3N0U2NyaXB0ID0gcmVmZXJl
bmNlLmJhc2UtPm5leHRTaWJsaW5nQm94KCk7CisgICAgICAgIHJldHVybiByZWZlcmVuY2UuZmly
c3RQb3N0U2NyaXB0ICYmICFpc1ByZXNjcmlwdERlbGltaXRlcigqcmVmZXJlbmNlLmZpcnN0UG9z
dFNjcmlwdCkgJiYgIXJlZmVyZW5jZS5maXJzdFBvc3RTY3JpcHQtPm5leHRTaWJsaW5nQm94KCk7
CiAgICAgY2FzZSBTdWJTdXA6CiAgICAgY2FzZSBVbmRlck92ZXI6IHsKICAgICAgICAgLy8gVGhl
c2UgZWxlbWVudHMgbXVzdCBoYXZlIGV4YWN0bHkgdGhyZWUgY2hpbGRyZW4uCiAgICAgICAgIC8v
IFRoZSBzZWNvbmQgYW5kIHRoaXJkIGNoaWxkcmVuIGFyZSBwb3N0c2NyaXB0cyBhbmQgdGhlcmUg
YXJlIG5vIHByZXNjcmlwdHMuCiAgICAgICAgIC8vIDxtc3Vic3VwPiBiYXNlIHN1YnNjcmlwdCBz
dXBlcnNjcmlwdCA8L21zdWJzdXA+CiAgICAgICAgIC8vIDxtdW5kZXJvdmVyPiBiYXNlIHN1YnNj
cmlwdCBzdXBlcnNjcmlwdCA8L211bmRlcm92ZXI+Ci0gICAgICAgIGZpcnN0UG9zdFNjcmlwdCA9
IGJhc2UtPm5leHRTaWJsaW5nQm94KCk7Ci0gICAgICAgIGlmICghZmlyc3RQb3N0U2NyaXB0IHx8
IGlzUHJlc2NyaXB0RGVsaW1pdGVyKCpmaXJzdFBvc3RTY3JpcHQpKQorICAgICAgICByZWZlcmVu
Y2UuZmlyc3RQb3N0U2NyaXB0ID0gcmVmZXJlbmNlLmJhc2UtPm5leHRTaWJsaW5nQm94KCk7Cisg
ICAgICAgIGlmICghcmVmZXJlbmNlLmZpcnN0UG9zdFNjcmlwdCB8fCBpc1ByZXNjcmlwdERlbGlt
aXRlcigqcmVmZXJlbmNlLmZpcnN0UG9zdFNjcmlwdCkpCiAgICAgICAgICAgICByZXR1cm4gZmFs
c2U7Ci0gICAgICAgIGF1dG8gc3VwZXJTY3JpcHQgPSBmaXJzdFBvc3RTY3JpcHQtPm5leHRTaWJs
aW5nQm94KCk7CisgICAgICAgIGF1dG8gc3VwZXJTY3JpcHQgPSByZWZlcmVuY2UuZmlyc3RQb3N0
U2NyaXB0LT5uZXh0U2libGluZ0JveCgpOwogICAgICAgICByZXR1cm4gc3VwZXJTY3JpcHQgJiYg
IWlzUHJlc2NyaXB0RGVsaW1pdGVyKCpzdXBlclNjcmlwdCkgJiYgIXN1cGVyU2NyaXB0LT5uZXh0
U2libGluZ0JveCgpOwogICAgIH0KICAgICBjYXNlIE11bHRpc2NyaXB0czogewpAQCAtMTIzLDgg
KzEyNCw4IEBAIGJvb2wgUmVuZGVyTWF0aE1MU2NyaXB0czo6Z2V0QmFzZUFuZFNjcmlwdHMoUmVu
ZGVyQm94KiYgYmFzZSwgUmVuZGVyQm94KiYgZmlyc3RQCiAgICAgICAgIC8vIGh0dHBzOi8vd3d3
LnczLm9yZy9UUi9NYXRoTUwzL2NoYXB0ZXIzLmh0bWwjcHJlc20ubW11bHRpc2NyaXB0cwogICAg
ICAgICAvLwogICAgICAgICAvLyBXZSBzZXQgdGhlIGZpcnN0IHBvc3RzY3JpcHQsIHVubGVzcyAo
c3Vic2NyaXB0IHN1cGVyc2NyaXB0KSogaXMgZW1wdHkuCi0gICAgICAgIGlmIChiYXNlLT5uZXh0
U2libGluZ0JveCgpICYmICFpc1ByZXNjcmlwdERlbGltaXRlcigqYmFzZS0+bmV4dFNpYmxpbmdC
b3goKSkpCi0gICAgICAgICAgICBmaXJzdFBvc3RTY3JpcHQgPSBiYXNlLT5uZXh0U2libGluZ0Jv
eCgpOworICAgICAgICBpZiAocmVmZXJlbmNlLmJhc2UtPm5leHRTaWJsaW5nQm94KCkgJiYgIWlz
UHJlc2NyaXB0RGVsaW1pdGVyKCpyZWZlcmVuY2UuYmFzZS0+bmV4dFNpYmxpbmdCb3goKSkpCisg
ICAgICAgICAgICByZWZlcmVuY2UuZmlyc3RQb3N0U2NyaXB0ID0gcmVmZXJlbmNlLmJhc2UtPm5l
eHRTaWJsaW5nQm94KCk7CiAKICAgICAgICAgLy8gV2UgYnJvd3NlIHRoZSBjaGlsZHJlbiBpbiBv
cmRlciB0bwogICAgICAgICAvLyAxKSBTZXQgdGhlIGZpcnN0IHByZXNjcmlwdCwgdW5sZXNzIChw
cmVzdWJzY3JpcHQgcHJlc3VwZXJzY3JpcHQpKiBpcyBlbXB0eS4KQEAgLTEzMywxMiArMTM0LDEz
IEBAIGJvb2wgUmVuZGVyTWF0aE1MU2NyaXB0czo6Z2V0QmFzZUFuZFNjcmlwdHMoUmVuZGVyQm94
KiYgYmFzZSwgUmVuZGVyQm94KiYgZmlyc3RQCiAgICAgICAgIC8vICAgYikgVGhhdCB0aGUgbGlz
dCBvZiBwcmVzY3JpcHRzIGNhbiBiZSBncm91cGVkIGludG8gcGFpcnMgb2Ygc3Vic2NyaXB0L3N1
cGVyc2NyaXB0LgogICAgICAgICAvLyAgIGMpIFRoYXQgdGhlcmUgaXMgYXQgbW9zdCBvbmUgPG1w
cmVzY3JpcHRzLz4uCiAgICAgICAgIGJvb2wgbnVtYmVyT2ZTY3JpcHRJc0V2ZW4gPSB0cnVlOwot
ICAgICAgICBmb3IgKGF1dG8gc2NyaXB0ID0gYmFzZS0+bmV4dFNpYmxpbmdCb3goKTsgc2NyaXB0
OyBzY3JpcHQgPSBzY3JpcHQtPm5leHRTaWJsaW5nQm94KCkpIHsKKyAgICAgICAgZm9yIChhdXRv
IHNjcmlwdCA9IHJlZmVyZW5jZS5iYXNlLT5uZXh0U2libGluZ0JveCgpOyBzY3JpcHQ7IHNjcmlw
dCA9IHNjcmlwdC0+bmV4dFNpYmxpbmdCb3goKSkgewogICAgICAgICAgICAgaWYgKGlzUHJlc2Ny
aXB0RGVsaW1pdGVyKCpzY3JpcHQpKSB7CiAgICAgICAgICAgICAgICAgLy8gVGhpcyBpcyBhIDxt
cHJlc2NyaXB0cy8+LiBMZXQncyBjaGVjayAyYSkgYW5kIDJjKS4KLSAgICAgICAgICAgICAgICBp
ZiAoIW51bWJlck9mU2NyaXB0SXNFdmVuIHx8IGZpcnN0UHJlU2NyaXB0KQorICAgICAgICAgICAg
ICAgIGlmICghbnVtYmVyT2ZTY3JpcHRJc0V2ZW4gfHwgcmVmZXJlbmNlLmZpcnN0UHJlU2NyaXB0
KQogICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICAgICAgZmly
c3RQcmVTY3JpcHQgPSBzY3JpcHQtPm5leHRTaWJsaW5nQm94KCk7IC8vIFdlIGRvIDEpLgorICAg
ICAgICAgICAgICAgIHJlZmVyZW5jZS5maXJzdFByZVNjcmlwdCA9IHNjcmlwdC0+bmV4dFNpYmxp
bmdCb3goKTsgLy8gV2UgZG8gMSkuCisgICAgICAgICAgICAgICAgcmVmZXJlbmNlLnByZXNjcmlw
dERlbGltaXRlciA9IHNjcmlwdDsKICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAg
ICAgIH0KICAgICAgICAgICAgIG51bWJlck9mU2NyaXB0SXNFdmVuID0gIW51bWJlck9mU2NyaXB0
SXNFdmVuOwpAQCAtMTU5LDEwICsxNjEsMTAgQEAgTGF5b3V0VW5pdCBSZW5kZXJNYXRoTUxTY3Jp
cHRzOjpzcGFjZUFmdGVyU2NyaXB0KCkKICAgICByZXR1cm4gc3R5bGUoKS5mb250Q2FzY2FkZSgp
LnNpemUoKSAvIDU7CiB9CiAKLUxheW91dFVuaXQgUmVuZGVyTWF0aE1MU2NyaXB0czo6aXRhbGlj
Q29ycmVjdGlvbihSZW5kZXJCb3gqIGJhc2UpCitMYXlvdXRVbml0IFJlbmRlck1hdGhNTFNjcmlw
dHM6Oml0YWxpY0NvcnJlY3Rpb24oY29uc3QgUmVmZXJlbmNlQ2hpbGRyZW4mIHJlZmVyZW5jZSkK
IHsKLSAgICBpZiAoaXM8UmVuZGVyTWF0aE1MQmxvY2s+KCpiYXNlKSkgewotICAgICAgICBpZiAo
YXV0byogcmVuZGVyT3BlcmF0b3IgPSBkb3duY2FzdDxSZW5kZXJNYXRoTUxCbG9jaz4oKmJhc2Up
LnVuZW1iZWxsaXNoZWRPcGVyYXRvcigpKQorICAgIGlmIChpczxSZW5kZXJNYXRoTUxCbG9jaz4o
KnJlZmVyZW5jZS5iYXNlKSkgeworICAgICAgICBpZiAoYXV0byogcmVuZGVyT3BlcmF0b3IgPSBk
b3duY2FzdDxSZW5kZXJNYXRoTUxCbG9jaz4oKnJlZmVyZW5jZS5iYXNlKS51bmVtYmVsbGlzaGVk
T3BlcmF0b3IoKSkKICAgICAgICAgICAgIHJldHVybiByZW5kZXJPcGVyYXRvci0+aXRhbGljQ29y
cmVjdGlvbigpOwogICAgIH0KICAgICByZXR1cm4gMDsKQEAgLTE3Myw0MiArMTc1LDQzIEBAIHZv
aWQgUmVuZGVyTWF0aE1MU2NyaXB0czo6Y29tcHV0ZVByZWZlcnJlZExvZ2ljYWxXaWR0aHMoKQog
ICAgIG1fbWluUHJlZmVycmVkTG9naWNhbFdpZHRoID0gMDsKICAgICBtX21heFByZWZlcnJlZExv
Z2ljYWxXaWR0aCA9IDA7CiAKLSAgICBSZW5kZXJCb3gqIGJhc2U7Ci0gICAgUmVuZGVyQm94KiBm
aXJzdFBvc3RTY3JpcHQ7Ci0gICAgUmVuZGVyQm94KiBmaXJzdFByZVNjcmlwdDsKLSAgICBpZiAo
IWdldEJhc2VBbmRTY3JpcHRzKGJhc2UsIGZpcnN0UG9zdFNjcmlwdCwgZmlyc3RQcmVTY3JpcHQp
KQorICAgIFJlZmVyZW5jZUNoaWxkcmVuIHJlZmVyZW5jZTsKKyAgICBpZiAoIXZhbGlkYXRlQW5k
R2V0UmVmZXJlbmNlQ2hpbGRyZW4ocmVmZXJlbmNlKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAg
TGF5b3V0VW5pdCBiYXNlSXRhbGljQ29ycmVjdGlvbiA9IHN0ZDo6bWluKGJhc2UtPm1heFByZWZl
cnJlZExvZ2ljYWxXaWR0aCgpLCBpdGFsaWNDb3JyZWN0aW9uKGJhc2UpKTsKKyAgICBMYXlvdXRV
bml0IGJhc2VJdGFsaWNDb3JyZWN0aW9uID0gc3RkOjptaW4ocmVmZXJlbmNlLmJhc2UtPm1heFBy
ZWZlcnJlZExvZ2ljYWxXaWR0aCgpLCBpdGFsaWNDb3JyZWN0aW9uKHJlZmVyZW5jZSkpOwogICAg
IExheW91dFVuaXQgc3BhY2UgPSBzcGFjZUFmdGVyU2NyaXB0KCk7CiAKICAgICBzd2l0Y2ggKG1f
c2NyaXB0VHlwZSkgewogICAgIGNhc2UgU3ViOgogICAgIGNhc2UgVW5kZXI6Ci0gICAgICAgIG1f
bWF4UHJlZmVycmVkTG9naWNhbFdpZHRoICs9IGJhc2UtPm1heFByZWZlcnJlZExvZ2ljYWxXaWR0
aCgpOwotICAgICAgICBtX21heFByZWZlcnJlZExvZ2ljYWxXaWR0aCArPSBzdGQ6Om1heChMYXlv
dXRVbml0KDApLCBmaXJzdFBvc3RTY3JpcHQtPm1heFByZWZlcnJlZExvZ2ljYWxXaWR0aCgpIC0g
YmFzZUl0YWxpY0NvcnJlY3Rpb24gKyBzcGFjZSk7CisgICAgICAgIG1fbWF4UHJlZmVycmVkTG9n
aWNhbFdpZHRoICs9IHJlZmVyZW5jZS5iYXNlLT5tYXhQcmVmZXJyZWRMb2dpY2FsV2lkdGgoKTsK
KyAgICAgICAgbV9tYXhQcmVmZXJyZWRMb2dpY2FsV2lkdGggKz0gc3RkOjptYXgoTGF5b3V0VW5p
dCgwKSwgcmVmZXJlbmNlLmZpcnN0UG9zdFNjcmlwdC0+bWF4UHJlZmVycmVkTG9naWNhbFdpZHRo
KCkgLSBiYXNlSXRhbGljQ29ycmVjdGlvbiArIHNwYWNlKTsKICAgICAgICAgYnJlYWs7CiAgICAg
Y2FzZSBTdXBlcjoKICAgICBjYXNlIE92ZXI6Ci0gICAgICAgIG1fbWF4UHJlZmVycmVkTG9naWNh
bFdpZHRoICs9IGJhc2UtPm1heFByZWZlcnJlZExvZ2ljYWxXaWR0aCgpOwotICAgICAgICBtX21h
eFByZWZlcnJlZExvZ2ljYWxXaWR0aCArPSBzdGQ6Om1heChMYXlvdXRVbml0KDApLCBmaXJzdFBv
c3RTY3JpcHQtPm1heFByZWZlcnJlZExvZ2ljYWxXaWR0aCgpICsgc3BhY2UpOworICAgICAgICBt
X21heFByZWZlcnJlZExvZ2ljYWxXaWR0aCArPSByZWZlcmVuY2UuYmFzZS0+bWF4UHJlZmVycmVk
TG9naWNhbFdpZHRoKCk7CisgICAgICAgIG1fbWF4UHJlZmVycmVkTG9naWNhbFdpZHRoICs9IHN0
ZDo6bWF4KExheW91dFVuaXQoMCksIHJlZmVyZW5jZS5maXJzdFBvc3RTY3JpcHQtPm1heFByZWZl
cnJlZExvZ2ljYWxXaWR0aCgpICsgc3BhY2UpOwogICAgICAgICBicmVhazsKICAgICBjYXNlIFN1
YlN1cDoKICAgICBjYXNlIFVuZGVyT3ZlcjoKICAgICBjYXNlIE11bHRpc2NyaXB0czogewotICAg
ICAgICBSZW5kZXJCb3gqIHN1cFNjcmlwdDsKLSAgICAgICAgZm9yIChhdXRvKiBzdWJTY3JpcHQg
PSBmaXJzdFByZVNjcmlwdDsgc3ViU2NyaXB0OyBzdWJTY3JpcHQgPSBzdXBTY3JpcHQtPm5leHRT
aWJsaW5nQm94KCkpIHsKLSAgICAgICAgICAgIHN1cFNjcmlwdCA9IHN1YlNjcmlwdC0+bmV4dFNp
YmxpbmdCb3goKTsKKyAgICAgICAgYXV0byBzdWJTY3JpcHQgPSByZWZlcmVuY2UuZmlyc3RQcmVT
Y3JpcHQ7CisgICAgICAgIHdoaWxlIChzdWJTY3JpcHQpIHsKKyAgICAgICAgICAgIGF1dG8gc3Vw
U2NyaXB0ID0gc3ViU2NyaXB0LT5uZXh0U2libGluZ0JveCgpOwogICAgICAgICAgICAgQVNTRVJU
KHN1cFNjcmlwdCk7CiAgICAgICAgICAgICBMYXlvdXRVbml0IHN1YlN1cFBhaXJXaWR0aCA9IHN0
ZDo6bWF4KHN1YlNjcmlwdC0+bWF4UHJlZmVycmVkTG9naWNhbFdpZHRoKCksIHN1cFNjcmlwdC0+
bWF4UHJlZmVycmVkTG9naWNhbFdpZHRoKCkpOwogICAgICAgICAgICAgbV9tYXhQcmVmZXJyZWRM
b2dpY2FsV2lkdGggKz0gc3ViU3VwUGFpcldpZHRoICsgc3BhY2U7CisgICAgICAgICAgICBzdWJT
Y3JpcHQgPSBzdXBTY3JpcHQtPm5leHRTaWJsaW5nQm94KCk7CiAgICAgICAgIH0KLSAgICAgICAg
bV9tYXhQcmVmZXJyZWRMb2dpY2FsV2lkdGggKz0gYmFzZS0+bWF4UHJlZmVycmVkTG9naWNhbFdp
ZHRoKCk7Ci0gICAgICAgIGZvciAoYXV0byogc3ViU2NyaXB0ID0gZmlyc3RQb3N0U2NyaXB0OyBz
dWJTY3JpcHQgJiYgIWlzUHJlc2NyaXB0RGVsaW1pdGVyKCpzdWJTY3JpcHQpOyBzdWJTY3JpcHQg
PSBzdXBTY3JpcHQtPm5leHRTaWJsaW5nQm94KCkpIHsKLSAgICAgICAgICAgIHN1cFNjcmlwdCA9
IHN1YlNjcmlwdC0+bmV4dFNpYmxpbmdCb3goKTsKKyAgICAgICAgbV9tYXhQcmVmZXJyZWRMb2dp
Y2FsV2lkdGggKz0gcmVmZXJlbmNlLmJhc2UtPm1heFByZWZlcnJlZExvZ2ljYWxXaWR0aCgpOwor
ICAgICAgICBzdWJTY3JpcHQgPSByZWZlcmVuY2UuZmlyc3RQb3N0U2NyaXB0OworICAgICAgICB3
aGlsZSAoc3ViU2NyaXB0ICYmIHN1YlNjcmlwdCAhPSByZWZlcmVuY2UucHJlc2NyaXB0RGVsaW1p
dGVyKSB7CisgICAgICAgICAgICBhdXRvIHN1cFNjcmlwdCA9IHN1YlNjcmlwdC0+bmV4dFNpYmxp
bmdCb3goKTsKICAgICAgICAgICAgIEFTU0VSVChzdXBTY3JpcHQpOwogICAgICAgICAgICAgTGF5
b3V0VW5pdCBzdWJTdXBQYWlyV2lkdGggPSBzdGQ6Om1heChzdGQ6Om1heChMYXlvdXRVbml0KDAp
LCBzdWJTY3JpcHQtPm1heFByZWZlcnJlZExvZ2ljYWxXaWR0aCgpIC0gYmFzZUl0YWxpY0NvcnJl
Y3Rpb24pLCBzdXBTY3JpcHQtPm1heFByZWZlcnJlZExvZ2ljYWxXaWR0aCgpKTsKICAgICAgICAg
ICAgIG1fbWF4UHJlZmVycmVkTG9naWNhbFdpZHRoICs9IHN1YlN1cFBhaXJXaWR0aCArIHNwYWNl
OworICAgICAgICAgICAgc3ViU2NyaXB0ID0gc3VwU2NyaXB0LT5uZXh0U2libGluZ0JveCgpOwog
ICAgICAgICB9CiAgICAgfQogICAgIH0KQEAgLTIxNiw0MyArMjE5LDQ3IEBAIHZvaWQgUmVuZGVy
TWF0aE1MU2NyaXB0czo6Y29tcHV0ZVByZWZlcnJlZExvZ2ljYWxXaWR0aHMoKQogICAgIG1fbWlu
UHJlZmVycmVkTG9naWNhbFdpZHRoID0gbV9tYXhQcmVmZXJyZWRMb2dpY2FsV2lkdGg7CiB9CiAK
LXZvaWQgUmVuZGVyTWF0aE1MU2NyaXB0czo6Z2V0U2NyaXB0TWV0cmljc0FuZExheW91dElmTmVl
ZGVkKFJlbmRlckJveCogYmFzZSwgUmVuZGVyQm94KiBzY3JpcHQsIFNjcmlwdE1ldHJpY3MmIG1l
dHJpY3MpCitSZW5kZXJNYXRoTUxTY3JpcHRzOjpWZXJ0aWNhbFBhcmFtZXRlcnMgUmVuZGVyTWF0
aE1MU2NyaXB0czo6dmVydGljYWxQYXJhbWV0ZXJzKCkgY29uc3QKIHsKLSAgICBMYXlvdXRVbml0
IGJhc2VBc2NlbnQgPSBhc2NlbnRGb3JDaGlsZCgqYmFzZSk7Ci0gICAgTGF5b3V0VW5pdCBiYXNl
RGVzY2VudCA9IGJhc2UtPmxvZ2ljYWxIZWlnaHQoKSAtIGJhc2VBc2NlbnQ7Ci0gICAgTGF5b3V0
VW5pdCBzdWJzY3JpcHRTaGlmdERvd247Ci0gICAgTGF5b3V0VW5pdCBzdXBlcnNjcmlwdFNoaWZ0
VXA7Ci0gICAgTGF5b3V0VW5pdCBzdWJzY3JpcHRCYXNlbGluZURyb3BNaW47Ci0gICAgTGF5b3V0
VW5pdCBzdXBlclNjcmlwdEJhc2VsaW5lRHJvcE1heDsKLSAgICBMYXlvdXRVbml0IHN1YlN1cGVy
c2NyaXB0R2FwTWluOwotICAgIExheW91dFVuaXQgc3VwZXJzY3JpcHRCb3R0b21NaW47Ci0gICAg
TGF5b3V0VW5pdCBzdWJzY3JpcHRUb3BNYXg7Ci0gICAgTGF5b3V0VW5pdCBzdXBlcnNjcmlwdEJv
dHRvbU1heFdpdGhTdWJzY3JpcHQ7Ci0KKyAgICBWZXJ0aWNhbFBhcmFtZXRlcnMgcGFyYW1ldGVy
czsKICAgICBjb25zdCBhdXRvJiBwcmltYXJ5Rm9udCA9IHN0eWxlKCkuZm9udENhc2NhZGUoKS5w
cmltYXJ5Rm9udCgpOwogICAgIGlmIChhdXRvKiBtYXRoRGF0YSA9IHByaW1hcnlGb250Lm1hdGhE
YXRhKCkpIHsKLSAgICAgICAgc3Vic2NyaXB0U2hpZnREb3duID0gbWF0aERhdGEtPmdldE1hdGhD
b25zdGFudChwcmltYXJ5Rm9udCwgT3BlblR5cGVNYXRoRGF0YTo6U3Vic2NyaXB0U2hpZnREb3du
KTsKLSAgICAgICAgc3VwZXJzY3JpcHRTaGlmdFVwID0gbWF0aERhdGEtPmdldE1hdGhDb25zdGFu
dChwcmltYXJ5Rm9udCwgT3BlblR5cGVNYXRoRGF0YTo6U3VwZXJzY3JpcHRTaGlmdFVwKTsKLSAg
ICAgICAgc3Vic2NyaXB0QmFzZWxpbmVEcm9wTWluID0gbWF0aERhdGEtPmdldE1hdGhDb25zdGFu
dChwcmltYXJ5Rm9udCwgT3BlblR5cGVNYXRoRGF0YTo6U3Vic2NyaXB0QmFzZWxpbmVEcm9wTWlu
KTsKLSAgICAgICAgc3VwZXJTY3JpcHRCYXNlbGluZURyb3BNYXggPSBtYXRoRGF0YS0+Z2V0TWF0
aENvbnN0YW50KHByaW1hcnlGb250LCBPcGVuVHlwZU1hdGhEYXRhOjpTdXBlcnNjcmlwdEJhc2Vs
aW5lRHJvcE1heCk7Ci0gICAgICAgIHN1YlN1cGVyc2NyaXB0R2FwTWluID0gbWF0aERhdGEtPmdl
dE1hdGhDb25zdGFudChwcmltYXJ5Rm9udCwgT3BlblR5cGVNYXRoRGF0YTo6U3ViU3VwZXJzY3Jp
cHRHYXBNaW4pOwotICAgICAgICBzdXBlcnNjcmlwdEJvdHRvbU1pbiA9IG1hdGhEYXRhLT5nZXRN
YXRoQ29uc3RhbnQocHJpbWFyeUZvbnQsIE9wZW5UeXBlTWF0aERhdGE6OlN1cGVyc2NyaXB0Qm90
dG9tTWluKTsKLSAgICAgICAgc3Vic2NyaXB0VG9wTWF4ID0gbWF0aERhdGEtPmdldE1hdGhDb25z
dGFudChwcmltYXJ5Rm9udCwgT3BlblR5cGVNYXRoRGF0YTo6U3Vic2NyaXB0VG9wTWF4KTsKLSAg
ICAgICAgc3VwZXJzY3JpcHRCb3R0b21NYXhXaXRoU3Vic2NyaXB0ID0gbWF0aERhdGEtPmdldE1h
dGhDb25zdGFudChwcmltYXJ5Rm9udCwgT3BlblR5cGVNYXRoRGF0YTo6U3VwZXJzY3JpcHRCb3R0
b21NYXhXaXRoU3Vic2NyaXB0KTsKKyAgICAgICAgcGFyYW1ldGVycy5zdWJzY3JpcHRTaGlmdERv
d24gPSBtYXRoRGF0YS0+Z2V0TWF0aENvbnN0YW50KHByaW1hcnlGb250LCBPcGVuVHlwZU1hdGhE
YXRhOjpTdWJzY3JpcHRTaGlmdERvd24pOworICAgICAgICBwYXJhbWV0ZXJzLnN1cGVyc2NyaXB0
U2hpZnRVcCA9IG1hdGhEYXRhLT5nZXRNYXRoQ29uc3RhbnQocHJpbWFyeUZvbnQsIE9wZW5UeXBl
TWF0aERhdGE6OlN1cGVyc2NyaXB0U2hpZnRVcCk7CisgICAgICAgIHBhcmFtZXRlcnMuc3Vic2Ny
aXB0QmFzZWxpbmVEcm9wTWluID0gbWF0aERhdGEtPmdldE1hdGhDb25zdGFudChwcmltYXJ5Rm9u
dCwgT3BlblR5cGVNYXRoRGF0YTo6U3Vic2NyaXB0QmFzZWxpbmVEcm9wTWluKTsKKyAgICAgICAg
cGFyYW1ldGVycy5zdXBlclNjcmlwdEJhc2VsaW5lRHJvcE1heCA9IG1hdGhEYXRhLT5nZXRNYXRo
Q29uc3RhbnQocHJpbWFyeUZvbnQsIE9wZW5UeXBlTWF0aERhdGE6OlN1cGVyc2NyaXB0QmFzZWxp
bmVEcm9wTWF4KTsKKyAgICAgICAgcGFyYW1ldGVycy5zdWJTdXBlcnNjcmlwdEdhcE1pbiA9IG1h
dGhEYXRhLT5nZXRNYXRoQ29uc3RhbnQocHJpbWFyeUZvbnQsIE9wZW5UeXBlTWF0aERhdGE6OlN1
YlN1cGVyc2NyaXB0R2FwTWluKTsKKyAgICAgICAgcGFyYW1ldGVycy5zdXBlcnNjcmlwdEJvdHRv
bU1pbiA9IG1hdGhEYXRhLT5nZXRNYXRoQ29uc3RhbnQocHJpbWFyeUZvbnQsIE9wZW5UeXBlTWF0
aERhdGE6OlN1cGVyc2NyaXB0Qm90dG9tTWluKTsKKyAgICAgICAgcGFyYW1ldGVycy5zdWJzY3Jp
cHRUb3BNYXggPSBtYXRoRGF0YS0+Z2V0TWF0aENvbnN0YW50KHByaW1hcnlGb250LCBPcGVuVHlw
ZU1hdGhEYXRhOjpTdWJzY3JpcHRUb3BNYXgpOworICAgICAgICBwYXJhbWV0ZXJzLnN1cGVyc2Ny
aXB0Qm90dG9tTWF4V2l0aFN1YnNjcmlwdCA9IG1hdGhEYXRhLT5nZXRNYXRoQ29uc3RhbnQocHJp
bWFyeUZvbnQsIE9wZW5UeXBlTWF0aERhdGE6OlN1cGVyc2NyaXB0Qm90dG9tTWF4V2l0aFN1YnNj
cmlwdCk7CiAgICAgfSBlbHNlIHsKICAgICAgICAgLy8gRGVmYXVsdCBoZXVyaXN0aWMgdmFsdWVz
IHdoZW4geW91IGRvIG5vdCBoYXZlIGEgZm9udC4KLSAgICAgICAgc3Vic2NyaXB0U2hpZnREb3du
ID0gc3R5bGUoKS5mb250TWV0cmljcygpLnhIZWlnaHQoKSAvIDM7Ci0gICAgICAgIHN1cGVyc2Ny
aXB0U2hpZnRVcCA9IHN0eWxlKCkuZm9udE1ldHJpY3MoKS54SGVpZ2h0KCk7Ci0gICAgICAgIHN1
YnNjcmlwdEJhc2VsaW5lRHJvcE1pbiA9IHN0eWxlKCkuZm9udE1ldHJpY3MoKS54SGVpZ2h0KCkg
LyAyOwotICAgICAgICBzdXBlclNjcmlwdEJhc2VsaW5lRHJvcE1heCA9IHN0eWxlKCkuZm9udE1l
dHJpY3MoKS54SGVpZ2h0KCkgLyAyOwotICAgICAgICBzdWJTdXBlcnNjcmlwdEdhcE1pbiA9IHN0
eWxlKCkuZm9udENhc2NhZGUoKS5zaXplKCkgLyA1OwotICAgICAgICBzdXBlcnNjcmlwdEJvdHRv
bU1pbiA9IHN0eWxlKCkuZm9udE1ldHJpY3MoKS54SGVpZ2h0KCkgLyA0OwotICAgICAgICBzdWJz
Y3JpcHRUb3BNYXggPSA0ICogc3R5bGUoKS5mb250TWV0cmljcygpLnhIZWlnaHQoKSAvIDU7Ci0g
ICAgICAgIHN1cGVyc2NyaXB0Qm90dG9tTWF4V2l0aFN1YnNjcmlwdCA9IDQgKiBzdHlsZSgpLmZv
bnRNZXRyaWNzKCkueEhlaWdodCgpIC8gNTsKKyAgICAgICAgcGFyYW1ldGVycy5zdWJzY3JpcHRT
aGlmdERvd24gPSBzdHlsZSgpLmZvbnRNZXRyaWNzKCkueEhlaWdodCgpIC8gMzsKKyAgICAgICAg
cGFyYW1ldGVycy5zdXBlcnNjcmlwdFNoaWZ0VXAgPSBzdHlsZSgpLmZvbnRNZXRyaWNzKCkueEhl
aWdodCgpOworICAgICAgICBwYXJhbWV0ZXJzLnN1YnNjcmlwdEJhc2VsaW5lRHJvcE1pbiA9IHN0
eWxlKCkuZm9udE1ldHJpY3MoKS54SGVpZ2h0KCkgLyAyOworICAgICAgICBwYXJhbWV0ZXJzLnN1
cGVyU2NyaXB0QmFzZWxpbmVEcm9wTWF4ID0gc3R5bGUoKS5mb250TWV0cmljcygpLnhIZWlnaHQo
KSAvIDI7CisgICAgICAgIHBhcmFtZXRlcnMuc3ViU3VwZXJzY3JpcHRHYXBNaW4gPSBzdHlsZSgp
LmZvbnRDYXNjYWRlKCkuc2l6ZSgpIC8gNTsKKyAgICAgICAgcGFyYW1ldGVycy5zdXBlcnNjcmlw
dEJvdHRvbU1pbiA9IHN0eWxlKCkuZm9udE1ldHJpY3MoKS54SGVpZ2h0KCkgLyA0OworICAgICAg
ICBwYXJhbWV0ZXJzLnN1YnNjcmlwdFRvcE1heCA9IDQgKiBzdHlsZSgpLmZvbnRNZXRyaWNzKCku
eEhlaWdodCgpIC8gNTsKKyAgICAgICAgcGFyYW1ldGVycy5zdXBlcnNjcmlwdEJvdHRvbU1heFdp
dGhTdWJzY3JpcHQgPSA0ICogc3R5bGUoKS5mb250TWV0cmljcygpLnhIZWlnaHQoKSAvIDU7CiAg
ICAgfQorICAgIHJldHVybiBwYXJhbWV0ZXJzOworfQorCitSZW5kZXJNYXRoTUxTY3JpcHRzOjpW
ZXJ0aWNhbE1ldHJpY3MgUmVuZGVyTWF0aE1MU2NyaXB0czo6dmVydGljYWxNZXRyaWNzKGNvbnN0
IFJlZmVyZW5jZUNoaWxkcmVuJiByZWZlcmVuY2UpCit7CisgICAgVmVydGljYWxQYXJhbWV0ZXJz
IHBhcmFtZXRlcnMgPSB2ZXJ0aWNhbFBhcmFtZXRlcnMoKTsKKworICAgIFZlcnRpY2FsTWV0cmlj
cyBtZXRyaWNzOworICAgIG1ldHJpY3Muc3ViU2hpZnQgPSAwOworICAgIG1ldHJpY3Muc3VwU2hp
ZnQgPSAwOworICAgIG1ldHJpY3MuZGVzY2VudCA9IDA7CisgICAgbWV0cmljcy5hc2NlbnQgPSAw
OwogCisgICAgTGF5b3V0VW5pdCBiYXNlQXNjZW50ID0gYXNjZW50Rm9yQ2hpbGQoKnJlZmVyZW5j
ZS5iYXNlKTsKKyAgICBMYXlvdXRVbml0IGJhc2VEZXNjZW50ID0gcmVmZXJlbmNlLmJhc2UtPmxv
Z2ljYWxIZWlnaHQoKSAtIGJhc2VBc2NlbnQ7CiAgICAgaWYgKG1fc2NyaXB0VHlwZSA9PSBTdWIg
fHwgbV9zY3JpcHRUeXBlID09IFN1YlN1cCB8fCBtX3NjcmlwdFR5cGUgPT0gTXVsdGlzY3JpcHRz
IHx8IG1fc2NyaXB0VHlwZSA9PSBVbmRlciB8fCBtX3NjcmlwdFR5cGUgPT0gVW5kZXJPdmVyKSB7
Ci0gICAgICAgIG1ldHJpY3Muc3ViU2hpZnQgPSBzdGQ6Om1heChzdWJzY3JpcHRTaGlmdERvd24s
IGJhc2VEZXNjZW50ICsgc3Vic2NyaXB0QmFzZWxpbmVEcm9wTWluKTsKKyAgICAgICAgbWV0cmlj
cy5zdWJTaGlmdCA9IHN0ZDo6bWF4KHBhcmFtZXRlcnMuc3Vic2NyaXB0U2hpZnREb3duLCBiYXNl
RGVzY2VudCArIHBhcmFtZXRlcnMuc3Vic2NyaXB0QmFzZWxpbmVEcm9wTWluKTsKICAgICAgICAg
aWYgKCFpc1JlbmRlck1hdGhNTFVuZGVyT3ZlcigpKSB7CiAgICAgICAgICAgICAvLyBJdCBpcyBu
b3QgY2xlYXIgaG93IHRvIGludGVycHJldCB0aGUgZGVmYXVsdCBzaGlmdCBhbmQgaXQgaXMgbm90
IGF2YWlsYWJsZSB5ZXQgYW55d2F5LgogICAgICAgICAgICAgLy8gSGVuY2Ugd2UganVzdCBwYXNz
IDAgYXMgdGhlIGRlZmF1bHQgdmFsdWUgdXNlZCBieSB0b1VzZXJVbml0cy4KQEAgLTI2MSw3ICsy
NjgsNyBAQCB2b2lkIFJlbmRlck1hdGhNTFNjcmlwdHM6OmdldFNjcmlwdE1ldHJpY3NBbmRMYXlv
dXRJZk5lZWRlZChSZW5kZXJCb3gqIGJhc2UsIFJlbgogICAgICAgICB9CiAgICAgfQogICAgIGlm
IChtX3NjcmlwdFR5cGUgPT0gU3VwZXIgfHwgbV9zY3JpcHRUeXBlID09IFN1YlN1cCB8fCBtX3Nj
cmlwdFR5cGUgPT0gTXVsdGlzY3JpcHRzICB8fCBtX3NjcmlwdFR5cGUgPT0gT3ZlciB8fCBtX3Nj
cmlwdFR5cGUgPT0gVW5kZXJPdmVyKSB7Ci0gICAgICAgIG1ldHJpY3Muc3VwU2hpZnQgPSBzdGQ6
Om1heChzdXBlcnNjcmlwdFNoaWZ0VXAsIGJhc2VBc2NlbnQgLSBzdXBlclNjcmlwdEJhc2VsaW5l
RHJvcE1heCk7CisgICAgICAgIG1ldHJpY3Muc3VwU2hpZnQgPSBzdGQ6Om1heChwYXJhbWV0ZXJz
LnN1cGVyc2NyaXB0U2hpZnRVcCwgYmFzZUFzY2VudCAtIHBhcmFtZXRlcnMuc3VwZXJTY3JpcHRC
YXNlbGluZURyb3BNYXgpOwogICAgICAgICBpZiAoIWlzUmVuZGVyTWF0aE1MVW5kZXJPdmVyKCkp
IHsKICAgICAgICAgICAgIC8vIEl0IGlzIG5vdCBjbGVhciBob3cgdG8gaW50ZXJwcmV0IHRoZSBk
ZWZhdWx0IHNoaWZ0IGFuZCBpdCBpcyBub3QgYXZhaWxhYmxlIHlldCBhbnl3YXkuCiAgICAgICAg
ICAgICAvLyBIZW5jZSB3ZSBqdXN0IHBhc3MgMCBhcyB0aGUgZGVmYXVsdCB2YWx1ZSB1c2VkIGJ5
IHRvVXNlclVuaXRzLgpAQCAtMjczLDYxICsyODAsNjggQEAgdm9pZCBSZW5kZXJNYXRoTUxTY3Jp
cHRzOjpnZXRTY3JpcHRNZXRyaWNzQW5kTGF5b3V0SWZOZWVkZWQoUmVuZGVyQm94KiBiYXNlLCBS
ZW4KICAgICBzd2l0Y2ggKG1fc2NyaXB0VHlwZSkgewogICAgIGNhc2UgU3ViOgogICAgIGNhc2Ug
VW5kZXI6IHsKLSAgICAgICAgc2NyaXB0LT5sYXlvdXRJZk5lZWRlZCgpOwotICAgICAgICBMYXlv
dXRVbml0IHN1YkFzY2VudCA9IGFzY2VudEZvckNoaWxkKCpzY3JpcHQpOwotICAgICAgICBMYXlv
dXRVbml0IHN1YkRlc2NlbnQgPSBzY3JpcHQtPmxvZ2ljYWxIZWlnaHQoKSAtIHN1YkFzY2VudDsK
KyAgICAgICAgTGF5b3V0VW5pdCBzdWJBc2NlbnQgPSBhc2NlbnRGb3JDaGlsZCgqcmVmZXJlbmNl
LmZpcnN0UG9zdFNjcmlwdCk7CisgICAgICAgIExheW91dFVuaXQgc3ViRGVzY2VudCA9IHJlZmVy
ZW5jZS5maXJzdFBvc3RTY3JpcHQtPmxvZ2ljYWxIZWlnaHQoKSAtIHN1YkFzY2VudDsKICAgICAg
ICAgbWV0cmljcy5kZXNjZW50ID0gc3ViRGVzY2VudDsKLSAgICAgICAgbWV0cmljcy5zdWJTaGlm
dCA9IHN0ZDo6bWF4KG1ldHJpY3Muc3ViU2hpZnQsIHN1YkFzY2VudCAtIHN1YnNjcmlwdFRvcE1h
eCk7CisgICAgICAgIG1ldHJpY3Muc3ViU2hpZnQgPSBzdGQ6Om1heChtZXRyaWNzLnN1YlNoaWZ0
LCBzdWJBc2NlbnQgLSBwYXJhbWV0ZXJzLnN1YnNjcmlwdFRvcE1heCk7CiAgICAgfQogICAgICAg
ICBicmVhazsKICAgICBjYXNlIFN1cGVyOgogICAgIGNhc2UgT3ZlcjogewotICAgICAgICBzY3Jp
cHQtPmxheW91dElmTmVlZGVkKCk7Ci0gICAgICAgIExheW91dFVuaXQgc3VwQXNjZW50ID0gYXNj
ZW50Rm9yQ2hpbGQoKnNjcmlwdCk7Ci0gICAgICAgIExheW91dFVuaXQgc3VwRGVzY2VudCA9IHNj
cmlwdC0+bG9naWNhbEhlaWdodCgpIC0gc3VwQXNjZW50OworICAgICAgICBMYXlvdXRVbml0IHN1
cEFzY2VudCA9IGFzY2VudEZvckNoaWxkKCpyZWZlcmVuY2UuZmlyc3RQb3N0U2NyaXB0KTsKKyAg
ICAgICAgTGF5b3V0VW5pdCBzdXBEZXNjZW50ID0gcmVmZXJlbmNlLmZpcnN0UG9zdFNjcmlwdC0+
bG9naWNhbEhlaWdodCgpIC0gc3VwQXNjZW50OwogICAgICAgICBtZXRyaWNzLmFzY2VudCA9IHN1
cEFzY2VudDsKLSAgICAgICAgbWV0cmljcy5zdXBTaGlmdCA9IHN0ZDo6bWF4KG1ldHJpY3Muc3Vw
U2hpZnQsIHN1cGVyc2NyaXB0Qm90dG9tTWluICsgc3VwRGVzY2VudCk7CisgICAgICAgIG1ldHJp
Y3Muc3VwU2hpZnQgPSBzdGQ6Om1heChtZXRyaWNzLnN1cFNoaWZ0LCBwYXJhbWV0ZXJzLnN1cGVy
c2NyaXB0Qm90dG9tTWluICsgc3VwRGVzY2VudCk7CiAgICAgfQogICAgICAgICBicmVhazsKICAg
ICBjYXNlIFN1YlN1cDoKICAgICBjYXNlIFVuZGVyT3ZlcjoKICAgICBjYXNlIE11bHRpc2NyaXB0
czogewotICAgICAgICBSZW5kZXJCb3gqIHN1cFNjcmlwdDsKLSAgICAgICAgZm9yIChhdXRvKiBz
dWJTY3JpcHQgPSBzY3JpcHQ7IHN1YlNjcmlwdCAmJiAhaXNQcmVzY3JpcHREZWxpbWl0ZXIoKnN1
YlNjcmlwdCk7IHN1YlNjcmlwdCA9IHN1cFNjcmlwdC0+bmV4dFNpYmxpbmdCb3goKSkgewotICAg
ICAgICAgICAgc3VwU2NyaXB0ID0gc3ViU2NyaXB0LT5uZXh0U2libGluZ0JveCgpOworICAgICAg
ICAvLyBGSVhNRTogV2Ugc2hvdWxkIG1vdmUgdGhlIGNvZGUgdXBkYXRpbmcgVmVydGljYWxNZXRy
aWNzIGZvciBlYWNoIHN1Yi9zdXAgcGFpciBpbiBhIGhlbHBlcgorICAgICAgICAvLyBmdW5jdGlv
bi4gVGhhdCB3YXksIFN1YlN1cC9VbmRlck92ZXIgY2FuIGp1c3QgbWFrZSBvbmUgY2FsbCBhbmQg
dGhlIGxvb3AgZm9yIE11bHRpc2NyaXB0cworICAgICAgICAvLyBjYW4gYmUgcmV3cml0dGVuIGlu
IGEgbW9yZSByZWFkYWJsZS4KKyAgICAgICAgYXV0byBzdWJTY3JpcHQgPSByZWZlcmVuY2UuZmly
c3RQb3N0U2NyaXB0OworICAgICAgICBpZiAoIXN1YlNjcmlwdCkKKyAgICAgICAgICAgIHN1YlNj
cmlwdCA9IHJlZmVyZW5jZS5maXJzdFByZVNjcmlwdDsKKyAgICAgICAgd2hpbGUgKHN1YlNjcmlw
dCkgeworICAgICAgICAgICAgYXV0byBzdXBTY3JpcHQgPSBzdWJTY3JpcHQtPm5leHRTaWJsaW5n
Qm94KCk7CiAgICAgICAgICAgICBBU1NFUlQoc3VwU2NyaXB0KTsKLSAgICAgICAgICAgIHN1YlNj
cmlwdC0+bGF5b3V0SWZOZWVkZWQoKTsKLSAgICAgICAgICAgIHN1cFNjcmlwdC0+bGF5b3V0SWZO
ZWVkZWQoKTsKICAgICAgICAgICAgIExheW91dFVuaXQgc3ViQXNjZW50ID0gYXNjZW50Rm9yQ2hp
bGQoKnN1YlNjcmlwdCk7CiAgICAgICAgICAgICBMYXlvdXRVbml0IHN1YkRlc2NlbnQgPSBzdWJT
Y3JpcHQtPmxvZ2ljYWxIZWlnaHQoKSAtIHN1YkFzY2VudDsKICAgICAgICAgICAgIExheW91dFVu
aXQgc3VwQXNjZW50ID0gYXNjZW50Rm9yQ2hpbGQoKnN1cFNjcmlwdCk7CiAgICAgICAgICAgICBM
YXlvdXRVbml0IHN1cERlc2NlbnQgPSBzdXBTY3JpcHQtPmxvZ2ljYWxIZWlnaHQoKSAtIHN1cEFz
Y2VudDsKICAgICAgICAgICAgIG1ldHJpY3MuYXNjZW50ID0gc3RkOjptYXgobWV0cmljcy5hc2Nl
bnQsIHN1cEFzY2VudCk7CiAgICAgICAgICAgICBtZXRyaWNzLmRlc2NlbnQgPSBzdGQ6Om1heCht
ZXRyaWNzLmRlc2NlbnQsIHN1YkRlc2NlbnQpOwotICAgICAgICAgICAgTGF5b3V0VW5pdCBzdWJT
Y3JpcHRTaGlmdCA9IHN0ZDo6bWF4KHN1YnNjcmlwdFNoaWZ0RG93biwgYmFzZURlc2NlbnQgKyBz
dWJzY3JpcHRCYXNlbGluZURyb3BNaW4pOwotICAgICAgICAgICAgc3ViU2NyaXB0U2hpZnQgPSBz
dGQ6Om1heChzdWJTY3JpcHRTaGlmdCwgc3ViQXNjZW50IC0gc3Vic2NyaXB0VG9wTWF4KTsKLSAg
ICAgICAgICAgIExheW91dFVuaXQgc3VwU2NyaXB0U2hpZnQgPSBzdGQ6Om1heChzdXBlcnNjcmlw
dFNoaWZ0VXAsIGJhc2VBc2NlbnQgLSBzdXBlclNjcmlwdEJhc2VsaW5lRHJvcE1heCk7Ci0gICAg
ICAgICAgICBzdXBTY3JpcHRTaGlmdCA9IHN0ZDo6bWF4KHN1cFNjcmlwdFNoaWZ0LCBzdXBlcnNj
cmlwdEJvdHRvbU1pbiArIHN1cERlc2NlbnQpOworICAgICAgICAgICAgTGF5b3V0VW5pdCBzdWJT
Y3JpcHRTaGlmdCA9IHN0ZDo6bWF4KHBhcmFtZXRlcnMuc3Vic2NyaXB0U2hpZnREb3duLCBiYXNl
RGVzY2VudCArIHBhcmFtZXRlcnMuc3Vic2NyaXB0QmFzZWxpbmVEcm9wTWluKTsKKyAgICAgICAg
ICAgIHN1YlNjcmlwdFNoaWZ0ID0gc3RkOjptYXgoc3ViU2NyaXB0U2hpZnQsIHN1YkFzY2VudCAt
IHBhcmFtZXRlcnMuc3Vic2NyaXB0VG9wTWF4KTsKKyAgICAgICAgICAgIExheW91dFVuaXQgc3Vw
U2NyaXB0U2hpZnQgPSBzdGQ6Om1heChwYXJhbWV0ZXJzLnN1cGVyc2NyaXB0U2hpZnRVcCwgYmFz
ZUFzY2VudCAtIHBhcmFtZXRlcnMuc3VwZXJTY3JpcHRCYXNlbGluZURyb3BNYXgpOworICAgICAg
ICAgICAgc3VwU2NyaXB0U2hpZnQgPSBzdGQ6Om1heChzdXBTY3JpcHRTaGlmdCwgcGFyYW1ldGVy
cy5zdXBlcnNjcmlwdEJvdHRvbU1pbiArIHN1cERlc2NlbnQpOwogCiAgICAgICAgICAgICBMYXlv
dXRVbml0IHN1YlN1cGVyc2NyaXB0R2FwID0gKHN1YlNjcmlwdFNoaWZ0IC0gc3ViQXNjZW50KSAr
IChzdXBTY3JpcHRTaGlmdCAtIHN1cERlc2NlbnQpOwotICAgICAgICAgICAgaWYgKHN1YlN1cGVy
c2NyaXB0R2FwIDwgc3ViU3VwZXJzY3JpcHRHYXBNaW4pIHsKKyAgICAgICAgICAgIGlmIChzdWJT
dXBlcnNjcmlwdEdhcCA8IHBhcmFtZXRlcnMuc3ViU3VwZXJzY3JpcHRHYXBNaW4pIHsKICAgICAg
ICAgICAgICAgICAvLyBGaXJzdCwgd2UgdHJ5IGFuZCBwdXNoIHRoZSBzdXBlcnNjcmlwdCB1cC4K
LSAgICAgICAgICAgICAgICBMYXlvdXRVbml0IGRlbHRhID0gc3VwZXJzY3JpcHRCb3R0b21NYXhX
aXRoU3Vic2NyaXB0IC0gKHN1cFNjcmlwdFNoaWZ0IC0gc3VwRGVzY2VudCk7CisgICAgICAgICAg
ICAgICAgTGF5b3V0VW5pdCBkZWx0YSA9IHBhcmFtZXRlcnMuc3VwZXJzY3JpcHRCb3R0b21NYXhX
aXRoU3Vic2NyaXB0IC0gKHN1cFNjcmlwdFNoaWZ0IC0gc3VwRGVzY2VudCk7CiAgICAgICAgICAg
ICAgICAgaWYgKGRlbHRhID4gMCkgewotICAgICAgICAgICAgICAgICAgICBkZWx0YSA9IHN0ZDo6
bWluKGRlbHRhLCBzdWJTdXBlcnNjcmlwdEdhcE1pbiAtIHN1YlN1cGVyc2NyaXB0R2FwKTsKKyAg
ICAgICAgICAgICAgICAgICAgZGVsdGEgPSBzdGQ6Om1pbihkZWx0YSwgcGFyYW1ldGVycy5zdWJT
dXBlcnNjcmlwdEdhcE1pbiAtIHN1YlN1cGVyc2NyaXB0R2FwKTsKICAgICAgICAgICAgICAgICAg
ICAgc3VwU2NyaXB0U2hpZnQgKz0gZGVsdGE7CiAgICAgICAgICAgICAgICAgICAgIHN1YlN1cGVy
c2NyaXB0R2FwICs9IGRlbHRhOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAv
LyBJZiB0aGF0IGlzIG5vdCBlbm91Z2gsIHdlIHB1c2ggdGhlIHN1YnNjcmlwdCBkb3duLgotICAg
ICAgICAgICAgICAgIGlmIChzdWJTdXBlcnNjcmlwdEdhcCA8IHN1YlN1cGVyc2NyaXB0R2FwTWlu
KQotICAgICAgICAgICAgICAgICAgICBzdWJTY3JpcHRTaGlmdCArPSBzdWJTdXBlcnNjcmlwdEdh
cE1pbiAtIHN1YlN1cGVyc2NyaXB0R2FwOworICAgICAgICAgICAgICAgIGlmIChzdWJTdXBlcnNj
cmlwdEdhcCA8IHBhcmFtZXRlcnMuc3ViU3VwZXJzY3JpcHRHYXBNaW4pCisgICAgICAgICAgICAg
ICAgICAgIHN1YlNjcmlwdFNoaWZ0ICs9IHBhcmFtZXRlcnMuc3ViU3VwZXJzY3JpcHRHYXBNaW4g
LSBzdWJTdXBlcnNjcmlwdEdhcDsKICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgbWV0cmlj
cy5zdWJTaGlmdCA9IHN0ZDo6bWF4KG1ldHJpY3Muc3ViU2hpZnQsIHN1YlNjcmlwdFNoaWZ0KTsK
ICAgICAgICAgICAgIG1ldHJpY3Muc3VwU2hpZnQgPSBzdGQ6Om1heChtZXRyaWNzLnN1cFNoaWZ0
LCBzdXBTY3JpcHRTaGlmdCk7CisKKyAgICAgICAgICAgIHN1YlNjcmlwdCA9IHN1cFNjcmlwdC0+
bmV4dFNpYmxpbmdCb3goKTsKKyAgICAgICAgICAgIGlmIChzdWJTY3JpcHQgPT0gcmVmZXJlbmNl
LnByZXNjcmlwdERlbGltaXRlcikKKyAgICAgICAgICAgICAgICBzdWJTY3JpcHQgPSByZWZlcmVu
Y2UuZmlyc3RQcmVTY3JpcHQ7CiAgICAgICAgIH0KICAgICB9CiAgICAgfQorCisgICAgcmV0dXJu
IG1ldHJpY3M7CiB9CiAKIHZvaWQgUmVuZGVyTWF0aE1MU2NyaXB0czo6bGF5b3V0QmxvY2soYm9v
bCByZWxheW91dENoaWxkcmVuLCBMYXlvdXRVbml0KQpAQCAtMzM3LDMzICszNTEsMjYgQEAgdm9p
ZCBSZW5kZXJNYXRoTUxTY3JpcHRzOjpsYXlvdXRCbG9jayhib29sIHJlbGF5b3V0Q2hpbGRyZW4s
IExheW91dFVuaXQpCiAgICAgaWYgKCFyZWxheW91dENoaWxkcmVuICYmIHNpbXBsaWZpZWRMYXlv
dXQoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgUmVuZGVyQm94KiBiYXNlOwotICAgIFJlbmRl
ckJveCogZmlyc3RQb3N0U2NyaXB0OwotICAgIFJlbmRlckJveCogZmlyc3RQcmVTY3JpcHQ7Ci0g
ICAgaWYgKCFnZXRCYXNlQW5kU2NyaXB0cyhiYXNlLCBmaXJzdFBvc3RTY3JpcHQsIGZpcnN0UHJl
U2NyaXB0KSkgeworCisgICAgUmVmZXJlbmNlQ2hpbGRyZW4gcmVmZXJlbmNlOworICAgIGlmICgh
dmFsaWRhdGVBbmRHZXRSZWZlcmVuY2VDaGlsZHJlbihyZWZlcmVuY2UpKSB7CiAgICAgICAgIHNl
dExvZ2ljYWxXaWR0aCgwKTsKICAgICAgICAgc2V0TG9naWNhbEhlaWdodCgwKTsKICAgICAgICAg
Y2xlYXJOZWVkc0xheW91dCgpOwogICAgICAgICByZXR1cm47CiAgICAgfQogICAgIHJlY29tcHV0
ZUxvZ2ljYWxXaWR0aCgpOwotICAgIGJhc2UtPmxheW91dElmTmVlZGVkKCk7CisgICAgZm9yIChh
dXRvIGNoaWxkID0gZmlyc3RDaGlsZEJveCgpOyBjaGlsZDsgY2hpbGQgPSBjaGlsZC0+bmV4dFNp
YmxpbmdCb3goKSkKKyAgICAgICAgY2hpbGQtPmxheW91dElmTmVlZGVkKCk7CiAKICAgICBMYXlv
dXRVbml0IHNwYWNlID0gc3BhY2VBZnRlclNjcmlwdCgpOwogCiAgICAgLy8gV2UgZGV0ZXJtaW5l
IHRoZSBtaW5pbWFsIHNoaWZ0L3NpemUgb2YgZWFjaCBzY3JpcHQgYW5kIHRha2UgdGhlIG1heGlt
dW0gb2YgdGhlIHZhbHVlcy4KLSAgICBTY3JpcHRNZXRyaWNzIG1ldHJpY3M7Ci0gICAgbWV0cmlj
cy5zdWJTaGlmdCA9IDA7Ci0gICAgbWV0cmljcy5zdXBTaGlmdCA9IDA7Ci0gICAgbWV0cmljcy5k
ZXNjZW50ID0gMDsKLSAgICBtZXRyaWNzLmFzY2VudCA9IDA7Ci0gICAgaWYgKG1fc2NyaXB0VHlw
ZSA9PSBNdWx0aXNjcmlwdHMpCi0gICAgICAgIGdldFNjcmlwdE1ldHJpY3NBbmRMYXlvdXRJZk5l
ZWRlZChiYXNlLCBmaXJzdFByZVNjcmlwdCwgbWV0cmljcyk7Ci0gICAgZ2V0U2NyaXB0TWV0cmlj
c0FuZExheW91dElmTmVlZGVkKGJhc2UsIGZpcnN0UG9zdFNjcmlwdCwgbWV0cmljcyk7CisgICAg
VmVydGljYWxNZXRyaWNzIG1ldHJpY3MgPSB2ZXJ0aWNhbE1ldHJpY3MocmVmZXJlbmNlKTsKIAot
ICAgIExheW91dFVuaXQgYmFzZUFzY2VudCA9IGFzY2VudEZvckNoaWxkKCpiYXNlKTsKLSAgICBM
YXlvdXRVbml0IGJhc2VEZXNjZW50ID0gYmFzZS0+bG9naWNhbEhlaWdodCgpIC0gYmFzZUFzY2Vu
dDsKLSAgICBMYXlvdXRVbml0IGJhc2VJdGFsaWNDb3JyZWN0aW9uID0gc3RkOjptaW4oYmFzZS0+
bG9naWNhbFdpZHRoKCksIGl0YWxpY0NvcnJlY3Rpb24oYmFzZSkpOworICAgIExheW91dFVuaXQg
YmFzZUFzY2VudCA9IGFzY2VudEZvckNoaWxkKCpyZWZlcmVuY2UuYmFzZSk7CisgICAgTGF5b3V0
VW5pdCBiYXNlRGVzY2VudCA9IHJlZmVyZW5jZS5iYXNlLT5sb2dpY2FsSGVpZ2h0KCkgLSBiYXNl
QXNjZW50OworICAgIExheW91dFVuaXQgYmFzZUl0YWxpY0NvcnJlY3Rpb24gPSBzdGQ6Om1pbihy
ZWZlcmVuY2UuYmFzZS0+bG9naWNhbFdpZHRoKCksIGl0YWxpY0NvcnJlY3Rpb24ocmVmZXJlbmNl
KSk7CiAgICAgTGF5b3V0VW5pdCBob3Jpem9udGFsT2Zmc2V0ID0gMDsKIAogICAgIExheW91dFVu
aXQgYXNjZW50ID0gc3RkOjptYXgoYmFzZUFzY2VudCwgbWV0cmljcy5hc2NlbnQgKyBtZXRyaWNz
LnN1cFNoaWZ0KTsKQEAgLTM3Myw1MCArMzgwLDUzIEBAIHZvaWQgUmVuZGVyTWF0aE1MU2NyaXB0
czo6bGF5b3V0QmxvY2soYm9vbCByZWxheW91dENoaWxkcmVuLCBMYXlvdXRVbml0KQogICAgIHN3
aXRjaCAobV9zY3JpcHRUeXBlKSB7CiAgICAgY2FzZSBTdWI6CiAgICAgY2FzZSBVbmRlcjogewot
ICAgICAgICBzZXRMb2dpY2FsV2lkdGgoYmFzZS0+bG9naWNhbFdpZHRoKCkgKyBzdGQ6Om1heChM
YXlvdXRVbml0KDApLCBmaXJzdFBvc3RTY3JpcHQtPmxvZ2ljYWxXaWR0aCgpIC0gYmFzZUl0YWxp
Y0NvcnJlY3Rpb24gKyBzcGFjZSkpOwotICAgICAgICBMYXlvdXRQb2ludCBiYXNlTG9jYXRpb24o
bWlycm9ySWZOZWVkZWQoaG9yaXpvbnRhbE9mZnNldCwgKmJhc2UpLCBhc2NlbnQgLSBiYXNlQXNj
ZW50KTsKLSAgICAgICAgYmFzZS0+c2V0TG9jYXRpb24oYmFzZUxvY2F0aW9uKTsKLSAgICAgICAg
aG9yaXpvbnRhbE9mZnNldCArPSBiYXNlLT5sb2dpY2FsV2lkdGgoKTsKLSAgICAgICAgTGF5b3V0
VW5pdCBzY3JpcHRBc2NlbnQgPSBhc2NlbnRGb3JDaGlsZCgqZmlyc3RQb3N0U2NyaXB0KTsKLSAg
ICAgICAgTGF5b3V0UG9pbnQgc2NyaXB0TG9jYXRpb24obWlycm9ySWZOZWVkZWQoaG9yaXpvbnRh
bE9mZnNldCAtIGJhc2VJdGFsaWNDb3JyZWN0aW9uLCAqZmlyc3RQb3N0U2NyaXB0KSwgYXNjZW50
ICsgbWV0cmljcy5zdWJTaGlmdCAtIHNjcmlwdEFzY2VudCk7Ci0gICAgICAgIGZpcnN0UG9zdFNj
cmlwdC0+c2V0TG9jYXRpb24oc2NyaXB0TG9jYXRpb24pOworICAgICAgICBzZXRMb2dpY2FsV2lk
dGgocmVmZXJlbmNlLmJhc2UtPmxvZ2ljYWxXaWR0aCgpICsgc3RkOjptYXgoTGF5b3V0VW5pdCgw
KSwgcmVmZXJlbmNlLmZpcnN0UG9zdFNjcmlwdC0+bG9naWNhbFdpZHRoKCkgLSBiYXNlSXRhbGlj
Q29ycmVjdGlvbiArIHNwYWNlKSk7CisgICAgICAgIExheW91dFBvaW50IGJhc2VMb2NhdGlvbiht
aXJyb3JJZk5lZWRlZChob3Jpem9udGFsT2Zmc2V0LCAqcmVmZXJlbmNlLmJhc2UpLCBhc2NlbnQg
LSBiYXNlQXNjZW50KTsKKyAgICAgICAgcmVmZXJlbmNlLmJhc2UtPnNldExvY2F0aW9uKGJhc2VM
b2NhdGlvbik7CisgICAgICAgIGhvcml6b250YWxPZmZzZXQgKz0gcmVmZXJlbmNlLmJhc2UtPmxv
Z2ljYWxXaWR0aCgpOworICAgICAgICBMYXlvdXRVbml0IHNjcmlwdEFzY2VudCA9IGFzY2VudEZv
ckNoaWxkKCpyZWZlcmVuY2UuZmlyc3RQb3N0U2NyaXB0KTsKKyAgICAgICAgTGF5b3V0UG9pbnQg
c2NyaXB0TG9jYXRpb24obWlycm9ySWZOZWVkZWQoaG9yaXpvbnRhbE9mZnNldCAtIGJhc2VJdGFs
aWNDb3JyZWN0aW9uLCAqcmVmZXJlbmNlLmZpcnN0UG9zdFNjcmlwdCksIGFzY2VudCArIG1ldHJp
Y3Muc3ViU2hpZnQgLSBzY3JpcHRBc2NlbnQpOworICAgICAgICByZWZlcmVuY2UuZmlyc3RQb3N0
U2NyaXB0LT5zZXRMb2NhdGlvbihzY3JpcHRMb2NhdGlvbik7CiAgICAgfQogICAgICAgICBicmVh
azsKICAgICBjYXNlIFN1cGVyOgogICAgIGNhc2UgT3ZlcjogewotICAgICAgICBzZXRMb2dpY2Fs
V2lkdGgoYmFzZS0+bG9naWNhbFdpZHRoKCkgKyBzdGQ6Om1heChMYXlvdXRVbml0KDApLCBmaXJz
dFBvc3RTY3JpcHQtPmxvZ2ljYWxXaWR0aCgpICsgc3BhY2UpKTsKLSAgICAgICAgTGF5b3V0UG9p
bnQgYmFzZUxvY2F0aW9uKG1pcnJvcklmTmVlZGVkKGhvcml6b250YWxPZmZzZXQsICpiYXNlKSwg
YXNjZW50IC0gYmFzZUFzY2VudCk7Ci0gICAgICAgIGJhc2UtPnNldExvY2F0aW9uKGJhc2VMb2Nh
dGlvbik7Ci0gICAgICAgIGhvcml6b250YWxPZmZzZXQgKz0gYmFzZS0+bG9naWNhbFdpZHRoKCk7
Ci0gICAgICAgIExheW91dFVuaXQgc2NyaXB0QXNjZW50ID0gYXNjZW50Rm9yQ2hpbGQoKmZpcnN0
UG9zdFNjcmlwdCk7Ci0gICAgICAgIExheW91dFBvaW50IHNjcmlwdExvY2F0aW9uKG1pcnJvcklm
TmVlZGVkKGhvcml6b250YWxPZmZzZXQsICpmaXJzdFBvc3RTY3JpcHQpLCBhc2NlbnQgLSBtZXRy
aWNzLnN1cFNoaWZ0IC0gc2NyaXB0QXNjZW50KTsKLSAgICAgICAgZmlyc3RQb3N0U2NyaXB0LT5z
ZXRMb2NhdGlvbihzY3JpcHRMb2NhdGlvbik7CisgICAgICAgIHNldExvZ2ljYWxXaWR0aChyZWZl
cmVuY2UuYmFzZS0+bG9naWNhbFdpZHRoKCkgKyBzdGQ6Om1heChMYXlvdXRVbml0KDApLCByZWZl
cmVuY2UuZmlyc3RQb3N0U2NyaXB0LT5sb2dpY2FsV2lkdGgoKSArIHNwYWNlKSk7CisgICAgICAg
IExheW91dFBvaW50IGJhc2VMb2NhdGlvbihtaXJyb3JJZk5lZWRlZChob3Jpem9udGFsT2Zmc2V0
LCAqcmVmZXJlbmNlLmJhc2UpLCBhc2NlbnQgLSBiYXNlQXNjZW50KTsKKyAgICAgICAgcmVmZXJl
bmNlLmJhc2UtPnNldExvY2F0aW9uKGJhc2VMb2NhdGlvbik7CisgICAgICAgIGhvcml6b250YWxP
ZmZzZXQgKz0gcmVmZXJlbmNlLmJhc2UtPmxvZ2ljYWxXaWR0aCgpOworICAgICAgICBMYXlvdXRV
bml0IHNjcmlwdEFzY2VudCA9IGFzY2VudEZvckNoaWxkKCpyZWZlcmVuY2UuZmlyc3RQb3N0U2Ny
aXB0KTsKKyAgICAgICAgTGF5b3V0UG9pbnQgc2NyaXB0TG9jYXRpb24obWlycm9ySWZOZWVkZWQo
aG9yaXpvbnRhbE9mZnNldCwgKnJlZmVyZW5jZS5maXJzdFBvc3RTY3JpcHQpLCBhc2NlbnQgLSBt
ZXRyaWNzLnN1cFNoaWZ0IC0gc2NyaXB0QXNjZW50KTsKKyAgICAgICAgcmVmZXJlbmNlLmZpcnN0
UG9zdFNjcmlwdC0+c2V0TG9jYXRpb24oc2NyaXB0TG9jYXRpb24pOwogICAgIH0KICAgICAgICAg
YnJlYWs7CiAgICAgY2FzZSBTdWJTdXA6CiAgICAgY2FzZSBVbmRlck92ZXI6CiAgICAgY2FzZSBN
dWx0aXNjcmlwdHM6IHsKLSAgICAgICAgUmVuZGVyQm94KiBzdXBTY3JpcHQ7Ci0KICAgICAgICAg
Ly8gQ2FsY3VsYXRlIHRoZSBsb2dpY2FsIHdpZHRoLgogICAgICAgICBMYXlvdXRVbml0IGxvZ2lj
YWxXaWR0aCA9IDA7Ci0gICAgICAgIGZvciAoYXV0byogc3ViU2NyaXB0ID0gZmlyc3RQcmVTY3Jp
cHQ7IHN1YlNjcmlwdDsgc3ViU2NyaXB0ID0gc3VwU2NyaXB0LT5uZXh0U2libGluZ0JveCgpKSB7
Ci0gICAgICAgICAgICBzdXBTY3JpcHQgPSBzdWJTY3JpcHQtPm5leHRTaWJsaW5nQm94KCk7Cisg
ICAgICAgIGF1dG8gc3ViU2NyaXB0ID0gcmVmZXJlbmNlLmZpcnN0UHJlU2NyaXB0OworICAgICAg
ICB3aGlsZSAoc3ViU2NyaXB0KSB7CisgICAgICAgICAgICBhdXRvIHN1cFNjcmlwdCA9IHN1YlNj
cmlwdC0+bmV4dFNpYmxpbmdCb3goKTsKICAgICAgICAgICAgIEFTU0VSVChzdXBTY3JpcHQpOwog
ICAgICAgICAgICAgTGF5b3V0VW5pdCBzdWJTdXBQYWlyV2lkdGggPSBzdGQ6Om1heChzdWJTY3Jp
cHQtPmxvZ2ljYWxXaWR0aCgpLCBzdXBTY3JpcHQtPmxvZ2ljYWxXaWR0aCgpKTsKICAgICAgICAg
ICAgIGxvZ2ljYWxXaWR0aCArPSBzdWJTdXBQYWlyV2lkdGggKyBzcGFjZTsKKyAgICAgICAgICAg
IHN1YlNjcmlwdCA9IHN1cFNjcmlwdC0+bmV4dFNpYmxpbmdCb3goKTsKICAgICAgICAgfQotICAg
ICAgICBsb2dpY2FsV2lkdGggKz0gYmFzZS0+bG9naWNhbFdpZHRoKCk7Ci0gICAgICAgIGZvciAo
YXV0byogc3ViU2NyaXB0ID0gZmlyc3RQb3N0U2NyaXB0OyBzdWJTY3JpcHQgJiYgIWlzUHJlc2Ny
aXB0RGVsaW1pdGVyKCpzdWJTY3JpcHQpOyBzdWJTY3JpcHQgPSBzdXBTY3JpcHQtPm5leHRTaWJs
aW5nQm94KCkpIHsKLSAgICAgICAgICAgIHN1cFNjcmlwdCA9IHN1YlNjcmlwdC0+bmV4dFNpYmxp
bmdCb3goKTsKKyAgICAgICAgbG9naWNhbFdpZHRoICs9IHJlZmVyZW5jZS5iYXNlLT5sb2dpY2Fs
V2lkdGgoKTsKKyAgICAgICAgc3ViU2NyaXB0ID0gcmVmZXJlbmNlLmZpcnN0UG9zdFNjcmlwdDsK
KyAgICAgICAgd2hpbGUgKHN1YlNjcmlwdCAmJiBzdWJTY3JpcHQgIT0gcmVmZXJlbmNlLnByZXNj
cmlwdERlbGltaXRlcikgeworICAgICAgICAgICAgYXV0byBzdXBTY3JpcHQgPSBzdWJTY3JpcHQt
Pm5leHRTaWJsaW5nQm94KCk7CiAgICAgICAgICAgICBBU1NFUlQoc3VwU2NyaXB0KTsKICAgICAg
ICAgICAgIExheW91dFVuaXQgc3ViU3VwUGFpcldpZHRoID0gc3RkOjptYXgoc3RkOjptYXgoTGF5
b3V0VW5pdCgwKSwgc3ViU2NyaXB0LT5sb2dpY2FsV2lkdGgoKSAtIGJhc2VJdGFsaWNDb3JyZWN0
aW9uKSwgc3VwU2NyaXB0LT5sb2dpY2FsV2lkdGgoKSk7CiAgICAgICAgICAgICBsb2dpY2FsV2lk
dGggKz0gc3ViU3VwUGFpcldpZHRoICsgc3BhY2U7CisgICAgICAgICAgICBzdWJTY3JpcHQgPSBz
dXBTY3JpcHQtPm5leHRTaWJsaW5nQm94KCk7CiAgICAgICAgIH0KICAgICAgICAgc2V0TG9naWNh
bFdpZHRoKGxvZ2ljYWxXaWR0aCk7CiAKLSAgICAgICAgZm9yIChhdXRvKiBzdWJTY3JpcHQgPSBm
aXJzdFByZVNjcmlwdDsgc3ViU2NyaXB0OyBzdWJTY3JpcHQgPSBzdXBTY3JpcHQtPm5leHRTaWJs
aW5nQm94KCkpIHsKLSAgICAgICAgICAgIHN1cFNjcmlwdCA9IHN1YlNjcmlwdC0+bmV4dFNpYmxp
bmdCb3goKTsKKyAgICAgICAgc3ViU2NyaXB0ID0gcmVmZXJlbmNlLmZpcnN0UHJlU2NyaXB0Owor
ICAgICAgICB3aGlsZSAoc3ViU2NyaXB0KSB7CisgICAgICAgICAgICBhdXRvIHN1cFNjcmlwdCA9
IHN1YlNjcmlwdC0+bmV4dFNpYmxpbmdCb3goKTsKICAgICAgICAgICAgIEFTU0VSVChzdXBTY3Jp
cHQpOwogICAgICAgICAgICAgTGF5b3V0VW5pdCBzdWJTdXBQYWlyV2lkdGggPSBzdGQ6Om1heChz
dWJTY3JpcHQtPmxvZ2ljYWxXaWR0aCgpLCBzdXBTY3JpcHQtPmxvZ2ljYWxXaWR0aCgpKTsKICAg
ICAgICAgICAgIGhvcml6b250YWxPZmZzZXQgKz0gc3BhY2UgKyBzdWJTdXBQYWlyV2lkdGg7CkBA
IC00MjYsMTIgKzQzNiwxNCBAQCB2b2lkIFJlbmRlck1hdGhNTFNjcmlwdHM6OmxheW91dEJsb2Nr
KGJvb2wgcmVsYXlvdXRDaGlsZHJlbiwgTGF5b3V0VW5pdCkKICAgICAgICAgICAgIExheW91dFVu
aXQgc3VwQXNjZW50ID0gYXNjZW50Rm9yQ2hpbGQoKnN1cFNjcmlwdCk7CiAgICAgICAgICAgICBM
YXlvdXRQb2ludCBzdXBTY3JpcHRMb2NhdGlvbihtaXJyb3JJZk5lZWRlZChob3Jpem9udGFsT2Zm
c2V0IC0gc3VwU2NyaXB0LT5sb2dpY2FsV2lkdGgoKSwgKnN1cFNjcmlwdCksIGFzY2VudCAtIG1l
dHJpY3Muc3VwU2hpZnQgLSBzdXBBc2NlbnQpOwogICAgICAgICAgICAgc3VwU2NyaXB0LT5zZXRM
b2NhdGlvbihzdXBTY3JpcHRMb2NhdGlvbik7CisgICAgICAgICAgICBzdWJTY3JpcHQgPSBzdXBT
Y3JpcHQtPm5leHRTaWJsaW5nQm94KCk7CiAgICAgICAgIH0KLSAgICAgICAgTGF5b3V0UG9pbnQg
YmFzZUxvY2F0aW9uKG1pcnJvcklmTmVlZGVkKGhvcml6b250YWxPZmZzZXQsICpiYXNlKSwgYXNj
ZW50IC0gYmFzZUFzY2VudCk7Ci0gICAgICAgIGJhc2UtPnNldExvY2F0aW9uKGJhc2VMb2NhdGlv
bik7Ci0gICAgICAgIGhvcml6b250YWxPZmZzZXQgKz0gYmFzZS0+bG9naWNhbFdpZHRoKCk7Ci0g
ICAgICAgIGZvciAoYXV0byogc3ViU2NyaXB0ID0gZmlyc3RQb3N0U2NyaXB0OyBzdWJTY3JpcHQg
JiYgIWlzUHJlc2NyaXB0RGVsaW1pdGVyKCpzdWJTY3JpcHQpOyBzdWJTY3JpcHQgPSBzdXBTY3Jp
cHQtPm5leHRTaWJsaW5nQm94KCkpIHsKLSAgICAgICAgICAgIHN1cFNjcmlwdCA9IHN1YlNjcmlw
dC0+bmV4dFNpYmxpbmdCb3goKTsKKyAgICAgICAgTGF5b3V0UG9pbnQgYmFzZUxvY2F0aW9uKG1p
cnJvcklmTmVlZGVkKGhvcml6b250YWxPZmZzZXQsICpyZWZlcmVuY2UuYmFzZSksIGFzY2VudCAt
IGJhc2VBc2NlbnQpOworICAgICAgICByZWZlcmVuY2UuYmFzZS0+c2V0TG9jYXRpb24oYmFzZUxv
Y2F0aW9uKTsKKyAgICAgICAgaG9yaXpvbnRhbE9mZnNldCArPSByZWZlcmVuY2UuYmFzZS0+bG9n
aWNhbFdpZHRoKCk7CisgICAgICAgIHN1YlNjcmlwdCA9IHJlZmVyZW5jZS5maXJzdFBvc3RTY3Jp
cHQ7CisgICAgICAgIHdoaWxlIChzdWJTY3JpcHQgJiYgc3ViU2NyaXB0ICE9IHJlZmVyZW5jZS5w
cmVzY3JpcHREZWxpbWl0ZXIpIHsKKyAgICAgICAgICAgIGF1dG8gc3VwU2NyaXB0ID0gc3ViU2Ny
aXB0LT5uZXh0U2libGluZ0JveCgpOwogICAgICAgICAgICAgQVNTRVJUKHN1cFNjcmlwdCk7CiAg
ICAgICAgICAgICBMYXlvdXRVbml0IHN1YkFzY2VudCA9IGFzY2VudEZvckNoaWxkKCpzdWJTY3Jp
cHQpOwogICAgICAgICAgICAgTGF5b3V0UG9pbnQgc3ViU2NyaXB0TG9jYXRpb24obWlycm9ySWZO
ZWVkZWQoaG9yaXpvbnRhbE9mZnNldCAtIGJhc2VJdGFsaWNDb3JyZWN0aW9uLCAqc3ViU2NyaXB0
KSwgYXNjZW50ICsgbWV0cmljcy5zdWJTaGlmdCAtIHN1YkFzY2VudCk7CkBAIC00NDIsNiArNDU0
LDcgQEAgdm9pZCBSZW5kZXJNYXRoTUxTY3JpcHRzOjpsYXlvdXRCbG9jayhib29sIHJlbGF5b3V0
Q2hpbGRyZW4sIExheW91dFVuaXQpCiAKICAgICAgICAgICAgIExheW91dFVuaXQgc3ViU3VwUGFp
cldpZHRoID0gc3RkOjptYXgoc3ViU2NyaXB0LT5sb2dpY2FsV2lkdGgoKSwgc3VwU2NyaXB0LT5s
b2dpY2FsV2lkdGgoKSk7CiAgICAgICAgICAgICBob3Jpem9udGFsT2Zmc2V0ICs9IHN1YlN1cFBh
aXJXaWR0aCArIHNwYWNlOworICAgICAgICAgICAgc3ViU2NyaXB0ID0gc3VwU2NyaXB0LT5uZXh0
U2libGluZ0JveCgpOwogICAgICAgICB9CiAgICAgfQogICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9tYXRobWwvUmVuZGVyTWF0aE1MU2NyaXB0cy5oIGIvU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL21hdGhtbC9SZW5kZXJNYXRoTUxTY3JpcHRzLmgKaW5kZXggNjNl
NzE0MzkwMmRjMjEzNjNhNTRmNmQxODk1OTQ1NzIwMzYxNTgwNy4uNDYyNmY0YWZmY2FlZTgwZTdm
ZDY1NmFmMzhlNGJjNWMzYzhjNmM2MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL21hdGhtbC9SZW5kZXJNYXRoTUxTY3JpcHRzLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL21hdGhtbC9SZW5kZXJNYXRoTUxTY3JpcHRzLmgKQEAgLTUzLDE2ICs1MywzMyBAQCBw
cm90ZWN0ZWQ6CiBwcml2YXRlOgogICAgIE1hdGhNTFNjcmlwdHNFbGVtZW50JiBlbGVtZW50KCkg
Y29uc3Q7CiAgICAgT3B0aW9uYWw8aW50PiBmaXJzdExpbmVCYXNlbGluZSgpIGNvbnN0IGZpbmFs
OwotICAgIGJvb2wgZ2V0QmFzZUFuZFNjcmlwdHMoUmVuZGVyQm94KiYgYmFzZSwgUmVuZGVyQm94
KiYgZmlyc3RQb3N0U2NyaXB0LCBSZW5kZXJCb3gqJiBmaXJzdFByZVNjcmlwdCk7CisgICAgc3Ry
dWN0IFJlZmVyZW5jZUNoaWxkcmVuIHsKKyAgICAgICAgUmVuZGVyQm94KiBiYXNlOworICAgICAg
ICBSZW5kZXJCb3gqIHByZXNjcmlwdERlbGltaXRlcjsKKyAgICAgICAgUmVuZGVyQm94KiBmaXJz
dFBvc3RTY3JpcHQ7CisgICAgICAgIFJlbmRlckJveCogZmlyc3RQcmVTY3JpcHQ7CisgICAgfTsK
KyAgICBib29sIHZhbGlkYXRlQW5kR2V0UmVmZXJlbmNlQ2hpbGRyZW4oUmVmZXJlbmNlQ2hpbGRy
ZW4mKTsKICAgICBMYXlvdXRVbml0IHNwYWNlQWZ0ZXJTY3JpcHQoKTsKLSAgICBMYXlvdXRVbml0
IGl0YWxpY0NvcnJlY3Rpb24oUmVuZGVyQm94KiBiYXNlKTsKLSAgICBzdHJ1Y3QgU2NyaXB0TWV0
cmljcyB7CisgICAgTGF5b3V0VW5pdCBpdGFsaWNDb3JyZWN0aW9uKGNvbnN0IFJlZmVyZW5jZUNo
aWxkcmVuJik7CisgICAgc3RydWN0IFZlcnRpY2FsUGFyYW1ldGVycyB7CisgICAgICAgIExheW91
dFVuaXQgc3Vic2NyaXB0U2hpZnREb3duOworICAgICAgICBMYXlvdXRVbml0IHN1cGVyc2NyaXB0
U2hpZnRVcDsKKyAgICAgICAgTGF5b3V0VW5pdCBzdWJzY3JpcHRCYXNlbGluZURyb3BNaW47Cisg
ICAgICAgIExheW91dFVuaXQgc3VwZXJTY3JpcHRCYXNlbGluZURyb3BNYXg7CisgICAgICAgIExh
eW91dFVuaXQgc3ViU3VwZXJzY3JpcHRHYXBNaW47CisgICAgICAgIExheW91dFVuaXQgc3VwZXJz
Y3JpcHRCb3R0b21NaW47CisgICAgICAgIExheW91dFVuaXQgc3Vic2NyaXB0VG9wTWF4OworICAg
ICAgICBMYXlvdXRVbml0IHN1cGVyc2NyaXB0Qm90dG9tTWF4V2l0aFN1YnNjcmlwdDsKKyAgICB9
OworICAgIFZlcnRpY2FsUGFyYW1ldGVycyB2ZXJ0aWNhbFBhcmFtZXRlcnMoKSBjb25zdDsKKyAg
ICBzdHJ1Y3QgVmVydGljYWxNZXRyaWNzIHsKICAgICAgICAgTGF5b3V0VW5pdCBzdWJTaGlmdDsK
ICAgICAgICAgTGF5b3V0VW5pdCBzdXBTaGlmdDsKICAgICAgICAgTGF5b3V0VW5pdCBhc2NlbnQ7
CiAgICAgICAgIExheW91dFVuaXQgZGVzY2VudDsKICAgICB9OwotICAgIHZvaWQgZ2V0U2NyaXB0
TWV0cmljc0FuZExheW91dElmTmVlZGVkKFJlbmRlckJveCogYmFzZSwgUmVuZGVyQm94KiBzY3Jp
cHQsIFNjcmlwdE1ldHJpY3MmKTsKKyAgICBWZXJ0aWNhbE1ldHJpY3MgdmVydGljYWxNZXRyaWNz
KGNvbnN0IFJlZmVyZW5jZUNoaWxkcmVuJik7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3Jl
Cg==
</data>
<flag name="review"
          id="310829"
          type_id="1"
          status="+"
          setter="darin"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>287941</attachid>
            <date>2016-09-05 01:42:47 -0700</date>
            <delta_ts>2016-09-05 01:42:47 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>0001-Bug-161371-More-refactoring-of-RenderMathMLScripts.patch</filename>
            <type>text/plain</type>
            <size>35000</size>
            <attacher name="Frédéric Wang Nélar">fred.wang</attacher>
            
              <data encoding="base64">RnJvbSA5YzkxNzkyN2Q2NWZhYTdhOGM1ODUyMWU0ZjMxODEyN2RiNjk4YjI1IE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBGcmVkZXJpYyBXYW5nIDxmcmVkLndhbmdAZnJlZS5mcj4KRGF0
ZTogTW9uLCA1IFNlcCAyMDE2IDEwOjMyOjA2ICswMjAwClN1YmplY3Q6IFtQQVRDSF0gQnVnIDE2
MTM3MSAtIE1vcmUgcmVmYWN0b3Jpbmcgb2YgUmVuZGVyTWF0aE1MU2NyaXB0cwoKLS0tCiBTb3Vy
Y2UvV2ViQ29yZS9DaGFuZ2VMb2cgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICA1NSArKysr
CiAuLi4vcmVuZGVyaW5nL21hdGhtbC9SZW5kZXJNYXRoTUxTY3JpcHRzLmNwcCAgICAgICB8IDI4
NiArKysrKysrKysrKy0tLS0tLS0tLS0KIC4uLi9XZWJDb3JlL3JlbmRlcmluZy9tYXRobWwvUmVu
ZGVyTWF0aE1MU2NyaXB0cy5oIHwgIDI1ICstCiAzIGZpbGVzIGNoYW5nZWQsIDIyOCBpbnNlcnRp
b25zKCspLCAxMzggZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvQ2hh
bmdlTG9nIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCmluZGV4IDVkM2MzZmEuLjhmMDlmMDQg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSw1OCBAQAorMjAxNi0wOS0wNSAgRnJlZGVyaWMgV2FuZyAg
PGZ3YW5nQGlnYWxpYS5jb20+CisKKyAgICAgICAgTW9yZSByZWZhY3RvcmluZyBvZiBSZW5kZXJN
YXRoTUxTY3JpcHRzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD0xNjEzNzEKKworICAgICAgICBSZXZpZXdlZCBieSBEYXJpbiBBZGxlci4KKworICAgICAg
ICBUaGlzIGlzIGEgZm9sbG93LXVwIG9mIGJ1ZyAxNjEwODQuIFRoZSBmdW5jdGlvbiBnZXRTY3Jp
cHRNZXRyaWNzQW5kTGF5b3V0SWZOZWVkZWQgd2FzIHF1aXRlCisgICAgICAgIGNvbXBsaWNhdGVk
IGFuZCBpdCB3YXMgbm90IG9idmlvdXMgdGhhdCB3ZSBoYXZlIHRvIGNhbGwgaXQgdHdpY2Ugd2l0
aCB0aGUgc2FtZSByZWZlcmVuY2UKKyAgICAgICAgdG8gYSBzdHJ1dHVyZSBob2xkaW5nIHZlcnRp
Y2FsIG1ldHJpY3MuIFdlIGV4dHJhY3QgdGhlIHBhcnQgcmV0cmlldmluZyBsYXlvdXQgcGFyYW1l
dGVycworICAgICAgICBpbnRvIHZlcnRpY2FsUGFyYW1ldGVycyBhbmQgbW92ZSBpdHMgbGF5b3V0
SWZOZWVkZWQgY2FsbHMgaW50byBsYXlvdXRCbG9jay4gVGhlbiBpdCBjYW4KKyAgICAgICAgYmUg
cmVkdWNlZCB0byBhIHNpbXBsZSBmdW5jdGlvbiB0aGF0IHJldHJpZXZlIHRoZSB2ZXJ0aWNhbCBt
ZXRyaWNzIGluIG9uZSBjYWxsLgorICAgICAgICBXZSBhbHNvIGltcHJvdmUgZ2V0QmFzZUFuZFNj
cmlwdHMgdG8gbWFrZSBjbGVhciB0aGF0IGl0IGlzIHBlcmZvcm1pbmcgdmFsaWRhdGlvbi4gSXQg
cmV0dXJucworICAgICAgICBhIFJlZmVyZW5jZUNoaWxkcmVuIHN0cnVjdHVyZSBlbmNhcHN1bGF0
aW5nIHBvaW50ZXJzIHRvIGltcG9ydGFudCBjaGlsZHJlbiBzbyB0aGF0IHdlIG5vCisgICAgICAg
IGxvbmdlciBwYXNzIHRoZXNlIHBvaW50ZXJzIGFzIGZ1bmN0aW9uIHBhcmFtZXRlcnMuIFdlIGNv
bnRpbnVlIHRvIG5lZWQgdGhlbSB0byBicm93c2UgdGhlCisgICAgICAgIGxpc3Qgb2YgcHJlc2Ny
aXB0cyAmIHBvc3RzY3JpcHRzIGJ1dCB3ZSByZWZhY3RvciBhIGJpdCB0aGUgbG9vcCB0byBhdm9p
ZCBleHBsaWNpdCBtZW50aW9uCisgICAgICAgIG9mIFJlbmRlckJveCouCisKKyAgICAgICAgTm8g
bmV3IHRlc3RzLCBhbHJlYWR5IGNvdmVyZWQgYnkgZXhpc3RpbmcgdGVzdHMuCisKKyAgICAgICAg
KiByZW5kZXJpbmcvbWF0aG1sL1JlbmRlck1hdGhNTFNjcmlwdHMuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyTWF0aE1MU2NyaXB0czo6dmFsaWRhdGVBbmRHZXRSZWZlcmVuY2VDaGlsZHJl
bik6IFdlIG5vdyBzdG9yZSB0aGUgcG9pbnRlcnMgdG8KKyAgICAgICAgdGhlIGJhc2UsIGZpcnN0
UG9zdFNjcmlwdCBhbmQgZmlyc3RQcmVTY3JpcHQgY2hpbGRyZW4gaW4gdGhlIFJlZmVyZW5jZUNo
aWxkcmVuIHN0cnVjdHVyZS4gV2UKKyAgICAgICAgYWxzbyBhZGQgYSBwb2ludGVyIHRvIHRoZSBw
cmVzY3JpcHREZWxpbWl0ZXIgZm9yIGNvbnZlbmllbmNlLgorICAgICAgICAoV2ViQ29yZTo6UmVu
ZGVyTWF0aE1MU2NyaXB0czo6aXRhbGljQ29ycmVjdGlvbik6IFVzZSB0aGUgUmVmZXJlbmNlQ2hp
bGRyZW4gc3RydWN0dXJlIHNvIHRoYXQKKyAgICAgICAgd2UgYXJlIHN1cmUgdGhlIGJhc2UgaGFz
IGJlZW4gdmFsaWRhdGVkIGJlZm9yZSBjYWxsaW5nIHRoaXMgZnVuY3Rpb24uCisgICAgICAgIChX
ZWJDb3JlOjpSZW5kZXJNYXRoTUxTY3JpcHRzOjpjb21wdXRlUHJlZmVycmVkTG9naWNhbFdpZHRo
cyk6IFJldHJpZXZlIHRoZSByZWZlcmVuY2UKKyAgICAgICAgY2hpbGRyZW4gd2l0aCB2YWxpZGF0
ZUFuZEdldFJlZmVyZW5jZUNoaWxkcmVuIGluc3RlYWQgb2YgY2FsbGluZyBnZXRCYXNlQW5kU2Ny
aXB0cyBhbmQgdXNlCisgICAgICAgIFJlZmVyZW5jZUNoaWxkcmVuIHRvIGhhbmRsZSB0aGVzZSBj
aGlsZHJlbiBhbmQgdG8gY2FsbCBpdGFsaWNDb3JyZWN0aW9uLiBUaGUgbG9vcHMgZm9yCisgICAg
ICAgIFN1YlN1cCwgVW5kZXJPdmVyLCBNdWx0aXNjcmlwdHMgYXJlIGFsc28gcmV3cml0dGVuIGEg
Yml0IHRvIGF2b2lkIGRlY2xhcmluZyBhIG51bGwgUmVuZGVyQm94KgorICAgICAgICBvdXRzaWRl
IG9mIHRoZW0gYW5kIGhlbmNlIGFsbG93IHRvIHVzZSBhdXRvLgorICAgICAgICAoV2ViQ29yZTo6
UmVuZGVyTWF0aE1MU2NyaXB0czo6dmVydGljYWxQYXJhbWV0ZXJzKTogVGhpcyBwYXJ0IHRvIGV4
dHJhY3QgdGhlIGxheW91dAorICAgICAgICBwYXJhbWV0ZXJzIGlzIGV4dHJhY3RlZCBmcm9tIGdl
dFNjcmlwdE1ldHJpY3NBbmRMYXlvdXRJZk5lZWRlZC4gVGhlIHBhcmFtZXRlcnMgYXJlIHJldHVy
bmVkCisgICAgICAgIGFzIGEgVmVydGljYWxQYXJhbWV0ZXJzIHN0cnVjdC4KKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlck1hdGhNTFNjcmlwdHM6OnZlcnRpY2FsTWV0cmljcyk6IFRoaXMgaXMgdGhl
IHJlbWFpbmluZyBwYXJ0IG9mCisgICAgICAgIGdldFNjcmlwdE1ldHJpY3NBbmRMYXlvdXRJZk5l
ZWRlZCBJdCB1c2VkIHRvIGNhbGwgbGF5b3V0SWZOZWVkZWQgb24gY2hpbGRyZW4gYW5kIHRvCisg
ICAgICAgIGNhbGN1bGF0ZSBtYXhpbXVtIHZlcnRpY2FsIG1ldHJpY3MuIEZvciBNdWx0aXNjcmlw
dHMgaXQgd2FzIGNhbGxlZCB0d2ljZTogV2UgZGlkIGEgZmlyc3QKKyAgICAgICAgY2FsbCB0byBo
YW5kbGUgdGhlIHByZXNjcmlwdHMgYW5kIHRoZW4gcGFzcyB0aGUgcmVzdWx0IGFnYWluIGluIHRo
ZSBzZWNvbmQgY2FsbCB0byBoYW5kbGUKKyAgICAgICAgdGhlIHBvc3RzY3JpcHRzLiBXZSBtb2Rp
ZnkgYSBiaXQgdGhlIGxvb3Agc28gdGhhdCBhbGwgdGhlIHNjcmlwdHMgYXJlIGhhbmRsZWQgaW4g
b25lIGNhbGwgYW5kCisgICAgICAgIGhlbmNlIHdlIGNhbiBkaXJlY3RseSByZXR1cm4gYSBWZXJ0
aWNhbE1ldHJpY3MuIEFnYWluLCB0aGUgcmVmZXJlbmNlIGNoaWxkcmVuIGFyZSBub3cgaGFuZGxl
ZAorICAgICAgICB1c2luZyB0aGUgUmVmZXJlbmNlQ2hpbGRyZW4gc3RydWN0dXJlIHBhc3NlZCBh
cyBhIHBhcmFtZXRlci4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlck1hdGhNTFNjcmlwdHM6Omxh
eW91dEJsb2NrKTogV2UgcmV0cmlldmUgdGhlIHJlZmVyZW5jZSBjaGlsZHJlbiB3aXRoCisgICAg
ICAgIHZhbGlkYXRlQW5kR2V0UmVmZXJlbmNlQ2hpbGRyZW4gaW5zdGVhZCBvZiBjYWxsaW5nIGdl
dEJhc2VBbmRTY3JpcHRzIGFuZCB1c2UKKyAgICAgICAgUmVmZXJlbmNlQ2hpbGRyZW4gdG8gaGFu
ZGxlIHRoZXNlIGNoaWxkcmVuIGFuZCB0byBjYWxsIGl0YWxpY0NvcnJlY3Rpb24uIFdlIGxheW91
dCBhbGwgdGhlCisgICAgICAgIGNoaWxkcmVuIGlmIG5lZWRlZCBpbiBvbmUgbG9vcCBhdCB0aGUg
YmVnaW5uaW5nIGluc3RlYWQgb2YgZG9pbmcgdGhhdCB3aGVuIHRoZWlyIHZlcnRpY2FsCisgICAg
ICAgIG1ldHJpY3MgYXJlIG5lZWRlZC4gV2UgY2FuIG5vdyBhbHNvIHJldHJpZXZlIHZlcnRpY2Fs
IG1ldHJpY3Mgd2l0aCBhIHNpbmdsZSBjYWxsLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTWF0
aE1MU2NyaXB0czo6Z2V0QmFzZUFuZFNjcmlwdHMpOiBSZW5hbWVkIHZhbGlkYXRlQW5kR2V0UmVm
ZXJlbmNlQ2hpbGRyZW4uCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJNYXRoTUxTY3JpcHRzOjpn
ZXRTY3JpcHRNZXRyaWNzQW5kTGF5b3V0SWZOZWVkZWQpOiBEZWxldGVkLiBTcGxpdCBpbnRvCisg
ICAgICAgIHZlcnRpY2FsUGFyYW1ldGVycyBhbmQgdmVydGljYWxNZXRyaWNzLgorICAgICAgICAq
IHJlbmRlcmluZy9tYXRobWwvUmVuZGVyTWF0aE1MU2NyaXB0cy5oOiBOZXcgc3RydWN0dXJlIHRv
IGhhbmRsZSB0aGUgcG9pbnRlcnMgdG8gcmVmZXJlbmNlCisgICAgICAgIGNoaWxkcmVuLiBVcGRh
dGUgdGhlIHNpZ25hdHVyZSBvZiBnZXRCYXNlQW5kU2NyaXB0cyB0byB1c2UgdGhpcyBzdHJ1dHVy
ZSBhbmQgZ2l2ZSBhIGNsZWFyZXIKKyAgICAgICAgbmFtZS4gVXBkYXRlIHRoZSBzaWduYXR1cmUg
b2YgaXRhbGljQ29ycmVjdGlvbiB0byB1c2UgdGhpcyBzdHJ1Y3R1cmUgdG9vLiBBZGQgYSBuZXcg
c3RydWN0dXJlCisgICAgICAgIFZlcnRpY2FsUGFyYW1ldGVycyBhbmQgZGVjbGFyZSB0aGUgaGVs
cGVyIGZ1bmN0aW9uIHRvIHJldHJpZXZlIHRoZW0uIFJlbmFtZSBTY3JpcHRNZXRyaWNzCisgICAg
ICAgIHRvIFZlcnRpY2FsTWV0cmljcyBhbmQgdXBkYXRlIHRoZSBzaWduYXR1cmUgb2YgdGhlIGZ1
bmN0aW9uIG5lZWRlZCB0byByZXRyaWV2ZSBpdC4KKwogMjAxNi0wOS0wNSAgWmFuIERvYmVyc2Vr
ICA8emRvYmVyc2VrQGlnYWxpYS5jb20+CiAKICAgICAgICAgTWVkaWFQbGF5ZXJQcml2YXRlR1N0
cmVhbWVyQmFzZTogaW1wcm92ZSBidWlsZCBndWFyZHMgaW4gbmF0aXZlSW1hZ2VGb3JDdXJyZW50
VGltZSgpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvbWF0aG1sL1JlbmRl
ck1hdGhNTFNjcmlwdHMuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL21hdGhtbC9SZW5k
ZXJNYXRoTUxTY3JpcHRzLmNwcAppbmRleCBmOTYyMDk3Li4zNDE0MDQzIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvbWF0aG1sL1JlbmRlck1hdGhNTFNjcmlwdHMuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9tYXRobWwvUmVuZGVyTWF0aE1MU2NyaXB0cy5j
cHAKQEAgLTc2LDQwICs3Niw1MSBAQCBSZW5kZXJNYXRoTUxPcGVyYXRvciogUmVuZGVyTWF0aE1M
U2NyaXB0czo6dW5lbWJlbGxpc2hlZE9wZXJhdG9yKCkKICAgICByZXR1cm4gZG93bmNhc3Q8UmVu
ZGVyTWF0aE1MQmxvY2s+KGJhc2UpLT51bmVtYmVsbGlzaGVkT3BlcmF0b3IoKTsKIH0KIAotYm9v
bCBSZW5kZXJNYXRoTUxTY3JpcHRzOjpnZXRCYXNlQW5kU2NyaXB0cyhSZW5kZXJCb3gqJiBiYXNl
LCBSZW5kZXJCb3gqJiBmaXJzdFBvc3RTY3JpcHQsIFJlbmRlckJveComIGZpcnN0UHJlU2NyaXB0
KQorT3B0aW9uYWw8UmVuZGVyTWF0aE1MU2NyaXB0czo6UmVmZXJlbmNlQ2hpbGRyZW4+IFJlbmRl
ck1hdGhNTFNjcmlwdHM6OnZhbGlkYXRlQW5kR2V0UmVmZXJlbmNlQ2hpbGRyZW4oKQogewogICAg
IC8vIEFsbCBzY3JpcHRlZCBlbGVtZW50cyBtdXN0IGhhdmUgYXQgbGVhc3Qgb25lIGNoaWxkLgog
ICAgIC8vIFRoZSBmaXJzdCBjaGlsZCBpcyB0aGUgYmFzZS4KLSAgICBiYXNlID0gZmlyc3RDaGls
ZEJveCgpOwotICAgIGZpcnN0UG9zdFNjcmlwdCA9IG51bGxwdHI7Ci0gICAgZmlyc3RQcmVTY3Jp
cHQgPSBudWxscHRyOworICAgIGF1dG8gYmFzZSA9IGZpcnN0Q2hpbGRCb3goKTsKICAgICBpZiAo
IWJhc2UpCi0gICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgcmV0dXJuIE51bGxvcHQ7CisK
KyAgICBSZWZlcmVuY2VDaGlsZHJlbiByZWZlcmVuY2U7CisgICAgcmVmZXJlbmNlLmJhc2UgPSBi
YXNlOworICAgIHJlZmVyZW5jZS5maXJzdFBvc3RTY3JpcHQgPSBudWxscHRyOworICAgIHJlZmVy
ZW5jZS5maXJzdFByZVNjcmlwdCA9IG51bGxwdHI7CisgICAgcmVmZXJlbmNlLnByZXNjcmlwdERl
bGltaXRlciA9IG51bGxwdHI7CiAKICAgICBzd2l0Y2ggKG1fc2NyaXB0VHlwZSkgewogICAgIGNh
c2UgU3ViOgogICAgIGNhc2UgU3VwZXI6CiAgICAgY2FzZSBVbmRlcjoKLSAgICBjYXNlIE92ZXI6
CisgICAgY2FzZSBPdmVyOiB7CiAgICAgICAgIC8vIFRoZXNlIGVsZW1lbnRzIG11c3QgaGF2ZSBl
eGFjdGx5IHR3byBjaGlsZHJlbi4KICAgICAgICAgLy8gVGhlIHNlY29uZCBjaGlsZCBpcyBhIHBv
c3RzY3JpcHQgYW5kIHRoZXJlIGFyZSBubyBwcmVzY3JpcHRzLgogICAgICAgICAvLyA8bXN1Yj4g
YmFzZSBzdWJzY3JpcHQgPC9tc3ViPgogICAgICAgICAvLyA8bXN1cD4gYmFzZSBzdXBlcnNjcmlw
dCA8L21zdXA+CiAgICAgICAgIC8vIDxtdW5kZXI+IGJhc2UgdW5kZXJzY3JpcHQgPC9tdW5kZXI+
CiAgICAgICAgIC8vIDxtb3Zlcj4gYmFzZSBvdmVyc2NyaXB0IDwvbW92ZXI+Ci0gICAgICAgIGZp
cnN0UG9zdFNjcmlwdCA9IGJhc2UtPm5leHRTaWJsaW5nQm94KCk7Ci0gICAgICAgIHJldHVybiBm
aXJzdFBvc3RTY3JpcHQgJiYgIWlzUHJlc2NyaXB0RGVsaW1pdGVyKCpmaXJzdFBvc3RTY3JpcHQp
ICYmICFmaXJzdFBvc3RTY3JpcHQtPm5leHRTaWJsaW5nQm94KCk7CisgICAgICAgIGF1dG8gc2Ny
aXB0ID0gYmFzZS0+bmV4dFNpYmxpbmdCb3goKTsKKyAgICAgICAgaWYgKCFzY3JpcHQgfHwgaXNQ
cmVzY3JpcHREZWxpbWl0ZXIoKnNjcmlwdCkgfHwgc2NyaXB0LT5uZXh0U2libGluZ0JveCgpKQor
ICAgICAgICAgICAgcmV0dXJuIE51bGxvcHQ7CisgICAgICAgIHJlZmVyZW5jZS5maXJzdFBvc3RT
Y3JpcHQgPSBzY3JpcHQ7CisgICAgICAgIHJldHVybiByZWZlcmVuY2U7CisgICAgfQogICAgIGNh
c2UgU3ViU3VwOgogICAgIGNhc2UgVW5kZXJPdmVyOiB7CiAgICAgICAgIC8vIFRoZXNlIGVsZW1l
bnRzIG11c3QgaGF2ZSBleGFjdGx5IHRocmVlIGNoaWxkcmVuLgogICAgICAgICAvLyBUaGUgc2Vj
b25kIGFuZCB0aGlyZCBjaGlsZHJlbiBhcmUgcG9zdHNjcmlwdHMgYW5kIHRoZXJlIGFyZSBubyBw
cmVzY3JpcHRzLgogICAgICAgICAvLyA8bXN1YnN1cD4gYmFzZSBzdWJzY3JpcHQgc3VwZXJzY3Jp
cHQgPC9tc3Vic3VwPgogICAgICAgICAvLyA8bXVuZGVyb3Zlcj4gYmFzZSBzdWJzY3JpcHQgc3Vw
ZXJzY3JpcHQgPC9tdW5kZXJvdmVyPgotICAgICAgICBmaXJzdFBvc3RTY3JpcHQgPSBiYXNlLT5u
ZXh0U2libGluZ0JveCgpOwotICAgICAgICBpZiAoIWZpcnN0UG9zdFNjcmlwdCB8fCBpc1ByZXNj
cmlwdERlbGltaXRlcigqZmlyc3RQb3N0U2NyaXB0KSkKLSAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKLSAgICAgICAgYXV0byBzdXBlclNjcmlwdCA9IGZpcnN0UG9zdFNjcmlwdC0+bmV4dFNpYmxp
bmdCb3goKTsKLSAgICAgICAgcmV0dXJuIHN1cGVyU2NyaXB0ICYmICFpc1ByZXNjcmlwdERlbGlt
aXRlcigqc3VwZXJTY3JpcHQpICYmICFzdXBlclNjcmlwdC0+bmV4dFNpYmxpbmdCb3goKTsKKyAg
ICAgICAgYXV0byBzdWJTY3JpcHQgPSBiYXNlLT5uZXh0U2libGluZ0JveCgpOworICAgICAgICBp
ZiAoIXN1YlNjcmlwdCB8fCBpc1ByZXNjcmlwdERlbGltaXRlcigqc3ViU2NyaXB0KSkKKyAgICAg
ICAgICAgIHJldHVybiBOdWxsb3B0OworICAgICAgICBhdXRvIHN1cGVyU2NyaXB0ID0gc3ViU2Ny
aXB0LT5uZXh0U2libGluZ0JveCgpOworICAgICAgICBpZiAoIXN1cGVyU2NyaXB0IHx8IGlzUHJl
c2NyaXB0RGVsaW1pdGVyKCpzdXBlclNjcmlwdCkgfHwgc3VwZXJTY3JpcHQtPm5leHRTaWJsaW5n
Qm94KCkpCisgICAgICAgICAgICByZXR1cm4gTnVsbG9wdDsKKyAgICAgICAgcmVmZXJlbmNlLmZp
cnN0UG9zdFNjcmlwdCA9IHN1YlNjcmlwdDsKKyAgICAgICAgcmV0dXJuIHJlZmVyZW5jZTsKICAg
ICB9CiAgICAgY2FzZSBNdWx0aXNjcmlwdHM6IHsKICAgICAgICAgLy8gVGhpcyBlbGVtZW50IGFj
Y2VwdHMgdGhlIGZvbGxvd2luZyBzeW50YXg6CkBAIC0xMjQsNyArMTM1LDcgQEAgYm9vbCBSZW5k
ZXJNYXRoTUxTY3JpcHRzOjpnZXRCYXNlQW5kU2NyaXB0cyhSZW5kZXJCb3gqJiBiYXNlLCBSZW5k
ZXJCb3gqJiBmaXJzdFAKICAgICAgICAgLy8KICAgICAgICAgLy8gV2Ugc2V0IHRoZSBmaXJzdCBw
b3N0c2NyaXB0LCB1bmxlc3MgKHN1YnNjcmlwdCBzdXBlcnNjcmlwdCkqIGlzIGVtcHR5LgogICAg
ICAgICBpZiAoYmFzZS0+bmV4dFNpYmxpbmdCb3goKSAmJiAhaXNQcmVzY3JpcHREZWxpbWl0ZXIo
KmJhc2UtPm5leHRTaWJsaW5nQm94KCkpKQotICAgICAgICAgICAgZmlyc3RQb3N0U2NyaXB0ID0g
YmFzZS0+bmV4dFNpYmxpbmdCb3goKTsKKyAgICAgICAgICAgIHJlZmVyZW5jZS5maXJzdFBvc3RT
Y3JpcHQgPSBiYXNlLT5uZXh0U2libGluZ0JveCgpOwogCiAgICAgICAgIC8vIFdlIGJyb3dzZSB0
aGUgY2hpbGRyZW4gaW4gb3JkZXIgdG8KICAgICAgICAgLy8gMSkgU2V0IHRoZSBmaXJzdCBwcmVz
Y3JpcHQsIHVubGVzcyAocHJlc3Vic2NyaXB0IHByZXN1cGVyc2NyaXB0KSogaXMgZW1wdHkuCkBA
IC0xMzYsMTkgKzE0NywyMCBAQCBib29sIFJlbmRlck1hdGhNTFNjcmlwdHM6OmdldEJhc2VBbmRT
Y3JpcHRzKFJlbmRlckJveComIGJhc2UsIFJlbmRlckJveComIGZpcnN0UAogICAgICAgICBmb3Ig
KGF1dG8gc2NyaXB0ID0gYmFzZS0+bmV4dFNpYmxpbmdCb3goKTsgc2NyaXB0OyBzY3JpcHQgPSBz
Y3JpcHQtPm5leHRTaWJsaW5nQm94KCkpIHsKICAgICAgICAgICAgIGlmIChpc1ByZXNjcmlwdERl
bGltaXRlcigqc2NyaXB0KSkgewogICAgICAgICAgICAgICAgIC8vIFRoaXMgaXMgYSA8bXByZXNj
cmlwdHMvPi4gTGV0J3MgY2hlY2sgMmEpIGFuZCAyYykuCi0gICAgICAgICAgICAgICAgaWYgKCFu
dW1iZXJPZlNjcmlwdElzRXZlbiB8fCBmaXJzdFByZVNjcmlwdCkKLSAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgICAgIGZpcnN0UHJlU2NyaXB0ID0gc2NyaXB0
LT5uZXh0U2libGluZ0JveCgpOyAvLyBXZSBkbyAxKS4KKyAgICAgICAgICAgICAgICBpZiAoIW51
bWJlck9mU2NyaXB0SXNFdmVuIHx8IHJlZmVyZW5jZS5maXJzdFByZVNjcmlwdCkKKyAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIE51bGxvcHQ7CisgICAgICAgICAgICAgICAgcmVmZXJlbmNlLmZp
cnN0UHJlU2NyaXB0ID0gc2NyaXB0LT5uZXh0U2libGluZ0JveCgpOyAvLyBXZSBkbyAxKS4KKyAg
ICAgICAgICAgICAgICByZWZlcmVuY2UucHJlc2NyaXB0RGVsaW1pdGVyID0gc2NyaXB0OwogICAg
ICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgbnVtYmVy
T2ZTY3JpcHRJc0V2ZW4gPSAhbnVtYmVyT2ZTY3JpcHRJc0V2ZW47CiAgICAgICAgIH0KLSAgICAg
ICAgcmV0dXJuIG51bWJlck9mU2NyaXB0SXNFdmVuOyAvLyBXZSB2ZXJpZnkgMmIpLgorICAgICAg
ICByZXR1cm4gbnVtYmVyT2ZTY3JpcHRJc0V2ZW4gPyBPcHRpb25hbDxSZWZlcmVuY2VDaGlsZHJl
bj4ocmVmZXJlbmNlKSA6IE51bGxvcHQ7IC8vIFdlIHZlcmlmeSAyYikuCiAgICAgfQogICAgIH0K
IAogICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgIHJldHVybiBmYWxzZTsKKyAgICByZXR1
cm4gTnVsbG9wdDsKIH0KIAogTGF5b3V0VW5pdCBSZW5kZXJNYXRoTUxTY3JpcHRzOjpzcGFjZUFm
dGVyU2NyaXB0KCkKQEAgLTE1OSwxMCArMTcxLDEwIEBAIExheW91dFVuaXQgUmVuZGVyTWF0aE1M
U2NyaXB0czo6c3BhY2VBZnRlclNjcmlwdCgpCiAgICAgcmV0dXJuIHN0eWxlKCkuZm9udENhc2Nh
ZGUoKS5zaXplKCkgLyA1OwogfQogCi1MYXlvdXRVbml0IFJlbmRlck1hdGhNTFNjcmlwdHM6Oml0
YWxpY0NvcnJlY3Rpb24oUmVuZGVyQm94KiBiYXNlKQorTGF5b3V0VW5pdCBSZW5kZXJNYXRoTUxT
Y3JpcHRzOjppdGFsaWNDb3JyZWN0aW9uKGNvbnN0IFJlZmVyZW5jZUNoaWxkcmVuJiByZWZlcmVu
Y2UpCiB7Ci0gICAgaWYgKGlzPFJlbmRlck1hdGhNTEJsb2NrPigqYmFzZSkpIHsKLSAgICAgICAg
aWYgKGF1dG8qIHJlbmRlck9wZXJhdG9yID0gZG93bmNhc3Q8UmVuZGVyTWF0aE1MQmxvY2s+KCpi
YXNlKS51bmVtYmVsbGlzaGVkT3BlcmF0b3IoKSkKKyAgICBpZiAoaXM8UmVuZGVyTWF0aE1MQmxv
Y2s+KCpyZWZlcmVuY2UuYmFzZSkpIHsKKyAgICAgICAgaWYgKGF1dG8qIHJlbmRlck9wZXJhdG9y
ID0gZG93bmNhc3Q8UmVuZGVyTWF0aE1MQmxvY2s+KCpyZWZlcmVuY2UuYmFzZSkudW5lbWJlbGxp
c2hlZE9wZXJhdG9yKCkpCiAgICAgICAgICAgICByZXR1cm4gcmVuZGVyT3BlcmF0b3ItPml0YWxp
Y0NvcnJlY3Rpb24oKTsKICAgICB9CiAgICAgcmV0dXJuIDA7CkBAIC0xNzMsNDIgKzE4NSw0NCBA
QCB2b2lkIFJlbmRlck1hdGhNTFNjcmlwdHM6OmNvbXB1dGVQcmVmZXJyZWRMb2dpY2FsV2lkdGhz
KCkKICAgICBtX21pblByZWZlcnJlZExvZ2ljYWxXaWR0aCA9IDA7CiAgICAgbV9tYXhQcmVmZXJy
ZWRMb2dpY2FsV2lkdGggPSAwOwogCi0gICAgUmVuZGVyQm94KiBiYXNlOwotICAgIFJlbmRlckJv
eCogZmlyc3RQb3N0U2NyaXB0OwotICAgIFJlbmRlckJveCogZmlyc3RQcmVTY3JpcHQ7Ci0gICAg
aWYgKCFnZXRCYXNlQW5kU2NyaXB0cyhiYXNlLCBmaXJzdFBvc3RTY3JpcHQsIGZpcnN0UHJlU2Ny
aXB0KSkKKyAgICBhdXRvIHBvc3NpYmxlUmVmZXJlbmNlID0gdmFsaWRhdGVBbmRHZXRSZWZlcmVu
Y2VDaGlsZHJlbigpOworICAgIGlmICghcG9zc2libGVSZWZlcmVuY2UpCiAgICAgICAgIHJldHVy
bjsKKyAgICBhdXRvJiByZWZlcmVuY2UgPSBwb3NzaWJsZVJlZmVyZW5jZS52YWx1ZSgpOwogCi0g
ICAgTGF5b3V0VW5pdCBiYXNlSXRhbGljQ29ycmVjdGlvbiA9IHN0ZDo6bWluKGJhc2UtPm1heFBy
ZWZlcnJlZExvZ2ljYWxXaWR0aCgpLCBpdGFsaWNDb3JyZWN0aW9uKGJhc2UpKTsKKyAgICBMYXlv
dXRVbml0IGJhc2VJdGFsaWNDb3JyZWN0aW9uID0gc3RkOjptaW4ocmVmZXJlbmNlLmJhc2UtPm1h
eFByZWZlcnJlZExvZ2ljYWxXaWR0aCgpLCBpdGFsaWNDb3JyZWN0aW9uKHJlZmVyZW5jZSkpOwog
ICAgIExheW91dFVuaXQgc3BhY2UgPSBzcGFjZUFmdGVyU2NyaXB0KCk7CiAKICAgICBzd2l0Y2gg
KG1fc2NyaXB0VHlwZSkgewogICAgIGNhc2UgU3ViOgogICAgIGNhc2UgVW5kZXI6Ci0gICAgICAg
IG1fbWF4UHJlZmVycmVkTG9naWNhbFdpZHRoICs9IGJhc2UtPm1heFByZWZlcnJlZExvZ2ljYWxX
aWR0aCgpOwotICAgICAgICBtX21heFByZWZlcnJlZExvZ2ljYWxXaWR0aCArPSBzdGQ6Om1heChM
YXlvdXRVbml0KDApLCBmaXJzdFBvc3RTY3JpcHQtPm1heFByZWZlcnJlZExvZ2ljYWxXaWR0aCgp
IC0gYmFzZUl0YWxpY0NvcnJlY3Rpb24gKyBzcGFjZSk7CisgICAgICAgIG1fbWF4UHJlZmVycmVk
TG9naWNhbFdpZHRoICs9IHJlZmVyZW5jZS5iYXNlLT5tYXhQcmVmZXJyZWRMb2dpY2FsV2lkdGgo
KTsKKyAgICAgICAgbV9tYXhQcmVmZXJyZWRMb2dpY2FsV2lkdGggKz0gc3RkOjptYXgoTGF5b3V0
VW5pdCgwKSwgcmVmZXJlbmNlLmZpcnN0UG9zdFNjcmlwdC0+bWF4UHJlZmVycmVkTG9naWNhbFdp
ZHRoKCkgLSBiYXNlSXRhbGljQ29ycmVjdGlvbiArIHNwYWNlKTsKICAgICAgICAgYnJlYWs7CiAg
ICAgY2FzZSBTdXBlcjoKICAgICBjYXNlIE92ZXI6Ci0gICAgICAgIG1fbWF4UHJlZmVycmVkTG9n
aWNhbFdpZHRoICs9IGJhc2UtPm1heFByZWZlcnJlZExvZ2ljYWxXaWR0aCgpOwotICAgICAgICBt
X21heFByZWZlcnJlZExvZ2ljYWxXaWR0aCArPSBzdGQ6Om1heChMYXlvdXRVbml0KDApLCBmaXJz
dFBvc3RTY3JpcHQtPm1heFByZWZlcnJlZExvZ2ljYWxXaWR0aCgpICsgc3BhY2UpOworICAgICAg
ICBtX21heFByZWZlcnJlZExvZ2ljYWxXaWR0aCArPSByZWZlcmVuY2UuYmFzZS0+bWF4UHJlZmVy
cmVkTG9naWNhbFdpZHRoKCk7CisgICAgICAgIG1fbWF4UHJlZmVycmVkTG9naWNhbFdpZHRoICs9
IHN0ZDo6bWF4KExheW91dFVuaXQoMCksIHJlZmVyZW5jZS5maXJzdFBvc3RTY3JpcHQtPm1heFBy
ZWZlcnJlZExvZ2ljYWxXaWR0aCgpICsgc3BhY2UpOwogICAgICAgICBicmVhazsKICAgICBjYXNl
IFN1YlN1cDoKICAgICBjYXNlIFVuZGVyT3ZlcjoKICAgICBjYXNlIE11bHRpc2NyaXB0czogewot
ICAgICAgICBSZW5kZXJCb3gqIHN1cFNjcmlwdDsKLSAgICAgICAgZm9yIChhdXRvKiBzdWJTY3Jp
cHQgPSBmaXJzdFByZVNjcmlwdDsgc3ViU2NyaXB0OyBzdWJTY3JpcHQgPSBzdXBTY3JpcHQtPm5l
eHRTaWJsaW5nQm94KCkpIHsKLSAgICAgICAgICAgIHN1cFNjcmlwdCA9IHN1YlNjcmlwdC0+bmV4
dFNpYmxpbmdCb3goKTsKKyAgICAgICAgYXV0byBzdWJTY3JpcHQgPSByZWZlcmVuY2UuZmlyc3RQ
cmVTY3JpcHQ7CisgICAgICAgIHdoaWxlIChzdWJTY3JpcHQpIHsKKyAgICAgICAgICAgIGF1dG8g
c3VwU2NyaXB0ID0gc3ViU2NyaXB0LT5uZXh0U2libGluZ0JveCgpOwogICAgICAgICAgICAgQVNT
RVJUKHN1cFNjcmlwdCk7CiAgICAgICAgICAgICBMYXlvdXRVbml0IHN1YlN1cFBhaXJXaWR0aCA9
IHN0ZDo6bWF4KHN1YlNjcmlwdC0+bWF4UHJlZmVycmVkTG9naWNhbFdpZHRoKCksIHN1cFNjcmlw
dC0+bWF4UHJlZmVycmVkTG9naWNhbFdpZHRoKCkpOwogICAgICAgICAgICAgbV9tYXhQcmVmZXJy
ZWRMb2dpY2FsV2lkdGggKz0gc3ViU3VwUGFpcldpZHRoICsgc3BhY2U7CisgICAgICAgICAgICBz
dWJTY3JpcHQgPSBzdXBTY3JpcHQtPm5leHRTaWJsaW5nQm94KCk7CiAgICAgICAgIH0KLSAgICAg
ICAgbV9tYXhQcmVmZXJyZWRMb2dpY2FsV2lkdGggKz0gYmFzZS0+bWF4UHJlZmVycmVkTG9naWNh
bFdpZHRoKCk7Ci0gICAgICAgIGZvciAoYXV0byogc3ViU2NyaXB0ID0gZmlyc3RQb3N0U2NyaXB0
OyBzdWJTY3JpcHQgJiYgIWlzUHJlc2NyaXB0RGVsaW1pdGVyKCpzdWJTY3JpcHQpOyBzdWJTY3Jp
cHQgPSBzdXBTY3JpcHQtPm5leHRTaWJsaW5nQm94KCkpIHsKLSAgICAgICAgICAgIHN1cFNjcmlw
dCA9IHN1YlNjcmlwdC0+bmV4dFNpYmxpbmdCb3goKTsKKyAgICAgICAgbV9tYXhQcmVmZXJyZWRM
b2dpY2FsV2lkdGggKz0gcmVmZXJlbmNlLmJhc2UtPm1heFByZWZlcnJlZExvZ2ljYWxXaWR0aCgp
OworICAgICAgICBzdWJTY3JpcHQgPSByZWZlcmVuY2UuZmlyc3RQb3N0U2NyaXB0OworICAgICAg
ICB3aGlsZSAoc3ViU2NyaXB0ICYmIHN1YlNjcmlwdCAhPSByZWZlcmVuY2UucHJlc2NyaXB0RGVs
aW1pdGVyKSB7CisgICAgICAgICAgICBhdXRvIHN1cFNjcmlwdCA9IHN1YlNjcmlwdC0+bmV4dFNp
YmxpbmdCb3goKTsKICAgICAgICAgICAgIEFTU0VSVChzdXBTY3JpcHQpOwogICAgICAgICAgICAg
TGF5b3V0VW5pdCBzdWJTdXBQYWlyV2lkdGggPSBzdGQ6Om1heChzdGQ6Om1heChMYXlvdXRVbml0
KDApLCBzdWJTY3JpcHQtPm1heFByZWZlcnJlZExvZ2ljYWxXaWR0aCgpIC0gYmFzZUl0YWxpY0Nv
cnJlY3Rpb24pLCBzdXBTY3JpcHQtPm1heFByZWZlcnJlZExvZ2ljYWxXaWR0aCgpKTsKICAgICAg
ICAgICAgIG1fbWF4UHJlZmVycmVkTG9naWNhbFdpZHRoICs9IHN1YlN1cFBhaXJXaWR0aCArIHNw
YWNlOworICAgICAgICAgICAgc3ViU2NyaXB0ID0gc3VwU2NyaXB0LT5uZXh0U2libGluZ0JveCgp
OwogICAgICAgICB9CiAgICAgfQogICAgIH0KQEAgLTIxNiw0MyArMjMwLDQyIEBAIHZvaWQgUmVu
ZGVyTWF0aE1MU2NyaXB0czo6Y29tcHV0ZVByZWZlcnJlZExvZ2ljYWxXaWR0aHMoKQogICAgIG1f
bWluUHJlZmVycmVkTG9naWNhbFdpZHRoID0gbV9tYXhQcmVmZXJyZWRMb2dpY2FsV2lkdGg7CiB9
CiAKLXZvaWQgUmVuZGVyTWF0aE1MU2NyaXB0czo6Z2V0U2NyaXB0TWV0cmljc0FuZExheW91dElm
TmVlZGVkKFJlbmRlckJveCogYmFzZSwgUmVuZGVyQm94KiBzY3JpcHQsIFNjcmlwdE1ldHJpY3Mm
IG1ldHJpY3MpCithdXRvIFJlbmRlck1hdGhNTFNjcmlwdHM6OnZlcnRpY2FsUGFyYW1ldGVycygp
IGNvbnN0IC0+IFZlcnRpY2FsUGFyYW1ldGVycwogewotICAgIExheW91dFVuaXQgYmFzZUFzY2Vu
dCA9IGFzY2VudEZvckNoaWxkKCpiYXNlKTsKLSAgICBMYXlvdXRVbml0IGJhc2VEZXNjZW50ID0g
YmFzZS0+bG9naWNhbEhlaWdodCgpIC0gYmFzZUFzY2VudDsKLSAgICBMYXlvdXRVbml0IHN1YnNj
cmlwdFNoaWZ0RG93bjsKLSAgICBMYXlvdXRVbml0IHN1cGVyc2NyaXB0U2hpZnRVcDsKLSAgICBM
YXlvdXRVbml0IHN1YnNjcmlwdEJhc2VsaW5lRHJvcE1pbjsKLSAgICBMYXlvdXRVbml0IHN1cGVy
U2NyaXB0QmFzZWxpbmVEcm9wTWF4OwotICAgIExheW91dFVuaXQgc3ViU3VwZXJzY3JpcHRHYXBN
aW47Ci0gICAgTGF5b3V0VW5pdCBzdXBlcnNjcmlwdEJvdHRvbU1pbjsKLSAgICBMYXlvdXRVbml0
IHN1YnNjcmlwdFRvcE1heDsKLSAgICBMYXlvdXRVbml0IHN1cGVyc2NyaXB0Qm90dG9tTWF4V2l0
aFN1YnNjcmlwdDsKLQorICAgIFZlcnRpY2FsUGFyYW1ldGVycyBwYXJhbWV0ZXJzOwogICAgIGNv
bnN0IGF1dG8mIHByaW1hcnlGb250ID0gc3R5bGUoKS5mb250Q2FzY2FkZSgpLnByaW1hcnlGb250
KCk7CiAgICAgaWYgKGF1dG8qIG1hdGhEYXRhID0gcHJpbWFyeUZvbnQubWF0aERhdGEoKSkgewot
ICAgICAgICBzdWJzY3JpcHRTaGlmdERvd24gPSBtYXRoRGF0YS0+Z2V0TWF0aENvbnN0YW50KHBy
aW1hcnlGb250LCBPcGVuVHlwZU1hdGhEYXRhOjpTdWJzY3JpcHRTaGlmdERvd24pOwotICAgICAg
ICBzdXBlcnNjcmlwdFNoaWZ0VXAgPSBtYXRoRGF0YS0+Z2V0TWF0aENvbnN0YW50KHByaW1hcnlG
b250LCBPcGVuVHlwZU1hdGhEYXRhOjpTdXBlcnNjcmlwdFNoaWZ0VXApOwotICAgICAgICBzdWJz
Y3JpcHRCYXNlbGluZURyb3BNaW4gPSBtYXRoRGF0YS0+Z2V0TWF0aENvbnN0YW50KHByaW1hcnlG
b250LCBPcGVuVHlwZU1hdGhEYXRhOjpTdWJzY3JpcHRCYXNlbGluZURyb3BNaW4pOwotICAgICAg
ICBzdXBlclNjcmlwdEJhc2VsaW5lRHJvcE1heCA9IG1hdGhEYXRhLT5nZXRNYXRoQ29uc3RhbnQo
cHJpbWFyeUZvbnQsIE9wZW5UeXBlTWF0aERhdGE6OlN1cGVyc2NyaXB0QmFzZWxpbmVEcm9wTWF4
KTsKLSAgICAgICAgc3ViU3VwZXJzY3JpcHRHYXBNaW4gPSBtYXRoRGF0YS0+Z2V0TWF0aENvbnN0
YW50KHByaW1hcnlGb250LCBPcGVuVHlwZU1hdGhEYXRhOjpTdWJTdXBlcnNjcmlwdEdhcE1pbik7
Ci0gICAgICAgIHN1cGVyc2NyaXB0Qm90dG9tTWluID0gbWF0aERhdGEtPmdldE1hdGhDb25zdGFu
dChwcmltYXJ5Rm9udCwgT3BlblR5cGVNYXRoRGF0YTo6U3VwZXJzY3JpcHRCb3R0b21NaW4pOwot
ICAgICAgICBzdWJzY3JpcHRUb3BNYXggPSBtYXRoRGF0YS0+Z2V0TWF0aENvbnN0YW50KHByaW1h
cnlGb250LCBPcGVuVHlwZU1hdGhEYXRhOjpTdWJzY3JpcHRUb3BNYXgpOwotICAgICAgICBzdXBl
cnNjcmlwdEJvdHRvbU1heFdpdGhTdWJzY3JpcHQgPSBtYXRoRGF0YS0+Z2V0TWF0aENvbnN0YW50
KHByaW1hcnlGb250LCBPcGVuVHlwZU1hdGhEYXRhOjpTdXBlcnNjcmlwdEJvdHRvbU1heFdpdGhT
dWJzY3JpcHQpOworICAgICAgICBwYXJhbWV0ZXJzLnN1YnNjcmlwdFNoaWZ0RG93biA9IG1hdGhE
YXRhLT5nZXRNYXRoQ29uc3RhbnQocHJpbWFyeUZvbnQsIE9wZW5UeXBlTWF0aERhdGE6OlN1YnNj
cmlwdFNoaWZ0RG93bik7CisgICAgICAgIHBhcmFtZXRlcnMuc3VwZXJzY3JpcHRTaGlmdFVwID0g
bWF0aERhdGEtPmdldE1hdGhDb25zdGFudChwcmltYXJ5Rm9udCwgT3BlblR5cGVNYXRoRGF0YTo6
U3VwZXJzY3JpcHRTaGlmdFVwKTsKKyAgICAgICAgcGFyYW1ldGVycy5zdWJzY3JpcHRCYXNlbGlu
ZURyb3BNaW4gPSBtYXRoRGF0YS0+Z2V0TWF0aENvbnN0YW50KHByaW1hcnlGb250LCBPcGVuVHlw
ZU1hdGhEYXRhOjpTdWJzY3JpcHRCYXNlbGluZURyb3BNaW4pOworICAgICAgICBwYXJhbWV0ZXJz
LnN1cGVyU2NyaXB0QmFzZWxpbmVEcm9wTWF4ID0gbWF0aERhdGEtPmdldE1hdGhDb25zdGFudChw
cmltYXJ5Rm9udCwgT3BlblR5cGVNYXRoRGF0YTo6U3VwZXJzY3JpcHRCYXNlbGluZURyb3BNYXgp
OworICAgICAgICBwYXJhbWV0ZXJzLnN1YlN1cGVyc2NyaXB0R2FwTWluID0gbWF0aERhdGEtPmdl
dE1hdGhDb25zdGFudChwcmltYXJ5Rm9udCwgT3BlblR5cGVNYXRoRGF0YTo6U3ViU3VwZXJzY3Jp
cHRHYXBNaW4pOworICAgICAgICBwYXJhbWV0ZXJzLnN1cGVyc2NyaXB0Qm90dG9tTWluID0gbWF0
aERhdGEtPmdldE1hdGhDb25zdGFudChwcmltYXJ5Rm9udCwgT3BlblR5cGVNYXRoRGF0YTo6U3Vw
ZXJzY3JpcHRCb3R0b21NaW4pOworICAgICAgICBwYXJhbWV0ZXJzLnN1YnNjcmlwdFRvcE1heCA9
IG1hdGhEYXRhLT5nZXRNYXRoQ29uc3RhbnQocHJpbWFyeUZvbnQsIE9wZW5UeXBlTWF0aERhdGE6
OlN1YnNjcmlwdFRvcE1heCk7CisgICAgICAgIHBhcmFtZXRlcnMuc3VwZXJzY3JpcHRCb3R0b21N
YXhXaXRoU3Vic2NyaXB0ID0gbWF0aERhdGEtPmdldE1hdGhDb25zdGFudChwcmltYXJ5Rm9udCwg
T3BlblR5cGVNYXRoRGF0YTo6U3VwZXJzY3JpcHRCb3R0b21NYXhXaXRoU3Vic2NyaXB0KTsKICAg
ICB9IGVsc2UgewogICAgICAgICAvLyBEZWZhdWx0IGhldXJpc3RpYyB2YWx1ZXMgd2hlbiB5b3Ug
ZG8gbm90IGhhdmUgYSBmb250LgotICAgICAgICBzdWJzY3JpcHRTaGlmdERvd24gPSBzdHlsZSgp
LmZvbnRNZXRyaWNzKCkueEhlaWdodCgpIC8gMzsKLSAgICAgICAgc3VwZXJzY3JpcHRTaGlmdFVw
ID0gc3R5bGUoKS5mb250TWV0cmljcygpLnhIZWlnaHQoKTsKLSAgICAgICAgc3Vic2NyaXB0QmFz
ZWxpbmVEcm9wTWluID0gc3R5bGUoKS5mb250TWV0cmljcygpLnhIZWlnaHQoKSAvIDI7Ci0gICAg
ICAgIHN1cGVyU2NyaXB0QmFzZWxpbmVEcm9wTWF4ID0gc3R5bGUoKS5mb250TWV0cmljcygpLnhI
ZWlnaHQoKSAvIDI7Ci0gICAgICAgIHN1YlN1cGVyc2NyaXB0R2FwTWluID0gc3R5bGUoKS5mb250
Q2FzY2FkZSgpLnNpemUoKSAvIDU7Ci0gICAgICAgIHN1cGVyc2NyaXB0Qm90dG9tTWluID0gc3R5
bGUoKS5mb250TWV0cmljcygpLnhIZWlnaHQoKSAvIDQ7Ci0gICAgICAgIHN1YnNjcmlwdFRvcE1h
eCA9IDQgKiBzdHlsZSgpLmZvbnRNZXRyaWNzKCkueEhlaWdodCgpIC8gNTsKLSAgICAgICAgc3Vw
ZXJzY3JpcHRCb3R0b21NYXhXaXRoU3Vic2NyaXB0ID0gNCAqIHN0eWxlKCkuZm9udE1ldHJpY3Mo
KS54SGVpZ2h0KCkgLyA1OworICAgICAgICBwYXJhbWV0ZXJzLnN1YnNjcmlwdFNoaWZ0RG93biA9
IHN0eWxlKCkuZm9udE1ldHJpY3MoKS54SGVpZ2h0KCkgLyAzOworICAgICAgICBwYXJhbWV0ZXJz
LnN1cGVyc2NyaXB0U2hpZnRVcCA9IHN0eWxlKCkuZm9udE1ldHJpY3MoKS54SGVpZ2h0KCk7Cisg
ICAgICAgIHBhcmFtZXRlcnMuc3Vic2NyaXB0QmFzZWxpbmVEcm9wTWluID0gc3R5bGUoKS5mb250
TWV0cmljcygpLnhIZWlnaHQoKSAvIDI7CisgICAgICAgIHBhcmFtZXRlcnMuc3VwZXJTY3JpcHRC
YXNlbGluZURyb3BNYXggPSBzdHlsZSgpLmZvbnRNZXRyaWNzKCkueEhlaWdodCgpIC8gMjsKKyAg
ICAgICAgcGFyYW1ldGVycy5zdWJTdXBlcnNjcmlwdEdhcE1pbiA9IHN0eWxlKCkuZm9udENhc2Nh
ZGUoKS5zaXplKCkgLyA1OworICAgICAgICBwYXJhbWV0ZXJzLnN1cGVyc2NyaXB0Qm90dG9tTWlu
ID0gc3R5bGUoKS5mb250TWV0cmljcygpLnhIZWlnaHQoKSAvIDQ7CisgICAgICAgIHBhcmFtZXRl
cnMuc3Vic2NyaXB0VG9wTWF4ID0gNCAqIHN0eWxlKCkuZm9udE1ldHJpY3MoKS54SGVpZ2h0KCkg
LyA1OworICAgICAgICBwYXJhbWV0ZXJzLnN1cGVyc2NyaXB0Qm90dG9tTWF4V2l0aFN1YnNjcmlw
dCA9IDQgKiBzdHlsZSgpLmZvbnRNZXRyaWNzKCkueEhlaWdodCgpIC8gNTsKICAgICB9CisgICAg
cmV0dXJuIHBhcmFtZXRlcnM7Cit9CiAKK1JlbmRlck1hdGhNTFNjcmlwdHM6OlZlcnRpY2FsTWV0
cmljcyBSZW5kZXJNYXRoTUxTY3JpcHRzOjp2ZXJ0aWNhbE1ldHJpY3MoY29uc3QgUmVmZXJlbmNl
Q2hpbGRyZW4mIHJlZmVyZW5jZSkKK3sKKyAgICBWZXJ0aWNhbFBhcmFtZXRlcnMgcGFyYW1ldGVy
cyA9IHZlcnRpY2FsUGFyYW1ldGVycygpOworICAgIFZlcnRpY2FsTWV0cmljcyBtZXRyaWNzID0g
eyAwLCAwLCAwLCAwIH07CisKKyAgICBMYXlvdXRVbml0IGJhc2VBc2NlbnQgPSBhc2NlbnRGb3JD
aGlsZCgqcmVmZXJlbmNlLmJhc2UpOworICAgIExheW91dFVuaXQgYmFzZURlc2NlbnQgPSByZWZl
cmVuY2UuYmFzZS0+bG9naWNhbEhlaWdodCgpIC0gYmFzZUFzY2VudDsKICAgICBpZiAobV9zY3Jp
cHRUeXBlID09IFN1YiB8fCBtX3NjcmlwdFR5cGUgPT0gU3ViU3VwIHx8IG1fc2NyaXB0VHlwZSA9
PSBNdWx0aXNjcmlwdHMgfHwgbV9zY3JpcHRUeXBlID09IFVuZGVyIHx8IG1fc2NyaXB0VHlwZSA9
PSBVbmRlck92ZXIpIHsKLSAgICAgICAgbWV0cmljcy5zdWJTaGlmdCA9IHN0ZDo6bWF4KHN1YnNj
cmlwdFNoaWZ0RG93biwgYmFzZURlc2NlbnQgKyBzdWJzY3JpcHRCYXNlbGluZURyb3BNaW4pOwor
ICAgICAgICBtZXRyaWNzLnN1YlNoaWZ0ID0gc3RkOjptYXgocGFyYW1ldGVycy5zdWJzY3JpcHRT
aGlmdERvd24sIGJhc2VEZXNjZW50ICsgcGFyYW1ldGVycy5zdWJzY3JpcHRCYXNlbGluZURyb3BN
aW4pOwogICAgICAgICBpZiAoIWlzUmVuZGVyTWF0aE1MVW5kZXJPdmVyKCkpIHsKICAgICAgICAg
ICAgIC8vIEl0IGlzIG5vdCBjbGVhciBob3cgdG8gaW50ZXJwcmV0IHRoZSBkZWZhdWx0IHNoaWZ0
IGFuZCBpdCBpcyBub3QgYXZhaWxhYmxlIHlldCBhbnl3YXkuCiAgICAgICAgICAgICAvLyBIZW5j
ZSB3ZSBqdXN0IHBhc3MgMCBhcyB0aGUgZGVmYXVsdCB2YWx1ZSB1c2VkIGJ5IHRvVXNlclVuaXRz
LgpAQCAtMjYxLDcgKzI3NCw3IEBAIHZvaWQgUmVuZGVyTWF0aE1MU2NyaXB0czo6Z2V0U2NyaXB0
TWV0cmljc0FuZExheW91dElmTmVlZGVkKFJlbmRlckJveCogYmFzZSwgUmVuCiAgICAgICAgIH0K
ICAgICB9CiAgICAgaWYgKG1fc2NyaXB0VHlwZSA9PSBTdXBlciB8fCBtX3NjcmlwdFR5cGUgPT0g
U3ViU3VwIHx8IG1fc2NyaXB0VHlwZSA9PSBNdWx0aXNjcmlwdHMgIHx8IG1fc2NyaXB0VHlwZSA9
PSBPdmVyIHx8IG1fc2NyaXB0VHlwZSA9PSBVbmRlck92ZXIpIHsKLSAgICAgICAgbWV0cmljcy5z
dXBTaGlmdCA9IHN0ZDo6bWF4KHN1cGVyc2NyaXB0U2hpZnRVcCwgYmFzZUFzY2VudCAtIHN1cGVy
U2NyaXB0QmFzZWxpbmVEcm9wTWF4KTsKKyAgICAgICAgbWV0cmljcy5zdXBTaGlmdCA9IHN0ZDo6
bWF4KHBhcmFtZXRlcnMuc3VwZXJzY3JpcHRTaGlmdFVwLCBiYXNlQXNjZW50IC0gcGFyYW1ldGVy
cy5zdXBlclNjcmlwdEJhc2VsaW5lRHJvcE1heCk7CiAgICAgICAgIGlmICghaXNSZW5kZXJNYXRo
TUxVbmRlck92ZXIoKSkgewogICAgICAgICAgICAgLy8gSXQgaXMgbm90IGNsZWFyIGhvdyB0byBp
bnRlcnByZXQgdGhlIGRlZmF1bHQgc2hpZnQgYW5kIGl0IGlzIG5vdCBhdmFpbGFibGUgeWV0IGFu
eXdheS4KICAgICAgICAgICAgIC8vIEhlbmNlIHdlIGp1c3QgcGFzcyAwIGFzIHRoZSBkZWZhdWx0
IHZhbHVlIHVzZWQgYnkgdG9Vc2VyVW5pdHMuCkBAIC0yNzMsNjEgKzI4Niw2NiBAQCB2b2lkIFJl
bmRlck1hdGhNTFNjcmlwdHM6OmdldFNjcmlwdE1ldHJpY3NBbmRMYXlvdXRJZk5lZWRlZChSZW5k
ZXJCb3gqIGJhc2UsIFJlbgogICAgIHN3aXRjaCAobV9zY3JpcHRUeXBlKSB7CiAgICAgY2FzZSBT
dWI6CiAgICAgY2FzZSBVbmRlcjogewotICAgICAgICBzY3JpcHQtPmxheW91dElmTmVlZGVkKCk7
Ci0gICAgICAgIExheW91dFVuaXQgc3ViQXNjZW50ID0gYXNjZW50Rm9yQ2hpbGQoKnNjcmlwdCk7
Ci0gICAgICAgIExheW91dFVuaXQgc3ViRGVzY2VudCA9IHNjcmlwdC0+bG9naWNhbEhlaWdodCgp
IC0gc3ViQXNjZW50OworICAgICAgICBMYXlvdXRVbml0IHN1YkFzY2VudCA9IGFzY2VudEZvckNo
aWxkKCpyZWZlcmVuY2UuZmlyc3RQb3N0U2NyaXB0KTsKKyAgICAgICAgTGF5b3V0VW5pdCBzdWJE
ZXNjZW50ID0gcmVmZXJlbmNlLmZpcnN0UG9zdFNjcmlwdC0+bG9naWNhbEhlaWdodCgpIC0gc3Vi
QXNjZW50OwogICAgICAgICBtZXRyaWNzLmRlc2NlbnQgPSBzdWJEZXNjZW50OwotICAgICAgICBt
ZXRyaWNzLnN1YlNoaWZ0ID0gc3RkOjptYXgobWV0cmljcy5zdWJTaGlmdCwgc3ViQXNjZW50IC0g
c3Vic2NyaXB0VG9wTWF4KTsKKyAgICAgICAgbWV0cmljcy5zdWJTaGlmdCA9IHN0ZDo6bWF4KG1l
dHJpY3Muc3ViU2hpZnQsIHN1YkFzY2VudCAtIHBhcmFtZXRlcnMuc3Vic2NyaXB0VG9wTWF4KTsK
ICAgICB9CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgU3VwZXI6CiAgICAgY2FzZSBPdmVyOiB7
Ci0gICAgICAgIHNjcmlwdC0+bGF5b3V0SWZOZWVkZWQoKTsKLSAgICAgICAgTGF5b3V0VW5pdCBz
dXBBc2NlbnQgPSBhc2NlbnRGb3JDaGlsZCgqc2NyaXB0KTsKLSAgICAgICAgTGF5b3V0VW5pdCBz
dXBEZXNjZW50ID0gc2NyaXB0LT5sb2dpY2FsSGVpZ2h0KCkgLSBzdXBBc2NlbnQ7CisgICAgICAg
IExheW91dFVuaXQgc3VwQXNjZW50ID0gYXNjZW50Rm9yQ2hpbGQoKnJlZmVyZW5jZS5maXJzdFBv
c3RTY3JpcHQpOworICAgICAgICBMYXlvdXRVbml0IHN1cERlc2NlbnQgPSByZWZlcmVuY2UuZmly
c3RQb3N0U2NyaXB0LT5sb2dpY2FsSGVpZ2h0KCkgLSBzdXBBc2NlbnQ7CiAgICAgICAgIG1ldHJp
Y3MuYXNjZW50ID0gc3VwQXNjZW50OwotICAgICAgICBtZXRyaWNzLnN1cFNoaWZ0ID0gc3RkOjpt
YXgobWV0cmljcy5zdXBTaGlmdCwgc3VwZXJzY3JpcHRCb3R0b21NaW4gKyBzdXBEZXNjZW50KTsK
KyAgICAgICAgbWV0cmljcy5zdXBTaGlmdCA9IHN0ZDo6bWF4KG1ldHJpY3Muc3VwU2hpZnQsIHBh
cmFtZXRlcnMuc3VwZXJzY3JpcHRCb3R0b21NaW4gKyBzdXBEZXNjZW50KTsKICAgICB9CiAgICAg
ICAgIGJyZWFrOwogICAgIGNhc2UgU3ViU3VwOgogICAgIGNhc2UgVW5kZXJPdmVyOgogICAgIGNh
c2UgTXVsdGlzY3JpcHRzOiB7Ci0gICAgICAgIFJlbmRlckJveCogc3VwU2NyaXB0OwotICAgICAg
ICBmb3IgKGF1dG8qIHN1YlNjcmlwdCA9IHNjcmlwdDsgc3ViU2NyaXB0ICYmICFpc1ByZXNjcmlw
dERlbGltaXRlcigqc3ViU2NyaXB0KTsgc3ViU2NyaXB0ID0gc3VwU2NyaXB0LT5uZXh0U2libGlu
Z0JveCgpKSB7Ci0gICAgICAgICAgICBzdXBTY3JpcHQgPSBzdWJTY3JpcHQtPm5leHRTaWJsaW5n
Qm94KCk7CisgICAgICAgIC8vIEZJWE1FOiBXZSBzaG91bGQgbW92ZSB0aGUgY29kZSB1cGRhdGlu
ZyBWZXJ0aWNhbE1ldHJpY3MgZm9yIGVhY2ggc3ViL3N1cCBwYWlyIGluIGEgaGVscGVyCisgICAg
ICAgIC8vIGZ1bmN0aW9uLiBUaGF0IHdheSwgU3ViU3VwL1VuZGVyT3ZlciBjYW4ganVzdCBtYWtl
IG9uZSBjYWxsIGFuZCB0aGUgbG9vcCBmb3IgTXVsdGlzY3JpcHRzCisgICAgICAgIC8vIGNhbiBi
ZSByZXdyaXR0ZW4gaW4gYSBtb3JlIHJlYWRhYmxlLgorICAgICAgICBhdXRvIHN1YlNjcmlwdCA9
IHJlZmVyZW5jZS5maXJzdFBvc3RTY3JpcHQgPyByZWZlcmVuY2UuZmlyc3RQb3N0U2NyaXB0IDog
cmVmZXJlbmNlLmZpcnN0UHJlU2NyaXB0OworICAgICAgICB3aGlsZSAoc3ViU2NyaXB0KSB7Cisg
ICAgICAgICAgICBhdXRvIHN1cFNjcmlwdCA9IHN1YlNjcmlwdC0+bmV4dFNpYmxpbmdCb3goKTsK
ICAgICAgICAgICAgIEFTU0VSVChzdXBTY3JpcHQpOwotICAgICAgICAgICAgc3ViU2NyaXB0LT5s
YXlvdXRJZk5lZWRlZCgpOwotICAgICAgICAgICAgc3VwU2NyaXB0LT5sYXlvdXRJZk5lZWRlZCgp
OwogICAgICAgICAgICAgTGF5b3V0VW5pdCBzdWJBc2NlbnQgPSBhc2NlbnRGb3JDaGlsZCgqc3Vi
U2NyaXB0KTsKICAgICAgICAgICAgIExheW91dFVuaXQgc3ViRGVzY2VudCA9IHN1YlNjcmlwdC0+
bG9naWNhbEhlaWdodCgpIC0gc3ViQXNjZW50OwogICAgICAgICAgICAgTGF5b3V0VW5pdCBzdXBB
c2NlbnQgPSBhc2NlbnRGb3JDaGlsZCgqc3VwU2NyaXB0KTsKICAgICAgICAgICAgIExheW91dFVu
aXQgc3VwRGVzY2VudCA9IHN1cFNjcmlwdC0+bG9naWNhbEhlaWdodCgpIC0gc3VwQXNjZW50Owog
ICAgICAgICAgICAgbWV0cmljcy5hc2NlbnQgPSBzdGQ6Om1heChtZXRyaWNzLmFzY2VudCwgc3Vw
QXNjZW50KTsKICAgICAgICAgICAgIG1ldHJpY3MuZGVzY2VudCA9IHN0ZDo6bWF4KG1ldHJpY3Mu
ZGVzY2VudCwgc3ViRGVzY2VudCk7Ci0gICAgICAgICAgICBMYXlvdXRVbml0IHN1YlNjcmlwdFNo
aWZ0ID0gc3RkOjptYXgoc3Vic2NyaXB0U2hpZnREb3duLCBiYXNlRGVzY2VudCArIHN1YnNjcmlw
dEJhc2VsaW5lRHJvcE1pbik7Ci0gICAgICAgICAgICBzdWJTY3JpcHRTaGlmdCA9IHN0ZDo6bWF4
KHN1YlNjcmlwdFNoaWZ0LCBzdWJBc2NlbnQgLSBzdWJzY3JpcHRUb3BNYXgpOwotICAgICAgICAg
ICAgTGF5b3V0VW5pdCBzdXBTY3JpcHRTaGlmdCA9IHN0ZDo6bWF4KHN1cGVyc2NyaXB0U2hpZnRV
cCwgYmFzZUFzY2VudCAtIHN1cGVyU2NyaXB0QmFzZWxpbmVEcm9wTWF4KTsKLSAgICAgICAgICAg
IHN1cFNjcmlwdFNoaWZ0ID0gc3RkOjptYXgoc3VwU2NyaXB0U2hpZnQsIHN1cGVyc2NyaXB0Qm90
dG9tTWluICsgc3VwRGVzY2VudCk7CisgICAgICAgICAgICBMYXlvdXRVbml0IHN1YlNjcmlwdFNo
aWZ0ID0gc3RkOjptYXgocGFyYW1ldGVycy5zdWJzY3JpcHRTaGlmdERvd24sIGJhc2VEZXNjZW50
ICsgcGFyYW1ldGVycy5zdWJzY3JpcHRCYXNlbGluZURyb3BNaW4pOworICAgICAgICAgICAgc3Vi
U2NyaXB0U2hpZnQgPSBzdGQ6Om1heChzdWJTY3JpcHRTaGlmdCwgc3ViQXNjZW50IC0gcGFyYW1l
dGVycy5zdWJzY3JpcHRUb3BNYXgpOworICAgICAgICAgICAgTGF5b3V0VW5pdCBzdXBTY3JpcHRT
aGlmdCA9IHN0ZDo6bWF4KHBhcmFtZXRlcnMuc3VwZXJzY3JpcHRTaGlmdFVwLCBiYXNlQXNjZW50
IC0gcGFyYW1ldGVycy5zdXBlclNjcmlwdEJhc2VsaW5lRHJvcE1heCk7CisgICAgICAgICAgICBz
dXBTY3JpcHRTaGlmdCA9IHN0ZDo6bWF4KHN1cFNjcmlwdFNoaWZ0LCBwYXJhbWV0ZXJzLnN1cGVy
c2NyaXB0Qm90dG9tTWluICsgc3VwRGVzY2VudCk7CiAKICAgICAgICAgICAgIExheW91dFVuaXQg
c3ViU3VwZXJzY3JpcHRHYXAgPSAoc3ViU2NyaXB0U2hpZnQgLSBzdWJBc2NlbnQpICsgKHN1cFNj
cmlwdFNoaWZ0IC0gc3VwRGVzY2VudCk7Ci0gICAgICAgICAgICBpZiAoc3ViU3VwZXJzY3JpcHRH
YXAgPCBzdWJTdXBlcnNjcmlwdEdhcE1pbikgeworICAgICAgICAgICAgaWYgKHN1YlN1cGVyc2Ny
aXB0R2FwIDwgcGFyYW1ldGVycy5zdWJTdXBlcnNjcmlwdEdhcE1pbikgewogICAgICAgICAgICAg
ICAgIC8vIEZpcnN0LCB3ZSB0cnkgYW5kIHB1c2ggdGhlIHN1cGVyc2NyaXB0IHVwLgotICAgICAg
ICAgICAgICAgIExheW91dFVuaXQgZGVsdGEgPSBzdXBlcnNjcmlwdEJvdHRvbU1heFdpdGhTdWJz
Y3JpcHQgLSAoc3VwU2NyaXB0U2hpZnQgLSBzdXBEZXNjZW50KTsKKyAgICAgICAgICAgICAgICBM
YXlvdXRVbml0IGRlbHRhID0gcGFyYW1ldGVycy5zdXBlcnNjcmlwdEJvdHRvbU1heFdpdGhTdWJz
Y3JpcHQgLSAoc3VwU2NyaXB0U2hpZnQgLSBzdXBEZXNjZW50KTsKICAgICAgICAgICAgICAgICBp
ZiAoZGVsdGEgPiAwKSB7Ci0gICAgICAgICAgICAgICAgICAgIGRlbHRhID0gc3RkOjptaW4oZGVs
dGEsIHN1YlN1cGVyc2NyaXB0R2FwTWluIC0gc3ViU3VwZXJzY3JpcHRHYXApOworICAgICAgICAg
ICAgICAgICAgICBkZWx0YSA9IHN0ZDo6bWluKGRlbHRhLCBwYXJhbWV0ZXJzLnN1YlN1cGVyc2Ny
aXB0R2FwTWluIC0gc3ViU3VwZXJzY3JpcHRHYXApOwogICAgICAgICAgICAgICAgICAgICBzdXBT
Y3JpcHRTaGlmdCArPSBkZWx0YTsKICAgICAgICAgICAgICAgICAgICAgc3ViU3VwZXJzY3JpcHRH
YXAgKz0gZGVsdGE7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIC8vIElmIHRo
YXQgaXMgbm90IGVub3VnaCwgd2UgcHVzaCB0aGUgc3Vic2NyaXB0IGRvd24uCi0gICAgICAgICAg
ICAgICAgaWYgKHN1YlN1cGVyc2NyaXB0R2FwIDwgc3ViU3VwZXJzY3JpcHRHYXBNaW4pCi0gICAg
ICAgICAgICAgICAgICAgIHN1YlNjcmlwdFNoaWZ0ICs9IHN1YlN1cGVyc2NyaXB0R2FwTWluIC0g
c3ViU3VwZXJzY3JpcHRHYXA7CisgICAgICAgICAgICAgICAgaWYgKHN1YlN1cGVyc2NyaXB0R2Fw
IDwgcGFyYW1ldGVycy5zdWJTdXBlcnNjcmlwdEdhcE1pbikKKyAgICAgICAgICAgICAgICAgICAg
c3ViU2NyaXB0U2hpZnQgKz0gcGFyYW1ldGVycy5zdWJTdXBlcnNjcmlwdEdhcE1pbiAtIHN1YlN1
cGVyc2NyaXB0R2FwOwogICAgICAgICAgICAgfQogCiAgICAgICAgICAgICBtZXRyaWNzLnN1YlNo
aWZ0ID0gc3RkOjptYXgobWV0cmljcy5zdWJTaGlmdCwgc3ViU2NyaXB0U2hpZnQpOwogICAgICAg
ICAgICAgbWV0cmljcy5zdXBTaGlmdCA9IHN0ZDo6bWF4KG1ldHJpY3Muc3VwU2hpZnQsIHN1cFNj
cmlwdFNoaWZ0KTsKKworICAgICAgICAgICAgc3ViU2NyaXB0ID0gc3VwU2NyaXB0LT5uZXh0U2li
bGluZ0JveCgpOworICAgICAgICAgICAgaWYgKHN1YlNjcmlwdCA9PSByZWZlcmVuY2UucHJlc2Ny
aXB0RGVsaW1pdGVyKQorICAgICAgICAgICAgICAgIHN1YlNjcmlwdCA9IHJlZmVyZW5jZS5maXJz
dFByZVNjcmlwdDsKICAgICAgICAgfQogICAgIH0KICAgICB9CisKKyAgICByZXR1cm4gbWV0cmlj
czsKIH0KIAogdm9pZCBSZW5kZXJNYXRoTUxTY3JpcHRzOjpsYXlvdXRCbG9jayhib29sIHJlbGF5
b3V0Q2hpbGRyZW4sIExheW91dFVuaXQpCkBAIC0zMzcsMzMgKzM1NSwyNyBAQCB2b2lkIFJlbmRl
ck1hdGhNTFNjcmlwdHM6OmxheW91dEJsb2NrKGJvb2wgcmVsYXlvdXRDaGlsZHJlbiwgTGF5b3V0
VW5pdCkKICAgICBpZiAoIXJlbGF5b3V0Q2hpbGRyZW4gJiYgc2ltcGxpZmllZExheW91dCgpKQog
ICAgICAgICByZXR1cm47CiAKLSAgICBSZW5kZXJCb3gqIGJhc2U7Ci0gICAgUmVuZGVyQm94KiBm
aXJzdFBvc3RTY3JpcHQ7Ci0gICAgUmVuZGVyQm94KiBmaXJzdFByZVNjcmlwdDsKLSAgICBpZiAo
IWdldEJhc2VBbmRTY3JpcHRzKGJhc2UsIGZpcnN0UG9zdFNjcmlwdCwgZmlyc3RQcmVTY3JpcHQp
KSB7CisgICAgYXV0byBwb3NzaWJsZVJlZmVyZW5jZSA9IHZhbGlkYXRlQW5kR2V0UmVmZXJlbmNl
Q2hpbGRyZW4oKTsKKyAgICBpZiAoIXBvc3NpYmxlUmVmZXJlbmNlKSB7CiAgICAgICAgIHNldExv
Z2ljYWxXaWR0aCgwKTsKICAgICAgICAgc2V0TG9naWNhbEhlaWdodCgwKTsKICAgICAgICAgY2xl
YXJOZWVkc0xheW91dCgpOwogICAgICAgICByZXR1cm47CiAgICAgfQorICAgIGF1dG8mIHJlZmVy
ZW5jZSA9IHBvc3NpYmxlUmVmZXJlbmNlLnZhbHVlKCk7CisKICAgICByZWNvbXB1dGVMb2dpY2Fs
V2lkdGgoKTsKLSAgICBiYXNlLT5sYXlvdXRJZk5lZWRlZCgpOworICAgIGZvciAoYXV0byBjaGls
ZCA9IGZpcnN0Q2hpbGRCb3goKTsgY2hpbGQ7IGNoaWxkID0gY2hpbGQtPm5leHRTaWJsaW5nQm94
KCkpCisgICAgICAgIGNoaWxkLT5sYXlvdXRJZk5lZWRlZCgpOwogCiAgICAgTGF5b3V0VW5pdCBz
cGFjZSA9IHNwYWNlQWZ0ZXJTY3JpcHQoKTsKIAogICAgIC8vIFdlIGRldGVybWluZSB0aGUgbWlu
aW1hbCBzaGlmdC9zaXplIG9mIGVhY2ggc2NyaXB0IGFuZCB0YWtlIHRoZSBtYXhpbXVtIG9mIHRo
ZSB2YWx1ZXMuCi0gICAgU2NyaXB0TWV0cmljcyBtZXRyaWNzOwotICAgIG1ldHJpY3Muc3ViU2hp
ZnQgPSAwOwotICAgIG1ldHJpY3Muc3VwU2hpZnQgPSAwOwotICAgIG1ldHJpY3MuZGVzY2VudCA9
IDA7Ci0gICAgbWV0cmljcy5hc2NlbnQgPSAwOwotICAgIGlmIChtX3NjcmlwdFR5cGUgPT0gTXVs
dGlzY3JpcHRzKQotICAgICAgICBnZXRTY3JpcHRNZXRyaWNzQW5kTGF5b3V0SWZOZWVkZWQoYmFz
ZSwgZmlyc3RQcmVTY3JpcHQsIG1ldHJpY3MpOwotICAgIGdldFNjcmlwdE1ldHJpY3NBbmRMYXlv
dXRJZk5lZWRlZChiYXNlLCBmaXJzdFBvc3RTY3JpcHQsIG1ldHJpY3MpOwotCi0gICAgTGF5b3V0
VW5pdCBiYXNlQXNjZW50ID0gYXNjZW50Rm9yQ2hpbGQoKmJhc2UpOwotICAgIExheW91dFVuaXQg
YmFzZURlc2NlbnQgPSBiYXNlLT5sb2dpY2FsSGVpZ2h0KCkgLSBiYXNlQXNjZW50OwotICAgIExh
eW91dFVuaXQgYmFzZUl0YWxpY0NvcnJlY3Rpb24gPSBzdGQ6Om1pbihiYXNlLT5sb2dpY2FsV2lk
dGgoKSwgaXRhbGljQ29ycmVjdGlvbihiYXNlKSk7CisgICAgVmVydGljYWxNZXRyaWNzIG1ldHJp
Y3MgPSB2ZXJ0aWNhbE1ldHJpY3MocmVmZXJlbmNlKTsKKworICAgIExheW91dFVuaXQgYmFzZUFz
Y2VudCA9IGFzY2VudEZvckNoaWxkKCpyZWZlcmVuY2UuYmFzZSk7CisgICAgTGF5b3V0VW5pdCBi
YXNlRGVzY2VudCA9IHJlZmVyZW5jZS5iYXNlLT5sb2dpY2FsSGVpZ2h0KCkgLSBiYXNlQXNjZW50
OworICAgIExheW91dFVuaXQgYmFzZUl0YWxpY0NvcnJlY3Rpb24gPSBzdGQ6Om1pbihyZWZlcmVu
Y2UuYmFzZS0+bG9naWNhbFdpZHRoKCksIGl0YWxpY0NvcnJlY3Rpb24ocmVmZXJlbmNlKSk7CiAg
ICAgTGF5b3V0VW5pdCBob3Jpem9udGFsT2Zmc2V0ID0gMDsKIAogICAgIExheW91dFVuaXQgYXNj
ZW50ID0gc3RkOjptYXgoYmFzZUFzY2VudCwgbWV0cmljcy5hc2NlbnQgKyBtZXRyaWNzLnN1cFNo
aWZ0KTsKQEAgLTM3Myw1MCArMzg1LDUzIEBAIHZvaWQgUmVuZGVyTWF0aE1MU2NyaXB0czo6bGF5
b3V0QmxvY2soYm9vbCByZWxheW91dENoaWxkcmVuLCBMYXlvdXRVbml0KQogICAgIHN3aXRjaCAo
bV9zY3JpcHRUeXBlKSB7CiAgICAgY2FzZSBTdWI6CiAgICAgY2FzZSBVbmRlcjogewotICAgICAg
ICBzZXRMb2dpY2FsV2lkdGgoYmFzZS0+bG9naWNhbFdpZHRoKCkgKyBzdGQ6Om1heChMYXlvdXRV
bml0KDApLCBmaXJzdFBvc3RTY3JpcHQtPmxvZ2ljYWxXaWR0aCgpIC0gYmFzZUl0YWxpY0NvcnJl
Y3Rpb24gKyBzcGFjZSkpOwotICAgICAgICBMYXlvdXRQb2ludCBiYXNlTG9jYXRpb24obWlycm9y
SWZOZWVkZWQoaG9yaXpvbnRhbE9mZnNldCwgKmJhc2UpLCBhc2NlbnQgLSBiYXNlQXNjZW50KTsK
LSAgICAgICAgYmFzZS0+c2V0TG9jYXRpb24oYmFzZUxvY2F0aW9uKTsKLSAgICAgICAgaG9yaXpv
bnRhbE9mZnNldCArPSBiYXNlLT5sb2dpY2FsV2lkdGgoKTsKLSAgICAgICAgTGF5b3V0VW5pdCBz
Y3JpcHRBc2NlbnQgPSBhc2NlbnRGb3JDaGlsZCgqZmlyc3RQb3N0U2NyaXB0KTsKLSAgICAgICAg
TGF5b3V0UG9pbnQgc2NyaXB0TG9jYXRpb24obWlycm9ySWZOZWVkZWQoaG9yaXpvbnRhbE9mZnNl
dCAtIGJhc2VJdGFsaWNDb3JyZWN0aW9uLCAqZmlyc3RQb3N0U2NyaXB0KSwgYXNjZW50ICsgbWV0
cmljcy5zdWJTaGlmdCAtIHNjcmlwdEFzY2VudCk7Ci0gICAgICAgIGZpcnN0UG9zdFNjcmlwdC0+
c2V0TG9jYXRpb24oc2NyaXB0TG9jYXRpb24pOworICAgICAgICBzZXRMb2dpY2FsV2lkdGgocmVm
ZXJlbmNlLmJhc2UtPmxvZ2ljYWxXaWR0aCgpICsgc3RkOjptYXgoTGF5b3V0VW5pdCgwKSwgcmVm
ZXJlbmNlLmZpcnN0UG9zdFNjcmlwdC0+bG9naWNhbFdpZHRoKCkgLSBiYXNlSXRhbGljQ29ycmVj
dGlvbiArIHNwYWNlKSk7CisgICAgICAgIExheW91dFBvaW50IGJhc2VMb2NhdGlvbihtaXJyb3JJ
Zk5lZWRlZChob3Jpem9udGFsT2Zmc2V0LCAqcmVmZXJlbmNlLmJhc2UpLCBhc2NlbnQgLSBiYXNl
QXNjZW50KTsKKyAgICAgICAgcmVmZXJlbmNlLmJhc2UtPnNldExvY2F0aW9uKGJhc2VMb2NhdGlv
bik7CisgICAgICAgIGhvcml6b250YWxPZmZzZXQgKz0gcmVmZXJlbmNlLmJhc2UtPmxvZ2ljYWxX
aWR0aCgpOworICAgICAgICBMYXlvdXRVbml0IHNjcmlwdEFzY2VudCA9IGFzY2VudEZvckNoaWxk
KCpyZWZlcmVuY2UuZmlyc3RQb3N0U2NyaXB0KTsKKyAgICAgICAgTGF5b3V0UG9pbnQgc2NyaXB0
TG9jYXRpb24obWlycm9ySWZOZWVkZWQoaG9yaXpvbnRhbE9mZnNldCAtIGJhc2VJdGFsaWNDb3Jy
ZWN0aW9uLCAqcmVmZXJlbmNlLmZpcnN0UG9zdFNjcmlwdCksIGFzY2VudCArIG1ldHJpY3Muc3Vi
U2hpZnQgLSBzY3JpcHRBc2NlbnQpOworICAgICAgICByZWZlcmVuY2UuZmlyc3RQb3N0U2NyaXB0
LT5zZXRMb2NhdGlvbihzY3JpcHRMb2NhdGlvbik7CiAgICAgfQogICAgICAgICBicmVhazsKICAg
ICBjYXNlIFN1cGVyOgogICAgIGNhc2UgT3ZlcjogewotICAgICAgICBzZXRMb2dpY2FsV2lkdGgo
YmFzZS0+bG9naWNhbFdpZHRoKCkgKyBzdGQ6Om1heChMYXlvdXRVbml0KDApLCBmaXJzdFBvc3RT
Y3JpcHQtPmxvZ2ljYWxXaWR0aCgpICsgc3BhY2UpKTsKLSAgICAgICAgTGF5b3V0UG9pbnQgYmFz
ZUxvY2F0aW9uKG1pcnJvcklmTmVlZGVkKGhvcml6b250YWxPZmZzZXQsICpiYXNlKSwgYXNjZW50
IC0gYmFzZUFzY2VudCk7Ci0gICAgICAgIGJhc2UtPnNldExvY2F0aW9uKGJhc2VMb2NhdGlvbik7
Ci0gICAgICAgIGhvcml6b250YWxPZmZzZXQgKz0gYmFzZS0+bG9naWNhbFdpZHRoKCk7Ci0gICAg
ICAgIExheW91dFVuaXQgc2NyaXB0QXNjZW50ID0gYXNjZW50Rm9yQ2hpbGQoKmZpcnN0UG9zdFNj
cmlwdCk7Ci0gICAgICAgIExheW91dFBvaW50IHNjcmlwdExvY2F0aW9uKG1pcnJvcklmTmVlZGVk
KGhvcml6b250YWxPZmZzZXQsICpmaXJzdFBvc3RTY3JpcHQpLCBhc2NlbnQgLSBtZXRyaWNzLnN1
cFNoaWZ0IC0gc2NyaXB0QXNjZW50KTsKLSAgICAgICAgZmlyc3RQb3N0U2NyaXB0LT5zZXRMb2Nh
dGlvbihzY3JpcHRMb2NhdGlvbik7CisgICAgICAgIHNldExvZ2ljYWxXaWR0aChyZWZlcmVuY2Uu
YmFzZS0+bG9naWNhbFdpZHRoKCkgKyBzdGQ6Om1heChMYXlvdXRVbml0KDApLCByZWZlcmVuY2Uu
Zmlyc3RQb3N0U2NyaXB0LT5sb2dpY2FsV2lkdGgoKSArIHNwYWNlKSk7CisgICAgICAgIExheW91
dFBvaW50IGJhc2VMb2NhdGlvbihtaXJyb3JJZk5lZWRlZChob3Jpem9udGFsT2Zmc2V0LCAqcmVm
ZXJlbmNlLmJhc2UpLCBhc2NlbnQgLSBiYXNlQXNjZW50KTsKKyAgICAgICAgcmVmZXJlbmNlLmJh
c2UtPnNldExvY2F0aW9uKGJhc2VMb2NhdGlvbik7CisgICAgICAgIGhvcml6b250YWxPZmZzZXQg
Kz0gcmVmZXJlbmNlLmJhc2UtPmxvZ2ljYWxXaWR0aCgpOworICAgICAgICBMYXlvdXRVbml0IHNj
cmlwdEFzY2VudCA9IGFzY2VudEZvckNoaWxkKCpyZWZlcmVuY2UuZmlyc3RQb3N0U2NyaXB0KTsK
KyAgICAgICAgTGF5b3V0UG9pbnQgc2NyaXB0TG9jYXRpb24obWlycm9ySWZOZWVkZWQoaG9yaXpv
bnRhbE9mZnNldCwgKnJlZmVyZW5jZS5maXJzdFBvc3RTY3JpcHQpLCBhc2NlbnQgLSBtZXRyaWNz
LnN1cFNoaWZ0IC0gc2NyaXB0QXNjZW50KTsKKyAgICAgICAgcmVmZXJlbmNlLmZpcnN0UG9zdFNj
cmlwdC0+c2V0TG9jYXRpb24oc2NyaXB0TG9jYXRpb24pOwogICAgIH0KICAgICAgICAgYnJlYWs7
CiAgICAgY2FzZSBTdWJTdXA6CiAgICAgY2FzZSBVbmRlck92ZXI6CiAgICAgY2FzZSBNdWx0aXNj
cmlwdHM6IHsKLSAgICAgICAgUmVuZGVyQm94KiBzdXBTY3JpcHQ7Ci0KICAgICAgICAgLy8gQ2Fs
Y3VsYXRlIHRoZSBsb2dpY2FsIHdpZHRoLgogICAgICAgICBMYXlvdXRVbml0IGxvZ2ljYWxXaWR0
aCA9IDA7Ci0gICAgICAgIGZvciAoYXV0byogc3ViU2NyaXB0ID0gZmlyc3RQcmVTY3JpcHQ7IHN1
YlNjcmlwdDsgc3ViU2NyaXB0ID0gc3VwU2NyaXB0LT5uZXh0U2libGluZ0JveCgpKSB7Ci0gICAg
ICAgICAgICBzdXBTY3JpcHQgPSBzdWJTY3JpcHQtPm5leHRTaWJsaW5nQm94KCk7CisgICAgICAg
IGF1dG8gc3ViU2NyaXB0ID0gcmVmZXJlbmNlLmZpcnN0UHJlU2NyaXB0OworICAgICAgICB3aGls
ZSAoc3ViU2NyaXB0KSB7CisgICAgICAgICAgICBhdXRvIHN1cFNjcmlwdCA9IHN1YlNjcmlwdC0+
bmV4dFNpYmxpbmdCb3goKTsKICAgICAgICAgICAgIEFTU0VSVChzdXBTY3JpcHQpOwogICAgICAg
ICAgICAgTGF5b3V0VW5pdCBzdWJTdXBQYWlyV2lkdGggPSBzdGQ6Om1heChzdWJTY3JpcHQtPmxv
Z2ljYWxXaWR0aCgpLCBzdXBTY3JpcHQtPmxvZ2ljYWxXaWR0aCgpKTsKICAgICAgICAgICAgIGxv
Z2ljYWxXaWR0aCArPSBzdWJTdXBQYWlyV2lkdGggKyBzcGFjZTsKKyAgICAgICAgICAgIHN1YlNj
cmlwdCA9IHN1cFNjcmlwdC0+bmV4dFNpYmxpbmdCb3goKTsKICAgICAgICAgfQotICAgICAgICBs
b2dpY2FsV2lkdGggKz0gYmFzZS0+bG9naWNhbFdpZHRoKCk7Ci0gICAgICAgIGZvciAoYXV0byog
c3ViU2NyaXB0ID0gZmlyc3RQb3N0U2NyaXB0OyBzdWJTY3JpcHQgJiYgIWlzUHJlc2NyaXB0RGVs
aW1pdGVyKCpzdWJTY3JpcHQpOyBzdWJTY3JpcHQgPSBzdXBTY3JpcHQtPm5leHRTaWJsaW5nQm94
KCkpIHsKLSAgICAgICAgICAgIHN1cFNjcmlwdCA9IHN1YlNjcmlwdC0+bmV4dFNpYmxpbmdCb3go
KTsKKyAgICAgICAgbG9naWNhbFdpZHRoICs9IHJlZmVyZW5jZS5iYXNlLT5sb2dpY2FsV2lkdGgo
KTsKKyAgICAgICAgc3ViU2NyaXB0ID0gcmVmZXJlbmNlLmZpcnN0UG9zdFNjcmlwdDsKKyAgICAg
ICAgd2hpbGUgKHN1YlNjcmlwdCAmJiBzdWJTY3JpcHQgIT0gcmVmZXJlbmNlLnByZXNjcmlwdERl
bGltaXRlcikgeworICAgICAgICAgICAgYXV0byBzdXBTY3JpcHQgPSBzdWJTY3JpcHQtPm5leHRT
aWJsaW5nQm94KCk7CiAgICAgICAgICAgICBBU1NFUlQoc3VwU2NyaXB0KTsKICAgICAgICAgICAg
IExheW91dFVuaXQgc3ViU3VwUGFpcldpZHRoID0gc3RkOjptYXgoc3RkOjptYXgoTGF5b3V0VW5p
dCgwKSwgc3ViU2NyaXB0LT5sb2dpY2FsV2lkdGgoKSAtIGJhc2VJdGFsaWNDb3JyZWN0aW9uKSwg
c3VwU2NyaXB0LT5sb2dpY2FsV2lkdGgoKSk7CiAgICAgICAgICAgICBsb2dpY2FsV2lkdGggKz0g
c3ViU3VwUGFpcldpZHRoICsgc3BhY2U7CisgICAgICAgICAgICBzdWJTY3JpcHQgPSBzdXBTY3Jp
cHQtPm5leHRTaWJsaW5nQm94KCk7CiAgICAgICAgIH0KICAgICAgICAgc2V0TG9naWNhbFdpZHRo
KGxvZ2ljYWxXaWR0aCk7CiAKLSAgICAgICAgZm9yIChhdXRvKiBzdWJTY3JpcHQgPSBmaXJzdFBy
ZVNjcmlwdDsgc3ViU2NyaXB0OyBzdWJTY3JpcHQgPSBzdXBTY3JpcHQtPm5leHRTaWJsaW5nQm94
KCkpIHsKLSAgICAgICAgICAgIHN1cFNjcmlwdCA9IHN1YlNjcmlwdC0+bmV4dFNpYmxpbmdCb3go
KTsKKyAgICAgICAgc3ViU2NyaXB0ID0gcmVmZXJlbmNlLmZpcnN0UHJlU2NyaXB0OworICAgICAg
ICB3aGlsZSAoc3ViU2NyaXB0KSB7CisgICAgICAgICAgICBhdXRvIHN1cFNjcmlwdCA9IHN1YlNj
cmlwdC0+bmV4dFNpYmxpbmdCb3goKTsKICAgICAgICAgICAgIEFTU0VSVChzdXBTY3JpcHQpOwog
ICAgICAgICAgICAgTGF5b3V0VW5pdCBzdWJTdXBQYWlyV2lkdGggPSBzdGQ6Om1heChzdWJTY3Jp
cHQtPmxvZ2ljYWxXaWR0aCgpLCBzdXBTY3JpcHQtPmxvZ2ljYWxXaWR0aCgpKTsKICAgICAgICAg
ICAgIGhvcml6b250YWxPZmZzZXQgKz0gc3BhY2UgKyBzdWJTdXBQYWlyV2lkdGg7CkBAIC00MjYs
MTIgKzQ0MSwxNCBAQCB2b2lkIFJlbmRlck1hdGhNTFNjcmlwdHM6OmxheW91dEJsb2NrKGJvb2wg
cmVsYXlvdXRDaGlsZHJlbiwgTGF5b3V0VW5pdCkKICAgICAgICAgICAgIExheW91dFVuaXQgc3Vw
QXNjZW50ID0gYXNjZW50Rm9yQ2hpbGQoKnN1cFNjcmlwdCk7CiAgICAgICAgICAgICBMYXlvdXRQ
b2ludCBzdXBTY3JpcHRMb2NhdGlvbihtaXJyb3JJZk5lZWRlZChob3Jpem9udGFsT2Zmc2V0IC0g
c3VwU2NyaXB0LT5sb2dpY2FsV2lkdGgoKSwgKnN1cFNjcmlwdCksIGFzY2VudCAtIG1ldHJpY3Mu
c3VwU2hpZnQgLSBzdXBBc2NlbnQpOwogICAgICAgICAgICAgc3VwU2NyaXB0LT5zZXRMb2NhdGlv
bihzdXBTY3JpcHRMb2NhdGlvbik7CisgICAgICAgICAgICBzdWJTY3JpcHQgPSBzdXBTY3JpcHQt
Pm5leHRTaWJsaW5nQm94KCk7CiAgICAgICAgIH0KLSAgICAgICAgTGF5b3V0UG9pbnQgYmFzZUxv
Y2F0aW9uKG1pcnJvcklmTmVlZGVkKGhvcml6b250YWxPZmZzZXQsICpiYXNlKSwgYXNjZW50IC0g
YmFzZUFzY2VudCk7Ci0gICAgICAgIGJhc2UtPnNldExvY2F0aW9uKGJhc2VMb2NhdGlvbik7Ci0g
ICAgICAgIGhvcml6b250YWxPZmZzZXQgKz0gYmFzZS0+bG9naWNhbFdpZHRoKCk7Ci0gICAgICAg
IGZvciAoYXV0byogc3ViU2NyaXB0ID0gZmlyc3RQb3N0U2NyaXB0OyBzdWJTY3JpcHQgJiYgIWlz
UHJlc2NyaXB0RGVsaW1pdGVyKCpzdWJTY3JpcHQpOyBzdWJTY3JpcHQgPSBzdXBTY3JpcHQtPm5l
eHRTaWJsaW5nQm94KCkpIHsKLSAgICAgICAgICAgIHN1cFNjcmlwdCA9IHN1YlNjcmlwdC0+bmV4
dFNpYmxpbmdCb3goKTsKKyAgICAgICAgTGF5b3V0UG9pbnQgYmFzZUxvY2F0aW9uKG1pcnJvcklm
TmVlZGVkKGhvcml6b250YWxPZmZzZXQsICpyZWZlcmVuY2UuYmFzZSksIGFzY2VudCAtIGJhc2VB
c2NlbnQpOworICAgICAgICByZWZlcmVuY2UuYmFzZS0+c2V0TG9jYXRpb24oYmFzZUxvY2F0aW9u
KTsKKyAgICAgICAgaG9yaXpvbnRhbE9mZnNldCArPSByZWZlcmVuY2UuYmFzZS0+bG9naWNhbFdp
ZHRoKCk7CisgICAgICAgIHN1YlNjcmlwdCA9IHJlZmVyZW5jZS5maXJzdFBvc3RTY3JpcHQ7Cisg
ICAgICAgIHdoaWxlIChzdWJTY3JpcHQgJiYgc3ViU2NyaXB0ICE9IHJlZmVyZW5jZS5wcmVzY3Jp
cHREZWxpbWl0ZXIpIHsKKyAgICAgICAgICAgIGF1dG8gc3VwU2NyaXB0ID0gc3ViU2NyaXB0LT5u
ZXh0U2libGluZ0JveCgpOwogICAgICAgICAgICAgQVNTRVJUKHN1cFNjcmlwdCk7CiAgICAgICAg
ICAgICBMYXlvdXRVbml0IHN1YkFzY2VudCA9IGFzY2VudEZvckNoaWxkKCpzdWJTY3JpcHQpOwog
ICAgICAgICAgICAgTGF5b3V0UG9pbnQgc3ViU2NyaXB0TG9jYXRpb24obWlycm9ySWZOZWVkZWQo
aG9yaXpvbnRhbE9mZnNldCAtIGJhc2VJdGFsaWNDb3JyZWN0aW9uLCAqc3ViU2NyaXB0KSwgYXNj
ZW50ICsgbWV0cmljcy5zdWJTaGlmdCAtIHN1YkFzY2VudCk7CkBAIC00NDIsNiArNDU5LDcgQEAg
dm9pZCBSZW5kZXJNYXRoTUxTY3JpcHRzOjpsYXlvdXRCbG9jayhib29sIHJlbGF5b3V0Q2hpbGRy
ZW4sIExheW91dFVuaXQpCiAKICAgICAgICAgICAgIExheW91dFVuaXQgc3ViU3VwUGFpcldpZHRo
ID0gc3RkOjptYXgoc3ViU2NyaXB0LT5sb2dpY2FsV2lkdGgoKSwgc3VwU2NyaXB0LT5sb2dpY2Fs
V2lkdGgoKSk7CiAgICAgICAgICAgICBob3Jpem9udGFsT2Zmc2V0ICs9IHN1YlN1cFBhaXJXaWR0
aCArIHNwYWNlOworICAgICAgICAgICAgc3ViU2NyaXB0ID0gc3VwU2NyaXB0LT5uZXh0U2libGlu
Z0JveCgpOwogICAgICAgICB9CiAgICAgfQogICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9tYXRobWwvUmVuZGVyTWF0aE1MU2NyaXB0cy5oIGIvU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL21hdGhtbC9SZW5kZXJNYXRoTUxTY3JpcHRzLmgKaW5kZXggNjNlNzE0My4u
ZDQ4NzBiNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL21hdGhtbC9SZW5k
ZXJNYXRoTUxTY3JpcHRzLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL21hdGhtbC9S
ZW5kZXJNYXRoTUxTY3JpcHRzLmgKQEAgLTUzLDE2ICs1MywzMyBAQCBwcm90ZWN0ZWQ6CiBwcml2
YXRlOgogICAgIE1hdGhNTFNjcmlwdHNFbGVtZW50JiBlbGVtZW50KCkgY29uc3Q7CiAgICAgT3B0
aW9uYWw8aW50PiBmaXJzdExpbmVCYXNlbGluZSgpIGNvbnN0IGZpbmFsOwotICAgIGJvb2wgZ2V0
QmFzZUFuZFNjcmlwdHMoUmVuZGVyQm94KiYgYmFzZSwgUmVuZGVyQm94KiYgZmlyc3RQb3N0U2Ny
aXB0LCBSZW5kZXJCb3gqJiBmaXJzdFByZVNjcmlwdCk7CisgICAgc3RydWN0IFJlZmVyZW5jZUNo
aWxkcmVuIHsKKyAgICAgICAgUmVuZGVyQm94KiBiYXNlOworICAgICAgICBSZW5kZXJCb3gqIHBy
ZXNjcmlwdERlbGltaXRlcjsKKyAgICAgICAgUmVuZGVyQm94KiBmaXJzdFBvc3RTY3JpcHQ7Cisg
ICAgICAgIFJlbmRlckJveCogZmlyc3RQcmVTY3JpcHQ7CisgICAgfTsKKyAgICBPcHRpb25hbDxS
ZWZlcmVuY2VDaGlsZHJlbj4gdmFsaWRhdGVBbmRHZXRSZWZlcmVuY2VDaGlsZHJlbigpOwogICAg
IExheW91dFVuaXQgc3BhY2VBZnRlclNjcmlwdCgpOwotICAgIExheW91dFVuaXQgaXRhbGljQ29y
cmVjdGlvbihSZW5kZXJCb3gqIGJhc2UpOwotICAgIHN0cnVjdCBTY3JpcHRNZXRyaWNzIHsKKyAg
ICBMYXlvdXRVbml0IGl0YWxpY0NvcnJlY3Rpb24oY29uc3QgUmVmZXJlbmNlQ2hpbGRyZW4mKTsK
KyAgICBzdHJ1Y3QgVmVydGljYWxQYXJhbWV0ZXJzIHsKKyAgICAgICAgTGF5b3V0VW5pdCBzdWJz
Y3JpcHRTaGlmdERvd247CisgICAgICAgIExheW91dFVuaXQgc3VwZXJzY3JpcHRTaGlmdFVwOwor
ICAgICAgICBMYXlvdXRVbml0IHN1YnNjcmlwdEJhc2VsaW5lRHJvcE1pbjsKKyAgICAgICAgTGF5
b3V0VW5pdCBzdXBlclNjcmlwdEJhc2VsaW5lRHJvcE1heDsKKyAgICAgICAgTGF5b3V0VW5pdCBz
dWJTdXBlcnNjcmlwdEdhcE1pbjsKKyAgICAgICAgTGF5b3V0VW5pdCBzdXBlcnNjcmlwdEJvdHRv
bU1pbjsKKyAgICAgICAgTGF5b3V0VW5pdCBzdWJzY3JpcHRUb3BNYXg7CisgICAgICAgIExheW91
dFVuaXQgc3VwZXJzY3JpcHRCb3R0b21NYXhXaXRoU3Vic2NyaXB0OworICAgIH07CisgICAgVmVy
dGljYWxQYXJhbWV0ZXJzIHZlcnRpY2FsUGFyYW1ldGVycygpIGNvbnN0OworICAgIHN0cnVjdCBW
ZXJ0aWNhbE1ldHJpY3MgewogICAgICAgICBMYXlvdXRVbml0IHN1YlNoaWZ0OwogICAgICAgICBM
YXlvdXRVbml0IHN1cFNoaWZ0OwogICAgICAgICBMYXlvdXRVbml0IGFzY2VudDsKICAgICAgICAg
TGF5b3V0VW5pdCBkZXNjZW50OwogICAgIH07Ci0gICAgdm9pZCBnZXRTY3JpcHRNZXRyaWNzQW5k
TGF5b3V0SWZOZWVkZWQoUmVuZGVyQm94KiBiYXNlLCBSZW5kZXJCb3gqIHNjcmlwdCwgU2NyaXB0
TWV0cmljcyYpOworICAgIFZlcnRpY2FsTWV0cmljcyB2ZXJ0aWNhbE1ldHJpY3MoY29uc3QgUmVm
ZXJlbmNlQ2hpbGRyZW4mKTsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLS0gCjIuOS4z
Cgo=
</data>

          </attachment>
      

    </bug>

</bugzilla>