<?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>57563</bug_id>
          
          <creation_ts>2011-03-31 11:08:44 -0700</creation_ts>
          <short_desc>Remove dependency on chromium skia::PlatformCanvas</short_desc>
          <delta_ts>2011-04-14 22:19:37 -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>Platform</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Alok Priyadarshi">alokp</reporter>
          <assigned_to name="Alok Priyadarshi">alokp</assigned_to>
          <cc>abarth</cc>
    
    <cc>bsalomon</cc>
    
    <cc>commit-queue</cc>
    
    <cc>dglazkov</cc>
    
    <cc>gwright</cc>
    
    <cc>jamesr</cc>
    
    <cc>jianli</cc>
    
    <cc>reed</cc>
    
    <cc>vangelis</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>377341</commentid>
    <comment_count>0</comment_count>
    <who name="Alok Priyadarshi">alokp</who>
    <bug_when>2011-03-31 11:08:44 -0700</bug_when>
    <thetext>Chromium uses custom skia canvas classes which makes it difficult to use other types of canvases provided by Skia such as gpu-canvas, picture-canvas, etc. It also leads to cyclic dependencies between chromium and webkit.

Webkit skia platform should just use Skia not chromium&apos;s subclass skia::PlatformCanvas.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>378103</commentid>
    <comment_count>1</comment_count>
      <attachid>87919</attachid>
    <who name="Alok Priyadarshi">alokp</who>
    <bug_when>2011-04-01 14:55:45 -0700</bug_when>
    <thetext>Created attachment 87919
proposed patch

A work in progress. Uploaded to help reviewers understand the changes in Chromium.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>381125</commentid>
    <comment_count>2</comment_count>
      <attachid>88570</attachid>
    <who name="Alok Priyadarshi">alokp</who>
    <bug_when>2011-04-06 21:59:16 -0700</bug_when>
    <thetext>Created attachment 88570
proposed patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>381275</commentid>
    <comment_count>3</comment_count>
      <attachid>88570</attachid>
    <who name="Mike Reed">reed</who>
    <bug_when>2011-04-07 06:22:26 -0700</bug_when>
    <thetext>Comment on attachment 88570
proposed patch

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

&gt; WebCore/platform/graphics/skia/PlatformContextSkia.cpp:617
&gt; +    return false;

Can we always return false?

&gt; WebCore/platform/graphics/skia/PlatformContextSkia.cpp:626
&gt; +    return false;

Can we always return false?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>381350</commentid>
    <comment_count>4</comment_count>
      <attachid>88570</attachid>
    <who name="Alok Priyadarshi">alokp</who>
    <bug_when>2011-04-07 08:14:42 -0700</bug_when>
    <thetext>Comment on attachment 88570
proposed patch

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

&gt;&gt; WebCore/platform/graphics/skia/PlatformContextSkia.cpp:617
&gt;&gt; +    return false;
&gt; 
&gt; Can we always return false?

This patch is not ready yet. I uploaded it for the reviewers of my chromium patch to understand what I am trying to do. I could resolve this by adding a isPrinting member variable to PlatformContextSkia. But is it really required? I noticed that it is only being used to decide image filtering mode. Can we deduce it by any other means? IsVectorial is a roundabout way of deducing printing any way. And returning true in case of SKIA_GPU is also a roundabout way to forcing a particular filtering mode.

&gt;&gt; WebCore/platform/graphics/skia/PlatformContextSkia.cpp:626
&gt;&gt; +    return false;
&gt; 
&gt; Can we always return false?

No I need to add skia::IsNativeDrawingAllowed(SkCanvas*) on the chromium side.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>381359</commentid>
    <comment_count>5</comment_count>
    <who name="George Wright">gwright</who>
    <bug_when>2011-04-07 08:23:26 -0700</bug_when>
    <thetext>This looks great! Just a question though:

 55    m_skiaCanvas = skia::CreateBitmapCanvas(size.width(), size.height(), false);

That looks like the sole creation point for the SkCanvas now, using a factory defined in the new skia platform layer, right? Does this mean that if someone wants to use, say, a SkGpuCanvas instead of an SkCanvas, they&apos;d have to modify webkit code? Would it be better to abstract the canvas-type selection out into the factory it calls as well, so then a port could choose more easily and on-the-fly what type of canvas they want?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>381379</commentid>
    <comment_count>6</comment_count>
    <who name="Alok Priyadarshi">alokp</who>
    <bug_when>2011-04-07 08:51:51 -0700</bug_when>
    <thetext>(In reply to comment #5)
&gt; This looks great! Just a question though:
&gt; 
&gt;  55    m_skiaCanvas = skia::CreateBitmapCanvas(size.width(), size.height(), false);
&gt; 
&gt; That looks like the sole creation point for the SkCanvas now, using a factory defined in the new skia platform layer, right? Does this mean that if someone wants to use, say, a SkGpuCanvas instead of an SkCanvas, they&apos;d have to modify webkit code? Would it be better to abstract the canvas-type selection out into the factory it calls as well, so then a port could choose more easily and on-the-fly what type of canvas they want?

Exactly. I have not looked at all the places in webkit where a canvas is being created but I have a feeling that we might need a few more parameters for the port to decide which type of canvas to create.

We will eventually get there. This CL does not change any functionality or the type of canvas created - only the interface.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>381385</commentid>
    <comment_count>7</comment_count>
    <who name="George Wright">gwright</who>
    <bug_when>2011-04-07 08:58:55 -0700</bug_when>
    <thetext>(In reply to comment #6)
&gt; Exactly. I have not looked at all the places in webkit where a canvas is being created but I have a feeling that we might need a few more parameters for the port to decide which type of canvas to create.
&gt; 
&gt; We will eventually get there. This CL does not change any functionality or the type of canvas created - only the interface.

Ah, that makes sense. Would CreateBitmapDevice be a misnomer then for the future if down the road we would be looking to change its functionality to be able to create more than one type of canvas (which may or may not be a bitmap one)?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>381399</commentid>
    <comment_count>8</comment_count>
    <who name="Alok Priyadarshi">alokp</who>
    <bug_when>2011-04-07 09:22:17 -0700</bug_when>
    <thetext>(In reply to comment #7)
&gt; (In reply to comment #6)
&gt; &gt; Exactly. I have not looked at all the places in webkit where a canvas is being created but I have a feeling that we might need a few more parameters for the port to decide which type of canvas to create.
&gt; &gt; 
&gt; &gt; We will eventually get there. This CL does not change any functionality or the type of canvas created - only the interface.
&gt; 
&gt; Ah, that makes sense. Would CreateBitmapDevice be a misnomer then for the future if down the road we would be looking to change its functionality to be able to create more than one type of canvas (which may or may not be a bitmap one)?

I think you meant CreateBitmapCanvas instead of CreateBitmapDevice. Yes As I mentioned earlier we might need a few more parameters in which case we could rename this as CreateCanvas. But at this point I am not sure what those parameters will be.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>381412</commentid>
    <comment_count>9</comment_count>
    <who name="George Wright">gwright</who>
    <bug_when>2011-04-07 09:39:26 -0700</bug_when>
    <thetext>(In reply to comment #8)
&gt; I think you meant CreateBitmapCanvas instead of CreateBitmapDevice. Yes As I mentioned earlier we might need a few more parameters in which case we could rename this as CreateCanvas. But at this point I am not sure what those parameters will be.

Sorry, yes, I meant CreateBitmapCanvas not Device :)

That sounds good. Just wondered if it would be worth naming it CreateCanvas from the start, is all.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>383232</commentid>
    <comment_count>10</comment_count>
      <attachid>89020</attachid>
    <who name="Alok Priyadarshi">alokp</who>
    <bug_when>2011-04-11 09:56:50 -0700</bug_when>
    <thetext>Created attachment 89020
proposed patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>383237</commentid>
    <comment_count>11</comment_count>
    <who name="Mike Reed">reed</who>
    <bug_when>2011-04-11 10:05:36 -0700</bug_when>
    <thetext>looks fine to me (but I&apos;m not a reviewer)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>383242</commentid>
    <comment_count>12</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-04-11 10:23:20 -0700</bug_when>
    <thetext>Attachment 89020 did not build on chromium:
Build output: http://queues.webkit.org/results/8386531</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>383392</commentid>
    <comment_count>13</comment_count>
    <who name="James Robinson">jamesr</who>
    <bug_when>2011-04-11 12:51:25 -0700</bug_when>
    <thetext>Why doesn&apos;t this compile on the cr-linux bot?  Compile error:

  CXX(target) out/Release/obj.target/glue/Source/WebKit/chromium/webkit/plugins/npapi/webplugin_delegate_impl_gtk.o
Source/WebKit/chromium/webkit/plugins/npapi/webplugin_delegate_impl_gtk.cc: In member function &apos;virtual void webkit::npapi::WebPluginDelegateImpl::Paint(WebKit::WebCanvas*, const gfx::Rect&amp;)&apos;:
Source/WebKit/chromium/webkit/plugins/npapi/webplugin_delegate_impl_gtk.cc:114: error: &apos;class SkCanvas&apos; has no member named &apos;beginPlatformPaint&apos;
Source/WebKit/chromium/webkit/plugins/npapi/webplugin_delegate_impl_gtk.cc:116: error: &apos;class SkCanvas&apos; has no member named &apos;endPlatformPaint&apos;
make: *** [out/Release/obj.target/glue/Source/WebKit/chromium/webkit/plugins/npapi/webplugin_delegate_impl_gtk.o] Error 1
make: *** Waiting for unfinished jobs....</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>383396</commentid>
    <comment_count>14</comment_count>
    <who name="Alok Priyadarshi">alokp</who>
    <bug_when>2011-04-11 12:55:18 -0700</bug_when>
    <thetext>(In reply to comment #13)
&gt; Why doesn&apos;t this compile on the cr-linux bot?  Compile error:
&gt; 
&gt;   CXX(target) out/Release/obj.target/glue/Source/WebKit/chromium/webkit/plugins/npapi/webplugin_delegate_impl_gtk.o
&gt; Source/WebKit/chromium/webkit/plugins/npapi/webplugin_delegate_impl_gtk.cc: In member function &apos;virtual void webkit::npapi::WebPluginDelegateImpl::Paint(WebKit::WebCanvas*, const gfx::Rect&amp;)&apos;:
&gt; Source/WebKit/chromium/webkit/plugins/npapi/webplugin_delegate_impl_gtk.cc:114: error: &apos;class SkCanvas&apos; has no member named &apos;beginPlatformPaint&apos;
&gt; Source/WebKit/chromium/webkit/plugins/npapi/webplugin_delegate_impl_gtk.cc:116: error: &apos;class SkCanvas&apos; has no member named &apos;endPlatformPaint&apos;
&gt; make: *** [out/Release/obj.target/glue/Source/WebKit/chromium/webkit/plugins/npapi/webplugin_delegate_impl_gtk.o] Error 1
&gt; make: *** Waiting for unfinished jobs....

Because it is not compiling against TOT? It needs two CLs in chromium (r81107 and r81009) that I submitted this morning.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>383400</commentid>
    <comment_count>15</comment_count>
    <who name="James Robinson">jamesr</who>
    <bug_when>2011-04-11 12:59:35 -0700</bug_when>
    <thetext>In that case you need to update the chromium rev specified in Source/WebKit/chromium/DEPS to whatever chromium # you need.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>383425</commentid>
    <comment_count>16</comment_count>
      <attachid>89066</attachid>
    <who name="Alok Priyadarshi">alokp</who>
    <bug_when>2011-04-11 13:20:57 -0700</bug_when>
    <thetext>Created attachment 89066
proposed patch

Rolled DEPS</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>383449</commentid>
    <comment_count>17</comment_count>
      <attachid>89066</attachid>
    <who name="James Robinson">jamesr</who>
    <bug_when>2011-04-11 13:41:32 -0700</bug_when>
    <thetext>Comment on attachment 89066
proposed patch

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

&gt; Source/WebCore/platform/graphics/skia/ImageSkia.cpp:271
&gt; +#if ENABLE(SKIA_GPU)
&gt; +    resampling = RESAMPLE_NONE;
&gt; +#else
&gt; +    resampling = platformContext-&gt;printing() ? RESAMPLE_NONE :

This doesn&apos;t seem right - in SKIA_GPU we always do nearest neighbor?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>383464</commentid>
    <comment_count>18</comment_count>
      <attachid>89066</attachid>
    <who name="Alok Priyadarshi">alokp</who>
    <bug_when>2011-04-11 13:46:54 -0700</bug_when>
    <thetext>Comment on attachment 89066
proposed patch

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

&gt;&gt; Source/WebCore/platform/graphics/skia/ImageSkia.cpp:271
&gt;&gt; +    resampling = platformContext-&gt;printing() ? RESAMPLE_NONE :
&gt; 
&gt; This doesn&apos;t seem right - in SKIA_GPU we always do nearest neighbor?

I am only replicating whatever logic was here before. PlatformContextSkia::isPrinting was always returning true in SKIA_GPU. I do not know who added SKIA_GPU in isPrinting in the first place - Mike/Brian?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>383468</commentid>
    <comment_count>19</comment_count>
    <who name="Brian Salomon">bsalomon</who>
    <bug_when>2011-04-11 13:50:25 -0700</bug_when>
    <thetext>(In reply to comment #17)
&gt; (From update of attachment 89066 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=89066&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/platform/graphics/skia/ImageSkia.cpp:271
&gt; &gt; +#if ENABLE(SKIA_GPU)
&gt; &gt; +    resampling = RESAMPLE_NONE;
&gt; &gt; +#else
&gt; &gt; +    resampling = platformContext-&gt;printing() ? RESAMPLE_NONE :
&gt; 
&gt; This doesn&apos;t seem right - in SKIA_GPU we always do nearest neighbor?

No, we either do nearest neighbor or bilinear.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>383470</commentid>
    <comment_count>20</comment_count>
    <who name="Brian Salomon">bsalomon</who>
    <bug_when>2011-04-11 13:51:28 -0700</bug_when>
    <thetext>(In reply to comment #18)
&gt; (From update of attachment 89066 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=89066&amp;action=review
&gt; 
&gt; &gt;&gt; Source/WebCore/platform/graphics/skia/ImageSkia.cpp:271
&gt; &gt;&gt; +    resampling = platformContext-&gt;printing() ? RESAMPLE_NONE :
&gt; &gt; 
&gt; &gt; This doesn&apos;t seem right - in SKIA_GPU we always do nearest neighbor?
&gt; 
&gt; I am only replicating whatever logic was here before. PlatformContextSkia::isPrinting was always returning true in SKIA_GPU. I do not know who added SKIA_GPU in isPrinting in the first place - Mike/Brian?

I think Mike did that as a hack just to avoid the cast to PlatformCanvas when the canvas was really a SkGpuCanvas. It wasn&apos;t correct.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>383658</commentid>
    <comment_count>21</comment_count>
      <attachid>89066</attachid>
    <who name="James Robinson">jamesr</who>
    <bug_when>2011-04-11 16:22:41 -0700</bug_when>
    <thetext>Comment on attachment 89066
proposed patch

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

&gt;&gt;&gt;&gt;&gt; Source/WebCore/platform/graphics/skia/ImageSkia.cpp:271
&gt;&gt;&gt;&gt;&gt; +    resampling = platformContext-&gt;printing() ? RESAMPLE_NONE :
&gt;&gt;&gt;&gt; 
&gt;&gt;&gt;&gt; This doesn&apos;t seem right - in SKIA_GPU we always do nearest neighbor?
&gt;&gt;&gt; 
&gt;&gt;&gt; I am only replicating whatever logic was here before. PlatformContextSkia::isPrinting was always returning true in SKIA_GPU. I do not know who added SKIA_GPU in isPrinting in the first place - Mike/Brian?
&gt;&gt; 
&gt;&gt; No, we either do nearest neighbor or bilinear.
&gt; 
&gt; I think Mike did that as a hack just to avoid the cast to PlatformCanvas when the canvas was really a SkGpuCanvas. It wasn&apos;t correct.

Is it possible to do the right thing now?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>383659</commentid>
    <comment_count>22</comment_count>
      <attachid>89066</attachid>
    <who name="James Robinson">jamesr</who>
    <bug_when>2011-04-11 16:23:39 -0700</bug_when>
    <thetext>Comment on attachment 89066
proposed patch

You have some merge conflicts on DEPS - please update the patch and repost (I&apos;d really like to see at least one clean cr-linux run on this patch just to be sure there aren&apos;t any other issues with the DEPS roll by itself).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>383805</commentid>
    <comment_count>23</comment_count>
      <attachid>89066</attachid>
    <who name="Alok Priyadarshi">alokp</who>
    <bug_when>2011-04-11 21:22:51 -0700</bug_when>
    <thetext>Comment on attachment 89066
proposed patch

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

&gt;&gt;&gt;&gt;&gt;&gt; Source/WebCore/platform/graphics/skia/ImageSkia.cpp:271

&gt;&gt;&gt;&gt;&gt; 
&gt;&gt;&gt;&gt;&gt; This doesn&apos;t seem right - in SKIA_GPU we always do nearest neighbor?
&gt;&gt;&gt;&gt; 
&gt;&gt;&gt;&gt; I am only replicating whatever logic was here before. PlatformContextSkia::isPrinting was always returning true in SKIA_GPU. I do not know who added SKIA_GPU in isPrinting in the first place - Mike/Brian?
&gt;&gt;&gt; 
&gt;&gt;&gt; No, we either do nearest neighbor or bilinear.
&gt;&gt; 
&gt;&gt; I think Mike did that as a hack just to avoid the cast to PlatformCanvas when the canvas was really a SkGpuCanvas. It wasn&apos;t correct.
&gt; 
&gt; Is it possible to do the right thing now?

Done.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>383806</commentid>
    <comment_count>24</comment_count>
      <attachid>89155</attachid>
    <who name="Alok Priyadarshi">alokp</who>
    <bug_when>2011-04-11 21:23:58 -0700</bug_when>
    <thetext>Created attachment 89155
proposed patch

Resolved merge issues in DEPS.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>384185</commentid>
    <comment_count>25</comment_count>
      <attachid>89155</attachid>
    <who name="James Robinson">jamesr</who>
    <bug_when>2011-04-12 11:31:05 -0700</bug_when>
    <thetext>Comment on attachment 89155
proposed patch

Looks good.  Please make sure this doesn&apos;t break all native controls on windows :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>384249</commentid>
    <comment_count>26</comment_count>
      <attachid>89155</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2011-04-12 12:34:26 -0700</bug_when>
    <thetext>Comment on attachment 89155
proposed patch

Rejecting attachment 89155 from commit-queue.

Failed to run &quot;[&apos;./Tools/Scripts/webkit-patch&apos;, &apos;--status-host=queues.webkit.org&apos;, &apos;--bot-id=eseidel-cq-sf&apos;, &apos;ap...&quot; exit_code: 2

Last 500 characters of output:
/ChangeLog
Hunk #1 succeeded at 1 with fuzz 3.
patching file Source/WebKit/chromium/DEPS
Hunk #1 FAILED at 32.
1 out of 1 hunk FAILED -- saving rejects to file Source/WebKit/chromium/DEPS.rej
patching file Source/WebKit/chromium/public/WebCanvas.h
patching file Source/WebKit/chromium/src/WebFrameImpl.cpp
patching file Source/WebKit/chromium/tests/TransparencyWinTest.cpp

Failed to run &quot;[u&apos;/Projects/CommitQueue/Tools/Scripts/svn-apply&apos;, u&apos;--reviewer&apos;, u&apos;James Robinson&apos;, u&apos;--force&apos;]&quot; exit_code: 1

Full output: http://queues.webkit.org/results/8389580</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>384289</commentid>
    <comment_count>27</comment_count>
      <attachid>89256</attachid>
    <who name="Alok Priyadarshi">alokp</who>
    <bug_when>2011-04-12 13:13:50 -0700</bug_when>
    <thetext>Created attachment 89256
proposed patch

No longer need DEPS. It has already been rolled to a revision higher than this patch requires.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>384420</commentid>
    <comment_count>28</comment_count>
      <attachid>89256</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2011-04-12 15:27:20 -0700</bug_when>
    <thetext>Comment on attachment 89256
proposed patch

Clearing flags on attachment: 89256

Committed r83649: &lt;http://trac.webkit.org/changeset/83649&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>384421</commentid>
    <comment_count>29</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2011-04-12 15:27:27 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>384512</commentid>
    <comment_count>30</comment_count>
    <who name="Jian Li">jianli</who>
    <bug_when>2011-04-12 16:57:04 -0700</bug_when>
    <thetext>Reverted r83649 for reason:

This patch causes compiling errors for chromium

Committed r83666: &lt;http://trac.webkit.org/changeset/83666&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>384582</commentid>
    <comment_count>31</comment_count>
    <who name="Alok Priyadarshi">alokp</who>
    <bug_when>2011-04-12 18:01:48 -0700</bug_when>
    <thetext>(In reply to comment #30)
&gt; Reverted r83649 for reason:
&gt; 
&gt; This patch causes compiling errors for chromium
&gt; 
&gt; Committed r83666: &lt;http://trac.webkit.org/changeset/83666&gt;

Could you point me to the build log that failed?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>384591</commentid>
    <comment_count>32</comment_count>
    <who name="Jian Li">jianli</who>
    <bug_when>2011-04-12 18:12:21 -0700</bug_when>
    <thetext>(In reply to comment #31)
&gt; (In reply to comment #30)
&gt; &gt; Reverted r83649 for reason:
&gt; &gt; 
&gt; &gt; This patch causes compiling errors for chromium
&gt; &gt; 
&gt; &gt; Committed r83666: &lt;http://trac.webkit.org/changeset/83666&gt;
&gt; 
&gt; Could you point me to the build log that failed?

http://build.webkit.org/builders/Chromium%20Win%20Release/builds/22580</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>385049</commentid>
    <comment_count>33</comment_count>
      <attachid>89411</attachid>
    <who name="Alok Priyadarshi">alokp</who>
    <bug_when>2011-04-13 11:34:54 -0700</bug_when>
    <thetext>Created attachment 89411
proposed patch

Fixed DRT compile errors.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>385060</commentid>
    <comment_count>34</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-04-13 11:38:09 -0700</bug_when>
    <thetext>Attachment 89411 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/WebCore/ChangeLog&apos;, u&apos;Source/WebCor...&quot; exit_code: 1

Tools/DumpRenderTree/chromium/WebThemeControlDRTWin.h:125:  The parameter name &quot;canvas&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Total errors found: 1 in 22 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>385215</commentid>
    <comment_count>35</comment_count>
      <attachid>89455</attachid>
    <who name="Alok Priyadarshi">alokp</who>
    <bug_when>2011-04-13 14:18:01 -0700</bug_when>
    <thetext>Created attachment 89455
proposed patch

Fixed style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>385232</commentid>
    <comment_count>36</comment_count>
      <attachid>89455</attachid>
    <who name="James Robinson">jamesr</who>
    <bug_when>2011-04-13 14:26:50 -0700</bug_when>
    <thetext>Comment on attachment 89455
proposed patch

Cool.  Thanks for cleaning up the comments+signature.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>385574</commentid>
    <comment_count>37</comment_count>
      <attachid>89455</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2011-04-14 00:49:46 -0700</bug_when>
    <thetext>Comment on attachment 89455
proposed patch

Rejecting attachment 89455 from commit-queue.

Failed to run &quot;[&apos;./Tools/Scripts/webkit-patch&apos;, &apos;--status-host=queues.webkit.org&apos;, &apos;--bot-id=cr-jail-8&apos;, &apos;apply-...&quot; exit_code: 2

Last 500 characters of output:
atching file Tools/DumpRenderTree/chromium/TestShell.cpp
patching file Tools/DumpRenderTree/chromium/TestShell.h
patching file Tools/DumpRenderTree/chromium/WebThemeControlDRTWin.cpp
patching file Tools/DumpRenderTree/chromium/WebThemeControlDRTWin.h
patching file Tools/DumpRenderTree/chromium/WebViewHost.cpp
patching file Tools/DumpRenderTree/chromium/WebViewHost.h

Failed to run &quot;[u&apos;/mnt/git/webkit-commit-queue/Tools/Scripts/svn-apply&apos;, u&apos;--reviewer&apos;, u&apos;James Robinson&apos;, u&apos;--f...&quot; exit_code: 1

Full output: http://queues.webkit.org/results/8401604</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>385799</commentid>
    <comment_count>38</comment_count>
      <attachid>89591</attachid>
    <who name="Alok Priyadarshi">alokp</who>
    <bug_when>2011-04-14 09:21:41 -0700</bug_when>
    <thetext>Created attachment 89591
proposed patch

Resolved merge issues. The commit bot took ~24 hours to process the last patch only fail due to merge issues. One of the files I had changed got renamed while my patch was sitting in the commit queue.

James: Could you please land this patch for me?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>386054</commentid>
    <comment_count>39</comment_count>
    <who name="Alok Priyadarshi">alokp</who>
    <bug_when>2011-04-14 14:48:46 -0700</bug_when>
    <thetext>(In reply to comment #38)
&gt; Created an attachment (id=89591) [details]
&gt; proposed patch
&gt; 
&gt; Resolved merge issues. The commit bot took ~24 hours to process the last patch only fail due to merge issues. One of the files I had changed got renamed while my patch was sitting in the commit queue.
&gt; 
&gt; James: Could you please land this patch for me?

ping!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>386067</commentid>
    <comment_count>40</comment_count>
    <who name="James Robinson">jamesr</who>
    <bug_when>2011-04-14 14:55:16 -0700</bug_when>
    <thetext>I can land it by hand but probably not until next week.  If you merge the patch up I can try cq+&apos;ing it again.  If you need it landed sooner you&apos;ll have to find someone else to help, I&apos;m afraid.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>386070</commentid>
    <comment_count>41</comment_count>
    <who name="Alok Priyadarshi">alokp</who>
    <bug_when>2011-04-14 15:00:08 -0700</bug_when>
    <thetext>(In reply to comment #40)
&gt; I can land it by hand but probably not until next week.  If you merge the patch up I can try cq+&apos;ing it again.  If you need it landed sooner you&apos;ll have to find someone else to help, I&apos;m afraid.

No Problem. Lets try the commit queue again. It is ready to go.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>386073</commentid>
    <comment_count>42</comment_count>
      <attachid>89591</attachid>
    <who name="James Robinson">jamesr</who>
    <bug_when>2011-04-14 15:02:56 -0700</bug_when>
    <thetext>Comment on attachment 89591
proposed patch

Fingers crossed!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>386344</commentid>
    <comment_count>43</comment_count>
      <attachid>89591</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2011-04-14 20:52:46 -0700</bug_when>
    <thetext>Comment on attachment 89591
proposed patch

Clearing flags on attachment: 89591

Committed r83941: &lt;http://trac.webkit.org/changeset/83941&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>386345</commentid>
    <comment_count>44</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2011-04-14 20:52:55 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>386369</commentid>
    <comment_count>45</comment_count>
      <attachid>89735</attachid>
    <who name="Alok Priyadarshi">alokp</who>
    <bug_when>2011-04-14 22:03:19 -0700</bug_when>
    <thetext>Created attachment 89735
proposed patch

Fixed DRT compile error on MAC.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>386378</commentid>
    <comment_count>46</comment_count>
      <attachid>89735</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2011-04-14 22:19:30 -0700</bug_when>
    <thetext>Comment on attachment 89735
proposed patch

Clearing flags on attachment: 89735

Committed r83946: &lt;http://trac.webkit.org/changeset/83946&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>386379</commentid>
    <comment_count>47</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2011-04-14 22:19:37 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>87919</attachid>
            <date>2011-04-01 14:55:45 -0700</date>
            <delta_ts>2011-04-06 21:59:16 -0700</delta_ts>
            <desc>proposed patch</desc>
            <filename>skia.txt</filename>
            <type>text/plain</type>
            <size>24588</size>
            <attacher name="Alok Priyadarshi">alokp</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA4MjcyMikKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsNDAgQEAKKzIwMTEtMDQtMDEgIEFsb2sgUHJpeWFkYXJzaGkgIDxhbG9rcEBjaHJv
bWl1bS5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAg
ICAgUmVtb3ZlIGRlcGVuZGVuY3kgb24gY2hyb21pdW0gc2tpYTo6UGxhdGZvcm1DYW52YXMKKyAg
ICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTU3NTYzCisKKyAg
ICAgICAgTm8gbmV3IHRlc3RzLiAoT09QUyEpCisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9Gb250Q2hyb21pdW1XaW4uY3BwOgorICAgICAgICAoV2ViQ29yZTo6VHJhbnNw
YXJlbmN5QXdhcmVGb250UGFpbnRlcjo6VHJhbnNwYXJlbmN5QXdhcmVGb250UGFpbnRlcjo6aW5p
dGlhbGl6ZUZvckdESSk6CisgICAgICAgIChXZWJDb3JlOjpUcmFuc3BhcmVuY3lBd2FyZUZvbnRQ
YWludGVyOjpUcmFuc3BhcmVuY3lBd2FyZUZvbnRQYWludGVyOjp+VHJhbnNwYXJlbmN5QXdhcmVG
b250UGFpbnRlcik6CisgICAgICAgIChXZWJDb3JlOjpGb250OjpkcmF3Q29tcGxleFRleHQpOgor
ICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0ltYWdlQnVmZmVyRGF0YS5oOgor
ICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyQ2hyb21pdW0uaDoKKyAg
ICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclJlbmRlcmVyQ2hyb21pdW0u
aDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9QbGF0Zm9ybUNhbnZhcy5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpQbGF0Zm9ybUNhbnZhczo6cmVzaXplKToKKyAgICAgICAg
KiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9QbGF0Zm9ybUNhbnZhcy5oOgorICAgICAgICAq
IHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1RyYW5zcGFyZW5jeVdpbi5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpUcmFuc3BhcmVuY3lXaW46OmNvbXBvc2l0ZVRleHRDb21wb3NpdGUpOgorICAg
ICAgICAoV2ViQ29yZTo6VHJhbnNwYXJlbmN5V2luOjptYWtlTGF5ZXJPcGFxdWUpOgorICAgICAg
ICAqIHBsYXRmb3JtL2dyYXBoaWNzL3NraWEvSW1hZ2VCdWZmZXJTa2lhLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OkltYWdlQnVmZmVyOjpJbWFnZUJ1ZmZlcik6CisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3Mvc2tpYS9JbWFnZVNraWEuY3BwOgorICAgICAgICAoV2ViQ29yZTo6cGFpbnRTa0Jp
dG1hcCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9QbGF0Zm9ybUNhbnZhc1Nr
aWEuY3BwOiBBZGRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9za2lhL1BsYXRmb3Jt
Q2FudmFzU2tpYS5oOiBBZGRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9za2lhL1Bs
YXRmb3JtQ29udGV4dFNraWEuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UGxhdGZvcm1Db250ZXh0
U2tpYTo6UGxhdGZvcm1Db250ZXh0U2tpYSk6CisgICAgICAgIChXZWJDb3JlOjpQbGF0Zm9ybUNv
bnRleHRTa2lhOjpzZXRDYW52YXMpOgorICAgICAgICAoV2ViQ29yZTo6UGxhdGZvcm1Db250ZXh0
U2tpYTo6aXNQcmludGluZyk6CisgICAgICAgIChXZWJDb3JlOjpQbGF0Zm9ybUNvbnRleHRTa2lh
Ojppc05hdGl2ZUZvbnRSZW5kZXJpbmdBbGxvd2VkKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy9za2lhL1BsYXRmb3JtQ29udGV4dFNraWEuaDoKKyAgICAgICAgKFdlYkNvcmU6OlBsYXRm
b3JtQ29udGV4dFNraWE6OmNhbnZhcyk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlclRoZW1l
Q2hyb21pdW1XaW4uY3BwOgorCiAyMDExLTA0LTAxICBBbGV4ZXkgUHJvc2t1cnlha292ICA8YXBA
YXBwbGUuY29tPgogCiAgICAgICAgIDMyLWJpdCBNYWMgYnVpbGQgZml4LgpJbmRleDogV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9Gb250Q2hyb21pdW1XaW4uY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vRm9udENocm9taXVtV2lu
LmNwcAkocmV2aXNpb24gODI2OTcpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL0ZvbnRDaHJvbWl1bVdpbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM2LDYgKzM2LDcgQEAK
ICNpbmNsdWRlICJHbHlwaEJ1ZmZlci5oIgogI2luY2x1ZGUgIk5vdEltcGxlbWVudGVkLmgiCiAj
aW5jbHVkZSAiUGxhdGZvcm1CcmlkZ2UuaCIKKyNpbmNsdWRlICJQbGF0Zm9ybUNhbnZhc1NraWEu
aCIKICNpbmNsdWRlICJQbGF0Zm9ybUNvbnRleHRTa2lhLmgiCiAjaW5jbHVkZSAiU2ltcGxlRm9u
dERhdGEuaCIKICNpbmNsdWRlICJTa2lhRm9udFdpbi5oIgpAQCAtNDMsNyArNDQsNyBAQAogI2lu
Y2x1ZGUgIlRyYW5zcGFyZW5jeVdpbi5oIgogI2luY2x1ZGUgIlVuaXNjcmliZUhlbHBlclRleHRS
dW4uaCIKIAotI2luY2x1ZGUgInNraWEvZXh0L3BsYXRmb3JtX2NhbnZhc193aW4uaCIKKyNpbmNs
dWRlICJTa0NhbnZhcy5oIgogI2luY2x1ZGUgInNraWEvZXh0L3NraWFfdXRpbHNfd2luLmgiICAv
LyBGSVhNRTogcmVtb3ZlIHRoaXMgZGVwZW5kZW5jeS4KIAogI2luY2x1ZGUgPHdpbmRvd3MuaD4K
QEAgLTE2NSw3ICsxNjYsNyBAQCB2b2lkIFRyYW5zcGFyZW5jeUF3YXJlRm9udFBhaW50ZXI6Omlu
aXRpCiAKICAgICAvLyBTZXQgdXAgdGhlIERDLCB1c2luZyB0aGUgb25lIGZyb20gdGhlIHRyYW5z
cGFyZW5jeSBoZWxwZXIuCiAgICAgaWYgKG1fdHJhbnNwYXJlbmN5LnBsYXRmb3JtQ29udGV4dCgp
KSB7Ci0gICAgICAgIG1faGRjID0gbV90cmFuc3BhcmVuY3kucGxhdGZvcm1Db250ZXh0KCktPmNh
bnZhcygpLT5iZWdpblBsYXRmb3JtUGFpbnQoKTsKKyAgICAgICAgbV9oZGMgPSBQbGF0Zm9ybUNh
bnZhc1NraWE6OmJlZ2luTmF0aXZlUGFpbnQobV90cmFuc3BhcmVuY3kucGxhdGZvcm1Db250ZXh0
KCktPmNhbnZhcygpKTsKICAgICAgICAgU2V0VGV4dENvbG9yKG1faGRjLCBza2lhOjpTa0NvbG9y
VG9DT0xPUlJFRihjb2xvcikpOwogICAgICAgICBTZXRCa01vZGUobV9oZGMsIFRSQU5TUEFSRU5U
KTsKICAgICB9CkBAIC0xNzksNyArMTgwLDcgQEAgVHJhbnNwYXJlbmN5QXdhcmVGb250UGFpbnRl
cjo6flRyYW5zcGFyZQogICAgIGlmIChtX2NyZWF0ZWRUcmFuc3BhcmVuY3lMYXllcikKICAgICAg
ICAgbV9ncmFwaGljc0NvbnRleHQtPmVuZFRyYW5zcGFyZW5jeUxheWVyKCk7CiAgICAgbV9ncmFw
aGljc0NvbnRleHQtPnJlc3RvcmUoKTsKLSAgICBtX3BsYXRmb3JtQ29udGV4dC0+Y2FudmFzKCkt
PmVuZFBsYXRmb3JtUGFpbnQoKTsKKyAgICBQbGF0Zm9ybUNhbnZhc1NraWE6OmVuZE5hdGl2ZVBh
aW50KG1fcGxhdGZvcm1Db250ZXh0LT5jYW52YXMoKSk7CiB9CiAKIC8vIFNwZWNpYWxpemF0aW9u
IGZvciBzaW1wbGUgR2x5cGhCdWZmZXIgcGFpbnRpbmcuCkBAIC01MTYsNyArNTE3LDcgQEAgdm9p
ZCBGb250OjpkcmF3Q29tcGxleFRleHQoR3JhcGhpY3NDb250ZQogICAgIC8vIHRoZSBiYXNlbGlu
ZSwgc28gd2UgaGF2ZSB0byBzdWJ0cmFjdCBvZmYgdGhlIGFzY2VudC4KICAgICBzdGF0ZS5kcmF3
KGdyYXBoaWNzQ29udGV4dCwgaGRjLCBscm91bmRmKHBvaW50LngoKSksIGxyb3VuZGYocG9pbnQu
eSgpIC0gZm9udE1ldHJpY3MoKS5hc2NlbnQoKSksIGZyb20sIHRvKTsKIAotICAgIGNvbnRleHQt
PmNhbnZhcygpLT5lbmRQbGF0Zm9ybVBhaW50KCk7CisgICAgUGxhdGZvcm1DYW52YXNTa2lhOjpl
bmROYXRpdmVQYWludChjb250ZXh0LT5jYW52YXMoKSk7CiB9CiAKIHZvaWQgRm9udDo6ZHJhd0Vt
cGhhc2lzTWFya3NGb3JDb21wbGV4VGV4dChHcmFwaGljc0NvbnRleHQqIC8qIGNvbnRleHQgKi8s
IGNvbnN0IFRleHRSdW4mIC8qIHJ1biAqLywgY29uc3QgQXRvbWljU3RyaW5nJiAvKiBtYXJrICov
LCBjb25zdCBGbG9hdFBvaW50JiAvKiBwb2ludCAqLywgaW50IC8qIGZyb20gKi8sIGludCAvKiB0
byAqLykgY29uc3QKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vSW1h
Z2VCdWZmZXJEYXRhLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9JbWFnZUJ1ZmZlckRhdGEuaAkocmV2aXNpb24gODI2OTcpCisrKyBXZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0ltYWdlQnVmZmVyRGF0YS5oCSh3b3JraW5nIGNvcHkp
CkBAIC0zMywxNSArMzMsMTMgQEAKIAogI2luY2x1ZGUgIlBsYXRmb3JtQ29udGV4dFNraWEuaCIK
IAotI2luY2x1ZGUgInNraWEvZXh0L3BsYXRmb3JtX2NhbnZhcy5oIgotCiBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiAKIGNsYXNzIEltYWdlQnVmZmVyRGF0YSB7CiBwdWJsaWM6CiAgICAgSW1hZ2VCdWZm
ZXJEYXRhKGNvbnN0IEludFNpemUmKTsKIAotICAgIHNraWE6OlBsYXRmb3JtQ2FudmFzIG1fY2Fu
dmFzOworICAgIE93blB0cjxTa0NhbnZhcz4gbV9jYW52YXM7CiAgICAgUGxhdGZvcm1Db250ZXh0
U2tpYSBtX3BsYXRmb3JtQ29udGV4dDsKIH07CiAKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vTGF5ZXJDaHJvbWl1bS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJDaHJvbWl1bS5oCShyZXZpc2lvbiA4MjY5NykK
KysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJDaHJvbWl1bS5oCSh3
b3JraW5nIGNvcHkpCkBAIC01MCwxMSArNTAsNiBAQAogI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmlu
Z0hhc2guaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KIAotCi1uYW1lc3BhY2Ug
c2tpYSB7Ci1jbGFzcyBQbGF0Zm9ybUNhbnZhczsKLX0KLQogbmFtZXNwYWNlIFdlYkNvcmUgewog
CiBjbGFzcyBDQ0xheWVySW1wbDsKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vTGF5ZXJSZW5kZXJlckNocm9taXVtLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclJlbmRlcmVyQ2hyb21pdW0uaAkocmV2aXNpb24g
ODI2OTcpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyUmVuZGVy
ZXJDaHJvbWl1bS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xOTAsNyArMTkwLDcgQEAgcHJpdmF0ZToK
ICAgICBib29sIG1fY29tcG9zaXRlT2Zmc2NyZWVuOwogCiAjaWYgVVNFKFNLSUEpCi0gICAgT3du
UHRyPHNraWE6OlBsYXRmb3JtQ2FudmFzPiBtX3Jvb3RMYXllckNhbnZhczsKKyAgICBPd25QdHI8
U2tDYW52YXM+IG1fcm9vdExheWVyQ2FudmFzOwogICAgIE93blB0cjxQbGF0Zm9ybUNvbnRleHRT
a2lhPiBtX3Jvb3RMYXllclNraWFDb250ZXh0OwogICAgIE93blB0cjxHcmFwaGljc0NvbnRleHQ+
IG1fcm9vdExheWVyR3JhcGhpY3NDb250ZXh0OwogI2VsaWYgUExBVEZPUk0oQ0cpCkluZGV4OiBX
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1BsYXRmb3JtQ2FudmFzLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1BsYXRmb3JtQ2Fu
dmFzLmNwcAkocmV2aXNpb24gODI2OTcpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL1BsYXRmb3JtQ2FudmFzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzEsOSArMzEsMTEg
QEAKIAogI2lmIFVTRShTS0lBKQogI2luY2x1ZGUgIk5hdGl2ZUltYWdlU2tpYS5oIgorI2luY2x1
ZGUgIlBsYXRmb3JtQ2FudmFzU2tpYS5oIgogI2luY2x1ZGUgIlBsYXRmb3JtQ29udGV4dFNraWEu
aCIKKyNpbmNsdWRlICJTa0NhbnZhcy5oIgogI2luY2x1ZGUgIlNrQ29sb3JQcml2LmgiCi0jaW5j
bHVkZSAic2tpYS9leHQvcGxhdGZvcm1fY2FudmFzLmgiCisjaW5jbHVkZSAiU2tEZXZpY2UuaCIK
ICNlbGlmIFBMQVRGT1JNKENHKQogI2luY2x1ZGUgPENvcmVHcmFwaGljcy9DR0JpdG1hcENvbnRl
eHQuaD4KICNlbmRpZgpAQCAtNTIsNyArNTQsNyBAQCB2b2lkIFBsYXRmb3JtQ2FudmFzOjpyZXNp
emUoY29uc3QgSW50U2l6CiB7CiAgICAgbV9zaXplID0gc2l6ZTsKICNpZiBVU0UoU0tJQSkKLSAg
ICBtX3NraWFDYW52YXMgPSBuZXcgc2tpYTo6UGxhdGZvcm1DYW52YXMoc2l6ZS53aWR0aCgpLCBz
aXplLmhlaWdodCgpLCBmYWxzZSk7CisgICAgbV9za2lhQ2FudmFzID0gUGxhdGZvcm1DYW52YXNT
a2lhOjpjcmVhdGVCaXRtYXBDYW52YXMoc2l6ZS53aWR0aCgpLCBzaXplLmhlaWdodCgpLCBmYWxz
ZSk7CiAjZWxpZiBQTEFURk9STShDRykKICAgICBzaXplX3QgYnVmZmVyU2l6ZSA9IHNpemUud2lk
dGgoKSAqIHNpemUuaGVpZ2h0KCkgKiA0OwogICAgIG1fcGl4ZWxEYXRhID0gYWRvcHRBcnJheVB0
cihuZXcgdWludDhfdFtidWZmZXJTaXplXSk7CkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL1BsYXRmb3JtQ2FudmFzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9QbGF0Zm9ybUNhbnZhcy5oCShyZXZpc2lvbiA4MjY5NykK
KysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vUGxhdGZvcm1DYW52YXMuaAko
d29ya2luZyBjb3B5KQpAQCAtMzEsNiArMzEsOCBAQAogI2luY2x1ZGUgPHd0Zi9Ob25jb3B5YWJs
ZS5oPgogI2luY2x1ZGUgPHd0Zi9Pd25QdHIuaD4KIAorI2luY2x1ZGUgIlNrQ2FudmFzLmgiCisK
ICNpZiBQTEFURk9STShDRykKICNpbmNsdWRlIDxDb3JlR3JhcGhpY3MvQ0dDb2xvclNwYWNlLmg+
CiAjaW5jbHVkZSA8Q29yZUdyYXBoaWNzL0NHQ29udGV4dC5oPgpAQCAtMzksNyArNDEsNiBAQAog
I2VuZGlmCiAKICNpZiBVU0UoU0tJQSkKLW5hbWVzcGFjZSBza2lhIHsgY2xhc3MgUGxhdGZvcm1D
YW52YXM7IH0KIGNsYXNzIFNrQml0bWFwOwogI2VuZGlmCiAKQEAgLTk3LDcgKzk4LDcgQEAgcHVi
bGljOgogCiBwcml2YXRlOgogI2lmIFVTRShTS0lBKQotICAgIE93blB0cjxza2lhOjpQbGF0Zm9y
bUNhbnZhcz4gbV9za2lhQ2FudmFzOworICAgIE93blB0cjxTa0NhbnZhcz4gbV9za2lhQ2FudmFz
OwogI2VsaWYgUExBVEZPUk0oQ0cpCiAgICAgT3duQXJyYXlQdHI8dWludDhfdD4gbV9waXhlbERh
dGE7CiAjZW5kaWYKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vVHJh
bnNwYXJlbmN5V2luLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL1RyYW5zcGFyZW5jeVdpbi5jcHAJKHJldmlzaW9uIDgyNjk3KQorKysgV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9UcmFuc3BhcmVuY3lXaW4uY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0zOSw3ICszOSw3IEBACiAjaW5jbHVkZSAiVHJhbnNwYXJlbmN5V2luLmgiCiAK
ICNpbmNsdWRlICJTa0NvbG9yUHJpdi5oIgotI2luY2x1ZGUgInNraWEvZXh0L3BsYXRmb3JtX2Nh
bnZhcy5oIgorI2luY2x1ZGUgIlNrRGV2aWNlLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApA
QCAtNDksMTQgKzQ5LDIwIEBAIG5hbWVzcGFjZSB7CiAvLyBpbnRvLiBCdWZmZXJzIGxhcmdlciB0
aGFuIHRoaXMgd2lsbCBiZSBkZXN0cm95ZWQgd2hlbiB3ZSdyZSBkb25lIHdpdGggdGhlbS4KIGNv
bnN0IGludCBtYXhDYWNoZWRCdWZmZXJQaXhlbFNpemUgPSA2NTUzNjsKIAotaW5saW5lIHNraWE6
OlBsYXRmb3JtQ2FudmFzKiBjYW52YXNGb3JDb250ZXh0KGNvbnN0IEdyYXBoaWNzQ29udGV4dCYg
Y29udGV4dCkKK2lubGluZSBTa0RldmljZSogdG9wTGF5ZXJEZXZpY2UoU2tDYW52YXMqIGNhbnZh
cykKK3sKKyAgICByZXR1cm4gMDsKK30KKworaW5saW5lIFNrQ2FudmFzKiBjYW52YXNGb3JDb250
ZXh0KGNvbnN0IEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCkKIHsKICAgICByZXR1cm4gY29udGV4
dC5wbGF0Zm9ybUNvbnRleHQoKS0+Y2FudmFzKCk7CiB9CiAKIGlubGluZSBjb25zdCBTa0JpdG1h
cCYgYml0bWFwRm9yQ29udGV4dChjb25zdCBHcmFwaGljc0NvbnRleHQmIGNvbnRleHQpCiB7Ci0g
ICAgcmV0dXJuIGNhbnZhc0ZvckNvbnRleHQoY29udGV4dCktPmdldFRvcFBsYXRmb3JtRGV2aWNl
KCkuYWNjZXNzQml0bWFwKGZhbHNlKTsKKyAgICBTa0NhbnZhcyogY2FudmFzID0gY2FudmFzRm9y
Q29udGV4dChjb250ZXh0KTsKKyAgICByZXR1cm4gdG9wTGF5ZXJEZXZpY2UoY2FudmFzKS0+YWNj
ZXNzQml0bWFwKGZhbHNlKTsKIH0KIAogdm9pZCBjb21wb3NpdGVUb0NvcHkoY29uc3QgR3JhcGhp
Y3NDb250ZXh0JiBzb3VyY2VMYXllcnMsCkBAIC00NjYsNyArNDcyLDcgQEAgdm9pZCBUcmFuc3Bh
cmVuY3lXaW46OmNvbXBvc2l0ZVRleHRDb21wbwogICAgIGlmICghbV92YWxpZExheWVyKQogICAg
ICAgICByZXR1cm47CiAKLSAgICBjb25zdCBTa0JpdG1hcCYgYml0bWFwID0gbV9sYXllckJ1ZmZl
ci0+Y29udGV4dCgpLT5wbGF0Zm9ybUNvbnRleHQoKS0+Y2FudmFzKCktPmdldFRvcFBsYXRmb3Jt
RGV2aWNlKCkuYWNjZXNzQml0bWFwKHRydWUpOworICAgIGNvbnN0IFNrQml0bWFwJiBiaXRtYXAg
PSB0b3BMYXllckRldmljZShtX2xheWVyQnVmZmVyLT5jb250ZXh0KCktPnBsYXRmb3JtQ29udGV4
dCgpLT5jYW52YXMoKSktPmFjY2Vzc0JpdG1hcCh0cnVlKTsKICAgICBTa0NvbG9yIHRleHRDb2xv
ciA9IG1fdGV4dENvbXBvc2l0ZUNvbG9yLnJnYigpOwogICAgIGZvciAoaW50IHkgPSAwOyB5IDwg
bV9sYXllclNpemUuaGVpZ2h0KCk7IHkrKykgewogICAgICAgICB1aW50MzJfdCogcm93ID0gYml0
bWFwLmdldEFkZHIzMigwLCB5KTsKQEAgLTUwMSw4ICs1MDcsNyBAQCB2b2lkIFRyYW5zcGFyZW5j
eVdpbjo6bWFrZUxheWVyT3BhcXVlKCkKICAgICBpZiAoIW1fdmFsaWRMYXllcikKICAgICAgICAg
cmV0dXJuOwogCi0gICAgU2tCaXRtYXAmIGJpdG1hcCA9IGNvbnN0X2Nhc3Q8U2tCaXRtYXAmPiht
X2RyYXdDb250ZXh0LT5wbGF0Zm9ybUNvbnRleHQoKS0+Ci0gICAgICAgIGNhbnZhcygpLT5nZXRU
b3BQbGF0Zm9ybURldmljZSgpLmFjY2Vzc0JpdG1hcCh0cnVlKSk7CisgICAgU2tCaXRtYXAmIGJp
dG1hcCA9IGNvbnN0X2Nhc3Q8U2tCaXRtYXAmPih0b3BMYXllckRldmljZShtX2RyYXdDb250ZXh0
LT5wbGF0Zm9ybUNvbnRleHQoKS0+Y2FudmFzKCkpLT5hY2Nlc3NCaXRtYXAodHJ1ZSkpOwogICAg
IGZvciAoaW50IHkgPSAwOyB5IDwgbV9sYXllclNpemUuaGVpZ2h0KCk7IHkrKykgewogICAgICAg
ICB1aW50MzJfdCogcm93ID0gYml0bWFwLmdldEFkZHIzMigwLCB5KTsKICAgICAgICAgZm9yIChp
bnQgeCA9IDA7IHggPCBtX2xheWVyU2l6ZS53aWR0aCgpOyB4KyspCkluZGV4OiBXZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL3NraWEvSW1hZ2VCdWZmZXJTa2lhLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3NraWEvSW1hZ2VCdWZmZXJTa2lhLmNwcAkocmV2aXNp
b24gODI2OTcpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3NraWEvSW1hZ2VCdWZmZXJT
a2lhLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDMsOCArNDMsMTAgQEAKICNpbmNsdWRlICJKUEVH
SW1hZ2VFbmNvZGVyLmgiCiAjaW5jbHVkZSAiTUlNRVR5cGVSZWdpc3RyeS5oIgogI2luY2x1ZGUg
IlBOR0ltYWdlRW5jb2Rlci5oIgorI2luY2x1ZGUgIlBsYXRmb3JtQ2FudmFzU2tpYS5oIgogI2lu
Y2x1ZGUgIlBsYXRmb3JtQ29udGV4dFNraWEuaCIKICNpbmNsdWRlICJTa0NvbG9yUHJpdi5oIgor
I2luY2x1ZGUgIlNrRGV2aWNlLmgiCiAjaW5jbHVkZSAiU2tpYVV0aWxzLmgiCiAKICNpbmNsdWRl
IDx3dGYvdGV4dC9TdHJpbmdDb25jYXRlbmF0ZS5oPgpAQCAtNjYsMTkgKzY4LDIxIEBAIEltYWdl
QnVmZmVyOjpJbWFnZUJ1ZmZlcihjb25zdCBJbnRTaXplJiAKICAgICA6IG1fZGF0YShzaXplKQog
ICAgICwgbV9zaXplKHNpemUpCiB7Ci0gICAgaWYgKCFtX2RhdGEubV9jYW52YXMuaW5pdGlhbGl6
ZShzaXplLndpZHRoKCksIHNpemUuaGVpZ2h0KCksIGZhbHNlKSkgeworICAgIFNrQ2FudmFzKiBj
YW52YXMgPSBQbGF0Zm9ybUNhbnZhc1NraWE6OmNyZWF0ZUJpdG1hcENhbnZhcyhzaXplLndpZHRo
KCksIHNpemUuaGVpZ2h0KCksIGZhbHNlKTsKKyAgICBpZiAoIWNhbnZhcykgewogICAgICAgICBz
dWNjZXNzID0gZmFsc2U7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBtX2RhdGEubV9w
bGF0Zm9ybUNvbnRleHQuc2V0Q2FudmFzKCZtX2RhdGEubV9jYW52YXMpOworICAgIG1fZGF0YS5t
X2NhbnZhcyA9IGNhbnZhczsKKyAgICBtX2RhdGEubV9wbGF0Zm9ybUNvbnRleHQuc2V0Q2FudmFz
KG1fZGF0YS5tX2NhbnZhcy5nZXQoKSk7CiAgICAgbV9jb250ZXh0LnNldChuZXcgR3JhcGhpY3ND
b250ZXh0KCZtX2RhdGEubV9wbGF0Zm9ybUNvbnRleHQpKTsKICAgICBtX2NvbnRleHQtPnBsYXRm
b3JtQ29udGV4dCgpLT5zZXREcmF3aW5nVG9JbWFnZUJ1ZmZlcih0cnVlKTsKIAogICAgIC8vIE1h
a2UgdGhlIGJhY2tncm91bmQgdHJhbnNwYXJlbnQuIEl0IHdvdWxkIGJlIG5pY2UgaWYgdGhpcyB3
YXNuJ3QKICAgICAvLyByZXF1aXJlZCwgYnV0IHRoZSBjYW52YXMgaXMgY3VycmVudGx5IGZpbGxl
ZCB3aXRoIHRoZSBtYWdpYyB0cmFuc3BhcmVuY3kKICAgICAvLyBjb2xvci4gQ2FuIHdlIGhhdmUg
YW5vdGhlciB3YXkgdG8gbWFuYWdlIHRoaXM/Ci0gICAgbV9kYXRhLm1fY2FudmFzLmRyYXdBUkdC
KDAsIDAsIDAsIDAsIFNrWGZlcm1vZGU6OmtDbGVhcl9Nb2RlKTsKKyAgICBtX2RhdGEubV9jYW52
YXMtPmRyYXdBUkdCKDAsIDAsIDAsIDAsIFNrWGZlcm1vZGU6OmtDbGVhcl9Nb2RlKTsKICAgICBz
dWNjZXNzID0gdHJ1ZTsKIH0KIApJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9za2lh
L0ltYWdlU2tpYS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9z
a2lhL0ltYWdlU2tpYS5jcHAJKHJldmlzaW9uIDgyNjk3KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9za2lhL0ltYWdlU2tpYS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI2Miw3ICsyNjIs
NyBAQCBzdGF0aWMgdm9pZCBwYWludFNrQml0bWFwKFBsYXRmb3JtQ29udGV4CiAgICAgcGFpbnQu
c2V0QWxwaGEocGxhdGZvcm1Db250ZXh0LT5nZXROb3JtYWxpemVkQWxwaGEoKSk7CiAgICAgcGFp
bnQuc2V0TG9vcGVyKHBsYXRmb3JtQ29udGV4dC0+Z2V0RHJhd0xvb3BlcigpKTsKIAotICAgIHNr
aWE6OlBsYXRmb3JtQ2FudmFzKiBjYW52YXMgPSBwbGF0Zm9ybUNvbnRleHQtPmNhbnZhcygpOwor
ICAgIFNrQ2FudmFzKiBjYW52YXMgPSBwbGF0Zm9ybUNvbnRleHQtPmNhbnZhcygpOwogCiAgICAg
UmVzYW1wbGluZ01vZGUgcmVzYW1wbGluZyA9IHBsYXRmb3JtQ29udGV4dC0+aXNQcmludGluZygp
ID8gUkVTQU1QTEVfTk9ORSA6CiAgICAgICAgIGNvbXB1dGVSZXNhbXBsaW5nTW9kZShwbGF0Zm9y
bUNvbnRleHQsIGJpdG1hcCwgc3JjUmVjdC53aWR0aCgpLCBzcmNSZWN0LmhlaWdodCgpLApJbmRl
eDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9za2lhL1BsYXRmb3JtQ2FudmFzU2tpYS5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9za2lhL1BsYXRmb3JtQ2Fu
dmFzU2tpYS5jcHAJKHJldmlzaW9uIDApCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3Nr
aWEvUGxhdGZvcm1DYW52YXNTa2lhLmNwcAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwzNyBAQAor
LyoKKyAqIENvcHlyaWdodCAoYykgMjAxMSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICogCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqIAorICog
ICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRo
ZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUK
KyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIElu
Yy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBl
bmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJl
IHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICogCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJ
QlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICog
T1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisK
KyNpbmNsdWRlICJQbGF0Zm9ybUNhbnZhcy5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKKwor
Cit9ICAvLyBuYW1lc3BhY2UgV2ViQ29yZQoKUHJvcGVydHkgY2hhbmdlcyBvbjogV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9za2lhL1BsYXRmb3JtQ2FudmFzU2tpYS5jcHAKX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpB
ZGRlZDogc3ZuOmVvbC1zdHlsZQogICArIExGCgpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9za2lhL1BsYXRmb3JtQ2FudmFzU2tpYS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3Mvc2tpYS9QbGF0Zm9ybUNhbnZhc1NraWEuaAkocmV2aXNpb24gMCkKKysr
IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9QbGF0Zm9ybUNhbnZhc1NraWEuaAkocmV2
aXNpb24gMCkKQEAgLTAsMCArMSw2NSBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAxMSBHb29n
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucyBhcmUKKyAqIG1ldDoKKyAqIAorICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAq
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUK
KyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5l
aXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNv
bnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVy
aXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRl
biBwZXJtaXNzaW9uLgorICogCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBD
T1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRF
RCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8vIEFsbCBvZiB0aGUgZnVuY3Rpb25zIGluIHRo
aXMgZmlsZSBzaG91bGQgbW92ZSB0byBuZXcgaG9tZXMgYW5kIHRoaXMgZmlsZSBzaG91bGQgYmUg
ZGVsZXRlZC4KKworI2lmbmRlZiBQbGF0Zm9ybUNhbnZhc1NraWFfaAorI2RlZmluZSBQbGF0Zm9y
bUNhbnZhc1NraWFfaAorCisjaW5jbHVkZSAiUGxhdGZvcm0uaCIKKworI2lmIE9TKFdJTkRPV1Mp
CisjaW5jbHVkZSA8d2luZG93cy5oPgorI2VuZGlmCisKK2NsYXNzIFNrQ2FudmFzOworCituYW1l
c3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIFBsYXRmb3JtQ2FudmFzU2tpYSB7CitwdWJsaWM6Cisg
ICAgc3RhdGljIFNrQ2FudmFzKiBjcmVhdGVCaXRtYXBDYW52YXMoaW50IHdpZHRoLCBpbnQgaGVp
Z2h0LCBib29sIGlzX29wYXF1ZSk7CisKKyNpZiBPUyhXSU5ET1dTKQordHlwZWRlZiBIREMgTmF0
aXZlQ29udGV4dDsKKyNlbHNlCit0eXBlZGVmIGludCBOYXRpdmVDb250ZXh0OworI2VuZGlmCisK
KyAgICBzdGF0aWMgTmF0aXZlQ29udGV4dCBiZWdpbk5hdGl2ZVBhaW50KFNrQ2FudmFzKik7Cisg
ICAgc3RhdGljIHZvaWQgZW5kTmF0aXZlUGFpbnQoU2tDYW52YXMqKTsKKworICAgIHN0YXRpYyBi
b29sIGlzVmVjdG9yaWFsKFNrQ2FudmFzKik7CisgICAgc3RhdGljIGJvb2wgaXNOYXRpdmVGb250
UmVuZGVyaW5nQWxsb3dlZChTa0NhbnZhcyopOworfTsKKworfSAgLy8gbmFtZXNwYWNlIFdlYkNv
cmUKKworI2VuZGlmICAvLyBQbGF0Zm9ybUNhbnZhc19oCgpQcm9wZXJ0eSBjaGFuZ2VzIG9uOiBX
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3NraWEvUGxhdGZvcm1DYW52YXNTa2lhLmgKX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fXwpBZGRlZDogc3ZuOmVvbC1zdHlsZQogICArIExGCgpJbmRleDogV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9za2lhL1BsYXRmb3JtQ29udGV4dFNraWEuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9QbGF0Zm9ybUNvbnRleHRTa2lhLmNwcAkocmV2
aXNpb24gODI2OTcpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3NraWEvUGxhdGZvcm1D
b250ZXh0U2tpYS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM5LDE2ICszOSwxNiBAQAogI2luY2x1
ZGUgIkdyYXBoaWNzQ29udGV4dDNELmgiCiAjaW5jbHVkZSAiSW1hZ2VCdWZmZXIuaCIKICNpbmNs
dWRlICJOYXRpdmVJbWFnZVNraWEuaCIKKyNpbmNsdWRlICJQbGF0Zm9ybUNhbnZhc1NraWEuaCIK
ICNpbmNsdWRlICJTa2lhVXRpbHMuaCIKICNpbmNsdWRlICJUZXh0dXJlLmgiCiAjaW5jbHVkZSAi
VGlsaW5nRGF0YS5oIgogCi0jaW5jbHVkZSAic2tpYS9leHQvaW1hZ2Vfb3BlcmF0aW9ucy5oIgot
I2luY2x1ZGUgInNraWEvZXh0L3BsYXRmb3JtX2NhbnZhcy5oIgotCiAjaW5jbHVkZSAiU2tCaXRt
YXAuaCIKKyNpbmNsdWRlICJTa0NhbnZhcy5oIgogI2luY2x1ZGUgIlNrQ29sb3JQcml2LmgiCiAj
aW5jbHVkZSAiU2tEYXNoUGF0aEVmZmVjdC5oIgorI2luY2x1ZGUgIlNrRGV2aWNlLmgiCiAjaW5j
bHVkZSAiU2tTaGFkZXIuaCIKIAogI2lmIEVOQUJMRShTS0lBX0dQVSkKQEAgLTIxMyw3ICsyMTMs
NyBAQCBTa0NvbG9yIFBsYXRmb3JtQ29udGV4dFNraWE6OlN0YXRlOjphcHBsCiAvLyBQbGF0Zm9y
bUNvbnRleHRTa2lhIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLQogCiAvLyBEYW5nZXI6IGNhbnZhcyBjYW4gYmUgTlVMTC4KLVBsYXRmb3Jt
Q29udGV4dFNraWE6OlBsYXRmb3JtQ29udGV4dFNraWEoc2tpYTo6UGxhdGZvcm1DYW52YXMqIGNh
bnZhcykKK1BsYXRmb3JtQ29udGV4dFNraWE6OlBsYXRmb3JtQ29udGV4dFNraWEoU2tDYW52YXMq
IGNhbnZhcykKICAgICA6IG1fY2FudmFzKGNhbnZhcykKICAgICAsIG1fZHJhd2luZ1RvSW1hZ2VC
dWZmZXIoZmFsc2UpCiAgICAgLCBtX3VzZUdQVShmYWxzZSkKQEAgLTI0MCw3ICsyNDAsNyBAQCBQ
bGF0Zm9ybUNvbnRleHRTa2lhOjp+UGxhdGZvcm1Db250ZXh0U2tpCiAjZW5kaWYKIH0KIAotdm9p
ZCBQbGF0Zm9ybUNvbnRleHRTa2lhOjpzZXRDYW52YXMoc2tpYTo6UGxhdGZvcm1DYW52YXMqIGNh
bnZhcykKK3ZvaWQgUGxhdGZvcm1Db250ZXh0U2tpYTo6c2V0Q2FudmFzKFNrQ2FudmFzKiBjYW52
YXMpCiB7CiAgICAgbV9jYW52YXMgPSBjYW52YXM7CiB9CkBAIC02MTQsMTMgKzYxNCwxMyBAQCBi
b29sIFBsYXRmb3JtQ29udGV4dFNraWE6OmlzUHJpbnRpbmcoKQogI2lmIEVOQUJMRShTS0lBX0dQ
VSkKICAgICByZXR1cm4gdHJ1ZTsKICNlbHNlCi0gICAgcmV0dXJuIG1fY2FudmFzLT5nZXRUb3BQ
bGF0Zm9ybURldmljZSgpLklzVmVjdG9yaWFsKCk7CisgICAgcmV0dXJuIFBsYXRmb3JtQ2FudmFz
U2tpYTo6aXNWZWN0b3JpYWwobV9jYW52YXMpOwogI2VuZGlmCiB9CiAKIGJvb2wgUGxhdGZvcm1D
b250ZXh0U2tpYTo6aXNOYXRpdmVGb250UmVuZGVyaW5nQWxsb3dlZCgpCiB7Ci0gICAgcmV0dXJu
IG1fY2FudmFzLT5nZXRUb3BQbGF0Zm9ybURldmljZSgpLklzTmF0aXZlRm9udFJlbmRlcmluZ0Fs
bG93ZWQoKTsKKyAgICByZXR1cm4gUGxhdGZvcm1DYW52YXNTa2lhOjppc05hdGl2ZUZvbnRSZW5k
ZXJpbmdBbGxvd2VkKG1fY2FudmFzKTsKIH0KIAogdm9pZCBQbGF0Zm9ybUNvbnRleHRTa2lhOjpn
ZXRJbWFnZVJlc2FtcGxpbmdIaW50KEludFNpemUqIHNyY1NpemUsIEZsb2F0U2l6ZSogZHN0U2l6
ZSkgY29uc3QKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9QbGF0Zm9ybUNv
bnRleHRTa2lhLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9za2lh
L1BsYXRmb3JtQ29udGV4dFNraWEuaAkocmV2aXNpb24gODI2OTcpCisrKyBXZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL3NraWEvUGxhdGZvcm1Db250ZXh0U2tpYS5oCSh3b3JraW5nIGNvcHkpCkBA
IC0zOCw3ICszOCw2IEBACiAjaW5jbHVkZSAiU2tEcmF3TG9vcGVyLmgiCiAjaW5jbHVkZSAiU2tQ
YWludC5oIgogI2luY2x1ZGUgIlNrUGF0aC5oIgotI2luY2x1ZGUgInNraWEvZXh0L3BsYXRmb3Jt
X2NhbnZhcy5oIgogCiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgogCkBAIC03MiwxMiArNzEsMTIg
QEAgY2xhc3MgUGxhdGZvcm1Db250ZXh0U2tpYSB7CiBwdWJsaWM6CiAgICAgLy8gRm9yIHByaW50
aW5nLCB0aGVyZSBzaG91bGRuJ3QgYmUgYW55IGNhbnZhcy4gY2FudmFzIGNhbiBiZSBOVUxMLiBJ
ZiB5b3UKICAgICAvLyBzdXBwbHkgYSBOVUxMIGNhbnZhcywgeW91IGNhbiBhbHNvIGNhbGwgc2V0
Q2FudmFzIGxhdGVyLgotICAgIFBsYXRmb3JtQ29udGV4dFNraWEoc2tpYTo6UGxhdGZvcm1DYW52
YXMqKTsKKyAgICBQbGF0Zm9ybUNvbnRleHRTa2lhKFNrQ2FudmFzKik7CiAgICAgflBsYXRmb3Jt
Q29udGV4dFNraWEoKTsKIAogICAgIC8vIFNldHMgdGhlIGNhbnZhcyBhc3NvY2lhdGVkIHdpdGgg
dGhpcyBjb250ZXh0LiBVc2Ugd2hlbiBzdXBwbHlpbmcgTlVMTAogICAgIC8vIHRvIHRoZSBjb25z
dHJ1Y3Rvci4KLSAgICB2b2lkIHNldENhbnZhcyhza2lhOjpQbGF0Zm9ybUNhbnZhcyopOworICAg
IHZvaWQgc2V0Q2FudmFzKFNrQ2FudmFzKik7CiAKICAgICAvLyBJZiBmYWxzZSB3ZSdyZSByZW5k
ZXJpbmcgdG8gYSBHcmFwaGljc0NvbnRleHQgZm9yIGEgd2ViIHBhZ2UsIGlmIGZhbHNlCiAgICAg
Ly8gd2UncmUgbm90IChhcyBpcyB0aGUgY2FzZSB3aGVuIHJlbmRlcmluZyB0byBhIGNhbnZhcyBv
YmplY3QpLgpAQCAtMTQ2LDcgKzE0NSw3IEBAIHB1YmxpYzoKICAgICAvLyBieSB0aGUgY3VycmVu
dCBhbHBoYS4KICAgICBTa0NvbG9yIGVmZmVjdGl2ZVN0cm9rZUNvbG9yKCkgY29uc3Q7CiAKLSAg
ICBza2lhOjpQbGF0Zm9ybUNhbnZhcyogY2FudmFzKCkgeyByZXR1cm4gbV9jYW52YXM7IH0KKyAg
ICBTa0NhbnZhcyogY2FudmFzKCkgeyByZXR1cm4gbV9jYW52YXM7IH0KIAogICAgIEludGVycG9s
YXRpb25RdWFsaXR5IGludGVycG9sYXRpb25RdWFsaXR5KCkgY29uc3Q7CiAgICAgdm9pZCBzZXRJ
bnRlcnBvbGF0aW9uUXVhbGl0eShJbnRlcnBvbGF0aW9uUXVhbGl0eSBpbnRlcnBvbGF0aW9uUXVh
bGl0eSk7CkBAIC0xNjQsNyArMTYzLDcgQEAgcHVibGljOgogICAgIC8vIFdhcm5pbmc6IFRoaXMg
ZnVuY3Rpb24gaXMgZGVwcmVjYXRlZCBzbyB0aGUgdXNlcnMgYXJlIHJlbWluZGVkIHRoYXQgdGhl
eQogICAgIC8vIHNob3VsZCB1c2UgdGhpcyBsYXllciBvZiBpbmRpcmVjdGlvbiBpbnN0ZWFkIG9m
IHVzaW5nIHRoZSBjYW52YXMKICAgICAvLyBkaXJlY3RseS4gVGhpcyBpcyB0byBoZWxwIHdpdGgg
dGhlIGV2ZW50dWFsIHNlcmlhbGl6YXRpb24uCi0gICAgc2tpYTo6UGxhdGZvcm1DYW52YXMqIGNh
bnZhcygpIGNvbnN0OworICAgIFNrQ2FudmFzKiBjYW52YXMoKSBjb25zdDsKIAogICAgIC8vIFJl
dHVybnMgaWYgdGhlIGNvbnRleHQgaXMgYSBwcmludGluZyBjb250ZXh0IGluc3RlYWQgb2YgYSBk
aXNwbGF5CiAgICAgLy8gY29udGV4dC4gQml0bWFwIHNob3VsZG4ndCBiZSByZXNhbXBsZWQgd2hl
biBwcmludGluZyB0byBrZWVwIHRoZSBiZXN0CkBAIC0xOTEsMTAgKzE5MCwxMCBAQCBwdWJsaWM6
CiAgICAgR0xFUzJDYW52YXMqIGdwdUNhbnZhcygpIGNvbnN0IHsgcmV0dXJuIDA7IH0KICNlbmRp
ZgogICAgIC8vIENhbGwgdGhlc2UgYmVmb3JlIG1ha2luZyBhIGNhbGwgdGhhdCBtYW5pcHVsYXRl
cyB0aGUgdW5kZXJseWluZwotICAgIC8vIHNraWE6OlBsYXRmb3JtQ2FudmFzIG9yIFdlYkNvcmU6
OkdMRVMyQ2FudmFzCisgICAgLy8gU2tDYW52YXMgb3IgV2ViQ29yZTo6R0xFUzJDYW52YXMKICAg
ICB2b2lkIHByZXBhcmVGb3JTb2Z0d2FyZURyYXcoKSBjb25zdDsKICAgICB2b2lkIHByZXBhcmVG
b3JIYXJkd2FyZURyYXcoKSBjb25zdDsKLSAgICAvLyBDYWxsIHRvIGZvcmNlIHRoZSBza2lhOjpQ
bGF0Zm9ybUNhbnZhcyB0byBjb250YWluIGFsbCByZW5kZXJpbmcgcmVzdWx0cy4KKyAgICAvLyBD
YWxsIHRvIGZvcmNlIHRoZSBTa0NhbnZhcyB0byBjb250YWluIGFsbCByZW5kZXJpbmcgcmVzdWx0
cy4KICAgICB2b2lkIHN5bmNTb2Z0d2FyZUNhbnZhcygpIGNvbnN0OwogICAgIHZvaWQgbWFya0Rp
cnR5UmVjdChjb25zdCBJbnRSZWN0JiByZWN0KTsKIApAQCAtMjExLDcgKzIxMCw3IEBAIHByaXZh
dGU6CiAgICAgc3RydWN0IFN0YXRlOwogCiAgICAgLy8gTlVMTCBpbmRpY2F0ZXMgcGFpbnRpbmcg
aXMgZGlzYWJsZWQuIE5ldmVyIGRlbGV0ZSB0aGlzIG9iamVjdC4KLSAgICBza2lhOjpQbGF0Zm9y
bUNhbnZhcyogbV9jYW52YXM7CisgICAgU2tDYW52YXMqIG1fY2FudmFzOwogCiAgICAgLy8gU3Rh
dGVzIHN0YWNrLiBFbmFibGVzIGxvY2FsIGRyYXdpbmcgc3RhdGUgY2hhbmdlIHdpdGggc2F2ZSgp
L3Jlc3RvcmUoKQogICAgIC8vIGNhbGxzLgpJbmRleDogV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
VGhlbWVDaHJvbWl1bVdpbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyVGhlbWVDaHJvbWl1bVdpbi5jcHAJKHJldmlzaW9uIDgyNjk3KQorKysgV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyVGhlbWVDaHJvbWl1bVdpbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ2LDYg
KzQ2LDcgQEAKICNpbmNsdWRlICJTeXN0ZW1JbmZvLmgiCiAjaW5jbHVkZSAiVHJhbnNwYXJlbmN5
V2luLmgiCiAKKyNpbmNsdWRlICJTa0NhbnZhcy5oIgogLy8gRklYTUU6IFRoaXMgZGVwZW5kZW5j
eSBzaG91bGQgZXZlbnR1YWxseSBiZSByZW1vdmVkLgogI2luY2x1ZGUgPHNraWEvZXh0L3NraWFf
dXRpbHNfd2luLmg+CiAKSW5kZXg6IFdlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwkocmV2aXNpb24gODI3MjIpCisrKyBXZWJL
aXQvY2hyb21pdW0vQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTUgQEAKKzIw
MTEtMDQtMDEgIEFsb2sgUHJpeWFkYXJzaGkgIDxhbG9rcEBjaHJvbWl1bS5vcmc+CisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgUmVtb3ZlIGRlcGVuZGVu
Y3kgb24gY2hyb21pdW0gc2tpYTo6UGxhdGZvcm1DYW52YXMKKyAgICAgICAgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTU3NTYzCisKKyAgICAgICAgKiBwdWJsaWMvV2Vi
Q2FudmFzLmg6CisgICAgICAgICogc3JjL1dlYlZpZXdJbXBsLmNwcDoKKyAgICAgICAgKiB0ZXN0
cy9UcmFuc3BhcmVuY3lXaW5UZXN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmRyYXdOYXRpdmVS
ZWN0KToKKwogMjAxMS0wMy0zMCAgUGF2ZWwgUG9kaXZpbG92ICA8cG9kaXZpbG92QGNocm9taXVt
Lm9yZz4KIAogICAgICAgICBSZXZpZXdlZCBieSBQYXZlbCBGZWxkbWFuLgpJbmRleDogV2ViS2l0
L2Nocm9taXVtL3B1YmxpYy9XZWJDYW52YXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQvY2hyb21p
dW0vcHVibGljL1dlYkNhbnZhcy5oCShyZXZpc2lvbiA4MjY5NykKKysrIFdlYktpdC9jaHJvbWl1
bS9wdWJsaWMvV2ViQ2FudmFzLmgJKHdvcmtpbmcgY29weSkKQEAgLTM0LDcgKzM0LDcgQEAKICNp
bmNsdWRlICJXZWJDb21tb24uaCIKIAogI2lmIFdFQktJVF9VU0lOR19TS0lBCi1uYW1lc3BhY2Ug
c2tpYSB7IGNsYXNzIFBsYXRmb3JtQ2FudmFzOyB9CitjbGFzcyBTa0NhbnZhczsKICNlbGlmIFdF
QktJVF9VU0lOR19DRwogc3RydWN0IENHQ29udGV4dDsKICNlbmRpZgpAQCAtNDIsNyArNDIsNyBA
QCBzdHJ1Y3QgQ0dDb250ZXh0OwogbmFtZXNwYWNlIFdlYktpdCB7CiAKICNpZiBXRUJLSVRfVVNJ
TkdfU0tJQQotdHlwZWRlZiBza2lhOjpQbGF0Zm9ybUNhbnZhcyBXZWJDYW52YXM7Cit0eXBlZGVm
IFNrQ2FudmFzIFdlYkNhbnZhczsKICNlbGlmIFdFQktJVF9VU0lOR19DRwogdHlwZWRlZiBzdHJ1
Y3QgQ0dDb250ZXh0IFdlYkNhbnZhczsKICNlbHNlCkluZGV4OiBXZWJLaXQvY2hyb21pdW0vc3Jj
L1dlYlZpZXdJbXBsLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQvY2hyb21pdW0vc3JjL1dlYlZp
ZXdJbXBsLmNwcAkocmV2aXNpb24gODI2OTcpCisrKyBXZWJLaXQvY2hyb21pdW0vc3JjL1dlYlZp
ZXdJbXBsLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTI1LDYgKzEyNSwxMCBAQAogI2luY2x1ZGUg
PHd0Zi9DdXJyZW50VGltZS5oPgogI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KIAorI2lmIFVTRShT
S0lBKQorI2luY2x1ZGUgIlNrRGV2aWNlLmgiCisjZW5kaWYKKwogI2lmIFBMQVRGT1JNKENHKQog
I2luY2x1ZGUgPENvcmVHcmFwaGljcy9DR0JpdG1hcENvbnRleHQuaD4KICNpbmNsdWRlIDxDb3Jl
R3JhcGhpY3MvQ0dDb250ZXh0Lmg+CkluZGV4OiBXZWJLaXQvY2hyb21pdW0vdGVzdHMvVHJhbnNw
YXJlbmN5V2luVGVzdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L2Nocm9taXVtL3Rlc3RzL1Ry
YW5zcGFyZW5jeVdpblRlc3QuY3BwCShyZXZpc2lvbiA4MjY5NykKKysrIFdlYktpdC9jaHJvbWl1
bS90ZXN0cy9UcmFuc3BhcmVuY3lXaW5UZXN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTAsNyAr
NTAsNyBAQCBzdGF0aWMgRmxvYXRSZWN0IFJFQ1RUb0Zsb2F0UmVjdChjb25zdCBSCiBzdGF0aWMg
dm9pZCBkcmF3TmF0aXZlUmVjdChHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBpbnQgeCwgaW50IHksIGludCB3LCBpbnQgaCkKIHsKLSAgICBza2lh
OjpQbGF0Zm9ybUNhbnZhcyogY2FudmFzID0gY29udGV4dC0+cGxhdGZvcm1Db250ZXh0KCktPmNh
bnZhcygpOworICAgIFNrQ2FudmFzKiBjYW52YXMgPSBjb250ZXh0LT5wbGF0Zm9ybUNvbnRleHQo
KS0+Y2FudmFzKCk7CiAgICAgSERDIGRjID0gY2FudmFzLT5iZWdpblBsYXRmb3JtUGFpbnQoKTsK
IAogICAgIFJFQ1QgaW5uZXJSYzsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>88570</attachid>
            <date>2011-04-06 21:59:16 -0700</date>
            <delta_ts>2011-04-11 09:56:50 -0700</delta_ts>
            <desc>proposed patch</desc>
            <filename>skia.txt</filename>
            <type>text/plain</type>
            <size>16117</size>
            <attacher name="Alok Priyadarshi">alokp</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA4MzE0MSkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMzcgQEAKKzIwMTEtMDQtMDYgIEFsb2sgUHJpeWFkYXJzaGkgIDxhbG9rcEBjaHJv
bWl1bS5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAg
ICAgUmVtb3ZlIGRlcGVuZGVuY3kgb24gY2hyb21pdW0gc2tpYTo6UGxhdGZvcm1DYW52YXMKKyAg
ICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTU3NTYzCisKKyAg
ICAgICAgTm8gbmV3IHRlc3RzLiAoT09QUyEpCisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9Gb250Q2hyb21pdW1XaW4uY3BwOgorICAgICAgICAoV2ViQ29yZTo6VHJhbnNw
YXJlbmN5QXdhcmVGb250UGFpbnRlcjo6VHJhbnNwYXJlbmN5QXdhcmVGb250UGFpbnRlcjo6aW5p
dGlhbGl6ZUZvckdESSk6CisgICAgICAgIChXZWJDb3JlOjpUcmFuc3BhcmVuY3lBd2FyZUZvbnRQ
YWludGVyOjpUcmFuc3BhcmVuY3lBd2FyZUZvbnRQYWludGVyOjp+VHJhbnNwYXJlbmN5QXdhcmVG
b250UGFpbnRlcik6CisgICAgICAgIChXZWJDb3JlOjpGb250OjpkcmF3Q29tcGxleFRleHQpOgor
ICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0ltYWdlQnVmZmVyRGF0YS5oOgor
ICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyQ2hyb21pdW0uaDoKKyAg
ICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclJlbmRlcmVyQ2hyb21pdW0u
aDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9QbGF0Zm9ybUNhbnZhcy5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpQbGF0Zm9ybUNhbnZhczo6cmVzaXplKToKKyAgICAgICAg
KiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9QbGF0Zm9ybUNhbnZhcy5oOgorICAgICAgICAq
IHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1RyYW5zcGFyZW5jeVdpbi5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpUcmFuc3BhcmVuY3lXaW46OmNvbXBvc2l0ZVRleHRDb21wb3NpdGUpOgorICAg
ICAgICAoV2ViQ29yZTo6VHJhbnNwYXJlbmN5V2luOjptYWtlTGF5ZXJPcGFxdWUpOgorICAgICAg
ICAqIHBsYXRmb3JtL2dyYXBoaWNzL3NraWEvSW1hZ2VCdWZmZXJTa2lhLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OkltYWdlQnVmZmVyOjpJbWFnZUJ1ZmZlcik6CisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3Mvc2tpYS9JbWFnZVNraWEuY3BwOgorICAgICAgICAoV2ViQ29yZTo6cGFpbnRTa0Jp
dG1hcCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9QbGF0Zm9ybUNvbnRleHRT
a2lhLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlBsYXRmb3JtQ29udGV4dFNraWE6OlBsYXRmb3Jt
Q29udGV4dFNraWEpOgorICAgICAgICAoV2ViQ29yZTo6UGxhdGZvcm1Db250ZXh0U2tpYTo6c2V0
Q2FudmFzKToKKyAgICAgICAgKFdlYkNvcmU6OlBsYXRmb3JtQ29udGV4dFNraWE6OmlzUHJpbnRp
bmcpOgorICAgICAgICAoV2ViQ29yZTo6UGxhdGZvcm1Db250ZXh0U2tpYTo6aXNOYXRpdmVGb250
UmVuZGVyaW5nQWxsb3dlZCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9QbGF0
Zm9ybUNvbnRleHRTa2lhLmg6CisgICAgICAgIChXZWJDb3JlOjpQbGF0Zm9ybUNvbnRleHRTa2lh
OjpjYW52YXMpOgorCiAyMDExLTA0LTA2ICBBZGFtIEJhcnRoICA8YWJhcnRoQHdlYmtpdC5vcmc+
CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgRXJpYyBTZWlkZWwuCkluZGV4OiBXZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL0ZvbnRDaHJvbWl1bVdpbi5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9Gb250Q2hyb21pdW1XaW4uY3BwCShy
ZXZpc2lvbiA4MzA2MCkKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vRm9u
dENocm9taXVtV2luLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTY1LDcgKzE2NSw3IEBAIHZvaWQg
VHJhbnNwYXJlbmN5QXdhcmVGb250UGFpbnRlcjo6aW5pdGkKIAogICAgIC8vIFNldCB1cCB0aGUg
REMsIHVzaW5nIHRoZSBvbmUgZnJvbSB0aGUgdHJhbnNwYXJlbmN5IGhlbHBlci4KICAgICBpZiAo
bV90cmFuc3BhcmVuY3kucGxhdGZvcm1Db250ZXh0KCkpIHsKLSAgICAgICAgbV9oZGMgPSBtX3Ry
YW5zcGFyZW5jeS5wbGF0Zm9ybUNvbnRleHQoKS0+Y2FudmFzKCktPmJlZ2luUGxhdGZvcm1QYWlu
dCgpOworICAgICAgICBtX2hkYyA9IHNraWE6OkJlZ2luUGxhdGZvcm1QYWludChtX3RyYW5zcGFy
ZW5jeS5wbGF0Zm9ybUNvbnRleHQoKS0+Y2FudmFzKCkpOwogICAgICAgICBTZXRUZXh0Q29sb3Io
bV9oZGMsIHNraWE6OlNrQ29sb3JUb0NPTE9SUkVGKGNvbG9yKSk7CiAgICAgICAgIFNldEJrTW9k
ZShtX2hkYywgVFJBTlNQQVJFTlQpOwogICAgIH0KQEAgLTE3OSw3ICsxNzksNyBAQCBUcmFuc3Bh
cmVuY3lBd2FyZUZvbnRQYWludGVyOjp+VHJhbnNwYXJlCiAgICAgaWYgKG1fY3JlYXRlZFRyYW5z
cGFyZW5jeUxheWVyKQogICAgICAgICBtX2dyYXBoaWNzQ29udGV4dC0+ZW5kVHJhbnNwYXJlbmN5
TGF5ZXIoKTsKICAgICBtX2dyYXBoaWNzQ29udGV4dC0+cmVzdG9yZSgpOwotICAgIG1fcGxhdGZv
cm1Db250ZXh0LT5jYW52YXMoKS0+ZW5kUGxhdGZvcm1QYWludCgpOworICAgIHNraWE6OkVuZFBs
YXRmb3JtUGFpbnQobV9wbGF0Zm9ybUNvbnRleHQtPmNhbnZhcygpKTsKIH0KIAogLy8gU3BlY2lh
bGl6YXRpb24gZm9yIHNpbXBsZSBHbHlwaEJ1ZmZlciBwYWludGluZy4KQEAgLTUxNiw3ICs1MTYs
NyBAQCB2b2lkIEZvbnQ6OmRyYXdDb21wbGV4VGV4dChHcmFwaGljc0NvbnRlCiAgICAgLy8gdGhl
IGJhc2VsaW5lLCBzbyB3ZSBoYXZlIHRvIHN1YnRyYWN0IG9mZiB0aGUgYXNjZW50LgogICAgIHN0
YXRlLmRyYXcoZ3JhcGhpY3NDb250ZXh0LCBoZGMsIGxyb3VuZGYocG9pbnQueCgpKSwgbHJvdW5k
Zihwb2ludC55KCkgLSBmb250TWV0cmljcygpLmFzY2VudCgpKSwgZnJvbSwgdG8pOwogCi0gICAg
Y29udGV4dC0+Y2FudmFzKCktPmVuZFBsYXRmb3JtUGFpbnQoKTsKKyAgICBza2lhOjpFbmRQbGF0
Zm9ybVBhaW50KGNvbnRleHQtPmNhbnZhcygpKTsKIH0KIAogdm9pZCBGb250OjpkcmF3RW1waGFz
aXNNYXJrc0ZvckNvbXBsZXhUZXh0KEdyYXBoaWNzQ29udGV4dCogLyogY29udGV4dCAqLywgY29u
c3QgVGV4dFJ1biYgLyogcnVuICovLCBjb25zdCBBdG9taWNTdHJpbmcmIC8qIG1hcmsgKi8sIGNv
bnN0IEZsb2F0UG9pbnQmIC8qIHBvaW50ICovLCBpbnQgLyogZnJvbSAqLywgaW50IC8qIHRvICov
KSBjb25zdApJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9JbWFnZUJ1
ZmZlckRhdGEuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL0ltYWdlQnVmZmVyRGF0YS5oCShyZXZpc2lvbiA4MzA2MCkKKysrIFdlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vSW1hZ2VCdWZmZXJEYXRhLmgJKHdvcmtpbmcgY29weSkKQEAg
LTMzLDE1ICszMywxMyBAQAogCiAjaW5jbHVkZSAiUGxhdGZvcm1Db250ZXh0U2tpYS5oIgogCi0j
aW5jbHVkZSAic2tpYS9leHQvcGxhdGZvcm1fY2FudmFzLmgiCi0KIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKIAogY2xhc3MgSW1hZ2VCdWZmZXJEYXRhIHsKIHB1YmxpYzoKICAgICBJbWFnZUJ1ZmZlckRh
dGEoY29uc3QgSW50U2l6ZSYpOwogCi0gICAgc2tpYTo6UGxhdGZvcm1DYW52YXMgbV9jYW52YXM7
CisgICAgT3duUHRyPFNrQ2FudmFzPiBtX2NhbnZhczsKICAgICBQbGF0Zm9ybUNvbnRleHRTa2lh
IG1fcGxhdGZvcm1Db250ZXh0OwogfTsKIApJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9MYXllckNocm9taXVtLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9MYXllckNocm9taXVtLmgJKHJldmlzaW9uIDgzMDYwKQorKysg
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllckNocm9taXVtLmgJKHdvcmtp
bmcgY29weSkKQEAgLTUwLDExICs1MCw2IEBACiAjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nSGFz
aC5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgogCi0KLW5hbWVzcGFjZSBza2lh
IHsKLWNsYXNzIFBsYXRmb3JtQ2FudmFzOwotfQotCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNs
YXNzIENDTGF5ZXJJbXBsOwpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9MYXllclJlbmRlcmVyQ2hyb21pdW0uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL0xheWVyUmVuZGVyZXJDaHJvbWl1bS5oCShyZXZpc2lvbiA4MzA2
MCkKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJSZW5kZXJlckNo
cm9taXVtLmgJKHdvcmtpbmcgY29weSkKQEAgLTE5MCw3ICsxOTAsNyBAQCBwcml2YXRlOgogICAg
IGJvb2wgbV9jb21wb3NpdGVPZmZzY3JlZW47CiAKICNpZiBVU0UoU0tJQSkKLSAgICBPd25QdHI8
c2tpYTo6UGxhdGZvcm1DYW52YXM+IG1fcm9vdExheWVyQ2FudmFzOworICAgIE93blB0cjxTa0Nh
bnZhcz4gbV9yb290TGF5ZXJDYW52YXM7CiAgICAgT3duUHRyPFBsYXRmb3JtQ29udGV4dFNraWE+
IG1fcm9vdExheWVyU2tpYUNvbnRleHQ7CiAgICAgT3duUHRyPEdyYXBoaWNzQ29udGV4dD4gbV9y
b290TGF5ZXJHcmFwaGljc0NvbnRleHQ7CiAjZWxpZiBQTEFURk9STShDRykKSW5kZXg6IFdlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vUGxhdGZvcm1DYW52YXMuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vUGxhdGZvcm1DYW52YXMu
Y3BwCShyZXZpc2lvbiA4MzA2MCkKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vUGxhdGZvcm1DYW52YXMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01Miw3ICs1Miw3IEBAIHZv
aWQgUGxhdGZvcm1DYW52YXM6OnJlc2l6ZShjb25zdCBJbnRTaXoKIHsKICAgICBtX3NpemUgPSBz
aXplOwogI2lmIFVTRShTS0lBKQotICAgIG1fc2tpYUNhbnZhcyA9IG5ldyBza2lhOjpQbGF0Zm9y
bUNhbnZhcyhzaXplLndpZHRoKCksIHNpemUuaGVpZ2h0KCksIGZhbHNlKTsKKyAgICBtX3NraWFD
YW52YXMgPSBza2lhOjpDcmVhdGVCaXRtYXBDYW52YXMoc2l6ZS53aWR0aCgpLCBzaXplLmhlaWdo
dCgpLCBmYWxzZSk7CiAjZWxpZiBQTEFURk9STShDRykKICAgICBzaXplX3QgYnVmZmVyU2l6ZSA9
IHNpemUud2lkdGgoKSAqIHNpemUuaGVpZ2h0KCkgKiA0OwogICAgIG1fcGl4ZWxEYXRhID0gYWRv
cHRBcnJheVB0cihuZXcgdWludDhfdFtidWZmZXJTaXplXSk7CkluZGV4OiBXZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL1BsYXRmb3JtQ2FudmFzLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9QbGF0Zm9ybUNhbnZhcy5oCShyZXZpc2lv
biA4MzA2MCkKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vUGxhdGZvcm1D
YW52YXMuaAkod29ya2luZyBjb3B5KQpAQCAtMzksOCArMzksOCBAQAogI2VuZGlmCiAKICNpZiBV
U0UoU0tJQSkKLW5hbWVzcGFjZSBza2lhIHsgY2xhc3MgUGxhdGZvcm1DYW52YXM7IH0KIGNsYXNz
IFNrQml0bWFwOworY2xhc3MgU2tDYW52YXM7CiAjZW5kaWYKIAogbmFtZXNwYWNlIFdlYkNvcmUg
ewpAQCAtOTcsNyArOTcsNyBAQCBwdWJsaWM6CiAKIHByaXZhdGU6CiAjaWYgVVNFKFNLSUEpCi0g
ICAgT3duUHRyPHNraWE6OlBsYXRmb3JtQ2FudmFzPiBtX3NraWFDYW52YXM7CisgICAgT3duUHRy
PFNrQ2FudmFzPiBtX3NraWFDYW52YXM7CiAjZWxpZiBQTEFURk9STShDRykKICAgICBPd25BcnJh
eVB0cjx1aW50OF90PiBtX3BpeGVsRGF0YTsKICNlbmRpZgpJbmRleDogV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9UcmFuc3BhcmVuY3lXaW4uY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vVHJhbnNwYXJlbmN5V2luLmNwcAkocmV2
aXNpb24gODMwNjApCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1RyYW5z
cGFyZW5jeVdpbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ5LDE0ICs0OSwxNCBAQCBuYW1lc3Bh
Y2UgewogLy8gaW50by4gQnVmZmVycyBsYXJnZXIgdGhhbiB0aGlzIHdpbGwgYmUgZGVzdHJveWVk
IHdoZW4gd2UncmUgZG9uZSB3aXRoIHRoZW0uCiBjb25zdCBpbnQgbWF4Q2FjaGVkQnVmZmVyUGl4
ZWxTaXplID0gNjU1MzY7CiAKLWlubGluZSBza2lhOjpQbGF0Zm9ybUNhbnZhcyogY2FudmFzRm9y
Q29udGV4dChjb25zdCBHcmFwaGljc0NvbnRleHQmIGNvbnRleHQpCitpbmxpbmUgU2tDYW52YXMq
IGNhbnZhc0ZvckNvbnRleHQoY29uc3QgR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KQogewogICAg
IHJldHVybiBjb250ZXh0LnBsYXRmb3JtQ29udGV4dCgpLT5jYW52YXMoKTsKIH0KIAogaW5saW5l
IGNvbnN0IFNrQml0bWFwJiBiaXRtYXBGb3JDb250ZXh0KGNvbnN0IEdyYXBoaWNzQ29udGV4dCYg
Y29udGV4dCkKIHsKLSAgICByZXR1cm4gY2FudmFzRm9yQ29udGV4dChjb250ZXh0KS0+Z2V0VG9w
UGxhdGZvcm1EZXZpY2UoKS5hY2Nlc3NCaXRtYXAoZmFsc2UpOworICAgIHJldHVybiBjYW52YXNG
b3JDb250ZXh0KGNvbnRleHQpLT5nZXRUb3BEZXZpY2UoKS0+YWNjZXNzQml0bWFwKGZhbHNlKTsK
IH0KIAogdm9pZCBjb21wb3NpdGVUb0NvcHkoY29uc3QgR3JhcGhpY3NDb250ZXh0JiBzb3VyY2VM
YXllcnMsCkBAIC00NjYsNyArNDY2LDcgQEAgdm9pZCBUcmFuc3BhcmVuY3lXaW46OmNvbXBvc2l0
ZVRleHRDb21wbwogICAgIGlmICghbV92YWxpZExheWVyKQogICAgICAgICByZXR1cm47CiAKLSAg
ICBjb25zdCBTa0JpdG1hcCYgYml0bWFwID0gbV9sYXllckJ1ZmZlci0+Y29udGV4dCgpLT5wbGF0
Zm9ybUNvbnRleHQoKS0+Y2FudmFzKCktPmdldFRvcFBsYXRmb3JtRGV2aWNlKCkuYWNjZXNzQml0
bWFwKHRydWUpOworICAgIGNvbnN0IFNrQml0bWFwJiBiaXRtYXAgPSBtX2xheWVyQnVmZmVyLT5j
b250ZXh0KCktPnBsYXRmb3JtQ29udGV4dCgpLT5jYW52YXMoKS0+Z2V0VG9wRGV2aWNlKCktPmFj
Y2Vzc0JpdG1hcCh0cnVlKTsKICAgICBTa0NvbG9yIHRleHRDb2xvciA9IG1fdGV4dENvbXBvc2l0
ZUNvbG9yLnJnYigpOwogICAgIGZvciAoaW50IHkgPSAwOyB5IDwgbV9sYXllclNpemUuaGVpZ2h0
KCk7IHkrKykgewogICAgICAgICB1aW50MzJfdCogcm93ID0gYml0bWFwLmdldEFkZHIzMigwLCB5
KTsKQEAgLTUwMiw3ICs1MDIsNyBAQCB2b2lkIFRyYW5zcGFyZW5jeVdpbjo6bWFrZUxheWVyT3Bh
cXVlKCkKICAgICAgICAgcmV0dXJuOwogCiAgICAgU2tCaXRtYXAmIGJpdG1hcCA9IGNvbnN0X2Nh
c3Q8U2tCaXRtYXAmPihtX2RyYXdDb250ZXh0LT5wbGF0Zm9ybUNvbnRleHQoKS0+Ci0gICAgICAg
IGNhbnZhcygpLT5nZXRUb3BQbGF0Zm9ybURldmljZSgpLmFjY2Vzc0JpdG1hcCh0cnVlKSk7Cisg
ICAgICAgIGNhbnZhcygpLT5nZXRUb3BEZXZpY2UoKS0+YWNjZXNzQml0bWFwKHRydWUpKTsKICAg
ICBmb3IgKGludCB5ID0gMDsgeSA8IG1fbGF5ZXJTaXplLmhlaWdodCgpOyB5KyspIHsKICAgICAg
ICAgdWludDMyX3QqIHJvdyA9IGJpdG1hcC5nZXRBZGRyMzIoMCwgeSk7CiAgICAgICAgIGZvciAo
aW50IHggPSAwOyB4IDwgbV9sYXllclNpemUud2lkdGgoKTsgeCsrKQpJbmRleDogV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9za2lhL0ltYWdlQnVmZmVyU2tpYS5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9za2lhL0ltYWdlQnVmZmVyU2tpYS5jcHAJKHJldmlz
aW9uIDgzMDYwKQorKysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9za2lhL0ltYWdlQnVmZmVy
U2tpYS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY2LDE5ICs2NiwyMSBAQCBJbWFnZUJ1ZmZlcjo6
SW1hZ2VCdWZmZXIoY29uc3QgSW50U2l6ZSYKICAgICA6IG1fZGF0YShzaXplKQogICAgICwgbV9z
aXplKHNpemUpCiB7Ci0gICAgaWYgKCFtX2RhdGEubV9jYW52YXMuaW5pdGlhbGl6ZShzaXplLndp
ZHRoKCksIHNpemUuaGVpZ2h0KCksIGZhbHNlKSkgeworICAgIFNrQ2FudmFzKiBjYW52YXMgPSBz
a2lhOjpDcmVhdGVCaXRtYXBDYW52YXMoc2l6ZS53aWR0aCgpLCBzaXplLmhlaWdodCgpLCBmYWxz
ZSk7CisgICAgaWYgKCFjYW52YXMpIHsKICAgICAgICAgc3VjY2VzcyA9IGZhbHNlOwogICAgICAg
ICByZXR1cm47CiAgICAgfQogCi0gICAgbV9kYXRhLm1fcGxhdGZvcm1Db250ZXh0LnNldENhbnZh
cygmbV9kYXRhLm1fY2FudmFzKTsKKyAgICBtX2RhdGEubV9jYW52YXMgPSBjYW52YXM7CisgICAg
bV9kYXRhLm1fcGxhdGZvcm1Db250ZXh0LnNldENhbnZhcyhtX2RhdGEubV9jYW52YXMuZ2V0KCkp
OwogICAgIG1fY29udGV4dC5zZXQobmV3IEdyYXBoaWNzQ29udGV4dCgmbV9kYXRhLm1fcGxhdGZv
cm1Db250ZXh0KSk7CiAgICAgbV9jb250ZXh0LT5wbGF0Zm9ybUNvbnRleHQoKS0+c2V0RHJhd2lu
Z1RvSW1hZ2VCdWZmZXIodHJ1ZSk7CiAKICAgICAvLyBNYWtlIHRoZSBiYWNrZ3JvdW5kIHRyYW5z
cGFyZW50LiBJdCB3b3VsZCBiZSBuaWNlIGlmIHRoaXMgd2Fzbid0CiAgICAgLy8gcmVxdWlyZWQs
IGJ1dCB0aGUgY2FudmFzIGlzIGN1cnJlbnRseSBmaWxsZWQgd2l0aCB0aGUgbWFnaWMgdHJhbnNw
YXJlbmN5CiAgICAgLy8gY29sb3IuIENhbiB3ZSBoYXZlIGFub3RoZXIgd2F5IHRvIG1hbmFnZSB0
aGlzPwotICAgIG1fZGF0YS5tX2NhbnZhcy5kcmF3QVJHQigwLCAwLCAwLCAwLCBTa1hmZXJtb2Rl
OjprQ2xlYXJfTW9kZSk7CisgICAgbV9kYXRhLm1fY2FudmFzLT5kcmF3QVJHQigwLCAwLCAwLCAw
LCBTa1hmZXJtb2RlOjprQ2xlYXJfTW9kZSk7CiAgICAgc3VjY2VzcyA9IHRydWU7CiB9CiAKSW5k
ZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9JbWFnZVNraWEuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9JbWFnZVNraWEuY3BwCShyZXZp
c2lvbiA4MzA2MCkKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9JbWFnZVNraWEu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNjIsNyArMjYyLDcgQEAgc3RhdGljIHZvaWQgcGFpbnRT
a0JpdG1hcChQbGF0Zm9ybUNvbnRleAogICAgIHBhaW50LnNldEFscGhhKHBsYXRmb3JtQ29udGV4
dC0+Z2V0Tm9ybWFsaXplZEFscGhhKCkpOwogICAgIHBhaW50LnNldExvb3BlcihwbGF0Zm9ybUNv
bnRleHQtPmdldERyYXdMb29wZXIoKSk7CiAKLSAgICBza2lhOjpQbGF0Zm9ybUNhbnZhcyogY2Fu
dmFzID0gcGxhdGZvcm1Db250ZXh0LT5jYW52YXMoKTsKKyAgICBTa0NhbnZhcyogY2FudmFzID0g
cGxhdGZvcm1Db250ZXh0LT5jYW52YXMoKTsKIAogICAgIFJlc2FtcGxpbmdNb2RlIHJlc2FtcGxp
bmcgPSBwbGF0Zm9ybUNvbnRleHQtPmlzUHJpbnRpbmcoKSA/IFJFU0FNUExFX05PTkUgOgogICAg
ICAgICBjb21wdXRlUmVzYW1wbGluZ01vZGUocGxhdGZvcm1Db250ZXh0LCBiaXRtYXAsIHNyY1Jl
Y3Qud2lkdGgoKSwgc3JjUmVjdC5oZWlnaHQoKSwKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3Mvc2tpYS9QbGF0Zm9ybUNvbnRleHRTa2lhLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL3NraWEvUGxhdGZvcm1Db250ZXh0U2tpYS5jcHAJKHJldmlzaW9u
IDgzMDYwKQorKysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9za2lhL1BsYXRmb3JtQ29udGV4
dFNraWEuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMTMsNyArMjEzLDcgQEAgU2tDb2xvciBQbGF0
Zm9ybUNvbnRleHRTa2lhOjpTdGF0ZTo6YXBwbAogLy8gUGxhdGZvcm1Db250ZXh0U2tpYSAtLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAog
Ly8gRGFuZ2VyOiBjYW52YXMgY2FuIGJlIE5VTEwuCi1QbGF0Zm9ybUNvbnRleHRTa2lhOjpQbGF0
Zm9ybUNvbnRleHRTa2lhKHNraWE6OlBsYXRmb3JtQ2FudmFzKiBjYW52YXMpCitQbGF0Zm9ybUNv
bnRleHRTa2lhOjpQbGF0Zm9ybUNvbnRleHRTa2lhKFNrQ2FudmFzKiBjYW52YXMpCiAgICAgOiBt
X2NhbnZhcyhjYW52YXMpCiAgICAgLCBtX2RyYXdpbmdUb0ltYWdlQnVmZmVyKGZhbHNlKQogICAg
ICwgbV91c2VHUFUoZmFsc2UpCkBAIC0yNDAsNyArMjQwLDcgQEAgUGxhdGZvcm1Db250ZXh0U2tp
YTo6flBsYXRmb3JtQ29udGV4dFNraQogI2VuZGlmCiB9CiAKLXZvaWQgUGxhdGZvcm1Db250ZXh0
U2tpYTo6c2V0Q2FudmFzKHNraWE6OlBsYXRmb3JtQ2FudmFzKiBjYW52YXMpCit2b2lkIFBsYXRm
b3JtQ29udGV4dFNraWE6OnNldENhbnZhcyhTa0NhbnZhcyogY2FudmFzKQogewogICAgIG1fY2Fu
dmFzID0gY2FudmFzOwogfQpAQCAtNjE0LDcgKzYxNCw3IEBAIGJvb2wgUGxhdGZvcm1Db250ZXh0
U2tpYTo6aXNQcmludGluZygpCiAjaWYgRU5BQkxFKFNLSUFfR1BVKQogICAgIHJldHVybiB0cnVl
OwogI2Vsc2UKLSAgICByZXR1cm4gbV9jYW52YXMtPmdldFRvcFBsYXRmb3JtRGV2aWNlKCkuSXNW
ZWN0b3JpYWwoKTsKKyAgICByZXR1cm4gZmFsc2U7CiAjZW5kaWYKIH0KIApAQCAtNjIzLDcgKzYy
Myw3IEBAIGJvb2wgUGxhdGZvcm1Db250ZXh0U2tpYTo6aXNOYXRpdmVGb250UmUKICNpZiBFTkFC
TEUoU0tJQV9HUFUpCiAgICAgcmV0dXJuIGZhbHNlOwogI2Vsc2UKLSAgICByZXR1cm4gbV9jYW52
YXMtPmdldFRvcFBsYXRmb3JtRGV2aWNlKCkuSXNOYXRpdmVGb250UmVuZGVyaW5nQWxsb3dlZCgp
OworICAgIHJldHVybiBmYWxzZTsKICNlbmRpZgogfQogCkluZGV4OiBXZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL3NraWEvUGxhdGZvcm1Db250ZXh0U2tpYS5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9QbGF0Zm9ybUNvbnRleHRTa2lhLmgJKHJldmlzaW9u
IDgzMDYwKQorKysgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9za2lhL1BsYXRmb3JtQ29udGV4
dFNraWEuaAkod29ya2luZyBjb3B5KQpAQCAtNzIsMTIgKzcyLDEyIEBAIGNsYXNzIFBsYXRmb3Jt
Q29udGV4dFNraWEgewogcHVibGljOgogICAgIC8vIEZvciBwcmludGluZywgdGhlcmUgc2hvdWxk
bid0IGJlIGFueSBjYW52YXMuIGNhbnZhcyBjYW4gYmUgTlVMTC4gSWYgeW91CiAgICAgLy8gc3Vw
cGx5IGEgTlVMTCBjYW52YXMsIHlvdSBjYW4gYWxzbyBjYWxsIHNldENhbnZhcyBsYXRlci4KLSAg
ICBQbGF0Zm9ybUNvbnRleHRTa2lhKHNraWE6OlBsYXRmb3JtQ2FudmFzKik7CisgICAgUGxhdGZv
cm1Db250ZXh0U2tpYShTa0NhbnZhcyopOwogICAgIH5QbGF0Zm9ybUNvbnRleHRTa2lhKCk7CiAK
ICAgICAvLyBTZXRzIHRoZSBjYW52YXMgYXNzb2NpYXRlZCB3aXRoIHRoaXMgY29udGV4dC4gVXNl
IHdoZW4gc3VwcGx5aW5nIE5VTEwKICAgICAvLyB0byB0aGUgY29uc3RydWN0b3IuCi0gICAgdm9p
ZCBzZXRDYW52YXMoc2tpYTo6UGxhdGZvcm1DYW52YXMqKTsKKyAgICB2b2lkIHNldENhbnZhcyhT
a0NhbnZhcyopOwogCiAgICAgLy8gSWYgZmFsc2Ugd2UncmUgcmVuZGVyaW5nIHRvIGEgR3JhcGhp
Y3NDb250ZXh0IGZvciBhIHdlYiBwYWdlLCBpZiBmYWxzZQogICAgIC8vIHdlJ3JlIG5vdCAoYXMg
aXMgdGhlIGNhc2Ugd2hlbiByZW5kZXJpbmcgdG8gYSBjYW52YXMgb2JqZWN0KS4KQEAgLTE0Niw3
ICsxNDYsNyBAQCBwdWJsaWM6CiAgICAgLy8gYnkgdGhlIGN1cnJlbnQgYWxwaGEuCiAgICAgU2tD
b2xvciBlZmZlY3RpdmVTdHJva2VDb2xvcigpIGNvbnN0OwogCi0gICAgc2tpYTo6UGxhdGZvcm1D
YW52YXMqIGNhbnZhcygpIHsgcmV0dXJuIG1fY2FudmFzOyB9CisgICAgU2tDYW52YXMqIGNhbnZh
cygpIHsgcmV0dXJuIG1fY2FudmFzOyB9CiAKICAgICBJbnRlcnBvbGF0aW9uUXVhbGl0eSBpbnRl
cnBvbGF0aW9uUXVhbGl0eSgpIGNvbnN0OwogICAgIHZvaWQgc2V0SW50ZXJwb2xhdGlvblF1YWxp
dHkoSW50ZXJwb2xhdGlvblF1YWxpdHkgaW50ZXJwb2xhdGlvblF1YWxpdHkpOwpAQCAtMTY0LDcg
KzE2NCw3IEBAIHB1YmxpYzoKICAgICAvLyBXYXJuaW5nOiBUaGlzIGZ1bmN0aW9uIGlzIGRlcHJl
Y2F0ZWQgc28gdGhlIHVzZXJzIGFyZSByZW1pbmRlZCB0aGF0IHRoZXkKICAgICAvLyBzaG91bGQg
dXNlIHRoaXMgbGF5ZXIgb2YgaW5kaXJlY3Rpb24gaW5zdGVhZCBvZiB1c2luZyB0aGUgY2FudmFz
CiAgICAgLy8gZGlyZWN0bHkuIFRoaXMgaXMgdG8gaGVscCB3aXRoIHRoZSBldmVudHVhbCBzZXJp
YWxpemF0aW9uLgotICAgIHNraWE6OlBsYXRmb3JtQ2FudmFzKiBjYW52YXMoKSBjb25zdDsKKyAg
ICBTa0NhbnZhcyogY2FudmFzKCkgY29uc3Q7CiAKICAgICAvLyBSZXR1cm5zIGlmIHRoZSBjb250
ZXh0IGlzIGEgcHJpbnRpbmcgY29udGV4dCBpbnN0ZWFkIG9mIGEgZGlzcGxheQogICAgIC8vIGNv
bnRleHQuIEJpdG1hcCBzaG91bGRuJ3QgYmUgcmVzYW1wbGVkIHdoZW4gcHJpbnRpbmcgdG8ga2Vl
cCB0aGUgYmVzdApAQCAtMTkxLDEwICsxOTEsMTAgQEAgcHVibGljOgogICAgIEdMRVMyQ2FudmFz
KiBncHVDYW52YXMoKSBjb25zdCB7IHJldHVybiAwOyB9CiAjZW5kaWYKICAgICAvLyBDYWxsIHRo
ZXNlIGJlZm9yZSBtYWtpbmcgYSBjYWxsIHRoYXQgbWFuaXB1bGF0ZXMgdGhlIHVuZGVybHlpbmcK
LSAgICAvLyBza2lhOjpQbGF0Zm9ybUNhbnZhcyBvciBXZWJDb3JlOjpHTEVTMkNhbnZhcworICAg
IC8vIFNrQ2FudmFzIG9yIFdlYkNvcmU6OkdMRVMyQ2FudmFzCiAgICAgdm9pZCBwcmVwYXJlRm9y
U29mdHdhcmVEcmF3KCkgY29uc3Q7CiAgICAgdm9pZCBwcmVwYXJlRm9ySGFyZHdhcmVEcmF3KCkg
Y29uc3Q7Ci0gICAgLy8gQ2FsbCB0byBmb3JjZSB0aGUgc2tpYTo6UGxhdGZvcm1DYW52YXMgdG8g
Y29udGFpbiBhbGwgcmVuZGVyaW5nIHJlc3VsdHMuCisgICAgLy8gQ2FsbCB0byBmb3JjZSB0aGUg
U2tDYW52YXMgdG8gY29udGFpbiBhbGwgcmVuZGVyaW5nIHJlc3VsdHMuCiAgICAgdm9pZCBzeW5j
U29mdHdhcmVDYW52YXMoKSBjb25zdDsKICAgICB2b2lkIG1hcmtEaXJ0eVJlY3QoY29uc3QgSW50
UmVjdCYgcmVjdCk7CiAKQEAgLTIxMSw3ICsyMTEsNyBAQCBwcml2YXRlOgogICAgIHN0cnVjdCBT
dGF0ZTsKIAogICAgIC8vIE5VTEwgaW5kaWNhdGVzIHBhaW50aW5nIGlzIGRpc2FibGVkLiBOZXZl
ciBkZWxldGUgdGhpcyBvYmplY3QuCi0gICAgc2tpYTo6UGxhdGZvcm1DYW52YXMqIG1fY2FudmFz
OworICAgIFNrQ2FudmFzKiBtX2NhbnZhczsKIAogICAgIC8vIFN0YXRlcyBzdGFjay4gRW5hYmxl
cyBsb2NhbCBkcmF3aW5nIHN0YXRlIGNoYW5nZSB3aXRoIHNhdmUoKS9yZXN0b3JlKCkKICAgICAv
LyBjYWxscy4KSW5kZXg6IFdlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwkocmV2aXNpb24gODMxNDEpCisrKyBXZWJLaXQvY2hy
b21pdW0vQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTQgQEAKKzIwMTEtMDQt
MDYgIEFsb2sgUHJpeWFkYXJzaGkgIDxhbG9rcEBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgUmV2
aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgUmVtb3ZlIGRlcGVuZGVuY3kgb24g
Y2hyb21pdW0gc2tpYTo6UGxhdGZvcm1DYW52YXMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTU3NTYzCisKKyAgICAgICAgKiBwdWJsaWMvV2ViQ2FudmFz
Lmg6CisgICAgICAgICogdGVzdHMvVHJhbnNwYXJlbmN5V2luVGVzdC5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpkcmF3TmF0aXZlUmVjdCk6CisKIDIwMTEtMDQtMDYgIEFzYW5rYSBIZXJhdGggIDxh
c2Fua2FAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFJldmlld2VkIGJ5IERhcmluIEZpc2hlci4K
SW5kZXg6IFdlYktpdC9jaHJvbWl1bS9wdWJsaWMvV2ViQ2FudmFzLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJDYW52YXMuaAkocmV2aXNpb24gODMwNjApCisrKyBX
ZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYkNhbnZhcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNCw3
ICszNCw3IEBACiAjaW5jbHVkZSAiV2ViQ29tbW9uLmgiCiAKICNpZiBXRUJLSVRfVVNJTkdfU0tJ
QQotbmFtZXNwYWNlIHNraWEgeyBjbGFzcyBQbGF0Zm9ybUNhbnZhczsgfQorY2xhc3MgU2tDYW52
YXM7CiAjZWxpZiBXRUJLSVRfVVNJTkdfQ0cKIHN0cnVjdCBDR0NvbnRleHQ7CiAjZW5kaWYKQEAg
LTQyLDcgKzQyLDcgQEAgc3RydWN0IENHQ29udGV4dDsKIG5hbWVzcGFjZSBXZWJLaXQgewogCiAj
aWYgV0VCS0lUX1VTSU5HX1NLSUEKLXR5cGVkZWYgc2tpYTo6UGxhdGZvcm1DYW52YXMgV2ViQ2Fu
dmFzOwordHlwZWRlZiBTa0NhbnZhcyBXZWJDYW52YXM7CiAjZWxpZiBXRUJLSVRfVVNJTkdfQ0cK
IHR5cGVkZWYgc3RydWN0IENHQ29udGV4dCBXZWJDYW52YXM7CiAjZWxzZQpJbmRleDogV2ViS2l0
L2Nocm9taXVtL3Rlc3RzL1RyYW5zcGFyZW5jeVdpblRlc3QuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YktpdC9jaHJvbWl1bS90ZXN0cy9UcmFuc3BhcmVuY3lXaW5UZXN0LmNwcAkocmV2aXNpb24gODMw
NjApCisrKyBXZWJLaXQvY2hyb21pdW0vdGVzdHMvVHJhbnNwYXJlbmN5V2luVGVzdC5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTUwLDcgKzUwLDcgQEAgc3RhdGljIEZsb2F0UmVjdCBSRUNUVG9GbG9h
dFJlY3QoY29uc3QgUgogc3RhdGljIHZvaWQgZHJhd05hdGl2ZVJlY3QoR3JhcGhpY3NDb250ZXh0
KiBjb250ZXh0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHgsIGludCB5LCBpbnQg
dywgaW50IGgpCiB7Ci0gICAgc2tpYTo6UGxhdGZvcm1DYW52YXMqIGNhbnZhcyA9IGNvbnRleHQt
PnBsYXRmb3JtQ29udGV4dCgpLT5jYW52YXMoKTsKKyAgICBTa0NhbnZhcyogY2FudmFzID0gY29u
dGV4dC0+cGxhdGZvcm1Db250ZXh0KCktPmNhbnZhcygpOwogICAgIEhEQyBkYyA9IGNhbnZhcy0+
YmVnaW5QbGF0Zm9ybVBhaW50KCk7CiAKICAgICBSRUNUIGlubmVyUmM7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>89020</attachid>
            <date>2011-04-11 09:56:50 -0700</date>
            <delta_ts>2011-04-11 13:20:57 -0700</delta_ts>
            <desc>proposed patch</desc>
            <filename>skia.txt</filename>
            <type>text/plain</type>
            <size>21789</size>
            <attacher name="Alok Priyadarshi">alokp</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDgzNDQ2KQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsNDMgQEAKKzIwMTEtMDQtMTEgIEFsb2sgUHJp
eWFkYXJzaGkgIDxhbG9rcEBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9C
T0RZIChPT1BTISkuCisKKyAgICAgICAgUmVtb3ZlIGRlcGVuZGVuY3kgb24gY2hyb21pdW0gc2tp
YTo6UGxhdGZvcm1DYW52YXMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTU3NTYzCisKKyAgICAgICAgVGhpcyBwYXRjaCBkb2VzIG5vdCBjaGFuZ2UgYW55
IGZ1bmN0aW9uYWxpdHksIGp1c3QgdGhlIHR5cGUgb2Ygb2JqZWN0IHNraWE6OlBsYXRmb3JtQ2Fu
dmFzIC0+IFNrQ2FudmFzLgorICAgICAgICBUaGUgb2JqZWN0IGlzIHN0aWxsIGJlaW5nIGNyZWF0
ZWQgYnkgYSBmYWN0b3J5IG1ldGhvZCBza2lhOjpDcmVhdGVCaXRtYXBDYW52YXMgZGVmaW5lZCBp
biBDaHJvbWl1bS4KKyAgICAgICAgV2Ugd2lsbCBldmVudHVhbGx5IGRlZmluZSBhbiBBUEkgdGhh
dCBldmVyeSBwb3J0IHVzaW5nIHNraWEgd2lsbCBkZWZpbmUuCisKKyAgICAgICAgTGF5b3V0IHRl
c3RzIHNob3VsZCBiZSBhYmxlIHRvIGNhdGNoIGFueSByZWdyZXNzaW9ucy4KKworICAgICAgICAq
IHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0ZvbnRDaHJvbWl1bVdpbi5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpUcmFuc3BhcmVuY3lBd2FyZUZvbnRQYWludGVyOjpUcmFuc3BhcmVuY3lBd2Fy
ZUZvbnRQYWludGVyOjppbml0aWFsaXplRm9yR0RJKToKKyAgICAgICAgKFdlYkNvcmU6OlRyYW5z
cGFyZW5jeUF3YXJlRm9udFBhaW50ZXI6OlRyYW5zcGFyZW5jeUF3YXJlRm9udFBhaW50ZXI6On5U
cmFuc3BhcmVuY3lBd2FyZUZvbnRQYWludGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkZvbnQ6OmRy
YXdDb21wbGV4VGV4dCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vSW1h
Z2VCdWZmZXJEYXRhLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5
ZXJDaHJvbWl1bS5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVy
UmVuZGVyZXJDaHJvbWl1bS5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L1BsYXRmb3JtQ2FudmFzLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlBsYXRmb3JtQ2FudmFzOjpy
ZXNpemUpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1BsYXRmb3JtQ2Fu
dmFzLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vVHJhbnNwYXJlbmN5
V2luLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlRyYW5zcGFyZW5jeVdpbjo6Y29tcG9zaXRlVGV4
dENvbXBvc2l0ZSk6CisgICAgICAgIChXZWJDb3JlOjpUcmFuc3BhcmVuY3lXaW46Om1ha2VMYXll
ck9wYXF1ZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9JbWFnZUJ1ZmZlclNr
aWEuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2VCdWZmZXI6OkltYWdlQnVmZmVyKToKKyAg
ICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9za2lhL0ltYWdlU2tpYS5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpwYWludFNrQml0bWFwKToKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlOjpkcmF3UGF0
dGVybik6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9QbGF0Zm9ybUNvbnRleHRT
a2lhLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlBsYXRmb3JtQ29udGV4dFNraWE6OlBsYXRmb3Jt
Q29udGV4dFNraWEpOgorICAgICAgICAoV2ViQ29yZTo6UGxhdGZvcm1Db250ZXh0U2tpYTo6c2V0
Q2FudmFzKToKKyAgICAgICAgKFdlYkNvcmU6OlBsYXRmb3JtQ29udGV4dFNraWE6OmlzTmF0aXZl
Rm9udFJlbmRlcmluZ0FsbG93ZWQpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3NraWEv
UGxhdGZvcm1Db250ZXh0U2tpYS5oOgorICAgICAgICAoV2ViQ29yZTo6UGxhdGZvcm1Db250ZXh0
U2tpYTo6Y2FudmFzKToKKyAgICAgICAgKFdlYkNvcmU6OlBsYXRmb3JtQ29udGV4dFNraWE6OnBy
aW50aW5nKToKKyAgICAgICAgKFdlYkNvcmU6OlBsYXRmb3JtQ29udGV4dFNraWE6OnNldFByaW50
aW5nKToKKwogMjAxMS0wNC0xMSAgU2VyZ2lvIFZpbGxhciBTZW5pbiAgPHN2aWxsYXJAaWdhbGlh
LmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBieSBNYXJ0aW4gUm9iaW5zb24uCkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9Gb250Q2hyb21pdW1XaW4uY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L0ZvbnRDaHJvbWl1bVdpbi5jcHAJKHJldmlzaW9uIDgzNDQ2KQorKysgU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vRm9udENocm9taXVtV2luLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMTY1LDcgKzE2NSw3IEBAIHZvaWQgVHJhbnNwYXJlbmN5QXdhcmVGb250UGFpbnRl
cjo6aW5pdGkKIAogICAgIC8vIFNldCB1cCB0aGUgREMsIHVzaW5nIHRoZSBvbmUgZnJvbSB0aGUg
dHJhbnNwYXJlbmN5IGhlbHBlci4KICAgICBpZiAobV90cmFuc3BhcmVuY3kucGxhdGZvcm1Db250
ZXh0KCkpIHsKLSAgICAgICAgbV9oZGMgPSBtX3RyYW5zcGFyZW5jeS5wbGF0Zm9ybUNvbnRleHQo
KS0+Y2FudmFzKCktPmJlZ2luUGxhdGZvcm1QYWludCgpOworICAgICAgICBtX2hkYyA9IHNraWE6
OkJlZ2luUGxhdGZvcm1QYWludChtX3RyYW5zcGFyZW5jeS5wbGF0Zm9ybUNvbnRleHQoKS0+Y2Fu
dmFzKCkpOwogICAgICAgICBTZXRUZXh0Q29sb3IobV9oZGMsIHNraWE6OlNrQ29sb3JUb0NPTE9S
UkVGKGNvbG9yKSk7CiAgICAgICAgIFNldEJrTW9kZShtX2hkYywgVFJBTlNQQVJFTlQpOwogICAg
IH0KQEAgLTE3OSw3ICsxNzksNyBAQCBUcmFuc3BhcmVuY3lBd2FyZUZvbnRQYWludGVyOjp+VHJh
bnNwYXJlCiAgICAgaWYgKG1fY3JlYXRlZFRyYW5zcGFyZW5jeUxheWVyKQogICAgICAgICBtX2dy
YXBoaWNzQ29udGV4dC0+ZW5kVHJhbnNwYXJlbmN5TGF5ZXIoKTsKICAgICBtX2dyYXBoaWNzQ29u
dGV4dC0+cmVzdG9yZSgpOwotICAgIG1fcGxhdGZvcm1Db250ZXh0LT5jYW52YXMoKS0+ZW5kUGxh
dGZvcm1QYWludCgpOworICAgIHNraWE6OkVuZFBsYXRmb3JtUGFpbnQobV9wbGF0Zm9ybUNvbnRl
eHQtPmNhbnZhcygpKTsKIH0KIAogLy8gU3BlY2lhbGl6YXRpb24gZm9yIHNpbXBsZSBHbHlwaEJ1
ZmZlciBwYWludGluZy4KQEAgLTUxNiw3ICs1MTYsNyBAQCB2b2lkIEZvbnQ6OmRyYXdDb21wbGV4
VGV4dChHcmFwaGljc0NvbnRlCiAgICAgLy8gdGhlIGJhc2VsaW5lLCBzbyB3ZSBoYXZlIHRvIHN1
YnRyYWN0IG9mZiB0aGUgYXNjZW50LgogICAgIHN0YXRlLmRyYXcoZ3JhcGhpY3NDb250ZXh0LCBo
ZGMsIGxyb3VuZGYocG9pbnQueCgpKSwgbHJvdW5kZihwb2ludC55KCkgLSBmb250TWV0cmljcygp
LmFzY2VudCgpKSwgZnJvbSwgdG8pOwogCi0gICAgY29udGV4dC0+Y2FudmFzKCktPmVuZFBsYXRm
b3JtUGFpbnQoKTsKKyAgICBza2lhOjpFbmRQbGF0Zm9ybVBhaW50KGNvbnRleHQtPmNhbnZhcygp
KTsKIH0KIAogdm9pZCBGb250OjpkcmF3RW1waGFzaXNNYXJrc0ZvckNvbXBsZXhUZXh0KEdyYXBo
aWNzQ29udGV4dCogLyogY29udGV4dCAqLywgY29uc3QgVGV4dFJ1biYgLyogcnVuICovLCBjb25z
dCBBdG9taWNTdHJpbmcmIC8qIG1hcmsgKi8sIGNvbnN0IEZsb2F0UG9pbnQmIC8qIHBvaW50ICov
LCBpbnQgLyogZnJvbSAqLywgaW50IC8qIHRvICovKSBjb25zdApJbmRleDogU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vSW1hZ2VCdWZmZXJEYXRhLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vSW1hZ2VCdWZm
ZXJEYXRhLmgJKHJldmlzaW9uIDgzNDQ2KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vSW1hZ2VCdWZmZXJEYXRhLmgJKHdvcmtpbmcgY29weSkKQEAgLTMzLDE1
ICszMywxMyBAQAogCiAjaW5jbHVkZSAiUGxhdGZvcm1Db250ZXh0U2tpYS5oIgogCi0jaW5jbHVk
ZSAic2tpYS9leHQvcGxhdGZvcm1fY2FudmFzLmgiCi0KIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAog
Y2xhc3MgSW1hZ2VCdWZmZXJEYXRhIHsKIHB1YmxpYzoKICAgICBJbWFnZUJ1ZmZlckRhdGEoY29u
c3QgSW50U2l6ZSYpOwogCi0gICAgc2tpYTo6UGxhdGZvcm1DYW52YXMgbV9jYW52YXM7CisgICAg
T3duUHRyPFNrQ2FudmFzPiBtX2NhbnZhczsKICAgICBQbGF0Zm9ybUNvbnRleHRTa2lhIG1fcGxh
dGZvcm1Db250ZXh0OwogfTsKIApJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vTGF5ZXJDaHJvbWl1bS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyQ2hyb21pdW0uaAkocmV2aXNpb24gODM0
NDYpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllckNo
cm9taXVtLmgJKHdvcmtpbmcgY29weSkKQEAgLTUwLDExICs1MCw2IEBACiAjaW5jbHVkZSA8d3Rm
L3RleHQvU3RyaW5nSGFzaC5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgogCi0K
LW5hbWVzcGFjZSBza2lhIHsKLWNsYXNzIFBsYXRmb3JtQ2FudmFzOwotfQotCiBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiAKIGNsYXNzIENDTGF5ZXJJbXBsOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJSZW5kZXJlckNocm9taXVtLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJSZW5k
ZXJlckNocm9taXVtLmgJKHJldmlzaW9uIDgzNDQ2KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJSZW5kZXJlckNocm9taXVtLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTE5MCw3ICsxOTAsNyBAQCBwcml2YXRlOgogICAgIGJvb2wgbV9jb21wb3NpdGVPZmZz
Y3JlZW47CiAKICNpZiBVU0UoU0tJQSkKLSAgICBPd25QdHI8c2tpYTo6UGxhdGZvcm1DYW52YXM+
IG1fcm9vdExheWVyQ2FudmFzOworICAgIE93blB0cjxTa0NhbnZhcz4gbV9yb290TGF5ZXJDYW52
YXM7CiAgICAgT3duUHRyPFBsYXRmb3JtQ29udGV4dFNraWE+IG1fcm9vdExheWVyU2tpYUNvbnRl
eHQ7CiAgICAgT3duUHRyPEdyYXBoaWNzQ29udGV4dD4gbV9yb290TGF5ZXJHcmFwaGljc0NvbnRl
eHQ7CiAjZWxpZiBQTEFURk9STShDRykKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL1BsYXRmb3JtQ2FudmFzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9QbGF0Zm9ybUNhbnZhcy5jcHAJKHJl
dmlzaW9uIDgzNDQ2KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vUGxhdGZvcm1DYW52YXMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01Miw3ICs1Miw3IEBAIHZv
aWQgUGxhdGZvcm1DYW52YXM6OnJlc2l6ZShjb25zdCBJbnRTaXoKIHsKICAgICBtX3NpemUgPSBz
aXplOwogI2lmIFVTRShTS0lBKQotICAgIG1fc2tpYUNhbnZhcyA9IG5ldyBza2lhOjpQbGF0Zm9y
bUNhbnZhcyhzaXplLndpZHRoKCksIHNpemUuaGVpZ2h0KCksIGZhbHNlKTsKKyAgICBtX3NraWFD
YW52YXMgPSBza2lhOjpDcmVhdGVCaXRtYXBDYW52YXMoc2l6ZS53aWR0aCgpLCBzaXplLmhlaWdo
dCgpLCBmYWxzZSk7CiAjZWxpZiBQTEFURk9STShDRykKICAgICBzaXplX3QgYnVmZmVyU2l6ZSA9
IHNpemUud2lkdGgoKSAqIHNpemUuaGVpZ2h0KCkgKiA0OwogICAgIG1fcGl4ZWxEYXRhID0gYWRv
cHRBcnJheVB0cihuZXcgdWludDhfdFtidWZmZXJTaXplXSk7CkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9QbGF0Zm9ybUNhbnZhcy5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1BsYXRmb3JtQ2Fu
dmFzLmgJKHJldmlzaW9uIDgzNDQ2KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vUGxhdGZvcm1DYW52YXMuaAkod29ya2luZyBjb3B5KQpAQCAtMzksOCArMzks
OCBAQAogI2VuZGlmCiAKICNpZiBVU0UoU0tJQSkKLW5hbWVzcGFjZSBza2lhIHsgY2xhc3MgUGxh
dGZvcm1DYW52YXM7IH0KIGNsYXNzIFNrQml0bWFwOworY2xhc3MgU2tDYW52YXM7CiAjZW5kaWYK
IAogbmFtZXNwYWNlIFdlYkNvcmUgewpAQCAtOTcsNyArOTcsNyBAQCBwdWJsaWM6CiAKIHByaXZh
dGU6CiAjaWYgVVNFKFNLSUEpCi0gICAgT3duUHRyPHNraWE6OlBsYXRmb3JtQ2FudmFzPiBtX3Nr
aWFDYW52YXM7CisgICAgT3duUHRyPFNrQ2FudmFzPiBtX3NraWFDYW52YXM7CiAjZWxpZiBQTEFU
Rk9STShDRykKICAgICBPd25BcnJheVB0cjx1aW50OF90PiBtX3BpeGVsRGF0YTsKICNlbmRpZgpJ
bmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vVHJhbnNwYXJl
bmN5V2luLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9UcmFuc3BhcmVuY3lXaW4uY3BwCShyZXZpc2lvbiA4MzQ0NikKKysrIFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1RyYW5zcGFyZW5jeVdpbi5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTQ5LDE0ICs0OSwxNCBAQCBuYW1lc3BhY2UgewogLy8gaW50by4g
QnVmZmVycyBsYXJnZXIgdGhhbiB0aGlzIHdpbGwgYmUgZGVzdHJveWVkIHdoZW4gd2UncmUgZG9u
ZSB3aXRoIHRoZW0uCiBjb25zdCBpbnQgbWF4Q2FjaGVkQnVmZmVyUGl4ZWxTaXplID0gNjU1MzY7
CiAKLWlubGluZSBza2lhOjpQbGF0Zm9ybUNhbnZhcyogY2FudmFzRm9yQ29udGV4dChjb25zdCBH
cmFwaGljc0NvbnRleHQmIGNvbnRleHQpCitpbmxpbmUgU2tDYW52YXMqIGNhbnZhc0ZvckNvbnRl
eHQoY29uc3QgR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KQogewogICAgIHJldHVybiBjb250ZXh0
LnBsYXRmb3JtQ29udGV4dCgpLT5jYW52YXMoKTsKIH0KIAogaW5saW5lIGNvbnN0IFNrQml0bWFw
JiBiaXRtYXBGb3JDb250ZXh0KGNvbnN0IEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCkKIHsKLSAg
ICByZXR1cm4gY2FudmFzRm9yQ29udGV4dChjb250ZXh0KS0+Z2V0VG9wUGxhdGZvcm1EZXZpY2Uo
KS5hY2Nlc3NCaXRtYXAoZmFsc2UpOworICAgIHJldHVybiBjYW52YXNGb3JDb250ZXh0KGNvbnRl
eHQpLT5nZXRUb3BEZXZpY2UoKS0+YWNjZXNzQml0bWFwKGZhbHNlKTsKIH0KIAogdm9pZCBjb21w
b3NpdGVUb0NvcHkoY29uc3QgR3JhcGhpY3NDb250ZXh0JiBzb3VyY2VMYXllcnMsCkBAIC00NjYs
NyArNDY2LDcgQEAgdm9pZCBUcmFuc3BhcmVuY3lXaW46OmNvbXBvc2l0ZVRleHRDb21wbwogICAg
IGlmICghbV92YWxpZExheWVyKQogICAgICAgICByZXR1cm47CiAKLSAgICBjb25zdCBTa0JpdG1h
cCYgYml0bWFwID0gbV9sYXllckJ1ZmZlci0+Y29udGV4dCgpLT5wbGF0Zm9ybUNvbnRleHQoKS0+
Y2FudmFzKCktPmdldFRvcFBsYXRmb3JtRGV2aWNlKCkuYWNjZXNzQml0bWFwKHRydWUpOworICAg
IGNvbnN0IFNrQml0bWFwJiBiaXRtYXAgPSBtX2xheWVyQnVmZmVyLT5jb250ZXh0KCktPnBsYXRm
b3JtQ29udGV4dCgpLT5jYW52YXMoKS0+Z2V0VG9wRGV2aWNlKCktPmFjY2Vzc0JpdG1hcCh0cnVl
KTsKICAgICBTa0NvbG9yIHRleHRDb2xvciA9IG1fdGV4dENvbXBvc2l0ZUNvbG9yLnJnYigpOwog
ICAgIGZvciAoaW50IHkgPSAwOyB5IDwgbV9sYXllclNpemUuaGVpZ2h0KCk7IHkrKykgewogICAg
ICAgICB1aW50MzJfdCogcm93ID0gYml0bWFwLmdldEFkZHIzMigwLCB5KTsKQEAgLTUwMiw3ICs1
MDIsNyBAQCB2b2lkIFRyYW5zcGFyZW5jeVdpbjo6bWFrZUxheWVyT3BhcXVlKCkKICAgICAgICAg
cmV0dXJuOwogCiAgICAgU2tCaXRtYXAmIGJpdG1hcCA9IGNvbnN0X2Nhc3Q8U2tCaXRtYXAmPiht
X2RyYXdDb250ZXh0LT5wbGF0Zm9ybUNvbnRleHQoKS0+Ci0gICAgICAgIGNhbnZhcygpLT5nZXRU
b3BQbGF0Zm9ybURldmljZSgpLmFjY2Vzc0JpdG1hcCh0cnVlKSk7CisgICAgICAgIGNhbnZhcygp
LT5nZXRUb3BEZXZpY2UoKS0+YWNjZXNzQml0bWFwKHRydWUpKTsKICAgICBmb3IgKGludCB5ID0g
MDsgeSA8IG1fbGF5ZXJTaXplLmhlaWdodCgpOyB5KyspIHsKICAgICAgICAgdWludDMyX3QqIHJv
dyA9IGJpdG1hcC5nZXRBZGRyMzIoMCwgeSk7CiAgICAgICAgIGZvciAoaW50IHggPSAwOyB4IDwg
bV9sYXllclNpemUud2lkdGgoKTsgeCsrKQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3Mvc2tpYS9JbWFnZUJ1ZmZlclNraWEuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3NraWEvSW1hZ2VCdWZmZXJTa2lhLmNwcAkocmV2aXNp
b24gODM0NDYpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9za2lhL0ltYWdl
QnVmZmVyU2tpYS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY2LDE5ICs2NiwyMSBAQCBJbWFnZUJ1
ZmZlcjo6SW1hZ2VCdWZmZXIoY29uc3QgSW50U2l6ZSYKICAgICA6IG1fZGF0YShzaXplKQogICAg
ICwgbV9zaXplKHNpemUpCiB7Ci0gICAgaWYgKCFtX2RhdGEubV9jYW52YXMuaW5pdGlhbGl6ZShz
aXplLndpZHRoKCksIHNpemUuaGVpZ2h0KCksIGZhbHNlKSkgeworICAgIFNrQ2FudmFzKiBjYW52
YXMgPSBza2lhOjpDcmVhdGVCaXRtYXBDYW52YXMoc2l6ZS53aWR0aCgpLCBzaXplLmhlaWdodCgp
LCBmYWxzZSk7CisgICAgaWYgKCFjYW52YXMpIHsKICAgICAgICAgc3VjY2VzcyA9IGZhbHNlOwog
ICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgbV9kYXRhLm1fcGxhdGZvcm1Db250ZXh0LnNl
dENhbnZhcygmbV9kYXRhLm1fY2FudmFzKTsKKyAgICBtX2RhdGEubV9jYW52YXMgPSBjYW52YXM7
CisgICAgbV9kYXRhLm1fcGxhdGZvcm1Db250ZXh0LnNldENhbnZhcyhtX2RhdGEubV9jYW52YXMu
Z2V0KCkpOwogICAgIG1fY29udGV4dC5zZXQobmV3IEdyYXBoaWNzQ29udGV4dCgmbV9kYXRhLm1f
cGxhdGZvcm1Db250ZXh0KSk7CiAgICAgbV9jb250ZXh0LT5wbGF0Zm9ybUNvbnRleHQoKS0+c2V0
RHJhd2luZ1RvSW1hZ2VCdWZmZXIodHJ1ZSk7CiAKICAgICAvLyBNYWtlIHRoZSBiYWNrZ3JvdW5k
IHRyYW5zcGFyZW50LiBJdCB3b3VsZCBiZSBuaWNlIGlmIHRoaXMgd2Fzbid0CiAgICAgLy8gcmVx
dWlyZWQsIGJ1dCB0aGUgY2FudmFzIGlzIGN1cnJlbnRseSBmaWxsZWQgd2l0aCB0aGUgbWFnaWMg
dHJhbnNwYXJlbmN5CiAgICAgLy8gY29sb3IuIENhbiB3ZSBoYXZlIGFub3RoZXIgd2F5IHRvIG1h
bmFnZSB0aGlzPwotICAgIG1fZGF0YS5tX2NhbnZhcy5kcmF3QVJHQigwLCAwLCAwLCAwLCBTa1hm
ZXJtb2RlOjprQ2xlYXJfTW9kZSk7CisgICAgbV9kYXRhLm1fY2FudmFzLT5kcmF3QVJHQigwLCAw
LCAwLCAwLCBTa1hmZXJtb2RlOjprQ2xlYXJfTW9kZSk7CiAgICAgc3VjY2VzcyA9IHRydWU7CiB9
CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3NraWEvSW1hZ2VTa2lh
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9za2lh
L0ltYWdlU2tpYS5jcHAJKHJldmlzaW9uIDgzNDQ2KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3Mvc2tpYS9JbWFnZVNraWEuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNjIsMTIg
KzI2MiwxNyBAQCBzdGF0aWMgdm9pZCBwYWludFNrQml0bWFwKFBsYXRmb3JtQ29udGV4CiAgICAg
cGFpbnQuc2V0QWxwaGEocGxhdGZvcm1Db250ZXh0LT5nZXROb3JtYWxpemVkQWxwaGEoKSk7CiAg
ICAgcGFpbnQuc2V0TG9vcGVyKHBsYXRmb3JtQ29udGV4dC0+Z2V0RHJhd0xvb3BlcigpKTsKIAot
ICAgIHNraWE6OlBsYXRmb3JtQ2FudmFzKiBjYW52YXMgPSBwbGF0Zm9ybUNvbnRleHQtPmNhbnZh
cygpOworICAgIFNrQ2FudmFzKiBjYW52YXMgPSBwbGF0Zm9ybUNvbnRleHQtPmNhbnZhcygpOwog
Ci0gICAgUmVzYW1wbGluZ01vZGUgcmVzYW1wbGluZyA9IHBsYXRmb3JtQ29udGV4dC0+aXNQcmlu
dGluZygpID8gUkVTQU1QTEVfTk9ORSA6CisgICAgUmVzYW1wbGluZ01vZGUgcmVzYW1wbGluZzsK
KyNpZiBFTkFCTEUoU0tJQV9HUFUpCisgICAgcmVzYW1wbGluZyA9IFJFU0FNUExFX05PTkU7Cisj
ZWxzZQorICAgIHJlc2FtcGxpbmcgPSBwbGF0Zm9ybUNvbnRleHQtPnByaW50aW5nKCkgPyBSRVNB
TVBMRV9OT05FIDoKICAgICAgICAgY29tcHV0ZVJlc2FtcGxpbmdNb2RlKHBsYXRmb3JtQ29udGV4
dCwgYml0bWFwLCBzcmNSZWN0LndpZHRoKCksIHNyY1JlY3QuaGVpZ2h0KCksCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBTa1NjYWxhclRvRmxvYXQoZGVzdFJlY3Qud2lkdGgoKSksCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTa1NjYWxhclRvRmxvYXQoZGVzdFJlY3QuaGVp
Z2h0KCkpKTsKKyNlbmRpZgogICAgIGlmIChyZXNhbXBsaW5nID09IFJFU0FNUExFX0FXRVNPTUUp
IHsKICAgICAgICAgZHJhd1Jlc2FtcGxlZEJpdG1hcCgqY2FudmFzLCBwYWludCwgYml0bWFwLCBz
cmNSZWN0LCBkZXN0UmVjdCk7CiAgICAgfSBlbHNlIHsKQEAgLTM2MywxMyArMzY4LDE3IEBAIHZv
aWQgSW1hZ2U6OmRyYXdQYXR0ZXJuKEdyYXBoaWNzQ29udGV4dCoKIAogICAgIC8vIENvbXB1dGUg
dGhlIHJlc2FtcGxpbmcgbW9kZS4KICAgICBSZXNhbXBsaW5nTW9kZSByZXNhbXBsaW5nOwotICAg
IGlmIChjb250ZXh0LT5wbGF0Zm9ybUNvbnRleHQoKS0+aXNQcmludGluZygpKQorI2lmIEVOQUJM
RShTS0lBX0dQVSkKKyAgICByZXNhbXBsaW5nID0gUkVTQU1QTEVfTElORUFSOworI2Vsc2UKKyAg
ICBpZiAoY29udGV4dC0+cGxhdGZvcm1Db250ZXh0KCktPnByaW50aW5nKCkpCiAgICAgICByZXNh
bXBsaW5nID0gUkVTQU1QTEVfTElORUFSOwogICAgIGVsc2UgewogICAgICAgcmVzYW1wbGluZyA9
IGNvbXB1dGVSZXNhbXBsaW5nTW9kZShjb250ZXh0LT5wbGF0Zm9ybUNvbnRleHQoKSwgKmJpdG1h
cCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3JjUmVjdC53aWR0
aCgpLCBzcmNSZWN0LmhlaWdodCgpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBkZXN0Qml0bWFwV2lkdGgsIGRlc3RCaXRtYXBIZWlnaHQpOwogICAgIH0KKyNlbmRp
ZgogCiAgICAgLy8gTG9hZCB0aGUgdHJhbnNmb3JtIFdlYktpdCByZXF1ZXN0ZWQuCiAgICAgU2tN
YXRyaXggbWF0cml4KHBhdHRlcm5UcmFuc2Zvcm0pOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3Mvc2tpYS9QbGF0Zm9ybUNvbnRleHRTa2lhLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9za2lhL1BsYXRmb3JtQ29udGV4dFNr
aWEuY3BwCShyZXZpc2lvbiA4MzQ0NikKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL3NraWEvUGxhdGZvcm1Db250ZXh0U2tpYS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIxMyw4
ICsyMTMsOSBAQCBTa0NvbG9yIFBsYXRmb3JtQ29udGV4dFNraWE6OlN0YXRlOjphcHBsCiAvLyBQ
bGF0Zm9ybUNvbnRleHRTa2lhIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLQogCiAvLyBEYW5nZXI6IGNhbnZhcyBjYW4gYmUgTlVMTC4KLVBs
YXRmb3JtQ29udGV4dFNraWE6OlBsYXRmb3JtQ29udGV4dFNraWEoc2tpYTo6UGxhdGZvcm1DYW52
YXMqIGNhbnZhcykKK1BsYXRmb3JtQ29udGV4dFNraWE6OlBsYXRmb3JtQ29udGV4dFNraWEoU2tD
YW52YXMqIGNhbnZhcykKICAgICA6IG1fY2FudmFzKGNhbnZhcykKKyAgICAsIG1fcHJpbnRpbmco
ZmFsc2UpCiAgICAgLCBtX2RyYXdpbmdUb0ltYWdlQnVmZmVyKGZhbHNlKQogICAgICwgbV91c2VH
UFUoZmFsc2UpCiAjaWYgRU5BQkxFKEFDQ0VMRVJBVEVEXzJEX0NBTlZBUykKQEAgLTI0MCw3ICsy
NDEsNyBAQCBQbGF0Zm9ybUNvbnRleHRTa2lhOjp+UGxhdGZvcm1Db250ZXh0U2tpCiAjZW5kaWYK
IH0KIAotdm9pZCBQbGF0Zm9ybUNvbnRleHRTa2lhOjpzZXRDYW52YXMoc2tpYTo6UGxhdGZvcm1D
YW52YXMqIGNhbnZhcykKK3ZvaWQgUGxhdGZvcm1Db250ZXh0U2tpYTo6c2V0Q2FudmFzKFNrQ2Fu
dmFzKiBjYW52YXMpCiB7CiAgICAgbV9jYW52YXMgPSBjYW52YXM7CiB9CkBAIC02MDksMjEgKzYx
MCwxMiBAQCBjb25zdCBTa0JpdG1hcCogUGxhdGZvcm1Db250ZXh0U2tpYTo6Yml0CiAgICAgcmV0
dXJuICZtX2NhbnZhcy0+Z2V0RGV2aWNlKCktPmFjY2Vzc0JpdG1hcChmYWxzZSk7CiB9CiAKLWJv
b2wgUGxhdGZvcm1Db250ZXh0U2tpYTo6aXNQcmludGluZygpCi17Ci0jaWYgRU5BQkxFKFNLSUFf
R1BVKQotICAgIHJldHVybiB0cnVlOwotI2Vsc2UKLSAgICByZXR1cm4gbV9jYW52YXMtPmdldFRv
cFBsYXRmb3JtRGV2aWNlKCkuSXNWZWN0b3JpYWwoKTsKLSNlbmRpZgotfQotCiBib29sIFBsYXRm
b3JtQ29udGV4dFNraWE6OmlzTmF0aXZlRm9udFJlbmRlcmluZ0FsbG93ZWQoKQogewogI2lmIEVO
QUJMRShTS0lBX0dQVSkKICAgICByZXR1cm4gZmFsc2U7CiAjZWxzZQotICAgIHJldHVybiBtX2Nh
bnZhcy0+Z2V0VG9wUGxhdGZvcm1EZXZpY2UoKS5Jc05hdGl2ZUZvbnRSZW5kZXJpbmdBbGxvd2Vk
KCk7CisgICAgcmV0dXJuIHNraWE6OlN1cHBvcnRzUGxhdGZvcm1QYWludChtX2NhbnZhcyk7CiAj
ZW5kaWYKIH0KIApJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9Q
bGF0Zm9ybUNvbnRleHRTa2lhLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3Mvc2tpYS9QbGF0Zm9ybUNvbnRleHRTa2lhLmgJKHJldmlzaW9uIDgzNDQ2KQor
KysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9QbGF0Zm9ybUNvbnRleHRT
a2lhLmgJKHdvcmtpbmcgY29weSkKQEAgLTcyLDEyICs3MiwxMiBAQCBjbGFzcyBQbGF0Zm9ybUNv
bnRleHRTa2lhIHsKIHB1YmxpYzoKICAgICAvLyBGb3IgcHJpbnRpbmcsIHRoZXJlIHNob3VsZG4n
dCBiZSBhbnkgY2FudmFzLiBjYW52YXMgY2FuIGJlIE5VTEwuIElmIHlvdQogICAgIC8vIHN1cHBs
eSBhIE5VTEwgY2FudmFzLCB5b3UgY2FuIGFsc28gY2FsbCBzZXRDYW52YXMgbGF0ZXIuCi0gICAg
UGxhdGZvcm1Db250ZXh0U2tpYShza2lhOjpQbGF0Zm9ybUNhbnZhcyopOworICAgIFBsYXRmb3Jt
Q29udGV4dFNraWEoU2tDYW52YXMqKTsKICAgICB+UGxhdGZvcm1Db250ZXh0U2tpYSgpOwogCiAg
ICAgLy8gU2V0cyB0aGUgY2FudmFzIGFzc29jaWF0ZWQgd2l0aCB0aGlzIGNvbnRleHQuIFVzZSB3
aGVuIHN1cHBseWluZyBOVUxMCiAgICAgLy8gdG8gdGhlIGNvbnN0cnVjdG9yLgotICAgIHZvaWQg
c2V0Q2FudmFzKHNraWE6OlBsYXRmb3JtQ2FudmFzKik7CisgICAgdm9pZCBzZXRDYW52YXMoU2tD
YW52YXMqKTsKIAogICAgIC8vIElmIGZhbHNlIHdlJ3JlIHJlbmRlcmluZyB0byBhIEdyYXBoaWNz
Q29udGV4dCBmb3IgYSB3ZWIgcGFnZSwgaWYgZmFsc2UKICAgICAvLyB3ZSdyZSBub3QgKGFzIGlz
IHRoZSBjYXNlIHdoZW4gcmVuZGVyaW5nIHRvIGEgY2FudmFzIG9iamVjdCkuCkBAIC0xNDcsNyAr
MTQ3LDcgQEAgcHVibGljOgogICAgIFNrQ29sb3IgZWZmZWN0aXZlU3Ryb2tlQ29sb3IoKSBjb25z
dDsKIAogICAgIC8vIFJldHVybnMgdGhlIGNhbnZhcyB1c2VkIGZvciBwYWludGluZywgTk9UIGd1
YXJhbnRlZWQgdG8gYmUgbm9uLW51bGwuCi0gICAgc2tpYTo6UGxhdGZvcm1DYW52YXMqIGNhbnZh
cygpIHsgcmV0dXJuIG1fY2FudmFzOyB9CisgICAgU2tDYW52YXMqIGNhbnZhcygpIHsgcmV0dXJu
IG1fY2FudmFzOyB9CiAKICAgICBJbnRlcnBvbGF0aW9uUXVhbGl0eSBpbnRlcnBvbGF0aW9uUXVh
bGl0eSgpIGNvbnN0OwogICAgIHZvaWQgc2V0SW50ZXJwb2xhdGlvblF1YWxpdHkoSW50ZXJwb2xh
dGlvblF1YWxpdHkgaW50ZXJwb2xhdGlvblF1YWxpdHkpOwpAQCAtMTYzLDcgKzE2Myw4IEBAIHB1
YmxpYzoKICAgICAvLyBSZXR1cm5zIGlmIHRoZSBjb250ZXh0IGlzIGEgcHJpbnRpbmcgY29udGV4
dCBpbnN0ZWFkIG9mIGEgZGlzcGxheQogICAgIC8vIGNvbnRleHQuIEJpdG1hcCBzaG91bGRuJ3Qg
YmUgcmVzYW1wbGVkIHdoZW4gcHJpbnRpbmcgdG8ga2VlcCB0aGUgYmVzdAogICAgIC8vIHBvc3Np
YmxlIHF1YWxpdHkuCi0gICAgYm9vbCBpc1ByaW50aW5nKCk7CisgICAgYm9vbCBwcmludGluZygp
IGNvbnN0IHsgcmV0dXJuIG1fcHJpbnRpbmc7IH0KKyAgICB2b2lkIHNldFByaW50aW5nKGJvb2wg
cCkgeyBtX3ByaW50aW5nID0gcDsgfQogCiAgICAgLy8gUmV0dXJucyBpZiB0aGUgY29udGV4dCBh
bGxvd3MgcmVuZGVyaW5nIG9mIGZvbnRzIHVzaW5nIG5hdGl2ZSBwbGF0Zm9ybQogICAgIC8vIEFQ
SXMuIElmIGZhbHNlIGlzIHJldHVybmVkIGZvbnQgcmVuZGVyaW5nIGlzIHBlcmZvcm1lZCB1c2lu
ZyB0aGUgc2tpYQpAQCAtMTg1LDEwICsxODYsMTAgQEAgcHVibGljOgogICAgIEdMRVMyQ2FudmFz
KiBncHVDYW52YXMoKSBjb25zdCB7IHJldHVybiAwOyB9CiAjZW5kaWYKICAgICAvLyBDYWxsIHRo
ZXNlIGJlZm9yZSBtYWtpbmcgYSBjYWxsIHRoYXQgbWFuaXB1bGF0ZXMgdGhlIHVuZGVybHlpbmcK
LSAgICAvLyBza2lhOjpQbGF0Zm9ybUNhbnZhcyBvciBXZWJDb3JlOjpHTEVTMkNhbnZhcworICAg
IC8vIFNrQ2FudmFzIG9yIFdlYkNvcmU6OkdMRVMyQ2FudmFzCiAgICAgdm9pZCBwcmVwYXJlRm9y
U29mdHdhcmVEcmF3KCkgY29uc3Q7CiAgICAgdm9pZCBwcmVwYXJlRm9ySGFyZHdhcmVEcmF3KCkg
Y29uc3Q7Ci0gICAgLy8gQ2FsbCB0byBmb3JjZSB0aGUgc2tpYTo6UGxhdGZvcm1DYW52YXMgdG8g
Y29udGFpbiBhbGwgcmVuZGVyaW5nIHJlc3VsdHMuCisgICAgLy8gQ2FsbCB0byBmb3JjZSB0aGUg
U2tDYW52YXMgdG8gY29udGFpbiBhbGwgcmVuZGVyaW5nIHJlc3VsdHMuCiAgICAgdm9pZCBzeW5j
U29mdHdhcmVDYW52YXMoKSBjb25zdDsKICAgICB2b2lkIG1hcmtEaXJ0eVJlY3QoY29uc3QgSW50
UmVjdCYgcmVjdCk7CiAKQEAgLTIwNSw3ICsyMDYsNyBAQCBwcml2YXRlOgogICAgIHN0cnVjdCBT
dGF0ZTsKIAogICAgIC8vIE5VTEwgaW5kaWNhdGVzIHBhaW50aW5nIGlzIGRpc2FibGVkLiBOZXZl
ciBkZWxldGUgdGhpcyBvYmplY3QuCi0gICAgc2tpYTo6UGxhdGZvcm1DYW52YXMqIG1fY2FudmFz
OworICAgIFNrQ2FudmFzKiBtX2NhbnZhczsKIAogICAgIC8vIFN0YXRlcyBzdGFjay4gRW5hYmxl
cyBsb2NhbCBkcmF3aW5nIHN0YXRlIGNoYW5nZSB3aXRoIHNhdmUoKS9yZXN0b3JlKCkKICAgICAv
LyBjYWxscy4KQEAgLTIxOCw2ICsyMTksNyBAQCBwcml2YXRlOgogICAgIC8vIFZhbHVlcyBhcmUg
dXNlZCBpbiBJbWFnZVNraWEuY3BwCiAgICAgSW50U2l6ZSBtX2ltYWdlUmVzYW1wbGluZ0hpbnRT
cmNTaXplOwogICAgIEZsb2F0U2l6ZSBtX2ltYWdlUmVzYW1wbGluZ0hpbnREc3RTaXplOworICAg
IGJvb2wgbV9wcmludGluZzsKICAgICBib29sIG1fZHJhd2luZ1RvSW1hZ2VCdWZmZXI7CiAgICAg
Ym9vbCBtX3VzZUdQVTsKICNpZiBFTkFCTEUoQUNDRUxFUkFURURfMkRfQ0FOVkFTKQpJbmRleDog
U291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cJKHJldmlzaW9uIDgzNDQ2KQorKysgU291cmNlL1dlYktp
dC9jaHJvbWl1bS9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwyMCBAQAorMjAx
MS0wNC0xMSAgQWxvayBQcml5YWRhcnNoaSAgPGFsb2twQGNocm9taXVtLm9yZz4KKworICAgICAg
ICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBSZW1vdmUgZGVwZW5kZW5j
eSBvbiBjaHJvbWl1bSBza2lhOjpQbGF0Zm9ybUNhbnZhcworICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NTc1NjMKKworICAgICAgICAqIHB1YmxpYy9XZWJD
YW52YXMuaDoKKyAgICAgICAgKiBzcmMvV2ViRnJhbWVJbXBsLmNwcDoKKyAgICAgICAgKFdlYktp
dDo6V2ViRnJhbWVJbXBsOjpwcmludFBhZ2UpOgorICAgICAgICAqIHRlc3RzL1RyYW5zcGFyZW5j
eVdpblRlc3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6ZHJhd05hdGl2ZVJlY3QpOgorICAgICAg
ICAoV2ViQ29yZTo6Z2V0UGl4ZWxBdCk6CisgICAgICAgIChXZWJDb3JlOjpjbGVhclRvcExheWVy
QWxwaGFDaGFubmVsKToKKyAgICAgICAgKFdlYkNvcmU6OmNsZWFyVG9wTGF5ZXJBbHBoYVBpeGVs
KToKKyAgICAgICAgKFdlYkNvcmU6OlRFU1QpOgorCiAyMDExLTA0LTA1ICBIYW5zIFdlbm5ib3Jn
ICA8aGFuc0BjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgU3RldmUgQmxvY2su
CkluZGV4OiBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJDYW52YXMuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJDYW52YXMuaAkocmV2aXNp
b24gODM0NDYpCisrKyBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJDYW52YXMuaAko
d29ya2luZyBjb3B5KQpAQCAtMzQsNyArMzQsNyBAQAogI2luY2x1ZGUgIldlYkNvbW1vbi5oIgog
CiAjaWYgV0VCS0lUX1VTSU5HX1NLSUEKLW5hbWVzcGFjZSBza2lhIHsgY2xhc3MgUGxhdGZvcm1D
YW52YXM7IH0KK2NsYXNzIFNrQ2FudmFzOwogI2VsaWYgV0VCS0lUX1VTSU5HX0NHCiBzdHJ1Y3Qg
Q0dDb250ZXh0OwogI2VuZGlmCkBAIC00Miw3ICs0Miw3IEBAIHN0cnVjdCBDR0NvbnRleHQ7CiBu
YW1lc3BhY2UgV2ViS2l0IHsKIAogI2lmIFdFQktJVF9VU0lOR19TS0lBCi10eXBlZGVmIHNraWE6
OlBsYXRmb3JtQ2FudmFzIFdlYkNhbnZhczsKK3R5cGVkZWYgU2tDYW52YXMgV2ViQ2FudmFzOwog
I2VsaWYgV0VCS0lUX1VTSU5HX0NHCiB0eXBlZGVmIHN0cnVjdCBDR0NvbnRleHQgV2ViQ2FudmFz
OwogI2Vsc2UKSW5kZXg6IFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYkZyYW1lSW1wbC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViRnJhbWVJbXBs
LmNwcAkocmV2aXNpb24gODM0NDYpCisrKyBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJG
cmFtZUltcGwuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNDA5LDcgKzE0MDksMTMgQEAgZmxvYXQg
V2ViRnJhbWVJbXBsOjpwcmludFBhZ2UoaW50IHBhZ2UsCiAgICAgICAgIHJldHVybiAwOwogICAg
IH0KIAotICAgIHJldHVybiBtX3ByaW50Q29udGV4dC0+c3Bvb2xQYWdlKEdyYXBoaWNzQ29udGV4
dEJ1aWxkZXIoY2FudmFzKS5jb250ZXh0KCksIHBhZ2UpOworICAgIEdyYXBoaWNzQ29udGV4dEJ1
aWxkZXIgYnVpbGRlcihjYW52YXMpOworICAgIEdyYXBoaWNzQ29udGV4dCYgZ2MgPSBidWlsZGVy
LmNvbnRleHQoKTsKKyNpZiBXRUJLSVRfVVNJTkdfU0tJQQorICAgIGdjLnBsYXRmb3JtQ29udGV4
dCgpLT5zZXRQcmludGluZyh0cnVlKTsKKyNlbmRpZgorCisgICAgcmV0dXJuIG1fcHJpbnRDb250
ZXh0LT5zcG9vbFBhZ2UoZ2MsIHBhZ2UpOwogfQogCiB2b2lkIFdlYkZyYW1lSW1wbDo6cHJpbnRF
bmQoKQpJbmRleDogU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9UcmFuc3BhcmVuY3lXaW5U
ZXN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL1RyYW5z
cGFyZW5jeVdpblRlc3QuY3BwCShyZXZpc2lvbiA4MzQ0NikKKysrIFNvdXJjZS9XZWJLaXQvY2hy
b21pdW0vdGVzdHMvVHJhbnNwYXJlbmN5V2luVGVzdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTUw
LDggKzUwLDggQEAgc3RhdGljIEZsb2F0UmVjdCBSRUNUVG9GbG9hdFJlY3QoY29uc3QgUgogc3Rh
dGljIHZvaWQgZHJhd05hdGl2ZVJlY3QoR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgaW50IHgsIGludCB5LCBpbnQgdywgaW50IGgpCiB7Ci0gICAg
c2tpYTo6UGxhdGZvcm1DYW52YXMqIGNhbnZhcyA9IGNvbnRleHQtPnBsYXRmb3JtQ29udGV4dCgp
LT5jYW52YXMoKTsKLSAgICBIREMgZGMgPSBjYW52YXMtPmJlZ2luUGxhdGZvcm1QYWludCgpOwor
ICAgIFNrQ2FudmFzKiBjYW52YXMgPSBjb250ZXh0LT5wbGF0Zm9ybUNvbnRleHQoKS0+Y2FudmFz
KCk7CisgICAgSERDIGRjID0gc2tpYTo6QmVnaW5QbGF0Zm9ybVBhaW50KGNhbnZhcyk7CiAKICAg
ICBSRUNUIGlubmVyUmM7CiAgICAgaW5uZXJSYy5sZWZ0ID0geDsKQEAgLTYxLDEzICs2MSwxMiBA
QCBzdGF0aWMgdm9pZCBkcmF3TmF0aXZlUmVjdChHcmFwaGljc0NvbnRlCiAgICAgRmlsbFJlY3Qo
ZGMsICZpbm5lclJjLAogICAgICAgICAgICAgIHJlaW50ZXJwcmV0X2Nhc3Q8SEJSVVNIPihHZXRT
dG9ja09iamVjdChCTEFDS19CUlVTSCkpKTsKIAotICAgIGNhbnZhcy0+ZW5kUGxhdGZvcm1QYWlu
dCgpOworICAgIHNraWE6OkVuZFBsYXRmb3JtUGFpbnQoY2FudmFzKTsKIH0KIAogc3RhdGljIENv
bG9yIGdldFBpeGVsQXQoR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBpbnQgeCwgaW50IHkpCiB7
Ci0gICAgY29uc3QgU2tCaXRtYXAmIGJpdG1hcCA9IGNvbnRleHQtPnBsYXRmb3JtQ29udGV4dCgp
LT5jYW52YXMoKS0+Ci0gICAgICAgIGdldFRvcFBsYXRmb3JtRGV2aWNlKCkuYWNjZXNzQml0bWFw
KGZhbHNlKTsKKyAgICBjb25zdCBTa0JpdG1hcCYgYml0bWFwID0gY29udGV4dC0+cGxhdGZvcm1D
b250ZXh0KCktPmNhbnZhcygpLT5nZXRUb3BEZXZpY2UoKS0+YWNjZXNzQml0bWFwKGZhbHNlKTsK
ICAgICByZXR1cm4gQ29sb3IoKnJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgUkdCQTMyKj4oYml0bWFw
LmdldEFkZHIzMih4LCB5KSkpOwogfQogCkBAIC03NSw4ICs3NCw3IEBAIHN0YXRpYyBDb2xvciBn
ZXRQaXhlbEF0KEdyYXBoaWNzQ29udGV4dCoKIC8vIFdpbmRvd3MgbWVzc2luZyBpdCB1cC4KIHN0
YXRpYyB2b2lkIGNsZWFyVG9wTGF5ZXJBbHBoYUNoYW5uZWwoR3JhcGhpY3NDb250ZXh0KiBjb250
ZXh0KQogewotICAgIFNrQml0bWFwJiBiaXRtYXAgPSBjb25zdF9jYXN0PFNrQml0bWFwJj4oY29u
dGV4dC0+cGxhdGZvcm1Db250ZXh0KCktPgotICAgICAgICBjYW52YXMoKS0+Z2V0VG9wUGxhdGZv
cm1EZXZpY2UoKS5hY2Nlc3NCaXRtYXAoZmFsc2UpKTsKKyAgICBTa0JpdG1hcCYgYml0bWFwID0g
Y29uc3RfY2FzdDxTa0JpdG1hcCY+KGNvbnRleHQtPnBsYXRmb3JtQ29udGV4dCgpLT5jYW52YXMo
KS0+Z2V0VG9wRGV2aWNlKCktPmFjY2Vzc0JpdG1hcChmYWxzZSkpOwogICAgIGZvciAoaW50IHkg
PSAwOyB5IDwgYml0bWFwLmhlaWdodCgpOyB5KyspIHsKICAgICAgICAgdWludDMyX3QqIHJvdyA9
IGJpdG1hcC5nZXRBZGRyMzIoMCwgeSk7CiAgICAgICAgIGZvciAoaW50IHggPSAwOyB4IDwgYml0
bWFwLndpZHRoKCk7IHgrKykKQEAgLTg3LDggKzg1LDcgQEAgc3RhdGljIHZvaWQgY2xlYXJUb3BM
YXllckFscGhhQ2hhbm5lbChHcgogLy8gQ2xlYXJzIHRoZSBhbHBoYSBjaGFubmVsIG9uIHRoZSBz
cGVjaWZpZWQgcGl4ZWwuCiBzdGF0aWMgdm9pZCBjbGVhclRvcExheWVyQWxwaGFQaXhlbChHcmFw
aGljc0NvbnRleHQqIGNvbnRleHQsIGludCB4LCBpbnQgeSkKIHsKLSAgICBTa0JpdG1hcCYgYml0
bWFwID0gY29uc3RfY2FzdDxTa0JpdG1hcCY+KGNvbnRleHQtPnBsYXRmb3JtQ29udGV4dCgpLT4K
LSAgICAgICAgY2FudmFzKCktPmdldFRvcFBsYXRmb3JtRGV2aWNlKCkuYWNjZXNzQml0bWFwKGZh
bHNlKSk7CisgICAgU2tCaXRtYXAmIGJpdG1hcCA9IGNvbnN0X2Nhc3Q8U2tCaXRtYXAmPihjb250
ZXh0LT5wbGF0Zm9ybUNvbnRleHQoKS0+Y2FudmFzKCktPmdldFRvcERldmljZSgpLT5hY2Nlc3NC
aXRtYXAoZmFsc2UpKTsKICAgICAqYml0bWFwLmdldEFkZHIzMih4LCB5KSAmPSAweDAwRkZGRkZG
OwogfQogCkBAIC01NTksOSArNTU2LDcgQEAgVEVTVChUcmFuc3BhcmVuY3lXaW4sIFNjYWxlKQog
ICAgICAgICAvLyB0aGUgaGVscGVyIGdvZXMgb3V0IG9mIHNjb3BlLiBXZSBkb24ndCB3YW50IHRv
IGNhbGwKICAgICAgICAgLy8gY2xlYXJUb3BMYXllckFscGhhQ2hhbm5lbCBiZWNhdXNlIHRoYXQg
d2lsbCBhY3R1YWxseSBjbGVhciB0aGUgd2hvbGUKICAgICAgICAgLy8gY2FudmFzIChzaW5jZSB3
ZSBoYXZlIG5vIGV4dHJhIGxheWVyISkuCi0gICAgICAgIFNrQml0bWFwJiBiaXRtYXAgPSBjb25z
dF9jYXN0PFNrQml0bWFwJj4oaGVscGVyLmNvbnRleHQoKS0+Ci0gICAgICAgICAgICBwbGF0Zm9y
bUNvbnRleHQoKS0+Y2FudmFzKCktPmdldFRvcFBsYXRmb3JtRGV2aWNlKCkuCi0gICAgICAgICAg
ICBhY2Nlc3NCaXRtYXAoZmFsc2UpKTsKKyAgICAgICAgU2tCaXRtYXAmIGJpdG1hcCA9IGNvbnN0
X2Nhc3Q8U2tCaXRtYXAmPihoZWxwZXIuY29udGV4dCgpLT5wbGF0Zm9ybUNvbnRleHQoKS0+Y2Fu
dmFzKCktPmdldFRvcERldmljZSgpLT5hY2Nlc3NCaXRtYXAoZmFsc2UpKTsKICAgICAgICAgKmJp
dG1hcC5nZXRBZGRyMzIoMiwgMikgJj0gMHgwMEZGRkZGRjsKICAgICAgICAgaGVscGVyLmNvbXBv
c2l0ZSgpOwogICAgIH0K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>89066</attachid>
            <date>2011-04-11 13:20:57 -0700</date>
            <delta_ts>2011-04-11 21:23:58 -0700</delta_ts>
            <desc>proposed patch</desc>
            <filename>skia.txt</filename>
            <type>text/plain</type>
            <size>22085</size>
            <attacher name="Alok Priyadarshi">alokp</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDgzNDg0KQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsNDEgQEAKKzIwMTEtMDQtMTEgIEFsb2sgUHJp
eWFkYXJzaGkgIDxhbG9rcEBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9C
T0RZIChPT1BTISkuCisKKyAgICAgICAgUmVtb3ZlIGRlcGVuZGVuY3kgb24gY2hyb21pdW0gc2tp
YTo6UGxhdGZvcm1DYW52YXMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTU3NTYzCisKKyAgICAgICAgVGhpcyBwYXRjaCBkb2VzIG5vdCBjaGFuZ2UgYW55
IGZ1bmN0aW9uYWxpdHksIGp1c3QgdGhlIHR5cGUgb2Ygb2JqZWN0IHNraWE6OlBsYXRmb3JtQ2Fu
dmFzIC0+IFNrQ2FudmFzLgorICAgICAgICBUaGUgb2JqZWN0IGlzIHN0aWxsIGJlaW5nIGNyZWF0
ZWQgYnkgYSBmYWN0b3J5IG1ldGhvZCBza2lhOjpDcmVhdGVCaXRtYXBDYW52YXMgZGVmaW5lZCBp
biBDaHJvbWl1bS4KKyAgICAgICAgV2Ugd2lsbCBldmVudHVhbGx5IGRlZmluZSBhbiBBUEkgdGhh
dCBldmVyeSBwb3J0IHVzaW5nIHNraWEgd2lsbCBkZWZpbmUuCisKKyAgICAgICAgKiBwbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9Gb250Q2hyb21pdW1XaW4uY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6VHJhbnNwYXJlbmN5QXdhcmVGb250UGFpbnRlcjo6VHJhbnNwYXJlbmN5QXdhcmVGb250UGFp
bnRlcjo6aW5pdGlhbGl6ZUZvckdESSk6CisgICAgICAgIChXZWJDb3JlOjpUcmFuc3BhcmVuY3lB
d2FyZUZvbnRQYWludGVyOjpUcmFuc3BhcmVuY3lBd2FyZUZvbnRQYWludGVyOjp+VHJhbnNwYXJl
bmN5QXdhcmVGb250UGFpbnRlcik6CisgICAgICAgIChXZWJDb3JlOjpGb250OjpkcmF3Q29tcGxl
eFRleHQpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0ltYWdlQnVmZmVy
RGF0YS5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyQ2hyb21p
dW0uaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclJlbmRlcmVy
Q2hyb21pdW0uaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9QbGF0Zm9y
bUNhbnZhcy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpQbGF0Zm9ybUNhbnZhczo6cmVzaXplKToK
KyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9QbGF0Zm9ybUNhbnZhcy5oOgor
ICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1RyYW5zcGFyZW5jeVdpbi5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpUcmFuc3BhcmVuY3lXaW46OmNvbXBvc2l0ZVRleHRDb21wb3Np
dGUpOgorICAgICAgICAoV2ViQ29yZTo6VHJhbnNwYXJlbmN5V2luOjptYWtlTGF5ZXJPcGFxdWUp
OgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3NraWEvSW1hZ2VCdWZmZXJTa2lhLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyOjpJbWFnZUJ1ZmZlcik6CisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9JbWFnZVNraWEuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
cGFpbnRTa0JpdG1hcCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZTo6ZHJhd1BhdHRlcm4pOgor
ICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3NraWEvUGxhdGZvcm1Db250ZXh0U2tpYS5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpQbGF0Zm9ybUNvbnRleHRTa2lhOjpQbGF0Zm9ybUNvbnRleHRT
a2lhKToKKyAgICAgICAgKFdlYkNvcmU6OlBsYXRmb3JtQ29udGV4dFNraWE6OnNldENhbnZhcyk6
CisgICAgICAgIChXZWJDb3JlOjpQbGF0Zm9ybUNvbnRleHRTa2lhOjppc05hdGl2ZUZvbnRSZW5k
ZXJpbmdBbGxvd2VkKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9za2lhL1BsYXRmb3Jt
Q29udGV4dFNraWEuaDoKKyAgICAgICAgKFdlYkNvcmU6OlBsYXRmb3JtQ29udGV4dFNraWE6OmNh
bnZhcyk6CisgICAgICAgIChXZWJDb3JlOjpQbGF0Zm9ybUNvbnRleHRTa2lhOjpwcmludGluZyk6
CisgICAgICAgIChXZWJDb3JlOjpQbGF0Zm9ybUNvbnRleHRTa2lhOjpzZXRQcmludGluZyk6CisK
IDIwMTEtMDQtMDYgIFhpYW9tZWkgSmkgIDx4amlAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFJl
dmlld2VkIGJ5IFJ5b3N1a2UgTml3YS4KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL0ZvbnRDaHJvbWl1bVdpbi5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vRm9udENocm9taXVtV2luLmNwcAko
cmV2aXNpb24gODM0ODQpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9Gb250Q2hyb21pdW1XaW4uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNjUsNyArMTY1LDcg
QEAgdm9pZCBUcmFuc3BhcmVuY3lBd2FyZUZvbnRQYWludGVyOjppbml0aQogCiAgICAgLy8gU2V0
IHVwIHRoZSBEQywgdXNpbmcgdGhlIG9uZSBmcm9tIHRoZSB0cmFuc3BhcmVuY3kgaGVscGVyLgog
ICAgIGlmIChtX3RyYW5zcGFyZW5jeS5wbGF0Zm9ybUNvbnRleHQoKSkgewotICAgICAgICBtX2hk
YyA9IG1fdHJhbnNwYXJlbmN5LnBsYXRmb3JtQ29udGV4dCgpLT5jYW52YXMoKS0+YmVnaW5QbGF0
Zm9ybVBhaW50KCk7CisgICAgICAgIG1faGRjID0gc2tpYTo6QmVnaW5QbGF0Zm9ybVBhaW50KG1f
dHJhbnNwYXJlbmN5LnBsYXRmb3JtQ29udGV4dCgpLT5jYW52YXMoKSk7CiAgICAgICAgIFNldFRl
eHRDb2xvcihtX2hkYywgc2tpYTo6U2tDb2xvclRvQ09MT1JSRUYoY29sb3IpKTsKICAgICAgICAg
U2V0QmtNb2RlKG1faGRjLCBUUkFOU1BBUkVOVCk7CiAgICAgfQpAQCAtMTc5LDcgKzE3OSw3IEBA
IFRyYW5zcGFyZW5jeUF3YXJlRm9udFBhaW50ZXI6On5UcmFuc3BhcmUKICAgICBpZiAobV9jcmVh
dGVkVHJhbnNwYXJlbmN5TGF5ZXIpCiAgICAgICAgIG1fZ3JhcGhpY3NDb250ZXh0LT5lbmRUcmFu
c3BhcmVuY3lMYXllcigpOwogICAgIG1fZ3JhcGhpY3NDb250ZXh0LT5yZXN0b3JlKCk7Ci0gICAg
bV9wbGF0Zm9ybUNvbnRleHQtPmNhbnZhcygpLT5lbmRQbGF0Zm9ybVBhaW50KCk7CisgICAgc2tp
YTo6RW5kUGxhdGZvcm1QYWludChtX3BsYXRmb3JtQ29udGV4dC0+Y2FudmFzKCkpOwogfQogCiAv
LyBTcGVjaWFsaXphdGlvbiBmb3Igc2ltcGxlIEdseXBoQnVmZmVyIHBhaW50aW5nLgpAQCAtNTE2
LDcgKzUxNiw3IEBAIHZvaWQgRm9udDo6ZHJhd0NvbXBsZXhUZXh0KEdyYXBoaWNzQ29udGUKICAg
ICAvLyB0aGUgYmFzZWxpbmUsIHNvIHdlIGhhdmUgdG8gc3VidHJhY3Qgb2ZmIHRoZSBhc2NlbnQu
CiAgICAgc3RhdGUuZHJhdyhncmFwaGljc0NvbnRleHQsIGhkYywgbHJvdW5kZihwb2ludC54KCkp
LCBscm91bmRmKHBvaW50LnkoKSAtIGZvbnRNZXRyaWNzKCkuYXNjZW50KCkpLCBmcm9tLCB0byk7
CiAKLSAgICBjb250ZXh0LT5jYW52YXMoKS0+ZW5kUGxhdGZvcm1QYWludCgpOworICAgIHNraWE6
OkVuZFBsYXRmb3JtUGFpbnQoY29udGV4dC0+Y2FudmFzKCkpOwogfQogCiB2b2lkIEZvbnQ6OmRy
YXdFbXBoYXNpc01hcmtzRm9yQ29tcGxleFRleHQoR3JhcGhpY3NDb250ZXh0KiAvKiBjb250ZXh0
ICovLCBjb25zdCBUZXh0UnVuJiAvKiBydW4gKi8sIGNvbnN0IEF0b21pY1N0cmluZyYgLyogbWFy
ayAqLywgY29uc3QgRmxvYXRQb2ludCYgLyogcG9pbnQgKi8sIGludCAvKiBmcm9tICovLCBpbnQg
LyogdG8gKi8pIGNvbnN0CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9JbWFnZUJ1ZmZlckRhdGEuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9JbWFnZUJ1ZmZlckRhdGEuaAkocmV2aXNpb24gODM0
ODQpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9JbWFnZUJ1
ZmZlckRhdGEuaAkod29ya2luZyBjb3B5KQpAQCAtMzMsMTUgKzMzLDEzIEBACiAKICNpbmNsdWRl
ICJQbGF0Zm9ybUNvbnRleHRTa2lhLmgiCiAKLSNpbmNsdWRlICJza2lhL2V4dC9wbGF0Zm9ybV9j
YW52YXMuaCIKLQogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBJbWFnZUJ1ZmZlckRhdGEg
ewogcHVibGljOgogICAgIEltYWdlQnVmZmVyRGF0YShjb25zdCBJbnRTaXplJik7CiAKLSAgICBz
a2lhOjpQbGF0Zm9ybUNhbnZhcyBtX2NhbnZhczsKKyAgICBPd25QdHI8U2tDYW52YXM+IG1fY2Fu
dmFzOwogICAgIFBsYXRmb3JtQ29udGV4dFNraWEgbV9wbGF0Zm9ybUNvbnRleHQ7CiB9OwogCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllckNocm9t
aXVtLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vTGF5ZXJDaHJvbWl1bS5oCShyZXZpc2lvbiA4MzQ4NCkKKysrIFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyQ2hyb21pdW0uaAkod29ya2luZyBjb3B5
KQpAQCAtNTAsMTEgKzUwLDYgQEAKICNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdIYXNoLmg+CiAj
aW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CiAKLQotbmFtZXNwYWNlIHNraWEgewotY2xh
c3MgUGxhdGZvcm1DYW52YXM7Ci19Ci0KIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgQ0NM
YXllckltcGw7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9MYXllclJlbmRlcmVyQ2hyb21pdW0uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclJlbmRlcmVyQ2hyb21pdW0uaAkocmV2aXNp
b24gODM0ODQpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9M
YXllclJlbmRlcmVyQ2hyb21pdW0uaAkod29ya2luZyBjb3B5KQpAQCAtMTkwLDcgKzE5MCw3IEBA
IHByaXZhdGU6CiAgICAgYm9vbCBtX2NvbXBvc2l0ZU9mZnNjcmVlbjsKIAogI2lmIFVTRShTS0lB
KQotICAgIE93blB0cjxza2lhOjpQbGF0Zm9ybUNhbnZhcz4gbV9yb290TGF5ZXJDYW52YXM7Cisg
ICAgT3duUHRyPFNrQ2FudmFzPiBtX3Jvb3RMYXllckNhbnZhczsKICAgICBPd25QdHI8UGxhdGZv
cm1Db250ZXh0U2tpYT4gbV9yb290TGF5ZXJTa2lhQ29udGV4dDsKICAgICBPd25QdHI8R3JhcGhp
Y3NDb250ZXh0PiBtX3Jvb3RMYXllckdyYXBoaWNzQ29udGV4dDsKICNlbGlmIFBMQVRGT1JNKENH
KQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vUGxhdGZv
cm1DYW52YXMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL1BsYXRmb3JtQ2FudmFzLmNwcAkocmV2aXNpb24gODM0ODQpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9QbGF0Zm9ybUNhbnZhcy5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTUyLDcgKzUyLDcgQEAgdm9pZCBQbGF0Zm9ybUNhbnZhczo6cmVz
aXplKGNvbnN0IEludFNpegogewogICAgIG1fc2l6ZSA9IHNpemU7CiAjaWYgVVNFKFNLSUEpCi0g
ICAgbV9za2lhQ2FudmFzID0gbmV3IHNraWE6OlBsYXRmb3JtQ2FudmFzKHNpemUud2lkdGgoKSwg
c2l6ZS5oZWlnaHQoKSwgZmFsc2UpOworICAgIG1fc2tpYUNhbnZhcyA9IHNraWE6OkNyZWF0ZUJp
dG1hcENhbnZhcyhzaXplLndpZHRoKCksIHNpemUuaGVpZ2h0KCksIGZhbHNlKTsKICNlbGlmIFBM
QVRGT1JNKENHKQogICAgIHNpemVfdCBidWZmZXJTaXplID0gc2l6ZS53aWR0aCgpICogc2l6ZS5o
ZWlnaHQoKSAqIDQ7CiAgICAgbV9waXhlbERhdGEgPSBhZG9wdEFycmF5UHRyKG5ldyB1aW50OF90
W2J1ZmZlclNpemVdKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL1BsYXRmb3JtQ2FudmFzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vUGxhdGZvcm1DYW52YXMuaAkocmV2aXNpb24gODM0ODQp
CisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9QbGF0Zm9ybUNh
bnZhcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0zOSw4ICszOSw4IEBACiAjZW5kaWYKIAogI2lmIFVT
RShTS0lBKQotbmFtZXNwYWNlIHNraWEgeyBjbGFzcyBQbGF0Zm9ybUNhbnZhczsgfQogY2xhc3Mg
U2tCaXRtYXA7CitjbGFzcyBTa0NhbnZhczsKICNlbmRpZgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7
CkBAIC05Nyw3ICs5Nyw3IEBAIHB1YmxpYzoKIAogcHJpdmF0ZToKICNpZiBVU0UoU0tJQSkKLSAg
ICBPd25QdHI8c2tpYTo6UGxhdGZvcm1DYW52YXM+IG1fc2tpYUNhbnZhczsKKyAgICBPd25QdHI8
U2tDYW52YXM+IG1fc2tpYUNhbnZhczsKICNlbGlmIFBMQVRGT1JNKENHKQogICAgIE93bkFycmF5
UHRyPHVpbnQ4X3Q+IG1fcGl4ZWxEYXRhOwogI2VuZGlmCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9UcmFuc3BhcmVuY3lXaW4uY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1RyYW5zcGFyZW5j
eVdpbi5jcHAJKHJldmlzaW9uIDgzNDg0KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vVHJhbnNwYXJlbmN5V2luLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDks
MTQgKzQ5LDE0IEBAIG5hbWVzcGFjZSB7CiAvLyBpbnRvLiBCdWZmZXJzIGxhcmdlciB0aGFuIHRo
aXMgd2lsbCBiZSBkZXN0cm95ZWQgd2hlbiB3ZSdyZSBkb25lIHdpdGggdGhlbS4KIGNvbnN0IGlu
dCBtYXhDYWNoZWRCdWZmZXJQaXhlbFNpemUgPSA2NTUzNjsKIAotaW5saW5lIHNraWE6OlBsYXRm
b3JtQ2FudmFzKiBjYW52YXNGb3JDb250ZXh0KGNvbnN0IEdyYXBoaWNzQ29udGV4dCYgY29udGV4
dCkKK2lubGluZSBTa0NhbnZhcyogY2FudmFzRm9yQ29udGV4dChjb25zdCBHcmFwaGljc0NvbnRl
eHQmIGNvbnRleHQpCiB7CiAgICAgcmV0dXJuIGNvbnRleHQucGxhdGZvcm1Db250ZXh0KCktPmNh
bnZhcygpOwogfQogCiBpbmxpbmUgY29uc3QgU2tCaXRtYXAmIGJpdG1hcEZvckNvbnRleHQoY29u
c3QgR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KQogewotICAgIHJldHVybiBjYW52YXNGb3JDb250
ZXh0KGNvbnRleHQpLT5nZXRUb3BQbGF0Zm9ybURldmljZSgpLmFjY2Vzc0JpdG1hcChmYWxzZSk7
CisgICAgcmV0dXJuIGNhbnZhc0ZvckNvbnRleHQoY29udGV4dCktPmdldFRvcERldmljZSgpLT5h
Y2Nlc3NCaXRtYXAoZmFsc2UpOwogfQogCiB2b2lkIGNvbXBvc2l0ZVRvQ29weShjb25zdCBHcmFw
aGljc0NvbnRleHQmIHNvdXJjZUxheWVycywKQEAgLTQ2Niw3ICs0NjYsNyBAQCB2b2lkIFRyYW5z
cGFyZW5jeVdpbjo6Y29tcG9zaXRlVGV4dENvbXBvCiAgICAgaWYgKCFtX3ZhbGlkTGF5ZXIpCiAg
ICAgICAgIHJldHVybjsKIAotICAgIGNvbnN0IFNrQml0bWFwJiBiaXRtYXAgPSBtX2xheWVyQnVm
ZmVyLT5jb250ZXh0KCktPnBsYXRmb3JtQ29udGV4dCgpLT5jYW52YXMoKS0+Z2V0VG9wUGxhdGZv
cm1EZXZpY2UoKS5hY2Nlc3NCaXRtYXAodHJ1ZSk7CisgICAgY29uc3QgU2tCaXRtYXAmIGJpdG1h
cCA9IG1fbGF5ZXJCdWZmZXItPmNvbnRleHQoKS0+cGxhdGZvcm1Db250ZXh0KCktPmNhbnZhcygp
LT5nZXRUb3BEZXZpY2UoKS0+YWNjZXNzQml0bWFwKHRydWUpOwogICAgIFNrQ29sb3IgdGV4dENv
bG9yID0gbV90ZXh0Q29tcG9zaXRlQ29sb3IucmdiKCk7CiAgICAgZm9yIChpbnQgeSA9IDA7IHkg
PCBtX2xheWVyU2l6ZS5oZWlnaHQoKTsgeSsrKSB7CiAgICAgICAgIHVpbnQzMl90KiByb3cgPSBi
aXRtYXAuZ2V0QWRkcjMyKDAsIHkpOwpAQCAtNTAyLDcgKzUwMiw3IEBAIHZvaWQgVHJhbnNwYXJl
bmN5V2luOjptYWtlTGF5ZXJPcGFxdWUoKQogICAgICAgICByZXR1cm47CiAKICAgICBTa0JpdG1h
cCYgYml0bWFwID0gY29uc3RfY2FzdDxTa0JpdG1hcCY+KG1fZHJhd0NvbnRleHQtPnBsYXRmb3Jt
Q29udGV4dCgpLT4KLSAgICAgICAgY2FudmFzKCktPmdldFRvcFBsYXRmb3JtRGV2aWNlKCkuYWNj
ZXNzQml0bWFwKHRydWUpKTsKKyAgICAgICAgY2FudmFzKCktPmdldFRvcERldmljZSgpLT5hY2Nl
c3NCaXRtYXAodHJ1ZSkpOwogICAgIGZvciAoaW50IHkgPSAwOyB5IDwgbV9sYXllclNpemUuaGVp
Z2h0KCk7IHkrKykgewogICAgICAgICB1aW50MzJfdCogcm93ID0gYml0bWFwLmdldEFkZHIzMigw
LCB5KTsKICAgICAgICAgZm9yIChpbnQgeCA9IDA7IHggPCBtX2xheWVyU2l6ZS53aWR0aCgpOyB4
KyspCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9za2lhL0ltYWdlQnVm
ZmVyU2tpYS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3Mvc2tpYS9JbWFnZUJ1ZmZlclNraWEuY3BwCShyZXZpc2lvbiA4MzQ4NCkKKysrIFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3NraWEvSW1hZ2VCdWZmZXJTa2lhLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtNjYsMTkgKzY2LDIxIEBAIEltYWdlQnVmZmVyOjpJbWFnZUJ1ZmZlcihjb25z
dCBJbnRTaXplJgogICAgIDogbV9kYXRhKHNpemUpCiAgICAgLCBtX3NpemUoc2l6ZSkKIHsKLSAg
ICBpZiAoIW1fZGF0YS5tX2NhbnZhcy5pbml0aWFsaXplKHNpemUud2lkdGgoKSwgc2l6ZS5oZWln
aHQoKSwgZmFsc2UpKSB7CisgICAgU2tDYW52YXMqIGNhbnZhcyA9IHNraWE6OkNyZWF0ZUJpdG1h
cENhbnZhcyhzaXplLndpZHRoKCksIHNpemUuaGVpZ2h0KCksIGZhbHNlKTsKKyAgICBpZiAoIWNh
bnZhcykgewogICAgICAgICBzdWNjZXNzID0gZmFsc2U7CiAgICAgICAgIHJldHVybjsKICAgICB9
CiAKLSAgICBtX2RhdGEubV9wbGF0Zm9ybUNvbnRleHQuc2V0Q2FudmFzKCZtX2RhdGEubV9jYW52
YXMpOworICAgIG1fZGF0YS5tX2NhbnZhcyA9IGNhbnZhczsKKyAgICBtX2RhdGEubV9wbGF0Zm9y
bUNvbnRleHQuc2V0Q2FudmFzKG1fZGF0YS5tX2NhbnZhcy5nZXQoKSk7CiAgICAgbV9jb250ZXh0
LnNldChuZXcgR3JhcGhpY3NDb250ZXh0KCZtX2RhdGEubV9wbGF0Zm9ybUNvbnRleHQpKTsKICAg
ICBtX2NvbnRleHQtPnBsYXRmb3JtQ29udGV4dCgpLT5zZXREcmF3aW5nVG9JbWFnZUJ1ZmZlcih0
cnVlKTsKIAogICAgIC8vIE1ha2UgdGhlIGJhY2tncm91bmQgdHJhbnNwYXJlbnQuIEl0IHdvdWxk
IGJlIG5pY2UgaWYgdGhpcyB3YXNuJ3QKICAgICAvLyByZXF1aXJlZCwgYnV0IHRoZSBjYW52YXMg
aXMgY3VycmVudGx5IGZpbGxlZCB3aXRoIHRoZSBtYWdpYyB0cmFuc3BhcmVuY3kKICAgICAvLyBj
b2xvci4gQ2FuIHdlIGhhdmUgYW5vdGhlciB3YXkgdG8gbWFuYWdlIHRoaXM/Ci0gICAgbV9kYXRh
Lm1fY2FudmFzLmRyYXdBUkdCKDAsIDAsIDAsIDAsIFNrWGZlcm1vZGU6OmtDbGVhcl9Nb2RlKTsK
KyAgICBtX2RhdGEubV9jYW52YXMtPmRyYXdBUkdCKDAsIDAsIDAsIDAsIFNrWGZlcm1vZGU6OmtD
bGVhcl9Nb2RlKTsKICAgICBzdWNjZXNzID0gdHJ1ZTsKIH0KIApJbmRleDogU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9JbWFnZVNraWEuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3NraWEvSW1hZ2VTa2lhLmNwcAkocmV2aXNp
b24gODM0ODQpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9za2lhL0ltYWdl
U2tpYS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI2MiwxMiArMjYyLDE3IEBAIHN0YXRpYyB2b2lk
IHBhaW50U2tCaXRtYXAoUGxhdGZvcm1Db250ZXgKICAgICBwYWludC5zZXRBbHBoYShwbGF0Zm9y
bUNvbnRleHQtPmdldE5vcm1hbGl6ZWRBbHBoYSgpKTsKICAgICBwYWludC5zZXRMb29wZXIocGxh
dGZvcm1Db250ZXh0LT5nZXREcmF3TG9vcGVyKCkpOwogCi0gICAgc2tpYTo6UGxhdGZvcm1DYW52
YXMqIGNhbnZhcyA9IHBsYXRmb3JtQ29udGV4dC0+Y2FudmFzKCk7CisgICAgU2tDYW52YXMqIGNh
bnZhcyA9IHBsYXRmb3JtQ29udGV4dC0+Y2FudmFzKCk7CiAKLSAgICBSZXNhbXBsaW5nTW9kZSBy
ZXNhbXBsaW5nID0gcGxhdGZvcm1Db250ZXh0LT5pc1ByaW50aW5nKCkgPyBSRVNBTVBMRV9OT05F
IDoKKyAgICBSZXNhbXBsaW5nTW9kZSByZXNhbXBsaW5nOworI2lmIEVOQUJMRShTS0lBX0dQVSkK
KyAgICByZXNhbXBsaW5nID0gUkVTQU1QTEVfTk9ORTsKKyNlbHNlCisgICAgcmVzYW1wbGluZyA9
IHBsYXRmb3JtQ29udGV4dC0+cHJpbnRpbmcoKSA/IFJFU0FNUExFX05PTkUgOgogICAgICAgICBj
b21wdXRlUmVzYW1wbGluZ01vZGUocGxhdGZvcm1Db250ZXh0LCBiaXRtYXAsIHNyY1JlY3Qud2lk
dGgoKSwgc3JjUmVjdC5oZWlnaHQoKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNr
U2NhbGFyVG9GbG9hdChkZXN0UmVjdC53aWR0aCgpKSwKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIFNrU2NhbGFyVG9GbG9hdChkZXN0UmVjdC5oZWlnaHQoKSkpOworI2VuZGlmCiAgICAg
aWYgKHJlc2FtcGxpbmcgPT0gUkVTQU1QTEVfQVdFU09NRSkgewogICAgICAgICBkcmF3UmVzYW1w
bGVkQml0bWFwKCpjYW52YXMsIHBhaW50LCBiaXRtYXAsIHNyY1JlY3QsIGRlc3RSZWN0KTsKICAg
ICB9IGVsc2UgewpAQCAtMzYzLDEzICszNjgsMTcgQEAgdm9pZCBJbWFnZTo6ZHJhd1BhdHRlcm4o
R3JhcGhpY3NDb250ZXh0KgogCiAgICAgLy8gQ29tcHV0ZSB0aGUgcmVzYW1wbGluZyBtb2RlLgog
ICAgIFJlc2FtcGxpbmdNb2RlIHJlc2FtcGxpbmc7Ci0gICAgaWYgKGNvbnRleHQtPnBsYXRmb3Jt
Q29udGV4dCgpLT5pc1ByaW50aW5nKCkpCisjaWYgRU5BQkxFKFNLSUFfR1BVKQorICAgIHJlc2Ft
cGxpbmcgPSBSRVNBTVBMRV9MSU5FQVI7CisjZWxzZQorICAgIGlmIChjb250ZXh0LT5wbGF0Zm9y
bUNvbnRleHQoKS0+cHJpbnRpbmcoKSkKICAgICAgIHJlc2FtcGxpbmcgPSBSRVNBTVBMRV9MSU5F
QVI7CiAgICAgZWxzZSB7CiAgICAgICByZXNhbXBsaW5nID0gY29tcHV0ZVJlc2FtcGxpbmdNb2Rl
KGNvbnRleHQtPnBsYXRmb3JtQ29udGV4dCgpLCAqYml0bWFwLAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBzcmNSZWN0LndpZHRoKCksIHNyY1JlY3QuaGVpZ2h0KCks
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc3RCaXRtYXBXaWR0
aCwgZGVzdEJpdG1hcEhlaWdodCk7CiAgICAgfQorI2VuZGlmCiAKICAgICAvLyBMb2FkIHRoZSB0
cmFuc2Zvcm0gV2ViS2l0IHJlcXVlc3RlZC4KICAgICBTa01hdHJpeCBtYXRyaXgocGF0dGVyblRy
YW5zZm9ybSk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9za2lhL1Bs
YXRmb3JtQ29udGV4dFNraWEuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL3NraWEvUGxhdGZvcm1Db250ZXh0U2tpYS5jcHAJKHJldmlzaW9uIDgzNDg0
KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9QbGF0Zm9ybUNvbnRl
eHRTa2lhLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjEzLDggKzIxMyw5IEBAIFNrQ29sb3IgUGxh
dGZvcm1Db250ZXh0U2tpYTo6U3RhdGU6OmFwcGwKIC8vIFBsYXRmb3JtQ29udGV4dFNraWEgLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAK
IC8vIERhbmdlcjogY2FudmFzIGNhbiBiZSBOVUxMLgotUGxhdGZvcm1Db250ZXh0U2tpYTo6UGxh
dGZvcm1Db250ZXh0U2tpYShza2lhOjpQbGF0Zm9ybUNhbnZhcyogY2FudmFzKQorUGxhdGZvcm1D
b250ZXh0U2tpYTo6UGxhdGZvcm1Db250ZXh0U2tpYShTa0NhbnZhcyogY2FudmFzKQogICAgIDog
bV9jYW52YXMoY2FudmFzKQorICAgICwgbV9wcmludGluZyhmYWxzZSkKICAgICAsIG1fZHJhd2lu
Z1RvSW1hZ2VCdWZmZXIoZmFsc2UpCiAgICAgLCBtX3VzZUdQVShmYWxzZSkKICNpZiBFTkFCTEUo
QUNDRUxFUkFURURfMkRfQ0FOVkFTKQpAQCAtMjQwLDcgKzI0MSw3IEBAIFBsYXRmb3JtQ29udGV4
dFNraWE6On5QbGF0Zm9ybUNvbnRleHRTa2kKICNlbmRpZgogfQogCi12b2lkIFBsYXRmb3JtQ29u
dGV4dFNraWE6OnNldENhbnZhcyhza2lhOjpQbGF0Zm9ybUNhbnZhcyogY2FudmFzKQordm9pZCBQ
bGF0Zm9ybUNvbnRleHRTa2lhOjpzZXRDYW52YXMoU2tDYW52YXMqIGNhbnZhcykKIHsKICAgICBt
X2NhbnZhcyA9IGNhbnZhczsKIH0KQEAgLTYwOSwyMSArNjEwLDEyIEBAIGNvbnN0IFNrQml0bWFw
KiBQbGF0Zm9ybUNvbnRleHRTa2lhOjpiaXQKICAgICByZXR1cm4gJm1fY2FudmFzLT5nZXREZXZp
Y2UoKS0+YWNjZXNzQml0bWFwKGZhbHNlKTsKIH0KIAotYm9vbCBQbGF0Zm9ybUNvbnRleHRTa2lh
Ojppc1ByaW50aW5nKCkKLXsKLSNpZiBFTkFCTEUoU0tJQV9HUFUpCi0gICAgcmV0dXJuIHRydWU7
Ci0jZWxzZQotICAgIHJldHVybiBtX2NhbnZhcy0+Z2V0VG9wUGxhdGZvcm1EZXZpY2UoKS5Jc1Zl
Y3RvcmlhbCgpOwotI2VuZGlmCi19Ci0KIGJvb2wgUGxhdGZvcm1Db250ZXh0U2tpYTo6aXNOYXRp
dmVGb250UmVuZGVyaW5nQWxsb3dlZCgpCiB7CiAjaWYgRU5BQkxFKFNLSUFfR1BVKQogICAgIHJl
dHVybiBmYWxzZTsKICNlbHNlCi0gICAgcmV0dXJuIG1fY2FudmFzLT5nZXRUb3BQbGF0Zm9ybURl
dmljZSgpLklzTmF0aXZlRm9udFJlbmRlcmluZ0FsbG93ZWQoKTsKKyAgICByZXR1cm4gc2tpYTo6
U3VwcG9ydHNQbGF0Zm9ybVBhaW50KG1fY2FudmFzKTsKICNlbmRpZgogfQogCkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9za2lhL1BsYXRmb3JtQ29udGV4dFNraWEuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9za2lhL1BsYXRm
b3JtQ29udGV4dFNraWEuaAkocmV2aXNpb24gODM0ODQpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9za2lhL1BsYXRmb3JtQ29udGV4dFNraWEuaAkod29ya2luZyBjb3B5KQpA
QCAtNzIsMTIgKzcyLDEyIEBAIGNsYXNzIFBsYXRmb3JtQ29udGV4dFNraWEgewogcHVibGljOgog
ICAgIC8vIEZvciBwcmludGluZywgdGhlcmUgc2hvdWxkbid0IGJlIGFueSBjYW52YXMuIGNhbnZh
cyBjYW4gYmUgTlVMTC4gSWYgeW91CiAgICAgLy8gc3VwcGx5IGEgTlVMTCBjYW52YXMsIHlvdSBj
YW4gYWxzbyBjYWxsIHNldENhbnZhcyBsYXRlci4KLSAgICBQbGF0Zm9ybUNvbnRleHRTa2lhKHNr
aWE6OlBsYXRmb3JtQ2FudmFzKik7CisgICAgUGxhdGZvcm1Db250ZXh0U2tpYShTa0NhbnZhcyop
OwogICAgIH5QbGF0Zm9ybUNvbnRleHRTa2lhKCk7CiAKICAgICAvLyBTZXRzIHRoZSBjYW52YXMg
YXNzb2NpYXRlZCB3aXRoIHRoaXMgY29udGV4dC4gVXNlIHdoZW4gc3VwcGx5aW5nIE5VTEwKICAg
ICAvLyB0byB0aGUgY29uc3RydWN0b3IuCi0gICAgdm9pZCBzZXRDYW52YXMoc2tpYTo6UGxhdGZv
cm1DYW52YXMqKTsKKyAgICB2b2lkIHNldENhbnZhcyhTa0NhbnZhcyopOwogCiAgICAgLy8gSWYg
ZmFsc2Ugd2UncmUgcmVuZGVyaW5nIHRvIGEgR3JhcGhpY3NDb250ZXh0IGZvciBhIHdlYiBwYWdl
LCBpZiBmYWxzZQogICAgIC8vIHdlJ3JlIG5vdCAoYXMgaXMgdGhlIGNhc2Ugd2hlbiByZW5kZXJp
bmcgdG8gYSBjYW52YXMgb2JqZWN0KS4KQEAgLTE0Nyw3ICsxNDcsNyBAQCBwdWJsaWM6CiAgICAg
U2tDb2xvciBlZmZlY3RpdmVTdHJva2VDb2xvcigpIGNvbnN0OwogCiAgICAgLy8gUmV0dXJucyB0
aGUgY2FudmFzIHVzZWQgZm9yIHBhaW50aW5nLCBOT1QgZ3VhcmFudGVlZCB0byBiZSBub24tbnVs
bC4KLSAgICBza2lhOjpQbGF0Zm9ybUNhbnZhcyogY2FudmFzKCkgeyByZXR1cm4gbV9jYW52YXM7
IH0KKyAgICBTa0NhbnZhcyogY2FudmFzKCkgeyByZXR1cm4gbV9jYW52YXM7IH0KIAogICAgIElu
dGVycG9sYXRpb25RdWFsaXR5IGludGVycG9sYXRpb25RdWFsaXR5KCkgY29uc3Q7CiAgICAgdm9p
ZCBzZXRJbnRlcnBvbGF0aW9uUXVhbGl0eShJbnRlcnBvbGF0aW9uUXVhbGl0eSBpbnRlcnBvbGF0
aW9uUXVhbGl0eSk7CkBAIC0xNjMsNyArMTYzLDggQEAgcHVibGljOgogICAgIC8vIFJldHVybnMg
aWYgdGhlIGNvbnRleHQgaXMgYSBwcmludGluZyBjb250ZXh0IGluc3RlYWQgb2YgYSBkaXNwbGF5
CiAgICAgLy8gY29udGV4dC4gQml0bWFwIHNob3VsZG4ndCBiZSByZXNhbXBsZWQgd2hlbiBwcmlu
dGluZyB0byBrZWVwIHRoZSBiZXN0CiAgICAgLy8gcG9zc2libGUgcXVhbGl0eS4KLSAgICBib29s
IGlzUHJpbnRpbmcoKTsKKyAgICBib29sIHByaW50aW5nKCkgY29uc3QgeyByZXR1cm4gbV9wcmlu
dGluZzsgfQorICAgIHZvaWQgc2V0UHJpbnRpbmcoYm9vbCBwKSB7IG1fcHJpbnRpbmcgPSBwOyB9
CiAKICAgICAvLyBSZXR1cm5zIGlmIHRoZSBjb250ZXh0IGFsbG93cyByZW5kZXJpbmcgb2YgZm9u
dHMgdXNpbmcgbmF0aXZlIHBsYXRmb3JtCiAgICAgLy8gQVBJcy4gSWYgZmFsc2UgaXMgcmV0dXJu
ZWQgZm9udCByZW5kZXJpbmcgaXMgcGVyZm9ybWVkIHVzaW5nIHRoZSBza2lhCkBAIC0xODUsMTAg
KzE4NiwxMCBAQCBwdWJsaWM6CiAgICAgR0xFUzJDYW52YXMqIGdwdUNhbnZhcygpIGNvbnN0IHsg
cmV0dXJuIDA7IH0KICNlbmRpZgogICAgIC8vIENhbGwgdGhlc2UgYmVmb3JlIG1ha2luZyBhIGNh
bGwgdGhhdCBtYW5pcHVsYXRlcyB0aGUgdW5kZXJseWluZwotICAgIC8vIHNraWE6OlBsYXRmb3Jt
Q2FudmFzIG9yIFdlYkNvcmU6OkdMRVMyQ2FudmFzCisgICAgLy8gU2tDYW52YXMgb3IgV2ViQ29y
ZTo6R0xFUzJDYW52YXMKICAgICB2b2lkIHByZXBhcmVGb3JTb2Z0d2FyZURyYXcoKSBjb25zdDsK
ICAgICB2b2lkIHByZXBhcmVGb3JIYXJkd2FyZURyYXcoKSBjb25zdDsKLSAgICAvLyBDYWxsIHRv
IGZvcmNlIHRoZSBza2lhOjpQbGF0Zm9ybUNhbnZhcyB0byBjb250YWluIGFsbCByZW5kZXJpbmcg
cmVzdWx0cy4KKyAgICAvLyBDYWxsIHRvIGZvcmNlIHRoZSBTa0NhbnZhcyB0byBjb250YWluIGFs
bCByZW5kZXJpbmcgcmVzdWx0cy4KICAgICB2b2lkIHN5bmNTb2Z0d2FyZUNhbnZhcygpIGNvbnN0
OwogICAgIHZvaWQgbWFya0RpcnR5UmVjdChjb25zdCBJbnRSZWN0JiByZWN0KTsKIApAQCAtMjA1
LDcgKzIwNiw3IEBAIHByaXZhdGU6CiAgICAgc3RydWN0IFN0YXRlOwogCiAgICAgLy8gTlVMTCBp
bmRpY2F0ZXMgcGFpbnRpbmcgaXMgZGlzYWJsZWQuIE5ldmVyIGRlbGV0ZSB0aGlzIG9iamVjdC4K
LSAgICBza2lhOjpQbGF0Zm9ybUNhbnZhcyogbV9jYW52YXM7CisgICAgU2tDYW52YXMqIG1fY2Fu
dmFzOwogCiAgICAgLy8gU3RhdGVzIHN0YWNrLiBFbmFibGVzIGxvY2FsIGRyYXdpbmcgc3RhdGUg
Y2hhbmdlIHdpdGggc2F2ZSgpL3Jlc3RvcmUoKQogICAgIC8vIGNhbGxzLgpAQCAtMjE4LDYgKzIx
OSw3IEBAIHByaXZhdGU6CiAgICAgLy8gVmFsdWVzIGFyZSB1c2VkIGluIEltYWdlU2tpYS5jcHAK
ICAgICBJbnRTaXplIG1faW1hZ2VSZXNhbXBsaW5nSGludFNyY1NpemU7CiAgICAgRmxvYXRTaXpl
IG1faW1hZ2VSZXNhbXBsaW5nSGludERzdFNpemU7CisgICAgYm9vbCBtX3ByaW50aW5nOwogICAg
IGJvb2wgbV9kcmF3aW5nVG9JbWFnZUJ1ZmZlcjsKICAgICBib29sIG1fdXNlR1BVOwogI2lmIEVO
QUJMRShBQ0NFTEVSQVRFRF8yRF9DQU5WQVMpCkluZGV4OiBTb3VyY2UvV2ViS2l0L2Nocm9taXVt
L0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxv
ZwkocmV2aXNpb24gODM0ODQpCisrKyBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwko
d29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDIxIEBACisyMDExLTA0LTExICBBbG9rIFByaXlhZGFy
c2hpICA8YWxva3BAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAo
T09QUyEpLgorCisgICAgICAgIFJlbW92ZSBkZXBlbmRlbmN5IG9uIGNocm9taXVtIHNraWE6OlBs
YXRmb3JtQ2FudmFzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD01NzU2MworCisgICAgICAgICogREVQUzoKKyAgICAgICAgKiBwdWJsaWMvV2ViQ2FudmFz
Lmg6CisgICAgICAgICogc3JjL1dlYkZyYW1lSW1wbC5jcHA6CisgICAgICAgIChXZWJLaXQ6Oldl
YkZyYW1lSW1wbDo6cHJpbnRQYWdlKToKKyAgICAgICAgKiB0ZXN0cy9UcmFuc3BhcmVuY3lXaW5U
ZXN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmRyYXdOYXRpdmVSZWN0KToKKyAgICAgICAgKFdl
YkNvcmU6OmdldFBpeGVsQXQpOgorICAgICAgICAoV2ViQ29yZTo6Y2xlYXJUb3BMYXllckFscGhh
Q2hhbm5lbCk6CisgICAgICAgIChXZWJDb3JlOjpjbGVhclRvcExheWVyQWxwaGFQaXhlbCk6Cisg
ICAgICAgIChXZWJDb3JlOjpURVNUKToKKwogMjAxMS0wNC0wNSAgSGFucyBXZW5uYm9yZyAgPGhh
bnNAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFJldmlld2VkIGJ5IFN0ZXZlIEJsb2NrLgpJbmRl
eDogU291cmNlL1dlYktpdC9jaHJvbWl1bS9ERVBTCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJL
aXQvY2hyb21pdW0vREVQUwkocmV2aXNpb24gODM0ODQpCisrKyBTb3VyY2UvV2ViS2l0L2Nocm9t
aXVtL0RFUFMJKHdvcmtpbmcgY29weSkKQEAgLTMyLDcgKzMyLDcgQEAKIAogdmFycyA9IHsKICAg
J2Nocm9taXVtX3N2bic6ICdodHRwOi8vc3JjLmNocm9taXVtLm9yZy9zdm4vdHJ1bmsvc3JjJywK
LSAgJ2Nocm9taXVtX3Jldic6ICc4MDc2NycKKyAgJ2Nocm9taXVtX3Jldic6ICc4MTEwNycKIH0K
IAogZGVwcyA9IHsKSW5kZXg6IFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYkNhbnZh
cy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYkNhbnZh
cy5oCShyZXZpc2lvbiA4MzQ4NCkKKysrIFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vcHVibGljL1dl
YkNhbnZhcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNCw3ICszNCw3IEBACiAjaW5jbHVkZSAiV2Vi
Q29tbW9uLmgiCiAKICNpZiBXRUJLSVRfVVNJTkdfU0tJQQotbmFtZXNwYWNlIHNraWEgeyBjbGFz
cyBQbGF0Zm9ybUNhbnZhczsgfQorY2xhc3MgU2tDYW52YXM7CiAjZWxpZiBXRUJLSVRfVVNJTkdf
Q0cKIHN0cnVjdCBDR0NvbnRleHQ7CiAjZW5kaWYKQEAgLTQyLDcgKzQyLDcgQEAgc3RydWN0IENH
Q29udGV4dDsKIG5hbWVzcGFjZSBXZWJLaXQgewogCiAjaWYgV0VCS0lUX1VTSU5HX1NLSUEKLXR5
cGVkZWYgc2tpYTo6UGxhdGZvcm1DYW52YXMgV2ViQ2FudmFzOwordHlwZWRlZiBTa0NhbnZhcyBX
ZWJDYW52YXM7CiAjZWxpZiBXRUJLSVRfVVNJTkdfQ0cKIHR5cGVkZWYgc3RydWN0IENHQ29udGV4
dCBXZWJDYW52YXM7CiAjZWxzZQpJbmRleDogU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2Vi
RnJhbWVJbXBsLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9X
ZWJGcmFtZUltcGwuY3BwCShyZXZpc2lvbiA4MzQ4NCkKKysrIFNvdXJjZS9XZWJLaXQvY2hyb21p
dW0vc3JjL1dlYkZyYW1lSW1wbC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE0MDksNyArMTQwOSwx
MyBAQCBmbG9hdCBXZWJGcmFtZUltcGw6OnByaW50UGFnZShpbnQgcGFnZSwKICAgICAgICAgcmV0
dXJuIDA7CiAgICAgfQogCi0gICAgcmV0dXJuIG1fcHJpbnRDb250ZXh0LT5zcG9vbFBhZ2UoR3Jh
cGhpY3NDb250ZXh0QnVpbGRlcihjYW52YXMpLmNvbnRleHQoKSwgcGFnZSk7CisgICAgR3JhcGhp
Y3NDb250ZXh0QnVpbGRlciBidWlsZGVyKGNhbnZhcyk7CisgICAgR3JhcGhpY3NDb250ZXh0JiBn
YyA9IGJ1aWxkZXIuY29udGV4dCgpOworI2lmIFdFQktJVF9VU0lOR19TS0lBCisgICAgZ2MucGxh
dGZvcm1Db250ZXh0KCktPnNldFByaW50aW5nKHRydWUpOworI2VuZGlmCisKKyAgICByZXR1cm4g
bV9wcmludENvbnRleHQtPnNwb29sUGFnZShnYywgcGFnZSk7CiB9CiAKIHZvaWQgV2ViRnJhbWVJ
bXBsOjpwcmludEVuZCgpCkluZGV4OiBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL1RyYW5z
cGFyZW5jeVdpblRlc3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvY2hyb21pdW0v
dGVzdHMvVHJhbnNwYXJlbmN5V2luVGVzdC5jcHAJKHJldmlzaW9uIDgzNDg0KQorKysgU291cmNl
L1dlYktpdC9jaHJvbWl1bS90ZXN0cy9UcmFuc3BhcmVuY3lXaW5UZXN0LmNwcAkod29ya2luZyBj
b3B5KQpAQCAtNTAsOCArNTAsOCBAQCBzdGF0aWMgRmxvYXRSZWN0IFJFQ1RUb0Zsb2F0UmVjdChj
b25zdCBSCiBzdGF0aWMgdm9pZCBkcmF3TmF0aXZlUmVjdChHcmFwaGljc0NvbnRleHQqIGNvbnRl
eHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgeCwgaW50IHksIGludCB3LCBpbnQg
aCkKIHsKLSAgICBza2lhOjpQbGF0Zm9ybUNhbnZhcyogY2FudmFzID0gY29udGV4dC0+cGxhdGZv
cm1Db250ZXh0KCktPmNhbnZhcygpOwotICAgIEhEQyBkYyA9IGNhbnZhcy0+YmVnaW5QbGF0Zm9y
bVBhaW50KCk7CisgICAgU2tDYW52YXMqIGNhbnZhcyA9IGNvbnRleHQtPnBsYXRmb3JtQ29udGV4
dCgpLT5jYW52YXMoKTsKKyAgICBIREMgZGMgPSBza2lhOjpCZWdpblBsYXRmb3JtUGFpbnQoY2Fu
dmFzKTsKIAogICAgIFJFQ1QgaW5uZXJSYzsKICAgICBpbm5lclJjLmxlZnQgPSB4OwpAQCAtNjEs
MTMgKzYxLDEyIEBAIHN0YXRpYyB2b2lkIGRyYXdOYXRpdmVSZWN0KEdyYXBoaWNzQ29udGUKICAg
ICBGaWxsUmVjdChkYywgJmlubmVyUmMsCiAgICAgICAgICAgICAgcmVpbnRlcnByZXRfY2FzdDxI
QlJVU0g+KEdldFN0b2NrT2JqZWN0KEJMQUNLX0JSVVNIKSkpOwogCi0gICAgY2FudmFzLT5lbmRQ
bGF0Zm9ybVBhaW50KCk7CisgICAgc2tpYTo6RW5kUGxhdGZvcm1QYWludChjYW52YXMpOwogfQog
CiBzdGF0aWMgQ29sb3IgZ2V0UGl4ZWxBdChHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIGludCB4
LCBpbnQgeSkKIHsKLSAgICBjb25zdCBTa0JpdG1hcCYgYml0bWFwID0gY29udGV4dC0+cGxhdGZv
cm1Db250ZXh0KCktPmNhbnZhcygpLT4KLSAgICAgICAgZ2V0VG9wUGxhdGZvcm1EZXZpY2UoKS5h
Y2Nlc3NCaXRtYXAoZmFsc2UpOworICAgIGNvbnN0IFNrQml0bWFwJiBiaXRtYXAgPSBjb250ZXh0
LT5wbGF0Zm9ybUNvbnRleHQoKS0+Y2FudmFzKCktPmdldFRvcERldmljZSgpLT5hY2Nlc3NCaXRt
YXAoZmFsc2UpOwogICAgIHJldHVybiBDb2xvcigqcmVpbnRlcnByZXRfY2FzdDxjb25zdCBSR0JB
MzIqPihiaXRtYXAuZ2V0QWRkcjMyKHgsIHkpKSk7CiB9CiAKQEAgLTc1LDggKzc0LDcgQEAgc3Rh
dGljIENvbG9yIGdldFBpeGVsQXQoR3JhcGhpY3NDb250ZXh0KgogLy8gV2luZG93cyBtZXNzaW5n
IGl0IHVwLgogc3RhdGljIHZvaWQgY2xlYXJUb3BMYXllckFscGhhQ2hhbm5lbChHcmFwaGljc0Nv
bnRleHQqIGNvbnRleHQpCiB7Ci0gICAgU2tCaXRtYXAmIGJpdG1hcCA9IGNvbnN0X2Nhc3Q8U2tC
aXRtYXAmPihjb250ZXh0LT5wbGF0Zm9ybUNvbnRleHQoKS0+Ci0gICAgICAgIGNhbnZhcygpLT5n
ZXRUb3BQbGF0Zm9ybURldmljZSgpLmFjY2Vzc0JpdG1hcChmYWxzZSkpOworICAgIFNrQml0bWFw
JiBiaXRtYXAgPSBjb25zdF9jYXN0PFNrQml0bWFwJj4oY29udGV4dC0+cGxhdGZvcm1Db250ZXh0
KCktPmNhbnZhcygpLT5nZXRUb3BEZXZpY2UoKS0+YWNjZXNzQml0bWFwKGZhbHNlKSk7CiAgICAg
Zm9yIChpbnQgeSA9IDA7IHkgPCBiaXRtYXAuaGVpZ2h0KCk7IHkrKykgewogICAgICAgICB1aW50
MzJfdCogcm93ID0gYml0bWFwLmdldEFkZHIzMigwLCB5KTsKICAgICAgICAgZm9yIChpbnQgeCA9
IDA7IHggPCBiaXRtYXAud2lkdGgoKTsgeCsrKQpAQCAtODcsOCArODUsNyBAQCBzdGF0aWMgdm9p
ZCBjbGVhclRvcExheWVyQWxwaGFDaGFubmVsKEdyCiAvLyBDbGVhcnMgdGhlIGFscGhhIGNoYW5u
ZWwgb24gdGhlIHNwZWNpZmllZCBwaXhlbC4KIHN0YXRpYyB2b2lkIGNsZWFyVG9wTGF5ZXJBbHBo
YVBpeGVsKEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgaW50IHgsIGludCB5KQogewotICAgIFNr
Qml0bWFwJiBiaXRtYXAgPSBjb25zdF9jYXN0PFNrQml0bWFwJj4oY29udGV4dC0+cGxhdGZvcm1D
b250ZXh0KCktPgotICAgICAgICBjYW52YXMoKS0+Z2V0VG9wUGxhdGZvcm1EZXZpY2UoKS5hY2Nl
c3NCaXRtYXAoZmFsc2UpKTsKKyAgICBTa0JpdG1hcCYgYml0bWFwID0gY29uc3RfY2FzdDxTa0Jp
dG1hcCY+KGNvbnRleHQtPnBsYXRmb3JtQ29udGV4dCgpLT5jYW52YXMoKS0+Z2V0VG9wRGV2aWNl
KCktPmFjY2Vzc0JpdG1hcChmYWxzZSkpOwogICAgICpiaXRtYXAuZ2V0QWRkcjMyKHgsIHkpICY9
IDB4MDBGRkZGRkY7CiB9CiAKQEAgLTU1OSw5ICs1NTYsNyBAQCBURVNUKFRyYW5zcGFyZW5jeVdp
biwgU2NhbGUpCiAgICAgICAgIC8vIHRoZSBoZWxwZXIgZ29lcyBvdXQgb2Ygc2NvcGUuIFdlIGRv
bid0IHdhbnQgdG8gY2FsbAogICAgICAgICAvLyBjbGVhclRvcExheWVyQWxwaGFDaGFubmVsIGJl
Y2F1c2UgdGhhdCB3aWxsIGFjdHVhbGx5IGNsZWFyIHRoZSB3aG9sZQogICAgICAgICAvLyBjYW52
YXMgKHNpbmNlIHdlIGhhdmUgbm8gZXh0cmEgbGF5ZXIhKS4KLSAgICAgICAgU2tCaXRtYXAmIGJp
dG1hcCA9IGNvbnN0X2Nhc3Q8U2tCaXRtYXAmPihoZWxwZXIuY29udGV4dCgpLT4KLSAgICAgICAg
ICAgIHBsYXRmb3JtQ29udGV4dCgpLT5jYW52YXMoKS0+Z2V0VG9wUGxhdGZvcm1EZXZpY2UoKS4K
LSAgICAgICAgICAgIGFjY2Vzc0JpdG1hcChmYWxzZSkpOworICAgICAgICBTa0JpdG1hcCYgYml0
bWFwID0gY29uc3RfY2FzdDxTa0JpdG1hcCY+KGhlbHBlci5jb250ZXh0KCktPnBsYXRmb3JtQ29u
dGV4dCgpLT5jYW52YXMoKS0+Z2V0VG9wRGV2aWNlKCktPmFjY2Vzc0JpdG1hcChmYWxzZSkpOwog
ICAgICAgICAqYml0bWFwLmdldEFkZHIzMigyLCAyKSAmPSAweDAwRkZGRkZGOwogICAgICAgICBo
ZWxwZXIuY29tcG9zaXRlKCk7CiAgICAgfQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>89155</attachid>
            <date>2011-04-11 21:23:58 -0700</date>
            <delta_ts>2011-04-12 13:13:50 -0700</delta_ts>
            <desc>proposed patch</desc>
            <filename>skia.txt</filename>
            <type>text/plain</type>
            <size>19784</size>
            <attacher name="Alok Priyadarshi">alokp</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0ZvbnRDaHJv
bWl1bVdpbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vRm9udENocm9taXVtV2luLmNwcAkocmV2aXNpb24gODM1NTMpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9Gb250Q2hyb21pdW1XaW4uY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0xNjUsNyArMTY1LDcgQEAgdm9pZCBUcmFuc3BhcmVuY3lBd2Fy
ZUZvbnRQYWludGVyOjppbml0aQogCiAgICAgLy8gU2V0IHVwIHRoZSBEQywgdXNpbmcgdGhlIG9u
ZSBmcm9tIHRoZSB0cmFuc3BhcmVuY3kgaGVscGVyLgogICAgIGlmIChtX3RyYW5zcGFyZW5jeS5w
bGF0Zm9ybUNvbnRleHQoKSkgewotICAgICAgICBtX2hkYyA9IG1fdHJhbnNwYXJlbmN5LnBsYXRm
b3JtQ29udGV4dCgpLT5jYW52YXMoKS0+YmVnaW5QbGF0Zm9ybVBhaW50KCk7CisgICAgICAgIG1f
aGRjID0gc2tpYTo6QmVnaW5QbGF0Zm9ybVBhaW50KG1fdHJhbnNwYXJlbmN5LnBsYXRmb3JtQ29u
dGV4dCgpLT5jYW52YXMoKSk7CiAgICAgICAgIFNldFRleHRDb2xvcihtX2hkYywgc2tpYTo6U2tD
b2xvclRvQ09MT1JSRUYoY29sb3IpKTsKICAgICAgICAgU2V0QmtNb2RlKG1faGRjLCBUUkFOU1BB
UkVOVCk7CiAgICAgfQpAQCAtMTc5LDcgKzE3OSw3IEBAIFRyYW5zcGFyZW5jeUF3YXJlRm9udFBh
aW50ZXI6On5UcmFuc3BhcmUKICAgICBpZiAobV9jcmVhdGVkVHJhbnNwYXJlbmN5TGF5ZXIpCiAg
ICAgICAgIG1fZ3JhcGhpY3NDb250ZXh0LT5lbmRUcmFuc3BhcmVuY3lMYXllcigpOwogICAgIG1f
Z3JhcGhpY3NDb250ZXh0LT5yZXN0b3JlKCk7Ci0gICAgbV9wbGF0Zm9ybUNvbnRleHQtPmNhbnZh
cygpLT5lbmRQbGF0Zm9ybVBhaW50KCk7CisgICAgc2tpYTo6RW5kUGxhdGZvcm1QYWludChtX3Bs
YXRmb3JtQ29udGV4dC0+Y2FudmFzKCkpOwogfQogCiAvLyBTcGVjaWFsaXphdGlvbiBmb3Igc2lt
cGxlIEdseXBoQnVmZmVyIHBhaW50aW5nLgpAQCAtNTQyLDcgKzU0Miw3IEBAIHZvaWQgRm9udDo6
ZHJhd0NvbXBsZXhUZXh0KEdyYXBoaWNzQ29udGUKICAgICAvLyB0aGUgYmFzZWxpbmUsIHNvIHdl
IGhhdmUgdG8gc3VidHJhY3Qgb2ZmIHRoZSBhc2NlbnQuCiAgICAgc3RhdGUuZHJhdyhncmFwaGlj
c0NvbnRleHQsIGhkYywgbHJvdW5kZihwb2ludC54KCkpLCBscm91bmRmKHBvaW50LnkoKSAtIGZv
bnRNZXRyaWNzKCkuYXNjZW50KCkpLCBmcm9tLCB0byk7CiAKLSAgICBjb250ZXh0LT5jYW52YXMo
KS0+ZW5kUGxhdGZvcm1QYWludCgpOworICAgIHNraWE6OkVuZFBsYXRmb3JtUGFpbnQoY29udGV4
dC0+Y2FudmFzKCkpOwogfQogCiB2b2lkIEZvbnQ6OmRyYXdFbXBoYXNpc01hcmtzRm9yQ29tcGxl
eFRleHQoR3JhcGhpY3NDb250ZXh0KiAvKiBjb250ZXh0ICovLCBjb25zdCBUZXh0UnVuJiAvKiBy
dW4gKi8sIGNvbnN0IEF0b21pY1N0cmluZyYgLyogbWFyayAqLywgY29uc3QgRmxvYXRQb2ludCYg
LyogcG9pbnQgKi8sIGludCAvKiBmcm9tICovLCBpbnQgLyogdG8gKi8pIGNvbnN0CkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9JbWFnZUJ1ZmZlckRhdGEu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9JbWFnZUJ1ZmZlckRhdGEuaAkocmV2aXNpb24gODM1NTMpCisrKyBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9JbWFnZUJ1ZmZlckRhdGEuaAkod29ya2luZyBjb3B5
KQpAQCAtMzMsMTUgKzMzLDEzIEBACiAKICNpbmNsdWRlICJQbGF0Zm9ybUNvbnRleHRTa2lhLmgi
CiAKLSNpbmNsdWRlICJza2lhL2V4dC9wbGF0Zm9ybV9jYW52YXMuaCIKLQogbmFtZXNwYWNlIFdl
YkNvcmUgewogCiBjbGFzcyBJbWFnZUJ1ZmZlckRhdGEgewogcHVibGljOgogICAgIEltYWdlQnVm
ZmVyRGF0YShjb25zdCBJbnRTaXplJik7CiAKLSAgICBza2lhOjpQbGF0Zm9ybUNhbnZhcyBtX2Nh
bnZhczsKKyAgICBPd25QdHI8U2tDYW52YXM+IG1fY2FudmFzOwogICAgIFBsYXRmb3JtQ29udGV4
dFNraWEgbV9wbGF0Zm9ybUNvbnRleHQ7CiB9OwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllckNocm9taXVtLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJDaHJvbWl1bS5oCShy
ZXZpc2lvbiA4MzU1MykKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL0xheWVyQ2hyb21pdW0uaAkod29ya2luZyBjb3B5KQpAQCAtNTAsMTEgKzUwLDYgQEAKICNp
bmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdIYXNoLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3Ry
aW5nLmg+CiAKLQotbmFtZXNwYWNlIHNraWEgewotY2xhc3MgUGxhdGZvcm1DYW52YXM7Ci19Ci0K
IG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgQ0NMYXllckltcGw7CkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclJlbmRlcmVyQ2hyb21pdW0u
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9MYXllclJlbmRlcmVyQ2hyb21pdW0uaAkocmV2aXNpb24gODM1NTMpCisrKyBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclJlbmRlcmVyQ2hyb21pdW0uaAko
d29ya2luZyBjb3B5KQpAQCAtMTk0LDcgKzE5NCw3IEBAIHByaXZhdGU6CiAgICAgYm9vbCBtX2Nv
bXBvc2l0ZU9mZnNjcmVlbjsKIAogI2lmIFVTRShTS0lBKQotICAgIE93blB0cjxza2lhOjpQbGF0
Zm9ybUNhbnZhcz4gbV9yb290TGF5ZXJDYW52YXM7CisgICAgT3duUHRyPFNrQ2FudmFzPiBtX3Jv
b3RMYXllckNhbnZhczsKICAgICBPd25QdHI8UGxhdGZvcm1Db250ZXh0U2tpYT4gbV9yb290TGF5
ZXJTa2lhQ29udGV4dDsKICAgICBPd25QdHI8R3JhcGhpY3NDb250ZXh0PiBtX3Jvb3RMYXllckdy
YXBoaWNzQ29udGV4dDsKICNlbGlmIFBMQVRGT1JNKENHKQpJbmRleDogU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vUGxhdGZvcm1DYW52YXMuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1BsYXRmb3JtQ2Fu
dmFzLmNwcAkocmV2aXNpb24gODM1NTMpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9QbGF0Zm9ybUNhbnZhcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTUyLDcg
KzUyLDcgQEAgdm9pZCBQbGF0Zm9ybUNhbnZhczo6cmVzaXplKGNvbnN0IEludFNpegogewogICAg
IG1fc2l6ZSA9IHNpemU7CiAjaWYgVVNFKFNLSUEpCi0gICAgbV9za2lhQ2FudmFzID0gbmV3IHNr
aWE6OlBsYXRmb3JtQ2FudmFzKHNpemUud2lkdGgoKSwgc2l6ZS5oZWlnaHQoKSwgZmFsc2UpOwor
ICAgIG1fc2tpYUNhbnZhcyA9IHNraWE6OkNyZWF0ZUJpdG1hcENhbnZhcyhzaXplLndpZHRoKCks
IHNpemUuaGVpZ2h0KCksIGZhbHNlKTsKICNlbGlmIFBMQVRGT1JNKENHKQogICAgIHNpemVfdCBi
dWZmZXJTaXplID0gc2l6ZS53aWR0aCgpICogc2l6ZS5oZWlnaHQoKSAqIDQ7CiAgICAgbV9waXhl
bERhdGEgPSBhZG9wdEFycmF5UHRyKG5ldyB1aW50OF90W2J1ZmZlclNpemVdKTsKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1BsYXRmb3JtQ2FudmFzLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
UGxhdGZvcm1DYW52YXMuaAkocmV2aXNpb24gODM1NTMpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9QbGF0Zm9ybUNhbnZhcy5oCSh3b3JraW5nIGNvcHkpCkBA
IC0zOSw4ICszOSw4IEBACiAjZW5kaWYKIAogI2lmIFVTRShTS0lBKQotbmFtZXNwYWNlIHNraWEg
eyBjbGFzcyBQbGF0Zm9ybUNhbnZhczsgfQogY2xhc3MgU2tCaXRtYXA7CitjbGFzcyBTa0NhbnZh
czsKICNlbmRpZgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkBAIC05Nyw3ICs5Nyw3IEBAIHB1Ymxp
YzoKIAogcHJpdmF0ZToKICNpZiBVU0UoU0tJQSkKLSAgICBPd25QdHI8c2tpYTo6UGxhdGZvcm1D
YW52YXM+IG1fc2tpYUNhbnZhczsKKyAgICBPd25QdHI8U2tDYW52YXM+IG1fc2tpYUNhbnZhczsK
ICNlbGlmIFBMQVRGT1JNKENHKQogICAgIE93bkFycmF5UHRyPHVpbnQ4X3Q+IG1fcGl4ZWxEYXRh
OwogI2VuZGlmCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9UcmFuc3BhcmVuY3lXaW4uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL1RyYW5zcGFyZW5jeVdpbi5jcHAJKHJldmlzaW9uIDgzNTUz
KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vVHJhbnNwYXJl
bmN5V2luLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDksMTQgKzQ5LDE0IEBAIG5hbWVzcGFjZSB7
CiAvLyBpbnRvLiBCdWZmZXJzIGxhcmdlciB0aGFuIHRoaXMgd2lsbCBiZSBkZXN0cm95ZWQgd2hl
biB3ZSdyZSBkb25lIHdpdGggdGhlbS4KIGNvbnN0IGludCBtYXhDYWNoZWRCdWZmZXJQaXhlbFNp
emUgPSA2NTUzNjsKIAotaW5saW5lIHNraWE6OlBsYXRmb3JtQ2FudmFzKiBjYW52YXNGb3JDb250
ZXh0KGNvbnN0IEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCkKK2lubGluZSBTa0NhbnZhcyogY2Fu
dmFzRm9yQ29udGV4dChjb25zdCBHcmFwaGljc0NvbnRleHQmIGNvbnRleHQpCiB7CiAgICAgcmV0
dXJuIGNvbnRleHQucGxhdGZvcm1Db250ZXh0KCktPmNhbnZhcygpOwogfQogCiBpbmxpbmUgY29u
c3QgU2tCaXRtYXAmIGJpdG1hcEZvckNvbnRleHQoY29uc3QgR3JhcGhpY3NDb250ZXh0JiBjb250
ZXh0KQogewotICAgIHJldHVybiBjYW52YXNGb3JDb250ZXh0KGNvbnRleHQpLT5nZXRUb3BQbGF0
Zm9ybURldmljZSgpLmFjY2Vzc0JpdG1hcChmYWxzZSk7CisgICAgcmV0dXJuIGNhbnZhc0ZvckNv
bnRleHQoY29udGV4dCktPmdldFRvcERldmljZSgpLT5hY2Nlc3NCaXRtYXAoZmFsc2UpOwogfQog
CiB2b2lkIGNvbXBvc2l0ZVRvQ29weShjb25zdCBHcmFwaGljc0NvbnRleHQmIHNvdXJjZUxheWVy
cywKQEAgLTQ2Niw3ICs0NjYsNyBAQCB2b2lkIFRyYW5zcGFyZW5jeVdpbjo6Y29tcG9zaXRlVGV4
dENvbXBvCiAgICAgaWYgKCFtX3ZhbGlkTGF5ZXIpCiAgICAgICAgIHJldHVybjsKIAotICAgIGNv
bnN0IFNrQml0bWFwJiBiaXRtYXAgPSBtX2xheWVyQnVmZmVyLT5jb250ZXh0KCktPnBsYXRmb3Jt
Q29udGV4dCgpLT5jYW52YXMoKS0+Z2V0VG9wUGxhdGZvcm1EZXZpY2UoKS5hY2Nlc3NCaXRtYXAo
dHJ1ZSk7CisgICAgY29uc3QgU2tCaXRtYXAmIGJpdG1hcCA9IG1fbGF5ZXJCdWZmZXItPmNvbnRl
eHQoKS0+cGxhdGZvcm1Db250ZXh0KCktPmNhbnZhcygpLT5nZXRUb3BEZXZpY2UoKS0+YWNjZXNz
Qml0bWFwKHRydWUpOwogICAgIFNrQ29sb3IgdGV4dENvbG9yID0gbV90ZXh0Q29tcG9zaXRlQ29s
b3IucmdiKCk7CiAgICAgZm9yIChpbnQgeSA9IDA7IHkgPCBtX2xheWVyU2l6ZS5oZWlnaHQoKTsg
eSsrKSB7CiAgICAgICAgIHVpbnQzMl90KiByb3cgPSBiaXRtYXAuZ2V0QWRkcjMyKDAsIHkpOwpA
QCAtNTAyLDcgKzUwMiw3IEBAIHZvaWQgVHJhbnNwYXJlbmN5V2luOjptYWtlTGF5ZXJPcGFxdWUo
KQogICAgICAgICByZXR1cm47CiAKICAgICBTa0JpdG1hcCYgYml0bWFwID0gY29uc3RfY2FzdDxT
a0JpdG1hcCY+KG1fZHJhd0NvbnRleHQtPnBsYXRmb3JtQ29udGV4dCgpLT4KLSAgICAgICAgY2Fu
dmFzKCktPmdldFRvcFBsYXRmb3JtRGV2aWNlKCkuYWNjZXNzQml0bWFwKHRydWUpKTsKKyAgICAg
ICAgY2FudmFzKCktPmdldFRvcERldmljZSgpLT5hY2Nlc3NCaXRtYXAodHJ1ZSkpOwogICAgIGZv
ciAoaW50IHkgPSAwOyB5IDwgbV9sYXllclNpemUuaGVpZ2h0KCk7IHkrKykgewogICAgICAgICB1
aW50MzJfdCogcm93ID0gYml0bWFwLmdldEFkZHIzMigwLCB5KTsKICAgICAgICAgZm9yIChpbnQg
eCA9IDA7IHggPCBtX2xheWVyU2l6ZS53aWR0aCgpOyB4KyspCkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9za2lhL0ltYWdlQnVmZmVyU2tpYS5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9JbWFnZUJ1ZmZlclNraWEu
Y3BwCShyZXZpc2lvbiA4MzU1MykKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L3NraWEvSW1hZ2VCdWZmZXJTa2lhLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjYsMTkgKzY2LDIx
IEBAIEltYWdlQnVmZmVyOjpJbWFnZUJ1ZmZlcihjb25zdCBJbnRTaXplJgogICAgIDogbV9kYXRh
KHNpemUpCiAgICAgLCBtX3NpemUoc2l6ZSkKIHsKLSAgICBpZiAoIW1fZGF0YS5tX2NhbnZhcy5p
bml0aWFsaXplKHNpemUud2lkdGgoKSwgc2l6ZS5oZWlnaHQoKSwgZmFsc2UpKSB7CisgICAgU2tD
YW52YXMqIGNhbnZhcyA9IHNraWE6OkNyZWF0ZUJpdG1hcENhbnZhcyhzaXplLndpZHRoKCksIHNp
emUuaGVpZ2h0KCksIGZhbHNlKTsKKyAgICBpZiAoIWNhbnZhcykgewogICAgICAgICBzdWNjZXNz
ID0gZmFsc2U7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBtX2RhdGEubV9wbGF0Zm9y
bUNvbnRleHQuc2V0Q2FudmFzKCZtX2RhdGEubV9jYW52YXMpOworICAgIG1fZGF0YS5tX2NhbnZh
cyA9IGNhbnZhczsKKyAgICBtX2RhdGEubV9wbGF0Zm9ybUNvbnRleHQuc2V0Q2FudmFzKG1fZGF0
YS5tX2NhbnZhcy5nZXQoKSk7CiAgICAgbV9jb250ZXh0LnNldChuZXcgR3JhcGhpY3NDb250ZXh0
KCZtX2RhdGEubV9wbGF0Zm9ybUNvbnRleHQpKTsKICAgICBtX2NvbnRleHQtPnBsYXRmb3JtQ29u
dGV4dCgpLT5zZXREcmF3aW5nVG9JbWFnZUJ1ZmZlcih0cnVlKTsKIAogICAgIC8vIE1ha2UgdGhl
IGJhY2tncm91bmQgdHJhbnNwYXJlbnQuIEl0IHdvdWxkIGJlIG5pY2UgaWYgdGhpcyB3YXNuJ3QK
ICAgICAvLyByZXF1aXJlZCwgYnV0IHRoZSBjYW52YXMgaXMgY3VycmVudGx5IGZpbGxlZCB3aXRo
IHRoZSBtYWdpYyB0cmFuc3BhcmVuY3kKICAgICAvLyBjb2xvci4gQ2FuIHdlIGhhdmUgYW5vdGhl
ciB3YXkgdG8gbWFuYWdlIHRoaXM/Ci0gICAgbV9kYXRhLm1fY2FudmFzLmRyYXdBUkdCKDAsIDAs
IDAsIDAsIFNrWGZlcm1vZGU6OmtDbGVhcl9Nb2RlKTsKKyAgICBtX2RhdGEubV9jYW52YXMtPmRy
YXdBUkdCKDAsIDAsIDAsIDAsIFNrWGZlcm1vZGU6OmtDbGVhcl9Nb2RlKTsKICAgICBzdWNjZXNz
ID0gdHJ1ZTsKIH0KIApJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc2tp
YS9JbWFnZVNraWEuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL3NraWEvSW1hZ2VTa2lhLmNwcAkocmV2aXNpb24gODM1NTMpCisrKyBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9za2lhL0ltYWdlU2tpYS5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTI2MiwxMiArMjYyLDE3IEBAIHN0YXRpYyB2b2lkIHBhaW50U2tCaXRtYXAoUGxhdGZvcm1D
b250ZXgKICAgICBwYWludC5zZXRBbHBoYShwbGF0Zm9ybUNvbnRleHQtPmdldE5vcm1hbGl6ZWRB
bHBoYSgpKTsKICAgICBwYWludC5zZXRMb29wZXIocGxhdGZvcm1Db250ZXh0LT5nZXREcmF3TG9v
cGVyKCkpOwogCi0gICAgc2tpYTo6UGxhdGZvcm1DYW52YXMqIGNhbnZhcyA9IHBsYXRmb3JtQ29u
dGV4dC0+Y2FudmFzKCk7CisgICAgU2tDYW52YXMqIGNhbnZhcyA9IHBsYXRmb3JtQ29udGV4dC0+
Y2FudmFzKCk7CiAKLSAgICBSZXNhbXBsaW5nTW9kZSByZXNhbXBsaW5nID0gcGxhdGZvcm1Db250
ZXh0LT5pc1ByaW50aW5nKCkgPyBSRVNBTVBMRV9OT05FIDoKKyAgICBSZXNhbXBsaW5nTW9kZSBy
ZXNhbXBsaW5nOworI2lmIEVOQUJMRShTS0lBX0dQVSkKKyAgICByZXNhbXBsaW5nID0gUkVTQU1Q
TEVfTElORUFSOworI2Vsc2UKKyAgICByZXNhbXBsaW5nID0gcGxhdGZvcm1Db250ZXh0LT5wcmlu
dGluZygpID8gUkVTQU1QTEVfTk9ORSA6CiAgICAgICAgIGNvbXB1dGVSZXNhbXBsaW5nTW9kZShw
bGF0Zm9ybUNvbnRleHQsIGJpdG1hcCwgc3JjUmVjdC53aWR0aCgpLCBzcmNSZWN0LmhlaWdodCgp
LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU2tTY2FsYXJUb0Zsb2F0KGRlc3RSZWN0
LndpZHRoKCkpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU2tTY2FsYXJUb0Zsb2F0
KGRlc3RSZWN0LmhlaWdodCgpKSk7CisjZW5kaWYKICAgICBpZiAocmVzYW1wbGluZyA9PSBSRVNB
TVBMRV9BV0VTT01FKSB7CiAgICAgICAgIGRyYXdSZXNhbXBsZWRCaXRtYXAoKmNhbnZhcywgcGFp
bnQsIGJpdG1hcCwgc3JjUmVjdCwgZGVzdFJlY3QpOwogICAgIH0gZWxzZSB7CkBAIC0zNjMsMTMg
KzM2OCwxNyBAQCB2b2lkIEltYWdlOjpkcmF3UGF0dGVybihHcmFwaGljc0NvbnRleHQqCiAKICAg
ICAvLyBDb21wdXRlIHRoZSByZXNhbXBsaW5nIG1vZGUuCiAgICAgUmVzYW1wbGluZ01vZGUgcmVz
YW1wbGluZzsKLSAgICBpZiAoY29udGV4dC0+cGxhdGZvcm1Db250ZXh0KCktPmlzUHJpbnRpbmco
KSkKKyNpZiBFTkFCTEUoU0tJQV9HUFUpCisgICAgcmVzYW1wbGluZyA9IFJFU0FNUExFX0xJTkVB
UjsKKyNlbHNlCisgICAgaWYgKGNvbnRleHQtPnBsYXRmb3JtQ29udGV4dCgpLT5wcmludGluZygp
KQogICAgICAgcmVzYW1wbGluZyA9IFJFU0FNUExFX0xJTkVBUjsKICAgICBlbHNlIHsKICAgICAg
IHJlc2FtcGxpbmcgPSBjb21wdXRlUmVzYW1wbGluZ01vZGUoY29udGV4dC0+cGxhdGZvcm1Db250
ZXh0KCksICpiaXRtYXAsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHNyY1JlY3Qud2lkdGgoKSwgc3JjUmVjdC5oZWlnaHQoKSwKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgZGVzdEJpdG1hcFdpZHRoLCBkZXN0Qml0bWFwSGVpZ2h0KTsK
ICAgICB9CisjZW5kaWYKIAogICAgIC8vIExvYWQgdGhlIHRyYW5zZm9ybSBXZWJLaXQgcmVxdWVz
dGVkLgogICAgIFNrTWF0cml4IG1hdHJpeChwYXR0ZXJuVHJhbnNmb3JtKTsKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3NraWEvUGxhdGZvcm1Db250ZXh0U2tpYS5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9QbGF0
Zm9ybUNvbnRleHRTa2lhLmNwcAkocmV2aXNpb24gODM1NTMpCisrKyBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9za2lhL1BsYXRmb3JtQ29udGV4dFNraWEuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0yMTMsOCArMjEzLDkgQEAgU2tDb2xvciBQbGF0Zm9ybUNvbnRleHRTa2lhOjpTdGF0
ZTo6YXBwbAogLy8gUGxhdGZvcm1Db250ZXh0U2tpYSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAogLy8gRGFuZ2VyOiBjYW52YXMgY2Fu
IGJlIE5VTEwuCi1QbGF0Zm9ybUNvbnRleHRTa2lhOjpQbGF0Zm9ybUNvbnRleHRTa2lhKHNraWE6
OlBsYXRmb3JtQ2FudmFzKiBjYW52YXMpCitQbGF0Zm9ybUNvbnRleHRTa2lhOjpQbGF0Zm9ybUNv
bnRleHRTa2lhKFNrQ2FudmFzKiBjYW52YXMpCiAgICAgOiBtX2NhbnZhcyhjYW52YXMpCisgICAg
LCBtX3ByaW50aW5nKGZhbHNlKQogICAgICwgbV9kcmF3aW5nVG9JbWFnZUJ1ZmZlcihmYWxzZSkK
ICAgICAsIG1fdXNlR1BVKGZhbHNlKQogI2lmIEVOQUJMRShBQ0NFTEVSQVRFRF8yRF9DQU5WQVMp
CkBAIC0yNDAsNyArMjQxLDcgQEAgUGxhdGZvcm1Db250ZXh0U2tpYTo6flBsYXRmb3JtQ29udGV4
dFNraQogI2VuZGlmCiB9CiAKLXZvaWQgUGxhdGZvcm1Db250ZXh0U2tpYTo6c2V0Q2FudmFzKHNr
aWE6OlBsYXRmb3JtQ2FudmFzKiBjYW52YXMpCit2b2lkIFBsYXRmb3JtQ29udGV4dFNraWE6OnNl
dENhbnZhcyhTa0NhbnZhcyogY2FudmFzKQogewogICAgIG1fY2FudmFzID0gY2FudmFzOwogfQpA
QCAtNjA5LDIxICs2MTAsMTIgQEAgY29uc3QgU2tCaXRtYXAqIFBsYXRmb3JtQ29udGV4dFNraWE6
OmJpdAogICAgIHJldHVybiAmbV9jYW52YXMtPmdldERldmljZSgpLT5hY2Nlc3NCaXRtYXAoZmFs
c2UpOwogfQogCi1ib29sIFBsYXRmb3JtQ29udGV4dFNraWE6OmlzUHJpbnRpbmcoKQotewotI2lm
IEVOQUJMRShTS0lBX0dQVSkKLSAgICByZXR1cm4gdHJ1ZTsKLSNlbHNlCi0gICAgcmV0dXJuIG1f
Y2FudmFzLT5nZXRUb3BQbGF0Zm9ybURldmljZSgpLklzVmVjdG9yaWFsKCk7Ci0jZW5kaWYKLX0K
LQogYm9vbCBQbGF0Zm9ybUNvbnRleHRTa2lhOjppc05hdGl2ZUZvbnRSZW5kZXJpbmdBbGxvd2Vk
KCkKIHsKICNpZiBFTkFCTEUoU0tJQV9HUFUpCiAgICAgcmV0dXJuIGZhbHNlOwogI2Vsc2UKLSAg
ICByZXR1cm4gbV9jYW52YXMtPmdldFRvcFBsYXRmb3JtRGV2aWNlKCkuSXNOYXRpdmVGb250UmVu
ZGVyaW5nQWxsb3dlZCgpOworICAgIHJldHVybiBza2lhOjpTdXBwb3J0c1BsYXRmb3JtUGFpbnQo
bV9jYW52YXMpOwogI2VuZGlmCiB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL3NraWEvUGxhdGZvcm1Db250ZXh0U2tpYS5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3NraWEvUGxhdGZvcm1Db250ZXh0U2tpYS5oCShyZXZp
c2lvbiA4MzU1MykKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3NraWEvUGxh
dGZvcm1Db250ZXh0U2tpYS5oCSh3b3JraW5nIGNvcHkpCkBAIC03MiwxMiArNzIsMTIgQEAgY2xh
c3MgUGxhdGZvcm1Db250ZXh0U2tpYSB7CiBwdWJsaWM6CiAgICAgLy8gRm9yIHByaW50aW5nLCB0
aGVyZSBzaG91bGRuJ3QgYmUgYW55IGNhbnZhcy4gY2FudmFzIGNhbiBiZSBOVUxMLiBJZiB5b3UK
ICAgICAvLyBzdXBwbHkgYSBOVUxMIGNhbnZhcywgeW91IGNhbiBhbHNvIGNhbGwgc2V0Q2FudmFz
IGxhdGVyLgotICAgIFBsYXRmb3JtQ29udGV4dFNraWEoc2tpYTo6UGxhdGZvcm1DYW52YXMqKTsK
KyAgICBQbGF0Zm9ybUNvbnRleHRTa2lhKFNrQ2FudmFzKik7CiAgICAgflBsYXRmb3JtQ29udGV4
dFNraWEoKTsKIAogICAgIC8vIFNldHMgdGhlIGNhbnZhcyBhc3NvY2lhdGVkIHdpdGggdGhpcyBj
b250ZXh0LiBVc2Ugd2hlbiBzdXBwbHlpbmcgTlVMTAogICAgIC8vIHRvIHRoZSBjb25zdHJ1Y3Rv
ci4KLSAgICB2b2lkIHNldENhbnZhcyhza2lhOjpQbGF0Zm9ybUNhbnZhcyopOworICAgIHZvaWQg
c2V0Q2FudmFzKFNrQ2FudmFzKik7CiAKICAgICAvLyBJZiBmYWxzZSB3ZSdyZSByZW5kZXJpbmcg
dG8gYSBHcmFwaGljc0NvbnRleHQgZm9yIGEgd2ViIHBhZ2UsIGlmIGZhbHNlCiAgICAgLy8gd2Un
cmUgbm90IChhcyBpcyB0aGUgY2FzZSB3aGVuIHJlbmRlcmluZyB0byBhIGNhbnZhcyBvYmplY3Qp
LgpAQCAtMTQ3LDcgKzE0Nyw3IEBAIHB1YmxpYzoKICAgICBTa0NvbG9yIGVmZmVjdGl2ZVN0cm9r
ZUNvbG9yKCkgY29uc3Q7CiAKICAgICAvLyBSZXR1cm5zIHRoZSBjYW52YXMgdXNlZCBmb3IgcGFp
bnRpbmcsIE5PVCBndWFyYW50ZWVkIHRvIGJlIG5vbi1udWxsLgotICAgIHNraWE6OlBsYXRmb3Jt
Q2FudmFzKiBjYW52YXMoKSB7IHJldHVybiBtX2NhbnZhczsgfQorICAgIFNrQ2FudmFzKiBjYW52
YXMoKSB7IHJldHVybiBtX2NhbnZhczsgfQogCiAgICAgSW50ZXJwb2xhdGlvblF1YWxpdHkgaW50
ZXJwb2xhdGlvblF1YWxpdHkoKSBjb25zdDsKICAgICB2b2lkIHNldEludGVycG9sYXRpb25RdWFs
aXR5KEludGVycG9sYXRpb25RdWFsaXR5IGludGVycG9sYXRpb25RdWFsaXR5KTsKQEAgLTE2Myw3
ICsxNjMsOCBAQCBwdWJsaWM6CiAgICAgLy8gUmV0dXJucyBpZiB0aGUgY29udGV4dCBpcyBhIHBy
aW50aW5nIGNvbnRleHQgaW5zdGVhZCBvZiBhIGRpc3BsYXkKICAgICAvLyBjb250ZXh0LiBCaXRt
YXAgc2hvdWxkbid0IGJlIHJlc2FtcGxlZCB3aGVuIHByaW50aW5nIHRvIGtlZXAgdGhlIGJlc3QK
ICAgICAvLyBwb3NzaWJsZSBxdWFsaXR5LgotICAgIGJvb2wgaXNQcmludGluZygpOworICAgIGJv
b2wgcHJpbnRpbmcoKSBjb25zdCB7IHJldHVybiBtX3ByaW50aW5nOyB9CisgICAgdm9pZCBzZXRQ
cmludGluZyhib29sIHApIHsgbV9wcmludGluZyA9IHA7IH0KIAogICAgIC8vIFJldHVybnMgaWYg
dGhlIGNvbnRleHQgYWxsb3dzIHJlbmRlcmluZyBvZiBmb250cyB1c2luZyBuYXRpdmUgcGxhdGZv
cm0KICAgICAvLyBBUElzLiBJZiBmYWxzZSBpcyByZXR1cm5lZCBmb250IHJlbmRlcmluZyBpcyBw
ZXJmb3JtZWQgdXNpbmcgdGhlIHNraWEKQEAgLTE4NSwxMCArMTg2LDEwIEBAIHB1YmxpYzoKICAg
ICBHTEVTMkNhbnZhcyogZ3B1Q2FudmFzKCkgY29uc3QgeyByZXR1cm4gMDsgfQogI2VuZGlmCiAg
ICAgLy8gQ2FsbCB0aGVzZSBiZWZvcmUgbWFraW5nIGEgY2FsbCB0aGF0IG1hbmlwdWxhdGVzIHRo
ZSB1bmRlcmx5aW5nCi0gICAgLy8gc2tpYTo6UGxhdGZvcm1DYW52YXMgb3IgV2ViQ29yZTo6R0xF
UzJDYW52YXMKKyAgICAvLyBTa0NhbnZhcyBvciBXZWJDb3JlOjpHTEVTMkNhbnZhcwogICAgIHZv
aWQgcHJlcGFyZUZvclNvZnR3YXJlRHJhdygpIGNvbnN0OwogICAgIHZvaWQgcHJlcGFyZUZvckhh
cmR3YXJlRHJhdygpIGNvbnN0OwotICAgIC8vIENhbGwgdG8gZm9yY2UgdGhlIHNraWE6OlBsYXRm
b3JtQ2FudmFzIHRvIGNvbnRhaW4gYWxsIHJlbmRlcmluZyByZXN1bHRzLgorICAgIC8vIENhbGwg
dG8gZm9yY2UgdGhlIFNrQ2FudmFzIHRvIGNvbnRhaW4gYWxsIHJlbmRlcmluZyByZXN1bHRzLgog
ICAgIHZvaWQgc3luY1NvZnR3YXJlQ2FudmFzKCkgY29uc3Q7CiAgICAgdm9pZCBtYXJrRGlydHlS
ZWN0KGNvbnN0IEludFJlY3QmIHJlY3QpOwogCkBAIC0yMDUsNyArMjA2LDcgQEAgcHJpdmF0ZToK
ICAgICBzdHJ1Y3QgU3RhdGU7CiAKICAgICAvLyBOVUxMIGluZGljYXRlcyBwYWludGluZyBpcyBk
aXNhYmxlZC4gTmV2ZXIgZGVsZXRlIHRoaXMgb2JqZWN0LgotICAgIHNraWE6OlBsYXRmb3JtQ2Fu
dmFzKiBtX2NhbnZhczsKKyAgICBTa0NhbnZhcyogbV9jYW52YXM7CiAKICAgICAvLyBTdGF0ZXMg
c3RhY2suIEVuYWJsZXMgbG9jYWwgZHJhd2luZyBzdGF0ZSBjaGFuZ2Ugd2l0aCBzYXZlKCkvcmVz
dG9yZSgpCiAgICAgLy8gY2FsbHMuCkBAIC0yMTgsNiArMjE5LDcgQEAgcHJpdmF0ZToKICAgICAv
LyBWYWx1ZXMgYXJlIHVzZWQgaW4gSW1hZ2VTa2lhLmNwcAogICAgIEludFNpemUgbV9pbWFnZVJl
c2FtcGxpbmdIaW50U3JjU2l6ZTsKICAgICBGbG9hdFNpemUgbV9pbWFnZVJlc2FtcGxpbmdIaW50
RHN0U2l6ZTsKKyAgICBib29sIG1fcHJpbnRpbmc7CiAgICAgYm9vbCBtX2RyYXdpbmdUb0ltYWdl
QnVmZmVyOwogICAgIGJvb2wgbV91c2VHUFU7CiAjaWYgRU5BQkxFKEFDQ0VMRVJBVEVEXzJEX0NB
TlZBUykKSW5kZXg6IFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCShyZXZpc2lvbiA4MzU1NSkKKysr
IFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMg
KzEsMjEgQEAKKzIwMTEtMDQtMTEgIEFsb2sgUHJpeWFkYXJzaGkgIDxhbG9rcEBjaHJvbWl1bS5v
cmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgUmVt
b3ZlIGRlcGVuZGVuY3kgb24gY2hyb21pdW0gc2tpYTo6UGxhdGZvcm1DYW52YXMKKyAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTU3NTYzCisKKyAgICAgICAg
KiBERVBTOgorICAgICAgICAqIHB1YmxpYy9XZWJDYW52YXMuaDoKKyAgICAgICAgKiBzcmMvV2Vi
RnJhbWVJbXBsLmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViRnJhbWVJbXBsOjpwcmludFBhZ2Up
OgorICAgICAgICAqIHRlc3RzL1RyYW5zcGFyZW5jeVdpblRlc3QuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6ZHJhd05hdGl2ZVJlY3QpOgorICAgICAgICAoV2ViQ29yZTo6Z2V0UGl4ZWxBdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpjbGVhclRvcExheWVyQWxwaGFDaGFubmVsKToKKyAgICAgICAgKFdl
YkNvcmU6OmNsZWFyVG9wTGF5ZXJBbHBoYVBpeGVsKToKKyAgICAgICAgKFdlYkNvcmU6OlRFU1Qp
OgorCiAyMDExLTA0LTExICBKb2huIEJhdGVzICA8amJhdGVzQGdvb2dsZS5jb20+CiAKICAgICAg
ICAgUmV2aWV3ZWQgYnkgS2VubmV0aCBSdXNzZWxsLgpJbmRleDogU291cmNlL1dlYktpdC9jaHJv
bWl1bS9ERVBTCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vREVQUwkocmV2
aXNpb24gODM1NTMpCisrKyBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL0RFUFMJKHdvcmtpbmcgY29w
eSkKQEAgLTMyLDcgKzMyLDcgQEAKIAogdmFycyA9IHsKICAgJ2Nocm9taXVtX3N2bic6ICdodHRw
Oi8vc3JjLmNocm9taXVtLm9yZy9zdm4vdHJ1bmsvc3JjJywKLSAgJ2Nocm9taXVtX3Jldic6ICc4
MDg5MCcKKyAgJ2Nocm9taXVtX3Jldic6ICc4MTIwNicKIH0KIAogZGVwcyA9IHsKSW5kZXg6IFNv
dXJjZS9XZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYkNhbnZhcy5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYkNhbnZhcy5oCShyZXZpc2lvbiA4MzU1MykK
KysrIFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYkNhbnZhcy5oCSh3b3JraW5nIGNv
cHkpCkBAIC0zNCw3ICszNCw3IEBACiAjaW5jbHVkZSAiV2ViQ29tbW9uLmgiCiAKICNpZiBXRUJL
SVRfVVNJTkdfU0tJQQotbmFtZXNwYWNlIHNraWEgeyBjbGFzcyBQbGF0Zm9ybUNhbnZhczsgfQor
Y2xhc3MgU2tDYW52YXM7CiAjZWxpZiBXRUJLSVRfVVNJTkdfQ0cKIHN0cnVjdCBDR0NvbnRleHQ7
CiAjZW5kaWYKQEAgLTQyLDcgKzQyLDcgQEAgc3RydWN0IENHQ29udGV4dDsKIG5hbWVzcGFjZSBX
ZWJLaXQgewogCiAjaWYgV0VCS0lUX1VTSU5HX1NLSUEKLXR5cGVkZWYgc2tpYTo6UGxhdGZvcm1D
YW52YXMgV2ViQ2FudmFzOwordHlwZWRlZiBTa0NhbnZhcyBXZWJDYW52YXM7CiAjZWxpZiBXRUJL
SVRfVVNJTkdfQ0cKIHR5cGVkZWYgc3RydWN0IENHQ29udGV4dCBXZWJDYW52YXM7CiAjZWxzZQpJ
bmRleDogU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViRnJhbWVJbXBsLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJGcmFtZUltcGwuY3BwCShyZXZp
c2lvbiA4MzU1MykKKysrIFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYkZyYW1lSW1wbC5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTE0MDksNyArMTQwOSwxMyBAQCBmbG9hdCBXZWJGcmFtZUlt
cGw6OnByaW50UGFnZShpbnQgcGFnZSwKICAgICAgICAgcmV0dXJuIDA7CiAgICAgfQogCi0gICAg
cmV0dXJuIG1fcHJpbnRDb250ZXh0LT5zcG9vbFBhZ2UoR3JhcGhpY3NDb250ZXh0QnVpbGRlcihj
YW52YXMpLmNvbnRleHQoKSwgcGFnZSk7CisgICAgR3JhcGhpY3NDb250ZXh0QnVpbGRlciBidWls
ZGVyKGNhbnZhcyk7CisgICAgR3JhcGhpY3NDb250ZXh0JiBnYyA9IGJ1aWxkZXIuY29udGV4dCgp
OworI2lmIFdFQktJVF9VU0lOR19TS0lBCisgICAgZ2MucGxhdGZvcm1Db250ZXh0KCktPnNldFBy
aW50aW5nKHRydWUpOworI2VuZGlmCisKKyAgICByZXR1cm4gbV9wcmludENvbnRleHQtPnNwb29s
UGFnZShnYywgcGFnZSk7CiB9CiAKIHZvaWQgV2ViRnJhbWVJbXBsOjpwcmludEVuZCgpCkluZGV4
OiBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL1RyYW5zcGFyZW5jeVdpblRlc3QuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvVHJhbnNwYXJlbmN5V2lu
VGVzdC5jcHAJKHJldmlzaW9uIDgzNTUzKQorKysgU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0
cy9UcmFuc3BhcmVuY3lXaW5UZXN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTAsOCArNTAsOCBA
QCBzdGF0aWMgRmxvYXRSZWN0IFJFQ1RUb0Zsb2F0UmVjdChjb25zdCBSCiBzdGF0aWMgdm9pZCBk
cmF3TmF0aXZlUmVjdChHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBpbnQgeCwgaW50IHksIGludCB3LCBpbnQgaCkKIHsKLSAgICBza2lhOjpQbGF0
Zm9ybUNhbnZhcyogY2FudmFzID0gY29udGV4dC0+cGxhdGZvcm1Db250ZXh0KCktPmNhbnZhcygp
OwotICAgIEhEQyBkYyA9IGNhbnZhcy0+YmVnaW5QbGF0Zm9ybVBhaW50KCk7CisgICAgU2tDYW52
YXMqIGNhbnZhcyA9IGNvbnRleHQtPnBsYXRmb3JtQ29udGV4dCgpLT5jYW52YXMoKTsKKyAgICBI
REMgZGMgPSBza2lhOjpCZWdpblBsYXRmb3JtUGFpbnQoY2FudmFzKTsKIAogICAgIFJFQ1QgaW5u
ZXJSYzsKICAgICBpbm5lclJjLmxlZnQgPSB4OwpAQCAtNjEsMTMgKzYxLDEyIEBAIHN0YXRpYyB2
b2lkIGRyYXdOYXRpdmVSZWN0KEdyYXBoaWNzQ29udGUKICAgICBGaWxsUmVjdChkYywgJmlubmVy
UmMsCiAgICAgICAgICAgICAgcmVpbnRlcnByZXRfY2FzdDxIQlJVU0g+KEdldFN0b2NrT2JqZWN0
KEJMQUNLX0JSVVNIKSkpOwogCi0gICAgY2FudmFzLT5lbmRQbGF0Zm9ybVBhaW50KCk7CisgICAg
c2tpYTo6RW5kUGxhdGZvcm1QYWludChjYW52YXMpOwogfQogCiBzdGF0aWMgQ29sb3IgZ2V0UGl4
ZWxBdChHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIGludCB4LCBpbnQgeSkKIHsKLSAgICBjb25z
dCBTa0JpdG1hcCYgYml0bWFwID0gY29udGV4dC0+cGxhdGZvcm1Db250ZXh0KCktPmNhbnZhcygp
LT4KLSAgICAgICAgZ2V0VG9wUGxhdGZvcm1EZXZpY2UoKS5hY2Nlc3NCaXRtYXAoZmFsc2UpOwor
ICAgIGNvbnN0IFNrQml0bWFwJiBiaXRtYXAgPSBjb250ZXh0LT5wbGF0Zm9ybUNvbnRleHQoKS0+
Y2FudmFzKCktPmdldFRvcERldmljZSgpLT5hY2Nlc3NCaXRtYXAoZmFsc2UpOwogICAgIHJldHVy
biBDb2xvcigqcmVpbnRlcnByZXRfY2FzdDxjb25zdCBSR0JBMzIqPihiaXRtYXAuZ2V0QWRkcjMy
KHgsIHkpKSk7CiB9CiAKQEAgLTc1LDggKzc0LDcgQEAgc3RhdGljIENvbG9yIGdldFBpeGVsQXQo
R3JhcGhpY3NDb250ZXh0KgogLy8gV2luZG93cyBtZXNzaW5nIGl0IHVwLgogc3RhdGljIHZvaWQg
Y2xlYXJUb3BMYXllckFscGhhQ2hhbm5lbChHcmFwaGljc0NvbnRleHQqIGNvbnRleHQpCiB7Ci0g
ICAgU2tCaXRtYXAmIGJpdG1hcCA9IGNvbnN0X2Nhc3Q8U2tCaXRtYXAmPihjb250ZXh0LT5wbGF0
Zm9ybUNvbnRleHQoKS0+Ci0gICAgICAgIGNhbnZhcygpLT5nZXRUb3BQbGF0Zm9ybURldmljZSgp
LmFjY2Vzc0JpdG1hcChmYWxzZSkpOworICAgIFNrQml0bWFwJiBiaXRtYXAgPSBjb25zdF9jYXN0
PFNrQml0bWFwJj4oY29udGV4dC0+cGxhdGZvcm1Db250ZXh0KCktPmNhbnZhcygpLT5nZXRUb3BE
ZXZpY2UoKS0+YWNjZXNzQml0bWFwKGZhbHNlKSk7CiAgICAgZm9yIChpbnQgeSA9IDA7IHkgPCBi
aXRtYXAuaGVpZ2h0KCk7IHkrKykgewogICAgICAgICB1aW50MzJfdCogcm93ID0gYml0bWFwLmdl
dEFkZHIzMigwLCB5KTsKICAgICAgICAgZm9yIChpbnQgeCA9IDA7IHggPCBiaXRtYXAud2lkdGgo
KTsgeCsrKQpAQCAtODcsOCArODUsNyBAQCBzdGF0aWMgdm9pZCBjbGVhclRvcExheWVyQWxwaGFD
aGFubmVsKEdyCiAvLyBDbGVhcnMgdGhlIGFscGhhIGNoYW5uZWwgb24gdGhlIHNwZWNpZmllZCBw
aXhlbC4KIHN0YXRpYyB2b2lkIGNsZWFyVG9wTGF5ZXJBbHBoYVBpeGVsKEdyYXBoaWNzQ29udGV4
dCogY29udGV4dCwgaW50IHgsIGludCB5KQogewotICAgIFNrQml0bWFwJiBiaXRtYXAgPSBjb25z
dF9jYXN0PFNrQml0bWFwJj4oY29udGV4dC0+cGxhdGZvcm1Db250ZXh0KCktPgotICAgICAgICBj
YW52YXMoKS0+Z2V0VG9wUGxhdGZvcm1EZXZpY2UoKS5hY2Nlc3NCaXRtYXAoZmFsc2UpKTsKKyAg
ICBTa0JpdG1hcCYgYml0bWFwID0gY29uc3RfY2FzdDxTa0JpdG1hcCY+KGNvbnRleHQtPnBsYXRm
b3JtQ29udGV4dCgpLT5jYW52YXMoKS0+Z2V0VG9wRGV2aWNlKCktPmFjY2Vzc0JpdG1hcChmYWxz
ZSkpOwogICAgICpiaXRtYXAuZ2V0QWRkcjMyKHgsIHkpICY9IDB4MDBGRkZGRkY7CiB9CiAKQEAg
LTU1OSw5ICs1NTYsNyBAQCBURVNUKFRyYW5zcGFyZW5jeVdpbiwgU2NhbGUpCiAgICAgICAgIC8v
IHRoZSBoZWxwZXIgZ29lcyBvdXQgb2Ygc2NvcGUuIFdlIGRvbid0IHdhbnQgdG8gY2FsbAogICAg
ICAgICAvLyBjbGVhclRvcExheWVyQWxwaGFDaGFubmVsIGJlY2F1c2UgdGhhdCB3aWxsIGFjdHVh
bGx5IGNsZWFyIHRoZSB3aG9sZQogICAgICAgICAvLyBjYW52YXMgKHNpbmNlIHdlIGhhdmUgbm8g
ZXh0cmEgbGF5ZXIhKS4KLSAgICAgICAgU2tCaXRtYXAmIGJpdG1hcCA9IGNvbnN0X2Nhc3Q8U2tC
aXRtYXAmPihoZWxwZXIuY29udGV4dCgpLT4KLSAgICAgICAgICAgIHBsYXRmb3JtQ29udGV4dCgp
LT5jYW52YXMoKS0+Z2V0VG9wUGxhdGZvcm1EZXZpY2UoKS4KLSAgICAgICAgICAgIGFjY2Vzc0Jp
dG1hcChmYWxzZSkpOworICAgICAgICBTa0JpdG1hcCYgYml0bWFwID0gY29uc3RfY2FzdDxTa0Jp
dG1hcCY+KGhlbHBlci5jb250ZXh0KCktPnBsYXRmb3JtQ29udGV4dCgpLT5jYW52YXMoKS0+Z2V0
VG9wRGV2aWNlKCktPmFjY2Vzc0JpdG1hcChmYWxzZSkpOwogICAgICAgICAqYml0bWFwLmdldEFk
ZHIzMigyLCAyKSAmPSAweDAwRkZGRkZGOwogICAgICAgICBoZWxwZXIuY29tcG9zaXRlKCk7CiAg
ICAgfQo=
</data>
<flag name="review"
          id="81799"
          type_id="1"
          status="+"
          setter="jamesr"
    />
    <flag name="commit-queue"
          id="81800"
          type_id="3"
          status="-"
          setter="commit-queue"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>89256</attachid>
            <date>2011-04-12 13:13:50 -0700</date>
            <delta_ts>2011-04-13 11:34:54 -0700</delta_ts>
            <desc>proposed patch</desc>
            <filename>skia.txt</filename>
            <type>text/plain</type>
            <size>21717</size>
            <attacher name="Alok Priyadarshi">alokp</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDgzNjI2KQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsNDEgQEAKKzIwMTEtMDQtMTIgIEFsb2sgUHJp
eWFkYXJzaGkgIDxhbG9rcEBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9C
T0RZIChPT1BTISkuCisKKyAgICAgICAgUmVtb3ZlIGRlcGVuZGVuY3kgb24gY2hyb21pdW0gc2tp
YTo6UGxhdGZvcm1DYW52YXMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTU3NTYzCisKKyAgICAgICAgVGhpcyBwYXRjaCBkb2VzIG5vdCBjaGFuZ2UgYW55
IGZ1bmN0aW9uYWxpdHksIGp1c3QgdGhlIHR5cGUgb2Ygb2JqZWN0IHNraWE6OlBsYXRmb3JtQ2Fu
dmFzIC0+IFNrQ2FudmFzLgorICAgICAgICBUaGUgb2JqZWN0IGlzIHN0aWxsIGJlaW5nIGNyZWF0
ZWQgYnkgYSBmYWN0b3J5IG1ldGhvZCBza2lhOjpDcmVhdGVCaXRtYXBDYW52YXMgZGVmaW5lZCBp
biBDaHJvbWl1bS4KKyAgICAgICAgV2Ugd2lsbCBldmVudHVhbGx5IGRlZmluZSBhbiBBUEkgdGhh
dCBldmVyeSBwb3J0IHVzaW5nIHNraWEgd2lsbCBkZWZpbmUuCisKKyAgICAgICAgKiBwbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9Gb250Q2hyb21pdW1XaW4uY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6VHJhbnNwYXJlbmN5QXdhcmVGb250UGFpbnRlcjo6VHJhbnNwYXJlbmN5QXdhcmVGb250UGFp
bnRlcjo6aW5pdGlhbGl6ZUZvckdESSk6CisgICAgICAgIChXZWJDb3JlOjpUcmFuc3BhcmVuY3lB
d2FyZUZvbnRQYWludGVyOjpUcmFuc3BhcmVuY3lBd2FyZUZvbnRQYWludGVyOjp+VHJhbnNwYXJl
bmN5QXdhcmVGb250UGFpbnRlcik6CisgICAgICAgIChXZWJDb3JlOjpGb250OjpkcmF3Q29tcGxl
eFRleHQpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0ltYWdlQnVmZmVy
RGF0YS5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyQ2hyb21p
dW0uaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclJlbmRlcmVy
Q2hyb21pdW0uaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9QbGF0Zm9y
bUNhbnZhcy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpQbGF0Zm9ybUNhbnZhczo6cmVzaXplKToK
KyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9QbGF0Zm9ybUNhbnZhcy5oOgor
ICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1RyYW5zcGFyZW5jeVdpbi5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpUcmFuc3BhcmVuY3lXaW46OmNvbXBvc2l0ZVRleHRDb21wb3Np
dGUpOgorICAgICAgICAoV2ViQ29yZTo6VHJhbnNwYXJlbmN5V2luOjptYWtlTGF5ZXJPcGFxdWUp
OgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3NraWEvSW1hZ2VCdWZmZXJTa2lhLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyOjpJbWFnZUJ1ZmZlcik6CisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9JbWFnZVNraWEuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
cGFpbnRTa0JpdG1hcCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZTo6ZHJhd1BhdHRlcm4pOgor
ICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3NraWEvUGxhdGZvcm1Db250ZXh0U2tpYS5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpQbGF0Zm9ybUNvbnRleHRTa2lhOjpQbGF0Zm9ybUNvbnRleHRT
a2lhKToKKyAgICAgICAgKFdlYkNvcmU6OlBsYXRmb3JtQ29udGV4dFNraWE6OnNldENhbnZhcyk6
CisgICAgICAgIChXZWJDb3JlOjpQbGF0Zm9ybUNvbnRleHRTa2lhOjppc05hdGl2ZUZvbnRSZW5k
ZXJpbmdBbGxvd2VkKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9za2lhL1BsYXRmb3Jt
Q29udGV4dFNraWEuaDoKKyAgICAgICAgKFdlYkNvcmU6OlBsYXRmb3JtQ29udGV4dFNraWE6OmNh
bnZhcyk6CisgICAgICAgIChXZWJDb3JlOjpQbGF0Zm9ybUNvbnRleHRTa2lhOjpwcmludGluZyk6
CisgICAgICAgIChXZWJDb3JlOjpQbGF0Zm9ybUNvbnRleHRTa2lhOjpzZXRQcmludGluZyk6CisK
IDIwMTEtMDQtMTIgIFJ5b3N1a2UgTml3YSAgPHJuaXdhQHdlYmtpdC5vcmc+CiAKICAgICAgICAg
UmV2aWV3ZWQgYnkgRXJpYyBTZWlkZWwuCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9Gb250Q2hyb21pdW1XaW4uY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0ZvbnRDaHJvbWl1bVdpbi5jcHAJ
KHJldmlzaW9uIDgzNjIzKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vRm9udENocm9taXVtV2luLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTY1LDcgKzE2NSw3
IEBAIHZvaWQgVHJhbnNwYXJlbmN5QXdhcmVGb250UGFpbnRlcjo6aW5pdGkKIAogICAgIC8vIFNl
dCB1cCB0aGUgREMsIHVzaW5nIHRoZSBvbmUgZnJvbSB0aGUgdHJhbnNwYXJlbmN5IGhlbHBlci4K
ICAgICBpZiAobV90cmFuc3BhcmVuY3kucGxhdGZvcm1Db250ZXh0KCkpIHsKLSAgICAgICAgbV9o
ZGMgPSBtX3RyYW5zcGFyZW5jeS5wbGF0Zm9ybUNvbnRleHQoKS0+Y2FudmFzKCktPmJlZ2luUGxh
dGZvcm1QYWludCgpOworICAgICAgICBtX2hkYyA9IHNraWE6OkJlZ2luUGxhdGZvcm1QYWludCht
X3RyYW5zcGFyZW5jeS5wbGF0Zm9ybUNvbnRleHQoKS0+Y2FudmFzKCkpOwogICAgICAgICBTZXRU
ZXh0Q29sb3IobV9oZGMsIHNraWE6OlNrQ29sb3JUb0NPTE9SUkVGKGNvbG9yKSk7CiAgICAgICAg
IFNldEJrTW9kZShtX2hkYywgVFJBTlNQQVJFTlQpOwogICAgIH0KQEAgLTE3OSw3ICsxNzksNyBA
QCBUcmFuc3BhcmVuY3lBd2FyZUZvbnRQYWludGVyOjp+VHJhbnNwYXJlCiAgICAgaWYgKG1fY3Jl
YXRlZFRyYW5zcGFyZW5jeUxheWVyKQogICAgICAgICBtX2dyYXBoaWNzQ29udGV4dC0+ZW5kVHJh
bnNwYXJlbmN5TGF5ZXIoKTsKICAgICBtX2dyYXBoaWNzQ29udGV4dC0+cmVzdG9yZSgpOwotICAg
IG1fcGxhdGZvcm1Db250ZXh0LT5jYW52YXMoKS0+ZW5kUGxhdGZvcm1QYWludCgpOworICAgIHNr
aWE6OkVuZFBsYXRmb3JtUGFpbnQobV9wbGF0Zm9ybUNvbnRleHQtPmNhbnZhcygpKTsKIH0KIAog
Ly8gU3BlY2lhbGl6YXRpb24gZm9yIHNpbXBsZSBHbHlwaEJ1ZmZlciBwYWludGluZy4KQEAgLTU0
Miw3ICs1NDIsNyBAQCB2b2lkIEZvbnQ6OmRyYXdDb21wbGV4VGV4dChHcmFwaGljc0NvbnRlCiAg
ICAgLy8gdGhlIGJhc2VsaW5lLCBzbyB3ZSBoYXZlIHRvIHN1YnRyYWN0IG9mZiB0aGUgYXNjZW50
LgogICAgIHN0YXRlLmRyYXcoZ3JhcGhpY3NDb250ZXh0LCBoZGMsIGxyb3VuZGYocG9pbnQueCgp
KSwgbHJvdW5kZihwb2ludC55KCkgLSBmb250TWV0cmljcygpLmFzY2VudCgpKSwgZnJvbSwgdG8p
OwogCi0gICAgY29udGV4dC0+Y2FudmFzKCktPmVuZFBsYXRmb3JtUGFpbnQoKTsKKyAgICBza2lh
OjpFbmRQbGF0Zm9ybVBhaW50KGNvbnRleHQtPmNhbnZhcygpKTsKIH0KIAogdm9pZCBGb250Ojpk
cmF3RW1waGFzaXNNYXJrc0ZvckNvbXBsZXhUZXh0KEdyYXBoaWNzQ29udGV4dCogLyogY29udGV4
dCAqLywgY29uc3QgVGV4dFJ1biYgLyogcnVuICovLCBjb25zdCBBdG9taWNTdHJpbmcmIC8qIG1h
cmsgKi8sIGNvbnN0IEZsb2F0UG9pbnQmIC8qIHBvaW50ICovLCBpbnQgLyogZnJvbSAqLywgaW50
IC8qIHRvICovKSBjb25zdApJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vSW1hZ2VCdWZmZXJEYXRhLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vSW1hZ2VCdWZmZXJEYXRhLmgJKHJldmlzaW9uIDgz
NjIzKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vSW1hZ2VC
dWZmZXJEYXRhLmgJKHdvcmtpbmcgY29weSkKQEAgLTMzLDE1ICszMywxMyBAQAogCiAjaW5jbHVk
ZSAiUGxhdGZvcm1Db250ZXh0U2tpYS5oIgogCi0jaW5jbHVkZSAic2tpYS9leHQvcGxhdGZvcm1f
Y2FudmFzLmgiCi0KIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgSW1hZ2VCdWZmZXJEYXRh
IHsKIHB1YmxpYzoKICAgICBJbWFnZUJ1ZmZlckRhdGEoY29uc3QgSW50U2l6ZSYpOwogCi0gICAg
c2tpYTo6UGxhdGZvcm1DYW52YXMgbV9jYW52YXM7CisgICAgT3duUHRyPFNrQ2FudmFzPiBtX2Nh
bnZhczsKICAgICBQbGF0Zm9ybUNvbnRleHRTa2lhIG1fcGxhdGZvcm1Db250ZXh0OwogfTsKIApJ
bmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJDaHJv
bWl1bS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL0xheWVyQ2hyb21pdW0uaAkocmV2aXNpb24gODM2MjMpCisrKyBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllckNocm9taXVtLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTUwLDExICs1MCw2IEBACiAjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nSGFzaC5oPgog
I2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgogCi0KLW5hbWVzcGFjZSBza2lhIHsKLWNs
YXNzIFBsYXRmb3JtQ2FudmFzOwotfQotCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIEND
TGF5ZXJJbXBsOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vTGF5ZXJSZW5kZXJlckNocm9taXVtLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJSZW5kZXJlckNocm9taXVtLmgJKHJldmlz
aW9uIDgzNjIzKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
TGF5ZXJSZW5kZXJlckNocm9taXVtLmgJKHdvcmtpbmcgY29weSkKQEAgLTE5NCw3ICsxOTQsNyBA
QCBwcml2YXRlOgogICAgIGJvb2wgbV9jb21wb3NpdGVPZmZzY3JlZW47CiAKICNpZiBVU0UoU0tJ
QSkKLSAgICBPd25QdHI8c2tpYTo6UGxhdGZvcm1DYW52YXM+IG1fcm9vdExheWVyQ2FudmFzOwor
ICAgIE93blB0cjxTa0NhbnZhcz4gbV9yb290TGF5ZXJDYW52YXM7CiAgICAgT3duUHRyPFBsYXRm
b3JtQ29udGV4dFNraWE+IG1fcm9vdExheWVyU2tpYUNvbnRleHQ7CiAgICAgT3duUHRyPEdyYXBo
aWNzQ29udGV4dD4gbV9yb290TGF5ZXJHcmFwaGljc0NvbnRleHQ7CiAjZWxpZiBQTEFURk9STShD
RykKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1BsYXRm
b3JtQ2FudmFzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9QbGF0Zm9ybUNhbnZhcy5jcHAJKHJldmlzaW9uIDgzNjIzKQorKysgU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vUGxhdGZvcm1DYW52YXMuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC01Miw3ICs1Miw3IEBAIHZvaWQgUGxhdGZvcm1DYW52YXM6OnJl
c2l6ZShjb25zdCBJbnRTaXoKIHsKICAgICBtX3NpemUgPSBzaXplOwogI2lmIFVTRShTS0lBKQot
ICAgIG1fc2tpYUNhbnZhcyA9IG5ldyBza2lhOjpQbGF0Zm9ybUNhbnZhcyhzaXplLndpZHRoKCks
IHNpemUuaGVpZ2h0KCksIGZhbHNlKTsKKyAgICBtX3NraWFDYW52YXMgPSBza2lhOjpDcmVhdGVC
aXRtYXBDYW52YXMoc2l6ZS53aWR0aCgpLCBzaXplLmhlaWdodCgpLCBmYWxzZSk7CiAjZWxpZiBQ
TEFURk9STShDRykKICAgICBzaXplX3QgYnVmZmVyU2l6ZSA9IHNpemUud2lkdGgoKSAqIHNpemUu
aGVpZ2h0KCkgKiA0OwogICAgIG1fcGl4ZWxEYXRhID0gYWRvcHRBcnJheVB0cihuZXcgdWludDhf
dFtidWZmZXJTaXplXSk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9QbGF0Zm9ybUNhbnZhcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1BsYXRmb3JtQ2FudmFzLmgJKHJldmlzaW9uIDgzNjIz
KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vUGxhdGZvcm1D
YW52YXMuaAkod29ya2luZyBjb3B5KQpAQCAtMzksOCArMzksOCBAQAogI2VuZGlmCiAKICNpZiBV
U0UoU0tJQSkKLW5hbWVzcGFjZSBza2lhIHsgY2xhc3MgUGxhdGZvcm1DYW52YXM7IH0KIGNsYXNz
IFNrQml0bWFwOworY2xhc3MgU2tDYW52YXM7CiAjZW5kaWYKIAogbmFtZXNwYWNlIFdlYkNvcmUg
ewpAQCAtOTcsNyArOTcsNyBAQCBwdWJsaWM6CiAKIHByaXZhdGU6CiAjaWYgVVNFKFNLSUEpCi0g
ICAgT3duUHRyPHNraWE6OlBsYXRmb3JtQ2FudmFzPiBtX3NraWFDYW52YXM7CisgICAgT3duUHRy
PFNrQ2FudmFzPiBtX3NraWFDYW52YXM7CiAjZWxpZiBQTEFURk9STShDRykKICAgICBPd25BcnJh
eVB0cjx1aW50OF90PiBtX3BpeGVsRGF0YTsKICNlbmRpZgpJbmRleDogU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vVHJhbnNwYXJlbmN5V2luLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9UcmFuc3BhcmVu
Y3lXaW4uY3BwCShyZXZpc2lvbiA4MzYyMykKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL1RyYW5zcGFyZW5jeVdpbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ5
LDE0ICs0OSwxNCBAQCBuYW1lc3BhY2UgewogLy8gaW50by4gQnVmZmVycyBsYXJnZXIgdGhhbiB0
aGlzIHdpbGwgYmUgZGVzdHJveWVkIHdoZW4gd2UncmUgZG9uZSB3aXRoIHRoZW0uCiBjb25zdCBp
bnQgbWF4Q2FjaGVkQnVmZmVyUGl4ZWxTaXplID0gNjU1MzY7CiAKLWlubGluZSBza2lhOjpQbGF0
Zm9ybUNhbnZhcyogY2FudmFzRm9yQ29udGV4dChjb25zdCBHcmFwaGljc0NvbnRleHQmIGNvbnRl
eHQpCitpbmxpbmUgU2tDYW52YXMqIGNhbnZhc0ZvckNvbnRleHQoY29uc3QgR3JhcGhpY3NDb250
ZXh0JiBjb250ZXh0KQogewogICAgIHJldHVybiBjb250ZXh0LnBsYXRmb3JtQ29udGV4dCgpLT5j
YW52YXMoKTsKIH0KIAogaW5saW5lIGNvbnN0IFNrQml0bWFwJiBiaXRtYXBGb3JDb250ZXh0KGNv
bnN0IEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCkKIHsKLSAgICByZXR1cm4gY2FudmFzRm9yQ29u
dGV4dChjb250ZXh0KS0+Z2V0VG9wUGxhdGZvcm1EZXZpY2UoKS5hY2Nlc3NCaXRtYXAoZmFsc2Up
OworICAgIHJldHVybiBjYW52YXNGb3JDb250ZXh0KGNvbnRleHQpLT5nZXRUb3BEZXZpY2UoKS0+
YWNjZXNzQml0bWFwKGZhbHNlKTsKIH0KIAogdm9pZCBjb21wb3NpdGVUb0NvcHkoY29uc3QgR3Jh
cGhpY3NDb250ZXh0JiBzb3VyY2VMYXllcnMsCkBAIC00NjYsNyArNDY2LDcgQEAgdm9pZCBUcmFu
c3BhcmVuY3lXaW46OmNvbXBvc2l0ZVRleHRDb21wbwogICAgIGlmICghbV92YWxpZExheWVyKQog
ICAgICAgICByZXR1cm47CiAKLSAgICBjb25zdCBTa0JpdG1hcCYgYml0bWFwID0gbV9sYXllckJ1
ZmZlci0+Y29udGV4dCgpLT5wbGF0Zm9ybUNvbnRleHQoKS0+Y2FudmFzKCktPmdldFRvcFBsYXRm
b3JtRGV2aWNlKCkuYWNjZXNzQml0bWFwKHRydWUpOworICAgIGNvbnN0IFNrQml0bWFwJiBiaXRt
YXAgPSBtX2xheWVyQnVmZmVyLT5jb250ZXh0KCktPnBsYXRmb3JtQ29udGV4dCgpLT5jYW52YXMo
KS0+Z2V0VG9wRGV2aWNlKCktPmFjY2Vzc0JpdG1hcCh0cnVlKTsKICAgICBTa0NvbG9yIHRleHRD
b2xvciA9IG1fdGV4dENvbXBvc2l0ZUNvbG9yLnJnYigpOwogICAgIGZvciAoaW50IHkgPSAwOyB5
IDwgbV9sYXllclNpemUuaGVpZ2h0KCk7IHkrKykgewogICAgICAgICB1aW50MzJfdCogcm93ID0g
Yml0bWFwLmdldEFkZHIzMigwLCB5KTsKQEAgLTUwMiw3ICs1MDIsNyBAQCB2b2lkIFRyYW5zcGFy
ZW5jeVdpbjo6bWFrZUxheWVyT3BhcXVlKCkKICAgICAgICAgcmV0dXJuOwogCiAgICAgU2tCaXRt
YXAmIGJpdG1hcCA9IGNvbnN0X2Nhc3Q8U2tCaXRtYXAmPihtX2RyYXdDb250ZXh0LT5wbGF0Zm9y
bUNvbnRleHQoKS0+Ci0gICAgICAgIGNhbnZhcygpLT5nZXRUb3BQbGF0Zm9ybURldmljZSgpLmFj
Y2Vzc0JpdG1hcCh0cnVlKSk7CisgICAgICAgIGNhbnZhcygpLT5nZXRUb3BEZXZpY2UoKS0+YWNj
ZXNzQml0bWFwKHRydWUpKTsKICAgICBmb3IgKGludCB5ID0gMDsgeSA8IG1fbGF5ZXJTaXplLmhl
aWdodCgpOyB5KyspIHsKICAgICAgICAgdWludDMyX3QqIHJvdyA9IGJpdG1hcC5nZXRBZGRyMzIo
MCwgeSk7CiAgICAgICAgIGZvciAoaW50IHggPSAwOyB4IDwgbV9sYXllclNpemUud2lkdGgoKTsg
eCsrKQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9JbWFnZUJ1
ZmZlclNraWEuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL3NraWEvSW1hZ2VCdWZmZXJTa2lhLmNwcAkocmV2aXNpb24gODM2MjMpCisrKyBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9za2lhL0ltYWdlQnVmZmVyU2tpYS5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTY2LDE5ICs2NiwyMSBAQCBJbWFnZUJ1ZmZlcjo6SW1hZ2VCdWZmZXIoY29u
c3QgSW50U2l6ZSYKICAgICA6IG1fZGF0YShzaXplKQogICAgICwgbV9zaXplKHNpemUpCiB7Ci0g
ICAgaWYgKCFtX2RhdGEubV9jYW52YXMuaW5pdGlhbGl6ZShzaXplLndpZHRoKCksIHNpemUuaGVp
Z2h0KCksIGZhbHNlKSkgeworICAgIFNrQ2FudmFzKiBjYW52YXMgPSBza2lhOjpDcmVhdGVCaXRt
YXBDYW52YXMoc2l6ZS53aWR0aCgpLCBzaXplLmhlaWdodCgpLCBmYWxzZSk7CisgICAgaWYgKCFj
YW52YXMpIHsKICAgICAgICAgc3VjY2VzcyA9IGZhbHNlOwogICAgICAgICByZXR1cm47CiAgICAg
fQogCi0gICAgbV9kYXRhLm1fcGxhdGZvcm1Db250ZXh0LnNldENhbnZhcygmbV9kYXRhLm1fY2Fu
dmFzKTsKKyAgICBtX2RhdGEubV9jYW52YXMgPSBjYW52YXM7CisgICAgbV9kYXRhLm1fcGxhdGZv
cm1Db250ZXh0LnNldENhbnZhcyhtX2RhdGEubV9jYW52YXMuZ2V0KCkpOwogICAgIG1fY29udGV4
dC5zZXQobmV3IEdyYXBoaWNzQ29udGV4dCgmbV9kYXRhLm1fcGxhdGZvcm1Db250ZXh0KSk7CiAg
ICAgbV9jb250ZXh0LT5wbGF0Zm9ybUNvbnRleHQoKS0+c2V0RHJhd2luZ1RvSW1hZ2VCdWZmZXIo
dHJ1ZSk7CiAKICAgICAvLyBNYWtlIHRoZSBiYWNrZ3JvdW5kIHRyYW5zcGFyZW50LiBJdCB3b3Vs
ZCBiZSBuaWNlIGlmIHRoaXMgd2Fzbid0CiAgICAgLy8gcmVxdWlyZWQsIGJ1dCB0aGUgY2FudmFz
IGlzIGN1cnJlbnRseSBmaWxsZWQgd2l0aCB0aGUgbWFnaWMgdHJhbnNwYXJlbmN5CiAgICAgLy8g
Y29sb3IuIENhbiB3ZSBoYXZlIGFub3RoZXIgd2F5IHRvIG1hbmFnZSB0aGlzPwotICAgIG1fZGF0
YS5tX2NhbnZhcy5kcmF3QVJHQigwLCAwLCAwLCAwLCBTa1hmZXJtb2RlOjprQ2xlYXJfTW9kZSk7
CisgICAgbV9kYXRhLm1fY2FudmFzLT5kcmF3QVJHQigwLCAwLCAwLCAwLCBTa1hmZXJtb2RlOjpr
Q2xlYXJfTW9kZSk7CiAgICAgc3VjY2VzcyA9IHRydWU7CiB9CiAKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL3NraWEvSW1hZ2VTa2lhLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9za2lhL0ltYWdlU2tpYS5jcHAJKHJldmlz
aW9uIDgzNjIzKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9JbWFn
ZVNraWEuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNjIsMTIgKzI2MiwxNyBAQCBzdGF0aWMgdm9p
ZCBwYWludFNrQml0bWFwKFBsYXRmb3JtQ29udGV4CiAgICAgcGFpbnQuc2V0QWxwaGEocGxhdGZv
cm1Db250ZXh0LT5nZXROb3JtYWxpemVkQWxwaGEoKSk7CiAgICAgcGFpbnQuc2V0TG9vcGVyKHBs
YXRmb3JtQ29udGV4dC0+Z2V0RHJhd0xvb3BlcigpKTsKIAotICAgIHNraWE6OlBsYXRmb3JtQ2Fu
dmFzKiBjYW52YXMgPSBwbGF0Zm9ybUNvbnRleHQtPmNhbnZhcygpOworICAgIFNrQ2FudmFzKiBj
YW52YXMgPSBwbGF0Zm9ybUNvbnRleHQtPmNhbnZhcygpOwogCi0gICAgUmVzYW1wbGluZ01vZGUg
cmVzYW1wbGluZyA9IHBsYXRmb3JtQ29udGV4dC0+aXNQcmludGluZygpID8gUkVTQU1QTEVfTk9O
RSA6CisgICAgUmVzYW1wbGluZ01vZGUgcmVzYW1wbGluZzsKKyNpZiBFTkFCTEUoU0tJQV9HUFUp
CisgICAgcmVzYW1wbGluZyA9IFJFU0FNUExFX0xJTkVBUjsKKyNlbHNlCisgICAgcmVzYW1wbGlu
ZyA9IHBsYXRmb3JtQ29udGV4dC0+cHJpbnRpbmcoKSA/IFJFU0FNUExFX05PTkUgOgogICAgICAg
ICBjb21wdXRlUmVzYW1wbGluZ01vZGUocGxhdGZvcm1Db250ZXh0LCBiaXRtYXAsIHNyY1JlY3Qu
d2lkdGgoKSwgc3JjUmVjdC5oZWlnaHQoKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IFNrU2NhbGFyVG9GbG9hdChkZXN0UmVjdC53aWR0aCgpKSwKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIFNrU2NhbGFyVG9GbG9hdChkZXN0UmVjdC5oZWlnaHQoKSkpOworI2VuZGlmCiAg
ICAgaWYgKHJlc2FtcGxpbmcgPT0gUkVTQU1QTEVfQVdFU09NRSkgewogICAgICAgICBkcmF3UmVz
YW1wbGVkQml0bWFwKCpjYW52YXMsIHBhaW50LCBiaXRtYXAsIHNyY1JlY3QsIGRlc3RSZWN0KTsK
ICAgICB9IGVsc2UgewpAQCAtMzYzLDEzICszNjgsMTcgQEAgdm9pZCBJbWFnZTo6ZHJhd1BhdHRl
cm4oR3JhcGhpY3NDb250ZXh0KgogCiAgICAgLy8gQ29tcHV0ZSB0aGUgcmVzYW1wbGluZyBtb2Rl
LgogICAgIFJlc2FtcGxpbmdNb2RlIHJlc2FtcGxpbmc7Ci0gICAgaWYgKGNvbnRleHQtPnBsYXRm
b3JtQ29udGV4dCgpLT5pc1ByaW50aW5nKCkpCisjaWYgRU5BQkxFKFNLSUFfR1BVKQorICAgIHJl
c2FtcGxpbmcgPSBSRVNBTVBMRV9MSU5FQVI7CisjZWxzZQorICAgIGlmIChjb250ZXh0LT5wbGF0
Zm9ybUNvbnRleHQoKS0+cHJpbnRpbmcoKSkKICAgICAgIHJlc2FtcGxpbmcgPSBSRVNBTVBMRV9M
SU5FQVI7CiAgICAgZWxzZSB7CiAgICAgICByZXNhbXBsaW5nID0gY29tcHV0ZVJlc2FtcGxpbmdN
b2RlKGNvbnRleHQtPnBsYXRmb3JtQ29udGV4dCgpLCAqYml0bWFwLAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBzcmNSZWN0LndpZHRoKCksIHNyY1JlY3QuaGVpZ2h0
KCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc3RCaXRtYXBX
aWR0aCwgZGVzdEJpdG1hcEhlaWdodCk7CiAgICAgfQorI2VuZGlmCiAKICAgICAvLyBMb2FkIHRo
ZSB0cmFuc2Zvcm0gV2ViS2l0IHJlcXVlc3RlZC4KICAgICBTa01hdHJpeCBtYXRyaXgocGF0dGVy
blRyYW5zZm9ybSk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9za2lh
L1BsYXRmb3JtQ29udGV4dFNraWEuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL3NraWEvUGxhdGZvcm1Db250ZXh0U2tpYS5jcHAJKHJldmlzaW9uIDgz
NjIzKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9QbGF0Zm9ybUNv
bnRleHRTa2lhLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjEzLDggKzIxMyw5IEBAIFNrQ29sb3Ig
UGxhdGZvcm1Db250ZXh0U2tpYTo6U3RhdGU6OmFwcGwKIC8vIFBsYXRmb3JtQ29udGV4dFNraWEg
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
CiAKIC8vIERhbmdlcjogY2FudmFzIGNhbiBiZSBOVUxMLgotUGxhdGZvcm1Db250ZXh0U2tpYTo6
UGxhdGZvcm1Db250ZXh0U2tpYShza2lhOjpQbGF0Zm9ybUNhbnZhcyogY2FudmFzKQorUGxhdGZv
cm1Db250ZXh0U2tpYTo6UGxhdGZvcm1Db250ZXh0U2tpYShTa0NhbnZhcyogY2FudmFzKQogICAg
IDogbV9jYW52YXMoY2FudmFzKQorICAgICwgbV9wcmludGluZyhmYWxzZSkKICAgICAsIG1fZHJh
d2luZ1RvSW1hZ2VCdWZmZXIoZmFsc2UpCiAgICAgLCBtX3VzZUdQVShmYWxzZSkKICNpZiBFTkFC
TEUoQUNDRUxFUkFURURfMkRfQ0FOVkFTKQpAQCAtMjQwLDcgKzI0MSw3IEBAIFBsYXRmb3JtQ29u
dGV4dFNraWE6On5QbGF0Zm9ybUNvbnRleHRTa2kKICNlbmRpZgogfQogCi12b2lkIFBsYXRmb3Jt
Q29udGV4dFNraWE6OnNldENhbnZhcyhza2lhOjpQbGF0Zm9ybUNhbnZhcyogY2FudmFzKQordm9p
ZCBQbGF0Zm9ybUNvbnRleHRTa2lhOjpzZXRDYW52YXMoU2tDYW52YXMqIGNhbnZhcykKIHsKICAg
ICBtX2NhbnZhcyA9IGNhbnZhczsKIH0KQEAgLTYwOSwyMSArNjEwLDEyIEBAIGNvbnN0IFNrQml0
bWFwKiBQbGF0Zm9ybUNvbnRleHRTa2lhOjpiaXQKICAgICByZXR1cm4gJm1fY2FudmFzLT5nZXRE
ZXZpY2UoKS0+YWNjZXNzQml0bWFwKGZhbHNlKTsKIH0KIAotYm9vbCBQbGF0Zm9ybUNvbnRleHRT
a2lhOjppc1ByaW50aW5nKCkKLXsKLSNpZiBFTkFCTEUoU0tJQV9HUFUpCi0gICAgcmV0dXJuIHRy
dWU7Ci0jZWxzZQotICAgIHJldHVybiBtX2NhbnZhcy0+Z2V0VG9wUGxhdGZvcm1EZXZpY2UoKS5J
c1ZlY3RvcmlhbCgpOwotI2VuZGlmCi19Ci0KIGJvb2wgUGxhdGZvcm1Db250ZXh0U2tpYTo6aXNO
YXRpdmVGb250UmVuZGVyaW5nQWxsb3dlZCgpCiB7CiAjaWYgRU5BQkxFKFNLSUFfR1BVKQogICAg
IHJldHVybiBmYWxzZTsKICNlbHNlCi0gICAgcmV0dXJuIG1fY2FudmFzLT5nZXRUb3BQbGF0Zm9y
bURldmljZSgpLklzTmF0aXZlRm9udFJlbmRlcmluZ0FsbG93ZWQoKTsKKyAgICByZXR1cm4gc2tp
YTo6U3VwcG9ydHNQbGF0Zm9ybVBhaW50KG1fY2FudmFzKTsKICNlbmRpZgogfQogCkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9za2lhL1BsYXRmb3JtQ29udGV4dFNraWEu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9za2lhL1Bs
YXRmb3JtQ29udGV4dFNraWEuaAkocmV2aXNpb24gODM2MjMpCisrKyBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9za2lhL1BsYXRmb3JtQ29udGV4dFNraWEuaAkod29ya2luZyBjb3B5
KQpAQCAtNzIsMTIgKzcyLDEyIEBAIGNsYXNzIFBsYXRmb3JtQ29udGV4dFNraWEgewogcHVibGlj
OgogICAgIC8vIEZvciBwcmludGluZywgdGhlcmUgc2hvdWxkbid0IGJlIGFueSBjYW52YXMuIGNh
bnZhcyBjYW4gYmUgTlVMTC4gSWYgeW91CiAgICAgLy8gc3VwcGx5IGEgTlVMTCBjYW52YXMsIHlv
dSBjYW4gYWxzbyBjYWxsIHNldENhbnZhcyBsYXRlci4KLSAgICBQbGF0Zm9ybUNvbnRleHRTa2lh
KHNraWE6OlBsYXRmb3JtQ2FudmFzKik7CisgICAgUGxhdGZvcm1Db250ZXh0U2tpYShTa0NhbnZh
cyopOwogICAgIH5QbGF0Zm9ybUNvbnRleHRTa2lhKCk7CiAKICAgICAvLyBTZXRzIHRoZSBjYW52
YXMgYXNzb2NpYXRlZCB3aXRoIHRoaXMgY29udGV4dC4gVXNlIHdoZW4gc3VwcGx5aW5nIE5VTEwK
ICAgICAvLyB0byB0aGUgY29uc3RydWN0b3IuCi0gICAgdm9pZCBzZXRDYW52YXMoc2tpYTo6UGxh
dGZvcm1DYW52YXMqKTsKKyAgICB2b2lkIHNldENhbnZhcyhTa0NhbnZhcyopOwogCiAgICAgLy8g
SWYgZmFsc2Ugd2UncmUgcmVuZGVyaW5nIHRvIGEgR3JhcGhpY3NDb250ZXh0IGZvciBhIHdlYiBw
YWdlLCBpZiBmYWxzZQogICAgIC8vIHdlJ3JlIG5vdCAoYXMgaXMgdGhlIGNhc2Ugd2hlbiByZW5k
ZXJpbmcgdG8gYSBjYW52YXMgb2JqZWN0KS4KQEAgLTE0Nyw3ICsxNDcsNyBAQCBwdWJsaWM6CiAg
ICAgU2tDb2xvciBlZmZlY3RpdmVTdHJva2VDb2xvcigpIGNvbnN0OwogCiAgICAgLy8gUmV0dXJu
cyB0aGUgY2FudmFzIHVzZWQgZm9yIHBhaW50aW5nLCBOT1QgZ3VhcmFudGVlZCB0byBiZSBub24t
bnVsbC4KLSAgICBza2lhOjpQbGF0Zm9ybUNhbnZhcyogY2FudmFzKCkgeyByZXR1cm4gbV9jYW52
YXM7IH0KKyAgICBTa0NhbnZhcyogY2FudmFzKCkgeyByZXR1cm4gbV9jYW52YXM7IH0KIAogICAg
IEludGVycG9sYXRpb25RdWFsaXR5IGludGVycG9sYXRpb25RdWFsaXR5KCkgY29uc3Q7CiAgICAg
dm9pZCBzZXRJbnRlcnBvbGF0aW9uUXVhbGl0eShJbnRlcnBvbGF0aW9uUXVhbGl0eSBpbnRlcnBv
bGF0aW9uUXVhbGl0eSk7CkBAIC0xNjMsNyArMTYzLDggQEAgcHVibGljOgogICAgIC8vIFJldHVy
bnMgaWYgdGhlIGNvbnRleHQgaXMgYSBwcmludGluZyBjb250ZXh0IGluc3RlYWQgb2YgYSBkaXNw
bGF5CiAgICAgLy8gY29udGV4dC4gQml0bWFwIHNob3VsZG4ndCBiZSByZXNhbXBsZWQgd2hlbiBw
cmludGluZyB0byBrZWVwIHRoZSBiZXN0CiAgICAgLy8gcG9zc2libGUgcXVhbGl0eS4KLSAgICBi
b29sIGlzUHJpbnRpbmcoKTsKKyAgICBib29sIHByaW50aW5nKCkgY29uc3QgeyByZXR1cm4gbV9w
cmludGluZzsgfQorICAgIHZvaWQgc2V0UHJpbnRpbmcoYm9vbCBwKSB7IG1fcHJpbnRpbmcgPSBw
OyB9CiAKICAgICAvLyBSZXR1cm5zIGlmIHRoZSBjb250ZXh0IGFsbG93cyByZW5kZXJpbmcgb2Yg
Zm9udHMgdXNpbmcgbmF0aXZlIHBsYXRmb3JtCiAgICAgLy8gQVBJcy4gSWYgZmFsc2UgaXMgcmV0
dXJuZWQgZm9udCByZW5kZXJpbmcgaXMgcGVyZm9ybWVkIHVzaW5nIHRoZSBza2lhCkBAIC0xODUs
MTAgKzE4NiwxMCBAQCBwdWJsaWM6CiAgICAgR0xFUzJDYW52YXMqIGdwdUNhbnZhcygpIGNvbnN0
IHsgcmV0dXJuIDA7IH0KICNlbmRpZgogICAgIC8vIENhbGwgdGhlc2UgYmVmb3JlIG1ha2luZyBh
IGNhbGwgdGhhdCBtYW5pcHVsYXRlcyB0aGUgdW5kZXJseWluZwotICAgIC8vIHNraWE6OlBsYXRm
b3JtQ2FudmFzIG9yIFdlYkNvcmU6OkdMRVMyQ2FudmFzCisgICAgLy8gU2tDYW52YXMgb3IgV2Vi
Q29yZTo6R0xFUzJDYW52YXMKICAgICB2b2lkIHByZXBhcmVGb3JTb2Z0d2FyZURyYXcoKSBjb25z
dDsKICAgICB2b2lkIHByZXBhcmVGb3JIYXJkd2FyZURyYXcoKSBjb25zdDsKLSAgICAvLyBDYWxs
IHRvIGZvcmNlIHRoZSBza2lhOjpQbGF0Zm9ybUNhbnZhcyB0byBjb250YWluIGFsbCByZW5kZXJp
bmcgcmVzdWx0cy4KKyAgICAvLyBDYWxsIHRvIGZvcmNlIHRoZSBTa0NhbnZhcyB0byBjb250YWlu
IGFsbCByZW5kZXJpbmcgcmVzdWx0cy4KICAgICB2b2lkIHN5bmNTb2Z0d2FyZUNhbnZhcygpIGNv
bnN0OwogICAgIHZvaWQgbWFya0RpcnR5UmVjdChjb25zdCBJbnRSZWN0JiByZWN0KTsKIApAQCAt
MjA1LDcgKzIwNiw3IEBAIHByaXZhdGU6CiAgICAgc3RydWN0IFN0YXRlOwogCiAgICAgLy8gTlVM
TCBpbmRpY2F0ZXMgcGFpbnRpbmcgaXMgZGlzYWJsZWQuIE5ldmVyIGRlbGV0ZSB0aGlzIG9iamVj
dC4KLSAgICBza2lhOjpQbGF0Zm9ybUNhbnZhcyogbV9jYW52YXM7CisgICAgU2tDYW52YXMqIG1f
Y2FudmFzOwogCiAgICAgLy8gU3RhdGVzIHN0YWNrLiBFbmFibGVzIGxvY2FsIGRyYXdpbmcgc3Rh
dGUgY2hhbmdlIHdpdGggc2F2ZSgpL3Jlc3RvcmUoKQogICAgIC8vIGNhbGxzLgpAQCAtMjE4LDYg
KzIxOSw3IEBAIHByaXZhdGU6CiAgICAgLy8gVmFsdWVzIGFyZSB1c2VkIGluIEltYWdlU2tpYS5j
cHAKICAgICBJbnRTaXplIG1faW1hZ2VSZXNhbXBsaW5nSGludFNyY1NpemU7CiAgICAgRmxvYXRT
aXplIG1faW1hZ2VSZXNhbXBsaW5nSGludERzdFNpemU7CisgICAgYm9vbCBtX3ByaW50aW5nOwog
ICAgIGJvb2wgbV9kcmF3aW5nVG9JbWFnZUJ1ZmZlcjsKICAgICBib29sIG1fdXNlR1BVOwogI2lm
IEVOQUJMRShBQ0NFTEVSQVRFRF8yRF9DQU5WQVMpCkluZGV4OiBTb3VyY2UvV2ViS2l0L2Nocm9t
aXVtL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5n
ZUxvZwkocmV2aXNpb24gODM2MjYpCisrKyBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxv
Zwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDIwIEBACisyMDExLTA0LTEyICBBbG9rIFByaXlh
ZGFyc2hpICA8YWxva3BAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9E
WSAoT09QUyEpLgorCisgICAgICAgIFJlbW92ZSBkZXBlbmRlbmN5IG9uIGNocm9taXVtIHNraWE6
OlBsYXRmb3JtQ2FudmFzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD01NzU2MworCisgICAgICAgICogcHVibGljL1dlYkNhbnZhcy5oOgorICAgICAgICAq
IHNyYy9XZWJGcmFtZUltcGwuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJGcmFtZUltcGw6OnBy
aW50UGFnZSk6CisgICAgICAgICogdGVzdHMvVHJhbnNwYXJlbmN5V2luVGVzdC5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpkcmF3TmF0aXZlUmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpnZXRQaXhl
bEF0KToKKyAgICAgICAgKFdlYkNvcmU6OmNsZWFyVG9wTGF5ZXJBbHBoYUNoYW5uZWwpOgorICAg
ICAgICAoV2ViQ29yZTo6Y2xlYXJUb3BMYXllckFscGhhUGl4ZWwpOgorICAgICAgICAoV2ViQ29y
ZTo6VEVTVCk6CisKIDIwMTEtMDQtMTEgIEpvaG4gQWJkLUVsLU1hbGVrICA8amFtQGNocm9taXVt
Lm9yZz4KIAogICAgICAgICBSZXZpZXdlZCBieSBEYXJpbiBGaXNoZXIuCkluZGV4OiBTb3VyY2Uv
V2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJDYW52YXMuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJDYW52YXMuaAkocmV2aXNpb24gODM2MjMpCisrKyBT
b3VyY2UvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJDYW52YXMuaAkod29ya2luZyBjb3B5KQpA
QCAtMzQsNyArMzQsNyBAQAogI2luY2x1ZGUgIldlYkNvbW1vbi5oIgogCiAjaWYgV0VCS0lUX1VT
SU5HX1NLSUEKLW5hbWVzcGFjZSBza2lhIHsgY2xhc3MgUGxhdGZvcm1DYW52YXM7IH0KK2NsYXNz
IFNrQ2FudmFzOwogI2VsaWYgV0VCS0lUX1VTSU5HX0NHCiBzdHJ1Y3QgQ0dDb250ZXh0OwogI2Vu
ZGlmCkBAIC00Miw3ICs0Miw3IEBAIHN0cnVjdCBDR0NvbnRleHQ7CiBuYW1lc3BhY2UgV2ViS2l0
IHsKIAogI2lmIFdFQktJVF9VU0lOR19TS0lBCi10eXBlZGVmIHNraWE6OlBsYXRmb3JtQ2FudmFz
IFdlYkNhbnZhczsKK3R5cGVkZWYgU2tDYW52YXMgV2ViQ2FudmFzOwogI2VsaWYgV0VCS0lUX1VT
SU5HX0NHCiB0eXBlZGVmIHN0cnVjdCBDR0NvbnRleHQgV2ViQ2FudmFzOwogI2Vsc2UKSW5kZXg6
IFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYkZyYW1lSW1wbC5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViRnJhbWVJbXBsLmNwcAkocmV2aXNpb24g
ODM2MjMpCisrKyBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJGcmFtZUltcGwuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0xNDA5LDcgKzE0MDksMTMgQEAgZmxvYXQgV2ViRnJhbWVJbXBsOjpw
cmludFBhZ2UoaW50IHBhZ2UsCiAgICAgICAgIHJldHVybiAwOwogICAgIH0KIAotICAgIHJldHVy
biBtX3ByaW50Q29udGV4dC0+c3Bvb2xQYWdlKEdyYXBoaWNzQ29udGV4dEJ1aWxkZXIoY2FudmFz
KS5jb250ZXh0KCksIHBhZ2UpOworICAgIEdyYXBoaWNzQ29udGV4dEJ1aWxkZXIgYnVpbGRlcihj
YW52YXMpOworICAgIEdyYXBoaWNzQ29udGV4dCYgZ2MgPSBidWlsZGVyLmNvbnRleHQoKTsKKyNp
ZiBXRUJLSVRfVVNJTkdfU0tJQQorICAgIGdjLnBsYXRmb3JtQ29udGV4dCgpLT5zZXRQcmludGlu
Zyh0cnVlKTsKKyNlbmRpZgorCisgICAgcmV0dXJuIG1fcHJpbnRDb250ZXh0LT5zcG9vbFBhZ2Uo
Z2MsIHBhZ2UpOwogfQogCiB2b2lkIFdlYkZyYW1lSW1wbDo6cHJpbnRFbmQoKQpJbmRleDogU291
cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9UcmFuc3BhcmVuY3lXaW5UZXN0LmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL1RyYW5zcGFyZW5jeVdpblRlc3Qu
Y3BwCShyZXZpc2lvbiA4MzYyMykKKysrIFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvVHJh
bnNwYXJlbmN5V2luVGVzdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTUwLDggKzUwLDggQEAgc3Rh
dGljIEZsb2F0UmVjdCBSRUNUVG9GbG9hdFJlY3QoY29uc3QgUgogc3RhdGljIHZvaWQgZHJhd05h
dGl2ZVJlY3QoR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgaW50IHgsIGludCB5LCBpbnQgdywgaW50IGgpCiB7Ci0gICAgc2tpYTo6UGxhdGZvcm1D
YW52YXMqIGNhbnZhcyA9IGNvbnRleHQtPnBsYXRmb3JtQ29udGV4dCgpLT5jYW52YXMoKTsKLSAg
ICBIREMgZGMgPSBjYW52YXMtPmJlZ2luUGxhdGZvcm1QYWludCgpOworICAgIFNrQ2FudmFzKiBj
YW52YXMgPSBjb250ZXh0LT5wbGF0Zm9ybUNvbnRleHQoKS0+Y2FudmFzKCk7CisgICAgSERDIGRj
ID0gc2tpYTo6QmVnaW5QbGF0Zm9ybVBhaW50KGNhbnZhcyk7CiAKICAgICBSRUNUIGlubmVyUmM7
CiAgICAgaW5uZXJSYy5sZWZ0ID0geDsKQEAgLTYxLDEzICs2MSwxMiBAQCBzdGF0aWMgdm9pZCBk
cmF3TmF0aXZlUmVjdChHcmFwaGljc0NvbnRlCiAgICAgRmlsbFJlY3QoZGMsICZpbm5lclJjLAog
ICAgICAgICAgICAgIHJlaW50ZXJwcmV0X2Nhc3Q8SEJSVVNIPihHZXRTdG9ja09iamVjdChCTEFD
S19CUlVTSCkpKTsKIAotICAgIGNhbnZhcy0+ZW5kUGxhdGZvcm1QYWludCgpOworICAgIHNraWE6
OkVuZFBsYXRmb3JtUGFpbnQoY2FudmFzKTsKIH0KIAogc3RhdGljIENvbG9yIGdldFBpeGVsQXQo
R3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBpbnQgeCwgaW50IHkpCiB7Ci0gICAgY29uc3QgU2tC
aXRtYXAmIGJpdG1hcCA9IGNvbnRleHQtPnBsYXRmb3JtQ29udGV4dCgpLT5jYW52YXMoKS0+Ci0g
ICAgICAgIGdldFRvcFBsYXRmb3JtRGV2aWNlKCkuYWNjZXNzQml0bWFwKGZhbHNlKTsKKyAgICBj
b25zdCBTa0JpdG1hcCYgYml0bWFwID0gY29udGV4dC0+cGxhdGZvcm1Db250ZXh0KCktPmNhbnZh
cygpLT5nZXRUb3BEZXZpY2UoKS0+YWNjZXNzQml0bWFwKGZhbHNlKTsKICAgICByZXR1cm4gQ29s
b3IoKnJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgUkdCQTMyKj4oYml0bWFwLmdldEFkZHIzMih4LCB5
KSkpOwogfQogCkBAIC03NSw4ICs3NCw3IEBAIHN0YXRpYyBDb2xvciBnZXRQaXhlbEF0KEdyYXBo
aWNzQ29udGV4dCoKIC8vIFdpbmRvd3MgbWVzc2luZyBpdCB1cC4KIHN0YXRpYyB2b2lkIGNsZWFy
VG9wTGF5ZXJBbHBoYUNoYW5uZWwoR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0KQogewotICAgIFNr
Qml0bWFwJiBiaXRtYXAgPSBjb25zdF9jYXN0PFNrQml0bWFwJj4oY29udGV4dC0+cGxhdGZvcm1D
b250ZXh0KCktPgotICAgICAgICBjYW52YXMoKS0+Z2V0VG9wUGxhdGZvcm1EZXZpY2UoKS5hY2Nl
c3NCaXRtYXAoZmFsc2UpKTsKKyAgICBTa0JpdG1hcCYgYml0bWFwID0gY29uc3RfY2FzdDxTa0Jp
dG1hcCY+KGNvbnRleHQtPnBsYXRmb3JtQ29udGV4dCgpLT5jYW52YXMoKS0+Z2V0VG9wRGV2aWNl
KCktPmFjY2Vzc0JpdG1hcChmYWxzZSkpOwogICAgIGZvciAoaW50IHkgPSAwOyB5IDwgYml0bWFw
LmhlaWdodCgpOyB5KyspIHsKICAgICAgICAgdWludDMyX3QqIHJvdyA9IGJpdG1hcC5nZXRBZGRy
MzIoMCwgeSk7CiAgICAgICAgIGZvciAoaW50IHggPSAwOyB4IDwgYml0bWFwLndpZHRoKCk7IHgr
KykKQEAgLTg3LDggKzg1LDcgQEAgc3RhdGljIHZvaWQgY2xlYXJUb3BMYXllckFscGhhQ2hhbm5l
bChHcgogLy8gQ2xlYXJzIHRoZSBhbHBoYSBjaGFubmVsIG9uIHRoZSBzcGVjaWZpZWQgcGl4ZWwu
CiBzdGF0aWMgdm9pZCBjbGVhclRvcExheWVyQWxwaGFQaXhlbChHcmFwaGljc0NvbnRleHQqIGNv
bnRleHQsIGludCB4LCBpbnQgeSkKIHsKLSAgICBTa0JpdG1hcCYgYml0bWFwID0gY29uc3RfY2Fz
dDxTa0JpdG1hcCY+KGNvbnRleHQtPnBsYXRmb3JtQ29udGV4dCgpLT4KLSAgICAgICAgY2FudmFz
KCktPmdldFRvcFBsYXRmb3JtRGV2aWNlKCkuYWNjZXNzQml0bWFwKGZhbHNlKSk7CisgICAgU2tC
aXRtYXAmIGJpdG1hcCA9IGNvbnN0X2Nhc3Q8U2tCaXRtYXAmPihjb250ZXh0LT5wbGF0Zm9ybUNv
bnRleHQoKS0+Y2FudmFzKCktPmdldFRvcERldmljZSgpLT5hY2Nlc3NCaXRtYXAoZmFsc2UpKTsK
ICAgICAqYml0bWFwLmdldEFkZHIzMih4LCB5KSAmPSAweDAwRkZGRkZGOwogfQogCkBAIC01NTks
OSArNTU2LDcgQEAgVEVTVChUcmFuc3BhcmVuY3lXaW4sIFNjYWxlKQogICAgICAgICAvLyB0aGUg
aGVscGVyIGdvZXMgb3V0IG9mIHNjb3BlLiBXZSBkb24ndCB3YW50IHRvIGNhbGwKICAgICAgICAg
Ly8gY2xlYXJUb3BMYXllckFscGhhQ2hhbm5lbCBiZWNhdXNlIHRoYXQgd2lsbCBhY3R1YWxseSBj
bGVhciB0aGUgd2hvbGUKICAgICAgICAgLy8gY2FudmFzIChzaW5jZSB3ZSBoYXZlIG5vIGV4dHJh
IGxheWVyISkuCi0gICAgICAgIFNrQml0bWFwJiBiaXRtYXAgPSBjb25zdF9jYXN0PFNrQml0bWFw
Jj4oaGVscGVyLmNvbnRleHQoKS0+Ci0gICAgICAgICAgICBwbGF0Zm9ybUNvbnRleHQoKS0+Y2Fu
dmFzKCktPmdldFRvcFBsYXRmb3JtRGV2aWNlKCkuCi0gICAgICAgICAgICBhY2Nlc3NCaXRtYXAo
ZmFsc2UpKTsKKyAgICAgICAgU2tCaXRtYXAmIGJpdG1hcCA9IGNvbnN0X2Nhc3Q8U2tCaXRtYXAm
PihoZWxwZXIuY29udGV4dCgpLT5wbGF0Zm9ybUNvbnRleHQoKS0+Y2FudmFzKCktPmdldFRvcERl
dmljZSgpLT5hY2Nlc3NCaXRtYXAoZmFsc2UpKTsKICAgICAgICAgKmJpdG1hcC5nZXRBZGRyMzIo
MiwgMikgJj0gMHgwMEZGRkZGRjsKICAgICAgICAgaGVscGVyLmNvbXBvc2l0ZSgpOwogICAgIH0K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>89411</attachid>
            <date>2011-04-13 11:34:54 -0700</date>
            <delta_ts>2011-04-13 14:18:01 -0700</delta_ts>
            <desc>proposed patch</desc>
            <filename>skia.txt</filename>
            <type>text/plain</type>
            <size>31523</size>
            <attacher name="Alok Priyadarshi">alokp</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDgzNzUwKQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsNDEgQEAKKzIwMTEtMDQtMTMgIEFsb2sgUHJp
eWFkYXJzaGkgIDxhbG9rcEBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9C
T0RZIChPT1BTISkuCisKKyAgICAgICAgUmVtb3ZlIGRlcGVuZGVuY3kgb24gY2hyb21pdW0gc2tp
YTo6UGxhdGZvcm1DYW52YXMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTU3NTYzCisKKyAgICAgICAgVGhpcyBwYXRjaCBkb2VzIG5vdCBjaGFuZ2UgYW55
IGZ1bmN0aW9uYWxpdHksIGp1c3QgdGhlIHR5cGUgb2Ygb2JqZWN0IHNraWE6OlBsYXRmb3JtQ2Fu
dmFzIC0+IFNrQ2FudmFzLgorICAgICAgICBUaGUgb2JqZWN0IGlzIHN0aWxsIGJlaW5nIGNyZWF0
ZWQgYnkgYSBmYWN0b3J5IG1ldGhvZCBza2lhOjpDcmVhdGVCaXRtYXBDYW52YXMgZGVmaW5lZCBp
biBDaHJvbWl1bS4KKyAgICAgICAgV2Ugd2lsbCBldmVudHVhbGx5IGRlZmluZSBhbiBBUEkgdGhh
dCBldmVyeSBwb3J0IHVzaW5nIHNraWEgd2lsbCBkZWZpbmUuCisKKyAgICAgICAgKiBwbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9Gb250Q2hyb21pdW1XaW4uY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6VHJhbnNwYXJlbmN5QXdhcmVGb250UGFpbnRlcjo6VHJhbnNwYXJlbmN5QXdhcmVGb250UGFp
bnRlcjo6aW5pdGlhbGl6ZUZvckdESSk6CisgICAgICAgIChXZWJDb3JlOjpUcmFuc3BhcmVuY3lB
d2FyZUZvbnRQYWludGVyOjpUcmFuc3BhcmVuY3lBd2FyZUZvbnRQYWludGVyOjp+VHJhbnNwYXJl
bmN5QXdhcmVGb250UGFpbnRlcik6CisgICAgICAgIChXZWJDb3JlOjpGb250OjpkcmF3Q29tcGxl
eFRleHQpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0ltYWdlQnVmZmVy
RGF0YS5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyQ2hyb21p
dW0uaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclJlbmRlcmVy
Q2hyb21pdW0uaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9QbGF0Zm9y
bUNhbnZhcy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpQbGF0Zm9ybUNhbnZhczo6cmVzaXplKToK
KyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9QbGF0Zm9ybUNhbnZhcy5oOgor
ICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1RyYW5zcGFyZW5jeVdpbi5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpUcmFuc3BhcmVuY3lXaW46OmNvbXBvc2l0ZVRleHRDb21wb3Np
dGUpOgorICAgICAgICAoV2ViQ29yZTo6VHJhbnNwYXJlbmN5V2luOjptYWtlTGF5ZXJPcGFxdWUp
OgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3NraWEvSW1hZ2VCdWZmZXJTa2lhLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyOjpJbWFnZUJ1ZmZlcik6CisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9JbWFnZVNraWEuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
cGFpbnRTa0JpdG1hcCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZTo6ZHJhd1BhdHRlcm4pOgor
ICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3NraWEvUGxhdGZvcm1Db250ZXh0U2tpYS5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpQbGF0Zm9ybUNvbnRleHRTa2lhOjpQbGF0Zm9ybUNvbnRleHRT
a2lhKToKKyAgICAgICAgKFdlYkNvcmU6OlBsYXRmb3JtQ29udGV4dFNraWE6OnNldENhbnZhcyk6
CisgICAgICAgIChXZWJDb3JlOjpQbGF0Zm9ybUNvbnRleHRTa2lhOjppc05hdGl2ZUZvbnRSZW5k
ZXJpbmdBbGxvd2VkKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9za2lhL1BsYXRmb3Jt
Q29udGV4dFNraWEuaDoKKyAgICAgICAgKFdlYkNvcmU6OlBsYXRmb3JtQ29udGV4dFNraWE6OmNh
bnZhcyk6CisgICAgICAgIChXZWJDb3JlOjpQbGF0Zm9ybUNvbnRleHRTa2lhOjpwcmludGluZyk6
CisgICAgICAgIChXZWJDb3JlOjpQbGF0Zm9ybUNvbnRleHRTa2lhOjpzZXRQcmludGluZyk6CisK
IDIwMTEtMDQtMTIgIFBhdmVsIFBvZGl2aWxvdiAgPHBvZGl2aWxvdkBjaHJvbWl1bS5vcmc+CiAK
ICAgICAgICAgUmV2aWV3ZWQgYnkgUGF2ZWwgRmVsZG1hbi4KSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0ZvbnRDaHJvbWl1bVdpbi5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vRm9udENocm9t
aXVtV2luLmNwcAkocmV2aXNpb24gODM3NDgpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9Gb250Q2hyb21pdW1XaW4uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0x
NjUsNyArMTY1LDcgQEAgdm9pZCBUcmFuc3BhcmVuY3lBd2FyZUZvbnRQYWludGVyOjppbml0aQog
CiAgICAgLy8gU2V0IHVwIHRoZSBEQywgdXNpbmcgdGhlIG9uZSBmcm9tIHRoZSB0cmFuc3BhcmVu
Y3kgaGVscGVyLgogICAgIGlmIChtX3RyYW5zcGFyZW5jeS5wbGF0Zm9ybUNvbnRleHQoKSkgewot
ICAgICAgICBtX2hkYyA9IG1fdHJhbnNwYXJlbmN5LnBsYXRmb3JtQ29udGV4dCgpLT5jYW52YXMo
KS0+YmVnaW5QbGF0Zm9ybVBhaW50KCk7CisgICAgICAgIG1faGRjID0gc2tpYTo6QmVnaW5QbGF0
Zm9ybVBhaW50KG1fdHJhbnNwYXJlbmN5LnBsYXRmb3JtQ29udGV4dCgpLT5jYW52YXMoKSk7CiAg
ICAgICAgIFNldFRleHRDb2xvcihtX2hkYywgc2tpYTo6U2tDb2xvclRvQ09MT1JSRUYoY29sb3Ip
KTsKICAgICAgICAgU2V0QmtNb2RlKG1faGRjLCBUUkFOU1BBUkVOVCk7CiAgICAgfQpAQCAtMTc5
LDcgKzE3OSw3IEBAIFRyYW5zcGFyZW5jeUF3YXJlRm9udFBhaW50ZXI6On5UcmFuc3BhcmUKICAg
ICBpZiAobV9jcmVhdGVkVHJhbnNwYXJlbmN5TGF5ZXIpCiAgICAgICAgIG1fZ3JhcGhpY3NDb250
ZXh0LT5lbmRUcmFuc3BhcmVuY3lMYXllcigpOwogICAgIG1fZ3JhcGhpY3NDb250ZXh0LT5yZXN0
b3JlKCk7Ci0gICAgbV9wbGF0Zm9ybUNvbnRleHQtPmNhbnZhcygpLT5lbmRQbGF0Zm9ybVBhaW50
KCk7CisgICAgc2tpYTo6RW5kUGxhdGZvcm1QYWludChtX3BsYXRmb3JtQ29udGV4dC0+Y2FudmFz
KCkpOwogfQogCiAvLyBTcGVjaWFsaXphdGlvbiBmb3Igc2ltcGxlIEdseXBoQnVmZmVyIHBhaW50
aW5nLgpAQCAtNTQyLDcgKzU0Miw3IEBAIHZvaWQgRm9udDo6ZHJhd0NvbXBsZXhUZXh0KEdyYXBo
aWNzQ29udGUKICAgICAvLyB0aGUgYmFzZWxpbmUsIHNvIHdlIGhhdmUgdG8gc3VidHJhY3Qgb2Zm
IHRoZSBhc2NlbnQuCiAgICAgc3RhdGUuZHJhdyhncmFwaGljc0NvbnRleHQsIGhkYywgbHJvdW5k
Zihwb2ludC54KCkpLCBscm91bmRmKHBvaW50LnkoKSAtIGZvbnRNZXRyaWNzKCkuYXNjZW50KCkp
LCBmcm9tLCB0byk7CiAKLSAgICBjb250ZXh0LT5jYW52YXMoKS0+ZW5kUGxhdGZvcm1QYWludCgp
OworICAgIHNraWE6OkVuZFBsYXRmb3JtUGFpbnQoY29udGV4dC0+Y2FudmFzKCkpOwogfQogCiB2
b2lkIEZvbnQ6OmRyYXdFbXBoYXNpc01hcmtzRm9yQ29tcGxleFRleHQoR3JhcGhpY3NDb250ZXh0
KiAvKiBjb250ZXh0ICovLCBjb25zdCBUZXh0UnVuJiAvKiBydW4gKi8sIGNvbnN0IEF0b21pY1N0
cmluZyYgLyogbWFyayAqLywgY29uc3QgRmxvYXRQb2ludCYgLyogcG9pbnQgKi8sIGludCAvKiBm
cm9tICovLCBpbnQgLyogdG8gKi8pIGNvbnN0CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9JbWFnZUJ1ZmZlckRhdGEuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9JbWFnZUJ1ZmZlckRhdGEuaAko
cmV2aXNpb24gODM3NDgpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9JbWFnZUJ1ZmZlckRhdGEuaAkod29ya2luZyBjb3B5KQpAQCAtMzMsMTUgKzMzLDEzIEBA
CiAKICNpbmNsdWRlICJQbGF0Zm9ybUNvbnRleHRTa2lhLmgiCiAKLSNpbmNsdWRlICJza2lhL2V4
dC9wbGF0Zm9ybV9jYW52YXMuaCIKLQogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBJbWFn
ZUJ1ZmZlckRhdGEgewogcHVibGljOgogICAgIEltYWdlQnVmZmVyRGF0YShjb25zdCBJbnRTaXpl
Jik7CiAKLSAgICBza2lhOjpQbGF0Zm9ybUNhbnZhcyBtX2NhbnZhczsKKyAgICBPd25QdHI8U2tD
YW52YXM+IG1fY2FudmFzOwogICAgIFBsYXRmb3JtQ29udGV4dFNraWEgbV9wbGF0Zm9ybUNvbnRl
eHQ7CiB9OwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9MYXllckNocm9taXVtLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJDaHJvbWl1bS5oCShyZXZpc2lvbiA4Mzc0OCkKKysrIFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyQ2hyb21pdW0uaAko
d29ya2luZyBjb3B5KQpAQCAtNTAsMTEgKzUwLDYgQEAKICNpbmNsdWRlIDx3dGYvdGV4dC9TdHJp
bmdIYXNoLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CiAKLQotbmFtZXNwYWNl
IHNraWEgewotY2xhc3MgUGxhdGZvcm1DYW52YXM7Ci19Ci0KIG5hbWVzcGFjZSBXZWJDb3JlIHsK
IAogY2xhc3MgQ0NMYXllckltcGw7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9MYXllclJlbmRlcmVyQ2hyb21pdW0uaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclJlbmRlcmVyQ2hyb21p
dW0uaAkocmV2aXNpb24gODM3NDgpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9MYXllclJlbmRlcmVyQ2hyb21pdW0uaAkod29ya2luZyBjb3B5KQpAQCAtMTk0
LDcgKzE5NCw3IEBAIHByaXZhdGU6CiAgICAgYm9vbCBtX2NvbXBvc2l0ZU9mZnNjcmVlbjsKIAog
I2lmIFVTRShTS0lBKQotICAgIE93blB0cjxza2lhOjpQbGF0Zm9ybUNhbnZhcz4gbV9yb290TGF5
ZXJDYW52YXM7CisgICAgT3duUHRyPFNrQ2FudmFzPiBtX3Jvb3RMYXllckNhbnZhczsKICAgICBP
d25QdHI8UGxhdGZvcm1Db250ZXh0U2tpYT4gbV9yb290TGF5ZXJTa2lhQ29udGV4dDsKICAgICBP
d25QdHI8R3JhcGhpY3NDb250ZXh0PiBtX3Jvb3RMYXllckdyYXBoaWNzQ29udGV4dDsKICNlbGlm
IFBMQVRGT1JNKENHKQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vUGxhdGZvcm1DYW52YXMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1BsYXRmb3JtQ2FudmFzLmNwcAkocmV2aXNpb24gODM3
NDgpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9QbGF0Zm9y
bUNhbnZhcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTUyLDcgKzUyLDcgQEAgdm9pZCBQbGF0Zm9y
bUNhbnZhczo6cmVzaXplKGNvbnN0IEludFNpegogewogICAgIG1fc2l6ZSA9IHNpemU7CiAjaWYg
VVNFKFNLSUEpCi0gICAgbV9za2lhQ2FudmFzID0gbmV3IHNraWE6OlBsYXRmb3JtQ2FudmFzKHNp
emUud2lkdGgoKSwgc2l6ZS5oZWlnaHQoKSwgZmFsc2UpOworICAgIG1fc2tpYUNhbnZhcyA9IHNr
aWE6OkNyZWF0ZUJpdG1hcENhbnZhcyhzaXplLndpZHRoKCksIHNpemUuaGVpZ2h0KCksIGZhbHNl
KTsKICNlbGlmIFBMQVRGT1JNKENHKQogICAgIHNpemVfdCBidWZmZXJTaXplID0gc2l6ZS53aWR0
aCgpICogc2l6ZS5oZWlnaHQoKSAqIDQ7CiAgICAgbV9waXhlbERhdGEgPSBhZG9wdEFycmF5UHRy
KG5ldyB1aW50OF90W2J1ZmZlclNpemVdKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL1BsYXRmb3JtQ2FudmFzLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vUGxhdGZvcm1DYW52YXMuaAkocmV2
aXNpb24gODM3NDgpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9QbGF0Zm9ybUNhbnZhcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0zOSw4ICszOSw4IEBACiAjZW5k
aWYKIAogI2lmIFVTRShTS0lBKQotbmFtZXNwYWNlIHNraWEgeyBjbGFzcyBQbGF0Zm9ybUNhbnZh
czsgfQogY2xhc3MgU2tCaXRtYXA7CitjbGFzcyBTa0NhbnZhczsKICNlbmRpZgogCiBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CkBAIC05Nyw3ICs5Nyw3IEBAIHB1YmxpYzoKIAogcHJpdmF0ZToKICNpZiBV
U0UoU0tJQSkKLSAgICBPd25QdHI8c2tpYTo6UGxhdGZvcm1DYW52YXM+IG1fc2tpYUNhbnZhczsK
KyAgICBPd25QdHI8U2tDYW52YXM+IG1fc2tpYUNhbnZhczsKICNlbGlmIFBMQVRGT1JNKENHKQog
ICAgIE93bkFycmF5UHRyPHVpbnQ4X3Q+IG1fcGl4ZWxEYXRhOwogI2VuZGlmCkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9UcmFuc3BhcmVuY3lXaW4uY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L1RyYW5zcGFyZW5jeVdpbi5jcHAJKHJldmlzaW9uIDgzNzQ4KQorKysgU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vVHJhbnNwYXJlbmN5V2luLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtNDksMTQgKzQ5LDE0IEBAIG5hbWVzcGFjZSB7CiAvLyBpbnRvLiBCdWZmZXJzIGxh
cmdlciB0aGFuIHRoaXMgd2lsbCBiZSBkZXN0cm95ZWQgd2hlbiB3ZSdyZSBkb25lIHdpdGggdGhl
bS4KIGNvbnN0IGludCBtYXhDYWNoZWRCdWZmZXJQaXhlbFNpemUgPSA2NTUzNjsKIAotaW5saW5l
IHNraWE6OlBsYXRmb3JtQ2FudmFzKiBjYW52YXNGb3JDb250ZXh0KGNvbnN0IEdyYXBoaWNzQ29u
dGV4dCYgY29udGV4dCkKK2lubGluZSBTa0NhbnZhcyogY2FudmFzRm9yQ29udGV4dChjb25zdCBH
cmFwaGljc0NvbnRleHQmIGNvbnRleHQpCiB7CiAgICAgcmV0dXJuIGNvbnRleHQucGxhdGZvcm1D
b250ZXh0KCktPmNhbnZhcygpOwogfQogCiBpbmxpbmUgY29uc3QgU2tCaXRtYXAmIGJpdG1hcEZv
ckNvbnRleHQoY29uc3QgR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KQogewotICAgIHJldHVybiBj
YW52YXNGb3JDb250ZXh0KGNvbnRleHQpLT5nZXRUb3BQbGF0Zm9ybURldmljZSgpLmFjY2Vzc0Jp
dG1hcChmYWxzZSk7CisgICAgcmV0dXJuIGNhbnZhc0ZvckNvbnRleHQoY29udGV4dCktPmdldFRv
cERldmljZSgpLT5hY2Nlc3NCaXRtYXAoZmFsc2UpOwogfQogCiB2b2lkIGNvbXBvc2l0ZVRvQ29w
eShjb25zdCBHcmFwaGljc0NvbnRleHQmIHNvdXJjZUxheWVycywKQEAgLTQ2Niw3ICs0NjYsNyBA
QCB2b2lkIFRyYW5zcGFyZW5jeVdpbjo6Y29tcG9zaXRlVGV4dENvbXBvCiAgICAgaWYgKCFtX3Zh
bGlkTGF5ZXIpCiAgICAgICAgIHJldHVybjsKIAotICAgIGNvbnN0IFNrQml0bWFwJiBiaXRtYXAg
PSBtX2xheWVyQnVmZmVyLT5jb250ZXh0KCktPnBsYXRmb3JtQ29udGV4dCgpLT5jYW52YXMoKS0+
Z2V0VG9wUGxhdGZvcm1EZXZpY2UoKS5hY2Nlc3NCaXRtYXAodHJ1ZSk7CisgICAgY29uc3QgU2tC
aXRtYXAmIGJpdG1hcCA9IG1fbGF5ZXJCdWZmZXItPmNvbnRleHQoKS0+cGxhdGZvcm1Db250ZXh0
KCktPmNhbnZhcygpLT5nZXRUb3BEZXZpY2UoKS0+YWNjZXNzQml0bWFwKHRydWUpOwogICAgIFNr
Q29sb3IgdGV4dENvbG9yID0gbV90ZXh0Q29tcG9zaXRlQ29sb3IucmdiKCk7CiAgICAgZm9yIChp
bnQgeSA9IDA7IHkgPCBtX2xheWVyU2l6ZS5oZWlnaHQoKTsgeSsrKSB7CiAgICAgICAgIHVpbnQz
Ml90KiByb3cgPSBiaXRtYXAuZ2V0QWRkcjMyKDAsIHkpOwpAQCAtNTAyLDcgKzUwMiw3IEBAIHZv
aWQgVHJhbnNwYXJlbmN5V2luOjptYWtlTGF5ZXJPcGFxdWUoKQogICAgICAgICByZXR1cm47CiAK
ICAgICBTa0JpdG1hcCYgYml0bWFwID0gY29uc3RfY2FzdDxTa0JpdG1hcCY+KG1fZHJhd0NvbnRl
eHQtPnBsYXRmb3JtQ29udGV4dCgpLT4KLSAgICAgICAgY2FudmFzKCktPmdldFRvcFBsYXRmb3Jt
RGV2aWNlKCkuYWNjZXNzQml0bWFwKHRydWUpKTsKKyAgICAgICAgY2FudmFzKCktPmdldFRvcERl
dmljZSgpLT5hY2Nlc3NCaXRtYXAodHJ1ZSkpOwogICAgIGZvciAoaW50IHkgPSAwOyB5IDwgbV9s
YXllclNpemUuaGVpZ2h0KCk7IHkrKykgewogICAgICAgICB1aW50MzJfdCogcm93ID0gYml0bWFw
LmdldEFkZHIzMigwLCB5KTsKICAgICAgICAgZm9yIChpbnQgeCA9IDA7IHggPCBtX2xheWVyU2l6
ZS53aWR0aCgpOyB4KyspCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9z
a2lhL0ltYWdlQnVmZmVyU2tpYS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3Mvc2tpYS9JbWFnZUJ1ZmZlclNraWEuY3BwCShyZXZpc2lvbiA4Mzc0OCkK
KysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3NraWEvSW1hZ2VCdWZmZXJTa2lh
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjYsMTkgKzY2LDIxIEBAIEltYWdlQnVmZmVyOjpJbWFn
ZUJ1ZmZlcihjb25zdCBJbnRTaXplJgogICAgIDogbV9kYXRhKHNpemUpCiAgICAgLCBtX3NpemUo
c2l6ZSkKIHsKLSAgICBpZiAoIW1fZGF0YS5tX2NhbnZhcy5pbml0aWFsaXplKHNpemUud2lkdGgo
KSwgc2l6ZS5oZWlnaHQoKSwgZmFsc2UpKSB7CisgICAgU2tDYW52YXMqIGNhbnZhcyA9IHNraWE6
OkNyZWF0ZUJpdG1hcENhbnZhcyhzaXplLndpZHRoKCksIHNpemUuaGVpZ2h0KCksIGZhbHNlKTsK
KyAgICBpZiAoIWNhbnZhcykgewogICAgICAgICBzdWNjZXNzID0gZmFsc2U7CiAgICAgICAgIHJl
dHVybjsKICAgICB9CiAKLSAgICBtX2RhdGEubV9wbGF0Zm9ybUNvbnRleHQuc2V0Q2FudmFzKCZt
X2RhdGEubV9jYW52YXMpOworICAgIG1fZGF0YS5tX2NhbnZhcyA9IGNhbnZhczsKKyAgICBtX2Rh
dGEubV9wbGF0Zm9ybUNvbnRleHQuc2V0Q2FudmFzKG1fZGF0YS5tX2NhbnZhcy5nZXQoKSk7CiAg
ICAgbV9jb250ZXh0LnNldChuZXcgR3JhcGhpY3NDb250ZXh0KCZtX2RhdGEubV9wbGF0Zm9ybUNv
bnRleHQpKTsKICAgICBtX2NvbnRleHQtPnBsYXRmb3JtQ29udGV4dCgpLT5zZXREcmF3aW5nVG9J
bWFnZUJ1ZmZlcih0cnVlKTsKIAogICAgIC8vIE1ha2UgdGhlIGJhY2tncm91bmQgdHJhbnNwYXJl
bnQuIEl0IHdvdWxkIGJlIG5pY2UgaWYgdGhpcyB3YXNuJ3QKICAgICAvLyByZXF1aXJlZCwgYnV0
IHRoZSBjYW52YXMgaXMgY3VycmVudGx5IGZpbGxlZCB3aXRoIHRoZSBtYWdpYyB0cmFuc3BhcmVu
Y3kKICAgICAvLyBjb2xvci4gQ2FuIHdlIGhhdmUgYW5vdGhlciB3YXkgdG8gbWFuYWdlIHRoaXM/
Ci0gICAgbV9kYXRhLm1fY2FudmFzLmRyYXdBUkdCKDAsIDAsIDAsIDAsIFNrWGZlcm1vZGU6OmtD
bGVhcl9Nb2RlKTsKKyAgICBtX2RhdGEubV9jYW52YXMtPmRyYXdBUkdCKDAsIDAsIDAsIDAsIFNr
WGZlcm1vZGU6OmtDbGVhcl9Nb2RlKTsKICAgICBzdWNjZXNzID0gdHJ1ZTsKIH0KIApJbmRleDog
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9JbWFnZVNraWEuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3NraWEvSW1hZ2VTa2lh
LmNwcAkocmV2aXNpb24gODM3NDgpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9za2lhL0ltYWdlU2tpYS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI2MiwxMiArMjYyLDE3IEBA
IHN0YXRpYyB2b2lkIHBhaW50U2tCaXRtYXAoUGxhdGZvcm1Db250ZXgKICAgICBwYWludC5zZXRB
bHBoYShwbGF0Zm9ybUNvbnRleHQtPmdldE5vcm1hbGl6ZWRBbHBoYSgpKTsKICAgICBwYWludC5z
ZXRMb29wZXIocGxhdGZvcm1Db250ZXh0LT5nZXREcmF3TG9vcGVyKCkpOwogCi0gICAgc2tpYTo6
UGxhdGZvcm1DYW52YXMqIGNhbnZhcyA9IHBsYXRmb3JtQ29udGV4dC0+Y2FudmFzKCk7CisgICAg
U2tDYW52YXMqIGNhbnZhcyA9IHBsYXRmb3JtQ29udGV4dC0+Y2FudmFzKCk7CiAKLSAgICBSZXNh
bXBsaW5nTW9kZSByZXNhbXBsaW5nID0gcGxhdGZvcm1Db250ZXh0LT5pc1ByaW50aW5nKCkgPyBS
RVNBTVBMRV9OT05FIDoKKyAgICBSZXNhbXBsaW5nTW9kZSByZXNhbXBsaW5nOworI2lmIEVOQUJM
RShTS0lBX0dQVSkKKyAgICByZXNhbXBsaW5nID0gUkVTQU1QTEVfTElORUFSOworI2Vsc2UKKyAg
ICByZXNhbXBsaW5nID0gcGxhdGZvcm1Db250ZXh0LT5wcmludGluZygpID8gUkVTQU1QTEVfTk9O
RSA6CiAgICAgICAgIGNvbXB1dGVSZXNhbXBsaW5nTW9kZShwbGF0Zm9ybUNvbnRleHQsIGJpdG1h
cCwgc3JjUmVjdC53aWR0aCgpLCBzcmNSZWN0LmhlaWdodCgpLAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgU2tTY2FsYXJUb0Zsb2F0KGRlc3RSZWN0LndpZHRoKCkpLAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgU2tTY2FsYXJUb0Zsb2F0KGRlc3RSZWN0LmhlaWdodCgpKSk7
CisjZW5kaWYKICAgICBpZiAocmVzYW1wbGluZyA9PSBSRVNBTVBMRV9BV0VTT01FKSB7CiAgICAg
ICAgIGRyYXdSZXNhbXBsZWRCaXRtYXAoKmNhbnZhcywgcGFpbnQsIGJpdG1hcCwgc3JjUmVjdCwg
ZGVzdFJlY3QpOwogICAgIH0gZWxzZSB7CkBAIC0zNjMsMTMgKzM2OCwxNyBAQCB2b2lkIEltYWdl
OjpkcmF3UGF0dGVybihHcmFwaGljc0NvbnRleHQqCiAKICAgICAvLyBDb21wdXRlIHRoZSByZXNh
bXBsaW5nIG1vZGUuCiAgICAgUmVzYW1wbGluZ01vZGUgcmVzYW1wbGluZzsKLSAgICBpZiAoY29u
dGV4dC0+cGxhdGZvcm1Db250ZXh0KCktPmlzUHJpbnRpbmcoKSkKKyNpZiBFTkFCTEUoU0tJQV9H
UFUpCisgICAgcmVzYW1wbGluZyA9IFJFU0FNUExFX0xJTkVBUjsKKyNlbHNlCisgICAgaWYgKGNv
bnRleHQtPnBsYXRmb3JtQ29udGV4dCgpLT5wcmludGluZygpKQogICAgICAgcmVzYW1wbGluZyA9
IFJFU0FNUExFX0xJTkVBUjsKICAgICBlbHNlIHsKICAgICAgIHJlc2FtcGxpbmcgPSBjb21wdXRl
UmVzYW1wbGluZ01vZGUoY29udGV4dC0+cGxhdGZvcm1Db250ZXh0KCksICpiaXRtYXAsCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNyY1JlY3Qud2lkdGgoKSwgc3Jj
UmVjdC5oZWlnaHQoKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ZGVzdEJpdG1hcFdpZHRoLCBkZXN0Qml0bWFwSGVpZ2h0KTsKICAgICB9CisjZW5kaWYKIAogICAg
IC8vIExvYWQgdGhlIHRyYW5zZm9ybSBXZWJLaXQgcmVxdWVzdGVkLgogICAgIFNrTWF0cml4IG1h
dHJpeChwYXR0ZXJuVHJhbnNmb3JtKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL3NraWEvUGxhdGZvcm1Db250ZXh0U2tpYS5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9QbGF0Zm9ybUNvbnRleHRTa2lhLmNwcAko
cmV2aXNpb24gODM3NDgpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9za2lh
L1BsYXRmb3JtQ29udGV4dFNraWEuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMTMsOCArMjEzLDkg
QEAgU2tDb2xvciBQbGF0Zm9ybUNvbnRleHRTa2lhOjpTdGF0ZTo6YXBwbAogLy8gUGxhdGZvcm1D
b250ZXh0U2tpYSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0KIAogLy8gRGFuZ2VyOiBjYW52YXMgY2FuIGJlIE5VTEwuCi1QbGF0Zm9ybUNv
bnRleHRTa2lhOjpQbGF0Zm9ybUNvbnRleHRTa2lhKHNraWE6OlBsYXRmb3JtQ2FudmFzKiBjYW52
YXMpCitQbGF0Zm9ybUNvbnRleHRTa2lhOjpQbGF0Zm9ybUNvbnRleHRTa2lhKFNrQ2FudmFzKiBj
YW52YXMpCiAgICAgOiBtX2NhbnZhcyhjYW52YXMpCisgICAgLCBtX3ByaW50aW5nKGZhbHNlKQog
ICAgICwgbV9kcmF3aW5nVG9JbWFnZUJ1ZmZlcihmYWxzZSkKICAgICAsIG1fdXNlR1BVKGZhbHNl
KQogI2lmIEVOQUJMRShBQ0NFTEVSQVRFRF8yRF9DQU5WQVMpCkBAIC0yNDAsNyArMjQxLDcgQEAg
UGxhdGZvcm1Db250ZXh0U2tpYTo6flBsYXRmb3JtQ29udGV4dFNraQogI2VuZGlmCiB9CiAKLXZv
aWQgUGxhdGZvcm1Db250ZXh0U2tpYTo6c2V0Q2FudmFzKHNraWE6OlBsYXRmb3JtQ2FudmFzKiBj
YW52YXMpCit2b2lkIFBsYXRmb3JtQ29udGV4dFNraWE6OnNldENhbnZhcyhTa0NhbnZhcyogY2Fu
dmFzKQogewogICAgIG1fY2FudmFzID0gY2FudmFzOwogfQpAQCAtNjA5LDIxICs2MTAsMTIgQEAg
Y29uc3QgU2tCaXRtYXAqIFBsYXRmb3JtQ29udGV4dFNraWE6OmJpdAogICAgIHJldHVybiAmbV9j
YW52YXMtPmdldERldmljZSgpLT5hY2Nlc3NCaXRtYXAoZmFsc2UpOwogfQogCi1ib29sIFBsYXRm
b3JtQ29udGV4dFNraWE6OmlzUHJpbnRpbmcoKQotewotI2lmIEVOQUJMRShTS0lBX0dQVSkKLSAg
ICByZXR1cm4gdHJ1ZTsKLSNlbHNlCi0gICAgcmV0dXJuIG1fY2FudmFzLT5nZXRUb3BQbGF0Zm9y
bURldmljZSgpLklzVmVjdG9yaWFsKCk7Ci0jZW5kaWYKLX0KLQogYm9vbCBQbGF0Zm9ybUNvbnRl
eHRTa2lhOjppc05hdGl2ZUZvbnRSZW5kZXJpbmdBbGxvd2VkKCkKIHsKICNpZiBFTkFCTEUoU0tJ
QV9HUFUpCiAgICAgcmV0dXJuIGZhbHNlOwogI2Vsc2UKLSAgICByZXR1cm4gbV9jYW52YXMtPmdl
dFRvcFBsYXRmb3JtRGV2aWNlKCkuSXNOYXRpdmVGb250UmVuZGVyaW5nQWxsb3dlZCgpOworICAg
IHJldHVybiBza2lhOjpTdXBwb3J0c1BsYXRmb3JtUGFpbnQobV9jYW52YXMpOwogI2VuZGlmCiB9
CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3NraWEvUGxhdGZvcm1D
b250ZXh0U2tpYS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL3NraWEvUGxhdGZvcm1Db250ZXh0U2tpYS5oCShyZXZpc2lvbiA4Mzc0OCkKKysrIFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3NraWEvUGxhdGZvcm1Db250ZXh0U2tpYS5oCSh3
b3JraW5nIGNvcHkpCkBAIC03MiwxMiArNzIsMTIgQEAgY2xhc3MgUGxhdGZvcm1Db250ZXh0U2tp
YSB7CiBwdWJsaWM6CiAgICAgLy8gRm9yIHByaW50aW5nLCB0aGVyZSBzaG91bGRuJ3QgYmUgYW55
IGNhbnZhcy4gY2FudmFzIGNhbiBiZSBOVUxMLiBJZiB5b3UKICAgICAvLyBzdXBwbHkgYSBOVUxM
IGNhbnZhcywgeW91IGNhbiBhbHNvIGNhbGwgc2V0Q2FudmFzIGxhdGVyLgotICAgIFBsYXRmb3Jt
Q29udGV4dFNraWEoc2tpYTo6UGxhdGZvcm1DYW52YXMqKTsKKyAgICBQbGF0Zm9ybUNvbnRleHRT
a2lhKFNrQ2FudmFzKik7CiAgICAgflBsYXRmb3JtQ29udGV4dFNraWEoKTsKIAogICAgIC8vIFNl
dHMgdGhlIGNhbnZhcyBhc3NvY2lhdGVkIHdpdGggdGhpcyBjb250ZXh0LiBVc2Ugd2hlbiBzdXBw
bHlpbmcgTlVMTAogICAgIC8vIHRvIHRoZSBjb25zdHJ1Y3Rvci4KLSAgICB2b2lkIHNldENhbnZh
cyhza2lhOjpQbGF0Zm9ybUNhbnZhcyopOworICAgIHZvaWQgc2V0Q2FudmFzKFNrQ2FudmFzKik7
CiAKICAgICAvLyBJZiBmYWxzZSB3ZSdyZSByZW5kZXJpbmcgdG8gYSBHcmFwaGljc0NvbnRleHQg
Zm9yIGEgd2ViIHBhZ2UsIGlmIGZhbHNlCiAgICAgLy8gd2UncmUgbm90IChhcyBpcyB0aGUgY2Fz
ZSB3aGVuIHJlbmRlcmluZyB0byBhIGNhbnZhcyBvYmplY3QpLgpAQCAtMTQ3LDcgKzE0Nyw3IEBA
IHB1YmxpYzoKICAgICBTa0NvbG9yIGVmZmVjdGl2ZVN0cm9rZUNvbG9yKCkgY29uc3Q7CiAKICAg
ICAvLyBSZXR1cm5zIHRoZSBjYW52YXMgdXNlZCBmb3IgcGFpbnRpbmcsIE5PVCBndWFyYW50ZWVk
IHRvIGJlIG5vbi1udWxsLgotICAgIHNraWE6OlBsYXRmb3JtQ2FudmFzKiBjYW52YXMoKSB7IHJl
dHVybiBtX2NhbnZhczsgfQorICAgIFNrQ2FudmFzKiBjYW52YXMoKSB7IHJldHVybiBtX2NhbnZh
czsgfQogCiAgICAgSW50ZXJwb2xhdGlvblF1YWxpdHkgaW50ZXJwb2xhdGlvblF1YWxpdHkoKSBj
b25zdDsKICAgICB2b2lkIHNldEludGVycG9sYXRpb25RdWFsaXR5KEludGVycG9sYXRpb25RdWFs
aXR5IGludGVycG9sYXRpb25RdWFsaXR5KTsKQEAgLTE2Myw3ICsxNjMsOCBAQCBwdWJsaWM6CiAg
ICAgLy8gUmV0dXJucyBpZiB0aGUgY29udGV4dCBpcyBhIHByaW50aW5nIGNvbnRleHQgaW5zdGVh
ZCBvZiBhIGRpc3BsYXkKICAgICAvLyBjb250ZXh0LiBCaXRtYXAgc2hvdWxkbid0IGJlIHJlc2Ft
cGxlZCB3aGVuIHByaW50aW5nIHRvIGtlZXAgdGhlIGJlc3QKICAgICAvLyBwb3NzaWJsZSBxdWFs
aXR5LgotICAgIGJvb2wgaXNQcmludGluZygpOworICAgIGJvb2wgcHJpbnRpbmcoKSBjb25zdCB7
IHJldHVybiBtX3ByaW50aW5nOyB9CisgICAgdm9pZCBzZXRQcmludGluZyhib29sIHApIHsgbV9w
cmludGluZyA9IHA7IH0KIAogICAgIC8vIFJldHVybnMgaWYgdGhlIGNvbnRleHQgYWxsb3dzIHJl
bmRlcmluZyBvZiBmb250cyB1c2luZyBuYXRpdmUgcGxhdGZvcm0KICAgICAvLyBBUElzLiBJZiBm
YWxzZSBpcyByZXR1cm5lZCBmb250IHJlbmRlcmluZyBpcyBwZXJmb3JtZWQgdXNpbmcgdGhlIHNr
aWEKQEAgLTE4NSwxMCArMTg2LDEwIEBAIHB1YmxpYzoKICAgICBHTEVTMkNhbnZhcyogZ3B1Q2Fu
dmFzKCkgY29uc3QgeyByZXR1cm4gMDsgfQogI2VuZGlmCiAgICAgLy8gQ2FsbCB0aGVzZSBiZWZv
cmUgbWFraW5nIGEgY2FsbCB0aGF0IG1hbmlwdWxhdGVzIHRoZSB1bmRlcmx5aW5nCi0gICAgLy8g
c2tpYTo6UGxhdGZvcm1DYW52YXMgb3IgV2ViQ29yZTo6R0xFUzJDYW52YXMKKyAgICAvLyBTa0Nh
bnZhcyBvciBXZWJDb3JlOjpHTEVTMkNhbnZhcwogICAgIHZvaWQgcHJlcGFyZUZvclNvZnR3YXJl
RHJhdygpIGNvbnN0OwogICAgIHZvaWQgcHJlcGFyZUZvckhhcmR3YXJlRHJhdygpIGNvbnN0Owot
ICAgIC8vIENhbGwgdG8gZm9yY2UgdGhlIHNraWE6OlBsYXRmb3JtQ2FudmFzIHRvIGNvbnRhaW4g
YWxsIHJlbmRlcmluZyByZXN1bHRzLgorICAgIC8vIENhbGwgdG8gZm9yY2UgdGhlIFNrQ2FudmFz
IHRvIGNvbnRhaW4gYWxsIHJlbmRlcmluZyByZXN1bHRzLgogICAgIHZvaWQgc3luY1NvZnR3YXJl
Q2FudmFzKCkgY29uc3Q7CiAgICAgdm9pZCBtYXJrRGlydHlSZWN0KGNvbnN0IEludFJlY3QmIHJl
Y3QpOwogCkBAIC0yMDUsNyArMjA2LDcgQEAgcHJpdmF0ZToKICAgICBzdHJ1Y3QgU3RhdGU7CiAK
ICAgICAvLyBOVUxMIGluZGljYXRlcyBwYWludGluZyBpcyBkaXNhYmxlZC4gTmV2ZXIgZGVsZXRl
IHRoaXMgb2JqZWN0LgotICAgIHNraWE6OlBsYXRmb3JtQ2FudmFzKiBtX2NhbnZhczsKKyAgICBT
a0NhbnZhcyogbV9jYW52YXM7CiAKICAgICAvLyBTdGF0ZXMgc3RhY2suIEVuYWJsZXMgbG9jYWwg
ZHJhd2luZyBzdGF0ZSBjaGFuZ2Ugd2l0aCBzYXZlKCkvcmVzdG9yZSgpCiAgICAgLy8gY2FsbHMu
CkBAIC0yMTgsNiArMjE5LDcgQEAgcHJpdmF0ZToKICAgICAvLyBWYWx1ZXMgYXJlIHVzZWQgaW4g
SW1hZ2VTa2lhLmNwcAogICAgIEludFNpemUgbV9pbWFnZVJlc2FtcGxpbmdIaW50U3JjU2l6ZTsK
ICAgICBGbG9hdFNpemUgbV9pbWFnZVJlc2FtcGxpbmdIaW50RHN0U2l6ZTsKKyAgICBib29sIG1f
cHJpbnRpbmc7CiAgICAgYm9vbCBtX2RyYXdpbmdUb0ltYWdlQnVmZmVyOwogICAgIGJvb2wgbV91
c2VHUFU7CiAjaWYgRU5BQkxFKEFDQ0VMRVJBVEVEXzJEX0NBTlZBUykKSW5kZXg6IFNvdXJjZS9X
ZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvY2hy
b21pdW0vQ2hhbmdlTG9nCShyZXZpc2lvbiA4Mzc1MCkKKysrIFNvdXJjZS9XZWJLaXQvY2hyb21p
dW0vQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMjAgQEAKKzIwMTEtMDQtMTMg
IEFsb2sgUHJpeWFkYXJzaGkgIDxhbG9rcEBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgUmVtb3ZlIGRlcGVuZGVuY3kgb24gY2hy
b21pdW0gc2tpYTo6UGxhdGZvcm1DYW52YXMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTU3NTYzCisKKyAgICAgICAgKiBwdWJsaWMvV2ViQ2FudmFzLmg6
CisgICAgICAgICogc3JjL1dlYkZyYW1lSW1wbC5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYkZy
YW1lSW1wbDo6cHJpbnRQYWdlKToKKyAgICAgICAgKiB0ZXN0cy9UcmFuc3BhcmVuY3lXaW5UZXN0
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmRyYXdOYXRpdmVSZWN0KToKKyAgICAgICAgKFdlYkNv
cmU6OmdldFBpeGVsQXQpOgorICAgICAgICAoV2ViQ29yZTo6Y2xlYXJUb3BMYXllckFscGhhQ2hh
bm5lbCk6CisgICAgICAgIChXZWJDb3JlOjpjbGVhclRvcExheWVyQWxwaGFQaXhlbCk6CisgICAg
ICAgIChXZWJDb3JlOjpURVNUKToKKwogMjAxMS0wNC0xMyAgS2ludWtvIFlhc3VkYSAgPGtpbnVr
b0BjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgRGF2aWQgTGV2aW4uCkluZGV4
OiBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJDYW52YXMuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJDYW52YXMuaAkocmV2aXNpb24gODM3
NDgpCisrKyBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJDYW52YXMuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMzQsNyArMzQsNyBAQAogI2luY2x1ZGUgIldlYkNvbW1vbi5oIgogCiAjaWYg
V0VCS0lUX1VTSU5HX1NLSUEKLW5hbWVzcGFjZSBza2lhIHsgY2xhc3MgUGxhdGZvcm1DYW52YXM7
IH0KK2NsYXNzIFNrQ2FudmFzOwogI2VsaWYgV0VCS0lUX1VTSU5HX0NHCiBzdHJ1Y3QgQ0dDb250
ZXh0OwogI2VuZGlmCkBAIC00Miw3ICs0Miw3IEBAIHN0cnVjdCBDR0NvbnRleHQ7CiBuYW1lc3Bh
Y2UgV2ViS2l0IHsKIAogI2lmIFdFQktJVF9VU0lOR19TS0lBCi10eXBlZGVmIHNraWE6OlBsYXRm
b3JtQ2FudmFzIFdlYkNhbnZhczsKK3R5cGVkZWYgU2tDYW52YXMgV2ViQ2FudmFzOwogI2VsaWYg
V0VCS0lUX1VTSU5HX0NHCiB0eXBlZGVmIHN0cnVjdCBDR0NvbnRleHQgV2ViQ2FudmFzOwogI2Vs
c2UKSW5kZXg6IFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYkZyYW1lSW1wbC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViRnJhbWVJbXBsLmNwcAko
cmV2aXNpb24gODM3NDgpCisrKyBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJGcmFtZUlt
cGwuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNDA5LDcgKzE0MDksMTMgQEAgZmxvYXQgV2ViRnJh
bWVJbXBsOjpwcmludFBhZ2UoaW50IHBhZ2UsCiAgICAgICAgIHJldHVybiAwOwogICAgIH0KIAot
ICAgIHJldHVybiBtX3ByaW50Q29udGV4dC0+c3Bvb2xQYWdlKEdyYXBoaWNzQ29udGV4dEJ1aWxk
ZXIoY2FudmFzKS5jb250ZXh0KCksIHBhZ2UpOworICAgIEdyYXBoaWNzQ29udGV4dEJ1aWxkZXIg
YnVpbGRlcihjYW52YXMpOworICAgIEdyYXBoaWNzQ29udGV4dCYgZ2MgPSBidWlsZGVyLmNvbnRl
eHQoKTsKKyNpZiBXRUJLSVRfVVNJTkdfU0tJQQorICAgIGdjLnBsYXRmb3JtQ29udGV4dCgpLT5z
ZXRQcmludGluZyh0cnVlKTsKKyNlbmRpZgorCisgICAgcmV0dXJuIG1fcHJpbnRDb250ZXh0LT5z
cG9vbFBhZ2UoZ2MsIHBhZ2UpOwogfQogCiB2b2lkIFdlYkZyYW1lSW1wbDo6cHJpbnRFbmQoKQpJ
bmRleDogU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9UcmFuc3BhcmVuY3lXaW5UZXN0LmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL1RyYW5zcGFyZW5j
eVdpblRlc3QuY3BwCShyZXZpc2lvbiA4Mzc0OCkKKysrIFNvdXJjZS9XZWJLaXQvY2hyb21pdW0v
dGVzdHMvVHJhbnNwYXJlbmN5V2luVGVzdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTUwLDggKzUw
LDggQEAgc3RhdGljIEZsb2F0UmVjdCBSRUNUVG9GbG9hdFJlY3QoY29uc3QgUgogc3RhdGljIHZv
aWQgZHJhd05hdGl2ZVJlY3QoR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgaW50IHgsIGludCB5LCBpbnQgdywgaW50IGgpCiB7Ci0gICAgc2tpYTo6
UGxhdGZvcm1DYW52YXMqIGNhbnZhcyA9IGNvbnRleHQtPnBsYXRmb3JtQ29udGV4dCgpLT5jYW52
YXMoKTsKLSAgICBIREMgZGMgPSBjYW52YXMtPmJlZ2luUGxhdGZvcm1QYWludCgpOworICAgIFNr
Q2FudmFzKiBjYW52YXMgPSBjb250ZXh0LT5wbGF0Zm9ybUNvbnRleHQoKS0+Y2FudmFzKCk7Cisg
ICAgSERDIGRjID0gc2tpYTo6QmVnaW5QbGF0Zm9ybVBhaW50KGNhbnZhcyk7CiAKICAgICBSRUNU
IGlubmVyUmM7CiAgICAgaW5uZXJSYy5sZWZ0ID0geDsKQEAgLTYxLDEzICs2MSwxMiBAQCBzdGF0
aWMgdm9pZCBkcmF3TmF0aXZlUmVjdChHcmFwaGljc0NvbnRlCiAgICAgRmlsbFJlY3QoZGMsICZp
bm5lclJjLAogICAgICAgICAgICAgIHJlaW50ZXJwcmV0X2Nhc3Q8SEJSVVNIPihHZXRTdG9ja09i
amVjdChCTEFDS19CUlVTSCkpKTsKIAotICAgIGNhbnZhcy0+ZW5kUGxhdGZvcm1QYWludCgpOwor
ICAgIHNraWE6OkVuZFBsYXRmb3JtUGFpbnQoY2FudmFzKTsKIH0KIAogc3RhdGljIENvbG9yIGdl
dFBpeGVsQXQoR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBpbnQgeCwgaW50IHkpCiB7Ci0gICAg
Y29uc3QgU2tCaXRtYXAmIGJpdG1hcCA9IGNvbnRleHQtPnBsYXRmb3JtQ29udGV4dCgpLT5jYW52
YXMoKS0+Ci0gICAgICAgIGdldFRvcFBsYXRmb3JtRGV2aWNlKCkuYWNjZXNzQml0bWFwKGZhbHNl
KTsKKyAgICBjb25zdCBTa0JpdG1hcCYgYml0bWFwID0gY29udGV4dC0+cGxhdGZvcm1Db250ZXh0
KCktPmNhbnZhcygpLT5nZXRUb3BEZXZpY2UoKS0+YWNjZXNzQml0bWFwKGZhbHNlKTsKICAgICBy
ZXR1cm4gQ29sb3IoKnJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgUkdCQTMyKj4oYml0bWFwLmdldEFk
ZHIzMih4LCB5KSkpOwogfQogCkBAIC03NSw4ICs3NCw3IEBAIHN0YXRpYyBDb2xvciBnZXRQaXhl
bEF0KEdyYXBoaWNzQ29udGV4dCoKIC8vIFdpbmRvd3MgbWVzc2luZyBpdCB1cC4KIHN0YXRpYyB2
b2lkIGNsZWFyVG9wTGF5ZXJBbHBoYUNoYW5uZWwoR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0KQog
ewotICAgIFNrQml0bWFwJiBiaXRtYXAgPSBjb25zdF9jYXN0PFNrQml0bWFwJj4oY29udGV4dC0+
cGxhdGZvcm1Db250ZXh0KCktPgotICAgICAgICBjYW52YXMoKS0+Z2V0VG9wUGxhdGZvcm1EZXZp
Y2UoKS5hY2Nlc3NCaXRtYXAoZmFsc2UpKTsKKyAgICBTa0JpdG1hcCYgYml0bWFwID0gY29uc3Rf
Y2FzdDxTa0JpdG1hcCY+KGNvbnRleHQtPnBsYXRmb3JtQ29udGV4dCgpLT5jYW52YXMoKS0+Z2V0
VG9wRGV2aWNlKCktPmFjY2Vzc0JpdG1hcChmYWxzZSkpOwogICAgIGZvciAoaW50IHkgPSAwOyB5
IDwgYml0bWFwLmhlaWdodCgpOyB5KyspIHsKICAgICAgICAgdWludDMyX3QqIHJvdyA9IGJpdG1h
cC5nZXRBZGRyMzIoMCwgeSk7CiAgICAgICAgIGZvciAoaW50IHggPSAwOyB4IDwgYml0bWFwLndp
ZHRoKCk7IHgrKykKQEAgLTg3LDggKzg1LDcgQEAgc3RhdGljIHZvaWQgY2xlYXJUb3BMYXllckFs
cGhhQ2hhbm5lbChHcgogLy8gQ2xlYXJzIHRoZSBhbHBoYSBjaGFubmVsIG9uIHRoZSBzcGVjaWZp
ZWQgcGl4ZWwuCiBzdGF0aWMgdm9pZCBjbGVhclRvcExheWVyQWxwaGFQaXhlbChHcmFwaGljc0Nv
bnRleHQqIGNvbnRleHQsIGludCB4LCBpbnQgeSkKIHsKLSAgICBTa0JpdG1hcCYgYml0bWFwID0g
Y29uc3RfY2FzdDxTa0JpdG1hcCY+KGNvbnRleHQtPnBsYXRmb3JtQ29udGV4dCgpLT4KLSAgICAg
ICAgY2FudmFzKCktPmdldFRvcFBsYXRmb3JtRGV2aWNlKCkuYWNjZXNzQml0bWFwKGZhbHNlKSk7
CisgICAgU2tCaXRtYXAmIGJpdG1hcCA9IGNvbnN0X2Nhc3Q8U2tCaXRtYXAmPihjb250ZXh0LT5w
bGF0Zm9ybUNvbnRleHQoKS0+Y2FudmFzKCktPmdldFRvcERldmljZSgpLT5hY2Nlc3NCaXRtYXAo
ZmFsc2UpKTsKICAgICAqYml0bWFwLmdldEFkZHIzMih4LCB5KSAmPSAweDAwRkZGRkZGOwogfQog
CkBAIC01NTksOSArNTU2LDcgQEAgVEVTVChUcmFuc3BhcmVuY3lXaW4sIFNjYWxlKQogICAgICAg
ICAvLyB0aGUgaGVscGVyIGdvZXMgb3V0IG9mIHNjb3BlLiBXZSBkb24ndCB3YW50IHRvIGNhbGwK
ICAgICAgICAgLy8gY2xlYXJUb3BMYXllckFscGhhQ2hhbm5lbCBiZWNhdXNlIHRoYXQgd2lsbCBh
Y3R1YWxseSBjbGVhciB0aGUgd2hvbGUKICAgICAgICAgLy8gY2FudmFzIChzaW5jZSB3ZSBoYXZl
IG5vIGV4dHJhIGxheWVyISkuCi0gICAgICAgIFNrQml0bWFwJiBiaXRtYXAgPSBjb25zdF9jYXN0
PFNrQml0bWFwJj4oaGVscGVyLmNvbnRleHQoKS0+Ci0gICAgICAgICAgICBwbGF0Zm9ybUNvbnRl
eHQoKS0+Y2FudmFzKCktPmdldFRvcFBsYXRmb3JtRGV2aWNlKCkuCi0gICAgICAgICAgICBhY2Nl
c3NCaXRtYXAoZmFsc2UpKTsKKyAgICAgICAgU2tCaXRtYXAmIGJpdG1hcCA9IGNvbnN0X2Nhc3Q8
U2tCaXRtYXAmPihoZWxwZXIuY29udGV4dCgpLT5wbGF0Zm9ybUNvbnRleHQoKS0+Y2FudmFzKCkt
PmdldFRvcERldmljZSgpLT5hY2Nlc3NCaXRtYXAoZmFsc2UpKTsKICAgICAgICAgKmJpdG1hcC5n
ZXRBZGRyMzIoMiwgMikgJj0gMHgwMEZGRkZGRjsKICAgICAgICAgaGVscGVyLmNvbXBvc2l0ZSgp
OwogICAgIH0KSW5kZXg6IFRvb2xzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9DaGFu
Z2VMb2cJKHJldmlzaW9uIDgzNzUwKQorKysgVG9vbHMvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkp
CkBAIC0xLDMgKzEsMjQgQEAKKzIwMTEtMDQtMTMgIEFsb2sgUHJpeWFkYXJzaGkgIDxhbG9rcEBj
aHJvbWl1bS5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAg
ICAgICAgUmVtb3ZlIGRlcGVuZGVuY3kgb24gY2hyb21pdW0gc2tpYTo6UGxhdGZvcm1DYW52YXMK
KyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTU3NTYzCisK
KyAgICAgICAgKiBEdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9UZXN0U2hlbGwuY3BwOgorICAgICAg
ICAobWFrZUNhbnZhc09wYXF1ZSk6CisgICAgICAgIChUZXN0U2hlbGw6OmR1bXBJbWFnZSk6Cisg
ICAgICAgICogRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vVGVzdFNoZWxsLmg6CisgICAgICAgICog
RHVtcFJlbmRlclRyZWUvY2hyb21pdW0vV2ViVGhlbWVDb250cm9sRFJUV2luLmNwcDoKKyAgICAg
ICAgKFdlYlRoZW1lQ29udHJvbERSVFdpbjo6V2ViVGhlbWVDb250cm9sRFJUV2luKToKKyAgICAg
ICAgKFdlYlRoZW1lQ29udHJvbERSVFdpbjo6ZHJhdyk6CisgICAgICAgIChXZWJUaGVtZUNvbnRy
b2xEUlRXaW46OmRyYXdUZXh0RmllbGQpOgorICAgICAgICAoV2ViVGhlbWVDb250cm9sRFJUV2lu
OjpkcmF3UHJvZ3Jlc3NCYXIpOgorICAgICAgICAqIER1bXBSZW5kZXJUcmVlL2Nocm9taXVtL1dl
YlRoZW1lQ29udHJvbERSVFdpbi5oOgorICAgICAgICAqIER1bXBSZW5kZXJUcmVlL2Nocm9taXVt
L1dlYlZpZXdIb3N0LmNwcDoKKyAgICAgICAgKFdlYlZpZXdIb3N0OjpjYW52YXMpOgorICAgICAg
ICAqIER1bXBSZW5kZXJUcmVlL2Nocm9taXVtL1dlYlZpZXdIb3N0Lmg6CisKIDIwMTEtMDQtMTMg
IFRvbnkgQ2hhbmcgIDx0b255QGNocm9taXVtLm9yZz4KIAogICAgICAgICBVbnJldmlld2VkLCBm
aXggTlJXVC4gIFN0YWNrOgpJbmRleDogVG9vbHMvRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vVGVz
dFNoZWxsLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9U
ZXN0U2hlbGwuY3BwCShyZXZpc2lvbiA4Mzc0OCkKKysrIFRvb2xzL0R1bXBSZW5kZXJUcmVlL2No
cm9taXVtL1Rlc3RTaGVsbC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTUwLDcgKzUwLDYgQEAKICNp
bmNsdWRlICJXZWJVUkxSZXNwb25zZS5oIgogI2luY2x1ZGUgIldlYlZpZXcuaCIKICNpbmNsdWRl
ICJXZWJWaWV3SG9zdC5oIgotI2luY2x1ZGUgInNraWEvZXh0L2JpdG1hcF9wbGF0Zm9ybV9kZXZp
Y2UuaCIKICNpbmNsdWRlICJza2lhL2V4dC9wbGF0Zm9ybV9jYW52YXMuaCIKICNpbmNsdWRlICJ3
ZWJraXQvc3VwcG9ydC93ZWJraXRfc3VwcG9ydC5oIgogI2luY2x1ZGUgIndlYmtpdC9zdXBwb3J0
L3dlYmtpdF9zdXBwb3J0X2dmeC5oIgpAQCAtNzcsNiArNzYsMjEgQEAgc3RhdGljIGNvbnN0IGNo
YXIgZmlsZVRlc3RQcmVmaXhbXSA9ICIoZgogc3RhdGljIGNvbnN0IGNoYXIgZGF0YVVybFBhdHRl
cm5bXSA9ICJkYXRhOiI7CiBzdGF0aWMgY29uc3Qgc3RyaW5nOjpzaXplX3R5cGUgZGF0YVVybFBh
dHRlcm5TaXplID0gc2l6ZW9mKGRhdGFVcmxQYXR0ZXJuKSAtIDE7CiAKKy8vIEZJWE1FOiBNb3Zl
IHRoaXMgdG8gYSBjb21tb24gcGxhY2Ugc28gdGhhdCBpdCBjYW4gYmUgc2hhcmVkIHdpdGgKKy8v
IFdlYkNvcmU6OlRyYW5zcGFyZW5jeVdpbjo6bWFrZUxheWVyT3BhcXVlKCkuCitzdGF0aWMgdm9p
ZCBtYWtlQ2FudmFzT3BhcXVlKFNrQ2FudmFzKiBjYW52YXMpCit7CisgICAgY29uc3QgU2tCaXRt
YXAmIGJpdG1hcCA9IGNhbnZhcy0+Z2V0VG9wRGV2aWNlKCktPmFjY2Vzc0JpdG1hcCh0cnVlKTsK
KyAgICBBU1NFUlQoYml0bWFwLmNvbmZpZygpID09IFNrQml0bWFwOjprQVJHQl84ODg4X0NvbmZp
Zyk7CisKKyAgICBTa0F1dG9Mb2NrUGl4ZWxzIGxvY2soYml0bWFwKTsKKyAgICBmb3IgKGludCB5
ID0gMDsgeSA8IGJpdG1hcC5oZWlnaHQoKTsgeSsrKSB7CisgICAgICAgIHVpbnQzMl90KiByb3cg
PSBiaXRtYXAuZ2V0QWRkcjMyKDAsIHkpOworICAgICAgICBmb3IgKGludCB4ID0gMDsgeCA8IGJp
dG1hcC53aWR0aCgpOyB4KyspCisgICAgICAgICAgICByb3dbeF0gfD0gMHhGRjAwMDAwMDsgLy8g
U2V0IGFscGhhIGJpdHMgdG8gMS4KKyAgICB9Cit9CisKIFRlc3RTaGVsbDo6VGVzdFNoZWxsKGJv
b2wgdGVzdFNoZWxsTW9kZSkKICAgICA6IG1fdGVzdElzUGVuZGluZyhmYWxzZSkKICAgICAsIG1f
dGVzdElzUHJlcGFyaW5nKGZhbHNlKQpAQCAtNTE2LDE0ICs1MzAsOCBAQCB2b2lkIFRlc3RTaGVs
bDo6ZHVtcCgpCiAgICAgZmZsdXNoKHN0ZGVycik7CiB9CiAKLXZvaWQgVGVzdFNoZWxsOjpkdW1w
SW1hZ2Uoc2tpYTo6UGxhdGZvcm1DYW52YXMqIGNhbnZhcykgY29uc3QKK3ZvaWQgVGVzdFNoZWxs
OjpkdW1wSW1hZ2UoU2tDYW52YXMqIGNhbnZhcykgY29uc3QKIHsKLSAgICBza2lhOjpCaXRtYXBQ
bGF0Zm9ybURldmljZSYgZGV2aWNlID0KLSAgICAgICAgc3RhdGljX2Nhc3Q8c2tpYTo6Qml0bWFw
UGxhdGZvcm1EZXZpY2UmPihjYW52YXMtPmdldFRvcFBsYXRmb3JtRGV2aWNlKCkpOwotICAgIGNv
bnN0IFNrQml0bWFwJiBzb3VyY2VCaXRtYXAgPSBkZXZpY2UuYWNjZXNzQml0bWFwKGZhbHNlKTsK
LQotICAgIFNrQXV0b0xvY2tQaXhlbHMgc291cmNlQml0bWFwTG9jayhzb3VyY2VCaXRtYXApOwot
CiAgICAgLy8gRml4IHRoZSBhbHBoYS4gVGhlIGV4cGVjdGVkIFBOR3Mgb24gTWFjIGhhdmUgYW4g
YWxwaGEgY2hhbm5lbCwgc28gd2Ugd2FudAogICAgIC8vIHRvIGtlZXAgaXQuIE9uIFdpbmRvd3Ms
IHRoZSBhbHBoYSBjaGFubmVsIGlzIHdyb25nIHNpbmNlIHRleHQvZm9ybSBjb250cm9sCiAgICAg
Ly8gZHJhd2luZyBtYXkgaGF2ZSBlcmFzZWQgaXQgaW4gYSBmZXcgcGxhY2VzLiBTbyBvbiBXaW5k
b3dzIHdlIGZvcmNlIGl0IHRvCkBAIC01MzMsOSArNTQxLDEyIEBAIHZvaWQgVGVzdFNoZWxsOjpk
dW1wSW1hZ2Uoc2tpYTo6UGxhdGZvcm0KICAgICBib29sIGRpc2NhcmRUcmFuc3BhcmVuY3kgPSBm
YWxzZTsKICNlbHNlCiAgICAgYm9vbCBkaXNjYXJkVHJhbnNwYXJlbmN5ID0gdHJ1ZTsKLSAgICBk
ZXZpY2UubWFrZU9wYXF1ZSgwLCAwLCBzb3VyY2VCaXRtYXAud2lkdGgoKSwgc291cmNlQml0bWFw
LmhlaWdodCgpKTsKKyAgICBtYWtlQ2FudmFzT3BhcXVlKGNhbnZhcyk7CiAjZW5kaWYKIAorICAg
IGNvbnN0IFNrQml0bWFwJiBzb3VyY2VCaXRtYXAgPSBjYW52YXMtPmdldFRvcERldmljZSgpLT5h
Y2Nlc3NCaXRtYXAoZmFsc2UpOworICAgIFNrQXV0b0xvY2tQaXhlbHMgc291cmNlQml0bWFwTG9j
ayhzb3VyY2VCaXRtYXApOworCiAgICAgLy8gQ29tcHV0ZSBNRDUgc3VtLgogICAgIE1ENSBkaWdl
c3RlcjsKICAgICBWZWN0b3I8dWludDhfdCwgMTY+IGRpZ2VzdFZhbHVlOwpJbmRleDogVG9vbHMv
RHVtcFJlbmRlclRyZWUvY2hyb21pdW0vVGVzdFNoZWxsLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMv
RHVtcFJlbmRlclRyZWUvY2hyb21pdW0vVGVzdFNoZWxsLmgJKHJldmlzaW9uIDgzNzQ4KQorKysg
VG9vbHMvRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vVGVzdFNoZWxsLmgJKHdvcmtpbmcgY29weSkK
QEAgLTU0LDkgKzU0LDYgQEAgY2xhc3MgV2ViTm90aWZpY2F0aW9uUHJlc2VudGVyOwogY2xhc3Mg
V2ViVmlldzsKIGNsYXNzIFdlYlVSTDsKIH0KLW5hbWVzcGFjZSBza2lhIHsKLWNsYXNzIFBsYXRm
b3JtQ2FudmFzOwotfQogCiBjbGFzcyBEUlREZXZUb29sc0FnZW50OwogY2xhc3MgRFJURGV2VG9v
bHNDYWxsQXJnczsKQEAgLTE4Miw3ICsxNzksNyBAQCBwcml2YXRlOgogICAgIHZvaWQgcmVzZXRX
ZWJTZXR0aW5ncyhXZWJLaXQ6OldlYlZpZXcmKTsKICAgICB2b2lkIGR1bXAoKTsKICAgICBzdGQ6
OnN0cmluZyBkdW1wQWxsQmFja0ZvcndhcmRMaXN0cygpOwotICAgIHZvaWQgZHVtcEltYWdlKHNr
aWE6OlBsYXRmb3JtQ2FudmFzKikgY29uc3Q7CisgICAgdm9pZCBkdW1wSW1hZ2UoU2tDYW52YXMq
KSBjb25zdDsKIAogICAgIGJvb2wgbV90ZXN0SXNQZW5kaW5nOwogICAgIGJvb2wgbV90ZXN0SXNQ
cmVwYXJpbmc7CkluZGV4OiBUb29scy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9XZWJUaGVtZUNv
bnRyb2xEUlRXaW4uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9t
aXVtL1dlYlRoZW1lQ29udHJvbERSVFdpbi5jcHAJKHJldmlzaW9uIDgzNzQ4KQorKysgVG9vbHMv
RHVtcFJlbmRlclRyZWUvY2hyb21pdW0vV2ViVGhlbWVDb250cm9sRFJUV2luLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtNDYsNyArNDYsNiBAQAogI2luY2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+CiAK
IHVzaW5nIG5hbWVzcGFjZSBzdGQ7Ci11c2luZyBuYW1lc3BhY2Ugc2tpYTsKIAogc3RhdGljIGNv
bnN0IFNrQ29sb3IgZWRnZUNvbG9yICAgICA9IFNLX0NvbG9yQkxBQ0s7CiBzdGF0aWMgY29uc3Qg
U2tDb2xvciByZWFkT25seUNvbG9yID0gU2tDb2xvclNldFJHQigweGU5LCAweGMyLCAweGE2KTsK
QEAgLTkzLDcgKzkyLDcgQEAgc3RhdGljIFNrSVJlY3QgdmFsaWRhdGUoY29uc3QgU2tJUmVjdCYg
cgogCiAvLyBXZWJUaGVtZUNvbnRyb2xEUlRXaW4KIAotV2ViVGhlbWVDb250cm9sRFJUV2luOjpX
ZWJUaGVtZUNvbnRyb2xEUlRXaW4oUGxhdGZvcm1DYW52YXMqIGNhbnZhcywKK1dlYlRoZW1lQ29u
dHJvbERSVFdpbjo6V2ViVGhlbWVDb250cm9sRFJUV2luKFNrQ2FudmFzKiBjYW52YXMsCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBTa0lSZWN0JiBp
cmVjdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFR5cGUg
Y3R5cGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdGF0
ZSBjc3RhdGUpCkBAIC0zMDQsNyArMzAzLDcgQEAgdm9pZCBXZWJUaGVtZUNvbnRyb2xEUlRXaW46
OmRyYXcoKQogICAgIC8vIEluZGVudHMgZm9yIHRoZSB0aGUgc2xpZGVyIHRyYWNrLgogICAgIGNv
bnN0IGludCBzbGlkZXJJbmRlbnQgPSAyOwogCi0gICAgbV9jYW52YXMtPmJlZ2luUGxhdGZvcm1Q
YWludCgpOworICAgIHNraWE6OkJlZ2luUGxhdGZvcm1QYWludChtX2NhbnZhcyk7CiAKICAgICBz
d2l0Y2ggKG1fdHlwZSkgewogICAgIGNhc2UgVW5rbm93blR5cGU6CkBAIC00NzUsNyArNDc0LDcg
QEAgdm9pZCBXZWJUaGVtZUNvbnRyb2xEUlRXaW46OmRyYXcoKQogICAgIH0KIAogICAgIG1hcmtT
dGF0ZSgpOwotICAgIG1fY2FudmFzLT5lbmRQbGF0Zm9ybVBhaW50KCk7CisgICAgc2tpYTo6RW5k
UGxhdGZvcm1QYWludChtX2NhbnZhcyk7CiB9CiAKIC8vIEJlY2F1c2UgcmVuZGVyaW5nIGEgdGV4
dCBmaWVsZCBpcyBkZXBlbmRlbnQgb24gaW5wdXQKQEAgLTQ4NSw3ICs0ODQsNyBAQCB2b2lkIFdl
YlRoZW1lQ29udHJvbERSVFdpbjo6ZHJhd1RleHRGaWVsCiB7CiAgICAgU2tQYWludCBwYWludDsK
IAotICAgIG1fY2FudmFzLT5iZWdpblBsYXRmb3JtUGFpbnQoKTsKKyAgICBza2lhOjpCZWdpblBs
YXRmb3JtUGFpbnQobV9jYW52YXMpOwogICAgIGlmIChmaWxsQ29udGVudEFyZWEpIHsKICAgICAg
ICAgcGFpbnQuc2V0Q29sb3IoY29sb3IpOwogICAgICAgICBwYWludC5zZXRTdHlsZShTa1BhaW50
OjprRmlsbF9TdHlsZSk7CkBAIC00OTgsMTQgKzQ5NywxNCBAQCB2b2lkIFdlYlRoZW1lQ29udHJv
bERSVFdpbjo6ZHJhd1RleHRGaWVsCiAgICAgfQogCiAgICAgbWFya1N0YXRlKCk7Ci0gICAgbV9j
YW52YXMtPmVuZFBsYXRmb3JtUGFpbnQoKTsKKyAgICBza2lhOjpFbmRQbGF0Zm9ybVBhaW50KG1f
Y2FudmFzKTsKIH0KIAogdm9pZCBXZWJUaGVtZUNvbnRyb2xEUlRXaW46OmRyYXdQcm9ncmVzc0Jh
cihjb25zdCBTa0lSZWN0JiBmaWxsUmVjdCkKIHsKICAgICBTa1BhaW50IHBhaW50OwogCi0gICAg
bV9jYW52YXMtPmJlZ2luUGxhdGZvcm1QYWludCgpOworICAgIHNraWE6OkJlZ2luUGxhdGZvcm1Q
YWludChtX2NhbnZhcyk7CiAgICAgcGFpbnQuc2V0Q29sb3IobV9iZ0NvbG9yKTsKICAgICBwYWlu
dC5zZXRTdHlsZShTa1BhaW50OjprRmlsbF9TdHlsZSk7CiAgICAgbV9jYW52YXMtPmRyYXdJUmVj
dChtX2lyZWN0LCBwYWludCk7CkBAIC01MTgsNiArNTE3LDYgQEAgdm9pZCBXZWJUaGVtZUNvbnRy
b2xEUlRXaW46OmRyYXdQcm9ncmVzcwogICAgIG1fY2FudmFzLT5kcmF3SVJlY3QodG9maWxsLCBw
YWludCk7CiAKICAgICBtYXJrU3RhdGUoKTsKLSAgICBtX2NhbnZhcy0+ZW5kUGxhdGZvcm1QYWlu
dCgpOworICAgIHNraWE6OkVuZFBsYXRmb3JtUGFpbnQobV9jYW52YXMpOwogfQogCkluZGV4OiBU
b29scy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9XZWJUaGVtZUNvbnRyb2xEUlRXaW4uaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBUb29scy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9XZWJUaGVtZUNvbnRyb2xE
UlRXaW4uaAkocmV2aXNpb24gODM3NDgpCisrKyBUb29scy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1
bS9XZWJUaGVtZUNvbnRyb2xEUlRXaW4uaAkod29ya2luZyBjb3B5KQpAQCAtMTIyLDcgKzEyMiw3
IEBAIHB1YmxpYzoKIAogICAgIC8vIGNhbnZhcyBpcyB0aGUgY2FudmFzIHRvIGRyYXcgb250bywg
YW5kIHJlY3QgZ2l2ZXMgdGhlIHNpemUgb2YgdGhlCiAgICAgLy8gY29udHJvbC4gY3R5cGUgYW5k
IGNzdGF0ZSBzcGVjaWZ5IHRoZSB0eXBlIGFuZCBzdGF0ZSBvZiB0aGUgY29udHJvbC4KLSAgICBX
ZWJUaGVtZUNvbnRyb2xEUlRXaW4oc2tpYTo6UGxhdGZvcm1DYW52YXMqIGNhbnZhcywKKyAgICBX
ZWJUaGVtZUNvbnRyb2xEUlRXaW4oU2tDYW52YXMqIGNhbnZhcywKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgY29uc3QgU2tJUmVjdCYgcmVjdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAg
VHlwZSBjdHlwZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgU3RhdGUgY3N0YXRlKTsKQEAg
LTE4NCw3ICsxODQsNyBAQCBwcml2YXRlOgogICAgIC8vIGNvbG9yIGlzIHdoaWNoLgogICAgIHZv
aWQgbWFya1N0YXRlKCk7CiAKLSAgICBza2lhOjpQbGF0Zm9ybUNhbnZhcyogbV9jYW52YXM7Cisg
ICAgU2tDYW52YXMqIG1fY2FudmFzOwogICAgIGNvbnN0IFNrSVJlY3QgbV9pcmVjdDsKICAgICBj
b25zdCBUeXBlIG1fdHlwZTsKICAgICBjb25zdCBTdGF0ZSBtX3N0YXRlOwpJbmRleDogVG9vbHMv
RHVtcFJlbmRlclRyZWUvY2hyb21pdW0vV2ViVmlld0hvc3QuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRv
b2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9taXVtL1dlYlZpZXdIb3N0LmNwcAkocmV2aXNpb24gODM3
NDgpCisrKyBUb29scy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9XZWJWaWV3SG9zdC5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTY2LDcgKzY2LDYgQEAKIAogdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7
CiB1c2luZyBuYW1lc3BhY2UgV2ViS2l0OwotdXNpbmcgbmFtZXNwYWNlIHNraWE7CiB1c2luZyBu
YW1lc3BhY2Ugc3RkOwogCiBzdGF0aWMgY29uc3QgaW50IHNjcmVlbldpZHRoID0gMTkyMDsKQEAg
LTE1MTIsMTMgKzE1MTEsMTQgQEAgdm9pZCBXZWJWaWV3SG9zdDo6cGFpbnRJbnZhbGlkYXRlZFJl
Z2lvbgogICAgIEFTU0VSVChtX3BhaW50UmVjdC5pc0VtcHR5KCkpOwogfQogCi1QbGF0Zm9ybUNh
bnZhcyogV2ViVmlld0hvc3Q6OmNhbnZhcygpCitTa0NhbnZhcyogV2ViVmlld0hvc3Q6OmNhbnZh
cygpCiB7CiAgICAgaWYgKG1fY2FudmFzKQogICAgICAgICByZXR1cm4gbV9jYW52YXMuZ2V0KCk7
CiAgICAgV2ViU2l6ZSB3aWRnZXRTaXplID0gd2ViV2lkZ2V0KCktPnNpemUoKTsKICAgICByZXNl
dFNjcm9sbFJlY3QoKTsKLSAgICBtX2NhbnZhcy5zZXQobmV3IFBsYXRmb3JtQ2FudmFzKHdpZGdl
dFNpemUud2lkdGgsIHdpZGdldFNpemUuaGVpZ2h0LCB0cnVlKSk7CisgICAgbV9jYW52YXMuc2V0
KHNraWE6OkNyZWF0ZUJpdG1hcENhbnZhcygKKyAgICAgICAgd2lkZ2V0U2l6ZS53aWR0aCwgd2lk
Z2V0U2l6ZS5oZWlnaHQsIHRydWUpKTsKICAgICByZXR1cm4gbV9jYW52YXMuZ2V0KCk7CiB9CiAK
SW5kZXg6IFRvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9taXVtL1dlYlZpZXdIb3N0LmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gVG9vbHMvRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vV2ViVmlld0hvc3QuaAkocmV2
aXNpb24gODM3NDgpCisrKyBUb29scy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9XZWJWaWV3SG9z
dC5oCSh3b3JraW5nIGNvcHkpCkBAIC00NSw3ICs0NSw5IEBACiAjaW5jbHVkZSA8d3RmL3RleHQv
V1RGU3RyaW5nLmg+CiAKIGNsYXNzIExheW91dFRlc3RDb250cm9sbGVyOworY2xhc3MgU2tDYW52
YXM7CiBjbGFzcyBUZXN0U2hlbGw7CisKIG5hbWVzcGFjZSBXZWJLaXQgewogY2xhc3MgV2ViRnJh
bWU7CiBjbGFzcyBXZWJEZXZpY2VPcmllbnRhdGlvbkNsaWVudDsKQEAgLTYxLDkgKzYzLDYgQEAg
c3RydWN0IFdlYlJlY3Q7CiBzdHJ1Y3QgV2ViVVJMRXJyb3I7CiBzdHJ1Y3QgV2ViV2luZG93RmVh
dHVyZXM7CiB9Ci1uYW1lc3BhY2Ugc2tpYSB7Ci1jbGFzcyBQbGF0Zm9ybUNhbnZhczsKLX0KIAog
Y2xhc3MgV2ViVmlld0hvc3QgOiBwdWJsaWMgV2ViS2l0OjpXZWJTcGVsbENoZWNrQ2xpZW50LCBw
dWJsaWMgV2ViS2l0OjpXZWJWaWV3Q2xpZW50LCBwdWJsaWMgV2ViS2l0OjpXZWJGcmFtZUNsaWVu
dCwgcHVibGljIE5hdmlnYXRpb25Ib3N0IHsKICBwdWJsaWM6CkBAIC04Nyw3ICs4Niw3IEBAIGNs
YXNzIFdlYlZpZXdIb3N0IDogcHVibGljIFdlYktpdDo6V2ViU3AKICAgICB2b2lkIHBhaW50UmVj
dChjb25zdCBXZWJLaXQ6OldlYlJlY3QmKTsKICAgICB2b2lkIHVwZGF0ZVBhaW50UmVjdChjb25z
dCBXZWJLaXQ6OldlYlJlY3QmKTsKICAgICB2b2lkIHBhaW50SW52YWxpZGF0ZWRSZWdpb24oKTsK
LSAgICBza2lhOjpQbGF0Zm9ybUNhbnZhcyogY2FudmFzKCk7CisgICAgU2tDYW52YXMqIGNhbnZh
cygpOwogICAgIHZvaWQgZGlzcGxheVJlcGFpbnRNYXNrKCk7CiAKICAgICB2b2lkIGxvYWRVUkxG
b3JGcmFtZShjb25zdCBXZWJLaXQ6OldlYlVSTCYsIGNvbnN0IFdlYktpdDo6V2ViU3RyaW5nJiBm
cmFtZU5hbWUpOwpAQCAtMzMzLDcgKzMzMiw3IEBAIHByaXZhdGU6CiAgICAgTW9ja1NwZWxsQ2hl
Y2sgbV9zcGVsbGNoZWNrOwogCiAgICAgLy8gUGFpbnRpbmcuCi0gICAgT3duUHRyPHNraWE6OlBs
YXRmb3JtQ2FudmFzPiBtX2NhbnZhczsKKyAgICBPd25QdHI8U2tDYW52YXM+IG1fY2FudmFzOwog
ICAgIFdlYktpdDo6V2ViUmVjdCBtX3BhaW50UmVjdDsKICAgICBib29sIG1faXNQYWludGluZzsK
IAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>89455</attachid>
            <date>2011-04-13 14:18:01 -0700</date>
            <delta_ts>2011-04-14 09:21:41 -0700</delta_ts>
            <desc>proposed patch</desc>
            <filename>skia.txt</filename>
            <type>text/plain</type>
            <size>31743</size>
            <attacher name="Alok Priyadarshi">alokp</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDgzNzUwKQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsNDEgQEAKKzIwMTEtMDQtMTMgIEFsb2sgUHJp
eWFkYXJzaGkgIDxhbG9rcEBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9C
T0RZIChPT1BTISkuCisKKyAgICAgICAgUmVtb3ZlIGRlcGVuZGVuY3kgb24gY2hyb21pdW0gc2tp
YTo6UGxhdGZvcm1DYW52YXMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTU3NTYzCisKKyAgICAgICAgVGhpcyBwYXRjaCBkb2VzIG5vdCBjaGFuZ2UgYW55
IGZ1bmN0aW9uYWxpdHksIGp1c3QgdGhlIHR5cGUgb2Ygb2JqZWN0IHNraWE6OlBsYXRmb3JtQ2Fu
dmFzIC0+IFNrQ2FudmFzLgorICAgICAgICBUaGUgb2JqZWN0IGlzIHN0aWxsIGJlaW5nIGNyZWF0
ZWQgYnkgYSBmYWN0b3J5IG1ldGhvZCBza2lhOjpDcmVhdGVCaXRtYXBDYW52YXMgZGVmaW5lZCBp
biBDaHJvbWl1bS4KKyAgICAgICAgV2Ugd2lsbCBldmVudHVhbGx5IGRlZmluZSBhbiBBUEkgdGhh
dCBldmVyeSBwb3J0IHVzaW5nIHNraWEgd2lsbCBkZWZpbmUuCisKKyAgICAgICAgKiBwbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9Gb250Q2hyb21pdW1XaW4uY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6VHJhbnNwYXJlbmN5QXdhcmVGb250UGFpbnRlcjo6VHJhbnNwYXJlbmN5QXdhcmVGb250UGFp
bnRlcjo6aW5pdGlhbGl6ZUZvckdESSk6CisgICAgICAgIChXZWJDb3JlOjpUcmFuc3BhcmVuY3lB
d2FyZUZvbnRQYWludGVyOjpUcmFuc3BhcmVuY3lBd2FyZUZvbnRQYWludGVyOjp+VHJhbnNwYXJl
bmN5QXdhcmVGb250UGFpbnRlcik6CisgICAgICAgIChXZWJDb3JlOjpGb250OjpkcmF3Q29tcGxl
eFRleHQpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0ltYWdlQnVmZmVy
RGF0YS5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyQ2hyb21p
dW0uaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclJlbmRlcmVy
Q2hyb21pdW0uaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9QbGF0Zm9y
bUNhbnZhcy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpQbGF0Zm9ybUNhbnZhczo6cmVzaXplKToK
KyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9QbGF0Zm9ybUNhbnZhcy5oOgor
ICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1RyYW5zcGFyZW5jeVdpbi5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpUcmFuc3BhcmVuY3lXaW46OmNvbXBvc2l0ZVRleHRDb21wb3Np
dGUpOgorICAgICAgICAoV2ViQ29yZTo6VHJhbnNwYXJlbmN5V2luOjptYWtlTGF5ZXJPcGFxdWUp
OgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3NraWEvSW1hZ2VCdWZmZXJTa2lhLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVyOjpJbWFnZUJ1ZmZlcik6CisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9JbWFnZVNraWEuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
cGFpbnRTa0JpdG1hcCk6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZTo6ZHJhd1BhdHRlcm4pOgor
ICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3NraWEvUGxhdGZvcm1Db250ZXh0U2tpYS5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpQbGF0Zm9ybUNvbnRleHRTa2lhOjpQbGF0Zm9ybUNvbnRleHRT
a2lhKToKKyAgICAgICAgKFdlYkNvcmU6OlBsYXRmb3JtQ29udGV4dFNraWE6OnNldENhbnZhcyk6
CisgICAgICAgIChXZWJDb3JlOjpQbGF0Zm9ybUNvbnRleHRTa2lhOjppc05hdGl2ZUZvbnRSZW5k
ZXJpbmdBbGxvd2VkKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9za2lhL1BsYXRmb3Jt
Q29udGV4dFNraWEuaDoKKyAgICAgICAgKFdlYkNvcmU6OlBsYXRmb3JtQ29udGV4dFNraWE6OmNh
bnZhcyk6CisgICAgICAgIChXZWJDb3JlOjpQbGF0Zm9ybUNvbnRleHRTa2lhOjpwcmludGluZyk6
CisgICAgICAgIChXZWJDb3JlOjpQbGF0Zm9ybUNvbnRleHRTa2lhOjpzZXRQcmludGluZyk6CisK
IDIwMTEtMDQtMTIgIFBhdmVsIFBvZGl2aWxvdiAgPHBvZGl2aWxvdkBjaHJvbWl1bS5vcmc+CiAK
ICAgICAgICAgUmV2aWV3ZWQgYnkgUGF2ZWwgRmVsZG1hbi4KSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0ZvbnRDaHJvbWl1bVdpbi5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vRm9udENocm9t
aXVtV2luLmNwcAkocmV2aXNpb24gODM3NDgpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9Gb250Q2hyb21pdW1XaW4uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0x
NjUsNyArMTY1LDcgQEAgdm9pZCBUcmFuc3BhcmVuY3lBd2FyZUZvbnRQYWludGVyOjppbml0aQog
CiAgICAgLy8gU2V0IHVwIHRoZSBEQywgdXNpbmcgdGhlIG9uZSBmcm9tIHRoZSB0cmFuc3BhcmVu
Y3kgaGVscGVyLgogICAgIGlmIChtX3RyYW5zcGFyZW5jeS5wbGF0Zm9ybUNvbnRleHQoKSkgewot
ICAgICAgICBtX2hkYyA9IG1fdHJhbnNwYXJlbmN5LnBsYXRmb3JtQ29udGV4dCgpLT5jYW52YXMo
KS0+YmVnaW5QbGF0Zm9ybVBhaW50KCk7CisgICAgICAgIG1faGRjID0gc2tpYTo6QmVnaW5QbGF0
Zm9ybVBhaW50KG1fdHJhbnNwYXJlbmN5LnBsYXRmb3JtQ29udGV4dCgpLT5jYW52YXMoKSk7CiAg
ICAgICAgIFNldFRleHRDb2xvcihtX2hkYywgc2tpYTo6U2tDb2xvclRvQ09MT1JSRUYoY29sb3Ip
KTsKICAgICAgICAgU2V0QmtNb2RlKG1faGRjLCBUUkFOU1BBUkVOVCk7CiAgICAgfQpAQCAtMTc5
LDcgKzE3OSw3IEBAIFRyYW5zcGFyZW5jeUF3YXJlRm9udFBhaW50ZXI6On5UcmFuc3BhcmUKICAg
ICBpZiAobV9jcmVhdGVkVHJhbnNwYXJlbmN5TGF5ZXIpCiAgICAgICAgIG1fZ3JhcGhpY3NDb250
ZXh0LT5lbmRUcmFuc3BhcmVuY3lMYXllcigpOwogICAgIG1fZ3JhcGhpY3NDb250ZXh0LT5yZXN0
b3JlKCk7Ci0gICAgbV9wbGF0Zm9ybUNvbnRleHQtPmNhbnZhcygpLT5lbmRQbGF0Zm9ybVBhaW50
KCk7CisgICAgc2tpYTo6RW5kUGxhdGZvcm1QYWludChtX3BsYXRmb3JtQ29udGV4dC0+Y2FudmFz
KCkpOwogfQogCiAvLyBTcGVjaWFsaXphdGlvbiBmb3Igc2ltcGxlIEdseXBoQnVmZmVyIHBhaW50
aW5nLgpAQCAtNTQyLDcgKzU0Miw3IEBAIHZvaWQgRm9udDo6ZHJhd0NvbXBsZXhUZXh0KEdyYXBo
aWNzQ29udGUKICAgICAvLyB0aGUgYmFzZWxpbmUsIHNvIHdlIGhhdmUgdG8gc3VidHJhY3Qgb2Zm
IHRoZSBhc2NlbnQuCiAgICAgc3RhdGUuZHJhdyhncmFwaGljc0NvbnRleHQsIGhkYywgbHJvdW5k
Zihwb2ludC54KCkpLCBscm91bmRmKHBvaW50LnkoKSAtIGZvbnRNZXRyaWNzKCkuYXNjZW50KCkp
LCBmcm9tLCB0byk7CiAKLSAgICBjb250ZXh0LT5jYW52YXMoKS0+ZW5kUGxhdGZvcm1QYWludCgp
OworICAgIHNraWE6OkVuZFBsYXRmb3JtUGFpbnQoY29udGV4dC0+Y2FudmFzKCkpOwogfQogCiB2
b2lkIEZvbnQ6OmRyYXdFbXBoYXNpc01hcmtzRm9yQ29tcGxleFRleHQoR3JhcGhpY3NDb250ZXh0
KiAvKiBjb250ZXh0ICovLCBjb25zdCBUZXh0UnVuJiAvKiBydW4gKi8sIGNvbnN0IEF0b21pY1N0
cmluZyYgLyogbWFyayAqLywgY29uc3QgRmxvYXRQb2ludCYgLyogcG9pbnQgKi8sIGludCAvKiBm
cm9tICovLCBpbnQgLyogdG8gKi8pIGNvbnN0CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9JbWFnZUJ1ZmZlckRhdGEuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9JbWFnZUJ1ZmZlckRhdGEuaAko
cmV2aXNpb24gODM3NDgpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJv
bWl1bS9JbWFnZUJ1ZmZlckRhdGEuaAkod29ya2luZyBjb3B5KQpAQCAtMzMsMTUgKzMzLDEzIEBA
CiAKICNpbmNsdWRlICJQbGF0Zm9ybUNvbnRleHRTa2lhLmgiCiAKLSNpbmNsdWRlICJza2lhL2V4
dC9wbGF0Zm9ybV9jYW52YXMuaCIKLQogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBJbWFn
ZUJ1ZmZlckRhdGEgewogcHVibGljOgogICAgIEltYWdlQnVmZmVyRGF0YShjb25zdCBJbnRTaXpl
Jik7CiAKLSAgICBza2lhOjpQbGF0Zm9ybUNhbnZhcyBtX2NhbnZhczsKKyAgICBPd25QdHI8U2tD
YW52YXM+IG1fY2FudmFzOwogICAgIFBsYXRmb3JtQ29udGV4dFNraWEgbV9wbGF0Zm9ybUNvbnRl
eHQ7CiB9OwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9MYXllckNocm9taXVtLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJDaHJvbWl1bS5oCShyZXZpc2lvbiA4Mzc0OCkKKysrIFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0xheWVyQ2hyb21pdW0uaAko
d29ya2luZyBjb3B5KQpAQCAtNTAsMTEgKzUwLDYgQEAKICNpbmNsdWRlIDx3dGYvdGV4dC9TdHJp
bmdIYXNoLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CiAKLQotbmFtZXNwYWNl
IHNraWEgewotY2xhc3MgUGxhdGZvcm1DYW52YXM7Ci19Ci0KIG5hbWVzcGFjZSBXZWJDb3JlIHsK
IAogY2xhc3MgQ0NMYXllckltcGw7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9MYXllclJlbmRlcmVyQ2hyb21pdW0uaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllclJlbmRlcmVyQ2hyb21p
dW0uaAkocmV2aXNpb24gODM3NDgpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9MYXllclJlbmRlcmVyQ2hyb21pdW0uaAkod29ya2luZyBjb3B5KQpAQCAtMTk0
LDcgKzE5NCw3IEBAIHByaXZhdGU6CiAgICAgYm9vbCBtX2NvbXBvc2l0ZU9mZnNjcmVlbjsKIAog
I2lmIFVTRShTS0lBKQotICAgIE93blB0cjxza2lhOjpQbGF0Zm9ybUNhbnZhcz4gbV9yb290TGF5
ZXJDYW52YXM7CisgICAgT3duUHRyPFNrQ2FudmFzPiBtX3Jvb3RMYXllckNhbnZhczsKICAgICBP
d25QdHI8UGxhdGZvcm1Db250ZXh0U2tpYT4gbV9yb290TGF5ZXJTa2lhQ29udGV4dDsKICAgICBP
d25QdHI8R3JhcGhpY3NDb250ZXh0PiBtX3Jvb3RMYXllckdyYXBoaWNzQ29udGV4dDsKICNlbGlm
IFBMQVRGT1JNKENHKQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vUGxhdGZvcm1DYW52YXMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1BsYXRmb3JtQ2FudmFzLmNwcAkocmV2aXNpb24gODM3
NDgpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9QbGF0Zm9y
bUNhbnZhcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTUyLDcgKzUyLDcgQEAgdm9pZCBQbGF0Zm9y
bUNhbnZhczo6cmVzaXplKGNvbnN0IEludFNpegogewogICAgIG1fc2l6ZSA9IHNpemU7CiAjaWYg
VVNFKFNLSUEpCi0gICAgbV9za2lhQ2FudmFzID0gbmV3IHNraWE6OlBsYXRmb3JtQ2FudmFzKHNp
emUud2lkdGgoKSwgc2l6ZS5oZWlnaHQoKSwgZmFsc2UpOworICAgIG1fc2tpYUNhbnZhcyA9IHNr
aWE6OkNyZWF0ZUJpdG1hcENhbnZhcyhzaXplLndpZHRoKCksIHNpemUuaGVpZ2h0KCksIGZhbHNl
KTsKICNlbGlmIFBMQVRGT1JNKENHKQogICAgIHNpemVfdCBidWZmZXJTaXplID0gc2l6ZS53aWR0
aCgpICogc2l6ZS5oZWlnaHQoKSAqIDQ7CiAgICAgbV9waXhlbERhdGEgPSBhZG9wdEFycmF5UHRy
KG5ldyB1aW50OF90W2J1ZmZlclNpemVdKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL1BsYXRmb3JtQ2FudmFzLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vUGxhdGZvcm1DYW52YXMuaAkocmV2
aXNpb24gODM3NDgpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9QbGF0Zm9ybUNhbnZhcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0zOSw4ICszOSw4IEBACiAjZW5k
aWYKIAogI2lmIFVTRShTS0lBKQotbmFtZXNwYWNlIHNraWEgeyBjbGFzcyBQbGF0Zm9ybUNhbnZh
czsgfQogY2xhc3MgU2tCaXRtYXA7CitjbGFzcyBTa0NhbnZhczsKICNlbmRpZgogCiBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CkBAIC05Nyw3ICs5Nyw3IEBAIHB1YmxpYzoKIAogcHJpdmF0ZToKICNpZiBV
U0UoU0tJQSkKLSAgICBPd25QdHI8c2tpYTo6UGxhdGZvcm1DYW52YXM+IG1fc2tpYUNhbnZhczsK
KyAgICBPd25QdHI8U2tDYW52YXM+IG1fc2tpYUNhbnZhczsKICNlbGlmIFBMQVRGT1JNKENHKQog
ICAgIE93bkFycmF5UHRyPHVpbnQ4X3Q+IG1fcGl4ZWxEYXRhOwogI2VuZGlmCkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9UcmFuc3BhcmVuY3lXaW4uY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L1RyYW5zcGFyZW5jeVdpbi5jcHAJKHJldmlzaW9uIDgzNzQ4KQorKysgU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vVHJhbnNwYXJlbmN5V2luLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtNDksMTQgKzQ5LDE0IEBAIG5hbWVzcGFjZSB7CiAvLyBpbnRvLiBCdWZmZXJzIGxh
cmdlciB0aGFuIHRoaXMgd2lsbCBiZSBkZXN0cm95ZWQgd2hlbiB3ZSdyZSBkb25lIHdpdGggdGhl
bS4KIGNvbnN0IGludCBtYXhDYWNoZWRCdWZmZXJQaXhlbFNpemUgPSA2NTUzNjsKIAotaW5saW5l
IHNraWE6OlBsYXRmb3JtQ2FudmFzKiBjYW52YXNGb3JDb250ZXh0KGNvbnN0IEdyYXBoaWNzQ29u
dGV4dCYgY29udGV4dCkKK2lubGluZSBTa0NhbnZhcyogY2FudmFzRm9yQ29udGV4dChjb25zdCBH
cmFwaGljc0NvbnRleHQmIGNvbnRleHQpCiB7CiAgICAgcmV0dXJuIGNvbnRleHQucGxhdGZvcm1D
b250ZXh0KCktPmNhbnZhcygpOwogfQogCiBpbmxpbmUgY29uc3QgU2tCaXRtYXAmIGJpdG1hcEZv
ckNvbnRleHQoY29uc3QgR3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KQogewotICAgIHJldHVybiBj
YW52YXNGb3JDb250ZXh0KGNvbnRleHQpLT5nZXRUb3BQbGF0Zm9ybURldmljZSgpLmFjY2Vzc0Jp
dG1hcChmYWxzZSk7CisgICAgcmV0dXJuIGNhbnZhc0ZvckNvbnRleHQoY29udGV4dCktPmdldFRv
cERldmljZSgpLT5hY2Nlc3NCaXRtYXAoZmFsc2UpOwogfQogCiB2b2lkIGNvbXBvc2l0ZVRvQ29w
eShjb25zdCBHcmFwaGljc0NvbnRleHQmIHNvdXJjZUxheWVycywKQEAgLTQ2Niw3ICs0NjYsNyBA
QCB2b2lkIFRyYW5zcGFyZW5jeVdpbjo6Y29tcG9zaXRlVGV4dENvbXBvCiAgICAgaWYgKCFtX3Zh
bGlkTGF5ZXIpCiAgICAgICAgIHJldHVybjsKIAotICAgIGNvbnN0IFNrQml0bWFwJiBiaXRtYXAg
PSBtX2xheWVyQnVmZmVyLT5jb250ZXh0KCktPnBsYXRmb3JtQ29udGV4dCgpLT5jYW52YXMoKS0+
Z2V0VG9wUGxhdGZvcm1EZXZpY2UoKS5hY2Nlc3NCaXRtYXAodHJ1ZSk7CisgICAgY29uc3QgU2tC
aXRtYXAmIGJpdG1hcCA9IG1fbGF5ZXJCdWZmZXItPmNvbnRleHQoKS0+cGxhdGZvcm1Db250ZXh0
KCktPmNhbnZhcygpLT5nZXRUb3BEZXZpY2UoKS0+YWNjZXNzQml0bWFwKHRydWUpOwogICAgIFNr
Q29sb3IgdGV4dENvbG9yID0gbV90ZXh0Q29tcG9zaXRlQ29sb3IucmdiKCk7CiAgICAgZm9yIChp
bnQgeSA9IDA7IHkgPCBtX2xheWVyU2l6ZS5oZWlnaHQoKTsgeSsrKSB7CiAgICAgICAgIHVpbnQz
Ml90KiByb3cgPSBiaXRtYXAuZ2V0QWRkcjMyKDAsIHkpOwpAQCAtNTAyLDcgKzUwMiw3IEBAIHZv
aWQgVHJhbnNwYXJlbmN5V2luOjptYWtlTGF5ZXJPcGFxdWUoKQogICAgICAgICByZXR1cm47CiAK
ICAgICBTa0JpdG1hcCYgYml0bWFwID0gY29uc3RfY2FzdDxTa0JpdG1hcCY+KG1fZHJhd0NvbnRl
eHQtPnBsYXRmb3JtQ29udGV4dCgpLT4KLSAgICAgICAgY2FudmFzKCktPmdldFRvcFBsYXRmb3Jt
RGV2aWNlKCkuYWNjZXNzQml0bWFwKHRydWUpKTsKKyAgICAgICAgY2FudmFzKCktPmdldFRvcERl
dmljZSgpLT5hY2Nlc3NCaXRtYXAodHJ1ZSkpOwogICAgIGZvciAoaW50IHkgPSAwOyB5IDwgbV9s
YXllclNpemUuaGVpZ2h0KCk7IHkrKykgewogICAgICAgICB1aW50MzJfdCogcm93ID0gYml0bWFw
LmdldEFkZHIzMigwLCB5KTsKICAgICAgICAgZm9yIChpbnQgeCA9IDA7IHggPCBtX2xheWVyU2l6
ZS53aWR0aCgpOyB4KyspCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9z
a2lhL0ltYWdlQnVmZmVyU2tpYS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3Mvc2tpYS9JbWFnZUJ1ZmZlclNraWEuY3BwCShyZXZpc2lvbiA4Mzc0OCkK
KysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3NraWEvSW1hZ2VCdWZmZXJTa2lh
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjYsMTkgKzY2LDIxIEBAIEltYWdlQnVmZmVyOjpJbWFn
ZUJ1ZmZlcihjb25zdCBJbnRTaXplJgogICAgIDogbV9kYXRhKHNpemUpCiAgICAgLCBtX3NpemUo
c2l6ZSkKIHsKLSAgICBpZiAoIW1fZGF0YS5tX2NhbnZhcy5pbml0aWFsaXplKHNpemUud2lkdGgo
KSwgc2l6ZS5oZWlnaHQoKSwgZmFsc2UpKSB7CisgICAgU2tDYW52YXMqIGNhbnZhcyA9IHNraWE6
OkNyZWF0ZUJpdG1hcENhbnZhcyhzaXplLndpZHRoKCksIHNpemUuaGVpZ2h0KCksIGZhbHNlKTsK
KyAgICBpZiAoIWNhbnZhcykgewogICAgICAgICBzdWNjZXNzID0gZmFsc2U7CiAgICAgICAgIHJl
dHVybjsKICAgICB9CiAKLSAgICBtX2RhdGEubV9wbGF0Zm9ybUNvbnRleHQuc2V0Q2FudmFzKCZt
X2RhdGEubV9jYW52YXMpOworICAgIG1fZGF0YS5tX2NhbnZhcyA9IGNhbnZhczsKKyAgICBtX2Rh
dGEubV9wbGF0Zm9ybUNvbnRleHQuc2V0Q2FudmFzKG1fZGF0YS5tX2NhbnZhcy5nZXQoKSk7CiAg
ICAgbV9jb250ZXh0LnNldChuZXcgR3JhcGhpY3NDb250ZXh0KCZtX2RhdGEubV9wbGF0Zm9ybUNv
bnRleHQpKTsKICAgICBtX2NvbnRleHQtPnBsYXRmb3JtQ29udGV4dCgpLT5zZXREcmF3aW5nVG9J
bWFnZUJ1ZmZlcih0cnVlKTsKIAogICAgIC8vIE1ha2UgdGhlIGJhY2tncm91bmQgdHJhbnNwYXJl
bnQuIEl0IHdvdWxkIGJlIG5pY2UgaWYgdGhpcyB3YXNuJ3QKICAgICAvLyByZXF1aXJlZCwgYnV0
IHRoZSBjYW52YXMgaXMgY3VycmVudGx5IGZpbGxlZCB3aXRoIHRoZSBtYWdpYyB0cmFuc3BhcmVu
Y3kKICAgICAvLyBjb2xvci4gQ2FuIHdlIGhhdmUgYW5vdGhlciB3YXkgdG8gbWFuYWdlIHRoaXM/
Ci0gICAgbV9kYXRhLm1fY2FudmFzLmRyYXdBUkdCKDAsIDAsIDAsIDAsIFNrWGZlcm1vZGU6OmtD
bGVhcl9Nb2RlKTsKKyAgICBtX2RhdGEubV9jYW52YXMtPmRyYXdBUkdCKDAsIDAsIDAsIDAsIFNr
WGZlcm1vZGU6OmtDbGVhcl9Nb2RlKTsKICAgICBzdWNjZXNzID0gdHJ1ZTsKIH0KIApJbmRleDog
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9JbWFnZVNraWEuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3NraWEvSW1hZ2VTa2lh
LmNwcAkocmV2aXNpb24gODM3NDgpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9za2lhL0ltYWdlU2tpYS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI2MiwxMiArMjYyLDE3IEBA
IHN0YXRpYyB2b2lkIHBhaW50U2tCaXRtYXAoUGxhdGZvcm1Db250ZXgKICAgICBwYWludC5zZXRB
bHBoYShwbGF0Zm9ybUNvbnRleHQtPmdldE5vcm1hbGl6ZWRBbHBoYSgpKTsKICAgICBwYWludC5z
ZXRMb29wZXIocGxhdGZvcm1Db250ZXh0LT5nZXREcmF3TG9vcGVyKCkpOwogCi0gICAgc2tpYTo6
UGxhdGZvcm1DYW52YXMqIGNhbnZhcyA9IHBsYXRmb3JtQ29udGV4dC0+Y2FudmFzKCk7CisgICAg
U2tDYW52YXMqIGNhbnZhcyA9IHBsYXRmb3JtQ29udGV4dC0+Y2FudmFzKCk7CiAKLSAgICBSZXNh
bXBsaW5nTW9kZSByZXNhbXBsaW5nID0gcGxhdGZvcm1Db250ZXh0LT5pc1ByaW50aW5nKCkgPyBS
RVNBTVBMRV9OT05FIDoKKyAgICBSZXNhbXBsaW5nTW9kZSByZXNhbXBsaW5nOworI2lmIEVOQUJM
RShTS0lBX0dQVSkKKyAgICByZXNhbXBsaW5nID0gUkVTQU1QTEVfTElORUFSOworI2Vsc2UKKyAg
ICByZXNhbXBsaW5nID0gcGxhdGZvcm1Db250ZXh0LT5wcmludGluZygpID8gUkVTQU1QTEVfTk9O
RSA6CiAgICAgICAgIGNvbXB1dGVSZXNhbXBsaW5nTW9kZShwbGF0Zm9ybUNvbnRleHQsIGJpdG1h
cCwgc3JjUmVjdC53aWR0aCgpLCBzcmNSZWN0LmhlaWdodCgpLAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgU2tTY2FsYXJUb0Zsb2F0KGRlc3RSZWN0LndpZHRoKCkpLAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgU2tTY2FsYXJUb0Zsb2F0KGRlc3RSZWN0LmhlaWdodCgpKSk7
CisjZW5kaWYKICAgICBpZiAocmVzYW1wbGluZyA9PSBSRVNBTVBMRV9BV0VTT01FKSB7CiAgICAg
ICAgIGRyYXdSZXNhbXBsZWRCaXRtYXAoKmNhbnZhcywgcGFpbnQsIGJpdG1hcCwgc3JjUmVjdCwg
ZGVzdFJlY3QpOwogICAgIH0gZWxzZSB7CkBAIC0zNjMsMTMgKzM2OCwxNyBAQCB2b2lkIEltYWdl
OjpkcmF3UGF0dGVybihHcmFwaGljc0NvbnRleHQqCiAKICAgICAvLyBDb21wdXRlIHRoZSByZXNh
bXBsaW5nIG1vZGUuCiAgICAgUmVzYW1wbGluZ01vZGUgcmVzYW1wbGluZzsKLSAgICBpZiAoY29u
dGV4dC0+cGxhdGZvcm1Db250ZXh0KCktPmlzUHJpbnRpbmcoKSkKKyNpZiBFTkFCTEUoU0tJQV9H
UFUpCisgICAgcmVzYW1wbGluZyA9IFJFU0FNUExFX0xJTkVBUjsKKyNlbHNlCisgICAgaWYgKGNv
bnRleHQtPnBsYXRmb3JtQ29udGV4dCgpLT5wcmludGluZygpKQogICAgICAgcmVzYW1wbGluZyA9
IFJFU0FNUExFX0xJTkVBUjsKICAgICBlbHNlIHsKICAgICAgIHJlc2FtcGxpbmcgPSBjb21wdXRl
UmVzYW1wbGluZ01vZGUoY29udGV4dC0+cGxhdGZvcm1Db250ZXh0KCksICpiaXRtYXAsCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNyY1JlY3Qud2lkdGgoKSwgc3Jj
UmVjdC5oZWlnaHQoKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ZGVzdEJpdG1hcFdpZHRoLCBkZXN0Qml0bWFwSGVpZ2h0KTsKICAgICB9CisjZW5kaWYKIAogICAg
IC8vIExvYWQgdGhlIHRyYW5zZm9ybSBXZWJLaXQgcmVxdWVzdGVkLgogICAgIFNrTWF0cml4IG1h
dHJpeChwYXR0ZXJuVHJhbnNmb3JtKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL3NraWEvUGxhdGZvcm1Db250ZXh0U2tpYS5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9QbGF0Zm9ybUNvbnRleHRTa2lhLmNwcAko
cmV2aXNpb24gODM3NDgpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9za2lh
L1BsYXRmb3JtQ29udGV4dFNraWEuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMTMsOCArMjEzLDkg
QEAgU2tDb2xvciBQbGF0Zm9ybUNvbnRleHRTa2lhOjpTdGF0ZTo6YXBwbAogLy8gUGxhdGZvcm1D
b250ZXh0U2tpYSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0KIAogLy8gRGFuZ2VyOiBjYW52YXMgY2FuIGJlIE5VTEwuCi1QbGF0Zm9ybUNv
bnRleHRTa2lhOjpQbGF0Zm9ybUNvbnRleHRTa2lhKHNraWE6OlBsYXRmb3JtQ2FudmFzKiBjYW52
YXMpCitQbGF0Zm9ybUNvbnRleHRTa2lhOjpQbGF0Zm9ybUNvbnRleHRTa2lhKFNrQ2FudmFzKiBj
YW52YXMpCiAgICAgOiBtX2NhbnZhcyhjYW52YXMpCisgICAgLCBtX3ByaW50aW5nKGZhbHNlKQog
ICAgICwgbV9kcmF3aW5nVG9JbWFnZUJ1ZmZlcihmYWxzZSkKICAgICAsIG1fdXNlR1BVKGZhbHNl
KQogI2lmIEVOQUJMRShBQ0NFTEVSQVRFRF8yRF9DQU5WQVMpCkBAIC0yNDAsNyArMjQxLDcgQEAg
UGxhdGZvcm1Db250ZXh0U2tpYTo6flBsYXRmb3JtQ29udGV4dFNraQogI2VuZGlmCiB9CiAKLXZv
aWQgUGxhdGZvcm1Db250ZXh0U2tpYTo6c2V0Q2FudmFzKHNraWE6OlBsYXRmb3JtQ2FudmFzKiBj
YW52YXMpCit2b2lkIFBsYXRmb3JtQ29udGV4dFNraWE6OnNldENhbnZhcyhTa0NhbnZhcyogY2Fu
dmFzKQogewogICAgIG1fY2FudmFzID0gY2FudmFzOwogfQpAQCAtNjA5LDIxICs2MTAsMTIgQEAg
Y29uc3QgU2tCaXRtYXAqIFBsYXRmb3JtQ29udGV4dFNraWE6OmJpdAogICAgIHJldHVybiAmbV9j
YW52YXMtPmdldERldmljZSgpLT5hY2Nlc3NCaXRtYXAoZmFsc2UpOwogfQogCi1ib29sIFBsYXRm
b3JtQ29udGV4dFNraWE6OmlzUHJpbnRpbmcoKQotewotI2lmIEVOQUJMRShTS0lBX0dQVSkKLSAg
ICByZXR1cm4gdHJ1ZTsKLSNlbHNlCi0gICAgcmV0dXJuIG1fY2FudmFzLT5nZXRUb3BQbGF0Zm9y
bURldmljZSgpLklzVmVjdG9yaWFsKCk7Ci0jZW5kaWYKLX0KLQogYm9vbCBQbGF0Zm9ybUNvbnRl
eHRTa2lhOjppc05hdGl2ZUZvbnRSZW5kZXJpbmdBbGxvd2VkKCkKIHsKICNpZiBFTkFCTEUoU0tJ
QV9HUFUpCiAgICAgcmV0dXJuIGZhbHNlOwogI2Vsc2UKLSAgICByZXR1cm4gbV9jYW52YXMtPmdl
dFRvcFBsYXRmb3JtRGV2aWNlKCkuSXNOYXRpdmVGb250UmVuZGVyaW5nQWxsb3dlZCgpOworICAg
IHJldHVybiBza2lhOjpTdXBwb3J0c1BsYXRmb3JtUGFpbnQobV9jYW52YXMpOwogI2VuZGlmCiB9
CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3NraWEvUGxhdGZvcm1D
b250ZXh0U2tpYS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL3NraWEvUGxhdGZvcm1Db250ZXh0U2tpYS5oCShyZXZpc2lvbiA4Mzc0OCkKKysrIFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3NraWEvUGxhdGZvcm1Db250ZXh0U2tpYS5oCSh3
b3JraW5nIGNvcHkpCkBAIC03MiwxMiArNzIsMTIgQEAgY2xhc3MgUGxhdGZvcm1Db250ZXh0U2tp
YSB7CiBwdWJsaWM6CiAgICAgLy8gRm9yIHByaW50aW5nLCB0aGVyZSBzaG91bGRuJ3QgYmUgYW55
IGNhbnZhcy4gY2FudmFzIGNhbiBiZSBOVUxMLiBJZiB5b3UKICAgICAvLyBzdXBwbHkgYSBOVUxM
IGNhbnZhcywgeW91IGNhbiBhbHNvIGNhbGwgc2V0Q2FudmFzIGxhdGVyLgotICAgIFBsYXRmb3Jt
Q29udGV4dFNraWEoc2tpYTo6UGxhdGZvcm1DYW52YXMqKTsKKyAgICBQbGF0Zm9ybUNvbnRleHRT
a2lhKFNrQ2FudmFzKik7CiAgICAgflBsYXRmb3JtQ29udGV4dFNraWEoKTsKIAogICAgIC8vIFNl
dHMgdGhlIGNhbnZhcyBhc3NvY2lhdGVkIHdpdGggdGhpcyBjb250ZXh0LiBVc2Ugd2hlbiBzdXBw
bHlpbmcgTlVMTAogICAgIC8vIHRvIHRoZSBjb25zdHJ1Y3Rvci4KLSAgICB2b2lkIHNldENhbnZh
cyhza2lhOjpQbGF0Zm9ybUNhbnZhcyopOworICAgIHZvaWQgc2V0Q2FudmFzKFNrQ2FudmFzKik7
CiAKICAgICAvLyBJZiBmYWxzZSB3ZSdyZSByZW5kZXJpbmcgdG8gYSBHcmFwaGljc0NvbnRleHQg
Zm9yIGEgd2ViIHBhZ2UsIGlmIGZhbHNlCiAgICAgLy8gd2UncmUgbm90IChhcyBpcyB0aGUgY2Fz
ZSB3aGVuIHJlbmRlcmluZyB0byBhIGNhbnZhcyBvYmplY3QpLgpAQCAtMTQ3LDcgKzE0Nyw3IEBA
IHB1YmxpYzoKICAgICBTa0NvbG9yIGVmZmVjdGl2ZVN0cm9rZUNvbG9yKCkgY29uc3Q7CiAKICAg
ICAvLyBSZXR1cm5zIHRoZSBjYW52YXMgdXNlZCBmb3IgcGFpbnRpbmcsIE5PVCBndWFyYW50ZWVk
IHRvIGJlIG5vbi1udWxsLgotICAgIHNraWE6OlBsYXRmb3JtQ2FudmFzKiBjYW52YXMoKSB7IHJl
dHVybiBtX2NhbnZhczsgfQorICAgIFNrQ2FudmFzKiBjYW52YXMoKSB7IHJldHVybiBtX2NhbnZh
czsgfQogCiAgICAgSW50ZXJwb2xhdGlvblF1YWxpdHkgaW50ZXJwb2xhdGlvblF1YWxpdHkoKSBj
b25zdDsKICAgICB2b2lkIHNldEludGVycG9sYXRpb25RdWFsaXR5KEludGVycG9sYXRpb25RdWFs
aXR5IGludGVycG9sYXRpb25RdWFsaXR5KTsKQEAgLTE2Myw3ICsxNjMsOCBAQCBwdWJsaWM6CiAg
ICAgLy8gUmV0dXJucyBpZiB0aGUgY29udGV4dCBpcyBhIHByaW50aW5nIGNvbnRleHQgaW5zdGVh
ZCBvZiBhIGRpc3BsYXkKICAgICAvLyBjb250ZXh0LiBCaXRtYXAgc2hvdWxkbid0IGJlIHJlc2Ft
cGxlZCB3aGVuIHByaW50aW5nIHRvIGtlZXAgdGhlIGJlc3QKICAgICAvLyBwb3NzaWJsZSBxdWFs
aXR5LgotICAgIGJvb2wgaXNQcmludGluZygpOworICAgIGJvb2wgcHJpbnRpbmcoKSBjb25zdCB7
IHJldHVybiBtX3ByaW50aW5nOyB9CisgICAgdm9pZCBzZXRQcmludGluZyhib29sIHApIHsgbV9w
cmludGluZyA9IHA7IH0KIAogICAgIC8vIFJldHVybnMgaWYgdGhlIGNvbnRleHQgYWxsb3dzIHJl
bmRlcmluZyBvZiBmb250cyB1c2luZyBuYXRpdmUgcGxhdGZvcm0KICAgICAvLyBBUElzLiBJZiBm
YWxzZSBpcyByZXR1cm5lZCBmb250IHJlbmRlcmluZyBpcyBwZXJmb3JtZWQgdXNpbmcgdGhlIHNr
aWEKQEAgLTE4NSwxMCArMTg2LDEwIEBAIHB1YmxpYzoKICAgICBHTEVTMkNhbnZhcyogZ3B1Q2Fu
dmFzKCkgY29uc3QgeyByZXR1cm4gMDsgfQogI2VuZGlmCiAgICAgLy8gQ2FsbCB0aGVzZSBiZWZv
cmUgbWFraW5nIGEgY2FsbCB0aGF0IG1hbmlwdWxhdGVzIHRoZSB1bmRlcmx5aW5nCi0gICAgLy8g
c2tpYTo6UGxhdGZvcm1DYW52YXMgb3IgV2ViQ29yZTo6R0xFUzJDYW52YXMKKyAgICAvLyBTa0Nh
bnZhcyBvciBXZWJDb3JlOjpHTEVTMkNhbnZhcwogICAgIHZvaWQgcHJlcGFyZUZvclNvZnR3YXJl
RHJhdygpIGNvbnN0OwogICAgIHZvaWQgcHJlcGFyZUZvckhhcmR3YXJlRHJhdygpIGNvbnN0Owot
ICAgIC8vIENhbGwgdG8gZm9yY2UgdGhlIHNraWE6OlBsYXRmb3JtQ2FudmFzIHRvIGNvbnRhaW4g
YWxsIHJlbmRlcmluZyByZXN1bHRzLgorICAgIC8vIENhbGwgdG8gZm9yY2UgdGhlIFNrQ2FudmFz
IHRvIGNvbnRhaW4gYWxsIHJlbmRlcmluZyByZXN1bHRzLgogICAgIHZvaWQgc3luY1NvZnR3YXJl
Q2FudmFzKCkgY29uc3Q7CiAgICAgdm9pZCBtYXJrRGlydHlSZWN0KGNvbnN0IEludFJlY3QmIHJl
Y3QpOwogCkBAIC0yMDUsNyArMjA2LDcgQEAgcHJpdmF0ZToKICAgICBzdHJ1Y3QgU3RhdGU7CiAK
ICAgICAvLyBOVUxMIGluZGljYXRlcyBwYWludGluZyBpcyBkaXNhYmxlZC4gTmV2ZXIgZGVsZXRl
IHRoaXMgb2JqZWN0LgotICAgIHNraWE6OlBsYXRmb3JtQ2FudmFzKiBtX2NhbnZhczsKKyAgICBT
a0NhbnZhcyogbV9jYW52YXM7CiAKICAgICAvLyBTdGF0ZXMgc3RhY2suIEVuYWJsZXMgbG9jYWwg
ZHJhd2luZyBzdGF0ZSBjaGFuZ2Ugd2l0aCBzYXZlKCkvcmVzdG9yZSgpCiAgICAgLy8gY2FsbHMu
CkBAIC0yMTgsNiArMjE5LDcgQEAgcHJpdmF0ZToKICAgICAvLyBWYWx1ZXMgYXJlIHVzZWQgaW4g
SW1hZ2VTa2lhLmNwcAogICAgIEludFNpemUgbV9pbWFnZVJlc2FtcGxpbmdIaW50U3JjU2l6ZTsK
ICAgICBGbG9hdFNpemUgbV9pbWFnZVJlc2FtcGxpbmdIaW50RHN0U2l6ZTsKKyAgICBib29sIG1f
cHJpbnRpbmc7CiAgICAgYm9vbCBtX2RyYXdpbmdUb0ltYWdlQnVmZmVyOwogICAgIGJvb2wgbV91
c2VHUFU7CiAjaWYgRU5BQkxFKEFDQ0VMRVJBVEVEXzJEX0NBTlZBUykKSW5kZXg6IFNvdXJjZS9X
ZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvY2hy
b21pdW0vQ2hhbmdlTG9nCShyZXZpc2lvbiA4Mzc1MCkKKysrIFNvdXJjZS9XZWJLaXQvY2hyb21p
dW0vQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMjAgQEAKKzIwMTEtMDQtMTMg
IEFsb2sgUHJpeWFkYXJzaGkgIDxhbG9rcEBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgUmVtb3ZlIGRlcGVuZGVuY3kgb24gY2hy
b21pdW0gc2tpYTo6UGxhdGZvcm1DYW52YXMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTU3NTYzCisKKyAgICAgICAgKiBwdWJsaWMvV2ViQ2FudmFzLmg6
CisgICAgICAgICogc3JjL1dlYkZyYW1lSW1wbC5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYkZy
YW1lSW1wbDo6cHJpbnRQYWdlKToKKyAgICAgICAgKiB0ZXN0cy9UcmFuc3BhcmVuY3lXaW5UZXN0
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmRyYXdOYXRpdmVSZWN0KToKKyAgICAgICAgKFdlYkNv
cmU6OmdldFBpeGVsQXQpOgorICAgICAgICAoV2ViQ29yZTo6Y2xlYXJUb3BMYXllckFscGhhQ2hh
bm5lbCk6CisgICAgICAgIChXZWJDb3JlOjpjbGVhclRvcExheWVyQWxwaGFQaXhlbCk6CisgICAg
ICAgIChXZWJDb3JlOjpURVNUKToKKwogMjAxMS0wNC0xMyAgS2ludWtvIFlhc3VkYSAgPGtpbnVr
b0BjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgRGF2aWQgTGV2aW4uCkluZGV4
OiBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJDYW52YXMuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJDYW52YXMuaAkocmV2aXNpb24gODM3
NDgpCisrKyBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9XZWJDYW52YXMuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMzQsNyArMzQsNyBAQAogI2luY2x1ZGUgIldlYkNvbW1vbi5oIgogCiAjaWYg
V0VCS0lUX1VTSU5HX1NLSUEKLW5hbWVzcGFjZSBza2lhIHsgY2xhc3MgUGxhdGZvcm1DYW52YXM7
IH0KK2NsYXNzIFNrQ2FudmFzOwogI2VsaWYgV0VCS0lUX1VTSU5HX0NHCiBzdHJ1Y3QgQ0dDb250
ZXh0OwogI2VuZGlmCkBAIC00Miw3ICs0Miw3IEBAIHN0cnVjdCBDR0NvbnRleHQ7CiBuYW1lc3Bh
Y2UgV2ViS2l0IHsKIAogI2lmIFdFQktJVF9VU0lOR19TS0lBCi10eXBlZGVmIHNraWE6OlBsYXRm
b3JtQ2FudmFzIFdlYkNhbnZhczsKK3R5cGVkZWYgU2tDYW52YXMgV2ViQ2FudmFzOwogI2VsaWYg
V0VCS0lUX1VTSU5HX0NHCiB0eXBlZGVmIHN0cnVjdCBDR0NvbnRleHQgV2ViQ2FudmFzOwogI2Vs
c2UKSW5kZXg6IFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYkZyYW1lSW1wbC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViRnJhbWVJbXBsLmNwcAko
cmV2aXNpb24gODM3NDgpCisrKyBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJGcmFtZUlt
cGwuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNDA5LDcgKzE0MDksMTMgQEAgZmxvYXQgV2ViRnJh
bWVJbXBsOjpwcmludFBhZ2UoaW50IHBhZ2UsCiAgICAgICAgIHJldHVybiAwOwogICAgIH0KIAot
ICAgIHJldHVybiBtX3ByaW50Q29udGV4dC0+c3Bvb2xQYWdlKEdyYXBoaWNzQ29udGV4dEJ1aWxk
ZXIoY2FudmFzKS5jb250ZXh0KCksIHBhZ2UpOworICAgIEdyYXBoaWNzQ29udGV4dEJ1aWxkZXIg
YnVpbGRlcihjYW52YXMpOworICAgIEdyYXBoaWNzQ29udGV4dCYgZ2MgPSBidWlsZGVyLmNvbnRl
eHQoKTsKKyNpZiBXRUJLSVRfVVNJTkdfU0tJQQorICAgIGdjLnBsYXRmb3JtQ29udGV4dCgpLT5z
ZXRQcmludGluZyh0cnVlKTsKKyNlbmRpZgorCisgICAgcmV0dXJuIG1fcHJpbnRDb250ZXh0LT5z
cG9vbFBhZ2UoZ2MsIHBhZ2UpOwogfQogCiB2b2lkIFdlYkZyYW1lSW1wbDo6cHJpbnRFbmQoKQpJ
bmRleDogU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9UcmFuc3BhcmVuY3lXaW5UZXN0LmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL1RyYW5zcGFyZW5j
eVdpblRlc3QuY3BwCShyZXZpc2lvbiA4Mzc0OCkKKysrIFNvdXJjZS9XZWJLaXQvY2hyb21pdW0v
dGVzdHMvVHJhbnNwYXJlbmN5V2luVGVzdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTUwLDggKzUw
LDggQEAgc3RhdGljIEZsb2F0UmVjdCBSRUNUVG9GbG9hdFJlY3QoY29uc3QgUgogc3RhdGljIHZv
aWQgZHJhd05hdGl2ZVJlY3QoR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgaW50IHgsIGludCB5LCBpbnQgdywgaW50IGgpCiB7Ci0gICAgc2tpYTo6
UGxhdGZvcm1DYW52YXMqIGNhbnZhcyA9IGNvbnRleHQtPnBsYXRmb3JtQ29udGV4dCgpLT5jYW52
YXMoKTsKLSAgICBIREMgZGMgPSBjYW52YXMtPmJlZ2luUGxhdGZvcm1QYWludCgpOworICAgIFNr
Q2FudmFzKiBjYW52YXMgPSBjb250ZXh0LT5wbGF0Zm9ybUNvbnRleHQoKS0+Y2FudmFzKCk7Cisg
ICAgSERDIGRjID0gc2tpYTo6QmVnaW5QbGF0Zm9ybVBhaW50KGNhbnZhcyk7CiAKICAgICBSRUNU
IGlubmVyUmM7CiAgICAgaW5uZXJSYy5sZWZ0ID0geDsKQEAgLTYxLDEzICs2MSwxMiBAQCBzdGF0
aWMgdm9pZCBkcmF3TmF0aXZlUmVjdChHcmFwaGljc0NvbnRlCiAgICAgRmlsbFJlY3QoZGMsICZp
bm5lclJjLAogICAgICAgICAgICAgIHJlaW50ZXJwcmV0X2Nhc3Q8SEJSVVNIPihHZXRTdG9ja09i
amVjdChCTEFDS19CUlVTSCkpKTsKIAotICAgIGNhbnZhcy0+ZW5kUGxhdGZvcm1QYWludCgpOwor
ICAgIHNraWE6OkVuZFBsYXRmb3JtUGFpbnQoY2FudmFzKTsKIH0KIAogc3RhdGljIENvbG9yIGdl
dFBpeGVsQXQoR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBpbnQgeCwgaW50IHkpCiB7Ci0gICAg
Y29uc3QgU2tCaXRtYXAmIGJpdG1hcCA9IGNvbnRleHQtPnBsYXRmb3JtQ29udGV4dCgpLT5jYW52
YXMoKS0+Ci0gICAgICAgIGdldFRvcFBsYXRmb3JtRGV2aWNlKCkuYWNjZXNzQml0bWFwKGZhbHNl
KTsKKyAgICBjb25zdCBTa0JpdG1hcCYgYml0bWFwID0gY29udGV4dC0+cGxhdGZvcm1Db250ZXh0
KCktPmNhbnZhcygpLT5nZXRUb3BEZXZpY2UoKS0+YWNjZXNzQml0bWFwKGZhbHNlKTsKICAgICBy
ZXR1cm4gQ29sb3IoKnJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgUkdCQTMyKj4oYml0bWFwLmdldEFk
ZHIzMih4LCB5KSkpOwogfQogCkBAIC03NSw4ICs3NCw3IEBAIHN0YXRpYyBDb2xvciBnZXRQaXhl
bEF0KEdyYXBoaWNzQ29udGV4dCoKIC8vIFdpbmRvd3MgbWVzc2luZyBpdCB1cC4KIHN0YXRpYyB2
b2lkIGNsZWFyVG9wTGF5ZXJBbHBoYUNoYW5uZWwoR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0KQog
ewotICAgIFNrQml0bWFwJiBiaXRtYXAgPSBjb25zdF9jYXN0PFNrQml0bWFwJj4oY29udGV4dC0+
cGxhdGZvcm1Db250ZXh0KCktPgotICAgICAgICBjYW52YXMoKS0+Z2V0VG9wUGxhdGZvcm1EZXZp
Y2UoKS5hY2Nlc3NCaXRtYXAoZmFsc2UpKTsKKyAgICBTa0JpdG1hcCYgYml0bWFwID0gY29uc3Rf
Y2FzdDxTa0JpdG1hcCY+KGNvbnRleHQtPnBsYXRmb3JtQ29udGV4dCgpLT5jYW52YXMoKS0+Z2V0
VG9wRGV2aWNlKCktPmFjY2Vzc0JpdG1hcChmYWxzZSkpOwogICAgIGZvciAoaW50IHkgPSAwOyB5
IDwgYml0bWFwLmhlaWdodCgpOyB5KyspIHsKICAgICAgICAgdWludDMyX3QqIHJvdyA9IGJpdG1h
cC5nZXRBZGRyMzIoMCwgeSk7CiAgICAgICAgIGZvciAoaW50IHggPSAwOyB4IDwgYml0bWFwLndp
ZHRoKCk7IHgrKykKQEAgLTg3LDggKzg1LDcgQEAgc3RhdGljIHZvaWQgY2xlYXJUb3BMYXllckFs
cGhhQ2hhbm5lbChHcgogLy8gQ2xlYXJzIHRoZSBhbHBoYSBjaGFubmVsIG9uIHRoZSBzcGVjaWZp
ZWQgcGl4ZWwuCiBzdGF0aWMgdm9pZCBjbGVhclRvcExheWVyQWxwaGFQaXhlbChHcmFwaGljc0Nv
bnRleHQqIGNvbnRleHQsIGludCB4LCBpbnQgeSkKIHsKLSAgICBTa0JpdG1hcCYgYml0bWFwID0g
Y29uc3RfY2FzdDxTa0JpdG1hcCY+KGNvbnRleHQtPnBsYXRmb3JtQ29udGV4dCgpLT4KLSAgICAg
ICAgY2FudmFzKCktPmdldFRvcFBsYXRmb3JtRGV2aWNlKCkuYWNjZXNzQml0bWFwKGZhbHNlKSk7
CisgICAgU2tCaXRtYXAmIGJpdG1hcCA9IGNvbnN0X2Nhc3Q8U2tCaXRtYXAmPihjb250ZXh0LT5w
bGF0Zm9ybUNvbnRleHQoKS0+Y2FudmFzKCktPmdldFRvcERldmljZSgpLT5hY2Nlc3NCaXRtYXAo
ZmFsc2UpKTsKICAgICAqYml0bWFwLmdldEFkZHIzMih4LCB5KSAmPSAweDAwRkZGRkZGOwogfQog
CkBAIC01NTksOSArNTU2LDcgQEAgVEVTVChUcmFuc3BhcmVuY3lXaW4sIFNjYWxlKQogICAgICAg
ICAvLyB0aGUgaGVscGVyIGdvZXMgb3V0IG9mIHNjb3BlLiBXZSBkb24ndCB3YW50IHRvIGNhbGwK
ICAgICAgICAgLy8gY2xlYXJUb3BMYXllckFscGhhQ2hhbm5lbCBiZWNhdXNlIHRoYXQgd2lsbCBh
Y3R1YWxseSBjbGVhciB0aGUgd2hvbGUKICAgICAgICAgLy8gY2FudmFzIChzaW5jZSB3ZSBoYXZl
IG5vIGV4dHJhIGxheWVyISkuCi0gICAgICAgIFNrQml0bWFwJiBiaXRtYXAgPSBjb25zdF9jYXN0
PFNrQml0bWFwJj4oaGVscGVyLmNvbnRleHQoKS0+Ci0gICAgICAgICAgICBwbGF0Zm9ybUNvbnRl
eHQoKS0+Y2FudmFzKCktPmdldFRvcFBsYXRmb3JtRGV2aWNlKCkuCi0gICAgICAgICAgICBhY2Nl
c3NCaXRtYXAoZmFsc2UpKTsKKyAgICAgICAgU2tCaXRtYXAmIGJpdG1hcCA9IGNvbnN0X2Nhc3Q8
U2tCaXRtYXAmPihoZWxwZXIuY29udGV4dCgpLT5wbGF0Zm9ybUNvbnRleHQoKS0+Y2FudmFzKCkt
PmdldFRvcERldmljZSgpLT5hY2Nlc3NCaXRtYXAoZmFsc2UpKTsKICAgICAgICAgKmJpdG1hcC5n
ZXRBZGRyMzIoMiwgMikgJj0gMHgwMEZGRkZGRjsKICAgICAgICAgaGVscGVyLmNvbXBvc2l0ZSgp
OwogICAgIH0KSW5kZXg6IFRvb2xzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9DaGFu
Z2VMb2cJKHJldmlzaW9uIDgzNzUwKQorKysgVG9vbHMvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkp
CkBAIC0xLDMgKzEsMjQgQEAKKzIwMTEtMDQtMTMgIEFsb2sgUHJpeWFkYXJzaGkgIDxhbG9rcEBj
aHJvbWl1bS5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAg
ICAgICAgUmVtb3ZlIGRlcGVuZGVuY3kgb24gY2hyb21pdW0gc2tpYTo6UGxhdGZvcm1DYW52YXMK
KyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTU3NTYzCisK
KyAgICAgICAgKiBEdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9UZXN0U2hlbGwuY3BwOgorICAgICAg
ICAobWFrZUNhbnZhc09wYXF1ZSk6CisgICAgICAgIChUZXN0U2hlbGw6OmR1bXBJbWFnZSk6Cisg
ICAgICAgICogRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vVGVzdFNoZWxsLmg6CisgICAgICAgICog
RHVtcFJlbmRlclRyZWUvY2hyb21pdW0vV2ViVGhlbWVDb250cm9sRFJUV2luLmNwcDoKKyAgICAg
ICAgKFdlYlRoZW1lQ29udHJvbERSVFdpbjo6V2ViVGhlbWVDb250cm9sRFJUV2luKToKKyAgICAg
ICAgKFdlYlRoZW1lQ29udHJvbERSVFdpbjo6ZHJhdyk6CisgICAgICAgIChXZWJUaGVtZUNvbnRy
b2xEUlRXaW46OmRyYXdUZXh0RmllbGQpOgorICAgICAgICAoV2ViVGhlbWVDb250cm9sRFJUV2lu
OjpkcmF3UHJvZ3Jlc3NCYXIpOgorICAgICAgICAqIER1bXBSZW5kZXJUcmVlL2Nocm9taXVtL1dl
YlRoZW1lQ29udHJvbERSVFdpbi5oOgorICAgICAgICAqIER1bXBSZW5kZXJUcmVlL2Nocm9taXVt
L1dlYlZpZXdIb3N0LmNwcDoKKyAgICAgICAgKFdlYlZpZXdIb3N0OjpjYW52YXMpOgorICAgICAg
ICAqIER1bXBSZW5kZXJUcmVlL2Nocm9taXVtL1dlYlZpZXdIb3N0Lmg6CisKIDIwMTEtMDQtMTMg
IFRvbnkgQ2hhbmcgIDx0b255QGNocm9taXVtLm9yZz4KIAogICAgICAgICBVbnJldmlld2VkLCBm
aXggTlJXVC4gIFN0YWNrOgpJbmRleDogVG9vbHMvRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vVGVz
dFNoZWxsLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9U
ZXN0U2hlbGwuY3BwCShyZXZpc2lvbiA4Mzc0OCkKKysrIFRvb2xzL0R1bXBSZW5kZXJUcmVlL2No
cm9taXVtL1Rlc3RTaGVsbC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTUwLDcgKzUwLDYgQEAKICNp
bmNsdWRlICJXZWJVUkxSZXNwb25zZS5oIgogI2luY2x1ZGUgIldlYlZpZXcuaCIKICNpbmNsdWRl
ICJXZWJWaWV3SG9zdC5oIgotI2luY2x1ZGUgInNraWEvZXh0L2JpdG1hcF9wbGF0Zm9ybV9kZXZp
Y2UuaCIKICNpbmNsdWRlICJza2lhL2V4dC9wbGF0Zm9ybV9jYW52YXMuaCIKICNpbmNsdWRlICJ3
ZWJraXQvc3VwcG9ydC93ZWJraXRfc3VwcG9ydC5oIgogI2luY2x1ZGUgIndlYmtpdC9zdXBwb3J0
L3dlYmtpdF9zdXBwb3J0X2dmeC5oIgpAQCAtNzcsNiArNzYsMjEgQEAgc3RhdGljIGNvbnN0IGNo
YXIgZmlsZVRlc3RQcmVmaXhbXSA9ICIoZgogc3RhdGljIGNvbnN0IGNoYXIgZGF0YVVybFBhdHRl
cm5bXSA9ICJkYXRhOiI7CiBzdGF0aWMgY29uc3Qgc3RyaW5nOjpzaXplX3R5cGUgZGF0YVVybFBh
dHRlcm5TaXplID0gc2l6ZW9mKGRhdGFVcmxQYXR0ZXJuKSAtIDE7CiAKKy8vIEZJWE1FOiBNb3Zl
IHRoaXMgdG8gYSBjb21tb24gcGxhY2Ugc28gdGhhdCBpdCBjYW4gYmUgc2hhcmVkIHdpdGgKKy8v
IFdlYkNvcmU6OlRyYW5zcGFyZW5jeVdpbjo6bWFrZUxheWVyT3BhcXVlKCkuCitzdGF0aWMgdm9p
ZCBtYWtlQ2FudmFzT3BhcXVlKFNrQ2FudmFzKiBjYW52YXMpCit7CisgICAgY29uc3QgU2tCaXRt
YXAmIGJpdG1hcCA9IGNhbnZhcy0+Z2V0VG9wRGV2aWNlKCktPmFjY2Vzc0JpdG1hcCh0cnVlKTsK
KyAgICBBU1NFUlQoYml0bWFwLmNvbmZpZygpID09IFNrQml0bWFwOjprQVJHQl84ODg4X0NvbmZp
Zyk7CisKKyAgICBTa0F1dG9Mb2NrUGl4ZWxzIGxvY2soYml0bWFwKTsKKyAgICBmb3IgKGludCB5
ID0gMDsgeSA8IGJpdG1hcC5oZWlnaHQoKTsgeSsrKSB7CisgICAgICAgIHVpbnQzMl90KiByb3cg
PSBiaXRtYXAuZ2V0QWRkcjMyKDAsIHkpOworICAgICAgICBmb3IgKGludCB4ID0gMDsgeCA8IGJp
dG1hcC53aWR0aCgpOyB4KyspCisgICAgICAgICAgICByb3dbeF0gfD0gMHhGRjAwMDAwMDsgLy8g
U2V0IGFscGhhIGJpdHMgdG8gMS4KKyAgICB9Cit9CisKIFRlc3RTaGVsbDo6VGVzdFNoZWxsKGJv
b2wgdGVzdFNoZWxsTW9kZSkKICAgICA6IG1fdGVzdElzUGVuZGluZyhmYWxzZSkKICAgICAsIG1f
dGVzdElzUHJlcGFyaW5nKGZhbHNlKQpAQCAtNTE2LDE0ICs1MzAsOCBAQCB2b2lkIFRlc3RTaGVs
bDo6ZHVtcCgpCiAgICAgZmZsdXNoKHN0ZGVycik7CiB9CiAKLXZvaWQgVGVzdFNoZWxsOjpkdW1w
SW1hZ2Uoc2tpYTo6UGxhdGZvcm1DYW52YXMqIGNhbnZhcykgY29uc3QKK3ZvaWQgVGVzdFNoZWxs
OjpkdW1wSW1hZ2UoU2tDYW52YXMqIGNhbnZhcykgY29uc3QKIHsKLSAgICBza2lhOjpCaXRtYXBQ
bGF0Zm9ybURldmljZSYgZGV2aWNlID0KLSAgICAgICAgc3RhdGljX2Nhc3Q8c2tpYTo6Qml0bWFw
UGxhdGZvcm1EZXZpY2UmPihjYW52YXMtPmdldFRvcFBsYXRmb3JtRGV2aWNlKCkpOwotICAgIGNv
bnN0IFNrQml0bWFwJiBzb3VyY2VCaXRtYXAgPSBkZXZpY2UuYWNjZXNzQml0bWFwKGZhbHNlKTsK
LQotICAgIFNrQXV0b0xvY2tQaXhlbHMgc291cmNlQml0bWFwTG9jayhzb3VyY2VCaXRtYXApOwot
CiAgICAgLy8gRml4IHRoZSBhbHBoYS4gVGhlIGV4cGVjdGVkIFBOR3Mgb24gTWFjIGhhdmUgYW4g
YWxwaGEgY2hhbm5lbCwgc28gd2Ugd2FudAogICAgIC8vIHRvIGtlZXAgaXQuIE9uIFdpbmRvd3Ms
IHRoZSBhbHBoYSBjaGFubmVsIGlzIHdyb25nIHNpbmNlIHRleHQvZm9ybSBjb250cm9sCiAgICAg
Ly8gZHJhd2luZyBtYXkgaGF2ZSBlcmFzZWQgaXQgaW4gYSBmZXcgcGxhY2VzLiBTbyBvbiBXaW5k
b3dzIHdlIGZvcmNlIGl0IHRvCkBAIC01MzMsOSArNTQxLDEyIEBAIHZvaWQgVGVzdFNoZWxsOjpk
dW1wSW1hZ2Uoc2tpYTo6UGxhdGZvcm0KICAgICBib29sIGRpc2NhcmRUcmFuc3BhcmVuY3kgPSBm
YWxzZTsKICNlbHNlCiAgICAgYm9vbCBkaXNjYXJkVHJhbnNwYXJlbmN5ID0gdHJ1ZTsKLSAgICBk
ZXZpY2UubWFrZU9wYXF1ZSgwLCAwLCBzb3VyY2VCaXRtYXAud2lkdGgoKSwgc291cmNlQml0bWFw
LmhlaWdodCgpKTsKKyAgICBtYWtlQ2FudmFzT3BhcXVlKGNhbnZhcyk7CiAjZW5kaWYKIAorICAg
IGNvbnN0IFNrQml0bWFwJiBzb3VyY2VCaXRtYXAgPSBjYW52YXMtPmdldFRvcERldmljZSgpLT5h
Y2Nlc3NCaXRtYXAoZmFsc2UpOworICAgIFNrQXV0b0xvY2tQaXhlbHMgc291cmNlQml0bWFwTG9j
ayhzb3VyY2VCaXRtYXApOworCiAgICAgLy8gQ29tcHV0ZSBNRDUgc3VtLgogICAgIE1ENSBkaWdl
c3RlcjsKICAgICBWZWN0b3I8dWludDhfdCwgMTY+IGRpZ2VzdFZhbHVlOwpJbmRleDogVG9vbHMv
RHVtcFJlbmRlclRyZWUvY2hyb21pdW0vVGVzdFNoZWxsLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMv
RHVtcFJlbmRlclRyZWUvY2hyb21pdW0vVGVzdFNoZWxsLmgJKHJldmlzaW9uIDgzNzQ4KQorKysg
VG9vbHMvRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vVGVzdFNoZWxsLmgJKHdvcmtpbmcgY29weSkK
QEAgLTU0LDkgKzU0LDYgQEAgY2xhc3MgV2ViTm90aWZpY2F0aW9uUHJlc2VudGVyOwogY2xhc3Mg
V2ViVmlldzsKIGNsYXNzIFdlYlVSTDsKIH0KLW5hbWVzcGFjZSBza2lhIHsKLWNsYXNzIFBsYXRm
b3JtQ2FudmFzOwotfQogCiBjbGFzcyBEUlREZXZUb29sc0FnZW50OwogY2xhc3MgRFJURGV2VG9v
bHNDYWxsQXJnczsKQEAgLTE4Miw3ICsxNzksNyBAQCBwcml2YXRlOgogICAgIHZvaWQgcmVzZXRX
ZWJTZXR0aW5ncyhXZWJLaXQ6OldlYlZpZXcmKTsKICAgICB2b2lkIGR1bXAoKTsKICAgICBzdGQ6
OnN0cmluZyBkdW1wQWxsQmFja0ZvcndhcmRMaXN0cygpOwotICAgIHZvaWQgZHVtcEltYWdlKHNr
aWE6OlBsYXRmb3JtQ2FudmFzKikgY29uc3Q7CisgICAgdm9pZCBkdW1wSW1hZ2UoU2tDYW52YXMq
KSBjb25zdDsKIAogICAgIGJvb2wgbV90ZXN0SXNQZW5kaW5nOwogICAgIGJvb2wgbV90ZXN0SXNQ
cmVwYXJpbmc7CkluZGV4OiBUb29scy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9XZWJUaGVtZUNv
bnRyb2xEUlRXaW4uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9t
aXVtL1dlYlRoZW1lQ29udHJvbERSVFdpbi5jcHAJKHJldmlzaW9uIDgzNzQ4KQorKysgVG9vbHMv
RHVtcFJlbmRlclRyZWUvY2hyb21pdW0vV2ViVGhlbWVDb250cm9sRFJUV2luLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtNDYsNyArNDYsNiBAQAogI2luY2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+CiAK
IHVzaW5nIG5hbWVzcGFjZSBzdGQ7Ci11c2luZyBuYW1lc3BhY2Ugc2tpYTsKIAogc3RhdGljIGNv
bnN0IFNrQ29sb3IgZWRnZUNvbG9yICAgICA9IFNLX0NvbG9yQkxBQ0s7CiBzdGF0aWMgY29uc3Qg
U2tDb2xvciByZWFkT25seUNvbG9yID0gU2tDb2xvclNldFJHQigweGU5LCAweGMyLCAweGE2KTsK
QEAgLTkzLDcgKzkyLDcgQEAgc3RhdGljIFNrSVJlY3QgdmFsaWRhdGUoY29uc3QgU2tJUmVjdCYg
cgogCiAvLyBXZWJUaGVtZUNvbnRyb2xEUlRXaW4KIAotV2ViVGhlbWVDb250cm9sRFJUV2luOjpX
ZWJUaGVtZUNvbnRyb2xEUlRXaW4oUGxhdGZvcm1DYW52YXMqIGNhbnZhcywKK1dlYlRoZW1lQ29u
dHJvbERSVFdpbjo6V2ViVGhlbWVDb250cm9sRFJUV2luKFNrQ2FudmFzKiBjYW52YXMsCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBTa0lSZWN0JiBp
cmVjdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFR5cGUg
Y3R5cGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdGF0
ZSBjc3RhdGUpCkBAIC0zMDQsNyArMzAzLDcgQEAgdm9pZCBXZWJUaGVtZUNvbnRyb2xEUlRXaW46
OmRyYXcoKQogICAgIC8vIEluZGVudHMgZm9yIHRoZSB0aGUgc2xpZGVyIHRyYWNrLgogICAgIGNv
bnN0IGludCBzbGlkZXJJbmRlbnQgPSAyOwogCi0gICAgbV9jYW52YXMtPmJlZ2luUGxhdGZvcm1Q
YWludCgpOworICAgIHNraWE6OkJlZ2luUGxhdGZvcm1QYWludChtX2NhbnZhcyk7CiAKICAgICBz
d2l0Y2ggKG1fdHlwZSkgewogICAgIGNhc2UgVW5rbm93blR5cGU6CkBAIC00NzUsNyArNDc0LDcg
QEAgdm9pZCBXZWJUaGVtZUNvbnRyb2xEUlRXaW46OmRyYXcoKQogICAgIH0KIAogICAgIG1hcmtT
dGF0ZSgpOwotICAgIG1fY2FudmFzLT5lbmRQbGF0Zm9ybVBhaW50KCk7CisgICAgc2tpYTo6RW5k
UGxhdGZvcm1QYWludChtX2NhbnZhcyk7CiB9CiAKIC8vIEJlY2F1c2UgcmVuZGVyaW5nIGEgdGV4
dCBmaWVsZCBpcyBkZXBlbmRlbnQgb24gaW5wdXQKQEAgLTQ4NSw3ICs0ODQsNyBAQCB2b2lkIFdl
YlRoZW1lQ29udHJvbERSVFdpbjo6ZHJhd1RleHRGaWVsCiB7CiAgICAgU2tQYWludCBwYWludDsK
IAotICAgIG1fY2FudmFzLT5iZWdpblBsYXRmb3JtUGFpbnQoKTsKKyAgICBza2lhOjpCZWdpblBs
YXRmb3JtUGFpbnQobV9jYW52YXMpOwogICAgIGlmIChmaWxsQ29udGVudEFyZWEpIHsKICAgICAg
ICAgcGFpbnQuc2V0Q29sb3IoY29sb3IpOwogICAgICAgICBwYWludC5zZXRTdHlsZShTa1BhaW50
OjprRmlsbF9TdHlsZSk7CkBAIC00OTgsMTQgKzQ5NywxNCBAQCB2b2lkIFdlYlRoZW1lQ29udHJv
bERSVFdpbjo6ZHJhd1RleHRGaWVsCiAgICAgfQogCiAgICAgbWFya1N0YXRlKCk7Ci0gICAgbV9j
YW52YXMtPmVuZFBsYXRmb3JtUGFpbnQoKTsKKyAgICBza2lhOjpFbmRQbGF0Zm9ybVBhaW50KG1f
Y2FudmFzKTsKIH0KIAogdm9pZCBXZWJUaGVtZUNvbnRyb2xEUlRXaW46OmRyYXdQcm9ncmVzc0Jh
cihjb25zdCBTa0lSZWN0JiBmaWxsUmVjdCkKIHsKICAgICBTa1BhaW50IHBhaW50OwogCi0gICAg
bV9jYW52YXMtPmJlZ2luUGxhdGZvcm1QYWludCgpOworICAgIHNraWE6OkJlZ2luUGxhdGZvcm1Q
YWludChtX2NhbnZhcyk7CiAgICAgcGFpbnQuc2V0Q29sb3IobV9iZ0NvbG9yKTsKICAgICBwYWlu
dC5zZXRTdHlsZShTa1BhaW50OjprRmlsbF9TdHlsZSk7CiAgICAgbV9jYW52YXMtPmRyYXdJUmVj
dChtX2lyZWN0LCBwYWludCk7CkBAIC01MTgsNiArNTE3LDYgQEAgdm9pZCBXZWJUaGVtZUNvbnRy
b2xEUlRXaW46OmRyYXdQcm9ncmVzcwogICAgIG1fY2FudmFzLT5kcmF3SVJlY3QodG9maWxsLCBw
YWludCk7CiAKICAgICBtYXJrU3RhdGUoKTsKLSAgICBtX2NhbnZhcy0+ZW5kUGxhdGZvcm1QYWlu
dCgpOworICAgIHNraWE6OkVuZFBsYXRmb3JtUGFpbnQobV9jYW52YXMpOwogfQogCkluZGV4OiBU
b29scy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9XZWJUaGVtZUNvbnRyb2xEUlRXaW4uaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBUb29scy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9XZWJUaGVtZUNvbnRyb2xE
UlRXaW4uaAkocmV2aXNpb24gODM3NDgpCisrKyBUb29scy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1
bS9XZWJUaGVtZUNvbnRyb2xEUlRXaW4uaAkod29ya2luZyBjb3B5KQpAQCAtMTIwLDEyICsxMjAs
OSBAQCBwdWJsaWM6CiAgICAgICAgIFByb2dyZXNzQmFyVHlwZQogICAgIH07CiAKLSAgICAvLyBj
YW52YXMgaXMgdGhlIGNhbnZhcyB0byBkcmF3IG9udG8sIGFuZCByZWN0IGdpdmVzIHRoZSBzaXpl
IG9mIHRoZQotICAgIC8vIGNvbnRyb2wuIGN0eXBlIGFuZCBjc3RhdGUgc3BlY2lmeSB0aGUgdHlw
ZSBhbmQgc3RhdGUgb2YgdGhlIGNvbnRyb2wuCi0gICAgV2ViVGhlbWVDb250cm9sRFJUV2luKHNr
aWE6OlBsYXRmb3JtQ2FudmFzKiBjYW52YXMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgIGNv
bnN0IFNrSVJlY3QmIHJlY3QsCi0gICAgICAgICAgICAgICAgICAgICAgICAgIFR5cGUgY3R5cGUs
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgIFN0YXRlIGNzdGF0ZSk7CisgICAgLy8gQ29uc3Ry
dWN0cyBhIGNvbnRyb2wgb2YgdGhlIGdpdmVuIHNpemUsIHR5cGUgYW5kIHN0YXRlIHRvIGRyYXcK
KyAgICAvLyBvbiB0byB0aGUgZ2l2ZW4gY2FudmFzLgorICAgIFdlYlRoZW1lQ29udHJvbERSVFdp
bihTa0NhbnZhcyosIGNvbnN0IFNrSVJlY3QmLCBUeXBlLCBTdGF0ZSk7CiAgICAgfldlYlRoZW1l
Q29udHJvbERSVFdpbigpOwogCiAgICAgLy8gRHJhd3MgdGhlIGNvbnRyb2wuCkBAIC0xODQsNyAr
MTgxLDcgQEAgcHJpdmF0ZToKICAgICAvLyBjb2xvciBpcyB3aGljaC4KICAgICB2b2lkIG1hcmtT
dGF0ZSgpOwogCi0gICAgc2tpYTo6UGxhdGZvcm1DYW52YXMqIG1fY2FudmFzOworICAgIFNrQ2Fu
dmFzKiBtX2NhbnZhczsKICAgICBjb25zdCBTa0lSZWN0IG1faXJlY3Q7CiAgICAgY29uc3QgVHlw
ZSBtX3R5cGU7CiAgICAgY29uc3QgU3RhdGUgbV9zdGF0ZTsKSW5kZXg6IFRvb2xzL0R1bXBSZW5k
ZXJUcmVlL2Nocm9taXVtL1dlYlZpZXdIb3N0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9EdW1w
UmVuZGVyVHJlZS9jaHJvbWl1bS9XZWJWaWV3SG9zdC5jcHAJKHJldmlzaW9uIDgzNzQ4KQorKysg
VG9vbHMvRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vV2ViVmlld0hvc3QuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC02Niw3ICs2Niw2IEBACiAKIHVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwogdXNpbmcg
bmFtZXNwYWNlIFdlYktpdDsKLXVzaW5nIG5hbWVzcGFjZSBza2lhOwogdXNpbmcgbmFtZXNwYWNl
IHN0ZDsKIAogc3RhdGljIGNvbnN0IGludCBzY3JlZW5XaWR0aCA9IDE5MjA7CkBAIC0xNTEyLDEz
ICsxNTExLDE0IEBAIHZvaWQgV2ViVmlld0hvc3Q6OnBhaW50SW52YWxpZGF0ZWRSZWdpb24KICAg
ICBBU1NFUlQobV9wYWludFJlY3QuaXNFbXB0eSgpKTsKIH0KIAotUGxhdGZvcm1DYW52YXMqIFdl
YlZpZXdIb3N0OjpjYW52YXMoKQorU2tDYW52YXMqIFdlYlZpZXdIb3N0OjpjYW52YXMoKQogewog
ICAgIGlmIChtX2NhbnZhcykKICAgICAgICAgcmV0dXJuIG1fY2FudmFzLmdldCgpOwogICAgIFdl
YlNpemUgd2lkZ2V0U2l6ZSA9IHdlYldpZGdldCgpLT5zaXplKCk7CiAgICAgcmVzZXRTY3JvbGxS
ZWN0KCk7Ci0gICAgbV9jYW52YXMuc2V0KG5ldyBQbGF0Zm9ybUNhbnZhcyh3aWRnZXRTaXplLndp
ZHRoLCB3aWRnZXRTaXplLmhlaWdodCwgdHJ1ZSkpOworICAgIG1fY2FudmFzLnNldChza2lhOjpD
cmVhdGVCaXRtYXBDYW52YXMoCisgICAgICAgIHdpZGdldFNpemUud2lkdGgsIHdpZGdldFNpemUu
aGVpZ2h0LCB0cnVlKSk7CiAgICAgcmV0dXJuIG1fY2FudmFzLmdldCgpOwogfQogCkluZGV4OiBU
b29scy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9XZWJWaWV3SG9zdC5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFRvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9taXVtL1dlYlZpZXdIb3N0LmgJKHJldmlzaW9uIDgz
NzQ4KQorKysgVG9vbHMvRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vV2ViVmlld0hvc3QuaAkod29y
a2luZyBjb3B5KQpAQCAtNDUsNyArNDUsOSBAQAogI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmlu
Zy5oPgogCiBjbGFzcyBMYXlvdXRUZXN0Q29udHJvbGxlcjsKK2NsYXNzIFNrQ2FudmFzOwogY2xh
c3MgVGVzdFNoZWxsOworCiBuYW1lc3BhY2UgV2ViS2l0IHsKIGNsYXNzIFdlYkZyYW1lOwogY2xh
c3MgV2ViRGV2aWNlT3JpZW50YXRpb25DbGllbnQ7CkBAIC02MSw5ICs2Myw2IEBAIHN0cnVjdCBX
ZWJSZWN0Owogc3RydWN0IFdlYlVSTEVycm9yOwogc3RydWN0IFdlYldpbmRvd0ZlYXR1cmVzOwog
fQotbmFtZXNwYWNlIHNraWEgewotY2xhc3MgUGxhdGZvcm1DYW52YXM7Ci19CiAKIGNsYXNzIFdl
YlZpZXdIb3N0IDogcHVibGljIFdlYktpdDo6V2ViU3BlbGxDaGVja0NsaWVudCwgcHVibGljIFdl
YktpdDo6V2ViVmlld0NsaWVudCwgcHVibGljIFdlYktpdDo6V2ViRnJhbWVDbGllbnQsIHB1Ymxp
YyBOYXZpZ2F0aW9uSG9zdCB7CiAgcHVibGljOgpAQCAtODcsNyArODYsNyBAQCBjbGFzcyBXZWJW
aWV3SG9zdCA6IHB1YmxpYyBXZWJLaXQ6OldlYlNwCiAgICAgdm9pZCBwYWludFJlY3QoY29uc3Qg
V2ViS2l0OjpXZWJSZWN0Jik7CiAgICAgdm9pZCB1cGRhdGVQYWludFJlY3QoY29uc3QgV2ViS2l0
OjpXZWJSZWN0Jik7CiAgICAgdm9pZCBwYWludEludmFsaWRhdGVkUmVnaW9uKCk7Ci0gICAgc2tp
YTo6UGxhdGZvcm1DYW52YXMqIGNhbnZhcygpOworICAgIFNrQ2FudmFzKiBjYW52YXMoKTsKICAg
ICB2b2lkIGRpc3BsYXlSZXBhaW50TWFzaygpOwogCiAgICAgdm9pZCBsb2FkVVJMRm9yRnJhbWUo
Y29uc3QgV2ViS2l0OjpXZWJVUkwmLCBjb25zdCBXZWJLaXQ6OldlYlN0cmluZyYgZnJhbWVOYW1l
KTsKQEAgLTMzMyw3ICszMzIsNyBAQCBwcml2YXRlOgogICAgIE1vY2tTcGVsbENoZWNrIG1fc3Bl
bGxjaGVjazsKIAogICAgIC8vIFBhaW50aW5nLgotICAgIE93blB0cjxza2lhOjpQbGF0Zm9ybUNh
bnZhcz4gbV9jYW52YXM7CisgICAgT3duUHRyPFNrQ2FudmFzPiBtX2NhbnZhczsKICAgICBXZWJL
aXQ6OldlYlJlY3QgbV9wYWludFJlY3Q7CiAgICAgYm9vbCBtX2lzUGFpbnRpbmc7CiAK
</data>
<flag name="review"
          id="82128"
          type_id="1"
          status="+"
          setter="jamesr"
    />
    <flag name="commit-queue"
          id="82129"
          type_id="3"
          status="-"
          setter="commit-queue"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>89591</attachid>
            <date>2011-04-14 09:21:41 -0700</date>
            <delta_ts>2011-04-14 20:52:46 -0700</delta_ts>
            <desc>proposed patch</desc>
            <filename>skia.txt</filename>
            <type>text/plain</type>
            <size>31627</size>
            <attacher name="Alok Priyadarshi">alokp</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDgzODYzKQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMzkgQEAKKzIwMTEtMDQtMTQgIEFsb2sgUHJp
eWFkYXJzaGkgIDxhbG9rcEBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9C
T0RZIChPT1BTISkuCisKKyAgICAgICAgUmVtb3ZlIGRlcGVuZGVuY3kgb24gY2hyb21pdW0gc2tp
YTo6UGxhdGZvcm1DYW52YXMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTU3NTYzCisKKyAgICAgICAgVGhpcyBwYXRjaCBkb2VzIG5vdCBjaGFuZ2UgYW55
IGZ1bmN0aW9uYWxpdHksIGp1c3QgdGhlIHR5cGUgb2Ygb2JqZWN0IHNraWE6OlBsYXRmb3JtQ2Fu
dmFzIC0+IFNrQ2FudmFzLiBUaGUgb2JqZWN0IGlzIHN0aWxsIGJlaW5nIGNyZWF0ZWQgYnkgYSBm
YWN0b3J5IG1ldGhvZCBza2lhOjpDcmVhdGVCaXRtYXBDYW52YXMgZGVmaW5lZCBpbiBDaHJvbWl1
bS4gV2Ugd2lsbCBldmVudHVhbGx5IGRlZmluZSBhbiBBUEkgdGhhdCBldmVyeSBwb3J0IHVzaW5n
IHNraWEgd2lsbCBkZWZpbmUuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9Gb250Q2hyb21pdW1XaW4uY3BwOgorICAgICAgICAoV2ViQ29yZTo6VHJhbnNwYXJlbmN5QXdh
cmVGb250UGFpbnRlcjo6VHJhbnNwYXJlbmN5QXdhcmVGb250UGFpbnRlcjo6aW5pdGlhbGl6ZUZv
ckdESSk6CisgICAgICAgIChXZWJDb3JlOjpUcmFuc3BhcmVuY3lBd2FyZUZvbnRQYWludGVyOjpU
cmFuc3BhcmVuY3lBd2FyZUZvbnRQYWludGVyOjp+VHJhbnNwYXJlbmN5QXdhcmVGb250UGFpbnRl
cik6CisgICAgICAgIChXZWJDb3JlOjpGb250OjpkcmF3Q29tcGxleFRleHQpOgorICAgICAgICAq
IHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0ltYWdlQnVmZmVyRGF0YVNraWEuaDoKKyAgICAg
ICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllckNocm9taXVtLmg6CisgICAgICAg
ICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJSZW5kZXJlckNocm9taXVtLmg6Cisg
ICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vUGxhdGZvcm1DYW52YXMuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6UGxhdGZvcm1DYW52YXM6OnJlc2l6ZSk6CisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vUGxhdGZvcm1DYW52YXMuaDoKKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9UcmFuc3BhcmVuY3lXaW4uY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6VHJhbnNwYXJlbmN5V2luOjpjb21wb3NpdGVUZXh0Q29tcG9zaXRlKToKKyAgICAgICAg
KFdlYkNvcmU6OlRyYW5zcGFyZW5jeVdpbjo6bWFrZUxheWVyT3BhcXVlKToKKyAgICAgICAgKiBw
bGF0Zm9ybS9ncmFwaGljcy9za2lhL0ltYWdlQnVmZmVyU2tpYS5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpJbWFnZUJ1ZmZlcjo6SW1hZ2VCdWZmZXIpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL3NraWEvSW1hZ2VTa2lhLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OnBhaW50U2tCaXRtYXAp
OgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2U6OmRyYXdQYXR0ZXJuKToKKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy9za2lhL1BsYXRmb3JtQ29udGV4dFNraWEuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6UGxhdGZvcm1Db250ZXh0U2tpYTo6UGxhdGZvcm1Db250ZXh0U2tpYSk6CisgICAgICAg
IChXZWJDb3JlOjpQbGF0Zm9ybUNvbnRleHRTa2lhOjpzZXRDYW52YXMpOgorICAgICAgICAoV2Vi
Q29yZTo6UGxhdGZvcm1Db250ZXh0U2tpYTo6aXNOYXRpdmVGb250UmVuZGVyaW5nQWxsb3dlZCk6
CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9QbGF0Zm9ybUNvbnRleHRTa2lhLmg6
CisgICAgICAgIChXZWJDb3JlOjpQbGF0Zm9ybUNvbnRleHRTa2lhOjpjYW52YXMpOgorICAgICAg
ICAoV2ViQ29yZTo6UGxhdGZvcm1Db250ZXh0U2tpYTo6cHJpbnRpbmcpOgorICAgICAgICAoV2Vi
Q29yZTo6UGxhdGZvcm1Db250ZXh0U2tpYTo6c2V0UHJpbnRpbmcpOgorCiAyMDExLTA0LTE0ICBT
YXRpc2ggU2FtcGF0aCAgPHNhdGlzaEBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgUmV2aWV3ZWQg
YnkgS2VudCBUYW11cmEuCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9Gb250Q2hyb21pdW1XaW4uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0ZvbnRDaHJvbWl1bVdpbi5jcHAJKHJldmlzaW9u
IDgzODU5KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vRm9u
dENocm9taXVtV2luLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTY1LDcgKzE2NSw3IEBAIHZvaWQg
VHJhbnNwYXJlbmN5QXdhcmVGb250UGFpbnRlcjo6aW5pdGkKIAogICAgIC8vIFNldCB1cCB0aGUg
REMsIHVzaW5nIHRoZSBvbmUgZnJvbSB0aGUgdHJhbnNwYXJlbmN5IGhlbHBlci4KICAgICBpZiAo
bV90cmFuc3BhcmVuY3kucGxhdGZvcm1Db250ZXh0KCkpIHsKLSAgICAgICAgbV9oZGMgPSBtX3Ry
YW5zcGFyZW5jeS5wbGF0Zm9ybUNvbnRleHQoKS0+Y2FudmFzKCktPmJlZ2luUGxhdGZvcm1QYWlu
dCgpOworICAgICAgICBtX2hkYyA9IHNraWE6OkJlZ2luUGxhdGZvcm1QYWludChtX3RyYW5zcGFy
ZW5jeS5wbGF0Zm9ybUNvbnRleHQoKS0+Y2FudmFzKCkpOwogICAgICAgICBTZXRUZXh0Q29sb3Io
bV9oZGMsIHNraWE6OlNrQ29sb3JUb0NPTE9SUkVGKGNvbG9yKSk7CiAgICAgICAgIFNldEJrTW9k
ZShtX2hkYywgVFJBTlNQQVJFTlQpOwogICAgIH0KQEAgLTE3OSw3ICsxNzksNyBAQCBUcmFuc3Bh
cmVuY3lBd2FyZUZvbnRQYWludGVyOjp+VHJhbnNwYXJlCiAgICAgaWYgKG1fY3JlYXRlZFRyYW5z
cGFyZW5jeUxheWVyKQogICAgICAgICBtX2dyYXBoaWNzQ29udGV4dC0+ZW5kVHJhbnNwYXJlbmN5
TGF5ZXIoKTsKICAgICBtX2dyYXBoaWNzQ29udGV4dC0+cmVzdG9yZSgpOwotICAgIG1fcGxhdGZv
cm1Db250ZXh0LT5jYW52YXMoKS0+ZW5kUGxhdGZvcm1QYWludCgpOworICAgIHNraWE6OkVuZFBs
YXRmb3JtUGFpbnQobV9wbGF0Zm9ybUNvbnRleHQtPmNhbnZhcygpKTsKIH0KIAogLy8gU3BlY2lh
bGl6YXRpb24gZm9yIHNpbXBsZSBHbHlwaEJ1ZmZlciBwYWludGluZy4KQEAgLTU0Miw3ICs1NDIs
NyBAQCB2b2lkIEZvbnQ6OmRyYXdDb21wbGV4VGV4dChHcmFwaGljc0NvbnRlCiAgICAgLy8gdGhl
IGJhc2VsaW5lLCBzbyB3ZSBoYXZlIHRvIHN1YnRyYWN0IG9mZiB0aGUgYXNjZW50LgogICAgIHN0
YXRlLmRyYXcoZ3JhcGhpY3NDb250ZXh0LCBoZGMsIGxyb3VuZGYocG9pbnQueCgpKSwgbHJvdW5k
Zihwb2ludC55KCkgLSBmb250TWV0cmljcygpLmFzY2VudCgpKSwgZnJvbSwgdG8pOwogCi0gICAg
Y29udGV4dC0+Y2FudmFzKCktPmVuZFBsYXRmb3JtUGFpbnQoKTsKKyAgICBza2lhOjpFbmRQbGF0
Zm9ybVBhaW50KGNvbnRleHQtPmNhbnZhcygpKTsKIH0KIAogdm9pZCBGb250OjpkcmF3RW1waGFz
aXNNYXJrc0ZvckNvbXBsZXhUZXh0KEdyYXBoaWNzQ29udGV4dCogLyogY29udGV4dCAqLywgY29u
c3QgVGV4dFJ1biYgLyogcnVuICovLCBjb25zdCBBdG9taWNTdHJpbmcmIC8qIG1hcmsgKi8sIGNv
bnN0IEZsb2F0UG9pbnQmIC8qIHBvaW50ICovLCBpbnQgLyogZnJvbSAqLywgaW50IC8qIHRvICov
KSBjb25zdApJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
SW1hZ2VCdWZmZXJEYXRhU2tpYS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL0ltYWdlQnVmZmVyRGF0YVNraWEuaAkocmV2aXNpb24gODM4
NTkpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9JbWFnZUJ1
ZmZlckRhdGFTa2lhLmgJKHdvcmtpbmcgY29weSkKQEAgLTM4LDcgKzM4LDcgQEAgY2xhc3MgSW1h
Z2VCdWZmZXJEYXRhIHsKIHB1YmxpYzoKICAgICBJbWFnZUJ1ZmZlckRhdGEoY29uc3QgSW50U2l6
ZSYpOwogCi0gICAgc2tpYTo6UGxhdGZvcm1DYW52YXMgbV9jYW52YXM7CisgICAgT3duUHRyPFNr
Q2FudmFzPiBtX2NhbnZhczsKICAgICBQbGF0Zm9ybUNvbnRleHRTa2lhIG1fcGxhdGZvcm1Db250
ZXh0OwogfTsKIApJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vTGF5ZXJDaHJvbWl1bS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL0xheWVyQ2hyb21pdW0uaAkocmV2aXNpb24gODM4NTkpCisrKyBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9MYXllckNocm9taXVtLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTUwLDExICs1MCw2IEBACiAjaW5jbHVkZSA8d3RmL3RleHQvU3Ry
aW5nSGFzaC5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgogCi0KLW5hbWVzcGFj
ZSBza2lhIHsKLWNsYXNzIFBsYXRmb3JtQ2FudmFzOwotfQotCiBuYW1lc3BhY2UgV2ViQ29yZSB7
CiAKIGNsYXNzIENDTGF5ZXJJbXBsOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vTGF5ZXJSZW5kZXJlckNocm9taXVtLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vTGF5ZXJSZW5kZXJlckNocm9t
aXVtLmgJKHJldmlzaW9uIDgzODU5KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vTGF5ZXJSZW5kZXJlckNocm9taXVtLmgJKHdvcmtpbmcgY29weSkKQEAgLTE4
OCw3ICsxODgsNyBAQCBwcml2YXRlOgogICAgIGJvb2wgbV9jb21wb3NpdGVPZmZzY3JlZW47CiAK
ICNpZiBVU0UoU0tJQSkKLSAgICBPd25QdHI8c2tpYTo6UGxhdGZvcm1DYW52YXM+IG1fcm9vdExh
eWVyQ2FudmFzOworICAgIE93blB0cjxTa0NhbnZhcz4gbV9yb290TGF5ZXJDYW52YXM7CiAgICAg
T3duUHRyPFBsYXRmb3JtQ29udGV4dFNraWE+IG1fcm9vdExheWVyU2tpYUNvbnRleHQ7CiAgICAg
T3duUHRyPEdyYXBoaWNzQ29udGV4dD4gbV9yb290TGF5ZXJHcmFwaGljc0NvbnRleHQ7CiAjZWxp
ZiBQTEFURk9STShDRykKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL1BsYXRmb3JtQ2FudmFzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9QbGF0Zm9ybUNhbnZhcy5jcHAJKHJldmlzaW9uIDgz
ODU5KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vUGxhdGZv
cm1DYW52YXMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01Miw3ICs1Miw3IEBAIHZvaWQgUGxhdGZv
cm1DYW52YXM6OnJlc2l6ZShjb25zdCBJbnRTaXoKIHsKICAgICBtX3NpemUgPSBzaXplOwogI2lm
IFVTRShTS0lBKQotICAgIG1fc2tpYUNhbnZhcyA9IG5ldyBza2lhOjpQbGF0Zm9ybUNhbnZhcyhz
aXplLndpZHRoKCksIHNpemUuaGVpZ2h0KCksIGZhbHNlKTsKKyAgICBtX3NraWFDYW52YXMgPSBz
a2lhOjpDcmVhdGVCaXRtYXBDYW52YXMoc2l6ZS53aWR0aCgpLCBzaXplLmhlaWdodCgpLCBmYWxz
ZSk7CiAjZWxpZiBQTEFURk9STShDRykKICAgICBzaXplX3QgYnVmZmVyU2l6ZSA9IHNpemUud2lk
dGgoKSAqIHNpemUuaGVpZ2h0KCkgKiA0OwogICAgIG1fcGl4ZWxEYXRhID0gYWRvcHRBcnJheVB0
cihuZXcgdWludDhfdFtidWZmZXJTaXplXSk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9QbGF0Zm9ybUNhbnZhcy5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1BsYXRmb3JtQ2FudmFzLmgJKHJl
dmlzaW9uIDgzODU5KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vUGxhdGZvcm1DYW52YXMuaAkod29ya2luZyBjb3B5KQpAQCAtMzksOCArMzksOCBAQAogI2Vu
ZGlmCiAKICNpZiBVU0UoU0tJQSkKLW5hbWVzcGFjZSBza2lhIHsgY2xhc3MgUGxhdGZvcm1DYW52
YXM7IH0KIGNsYXNzIFNrQml0bWFwOworY2xhc3MgU2tDYW52YXM7CiAjZW5kaWYKIAogbmFtZXNw
YWNlIFdlYkNvcmUgewpAQCAtOTcsNyArOTcsNyBAQCBwdWJsaWM6CiAKIHByaXZhdGU6CiAjaWYg
VVNFKFNLSUEpCi0gICAgT3duUHRyPHNraWE6OlBsYXRmb3JtQ2FudmFzPiBtX3NraWFDYW52YXM7
CisgICAgT3duUHRyPFNrQ2FudmFzPiBtX3NraWFDYW52YXM7CiAjZWxpZiBQTEFURk9STShDRykK
ICAgICBPd25BcnJheVB0cjx1aW50OF90PiBtX3BpeGVsRGF0YTsKICNlbmRpZgpJbmRleDogU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vVHJhbnNwYXJlbmN5V2luLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9UcmFuc3BhcmVuY3lXaW4uY3BwCShyZXZpc2lvbiA4Mzg1OSkKKysrIFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1RyYW5zcGFyZW5jeVdpbi5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTQ5LDE0ICs0OSwxNCBAQCBuYW1lc3BhY2UgewogLy8gaW50by4gQnVmZmVycyBs
YXJnZXIgdGhhbiB0aGlzIHdpbGwgYmUgZGVzdHJveWVkIHdoZW4gd2UncmUgZG9uZSB3aXRoIHRo
ZW0uCiBjb25zdCBpbnQgbWF4Q2FjaGVkQnVmZmVyUGl4ZWxTaXplID0gNjU1MzY7CiAKLWlubGlu
ZSBza2lhOjpQbGF0Zm9ybUNhbnZhcyogY2FudmFzRm9yQ29udGV4dChjb25zdCBHcmFwaGljc0Nv
bnRleHQmIGNvbnRleHQpCitpbmxpbmUgU2tDYW52YXMqIGNhbnZhc0ZvckNvbnRleHQoY29uc3Qg
R3JhcGhpY3NDb250ZXh0JiBjb250ZXh0KQogewogICAgIHJldHVybiBjb250ZXh0LnBsYXRmb3Jt
Q29udGV4dCgpLT5jYW52YXMoKTsKIH0KIAogaW5saW5lIGNvbnN0IFNrQml0bWFwJiBiaXRtYXBG
b3JDb250ZXh0KGNvbnN0IEdyYXBoaWNzQ29udGV4dCYgY29udGV4dCkKIHsKLSAgICByZXR1cm4g
Y2FudmFzRm9yQ29udGV4dChjb250ZXh0KS0+Z2V0VG9wUGxhdGZvcm1EZXZpY2UoKS5hY2Nlc3NC
aXRtYXAoZmFsc2UpOworICAgIHJldHVybiBjYW52YXNGb3JDb250ZXh0KGNvbnRleHQpLT5nZXRU
b3BEZXZpY2UoKS0+YWNjZXNzQml0bWFwKGZhbHNlKTsKIH0KIAogdm9pZCBjb21wb3NpdGVUb0Nv
cHkoY29uc3QgR3JhcGhpY3NDb250ZXh0JiBzb3VyY2VMYXllcnMsCkBAIC00NjYsNyArNDY2LDcg
QEAgdm9pZCBUcmFuc3BhcmVuY3lXaW46OmNvbXBvc2l0ZVRleHRDb21wbwogICAgIGlmICghbV92
YWxpZExheWVyKQogICAgICAgICByZXR1cm47CiAKLSAgICBjb25zdCBTa0JpdG1hcCYgYml0bWFw
ID0gbV9sYXllckJ1ZmZlci0+Y29udGV4dCgpLT5wbGF0Zm9ybUNvbnRleHQoKS0+Y2FudmFzKCkt
PmdldFRvcFBsYXRmb3JtRGV2aWNlKCkuYWNjZXNzQml0bWFwKHRydWUpOworICAgIGNvbnN0IFNr
Qml0bWFwJiBiaXRtYXAgPSBtX2xheWVyQnVmZmVyLT5jb250ZXh0KCktPnBsYXRmb3JtQ29udGV4
dCgpLT5jYW52YXMoKS0+Z2V0VG9wRGV2aWNlKCktPmFjY2Vzc0JpdG1hcCh0cnVlKTsKICAgICBT
a0NvbG9yIHRleHRDb2xvciA9IG1fdGV4dENvbXBvc2l0ZUNvbG9yLnJnYigpOwogICAgIGZvciAo
aW50IHkgPSAwOyB5IDwgbV9sYXllclNpemUuaGVpZ2h0KCk7IHkrKykgewogICAgICAgICB1aW50
MzJfdCogcm93ID0gYml0bWFwLmdldEFkZHIzMigwLCB5KTsKQEAgLTUwMiw3ICs1MDIsNyBAQCB2
b2lkIFRyYW5zcGFyZW5jeVdpbjo6bWFrZUxheWVyT3BhcXVlKCkKICAgICAgICAgcmV0dXJuOwog
CiAgICAgU2tCaXRtYXAmIGJpdG1hcCA9IGNvbnN0X2Nhc3Q8U2tCaXRtYXAmPihtX2RyYXdDb250
ZXh0LT5wbGF0Zm9ybUNvbnRleHQoKS0+Ci0gICAgICAgIGNhbnZhcygpLT5nZXRUb3BQbGF0Zm9y
bURldmljZSgpLmFjY2Vzc0JpdG1hcCh0cnVlKSk7CisgICAgICAgIGNhbnZhcygpLT5nZXRUb3BE
ZXZpY2UoKS0+YWNjZXNzQml0bWFwKHRydWUpKTsKICAgICBmb3IgKGludCB5ID0gMDsgeSA8IG1f
bGF5ZXJTaXplLmhlaWdodCgpOyB5KyspIHsKICAgICAgICAgdWludDMyX3QqIHJvdyA9IGJpdG1h
cC5nZXRBZGRyMzIoMCwgeSk7CiAgICAgICAgIGZvciAoaW50IHggPSAwOyB4IDwgbV9sYXllclNp
emUud2lkdGgoKTsgeCsrKQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
c2tpYS9JbWFnZUJ1ZmZlclNraWEuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL3NraWEvSW1hZ2VCdWZmZXJTa2lhLmNwcAkocmV2aXNpb24gODM4NTkp
CisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9za2lhL0ltYWdlQnVmZmVyU2tp
YS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY2LDE5ICs2NiwyMSBAQCBJbWFnZUJ1ZmZlcjo6SW1h
Z2VCdWZmZXIoY29uc3QgSW50U2l6ZSYKICAgICA6IG1fZGF0YShzaXplKQogICAgICwgbV9zaXpl
KHNpemUpCiB7Ci0gICAgaWYgKCFtX2RhdGEubV9jYW52YXMuaW5pdGlhbGl6ZShzaXplLndpZHRo
KCksIHNpemUuaGVpZ2h0KCksIGZhbHNlKSkgeworICAgIFNrQ2FudmFzKiBjYW52YXMgPSBza2lh
OjpDcmVhdGVCaXRtYXBDYW52YXMoc2l6ZS53aWR0aCgpLCBzaXplLmhlaWdodCgpLCBmYWxzZSk7
CisgICAgaWYgKCFjYW52YXMpIHsKICAgICAgICAgc3VjY2VzcyA9IGZhbHNlOwogICAgICAgICBy
ZXR1cm47CiAgICAgfQogCi0gICAgbV9kYXRhLm1fcGxhdGZvcm1Db250ZXh0LnNldENhbnZhcygm
bV9kYXRhLm1fY2FudmFzKTsKKyAgICBtX2RhdGEubV9jYW52YXMgPSBjYW52YXM7CisgICAgbV9k
YXRhLm1fcGxhdGZvcm1Db250ZXh0LnNldENhbnZhcyhtX2RhdGEubV9jYW52YXMuZ2V0KCkpOwog
ICAgIG1fY29udGV4dC5zZXQobmV3IEdyYXBoaWNzQ29udGV4dCgmbV9kYXRhLm1fcGxhdGZvcm1D
b250ZXh0KSk7CiAgICAgbV9jb250ZXh0LT5wbGF0Zm9ybUNvbnRleHQoKS0+c2V0RHJhd2luZ1Rv
SW1hZ2VCdWZmZXIodHJ1ZSk7CiAKICAgICAvLyBNYWtlIHRoZSBiYWNrZ3JvdW5kIHRyYW5zcGFy
ZW50LiBJdCB3b3VsZCBiZSBuaWNlIGlmIHRoaXMgd2Fzbid0CiAgICAgLy8gcmVxdWlyZWQsIGJ1
dCB0aGUgY2FudmFzIGlzIGN1cnJlbnRseSBmaWxsZWQgd2l0aCB0aGUgbWFnaWMgdHJhbnNwYXJl
bmN5CiAgICAgLy8gY29sb3IuIENhbiB3ZSBoYXZlIGFub3RoZXIgd2F5IHRvIG1hbmFnZSB0aGlz
PwotICAgIG1fZGF0YS5tX2NhbnZhcy5kcmF3QVJHQigwLCAwLCAwLCAwLCBTa1hmZXJtb2RlOjpr
Q2xlYXJfTW9kZSk7CisgICAgbV9kYXRhLm1fY2FudmFzLT5kcmF3QVJHQigwLCAwLCAwLCAwLCBT
a1hmZXJtb2RlOjprQ2xlYXJfTW9kZSk7CiAgICAgc3VjY2VzcyA9IHRydWU7CiB9CiAKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3NraWEvSW1hZ2VTa2lhLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9za2lhL0ltYWdlU2tp
YS5jcHAJKHJldmlzaW9uIDgzODU5KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3Mvc2tpYS9JbWFnZVNraWEuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNjIsMTIgKzI2MiwxNyBA
QCBzdGF0aWMgdm9pZCBwYWludFNrQml0bWFwKFBsYXRmb3JtQ29udGV4CiAgICAgcGFpbnQuc2V0
QWxwaGEocGxhdGZvcm1Db250ZXh0LT5nZXROb3JtYWxpemVkQWxwaGEoKSk7CiAgICAgcGFpbnQu
c2V0TG9vcGVyKHBsYXRmb3JtQ29udGV4dC0+Z2V0RHJhd0xvb3BlcigpKTsKIAotICAgIHNraWE6
OlBsYXRmb3JtQ2FudmFzKiBjYW52YXMgPSBwbGF0Zm9ybUNvbnRleHQtPmNhbnZhcygpOworICAg
IFNrQ2FudmFzKiBjYW52YXMgPSBwbGF0Zm9ybUNvbnRleHQtPmNhbnZhcygpOwogCi0gICAgUmVz
YW1wbGluZ01vZGUgcmVzYW1wbGluZyA9IHBsYXRmb3JtQ29udGV4dC0+aXNQcmludGluZygpID8g
UkVTQU1QTEVfTk9ORSA6CisgICAgUmVzYW1wbGluZ01vZGUgcmVzYW1wbGluZzsKKyNpZiBFTkFC
TEUoU0tJQV9HUFUpCisgICAgcmVzYW1wbGluZyA9IFJFU0FNUExFX0xJTkVBUjsKKyNlbHNlCisg
ICAgcmVzYW1wbGluZyA9IHBsYXRmb3JtQ29udGV4dC0+cHJpbnRpbmcoKSA/IFJFU0FNUExFX05P
TkUgOgogICAgICAgICBjb21wdXRlUmVzYW1wbGluZ01vZGUocGxhdGZvcm1Db250ZXh0LCBiaXRt
YXAsIHNyY1JlY3Qud2lkdGgoKSwgc3JjUmVjdC5oZWlnaHQoKSwKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIFNrU2NhbGFyVG9GbG9hdChkZXN0UmVjdC53aWR0aCgpKSwKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIFNrU2NhbGFyVG9GbG9hdChkZXN0UmVjdC5oZWlnaHQoKSkp
OworI2VuZGlmCiAgICAgaWYgKHJlc2FtcGxpbmcgPT0gUkVTQU1QTEVfQVdFU09NRSkgewogICAg
ICAgICBkcmF3UmVzYW1wbGVkQml0bWFwKCpjYW52YXMsIHBhaW50LCBiaXRtYXAsIHNyY1JlY3Qs
IGRlc3RSZWN0KTsKICAgICB9IGVsc2UgewpAQCAtMzYzLDEzICszNjgsMTcgQEAgdm9pZCBJbWFn
ZTo6ZHJhd1BhdHRlcm4oR3JhcGhpY3NDb250ZXh0KgogCiAgICAgLy8gQ29tcHV0ZSB0aGUgcmVz
YW1wbGluZyBtb2RlLgogICAgIFJlc2FtcGxpbmdNb2RlIHJlc2FtcGxpbmc7Ci0gICAgaWYgKGNv
bnRleHQtPnBsYXRmb3JtQ29udGV4dCgpLT5pc1ByaW50aW5nKCkpCisjaWYgRU5BQkxFKFNLSUFf
R1BVKQorICAgIHJlc2FtcGxpbmcgPSBSRVNBTVBMRV9MSU5FQVI7CisjZWxzZQorICAgIGlmIChj
b250ZXh0LT5wbGF0Zm9ybUNvbnRleHQoKS0+cHJpbnRpbmcoKSkKICAgICAgIHJlc2FtcGxpbmcg
PSBSRVNBTVBMRV9MSU5FQVI7CiAgICAgZWxzZSB7CiAgICAgICByZXNhbXBsaW5nID0gY29tcHV0
ZVJlc2FtcGxpbmdNb2RlKGNvbnRleHQtPnBsYXRmb3JtQ29udGV4dCgpLCAqYml0bWFwLAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcmNSZWN0LndpZHRoKCksIHNy
Y1JlY3QuaGVpZ2h0KCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGRlc3RCaXRtYXBXaWR0aCwgZGVzdEJpdG1hcEhlaWdodCk7CiAgICAgfQorI2VuZGlmCiAKICAg
ICAvLyBMb2FkIHRoZSB0cmFuc2Zvcm0gV2ViS2l0IHJlcXVlc3RlZC4KICAgICBTa01hdHJpeCBt
YXRyaXgocGF0dGVyblRyYW5zZm9ybSk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9za2lhL1BsYXRmb3JtQ29udGV4dFNraWEuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3NraWEvUGxhdGZvcm1Db250ZXh0U2tpYS5jcHAJ
KHJldmlzaW9uIDgzODU5KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc2tp
YS9QbGF0Zm9ybUNvbnRleHRTa2lhLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjEzLDggKzIxMyw5
IEBAIFNrQ29sb3IgUGxhdGZvcm1Db250ZXh0U2tpYTo6U3RhdGU6OmFwcGwKIC8vIFBsYXRmb3Jt
Q29udGV4dFNraWEgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tCiAKIC8vIERhbmdlcjogY2FudmFzIGNhbiBiZSBOVUxMLgotUGxhdGZvcm1D
b250ZXh0U2tpYTo6UGxhdGZvcm1Db250ZXh0U2tpYShza2lhOjpQbGF0Zm9ybUNhbnZhcyogY2Fu
dmFzKQorUGxhdGZvcm1Db250ZXh0U2tpYTo6UGxhdGZvcm1Db250ZXh0U2tpYShTa0NhbnZhcyog
Y2FudmFzKQogICAgIDogbV9jYW52YXMoY2FudmFzKQorICAgICwgbV9wcmludGluZyhmYWxzZSkK
ICAgICAsIG1fZHJhd2luZ1RvSW1hZ2VCdWZmZXIoZmFsc2UpCiAgICAgLCBtX3VzZUdQVShmYWxz
ZSkKICNpZiBFTkFCTEUoQUNDRUxFUkFURURfMkRfQ0FOVkFTKQpAQCAtMjQwLDcgKzI0MSw3IEBA
IFBsYXRmb3JtQ29udGV4dFNraWE6On5QbGF0Zm9ybUNvbnRleHRTa2kKICNlbmRpZgogfQogCi12
b2lkIFBsYXRmb3JtQ29udGV4dFNraWE6OnNldENhbnZhcyhza2lhOjpQbGF0Zm9ybUNhbnZhcyog
Y2FudmFzKQordm9pZCBQbGF0Zm9ybUNvbnRleHRTa2lhOjpzZXRDYW52YXMoU2tDYW52YXMqIGNh
bnZhcykKIHsKICAgICBtX2NhbnZhcyA9IGNhbnZhczsKIH0KQEAgLTYwOSwyMSArNjEwLDEyIEBA
IGNvbnN0IFNrQml0bWFwKiBQbGF0Zm9ybUNvbnRleHRTa2lhOjpiaXQKICAgICByZXR1cm4gJm1f
Y2FudmFzLT5nZXREZXZpY2UoKS0+YWNjZXNzQml0bWFwKGZhbHNlKTsKIH0KIAotYm9vbCBQbGF0
Zm9ybUNvbnRleHRTa2lhOjppc1ByaW50aW5nKCkKLXsKLSNpZiBFTkFCTEUoU0tJQV9HUFUpCi0g
ICAgcmV0dXJuIHRydWU7Ci0jZWxzZQotICAgIHJldHVybiBtX2NhbnZhcy0+Z2V0VG9wUGxhdGZv
cm1EZXZpY2UoKS5Jc1ZlY3RvcmlhbCgpOwotI2VuZGlmCi19Ci0KIGJvb2wgUGxhdGZvcm1Db250
ZXh0U2tpYTo6aXNOYXRpdmVGb250UmVuZGVyaW5nQWxsb3dlZCgpCiB7CiAjaWYgRU5BQkxFKFNL
SUFfR1BVKQogICAgIHJldHVybiBmYWxzZTsKICNlbHNlCi0gICAgcmV0dXJuIG1fY2FudmFzLT5n
ZXRUb3BQbGF0Zm9ybURldmljZSgpLklzTmF0aXZlRm9udFJlbmRlcmluZ0FsbG93ZWQoKTsKKyAg
ICByZXR1cm4gc2tpYTo6U3VwcG9ydHNQbGF0Zm9ybVBhaW50KG1fY2FudmFzKTsKICNlbmRpZgog
fQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9za2lhL1BsYXRmb3Jt
Q29udGV4dFNraWEuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9za2lhL1BsYXRmb3JtQ29udGV4dFNraWEuaAkocmV2aXNpb24gODM4NTkpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9za2lhL1BsYXRmb3JtQ29udGV4dFNraWEuaAko
d29ya2luZyBjb3B5KQpAQCAtNzIsMTIgKzcyLDEyIEBAIGNsYXNzIFBsYXRmb3JtQ29udGV4dFNr
aWEgewogcHVibGljOgogICAgIC8vIEZvciBwcmludGluZywgdGhlcmUgc2hvdWxkbid0IGJlIGFu
eSBjYW52YXMuIGNhbnZhcyBjYW4gYmUgTlVMTC4gSWYgeW91CiAgICAgLy8gc3VwcGx5IGEgTlVM
TCBjYW52YXMsIHlvdSBjYW4gYWxzbyBjYWxsIHNldENhbnZhcyBsYXRlci4KLSAgICBQbGF0Zm9y
bUNvbnRleHRTa2lhKHNraWE6OlBsYXRmb3JtQ2FudmFzKik7CisgICAgUGxhdGZvcm1Db250ZXh0
U2tpYShTa0NhbnZhcyopOwogICAgIH5QbGF0Zm9ybUNvbnRleHRTa2lhKCk7CiAKICAgICAvLyBT
ZXRzIHRoZSBjYW52YXMgYXNzb2NpYXRlZCB3aXRoIHRoaXMgY29udGV4dC4gVXNlIHdoZW4gc3Vw
cGx5aW5nIE5VTEwKICAgICAvLyB0byB0aGUgY29uc3RydWN0b3IuCi0gICAgdm9pZCBzZXRDYW52
YXMoc2tpYTo6UGxhdGZvcm1DYW52YXMqKTsKKyAgICB2b2lkIHNldENhbnZhcyhTa0NhbnZhcyop
OwogCiAgICAgLy8gSWYgZmFsc2Ugd2UncmUgcmVuZGVyaW5nIHRvIGEgR3JhcGhpY3NDb250ZXh0
IGZvciBhIHdlYiBwYWdlLCBpZiBmYWxzZQogICAgIC8vIHdlJ3JlIG5vdCAoYXMgaXMgdGhlIGNh
c2Ugd2hlbiByZW5kZXJpbmcgdG8gYSBjYW52YXMgb2JqZWN0KS4KQEAgLTE0Nyw3ICsxNDcsNyBA
QCBwdWJsaWM6CiAgICAgU2tDb2xvciBlZmZlY3RpdmVTdHJva2VDb2xvcigpIGNvbnN0OwogCiAg
ICAgLy8gUmV0dXJucyB0aGUgY2FudmFzIHVzZWQgZm9yIHBhaW50aW5nLCBOT1QgZ3VhcmFudGVl
ZCB0byBiZSBub24tbnVsbC4KLSAgICBza2lhOjpQbGF0Zm9ybUNhbnZhcyogY2FudmFzKCkgeyBy
ZXR1cm4gbV9jYW52YXM7IH0KKyAgICBTa0NhbnZhcyogY2FudmFzKCkgeyByZXR1cm4gbV9jYW52
YXM7IH0KIAogICAgIEludGVycG9sYXRpb25RdWFsaXR5IGludGVycG9sYXRpb25RdWFsaXR5KCkg
Y29uc3Q7CiAgICAgdm9pZCBzZXRJbnRlcnBvbGF0aW9uUXVhbGl0eShJbnRlcnBvbGF0aW9uUXVh
bGl0eSBpbnRlcnBvbGF0aW9uUXVhbGl0eSk7CkBAIC0xNjMsNyArMTYzLDggQEAgcHVibGljOgog
ICAgIC8vIFJldHVybnMgaWYgdGhlIGNvbnRleHQgaXMgYSBwcmludGluZyBjb250ZXh0IGluc3Rl
YWQgb2YgYSBkaXNwbGF5CiAgICAgLy8gY29udGV4dC4gQml0bWFwIHNob3VsZG4ndCBiZSByZXNh
bXBsZWQgd2hlbiBwcmludGluZyB0byBrZWVwIHRoZSBiZXN0CiAgICAgLy8gcG9zc2libGUgcXVh
bGl0eS4KLSAgICBib29sIGlzUHJpbnRpbmcoKTsKKyAgICBib29sIHByaW50aW5nKCkgY29uc3Qg
eyByZXR1cm4gbV9wcmludGluZzsgfQorICAgIHZvaWQgc2V0UHJpbnRpbmcoYm9vbCBwKSB7IG1f
cHJpbnRpbmcgPSBwOyB9CiAKICAgICAvLyBSZXR1cm5zIGlmIHRoZSBjb250ZXh0IGFsbG93cyBy
ZW5kZXJpbmcgb2YgZm9udHMgdXNpbmcgbmF0aXZlIHBsYXRmb3JtCiAgICAgLy8gQVBJcy4gSWYg
ZmFsc2UgaXMgcmV0dXJuZWQgZm9udCByZW5kZXJpbmcgaXMgcGVyZm9ybWVkIHVzaW5nIHRoZSBz
a2lhCkBAIC0xODUsMTAgKzE4NiwxMCBAQCBwdWJsaWM6CiAgICAgR0xFUzJDYW52YXMqIGdwdUNh
bnZhcygpIGNvbnN0IHsgcmV0dXJuIDA7IH0KICNlbmRpZgogICAgIC8vIENhbGwgdGhlc2UgYmVm
b3JlIG1ha2luZyBhIGNhbGwgdGhhdCBtYW5pcHVsYXRlcyB0aGUgdW5kZXJseWluZwotICAgIC8v
IHNraWE6OlBsYXRmb3JtQ2FudmFzIG9yIFdlYkNvcmU6OkdMRVMyQ2FudmFzCisgICAgLy8gU2tD
YW52YXMgb3IgV2ViQ29yZTo6R0xFUzJDYW52YXMKICAgICB2b2lkIHByZXBhcmVGb3JTb2Z0d2Fy
ZURyYXcoKSBjb25zdDsKICAgICB2b2lkIHByZXBhcmVGb3JIYXJkd2FyZURyYXcoKSBjb25zdDsK
LSAgICAvLyBDYWxsIHRvIGZvcmNlIHRoZSBza2lhOjpQbGF0Zm9ybUNhbnZhcyB0byBjb250YWlu
IGFsbCByZW5kZXJpbmcgcmVzdWx0cy4KKyAgICAvLyBDYWxsIHRvIGZvcmNlIHRoZSBTa0NhbnZh
cyB0byBjb250YWluIGFsbCByZW5kZXJpbmcgcmVzdWx0cy4KICAgICB2b2lkIHN5bmNTb2Z0d2Fy
ZUNhbnZhcygpIGNvbnN0OwogICAgIHZvaWQgbWFya0RpcnR5UmVjdChjb25zdCBJbnRSZWN0JiBy
ZWN0KTsKIApAQCAtMjA1LDcgKzIwNiw3IEBAIHByaXZhdGU6CiAgICAgc3RydWN0IFN0YXRlOwog
CiAgICAgLy8gTlVMTCBpbmRpY2F0ZXMgcGFpbnRpbmcgaXMgZGlzYWJsZWQuIE5ldmVyIGRlbGV0
ZSB0aGlzIG9iamVjdC4KLSAgICBza2lhOjpQbGF0Zm9ybUNhbnZhcyogbV9jYW52YXM7CisgICAg
U2tDYW52YXMqIG1fY2FudmFzOwogCiAgICAgLy8gU3RhdGVzIHN0YWNrLiBFbmFibGVzIGxvY2Fs
IGRyYXdpbmcgc3RhdGUgY2hhbmdlIHdpdGggc2F2ZSgpL3Jlc3RvcmUoKQogICAgIC8vIGNhbGxz
LgpAQCAtMjE4LDYgKzIxOSw3IEBAIHByaXZhdGU6CiAgICAgLy8gVmFsdWVzIGFyZSB1c2VkIGlu
IEltYWdlU2tpYS5jcHAKICAgICBJbnRTaXplIG1faW1hZ2VSZXNhbXBsaW5nSGludFNyY1NpemU7
CiAgICAgRmxvYXRTaXplIG1faW1hZ2VSZXNhbXBsaW5nSGludERzdFNpemU7CisgICAgYm9vbCBt
X3ByaW50aW5nOwogICAgIGJvb2wgbV9kcmF3aW5nVG9JbWFnZUJ1ZmZlcjsKICAgICBib29sIG1f
dXNlR1BVOwogI2lmIEVOQUJMRShBQ0NFTEVSQVRFRF8yRF9DQU5WQVMpCkluZGV4OiBTb3VyY2Uv
V2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L2No
cm9taXVtL0NoYW5nZUxvZwkocmV2aXNpb24gODM4NjMpCisrKyBTb3VyY2UvV2ViS2l0L2Nocm9t
aXVtL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDIwIEBACisyMDExLTA0LTE0
ICBBbG9rIFByaXlhZGFyc2hpICA8YWxva3BAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFJldmll
d2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFJlbW92ZSBkZXBlbmRlbmN5IG9uIGNo
cm9taXVtIHNraWE6OlBsYXRmb3JtQ2FudmFzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD01NzU2MworCisgICAgICAgICogcHVibGljL1dlYkNhbnZhcy5o
OgorICAgICAgICAqIHNyYy9XZWJGcmFtZUltcGwuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJG
cmFtZUltcGw6OnByaW50UGFnZSk6CisgICAgICAgICogdGVzdHMvVHJhbnNwYXJlbmN5V2luVGVz
dC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpkcmF3TmF0aXZlUmVjdCk6CisgICAgICAgIChXZWJD
b3JlOjpnZXRQaXhlbEF0KToKKyAgICAgICAgKFdlYkNvcmU6OmNsZWFyVG9wTGF5ZXJBbHBoYUNo
YW5uZWwpOgorICAgICAgICAoV2ViQ29yZTo6Y2xlYXJUb3BMYXllckFscGhhUGl4ZWwpOgorICAg
ICAgICAoV2ViQ29yZTo6VEVTVCk6CisKIDIwMTEtMDQtMTQgIEJpbGwgQnVkZ2UgIDxiYnVkZ2VA
Y2hyb21pdW0ub3JnPgogCiAgICAgICAgIFJldmlld2VkIGJ5IERhcmluIEZpc2hlci4KSW5kZXg6
IFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYkNhbnZhcy5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYkNhbnZhcy5oCShyZXZpc2lvbiA4Mzg1
OSkKKysrIFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vcHVibGljL1dlYkNhbnZhcy5oCSh3b3JraW5n
IGNvcHkpCkBAIC0zNCw3ICszNCw3IEBACiAjaW5jbHVkZSAiV2ViQ29tbW9uLmgiCiAKICNpZiBX
RUJLSVRfVVNJTkdfU0tJQQotbmFtZXNwYWNlIHNraWEgeyBjbGFzcyBQbGF0Zm9ybUNhbnZhczsg
fQorY2xhc3MgU2tDYW52YXM7CiAjZWxpZiBXRUJLSVRfVVNJTkdfQ0cKIHN0cnVjdCBDR0NvbnRl
eHQ7CiAjZW5kaWYKQEAgLTQyLDcgKzQyLDcgQEAgc3RydWN0IENHQ29udGV4dDsKIG5hbWVzcGFj
ZSBXZWJLaXQgewogCiAjaWYgV0VCS0lUX1VTSU5HX1NLSUEKLXR5cGVkZWYgc2tpYTo6UGxhdGZv
cm1DYW52YXMgV2ViQ2FudmFzOwordHlwZWRlZiBTa0NhbnZhcyBXZWJDYW52YXM7CiAjZWxpZiBX
RUJLSVRfVVNJTkdfQ0cKIHR5cGVkZWYgc3RydWN0IENHQ29udGV4dCBXZWJDYW52YXM7CiAjZWxz
ZQpJbmRleDogU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViRnJhbWVJbXBsLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJGcmFtZUltcGwuY3BwCShy
ZXZpc2lvbiA4Mzg1OSkKKysrIFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYkZyYW1lSW1w
bC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE0MDksNyArMTQwOSwxMyBAQCBmbG9hdCBXZWJGcmFt
ZUltcGw6OnByaW50UGFnZShpbnQgcGFnZSwKICAgICAgICAgcmV0dXJuIDA7CiAgICAgfQogCi0g
ICAgcmV0dXJuIG1fcHJpbnRDb250ZXh0LT5zcG9vbFBhZ2UoR3JhcGhpY3NDb250ZXh0QnVpbGRl
cihjYW52YXMpLmNvbnRleHQoKSwgcGFnZSk7CisgICAgR3JhcGhpY3NDb250ZXh0QnVpbGRlciBi
dWlsZGVyKGNhbnZhcyk7CisgICAgR3JhcGhpY3NDb250ZXh0JiBnYyA9IGJ1aWxkZXIuY29udGV4
dCgpOworI2lmIFdFQktJVF9VU0lOR19TS0lBCisgICAgZ2MucGxhdGZvcm1Db250ZXh0KCktPnNl
dFByaW50aW5nKHRydWUpOworI2VuZGlmCisKKyAgICByZXR1cm4gbV9wcmludENvbnRleHQtPnNw
b29sUGFnZShnYywgcGFnZSk7CiB9CiAKIHZvaWQgV2ViRnJhbWVJbXBsOjpwcmludEVuZCgpCklu
ZGV4OiBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL1RyYW5zcGFyZW5jeVdpblRlc3QuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvVHJhbnNwYXJlbmN5
V2luVGVzdC5jcHAJKHJldmlzaW9uIDgzODU5KQorKysgU291cmNlL1dlYktpdC9jaHJvbWl1bS90
ZXN0cy9UcmFuc3BhcmVuY3lXaW5UZXN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTAsOCArNTAs
OCBAQCBzdGF0aWMgRmxvYXRSZWN0IFJFQ1RUb0Zsb2F0UmVjdChjb25zdCBSCiBzdGF0aWMgdm9p
ZCBkcmF3TmF0aXZlUmVjdChHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBpbnQgeCwgaW50IHksIGludCB3LCBpbnQgaCkKIHsKLSAgICBza2lhOjpQ
bGF0Zm9ybUNhbnZhcyogY2FudmFzID0gY29udGV4dC0+cGxhdGZvcm1Db250ZXh0KCktPmNhbnZh
cygpOwotICAgIEhEQyBkYyA9IGNhbnZhcy0+YmVnaW5QbGF0Zm9ybVBhaW50KCk7CisgICAgU2tD
YW52YXMqIGNhbnZhcyA9IGNvbnRleHQtPnBsYXRmb3JtQ29udGV4dCgpLT5jYW52YXMoKTsKKyAg
ICBIREMgZGMgPSBza2lhOjpCZWdpblBsYXRmb3JtUGFpbnQoY2FudmFzKTsKIAogICAgIFJFQ1Qg
aW5uZXJSYzsKICAgICBpbm5lclJjLmxlZnQgPSB4OwpAQCAtNjEsMTMgKzYxLDEyIEBAIHN0YXRp
YyB2b2lkIGRyYXdOYXRpdmVSZWN0KEdyYXBoaWNzQ29udGUKICAgICBGaWxsUmVjdChkYywgJmlu
bmVyUmMsCiAgICAgICAgICAgICAgcmVpbnRlcnByZXRfY2FzdDxIQlJVU0g+KEdldFN0b2NrT2Jq
ZWN0KEJMQUNLX0JSVVNIKSkpOwogCi0gICAgY2FudmFzLT5lbmRQbGF0Zm9ybVBhaW50KCk7Cisg
ICAgc2tpYTo6RW5kUGxhdGZvcm1QYWludChjYW52YXMpOwogfQogCiBzdGF0aWMgQ29sb3IgZ2V0
UGl4ZWxBdChHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIGludCB4LCBpbnQgeSkKIHsKLSAgICBj
b25zdCBTa0JpdG1hcCYgYml0bWFwID0gY29udGV4dC0+cGxhdGZvcm1Db250ZXh0KCktPmNhbnZh
cygpLT4KLSAgICAgICAgZ2V0VG9wUGxhdGZvcm1EZXZpY2UoKS5hY2Nlc3NCaXRtYXAoZmFsc2Up
OworICAgIGNvbnN0IFNrQml0bWFwJiBiaXRtYXAgPSBjb250ZXh0LT5wbGF0Zm9ybUNvbnRleHQo
KS0+Y2FudmFzKCktPmdldFRvcERldmljZSgpLT5hY2Nlc3NCaXRtYXAoZmFsc2UpOwogICAgIHJl
dHVybiBDb2xvcigqcmVpbnRlcnByZXRfY2FzdDxjb25zdCBSR0JBMzIqPihiaXRtYXAuZ2V0QWRk
cjMyKHgsIHkpKSk7CiB9CiAKQEAgLTc1LDggKzc0LDcgQEAgc3RhdGljIENvbG9yIGdldFBpeGVs
QXQoR3JhcGhpY3NDb250ZXh0KgogLy8gV2luZG93cyBtZXNzaW5nIGl0IHVwLgogc3RhdGljIHZv
aWQgY2xlYXJUb3BMYXllckFscGhhQ2hhbm5lbChHcmFwaGljc0NvbnRleHQqIGNvbnRleHQpCiB7
Ci0gICAgU2tCaXRtYXAmIGJpdG1hcCA9IGNvbnN0X2Nhc3Q8U2tCaXRtYXAmPihjb250ZXh0LT5w
bGF0Zm9ybUNvbnRleHQoKS0+Ci0gICAgICAgIGNhbnZhcygpLT5nZXRUb3BQbGF0Zm9ybURldmlj
ZSgpLmFjY2Vzc0JpdG1hcChmYWxzZSkpOworICAgIFNrQml0bWFwJiBiaXRtYXAgPSBjb25zdF9j
YXN0PFNrQml0bWFwJj4oY29udGV4dC0+cGxhdGZvcm1Db250ZXh0KCktPmNhbnZhcygpLT5nZXRU
b3BEZXZpY2UoKS0+YWNjZXNzQml0bWFwKGZhbHNlKSk7CiAgICAgZm9yIChpbnQgeSA9IDA7IHkg
PCBiaXRtYXAuaGVpZ2h0KCk7IHkrKykgewogICAgICAgICB1aW50MzJfdCogcm93ID0gYml0bWFw
LmdldEFkZHIzMigwLCB5KTsKICAgICAgICAgZm9yIChpbnQgeCA9IDA7IHggPCBiaXRtYXAud2lk
dGgoKTsgeCsrKQpAQCAtODcsOCArODUsNyBAQCBzdGF0aWMgdm9pZCBjbGVhclRvcExheWVyQWxw
aGFDaGFubmVsKEdyCiAvLyBDbGVhcnMgdGhlIGFscGhhIGNoYW5uZWwgb24gdGhlIHNwZWNpZmll
ZCBwaXhlbC4KIHN0YXRpYyB2b2lkIGNsZWFyVG9wTGF5ZXJBbHBoYVBpeGVsKEdyYXBoaWNzQ29u
dGV4dCogY29udGV4dCwgaW50IHgsIGludCB5KQogewotICAgIFNrQml0bWFwJiBiaXRtYXAgPSBj
b25zdF9jYXN0PFNrQml0bWFwJj4oY29udGV4dC0+cGxhdGZvcm1Db250ZXh0KCktPgotICAgICAg
ICBjYW52YXMoKS0+Z2V0VG9wUGxhdGZvcm1EZXZpY2UoKS5hY2Nlc3NCaXRtYXAoZmFsc2UpKTsK
KyAgICBTa0JpdG1hcCYgYml0bWFwID0gY29uc3RfY2FzdDxTa0JpdG1hcCY+KGNvbnRleHQtPnBs
YXRmb3JtQ29udGV4dCgpLT5jYW52YXMoKS0+Z2V0VG9wRGV2aWNlKCktPmFjY2Vzc0JpdG1hcChm
YWxzZSkpOwogICAgICpiaXRtYXAuZ2V0QWRkcjMyKHgsIHkpICY9IDB4MDBGRkZGRkY7CiB9CiAK
QEAgLTU1OSw5ICs1NTYsNyBAQCBURVNUKFRyYW5zcGFyZW5jeVdpbiwgU2NhbGUpCiAgICAgICAg
IC8vIHRoZSBoZWxwZXIgZ29lcyBvdXQgb2Ygc2NvcGUuIFdlIGRvbid0IHdhbnQgdG8gY2FsbAog
ICAgICAgICAvLyBjbGVhclRvcExheWVyQWxwaGFDaGFubmVsIGJlY2F1c2UgdGhhdCB3aWxsIGFj
dHVhbGx5IGNsZWFyIHRoZSB3aG9sZQogICAgICAgICAvLyBjYW52YXMgKHNpbmNlIHdlIGhhdmUg
bm8gZXh0cmEgbGF5ZXIhKS4KLSAgICAgICAgU2tCaXRtYXAmIGJpdG1hcCA9IGNvbnN0X2Nhc3Q8
U2tCaXRtYXAmPihoZWxwZXIuY29udGV4dCgpLT4KLSAgICAgICAgICAgIHBsYXRmb3JtQ29udGV4
dCgpLT5jYW52YXMoKS0+Z2V0VG9wUGxhdGZvcm1EZXZpY2UoKS4KLSAgICAgICAgICAgIGFjY2Vz
c0JpdG1hcChmYWxzZSkpOworICAgICAgICBTa0JpdG1hcCYgYml0bWFwID0gY29uc3RfY2FzdDxT
a0JpdG1hcCY+KGhlbHBlci5jb250ZXh0KCktPnBsYXRmb3JtQ29udGV4dCgpLT5jYW52YXMoKS0+
Z2V0VG9wRGV2aWNlKCktPmFjY2Vzc0JpdG1hcChmYWxzZSkpOwogICAgICAgICAqYml0bWFwLmdl
dEFkZHIzMigyLCAyKSAmPSAweDAwRkZGRkZGOwogICAgICAgICBoZWxwZXIuY29tcG9zaXRlKCk7
CiAgICAgfQpJbmRleDogVG9vbHMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL0NoYW5n
ZUxvZwkocmV2aXNpb24gODM4NjMpCisrKyBUb29scy9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkK
QEAgLTEsMyArMSwyNCBAQAorMjAxMS0wNC0xNCAgQWxvayBQcml5YWRhcnNoaSAgPGFsb2twQGNo
cm9taXVtLm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAg
ICAgICBSZW1vdmUgZGVwZW5kZW5jeSBvbiBjaHJvbWl1bSBza2lhOjpQbGF0Zm9ybUNhbnZhcwor
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NTc1NjMKKwor
ICAgICAgICAqIER1bXBSZW5kZXJUcmVlL2Nocm9taXVtL1Rlc3RTaGVsbC5jcHA6CisgICAgICAg
IChtYWtlQ2FudmFzT3BhcXVlKToKKyAgICAgICAgKFRlc3RTaGVsbDo6ZHVtcEltYWdlKToKKyAg
ICAgICAgKiBEdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9UZXN0U2hlbGwuaDoKKyAgICAgICAgKiBE
dW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9XZWJUaGVtZUNvbnRyb2xEUlRXaW4uY3BwOgorICAgICAg
ICAoV2ViVGhlbWVDb250cm9sRFJUV2luOjpXZWJUaGVtZUNvbnRyb2xEUlRXaW4pOgorICAgICAg
ICAoV2ViVGhlbWVDb250cm9sRFJUV2luOjpkcmF3KToKKyAgICAgICAgKFdlYlRoZW1lQ29udHJv
bERSVFdpbjo6ZHJhd1RleHRGaWVsZCk6CisgICAgICAgIChXZWJUaGVtZUNvbnRyb2xEUlRXaW46
OmRyYXdQcm9ncmVzc0Jhcik6CisgICAgICAgICogRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vV2Vi
VGhlbWVDb250cm9sRFJUV2luLmg6CisgICAgICAgICogRHVtcFJlbmRlclRyZWUvY2hyb21pdW0v
V2ViVmlld0hvc3QuY3BwOgorICAgICAgICAoV2ViVmlld0hvc3Q6OmNhbnZhcyk6CisgICAgICAg
ICogRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vV2ViVmlld0hvc3QuaDoKKwogMjAxMS0wNC0xNCAg
VmljdG9yaWEgS2lyc3QgIDx2cmtAZ29vZ2xlLmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBieSBK
YW1lcyBSb2JpbnNvbi4KSW5kZXg6IFRvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9taXVtL1Rlc3RT
aGVsbC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vVGVz
dFNoZWxsLmNwcAkocmV2aXNpb24gODM4NTkpCisrKyBUb29scy9EdW1wUmVuZGVyVHJlZS9jaHJv
bWl1bS9UZXN0U2hlbGwuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01MCw3ICs1MCw2IEBACiAjaW5j
bHVkZSAiV2ViVVJMUmVzcG9uc2UuaCIKICNpbmNsdWRlICJXZWJWaWV3LmgiCiAjaW5jbHVkZSAi
V2ViVmlld0hvc3QuaCIKLSNpbmNsdWRlICJza2lhL2V4dC9iaXRtYXBfcGxhdGZvcm1fZGV2aWNl
LmgiCiAjaW5jbHVkZSAic2tpYS9leHQvcGxhdGZvcm1fY2FudmFzLmgiCiAjaW5jbHVkZSAid2Vi
a2l0L3N1cHBvcnQvd2Via2l0X3N1cHBvcnQuaCIKICNpbmNsdWRlICJ3ZWJraXQvc3VwcG9ydC93
ZWJraXRfc3VwcG9ydF9nZnguaCIKQEAgLTc3LDYgKzc2LDIxIEBAIHN0YXRpYyBjb25zdCBjaGFy
IGZpbGVUZXN0UHJlZml4W10gPSAiKGYKIHN0YXRpYyBjb25zdCBjaGFyIGRhdGFVcmxQYXR0ZXJu
W10gPSAiZGF0YToiOwogc3RhdGljIGNvbnN0IHN0cmluZzo6c2l6ZV90eXBlIGRhdGFVcmxQYXR0
ZXJuU2l6ZSA9IHNpemVvZihkYXRhVXJsUGF0dGVybikgLSAxOwogCisvLyBGSVhNRTogTW92ZSB0
aGlzIHRvIGEgY29tbW9uIHBsYWNlIHNvIHRoYXQgaXQgY2FuIGJlIHNoYXJlZCB3aXRoCisvLyBX
ZWJDb3JlOjpUcmFuc3BhcmVuY3lXaW46Om1ha2VMYXllck9wYXF1ZSgpLgorc3RhdGljIHZvaWQg
bWFrZUNhbnZhc09wYXF1ZShTa0NhbnZhcyogY2FudmFzKQoreworICAgIGNvbnN0IFNrQml0bWFw
JiBiaXRtYXAgPSBjYW52YXMtPmdldFRvcERldmljZSgpLT5hY2Nlc3NCaXRtYXAodHJ1ZSk7Cisg
ICAgQVNTRVJUKGJpdG1hcC5jb25maWcoKSA9PSBTa0JpdG1hcDo6a0FSR0JfODg4OF9Db25maWcp
OworCisgICAgU2tBdXRvTG9ja1BpeGVscyBsb2NrKGJpdG1hcCk7CisgICAgZm9yIChpbnQgeSA9
IDA7IHkgPCBiaXRtYXAuaGVpZ2h0KCk7IHkrKykgeworICAgICAgICB1aW50MzJfdCogcm93ID0g
Yml0bWFwLmdldEFkZHIzMigwLCB5KTsKKyAgICAgICAgZm9yIChpbnQgeCA9IDA7IHggPCBiaXRt
YXAud2lkdGgoKTsgeCsrKQorICAgICAgICAgICAgcm93W3hdIHw9IDB4RkYwMDAwMDA7IC8vIFNl
dCBhbHBoYSBiaXRzIHRvIDEuCisgICAgfQorfQorCiBUZXN0U2hlbGw6OlRlc3RTaGVsbChib29s
IHRlc3RTaGVsbE1vZGUpCiAgICAgOiBtX3Rlc3RJc1BlbmRpbmcoZmFsc2UpCiAgICAgLCBtX3Rl
c3RJc1ByZXBhcmluZyhmYWxzZSkKQEAgLTUxNiwxNCArNTMwLDggQEAgdm9pZCBUZXN0U2hlbGw6
OmR1bXAoKQogICAgIGZmbHVzaChzdGRlcnIpOwogfQogCi12b2lkIFRlc3RTaGVsbDo6ZHVtcElt
YWdlKHNraWE6OlBsYXRmb3JtQ2FudmFzKiBjYW52YXMpIGNvbnN0Cit2b2lkIFRlc3RTaGVsbDo6
ZHVtcEltYWdlKFNrQ2FudmFzKiBjYW52YXMpIGNvbnN0CiB7Ci0gICAgc2tpYTo6Qml0bWFwUGxh
dGZvcm1EZXZpY2UmIGRldmljZSA9Ci0gICAgICAgIHN0YXRpY19jYXN0PHNraWE6OkJpdG1hcFBs
YXRmb3JtRGV2aWNlJj4oY2FudmFzLT5nZXRUb3BQbGF0Zm9ybURldmljZSgpKTsKLSAgICBjb25z
dCBTa0JpdG1hcCYgc291cmNlQml0bWFwID0gZGV2aWNlLmFjY2Vzc0JpdG1hcChmYWxzZSk7Ci0K
LSAgICBTa0F1dG9Mb2NrUGl4ZWxzIHNvdXJjZUJpdG1hcExvY2soc291cmNlQml0bWFwKTsKLQog
ICAgIC8vIEZpeCB0aGUgYWxwaGEuIFRoZSBleHBlY3RlZCBQTkdzIG9uIE1hYyBoYXZlIGFuIGFs
cGhhIGNoYW5uZWwsIHNvIHdlIHdhbnQKICAgICAvLyB0byBrZWVwIGl0LiBPbiBXaW5kb3dzLCB0
aGUgYWxwaGEgY2hhbm5lbCBpcyB3cm9uZyBzaW5jZSB0ZXh0L2Zvcm0gY29udHJvbAogICAgIC8v
IGRyYXdpbmcgbWF5IGhhdmUgZXJhc2VkIGl0IGluIGEgZmV3IHBsYWNlcy4gU28gb24gV2luZG93
cyB3ZSBmb3JjZSBpdCB0bwpAQCAtNTMzLDkgKzU0MSwxMiBAQCB2b2lkIFRlc3RTaGVsbDo6ZHVt
cEltYWdlKHNraWE6OlBsYXRmb3JtCiAgICAgYm9vbCBkaXNjYXJkVHJhbnNwYXJlbmN5ID0gZmFs
c2U7CiAjZWxzZQogICAgIGJvb2wgZGlzY2FyZFRyYW5zcGFyZW5jeSA9IHRydWU7Ci0gICAgZGV2
aWNlLm1ha2VPcGFxdWUoMCwgMCwgc291cmNlQml0bWFwLndpZHRoKCksIHNvdXJjZUJpdG1hcC5o
ZWlnaHQoKSk7CisgICAgbWFrZUNhbnZhc09wYXF1ZShjYW52YXMpOwogI2VuZGlmCiAKKyAgICBj
b25zdCBTa0JpdG1hcCYgc291cmNlQml0bWFwID0gY2FudmFzLT5nZXRUb3BEZXZpY2UoKS0+YWNj
ZXNzQml0bWFwKGZhbHNlKTsKKyAgICBTa0F1dG9Mb2NrUGl4ZWxzIHNvdXJjZUJpdG1hcExvY2so
c291cmNlQml0bWFwKTsKKwogICAgIC8vIENvbXB1dGUgTUQ1IHN1bS4KICAgICBNRDUgZGlnZXN0
ZXI7CiAgICAgVmVjdG9yPHVpbnQ4X3QsIDE2PiBkaWdlc3RWYWx1ZTsKSW5kZXg6IFRvb2xzL0R1
bXBSZW5kZXJUcmVlL2Nocm9taXVtL1Rlc3RTaGVsbC5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL0R1
bXBSZW5kZXJUcmVlL2Nocm9taXVtL1Rlc3RTaGVsbC5oCShyZXZpc2lvbiA4Mzg1OSkKKysrIFRv
b2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9taXVtL1Rlc3RTaGVsbC5oCSh3b3JraW5nIGNvcHkpCkBA
IC01NCw5ICs1NCw2IEBAIGNsYXNzIFdlYk5vdGlmaWNhdGlvblByZXNlbnRlcjsKIGNsYXNzIFdl
YlZpZXc7CiBjbGFzcyBXZWJVUkw7CiB9Ci1uYW1lc3BhY2Ugc2tpYSB7Ci1jbGFzcyBQbGF0Zm9y
bUNhbnZhczsKLX0KIAogY2xhc3MgRFJURGV2VG9vbHNBZ2VudDsKIGNsYXNzIERSVERldlRvb2xz
Q2FsbEFyZ3M7CkBAIC0xODIsNyArMTc5LDcgQEAgcHJpdmF0ZToKICAgICB2b2lkIHJlc2V0V2Vi
U2V0dGluZ3MoV2ViS2l0OjpXZWJWaWV3Jik7CiAgICAgdm9pZCBkdW1wKCk7CiAgICAgc3RkOjpz
dHJpbmcgZHVtcEFsbEJhY2tGb3J3YXJkTGlzdHMoKTsKLSAgICB2b2lkIGR1bXBJbWFnZShza2lh
OjpQbGF0Zm9ybUNhbnZhcyopIGNvbnN0OworICAgIHZvaWQgZHVtcEltYWdlKFNrQ2FudmFzKikg
Y29uc3Q7CiAKICAgICBib29sIG1fdGVzdElzUGVuZGluZzsKICAgICBib29sIG1fdGVzdElzUHJl
cGFyaW5nOwpJbmRleDogVG9vbHMvRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vV2ViVGhlbWVDb250
cm9sRFJUV2luLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1
bS9XZWJUaGVtZUNvbnRyb2xEUlRXaW4uY3BwCShyZXZpc2lvbiA4Mzg1OSkKKysrIFRvb2xzL0R1
bXBSZW5kZXJUcmVlL2Nocm9taXVtL1dlYlRoZW1lQ29udHJvbERSVFdpbi5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTQ2LDcgKzQ2LDYgQEAKICNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgogCiB1
c2luZyBuYW1lc3BhY2Ugc3RkOwotdXNpbmcgbmFtZXNwYWNlIHNraWE7CiAKIHN0YXRpYyBjb25z
dCBTa0NvbG9yIGVkZ2VDb2xvciAgICAgPSBTS19Db2xvckJMQUNLOwogc3RhdGljIGNvbnN0IFNr
Q29sb3IgcmVhZE9ubHlDb2xvciA9IFNrQ29sb3JTZXRSR0IoMHhlOSwgMHhjMiwgMHhhNik7CkBA
IC05Myw3ICs5Miw3IEBAIHN0YXRpYyBTa0lSZWN0IHZhbGlkYXRlKGNvbnN0IFNrSVJlY3QmIHIK
IAogLy8gV2ViVGhlbWVDb250cm9sRFJUV2luCiAKLVdlYlRoZW1lQ29udHJvbERSVFdpbjo6V2Vi
VGhlbWVDb250cm9sRFJUV2luKFBsYXRmb3JtQ2FudmFzKiBjYW52YXMsCitXZWJUaGVtZUNvbnRy
b2xEUlRXaW46OldlYlRoZW1lQ29udHJvbERSVFdpbihTa0NhbnZhcyogY2FudmFzLAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgU2tJUmVjdCYgaXJl
Y3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUeXBlIGN0
eXBlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3RhdGUg
Y3N0YXRlKQpAQCAtMzA0LDcgKzMwMyw3IEBAIHZvaWQgV2ViVGhlbWVDb250cm9sRFJUV2luOjpk
cmF3KCkKICAgICAvLyBJbmRlbnRzIGZvciB0aGUgdGhlIHNsaWRlciB0cmFjay4KICAgICBjb25z
dCBpbnQgc2xpZGVySW5kZW50ID0gMjsKIAotICAgIG1fY2FudmFzLT5iZWdpblBsYXRmb3JtUGFp
bnQoKTsKKyAgICBza2lhOjpCZWdpblBsYXRmb3JtUGFpbnQobV9jYW52YXMpOwogCiAgICAgc3dp
dGNoIChtX3R5cGUpIHsKICAgICBjYXNlIFVua25vd25UeXBlOgpAQCAtNDc1LDcgKzQ3NCw3IEBA
IHZvaWQgV2ViVGhlbWVDb250cm9sRFJUV2luOjpkcmF3KCkKICAgICB9CiAKICAgICBtYXJrU3Rh
dGUoKTsKLSAgICBtX2NhbnZhcy0+ZW5kUGxhdGZvcm1QYWludCgpOworICAgIHNraWE6OkVuZFBs
YXRmb3JtUGFpbnQobV9jYW52YXMpOwogfQogCiAvLyBCZWNhdXNlIHJlbmRlcmluZyBhIHRleHQg
ZmllbGQgaXMgZGVwZW5kZW50IG9uIGlucHV0CkBAIC00ODUsNyArNDg0LDcgQEAgdm9pZCBXZWJU
aGVtZUNvbnRyb2xEUlRXaW46OmRyYXdUZXh0RmllbAogewogICAgIFNrUGFpbnQgcGFpbnQ7CiAK
LSAgICBtX2NhbnZhcy0+YmVnaW5QbGF0Zm9ybVBhaW50KCk7CisgICAgc2tpYTo6QmVnaW5QbGF0
Zm9ybVBhaW50KG1fY2FudmFzKTsKICAgICBpZiAoZmlsbENvbnRlbnRBcmVhKSB7CiAgICAgICAg
IHBhaW50LnNldENvbG9yKGNvbG9yKTsKICAgICAgICAgcGFpbnQuc2V0U3R5bGUoU2tQYWludDo6
a0ZpbGxfU3R5bGUpOwpAQCAtNDk4LDE0ICs0OTcsMTQgQEAgdm9pZCBXZWJUaGVtZUNvbnRyb2xE
UlRXaW46OmRyYXdUZXh0RmllbAogICAgIH0KIAogICAgIG1hcmtTdGF0ZSgpOwotICAgIG1fY2Fu
dmFzLT5lbmRQbGF0Zm9ybVBhaW50KCk7CisgICAgc2tpYTo6RW5kUGxhdGZvcm1QYWludChtX2Nh
bnZhcyk7CiB9CiAKIHZvaWQgV2ViVGhlbWVDb250cm9sRFJUV2luOjpkcmF3UHJvZ3Jlc3NCYXIo
Y29uc3QgU2tJUmVjdCYgZmlsbFJlY3QpCiB7CiAgICAgU2tQYWludCBwYWludDsKIAotICAgIG1f
Y2FudmFzLT5iZWdpblBsYXRmb3JtUGFpbnQoKTsKKyAgICBza2lhOjpCZWdpblBsYXRmb3JtUGFp
bnQobV9jYW52YXMpOwogICAgIHBhaW50LnNldENvbG9yKG1fYmdDb2xvcik7CiAgICAgcGFpbnQu
c2V0U3R5bGUoU2tQYWludDo6a0ZpbGxfU3R5bGUpOwogICAgIG1fY2FudmFzLT5kcmF3SVJlY3Qo
bV9pcmVjdCwgcGFpbnQpOwpAQCAtNTE4LDYgKzUxNyw2IEBAIHZvaWQgV2ViVGhlbWVDb250cm9s
RFJUV2luOjpkcmF3UHJvZ3Jlc3MKICAgICBtX2NhbnZhcy0+ZHJhd0lSZWN0KHRvZmlsbCwgcGFp
bnQpOwogCiAgICAgbWFya1N0YXRlKCk7Ci0gICAgbV9jYW52YXMtPmVuZFBsYXRmb3JtUGFpbnQo
KTsKKyAgICBza2lhOjpFbmRQbGF0Zm9ybVBhaW50KG1fY2FudmFzKTsKIH0KIApJbmRleDogVG9v
bHMvRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vV2ViVGhlbWVDb250cm9sRFJUV2luLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gVG9vbHMvRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vV2ViVGhlbWVDb250cm9sRFJU
V2luLmgJKHJldmlzaW9uIDgzODU5KQorKysgVG9vbHMvRHVtcFJlbmRlclRyZWUvY2hyb21pdW0v
V2ViVGhlbWVDb250cm9sRFJUV2luLmgJKHdvcmtpbmcgY29weSkKQEAgLTEyMCwxMiArMTIwLDkg
QEAgcHVibGljOgogICAgICAgICBQcm9ncmVzc0JhclR5cGUKICAgICB9OwogCi0gICAgLy8gY2Fu
dmFzIGlzIHRoZSBjYW52YXMgdG8gZHJhdyBvbnRvLCBhbmQgcmVjdCBnaXZlcyB0aGUgc2l6ZSBv
ZiB0aGUKLSAgICAvLyBjb250cm9sLiBjdHlwZSBhbmQgY3N0YXRlIHNwZWNpZnkgdGhlIHR5cGUg
YW5kIHN0YXRlIG9mIHRoZSBjb250cm9sLgotICAgIFdlYlRoZW1lQ29udHJvbERSVFdpbihza2lh
OjpQbGF0Zm9ybUNhbnZhcyogY2FudmFzLAotICAgICAgICAgICAgICAgICAgICAgICAgICBjb25z
dCBTa0lSZWN0JiByZWN0LAotICAgICAgICAgICAgICAgICAgICAgICAgICBUeXBlIGN0eXBlLAot
ICAgICAgICAgICAgICAgICAgICAgICAgICBTdGF0ZSBjc3RhdGUpOworICAgIC8vIENvbnN0cnVj
dHMgYSBjb250cm9sIG9mIHRoZSBnaXZlbiBzaXplLCB0eXBlIGFuZCBzdGF0ZSB0byBkcmF3Cisg
ICAgLy8gb24gdG8gdGhlIGdpdmVuIGNhbnZhcy4KKyAgICBXZWJUaGVtZUNvbnRyb2xEUlRXaW4o
U2tDYW52YXMqLCBjb25zdCBTa0lSZWN0JiwgVHlwZSwgU3RhdGUpOwogICAgIH5XZWJUaGVtZUNv
bnRyb2xEUlRXaW4oKTsKIAogICAgIC8vIERyYXdzIHRoZSBjb250cm9sLgpAQCAtMTg0LDcgKzE4
MSw3IEBAIHByaXZhdGU6CiAgICAgLy8gY29sb3IgaXMgd2hpY2guCiAgICAgdm9pZCBtYXJrU3Rh
dGUoKTsKIAotICAgIHNraWE6OlBsYXRmb3JtQ2FudmFzKiBtX2NhbnZhczsKKyAgICBTa0NhbnZh
cyogbV9jYW52YXM7CiAgICAgY29uc3QgU2tJUmVjdCBtX2lyZWN0OwogICAgIGNvbnN0IFR5cGUg
bV90eXBlOwogICAgIGNvbnN0IFN0YXRlIG1fc3RhdGU7CkluZGV4OiBUb29scy9EdW1wUmVuZGVy
VHJlZS9jaHJvbWl1bS9XZWJWaWV3SG9zdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvRHVtcFJl
bmRlclRyZWUvY2hyb21pdW0vV2ViVmlld0hvc3QuY3BwCShyZXZpc2lvbiA4Mzg1OSkKKysrIFRv
b2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9taXVtL1dlYlZpZXdIb3N0LmNwcAkod29ya2luZyBjb3B5
KQpAQCAtNjYsNyArNjYsNiBAQAogCiB1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKIHVzaW5nIG5h
bWVzcGFjZSBXZWJLaXQ7Ci11c2luZyBuYW1lc3BhY2Ugc2tpYTsKIHVzaW5nIG5hbWVzcGFjZSBz
dGQ7CiAKIHN0YXRpYyBjb25zdCBpbnQgc2NyZWVuV2lkdGggPSAxOTIwOwpAQCAtMTUxMiwxMyAr
MTUxMSwxNCBAQCB2b2lkIFdlYlZpZXdIb3N0OjpwYWludEludmFsaWRhdGVkUmVnaW9uCiAgICAg
QVNTRVJUKG1fcGFpbnRSZWN0LmlzRW1wdHkoKSk7CiB9CiAKLVBsYXRmb3JtQ2FudmFzKiBXZWJW
aWV3SG9zdDo6Y2FudmFzKCkKK1NrQ2FudmFzKiBXZWJWaWV3SG9zdDo6Y2FudmFzKCkKIHsKICAg
ICBpZiAobV9jYW52YXMpCiAgICAgICAgIHJldHVybiBtX2NhbnZhcy5nZXQoKTsKICAgICBXZWJT
aXplIHdpZGdldFNpemUgPSB3ZWJXaWRnZXQoKS0+c2l6ZSgpOwogICAgIHJlc2V0U2Nyb2xsUmVj
dCgpOwotICAgIG1fY2FudmFzLnNldChuZXcgUGxhdGZvcm1DYW52YXMod2lkZ2V0U2l6ZS53aWR0
aCwgd2lkZ2V0U2l6ZS5oZWlnaHQsIHRydWUpKTsKKyAgICBtX2NhbnZhcy5zZXQoc2tpYTo6Q3Jl
YXRlQml0bWFwQ2FudmFzKAorICAgICAgICB3aWRnZXRTaXplLndpZHRoLCB3aWRnZXRTaXplLmhl
aWdodCwgdHJ1ZSkpOwogICAgIHJldHVybiBtX2NhbnZhcy5nZXQoKTsKIH0KIApJbmRleDogVG9v
bHMvRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vV2ViVmlld0hvc3QuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBU
b29scy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9XZWJWaWV3SG9zdC5oCShyZXZpc2lvbiA4Mzg1
OSkKKysrIFRvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9taXVtL1dlYlZpZXdIb3N0LmgJKHdvcmtp
bmcgY29weSkKQEAgLTQ1LDcgKzQ1LDkgQEAKICNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcu
aD4KIAogY2xhc3MgTGF5b3V0VGVzdENvbnRyb2xsZXI7CitjbGFzcyBTa0NhbnZhczsKIGNsYXNz
IFRlc3RTaGVsbDsKKwogbmFtZXNwYWNlIFdlYktpdCB7CiBjbGFzcyBXZWJGcmFtZTsKIGNsYXNz
IFdlYkRldmljZU9yaWVudGF0aW9uQ2xpZW50OwpAQCAtNjEsOSArNjMsNiBAQCBzdHJ1Y3QgV2Vi
UmVjdDsKIHN0cnVjdCBXZWJVUkxFcnJvcjsKIHN0cnVjdCBXZWJXaW5kb3dGZWF0dXJlczsKIH0K
LW5hbWVzcGFjZSBza2lhIHsKLWNsYXNzIFBsYXRmb3JtQ2FudmFzOwotfQogCiBjbGFzcyBXZWJW
aWV3SG9zdCA6IHB1YmxpYyBXZWJLaXQ6OldlYlNwZWxsQ2hlY2tDbGllbnQsIHB1YmxpYyBXZWJL
aXQ6OldlYlZpZXdDbGllbnQsIHB1YmxpYyBXZWJLaXQ6OldlYkZyYW1lQ2xpZW50LCBwdWJsaWMg
TmF2aWdhdGlvbkhvc3QgewogIHB1YmxpYzoKQEAgLTg3LDcgKzg2LDcgQEAgY2xhc3MgV2ViVmll
d0hvc3QgOiBwdWJsaWMgV2ViS2l0OjpXZWJTcAogICAgIHZvaWQgcGFpbnRSZWN0KGNvbnN0IFdl
YktpdDo6V2ViUmVjdCYpOwogICAgIHZvaWQgdXBkYXRlUGFpbnRSZWN0KGNvbnN0IFdlYktpdDo6
V2ViUmVjdCYpOwogICAgIHZvaWQgcGFpbnRJbnZhbGlkYXRlZFJlZ2lvbigpOwotICAgIHNraWE6
OlBsYXRmb3JtQ2FudmFzKiBjYW52YXMoKTsKKyAgICBTa0NhbnZhcyogY2FudmFzKCk7CiAgICAg
dm9pZCBkaXNwbGF5UmVwYWludE1hc2soKTsKIAogICAgIHZvaWQgbG9hZFVSTEZvckZyYW1lKGNv
bnN0IFdlYktpdDo6V2ViVVJMJiwgY29uc3QgV2ViS2l0OjpXZWJTdHJpbmcmIGZyYW1lTmFtZSk7
CkBAIC0zMzMsNyArMzMyLDcgQEAgcHJpdmF0ZToKICAgICBNb2NrU3BlbGxDaGVjayBtX3NwZWxs
Y2hlY2s7CiAKICAgICAvLyBQYWludGluZy4KLSAgICBPd25QdHI8c2tpYTo6UGxhdGZvcm1DYW52
YXM+IG1fY2FudmFzOworICAgIE93blB0cjxTa0NhbnZhcz4gbV9jYW52YXM7CiAgICAgV2ViS2l0
OjpXZWJSZWN0IG1fcGFpbnRSZWN0OwogICAgIGJvb2wgbV9pc1BhaW50aW5nOwogCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>89735</attachid>
            <date>2011-04-14 22:03:19 -0700</date>
            <delta_ts>2011-04-14 22:19:30 -0700</delta_ts>
            <desc>proposed patch</desc>
            <filename>cg.txt</filename>
            <type>text/plain</type>
            <size>1271</size>
            <attacher name="Alok Priyadarshi">alokp</attacher>
            
              <data encoding="base64">SW5kZXg6IFRvb2xzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9DaGFuZ2VMb2cJKHJl
dmlzaW9uIDgzOTQyKQorKysgVG9vbHMvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMg
KzEsMTUgQEAKKzIwMTEtMDQtMTQgIEFsb2sgUHJpeWFkYXJzaGkgIDxhbG9rcEBjaHJvbWl1bS5v
cmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgUmVt
b3ZlIGRlcGVuZGVuY3kgb24gY2hyb21pdW0gc2tpYTo6UGxhdGZvcm1DYW52YXMKKyAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTU3NTYzCisgICAgICAgIAor
ICAgICAgICBGaXhlZCBjb21waWxlIGVycm9yIG9uIE1hYyB3aGVuIHVzaW5nIENvcmUgR3JhcGhp
Y3MuCisKKyAgICAgICAgKiBEdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9XZWJWaWV3SG9zdC5jcHA6
CisgICAgICAgIChXZWJWaWV3SG9zdDo6cGFpbnRSZWN0KToKKwogMjAxMS0wNC0xNCAgQWxvayBQ
cml5YWRhcnNoaSAgPGFsb2twQGNocm9taXVtLm9yZz4KIAogICAgICAgICBSZXZpZXdlZCBieSBK
YW1lcyBSb2JpbnNvbi4KSW5kZXg6IFRvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9taXVtL1dlYlZp
ZXdIb3N0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9X
ZWJWaWV3SG9zdC5jcHAJKHJldmlzaW9uIDgzOTQxKQorKysgVG9vbHMvRHVtcFJlbmRlclRyZWUv
Y2hyb21pdW0vV2ViVmlld0hvc3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNDcwLDcgKzE0NzAs
OCBAQCB2b2lkIFdlYlZpZXdIb3N0OjpwYWludFJlY3QoY29uc3QgV2ViUmVjCiAgICAgQVNTRVJU
KGNhbnZhcygpKTsKICAgICBtX2lzUGFpbnRpbmcgPSB0cnVlOwogI2lmIFBMQVRGT1JNKENHKQot
ICAgIHdlYldpZGdldCgpLT5wYWludChjYW52YXMoKS0+Z2V0VG9wUGxhdGZvcm1EZXZpY2UoKS5H
ZXRCaXRtYXBDb250ZXh0KCksIHJlY3QpOworICAgIHdlYldpZGdldCgpLT5wYWludChza2lhOjpC
ZWdpblBsYXRmb3JtUGFpbnQoY2FudmFzKCkpLCByZWN0KTsKKyAgICBza2lhOjpFbmRQbGF0Zm9y
bVBhaW50KGNhbnZhcygpKTsKICNlbHNlCiAgICAgd2ViV2lkZ2V0KCktPnBhaW50KGNhbnZhcygp
LCByZWN0KTsKICNlbmRpZgo=
</data>

          </attachment>
      

    </bug>

</bugzilla>