<?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>202177</bug_id>
          
          <creation_ts>2019-09-24 15:53:01 -0700</creation_ts>
          <short_desc>[FTW] Correct compositing, shadow, and radial gradient implementations</short_desc>
          <delta_ts>2019-09-29 12:34:20 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebCore Misc.</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Brent Fulgham">bfulgham</reporter>
          <assigned_to name="Brent Fulgham">bfulgham</assigned_to>
          <cc>achristensen</cc>
    
    <cc>bfulgham</cc>
    
    <cc>don.olmstead</cc>
    
    <cc>fujii</cc>
    
    <cc>pvollan</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1573876</commentid>
    <comment_count>0</comment_count>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2019-09-24 15:53:01 -0700</bug_when>
    <thetext>This patch corrects a number of errors in the implementations of basic Canvas drawing routines.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1573881</commentid>
    <comment_count>1</comment_count>
      <attachid>379510</attachid>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2019-09-24 16:19:44 -0700</bug_when>
    <thetext>Created attachment 379510
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1573903</commentid>
    <comment_count>2</comment_count>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2019-09-24 16:59:55 -0700</bug_when>
    <thetext>Prior to this change:

    629 / 775 Pass

With this change:

    665 / 775 Pass</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1574674</commentid>
    <comment_count>3</comment_count>
      <attachid>379693</attachid>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2019-09-26 16:25:44 -0700</bug_when>
    <thetext>Created attachment 379693
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1574709</commentid>
    <comment_count>4</comment_count>
      <attachid>379693</attachid>
    <who name="Fujii Hironori">fujii</who>
    <bug_when>2019-09-26 20:08:25 -0700</bug_when>
    <thetext>Comment on attachment 379693
Patch

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

&gt; Source/WebCore/platform/graphics/win/Direct2DOperations.cpp:41
&gt; +#include &quot;FloatSize.h&quot;

You don&apos;t need to include FloatSize.h because FloatRect.h includes it indirectly.

&gt; Source/WebCore/platform/graphics/win/Direct2DUtilities.cpp:97
&gt; +    constexpr double dpiBase = 96.0;

96.0 → 96
https://webkit.org/code-style-guidelines/#float-suffixes

&gt; Source/WebCore/platform/graphics/win/PathDirect2D.cpp:346
&gt;  FloatRect Path::strokeBoundingRect(StrokeStyleApplier* applier) const

How will you implement Path::strokeBoundingRect which is taking StrokeStyleApplier as the argument?

&gt; Source/WebCore/platform/graphics/win/PlatformContextDirect2D.cpp:57
&gt; +    RELEASE_ASSERT(SUCCEEDED(hr));

Let&apos;s use COMPtr method.

m_deviceContext.query(m_renderTarget.get());
RELEASE_ASSERT(!!m_deviceContext);

&gt; Source/WebCore/platform/graphics/win/PlatformContextDirect2D.cpp:385
&gt; +    compositeIfNeeded();

You don&apos;t need to call compositeIfNeeded here because endDraw is called above.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1574711</commentid>
    <comment_count>5</comment_count>
      <attachid>379693</attachid>
    <who name="Fujii Hironori">fujii</who>
    <bug_when>2019-09-26 20:11:03 -0700</bug_when>
    <thetext>Comment on attachment 379693
Patch

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

&gt; Source/WebCore/platform/graphics/win/Direct2DOperations.cpp:-237
&gt; -    platformContext.setCompositeMode(targetCompositeMode);

Remove PlatformContextDirect2D::setBlendMode and PlatformContextDirect2D::setCompositeMode which are unused anymore.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1574715</commentid>
    <comment_count>6</comment_count>
      <attachid>379693</attachid>
    <who name="Fujii Hironori">fujii</who>
    <bug_when>2019-09-26 20:31:22 -0700</bug_when>
    <thetext>Comment on attachment 379693
Patch

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

&gt; Source/WebCore/platform/graphics/win/Direct2DOperations.h:136
&gt; +void drawWithoutShadow(PlatformContextDirect2D&amp;, const FloatRect&amp; ignored, const WTF::Function&lt;void(ID2D1RenderTarget*)&gt;&amp; drawCommands);

I think boundingRect should be removed from drawWithoutShadow&apos;s argument. 

There are a lot of code looks like the following:

&gt;  if (shadowState.isVisible())
&gt;      drawWithShadow(platformContext, rect, shadowState, drawFunction);
&gt;  else
&gt;      drawWithoutShadow(platformContext, rect, drawFunction);

This condition should be moved into drawWithShadow.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1574975</commentid>
    <comment_count>7</comment_count>
      <attachid>379693</attachid>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2019-09-27 14:18:48 -0700</bug_when>
    <thetext>Comment on attachment 379693
Patch

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

&gt;&gt; Source/WebCore/platform/graphics/win/Direct2DOperations.cpp:41
&gt;&gt; +#include &quot;FloatSize.h&quot;
&gt; 
&gt; You don&apos;t need to include FloatSize.h because FloatRect.h includes it indirectly.

Fixed.

&gt;&gt; Source/WebCore/platform/graphics/win/Direct2DOperations.cpp:-237
&gt;&gt; -    platformContext.setCompositeMode(targetCompositeMode);
&gt; 
&gt; Remove PlatformContextDirect2D::setBlendMode and PlatformContextDirect2D::setCompositeMode which are unused anymore.

Done.

&gt;&gt; Source/WebCore/platform/graphics/win/Direct2DUtilities.cpp:97
&gt;&gt; +    constexpr double dpiBase = 96.0;
&gt; 
&gt; 96.0 → 96
&gt; https://webkit.org/code-style-guidelines/#float-suffixes

Will do!

&gt;&gt; Source/WebCore/platform/graphics/win/PathDirect2D.cpp:346
&gt;&gt;  FloatRect Path::strokeBoundingRect(StrokeStyleApplier* applier) const
&gt; 
&gt; How will you implement Path::strokeBoundingRect which is taking StrokeStyleApplier as the argument?

Oh gosh -- I didn&apos;t even look at this one. Can I do that as a separate patch?

&gt;&gt; Source/WebCore/platform/graphics/win/PlatformContextDirect2D.cpp:57
&gt;&gt; +    RELEASE_ASSERT(SUCCEEDED(hr));
&gt; 
&gt; Let&apos;s use COMPtr method.
&gt; 
&gt; m_deviceContext.query(m_renderTarget.get());
&gt; RELEASE_ASSERT(!!m_deviceContext);

Oh! That&apos;s much better. I&apos;ll do so here and the &apos;setRenderTarget&apos; method, too.

&gt;&gt; Source/WebCore/platform/graphics/win/PlatformContextDirect2D.cpp:385
&gt;&gt; +    compositeIfNeeded();
&gt; 
&gt; You don&apos;t need to call compositeIfNeeded here because endDraw is called above.

Good point!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1574979</commentid>
    <comment_count>8</comment_count>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2019-09-27 14:22:07 -0700</bug_when>
    <thetext>(In reply to Fujii Hironori from comment #6)
&gt; Comment on attachment 379693 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=379693&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/platform/graphics/win/Direct2DOperations.h:136
&gt; &gt; +void drawWithoutShadow(PlatformContextDirect2D&amp;, const FloatRect&amp; ignored, const WTF::Function&lt;void(ID2D1RenderTarget*)&gt;&amp; drawCommands);
&gt; 
&gt; I think boundingRect should be removed from drawWithoutShadow&apos;s argument. 

Okay.

&gt; There are a lot of code looks like the following:
&gt; 
&gt; &gt;  if (shadowState.isVisible())
&gt; &gt;      drawWithShadow(platformContext, rect, shadowState, drawFunction);
&gt; &gt;  else
&gt; &gt;      drawWithoutShadow(platformContext, rect, drawFunction);
&gt; 
&gt; This condition should be moved into drawWithShadow.

Sounds good.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1575022</commentid>
    <comment_count>9</comment_count>
      <attachid>379693</attachid>
    <who name="Fujii Hironori">fujii</who>
    <bug_when>2019-09-27 17:43:41 -0700</bug_when>
    <thetext>Comment on attachment 379693
Patch

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

&gt;&gt;&gt; Source/WebCore/platform/graphics/win/PathDirect2D.cpp:346
&gt;&gt;&gt;  FloatRect Path::strokeBoundingRect(StrokeStyleApplier* applier) const
&gt;&gt; 
&gt;&gt; How will you implement Path::strokeBoundingRect which is taking StrokeStyleApplier as the argument?
&gt; 
&gt; Oh gosh -- I didn&apos;t even look at this one. Can I do that as a separate patch?

Yup.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1575128</commentid>
    <comment_count>10</comment_count>
      <attachid>379804</attachid>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2019-09-28 23:15:00 -0700</bug_when>
    <thetext>Created attachment 379804
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1575129</commentid>
    <comment_count>11</comment_count>
      <attachid>379805</attachid>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2019-09-28 23:26:29 -0700</bug_when>
    <thetext>Created attachment 379805
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1575130</commentid>
    <comment_count>12</comment_count>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2019-09-28 23:33:23 -0700</bug_when>
    <thetext>With this change:

    681 / 775 Pass</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1575132</commentid>
    <comment_count>13</comment_count>
      <attachid>379805</attachid>
    <who name="Fujii Hironori">fujii</who>
    <bug_when>2019-09-29 01:10:44 -0700</bug_when>
    <thetext>Comment on attachment 379805
Patch

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

&gt; Source/WebCore/platform/graphics/win/Direct2DOperations.cpp:562
&gt; +    auto rect = path.fastBoundingRectForStroke(platformContext);

This rect is a unused variable.

&gt; Source/WebCore/platform/graphics/win/Direct2DUtilities.cpp:494
&gt; +    Direct2D::writeDiagnosticPNGToPath(bitmapTarget, currentCanvas.get(), L&quot;C:/Projects/WebKit/data/currentCanvas.png&quot;);

I think this debugging code should be removed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1575133</commentid>
    <comment_count>14</comment_count>
      <attachid>379805</attachid>
    <who name="Fujii Hironori">fujii</who>
    <bug_when>2019-09-29 01:13:53 -0700</bug_when>
    <thetext>Comment on attachment 379805
Patch

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

&gt; Source/WebCore/platform/graphics/win/PlatformContextDirect2D.cpp:349
&gt; +    Direct2D::writeDiagnosticPNGToPath(bitmapTarget.get(), bitmap.get(), L&quot;C:/Projects/WebKit/data/after.png&quot;);

Ditto.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1575134</commentid>
    <comment_count>15</comment_count>
      <attachid>379805</attachid>
    <who name="Fujii Hironori">fujii</who>
    <bug_when>2019-09-29 01:26:34 -0700</bug_when>
    <thetext>Comment on attachment 379805
Patch

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

&gt; Source/WebCore/platform/graphics/win/PathDirect2D.cpp:335
&gt; +    float tolerance = 10.0;

https://webkit.org/code-style-guidelines/#float-suffixes</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1575159</commentid>
    <comment_count>16</comment_count>
      <attachid>379805</attachid>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2019-09-29 12:07:43 -0700</bug_when>
    <thetext>Comment on attachment 379805
Patch

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

Thank you for reviewing -- these reviews have been very helpful to me.

&gt;&gt; Source/WebCore/platform/graphics/win/Direct2DOperations.cpp:562
&gt;&gt; +    auto rect = path.fastBoundingRectForStroke(platformContext);
&gt; 
&gt; This rect is a unused variable.

Great catch! That&apos;s a potentially expensive operation, so good to avoid if possible.

&gt;&gt; Source/WebCore/platform/graphics/win/Direct2DUtilities.cpp:494
&gt;&gt; +    Direct2D::writeDiagnosticPNGToPath(bitmapTarget, currentCanvas.get(), L&quot;C:/Projects/WebKit/data/currentCanvas.png&quot;);
&gt; 
&gt; I think this debugging code should be removed.

Oh no! How stupid of me. I made this same mistake in several places. I forgot to search and remove before uploading the patch. :-(

&gt;&gt; Source/WebCore/platform/graphics/win/PathDirect2D.cpp:335
&gt;&gt; +    float tolerance = 10.0;
&gt; 
&gt; https://webkit.org/code-style-guidelines/#float-suffixes

Fixed!

&gt;&gt; Source/WebCore/platform/graphics/win/PlatformContextDirect2D.cpp:349
&gt;&gt; +    Direct2D::writeDiagnosticPNGToPath(bitmapTarget.get(), bitmap.get(), L&quot;C:/Projects/WebKit/data/after.png&quot;);
&gt; 
&gt; Ditto.

:-(</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1575163</commentid>
    <comment_count>17</comment_count>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2019-09-29 12:33:39 -0700</bug_when>
    <thetext>Committed r250492: &lt;https://trac.webkit.org/changeset/250492&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1575164</commentid>
    <comment_count>18</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2019-09-29 12:34:20 -0700</bug_when>
    <thetext>&lt;rdar://problem/55822137&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>379510</attachid>
            <date>2019-09-24 16:19:44 -0700</date>
            <delta_ts>2019-09-26 16:25:43 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-202177-20190924161940.patch</filename>
            <type>text/plain</type>
            <size>19142</size>
            <attacher name="Brent Fulgham">bfulgham</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDI1MDMxOSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDQ0IEBACisyMDE5LTA5LTI0ICBCcmVudCBG
dWxnaGFtICA8YmZ1bGdoYW1AYXBwbGUuY29tPgorCisgICAgICAgIFtGVFddIENvcnJlY3QgY29t
cG9zaXRpbmcsIHNoYWRvdywgYW5kIHJhZGlhbCBncmFkaWVudCBpbXBsZW1lbnRhdGlvbnMKKyAg
ICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIwMjE3NworCisg
ICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFRoaXMgcGF0Y2gg
Y29ycmVjdHMgYSBudW1iZXIgb2YgaW1wbGVtZW50YXRpb24gZXJyb3JzIGluIGJhc2ljIENhbnZh
cworICAgICAgICBkcmF3aW5nIG9wZXJhdGlvbnMuCisKKyAgICAgICAgVGVzdGVkIGJ5IGNhbnZh
cy9waGlsaXAvdGVzdHMgCisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy93aW4vRGlyZWN0
MkRPcGVyYXRpb25zLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkRpcmVjdDJEOjpTdGF0ZTo6c2V0
Q29tcG9zaXRlT3BlcmF0aW9uKTogSW5pdGlhbGl6ZSBibGVuZCBhbmQKKyAgICAgICAgY29tcG9z
aXRlIG1vZGVzIHRvIGNvcnJlY3QgZGVmYXVsdHMuCisgICAgICAgIChXZWJDb3JlOjpEaXJlY3Qy
RDo6ZHJhd1dpdGhTaGFkb3dIZWxwZXIpOiBDb3JyZWN0IHZhbHVlIHVzZWQgZm9yIGJsdXIKKyAg
ICAgICAgc3RhbmRhcmQgZGV2aWF0aW9uIHRvIG1vcmUgY2xvc2VseSBtYXRjaCBvdGhlciBicm93
c2VyIG91dHB1dC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy93aW4vRGlyZWN0MkRVdGls
aXRpZXMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RGlyZWN0MkQ6OmNyZWF0ZUJpdG1hcENvcHlG
cm9tQ29udGV4dCk6IEFkZGVkIGhlbHBlciBmdW5jdGlvbi4KKyAgICAgICAgKiBwbGF0Zm9ybS9n
cmFwaGljcy93aW4vRGlyZWN0MkRVdGlsaXRpZXMuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy93aW4vR3JhZGllbnREaXJlY3QyRC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpHcmFkaWVu
dDo6Z2VuZXJhdGVHcmFkaWVudCk6IFByb3Blcmx5IGhhbmRsZSB0aGUgY2FzZSBvZiBhIG5vbi16
ZXJvCisgICAgICAgIGluaXRpYWwgZ3JhZGllbnQgcmFkaXVzLiBQcm9wZXJseSBjb21wdXRlIHRo
ZSBmaW5hbCByYWRpdXMuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ltYWdlQnVm
ZmVyRGF0YURpcmVjdDJELmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyRGF0YTo6
cmVhZERhdGFGcm9tQml0bWFwSWZOZWVkZWQgY29uc3QpOiBVcGRhdGUgdG8gdXNlIElEMkQxRGV2
aWNlQ29udGV4dAorICAgICAgICBmcm9tIHBsYXRmb3JtQ29udGV4dCwgcmF0aGVyIHRoYW4gc2Vh
cmNoaW5nIGZvciBpdCBlYWNoIHRpbWUuCisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlckRh
dGE6OmNvbXBhdGlibGVCaXRtYXApOiBEaXR0by4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy93aW4vUGxhdGZvcm1Db250ZXh0RGlyZWN0MkQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UGxh
dGZvcm1Db250ZXh0RGlyZWN0MkQ6OlBsYXRmb3JtQ29udGV4dERpcmVjdDJEKTogR3JhYiB0aGUg
SUQyRDFEZXZpY2VDb250ZXh0IGZvcgorICAgICAgICB0aGUgUmVuZGVyVGFyZ2V0IGF0IGNvbnN0
cnVjdGlvbiB0aW1lLgorICAgICAgICAoV2ViQ29yZTo6UGxhdGZvcm1Db250ZXh0RGlyZWN0MkQ6
OnNldFJlbmRlclRhcmdldCk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6UGxhdGZvcm1Db250
ZXh0RGlyZWN0MkQ6OmVuZERyYXcpOiBQZXJmb3JtIGNvbXBvc2l0aW5nIG9wZXJhdGlvbnMgd2hl
biBuZWVkZWQuCisgICAgICAgIChXZWJDb3JlOjpQbGF0Zm9ybUNvbnRleHREaXJlY3QyRDo6Y29t
cG9zaXRlSWZOZWVkZWQpOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlBsYXRmb3JtQ29udGV4
dERpcmVjdDJEOjpzZXRCbGVuZEFuZENvbXBvc2l0ZU1vZGUpOiBVcGRhdGUgdG8gcHJvcGVybHkg
c2V0IHRoZQorICAgICAgICBibGVuZCBhbmQgY29tcG9zaXRpbmcgbW9kZSAoZGVwZW5kaW5nIG9u
IGdsb2JhbCB2YWx1ZSBzZXQgZm9yIHRoZSBjYW52YXMuKQorICAgICAgICAqIHBsYXRmb3JtL2dy
YXBoaWNzL3dpbi9QbGF0Zm9ybUNvbnRleHREaXJlY3QyRC5oOgorICAgICAgICAoV2ViQ29yZTo6
UGxhdGZvcm1Db250ZXh0RGlyZWN0MkQ6OmRldmljZUNvbnRleHQpOgorICAgICAgICAoV2ViQ29y
ZTo6UGxhdGZvcm1Db250ZXh0RGlyZWN0MkQ6OnNldFJlbmRlclRhcmdldCk6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJDb3JlOjpQbGF0Zm9ybUNvbnRleHREaXJlY3QyRDo6c2V0QmxlbmRNb2RlKTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlBsYXRmb3JtQ29udGV4dERpcmVjdDJEOjpzZXRD
b21wb3NpdGVNb2RlKTogRGVsZXRlZC4KKwogMjAxOS0wOS0yNCAgQ2hyaXMgRHVtZXogIDxjZHVt
ZXpAYXBwbGUuY29tPgogCiAgICAgICAgIFN0b3Agc2FtcGxpbmcgUGFnZUNhY2hlLXJlbGF0ZWQg
QWdnRCBkYXRhCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vRGly
ZWN0MkRPcGVyYXRpb25zLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy93aW4vRGlyZWN0MkRPcGVyYXRpb25zLmNwcAkocmV2aXNpb24gMjUwMjM3KQor
KysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0RpcmVjdDJET3BlcmF0aW9u
cy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEyNyw4ICsxMjcsOCBAQCB2b2lkIHNldFN0cm9rZVN0
eWxlKFBsYXRmb3JtQ29udGV4dERpcmVjCiAKIHZvaWQgc2V0Q29tcG9zaXRlT3BlcmF0aW9uKFBs
YXRmb3JtQ29udGV4dERpcmVjdDJEJiBwbGF0Zm9ybUNvbnRleHQsIENvbXBvc2l0ZU9wZXJhdG9y
IGNvbXBvc2l0ZU9wZXJhdGlvbiwgQmxlbmRNb2RlIGJsZW5kTW9kZSkKIHsKLSAgICBEMkQxX0JM
RU5EX01PREUgdGFyZ2V0QmxlbmRNb2RlID0gRDJEMV9CTEVORF9NT0RFX1NDUkVFTjsKLSAgICBE
MkQxX0NPTVBPU0lURV9NT0RFIHRhcmdldENvbXBvc2l0ZU1vZGUgPSBEMkQxX0NPTVBPU0lURV9N
T0RFX1NPVVJDRV9BVE9QOworICAgIEQyRDFfQkxFTkRfTU9ERSB0YXJnZXRCbGVuZE1vZGUgPSBE
MkQxX0JMRU5EX01PREVfRk9SQ0VfRFdPUkQ7CisgICAgRDJEMV9DT01QT1NJVEVfTU9ERSB0YXJn
ZXRDb21wb3NpdGVNb2RlID0gRDJEMV9DT01QT1NJVEVfTU9ERV9GT1JDRV9EV09SRDsKIAogICAg
IGlmIChibGVuZE1vZGUgIT0gQmxlbmRNb2RlOjpOb3JtYWwpIHsKICAgICAgICAgc3dpdGNoIChi
bGVuZE1vZGUpIHsKQEAgLTE5MiwxMCArMTkyLDEwIEBAIHZvaWQgc2V0Q29tcG9zaXRlT3BlcmF0
aW9uKFBsYXRmb3JtQ29udGUKICAgICAgICAgICAgIC8vIEZJWE1FOiB0YXJnZXRCbGVuZE1vZGUg
PSBEMkQxX0JMRU5EX01PREVfQ0xFQVI7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2Fz
ZSBDb21wb3NpdGVDb3B5OgotICAgICAgICAgICAgLy8gRklYTUU6IHRhcmdldEJsZW5kTW9kZSA9
IEQyRDFfQkxFTkRfTU9ERV9DT1BZOworICAgICAgICAgICAgdGFyZ2V0Q29tcG9zaXRlTW9kZSA9
IEQyRDFfQ09NUE9TSVRFX01PREVfU09VUkNFX0NPUFk7CiAgICAgICAgICAgICBicmVhazsKICAg
ICAgICAgY2FzZSBDb21wb3NpdGVTb3VyY2VPdmVyOgotICAgICAgICAgICAgLy8gRklYTUU6IGtD
R0JsZW5kTW9kZU5vcm1hbAorICAgICAgICAgICAgdGFyZ2V0Q29tcG9zaXRlTW9kZSA9IEQyRDFf
Q09NUE9TSVRFX01PREVfU09VUkNFX09WRVI7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAg
Y2FzZSBDb21wb3NpdGVTb3VyY2VJbjoKICAgICAgICAgICAgIHRhcmdldENvbXBvc2l0ZU1vZGUg
PSBEMkQxX0NPTVBPU0lURV9NT0RFX1NPVVJDRV9JTjsKQEAgLTIyMiwxMCArMjIyLDEwIEBAIHZv
aWQgc2V0Q29tcG9zaXRlT3BlcmF0aW9uKFBsYXRmb3JtQ29udGUKICAgICAgICAgICAgIHRhcmdl
dENvbXBvc2l0ZU1vZGUgPSBEMkQxX0NPTVBPU0lURV9NT0RFX1hPUjsKICAgICAgICAgICAgIGJy
ZWFrOwogICAgICAgICBjYXNlIENvbXBvc2l0ZVBsdXNEYXJrZXI6Ci0gICAgICAgICAgICB0YXJn
ZXRCbGVuZE1vZGUgPSBEMkQxX0JMRU5EX01PREVfREFSS0VSX0NPTE9SOworICAgICAgICAgICAg
dGFyZ2V0QmxlbmRNb2RlID0gRDJEMV9CTEVORF9NT0RFX0RBUktFTjsKICAgICAgICAgICAgIGJy
ZWFrOwogICAgICAgICBjYXNlIENvbXBvc2l0ZVBsdXNMaWdodGVyOgotICAgICAgICAgICAgdGFy
Z2V0QmxlbmRNb2RlID0gRDJEMV9CTEVORF9NT0RFX0xJR0hURVJfQ09MT1I7CisgICAgICAgICAg
ICB0YXJnZXRCbGVuZE1vZGUgPSBEMkQxX0JMRU5EX01PREVfTElHSFRFTjsKICAgICAgICAgICAg
IGJyZWFrOwogICAgICAgICBjYXNlIENvbXBvc2l0ZURpZmZlcmVuY2U6CiAgICAgICAgICAgICB0
YXJnZXRCbGVuZE1vZGUgPSBEMkQxX0JMRU5EX01PREVfRElGRkVSRU5DRTsKQEAgLTIzMyw4ICsy
MzMsNyBAQCB2b2lkIHNldENvbXBvc2l0ZU9wZXJhdGlvbihQbGF0Zm9ybUNvbnRlCiAgICAgICAg
IH0KICAgICB9CiAKLSAgICBwbGF0Zm9ybUNvbnRleHQuc2V0QmxlbmRNb2RlKHRhcmdldEJsZW5k
TW9kZSk7Ci0gICAgcGxhdGZvcm1Db250ZXh0LnNldENvbXBvc2l0ZU1vZGUodGFyZ2V0Q29tcG9z
aXRlTW9kZSk7CisgICAgcGxhdGZvcm1Db250ZXh0LnNldEJsZW5kQW5kQ29tcG9zaXRlTW9kZSh0
YXJnZXRCbGVuZE1vZGUsIHRhcmdldENvbXBvc2l0ZU1vZGUpOwogfQogCiB2b2lkIHNldFNob3Vs
ZEFudGlhbGlhcyhQbGF0Zm9ybUNvbnRleHREaXJlY3QyRCYgcGxhdGZvcm1Db250ZXh0LCBib29s
IGVuYWJsZSkKQEAgLTYwOCw3ICs2MDcsOSBAQCB2b2lkIGRyYXdXaXRoU2hhZG93SGVscGVyKElE
MkQxUmVuZGVyVGFyCiAKICAgICBzaGFkb3dFZmZlY3QtPlNldElucHV0KDAsIGJpdG1hcCk7CiAg
ICAgc2hhZG93RWZmZWN0LT5TZXRWYWx1ZShEMkQxX1NIQURPV19QUk9QX0NPTE9SLCBzdGF0aWNf
Y2FzdDxEMkQxX1ZFQ1RPUl80Rj4oc2hhZG93Q29sb3IpKTsKLSAgICBzaGFkb3dFZmZlY3QtPlNl
dFZhbHVlKEQyRDFfU0hBRE9XX1BST1BfQkxVUl9TVEFOREFSRF9ERVZJQVRJT04sIHNoYWRvd0Js
dXIpOworCisgICAgZmxvYXQgYmx1ckRldmlhdGlvbiA9IDAuNSAqIHNoYWRvd0JsdXI7CisgICAg
c2hhZG93RWZmZWN0LT5TZXRWYWx1ZShEMkQxX1NIQURPV19QUk9QX0JMVVJfU1RBTkRBUkRfREVW
SUFUSU9OLCBibHVyRGV2aWF0aW9uKTsKIAogICAgIENPTVB0cjxJRDJEMUVmZmVjdD4gdHJhbnNm
b3JtRWZmZWN0OwogICAgIGhyID0gZGV2aWNlQ29udGV4dC0+Q3JlYXRlRWZmZWN0KENMU0lEX0Qy
RDEyREFmZmluZVRyYW5zZm9ybSwgJnRyYW5zZm9ybUVmZmVjdCk7CkBAIC02MTYsNyArNjE3LDgg
QEAgdm9pZCBkcmF3V2l0aFNoYWRvd0hlbHBlcihJRDJEMVJlbmRlclRhcgogCiAgICAgdHJhbnNm
b3JtRWZmZWN0LT5TZXRJbnB1dEVmZmVjdCgwLCBzaGFkb3dFZmZlY3QuZ2V0KCkpOwogCi0gICAg
YXV0byB0cmFuc2xhdGlvbiA9IEQyRDE6Ok1hdHJpeDN4MkY6OlRyYW5zbGF0aW9uKHNoYWRvd09m
ZnNldC53aWR0aCgpLCBzaGFkb3dPZmZzZXQuaGVpZ2h0KCkpOworICAgIC8vIE11c3QgZmxpcCB0
aGUgYXhpcyBmb3IgdGhlIHNoYWRvdyBvZmZzZXQsIHNpbmNlIERpcmVjdDJEJ3MgWSBheGlzIGlz
IGludmVydGVkLgorICAgIGF1dG8gdHJhbnNsYXRpb24gPSBEMkQxOjpNYXRyaXgzeDJGOjpUcmFu
c2xhdGlvbihzaGFkb3dPZmZzZXQud2lkdGgoKSwgLXNoYWRvd09mZnNldC5oZWlnaHQoKSk7CiAg
ICAgdHJhbnNmb3JtRWZmZWN0LT5TZXRWYWx1ZShEMkQxXzJEQUZGSU5FVFJBTlNGT1JNX1BST1Bf
VFJBTlNGT1JNX01BVFJJWCwgdHJhbnNsYXRpb24pOwogCiAgICAgQ09NUHRyPElEMkQxRWZmZWN0
PiBjb21wb3NpdG9yOwpAQCAtNjI2LDcgKzYyOCw3IEBAIHZvaWQgZHJhd1dpdGhTaGFkb3dIZWxw
ZXIoSUQyRDFSZW5kZXJUYXIKICAgICBjb21wb3NpdG9yLT5TZXRJbnB1dEVmZmVjdCgwLCB0cmFu
c2Zvcm1FZmZlY3QuZ2V0KCkpOwogICAgIGNvbXBvc2l0b3ItPlNldElucHV0KDEsIGJpdG1hcCk7
CiAKLSAgICBkZXZpY2VDb250ZXh0LT5EcmF3SW1hZ2UoY29tcG9zaXRvci5nZXQoKSwgRDJEMV9J
TlRFUlBPTEFUSU9OX01PREVfTElORUFSKTsKKyAgICBkZXZpY2VDb250ZXh0LT5EcmF3SW1hZ2Uo
Y29tcG9zaXRvci5nZXQoKSk7CiB9CiAKIHZvaWQgZHJhd1dpdGhTaGFkb3coUGxhdGZvcm1Db250
ZXh0RGlyZWN0MkQmIHBsYXRmb3JtQ29udGV4dCwgY29uc3QgRmxvYXRSZWN0JiBib3VuZGluZ1Jl
Y3QsIGNvbnN0IFNoYWRvd1N0YXRlJiBzaGFkb3dTdGF0ZSwgY29uc3QgV1RGOjpGdW5jdGlvbjx2
b2lkKElEMkQxUmVuZGVyVGFyZ2V0Kik+JiBkcmF3Q29tbWFuZHMpCkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vRGlyZWN0MkRVdGlsaXRpZXMuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9EaXJlY3QyRFV0aWxp
dGllcy5jcHAJKHJldmlzaW9uIDI1MDIzNykKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL3dpbi9EaXJlY3QyRFV0aWxpdGllcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ3Miw2
ICs0NzIsMzQgQEAgQ09NUHRyPElEWEdJU3dhcENoYWluPiBzd2FwQ2hhaW5PZlNpemVGbwogICAg
IHJldHVybiBzd2FwQ2hhaW47CiB9CiAKK0NPTVB0cjxJRDJEMUJpdG1hcD4gY3JlYXRlQml0bWFw
Q29weUZyb21Db250ZXh0KElEMkQxUmVuZGVyVGFyZ2V0KiByZW5kZXJUYXJnZXQpCit7CisgICAg
Q09NUHRyPElEMkQxQml0bWFwUmVuZGVyVGFyZ2V0PiBiaXRtYXBUYXJnZXQoUXVlcnksIHJlbmRl
clRhcmdldCk7CisgICAgaWYgKCFiaXRtYXBUYXJnZXQpCisgICAgICAgIHJldHVybiBudWxscHRy
OworCisgICAgQ09NUHRyPElEMkQxQml0bWFwPiBjdXJyZW50Q2FudmFzOworICAgIEhSRVNVTFQg
aHIgPSBiaXRtYXBUYXJnZXQtPkdldEJpdG1hcCgmY3VycmVudENhbnZhcyk7CisgICAgaWYgKCFT
VUNDRUVERUQoaHIpKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgIGF1dG8gYml0bWFw
Q3JlYXRlUHJvcGVydGllcyA9IGJpdG1hcFByb3BlcnRpZXMoKTsKKworICAgIENPTVB0cjxJRDJE
MUJpdG1hcD4gYml0bWFwOworICAgIEQyRDFfU0laRV9VIGJpdG1hcFNpemUgPSBjdXJyZW50Q2Fu
dmFzLT5HZXRQaXhlbFNpemUoKTsKKyAgICBociA9IHJlbmRlclRhcmdldC0+Q3JlYXRlQml0bWFw
KGJpdG1hcFNpemUsIGJpdG1hcENyZWF0ZVByb3BlcnRpZXMsICZiaXRtYXApOworICAgIGlmICgh
U1VDQ0VFREVEKGhyKSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICBhdXRvIHRhcmdl
dFBvcyA9IEQyRDE6OlBvaW50MlUoKTsKKyAgICBEMkQxX1JFQ1RfVSBkYXRhUmVjdCA9IEQyRDE6
OlJlY3RVKDAsIDAsIGJpdG1hcFNpemUud2lkdGgsIGJpdG1hcFNpemUuaGVpZ2h0KTsKKyAgICBo
ciA9IGJpdG1hcC0+Q29weUZyb21CaXRtYXAoJnRhcmdldFBvcywgY3VycmVudENhbnZhcy5nZXQo
KSwgJmRhdGFSZWN0KTsKKyAgICBpZiAoIVNVQ0NFRURFRChocikpCisgICAgICAgIHJldHVybiBm
YWxzZTsKKworICAgIHJldHVybiBiaXRtYXA7Cit9CisKIH0gLy8gbmFtZXNwYWNlIERpcmVjdDJE
CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL3dpbi9EaXJlY3QyRFV0aWxpdGllcy5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9EaXJlY3QyRFV0aWxpdGllcy5oCShyZXZpc2lv
biAyNTAyMzcpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vRGlyZWN0
MkRVdGlsaXRpZXMuaAkod29ya2luZyBjb3B5KQpAQCAtODQsNiArODQsNyBAQCBDT01QdHI8SUQy
RDFCaXRtYXBSZW5kZXJUYXJnZXQ+IGNyZWF0ZUJpCiBDT01QdHI8SUQyRDFEQ1JlbmRlclRhcmdl
dD4gY3JlYXRlR0RJUmVuZGVyVGFyZ2V0KCk7CiBDT01QdHI8SURYR0lTdXJmYWNlMT4gY3JlYXRl
RFhHSVN1cmZhY2VPZlNpemUoY29uc3QgSW50U2l6ZSYsIElEM0QxMURldmljZTEqLCBib29sIGNy
b3NzUHJvY2Vzcyk7CiBDT01QdHI8SUQyRDFSZW5kZXJUYXJnZXQ+IGNyZWF0ZVN1cmZhY2VSZW5k
ZXJUYXJnZXQoSURYR0lTdXJmYWNlMSopOworQ09NUHRyPElEMkQxQml0bWFwPiBjcmVhdGVCaXRt
YXBDb3B5RnJvbUNvbnRleHQoSUQyRDFSZW5kZXJUYXJnZXQqKTsKIAogdm9pZCBjb3B5UmVjdEZy
b21PbmVTdXJmYWNlVG9Bbm90aGVyKElEMkQxQml0bWFwKiBmcm9tLCBJRDJEMUJpdG1hcCogdG8s
IGNvbnN0IEludFNpemUmIHNvdXJjZU9mZnNldCwgY29uc3QgSW50UmVjdCYsIGNvbnN0IEludFNp
emUmIGRlc3RPZmZzZXQgPSBJbnRTaXplKCkpOwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy93aW4vR3JhZGllbnREaXJlY3QyRC5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0dyYWRpZW50RGlyZWN0MkQuY3BwCShy
ZXZpc2lvbiAyNTAyMzcpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4v
R3JhZGllbnREaXJlY3QyRC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMwLDYgKzMwLDcgQEAKICNp
bmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKICNpbmNsdWRlICJQbGF0Zm9ybUNvbnRleHREaXJl
Y3QyRC5oIgogI2luY2x1ZGUgPGQyZDEuaD4KKyNpbmNsdWRlIDx3dGYvTWF0aEV4dHJhcy5oPgog
I2luY2x1ZGUgPHd0Zi9SZXRhaW5QdHIuaD4KIAogI2RlZmluZSBHUkFESUVOVF9EUkFXSU5HIDMK
QEAgLTcwLDYgKzcxLDM1IEBAIHZvaWQgR3JhZGllbnQ6OmdlbmVyYXRlR3JhZGllbnQoSUQyRDFS
ZW4KICAgICAgICAgZ3JhZGllbnRTdG9wcy5hcHBlbmQoRDJEMTo6R3JhZGllbnRTdG9wKHN0b3Au
b2Zmc2V0LCBEMkQxOjpDb2xvckYociwgZywgYiwgYSkpKTsKICAgICB9CiAKKyAgICBXVEY6OnN3
aXRjaE9uKG1fZGF0YSwKKyAgICAgICAgWyZdIChjb25zdCBMaW5lYXJEYXRhJikgeworICAgICAg
ICAgICAgLy8gTm8gYWN0aW9uIG5lZWRlZC4KKyAgICAgICAgfSwKKyAgICAgICAgWyZdIChjb25z
dCBSYWRpYWxEYXRhJiBkYXRhKSB7CisgICAgICAgICAgICBpZiAoZGF0YS5zdGFydFJhZGl1cyAm
JiBkYXRhLmVuZFJhZGl1cykgeworICAgICAgICAgICAgICAgIGZsb2F0IHN0YXJ0UG9zaXRpb24g
PSBzdGQ6OmFicyhkYXRhLnN0YXJ0UmFkaXVzIC8gZGF0YS5lbmRSYWRpdXMpOworICAgICAgICAg
ICAgICAgIGlmIChzdGFydFBvc2l0aW9uID4gMS4wKQorICAgICAgICAgICAgICAgICAgICBzdGFy
dFBvc2l0aW9uID0gMS4wIC8gc3RhcnRQb3NpdGlvbjsKKyAgICAgICAgICAgICAgICBmbG9hdCBh
dmFpbGFibGVSYW5nZSA9IDEuMCAtIHN0YXJ0UG9zaXRpb247CisgICAgICAgICAgICAgICAgUkVM
RUFTRV9BU1NFUlQoYXZhaWxhYmxlUmFuZ2UgPD0gMS4wICYmIGF2YWlsYWJsZVJhbmdlID49IDAp
OworCisgICAgICAgICAgICAgICAgZm9yIChhdXRvJiBzdG9wIDogZ3JhZGllbnRTdG9wcykgewor
ICAgICAgICAgICAgICAgICAgICBzdG9wLnBvc2l0aW9uICo9IGF2YWlsYWJsZVJhbmdlOworICAg
ICAgICAgICAgICAgICAgICBzdG9wLnBvc2l0aW9uICs9IHN0YXJ0UG9zaXRpb247CisgICAgICAg
ICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgLy8gUmVzdG9yZSB0aGUgJ3N0YXJ0JyBwb3Np
dGlvbgorICAgICAgICAgICAgICAgIGF1dG8gZmlyc3RTdG9wID0gZ3JhZGllbnRTdG9wcy5maXJz
dCgpOworICAgICAgICAgICAgICAgIGZpcnN0U3RvcC5wb3NpdGlvbiA9IDA7CisKKyAgICAgICAg
ICAgICAgICBncmFkaWVudFN0b3BzLmluc2VydCgwLCBmaXJzdFN0b3ApOworICAgICAgICAgICAg
fQorICAgICAgICB9LAorICAgICAgICBbJl0gKGNvbnN0IENvbmljRGF0YSYpIHsKKyAgICAgICAg
ICAgIC8vIEZJWE1FOiBBc3Nlc3Mgd2hldGhlciBuZWVkZWQgZm9yIENvbmljIEdyYWRpZW50cy4K
KyAgICAgICAgfQorICAgICk7CisKICAgICBDT01QdHI8SUQyRDFHcmFkaWVudFN0b3BDb2xsZWN0
aW9uPiBncmFkaWVudFN0b3BDb2xsZWN0aW9uOwogICAgIEhSRVNVTFQgaHIgPSByZW5kZXJUYXJn
ZXQtPkNyZWF0ZUdyYWRpZW50U3RvcENvbGxlY3Rpb24oZ3JhZGllbnRTdG9wcy5kYXRhKCksIGdy
YWRpZW50U3RvcHMuc2l6ZSgpLCAmZ3JhZGllbnRTdG9wQ29sbGVjdGlvbik7CiAgICAgUkVMRUFT
RV9BU1NFUlQoU1VDQ0VFREVEKGhyKSk7CkBAIC05MCwxMiArMTIwLDE0IEBAIHZvaWQgR3JhZGll
bnQ6OmdlbmVyYXRlR3JhZGllbnQoSUQyRDFSZW4KICAgICAgICAgICAgIG1fZ3JhZGllbnQgPSBs
aW5lYXJHcmFkaWVudDsKICAgICAgICAgfSwKICAgICAgICAgWyZdIChjb25zdCBSYWRpYWxEYXRh
JiBkYXRhKSB7Ci0gICAgICAgICAgICBGbG9hdFNpemUgb2Zmc2V0ID0gZGF0YS5wb2ludDEgLSBk
YXRhLnBvaW50MDsKLSAgICAgICAgICAgIElEMkQxUmFkaWFsR3JhZGllbnRCcnVzaCogcmFkaWFs
R3JhZGllbnQgPSBudWxscHRyOwotICAgICAgICAgICAgZmxvYXQgcmFkaXVzWCA9IGRhdGEuZW5k
UmFkaXVzICsgb2Zmc2V0LndpZHRoKCk7CisgICAgICAgICAgICBGbG9hdFNpemUgb2Zmc2V0ID0g
ZGF0YS5wb2ludDAgLSBkYXRhLnBvaW50MTsKKyAgICAgICAgICAgIEZsb2F0UG9pbnQgY2VudGVy
ID0gZGF0YS5wb2ludDE7CisgICAgICAgICAgICBmbG9hdCByYWRpdXNYID0gZGF0YS5lbmRSYWRp
dXM7CiAgICAgICAgICAgICBmbG9hdCByYWRpdXNZID0gcmFkaXVzWCAvIGRhdGEuYXNwZWN0UmF0
aW87CisKKyAgICAgICAgICAgIElEMkQxUmFkaWFsR3JhZGllbnRCcnVzaCogcmFkaWFsR3JhZGll
bnQgPSBudWxscHRyOwogICAgICAgICAgICAgaHIgPSByZW5kZXJUYXJnZXQtPkNyZWF0ZVJhZGlh
bEdyYWRpZW50QnJ1c2goCi0gICAgICAgICAgICAgICAgRDJEMTo6UmFkaWFsR3JhZGllbnRCcnVz
aFByb3BlcnRpZXMoZGF0YS5wb2ludDAsIEQyRDE6OlBvaW50MkYob2Zmc2V0LndpZHRoKCksIG9m
ZnNldC5oZWlnaHQoKSksIHJhZGl1c1gsIHJhZGl1c1kpLAorICAgICAgICAgICAgICAgIEQyRDE6
OlJhZGlhbEdyYWRpZW50QnJ1c2hQcm9wZXJ0aWVzKGNlbnRlciwgRDJEMTo6UG9pbnQyRihvZmZz
ZXQud2lkdGgoKSwgb2Zmc2V0LmhlaWdodCgpKSwgcmFkaXVzWCwgcmFkaXVzWSksCiAgICAgICAg
ICAgICAgICAgRDJEMTo6QnJ1c2hQcm9wZXJ0aWVzKCksIGdyYWRpZW50U3RvcENvbGxlY3Rpb24u
Z2V0KCksCiAgICAgICAgICAgICAgICAgJnJhZGlhbEdyYWRpZW50KTsKICAgICAgICAgICAgIFJF
TEVBU0VfQVNTRVJUKFNVQ0NFRURFRChocikpOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3Mvd2luL0ltYWdlQnVmZmVyRGF0YURpcmVjdDJELmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vSW1hZ2VCdWZmZXJEYXRhRGly
ZWN0MkQuY3BwCShyZXZpc2lvbiAyNTAyMzcpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy93aW4vSW1hZ2VCdWZmZXJEYXRhRGlyZWN0MkQuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0zMDQsNyArMzA0LDcgQEAgYm9vbCBJbWFnZUJ1ZmZlckRhdGE6OnJlYWREYXRhRnJvbUJpdG1h
cAogCiAgICAgY29udGV4dC0+ZW5kRHJhdygpOwogCi0gICAgQ09NUHRyPElEMkQxRGV2aWNlQ29u
dGV4dD4gZDJkRGV2aWNlQ29udGV4dChRdWVyeSwgcGxhdGZvcm1Db250ZXh0LT5yZW5kZXJUYXJn
ZXQoKSk7CisgICAgQ09NUHRyPElEMkQxRGV2aWNlQ29udGV4dD4gZDJkRGV2aWNlQ29udGV4dCA9
IHBsYXRmb3JtQ29udGV4dC0+ZGV2aWNlQ29udGV4dCgpOwogICAgIEFTU0VSVCghIWQyZERldmlj
ZUNvbnRleHQpOwogCiAgICAgYXV0byBieXRlc1BlclJvd0luRGF0YSA9IHBpeGVsU2l6ZS53aWR0
aCgpICogNDsKQEAgLTUwNiwxNiArNTA2LDEzIEBAIENPTVB0cjxJRDJEMUJpdG1hcD4gSW1hZ2VC
dWZmZXJEYXRhOjpjb20KICAgICAvLyBXZSBjYW5ub3QgYWNjZXNzIHRoZSBkYXRhIGJhY2tpbmcg
YW4gSVdJQ0JpdG1hcCB3aGlsZSBhbiBhY3RpdmUgZHJhdyBzZXNzaW9uIGlzIG9wZW4uCiAgICAg
Y29udGV4dC0+ZW5kRHJhdygpOwogCi0gICAgQ09NUHRyPElEMkQxRGV2aWNlQ29udGV4dD4gc291
cmNlRGV2aWNlQ29udGV4dDsKLSAgICBIUkVTVUxUIGhyID0gcGxhdGZvcm1Db250ZXh0LT5yZW5k
ZXJUYXJnZXQoKS0+UXVlcnlJbnRlcmZhY2UoX191dWlkb2YoSUQyRDFEZXZpY2VDb250ZXh0KSwg
cmVpbnRlcnByZXRfY2FzdDx2b2lkKio+KCZzb3VyY2VEZXZpY2VDb250ZXh0KSk7Ci0gICAgQVNT
RVJUKFNVQ0NFRURFRChocikpOwotCisgICAgQ09NUHRyPElEMkQxRGV2aWNlQ29udGV4dD4gc291
cmNlRGV2aWNlQ29udGV4dCA9IHBsYXRmb3JtQ29udGV4dC0+ZGV2aWNlQ29udGV4dCgpOwogICAg
IGlmICghc291cmNlRGV2aWNlQ29udGV4dCkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKICAg
ICBDT01QdHI8SUQyRDFCaXRtYXAxPiBzb3VyY2VDUFVCaXRtYXA7CiAgICAgRDJEMV9CSVRNQVBf
UFJPUEVSVElFUzEgYml0bWFwUHJvcGVydGllcyA9IEQyRDE6OkJpdG1hcFByb3BlcnRpZXMxKEQy
RDFfQklUTUFQX09QVElPTlNfQ1BVX1JFQUQgfCBEMkQxX0JJVE1BUF9PUFRJT05TX0NBTk5PVF9E
UkFXLCBEaXJlY3QyRDo6cGl4ZWxGb3JtYXQoKSk7Ci0gICAgaHIgPSBzb3VyY2VEZXZpY2VDb250
ZXh0LT5DcmVhdGVCaXRtYXAoYml0bWFwLT5HZXRQaXhlbFNpemUoKSwgbnVsbHB0ciwgYnl0ZXNQ
ZXJSb3cudW5zYWZlR2V0KCksIGJpdG1hcFByb3BlcnRpZXMsICZzb3VyY2VDUFVCaXRtYXApOwor
ICAgIEhSRVNVTFQgaHIgPSBzb3VyY2VEZXZpY2VDb250ZXh0LT5DcmVhdGVCaXRtYXAoYml0bWFw
LT5HZXRQaXhlbFNpemUoKSwgbnVsbHB0ciwgYnl0ZXNQZXJSb3cudW5zYWZlR2V0KCksIGJpdG1h
cFByb3BlcnRpZXMsICZzb3VyY2VDUFVCaXRtYXApOwogICAgIGlmICghU1VDQ0VFREVEKGhyKSkK
ICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL3dpbi9QbGF0Zm9ybUNvbnRleHREaXJlY3QyRC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL1BsYXRmb3JtQ29udGV4dERpcmVj
dDJELmNwcAkocmV2aXNpb24gMjUwMjM3KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3Mvd2luL1BsYXRmb3JtQ29udGV4dERpcmVjdDJELmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MjksNiArMjksNyBAQAogI2lmIFVTRShESVJFQ1QyRCkKIAogI2luY2x1ZGUgIkRpcmVjdDJET3Bl
cmF0aW9ucy5oIgorI2luY2x1ZGUgIkRpcmVjdDJEVXRpbGl0aWVzLmgiCiAjaW5jbHVkZSA8ZDJk
MS5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkBAIC01MSw2ICs1MiwxNyBAQCBQbGF0Zm9ybUNv
bnRleHREaXJlY3QyRDo6UGxhdGZvcm1Db250ZXh0CiB7CiAgICAgbV9zdGF0ZVN0YWNrLmFwcGVu
ZChTdGF0ZSgpKTsKICAgICBtX3N0YXRlID0gJm1fc3RhdGVTdGFjay5sYXN0KCk7CisKKyAgICBI
UkVTVUxUIGhyID0gbV9yZW5kZXJUYXJnZXQtPlF1ZXJ5SW50ZXJmYWNlKF9fdXVpZG9mKElEMkQx
RGV2aWNlQ29udGV4dCksIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCoqPigmbV9kZXZpY2VDb250ZXh0
KSk7CisgICAgUkVMRUFTRV9BU1NFUlQoU1VDQ0VFREVEKGhyKSk7Cit9CisKK3ZvaWQgUGxhdGZv
cm1Db250ZXh0RGlyZWN0MkQ6OnNldFJlbmRlclRhcmdldChJRDJEMVJlbmRlclRhcmdldCogcmVu
ZGVyVGFyZ2V0KQoreworICAgIG1fcmVuZGVyVGFyZ2V0ID0gcmVuZGVyVGFyZ2V0OworCisgICAg
SFJFU1VMVCBociA9IG1fcmVuZGVyVGFyZ2V0LT5RdWVyeUludGVyZmFjZShfX3V1aWRvZihJRDJE
MURldmljZUNvbnRleHQpLCByZWludGVycHJldF9jYXN0PHZvaWQqKj4oJm1fZGV2aWNlQ29udGV4
dCkpOworICAgIFJFTEVBU0VfQVNTRVJUKFNVQ0NFRURFRChocikpOwogfQogCiBJRDJEMUxheWVy
KiBQbGF0Zm9ybUNvbnRleHREaXJlY3QyRDo6Y2xpcExheWVyKCkgY29uc3QKQEAgLTI5Miw2ICsz
MDQsOCBAQCB2b2lkIFBsYXRmb3JtQ29udGV4dERpcmVjdDJEOjplbmREcmF3KCkKICAgICAgICAg
V1RGTG9nQWx3YXlzKCJGYWlsZWQgaW4gUGxhdGZvcm1Db250ZXh0RGlyZWN0MkQ6OmVuZERyYXc6
IGhyPSV4ZCwgZmlyc3Q9JWxkLCBzZWNvbmQ9JWxkIiwgaHIsIGZpcnN0LCBzZWNvbmQpOwogCiAg
ICAgLS1iZWdpbkRyYXdDb3VudDsKKworICAgIGNvbXBvc2l0ZUlmTmVlZGVkKCk7CiB9CiAKIHZv
aWQgUGxhdGZvcm1Db250ZXh0RGlyZWN0MkQ6OnNldFRhZ3MoRDJEMV9UQUcgdGFnMSwgRDJEMV9U
QUcgdGFnMikKQEAgLTMxOSw2ICszMzMsNzEgQEAgdm9pZCBQbGF0Zm9ybUNvbnRleHREaXJlY3Qy
RDo6cHVzaENsaXAoRAogICAgIG1fc3RhdGUtPm1fY2xpcHMuYXBwZW5kKGNsaXBUeXBlKTsKIH0K
IAordm9pZCBQbGF0Zm9ybUNvbnRleHREaXJlY3QyRDo6Y29tcG9zaXRlSWZOZWVkZWQoKQorewor
ICAgIGlmICghbV9jb21wb3NpdGVTb3VyY2UpCisgICAgICAgIHJldHVybjsKKworICAgIENPTVB0
cjxJRDJEMUJpdG1hcFJlbmRlclRhcmdldD4gYml0bWFwVGFyZ2V0KFF1ZXJ5LCBtX3JlbmRlclRh
cmdldC5nZXQoKSk7CisgICAgaWYgKCFiaXRtYXBUYXJnZXQpCisgICAgICAgIHJldHVybjsKKwor
ICAgIENPTVB0cjxJRDJEMUJpdG1hcD4gY3VycmVudENhbnZhcyA9IERpcmVjdDJEOjpjcmVhdGVC
aXRtYXBDb3B5RnJvbUNvbnRleHQobV9yZW5kZXJUYXJnZXQuZ2V0KCkpOworICAgIGlmICghY3Vy
cmVudENhbnZhcykKKyAgICAgICAgcmV0dXJuOworCisgICAgQ09NUHRyPElEMkQxRWZmZWN0PiBl
ZmZlY3Q7CisKKyAgICBpZiAobV9ibGVuZE1vZGUgIT0gRDJEMV9CTEVORF9NT0RFX0ZPUkNFX0RX
T1JEKSB7CisgICAgICAgIG1fZGV2aWNlQ29udGV4dC0+Q3JlYXRlRWZmZWN0KENMU0lEX0QyRDFC
bGVuZCwgJmVmZmVjdCk7CisgICAgICAgIGVmZmVjdC0+U2V0SW5wdXQoMCwgY3VycmVudENhbnZh
cy5nZXQoKSk7CisgICAgICAgIGVmZmVjdC0+U2V0SW5wdXQoMSwgbV9jb21wb3NpdGVTb3VyY2Uu
Z2V0KCkpOworICAgICAgICBlZmZlY3QtPlNldFZhbHVlKEQyRDFfQkxFTkRfUFJPUF9NT0RFLCBt
X2JsZW5kTW9kZSk7CisgICAgfSBlbHNlIGlmIChtX2NvbXBvc2l0ZU1vZGUgIT0gRDJEMV9DT01Q
T1NJVEVfTU9ERV9GT1JDRV9EV09SRCkgeworICAgICAgICBtX2RldmljZUNvbnRleHQtPkNyZWF0
ZUVmZmVjdChDTFNJRF9EMkQxQ29tcG9zaXRlLCAmZWZmZWN0KTsKKyAgICAgICAgZWZmZWN0LT5T
ZXRJbnB1dCgwLCBtX2NvbXBvc2l0ZVNvdXJjZS5nZXQoKSk7CisgICAgICAgIGVmZmVjdC0+U2V0
SW5wdXQoMSwgY3VycmVudENhbnZhcy5nZXQoKSk7CisgICAgICAgIGVmZmVjdC0+U2V0VmFsdWUo
RDJEMV9DT01QT1NJVEVfUFJPUF9NT0RFLCBtX2NvbXBvc2l0ZU1vZGUpOworICAgIH0KKworICAg
IGlmIChlZmZlY3QpIHsKKyAgICAgICAgbV9kZXZpY2VDb250ZXh0LT5CZWdpbkRyYXcoKTsKKyAg
ICAgICAgbV9kZXZpY2VDb250ZXh0LT5DbGVhcihEMkQxOjpDb2xvckYoMCwgMCwgMCwgMCkpOwor
ICAgICAgICBtX2RldmljZUNvbnRleHQtPkRyYXdJbWFnZShlZmZlY3QuZ2V0KCkpOworICAgICAg
ICBtX2RldmljZUNvbnRleHQtPkVuZERyYXcoKTsKKyAgICB9CisKKyAgICBtX2NvbXBvc2l0ZVNv
dXJjZSA9IG51bGxwdHI7Cit9CisKK3ZvaWQgUGxhdGZvcm1Db250ZXh0RGlyZWN0MkQ6OnNldEJs
ZW5kQW5kQ29tcG9zaXRlTW9kZShEMkQxX0JMRU5EX01PREUgYmxlbmQsIEQyRDFfQ09NUE9TSVRF
X01PREUgbW9kZSkKK3sKKyAgICBpZiAobW9kZSA9PSBtX2NvbXBvc2l0ZU1vZGUgJiYgYmxlbmQg
PT0gbV9ibGVuZE1vZGUpCisgICAgICAgIHJldHVybjsKKworICAgIC8vIERpcmVjdDJEIGhhbmRs
ZXMgY29tcG9zaXRpbmcgYmFzZWQgb24gYml0bWFwcy4gSWYgd2UgYXJlIGNoYW5naW5nIHRoZQor
ICAgIC8vIGNvbXBvc2l0aW5nIG1vZGUsIHdlIG5lZWQgdG8gY2FwdHVyZSB0aGUgY3VycmVudCBz
dGF0ZSBvZiB0aGUgcmVuZGVyaW5nCisgICAgLy8gaW4gYSBiaXRtYXAsIHBlcmZvcm0gZHJhd2lu
ZyBvcGVyYXRpb25zIHVudGlsIHdlIGZpbmlzaCwgdGhlbiBoYW5kbGUKKyAgICAvLyB0aGUgY29t
cG9zdGluZyBvZiB0aGUgdHdvIGxheWVycy4KKyAgICBDT01QdHI8SUQyRDFCaXRtYXBSZW5kZXJU
YXJnZXQ+IGJpdG1hcFRhcmdldChRdWVyeSwgbV9yZW5kZXJUYXJnZXQuZ2V0KCkpOworICAgIGlm
ICghYml0bWFwVGFyZ2V0KQorICAgICAgICByZXR1cm47CisKKyAgICBlbmREcmF3KCk7CisKKyAg
ICBjb21wb3NpdGVJZk5lZWRlZCgpOworCisgICAgbV9jb21wb3NpdGVNb2RlID0gbW9kZTsKKyAg
ICBtX2JsZW5kTW9kZSA9IGJsZW5kOworCisKKyAgICBtX2NvbXBvc2l0ZVNvdXJjZSA9IERpcmVj
dDJEOjpjcmVhdGVCaXRtYXBDb3B5RnJvbUNvbnRleHQobV9yZW5kZXJUYXJnZXQuZ2V0KCkpOwor
CisgICAgYmVnaW5EcmF3KCk7CisKKyAgICBtX2RldmljZUNvbnRleHQtPkNsZWFyKEQyRDE6OkNv
bG9yRigwLCAwLCAwLCAwKSk7Cit9CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAogI2VuZGlm
IC8vIFVTRShESVJFQ1QyRCkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L3dpbi9QbGF0Zm9ybUNvbnRleHREaXJlY3QyRC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9QbGF0Zm9ybUNvbnRleHREaXJlY3QyRC5oCShyZXZp
c2lvbiAyNTAyMzcpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vUGxh
dGZvcm1Db250ZXh0RGlyZWN0MkQuaAkod29ya2luZyBjb3B5KQpAQCAtNTMsNyArNTMsOSBAQCBw
dWJsaWM6CiAgICAgflBsYXRmb3JtQ29udGV4dERpcmVjdDJEKCk7CiAKICAgICBJRDJEMVJlbmRl
clRhcmdldCogcmVuZGVyVGFyZ2V0KCkgeyByZXR1cm4gbV9yZW5kZXJUYXJnZXQuZ2V0KCk7IH0K
LSAgICB2b2lkIHNldFJlbmRlclRhcmdldChJRDJEMVJlbmRlclRhcmdldCogcmVuZGVyVGFyZ2V0
KSB7IG1fcmVuZGVyVGFyZ2V0ID0gcmVuZGVyVGFyZ2V0OyB9CisgICAgdm9pZCBzZXRSZW5kZXJU
YXJnZXQoSUQyRDFSZW5kZXJUYXJnZXQqKTsKKworICAgIElEMkQxRGV2aWNlQ29udGV4dCogZGV2
aWNlQ29udGV4dCgpIHsgcmV0dXJuIG1fZGV2aWNlQ29udGV4dC5nZXQoKTsgfQogCiAgICAgSUQz
RDExRGV2aWNlMSogZDNkRGV2aWNlKCkgY29uc3QgeyByZXR1cm4gbV9kM2REZXZpY2UuZ2V0KCk7
IH0KICAgICB2b2lkIHNldEQzRERldmljZShJRDNEMTFEZXZpY2UxKiBkZXZpY2UpIHsgbV9kM2RE
ZXZpY2UgPSBkZXZpY2U7IH0KQEAgLTEwMyw4ICsxMDUsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBz
ZXRTdHJva2VUaGlja25lc3MoZmxvYXQpOwogICAgIHZvaWQgc2V0RGFzaGVzKGNvbnN0IERhc2hB
cnJheSYpOwogCi0gICAgdm9pZCBzZXRCbGVuZE1vZGUoRDJEMV9CTEVORF9NT0RFIG1vZGUpIHsg
bV9ibGVuZE1vZGUgPSBtb2RlOyB9Ci0gICAgdm9pZCBzZXRDb21wb3NpdGVNb2RlKEQyRDFfQ09N
UE9TSVRFX01PREUgbW9kZSkgeyBtX2NvbXBvc2l0ZU1vZGUgPSBtb2RlOyB9CisgICAgdm9pZCBz
ZXRCbGVuZEFuZENvbXBvc2l0ZU1vZGUoRDJEMV9CTEVORF9NT0RFLCBEMkQxX0NPTVBPU0lURV9N
T0RFKTsKIAogICAgIHZvaWQgc2V0VGFncyhEMkQxX1RBRyB0YWcxLCBEMkQxX1RBRyB0YWcyKTsK
ICAgICB2b2lkIG5vdGlmeVByZURyYXdPYnNlcnZlcigpOwpAQCAtMTE0LDEwICsxMTUsMTIgQEAg
cHVibGljOgogCiBwcml2YXRlOgogICAgIHZvaWQgY2xlYXJDbGlwcyhWZWN0b3I8RGlyZWN0MkRM
YXllclR5cGU+Jik7CisgICAgdm9pZCBjb21wb3NpdGVJZk5lZWRlZCgpOwogCiAgICAgR3JhcGhp
Y3NDb250ZXh0UGxhdGZvcm1Qcml2YXRlKiBtX2dyYXBoaWNzQ29udGV4dFByaXZhdGUgeyBudWxs
cHRyIH07CiAKICAgICBDT01QdHI8SUQyRDFSZW5kZXJUYXJnZXQ+IG1fcmVuZGVyVGFyZ2V0Owor
ICAgIENPTVB0cjxJRDJEMURldmljZUNvbnRleHQ+IG1fZGV2aWNlQ29udGV4dDsKICAgICBDT01Q
dHI8SUQyRDFTdHJva2VTdHlsZT4gbV9kMmRTdHJva2VTdHlsZTsKIAogICAgIEhhc2hNYXA8dWlu
dDMyX3QsIENPTVB0cjxJRDJEMVNvbGlkQ29sb3JCcnVzaD4+IG1fc29saWRDb2xvcmVkQnJ1c2hD
YWNoZTsKQEAgLTEzMCw2ICsxMzMsOCBAQCBwcml2YXRlOgogCiAgICAgQ09NUHRyPElEM0QxMURl
dmljZTE+IG1fZDNkRGV2aWNlOwogCisgICAgQ09NUHRyPElEMkQxQml0bWFwPiBtX2NvbXBvc2l0
ZVNvdXJjZTsKKwogICAgIFdURjo6RnVuY3Rpb248dm9pZCgpPiBtX3ByZURyYXdIYW5kbGVyOwog
ICAgIFdURjo6RnVuY3Rpb248dm9pZCgpPiBtX3Bvc3REcmF3SGFuZGxlcjsKIAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>379693</attachid>
            <date>2019-09-26 16:25:44 -0700</date>
            <delta_ts>2019-09-28 23:14:58 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-202177-20190926162540.patch</filename>
            <type>text/plain</type>
            <size>32497</size>
            <attacher name="Brent Fulgham">bfulgham</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDI1MDMxOSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDQ0IEBACisyMDE5LTA5LTI0ICBCcmVudCBG
dWxnaGFtICA8YmZ1bGdoYW1AYXBwbGUuY29tPgorCisgICAgICAgIFtGVFddIENvcnJlY3QgY29t
cG9zaXRpbmcsIHNoYWRvdywgYW5kIHJhZGlhbCBncmFkaWVudCBpbXBsZW1lbnRhdGlvbnMKKyAg
ICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIwMjE3NworCisg
ICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFRoaXMgcGF0Y2gg
Y29ycmVjdHMgYSBudW1iZXIgb2YgaW1wbGVtZW50YXRpb24gZXJyb3JzIGluIGJhc2ljIENhbnZh
cworICAgICAgICBkcmF3aW5nIG9wZXJhdGlvbnMuCisKKyAgICAgICAgVGVzdGVkIGJ5IGNhbnZh
cy9waGlsaXAvdGVzdHMgCisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy93aW4vRGlyZWN0
MkRPcGVyYXRpb25zLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkRpcmVjdDJEOjpTdGF0ZTo6c2V0
Q29tcG9zaXRlT3BlcmF0aW9uKTogSW5pdGlhbGl6ZSBibGVuZCBhbmQKKyAgICAgICAgY29tcG9z
aXRlIG1vZGVzIHRvIGNvcnJlY3QgZGVmYXVsdHMuCisgICAgICAgIChXZWJDb3JlOjpEaXJlY3Qy
RDo6ZHJhd1dpdGhTaGFkb3dIZWxwZXIpOiBDb3JyZWN0IHZhbHVlIHVzZWQgZm9yIGJsdXIKKyAg
ICAgICAgc3RhbmRhcmQgZGV2aWF0aW9uIHRvIG1vcmUgY2xvc2VseSBtYXRjaCBvdGhlciBicm93
c2VyIG91dHB1dC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy93aW4vRGlyZWN0MkRVdGls
aXRpZXMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RGlyZWN0MkQ6OmNyZWF0ZUJpdG1hcENvcHlG
cm9tQ29udGV4dCk6IEFkZGVkIGhlbHBlciBmdW5jdGlvbi4KKyAgICAgICAgKiBwbGF0Zm9ybS9n
cmFwaGljcy93aW4vRGlyZWN0MkRVdGlsaXRpZXMuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy93aW4vR3JhZGllbnREaXJlY3QyRC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpHcmFkaWVu
dDo6Z2VuZXJhdGVHcmFkaWVudCk6IFByb3Blcmx5IGhhbmRsZSB0aGUgY2FzZSBvZiBhIG5vbi16
ZXJvCisgICAgICAgIGluaXRpYWwgZ3JhZGllbnQgcmFkaXVzLiBQcm9wZXJseSBjb21wdXRlIHRo
ZSBmaW5hbCByYWRpdXMuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ltYWdlQnVm
ZmVyRGF0YURpcmVjdDJELmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyRGF0YTo6
cmVhZERhdGFGcm9tQml0bWFwSWZOZWVkZWQgY29uc3QpOiBVcGRhdGUgdG8gdXNlIElEMkQxRGV2
aWNlQ29udGV4dAorICAgICAgICBmcm9tIHBsYXRmb3JtQ29udGV4dCwgcmF0aGVyIHRoYW4gc2Vh
cmNoaW5nIGZvciBpdCBlYWNoIHRpbWUuCisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlckRh
dGE6OmNvbXBhdGlibGVCaXRtYXApOiBEaXR0by4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy93aW4vUGxhdGZvcm1Db250ZXh0RGlyZWN0MkQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UGxh
dGZvcm1Db250ZXh0RGlyZWN0MkQ6OlBsYXRmb3JtQ29udGV4dERpcmVjdDJEKTogR3JhYiB0aGUg
SUQyRDFEZXZpY2VDb250ZXh0IGZvcgorICAgICAgICB0aGUgUmVuZGVyVGFyZ2V0IGF0IGNvbnN0
cnVjdGlvbiB0aW1lLgorICAgICAgICAoV2ViQ29yZTo6UGxhdGZvcm1Db250ZXh0RGlyZWN0MkQ6
OnNldFJlbmRlclRhcmdldCk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6UGxhdGZvcm1Db250
ZXh0RGlyZWN0MkQ6OmVuZERyYXcpOiBQZXJmb3JtIGNvbXBvc2l0aW5nIG9wZXJhdGlvbnMgd2hl
biBuZWVkZWQuCisgICAgICAgIChXZWJDb3JlOjpQbGF0Zm9ybUNvbnRleHREaXJlY3QyRDo6Y29t
cG9zaXRlSWZOZWVkZWQpOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlBsYXRmb3JtQ29udGV4
dERpcmVjdDJEOjpzZXRCbGVuZEFuZENvbXBvc2l0ZU1vZGUpOiBVcGRhdGUgdG8gcHJvcGVybHkg
c2V0IHRoZQorICAgICAgICBibGVuZCBhbmQgY29tcG9zaXRpbmcgbW9kZSAoZGVwZW5kaW5nIG9u
IGdsb2JhbCB2YWx1ZSBzZXQgZm9yIHRoZSBjYW52YXMuKQorICAgICAgICAqIHBsYXRmb3JtL2dy
YXBoaWNzL3dpbi9QbGF0Zm9ybUNvbnRleHREaXJlY3QyRC5oOgorICAgICAgICAoV2ViQ29yZTo6
UGxhdGZvcm1Db250ZXh0RGlyZWN0MkQ6OmRldmljZUNvbnRleHQpOgorICAgICAgICAoV2ViQ29y
ZTo6UGxhdGZvcm1Db250ZXh0RGlyZWN0MkQ6OnNldFJlbmRlclRhcmdldCk6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJDb3JlOjpQbGF0Zm9ybUNvbnRleHREaXJlY3QyRDo6c2V0QmxlbmRNb2RlKTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlBsYXRmb3JtQ29udGV4dERpcmVjdDJEOjpzZXRD
b21wb3NpdGVNb2RlKTogRGVsZXRlZC4KKwogMjAxOS0wOS0yNCAgQ2hyaXMgRHVtZXogIDxjZHVt
ZXpAYXBwbGUuY29tPgogCiAgICAgICAgIFN0b3Agc2FtcGxpbmcgUGFnZUNhY2hlLXJlbGF0ZWQg
QWdnRCBkYXRhCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9QYXRoLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvUGF0aC5oCShy
ZXZpc2lvbiAyNTAyMzcpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9QYXRo
LmgJKHdvcmtpbmcgY29weSkKQEAgLTUwLDYgKzUwLDEwIEBAIGludGVyZmFjZSBJRDJEMUdlb21l
dHJ5U2luazsKIAogdHlwZWRlZiBJRDJEMUdlb21ldHJ5R3JvdXAgUGxhdGZvcm1QYXRoOwogCitu
YW1lc3BhY2UgV2ViQ29yZSB7CitjbGFzcyBQbGF0Zm9ybUNvbnRleHREaXJlY3QyRDsKK30KKwog
I2VsaWYgVVNFKENBSVJPKQogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkBAIC0xNzAsNiArMTc0LDcg
QEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICAvLyBUbyBrZWVwIFBhdGgoKSBjaGVhcCwg
aXQgZG9lcyBub3QgYWxsb2NhdGUgYSBQbGF0Zm9ybVBhdGggaW1tZWRpYXRlbHkKICAgICAgICAg
Ly8gbWVhbmluZyBQYXRoOjpwbGF0Zm9ybVBhdGgoKSBjYW4gcmV0dXJuIG51bGwuCiAjaWYgVVNF
KERJUkVDVDJEKQorICAgICAgICBGbG9hdFJlY3QgZmFzdEJvdW5kaW5nUmVjdEZvclN0cm9rZShj
b25zdCBQbGF0Zm9ybUNvbnRleHREaXJlY3QyRCYpIGNvbnN0OwogICAgICAgICBQbGF0Zm9ybVBh
dGhQdHIgcGxhdGZvcm1QYXRoKCkgY29uc3QgeyByZXR1cm4gbV9wYXRoLmdldCgpOyB9CiAjZWxz
ZQogICAgICAgICBQbGF0Zm9ybVBhdGhQdHIgcGxhdGZvcm1QYXRoKCkgY29uc3QgeyByZXR1cm4g
bV9wYXRoOyB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vRGly
ZWN0MkRPcGVyYXRpb25zLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy93aW4vRGlyZWN0MkRPcGVyYXRpb25zLmNwcAkocmV2aXNpb24gMjUwMjM3KQor
KysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0RpcmVjdDJET3BlcmF0aW9u
cy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM4LDYgKzM4LDcgQEAKICNpbmNsdWRlICJEaXJlY3Qy
RFV0aWxpdGllcy5oIgogI2luY2x1ZGUgIkZsb2F0Q29udmVyc2lvbi5oIgogI2luY2x1ZGUgIkZs
b2F0UmVjdC5oIgorI2luY2x1ZGUgIkZsb2F0U2l6ZS5oIgogI2luY2x1ZGUgIkdyYXBoaWNzQ29u
dGV4dFBsYXRmb3JtUHJpdmF0ZURpcmVjdDJELmgiCiAjaW5jbHVkZSAiSW1hZ2UuaCIKICNpbmNs
dWRlICJJbWFnZUJ1ZmZlci5oIgpAQCAtMTI3LDggKzEyOCw4IEBAIHZvaWQgc2V0U3Ryb2tlU3R5
bGUoUGxhdGZvcm1Db250ZXh0RGlyZWMKIAogdm9pZCBzZXRDb21wb3NpdGVPcGVyYXRpb24oUGxh
dGZvcm1Db250ZXh0RGlyZWN0MkQmIHBsYXRmb3JtQ29udGV4dCwgQ29tcG9zaXRlT3BlcmF0b3Ig
Y29tcG9zaXRlT3BlcmF0aW9uLCBCbGVuZE1vZGUgYmxlbmRNb2RlKQogewotICAgIEQyRDFfQkxF
TkRfTU9ERSB0YXJnZXRCbGVuZE1vZGUgPSBEMkQxX0JMRU5EX01PREVfU0NSRUVOOwotICAgIEQy
RDFfQ09NUE9TSVRFX01PREUgdGFyZ2V0Q29tcG9zaXRlTW9kZSA9IEQyRDFfQ09NUE9TSVRFX01P
REVfU09VUkNFX0FUT1A7CisgICAgRDJEMV9CTEVORF9NT0RFIHRhcmdldEJsZW5kTW9kZSA9IEQy
RDFfQkxFTkRfTU9ERV9GT1JDRV9EV09SRDsKKyAgICBEMkQxX0NPTVBPU0lURV9NT0RFIHRhcmdl
dENvbXBvc2l0ZU1vZGUgPSBEMkQxX0NPTVBPU0lURV9NT0RFX0ZPUkNFX0RXT1JEOwogCiAgICAg
aWYgKGJsZW5kTW9kZSAhPSBCbGVuZE1vZGU6Ok5vcm1hbCkgewogICAgICAgICBzd2l0Y2ggKGJs
ZW5kTW9kZSkgewpAQCAtMTkyLDEwICsxOTMsMTAgQEAgdm9pZCBzZXRDb21wb3NpdGVPcGVyYXRp
b24oUGxhdGZvcm1Db250ZQogICAgICAgICAgICAgLy8gRklYTUU6IHRhcmdldEJsZW5kTW9kZSA9
IEQyRDFfQkxFTkRfTU9ERV9DTEVBUjsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNl
IENvbXBvc2l0ZUNvcHk6Ci0gICAgICAgICAgICAvLyBGSVhNRTogdGFyZ2V0QmxlbmRNb2RlID0g
RDJEMV9CTEVORF9NT0RFX0NPUFk7CisgICAgICAgICAgICB0YXJnZXRDb21wb3NpdGVNb2RlID0g
RDJEMV9DT01QT1NJVEVfTU9ERV9TT1VSQ0VfQ09QWTsKICAgICAgICAgICAgIGJyZWFrOwogICAg
ICAgICBjYXNlIENvbXBvc2l0ZVNvdXJjZU92ZXI6Ci0gICAgICAgICAgICAvLyBGSVhNRToga0NH
QmxlbmRNb2RlTm9ybWFsCisgICAgICAgICAgICB0YXJnZXRDb21wb3NpdGVNb2RlID0gRDJEMV9D
T01QT1NJVEVfTU9ERV9TT1VSQ0VfT1ZFUjsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBj
YXNlIENvbXBvc2l0ZVNvdXJjZUluOgogICAgICAgICAgICAgdGFyZ2V0Q29tcG9zaXRlTW9kZSA9
IEQyRDFfQ09NUE9TSVRFX01PREVfU09VUkNFX0lOOwpAQCAtMjIyLDEwICsyMjMsMTAgQEAgdm9p
ZCBzZXRDb21wb3NpdGVPcGVyYXRpb24oUGxhdGZvcm1Db250ZQogICAgICAgICAgICAgdGFyZ2V0
Q29tcG9zaXRlTW9kZSA9IEQyRDFfQ09NUE9TSVRFX01PREVfWE9SOwogICAgICAgICAgICAgYnJl
YWs7CiAgICAgICAgIGNhc2UgQ29tcG9zaXRlUGx1c0RhcmtlcjoKLSAgICAgICAgICAgIHRhcmdl
dEJsZW5kTW9kZSA9IEQyRDFfQkxFTkRfTU9ERV9EQVJLRVJfQ09MT1I7CisgICAgICAgICAgICB0
YXJnZXRCbGVuZE1vZGUgPSBEMkQxX0JMRU5EX01PREVfREFSS0VOOwogICAgICAgICAgICAgYnJl
YWs7CiAgICAgICAgIGNhc2UgQ29tcG9zaXRlUGx1c0xpZ2h0ZXI6Ci0gICAgICAgICAgICB0YXJn
ZXRCbGVuZE1vZGUgPSBEMkQxX0JMRU5EX01PREVfTElHSFRFUl9DT0xPUjsKKyAgICAgICAgICAg
IHRhcmdldEJsZW5kTW9kZSA9IEQyRDFfQkxFTkRfTU9ERV9MSUdIVEVOOwogICAgICAgICAgICAg
YnJlYWs7CiAgICAgICAgIGNhc2UgQ29tcG9zaXRlRGlmZmVyZW5jZToKICAgICAgICAgICAgIHRh
cmdldEJsZW5kTW9kZSA9IEQyRDFfQkxFTkRfTU9ERV9ESUZGRVJFTkNFOwpAQCAtMjMzLDggKzIz
NCw3IEBAIHZvaWQgc2V0Q29tcG9zaXRlT3BlcmF0aW9uKFBsYXRmb3JtQ29udGUKICAgICAgICAg
fQogICAgIH0KIAotICAgIHBsYXRmb3JtQ29udGV4dC5zZXRCbGVuZE1vZGUodGFyZ2V0QmxlbmRN
b2RlKTsKLSAgICBwbGF0Zm9ybUNvbnRleHQuc2V0Q29tcG9zaXRlTW9kZSh0YXJnZXRDb21wb3Np
dGVNb2RlKTsKKyAgICBwbGF0Zm9ybUNvbnRleHQuc2V0QmxlbmRBbmRDb21wb3NpdGVNb2RlKHRh
cmdldEJsZW5kTW9kZSwgdGFyZ2V0Q29tcG9zaXRlTW9kZSk7CiB9CiAKIHZvaWQgc2V0U2hvdWxk
QW50aWFsaWFzKFBsYXRmb3JtQ29udGV4dERpcmVjdDJEJiBwbGF0Zm9ybUNvbnRleHQsIGJvb2wg
ZW5hYmxlKQpAQCAtNTY4LDcgKzU2OCw3IEBAIHZvaWQgc3Ryb2tlUGF0aChQbGF0Zm9ybUNvbnRl
eHREaXJlY3QyRCYKICAgICAKICAgICBwbGF0Zm9ybUNvbnRleHQuc2V0VGFncygxLCBfX0xJTkVf
Xyk7CiAKLSAgICBhdXRvIGJvdW5kaW5nUmVjdCA9IHBhdGguZmFzdEJvdW5kaW5nUmVjdCgpOwor
ICAgIGF1dG8gYm91bmRpbmdSZWN0ID0gcGF0aC5mYXN0Qm91bmRpbmdSZWN0Rm9yU3Ryb2tlKHBs
YXRmb3JtQ29udGV4dCk7CiAgICAgRnVuY3Rpb248dm9pZChJRDJEMVJlbmRlclRhcmdldCopPiBk
cmF3RnVuY3Rpb24gPSBbJnBsYXRmb3JtQ29udGV4dCwgJnBhdGgsICZzdHJva2VTb3VyY2VdKElE
MkQxUmVuZGVyVGFyZ2V0KiByZW5kZXJUYXJnZXQpIHsKICAgICAgICAgcmVuZGVyVGFyZ2V0LT5E
cmF3R2VvbWV0cnkocGF0aC5wbGF0Zm9ybVBhdGgoKSwgc3Ryb2tlU291cmNlLmJydXNoLmdldCgp
LCBzdHJva2VTb3VyY2UudGhpY2tuZXNzLCBwbGF0Zm9ybUNvbnRleHQuc3Ryb2tlU3R5bGUoKSk7
CiAgICAgfTsKQEAgLTU4Nyw3ICs1ODcsNyBAQCB2b2lkIGRyYXdQYXRoKFBsYXRmb3JtQ29udGV4
dERpcmVjdDJEJiBwCiAKICAgICBwbGF0Zm9ybUNvbnRleHQuc2V0VGFncygxLCBfX0xJTkVfXyk7
CiAKLSAgICBhdXRvIHJlY3QgPSBwYXRoLmZhc3RCb3VuZGluZ1JlY3QoKTsKKyAgICBhdXRvIHJl
Y3QgPSBwYXRoLmZhc3RCb3VuZGluZ1JlY3RGb3JTdHJva2UocGxhdGZvcm1Db250ZXh0KTsKICAg
ICBkcmF3V2l0aG91dFNoYWRvdyhwbGF0Zm9ybUNvbnRleHQsIHJlY3QsIFsmcGxhdGZvcm1Db250
ZXh0LCAmc3Ryb2tlU291cmNlLCAmcGF0aF0oSUQyRDFSZW5kZXJUYXJnZXQqIHJlbmRlclRhcmdl
dCkgewogICAgICAgICByZW5kZXJUYXJnZXQtPkRyYXdHZW9tZXRyeShwYXRoLnBsYXRmb3JtUGF0
aCgpLCBzdHJva2VTb3VyY2UuYnJ1c2guZ2V0KCksIHN0cm9rZVNvdXJjZS50aGlja25lc3MsIHBs
YXRmb3JtQ29udGV4dC5zdHJva2VTdHlsZSgpKTsKICAgICB9KTsKQEAgLTU5NSw1OSArNTk1LDEy
NiBAQCB2b2lkIGRyYXdQYXRoKFBsYXRmb3JtQ29udGV4dERpcmVjdDJEJiBwCiAgICAgZmx1c2go
cGxhdGZvcm1Db250ZXh0KTsKIH0KIAotdm9pZCBkcmF3V2l0aFNoYWRvd0hlbHBlcihJRDJEMVJl
bmRlclRhcmdldCogY29udGV4dCwgSUQyRDFCaXRtYXAqIGJpdG1hcCwgY29uc3QgQ29sb3ImIHNo
YWRvd0NvbG9yLCBjb25zdCBGbG9hdFNpemUmIHNoYWRvd09mZnNldCwgZmxvYXQgc2hhZG93Qmx1
cikKK3N0YXRpYyB2b2lkIGRyYXdXaXRoU2hhZG93SGVscGVyKElEMkQxUmVuZGVyVGFyZ2V0KiBj
b250ZXh0LCBJRDJEMUJpdG1hcFJlbmRlclRhcmdldCogYml0bWFwVGFyZ2V0LCBjb25zdCBGbG9h
dFJlY3QmIGJvdW5kaW5nUmVjdCwgY29uc3QgQ29sb3ImIHNoYWRvd0NvbG9yLCBjb25zdCBGbG9h
dFNpemUmIHNoYWRvd09mZnNldCwgZmxvYXQgc2hhZG93Qmx1cikKIHsKLSAgICBDT01QdHI8SUQy
RDFEZXZpY2VDb250ZXh0PiBkZXZpY2VDb250ZXh0OwotICAgIEhSRVNVTFQgaHIgPSBjb250ZXh0
LT5RdWVyeUludGVyZmFjZSgmZGV2aWNlQ29udGV4dCk7CisgICAgQ09NUHRyPElEMkQxQml0bWFw
PiBjdXJyZW50Q2FudmFzID0gRGlyZWN0MkQ6OmNyZWF0ZUJpdG1hcENvcHlGcm9tQ29udGV4dChi
aXRtYXBUYXJnZXQpOworICAgIGlmICghY3VycmVudENhbnZhcykKKyAgICAgICAgcmV0dXJuOwor
CisgICAgQ09NUHRyPElEMkQxRGV2aWNlQ29udGV4dD4gc2hhZG93RGV2aWNlQ29udGV4dDsKKyAg
ICBIUkVTVUxUIGhyID0gYml0bWFwVGFyZ2V0LT5RdWVyeUludGVyZmFjZSgmc2hhZG93RGV2aWNl
Q29udGV4dCk7CiAgICAgUkVMRUFTRV9BU1NFUlQoU1VDQ0VFREVEKGhyKSk7CiAKICAgICAvLyBD
cmVhdGUgdGhlIHNoYWRvdyBlZmZlY3QKICAgICBDT01QdHI8SUQyRDFFZmZlY3Q+IHNoYWRvd0Vm
ZmVjdDsKLSAgICBociA9IGRldmljZUNvbnRleHQtPkNyZWF0ZUVmZmVjdChDTFNJRF9EMkQxU2hh
ZG93LCAmc2hhZG93RWZmZWN0KTsKKyAgICBociA9IHNoYWRvd0RldmljZUNvbnRleHQtPkNyZWF0
ZUVmZmVjdChDTFNJRF9EMkQxU2hhZG93LCAmc2hhZG93RWZmZWN0KTsKICAgICBSRUxFQVNFX0FT
U0VSVChTVUNDRUVERUQoaHIpKTsKIAotICAgIHNoYWRvd0VmZmVjdC0+U2V0SW5wdXQoMCwgYml0
bWFwKTsKKyAgICBzaGFkb3dFZmZlY3QtPlNldElucHV0KDAsIGN1cnJlbnRDYW52YXMuZ2V0KCkp
OwogICAgIHNoYWRvd0VmZmVjdC0+U2V0VmFsdWUoRDJEMV9TSEFET1dfUFJPUF9DT0xPUiwgc3Rh
dGljX2Nhc3Q8RDJEMV9WRUNUT1JfNEY+KHNoYWRvd0NvbG9yKSk7Ci0gICAgc2hhZG93RWZmZWN0
LT5TZXRWYWx1ZShEMkQxX1NIQURPV19QUk9QX0JMVVJfU1RBTkRBUkRfREVWSUFUSU9OLCBzaGFk
b3dCbHVyKTsKIAotICAgIENPTVB0cjxJRDJEMUVmZmVjdD4gdHJhbnNmb3JtRWZmZWN0OwotICAg
IGhyID0gZGV2aWNlQ29udGV4dC0+Q3JlYXRlRWZmZWN0KENMU0lEX0QyRDEyREFmZmluZVRyYW5z
Zm9ybSwgJnRyYW5zZm9ybUVmZmVjdCk7CisgICAgZmxvYXQgYmx1ckRldmlhdGlvbiA9IDAuNSAq
IHNoYWRvd0JsdXI7CisgICAgc2hhZG93RWZmZWN0LT5TZXRWYWx1ZShEMkQxX1NIQURPV19QUk9Q
X0JMVVJfU1RBTkRBUkRfREVWSUFUSU9OLCBibHVyRGV2aWF0aW9uKTsKKworICAgIENPTVB0cjxJ
RDJEMUVmZmVjdD4gc2hhZG93VHJhbnNmb3JtRWZmZWN0OworICAgIGhyID0gc2hhZG93RGV2aWNl
Q29udGV4dC0+Q3JlYXRlRWZmZWN0KENMU0lEX0QyRDEyREFmZmluZVRyYW5zZm9ybSwgJnNoYWRv
d1RyYW5zZm9ybUVmZmVjdCk7CiAgICAgUkVMRUFTRV9BU1NFUlQoU1VDQ0VFREVEKGhyKSk7CiAK
LSAgICB0cmFuc2Zvcm1FZmZlY3QtPlNldElucHV0RWZmZWN0KDAsIHNoYWRvd0VmZmVjdC5nZXQo
KSk7CisgICAgc2hhZG93VHJhbnNmb3JtRWZmZWN0LT5TZXRJbnB1dEVmZmVjdCgwLCBzaGFkb3dF
ZmZlY3QuZ2V0KCkpOwogCi0gICAgYXV0byB0cmFuc2xhdGlvbiA9IEQyRDE6Ok1hdHJpeDN4MkY6
OlRyYW5zbGF0aW9uKHNoYWRvd09mZnNldC53aWR0aCgpLCBzaGFkb3dPZmZzZXQuaGVpZ2h0KCkp
OwotICAgIHRyYW5zZm9ybUVmZmVjdC0+U2V0VmFsdWUoRDJEMV8yREFGRklORVRSQU5TRk9STV9Q
Uk9QX1RSQU5TRk9STV9NQVRSSVgsIHRyYW5zbGF0aW9uKTsKKyAgICAvLyBNdXN0IGZsaXAgdGhl
IGF4aXMgZm9yIHRoZSBzaGFkb3cgb2Zmc2V0LCBzaW5jZSBEaXJlY3QyRCdzIFkgYXhpcyBpcyBp
bnZlcnRlZC4KKyAgICBhdXRvIHNoYWRvd1RyYW5zbGF0aW9uID0gRDJEMTo6TWF0cml4M3gyRjo6
VHJhbnNsYXRpb24oc2hhZG93T2Zmc2V0LndpZHRoKCksIC1zaGFkb3dPZmZzZXQuaGVpZ2h0KCkp
OworICAgIHNoYWRvd1RyYW5zZm9ybUVmZmVjdC0+U2V0VmFsdWUoRDJEMV8yREFGRklORVRSQU5T
Rk9STV9QUk9QX1RSQU5TRk9STV9NQVRSSVgsIHNoYWRvd1RyYW5zbGF0aW9uKTsKIAogICAgIENP
TVB0cjxJRDJEMUVmZmVjdD4gY29tcG9zaXRvcjsKLSAgICBociA9IGRldmljZUNvbnRleHQtPkNy
ZWF0ZUVmZmVjdChDTFNJRF9EMkQxQ29tcG9zaXRlLCAmY29tcG9zaXRvcik7CisgICAgaHIgPSBz
aGFkb3dEZXZpY2VDb250ZXh0LT5DcmVhdGVFZmZlY3QoQ0xTSURfRDJEMUNvbXBvc2l0ZSwgJmNv
bXBvc2l0b3IpOworICAgIFJFTEVBU0VfQVNTRVJUKFNVQ0NFRURFRChocikpOworCisgICAgY29t
cG9zaXRvci0+U2V0SW5wdXRFZmZlY3QoMCwgc2hhZG93VHJhbnNmb3JtRWZmZWN0LmdldCgpKTsK
KyAgICBjb21wb3NpdG9yLT5TZXRJbnB1dCgxLCBjdXJyZW50Q2FudmFzLmdldCgpKTsKKworICAg
IHNoYWRvd0RldmljZUNvbnRleHQtPkJlZ2luRHJhdygpOworICAgIHNoYWRvd0RldmljZUNvbnRl
eHQtPkNsZWFyKEQyRDE6OkNvbG9yRigwLCAwLCAwLCAwKSk7CisgICAgc2hhZG93RGV2aWNlQ29u
dGV4dC0+RHJhd0ltYWdlKGNvbXBvc2l0b3IuZ2V0KCkpOworICAgIGhyID0gc2hhZG93RGV2aWNl
Q29udGV4dC0+RW5kRHJhdygpOwogICAgIFJFTEVBU0VfQVNTRVJUKFNVQ0NFRURFRChocikpOwog
Ci0gICAgY29tcG9zaXRvci0+U2V0SW5wdXRFZmZlY3QoMCwgdHJhbnNmb3JtRWZmZWN0LmdldCgp
KTsKLSAgICBjb21wb3NpdG9yLT5TZXRJbnB1dCgxLCBiaXRtYXApOworICAgIENPTVB0cjxJRDJE
MUJpdG1hcD4gYml0bWFwOworICAgIGhyID0gYml0bWFwVGFyZ2V0LT5HZXRCaXRtYXAoJmJpdG1h
cCk7CisgICAgUkVMRUFTRV9BU1NFUlQoU1VDQ0VFREVEKGhyKSk7CisKKyAgICBJbnRTaXplIHBp
eGVsU2l6ZSA9IGNvbnRleHQtPkdldFBpeGVsU2l6ZSgpOworICAgIENPTVB0cjxJRDJEMUJpdG1h
cD4gY3JvcHBlZCA9IERpcmVjdDJEOjpjcmVhdGVCaXRtYXAoYml0bWFwVGFyZ2V0LCBwaXhlbFNp
emUpOworICAgIGlmICghY3JvcHBlZCkKKyAgICAgICAgcmV0dXJuOworCisgICAgYXV0byBzY2Fs
ZUZhY3RvciA9IGJpdG1hcFJlc29sdXRpb24oY29udGV4dCk7CisKKyAgICBGbG9hdFJlY3Qgc2Nh
bGVkQm91bmRpbmdSZWN0KGJvdW5kaW5nUmVjdCk7CisgICAgc2NhbGVkQm91bmRpbmdSZWN0LnNj
YWxlKHNjYWxlRmFjdG9yLndpZHRoKCksIHNjYWxlRmFjdG9yLmhlaWdodCgpKTsKKworICAgIC8v
IFRha2UgdGhlIG1hZ25pdHVkZSBvZiB0aGUgb2Zmc2V0LiBJZiB0aGUgb3JpZ2luIHdhcyBvdXRz
aWRlIHRoZSBkcmF3aW5nIGNvbnRleHQsIHdlIHN0cmV0Y2hlZCB0byBpbmNsdWRlIHRob3NlIHBv
aW50cywKKyAgICAvLyBhbmQgc28gd2UgbmVlZCB0byBjcm9wIHRoZW0gb3V0LiBJZiB0aGUgb3Jp
Z2luIHdhcyBpbnNpZGUsIHdlIHdhbnQgdG8gaG9ub3IgdGhlIG9mZnNldC4KKyAgICBpbnQgeCA9
IGNsYW1wVG88aW50PihzdGQ6OmFicyhzY2FsZWRCb3VuZGluZ1JlY3QueCgpKSk7CisgICAgaW50
IHkgPSBjbGFtcFRvPGludD4oc3RkOjphYnMoc2NhbGVkQm91bmRpbmdSZWN0LnkoKSkpOworICAg
IGludCB3aWR0aCA9IGNsYW1wVG88aW50PihzY2FsZWRCb3VuZGluZ1JlY3Qud2lkdGgoKSk7Cisg
ICAgaW50IGhlaWdodCA9IGNsYW1wVG88aW50PihzY2FsZWRCb3VuZGluZ1JlY3QuaGVpZ2h0KCkp
OworCisgICAgSW50UmVjdCBvdXRwdXRSZWN0KEludFBvaW50KHgsIHkpLCBJbnRTaXplKHdpZHRo
LCBoZWlnaHQpKTsKKyAgICBJbnRSZWN0IGRlc3RDb250ZXh0UmVjdChJbnRQb2ludCgpLCBwaXhl
bFNpemUpOworICAgIGlmIChvdXRwdXRSZWN0LmludGVyc2VjdHMoZGVzdENvbnRleHRSZWN0KSkK
KyAgICAgICAgb3V0cHV0UmVjdC5pbnRlcnNlY3QoZGVzdENvbnRleHRSZWN0KTsKKworICAgIEQy
RDFfUkVDVF9VIGNyb3BSZWN0ID0gb3V0cHV0UmVjdDsKKyAgICBhdXRvIHRhcmdldFBvaW50ID0g
RDJEMTo6UG9pbnQyVSgpOworICAgIGNyb3BwZWQtPkNvcHlGcm9tQml0bWFwKCZ0YXJnZXRQb2lu
dCwgYml0bWFwLmdldCgpLCAmY3JvcFJlY3QpOwogCi0gICAgZGV2aWNlQ29udGV4dC0+RHJhd0lt
YWdlKGNvbXBvc2l0b3IuZ2V0KCksIEQyRDFfSU5URVJQT0xBVElPTl9NT0RFX0xJTkVBUik7Cisg
ICAgY29udGV4dC0+RHJhd0JpdG1hcChjcm9wcGVkLmdldCgpKTsKIH0KIAotdm9pZCBkcmF3V2l0
aFNoYWRvdyhQbGF0Zm9ybUNvbnRleHREaXJlY3QyRCYgcGxhdGZvcm1Db250ZXh0LCBjb25zdCBG
bG9hdFJlY3QmIGJvdW5kaW5nUmVjdCwgY29uc3QgU2hhZG93U3RhdGUmIHNoYWRvd1N0YXRlLCBj
b25zdCBXVEY6OkZ1bmN0aW9uPHZvaWQoSUQyRDFSZW5kZXJUYXJnZXQqKT4mIGRyYXdDb21tYW5k
cykKK3ZvaWQgZHJhd1dpdGhTaGFkb3coUGxhdGZvcm1Db250ZXh0RGlyZWN0MkQmIHBsYXRmb3Jt
Q29udGV4dCwgRmxvYXRSZWN0IGJvdW5kaW5nUmVjdCwgY29uc3QgU2hhZG93U3RhdGUmIHNoYWRv
d1N0YXRlLCBjb25zdCBXVEY6OkZ1bmN0aW9uPHZvaWQoSUQyRDFSZW5kZXJUYXJnZXQqKT4mIGRy
YXdDb21tYW5kcykKIHsKICAgICBwbGF0Zm9ybUNvbnRleHQubm90aWZ5UHJlRHJhd09ic2VydmVy
KCk7CiAKLSAgICBhdXRvIGNvbnRleHQgPSBwbGF0Zm9ybUNvbnRleHQucmVuZGVyVGFyZ2V0KCk7
CisgICAgYXV0byogY29udGV4dCA9IHBsYXRmb3JtQ29udGV4dC5yZW5kZXJUYXJnZXQoKTsKKwor
ICAgIEZsb2F0U2l6ZSByZW5kZXJUYXJnZXRTaXplID0gY29udGV4dC0+R2V0U2l6ZSgpOworICAg
IGNvbnN0IEZsb2F0UmVjdCBjb250ZXh0UmVjdChGbG9hdFBvaW50KCksIHJlbmRlclRhcmdldFNp
emUpOworICAgIEZsb2F0UmVjdCB3b3JraW5nQ29udGV4dFJlY3QoY29udGV4dFJlY3QpOworCisg
ICAgaWYgKGJvdW5kaW5nUmVjdC5pc0luZmluaXRlKCkpCisgICAgICAgIGJvdW5kaW5nUmVjdCA9
IHdvcmtpbmdDb250ZXh0UmVjdDsKKworICAgIGlmICghY29udGV4dFJlY3QuY29udGFpbnMoYm91
bmRpbmdSZWN0KSkKKyAgICAgICAgd29ya2luZ0NvbnRleHRSZWN0LnVuaXRlKGJvdW5kaW5nUmVj
dCk7CisKKyAgICB3b3JraW5nQ29udGV4dFJlY3QuZXhwYW5kKHN0ZDo6YWJzKHNoYWRvd1N0YXRl
Lm9mZnNldC53aWR0aCgpKSArIHNoYWRvd1N0YXRlLmJsdXIsIHN0ZDo6YWJzKHNoYWRvd1N0YXRl
Lm9mZnNldC5oZWlnaHQoKSkgKyBzaGFkb3dTdGF0ZS5ibHVyKTsKKworICAgIGF1dG8gc2NhbGVG
YWN0b3IgPSBiaXRtYXBSZXNvbHV0aW9uKGNvbnRleHQpOworCisgICAgd29ya2luZ0NvbnRleHRS
ZWN0LnNjYWxlKHNjYWxlRmFjdG9yKTsKKworICAgIEludFNpemUgcGl4ZWxEaW1lbnNpb25zKGNs
YW1wVG88aW50Pih3b3JraW5nQ29udGV4dFJlY3Qud2lkdGgoKSksIGNsYW1wVG88aW50Pih3b3Jr
aW5nQ29udGV4dFJlY3QuaGVpZ2h0KCkpKTsKIAogICAgIC8vIFJlbmRlciB0aGUgY3VycmVudCBn
ZW9tZXRyeSB0byBhIGJpdG1hcCBjb250ZXh0Ci0gICAgQ09NUHRyPElEMkQxQml0bWFwUmVuZGVy
VGFyZ2V0PiBiaXRtYXBUYXJnZXQgPSBjcmVhdGVCaXRtYXBSZW5kZXJUYXJnZXQoY29udGV4dCk7
CisgICAgQ09NUHRyPElEMkQxQml0bWFwUmVuZGVyVGFyZ2V0PiBiaXRtYXBUYXJnZXQgPSBjcmVh
dGVCaXRtYXBSZW5kZXJUYXJnZXRPZlNpemUocGl4ZWxEaW1lbnNpb25zLCBjb250ZXh0KTsKKwor
ICAgIEQyRDFfTUFUUklYXzNYMl9GIGN1cnJlbnRUcmFuc2Zvcm07CisgICAgYml0bWFwVGFyZ2V0
LT5HZXRUcmFuc2Zvcm0oJmN1cnJlbnRUcmFuc2Zvcm0pOworCisgICAgaWYgKCFjb250ZXh0UmVj
dC5jb250YWlucyhib3VuZGluZ1JlY3QubG9jYXRpb24oKSkpIHsKKyAgICAgICAgYXV0byB0cmFu
c2xhdGlvbiA9IEQyRDE6Ok1hdHJpeDN4MkY6OlRyYW5zbGF0aW9uKC1ib3VuZGluZ1JlY3QubG9j
YXRpb24oKS54KCksIC1ib3VuZGluZ1JlY3QubG9jYXRpb24oKS55KCkpOworICAgICAgICBiaXRt
YXBUYXJnZXQtPlNldFRyYW5zZm9ybSh0cmFuc2xhdGlvbiAqIGN1cnJlbnRUcmFuc2Zvcm0pOwor
ICAgIH0KIAogICAgIGJpdG1hcFRhcmdldC0+QmVnaW5EcmF3KCk7CiAgICAgZHJhd0NvbW1hbmRz
KGJpdG1hcFRhcmdldC5nZXQoKSk7CiAgICAgSFJFU1VMVCBociA9IGJpdG1hcFRhcmdldC0+RW5k
RHJhdygpOwogICAgIFJFTEVBU0VfQVNTRVJUKFNVQ0NFRURFRChocikpOwogCi0gICAgQ09NUHRy
PElEMkQxQml0bWFwPiBiaXRtYXA7Ci0gICAgaHIgPSBiaXRtYXBUYXJnZXQtPkdldEJpdG1hcCgm
Yml0bWFwKTsKLSAgICBSRUxFQVNFX0FTU0VSVChTVUNDRUVERUQoaHIpKTsKKyAgICBiaXRtYXBU
YXJnZXQtPlNldFRyYW5zZm9ybShjdXJyZW50VHJhbnNmb3JtKTsKIAotICAgIGRyYXdXaXRoU2hh
ZG93SGVscGVyKGNvbnRleHQsIGJpdG1hcC5nZXQoKSwgc2hhZG93U3RhdGUuY29sb3IsIHNoYWRv
d1N0YXRlLm9mZnNldCwgc2hhZG93U3RhdGUuYmx1cik7CisgICAgZHJhd1dpdGhTaGFkb3dIZWxw
ZXIoY29udGV4dCwgYml0bWFwVGFyZ2V0LmdldCgpLCBib3VuZGluZ1JlY3QsIHNoYWRvd1N0YXRl
LmNvbG9yLCBzaGFkb3dTdGF0ZS5vZmZzZXQsIHNoYWRvd1N0YXRlLmJsdXIpOwogICAgIHBsYXRm
b3JtQ29udGV4dC5ub3RpZnlQb3N0RHJhd09ic2VydmVyKCk7CiB9CiAKQEAgLTEwOTksMTUgKzEx
NjYsMTUgQEAgdm9pZCBlbmRUcmFuc3BhcmVuY3lMYXllcihQbGF0Zm9ybUNvbnRleAogICAgIEhS
RVNVTFQgaHIgPSByZW5kZXJUYXJnZXQtPkVuZERyYXcoKTsKICAgICBSRUxFQVNFX0FTU0VSVChT
VUNDRUVERUQoaHIpKTsKIAotICAgIENPTVB0cjxJRDJEMUJpdG1hcD4gYml0bWFwOwotICAgIGhy
ID0gcmVuZGVyVGFyZ2V0LT5HZXRCaXRtYXAoJmJpdG1hcCk7Ci0gICAgUkVMRUFTRV9BU1NFUlQo
U1VDQ0VFREVEKGhyKSk7Ci0KICAgICBhdXRvIGNvbnRleHQgPSBwbGF0Zm9ybUNvbnRleHQucmVu
ZGVyVGFyZ2V0KCk7CiAKICAgICBpZiAoY3VycmVudExheWVyLmhhc1NoYWRvdykKLSAgICAgICAg
ZHJhd1dpdGhTaGFkb3dIZWxwZXIoY29udGV4dCwgYml0bWFwLmdldCgpLCBjdXJyZW50TGF5ZXIu
c2hhZG93Q29sb3IsIGN1cnJlbnRMYXllci5zaGFkb3dPZmZzZXQsIGN1cnJlbnRMYXllci5zaGFk
b3dCbHVyKTsKKyAgICAgICAgZHJhd1dpdGhTaGFkb3dIZWxwZXIoY29udGV4dCwgcmVuZGVyVGFy
Z2V0LmdldCgpLCBGbG9hdFJlY3QoKSwgY3VycmVudExheWVyLnNoYWRvd0NvbG9yLCBjdXJyZW50
TGF5ZXIuc2hhZG93T2Zmc2V0LCBjdXJyZW50TGF5ZXIuc2hhZG93Qmx1cik7CiAgICAgZWxzZSB7
CisgICAgICAgIENPTVB0cjxJRDJEMUJpdG1hcD4gYml0bWFwOworICAgICAgICBociA9IHJlbmRl
clRhcmdldC0+R2V0Qml0bWFwKCZiaXRtYXApOworICAgICAgICBSRUxFQVNFX0FTU0VSVChTVUND
RUVERUQoaHIpKTsKKwogICAgICAgICBDT01QdHI8SUQyRDFCaXRtYXBCcnVzaD4gYml0bWFwQnJ1
c2g7CiAgICAgICAgIGF1dG8gYml0bWFwQnJ1c2hQcm9wZXJ0aWVzID0gRDJEMTo6Qml0bWFwQnJ1
c2hQcm9wZXJ0aWVzKCk7CiAgICAgICAgIGF1dG8gYnJ1c2hQcm9wZXJ0aWVzID0gRDJEMTo6QnJ1
c2hQcm9wZXJ0aWVzKCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93
aW4vRGlyZWN0MkRPcGVyYXRpb25zLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3Mvd2luL0RpcmVjdDJET3BlcmF0aW9ucy5oCShyZXZpc2lvbiAyNTAyMzcp
CisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vRGlyZWN0MkRPcGVyYXRp
b25zLmgJKHdvcmtpbmcgY29weSkKQEAgLTEzMyw5ICsxMzMsOCBAQCB2b2lkIGRyYXdOYXRpdmVJ
bWFnZShQbGF0Zm9ybUNvbnRleHREaXJlCiB2b2lkIGRyYXdQYXRoKFBsYXRmb3JtQ29udGV4dERp
cmVjdDJEJiwgY29uc3QgUGF0aCYsIGNvbnN0IFN0cm9rZVNvdXJjZSYsIGNvbnN0IFNoYWRvd1N0
YXRlJik7CiB2b2lkIGRyYXdQYXR0ZXJuKFBsYXRmb3JtQ29udGV4dERpcmVjdDJEJiwgQ09NUHRy
PElEMkQxQml0bWFwPiYmLCBjb25zdCBJbnRTaXplJiwgY29uc3QgRmxvYXRSZWN0JiwgY29uc3Qg
RmxvYXRSZWN0JiwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiwgY29uc3QgRmxvYXRQb2ludCYsIENv
bXBvc2l0ZU9wZXJhdG9yLCBCbGVuZE1vZGUpOwogCi12b2lkIGRyYXdXaXRob3V0U2hhZG93KFBs
YXRmb3JtQ29udGV4dERpcmVjdDJEJiwgY29uc3QgRmxvYXRSZWN0JiBib3VuZGluZ1JlY3QsIGNv
bnN0IFdURjo6RnVuY3Rpb248dm9pZChJRDJEMVJlbmRlclRhcmdldCopPiYgZHJhd0NvbW1hbmRz
KTsKLXZvaWQgZHJhd1dpdGhTaGFkb3coUGxhdGZvcm1Db250ZXh0RGlyZWN0MkQmLCBjb25zdCBG
bG9hdFJlY3QmIGJvdW5kaW5nUmVjdCwgY29uc3QgU2hhZG93U3RhdGUmLCBjb25zdCBXVEY6OkZ1
bmN0aW9uPHZvaWQoSUQyRDFSZW5kZXJUYXJnZXQqKT4mIGRyYXdDb21tYW5kcyk7Ci12b2lkIGRy
YXdXaXRoU2hhZG93SGVscGVyKElEMkQxUmVuZGVyVGFyZ2V0KiBjb250ZXh0LCBJRDJEMUJpdG1h
cCosIGNvbnN0IENvbG9yJiBzaGFkb3dDb2xvciwgY29uc3QgRmxvYXRTaXplJiBzaGFkb3dPZmZz
ZXQsIGZsb2F0IHNoYWRvd0JsdXIpOwordm9pZCBkcmF3V2l0aG91dFNoYWRvdyhQbGF0Zm9ybUNv
bnRleHREaXJlY3QyRCYsIGNvbnN0IEZsb2F0UmVjdCYgaWdub3JlZCwgY29uc3QgV1RGOjpGdW5j
dGlvbjx2b2lkKElEMkQxUmVuZGVyVGFyZ2V0Kik+JiBkcmF3Q29tbWFuZHMpOwordm9pZCBkcmF3
V2l0aFNoYWRvdyhQbGF0Zm9ybUNvbnRleHREaXJlY3QyRCYsIEZsb2F0UmVjdCBib3VuZGluZ1Jl
Y3QsIGNvbnN0IFNoYWRvd1N0YXRlJiwgY29uc3QgV1RGOjpGdW5jdGlvbjx2b2lkKElEMkQxUmVu
ZGVyVGFyZ2V0Kik+JiBkcmF3Q29tbWFuZHMpOwogCiB2b2lkIGRyYXdSZWN0KFBsYXRmb3JtQ29u
dGV4dERpcmVjdDJEJiwgY29uc3QgRmxvYXRSZWN0JiwgZmxvYXQsIGNvbnN0IENvbG9yJiwgU3Ry
b2tlU3R5bGUsIGNvbnN0IENvbG9yJik7CiB2b2lkIGRyYXdMaW5lKFBsYXRmb3JtQ29udGV4dERp
cmVjdDJEJiwgY29uc3QgRmxvYXRQb2ludCYsIGNvbnN0IEZsb2F0UG9pbnQmLCBTdHJva2VTdHls
ZSwgY29uc3QgQ29sb3ImLCBmbG9hdCwgYm9vbCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy93aW4vRGlyZWN0MkRVdGlsaXRpZXMuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9EaXJlY3QyRFV0aWxpdGllcy5jcHAJ
KHJldmlzaW9uIDI1MDIzNykKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dp
bi9EaXJlY3QyRFV0aWxpdGllcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY1LDcgKzY1LDcgQEAg
RmxvYXRTaXplIGJpdG1hcFNpemUoSUQyRDFCaXRtYXAqIGJpdG1hcAogICAgIHJldHVybiBiaXRt
YXBTb3VyY2UtPkdldFNpemUoKTsKIH0KIAotRmxvYXRQb2ludCBiaXRtYXBSZXNvbHV0aW9uKElX
SUNCaXRtYXBTb3VyY2UqIGJpdG1hcFNvdXJjZSkKK0Zsb2F0U2l6ZSBiaXRtYXBSZXNvbHV0aW9u
KElXSUNCaXRtYXBTb3VyY2UqIGJpdG1hcFNvdXJjZSkKIHsKICAgICBjb25zdGV4cHIgZG91Ymxl
IGRwaUJhc2UgPSA5Ni4wOwogCkBAIC03NCwyNCArNzQsMzYgQEAgRmxvYXRQb2ludCBiaXRtYXBS
ZXNvbHV0aW9uKElXSUNCaXRtYXBTbwogICAgIGlmICghU1VDQ0VFREVEKGhyKSkKICAgICAgICAg
cmV0dXJuIHsgfTsKIAotICAgIEZsb2F0UG9pbnQgcmVzdWx0KGRwaVgsIGRwaVkpOworICAgIEZs
b2F0U2l6ZSByZXN1bHQoZHBpWCwgZHBpWSk7CiAgICAgcmVzdWx0LnNjYWxlKDEuMCAvIGRwaUJh
c2UpOwogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLUZsb2F0UG9pbnQgYml0bWFwUmVzb2x1dGlv
bihJRDJEMUJpdG1hcCogYml0bWFwKQorRmxvYXRTaXplIGJpdG1hcFJlc29sdXRpb24oSUQyRDFC
aXRtYXAqIGJpdG1hcCkKIHsKICAgICBjb25zdGV4cHIgZG91YmxlIGRwaUJhc2UgPSA5Ni4wOwog
CiAgICAgZmxvYXQgZHBpWCwgZHBpWTsKICAgICBiaXRtYXAtPkdldERwaSgmZHBpWCwgJmRwaVkp
OwogCi0gICAgRmxvYXRQb2ludCByZXN1bHQoZHBpWCwgZHBpWSk7CisgICAgRmxvYXRTaXplIHJl
c3VsdChkcGlYLCBkcGlZKTsKICAgICByZXN1bHQuc2NhbGUoMS4wIC8gZHBpQmFzZSk7CiAgICAg
cmV0dXJuIHJlc3VsdDsKIAogfQogCitGbG9hdFNpemUgYml0bWFwUmVzb2x1dGlvbihJRDJEMVJl
bmRlclRhcmdldCogdGFyZ2V0KQoreworICAgIGNvbnN0ZXhwciBkb3VibGUgZHBpQmFzZSA9IDk2
LjA7CisKKyAgICBmbG9hdCBkcGlYLCBkcGlZOworICAgIHRhcmdldC0+R2V0RHBpKCZkcGlYLCAm
ZHBpWSk7CisKKyAgICBGbG9hdFNpemUgcmVzdWx0KGRwaVgsIGRwaVkpOworICAgIHJlc3VsdC5z
Y2FsZSgxLjAgLyBkcGlCYXNlKTsKKyAgICByZXR1cm4gcmVzdWx0OworCit9CiB1bnNpZ25lZCBi
aXRzUGVyUGl4ZWwoR1VJRCBiaXRtYXBGb3JtYXQpCiB7CiAgICAgQ09NUHRyPElXSUNDb21wb25l
bnRJbmZvPiBjb21wb25lbnRJbmZvOwpAQCAtNDcyLDYgKzQ4NCwzNCBAQCBDT01QdHI8SURYR0lT
d2FwQ2hhaW4+IHN3YXBDaGFpbk9mU2l6ZUZvCiAgICAgcmV0dXJuIHN3YXBDaGFpbjsKIH0KIAor
Q09NUHRyPElEMkQxQml0bWFwPiBjcmVhdGVCaXRtYXBDb3B5RnJvbUNvbnRleHQoSUQyRDFSZW5k
ZXJUYXJnZXQqIHJlbmRlclRhcmdldCkKK3sKKyAgICBDT01QdHI8SUQyRDFCaXRtYXBSZW5kZXJU
YXJnZXQ+IGJpdG1hcFRhcmdldChRdWVyeSwgcmVuZGVyVGFyZ2V0KTsKKyAgICBpZiAoIWJpdG1h
cFRhcmdldCkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICBDT01QdHI8SUQyRDFCaXRt
YXA+IGN1cnJlbnRDYW52YXM7CisgICAgSFJFU1VMVCBociA9IGJpdG1hcFRhcmdldC0+R2V0Qml0
bWFwKCZjdXJyZW50Q2FudmFzKTsKKyAgICBpZiAoIVNVQ0NFRURFRChocikpCisgICAgICAgIHJl
dHVybiBudWxscHRyOworCisgICAgYXV0byBiaXRtYXBDcmVhdGVQcm9wZXJ0aWVzID0gYml0bWFw
UHJvcGVydGllcygpOworCisgICAgQ09NUHRyPElEMkQxQml0bWFwPiBiaXRtYXA7CisgICAgRDJE
MV9TSVpFX1UgYml0bWFwU2l6ZSA9IGN1cnJlbnRDYW52YXMtPkdldFBpeGVsU2l6ZSgpOworICAg
IGhyID0gcmVuZGVyVGFyZ2V0LT5DcmVhdGVCaXRtYXAoYml0bWFwU2l6ZSwgYml0bWFwQ3JlYXRl
UHJvcGVydGllcywgJmJpdG1hcCk7CisgICAgaWYgKCFTVUNDRUVERUQoaHIpKQorICAgICAgICBy
ZXR1cm4gbnVsbHB0cjsKKworICAgIGF1dG8gdGFyZ2V0UG9zID0gRDJEMTo6UG9pbnQyVSgpOwor
ICAgIEQyRDFfUkVDVF9VIGRhdGFSZWN0ID0gRDJEMTo6UmVjdFUoMCwgMCwgYml0bWFwU2l6ZS53
aWR0aCwgYml0bWFwU2l6ZS5oZWlnaHQpOworICAgIGhyID0gYml0bWFwLT5Db3B5RnJvbUJpdG1h
cCgmdGFyZ2V0UG9zLCBjdXJyZW50Q2FudmFzLmdldCgpLCAmZGF0YVJlY3QpOworICAgIGlmICgh
U1VDQ0VFREVEKGhyKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgcmV0dXJuIGJpdG1h
cDsKK30KKwogfSAvLyBuYW1lc3BhY2UgRGlyZWN0MkQKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29y
ZQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0RpcmVjdDJEVXRp
bGl0aWVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
d2luL0RpcmVjdDJEVXRpbGl0aWVzLmgJKHJldmlzaW9uIDI1MDIzNykKKysrIFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9EaXJlY3QyRFV0aWxpdGllcy5oCSh3b3JraW5nIGNv
cHkpCkBAIC03Miw4ICs3Miw5IEBAIHZvaWQgaW5QbGFjZVN3aXp6bGUodWludDhfdCogYnl0ZURh
dGEsIHUKIAogSW50U2l6ZSBiaXRtYXBTaXplKElXSUNCaXRtYXBTb3VyY2UqKTsKIEZsb2F0U2l6
ZSBiaXRtYXBTaXplKElEMkQxQml0bWFwKik7Ci1GbG9hdFBvaW50IGJpdG1hcFJlc29sdXRpb24o
SVdJQ0JpdG1hcFNvdXJjZSopOwotRmxvYXRQb2ludCBiaXRtYXBSZXNvbHV0aW9uKElEMkQxQml0
bWFwKik7CitGbG9hdFNpemUgYml0bWFwUmVzb2x1dGlvbihJV0lDQml0bWFwU291cmNlKik7CitG
bG9hdFNpemUgYml0bWFwUmVzb2x1dGlvbihJRDJEMUJpdG1hcCopOworRmxvYXRTaXplIGJpdG1h
cFJlc29sdXRpb24oSUQyRDFSZW5kZXJUYXJnZXQqKTsKIHVuc2lnbmVkIGJpdHNQZXJQaXhlbChH
VUlEKTsKIENPTVB0cjxJRDJEMUJpdG1hcD4gY3JlYXRlQml0bWFwKElEMkQxUmVuZGVyVGFyZ2V0
KiwgY29uc3QgSW50U2l6ZSYpOwogQ09NUHRyPElXSUNCaXRtYXA+IGNyZWF0ZVdpY0JpdG1hcChj
b25zdCBJbnRTaXplJik7CkBAIC04NCw2ICs4NSw3IEBAIENPTVB0cjxJRDJEMUJpdG1hcFJlbmRl
clRhcmdldD4gY3JlYXRlQmkKIENPTVB0cjxJRDJEMURDUmVuZGVyVGFyZ2V0PiBjcmVhdGVHRElS
ZW5kZXJUYXJnZXQoKTsKIENPTVB0cjxJRFhHSVN1cmZhY2UxPiBjcmVhdGVEWEdJU3VyZmFjZU9m
U2l6ZShjb25zdCBJbnRTaXplJiwgSUQzRDExRGV2aWNlMSosIGJvb2wgY3Jvc3NQcm9jZXNzKTsK
IENPTVB0cjxJRDJEMVJlbmRlclRhcmdldD4gY3JlYXRlU3VyZmFjZVJlbmRlclRhcmdldChJRFhH
SVN1cmZhY2UxKik7CitDT01QdHI8SUQyRDFCaXRtYXA+IGNyZWF0ZUJpdG1hcENvcHlGcm9tQ29u
dGV4dChJRDJEMVJlbmRlclRhcmdldCopOwogCiB2b2lkIGNvcHlSZWN0RnJvbU9uZVN1cmZhY2VU
b0Fub3RoZXIoSUQyRDFCaXRtYXAqIGZyb20sIElEMkQxQml0bWFwKiB0bywgY29uc3QgSW50U2l6
ZSYgc291cmNlT2Zmc2V0LCBjb25zdCBJbnRSZWN0JiwgY29uc3QgSW50U2l6ZSYgZGVzdE9mZnNl
dCA9IEludFNpemUoKSk7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L3dpbi9HcmFkaWVudERpcmVjdDJELmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy93aW4vR3JhZGllbnREaXJlY3QyRC5jcHAJKHJldmlzaW9uIDI1MDIz
NykKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9HcmFkaWVudERpcmVj
dDJELmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzAsNiArMzAsNyBAQAogI2luY2x1ZGUgIkdyYXBo
aWNzQ29udGV4dC5oIgogI2luY2x1ZGUgIlBsYXRmb3JtQ29udGV4dERpcmVjdDJELmgiCiAjaW5j
bHVkZSA8ZDJkMS5oPgorI2luY2x1ZGUgPHd0Zi9NYXRoRXh0cmFzLmg+CiAjaW5jbHVkZSA8d3Rm
L1JldGFpblB0ci5oPgogCiAjZGVmaW5lIEdSQURJRU5UX0RSQVdJTkcgMwpAQCAtNzAsNiArNzEs
MzUgQEAgdm9pZCBHcmFkaWVudDo6Z2VuZXJhdGVHcmFkaWVudChJRDJEMVJlbgogICAgICAgICBn
cmFkaWVudFN0b3BzLmFwcGVuZChEMkQxOjpHcmFkaWVudFN0b3Aoc3RvcC5vZmZzZXQsIEQyRDE6
OkNvbG9yRihyLCBnLCBiLCBhKSkpOwogICAgIH0KIAorICAgIFdURjo6c3dpdGNoT24obV9kYXRh
LAorICAgICAgICBbJl0gKGNvbnN0IExpbmVhckRhdGEmKSB7CisgICAgICAgICAgICAvLyBObyBh
Y3Rpb24gbmVlZGVkLgorICAgICAgICB9LAorICAgICAgICBbJl0gKGNvbnN0IFJhZGlhbERhdGEm
IGRhdGEpIHsKKyAgICAgICAgICAgIGlmIChkYXRhLnN0YXJ0UmFkaXVzICYmIGRhdGEuZW5kUmFk
aXVzKSB7CisgICAgICAgICAgICAgICAgZmxvYXQgc3RhcnRQb3NpdGlvbiA9IHN0ZDo6YWJzKGRh
dGEuc3RhcnRSYWRpdXMgLyBkYXRhLmVuZFJhZGl1cyk7CisgICAgICAgICAgICAgICAgaWYgKHN0
YXJ0UG9zaXRpb24gPiAxLjApCisgICAgICAgICAgICAgICAgICAgIHN0YXJ0UG9zaXRpb24gPSAx
LjAgLyBzdGFydFBvc2l0aW9uOworICAgICAgICAgICAgICAgIGZsb2F0IGF2YWlsYWJsZVJhbmdl
ID0gMS4wIC0gc3RhcnRQb3NpdGlvbjsKKyAgICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChh
dmFpbGFibGVSYW5nZSA8PSAxLjAgJiYgYXZhaWxhYmxlUmFuZ2UgPj0gMCk7CisKKyAgICAgICAg
ICAgICAgICBmb3IgKGF1dG8mIHN0b3AgOiBncmFkaWVudFN0b3BzKSB7CisgICAgICAgICAgICAg
ICAgICAgIHN0b3AucG9zaXRpb24gKj0gYXZhaWxhYmxlUmFuZ2U7CisgICAgICAgICAgICAgICAg
ICAgIHN0b3AucG9zaXRpb24gKz0gc3RhcnRQb3NpdGlvbjsKKyAgICAgICAgICAgICAgICB9CisK
KyAgICAgICAgICAgICAgICAvLyBSZXN0b3JlIHRoZSAnc3RhcnQnIHBvc2l0aW9uCisgICAgICAg
ICAgICAgICAgYXV0byBmaXJzdFN0b3AgPSBncmFkaWVudFN0b3BzLmZpcnN0KCk7CisgICAgICAg
ICAgICAgICAgZmlyc3RTdG9wLnBvc2l0aW9uID0gMDsKKworICAgICAgICAgICAgICAgIGdyYWRp
ZW50U3RvcHMuaW5zZXJ0KDAsIGZpcnN0U3RvcCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0s
CisgICAgICAgIFsmXSAoY29uc3QgQ29uaWNEYXRhJikgeworICAgICAgICAgICAgLy8gRklYTUU6
IEFzc2VzcyB3aGV0aGVyIG5lZWRlZCBmb3IgQ29uaWMgR3JhZGllbnRzLgorICAgICAgICB9Cisg
ICAgKTsKKwogICAgIENPTVB0cjxJRDJEMUdyYWRpZW50U3RvcENvbGxlY3Rpb24+IGdyYWRpZW50
U3RvcENvbGxlY3Rpb247CiAgICAgSFJFU1VMVCBociA9IHJlbmRlclRhcmdldC0+Q3JlYXRlR3Jh
ZGllbnRTdG9wQ29sbGVjdGlvbihncmFkaWVudFN0b3BzLmRhdGEoKSwgZ3JhZGllbnRTdG9wcy5z
aXplKCksICZncmFkaWVudFN0b3BDb2xsZWN0aW9uKTsKICAgICBSRUxFQVNFX0FTU0VSVChTVUND
RUVERUQoaHIpKTsKQEAgLTkwLDEyICsxMjAsMTQgQEAgdm9pZCBHcmFkaWVudDo6Z2VuZXJhdGVH
cmFkaWVudChJRDJEMVJlbgogICAgICAgICAgICAgbV9ncmFkaWVudCA9IGxpbmVhckdyYWRpZW50
OwogICAgICAgICB9LAogICAgICAgICBbJl0gKGNvbnN0IFJhZGlhbERhdGEmIGRhdGEpIHsKLSAg
ICAgICAgICAgIEZsb2F0U2l6ZSBvZmZzZXQgPSBkYXRhLnBvaW50MSAtIGRhdGEucG9pbnQwOwot
ICAgICAgICAgICAgSUQyRDFSYWRpYWxHcmFkaWVudEJydXNoKiByYWRpYWxHcmFkaWVudCA9IG51
bGxwdHI7Ci0gICAgICAgICAgICBmbG9hdCByYWRpdXNYID0gZGF0YS5lbmRSYWRpdXMgKyBvZmZz
ZXQud2lkdGgoKTsKKyAgICAgICAgICAgIEZsb2F0U2l6ZSBvZmZzZXQgPSBkYXRhLnBvaW50MCAt
IGRhdGEucG9pbnQxOworICAgICAgICAgICAgRmxvYXRQb2ludCBjZW50ZXIgPSBkYXRhLnBvaW50
MTsKKyAgICAgICAgICAgIGZsb2F0IHJhZGl1c1ggPSBkYXRhLmVuZFJhZGl1czsKICAgICAgICAg
ICAgIGZsb2F0IHJhZGl1c1kgPSByYWRpdXNYIC8gZGF0YS5hc3BlY3RSYXRpbzsKKworICAgICAg
ICAgICAgSUQyRDFSYWRpYWxHcmFkaWVudEJydXNoKiByYWRpYWxHcmFkaWVudCA9IG51bGxwdHI7
CiAgICAgICAgICAgICBociA9IHJlbmRlclRhcmdldC0+Q3JlYXRlUmFkaWFsR3JhZGllbnRCcnVz
aCgKLSAgICAgICAgICAgICAgICBEMkQxOjpSYWRpYWxHcmFkaWVudEJydXNoUHJvcGVydGllcyhk
YXRhLnBvaW50MCwgRDJEMTo6UG9pbnQyRihvZmZzZXQud2lkdGgoKSwgb2Zmc2V0LmhlaWdodCgp
KSwgcmFkaXVzWCwgcmFkaXVzWSksCisgICAgICAgICAgICAgICAgRDJEMTo6UmFkaWFsR3JhZGll
bnRCcnVzaFByb3BlcnRpZXMoY2VudGVyLCBEMkQxOjpQb2ludDJGKG9mZnNldC53aWR0aCgpLCBv
ZmZzZXQuaGVpZ2h0KCkpLCByYWRpdXNYLCByYWRpdXNZKSwKICAgICAgICAgICAgICAgICBEMkQx
OjpCcnVzaFByb3BlcnRpZXMoKSwgZ3JhZGllbnRTdG9wQ29sbGVjdGlvbi5nZXQoKSwKICAgICAg
ICAgICAgICAgICAmcmFkaWFsR3JhZGllbnQpOwogICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQo
U1VDQ0VFREVEKGhyKSk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93
aW4vSW1hZ2VCdWZmZXJEYXRhRGlyZWN0MkQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9JbWFnZUJ1ZmZlckRhdGFEaXJlY3QyRC5jcHAJKHJl
dmlzaW9uIDI1MDIzNykKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9J
bWFnZUJ1ZmZlckRhdGFEaXJlY3QyRC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMwNCw3ICszMDQs
NyBAQCBib29sIEltYWdlQnVmZmVyRGF0YTo6cmVhZERhdGFGcm9tQml0bWFwCiAKICAgICBjb250
ZXh0LT5lbmREcmF3KCk7CiAKLSAgICBDT01QdHI8SUQyRDFEZXZpY2VDb250ZXh0PiBkMmREZXZp
Y2VDb250ZXh0KFF1ZXJ5LCBwbGF0Zm9ybUNvbnRleHQtPnJlbmRlclRhcmdldCgpKTsKKyAgICBD
T01QdHI8SUQyRDFEZXZpY2VDb250ZXh0PiBkMmREZXZpY2VDb250ZXh0ID0gcGxhdGZvcm1Db250
ZXh0LT5kZXZpY2VDb250ZXh0KCk7CiAgICAgQVNTRVJUKCEhZDJkRGV2aWNlQ29udGV4dCk7CiAK
ICAgICBhdXRvIGJ5dGVzUGVyUm93SW5EYXRhID0gcGl4ZWxTaXplLndpZHRoKCkgKiA0OwpAQCAt
NTA2LDE2ICs1MDYsMTMgQEAgQ09NUHRyPElEMkQxQml0bWFwPiBJbWFnZUJ1ZmZlckRhdGE6OmNv
bQogICAgIC8vIFdlIGNhbm5vdCBhY2Nlc3MgdGhlIGRhdGEgYmFja2luZyBhbiBJV0lDQml0bWFw
IHdoaWxlIGFuIGFjdGl2ZSBkcmF3IHNlc3Npb24gaXMgb3Blbi4KICAgICBjb250ZXh0LT5lbmRE
cmF3KCk7CiAKLSAgICBDT01QdHI8SUQyRDFEZXZpY2VDb250ZXh0PiBzb3VyY2VEZXZpY2VDb250
ZXh0OwotICAgIEhSRVNVTFQgaHIgPSBwbGF0Zm9ybUNvbnRleHQtPnJlbmRlclRhcmdldCgpLT5R
dWVyeUludGVyZmFjZShfX3V1aWRvZihJRDJEMURldmljZUNvbnRleHQpLCByZWludGVycHJldF9j
YXN0PHZvaWQqKj4oJnNvdXJjZURldmljZUNvbnRleHQpKTsKLSAgICBBU1NFUlQoU1VDQ0VFREVE
KGhyKSk7Ci0KKyAgICBDT01QdHI8SUQyRDFEZXZpY2VDb250ZXh0PiBzb3VyY2VEZXZpY2VDb250
ZXh0ID0gcGxhdGZvcm1Db250ZXh0LT5kZXZpY2VDb250ZXh0KCk7CiAgICAgaWYgKCFzb3VyY2VE
ZXZpY2VDb250ZXh0KQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAogICAgIENPTVB0cjxJRDJE
MUJpdG1hcDE+IHNvdXJjZUNQVUJpdG1hcDsKICAgICBEMkQxX0JJVE1BUF9QUk9QRVJUSUVTMSBi
aXRtYXBQcm9wZXJ0aWVzID0gRDJEMTo6Qml0bWFwUHJvcGVydGllczEoRDJEMV9CSVRNQVBfT1BU
SU9OU19DUFVfUkVBRCB8IEQyRDFfQklUTUFQX09QVElPTlNfQ0FOTk9UX0RSQVcsIERpcmVjdDJE
OjpwaXhlbEZvcm1hdCgpKTsKLSAgICBociA9IHNvdXJjZURldmljZUNvbnRleHQtPkNyZWF0ZUJp
dG1hcChiaXRtYXAtPkdldFBpeGVsU2l6ZSgpLCBudWxscHRyLCBieXRlc1BlclJvdy51bnNhZmVH
ZXQoKSwgYml0bWFwUHJvcGVydGllcywgJnNvdXJjZUNQVUJpdG1hcCk7CisgICAgSFJFU1VMVCBo
ciA9IHNvdXJjZURldmljZUNvbnRleHQtPkNyZWF0ZUJpdG1hcChiaXRtYXAtPkdldFBpeGVsU2l6
ZSgpLCBudWxscHRyLCBieXRlc1BlclJvdy51bnNhZmVHZXQoKSwgYml0bWFwUHJvcGVydGllcywg
JnNvdXJjZUNQVUJpdG1hcCk7CiAgICAgaWYgKCFTVUNDRUVERUQoaHIpKQogICAgICAgICByZXR1
cm4gbnVsbHB0cjsKIApJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2lu
L1BhdGhEaXJlY3QyRC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3Mvd2luL1BhdGhEaXJlY3QyRC5jcHAJKHJldmlzaW9uIDI1MDIzNykKKysrIFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9QYXRoRGlyZWN0MkQuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0zMjcsNiArMzI3LDIyIEBAIEZsb2F0UmVjdCBQYXRoOjpmYXN0Qm91bmRpbmdS
ZWN0KCkgY29uc3QKICAgICByZXR1cm4gYm91bmRzOwogfQogCitGbG9hdFJlY3QgUGF0aDo6ZmFz
dEJvdW5kaW5nUmVjdEZvclN0cm9rZShjb25zdCBQbGF0Zm9ybUNvbnRleHREaXJlY3QyRCYgcGxh
dGZvcm1Db250ZXh0KSBjb25zdAoreworICAgIGlmIChpc051bGwoKSkKKyAgICAgICAgcmV0dXJu
IEZsb2F0UmVjdCgpOworCisgICAgZmxvYXQgdG9sZXJhbmNlID0gMTAuMDsKKworICAgIGF1dG8q
IHN0cm9rZVN0eWxlID0gY29uc3RfY2FzdDxQbGF0Zm9ybUNvbnRleHREaXJlY3QyRCY+KHBsYXRm
b3JtQ29udGV4dCkuc3Ryb2tlU3R5bGUoKTsKKworICAgIEQyRDFfUkVDVF9GIGJvdW5kcyA9IHsg
fTsKKyAgICBpZiAoIVNVQ0NFRURFRChtX3BhdGgtPkdldFdpZGVuZWRCb3VuZHMocGxhdGZvcm1D
b250ZXh0LnN0cm9rZVRoaWNrbmVzcygpLCBzdHJva2VTdHlsZSwgbnVsbHB0ciwgdG9sZXJhbmNl
LCAmYm91bmRzKSkpCisgICAgICAgIHJldHVybiBGbG9hdFJlY3QoKTsKKworICAgIHJldHVybiBi
b3VuZHM7Cit9CisKIEZsb2F0UmVjdCBQYXRoOjpzdHJva2VCb3VuZGluZ1JlY3QoU3Ryb2tlU3R5
bGVBcHBsaWVyKiBhcHBsaWVyKSBjb25zdAogewogICAgIGlmIChpc051bGwoKSkKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9QbGF0Zm9ybUNvbnRleHREaXJlY3Qy
RC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2lu
L1BsYXRmb3JtQ29udGV4dERpcmVjdDJELmNwcAkocmV2aXNpb24gMjUwMjM3KQorKysgU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL1BsYXRmb3JtQ29udGV4dERpcmVjdDJELmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMjksNiArMjksNyBAQAogI2lmIFVTRShESVJFQ1QyRCkKIAog
I2luY2x1ZGUgIkRpcmVjdDJET3BlcmF0aW9ucy5oIgorI2luY2x1ZGUgIkRpcmVjdDJEVXRpbGl0
aWVzLmgiCiAjaW5jbHVkZSA8ZDJkMS5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkBAIC01MSw2
ICs1MiwxNyBAQCBQbGF0Zm9ybUNvbnRleHREaXJlY3QyRDo6UGxhdGZvcm1Db250ZXh0CiB7CiAg
ICAgbV9zdGF0ZVN0YWNrLmFwcGVuZChTdGF0ZSgpKTsKICAgICBtX3N0YXRlID0gJm1fc3RhdGVT
dGFjay5sYXN0KCk7CisKKyAgICBIUkVTVUxUIGhyID0gbV9yZW5kZXJUYXJnZXQtPlF1ZXJ5SW50
ZXJmYWNlKF9fdXVpZG9mKElEMkQxRGV2aWNlQ29udGV4dCksIHJlaW50ZXJwcmV0X2Nhc3Q8dm9p
ZCoqPigmbV9kZXZpY2VDb250ZXh0KSk7CisgICAgUkVMRUFTRV9BU1NFUlQoU1VDQ0VFREVEKGhy
KSk7Cit9CisKK3ZvaWQgUGxhdGZvcm1Db250ZXh0RGlyZWN0MkQ6OnNldFJlbmRlclRhcmdldChJ
RDJEMVJlbmRlclRhcmdldCogcmVuZGVyVGFyZ2V0KQoreworICAgIG1fcmVuZGVyVGFyZ2V0ID0g
cmVuZGVyVGFyZ2V0OworCisgICAgSFJFU1VMVCBociA9IG1fcmVuZGVyVGFyZ2V0LT5RdWVyeUlu
dGVyZmFjZShfX3V1aWRvZihJRDJEMURldmljZUNvbnRleHQpLCByZWludGVycHJldF9jYXN0PHZv
aWQqKj4oJm1fZGV2aWNlQ29udGV4dCkpOworICAgIFJFTEVBU0VfQVNTRVJUKFNVQ0NFRURFRCho
cikpOwogfQogCiBJRDJEMUxheWVyKiBQbGF0Zm9ybUNvbnRleHREaXJlY3QyRDo6Y2xpcExheWVy
KCkgY29uc3QKQEAgLTc0LDEwICs4Niw3IEBAIHZvaWQgUGxhdGZvcm1Db250ZXh0RGlyZWN0MkQ6
OnJlc3RvcmUoKQogewogICAgIEFTU0VSVChtX3JlbmRlclRhcmdldCk7CiAKLSAgICAvLyBUaGVy
ZSBzaG91bGQgYWx3YXlzIGJlIGF0IGxlYXN0IG9uZSBtYW51YWxseSBzYXZlZCBzdGF0ZSBpZiBh
IHJlc3RvcmUgaXMgYmVpbmcgY2FsbGVkLgotICAgIEFTU0VSVChtX3N0YXRlU3RhY2suc2l6ZSgp
ID4gMSk7Ci0KLSAgICAvLyBDYW4ndCByZXN0b3JlIGlmIHdlIG5ldmVyIGNhbGxlZCBzYXZlLgor
ICAgIC8vIE5vIG5lZWQgdG8gcmVzdG9yZSBpZiB3ZSBkb24ndCBoYXZlIGEgc2F2ZWQgZWxlbWVu
dCBvbiB0aGUgc3RhY2suCiAgICAgaWYgKG1fc3RhdGVTdGFjay5zaXplKCkgPT0gMSkKICAgICAg
ICAgcmV0dXJuOwogCkBAIC0yNzgsNyArMjg3LDcgQEAgdm9pZCBQbGF0Zm9ybUNvbnRleHREaXJl
Y3QyRDo6ZW5kRHJhdygpCiB7CiAgICAgQVNTRVJUKG1fcmVuZGVyVGFyZ2V0KTsKIAotICAgIHdo
aWxlIChtX3N0YXRlU3RhY2suc2l6ZSgpID4gMSkKKyAgICBpZiAobV9zdGF0ZVN0YWNrLnNpemUo
KSA+IDEpCiAgICAgICAgIHJlc3RvcmUoKTsKIAogICAgIGNsZWFyQ2xpcHMobV9zdGF0ZS0+bV9j
bGlwcyk7CkBAIC0yOTIsNiArMzAxLDggQEAgdm9pZCBQbGF0Zm9ybUNvbnRleHREaXJlY3QyRDo6
ZW5kRHJhdygpCiAgICAgICAgIFdURkxvZ0Fsd2F5cygiRmFpbGVkIGluIFBsYXRmb3JtQ29udGV4
dERpcmVjdDJEOjplbmREcmF3OiBocj0leGQsIGZpcnN0PSVsZCwgc2Vjb25kPSVsZCIsIGhyLCBm
aXJzdCwgc2Vjb25kKTsKIAogICAgIC0tYmVnaW5EcmF3Q291bnQ7CisKKyAgICBjb21wb3NpdGVJ
Zk5lZWRlZCgpOwogfQogCiB2b2lkIFBsYXRmb3JtQ29udGV4dERpcmVjdDJEOjpzZXRUYWdzKEQy
RDFfVEFHIHRhZzEsIEQyRDFfVEFHIHRhZzIpCkBAIC0zMTksNiArMzMwLDcwIEBAIHZvaWQgUGxh
dGZvcm1Db250ZXh0RGlyZWN0MkQ6OnB1c2hDbGlwKEQKICAgICBtX3N0YXRlLT5tX2NsaXBzLmFw
cGVuZChjbGlwVHlwZSk7CiB9CiAKK3ZvaWQgUGxhdGZvcm1Db250ZXh0RGlyZWN0MkQ6OmNvbXBv
c2l0ZUlmTmVlZGVkKCkKK3sKKyAgICBpZiAoIW1fY29tcG9zaXRlU291cmNlKQorICAgICAgICBy
ZXR1cm47CisKKyAgICBDT01QdHI8SUQyRDFCaXRtYXBSZW5kZXJUYXJnZXQ+IGJpdG1hcFRhcmdl
dChRdWVyeSwgbV9yZW5kZXJUYXJnZXQuZ2V0KCkpOworICAgIGlmICghYml0bWFwVGFyZ2V0KQor
ICAgICAgICByZXR1cm47CisKKyAgICBDT01QdHI8SUQyRDFCaXRtYXA+IGN1cnJlbnRDYW52YXMg
PSBEaXJlY3QyRDo6Y3JlYXRlQml0bWFwQ29weUZyb21Db250ZXh0KG1fcmVuZGVyVGFyZ2V0Lmdl
dCgpKTsKKyAgICBpZiAoIWN1cnJlbnRDYW52YXMpCisgICAgICAgIHJldHVybjsKKworICAgIENP
TVB0cjxJRDJEMUVmZmVjdD4gZWZmZWN0OworCisgICAgaWYgKG1fYmxlbmRNb2RlICE9IEQyRDFf
QkxFTkRfTU9ERV9GT1JDRV9EV09SRCkgeworICAgICAgICBtX2RldmljZUNvbnRleHQtPkNyZWF0
ZUVmZmVjdChDTFNJRF9EMkQxQmxlbmQsICZlZmZlY3QpOworICAgICAgICBlZmZlY3QtPlNldElu
cHV0KDAsIGN1cnJlbnRDYW52YXMuZ2V0KCkpOworICAgICAgICBlZmZlY3QtPlNldElucHV0KDEs
IG1fY29tcG9zaXRlU291cmNlLmdldCgpKTsKKyAgICAgICAgZWZmZWN0LT5TZXRWYWx1ZShEMkQx
X0JMRU5EX1BST1BfTU9ERSwgbV9ibGVuZE1vZGUpOworICAgIH0gZWxzZSBpZiAobV9jb21wb3Np
dGVNb2RlICE9IEQyRDFfQ09NUE9TSVRFX01PREVfRk9SQ0VfRFdPUkQpIHsKKyAgICAgICAgbV9k
ZXZpY2VDb250ZXh0LT5DcmVhdGVFZmZlY3QoQ0xTSURfRDJEMUNvbXBvc2l0ZSwgJmVmZmVjdCk7
CisgICAgICAgIGVmZmVjdC0+U2V0SW5wdXQoMCwgbV9jb21wb3NpdGVTb3VyY2UuZ2V0KCkpOwor
ICAgICAgICBlZmZlY3QtPlNldElucHV0KDEsIGN1cnJlbnRDYW52YXMuZ2V0KCkpOworICAgICAg
ICBlZmZlY3QtPlNldFZhbHVlKEQyRDFfQ09NUE9TSVRFX1BST1BfTU9ERSwgbV9jb21wb3NpdGVN
b2RlKTsKKyAgICB9CisKKyAgICBpZiAoZWZmZWN0KSB7CisgICAgICAgIG1fZGV2aWNlQ29udGV4
dC0+QmVnaW5EcmF3KCk7CisgICAgICAgIG1fZGV2aWNlQ29udGV4dC0+Q2xlYXIoRDJEMTo6Q29s
b3JGKDAsIDAsIDAsIDApKTsKKyAgICAgICAgbV9kZXZpY2VDb250ZXh0LT5EcmF3SW1hZ2UoZWZm
ZWN0LmdldCgpKTsKKyAgICAgICAgbV9kZXZpY2VDb250ZXh0LT5FbmREcmF3KCk7CisgICAgfQor
CisgICAgbV9jb21wb3NpdGVTb3VyY2UgPSBudWxscHRyOworfQorCit2b2lkIFBsYXRmb3JtQ29u
dGV4dERpcmVjdDJEOjpzZXRCbGVuZEFuZENvbXBvc2l0ZU1vZGUoRDJEMV9CTEVORF9NT0RFIGJs
ZW5kLCBEMkQxX0NPTVBPU0lURV9NT0RFIG1vZGUpCit7CisgICAgaWYgKG1vZGUgPT0gbV9jb21w
b3NpdGVNb2RlICYmIGJsZW5kID09IG1fYmxlbmRNb2RlKQorICAgICAgICByZXR1cm47CisKKyAg
ICAvLyBEaXJlY3QyRCBoYW5kbGVzIGNvbXBvc2l0aW5nIGJhc2VkIG9uIGJpdG1hcHMuIElmIHdl
IGFyZSBjaGFuZ2luZyB0aGUKKyAgICAvLyBjb21wb3NpdGluZyBtb2RlLCB3ZSBuZWVkIHRvIGNh
cHR1cmUgdGhlIGN1cnJlbnQgc3RhdGUgb2YgdGhlIHJlbmRlcmluZworICAgIC8vIGluIGEgYml0
bWFwLCBwZXJmb3JtIGRyYXdpbmcgb3BlcmF0aW9ucyB1bnRpbCB3ZSBmaW5pc2gsIHRoZW4gaGFu
ZGxlCisgICAgLy8gdGhlIGNvbXBvc3Rpbmcgb2YgdGhlIHR3byBsYXllcnMuCisgICAgQ09NUHRy
PElEMkQxQml0bWFwUmVuZGVyVGFyZ2V0PiBiaXRtYXBUYXJnZXQoUXVlcnksIG1fcmVuZGVyVGFy
Z2V0LmdldCgpKTsKKyAgICBpZiAoIWJpdG1hcFRhcmdldCkKKyAgICAgICAgcmV0dXJuOworCisg
ICAgZW5kRHJhdygpOworCisgICAgY29tcG9zaXRlSWZOZWVkZWQoKTsKKworICAgIG1fY29tcG9z
aXRlTW9kZSA9IG1vZGU7CisgICAgbV9ibGVuZE1vZGUgPSBibGVuZDsKKworICAgIG1fY29tcG9z
aXRlU291cmNlID0gRGlyZWN0MkQ6OmNyZWF0ZUJpdG1hcENvcHlGcm9tQ29udGV4dChtX3JlbmRl
clRhcmdldC5nZXQoKSk7CisKKyAgICBiZWdpbkRyYXcoKTsKKworICAgIG1fZGV2aWNlQ29udGV4
dC0+Q2xlYXIoRDJEMTo6Q29sb3JGKDAsIDAsIDAsIDApKTsKK30KKwogfSAvLyBuYW1lc3BhY2Ug
V2ViQ29yZQogCiAjZW5kaWYgLy8gVVNFKERJUkVDVDJEKQpJbmRleDogU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3Mvd2luL1BsYXRmb3JtQ29udGV4dERpcmVjdDJELmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL1BsYXRmb3JtQ29udGV4
dERpcmVjdDJELmgJKHJldmlzaW9uIDI1MDIzNykKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL3dpbi9QbGF0Zm9ybUNvbnRleHREaXJlY3QyRC5oCSh3b3JraW5nIGNvcHkpCkBA
IC01Myw3ICs1Myw5IEBAIHB1YmxpYzoKICAgICB+UGxhdGZvcm1Db250ZXh0RGlyZWN0MkQoKTsK
IAogICAgIElEMkQxUmVuZGVyVGFyZ2V0KiByZW5kZXJUYXJnZXQoKSB7IHJldHVybiBtX3JlbmRl
clRhcmdldC5nZXQoKTsgfQotICAgIHZvaWQgc2V0UmVuZGVyVGFyZ2V0KElEMkQxUmVuZGVyVGFy
Z2V0KiByZW5kZXJUYXJnZXQpIHsgbV9yZW5kZXJUYXJnZXQgPSByZW5kZXJUYXJnZXQ7IH0KKyAg
ICB2b2lkIHNldFJlbmRlclRhcmdldChJRDJEMVJlbmRlclRhcmdldCopOworCisgICAgSUQyRDFE
ZXZpY2VDb250ZXh0KiBkZXZpY2VDb250ZXh0KCkgeyByZXR1cm4gbV9kZXZpY2VDb250ZXh0Lmdl
dCgpOyB9CiAKICAgICBJRDNEMTFEZXZpY2UxKiBkM2REZXZpY2UoKSBjb25zdCB7IHJldHVybiBt
X2QzZERldmljZS5nZXQoKTsgfQogICAgIHZvaWQgc2V0RDNERGV2aWNlKElEM0QxMURldmljZTEq
IGRldmljZSkgeyBtX2QzZERldmljZSA9IGRldmljZTsgfQpAQCAtMTAzLDggKzEwNSw3IEBAIHB1
YmxpYzoKICAgICB2b2lkIHNldFN0cm9rZVRoaWNrbmVzcyhmbG9hdCk7CiAgICAgdm9pZCBzZXRE
YXNoZXMoY29uc3QgRGFzaEFycmF5Jik7CiAKLSAgICB2b2lkIHNldEJsZW5kTW9kZShEMkQxX0JM
RU5EX01PREUgbW9kZSkgeyBtX2JsZW5kTW9kZSA9IG1vZGU7IH0KLSAgICB2b2lkIHNldENvbXBv
c2l0ZU1vZGUoRDJEMV9DT01QT1NJVEVfTU9ERSBtb2RlKSB7IG1fY29tcG9zaXRlTW9kZSA9IG1v
ZGU7IH0KKyAgICB2b2lkIHNldEJsZW5kQW5kQ29tcG9zaXRlTW9kZShEMkQxX0JMRU5EX01PREUs
IEQyRDFfQ09NUE9TSVRFX01PREUpOwogCiAgICAgdm9pZCBzZXRUYWdzKEQyRDFfVEFHIHRhZzEs
IEQyRDFfVEFHIHRhZzIpOwogICAgIHZvaWQgbm90aWZ5UHJlRHJhd09ic2VydmVyKCk7CkBAIC0x
MTQsMTAgKzExNSwxMiBAQCBwdWJsaWM6CiAKIHByaXZhdGU6CiAgICAgdm9pZCBjbGVhckNsaXBz
KFZlY3RvcjxEaXJlY3QyRExheWVyVHlwZT4mKTsKKyAgICB2b2lkIGNvbXBvc2l0ZUlmTmVlZGVk
KCk7CiAKICAgICBHcmFwaGljc0NvbnRleHRQbGF0Zm9ybVByaXZhdGUqIG1fZ3JhcGhpY3NDb250
ZXh0UHJpdmF0ZSB7IG51bGxwdHIgfTsKIAogICAgIENPTVB0cjxJRDJEMVJlbmRlclRhcmdldD4g
bV9yZW5kZXJUYXJnZXQ7CisgICAgQ09NUHRyPElEMkQxRGV2aWNlQ29udGV4dD4gbV9kZXZpY2VD
b250ZXh0OwogICAgIENPTVB0cjxJRDJEMVN0cm9rZVN0eWxlPiBtX2QyZFN0cm9rZVN0eWxlOwog
CiAgICAgSGFzaE1hcDx1aW50MzJfdCwgQ09NUHRyPElEMkQxU29saWRDb2xvckJydXNoPj4gbV9z
b2xpZENvbG9yZWRCcnVzaENhY2hlOwpAQCAtMTMwLDYgKzEzMyw4IEBAIHByaXZhdGU6CiAKICAg
ICBDT01QdHI8SUQzRDExRGV2aWNlMT4gbV9kM2REZXZpY2U7CiAKKyAgICBDT01QdHI8SUQyRDFC
aXRtYXA+IG1fY29tcG9zaXRlU291cmNlOworCiAgICAgV1RGOjpGdW5jdGlvbjx2b2lkKCk+IG1f
cHJlRHJhd0hhbmRsZXI7CiAgICAgV1RGOjpGdW5jdGlvbjx2b2lkKCk+IG1fcG9zdERyYXdIYW5k
bGVyOwogCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>379804</attachid>
            <date>2019-09-28 23:15:00 -0700</date>
            <delta_ts>2019-09-28 23:26:28 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-202177-20190928231455.patch</filename>
            <type>text/plain</type>
            <size>44674</size>
            <attacher name="Brent Fulgham">bfulgham</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDI1MDQyOCkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDQ0IEBACisyMDE5LTA5LTI4ICBCcmVudCBG
dWxnaGFtICA8YmZ1bGdoYW1AYXBwbGUuY29tPgorCisgICAgICAgIFtGVFddIENvcnJlY3QgY29t
cG9zaXRpbmcsIHNoYWRvdywgYW5kIHJhZGlhbCBncmFkaWVudCBpbXBsZW1lbnRhdGlvbnMKKyAg
ICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIwMjE3NworCisg
ICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFRoaXMgcGF0Y2gg
Y29ycmVjdHMgYSBudW1iZXIgb2YgaW1wbGVtZW50YXRpb24gZXJyb3JzIGluIGJhc2ljIENhbnZh
cworICAgICAgICBkcmF3aW5nIG9wZXJhdGlvbnMuCisKKyAgICAgICAgVGVzdGVkIGJ5IGNhbnZh
cy9waGlsaXAvdGVzdHMgCisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy93aW4vRGlyZWN0
MkRPcGVyYXRpb25zLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkRpcmVjdDJEOjpTdGF0ZTo6c2V0
Q29tcG9zaXRlT3BlcmF0aW9uKTogSW5pdGlhbGl6ZSBibGVuZCBhbmQKKyAgICAgICAgY29tcG9z
aXRlIG1vZGVzIHRvIGNvcnJlY3QgZGVmYXVsdHMuCisgICAgICAgIChXZWJDb3JlOjpEaXJlY3Qy
RDo6ZHJhd1dpdGhTaGFkb3dIZWxwZXIpOiBDb3JyZWN0IHZhbHVlIHVzZWQgZm9yIGJsdXIKKyAg
ICAgICAgc3RhbmRhcmQgZGV2aWF0aW9uIHRvIG1vcmUgY2xvc2VseSBtYXRjaCBvdGhlciBicm93
c2VyIG91dHB1dC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy93aW4vRGlyZWN0MkRVdGls
aXRpZXMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RGlyZWN0MkQ6OmNyZWF0ZUJpdG1hcENvcHlG
cm9tQ29udGV4dCk6IEFkZGVkIGhlbHBlciBmdW5jdGlvbi4KKyAgICAgICAgKiBwbGF0Zm9ybS9n
cmFwaGljcy93aW4vRGlyZWN0MkRVdGlsaXRpZXMuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy93aW4vR3JhZGllbnREaXJlY3QyRC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpHcmFkaWVu
dDo6Z2VuZXJhdGVHcmFkaWVudCk6IFByb3Blcmx5IGhhbmRsZSB0aGUgY2FzZSBvZiBhIG5vbi16
ZXJvCisgICAgICAgIGluaXRpYWwgZ3JhZGllbnQgcmFkaXVzLiBQcm9wZXJseSBjb21wdXRlIHRo
ZSBmaW5hbCByYWRpdXMuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ltYWdlQnVm
ZmVyRGF0YURpcmVjdDJELmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyRGF0YTo6
cmVhZERhdGFGcm9tQml0bWFwSWZOZWVkZWQgY29uc3QpOiBVcGRhdGUgdG8gdXNlIElEMkQxRGV2
aWNlQ29udGV4dAorICAgICAgICBmcm9tIHBsYXRmb3JtQ29udGV4dCwgcmF0aGVyIHRoYW4gc2Vh
cmNoaW5nIGZvciBpdCBlYWNoIHRpbWUuCisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlckRh
dGE6OmNvbXBhdGlibGVCaXRtYXApOiBEaXR0by4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy93aW4vUGxhdGZvcm1Db250ZXh0RGlyZWN0MkQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UGxh
dGZvcm1Db250ZXh0RGlyZWN0MkQ6OlBsYXRmb3JtQ29udGV4dERpcmVjdDJEKTogR3JhYiB0aGUg
SUQyRDFEZXZpY2VDb250ZXh0IGZvcgorICAgICAgICB0aGUgUmVuZGVyVGFyZ2V0IGF0IGNvbnN0
cnVjdGlvbiB0aW1lLgorICAgICAgICAoV2ViQ29yZTo6UGxhdGZvcm1Db250ZXh0RGlyZWN0MkQ6
OnNldFJlbmRlclRhcmdldCk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6UGxhdGZvcm1Db250
ZXh0RGlyZWN0MkQ6OmVuZERyYXcpOiBQZXJmb3JtIGNvbXBvc2l0aW5nIG9wZXJhdGlvbnMgd2hl
biBuZWVkZWQuCisgICAgICAgIChXZWJDb3JlOjpQbGF0Zm9ybUNvbnRleHREaXJlY3QyRDo6Y29t
cG9zaXRlSWZOZWVkZWQpOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlBsYXRmb3JtQ29udGV4
dERpcmVjdDJEOjpzZXRCbGVuZEFuZENvbXBvc2l0ZU1vZGUpOiBVcGRhdGUgdG8gcHJvcGVybHkg
c2V0IHRoZQorICAgICAgICBibGVuZCBhbmQgY29tcG9zaXRpbmcgbW9kZSAoZGVwZW5kaW5nIG9u
IGdsb2JhbCB2YWx1ZSBzZXQgZm9yIHRoZSBjYW52YXMuKQorICAgICAgICAqIHBsYXRmb3JtL2dy
YXBoaWNzL3dpbi9QbGF0Zm9ybUNvbnRleHREaXJlY3QyRC5oOgorICAgICAgICAoV2ViQ29yZTo6
UGxhdGZvcm1Db250ZXh0RGlyZWN0MkQ6OmRldmljZUNvbnRleHQpOgorICAgICAgICAoV2ViQ29y
ZTo6UGxhdGZvcm1Db250ZXh0RGlyZWN0MkQ6OnNldFJlbmRlclRhcmdldCk6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJDb3JlOjpQbGF0Zm9ybUNvbnRleHREaXJlY3QyRDo6c2V0QmxlbmRNb2RlKTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlBsYXRmb3JtQ29udGV4dERpcmVjdDJEOjpzZXRD
b21wb3NpdGVNb2RlKTogRGVsZXRlZC4KKwogMjAxOS0wOS0yNyAgVHJ1aXR0IFNhdmVsbCAgPHRz
YXZlbGxAYXBwbGUuY29tPgogCiAgICAgICAgIFVucmV2aWV3ZWQsIHJvbGxpbmcgb3V0IHIyNTA0
MTUuCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9QYXRoLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvUGF0aC5oCShyZXZpc2lv
biAyNTA0MjgpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9QYXRoLmgJKHdv
cmtpbmcgY29weSkKQEAgLTUwLDYgKzUwLDEwIEBAIGludGVyZmFjZSBJRDJEMUdlb21ldHJ5U2lu
azsKIAogdHlwZWRlZiBJRDJEMUdlb21ldHJ5R3JvdXAgUGxhdGZvcm1QYXRoOwogCituYW1lc3Bh
Y2UgV2ViQ29yZSB7CitjbGFzcyBQbGF0Zm9ybUNvbnRleHREaXJlY3QyRDsKK30KKwogI2VsaWYg
VVNFKENBSVJPKQogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkBAIC0xNzAsNiArMTc0LDcgQEAgbmFt
ZXNwYWNlIFdlYkNvcmUgewogICAgICAgICAvLyBUbyBrZWVwIFBhdGgoKSBjaGVhcCwgaXQgZG9l
cyBub3QgYWxsb2NhdGUgYSBQbGF0Zm9ybVBhdGggaW1tZWRpYXRlbHkKICAgICAgICAgLy8gbWVh
bmluZyBQYXRoOjpwbGF0Zm9ybVBhdGgoKSBjYW4gcmV0dXJuIG51bGwuCiAjaWYgVVNFKERJUkVD
VDJEKQorICAgICAgICBGbG9hdFJlY3QgZmFzdEJvdW5kaW5nUmVjdEZvclN0cm9rZShjb25zdCBQ
bGF0Zm9ybUNvbnRleHREaXJlY3QyRCYpIGNvbnN0OwogICAgICAgICBQbGF0Zm9ybVBhdGhQdHIg
cGxhdGZvcm1QYXRoKCkgY29uc3QgeyByZXR1cm4gbV9wYXRoLmdldCgpOyB9CiAjZWxzZQogICAg
ICAgICBQbGF0Zm9ybVBhdGhQdHIgcGxhdGZvcm1QYXRoKCkgY29uc3QgeyByZXR1cm4gbV9wYXRo
OyB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vRGlyZWN0MkRP
cGVyYXRpb25zLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy93aW4vRGlyZWN0MkRPcGVyYXRpb25zLmNwcAkocmV2aXNpb24gMjUwNDI4KQorKysgU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0RpcmVjdDJET3BlcmF0aW9ucy5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTEyNyw4ICsxMjcsOSBAQCB2b2lkIHNldFN0cm9rZVN0eWxlKFBs
YXRmb3JtQ29udGV4dERpcmVjCiAKIHZvaWQgc2V0Q29tcG9zaXRlT3BlcmF0aW9uKFBsYXRmb3Jt
Q29udGV4dERpcmVjdDJEJiBwbGF0Zm9ybUNvbnRleHQsIENvbXBvc2l0ZU9wZXJhdG9yIGNvbXBv
c2l0ZU9wZXJhdGlvbiwgQmxlbmRNb2RlIGJsZW5kTW9kZSkKIHsKLSAgICBEMkQxX0JMRU5EX01P
REUgdGFyZ2V0QmxlbmRNb2RlID0gRDJEMV9CTEVORF9NT0RFX1NDUkVFTjsKLSAgICBEMkQxX0NP
TVBPU0lURV9NT0RFIHRhcmdldENvbXBvc2l0ZU1vZGUgPSBEMkQxX0NPTVBPU0lURV9NT0RFX1NP
VVJDRV9BVE9QOworCisgICAgRDJEMV9CTEVORF9NT0RFIHRhcmdldEJsZW5kTW9kZSA9IEQyRDFf
QkxFTkRfTU9ERV9NVUxUSVBMWTsgLy8gRDJEMV9CTEVORF9NT0RFX0ZPUkNFX0RXT1JEOworICAg
IEQyRDFfQ09NUE9TSVRFX01PREUgdGFyZ2V0Q29tcG9zaXRlTW9kZSA9IEQyRDFfQ09NUE9TSVRF
X01PREVfRk9SQ0VfRFdPUkQ7CiAKICAgICBpZiAoYmxlbmRNb2RlICE9IEJsZW5kTW9kZTo6Tm9y
bWFsKSB7CiAgICAgICAgIHN3aXRjaCAoYmxlbmRNb2RlKSB7CkBAIC0xOTIsMTAgKzE5MywxMCBA
QCB2b2lkIHNldENvbXBvc2l0ZU9wZXJhdGlvbihQbGF0Zm9ybUNvbnRlCiAgICAgICAgICAgICAv
LyBGSVhNRTogdGFyZ2V0QmxlbmRNb2RlID0gRDJEMV9CTEVORF9NT0RFX0NMRUFSOwogICAgICAg
ICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgQ29tcG9zaXRlQ29weToKLSAgICAgICAgICAgIC8v
IEZJWE1FOiB0YXJnZXRCbGVuZE1vZGUgPSBEMkQxX0JMRU5EX01PREVfQ09QWTsKKyAgICAgICAg
ICAgIHRhcmdldENvbXBvc2l0ZU1vZGUgPSBEMkQxX0NPTVBPU0lURV9NT0RFX1NPVVJDRV9DT1BZ
OwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgQ29tcG9zaXRlU291cmNlT3ZlcjoK
LSAgICAgICAgICAgIC8vIEZJWE1FOiBrQ0dCbGVuZE1vZGVOb3JtYWwKKyAgICAgICAgICAgIHRh
cmdldENvbXBvc2l0ZU1vZGUgPSBEMkQxX0NPTVBPU0lURV9NT0RFX1NPVVJDRV9PVkVSOwogICAg
ICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgQ29tcG9zaXRlU291cmNlSW46CiAgICAgICAg
ICAgICB0YXJnZXRDb21wb3NpdGVNb2RlID0gRDJEMV9DT01QT1NJVEVfTU9ERV9TT1VSQ0VfSU47
CkBAIC0yMjIsMTAgKzIyMywxMCBAQCB2b2lkIHNldENvbXBvc2l0ZU9wZXJhdGlvbihQbGF0Zm9y
bUNvbnRlCiAgICAgICAgICAgICB0YXJnZXRDb21wb3NpdGVNb2RlID0gRDJEMV9DT01QT1NJVEVf
TU9ERV9YT1I7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBDb21wb3NpdGVQbHVz
RGFya2VyOgotICAgICAgICAgICAgdGFyZ2V0QmxlbmRNb2RlID0gRDJEMV9CTEVORF9NT0RFX0RB
UktFUl9DT0xPUjsKKyAgICAgICAgICAgIHRhcmdldEJsZW5kTW9kZSA9IEQyRDFfQkxFTkRfTU9E
RV9EQVJLRU47CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBDb21wb3NpdGVQbHVz
TGlnaHRlcjoKLSAgICAgICAgICAgIHRhcmdldEJsZW5kTW9kZSA9IEQyRDFfQkxFTkRfTU9ERV9M
SUdIVEVSX0NPTE9SOworICAgICAgICAgICAgdGFyZ2V0QmxlbmRNb2RlID0gRDJEMV9CTEVORF9N
T0RFX0xJR0hURU47CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBDb21wb3NpdGVE
aWZmZXJlbmNlOgogICAgICAgICAgICAgdGFyZ2V0QmxlbmRNb2RlID0gRDJEMV9CTEVORF9NT0RF
X0RJRkZFUkVOQ0U7CkBAIC0yMzMsOCArMjM0LDcgQEAgdm9pZCBzZXRDb21wb3NpdGVPcGVyYXRp
b24oUGxhdGZvcm1Db250ZQogICAgICAgICB9CiAgICAgfQogCi0gICAgcGxhdGZvcm1Db250ZXh0
LnNldEJsZW5kTW9kZSh0YXJnZXRCbGVuZE1vZGUpOwotICAgIHBsYXRmb3JtQ29udGV4dC5zZXRD
b21wb3NpdGVNb2RlKHRhcmdldENvbXBvc2l0ZU1vZGUpOworICAgIHBsYXRmb3JtQ29udGV4dC5z
ZXRCbGVuZEFuZENvbXBvc2l0ZU1vZGUodGFyZ2V0QmxlbmRNb2RlLCB0YXJnZXRDb21wb3NpdGVN
b2RlKTsKIH0KIAogdm9pZCBzZXRTaG91bGRBbnRpYWxpYXMoUGxhdGZvcm1Db250ZXh0RGlyZWN0
MkQmIHBsYXRmb3JtQ29udGV4dCwgYm9vbCBlbmFibGUpCkBAIC00MTEsMTUgKzQxMSwxMCBAQCB2
b2lkIGZpbGxSZWN0KFBsYXRmb3JtQ29udGV4dERpcmVjdDJEJiBwCiAgICAgYXV0byBjb250ZXh0
ID0gcGxhdGZvcm1Db250ZXh0LnJlbmRlclRhcmdldCgpOwogCiAgICAgcGxhdGZvcm1Db250ZXh0
LnNldFRhZ3MoMSwgX19MSU5FX18pOwotICAgIEZ1bmN0aW9uPHZvaWQoSUQyRDFSZW5kZXJUYXJn
ZXQqKT4gZHJhd0Z1bmN0aW9uID0gWyZwbGF0Zm9ybUNvbnRleHQsIHJlY3QsICZmaWxsU291cmNl
XShJRDJEMVJlbmRlclRhcmdldCogcmVuZGVyVGFyZ2V0KSB7CisgICAgZHJhd1dpdGhTaGFkb3co
cGxhdGZvcm1Db250ZXh0LCByZWN0LCBzaGFkb3dTdGF0ZSwgWyZwbGF0Zm9ybUNvbnRleHQsIHJl
Y3QsICZmaWxsU291cmNlXShJRDJEMVJlbmRlclRhcmdldCogcmVuZGVyVGFyZ2V0KSB7CiAgICAg
ICAgIGNvbnN0IEQyRDFfUkVDVF9GIGQyZFJlY3QgPSByZWN0OwogICAgICAgICByZW5kZXJUYXJn
ZXQtPkZpbGxSZWN0YW5nbGUoJmQyZFJlY3QsIGZpbGxTb3VyY2UuYnJ1c2guZ2V0KCkpOwotICAg
IH07Ci0KLSAgICBpZiAoc2hhZG93U3RhdGUuaXNWaXNpYmxlKCkpCi0gICAgICAgIGRyYXdXaXRo
U2hhZG93KHBsYXRmb3JtQ29udGV4dCwgcmVjdCwgc2hhZG93U3RhdGUsIGRyYXdGdW5jdGlvbik7
Ci0gICAgZWxzZQotICAgICAgICBkcmF3V2l0aG91dFNoYWRvdyhwbGF0Zm9ybUNvbnRleHQsIHJl
Y3QsIGRyYXdGdW5jdGlvbik7CisgICAgfSk7CiB9CiAKIHZvaWQgZmlsbFJlY3QoUGxhdGZvcm1D
b250ZXh0RGlyZWN0MkQmIHBsYXRmb3JtQ29udGV4dCwgY29uc3QgRmxvYXRSZWN0JiByZWN0LCBj
b25zdCBDb2xvciYgY29sb3IsIGNvbnN0IFNoYWRvd1N0YXRlJiBzaGFkb3dTdGF0ZSkKQEAgLTQy
NywxNSArNDIyLDEwIEBAIHZvaWQgZmlsbFJlY3QoUGxhdGZvcm1Db250ZXh0RGlyZWN0MkQmIHAK
ICAgICBhdXRvIGNvbnRleHQgPSBwbGF0Zm9ybUNvbnRleHQucmVuZGVyVGFyZ2V0KCk7CiAKICAg
ICBwbGF0Zm9ybUNvbnRleHQuc2V0VGFncygxLCBfX0xJTkVfXyk7Ci0gICAgRnVuY3Rpb248dm9p
ZChJRDJEMVJlbmRlclRhcmdldCopPiBkcmF3RnVuY3Rpb24gPSBbJnBsYXRmb3JtQ29udGV4dCwg
Y29sb3IsIHJlY3RdKElEMkQxUmVuZGVyVGFyZ2V0KiByZW5kZXJUYXJnZXQpIHsKKyAgICBkcmF3
V2l0aFNoYWRvdyhwbGF0Zm9ybUNvbnRleHQsIHJlY3QsIHNoYWRvd1N0YXRlLCBbJnBsYXRmb3Jt
Q29udGV4dCwgY29sb3IsIHJlY3RdKElEMkQxUmVuZGVyVGFyZ2V0KiByZW5kZXJUYXJnZXQpIHsK
ICAgICAgICAgY29uc3QgRDJEMV9SRUNUX0YgZDJkUmVjdCA9IHJlY3Q7CiAgICAgICAgIHJlbmRl
clRhcmdldC0+RmlsbFJlY3RhbmdsZSgmZDJkUmVjdCwgcGxhdGZvcm1Db250ZXh0LmJydXNoV2l0
aENvbG9yKGNvbG9yKS5nZXQoKSk7Ci0gICAgfTsKLQotICAgIGlmIChzaGFkb3dTdGF0ZS5pc1Zp
c2libGUoKSkKLSAgICAgICAgZHJhd1dpdGhTaGFkb3cocGxhdGZvcm1Db250ZXh0LCByZWN0LCBz
aGFkb3dTdGF0ZSwgZHJhd0Z1bmN0aW9uKTsKLSAgICBlbHNlCi0gICAgICAgIGRyYXdXaXRob3V0
U2hhZG93KHBsYXRmb3JtQ29udGV4dCwgcmVjdCwgZHJhd0Z1bmN0aW9uKTsKKyAgICB9KTsKIH0K
IAogdm9pZCBmaWxsUm91bmRlZFJlY3QoUGxhdGZvcm1Db250ZXh0RGlyZWN0MkQmIHBsYXRmb3Jt
Q29udGV4dCwgY29uc3QgRmxvYXRSb3VuZGVkUmVjdCYgcmVjdCwgY29uc3QgQ29sb3ImIGNvbG9y
LCBjb25zdCBTaGFkb3dTdGF0ZSYgc2hhZG93U3RhdGUpCkBAIC00NTAsMTUgKzQ0MCwxMCBAQCB2
b2lkIGZpbGxSb3VuZGVkUmVjdChQbGF0Zm9ybUNvbnRleHREaXJlCiAgICAgYm9vbCBlcXVhbEhl
aWdodHMgPSAocmFkaWkudG9wTGVmdCgpLmhlaWdodCgpID09IHJhZGlpLmJvdHRvbUxlZnQoKS5o
ZWlnaHQoKSAmJiByYWRpaS5ib3R0b21MZWZ0KCkuaGVpZ2h0KCkgPT0gcmFkaWkudG9wUmlnaHQo
KS5oZWlnaHQoKSAmJiByYWRpaS50b3BSaWdodCgpLmhlaWdodCgpID09IHJhZGlpLmJvdHRvbVJp
Z2h0KCkuaGVpZ2h0KCkpOwogICAgIGJvb2wgaGFzQ3VzdG9tRmlsbCA9IGZhbHNlOyAvLyBGSVhN
RTogV2h5IGlzbid0IGEgRmlsbFNvdXJjZSBwYXNzZWQgdG8gdGhpcyBmdW5jdGlvbj8KICAgICBp
ZiAoIWhhc0N1c3RvbUZpbGwgJiYgZXF1YWxXaWR0aHMgJiYgZXF1YWxIZWlnaHRzICYmIHJhZGlp
LnRvcExlZnQoKS53aWR0aCgpICogMiA9PSByLndpZHRoKCkgJiYgcmFkaWkudG9wTGVmdCgpLmhl
aWdodCgpICogMiA9PSByLmhlaWdodCgpKSB7Ci0gICAgICAgIEZ1bmN0aW9uPHZvaWQoSUQyRDFS
ZW5kZXJUYXJnZXQqKT4gZHJhd0Z1bmN0aW9uID0gWyZwbGF0Zm9ybUNvbnRleHQsIGNvbG9yLCBy
ZWN0LCByYWRpaSwgcl0oSUQyRDFSZW5kZXJUYXJnZXQqIHJlbmRlclRhcmdldCkgeworICAgICAg
ICBkcmF3V2l0aFNoYWRvdyhwbGF0Zm9ybUNvbnRleHQsIHIsIHNoYWRvd1N0YXRlLCBbJnBsYXRm
b3JtQ29udGV4dCwgY29sb3IsIHJlY3QsIHJhZGlpLCByXShJRDJEMVJlbmRlclRhcmdldCogcmVu
ZGVyVGFyZ2V0KSB7CiAgICAgICAgICAgICBhdXRvIHJvdW5kZWRSZWN0ID0gRDJEMTo6Um91bmRl
ZFJlY3QociwgcmFkaWkudG9wTGVmdCgpLndpZHRoKCksIHJhZGlpLnRvcExlZnQoKS5oZWlnaHQo
KSk7CiAgICAgICAgICAgICByZW5kZXJUYXJnZXQtPkZpbGxSb3VuZGVkUmVjdGFuZ2xlKCZyb3Vu
ZGVkUmVjdCwgcGxhdGZvcm1Db250ZXh0LmJydXNoV2l0aENvbG9yKGNvbG9yKS5nZXQoKSk7Ci0g
ICAgICAgIH07Ci0KLSAgICAgICAgaWYgKHNoYWRvd1N0YXRlLmlzVmlzaWJsZSgpKQotICAgICAg
ICAgICAgZHJhd1dpdGhTaGFkb3cocGxhdGZvcm1Db250ZXh0LCByLCBzaGFkb3dTdGF0ZSwgZHJh
d0Z1bmN0aW9uKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgZHJhd1dpdGhvdXRTaGFkb3co
cGxhdGZvcm1Db250ZXh0LCByLCBkcmF3RnVuY3Rpb24pOworICAgICAgICB9KTsKICAgICB9IGVs
c2UgewogICAgICAgICBQYXRoIHBhdGg7CiAgICAgICAgIHBhdGguYWRkUm91bmRlZFJlY3QocmVj
dCk7CkBAIC00ODgsMTUgKzQ3MywxMSBAQCB2b2lkIGZpbGxSZWN0V2l0aFJvdW5kZWRIb2xlKFBs
YXRmb3JtQ29uCiAKIHZvaWQgZmlsbFJlY3RXaXRoR3JhZGllbnQoUGxhdGZvcm1Db250ZXh0RGly
ZWN0MkQmIHBsYXRmb3JtQ29udGV4dCwgY29uc3QgRmxvYXRSZWN0JiByZWN0LCBJRDJEMUJydXNo
KiBncmFkaWVudCkKIHsKLSAgICBhdXRvIGNvbnRleHQgPSBwbGF0Zm9ybUNvbnRleHQucmVuZGVy
VGFyZ2V0KCk7Ci0KICAgICBwbGF0Zm9ybUNvbnRleHQuc2V0VGFncygxLCBfX0xJTkVfXyk7Ci0g
ICAgRnVuY3Rpb248dm9pZChJRDJEMVJlbmRlclRhcmdldCopPiBkcmF3RnVuY3Rpb24gPSBbJnBs
YXRmb3JtQ29udGV4dCwgcmVjdCwgJmdyYWRpZW50XShJRDJEMVJlbmRlclRhcmdldCogcmVuZGVy
VGFyZ2V0KSB7CisgICAgZHJhd1dpdGhvdXRTaGFkb3cocGxhdGZvcm1Db250ZXh0LCBbJnBsYXRm
b3JtQ29udGV4dCwgcmVjdCwgJmdyYWRpZW50XShJRDJEMVJlbmRlclRhcmdldCogcmVuZGVyVGFy
Z2V0KSB7CiAgICAgICAgIGNvbnN0IEQyRDFfUkVDVF9GIGQyZFJlY3QgPSByZWN0OwogICAgICAg
ICByZW5kZXJUYXJnZXQtPkZpbGxSZWN0YW5nbGUoJmQyZFJlY3QsIGdyYWRpZW50KTsKLSAgICB9
OwotCi0gICAgZHJhd1dpdGhvdXRTaGFkb3cocGxhdGZvcm1Db250ZXh0LCByZWN0LCBkcmF3RnVu
Y3Rpb24pOworICAgIH0pOwogfQogCiB2b2lkIGZpbGxQYXRoKFBsYXRmb3JtQ29udGV4dERpcmVj
dDJEJiBwbGF0Zm9ybUNvbnRleHQsIGNvbnN0IFBhdGgmIHBhdGgsIGNvbnN0IEZpbGxTb3VyY2Um
IGZpbGxTb3VyY2UsIGNvbnN0IFNoYWRvd1N0YXRlJiBzaGFkb3dTdGF0ZSkKQEAgLTUxNywxMSAr
NDk4LDkgQEAgdm9pZCBmaWxsUGF0aChQbGF0Zm9ybUNvbnRleHREaXJlY3QyRCYgcAogCiAgICAg
aWYgKHNoYWRvd1N0YXRlLmlzVmlzaWJsZSgpKSB7CiAgICAgICAgIEZsb2F0UmVjdCBib3VuZGlu
Z1JlY3QgPSBwYXRoLmZhc3RCb3VuZGluZ1JlY3QoKTsKLSAgICAgICAgZHJhd1dpdGhTaGFkb3co
cGxhdGZvcm1Db250ZXh0LCBib3VuZGluZ1JlY3QsIHNoYWRvd1N0YXRlLCBkcmF3RnVuY3Rpb24p
OwotICAgIH0gZWxzZSB7Ci0gICAgICAgIEZsb2F0UmVjdCBjb250ZXh0UmVjdChGbG9hdFBvaW50
KCksIGNvbnRleHQtPkdldFNpemUoKSk7Ci0gICAgICAgIGRyYXdXaXRob3V0U2hhZG93KHBsYXRm
b3JtQ29udGV4dCwgY29udGV4dFJlY3QsIGRyYXdGdW5jdGlvbik7Ci0gICAgfQorICAgICAgICBk
cmF3V2l0aFNoYWRvdyhwbGF0Zm9ybUNvbnRleHQsIGJvdW5kaW5nUmVjdCwgc2hhZG93U3RhdGUs
IFdURk1vdmUoZHJhd0Z1bmN0aW9uKSk7CisgICAgfSBlbHNlCisgICAgICAgIGRyYXdXaXRob3V0
U2hhZG93KHBsYXRmb3JtQ29udGV4dCwgV1RGTW92ZShkcmF3RnVuY3Rpb24pKTsKIH0KIAogdm9p
ZCBmaWxsUGF0aChQbGF0Zm9ybUNvbnRleHREaXJlY3QyRCYgcGxhdGZvcm1Db250ZXh0LCBjb25z
dCBQYXRoJiBwYXRoLCBjb25zdCBDb2xvciYgY29sb3IsIGNvbnN0IFNoYWRvd1N0YXRlJiBzaGFk
b3dTdGF0ZSkKQEAgLTU0MSwyNSArNTIwLDE4IEBAIHZvaWQgZmlsbFBhdGgoUGxhdGZvcm1Db250
ZXh0RGlyZWN0MkQmIHAKIAogICAgIGlmIChzaGFkb3dTdGF0ZS5pc1Zpc2libGUoKSkgewogICAg
ICAgICBGbG9hdFJlY3QgYm91bmRpbmdSZWN0ID0gcGF0aC5mYXN0Qm91bmRpbmdSZWN0KCk7Ci0g
ICAgICAgIGRyYXdXaXRoU2hhZG93KHBsYXRmb3JtQ29udGV4dCwgYm91bmRpbmdSZWN0LCBzaGFk
b3dTdGF0ZSwgZHJhd0Z1bmN0aW9uKTsKLSAgICB9IGVsc2UgewotICAgICAgICBGbG9hdFJlY3Qg
Y29udGV4dFJlY3QoRmxvYXRQb2ludCgpLCBjb250ZXh0LT5HZXRTaXplKCkpOwotICAgICAgICBk
cmF3V2l0aG91dFNoYWRvdyhwbGF0Zm9ybUNvbnRleHQsIGNvbnRleHRSZWN0LCBkcmF3RnVuY3Rp
b24pOwotICAgIH0KKyAgICAgICAgZHJhd1dpdGhTaGFkb3cocGxhdGZvcm1Db250ZXh0LCBib3Vu
ZGluZ1JlY3QsIHNoYWRvd1N0YXRlLCBXVEZNb3ZlKGRyYXdGdW5jdGlvbikpOworICAgIH0gZWxz
ZQorICAgICAgICBkcmF3V2l0aG91dFNoYWRvdyhwbGF0Zm9ybUNvbnRleHQsIFdURk1vdmUoZHJh
d0Z1bmN0aW9uKSk7CiB9CiAKIHZvaWQgc3Ryb2tlUmVjdChQbGF0Zm9ybUNvbnRleHREaXJlY3Qy
RCYgcGxhdGZvcm1Db250ZXh0LCBjb25zdCBGbG9hdFJlY3QmIHJlY3QsIGZsb2F0IGxpbmVXaWR0
aCwgY29uc3QgU3Ryb2tlU291cmNlJiBzdHJva2VTb3VyY2UsIGNvbnN0IFNoYWRvd1N0YXRlJiBz
aGFkb3dTdGF0ZSkKIHsKLSAgICBGdW5jdGlvbjx2b2lkKElEMkQxUmVuZGVyVGFyZ2V0Kik+IGRy
YXdGdW5jdGlvbiA9IFsmcGxhdGZvcm1Db250ZXh0LCAmc3Ryb2tlU291cmNlLCByZWN0LCBsaW5l
V2lkdGhdKElEMkQxUmVuZGVyVGFyZ2V0KiByZW5kZXJUYXJnZXQpIHsKKyAgICBkcmF3V2l0aFNo
YWRvdyhwbGF0Zm9ybUNvbnRleHQsIHJlY3QsIHNoYWRvd1N0YXRlLCBbJnBsYXRmb3JtQ29udGV4
dCwgJnN0cm9rZVNvdXJjZSwgcmVjdCwgbGluZVdpZHRoXShJRDJEMVJlbmRlclRhcmdldCogcmVu
ZGVyVGFyZ2V0KSB7CiAgICAgICAgIHBsYXRmb3JtQ29udGV4dC5zZXRUYWdzKDEsIF9fTElORV9f
KTsKICAgICAgICAgY29uc3QgRDJEMV9SRUNUX0YgZDJkUmVjdCA9IHJlY3Q7CiAgICAgICAgIHJl
bmRlclRhcmdldC0+RHJhd1JlY3RhbmdsZSgmZDJkUmVjdCwgc3Ryb2tlU291cmNlLmJydXNoLmdl
dCgpLCBsaW5lV2lkdGgsIHBsYXRmb3JtQ29udGV4dC5zdHJva2VTdHlsZSgpKTsKLSAgICB9Owot
Ci0gICAgaWYgKHNoYWRvd1N0YXRlLmlzVmlzaWJsZSgpKQotICAgICAgICBkcmF3V2l0aFNoYWRv
dyhwbGF0Zm9ybUNvbnRleHQsIHJlY3QsIHNoYWRvd1N0YXRlLCBkcmF3RnVuY3Rpb24pOwotICAg
IGVsc2UKLSAgICAgICAgZHJhd1dpdGhvdXRTaGFkb3cocGxhdGZvcm1Db250ZXh0LCByZWN0LCBk
cmF3RnVuY3Rpb24pOworICAgIH0pOwogfQogCiB2b2lkIHN0cm9rZVBhdGgoUGxhdGZvcm1Db250
ZXh0RGlyZWN0MkQmIHBsYXRmb3JtQ29udGV4dCwgY29uc3QgUGF0aCYgcGF0aCwgY29uc3QgU3Ry
b2tlU291cmNlJiBzdHJva2VTb3VyY2UsIGNvbnN0IFNoYWRvd1N0YXRlJiBzaGFkb3dTdGF0ZSkK
QEAgLTU2OCwxNSArNTQwLDE1IEBAIHZvaWQgc3Ryb2tlUGF0aChQbGF0Zm9ybUNvbnRleHREaXJl
Y3QyRCYKICAgICAKICAgICBwbGF0Zm9ybUNvbnRleHQuc2V0VGFncygxLCBfX0xJTkVfXyk7CiAK
LSAgICBhdXRvIGJvdW5kaW5nUmVjdCA9IHBhdGguZmFzdEJvdW5kaW5nUmVjdCgpOwogICAgIEZ1
bmN0aW9uPHZvaWQoSUQyRDFSZW5kZXJUYXJnZXQqKT4gZHJhd0Z1bmN0aW9uID0gWyZwbGF0Zm9y
bUNvbnRleHQsICZwYXRoLCAmc3Ryb2tlU291cmNlXShJRDJEMVJlbmRlclRhcmdldCogcmVuZGVy
VGFyZ2V0KSB7CiAgICAgICAgIHJlbmRlclRhcmdldC0+RHJhd0dlb21ldHJ5KHBhdGgucGxhdGZv
cm1QYXRoKCksIHN0cm9rZVNvdXJjZS5icnVzaC5nZXQoKSwgc3Ryb2tlU291cmNlLnRoaWNrbmVz
cywgcGxhdGZvcm1Db250ZXh0LnN0cm9rZVN0eWxlKCkpOwogICAgIH07CiAKLSAgICBpZiAoc2hh
ZG93U3RhdGUuaXNWaXNpYmxlKCkpCi0gICAgICAgIGRyYXdXaXRoU2hhZG93KHBsYXRmb3JtQ29u
dGV4dCwgYm91bmRpbmdSZWN0LCBzaGFkb3dTdGF0ZSwgZHJhd0Z1bmN0aW9uKTsKLSAgICBlbHNl
Ci0gICAgICAgIGRyYXdXaXRob3V0U2hhZG93KHBsYXRmb3JtQ29udGV4dCwgYm91bmRpbmdSZWN0
LCBkcmF3RnVuY3Rpb24pOworICAgIGlmIChzaGFkb3dTdGF0ZS5pc1Zpc2libGUoKSkgeworICAg
ICAgICBhdXRvIGJvdW5kaW5nUmVjdCA9IHBhdGguZmFzdEJvdW5kaW5nUmVjdEZvclN0cm9rZShw
bGF0Zm9ybUNvbnRleHQpOworICAgICAgICBkcmF3V2l0aFNoYWRvdyhwbGF0Zm9ybUNvbnRleHQs
IGJvdW5kaW5nUmVjdCwgc2hhZG93U3RhdGUsIFdURk1vdmUoZHJhd0Z1bmN0aW9uKSk7CisgICAg
fSBlbHNlCisgICAgICAgIGRyYXdXaXRob3V0U2hhZG93KHBsYXRmb3JtQ29udGV4dCwgV1RGTW92
ZShkcmF3RnVuY3Rpb24pKTsKIH0KIAogdm9pZCBkcmF3UGF0aChQbGF0Zm9ybUNvbnRleHREaXJl
Y3QyRCYgcGxhdGZvcm1Db250ZXh0LCBjb25zdCBQYXRoJiBwYXRoLCBjb25zdCBTdHJva2VTb3Vy
Y2UmIHN0cm9rZVNvdXJjZSwgY29uc3QgU2hhZG93U3RhdGUmKQpAQCAtNTg3LDcxICs1NTksMTQz
IEBAIHZvaWQgZHJhd1BhdGgoUGxhdGZvcm1Db250ZXh0RGlyZWN0MkQmIHAKIAogICAgIHBsYXRm
b3JtQ29udGV4dC5zZXRUYWdzKDEsIF9fTElORV9fKTsKIAotICAgIGF1dG8gcmVjdCA9IHBhdGgu
ZmFzdEJvdW5kaW5nUmVjdCgpOwotICAgIGRyYXdXaXRob3V0U2hhZG93KHBsYXRmb3JtQ29udGV4
dCwgcmVjdCwgWyZwbGF0Zm9ybUNvbnRleHQsICZzdHJva2VTb3VyY2UsICZwYXRoXShJRDJEMVJl
bmRlclRhcmdldCogcmVuZGVyVGFyZ2V0KSB7CisgICAgYXV0byByZWN0ID0gcGF0aC5mYXN0Qm91
bmRpbmdSZWN0Rm9yU3Ryb2tlKHBsYXRmb3JtQ29udGV4dCk7CisgICAgZHJhd1dpdGhvdXRTaGFk
b3cocGxhdGZvcm1Db250ZXh0LCBbJnBsYXRmb3JtQ29udGV4dCwgJnN0cm9rZVNvdXJjZSwgJnBh
dGhdKElEMkQxUmVuZGVyVGFyZ2V0KiByZW5kZXJUYXJnZXQpIHsKICAgICAgICAgcmVuZGVyVGFy
Z2V0LT5EcmF3R2VvbWV0cnkocGF0aC5wbGF0Zm9ybVBhdGgoKSwgc3Ryb2tlU291cmNlLmJydXNo
LmdldCgpLCBzdHJva2VTb3VyY2UudGhpY2tuZXNzLCBwbGF0Zm9ybUNvbnRleHQuc3Ryb2tlU3R5
bGUoKSk7CiAgICAgfSk7CiAKICAgICBmbHVzaChwbGF0Zm9ybUNvbnRleHQpOwogfQogCi12b2lk
IGRyYXdXaXRoU2hhZG93SGVscGVyKElEMkQxUmVuZGVyVGFyZ2V0KiBjb250ZXh0LCBJRDJEMUJp
dG1hcCogYml0bWFwLCBjb25zdCBDb2xvciYgc2hhZG93Q29sb3IsIGNvbnN0IEZsb2F0U2l6ZSYg
c2hhZG93T2Zmc2V0LCBmbG9hdCBzaGFkb3dCbHVyKQorc3RhdGljIHZvaWQgZHJhd1dpdGhTaGFk
b3dIZWxwZXIoSUQyRDFSZW5kZXJUYXJnZXQqIGNvbnRleHQsIElEMkQxQml0bWFwUmVuZGVyVGFy
Z2V0KiBiaXRtYXBUYXJnZXQsIGNvbnN0IEZsb2F0UmVjdCYgYm91bmRpbmdSZWN0LCBjb25zdCBD
b2xvciYgc2hhZG93Q29sb3IsIGNvbnN0IEZsb2F0U2l6ZSYgc2hhZG93T2Zmc2V0LCBmbG9hdCBz
aGFkb3dCbHVyKQogewotICAgIENPTVB0cjxJRDJEMURldmljZUNvbnRleHQ+IGRldmljZUNvbnRl
eHQ7Ci0gICAgSFJFU1VMVCBociA9IGNvbnRleHQtPlF1ZXJ5SW50ZXJmYWNlKCZkZXZpY2VDb250
ZXh0KTsKKyAgICBDT01QdHI8SUQyRDFCaXRtYXA+IGN1cnJlbnRDYW52YXMgPSBEaXJlY3QyRDo6
Y3JlYXRlQml0bWFwQ29weUZyb21Db250ZXh0KGJpdG1hcFRhcmdldCk7CisgICAgaWYgKCFjdXJy
ZW50Q2FudmFzKQorICAgICAgICByZXR1cm47CisKKyAgICBDT01QdHI8SUQyRDFEZXZpY2VDb250
ZXh0PiBzaGFkb3dEZXZpY2VDb250ZXh0OworICAgIEhSRVNVTFQgaHIgPSBiaXRtYXBUYXJnZXQt
PlF1ZXJ5SW50ZXJmYWNlKCZzaGFkb3dEZXZpY2VDb250ZXh0KTsKICAgICBSRUxFQVNFX0FTU0VS
VChTVUNDRUVERUQoaHIpKTsKIAogICAgIC8vIENyZWF0ZSB0aGUgc2hhZG93IGVmZmVjdAogICAg
IENPTVB0cjxJRDJEMUVmZmVjdD4gc2hhZG93RWZmZWN0OwotICAgIGhyID0gZGV2aWNlQ29udGV4
dC0+Q3JlYXRlRWZmZWN0KENMU0lEX0QyRDFTaGFkb3csICZzaGFkb3dFZmZlY3QpOworICAgIGhy
ID0gc2hhZG93RGV2aWNlQ29udGV4dC0+Q3JlYXRlRWZmZWN0KENMU0lEX0QyRDFTaGFkb3csICZz
aGFkb3dFZmZlY3QpOwogICAgIFJFTEVBU0VfQVNTRVJUKFNVQ0NFRURFRChocikpOwogCi0gICAg
c2hhZG93RWZmZWN0LT5TZXRJbnB1dCgwLCBiaXRtYXApOworICAgIHNoYWRvd0VmZmVjdC0+U2V0
SW5wdXQoMCwgY3VycmVudENhbnZhcy5nZXQoKSk7CiAgICAgc2hhZG93RWZmZWN0LT5TZXRWYWx1
ZShEMkQxX1NIQURPV19QUk9QX0NPTE9SLCBzdGF0aWNfY2FzdDxEMkQxX1ZFQ1RPUl80Rj4oc2hh
ZG93Q29sb3IpKTsKLSAgICBzaGFkb3dFZmZlY3QtPlNldFZhbHVlKEQyRDFfU0hBRE9XX1BST1Bf
QkxVUl9TVEFOREFSRF9ERVZJQVRJT04sIHNoYWRvd0JsdXIpOwogCi0gICAgQ09NUHRyPElEMkQx
RWZmZWN0PiB0cmFuc2Zvcm1FZmZlY3Q7Ci0gICAgaHIgPSBkZXZpY2VDb250ZXh0LT5DcmVhdGVF
ZmZlY3QoQ0xTSURfRDJEMTJEQWZmaW5lVHJhbnNmb3JtLCAmdHJhbnNmb3JtRWZmZWN0KTsKKyAg
ICBmbG9hdCBibHVyRGV2aWF0aW9uID0gMC41ICogc2hhZG93Qmx1cjsKKyAgICBzaGFkb3dFZmZl
Y3QtPlNldFZhbHVlKEQyRDFfU0hBRE9XX1BST1BfQkxVUl9TVEFOREFSRF9ERVZJQVRJT04sIGJs
dXJEZXZpYXRpb24pOworCisgICAgQ09NUHRyPElEMkQxRWZmZWN0PiBzaGFkb3dUcmFuc2Zvcm1F
ZmZlY3Q7CisgICAgaHIgPSBzaGFkb3dEZXZpY2VDb250ZXh0LT5DcmVhdGVFZmZlY3QoQ0xTSURf
RDJEMTJEQWZmaW5lVHJhbnNmb3JtLCAmc2hhZG93VHJhbnNmb3JtRWZmZWN0KTsKICAgICBSRUxF
QVNFX0FTU0VSVChTVUNDRUVERUQoaHIpKTsKIAotICAgIHRyYW5zZm9ybUVmZmVjdC0+U2V0SW5w
dXRFZmZlY3QoMCwgc2hhZG93RWZmZWN0LmdldCgpKTsKKyAgICBzaGFkb3dUcmFuc2Zvcm1FZmZl
Y3QtPlNldElucHV0RWZmZWN0KDAsIHNoYWRvd0VmZmVjdC5nZXQoKSk7CiAKLSAgICBhdXRvIHRy
YW5zbGF0aW9uID0gRDJEMTo6TWF0cml4M3gyRjo6VHJhbnNsYXRpb24oc2hhZG93T2Zmc2V0Lndp
ZHRoKCksIHNoYWRvd09mZnNldC5oZWlnaHQoKSk7Ci0gICAgdHJhbnNmb3JtRWZmZWN0LT5TZXRW
YWx1ZShEMkQxXzJEQUZGSU5FVFJBTlNGT1JNX1BST1BfVFJBTlNGT1JNX01BVFJJWCwgdHJhbnNs
YXRpb24pOworICAgIC8vIE11c3QgZmxpcCB0aGUgYXhpcyBmb3IgdGhlIHNoYWRvdyBvZmZzZXQs
IHNpbmNlIERpcmVjdDJEJ3MgWSBheGlzIGlzIGludmVydGVkLgorICAgIGF1dG8gc2hhZG93VHJh
bnNsYXRpb24gPSBEMkQxOjpNYXRyaXgzeDJGOjpUcmFuc2xhdGlvbihzaGFkb3dPZmZzZXQud2lk
dGgoKSwgLXNoYWRvd09mZnNldC5oZWlnaHQoKSk7CisgICAgc2hhZG93VHJhbnNmb3JtRWZmZWN0
LT5TZXRWYWx1ZShEMkQxXzJEQUZGSU5FVFJBTlNGT1JNX1BST1BfVFJBTlNGT1JNX01BVFJJWCwg
c2hhZG93VHJhbnNsYXRpb24pOwogCiAgICAgQ09NUHRyPElEMkQxRWZmZWN0PiBjb21wb3NpdG9y
OwotICAgIGhyID0gZGV2aWNlQ29udGV4dC0+Q3JlYXRlRWZmZWN0KENMU0lEX0QyRDFDb21wb3Np
dGUsICZjb21wb3NpdG9yKTsKKyAgICBociA9IHNoYWRvd0RldmljZUNvbnRleHQtPkNyZWF0ZUVm
ZmVjdChDTFNJRF9EMkQxQ29tcG9zaXRlLCAmY29tcG9zaXRvcik7CisgICAgUkVMRUFTRV9BU1NF
UlQoU1VDQ0VFREVEKGhyKSk7CisKKyAgICBjb21wb3NpdG9yLT5TZXRJbnB1dEVmZmVjdCgwLCBz
aGFkb3dUcmFuc2Zvcm1FZmZlY3QuZ2V0KCkpOworICAgIGNvbXBvc2l0b3ItPlNldElucHV0KDEs
IGN1cnJlbnRDYW52YXMuZ2V0KCkpOworCisgICAgc2hhZG93RGV2aWNlQ29udGV4dC0+QmVnaW5E
cmF3KCk7CisgICAgc2hhZG93RGV2aWNlQ29udGV4dC0+Q2xlYXIoRDJEMTo6Q29sb3JGKDAsIDAs
IDAsIDApKTsKKyAgICBzaGFkb3dEZXZpY2VDb250ZXh0LT5EcmF3SW1hZ2UoY29tcG9zaXRvci5n
ZXQoKSk7CisgICAgaHIgPSBzaGFkb3dEZXZpY2VDb250ZXh0LT5FbmREcmF3KCk7CisgICAgUkVM
RUFTRV9BU1NFUlQoU1VDQ0VFREVEKGhyKSk7CisKKyAgICBDT01QdHI8SUQyRDFCaXRtYXA+IGJp
dG1hcDsKKyAgICBociA9IGJpdG1hcFRhcmdldC0+R2V0Qml0bWFwKCZiaXRtYXApOwogICAgIFJF
TEVBU0VfQVNTRVJUKFNVQ0NFRURFRChocikpOwogCi0gICAgY29tcG9zaXRvci0+U2V0SW5wdXRF
ZmZlY3QoMCwgdHJhbnNmb3JtRWZmZWN0LmdldCgpKTsKLSAgICBjb21wb3NpdG9yLT5TZXRJbnB1
dCgxLCBiaXRtYXApOworICAgIEludFNpemUgcGl4ZWxTaXplID0gY29udGV4dC0+R2V0UGl4ZWxT
aXplKCk7CisgICAgQ09NUHRyPElEMkQxQml0bWFwPiBjcm9wcGVkID0gRGlyZWN0MkQ6OmNyZWF0
ZUJpdG1hcChiaXRtYXBUYXJnZXQsIHBpeGVsU2l6ZSk7CisgICAgaWYgKCFjcm9wcGVkKQorICAg
ICAgICByZXR1cm47CisKKyAgICBhdXRvIHNjYWxlRmFjdG9yID0gYml0bWFwUmVzb2x1dGlvbihj
b250ZXh0KTsKKworICAgIEZsb2F0UmVjdCBzY2FsZWRCb3VuZGluZ1JlY3QoYm91bmRpbmdSZWN0
KTsKKyAgICBzY2FsZWRCb3VuZGluZ1JlY3Quc2NhbGUoc2NhbGVGYWN0b3Iud2lkdGgoKSwgc2Nh
bGVGYWN0b3IuaGVpZ2h0KCkpOworCisgICAgLy8gVGFrZSB0aGUgbWFnbml0dWRlIG9mIHRoZSBv
ZmZzZXQuIElmIHRoZSBvcmlnaW4gd2FzIG91dHNpZGUgdGhlIGRyYXdpbmcgY29udGV4dCwgd2Ug
c3RyZXRjaGVkIHRvIGluY2x1ZGUgdGhvc2UgcG9pbnRzLAorICAgIC8vIGFuZCBzbyB3ZSBuZWVk
IHRvIGNyb3AgdGhlbSBvdXQuIElmIHRoZSBvcmlnaW4gd2FzIGluc2lkZSwgd2Ugd2FudCB0byBo
b25vciB0aGUgb2Zmc2V0LgorICAgIGludCB4ID0gY2xhbXBUbzxpbnQ+KHN0ZDo6YWJzKHNjYWxl
ZEJvdW5kaW5nUmVjdC54KCkpKTsKKyAgICBpbnQgeSA9IGNsYW1wVG88aW50PihzdGQ6OmFicyhz
Y2FsZWRCb3VuZGluZ1JlY3QueSgpKSk7CisgICAgaW50IHdpZHRoID0gY2xhbXBUbzxpbnQ+KHNj
YWxlZEJvdW5kaW5nUmVjdC53aWR0aCgpKTsKKyAgICBpbnQgaGVpZ2h0ID0gY2xhbXBUbzxpbnQ+
KHNjYWxlZEJvdW5kaW5nUmVjdC5oZWlnaHQoKSk7CisKKyAgICBJbnRSZWN0IG91dHB1dFJlY3Qo
SW50UG9pbnQoeCwgeSksIEludFNpemUod2lkdGgsIGhlaWdodCkpOworICAgIEludFJlY3QgZGVz
dENvbnRleHRSZWN0KEludFBvaW50KCksIHBpeGVsU2l6ZSk7CisgICAgaWYgKG91dHB1dFJlY3Qu
aW50ZXJzZWN0cyhkZXN0Q29udGV4dFJlY3QpKQorICAgICAgICBvdXRwdXRSZWN0LmludGVyc2Vj
dChkZXN0Q29udGV4dFJlY3QpOwogCi0gICAgZGV2aWNlQ29udGV4dC0+RHJhd0ltYWdlKGNvbXBv
c2l0b3IuZ2V0KCksIEQyRDFfSU5URVJQT0xBVElPTl9NT0RFX0xJTkVBUik7CisgICAgRDJEMV9S
RUNUX1UgY3JvcFJlY3QgPSBvdXRwdXRSZWN0OworICAgIGF1dG8gdGFyZ2V0UG9pbnQgPSBEMkQx
OjpQb2ludDJVKCk7CisgICAgY3JvcHBlZC0+Q29weUZyb21CaXRtYXAoJnRhcmdldFBvaW50LCBi
aXRtYXAuZ2V0KCksICZjcm9wUmVjdCk7CisKKyAgICBjb250ZXh0LT5EcmF3Qml0bWFwKGNyb3Bw
ZWQuZ2V0KCkpOwogfQogCi12b2lkIGRyYXdXaXRoU2hhZG93KFBsYXRmb3JtQ29udGV4dERpcmVj
dDJEJiBwbGF0Zm9ybUNvbnRleHQsIGNvbnN0IEZsb2F0UmVjdCYgYm91bmRpbmdSZWN0LCBjb25z
dCBTaGFkb3dTdGF0ZSYgc2hhZG93U3RhdGUsIGNvbnN0IFdURjo6RnVuY3Rpb248dm9pZChJRDJE
MVJlbmRlclRhcmdldCopPiYgZHJhd0NvbW1hbmRzKQordm9pZCBkcmF3V2l0aFNoYWRvdyhQbGF0
Zm9ybUNvbnRleHREaXJlY3QyRCYgcGxhdGZvcm1Db250ZXh0LCBGbG9hdFJlY3QgYm91bmRpbmdS
ZWN0LCBjb25zdCBTaGFkb3dTdGF0ZSYgc2hhZG93U3RhdGUsIFdURjo6RnVuY3Rpb248dm9pZChJ
RDJEMVJlbmRlclRhcmdldCopPiYmIGRyYXdDb21tYW5kcykKIHsKKyAgICBpZiAoIXNoYWRvd1N0
YXRlLmlzVmlzaWJsZSgpKSB7CisgICAgICAgIGRyYXdXaXRob3V0U2hhZG93KHBsYXRmb3JtQ29u
dGV4dCwgV1RGTW92ZShkcmF3Q29tbWFuZHMpKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKwog
ICAgIHBsYXRmb3JtQ29udGV4dC5ub3RpZnlQcmVEcmF3T2JzZXJ2ZXIoKTsKIAotICAgIGF1dG8g
Y29udGV4dCA9IHBsYXRmb3JtQ29udGV4dC5yZW5kZXJUYXJnZXQoKTsKKyAgICBhdXRvKiBjb250
ZXh0ID0gcGxhdGZvcm1Db250ZXh0LnJlbmRlclRhcmdldCgpOworCisgICAgRmxvYXRTaXplIHJl
bmRlclRhcmdldFNpemUgPSBjb250ZXh0LT5HZXRTaXplKCk7CisgICAgY29uc3QgRmxvYXRSZWN0
IGNvbnRleHRSZWN0KEZsb2F0UG9pbnQoKSwgcmVuZGVyVGFyZ2V0U2l6ZSk7CisgICAgRmxvYXRS
ZWN0IHdvcmtpbmdDb250ZXh0UmVjdChjb250ZXh0UmVjdCk7CisKKyAgICBpZiAoYm91bmRpbmdS
ZWN0LmlzSW5maW5pdGUoKSkKKyAgICAgICAgYm91bmRpbmdSZWN0ID0gd29ya2luZ0NvbnRleHRS
ZWN0OworCisgICAgaWYgKCFjb250ZXh0UmVjdC5jb250YWlucyhib3VuZGluZ1JlY3QpKQorICAg
ICAgICB3b3JraW5nQ29udGV4dFJlY3QudW5pdGUoYm91bmRpbmdSZWN0KTsKKworICAgIHdvcmtp
bmdDb250ZXh0UmVjdC5leHBhbmQoc3RkOjphYnMoc2hhZG93U3RhdGUub2Zmc2V0LndpZHRoKCkp
ICsgc2hhZG93U3RhdGUuYmx1ciwgc3RkOjphYnMoc2hhZG93U3RhdGUub2Zmc2V0LmhlaWdodCgp
KSArIHNoYWRvd1N0YXRlLmJsdXIpOworCisgICAgYXV0byBzY2FsZUZhY3RvciA9IGJpdG1hcFJl
c29sdXRpb24oY29udGV4dCk7CisKKyAgICB3b3JraW5nQ29udGV4dFJlY3Quc2NhbGUoc2NhbGVG
YWN0b3IpOworCisgICAgSW50U2l6ZSBwaXhlbERpbWVuc2lvbnMoY2xhbXBUbzxpbnQ+KHdvcmtp
bmdDb250ZXh0UmVjdC53aWR0aCgpKSwgY2xhbXBUbzxpbnQ+KHdvcmtpbmdDb250ZXh0UmVjdC5o
ZWlnaHQoKSkpOwogCiAgICAgLy8gUmVuZGVyIHRoZSBjdXJyZW50IGdlb21ldHJ5IHRvIGEgYml0
bWFwIGNvbnRleHQKLSAgICBDT01QdHI8SUQyRDFCaXRtYXBSZW5kZXJUYXJnZXQ+IGJpdG1hcFRh
cmdldCA9IGNyZWF0ZUJpdG1hcFJlbmRlclRhcmdldChjb250ZXh0KTsKKyAgICBDT01QdHI8SUQy
RDFCaXRtYXBSZW5kZXJUYXJnZXQ+IGJpdG1hcFRhcmdldCA9IGNyZWF0ZUJpdG1hcFJlbmRlclRh
cmdldE9mU2l6ZShwaXhlbERpbWVuc2lvbnMsIGNvbnRleHQpOworCisgICAgRDJEMV9NQVRSSVhf
M1gyX0YgY3VycmVudFRyYW5zZm9ybTsKKyAgICBiaXRtYXBUYXJnZXQtPkdldFRyYW5zZm9ybSgm
Y3VycmVudFRyYW5zZm9ybSk7CisKKyAgICBpZiAoIWNvbnRleHRSZWN0LmNvbnRhaW5zKGJvdW5k
aW5nUmVjdC5sb2NhdGlvbigpKSkgeworICAgICAgICBhdXRvIHRyYW5zbGF0aW9uID0gRDJEMTo6
TWF0cml4M3gyRjo6VHJhbnNsYXRpb24oLWJvdW5kaW5nUmVjdC5sb2NhdGlvbigpLngoKSwgLWJv
dW5kaW5nUmVjdC5sb2NhdGlvbigpLnkoKSk7CisgICAgICAgIGJpdG1hcFRhcmdldC0+U2V0VHJh
bnNmb3JtKHRyYW5zbGF0aW9uICogY3VycmVudFRyYW5zZm9ybSk7CisgICAgfQogCiAgICAgYml0
bWFwVGFyZ2V0LT5CZWdpbkRyYXcoKTsKICAgICBkcmF3Q29tbWFuZHMoYml0bWFwVGFyZ2V0Lmdl
dCgpKTsKICAgICBIUkVTVUxUIGhyID0gYml0bWFwVGFyZ2V0LT5FbmREcmF3KCk7CiAgICAgUkVM
RUFTRV9BU1NFUlQoU1VDQ0VFREVEKGhyKSk7CiAKLSAgICBDT01QdHI8SUQyRDFCaXRtYXA+IGJp
dG1hcDsKLSAgICBociA9IGJpdG1hcFRhcmdldC0+R2V0Qml0bWFwKCZiaXRtYXApOwotICAgIFJF
TEVBU0VfQVNTRVJUKFNVQ0NFRURFRChocikpOworICAgIGJpdG1hcFRhcmdldC0+U2V0VHJhbnNm
b3JtKGN1cnJlbnRUcmFuc2Zvcm0pOwogCi0gICAgZHJhd1dpdGhTaGFkb3dIZWxwZXIoY29udGV4
dCwgYml0bWFwLmdldCgpLCBzaGFkb3dTdGF0ZS5jb2xvciwgc2hhZG93U3RhdGUub2Zmc2V0LCBz
aGFkb3dTdGF0ZS5ibHVyKTsKKyAgICBkcmF3V2l0aFNoYWRvd0hlbHBlcihjb250ZXh0LCBiaXRt
YXBUYXJnZXQuZ2V0KCksIGJvdW5kaW5nUmVjdCwgc2hhZG93U3RhdGUuY29sb3IsIHNoYWRvd1N0
YXRlLm9mZnNldCwgc2hhZG93U3RhdGUuYmx1cik7CiAgICAgcGxhdGZvcm1Db250ZXh0Lm5vdGlm
eVBvc3REcmF3T2JzZXJ2ZXIoKTsKIH0KIAotdm9pZCBkcmF3V2l0aG91dFNoYWRvdyhQbGF0Zm9y
bUNvbnRleHREaXJlY3QyRCYgcGxhdGZvcm1Db250ZXh0LCBjb25zdCBGbG9hdFJlY3QmIC8qYm91
bmRpbmdSZWN0Ki8sIGNvbnN0IFdURjo6RnVuY3Rpb248dm9pZChJRDJEMVJlbmRlclRhcmdldCop
PiYgZHJhd0NvbW1hbmRzKQordm9pZCBkcmF3V2l0aG91dFNoYWRvdyhQbGF0Zm9ybUNvbnRleHRE
aXJlY3QyRCYgcGxhdGZvcm1Db250ZXh0LCBXVEY6OkZ1bmN0aW9uPHZvaWQoSUQyRDFSZW5kZXJU
YXJnZXQqKT4mJiBkcmF3Q29tbWFuZHMpCiB7CiAgICAgcGxhdGZvcm1Db250ZXh0Lm5vdGlmeVBy
ZURyYXdPYnNlcnZlcigpOwogICAgIGRyYXdDb21tYW5kcyhwbGF0Zm9ybUNvbnRleHQucmVuZGVy
VGFyZ2V0KCkpOwpAQCAtNjYwLDcgKzcwNCw3IEBAIHZvaWQgZHJhd1dpdGhvdXRTaGFkb3coUGxh
dGZvcm1Db250ZXh0RGkKIAogdm9pZCBjbGVhclJlY3QoUGxhdGZvcm1Db250ZXh0RGlyZWN0MkQm
IHBsYXRmb3JtQ29udGV4dCwgY29uc3QgRmxvYXRSZWN0JiByZWN0KQogewotICAgIGRyYXdXaXRo
b3V0U2hhZG93KHBsYXRmb3JtQ29udGV4dCwgcmVjdCwgWyZwbGF0Zm9ybUNvbnRleHQsIHJlY3Rd
KElEMkQxUmVuZGVyVGFyZ2V0KiByZW5kZXJUYXJnZXQpIHsKKyAgICBkcmF3V2l0aG91dFNoYWRv
dyhwbGF0Zm9ybUNvbnRleHQsIFsmcGxhdGZvcm1Db250ZXh0LCByZWN0XShJRDJEMVJlbmRlclRh
cmdldCogcmVuZGVyVGFyZ2V0KSB7CiAgICAgICAgIEZsb2F0UmVjdCByZW5kZXJUYXJnZXRSZWN0
KEZsb2F0UG9pbnQoKSwgcmVuZGVyVGFyZ2V0LT5HZXRTaXplKCkpOwogICAgICAgICBGbG9hdFJl
Y3QgcmVjdFRvQ2xlYXIocmVjdCk7CiAKQEAgLTgxMiwxNCArODU2LDkgQEAgdm9pZCBkcmF3TmF0
aXZlSW1hZ2UoUGxhdGZvcm1Db250ZXh0RGlyZQogICAgIH0KIAogICAgIHBsYXRmb3JtQ29udGV4
dC5zZXRUYWdzKDEsIF9fTElORV9fKTsKLSAgICBGdW5jdGlvbjx2b2lkKElEMkQxUmVuZGVyVGFy
Z2V0Kik+IGRyYXdGdW5jdGlvbiA9IFtpbWFnZSwgYWRqdXN0ZWREZXN0UmVjdCwgZ2xvYmFsQWxw
aGEsIHNyY1JlY3RdKElEMkQxUmVuZGVyVGFyZ2V0KiByZW5kZXJUYXJnZXQpIHsKKyAgICBkcmF3
V2l0aFNoYWRvdyhwbGF0Zm9ybUNvbnRleHQsIGFkanVzdGVkRGVzdFJlY3QsIHNoYWRvd1N0YXRl
LCBbaW1hZ2UsIGFkanVzdGVkRGVzdFJlY3QsIGdsb2JhbEFscGhhLCBzcmNSZWN0XShJRDJEMVJl
bmRlclRhcmdldCogcmVuZGVyVGFyZ2V0KSB7CiAgICAgICAgIHJlbmRlclRhcmdldC0+RHJhd0Jp
dG1hcChpbWFnZSwgYWRqdXN0ZWREZXN0UmVjdCwgZ2xvYmFsQWxwaGEsIEQyRDFfQklUTUFQX0lO
VEVSUE9MQVRJT05fTU9ERV9MSU5FQVIsIHNyY1JlY3QpOwotICAgIH07Ci0KLSAgICBpZiAoc2hh
ZG93U3RhdGUuaXNWaXNpYmxlKCkpCi0gICAgICAgIGRyYXdXaXRoU2hhZG93KHBsYXRmb3JtQ29u
dGV4dCwgYWRqdXN0ZWREZXN0UmVjdCwgc2hhZG93U3RhdGUsIGRyYXdGdW5jdGlvbik7Ci0gICAg
ZWxzZQotICAgICAgICBkcmF3V2l0aG91dFNoYWRvdyhwbGF0Zm9ybUNvbnRleHQsIGFkanVzdGVk
RGVzdFJlY3QsIGRyYXdGdW5jdGlvbik7CisgICAgfSk7CiAKICAgICBpZiAoIXN0YXRlU2F2ZXIu
ZGlkU2F2ZSgpKQogICAgICAgICBjb250ZXh0LT5TZXRUcmFuc2Zvcm0oY3RtKTsKQEAgLTg2OSw3
ICs5MDgsNyBAQCB2b2lkIGRyYXdQYXR0ZXJuKFBsYXRmb3JtQ29udGV4dERpcmVjdDJECiAgICAg
aWYgKCFTVUNDRUVERUQoaHIpKQogICAgICAgICByZXR1cm47CiAKLSAgICBkcmF3V2l0aG91dFNo
YWRvdyhwbGF0Zm9ybUNvbnRleHQsIGRlc3RSZWN0LCBbZGVzdFJlY3QsIHBhdHRlcm5CcnVzaF0o
SUQyRDFSZW5kZXJUYXJnZXQqIHJlbmRlclRhcmdldCkgeworICAgIGRyYXdXaXRob3V0U2hhZG93
KHBsYXRmb3JtQ29udGV4dCwgW2Rlc3RSZWN0LCBwYXR0ZXJuQnJ1c2hdKElEMkQxUmVuZGVyVGFy
Z2V0KiByZW5kZXJUYXJnZXQpIHsKICAgICAgICAgY29uc3QgRDJEMV9SRUNUX0YgZDJkUmVjdCA9
IGRlc3RSZWN0OwogICAgICAgICByZW5kZXJUYXJnZXQtPkZpbGxSZWN0YW5nbGUoJmQyZFJlY3Qs
IHBhdHRlcm5CcnVzaC5nZXQoKSk7CiAgICAgfSk7CkBAIC04ODAsMTAgKzkxOSw4IEBAIHZvaWQg
ZHJhd1JlY3QoUGxhdGZvcm1Db250ZXh0RGlyZWN0MkQmIHAKICAgICAvLyBGSVhNRTogdGhpcyBm
dW5jdGlvbiBkb2VzIG5vdCBoYW5kbGUgcGF0dGVybnMgYW5kIGdyYWRpZW50cyBsaWtlIGRyYXdQ
YXRoIGRvZXMsIGl0IHByb2JhYmx5IHNob3VsZC4KICAgICBBU1NFUlQoIXJlY3QuaXNFbXB0eSgp
KTsKIAotICAgIGF1dG8gY29udGV4dCA9IHBsYXRmb3JtQ29udGV4dC5yZW5kZXJUYXJnZXQoKTsK
LQogICAgIHBsYXRmb3JtQ29udGV4dC5zZXRUYWdzKDEsIF9fTElORV9fKTsKLSAgICBkcmF3V2l0
aG91dFNoYWRvdyhwbGF0Zm9ybUNvbnRleHQsIHJlY3QsIFsmcGxhdGZvcm1Db250ZXh0LCByZWN0
LCBmaWxsQ29sb3IsIHN0cm9rZUNvbG9yLCBzdHJva2VTdHlsZV0oSUQyRDFSZW5kZXJUYXJnZXQq
IHJlbmRlclRhcmdldCkgeworICAgIGRyYXdXaXRob3V0U2hhZG93KHBsYXRmb3JtQ29udGV4dCwg
WyZwbGF0Zm9ybUNvbnRleHQsIHJlY3QsIGZpbGxDb2xvciwgc3Ryb2tlQ29sb3IsIHN0cm9rZVN0
eWxlXShJRDJEMVJlbmRlclRhcmdldCogcmVuZGVyVGFyZ2V0KSB7CiAgICAgICAgIGNvbnN0IEQy
RDFfUkVDVF9GIGQyZFJlY3QgPSByZWN0OwogICAgICAgICBhdXRvIGZpbGxCcnVzaCA9IHBsYXRm
b3JtQ29udGV4dC5icnVzaFdpdGhDb2xvcihmaWxsQ29sb3IpOwogICAgICAgICByZW5kZXJUYXJn
ZXQtPkZpbGxSZWN0YW5nbGUoJmQyZFJlY3QsIGZpbGxCcnVzaC5nZXQoKSk7CkBAIC05MzUsOSAr
OTcyLDcgQEAgdm9pZCBkcmF3TGluZShQbGF0Zm9ybUNvbnRleHREaXJlY3QyRCYgcAogCiAgICAg
cGxhdGZvcm1Db250ZXh0LnNldFRhZ3MoMSwgX19MSU5FX18pOwogCi0gICAgRmxvYXRSZWN0IGJv
dW5kaW5nUmVjdChwMSwgcDIpOwotCi0gICAgZHJhd1dpdGhvdXRTaGFkb3cocGxhdGZvcm1Db250
ZXh0LCBib3VuZGluZ1JlY3QsIFsmcGxhdGZvcm1Db250ZXh0LCBwMSwgcDIsIGQyZFN0cm9rZVN0
eWxlLCBzdHJva2VDb2xvciwgc3Ryb2tlVGhpY2tuZXNzXShJRDJEMVJlbmRlclRhcmdldCogcmVu
ZGVyVGFyZ2V0KSB7CisgICAgZHJhd1dpdGhvdXRTaGFkb3cocGxhdGZvcm1Db250ZXh0LCBbJnBs
YXRmb3JtQ29udGV4dCwgcDEsIHAyLCBkMmRTdHJva2VTdHlsZSwgc3Ryb2tlQ29sb3IsIHN0cm9r
ZVRoaWNrbmVzc10oSUQyRDFSZW5kZXJUYXJnZXQqIHJlbmRlclRhcmdldCkgewogICAgICAgICBy
ZW5kZXJUYXJnZXQtPkRyYXdMaW5lKHAxLCBwMiwgcGxhdGZvcm1Db250ZXh0LmJydXNoV2l0aENv
bG9yKHN0cm9rZUNvbG9yKS5nZXQoKSwgc3Ryb2tlVGhpY2tuZXNzLCBkMmRTdHJva2VTdHlsZS5n
ZXQoKSk7CiAgICAgfSk7CiB9CkBAIC05NTYsMTAgKzk5MSw4IEBAIHZvaWQgZmlsbEVsbGlwc2Uo
UGxhdGZvcm1Db250ZXh0RGlyZWN0MkQKIHsKICAgICBhdXRvIGVsbGlwc2UgPSBEMkQxOjpFbGxp
cHNlKHJlY3QuY2VudGVyKCksIDAuNSAqIHJlY3Qud2lkdGgoKSwgMC41ICogcmVjdC5oZWlnaHQo
KSk7CiAKLSAgICBhdXRvIGNvbnRleHQgPSBwbGF0Zm9ybUNvbnRleHQucmVuZGVyVGFyZ2V0KCk7
Ci0KICAgICBwbGF0Zm9ybUNvbnRleHQuc2V0VGFncygxLCBfX0xJTkVfXyk7Ci0gICAgZHJhd1dp
dGhvdXRTaGFkb3cocGxhdGZvcm1Db250ZXh0LCByZWN0LCBbJnBsYXRmb3JtQ29udGV4dCwgZWxs
aXBzZSwgZmlsbENvbG9yLCBzdHJva2VTdHlsZSwgc3Ryb2tlQ29sb3IsIHN0cm9rZVRoaWNrbmVz
c10oSUQyRDFSZW5kZXJUYXJnZXQqIHJlbmRlclRhcmdldCkgeworICAgIGRyYXdXaXRob3V0U2hh
ZG93KHBsYXRmb3JtQ29udGV4dCwgWyZwbGF0Zm9ybUNvbnRleHQsIGVsbGlwc2UsIGZpbGxDb2xv
ciwgc3Ryb2tlU3R5bGUsIHN0cm9rZUNvbG9yLCBzdHJva2VUaGlja25lc3NdKElEMkQxUmVuZGVy
VGFyZ2V0KiByZW5kZXJUYXJnZXQpIHsKICAgICAgICAgYXV0byBmaWxsQnJ1c2ggPSBwbGF0Zm9y
bUNvbnRleHQuYnJ1c2hXaXRoQ29sb3IoZmlsbENvbG9yKTsKICAgICAgICAgcmVuZGVyVGFyZ2V0
LT5GaWxsRWxsaXBzZSgmZWxsaXBzZSwgZmlsbEJydXNoLmdldCgpKTsKICAgICAgICAgaWYgKHN0
cm9rZVN0eWxlICE9IFN0cm9rZVN0eWxlOjpOb1N0cm9rZSkgewpAQCAtOTc2LDEwICsxMDA5LDgg
QEAgdm9pZCBkcmF3RWxsaXBzZShQbGF0Zm9ybUNvbnRleHREaXJlY3QyRAogCiAgICAgYXV0byBl
bGxpcHNlID0gRDJEMTo6RWxsaXBzZShyZWN0LmNlbnRlcigpLCAwLjUgKiByZWN0LndpZHRoKCks
IDAuNSAqIHJlY3QuaGVpZ2h0KCkpOwogCi0gICAgYXV0byBjb250ZXh0ID0gcGxhdGZvcm1Db250
ZXh0LnJlbmRlclRhcmdldCgpOwotCiAgICAgcGxhdGZvcm1Db250ZXh0LnNldFRhZ3MoMSwgX19M
SU5FX18pOwotICAgIGRyYXdXaXRob3V0U2hhZG93KHBsYXRmb3JtQ29udGV4dCwgcmVjdCwgWyZw
bGF0Zm9ybUNvbnRleHQsIGVsbGlwc2UsIHN0cm9rZUNvbG9yLCBzdHJva2VUaGlja25lc3NdKElE
MkQxUmVuZGVyVGFyZ2V0KiByZW5kZXJUYXJnZXQpIHsKKyAgICBkcmF3V2l0aG91dFNoYWRvdyhw
bGF0Zm9ybUNvbnRleHQsIFsmcGxhdGZvcm1Db250ZXh0LCBlbGxpcHNlLCBzdHJva2VDb2xvciwg
c3Ryb2tlVGhpY2tuZXNzXShJRDJEMVJlbmRlclRhcmdldCogcmVuZGVyVGFyZ2V0KSB7CiAgICAg
ICAgIGF1dG8gc3Ryb2tlQnJ1c2ggPSBwbGF0Zm9ybUNvbnRleHQuYnJ1c2hXaXRoQ29sb3Ioc3Ry
b2tlQ29sb3IpOwogICAgICAgICByZW5kZXJUYXJnZXQtPkRyYXdFbGxpcHNlKCZlbGxpcHNlLCBz
dHJva2VCcnVzaC5nZXQoKSwgc3Ryb2tlVGhpY2tuZXNzLCBwbGF0Zm9ybUNvbnRleHQuc3Ryb2tl
U3R5bGUoKSk7CiAgICAgfSk7CkBAIC0xMDk5LDE1ICsxMTMwLDE1IEBAIHZvaWQgZW5kVHJhbnNw
YXJlbmN5TGF5ZXIoUGxhdGZvcm1Db250ZXgKICAgICBIUkVTVUxUIGhyID0gcmVuZGVyVGFyZ2V0
LT5FbmREcmF3KCk7CiAgICAgUkVMRUFTRV9BU1NFUlQoU1VDQ0VFREVEKGhyKSk7CiAKLSAgICBD
T01QdHI8SUQyRDFCaXRtYXA+IGJpdG1hcDsKLSAgICBociA9IHJlbmRlclRhcmdldC0+R2V0Qml0
bWFwKCZiaXRtYXApOwotICAgIFJFTEVBU0VfQVNTRVJUKFNVQ0NFRURFRChocikpOwotCiAgICAg
YXV0byBjb250ZXh0ID0gcGxhdGZvcm1Db250ZXh0LnJlbmRlclRhcmdldCgpOwogCiAgICAgaWYg
KGN1cnJlbnRMYXllci5oYXNTaGFkb3cpCi0gICAgICAgIGRyYXdXaXRoU2hhZG93SGVscGVyKGNv
bnRleHQsIGJpdG1hcC5nZXQoKSwgY3VycmVudExheWVyLnNoYWRvd0NvbG9yLCBjdXJyZW50TGF5
ZXIuc2hhZG93T2Zmc2V0LCBjdXJyZW50TGF5ZXIuc2hhZG93Qmx1cik7CisgICAgICAgIGRyYXdX
aXRoU2hhZG93SGVscGVyKGNvbnRleHQsIHJlbmRlclRhcmdldC5nZXQoKSwgRmxvYXRSZWN0KCks
IGN1cnJlbnRMYXllci5zaGFkb3dDb2xvciwgY3VycmVudExheWVyLnNoYWRvd09mZnNldCwgY3Vy
cmVudExheWVyLnNoYWRvd0JsdXIpOwogICAgIGVsc2UgeworICAgICAgICBDT01QdHI8SUQyRDFC
aXRtYXA+IGJpdG1hcDsKKyAgICAgICAgaHIgPSByZW5kZXJUYXJnZXQtPkdldEJpdG1hcCgmYml0
bWFwKTsKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQoU1VDQ0VFREVEKGhyKSk7CisKICAgICAgICAg
Q09NUHRyPElEMkQxQml0bWFwQnJ1c2g+IGJpdG1hcEJydXNoOwogICAgICAgICBhdXRvIGJpdG1h
cEJydXNoUHJvcGVydGllcyA9IEQyRDE6OkJpdG1hcEJydXNoUHJvcGVydGllcygpOwogICAgICAg
ICBhdXRvIGJydXNoUHJvcGVydGllcyA9IEQyRDE6OkJydXNoUHJvcGVydGllcygpOwpJbmRleDog
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0RpcmVjdDJET3BlcmF0aW9ucy5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9EaXJl
Y3QyRE9wZXJhdGlvbnMuaAkocmV2aXNpb24gMjUwNDI4KQorKysgU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3Mvd2luL0RpcmVjdDJET3BlcmF0aW9ucy5oCSh3b3JraW5nIGNvcHkpCkBA
IC0xMzMsOSArMTMzLDggQEAgdm9pZCBkcmF3TmF0aXZlSW1hZ2UoUGxhdGZvcm1Db250ZXh0RGly
ZQogdm9pZCBkcmF3UGF0aChQbGF0Zm9ybUNvbnRleHREaXJlY3QyRCYsIGNvbnN0IFBhdGgmLCBj
b25zdCBTdHJva2VTb3VyY2UmLCBjb25zdCBTaGFkb3dTdGF0ZSYpOwogdm9pZCBkcmF3UGF0dGVy
bihQbGF0Zm9ybUNvbnRleHREaXJlY3QyRCYsIENPTVB0cjxJRDJEMUJpdG1hcD4mJiwgY29uc3Qg
SW50U2l6ZSYsIGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IEZsb2F0UmVjdCYsIGNvbnN0IEFmZmlu
ZVRyYW5zZm9ybSYsIGNvbnN0IEZsb2F0UG9pbnQmLCBDb21wb3NpdGVPcGVyYXRvciwgQmxlbmRN
b2RlKTsKIAotdm9pZCBkcmF3V2l0aG91dFNoYWRvdyhQbGF0Zm9ybUNvbnRleHREaXJlY3QyRCYs
IGNvbnN0IEZsb2F0UmVjdCYgYm91bmRpbmdSZWN0LCBjb25zdCBXVEY6OkZ1bmN0aW9uPHZvaWQo
SUQyRDFSZW5kZXJUYXJnZXQqKT4mIGRyYXdDb21tYW5kcyk7Ci12b2lkIGRyYXdXaXRoU2hhZG93
KFBsYXRmb3JtQ29udGV4dERpcmVjdDJEJiwgY29uc3QgRmxvYXRSZWN0JiBib3VuZGluZ1JlY3Qs
IGNvbnN0IFNoYWRvd1N0YXRlJiwgY29uc3QgV1RGOjpGdW5jdGlvbjx2b2lkKElEMkQxUmVuZGVy
VGFyZ2V0Kik+JiBkcmF3Q29tbWFuZHMpOwotdm9pZCBkcmF3V2l0aFNoYWRvd0hlbHBlcihJRDJE
MVJlbmRlclRhcmdldCogY29udGV4dCwgSUQyRDFCaXRtYXAqLCBjb25zdCBDb2xvciYgc2hhZG93
Q29sb3IsIGNvbnN0IEZsb2F0U2l6ZSYgc2hhZG93T2Zmc2V0LCBmbG9hdCBzaGFkb3dCbHVyKTsK
K3ZvaWQgZHJhd1dpdGhvdXRTaGFkb3coUGxhdGZvcm1Db250ZXh0RGlyZWN0MkQmLCBXVEY6OkZ1
bmN0aW9uPHZvaWQoSUQyRDFSZW5kZXJUYXJnZXQqKT4mJiBkcmF3Q29tbWFuZHMpOwordm9pZCBk
cmF3V2l0aFNoYWRvdyhQbGF0Zm9ybUNvbnRleHREaXJlY3QyRCYsIEZsb2F0UmVjdCBib3VuZGlu
Z1JlY3QsIGNvbnN0IFNoYWRvd1N0YXRlJiwgV1RGOjpGdW5jdGlvbjx2b2lkKElEMkQxUmVuZGVy
VGFyZ2V0Kik+JiYgZHJhd0NvbW1hbmRzKTsKIAogdm9pZCBkcmF3UmVjdChQbGF0Zm9ybUNvbnRl
eHREaXJlY3QyRCYsIGNvbnN0IEZsb2F0UmVjdCYsIGZsb2F0LCBjb25zdCBDb2xvciYsIFN0cm9r
ZVN0eWxlLCBjb25zdCBDb2xvciYpOwogdm9pZCBkcmF3TGluZShQbGF0Zm9ybUNvbnRleHREaXJl
Y3QyRCYsIGNvbnN0IEZsb2F0UG9pbnQmLCBjb25zdCBGbG9hdFBvaW50JiwgU3Ryb2tlU3R5bGUs
IGNvbnN0IENvbG9yJiwgZmxvYXQsIGJvb2wpOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3Mvd2luL0RpcmVjdDJEVXRpbGl0aWVzLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vRGlyZWN0MkRVdGlsaXRpZXMuY3BwCShy
ZXZpc2lvbiAyNTA0MjgpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4v
RGlyZWN0MkRVdGlsaXRpZXMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02NSwzMyArNjUsNDUgQEAg
RmxvYXRTaXplIGJpdG1hcFNpemUoSUQyRDFCaXRtYXAqIGJpdG1hcAogICAgIHJldHVybiBiaXRt
YXBTb3VyY2UtPkdldFNpemUoKTsKIH0KIAotRmxvYXRQb2ludCBiaXRtYXBSZXNvbHV0aW9uKElX
SUNCaXRtYXBTb3VyY2UqIGJpdG1hcFNvdXJjZSkKK0Zsb2F0U2l6ZSBiaXRtYXBSZXNvbHV0aW9u
KElXSUNCaXRtYXBTb3VyY2UqIGJpdG1hcFNvdXJjZSkKIHsKLSAgICBjb25zdGV4cHIgZG91Ymxl
IGRwaUJhc2UgPSA5Ni4wOworICAgIGNvbnN0ZXhwciBkb3VibGUgZHBpQmFzZSA9IDk2OwogCiAg
ICAgZG91YmxlIGRwaVgsIGRwaVk7CiAgICAgSFJFU1VMVCBociA9IGJpdG1hcFNvdXJjZS0+R2V0
UmVzb2x1dGlvbigmZHBpWCwgJmRwaVkpOwogICAgIGlmICghU1VDQ0VFREVEKGhyKSkKICAgICAg
ICAgcmV0dXJuIHsgfTsKIAotICAgIEZsb2F0UG9pbnQgcmVzdWx0KGRwaVgsIGRwaVkpOworICAg
IEZsb2F0U2l6ZSByZXN1bHQoZHBpWCwgZHBpWSk7CiAgICAgcmVzdWx0LnNjYWxlKDEuMCAvIGRw
aUJhc2UpOwogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLUZsb2F0UG9pbnQgYml0bWFwUmVzb2x1
dGlvbihJRDJEMUJpdG1hcCogYml0bWFwKQorRmxvYXRTaXplIGJpdG1hcFJlc29sdXRpb24oSUQy
RDFCaXRtYXAqIGJpdG1hcCkKIHsKLSAgICBjb25zdGV4cHIgZG91YmxlIGRwaUJhc2UgPSA5Ni4w
OworICAgIGNvbnN0ZXhwciBkb3VibGUgZHBpQmFzZSA9IDk2OwogCiAgICAgZmxvYXQgZHBpWCwg
ZHBpWTsKICAgICBiaXRtYXAtPkdldERwaSgmZHBpWCwgJmRwaVkpOwogCi0gICAgRmxvYXRQb2lu
dCByZXN1bHQoZHBpWCwgZHBpWSk7CisgICAgRmxvYXRTaXplIHJlc3VsdChkcGlYLCBkcGlZKTsK
ICAgICByZXN1bHQuc2NhbGUoMS4wIC8gZHBpQmFzZSk7CiAgICAgcmV0dXJuIHJlc3VsdDsKIAog
fQogCitGbG9hdFNpemUgYml0bWFwUmVzb2x1dGlvbihJRDJEMVJlbmRlclRhcmdldCogdGFyZ2V0
KQoreworICAgIGNvbnN0ZXhwciBkb3VibGUgZHBpQmFzZSA9IDk2OworCisgICAgZmxvYXQgZHBp
WCwgZHBpWTsKKyAgICB0YXJnZXQtPkdldERwaSgmZHBpWCwgJmRwaVkpOworCisgICAgRmxvYXRT
aXplIHJlc3VsdChkcGlYLCBkcGlZKTsKKyAgICByZXN1bHQuc2NhbGUoMS4wIC8gZHBpQmFzZSk7
CisgICAgcmV0dXJuIHJlc3VsdDsKKworfQogdW5zaWduZWQgYml0c1BlclBpeGVsKEdVSUQgYml0
bWFwRm9ybWF0KQogewogICAgIENPTVB0cjxJV0lDQ29tcG9uZW50SW5mbz4gY29tcG9uZW50SW5m
bzsKQEAgLTQ3Miw2ICs0ODQsMzQgQEAgQ09NUHRyPElEWEdJU3dhcENoYWluPiBzd2FwQ2hhaW5P
ZlNpemVGbwogICAgIHJldHVybiBzd2FwQ2hhaW47CiB9CiAKK0NPTVB0cjxJRDJEMUJpdG1hcD4g
Y3JlYXRlQml0bWFwQ29weUZyb21Db250ZXh0KElEMkQxQml0bWFwUmVuZGVyVGFyZ2V0KiBiaXRt
YXBUYXJnZXQpCit7CisgICAgQ09NUHRyPElEMkQxQml0bWFwPiBjdXJyZW50Q2FudmFzOworICAg
IEhSRVNVTFQgaHIgPSBiaXRtYXBUYXJnZXQtPkdldEJpdG1hcCgmY3VycmVudENhbnZhcyk7Cisg
ICAgaWYgKCFTVUNDRUVERUQoaHIpKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgIERp
cmVjdDJEOjp3cml0ZURpYWdub3N0aWNQTkdUb1BhdGgoYml0bWFwVGFyZ2V0LCBjdXJyZW50Q2Fu
dmFzLmdldCgpLCBMIkM6L1Byb2plY3RzL1dlYktpdC9kYXRhL2N1cnJlbnRDYW52YXMucG5nIik7
CisKKyAgICBhdXRvIGJpdG1hcENyZWF0ZVByb3BlcnRpZXMgPSBiaXRtYXBQcm9wZXJ0aWVzKCk7
CisKKyAgICBDT01QdHI8SUQyRDFCaXRtYXA+IGJpdG1hcDsKKyAgICBEMkQxX1NJWkVfVSBiaXRt
YXBTaXplID0gY3VycmVudENhbnZhcy0+R2V0UGl4ZWxTaXplKCk7CisgICAgaHIgPSBiaXRtYXBU
YXJnZXQtPkNyZWF0ZUJpdG1hcChiaXRtYXBTaXplLCBiaXRtYXBDcmVhdGVQcm9wZXJ0aWVzLCAm
Yml0bWFwKTsKKyAgICBpZiAoIVNVQ0NFRURFRChocikpCisgICAgICAgIHJldHVybiBudWxscHRy
OworCisgICAgYXV0byB0YXJnZXRQb3MgPSBEMkQxOjpQb2ludDJVKCk7CisgICAgRDJEMV9SRUNU
X1UgZGF0YVJlY3QgPSBEMkQxOjpSZWN0VSgwLCAwLCBiaXRtYXBTaXplLndpZHRoLCBiaXRtYXBT
aXplLmhlaWdodCk7CisgICAgaHIgPSBiaXRtYXAtPkNvcHlGcm9tQml0bWFwKCZ0YXJnZXRQb3Ms
IGN1cnJlbnRDYW52YXMuZ2V0KCksICZkYXRhUmVjdCk7CisgICAgaWYgKCFTVUNDRUVERUQoaHIp
KQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBEaXJlY3QyRDo6d3JpdGVEaWFnbm9zdGlj
UE5HVG9QYXRoKGJpdG1hcFRhcmdldCwgYml0bWFwLmdldCgpLCBMIkM6L1Byb2plY3RzL1dlYktp
dC9kYXRhL2JpdG1hcC5wbmciKTsKKworICAgIHJldHVybiBiaXRtYXA7Cit9CisKIH0gLy8gbmFt
ZXNwYWNlIERpcmVjdDJECiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9EaXJlY3QyRFV0aWxpdGllcy5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9EaXJlY3QyRFV0aWxp
dGllcy5oCShyZXZpc2lvbiAyNTA0MjgpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy93aW4vRGlyZWN0MkRVdGlsaXRpZXMuaAkod29ya2luZyBjb3B5KQpAQCAtNzIsOCArNzIs
OSBAQCB2b2lkIGluUGxhY2VTd2l6emxlKHVpbnQ4X3QqIGJ5dGVEYXRhLCB1CiAKIEludFNpemUg
Yml0bWFwU2l6ZShJV0lDQml0bWFwU291cmNlKik7CiBGbG9hdFNpemUgYml0bWFwU2l6ZShJRDJE
MUJpdG1hcCopOwotRmxvYXRQb2ludCBiaXRtYXBSZXNvbHV0aW9uKElXSUNCaXRtYXBTb3VyY2Uq
KTsKLUZsb2F0UG9pbnQgYml0bWFwUmVzb2x1dGlvbihJRDJEMUJpdG1hcCopOworRmxvYXRTaXpl
IGJpdG1hcFJlc29sdXRpb24oSVdJQ0JpdG1hcFNvdXJjZSopOworRmxvYXRTaXplIGJpdG1hcFJl
c29sdXRpb24oSUQyRDFCaXRtYXAqKTsKK0Zsb2F0U2l6ZSBiaXRtYXBSZXNvbHV0aW9uKElEMkQx
UmVuZGVyVGFyZ2V0Kik7CiB1bnNpZ25lZCBiaXRzUGVyUGl4ZWwoR1VJRCk7CiBDT01QdHI8SUQy
RDFCaXRtYXA+IGNyZWF0ZUJpdG1hcChJRDJEMVJlbmRlclRhcmdldCosIGNvbnN0IEludFNpemUm
KTsKIENPTVB0cjxJV0lDQml0bWFwPiBjcmVhdGVXaWNCaXRtYXAoY29uc3QgSW50U2l6ZSYpOwpA
QCAtODQsNiArODUsNyBAQCBDT01QdHI8SUQyRDFCaXRtYXBSZW5kZXJUYXJnZXQ+IGNyZWF0ZUJp
CiBDT01QdHI8SUQyRDFEQ1JlbmRlclRhcmdldD4gY3JlYXRlR0RJUmVuZGVyVGFyZ2V0KCk7CiBD
T01QdHI8SURYR0lTdXJmYWNlMT4gY3JlYXRlRFhHSVN1cmZhY2VPZlNpemUoY29uc3QgSW50U2l6
ZSYsIElEM0QxMURldmljZTEqLCBib29sIGNyb3NzUHJvY2Vzcyk7CiBDT01QdHI8SUQyRDFSZW5k
ZXJUYXJnZXQ+IGNyZWF0ZVN1cmZhY2VSZW5kZXJUYXJnZXQoSURYR0lTdXJmYWNlMSopOworQ09N
UHRyPElEMkQxQml0bWFwPiBjcmVhdGVCaXRtYXBDb3B5RnJvbUNvbnRleHQoSUQyRDFCaXRtYXBS
ZW5kZXJUYXJnZXQqKTsKIAogdm9pZCBjb3B5UmVjdEZyb21PbmVTdXJmYWNlVG9Bbm90aGVyKElE
MkQxQml0bWFwKiBmcm9tLCBJRDJEMUJpdG1hcCogdG8sIGNvbnN0IEludFNpemUmIHNvdXJjZU9m
ZnNldCwgY29uc3QgSW50UmVjdCYsIGNvbnN0IEludFNpemUmIGRlc3RPZmZzZXQgPSBJbnRTaXpl
KCkpOwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vR3JhZGll
bnREaXJlY3QyRC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3Mvd2luL0dyYWRpZW50RGlyZWN0MkQuY3BwCShyZXZpc2lvbiAyNTA0MjgpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vR3JhZGllbnREaXJlY3QyRC5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTMwLDYgKzMwLDcgQEAKICNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQu
aCIKICNpbmNsdWRlICJQbGF0Zm9ybUNvbnRleHREaXJlY3QyRC5oIgogI2luY2x1ZGUgPGQyZDEu
aD4KKyNpbmNsdWRlIDx3dGYvTWF0aEV4dHJhcy5oPgogI2luY2x1ZGUgPHd0Zi9SZXRhaW5QdHIu
aD4KIAogI2RlZmluZSBHUkFESUVOVF9EUkFXSU5HIDMKQEAgLTcwLDYgKzcxLDM1IEBAIHZvaWQg
R3JhZGllbnQ6OmdlbmVyYXRlR3JhZGllbnQoSUQyRDFSZW4KICAgICAgICAgZ3JhZGllbnRTdG9w
cy5hcHBlbmQoRDJEMTo6R3JhZGllbnRTdG9wKHN0b3Aub2Zmc2V0LCBEMkQxOjpDb2xvckYociwg
ZywgYiwgYSkpKTsKICAgICB9CiAKKyAgICBXVEY6OnN3aXRjaE9uKG1fZGF0YSwKKyAgICAgICAg
WyZdIChjb25zdCBMaW5lYXJEYXRhJikgeworICAgICAgICAgICAgLy8gTm8gYWN0aW9uIG5lZWRl
ZC4KKyAgICAgICAgfSwKKyAgICAgICAgWyZdIChjb25zdCBSYWRpYWxEYXRhJiBkYXRhKSB7Cisg
ICAgICAgICAgICBpZiAoZGF0YS5zdGFydFJhZGl1cyAmJiBkYXRhLmVuZFJhZGl1cykgeworICAg
ICAgICAgICAgICAgIGZsb2F0IHN0YXJ0UG9zaXRpb24gPSBzdGQ6OmFicyhkYXRhLnN0YXJ0UmFk
aXVzIC8gZGF0YS5lbmRSYWRpdXMpOworICAgICAgICAgICAgICAgIGlmIChzdGFydFBvc2l0aW9u
ID4gMS4wKQorICAgICAgICAgICAgICAgICAgICBzdGFydFBvc2l0aW9uID0gMS4wIC8gc3RhcnRQ
b3NpdGlvbjsKKyAgICAgICAgICAgICAgICBmbG9hdCBhdmFpbGFibGVSYW5nZSA9IDEuMCAtIHN0
YXJ0UG9zaXRpb247CisgICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoYXZhaWxhYmxlUmFu
Z2UgPD0gMS4wICYmIGF2YWlsYWJsZVJhbmdlID49IDApOworCisgICAgICAgICAgICAgICAgZm9y
IChhdXRvJiBzdG9wIDogZ3JhZGllbnRTdG9wcykgeworICAgICAgICAgICAgICAgICAgICBzdG9w
LnBvc2l0aW9uICo9IGF2YWlsYWJsZVJhbmdlOworICAgICAgICAgICAgICAgICAgICBzdG9wLnBv
c2l0aW9uICs9IHN0YXJ0UG9zaXRpb247CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAg
ICAgICAgLy8gUmVzdG9yZSB0aGUgJ3N0YXJ0JyBwb3NpdGlvbgorICAgICAgICAgICAgICAgIGF1
dG8gZmlyc3RTdG9wID0gZ3JhZGllbnRTdG9wcy5maXJzdCgpOworICAgICAgICAgICAgICAgIGZp
cnN0U3RvcC5wb3NpdGlvbiA9IDA7CisKKyAgICAgICAgICAgICAgICBncmFkaWVudFN0b3BzLmlu
c2VydCgwLCBmaXJzdFN0b3ApOworICAgICAgICAgICAgfQorICAgICAgICB9LAorICAgICAgICBb
Jl0gKGNvbnN0IENvbmljRGF0YSYpIHsKKyAgICAgICAgICAgIC8vIEZJWE1FOiBBc3Nlc3Mgd2hl
dGhlciBuZWVkZWQgZm9yIENvbmljIEdyYWRpZW50cy4KKyAgICAgICAgfQorICAgICk7CisKICAg
ICBDT01QdHI8SUQyRDFHcmFkaWVudFN0b3BDb2xsZWN0aW9uPiBncmFkaWVudFN0b3BDb2xsZWN0
aW9uOwogICAgIEhSRVNVTFQgaHIgPSByZW5kZXJUYXJnZXQtPkNyZWF0ZUdyYWRpZW50U3RvcENv
bGxlY3Rpb24oZ3JhZGllbnRTdG9wcy5kYXRhKCksIGdyYWRpZW50U3RvcHMuc2l6ZSgpLCAmZ3Jh
ZGllbnRTdG9wQ29sbGVjdGlvbik7CiAgICAgUkVMRUFTRV9BU1NFUlQoU1VDQ0VFREVEKGhyKSk7
CkBAIC05MCwxMiArMTIwLDE0IEBAIHZvaWQgR3JhZGllbnQ6OmdlbmVyYXRlR3JhZGllbnQoSUQy
RDFSZW4KICAgICAgICAgICAgIG1fZ3JhZGllbnQgPSBsaW5lYXJHcmFkaWVudDsKICAgICAgICAg
fSwKICAgICAgICAgWyZdIChjb25zdCBSYWRpYWxEYXRhJiBkYXRhKSB7Ci0gICAgICAgICAgICBG
bG9hdFNpemUgb2Zmc2V0ID0gZGF0YS5wb2ludDEgLSBkYXRhLnBvaW50MDsKLSAgICAgICAgICAg
IElEMkQxUmFkaWFsR3JhZGllbnRCcnVzaCogcmFkaWFsR3JhZGllbnQgPSBudWxscHRyOwotICAg
ICAgICAgICAgZmxvYXQgcmFkaXVzWCA9IGRhdGEuZW5kUmFkaXVzICsgb2Zmc2V0LndpZHRoKCk7
CisgICAgICAgICAgICBGbG9hdFNpemUgb2Zmc2V0ID0gZGF0YS5wb2ludDAgLSBkYXRhLnBvaW50
MTsKKyAgICAgICAgICAgIEZsb2F0UG9pbnQgY2VudGVyID0gZGF0YS5wb2ludDE7CisgICAgICAg
ICAgICBmbG9hdCByYWRpdXNYID0gZGF0YS5lbmRSYWRpdXM7CiAgICAgICAgICAgICBmbG9hdCBy
YWRpdXNZID0gcmFkaXVzWCAvIGRhdGEuYXNwZWN0UmF0aW87CisKKyAgICAgICAgICAgIElEMkQx
UmFkaWFsR3JhZGllbnRCcnVzaCogcmFkaWFsR3JhZGllbnQgPSBudWxscHRyOwogICAgICAgICAg
ICAgaHIgPSByZW5kZXJUYXJnZXQtPkNyZWF0ZVJhZGlhbEdyYWRpZW50QnJ1c2goCi0gICAgICAg
ICAgICAgICAgRDJEMTo6UmFkaWFsR3JhZGllbnRCcnVzaFByb3BlcnRpZXMoZGF0YS5wb2ludDAs
IEQyRDE6OlBvaW50MkYob2Zmc2V0LndpZHRoKCksIG9mZnNldC5oZWlnaHQoKSksIHJhZGl1c1gs
IHJhZGl1c1kpLAorICAgICAgICAgICAgICAgIEQyRDE6OlJhZGlhbEdyYWRpZW50QnJ1c2hQcm9w
ZXJ0aWVzKGNlbnRlciwgRDJEMTo6UG9pbnQyRihvZmZzZXQud2lkdGgoKSwgb2Zmc2V0LmhlaWdo
dCgpKSwgcmFkaXVzWCwgcmFkaXVzWSksCiAgICAgICAgICAgICAgICAgRDJEMTo6QnJ1c2hQcm9w
ZXJ0aWVzKCksIGdyYWRpZW50U3RvcENvbGxlY3Rpb24uZ2V0KCksCiAgICAgICAgICAgICAgICAg
JnJhZGlhbEdyYWRpZW50KTsKICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKFNVQ0NFRURFRCho
cikpOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ltYWdlQnVm
ZmVyRGF0YURpcmVjdDJELmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy93aW4vSW1hZ2VCdWZmZXJEYXRhRGlyZWN0MkQuY3BwCShyZXZpc2lvbiAyNTA0
MjgpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vSW1hZ2VCdWZmZXJE
YXRhRGlyZWN0MkQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMDQsNyArMzA0LDcgQEAgYm9vbCBJ
bWFnZUJ1ZmZlckRhdGE6OnJlYWREYXRhRnJvbUJpdG1hcAogCiAgICAgY29udGV4dC0+ZW5kRHJh
dygpOwogCi0gICAgQ09NUHRyPElEMkQxRGV2aWNlQ29udGV4dD4gZDJkRGV2aWNlQ29udGV4dChR
dWVyeSwgcGxhdGZvcm1Db250ZXh0LT5yZW5kZXJUYXJnZXQoKSk7CisgICAgQ09NUHRyPElEMkQx
RGV2aWNlQ29udGV4dD4gZDJkRGV2aWNlQ29udGV4dCA9IHBsYXRmb3JtQ29udGV4dC0+ZGV2aWNl
Q29udGV4dCgpOwogICAgIEFTU0VSVCghIWQyZERldmljZUNvbnRleHQpOwogCiAgICAgYXV0byBi
eXRlc1BlclJvd0luRGF0YSA9IHBpeGVsU2l6ZS53aWR0aCgpICogNDsKQEAgLTQ5Nyw2ICs0OTcs
NyBAQCBDT01QdHI8SUQyRDFCaXRtYXA+IEltYWdlQnVmZmVyRGF0YTo6Y29tCiAgICAgfQogCiAg
ICAgYXV0byBzaXplID0gYml0bWFwLT5HZXRQaXhlbFNpemUoKTsKKyAgICBBU1NFUlQoc2l6ZS5o
ZWlnaHQgJiYgc2l6ZS53aWR0aCk7CiAKICAgICBDaGVja2VkPHVuc2lnbmVkLCBSZWNvcmRPdmVy
Zmxvdz4gbnVtQnl0ZXMgPSBzaXplLndpZHRoICogc2l6ZS5oZWlnaHQgKiA0OwogICAgIGlmIChu
dW1CeXRlcy5oYXNPdmVyZmxvd2VkKCkpCkBAIC01MDYsMTYgKzUwNywxMyBAQCBDT01QdHI8SUQy
RDFCaXRtYXA+IEltYWdlQnVmZmVyRGF0YTo6Y29tCiAgICAgLy8gV2UgY2Fubm90IGFjY2VzcyB0
aGUgZGF0YSBiYWNraW5nIGFuIElXSUNCaXRtYXAgd2hpbGUgYW4gYWN0aXZlIGRyYXcgc2Vzc2lv
biBpcyBvcGVuLgogICAgIGNvbnRleHQtPmVuZERyYXcoKTsKIAotICAgIENPTVB0cjxJRDJEMURl
dmljZUNvbnRleHQ+IHNvdXJjZURldmljZUNvbnRleHQ7Ci0gICAgSFJFU1VMVCBociA9IHBsYXRm
b3JtQ29udGV4dC0+cmVuZGVyVGFyZ2V0KCktPlF1ZXJ5SW50ZXJmYWNlKF9fdXVpZG9mKElEMkQx
RGV2aWNlQ29udGV4dCksIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCoqPigmc291cmNlRGV2aWNlQ29u
dGV4dCkpOwotICAgIEFTU0VSVChTVUNDRUVERUQoaHIpKTsKLQorICAgIENPTVB0cjxJRDJEMURl
dmljZUNvbnRleHQ+IHNvdXJjZURldmljZUNvbnRleHQgPSBwbGF0Zm9ybUNvbnRleHQtPmRldmlj
ZUNvbnRleHQoKTsKICAgICBpZiAoIXNvdXJjZURldmljZUNvbnRleHQpCiAgICAgICAgIHJldHVy
biBudWxscHRyOwogCiAgICAgQ09NUHRyPElEMkQxQml0bWFwMT4gc291cmNlQ1BVQml0bWFwOwog
ICAgIEQyRDFfQklUTUFQX1BST1BFUlRJRVMxIGJpdG1hcFByb3BlcnRpZXMgPSBEMkQxOjpCaXRt
YXBQcm9wZXJ0aWVzMShEMkQxX0JJVE1BUF9PUFRJT05TX0NQVV9SRUFEIHwgRDJEMV9CSVRNQVBf
T1BUSU9OU19DQU5OT1RfRFJBVywgRGlyZWN0MkQ6OnBpeGVsRm9ybWF0KCkpOwotICAgIGhyID0g
c291cmNlRGV2aWNlQ29udGV4dC0+Q3JlYXRlQml0bWFwKGJpdG1hcC0+R2V0UGl4ZWxTaXplKCks
IG51bGxwdHIsIGJ5dGVzUGVyUm93LnVuc2FmZUdldCgpLCBiaXRtYXBQcm9wZXJ0aWVzLCAmc291
cmNlQ1BVQml0bWFwKTsKKyAgICBIUkVTVUxUIGhyID0gc291cmNlRGV2aWNlQ29udGV4dC0+Q3Jl
YXRlQml0bWFwKGJpdG1hcC0+R2V0UGl4ZWxTaXplKCksIG51bGxwdHIsIGJ5dGVzUGVyUm93LnVu
c2FmZUdldCgpLCBiaXRtYXBQcm9wZXJ0aWVzLCAmc291cmNlQ1BVQml0bWFwKTsKICAgICBpZiAo
IVNVQ0NFRURFRChocikpCiAgICAgICAgIHJldHVybiBudWxscHRyOwogCkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vUGF0aERpcmVjdDJELmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vUGF0aERpcmVjdDJELmNw
cAkocmV2aXNpb24gMjUwNDI4KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
d2luL1BhdGhEaXJlY3QyRC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMyNyw2ICszMjcsMjIgQEAg
RmxvYXRSZWN0IFBhdGg6OmZhc3RCb3VuZGluZ1JlY3QoKSBjb25zdAogICAgIHJldHVybiBib3Vu
ZHM7CiB9CiAKK0Zsb2F0UmVjdCBQYXRoOjpmYXN0Qm91bmRpbmdSZWN0Rm9yU3Ryb2tlKGNvbnN0
IFBsYXRmb3JtQ29udGV4dERpcmVjdDJEJiBwbGF0Zm9ybUNvbnRleHQpIGNvbnN0Cit7CisgICAg
aWYgKGlzTnVsbCgpKQorICAgICAgICByZXR1cm4gRmxvYXRSZWN0KCk7CisKKyAgICBmbG9hdCB0
b2xlcmFuY2UgPSAxMC4wOworCisgICAgYXV0byogc3Ryb2tlU3R5bGUgPSBjb25zdF9jYXN0PFBs
YXRmb3JtQ29udGV4dERpcmVjdDJEJj4ocGxhdGZvcm1Db250ZXh0KS5zdHJva2VTdHlsZSgpOwor
CisgICAgRDJEMV9SRUNUX0YgYm91bmRzID0geyB9OworICAgIGlmICghU1VDQ0VFREVEKG1fcGF0
aC0+R2V0V2lkZW5lZEJvdW5kcyhwbGF0Zm9ybUNvbnRleHQuc3Ryb2tlVGhpY2tuZXNzKCksIHN0
cm9rZVN0eWxlLCBudWxscHRyLCB0b2xlcmFuY2UsICZib3VuZHMpKSkKKyAgICAgICAgcmV0dXJu
IEZsb2F0UmVjdCgpOworCisgICAgcmV0dXJuIGJvdW5kczsKK30KKwogRmxvYXRSZWN0IFBhdGg6
OnN0cm9rZUJvdW5kaW5nUmVjdChTdHJva2VTdHlsZUFwcGxpZXIqIGFwcGxpZXIpIGNvbnN0CiB7
CiAgICAgaWYgKGlzTnVsbCgpKQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3Mvd2luL1BsYXRmb3JtQ29udGV4dERpcmVjdDJELmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vUGxhdGZvcm1Db250ZXh0RGlyZWN0MkQuY3Bw
CShyZXZpc2lvbiAyNTA0MjgpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93
aW4vUGxhdGZvcm1Db250ZXh0RGlyZWN0MkQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOSw2ICsy
OSw3IEBACiAjaWYgVVNFKERJUkVDVDJEKQogCiAjaW5jbHVkZSAiRGlyZWN0MkRPcGVyYXRpb25z
LmgiCisjaW5jbHVkZSAiRGlyZWN0MkRVdGlsaXRpZXMuaCIKICNpbmNsdWRlIDxkMmQxLmg+CiAK
IG5hbWVzcGFjZSBXZWJDb3JlIHsKQEAgLTUxLDYgKzUyLDE3IEBAIFBsYXRmb3JtQ29udGV4dERp
cmVjdDJEOjpQbGF0Zm9ybUNvbnRleHQKIHsKICAgICBtX3N0YXRlU3RhY2suYXBwZW5kKFN0YXRl
KCkpOwogICAgIG1fc3RhdGUgPSAmbV9zdGF0ZVN0YWNrLmxhc3QoKTsKKworICAgIG1fZGV2aWNl
Q29udGV4dC5xdWVyeShtX3JlbmRlclRhcmdldC5nZXQoKSk7CisgICAgUkVMRUFTRV9BU1NFUlQo
ISFtX2RldmljZUNvbnRleHQpOworfQorCit2b2lkIFBsYXRmb3JtQ29udGV4dERpcmVjdDJEOjpz
ZXRSZW5kZXJUYXJnZXQoSUQyRDFSZW5kZXJUYXJnZXQqIHJlbmRlclRhcmdldCkKK3sKKyAgICBt
X3JlbmRlclRhcmdldCA9IHJlbmRlclRhcmdldDsKKworICAgIG1fZGV2aWNlQ29udGV4dC5xdWVy
eShtX3JlbmRlclRhcmdldC5nZXQoKSk7CisgICAgUkVMRUFTRV9BU1NFUlQoISFtX2RldmljZUNv
bnRleHQpOwogfQogCiBJRDJEMUxheWVyKiBQbGF0Zm9ybUNvbnRleHREaXJlY3QyRDo6Y2xpcExh
eWVyKCkgY29uc3QKQEAgLTc0LDEwICs4Niw3IEBAIHZvaWQgUGxhdGZvcm1Db250ZXh0RGlyZWN0
MkQ6OnJlc3RvcmUoKQogewogICAgIEFTU0VSVChtX3JlbmRlclRhcmdldCk7CiAKLSAgICAvLyBU
aGVyZSBzaG91bGQgYWx3YXlzIGJlIGF0IGxlYXN0IG9uZSBtYW51YWxseSBzYXZlZCBzdGF0ZSBp
ZiBhIHJlc3RvcmUgaXMgYmVpbmcgY2FsbGVkLgotICAgIEFTU0VSVChtX3N0YXRlU3RhY2suc2l6
ZSgpID4gMSk7Ci0KLSAgICAvLyBDYW4ndCByZXN0b3JlIGlmIHdlIG5ldmVyIGNhbGxlZCBzYXZl
LgorICAgIC8vIE5vIG5lZWQgdG8gcmVzdG9yZSBpZiB3ZSBkb24ndCBoYXZlIGEgc2F2ZWQgZWxl
bWVudCBvbiB0aGUgc3RhY2suCiAgICAgaWYgKG1fc3RhdGVTdGFjay5zaXplKCkgPT0gMSkKICAg
ICAgICAgcmV0dXJuOwogCkBAIC0yNzgsNyArMjg3LDcgQEAgdm9pZCBQbGF0Zm9ybUNvbnRleHRE
aXJlY3QyRDo6ZW5kRHJhdygpCiB7CiAgICAgQVNTRVJUKG1fcmVuZGVyVGFyZ2V0KTsKIAotICAg
IHdoaWxlIChtX3N0YXRlU3RhY2suc2l6ZSgpID4gMSkKKyAgICBpZiAobV9zdGF0ZVN0YWNrLnNp
emUoKSA+IDEpCiAgICAgICAgIHJlc3RvcmUoKTsKIAogICAgIGNsZWFyQ2xpcHMobV9zdGF0ZS0+
bV9jbGlwcyk7CkBAIC0yOTIsNiArMzAxLDggQEAgdm9pZCBQbGF0Zm9ybUNvbnRleHREaXJlY3Qy
RDo6ZW5kRHJhdygpCiAgICAgICAgIFdURkxvZ0Fsd2F5cygiRmFpbGVkIGluIFBsYXRmb3JtQ29u
dGV4dERpcmVjdDJEOjplbmREcmF3OiBocj0leGQsIGZpcnN0PSVsZCwgc2Vjb25kPSVsZCIsIGhy
LCBmaXJzdCwgc2Vjb25kKTsKIAogICAgIC0tYmVnaW5EcmF3Q291bnQ7CisKKyAgICBjb21wb3Np
dGVJZk5lZWRlZCgpOwogfQogCiB2b2lkIFBsYXRmb3JtQ29udGV4dERpcmVjdDJEOjpzZXRUYWdz
KEQyRDFfVEFHIHRhZzEsIEQyRDFfVEFHIHRhZzIpCkBAIC0zMTksNiArMzMwLDczIEBAIHZvaWQg
UGxhdGZvcm1Db250ZXh0RGlyZWN0MkQ6OnB1c2hDbGlwKEQKICAgICBtX3N0YXRlLT5tX2NsaXBz
LmFwcGVuZChjbGlwVHlwZSk7CiB9CiAKK3ZvaWQgUGxhdGZvcm1Db250ZXh0RGlyZWN0MkQ6OmNv
bXBvc2l0ZUlmTmVlZGVkKCkKK3sKKyAgICBpZiAoIW1fY29tcG9zaXRlU291cmNlKQorICAgICAg
ICByZXR1cm47CisKKyAgICBDT01QdHI8SUQyRDFCaXRtYXBSZW5kZXJUYXJnZXQ+IGJpdG1hcFRh
cmdldChRdWVyeSwgbV9yZW5kZXJUYXJnZXQuZ2V0KCkpOworICAgIGlmICghYml0bWFwVGFyZ2V0
KQorICAgICAgICByZXR1cm47CisKKyAgICBDT01QdHI8SUQyRDFCaXRtYXA+IGN1cnJlbnRDYW52
YXMgPSBEaXJlY3QyRDo6Y3JlYXRlQml0bWFwQ29weUZyb21Db250ZXh0KGJpdG1hcFRhcmdldC5n
ZXQoKSk7CisgICAgaWYgKCFjdXJyZW50Q2FudmFzKQorICAgICAgICByZXR1cm47CisKKyAgICBD
T01QdHI8SUQyRDFCaXRtYXA+IGJpdG1hcDsKKyAgICBIUkVTVUxUIGhyID0gYml0bWFwVGFyZ2V0
LT5HZXRCaXRtYXAoJmJpdG1hcCk7CisgICAgUkVMRUFTRV9BU1NFUlQoU1VDQ0VFREVEKGhyKSk7
CisgICAgRGlyZWN0MkQ6OndyaXRlRGlhZ25vc3RpY1BOR1RvUGF0aChiaXRtYXBUYXJnZXQuZ2V0
KCksIGJpdG1hcC5nZXQoKSwgTCJDOi9Qcm9qZWN0cy9XZWJLaXQvZGF0YS9hZnRlci5wbmciKTsK
KworICAgIENPTVB0cjxJRDJEMUVmZmVjdD4gZWZmZWN0OworCisgICAgaWYgKG1fY29tcG9zaXRl
TW9kZSAhPSBEMkQxX0NPTVBPU0lURV9NT0RFX0ZPUkNFX0RXT1JEKSB7CisgICAgICAgIG1fZGV2
aWNlQ29udGV4dC0+Q3JlYXRlRWZmZWN0KENMU0lEX0QyRDFDb21wb3NpdGUsICZlZmZlY3QpOwor
ICAgICAgICBlZmZlY3QtPlNldElucHV0KDAsIG1fY29tcG9zaXRlU291cmNlLmdldCgpKTsKKyAg
ICAgICAgZWZmZWN0LT5TZXRJbnB1dCgxLCBjdXJyZW50Q2FudmFzLmdldCgpKTsKKyAgICAgICAg
ZWZmZWN0LT5TZXRWYWx1ZShEMkQxX0NPTVBPU0lURV9QUk9QX01PREUsIG1fY29tcG9zaXRlTW9k
ZSk7CisgICAgfSBlbHNlIGlmIChtX2JsZW5kTW9kZSAhPSBEMkQxX0JMRU5EX01PREVfRk9SQ0Vf
RFdPUkQpIHsKKyAgICAgICAgbV9kZXZpY2VDb250ZXh0LT5DcmVhdGVFZmZlY3QoQ0xTSURfRDJE
MUJsZW5kLCAmZWZmZWN0KTsKKyAgICAgICAgZWZmZWN0LT5TZXRJbnB1dCgwLCBjdXJyZW50Q2Fu
dmFzLmdldCgpKTsKKyAgICAgICAgZWZmZWN0LT5TZXRJbnB1dCgxLCBtX2NvbXBvc2l0ZVNvdXJj
ZS5nZXQoKSk7CisgICAgICAgIGVmZmVjdC0+U2V0VmFsdWUoRDJEMV9CTEVORF9QUk9QX01PREUs
IG1fYmxlbmRNb2RlKTsKKyAgICB9CisKKyAgICBpZiAoZWZmZWN0KSB7CisgICAgICAgIG1fZGV2
aWNlQ29udGV4dC0+QmVnaW5EcmF3KCk7CisgICAgICAgIG1fZGV2aWNlQ29udGV4dC0+Q2xlYXIo
RDJEMTo6Q29sb3JGKDAsIDAsIDAsIDApKTsKKyAgICAgICAgbV9kZXZpY2VDb250ZXh0LT5EcmF3
SW1hZ2UoZWZmZWN0LmdldCgpKTsKKyAgICAgICAgbV9kZXZpY2VDb250ZXh0LT5FbmREcmF3KCk7
CisgICAgfQorCisgICAgbV9jb21wb3NpdGVTb3VyY2UgPSBudWxscHRyOworfQorCit2b2lkIFBs
YXRmb3JtQ29udGV4dERpcmVjdDJEOjpzZXRCbGVuZEFuZENvbXBvc2l0ZU1vZGUoRDJEMV9CTEVO
RF9NT0RFIGJsZW5kLCBEMkQxX0NPTVBPU0lURV9NT0RFIG1vZGUpCit7CisgICAgaWYgKG1vZGUg
PT0gbV9jb21wb3NpdGVNb2RlICYmIGJsZW5kID09IG1fYmxlbmRNb2RlKQorICAgICAgICByZXR1
cm47CisKKyAgICAvLyBEaXJlY3QyRCBoYW5kbGVzIGNvbXBvc2l0aW5nIGJhc2VkIG9uIGJpdG1h
cHMuIElmIHdlIGFyZSBjaGFuZ2luZyB0aGUKKyAgICAvLyBjb21wb3NpdGluZyBtb2RlLCB3ZSBu
ZWVkIHRvIGNhcHR1cmUgdGhlIGN1cnJlbnQgc3RhdGUgb2YgdGhlIHJlbmRlcmluZworICAgIC8v
IGluIGEgYml0bWFwLCBwZXJmb3JtIGRyYXdpbmcgb3BlcmF0aW9ucyB1bnRpbCB3ZSBmaW5pc2gs
IHRoZW4gaGFuZGxlCisgICAgLy8gdGhlIGNvbXBvc3Rpbmcgb2YgdGhlIHR3byBsYXllcnMuCisg
ICAgQ09NUHRyPElEMkQxQml0bWFwUmVuZGVyVGFyZ2V0PiBiaXRtYXBUYXJnZXQoUXVlcnksIG1f
cmVuZGVyVGFyZ2V0LmdldCgpKTsKKyAgICBpZiAoIWJpdG1hcFRhcmdldCkKKyAgICAgICAgcmV0
dXJuOworCisgICAgZW5kRHJhdygpOworCisgICAgbV9jb21wb3NpdGVNb2RlID0gbW9kZTsKKyAg
ICBtX2JsZW5kTW9kZSA9IGJsZW5kOworCisgICAgbV9jb21wb3NpdGVTb3VyY2UgPSBEaXJlY3Qy
RDo6Y3JlYXRlQml0bWFwQ29weUZyb21Db250ZXh0KGJpdG1hcFRhcmdldC5nZXQoKSk7CisKKyAg
ICBiZWdpbkRyYXcoKTsKKworICAgIG1fZGV2aWNlQ29udGV4dC0+Q2xlYXIoRDJEMTo6Q29sb3JG
KDAsIDAsIDAsIDApKTsKK30KKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCiAjZW5kaWYgLy8g
VVNFKERJUkVDVDJEKQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2lu
L1BsYXRmb3JtQ29udGV4dERpcmVjdDJELmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3Mvd2luL1BsYXRmb3JtQ29udGV4dERpcmVjdDJELmgJKHJldmlzaW9u
IDI1MDQyOCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9QbGF0Zm9y
bUNvbnRleHREaXJlY3QyRC5oCSh3b3JraW5nIGNvcHkpCkBAIC01Myw3ICs1Myw5IEBAIHB1Ymxp
YzoKICAgICB+UGxhdGZvcm1Db250ZXh0RGlyZWN0MkQoKTsKIAogICAgIElEMkQxUmVuZGVyVGFy
Z2V0KiByZW5kZXJUYXJnZXQoKSB7IHJldHVybiBtX3JlbmRlclRhcmdldC5nZXQoKTsgfQotICAg
IHZvaWQgc2V0UmVuZGVyVGFyZ2V0KElEMkQxUmVuZGVyVGFyZ2V0KiByZW5kZXJUYXJnZXQpIHsg
bV9yZW5kZXJUYXJnZXQgPSByZW5kZXJUYXJnZXQ7IH0KKyAgICB2b2lkIHNldFJlbmRlclRhcmdl
dChJRDJEMVJlbmRlclRhcmdldCopOworCisgICAgSUQyRDFEZXZpY2VDb250ZXh0KiBkZXZpY2VD
b250ZXh0KCkgeyByZXR1cm4gbV9kZXZpY2VDb250ZXh0LmdldCgpOyB9CiAKICAgICBJRDNEMTFE
ZXZpY2UxKiBkM2REZXZpY2UoKSBjb25zdCB7IHJldHVybiBtX2QzZERldmljZS5nZXQoKTsgfQog
ICAgIHZvaWQgc2V0RDNERGV2aWNlKElEM0QxMURldmljZTEqIGRldmljZSkgeyBtX2QzZERldmlj
ZSA9IGRldmljZTsgfQpAQCAtMTAzLDggKzEwNSw3IEBAIHB1YmxpYzoKICAgICB2b2lkIHNldFN0
cm9rZVRoaWNrbmVzcyhmbG9hdCk7CiAgICAgdm9pZCBzZXREYXNoZXMoY29uc3QgRGFzaEFycmF5
Jik7CiAKLSAgICB2b2lkIHNldEJsZW5kTW9kZShEMkQxX0JMRU5EX01PREUgbW9kZSkgeyBtX2Js
ZW5kTW9kZSA9IG1vZGU7IH0KLSAgICB2b2lkIHNldENvbXBvc2l0ZU1vZGUoRDJEMV9DT01QT1NJ
VEVfTU9ERSBtb2RlKSB7IG1fY29tcG9zaXRlTW9kZSA9IG1vZGU7IH0KKyAgICB2b2lkIHNldEJs
ZW5kQW5kQ29tcG9zaXRlTW9kZShEMkQxX0JMRU5EX01PREUsIEQyRDFfQ09NUE9TSVRFX01PREUp
OwogCiAgICAgdm9pZCBzZXRUYWdzKEQyRDFfVEFHIHRhZzEsIEQyRDFfVEFHIHRhZzIpOwogICAg
IHZvaWQgbm90aWZ5UHJlRHJhd09ic2VydmVyKCk7CkBAIC0xMTQsMTAgKzExNSwxMiBAQCBwdWJs
aWM6CiAKIHByaXZhdGU6CiAgICAgdm9pZCBjbGVhckNsaXBzKFZlY3RvcjxEaXJlY3QyRExheWVy
VHlwZT4mKTsKKyAgICB2b2lkIGNvbXBvc2l0ZUlmTmVlZGVkKCk7CiAKICAgICBHcmFwaGljc0Nv
bnRleHRQbGF0Zm9ybVByaXZhdGUqIG1fZ3JhcGhpY3NDb250ZXh0UHJpdmF0ZSB7IG51bGxwdHIg
fTsKIAogICAgIENPTVB0cjxJRDJEMVJlbmRlclRhcmdldD4gbV9yZW5kZXJUYXJnZXQ7CisgICAg
Q09NUHRyPElEMkQxRGV2aWNlQ29udGV4dD4gbV9kZXZpY2VDb250ZXh0OwogICAgIENPTVB0cjxJ
RDJEMVN0cm9rZVN0eWxlPiBtX2QyZFN0cm9rZVN0eWxlOwogCiAgICAgSGFzaE1hcDx1aW50MzJf
dCwgQ09NUHRyPElEMkQxU29saWRDb2xvckJydXNoPj4gbV9zb2xpZENvbG9yZWRCcnVzaENhY2hl
OwpAQCAtMTMwLDYgKzEzMyw4IEBAIHByaXZhdGU6CiAKICAgICBDT01QdHI8SUQzRDExRGV2aWNl
MT4gbV9kM2REZXZpY2U7CiAKKyAgICBDT01QdHI8SUQyRDFCaXRtYXA+IG1fY29tcG9zaXRlU291
cmNlOworCiAgICAgV1RGOjpGdW5jdGlvbjx2b2lkKCk+IG1fcHJlRHJhd0hhbmRsZXI7CiAgICAg
V1RGOjpGdW5jdGlvbjx2b2lkKCk+IG1fcG9zdERyYXdIYW5kbGVyOwogCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>379805</attachid>
            <date>2019-09-28 23:26:29 -0700</date>
            <delta_ts>2019-09-29 01:26:34 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-202177-20190928232624.patch</filename>
            <type>text/plain</type>
            <size>44642</size>
            <attacher name="Brent Fulgham">bfulgham</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDI1MDQyOCkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDQ0IEBACisyMDE5LTA5LTI4ICBCcmVudCBG
dWxnaGFtICA8YmZ1bGdoYW1AYXBwbGUuY29tPgorCisgICAgICAgIFtGVFddIENvcnJlY3QgY29t
cG9zaXRpbmcsIHNoYWRvdywgYW5kIHJhZGlhbCBncmFkaWVudCBpbXBsZW1lbnRhdGlvbnMKKyAg
ICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIwMjE3NworCisg
ICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFRoaXMgcGF0Y2gg
Y29ycmVjdHMgYSBudW1iZXIgb2YgaW1wbGVtZW50YXRpb24gZXJyb3JzIGluIGJhc2ljIENhbnZh
cworICAgICAgICBkcmF3aW5nIG9wZXJhdGlvbnMuCisKKyAgICAgICAgVGVzdGVkIGJ5IGNhbnZh
cy9waGlsaXAvdGVzdHMgCisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy93aW4vRGlyZWN0
MkRPcGVyYXRpb25zLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkRpcmVjdDJEOjpTdGF0ZTo6c2V0
Q29tcG9zaXRlT3BlcmF0aW9uKTogSW5pdGlhbGl6ZSBibGVuZCBhbmQKKyAgICAgICAgY29tcG9z
aXRlIG1vZGVzIHRvIGNvcnJlY3QgZGVmYXVsdHMuCisgICAgICAgIChXZWJDb3JlOjpEaXJlY3Qy
RDo6ZHJhd1dpdGhTaGFkb3dIZWxwZXIpOiBDb3JyZWN0IHZhbHVlIHVzZWQgZm9yIGJsdXIKKyAg
ICAgICAgc3RhbmRhcmQgZGV2aWF0aW9uIHRvIG1vcmUgY2xvc2VseSBtYXRjaCBvdGhlciBicm93
c2VyIG91dHB1dC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy93aW4vRGlyZWN0MkRVdGls
aXRpZXMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RGlyZWN0MkQ6OmNyZWF0ZUJpdG1hcENvcHlG
cm9tQ29udGV4dCk6IEFkZGVkIGhlbHBlciBmdW5jdGlvbi4KKyAgICAgICAgKiBwbGF0Zm9ybS9n
cmFwaGljcy93aW4vRGlyZWN0MkRVdGlsaXRpZXMuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy93aW4vR3JhZGllbnREaXJlY3QyRC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpHcmFkaWVu
dDo6Z2VuZXJhdGVHcmFkaWVudCk6IFByb3Blcmx5IGhhbmRsZSB0aGUgY2FzZSBvZiBhIG5vbi16
ZXJvCisgICAgICAgIGluaXRpYWwgZ3JhZGllbnQgcmFkaXVzLiBQcm9wZXJseSBjb21wdXRlIHRo
ZSBmaW5hbCByYWRpdXMuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ltYWdlQnVm
ZmVyRGF0YURpcmVjdDJELmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyRGF0YTo6
cmVhZERhdGFGcm9tQml0bWFwSWZOZWVkZWQgY29uc3QpOiBVcGRhdGUgdG8gdXNlIElEMkQxRGV2
aWNlQ29udGV4dAorICAgICAgICBmcm9tIHBsYXRmb3JtQ29udGV4dCwgcmF0aGVyIHRoYW4gc2Vh
cmNoaW5nIGZvciBpdCBlYWNoIHRpbWUuCisgICAgICAgIChXZWJDb3JlOjpJbWFnZUJ1ZmZlckRh
dGE6OmNvbXBhdGlibGVCaXRtYXApOiBEaXR0by4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy93aW4vUGxhdGZvcm1Db250ZXh0RGlyZWN0MkQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UGxh
dGZvcm1Db250ZXh0RGlyZWN0MkQ6OlBsYXRmb3JtQ29udGV4dERpcmVjdDJEKTogR3JhYiB0aGUg
SUQyRDFEZXZpY2VDb250ZXh0IGZvcgorICAgICAgICB0aGUgUmVuZGVyVGFyZ2V0IGF0IGNvbnN0
cnVjdGlvbiB0aW1lLgorICAgICAgICAoV2ViQ29yZTo6UGxhdGZvcm1Db250ZXh0RGlyZWN0MkQ6
OnNldFJlbmRlclRhcmdldCk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6UGxhdGZvcm1Db250
ZXh0RGlyZWN0MkQ6OmVuZERyYXcpOiBQZXJmb3JtIGNvbXBvc2l0aW5nIG9wZXJhdGlvbnMgd2hl
biBuZWVkZWQuCisgICAgICAgIChXZWJDb3JlOjpQbGF0Zm9ybUNvbnRleHREaXJlY3QyRDo6Y29t
cG9zaXRlSWZOZWVkZWQpOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlBsYXRmb3JtQ29udGV4
dERpcmVjdDJEOjpzZXRCbGVuZEFuZENvbXBvc2l0ZU1vZGUpOiBVcGRhdGUgdG8gcHJvcGVybHkg
c2V0IHRoZQorICAgICAgICBibGVuZCBhbmQgY29tcG9zaXRpbmcgbW9kZSAoZGVwZW5kaW5nIG9u
IGdsb2JhbCB2YWx1ZSBzZXQgZm9yIHRoZSBjYW52YXMuKQorICAgICAgICAqIHBsYXRmb3JtL2dy
YXBoaWNzL3dpbi9QbGF0Zm9ybUNvbnRleHREaXJlY3QyRC5oOgorICAgICAgICAoV2ViQ29yZTo6
UGxhdGZvcm1Db250ZXh0RGlyZWN0MkQ6OmRldmljZUNvbnRleHQpOgorICAgICAgICAoV2ViQ29y
ZTo6UGxhdGZvcm1Db250ZXh0RGlyZWN0MkQ6OnNldFJlbmRlclRhcmdldCk6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJDb3JlOjpQbGF0Zm9ybUNvbnRleHREaXJlY3QyRDo6c2V0QmxlbmRNb2RlKTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlBsYXRmb3JtQ29udGV4dERpcmVjdDJEOjpzZXRD
b21wb3NpdGVNb2RlKTogRGVsZXRlZC4KKwogMjAxOS0wOS0yNyAgVHJ1aXR0IFNhdmVsbCAgPHRz
YXZlbGxAYXBwbGUuY29tPgogCiAgICAgICAgIFVucmV2aWV3ZWQsIHJvbGxpbmcgb3V0IHIyNTA0
MTUuCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9QYXRoLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvUGF0aC5oCShyZXZpc2lv
biAyNTA0MjgpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9QYXRoLmgJKHdv
cmtpbmcgY29weSkKQEAgLTUwLDYgKzUwLDEwIEBAIGludGVyZmFjZSBJRDJEMUdlb21ldHJ5U2lu
azsKIAogdHlwZWRlZiBJRDJEMUdlb21ldHJ5R3JvdXAgUGxhdGZvcm1QYXRoOwogCituYW1lc3Bh
Y2UgV2ViQ29yZSB7CitjbGFzcyBQbGF0Zm9ybUNvbnRleHREaXJlY3QyRDsKK30KKwogI2VsaWYg
VVNFKENBSVJPKQogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkBAIC0xNzAsNiArMTc0LDcgQEAgbmFt
ZXNwYWNlIFdlYkNvcmUgewogICAgICAgICAvLyBUbyBrZWVwIFBhdGgoKSBjaGVhcCwgaXQgZG9l
cyBub3QgYWxsb2NhdGUgYSBQbGF0Zm9ybVBhdGggaW1tZWRpYXRlbHkKICAgICAgICAgLy8gbWVh
bmluZyBQYXRoOjpwbGF0Zm9ybVBhdGgoKSBjYW4gcmV0dXJuIG51bGwuCiAjaWYgVVNFKERJUkVD
VDJEKQorICAgICAgICBGbG9hdFJlY3QgZmFzdEJvdW5kaW5nUmVjdEZvclN0cm9rZShjb25zdCBQ
bGF0Zm9ybUNvbnRleHREaXJlY3QyRCYpIGNvbnN0OwogICAgICAgICBQbGF0Zm9ybVBhdGhQdHIg
cGxhdGZvcm1QYXRoKCkgY29uc3QgeyByZXR1cm4gbV9wYXRoLmdldCgpOyB9CiAjZWxzZQogICAg
ICAgICBQbGF0Zm9ybVBhdGhQdHIgcGxhdGZvcm1QYXRoKCkgY29uc3QgeyByZXR1cm4gbV9wYXRo
OyB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vRGlyZWN0MkRP
cGVyYXRpb25zLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy93aW4vRGlyZWN0MkRPcGVyYXRpb25zLmNwcAkocmV2aXNpb24gMjUwNDI4KQorKysgU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0RpcmVjdDJET3BlcmF0aW9ucy5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTEyNyw4ICsxMjcsOSBAQCB2b2lkIHNldFN0cm9rZVN0eWxlKFBs
YXRmb3JtQ29udGV4dERpcmVjCiAKIHZvaWQgc2V0Q29tcG9zaXRlT3BlcmF0aW9uKFBsYXRmb3Jt
Q29udGV4dERpcmVjdDJEJiBwbGF0Zm9ybUNvbnRleHQsIENvbXBvc2l0ZU9wZXJhdG9yIGNvbXBv
c2l0ZU9wZXJhdGlvbiwgQmxlbmRNb2RlIGJsZW5kTW9kZSkKIHsKLSAgICBEMkQxX0JMRU5EX01P
REUgdGFyZ2V0QmxlbmRNb2RlID0gRDJEMV9CTEVORF9NT0RFX1NDUkVFTjsKLSAgICBEMkQxX0NP
TVBPU0lURV9NT0RFIHRhcmdldENvbXBvc2l0ZU1vZGUgPSBEMkQxX0NPTVBPU0lURV9NT0RFX1NP
VVJDRV9BVE9QOworCisgICAgRDJEMV9CTEVORF9NT0RFIHRhcmdldEJsZW5kTW9kZSA9IEQyRDFf
QkxFTkRfTU9ERV9NVUxUSVBMWTsKKyAgICBEMkQxX0NPTVBPU0lURV9NT0RFIHRhcmdldENvbXBv
c2l0ZU1vZGUgPSBEMkQxX0NPTVBPU0lURV9NT0RFX0ZPUkNFX0RXT1JEOwogCiAgICAgaWYgKGJs
ZW5kTW9kZSAhPSBCbGVuZE1vZGU6Ok5vcm1hbCkgewogICAgICAgICBzd2l0Y2ggKGJsZW5kTW9k
ZSkgewpAQCAtMTkyLDEwICsxOTMsMTAgQEAgdm9pZCBzZXRDb21wb3NpdGVPcGVyYXRpb24oUGxh
dGZvcm1Db250ZQogICAgICAgICAgICAgLy8gRklYTUU6IHRhcmdldEJsZW5kTW9kZSA9IEQyRDFf
QkxFTkRfTU9ERV9DTEVBUjsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIENvbXBv
c2l0ZUNvcHk6Ci0gICAgICAgICAgICAvLyBGSVhNRTogdGFyZ2V0QmxlbmRNb2RlID0gRDJEMV9C
TEVORF9NT0RFX0NPUFk7CisgICAgICAgICAgICB0YXJnZXRDb21wb3NpdGVNb2RlID0gRDJEMV9D
T01QT1NJVEVfTU9ERV9TT1VSQ0VfQ09QWTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBj
YXNlIENvbXBvc2l0ZVNvdXJjZU92ZXI6Ci0gICAgICAgICAgICAvLyBGSVhNRToga0NHQmxlbmRN
b2RlTm9ybWFsCisgICAgICAgICAgICB0YXJnZXRDb21wb3NpdGVNb2RlID0gRDJEMV9DT01QT1NJ
VEVfTU9ERV9TT1VSQ0VfT1ZFUjsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIENv
bXBvc2l0ZVNvdXJjZUluOgogICAgICAgICAgICAgdGFyZ2V0Q29tcG9zaXRlTW9kZSA9IEQyRDFf
Q09NUE9TSVRFX01PREVfU09VUkNFX0lOOwpAQCAtMjIyLDEwICsyMjMsMTAgQEAgdm9pZCBzZXRD
b21wb3NpdGVPcGVyYXRpb24oUGxhdGZvcm1Db250ZQogICAgICAgICAgICAgdGFyZ2V0Q29tcG9z
aXRlTW9kZSA9IEQyRDFfQ09NUE9TSVRFX01PREVfWE9SOwogICAgICAgICAgICAgYnJlYWs7CiAg
ICAgICAgIGNhc2UgQ29tcG9zaXRlUGx1c0RhcmtlcjoKLSAgICAgICAgICAgIHRhcmdldEJsZW5k
TW9kZSA9IEQyRDFfQkxFTkRfTU9ERV9EQVJLRVJfQ09MT1I7CisgICAgICAgICAgICB0YXJnZXRC
bGVuZE1vZGUgPSBEMkQxX0JMRU5EX01PREVfREFSS0VOOwogICAgICAgICAgICAgYnJlYWs7CiAg
ICAgICAgIGNhc2UgQ29tcG9zaXRlUGx1c0xpZ2h0ZXI6Ci0gICAgICAgICAgICB0YXJnZXRCbGVu
ZE1vZGUgPSBEMkQxX0JMRU5EX01PREVfTElHSFRFUl9DT0xPUjsKKyAgICAgICAgICAgIHRhcmdl
dEJsZW5kTW9kZSA9IEQyRDFfQkxFTkRfTU9ERV9MSUdIVEVOOwogICAgICAgICAgICAgYnJlYWs7
CiAgICAgICAgIGNhc2UgQ29tcG9zaXRlRGlmZmVyZW5jZToKICAgICAgICAgICAgIHRhcmdldEJs
ZW5kTW9kZSA9IEQyRDFfQkxFTkRfTU9ERV9ESUZGRVJFTkNFOwpAQCAtMjMzLDggKzIzNCw3IEBA
IHZvaWQgc2V0Q29tcG9zaXRlT3BlcmF0aW9uKFBsYXRmb3JtQ29udGUKICAgICAgICAgfQogICAg
IH0KIAotICAgIHBsYXRmb3JtQ29udGV4dC5zZXRCbGVuZE1vZGUodGFyZ2V0QmxlbmRNb2RlKTsK
LSAgICBwbGF0Zm9ybUNvbnRleHQuc2V0Q29tcG9zaXRlTW9kZSh0YXJnZXRDb21wb3NpdGVNb2Rl
KTsKKyAgICBwbGF0Zm9ybUNvbnRleHQuc2V0QmxlbmRBbmRDb21wb3NpdGVNb2RlKHRhcmdldEJs
ZW5kTW9kZSwgdGFyZ2V0Q29tcG9zaXRlTW9kZSk7CiB9CiAKIHZvaWQgc2V0U2hvdWxkQW50aWFs
aWFzKFBsYXRmb3JtQ29udGV4dERpcmVjdDJEJiBwbGF0Zm9ybUNvbnRleHQsIGJvb2wgZW5hYmxl
KQpAQCAtNDExLDE1ICs0MTEsMTAgQEAgdm9pZCBmaWxsUmVjdChQbGF0Zm9ybUNvbnRleHREaXJl
Y3QyRCYgcAogICAgIGF1dG8gY29udGV4dCA9IHBsYXRmb3JtQ29udGV4dC5yZW5kZXJUYXJnZXQo
KTsKIAogICAgIHBsYXRmb3JtQ29udGV4dC5zZXRUYWdzKDEsIF9fTElORV9fKTsKLSAgICBGdW5j
dGlvbjx2b2lkKElEMkQxUmVuZGVyVGFyZ2V0Kik+IGRyYXdGdW5jdGlvbiA9IFsmcGxhdGZvcm1D
b250ZXh0LCByZWN0LCAmZmlsbFNvdXJjZV0oSUQyRDFSZW5kZXJUYXJnZXQqIHJlbmRlclRhcmdl
dCkgeworICAgIGRyYXdXaXRoU2hhZG93KHBsYXRmb3JtQ29udGV4dCwgcmVjdCwgc2hhZG93U3Rh
dGUsIFsmcGxhdGZvcm1Db250ZXh0LCByZWN0LCAmZmlsbFNvdXJjZV0oSUQyRDFSZW5kZXJUYXJn
ZXQqIHJlbmRlclRhcmdldCkgewogICAgICAgICBjb25zdCBEMkQxX1JFQ1RfRiBkMmRSZWN0ID0g
cmVjdDsKICAgICAgICAgcmVuZGVyVGFyZ2V0LT5GaWxsUmVjdGFuZ2xlKCZkMmRSZWN0LCBmaWxs
U291cmNlLmJydXNoLmdldCgpKTsKLSAgICB9OwotCi0gICAgaWYgKHNoYWRvd1N0YXRlLmlzVmlz
aWJsZSgpKQotICAgICAgICBkcmF3V2l0aFNoYWRvdyhwbGF0Zm9ybUNvbnRleHQsIHJlY3QsIHNo
YWRvd1N0YXRlLCBkcmF3RnVuY3Rpb24pOwotICAgIGVsc2UKLSAgICAgICAgZHJhd1dpdGhvdXRT
aGFkb3cocGxhdGZvcm1Db250ZXh0LCByZWN0LCBkcmF3RnVuY3Rpb24pOworICAgIH0pOwogfQog
CiB2b2lkIGZpbGxSZWN0KFBsYXRmb3JtQ29udGV4dERpcmVjdDJEJiBwbGF0Zm9ybUNvbnRleHQs
IGNvbnN0IEZsb2F0UmVjdCYgcmVjdCwgY29uc3QgQ29sb3ImIGNvbG9yLCBjb25zdCBTaGFkb3dT
dGF0ZSYgc2hhZG93U3RhdGUpCkBAIC00MjcsMTUgKzQyMiwxMCBAQCB2b2lkIGZpbGxSZWN0KFBs
YXRmb3JtQ29udGV4dERpcmVjdDJEJiBwCiAgICAgYXV0byBjb250ZXh0ID0gcGxhdGZvcm1Db250
ZXh0LnJlbmRlclRhcmdldCgpOwogCiAgICAgcGxhdGZvcm1Db250ZXh0LnNldFRhZ3MoMSwgX19M
SU5FX18pOwotICAgIEZ1bmN0aW9uPHZvaWQoSUQyRDFSZW5kZXJUYXJnZXQqKT4gZHJhd0Z1bmN0
aW9uID0gWyZwbGF0Zm9ybUNvbnRleHQsIGNvbG9yLCByZWN0XShJRDJEMVJlbmRlclRhcmdldCog
cmVuZGVyVGFyZ2V0KSB7CisgICAgZHJhd1dpdGhTaGFkb3cocGxhdGZvcm1Db250ZXh0LCByZWN0
LCBzaGFkb3dTdGF0ZSwgWyZwbGF0Zm9ybUNvbnRleHQsIGNvbG9yLCByZWN0XShJRDJEMVJlbmRl
clRhcmdldCogcmVuZGVyVGFyZ2V0KSB7CiAgICAgICAgIGNvbnN0IEQyRDFfUkVDVF9GIGQyZFJl
Y3QgPSByZWN0OwogICAgICAgICByZW5kZXJUYXJnZXQtPkZpbGxSZWN0YW5nbGUoJmQyZFJlY3Qs
IHBsYXRmb3JtQ29udGV4dC5icnVzaFdpdGhDb2xvcihjb2xvcikuZ2V0KCkpOwotICAgIH07Ci0K
LSAgICBpZiAoc2hhZG93U3RhdGUuaXNWaXNpYmxlKCkpCi0gICAgICAgIGRyYXdXaXRoU2hhZG93
KHBsYXRmb3JtQ29udGV4dCwgcmVjdCwgc2hhZG93U3RhdGUsIGRyYXdGdW5jdGlvbik7Ci0gICAg
ZWxzZQotICAgICAgICBkcmF3V2l0aG91dFNoYWRvdyhwbGF0Zm9ybUNvbnRleHQsIHJlY3QsIGRy
YXdGdW5jdGlvbik7CisgICAgfSk7CiB9CiAKIHZvaWQgZmlsbFJvdW5kZWRSZWN0KFBsYXRmb3Jt
Q29udGV4dERpcmVjdDJEJiBwbGF0Zm9ybUNvbnRleHQsIGNvbnN0IEZsb2F0Um91bmRlZFJlY3Qm
IHJlY3QsIGNvbnN0IENvbG9yJiBjb2xvciwgY29uc3QgU2hhZG93U3RhdGUmIHNoYWRvd1N0YXRl
KQpAQCAtNDUwLDE1ICs0NDAsMTAgQEAgdm9pZCBmaWxsUm91bmRlZFJlY3QoUGxhdGZvcm1Db250
ZXh0RGlyZQogICAgIGJvb2wgZXF1YWxIZWlnaHRzID0gKHJhZGlpLnRvcExlZnQoKS5oZWlnaHQo
KSA9PSByYWRpaS5ib3R0b21MZWZ0KCkuaGVpZ2h0KCkgJiYgcmFkaWkuYm90dG9tTGVmdCgpLmhl
aWdodCgpID09IHJhZGlpLnRvcFJpZ2h0KCkuaGVpZ2h0KCkgJiYgcmFkaWkudG9wUmlnaHQoKS5o
ZWlnaHQoKSA9PSByYWRpaS5ib3R0b21SaWdodCgpLmhlaWdodCgpKTsKICAgICBib29sIGhhc0N1
c3RvbUZpbGwgPSBmYWxzZTsgLy8gRklYTUU6IFdoeSBpc24ndCBhIEZpbGxTb3VyY2UgcGFzc2Vk
IHRvIHRoaXMgZnVuY3Rpb24/CiAgICAgaWYgKCFoYXNDdXN0b21GaWxsICYmIGVxdWFsV2lkdGhz
ICYmIGVxdWFsSGVpZ2h0cyAmJiByYWRpaS50b3BMZWZ0KCkud2lkdGgoKSAqIDIgPT0gci53aWR0
aCgpICYmIHJhZGlpLnRvcExlZnQoKS5oZWlnaHQoKSAqIDIgPT0gci5oZWlnaHQoKSkgewotICAg
ICAgICBGdW5jdGlvbjx2b2lkKElEMkQxUmVuZGVyVGFyZ2V0Kik+IGRyYXdGdW5jdGlvbiA9IFsm
cGxhdGZvcm1Db250ZXh0LCBjb2xvciwgcmVjdCwgcmFkaWksIHJdKElEMkQxUmVuZGVyVGFyZ2V0
KiByZW5kZXJUYXJnZXQpIHsKKyAgICAgICAgZHJhd1dpdGhTaGFkb3cocGxhdGZvcm1Db250ZXh0
LCByLCBzaGFkb3dTdGF0ZSwgWyZwbGF0Zm9ybUNvbnRleHQsIGNvbG9yLCByZWN0LCByYWRpaSwg
cl0oSUQyRDFSZW5kZXJUYXJnZXQqIHJlbmRlclRhcmdldCkgewogICAgICAgICAgICAgYXV0byBy
b3VuZGVkUmVjdCA9IEQyRDE6OlJvdW5kZWRSZWN0KHIsIHJhZGlpLnRvcExlZnQoKS53aWR0aCgp
LCByYWRpaS50b3BMZWZ0KCkuaGVpZ2h0KCkpOwogICAgICAgICAgICAgcmVuZGVyVGFyZ2V0LT5G
aWxsUm91bmRlZFJlY3RhbmdsZSgmcm91bmRlZFJlY3QsIHBsYXRmb3JtQ29udGV4dC5icnVzaFdp
dGhDb2xvcihjb2xvcikuZ2V0KCkpOwotICAgICAgICB9OwotCi0gICAgICAgIGlmIChzaGFkb3dT
dGF0ZS5pc1Zpc2libGUoKSkKLSAgICAgICAgICAgIGRyYXdXaXRoU2hhZG93KHBsYXRmb3JtQ29u
dGV4dCwgciwgc2hhZG93U3RhdGUsIGRyYXdGdW5jdGlvbik7Ci0gICAgICAgIGVsc2UKLSAgICAg
ICAgICAgIGRyYXdXaXRob3V0U2hhZG93KHBsYXRmb3JtQ29udGV4dCwgciwgZHJhd0Z1bmN0aW9u
KTsKKyAgICAgICAgfSk7CiAgICAgfSBlbHNlIHsKICAgICAgICAgUGF0aCBwYXRoOwogICAgICAg
ICBwYXRoLmFkZFJvdW5kZWRSZWN0KHJlY3QpOwpAQCAtNDg4LDE1ICs0NzMsMTEgQEAgdm9pZCBm
aWxsUmVjdFdpdGhSb3VuZGVkSG9sZShQbGF0Zm9ybUNvbgogCiB2b2lkIGZpbGxSZWN0V2l0aEdy
YWRpZW50KFBsYXRmb3JtQ29udGV4dERpcmVjdDJEJiBwbGF0Zm9ybUNvbnRleHQsIGNvbnN0IEZs
b2F0UmVjdCYgcmVjdCwgSUQyRDFCcnVzaCogZ3JhZGllbnQpCiB7Ci0gICAgYXV0byBjb250ZXh0
ID0gcGxhdGZvcm1Db250ZXh0LnJlbmRlclRhcmdldCgpOwotCiAgICAgcGxhdGZvcm1Db250ZXh0
LnNldFRhZ3MoMSwgX19MSU5FX18pOwotICAgIEZ1bmN0aW9uPHZvaWQoSUQyRDFSZW5kZXJUYXJn
ZXQqKT4gZHJhd0Z1bmN0aW9uID0gWyZwbGF0Zm9ybUNvbnRleHQsIHJlY3QsICZncmFkaWVudF0o
SUQyRDFSZW5kZXJUYXJnZXQqIHJlbmRlclRhcmdldCkgeworICAgIGRyYXdXaXRob3V0U2hhZG93
KHBsYXRmb3JtQ29udGV4dCwgWyZwbGF0Zm9ybUNvbnRleHQsIHJlY3QsICZncmFkaWVudF0oSUQy
RDFSZW5kZXJUYXJnZXQqIHJlbmRlclRhcmdldCkgewogICAgICAgICBjb25zdCBEMkQxX1JFQ1Rf
RiBkMmRSZWN0ID0gcmVjdDsKICAgICAgICAgcmVuZGVyVGFyZ2V0LT5GaWxsUmVjdGFuZ2xlKCZk
MmRSZWN0LCBncmFkaWVudCk7Ci0gICAgfTsKLQotICAgIGRyYXdXaXRob3V0U2hhZG93KHBsYXRm
b3JtQ29udGV4dCwgcmVjdCwgZHJhd0Z1bmN0aW9uKTsKKyAgICB9KTsKIH0KIAogdm9pZCBmaWxs
UGF0aChQbGF0Zm9ybUNvbnRleHREaXJlY3QyRCYgcGxhdGZvcm1Db250ZXh0LCBjb25zdCBQYXRo
JiBwYXRoLCBjb25zdCBGaWxsU291cmNlJiBmaWxsU291cmNlLCBjb25zdCBTaGFkb3dTdGF0ZSYg
c2hhZG93U3RhdGUpCkBAIC01MTcsMTEgKzQ5OCw5IEBAIHZvaWQgZmlsbFBhdGgoUGxhdGZvcm1D
b250ZXh0RGlyZWN0MkQmIHAKIAogICAgIGlmIChzaGFkb3dTdGF0ZS5pc1Zpc2libGUoKSkgewog
ICAgICAgICBGbG9hdFJlY3QgYm91bmRpbmdSZWN0ID0gcGF0aC5mYXN0Qm91bmRpbmdSZWN0KCk7
Ci0gICAgICAgIGRyYXdXaXRoU2hhZG93KHBsYXRmb3JtQ29udGV4dCwgYm91bmRpbmdSZWN0LCBz
aGFkb3dTdGF0ZSwgZHJhd0Z1bmN0aW9uKTsKLSAgICB9IGVsc2UgewotICAgICAgICBGbG9hdFJl
Y3QgY29udGV4dFJlY3QoRmxvYXRQb2ludCgpLCBjb250ZXh0LT5HZXRTaXplKCkpOwotICAgICAg
ICBkcmF3V2l0aG91dFNoYWRvdyhwbGF0Zm9ybUNvbnRleHQsIGNvbnRleHRSZWN0LCBkcmF3RnVu
Y3Rpb24pOwotICAgIH0KKyAgICAgICAgZHJhd1dpdGhTaGFkb3cocGxhdGZvcm1Db250ZXh0LCBi
b3VuZGluZ1JlY3QsIHNoYWRvd1N0YXRlLCBXVEZNb3ZlKGRyYXdGdW5jdGlvbikpOworICAgIH0g
ZWxzZQorICAgICAgICBkcmF3V2l0aG91dFNoYWRvdyhwbGF0Zm9ybUNvbnRleHQsIFdURk1vdmUo
ZHJhd0Z1bmN0aW9uKSk7CiB9CiAKIHZvaWQgZmlsbFBhdGgoUGxhdGZvcm1Db250ZXh0RGlyZWN0
MkQmIHBsYXRmb3JtQ29udGV4dCwgY29uc3QgUGF0aCYgcGF0aCwgY29uc3QgQ29sb3ImIGNvbG9y
LCBjb25zdCBTaGFkb3dTdGF0ZSYgc2hhZG93U3RhdGUpCkBAIC01NDEsMjUgKzUyMCwxOCBAQCB2
b2lkIGZpbGxQYXRoKFBsYXRmb3JtQ29udGV4dERpcmVjdDJEJiBwCiAKICAgICBpZiAoc2hhZG93
U3RhdGUuaXNWaXNpYmxlKCkpIHsKICAgICAgICAgRmxvYXRSZWN0IGJvdW5kaW5nUmVjdCA9IHBh
dGguZmFzdEJvdW5kaW5nUmVjdCgpOwotICAgICAgICBkcmF3V2l0aFNoYWRvdyhwbGF0Zm9ybUNv
bnRleHQsIGJvdW5kaW5nUmVjdCwgc2hhZG93U3RhdGUsIGRyYXdGdW5jdGlvbik7Ci0gICAgfSBl
bHNlIHsKLSAgICAgICAgRmxvYXRSZWN0IGNvbnRleHRSZWN0KEZsb2F0UG9pbnQoKSwgY29udGV4
dC0+R2V0U2l6ZSgpKTsKLSAgICAgICAgZHJhd1dpdGhvdXRTaGFkb3cocGxhdGZvcm1Db250ZXh0
LCBjb250ZXh0UmVjdCwgZHJhd0Z1bmN0aW9uKTsKLSAgICB9CisgICAgICAgIGRyYXdXaXRoU2hh
ZG93KHBsYXRmb3JtQ29udGV4dCwgYm91bmRpbmdSZWN0LCBzaGFkb3dTdGF0ZSwgV1RGTW92ZShk
cmF3RnVuY3Rpb24pKTsKKyAgICB9IGVsc2UKKyAgICAgICAgZHJhd1dpdGhvdXRTaGFkb3cocGxh
dGZvcm1Db250ZXh0LCBXVEZNb3ZlKGRyYXdGdW5jdGlvbikpOwogfQogCiB2b2lkIHN0cm9rZVJl
Y3QoUGxhdGZvcm1Db250ZXh0RGlyZWN0MkQmIHBsYXRmb3JtQ29udGV4dCwgY29uc3QgRmxvYXRS
ZWN0JiByZWN0LCBmbG9hdCBsaW5lV2lkdGgsIGNvbnN0IFN0cm9rZVNvdXJjZSYgc3Ryb2tlU291
cmNlLCBjb25zdCBTaGFkb3dTdGF0ZSYgc2hhZG93U3RhdGUpCiB7Ci0gICAgRnVuY3Rpb248dm9p
ZChJRDJEMVJlbmRlclRhcmdldCopPiBkcmF3RnVuY3Rpb24gPSBbJnBsYXRmb3JtQ29udGV4dCwg
JnN0cm9rZVNvdXJjZSwgcmVjdCwgbGluZVdpZHRoXShJRDJEMVJlbmRlclRhcmdldCogcmVuZGVy
VGFyZ2V0KSB7CisgICAgZHJhd1dpdGhTaGFkb3cocGxhdGZvcm1Db250ZXh0LCByZWN0LCBzaGFk
b3dTdGF0ZSwgWyZwbGF0Zm9ybUNvbnRleHQsICZzdHJva2VTb3VyY2UsIHJlY3QsIGxpbmVXaWR0
aF0oSUQyRDFSZW5kZXJUYXJnZXQqIHJlbmRlclRhcmdldCkgewogICAgICAgICBwbGF0Zm9ybUNv
bnRleHQuc2V0VGFncygxLCBfX0xJTkVfXyk7CiAgICAgICAgIGNvbnN0IEQyRDFfUkVDVF9GIGQy
ZFJlY3QgPSByZWN0OwogICAgICAgICByZW5kZXJUYXJnZXQtPkRyYXdSZWN0YW5nbGUoJmQyZFJl
Y3QsIHN0cm9rZVNvdXJjZS5icnVzaC5nZXQoKSwgbGluZVdpZHRoLCBwbGF0Zm9ybUNvbnRleHQu
c3Ryb2tlU3R5bGUoKSk7Ci0gICAgfTsKLQotICAgIGlmIChzaGFkb3dTdGF0ZS5pc1Zpc2libGUo
KSkKLSAgICAgICAgZHJhd1dpdGhTaGFkb3cocGxhdGZvcm1Db250ZXh0LCByZWN0LCBzaGFkb3dT
dGF0ZSwgZHJhd0Z1bmN0aW9uKTsKLSAgICBlbHNlCi0gICAgICAgIGRyYXdXaXRob3V0U2hhZG93
KHBsYXRmb3JtQ29udGV4dCwgcmVjdCwgZHJhd0Z1bmN0aW9uKTsKKyAgICB9KTsKIH0KIAogdm9p
ZCBzdHJva2VQYXRoKFBsYXRmb3JtQ29udGV4dERpcmVjdDJEJiBwbGF0Zm9ybUNvbnRleHQsIGNv
bnN0IFBhdGgmIHBhdGgsIGNvbnN0IFN0cm9rZVNvdXJjZSYgc3Ryb2tlU291cmNlLCBjb25zdCBT
aGFkb3dTdGF0ZSYgc2hhZG93U3RhdGUpCkBAIC01NjgsMTUgKzU0MCwxNSBAQCB2b2lkIHN0cm9r
ZVBhdGgoUGxhdGZvcm1Db250ZXh0RGlyZWN0MkQmCiAgICAgCiAgICAgcGxhdGZvcm1Db250ZXh0
LnNldFRhZ3MoMSwgX19MSU5FX18pOwogCi0gICAgYXV0byBib3VuZGluZ1JlY3QgPSBwYXRoLmZh
c3RCb3VuZGluZ1JlY3QoKTsKICAgICBGdW5jdGlvbjx2b2lkKElEMkQxUmVuZGVyVGFyZ2V0Kik+
IGRyYXdGdW5jdGlvbiA9IFsmcGxhdGZvcm1Db250ZXh0LCAmcGF0aCwgJnN0cm9rZVNvdXJjZV0o
SUQyRDFSZW5kZXJUYXJnZXQqIHJlbmRlclRhcmdldCkgewogICAgICAgICByZW5kZXJUYXJnZXQt
PkRyYXdHZW9tZXRyeShwYXRoLnBsYXRmb3JtUGF0aCgpLCBzdHJva2VTb3VyY2UuYnJ1c2guZ2V0
KCksIHN0cm9rZVNvdXJjZS50aGlja25lc3MsIHBsYXRmb3JtQ29udGV4dC5zdHJva2VTdHlsZSgp
KTsKICAgICB9OwogCi0gICAgaWYgKHNoYWRvd1N0YXRlLmlzVmlzaWJsZSgpKQotICAgICAgICBk
cmF3V2l0aFNoYWRvdyhwbGF0Zm9ybUNvbnRleHQsIGJvdW5kaW5nUmVjdCwgc2hhZG93U3RhdGUs
IGRyYXdGdW5jdGlvbik7Ci0gICAgZWxzZQotICAgICAgICBkcmF3V2l0aG91dFNoYWRvdyhwbGF0
Zm9ybUNvbnRleHQsIGJvdW5kaW5nUmVjdCwgZHJhd0Z1bmN0aW9uKTsKKyAgICBpZiAoc2hhZG93
U3RhdGUuaXNWaXNpYmxlKCkpIHsKKyAgICAgICAgYXV0byBib3VuZGluZ1JlY3QgPSBwYXRoLmZh
c3RCb3VuZGluZ1JlY3RGb3JTdHJva2UocGxhdGZvcm1Db250ZXh0KTsKKyAgICAgICAgZHJhd1dp
dGhTaGFkb3cocGxhdGZvcm1Db250ZXh0LCBib3VuZGluZ1JlY3QsIHNoYWRvd1N0YXRlLCBXVEZN
b3ZlKGRyYXdGdW5jdGlvbikpOworICAgIH0gZWxzZQorICAgICAgICBkcmF3V2l0aG91dFNoYWRv
dyhwbGF0Zm9ybUNvbnRleHQsIFdURk1vdmUoZHJhd0Z1bmN0aW9uKSk7CiB9CiAKIHZvaWQgZHJh
d1BhdGgoUGxhdGZvcm1Db250ZXh0RGlyZWN0MkQmIHBsYXRmb3JtQ29udGV4dCwgY29uc3QgUGF0
aCYgcGF0aCwgY29uc3QgU3Ryb2tlU291cmNlJiBzdHJva2VTb3VyY2UsIGNvbnN0IFNoYWRvd1N0
YXRlJikKQEAgLTU4Nyw3MSArNTU5LDE0MyBAQCB2b2lkIGRyYXdQYXRoKFBsYXRmb3JtQ29udGV4
dERpcmVjdDJEJiBwCiAKICAgICBwbGF0Zm9ybUNvbnRleHQuc2V0VGFncygxLCBfX0xJTkVfXyk7
CiAKLSAgICBhdXRvIHJlY3QgPSBwYXRoLmZhc3RCb3VuZGluZ1JlY3QoKTsKLSAgICBkcmF3V2l0
aG91dFNoYWRvdyhwbGF0Zm9ybUNvbnRleHQsIHJlY3QsIFsmcGxhdGZvcm1Db250ZXh0LCAmc3Ry
b2tlU291cmNlLCAmcGF0aF0oSUQyRDFSZW5kZXJUYXJnZXQqIHJlbmRlclRhcmdldCkgeworICAg
IGF1dG8gcmVjdCA9IHBhdGguZmFzdEJvdW5kaW5nUmVjdEZvclN0cm9rZShwbGF0Zm9ybUNvbnRl
eHQpOworICAgIGRyYXdXaXRob3V0U2hhZG93KHBsYXRmb3JtQ29udGV4dCwgWyZwbGF0Zm9ybUNv
bnRleHQsICZzdHJva2VTb3VyY2UsICZwYXRoXShJRDJEMVJlbmRlclRhcmdldCogcmVuZGVyVGFy
Z2V0KSB7CiAgICAgICAgIHJlbmRlclRhcmdldC0+RHJhd0dlb21ldHJ5KHBhdGgucGxhdGZvcm1Q
YXRoKCksIHN0cm9rZVNvdXJjZS5icnVzaC5nZXQoKSwgc3Ryb2tlU291cmNlLnRoaWNrbmVzcywg
cGxhdGZvcm1Db250ZXh0LnN0cm9rZVN0eWxlKCkpOwogICAgIH0pOwogCiAgICAgZmx1c2gocGxh
dGZvcm1Db250ZXh0KTsKIH0KIAotdm9pZCBkcmF3V2l0aFNoYWRvd0hlbHBlcihJRDJEMVJlbmRl
clRhcmdldCogY29udGV4dCwgSUQyRDFCaXRtYXAqIGJpdG1hcCwgY29uc3QgQ29sb3ImIHNoYWRv
d0NvbG9yLCBjb25zdCBGbG9hdFNpemUmIHNoYWRvd09mZnNldCwgZmxvYXQgc2hhZG93Qmx1cikK
K3N0YXRpYyB2b2lkIGRyYXdXaXRoU2hhZG93SGVscGVyKElEMkQxUmVuZGVyVGFyZ2V0KiBjb250
ZXh0LCBJRDJEMUJpdG1hcFJlbmRlclRhcmdldCogYml0bWFwVGFyZ2V0LCBjb25zdCBGbG9hdFJl
Y3QmIGJvdW5kaW5nUmVjdCwgY29uc3QgQ29sb3ImIHNoYWRvd0NvbG9yLCBjb25zdCBGbG9hdFNp
emUmIHNoYWRvd09mZnNldCwgZmxvYXQgc2hhZG93Qmx1cikKIHsKLSAgICBDT01QdHI8SUQyRDFE
ZXZpY2VDb250ZXh0PiBkZXZpY2VDb250ZXh0OwotICAgIEhSRVNVTFQgaHIgPSBjb250ZXh0LT5R
dWVyeUludGVyZmFjZSgmZGV2aWNlQ29udGV4dCk7CisgICAgQ09NUHRyPElEMkQxQml0bWFwPiBj
dXJyZW50Q2FudmFzID0gRGlyZWN0MkQ6OmNyZWF0ZUJpdG1hcENvcHlGcm9tQ29udGV4dChiaXRt
YXBUYXJnZXQpOworICAgIGlmICghY3VycmVudENhbnZhcykKKyAgICAgICAgcmV0dXJuOworCisg
ICAgQ09NUHRyPElEMkQxRGV2aWNlQ29udGV4dD4gc2hhZG93RGV2aWNlQ29udGV4dDsKKyAgICBI
UkVTVUxUIGhyID0gYml0bWFwVGFyZ2V0LT5RdWVyeUludGVyZmFjZSgmc2hhZG93RGV2aWNlQ29u
dGV4dCk7CiAgICAgUkVMRUFTRV9BU1NFUlQoU1VDQ0VFREVEKGhyKSk7CiAKICAgICAvLyBDcmVh
dGUgdGhlIHNoYWRvdyBlZmZlY3QKICAgICBDT01QdHI8SUQyRDFFZmZlY3Q+IHNoYWRvd0VmZmVj
dDsKLSAgICBociA9IGRldmljZUNvbnRleHQtPkNyZWF0ZUVmZmVjdChDTFNJRF9EMkQxU2hhZG93
LCAmc2hhZG93RWZmZWN0KTsKKyAgICBociA9IHNoYWRvd0RldmljZUNvbnRleHQtPkNyZWF0ZUVm
ZmVjdChDTFNJRF9EMkQxU2hhZG93LCAmc2hhZG93RWZmZWN0KTsKICAgICBSRUxFQVNFX0FTU0VS
VChTVUNDRUVERUQoaHIpKTsKIAotICAgIHNoYWRvd0VmZmVjdC0+U2V0SW5wdXQoMCwgYml0bWFw
KTsKKyAgICBzaGFkb3dFZmZlY3QtPlNldElucHV0KDAsIGN1cnJlbnRDYW52YXMuZ2V0KCkpOwog
ICAgIHNoYWRvd0VmZmVjdC0+U2V0VmFsdWUoRDJEMV9TSEFET1dfUFJPUF9DT0xPUiwgc3RhdGlj
X2Nhc3Q8RDJEMV9WRUNUT1JfNEY+KHNoYWRvd0NvbG9yKSk7Ci0gICAgc2hhZG93RWZmZWN0LT5T
ZXRWYWx1ZShEMkQxX1NIQURPV19QUk9QX0JMVVJfU1RBTkRBUkRfREVWSUFUSU9OLCBzaGFkb3dC
bHVyKTsKIAotICAgIENPTVB0cjxJRDJEMUVmZmVjdD4gdHJhbnNmb3JtRWZmZWN0OwotICAgIGhy
ID0gZGV2aWNlQ29udGV4dC0+Q3JlYXRlRWZmZWN0KENMU0lEX0QyRDEyREFmZmluZVRyYW5zZm9y
bSwgJnRyYW5zZm9ybUVmZmVjdCk7CisgICAgZmxvYXQgYmx1ckRldmlhdGlvbiA9IDAuNSAqIHNo
YWRvd0JsdXI7CisgICAgc2hhZG93RWZmZWN0LT5TZXRWYWx1ZShEMkQxX1NIQURPV19QUk9QX0JM
VVJfU1RBTkRBUkRfREVWSUFUSU9OLCBibHVyRGV2aWF0aW9uKTsKKworICAgIENPTVB0cjxJRDJE
MUVmZmVjdD4gc2hhZG93VHJhbnNmb3JtRWZmZWN0OworICAgIGhyID0gc2hhZG93RGV2aWNlQ29u
dGV4dC0+Q3JlYXRlRWZmZWN0KENMU0lEX0QyRDEyREFmZmluZVRyYW5zZm9ybSwgJnNoYWRvd1Ry
YW5zZm9ybUVmZmVjdCk7CiAgICAgUkVMRUFTRV9BU1NFUlQoU1VDQ0VFREVEKGhyKSk7CiAKLSAg
ICB0cmFuc2Zvcm1FZmZlY3QtPlNldElucHV0RWZmZWN0KDAsIHNoYWRvd0VmZmVjdC5nZXQoKSk7
CisgICAgc2hhZG93VHJhbnNmb3JtRWZmZWN0LT5TZXRJbnB1dEVmZmVjdCgwLCBzaGFkb3dFZmZl
Y3QuZ2V0KCkpOwogCi0gICAgYXV0byB0cmFuc2xhdGlvbiA9IEQyRDE6Ok1hdHJpeDN4MkY6OlRy
YW5zbGF0aW9uKHNoYWRvd09mZnNldC53aWR0aCgpLCBzaGFkb3dPZmZzZXQuaGVpZ2h0KCkpOwot
ICAgIHRyYW5zZm9ybUVmZmVjdC0+U2V0VmFsdWUoRDJEMV8yREFGRklORVRSQU5TRk9STV9QUk9Q
X1RSQU5TRk9STV9NQVRSSVgsIHRyYW5zbGF0aW9uKTsKKyAgICAvLyBNdXN0IGZsaXAgdGhlIGF4
aXMgZm9yIHRoZSBzaGFkb3cgb2Zmc2V0LCBzaW5jZSBEaXJlY3QyRCdzIFkgYXhpcyBpcyBpbnZl
cnRlZC4KKyAgICBhdXRvIHNoYWRvd1RyYW5zbGF0aW9uID0gRDJEMTo6TWF0cml4M3gyRjo6VHJh
bnNsYXRpb24oc2hhZG93T2Zmc2V0LndpZHRoKCksIC1zaGFkb3dPZmZzZXQuaGVpZ2h0KCkpOwor
ICAgIHNoYWRvd1RyYW5zZm9ybUVmZmVjdC0+U2V0VmFsdWUoRDJEMV8yREFGRklORVRSQU5TRk9S
TV9QUk9QX1RSQU5TRk9STV9NQVRSSVgsIHNoYWRvd1RyYW5zbGF0aW9uKTsKIAogICAgIENPTVB0
cjxJRDJEMUVmZmVjdD4gY29tcG9zaXRvcjsKLSAgICBociA9IGRldmljZUNvbnRleHQtPkNyZWF0
ZUVmZmVjdChDTFNJRF9EMkQxQ29tcG9zaXRlLCAmY29tcG9zaXRvcik7CisgICAgaHIgPSBzaGFk
b3dEZXZpY2VDb250ZXh0LT5DcmVhdGVFZmZlY3QoQ0xTSURfRDJEMUNvbXBvc2l0ZSwgJmNvbXBv
c2l0b3IpOworICAgIFJFTEVBU0VfQVNTRVJUKFNVQ0NFRURFRChocikpOworCisgICAgY29tcG9z
aXRvci0+U2V0SW5wdXRFZmZlY3QoMCwgc2hhZG93VHJhbnNmb3JtRWZmZWN0LmdldCgpKTsKKyAg
ICBjb21wb3NpdG9yLT5TZXRJbnB1dCgxLCBjdXJyZW50Q2FudmFzLmdldCgpKTsKKworICAgIHNo
YWRvd0RldmljZUNvbnRleHQtPkJlZ2luRHJhdygpOworICAgIHNoYWRvd0RldmljZUNvbnRleHQt
PkNsZWFyKEQyRDE6OkNvbG9yRigwLCAwLCAwLCAwKSk7CisgICAgc2hhZG93RGV2aWNlQ29udGV4
dC0+RHJhd0ltYWdlKGNvbXBvc2l0b3IuZ2V0KCkpOworICAgIGhyID0gc2hhZG93RGV2aWNlQ29u
dGV4dC0+RW5kRHJhdygpOworICAgIFJFTEVBU0VfQVNTRVJUKFNVQ0NFRURFRChocikpOworCisg
ICAgQ09NUHRyPElEMkQxQml0bWFwPiBiaXRtYXA7CisgICAgaHIgPSBiaXRtYXBUYXJnZXQtPkdl
dEJpdG1hcCgmYml0bWFwKTsKICAgICBSRUxFQVNFX0FTU0VSVChTVUNDRUVERUQoaHIpKTsKIAot
ICAgIGNvbXBvc2l0b3ItPlNldElucHV0RWZmZWN0KDAsIHRyYW5zZm9ybUVmZmVjdC5nZXQoKSk7
Ci0gICAgY29tcG9zaXRvci0+U2V0SW5wdXQoMSwgYml0bWFwKTsKKyAgICBJbnRTaXplIHBpeGVs
U2l6ZSA9IGNvbnRleHQtPkdldFBpeGVsU2l6ZSgpOworICAgIENPTVB0cjxJRDJEMUJpdG1hcD4g
Y3JvcHBlZCA9IERpcmVjdDJEOjpjcmVhdGVCaXRtYXAoYml0bWFwVGFyZ2V0LCBwaXhlbFNpemUp
OworICAgIGlmICghY3JvcHBlZCkKKyAgICAgICAgcmV0dXJuOworCisgICAgYXV0byBzY2FsZUZh
Y3RvciA9IGJpdG1hcFJlc29sdXRpb24oY29udGV4dCk7CisKKyAgICBGbG9hdFJlY3Qgc2NhbGVk
Qm91bmRpbmdSZWN0KGJvdW5kaW5nUmVjdCk7CisgICAgc2NhbGVkQm91bmRpbmdSZWN0LnNjYWxl
KHNjYWxlRmFjdG9yLndpZHRoKCksIHNjYWxlRmFjdG9yLmhlaWdodCgpKTsKKworICAgIC8vIFRh
a2UgdGhlIG1hZ25pdHVkZSBvZiB0aGUgb2Zmc2V0LiBJZiB0aGUgb3JpZ2luIHdhcyBvdXRzaWRl
IHRoZSBkcmF3aW5nIGNvbnRleHQsIHdlIHN0cmV0Y2hlZCB0byBpbmNsdWRlIHRob3NlIHBvaW50
cywKKyAgICAvLyBhbmQgc28gd2UgbmVlZCB0byBjcm9wIHRoZW0gb3V0LiBJZiB0aGUgb3JpZ2lu
IHdhcyBpbnNpZGUsIHdlIHdhbnQgdG8gaG9ub3IgdGhlIG9mZnNldC4KKyAgICBpbnQgeCA9IGNs
YW1wVG88aW50PihzdGQ6OmFicyhzY2FsZWRCb3VuZGluZ1JlY3QueCgpKSk7CisgICAgaW50IHkg
PSBjbGFtcFRvPGludD4oc3RkOjphYnMoc2NhbGVkQm91bmRpbmdSZWN0LnkoKSkpOworICAgIGlu
dCB3aWR0aCA9IGNsYW1wVG88aW50PihzY2FsZWRCb3VuZGluZ1JlY3Qud2lkdGgoKSk7CisgICAg
aW50IGhlaWdodCA9IGNsYW1wVG88aW50PihzY2FsZWRCb3VuZGluZ1JlY3QuaGVpZ2h0KCkpOwor
CisgICAgSW50UmVjdCBvdXRwdXRSZWN0KEludFBvaW50KHgsIHkpLCBJbnRTaXplKHdpZHRoLCBo
ZWlnaHQpKTsKKyAgICBJbnRSZWN0IGRlc3RDb250ZXh0UmVjdChJbnRQb2ludCgpLCBwaXhlbFNp
emUpOworICAgIGlmIChvdXRwdXRSZWN0LmludGVyc2VjdHMoZGVzdENvbnRleHRSZWN0KSkKKyAg
ICAgICAgb3V0cHV0UmVjdC5pbnRlcnNlY3QoZGVzdENvbnRleHRSZWN0KTsKIAotICAgIGRldmlj
ZUNvbnRleHQtPkRyYXdJbWFnZShjb21wb3NpdG9yLmdldCgpLCBEMkQxX0lOVEVSUE9MQVRJT05f
TU9ERV9MSU5FQVIpOworICAgIEQyRDFfUkVDVF9VIGNyb3BSZWN0ID0gb3V0cHV0UmVjdDsKKyAg
ICBhdXRvIHRhcmdldFBvaW50ID0gRDJEMTo6UG9pbnQyVSgpOworICAgIGNyb3BwZWQtPkNvcHlG
cm9tQml0bWFwKCZ0YXJnZXRQb2ludCwgYml0bWFwLmdldCgpLCAmY3JvcFJlY3QpOworCisgICAg
Y29udGV4dC0+RHJhd0JpdG1hcChjcm9wcGVkLmdldCgpKTsKIH0KIAotdm9pZCBkcmF3V2l0aFNo
YWRvdyhQbGF0Zm9ybUNvbnRleHREaXJlY3QyRCYgcGxhdGZvcm1Db250ZXh0LCBjb25zdCBGbG9h
dFJlY3QmIGJvdW5kaW5nUmVjdCwgY29uc3QgU2hhZG93U3RhdGUmIHNoYWRvd1N0YXRlLCBjb25z
dCBXVEY6OkZ1bmN0aW9uPHZvaWQoSUQyRDFSZW5kZXJUYXJnZXQqKT4mIGRyYXdDb21tYW5kcykK
K3ZvaWQgZHJhd1dpdGhTaGFkb3coUGxhdGZvcm1Db250ZXh0RGlyZWN0MkQmIHBsYXRmb3JtQ29u
dGV4dCwgRmxvYXRSZWN0IGJvdW5kaW5nUmVjdCwgY29uc3QgU2hhZG93U3RhdGUmIHNoYWRvd1N0
YXRlLCBXVEY6OkZ1bmN0aW9uPHZvaWQoSUQyRDFSZW5kZXJUYXJnZXQqKT4mJiBkcmF3Q29tbWFu
ZHMpCiB7CisgICAgaWYgKCFzaGFkb3dTdGF0ZS5pc1Zpc2libGUoKSkgeworICAgICAgICBkcmF3
V2l0aG91dFNoYWRvdyhwbGF0Zm9ybUNvbnRleHQsIFdURk1vdmUoZHJhd0NvbW1hbmRzKSk7Cisg
ICAgICAgIHJldHVybjsKKyAgICB9CisKICAgICBwbGF0Zm9ybUNvbnRleHQubm90aWZ5UHJlRHJh
d09ic2VydmVyKCk7CiAKLSAgICBhdXRvIGNvbnRleHQgPSBwbGF0Zm9ybUNvbnRleHQucmVuZGVy
VGFyZ2V0KCk7CisgICAgYXV0byogY29udGV4dCA9IHBsYXRmb3JtQ29udGV4dC5yZW5kZXJUYXJn
ZXQoKTsKKworICAgIEZsb2F0U2l6ZSByZW5kZXJUYXJnZXRTaXplID0gY29udGV4dC0+R2V0U2l6
ZSgpOworICAgIGNvbnN0IEZsb2F0UmVjdCBjb250ZXh0UmVjdChGbG9hdFBvaW50KCksIHJlbmRl
clRhcmdldFNpemUpOworICAgIEZsb2F0UmVjdCB3b3JraW5nQ29udGV4dFJlY3QoY29udGV4dFJl
Y3QpOworCisgICAgaWYgKGJvdW5kaW5nUmVjdC5pc0luZmluaXRlKCkpCisgICAgICAgIGJvdW5k
aW5nUmVjdCA9IHdvcmtpbmdDb250ZXh0UmVjdDsKKworICAgIGlmICghY29udGV4dFJlY3QuY29u
dGFpbnMoYm91bmRpbmdSZWN0KSkKKyAgICAgICAgd29ya2luZ0NvbnRleHRSZWN0LnVuaXRlKGJv
dW5kaW5nUmVjdCk7CisKKyAgICB3b3JraW5nQ29udGV4dFJlY3QuZXhwYW5kKHN0ZDo6YWJzKHNo
YWRvd1N0YXRlLm9mZnNldC53aWR0aCgpKSArIHNoYWRvd1N0YXRlLmJsdXIsIHN0ZDo6YWJzKHNo
YWRvd1N0YXRlLm9mZnNldC5oZWlnaHQoKSkgKyBzaGFkb3dTdGF0ZS5ibHVyKTsKKworICAgIGF1
dG8gc2NhbGVGYWN0b3IgPSBiaXRtYXBSZXNvbHV0aW9uKGNvbnRleHQpOworCisgICAgd29ya2lu
Z0NvbnRleHRSZWN0LnNjYWxlKHNjYWxlRmFjdG9yKTsKKworICAgIEludFNpemUgcGl4ZWxEaW1l
bnNpb25zKGNsYW1wVG88aW50Pih3b3JraW5nQ29udGV4dFJlY3Qud2lkdGgoKSksIGNsYW1wVG88
aW50Pih3b3JraW5nQ29udGV4dFJlY3QuaGVpZ2h0KCkpKTsKIAogICAgIC8vIFJlbmRlciB0aGUg
Y3VycmVudCBnZW9tZXRyeSB0byBhIGJpdG1hcCBjb250ZXh0Ci0gICAgQ09NUHRyPElEMkQxQml0
bWFwUmVuZGVyVGFyZ2V0PiBiaXRtYXBUYXJnZXQgPSBjcmVhdGVCaXRtYXBSZW5kZXJUYXJnZXQo
Y29udGV4dCk7CisgICAgQ09NUHRyPElEMkQxQml0bWFwUmVuZGVyVGFyZ2V0PiBiaXRtYXBUYXJn
ZXQgPSBjcmVhdGVCaXRtYXBSZW5kZXJUYXJnZXRPZlNpemUocGl4ZWxEaW1lbnNpb25zLCBjb250
ZXh0KTsKKworICAgIEQyRDFfTUFUUklYXzNYMl9GIGN1cnJlbnRUcmFuc2Zvcm07CisgICAgYml0
bWFwVGFyZ2V0LT5HZXRUcmFuc2Zvcm0oJmN1cnJlbnRUcmFuc2Zvcm0pOworCisgICAgaWYgKCFj
b250ZXh0UmVjdC5jb250YWlucyhib3VuZGluZ1JlY3QubG9jYXRpb24oKSkpIHsKKyAgICAgICAg
YXV0byB0cmFuc2xhdGlvbiA9IEQyRDE6Ok1hdHJpeDN4MkY6OlRyYW5zbGF0aW9uKC1ib3VuZGlu
Z1JlY3QubG9jYXRpb24oKS54KCksIC1ib3VuZGluZ1JlY3QubG9jYXRpb24oKS55KCkpOworICAg
ICAgICBiaXRtYXBUYXJnZXQtPlNldFRyYW5zZm9ybSh0cmFuc2xhdGlvbiAqIGN1cnJlbnRUcmFu
c2Zvcm0pOworICAgIH0KIAogICAgIGJpdG1hcFRhcmdldC0+QmVnaW5EcmF3KCk7CiAgICAgZHJh
d0NvbW1hbmRzKGJpdG1hcFRhcmdldC5nZXQoKSk7CiAgICAgSFJFU1VMVCBociA9IGJpdG1hcFRh
cmdldC0+RW5kRHJhdygpOwogICAgIFJFTEVBU0VfQVNTRVJUKFNVQ0NFRURFRChocikpOwogCi0g
ICAgQ09NUHRyPElEMkQxQml0bWFwPiBiaXRtYXA7Ci0gICAgaHIgPSBiaXRtYXBUYXJnZXQtPkdl
dEJpdG1hcCgmYml0bWFwKTsKLSAgICBSRUxFQVNFX0FTU0VSVChTVUNDRUVERUQoaHIpKTsKKyAg
ICBiaXRtYXBUYXJnZXQtPlNldFRyYW5zZm9ybShjdXJyZW50VHJhbnNmb3JtKTsKIAotICAgIGRy
YXdXaXRoU2hhZG93SGVscGVyKGNvbnRleHQsIGJpdG1hcC5nZXQoKSwgc2hhZG93U3RhdGUuY29s
b3IsIHNoYWRvd1N0YXRlLm9mZnNldCwgc2hhZG93U3RhdGUuYmx1cik7CisgICAgZHJhd1dpdGhT
aGFkb3dIZWxwZXIoY29udGV4dCwgYml0bWFwVGFyZ2V0LmdldCgpLCBib3VuZGluZ1JlY3QsIHNo
YWRvd1N0YXRlLmNvbG9yLCBzaGFkb3dTdGF0ZS5vZmZzZXQsIHNoYWRvd1N0YXRlLmJsdXIpOwog
ICAgIHBsYXRmb3JtQ29udGV4dC5ub3RpZnlQb3N0RHJhd09ic2VydmVyKCk7CiB9CiAKLXZvaWQg
ZHJhd1dpdGhvdXRTaGFkb3coUGxhdGZvcm1Db250ZXh0RGlyZWN0MkQmIHBsYXRmb3JtQ29udGV4
dCwgY29uc3QgRmxvYXRSZWN0JiAvKmJvdW5kaW5nUmVjdCovLCBjb25zdCBXVEY6OkZ1bmN0aW9u
PHZvaWQoSUQyRDFSZW5kZXJUYXJnZXQqKT4mIGRyYXdDb21tYW5kcykKK3ZvaWQgZHJhd1dpdGhv
dXRTaGFkb3coUGxhdGZvcm1Db250ZXh0RGlyZWN0MkQmIHBsYXRmb3JtQ29udGV4dCwgV1RGOjpG
dW5jdGlvbjx2b2lkKElEMkQxUmVuZGVyVGFyZ2V0Kik+JiYgZHJhd0NvbW1hbmRzKQogewogICAg
IHBsYXRmb3JtQ29udGV4dC5ub3RpZnlQcmVEcmF3T2JzZXJ2ZXIoKTsKICAgICBkcmF3Q29tbWFu
ZHMocGxhdGZvcm1Db250ZXh0LnJlbmRlclRhcmdldCgpKTsKQEAgLTY2MCw3ICs3MDQsNyBAQCB2
b2lkIGRyYXdXaXRob3V0U2hhZG93KFBsYXRmb3JtQ29udGV4dERpCiAKIHZvaWQgY2xlYXJSZWN0
KFBsYXRmb3JtQ29udGV4dERpcmVjdDJEJiBwbGF0Zm9ybUNvbnRleHQsIGNvbnN0IEZsb2F0UmVj
dCYgcmVjdCkKIHsKLSAgICBkcmF3V2l0aG91dFNoYWRvdyhwbGF0Zm9ybUNvbnRleHQsIHJlY3Qs
IFsmcGxhdGZvcm1Db250ZXh0LCByZWN0XShJRDJEMVJlbmRlclRhcmdldCogcmVuZGVyVGFyZ2V0
KSB7CisgICAgZHJhd1dpdGhvdXRTaGFkb3cocGxhdGZvcm1Db250ZXh0LCBbJnBsYXRmb3JtQ29u
dGV4dCwgcmVjdF0oSUQyRDFSZW5kZXJUYXJnZXQqIHJlbmRlclRhcmdldCkgewogICAgICAgICBG
bG9hdFJlY3QgcmVuZGVyVGFyZ2V0UmVjdChGbG9hdFBvaW50KCksIHJlbmRlclRhcmdldC0+R2V0
U2l6ZSgpKTsKICAgICAgICAgRmxvYXRSZWN0IHJlY3RUb0NsZWFyKHJlY3QpOwogCkBAIC04MTIs
MTQgKzg1Niw5IEBAIHZvaWQgZHJhd05hdGl2ZUltYWdlKFBsYXRmb3JtQ29udGV4dERpcmUKICAg
ICB9CiAKICAgICBwbGF0Zm9ybUNvbnRleHQuc2V0VGFncygxLCBfX0xJTkVfXyk7Ci0gICAgRnVu
Y3Rpb248dm9pZChJRDJEMVJlbmRlclRhcmdldCopPiBkcmF3RnVuY3Rpb24gPSBbaW1hZ2UsIGFk
anVzdGVkRGVzdFJlY3QsIGdsb2JhbEFscGhhLCBzcmNSZWN0XShJRDJEMVJlbmRlclRhcmdldCog
cmVuZGVyVGFyZ2V0KSB7CisgICAgZHJhd1dpdGhTaGFkb3cocGxhdGZvcm1Db250ZXh0LCBhZGp1
c3RlZERlc3RSZWN0LCBzaGFkb3dTdGF0ZSwgW2ltYWdlLCBhZGp1c3RlZERlc3RSZWN0LCBnbG9i
YWxBbHBoYSwgc3JjUmVjdF0oSUQyRDFSZW5kZXJUYXJnZXQqIHJlbmRlclRhcmdldCkgewogICAg
ICAgICByZW5kZXJUYXJnZXQtPkRyYXdCaXRtYXAoaW1hZ2UsIGFkanVzdGVkRGVzdFJlY3QsIGds
b2JhbEFscGhhLCBEMkQxX0JJVE1BUF9JTlRFUlBPTEFUSU9OX01PREVfTElORUFSLCBzcmNSZWN0
KTsKLSAgICB9OwotCi0gICAgaWYgKHNoYWRvd1N0YXRlLmlzVmlzaWJsZSgpKQotICAgICAgICBk
cmF3V2l0aFNoYWRvdyhwbGF0Zm9ybUNvbnRleHQsIGFkanVzdGVkRGVzdFJlY3QsIHNoYWRvd1N0
YXRlLCBkcmF3RnVuY3Rpb24pOwotICAgIGVsc2UKLSAgICAgICAgZHJhd1dpdGhvdXRTaGFkb3co
cGxhdGZvcm1Db250ZXh0LCBhZGp1c3RlZERlc3RSZWN0LCBkcmF3RnVuY3Rpb24pOworICAgIH0p
OwogCiAgICAgaWYgKCFzdGF0ZVNhdmVyLmRpZFNhdmUoKSkKICAgICAgICAgY29udGV4dC0+U2V0
VHJhbnNmb3JtKGN0bSk7CkBAIC04NjksNyArOTA4LDcgQEAgdm9pZCBkcmF3UGF0dGVybihQbGF0
Zm9ybUNvbnRleHREaXJlY3QyRAogICAgIGlmICghU1VDQ0VFREVEKGhyKSkKICAgICAgICAgcmV0
dXJuOwogCi0gICAgZHJhd1dpdGhvdXRTaGFkb3cocGxhdGZvcm1Db250ZXh0LCBkZXN0UmVjdCwg
W2Rlc3RSZWN0LCBwYXR0ZXJuQnJ1c2hdKElEMkQxUmVuZGVyVGFyZ2V0KiByZW5kZXJUYXJnZXQp
IHsKKyAgICBkcmF3V2l0aG91dFNoYWRvdyhwbGF0Zm9ybUNvbnRleHQsIFtkZXN0UmVjdCwgcGF0
dGVybkJydXNoXShJRDJEMVJlbmRlclRhcmdldCogcmVuZGVyVGFyZ2V0KSB7CiAgICAgICAgIGNv
bnN0IEQyRDFfUkVDVF9GIGQyZFJlY3QgPSBkZXN0UmVjdDsKICAgICAgICAgcmVuZGVyVGFyZ2V0
LT5GaWxsUmVjdGFuZ2xlKCZkMmRSZWN0LCBwYXR0ZXJuQnJ1c2guZ2V0KCkpOwogICAgIH0pOwpA
QCAtODgwLDEwICs5MTksOCBAQCB2b2lkIGRyYXdSZWN0KFBsYXRmb3JtQ29udGV4dERpcmVjdDJE
JiBwCiAgICAgLy8gRklYTUU6IHRoaXMgZnVuY3Rpb24gZG9lcyBub3QgaGFuZGxlIHBhdHRlcm5z
IGFuZCBncmFkaWVudHMgbGlrZSBkcmF3UGF0aCBkb2VzLCBpdCBwcm9iYWJseSBzaG91bGQuCiAg
ICAgQVNTRVJUKCFyZWN0LmlzRW1wdHkoKSk7CiAKLSAgICBhdXRvIGNvbnRleHQgPSBwbGF0Zm9y
bUNvbnRleHQucmVuZGVyVGFyZ2V0KCk7Ci0KICAgICBwbGF0Zm9ybUNvbnRleHQuc2V0VGFncygx
LCBfX0xJTkVfXyk7Ci0gICAgZHJhd1dpdGhvdXRTaGFkb3cocGxhdGZvcm1Db250ZXh0LCByZWN0
LCBbJnBsYXRmb3JtQ29udGV4dCwgcmVjdCwgZmlsbENvbG9yLCBzdHJva2VDb2xvciwgc3Ryb2tl
U3R5bGVdKElEMkQxUmVuZGVyVGFyZ2V0KiByZW5kZXJUYXJnZXQpIHsKKyAgICBkcmF3V2l0aG91
dFNoYWRvdyhwbGF0Zm9ybUNvbnRleHQsIFsmcGxhdGZvcm1Db250ZXh0LCByZWN0LCBmaWxsQ29s
b3IsIHN0cm9rZUNvbG9yLCBzdHJva2VTdHlsZV0oSUQyRDFSZW5kZXJUYXJnZXQqIHJlbmRlclRh
cmdldCkgewogICAgICAgICBjb25zdCBEMkQxX1JFQ1RfRiBkMmRSZWN0ID0gcmVjdDsKICAgICAg
ICAgYXV0byBmaWxsQnJ1c2ggPSBwbGF0Zm9ybUNvbnRleHQuYnJ1c2hXaXRoQ29sb3IoZmlsbENv
bG9yKTsKICAgICAgICAgcmVuZGVyVGFyZ2V0LT5GaWxsUmVjdGFuZ2xlKCZkMmRSZWN0LCBmaWxs
QnJ1c2guZ2V0KCkpOwpAQCAtOTM1LDkgKzk3Miw3IEBAIHZvaWQgZHJhd0xpbmUoUGxhdGZvcm1D
b250ZXh0RGlyZWN0MkQmIHAKIAogICAgIHBsYXRmb3JtQ29udGV4dC5zZXRUYWdzKDEsIF9fTElO
RV9fKTsKIAotICAgIEZsb2F0UmVjdCBib3VuZGluZ1JlY3QocDEsIHAyKTsKLQotICAgIGRyYXdX
aXRob3V0U2hhZG93KHBsYXRmb3JtQ29udGV4dCwgYm91bmRpbmdSZWN0LCBbJnBsYXRmb3JtQ29u
dGV4dCwgcDEsIHAyLCBkMmRTdHJva2VTdHlsZSwgc3Ryb2tlQ29sb3IsIHN0cm9rZVRoaWNrbmVz
c10oSUQyRDFSZW5kZXJUYXJnZXQqIHJlbmRlclRhcmdldCkgeworICAgIGRyYXdXaXRob3V0U2hh
ZG93KHBsYXRmb3JtQ29udGV4dCwgWyZwbGF0Zm9ybUNvbnRleHQsIHAxLCBwMiwgZDJkU3Ryb2tl
U3R5bGUsIHN0cm9rZUNvbG9yLCBzdHJva2VUaGlja25lc3NdKElEMkQxUmVuZGVyVGFyZ2V0KiBy
ZW5kZXJUYXJnZXQpIHsKICAgICAgICAgcmVuZGVyVGFyZ2V0LT5EcmF3TGluZShwMSwgcDIsIHBs
YXRmb3JtQ29udGV4dC5icnVzaFdpdGhDb2xvcihzdHJva2VDb2xvcikuZ2V0KCksIHN0cm9rZVRo
aWNrbmVzcywgZDJkU3Ryb2tlU3R5bGUuZ2V0KCkpOwogICAgIH0pOwogfQpAQCAtOTU2LDEwICs5
OTEsOCBAQCB2b2lkIGZpbGxFbGxpcHNlKFBsYXRmb3JtQ29udGV4dERpcmVjdDJECiB7CiAgICAg
YXV0byBlbGxpcHNlID0gRDJEMTo6RWxsaXBzZShyZWN0LmNlbnRlcigpLCAwLjUgKiByZWN0Lndp
ZHRoKCksIDAuNSAqIHJlY3QuaGVpZ2h0KCkpOwogCi0gICAgYXV0byBjb250ZXh0ID0gcGxhdGZv
cm1Db250ZXh0LnJlbmRlclRhcmdldCgpOwotCiAgICAgcGxhdGZvcm1Db250ZXh0LnNldFRhZ3Mo
MSwgX19MSU5FX18pOwotICAgIGRyYXdXaXRob3V0U2hhZG93KHBsYXRmb3JtQ29udGV4dCwgcmVj
dCwgWyZwbGF0Zm9ybUNvbnRleHQsIGVsbGlwc2UsIGZpbGxDb2xvciwgc3Ryb2tlU3R5bGUsIHN0
cm9rZUNvbG9yLCBzdHJva2VUaGlja25lc3NdKElEMkQxUmVuZGVyVGFyZ2V0KiByZW5kZXJUYXJn
ZXQpIHsKKyAgICBkcmF3V2l0aG91dFNoYWRvdyhwbGF0Zm9ybUNvbnRleHQsIFsmcGxhdGZvcm1D
b250ZXh0LCBlbGxpcHNlLCBmaWxsQ29sb3IsIHN0cm9rZVN0eWxlLCBzdHJva2VDb2xvciwgc3Ry
b2tlVGhpY2tuZXNzXShJRDJEMVJlbmRlclRhcmdldCogcmVuZGVyVGFyZ2V0KSB7CiAgICAgICAg
IGF1dG8gZmlsbEJydXNoID0gcGxhdGZvcm1Db250ZXh0LmJydXNoV2l0aENvbG9yKGZpbGxDb2xv
cik7CiAgICAgICAgIHJlbmRlclRhcmdldC0+RmlsbEVsbGlwc2UoJmVsbGlwc2UsIGZpbGxCcnVz
aC5nZXQoKSk7CiAgICAgICAgIGlmIChzdHJva2VTdHlsZSAhPSBTdHJva2VTdHlsZTo6Tm9TdHJv
a2UpIHsKQEAgLTk3NiwxMCArMTAwOSw4IEBAIHZvaWQgZHJhd0VsbGlwc2UoUGxhdGZvcm1Db250
ZXh0RGlyZWN0MkQKIAogICAgIGF1dG8gZWxsaXBzZSA9IEQyRDE6OkVsbGlwc2UocmVjdC5jZW50
ZXIoKSwgMC41ICogcmVjdC53aWR0aCgpLCAwLjUgKiByZWN0LmhlaWdodCgpKTsKIAotICAgIGF1
dG8gY29udGV4dCA9IHBsYXRmb3JtQ29udGV4dC5yZW5kZXJUYXJnZXQoKTsKLQogICAgIHBsYXRm
b3JtQ29udGV4dC5zZXRUYWdzKDEsIF9fTElORV9fKTsKLSAgICBkcmF3V2l0aG91dFNoYWRvdyhw
bGF0Zm9ybUNvbnRleHQsIHJlY3QsIFsmcGxhdGZvcm1Db250ZXh0LCBlbGxpcHNlLCBzdHJva2VD
b2xvciwgc3Ryb2tlVGhpY2tuZXNzXShJRDJEMVJlbmRlclRhcmdldCogcmVuZGVyVGFyZ2V0KSB7
CisgICAgZHJhd1dpdGhvdXRTaGFkb3cocGxhdGZvcm1Db250ZXh0LCBbJnBsYXRmb3JtQ29udGV4
dCwgZWxsaXBzZSwgc3Ryb2tlQ29sb3IsIHN0cm9rZVRoaWNrbmVzc10oSUQyRDFSZW5kZXJUYXJn
ZXQqIHJlbmRlclRhcmdldCkgewogICAgICAgICBhdXRvIHN0cm9rZUJydXNoID0gcGxhdGZvcm1D
b250ZXh0LmJydXNoV2l0aENvbG9yKHN0cm9rZUNvbG9yKTsKICAgICAgICAgcmVuZGVyVGFyZ2V0
LT5EcmF3RWxsaXBzZSgmZWxsaXBzZSwgc3Ryb2tlQnJ1c2guZ2V0KCksIHN0cm9rZVRoaWNrbmVz
cywgcGxhdGZvcm1Db250ZXh0LnN0cm9rZVN0eWxlKCkpOwogICAgIH0pOwpAQCAtMTA5OSwxNSAr
MTEzMCwxNSBAQCB2b2lkIGVuZFRyYW5zcGFyZW5jeUxheWVyKFBsYXRmb3JtQ29udGV4CiAgICAg
SFJFU1VMVCBociA9IHJlbmRlclRhcmdldC0+RW5kRHJhdygpOwogICAgIFJFTEVBU0VfQVNTRVJU
KFNVQ0NFRURFRChocikpOwogCi0gICAgQ09NUHRyPElEMkQxQml0bWFwPiBiaXRtYXA7Ci0gICAg
aHIgPSByZW5kZXJUYXJnZXQtPkdldEJpdG1hcCgmYml0bWFwKTsKLSAgICBSRUxFQVNFX0FTU0VS
VChTVUNDRUVERUQoaHIpKTsKLQogICAgIGF1dG8gY29udGV4dCA9IHBsYXRmb3JtQ29udGV4dC5y
ZW5kZXJUYXJnZXQoKTsKIAogICAgIGlmIChjdXJyZW50TGF5ZXIuaGFzU2hhZG93KQotICAgICAg
ICBkcmF3V2l0aFNoYWRvd0hlbHBlcihjb250ZXh0LCBiaXRtYXAuZ2V0KCksIGN1cnJlbnRMYXll
ci5zaGFkb3dDb2xvciwgY3VycmVudExheWVyLnNoYWRvd09mZnNldCwgY3VycmVudExheWVyLnNo
YWRvd0JsdXIpOworICAgICAgICBkcmF3V2l0aFNoYWRvd0hlbHBlcihjb250ZXh0LCByZW5kZXJU
YXJnZXQuZ2V0KCksIEZsb2F0UmVjdCgpLCBjdXJyZW50TGF5ZXIuc2hhZG93Q29sb3IsIGN1cnJl
bnRMYXllci5zaGFkb3dPZmZzZXQsIGN1cnJlbnRMYXllci5zaGFkb3dCbHVyKTsKICAgICBlbHNl
IHsKKyAgICAgICAgQ09NUHRyPElEMkQxQml0bWFwPiBiaXRtYXA7CisgICAgICAgIGhyID0gcmVu
ZGVyVGFyZ2V0LT5HZXRCaXRtYXAoJmJpdG1hcCk7CisgICAgICAgIFJFTEVBU0VfQVNTRVJUKFNV
Q0NFRURFRChocikpOworCiAgICAgICAgIENPTVB0cjxJRDJEMUJpdG1hcEJydXNoPiBiaXRtYXBC
cnVzaDsKICAgICAgICAgYXV0byBiaXRtYXBCcnVzaFByb3BlcnRpZXMgPSBEMkQxOjpCaXRtYXBC
cnVzaFByb3BlcnRpZXMoKTsKICAgICAgICAgYXV0byBicnVzaFByb3BlcnRpZXMgPSBEMkQxOjpC
cnVzaFByb3BlcnRpZXMoKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L3dpbi9EaXJlY3QyRE9wZXJhdGlvbnMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy93aW4vRGlyZWN0MkRPcGVyYXRpb25zLmgJKHJldmlzaW9uIDI1MDQy
OCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9EaXJlY3QyRE9wZXJh
dGlvbnMuaAkod29ya2luZyBjb3B5KQpAQCAtMTMzLDkgKzEzMyw4IEBAIHZvaWQgZHJhd05hdGl2
ZUltYWdlKFBsYXRmb3JtQ29udGV4dERpcmUKIHZvaWQgZHJhd1BhdGgoUGxhdGZvcm1Db250ZXh0
RGlyZWN0MkQmLCBjb25zdCBQYXRoJiwgY29uc3QgU3Ryb2tlU291cmNlJiwgY29uc3QgU2hhZG93
U3RhdGUmKTsKIHZvaWQgZHJhd1BhdHRlcm4oUGxhdGZvcm1Db250ZXh0RGlyZWN0MkQmLCBDT01Q
dHI8SUQyRDFCaXRtYXA+JiYsIGNvbnN0IEludFNpemUmLCBjb25zdCBGbG9hdFJlY3QmLCBjb25z
dCBGbG9hdFJlY3QmLCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mLCBjb25zdCBGbG9hdFBvaW50Jiwg
Q29tcG9zaXRlT3BlcmF0b3IsIEJsZW5kTW9kZSk7CiAKLXZvaWQgZHJhd1dpdGhvdXRTaGFkb3co
UGxhdGZvcm1Db250ZXh0RGlyZWN0MkQmLCBjb25zdCBGbG9hdFJlY3QmIGJvdW5kaW5nUmVjdCwg
Y29uc3QgV1RGOjpGdW5jdGlvbjx2b2lkKElEMkQxUmVuZGVyVGFyZ2V0Kik+JiBkcmF3Q29tbWFu
ZHMpOwotdm9pZCBkcmF3V2l0aFNoYWRvdyhQbGF0Zm9ybUNvbnRleHREaXJlY3QyRCYsIGNvbnN0
IEZsb2F0UmVjdCYgYm91bmRpbmdSZWN0LCBjb25zdCBTaGFkb3dTdGF0ZSYsIGNvbnN0IFdURjo6
RnVuY3Rpb248dm9pZChJRDJEMVJlbmRlclRhcmdldCopPiYgZHJhd0NvbW1hbmRzKTsKLXZvaWQg
ZHJhd1dpdGhTaGFkb3dIZWxwZXIoSUQyRDFSZW5kZXJUYXJnZXQqIGNvbnRleHQsIElEMkQxQml0
bWFwKiwgY29uc3QgQ29sb3ImIHNoYWRvd0NvbG9yLCBjb25zdCBGbG9hdFNpemUmIHNoYWRvd09m
ZnNldCwgZmxvYXQgc2hhZG93Qmx1cik7Cit2b2lkIGRyYXdXaXRob3V0U2hhZG93KFBsYXRmb3Jt
Q29udGV4dERpcmVjdDJEJiwgV1RGOjpGdW5jdGlvbjx2b2lkKElEMkQxUmVuZGVyVGFyZ2V0Kik+
JiYgZHJhd0NvbW1hbmRzKTsKK3ZvaWQgZHJhd1dpdGhTaGFkb3coUGxhdGZvcm1Db250ZXh0RGly
ZWN0MkQmLCBGbG9hdFJlY3QgYm91bmRpbmdSZWN0LCBjb25zdCBTaGFkb3dTdGF0ZSYsIFdURjo6
RnVuY3Rpb248dm9pZChJRDJEMVJlbmRlclRhcmdldCopPiYmIGRyYXdDb21tYW5kcyk7CiAKIHZv
aWQgZHJhd1JlY3QoUGxhdGZvcm1Db250ZXh0RGlyZWN0MkQmLCBjb25zdCBGbG9hdFJlY3QmLCBm
bG9hdCwgY29uc3QgQ29sb3ImLCBTdHJva2VTdHlsZSwgY29uc3QgQ29sb3ImKTsKIHZvaWQgZHJh
d0xpbmUoUGxhdGZvcm1Db250ZXh0RGlyZWN0MkQmLCBjb25zdCBGbG9hdFBvaW50JiwgY29uc3Qg
RmxvYXRQb2ludCYsIFN0cm9rZVN0eWxlLCBjb25zdCBDb2xvciYsIGZsb2F0LCBib29sKTsKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9EaXJlY3QyRFV0aWxpdGll
cy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2lu
L0RpcmVjdDJEVXRpbGl0aWVzLmNwcAkocmV2aXNpb24gMjUwNDI4KQorKysgU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0RpcmVjdDJEVXRpbGl0aWVzLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtNjUsMzMgKzY1LDQ1IEBAIEZsb2F0U2l6ZSBiaXRtYXBTaXplKElEMkQxQml0bWFw
KiBiaXRtYXAKICAgICByZXR1cm4gYml0bWFwU291cmNlLT5HZXRTaXplKCk7CiB9CiAKLUZsb2F0
UG9pbnQgYml0bWFwUmVzb2x1dGlvbihJV0lDQml0bWFwU291cmNlKiBiaXRtYXBTb3VyY2UpCitG
bG9hdFNpemUgYml0bWFwUmVzb2x1dGlvbihJV0lDQml0bWFwU291cmNlKiBiaXRtYXBTb3VyY2Up
CiB7Ci0gICAgY29uc3RleHByIGRvdWJsZSBkcGlCYXNlID0gOTYuMDsKKyAgICBjb25zdGV4cHIg
ZG91YmxlIGRwaUJhc2UgPSA5NjsKIAogICAgIGRvdWJsZSBkcGlYLCBkcGlZOwogICAgIEhSRVNV
TFQgaHIgPSBiaXRtYXBTb3VyY2UtPkdldFJlc29sdXRpb24oJmRwaVgsICZkcGlZKTsKICAgICBp
ZiAoIVNVQ0NFRURFRChocikpCiAgICAgICAgIHJldHVybiB7IH07CiAKLSAgICBGbG9hdFBvaW50
IHJlc3VsdChkcGlYLCBkcGlZKTsKKyAgICBGbG9hdFNpemUgcmVzdWx0KGRwaVgsIGRwaVkpOwog
ICAgIHJlc3VsdC5zY2FsZSgxLjAgLyBkcGlCYXNlKTsKICAgICByZXR1cm4gcmVzdWx0OwogfQog
Ci1GbG9hdFBvaW50IGJpdG1hcFJlc29sdXRpb24oSUQyRDFCaXRtYXAqIGJpdG1hcCkKK0Zsb2F0
U2l6ZSBiaXRtYXBSZXNvbHV0aW9uKElEMkQxQml0bWFwKiBiaXRtYXApCiB7Ci0gICAgY29uc3Rl
eHByIGRvdWJsZSBkcGlCYXNlID0gOTYuMDsKKyAgICBjb25zdGV4cHIgZG91YmxlIGRwaUJhc2Ug
PSA5NjsKIAogICAgIGZsb2F0IGRwaVgsIGRwaVk7CiAgICAgYml0bWFwLT5HZXREcGkoJmRwaVgs
ICZkcGlZKTsKIAotICAgIEZsb2F0UG9pbnQgcmVzdWx0KGRwaVgsIGRwaVkpOworICAgIEZsb2F0
U2l6ZSByZXN1bHQoZHBpWCwgZHBpWSk7CiAgICAgcmVzdWx0LnNjYWxlKDEuMCAvIGRwaUJhc2Up
OwogICAgIHJldHVybiByZXN1bHQ7CiAKIH0KIAorRmxvYXRTaXplIGJpdG1hcFJlc29sdXRpb24o
SUQyRDFSZW5kZXJUYXJnZXQqIHRhcmdldCkKK3sKKyAgICBjb25zdGV4cHIgZG91YmxlIGRwaUJh
c2UgPSA5NjsKKworICAgIGZsb2F0IGRwaVgsIGRwaVk7CisgICAgdGFyZ2V0LT5HZXREcGkoJmRw
aVgsICZkcGlZKTsKKworICAgIEZsb2F0U2l6ZSByZXN1bHQoZHBpWCwgZHBpWSk7CisgICAgcmVz
dWx0LnNjYWxlKDEuMCAvIGRwaUJhc2UpOworICAgIHJldHVybiByZXN1bHQ7CisKK30KIHVuc2ln
bmVkIGJpdHNQZXJQaXhlbChHVUlEIGJpdG1hcEZvcm1hdCkKIHsKICAgICBDT01QdHI8SVdJQ0Nv
bXBvbmVudEluZm8+IGNvbXBvbmVudEluZm87CkBAIC00NzIsNiArNDg0LDM0IEBAIENPTVB0cjxJ
RFhHSVN3YXBDaGFpbj4gc3dhcENoYWluT2ZTaXplRm8KICAgICByZXR1cm4gc3dhcENoYWluOwog
fQogCitDT01QdHI8SUQyRDFCaXRtYXA+IGNyZWF0ZUJpdG1hcENvcHlGcm9tQ29udGV4dChJRDJE
MUJpdG1hcFJlbmRlclRhcmdldCogYml0bWFwVGFyZ2V0KQoreworICAgIENPTVB0cjxJRDJEMUJp
dG1hcD4gY3VycmVudENhbnZhczsKKyAgICBIUkVTVUxUIGhyID0gYml0bWFwVGFyZ2V0LT5HZXRC
aXRtYXAoJmN1cnJlbnRDYW52YXMpOworICAgIGlmICghU1VDQ0VFREVEKGhyKSkKKyAgICAgICAg
cmV0dXJuIG51bGxwdHI7CisKKyAgICBEaXJlY3QyRDo6d3JpdGVEaWFnbm9zdGljUE5HVG9QYXRo
KGJpdG1hcFRhcmdldCwgY3VycmVudENhbnZhcy5nZXQoKSwgTCJDOi9Qcm9qZWN0cy9XZWJLaXQv
ZGF0YS9jdXJyZW50Q2FudmFzLnBuZyIpOworCisgICAgYXV0byBiaXRtYXBDcmVhdGVQcm9wZXJ0
aWVzID0gYml0bWFwUHJvcGVydGllcygpOworCisgICAgQ09NUHRyPElEMkQxQml0bWFwPiBiaXRt
YXA7CisgICAgRDJEMV9TSVpFX1UgYml0bWFwU2l6ZSA9IGN1cnJlbnRDYW52YXMtPkdldFBpeGVs
U2l6ZSgpOworICAgIGhyID0gYml0bWFwVGFyZ2V0LT5DcmVhdGVCaXRtYXAoYml0bWFwU2l6ZSwg
Yml0bWFwQ3JlYXRlUHJvcGVydGllcywgJmJpdG1hcCk7CisgICAgaWYgKCFTVUNDRUVERUQoaHIp
KQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgIGF1dG8gdGFyZ2V0UG9zID0gRDJEMTo6
UG9pbnQyVSgpOworICAgIEQyRDFfUkVDVF9VIGRhdGFSZWN0ID0gRDJEMTo6UmVjdFUoMCwgMCwg
Yml0bWFwU2l6ZS53aWR0aCwgYml0bWFwU2l6ZS5oZWlnaHQpOworICAgIGhyID0gYml0bWFwLT5D
b3B5RnJvbUJpdG1hcCgmdGFyZ2V0UG9zLCBjdXJyZW50Q2FudmFzLmdldCgpLCAmZGF0YVJlY3Qp
OworICAgIGlmICghU1VDQ0VFREVEKGhyKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAg
RGlyZWN0MkQ6OndyaXRlRGlhZ25vc3RpY1BOR1RvUGF0aChiaXRtYXBUYXJnZXQsIGJpdG1hcC5n
ZXQoKSwgTCJDOi9Qcm9qZWN0cy9XZWJLaXQvZGF0YS9iaXRtYXAucG5nIik7CisKKyAgICByZXR1
cm4gYml0bWFwOworfQorCiB9IC8vIG5hbWVzcGFjZSBEaXJlY3QyRAogCiB9IC8vIG5hbWVzcGFj
ZSBXZWJDb3JlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vRGly
ZWN0MkRVdGlsaXRpZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy93aW4vRGlyZWN0MkRVdGlsaXRpZXMuaAkocmV2aXNpb24gMjUwNDI4KQorKysgU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0RpcmVjdDJEVXRpbGl0aWVzLmgJKHdv
cmtpbmcgY29weSkKQEAgLTcyLDggKzcyLDkgQEAgdm9pZCBpblBsYWNlU3dpenpsZSh1aW50OF90
KiBieXRlRGF0YSwgdQogCiBJbnRTaXplIGJpdG1hcFNpemUoSVdJQ0JpdG1hcFNvdXJjZSopOwog
RmxvYXRTaXplIGJpdG1hcFNpemUoSUQyRDFCaXRtYXAqKTsKLUZsb2F0UG9pbnQgYml0bWFwUmVz
b2x1dGlvbihJV0lDQml0bWFwU291cmNlKik7Ci1GbG9hdFBvaW50IGJpdG1hcFJlc29sdXRpb24o
SUQyRDFCaXRtYXAqKTsKK0Zsb2F0U2l6ZSBiaXRtYXBSZXNvbHV0aW9uKElXSUNCaXRtYXBTb3Vy
Y2UqKTsKK0Zsb2F0U2l6ZSBiaXRtYXBSZXNvbHV0aW9uKElEMkQxQml0bWFwKik7CitGbG9hdFNp
emUgYml0bWFwUmVzb2x1dGlvbihJRDJEMVJlbmRlclRhcmdldCopOwogdW5zaWduZWQgYml0c1Bl
clBpeGVsKEdVSUQpOwogQ09NUHRyPElEMkQxQml0bWFwPiBjcmVhdGVCaXRtYXAoSUQyRDFSZW5k
ZXJUYXJnZXQqLCBjb25zdCBJbnRTaXplJik7CiBDT01QdHI8SVdJQ0JpdG1hcD4gY3JlYXRlV2lj
Qml0bWFwKGNvbnN0IEludFNpemUmKTsKQEAgLTg0LDYgKzg1LDcgQEAgQ09NUHRyPElEMkQxQml0
bWFwUmVuZGVyVGFyZ2V0PiBjcmVhdGVCaQogQ09NUHRyPElEMkQxRENSZW5kZXJUYXJnZXQ+IGNy
ZWF0ZUdESVJlbmRlclRhcmdldCgpOwogQ09NUHRyPElEWEdJU3VyZmFjZTE+IGNyZWF0ZURYR0lT
dXJmYWNlT2ZTaXplKGNvbnN0IEludFNpemUmLCBJRDNEMTFEZXZpY2UxKiwgYm9vbCBjcm9zc1By
b2Nlc3MpOwogQ09NUHRyPElEMkQxUmVuZGVyVGFyZ2V0PiBjcmVhdGVTdXJmYWNlUmVuZGVyVGFy
Z2V0KElEWEdJU3VyZmFjZTEqKTsKK0NPTVB0cjxJRDJEMUJpdG1hcD4gY3JlYXRlQml0bWFwQ29w
eUZyb21Db250ZXh0KElEMkQxQml0bWFwUmVuZGVyVGFyZ2V0Kik7CiAKIHZvaWQgY29weVJlY3RG
cm9tT25lU3VyZmFjZVRvQW5vdGhlcihJRDJEMUJpdG1hcCogZnJvbSwgSUQyRDFCaXRtYXAqIHRv
LCBjb25zdCBJbnRTaXplJiBzb3VyY2VPZmZzZXQsIGNvbnN0IEludFJlY3QmLCBjb25zdCBJbnRT
aXplJiBkZXN0T2Zmc2V0ID0gSW50U2l6ZSgpKTsKIApJbmRleDogU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3Mvd2luL0dyYWRpZW50RGlyZWN0MkQuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9HcmFkaWVudERpcmVjdDJELmNwcAko
cmV2aXNpb24gMjUwNDI4KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2lu
L0dyYWRpZW50RGlyZWN0MkQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMCw2ICszMCw3IEBACiAj
aW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCiAjaW5jbHVkZSAiUGxhdGZvcm1Db250ZXh0RGly
ZWN0MkQuaCIKICNpbmNsdWRlIDxkMmQxLmg+CisjaW5jbHVkZSA8d3RmL01hdGhFeHRyYXMuaD4K
ICNpbmNsdWRlIDx3dGYvUmV0YWluUHRyLmg+CiAKICNkZWZpbmUgR1JBRElFTlRfRFJBV0lORyAz
CkBAIC03MCw2ICs3MSwzNSBAQCB2b2lkIEdyYWRpZW50OjpnZW5lcmF0ZUdyYWRpZW50KElEMkQx
UmVuCiAgICAgICAgIGdyYWRpZW50U3RvcHMuYXBwZW5kKEQyRDE6OkdyYWRpZW50U3RvcChzdG9w
Lm9mZnNldCwgRDJEMTo6Q29sb3JGKHIsIGcsIGIsIGEpKSk7CiAgICAgfQogCisgICAgV1RGOjpz
d2l0Y2hPbihtX2RhdGEsCisgICAgICAgIFsmXSAoY29uc3QgTGluZWFyRGF0YSYpIHsKKyAgICAg
ICAgICAgIC8vIE5vIGFjdGlvbiBuZWVkZWQuCisgICAgICAgIH0sCisgICAgICAgIFsmXSAoY29u
c3QgUmFkaWFsRGF0YSYgZGF0YSkgeworICAgICAgICAgICAgaWYgKGRhdGEuc3RhcnRSYWRpdXMg
JiYgZGF0YS5lbmRSYWRpdXMpIHsKKyAgICAgICAgICAgICAgICBmbG9hdCBzdGFydFBvc2l0aW9u
ID0gc3RkOjphYnMoZGF0YS5zdGFydFJhZGl1cyAvIGRhdGEuZW5kUmFkaXVzKTsKKyAgICAgICAg
ICAgICAgICBpZiAoc3RhcnRQb3NpdGlvbiA+IDEuMCkKKyAgICAgICAgICAgICAgICAgICAgc3Rh
cnRQb3NpdGlvbiA9IDEuMCAvIHN0YXJ0UG9zaXRpb247CisgICAgICAgICAgICAgICAgZmxvYXQg
YXZhaWxhYmxlUmFuZ2UgPSAxLjAgLSBzdGFydFBvc2l0aW9uOworICAgICAgICAgICAgICAgIFJF
TEVBU0VfQVNTRVJUKGF2YWlsYWJsZVJhbmdlIDw9IDEuMCAmJiBhdmFpbGFibGVSYW5nZSA+PSAw
KTsKKworICAgICAgICAgICAgICAgIGZvciAoYXV0byYgc3RvcCA6IGdyYWRpZW50U3RvcHMpIHsK
KyAgICAgICAgICAgICAgICAgICAgc3RvcC5wb3NpdGlvbiAqPSBhdmFpbGFibGVSYW5nZTsKKyAg
ICAgICAgICAgICAgICAgICAgc3RvcC5wb3NpdGlvbiArPSBzdGFydFBvc2l0aW9uOworICAgICAg
ICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIC8vIFJlc3RvcmUgdGhlICdzdGFydCcgcG9z
aXRpb24KKyAgICAgICAgICAgICAgICBhdXRvIGZpcnN0U3RvcCA9IGdyYWRpZW50U3RvcHMuZmly
c3QoKTsKKyAgICAgICAgICAgICAgICBmaXJzdFN0b3AucG9zaXRpb24gPSAwOworCisgICAgICAg
ICAgICAgICAgZ3JhZGllbnRTdG9wcy5pbnNlcnQoMCwgZmlyc3RTdG9wKTsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgfSwKKyAgICAgICAgWyZdIChjb25zdCBDb25pY0RhdGEmKSB7CisgICAgICAg
ICAgICAvLyBGSVhNRTogQXNzZXNzIHdoZXRoZXIgbmVlZGVkIGZvciBDb25pYyBHcmFkaWVudHMu
CisgICAgICAgIH0KKyAgICApOworCiAgICAgQ09NUHRyPElEMkQxR3JhZGllbnRTdG9wQ29sbGVj
dGlvbj4gZ3JhZGllbnRTdG9wQ29sbGVjdGlvbjsKICAgICBIUkVTVUxUIGhyID0gcmVuZGVyVGFy
Z2V0LT5DcmVhdGVHcmFkaWVudFN0b3BDb2xsZWN0aW9uKGdyYWRpZW50U3RvcHMuZGF0YSgpLCBn
cmFkaWVudFN0b3BzLnNpemUoKSwgJmdyYWRpZW50U3RvcENvbGxlY3Rpb24pOwogICAgIFJFTEVB
U0VfQVNTRVJUKFNVQ0NFRURFRChocikpOwpAQCAtOTAsMTIgKzEyMCwxNCBAQCB2b2lkIEdyYWRp
ZW50OjpnZW5lcmF0ZUdyYWRpZW50KElEMkQxUmVuCiAgICAgICAgICAgICBtX2dyYWRpZW50ID0g
bGluZWFyR3JhZGllbnQ7CiAgICAgICAgIH0sCiAgICAgICAgIFsmXSAoY29uc3QgUmFkaWFsRGF0
YSYgZGF0YSkgewotICAgICAgICAgICAgRmxvYXRTaXplIG9mZnNldCA9IGRhdGEucG9pbnQxIC0g
ZGF0YS5wb2ludDA7Ci0gICAgICAgICAgICBJRDJEMVJhZGlhbEdyYWRpZW50QnJ1c2gqIHJhZGlh
bEdyYWRpZW50ID0gbnVsbHB0cjsKLSAgICAgICAgICAgIGZsb2F0IHJhZGl1c1ggPSBkYXRhLmVu
ZFJhZGl1cyArIG9mZnNldC53aWR0aCgpOworICAgICAgICAgICAgRmxvYXRTaXplIG9mZnNldCA9
IGRhdGEucG9pbnQwIC0gZGF0YS5wb2ludDE7CisgICAgICAgICAgICBGbG9hdFBvaW50IGNlbnRl
ciA9IGRhdGEucG9pbnQxOworICAgICAgICAgICAgZmxvYXQgcmFkaXVzWCA9IGRhdGEuZW5kUmFk
aXVzOwogICAgICAgICAgICAgZmxvYXQgcmFkaXVzWSA9IHJhZGl1c1ggLyBkYXRhLmFzcGVjdFJh
dGlvOworCisgICAgICAgICAgICBJRDJEMVJhZGlhbEdyYWRpZW50QnJ1c2gqIHJhZGlhbEdyYWRp
ZW50ID0gbnVsbHB0cjsKICAgICAgICAgICAgIGhyID0gcmVuZGVyVGFyZ2V0LT5DcmVhdGVSYWRp
YWxHcmFkaWVudEJydXNoKAotICAgICAgICAgICAgICAgIEQyRDE6OlJhZGlhbEdyYWRpZW50QnJ1
c2hQcm9wZXJ0aWVzKGRhdGEucG9pbnQwLCBEMkQxOjpQb2ludDJGKG9mZnNldC53aWR0aCgpLCBv
ZmZzZXQuaGVpZ2h0KCkpLCByYWRpdXNYLCByYWRpdXNZKSwKKyAgICAgICAgICAgICAgICBEMkQx
OjpSYWRpYWxHcmFkaWVudEJydXNoUHJvcGVydGllcyhjZW50ZXIsIEQyRDE6OlBvaW50MkYob2Zm
c2V0LndpZHRoKCksIG9mZnNldC5oZWlnaHQoKSksIHJhZGl1c1gsIHJhZGl1c1kpLAogICAgICAg
ICAgICAgICAgIEQyRDE6OkJydXNoUHJvcGVydGllcygpLCBncmFkaWVudFN0b3BDb2xsZWN0aW9u
LmdldCgpLAogICAgICAgICAgICAgICAgICZyYWRpYWxHcmFkaWVudCk7CiAgICAgICAgICAgICBS
RUxFQVNFX0FTU0VSVChTVUNDRUVERUQoaHIpKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL3dpbi9JbWFnZUJ1ZmZlckRhdGFEaXJlY3QyRC5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ltYWdlQnVmZmVyRGF0YURp
cmVjdDJELmNwcAkocmV2aXNpb24gMjUwNDI4KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3Mvd2luL0ltYWdlQnVmZmVyRGF0YURpcmVjdDJELmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMzA0LDcgKzMwNCw3IEBAIGJvb2wgSW1hZ2VCdWZmZXJEYXRhOjpyZWFkRGF0YUZyb21CaXRt
YXAKIAogICAgIGNvbnRleHQtPmVuZERyYXcoKTsKIAotICAgIENPTVB0cjxJRDJEMURldmljZUNv
bnRleHQ+IGQyZERldmljZUNvbnRleHQoUXVlcnksIHBsYXRmb3JtQ29udGV4dC0+cmVuZGVyVGFy
Z2V0KCkpOworICAgIENPTVB0cjxJRDJEMURldmljZUNvbnRleHQ+IGQyZERldmljZUNvbnRleHQg
PSBwbGF0Zm9ybUNvbnRleHQtPmRldmljZUNvbnRleHQoKTsKICAgICBBU1NFUlQoISFkMmREZXZp
Y2VDb250ZXh0KTsKIAogICAgIGF1dG8gYnl0ZXNQZXJSb3dJbkRhdGEgPSBwaXhlbFNpemUud2lk
dGgoKSAqIDQ7CkBAIC00OTcsNiArNDk3LDcgQEAgQ09NUHRyPElEMkQxQml0bWFwPiBJbWFnZUJ1
ZmZlckRhdGE6OmNvbQogICAgIH0KIAogICAgIGF1dG8gc2l6ZSA9IGJpdG1hcC0+R2V0UGl4ZWxT
aXplKCk7CisgICAgQVNTRVJUKHNpemUuaGVpZ2h0ICYmIHNpemUud2lkdGgpOwogCiAgICAgQ2hl
Y2tlZDx1bnNpZ25lZCwgUmVjb3JkT3ZlcmZsb3c+IG51bUJ5dGVzID0gc2l6ZS53aWR0aCAqIHNp
emUuaGVpZ2h0ICogNDsKICAgICBpZiAobnVtQnl0ZXMuaGFzT3ZlcmZsb3dlZCgpKQpAQCAtNTA2
LDE2ICs1MDcsMTMgQEAgQ09NUHRyPElEMkQxQml0bWFwPiBJbWFnZUJ1ZmZlckRhdGE6OmNvbQog
ICAgIC8vIFdlIGNhbm5vdCBhY2Nlc3MgdGhlIGRhdGEgYmFja2luZyBhbiBJV0lDQml0bWFwIHdo
aWxlIGFuIGFjdGl2ZSBkcmF3IHNlc3Npb24gaXMgb3Blbi4KICAgICBjb250ZXh0LT5lbmREcmF3
KCk7CiAKLSAgICBDT01QdHI8SUQyRDFEZXZpY2VDb250ZXh0PiBzb3VyY2VEZXZpY2VDb250ZXh0
OwotICAgIEhSRVNVTFQgaHIgPSBwbGF0Zm9ybUNvbnRleHQtPnJlbmRlclRhcmdldCgpLT5RdWVy
eUludGVyZmFjZShfX3V1aWRvZihJRDJEMURldmljZUNvbnRleHQpLCByZWludGVycHJldF9jYXN0
PHZvaWQqKj4oJnNvdXJjZURldmljZUNvbnRleHQpKTsKLSAgICBBU1NFUlQoU1VDQ0VFREVEKGhy
KSk7Ci0KKyAgICBDT01QdHI8SUQyRDFEZXZpY2VDb250ZXh0PiBzb3VyY2VEZXZpY2VDb250ZXh0
ID0gcGxhdGZvcm1Db250ZXh0LT5kZXZpY2VDb250ZXh0KCk7CiAgICAgaWYgKCFzb3VyY2VEZXZp
Y2VDb250ZXh0KQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAogICAgIENPTVB0cjxJRDJEMUJp
dG1hcDE+IHNvdXJjZUNQVUJpdG1hcDsKICAgICBEMkQxX0JJVE1BUF9QUk9QRVJUSUVTMSBiaXRt
YXBQcm9wZXJ0aWVzID0gRDJEMTo6Qml0bWFwUHJvcGVydGllczEoRDJEMV9CSVRNQVBfT1BUSU9O
U19DUFVfUkVBRCB8IEQyRDFfQklUTUFQX09QVElPTlNfQ0FOTk9UX0RSQVcsIERpcmVjdDJEOjpw
aXhlbEZvcm1hdCgpKTsKLSAgICBociA9IHNvdXJjZURldmljZUNvbnRleHQtPkNyZWF0ZUJpdG1h
cChiaXRtYXAtPkdldFBpeGVsU2l6ZSgpLCBudWxscHRyLCBieXRlc1BlclJvdy51bnNhZmVHZXQo
KSwgYml0bWFwUHJvcGVydGllcywgJnNvdXJjZUNQVUJpdG1hcCk7CisgICAgSFJFU1VMVCBociA9
IHNvdXJjZURldmljZUNvbnRleHQtPkNyZWF0ZUJpdG1hcChiaXRtYXAtPkdldFBpeGVsU2l6ZSgp
LCBudWxscHRyLCBieXRlc1BlclJvdy51bnNhZmVHZXQoKSwgYml0bWFwUHJvcGVydGllcywgJnNv
dXJjZUNQVUJpdG1hcCk7CiAgICAgaWYgKCFTVUNDRUVERUQoaHIpKQogICAgICAgICByZXR1cm4g
bnVsbHB0cjsKIApJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL1Bh
dGhEaXJlY3QyRC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3Mvd2luL1BhdGhEaXJlY3QyRC5jcHAJKHJldmlzaW9uIDI1MDQyOCkKKysrIFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9QYXRoRGlyZWN0MkQuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0zMjcsNiArMzI3LDIyIEBAIEZsb2F0UmVjdCBQYXRoOjpmYXN0Qm91bmRpbmdSZWN0
KCkgY29uc3QKICAgICByZXR1cm4gYm91bmRzOwogfQogCitGbG9hdFJlY3QgUGF0aDo6ZmFzdEJv
dW5kaW5nUmVjdEZvclN0cm9rZShjb25zdCBQbGF0Zm9ybUNvbnRleHREaXJlY3QyRCYgcGxhdGZv
cm1Db250ZXh0KSBjb25zdAoreworICAgIGlmIChpc051bGwoKSkKKyAgICAgICAgcmV0dXJuIEZs
b2F0UmVjdCgpOworCisgICAgZmxvYXQgdG9sZXJhbmNlID0gMTAuMDsKKworICAgIGF1dG8qIHN0
cm9rZVN0eWxlID0gY29uc3RfY2FzdDxQbGF0Zm9ybUNvbnRleHREaXJlY3QyRCY+KHBsYXRmb3Jt
Q29udGV4dCkuc3Ryb2tlU3R5bGUoKTsKKworICAgIEQyRDFfUkVDVF9GIGJvdW5kcyA9IHsgfTsK
KyAgICBpZiAoIVNVQ0NFRURFRChtX3BhdGgtPkdldFdpZGVuZWRCb3VuZHMocGxhdGZvcm1Db250
ZXh0LnN0cm9rZVRoaWNrbmVzcygpLCBzdHJva2VTdHlsZSwgbnVsbHB0ciwgdG9sZXJhbmNlLCAm
Ym91bmRzKSkpCisgICAgICAgIHJldHVybiBGbG9hdFJlY3QoKTsKKworICAgIHJldHVybiBib3Vu
ZHM7Cit9CisKIEZsb2F0UmVjdCBQYXRoOjpzdHJva2VCb3VuZGluZ1JlY3QoU3Ryb2tlU3R5bGVB
cHBsaWVyKiBhcHBsaWVyKSBjb25zdAogewogICAgIGlmIChpc051bGwoKSkKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9QbGF0Zm9ybUNvbnRleHREaXJlY3QyRC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL1Bs
YXRmb3JtQ29udGV4dERpcmVjdDJELmNwcAkocmV2aXNpb24gMjUwNDI4KQorKysgU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL1BsYXRmb3JtQ29udGV4dERpcmVjdDJELmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMjksNiArMjksNyBAQAogI2lmIFVTRShESVJFQ1QyRCkKIAogI2lu
Y2x1ZGUgIkRpcmVjdDJET3BlcmF0aW9ucy5oIgorI2luY2x1ZGUgIkRpcmVjdDJEVXRpbGl0aWVz
LmgiCiAjaW5jbHVkZSA8ZDJkMS5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkBAIC01MSw2ICs1
MiwxNyBAQCBQbGF0Zm9ybUNvbnRleHREaXJlY3QyRDo6UGxhdGZvcm1Db250ZXh0CiB7CiAgICAg
bV9zdGF0ZVN0YWNrLmFwcGVuZChTdGF0ZSgpKTsKICAgICBtX3N0YXRlID0gJm1fc3RhdGVTdGFj
ay5sYXN0KCk7CisKKyAgICBtX2RldmljZUNvbnRleHQucXVlcnkobV9yZW5kZXJUYXJnZXQuZ2V0
KCkpOworICAgIFJFTEVBU0VfQVNTRVJUKCEhbV9kZXZpY2VDb250ZXh0KTsKK30KKwordm9pZCBQ
bGF0Zm9ybUNvbnRleHREaXJlY3QyRDo6c2V0UmVuZGVyVGFyZ2V0KElEMkQxUmVuZGVyVGFyZ2V0
KiByZW5kZXJUYXJnZXQpCit7CisgICAgbV9yZW5kZXJUYXJnZXQgPSByZW5kZXJUYXJnZXQ7CisK
KyAgICBtX2RldmljZUNvbnRleHQucXVlcnkobV9yZW5kZXJUYXJnZXQuZ2V0KCkpOworICAgIFJF
TEVBU0VfQVNTRVJUKCEhbV9kZXZpY2VDb250ZXh0KTsKIH0KIAogSUQyRDFMYXllciogUGxhdGZv
cm1Db250ZXh0RGlyZWN0MkQ6OmNsaXBMYXllcigpIGNvbnN0CkBAIC03NCwxMCArODYsNyBAQCB2
b2lkIFBsYXRmb3JtQ29udGV4dERpcmVjdDJEOjpyZXN0b3JlKCkKIHsKICAgICBBU1NFUlQobV9y
ZW5kZXJUYXJnZXQpOwogCi0gICAgLy8gVGhlcmUgc2hvdWxkIGFsd2F5cyBiZSBhdCBsZWFzdCBv
bmUgbWFudWFsbHkgc2F2ZWQgc3RhdGUgaWYgYSByZXN0b3JlIGlzIGJlaW5nIGNhbGxlZC4KLSAg
ICBBU1NFUlQobV9zdGF0ZVN0YWNrLnNpemUoKSA+IDEpOwotCi0gICAgLy8gQ2FuJ3QgcmVzdG9y
ZSBpZiB3ZSBuZXZlciBjYWxsZWQgc2F2ZS4KKyAgICAvLyBObyBuZWVkIHRvIHJlc3RvcmUgaWYg
d2UgZG9uJ3QgaGF2ZSBhIHNhdmVkIGVsZW1lbnQgb24gdGhlIHN0YWNrLgogICAgIGlmIChtX3N0
YXRlU3RhY2suc2l6ZSgpID09IDEpCiAgICAgICAgIHJldHVybjsKIApAQCAtMjc4LDcgKzI4Nyw3
IEBAIHZvaWQgUGxhdGZvcm1Db250ZXh0RGlyZWN0MkQ6OmVuZERyYXcoKQogewogICAgIEFTU0VS
VChtX3JlbmRlclRhcmdldCk7CiAKLSAgICB3aGlsZSAobV9zdGF0ZVN0YWNrLnNpemUoKSA+IDEp
CisgICAgaWYgKG1fc3RhdGVTdGFjay5zaXplKCkgPiAxKQogICAgICAgICByZXN0b3JlKCk7CiAK
ICAgICBjbGVhckNsaXBzKG1fc3RhdGUtPm1fY2xpcHMpOwpAQCAtMjkyLDYgKzMwMSw4IEBAIHZv
aWQgUGxhdGZvcm1Db250ZXh0RGlyZWN0MkQ6OmVuZERyYXcoKQogICAgICAgICBXVEZMb2dBbHdh
eXMoIkZhaWxlZCBpbiBQbGF0Zm9ybUNvbnRleHREaXJlY3QyRDo6ZW5kRHJhdzogaHI9JXhkLCBm
aXJzdD0lbGQsIHNlY29uZD0lbGQiLCBociwgZmlyc3QsIHNlY29uZCk7CiAKICAgICAtLWJlZ2lu
RHJhd0NvdW50OworCisgICAgY29tcG9zaXRlSWZOZWVkZWQoKTsKIH0KIAogdm9pZCBQbGF0Zm9y
bUNvbnRleHREaXJlY3QyRDo6c2V0VGFncyhEMkQxX1RBRyB0YWcxLCBEMkQxX1RBRyB0YWcyKQpA
QCAtMzE5LDYgKzMzMCw3MyBAQCB2b2lkIFBsYXRmb3JtQ29udGV4dERpcmVjdDJEOjpwdXNoQ2xp
cChECiAgICAgbV9zdGF0ZS0+bV9jbGlwcy5hcHBlbmQoY2xpcFR5cGUpOwogfQogCit2b2lkIFBs
YXRmb3JtQ29udGV4dERpcmVjdDJEOjpjb21wb3NpdGVJZk5lZWRlZCgpCit7CisgICAgaWYgKCFt
X2NvbXBvc2l0ZVNvdXJjZSkKKyAgICAgICAgcmV0dXJuOworCisgICAgQ09NUHRyPElEMkQxQml0
bWFwUmVuZGVyVGFyZ2V0PiBiaXRtYXBUYXJnZXQoUXVlcnksIG1fcmVuZGVyVGFyZ2V0LmdldCgp
KTsKKyAgICBpZiAoIWJpdG1hcFRhcmdldCkKKyAgICAgICAgcmV0dXJuOworCisgICAgQ09NUHRy
PElEMkQxQml0bWFwPiBjdXJyZW50Q2FudmFzID0gRGlyZWN0MkQ6OmNyZWF0ZUJpdG1hcENvcHlG
cm9tQ29udGV4dChiaXRtYXBUYXJnZXQuZ2V0KCkpOworICAgIGlmICghY3VycmVudENhbnZhcykK
KyAgICAgICAgcmV0dXJuOworCisgICAgQ09NUHRyPElEMkQxQml0bWFwPiBiaXRtYXA7CisgICAg
SFJFU1VMVCBociA9IGJpdG1hcFRhcmdldC0+R2V0Qml0bWFwKCZiaXRtYXApOworICAgIFJFTEVB
U0VfQVNTRVJUKFNVQ0NFRURFRChocikpOworICAgIERpcmVjdDJEOjp3cml0ZURpYWdub3N0aWNQ
TkdUb1BhdGgoYml0bWFwVGFyZ2V0LmdldCgpLCBiaXRtYXAuZ2V0KCksIEwiQzovUHJvamVjdHMv
V2ViS2l0L2RhdGEvYWZ0ZXIucG5nIik7CisKKyAgICBDT01QdHI8SUQyRDFFZmZlY3Q+IGVmZmVj
dDsKKworICAgIGlmIChtX2NvbXBvc2l0ZU1vZGUgIT0gRDJEMV9DT01QT1NJVEVfTU9ERV9GT1JD
RV9EV09SRCkgeworICAgICAgICBtX2RldmljZUNvbnRleHQtPkNyZWF0ZUVmZmVjdChDTFNJRF9E
MkQxQ29tcG9zaXRlLCAmZWZmZWN0KTsKKyAgICAgICAgZWZmZWN0LT5TZXRJbnB1dCgwLCBtX2Nv
bXBvc2l0ZVNvdXJjZS5nZXQoKSk7CisgICAgICAgIGVmZmVjdC0+U2V0SW5wdXQoMSwgY3VycmVu
dENhbnZhcy5nZXQoKSk7CisgICAgICAgIGVmZmVjdC0+U2V0VmFsdWUoRDJEMV9DT01QT1NJVEVf
UFJPUF9NT0RFLCBtX2NvbXBvc2l0ZU1vZGUpOworICAgIH0gZWxzZSBpZiAobV9ibGVuZE1vZGUg
IT0gRDJEMV9CTEVORF9NT0RFX0ZPUkNFX0RXT1JEKSB7CisgICAgICAgIG1fZGV2aWNlQ29udGV4
dC0+Q3JlYXRlRWZmZWN0KENMU0lEX0QyRDFCbGVuZCwgJmVmZmVjdCk7CisgICAgICAgIGVmZmVj
dC0+U2V0SW5wdXQoMCwgY3VycmVudENhbnZhcy5nZXQoKSk7CisgICAgICAgIGVmZmVjdC0+U2V0
SW5wdXQoMSwgbV9jb21wb3NpdGVTb3VyY2UuZ2V0KCkpOworICAgICAgICBlZmZlY3QtPlNldFZh
bHVlKEQyRDFfQkxFTkRfUFJPUF9NT0RFLCBtX2JsZW5kTW9kZSk7CisgICAgfQorCisgICAgaWYg
KGVmZmVjdCkgeworICAgICAgICBtX2RldmljZUNvbnRleHQtPkJlZ2luRHJhdygpOworICAgICAg
ICBtX2RldmljZUNvbnRleHQtPkNsZWFyKEQyRDE6OkNvbG9yRigwLCAwLCAwLCAwKSk7CisgICAg
ICAgIG1fZGV2aWNlQ29udGV4dC0+RHJhd0ltYWdlKGVmZmVjdC5nZXQoKSk7CisgICAgICAgIG1f
ZGV2aWNlQ29udGV4dC0+RW5kRHJhdygpOworICAgIH0KKworICAgIG1fY29tcG9zaXRlU291cmNl
ID0gbnVsbHB0cjsKK30KKwordm9pZCBQbGF0Zm9ybUNvbnRleHREaXJlY3QyRDo6c2V0QmxlbmRB
bmRDb21wb3NpdGVNb2RlKEQyRDFfQkxFTkRfTU9ERSBibGVuZCwgRDJEMV9DT01QT1NJVEVfTU9E
RSBtb2RlKQoreworICAgIGlmIChtb2RlID09IG1fY29tcG9zaXRlTW9kZSAmJiBibGVuZCA9PSBt
X2JsZW5kTW9kZSkKKyAgICAgICAgcmV0dXJuOworCisgICAgLy8gRGlyZWN0MkQgaGFuZGxlcyBj
b21wb3NpdGluZyBiYXNlZCBvbiBiaXRtYXBzLiBJZiB3ZSBhcmUgY2hhbmdpbmcgdGhlCisgICAg
Ly8gY29tcG9zaXRpbmcgbW9kZSwgd2UgbmVlZCB0byBjYXB0dXJlIHRoZSBjdXJyZW50IHN0YXRl
IG9mIHRoZSByZW5kZXJpbmcKKyAgICAvLyBpbiBhIGJpdG1hcCwgcGVyZm9ybSBkcmF3aW5nIG9w
ZXJhdGlvbnMgdW50aWwgd2UgZmluaXNoLCB0aGVuIGhhbmRsZQorICAgIC8vIHRoZSBjb21wb3N0
aW5nIG9mIHRoZSB0d28gbGF5ZXJzLgorICAgIENPTVB0cjxJRDJEMUJpdG1hcFJlbmRlclRhcmdl
dD4gYml0bWFwVGFyZ2V0KFF1ZXJ5LCBtX3JlbmRlclRhcmdldC5nZXQoKSk7CisgICAgaWYgKCFi
aXRtYXBUYXJnZXQpCisgICAgICAgIHJldHVybjsKKworICAgIGVuZERyYXcoKTsKKworICAgIG1f
Y29tcG9zaXRlTW9kZSA9IG1vZGU7CisgICAgbV9ibGVuZE1vZGUgPSBibGVuZDsKKworICAgIG1f
Y29tcG9zaXRlU291cmNlID0gRGlyZWN0MkQ6OmNyZWF0ZUJpdG1hcENvcHlGcm9tQ29udGV4dChi
aXRtYXBUYXJnZXQuZ2V0KCkpOworCisgICAgYmVnaW5EcmF3KCk7CisKKyAgICBtX2RldmljZUNv
bnRleHQtPkNsZWFyKEQyRDE6OkNvbG9yRigwLCAwLCAwLCAwKSk7Cit9CisKIH0gLy8gbmFtZXNw
YWNlIFdlYkNvcmUKIAogI2VuZGlmIC8vIFVTRShESVJFQ1QyRCkKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9QbGF0Zm9ybUNvbnRleHREaXJlY3QyRC5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9QbGF0Zm9ybUNv
bnRleHREaXJlY3QyRC5oCShyZXZpc2lvbiAyNTA0MjgpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy93aW4vUGxhdGZvcm1Db250ZXh0RGlyZWN0MkQuaAkod29ya2luZyBjb3B5
KQpAQCAtNTMsNyArNTMsOSBAQCBwdWJsaWM6CiAgICAgflBsYXRmb3JtQ29udGV4dERpcmVjdDJE
KCk7CiAKICAgICBJRDJEMVJlbmRlclRhcmdldCogcmVuZGVyVGFyZ2V0KCkgeyByZXR1cm4gbV9y
ZW5kZXJUYXJnZXQuZ2V0KCk7IH0KLSAgICB2b2lkIHNldFJlbmRlclRhcmdldChJRDJEMVJlbmRl
clRhcmdldCogcmVuZGVyVGFyZ2V0KSB7IG1fcmVuZGVyVGFyZ2V0ID0gcmVuZGVyVGFyZ2V0OyB9
CisgICAgdm9pZCBzZXRSZW5kZXJUYXJnZXQoSUQyRDFSZW5kZXJUYXJnZXQqKTsKKworICAgIElE
MkQxRGV2aWNlQ29udGV4dCogZGV2aWNlQ29udGV4dCgpIHsgcmV0dXJuIG1fZGV2aWNlQ29udGV4
dC5nZXQoKTsgfQogCiAgICAgSUQzRDExRGV2aWNlMSogZDNkRGV2aWNlKCkgY29uc3QgeyByZXR1
cm4gbV9kM2REZXZpY2UuZ2V0KCk7IH0KICAgICB2b2lkIHNldEQzRERldmljZShJRDNEMTFEZXZp
Y2UxKiBkZXZpY2UpIHsgbV9kM2REZXZpY2UgPSBkZXZpY2U7IH0KQEAgLTEwMyw4ICsxMDUsNyBA
QCBwdWJsaWM6CiAgICAgdm9pZCBzZXRTdHJva2VUaGlja25lc3MoZmxvYXQpOwogICAgIHZvaWQg
c2V0RGFzaGVzKGNvbnN0IERhc2hBcnJheSYpOwogCi0gICAgdm9pZCBzZXRCbGVuZE1vZGUoRDJE
MV9CTEVORF9NT0RFIG1vZGUpIHsgbV9ibGVuZE1vZGUgPSBtb2RlOyB9Ci0gICAgdm9pZCBzZXRD
b21wb3NpdGVNb2RlKEQyRDFfQ09NUE9TSVRFX01PREUgbW9kZSkgeyBtX2NvbXBvc2l0ZU1vZGUg
PSBtb2RlOyB9CisgICAgdm9pZCBzZXRCbGVuZEFuZENvbXBvc2l0ZU1vZGUoRDJEMV9CTEVORF9N
T0RFLCBEMkQxX0NPTVBPU0lURV9NT0RFKTsKIAogICAgIHZvaWQgc2V0VGFncyhEMkQxX1RBRyB0
YWcxLCBEMkQxX1RBRyB0YWcyKTsKICAgICB2b2lkIG5vdGlmeVByZURyYXdPYnNlcnZlcigpOwpA
QCAtMTE0LDEwICsxMTUsMTIgQEAgcHVibGljOgogCiBwcml2YXRlOgogICAgIHZvaWQgY2xlYXJD
bGlwcyhWZWN0b3I8RGlyZWN0MkRMYXllclR5cGU+Jik7CisgICAgdm9pZCBjb21wb3NpdGVJZk5l
ZWRlZCgpOwogCiAgICAgR3JhcGhpY3NDb250ZXh0UGxhdGZvcm1Qcml2YXRlKiBtX2dyYXBoaWNz
Q29udGV4dFByaXZhdGUgeyBudWxscHRyIH07CiAKICAgICBDT01QdHI8SUQyRDFSZW5kZXJUYXJn
ZXQ+IG1fcmVuZGVyVGFyZ2V0OworICAgIENPTVB0cjxJRDJEMURldmljZUNvbnRleHQ+IG1fZGV2
aWNlQ29udGV4dDsKICAgICBDT01QdHI8SUQyRDFTdHJva2VTdHlsZT4gbV9kMmRTdHJva2VTdHls
ZTsKIAogICAgIEhhc2hNYXA8dWludDMyX3QsIENPTVB0cjxJRDJEMVNvbGlkQ29sb3JCcnVzaD4+
IG1fc29saWRDb2xvcmVkQnJ1c2hDYWNoZTsKQEAgLTEzMCw2ICsxMzMsOCBAQCBwcml2YXRlOgog
CiAgICAgQ09NUHRyPElEM0QxMURldmljZTE+IG1fZDNkRGV2aWNlOwogCisgICAgQ09NUHRyPElE
MkQxQml0bWFwPiBtX2NvbXBvc2l0ZVNvdXJjZTsKKwogICAgIFdURjo6RnVuY3Rpb248dm9pZCgp
PiBtX3ByZURyYXdIYW5kbGVyOwogICAgIFdURjo6RnVuY3Rpb248dm9pZCgpPiBtX3Bvc3REcmF3
SGFuZGxlcjsKIAo=
</data>
<flag name="review"
          id="395536"
          type_id="1"
          status="+"
          setter="fujii"
    />
          </attachment>
      

    </bug>

</bugzilla>