<?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>133592</bug_id>
          
          <creation_ts>2014-06-06 17:01:01 -0700</creation_ts>
          <short_desc>Use unsigneds instead of ints for indexes into a string in text layout code</short_desc>
          <delta_ts>2014-06-24 14:05:04 -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>Layout and Rendering</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>134174</dependson>
    
    <dependson>134250</dependson>
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Myles C. Maxfield">mmaxfield</reporter>
          <assigned_to name="Myles C. Maxfield">mmaxfield</assigned_to>
          <cc>commit-queue</cc>
    
    <cc>d-r</cc>
    
    <cc>esprehn+autocc</cc>
    
    <cc>fmalita</cc>
    
    <cc>glenn</cc>
    
    <cc>gyuyoung.kim</cc>
    
    <cc>kling</cc>
    
    <cc>kondapallykalyan</cc>
    
    <cc>ossy</cc>
    
    <cc>pdr</cc>
    
    <cc>schenney</cc>
    
    <cc>sergio</cc>
    
    <cc>webkit-bug-importer</cc>
    
    <cc>zalan</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1013889</commentid>
    <comment_count>0</comment_count>
    <who name="Myles C. Maxfield">mmaxfield</who>
    <bug_when>2014-06-06 17:01:01 -0700</bug_when>
    <thetext>It would make more sense for it to return an unsigned.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1016044</commentid>
    <comment_count>1</comment_count>
      <attachid>233210</attachid>
    <who name="Myles C. Maxfield">mmaxfield</who>
    <bug_when>2014-06-16 20:13:34 -0700</bug_when>
    <thetext>Created attachment 233210
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1016045</commentid>
    <comment_count>2</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2014-06-16 20:14:10 -0700</bug_when>
    <thetext>&lt;rdar://problem/17337617&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1016136</commentid>
    <comment_count>3</comment_count>
      <attachid>233240</attachid>
    <who name="Myles C. Maxfield">mmaxfield</who>
    <bug_when>2014-06-17 10:21:40 -0700</bug_when>
    <thetext>Created attachment 233240
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1016139</commentid>
    <comment_count>4</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2014-06-17 10:24:10 -0700</bug_when>
    <thetext>Attachment 233240 did not pass style-queue:


ERROR: Source/WebCore/rendering/svg/SVGTextRunRenderingContext.cpp:106:  The parameter name &quot;const&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Total errors found: 1 in 36 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>1016156</commentid>
    <comment_count>5</comment_count>
    <who name="Myles C. Maxfield">mmaxfield</who>
    <bug_when>2014-06-17 10:40:29 -0700</bug_when>
    <thetext>*** Bug 133594 has been marked as a duplicate of this bug. ***</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1016199</commentid>
    <comment_count>6</comment_count>
      <attachid>233240</attachid>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2014-06-17 12:13:38 -0700</bug_when>
    <thetext>Comment on attachment 233240
Patch

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

&gt; Source/WebCore/platform/graphics/Font.cpp:340
&gt; +    unsigned to = (initialTo == -1 ? run.length() : initialTo);

Can initialTo ever be -2 (or lower)? Should this be &quot;initialTo &lt; 0 ?&quot;, as it is in &apos;drawEmphasisMarks&apos;?

&gt; Source/WebCore/platform/graphics/Font.cpp:511
&gt; +    unsigned to = (initialTo == -1 ? run.length() : initialTo);

Ditto above question.

&gt; Source/WebCore/platform/graphics/Font.cpp:1068
&gt; +    unsigned offsetInString = static_cast&lt;unsigned&gt;(initialOffsetInString);

What if initialOffsetInString is negative?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1016206</commentid>
    <comment_count>7</comment_count>
      <attachid>233240</attachid>
    <who name="Myles C. Maxfield">mmaxfield</who>
    <bug_when>2014-06-17 12:36:21 -0700</bug_when>
    <thetext>Comment on attachment 233240
Patch

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

&gt;&gt; Source/WebCore/platform/graphics/Font.cpp:340
&gt;&gt; +    unsigned to = (initialTo == -1 ? run.length() : initialTo);
&gt; 
&gt; Can initialTo ever be -2 (or lower)? Should this be &quot;initialTo &lt; 0 ?&quot;, as it is in &apos;drawEmphasisMarks&apos;?

It shouldn&apos;t be, but it&apos;s simple enough to change the conditional.

&gt;&gt; Source/WebCore/platform/graphics/Font.cpp:511
&gt;&gt; +    unsigned to = (initialTo == -1 ? run.length() : initialTo);
&gt; 
&gt; Ditto above question.

Same answer.

&gt;&gt; Source/WebCore/platform/graphics/Font.cpp:1068
&gt;&gt; +    unsigned offsetInString = static_cast&lt;unsigned&gt;(initialOffsetInString);
&gt; 
&gt; What if initialOffsetInString is negative?

It should never be - the only negative value that it should ever have is -1 (kNoOffset). I&apos;ll add an assert for this.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1016215</commentid>
    <comment_count>8</comment_count>
      <attachid>233253</attachid>
    <who name="Myles C. Maxfield">mmaxfield</who>
    <bug_when>2014-06-17 12:48:22 -0700</bug_when>
    <thetext>Created attachment 233253
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1016217</commentid>
    <comment_count>9</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2014-06-17 12:50:26 -0700</bug_when>
    <thetext>Attachment 233253 did not pass style-queue:


ERROR: Source/WebCore/rendering/svg/SVGTextRunRenderingContext.cpp:106:  The parameter name &quot;const&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Total errors found: 1 in 36 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>1016343</commentid>
    <comment_count>10</comment_count>
    <who name="Myles C. Maxfield">mmaxfield</who>
    <bug_when>2014-06-17 18:45:15 -0700</bug_when>
    <thetext>The style red bubble is a false negative, and it looks like the EFL bot was killed during compilation</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1016966</commentid>
    <comment_count>11</comment_count>
      <attachid>233253</attachid>
    <who name="alan">zalan</who>
    <bug_when>2014-06-20 11:12:42 -0700</bug_when>
    <thetext>Comment on attachment 233253
Patch

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

&gt; Source/WebCore/rendering/InlineTextBox.cpp:202
&gt; +    if (endPos &lt; m_start)

if (endPos &lt;= m_start)

&gt; Source/WebCore/rendering/InlineTextBox.cpp:204
&gt; +    unsigned ePos = std::min(endPos - m_start, static_cast&lt;unsigned&gt;(m_len));

Could you change m_len&apos;s type to unsigned too?
I talked to Kling about it and while it was originally typed to be short to save memory, now with the simple line layout, we don&apos;t have that excessive amount of inlinetextboxes so it&apos;s ok to make it unsigned int.

Its setter looks wrong too and can result in unsigned overflow:
void setLen(unsigned len) { m_len = len; }
So it&apos;s either the callers start using unsigned shorts or we make m_len unsigned int. -also, it&apos;s a bit odd that most of the inlinetextbox functions operate on ints while the length is short.

It might be better though to have this m_len change in a separate patch. If it happens to bring in some major memory regression, we can easily revert it without undoing the signed-unsigned change.

&gt; Source/WebCore/rendering/InlineTextBox.cpp:278
&gt; +    if (endPos &lt; m_start)

same here. though now that I am seeing it the second time, it might be better to keep the old structure, though I don&apos;t feel too strongly about it.  (shaving off a std::min() call vs. better code structuring (better code reading, less error prone))</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1016967</commentid>
    <comment_count>12</comment_count>
      <attachid>233253</attachid>
    <who name="alan">zalan</who>
    <bug_when>2014-06-20 11:12:43 -0700</bug_when>
    <thetext>Comment on attachment 233253
Patch

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

&gt; Source/WebCore/rendering/InlineTextBox.cpp:202
&gt; +    if (endPos &lt; m_start)

if (endPos &lt;= m_start)

&gt; Source/WebCore/rendering/InlineTextBox.cpp:204
&gt; +    unsigned ePos = std::min(endPos - m_start, static_cast&lt;unsigned&gt;(m_len));

Could you change m_len&apos;s type to unsigned too?
I talked to Kling about it and while it was originally typed to be short to save memory, now with the simple line layout, we don&apos;t have that excessive amount of inlinetextboxes so it&apos;s ok to make it unsigned int.

Its setter looks wrong too and can result in unsigned overflow:
void setLen(unsigned len) { m_len = len; }
So it&apos;s either the callers start using unsigned shorts or we make m_len unsigned int. -also, it&apos;s a bit odd that most of the inlinetextbox functions operate on ints while the length is short.

It might be better though to have this m_len change in a separate patch. If it happens to bring in some major memory regression, we can easily revert it without undoing the signed-unsigned change.

&gt; Source/WebCore/rendering/InlineTextBox.cpp:278
&gt; +    if (endPos &lt; m_start)

same here. though now that I am seeing it the second time, it might be better to keep the old structure, though I don&apos;t feel too strongly about it.  (shaving off a std::min() call vs. better code structuring (better code reading, less error prone))</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1017101</commentid>
    <comment_count>13</comment_count>
      <attachid>233253</attachid>
    <who name="Myles C. Maxfield">mmaxfield</who>
    <bug_when>2014-06-20 15:53:48 -0700</bug_when>
    <thetext>Comment on attachment 233253
Patch

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

&gt;&gt;&gt; Source/WebCore/rendering/InlineTextBox.cpp:204
&gt;&gt;&gt; +    unsigned ePos = std::min(endPos - m_start, static_cast&lt;unsigned&gt;(m_len));
&gt;&gt; 
&gt;&gt; Could you change m_len&apos;s type to unsigned too?
&gt;&gt; I talked to Kling about it and while it was originally typed to be short to save memory, now with the simple line layout, we don&apos;t have that excessive amount of inlinetextboxes so it&apos;s ok to make it unsigned int.
&gt;&gt; 
&gt;&gt; Its setter looks wrong too and can result in unsigned overflow:
&gt;&gt; void setLen(unsigned len) { m_len = len; }
&gt;&gt; So it&apos;s either the callers start using unsigned shorts or we make m_len unsigned int. -also, it&apos;s a bit odd that most of the inlinetextbox functions operate on ints while the length is short.
&gt;&gt; 
&gt;&gt; It might be better though to have this m_len change in a separate patch. If it happens to bring in some major memory regression, we can easily revert it without undoing the signed-unsigned change.
&gt; 
&gt; Could you change m_len&apos;s type to unsigned too?
&gt; I talked to Kling about it and while it was originally typed to be short to save memory, now with the simple line layout, we don&apos;t have that excessive amount of inlinetextboxes so it&apos;s ok to make it unsigned int.
&gt; 
&gt; Its setter looks wrong too and can result in unsigned overflow:
&gt; void setLen(unsigned len) { m_len = len; }
&gt; So it&apos;s either the callers start using unsigned shorts or we make m_len unsigned int. -also, it&apos;s a bit odd that most of the inlinetextbox functions operate on ints while the length is short.
&gt; 
&gt; It might be better though to have this m_len change in a separate patch. If it happens to bring in some major memory regression, we can easily revert it without undoing the signed-unsigned change.

That&apos;s a good idea, but I do thing that that would be better to do in another patch. I designed this one to have no changed runtime characteristics.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1017105</commentid>
    <comment_count>14</comment_count>
    <who name="alan">zalan</who>
    <bug_when>2014-06-20 16:04:19 -0700</bug_when>
    <thetext>(In reply to comment #13)
&gt; (From update of attachment 233253 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=233253&amp;action=review
&gt; 
&gt; &gt;&gt;&gt; Source/WebCore/rendering/InlineTextBox.cpp:204
&gt; &gt;&gt;&gt; +    unsigned ePos = std::min(endPos - m_start, static_cast&lt;unsigned&gt;(m_len));
&gt; &gt;&gt; 
&gt; &gt;&gt; Could you change m_len&apos;s type to unsigned too?
&gt; &gt;&gt; I talked to Kling about it and while it was originally typed to be short to save memory, now with the simple line layout, we don&apos;t have that excessive amount of inlinetextboxes so it&apos;s ok to make it unsigned int.
&gt; &gt;&gt; 
&gt; &gt;&gt; Its setter looks wrong too and can result in unsigned overflow:
&gt; &gt;&gt; void setLen(unsigned len) { m_len = len; }
&gt; &gt;&gt; So it&apos;s either the callers start using unsigned shorts or we make m_len unsigned int. -also, it&apos;s a bit odd that most of the inlinetextbox functions operate on ints while the length is short.
&gt; &gt;&gt; 
&gt; &gt;&gt; It might be better though to have this m_len change in a separate patch. If it happens to bring in some major memory regression, we can easily revert it without undoing the signed-unsigned change.
&gt; &gt; 
&gt; &gt; Could you change m_len&apos;s type to unsigned too?
&gt; &gt; I talked to Kling about it and while it was originally typed to be short to save memory, now with the simple line layout, we don&apos;t have that excessive amount of inlinetextboxes so it&apos;s ok to make it unsigned int.
&gt; &gt; 
&gt; &gt; Its setter looks wrong too and can result in unsigned overflow:
&gt; &gt; void setLen(unsigned len) { m_len = len; }
&gt; &gt; So it&apos;s either the callers start using unsigned shorts or we make m_len unsigned int. -also, it&apos;s a bit odd that most of the inlinetextbox functions operate on ints while the length is short.
&gt; &gt; 
&gt; &gt; It might be better though to have this m_len change in a separate patch. If it happens to bring in some major memory regression, we can easily revert it without undoing the signed-unsigned change.
&gt; 
&gt; That&apos;s a good idea, but I do thing that that would be better to do in another patch. I designed this one to have no changed runtime characteristics.
On certain hw, going from signed to unsigned does change runtime characteristic, but I agree, it&apos;s better to do it in a separate patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1017111</commentid>
    <comment_count>15</comment_count>
      <attachid>233476</attachid>
    <who name="Myles C. Maxfield">mmaxfield</who>
    <bug_when>2014-06-20 16:12:11 -0700</bug_when>
    <thetext>Created attachment 233476
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1017114</commentid>
    <comment_count>16</comment_count>
    <who name="Myles C. Maxfield">mmaxfield</who>
    <bug_when>2014-06-20 16:14:11 -0700</bug_when>
    <thetext>(In reply to comment #14)
&gt; (In reply to comment #13)
&gt; &gt; (From update of attachment 233253 [details] [details])
&gt; &gt; View in context: https://bugs.webkit.org/attachment.cgi?id=233253&amp;action=review
&gt; &gt; 
&gt; &gt; &gt;&gt;&gt; Source/WebCore/rendering/InlineTextBox.cpp:204
&gt; &gt; &gt;&gt;&gt; +    unsigned ePos = std::min(endPos - m_start, static_cast&lt;unsigned&gt;(m_len));
&gt; &gt; &gt;&gt; 
&gt; &gt; &gt;&gt; Could you change m_len&apos;s type to unsigned too?
&gt; &gt; &gt;&gt; I talked to Kling about it and while it was originally typed to be short to save memory, now with the simple line layout, we don&apos;t have that excessive amount of inlinetextboxes so it&apos;s ok to make it unsigned int.
&gt; &gt; &gt;&gt; 
&gt; &gt; &gt;&gt; Its setter looks wrong too and can result in unsigned overflow:
&gt; &gt; &gt;&gt; void setLen(unsigned len) { m_len = len; }
&gt; &gt; &gt;&gt; So it&apos;s either the callers start using unsigned shorts or we make m_len unsigned int. -also, it&apos;s a bit odd that most of the inlinetextbox functions operate on ints while the length is short.
&gt; &gt; &gt;&gt; 
&gt; &gt; &gt;&gt; It might be better though to have this m_len change in a separate patch. If it happens to bring in some major memory regression, we can easily revert it without undoing the signed-unsigned change.
&gt; &gt; &gt; 
&gt; &gt; &gt; Could you change m_len&apos;s type to unsigned too?
&gt; &gt; &gt; I talked to Kling about it and while it was originally typed to be short to save memory, now with the simple line layout, we don&apos;t have that excessive amount of inlinetextboxes so it&apos;s ok to make it unsigned int.
&gt; &gt; &gt; 
&gt; &gt; &gt; Its setter looks wrong too and can result in unsigned overflow:
&gt; &gt; &gt; void setLen(unsigned len) { m_len = len; }
&gt; &gt; &gt; So it&apos;s either the callers start using unsigned shorts or we make m_len unsigned int. -also, it&apos;s a bit odd that most of the inlinetextbox functions operate on ints while the length is short.
&gt; &gt; &gt; 
&gt; &gt; &gt; It might be better though to have this m_len change in a separate patch. If it happens to bring in some major memory regression, we can easily revert it without undoing the signed-unsigned change.
&gt; &gt; 
&gt; &gt; That&apos;s a good idea, but I do thing that that would be better to do in another patch. I designed this one to have no changed runtime characteristics.
&gt; On certain hw, going from signed to unsigned does change runtime characteristic, but I agree, it&apos;s better to do it in a separate patch.

Really? Signed math isn&apos;t always the same speed as unsigned math on all hardware? I had no idea.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1017115</commentid>
    <comment_count>17</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2014-06-20 16:14:43 -0700</bug_when>
    <thetext>Attachment 233476 did not pass style-queue:


ERROR: Source/WebCore/rendering/svg/SVGTextRunRenderingContext.cpp:106:  The parameter name &quot;const&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Total errors found: 1 in 36 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>1017120</commentid>
    <comment_count>18</comment_count>
    <who name="Andreas Kling">kling</who>
    <bug_when>2014-06-20 16:17:30 -0700</bug_when>
    <thetext>(In reply to comment #16)
&gt; &gt; &gt; That&apos;s a good idea, but I do thing that that would be better to do in another patch. I designed this one to have no changed runtime characteristics.
&gt; &gt; On certain hw, going from signed to unsigned does change runtime characteristic, but I agree, it&apos;s better to do it in a separate patch.
&gt; 
&gt; Really? Signed math isn&apos;t always the same speed as unsigned math on all hardware? I had no idea.

ARMv7 doesn&apos;t have an instruction for signed modulo, for instance.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1017124</commentid>
    <comment_count>19</comment_count>
      <attachid>233476</attachid>
    <who name="alan">zalan</who>
    <bug_when>2014-06-20 16:25:59 -0700</bug_when>
    <thetext>Comment on attachment 233476
Patch

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

&gt; Source/WebCore/rendering/InlineTextBox.cpp:278
&gt; +    if (endPos &lt; m_start)

endPos &lt;= m_start</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1017401</commentid>
    <comment_count>20</comment_count>
    <who name="Myles C. Maxfield">mmaxfield</who>
    <bug_when>2014-06-22 10:18:27 -0700</bug_when>
    <thetext>http://trac.webkit.org/changeset/170265</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1017409</commentid>
    <comment_count>21</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2014-06-22 11:05:55 -0700</bug_when>
    <thetext>Re-opened since this is blocked by bug 134174</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1017784</commentid>
    <comment_count>22</comment_count>
    <who name="Myles C. Maxfield">mmaxfield</who>
    <bug_when>2014-06-23 17:31:01 -0700</bug_when>
    <thetext>The problem was a &quot;&lt;&quot; vs a &quot;&lt;=&quot;. Re-landed in http://trac.webkit.org/changeset/170337.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1017918</commentid>
    <comment_count>23</comment_count>
    <who name="Csaba Osztrogonác">ossy</who>
    <bug_when>2014-06-24 04:25:08 -0700</bug_when>
    <thetext>(In reply to comment #22)
&gt; The problem was a &quot;&lt;&quot; vs a &quot;&lt;=&quot;. Re-landed in http://trac.webkit.org/changeset/170337.

It made 3 tests crash on Apple Mac debug bots.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1017937</commentid>
    <comment_count>24</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2014-06-24 07:19:51 -0700</bug_when>
    <thetext>Re-opened since this is blocked by bug 134250</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1018035</commentid>
    <comment_count>25</comment_count>
    <who name="Myles C. Maxfield">mmaxfield</who>
    <bug_when>2014-06-24 12:00:49 -0700</bug_when>
    <thetext>Having trouble reproducing locally :(</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1018087</commentid>
    <comment_count>26</comment_count>
    <who name="Myles C. Maxfield">mmaxfield</who>
    <bug_when>2014-06-24 14:02:13 -0700</bug_when>
    <thetext>Was able to reproduce these, and the fix is trivial. I&apos;ll land again shortly. Hopefully this time it sticks.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1018091</commentid>
    <comment_count>27</comment_count>
    <who name="Myles C. Maxfield">mmaxfield</who>
    <bug_when>2014-06-24 14:05:04 -0700</bug_when>
    <thetext>http://trac.webkit.org/changeset/170390</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>233210</attachid>
            <date>2014-06-16 20:13:34 -0700</date>
            <delta_ts>2014-06-17 10:21:35 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-133592-20140616201311.patch</filename>
            <type>text/plain</type>
            <size>63074</size>
            <attacher name="Myles C. Maxfield">mmaxfield</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTY5ODcyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZmI5YzljNzM3ZDgzZGIx
YjE2YWFmNWE0OGU2NzA5Y2ZlZjIwZjc0Yi4uZmY1M2ZkYmE3NzA4MTJhZTQzMGQyODVmNDc3ZmY4
N2ZhNGE0ZjRiMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDg2IEBACisyMDE0LTA2LTE2ICBNeWxl
cyBDLiBNYXhmaWVsZCAgPG1tYXhmaWVsZEBhcHBsZS5jb20+CisKKyAgICAgICAgKlRleHRJdGVy
YXRvcjo6Y3VycmVudENoYXJhY3RlcigpIHJldHVybnMgaW50CisgICAgICAgIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMzM1OTIKKworICAgICAgICBSZXZpZXdlZCBi
eSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBNaWdyYXRlIG11Y2ggb2YgdGhlIHRleHQtaGFu
ZGxpbmcgY29kZSB0byB1c2UgdW5zaWduZWRzIGZvciBpbmRleGVzIGludG8gYSBzdHJpbmcKKwor
ICAgICAgICBObyBuZXcgdGVzdHMgYmVjYXVzZSB0aGVyZSBzaG91bGQgYmUgbm8gYmVoYXZpb3Ig
Y2hhbmdlLgorCisgICAgICAgICogV2ViQ29yZS5leHAuaW46CisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3MvRm9udC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGb250OjpkcmF3VGV4dCk6Cisg
ICAgICAgIChXZWJDb3JlOjpGb250OjpkcmF3RW1waGFzaXNNYXJrcyk6CisgICAgICAgIChXZWJD
b3JlOjpGb250OjphZGp1c3RTZWxlY3Rpb25SZWN0Rm9yVGV4dCk6CisgICAgICAgIChXZWJDb3Jl
Ojpjb21wdXRlVW5kZXJsaW5lVHlwZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvRm9u
dC5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dC5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpUZXh0UnVuSXRlcmF0b3I6OmF0RW5kKToKKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy9MYXRpbjFUZXh0SXRlcmF0b3IuaDoKKyAgICAgICAgKFdlYkNvcmU6Okxh
dGluMVRleHRJdGVyYXRvcjo6TGF0aW4xVGV4dEl0ZXJhdG9yKToKKyAgICAgICAgKFdlYkNvcmU6
OkxhdGluMVRleHRJdGVyYXRvcjo6Y3VycmVudENoYXJhY3Rlcik6CisgICAgICAgICogcGxhdGZv
cm0vZ3JhcGhpY3MvU2ltcGxlRm9udERhdGEuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy9TdXJyb2dhdGVQYWlyQXdhcmVUZXh0SXRlcmF0b3IuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
U3Vycm9nYXRlUGFpckF3YXJlVGV4dEl0ZXJhdG9yOjpTdXJyb2dhdGVQYWlyQXdhcmVUZXh0SXRl
cmF0b3IpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL1N1cnJvZ2F0ZVBhaXJBd2FyZVRl
eHRJdGVyYXRvci5oOgorICAgICAgICAoV2ViQ29yZTo6U3Vycm9nYXRlUGFpckF3YXJlVGV4dEl0
ZXJhdG9yOjpjdXJyZW50Q2hhcmFjdGVyKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9U
ZXh0UnVuLmg6CisgICAgICAgIChXZWJDb3JlOjpUZXh0UnVuOjpsZW5ndGgpOgorICAgICAgICAo
V2ViQ29yZTo6VGV4dFJ1bjo6Y2hhcmFjdGVyc0xlbmd0aCk6CisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3MvV2lkdGhJdGVyYXRvci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpXaWR0aEl0ZXJh
dG9yOjpnbHlwaERhdGFGb3JDaGFyYWN0ZXIpOgorICAgICAgICAoV2ViQ29yZTo6V2lkdGhJdGVy
YXRvcjo6YWR2YW5jZUludGVybmFsKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9XaWR0
aEl0ZXJhdG9yLmg6CisgICAgICAgICogcmVuZGVyaW5nL0lubGluZVRleHRCb3guY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6SW5saW5lVGV4dEJveDo6aXNTZWxlY3RlZCk6CisgICAgICAgIChXZWJD
b3JlOjpJbmxpbmVUZXh0Qm94OjpzZWxlY3Rpb25TdGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjph
ZGp1c3RDaGFyYWN0ZXJzQW5kTGVuZ3RoRm9ySHlwaGVuKToKKyAgICAgICAgKFdlYkNvcmU6Oklu
bGluZVRleHRCb3g6OmxvY2FsU2VsZWN0aW9uUmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpJbmxp
bmVUZXh0Qm94OjpwYWludCk6CisgICAgICAgIChXZWJDb3JlOjpJbmxpbmVUZXh0Qm94OjpzZWxl
Y3Rpb25TdGFydEVuZCk6CisgICAgICAgIChXZWJDb3JlOjpJbmxpbmVUZXh0Qm94OjpwYWludFNl
bGVjdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpJbmxpbmVUZXh0Qm94OjpwYWludENvbXBvc2l0
aW9uQmFja2dyb3VuZCk6CisgICAgICAgIChXZWJDb3JlOjpJbmxpbmVUZXh0Qm94OjpwYWludERv
Y3VtZW50TWFya2VyKToKKyAgICAgICAgKFdlYkNvcmU6OklubGluZVRleHRCb3g6OnBhaW50VGV4
dE1hdGNoTWFya2VyKToKKyAgICAgICAgKFdlYkNvcmU6OklubGluZVRleHRCb3g6OmNvbXB1dGVS
ZWN0Rm9yUmVwbGFjZW1lbnRNYXJrZXIpOgorICAgICAgICAoV2ViQ29yZTo6SW5saW5lVGV4dEJv
eDo6cGFpbnRDb21wb3NpdGlvblVuZGVybGluZSk6CisgICAgICAgIChXZWJDb3JlOjpJbmxpbmVU
ZXh0Qm94Ojpwb3NpdGlvbkZvck9mZnNldCk6CisgICAgICAgIChXZWJDb3JlOjpJbmxpbmVUZXh0
Qm94Ojpjb25zdHJ1Y3RUZXh0UnVuKToKKyAgICAgICAgKiByZW5kZXJpbmcvSW5saW5lVGV4dEJv
eC5oOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJDb21iaW5lVGV4dC5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpSZW5kZXJDb21iaW5lVGV4dDo6Z2V0U3RyaW5nVG9SZW5kZXIpOgorICAgICAg
ICAqIHJlbmRlcmluZy9SZW5kZXJDb21iaW5lVGV4dC5oOgorICAgICAgICAqIHJlbmRlcmluZy9z
dmcvU1ZHSW5saW5lRmxvd0JveC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdJbmxpbmVGbG93
Qm94Ojpjb21wdXRlVGV4dE1hdGNoTWFya2VyUmVjdEZvclJlbmRlcmVyKToKKyAgICAgICAgKiBy
ZW5kZXJpbmcvc3ZnL1NWR0lubGluZVRleHRCb3guY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZH
SW5saW5lVGV4dEJveDo6cG9zaXRpb25Gb3JPZmZzZXQpOgorICAgICAgICAoV2ViQ29yZTo6U1ZH
SW5saW5lVGV4dEJveDo6bG9jYWxTZWxlY3Rpb25SZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OlNW
R0lubGluZVRleHRCb3g6OnBhaW50U2VsZWN0aW9uQmFja2dyb3VuZCk6CisgICAgICAgIChXZWJD
b3JlOjpTVkdJbmxpbmVUZXh0Qm94OjptYXBTdGFydEVuZFBvc2l0aW9uc0ludG9GcmFnbWVudENv
b3JkaW5hdGVzKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR0lubGluZVRleHRCb3g6OnBhaW50VGV4
dCk6CisgICAgICAgICogcmVuZGVyaW5nL3N2Zy9TVkdJbmxpbmVUZXh0Qm94Lmg6CisgICAgICAg
ICogcmVuZGVyaW5nL3N2Zy9TVkdUZXh0TWV0cmljc0J1aWxkZXIuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6U1ZHVGV4dE1ldHJpY3NCdWlsZGVyOjpjdXJyZW50Q2hhcmFjdGVyU3RhcnRzU3Vycm9n
YXRlUGFpcik6CisgICAgICAgIChXZWJDb3JlOjpTVkdUZXh0TWV0cmljc0J1aWxkZXI6OmFkdmFu
Y2UpOgorICAgICAgICAqIHJlbmRlcmluZy9zdmcvU1ZHVGV4dFF1ZXJ5LmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OlNWR1RleHRRdWVyeTo6bWFwU3RhcnRFbmRQb3NpdGlvbnNJbnRvRnJhZ21lbnRD
b29yZGluYXRlcyk6CisgICAgICAgIChXZWJDb3JlOjpTVkdUZXh0UXVlcnk6Om1vZGlmeVN0YXJ0
RW5kUG9zaXRpb25zUmVzcGVjdGluZ0xpZ2F0dXJlcyk6CisgICAgICAgIChXZWJDb3JlOjpTVkdU
ZXh0UXVlcnk6OnN1YlN0cmluZ0xlbmd0aENhbGxiYWNrKToKKyAgICAgICAgKFdlYkNvcmU6OlNW
R1RleHRRdWVyeTo6c3RhcnRQb3NpdGlvbk9mQ2hhcmFjdGVyQ2FsbGJhY2spOgorICAgICAgICAo
V2ViQ29yZTo6U1ZHVGV4dFF1ZXJ5OjplbmRQb3NpdGlvbk9mQ2hhcmFjdGVyQ2FsbGJhY2spOgor
ICAgICAgICAoV2ViQ29yZTo6U1ZHVGV4dFF1ZXJ5Ojpyb3RhdGlvbk9mQ2hhcmFjdGVyQ2FsbGJh
Y2spOgorICAgICAgICAoV2ViQ29yZTo6U1ZHVGV4dFF1ZXJ5OjpleHRlbnRPZkNoYXJhY3RlckNh
bGxiYWNrKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR1RleHRRdWVyeTo6Y2hhcmFjdGVyTnVtYmVy
QXRQb3NpdGlvbkNhbGxiYWNrKToKKyAgICAgICAgKiByZW5kZXJpbmcvc3ZnL1NWR1RleHRRdWVy
eS5oOgorICAgICAgICAqIHJlbmRlcmluZy9zdmcvU1ZHVGV4dFJ1blJlbmRlcmluZ0NvbnRleHQu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZHVGV4dFJ1blJlbmRlcmluZ0NvbnRleHQ6OmdseXBo
RGF0YUZvckNoYXJhY3Rlcik6CisgICAgICAgICogcmVuZGVyaW5nL3N2Zy9TVkdUZXh0UnVuUmVu
ZGVyaW5nQ29udGV4dC5oOgorICAgICAgICAqIHN2Zy9TVkdGb250RGF0YS5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpTVkdGb250RGF0YTo6YXBwbHlTVkdHbHlwaFNlbGVjdGlvbik6CisgICAgICAg
ICogc3ZnL1NWR0ZvbnREYXRhLmg6CisKIDIwMTQtMDYtMTEgIE15bGVzIEMuIE1heGZpZWxkICA8
bW1heGZpZWxkQGFwcGxlLmNvbT4KIAogICAgICAgICBTVkdHbHlwaFRvUGF0aFRyYW5zbGF0b3Ig
QVNTRVJUcyB3aGVuIGVuY291bnRlcmluZyBhIG1pc3NpbmcgZ2x5cGggaW4gYW4gU1ZHIGZvbnQK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZXhwLmluIGIvU291cmNlL1dlYkNv
cmUvV2ViQ29yZS5leHAuaW4KaW5kZXggODYyMmIzMGJjOWNkZDBkMjIzMDg3NDA3M2ExNGE5ZDU0
NDk4YWU2OC4uYmM0NTI3ODRjNDIzNGRkYmU0NDJiODYwNzAxYTk2Yjk4OTMyM2QzOCAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5leHAuaW4KKysrIGIvU291cmNlL1dlYkNvcmUv
V2ViQ29yZS5leHAuaW4KQEAgLTE4NTEsNyArMTg1MSw3IEBAIF9fWk5LN1dlYkNvcmUzVVJMNXF1
ZXJ5RXYKIF9fWk5LN1dlYkNvcmUzVVJMOHByb3RvY29sRXYKIF9fWk5LN1dlYkNvcmUzVVJMY3ZQ
NU5TVVJMRXYKIF9fWk5LN1dlYkNvcmU0Rm9udDV3aWR0aEVSS05TXzdUZXh0UnVuRVBOM1dURjdI
YXNoU2V0SVBLTlNfMTRTaW1wbGVGb250RGF0YUVOUzRfN1B0ckhhc2hJUzhfRUVOUzRfMTBIYXNo
VHJhaXRzSVM4X0VFRUVQTlNfMTNHbHlwaE92ZXJmbG93RQotX19aTks3V2ViQ29yZTRGb250OGRy
YXdUZXh0RVBOU18xNUdyYXBoaWNzQ29udGV4dEVSS05TXzdUZXh0UnVuRVJLTlNfMTBGbG9hdFBv
aW50RWlpTlMwXzI0Q3VzdG9tRm9udE5vdFJlYWR5QWN0aW9uRQorX19aTks3V2ViQ29yZTRGb250
OGRyYXdUZXh0RVBOU18xNUdyYXBoaWNzQ29udGV4dEVSS05TXzdUZXh0UnVuRVJLTlNfMTBGbG9h
dFBvaW50RWppTlMwXzI0Q3VzdG9tRm9udE5vdFJlYWR5QWN0aW9uRQogX19aTks3V2ViQ29yZTRG
b250ZXFFUktTMF8KIF9fWk5LN1dlYkNvcmU0Tm9kZTExdGV4dENvbnRlbnRFYgogX19aTks3V2Vi
Q29yZTROb2RlMTNvd25lckRvY3VtZW50RXYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL0ZvbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvRm9udC5jcHAKaW5kZXggY2Q2MjNmMzg5NWE1MDk4NTBjNjg4YzRkNjgwNTI5YzdmYTNhYTVm
Zi4uNDAwZjcxNDQ3MzlmMWZmZGVkNTVjMjE0OTYzY2NkZTEyNjAxYTVjNSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udC5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udC5jcHAKQEAgLTMyOSw3ICszMjksNyBAQCB2b2lk
IEZvbnQ6OnVwZGF0ZShQYXNzUmVmUHRyPEZvbnRTZWxlY3Rvcj4gZm9udFNlbGVjdG9yKSBjb25z
dAogICAgIG1fdHlwZXNldHRpbmdGZWF0dXJlcyA9IGNvbXB1dGVUeXBlc2V0dGluZ0ZlYXR1cmVz
KCk7CiB9CiAKLWZsb2F0IEZvbnQ6OmRyYXdUZXh0KEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwg
Y29uc3QgVGV4dFJ1biYgcnVuLCBjb25zdCBGbG9hdFBvaW50JiBwb2ludCwgaW50IGZyb20sIGlu
dCB0bywgQ3VzdG9tRm9udE5vdFJlYWR5QWN0aW9uIGN1c3RvbUZvbnROb3RSZWFkeUFjdGlvbikg
Y29uc3QKK2Zsb2F0IEZvbnQ6OmRyYXdUZXh0KEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgY29u
c3QgVGV4dFJ1biYgcnVuLCBjb25zdCBGbG9hdFBvaW50JiBwb2ludCwgdW5zaWduZWQgZnJvbSwg
aW50IGluaXRpYWxUbywgQ3VzdG9tRm9udE5vdFJlYWR5QWN0aW9uIGN1c3RvbUZvbnROb3RSZWFk
eUFjdGlvbikgY29uc3QKIHsKICAgICAvLyBEb24ndCBkcmF3IGFueXRoaW5nIHdoaWxlIHdlIGFy
ZSB1c2luZyBjdXN0b20gZm9udHMgdGhhdCBhcmUgaW4gdGhlIHByb2Nlc3Mgb2YgbG9hZGluZywK
ICAgICAvLyBleGNlcHQgaWYgdGhlICdmb3JjZScgYXJndW1lbnQgaXMgc2V0IHRvIHRydWUgKGlu
IHdoaWNoIGNhc2UgaXQgd2lsbCB1c2UgYSBmYWxsYmFjawpAQCAtMzM3LDExICszMzcsMTEgQEAg
ZmxvYXQgRm9udDo6ZHJhd1RleHQoR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBjb25zdCBUZXh0
UnVuJiBydW4sIGNvbnN0IEZsb2F0UG8KICAgICBpZiAobG9hZGluZ0N1c3RvbUZvbnRzKCkgJiYg
Y3VzdG9tRm9udE5vdFJlYWR5QWN0aW9uID09IERvTm90UGFpbnRJZkZvbnROb3RSZWFkeSkKICAg
ICAgICAgcmV0dXJuIDA7CiAKLSAgICB0byA9ICh0byA9PSAtMSA/IHJ1bi5sZW5ndGgoKSA6IHRv
KTsKKyAgICB1bnNpZ25lZCB0byA9IChpbml0aWFsVG8gPT0gLTEgPyBydW4ubGVuZ3RoKCkgOiBp
bml0aWFsVG8pOwogCiAgICAgQ29kZVBhdGggY29kZVBhdGhUb1VzZSA9IGNvZGVQYXRoKHJ1bik7
CiAgICAgLy8gRklYTUU6IFVzZSB0aGUgZmFzdCBjb2RlIHBhdGggb25jZSBpdCBoYW5kbGVzIHBh
cnRpYWwgcnVucyB3aXRoIGtlcm5pbmcgYW5kIGxpZ2F0dXJlcy4gU2VlIGh0dHA6Ly93ZWJraXQu
b3JnL2IvMTAwMDUwCi0gICAgaWYgKGNvZGVQYXRoVG9Vc2UgIT0gQ29tcGxleCAmJiB0eXBlc2V0
dGluZ0ZlYXR1cmVzKCkgJiYgKGZyb20gfHwgdG8gIT0gcnVuLmxlbmd0aCgpKSAmJiAhaXNEcmF3
bldpdGhTVkdGb250KHJ1bikpCisgICAgaWYgKGNvZGVQYXRoVG9Vc2UgIT0gQ29tcGxleCAmJiB0
eXBlc2V0dGluZ0ZlYXR1cmVzKCkgJiYgKGZyb20gfHwgdG8gIT0gc3RhdGljX2Nhc3Q8dW5zaWdu
ZWQ+KHJ1bi5sZW5ndGgoKSkpICYmICFpc0RyYXduV2l0aFNWR0ZvbnQocnVuKSkKICAgICAgICAg
Y29kZVBhdGhUb1VzZSA9IENvbXBsZXg7CiAKICAgICBpZiAoY29kZVBhdGhUb1VzZSAhPSBDb21w
bGV4KQpAQCAtMzUwLDE3ICszNTAsMTYgQEAgZmxvYXQgRm9udDo6ZHJhd1RleHQoR3JhcGhpY3ND
b250ZXh0KiBjb250ZXh0LCBjb25zdCBUZXh0UnVuJiBydW4sIGNvbnN0IEZsb2F0UG8KICAgICBy
ZXR1cm4gZHJhd0NvbXBsZXhUZXh0KGNvbnRleHQsIHJ1biwgcG9pbnQsIGZyb20sIHRvKTsKIH0K
IAotdm9pZCBGb250OjpkcmF3RW1waGFzaXNNYXJrcyhHcmFwaGljc0NvbnRleHQqIGNvbnRleHQs
IGNvbnN0IFRleHRSdW4mIHJ1biwgY29uc3QgQXRvbWljU3RyaW5nJiBtYXJrLCBjb25zdCBGbG9h
dFBvaW50JiBwb2ludCwgaW50IGZyb20sIGludCB0bykgY29uc3QKK3ZvaWQgRm9udDo6ZHJhd0Vt
cGhhc2lzTWFya3MoR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBjb25zdCBUZXh0UnVuJiBydW4s
IGNvbnN0IEF0b21pY1N0cmluZyYgbWFyaywgY29uc3QgRmxvYXRQb2ludCYgcG9pbnQsIHVuc2ln
bmVkIGZyb20sIGludCBpbml0aWFsVG8pIGNvbnN0CiB7CiAgICAgaWYgKGxvYWRpbmdDdXN0b21G
b250cygpKQogICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAodG8gPCAwKQotICAgICAgICB0byA9
IHJ1bi5sZW5ndGgoKTsKKyAgICAKKyAgICB1bnNpZ25lZCB0byA9IGluaXRpYWxUbyA8IDAgPyBy
dW4ubGVuZ3RoKCkgOiBpbml0aWFsVG87CiAKICAgICBDb2RlUGF0aCBjb2RlUGF0aFRvVXNlID0g
Y29kZVBhdGgocnVuKTsKICAgICAvLyBGSVhNRTogVXNlIHRoZSBmYXN0IGNvZGUgcGF0aCBvbmNl
IGl0IGhhbmRsZXMgcGFydGlhbCBydW5zIHdpdGgga2VybmluZyBhbmQgbGlnYXR1cmVzLiBTZWUg
aHR0cDovL3dlYmtpdC5vcmcvYi8xMDAwNTAKLSAgICBpZiAoY29kZVBhdGhUb1VzZSAhPSBDb21w
bGV4ICYmIHR5cGVzZXR0aW5nRmVhdHVyZXMoKSAmJiAoZnJvbSB8fCB0byAhPSBydW4ubGVuZ3Ro
KCkpICYmICFpc0RyYXduV2l0aFNWR0ZvbnQocnVuKSkKKyAgICBpZiAoY29kZVBhdGhUb1VzZSAh
PSBDb21wbGV4ICYmIHR5cGVzZXR0aW5nRmVhdHVyZXMoKSAmJiAoZnJvbSB8fCB0byAhPSBzdGF0
aWNfY2FzdDx1bnNpZ25lZD4ocnVuLmxlbmd0aCgpKSkgJiYgIWlzRHJhd25XaXRoU1ZHRm9udChy
dW4pKQogICAgICAgICBjb2RlUGF0aFRvVXNlID0gQ29tcGxleDsKIAogICAgIGlmIChjb2RlUGF0
aFRvVXNlICE9IENvbXBsZXgpCkBAIC01MDcsMTMgKzUwNiwxMyBAQCBib29sIEZvbnQ6OmZhc3RB
dmVyYWdlQ2hhcldpZHRoSWZBdmFpbGFibGUoZmxvYXQmIHdpZHRoKSBjb25zdAogICAgIHJldHVy
biBzdWNjZXNzOwogfQogCi12b2lkIEZvbnQ6OmFkanVzdFNlbGVjdGlvblJlY3RGb3JUZXh0KGNv
bnN0IFRleHRSdW4mIHJ1biwgTGF5b3V0UmVjdCYgc2VsZWN0aW9uUmVjdCwgaW50IGZyb20sIGlu
dCB0bykgY29uc3QKK3ZvaWQgRm9udDo6YWRqdXN0U2VsZWN0aW9uUmVjdEZvclRleHQoY29uc3Qg
VGV4dFJ1biYgcnVuLCBMYXlvdXRSZWN0JiBzZWxlY3Rpb25SZWN0LCB1bnNpZ25lZCBmcm9tLCBp
bnQgaW5pdGlhbFRvKSBjb25zdAogewotICAgIHRvID0gKHRvID09IC0xID8gcnVuLmxlbmd0aCgp
IDogdG8pOworICAgIHVuc2lnbmVkIHRvID0gKGluaXRpYWxUbyA9PSAtMSA/IHJ1bi5sZW5ndGgo
KSA6IGluaXRpYWxUbyk7CiAKICAgICBDb2RlUGF0aCBjb2RlUGF0aFRvVXNlID0gY29kZVBhdGgo
cnVuKTsKICAgICAvLyBGSVhNRTogVXNlIHRoZSBmYXN0IGNvZGUgcGF0aCBvbmNlIGl0IGhhbmRs
ZXMgcGFydGlhbCBydW5zIHdpdGgga2VybmluZyBhbmQgbGlnYXR1cmVzLiBTZWUgaHR0cDovL3dl
YmtpdC5vcmcvYi8xMDAwNTAKLSAgICBpZiAoY29kZVBhdGhUb1VzZSAhPSBDb21wbGV4ICYmIHR5
cGVzZXR0aW5nRmVhdHVyZXMoKSAmJiAoZnJvbSB8fCB0byAhPSBydW4ubGVuZ3RoKCkpICYmICFp
c0RyYXduV2l0aFNWR0ZvbnQocnVuKSkKKyAgICBpZiAoY29kZVBhdGhUb1VzZSAhPSBDb21wbGV4
ICYmIHR5cGVzZXR0aW5nRmVhdHVyZXMoKSAmJiAoZnJvbSB8fCB0byAhPSBzdGF0aWNfY2FzdDx1
bnNpZ25lZD4ocnVuLmxlbmd0aCgpKSkgJiYgIWlzRHJhd25XaXRoU1ZHRm9udChydW4pKQogICAg
ICAgICBjb2RlUGF0aFRvVXNlID0gQ29tcGxleDsKIAogICAgIGlmIChjb2RlUGF0aFRvVXNlICE9
IENvbXBsZXgpCkBAIC0xMDU5LDE4ICsxMDU4LDE5IEBAIEdseXBoVG9QYXRoVHJhbnNsYXRvcjo6
R2x5cGhVbmRlcmxpbmVUeXBlIGNvbXB1dGVVbmRlcmxpbmVUeXBlKGNvbnN0IFRleHRSdW4mIHRl
CiAgICAgLy8gSW4gZ2VuZXJhbCwgd2Ugd2FudCB0byBza2lwIGRlc2NlbmRlcnMuIEhvd2V2ZXIs
IHNraXBwaW5nIGRlc2NlbmRlcnMgb24gQ0pLIGNoYXJhY3RlcnMgbGVhZHMgdG8gdW5kZXNpcmFi
bGUgcmVuZGVyaW5ncywKICAgICAvLyBzbyB3ZSB3YW50IHRvIGRyYXcgdGhyb3VnaCBDSksgY2hh
cmFjdGVycyAob24gYSBjaGFyYWN0ZXItYnktY2hhcmFjdGVyIGJhc2lzKS4KICAgICBVQ2hhcjMy
IGJhc2VDaGFyYWN0ZXI7Ci0gICAgaW50IG9mZnNldEluU3RyaW5nID0gZ2x5cGhCdWZmZXIub2Zm
c2V0SW5TdHJpbmcoaW5kZXgpOworICAgIGludCBpbml0aWFsT2Zmc2V0SW5TdHJpbmcgPSBnbHlw
aEJ1ZmZlci5vZmZzZXRJblN0cmluZyhpbmRleCk7CiAKLSAgICBpZiAob2Zmc2V0SW5TdHJpbmcg
PT0gR2x5cGhCdWZmZXI6OmtOb09mZnNldCkgeworICAgIGlmIChpbml0aWFsT2Zmc2V0SW5TdHJp
bmcgPT0gR2x5cGhCdWZmZXI6OmtOb09mZnNldCkgewogICAgICAgICAvLyBXZSBoYXZlIG5vIGlk
ZWEgd2hpY2ggY2hhcmFjdGVyIHNwYXduZWQgdGhpcyBnbHlwaC4gQmFpbC4KICAgICAgICAgcmV0
dXJuIEdseXBoVG9QYXRoVHJhbnNsYXRvcjo6R2x5cGhVbmRlcmxpbmVUeXBlOjpEcmF3T3Zlckds
eXBoOwogICAgIH0KICAgICAKKyAgICB1bnNpZ25lZCBvZmZzZXRJblN0cmluZyA9IHN0YXRpY19j
YXN0PHVuc2lnbmVkPihpbml0aWFsT2Zmc2V0SW5TdHJpbmcpOworICAgIAogICAgIGlmICh0ZXh0
UnVuLmlzOEJpdCgpKQogICAgICAgICBiYXNlQ2hhcmFjdGVyID0gdGV4dFJ1bi5jaGFyYWN0ZXJz
OCgpW29mZnNldEluU3RyaW5nXTsKLSAgICBlbHNlIHsKLSAgICAgICAgVTE2X05FWFQodGV4dFJ1
bi5jaGFyYWN0ZXJzMTYoKSwgb2Zmc2V0SW5TdHJpbmcsIHRleHRSdW4ubGVuZ3RoKCksIGJhc2VD
aGFyYWN0ZXIpOwotICAgIH0KKyAgICBlbHNlCisgICAgICAgIFUxNl9ORVhUKHRleHRSdW4uY2hh
cmFjdGVyczE2KCksIG9mZnNldEluU3RyaW5nLCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4odGV4dFJ1
bi5sZW5ndGgoKSksIGJhc2VDaGFyYWN0ZXIpOwogICAgIAogICAgIC8vIHVfZ2V0SW50UHJvcGVy
dHlWYWx1ZSB3aXRoIFVDSEFSX0lERU9HUkFQSElDIGRvZXNuJ3QgcmV0dXJuIHRydWUgZm9yIEph
cGFuZXNlIG9yIEtvcmVhbiBjb2RlcG9pbnRzLgogICAgIC8vIEluc3RlYWQsIHdlIGNhbiB1c2Ug
dGhlICJVbmljb2RlIGFsbG9jYXRpb24gYmxvY2siIGZvciB0aGUgY2hhcmFjdGVyLgpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udC5oIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udC5oCmluZGV4IDFhZGZmMGE1NTg5NTJiOGVmMGQy
MDEwODBlMmE5NGYyOTM1YmE3YzIuLjExYTAzNzUxMTVkNWY3NzRjZDRkNzJhN2QzOTg2M2FlMTY3
MmYyZmUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnQu
aAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250LmgKQEAgLTEzMyw5
ICsxMzMsOSBAQCBwdWJsaWM6CiAgICAgdm9pZCB1cGRhdGUoUGFzc1JlZlB0cjxGb250U2VsZWN0
b3I+KSBjb25zdDsKIAogICAgIGVudW0gQ3VzdG9tRm9udE5vdFJlYWR5QWN0aW9uIHsgRG9Ob3RQ
YWludElmRm9udE5vdFJlYWR5LCBVc2VGYWxsYmFja0lmRm9udE5vdFJlYWR5IH07Ci0gICAgZmxv
YXQgZHJhd1RleHQoR3JhcGhpY3NDb250ZXh0KiwgY29uc3QgVGV4dFJ1biYsIGNvbnN0IEZsb2F0
UG9pbnQmLCBpbnQgZnJvbSA9IDAsIGludCB0byA9IC0xLCBDdXN0b21Gb250Tm90UmVhZHlBY3Rp
b24gPSBEb05vdFBhaW50SWZGb250Tm90UmVhZHkpIGNvbnN0OworICAgIGZsb2F0IGRyYXdUZXh0
KEdyYXBoaWNzQ29udGV4dCosIGNvbnN0IFRleHRSdW4mLCBjb25zdCBGbG9hdFBvaW50JiwgdW5z
aWduZWQgZnJvbSA9IDAsIGludCB0byA9IC0xLCBDdXN0b21Gb250Tm90UmVhZHlBY3Rpb24gPSBE
b05vdFBhaW50SWZGb250Tm90UmVhZHkpIGNvbnN0OwogICAgIHZvaWQgZHJhd0dseXBocyhHcmFw
aGljc0NvbnRleHQqLCBjb25zdCBTaW1wbGVGb250RGF0YSosIGNvbnN0IEdseXBoQnVmZmVyJiwg
aW50IGZyb20sIGludCBudW1HbHlwaHMsIGNvbnN0IEZsb2F0UG9pbnQmKSBjb25zdDsKLSAgICB2
b2lkIGRyYXdFbXBoYXNpc01hcmtzKEdyYXBoaWNzQ29udGV4dCosIGNvbnN0IFRleHRSdW4mLCBj
b25zdCBBdG9taWNTdHJpbmcmIG1hcmssIGNvbnN0IEZsb2F0UG9pbnQmLCBpbnQgZnJvbSA9IDAs
IGludCB0byA9IC0xKSBjb25zdDsKKyAgICB2b2lkIGRyYXdFbXBoYXNpc01hcmtzKEdyYXBoaWNz
Q29udGV4dCosIGNvbnN0IFRleHRSdW4mLCBjb25zdCBBdG9taWNTdHJpbmcmIG1hcmssIGNvbnN0
IEZsb2F0UG9pbnQmLCB1bnNpZ25lZCBmcm9tID0gMCwgaW50IHRvID0gLTEpIGNvbnN0OwogCiAg
ICAgRGFzaEFycmF5IGRhc2hlc0ZvckludGVyc2VjdGlvbnNXaXRoUmVjdChjb25zdCBUZXh0UnVu
JiwgY29uc3QgRmxvYXRQb2ludCYgdGV4dE9yaWdpbiwgY29uc3QgRmxvYXRSZWN0JiBsaW5lRXh0
ZW50cykgY29uc3Q7CiAKQEAgLTE0Nyw3ICsxNDcsNyBAQCBwdWJsaWM6CiAgICAgc3RhdGljIGZs
b2F0IHdpZHRoKFRleHRMYXlvdXQmLCB1bnNpZ25lZCBmcm9tLCB1bnNpZ25lZCBsZW4sIEhhc2hT
ZXQ8Y29uc3QgU2ltcGxlRm9udERhdGEqPiogZmFsbGJhY2tGb250cyA9IDApOwogCiAgICAgaW50
IG9mZnNldEZvclBvc2l0aW9uKGNvbnN0IFRleHRSdW4mLCBmbG9hdCBwb3NpdGlvbiwgYm9vbCBp
bmNsdWRlUGFydGlhbEdseXBocykgY29uc3Q7Ci0gICAgdm9pZCBhZGp1c3RTZWxlY3Rpb25SZWN0
Rm9yVGV4dChjb25zdCBUZXh0UnVuJiwgTGF5b3V0UmVjdCYgc2VsZWN0aW9uUmVjdCwgaW50IGZy
b20gPSAwLCBpbnQgdG8gPSAtMSkgY29uc3Q7CisgICAgdm9pZCBhZGp1c3RTZWxlY3Rpb25SZWN0
Rm9yVGV4dChjb25zdCBUZXh0UnVuJiwgTGF5b3V0UmVjdCYgc2VsZWN0aW9uUmVjdCwgdW5zaWdu
ZWQgZnJvbSA9IDAsIGludCB0byA9IC0xKSBjb25zdDsKIAogICAgIGJvb2wgaXNTbWFsbENhcHMo
KSBjb25zdCB7IHJldHVybiBtX2ZvbnREZXNjcmlwdGlvbi5zbWFsbENhcHMoKTsgfQogCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQu
Y3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0LmNw
cAppbmRleCAwZTQwMGVjODA3MzlkN2M5NWIyYzNhMTJlZmE0MDcyMWM0YmE2YWQzLi40MWMzODAx
OWY4MzExZTMxZTNjOGI4ZjI2YjcyOGQwZTdmODI3NWI0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dC5jcHAKQEAgLTYxLDcgKzYx
LDcgQEAgcHVibGljOgogCiAgICAgdW5zaWduZWQgb2Zmc2V0KCkgY29uc3QgeyByZXR1cm4gbV9v
ZmZzZXQ7IH0KICAgICB2b2lkIGluY3JlbWVudCgpIHsgbV9vZmZzZXQrKzsgfQotICAgIGJvb2wg
YXRFbmQoKSBjb25zdCB7IHJldHVybiAhbV90ZXh0UnVuIHx8IG1fb2Zmc2V0ID49IG1fdGV4dFJ1
bi0+bGVuZ3RoKCk7IH0KKyAgICBib29sIGF0RW5kKCkgY29uc3QgeyByZXR1cm4gIW1fdGV4dFJ1
biB8fCBtX29mZnNldCA+PSBzdGF0aWNfY2FzdDx1bnNpZ25lZD4obV90ZXh0UnVuLT5sZW5ndGgo
KSk7IH0KICAgICBVQ2hhciBjdXJyZW50KCkgY29uc3QgeyByZXR1cm4gKCptX3RleHRSdW4pW21f
b2Zmc2V0XTsgfQogICAgIFVDaGFyRGlyZWN0aW9uIGRpcmVjdGlvbigpIGNvbnN0IHsgcmV0dXJu
IGF0RW5kKCkgPyBVX09USEVSX05FVVRSQUwgOiB1X2NoYXJEaXJlY3Rpb24oY3VycmVudCgpKTsg
fQogCkBAIC03NCw3ICs3NCw3IEBAIHB1YmxpYzoKIAogcHJpdmF0ZToKICAgICBjb25zdCBUZXh0
UnVuKiBtX3RleHRSdW47Ci0gICAgaW50IG1fb2Zmc2V0OworICAgIHVuc2lnbmVkIG1fb2Zmc2V0
OwogfTsKIAogY2xhc3MgSW50ZXJwb2xhdGlvblF1YWxpdHlNYWludGFpbmVyIHsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0xhdGluMVRleHRJdGVyYXRvci5o
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvTGF0aW4xVGV4dEl0ZXJhdG9yLmgK
aW5kZXggYzQwMTg5YmZlOTMzMmEwZGViNDA2NDNjMTRkMWUyODA3N2RhZDM4OS4uNmI3ZTU5OWQw
MDIzZjk4YjMyNjA2ODIwOWY5YzYwMjcyNzdlZGJhZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvTGF0aW4xVGV4dEl0ZXJhdG9yLmgKKysrIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvTGF0aW4xVGV4dEl0ZXJhdG9yLmgKQEAgLTMwLDcgKzMw
LDcgQEAgY2xhc3MgTGF0aW4xVGV4dEl0ZXJhdG9yIHsKIHB1YmxpYzoKICAgICAvLyBUaGUgcGFz
c2VkIGluIExDaGFyIHBvaW50ZXIgc3RhcnRzIGF0ICdjdXJyZW50Q2hhcmFjdGVyJy4gVGhlIGl0
ZXJhdG9yIG9wZXJhdGVzIG9uIHRoZSByYW5nZSBbY3VycmVudENoYXJhY3RlciwgbGFzdENoYXJh
Y3Rlcl0uCiAgICAgLy8gJ2VuZENoYXJhY3RlcicgZGVub3RlcyB0aGUgbWF4aW11bSBsZW5ndGgg
b2YgdGhlIFVDaGFyIGFycmF5LCB3aGljaCBtaWdodCBleGNlZWQgJ2xhc3RDaGFyYWN0ZXInLgot
ICAgIExhdGluMVRleHRJdGVyYXRvcihjb25zdCBMQ2hhciogY2hhcmFjdGVycywgaW50IGN1cnJl
bnRDaGFyYWN0ZXIsIGludCBsYXN0Q2hhcmFjdGVyLCBpbnQgLyplbmRDaGFyYWN0ZXIqLykKKyAg
ICBMYXRpbjFUZXh0SXRlcmF0b3IoY29uc3QgTENoYXIqIGNoYXJhY3RlcnMsIHVuc2lnbmVkIGN1
cnJlbnRDaGFyYWN0ZXIsIHVuc2lnbmVkIGxhc3RDaGFyYWN0ZXIsIHVuc2lnbmVkIC8qZW5kQ2hh
cmFjdGVyKi8pCiAgICAgICAgIDogbV9jaGFyYWN0ZXJzKGNoYXJhY3RlcnMpCiAgICAgICAgICwg
bV9jdXJyZW50Q2hhcmFjdGVyKGN1cnJlbnRDaGFyYWN0ZXIpCiAgICAgICAgICwgbV9sYXN0Q2hh
cmFjdGVyKGxhc3RDaGFyYWN0ZXIpCkBAIC01MywxMyArNTMsMTMgQEAgcHVibGljOgogICAgICAg
ICBtX2N1cnJlbnRDaGFyYWN0ZXIgKz0gYWR2YW5jZUxlbmd0aDsKICAgICB9CiAKLSAgICBpbnQg
Y3VycmVudENoYXJhY3RlcigpIGNvbnN0IHsgcmV0dXJuIG1fY3VycmVudENoYXJhY3RlcjsgfQor
ICAgIHVuc2lnbmVkIGN1cnJlbnRDaGFyYWN0ZXIoKSBjb25zdCB7IHJldHVybiBtX2N1cnJlbnRD
aGFyYWN0ZXI7IH0KICAgICBjb25zdCBMQ2hhciogY2hhcmFjdGVycygpIGNvbnN0IHsgcmV0dXJu
IG1fY2hhcmFjdGVyczsgfQogCiBwcml2YXRlOgogICAgIGNvbnN0IExDaGFyKiBtX2NoYXJhY3Rl
cnM7Ci0gICAgaW50IG1fY3VycmVudENoYXJhY3RlcjsKLSAgICBpbnQgbV9sYXN0Q2hhcmFjdGVy
OworICAgIHVuc2lnbmVkIG1fY3VycmVudENoYXJhY3RlcjsKKyAgICB1bnNpZ25lZCBtX2xhc3RD
aGFyYWN0ZXI7CiB9OwogCiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9TaW1wbGVGb250RGF0YS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvU2ltcGxlRm9udERhdGEuaAppbmRleCA5ZGY4YzU3ZDYwYTc0MjAyYTc5MjQzNjdhYjM5Mzk3
Njc2NzUwNzYzLi44NmI5NWIxMjliYmE2YjI5ZDM1NmZhMGI1ZTg0ZTlkMjA0YzFjNDc2IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9TaW1wbGVGb250RGF0YS5o
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1NpbXBsZUZvbnREYXRhLmgK
QEAgLTg5LDcgKzg5LDcgQEAgcHVibGljOgogICAgICAgICB2aXJ0dWFsIHZvaWQgaW5pdGlhbGl6
ZUZvbnREYXRhKFNpbXBsZUZvbnREYXRhKiwgZmxvYXQgZm9udFNpemUpID0gMDsKICAgICAgICAg
dmlydHVhbCBmbG9hdCB3aWR0aEZvclNWR0dseXBoKEdseXBoLCBmbG9hdCBmb250U2l6ZSkgY29u
c3QgPSAwOwogICAgICAgICB2aXJ0dWFsIGJvb2wgZmlsbFNWR0dseXBoUGFnZShHbHlwaFBhZ2Uq
LCB1bnNpZ25lZCBvZmZzZXQsIHVuc2lnbmVkIGxlbmd0aCwgVUNoYXIqIGJ1ZmZlciwgdW5zaWdu
ZWQgYnVmZmVyTGVuZ3RoLCBjb25zdCBTaW1wbGVGb250RGF0YSopIGNvbnN0ID0gMDsKLSAgICAg
ICAgdmlydHVhbCBib29sIGFwcGx5U1ZHR2x5cGhTZWxlY3Rpb24oV2lkdGhJdGVyYXRvciYsIEds
eXBoRGF0YSYsIGJvb2wgbWlycm9yLCBpbnQgY3VycmVudENoYXJhY3RlciwgdW5zaWduZWQmIGFk
dmFuY2VMZW5ndGgpIGNvbnN0ID0gMDsKKyAgICAgICAgdmlydHVhbCBib29sIGFwcGx5U1ZHR2x5
cGhTZWxlY3Rpb24oV2lkdGhJdGVyYXRvciYsIEdseXBoRGF0YSYsIGJvb2wgbWlycm9yLCB1bnNp
Z25lZCBjdXJyZW50Q2hhcmFjdGVyLCB1bnNpZ25lZCYgYWR2YW5jZUxlbmd0aCkgY29uc3QgPSAw
OwogICAgIH07CiAKICAgICAvLyBVc2VkIHRvIGNyZWF0ZSBwbGF0Zm9ybSBmb250cy4KZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1N1cnJvZ2F0ZVBhaXJBd2Fy
ZVRleHRJdGVyYXRvci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9TdXJy
b2dhdGVQYWlyQXdhcmVUZXh0SXRlcmF0b3IuY3BwCmluZGV4IDkxNTVlNzExYThkYTgwZDRlYjNk
Y2Y1ZGE1YWMzMDVhMjhjYmVhNzkuLmNlNzA0YmUzZjIzNjAzYzgyZjg4ZDExNWNkZDZiZWMwZjU0
MTY3ZWUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1N1cnJv
Z2F0ZVBhaXJBd2FyZVRleHRJdGVyYXRvci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvU3Vycm9nYXRlUGFpckF3YXJlVGV4dEl0ZXJhdG9yLmNwcApAQCAtMjcsNyAr
MjcsNyBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLVN1cnJvZ2F0ZVBhaXJBd2FyZVRleHRJ
dGVyYXRvcjo6U3Vycm9nYXRlUGFpckF3YXJlVGV4dEl0ZXJhdG9yKGNvbnN0IFVDaGFyKiBjaGFy
YWN0ZXJzLCBpbnQgY3VycmVudENoYXJhY3RlciwgaW50IGxhc3RDaGFyYWN0ZXIsIGludCBlbmRD
aGFyYWN0ZXIpCitTdXJyb2dhdGVQYWlyQXdhcmVUZXh0SXRlcmF0b3I6OlN1cnJvZ2F0ZVBhaXJB
d2FyZVRleHRJdGVyYXRvcihjb25zdCBVQ2hhciogY2hhcmFjdGVycywgdW5zaWduZWQgY3VycmVu
dENoYXJhY3RlciwgdW5zaWduZWQgbGFzdENoYXJhY3RlciwgdW5zaWduZWQgZW5kQ2hhcmFjdGVy
KQogICAgIDogbV9jaGFyYWN0ZXJzKGNoYXJhY3RlcnMpCiAgICAgLCBtX2N1cnJlbnRDaGFyYWN0
ZXIoY3VycmVudENoYXJhY3RlcikKICAgICAsIG1fbGFzdENoYXJhY3RlcihsYXN0Q2hhcmFjdGVy
KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvU3Vycm9nYXRl
UGFpckF3YXJlVGV4dEl0ZXJhdG9yLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9TdXJyb2dhdGVQYWlyQXdhcmVUZXh0SXRlcmF0b3IuaAppbmRleCA4NWM5Njk0Yzc2YTIyY2Rl
YWVlYjNiYTg0MWIxMGEwYTUwMzE2ODEzLi4xYTcxNWMwY2EyZDI0ODNiMjQ3Mjk5NzVlYjc1Yzlm
YTIyMzZlZDQ5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9T
dXJyb2dhdGVQYWlyQXdhcmVUZXh0SXRlcmF0b3IuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9TdXJyb2dhdGVQYWlyQXdhcmVUZXh0SXRlcmF0b3IuaApAQCAtMzAsNyAr
MzAsNyBAQCBjbGFzcyBTdXJyb2dhdGVQYWlyQXdhcmVUZXh0SXRlcmF0b3IgewogcHVibGljOgog
ICAgIC8vIFRoZSBwYXNzZWQgaW4gVUNoYXIgcG9pbnRlciBzdGFydHMgYXQgJ2N1cnJlbnRDaGFy
YWN0ZXInLiBUaGUgaXRlcmF0b3Igb3BlcmF0b2VzIG9uIHRoZSByYW5nZSBbY3VycmVudENoYXJh
Y3RlciwgbGFzdENoYXJhY3Rlcl0uCiAgICAgLy8gJ2VuZENoYXJhY3RlcicgZGVub3RlcyB0aGUg
bWF4aW11bSBsZW5ndGggb2YgdGhlIFVDaGFyIGFycmF5LCB3aGljaCBtaWdodCBleGNlZWQgJ2xh
c3RDaGFyYWN0ZXInLgotICAgIFN1cnJvZ2F0ZVBhaXJBd2FyZVRleHRJdGVyYXRvcihjb25zdCBV
Q2hhciosIGludCBjdXJyZW50Q2hhcmFjdGVyLCBpbnQgbGFzdENoYXJhY3RlciwgaW50IGVuZENo
YXJhY3Rlcik7CisgICAgU3Vycm9nYXRlUGFpckF3YXJlVGV4dEl0ZXJhdG9yKGNvbnN0IFVDaGFy
KiwgdW5zaWduZWQgY3VycmVudENoYXJhY3RlciwgdW5zaWduZWQgbGFzdENoYXJhY3RlciwgdW5z
aWduZWQgZW5kQ2hhcmFjdGVyKTsKIAogICAgIGlubGluZSBib29sIGNvbnN1bWUoVUNoYXIzMiYg
Y2hhcmFjdGVyLCB1bnNpZ25lZCYgY2x1c3Rlckxlbmd0aCkKICAgICB7CkBAIC01Miw3ICs1Miw3
IEBAIHB1YmxpYzoKICAgICAgICAgbV9jdXJyZW50Q2hhcmFjdGVyICs9IGFkdmFuY2VMZW5ndGg7
CiAgICAgfQogCi0gICAgaW50IGN1cnJlbnRDaGFyYWN0ZXIoKSBjb25zdCB7IHJldHVybiBtX2N1
cnJlbnRDaGFyYWN0ZXI7IH0KKyAgICB1bnNpZ25lZCBjdXJyZW50Q2hhcmFjdGVyKCkgY29uc3Qg
eyByZXR1cm4gbV9jdXJyZW50Q2hhcmFjdGVyOyB9CiAgICAgY29uc3QgVUNoYXIqIGNoYXJhY3Rl
cnMoKSBjb25zdCB7IHJldHVybiBtX2NoYXJhY3RlcnM7IH0KIAogcHJpdmF0ZToKQEAgLTYwLDkg
KzYwLDkgQEAgcHJpdmF0ZToKICAgICBVQ2hhcjMyIG5vcm1hbGl6ZVZvaWNpbmdNYXJrcygpOwog
CiAgICAgY29uc3QgVUNoYXIqIG1fY2hhcmFjdGVyczsKLSAgICBpbnQgbV9jdXJyZW50Q2hhcmFj
dGVyOwotICAgIGludCBtX2xhc3RDaGFyYWN0ZXI7Ci0gICAgaW50IG1fZW5kQ2hhcmFjdGVyOwor
ICAgIHVuc2lnbmVkIG1fY3VycmVudENoYXJhY3RlcjsKKyAgICB1bnNpZ25lZCBtX2xhc3RDaGFy
YWN0ZXI7CisgICAgdW5zaWduZWQgbV9lbmRDaGFyYWN0ZXI7CiB9OwogCiB9CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9UZXh0UnVuLmggYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9UZXh0UnVuLmgKaW5kZXggMzcyMDg0NTZlYjNjOWMzNjVk
YzU2MmZjMzVlMDM0YzBlMTUyNTJkMS4uMTg0MWQ4N2NjNGQzNDUzOGNjNDM1ZTJlODAwMWMyMDdj
ZGI2YjU5MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvVGV4
dFJ1bi5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1RleHRSdW4uaApA
QCAtMTcxLDggKzE3MSw4IEBAIHB1YmxpYzoKICAgICBjb25zdCBVQ2hhciogY2hhcmFjdGVyczE2
KCkgY29uc3QgeyBBU1NFUlQoIWlzOEJpdCgpKTsgcmV0dXJuIG1fZGF0YS5jaGFyYWN0ZXJzMTY7
IH0KICAgICAKICAgICBib29sIGlzOEJpdCgpIGNvbnN0IHsgcmV0dXJuIG1faXM4Qml0OyB9Ci0g
ICAgaW50IGxlbmd0aCgpIGNvbnN0IHsgcmV0dXJuIG1fbGVuOyB9Ci0gICAgaW50IGNoYXJhY3Rl
cnNMZW5ndGgoKSBjb25zdCB7IHJldHVybiBtX2NoYXJhY3RlcnNMZW5ndGg7IH0KKyAgICB1bnNp
Z25lZCBsZW5ndGgoKSBjb25zdCB7IHJldHVybiBtX2xlbjsgfQorICAgIHVuc2lnbmVkIGNoYXJh
Y3RlcnNMZW5ndGgoKSBjb25zdCB7IHJldHVybiBtX2NoYXJhY3RlcnNMZW5ndGg7IH0KICAgICBT
dHJpbmcgc3RyaW5nKCkgY29uc3QKICAgICB7CiAgICAgICAgIGlmIChpczhCaXQoKSkKQEAgLTIx
Nyw3ICsyMTcsNyBAQCBwdWJsaWM6CiAgICAgICAgIHZpcnR1YWwgflJlbmRlcmluZ0NvbnRleHQo
KSB7IH0KIAogI2lmIEVOQUJMRShTVkdfRk9OVFMpCi0gICAgICAgIHZpcnR1YWwgR2x5cGhEYXRh
IGdseXBoRGF0YUZvckNoYXJhY3Rlcihjb25zdCBGb250JiwgV2lkdGhJdGVyYXRvciYsIFVDaGFy
MzIgY2hhcmFjdGVyLCBib29sIG1pcnJvciwgaW50IGN1cnJlbnRDaGFyYWN0ZXIsIHVuc2lnbmVk
JiBhZHZhbmNlTGVuZ3RoKSA9IDA7CisgICAgICAgIHZpcnR1YWwgR2x5cGhEYXRhIGdseXBoRGF0
YUZvckNoYXJhY3Rlcihjb25zdCBGb250JiwgV2lkdGhJdGVyYXRvciYsIFVDaGFyMzIgY2hhcmFj
dGVyLCBib29sIG1pcnJvciwgdW5zaWduZWQgY3VycmVudENoYXJhY3RlciwgdW5zaWduZWQmIGFk
dmFuY2VMZW5ndGgpID0gMDsKICAgICAgICAgdmlydHVhbCB2b2lkIGRyYXdTVkdHbHlwaHMoR3Jh
cGhpY3NDb250ZXh0KiwgY29uc3QgU2ltcGxlRm9udERhdGEqLCBjb25zdCBHbHlwaEJ1ZmZlciYs
IGludCBmcm9tLCBpbnQgdG8sIGNvbnN0IEZsb2F0UG9pbnQmKSBjb25zdCA9IDA7CiAgICAgICAg
IHZpcnR1YWwgZmxvYXQgZmxvYXRXaWR0aFVzaW5nU1ZHRm9udChjb25zdCBGb250JiwgY29uc3Qg
VGV4dFJ1biYsIGludCYgY2hhcnNDb25zdW1lZCwgU3RyaW5nJiBnbHlwaE5hbWUpIGNvbnN0ID0g
MDsKICAgICAgICAgdmlydHVhbCBib29sIGFwcGx5U1ZHS2VybmluZyhjb25zdCBTaW1wbGVGb250
RGF0YSosIFdpZHRoSXRlcmF0b3ImLCBHbHlwaEJ1ZmZlciosIGludCBmcm9tKSBjb25zdCA9IDA7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9XaWR0aEl0ZXJh
dG9yLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1dpZHRoSXRlcmF0b3Iu
Y3BwCmluZGV4IDc3N2RjMjk3OGRiZjk3Y2JkMTc3M2ZmNmEwY2JmYjAwNTNjNmNiNTkuLmM1Y2Zh
MjEzYjk3YjYxYThjMjEyOGViMjFkNzU3MWIzY2Q1OGU5ZmMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1dpZHRoSXRlcmF0b3IuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1dpZHRoSXRlcmF0b3IuY3BwCkBAIC02OCw3ICs2OCw3
IEBAIFdpZHRoSXRlcmF0b3I6OldpZHRoSXRlcmF0b3IoY29uc3QgRm9udCogZm9udCwgY29uc3Qg
VGV4dFJ1biYgcnVuLCBIYXNoU2V0PGNvbnN0CiAgICAgfQogfQogCi1HbHlwaERhdGEgV2lkdGhJ
dGVyYXRvcjo6Z2x5cGhEYXRhRm9yQ2hhcmFjdGVyKFVDaGFyMzIgY2hhcmFjdGVyLCBib29sIG1p
cnJvciwgaW50IGN1cnJlbnRDaGFyYWN0ZXIsIHVuc2lnbmVkJiBhZHZhbmNlTGVuZ3RoKQorR2x5
cGhEYXRhIFdpZHRoSXRlcmF0b3I6OmdseXBoRGF0YUZvckNoYXJhY3RlcihVQ2hhcjMyIGNoYXJh
Y3RlciwgYm9vbCBtaXJyb3IsIHVuc2lnbmVkIGN1cnJlbnRDaGFyYWN0ZXIsIHVuc2lnbmVkJiBh
ZHZhbmNlTGVuZ3RoKQogewogICAgIEFTU0VSVChtX2ZvbnQpOwogCkBAIC0xNzIsNyArMTcyLDcg
QEAgaW5saW5lIHVuc2lnbmVkIFdpZHRoSXRlcmF0b3I6OmFkdmFuY2VJbnRlcm5hbChUZXh0SXRl
cmF0b3ImIHRleHRJdGVyYXRvciwgR2x5cGgKICAgICBDaGFyYWN0ZXJzVHJlYXRlZEFzU3BhY2Ug
Y2hhcmFjdGVyc1RyZWF0ZWRBc1NwYWNlOwogICAgIHdoaWxlICh0ZXh0SXRlcmF0b3IuY29uc3Vt
ZShjaGFyYWN0ZXIsIGNsdXN0ZXJMZW5ndGgpKSB7CiAgICAgICAgIHVuc2lnbmVkIGFkdmFuY2VM
ZW5ndGggPSBjbHVzdGVyTGVuZ3RoOwotICAgICAgICBpbnQgY3VycmVudENoYXJhY3RlciA9IHRl
eHRJdGVyYXRvci5jdXJyZW50Q2hhcmFjdGVyKCk7CisgICAgICAgIHVuc2lnbmVkIGN1cnJlbnRD
aGFyYWN0ZXIgPSB0ZXh0SXRlcmF0b3IuY3VycmVudENoYXJhY3RlcigpOwogICAgICAgICBjb25z
dCBHbHlwaERhdGEmIGdseXBoRGF0YSA9IGdseXBoRGF0YUZvckNoYXJhY3RlcihjaGFyYWN0ZXIs
IHJ0bCwgY3VycmVudENoYXJhY3RlciwgYWR2YW5jZUxlbmd0aCk7CiAgICAgICAgIEdseXBoIGds
eXBoID0gZ2x5cGhEYXRhLmdseXBoOwogICAgICAgICBjb25zdCBTaW1wbGVGb250RGF0YSogZm9u
dERhdGEgPSBnbHlwaERhdGEuZm9udERhdGE7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9XaWR0aEl0ZXJhdG9yLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9XaWR0aEl0ZXJhdG9yLmgKaW5kZXggY2QwNmQ3YzRkY2M0MTIwYTY2YTNkMDQ0
ODdhZTg4ZmRjYTEzOThiNi4uMjM5NjY2NjlkZGQzMjUyMWU2MDllZTNlNTFlN2Y5YTJkNWIwYjlj
OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvV2lkdGhJdGVy
YXRvci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1dpZHRoSXRlcmF0
b3IuaApAQCAtODcsNyArODcsNyBAQCBwdWJsaWM6CiAjZW5kaWYKIAogcHJpdmF0ZToKLSAgICBH
bHlwaERhdGEgZ2x5cGhEYXRhRm9yQ2hhcmFjdGVyKFVDaGFyMzIsIGJvb2wgbWlycm9yLCBpbnQg
Y3VycmVudENoYXJhY3RlciwgdW5zaWduZWQmIGFkdmFuY2VMZW5ndGgpOworICAgIEdseXBoRGF0
YSBnbHlwaERhdGFGb3JDaGFyYWN0ZXIoVUNoYXIzMiwgYm9vbCBtaXJyb3IsIHVuc2lnbmVkIGN1
cnJlbnRDaGFyYWN0ZXIsIHVuc2lnbmVkJiBhZHZhbmNlTGVuZ3RoKTsKICAgICB0ZW1wbGF0ZSA8
dHlwZW5hbWUgVGV4dEl0ZXJhdG9yPgogICAgIGlubGluZSB1bnNpZ25lZCBhZHZhbmNlSW50ZXJu
YWwoVGV4dEl0ZXJhdG9yJiwgR2x5cGhCdWZmZXIqKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL0lubGluZVRleHRCb3guY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL0lubGluZVRleHRCb3guY3BwCmluZGV4IGFhNDRkY2U3YzRiMDMyYzA0NWRkY2Y3YzJhZTFl
Y2UxZmM0MzU0ZDEuLjE2YTZlM2RhMGUwZGEyNjRlZmE3NzJlYzhmY2Q0NTk5ZmE2YjVjZmUgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9JbmxpbmVUZXh0Qm94LmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvSW5saW5lVGV4dEJveC5jcHAKQEAgLTE5NiwxMCAr
MTk2LDEyIEBAIExheW91dFVuaXQgSW5saW5lVGV4dEJveDo6c2VsZWN0aW9uSGVpZ2h0KCkgY29u
c3QKICAgICByZXR1cm4gcm9vdCgpLnNlbGVjdGlvbkhlaWdodCgpOwogfQogCi1ib29sIElubGlu
ZVRleHRCb3g6OmlzU2VsZWN0ZWQoaW50IHN0YXJ0UG9zLCBpbnQgZW5kUG9zKSBjb25zdAorYm9v
bCBJbmxpbmVUZXh0Qm94Ojppc1NlbGVjdGVkKHVuc2lnbmVkIHN0YXJ0UG9zLCB1bnNpZ25lZCBl
bmRQb3MpIGNvbnN0CiB7Ci0gICAgaW50IHNQb3MgPSBzdGQ6Om1heChzdGFydFBvcyAtIG1fc3Rh
cnQsIDApOwotICAgIGludCBlUG9zID0gc3RkOjptaW4oZW5kUG9zIC0gbV9zdGFydCwgc3RhdGlj
X2Nhc3Q8aW50PihtX2xlbikpOworICAgIHVuc2lnbmVkIHNQb3MgPSBzdGFydFBvcyA+IG1fc3Rh
cnQgPyBzdGFydFBvcyAtIG1fc3RhcnQgOiAwOworICAgIGlmIChlbmRQb3MgPCBtX3N0YXJ0KQor
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgdW5zaWduZWQgZVBvcyA9IHN0ZDo6bWluKGVuZFBv
cyAtIG1fc3RhcnQsIHN0YXRpY19jYXN0PHVuc2lnbmVkPihtX2xlbikpOwogICAgIHJldHVybiAo
c1BvcyA8IGVQb3MpOwogfQogCkBAIC0yMDcsMTAgKzIwOSwxMyBAQCBSZW5kZXJPYmplY3Q6OlNl
bGVjdGlvblN0YXRlIElubGluZVRleHRCb3g6OnNlbGVjdGlvblN0YXRlKCkKIHsKICAgICBSZW5k
ZXJPYmplY3Q6OlNlbGVjdGlvblN0YXRlIHN0YXRlID0gcmVuZGVyZXIoKS5zZWxlY3Rpb25TdGF0
ZSgpOwogICAgIGlmIChzdGF0ZSA9PSBSZW5kZXJPYmplY3Q6OlNlbGVjdGlvblN0YXJ0IHx8IHN0
YXRlID09IFJlbmRlck9iamVjdDo6U2VsZWN0aW9uRW5kIHx8IHN0YXRlID09IFJlbmRlck9iamVj
dDo6U2VsZWN0aW9uQm90aCkgewotICAgICAgICBpbnQgc3RhcnRQb3MsIGVuZFBvczsKLSAgICAg
ICAgcmVuZGVyZXIoKS5zZWxlY3Rpb25TdGFydEVuZChzdGFydFBvcywgZW5kUG9zKTsKKyAgICAg
ICAgaW50IGluaXRpYWxTdGFydFBvcywgaW5pdGlhbEVuZFBvczsKKyAgICAgICAgcmVuZGVyZXIo
KS5zZWxlY3Rpb25TdGFydEVuZChpbml0aWFsU3RhcnRQb3MsIGluaXRpYWxFbmRQb3MpOworICAg
ICAgICBBU1NFUlQoaW5pdGlhbFN0YXJ0UG9zID49IDAgJiYgaW5pdGlhbEVuZFBvcyA+PSAwKTsK
KyAgICAgICAgdW5zaWduZWQgc3RhcnRQb3MgPSBpbml0aWFsU3RhcnRQb3M7CisgICAgICAgIHVu
c2lnbmVkIGVuZFBvcyA9IGluaXRpYWxFbmRQb3M7CiAgICAgICAgIC8vIFRoZSBwb3NpdGlvbiBh
ZnRlciBhIGhhcmQgbGluZSBicmVhayBpcyBjb25zaWRlcmVkIHRvIGJlIHBhc3QgaXRzIGVuZC4K
LSAgICAgICAgaW50IGxhc3RTZWxlY3RhYmxlID0gc3RhcnQoKSArIGxlbigpIC0gKGlzTGluZUJy
ZWFrKCkgPyAxIDogMCk7CisgICAgICAgIHVuc2lnbmVkIGxhc3RTZWxlY3RhYmxlID0gc3RhcnQo
KSArIGxlbigpIC0gKGlzTGluZUJyZWFrKCkgPyAxIDogMCk7CiAKICAgICAgICAgYm9vbCBzdGFy
dCA9IChzdGF0ZSAhPSBSZW5kZXJPYmplY3Q6OlNlbGVjdGlvbkVuZCAmJiBzdGFydFBvcyA+PSBt
X3N0YXJ0ICYmIHN0YXJ0UG9zIDwgbV9zdGFydCArIG1fbGVuKTsKICAgICAgICAgYm9vbCBlbmQg
PSAoc3RhdGUgIT0gUmVuZGVyT2JqZWN0OjpTZWxlY3Rpb25TdGFydCAmJiBlbmRQb3MgPiBtX3N0
YXJ0ICYmIGVuZFBvcyA8PSBsYXN0U2VsZWN0YWJsZSk7CkBAIC0yMzEsNyArMjM2LDcgQEAgUmVu
ZGVyT2JqZWN0OjpTZWxlY3Rpb25TdGF0ZSBJbmxpbmVUZXh0Qm94OjpzZWxlY3Rpb25TdGF0ZSgp
CiAgICAgaWYgKG1fdHJ1bmNhdGlvbiAhPSBjTm9UcnVuY2F0aW9uICYmIHJvb3QoKS5lbGxpcHNp
c0JveCgpKSB7CiAgICAgICAgIEVsbGlwc2lzQm94KiBlbGxpcHNpcyA9IHJvb3QoKS5lbGxpcHNp
c0JveCgpOwogICAgICAgICBpZiAoc3RhdGUgIT0gUmVuZGVyT2JqZWN0OjpTZWxlY3Rpb25Ob25l
KSB7Ci0gICAgICAgICAgICBpbnQgc3RhcnQsIGVuZDsKKyAgICAgICAgICAgIHVuc2lnbmVkIHN0
YXJ0LCBlbmQ7CiAgICAgICAgICAgICBzZWxlY3Rpb25TdGFydEVuZChzdGFydCwgZW5kKTsKICAg
ICAgICAgICAgIC8vIFRoZSBlbGxpcHNpcyBzaG91bGQgYmUgY29uc2lkZXJlZCB0byBiZSBzZWxl
Y3RlZCBpZiB0aGUgZW5kIG9mCiAgICAgICAgICAgICAvLyB0aGUgc2VsZWN0aW9uIGlzIHBhc3Qg
dGhlIGJlZ2lubmluZyBvZiB0aGUgdHJ1bmNhdGlvbiBhbmQgdGhlCkBAIC0yNDYsNyArMjUxLDcg
QEAgUmVuZGVyT2JqZWN0OjpTZWxlY3Rpb25TdGF0ZSBJbmxpbmVUZXh0Qm94OjpzZWxlY3Rpb25T
dGF0ZSgpCiAgICAgcmV0dXJuIHN0YXRlOwogfQogCi1zdGF0aWMgdm9pZCBhZGp1c3RDaGFyYWN0
ZXJzQW5kTGVuZ3RoRm9ySHlwaGVuKEJ1ZmZlckZvckFwcGVuZGluZ0h5cGhlbiYgY2hhcmFjdGVy
c1dpdGhIeXBoZW4sIGNvbnN0IFJlbmRlclN0eWxlJiBzdHlsZSwgU3RyaW5nJiBzdHJpbmcsIGlu
dCYgbGVuZ3RoKQorc3RhdGljIHZvaWQgYWRqdXN0Q2hhcmFjdGVyc0FuZExlbmd0aEZvckh5cGhl
bihCdWZmZXJGb3JBcHBlbmRpbmdIeXBoZW4mIGNoYXJhY3RlcnNXaXRoSHlwaGVuLCBjb25zdCBS
ZW5kZXJTdHlsZSYgc3R5bGUsIFN0cmluZyYgc3RyaW5nLCB1bnNpZ25lZCYgbGVuZ3RoKQogewog
ICAgIGNvbnN0IEF0b21pY1N0cmluZyYgaHlwaGVuU3RyaW5nID0gc3R5bGUuaHlwaGVuU3RyaW5n
KCk7CiAgICAgY2hhcmFjdGVyc1dpdGhIeXBoZW4ucmVzZXJ2ZUNhcGFjaXR5KGxlbmd0aCArIGh5
cGhlblN0cmluZy5sZW5ndGgoKSk7CkBAIC0yNjYsMTAgKzI3MSwxNCBAQCBzdGF0aWMgY29uc3Qg
Rm9udCYgZm9udFRvVXNlKGNvbnN0IFJlbmRlclN0eWxlJiBzdHlsZSwgY29uc3QgUmVuZGVyVGV4
dCYgcmVuZGVyZQogICAgIHJldHVybiBzdHlsZS5mb250KCk7CiB9CiAKLUxheW91dFJlY3QgSW5s
aW5lVGV4dEJveDo6bG9jYWxTZWxlY3Rpb25SZWN0KGludCBzdGFydFBvcywgaW50IGVuZFBvcykg
Y29uc3QKK0xheW91dFJlY3QgSW5saW5lVGV4dEJveDo6bG9jYWxTZWxlY3Rpb25SZWN0KHVuc2ln
bmVkIHN0YXJ0UG9zLCB1bnNpZ25lZCBlbmRQb3MpIGNvbnN0CiB7Ci0gICAgaW50IHNQb3MgPSBz
dGQ6Om1heChzdGFydFBvcyAtIG1fc3RhcnQsIDApOwotICAgIGludCBlUG9zID0gc3RkOjptaW4o
ZW5kUG9zIC0gbV9zdGFydCwgKGludCltX2xlbik7CisgICAgdW5zaWduZWQgc1BvcyA9IHN0YXJ0
UG9zID4gbV9zdGFydCA/IHN0YXJ0UG9zIC0gbV9zdGFydCA6IDA7CisgICAgCisgICAgaWYgKGVu
ZFBvcyA8IG1fc3RhcnQpCisgICAgICAgIHJldHVybiBMYXlvdXRSZWN0KCk7CisKKyAgICB1bnNp
Z25lZCBlUG9zID0gc3RkOjptaW4oZW5kUG9zIC0gbV9zdGFydCwgc3RhdGljX2Nhc3Q8dW5zaWdu
ZWQ+KG1fbGVuKSk7CiAgICAgCiAgICAgaWYgKHNQb3MgPiBlUG9zKQogICAgICAgICByZXR1cm4g
TGF5b3V0UmVjdCgpOwpAQCAtMjg0LDEyICsyOTMsMTAgQEAgTGF5b3V0UmVjdCBJbmxpbmVUZXh0
Qm94Ojpsb2NhbFNlbGVjdGlvblJlY3QoaW50IHN0YXJ0UG9zLCBpbnQgZW5kUG9zKSBjb25zdAog
ICAgIEJ1ZmZlckZvckFwcGVuZGluZ0h5cGhlbiBjaGFyYWN0ZXJzV2l0aEh5cGhlbjsKICAgICBi
b29sIHJlc3BlY3RIeXBoZW4gPSBlUG9zID09IG1fbGVuICYmIGhhc0h5cGhlbigpOwogICAgIFRl
eHRSdW4gdGV4dFJ1biA9IGNvbnN0cnVjdFRleHRSdW4obGluZVN0eWxlLCBmb250LCByZXNwZWN0
SHlwaGVuID8gJmNoYXJhY3RlcnNXaXRoSHlwaGVuIDogMCk7Ci0gICAgaWYgKHJlc3BlY3RIeXBo
ZW4pCi0gICAgICAgIGVuZFBvcyA9IHRleHRSdW4ubGVuZ3RoKCk7CiAKICAgICBMYXlvdXRSZWN0
IHNlbGVjdGlvblJlY3QgPSBMYXlvdXRSZWN0KExheW91dFBvaW50KGxvZ2ljYWxMZWZ0KCksIHNl
bGVjdGlvblRvcCksIExheW91dFNpemUobV9sb2dpY2FsV2lkdGgsIHNlbGVjdGlvbkhlaWdodCkp
OwogICAgIC8vIEF2b2lkIGNvbXB1dGluZyB0aGUgZm9udCB3aWR0aCB3aGVuIHRoZSBlbnRpcmUg
bGluZSBib3ggaXMgc2VsZWN0ZWQgYXMgYW4gb3B0aW1pemF0aW9uLgotICAgIGlmIChzUG9zIHx8
IGVQb3MgIT0gc3RhdGljX2Nhc3Q8aW50PihtX2xlbikpCisgICAgaWYgKHNQb3MgfHwgZVBvcyAh
PSBtX2xlbikKICAgICAgICAgZm9udC5hZGp1c3RTZWxlY3Rpb25SZWN0Rm9yVGV4dCh0ZXh0UnVu
LCBzZWxlY3Rpb25SZWN0LCBzUG9zLCBlUG9zKTsKICAgICBJbnRSZWN0IHNuYXBwZWRTZWxlY3Rp
b25SZWN0ID0gZW5jbG9zaW5nSW50UmVjdChzZWxlY3Rpb25SZWN0KTsKICAgICBMYXlvdXRVbml0
IGxvZ2ljYWxXaWR0aCA9IHNuYXBwZWRTZWxlY3Rpb25SZWN0LndpZHRoKCk7CkBAIC02MDYsMTUg
KzYxMywxNiBAQCB2b2lkIElubGluZVRleHRCb3g6OnBhaW50KFBhaW50SW5mbyYgcGFpbnRJbmZv
LCBjb25zdCBMYXlvdXRQb2ludCYgcGFpbnRPZmZzZXQsCiAgICAgfQogCiAgICAgLy8gMi4gTm93
IHBhaW50IHRoZSBmb3JlZ3JvdW5kLCBpbmNsdWRpbmcgdGV4dCBhbmQgZGVjb3JhdGlvbnMgbGlr
ZSB1bmRlcmxpbmUvb3ZlcmxpbmUgKGluIHF1aXJrcyBtb2RlIG9ubHkpLgotICAgIGludCBsZW5n
dGggPSBtX2xlbjsKLSAgICBpbnQgbWF4aW11bUxlbmd0aDsKKyAgICB1bnNpZ25lZCBsZW5ndGgg
PSBtX2xlbjsKKyAgICB1bnNpZ25lZCBtYXhpbXVtTGVuZ3RoOwogICAgIFN0cmluZyBzdHJpbmc7
CiAgICAgaWYgKCFjb21iaW5lZFRleHQpIHsKICAgICAgICAgc3RyaW5nID0gcmVuZGVyZXIoKS50
ZXh0KCk7Ci0gICAgICAgIGlmIChzdGF0aWNfY2FzdDx1bnNpZ25lZD4obGVuZ3RoKSAhPSBzdHJp
bmcubGVuZ3RoKCkgfHwgbV9zdGFydCkgewotICAgICAgICAgICAgQVNTRVJUX1dJVEhfU0VDVVJJ
VFlfSU1QTElDQVRJT04oc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KG1fc3RhcnQgKyBsZW5ndGgpIDw9
IHN0cmluZy5sZW5ndGgoKSk7CisgICAgICAgIGlmIChsZW5ndGggIT0gc3RyaW5nLmxlbmd0aCgp
IHx8IG1fc3RhcnQpIHsKKyAgICAgICAgICAgIEFTU0VSVF9XSVRIX1NFQ1VSSVRZX0lNUExJQ0FU
SU9OKG1fc3RhcnQgKyBsZW5ndGggPD0gc3RyaW5nLmxlbmd0aCgpKTsKICAgICAgICAgICAgIHN0
cmluZyA9IHN0cmluZy5zdWJzdHJpbmdTaGFyaW5nSW1wbChtX3N0YXJ0LCBsZW5ndGgpOwogICAg
ICAgICB9CisgICAgICAgIEFTU0VSVChyZW5kZXJlcigpLnRleHRMZW5ndGgoKSA+PSBtX3N0YXJ0
KTsKICAgICAgICAgbWF4aW11bUxlbmd0aCA9IHJlbmRlcmVyKCkudGV4dExlbmd0aCgpIC0gbV9z
dGFydDsKICAgICB9IGVsc2UgewogICAgICAgICBjb21iaW5lZFRleHQtPmdldFN0cmluZ1RvUmVu
ZGVyKG1fc3RhcnQsIHN0cmluZywgbGVuZ3RoKTsKQEAgLTYyNiwxNCArNjM0LDE0IEBAIHZvaWQg
SW5saW5lVGV4dEJveDo6cGFpbnQoUGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0IExheW91dFBv
aW50JiBwYWludE9mZnNldCwKICAgICBpZiAoaGFzSHlwaGVuKCkpCiAgICAgICAgIGxlbmd0aCA9
IHRleHRSdW4ubGVuZ3RoKCk7CiAKLSAgICBpbnQgc1BvcyA9IDA7Ci0gICAgaW50IGVQb3MgPSAw
OworICAgIHVuc2lnbmVkIHNQb3MgPSAwOworICAgIHVuc2lnbmVkIGVQb3MgPSAwOwogICAgIGlm
IChoYXZlU2VsZWN0aW9uICYmIChwYWludFNlbGVjdGVkVGV4dE9ubHkgfHwgcGFpbnRTZWxlY3Rl
ZFRleHRTZXBhcmF0ZWx5KSkKICAgICAgICAgc2VsZWN0aW9uU3RhcnRFbmQoc1BvcywgZVBvcyk7
CiAKICAgICBpZiAobV90cnVuY2F0aW9uICE9IGNOb1RydW5jYXRpb24pIHsKLSAgICAgICAgc1Bv
cyA9IHN0ZDo6bWluPGludD4oc1BvcywgbV90cnVuY2F0aW9uKTsKLSAgICAgICAgZVBvcyA9IHN0
ZDo6bWluPGludD4oZVBvcywgbV90cnVuY2F0aW9uKTsKKyAgICAgICAgc1BvcyA9IHN0ZDo6bWlu
KHNQb3MsIHN0YXRpY19jYXN0PHVuc2lnbmVkPihtX3RydW5jYXRpb24pKTsKKyAgICAgICAgZVBv
cyA9IHN0ZDo6bWluKGVQb3MsIHN0YXRpY19jYXN0PHVuc2lnbmVkPihtX3RydW5jYXRpb24pKTsK
ICAgICAgICAgbGVuZ3RoID0gbV90cnVuY2F0aW9uOwogICAgIH0KIApAQCAtNjkzLDIyICs3MDEs
MjcgQEAgdm9pZCBJbmxpbmVUZXh0Qm94OjpwYWludChQYWludEluZm8mIHBhaW50SW5mbywgY29u
c3QgTGF5b3V0UG9pbnQmIHBhaW50T2Zmc2V0LAogICAgICAgICBjb250ZXh0LT5jb25jYXRDVE0o
cm90YXRpb24oYm94UmVjdCwgQ291bnRlcmNsb2Nrd2lzZSkpOwogfQogCi12b2lkIElubGluZVRl
eHRCb3g6OnNlbGVjdGlvblN0YXJ0RW5kKGludCYgc1BvcywgaW50JiBlUG9zKQordm9pZCBJbmxp
bmVUZXh0Qm94OjpzZWxlY3Rpb25TdGFydEVuZCh1bnNpZ25lZCYgc1BvcywgdW5zaWduZWQmIGVQ
b3MpCiB7Ci0gICAgaW50IHN0YXJ0UG9zLCBlbmRQb3M7CisgICAgdW5zaWduZWQgc3RhcnRQb3Ms
IGVuZFBvczsKICAgICBpZiAocmVuZGVyZXIoKS5zZWxlY3Rpb25TdGF0ZSgpID09IFJlbmRlck9i
amVjdDo6U2VsZWN0aW9uSW5zaWRlKSB7CiAgICAgICAgIHN0YXJ0UG9zID0gMDsKICAgICAgICAg
ZW5kUG9zID0gcmVuZGVyZXIoKS50ZXh0TGVuZ3RoKCk7CiAgICAgfSBlbHNlIHsKLSAgICAgICAg
cmVuZGVyZXIoKS5zZWxlY3Rpb25TdGFydEVuZChzdGFydFBvcywgZW5kUG9zKTsKKyAgICAgICAg
aW50IG9yaWdpbmFsU3RhcnRQb3MsIG9yaWdpbmFsRW5kUG9zOworICAgICAgICByZW5kZXJlcigp
LnNlbGVjdGlvblN0YXJ0RW5kKG9yaWdpbmFsU3RhcnRQb3MsIG9yaWdpbmFsRW5kUG9zKTsKKyAg
ICAgICAgQVNTRVJUKG9yaWdpbmFsU3RhcnRQb3MgPj0gMCAmJiBvcmlnaW5hbEVuZFBvcyA+PSAw
KTsKKyAgICAgICAgc3RhcnRQb3MgPSBvcmlnaW5hbFN0YXJ0UG9zOworICAgICAgICBlbmRQb3Mg
PSBvcmlnaW5hbEVuZFBvczsKICAgICAgICAgaWYgKHJlbmRlcmVyKCkuc2VsZWN0aW9uU3RhdGUo
KSA9PSBSZW5kZXJPYmplY3Q6OlNlbGVjdGlvblN0YXJ0KQogICAgICAgICAgICAgZW5kUG9zID0g
cmVuZGVyZXIoKS50ZXh0TGVuZ3RoKCk7CiAgICAgICAgIGVsc2UgaWYgKHJlbmRlcmVyKCkuc2Vs
ZWN0aW9uU3RhdGUoKSA9PSBSZW5kZXJPYmplY3Q6OlNlbGVjdGlvbkVuZCkKICAgICAgICAgICAg
IHN0YXJ0UG9zID0gMDsKICAgICB9Ci0KLSAgICBzUG9zID0gc3RkOjptYXgoc3RhcnRQb3MgLSBt
X3N0YXJ0LCAwKTsKLSAgICBlUG9zID0gc3RkOjptaW4oZW5kUG9zIC0gbV9zdGFydCwgKGludClt
X2xlbik7CisgICAgCisgICAgc1BvcyA9IHN0YXJ0UG9zID4gbV9zdGFydCA/IHN0YXJ0UG9zIC0g
bV9zdGFydCA6IDA7CisgICAgZVBvcyA9IGVuZFBvcyA+IG1fc3RhcnQgPyBlbmRQb3MgLSBtX3N0
YXJ0IDogMDsKKyAgICBlUG9zID0gc3RkOjptaW4oZVBvcywgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+
KG1fbGVuKSk7CiB9CiAKIHZvaWQgSW5saW5lVGV4dEJveDo6cGFpbnRTZWxlY3Rpb24oR3JhcGhp
Y3NDb250ZXh0KiBjb250ZXh0LCBjb25zdCBGbG9hdFBvaW50JiBib3hPcmlnaW4sIGNvbnN0IFJl
bmRlclN0eWxlJiBzdHlsZSwgY29uc3QgRm9udCYgZm9udCwgQ29sb3IgdGV4dENvbG9yKQpAQCAt
NzE4LDcgKzczMSw3IEBAIHZvaWQgSW5saW5lVGV4dEJveDo6cGFpbnRTZWxlY3Rpb24oR3JhcGhp
Y3NDb250ZXh0KiBjb250ZXh0LCBjb25zdCBGbG9hdFBvaW50JiBiCiAgICAgICAgIHJldHVybjsK
IAogICAgIC8vIFNlZSBpZiB3ZSBoYXZlIGEgc2VsZWN0aW9uIHRvIHBhaW50IGF0IGFsbC4KLSAg
ICBpbnQgc1BvcywgZVBvczsKKyAgICB1bnNpZ25lZCBzUG9zLCBlUG9zOwogICAgIHNlbGVjdGlv
blN0YXJ0RW5kKHNQb3MsIGVQb3MpOwogICAgIGlmIChzUG9zID49IGVQb3MpCiAgICAgICAgIHJl
dHVybjsKQEAgLTczNyw3ICs3NTAsNyBAQCB2b2lkIElubGluZVRleHRCb3g6OnBhaW50U2VsZWN0
aW9uKEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgY29uc3QgRmxvYXRQb2ludCYgYgogICAgIAog
ICAgIC8vIElmIHRoZSB0ZXh0IGlzIHRydW5jYXRlZCwgbGV0IHRoZSB0aGluZyBiZWluZyBwYWlu
dGVkIGluIHRoZSB0cnVuY2F0aW9uCiAgICAgLy8gZHJhdyBpdHMgb3duIGhpZ2hsaWdodC4KLSAg
ICBpbnQgbGVuZ3RoID0gbV90cnVuY2F0aW9uICE9IGNOb1RydW5jYXRpb24gPyBtX3RydW5jYXRp
b24gOiBtX2xlbjsKKyAgICB1bnNpZ25lZCBsZW5ndGggPSBtX3RydW5jYXRpb24gIT0gY05vVHJ1
bmNhdGlvbiA/IG1fdHJ1bmNhdGlvbiA6IG1fbGVuOwogICAgIFN0cmluZyBzdHJpbmcgPSByZW5k
ZXJlcigpLnRleHQoKTsKIAogICAgIGlmIChzdHJpbmcubGVuZ3RoKCkgIT0gc3RhdGljX2Nhc3Q8
dW5zaWduZWQ+KGxlbmd0aCkgfHwgbV9zdGFydCkgewpAQCAtNzQ3LDYgKzc2MCw3IEBAIHZvaWQg
SW5saW5lVGV4dEJveDo6cGFpbnRTZWxlY3Rpb24oR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBj
b25zdCBGbG9hdFBvaW50JiBiCiAKICAgICBCdWZmZXJGb3JBcHBlbmRpbmdIeXBoZW4gY2hhcmFj
dGVyc1dpdGhIeXBoZW47CiAgICAgYm9vbCByZXNwZWN0SHlwaGVuID0gZVBvcyA9PSBsZW5ndGgg
JiYgaGFzSHlwaGVuKCk7CisgICAgQVNTRVJUKHJlbmRlcmVyKCkudGV4dExlbmd0aCgpID49IG1f
c3RhcnQpOwogICAgIFRleHRSdW4gdGV4dFJ1biA9IGNvbnN0cnVjdFRleHRSdW4oc3R5bGUsIGZv
bnQsIHN0cmluZywgcmVuZGVyZXIoKS50ZXh0TGVuZ3RoKCkgLSBtX3N0YXJ0LCByZXNwZWN0SHlw
aGVuID8gJmNoYXJhY3RlcnNXaXRoSHlwaGVuIDogMCk7CiAgICAgaWYgKHJlc3BlY3RIeXBoZW4p
CiAgICAgICAgIGVQb3MgPSB0ZXh0UnVuLmxlbmd0aCgpOwpAQCAtNzcwLDExICs3ODQsMTIgQEAg
dm9pZCBJbmxpbmVUZXh0Qm94OjpwYWludFNlbGVjdGlvbihHcmFwaGljc0NvbnRleHQqIGNvbnRl
eHQsIGNvbnN0IEZsb2F0UG9pbnQmIGIKICNlbmRpZgogfQogCi12b2lkIElubGluZVRleHRCb3g6
OnBhaW50Q29tcG9zaXRpb25CYWNrZ3JvdW5kKEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgY29u
c3QgRmxvYXRQb2ludCYgYm94T3JpZ2luLCBjb25zdCBSZW5kZXJTdHlsZSYgc3R5bGUsIGNvbnN0
IEZvbnQmIGZvbnQsIGludCBzdGFydFBvcywgaW50IGVuZFBvcykKK3ZvaWQgSW5saW5lVGV4dEJv
eDo6cGFpbnRDb21wb3NpdGlvbkJhY2tncm91bmQoR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBj
b25zdCBGbG9hdFBvaW50JiBib3hPcmlnaW4sIGNvbnN0IFJlbmRlclN0eWxlJiBzdHlsZSwgY29u
c3QgRm9udCYgZm9udCwgdW5zaWduZWQgc3RhcnRQb3MsIHVuc2lnbmVkIGVuZFBvcykKIHsKLSAg
ICBpbnQgb2Zmc2V0ID0gbV9zdGFydDsKLSAgICBpbnQgc1BvcyA9IHN0ZDo6bWF4KHN0YXJ0UG9z
IC0gb2Zmc2V0LCAwKTsKLSAgICBpbnQgZVBvcyA9IHN0ZDo6bWluKGVuZFBvcyAtIG9mZnNldCwg
KGludCltX2xlbik7CisgICAgdW5zaWduZWQgb2Zmc2V0ID0gbV9zdGFydDsKKyAgICB1bnNpZ25l
ZCBzUG9zID0gc3RhcnRQb3MgPiBvZmZzZXQgPyBzdGFydFBvcyAtIG9mZnNldCA6IDA7CisgICAg
QVNTRVJUKGVuZFBvcyA+PSBvZmZzZXQpOworICAgIHVuc2lnbmVkIGVQb3MgPSBzdGQ6Om1pbihl
bmRQb3MgLSBvZmZzZXQsIHN0YXRpY19jYXN0PHVuc2lnbmVkPihtX2xlbikpOwogCiAgICAgaWYg
KHNQb3MgPj0gZVBvcykKICAgICAgICAgcmV0dXJuOwpAQCAtMTExMyw3ICsxMTI4LDcgQEAgdm9p
ZCBJbmxpbmVUZXh0Qm94OjpwYWludERvY3VtZW50TWFya2VyKEdyYXBoaWNzQ29udGV4dCogcHQs
IGNvbnN0IEZsb2F0UG9pbnQmIGIKIAogICAgIC8vIERldGVybWluZSB3aGV0aGVyIHdlIG5lZWQg
dG8gbWVhc3VyZSB0ZXh0CiAgICAgYm9vbCBtYXJrZXJTcGFuc1dob2xlQm94ID0gdHJ1ZTsKLSAg
ICBpZiAobV9zdGFydCA8PSAoaW50KW1hcmtlci0+c3RhcnRPZmZzZXQoKSkKKyAgICBpZiAobV9z
dGFydCA8PSBtYXJrZXItPnN0YXJ0T2Zmc2V0KCkpCiAgICAgICAgIG1hcmtlclNwYW5zV2hvbGVC
b3ggPSBmYWxzZTsKICAgICBpZiAoKGVuZCgpICsgMSkgIT0gbWFya2VyLT5lbmRPZmZzZXQoKSkg
Ly8gZW5kIHBvaW50cyBhdCB0aGUgbGFzdCBjaGFyLCBub3QgcGFzdCBpdAogICAgICAgICBtYXJr
ZXJTcGFuc1dob2xlQm94ID0gZmFsc2U7CkBAIC0xMTIyLDExICsxMTM3LDEyIEBAIHZvaWQgSW5s
aW5lVGV4dEJveDo6cGFpbnREb2N1bWVudE1hcmtlcihHcmFwaGljc0NvbnRleHQqIHB0LCBjb25z
dCBGbG9hdFBvaW50JiBiCiAKICAgICBib29sIGlzRGljdGF0aW9uTWFya2VyID0gbWFya2VyLT50
eXBlKCkgPT0gRG9jdW1lbnRNYXJrZXI6OkRpY3RhdGlvbkFsdGVybmF0aXZlczsKICAgICBpZiAo
IW1hcmtlclNwYW5zV2hvbGVCb3ggfHwgZ3JhbW1hciB8fCBpc0RpY3RhdGlvbk1hcmtlcikgewot
ICAgICAgICBpbnQgc3RhcnRQb3NpdGlvbiA9IHN0ZDo6bWF4PGludD4obWFya2VyLT5zdGFydE9m
ZnNldCgpIC0gbV9zdGFydCwgMCk7Ci0gICAgICAgIGludCBlbmRQb3NpdGlvbiA9IHN0ZDo6bWlu
PGludD4obWFya2VyLT5lbmRPZmZzZXQoKSAtIG1fc3RhcnQsIG1fbGVuKTsKKyAgICAgICAgdW5z
aWduZWQgc3RhcnRQb3NpdGlvbiA9IG1hcmtlci0+c3RhcnRPZmZzZXQoKSA+IG1fc3RhcnQgPyBt
YXJrZXItPnN0YXJ0T2Zmc2V0KCkgLSBtX3N0YXJ0IDogMDsKKyAgICAgICAgQVNTRVJUKG1hcmtl
ci0+ZW5kT2Zmc2V0KCkgPj0gbV9zdGFydCk7CisgICAgICAgIHVuc2lnbmVkIGVuZFBvc2l0aW9u
ID0gc3RkOjptaW4obWFya2VyLT5lbmRPZmZzZXQoKSAtIG1fc3RhcnQsIHN0YXRpY19jYXN0PHVu
c2lnbmVkPihtX2xlbikpOwogICAgICAgICAKICAgICAgICAgaWYgKG1fdHJ1bmNhdGlvbiAhPSBj
Tm9UcnVuY2F0aW9uKQotICAgICAgICAgICAgZW5kUG9zaXRpb24gPSBzdGQ6Om1pbjxpbnQ+KGVu
ZFBvc2l0aW9uLCBtX3RydW5jYXRpb24pOworICAgICAgICAgICAgZW5kUG9zaXRpb24gPSBzdGQ6
Om1pbihlbmRQb3NpdGlvbiwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KG1fdHJ1bmNhdGlvbikpOwog
CiAgICAgICAgIC8vIENhbGN1bGF0ZSBzdGFydCAmIHdpZHRoCiAgICAgICAgIGludCBkZWx0YVkg
PSByZW5kZXJlcigpLnN0eWxlKCkuaXNGbGlwcGVkTGluZXNXcml0aW5nTW9kZSgpID8gc2VsZWN0
aW9uQm90dG9tKCkgLSBsb2dpY2FsQm90dG9tKCkgOiBsb2dpY2FsVG9wKCkgLSBzZWxlY3Rpb25U
b3AoKTsKQEAgLTExNzMsOCArMTE4OSw5IEBAIHZvaWQgSW5saW5lVGV4dEJveDo6cGFpbnRUZXh0
TWF0Y2hNYXJrZXIoR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBjb25zdCBGbG9hdFBvCiB7CiAg
ICAgTGF5b3V0VW5pdCBzZWxlY3Rpb25IZWlnaHQgPSB0aGlzLT5zZWxlY3Rpb25IZWlnaHQoKTsK
IAotICAgIGludCBzUG9zID0gc3RkOjptYXgobWFya2VyLT5zdGFydE9mZnNldCgpIC0gbV9zdGFy
dCwgKHVuc2lnbmVkKTApOwotICAgIGludCBlUG9zID0gc3RkOjptaW4obWFya2VyLT5lbmRPZmZz
ZXQoKSAtIG1fc3RhcnQsICh1bnNpZ25lZCltX2xlbik7CisgICAgdW5zaWduZWQgc1BvcyA9IG1h
cmtlci0+c3RhcnRPZmZzZXQoKSA+IG1fc3RhcnQgPyBtYXJrZXItPnN0YXJ0T2Zmc2V0KCkgLSBt
X3N0YXJ0IDogMDsKKyAgICBBU1NFUlQobWFya2VyLT5lbmRPZmZzZXQoKSA+PSBtX3N0YXJ0KTsK
KyAgICB1bnNpZ25lZCBlUG9zID0gc3RkOjptaW4obWFya2VyLT5lbmRPZmZzZXQoKSAtIG1fc3Rh
cnQsIHN0YXRpY19jYXN0PHVuc2lnbmVkPihtX2xlbikpOwogICAgIFRleHRSdW4gcnVuID0gY29u
c3RydWN0VGV4dFJ1bihzdHlsZSwgZm9udCk7CiAKICAgICAvLyBBbHdheXMgY29tcHV0ZSBhbmQg
c3RvcmUgdGhlIHJlY3QgYXNzb2NpYXRlZCB3aXRoIHRoaXMgbWFya2VyLiBUaGUgY29tcHV0ZWQg
cmVjdCBpcyBpbiBhYnNvbHV0ZSBjb29yZGluYXRlcy4KQEAgLTEyMDYsOCArMTIyMyw5IEBAIHZv
aWQgSW5saW5lVGV4dEJveDo6Y29tcHV0ZVJlY3RGb3JSZXBsYWNlbWVudE1hcmtlcihEb2N1bWVu
dE1hcmtlciogbWFya2VyLCBjb25zCiAgICAgTGF5b3V0VW5pdCB0b3AgPSBzZWxlY3Rpb25Ub3Ao
KTsKICAgICBMYXlvdXRVbml0IGggPSBzZWxlY3Rpb25IZWlnaHQoKTsKICAgICAKLSAgICBpbnQg
c1BvcyA9IHN0ZDo6bWF4KG1hcmtlci0+c3RhcnRPZmZzZXQoKSAtIG1fc3RhcnQsICh1bnNpZ25l
ZCkwKTsKLSAgICBpbnQgZVBvcyA9IHN0ZDo6bWluKG1hcmtlci0+ZW5kT2Zmc2V0KCkgLSBtX3N0
YXJ0LCAodW5zaWduZWQpbV9sZW4pOworICAgIHVuc2lnbmVkIHNQb3MgPSBtYXJrZXItPnN0YXJ0
T2Zmc2V0KCkgPiBtX3N0YXJ0ID8gbWFya2VyLT5zdGFydE9mZnNldCgpIC0gbV9zdGFydCA6IDA7
CisgICAgQVNTRVJUKG1hcmtlci0+ZW5kT2Zmc2V0KCkgPj0gbV9zdGFydCk7CisgICAgdW5zaWdu
ZWQgZVBvcyA9IHN0ZDo6bWluKG1hcmtlci0+ZW5kT2Zmc2V0KCkgLSBtX3N0YXJ0LCAodW5zaWdu
ZWQpbV9sZW4pOwogICAgIFRleHRSdW4gcnVuID0gY29uc3RydWN0VGV4dFJ1bihzdHlsZSwgZm9u
dCk7CiAKICAgICAvLyBDb21wdXRlIGFuZCBzdG9yZSB0aGUgcmVjdCBhc3NvY2lhdGVkIHdpdGgg
dGhpcyBtYXJrZXIuCkBAIC0xMzE0LDExICsxMzMyLDExIEBAIHZvaWQgSW5saW5lVGV4dEJveDo6
cGFpbnRDb21wb3NpdGlvblVuZGVybGluZShHcmFwaGljc0NvbnRleHQqIGN0eCwgY29uc3QgRmxv
YXRQCiAgICAgICAgIHN0YXJ0ID0gcmVuZGVyZXIoKS53aWR0aChtX3N0YXJ0LCBwYWludFN0YXJ0
IC0gbV9zdGFydCwgdGV4dFBvcygpLCBpc0ZpcnN0TGluZSgpKTsKICAgICB9CiAgICAgaWYgKHBh
aW50RW5kICE9IHVuZGVybGluZS5lbmRPZmZzZXQpIHsgICAgICAvLyBlbmQgcG9pbnRzIGF0IHRo
ZSBsYXN0IGNoYXIsIG5vdCBwYXN0IGl0Ci0gICAgICAgIHBhaW50RW5kID0gc3RkOjptaW4ocGFp
bnRFbmQsICh1bnNpZ25lZCl1bmRlcmxpbmUuZW5kT2Zmc2V0KTsKKyAgICAgICAgcGFpbnRFbmQg
PSBzdGQ6Om1pbihwYWludEVuZCwgdW5kZXJsaW5lLmVuZE9mZnNldCk7CiAgICAgICAgIHVzZVdo
b2xlV2lkdGggPSBmYWxzZTsKICAgICB9CiAgICAgaWYgKG1fdHJ1bmNhdGlvbiAhPSBjTm9UcnVu
Y2F0aW9uKSB7Ci0gICAgICAgIHBhaW50RW5kID0gc3RkOjptaW4ocGFpbnRFbmQsICh1bnNpZ25l
ZCltX3N0YXJ0ICsgbV90cnVuY2F0aW9uKTsKKyAgICAgICAgcGFpbnRFbmQgPSBzdGQ6Om1pbihw
YWludEVuZCwgbV9zdGFydCArIG1fdHJ1bmNhdGlvbik7CiAgICAgICAgIHVzZVdob2xlV2lkdGgg
PSBmYWxzZTsKICAgICB9CiAgICAgaWYgKCF1c2VXaG9sZVdpZHRoKSB7CkBAIC0xMzc5LDcgKzEz
OTcsNyBAQCBpbnQgSW5saW5lVGV4dEJveDo6b2Zmc2V0Rm9yUG9zaXRpb24oZmxvYXQgbGluZU9m
ZnNldCwgYm9vbCBpbmNsdWRlUGFydGlhbEdseXBocwogICAgIHJldHVybiBmb250Lm9mZnNldEZv
clBvc2l0aW9uKGNvbnN0cnVjdFRleHRSdW4obGluZVN0eWxlLCBmb250KSwgbGluZU9mZnNldCAt
IGxvZ2ljYWxMZWZ0KCksIGluY2x1ZGVQYXJ0aWFsR2x5cGhzKTsKIH0KIAotZmxvYXQgSW5saW5l
VGV4dEJveDo6cG9zaXRpb25Gb3JPZmZzZXQoaW50IG9mZnNldCkgY29uc3QKK2Zsb2F0IElubGlu
ZVRleHRCb3g6OnBvc2l0aW9uRm9yT2Zmc2V0KHVuc2lnbmVkIG9mZnNldCkgY29uc3QKIHsKICAg
ICBBU1NFUlQob2Zmc2V0ID49IG1fc3RhcnQpOwogICAgIEFTU0VSVChvZmZzZXQgPD0gbV9zdGFy
dCArIG1fbGVuKTsKQEAgLTEzOTEsOCArMTQwOSw4IEBAIGZsb2F0IElubGluZVRleHRCb3g6OnBv
c2l0aW9uRm9yT2Zmc2V0KGludCBvZmZzZXQpIGNvbnN0CiAKICAgICBjb25zdCBSZW5kZXJTdHls
ZSYgbGluZVN0eWxlID0gdGhpcy0+bGluZVN0eWxlKCk7CiAgICAgY29uc3QgRm9udCYgZm9udCA9
IGZvbnRUb1VzZShsaW5lU3R5bGUsIHJlbmRlcmVyKCkpOwotICAgIGludCBmcm9tID0gIWlzTGVm
dFRvUmlnaHREaXJlY3Rpb24oKSA/IG9mZnNldCAtIG1fc3RhcnQgOiAwOwotICAgIGludCB0byA9
ICFpc0xlZnRUb1JpZ2h0RGlyZWN0aW9uKCkgPyBtX2xlbiA6IG9mZnNldCAtIG1fc3RhcnQ7Cisg
ICAgdW5zaWduZWQgZnJvbSA9ICFpc0xlZnRUb1JpZ2h0RGlyZWN0aW9uKCkgPyBvZmZzZXQgLSBt
X3N0YXJ0IDogMDsKKyAgICB1bnNpZ25lZCB0byA9ICFpc0xlZnRUb1JpZ2h0RGlyZWN0aW9uKCkg
PyBtX2xlbiA6IG9mZnNldCAtIG1fc3RhcnQ7CiAgICAgLy8gRklYTUU6IERvIHdlIG5lZWQgdG8g
YWRkIHJpZ2h0QmVhcmluZyBoZXJlPwogICAgIExheW91dFJlY3Qgc2VsZWN0aW9uUmVjdCA9IExh
eW91dFJlY3QobG9naWNhbExlZnQoKSwgMCwgMCwgMCk7CiAgICAgVGV4dFJ1biBydW4gPSBjb25z
dHJ1Y3RUZXh0UnVuKGxpbmVTdHlsZSwgZm9udCk7CkBAIC0xNDEwLDEzICsxNDI4LDE0IEBAIFRl
eHRSdW4gSW5saW5lVGV4dEJveDo6Y29uc3RydWN0VGV4dFJ1bihjb25zdCBSZW5kZXJTdHlsZSYg
c3R5bGUsIGNvbnN0IEZvbnQmIGZvCiAKICAgICBpZiAoc3RyaW5nLmxlbmd0aCgpICE9IGxlbmd0
aCB8fCBzdGFydFBvcykKICAgICAgICAgc3RyaW5nID0gc3RyaW5nLnN1YnN0cmluZ1NoYXJpbmdJ
bXBsKHN0YXJ0UG9zLCBsZW5ndGgpOwotCisgICAgCisgICAgQVNTRVJUKHJlbmRlcmVyKCkudGV4
dExlbmd0aCgpID49IHN0YXJ0UG9zKTsKICAgICByZXR1cm4gY29uc3RydWN0VGV4dFJ1bihzdHls
ZSwgZm9udCwgc3RyaW5nLCByZW5kZXJlcigpLnRleHRMZW5ndGgoKSAtIHN0YXJ0UG9zLCBjaGFy
YWN0ZXJzV2l0aEh5cGhlbik7CiB9CiAKLVRleHRSdW4gSW5saW5lVGV4dEJveDo6Y29uc3RydWN0
VGV4dFJ1bihjb25zdCBSZW5kZXJTdHlsZSYgc3R5bGUsIGNvbnN0IEZvbnQmIGZvbnQsIFN0cmlu
ZyBzdHJpbmcsIGludCBtYXhpbXVtTGVuZ3RoLCBCdWZmZXJGb3JBcHBlbmRpbmdIeXBoZW4qIGNo
YXJhY3RlcnNXaXRoSHlwaGVuKSBjb25zdAorVGV4dFJ1biBJbmxpbmVUZXh0Qm94Ojpjb25zdHJ1
Y3RUZXh0UnVuKGNvbnN0IFJlbmRlclN0eWxlJiBzdHlsZSwgY29uc3QgRm9udCYgZm9udCwgU3Ry
aW5nIHN0cmluZywgdW5zaWduZWQgbWF4aW11bUxlbmd0aCwgQnVmZmVyRm9yQXBwZW5kaW5nSHlw
aGVuKiBjaGFyYWN0ZXJzV2l0aEh5cGhlbikgY29uc3QKIHsKLSAgICBpbnQgbGVuZ3RoID0gc3Ry
aW5nLmxlbmd0aCgpOworICAgIHVuc2lnbmVkIGxlbmd0aCA9IHN0cmluZy5sZW5ndGgoKTsKIAog
ICAgIGlmIChjaGFyYWN0ZXJzV2l0aEh5cGhlbikgewogICAgICAgICBhZGp1c3RDaGFyYWN0ZXJz
QW5kTGVuZ3RoRm9ySHlwaGVuKCpjaGFyYWN0ZXJzV2l0aEh5cGhlbiwgc3R5bGUsIHN0cmluZywg
bGVuZ3RoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9JbmxpbmVUZXh0
Qm94LmggYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvSW5saW5lVGV4dEJveC5oCmluZGV4IGM0
MmI1NGU4ZDJiNzU5NGY4YWI5YTY3ODhmODk3OWRmZTU2Yjg0YjAuLjdkM2Y1YjY2ZWZkODMxOTU2
NDhlZmI4MmJkM2RiYTkwNTNhMmQ0ZmMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9JbmxpbmVUZXh0Qm94LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0lubGlu
ZVRleHRCb3guaApAQCAtMTEwLDE1ICsxMTAsMTUgQEAgcHJpdmF0ZToKICAgICBMYXlvdXRVbml0
IHNlbGVjdGlvbkJvdHRvbSgpIGNvbnN0OwogICAgIExheW91dFVuaXQgc2VsZWN0aW9uSGVpZ2h0
KCkgY29uc3Q7CiAKLSAgICBUZXh0UnVuIGNvbnN0cnVjdFRleHRSdW4oY29uc3QgUmVuZGVyU3R5
bGUmLCBjb25zdCBGb250JiwgQnVmZmVyRm9yQXBwZW5kaW5nSHlwaGVuKiA9IDApIGNvbnN0Owot
ICAgIFRleHRSdW4gY29uc3RydWN0VGV4dFJ1bihjb25zdCBSZW5kZXJTdHlsZSYsIGNvbnN0IEZv
bnQmLCBTdHJpbmcsIGludCBtYXhpbXVtTGVuZ3RoLCBCdWZmZXJGb3JBcHBlbmRpbmdIeXBoZW4q
ID0gMCkgY29uc3Q7CisgICAgVGV4dFJ1biBjb25zdHJ1Y3RUZXh0UnVuKGNvbnN0IFJlbmRlclN0
eWxlJiwgY29uc3QgRm9udCYsIEJ1ZmZlckZvckFwcGVuZGluZ0h5cGhlbiogPSBudWxscHRyKSBj
b25zdDsKKyAgICBUZXh0UnVuIGNvbnN0cnVjdFRleHRSdW4oY29uc3QgUmVuZGVyU3R5bGUmLCBj
b25zdCBGb250JiwgU3RyaW5nLCB1bnNpZ25lZCBtYXhpbXVtTGVuZ3RoLCBCdWZmZXJGb3JBcHBl
bmRpbmdIeXBoZW4qID0gbnVsbHB0cikgY29uc3Q7CiAKIHB1YmxpYzoKICAgICB2aXJ0dWFsIEZs
b2F0UmVjdCBjYWxjdWxhdGVCb3VuZGFyaWVzKCkgY29uc3QgeyByZXR1cm4gRmxvYXRSZWN0KHgo
KSwgeSgpLCB3aWR0aCgpLCBoZWlnaHQoKSk7IH0KIAotICAgIHZpcnR1YWwgTGF5b3V0UmVjdCBs
b2NhbFNlbGVjdGlvblJlY3QoaW50IHN0YXJ0UG9zLCBpbnQgZW5kUG9zKSBjb25zdDsKLSAgICBi
b29sIGlzU2VsZWN0ZWQoaW50IHN0YXJ0UG9zLCBpbnQgZW5kUG9zKSBjb25zdDsKLSAgICB2b2lk
IHNlbGVjdGlvblN0YXJ0RW5kKGludCYgc1BvcywgaW50JiBlUG9zKTsKKyAgICB2aXJ0dWFsIExh
eW91dFJlY3QgbG9jYWxTZWxlY3Rpb25SZWN0KHVuc2lnbmVkIHN0YXJ0UG9zLCB1bnNpZ25lZCBl
bmRQb3MpIGNvbnN0OworICAgIGJvb2wgaXNTZWxlY3RlZCh1bnNpZ25lZCBzdGFydFBvcywgdW5z
aWduZWQgZW5kUG9zKSBjb25zdDsKKyAgICB2b2lkIHNlbGVjdGlvblN0YXJ0RW5kKHVuc2lnbmVk
JiBzUG9zLCB1bnNpZ25lZCYgZVBvcyk7CiAKIHByb3RlY3RlZDoKICAgICB2aXJ0dWFsIHZvaWQg
cGFpbnQoUGFpbnRJbmZvJiwgY29uc3QgTGF5b3V0UG9pbnQmLCBMYXlvdXRVbml0IGxpbmVUb3As
IExheW91dFVuaXQgbGluZUJvdHRvbSk7CkBAIC0xNTgsMTMgKzE1OCwxMyBAQCBwcml2YXRlOgog
CiBwdWJsaWM6CiAgICAgdmlydHVhbCBpbnQgb2Zmc2V0Rm9yUG9zaXRpb24oZmxvYXQgeCwgYm9v
bCBpbmNsdWRlUGFydGlhbEdseXBocyA9IHRydWUpIGNvbnN0OwotICAgIHZpcnR1YWwgZmxvYXQg
cG9zaXRpb25Gb3JPZmZzZXQoaW50IG9mZnNldCkgY29uc3Q7CisgICAgdmlydHVhbCBmbG9hdCBw
b3NpdGlvbkZvck9mZnNldCh1bnNpZ25lZCBvZmZzZXQpIGNvbnN0OwogCiAgICAgLy8gTmVlZHMg
dG8gYmUgcHVibGljLCBzbyB0aGUgc3RhdGljIHBhaW50VGV4dFdpdGhTaGFkb3dzKCkgZnVuY3Rp
b24gY2FuIHVzZSBpdC4KICAgICBzdGF0aWMgRmxvYXRTaXplIGFwcGx5U2hhZG93VG9HcmFwaGlj
c0NvbnRleHQoR3JhcGhpY3NDb250ZXh0KiwgY29uc3QgU2hhZG93RGF0YSosIGNvbnN0IEZsb2F0
UmVjdCYgdGV4dFJlY3QsIGJvb2wgc3Ryb2tlZCwgYm9vbCBvcGFxdWUsIGJvb2wgaG9yaXpvbnRh
bCk7CiAKIHByb3RlY3RlZDoKLSAgICB2b2lkIHBhaW50Q29tcG9zaXRpb25CYWNrZ3JvdW5kKEdy
YXBoaWNzQ29udGV4dCosIGNvbnN0IEZsb2F0UG9pbnQmIGJveE9yaWdpbiwgY29uc3QgUmVuZGVy
U3R5bGUmLCBjb25zdCBGb250JiwgaW50IHN0YXJ0UG9zLCBpbnQgZW5kUG9zKTsKKyAgICB2b2lk
IHBhaW50Q29tcG9zaXRpb25CYWNrZ3JvdW5kKEdyYXBoaWNzQ29udGV4dCosIGNvbnN0IEZsb2F0
UG9pbnQmIGJveE9yaWdpbiwgY29uc3QgUmVuZGVyU3R5bGUmLCBjb25zdCBGb250JiwgdW5zaWdu
ZWQgc3RhcnRQb3MsIHVuc2lnbmVkIGVuZFBvcyk7CiAgICAgdm9pZCBwYWludERvY3VtZW50TWFy
a2VycyhHcmFwaGljc0NvbnRleHQqLCBjb25zdCBGbG9hdFBvaW50JiBib3hPcmlnaW4sIGNvbnN0
IFJlbmRlclN0eWxlJiwgY29uc3QgRm9udCYsIGJvb2wgYmFja2dyb3VuZCk7CiAgICAgdm9pZCBw
YWludENvbXBvc2l0aW9uVW5kZXJsaW5lKEdyYXBoaWNzQ29udGV4dCosIGNvbnN0IEZsb2F0UG9p
bnQmIGJveE9yaWdpbiwgY29uc3QgQ29tcG9zaXRpb25VbmRlcmxpbmUmKTsKIApAQCAtMTg3LDcg
KzE4Nyw3IEBAIHByaXZhdGU6CiAgICAgSW5saW5lVGV4dEJveCogbV9wcmV2VGV4dEJveDsgLy8g
VGhlIHByZXZpb3VzIGJveCB0aGF0IGFsc28gdXNlcyBvdXIgUmVuZGVyT2JqZWN0CiAgICAgSW5s
aW5lVGV4dEJveCogbV9uZXh0VGV4dEJveDsgLy8gVGhlIG5leHQgYm94IHRoYXQgYWxzbyB1c2Vz
IG91ciBSZW5kZXJPYmplY3QKIAotICAgIGludCBtX3N0YXJ0OworICAgIHVuc2lnbmVkIG1fc3Rh
cnQ7CiAgICAgdW5zaWduZWQgc2hvcnQgbV9sZW47CiAKICAgICAvLyBXaGVyZSB0byB0cnVuY2F0
ZSB3aGVuIHRleHQgb3ZlcmZsb3cgaXMgYXBwbGllZC4gV2UgdXNlIHNwZWNpYWwgY29uc3RhbnRz
IHRvCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQ29tYmluZVRl
eHQuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckNvbWJpbmVUZXh0LmNwcApp
bmRleCAzZjAxM2RiOTFkN2Y1Yzg3NTVlNTJkOGM0MGVjOTlkNmEwNmM4M2E4Li5jYjM2ZmZkYmZh
NmEyNDQzOGZhOGUyNTVkNTYwNzgxNTQzNjhhMjEyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyQ29tYmluZVRleHQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJDb21iaW5lVGV4dC5jcHAKQEAgLTcyLDkgKzcyLDggQEAgdm9pZCBSZW5k
ZXJDb21iaW5lVGV4dDo6YWRqdXN0VGV4dE9yaWdpbihGbG9hdFBvaW50JiB0ZXh0T3JpZ2luLCBj
b25zdCBGbG9hdFJlY3QKICAgICAgICAgdGV4dE9yaWdpbi5tb3ZlKGJveFJlY3QuaGVpZ2h0KCkg
LyAyIC0gY2VpbGYobV9jb21iaW5lZFRleHRXaWR0aCkgLyAyLCBzdHlsZSgpLmZvbnQoKS5waXhl
bFNpemUoKSk7CiB9CiAKLXZvaWQgUmVuZGVyQ29tYmluZVRleHQ6OmdldFN0cmluZ1RvUmVuZGVy
KGludCBzdGFydCwgU3RyaW5nJiBzdHJpbmcsIGludCYgbGVuZ3RoKSBjb25zdAordm9pZCBSZW5k
ZXJDb21iaW5lVGV4dDo6Z2V0U3RyaW5nVG9SZW5kZXIodW5zaWduZWQgc3RhcnQsIFN0cmluZyYg
c3RyaW5nLCB1bnNpZ25lZCYgbGVuZ3RoKSBjb25zdAogewotICAgIEFTU0VSVChzdGFydCA+PSAw
KTsKICAgICBpZiAobV9pc0NvbWJpbmVkKSB7CiAgICAgICAgIHN0cmluZyA9IG9yaWdpbmFsVGV4
dCgpOwogICAgICAgICBsZW5ndGggPSBzdHJpbmcubGVuZ3RoKCk7CkBAIC04Miw3ICs4MSw3IEBA
IHZvaWQgUmVuZGVyQ29tYmluZVRleHQ6OmdldFN0cmluZ1RvUmVuZGVyKGludCBzdGFydCwgU3Ry
aW5nJiBzdHJpbmcsIGludCYgbGVuZ3RoCiAgICAgfQogIAogICAgIHN0cmluZyA9IHRleHQoKTsK
LSAgICBzdHJpbmcgPSBzdHJpbmcuc3Vic3RyaW5nU2hhcmluZ0ltcGwoc3RhdGljX2Nhc3Q8dW5z
aWduZWQ+KHN0YXJ0KSwgbGVuZ3RoKTsKKyAgICBzdHJpbmcgPSBzdHJpbmcuc3Vic3RyaW5nU2hh
cmluZ0ltcGwoc3RhcnQsIGxlbmd0aCk7CiB9CiAKIHZvaWQgUmVuZGVyQ29tYmluZVRleHQ6OmNv
bWJpbmVUZXh0KCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJD
b21iaW5lVGV4dC5oIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckNvbWJpbmVUZXh0
LmgKaW5kZXggMWRkZmVlOTI5ZjVjNDkwMjFhYzk1YmQ3OGU5OTRkZjY5NTUxMzUyOS4uNGNmZjk2
MDY5MjYyYTM4Mzk1MDhjNDI0Mjk3MTI3YTM0MmMwNjNiZiAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlckNvbWJpbmVUZXh0LmgKKysrIGIvU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlckNvbWJpbmVUZXh0LmgKQEAgLTM2LDcgKzM2LDcgQEAgcHVibGljOgog
CiAgICAgdm9pZCBjb21iaW5lVGV4dCgpOwogICAgIHZvaWQgYWRqdXN0VGV4dE9yaWdpbihGbG9h
dFBvaW50JiB0ZXh0T3JpZ2luLCBjb25zdCBGbG9hdFJlY3QmIGJveFJlY3QpIGNvbnN0OwotICAg
IHZvaWQgZ2V0U3RyaW5nVG9SZW5kZXIoaW50LCBTdHJpbmcmIHN0cmluZywgaW50JiBsZW5ndGgp
IGNvbnN0OworICAgIHZvaWQgZ2V0U3RyaW5nVG9SZW5kZXIodW5zaWduZWQsIFN0cmluZyYsIHVu
c2lnbmVkJiBsZW5ndGgpIGNvbnN0OwogICAgIGJvb2wgaXNDb21iaW5lZCgpIGNvbnN0IHsgcmV0
dXJuIG1faXNDb21iaW5lZDsgfQogICAgIGZsb2F0IGNvbWJpbmVkVGV4dFdpZHRoKGNvbnN0IEZv
bnQmIGZvbnQpIGNvbnN0IHsgcmV0dXJuIGZvbnQuc2l6ZSgpOyB9CiAgICAgY29uc3QgRm9udCYg
b3JpZ2luYWxGb250KCkgY29uc3QgeyByZXR1cm4gcGFyZW50KCktPnN0eWxlKCkuZm9udCgpOyB9
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR0lubGluZUZsb3dC
b3guY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdJbmxpbmVGbG93Qm94LmNw
cAppbmRleCAxN2Q0MWJkOGY0YmExODRhZDFmZjViNzI3YTE0MDg3NzEwZjRjNjEwLi42ZmIyNzll
MzQ1ODBkMzM1MGZkOWZiYjExNTNjZThiZmZjMWM3ZWRkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvc3ZnL1NWR0lubGluZUZsb3dCb3guY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9zdmcvU1ZHSW5saW5lRmxvd0JveC5jcHAKQEAgLTEwNiw4ICsxMDYsOCBA
QCB2b2lkIFNWR0lubGluZUZsb3dCb3g6OmNvbXB1dGVUZXh0TWF0Y2hNYXJrZXJSZWN0Rm9yUmVu
ZGVyZXIoUmVuZGVyU1ZHSW5saW5lVGV4dAogICAgICAgICAgICAgaWYgKG1hcmtlclN0YXJ0UG9z
aXRpb24gPj0gbWFya2VyRW5kUG9zaXRpb24pCiAgICAgICAgICAgICAgICAgY29udGludWU7CiAK
LSAgICAgICAgICAgIGludCBmcmFnbWVudFN0YXJ0UG9zaXRpb24gPSAwOwotICAgICAgICAgICAg
aW50IGZyYWdtZW50RW5kUG9zaXRpb24gPSAwOworICAgICAgICAgICAgdW5zaWduZWQgZnJhZ21l
bnRTdGFydFBvc2l0aW9uID0gMDsKKyAgICAgICAgICAgIHVuc2lnbmVkIGZyYWdtZW50RW5kUG9z
aXRpb24gPSAwOwogCiAgICAgICAgICAgICBjb25zdCBWZWN0b3I8U1ZHVGV4dEZyYWdtZW50PiYg
ZnJhZ21lbnRzID0gdGV4dEJveC0+dGV4dEZyYWdtZW50cygpOwogICAgICAgICAgICAgdW5zaWdu
ZWQgdGV4dEZyYWdtZW50c1NpemUgPSBmcmFnbWVudHMuc2l6ZSgpOwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdJbmxpbmVUZXh0Qm94LmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHSW5saW5lVGV4dEJveC5jcHAKaW5kZXggYjE5MzY3M2M4
MzA1NmY4ZjViYzBhZjA2YjU2MGYzMmZhODBlNTMzYS4uMWJiNjVhZDQ2YjJjNjA5ODY0OGM4MjM1
NDIwOGIzMWQxOWIzZDE3YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2
Zy9TVkdJbmxpbmVUZXh0Qm94LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3Zn
L1NWR0lubGluZVRleHRCb3guY3BwCkBAIC0xMDEsNyArMTAxLDcgQEAgaW50IFNWR0lubGluZVRl
eHRCb3g6Om9mZnNldEZvclBvc2l0aW9uSW5GcmFnbWVudChjb25zdCBTVkdUZXh0RnJhZ21lbnQm
IGZyYWdtZW4KICAgICByZXR1cm4gZnJhZ21lbnQuY2hhcmFjdGVyT2Zmc2V0IC0gc3RhcnQoKSAr
IHJlbmRlcmVyKCkuc2NhbGVkRm9udCgpLm9mZnNldEZvclBvc2l0aW9uKHRleHRSdW4sIHBvc2l0
aW9uICogc2NhbGluZ0ZhY3RvciwgaW5jbHVkZVBhcnRpYWxHbHlwaHMpOwogfQogCi1mbG9hdCBT
VkdJbmxpbmVUZXh0Qm94Ojpwb3NpdGlvbkZvck9mZnNldChpbnQpIGNvbnN0CitmbG9hdCBTVkdJ
bmxpbmVUZXh0Qm94Ojpwb3NpdGlvbkZvck9mZnNldCh1bnNpZ25lZCkgY29uc3QKIHsKICAgICAv
LyBTVkcgZG9lc24ndCB1c2UgdGhlIG9mZnNldCA8LT4gcG9zaXRpb24gc2VsZWN0aW9uIHN5c3Rl
bS4gCiAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CkBAIC0xMzcsMTEgKzEzNywxMiBAQCBGbG9h
dFJlY3QgU1ZHSW5saW5lVGV4dEJveDo6c2VsZWN0aW9uUmVjdEZvclRleHRGcmFnbWVudChjb25z
dCBTVkdUZXh0RnJhZ21lbnQmCiAgICAgcmV0dXJuIHNuYXBwZWRTZWxlY3Rpb25SZWN0OwogfQog
Ci1MYXlvdXRSZWN0IFNWR0lubGluZVRleHRCb3g6OmxvY2FsU2VsZWN0aW9uUmVjdChpbnQgc3Rh
cnRQb3NpdGlvbiwgaW50IGVuZFBvc2l0aW9uKSBjb25zdAorTGF5b3V0UmVjdCBTVkdJbmxpbmVU
ZXh0Qm94Ojpsb2NhbFNlbGVjdGlvblJlY3QodW5zaWduZWQgc3RhcnRQb3NpdGlvbiwgdW5zaWdu
ZWQgZW5kUG9zaXRpb24pIGNvbnN0CiB7Ci0gICAgaW50IGJveFN0YXJ0ID0gc3RhcnQoKTsKLSAg
ICBzdGFydFBvc2l0aW9uID0gc3RkOjptYXgoc3RhcnRQb3NpdGlvbiAtIGJveFN0YXJ0LCAwKTsK
LSAgICBlbmRQb3NpdGlvbiA9IHN0ZDo6bWluKGVuZFBvc2l0aW9uIC0gYm94U3RhcnQsIHN0YXRp
Y19jYXN0PGludD4obGVuKCkpKTsKKyAgICB1bnNpZ25lZCBib3hTdGFydCA9IHN0YXJ0KCk7Cisg
ICAgc3RhcnRQb3NpdGlvbiA9IHN0YXJ0UG9zaXRpb24gPiBib3hTdGFydCA/IHN0YXJ0UG9zaXRp
b24gLSBib3hTdGFydCA6IDA7CisgICAgQVNTRVJUKGVuZFBvc2l0aW9uID49IGJveFN0YXJ0KTsK
KyAgICBlbmRQb3NpdGlvbiA9IHN0ZDo6bWluKGVuZFBvc2l0aW9uIC0gYm94U3RhcnQsIGxlbigp
KTsKICAgICBpZiAoc3RhcnRQb3NpdGlvbiA+PSBlbmRQb3NpdGlvbikKICAgICAgICAgcmV0dXJu
IExheW91dFJlY3QoKTsKIApAQCAtMTQ5LDggKzE1MCw4IEBAIExheW91dFJlY3QgU1ZHSW5saW5l
VGV4dEJveDo6bG9jYWxTZWxlY3Rpb25SZWN0KGludCBzdGFydFBvc2l0aW9uLCBpbnQgZW5kUG9z
aXRpCiAKICAgICBBZmZpbmVUcmFuc2Zvcm0gZnJhZ21lbnRUcmFuc2Zvcm07CiAgICAgRmxvYXRS
ZWN0IHNlbGVjdGlvblJlY3Q7Ci0gICAgaW50IGZyYWdtZW50U3RhcnRQb3NpdGlvbiA9IDA7Ci0g
ICAgaW50IGZyYWdtZW50RW5kUG9zaXRpb24gPSAwOworICAgIHVuc2lnbmVkIGZyYWdtZW50U3Rh
cnRQb3NpdGlvbiA9IDA7CisgICAgdW5zaWduZWQgZnJhZ21lbnRFbmRQb3NpdGlvbiA9IDA7CiAK
ICAgICB1bnNpZ25lZCB0ZXh0RnJhZ21lbnRzU2l6ZSA9IG1fdGV4dEZyYWdtZW50cy5zaXplKCk7
CiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHRleHRGcmFnbWVudHNTaXplOyArK2kpIHsK
QEAgLTIxMywxMSArMjE0LDExIEBAIHZvaWQgU1ZHSW5saW5lVGV4dEJveDo6cGFpbnRTZWxlY3Rp
b25CYWNrZ3JvdW5kKFBhaW50SW5mbyYgcGFpbnRJbmZvKQogICAgICAgICAgICAgc2VsZWN0aW9u
U3R5bGUgPSAmc3R5bGU7CiAgICAgfQogCi0gICAgaW50IHN0YXJ0UG9zaXRpb24sIGVuZFBvc2l0
aW9uOworICAgIHVuc2lnbmVkIHN0YXJ0UG9zaXRpb24sIGVuZFBvc2l0aW9uOwogICAgIHNlbGVj
dGlvblN0YXJ0RW5kKHN0YXJ0UG9zaXRpb24sIGVuZFBvc2l0aW9uKTsKIAotICAgIGludCBmcmFn
bWVudFN0YXJ0UG9zaXRpb24gPSAwOwotICAgIGludCBmcmFnbWVudEVuZFBvc2l0aW9uID0gMDsK
KyAgICB1bnNpZ25lZCBmcmFnbWVudFN0YXJ0UG9zaXRpb24gPSAwOworICAgIHVuc2lnbmVkIGZy
YWdtZW50RW5kUG9zaXRpb24gPSAwOwogICAgIEFmZmluZVRyYW5zZm9ybSBmcmFnbWVudFRyYW5z
Zm9ybTsKICAgICB1bnNpZ25lZCB0ZXh0RnJhZ21lbnRzU2l6ZSA9IG1fdGV4dEZyYWdtZW50cy5z
aXplKCk7CiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHRleHRGcmFnbWVudHNTaXplOyAr
K2kpIHsKQEAgLTQ0MCwyMSArNDQxLDI0IEBAIFRleHRSdW4gU1ZHSW5saW5lVGV4dEJveDo6Y29u
c3RydWN0VGV4dFJ1bihSZW5kZXJTdHlsZSogc3R5bGUsIGNvbnN0IFNWR1RleHRGcmFnCiAgICAg
cmV0dXJuIHJ1bjsKIH0KIAotYm9vbCBTVkdJbmxpbmVUZXh0Qm94OjptYXBTdGFydEVuZFBvc2l0
aW9uc0ludG9GcmFnbWVudENvb3JkaW5hdGVzKGNvbnN0IFNWR1RleHRGcmFnbWVudCYgZnJhZ21l
bnQsIGludCYgc3RhcnRQb3NpdGlvbiwgaW50JiBlbmRQb3NpdGlvbikgY29uc3QKK2Jvb2wgU1ZH
SW5saW5lVGV4dEJveDo6bWFwU3RhcnRFbmRQb3NpdGlvbnNJbnRvRnJhZ21lbnRDb29yZGluYXRl
cyhjb25zdCBTVkdUZXh0RnJhZ21lbnQmIGZyYWdtZW50LCB1bnNpZ25lZCYgc3RhcnRQb3NpdGlv
biwgdW5zaWduZWQmIGVuZFBvc2l0aW9uKSBjb25zdAogewogICAgIGlmIChzdGFydFBvc2l0aW9u
ID49IGVuZFBvc2l0aW9uKQogICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBpbnQgb2Zmc2V0
ID0gc3RhdGljX2Nhc3Q8aW50PihmcmFnbWVudC5jaGFyYWN0ZXJPZmZzZXQpIC0gc3RhcnQoKTsK
LSAgICBpbnQgbGVuZ3RoID0gc3RhdGljX2Nhc3Q8aW50PihmcmFnbWVudC5sZW5ndGgpOworICAg
IAorICAgIEFTU0VSVChmcmFnbWVudC5jaGFyYWN0ZXJPZmZzZXQgPj0gc3RhcnQoKSk7CisgICAg
dW5zaWduZWQgb2Zmc2V0ID0gZnJhZ21lbnQuY2hhcmFjdGVyT2Zmc2V0IC0gc3RhcnQoKTsKKyAg
ICB1bnNpZ25lZCBsZW5ndGggPSBmcmFnbWVudC5sZW5ndGg7CiAKICAgICBpZiAoc3RhcnRQb3Np
dGlvbiA+PSBvZmZzZXQgKyBsZW5ndGggfHwgZW5kUG9zaXRpb24gPD0gb2Zmc2V0KQogICAgICAg
ICByZXR1cm4gZmFsc2U7CiAKICAgICBpZiAoc3RhcnRQb3NpdGlvbiA8IG9mZnNldCkKICAgICAg
ICAgc3RhcnRQb3NpdGlvbiA9IDA7Ci0gICAgZWxzZQorICAgIGVsc2UgeworICAgICAgICBBU1NF
UlQoc3RhcnRQb3NpdGlvbiA+PSBvZmZzZXQpOwogICAgICAgICBzdGFydFBvc2l0aW9uIC09IG9m
ZnNldDsKKyAgICB9CiAKICAgICBpZiAoZW5kUG9zaXRpb24gPiBvZmZzZXQgKyBsZW5ndGgpCiAg
ICAgICAgIGVuZFBvc2l0aW9uID0gbGVuZ3RoOwpAQCAtNjI2LDggKzYzMCw4IEBAIHZvaWQgU1ZH
SW5saW5lVGV4dEJveDo6cGFpbnRUZXh0KEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgUmVuZGVy
U3R5bGUqIHN0eWxlLCBSCiAgICAgQVNTRVJUKHN0eWxlKTsKICAgICBBU1NFUlQoc2VsZWN0aW9u
U3R5bGUpOwogCi0gICAgaW50IHN0YXJ0UG9zaXRpb24gPSAwOwotICAgIGludCBlbmRQb3NpdGlv
biA9IDA7CisgICAgdW5zaWduZWQgc3RhcnRQb3NpdGlvbiA9IDA7CisgICAgdW5zaWduZWQgZW5k
UG9zaXRpb24gPSAwOwogICAgIGlmIChoYXNTZWxlY3Rpb24pIHsKICAgICAgICAgc2VsZWN0aW9u
U3RhcnRFbmQoc3RhcnRQb3NpdGlvbiwgZW5kUG9zaXRpb24pOwogICAgICAgICBoYXNTZWxlY3Rp
b24gPSBtYXBTdGFydEVuZFBvc2l0aW9uc0ludG9GcmFnbWVudENvb3JkaW5hdGVzKGZyYWdtZW50
LCBzdGFydFBvc2l0aW9uLCBlbmRQb3NpdGlvbik7CkBAIC02NTUsNyArNjU5LDcgQEAgdm9pZCBT
VkdJbmxpbmVUZXh0Qm94OjpwYWludFRleHQoR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBSZW5k
ZXJTdHlsZSogc3R5bGUsIFIKICAgICAgICAgU1ZHUmVzb3VyY2VzQ2FjaGU6OmNsaWVudFN0eWxl
Q2hhbmdlZChwYXJlbnQoKS0+cmVuZGVyZXIoKSwgU3R5bGVEaWZmZXJlbmNlUmVwYWludCwgKnN0
eWxlKTsKIAogICAgIC8vIEV2ZW50dWFsbHkgZHJhdyB0ZXh0IHVzaW5nIHJlZ3VsYXIgc3R5bGUg
ZnJvbSB0aGUgZW5kIHBvc2l0aW9uIG9mIHRoZSBzZWxlY3Rpb24gdG8gdGhlIGVuZCBvZiB0aGUg
Y3VycmVudCBjaHVuayBwYXJ0Ci0gICAgaWYgKGVuZFBvc2l0aW9uIDwgc3RhdGljX2Nhc3Q8aW50
PihmcmFnbWVudC5sZW5ndGgpICYmICFwYWludFNlbGVjdGVkVGV4dE9ubHkpCisgICAgaWYgKGVu
ZFBvc2l0aW9uIDwgZnJhZ21lbnQubGVuZ3RoICYmICFwYWludFNlbGVjdGVkVGV4dE9ubHkpCiAg
ICAgICAgIHBhaW50VGV4dFdpdGhTaGFkb3dzKGNvbnRleHQsIHN0eWxlLCB0ZXh0UnVuLCBmcmFn
bWVudCwgZW5kUG9zaXRpb24sIGZyYWdtZW50Lmxlbmd0aCk7CiB9CiAKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHSW5saW5lVGV4dEJveC5oIGIvU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdJbmxpbmVUZXh0Qm94LmgKaW5kZXggZjA4OTRmMGI1NTNh
OWRiMGQ2YmFjNWExYjg0Y2YzNGFlYzdmMTU5NS4uNTE4ZWExYjg2NzJmMzNhYjExMmJkZDE5NWJl
MzdiNzZhN2JmMDZhMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9T
VkdJbmxpbmVUZXh0Qm94LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdJ
bmxpbmVUZXh0Qm94LmgKQEAgLTQzLDEzICs0MywxMyBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCBp
bnQgc2VsZWN0aW9uVG9wKCkgeyByZXR1cm4gdG9wKCk7IH0KICAgICB2aXJ0dWFsIGludCBzZWxl
Y3Rpb25IZWlnaHQoKSB7IHJldHVybiBzdGF0aWNfY2FzdDxpbnQ+KGNlaWxmKG1fbG9naWNhbEhl
aWdodCkpOyB9CiAgICAgdmlydHVhbCBpbnQgb2Zmc2V0Rm9yUG9zaXRpb24oZmxvYXQgeCwgYm9v
bCBpbmNsdWRlUGFydGlhbEdseXBocyA9IHRydWUpIGNvbnN0OwotICAgIHZpcnR1YWwgZmxvYXQg
cG9zaXRpb25Gb3JPZmZzZXQoaW50IG9mZnNldCkgY29uc3Q7CisgICAgdmlydHVhbCBmbG9hdCBw
b3NpdGlvbkZvck9mZnNldCh1bnNpZ25lZCBvZmZzZXQpIGNvbnN0OwogCiAgICAgdm9pZCBwYWlu
dFNlbGVjdGlvbkJhY2tncm91bmQoUGFpbnRJbmZvJik7CiAgICAgdmlydHVhbCB2b2lkIHBhaW50
KFBhaW50SW5mbyYsIGNvbnN0IExheW91dFBvaW50JiwgTGF5b3V0VW5pdCBsaW5lVG9wLCBMYXlv
dXRVbml0IGxpbmVCb3R0b20pOwotICAgIHZpcnR1YWwgTGF5b3V0UmVjdCBsb2NhbFNlbGVjdGlv
blJlY3QoaW50IHN0YXJ0UG9zaXRpb24sIGludCBlbmRQb3NpdGlvbikgY29uc3Qgb3ZlcnJpZGU7
CisgICAgdmlydHVhbCBMYXlvdXRSZWN0IGxvY2FsU2VsZWN0aW9uUmVjdCh1bnNpZ25lZCBzdGFy
dFBvc2l0aW9uLCB1bnNpZ25lZCBlbmRQb3NpdGlvbikgY29uc3Qgb3ZlcnJpZGU7CiAKLSAgICBi
b29sIG1hcFN0YXJ0RW5kUG9zaXRpb25zSW50b0ZyYWdtZW50Q29vcmRpbmF0ZXMoY29uc3QgU1ZH
VGV4dEZyYWdtZW50JiwgaW50JiBzdGFydFBvc2l0aW9uLCBpbnQmIGVuZFBvc2l0aW9uKSBjb25z
dDsKKyAgICBib29sIG1hcFN0YXJ0RW5kUG9zaXRpb25zSW50b0ZyYWdtZW50Q29vcmRpbmF0ZXMo
Y29uc3QgU1ZHVGV4dEZyYWdtZW50JiwgdW5zaWduZWQmIHN0YXJ0UG9zaXRpb24sIHVuc2lnbmVk
JiBlbmRQb3NpdGlvbikgY29uc3Q7CiAKICAgICB2aXJ0dWFsIEZsb2F0UmVjdCBjYWxjdWxhdGVC
b3VuZGFyaWVzKCkgY29uc3Q7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9zdmcvU1ZHVGV4dE1ldHJpY3NCdWlsZGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9zdmcvU1ZHVGV4dE1ldHJpY3NCdWlsZGVyLmNwcAppbmRleCBlNjAxMDJkYjA4YzM5NjM5NDhi
OGE1NmNmMTk2ZmE1NjMzZGMwODFmLi4xY2I1YmMyOTVhMjFiMWZjOGFjNTg0YzJjNzI2NzMxMzFh
NWRhMjQ3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR1RleHRN
ZXRyaWNzQnVpbGRlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdU
ZXh0TWV0cmljc0J1aWxkZXIuY3BwCkBAIC0zNywxMyArMzcsMTMgQEAgU1ZHVGV4dE1ldHJpY3NC
dWlsZGVyOjpTVkdUZXh0TWV0cmljc0J1aWxkZXIoKQogCiBpbmxpbmUgYm9vbCBTVkdUZXh0TWV0
cmljc0J1aWxkZXI6OmN1cnJlbnRDaGFyYWN0ZXJTdGFydHNTdXJyb2dhdGVQYWlyKCkgY29uc3QK
IHsKLSAgICByZXR1cm4gVTE2X0lTX0xFQUQobV9ydW5bbV90ZXh0UG9zaXRpb25dKSAmJiBpbnQo
bV90ZXh0UG9zaXRpb24gKyAxKSA8IG1fcnVuLmNoYXJhY3RlcnNMZW5ndGgoKSAmJiBVMTZfSVNf
VFJBSUwobV9ydW5bbV90ZXh0UG9zaXRpb24gKyAxXSk7CisgICAgcmV0dXJuIFUxNl9JU19MRUFE
KG1fcnVuW21fdGV4dFBvc2l0aW9uXSkgJiYgbV90ZXh0UG9zaXRpb24gKyAxIDwgbV9ydW4uY2hh
cmFjdGVyc0xlbmd0aCgpICYmIFUxNl9JU19UUkFJTChtX3J1blttX3RleHRQb3NpdGlvbiArIDFd
KTsKIH0KIAogYm9vbCBTVkdUZXh0TWV0cmljc0J1aWxkZXI6OmFkdmFuY2UoKQogewogICAgIG1f
dGV4dFBvc2l0aW9uICs9IG1fY3VycmVudE1ldHJpY3MubGVuZ3RoKCk7Ci0gICAgaWYgKGludCht
X3RleHRQb3NpdGlvbikgPj0gbV9ydW4uY2hhcmFjdGVyc0xlbmd0aCgpKQorICAgIGlmIChtX3Rl
eHRQb3NpdGlvbiA+PSBtX3J1bi5jaGFyYWN0ZXJzTGVuZ3RoKCkpCiAgICAgICAgIHJldHVybiBm
YWxzZTsKIAogICAgIGlmIChtX2lzQ29tcGxleFRleHQpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvc3ZnL1NWR1RleHRRdWVyeS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvc3ZnL1NWR1RleHRRdWVyeS5jcHAKaW5kZXggZTQ2ODQxNmU3ZWE2OGFkYzE0ZmY5YmFm
YzUwNGUxOWE5NjAxZWE2NS4uNzFkZGY4MWRhMTkzNTZkZGVmMzI3ZGVmMTQ2NmQ5ZGQ3YWJmYzg3
ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdUZXh0UXVlcnku
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHVGV4dFF1ZXJ5LmNwcApA
QCAtMTMzLDEzICsxMzMsMTUgQEAgYm9vbCBTVkdUZXh0UXVlcnk6OmV4ZWN1dGVRdWVyeShEYXRh
KiBxdWVyeURhdGEsIFByb2Nlc3NUZXh0RnJhZ21lbnRDYWxsYmFjayBmcmEKICAgICByZXR1cm4g
ZmFsc2U7CiB9CiAKLWJvb2wgU1ZHVGV4dFF1ZXJ5OjptYXBTdGFydEVuZFBvc2l0aW9uc0ludG9G
cmFnbWVudENvb3JkaW5hdGVzKERhdGEqIHF1ZXJ5RGF0YSwgY29uc3QgU1ZHVGV4dEZyYWdtZW50
JiBmcmFnbWVudCwgaW50JiBzdGFydFBvc2l0aW9uLCBpbnQmIGVuZFBvc2l0aW9uKSBjb25zdAor
Ym9vbCBTVkdUZXh0UXVlcnk6Om1hcFN0YXJ0RW5kUG9zaXRpb25zSW50b0ZyYWdtZW50Q29vcmRp
bmF0ZXMoRGF0YSogcXVlcnlEYXRhLCBjb25zdCBTVkdUZXh0RnJhZ21lbnQmIGZyYWdtZW50LCB1
bnNpZ25lZCYgc3RhcnRQb3NpdGlvbiwgdW5zaWduZWQmIGVuZFBvc2l0aW9uKSBjb25zdAogewog
ICAgIC8vIFJldXNlIHRoZSBzYW1lIGxvZ2ljIHVzZWQgZm9yIHRleHQgc2VsZWN0aW9uICYgcGFp
bnRpbmcsIHRvIG1hcCBvdXIgcXVlcnkgc3RhcnQvbGVuZ3RoIGludG8gc3RhcnQvZW5kUG9zaXRp
b25zIG9mIHRoZSBjdXJyZW50IHRleHQgZnJhZ21lbnQuCisgICAgQVNTRVJUKHN0YXJ0UG9zaXRp
b24gPj0gcXVlcnlEYXRhLT5wcm9jZXNzZWRDaGFyYWN0ZXJzKTsKKyAgICBBU1NFUlQoZW5kUG9z
aXRpb24gPj0gcXVlcnlEYXRhLT5wcm9jZXNzZWRDaGFyYWN0ZXJzKTsKICAgICBzdGFydFBvc2l0
aW9uIC09IHF1ZXJ5RGF0YS0+cHJvY2Vzc2VkQ2hhcmFjdGVyczsKICAgICBlbmRQb3NpdGlvbiAt
PSBxdWVyeURhdGEtPnByb2Nlc3NlZENoYXJhY3RlcnM7CiAKLSAgICBpZiAoc3RhcnRQb3NpdGlv
biA+PSBlbmRQb3NpdGlvbiB8fCBzdGFydFBvc2l0aW9uIDwgMCB8fCBlbmRQb3NpdGlvbiA8IDAp
CisgICAgaWYgKHN0YXJ0UG9zaXRpb24gPj0gZW5kUG9zaXRpb24pCiAgICAgICAgIHJldHVybiBm
YWxzZTsKIAogICAgIG1vZGlmeVN0YXJ0RW5kUG9zaXRpb25zUmVzcGVjdGluZ0xpZ2F0dXJlcyhx
dWVyeURhdGEsIHN0YXJ0UG9zaXRpb24sIGVuZFBvc2l0aW9uKTsKQEAgLTE1MCw3ICsxNTIsNyBA
QCBib29sIFNWR1RleHRRdWVyeTo6bWFwU3RhcnRFbmRQb3NpdGlvbnNJbnRvRnJhZ21lbnRDb29y
ZGluYXRlcyhEYXRhKiBxdWVyeURhdGEsCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLXZvaWQgU1ZH
VGV4dFF1ZXJ5Ojptb2RpZnlTdGFydEVuZFBvc2l0aW9uc1Jlc3BlY3RpbmdMaWdhdHVyZXMoRGF0
YSogcXVlcnlEYXRhLCBpbnQmIHN0YXJ0UG9zaXRpb24sIGludCYgZW5kUG9zaXRpb24pIGNvbnN0
Cit2b2lkIFNWR1RleHRRdWVyeTo6bW9kaWZ5U3RhcnRFbmRQb3NpdGlvbnNSZXNwZWN0aW5nTGln
YXR1cmVzKERhdGEqIHF1ZXJ5RGF0YSwgdW5zaWduZWQmIHN0YXJ0UG9zaXRpb24sIHVuc2lnbmVk
JiBlbmRQb3NpdGlvbikgY29uc3QKIHsKICAgICBTVkdUZXh0TGF5b3V0QXR0cmlidXRlcyogbGF5
b3V0QXR0cmlidXRlcyA9IHF1ZXJ5RGF0YS0+dGV4dFJlbmRlcmVyLT5sYXlvdXRBdHRyaWJ1dGVz
KCk7CiAgICAgVmVjdG9yPFNWR1RleHRNZXRyaWNzPiYgdGV4dE1ldHJpY3NWYWx1ZXMgPSBsYXlv
dXRBdHRyaWJ1dGVzLT50ZXh0TWV0cmljc1ZhbHVlcygpOwpAQCAtMTgxLDIxICsxODMsMjEgQEAg
dm9pZCBTVkdUZXh0UXVlcnk6Om1vZGlmeVN0YXJ0RW5kUG9zaXRpb25zUmVzcGVjdGluZ0xpZ2F0
dXJlcyhEYXRhKiBxdWVyeURhdGEsIGkKICAgICAgICAgICAgIGJyZWFrOwogCiAgICAgICAgIC8v
IElmIHRoZSBzdGFydCBwb3NpdGlvbiBtYXBzIHRvIGEgY2hhcmFjdGVyIGluIHRoZSBtZXRyaWNz
IGxpc3QsIHdlIGRvbid0IG5lZWQgdG8gbW9kaWZ5IGl0LgotICAgICAgICBpZiAoc3RhcnRQb3Np
dGlvbiA9PSBzdGF0aWNfY2FzdDxpbnQ+KHBvc2l0aW9uT2Zmc2V0KSkKKyAgICAgICAgaWYgKHN0
YXJ0UG9zaXRpb24gPT0gcG9zaXRpb25PZmZzZXQpCiAgICAgICAgICAgICBhbHRlclN0YXJ0UG9z
aXRpb24gPSBmYWxzZTsKIAogICAgICAgICAvLyBJZiB0aGUgc3RhcnQgcG9zaXRpb24gbWFwcyB0
byBhIGNoYXJhY3RlciBpbiB0aGUgbWV0cmljcyBsaXN0LCB3ZSBkb24ndCBuZWVkIHRvIG1vZGlm
eSBpdC4KLSAgICAgICAgaWYgKGVuZFBvc2l0aW9uID09IHN0YXRpY19jYXN0PGludD4ocG9zaXRp
b25PZmZzZXQpKQorICAgICAgICBpZiAoZW5kUG9zaXRpb24gPT0gcG9zaXRpb25PZmZzZXQpCiAg
ICAgICAgICAgICBhbHRlckVuZFBvc2l0aW9uID0gZmFsc2U7CiAKICAgICAgICAgLy8gRGV0ZWN0
IGxpZ2F0dXJlcy4KICAgICAgICAgaWYgKGxhc3RQb3NpdGlvbk9mZnNldCAhPSAtMSAmJiBsYXN0
UG9zaXRpb25PZmZzZXQgLSBwb3NpdGlvbk9mZnNldCA+IDEpIHsKLSAgICAgICAgICAgIGlmIChh
bHRlclN0YXJ0UG9zaXRpb24gJiYgc3RhcnRQb3NpdGlvbiA+IGxhc3RQb3NpdGlvbk9mZnNldCAm
JiBzdGFydFBvc2l0aW9uIDwgc3RhdGljX2Nhc3Q8aW50Pihwb3NpdGlvbk9mZnNldCkpIHsKKyAg
ICAgICAgICAgIGlmIChhbHRlclN0YXJ0UG9zaXRpb24gJiYgc3RhcnRQb3NpdGlvbiA+IHN0YXRp
Y19jYXN0PHVuc2lnbmVkPihsYXN0UG9zaXRpb25PZmZzZXQpICYmIHN0YXJ0UG9zaXRpb24gPCBw
b3NpdGlvbk9mZnNldCkgewogICAgICAgICAgICAgICAgIHN0YXJ0UG9zaXRpb24gPSBsYXN0UG9z
aXRpb25PZmZzZXQ7CiAgICAgICAgICAgICAgICAgYWx0ZXJTdGFydFBvc2l0aW9uID0gZmFsc2U7
CiAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgIGlmIChhbHRlckVuZFBvc2l0aW9uICYmIGVu
ZFBvc2l0aW9uID4gbGFzdFBvc2l0aW9uT2Zmc2V0ICYmIGVuZFBvc2l0aW9uIDwgc3RhdGljX2Nh
c3Q8aW50Pihwb3NpdGlvbk9mZnNldCkpIHsKKyAgICAgICAgICAgIGlmIChhbHRlckVuZFBvc2l0
aW9uICYmIGVuZFBvc2l0aW9uID4gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGxhc3RQb3NpdGlvbk9m
ZnNldCkgJiYgZW5kUG9zaXRpb24gPCBwb3NpdGlvbk9mZnNldCkgewogICAgICAgICAgICAgICAg
IGVuZFBvc2l0aW9uID0gcG9zaXRpb25PZmZzZXQ7CiAgICAgICAgICAgICAgICAgYWx0ZXJFbmRQ
b3NpdGlvbiA9IGZhbHNlOwogICAgICAgICAgICAgfQpAQCAtMjEyLDEyICsyMTQsMTIgQEAgdm9p
ZCBTVkdUZXh0UXVlcnk6Om1vZGlmeVN0YXJ0RW5kUG9zaXRpb25zUmVzcGVjdGluZ0xpZ2F0dXJl
cyhEYXRhKiBxdWVyeURhdGEsIGkKICAgICAgICAgcmV0dXJuOwogCiAgICAgaWYgKGxhc3RQb3Np
dGlvbk9mZnNldCAhPSAtMSAmJiBsYXN0UG9zaXRpb25PZmZzZXQgLSBwb3NpdGlvbk9mZnNldCA+
IDEpIHsKLSAgICAgICAgaWYgKGFsdGVyU3RhcnRQb3NpdGlvbiAmJiBzdGFydFBvc2l0aW9uID4g
bGFzdFBvc2l0aW9uT2Zmc2V0ICYmIHN0YXJ0UG9zaXRpb24gPCBzdGF0aWNfY2FzdDxpbnQ+KHBv
c2l0aW9uT2Zmc2V0KSkgeworICAgICAgICBpZiAoYWx0ZXJTdGFydFBvc2l0aW9uICYmIHN0YXJ0
UG9zaXRpb24gPiBzdGF0aWNfY2FzdDx1bnNpZ25lZD4obGFzdFBvc2l0aW9uT2Zmc2V0KSAmJiBz
dGFydFBvc2l0aW9uIDwgcG9zaXRpb25PZmZzZXQpIHsKICAgICAgICAgICAgIHN0YXJ0UG9zaXRp
b24gPSBsYXN0UG9zaXRpb25PZmZzZXQ7CiAgICAgICAgICAgICBhbHRlclN0YXJ0UG9zaXRpb24g
PSBmYWxzZTsKICAgICAgICAgfQogCi0gICAgICAgIGlmIChhbHRlckVuZFBvc2l0aW9uICYmIGVu
ZFBvc2l0aW9uID4gbGFzdFBvc2l0aW9uT2Zmc2V0ICYmIGVuZFBvc2l0aW9uIDwgc3RhdGljX2Nh
c3Q8aW50Pihwb3NpdGlvbk9mZnNldCkpIHsKKyAgICAgICAgaWYgKGFsdGVyRW5kUG9zaXRpb24g
JiYgZW5kUG9zaXRpb24gPiBzdGF0aWNfY2FzdDx1bnNpZ25lZD4obGFzdFBvc2l0aW9uT2Zmc2V0
KSAmJiBlbmRQb3NpdGlvbiA8IHBvc2l0aW9uT2Zmc2V0KSB7CiAgICAgICAgICAgICBlbmRQb3Np
dGlvbiA9IHBvc2l0aW9uT2Zmc2V0OwogICAgICAgICAgICAgYWx0ZXJFbmRQb3NpdGlvbiA9IGZh
bHNlOwogICAgICAgICB9CkBAIC0yODcsOCArMjg5LDggQEAgYm9vbCBTVkdUZXh0UXVlcnk6OnN1
YlN0cmluZ0xlbmd0aENhbGxiYWNrKERhdGEqIHF1ZXJ5RGF0YSwgY29uc3QgU1ZHVGV4dEZyYWdt
ZW4KIHsKICAgICBTdWJTdHJpbmdMZW5ndGhEYXRhKiBkYXRhID0gc3RhdGljX2Nhc3Q8U3ViU3Ry
aW5nTGVuZ3RoRGF0YSo+KHF1ZXJ5RGF0YSk7CiAKLSAgICBpbnQgc3RhcnRQb3NpdGlvbiA9IGRh
dGEtPnN0YXJ0UG9zaXRpb247Ci0gICAgaW50IGVuZFBvc2l0aW9uID0gc3RhcnRQb3NpdGlvbiAr
IGRhdGEtPmxlbmd0aDsKKyAgICB1bnNpZ25lZCBzdGFydFBvc2l0aW9uID0gZGF0YS0+c3RhcnRQ
b3NpdGlvbjsKKyAgICB1bnNpZ25lZCBlbmRQb3NpdGlvbiA9IHN0YXJ0UG9zaXRpb24gKyBkYXRh
LT5sZW5ndGg7CiAgICAgaWYgKCFtYXBTdGFydEVuZFBvc2l0aW9uc0ludG9GcmFnbWVudENvb3Jk
aW5hdGVzKHF1ZXJ5RGF0YSwgZnJhZ21lbnQsIHN0YXJ0UG9zaXRpb24sIGVuZFBvc2l0aW9uKSkK
ICAgICAgICAgcmV0dXJuIGZhbHNlOwogCkBAIC0zMjIsOCArMzI0LDggQEAgYm9vbCBTVkdUZXh0
UXVlcnk6OnN0YXJ0UG9zaXRpb25PZkNoYXJhY3RlckNhbGxiYWNrKERhdGEqIHF1ZXJ5RGF0YSwg
Y29uc3QgU1ZHVGUKIHsKICAgICBTdGFydFBvc2l0aW9uT2ZDaGFyYWN0ZXJEYXRhKiBkYXRhID0g
c3RhdGljX2Nhc3Q8U3RhcnRQb3NpdGlvbk9mQ2hhcmFjdGVyRGF0YSo+KHF1ZXJ5RGF0YSk7CiAK
LSAgICBpbnQgc3RhcnRQb3NpdGlvbiA9IGRhdGEtPnBvc2l0aW9uOwotICAgIGludCBlbmRQb3Np
dGlvbiA9IHN0YXJ0UG9zaXRpb24gKyAxOworICAgIHVuc2lnbmVkIHN0YXJ0UG9zaXRpb24gPSBk
YXRhLT5wb3NpdGlvbjsKKyAgICB1bnNpZ25lZCBlbmRQb3NpdGlvbiA9IHN0YXJ0UG9zaXRpb24g
KyAxOwogICAgIGlmICghbWFwU3RhcnRFbmRQb3NpdGlvbnNJbnRvRnJhZ21lbnRDb29yZGluYXRl
cyhxdWVyeURhdGEsIGZyYWdtZW50LCBzdGFydFBvc2l0aW9uLCBlbmRQb3NpdGlvbikpCiAgICAg
ICAgIHJldHVybiBmYWxzZTsKIApAQCAtMzcxLDggKzM3Myw4IEBAIGJvb2wgU1ZHVGV4dFF1ZXJ5
OjplbmRQb3NpdGlvbk9mQ2hhcmFjdGVyQ2FsbGJhY2soRGF0YSogcXVlcnlEYXRhLCBjb25zdCBT
VkdUZXh0CiB7CiAgICAgRW5kUG9zaXRpb25PZkNoYXJhY3RlckRhdGEqIGRhdGEgPSBzdGF0aWNf
Y2FzdDxFbmRQb3NpdGlvbk9mQ2hhcmFjdGVyRGF0YSo+KHF1ZXJ5RGF0YSk7CiAKLSAgICBpbnQg
c3RhcnRQb3NpdGlvbiA9IGRhdGEtPnBvc2l0aW9uOwotICAgIGludCBlbmRQb3NpdGlvbiA9IHN0
YXJ0UG9zaXRpb24gKyAxOworICAgIHVuc2lnbmVkIHN0YXJ0UG9zaXRpb24gPSBkYXRhLT5wb3Np
dGlvbjsKKyAgICB1bnNpZ25lZCBlbmRQb3NpdGlvbiA9IHN0YXJ0UG9zaXRpb24gKyAxOwogICAg
IGlmICghbWFwU3RhcnRFbmRQb3NpdGlvbnNJbnRvRnJhZ21lbnRDb29yZGluYXRlcyhxdWVyeURh
dGEsIGZyYWdtZW50LCBzdGFydFBvc2l0aW9uLCBlbmRQb3NpdGlvbikpCiAgICAgICAgIHJldHVy
biBmYWxzZTsKIApAQCAtNDE5LDggKzQyMSw4IEBAIGJvb2wgU1ZHVGV4dFF1ZXJ5Ojpyb3RhdGlv
bk9mQ2hhcmFjdGVyQ2FsbGJhY2soRGF0YSogcXVlcnlEYXRhLCBjb25zdCBTVkdUZXh0RnJhCiB7
CiAgICAgUm90YXRpb25PZkNoYXJhY3RlckRhdGEqIGRhdGEgPSBzdGF0aWNfY2FzdDxSb3RhdGlv
bk9mQ2hhcmFjdGVyRGF0YSo+KHF1ZXJ5RGF0YSk7CiAKLSAgICBpbnQgc3RhcnRQb3NpdGlvbiA9
IGRhdGEtPnBvc2l0aW9uOwotICAgIGludCBlbmRQb3NpdGlvbiA9IHN0YXJ0UG9zaXRpb24gKyAx
OworICAgIHVuc2lnbmVkIHN0YXJ0UG9zaXRpb24gPSBkYXRhLT5wb3NpdGlvbjsKKyAgICB1bnNp
Z25lZCBlbmRQb3NpdGlvbiA9IHN0YXJ0UG9zaXRpb24gKyAxOwogICAgIGlmICghbWFwU3RhcnRF
bmRQb3NpdGlvbnNJbnRvRnJhZ21lbnRDb29yZGluYXRlcyhxdWVyeURhdGEsIGZyYWdtZW50LCBz
dGFydFBvc2l0aW9uLCBlbmRQb3NpdGlvbikpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIApAQCAt
NDg3LDggKzQ4OSw4IEBAIGJvb2wgU1ZHVGV4dFF1ZXJ5OjpleHRlbnRPZkNoYXJhY3RlckNhbGxi
YWNrKERhdGEqIHF1ZXJ5RGF0YSwgY29uc3QgU1ZHVGV4dEZyYWdtCiB7CiAgICAgRXh0ZW50T2ZD
aGFyYWN0ZXJEYXRhKiBkYXRhID0gc3RhdGljX2Nhc3Q8RXh0ZW50T2ZDaGFyYWN0ZXJEYXRhKj4o
cXVlcnlEYXRhKTsKIAotICAgIGludCBzdGFydFBvc2l0aW9uID0gZGF0YS0+cG9zaXRpb247Ci0g
ICAgaW50IGVuZFBvc2l0aW9uID0gc3RhcnRQb3NpdGlvbiArIDE7CisgICAgdW5zaWduZWQgc3Rh
cnRQb3NpdGlvbiA9IGRhdGEtPnBvc2l0aW9uOworICAgIHVuc2lnbmVkIGVuZFBvc2l0aW9uID0g
c3RhcnRQb3NpdGlvbiArIDE7CiAgICAgaWYgKCFtYXBTdGFydEVuZFBvc2l0aW9uc0ludG9GcmFn
bWVudENvb3JkaW5hdGVzKHF1ZXJ5RGF0YSwgZnJhZ21lbnQsIHN0YXJ0UG9zaXRpb24sIGVuZFBv
c2l0aW9uKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCkBAIC01MjIsOCArNTI0LDggQEAgYm9v
bCBTVkdUZXh0UXVlcnk6OmNoYXJhY3Rlck51bWJlckF0UG9zaXRpb25DYWxsYmFjayhEYXRhKiBx
dWVyeURhdGEsIGNvbnN0IFNWR1QKIAogICAgIEZsb2F0UmVjdCBleHRlbnQ7CiAgICAgZm9yICh1
bnNpZ25lZCBpID0gMDsgaSA8IGZyYWdtZW50Lmxlbmd0aDsgKytpKSB7Ci0gICAgICAgIGludCBz
dGFydFBvc2l0aW9uID0gZGF0YS0+cHJvY2Vzc2VkQ2hhcmFjdGVycyArIGk7Ci0gICAgICAgIGlu
dCBlbmRQb3NpdGlvbiA9IHN0YXJ0UG9zaXRpb24gKyAxOworICAgICAgICB1bnNpZ25lZCBzdGFy
dFBvc2l0aW9uID0gZGF0YS0+cHJvY2Vzc2VkQ2hhcmFjdGVycyArIGk7CisgICAgICAgIHVuc2ln
bmVkIGVuZFBvc2l0aW9uID0gc3RhcnRQb3NpdGlvbiArIDE7CiAgICAgICAgIGlmICghbWFwU3Rh
cnRFbmRQb3NpdGlvbnNJbnRvRnJhZ21lbnRDb29yZGluYXRlcyhxdWVyeURhdGEsIGZyYWdtZW50
LCBzdGFydFBvc2l0aW9uLCBlbmRQb3NpdGlvbikpCiAgICAgICAgICAgICBjb250aW51ZTsKIApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdUZXh0UXVlcnkuaCBi
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHVGV4dFF1ZXJ5LmgKaW5kZXggNzIxYjJk
ZjhlMzMyNDVkYTg2NDMzODViZTZlZTJiMWQyYjA5MzhkZi4uMzg3MzBhMzhkMDYxZTgyNWNkOTM3
ZDc4MTg0YjhkM2IzZmEwZmFhZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L3N2Zy9TVkdUZXh0UXVlcnkuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NW
R1RleHRRdWVyeS5oCkBAIC01Miw4ICs1Miw4IEBAIHByaXZhdGU6CiAgICAgYm9vbCBleGVjdXRl
UXVlcnkoRGF0YSosIFByb2Nlc3NUZXh0RnJhZ21lbnRDYWxsYmFjaykgY29uc3Q7CiAKICAgICB2
b2lkIGNvbGxlY3RUZXh0Qm94ZXNJbkZsb3dCb3goSW5saW5lRmxvd0JveCopOwotICAgIGJvb2wg
bWFwU3RhcnRFbmRQb3NpdGlvbnNJbnRvRnJhZ21lbnRDb29yZGluYXRlcyhEYXRhKiwgY29uc3Qg
U1ZHVGV4dEZyYWdtZW50JiwgaW50JiBzdGFydFBvc2l0aW9uLCBpbnQmIGVuZFBvc2l0aW9uKSBj
b25zdDsKLSAgICB2b2lkIG1vZGlmeVN0YXJ0RW5kUG9zaXRpb25zUmVzcGVjdGluZ0xpZ2F0dXJl
cyhEYXRhKiwgaW50JiBzdGFydFBvc2l0aW9uLCBpbnQmIGVuZFBvc2l0aW9uKSBjb25zdDsKKyAg
ICBib29sIG1hcFN0YXJ0RW5kUG9zaXRpb25zSW50b0ZyYWdtZW50Q29vcmRpbmF0ZXMoRGF0YSos
IGNvbnN0IFNWR1RleHRGcmFnbWVudCYsIHVuc2lnbmVkJiBzdGFydFBvc2l0aW9uLCB1bnNpZ25l
ZCYgZW5kUG9zaXRpb24pIGNvbnN0OworICAgIHZvaWQgbW9kaWZ5U3RhcnRFbmRQb3NpdGlvbnNS
ZXNwZWN0aW5nTGlnYXR1cmVzKERhdGEqLCB1bnNpZ25lZCYgc3RhcnRQb3NpdGlvbiwgdW5zaWdu
ZWQmIGVuZFBvc2l0aW9uKSBjb25zdDsKIAogcHJpdmF0ZToKICAgICBib29sIG51bWJlck9mQ2hh
cmFjdGVyc0NhbGxiYWNrKERhdGEqLCBjb25zdCBTVkdUZXh0RnJhZ21lbnQmKSBjb25zdDsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHVGV4dFJ1blJlbmRlcmlu
Z0NvbnRleHQuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdUZXh0UnVuUmVu
ZGVyaW5nQ29udGV4dC5jcHAKaW5kZXggNjE3NzM4NjNjN2NmNDMzMmUyZDQzOWMxMWRmYTllNzdm
ZGI3ZDg3NC4uZTM5MmMwMzU1NzJmNDBkNjQ0Mjk0MjdhNjUxMGM0ZjZiYTcwMWViNyAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdUZXh0UnVuUmVuZGVyaW5nQ29u
dGV4dC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdUZXh0UnVuUmVu
ZGVyaW5nQ29udGV4dC5jcHAKQEAgLTI4Nyw3ICsyODcsNyBAQCB2b2lkIFNWR1RleHRSdW5SZW5k
ZXJpbmdDb250ZXh0OjpkcmF3U1ZHR2x5cGhzKEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgY29u
c3QgUwogICAgIH0KIH0KIAotR2x5cGhEYXRhIFNWR1RleHRSdW5SZW5kZXJpbmdDb250ZXh0Ojpn
bHlwaERhdGFGb3JDaGFyYWN0ZXIoY29uc3QgRm9udCYgZm9udCwgV2lkdGhJdGVyYXRvciYgaXRl
cmF0b3IsIFVDaGFyMzIgY2hhcmFjdGVyLCBib29sIG1pcnJvciwgaW50IGN1cnJlbnRDaGFyYWN0
ZXIsIHVuc2lnbmVkJiBhZHZhbmNlTGVuZ3RoKQorR2x5cGhEYXRhIFNWR1RleHRSdW5SZW5kZXJp
bmdDb250ZXh0OjpnbHlwaERhdGFGb3JDaGFyYWN0ZXIoY29uc3QgRm9udCYgZm9udCwgV2lkdGhJ
dGVyYXRvciYgaXRlcmF0b3IsIFVDaGFyMzIgY2hhcmFjdGVyLCBib29sIG1pcnJvciwgdW5zaWdu
ZWQgY3VycmVudENoYXJhY3RlciwgdW5zaWduZWQmIGFkdmFuY2VMZW5ndGgpCiB7CiAgICAgY29u
c3QgU2ltcGxlRm9udERhdGEqIHByaW1hcnlGb250ID0gZm9udC5wcmltYXJ5Rm9udCgpOwogICAg
IEFTU0VSVChwcmltYXJ5Rm9udCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvc3ZnL1NWR1RleHRSdW5SZW5kZXJpbmdDb250ZXh0LmggYi9Tb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvc3ZnL1NWR1RleHRSdW5SZW5kZXJpbmdDb250ZXh0LmgKaW5kZXggZDBiOTFmNmNiMzQ4
ZWU3M2NjNjFkNDkzOGJhMTRkNDY0YzBhY2E2ZC4uMWRkNjQ2YjU3MGNkNmM1OGU2ZDQ2YmYwNTc0
ZjY5M2NmYWJiNDc1YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9T
VkdUZXh0UnVuUmVuZGVyaW5nQ29udGV4dC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9zdmcvU1ZHVGV4dFJ1blJlbmRlcmluZ0NvbnRleHQuaApAQCAtNDIsNyArNDIsNyBAQCBwdWJs
aWM6CiAgICAgUmVuZGVyU1ZHUmVzb3VyY2UqIGFjdGl2ZVBhaW50aW5nUmVzb3VyY2UoKSBjb25z
dCB7IHJldHVybiBtX2FjdGl2ZVBhaW50aW5nUmVzb3VyY2U7IH0KICAgICB2b2lkIHNldEFjdGl2
ZVBhaW50aW5nUmVzb3VyY2UoUmVuZGVyU1ZHUmVzb3VyY2UqIG9iamVjdCkgeyBtX2FjdGl2ZVBh
aW50aW5nUmVzb3VyY2UgPSBvYmplY3Q7IH0KIAotICAgIHZpcnR1YWwgR2x5cGhEYXRhIGdseXBo
RGF0YUZvckNoYXJhY3Rlcihjb25zdCBGb250JiwgV2lkdGhJdGVyYXRvciYsIFVDaGFyMzIgY2hh
cmFjdGVyLCBib29sIG1pcnJvciwgaW50IGN1cnJlbnRDaGFyYWN0ZXIsIHVuc2lnbmVkJiBhZHZh
bmNlTGVuZ3RoKSBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIEdseXBoRGF0YSBnbHlwaERhdGFGb3JD
aGFyYWN0ZXIoY29uc3QgRm9udCYsIFdpZHRoSXRlcmF0b3ImLCBVQ2hhcjMyIGNoYXJhY3Rlciwg
Ym9vbCBtaXJyb3IsIHVuc2lnbmVkIGN1cnJlbnRDaGFyYWN0ZXIsIHVuc2lnbmVkJiBhZHZhbmNl
TGVuZ3RoKSBvdmVycmlkZTsKICAgICB2aXJ0dWFsIHZvaWQgZHJhd1NWR0dseXBocyhHcmFwaGlj
c0NvbnRleHQqLCBjb25zdCBTaW1wbGVGb250RGF0YSosIGNvbnN0IEdseXBoQnVmZmVyJiwgaW50
IGZyb20sIGludCB0bywgY29uc3QgRmxvYXRQb2ludCYpIGNvbnN0IG92ZXJyaWRlOwogICAgIHZp
cnR1YWwgZmxvYXQgZmxvYXRXaWR0aFVzaW5nU1ZHRm9udChjb25zdCBGb250JiwgY29uc3QgVGV4
dFJ1biYsIGludCYgY2hhcnNDb25zdW1lZCwgU3RyaW5nJiBnbHlwaE5hbWUpIGNvbnN0IG92ZXJy
aWRlOwogICAgIHZpcnR1YWwgYm9vbCBhcHBseVNWR0tlcm5pbmcoY29uc3QgU2ltcGxlRm9udERh
dGEqLCBXaWR0aEl0ZXJhdG9yJiwgR2x5cGhCdWZmZXIqLCBpbnQgZnJvbSkgY29uc3Qgb3ZlcnJp
ZGU7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRm9udERhdGEuY3BwIGIvU291
cmNlL1dlYkNvcmUvc3ZnL1NWR0ZvbnREYXRhLmNwcAppbmRleCA4MDcxMGNlNmNmY2M1OGFiYjZk
ZGIxZjkxZTNmZDRkMjJlNDJjMGRjLi44MjVlNTlmOWFkMDQ4NzIyYTY1MjEzMWU1MzIyMDFiOTUw
OTY4OTVmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRm9udERhdGEuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGb250RGF0YS5jcHAKQEAgLTEzMCwxMSArMTMwLDEx
IEBAIGZsb2F0IFNWR0ZvbnREYXRhOjp3aWR0aEZvclNWR0dseXBoKEdseXBoIGdseXBoLCBmbG9h
dCBmb250U2l6ZSkgY29uc3QKICAgICByZXR1cm4gc3ZnR2x5cGguaG9yaXpvbnRhbEFkdmFuY2VY
ICogc2NhbGVFbVRvVW5pdHMoZm9udFNpemUsIHN2Z0ZvbnRGYWNlRWxlbWVudC0+dW5pdHNQZXJF
bSgpKTsKIH0KIAotYm9vbCBTVkdGb250RGF0YTo6YXBwbHlTVkdHbHlwaFNlbGVjdGlvbihXaWR0
aEl0ZXJhdG9yJiBpdGVyYXRvciwgR2x5cGhEYXRhJiBnbHlwaERhdGEsIGJvb2wgbWlycm9yLCBp
bnQgY3VycmVudENoYXJhY3RlciwgdW5zaWduZWQmIGFkdmFuY2VMZW5ndGgpIGNvbnN0Citib29s
IFNWR0ZvbnREYXRhOjphcHBseVNWR0dseXBoU2VsZWN0aW9uKFdpZHRoSXRlcmF0b3ImIGl0ZXJh
dG9yLCBHbHlwaERhdGEmIGdseXBoRGF0YSwgYm9vbCBtaXJyb3IsIHVuc2lnbmVkIGN1cnJlbnRD
aGFyYWN0ZXIsIHVuc2lnbmVkJiBhZHZhbmNlTGVuZ3RoKSBjb25zdAogewogICAgIGNvbnN0IFRl
eHRSdW4mIHJ1biA9IGl0ZXJhdG9yLnJ1bigpOwogICAgIFZlY3RvcjxTVkdHbHlwaDo6QXJhYmlj
Rm9ybT4mIGFyYWJpY0Zvcm1zID0gaXRlcmF0b3IuYXJhYmljRm9ybXMoKTsKLSAgICBBU1NFUlQo
aW50KHJ1bi5jaGFyYWN0ZXJzTGVuZ3RoKCkpID49IGN1cnJlbnRDaGFyYWN0ZXIpOworICAgIEFT
U0VSVChydW4uY2hhcmFjdGVyc0xlbmd0aCgpID49IGN1cnJlbnRDaGFyYWN0ZXIpOwogCiAgICAg
Ly8gQXNzb2NpYXRlIHRleHQgd2l0aCBhcmFiaWMgZm9ybXMsIGlmIG5lZWRlZC4KICAgICBTdHJp
bmcgcmVtYWluaW5nVGV4dEluUnVuOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3ZnL1NW
R0ZvbnREYXRhLmggYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRm9udERhdGEuaAppbmRleCA3Mjcy
OGExN2FhNDRiMzk2Y2QwNDEyNGI1MTI0OTIzODBjZjIyNDM5Li4zMjUwYTQ1ZjZkMzc3N2Y4MzFl
ODJiMzJkNmEyMzQ1OGRkZDM1NmZhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZH
Rm9udERhdGEuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRm9udERhdGEuaApAQCAtMzYs
NyArMzYsNyBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIGluaXRpYWxpemVGb250RGF0YShT
aW1wbGVGb250RGF0YSosIGZsb2F0IGZvbnRTaXplKSBvdmVycmlkZTsKICAgICB2aXJ0dWFsIGZs
b2F0IHdpZHRoRm9yU1ZHR2x5cGgoR2x5cGgsIGZsb2F0IGZvbnRTaXplKSBjb25zdCBvdmVycmlk
ZTsKICAgICB2aXJ0dWFsIGJvb2wgZmlsbFNWR0dseXBoUGFnZShHbHlwaFBhZ2UqLCB1bnNpZ25l
ZCBvZmZzZXQsIHVuc2lnbmVkIGxlbmd0aCwgVUNoYXIqIGJ1ZmZlciwgdW5zaWduZWQgYnVmZmVy
TGVuZ3RoLCBjb25zdCBTaW1wbGVGb250RGF0YSopIGNvbnN0IG92ZXJyaWRlOwotICAgIHZpcnR1
YWwgYm9vbCBhcHBseVNWR0dseXBoU2VsZWN0aW9uKFdpZHRoSXRlcmF0b3ImLCBHbHlwaERhdGEm
LCBib29sIG1pcnJvciwgaW50IGN1cnJlbnRDaGFyYWN0ZXIsIHVuc2lnbmVkJiBhZHZhbmNlTGVu
Z3RoKSBjb25zdCBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIGJvb2wgYXBwbHlTVkdHbHlwaFNlbGVj
dGlvbihXaWR0aEl0ZXJhdG9yJiwgR2x5cGhEYXRhJiwgYm9vbCBtaXJyb3IsIHVuc2lnbmVkIGN1
cnJlbnRDaGFyYWN0ZXIsIHVuc2lnbmVkJiBhZHZhbmNlTGVuZ3RoKSBjb25zdCBvdmVycmlkZTsK
IAogICAgIFNWR0ZvbnRGYWNlRWxlbWVudCogc3ZnRm9udEZhY2VFbGVtZW50KCkgY29uc3QgeyBy
ZXR1cm4gbV9zdmdGb250RmFjZUVsZW1lbnQ7IH0KIAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>233240</attachid>
            <date>2014-06-17 10:21:40 -0700</date>
            <delta_ts>2014-06-17 12:48:17 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-133592-20140617102117.patch</filename>
            <type>text/plain</type>
            <size>91241</size>
            <attacher name="Myles C. Maxfield">mmaxfield</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTY5OTQyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZTIyOGM4NmZiMjlmZjVl
OWZkYjU1NjBlODAzMDc0Mzc3YjgwNzhmOS4uOWFkMjI4MDI4MDEwNTQ0OTk4YmNmN2YwM2FlZmY3
NmI0YTI3YzQwMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDEzNCBAQAorMjAxNC0wNi0xNyAgTXls
ZXMgQy4gTWF4ZmllbGQgIDxtbWF4ZmllbGRAYXBwbGUuY29tPgorCisgICAgICAgIFVzZSB1bnNp
Z25lZHMgaW5zdGVhZCBvZiBpbnRzIGZvciBpbmRleGVzIGludG8gYSBzdHJpbmcgaW4gdGV4dCBs
YXlvdXQgY29kZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9MTMzNTkyCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAg
ICAgTWlncmF0ZSBtdWNoIG9mIHRoZSB0ZXh0LWhhbmRsaW5nIGNvZGUgdG8gdXNlIHVuc2lnbmVk
cyBmb3IgaW5kZXhlcyBpbnRvIGEgc3RyaW5nLgorCisgICAgICAgIE5vIG5ldyB0ZXN0cyBiZWNh
dXNlIHRoZXJlIGlzIG5vIGJlaGF2aW9yIGNoYW5nZS4KKworICAgICAgICAqIFdlYkNvcmUuZXhw
LmluOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0ZvbnQuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6Rm9udDo6ZHJhd1RleHQpOgorICAgICAgICAoV2ViQ29yZTo6Rm9udDo6ZHJhd0VtcGhh
c2lzTWFya3MpOgorICAgICAgICAoV2ViQ29yZTo6Rm9udDo6YWRqdXN0U2VsZWN0aW9uUmVjdEZv
clRleHQpOgorICAgICAgICAoV2ViQ29yZTo6Y29tcHV0ZVVuZGVybGluZVR5cGUpOgorICAgICAg
ICAqIHBsYXRmb3JtL2dyYXBoaWNzL0ZvbnQuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy9Gb250RmFzdFBhdGguY3BwOgorICAgICAgICAoV2ViQ29yZTo6Rm9udDo6Z2V0R2x5cGhzQW5k
QWR2YW5jZXNGb3JTaW1wbGVUZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OkZvbnQ6OmRyYXdTaW1w
bGVUZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OkZvbnQ6OmRyYXdFbXBoYXNpc01hcmtzRm9yU2lt
cGxlVGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpGb250OjpkcmF3R2x5cGhCdWZmZXIpOgorICAg
ICAgICAoV2ViQ29yZTo6Rm9udDo6ZHJhd0VtcGhhc2lzTWFya3MpOgorICAgICAgICAoV2ViQ29y
ZTo6Rm9udDo6YWRqdXN0U2VsZWN0aW9uUmVjdEZvclNpbXBsZVRleHQpOgorICAgICAgICAqIHBs
YXRmb3JtL2dyYXBoaWNzL0dseXBoQnVmZmVyLmg6CisgICAgICAgIChXZWJDb3JlOjpHbHlwaEJ1
ZmZlcjo6c2l6ZSk6CisgICAgICAgIChXZWJDb3JlOjpHbHlwaEJ1ZmZlcjo6Z2x5cGhzKToKKyAg
ICAgICAgKFdlYkNvcmU6OkdseXBoQnVmZmVyOjphZHZhbmNlcyk6CisgICAgICAgIChXZWJDb3Jl
OjpHbHlwaEJ1ZmZlcjo6Zm9udERhdGFBdCk6CisgICAgICAgIChXZWJDb3JlOjpHbHlwaEJ1ZmZl
cjo6YWR2YW5jZUF0KToKKyAgICAgICAgKFdlYkNvcmU6OkdseXBoQnVmZmVyOjpvZmZzZXRBdCk6
CisgICAgICAgIChXZWJDb3JlOjpHbHlwaEJ1ZmZlcjo6cmV2ZXJzZSk6CisgICAgICAgIChXZWJD
b3JlOjpHbHlwaEJ1ZmZlcjo6b2Zmc2V0SW5TdHJpbmcpOgorICAgICAgICAoV2ViQ29yZTo6R2x5
cGhCdWZmZXI6OnN3YXApOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29u
dGV4dC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpUZXh0UnVuSXRlcmF0b3I6OmF0RW5kKToKKyAg
ICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9MYXRpbjFUZXh0SXRlcmF0b3IuaDoKKyAgICAgICAg
KFdlYkNvcmU6OkxhdGluMVRleHRJdGVyYXRvcjo6TGF0aW4xVGV4dEl0ZXJhdG9yKToKKyAgICAg
ICAgKFdlYkNvcmU6OkxhdGluMVRleHRJdGVyYXRvcjo6Y3VycmVudENoYXJhY3Rlcik6CisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvU2ltcGxlRm9udERhdGEuaDoKKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy9TdXJyb2dhdGVQYWlyQXdhcmVUZXh0SXRlcmF0b3IuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6U3Vycm9nYXRlUGFpckF3YXJlVGV4dEl0ZXJhdG9yOjpTdXJyb2dhdGVQYWly
QXdhcmVUZXh0SXRlcmF0b3IpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL1N1cnJvZ2F0
ZVBhaXJBd2FyZVRleHRJdGVyYXRvci5oOgorICAgICAgICAoV2ViQ29yZTo6U3Vycm9nYXRlUGFp
ckF3YXJlVGV4dEl0ZXJhdG9yOjpjdXJyZW50Q2hhcmFjdGVyKToKKyAgICAgICAgKiBwbGF0Zm9y
bS9ncmFwaGljcy9UZXh0UnVuLmg6CisgICAgICAgIChXZWJDb3JlOjpUZXh0UnVuOjpsZW5ndGgp
OgorICAgICAgICAoV2ViQ29yZTo6VGV4dFJ1bjo6Y2hhcmFjdGVyc0xlbmd0aCk6CisgICAgICAg
ICogcGxhdGZvcm0vZ3JhcGhpY3MvV2lkdGhJdGVyYXRvci5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpXaWR0aEl0ZXJhdG9yOjpnbHlwaERhdGFGb3JDaGFyYWN0ZXIpOgorICAgICAgICAoV2ViQ29y
ZTo6YXBwbHlGb250VHJhbnNmb3Jtcyk6CisgICAgICAgIChXZWJDb3JlOjpXaWR0aEl0ZXJhdG9y
OjphZHZhbmNlSW50ZXJuYWwpOgorICAgICAgICAoV2ViQ29yZTo6V2lkdGhJdGVyYXRvcjo6YWR2
YW5jZSk6CisgICAgICAgIChXZWJDb3JlOjpXaWR0aEl0ZXJhdG9yOjphZHZhbmNlT25lQ2hhcmFj
dGVyKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9XaWR0aEl0ZXJhdG9yLmg6CisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vRm9udENhaXJvLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OkZvbnQ6OmRyYXdHbHlwaHMpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nh
aXJvL0ZvbnRDYWlyb0hhcmZidXp6TkcuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Rm9udDo6ZHJh
d0NvbXBsZXhUZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OkZvbnQ6OmRyYXdFbXBoYXNpc01hcmtz
Rm9yQ29tcGxleFRleHQpOgorICAgICAgICAoV2ViQ29yZTo6Rm9udDo6YWRqdXN0U2VsZWN0aW9u
UmVjdEZvckNvbXBsZXhUZXh0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9oYXJmYnV6
ei9IYXJmQnV6elNoYXBlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpIYXJmQnV6elNoYXBlcjo6
c2V0Tm9ybWFsaXplZEJ1ZmZlcik6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0Zv
bnRDb21wbGV4VGV4dE1hYy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGb250OjphZGp1c3RTZWxl
Y3Rpb25SZWN0Rm9yQ29tcGxleFRleHQpOgorICAgICAgICAoV2ViQ29yZTo6Rm9udDo6Z2V0R2x5
cGhzQW5kQWR2YW5jZXNGb3JDb21wbGV4VGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpGb250Ojpk
cmF3Q29tcGxleFRleHQpOgorICAgICAgICAoV2ViQ29yZTo6Rm9udDo6ZHJhd0VtcGhhc2lzTWFy
a3NGb3JDb21wbGV4VGV4dCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0ZvbnRN
YWMubW06CisgICAgICAgIChXZWJDb3JlOjpGb250OjpkcmF3R2x5cGhzKToKKyAgICAgICAgKiBw
bGF0Zm9ybS9ncmFwaGljcy93aW4vRm9udENHV2luLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZv
bnQ6OmRyYXdHbHlwaHMpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9Gb250V2lu
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZvbnQ6OmFkanVzdFNlbGVjdGlvblJlY3RGb3JDb21w
bGV4VGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpGb250OjpnZXRHbHlwaHNBbmRBZHZhbmNlc0Zv
ckNvbXBsZXhUZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OkZvbnQ6OmRyYXdDb21wbGV4VGV4dCk6
CisgICAgICAgIChXZWJDb3JlOjpGb250OjpkcmF3RW1waGFzaXNNYXJrc0ZvckNvbXBsZXhUZXh0
KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy93aW5jZS9Gb250V2luQ0UuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6Rm9udDo6ZHJhd0dseXBocyk6CisgICAgICAgIChXZWJDb3JlOjpGb250
OjpkcmF3Q29tcGxleFRleHQpOgorICAgICAgICAoV2ViQ29yZTo6Rm9udDo6ZHJhd0VtcGhhc2lz
TWFya3NGb3JDb21wbGV4VGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpGb250OjpzZWxlY3Rpb25S
ZWN0Rm9yQ29tcGxleFRleHQpOgorICAgICAgICAqIHJlbmRlcmluZy9JbmxpbmVUZXh0Qm94LmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OklubGluZVRleHRCb3g6OmlzU2VsZWN0ZWQpOgorICAgICAg
ICAoV2ViQ29yZTo6SW5saW5lVGV4dEJveDo6c2VsZWN0aW9uU3RhdGUpOgorICAgICAgICAoV2Vi
Q29yZTo6YWRqdXN0Q2hhcmFjdGVyc0FuZExlbmd0aEZvckh5cGhlbik6CisgICAgICAgIChXZWJD
b3JlOjpJbmxpbmVUZXh0Qm94Ojpsb2NhbFNlbGVjdGlvblJlY3QpOgorICAgICAgICAoV2ViQ29y
ZTo6SW5saW5lVGV4dEJveDo6cGFpbnQpOgorICAgICAgICAoV2ViQ29yZTo6SW5saW5lVGV4dEJv
eDo6c2VsZWN0aW9uU3RhcnRFbmQpOgorICAgICAgICAoV2ViQ29yZTo6SW5saW5lVGV4dEJveDo6
cGFpbnRTZWxlY3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6SW5saW5lVGV4dEJveDo6cGFpbnRD
b21wb3NpdGlvbkJhY2tncm91bmQpOgorICAgICAgICAoV2ViQ29yZTo6SW5saW5lVGV4dEJveDo6
cGFpbnREb2N1bWVudE1hcmtlcik6CisgICAgICAgIChXZWJDb3JlOjpJbmxpbmVUZXh0Qm94Ojpw
YWludFRleHRNYXRjaE1hcmtlcik6CisgICAgICAgIChXZWJDb3JlOjpJbmxpbmVUZXh0Qm94Ojpj
b21wdXRlUmVjdEZvclJlcGxhY2VtZW50TWFya2VyKToKKyAgICAgICAgKFdlYkNvcmU6OklubGlu
ZVRleHRCb3g6OnBhaW50Q29tcG9zaXRpb25VbmRlcmxpbmUpOgorICAgICAgICAoV2ViQ29yZTo6
SW5saW5lVGV4dEJveDo6cG9zaXRpb25Gb3JPZmZzZXQpOgorICAgICAgICAoV2ViQ29yZTo6SW5s
aW5lVGV4dEJveDo6Y29uc3RydWN0VGV4dFJ1bik6CisgICAgICAgICogcmVuZGVyaW5nL0lubGlu
ZVRleHRCb3guaDoKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyQ29tYmluZVRleHQuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQ29tYmluZVRleHQ6OmdldFN0cmluZ1RvUmVuZGVyKToK
KyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyQ29tYmluZVRleHQuaDoKKyAgICAgICAgKiByZW5k
ZXJpbmcvc3ZnL1NWR0lubGluZUZsb3dCb3guY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZHSW5s
aW5lRmxvd0JveDo6Y29tcHV0ZVRleHRNYXRjaE1hcmtlclJlY3RGb3JSZW5kZXJlcik6CisgICAg
ICAgICogcmVuZGVyaW5nL3N2Zy9TVkdJbmxpbmVUZXh0Qm94LmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OlNWR0lubGluZVRleHRCb3g6OnBvc2l0aW9uRm9yT2Zmc2V0KToKKyAgICAgICAgKFdlYkNv
cmU6OlNWR0lubGluZVRleHRCb3g6OmxvY2FsU2VsZWN0aW9uUmVjdCk6CisgICAgICAgIChXZWJD
b3JlOjpTVkdJbmxpbmVUZXh0Qm94OjpwYWludFNlbGVjdGlvbkJhY2tncm91bmQpOgorICAgICAg
ICAoV2ViQ29yZTo6U1ZHSW5saW5lVGV4dEJveDo6bWFwU3RhcnRFbmRQb3NpdGlvbnNJbnRvRnJh
Z21lbnRDb29yZGluYXRlcyk6CisgICAgICAgIChXZWJDb3JlOjpTVkdJbmxpbmVUZXh0Qm94Ojpw
YWludFRleHQpOgorICAgICAgICAqIHJlbmRlcmluZy9zdmcvU1ZHSW5saW5lVGV4dEJveC5oOgor
ICAgICAgICAqIHJlbmRlcmluZy9zdmcvU1ZHVGV4dE1ldHJpY3NCdWlsZGVyLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OlNWR1RleHRNZXRyaWNzQnVpbGRlcjo6Y3VycmVudENoYXJhY3RlclN0YXJ0
c1N1cnJvZ2F0ZVBhaXIpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHVGV4dE1ldHJpY3NCdWlsZGVy
OjphZHZhbmNlKToKKyAgICAgICAgKiByZW5kZXJpbmcvc3ZnL1NWR1RleHRRdWVyeS5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpTVkdUZXh0UXVlcnk6Om1hcFN0YXJ0RW5kUG9zaXRpb25zSW50b0Zy
YWdtZW50Q29vcmRpbmF0ZXMpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHVGV4dFF1ZXJ5Ojptb2Rp
ZnlTdGFydEVuZFBvc2l0aW9uc1Jlc3BlY3RpbmdMaWdhdHVyZXMpOgorICAgICAgICAoV2ViQ29y
ZTo6U1ZHVGV4dFF1ZXJ5OjpzdWJTdHJpbmdMZW5ndGhDYWxsYmFjayk6CisgICAgICAgIChXZWJD
b3JlOjpTVkdUZXh0UXVlcnk6OnN0YXJ0UG9zaXRpb25PZkNoYXJhY3RlckNhbGxiYWNrKToKKyAg
ICAgICAgKFdlYkNvcmU6OlNWR1RleHRRdWVyeTo6ZW5kUG9zaXRpb25PZkNoYXJhY3RlckNhbGxi
YWNrKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR1RleHRRdWVyeTo6cm90YXRpb25PZkNoYXJhY3Rl
ckNhbGxiYWNrKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR1RleHRRdWVyeTo6ZXh0ZW50T2ZDaGFy
YWN0ZXJDYWxsYmFjayk6CisgICAgICAgIChXZWJDb3JlOjpTVkdUZXh0UXVlcnk6OmNoYXJhY3Rl
ck51bWJlckF0UG9zaXRpb25DYWxsYmFjayk6CisgICAgICAgICogcmVuZGVyaW5nL3N2Zy9TVkdU
ZXh0UXVlcnkuaDoKKyAgICAgICAgKiByZW5kZXJpbmcvc3ZnL1NWR1RleHRSdW5SZW5kZXJpbmdD
b250ZXh0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR0dseXBoVG9QYXRoVHJhbnNsYXRvcjo6
U1ZHR2x5cGhUb1BhdGhUcmFuc2xhdG9yKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR1RleHRSdW5S
ZW5kZXJpbmdDb250ZXh0OjpnbHlwaERhdGFGb3JDaGFyYWN0ZXIpOgorICAgICAgICAqIHJlbmRl
cmluZy9zdmcvU1ZHVGV4dFJ1blJlbmRlcmluZ0NvbnRleHQuaDoKKyAgICAgICAgKiBzdmcvU1ZH
Rm9udERhdGEuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZHRm9udERhdGE6OmFwcGx5U1ZHR2x5
cGhTZWxlY3Rpb24pOgorICAgICAgICAqIHN2Zy9TVkdGb250RGF0YS5oOgorCiAyMDE0LTA2LTEz
ICBBbmRlcnMgQ2FybHNzb24gIDxhbmRlcnNjYUBhcHBsZS5jb20+CiAKICAgICAgICAgQWRkIGEg
SFRUUEhlYWRlck1hcDo6ZmluZCBvdmVybG9hZCB0aGF0IHRha2VzIGEgSFRUUEhlYWRlck5hbWUK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZXhwLmluIGIvU291cmNlL1dlYkNv
cmUvV2ViQ29yZS5leHAuaW4KaW5kZXggNWI5MjkyMTBjZmI3MGI0OGU0MTZmNDBmN2EwM2E1NmEz
ZDM0YjVhNC4uMWEyNTg3OTUyYzBlMTQyYTQwMDIyNzgxOWNjNGE3MDRmNTQwZmI0ZCAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5leHAuaW4KKysrIGIvU291cmNlL1dlYkNvcmUv
V2ViQ29yZS5leHAuaW4KQEAgLTE4NTIsNyArMTg1Miw3IEBAIF9fWk5LN1dlYkNvcmUzVVJMNXF1
ZXJ5RXYKIF9fWk5LN1dlYkNvcmUzVVJMOHByb3RvY29sRXYKIF9fWk5LN1dlYkNvcmUzVVJMY3ZQ
NU5TVVJMRXYKIF9fWk5LN1dlYkNvcmU0Rm9udDV3aWR0aEVSS05TXzdUZXh0UnVuRVBOM1dURjdI
YXNoU2V0SVBLTlNfMTRTaW1wbGVGb250RGF0YUVOUzRfN1B0ckhhc2hJUzhfRUVOUzRfMTBIYXNo
VHJhaXRzSVM4X0VFRUVQTlNfMTNHbHlwaE92ZXJmbG93RQotX19aTks3V2ViQ29yZTRGb250OGRy
YXdUZXh0RVBOU18xNUdyYXBoaWNzQ29udGV4dEVSS05TXzdUZXh0UnVuRVJLTlNfMTBGbG9hdFBv
aW50RWlpTlMwXzI0Q3VzdG9tRm9udE5vdFJlYWR5QWN0aW9uRQorX19aTks3V2ViQ29yZTRGb250
OGRyYXdUZXh0RVBOU18xNUdyYXBoaWNzQ29udGV4dEVSS05TXzdUZXh0UnVuRVJLTlNfMTBGbG9h
dFBvaW50RWppTlMwXzI0Q3VzdG9tRm9udE5vdFJlYWR5QWN0aW9uRQogX19aTks3V2ViQ29yZTRG
b250ZXFFUktTMF8KIF9fWk5LN1dlYkNvcmU0Tm9kZTExdGV4dENvbnRlbnRFYgogX19aTks3V2Vi
Q29yZTROb2RlMTNvd25lckRvY3VtZW50RXYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL0ZvbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvRm9udC5jcHAKaW5kZXggY2Q2MjNmMzg5NWE1MDk4NTBjNjg4YzRkNjgwNTI5YzdmYTNhYTVm
Zi4uZTY5NmRkNTcxYjg5ZmMzZTc3MGFiN2IyN2RiYjk3OWFhYjkxOGI0NiAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udC5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udC5jcHAKQEAgLTMyOSw3ICszMjksNyBAQCB2b2lk
IEZvbnQ6OnVwZGF0ZShQYXNzUmVmUHRyPEZvbnRTZWxlY3Rvcj4gZm9udFNlbGVjdG9yKSBjb25z
dAogICAgIG1fdHlwZXNldHRpbmdGZWF0dXJlcyA9IGNvbXB1dGVUeXBlc2V0dGluZ0ZlYXR1cmVz
KCk7CiB9CiAKLWZsb2F0IEZvbnQ6OmRyYXdUZXh0KEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwg
Y29uc3QgVGV4dFJ1biYgcnVuLCBjb25zdCBGbG9hdFBvaW50JiBwb2ludCwgaW50IGZyb20sIGlu
dCB0bywgQ3VzdG9tRm9udE5vdFJlYWR5QWN0aW9uIGN1c3RvbUZvbnROb3RSZWFkeUFjdGlvbikg
Y29uc3QKK2Zsb2F0IEZvbnQ6OmRyYXdUZXh0KEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgY29u
c3QgVGV4dFJ1biYgcnVuLCBjb25zdCBGbG9hdFBvaW50JiBwb2ludCwgdW5zaWduZWQgZnJvbSwg
aW50IGluaXRpYWxUbywgQ3VzdG9tRm9udE5vdFJlYWR5QWN0aW9uIGN1c3RvbUZvbnROb3RSZWFk
eUFjdGlvbikgY29uc3QKIHsKICAgICAvLyBEb24ndCBkcmF3IGFueXRoaW5nIHdoaWxlIHdlIGFy
ZSB1c2luZyBjdXN0b20gZm9udHMgdGhhdCBhcmUgaW4gdGhlIHByb2Nlc3Mgb2YgbG9hZGluZywK
ICAgICAvLyBleGNlcHQgaWYgdGhlICdmb3JjZScgYXJndW1lbnQgaXMgc2V0IHRvIHRydWUgKGlu
IHdoaWNoIGNhc2UgaXQgd2lsbCB1c2UgYSBmYWxsYmFjawpAQCAtMzM3LDcgKzMzNyw3IEBAIGZs
b2F0IEZvbnQ6OmRyYXdUZXh0KEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgY29uc3QgVGV4dFJ1
biYgcnVuLCBjb25zdCBGbG9hdFBvCiAgICAgaWYgKGxvYWRpbmdDdXN0b21Gb250cygpICYmIGN1
c3RvbUZvbnROb3RSZWFkeUFjdGlvbiA9PSBEb05vdFBhaW50SWZGb250Tm90UmVhZHkpCiAgICAg
ICAgIHJldHVybiAwOwogCi0gICAgdG8gPSAodG8gPT0gLTEgPyBydW4ubGVuZ3RoKCkgOiB0byk7
CisgICAgdW5zaWduZWQgdG8gPSAoaW5pdGlhbFRvID09IC0xID8gcnVuLmxlbmd0aCgpIDogaW5p
dGlhbFRvKTsKIAogICAgIENvZGVQYXRoIGNvZGVQYXRoVG9Vc2UgPSBjb2RlUGF0aChydW4pOwog
ICAgIC8vIEZJWE1FOiBVc2UgdGhlIGZhc3QgY29kZSBwYXRoIG9uY2UgaXQgaGFuZGxlcyBwYXJ0
aWFsIHJ1bnMgd2l0aCBrZXJuaW5nIGFuZCBsaWdhdHVyZXMuIFNlZSBodHRwOi8vd2Via2l0Lm9y
Zy9iLzEwMDA1MApAQCAtMzUwLDEzICszNTAsMTIgQEAgZmxvYXQgRm9udDo6ZHJhd1RleHQoR3Jh
cGhpY3NDb250ZXh0KiBjb250ZXh0LCBjb25zdCBUZXh0UnVuJiBydW4sIGNvbnN0IEZsb2F0UG8K
ICAgICByZXR1cm4gZHJhd0NvbXBsZXhUZXh0KGNvbnRleHQsIHJ1biwgcG9pbnQsIGZyb20sIHRv
KTsKIH0KIAotdm9pZCBGb250OjpkcmF3RW1waGFzaXNNYXJrcyhHcmFwaGljc0NvbnRleHQqIGNv
bnRleHQsIGNvbnN0IFRleHRSdW4mIHJ1biwgY29uc3QgQXRvbWljU3RyaW5nJiBtYXJrLCBjb25z
dCBGbG9hdFBvaW50JiBwb2ludCwgaW50IGZyb20sIGludCB0bykgY29uc3QKK3ZvaWQgRm9udDo6
ZHJhd0VtcGhhc2lzTWFya3MoR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBjb25zdCBUZXh0UnVu
JiBydW4sIGNvbnN0IEF0b21pY1N0cmluZyYgbWFyaywgY29uc3QgRmxvYXRQb2ludCYgcG9pbnQs
IHVuc2lnbmVkIGZyb20sIGludCBpbml0aWFsVG8pIGNvbnN0CiB7CiAgICAgaWYgKGxvYWRpbmdD
dXN0b21Gb250cygpKQogICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAodG8gPCAwKQotICAgICAg
ICB0byA9IHJ1bi5sZW5ndGgoKTsKKyAgICAKKyAgICB1bnNpZ25lZCB0byA9IGluaXRpYWxUbyA8
IDAgPyBydW4ubGVuZ3RoKCkgOiBpbml0aWFsVG87CiAKICAgICBDb2RlUGF0aCBjb2RlUGF0aFRv
VXNlID0gY29kZVBhdGgocnVuKTsKICAgICAvLyBGSVhNRTogVXNlIHRoZSBmYXN0IGNvZGUgcGF0
aCBvbmNlIGl0IGhhbmRsZXMgcGFydGlhbCBydW5zIHdpdGgga2VybmluZyBhbmQgbGlnYXR1cmVz
LiBTZWUgaHR0cDovL3dlYmtpdC5vcmcvYi8xMDAwNTAKQEAgLTUwNyw5ICs1MDYsOSBAQCBib29s
IEZvbnQ6OmZhc3RBdmVyYWdlQ2hhcldpZHRoSWZBdmFpbGFibGUoZmxvYXQmIHdpZHRoKSBjb25z
dAogICAgIHJldHVybiBzdWNjZXNzOwogfQogCi12b2lkIEZvbnQ6OmFkanVzdFNlbGVjdGlvblJl
Y3RGb3JUZXh0KGNvbnN0IFRleHRSdW4mIHJ1biwgTGF5b3V0UmVjdCYgc2VsZWN0aW9uUmVjdCwg
aW50IGZyb20sIGludCB0bykgY29uc3QKK3ZvaWQgRm9udDo6YWRqdXN0U2VsZWN0aW9uUmVjdEZv
clRleHQoY29uc3QgVGV4dFJ1biYgcnVuLCBMYXlvdXRSZWN0JiBzZWxlY3Rpb25SZWN0LCB1bnNp
Z25lZCBmcm9tLCBpbnQgaW5pdGlhbFRvKSBjb25zdAogewotICAgIHRvID0gKHRvID09IC0xID8g
cnVuLmxlbmd0aCgpIDogdG8pOworICAgIHVuc2lnbmVkIHRvID0gKGluaXRpYWxUbyA9PSAtMSA/
IHJ1bi5sZW5ndGgoKSA6IGluaXRpYWxUbyk7CiAKICAgICBDb2RlUGF0aCBjb2RlUGF0aFRvVXNl
ID0gY29kZVBhdGgocnVuKTsKICAgICAvLyBGSVhNRTogVXNlIHRoZSBmYXN0IGNvZGUgcGF0aCBv
bmNlIGl0IGhhbmRsZXMgcGFydGlhbCBydW5zIHdpdGgga2VybmluZyBhbmQgbGlnYXR1cmVzLiBT
ZWUgaHR0cDovL3dlYmtpdC5vcmcvYi8xMDAwNTAKQEAgLTEwNTQsMjMgKzEwNTMsMjQgQEAgYm9v
bCBGb250OjpjYW5SZWNlaXZlVGV4dEVtcGhhc2lzKFVDaGFyMzIgYykKICAgICByZXR1cm4gdHJ1
ZTsKIH0KICAgICAKLUdseXBoVG9QYXRoVHJhbnNsYXRvcjo6R2x5cGhVbmRlcmxpbmVUeXBlIGNv
bXB1dGVVbmRlcmxpbmVUeXBlKGNvbnN0IFRleHRSdW4mIHRleHRSdW4sIGNvbnN0IEdseXBoQnVm
ZmVyJiBnbHlwaEJ1ZmZlciwgaW50IGluZGV4KQorR2x5cGhUb1BhdGhUcmFuc2xhdG9yOjpHbHlw
aFVuZGVybGluZVR5cGUgY29tcHV0ZVVuZGVybGluZVR5cGUoY29uc3QgVGV4dFJ1biYgdGV4dFJ1
biwgY29uc3QgR2x5cGhCdWZmZXImIGdseXBoQnVmZmVyLCB1bnNpZ25lZCBpbmRleCkKIHsKICAg
ICAvLyBJbiBnZW5lcmFsLCB3ZSB3YW50IHRvIHNraXAgZGVzY2VuZGVycy4gSG93ZXZlciwgc2tp
cHBpbmcgZGVzY2VuZGVycyBvbiBDSksgY2hhcmFjdGVycyBsZWFkcyB0byB1bmRlc2lyYWJsZSBy
ZW5kZXJpbmdzLAogICAgIC8vIHNvIHdlIHdhbnQgdG8gZHJhdyB0aHJvdWdoIENKSyBjaGFyYWN0
ZXJzIChvbiBhIGNoYXJhY3Rlci1ieS1jaGFyYWN0ZXIgYmFzaXMpLgogICAgIFVDaGFyMzIgYmFz
ZUNoYXJhY3RlcjsKLSAgICBpbnQgb2Zmc2V0SW5TdHJpbmcgPSBnbHlwaEJ1ZmZlci5vZmZzZXRJ
blN0cmluZyhpbmRleCk7CisgICAgaW50IGluaXRpYWxPZmZzZXRJblN0cmluZyA9IGdseXBoQnVm
ZmVyLm9mZnNldEluU3RyaW5nKGluZGV4KTsKIAotICAgIGlmIChvZmZzZXRJblN0cmluZyA9PSBH
bHlwaEJ1ZmZlcjo6a05vT2Zmc2V0KSB7CisgICAgaWYgKGluaXRpYWxPZmZzZXRJblN0cmluZyA9
PSBHbHlwaEJ1ZmZlcjo6a05vT2Zmc2V0KSB7CiAgICAgICAgIC8vIFdlIGhhdmUgbm8gaWRlYSB3
aGljaCBjaGFyYWN0ZXIgc3Bhd25lZCB0aGlzIGdseXBoLiBCYWlsLgogICAgICAgICByZXR1cm4g
R2x5cGhUb1BhdGhUcmFuc2xhdG9yOjpHbHlwaFVuZGVybGluZVR5cGU6OkRyYXdPdmVyR2x5cGg7
CiAgICAgfQogICAgIAorICAgIHVuc2lnbmVkIG9mZnNldEluU3RyaW5nID0gc3RhdGljX2Nhc3Q8
dW5zaWduZWQ+KGluaXRpYWxPZmZzZXRJblN0cmluZyk7CisgICAgCiAgICAgaWYgKHRleHRSdW4u
aXM4Qml0KCkpCiAgICAgICAgIGJhc2VDaGFyYWN0ZXIgPSB0ZXh0UnVuLmNoYXJhY3RlcnM4KClb
b2Zmc2V0SW5TdHJpbmddOwotICAgIGVsc2UgeworICAgIGVsc2UKICAgICAgICAgVTE2X05FWFQo
dGV4dFJ1bi5jaGFyYWN0ZXJzMTYoKSwgb2Zmc2V0SW5TdHJpbmcsIHRleHRSdW4ubGVuZ3RoKCks
IGJhc2VDaGFyYWN0ZXIpOwotICAgIH0KICAgICAKICAgICAvLyB1X2dldEludFByb3BlcnR5VmFs
dWUgd2l0aCBVQ0hBUl9JREVPR1JBUEhJQyBkb2Vzbid0IHJldHVybiB0cnVlIGZvciBKYXBhbmVz
ZSBvciBLb3JlYW4gY29kZXBvaW50cy4KICAgICAvLyBJbnN0ZWFkLCB3ZSBjYW4gdXNlIHRoZSAi
VW5pY29kZSBhbGxvY2F0aW9uIGJsb2NrIiBmb3IgdGhlIGNoYXJhY3Rlci4KZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnQuaCBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnQuaAppbmRleCAxYWRmZjBhNTU4OTUyYjhlZjBkMjAxMDgw
ZTJhOTRmMjkzNWJhN2MyLi44ZDJkNzRjZTNmMGQ5YzZjZWYzY2RkZTAzNWRmOGI2MDcwOWNlMTZh
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250LmgKKysr
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udC5oCkBAIC0xMDQsNyArMTA0
LDcgQEAgcHVibGljOgogICAgIHZpcnR1YWwgdm9pZCBhZHZhbmNlKCkgPSAwOwogICAgIHZpcnR1
YWwgfkdseXBoVG9QYXRoVHJhbnNsYXRvcigpIHsgfQogfTsKLUdseXBoVG9QYXRoVHJhbnNsYXRv
cjo6R2x5cGhVbmRlcmxpbmVUeXBlIGNvbXB1dGVVbmRlcmxpbmVUeXBlKGNvbnN0IFRleHRSdW4m
LCBjb25zdCBHbHlwaEJ1ZmZlciYsIGludCBpbmRleCk7CitHbHlwaFRvUGF0aFRyYW5zbGF0b3I6
OkdseXBoVW5kZXJsaW5lVHlwZSBjb21wdXRlVW5kZXJsaW5lVHlwZShjb25zdCBUZXh0UnVuJiwg
Y29uc3QgR2x5cGhCdWZmZXImLCB1bnNpZ25lZCBpbmRleCk7CiAKIGNsYXNzIEZvbnQgewogcHVi
bGljOgpAQCAtMTMzLDkgKzEzMyw5IEBAIHB1YmxpYzoKICAgICB2b2lkIHVwZGF0ZShQYXNzUmVm
UHRyPEZvbnRTZWxlY3Rvcj4pIGNvbnN0OwogCiAgICAgZW51bSBDdXN0b21Gb250Tm90UmVhZHlB
Y3Rpb24geyBEb05vdFBhaW50SWZGb250Tm90UmVhZHksIFVzZUZhbGxiYWNrSWZGb250Tm90UmVh
ZHkgfTsKLSAgICBmbG9hdCBkcmF3VGV4dChHcmFwaGljc0NvbnRleHQqLCBjb25zdCBUZXh0UnVu
JiwgY29uc3QgRmxvYXRQb2ludCYsIGludCBmcm9tID0gMCwgaW50IHRvID0gLTEsIEN1c3RvbUZv
bnROb3RSZWFkeUFjdGlvbiA9IERvTm90UGFpbnRJZkZvbnROb3RSZWFkeSkgY29uc3Q7Ci0gICAg
dm9pZCBkcmF3R2x5cGhzKEdyYXBoaWNzQ29udGV4dCosIGNvbnN0IFNpbXBsZUZvbnREYXRhKiwg
Y29uc3QgR2x5cGhCdWZmZXImLCBpbnQgZnJvbSwgaW50IG51bUdseXBocywgY29uc3QgRmxvYXRQ
b2ludCYpIGNvbnN0OwotICAgIHZvaWQgZHJhd0VtcGhhc2lzTWFya3MoR3JhcGhpY3NDb250ZXh0
KiwgY29uc3QgVGV4dFJ1biYsIGNvbnN0IEF0b21pY1N0cmluZyYgbWFyaywgY29uc3QgRmxvYXRQ
b2ludCYsIGludCBmcm9tID0gMCwgaW50IHRvID0gLTEpIGNvbnN0OworICAgIGZsb2F0IGRyYXdU
ZXh0KEdyYXBoaWNzQ29udGV4dCosIGNvbnN0IFRleHRSdW4mLCBjb25zdCBGbG9hdFBvaW50Jiwg
dW5zaWduZWQgZnJvbSA9IDAsIGludCB0byA9IC0xLCBDdXN0b21Gb250Tm90UmVhZHlBY3Rpb24g
PSBEb05vdFBhaW50SWZGb250Tm90UmVhZHkpIGNvbnN0OworICAgIHZvaWQgZHJhd0dseXBocyhH
cmFwaGljc0NvbnRleHQqLCBjb25zdCBTaW1wbGVGb250RGF0YSosIGNvbnN0IEdseXBoQnVmZmVy
JiwgdW5zaWduZWQgZnJvbSwgdW5zaWduZWQgbnVtR2x5cGhzLCBjb25zdCBGbG9hdFBvaW50Jikg
Y29uc3Q7CisgICAgdm9pZCBkcmF3RW1waGFzaXNNYXJrcyhHcmFwaGljc0NvbnRleHQqLCBjb25z
dCBUZXh0UnVuJiwgY29uc3QgQXRvbWljU3RyaW5nJiBtYXJrLCBjb25zdCBGbG9hdFBvaW50Jiwg
dW5zaWduZWQgZnJvbSA9IDAsIGludCB0byA9IC0xKSBjb25zdDsKIAogICAgIERhc2hBcnJheSBk
YXNoZXNGb3JJbnRlcnNlY3Rpb25zV2l0aFJlY3QoY29uc3QgVGV4dFJ1biYsIGNvbnN0IEZsb2F0
UG9pbnQmIHRleHRPcmlnaW4sIGNvbnN0IEZsb2F0UmVjdCYgbGluZUV4dGVudHMpIGNvbnN0Owog
CkBAIC0xNDcsNyArMTQ3LDcgQEAgcHVibGljOgogICAgIHN0YXRpYyBmbG9hdCB3aWR0aChUZXh0
TGF5b3V0JiwgdW5zaWduZWQgZnJvbSwgdW5zaWduZWQgbGVuLCBIYXNoU2V0PGNvbnN0IFNpbXBs
ZUZvbnREYXRhKj4qIGZhbGxiYWNrRm9udHMgPSAwKTsKIAogICAgIGludCBvZmZzZXRGb3JQb3Np
dGlvbihjb25zdCBUZXh0UnVuJiwgZmxvYXQgcG9zaXRpb24sIGJvb2wgaW5jbHVkZVBhcnRpYWxH
bHlwaHMpIGNvbnN0OwotICAgIHZvaWQgYWRqdXN0U2VsZWN0aW9uUmVjdEZvclRleHQoY29uc3Qg
VGV4dFJ1biYsIExheW91dFJlY3QmIHNlbGVjdGlvblJlY3QsIGludCBmcm9tID0gMCwgaW50IHRv
ID0gLTEpIGNvbnN0OworICAgIHZvaWQgYWRqdXN0U2VsZWN0aW9uUmVjdEZvclRleHQoY29uc3Qg
VGV4dFJ1biYsIExheW91dFJlY3QmIHNlbGVjdGlvblJlY3QsIHVuc2lnbmVkIGZyb20gPSAwLCBp
bnQgdG8gPSAtMSkgY29uc3Q7CiAKICAgICBib29sIGlzU21hbGxDYXBzKCkgY29uc3QgeyByZXR1
cm4gbV9mb250RGVzY3JpcHRpb24uc21hbGxDYXBzKCk7IH0KIApAQCAtMjE5LDE0ICsyMTksMTQg
QEAgcHJpdmF0ZToKICAgICBlbnVtIEZvclRleHRFbXBoYXNpc09yTm90IHsgTm90Rm9yVGV4dEVt
cGhhc2lzLCBGb3JUZXh0RW1waGFzaXMgfTsKIAogICAgIC8vIFJldHVybnMgdGhlIGluaXRpYWwg
aW4tc3RyZWFtIGFkdmFuY2UuCi0gICAgZmxvYXQgZ2V0R2x5cGhzQW5kQWR2YW5jZXNGb3JTaW1w
bGVUZXh0KGNvbnN0IFRleHRSdW4mLCBpbnQgZnJvbSwgaW50IHRvLCBHbHlwaEJ1ZmZlciYsIEZv
clRleHRFbXBoYXNpc09yTm90ID0gTm90Rm9yVGV4dEVtcGhhc2lzKSBjb25zdDsKLSAgICBmbG9h
dCBkcmF3U2ltcGxlVGV4dChHcmFwaGljc0NvbnRleHQqLCBjb25zdCBUZXh0UnVuJiwgY29uc3Qg
RmxvYXRQb2ludCYsIGludCBmcm9tLCBpbnQgdG8pIGNvbnN0OwotICAgIHZvaWQgZHJhd0VtcGhh
c2lzTWFya3NGb3JTaW1wbGVUZXh0KEdyYXBoaWNzQ29udGV4dCosIGNvbnN0IFRleHRSdW4mLCBj
b25zdCBBdG9taWNTdHJpbmcmIG1hcmssIGNvbnN0IEZsb2F0UG9pbnQmLCBpbnQgZnJvbSwgaW50
IHRvKSBjb25zdDsKKyAgICBmbG9hdCBnZXRHbHlwaHNBbmRBZHZhbmNlc0ZvclNpbXBsZVRleHQo
Y29uc3QgVGV4dFJ1biYsIHVuc2lnbmVkIGZyb20sIHVuc2lnbmVkIHRvLCBHbHlwaEJ1ZmZlciYs
IEZvclRleHRFbXBoYXNpc09yTm90ID0gTm90Rm9yVGV4dEVtcGhhc2lzKSBjb25zdDsKKyAgICBm
bG9hdCBkcmF3U2ltcGxlVGV4dChHcmFwaGljc0NvbnRleHQqLCBjb25zdCBUZXh0UnVuJiwgY29u
c3QgRmxvYXRQb2ludCYsIHVuc2lnbmVkIGZyb20sIHVuc2lnbmVkIHRvKSBjb25zdDsKKyAgICB2
b2lkIGRyYXdFbXBoYXNpc01hcmtzRm9yU2ltcGxlVGV4dChHcmFwaGljc0NvbnRleHQqLCBjb25z
dCBUZXh0UnVuJiwgY29uc3QgQXRvbWljU3RyaW5nJiBtYXJrLCBjb25zdCBGbG9hdFBvaW50Jiwg
dW5zaWduZWQgZnJvbSwgdW5zaWduZWQgdG8pIGNvbnN0OwogICAgIHZvaWQgZHJhd0dseXBoQnVm
ZmVyKEdyYXBoaWNzQ29udGV4dCosIGNvbnN0IFRleHRSdW4mLCBjb25zdCBHbHlwaEJ1ZmZlciYs
IEZsb2F0UG9pbnQmKSBjb25zdDsKICAgICB2b2lkIGRyYXdFbXBoYXNpc01hcmtzKEdyYXBoaWNz
Q29udGV4dCosIGNvbnN0IFRleHRSdW4mLCBjb25zdCBHbHlwaEJ1ZmZlciYsIGNvbnN0IEF0b21p
Y1N0cmluZyYsIGNvbnN0IEZsb2F0UG9pbnQmKSBjb25zdDsKICAgICBmbG9hdCBmbG9hdFdpZHRo
Rm9yU2ltcGxlVGV4dChjb25zdCBUZXh0UnVuJiwgSGFzaFNldDxjb25zdCBTaW1wbGVGb250RGF0
YSo+KiBmYWxsYmFja0ZvbnRzID0gMCwgR2x5cGhPdmVyZmxvdyogPSAwKSBjb25zdDsKICAgICBp
bnQgb2Zmc2V0Rm9yUG9zaXRpb25Gb3JTaW1wbGVUZXh0KGNvbnN0IFRleHRSdW4mLCBmbG9hdCBw
b3NpdGlvbiwgYm9vbCBpbmNsdWRlUGFydGlhbEdseXBocykgY29uc3Q7Ci0gICAgdm9pZCBhZGp1
c3RTZWxlY3Rpb25SZWN0Rm9yU2ltcGxlVGV4dChjb25zdCBUZXh0UnVuJiwgTGF5b3V0UmVjdCYg
c2VsZWN0aW9uUmVjdCwgaW50IGZyb20sIGludCB0bykgY29uc3Q7CisgICAgdm9pZCBhZGp1c3RT
ZWxlY3Rpb25SZWN0Rm9yU2ltcGxlVGV4dChjb25zdCBUZXh0UnVuJiwgTGF5b3V0UmVjdCYgc2Vs
ZWN0aW9uUmVjdCwgdW5zaWduZWQgZnJvbSwgdW5zaWduZWQgdG8pIGNvbnN0OwogCiAgICAgYm9v
bCBnZXRFbXBoYXNpc01hcmtHbHlwaERhdGEoY29uc3QgQXRvbWljU3RyaW5nJiwgR2x5cGhEYXRh
JikgY29uc3Q7CiAKQEAgLTIzNCwxMiArMjM0LDEyIEBAIHByaXZhdGU6CiAgICAgc3RhdGljIGJv
b2wgY2FuRXhwYW5kQXJvdW5kSWRlb2dyYXBoc0luQ29tcGxleFRleHQoKTsKIAogICAgIC8vIFJl
dHVybnMgdGhlIGluaXRpYWwgaW4tc3RyZWFtIGFkdmFuY2UuCi0gICAgZmxvYXQgZ2V0R2x5cGhz
QW5kQWR2YW5jZXNGb3JDb21wbGV4VGV4dChjb25zdCBUZXh0UnVuJiwgaW50IGZyb20sIGludCB0
bywgR2x5cGhCdWZmZXImLCBGb3JUZXh0RW1waGFzaXNPck5vdCA9IE5vdEZvclRleHRFbXBoYXNp
cykgY29uc3Q7Ci0gICAgZmxvYXQgZHJhd0NvbXBsZXhUZXh0KEdyYXBoaWNzQ29udGV4dCosIGNv
bnN0IFRleHRSdW4mLCBjb25zdCBGbG9hdFBvaW50JiwgaW50IGZyb20sIGludCB0bykgY29uc3Q7
Ci0gICAgdm9pZCBkcmF3RW1waGFzaXNNYXJrc0ZvckNvbXBsZXhUZXh0KEdyYXBoaWNzQ29udGV4
dCosIGNvbnN0IFRleHRSdW4mLCBjb25zdCBBdG9taWNTdHJpbmcmIG1hcmssIGNvbnN0IEZsb2F0
UG9pbnQmLCBpbnQgZnJvbSwgaW50IHRvKSBjb25zdDsKKyAgICBmbG9hdCBnZXRHbHlwaHNBbmRB
ZHZhbmNlc0ZvckNvbXBsZXhUZXh0KGNvbnN0IFRleHRSdW4mLCB1bnNpZ25lZCBmcm9tLCB1bnNp
Z25lZCB0bywgR2x5cGhCdWZmZXImLCBGb3JUZXh0RW1waGFzaXNPck5vdCA9IE5vdEZvclRleHRF
bXBoYXNpcykgY29uc3Q7CisgICAgZmxvYXQgZHJhd0NvbXBsZXhUZXh0KEdyYXBoaWNzQ29udGV4
dCosIGNvbnN0IFRleHRSdW4mLCBjb25zdCBGbG9hdFBvaW50JiwgdW5zaWduZWQgZnJvbSwgdW5z
aWduZWQgdG8pIGNvbnN0OworICAgIHZvaWQgZHJhd0VtcGhhc2lzTWFya3NGb3JDb21wbGV4VGV4
dChHcmFwaGljc0NvbnRleHQqLCBjb25zdCBUZXh0UnVuJiwgY29uc3QgQXRvbWljU3RyaW5nJiBt
YXJrLCBjb25zdCBGbG9hdFBvaW50JiwgdW5zaWduZWQgZnJvbSwgdW5zaWduZWQgdG8pIGNvbnN0
OwogICAgIGZsb2F0IGZsb2F0V2lkdGhGb3JDb21wbGV4VGV4dChjb25zdCBUZXh0UnVuJiwgSGFz
aFNldDxjb25zdCBTaW1wbGVGb250RGF0YSo+KiBmYWxsYmFja0ZvbnRzID0gMCwgR2x5cGhPdmVy
ZmxvdyogPSAwKSBjb25zdDsKICAgICBpbnQgb2Zmc2V0Rm9yUG9zaXRpb25Gb3JDb21wbGV4VGV4
dChjb25zdCBUZXh0UnVuJiwgZmxvYXQgcG9zaXRpb24sIGJvb2wgaW5jbHVkZVBhcnRpYWxHbHlw
aHMpIGNvbnN0OwotICAgIHZvaWQgYWRqdXN0U2VsZWN0aW9uUmVjdEZvckNvbXBsZXhUZXh0KGNv
bnN0IFRleHRSdW4mLCBMYXlvdXRSZWN0JiBzZWxlY3Rpb25SZWN0LCBpbnQgZnJvbSwgaW50IHRv
KSBjb25zdDsKKyAgICB2b2lkIGFkanVzdFNlbGVjdGlvblJlY3RGb3JDb21wbGV4VGV4dChjb25z
dCBUZXh0UnVuJiwgTGF5b3V0UmVjdCYgc2VsZWN0aW9uUmVjdCwgdW5zaWduZWQgZnJvbSwgdW5z
aWduZWQgdG8pIGNvbnN0OwogCiAgICAgZnJpZW5kIHN0cnVjdCBXaWR0aEl0ZXJhdG9yOwogICAg
IGZyaWVuZCBjbGFzcyBTVkdUZXh0UnVuUmVuZGVyaW5nQ29udGV4dDsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRGYXN0UGF0aC5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250RmFzdFBhdGguY3BwCmluZGV4IGJiZWQzZDBk
ZGQyN2E0ZDc0MDhkNGVkNzJkMjY0MWExNGRlMDc3ZWEuLjdmMjBlMGIzNjUyMWQ5Y2RjZDNmNzZm
NzBjM2VlYmZmNDc5ZGQ4MjEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL0ZvbnRGYXN0UGF0aC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvRm9udEZhc3RQYXRoLmNwcApAQCAtMTI2LDcgKzEyNiw3IEBAIGludCBGb250OjplbXBo
YXNpc01hcmtIZWlnaHQoY29uc3QgQXRvbWljU3RyaW5nJiBtYXJrKSBjb25zdAogICAgIHJldHVy
biBtYXJrRm9udERhdGEtPmZvbnRNZXRyaWNzKCkuaGVpZ2h0KCk7CiB9CiAKLWZsb2F0IEZvbnQ6
OmdldEdseXBoc0FuZEFkdmFuY2VzRm9yU2ltcGxlVGV4dChjb25zdCBUZXh0UnVuJiBydW4sIGlu
dCBmcm9tLCBpbnQgdG8sIEdseXBoQnVmZmVyJiBnbHlwaEJ1ZmZlciwgRm9yVGV4dEVtcGhhc2lz
T3JOb3QgZm9yVGV4dEVtcGhhc2lzKSBjb25zdAorZmxvYXQgRm9udDo6Z2V0R2x5cGhzQW5kQWR2
YW5jZXNGb3JTaW1wbGVUZXh0KGNvbnN0IFRleHRSdW4mIHJ1biwgdW5zaWduZWQgZnJvbSwgdW5z
aWduZWQgdG8sIEdseXBoQnVmZmVyJiBnbHlwaEJ1ZmZlciwgRm9yVGV4dEVtcGhhc2lzT3JOb3Qg
Zm9yVGV4dEVtcGhhc2lzKSBjb25zdAogewogICAgIGZsb2F0IGluaXRpYWxBZHZhbmNlOwogCkBA
IC0xNTYsNyArMTU2LDcgQEAgZmxvYXQgRm9udDo6Z2V0R2x5cGhzQW5kQWR2YW5jZXNGb3JTaW1w
bGVUZXh0KGNvbnN0IFRleHRSdW4mIHJ1biwgaW50IGZyb20sIGludAogICAgIHJldHVybiBpbml0
aWFsQWR2YW5jZTsKIH0KIAotZmxvYXQgRm9udDo6ZHJhd1NpbXBsZVRleHQoR3JhcGhpY3NDb250
ZXh0KiBjb250ZXh0LCBjb25zdCBUZXh0UnVuJiBydW4sIGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50
LCBpbnQgZnJvbSwgaW50IHRvKSBjb25zdAorZmxvYXQgRm9udDo6ZHJhd1NpbXBsZVRleHQoR3Jh
cGhpY3NDb250ZXh0KiBjb250ZXh0LCBjb25zdCBUZXh0UnVuJiBydW4sIGNvbnN0IEZsb2F0UG9p
bnQmIHBvaW50LCB1bnNpZ25lZCBmcm9tLCB1bnNpZ25lZCB0bykgY29uc3QKIHsKICAgICAvLyBU
aGlzIGdseXBoIGJ1ZmZlciBob2xkcyBvdXIgZ2x5cGhzK2FkdmFuY2VzK2ZvbnQgZGF0YSBmb3Ig
ZWFjaCBnbHlwaC4KICAgICBHbHlwaEJ1ZmZlciBnbHlwaEJ1ZmZlcjsKQEAgLTE3Miw3ICsxNzIs
NyBAQCBmbG9hdCBGb250OjpkcmF3U2ltcGxlVGV4dChHcmFwaGljc0NvbnRleHQqIGNvbnRleHQs
IGNvbnN0IFRleHRSdW4mIHJ1biwgY29uc3QgRgogICAgIHJldHVybiBzdGFydFBvaW50LngoKSAt
IHN0YXJ0WDsKIH0KIAotdm9pZCBGb250OjpkcmF3RW1waGFzaXNNYXJrc0ZvclNpbXBsZVRleHQo
R3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBjb25zdCBUZXh0UnVuJiBydW4sIGNvbnN0IEF0b21p
Y1N0cmluZyYgbWFyaywgY29uc3QgRmxvYXRQb2ludCYgcG9pbnQsIGludCBmcm9tLCBpbnQgdG8p
IGNvbnN0Cit2b2lkIEZvbnQ6OmRyYXdFbXBoYXNpc01hcmtzRm9yU2ltcGxlVGV4dChHcmFwaGlj
c0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IFRleHRSdW4mIHJ1biwgY29uc3QgQXRvbWljU3RyaW5n
JiBtYXJrLCBjb25zdCBGbG9hdFBvaW50JiBwb2ludCwgdW5zaWduZWQgZnJvbSwgdW5zaWduZWQg
dG8pIGNvbnN0CiB7CiAgICAgR2x5cGhCdWZmZXIgZ2x5cGhCdWZmZXI7CiAgICAgZmxvYXQgaW5p
dGlhbEFkdmFuY2UgPSBnZXRHbHlwaHNBbmRBZHZhbmNlc0ZvclNpbXBsZVRleHQocnVuLCBmcm9t
LCB0bywgZ2x5cGhCdWZmZXIsIEZvclRleHRFbXBoYXNpcyk7CkBAIC0xOTUsOCArMTk1LDggQEAg
dm9pZCBGb250OjpkcmF3R2x5cGhCdWZmZXIoR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBjb25z
dCBUZXh0UnVuJiBydW4sIGNvbnN0IEcKICAgICBGbG9hdFBvaW50IHN0YXJ0UG9pbnQocG9pbnQu
eCgpLCBwb2ludC55KCkgLSBnbHlwaEJ1ZmZlci5pbml0aWFsQWR2YW5jZSgpLmhlaWdodCgpKTsK
ICAgICBmbG9hdCBuZXh0WCA9IHN0YXJ0UG9pbnQueCgpICsgZ2x5cGhCdWZmZXIuYWR2YW5jZUF0
KDApLndpZHRoKCk7CiAgICAgZmxvYXQgbmV4dFkgPSBzdGFydFBvaW50LnkoKSArIGdseXBoQnVm
ZmVyLmFkdmFuY2VBdCgwKS5oZWlnaHQoKTsKLSAgICBpbnQgbGFzdEZyb20gPSAwOwotICAgIGlu
dCBuZXh0R2x5cGggPSAxOworICAgIHVuc2lnbmVkIGxhc3RGcm9tID0gMDsKKyAgICB1bnNpZ25l
ZCBuZXh0R2x5cGggPSAxOwogI2lmIEVOQUJMRShTVkdfRk9OVFMpCiAgICAgVGV4dFJ1bjo6UmVu
ZGVyaW5nQ29udGV4dCogcmVuZGVyaW5nQ29udGV4dCA9IHJ1bi5yZW5kZXJpbmdDb250ZXh0KCk7
CiAjZW5kaWYKQEAgLTIxMCw3ICsyMTAsMTAgQEAgdm9pZCBGb250OjpkcmF3R2x5cGhCdWZmZXIo
R3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBjb25zdCBUZXh0UnVuJiBydW4sIGNvbnN0IEcKICAg
ICAgICAgICAgICAgICByZW5kZXJpbmdDb250ZXh0LT5kcmF3U1ZHR2x5cGhzKGNvbnRleHQsIGZv
bnREYXRhLCBnbHlwaEJ1ZmZlciwgbGFzdEZyb20sIG5leHRHbHlwaCAtIGxhc3RGcm9tLCBzdGFy
dFBvaW50KTsKICAgICAgICAgICAgIGVsc2UKICNlbmRpZgorICAgICAgICAgICAgeworICAgICAg
ICAgICAgICAgIEFTU0VSVChuZXh0R2x5cGggPj0gbGFzdEZyb20pOwogICAgICAgICAgICAgICAg
IGRyYXdHbHlwaHMoY29udGV4dCwgZm9udERhdGEsIGdseXBoQnVmZmVyLCBsYXN0RnJvbSwgbmV4
dEdseXBoIC0gbGFzdEZyb20sIHN0YXJ0UG9pbnQpOworICAgICAgICAgICAgfQogCiAgICAgICAg
ICAgICBsYXN0RnJvbSA9IG5leHRHbHlwaDsKICAgICAgICAgICAgIGZvbnREYXRhID0gbmV4dEZv
bnREYXRhOwpAQCAtMjY5LDcgKzI3Miw3IEBAIHZvaWQgRm9udDo6ZHJhd0VtcGhhc2lzTWFya3Mo
R3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBjb25zdCBUZXh0UnVuJiBydW4sIGNvbnN0CiAgICAg
RmxvYXRQb2ludCBzdGFydFBvaW50KHBvaW50LngoKSArIG1pZGRsZU9mTGFzdEdseXBoIC0gb2Zm
c2V0VG9NaWRkbGVPZkdseXBoKG1hcmtGb250RGF0YSwgbWFya0dseXBoKSwgcG9pbnQueSgpKTsK
IAogICAgIEdseXBoQnVmZmVyIG1hcmtCdWZmZXI7Ci0gICAgZm9yIChpbnQgaSA9IDA7IGkgKyAx
IDwgZ2x5cGhCdWZmZXIuc2l6ZSgpOyArK2kpIHsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBp
ICsgMSA8IGdseXBoQnVmZmVyLnNpemUoKTsgKytpKSB7CiAgICAgICAgIGZsb2F0IG1pZGRsZU9m
TmV4dEdseXBoID0gb2Zmc2V0VG9NaWRkbGVPZkdseXBoQXRJbmRleChnbHlwaEJ1ZmZlciwgaSAr
IDEpOwogICAgICAgICBmbG9hdCBhZHZhbmNlID0gZ2x5cGhCdWZmZXIuYWR2YW5jZUF0KGkpLndp
ZHRoKCkgLSBtaWRkbGVPZkxhc3RHbHlwaCArIG1pZGRsZU9mTmV4dEdseXBoOwogICAgICAgICBt
YXJrQnVmZmVyLmFkZChnbHlwaEJ1ZmZlci5nbHlwaEF0KGkpID8gbWFya0dseXBoIDogc3BhY2VH
bHlwaCwgbWFya0ZvbnREYXRhLCBhZHZhbmNlKTsKQEAgLTI5Niw3ICsyOTksNyBAQCBmbG9hdCBG
b250OjpmbG9hdFdpZHRoRm9yU2ltcGxlVGV4dChjb25zdCBUZXh0UnVuJiBydW4sIEhhc2hTZXQ8
Y29uc3QgU2ltcGxlRm9udAogICAgIHJldHVybiBpdC5tX3J1bldpZHRoU29GYXI7CiB9CiAKLXZv
aWQgRm9udDo6YWRqdXN0U2VsZWN0aW9uUmVjdEZvclNpbXBsZVRleHQoY29uc3QgVGV4dFJ1biYg
cnVuLCBMYXlvdXRSZWN0JiBzZWxlY3Rpb25SZWN0LCBpbnQgZnJvbSwgaW50IHRvKSBjb25zdAor
dm9pZCBGb250OjphZGp1c3RTZWxlY3Rpb25SZWN0Rm9yU2ltcGxlVGV4dChjb25zdCBUZXh0UnVu
JiBydW4sIExheW91dFJlY3QmIHNlbGVjdGlvblJlY3QsIHVuc2lnbmVkIGZyb20sIHVuc2lnbmVk
IHRvKSBjb25zdAogewogICAgIEdseXBoQnVmZmVyIGdseXBoQnVmZmVyOwogICAgIFdpZHRoSXRl
cmF0b3IgaXQodGhpcywgcnVuKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL0dseXBoQnVmZmVyLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9HbHlwaEJ1ZmZlci5oCmluZGV4IDNjNTkzNWZjNmQyYzAyNDc2MDdlMzMzMjRkMzkwYjA1ZDdm
ODliNDYuLjdhMjgxYWQyZDRlYTY5ZmE0Y2U5ODQ2YWVjOWUzMTgwODlhMWY0MzEgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dseXBoQnVmZmVyLmgKKysrIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR2x5cGhCdWZmZXIuaApAQCAtNzYsNyAr
NzYsNyBAQCB0eXBlZGVmIEZsb2F0U2l6ZSBHbHlwaEJ1ZmZlckFkdmFuY2U7CiBjbGFzcyBHbHlw
aEJ1ZmZlciB7CiBwdWJsaWM6CiAgICAgYm9vbCBpc0VtcHR5KCkgY29uc3QgeyByZXR1cm4gbV9m
b250RGF0YS5pc0VtcHR5KCk7IH0KLSAgICBpbnQgc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fZm9u
dERhdGEuc2l6ZSgpOyB9CisgICAgdW5zaWduZWQgc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fZm9u
dERhdGEuc2l6ZSgpOyB9CiAgICAgCiAgICAgdm9pZCBjbGVhcigpCiAgICAgewpAQCAtOTAsMTIg
KzkwLDEyIEBAIHB1YmxpYzoKICNlbmRpZgogICAgIH0KIAotICAgIEdseXBoQnVmZmVyR2x5cGgq
IGdseXBocyhpbnQgZnJvbSkgeyByZXR1cm4gbV9nbHlwaHMuZGF0YSgpICsgZnJvbTsgfQotICAg
IEdseXBoQnVmZmVyQWR2YW5jZSogYWR2YW5jZXMoaW50IGZyb20pIHsgcmV0dXJuIG1fYWR2YW5j
ZXMuZGF0YSgpICsgZnJvbTsgfQotICAgIGNvbnN0IEdseXBoQnVmZmVyR2x5cGgqIGdseXBocyhp
bnQgZnJvbSkgY29uc3QgeyByZXR1cm4gbV9nbHlwaHMuZGF0YSgpICsgZnJvbTsgfQotICAgIGNv
bnN0IEdseXBoQnVmZmVyQWR2YW5jZSogYWR2YW5jZXMoaW50IGZyb20pIGNvbnN0IHsgcmV0dXJu
IG1fYWR2YW5jZXMuZGF0YSgpICsgZnJvbTsgfQorICAgIEdseXBoQnVmZmVyR2x5cGgqIGdseXBo
cyh1bnNpZ25lZCBmcm9tKSB7IHJldHVybiBtX2dseXBocy5kYXRhKCkgKyBmcm9tOyB9CisgICAg
R2x5cGhCdWZmZXJBZHZhbmNlKiBhZHZhbmNlcyh1bnNpZ25lZCBmcm9tKSB7IHJldHVybiBtX2Fk
dmFuY2VzLmRhdGEoKSArIGZyb207IH0KKyAgICBjb25zdCBHbHlwaEJ1ZmZlckdseXBoKiBnbHlw
aHModW5zaWduZWQgZnJvbSkgY29uc3QgeyByZXR1cm4gbV9nbHlwaHMuZGF0YSgpICsgZnJvbTsg
fQorICAgIGNvbnN0IEdseXBoQnVmZmVyQWR2YW5jZSogYWR2YW5jZXModW5zaWduZWQgZnJvbSkg
Y29uc3QgeyByZXR1cm4gbV9hZHZhbmNlcy5kYXRhKCkgKyBmcm9tOyB9CiAKLSAgICBjb25zdCBT
aW1wbGVGb250RGF0YSogZm9udERhdGFBdChpbnQgaW5kZXgpIGNvbnN0IHsgcmV0dXJuIG1fZm9u
dERhdGFbaW5kZXhdOyB9CisgICAgY29uc3QgU2ltcGxlRm9udERhdGEqIGZvbnREYXRhQXQodW5z
aWduZWQgaW5kZXgpIGNvbnN0IHsgcmV0dXJuIG1fZm9udERhdGFbaW5kZXhdOyB9CiAKICAgICB2
b2lkIHNldEluaXRpYWxBZHZhbmNlKEdseXBoQnVmZmVyQWR2YW5jZSBpbml0aWFsQWR2YW5jZSkg
eyBtX2luaXRpYWxBZHZhbmNlID0gaW5pdGlhbEFkdmFuY2U7IH0KICAgICBjb25zdCBHbHlwaEJ1
ZmZlckFkdmFuY2UmIGluaXRpYWxBZHZhbmNlKCkgY29uc3QgeyByZXR1cm4gbV9pbml0aWFsQWR2
YW5jZTsgfQpAQCAtMTA5LDEyICsxMDksMTIgQEAgcHVibGljOgogI2VuZGlmCiAgICAgfQogCi0g
ICAgR2x5cGhCdWZmZXJBZHZhbmNlIGFkdmFuY2VBdChpbnQgaW5kZXgpIGNvbnN0CisgICAgR2x5
cGhCdWZmZXJBZHZhbmNlIGFkdmFuY2VBdCh1bnNpZ25lZCBpbmRleCkgY29uc3QKICAgICB7CiAg
ICAgICAgIHJldHVybiBtX2FkdmFuY2VzW2luZGV4XTsKICAgICB9CiAKLSAgICBGbG9hdFNpemUg
b2Zmc2V0QXQoaW50IGluZGV4KSBjb25zdAorICAgIEZsb2F0U2l6ZSBvZmZzZXRBdCh1bnNpZ25l
ZCBpbmRleCkgY29uc3QKICAgICB7CiAjaWYgUExBVEZPUk0oV0lOKQogICAgICAgICByZXR1cm4g
bV9vZmZzZXRzW2luZGV4XTsKQEAgLTE3Niw3ICsxNzYsNyBAQCBwdWJsaWM6CiAgICAgfQogI2Vu
ZGlmCiAKLSAgICB2b2lkIHJldmVyc2UoaW50IGZyb20sIGludCBsZW5ndGgpCisgICAgdm9pZCBy
ZXZlcnNlKHVuc2lnbmVkIGZyb20sIHVuc2lnbmVkIGxlbmd0aCkKICAgICB7CiAgICAgICAgIGZv
ciAoaW50IGkgPSBmcm9tLCBlbmQgPSBmcm9tICsgbGVuZ3RoIC0gMTsgaSA8IGVuZDsgKytpLCAt
LWVuZCkKICAgICAgICAgICAgIHN3YXAoaSwgZW5kKTsKQEAgLTE5NCwxNCArMTk0LDE0IEBAIHB1
YmxpYzoKICAgICAgICAgbV9vZmZzZXRzSW5TdHJpbmcucmVzZXQobmV3IFZlY3RvcjxpbnQsIDIw
NDg+KCkpOwogICAgIH0KICAgICAKLSAgICBpbnQgb2Zmc2V0SW5TdHJpbmcoaW50IGluZGV4KSBj
b25zdAorICAgIGludCBvZmZzZXRJblN0cmluZyh1bnNpZ25lZCBpbmRleCkgY29uc3QKICAgICB7
CiAgICAgICAgIEFTU0VSVChtX29mZnNldHNJblN0cmluZyk7CiAgICAgICAgIHJldHVybiAoKm1f
b2Zmc2V0c0luU3RyaW5nKVtpbmRleF07CiAgICAgfQogCiBwcml2YXRlOgotICAgIHZvaWQgc3dh
cChpbnQgaW5kZXgxLCBpbnQgaW5kZXgyKQorICAgIHZvaWQgc3dhcCh1bnNpZ25lZCBpbmRleDEs
IHVuc2lnbmVkIGluZGV4MikKICAgICB7CiAgICAgICAgIGNvbnN0IFNpbXBsZUZvbnREYXRhKiBm
ID0gbV9mb250RGF0YVtpbmRleDFdOwogICAgICAgICBtX2ZvbnREYXRhW2luZGV4MV0gPSBtX2Zv
bnREYXRhW2luZGV4Ml07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9HcmFwaGljc0NvbnRleHQuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvR3JhcGhpY3NDb250ZXh0LmNwcAppbmRleCAwZTQwMGVjODA3MzlkN2M5NWIyYzNhMTJlZmE0
MDcyMWM0YmE2YWQzLi5lMDk2NDRkNDU4ZmVkOGEyZjc2ODg1OTk3NGFkNzk1MDFiNWRjM2RlIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRl
eHQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29u
dGV4dC5jcHAKQEAgLTc0LDcgKzc0LDcgQEAgcHVibGljOgogCiBwcml2YXRlOgogICAgIGNvbnN0
IFRleHRSdW4qIG1fdGV4dFJ1bjsKLSAgICBpbnQgbV9vZmZzZXQ7CisgICAgdW5zaWduZWQgbV9v
ZmZzZXQ7CiB9OwogCiBjbGFzcyBJbnRlcnBvbGF0aW9uUXVhbGl0eU1haW50YWluZXIgewpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvTGF0aW4xVGV4dEl0ZXJh
dG9yLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9MYXRpbjFUZXh0SXRlcmF0
b3IuaAppbmRleCBjNDAxODliZmU5MzMyYTBkZWI0MDY0M2MxNGQxZTI4MDc3ZGFkMzg5Li42Yjdl
NTk5ZDAwMjNmOThiMzI2MDY4MjA5ZjljNjAyNzI3N2VkYmFlIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9MYXRpbjFUZXh0SXRlcmF0b3IuaAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9MYXRpbjFUZXh0SXRlcmF0b3IuaApAQCAtMzAs
NyArMzAsNyBAQCBjbGFzcyBMYXRpbjFUZXh0SXRlcmF0b3IgewogcHVibGljOgogICAgIC8vIFRo
ZSBwYXNzZWQgaW4gTENoYXIgcG9pbnRlciBzdGFydHMgYXQgJ2N1cnJlbnRDaGFyYWN0ZXInLiBU
aGUgaXRlcmF0b3Igb3BlcmF0ZXMgb24gdGhlIHJhbmdlIFtjdXJyZW50Q2hhcmFjdGVyLCBsYXN0
Q2hhcmFjdGVyXS4KICAgICAvLyAnZW5kQ2hhcmFjdGVyJyBkZW5vdGVzIHRoZSBtYXhpbXVtIGxl
bmd0aCBvZiB0aGUgVUNoYXIgYXJyYXksIHdoaWNoIG1pZ2h0IGV4Y2VlZCAnbGFzdENoYXJhY3Rl
cicuCi0gICAgTGF0aW4xVGV4dEl0ZXJhdG9yKGNvbnN0IExDaGFyKiBjaGFyYWN0ZXJzLCBpbnQg
Y3VycmVudENoYXJhY3RlciwgaW50IGxhc3RDaGFyYWN0ZXIsIGludCAvKmVuZENoYXJhY3Rlciov
KQorICAgIExhdGluMVRleHRJdGVyYXRvcihjb25zdCBMQ2hhciogY2hhcmFjdGVycywgdW5zaWdu
ZWQgY3VycmVudENoYXJhY3RlciwgdW5zaWduZWQgbGFzdENoYXJhY3RlciwgdW5zaWduZWQgLypl
bmRDaGFyYWN0ZXIqLykKICAgICAgICAgOiBtX2NoYXJhY3RlcnMoY2hhcmFjdGVycykKICAgICAg
ICAgLCBtX2N1cnJlbnRDaGFyYWN0ZXIoY3VycmVudENoYXJhY3RlcikKICAgICAgICAgLCBtX2xh
c3RDaGFyYWN0ZXIobGFzdENoYXJhY3RlcikKQEAgLTUzLDEzICs1MywxMyBAQCBwdWJsaWM6CiAg
ICAgICAgIG1fY3VycmVudENoYXJhY3RlciArPSBhZHZhbmNlTGVuZ3RoOwogICAgIH0KIAotICAg
IGludCBjdXJyZW50Q2hhcmFjdGVyKCkgY29uc3QgeyByZXR1cm4gbV9jdXJyZW50Q2hhcmFjdGVy
OyB9CisgICAgdW5zaWduZWQgY3VycmVudENoYXJhY3RlcigpIGNvbnN0IHsgcmV0dXJuIG1fY3Vy
cmVudENoYXJhY3RlcjsgfQogICAgIGNvbnN0IExDaGFyKiBjaGFyYWN0ZXJzKCkgY29uc3QgeyBy
ZXR1cm4gbV9jaGFyYWN0ZXJzOyB9CiAKIHByaXZhdGU6CiAgICAgY29uc3QgTENoYXIqIG1fY2hh
cmFjdGVyczsKLSAgICBpbnQgbV9jdXJyZW50Q2hhcmFjdGVyOwotICAgIGludCBtX2xhc3RDaGFy
YWN0ZXI7CisgICAgdW5zaWduZWQgbV9jdXJyZW50Q2hhcmFjdGVyOworICAgIHVuc2lnbmVkIG1f
bGFzdENoYXJhY3RlcjsKIH07CiAKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL1NpbXBsZUZvbnREYXRhLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9TaW1wbGVGb250RGF0YS5oCmluZGV4IDlkZjhjNTdkNjBhNzQyMDJhNzkyNDM2N2Fi
MzkzOTc2NzY3NTA3NjMuLjg2Yjk1YjEyOWJiYTZiMjlkMzU2ZmEwYjVlODRlOWQyMDRjMWM0NzYg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1NpbXBsZUZvbnRE
YXRhLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvU2ltcGxlRm9udERh
dGEuaApAQCAtODksNyArODksNyBAQCBwdWJsaWM6CiAgICAgICAgIHZpcnR1YWwgdm9pZCBpbml0
aWFsaXplRm9udERhdGEoU2ltcGxlRm9udERhdGEqLCBmbG9hdCBmb250U2l6ZSkgPSAwOwogICAg
ICAgICB2aXJ0dWFsIGZsb2F0IHdpZHRoRm9yU1ZHR2x5cGgoR2x5cGgsIGZsb2F0IGZvbnRTaXpl
KSBjb25zdCA9IDA7CiAgICAgICAgIHZpcnR1YWwgYm9vbCBmaWxsU1ZHR2x5cGhQYWdlKEdseXBo
UGFnZSosIHVuc2lnbmVkIG9mZnNldCwgdW5zaWduZWQgbGVuZ3RoLCBVQ2hhciogYnVmZmVyLCB1
bnNpZ25lZCBidWZmZXJMZW5ndGgsIGNvbnN0IFNpbXBsZUZvbnREYXRhKikgY29uc3QgPSAwOwot
ICAgICAgICB2aXJ0dWFsIGJvb2wgYXBwbHlTVkdHbHlwaFNlbGVjdGlvbihXaWR0aEl0ZXJhdG9y
JiwgR2x5cGhEYXRhJiwgYm9vbCBtaXJyb3IsIGludCBjdXJyZW50Q2hhcmFjdGVyLCB1bnNpZ25l
ZCYgYWR2YW5jZUxlbmd0aCkgY29uc3QgPSAwOworICAgICAgICB2aXJ0dWFsIGJvb2wgYXBwbHlT
VkdHbHlwaFNlbGVjdGlvbihXaWR0aEl0ZXJhdG9yJiwgR2x5cGhEYXRhJiwgYm9vbCBtaXJyb3Is
IHVuc2lnbmVkIGN1cnJlbnRDaGFyYWN0ZXIsIHVuc2lnbmVkJiBhZHZhbmNlTGVuZ3RoKSBjb25z
dCA9IDA7CiAgICAgfTsKIAogICAgIC8vIFVzZWQgdG8gY3JlYXRlIHBsYXRmb3JtIGZvbnRzLgpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvU3Vycm9nYXRlUGFp
ckF3YXJlVGV4dEl0ZXJhdG9yLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L1N1cnJvZ2F0ZVBhaXJBd2FyZVRleHRJdGVyYXRvci5jcHAKaW5kZXggOTE1NWU3MTFhOGRhODBk
NGViM2RjZjVkYTVhYzMwNWEyOGNiZWE3OS4uY2U3MDRiZTNmMjM2MDNjODJmODhkMTE1Y2RkNmJl
YzBmNTQxNjdlZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
U3Vycm9nYXRlUGFpckF3YXJlVGV4dEl0ZXJhdG9yLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9TdXJyb2dhdGVQYWlyQXdhcmVUZXh0SXRlcmF0b3IuY3BwCkBAIC0y
Nyw3ICsyNyw3IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotU3Vycm9nYXRlUGFpckF3YXJl
VGV4dEl0ZXJhdG9yOjpTdXJyb2dhdGVQYWlyQXdhcmVUZXh0SXRlcmF0b3IoY29uc3QgVUNoYXIq
IGNoYXJhY3RlcnMsIGludCBjdXJyZW50Q2hhcmFjdGVyLCBpbnQgbGFzdENoYXJhY3RlciwgaW50
IGVuZENoYXJhY3RlcikKK1N1cnJvZ2F0ZVBhaXJBd2FyZVRleHRJdGVyYXRvcjo6U3Vycm9nYXRl
UGFpckF3YXJlVGV4dEl0ZXJhdG9yKGNvbnN0IFVDaGFyKiBjaGFyYWN0ZXJzLCB1bnNpZ25lZCBj
dXJyZW50Q2hhcmFjdGVyLCB1bnNpZ25lZCBsYXN0Q2hhcmFjdGVyLCB1bnNpZ25lZCBlbmRDaGFy
YWN0ZXIpCiAgICAgOiBtX2NoYXJhY3RlcnMoY2hhcmFjdGVycykKICAgICAsIG1fY3VycmVudENo
YXJhY3RlcihjdXJyZW50Q2hhcmFjdGVyKQogICAgICwgbV9sYXN0Q2hhcmFjdGVyKGxhc3RDaGFy
YWN0ZXIpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9TdXJy
b2dhdGVQYWlyQXdhcmVUZXh0SXRlcmF0b3IuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL1N1cnJvZ2F0ZVBhaXJBd2FyZVRleHRJdGVyYXRvci5oCmluZGV4IDg1Yzk2OTRjNzZh
MjJjZGVhZWViM2JhODQxYjEwYTBhNTAzMTY4MTMuLjFhNzE1YzBjYTJkMjQ4M2IyNDcyOTk3NWVi
NzVjOWZhMjIzNmVkNDkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL1N1cnJvZ2F0ZVBhaXJBd2FyZVRleHRJdGVyYXRvci5oCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL1N1cnJvZ2F0ZVBhaXJBd2FyZVRleHRJdGVyYXRvci5oCkBAIC0z
MCw3ICszMCw3IEBAIGNsYXNzIFN1cnJvZ2F0ZVBhaXJBd2FyZVRleHRJdGVyYXRvciB7CiBwdWJs
aWM6CiAgICAgLy8gVGhlIHBhc3NlZCBpbiBVQ2hhciBwb2ludGVyIHN0YXJ0cyBhdCAnY3VycmVu
dENoYXJhY3RlcicuIFRoZSBpdGVyYXRvciBvcGVyYXRvZXMgb24gdGhlIHJhbmdlIFtjdXJyZW50
Q2hhcmFjdGVyLCBsYXN0Q2hhcmFjdGVyXS4KICAgICAvLyAnZW5kQ2hhcmFjdGVyJyBkZW5vdGVz
IHRoZSBtYXhpbXVtIGxlbmd0aCBvZiB0aGUgVUNoYXIgYXJyYXksIHdoaWNoIG1pZ2h0IGV4Y2Vl
ZCAnbGFzdENoYXJhY3RlcicuCi0gICAgU3Vycm9nYXRlUGFpckF3YXJlVGV4dEl0ZXJhdG9yKGNv
bnN0IFVDaGFyKiwgaW50IGN1cnJlbnRDaGFyYWN0ZXIsIGludCBsYXN0Q2hhcmFjdGVyLCBpbnQg
ZW5kQ2hhcmFjdGVyKTsKKyAgICBTdXJyb2dhdGVQYWlyQXdhcmVUZXh0SXRlcmF0b3IoY29uc3Qg
VUNoYXIqLCB1bnNpZ25lZCBjdXJyZW50Q2hhcmFjdGVyLCB1bnNpZ25lZCBsYXN0Q2hhcmFjdGVy
LCB1bnNpZ25lZCBlbmRDaGFyYWN0ZXIpOwogCiAgICAgaW5saW5lIGJvb2wgY29uc3VtZShVQ2hh
cjMyJiBjaGFyYWN0ZXIsIHVuc2lnbmVkJiBjbHVzdGVyTGVuZ3RoKQogICAgIHsKQEAgLTUyLDcg
KzUyLDcgQEAgcHVibGljOgogICAgICAgICBtX2N1cnJlbnRDaGFyYWN0ZXIgKz0gYWR2YW5jZUxl
bmd0aDsKICAgICB9CiAKLSAgICBpbnQgY3VycmVudENoYXJhY3RlcigpIGNvbnN0IHsgcmV0dXJu
IG1fY3VycmVudENoYXJhY3RlcjsgfQorICAgIHVuc2lnbmVkIGN1cnJlbnRDaGFyYWN0ZXIoKSBj
b25zdCB7IHJldHVybiBtX2N1cnJlbnRDaGFyYWN0ZXI7IH0KICAgICBjb25zdCBVQ2hhciogY2hh
cmFjdGVycygpIGNvbnN0IHsgcmV0dXJuIG1fY2hhcmFjdGVyczsgfQogCiBwcml2YXRlOgpAQCAt
NjAsOSArNjAsOSBAQCBwcml2YXRlOgogICAgIFVDaGFyMzIgbm9ybWFsaXplVm9pY2luZ01hcmtz
KCk7CiAKICAgICBjb25zdCBVQ2hhciogbV9jaGFyYWN0ZXJzOwotICAgIGludCBtX2N1cnJlbnRD
aGFyYWN0ZXI7Ci0gICAgaW50IG1fbGFzdENoYXJhY3RlcjsKLSAgICBpbnQgbV9lbmRDaGFyYWN0
ZXI7CisgICAgdW5zaWduZWQgbV9jdXJyZW50Q2hhcmFjdGVyOworICAgIHVuc2lnbmVkIG1fbGFz
dENoYXJhY3RlcjsKKyAgICB1bnNpZ25lZCBtX2VuZENoYXJhY3RlcjsKIH07CiAKIH0KZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1RleHRSdW4uaCBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1RleHRSdW4uaAppbmRleCAzNzIwODQ1NmViM2M5
YzM2NWRjNTYyZmMzNWUwMzRjMGUxNTI1MmQxLi4xODQxZDg3Y2M0ZDM0NTM4Y2M0MzVlMmU4MDAx
YzIwN2NkYjZiNTkwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9UZXh0UnVuLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvVGV4dFJ1
bi5oCkBAIC0xNzEsOCArMTcxLDggQEAgcHVibGljOgogICAgIGNvbnN0IFVDaGFyKiBjaGFyYWN0
ZXJzMTYoKSBjb25zdCB7IEFTU0VSVCghaXM4Qml0KCkpOyByZXR1cm4gbV9kYXRhLmNoYXJhY3Rl
cnMxNjsgfQogICAgIAogICAgIGJvb2wgaXM4Qml0KCkgY29uc3QgeyByZXR1cm4gbV9pczhCaXQ7
IH0KLSAgICBpbnQgbGVuZ3RoKCkgY29uc3QgeyByZXR1cm4gbV9sZW47IH0KLSAgICBpbnQgY2hh
cmFjdGVyc0xlbmd0aCgpIGNvbnN0IHsgcmV0dXJuIG1fY2hhcmFjdGVyc0xlbmd0aDsgfQorICAg
IHVuc2lnbmVkIGxlbmd0aCgpIGNvbnN0IHsgcmV0dXJuIG1fbGVuOyB9CisgICAgdW5zaWduZWQg
Y2hhcmFjdGVyc0xlbmd0aCgpIGNvbnN0IHsgcmV0dXJuIG1fY2hhcmFjdGVyc0xlbmd0aDsgfQog
ICAgIFN0cmluZyBzdHJpbmcoKSBjb25zdAogICAgIHsKICAgICAgICAgaWYgKGlzOEJpdCgpKQpA
QCAtMjE3LDcgKzIxNyw3IEBAIHB1YmxpYzoKICAgICAgICAgdmlydHVhbCB+UmVuZGVyaW5nQ29u
dGV4dCgpIHsgfQogCiAjaWYgRU5BQkxFKFNWR19GT05UUykKLSAgICAgICAgdmlydHVhbCBHbHlw
aERhdGEgZ2x5cGhEYXRhRm9yQ2hhcmFjdGVyKGNvbnN0IEZvbnQmLCBXaWR0aEl0ZXJhdG9yJiwg
VUNoYXIzMiBjaGFyYWN0ZXIsIGJvb2wgbWlycm9yLCBpbnQgY3VycmVudENoYXJhY3RlciwgdW5z
aWduZWQmIGFkdmFuY2VMZW5ndGgpID0gMDsKKyAgICAgICAgdmlydHVhbCBHbHlwaERhdGEgZ2x5
cGhEYXRhRm9yQ2hhcmFjdGVyKGNvbnN0IEZvbnQmLCBXaWR0aEl0ZXJhdG9yJiwgVUNoYXIzMiBj
aGFyYWN0ZXIsIGJvb2wgbWlycm9yLCB1bnNpZ25lZCBjdXJyZW50Q2hhcmFjdGVyLCB1bnNpZ25l
ZCYgYWR2YW5jZUxlbmd0aCkgPSAwOwogICAgICAgICB2aXJ0dWFsIHZvaWQgZHJhd1NWR0dseXBo
cyhHcmFwaGljc0NvbnRleHQqLCBjb25zdCBTaW1wbGVGb250RGF0YSosIGNvbnN0IEdseXBoQnVm
ZmVyJiwgaW50IGZyb20sIGludCB0bywgY29uc3QgRmxvYXRQb2ludCYpIGNvbnN0ID0gMDsKICAg
ICAgICAgdmlydHVhbCBmbG9hdCBmbG9hdFdpZHRoVXNpbmdTVkdGb250KGNvbnN0IEZvbnQmLCBj
b25zdCBUZXh0UnVuJiwgaW50JiBjaGFyc0NvbnN1bWVkLCBTdHJpbmcmIGdseXBoTmFtZSkgY29u
c3QgPSAwOwogICAgICAgICB2aXJ0dWFsIGJvb2wgYXBwbHlTVkdLZXJuaW5nKGNvbnN0IFNpbXBs
ZUZvbnREYXRhKiwgV2lkdGhJdGVyYXRvciYsIEdseXBoQnVmZmVyKiwgaW50IGZyb20pIGNvbnN0
ID0gMDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1dpZHRo
SXRlcmF0b3IuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvV2lkdGhJdGVy
YXRvci5jcHAKaW5kZXggNzc3ZGMyOTc4ZGJmOTdjYmQxNzczZmY2YTBjYmZiMDA1M2M2Y2I1OS4u
OTg4OWJkMGVkNjM5ZTZkYzg0NjFkMTI3NDMwM2MxMmMxYTY0ODUyMCAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvV2lkdGhJdGVyYXRvci5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvV2lkdGhJdGVyYXRvci5jcHAKQEAgLTY4LDcg
KzY4LDcgQEAgV2lkdGhJdGVyYXRvcjo6V2lkdGhJdGVyYXRvcihjb25zdCBGb250KiBmb250LCBj
b25zdCBUZXh0UnVuJiBydW4sIEhhc2hTZXQ8Y29uc3QKICAgICB9CiB9CiAKLUdseXBoRGF0YSBX
aWR0aEl0ZXJhdG9yOjpnbHlwaERhdGFGb3JDaGFyYWN0ZXIoVUNoYXIzMiBjaGFyYWN0ZXIsIGJv
b2wgbWlycm9yLCBpbnQgY3VycmVudENoYXJhY3RlciwgdW5zaWduZWQmIGFkdmFuY2VMZW5ndGgp
CitHbHlwaERhdGEgV2lkdGhJdGVyYXRvcjo6Z2x5cGhEYXRhRm9yQ2hhcmFjdGVyKFVDaGFyMzIg
Y2hhcmFjdGVyLCBib29sIG1pcnJvciwgdW5zaWduZWQgY3VycmVudENoYXJhY3RlciwgdW5zaWdu
ZWQmIGFkdmFuY2VMZW5ndGgpCiB7CiAgICAgQVNTRVJUKG1fZm9udCk7CiAKQEAgLTk5LDcgKzk5
LDcgQEAgcHVibGljOgogCiB0eXBlZGVmIFZlY3RvcjxzdGQ6OnBhaXI8aW50LCBPcmlnaW5hbEFk
dmFuY2VzRm9yQ2hhcmFjdGVyVHJlYXRlZEFzU3BhY2U+LCA2ND4gQ2hhcmFjdGVyc1RyZWF0ZWRB
c1NwYWNlOwogCi1zdGF0aWMgaW5saW5lIGZsb2F0IGFwcGx5Rm9udFRyYW5zZm9ybXMoR2x5cGhC
dWZmZXIqIGdseXBoQnVmZmVyLCBib29sIGx0ciwgaW50JiBsYXN0R2x5cGhDb3VudCwgY29uc3Qg
U2ltcGxlRm9udERhdGEqIGZvbnREYXRhLCBXaWR0aEl0ZXJhdG9yJiBpdGVyYXRvciwgVHlwZXNl
dHRpbmdGZWF0dXJlcyB0eXBlc2V0dGluZ0ZlYXR1cmVzLCBDaGFyYWN0ZXJzVHJlYXRlZEFzU3Bh
Y2UmIGNoYXJhY3RlcnNUcmVhdGVkQXNTcGFjZSkKK3N0YXRpYyBpbmxpbmUgZmxvYXQgYXBwbHlG
b250VHJhbnNmb3JtcyhHbHlwaEJ1ZmZlciogZ2x5cGhCdWZmZXIsIGJvb2wgbHRyLCB1bnNpZ25l
ZCYgbGFzdEdseXBoQ291bnQsIGNvbnN0IFNpbXBsZUZvbnREYXRhKiBmb250RGF0YSwgV2lkdGhJ
dGVyYXRvciYgaXRlcmF0b3IsIFR5cGVzZXR0aW5nRmVhdHVyZXMgdHlwZXNldHRpbmdGZWF0dXJl
cywgQ2hhcmFjdGVyc1RyZWF0ZWRBc1NwYWNlJiBjaGFyYWN0ZXJzVHJlYXRlZEFzU3BhY2UpCiB7
CiAgICAgQVNTRVJUKHR5cGVzZXR0aW5nRmVhdHVyZXMgJiAoS2VybmluZyB8IExpZ2F0dXJlcykp
OwogCkBAIC0xNjUsMTQgKzE2NSwxNCBAQCBpbmxpbmUgdW5zaWduZWQgV2lkdGhJdGVyYXRvcjo6
YWR2YW5jZUludGVybmFsKFRleHRJdGVyYXRvciYgdGV4dEl0ZXJhdG9yLCBHbHlwaAogCiAgICAg
Y29uc3QgU2ltcGxlRm9udERhdGEqIHByaW1hcnlGb250ID0gbV9mb250LT5wcmltYXJ5Rm9udCgp
OwogICAgIGNvbnN0IFNpbXBsZUZvbnREYXRhKiBsYXN0Rm9udERhdGEgPSBwcmltYXJ5Rm9udDsK
LSAgICBpbnQgbGFzdEdseXBoQ291bnQgPSBnbHlwaEJ1ZmZlciA/IGdseXBoQnVmZmVyLT5zaXpl
KCkgOiAwOworICAgIHVuc2lnbmVkIGxhc3RHbHlwaENvdW50ID0gZ2x5cGhCdWZmZXIgPyBnbHlw
aEJ1ZmZlci0+c2l6ZSgpIDogMDsKIAogICAgIFVDaGFyMzIgY2hhcmFjdGVyID0gMDsKICAgICB1
bnNpZ25lZCBjbHVzdGVyTGVuZ3RoID0gMDsKICAgICBDaGFyYWN0ZXJzVHJlYXRlZEFzU3BhY2Ug
Y2hhcmFjdGVyc1RyZWF0ZWRBc1NwYWNlOwogICAgIHdoaWxlICh0ZXh0SXRlcmF0b3IuY29uc3Vt
ZShjaGFyYWN0ZXIsIGNsdXN0ZXJMZW5ndGgpKSB7CiAgICAgICAgIHVuc2lnbmVkIGFkdmFuY2VM
ZW5ndGggPSBjbHVzdGVyTGVuZ3RoOwotICAgICAgICBpbnQgY3VycmVudENoYXJhY3RlciA9IHRl
eHRJdGVyYXRvci5jdXJyZW50Q2hhcmFjdGVyKCk7CisgICAgICAgIHVuc2lnbmVkIGN1cnJlbnRD
aGFyYWN0ZXIgPSB0ZXh0SXRlcmF0b3IuY3VycmVudENoYXJhY3RlcigpOwogICAgICAgICBjb25z
dCBHbHlwaERhdGEmIGdseXBoRGF0YSA9IGdseXBoRGF0YUZvckNoYXJhY3RlcihjaGFyYWN0ZXIs
IHJ0bCwgY3VycmVudENoYXJhY3RlciwgYWR2YW5jZUxlbmd0aCk7CiAgICAgICAgIEdseXBoIGds
eXBoID0gZ2x5cGhEYXRhLmdseXBoOwogICAgICAgICBjb25zdCBTaW1wbGVGb250RGF0YSogZm9u
dERhdGEgPSBnbHlwaERhdGEuZm9udERhdGE7CkBAIC0zMjcsMTQgKzMyNywxNCBAQCBpbmxpbmUg
dW5zaWduZWQgV2lkdGhJdGVyYXRvcjo6YWR2YW5jZUludGVybmFsKFRleHRJdGVyYXRvciYgdGV4
dEl0ZXJhdG9yLCBHbHlwaAogICAgIHJldHVybiBjb25zdW1lZENoYXJhY3RlcnM7CiB9CiAKLXVu
c2lnbmVkIFdpZHRoSXRlcmF0b3I6OmFkdmFuY2UoaW50IG9mZnNldCwgR2x5cGhCdWZmZXIqIGds
eXBoQnVmZmVyKQordW5zaWduZWQgV2lkdGhJdGVyYXRvcjo6YWR2YW5jZSh1bnNpZ25lZCBvZmZz
ZXQsIEdseXBoQnVmZmVyKiBnbHlwaEJ1ZmZlcikKIHsKLSAgICBpbnQgbGVuZ3RoID0gbV9ydW4u
bGVuZ3RoKCk7CisgICAgdW5zaWduZWQgbGVuZ3RoID0gbV9ydW4ubGVuZ3RoKCk7CiAKICAgICBp
ZiAob2Zmc2V0ID4gbGVuZ3RoKQogICAgICAgICBvZmZzZXQgPSBsZW5ndGg7CiAKLSAgICBpZiAo
bV9jdXJyZW50Q2hhcmFjdGVyID49IHN0YXRpY19jYXN0PHVuc2lnbmVkPihvZmZzZXQpKQorICAg
IGlmIChtX2N1cnJlbnRDaGFyYWN0ZXIgPj0gb2Zmc2V0KQogICAgICAgICByZXR1cm4gMDsKIAog
ICAgIGlmIChtX3J1bi5pczhCaXQoKSkgewpAQCAtMzQ4LDEwICszNDgsMTAgQEAgdW5zaWduZWQg
V2lkdGhJdGVyYXRvcjo6YWR2YW5jZShpbnQgb2Zmc2V0LCBHbHlwaEJ1ZmZlciogZ2x5cGhCdWZm
ZXIpCiAKIGJvb2wgV2lkdGhJdGVyYXRvcjo6YWR2YW5jZU9uZUNoYXJhY3RlcihmbG9hdCYgd2lk
dGgsIEdseXBoQnVmZmVyJiBnbHlwaEJ1ZmZlcikKIHsKLSAgICBpbnQgb2xkU2l6ZSA9IGdseXBo
QnVmZmVyLnNpemUoKTsKKyAgICB1bnNpZ25lZCBvbGRTaXplID0gZ2x5cGhCdWZmZXIuc2l6ZSgp
OwogICAgIGFkdmFuY2UobV9jdXJyZW50Q2hhcmFjdGVyICsgMSwgJmdseXBoQnVmZmVyKTsKICAg
ICBmbG9hdCB3ID0gMDsKLSAgICBmb3IgKGludCBpID0gb2xkU2l6ZTsgaSA8IGdseXBoQnVmZmVy
LnNpemUoKTsgKytpKQorICAgIGZvciAodW5zaWduZWQgaSA9IG9sZFNpemU7IGkgPCBnbHlwaEJ1
ZmZlci5zaXplKCk7ICsraSkKICAgICAgICAgdyArPSBnbHlwaEJ1ZmZlci5hZHZhbmNlQXQoaSku
d2lkdGgoKTsKICAgICB3aWR0aCA9IHc7CiAgICAgcmV0dXJuIGdseXBoQnVmZmVyLnNpemUoKSA+
IG9sZFNpemU7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9X
aWR0aEl0ZXJhdG9yLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9XaWR0aEl0
ZXJhdG9yLmgKaW5kZXggY2QwNmQ3YzRkY2M0MTIwYTY2YTNkMDQ0ODdhZTg4ZmRjYTEzOThiNi4u
ZmRjNGJhNGNlMzU2MWExNWQ0MTEzYTNmMTI5ZGRiZTVmMTExMThkMCAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvV2lkdGhJdGVyYXRvci5oCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1dpZHRoSXRlcmF0b3IuaApAQCAtNDEsNyArNDEs
NyBAQCBzdHJ1Y3QgV2lkdGhJdGVyYXRvciB7CiBwdWJsaWM6CiAgICAgV2lkdGhJdGVyYXRvcihj
b25zdCBGb250KiwgY29uc3QgVGV4dFJ1biYsIEhhc2hTZXQ8Y29uc3QgU2ltcGxlRm9udERhdGEq
PiogZmFsbGJhY2tGb250cyA9IDAsIGJvb2wgYWNjb3VudEZvckdseXBoQm91bmRzID0gZmFsc2Us
IGJvb2wgZm9yVGV4dEVtcGhhc2lzID0gZmFsc2UpOwogCi0gICAgdW5zaWduZWQgYWR2YW5jZShp
bnQgdG8sIEdseXBoQnVmZmVyKik7CisgICAgdW5zaWduZWQgYWR2YW5jZSh1bnNpZ25lZCB0bywg
R2x5cGhCdWZmZXIqKTsKICAgICBib29sIGFkdmFuY2VPbmVDaGFyYWN0ZXIoZmxvYXQmIHdpZHRo
LCBHbHlwaEJ1ZmZlciYpOwogCiAgICAgZmxvYXQgbWF4R2x5cGhCb3VuZGluZ0JveFkoKSBjb25z
dCB7IEFTU0VSVChtX2FjY291bnRGb3JHbHlwaEJvdW5kcyk7IHJldHVybiBtX21heEdseXBoQm91
bmRpbmdCb3hZOyB9CkBAIC04Nyw3ICs4Nyw3IEBAIHB1YmxpYzoKICNlbmRpZgogCiBwcml2YXRl
OgotICAgIEdseXBoRGF0YSBnbHlwaERhdGFGb3JDaGFyYWN0ZXIoVUNoYXIzMiwgYm9vbCBtaXJy
b3IsIGludCBjdXJyZW50Q2hhcmFjdGVyLCB1bnNpZ25lZCYgYWR2YW5jZUxlbmd0aCk7CisgICAg
R2x5cGhEYXRhIGdseXBoRGF0YUZvckNoYXJhY3RlcihVQ2hhcjMyLCBib29sIG1pcnJvciwgdW5z
aWduZWQgY3VycmVudENoYXJhY3RlciwgdW5zaWduZWQmIGFkdmFuY2VMZW5ndGgpOwogICAgIHRl
bXBsYXRlIDx0eXBlbmFtZSBUZXh0SXRlcmF0b3I+CiAgICAgaW5saW5lIHVuc2lnbmVkIGFkdmFu
Y2VJbnRlcm5hbChUZXh0SXRlcmF0b3ImLCBHbHlwaEJ1ZmZlciopOwogCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9Gb250Q2Fpcm8uY3BwIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vRm9udENhaXJvLmNwcAppbmRleCBj
MTkwYWJhMjNmY2VhMzlmNGI5NDhkMjI3MzE1ZWY1YmYzMTExNWE3Li4zYTg1YmU1ZjhmZGY0NmZi
ZjM4ZTkxODg5ZTBlZWNjMzk4NDY0YTcxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jYWlyby9Gb250Q2Fpcm8uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ZvbnRDYWlyby5jcHAKQEAgLTk0LDcgKzk0LDcgQEAgc3Rh
dGljIHZvaWQgZHJhd0dseXBoc1NoYWRvdyhHcmFwaGljc0NvbnRleHQqIGdyYXBoaWNzQ29udGV4
dCwgY29uc3QgRmxvYXRQb2ludCYKIH0KIAogdm9pZCBGb250OjpkcmF3R2x5cGhzKEdyYXBoaWNz
Q29udGV4dCogY29udGV4dCwgY29uc3QgU2ltcGxlRm9udERhdGEqIGZvbnQsIGNvbnN0IEdseXBo
QnVmZmVyJiBnbHlwaEJ1ZmZlciwKLSAgICAgICAgICAgICAgICAgICAgICBpbnQgZnJvbSwgaW50
IG51bUdseXBocywgY29uc3QgRmxvYXRQb2ludCYgcG9pbnQpIGNvbnN0CisgICAgdW5zaWduZWQg
ZnJvbSwgdW5zaWduZWQgbnVtR2x5cGhzLCBjb25zdCBGbG9hdFBvaW50JiBwb2ludCkgY29uc3QK
IHsKICAgICBpZiAoIWZvbnQtPnBsYXRmb3JtRGF0YSgpLnNpemUoKSkKICAgICAgICAgcmV0dXJu
OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vRm9u
dENhaXJvSGFyZmJ1enpORy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
YWlyby9Gb250Q2Fpcm9IYXJmYnV6ek5HLmNwcAppbmRleCBlODQ3ODEwYTM5YWI4ZjJmZjVmZmVm
YmVmMzJiNTEyZGIwZmU5YmZmLi5jYjA4Y2NhZDM1Zjk4OGMxMWU0ZDFhNzhlNGI4YjFhNmE0OGQy
OTIyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9G
b250Q2Fpcm9IYXJmYnV6ek5HLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jYWlyby9Gb250Q2Fpcm9IYXJmYnV6ek5HLmNwcApAQCAtMzgsNyArMzgsNyBAQAogCiBu
YW1lc3BhY2UgV2ViQ29yZSB7CiAKLWZsb2F0IEZvbnQ6OmRyYXdDb21wbGV4VGV4dChHcmFwaGlj
c0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IFRleHRSdW4mIHJ1biwgY29uc3QgRmxvYXRQb2ludCYg
cG9pbnQsIGludCwgaW50KSBjb25zdAorZmxvYXQgRm9udDo6ZHJhd0NvbXBsZXhUZXh0KEdyYXBo
aWNzQ29udGV4dCogY29udGV4dCwgY29uc3QgVGV4dFJ1biYgcnVuLCBjb25zdCBGbG9hdFBvaW50
JiBwb2ludCwgdW5zaWduZWQsIHVuc2lnbmVkKSBjb25zdAogewogICAgIEdseXBoQnVmZmVyIGds
eXBoQnVmZmVyOwogICAgIEhhcmZCdXp6U2hhcGVyIHNoYXBlcih0aGlzLCBydW4pOwpAQCAtNTIs
NyArNTIsNyBAQCBmbG9hdCBGb250OjpkcmF3Q29tcGxleFRleHQoR3JhcGhpY3NDb250ZXh0KiBj
b250ZXh0LCBjb25zdCBUZXh0UnVuJiBydW4sIGNvbnN0CiAgICAgcmV0dXJuIDA7CiB9CiAKLXZv
aWQgRm9udDo6ZHJhd0VtcGhhc2lzTWFya3NGb3JDb21wbGV4VGV4dChHcmFwaGljc0NvbnRleHQq
IC8qIGNvbnRleHQgKi8sIGNvbnN0IFRleHRSdW4mIC8qIHJ1biAqLywgY29uc3QgQXRvbWljU3Ry
aW5nJiAvKiBtYXJrICovLCBjb25zdCBGbG9hdFBvaW50JiAvKiBwb2ludCAqLywgaW50IC8qIGZy
b20gKi8sIGludCAvKiB0byAqLykgY29uc3QKK3ZvaWQgRm9udDo6ZHJhd0VtcGhhc2lzTWFya3NG
b3JDb21wbGV4VGV4dChHcmFwaGljc0NvbnRleHQqIC8qIGNvbnRleHQgKi8sIGNvbnN0IFRleHRS
dW4mIC8qIHJ1biAqLywgY29uc3QgQXRvbWljU3RyaW5nJiAvKiBtYXJrICovLCBjb25zdCBGbG9h
dFBvaW50JiAvKiBwb2ludCAqLywgdW5zaWduZWQgLyogZnJvbSAqLywgdW5zaWduZWQgLyogdG8g
Ki8pIGNvbnN0CiB7CiAgICAgbm90SW1wbGVtZW50ZWQoKTsKIH0KQEAgLTg1LDcgKzg1LDcgQEAg
aW50IEZvbnQ6Om9mZnNldEZvclBvc2l0aW9uRm9yQ29tcGxleFRleHQoY29uc3QgVGV4dFJ1biYg
cnVuLCBmbG9hdCB4LCBib29sKSBjb24KICAgICByZXR1cm4gMDsKIH0KIAotdm9pZCBGb250Ojph
ZGp1c3RTZWxlY3Rpb25SZWN0Rm9yQ29tcGxleFRleHQoY29uc3QgVGV4dFJ1biYgcnVuLCBMYXlv
dXRSZWN0JiBzZWxlY3Rpb25SZWN0LCBpbnQgZnJvbSwgaW50IHRvKSBjb25zdAordm9pZCBGb250
OjphZGp1c3RTZWxlY3Rpb25SZWN0Rm9yQ29tcGxleFRleHQoY29uc3QgVGV4dFJ1biYgcnVuLCBM
YXlvdXRSZWN0JiBzZWxlY3Rpb25SZWN0LCB1bnNpZ25lZCBmcm9tLCB1bnNpZ25lZCB0bykgY29u
c3QKIHsKICAgICBIYXJmQnV6elNoYXBlciBzaGFwZXIodGhpcywgcnVuKTsKICAgICBpZiAoc2hh
cGVyLnNoYXBlKCkpIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2hhcmZidXp6L0hhcmZCdXp6U2hhcGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2hhcmZidXp6L0hhcmZCdXp6U2hhcGVyLmNwcAppbmRleCA5YjhlNGUwYTlkMjEz
YjUyNTZkNzdjMGIzZmRiODUyY2MzNmE1NmUyLi40MjM0ZDZhMTRlMmI4ZDdlMmUwMWQzYmQ2OGZh
MTI3NDZhZTAwZDNkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9oYXJmYnV6ei9IYXJmQnV6elNoYXBlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvaGFyZmJ1enovSGFyZkJ1enpTaGFwZXIuY3BwCkBAIC0yNTYsNyArMjU2LDcg
QEAgdm9pZCBIYXJmQnV6elNoYXBlcjo6c2V0Tm9ybWFsaXplZEJ1ZmZlcihOb3JtYWxpemVNb2Rl
IG5vcm1hbGl6ZU1vZGUpCiAgICAgfSBlbHNlCiAgICAgICAgIHJ1bkNoYXJhY3RlcnMgPSBtX3J1
bi5jaGFyYWN0ZXJzMTYoKTsKIAotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbV9ydW4ubGVuZ3Ro
KCk7ICsraSkgeworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX3J1bi5sZW5ndGgoKTsg
KytpKSB7CiAgICAgICAgIFVDaGFyIGNoID0gcnVuQ2hhcmFjdGVyc1tpXTsKICAgICAgICAgaWYg
KDo6dWJsb2NrX2dldENvZGUoY2gpID09IFVCTE9DS19DT01CSU5JTkdfRElBQ1JJVElDQUxfTUFS
S1MpIHsKICAgICAgICAgICAgIGljdTo6Tm9ybWFsaXplcjo6bm9ybWFsaXplKGljdTo6VW5pY29k
ZVN0cmluZyhydW5DaGFyYWN0ZXJzLApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvbWFjL0ZvbnRDb21wbGV4VGV4dE1hYy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9tYWMvRm9udENvbXBsZXhUZXh0TWFjLmNwcAppbmRleCA4MzI1YjJm
NWRlN2E0NGRlN2I2YTg2MDFhNjdkMTEyZDVlMDE4ZjU3Li5mYmUxMjVhNzllZDU4Nzc0OGM4OTM1
NmQ0YjFhMGYyOGE2NmU3OWE2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9tYWMvRm9udENvbXBsZXhUZXh0TWFjLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9tYWMvRm9udENvbXBsZXhUZXh0TWFjLmNwcApAQCAtMzcsNyArMzcs
NyBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLXZvaWQgRm9udDo6YWRqdXN0U2VsZWN0aW9u
UmVjdEZvckNvbXBsZXhUZXh0KGNvbnN0IFRleHRSdW4mIHJ1biwgTGF5b3V0UmVjdCYgc2VsZWN0
aW9uUmVjdCwgaW50IGZyb20sIGludCB0bykgY29uc3QKK3ZvaWQgRm9udDo6YWRqdXN0U2VsZWN0
aW9uUmVjdEZvckNvbXBsZXhUZXh0KGNvbnN0IFRleHRSdW4mIHJ1biwgTGF5b3V0UmVjdCYgc2Vs
ZWN0aW9uUmVjdCwgdW5zaWduZWQgZnJvbSwgdW5zaWduZWQgdG8pIGNvbnN0CiB7CiAgICAgQ29t
cGxleFRleHRDb250cm9sbGVyIGNvbnRyb2xsZXIodGhpcywgcnVuKTsKICAgICBjb250cm9sbGVy
LmFkdmFuY2UoZnJvbSk7CkBAIC01Miw3ICs1Miw3IEBAIHZvaWQgRm9udDo6YWRqdXN0U2VsZWN0
aW9uUmVjdEZvckNvbXBsZXhUZXh0KGNvbnN0IFRleHRSdW4mIHJ1biwgTGF5b3V0UmVjdCYgc2Vs
CiAgICAgc2VsZWN0aW9uUmVjdC5zZXRXaWR0aChhZnRlcldpZHRoIC0gYmVmb3JlV2lkdGgpOwog
fQogCi1mbG9hdCBGb250OjpnZXRHbHlwaHNBbmRBZHZhbmNlc0ZvckNvbXBsZXhUZXh0KGNvbnN0
IFRleHRSdW4mIHJ1biwgaW50IGZyb20sIGludCB0bywgR2x5cGhCdWZmZXImIGdseXBoQnVmZmVy
LCBGb3JUZXh0RW1waGFzaXNPck5vdCBmb3JUZXh0RW1waGFzaXMpIGNvbnN0CitmbG9hdCBGb250
OjpnZXRHbHlwaHNBbmRBZHZhbmNlc0ZvckNvbXBsZXhUZXh0KGNvbnN0IFRleHRSdW4mIHJ1biwg
dW5zaWduZWQgZnJvbSwgdW5zaWduZWQgdG8sIEdseXBoQnVmZmVyJiBnbHlwaEJ1ZmZlciwgRm9y
VGV4dEVtcGhhc2lzT3JOb3QgZm9yVGV4dEVtcGhhc2lzKSBjb25zdAogewogICAgIGZsb2F0IGlu
aXRpYWxBZHZhbmNlOwogCkBAIC03NSw3ICs3NSw3IEBAIGZsb2F0IEZvbnQ6OmdldEdseXBoc0Fu
ZEFkdmFuY2VzRm9yQ29tcGxleFRleHQoY29uc3QgVGV4dFJ1biYgcnVuLCBpbnQgZnJvbSwgaW50
CiAgICAgcmV0dXJuIGluaXRpYWxBZHZhbmNlOwogfQogCi1mbG9hdCBGb250OjpkcmF3Q29tcGxl
eFRleHQoR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBjb25zdCBUZXh0UnVuJiBydW4sIGNvbnN0
IEZsb2F0UG9pbnQmIHBvaW50LCBpbnQgZnJvbSwgaW50IHRvKSBjb25zdAorZmxvYXQgRm9udDo6
ZHJhd0NvbXBsZXhUZXh0KEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgY29uc3QgVGV4dFJ1biYg
cnVuLCBjb25zdCBGbG9hdFBvaW50JiBwb2ludCwgdW5zaWduZWQgZnJvbSwgdW5zaWduZWQgdG8p
IGNvbnN0CiB7CiAgICAgLy8gVGhpcyBnbHlwaCBidWZmZXIgaG9sZHMgb3VyIGdseXBocyArIGFk
dmFuY2VzICsgZm9udCBkYXRhIGZvciBlYWNoIGdseXBoLgogICAgIEdseXBoQnVmZmVyIGdseXBo
QnVmZmVyOwpAQCAtOTMsNyArOTMsNyBAQCBmbG9hdCBGb250OjpkcmF3Q29tcGxleFRleHQoR3Jh
cGhpY3NDb250ZXh0KiBjb250ZXh0LCBjb25zdCBUZXh0UnVuJiBydW4sIGNvbnN0CiAgICAgcmV0
dXJuIHN0YXJ0UG9pbnQueCgpIC0gc3RhcnRYOwogfQogCi12b2lkIEZvbnQ6OmRyYXdFbXBoYXNp
c01hcmtzRm9yQ29tcGxleFRleHQoR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBjb25zdCBUZXh0
UnVuJiBydW4sIGNvbnN0IEF0b21pY1N0cmluZyYgbWFyaywgY29uc3QgRmxvYXRQb2ludCYgcG9p
bnQsIGludCBmcm9tLCBpbnQgdG8pIGNvbnN0Cit2b2lkIEZvbnQ6OmRyYXdFbXBoYXNpc01hcmtz
Rm9yQ29tcGxleFRleHQoR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBjb25zdCBUZXh0UnVuJiBy
dW4sIGNvbnN0IEF0b21pY1N0cmluZyYgbWFyaywgY29uc3QgRmxvYXRQb2ludCYgcG9pbnQsIHVu
c2lnbmVkIGZyb20sIHVuc2lnbmVkIHRvKSBjb25zdAogewogICAgIEdseXBoQnVmZmVyIGdseXBo
QnVmZmVyOwogICAgIGZsb2F0IGluaXRpYWxBZHZhbmNlID0gZ2V0R2x5cGhzQW5kQWR2YW5jZXNG
b3JDb21wbGV4VGV4dChydW4sIGZyb20sIHRvLCBnbHlwaEJ1ZmZlciwgRm9yVGV4dEVtcGhhc2lz
KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL21hYy9Gb250
TWFjLm1tIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0ZvbnRNYWMubW0K
aW5kZXggYzc3MWVlOWU5YjVjOTBhNGEzZTllMGI3OGY5MmJlNzBlMjhlNzMwZi4uMDU5ZTFmZWNl
YzQ3NmYyOTM0ODc2YjQ4NGZlYmFkOWQyN2M2YjI3YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0ZvbnRNYWMubW0KKysrIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0ZvbnRNYWMubW0KQEAgLTE4NCw3ICsxODQsNyBAQCBzdGF0
aWMgdm9pZCBzaG93R2x5cGhzV2l0aEFkdmFuY2VzKGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50LCBj
b25zdCBTaW1wbGVGb250RGF0YQogICAgIH0KIH0KIAotdm9pZCBGb250OjpkcmF3R2x5cGhzKEdy
YXBoaWNzQ29udGV4dCogY29udGV4dCwgY29uc3QgU2ltcGxlRm9udERhdGEqIGZvbnQsIGNvbnN0
IEdseXBoQnVmZmVyJiBnbHlwaEJ1ZmZlciwgaW50IGZyb20sIGludCBudW1HbHlwaHMsIGNvbnN0
IEZsb2F0UG9pbnQmIGFuY2hvclBvaW50KSBjb25zdAordm9pZCBGb250OjpkcmF3R2x5cGhzKEdy
YXBoaWNzQ29udGV4dCogY29udGV4dCwgY29uc3QgU2ltcGxlRm9udERhdGEqIGZvbnQsIGNvbnN0
IEdseXBoQnVmZmVyJiBnbHlwaEJ1ZmZlciwgdW5zaWduZWQgZnJvbSwgdW5zaWduZWQgbnVtR2x5
cGhzLCBjb25zdCBGbG9hdFBvaW50JiBhbmNob3JQb2ludCkgY29uc3QKIHsKICAgICBjb25zdCBG
b250UGxhdGZvcm1EYXRhJiBwbGF0Zm9ybURhdGEgPSBmb250LT5wbGF0Zm9ybURhdGEoKTsKICAg
ICBpZiAoIXBsYXRmb3JtRGF0YS5zaXplKCkpCkBAIC00NjgsNyArNDY4LDcgQEAgcHJpdmF0ZToK
ICAgICB2aXJ0dWFsIHZvaWQgYWR2YW5jZSgpIG92ZXJyaWRlOwogICAgIHZvaWQgbW92ZVRvTmV4
dFZhbGlkR2x5cGgoKTsKIAotICAgIGludCBtX2luZGV4OworICAgIHVuc2lnbmVkIG1faW5kZXg7
CiAgICAgY29uc3QgVGV4dFJ1biYgbV90ZXh0UnVuOwogICAgIGNvbnN0IEdseXBoQnVmZmVyJiBt
X2dseXBoQnVmZmVyOwogICAgIGNvbnN0IFNpbXBsZUZvbnREYXRhKiBtX2ZvbnREYXRhOwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ZvbnRDR1dpbi5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vRm9udENHV2luLmNwcApp
bmRleCBiYTEzZGQwZDE1ZGMyNzI3NmU1MjUwNGJlNjA5MWYzM2RhMTRlN2NkLi43NmI4Njg1NTVk
NWZkOTliNGUzMjBiMWIxNGI2M2QxOTdkYjhlNjRkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vRm9udENHV2luLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vRm9udENHV2luLmNwcApAQCAtMTI4LDcgKzEyOCw3IEBA
IHN0YXRpYyBDR1BhdGhSZWYgY3JlYXRlUGF0aEZvckdseXBoKEhEQyBoZGMsIEdseXBoIGdseXBo
KQogfQogCiB2b2lkIEZvbnQ6OmRyYXdHbHlwaHMoR3JhcGhpY3NDb250ZXh0KiBncmFwaGljc0Nv
bnRleHQsIGNvbnN0IFNpbXBsZUZvbnREYXRhKiBmb250LCBjb25zdCBHbHlwaEJ1ZmZlciYgZ2x5
cGhCdWZmZXIsIAotICAgICAgICAgICAgICAgICAgICAgIGludCBmcm9tLCBpbnQgbnVtR2x5cGhz
LCBjb25zdCBGbG9hdFBvaW50JiBwb2ludCkgY29uc3QKKyAgICB1bnNpZ25lZCBmcm9tLCB1bnNp
Z25lZCBudW1HbHlwaHMsIGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50KSBjb25zdAogewogICAgIENH
Q29udGV4dFJlZiBjZ0NvbnRleHQgPSBncmFwaGljc0NvbnRleHQtPnBsYXRmb3JtQ29udGV4dCgp
OwogICAgIGJvb2wgc2hvdWxkVXNlRm9udFNtb290aGluZyA9IFdlYkNvcmVTaG91bGRVc2VGb250
U21vb3RoaW5nKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy93aW4vRm9udFdpbi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4v
Rm9udFdpbi5jcHAKaW5kZXggYzY2YjJjNDBmNjc3NjYyOTUwZjUyMmY4ZmNkM2UzOTVkNjUyOTQ3
Mi4uMDZjNmMwMDJjMGFiOWNjMmMzODgwODE5NTYxNGVjMjc3ZDE5MzZjMCAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ZvbnRXaW4uY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9Gb250V2luLmNwcApAQCAtNTEsNyAr
NTEsNyBAQCBib29sIEZvbnQ6OmNhbkV4cGFuZEFyb3VuZElkZW9ncmFwaHNJbkNvbXBsZXhUZXh0
KCkKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLXZvaWQgRm9udDo6YWRqdXN0U2VsZWN0aW9uUmVj
dEZvckNvbXBsZXhUZXh0KGNvbnN0IFRleHRSdW4mIHJ1biwgTGF5b3V0UmVjdCYgc2VsZWN0aW9u
UmVjdCwgaW50IGZyb20sIGludCB0bykgY29uc3QKK3ZvaWQgRm9udDo6YWRqdXN0U2VsZWN0aW9u
UmVjdEZvckNvbXBsZXhUZXh0KGNvbnN0IFRleHRSdW4mIHJ1biwgTGF5b3V0UmVjdCYgc2VsZWN0
aW9uUmVjdCwgdW5zaWduZWQgZnJvbSwgdW5zaWduZWQgdG8pIGNvbnN0CiB7CiAgICAgVW5pc2Ny
aWJlQ29udHJvbGxlciBpdCh0aGlzLCBydW4pOwogICAgIGl0LmFkdmFuY2UoZnJvbSk7CkBAIC02
Nyw3ICs2Nyw3IEBAIHZvaWQgRm9udDo6YWRqdXN0U2VsZWN0aW9uUmVjdEZvckNvbXBsZXhUZXh0
KGNvbnN0IFRleHRSdW4mIHJ1biwgTGF5b3V0UmVjdCYgc2VsCiAgICAgc2VsZWN0aW9uUmVjdC5z
ZXRXaWR0aChhZnRlcldpZHRoIC0gYmVmb3JlV2lkdGgpOwogfQogCi1mbG9hdCBGb250OjpnZXRH
bHlwaHNBbmRBZHZhbmNlc0ZvckNvbXBsZXhUZXh0KGNvbnN0IFRleHRSdW4mIHJ1biwgaW50IGZy
b20sIGludCB0bywgR2x5cGhCdWZmZXImIGdseXBoQnVmZmVyLCBGb3JUZXh0RW1waGFzaXNPck5v
dCBmb3JUZXh0RW1waGFzaXMpIGNvbnN0CitmbG9hdCBGb250OjpnZXRHbHlwaHNBbmRBZHZhbmNl
c0ZvckNvbXBsZXhUZXh0KGNvbnN0IFRleHRSdW4mIHJ1biwgdW5zaWduZWQgZnJvbSwgdW5zaWdu
ZWQgdG8sIEdseXBoQnVmZmVyJiBnbHlwaEJ1ZmZlciwgRm9yVGV4dEVtcGhhc2lzT3JOb3QgZm9y
VGV4dEVtcGhhc2lzKSBjb25zdAogewogICAgIGlmIChmb3JUZXh0RW1waGFzaXMpIHsKICAgICAg
ICAgLy8gRklYTUU6IEFkZCBmb3JUZXh0RW1waGFzaXMgcGFyZW1ldGVyIHRvIFVuaXNjcmliZUNv
bnRyb2xsZXIgYW5kIHVzZSBpdC4KQEAgLTkyLDcgKzkyLDcgQEAgZmxvYXQgRm9udDo6Z2V0R2x5
cGhzQW5kQWR2YW5jZXNGb3JDb21wbGV4VGV4dChjb25zdCBUZXh0UnVuJiBydW4sIGludCBmcm9t
LCBpbnQKICAgICByZXR1cm4gYmVmb3JlV2lkdGg7CiB9CiAKLWZsb2F0IEZvbnQ6OmRyYXdDb21w
bGV4VGV4dChHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IFRleHRSdW4mIHJ1biwgY29u
c3QgRmxvYXRQb2ludCYgcG9pbnQsIGludCBmcm9tLCBpbnQgdG8pIGNvbnN0CitmbG9hdCBGb250
OjpkcmF3Q29tcGxleFRleHQoR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBjb25zdCBUZXh0UnVu
JiBydW4sIGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50LCB1bnNpZ25lZCBmcm9tLCB1bnNpZ25lZCB0
bykgY29uc3QKIHsKICAgICAvLyBUaGlzIGdseXBoIGJ1ZmZlciBob2xkcyBvdXIgZ2x5cGhzICsg
YWR2YW5jZXMgKyBmb250IGRhdGEgZm9yIGVhY2ggZ2x5cGguCiAgICAgR2x5cGhCdWZmZXIgZ2x5
cGhCdWZmZXI7CkBAIC0xMDksNyArMTA5LDcgQEAgZmxvYXQgRm9udDo6ZHJhd0NvbXBsZXhUZXh0
KEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgY29uc3QgVGV4dFJ1biYgcnVuLCBjb25zdAogICAg
IHJldHVybiBzdGFydFBvaW50LngoKSAtIHN0YXJ0WDsKIH0KIAotdm9pZCBGb250OjpkcmF3RW1w
aGFzaXNNYXJrc0ZvckNvbXBsZXhUZXh0KEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgY29uc3Qg
VGV4dFJ1biYgcnVuLCBjb25zdCBBdG9taWNTdHJpbmcmIG1hcmssIGNvbnN0IEZsb2F0UG9pbnQm
IHBvaW50LCBpbnQgZnJvbSwgaW50IHRvKSBjb25zdAordm9pZCBGb250OjpkcmF3RW1waGFzaXNN
YXJrc0ZvckNvbXBsZXhUZXh0KEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgY29uc3QgVGV4dFJ1
biYgcnVuLCBjb25zdCBBdG9taWNTdHJpbmcmIG1hcmssIGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50
LCB1bnNpZ25lZCBmcm9tLCB1bnNpZ25lZCB0bykgY29uc3QKIHsKICAgICBHbHlwaEJ1ZmZlciBn
bHlwaEJ1ZmZlcjsKICAgICBmbG9hdCBpbml0aWFsQWR2YW5jZSA9IGdldEdseXBoc0FuZEFkdmFu
Y2VzRm9yQ29tcGxleFRleHQocnVuLCBmcm9tLCB0bywgZ2x5cGhCdWZmZXIsIEZvclRleHRFbXBo
YXNpcyk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW5j
ZS9Gb250V2luQ0UuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luY2Uv
Rm9udFdpbkNFLmNwcAppbmRleCBlZDcyNjI3YzNlOTg2NmFiOTE5YjBkYmI0OTYxMzExY2RiNWQ3
NjhlLi5lMGIzZjYzMGViZGI5M2Q3NjZjMTczMWEwNjk5NTc1ZGJmNDRkZWQxIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW5jZS9Gb250V2luQ0UuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbmNlL0ZvbnRXaW5DRS5jcHAK
QEAgLTYyLDcgKzYyLDcgQEAgcHVibGljOgogU2NyZWVuRGNSZWxlYXNlciByZWxlYXNlU2NyZWVu
RGM7CiAKIHZvaWQgRm9udDo6ZHJhd0dseXBocyhHcmFwaGljc0NvbnRleHQqIGdyYXBoaWNzQ29u
dGV4dCwgY29uc3QgU2ltcGxlRm9udERhdGEqIGZvbnREYXRhLCBjb25zdCBHbHlwaEJ1ZmZlciYg
Z2x5cGhCdWZmZXIsCi0gICAgICAgICAgICAgICAgICAgICAgaW50IGZyb20sIGludCBudW1HbHlw
aHMsIGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50KSBjb25zdAorICAgIHVuc2lnbmVkIGZyb20sIHVu
c2lnbmVkIG51bUdseXBocywgY29uc3QgRmxvYXRQb2ludCYgcG9pbnQpIGNvbnN0CiB7CiAgICAg
Z3JhcGhpY3NDb250ZXh0LT5kcmF3VGV4dChmb250RGF0YSwgZ2x5cGhCdWZmZXIsIGZyb20sIG51
bUdseXBocywgcG9pbnQpOwogfQpAQCAtMjA2LDcgKzIwNiw3IEBAIHN0YXRpYyBpbnQgZ2VuZXJh
dGVDb21wb25lbnRzKFRleHRSdW5Db21wb25lbnRzKiBjb21wb25lbnRzLCBjb25zdCBGb250ICZm
b250LCBjCiAgICAgcmV0dXJuIG9mZnNldDsKIH0KIAotZmxvYXQgRm9udDo6ZHJhd0NvbXBsZXhU
ZXh0KEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgY29uc3QgVGV4dFJ1biYgcnVuLCBjb25zdCBG
bG9hdFBvaW50JiBwb2ludCwgaW50IGZyb20sIGludCB0bykgY29uc3QKK2Zsb2F0IEZvbnQ6OmRy
YXdDb21wbGV4VGV4dChHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IFRleHRSdW4mIHJ1
biwgY29uc3QgRmxvYXRQb2ludCYgcG9pbnQsIHVuc2lnbmVkIGZyb20sIHVuc2lnbmVkIHRvKSBj
b25zdAogewogICAgIGlmICh0byA8IDApCiAgICAgICAgIHRvID0gcnVuLmxlbmd0aCgpOwpAQCAt
MjM3LDcgKzIzNyw3IEBAIGZsb2F0IEZvbnQ6OmRyYXdDb21wbGV4VGV4dChHcmFwaGljc0NvbnRl
eHQqIGNvbnRleHQsIGNvbnN0IFRleHRSdW4mIHJ1biwgY29uc3QKICAgICByZXR1cm4gd2lkdGhP
ZkRyYXduVGV4dDsKIH0KIAotdm9pZCBGb250OjpkcmF3RW1waGFzaXNNYXJrc0ZvckNvbXBsZXhU
ZXh0KEdyYXBoaWNzQ29udGV4dCogLyogY29udGV4dCAqLywgY29uc3QgVGV4dFJ1biYgLyogcnVu
ICovLCBjb25zdCBBdG9taWNTdHJpbmcmIC8qIG1hcmsgKi8sIGNvbnN0IEZsb2F0UG9pbnQmIC8q
IHBvaW50ICovLCBpbnQgLyogZnJvbSAqLywgaW50IC8qIHRvICovKSBjb25zdAordm9pZCBGb250
OjpkcmF3RW1waGFzaXNNYXJrc0ZvckNvbXBsZXhUZXh0KEdyYXBoaWNzQ29udGV4dCogLyogY29u
dGV4dCAqLywgY29uc3QgVGV4dFJ1biYgLyogcnVuICovLCBjb25zdCBBdG9taWNTdHJpbmcmIC8q
IG1hcmsgKi8sIGNvbnN0IEZsb2F0UG9pbnQmIC8qIHBvaW50ICovLCB1bnNpZ25lZCAvKiBmcm9t
ICovLCB1bnNpZ25lZCAvKiB0byAqLykgY29uc3QKIHsKICAgICBub3RJbXBsZW1lbnRlZCgpOwog
fQpAQCAtMzIxLDcgKzMyMSw3IEBAIHN0YXRpYyBmbG9hdCBjdXJzb3JUb1goY29uc3QgRm9udCog
Zm9udCwgY29uc3QgVGV4dFJ1bkNvbXBvbmVudHMmIGNvbXBvbmVudHMsIGluCiB9CiAKIEZsb2F0
UmVjdCBGb250OjpzZWxlY3Rpb25SZWN0Rm9yQ29tcGxleFRleHQoY29uc3QgVGV4dFJ1biYgcnVu
LCBjb25zdCBGbG9hdFBvaW50JiBwdCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBpbnQgaCwgaW50IGZyb20sIGludCB0bykgY29uc3QKKyAgICBpbnQgaCwgdW5zaWduZWQg
ZnJvbSwgdW5zaWduZWQgdG8pIGNvbnN0CiB7CiAgICAgVGV4dFJ1bkNvbXBvbmVudHMgY29tcG9u
ZW50czsKICAgICBpbnQgdyA9IGdlbmVyYXRlQ29tcG9uZW50cygmY29tcG9uZW50cywgKnRoaXMs
IHJ1bik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvSW5saW5lVGV4dEJv
eC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvSW5saW5lVGV4dEJveC5jcHAKaW5kZXgg
YWE0NGRjZTdjNGIwMzJjMDQ1ZGRjZjdjMmFlMWVjZTFmYzQzNTRkMS4uMTZhNmUzZGEwZTBkYTI2
NGVmYTc3MmVjOGZjZDQ1OTlmYTZiNWNmZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL0lubGluZVRleHRCb3guY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9J
bmxpbmVUZXh0Qm94LmNwcApAQCAtMTk2LDEwICsxOTYsMTIgQEAgTGF5b3V0VW5pdCBJbmxpbmVU
ZXh0Qm94OjpzZWxlY3Rpb25IZWlnaHQoKSBjb25zdAogICAgIHJldHVybiByb290KCkuc2VsZWN0
aW9uSGVpZ2h0KCk7CiB9CiAKLWJvb2wgSW5saW5lVGV4dEJveDo6aXNTZWxlY3RlZChpbnQgc3Rh
cnRQb3MsIGludCBlbmRQb3MpIGNvbnN0Citib29sIElubGluZVRleHRCb3g6OmlzU2VsZWN0ZWQo
dW5zaWduZWQgc3RhcnRQb3MsIHVuc2lnbmVkIGVuZFBvcykgY29uc3QKIHsKLSAgICBpbnQgc1Bv
cyA9IHN0ZDo6bWF4KHN0YXJ0UG9zIC0gbV9zdGFydCwgMCk7Ci0gICAgaW50IGVQb3MgPSBzdGQ6
Om1pbihlbmRQb3MgLSBtX3N0YXJ0LCBzdGF0aWNfY2FzdDxpbnQ+KG1fbGVuKSk7CisgICAgdW5z
aWduZWQgc1BvcyA9IHN0YXJ0UG9zID4gbV9zdGFydCA/IHN0YXJ0UG9zIC0gbV9zdGFydCA6IDA7
CisgICAgaWYgKGVuZFBvcyA8IG1fc3RhcnQpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB1
bnNpZ25lZCBlUG9zID0gc3RkOjptaW4oZW5kUG9zIC0gbV9zdGFydCwgc3RhdGljX2Nhc3Q8dW5z
aWduZWQ+KG1fbGVuKSk7CiAgICAgcmV0dXJuIChzUG9zIDwgZVBvcyk7CiB9CiAKQEAgLTIwNywx
MCArMjA5LDEzIEBAIFJlbmRlck9iamVjdDo6U2VsZWN0aW9uU3RhdGUgSW5saW5lVGV4dEJveDo6
c2VsZWN0aW9uU3RhdGUoKQogewogICAgIFJlbmRlck9iamVjdDo6U2VsZWN0aW9uU3RhdGUgc3Rh
dGUgPSByZW5kZXJlcigpLnNlbGVjdGlvblN0YXRlKCk7CiAgICAgaWYgKHN0YXRlID09IFJlbmRl
ck9iamVjdDo6U2VsZWN0aW9uU3RhcnQgfHwgc3RhdGUgPT0gUmVuZGVyT2JqZWN0OjpTZWxlY3Rp
b25FbmQgfHwgc3RhdGUgPT0gUmVuZGVyT2JqZWN0OjpTZWxlY3Rpb25Cb3RoKSB7Ci0gICAgICAg
IGludCBzdGFydFBvcywgZW5kUG9zOwotICAgICAgICByZW5kZXJlcigpLnNlbGVjdGlvblN0YXJ0
RW5kKHN0YXJ0UG9zLCBlbmRQb3MpOworICAgICAgICBpbnQgaW5pdGlhbFN0YXJ0UG9zLCBpbml0
aWFsRW5kUG9zOworICAgICAgICByZW5kZXJlcigpLnNlbGVjdGlvblN0YXJ0RW5kKGluaXRpYWxT
dGFydFBvcywgaW5pdGlhbEVuZFBvcyk7CisgICAgICAgIEFTU0VSVChpbml0aWFsU3RhcnRQb3Mg
Pj0gMCAmJiBpbml0aWFsRW5kUG9zID49IDApOworICAgICAgICB1bnNpZ25lZCBzdGFydFBvcyA9
IGluaXRpYWxTdGFydFBvczsKKyAgICAgICAgdW5zaWduZWQgZW5kUG9zID0gaW5pdGlhbEVuZFBv
czsKICAgICAgICAgLy8gVGhlIHBvc2l0aW9uIGFmdGVyIGEgaGFyZCBsaW5lIGJyZWFrIGlzIGNv
bnNpZGVyZWQgdG8gYmUgcGFzdCBpdHMgZW5kLgotICAgICAgICBpbnQgbGFzdFNlbGVjdGFibGUg
PSBzdGFydCgpICsgbGVuKCkgLSAoaXNMaW5lQnJlYWsoKSA/IDEgOiAwKTsKKyAgICAgICAgdW5z
aWduZWQgbGFzdFNlbGVjdGFibGUgPSBzdGFydCgpICsgbGVuKCkgLSAoaXNMaW5lQnJlYWsoKSA/
IDEgOiAwKTsKIAogICAgICAgICBib29sIHN0YXJ0ID0gKHN0YXRlICE9IFJlbmRlck9iamVjdDo6
U2VsZWN0aW9uRW5kICYmIHN0YXJ0UG9zID49IG1fc3RhcnQgJiYgc3RhcnRQb3MgPCBtX3N0YXJ0
ICsgbV9sZW4pOwogICAgICAgICBib29sIGVuZCA9IChzdGF0ZSAhPSBSZW5kZXJPYmplY3Q6OlNl
bGVjdGlvblN0YXJ0ICYmIGVuZFBvcyA+IG1fc3RhcnQgJiYgZW5kUG9zIDw9IGxhc3RTZWxlY3Rh
YmxlKTsKQEAgLTIzMSw3ICsyMzYsNyBAQCBSZW5kZXJPYmplY3Q6OlNlbGVjdGlvblN0YXRlIElu
bGluZVRleHRCb3g6OnNlbGVjdGlvblN0YXRlKCkKICAgICBpZiAobV90cnVuY2F0aW9uICE9IGNO
b1RydW5jYXRpb24gJiYgcm9vdCgpLmVsbGlwc2lzQm94KCkpIHsKICAgICAgICAgRWxsaXBzaXNC
b3gqIGVsbGlwc2lzID0gcm9vdCgpLmVsbGlwc2lzQm94KCk7CiAgICAgICAgIGlmIChzdGF0ZSAh
PSBSZW5kZXJPYmplY3Q6OlNlbGVjdGlvbk5vbmUpIHsKLSAgICAgICAgICAgIGludCBzdGFydCwg
ZW5kOworICAgICAgICAgICAgdW5zaWduZWQgc3RhcnQsIGVuZDsKICAgICAgICAgICAgIHNlbGVj
dGlvblN0YXJ0RW5kKHN0YXJ0LCBlbmQpOwogICAgICAgICAgICAgLy8gVGhlIGVsbGlwc2lzIHNo
b3VsZCBiZSBjb25zaWRlcmVkIHRvIGJlIHNlbGVjdGVkIGlmIHRoZSBlbmQgb2YKICAgICAgICAg
ICAgIC8vIHRoZSBzZWxlY3Rpb24gaXMgcGFzdCB0aGUgYmVnaW5uaW5nIG9mIHRoZSB0cnVuY2F0
aW9uIGFuZCB0aGUKQEAgLTI0Niw3ICsyNTEsNyBAQCBSZW5kZXJPYmplY3Q6OlNlbGVjdGlvblN0
YXRlIElubGluZVRleHRCb3g6OnNlbGVjdGlvblN0YXRlKCkKICAgICByZXR1cm4gc3RhdGU7CiB9
CiAKLXN0YXRpYyB2b2lkIGFkanVzdENoYXJhY3RlcnNBbmRMZW5ndGhGb3JIeXBoZW4oQnVmZmVy
Rm9yQXBwZW5kaW5nSHlwaGVuJiBjaGFyYWN0ZXJzV2l0aEh5cGhlbiwgY29uc3QgUmVuZGVyU3R5
bGUmIHN0eWxlLCBTdHJpbmcmIHN0cmluZywgaW50JiBsZW5ndGgpCitzdGF0aWMgdm9pZCBhZGp1
c3RDaGFyYWN0ZXJzQW5kTGVuZ3RoRm9ySHlwaGVuKEJ1ZmZlckZvckFwcGVuZGluZ0h5cGhlbiYg
Y2hhcmFjdGVyc1dpdGhIeXBoZW4sIGNvbnN0IFJlbmRlclN0eWxlJiBzdHlsZSwgU3RyaW5nJiBz
dHJpbmcsIHVuc2lnbmVkJiBsZW5ndGgpCiB7CiAgICAgY29uc3QgQXRvbWljU3RyaW5nJiBoeXBo
ZW5TdHJpbmcgPSBzdHlsZS5oeXBoZW5TdHJpbmcoKTsKICAgICBjaGFyYWN0ZXJzV2l0aEh5cGhl
bi5yZXNlcnZlQ2FwYWNpdHkobGVuZ3RoICsgaHlwaGVuU3RyaW5nLmxlbmd0aCgpKTsKQEAgLTI2
NiwxMCArMjcxLDE0IEBAIHN0YXRpYyBjb25zdCBGb250JiBmb250VG9Vc2UoY29uc3QgUmVuZGVy
U3R5bGUmIHN0eWxlLCBjb25zdCBSZW5kZXJUZXh0JiByZW5kZXJlCiAgICAgcmV0dXJuIHN0eWxl
LmZvbnQoKTsKIH0KIAotTGF5b3V0UmVjdCBJbmxpbmVUZXh0Qm94Ojpsb2NhbFNlbGVjdGlvblJl
Y3QoaW50IHN0YXJ0UG9zLCBpbnQgZW5kUG9zKSBjb25zdAorTGF5b3V0UmVjdCBJbmxpbmVUZXh0
Qm94Ojpsb2NhbFNlbGVjdGlvblJlY3QodW5zaWduZWQgc3RhcnRQb3MsIHVuc2lnbmVkIGVuZFBv
cykgY29uc3QKIHsKLSAgICBpbnQgc1BvcyA9IHN0ZDo6bWF4KHN0YXJ0UG9zIC0gbV9zdGFydCwg
MCk7Ci0gICAgaW50IGVQb3MgPSBzdGQ6Om1pbihlbmRQb3MgLSBtX3N0YXJ0LCAoaW50KW1fbGVu
KTsKKyAgICB1bnNpZ25lZCBzUG9zID0gc3RhcnRQb3MgPiBtX3N0YXJ0ID8gc3RhcnRQb3MgLSBt
X3N0YXJ0IDogMDsKKyAgICAKKyAgICBpZiAoZW5kUG9zIDwgbV9zdGFydCkKKyAgICAgICAgcmV0
dXJuIExheW91dFJlY3QoKTsKKworICAgIHVuc2lnbmVkIGVQb3MgPSBzdGQ6Om1pbihlbmRQb3Mg
LSBtX3N0YXJ0LCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4obV9sZW4pKTsKICAgICAKICAgICBpZiAo
c1BvcyA+IGVQb3MpCiAgICAgICAgIHJldHVybiBMYXlvdXRSZWN0KCk7CkBAIC0yODQsMTIgKzI5
MywxMCBAQCBMYXlvdXRSZWN0IElubGluZVRleHRCb3g6OmxvY2FsU2VsZWN0aW9uUmVjdChpbnQg
c3RhcnRQb3MsIGludCBlbmRQb3MpIGNvbnN0CiAgICAgQnVmZmVyRm9yQXBwZW5kaW5nSHlwaGVu
IGNoYXJhY3RlcnNXaXRoSHlwaGVuOwogICAgIGJvb2wgcmVzcGVjdEh5cGhlbiA9IGVQb3MgPT0g
bV9sZW4gJiYgaGFzSHlwaGVuKCk7CiAgICAgVGV4dFJ1biB0ZXh0UnVuID0gY29uc3RydWN0VGV4
dFJ1bihsaW5lU3R5bGUsIGZvbnQsIHJlc3BlY3RIeXBoZW4gPyAmY2hhcmFjdGVyc1dpdGhIeXBo
ZW4gOiAwKTsKLSAgICBpZiAocmVzcGVjdEh5cGhlbikKLSAgICAgICAgZW5kUG9zID0gdGV4dFJ1
bi5sZW5ndGgoKTsKIAogICAgIExheW91dFJlY3Qgc2VsZWN0aW9uUmVjdCA9IExheW91dFJlY3Qo
TGF5b3V0UG9pbnQobG9naWNhbExlZnQoKSwgc2VsZWN0aW9uVG9wKSwgTGF5b3V0U2l6ZShtX2xv
Z2ljYWxXaWR0aCwgc2VsZWN0aW9uSGVpZ2h0KSk7CiAgICAgLy8gQXZvaWQgY29tcHV0aW5nIHRo
ZSBmb250IHdpZHRoIHdoZW4gdGhlIGVudGlyZSBsaW5lIGJveCBpcyBzZWxlY3RlZCBhcyBhbiBv
cHRpbWl6YXRpb24uCi0gICAgaWYgKHNQb3MgfHwgZVBvcyAhPSBzdGF0aWNfY2FzdDxpbnQ+KG1f
bGVuKSkKKyAgICBpZiAoc1BvcyB8fCBlUG9zICE9IG1fbGVuKQogICAgICAgICBmb250LmFkanVz
dFNlbGVjdGlvblJlY3RGb3JUZXh0KHRleHRSdW4sIHNlbGVjdGlvblJlY3QsIHNQb3MsIGVQb3Mp
OwogICAgIEludFJlY3Qgc25hcHBlZFNlbGVjdGlvblJlY3QgPSBlbmNsb3NpbmdJbnRSZWN0KHNl
bGVjdGlvblJlY3QpOwogICAgIExheW91dFVuaXQgbG9naWNhbFdpZHRoID0gc25hcHBlZFNlbGVj
dGlvblJlY3Qud2lkdGgoKTsKQEAgLTYwNiwxNSArNjEzLDE2IEBAIHZvaWQgSW5saW5lVGV4dEJv
eDo6cGFpbnQoUGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0IExheW91dFBvaW50JiBwYWludE9m
ZnNldCwKICAgICB9CiAKICAgICAvLyAyLiBOb3cgcGFpbnQgdGhlIGZvcmVncm91bmQsIGluY2x1
ZGluZyB0ZXh0IGFuZCBkZWNvcmF0aW9ucyBsaWtlIHVuZGVybGluZS9vdmVybGluZSAoaW4gcXVp
cmtzIG1vZGUgb25seSkuCi0gICAgaW50IGxlbmd0aCA9IG1fbGVuOwotICAgIGludCBtYXhpbXVt
TGVuZ3RoOworICAgIHVuc2lnbmVkIGxlbmd0aCA9IG1fbGVuOworICAgIHVuc2lnbmVkIG1heGlt
dW1MZW5ndGg7CiAgICAgU3RyaW5nIHN0cmluZzsKICAgICBpZiAoIWNvbWJpbmVkVGV4dCkgewog
ICAgICAgICBzdHJpbmcgPSByZW5kZXJlcigpLnRleHQoKTsKLSAgICAgICAgaWYgKHN0YXRpY19j
YXN0PHVuc2lnbmVkPihsZW5ndGgpICE9IHN0cmluZy5sZW5ndGgoKSB8fCBtX3N0YXJ0KSB7Ci0g
ICAgICAgICAgICBBU1NFUlRfV0lUSF9TRUNVUklUWV9JTVBMSUNBVElPTihzdGF0aWNfY2FzdDx1
bnNpZ25lZD4obV9zdGFydCArIGxlbmd0aCkgPD0gc3RyaW5nLmxlbmd0aCgpKTsKKyAgICAgICAg
aWYgKGxlbmd0aCAhPSBzdHJpbmcubGVuZ3RoKCkgfHwgbV9zdGFydCkgeworICAgICAgICAgICAg
QVNTRVJUX1dJVEhfU0VDVVJJVFlfSU1QTElDQVRJT04obV9zdGFydCArIGxlbmd0aCA8PSBzdHJp
bmcubGVuZ3RoKCkpOwogICAgICAgICAgICAgc3RyaW5nID0gc3RyaW5nLnN1YnN0cmluZ1NoYXJp
bmdJbXBsKG1fc3RhcnQsIGxlbmd0aCk7CiAgICAgICAgIH0KKyAgICAgICAgQVNTRVJUKHJlbmRl
cmVyKCkudGV4dExlbmd0aCgpID49IG1fc3RhcnQpOwogICAgICAgICBtYXhpbXVtTGVuZ3RoID0g
cmVuZGVyZXIoKS50ZXh0TGVuZ3RoKCkgLSBtX3N0YXJ0OwogICAgIH0gZWxzZSB7CiAgICAgICAg
IGNvbWJpbmVkVGV4dC0+Z2V0U3RyaW5nVG9SZW5kZXIobV9zdGFydCwgc3RyaW5nLCBsZW5ndGgp
OwpAQCAtNjI2LDE0ICs2MzQsMTQgQEAgdm9pZCBJbmxpbmVUZXh0Qm94OjpwYWludChQYWludElu
Zm8mIHBhaW50SW5mbywgY29uc3QgTGF5b3V0UG9pbnQmIHBhaW50T2Zmc2V0LAogICAgIGlmICho
YXNIeXBoZW4oKSkKICAgICAgICAgbGVuZ3RoID0gdGV4dFJ1bi5sZW5ndGgoKTsKIAotICAgIGlu
dCBzUG9zID0gMDsKLSAgICBpbnQgZVBvcyA9IDA7CisgICAgdW5zaWduZWQgc1BvcyA9IDA7Cisg
ICAgdW5zaWduZWQgZVBvcyA9IDA7CiAgICAgaWYgKGhhdmVTZWxlY3Rpb24gJiYgKHBhaW50U2Vs
ZWN0ZWRUZXh0T25seSB8fCBwYWludFNlbGVjdGVkVGV4dFNlcGFyYXRlbHkpKQogICAgICAgICBz
ZWxlY3Rpb25TdGFydEVuZChzUG9zLCBlUG9zKTsKIAogICAgIGlmIChtX3RydW5jYXRpb24gIT0g
Y05vVHJ1bmNhdGlvbikgewotICAgICAgICBzUG9zID0gc3RkOjptaW48aW50PihzUG9zLCBtX3Ry
dW5jYXRpb24pOwotICAgICAgICBlUG9zID0gc3RkOjptaW48aW50PihlUG9zLCBtX3RydW5jYXRp
b24pOworICAgICAgICBzUG9zID0gc3RkOjptaW4oc1Bvcywgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+
KG1fdHJ1bmNhdGlvbikpOworICAgICAgICBlUG9zID0gc3RkOjptaW4oZVBvcywgc3RhdGljX2Nh
c3Q8dW5zaWduZWQ+KG1fdHJ1bmNhdGlvbikpOwogICAgICAgICBsZW5ndGggPSBtX3RydW5jYXRp
b247CiAgICAgfQogCkBAIC02OTMsMjIgKzcwMSwyNyBAQCB2b2lkIElubGluZVRleHRCb3g6OnBh
aW50KFBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBMYXlvdXRQb2ludCYgcGFpbnRPZmZzZXQs
CiAgICAgICAgIGNvbnRleHQtPmNvbmNhdENUTShyb3RhdGlvbihib3hSZWN0LCBDb3VudGVyY2xv
Y2t3aXNlKSk7CiB9CiAKLXZvaWQgSW5saW5lVGV4dEJveDo6c2VsZWN0aW9uU3RhcnRFbmQoaW50
JiBzUG9zLCBpbnQmIGVQb3MpCit2b2lkIElubGluZVRleHRCb3g6OnNlbGVjdGlvblN0YXJ0RW5k
KHVuc2lnbmVkJiBzUG9zLCB1bnNpZ25lZCYgZVBvcykKIHsKLSAgICBpbnQgc3RhcnRQb3MsIGVu
ZFBvczsKKyAgICB1bnNpZ25lZCBzdGFydFBvcywgZW5kUG9zOwogICAgIGlmIChyZW5kZXJlcigp
LnNlbGVjdGlvblN0YXRlKCkgPT0gUmVuZGVyT2JqZWN0OjpTZWxlY3Rpb25JbnNpZGUpIHsKICAg
ICAgICAgc3RhcnRQb3MgPSAwOwogICAgICAgICBlbmRQb3MgPSByZW5kZXJlcigpLnRleHRMZW5n
dGgoKTsKICAgICB9IGVsc2UgewotICAgICAgICByZW5kZXJlcigpLnNlbGVjdGlvblN0YXJ0RW5k
KHN0YXJ0UG9zLCBlbmRQb3MpOworICAgICAgICBpbnQgb3JpZ2luYWxTdGFydFBvcywgb3JpZ2lu
YWxFbmRQb3M7CisgICAgICAgIHJlbmRlcmVyKCkuc2VsZWN0aW9uU3RhcnRFbmQob3JpZ2luYWxT
dGFydFBvcywgb3JpZ2luYWxFbmRQb3MpOworICAgICAgICBBU1NFUlQob3JpZ2luYWxTdGFydFBv
cyA+PSAwICYmIG9yaWdpbmFsRW5kUG9zID49IDApOworICAgICAgICBzdGFydFBvcyA9IG9yaWdp
bmFsU3RhcnRQb3M7CisgICAgICAgIGVuZFBvcyA9IG9yaWdpbmFsRW5kUG9zOwogICAgICAgICBp
ZiAocmVuZGVyZXIoKS5zZWxlY3Rpb25TdGF0ZSgpID09IFJlbmRlck9iamVjdDo6U2VsZWN0aW9u
U3RhcnQpCiAgICAgICAgICAgICBlbmRQb3MgPSByZW5kZXJlcigpLnRleHRMZW5ndGgoKTsKICAg
ICAgICAgZWxzZSBpZiAocmVuZGVyZXIoKS5zZWxlY3Rpb25TdGF0ZSgpID09IFJlbmRlck9iamVj
dDo6U2VsZWN0aW9uRW5kKQogICAgICAgICAgICAgc3RhcnRQb3MgPSAwOwogICAgIH0KLQotICAg
IHNQb3MgPSBzdGQ6Om1heChzdGFydFBvcyAtIG1fc3RhcnQsIDApOwotICAgIGVQb3MgPSBzdGQ6
Om1pbihlbmRQb3MgLSBtX3N0YXJ0LCAoaW50KW1fbGVuKTsKKyAgICAKKyAgICBzUG9zID0gc3Rh
cnRQb3MgPiBtX3N0YXJ0ID8gc3RhcnRQb3MgLSBtX3N0YXJ0IDogMDsKKyAgICBlUG9zID0gZW5k
UG9zID4gbV9zdGFydCA/IGVuZFBvcyAtIG1fc3RhcnQgOiAwOworICAgIGVQb3MgPSBzdGQ6Om1p
bihlUG9zLCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4obV9sZW4pKTsKIH0KIAogdm9pZCBJbmxpbmVU
ZXh0Qm94OjpwYWludFNlbGVjdGlvbihHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IEZs
b2F0UG9pbnQmIGJveE9yaWdpbiwgY29uc3QgUmVuZGVyU3R5bGUmIHN0eWxlLCBjb25zdCBGb250
JiBmb250LCBDb2xvciB0ZXh0Q29sb3IpCkBAIC03MTgsNyArNzMxLDcgQEAgdm9pZCBJbmxpbmVU
ZXh0Qm94OjpwYWludFNlbGVjdGlvbihHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IEZs
b2F0UG9pbnQmIGIKICAgICAgICAgcmV0dXJuOwogCiAgICAgLy8gU2VlIGlmIHdlIGhhdmUgYSBz
ZWxlY3Rpb24gdG8gcGFpbnQgYXQgYWxsLgotICAgIGludCBzUG9zLCBlUG9zOworICAgIHVuc2ln
bmVkIHNQb3MsIGVQb3M7CiAgICAgc2VsZWN0aW9uU3RhcnRFbmQoc1BvcywgZVBvcyk7CiAgICAg
aWYgKHNQb3MgPj0gZVBvcykKICAgICAgICAgcmV0dXJuOwpAQCAtNzM3LDcgKzc1MCw3IEBAIHZv
aWQgSW5saW5lVGV4dEJveDo6cGFpbnRTZWxlY3Rpb24oR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0
LCBjb25zdCBGbG9hdFBvaW50JiBiCiAgICAgCiAgICAgLy8gSWYgdGhlIHRleHQgaXMgdHJ1bmNh
dGVkLCBsZXQgdGhlIHRoaW5nIGJlaW5nIHBhaW50ZWQgaW4gdGhlIHRydW5jYXRpb24KICAgICAv
LyBkcmF3IGl0cyBvd24gaGlnaGxpZ2h0LgotICAgIGludCBsZW5ndGggPSBtX3RydW5jYXRpb24g
IT0gY05vVHJ1bmNhdGlvbiA/IG1fdHJ1bmNhdGlvbiA6IG1fbGVuOworICAgIHVuc2lnbmVkIGxl
bmd0aCA9IG1fdHJ1bmNhdGlvbiAhPSBjTm9UcnVuY2F0aW9uID8gbV90cnVuY2F0aW9uIDogbV9s
ZW47CiAgICAgU3RyaW5nIHN0cmluZyA9IHJlbmRlcmVyKCkudGV4dCgpOwogCiAgICAgaWYgKHN0
cmluZy5sZW5ndGgoKSAhPSBzdGF0aWNfY2FzdDx1bnNpZ25lZD4obGVuZ3RoKSB8fCBtX3N0YXJ0
KSB7CkBAIC03NDcsNiArNzYwLDcgQEAgdm9pZCBJbmxpbmVUZXh0Qm94OjpwYWludFNlbGVjdGlv
bihHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IEZsb2F0UG9pbnQmIGIKIAogICAgIEJ1
ZmZlckZvckFwcGVuZGluZ0h5cGhlbiBjaGFyYWN0ZXJzV2l0aEh5cGhlbjsKICAgICBib29sIHJl
c3BlY3RIeXBoZW4gPSBlUG9zID09IGxlbmd0aCAmJiBoYXNIeXBoZW4oKTsKKyAgICBBU1NFUlQo
cmVuZGVyZXIoKS50ZXh0TGVuZ3RoKCkgPj0gbV9zdGFydCk7CiAgICAgVGV4dFJ1biB0ZXh0UnVu
ID0gY29uc3RydWN0VGV4dFJ1bihzdHlsZSwgZm9udCwgc3RyaW5nLCByZW5kZXJlcigpLnRleHRM
ZW5ndGgoKSAtIG1fc3RhcnQsIHJlc3BlY3RIeXBoZW4gPyAmY2hhcmFjdGVyc1dpdGhIeXBoZW4g
OiAwKTsKICAgICBpZiAocmVzcGVjdEh5cGhlbikKICAgICAgICAgZVBvcyA9IHRleHRSdW4ubGVu
Z3RoKCk7CkBAIC03NzAsMTEgKzc4NCwxMiBAQCB2b2lkIElubGluZVRleHRCb3g6OnBhaW50U2Vs
ZWN0aW9uKEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgY29uc3QgRmxvYXRQb2ludCYgYgogI2Vu
ZGlmCiB9CiAKLXZvaWQgSW5saW5lVGV4dEJveDo6cGFpbnRDb21wb3NpdGlvbkJhY2tncm91bmQo
R3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBjb25zdCBGbG9hdFBvaW50JiBib3hPcmlnaW4sIGNv
bnN0IFJlbmRlclN0eWxlJiBzdHlsZSwgY29uc3QgRm9udCYgZm9udCwgaW50IHN0YXJ0UG9zLCBp
bnQgZW5kUG9zKQordm9pZCBJbmxpbmVUZXh0Qm94OjpwYWludENvbXBvc2l0aW9uQmFja2dyb3Vu
ZChHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IEZsb2F0UG9pbnQmIGJveE9yaWdpbiwg
Y29uc3QgUmVuZGVyU3R5bGUmIHN0eWxlLCBjb25zdCBGb250JiBmb250LCB1bnNpZ25lZCBzdGFy
dFBvcywgdW5zaWduZWQgZW5kUG9zKQogewotICAgIGludCBvZmZzZXQgPSBtX3N0YXJ0OwotICAg
IGludCBzUG9zID0gc3RkOjptYXgoc3RhcnRQb3MgLSBvZmZzZXQsIDApOwotICAgIGludCBlUG9z
ID0gc3RkOjptaW4oZW5kUG9zIC0gb2Zmc2V0LCAoaW50KW1fbGVuKTsKKyAgICB1bnNpZ25lZCBv
ZmZzZXQgPSBtX3N0YXJ0OworICAgIHVuc2lnbmVkIHNQb3MgPSBzdGFydFBvcyA+IG9mZnNldCA/
IHN0YXJ0UG9zIC0gb2Zmc2V0IDogMDsKKyAgICBBU1NFUlQoZW5kUG9zID49IG9mZnNldCk7Cisg
ICAgdW5zaWduZWQgZVBvcyA9IHN0ZDo6bWluKGVuZFBvcyAtIG9mZnNldCwgc3RhdGljX2Nhc3Q8
dW5zaWduZWQ+KG1fbGVuKSk7CiAKICAgICBpZiAoc1BvcyA+PSBlUG9zKQogICAgICAgICByZXR1
cm47CkBAIC0xMTEzLDcgKzExMjgsNyBAQCB2b2lkIElubGluZVRleHRCb3g6OnBhaW50RG9jdW1l
bnRNYXJrZXIoR3JhcGhpY3NDb250ZXh0KiBwdCwgY29uc3QgRmxvYXRQb2ludCYgYgogCiAgICAg
Ly8gRGV0ZXJtaW5lIHdoZXRoZXIgd2UgbmVlZCB0byBtZWFzdXJlIHRleHQKICAgICBib29sIG1h
cmtlclNwYW5zV2hvbGVCb3ggPSB0cnVlOwotICAgIGlmIChtX3N0YXJ0IDw9IChpbnQpbWFya2Vy
LT5zdGFydE9mZnNldCgpKQorICAgIGlmIChtX3N0YXJ0IDw9IG1hcmtlci0+c3RhcnRPZmZzZXQo
KSkKICAgICAgICAgbWFya2VyU3BhbnNXaG9sZUJveCA9IGZhbHNlOwogICAgIGlmICgoZW5kKCkg
KyAxKSAhPSBtYXJrZXItPmVuZE9mZnNldCgpKSAvLyBlbmQgcG9pbnRzIGF0IHRoZSBsYXN0IGNo
YXIsIG5vdCBwYXN0IGl0CiAgICAgICAgIG1hcmtlclNwYW5zV2hvbGVCb3ggPSBmYWxzZTsKQEAg
LTExMjIsMTEgKzExMzcsMTIgQEAgdm9pZCBJbmxpbmVUZXh0Qm94OjpwYWludERvY3VtZW50TWFy
a2VyKEdyYXBoaWNzQ29udGV4dCogcHQsIGNvbnN0IEZsb2F0UG9pbnQmIGIKIAogICAgIGJvb2wg
aXNEaWN0YXRpb25NYXJrZXIgPSBtYXJrZXItPnR5cGUoKSA9PSBEb2N1bWVudE1hcmtlcjo6RGlj
dGF0aW9uQWx0ZXJuYXRpdmVzOwogICAgIGlmICghbWFya2VyU3BhbnNXaG9sZUJveCB8fCBncmFt
bWFyIHx8IGlzRGljdGF0aW9uTWFya2VyKSB7Ci0gICAgICAgIGludCBzdGFydFBvc2l0aW9uID0g
c3RkOjptYXg8aW50PihtYXJrZXItPnN0YXJ0T2Zmc2V0KCkgLSBtX3N0YXJ0LCAwKTsKLSAgICAg
ICAgaW50IGVuZFBvc2l0aW9uID0gc3RkOjptaW48aW50PihtYXJrZXItPmVuZE9mZnNldCgpIC0g
bV9zdGFydCwgbV9sZW4pOworICAgICAgICB1bnNpZ25lZCBzdGFydFBvc2l0aW9uID0gbWFya2Vy
LT5zdGFydE9mZnNldCgpID4gbV9zdGFydCA/IG1hcmtlci0+c3RhcnRPZmZzZXQoKSAtIG1fc3Rh
cnQgOiAwOworICAgICAgICBBU1NFUlQobWFya2VyLT5lbmRPZmZzZXQoKSA+PSBtX3N0YXJ0KTsK
KyAgICAgICAgdW5zaWduZWQgZW5kUG9zaXRpb24gPSBzdGQ6Om1pbihtYXJrZXItPmVuZE9mZnNl
dCgpIC0gbV9zdGFydCwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KG1fbGVuKSk7CiAgICAgICAgIAog
ICAgICAgICBpZiAobV90cnVuY2F0aW9uICE9IGNOb1RydW5jYXRpb24pCi0gICAgICAgICAgICBl
bmRQb3NpdGlvbiA9IHN0ZDo6bWluPGludD4oZW5kUG9zaXRpb24sIG1fdHJ1bmNhdGlvbik7Cisg
ICAgICAgICAgICBlbmRQb3NpdGlvbiA9IHN0ZDo6bWluKGVuZFBvc2l0aW9uLCBzdGF0aWNfY2Fz
dDx1bnNpZ25lZD4obV90cnVuY2F0aW9uKSk7CiAKICAgICAgICAgLy8gQ2FsY3VsYXRlIHN0YXJ0
ICYgd2lkdGgKICAgICAgICAgaW50IGRlbHRhWSA9IHJlbmRlcmVyKCkuc3R5bGUoKS5pc0ZsaXBw
ZWRMaW5lc1dyaXRpbmdNb2RlKCkgPyBzZWxlY3Rpb25Cb3R0b20oKSAtIGxvZ2ljYWxCb3R0b20o
KSA6IGxvZ2ljYWxUb3AoKSAtIHNlbGVjdGlvblRvcCgpOwpAQCAtMTE3Myw4ICsxMTg5LDkgQEAg
dm9pZCBJbmxpbmVUZXh0Qm94OjpwYWludFRleHRNYXRjaE1hcmtlcihHcmFwaGljc0NvbnRleHQq
IGNvbnRleHQsIGNvbnN0IEZsb2F0UG8KIHsKICAgICBMYXlvdXRVbml0IHNlbGVjdGlvbkhlaWdo
dCA9IHRoaXMtPnNlbGVjdGlvbkhlaWdodCgpOwogCi0gICAgaW50IHNQb3MgPSBzdGQ6Om1heCht
YXJrZXItPnN0YXJ0T2Zmc2V0KCkgLSBtX3N0YXJ0LCAodW5zaWduZWQpMCk7Ci0gICAgaW50IGVQ
b3MgPSBzdGQ6Om1pbihtYXJrZXItPmVuZE9mZnNldCgpIC0gbV9zdGFydCwgKHVuc2lnbmVkKW1f
bGVuKTsKKyAgICB1bnNpZ25lZCBzUG9zID0gbWFya2VyLT5zdGFydE9mZnNldCgpID4gbV9zdGFy
dCA/IG1hcmtlci0+c3RhcnRPZmZzZXQoKSAtIG1fc3RhcnQgOiAwOworICAgIEFTU0VSVChtYXJr
ZXItPmVuZE9mZnNldCgpID49IG1fc3RhcnQpOworICAgIHVuc2lnbmVkIGVQb3MgPSBzdGQ6Om1p
bihtYXJrZXItPmVuZE9mZnNldCgpIC0gbV9zdGFydCwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KG1f
bGVuKSk7CiAgICAgVGV4dFJ1biBydW4gPSBjb25zdHJ1Y3RUZXh0UnVuKHN0eWxlLCBmb250KTsK
IAogICAgIC8vIEFsd2F5cyBjb21wdXRlIGFuZCBzdG9yZSB0aGUgcmVjdCBhc3NvY2lhdGVkIHdp
dGggdGhpcyBtYXJrZXIuIFRoZSBjb21wdXRlZCByZWN0IGlzIGluIGFic29sdXRlIGNvb3JkaW5h
dGVzLgpAQCAtMTIwNiw4ICsxMjIzLDkgQEAgdm9pZCBJbmxpbmVUZXh0Qm94Ojpjb21wdXRlUmVj
dEZvclJlcGxhY2VtZW50TWFya2VyKERvY3VtZW50TWFya2VyKiBtYXJrZXIsIGNvbnMKICAgICBM
YXlvdXRVbml0IHRvcCA9IHNlbGVjdGlvblRvcCgpOwogICAgIExheW91dFVuaXQgaCA9IHNlbGVj
dGlvbkhlaWdodCgpOwogICAgIAotICAgIGludCBzUG9zID0gc3RkOjptYXgobWFya2VyLT5zdGFy
dE9mZnNldCgpIC0gbV9zdGFydCwgKHVuc2lnbmVkKTApOwotICAgIGludCBlUG9zID0gc3RkOjpt
aW4obWFya2VyLT5lbmRPZmZzZXQoKSAtIG1fc3RhcnQsICh1bnNpZ25lZCltX2xlbik7CisgICAg
dW5zaWduZWQgc1BvcyA9IG1hcmtlci0+c3RhcnRPZmZzZXQoKSA+IG1fc3RhcnQgPyBtYXJrZXIt
PnN0YXJ0T2Zmc2V0KCkgLSBtX3N0YXJ0IDogMDsKKyAgICBBU1NFUlQobWFya2VyLT5lbmRPZmZz
ZXQoKSA+PSBtX3N0YXJ0KTsKKyAgICB1bnNpZ25lZCBlUG9zID0gc3RkOjptaW4obWFya2VyLT5l
bmRPZmZzZXQoKSAtIG1fc3RhcnQsICh1bnNpZ25lZCltX2xlbik7CiAgICAgVGV4dFJ1biBydW4g
PSBjb25zdHJ1Y3RUZXh0UnVuKHN0eWxlLCBmb250KTsKIAogICAgIC8vIENvbXB1dGUgYW5kIHN0
b3JlIHRoZSByZWN0IGFzc29jaWF0ZWQgd2l0aCB0aGlzIG1hcmtlci4KQEAgLTEzMTQsMTEgKzEz
MzIsMTEgQEAgdm9pZCBJbmxpbmVUZXh0Qm94OjpwYWludENvbXBvc2l0aW9uVW5kZXJsaW5lKEdy
YXBoaWNzQ29udGV4dCogY3R4LCBjb25zdCBGbG9hdFAKICAgICAgICAgc3RhcnQgPSByZW5kZXJl
cigpLndpZHRoKG1fc3RhcnQsIHBhaW50U3RhcnQgLSBtX3N0YXJ0LCB0ZXh0UG9zKCksIGlzRmly
c3RMaW5lKCkpOwogICAgIH0KICAgICBpZiAocGFpbnRFbmQgIT0gdW5kZXJsaW5lLmVuZE9mZnNl
dCkgeyAgICAgIC8vIGVuZCBwb2ludHMgYXQgdGhlIGxhc3QgY2hhciwgbm90IHBhc3QgaXQKLSAg
ICAgICAgcGFpbnRFbmQgPSBzdGQ6Om1pbihwYWludEVuZCwgKHVuc2lnbmVkKXVuZGVybGluZS5l
bmRPZmZzZXQpOworICAgICAgICBwYWludEVuZCA9IHN0ZDo6bWluKHBhaW50RW5kLCB1bmRlcmxp
bmUuZW5kT2Zmc2V0KTsKICAgICAgICAgdXNlV2hvbGVXaWR0aCA9IGZhbHNlOwogICAgIH0KICAg
ICBpZiAobV90cnVuY2F0aW9uICE9IGNOb1RydW5jYXRpb24pIHsKLSAgICAgICAgcGFpbnRFbmQg
PSBzdGQ6Om1pbihwYWludEVuZCwgKHVuc2lnbmVkKW1fc3RhcnQgKyBtX3RydW5jYXRpb24pOwor
ICAgICAgICBwYWludEVuZCA9IHN0ZDo6bWluKHBhaW50RW5kLCBtX3N0YXJ0ICsgbV90cnVuY2F0
aW9uKTsKICAgICAgICAgdXNlV2hvbGVXaWR0aCA9IGZhbHNlOwogICAgIH0KICAgICBpZiAoIXVz
ZVdob2xlV2lkdGgpIHsKQEAgLTEzNzksNyArMTM5Nyw3IEBAIGludCBJbmxpbmVUZXh0Qm94Ojpv
ZmZzZXRGb3JQb3NpdGlvbihmbG9hdCBsaW5lT2Zmc2V0LCBib29sIGluY2x1ZGVQYXJ0aWFsR2x5
cGhzCiAgICAgcmV0dXJuIGZvbnQub2Zmc2V0Rm9yUG9zaXRpb24oY29uc3RydWN0VGV4dFJ1bihs
aW5lU3R5bGUsIGZvbnQpLCBsaW5lT2Zmc2V0IC0gbG9naWNhbExlZnQoKSwgaW5jbHVkZVBhcnRp
YWxHbHlwaHMpOwogfQogCi1mbG9hdCBJbmxpbmVUZXh0Qm94Ojpwb3NpdGlvbkZvck9mZnNldChp
bnQgb2Zmc2V0KSBjb25zdAorZmxvYXQgSW5saW5lVGV4dEJveDo6cG9zaXRpb25Gb3JPZmZzZXQo
dW5zaWduZWQgb2Zmc2V0KSBjb25zdAogewogICAgIEFTU0VSVChvZmZzZXQgPj0gbV9zdGFydCk7
CiAgICAgQVNTRVJUKG9mZnNldCA8PSBtX3N0YXJ0ICsgbV9sZW4pOwpAQCAtMTM5MSw4ICsxNDA5
LDggQEAgZmxvYXQgSW5saW5lVGV4dEJveDo6cG9zaXRpb25Gb3JPZmZzZXQoaW50IG9mZnNldCkg
Y29uc3QKIAogICAgIGNvbnN0IFJlbmRlclN0eWxlJiBsaW5lU3R5bGUgPSB0aGlzLT5saW5lU3R5
bGUoKTsKICAgICBjb25zdCBGb250JiBmb250ID0gZm9udFRvVXNlKGxpbmVTdHlsZSwgcmVuZGVy
ZXIoKSk7Ci0gICAgaW50IGZyb20gPSAhaXNMZWZ0VG9SaWdodERpcmVjdGlvbigpID8gb2Zmc2V0
IC0gbV9zdGFydCA6IDA7Ci0gICAgaW50IHRvID0gIWlzTGVmdFRvUmlnaHREaXJlY3Rpb24oKSA/
IG1fbGVuIDogb2Zmc2V0IC0gbV9zdGFydDsKKyAgICB1bnNpZ25lZCBmcm9tID0gIWlzTGVmdFRv
UmlnaHREaXJlY3Rpb24oKSA/IG9mZnNldCAtIG1fc3RhcnQgOiAwOworICAgIHVuc2lnbmVkIHRv
ID0gIWlzTGVmdFRvUmlnaHREaXJlY3Rpb24oKSA/IG1fbGVuIDogb2Zmc2V0IC0gbV9zdGFydDsK
ICAgICAvLyBGSVhNRTogRG8gd2UgbmVlZCB0byBhZGQgcmlnaHRCZWFyaW5nIGhlcmU/CiAgICAg
TGF5b3V0UmVjdCBzZWxlY3Rpb25SZWN0ID0gTGF5b3V0UmVjdChsb2dpY2FsTGVmdCgpLCAwLCAw
LCAwKTsKICAgICBUZXh0UnVuIHJ1biA9IGNvbnN0cnVjdFRleHRSdW4obGluZVN0eWxlLCBmb250
KTsKQEAgLTE0MTAsMTMgKzE0MjgsMTQgQEAgVGV4dFJ1biBJbmxpbmVUZXh0Qm94Ojpjb25zdHJ1
Y3RUZXh0UnVuKGNvbnN0IFJlbmRlclN0eWxlJiBzdHlsZSwgY29uc3QgRm9udCYgZm8KIAogICAg
IGlmIChzdHJpbmcubGVuZ3RoKCkgIT0gbGVuZ3RoIHx8IHN0YXJ0UG9zKQogICAgICAgICBzdHJp
bmcgPSBzdHJpbmcuc3Vic3RyaW5nU2hhcmluZ0ltcGwoc3RhcnRQb3MsIGxlbmd0aCk7Ci0KKyAg
ICAKKyAgICBBU1NFUlQocmVuZGVyZXIoKS50ZXh0TGVuZ3RoKCkgPj0gc3RhcnRQb3MpOwogICAg
IHJldHVybiBjb25zdHJ1Y3RUZXh0UnVuKHN0eWxlLCBmb250LCBzdHJpbmcsIHJlbmRlcmVyKCku
dGV4dExlbmd0aCgpIC0gc3RhcnRQb3MsIGNoYXJhY3RlcnNXaXRoSHlwaGVuKTsKIH0KIAotVGV4
dFJ1biBJbmxpbmVUZXh0Qm94Ojpjb25zdHJ1Y3RUZXh0UnVuKGNvbnN0IFJlbmRlclN0eWxlJiBz
dHlsZSwgY29uc3QgRm9udCYgZm9udCwgU3RyaW5nIHN0cmluZywgaW50IG1heGltdW1MZW5ndGgs
IEJ1ZmZlckZvckFwcGVuZGluZ0h5cGhlbiogY2hhcmFjdGVyc1dpdGhIeXBoZW4pIGNvbnN0CitU
ZXh0UnVuIElubGluZVRleHRCb3g6OmNvbnN0cnVjdFRleHRSdW4oY29uc3QgUmVuZGVyU3R5bGUm
IHN0eWxlLCBjb25zdCBGb250JiBmb250LCBTdHJpbmcgc3RyaW5nLCB1bnNpZ25lZCBtYXhpbXVt
TGVuZ3RoLCBCdWZmZXJGb3JBcHBlbmRpbmdIeXBoZW4qIGNoYXJhY3RlcnNXaXRoSHlwaGVuKSBj
b25zdAogewotICAgIGludCBsZW5ndGggPSBzdHJpbmcubGVuZ3RoKCk7CisgICAgdW5zaWduZWQg
bGVuZ3RoID0gc3RyaW5nLmxlbmd0aCgpOwogCiAgICAgaWYgKGNoYXJhY3RlcnNXaXRoSHlwaGVu
KSB7CiAgICAgICAgIGFkanVzdENoYXJhY3RlcnNBbmRMZW5ndGhGb3JIeXBoZW4oKmNoYXJhY3Rl
cnNXaXRoSHlwaGVuLCBzdHlsZSwgc3RyaW5nLCBsZW5ndGgpOwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL0lubGluZVRleHRCb3guaCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9JbmxpbmVUZXh0Qm94LmgKaW5kZXggYzQyYjU0ZThkMmI3NTk0ZjhhYjlhNjc4OGY4OTc5
ZGZlNTZiODRiMC4uN2QzZjViNjZlZmQ4MzE5NTY0OGVmYjgyYmQzZGJhOTA1M2EyZDRmYyAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0lubGluZVRleHRCb3guaAorKysgYi9T
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvSW5saW5lVGV4dEJveC5oCkBAIC0xMTAsMTUgKzExMCwx
NSBAQCBwcml2YXRlOgogICAgIExheW91dFVuaXQgc2VsZWN0aW9uQm90dG9tKCkgY29uc3Q7CiAg
ICAgTGF5b3V0VW5pdCBzZWxlY3Rpb25IZWlnaHQoKSBjb25zdDsKIAotICAgIFRleHRSdW4gY29u
c3RydWN0VGV4dFJ1bihjb25zdCBSZW5kZXJTdHlsZSYsIGNvbnN0IEZvbnQmLCBCdWZmZXJGb3JB
cHBlbmRpbmdIeXBoZW4qID0gMCkgY29uc3Q7Ci0gICAgVGV4dFJ1biBjb25zdHJ1Y3RUZXh0UnVu
KGNvbnN0IFJlbmRlclN0eWxlJiwgY29uc3QgRm9udCYsIFN0cmluZywgaW50IG1heGltdW1MZW5n
dGgsIEJ1ZmZlckZvckFwcGVuZGluZ0h5cGhlbiogPSAwKSBjb25zdDsKKyAgICBUZXh0UnVuIGNv
bnN0cnVjdFRleHRSdW4oY29uc3QgUmVuZGVyU3R5bGUmLCBjb25zdCBGb250JiwgQnVmZmVyRm9y
QXBwZW5kaW5nSHlwaGVuKiA9IG51bGxwdHIpIGNvbnN0OworICAgIFRleHRSdW4gY29uc3RydWN0
VGV4dFJ1bihjb25zdCBSZW5kZXJTdHlsZSYsIGNvbnN0IEZvbnQmLCBTdHJpbmcsIHVuc2lnbmVk
IG1heGltdW1MZW5ndGgsIEJ1ZmZlckZvckFwcGVuZGluZ0h5cGhlbiogPSBudWxscHRyKSBjb25z
dDsKIAogcHVibGljOgogICAgIHZpcnR1YWwgRmxvYXRSZWN0IGNhbGN1bGF0ZUJvdW5kYXJpZXMo
KSBjb25zdCB7IHJldHVybiBGbG9hdFJlY3QoeCgpLCB5KCksIHdpZHRoKCksIGhlaWdodCgpKTsg
fQogCi0gICAgdmlydHVhbCBMYXlvdXRSZWN0IGxvY2FsU2VsZWN0aW9uUmVjdChpbnQgc3RhcnRQ
b3MsIGludCBlbmRQb3MpIGNvbnN0OwotICAgIGJvb2wgaXNTZWxlY3RlZChpbnQgc3RhcnRQb3Ms
IGludCBlbmRQb3MpIGNvbnN0OwotICAgIHZvaWQgc2VsZWN0aW9uU3RhcnRFbmQoaW50JiBzUG9z
LCBpbnQmIGVQb3MpOworICAgIHZpcnR1YWwgTGF5b3V0UmVjdCBsb2NhbFNlbGVjdGlvblJlY3Qo
dW5zaWduZWQgc3RhcnRQb3MsIHVuc2lnbmVkIGVuZFBvcykgY29uc3Q7CisgICAgYm9vbCBpc1Nl
bGVjdGVkKHVuc2lnbmVkIHN0YXJ0UG9zLCB1bnNpZ25lZCBlbmRQb3MpIGNvbnN0OworICAgIHZv
aWQgc2VsZWN0aW9uU3RhcnRFbmQodW5zaWduZWQmIHNQb3MsIHVuc2lnbmVkJiBlUG9zKTsKIAog
cHJvdGVjdGVkOgogICAgIHZpcnR1YWwgdm9pZCBwYWludChQYWludEluZm8mLCBjb25zdCBMYXlv
dXRQb2ludCYsIExheW91dFVuaXQgbGluZVRvcCwgTGF5b3V0VW5pdCBsaW5lQm90dG9tKTsKQEAg
LTE1OCwxMyArMTU4LDEzIEBAIHByaXZhdGU6CiAKIHB1YmxpYzoKICAgICB2aXJ0dWFsIGludCBv
ZmZzZXRGb3JQb3NpdGlvbihmbG9hdCB4LCBib29sIGluY2x1ZGVQYXJ0aWFsR2x5cGhzID0gdHJ1
ZSkgY29uc3Q7Ci0gICAgdmlydHVhbCBmbG9hdCBwb3NpdGlvbkZvck9mZnNldChpbnQgb2Zmc2V0
KSBjb25zdDsKKyAgICB2aXJ0dWFsIGZsb2F0IHBvc2l0aW9uRm9yT2Zmc2V0KHVuc2lnbmVkIG9m
ZnNldCkgY29uc3Q7CiAKICAgICAvLyBOZWVkcyB0byBiZSBwdWJsaWMsIHNvIHRoZSBzdGF0aWMg
cGFpbnRUZXh0V2l0aFNoYWRvd3MoKSBmdW5jdGlvbiBjYW4gdXNlIGl0LgogICAgIHN0YXRpYyBG
bG9hdFNpemUgYXBwbHlTaGFkb3dUb0dyYXBoaWNzQ29udGV4dChHcmFwaGljc0NvbnRleHQqLCBj
b25zdCBTaGFkb3dEYXRhKiwgY29uc3QgRmxvYXRSZWN0JiB0ZXh0UmVjdCwgYm9vbCBzdHJva2Vk
LCBib29sIG9wYXF1ZSwgYm9vbCBob3Jpem9udGFsKTsKIAogcHJvdGVjdGVkOgotICAgIHZvaWQg
cGFpbnRDb21wb3NpdGlvbkJhY2tncm91bmQoR3JhcGhpY3NDb250ZXh0KiwgY29uc3QgRmxvYXRQ
b2ludCYgYm94T3JpZ2luLCBjb25zdCBSZW5kZXJTdHlsZSYsIGNvbnN0IEZvbnQmLCBpbnQgc3Rh
cnRQb3MsIGludCBlbmRQb3MpOworICAgIHZvaWQgcGFpbnRDb21wb3NpdGlvbkJhY2tncm91bmQo
R3JhcGhpY3NDb250ZXh0KiwgY29uc3QgRmxvYXRQb2ludCYgYm94T3JpZ2luLCBjb25zdCBSZW5k
ZXJTdHlsZSYsIGNvbnN0IEZvbnQmLCB1bnNpZ25lZCBzdGFydFBvcywgdW5zaWduZWQgZW5kUG9z
KTsKICAgICB2b2lkIHBhaW50RG9jdW1lbnRNYXJrZXJzKEdyYXBoaWNzQ29udGV4dCosIGNvbnN0
IEZsb2F0UG9pbnQmIGJveE9yaWdpbiwgY29uc3QgUmVuZGVyU3R5bGUmLCBjb25zdCBGb250Jiwg
Ym9vbCBiYWNrZ3JvdW5kKTsKICAgICB2b2lkIHBhaW50Q29tcG9zaXRpb25VbmRlcmxpbmUoR3Jh
cGhpY3NDb250ZXh0KiwgY29uc3QgRmxvYXRQb2ludCYgYm94T3JpZ2luLCBjb25zdCBDb21wb3Np
dGlvblVuZGVybGluZSYpOwogCkBAIC0xODcsNyArMTg3LDcgQEAgcHJpdmF0ZToKICAgICBJbmxp
bmVUZXh0Qm94KiBtX3ByZXZUZXh0Qm94OyAvLyBUaGUgcHJldmlvdXMgYm94IHRoYXQgYWxzbyB1
c2VzIG91ciBSZW5kZXJPYmplY3QKICAgICBJbmxpbmVUZXh0Qm94KiBtX25leHRUZXh0Qm94OyAv
LyBUaGUgbmV4dCBib3ggdGhhdCBhbHNvIHVzZXMgb3VyIFJlbmRlck9iamVjdAogCi0gICAgaW50
IG1fc3RhcnQ7CisgICAgdW5zaWduZWQgbV9zdGFydDsKICAgICB1bnNpZ25lZCBzaG9ydCBtX2xl
bjsKIAogICAgIC8vIFdoZXJlIHRvIHRydW5jYXRlIHdoZW4gdGV4dCBvdmVyZmxvdyBpcyBhcHBs
aWVkLiBXZSB1c2Ugc3BlY2lhbCBjb25zdGFudHMgdG8KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJDb21iaW5lVGV4dC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyQ29tYmluZVRleHQuY3BwCmluZGV4IDNmMDEzZGI5MWQ3ZjVjODc1NWU1MmQ4
YzQwZWM5OWQ2YTA2YzgzYTguLmNiMzZmZmRiZmE2YTI0NDM4ZmE4ZTI1NWQ1NjA3ODE1NDM2OGEy
MTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJDb21iaW5lVGV4
dC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckNvbWJpbmVUZXh0LmNw
cApAQCAtNzIsOSArNzIsOCBAQCB2b2lkIFJlbmRlckNvbWJpbmVUZXh0OjphZGp1c3RUZXh0T3Jp
Z2luKEZsb2F0UG9pbnQmIHRleHRPcmlnaW4sIGNvbnN0IEZsb2F0UmVjdAogICAgICAgICB0ZXh0
T3JpZ2luLm1vdmUoYm94UmVjdC5oZWlnaHQoKSAvIDIgLSBjZWlsZihtX2NvbWJpbmVkVGV4dFdp
ZHRoKSAvIDIsIHN0eWxlKCkuZm9udCgpLnBpeGVsU2l6ZSgpKTsKIH0KIAotdm9pZCBSZW5kZXJD
b21iaW5lVGV4dDo6Z2V0U3RyaW5nVG9SZW5kZXIoaW50IHN0YXJ0LCBTdHJpbmcmIHN0cmluZywg
aW50JiBsZW5ndGgpIGNvbnN0Cit2b2lkIFJlbmRlckNvbWJpbmVUZXh0OjpnZXRTdHJpbmdUb1Jl
bmRlcih1bnNpZ25lZCBzdGFydCwgU3RyaW5nJiBzdHJpbmcsIHVuc2lnbmVkJiBsZW5ndGgpIGNv
bnN0CiB7Ci0gICAgQVNTRVJUKHN0YXJ0ID49IDApOwogICAgIGlmIChtX2lzQ29tYmluZWQpIHsK
ICAgICAgICAgc3RyaW5nID0gb3JpZ2luYWxUZXh0KCk7CiAgICAgICAgIGxlbmd0aCA9IHN0cmlu
Zy5sZW5ndGgoKTsKQEAgLTgyLDcgKzgxLDcgQEAgdm9pZCBSZW5kZXJDb21iaW5lVGV4dDo6Z2V0
U3RyaW5nVG9SZW5kZXIoaW50IHN0YXJ0LCBTdHJpbmcmIHN0cmluZywgaW50JiBsZW5ndGgKICAg
ICB9CiAgCiAgICAgc3RyaW5nID0gdGV4dCgpOwotICAgIHN0cmluZyA9IHN0cmluZy5zdWJzdHJp
bmdTaGFyaW5nSW1wbChzdGF0aWNfY2FzdDx1bnNpZ25lZD4oc3RhcnQpLCBsZW5ndGgpOworICAg
IHN0cmluZyA9IHN0cmluZy5zdWJzdHJpbmdTaGFyaW5nSW1wbChzdGFydCwgbGVuZ3RoKTsKIH0K
IAogdm9pZCBSZW5kZXJDb21iaW5lVGV4dDo6Y29tYmluZVRleHQoKQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckNvbWJpbmVUZXh0LmggYi9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyQ29tYmluZVRleHQuaAppbmRleCAxZGRmZWU5MjlmNWM0OTAyMWFj
OTViZDc4ZTk5NGRmNjk1NTEzNTI5Li40Y2ZmOTYwNjkyNjJhMzgzOTUwOGM0MjQyOTcxMjdhMzQy
YzA2M2JmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQ29tYmlu
ZVRleHQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQ29tYmluZVRleHQu
aApAQCAtMzYsNyArMzYsNyBAQCBwdWJsaWM6CiAKICAgICB2b2lkIGNvbWJpbmVUZXh0KCk7CiAg
ICAgdm9pZCBhZGp1c3RUZXh0T3JpZ2luKEZsb2F0UG9pbnQmIHRleHRPcmlnaW4sIGNvbnN0IEZs
b2F0UmVjdCYgYm94UmVjdCkgY29uc3Q7Ci0gICAgdm9pZCBnZXRTdHJpbmdUb1JlbmRlcihpbnQs
IFN0cmluZyYgc3RyaW5nLCBpbnQmIGxlbmd0aCkgY29uc3Q7CisgICAgdm9pZCBnZXRTdHJpbmdU
b1JlbmRlcih1bnNpZ25lZCwgU3RyaW5nJiwgdW5zaWduZWQmIGxlbmd0aCkgY29uc3Q7CiAgICAg
Ym9vbCBpc0NvbWJpbmVkKCkgY29uc3QgeyByZXR1cm4gbV9pc0NvbWJpbmVkOyB9CiAgICAgZmxv
YXQgY29tYmluZWRUZXh0V2lkdGgoY29uc3QgRm9udCYgZm9udCkgY29uc3QgeyByZXR1cm4gZm9u
dC5zaXplKCk7IH0KICAgICBjb25zdCBGb250JiBvcmlnaW5hbEZvbnQoKSBjb25zdCB7IHJldHVy
biBwYXJlbnQoKS0+c3R5bGUoKS5mb250KCk7IH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9zdmcvU1ZHSW5saW5lRmxvd0JveC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvc3ZnL1NWR0lubGluZUZsb3dCb3guY3BwCmluZGV4IDE3ZDQxYmQ4ZjRiYTE4NGFkMWZm
NWI3MjdhMTQwODc3MTBmNGM2MTAuLjZmYjI3OWUzNDU4MGQzMzUwZmQ5ZmJiMTE1M2NlOGJmZmMx
YzdlZGQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHSW5saW5l
Rmxvd0JveC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdJbmxpbmVG
bG93Qm94LmNwcApAQCAtMTA2LDggKzEwNiw4IEBAIHZvaWQgU1ZHSW5saW5lRmxvd0JveDo6Y29t
cHV0ZVRleHRNYXRjaE1hcmtlclJlY3RGb3JSZW5kZXJlcihSZW5kZXJTVkdJbmxpbmVUZXh0CiAg
ICAgICAgICAgICBpZiAobWFya2VyU3RhcnRQb3NpdGlvbiA+PSBtYXJrZXJFbmRQb3NpdGlvbikK
ICAgICAgICAgICAgICAgICBjb250aW51ZTsKIAotICAgICAgICAgICAgaW50IGZyYWdtZW50U3Rh
cnRQb3NpdGlvbiA9IDA7Ci0gICAgICAgICAgICBpbnQgZnJhZ21lbnRFbmRQb3NpdGlvbiA9IDA7
CisgICAgICAgICAgICB1bnNpZ25lZCBmcmFnbWVudFN0YXJ0UG9zaXRpb24gPSAwOworICAgICAg
ICAgICAgdW5zaWduZWQgZnJhZ21lbnRFbmRQb3NpdGlvbiA9IDA7CiAKICAgICAgICAgICAgIGNv
bnN0IFZlY3RvcjxTVkdUZXh0RnJhZ21lbnQ+JiBmcmFnbWVudHMgPSB0ZXh0Qm94LT50ZXh0RnJh
Z21lbnRzKCk7CiAgICAgICAgICAgICB1bnNpZ25lZCB0ZXh0RnJhZ21lbnRzU2l6ZSA9IGZyYWdt
ZW50cy5zaXplKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NW
R0lubGluZVRleHRCb3guY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdJbmxp
bmVUZXh0Qm94LmNwcAppbmRleCBiMTkzNjczYzgzMDU2ZjhmNWJjMGFmMDZiNTYwZjMyZmE4MGU1
MzNhLi4xYmI2NWFkNDZiMmM2MDk4NjQ4YzgyMzU0MjA4YjMxZDE5YjNkMTdhIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR0lubGluZVRleHRCb3guY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHSW5saW5lVGV4dEJveC5jcHAKQEAgLTEw
MSw3ICsxMDEsNyBAQCBpbnQgU1ZHSW5saW5lVGV4dEJveDo6b2Zmc2V0Rm9yUG9zaXRpb25JbkZy
YWdtZW50KGNvbnN0IFNWR1RleHRGcmFnbWVudCYgZnJhZ21lbgogICAgIHJldHVybiBmcmFnbWVu
dC5jaGFyYWN0ZXJPZmZzZXQgLSBzdGFydCgpICsgcmVuZGVyZXIoKS5zY2FsZWRGb250KCkub2Zm
c2V0Rm9yUG9zaXRpb24odGV4dFJ1biwgcG9zaXRpb24gKiBzY2FsaW5nRmFjdG9yLCBpbmNsdWRl
UGFydGlhbEdseXBocyk7CiB9CiAKLWZsb2F0IFNWR0lubGluZVRleHRCb3g6OnBvc2l0aW9uRm9y
T2Zmc2V0KGludCkgY29uc3QKK2Zsb2F0IFNWR0lubGluZVRleHRCb3g6OnBvc2l0aW9uRm9yT2Zm
c2V0KHVuc2lnbmVkKSBjb25zdAogewogICAgIC8vIFNWRyBkb2Vzbid0IHVzZSB0aGUgb2Zmc2V0
IDwtPiBwb3NpdGlvbiBzZWxlY3Rpb24gc3lzdGVtLiAKICAgICBBU1NFUlRfTk9UX1JFQUNIRUQo
KTsKQEAgLTEzNywxMSArMTM3LDEyIEBAIEZsb2F0UmVjdCBTVkdJbmxpbmVUZXh0Qm94OjpzZWxl
Y3Rpb25SZWN0Rm9yVGV4dEZyYWdtZW50KGNvbnN0IFNWR1RleHRGcmFnbWVudCYKICAgICByZXR1
cm4gc25hcHBlZFNlbGVjdGlvblJlY3Q7CiB9CiAKLUxheW91dFJlY3QgU1ZHSW5saW5lVGV4dEJv
eDo6bG9jYWxTZWxlY3Rpb25SZWN0KGludCBzdGFydFBvc2l0aW9uLCBpbnQgZW5kUG9zaXRpb24p
IGNvbnN0CitMYXlvdXRSZWN0IFNWR0lubGluZVRleHRCb3g6OmxvY2FsU2VsZWN0aW9uUmVjdCh1
bnNpZ25lZCBzdGFydFBvc2l0aW9uLCB1bnNpZ25lZCBlbmRQb3NpdGlvbikgY29uc3QKIHsKLSAg
ICBpbnQgYm94U3RhcnQgPSBzdGFydCgpOwotICAgIHN0YXJ0UG9zaXRpb24gPSBzdGQ6Om1heChz
dGFydFBvc2l0aW9uIC0gYm94U3RhcnQsIDApOwotICAgIGVuZFBvc2l0aW9uID0gc3RkOjptaW4o
ZW5kUG9zaXRpb24gLSBib3hTdGFydCwgc3RhdGljX2Nhc3Q8aW50PihsZW4oKSkpOworICAgIHVu
c2lnbmVkIGJveFN0YXJ0ID0gc3RhcnQoKTsKKyAgICBzdGFydFBvc2l0aW9uID0gc3RhcnRQb3Np
dGlvbiA+IGJveFN0YXJ0ID8gc3RhcnRQb3NpdGlvbiAtIGJveFN0YXJ0IDogMDsKKyAgICBBU1NF
UlQoZW5kUG9zaXRpb24gPj0gYm94U3RhcnQpOworICAgIGVuZFBvc2l0aW9uID0gc3RkOjptaW4o
ZW5kUG9zaXRpb24gLSBib3hTdGFydCwgbGVuKCkpOwogICAgIGlmIChzdGFydFBvc2l0aW9uID49
IGVuZFBvc2l0aW9uKQogICAgICAgICByZXR1cm4gTGF5b3V0UmVjdCgpOwogCkBAIC0xNDksOCAr
MTUwLDggQEAgTGF5b3V0UmVjdCBTVkdJbmxpbmVUZXh0Qm94Ojpsb2NhbFNlbGVjdGlvblJlY3Qo
aW50IHN0YXJ0UG9zaXRpb24sIGludCBlbmRQb3NpdGkKIAogICAgIEFmZmluZVRyYW5zZm9ybSBm
cmFnbWVudFRyYW5zZm9ybTsKICAgICBGbG9hdFJlY3Qgc2VsZWN0aW9uUmVjdDsKLSAgICBpbnQg
ZnJhZ21lbnRTdGFydFBvc2l0aW9uID0gMDsKLSAgICBpbnQgZnJhZ21lbnRFbmRQb3NpdGlvbiA9
IDA7CisgICAgdW5zaWduZWQgZnJhZ21lbnRTdGFydFBvc2l0aW9uID0gMDsKKyAgICB1bnNpZ25l
ZCBmcmFnbWVudEVuZFBvc2l0aW9uID0gMDsKIAogICAgIHVuc2lnbmVkIHRleHRGcmFnbWVudHNT
aXplID0gbV90ZXh0RnJhZ21lbnRzLnNpemUoKTsKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBp
IDwgdGV4dEZyYWdtZW50c1NpemU7ICsraSkgewpAQCAtMjEzLDExICsyMTQsMTEgQEAgdm9pZCBT
VkdJbmxpbmVUZXh0Qm94OjpwYWludFNlbGVjdGlvbkJhY2tncm91bmQoUGFpbnRJbmZvJiBwYWlu
dEluZm8pCiAgICAgICAgICAgICBzZWxlY3Rpb25TdHlsZSA9ICZzdHlsZTsKICAgICB9CiAKLSAg
ICBpbnQgc3RhcnRQb3NpdGlvbiwgZW5kUG9zaXRpb247CisgICAgdW5zaWduZWQgc3RhcnRQb3Np
dGlvbiwgZW5kUG9zaXRpb247CiAgICAgc2VsZWN0aW9uU3RhcnRFbmQoc3RhcnRQb3NpdGlvbiwg
ZW5kUG9zaXRpb24pOwogCi0gICAgaW50IGZyYWdtZW50U3RhcnRQb3NpdGlvbiA9IDA7Ci0gICAg
aW50IGZyYWdtZW50RW5kUG9zaXRpb24gPSAwOworICAgIHVuc2lnbmVkIGZyYWdtZW50U3RhcnRQ
b3NpdGlvbiA9IDA7CisgICAgdW5zaWduZWQgZnJhZ21lbnRFbmRQb3NpdGlvbiA9IDA7CiAgICAg
QWZmaW5lVHJhbnNmb3JtIGZyYWdtZW50VHJhbnNmb3JtOwogICAgIHVuc2lnbmVkIHRleHRGcmFn
bWVudHNTaXplID0gbV90ZXh0RnJhZ21lbnRzLnNpemUoKTsKICAgICBmb3IgKHVuc2lnbmVkIGkg
PSAwOyBpIDwgdGV4dEZyYWdtZW50c1NpemU7ICsraSkgewpAQCAtNDQwLDIxICs0NDEsMjQgQEAg
VGV4dFJ1biBTVkdJbmxpbmVUZXh0Qm94Ojpjb25zdHJ1Y3RUZXh0UnVuKFJlbmRlclN0eWxlKiBz
dHlsZSwgY29uc3QgU1ZHVGV4dEZyYWcKICAgICByZXR1cm4gcnVuOwogfQogCi1ib29sIFNWR0lu
bGluZVRleHRCb3g6Om1hcFN0YXJ0RW5kUG9zaXRpb25zSW50b0ZyYWdtZW50Q29vcmRpbmF0ZXMo
Y29uc3QgU1ZHVGV4dEZyYWdtZW50JiBmcmFnbWVudCwgaW50JiBzdGFydFBvc2l0aW9uLCBpbnQm
IGVuZFBvc2l0aW9uKSBjb25zdAorYm9vbCBTVkdJbmxpbmVUZXh0Qm94OjptYXBTdGFydEVuZFBv
c2l0aW9uc0ludG9GcmFnbWVudENvb3JkaW5hdGVzKGNvbnN0IFNWR1RleHRGcmFnbWVudCYgZnJh
Z21lbnQsIHVuc2lnbmVkJiBzdGFydFBvc2l0aW9uLCB1bnNpZ25lZCYgZW5kUG9zaXRpb24pIGNv
bnN0CiB7CiAgICAgaWYgKHN0YXJ0UG9zaXRpb24gPj0gZW5kUG9zaXRpb24pCiAgICAgICAgIHJl
dHVybiBmYWxzZTsKLQotICAgIGludCBvZmZzZXQgPSBzdGF0aWNfY2FzdDxpbnQ+KGZyYWdtZW50
LmNoYXJhY3Rlck9mZnNldCkgLSBzdGFydCgpOwotICAgIGludCBsZW5ndGggPSBzdGF0aWNfY2Fz
dDxpbnQ+KGZyYWdtZW50Lmxlbmd0aCk7CisgICAgCisgICAgQVNTRVJUKGZyYWdtZW50LmNoYXJh
Y3Rlck9mZnNldCA+PSBzdGFydCgpKTsKKyAgICB1bnNpZ25lZCBvZmZzZXQgPSBmcmFnbWVudC5j
aGFyYWN0ZXJPZmZzZXQgLSBzdGFydCgpOworICAgIHVuc2lnbmVkIGxlbmd0aCA9IGZyYWdtZW50
Lmxlbmd0aDsKIAogICAgIGlmIChzdGFydFBvc2l0aW9uID49IG9mZnNldCArIGxlbmd0aCB8fCBl
bmRQb3NpdGlvbiA8PSBvZmZzZXQpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIGlmIChz
dGFydFBvc2l0aW9uIDwgb2Zmc2V0KQogICAgICAgICBzdGFydFBvc2l0aW9uID0gMDsKLSAgICBl
bHNlCisgICAgZWxzZSB7CisgICAgICAgIEFTU0VSVChzdGFydFBvc2l0aW9uID49IG9mZnNldCk7
CiAgICAgICAgIHN0YXJ0UG9zaXRpb24gLT0gb2Zmc2V0OworICAgIH0KIAogICAgIGlmIChlbmRQ
b3NpdGlvbiA+IG9mZnNldCArIGxlbmd0aCkKICAgICAgICAgZW5kUG9zaXRpb24gPSBsZW5ndGg7
CkBAIC02MjYsOCArNjMwLDggQEAgdm9pZCBTVkdJbmxpbmVUZXh0Qm94OjpwYWludFRleHQoR3Jh
cGhpY3NDb250ZXh0KiBjb250ZXh0LCBSZW5kZXJTdHlsZSogc3R5bGUsIFIKICAgICBBU1NFUlQo
c3R5bGUpOwogICAgIEFTU0VSVChzZWxlY3Rpb25TdHlsZSk7CiAKLSAgICBpbnQgc3RhcnRQb3Np
dGlvbiA9IDA7Ci0gICAgaW50IGVuZFBvc2l0aW9uID0gMDsKKyAgICB1bnNpZ25lZCBzdGFydFBv
c2l0aW9uID0gMDsKKyAgICB1bnNpZ25lZCBlbmRQb3NpdGlvbiA9IDA7CiAgICAgaWYgKGhhc1Nl
bGVjdGlvbikgewogICAgICAgICBzZWxlY3Rpb25TdGFydEVuZChzdGFydFBvc2l0aW9uLCBlbmRQ
b3NpdGlvbik7CiAgICAgICAgIGhhc1NlbGVjdGlvbiA9IG1hcFN0YXJ0RW5kUG9zaXRpb25zSW50
b0ZyYWdtZW50Q29vcmRpbmF0ZXMoZnJhZ21lbnQsIHN0YXJ0UG9zaXRpb24sIGVuZFBvc2l0aW9u
KTsKQEAgLTY1NSw3ICs2NTksNyBAQCB2b2lkIFNWR0lubGluZVRleHRCb3g6OnBhaW50VGV4dChH
cmFwaGljc0NvbnRleHQqIGNvbnRleHQsIFJlbmRlclN0eWxlKiBzdHlsZSwgUgogICAgICAgICBT
VkdSZXNvdXJjZXNDYWNoZTo6Y2xpZW50U3R5bGVDaGFuZ2VkKHBhcmVudCgpLT5yZW5kZXJlcigp
LCBTdHlsZURpZmZlcmVuY2VSZXBhaW50LCAqc3R5bGUpOwogCiAgICAgLy8gRXZlbnR1YWxseSBk
cmF3IHRleHQgdXNpbmcgcmVndWxhciBzdHlsZSBmcm9tIHRoZSBlbmQgcG9zaXRpb24gb2YgdGhl
IHNlbGVjdGlvbiB0byB0aGUgZW5kIG9mIHRoZSBjdXJyZW50IGNodW5rIHBhcnQKLSAgICBpZiAo
ZW5kUG9zaXRpb24gPCBzdGF0aWNfY2FzdDxpbnQ+KGZyYWdtZW50Lmxlbmd0aCkgJiYgIXBhaW50
U2VsZWN0ZWRUZXh0T25seSkKKyAgICBpZiAoZW5kUG9zaXRpb24gPCBmcmFnbWVudC5sZW5ndGgg
JiYgIXBhaW50U2VsZWN0ZWRUZXh0T25seSkKICAgICAgICAgcGFpbnRUZXh0V2l0aFNoYWRvd3Mo
Y29udGV4dCwgc3R5bGUsIHRleHRSdW4sIGZyYWdtZW50LCBlbmRQb3NpdGlvbiwgZnJhZ21lbnQu
bGVuZ3RoKTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9T
VkdJbmxpbmVUZXh0Qm94LmggYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR0lubGlu
ZVRleHRCb3guaAppbmRleCBmMDg5NGYwYjU1M2E5ZGIwZDZiYWM1YTFiODRjZjM0YWVjN2YxNTk1
Li41MThlYTFiODY3MmYzM2FiMTEyYmRkMTk1YmUzN2I3NmE3YmYwNmEzIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR0lubGluZVRleHRCb3guaAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR0lubGluZVRleHRCb3guaApAQCAtNDMsMTMgKzQz
LDEzIEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIGludCBzZWxlY3Rpb25Ub3AoKSB7IHJldHVybiB0
b3AoKTsgfQogICAgIHZpcnR1YWwgaW50IHNlbGVjdGlvbkhlaWdodCgpIHsgcmV0dXJuIHN0YXRp
Y19jYXN0PGludD4oY2VpbGYobV9sb2dpY2FsSGVpZ2h0KSk7IH0KICAgICB2aXJ0dWFsIGludCBv
ZmZzZXRGb3JQb3NpdGlvbihmbG9hdCB4LCBib29sIGluY2x1ZGVQYXJ0aWFsR2x5cGhzID0gdHJ1
ZSkgY29uc3Q7Ci0gICAgdmlydHVhbCBmbG9hdCBwb3NpdGlvbkZvck9mZnNldChpbnQgb2Zmc2V0
KSBjb25zdDsKKyAgICB2aXJ0dWFsIGZsb2F0IHBvc2l0aW9uRm9yT2Zmc2V0KHVuc2lnbmVkIG9m
ZnNldCkgY29uc3Q7CiAKICAgICB2b2lkIHBhaW50U2VsZWN0aW9uQmFja2dyb3VuZChQYWludElu
Zm8mKTsKICAgICB2aXJ0dWFsIHZvaWQgcGFpbnQoUGFpbnRJbmZvJiwgY29uc3QgTGF5b3V0UG9p
bnQmLCBMYXlvdXRVbml0IGxpbmVUb3AsIExheW91dFVuaXQgbGluZUJvdHRvbSk7Ci0gICAgdmly
dHVhbCBMYXlvdXRSZWN0IGxvY2FsU2VsZWN0aW9uUmVjdChpbnQgc3RhcnRQb3NpdGlvbiwgaW50
IGVuZFBvc2l0aW9uKSBjb25zdCBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIExheW91dFJlY3QgbG9j
YWxTZWxlY3Rpb25SZWN0KHVuc2lnbmVkIHN0YXJ0UG9zaXRpb24sIHVuc2lnbmVkIGVuZFBvc2l0
aW9uKSBjb25zdCBvdmVycmlkZTsKIAotICAgIGJvb2wgbWFwU3RhcnRFbmRQb3NpdGlvbnNJbnRv
RnJhZ21lbnRDb29yZGluYXRlcyhjb25zdCBTVkdUZXh0RnJhZ21lbnQmLCBpbnQmIHN0YXJ0UG9z
aXRpb24sIGludCYgZW5kUG9zaXRpb24pIGNvbnN0OworICAgIGJvb2wgbWFwU3RhcnRFbmRQb3Np
dGlvbnNJbnRvRnJhZ21lbnRDb29yZGluYXRlcyhjb25zdCBTVkdUZXh0RnJhZ21lbnQmLCB1bnNp
Z25lZCYgc3RhcnRQb3NpdGlvbiwgdW5zaWduZWQmIGVuZFBvc2l0aW9uKSBjb25zdDsKIAogICAg
IHZpcnR1YWwgRmxvYXRSZWN0IGNhbGN1bGF0ZUJvdW5kYXJpZXMoKSBjb25zdDsKIApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdUZXh0TWV0cmljc0J1aWxkZXIu
Y3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdUZXh0TWV0cmljc0J1aWxkZXIu
Y3BwCmluZGV4IGU2MDEwMmRiMDhjMzk2Mzk0OGI4YTU2Y2YxOTZmYTU2MzNkYzA4MWYuLjFjYjVi
YzI5NWEyMWIxZmM4YWM1ODRjMmM3MjY3MzEzMWE1ZGEyNDcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHVGV4dE1ldHJpY3NCdWlsZGVyLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR1RleHRNZXRyaWNzQnVpbGRlci5jcHAKQEAgLTM3
LDEzICszNywxMyBAQCBTVkdUZXh0TWV0cmljc0J1aWxkZXI6OlNWR1RleHRNZXRyaWNzQnVpbGRl
cigpCiAKIGlubGluZSBib29sIFNWR1RleHRNZXRyaWNzQnVpbGRlcjo6Y3VycmVudENoYXJhY3Rl
clN0YXJ0c1N1cnJvZ2F0ZVBhaXIoKSBjb25zdAogewotICAgIHJldHVybiBVMTZfSVNfTEVBRCht
X3J1blttX3RleHRQb3NpdGlvbl0pICYmIGludChtX3RleHRQb3NpdGlvbiArIDEpIDwgbV9ydW4u
Y2hhcmFjdGVyc0xlbmd0aCgpICYmIFUxNl9JU19UUkFJTChtX3J1blttX3RleHRQb3NpdGlvbiAr
IDFdKTsKKyAgICByZXR1cm4gVTE2X0lTX0xFQUQobV9ydW5bbV90ZXh0UG9zaXRpb25dKSAmJiBt
X3RleHRQb3NpdGlvbiArIDEgPCBtX3J1bi5jaGFyYWN0ZXJzTGVuZ3RoKCkgJiYgVTE2X0lTX1RS
QUlMKG1fcnVuW21fdGV4dFBvc2l0aW9uICsgMV0pOwogfQogCiBib29sIFNWR1RleHRNZXRyaWNz
QnVpbGRlcjo6YWR2YW5jZSgpCiB7CiAgICAgbV90ZXh0UG9zaXRpb24gKz0gbV9jdXJyZW50TWV0
cmljcy5sZW5ndGgoKTsKLSAgICBpZiAoaW50KG1fdGV4dFBvc2l0aW9uKSA+PSBtX3J1bi5jaGFy
YWN0ZXJzTGVuZ3RoKCkpCisgICAgaWYgKG1fdGV4dFBvc2l0aW9uID49IG1fcnVuLmNoYXJhY3Rl
cnNMZW5ndGgoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgaWYgKG1faXNDb21wbGV4
VGV4dCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHVGV4dFF1
ZXJ5LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHVGV4dFF1ZXJ5LmNwcApp
bmRleCBlNDY4NDE2ZTdlYTY4YWRjMTRmZjliYWZjNTA0ZTE5YTk2MDFlYTY1Li43MWRkZjgxZGEx
OTM1NmRkZWYzMjdkZWYxNDY2ZDlkZDdhYmZjODdkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvc3ZnL1NWR1RleHRRdWVyeS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL3N2Zy9TVkdUZXh0UXVlcnkuY3BwCkBAIC0xMzMsMTMgKzEzMywxNSBAQCBib29sIFNW
R1RleHRRdWVyeTo6ZXhlY3V0ZVF1ZXJ5KERhdGEqIHF1ZXJ5RGF0YSwgUHJvY2Vzc1RleHRGcmFn
bWVudENhbGxiYWNrIGZyYQogICAgIHJldHVybiBmYWxzZTsKIH0KIAotYm9vbCBTVkdUZXh0UXVl
cnk6Om1hcFN0YXJ0RW5kUG9zaXRpb25zSW50b0ZyYWdtZW50Q29vcmRpbmF0ZXMoRGF0YSogcXVl
cnlEYXRhLCBjb25zdCBTVkdUZXh0RnJhZ21lbnQmIGZyYWdtZW50LCBpbnQmIHN0YXJ0UG9zaXRp
b24sIGludCYgZW5kUG9zaXRpb24pIGNvbnN0Citib29sIFNWR1RleHRRdWVyeTo6bWFwU3RhcnRF
bmRQb3NpdGlvbnNJbnRvRnJhZ21lbnRDb29yZGluYXRlcyhEYXRhKiBxdWVyeURhdGEsIGNvbnN0
IFNWR1RleHRGcmFnbWVudCYgZnJhZ21lbnQsIHVuc2lnbmVkJiBzdGFydFBvc2l0aW9uLCB1bnNp
Z25lZCYgZW5kUG9zaXRpb24pIGNvbnN0CiB7CiAgICAgLy8gUmV1c2UgdGhlIHNhbWUgbG9naWMg
dXNlZCBmb3IgdGV4dCBzZWxlY3Rpb24gJiBwYWludGluZywgdG8gbWFwIG91ciBxdWVyeSBzdGFy
dC9sZW5ndGggaW50byBzdGFydC9lbmRQb3NpdGlvbnMgb2YgdGhlIGN1cnJlbnQgdGV4dCBmcmFn
bWVudC4KKyAgICBBU1NFUlQoc3RhcnRQb3NpdGlvbiA+PSBxdWVyeURhdGEtPnByb2Nlc3NlZENo
YXJhY3RlcnMpOworICAgIEFTU0VSVChlbmRQb3NpdGlvbiA+PSBxdWVyeURhdGEtPnByb2Nlc3Nl
ZENoYXJhY3RlcnMpOwogICAgIHN0YXJ0UG9zaXRpb24gLT0gcXVlcnlEYXRhLT5wcm9jZXNzZWRD
aGFyYWN0ZXJzOwogICAgIGVuZFBvc2l0aW9uIC09IHF1ZXJ5RGF0YS0+cHJvY2Vzc2VkQ2hhcmFj
dGVyczsKIAotICAgIGlmIChzdGFydFBvc2l0aW9uID49IGVuZFBvc2l0aW9uIHx8IHN0YXJ0UG9z
aXRpb24gPCAwIHx8IGVuZFBvc2l0aW9uIDwgMCkKKyAgICBpZiAoc3RhcnRQb3NpdGlvbiA+PSBl
bmRQb3NpdGlvbikKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgbW9kaWZ5U3RhcnRFbmRQ
b3NpdGlvbnNSZXNwZWN0aW5nTGlnYXR1cmVzKHF1ZXJ5RGF0YSwgc3RhcnRQb3NpdGlvbiwgZW5k
UG9zaXRpb24pOwpAQCAtMTUwLDcgKzE1Miw3IEBAIGJvb2wgU1ZHVGV4dFF1ZXJ5OjptYXBTdGFy
dEVuZFBvc2l0aW9uc0ludG9GcmFnbWVudENvb3JkaW5hdGVzKERhdGEqIHF1ZXJ5RGF0YSwKICAg
ICByZXR1cm4gdHJ1ZTsKIH0KIAotdm9pZCBTVkdUZXh0UXVlcnk6Om1vZGlmeVN0YXJ0RW5kUG9z
aXRpb25zUmVzcGVjdGluZ0xpZ2F0dXJlcyhEYXRhKiBxdWVyeURhdGEsIGludCYgc3RhcnRQb3Np
dGlvbiwgaW50JiBlbmRQb3NpdGlvbikgY29uc3QKK3ZvaWQgU1ZHVGV4dFF1ZXJ5Ojptb2RpZnlT
dGFydEVuZFBvc2l0aW9uc1Jlc3BlY3RpbmdMaWdhdHVyZXMoRGF0YSogcXVlcnlEYXRhLCB1bnNp
Z25lZCYgc3RhcnRQb3NpdGlvbiwgdW5zaWduZWQmIGVuZFBvc2l0aW9uKSBjb25zdAogewogICAg
IFNWR1RleHRMYXlvdXRBdHRyaWJ1dGVzKiBsYXlvdXRBdHRyaWJ1dGVzID0gcXVlcnlEYXRhLT50
ZXh0UmVuZGVyZXItPmxheW91dEF0dHJpYnV0ZXMoKTsKICAgICBWZWN0b3I8U1ZHVGV4dE1ldHJp
Y3M+JiB0ZXh0TWV0cmljc1ZhbHVlcyA9IGxheW91dEF0dHJpYnV0ZXMtPnRleHRNZXRyaWNzVmFs
dWVzKCk7CkBAIC0xODEsMjEgKzE4MywyMSBAQCB2b2lkIFNWR1RleHRRdWVyeTo6bW9kaWZ5U3Rh
cnRFbmRQb3NpdGlvbnNSZXNwZWN0aW5nTGlnYXR1cmVzKERhdGEqIHF1ZXJ5RGF0YSwgaQogICAg
ICAgICAgICAgYnJlYWs7CiAKICAgICAgICAgLy8gSWYgdGhlIHN0YXJ0IHBvc2l0aW9uIG1hcHMg
dG8gYSBjaGFyYWN0ZXIgaW4gdGhlIG1ldHJpY3MgbGlzdCwgd2UgZG9uJ3QgbmVlZCB0byBtb2Rp
ZnkgaXQuCi0gICAgICAgIGlmIChzdGFydFBvc2l0aW9uID09IHN0YXRpY19jYXN0PGludD4ocG9z
aXRpb25PZmZzZXQpKQorICAgICAgICBpZiAoc3RhcnRQb3NpdGlvbiA9PSBwb3NpdGlvbk9mZnNl
dCkKICAgICAgICAgICAgIGFsdGVyU3RhcnRQb3NpdGlvbiA9IGZhbHNlOwogCiAgICAgICAgIC8v
IElmIHRoZSBzdGFydCBwb3NpdGlvbiBtYXBzIHRvIGEgY2hhcmFjdGVyIGluIHRoZSBtZXRyaWNz
IGxpc3QsIHdlIGRvbid0IG5lZWQgdG8gbW9kaWZ5IGl0LgotICAgICAgICBpZiAoZW5kUG9zaXRp
b24gPT0gc3RhdGljX2Nhc3Q8aW50Pihwb3NpdGlvbk9mZnNldCkpCisgICAgICAgIGlmIChlbmRQ
b3NpdGlvbiA9PSBwb3NpdGlvbk9mZnNldCkKICAgICAgICAgICAgIGFsdGVyRW5kUG9zaXRpb24g
PSBmYWxzZTsKIAogICAgICAgICAvLyBEZXRlY3QgbGlnYXR1cmVzLgogICAgICAgICBpZiAobGFz
dFBvc2l0aW9uT2Zmc2V0ICE9IC0xICYmIGxhc3RQb3NpdGlvbk9mZnNldCAtIHBvc2l0aW9uT2Zm
c2V0ID4gMSkgewotICAgICAgICAgICAgaWYgKGFsdGVyU3RhcnRQb3NpdGlvbiAmJiBzdGFydFBv
c2l0aW9uID4gbGFzdFBvc2l0aW9uT2Zmc2V0ICYmIHN0YXJ0UG9zaXRpb24gPCBzdGF0aWNfY2Fz
dDxpbnQ+KHBvc2l0aW9uT2Zmc2V0KSkgeworICAgICAgICAgICAgaWYgKGFsdGVyU3RhcnRQb3Np
dGlvbiAmJiBzdGFydFBvc2l0aW9uID4gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGxhc3RQb3NpdGlv
bk9mZnNldCkgJiYgc3RhcnRQb3NpdGlvbiA8IHBvc2l0aW9uT2Zmc2V0KSB7CiAgICAgICAgICAg
ICAgICAgc3RhcnRQb3NpdGlvbiA9IGxhc3RQb3NpdGlvbk9mZnNldDsKICAgICAgICAgICAgICAg
ICBhbHRlclN0YXJ0UG9zaXRpb24gPSBmYWxzZTsKICAgICAgICAgICAgIH0KIAotICAgICAgICAg
ICAgaWYgKGFsdGVyRW5kUG9zaXRpb24gJiYgZW5kUG9zaXRpb24gPiBsYXN0UG9zaXRpb25PZmZz
ZXQgJiYgZW5kUG9zaXRpb24gPCBzdGF0aWNfY2FzdDxpbnQ+KHBvc2l0aW9uT2Zmc2V0KSkgewor
ICAgICAgICAgICAgaWYgKGFsdGVyRW5kUG9zaXRpb24gJiYgZW5kUG9zaXRpb24gPiBzdGF0aWNf
Y2FzdDx1bnNpZ25lZD4obGFzdFBvc2l0aW9uT2Zmc2V0KSAmJiBlbmRQb3NpdGlvbiA8IHBvc2l0
aW9uT2Zmc2V0KSB7CiAgICAgICAgICAgICAgICAgZW5kUG9zaXRpb24gPSBwb3NpdGlvbk9mZnNl
dDsKICAgICAgICAgICAgICAgICBhbHRlckVuZFBvc2l0aW9uID0gZmFsc2U7CiAgICAgICAgICAg
ICB9CkBAIC0yMTIsMTIgKzIxNCwxMiBAQCB2b2lkIFNWR1RleHRRdWVyeTo6bW9kaWZ5U3RhcnRF
bmRQb3NpdGlvbnNSZXNwZWN0aW5nTGlnYXR1cmVzKERhdGEqIHF1ZXJ5RGF0YSwgaQogICAgICAg
ICByZXR1cm47CiAKICAgICBpZiAobGFzdFBvc2l0aW9uT2Zmc2V0ICE9IC0xICYmIGxhc3RQb3Np
dGlvbk9mZnNldCAtIHBvc2l0aW9uT2Zmc2V0ID4gMSkgewotICAgICAgICBpZiAoYWx0ZXJTdGFy
dFBvc2l0aW9uICYmIHN0YXJ0UG9zaXRpb24gPiBsYXN0UG9zaXRpb25PZmZzZXQgJiYgc3RhcnRQ
b3NpdGlvbiA8IHN0YXRpY19jYXN0PGludD4ocG9zaXRpb25PZmZzZXQpKSB7CisgICAgICAgIGlm
IChhbHRlclN0YXJ0UG9zaXRpb24gJiYgc3RhcnRQb3NpdGlvbiA+IHN0YXRpY19jYXN0PHVuc2ln
bmVkPihsYXN0UG9zaXRpb25PZmZzZXQpICYmIHN0YXJ0UG9zaXRpb24gPCBwb3NpdGlvbk9mZnNl
dCkgewogICAgICAgICAgICAgc3RhcnRQb3NpdGlvbiA9IGxhc3RQb3NpdGlvbk9mZnNldDsKICAg
ICAgICAgICAgIGFsdGVyU3RhcnRQb3NpdGlvbiA9IGZhbHNlOwogICAgICAgICB9CiAKLSAgICAg
ICAgaWYgKGFsdGVyRW5kUG9zaXRpb24gJiYgZW5kUG9zaXRpb24gPiBsYXN0UG9zaXRpb25PZmZz
ZXQgJiYgZW5kUG9zaXRpb24gPCBzdGF0aWNfY2FzdDxpbnQ+KHBvc2l0aW9uT2Zmc2V0KSkgewor
ICAgICAgICBpZiAoYWx0ZXJFbmRQb3NpdGlvbiAmJiBlbmRQb3NpdGlvbiA+IHN0YXRpY19jYXN0
PHVuc2lnbmVkPihsYXN0UG9zaXRpb25PZmZzZXQpICYmIGVuZFBvc2l0aW9uIDwgcG9zaXRpb25P
ZmZzZXQpIHsKICAgICAgICAgICAgIGVuZFBvc2l0aW9uID0gcG9zaXRpb25PZmZzZXQ7CiAgICAg
ICAgICAgICBhbHRlckVuZFBvc2l0aW9uID0gZmFsc2U7CiAgICAgICAgIH0KQEAgLTI4Nyw4ICsy
ODksOCBAQCBib29sIFNWR1RleHRRdWVyeTo6c3ViU3RyaW5nTGVuZ3RoQ2FsbGJhY2soRGF0YSog
cXVlcnlEYXRhLCBjb25zdCBTVkdUZXh0RnJhZ21lbgogewogICAgIFN1YlN0cmluZ0xlbmd0aERh
dGEqIGRhdGEgPSBzdGF0aWNfY2FzdDxTdWJTdHJpbmdMZW5ndGhEYXRhKj4ocXVlcnlEYXRhKTsK
IAotICAgIGludCBzdGFydFBvc2l0aW9uID0gZGF0YS0+c3RhcnRQb3NpdGlvbjsKLSAgICBpbnQg
ZW5kUG9zaXRpb24gPSBzdGFydFBvc2l0aW9uICsgZGF0YS0+bGVuZ3RoOworICAgIHVuc2lnbmVk
IHN0YXJ0UG9zaXRpb24gPSBkYXRhLT5zdGFydFBvc2l0aW9uOworICAgIHVuc2lnbmVkIGVuZFBv
c2l0aW9uID0gc3RhcnRQb3NpdGlvbiArIGRhdGEtPmxlbmd0aDsKICAgICBpZiAoIW1hcFN0YXJ0
RW5kUG9zaXRpb25zSW50b0ZyYWdtZW50Q29vcmRpbmF0ZXMocXVlcnlEYXRhLCBmcmFnbWVudCwg
c3RhcnRQb3NpdGlvbiwgZW5kUG9zaXRpb24pKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKQEAg
LTMyMiw4ICszMjQsOCBAQCBib29sIFNWR1RleHRRdWVyeTo6c3RhcnRQb3NpdGlvbk9mQ2hhcmFj
dGVyQ2FsbGJhY2soRGF0YSogcXVlcnlEYXRhLCBjb25zdCBTVkdUZQogewogICAgIFN0YXJ0UG9z
aXRpb25PZkNoYXJhY3RlckRhdGEqIGRhdGEgPSBzdGF0aWNfY2FzdDxTdGFydFBvc2l0aW9uT2ZD
aGFyYWN0ZXJEYXRhKj4ocXVlcnlEYXRhKTsKIAotICAgIGludCBzdGFydFBvc2l0aW9uID0gZGF0
YS0+cG9zaXRpb247Ci0gICAgaW50IGVuZFBvc2l0aW9uID0gc3RhcnRQb3NpdGlvbiArIDE7Cisg
ICAgdW5zaWduZWQgc3RhcnRQb3NpdGlvbiA9IGRhdGEtPnBvc2l0aW9uOworICAgIHVuc2lnbmVk
IGVuZFBvc2l0aW9uID0gc3RhcnRQb3NpdGlvbiArIDE7CiAgICAgaWYgKCFtYXBTdGFydEVuZFBv
c2l0aW9uc0ludG9GcmFnbWVudENvb3JkaW5hdGVzKHF1ZXJ5RGF0YSwgZnJhZ21lbnQsIHN0YXJ0
UG9zaXRpb24sIGVuZFBvc2l0aW9uKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCkBAIC0zNzEs
OCArMzczLDggQEAgYm9vbCBTVkdUZXh0UXVlcnk6OmVuZFBvc2l0aW9uT2ZDaGFyYWN0ZXJDYWxs
YmFjayhEYXRhKiBxdWVyeURhdGEsIGNvbnN0IFNWR1RleHQKIHsKICAgICBFbmRQb3NpdGlvbk9m
Q2hhcmFjdGVyRGF0YSogZGF0YSA9IHN0YXRpY19jYXN0PEVuZFBvc2l0aW9uT2ZDaGFyYWN0ZXJE
YXRhKj4ocXVlcnlEYXRhKTsKIAotICAgIGludCBzdGFydFBvc2l0aW9uID0gZGF0YS0+cG9zaXRp
b247Ci0gICAgaW50IGVuZFBvc2l0aW9uID0gc3RhcnRQb3NpdGlvbiArIDE7CisgICAgdW5zaWdu
ZWQgc3RhcnRQb3NpdGlvbiA9IGRhdGEtPnBvc2l0aW9uOworICAgIHVuc2lnbmVkIGVuZFBvc2l0
aW9uID0gc3RhcnRQb3NpdGlvbiArIDE7CiAgICAgaWYgKCFtYXBTdGFydEVuZFBvc2l0aW9uc0lu
dG9GcmFnbWVudENvb3JkaW5hdGVzKHF1ZXJ5RGF0YSwgZnJhZ21lbnQsIHN0YXJ0UG9zaXRpb24s
IGVuZFBvc2l0aW9uKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCkBAIC00MTksOCArNDIxLDgg
QEAgYm9vbCBTVkdUZXh0UXVlcnk6OnJvdGF0aW9uT2ZDaGFyYWN0ZXJDYWxsYmFjayhEYXRhKiBx
dWVyeURhdGEsIGNvbnN0IFNWR1RleHRGcmEKIHsKICAgICBSb3RhdGlvbk9mQ2hhcmFjdGVyRGF0
YSogZGF0YSA9IHN0YXRpY19jYXN0PFJvdGF0aW9uT2ZDaGFyYWN0ZXJEYXRhKj4ocXVlcnlEYXRh
KTsKIAotICAgIGludCBzdGFydFBvc2l0aW9uID0gZGF0YS0+cG9zaXRpb247Ci0gICAgaW50IGVu
ZFBvc2l0aW9uID0gc3RhcnRQb3NpdGlvbiArIDE7CisgICAgdW5zaWduZWQgc3RhcnRQb3NpdGlv
biA9IGRhdGEtPnBvc2l0aW9uOworICAgIHVuc2lnbmVkIGVuZFBvc2l0aW9uID0gc3RhcnRQb3Np
dGlvbiArIDE7CiAgICAgaWYgKCFtYXBTdGFydEVuZFBvc2l0aW9uc0ludG9GcmFnbWVudENvb3Jk
aW5hdGVzKHF1ZXJ5RGF0YSwgZnJhZ21lbnQsIHN0YXJ0UG9zaXRpb24sIGVuZFBvc2l0aW9uKSkK
ICAgICAgICAgcmV0dXJuIGZhbHNlOwogCkBAIC00ODcsOCArNDg5LDggQEAgYm9vbCBTVkdUZXh0
UXVlcnk6OmV4dGVudE9mQ2hhcmFjdGVyQ2FsbGJhY2soRGF0YSogcXVlcnlEYXRhLCBjb25zdCBT
VkdUZXh0RnJhZ20KIHsKICAgICBFeHRlbnRPZkNoYXJhY3RlckRhdGEqIGRhdGEgPSBzdGF0aWNf
Y2FzdDxFeHRlbnRPZkNoYXJhY3RlckRhdGEqPihxdWVyeURhdGEpOwogCi0gICAgaW50IHN0YXJ0
UG9zaXRpb24gPSBkYXRhLT5wb3NpdGlvbjsKLSAgICBpbnQgZW5kUG9zaXRpb24gPSBzdGFydFBv
c2l0aW9uICsgMTsKKyAgICB1bnNpZ25lZCBzdGFydFBvc2l0aW9uID0gZGF0YS0+cG9zaXRpb247
CisgICAgdW5zaWduZWQgZW5kUG9zaXRpb24gPSBzdGFydFBvc2l0aW9uICsgMTsKICAgICBpZiAo
IW1hcFN0YXJ0RW5kUG9zaXRpb25zSW50b0ZyYWdtZW50Q29vcmRpbmF0ZXMocXVlcnlEYXRhLCBm
cmFnbWVudCwgc3RhcnRQb3NpdGlvbiwgZW5kUG9zaXRpb24pKQogICAgICAgICByZXR1cm4gZmFs
c2U7CiAKQEAgLTUyMiw4ICs1MjQsOCBAQCBib29sIFNWR1RleHRRdWVyeTo6Y2hhcmFjdGVyTnVt
YmVyQXRQb3NpdGlvbkNhbGxiYWNrKERhdGEqIHF1ZXJ5RGF0YSwgY29uc3QgU1ZHVAogCiAgICAg
RmxvYXRSZWN0IGV4dGVudDsKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgZnJhZ21lbnQu
bGVuZ3RoOyArK2kpIHsKLSAgICAgICAgaW50IHN0YXJ0UG9zaXRpb24gPSBkYXRhLT5wcm9jZXNz
ZWRDaGFyYWN0ZXJzICsgaTsKLSAgICAgICAgaW50IGVuZFBvc2l0aW9uID0gc3RhcnRQb3NpdGlv
biArIDE7CisgICAgICAgIHVuc2lnbmVkIHN0YXJ0UG9zaXRpb24gPSBkYXRhLT5wcm9jZXNzZWRD
aGFyYWN0ZXJzICsgaTsKKyAgICAgICAgdW5zaWduZWQgZW5kUG9zaXRpb24gPSBzdGFydFBvc2l0
aW9uICsgMTsKICAgICAgICAgaWYgKCFtYXBTdGFydEVuZFBvc2l0aW9uc0ludG9GcmFnbWVudENv
b3JkaW5hdGVzKHF1ZXJ5RGF0YSwgZnJhZ21lbnQsIHN0YXJ0UG9zaXRpb24sIGVuZFBvc2l0aW9u
KSkKICAgICAgICAgICAgIGNvbnRpbnVlOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvc3ZnL1NWR1RleHRRdWVyeS5oIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2
Zy9TVkdUZXh0UXVlcnkuaAppbmRleCA3MjFiMmRmOGUzMzI0NWRhODY0MzM4NWJlNmVlMmIxZDJi
MDkzOGRmLi4zODczMGEzOGQwNjFlODI1Y2Q5MzdkNzgxODRiOGQzYjNmYTBmYWFmIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR1RleHRRdWVyeS5oCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHVGV4dFF1ZXJ5LmgKQEAgLTUyLDggKzUyLDgg
QEAgcHJpdmF0ZToKICAgICBib29sIGV4ZWN1dGVRdWVyeShEYXRhKiwgUHJvY2Vzc1RleHRGcmFn
bWVudENhbGxiYWNrKSBjb25zdDsKIAogICAgIHZvaWQgY29sbGVjdFRleHRCb3hlc0luRmxvd0Jv
eChJbmxpbmVGbG93Qm94Kik7Ci0gICAgYm9vbCBtYXBTdGFydEVuZFBvc2l0aW9uc0ludG9GcmFn
bWVudENvb3JkaW5hdGVzKERhdGEqLCBjb25zdCBTVkdUZXh0RnJhZ21lbnQmLCBpbnQmIHN0YXJ0
UG9zaXRpb24sIGludCYgZW5kUG9zaXRpb24pIGNvbnN0OwotICAgIHZvaWQgbW9kaWZ5U3RhcnRF
bmRQb3NpdGlvbnNSZXNwZWN0aW5nTGlnYXR1cmVzKERhdGEqLCBpbnQmIHN0YXJ0UG9zaXRpb24s
IGludCYgZW5kUG9zaXRpb24pIGNvbnN0OworICAgIGJvb2wgbWFwU3RhcnRFbmRQb3NpdGlvbnNJ
bnRvRnJhZ21lbnRDb29yZGluYXRlcyhEYXRhKiwgY29uc3QgU1ZHVGV4dEZyYWdtZW50JiwgdW5z
aWduZWQmIHN0YXJ0UG9zaXRpb24sIHVuc2lnbmVkJiBlbmRQb3NpdGlvbikgY29uc3Q7CisgICAg
dm9pZCBtb2RpZnlTdGFydEVuZFBvc2l0aW9uc1Jlc3BlY3RpbmdMaWdhdHVyZXMoRGF0YSosIHVu
c2lnbmVkJiBzdGFydFBvc2l0aW9uLCB1bnNpZ25lZCYgZW5kUG9zaXRpb24pIGNvbnN0OwogCiBw
cml2YXRlOgogICAgIGJvb2wgbnVtYmVyT2ZDaGFyYWN0ZXJzQ2FsbGJhY2soRGF0YSosIGNvbnN0
IFNWR1RleHRGcmFnbWVudCYpIGNvbnN0OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL3N2Zy9TVkdUZXh0UnVuUmVuZGVyaW5nQ29udGV4dC5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvc3ZnL1NWR1RleHRSdW5SZW5kZXJpbmdDb250ZXh0LmNwcAppbmRleCA2MTc3
Mzg2M2M3Y2Y0MzMyZTJkNDM5YzExZGZhOWU3N2ZkYjdkODc0Li4yMTI5ODQ4ZmNhZmZjZTNiNDVk
NTViMDg0MmYxMmY1MjdiYmRmOTBkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvc3ZnL1NWR1RleHRSdW5SZW5kZXJpbmdDb250ZXh0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvc3ZnL1NWR1RleHRSdW5SZW5kZXJpbmdDb250ZXh0LmNwcApAQCAtMTAzLDcg
KzEwMyw3IEBAIGJvb2wgU1ZHVGV4dFJ1blJlbmRlcmluZ0NvbnRleHQ6OmFwcGx5U1ZHS2Vybmlu
Zyhjb25zdCBTaW1wbGVGb250RGF0YSogZm9udERhdGEsCiAKIGNsYXNzIFNWR0dseXBoVG9QYXRo
VHJhbnNsYXRvciBmaW5hbCA6IHB1YmxpYyBHbHlwaFRvUGF0aFRyYW5zbGF0b3IgewogcHVibGlj
OgotICAgIFNWR0dseXBoVG9QYXRoVHJhbnNsYXRvcihjb25zdCBUZXh0UnVuKiBjb25zdCwgY29u
c3QgR2x5cGhCdWZmZXImLCBjb25zdCBGbG9hdFBvaW50JiwgY29uc3QgU1ZHRm9udERhdGEmLCBT
VkdGb250RWxlbWVudCYsIGNvbnN0IGludCBmcm9tLCBjb25zdCBpbnQgbnVtR2x5cGhzLCBmbG9h
dCBzY2FsZSwgYm9vbCBpc1ZlcnRpY2FsVGV4dCk7CisgICAgU1ZHR2x5cGhUb1BhdGhUcmFuc2xh
dG9yKGNvbnN0IFRleHRSdW4qIGNvbnN0LCBjb25zdCBHbHlwaEJ1ZmZlciYsIGNvbnN0IEZsb2F0
UG9pbnQmLCBjb25zdCBTVkdGb250RGF0YSYsIFNWR0ZvbnRFbGVtZW50JiwgdW5zaWduZWQgZnJv
bSwgdW5zaWduZWQgbnVtR2x5cGhzLCBmbG9hdCBzY2FsZSwgYm9vbCBpc1ZlcnRpY2FsVGV4dCk7
CiBwcml2YXRlOgogICAgIHZpcnR1YWwgYm9vbCBjb250YWluc01vcmVQYXRocygpIG92ZXJyaWRl
CiAgICAgewpAQCAtMTIzLDE1ICsxMjMsMTUgQEAgcHJpdmF0ZToKICAgICBGbG9hdFBvaW50IG1f
Y3VycmVudFBvaW50OwogICAgIEZsb2F0UG9pbnQgbV9nbHlwaE9yaWdpbjsKICAgICBTVkdHbHlw
aCBtX3N2Z0dseXBoOwotICAgIGludCBtX2luZGV4OworICAgIHVuc2lnbmVkIG1faW5kZXg7CiAg
ICAgR2x5cGggbV9nbHlwaDsKICAgICBTVkdGb250RWxlbWVudCYgbV9mb250RWxlbWVudDsKLSAg
ICBjb25zdCBmbG9hdCBtX3N0b3BwaW5nUG9pbnQ7CisgICAgY29uc3QgdW5zaWduZWQgbV9zdG9w
cGluZ1BvaW50OwogICAgIGNvbnN0IGZsb2F0IG1fc2NhbGU7CiAgICAgY29uc3QgYm9vbCBtX2lz
VmVydGljYWxUZXh0OwogfTsKIAotU1ZHR2x5cGhUb1BhdGhUcmFuc2xhdG9yOjpTVkdHbHlwaFRv
UGF0aFRyYW5zbGF0b3IoY29uc3QgVGV4dFJ1biogY29uc3QgdGV4dFJ1biwgY29uc3QgR2x5cGhC
dWZmZXImIGdseXBoQnVmZmVyLCBjb25zdCBGbG9hdFBvaW50JiBwb2ludCwgY29uc3QgU1ZHRm9u
dERhdGEmIHN2Z0ZvbnREYXRhLCBTVkdGb250RWxlbWVudCYgZm9udEVsZW1lbnQsIGNvbnN0IGlu
dCBmcm9tLCBjb25zdCBpbnQgbnVtR2x5cGhzLCBmbG9hdCBzY2FsZSwgYm9vbCBpc1ZlcnRpY2Fs
VGV4dCkKK1NWR0dseXBoVG9QYXRoVHJhbnNsYXRvcjo6U1ZHR2x5cGhUb1BhdGhUcmFuc2xhdG9y
KGNvbnN0IFRleHRSdW4qIGNvbnN0IHRleHRSdW4sIGNvbnN0IEdseXBoQnVmZmVyJiBnbHlwaEJ1
ZmZlciwgY29uc3QgRmxvYXRQb2ludCYgcG9pbnQsIGNvbnN0IFNWR0ZvbnREYXRhJiBzdmdGb250
RGF0YSwgU1ZHRm9udEVsZW1lbnQmIGZvbnRFbGVtZW50LCB1bnNpZ25lZCBmcm9tLCB1bnNpZ25l
ZCBudW1HbHlwaHMsIGZsb2F0IHNjYWxlLCBib29sIGlzVmVydGljYWxUZXh0KQogICAgIDogbV90
ZXh0UnVuKHRleHRSdW4pCiAgICAgLCBtX2dseXBoQnVmZmVyKGdseXBoQnVmZmVyKQogICAgICwg
bV9zdmdGb250RGF0YShzdmdGb250RGF0YSkKQEAgLTI4Nyw3ICsyODcsNyBAQCB2b2lkIFNWR1Rl
eHRSdW5SZW5kZXJpbmdDb250ZXh0OjpkcmF3U1ZHR2x5cGhzKEdyYXBoaWNzQ29udGV4dCogY29u
dGV4dCwgY29uc3QgUwogICAgIH0KIH0KIAotR2x5cGhEYXRhIFNWR1RleHRSdW5SZW5kZXJpbmdD
b250ZXh0OjpnbHlwaERhdGFGb3JDaGFyYWN0ZXIoY29uc3QgRm9udCYgZm9udCwgV2lkdGhJdGVy
YXRvciYgaXRlcmF0b3IsIFVDaGFyMzIgY2hhcmFjdGVyLCBib29sIG1pcnJvciwgaW50IGN1cnJl
bnRDaGFyYWN0ZXIsIHVuc2lnbmVkJiBhZHZhbmNlTGVuZ3RoKQorR2x5cGhEYXRhIFNWR1RleHRS
dW5SZW5kZXJpbmdDb250ZXh0OjpnbHlwaERhdGFGb3JDaGFyYWN0ZXIoY29uc3QgRm9udCYgZm9u
dCwgV2lkdGhJdGVyYXRvciYgaXRlcmF0b3IsIFVDaGFyMzIgY2hhcmFjdGVyLCBib29sIG1pcnJv
ciwgdW5zaWduZWQgY3VycmVudENoYXJhY3RlciwgdW5zaWduZWQmIGFkdmFuY2VMZW5ndGgpCiB7
CiAgICAgY29uc3QgU2ltcGxlRm9udERhdGEqIHByaW1hcnlGb250ID0gZm9udC5wcmltYXJ5Rm9u
dCgpOwogICAgIEFTU0VSVChwcmltYXJ5Rm9udCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvc3ZnL1NWR1RleHRSdW5SZW5kZXJpbmdDb250ZXh0LmggYi9Tb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvc3ZnL1NWR1RleHRSdW5SZW5kZXJpbmdDb250ZXh0LmgKaW5kZXggZDBi
OTFmNmNiMzQ4ZWU3M2NjNjFkNDkzOGJhMTRkNDY0YzBhY2E2ZC4uMWRkNjQ2YjU3MGNkNmM1OGU2
ZDQ2YmYwNTc0ZjY5M2NmYWJiNDc1YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL3N2Zy9TVkdUZXh0UnVuUmVuZGVyaW5nQ29udGV4dC5oCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9zdmcvU1ZHVGV4dFJ1blJlbmRlcmluZ0NvbnRleHQuaApAQCAtNDIsNyArNDIs
NyBAQCBwdWJsaWM6CiAgICAgUmVuZGVyU1ZHUmVzb3VyY2UqIGFjdGl2ZVBhaW50aW5nUmVzb3Vy
Y2UoKSBjb25zdCB7IHJldHVybiBtX2FjdGl2ZVBhaW50aW5nUmVzb3VyY2U7IH0KICAgICB2b2lk
IHNldEFjdGl2ZVBhaW50aW5nUmVzb3VyY2UoUmVuZGVyU1ZHUmVzb3VyY2UqIG9iamVjdCkgeyBt
X2FjdGl2ZVBhaW50aW5nUmVzb3VyY2UgPSBvYmplY3Q7IH0KIAotICAgIHZpcnR1YWwgR2x5cGhE
YXRhIGdseXBoRGF0YUZvckNoYXJhY3Rlcihjb25zdCBGb250JiwgV2lkdGhJdGVyYXRvciYsIFVD
aGFyMzIgY2hhcmFjdGVyLCBib29sIG1pcnJvciwgaW50IGN1cnJlbnRDaGFyYWN0ZXIsIHVuc2ln
bmVkJiBhZHZhbmNlTGVuZ3RoKSBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIEdseXBoRGF0YSBnbHlw
aERhdGFGb3JDaGFyYWN0ZXIoY29uc3QgRm9udCYsIFdpZHRoSXRlcmF0b3ImLCBVQ2hhcjMyIGNo
YXJhY3RlciwgYm9vbCBtaXJyb3IsIHVuc2lnbmVkIGN1cnJlbnRDaGFyYWN0ZXIsIHVuc2lnbmVk
JiBhZHZhbmNlTGVuZ3RoKSBvdmVycmlkZTsKICAgICB2aXJ0dWFsIHZvaWQgZHJhd1NWR0dseXBo
cyhHcmFwaGljc0NvbnRleHQqLCBjb25zdCBTaW1wbGVGb250RGF0YSosIGNvbnN0IEdseXBoQnVm
ZmVyJiwgaW50IGZyb20sIGludCB0bywgY29uc3QgRmxvYXRQb2ludCYpIGNvbnN0IG92ZXJyaWRl
OwogICAgIHZpcnR1YWwgZmxvYXQgZmxvYXRXaWR0aFVzaW5nU1ZHRm9udChjb25zdCBGb250Jiwg
Y29uc3QgVGV4dFJ1biYsIGludCYgY2hhcnNDb25zdW1lZCwgU3RyaW5nJiBnbHlwaE5hbWUpIGNv
bnN0IG92ZXJyaWRlOwogICAgIHZpcnR1YWwgYm9vbCBhcHBseVNWR0tlcm5pbmcoY29uc3QgU2lt
cGxlRm9udERhdGEqLCBXaWR0aEl0ZXJhdG9yJiwgR2x5cGhCdWZmZXIqLCBpbnQgZnJvbSkgY29u
c3Qgb3ZlcnJpZGU7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRm9udERhdGEu
Y3BwIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZvbnREYXRhLmNwcAppbmRleCA4MDcxMGNlNmNm
Y2M1OGFiYjZkZGIxZjkxZTNmZDRkMjJlNDJjMGRjLi44MjVlNTlmOWFkMDQ4NzIyYTY1MjEzMWU1
MzIyMDFiOTUwOTY4OTVmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRm9udERh
dGEuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGb250RGF0YS5jcHAKQEAgLTEzMCwx
MSArMTMwLDExIEBAIGZsb2F0IFNWR0ZvbnREYXRhOjp3aWR0aEZvclNWR0dseXBoKEdseXBoIGds
eXBoLCBmbG9hdCBmb250U2l6ZSkgY29uc3QKICAgICByZXR1cm4gc3ZnR2x5cGguaG9yaXpvbnRh
bEFkdmFuY2VYICogc2NhbGVFbVRvVW5pdHMoZm9udFNpemUsIHN2Z0ZvbnRGYWNlRWxlbWVudC0+
dW5pdHNQZXJFbSgpKTsKIH0KIAotYm9vbCBTVkdGb250RGF0YTo6YXBwbHlTVkdHbHlwaFNlbGVj
dGlvbihXaWR0aEl0ZXJhdG9yJiBpdGVyYXRvciwgR2x5cGhEYXRhJiBnbHlwaERhdGEsIGJvb2wg
bWlycm9yLCBpbnQgY3VycmVudENoYXJhY3RlciwgdW5zaWduZWQmIGFkdmFuY2VMZW5ndGgpIGNv
bnN0Citib29sIFNWR0ZvbnREYXRhOjphcHBseVNWR0dseXBoU2VsZWN0aW9uKFdpZHRoSXRlcmF0
b3ImIGl0ZXJhdG9yLCBHbHlwaERhdGEmIGdseXBoRGF0YSwgYm9vbCBtaXJyb3IsIHVuc2lnbmVk
IGN1cnJlbnRDaGFyYWN0ZXIsIHVuc2lnbmVkJiBhZHZhbmNlTGVuZ3RoKSBjb25zdAogewogICAg
IGNvbnN0IFRleHRSdW4mIHJ1biA9IGl0ZXJhdG9yLnJ1bigpOwogICAgIFZlY3RvcjxTVkdHbHlw
aDo6QXJhYmljRm9ybT4mIGFyYWJpY0Zvcm1zID0gaXRlcmF0b3IuYXJhYmljRm9ybXMoKTsKLSAg
ICBBU1NFUlQoaW50KHJ1bi5jaGFyYWN0ZXJzTGVuZ3RoKCkpID49IGN1cnJlbnRDaGFyYWN0ZXIp
OworICAgIEFTU0VSVChydW4uY2hhcmFjdGVyc0xlbmd0aCgpID49IGN1cnJlbnRDaGFyYWN0ZXIp
OwogCiAgICAgLy8gQXNzb2NpYXRlIHRleHQgd2l0aCBhcmFiaWMgZm9ybXMsIGlmIG5lZWRlZC4K
ICAgICBTdHJpbmcgcmVtYWluaW5nVGV4dEluUnVuOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvc3ZnL1NWR0ZvbnREYXRhLmggYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRm9udERhdGEuaApp
bmRleCA3MjcyOGExN2FhNDRiMzk2Y2QwNDEyNGI1MTI0OTIzODBjZjIyNDM5Li4zMjUwYTQ1ZjZk
Mzc3N2Y4MzFlODJiMzJkNmEyMzQ1OGRkZDM1NmZhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9zdmcvU1ZHRm9udERhdGEuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRm9udERhdGEu
aApAQCAtMzYsNyArMzYsNyBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIGluaXRpYWxpemVG
b250RGF0YShTaW1wbGVGb250RGF0YSosIGZsb2F0IGZvbnRTaXplKSBvdmVycmlkZTsKICAgICB2
aXJ0dWFsIGZsb2F0IHdpZHRoRm9yU1ZHR2x5cGgoR2x5cGgsIGZsb2F0IGZvbnRTaXplKSBjb25z
dCBvdmVycmlkZTsKICAgICB2aXJ0dWFsIGJvb2wgZmlsbFNWR0dseXBoUGFnZShHbHlwaFBhZ2Uq
LCB1bnNpZ25lZCBvZmZzZXQsIHVuc2lnbmVkIGxlbmd0aCwgVUNoYXIqIGJ1ZmZlciwgdW5zaWdu
ZWQgYnVmZmVyTGVuZ3RoLCBjb25zdCBTaW1wbGVGb250RGF0YSopIGNvbnN0IG92ZXJyaWRlOwot
ICAgIHZpcnR1YWwgYm9vbCBhcHBseVNWR0dseXBoU2VsZWN0aW9uKFdpZHRoSXRlcmF0b3ImLCBH
bHlwaERhdGEmLCBib29sIG1pcnJvciwgaW50IGN1cnJlbnRDaGFyYWN0ZXIsIHVuc2lnbmVkJiBh
ZHZhbmNlTGVuZ3RoKSBjb25zdCBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIGJvb2wgYXBwbHlTVkdH
bHlwaFNlbGVjdGlvbihXaWR0aEl0ZXJhdG9yJiwgR2x5cGhEYXRhJiwgYm9vbCBtaXJyb3IsIHVu
c2lnbmVkIGN1cnJlbnRDaGFyYWN0ZXIsIHVuc2lnbmVkJiBhZHZhbmNlTGVuZ3RoKSBjb25zdCBv
dmVycmlkZTsKIAogICAgIFNWR0ZvbnRGYWNlRWxlbWVudCogc3ZnRm9udEZhY2VFbGVtZW50KCkg
Y29uc3QgeyByZXR1cm4gbV9zdmdGb250RmFjZUVsZW1lbnQ7IH0KIAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>233253</attachid>
            <date>2014-06-17 12:48:22 -0700</date>
            <delta_ts>2014-06-20 16:12:04 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-133592-20140617124759.patch</filename>
            <type>text/plain</type>
            <size>91713</size>
            <attacher name="Myles C. Maxfield">mmaxfield</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTY5OTQyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZTIyOGM4NmZiMjlmZjVl
OWZkYjU1NjBlODAzMDc0Mzc3YjgwNzhmOS4uOWFkMjI4MDI4MDEwNTQ0OTk4YmNmN2YwM2FlZmY3
NmI0YTI3YzQwMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDEzNCBAQAorMjAxNC0wNi0xNyAgTXls
ZXMgQy4gTWF4ZmllbGQgIDxtbWF4ZmllbGRAYXBwbGUuY29tPgorCisgICAgICAgIFVzZSB1bnNp
Z25lZHMgaW5zdGVhZCBvZiBpbnRzIGZvciBpbmRleGVzIGludG8gYSBzdHJpbmcgaW4gdGV4dCBs
YXlvdXQgY29kZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9MTMzNTkyCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAg
ICAgTWlncmF0ZSBtdWNoIG9mIHRoZSB0ZXh0LWhhbmRsaW5nIGNvZGUgdG8gdXNlIHVuc2lnbmVk
cyBmb3IgaW5kZXhlcyBpbnRvIGEgc3RyaW5nLgorCisgICAgICAgIE5vIG5ldyB0ZXN0cyBiZWNh
dXNlIHRoZXJlIGlzIG5vIGJlaGF2aW9yIGNoYW5nZS4KKworICAgICAgICAqIFdlYkNvcmUuZXhw
LmluOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0ZvbnQuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6Rm9udDo6ZHJhd1RleHQpOgorICAgICAgICAoV2ViQ29yZTo6Rm9udDo6ZHJhd0VtcGhh
c2lzTWFya3MpOgorICAgICAgICAoV2ViQ29yZTo6Rm9udDo6YWRqdXN0U2VsZWN0aW9uUmVjdEZv
clRleHQpOgorICAgICAgICAoV2ViQ29yZTo6Y29tcHV0ZVVuZGVybGluZVR5cGUpOgorICAgICAg
ICAqIHBsYXRmb3JtL2dyYXBoaWNzL0ZvbnQuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy9Gb250RmFzdFBhdGguY3BwOgorICAgICAgICAoV2ViQ29yZTo6Rm9udDo6Z2V0R2x5cGhzQW5k
QWR2YW5jZXNGb3JTaW1wbGVUZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OkZvbnQ6OmRyYXdTaW1w
bGVUZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OkZvbnQ6OmRyYXdFbXBoYXNpc01hcmtzRm9yU2lt
cGxlVGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpGb250OjpkcmF3R2x5cGhCdWZmZXIpOgorICAg
ICAgICAoV2ViQ29yZTo6Rm9udDo6ZHJhd0VtcGhhc2lzTWFya3MpOgorICAgICAgICAoV2ViQ29y
ZTo6Rm9udDo6YWRqdXN0U2VsZWN0aW9uUmVjdEZvclNpbXBsZVRleHQpOgorICAgICAgICAqIHBs
YXRmb3JtL2dyYXBoaWNzL0dseXBoQnVmZmVyLmg6CisgICAgICAgIChXZWJDb3JlOjpHbHlwaEJ1
ZmZlcjo6c2l6ZSk6CisgICAgICAgIChXZWJDb3JlOjpHbHlwaEJ1ZmZlcjo6Z2x5cGhzKToKKyAg
ICAgICAgKFdlYkNvcmU6OkdseXBoQnVmZmVyOjphZHZhbmNlcyk6CisgICAgICAgIChXZWJDb3Jl
OjpHbHlwaEJ1ZmZlcjo6Zm9udERhdGFBdCk6CisgICAgICAgIChXZWJDb3JlOjpHbHlwaEJ1ZmZl
cjo6YWR2YW5jZUF0KToKKyAgICAgICAgKFdlYkNvcmU6OkdseXBoQnVmZmVyOjpvZmZzZXRBdCk6
CisgICAgICAgIChXZWJDb3JlOjpHbHlwaEJ1ZmZlcjo6cmV2ZXJzZSk6CisgICAgICAgIChXZWJD
b3JlOjpHbHlwaEJ1ZmZlcjo6b2Zmc2V0SW5TdHJpbmcpOgorICAgICAgICAoV2ViQ29yZTo6R2x5
cGhCdWZmZXI6OnN3YXApOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29u
dGV4dC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpUZXh0UnVuSXRlcmF0b3I6OmF0RW5kKToKKyAg
ICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9MYXRpbjFUZXh0SXRlcmF0b3IuaDoKKyAgICAgICAg
KFdlYkNvcmU6OkxhdGluMVRleHRJdGVyYXRvcjo6TGF0aW4xVGV4dEl0ZXJhdG9yKToKKyAgICAg
ICAgKFdlYkNvcmU6OkxhdGluMVRleHRJdGVyYXRvcjo6Y3VycmVudENoYXJhY3Rlcik6CisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvU2ltcGxlRm9udERhdGEuaDoKKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy9TdXJyb2dhdGVQYWlyQXdhcmVUZXh0SXRlcmF0b3IuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6U3Vycm9nYXRlUGFpckF3YXJlVGV4dEl0ZXJhdG9yOjpTdXJyb2dhdGVQYWly
QXdhcmVUZXh0SXRlcmF0b3IpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL1N1cnJvZ2F0
ZVBhaXJBd2FyZVRleHRJdGVyYXRvci5oOgorICAgICAgICAoV2ViQ29yZTo6U3Vycm9nYXRlUGFp
ckF3YXJlVGV4dEl0ZXJhdG9yOjpjdXJyZW50Q2hhcmFjdGVyKToKKyAgICAgICAgKiBwbGF0Zm9y
bS9ncmFwaGljcy9UZXh0UnVuLmg6CisgICAgICAgIChXZWJDb3JlOjpUZXh0UnVuOjpsZW5ndGgp
OgorICAgICAgICAoV2ViQ29yZTo6VGV4dFJ1bjo6Y2hhcmFjdGVyc0xlbmd0aCk6CisgICAgICAg
ICogcGxhdGZvcm0vZ3JhcGhpY3MvV2lkdGhJdGVyYXRvci5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpXaWR0aEl0ZXJhdG9yOjpnbHlwaERhdGFGb3JDaGFyYWN0ZXIpOgorICAgICAgICAoV2ViQ29y
ZTo6YXBwbHlGb250VHJhbnNmb3Jtcyk6CisgICAgICAgIChXZWJDb3JlOjpXaWR0aEl0ZXJhdG9y
OjphZHZhbmNlSW50ZXJuYWwpOgorICAgICAgICAoV2ViQ29yZTo6V2lkdGhJdGVyYXRvcjo6YWR2
YW5jZSk6CisgICAgICAgIChXZWJDb3JlOjpXaWR0aEl0ZXJhdG9yOjphZHZhbmNlT25lQ2hhcmFj
dGVyKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9XaWR0aEl0ZXJhdG9yLmg6CisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vRm9udENhaXJvLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OkZvbnQ6OmRyYXdHbHlwaHMpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nh
aXJvL0ZvbnRDYWlyb0hhcmZidXp6TkcuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Rm9udDo6ZHJh
d0NvbXBsZXhUZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OkZvbnQ6OmRyYXdFbXBoYXNpc01hcmtz
Rm9yQ29tcGxleFRleHQpOgorICAgICAgICAoV2ViQ29yZTo6Rm9udDo6YWRqdXN0U2VsZWN0aW9u
UmVjdEZvckNvbXBsZXhUZXh0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9oYXJmYnV6
ei9IYXJmQnV6elNoYXBlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpIYXJmQnV6elNoYXBlcjo6
c2V0Tm9ybWFsaXplZEJ1ZmZlcik6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0Zv
bnRDb21wbGV4VGV4dE1hYy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGb250OjphZGp1c3RTZWxl
Y3Rpb25SZWN0Rm9yQ29tcGxleFRleHQpOgorICAgICAgICAoV2ViQ29yZTo6Rm9udDo6Z2V0R2x5
cGhzQW5kQWR2YW5jZXNGb3JDb21wbGV4VGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpGb250Ojpk
cmF3Q29tcGxleFRleHQpOgorICAgICAgICAoV2ViQ29yZTo6Rm9udDo6ZHJhd0VtcGhhc2lzTWFy
a3NGb3JDb21wbGV4VGV4dCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0ZvbnRN
YWMubW06CisgICAgICAgIChXZWJDb3JlOjpGb250OjpkcmF3R2x5cGhzKToKKyAgICAgICAgKiBw
bGF0Zm9ybS9ncmFwaGljcy93aW4vRm9udENHV2luLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZv
bnQ6OmRyYXdHbHlwaHMpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9Gb250V2lu
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZvbnQ6OmFkanVzdFNlbGVjdGlvblJlY3RGb3JDb21w
bGV4VGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpGb250OjpnZXRHbHlwaHNBbmRBZHZhbmNlc0Zv
ckNvbXBsZXhUZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OkZvbnQ6OmRyYXdDb21wbGV4VGV4dCk6
CisgICAgICAgIChXZWJDb3JlOjpGb250OjpkcmF3RW1waGFzaXNNYXJrc0ZvckNvbXBsZXhUZXh0
KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy93aW5jZS9Gb250V2luQ0UuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6Rm9udDo6ZHJhd0dseXBocyk6CisgICAgICAgIChXZWJDb3JlOjpGb250
OjpkcmF3Q29tcGxleFRleHQpOgorICAgICAgICAoV2ViQ29yZTo6Rm9udDo6ZHJhd0VtcGhhc2lz
TWFya3NGb3JDb21wbGV4VGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpGb250OjpzZWxlY3Rpb25S
ZWN0Rm9yQ29tcGxleFRleHQpOgorICAgICAgICAqIHJlbmRlcmluZy9JbmxpbmVUZXh0Qm94LmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OklubGluZVRleHRCb3g6OmlzU2VsZWN0ZWQpOgorICAgICAg
ICAoV2ViQ29yZTo6SW5saW5lVGV4dEJveDo6c2VsZWN0aW9uU3RhdGUpOgorICAgICAgICAoV2Vi
Q29yZTo6YWRqdXN0Q2hhcmFjdGVyc0FuZExlbmd0aEZvckh5cGhlbik6CisgICAgICAgIChXZWJD
b3JlOjpJbmxpbmVUZXh0Qm94Ojpsb2NhbFNlbGVjdGlvblJlY3QpOgorICAgICAgICAoV2ViQ29y
ZTo6SW5saW5lVGV4dEJveDo6cGFpbnQpOgorICAgICAgICAoV2ViQ29yZTo6SW5saW5lVGV4dEJv
eDo6c2VsZWN0aW9uU3RhcnRFbmQpOgorICAgICAgICAoV2ViQ29yZTo6SW5saW5lVGV4dEJveDo6
cGFpbnRTZWxlY3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6SW5saW5lVGV4dEJveDo6cGFpbnRD
b21wb3NpdGlvbkJhY2tncm91bmQpOgorICAgICAgICAoV2ViQ29yZTo6SW5saW5lVGV4dEJveDo6
cGFpbnREb2N1bWVudE1hcmtlcik6CisgICAgICAgIChXZWJDb3JlOjpJbmxpbmVUZXh0Qm94Ojpw
YWludFRleHRNYXRjaE1hcmtlcik6CisgICAgICAgIChXZWJDb3JlOjpJbmxpbmVUZXh0Qm94Ojpj
b21wdXRlUmVjdEZvclJlcGxhY2VtZW50TWFya2VyKToKKyAgICAgICAgKFdlYkNvcmU6OklubGlu
ZVRleHRCb3g6OnBhaW50Q29tcG9zaXRpb25VbmRlcmxpbmUpOgorICAgICAgICAoV2ViQ29yZTo6
SW5saW5lVGV4dEJveDo6cG9zaXRpb25Gb3JPZmZzZXQpOgorICAgICAgICAoV2ViQ29yZTo6SW5s
aW5lVGV4dEJveDo6Y29uc3RydWN0VGV4dFJ1bik6CisgICAgICAgICogcmVuZGVyaW5nL0lubGlu
ZVRleHRCb3guaDoKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyQ29tYmluZVRleHQuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQ29tYmluZVRleHQ6OmdldFN0cmluZ1RvUmVuZGVyKToK
KyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyQ29tYmluZVRleHQuaDoKKyAgICAgICAgKiByZW5k
ZXJpbmcvc3ZnL1NWR0lubGluZUZsb3dCb3guY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZHSW5s
aW5lRmxvd0JveDo6Y29tcHV0ZVRleHRNYXRjaE1hcmtlclJlY3RGb3JSZW5kZXJlcik6CisgICAg
ICAgICogcmVuZGVyaW5nL3N2Zy9TVkdJbmxpbmVUZXh0Qm94LmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OlNWR0lubGluZVRleHRCb3g6OnBvc2l0aW9uRm9yT2Zmc2V0KToKKyAgICAgICAgKFdlYkNv
cmU6OlNWR0lubGluZVRleHRCb3g6OmxvY2FsU2VsZWN0aW9uUmVjdCk6CisgICAgICAgIChXZWJD
b3JlOjpTVkdJbmxpbmVUZXh0Qm94OjpwYWludFNlbGVjdGlvbkJhY2tncm91bmQpOgorICAgICAg
ICAoV2ViQ29yZTo6U1ZHSW5saW5lVGV4dEJveDo6bWFwU3RhcnRFbmRQb3NpdGlvbnNJbnRvRnJh
Z21lbnRDb29yZGluYXRlcyk6CisgICAgICAgIChXZWJDb3JlOjpTVkdJbmxpbmVUZXh0Qm94Ojpw
YWludFRleHQpOgorICAgICAgICAqIHJlbmRlcmluZy9zdmcvU1ZHSW5saW5lVGV4dEJveC5oOgor
ICAgICAgICAqIHJlbmRlcmluZy9zdmcvU1ZHVGV4dE1ldHJpY3NCdWlsZGVyLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OlNWR1RleHRNZXRyaWNzQnVpbGRlcjo6Y3VycmVudENoYXJhY3RlclN0YXJ0
c1N1cnJvZ2F0ZVBhaXIpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHVGV4dE1ldHJpY3NCdWlsZGVy
OjphZHZhbmNlKToKKyAgICAgICAgKiByZW5kZXJpbmcvc3ZnL1NWR1RleHRRdWVyeS5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpTVkdUZXh0UXVlcnk6Om1hcFN0YXJ0RW5kUG9zaXRpb25zSW50b0Zy
YWdtZW50Q29vcmRpbmF0ZXMpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHVGV4dFF1ZXJ5Ojptb2Rp
ZnlTdGFydEVuZFBvc2l0aW9uc1Jlc3BlY3RpbmdMaWdhdHVyZXMpOgorICAgICAgICAoV2ViQ29y
ZTo6U1ZHVGV4dFF1ZXJ5OjpzdWJTdHJpbmdMZW5ndGhDYWxsYmFjayk6CisgICAgICAgIChXZWJD
b3JlOjpTVkdUZXh0UXVlcnk6OnN0YXJ0UG9zaXRpb25PZkNoYXJhY3RlckNhbGxiYWNrKToKKyAg
ICAgICAgKFdlYkNvcmU6OlNWR1RleHRRdWVyeTo6ZW5kUG9zaXRpb25PZkNoYXJhY3RlckNhbGxi
YWNrKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR1RleHRRdWVyeTo6cm90YXRpb25PZkNoYXJhY3Rl
ckNhbGxiYWNrKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR1RleHRRdWVyeTo6ZXh0ZW50T2ZDaGFy
YWN0ZXJDYWxsYmFjayk6CisgICAgICAgIChXZWJDb3JlOjpTVkdUZXh0UXVlcnk6OmNoYXJhY3Rl
ck51bWJlckF0UG9zaXRpb25DYWxsYmFjayk6CisgICAgICAgICogcmVuZGVyaW5nL3N2Zy9TVkdU
ZXh0UXVlcnkuaDoKKyAgICAgICAgKiByZW5kZXJpbmcvc3ZnL1NWR1RleHRSdW5SZW5kZXJpbmdD
b250ZXh0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR0dseXBoVG9QYXRoVHJhbnNsYXRvcjo6
U1ZHR2x5cGhUb1BhdGhUcmFuc2xhdG9yKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR1RleHRSdW5S
ZW5kZXJpbmdDb250ZXh0OjpnbHlwaERhdGFGb3JDaGFyYWN0ZXIpOgorICAgICAgICAqIHJlbmRl
cmluZy9zdmcvU1ZHVGV4dFJ1blJlbmRlcmluZ0NvbnRleHQuaDoKKyAgICAgICAgKiBzdmcvU1ZH
Rm9udERhdGEuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZHRm9udERhdGE6OmFwcGx5U1ZHR2x5
cGhTZWxlY3Rpb24pOgorICAgICAgICAqIHN2Zy9TVkdGb250RGF0YS5oOgorCiAyMDE0LTA2LTEz
ICBBbmRlcnMgQ2FybHNzb24gIDxhbmRlcnNjYUBhcHBsZS5jb20+CiAKICAgICAgICAgQWRkIGEg
SFRUUEhlYWRlck1hcDo6ZmluZCBvdmVybG9hZCB0aGF0IHRha2VzIGEgSFRUUEhlYWRlck5hbWUK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZXhwLmluIGIvU291cmNlL1dlYkNv
cmUvV2ViQ29yZS5leHAuaW4KaW5kZXggNWI5MjkyMTBjZmI3MGI0OGU0MTZmNDBmN2EwM2E1NmEz
ZDM0YjVhNC4uMWEyNTg3OTUyYzBlMTQyYTQwMDIyNzgxOWNjNGE3MDRmNTQwZmI0ZCAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5leHAuaW4KKysrIGIvU291cmNlL1dlYkNvcmUv
V2ViQ29yZS5leHAuaW4KQEAgLTE4NTIsNyArMTg1Miw3IEBAIF9fWk5LN1dlYkNvcmUzVVJMNXF1
ZXJ5RXYKIF9fWk5LN1dlYkNvcmUzVVJMOHByb3RvY29sRXYKIF9fWk5LN1dlYkNvcmUzVVJMY3ZQ
NU5TVVJMRXYKIF9fWk5LN1dlYkNvcmU0Rm9udDV3aWR0aEVSS05TXzdUZXh0UnVuRVBOM1dURjdI
YXNoU2V0SVBLTlNfMTRTaW1wbGVGb250RGF0YUVOUzRfN1B0ckhhc2hJUzhfRUVOUzRfMTBIYXNo
VHJhaXRzSVM4X0VFRUVQTlNfMTNHbHlwaE92ZXJmbG93RQotX19aTks3V2ViQ29yZTRGb250OGRy
YXdUZXh0RVBOU18xNUdyYXBoaWNzQ29udGV4dEVSS05TXzdUZXh0UnVuRVJLTlNfMTBGbG9hdFBv
aW50RWlpTlMwXzI0Q3VzdG9tRm9udE5vdFJlYWR5QWN0aW9uRQorX19aTks3V2ViQ29yZTRGb250
OGRyYXdUZXh0RVBOU18xNUdyYXBoaWNzQ29udGV4dEVSS05TXzdUZXh0UnVuRVJLTlNfMTBGbG9h
dFBvaW50RWppTlMwXzI0Q3VzdG9tRm9udE5vdFJlYWR5QWN0aW9uRQogX19aTks3V2ViQ29yZTRG
b250ZXFFUktTMF8KIF9fWk5LN1dlYkNvcmU0Tm9kZTExdGV4dENvbnRlbnRFYgogX19aTks3V2Vi
Q29yZTROb2RlMTNvd25lckRvY3VtZW50RXYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL0ZvbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvRm9udC5jcHAKaW5kZXggY2Q2MjNmMzg5NWE1MDk4NTBjNjg4YzRkNjgwNTI5YzdmYTNhYTVm
Zi4uNzM5YTViM2FjYzliNmRiNTRlMGEyNjYyNTQ3YjU0MjRjNTRhMzNlOCAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udC5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udC5jcHAKQEAgLTMyOSw3ICszMjksNyBAQCB2b2lk
IEZvbnQ6OnVwZGF0ZShQYXNzUmVmUHRyPEZvbnRTZWxlY3Rvcj4gZm9udFNlbGVjdG9yKSBjb25z
dAogICAgIG1fdHlwZXNldHRpbmdGZWF0dXJlcyA9IGNvbXB1dGVUeXBlc2V0dGluZ0ZlYXR1cmVz
KCk7CiB9CiAKLWZsb2F0IEZvbnQ6OmRyYXdUZXh0KEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwg
Y29uc3QgVGV4dFJ1biYgcnVuLCBjb25zdCBGbG9hdFBvaW50JiBwb2ludCwgaW50IGZyb20sIGlu
dCB0bywgQ3VzdG9tRm9udE5vdFJlYWR5QWN0aW9uIGN1c3RvbUZvbnROb3RSZWFkeUFjdGlvbikg
Y29uc3QKK2Zsb2F0IEZvbnQ6OmRyYXdUZXh0KEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgY29u
c3QgVGV4dFJ1biYgcnVuLCBjb25zdCBGbG9hdFBvaW50JiBwb2ludCwgdW5zaWduZWQgZnJvbSwg
aW50IGluaXRpYWxUbywgQ3VzdG9tRm9udE5vdFJlYWR5QWN0aW9uIGN1c3RvbUZvbnROb3RSZWFk
eUFjdGlvbikgY29uc3QKIHsKICAgICAvLyBEb24ndCBkcmF3IGFueXRoaW5nIHdoaWxlIHdlIGFy
ZSB1c2luZyBjdXN0b20gZm9udHMgdGhhdCBhcmUgaW4gdGhlIHByb2Nlc3Mgb2YgbG9hZGluZywK
ICAgICAvLyBleGNlcHQgaWYgdGhlICdmb3JjZScgYXJndW1lbnQgaXMgc2V0IHRvIHRydWUgKGlu
IHdoaWNoIGNhc2UgaXQgd2lsbCB1c2UgYSBmYWxsYmFjawpAQCAtMzM3LDcgKzMzNyw3IEBAIGZs
b2F0IEZvbnQ6OmRyYXdUZXh0KEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgY29uc3QgVGV4dFJ1
biYgcnVuLCBjb25zdCBGbG9hdFBvCiAgICAgaWYgKGxvYWRpbmdDdXN0b21Gb250cygpICYmIGN1
c3RvbUZvbnROb3RSZWFkeUFjdGlvbiA9PSBEb05vdFBhaW50SWZGb250Tm90UmVhZHkpCiAgICAg
ICAgIHJldHVybiAwOwogCi0gICAgdG8gPSAodG8gPT0gLTEgPyBydW4ubGVuZ3RoKCkgOiB0byk7
CisgICAgdW5zaWduZWQgdG8gPSBpbml0aWFsVG8gPCAwID8gcnVuLmxlbmd0aCgpIDogaW5pdGlh
bFRvOwogCiAgICAgQ29kZVBhdGggY29kZVBhdGhUb1VzZSA9IGNvZGVQYXRoKHJ1bik7CiAgICAg
Ly8gRklYTUU6IFVzZSB0aGUgZmFzdCBjb2RlIHBhdGggb25jZSBpdCBoYW5kbGVzIHBhcnRpYWwg
cnVucyB3aXRoIGtlcm5pbmcgYW5kIGxpZ2F0dXJlcy4gU2VlIGh0dHA6Ly93ZWJraXQub3JnL2Iv
MTAwMDUwCkBAIC0zNTAsMTMgKzM1MCwxMiBAQCBmbG9hdCBGb250OjpkcmF3VGV4dChHcmFwaGlj
c0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IFRleHRSdW4mIHJ1biwgY29uc3QgRmxvYXRQbwogICAg
IHJldHVybiBkcmF3Q29tcGxleFRleHQoY29udGV4dCwgcnVuLCBwb2ludCwgZnJvbSwgdG8pOwog
fQogCi12b2lkIEZvbnQ6OmRyYXdFbXBoYXNpc01hcmtzKEdyYXBoaWNzQ29udGV4dCogY29udGV4
dCwgY29uc3QgVGV4dFJ1biYgcnVuLCBjb25zdCBBdG9taWNTdHJpbmcmIG1hcmssIGNvbnN0IEZs
b2F0UG9pbnQmIHBvaW50LCBpbnQgZnJvbSwgaW50IHRvKSBjb25zdAordm9pZCBGb250OjpkcmF3
RW1waGFzaXNNYXJrcyhHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IFRleHRSdW4mIHJ1
biwgY29uc3QgQXRvbWljU3RyaW5nJiBtYXJrLCBjb25zdCBGbG9hdFBvaW50JiBwb2ludCwgdW5z
aWduZWQgZnJvbSwgaW50IGluaXRpYWxUbykgY29uc3QKIHsKICAgICBpZiAobG9hZGluZ0N1c3Rv
bUZvbnRzKCkpCiAgICAgICAgIHJldHVybjsKLQotICAgIGlmICh0byA8IDApCi0gICAgICAgIHRv
ID0gcnVuLmxlbmd0aCgpOworICAgIAorICAgIHVuc2lnbmVkIHRvID0gaW5pdGlhbFRvIDwgMCA/
IHJ1bi5sZW5ndGgoKSA6IGluaXRpYWxUbzsKIAogICAgIENvZGVQYXRoIGNvZGVQYXRoVG9Vc2Ug
PSBjb2RlUGF0aChydW4pOwogICAgIC8vIEZJWE1FOiBVc2UgdGhlIGZhc3QgY29kZSBwYXRoIG9u
Y2UgaXQgaGFuZGxlcyBwYXJ0aWFsIHJ1bnMgd2l0aCBrZXJuaW5nIGFuZCBsaWdhdHVyZXMuIFNl
ZSBodHRwOi8vd2Via2l0Lm9yZy9iLzEwMDA1MApAQCAtNTA3LDkgKzUwNiw5IEBAIGJvb2wgRm9u
dDo6ZmFzdEF2ZXJhZ2VDaGFyV2lkdGhJZkF2YWlsYWJsZShmbG9hdCYgd2lkdGgpIGNvbnN0CiAg
ICAgcmV0dXJuIHN1Y2Nlc3M7CiB9CiAKLXZvaWQgRm9udDo6YWRqdXN0U2VsZWN0aW9uUmVjdEZv
clRleHQoY29uc3QgVGV4dFJ1biYgcnVuLCBMYXlvdXRSZWN0JiBzZWxlY3Rpb25SZWN0LCBpbnQg
ZnJvbSwgaW50IHRvKSBjb25zdAordm9pZCBGb250OjphZGp1c3RTZWxlY3Rpb25SZWN0Rm9yVGV4
dChjb25zdCBUZXh0UnVuJiBydW4sIExheW91dFJlY3QmIHNlbGVjdGlvblJlY3QsIHVuc2lnbmVk
IGZyb20sIGludCBpbml0aWFsVG8pIGNvbnN0CiB7Ci0gICAgdG8gPSAodG8gPT0gLTEgPyBydW4u
bGVuZ3RoKCkgOiB0byk7CisgICAgdW5zaWduZWQgdG8gPSBpbml0aWFsVG8gPCAwID8gcnVuLmxl
bmd0aCgpIDogaW5pdGlhbFRvOwogCiAgICAgQ29kZVBhdGggY29kZVBhdGhUb1VzZSA9IGNvZGVQ
YXRoKHJ1bik7CiAgICAgLy8gRklYTUU6IFVzZSB0aGUgZmFzdCBjb2RlIHBhdGggb25jZSBpdCBo
YW5kbGVzIHBhcnRpYWwgcnVucyB3aXRoIGtlcm5pbmcgYW5kIGxpZ2F0dXJlcy4gU2VlIGh0dHA6
Ly93ZWJraXQub3JnL2IvMTAwMDUwCkBAIC0xMDU0LDIzICsxMDUzLDI1IEBAIGJvb2wgRm9udDo6
Y2FuUmVjZWl2ZVRleHRFbXBoYXNpcyhVQ2hhcjMyIGMpCiAgICAgcmV0dXJuIHRydWU7CiB9CiAg
ICAgCi1HbHlwaFRvUGF0aFRyYW5zbGF0b3I6OkdseXBoVW5kZXJsaW5lVHlwZSBjb21wdXRlVW5k
ZXJsaW5lVHlwZShjb25zdCBUZXh0UnVuJiB0ZXh0UnVuLCBjb25zdCBHbHlwaEJ1ZmZlciYgZ2x5
cGhCdWZmZXIsIGludCBpbmRleCkKK0dseXBoVG9QYXRoVHJhbnNsYXRvcjo6R2x5cGhVbmRlcmxp
bmVUeXBlIGNvbXB1dGVVbmRlcmxpbmVUeXBlKGNvbnN0IFRleHRSdW4mIHRleHRSdW4sIGNvbnN0
IEdseXBoQnVmZmVyJiBnbHlwaEJ1ZmZlciwgdW5zaWduZWQgaW5kZXgpCiB7CiAgICAgLy8gSW4g
Z2VuZXJhbCwgd2Ugd2FudCB0byBza2lwIGRlc2NlbmRlcnMuIEhvd2V2ZXIsIHNraXBwaW5nIGRl
c2NlbmRlcnMgb24gQ0pLIGNoYXJhY3RlcnMgbGVhZHMgdG8gdW5kZXNpcmFibGUgcmVuZGVyaW5n
cywKICAgICAvLyBzbyB3ZSB3YW50IHRvIGRyYXcgdGhyb3VnaCBDSksgY2hhcmFjdGVycyAob24g
YSBjaGFyYWN0ZXItYnktY2hhcmFjdGVyIGJhc2lzKS4KICAgICBVQ2hhcjMyIGJhc2VDaGFyYWN0
ZXI7Ci0gICAgaW50IG9mZnNldEluU3RyaW5nID0gZ2x5cGhCdWZmZXIub2Zmc2V0SW5TdHJpbmco
aW5kZXgpOworICAgIGludCBpbml0aWFsT2Zmc2V0SW5TdHJpbmcgPSBnbHlwaEJ1ZmZlci5vZmZz
ZXRJblN0cmluZyhpbmRleCk7CiAKLSAgICBpZiAob2Zmc2V0SW5TdHJpbmcgPT0gR2x5cGhCdWZm
ZXI6OmtOb09mZnNldCkgeworICAgIGlmIChpbml0aWFsT2Zmc2V0SW5TdHJpbmcgPT0gR2x5cGhC
dWZmZXI6OmtOb09mZnNldCkgewogICAgICAgICAvLyBXZSBoYXZlIG5vIGlkZWEgd2hpY2ggY2hh
cmFjdGVyIHNwYXduZWQgdGhpcyBnbHlwaC4gQmFpbC4KICAgICAgICAgcmV0dXJuIEdseXBoVG9Q
YXRoVHJhbnNsYXRvcjo6R2x5cGhVbmRlcmxpbmVUeXBlOjpEcmF3T3ZlckdseXBoOwogICAgIH0K
ICAgICAKKyAgICBBU1NFUlQoaW5pdGlhbE9mZnNldEluU3RyaW5nID49IDApOworICAgIHVuc2ln
bmVkIG9mZnNldEluU3RyaW5nID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGluaXRpYWxPZmZzZXRJ
blN0cmluZyk7CisgICAgCiAgICAgaWYgKHRleHRSdW4uaXM4Qml0KCkpCiAgICAgICAgIGJhc2VD
aGFyYWN0ZXIgPSB0ZXh0UnVuLmNoYXJhY3RlcnM4KClbb2Zmc2V0SW5TdHJpbmddOwotICAgIGVs
c2UgeworICAgIGVsc2UKICAgICAgICAgVTE2X05FWFQodGV4dFJ1bi5jaGFyYWN0ZXJzMTYoKSwg
b2Zmc2V0SW5TdHJpbmcsIHRleHRSdW4ubGVuZ3RoKCksIGJhc2VDaGFyYWN0ZXIpOwotICAgIH0K
ICAgICAKICAgICAvLyB1X2dldEludFByb3BlcnR5VmFsdWUgd2l0aCBVQ0hBUl9JREVPR1JBUEhJ
QyBkb2Vzbid0IHJldHVybiB0cnVlIGZvciBKYXBhbmVzZSBvciBLb3JlYW4gY29kZXBvaW50cy4K
ICAgICAvLyBJbnN0ZWFkLCB3ZSBjYW4gdXNlIHRoZSAiVW5pY29kZSBhbGxvY2F0aW9uIGJsb2Nr
IiBmb3IgdGhlIGNoYXJhY3Rlci4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL0ZvbnQuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnQu
aAppbmRleCAxYWRmZjBhNTU4OTUyYjhlZjBkMjAxMDgwZTJhOTRmMjkzNWJhN2MyLi44ZDJkNzRj
ZTNmMGQ5YzZjZWYzY2RkZTAzNWRmOGI2MDcwOWNlMTZhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvRm9udC5oCkBAIC0xMDQsNyArMTA0LDcgQEAgcHVibGljOgogICAgIHZpcnR1
YWwgdm9pZCBhZHZhbmNlKCkgPSAwOwogICAgIHZpcnR1YWwgfkdseXBoVG9QYXRoVHJhbnNsYXRv
cigpIHsgfQogfTsKLUdseXBoVG9QYXRoVHJhbnNsYXRvcjo6R2x5cGhVbmRlcmxpbmVUeXBlIGNv
bXB1dGVVbmRlcmxpbmVUeXBlKGNvbnN0IFRleHRSdW4mLCBjb25zdCBHbHlwaEJ1ZmZlciYsIGlu
dCBpbmRleCk7CitHbHlwaFRvUGF0aFRyYW5zbGF0b3I6OkdseXBoVW5kZXJsaW5lVHlwZSBjb21w
dXRlVW5kZXJsaW5lVHlwZShjb25zdCBUZXh0UnVuJiwgY29uc3QgR2x5cGhCdWZmZXImLCB1bnNp
Z25lZCBpbmRleCk7CiAKIGNsYXNzIEZvbnQgewogcHVibGljOgpAQCAtMTMzLDkgKzEzMyw5IEBA
IHB1YmxpYzoKICAgICB2b2lkIHVwZGF0ZShQYXNzUmVmUHRyPEZvbnRTZWxlY3Rvcj4pIGNvbnN0
OwogCiAgICAgZW51bSBDdXN0b21Gb250Tm90UmVhZHlBY3Rpb24geyBEb05vdFBhaW50SWZGb250
Tm90UmVhZHksIFVzZUZhbGxiYWNrSWZGb250Tm90UmVhZHkgfTsKLSAgICBmbG9hdCBkcmF3VGV4
dChHcmFwaGljc0NvbnRleHQqLCBjb25zdCBUZXh0UnVuJiwgY29uc3QgRmxvYXRQb2ludCYsIGlu
dCBmcm9tID0gMCwgaW50IHRvID0gLTEsIEN1c3RvbUZvbnROb3RSZWFkeUFjdGlvbiA9IERvTm90
UGFpbnRJZkZvbnROb3RSZWFkeSkgY29uc3Q7Ci0gICAgdm9pZCBkcmF3R2x5cGhzKEdyYXBoaWNz
Q29udGV4dCosIGNvbnN0IFNpbXBsZUZvbnREYXRhKiwgY29uc3QgR2x5cGhCdWZmZXImLCBpbnQg
ZnJvbSwgaW50IG51bUdseXBocywgY29uc3QgRmxvYXRQb2ludCYpIGNvbnN0OwotICAgIHZvaWQg
ZHJhd0VtcGhhc2lzTWFya3MoR3JhcGhpY3NDb250ZXh0KiwgY29uc3QgVGV4dFJ1biYsIGNvbnN0
IEF0b21pY1N0cmluZyYgbWFyaywgY29uc3QgRmxvYXRQb2ludCYsIGludCBmcm9tID0gMCwgaW50
IHRvID0gLTEpIGNvbnN0OworICAgIGZsb2F0IGRyYXdUZXh0KEdyYXBoaWNzQ29udGV4dCosIGNv
bnN0IFRleHRSdW4mLCBjb25zdCBGbG9hdFBvaW50JiwgdW5zaWduZWQgZnJvbSA9IDAsIGludCB0
byA9IC0xLCBDdXN0b21Gb250Tm90UmVhZHlBY3Rpb24gPSBEb05vdFBhaW50SWZGb250Tm90UmVh
ZHkpIGNvbnN0OworICAgIHZvaWQgZHJhd0dseXBocyhHcmFwaGljc0NvbnRleHQqLCBjb25zdCBT
aW1wbGVGb250RGF0YSosIGNvbnN0IEdseXBoQnVmZmVyJiwgdW5zaWduZWQgZnJvbSwgdW5zaWdu
ZWQgbnVtR2x5cGhzLCBjb25zdCBGbG9hdFBvaW50JikgY29uc3Q7CisgICAgdm9pZCBkcmF3RW1w
aGFzaXNNYXJrcyhHcmFwaGljc0NvbnRleHQqLCBjb25zdCBUZXh0UnVuJiwgY29uc3QgQXRvbWlj
U3RyaW5nJiBtYXJrLCBjb25zdCBGbG9hdFBvaW50JiwgdW5zaWduZWQgZnJvbSA9IDAsIGludCB0
byA9IC0xKSBjb25zdDsKIAogICAgIERhc2hBcnJheSBkYXNoZXNGb3JJbnRlcnNlY3Rpb25zV2l0
aFJlY3QoY29uc3QgVGV4dFJ1biYsIGNvbnN0IEZsb2F0UG9pbnQmIHRleHRPcmlnaW4sIGNvbnN0
IEZsb2F0UmVjdCYgbGluZUV4dGVudHMpIGNvbnN0OwogCkBAIC0xNDcsNyArMTQ3LDcgQEAgcHVi
bGljOgogICAgIHN0YXRpYyBmbG9hdCB3aWR0aChUZXh0TGF5b3V0JiwgdW5zaWduZWQgZnJvbSwg
dW5zaWduZWQgbGVuLCBIYXNoU2V0PGNvbnN0IFNpbXBsZUZvbnREYXRhKj4qIGZhbGxiYWNrRm9u
dHMgPSAwKTsKIAogICAgIGludCBvZmZzZXRGb3JQb3NpdGlvbihjb25zdCBUZXh0UnVuJiwgZmxv
YXQgcG9zaXRpb24sIGJvb2wgaW5jbHVkZVBhcnRpYWxHbHlwaHMpIGNvbnN0OwotICAgIHZvaWQg
YWRqdXN0U2VsZWN0aW9uUmVjdEZvclRleHQoY29uc3QgVGV4dFJ1biYsIExheW91dFJlY3QmIHNl
bGVjdGlvblJlY3QsIGludCBmcm9tID0gMCwgaW50IHRvID0gLTEpIGNvbnN0OworICAgIHZvaWQg
YWRqdXN0U2VsZWN0aW9uUmVjdEZvclRleHQoY29uc3QgVGV4dFJ1biYsIExheW91dFJlY3QmIHNl
bGVjdGlvblJlY3QsIHVuc2lnbmVkIGZyb20gPSAwLCBpbnQgdG8gPSAtMSkgY29uc3Q7CiAKICAg
ICBib29sIGlzU21hbGxDYXBzKCkgY29uc3QgeyByZXR1cm4gbV9mb250RGVzY3JpcHRpb24uc21h
bGxDYXBzKCk7IH0KIApAQCAtMjE5LDE0ICsyMTksMTQgQEAgcHJpdmF0ZToKICAgICBlbnVtIEZv
clRleHRFbXBoYXNpc09yTm90IHsgTm90Rm9yVGV4dEVtcGhhc2lzLCBGb3JUZXh0RW1waGFzaXMg
fTsKIAogICAgIC8vIFJldHVybnMgdGhlIGluaXRpYWwgaW4tc3RyZWFtIGFkdmFuY2UuCi0gICAg
ZmxvYXQgZ2V0R2x5cGhzQW5kQWR2YW5jZXNGb3JTaW1wbGVUZXh0KGNvbnN0IFRleHRSdW4mLCBp
bnQgZnJvbSwgaW50IHRvLCBHbHlwaEJ1ZmZlciYsIEZvclRleHRFbXBoYXNpc09yTm90ID0gTm90
Rm9yVGV4dEVtcGhhc2lzKSBjb25zdDsKLSAgICBmbG9hdCBkcmF3U2ltcGxlVGV4dChHcmFwaGlj
c0NvbnRleHQqLCBjb25zdCBUZXh0UnVuJiwgY29uc3QgRmxvYXRQb2ludCYsIGludCBmcm9tLCBp
bnQgdG8pIGNvbnN0OwotICAgIHZvaWQgZHJhd0VtcGhhc2lzTWFya3NGb3JTaW1wbGVUZXh0KEdy
YXBoaWNzQ29udGV4dCosIGNvbnN0IFRleHRSdW4mLCBjb25zdCBBdG9taWNTdHJpbmcmIG1hcmss
IGNvbnN0IEZsb2F0UG9pbnQmLCBpbnQgZnJvbSwgaW50IHRvKSBjb25zdDsKKyAgICBmbG9hdCBn
ZXRHbHlwaHNBbmRBZHZhbmNlc0ZvclNpbXBsZVRleHQoY29uc3QgVGV4dFJ1biYsIHVuc2lnbmVk
IGZyb20sIHVuc2lnbmVkIHRvLCBHbHlwaEJ1ZmZlciYsIEZvclRleHRFbXBoYXNpc09yTm90ID0g
Tm90Rm9yVGV4dEVtcGhhc2lzKSBjb25zdDsKKyAgICBmbG9hdCBkcmF3U2ltcGxlVGV4dChHcmFw
aGljc0NvbnRleHQqLCBjb25zdCBUZXh0UnVuJiwgY29uc3QgRmxvYXRQb2ludCYsIHVuc2lnbmVk
IGZyb20sIHVuc2lnbmVkIHRvKSBjb25zdDsKKyAgICB2b2lkIGRyYXdFbXBoYXNpc01hcmtzRm9y
U2ltcGxlVGV4dChHcmFwaGljc0NvbnRleHQqLCBjb25zdCBUZXh0UnVuJiwgY29uc3QgQXRvbWlj
U3RyaW5nJiBtYXJrLCBjb25zdCBGbG9hdFBvaW50JiwgdW5zaWduZWQgZnJvbSwgdW5zaWduZWQg
dG8pIGNvbnN0OwogICAgIHZvaWQgZHJhd0dseXBoQnVmZmVyKEdyYXBoaWNzQ29udGV4dCosIGNv
bnN0IFRleHRSdW4mLCBjb25zdCBHbHlwaEJ1ZmZlciYsIEZsb2F0UG9pbnQmKSBjb25zdDsKICAg
ICB2b2lkIGRyYXdFbXBoYXNpc01hcmtzKEdyYXBoaWNzQ29udGV4dCosIGNvbnN0IFRleHRSdW4m
LCBjb25zdCBHbHlwaEJ1ZmZlciYsIGNvbnN0IEF0b21pY1N0cmluZyYsIGNvbnN0IEZsb2F0UG9p
bnQmKSBjb25zdDsKICAgICBmbG9hdCBmbG9hdFdpZHRoRm9yU2ltcGxlVGV4dChjb25zdCBUZXh0
UnVuJiwgSGFzaFNldDxjb25zdCBTaW1wbGVGb250RGF0YSo+KiBmYWxsYmFja0ZvbnRzID0gMCwg
R2x5cGhPdmVyZmxvdyogPSAwKSBjb25zdDsKICAgICBpbnQgb2Zmc2V0Rm9yUG9zaXRpb25Gb3JT
aW1wbGVUZXh0KGNvbnN0IFRleHRSdW4mLCBmbG9hdCBwb3NpdGlvbiwgYm9vbCBpbmNsdWRlUGFy
dGlhbEdseXBocykgY29uc3Q7Ci0gICAgdm9pZCBhZGp1c3RTZWxlY3Rpb25SZWN0Rm9yU2ltcGxl
VGV4dChjb25zdCBUZXh0UnVuJiwgTGF5b3V0UmVjdCYgc2VsZWN0aW9uUmVjdCwgaW50IGZyb20s
IGludCB0bykgY29uc3Q7CisgICAgdm9pZCBhZGp1c3RTZWxlY3Rpb25SZWN0Rm9yU2ltcGxlVGV4
dChjb25zdCBUZXh0UnVuJiwgTGF5b3V0UmVjdCYgc2VsZWN0aW9uUmVjdCwgdW5zaWduZWQgZnJv
bSwgdW5zaWduZWQgdG8pIGNvbnN0OwogCiAgICAgYm9vbCBnZXRFbXBoYXNpc01hcmtHbHlwaERh
dGEoY29uc3QgQXRvbWljU3RyaW5nJiwgR2x5cGhEYXRhJikgY29uc3Q7CiAKQEAgLTIzNCwxMiAr
MjM0LDEyIEBAIHByaXZhdGU6CiAgICAgc3RhdGljIGJvb2wgY2FuRXhwYW5kQXJvdW5kSWRlb2dy
YXBoc0luQ29tcGxleFRleHQoKTsKIAogICAgIC8vIFJldHVybnMgdGhlIGluaXRpYWwgaW4tc3Ry
ZWFtIGFkdmFuY2UuCi0gICAgZmxvYXQgZ2V0R2x5cGhzQW5kQWR2YW5jZXNGb3JDb21wbGV4VGV4
dChjb25zdCBUZXh0UnVuJiwgaW50IGZyb20sIGludCB0bywgR2x5cGhCdWZmZXImLCBGb3JUZXh0
RW1waGFzaXNPck5vdCA9IE5vdEZvclRleHRFbXBoYXNpcykgY29uc3Q7Ci0gICAgZmxvYXQgZHJh
d0NvbXBsZXhUZXh0KEdyYXBoaWNzQ29udGV4dCosIGNvbnN0IFRleHRSdW4mLCBjb25zdCBGbG9h
dFBvaW50JiwgaW50IGZyb20sIGludCB0bykgY29uc3Q7Ci0gICAgdm9pZCBkcmF3RW1waGFzaXNN
YXJrc0ZvckNvbXBsZXhUZXh0KEdyYXBoaWNzQ29udGV4dCosIGNvbnN0IFRleHRSdW4mLCBjb25z
dCBBdG9taWNTdHJpbmcmIG1hcmssIGNvbnN0IEZsb2F0UG9pbnQmLCBpbnQgZnJvbSwgaW50IHRv
KSBjb25zdDsKKyAgICBmbG9hdCBnZXRHbHlwaHNBbmRBZHZhbmNlc0ZvckNvbXBsZXhUZXh0KGNv
bnN0IFRleHRSdW4mLCB1bnNpZ25lZCBmcm9tLCB1bnNpZ25lZCB0bywgR2x5cGhCdWZmZXImLCBG
b3JUZXh0RW1waGFzaXNPck5vdCA9IE5vdEZvclRleHRFbXBoYXNpcykgY29uc3Q7CisgICAgZmxv
YXQgZHJhd0NvbXBsZXhUZXh0KEdyYXBoaWNzQ29udGV4dCosIGNvbnN0IFRleHRSdW4mLCBjb25z
dCBGbG9hdFBvaW50JiwgdW5zaWduZWQgZnJvbSwgdW5zaWduZWQgdG8pIGNvbnN0OworICAgIHZv
aWQgZHJhd0VtcGhhc2lzTWFya3NGb3JDb21wbGV4VGV4dChHcmFwaGljc0NvbnRleHQqLCBjb25z
dCBUZXh0UnVuJiwgY29uc3QgQXRvbWljU3RyaW5nJiBtYXJrLCBjb25zdCBGbG9hdFBvaW50Jiwg
dW5zaWduZWQgZnJvbSwgdW5zaWduZWQgdG8pIGNvbnN0OwogICAgIGZsb2F0IGZsb2F0V2lkdGhG
b3JDb21wbGV4VGV4dChjb25zdCBUZXh0UnVuJiwgSGFzaFNldDxjb25zdCBTaW1wbGVGb250RGF0
YSo+KiBmYWxsYmFja0ZvbnRzID0gMCwgR2x5cGhPdmVyZmxvdyogPSAwKSBjb25zdDsKICAgICBp
bnQgb2Zmc2V0Rm9yUG9zaXRpb25Gb3JDb21wbGV4VGV4dChjb25zdCBUZXh0UnVuJiwgZmxvYXQg
cG9zaXRpb24sIGJvb2wgaW5jbHVkZVBhcnRpYWxHbHlwaHMpIGNvbnN0OwotICAgIHZvaWQgYWRq
dXN0U2VsZWN0aW9uUmVjdEZvckNvbXBsZXhUZXh0KGNvbnN0IFRleHRSdW4mLCBMYXlvdXRSZWN0
JiBzZWxlY3Rpb25SZWN0LCBpbnQgZnJvbSwgaW50IHRvKSBjb25zdDsKKyAgICB2b2lkIGFkanVz
dFNlbGVjdGlvblJlY3RGb3JDb21wbGV4VGV4dChjb25zdCBUZXh0UnVuJiwgTGF5b3V0UmVjdCYg
c2VsZWN0aW9uUmVjdCwgdW5zaWduZWQgZnJvbSwgdW5zaWduZWQgdG8pIGNvbnN0OwogCiAgICAg
ZnJpZW5kIHN0cnVjdCBXaWR0aEl0ZXJhdG9yOwogICAgIGZyaWVuZCBjbGFzcyBTVkdUZXh0UnVu
UmVuZGVyaW5nQ29udGV4dDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL0ZvbnRGYXN0UGF0aC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9Gb250RmFzdFBhdGguY3BwCmluZGV4IGJiZWQzZDBkZGQyN2E0ZDc0MDhkNGVkNzJkMjY0MWEx
NGRlMDc3ZWEuLjdmMjBlMGIzNjUyMWQ5Y2RjZDNmNzZmNzBjM2VlYmZmNDc5ZGQ4MjEgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRGYXN0UGF0aC5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udEZhc3RQYXRoLmNwcApA
QCAtMTI2LDcgKzEyNiw3IEBAIGludCBGb250OjplbXBoYXNpc01hcmtIZWlnaHQoY29uc3QgQXRv
bWljU3RyaW5nJiBtYXJrKSBjb25zdAogICAgIHJldHVybiBtYXJrRm9udERhdGEtPmZvbnRNZXRy
aWNzKCkuaGVpZ2h0KCk7CiB9CiAKLWZsb2F0IEZvbnQ6OmdldEdseXBoc0FuZEFkdmFuY2VzRm9y
U2ltcGxlVGV4dChjb25zdCBUZXh0UnVuJiBydW4sIGludCBmcm9tLCBpbnQgdG8sIEdseXBoQnVm
ZmVyJiBnbHlwaEJ1ZmZlciwgRm9yVGV4dEVtcGhhc2lzT3JOb3QgZm9yVGV4dEVtcGhhc2lzKSBj
b25zdAorZmxvYXQgRm9udDo6Z2V0R2x5cGhzQW5kQWR2YW5jZXNGb3JTaW1wbGVUZXh0KGNvbnN0
IFRleHRSdW4mIHJ1biwgdW5zaWduZWQgZnJvbSwgdW5zaWduZWQgdG8sIEdseXBoQnVmZmVyJiBn
bHlwaEJ1ZmZlciwgRm9yVGV4dEVtcGhhc2lzT3JOb3QgZm9yVGV4dEVtcGhhc2lzKSBjb25zdAog
ewogICAgIGZsb2F0IGluaXRpYWxBZHZhbmNlOwogCkBAIC0xNTYsNyArMTU2LDcgQEAgZmxvYXQg
Rm9udDo6Z2V0R2x5cGhzQW5kQWR2YW5jZXNGb3JTaW1wbGVUZXh0KGNvbnN0IFRleHRSdW4mIHJ1
biwgaW50IGZyb20sIGludAogICAgIHJldHVybiBpbml0aWFsQWR2YW5jZTsKIH0KIAotZmxvYXQg
Rm9udDo6ZHJhd1NpbXBsZVRleHQoR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBjb25zdCBUZXh0
UnVuJiBydW4sIGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50LCBpbnQgZnJvbSwgaW50IHRvKSBjb25z
dAorZmxvYXQgRm9udDo6ZHJhd1NpbXBsZVRleHQoR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBj
b25zdCBUZXh0UnVuJiBydW4sIGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50LCB1bnNpZ25lZCBmcm9t
LCB1bnNpZ25lZCB0bykgY29uc3QKIHsKICAgICAvLyBUaGlzIGdseXBoIGJ1ZmZlciBob2xkcyBv
dXIgZ2x5cGhzK2FkdmFuY2VzK2ZvbnQgZGF0YSBmb3IgZWFjaCBnbHlwaC4KICAgICBHbHlwaEJ1
ZmZlciBnbHlwaEJ1ZmZlcjsKQEAgLTE3Miw3ICsxNzIsNyBAQCBmbG9hdCBGb250OjpkcmF3U2lt
cGxlVGV4dChHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IFRleHRSdW4mIHJ1biwgY29u
c3QgRgogICAgIHJldHVybiBzdGFydFBvaW50LngoKSAtIHN0YXJ0WDsKIH0KIAotdm9pZCBGb250
OjpkcmF3RW1waGFzaXNNYXJrc0ZvclNpbXBsZVRleHQoR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0
LCBjb25zdCBUZXh0UnVuJiBydW4sIGNvbnN0IEF0b21pY1N0cmluZyYgbWFyaywgY29uc3QgRmxv
YXRQb2ludCYgcG9pbnQsIGludCBmcm9tLCBpbnQgdG8pIGNvbnN0Cit2b2lkIEZvbnQ6OmRyYXdF
bXBoYXNpc01hcmtzRm9yU2ltcGxlVGV4dChHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIGNvbnN0
IFRleHRSdW4mIHJ1biwgY29uc3QgQXRvbWljU3RyaW5nJiBtYXJrLCBjb25zdCBGbG9hdFBvaW50
JiBwb2ludCwgdW5zaWduZWQgZnJvbSwgdW5zaWduZWQgdG8pIGNvbnN0CiB7CiAgICAgR2x5cGhC
dWZmZXIgZ2x5cGhCdWZmZXI7CiAgICAgZmxvYXQgaW5pdGlhbEFkdmFuY2UgPSBnZXRHbHlwaHNB
bmRBZHZhbmNlc0ZvclNpbXBsZVRleHQocnVuLCBmcm9tLCB0bywgZ2x5cGhCdWZmZXIsIEZvclRl
eHRFbXBoYXNpcyk7CkBAIC0xOTUsOCArMTk1LDggQEAgdm9pZCBGb250OjpkcmF3R2x5cGhCdWZm
ZXIoR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBjb25zdCBUZXh0UnVuJiBydW4sIGNvbnN0IEcK
ICAgICBGbG9hdFBvaW50IHN0YXJ0UG9pbnQocG9pbnQueCgpLCBwb2ludC55KCkgLSBnbHlwaEJ1
ZmZlci5pbml0aWFsQWR2YW5jZSgpLmhlaWdodCgpKTsKICAgICBmbG9hdCBuZXh0WCA9IHN0YXJ0
UG9pbnQueCgpICsgZ2x5cGhCdWZmZXIuYWR2YW5jZUF0KDApLndpZHRoKCk7CiAgICAgZmxvYXQg
bmV4dFkgPSBzdGFydFBvaW50LnkoKSArIGdseXBoQnVmZmVyLmFkdmFuY2VBdCgwKS5oZWlnaHQo
KTsKLSAgICBpbnQgbGFzdEZyb20gPSAwOwotICAgIGludCBuZXh0R2x5cGggPSAxOworICAgIHVu
c2lnbmVkIGxhc3RGcm9tID0gMDsKKyAgICB1bnNpZ25lZCBuZXh0R2x5cGggPSAxOwogI2lmIEVO
QUJMRShTVkdfRk9OVFMpCiAgICAgVGV4dFJ1bjo6UmVuZGVyaW5nQ29udGV4dCogcmVuZGVyaW5n
Q29udGV4dCA9IHJ1bi5yZW5kZXJpbmdDb250ZXh0KCk7CiAjZW5kaWYKQEAgLTIxMCw3ICsyMTAs
MTAgQEAgdm9pZCBGb250OjpkcmF3R2x5cGhCdWZmZXIoR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0
LCBjb25zdCBUZXh0UnVuJiBydW4sIGNvbnN0IEcKICAgICAgICAgICAgICAgICByZW5kZXJpbmdD
b250ZXh0LT5kcmF3U1ZHR2x5cGhzKGNvbnRleHQsIGZvbnREYXRhLCBnbHlwaEJ1ZmZlciwgbGFz
dEZyb20sIG5leHRHbHlwaCAtIGxhc3RGcm9tLCBzdGFydFBvaW50KTsKICAgICAgICAgICAgIGVs
c2UKICNlbmRpZgorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIEFTU0VSVChuZXh0R2x5
cGggPj0gbGFzdEZyb20pOwogICAgICAgICAgICAgICAgIGRyYXdHbHlwaHMoY29udGV4dCwgZm9u
dERhdGEsIGdseXBoQnVmZmVyLCBsYXN0RnJvbSwgbmV4dEdseXBoIC0gbGFzdEZyb20sIHN0YXJ0
UG9pbnQpOworICAgICAgICAgICAgfQogCiAgICAgICAgICAgICBsYXN0RnJvbSA9IG5leHRHbHlw
aDsKICAgICAgICAgICAgIGZvbnREYXRhID0gbmV4dEZvbnREYXRhOwpAQCAtMjY5LDcgKzI3Miw3
IEBAIHZvaWQgRm9udDo6ZHJhd0VtcGhhc2lzTWFya3MoR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0
LCBjb25zdCBUZXh0UnVuJiBydW4sIGNvbnN0CiAgICAgRmxvYXRQb2ludCBzdGFydFBvaW50KHBv
aW50LngoKSArIG1pZGRsZU9mTGFzdEdseXBoIC0gb2Zmc2V0VG9NaWRkbGVPZkdseXBoKG1hcmtG
b250RGF0YSwgbWFya0dseXBoKSwgcG9pbnQueSgpKTsKIAogICAgIEdseXBoQnVmZmVyIG1hcmtC
dWZmZXI7Ci0gICAgZm9yIChpbnQgaSA9IDA7IGkgKyAxIDwgZ2x5cGhCdWZmZXIuc2l6ZSgpOyAr
K2kpIHsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpICsgMSA8IGdseXBoQnVmZmVyLnNpemUo
KTsgKytpKSB7CiAgICAgICAgIGZsb2F0IG1pZGRsZU9mTmV4dEdseXBoID0gb2Zmc2V0VG9NaWRk
bGVPZkdseXBoQXRJbmRleChnbHlwaEJ1ZmZlciwgaSArIDEpOwogICAgICAgICBmbG9hdCBhZHZh
bmNlID0gZ2x5cGhCdWZmZXIuYWR2YW5jZUF0KGkpLndpZHRoKCkgLSBtaWRkbGVPZkxhc3RHbHlw
aCArIG1pZGRsZU9mTmV4dEdseXBoOwogICAgICAgICBtYXJrQnVmZmVyLmFkZChnbHlwaEJ1ZmZl
ci5nbHlwaEF0KGkpID8gbWFya0dseXBoIDogc3BhY2VHbHlwaCwgbWFya0ZvbnREYXRhLCBhZHZh
bmNlKTsKQEAgLTI5Niw3ICsyOTksNyBAQCBmbG9hdCBGb250OjpmbG9hdFdpZHRoRm9yU2ltcGxl
VGV4dChjb25zdCBUZXh0UnVuJiBydW4sIEhhc2hTZXQ8Y29uc3QgU2ltcGxlRm9udAogICAgIHJl
dHVybiBpdC5tX3J1bldpZHRoU29GYXI7CiB9CiAKLXZvaWQgRm9udDo6YWRqdXN0U2VsZWN0aW9u
UmVjdEZvclNpbXBsZVRleHQoY29uc3QgVGV4dFJ1biYgcnVuLCBMYXlvdXRSZWN0JiBzZWxlY3Rp
b25SZWN0LCBpbnQgZnJvbSwgaW50IHRvKSBjb25zdAordm9pZCBGb250OjphZGp1c3RTZWxlY3Rp
b25SZWN0Rm9yU2ltcGxlVGV4dChjb25zdCBUZXh0UnVuJiBydW4sIExheW91dFJlY3QmIHNlbGVj
dGlvblJlY3QsIHVuc2lnbmVkIGZyb20sIHVuc2lnbmVkIHRvKSBjb25zdAogewogICAgIEdseXBo
QnVmZmVyIGdseXBoQnVmZmVyOwogICAgIFdpZHRoSXRlcmF0b3IgaXQodGhpcywgcnVuKTsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dseXBoQnVmZmVyLmgg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HbHlwaEJ1ZmZlci5oCmluZGV4IDNj
NTkzNWZjNmQyYzAyNDc2MDdlMzMzMjRkMzkwYjA1ZDdmODliNDYuLjdhMjgxYWQyZDRlYTY5ZmE0
Y2U5ODQ2YWVjOWUzMTgwODlhMWY0MzEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL0dseXBoQnVmZmVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvR2x5cGhCdWZmZXIuaApAQCAtNzYsNyArNzYsNyBAQCB0eXBlZGVmIEZsb2F0U2l6
ZSBHbHlwaEJ1ZmZlckFkdmFuY2U7CiBjbGFzcyBHbHlwaEJ1ZmZlciB7CiBwdWJsaWM6CiAgICAg
Ym9vbCBpc0VtcHR5KCkgY29uc3QgeyByZXR1cm4gbV9mb250RGF0YS5pc0VtcHR5KCk7IH0KLSAg
ICBpbnQgc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fZm9udERhdGEuc2l6ZSgpOyB9CisgICAgdW5z
aWduZWQgc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fZm9udERhdGEuc2l6ZSgpOyB9CiAgICAgCiAg
ICAgdm9pZCBjbGVhcigpCiAgICAgewpAQCAtOTAsMTIgKzkwLDEyIEBAIHB1YmxpYzoKICNlbmRp
ZgogICAgIH0KIAotICAgIEdseXBoQnVmZmVyR2x5cGgqIGdseXBocyhpbnQgZnJvbSkgeyByZXR1
cm4gbV9nbHlwaHMuZGF0YSgpICsgZnJvbTsgfQotICAgIEdseXBoQnVmZmVyQWR2YW5jZSogYWR2
YW5jZXMoaW50IGZyb20pIHsgcmV0dXJuIG1fYWR2YW5jZXMuZGF0YSgpICsgZnJvbTsgfQotICAg
IGNvbnN0IEdseXBoQnVmZmVyR2x5cGgqIGdseXBocyhpbnQgZnJvbSkgY29uc3QgeyByZXR1cm4g
bV9nbHlwaHMuZGF0YSgpICsgZnJvbTsgfQotICAgIGNvbnN0IEdseXBoQnVmZmVyQWR2YW5jZSog
YWR2YW5jZXMoaW50IGZyb20pIGNvbnN0IHsgcmV0dXJuIG1fYWR2YW5jZXMuZGF0YSgpICsgZnJv
bTsgfQorICAgIEdseXBoQnVmZmVyR2x5cGgqIGdseXBocyh1bnNpZ25lZCBmcm9tKSB7IHJldHVy
biBtX2dseXBocy5kYXRhKCkgKyBmcm9tOyB9CisgICAgR2x5cGhCdWZmZXJBZHZhbmNlKiBhZHZh
bmNlcyh1bnNpZ25lZCBmcm9tKSB7IHJldHVybiBtX2FkdmFuY2VzLmRhdGEoKSArIGZyb207IH0K
KyAgICBjb25zdCBHbHlwaEJ1ZmZlckdseXBoKiBnbHlwaHModW5zaWduZWQgZnJvbSkgY29uc3Qg
eyByZXR1cm4gbV9nbHlwaHMuZGF0YSgpICsgZnJvbTsgfQorICAgIGNvbnN0IEdseXBoQnVmZmVy
QWR2YW5jZSogYWR2YW5jZXModW5zaWduZWQgZnJvbSkgY29uc3QgeyByZXR1cm4gbV9hZHZhbmNl
cy5kYXRhKCkgKyBmcm9tOyB9CiAKLSAgICBjb25zdCBTaW1wbGVGb250RGF0YSogZm9udERhdGFB
dChpbnQgaW5kZXgpIGNvbnN0IHsgcmV0dXJuIG1fZm9udERhdGFbaW5kZXhdOyB9CisgICAgY29u
c3QgU2ltcGxlRm9udERhdGEqIGZvbnREYXRhQXQodW5zaWduZWQgaW5kZXgpIGNvbnN0IHsgcmV0
dXJuIG1fZm9udERhdGFbaW5kZXhdOyB9CiAKICAgICB2b2lkIHNldEluaXRpYWxBZHZhbmNlKEds
eXBoQnVmZmVyQWR2YW5jZSBpbml0aWFsQWR2YW5jZSkgeyBtX2luaXRpYWxBZHZhbmNlID0gaW5p
dGlhbEFkdmFuY2U7IH0KICAgICBjb25zdCBHbHlwaEJ1ZmZlckFkdmFuY2UmIGluaXRpYWxBZHZh
bmNlKCkgY29uc3QgeyByZXR1cm4gbV9pbml0aWFsQWR2YW5jZTsgfQpAQCAtMTA5LDEyICsxMDks
MTIgQEAgcHVibGljOgogI2VuZGlmCiAgICAgfQogCi0gICAgR2x5cGhCdWZmZXJBZHZhbmNlIGFk
dmFuY2VBdChpbnQgaW5kZXgpIGNvbnN0CisgICAgR2x5cGhCdWZmZXJBZHZhbmNlIGFkdmFuY2VB
dCh1bnNpZ25lZCBpbmRleCkgY29uc3QKICAgICB7CiAgICAgICAgIHJldHVybiBtX2FkdmFuY2Vz
W2luZGV4XTsKICAgICB9CiAKLSAgICBGbG9hdFNpemUgb2Zmc2V0QXQoaW50IGluZGV4KSBjb25z
dAorICAgIEZsb2F0U2l6ZSBvZmZzZXRBdCh1bnNpZ25lZCBpbmRleCkgY29uc3QKICAgICB7CiAj
aWYgUExBVEZPUk0oV0lOKQogICAgICAgICByZXR1cm4gbV9vZmZzZXRzW2luZGV4XTsKQEAgLTE3
Niw3ICsxNzYsNyBAQCBwdWJsaWM6CiAgICAgfQogI2VuZGlmCiAKLSAgICB2b2lkIHJldmVyc2Uo
aW50IGZyb20sIGludCBsZW5ndGgpCisgICAgdm9pZCByZXZlcnNlKHVuc2lnbmVkIGZyb20sIHVu
c2lnbmVkIGxlbmd0aCkKICAgICB7CiAgICAgICAgIGZvciAoaW50IGkgPSBmcm9tLCBlbmQgPSBm
cm9tICsgbGVuZ3RoIC0gMTsgaSA8IGVuZDsgKytpLCAtLWVuZCkKICAgICAgICAgICAgIHN3YXAo
aSwgZW5kKTsKQEAgLTE5NCwxNCArMTk0LDE0IEBAIHB1YmxpYzoKICAgICAgICAgbV9vZmZzZXRz
SW5TdHJpbmcucmVzZXQobmV3IFZlY3RvcjxpbnQsIDIwNDg+KCkpOwogICAgIH0KICAgICAKLSAg
ICBpbnQgb2Zmc2V0SW5TdHJpbmcoaW50IGluZGV4KSBjb25zdAorICAgIGludCBvZmZzZXRJblN0
cmluZyh1bnNpZ25lZCBpbmRleCkgY29uc3QKICAgICB7CiAgICAgICAgIEFTU0VSVChtX29mZnNl
dHNJblN0cmluZyk7CiAgICAgICAgIHJldHVybiAoKm1fb2Zmc2V0c0luU3RyaW5nKVtpbmRleF07
CiAgICAgfQogCiBwcml2YXRlOgotICAgIHZvaWQgc3dhcChpbnQgaW5kZXgxLCBpbnQgaW5kZXgy
KQorICAgIHZvaWQgc3dhcCh1bnNpZ25lZCBpbmRleDEsIHVuc2lnbmVkIGluZGV4MikKICAgICB7
CiAgICAgICAgIGNvbnN0IFNpbXBsZUZvbnREYXRhKiBmID0gbV9mb250RGF0YVtpbmRleDFdOwog
ICAgICAgICBtX2ZvbnREYXRhW2luZGV4MV0gPSBtX2ZvbnREYXRhW2luZGV4Ml07CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQuY3Bw
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0LmNwcApp
bmRleCAwZTQwMGVjODA3MzlkN2M5NWIyYzNhMTJlZmE0MDcyMWM0YmE2YWQzLi5lMDk2NDRkNDU4
ZmVkOGEyZjc2ODg1OTk3NGFkNzk1MDFiNWRjM2RlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dC5jcHAKQEAgLTc0LDcgKzc0LDcg
QEAgcHVibGljOgogCiBwcml2YXRlOgogICAgIGNvbnN0IFRleHRSdW4qIG1fdGV4dFJ1bjsKLSAg
ICBpbnQgbV9vZmZzZXQ7CisgICAgdW5zaWduZWQgbV9vZmZzZXQ7CiB9OwogCiBjbGFzcyBJbnRl
cnBvbGF0aW9uUXVhbGl0eU1haW50YWluZXIgewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvTGF0aW4xVGV4dEl0ZXJhdG9yLmggYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9MYXRpbjFUZXh0SXRlcmF0b3IuaAppbmRleCBjNDAxODliZmU5MzMy
YTBkZWI0MDY0M2MxNGQxZTI4MDc3ZGFkMzg5Li42YjdlNTk5ZDAwMjNmOThiMzI2MDY4MjA5Zjlj
NjAyNzI3N2VkYmFlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9MYXRpbjFUZXh0SXRlcmF0b3IuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9MYXRpbjFUZXh0SXRlcmF0b3IuaApAQCAtMzAsNyArMzAsNyBAQCBjbGFzcyBMYXRpbjFU
ZXh0SXRlcmF0b3IgewogcHVibGljOgogICAgIC8vIFRoZSBwYXNzZWQgaW4gTENoYXIgcG9pbnRl
ciBzdGFydHMgYXQgJ2N1cnJlbnRDaGFyYWN0ZXInLiBUaGUgaXRlcmF0b3Igb3BlcmF0ZXMgb24g
dGhlIHJhbmdlIFtjdXJyZW50Q2hhcmFjdGVyLCBsYXN0Q2hhcmFjdGVyXS4KICAgICAvLyAnZW5k
Q2hhcmFjdGVyJyBkZW5vdGVzIHRoZSBtYXhpbXVtIGxlbmd0aCBvZiB0aGUgVUNoYXIgYXJyYXks
IHdoaWNoIG1pZ2h0IGV4Y2VlZCAnbGFzdENoYXJhY3RlcicuCi0gICAgTGF0aW4xVGV4dEl0ZXJh
dG9yKGNvbnN0IExDaGFyKiBjaGFyYWN0ZXJzLCBpbnQgY3VycmVudENoYXJhY3RlciwgaW50IGxh
c3RDaGFyYWN0ZXIsIGludCAvKmVuZENoYXJhY3RlciovKQorICAgIExhdGluMVRleHRJdGVyYXRv
cihjb25zdCBMQ2hhciogY2hhcmFjdGVycywgdW5zaWduZWQgY3VycmVudENoYXJhY3RlciwgdW5z
aWduZWQgbGFzdENoYXJhY3RlciwgdW5zaWduZWQgLyplbmRDaGFyYWN0ZXIqLykKICAgICAgICAg
OiBtX2NoYXJhY3RlcnMoY2hhcmFjdGVycykKICAgICAgICAgLCBtX2N1cnJlbnRDaGFyYWN0ZXIo
Y3VycmVudENoYXJhY3RlcikKICAgICAgICAgLCBtX2xhc3RDaGFyYWN0ZXIobGFzdENoYXJhY3Rl
cikKQEAgLTUzLDEzICs1MywxMyBAQCBwdWJsaWM6CiAgICAgICAgIG1fY3VycmVudENoYXJhY3Rl
ciArPSBhZHZhbmNlTGVuZ3RoOwogICAgIH0KIAotICAgIGludCBjdXJyZW50Q2hhcmFjdGVyKCkg
Y29uc3QgeyByZXR1cm4gbV9jdXJyZW50Q2hhcmFjdGVyOyB9CisgICAgdW5zaWduZWQgY3VycmVu
dENoYXJhY3RlcigpIGNvbnN0IHsgcmV0dXJuIG1fY3VycmVudENoYXJhY3RlcjsgfQogICAgIGNv
bnN0IExDaGFyKiBjaGFyYWN0ZXJzKCkgY29uc3QgeyByZXR1cm4gbV9jaGFyYWN0ZXJzOyB9CiAK
IHByaXZhdGU6CiAgICAgY29uc3QgTENoYXIqIG1fY2hhcmFjdGVyczsKLSAgICBpbnQgbV9jdXJy
ZW50Q2hhcmFjdGVyOwotICAgIGludCBtX2xhc3RDaGFyYWN0ZXI7CisgICAgdW5zaWduZWQgbV9j
dXJyZW50Q2hhcmFjdGVyOworICAgIHVuc2lnbmVkIG1fbGFzdENoYXJhY3RlcjsKIH07CiAKIH0K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1NpbXBsZUZvbnRE
YXRhLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9TaW1wbGVGb250RGF0YS5o
CmluZGV4IDlkZjhjNTdkNjBhNzQyMDJhNzkyNDM2N2FiMzkzOTc2NzY3NTA3NjMuLjg2Yjk1YjEy
OWJiYTZiMjlkMzU2ZmEwYjVlODRlOWQyMDRjMWM0NzYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL1NpbXBsZUZvbnREYXRhLmgKKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvU2ltcGxlRm9udERhdGEuaApAQCAtODksNyArODksNyBAQCBw
dWJsaWM6CiAgICAgICAgIHZpcnR1YWwgdm9pZCBpbml0aWFsaXplRm9udERhdGEoU2ltcGxlRm9u
dERhdGEqLCBmbG9hdCBmb250U2l6ZSkgPSAwOwogICAgICAgICB2aXJ0dWFsIGZsb2F0IHdpZHRo
Rm9yU1ZHR2x5cGgoR2x5cGgsIGZsb2F0IGZvbnRTaXplKSBjb25zdCA9IDA7CiAgICAgICAgIHZp
cnR1YWwgYm9vbCBmaWxsU1ZHR2x5cGhQYWdlKEdseXBoUGFnZSosIHVuc2lnbmVkIG9mZnNldCwg
dW5zaWduZWQgbGVuZ3RoLCBVQ2hhciogYnVmZmVyLCB1bnNpZ25lZCBidWZmZXJMZW5ndGgsIGNv
bnN0IFNpbXBsZUZvbnREYXRhKikgY29uc3QgPSAwOwotICAgICAgICB2aXJ0dWFsIGJvb2wgYXBw
bHlTVkdHbHlwaFNlbGVjdGlvbihXaWR0aEl0ZXJhdG9yJiwgR2x5cGhEYXRhJiwgYm9vbCBtaXJy
b3IsIGludCBjdXJyZW50Q2hhcmFjdGVyLCB1bnNpZ25lZCYgYWR2YW5jZUxlbmd0aCkgY29uc3Qg
PSAwOworICAgICAgICB2aXJ0dWFsIGJvb2wgYXBwbHlTVkdHbHlwaFNlbGVjdGlvbihXaWR0aEl0
ZXJhdG9yJiwgR2x5cGhEYXRhJiwgYm9vbCBtaXJyb3IsIHVuc2lnbmVkIGN1cnJlbnRDaGFyYWN0
ZXIsIHVuc2lnbmVkJiBhZHZhbmNlTGVuZ3RoKSBjb25zdCA9IDA7CiAgICAgfTsKIAogICAgIC8v
IFVzZWQgdG8gY3JlYXRlIHBsYXRmb3JtIGZvbnRzLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvU3Vycm9nYXRlUGFpckF3YXJlVGV4dEl0ZXJhdG9yLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1N1cnJvZ2F0ZVBhaXJBd2FyZVRleHRJ
dGVyYXRvci5jcHAKaW5kZXggOTE1NWU3MTFhOGRhODBkNGViM2RjZjVkYTVhYzMwNWEyOGNiZWE3
OS4uY2U3MDRiZTNmMjM2MDNjODJmODhkMTE1Y2RkNmJlYzBmNTQxNjdlZSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvU3Vycm9nYXRlUGFpckF3YXJlVGV4dEl0
ZXJhdG9yLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9TdXJyb2dh
dGVQYWlyQXdhcmVUZXh0SXRlcmF0b3IuY3BwCkBAIC0yNyw3ICsyNyw3IEBACiAKIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKIAotU3Vycm9nYXRlUGFpckF3YXJlVGV4dEl0ZXJhdG9yOjpTdXJyb2dhdGVQ
YWlyQXdhcmVUZXh0SXRlcmF0b3IoY29uc3QgVUNoYXIqIGNoYXJhY3RlcnMsIGludCBjdXJyZW50
Q2hhcmFjdGVyLCBpbnQgbGFzdENoYXJhY3RlciwgaW50IGVuZENoYXJhY3RlcikKK1N1cnJvZ2F0
ZVBhaXJBd2FyZVRleHRJdGVyYXRvcjo6U3Vycm9nYXRlUGFpckF3YXJlVGV4dEl0ZXJhdG9yKGNv
bnN0IFVDaGFyKiBjaGFyYWN0ZXJzLCB1bnNpZ25lZCBjdXJyZW50Q2hhcmFjdGVyLCB1bnNpZ25l
ZCBsYXN0Q2hhcmFjdGVyLCB1bnNpZ25lZCBlbmRDaGFyYWN0ZXIpCiAgICAgOiBtX2NoYXJhY3Rl
cnMoY2hhcmFjdGVycykKICAgICAsIG1fY3VycmVudENoYXJhY3RlcihjdXJyZW50Q2hhcmFjdGVy
KQogICAgICwgbV9sYXN0Q2hhcmFjdGVyKGxhc3RDaGFyYWN0ZXIpCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9TdXJyb2dhdGVQYWlyQXdhcmVUZXh0SXRlcmF0
b3IuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1N1cnJvZ2F0ZVBhaXJBd2Fy
ZVRleHRJdGVyYXRvci5oCmluZGV4IDg1Yzk2OTRjNzZhMjJjZGVhZWViM2JhODQxYjEwYTBhNTAz
MTY4MTMuLjFhNzE1YzBjYTJkMjQ4M2IyNDcyOTk3NWViNzVjOWZhMjIzNmVkNDkgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1N1cnJvZ2F0ZVBhaXJBd2FyZVRl
eHRJdGVyYXRvci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1N1cnJv
Z2F0ZVBhaXJBd2FyZVRleHRJdGVyYXRvci5oCkBAIC0zMCw3ICszMCw3IEBAIGNsYXNzIFN1cnJv
Z2F0ZVBhaXJBd2FyZVRleHRJdGVyYXRvciB7CiBwdWJsaWM6CiAgICAgLy8gVGhlIHBhc3NlZCBp
biBVQ2hhciBwb2ludGVyIHN0YXJ0cyBhdCAnY3VycmVudENoYXJhY3RlcicuIFRoZSBpdGVyYXRv
ciBvcGVyYXRvZXMgb24gdGhlIHJhbmdlIFtjdXJyZW50Q2hhcmFjdGVyLCBsYXN0Q2hhcmFjdGVy
XS4KICAgICAvLyAnZW5kQ2hhcmFjdGVyJyBkZW5vdGVzIHRoZSBtYXhpbXVtIGxlbmd0aCBvZiB0
aGUgVUNoYXIgYXJyYXksIHdoaWNoIG1pZ2h0IGV4Y2VlZCAnbGFzdENoYXJhY3RlcicuCi0gICAg
U3Vycm9nYXRlUGFpckF3YXJlVGV4dEl0ZXJhdG9yKGNvbnN0IFVDaGFyKiwgaW50IGN1cnJlbnRD
aGFyYWN0ZXIsIGludCBsYXN0Q2hhcmFjdGVyLCBpbnQgZW5kQ2hhcmFjdGVyKTsKKyAgICBTdXJy
b2dhdGVQYWlyQXdhcmVUZXh0SXRlcmF0b3IoY29uc3QgVUNoYXIqLCB1bnNpZ25lZCBjdXJyZW50
Q2hhcmFjdGVyLCB1bnNpZ25lZCBsYXN0Q2hhcmFjdGVyLCB1bnNpZ25lZCBlbmRDaGFyYWN0ZXIp
OwogCiAgICAgaW5saW5lIGJvb2wgY29uc3VtZShVQ2hhcjMyJiBjaGFyYWN0ZXIsIHVuc2lnbmVk
JiBjbHVzdGVyTGVuZ3RoKQogICAgIHsKQEAgLTUyLDcgKzUyLDcgQEAgcHVibGljOgogICAgICAg
ICBtX2N1cnJlbnRDaGFyYWN0ZXIgKz0gYWR2YW5jZUxlbmd0aDsKICAgICB9CiAKLSAgICBpbnQg
Y3VycmVudENoYXJhY3RlcigpIGNvbnN0IHsgcmV0dXJuIG1fY3VycmVudENoYXJhY3RlcjsgfQor
ICAgIHVuc2lnbmVkIGN1cnJlbnRDaGFyYWN0ZXIoKSBjb25zdCB7IHJldHVybiBtX2N1cnJlbnRD
aGFyYWN0ZXI7IH0KICAgICBjb25zdCBVQ2hhciogY2hhcmFjdGVycygpIGNvbnN0IHsgcmV0dXJu
IG1fY2hhcmFjdGVyczsgfQogCiBwcml2YXRlOgpAQCAtNjAsOSArNjAsOSBAQCBwcml2YXRlOgog
ICAgIFVDaGFyMzIgbm9ybWFsaXplVm9pY2luZ01hcmtzKCk7CiAKICAgICBjb25zdCBVQ2hhciog
bV9jaGFyYWN0ZXJzOwotICAgIGludCBtX2N1cnJlbnRDaGFyYWN0ZXI7Ci0gICAgaW50IG1fbGFz
dENoYXJhY3RlcjsKLSAgICBpbnQgbV9lbmRDaGFyYWN0ZXI7CisgICAgdW5zaWduZWQgbV9jdXJy
ZW50Q2hhcmFjdGVyOworICAgIHVuc2lnbmVkIG1fbGFzdENoYXJhY3RlcjsKKyAgICB1bnNpZ25l
ZCBtX2VuZENoYXJhY3RlcjsKIH07CiAKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL1RleHRSdW4uaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL1RleHRSdW4uaAppbmRleCAzNzIwODQ1NmViM2M5YzM2NWRjNTYyZmMzNWUwMzRjMGUxNTI1
MmQxLi4xODQxZDg3Y2M0ZDM0NTM4Y2M0MzVlMmU4MDAxYzIwN2NkYjZiNTkwIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9UZXh0UnVuLmgKKysrIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvVGV4dFJ1bi5oCkBAIC0xNzEsOCArMTcxLDggQEAg
cHVibGljOgogICAgIGNvbnN0IFVDaGFyKiBjaGFyYWN0ZXJzMTYoKSBjb25zdCB7IEFTU0VSVCgh
aXM4Qml0KCkpOyByZXR1cm4gbV9kYXRhLmNoYXJhY3RlcnMxNjsgfQogICAgIAogICAgIGJvb2wg
aXM4Qml0KCkgY29uc3QgeyByZXR1cm4gbV9pczhCaXQ7IH0KLSAgICBpbnQgbGVuZ3RoKCkgY29u
c3QgeyByZXR1cm4gbV9sZW47IH0KLSAgICBpbnQgY2hhcmFjdGVyc0xlbmd0aCgpIGNvbnN0IHsg
cmV0dXJuIG1fY2hhcmFjdGVyc0xlbmd0aDsgfQorICAgIHVuc2lnbmVkIGxlbmd0aCgpIGNvbnN0
IHsgcmV0dXJuIG1fbGVuOyB9CisgICAgdW5zaWduZWQgY2hhcmFjdGVyc0xlbmd0aCgpIGNvbnN0
IHsgcmV0dXJuIG1fY2hhcmFjdGVyc0xlbmd0aDsgfQogICAgIFN0cmluZyBzdHJpbmcoKSBjb25z
dAogICAgIHsKICAgICAgICAgaWYgKGlzOEJpdCgpKQpAQCAtMjE3LDcgKzIxNyw3IEBAIHB1Ymxp
YzoKICAgICAgICAgdmlydHVhbCB+UmVuZGVyaW5nQ29udGV4dCgpIHsgfQogCiAjaWYgRU5BQkxF
KFNWR19GT05UUykKLSAgICAgICAgdmlydHVhbCBHbHlwaERhdGEgZ2x5cGhEYXRhRm9yQ2hhcmFj
dGVyKGNvbnN0IEZvbnQmLCBXaWR0aEl0ZXJhdG9yJiwgVUNoYXIzMiBjaGFyYWN0ZXIsIGJvb2wg
bWlycm9yLCBpbnQgY3VycmVudENoYXJhY3RlciwgdW5zaWduZWQmIGFkdmFuY2VMZW5ndGgpID0g
MDsKKyAgICAgICAgdmlydHVhbCBHbHlwaERhdGEgZ2x5cGhEYXRhRm9yQ2hhcmFjdGVyKGNvbnN0
IEZvbnQmLCBXaWR0aEl0ZXJhdG9yJiwgVUNoYXIzMiBjaGFyYWN0ZXIsIGJvb2wgbWlycm9yLCB1
bnNpZ25lZCBjdXJyZW50Q2hhcmFjdGVyLCB1bnNpZ25lZCYgYWR2YW5jZUxlbmd0aCkgPSAwOwog
ICAgICAgICB2aXJ0dWFsIHZvaWQgZHJhd1NWR0dseXBocyhHcmFwaGljc0NvbnRleHQqLCBjb25z
dCBTaW1wbGVGb250RGF0YSosIGNvbnN0IEdseXBoQnVmZmVyJiwgaW50IGZyb20sIGludCB0bywg
Y29uc3QgRmxvYXRQb2ludCYpIGNvbnN0ID0gMDsKICAgICAgICAgdmlydHVhbCBmbG9hdCBmbG9h
dFdpZHRoVXNpbmdTVkdGb250KGNvbnN0IEZvbnQmLCBjb25zdCBUZXh0UnVuJiwgaW50JiBjaGFy
c0NvbnN1bWVkLCBTdHJpbmcmIGdseXBoTmFtZSkgY29uc3QgPSAwOwogICAgICAgICB2aXJ0dWFs
IGJvb2wgYXBwbHlTVkdLZXJuaW5nKGNvbnN0IFNpbXBsZUZvbnREYXRhKiwgV2lkdGhJdGVyYXRv
ciYsIEdseXBoQnVmZmVyKiwgaW50IGZyb20pIGNvbnN0ID0gMDsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1dpZHRoSXRlcmF0b3IuY3BwIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvV2lkdGhJdGVyYXRvci5jcHAKaW5kZXggNzc3ZGMyOTc4
ZGJmOTdjYmQxNzczZmY2YTBjYmZiMDA1M2M2Y2I1OS4uOTg4OWJkMGVkNjM5ZTZkYzg0NjFkMTI3
NDMwM2MxMmMxYTY0ODUyMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvV2lkdGhJdGVyYXRvci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvV2lkdGhJdGVyYXRvci5jcHAKQEAgLTY4LDcgKzY4LDcgQEAgV2lkdGhJdGVyYXRvcjo6
V2lkdGhJdGVyYXRvcihjb25zdCBGb250KiBmb250LCBjb25zdCBUZXh0UnVuJiBydW4sIEhhc2hT
ZXQ8Y29uc3QKICAgICB9CiB9CiAKLUdseXBoRGF0YSBXaWR0aEl0ZXJhdG9yOjpnbHlwaERhdGFG
b3JDaGFyYWN0ZXIoVUNoYXIzMiBjaGFyYWN0ZXIsIGJvb2wgbWlycm9yLCBpbnQgY3VycmVudENo
YXJhY3RlciwgdW5zaWduZWQmIGFkdmFuY2VMZW5ndGgpCitHbHlwaERhdGEgV2lkdGhJdGVyYXRv
cjo6Z2x5cGhEYXRhRm9yQ2hhcmFjdGVyKFVDaGFyMzIgY2hhcmFjdGVyLCBib29sIG1pcnJvciwg
dW5zaWduZWQgY3VycmVudENoYXJhY3RlciwgdW5zaWduZWQmIGFkdmFuY2VMZW5ndGgpCiB7CiAg
ICAgQVNTRVJUKG1fZm9udCk7CiAKQEAgLTk5LDcgKzk5LDcgQEAgcHVibGljOgogCiB0eXBlZGVm
IFZlY3RvcjxzdGQ6OnBhaXI8aW50LCBPcmlnaW5hbEFkdmFuY2VzRm9yQ2hhcmFjdGVyVHJlYXRl
ZEFzU3BhY2U+LCA2ND4gQ2hhcmFjdGVyc1RyZWF0ZWRBc1NwYWNlOwogCi1zdGF0aWMgaW5saW5l
IGZsb2F0IGFwcGx5Rm9udFRyYW5zZm9ybXMoR2x5cGhCdWZmZXIqIGdseXBoQnVmZmVyLCBib29s
IGx0ciwgaW50JiBsYXN0R2x5cGhDb3VudCwgY29uc3QgU2ltcGxlRm9udERhdGEqIGZvbnREYXRh
LCBXaWR0aEl0ZXJhdG9yJiBpdGVyYXRvciwgVHlwZXNldHRpbmdGZWF0dXJlcyB0eXBlc2V0dGlu
Z0ZlYXR1cmVzLCBDaGFyYWN0ZXJzVHJlYXRlZEFzU3BhY2UmIGNoYXJhY3RlcnNUcmVhdGVkQXNT
cGFjZSkKK3N0YXRpYyBpbmxpbmUgZmxvYXQgYXBwbHlGb250VHJhbnNmb3JtcyhHbHlwaEJ1ZmZl
ciogZ2x5cGhCdWZmZXIsIGJvb2wgbHRyLCB1bnNpZ25lZCYgbGFzdEdseXBoQ291bnQsIGNvbnN0
IFNpbXBsZUZvbnREYXRhKiBmb250RGF0YSwgV2lkdGhJdGVyYXRvciYgaXRlcmF0b3IsIFR5cGVz
ZXR0aW5nRmVhdHVyZXMgdHlwZXNldHRpbmdGZWF0dXJlcywgQ2hhcmFjdGVyc1RyZWF0ZWRBc1Nw
YWNlJiBjaGFyYWN0ZXJzVHJlYXRlZEFzU3BhY2UpCiB7CiAgICAgQVNTRVJUKHR5cGVzZXR0aW5n
RmVhdHVyZXMgJiAoS2VybmluZyB8IExpZ2F0dXJlcykpOwogCkBAIC0xNjUsMTQgKzE2NSwxNCBA
QCBpbmxpbmUgdW5zaWduZWQgV2lkdGhJdGVyYXRvcjo6YWR2YW5jZUludGVybmFsKFRleHRJdGVy
YXRvciYgdGV4dEl0ZXJhdG9yLCBHbHlwaAogCiAgICAgY29uc3QgU2ltcGxlRm9udERhdGEqIHBy
aW1hcnlGb250ID0gbV9mb250LT5wcmltYXJ5Rm9udCgpOwogICAgIGNvbnN0IFNpbXBsZUZvbnRE
YXRhKiBsYXN0Rm9udERhdGEgPSBwcmltYXJ5Rm9udDsKLSAgICBpbnQgbGFzdEdseXBoQ291bnQg
PSBnbHlwaEJ1ZmZlciA/IGdseXBoQnVmZmVyLT5zaXplKCkgOiAwOworICAgIHVuc2lnbmVkIGxh
c3RHbHlwaENvdW50ID0gZ2x5cGhCdWZmZXIgPyBnbHlwaEJ1ZmZlci0+c2l6ZSgpIDogMDsKIAog
ICAgIFVDaGFyMzIgY2hhcmFjdGVyID0gMDsKICAgICB1bnNpZ25lZCBjbHVzdGVyTGVuZ3RoID0g
MDsKICAgICBDaGFyYWN0ZXJzVHJlYXRlZEFzU3BhY2UgY2hhcmFjdGVyc1RyZWF0ZWRBc1NwYWNl
OwogICAgIHdoaWxlICh0ZXh0SXRlcmF0b3IuY29uc3VtZShjaGFyYWN0ZXIsIGNsdXN0ZXJMZW5n
dGgpKSB7CiAgICAgICAgIHVuc2lnbmVkIGFkdmFuY2VMZW5ndGggPSBjbHVzdGVyTGVuZ3RoOwot
ICAgICAgICBpbnQgY3VycmVudENoYXJhY3RlciA9IHRleHRJdGVyYXRvci5jdXJyZW50Q2hhcmFj
dGVyKCk7CisgICAgICAgIHVuc2lnbmVkIGN1cnJlbnRDaGFyYWN0ZXIgPSB0ZXh0SXRlcmF0b3Iu
Y3VycmVudENoYXJhY3RlcigpOwogICAgICAgICBjb25zdCBHbHlwaERhdGEmIGdseXBoRGF0YSA9
IGdseXBoRGF0YUZvckNoYXJhY3RlcihjaGFyYWN0ZXIsIHJ0bCwgY3VycmVudENoYXJhY3Rlciwg
YWR2YW5jZUxlbmd0aCk7CiAgICAgICAgIEdseXBoIGdseXBoID0gZ2x5cGhEYXRhLmdseXBoOwog
ICAgICAgICBjb25zdCBTaW1wbGVGb250RGF0YSogZm9udERhdGEgPSBnbHlwaERhdGEuZm9udERh
dGE7CkBAIC0zMjcsMTQgKzMyNywxNCBAQCBpbmxpbmUgdW5zaWduZWQgV2lkdGhJdGVyYXRvcjo6
YWR2YW5jZUludGVybmFsKFRleHRJdGVyYXRvciYgdGV4dEl0ZXJhdG9yLCBHbHlwaAogICAgIHJl
dHVybiBjb25zdW1lZENoYXJhY3RlcnM7CiB9CiAKLXVuc2lnbmVkIFdpZHRoSXRlcmF0b3I6OmFk
dmFuY2UoaW50IG9mZnNldCwgR2x5cGhCdWZmZXIqIGdseXBoQnVmZmVyKQordW5zaWduZWQgV2lk
dGhJdGVyYXRvcjo6YWR2YW5jZSh1bnNpZ25lZCBvZmZzZXQsIEdseXBoQnVmZmVyKiBnbHlwaEJ1
ZmZlcikKIHsKLSAgICBpbnQgbGVuZ3RoID0gbV9ydW4ubGVuZ3RoKCk7CisgICAgdW5zaWduZWQg
bGVuZ3RoID0gbV9ydW4ubGVuZ3RoKCk7CiAKICAgICBpZiAob2Zmc2V0ID4gbGVuZ3RoKQogICAg
ICAgICBvZmZzZXQgPSBsZW5ndGg7CiAKLSAgICBpZiAobV9jdXJyZW50Q2hhcmFjdGVyID49IHN0
YXRpY19jYXN0PHVuc2lnbmVkPihvZmZzZXQpKQorICAgIGlmIChtX2N1cnJlbnRDaGFyYWN0ZXIg
Pj0gb2Zmc2V0KQogICAgICAgICByZXR1cm4gMDsKIAogICAgIGlmIChtX3J1bi5pczhCaXQoKSkg
ewpAQCAtMzQ4LDEwICszNDgsMTAgQEAgdW5zaWduZWQgV2lkdGhJdGVyYXRvcjo6YWR2YW5jZShp
bnQgb2Zmc2V0LCBHbHlwaEJ1ZmZlciogZ2x5cGhCdWZmZXIpCiAKIGJvb2wgV2lkdGhJdGVyYXRv
cjo6YWR2YW5jZU9uZUNoYXJhY3RlcihmbG9hdCYgd2lkdGgsIEdseXBoQnVmZmVyJiBnbHlwaEJ1
ZmZlcikKIHsKLSAgICBpbnQgb2xkU2l6ZSA9IGdseXBoQnVmZmVyLnNpemUoKTsKKyAgICB1bnNp
Z25lZCBvbGRTaXplID0gZ2x5cGhCdWZmZXIuc2l6ZSgpOwogICAgIGFkdmFuY2UobV9jdXJyZW50
Q2hhcmFjdGVyICsgMSwgJmdseXBoQnVmZmVyKTsKICAgICBmbG9hdCB3ID0gMDsKLSAgICBmb3Ig
KGludCBpID0gb2xkU2l6ZTsgaSA8IGdseXBoQnVmZmVyLnNpemUoKTsgKytpKQorICAgIGZvciAo
dW5zaWduZWQgaSA9IG9sZFNpemU7IGkgPCBnbHlwaEJ1ZmZlci5zaXplKCk7ICsraSkKICAgICAg
ICAgdyArPSBnbHlwaEJ1ZmZlci5hZHZhbmNlQXQoaSkud2lkdGgoKTsKICAgICB3aWR0aCA9IHc7
CiAgICAgcmV0dXJuIGdseXBoQnVmZmVyLnNpemUoKSA+IG9sZFNpemU7CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9XaWR0aEl0ZXJhdG9yLmggYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9XaWR0aEl0ZXJhdG9yLmgKaW5kZXggY2QwNmQ3YzRk
Y2M0MTIwYTY2YTNkMDQ0ODdhZTg4ZmRjYTEzOThiNi4uZmRjNGJhNGNlMzU2MWExNWQ0MTEzYTNm
MTI5ZGRiZTVmMTExMThkMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvV2lkdGhJdGVyYXRvci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL1dpZHRoSXRlcmF0b3IuaApAQCAtNDEsNyArNDEsNyBAQCBzdHJ1Y3QgV2lkdGhJdGVyYXRv
ciB7CiBwdWJsaWM6CiAgICAgV2lkdGhJdGVyYXRvcihjb25zdCBGb250KiwgY29uc3QgVGV4dFJ1
biYsIEhhc2hTZXQ8Y29uc3QgU2ltcGxlRm9udERhdGEqPiogZmFsbGJhY2tGb250cyA9IDAsIGJv
b2wgYWNjb3VudEZvckdseXBoQm91bmRzID0gZmFsc2UsIGJvb2wgZm9yVGV4dEVtcGhhc2lzID0g
ZmFsc2UpOwogCi0gICAgdW5zaWduZWQgYWR2YW5jZShpbnQgdG8sIEdseXBoQnVmZmVyKik7Cisg
ICAgdW5zaWduZWQgYWR2YW5jZSh1bnNpZ25lZCB0bywgR2x5cGhCdWZmZXIqKTsKICAgICBib29s
IGFkdmFuY2VPbmVDaGFyYWN0ZXIoZmxvYXQmIHdpZHRoLCBHbHlwaEJ1ZmZlciYpOwogCiAgICAg
ZmxvYXQgbWF4R2x5cGhCb3VuZGluZ0JveFkoKSBjb25zdCB7IEFTU0VSVChtX2FjY291bnRGb3JH
bHlwaEJvdW5kcyk7IHJldHVybiBtX21heEdseXBoQm91bmRpbmdCb3hZOyB9CkBAIC04Nyw3ICs4
Nyw3IEBAIHB1YmxpYzoKICNlbmRpZgogCiBwcml2YXRlOgotICAgIEdseXBoRGF0YSBnbHlwaERh
dGFGb3JDaGFyYWN0ZXIoVUNoYXIzMiwgYm9vbCBtaXJyb3IsIGludCBjdXJyZW50Q2hhcmFjdGVy
LCB1bnNpZ25lZCYgYWR2YW5jZUxlbmd0aCk7CisgICAgR2x5cGhEYXRhIGdseXBoRGF0YUZvckNo
YXJhY3RlcihVQ2hhcjMyLCBib29sIG1pcnJvciwgdW5zaWduZWQgY3VycmVudENoYXJhY3Rlciwg
dW5zaWduZWQmIGFkdmFuY2VMZW5ndGgpOwogICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBUZXh0SXRl
cmF0b3I+CiAgICAgaW5saW5lIHVuc2lnbmVkIGFkdmFuY2VJbnRlcm5hbChUZXh0SXRlcmF0b3Im
LCBHbHlwaEJ1ZmZlciopOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jYWlyby9Gb250Q2Fpcm8uY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2Fpcm8vRm9udENhaXJvLmNwcAppbmRleCBjMTkwYWJhMjNmY2VhMzlmNGI5NDhkMjI3
MzE1ZWY1YmYzMTExNWE3Li4yOTE3MWJmMGMxZTlhMzcwNWQ5M2M3MGU2YTdlNTdhYjYwMTQwZjNk
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9Gb250
Q2Fpcm8uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0Zv
bnRDYWlyby5jcHAKQEAgLTk0LDcgKzk0LDcgQEAgc3RhdGljIHZvaWQgZHJhd0dseXBoc1NoYWRv
dyhHcmFwaGljc0NvbnRleHQqIGdyYXBoaWNzQ29udGV4dCwgY29uc3QgRmxvYXRQb2ludCYKIH0K
IAogdm9pZCBGb250OjpkcmF3R2x5cGhzKEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgY29uc3Qg
U2ltcGxlRm9udERhdGEqIGZvbnQsIGNvbnN0IEdseXBoQnVmZmVyJiBnbHlwaEJ1ZmZlciwKLSAg
ICAgICAgICAgICAgICAgICAgICBpbnQgZnJvbSwgaW50IG51bUdseXBocywgY29uc3QgRmxvYXRQ
b2ludCYgcG9pbnQpIGNvbnN0CisgICAgdW5zaWduZWQgZnJvbSwgdW5zaWduZWQgbnVtR2x5cGhz
LCBjb25zdCBGbG9hdFBvaW50JiBwb2ludCkgY29uc3QKIHsKICAgICBpZiAoIWZvbnQtPnBsYXRm
b3JtRGF0YSgpLnNpemUoKSkKICAgICAgICAgcmV0dXJuOwpAQCAtMTAyLDcgKzEwMiw3IEBAIHZv
aWQgRm9udDo6ZHJhd0dseXBocyhHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IFNpbXBs
ZUZvbnREYXRhKiBmb250LCBjb25zCiAgICAgR2x5cGhCdWZmZXJHbHlwaCogZ2x5cGhzID0gY29u
c3RfY2FzdDxHbHlwaEJ1ZmZlckdseXBoKj4oZ2x5cGhCdWZmZXIuZ2x5cGhzKGZyb20pKTsKIAog
ICAgIGZsb2F0IG9mZnNldCA9IHBvaW50LngoKTsKLSAgICBmb3IgKGludCBpID0gMDsgaSA8IG51
bUdseXBoczsgaSsrKSB7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG51bUdseXBoczsg
aSsrKSB7CiAgICAgICAgIGdseXBoc1tpXS54ID0gb2Zmc2V0OwogICAgICAgICBnbHlwaHNbaV0u
eSA9IHBvaW50LnkoKTsKICAgICAgICAgb2Zmc2V0ICs9IGdseXBoQnVmZmVyLmFkdmFuY2VBdChm
cm9tICsgaSkud2lkdGgoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2NhaXJvL0ZvbnRDYWlyb0hhcmZidXp6TkcuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2Fpcm8vRm9udENhaXJvSGFyZmJ1enpORy5jcHAKaW5kZXggZTg0Nzgx
MGEzOWFiOGYyZmY1ZmZlZmJlZjMyYjUxMmRiMGZlOWJmZi4uY2IwOGNjYWQzNWY5ODhjMTFlNGQx
YTc4ZTRiOGIxYTZhNDhkMjkyMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2Fpcm8vRm9udENhaXJvSGFyZmJ1enpORy5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vRm9udENhaXJvSGFyZmJ1enpORy5jcHAKQEAgLTM4
LDcgKzM4LDcgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1mbG9hdCBGb250OjpkcmF3Q29t
cGxleFRleHQoR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBjb25zdCBUZXh0UnVuJiBydW4sIGNv
bnN0IEZsb2F0UG9pbnQmIHBvaW50LCBpbnQsIGludCkgY29uc3QKK2Zsb2F0IEZvbnQ6OmRyYXdD
b21wbGV4VGV4dChHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IFRleHRSdW4mIHJ1biwg
Y29uc3QgRmxvYXRQb2ludCYgcG9pbnQsIHVuc2lnbmVkLCB1bnNpZ25lZCkgY29uc3QKIHsKICAg
ICBHbHlwaEJ1ZmZlciBnbHlwaEJ1ZmZlcjsKICAgICBIYXJmQnV6elNoYXBlciBzaGFwZXIodGhp
cywgcnVuKTsKQEAgLTUyLDcgKzUyLDcgQEAgZmxvYXQgRm9udDo6ZHJhd0NvbXBsZXhUZXh0KEdy
YXBoaWNzQ29udGV4dCogY29udGV4dCwgY29uc3QgVGV4dFJ1biYgcnVuLCBjb25zdAogICAgIHJl
dHVybiAwOwogfQogCi12b2lkIEZvbnQ6OmRyYXdFbXBoYXNpc01hcmtzRm9yQ29tcGxleFRleHQo
R3JhcGhpY3NDb250ZXh0KiAvKiBjb250ZXh0ICovLCBjb25zdCBUZXh0UnVuJiAvKiBydW4gKi8s
IGNvbnN0IEF0b21pY1N0cmluZyYgLyogbWFyayAqLywgY29uc3QgRmxvYXRQb2ludCYgLyogcG9p
bnQgKi8sIGludCAvKiBmcm9tICovLCBpbnQgLyogdG8gKi8pIGNvbnN0Cit2b2lkIEZvbnQ6OmRy
YXdFbXBoYXNpc01hcmtzRm9yQ29tcGxleFRleHQoR3JhcGhpY3NDb250ZXh0KiAvKiBjb250ZXh0
ICovLCBjb25zdCBUZXh0UnVuJiAvKiBydW4gKi8sIGNvbnN0IEF0b21pY1N0cmluZyYgLyogbWFy
ayAqLywgY29uc3QgRmxvYXRQb2ludCYgLyogcG9pbnQgKi8sIHVuc2lnbmVkIC8qIGZyb20gKi8s
IHVuc2lnbmVkIC8qIHRvICovKSBjb25zdAogewogICAgIG5vdEltcGxlbWVudGVkKCk7CiB9CkBA
IC04NSw3ICs4NSw3IEBAIGludCBGb250OjpvZmZzZXRGb3JQb3NpdGlvbkZvckNvbXBsZXhUZXh0
KGNvbnN0IFRleHRSdW4mIHJ1biwgZmxvYXQgeCwgYm9vbCkgY29uCiAgICAgcmV0dXJuIDA7CiB9
CiAKLXZvaWQgRm9udDo6YWRqdXN0U2VsZWN0aW9uUmVjdEZvckNvbXBsZXhUZXh0KGNvbnN0IFRl
eHRSdW4mIHJ1biwgTGF5b3V0UmVjdCYgc2VsZWN0aW9uUmVjdCwgaW50IGZyb20sIGludCB0bykg
Y29uc3QKK3ZvaWQgRm9udDo6YWRqdXN0U2VsZWN0aW9uUmVjdEZvckNvbXBsZXhUZXh0KGNvbnN0
IFRleHRSdW4mIHJ1biwgTGF5b3V0UmVjdCYgc2VsZWN0aW9uUmVjdCwgdW5zaWduZWQgZnJvbSwg
dW5zaWduZWQgdG8pIGNvbnN0CiB7CiAgICAgSGFyZkJ1enpTaGFwZXIgc2hhcGVyKHRoaXMsIHJ1
bik7CiAgICAgaWYgKHNoYXBlci5zaGFwZSgpKSB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9oYXJmYnV6ei9IYXJmQnV6elNoYXBlci5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9oYXJmYnV6ei9IYXJmQnV6elNoYXBlci5jcHAKaW5k
ZXggOWI4ZTRlMGE5ZDIxM2I1MjU2ZDc3YzBiM2ZkYjg1MmNjMzZhNTZlMi4uNDIzNGQ2YTE0ZTJi
OGQ3ZTJlMDFkM2JkNjhmYTEyNzQ2YWUwMGQzZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvaGFyZmJ1enovSGFyZkJ1enpTaGFwZXIuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2hhcmZidXp6L0hhcmZCdXp6U2hhcGVyLmNwcApA
QCAtMjU2LDcgKzI1Niw3IEBAIHZvaWQgSGFyZkJ1enpTaGFwZXI6OnNldE5vcm1hbGl6ZWRCdWZm
ZXIoTm9ybWFsaXplTW9kZSBub3JtYWxpemVNb2RlKQogICAgIH0gZWxzZQogICAgICAgICBydW5D
aGFyYWN0ZXJzID0gbV9ydW4uY2hhcmFjdGVyczE2KCk7CiAKLSAgICBmb3IgKGludCBpID0gMDsg
aSA8IG1fcnVuLmxlbmd0aCgpOyArK2kpIHsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwg
bV9ydW4ubGVuZ3RoKCk7ICsraSkgewogICAgICAgICBVQ2hhciBjaCA9IHJ1bkNoYXJhY3RlcnNb
aV07CiAgICAgICAgIGlmICg6OnVibG9ja19nZXRDb2RlKGNoKSA9PSBVQkxPQ0tfQ09NQklOSU5H
X0RJQUNSSVRJQ0FMX01BUktTKSB7CiAgICAgICAgICAgICBpY3U6Ok5vcm1hbGl6ZXI6Om5vcm1h
bGl6ZShpY3U6OlVuaWNvZGVTdHJpbmcocnVuQ2hhcmFjdGVycywKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL21hYy9Gb250Q29tcGxleFRleHRNYWMuY3BwIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0ZvbnRDb21wbGV4VGV4dE1hYy5j
cHAKaW5kZXggODMyNWIyZjVkZTdhNDRkZTdiNmE4NjAxYTY3ZDExMmQ1ZTAxOGY1Ny4uZmJlMTI1
YTc5ZWQ1ODc3NDhjODkzNTZkNGIxYTBmMjhhNjZlNzlhNiAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0ZvbnRDb21wbGV4VGV4dE1hYy5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0ZvbnRDb21wbGV4VGV4dE1hYy5j
cHAKQEAgLTM3LDcgKzM3LDcgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi12b2lkIEZvbnQ6
OmFkanVzdFNlbGVjdGlvblJlY3RGb3JDb21wbGV4VGV4dChjb25zdCBUZXh0UnVuJiBydW4sIExh
eW91dFJlY3QmIHNlbGVjdGlvblJlY3QsIGludCBmcm9tLCBpbnQgdG8pIGNvbnN0Cit2b2lkIEZv
bnQ6OmFkanVzdFNlbGVjdGlvblJlY3RGb3JDb21wbGV4VGV4dChjb25zdCBUZXh0UnVuJiBydW4s
IExheW91dFJlY3QmIHNlbGVjdGlvblJlY3QsIHVuc2lnbmVkIGZyb20sIHVuc2lnbmVkIHRvKSBj
b25zdAogewogICAgIENvbXBsZXhUZXh0Q29udHJvbGxlciBjb250cm9sbGVyKHRoaXMsIHJ1bik7
CiAgICAgY29udHJvbGxlci5hZHZhbmNlKGZyb20pOwpAQCAtNTIsNyArNTIsNyBAQCB2b2lkIEZv
bnQ6OmFkanVzdFNlbGVjdGlvblJlY3RGb3JDb21wbGV4VGV4dChjb25zdCBUZXh0UnVuJiBydW4s
IExheW91dFJlY3QmIHNlbAogICAgIHNlbGVjdGlvblJlY3Quc2V0V2lkdGgoYWZ0ZXJXaWR0aCAt
IGJlZm9yZVdpZHRoKTsKIH0KIAotZmxvYXQgRm9udDo6Z2V0R2x5cGhzQW5kQWR2YW5jZXNGb3JD
b21wbGV4VGV4dChjb25zdCBUZXh0UnVuJiBydW4sIGludCBmcm9tLCBpbnQgdG8sIEdseXBoQnVm
ZmVyJiBnbHlwaEJ1ZmZlciwgRm9yVGV4dEVtcGhhc2lzT3JOb3QgZm9yVGV4dEVtcGhhc2lzKSBj
b25zdAorZmxvYXQgRm9udDo6Z2V0R2x5cGhzQW5kQWR2YW5jZXNGb3JDb21wbGV4VGV4dChjb25z
dCBUZXh0UnVuJiBydW4sIHVuc2lnbmVkIGZyb20sIHVuc2lnbmVkIHRvLCBHbHlwaEJ1ZmZlciYg
Z2x5cGhCdWZmZXIsIEZvclRleHRFbXBoYXNpc09yTm90IGZvclRleHRFbXBoYXNpcykgY29uc3QK
IHsKICAgICBmbG9hdCBpbml0aWFsQWR2YW5jZTsKIApAQCAtNzUsNyArNzUsNyBAQCBmbG9hdCBG
b250OjpnZXRHbHlwaHNBbmRBZHZhbmNlc0ZvckNvbXBsZXhUZXh0KGNvbnN0IFRleHRSdW4mIHJ1
biwgaW50IGZyb20sIGludAogICAgIHJldHVybiBpbml0aWFsQWR2YW5jZTsKIH0KIAotZmxvYXQg
Rm9udDo6ZHJhd0NvbXBsZXhUZXh0KEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgY29uc3QgVGV4
dFJ1biYgcnVuLCBjb25zdCBGbG9hdFBvaW50JiBwb2ludCwgaW50IGZyb20sIGludCB0bykgY29u
c3QKK2Zsb2F0IEZvbnQ6OmRyYXdDb21wbGV4VGV4dChHcmFwaGljc0NvbnRleHQqIGNvbnRleHQs
IGNvbnN0IFRleHRSdW4mIHJ1biwgY29uc3QgRmxvYXRQb2ludCYgcG9pbnQsIHVuc2lnbmVkIGZy
b20sIHVuc2lnbmVkIHRvKSBjb25zdAogewogICAgIC8vIFRoaXMgZ2x5cGggYnVmZmVyIGhvbGRz
IG91ciBnbHlwaHMgKyBhZHZhbmNlcyArIGZvbnQgZGF0YSBmb3IgZWFjaCBnbHlwaC4KICAgICBH
bHlwaEJ1ZmZlciBnbHlwaEJ1ZmZlcjsKQEAgLTkzLDcgKzkzLDcgQEAgZmxvYXQgRm9udDo6ZHJh
d0NvbXBsZXhUZXh0KEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgY29uc3QgVGV4dFJ1biYgcnVu
LCBjb25zdAogICAgIHJldHVybiBzdGFydFBvaW50LngoKSAtIHN0YXJ0WDsKIH0KIAotdm9pZCBG
b250OjpkcmF3RW1waGFzaXNNYXJrc0ZvckNvbXBsZXhUZXh0KEdyYXBoaWNzQ29udGV4dCogY29u
dGV4dCwgY29uc3QgVGV4dFJ1biYgcnVuLCBjb25zdCBBdG9taWNTdHJpbmcmIG1hcmssIGNvbnN0
IEZsb2F0UG9pbnQmIHBvaW50LCBpbnQgZnJvbSwgaW50IHRvKSBjb25zdAordm9pZCBGb250Ojpk
cmF3RW1waGFzaXNNYXJrc0ZvckNvbXBsZXhUZXh0KEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwg
Y29uc3QgVGV4dFJ1biYgcnVuLCBjb25zdCBBdG9taWNTdHJpbmcmIG1hcmssIGNvbnN0IEZsb2F0
UG9pbnQmIHBvaW50LCB1bnNpZ25lZCBmcm9tLCB1bnNpZ25lZCB0bykgY29uc3QKIHsKICAgICBH
bHlwaEJ1ZmZlciBnbHlwaEJ1ZmZlcjsKICAgICBmbG9hdCBpbml0aWFsQWR2YW5jZSA9IGdldEds
eXBoc0FuZEFkdmFuY2VzRm9yQ29tcGxleFRleHQocnVuLCBmcm9tLCB0bywgZ2x5cGhCdWZmZXIs
IEZvclRleHRFbXBoYXNpcyk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9tYWMvRm9udE1hYy5tbSBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L21hYy9Gb250TWFjLm1tCmluZGV4IGM3NzFlZTllOWI1YzkwYTRhM2U5ZTBiNzhmOTJiZTcwZTI4
ZTczMGYuLjA1OWUxZmVjZWM0NzZmMjkzNDg3NmI0ODRmZWJhZDlkMjdjNmIyN2IgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL21hYy9Gb250TWFjLm1tCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL21hYy9Gb250TWFjLm1tCkBAIC0xODQs
NyArMTg0LDcgQEAgc3RhdGljIHZvaWQgc2hvd0dseXBoc1dpdGhBZHZhbmNlcyhjb25zdCBGbG9h
dFBvaW50JiBwb2ludCwgY29uc3QgU2ltcGxlRm9udERhdGEKICAgICB9CiB9CiAKLXZvaWQgRm9u
dDo6ZHJhd0dseXBocyhHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IFNpbXBsZUZvbnRE
YXRhKiBmb250LCBjb25zdCBHbHlwaEJ1ZmZlciYgZ2x5cGhCdWZmZXIsIGludCBmcm9tLCBpbnQg
bnVtR2x5cGhzLCBjb25zdCBGbG9hdFBvaW50JiBhbmNob3JQb2ludCkgY29uc3QKK3ZvaWQgRm9u
dDo6ZHJhd0dseXBocyhHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IFNpbXBsZUZvbnRE
YXRhKiBmb250LCBjb25zdCBHbHlwaEJ1ZmZlciYgZ2x5cGhCdWZmZXIsIHVuc2lnbmVkIGZyb20s
IHVuc2lnbmVkIG51bUdseXBocywgY29uc3QgRmxvYXRQb2ludCYgYW5jaG9yUG9pbnQpIGNvbnN0
CiB7CiAgICAgY29uc3QgRm9udFBsYXRmb3JtRGF0YSYgcGxhdGZvcm1EYXRhID0gZm9udC0+cGxh
dGZvcm1EYXRhKCk7CiAgICAgaWYgKCFwbGF0Zm9ybURhdGEuc2l6ZSgpKQpAQCAtNDY4LDcgKzQ2
OCw3IEBAIHByaXZhdGU6CiAgICAgdmlydHVhbCB2b2lkIGFkdmFuY2UoKSBvdmVycmlkZTsKICAg
ICB2b2lkIG1vdmVUb05leHRWYWxpZEdseXBoKCk7CiAKLSAgICBpbnQgbV9pbmRleDsKKyAgICB1
bnNpZ25lZCBtX2luZGV4OwogICAgIGNvbnN0IFRleHRSdW4mIG1fdGV4dFJ1bjsKICAgICBjb25z
dCBHbHlwaEJ1ZmZlciYgbV9nbHlwaEJ1ZmZlcjsKICAgICBjb25zdCBTaW1wbGVGb250RGF0YSog
bV9mb250RGF0YTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L3dpbi9Gb250Q0dXaW4uY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2lu
L0ZvbnRDR1dpbi5jcHAKaW5kZXggYmExM2RkMGQxNWRjMjcyNzZlNTI1MDRiZTYwOTFmMzNkYTE0
ZTdjZC4uNzZiODY4NTU1ZDVmZDk5YjRlMzIwYjFiMTRiNjNkMTk3ZGI4ZTY0ZCAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ZvbnRDR1dpbi5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ZvbnRDR1dpbi5jcHAKQEAg
LTEyOCw3ICsxMjgsNyBAQCBzdGF0aWMgQ0dQYXRoUmVmIGNyZWF0ZVBhdGhGb3JHbHlwaChIREMg
aGRjLCBHbHlwaCBnbHlwaCkKIH0KIAogdm9pZCBGb250OjpkcmF3R2x5cGhzKEdyYXBoaWNzQ29u
dGV4dCogZ3JhcGhpY3NDb250ZXh0LCBjb25zdCBTaW1wbGVGb250RGF0YSogZm9udCwgY29uc3Qg
R2x5cGhCdWZmZXImIGdseXBoQnVmZmVyLCAKLSAgICAgICAgICAgICAgICAgICAgICBpbnQgZnJv
bSwgaW50IG51bUdseXBocywgY29uc3QgRmxvYXRQb2ludCYgcG9pbnQpIGNvbnN0CisgICAgdW5z
aWduZWQgZnJvbSwgdW5zaWduZWQgbnVtR2x5cGhzLCBjb25zdCBGbG9hdFBvaW50JiBwb2ludCkg
Y29uc3QKIHsKICAgICBDR0NvbnRleHRSZWYgY2dDb250ZXh0ID0gZ3JhcGhpY3NDb250ZXh0LT5w
bGF0Zm9ybUNvbnRleHQoKTsKICAgICBib29sIHNob3VsZFVzZUZvbnRTbW9vdGhpbmcgPSBXZWJD
b3JlU2hvdWxkVXNlRm9udFNtb290aGluZygpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0ZvbnRXaW4uY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3Mvd2luL0ZvbnRXaW4uY3BwCmluZGV4IGM2NmIyYzQwZjY3NzY2Mjk1MGY1MjJm
OGZjZDNlMzk1ZDY1Mjk0NzIuLjA2YzZjMDAyYzBhYjljYzJjMzg4MDgxOTU2MTRlYzI3N2QxOTM2
YzAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9Gb250
V2luLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vRm9udFdp
bi5jcHAKQEAgLTUxLDcgKzUxLDcgQEAgYm9vbCBGb250OjpjYW5FeHBhbmRBcm91bmRJZGVvZ3Jh
cGhzSW5Db21wbGV4VGV4dCgpCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi12b2lkIEZvbnQ6OmFk
anVzdFNlbGVjdGlvblJlY3RGb3JDb21wbGV4VGV4dChjb25zdCBUZXh0UnVuJiBydW4sIExheW91
dFJlY3QmIHNlbGVjdGlvblJlY3QsIGludCBmcm9tLCBpbnQgdG8pIGNvbnN0Cit2b2lkIEZvbnQ6
OmFkanVzdFNlbGVjdGlvblJlY3RGb3JDb21wbGV4VGV4dChjb25zdCBUZXh0UnVuJiBydW4sIExh
eW91dFJlY3QmIHNlbGVjdGlvblJlY3QsIHVuc2lnbmVkIGZyb20sIHVuc2lnbmVkIHRvKSBjb25z
dAogewogICAgIFVuaXNjcmliZUNvbnRyb2xsZXIgaXQodGhpcywgcnVuKTsKICAgICBpdC5hZHZh
bmNlKGZyb20pOwpAQCAtNjcsNyArNjcsNyBAQCB2b2lkIEZvbnQ6OmFkanVzdFNlbGVjdGlvblJl
Y3RGb3JDb21wbGV4VGV4dChjb25zdCBUZXh0UnVuJiBydW4sIExheW91dFJlY3QmIHNlbAogICAg
IHNlbGVjdGlvblJlY3Quc2V0V2lkdGgoYWZ0ZXJXaWR0aCAtIGJlZm9yZVdpZHRoKTsKIH0KIAot
ZmxvYXQgRm9udDo6Z2V0R2x5cGhzQW5kQWR2YW5jZXNGb3JDb21wbGV4VGV4dChjb25zdCBUZXh0
UnVuJiBydW4sIGludCBmcm9tLCBpbnQgdG8sIEdseXBoQnVmZmVyJiBnbHlwaEJ1ZmZlciwgRm9y
VGV4dEVtcGhhc2lzT3JOb3QgZm9yVGV4dEVtcGhhc2lzKSBjb25zdAorZmxvYXQgRm9udDo6Z2V0
R2x5cGhzQW5kQWR2YW5jZXNGb3JDb21wbGV4VGV4dChjb25zdCBUZXh0UnVuJiBydW4sIHVuc2ln
bmVkIGZyb20sIHVuc2lnbmVkIHRvLCBHbHlwaEJ1ZmZlciYgZ2x5cGhCdWZmZXIsIEZvclRleHRF
bXBoYXNpc09yTm90IGZvclRleHRFbXBoYXNpcykgY29uc3QKIHsKICAgICBpZiAoZm9yVGV4dEVt
cGhhc2lzKSB7CiAgICAgICAgIC8vIEZJWE1FOiBBZGQgZm9yVGV4dEVtcGhhc2lzIHBhcmVtZXRl
ciB0byBVbmlzY3JpYmVDb250cm9sbGVyIGFuZCB1c2UgaXQuCkBAIC05Miw3ICs5Miw3IEBAIGZs
b2F0IEZvbnQ6OmdldEdseXBoc0FuZEFkdmFuY2VzRm9yQ29tcGxleFRleHQoY29uc3QgVGV4dFJ1
biYgcnVuLCBpbnQgZnJvbSwgaW50CiAgICAgcmV0dXJuIGJlZm9yZVdpZHRoOwogfQogCi1mbG9h
dCBGb250OjpkcmF3Q29tcGxleFRleHQoR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBjb25zdCBU
ZXh0UnVuJiBydW4sIGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50LCBpbnQgZnJvbSwgaW50IHRvKSBj
b25zdAorZmxvYXQgRm9udDo6ZHJhd0NvbXBsZXhUZXh0KEdyYXBoaWNzQ29udGV4dCogY29udGV4
dCwgY29uc3QgVGV4dFJ1biYgcnVuLCBjb25zdCBGbG9hdFBvaW50JiBwb2ludCwgdW5zaWduZWQg
ZnJvbSwgdW5zaWduZWQgdG8pIGNvbnN0CiB7CiAgICAgLy8gVGhpcyBnbHlwaCBidWZmZXIgaG9s
ZHMgb3VyIGdseXBocyArIGFkdmFuY2VzICsgZm9udCBkYXRhIGZvciBlYWNoIGdseXBoLgogICAg
IEdseXBoQnVmZmVyIGdseXBoQnVmZmVyOwpAQCAtMTA5LDcgKzEwOSw3IEBAIGZsb2F0IEZvbnQ6
OmRyYXdDb21wbGV4VGV4dChHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IFRleHRSdW4m
IHJ1biwgY29uc3QKICAgICByZXR1cm4gc3RhcnRQb2ludC54KCkgLSBzdGFydFg7CiB9CiAKLXZv
aWQgRm9udDo6ZHJhd0VtcGhhc2lzTWFya3NGb3JDb21wbGV4VGV4dChHcmFwaGljc0NvbnRleHQq
IGNvbnRleHQsIGNvbnN0IFRleHRSdW4mIHJ1biwgY29uc3QgQXRvbWljU3RyaW5nJiBtYXJrLCBj
b25zdCBGbG9hdFBvaW50JiBwb2ludCwgaW50IGZyb20sIGludCB0bykgY29uc3QKK3ZvaWQgRm9u
dDo6ZHJhd0VtcGhhc2lzTWFya3NGb3JDb21wbGV4VGV4dChHcmFwaGljc0NvbnRleHQqIGNvbnRl
eHQsIGNvbnN0IFRleHRSdW4mIHJ1biwgY29uc3QgQXRvbWljU3RyaW5nJiBtYXJrLCBjb25zdCBG
bG9hdFBvaW50JiBwb2ludCwgdW5zaWduZWQgZnJvbSwgdW5zaWduZWQgdG8pIGNvbnN0CiB7CiAg
ICAgR2x5cGhCdWZmZXIgZ2x5cGhCdWZmZXI7CiAgICAgZmxvYXQgaW5pdGlhbEFkdmFuY2UgPSBn
ZXRHbHlwaHNBbmRBZHZhbmNlc0ZvckNvbXBsZXhUZXh0KHJ1biwgZnJvbSwgdG8sIGdseXBoQnVm
ZmVyLCBGb3JUZXh0RW1waGFzaXMpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3Mvd2luY2UvRm9udFdpbkNFLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL3dpbmNlL0ZvbnRXaW5DRS5jcHAKaW5kZXggZWQ3MjYyN2MzZTk4NjZhYjkxOWIw
ZGJiNDk2MTMxMWNkYjVkNzY4ZS4uZTBiM2Y2MzBlYmRiOTNkNzY2YzE3MzFhMDY5OTU3NWRiZjQ0
ZGVkMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luY2Uv
Rm9udFdpbkNFLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW5j
ZS9Gb250V2luQ0UuY3BwCkBAIC02Miw3ICs2Miw3IEBAIHB1YmxpYzoKIFNjcmVlbkRjUmVsZWFz
ZXIgcmVsZWFzZVNjcmVlbkRjOwogCiB2b2lkIEZvbnQ6OmRyYXdHbHlwaHMoR3JhcGhpY3NDb250
ZXh0KiBncmFwaGljc0NvbnRleHQsIGNvbnN0IFNpbXBsZUZvbnREYXRhKiBmb250RGF0YSwgY29u
c3QgR2x5cGhCdWZmZXImIGdseXBoQnVmZmVyLAotICAgICAgICAgICAgICAgICAgICAgIGludCBm
cm9tLCBpbnQgbnVtR2x5cGhzLCBjb25zdCBGbG9hdFBvaW50JiBwb2ludCkgY29uc3QKKyAgICB1
bnNpZ25lZCBmcm9tLCB1bnNpZ25lZCBudW1HbHlwaHMsIGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50
KSBjb25zdAogewogICAgIGdyYXBoaWNzQ29udGV4dC0+ZHJhd1RleHQoZm9udERhdGEsIGdseXBo
QnVmZmVyLCBmcm9tLCBudW1HbHlwaHMsIHBvaW50KTsKIH0KQEAgLTIwNiw3ICsyMDYsNyBAQCBz
dGF0aWMgaW50IGdlbmVyYXRlQ29tcG9uZW50cyhUZXh0UnVuQ29tcG9uZW50cyogY29tcG9uZW50
cywgY29uc3QgRm9udCAmZm9udCwgYwogICAgIHJldHVybiBvZmZzZXQ7CiB9CiAKLWZsb2F0IEZv
bnQ6OmRyYXdDb21wbGV4VGV4dChHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IFRleHRS
dW4mIHJ1biwgY29uc3QgRmxvYXRQb2ludCYgcG9pbnQsIGludCBmcm9tLCBpbnQgdG8pIGNvbnN0
CitmbG9hdCBGb250OjpkcmF3Q29tcGxleFRleHQoR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBj
b25zdCBUZXh0UnVuJiBydW4sIGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50LCB1bnNpZ25lZCBmcm9t
LCB1bnNpZ25lZCB0bykgY29uc3QKIHsKICAgICBpZiAodG8gPCAwKQogICAgICAgICB0byA9IHJ1
bi5sZW5ndGgoKTsKQEAgLTIzNyw3ICsyMzcsNyBAQCBmbG9hdCBGb250OjpkcmF3Q29tcGxleFRl
eHQoR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBjb25zdCBUZXh0UnVuJiBydW4sIGNvbnN0CiAg
ICAgcmV0dXJuIHdpZHRoT2ZEcmF3blRleHQ7CiB9CiAKLXZvaWQgRm9udDo6ZHJhd0VtcGhhc2lz
TWFya3NGb3JDb21wbGV4VGV4dChHcmFwaGljc0NvbnRleHQqIC8qIGNvbnRleHQgKi8sIGNvbnN0
IFRleHRSdW4mIC8qIHJ1biAqLywgY29uc3QgQXRvbWljU3RyaW5nJiAvKiBtYXJrICovLCBjb25z
dCBGbG9hdFBvaW50JiAvKiBwb2ludCAqLywgaW50IC8qIGZyb20gKi8sIGludCAvKiB0byAqLykg
Y29uc3QKK3ZvaWQgRm9udDo6ZHJhd0VtcGhhc2lzTWFya3NGb3JDb21wbGV4VGV4dChHcmFwaGlj
c0NvbnRleHQqIC8qIGNvbnRleHQgKi8sIGNvbnN0IFRleHRSdW4mIC8qIHJ1biAqLywgY29uc3Qg
QXRvbWljU3RyaW5nJiAvKiBtYXJrICovLCBjb25zdCBGbG9hdFBvaW50JiAvKiBwb2ludCAqLywg
dW5zaWduZWQgLyogZnJvbSAqLywgdW5zaWduZWQgLyogdG8gKi8pIGNvbnN0CiB7CiAgICAgbm90
SW1wbGVtZW50ZWQoKTsKIH0KQEAgLTMyMSw3ICszMjEsNyBAQCBzdGF0aWMgZmxvYXQgY3Vyc29y
VG9YKGNvbnN0IEZvbnQqIGZvbnQsIGNvbnN0IFRleHRSdW5Db21wb25lbnRzJiBjb21wb25lbnRz
LCBpbgogfQogCiBGbG9hdFJlY3QgRm9udDo6c2VsZWN0aW9uUmVjdEZvckNvbXBsZXhUZXh0KGNv
bnN0IFRleHRSdW4mIHJ1biwgY29uc3QgRmxvYXRQb2ludCYgcHQsCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgaW50IGgsIGludCBmcm9tLCBpbnQgdG8pIGNvbnN0CisgICAg
aW50IGgsIHVuc2lnbmVkIGZyb20sIHVuc2lnbmVkIHRvKSBjb25zdAogewogICAgIFRleHRSdW5D
b21wb25lbnRzIGNvbXBvbmVudHM7CiAgICAgaW50IHcgPSBnZW5lcmF0ZUNvbXBvbmVudHMoJmNv
bXBvbmVudHMsICp0aGlzLCBydW4pOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL0lubGluZVRleHRCb3guY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0lubGluZVRl
eHRCb3guY3BwCmluZGV4IGFhNDRkY2U3YzRiMDMyYzA0NWRkY2Y3YzJhZTFlY2UxZmM0MzU0ZDEu
LjE2YTZlM2RhMGUwZGEyNjRlZmE3NzJlYzhmY2Q0NTk5ZmE2YjVjZmUgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9JbmxpbmVUZXh0Qm94LmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvSW5saW5lVGV4dEJveC5jcHAKQEAgLTE5NiwxMCArMTk2LDEyIEBAIExh
eW91dFVuaXQgSW5saW5lVGV4dEJveDo6c2VsZWN0aW9uSGVpZ2h0KCkgY29uc3QKICAgICByZXR1
cm4gcm9vdCgpLnNlbGVjdGlvbkhlaWdodCgpOwogfQogCi1ib29sIElubGluZVRleHRCb3g6Omlz
U2VsZWN0ZWQoaW50IHN0YXJ0UG9zLCBpbnQgZW5kUG9zKSBjb25zdAorYm9vbCBJbmxpbmVUZXh0
Qm94Ojppc1NlbGVjdGVkKHVuc2lnbmVkIHN0YXJ0UG9zLCB1bnNpZ25lZCBlbmRQb3MpIGNvbnN0
CiB7Ci0gICAgaW50IHNQb3MgPSBzdGQ6Om1heChzdGFydFBvcyAtIG1fc3RhcnQsIDApOwotICAg
IGludCBlUG9zID0gc3RkOjptaW4oZW5kUG9zIC0gbV9zdGFydCwgc3RhdGljX2Nhc3Q8aW50Piht
X2xlbikpOworICAgIHVuc2lnbmVkIHNQb3MgPSBzdGFydFBvcyA+IG1fc3RhcnQgPyBzdGFydFBv
cyAtIG1fc3RhcnQgOiAwOworICAgIGlmIChlbmRQb3MgPCBtX3N0YXJ0KQorICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgdW5zaWduZWQgZVBvcyA9IHN0ZDo6bWluKGVuZFBvcyAtIG1fc3RhcnQs
IHN0YXRpY19jYXN0PHVuc2lnbmVkPihtX2xlbikpOwogICAgIHJldHVybiAoc1BvcyA8IGVQb3Mp
OwogfQogCkBAIC0yMDcsMTAgKzIwOSwxMyBAQCBSZW5kZXJPYmplY3Q6OlNlbGVjdGlvblN0YXRl
IElubGluZVRleHRCb3g6OnNlbGVjdGlvblN0YXRlKCkKIHsKICAgICBSZW5kZXJPYmplY3Q6OlNl
bGVjdGlvblN0YXRlIHN0YXRlID0gcmVuZGVyZXIoKS5zZWxlY3Rpb25TdGF0ZSgpOwogICAgIGlm
IChzdGF0ZSA9PSBSZW5kZXJPYmplY3Q6OlNlbGVjdGlvblN0YXJ0IHx8IHN0YXRlID09IFJlbmRl
ck9iamVjdDo6U2VsZWN0aW9uRW5kIHx8IHN0YXRlID09IFJlbmRlck9iamVjdDo6U2VsZWN0aW9u
Qm90aCkgewotICAgICAgICBpbnQgc3RhcnRQb3MsIGVuZFBvczsKLSAgICAgICAgcmVuZGVyZXIo
KS5zZWxlY3Rpb25TdGFydEVuZChzdGFydFBvcywgZW5kUG9zKTsKKyAgICAgICAgaW50IGluaXRp
YWxTdGFydFBvcywgaW5pdGlhbEVuZFBvczsKKyAgICAgICAgcmVuZGVyZXIoKS5zZWxlY3Rpb25T
dGFydEVuZChpbml0aWFsU3RhcnRQb3MsIGluaXRpYWxFbmRQb3MpOworICAgICAgICBBU1NFUlQo
aW5pdGlhbFN0YXJ0UG9zID49IDAgJiYgaW5pdGlhbEVuZFBvcyA+PSAwKTsKKyAgICAgICAgdW5z
aWduZWQgc3RhcnRQb3MgPSBpbml0aWFsU3RhcnRQb3M7CisgICAgICAgIHVuc2lnbmVkIGVuZFBv
cyA9IGluaXRpYWxFbmRQb3M7CiAgICAgICAgIC8vIFRoZSBwb3NpdGlvbiBhZnRlciBhIGhhcmQg
bGluZSBicmVhayBpcyBjb25zaWRlcmVkIHRvIGJlIHBhc3QgaXRzIGVuZC4KLSAgICAgICAgaW50
IGxhc3RTZWxlY3RhYmxlID0gc3RhcnQoKSArIGxlbigpIC0gKGlzTGluZUJyZWFrKCkgPyAxIDog
MCk7CisgICAgICAgIHVuc2lnbmVkIGxhc3RTZWxlY3RhYmxlID0gc3RhcnQoKSArIGxlbigpIC0g
KGlzTGluZUJyZWFrKCkgPyAxIDogMCk7CiAKICAgICAgICAgYm9vbCBzdGFydCA9IChzdGF0ZSAh
PSBSZW5kZXJPYmplY3Q6OlNlbGVjdGlvbkVuZCAmJiBzdGFydFBvcyA+PSBtX3N0YXJ0ICYmIHN0
YXJ0UG9zIDwgbV9zdGFydCArIG1fbGVuKTsKICAgICAgICAgYm9vbCBlbmQgPSAoc3RhdGUgIT0g
UmVuZGVyT2JqZWN0OjpTZWxlY3Rpb25TdGFydCAmJiBlbmRQb3MgPiBtX3N0YXJ0ICYmIGVuZFBv
cyA8PSBsYXN0U2VsZWN0YWJsZSk7CkBAIC0yMzEsNyArMjM2LDcgQEAgUmVuZGVyT2JqZWN0OjpT
ZWxlY3Rpb25TdGF0ZSBJbmxpbmVUZXh0Qm94OjpzZWxlY3Rpb25TdGF0ZSgpCiAgICAgaWYgKG1f
dHJ1bmNhdGlvbiAhPSBjTm9UcnVuY2F0aW9uICYmIHJvb3QoKS5lbGxpcHNpc0JveCgpKSB7CiAg
ICAgICAgIEVsbGlwc2lzQm94KiBlbGxpcHNpcyA9IHJvb3QoKS5lbGxpcHNpc0JveCgpOwogICAg
ICAgICBpZiAoc3RhdGUgIT0gUmVuZGVyT2JqZWN0OjpTZWxlY3Rpb25Ob25lKSB7Ci0gICAgICAg
ICAgICBpbnQgc3RhcnQsIGVuZDsKKyAgICAgICAgICAgIHVuc2lnbmVkIHN0YXJ0LCBlbmQ7CiAg
ICAgICAgICAgICBzZWxlY3Rpb25TdGFydEVuZChzdGFydCwgZW5kKTsKICAgICAgICAgICAgIC8v
IFRoZSBlbGxpcHNpcyBzaG91bGQgYmUgY29uc2lkZXJlZCB0byBiZSBzZWxlY3RlZCBpZiB0aGUg
ZW5kIG9mCiAgICAgICAgICAgICAvLyB0aGUgc2VsZWN0aW9uIGlzIHBhc3QgdGhlIGJlZ2lubmlu
ZyBvZiB0aGUgdHJ1bmNhdGlvbiBhbmQgdGhlCkBAIC0yNDYsNyArMjUxLDcgQEAgUmVuZGVyT2Jq
ZWN0OjpTZWxlY3Rpb25TdGF0ZSBJbmxpbmVUZXh0Qm94OjpzZWxlY3Rpb25TdGF0ZSgpCiAgICAg
cmV0dXJuIHN0YXRlOwogfQogCi1zdGF0aWMgdm9pZCBhZGp1c3RDaGFyYWN0ZXJzQW5kTGVuZ3Ro
Rm9ySHlwaGVuKEJ1ZmZlckZvckFwcGVuZGluZ0h5cGhlbiYgY2hhcmFjdGVyc1dpdGhIeXBoZW4s
IGNvbnN0IFJlbmRlclN0eWxlJiBzdHlsZSwgU3RyaW5nJiBzdHJpbmcsIGludCYgbGVuZ3RoKQor
c3RhdGljIHZvaWQgYWRqdXN0Q2hhcmFjdGVyc0FuZExlbmd0aEZvckh5cGhlbihCdWZmZXJGb3JB
cHBlbmRpbmdIeXBoZW4mIGNoYXJhY3RlcnNXaXRoSHlwaGVuLCBjb25zdCBSZW5kZXJTdHlsZSYg
c3R5bGUsIFN0cmluZyYgc3RyaW5nLCB1bnNpZ25lZCYgbGVuZ3RoKQogewogICAgIGNvbnN0IEF0
b21pY1N0cmluZyYgaHlwaGVuU3RyaW5nID0gc3R5bGUuaHlwaGVuU3RyaW5nKCk7CiAgICAgY2hh
cmFjdGVyc1dpdGhIeXBoZW4ucmVzZXJ2ZUNhcGFjaXR5KGxlbmd0aCArIGh5cGhlblN0cmluZy5s
ZW5ndGgoKSk7CkBAIC0yNjYsMTAgKzI3MSwxNCBAQCBzdGF0aWMgY29uc3QgRm9udCYgZm9udFRv
VXNlKGNvbnN0IFJlbmRlclN0eWxlJiBzdHlsZSwgY29uc3QgUmVuZGVyVGV4dCYgcmVuZGVyZQog
ICAgIHJldHVybiBzdHlsZS5mb250KCk7CiB9CiAKLUxheW91dFJlY3QgSW5saW5lVGV4dEJveDo6
bG9jYWxTZWxlY3Rpb25SZWN0KGludCBzdGFydFBvcywgaW50IGVuZFBvcykgY29uc3QKK0xheW91
dFJlY3QgSW5saW5lVGV4dEJveDo6bG9jYWxTZWxlY3Rpb25SZWN0KHVuc2lnbmVkIHN0YXJ0UG9z
LCB1bnNpZ25lZCBlbmRQb3MpIGNvbnN0CiB7Ci0gICAgaW50IHNQb3MgPSBzdGQ6Om1heChzdGFy
dFBvcyAtIG1fc3RhcnQsIDApOwotICAgIGludCBlUG9zID0gc3RkOjptaW4oZW5kUG9zIC0gbV9z
dGFydCwgKGludCltX2xlbik7CisgICAgdW5zaWduZWQgc1BvcyA9IHN0YXJ0UG9zID4gbV9zdGFy
dCA/IHN0YXJ0UG9zIC0gbV9zdGFydCA6IDA7CisgICAgCisgICAgaWYgKGVuZFBvcyA8IG1fc3Rh
cnQpCisgICAgICAgIHJldHVybiBMYXlvdXRSZWN0KCk7CisKKyAgICB1bnNpZ25lZCBlUG9zID0g
c3RkOjptaW4oZW5kUG9zIC0gbV9zdGFydCwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KG1fbGVuKSk7
CiAgICAgCiAgICAgaWYgKHNQb3MgPiBlUG9zKQogICAgICAgICByZXR1cm4gTGF5b3V0UmVjdCgp
OwpAQCAtMjg0LDEyICsyOTMsMTAgQEAgTGF5b3V0UmVjdCBJbmxpbmVUZXh0Qm94Ojpsb2NhbFNl
bGVjdGlvblJlY3QoaW50IHN0YXJ0UG9zLCBpbnQgZW5kUG9zKSBjb25zdAogICAgIEJ1ZmZlckZv
ckFwcGVuZGluZ0h5cGhlbiBjaGFyYWN0ZXJzV2l0aEh5cGhlbjsKICAgICBib29sIHJlc3BlY3RI
eXBoZW4gPSBlUG9zID09IG1fbGVuICYmIGhhc0h5cGhlbigpOwogICAgIFRleHRSdW4gdGV4dFJ1
biA9IGNvbnN0cnVjdFRleHRSdW4obGluZVN0eWxlLCBmb250LCByZXNwZWN0SHlwaGVuID8gJmNo
YXJhY3RlcnNXaXRoSHlwaGVuIDogMCk7Ci0gICAgaWYgKHJlc3BlY3RIeXBoZW4pCi0gICAgICAg
IGVuZFBvcyA9IHRleHRSdW4ubGVuZ3RoKCk7CiAKICAgICBMYXlvdXRSZWN0IHNlbGVjdGlvblJl
Y3QgPSBMYXlvdXRSZWN0KExheW91dFBvaW50KGxvZ2ljYWxMZWZ0KCksIHNlbGVjdGlvblRvcCks
IExheW91dFNpemUobV9sb2dpY2FsV2lkdGgsIHNlbGVjdGlvbkhlaWdodCkpOwogICAgIC8vIEF2
b2lkIGNvbXB1dGluZyB0aGUgZm9udCB3aWR0aCB3aGVuIHRoZSBlbnRpcmUgbGluZSBib3ggaXMg
c2VsZWN0ZWQgYXMgYW4gb3B0aW1pemF0aW9uLgotICAgIGlmIChzUG9zIHx8IGVQb3MgIT0gc3Rh
dGljX2Nhc3Q8aW50PihtX2xlbikpCisgICAgaWYgKHNQb3MgfHwgZVBvcyAhPSBtX2xlbikKICAg
ICAgICAgZm9udC5hZGp1c3RTZWxlY3Rpb25SZWN0Rm9yVGV4dCh0ZXh0UnVuLCBzZWxlY3Rpb25S
ZWN0LCBzUG9zLCBlUG9zKTsKICAgICBJbnRSZWN0IHNuYXBwZWRTZWxlY3Rpb25SZWN0ID0gZW5j
bG9zaW5nSW50UmVjdChzZWxlY3Rpb25SZWN0KTsKICAgICBMYXlvdXRVbml0IGxvZ2ljYWxXaWR0
aCA9IHNuYXBwZWRTZWxlY3Rpb25SZWN0LndpZHRoKCk7CkBAIC02MDYsMTUgKzYxMywxNiBAQCB2
b2lkIElubGluZVRleHRCb3g6OnBhaW50KFBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBMYXlv
dXRQb2ludCYgcGFpbnRPZmZzZXQsCiAgICAgfQogCiAgICAgLy8gMi4gTm93IHBhaW50IHRoZSBm
b3JlZ3JvdW5kLCBpbmNsdWRpbmcgdGV4dCBhbmQgZGVjb3JhdGlvbnMgbGlrZSB1bmRlcmxpbmUv
b3ZlcmxpbmUgKGluIHF1aXJrcyBtb2RlIG9ubHkpLgotICAgIGludCBsZW5ndGggPSBtX2xlbjsK
LSAgICBpbnQgbWF4aW11bUxlbmd0aDsKKyAgICB1bnNpZ25lZCBsZW5ndGggPSBtX2xlbjsKKyAg
ICB1bnNpZ25lZCBtYXhpbXVtTGVuZ3RoOwogICAgIFN0cmluZyBzdHJpbmc7CiAgICAgaWYgKCFj
b21iaW5lZFRleHQpIHsKICAgICAgICAgc3RyaW5nID0gcmVuZGVyZXIoKS50ZXh0KCk7Ci0gICAg
ICAgIGlmIChzdGF0aWNfY2FzdDx1bnNpZ25lZD4obGVuZ3RoKSAhPSBzdHJpbmcubGVuZ3RoKCkg
fHwgbV9zdGFydCkgewotICAgICAgICAgICAgQVNTRVJUX1dJVEhfU0VDVVJJVFlfSU1QTElDQVRJ
T04oc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KG1fc3RhcnQgKyBsZW5ndGgpIDw9IHN0cmluZy5sZW5n
dGgoKSk7CisgICAgICAgIGlmIChsZW5ndGggIT0gc3RyaW5nLmxlbmd0aCgpIHx8IG1fc3RhcnQp
IHsKKyAgICAgICAgICAgIEFTU0VSVF9XSVRIX1NFQ1VSSVRZX0lNUExJQ0FUSU9OKG1fc3RhcnQg
KyBsZW5ndGggPD0gc3RyaW5nLmxlbmd0aCgpKTsKICAgICAgICAgICAgIHN0cmluZyA9IHN0cmlu
Zy5zdWJzdHJpbmdTaGFyaW5nSW1wbChtX3N0YXJ0LCBsZW5ndGgpOwogICAgICAgICB9CisgICAg
ICAgIEFTU0VSVChyZW5kZXJlcigpLnRleHRMZW5ndGgoKSA+PSBtX3N0YXJ0KTsKICAgICAgICAg
bWF4aW11bUxlbmd0aCA9IHJlbmRlcmVyKCkudGV4dExlbmd0aCgpIC0gbV9zdGFydDsKICAgICB9
IGVsc2UgewogICAgICAgICBjb21iaW5lZFRleHQtPmdldFN0cmluZ1RvUmVuZGVyKG1fc3RhcnQs
IHN0cmluZywgbGVuZ3RoKTsKQEAgLTYyNiwxNCArNjM0LDE0IEBAIHZvaWQgSW5saW5lVGV4dEJv
eDo6cGFpbnQoUGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0IExheW91dFBvaW50JiBwYWludE9m
ZnNldCwKICAgICBpZiAoaGFzSHlwaGVuKCkpCiAgICAgICAgIGxlbmd0aCA9IHRleHRSdW4ubGVu
Z3RoKCk7CiAKLSAgICBpbnQgc1BvcyA9IDA7Ci0gICAgaW50IGVQb3MgPSAwOworICAgIHVuc2ln
bmVkIHNQb3MgPSAwOworICAgIHVuc2lnbmVkIGVQb3MgPSAwOwogICAgIGlmIChoYXZlU2VsZWN0
aW9uICYmIChwYWludFNlbGVjdGVkVGV4dE9ubHkgfHwgcGFpbnRTZWxlY3RlZFRleHRTZXBhcmF0
ZWx5KSkKICAgICAgICAgc2VsZWN0aW9uU3RhcnRFbmQoc1BvcywgZVBvcyk7CiAKICAgICBpZiAo
bV90cnVuY2F0aW9uICE9IGNOb1RydW5jYXRpb24pIHsKLSAgICAgICAgc1BvcyA9IHN0ZDo6bWlu
PGludD4oc1BvcywgbV90cnVuY2F0aW9uKTsKLSAgICAgICAgZVBvcyA9IHN0ZDo6bWluPGludD4o
ZVBvcywgbV90cnVuY2F0aW9uKTsKKyAgICAgICAgc1BvcyA9IHN0ZDo6bWluKHNQb3MsIHN0YXRp
Y19jYXN0PHVuc2lnbmVkPihtX3RydW5jYXRpb24pKTsKKyAgICAgICAgZVBvcyA9IHN0ZDo6bWlu
KGVQb3MsIHN0YXRpY19jYXN0PHVuc2lnbmVkPihtX3RydW5jYXRpb24pKTsKICAgICAgICAgbGVu
Z3RoID0gbV90cnVuY2F0aW9uOwogICAgIH0KIApAQCAtNjkzLDIyICs3MDEsMjcgQEAgdm9pZCBJ
bmxpbmVUZXh0Qm94OjpwYWludChQYWludEluZm8mIHBhaW50SW5mbywgY29uc3QgTGF5b3V0UG9p
bnQmIHBhaW50T2Zmc2V0LAogICAgICAgICBjb250ZXh0LT5jb25jYXRDVE0ocm90YXRpb24oYm94
UmVjdCwgQ291bnRlcmNsb2Nrd2lzZSkpOwogfQogCi12b2lkIElubGluZVRleHRCb3g6OnNlbGVj
dGlvblN0YXJ0RW5kKGludCYgc1BvcywgaW50JiBlUG9zKQordm9pZCBJbmxpbmVUZXh0Qm94Ojpz
ZWxlY3Rpb25TdGFydEVuZCh1bnNpZ25lZCYgc1BvcywgdW5zaWduZWQmIGVQb3MpCiB7Ci0gICAg
aW50IHN0YXJ0UG9zLCBlbmRQb3M7CisgICAgdW5zaWduZWQgc3RhcnRQb3MsIGVuZFBvczsKICAg
ICBpZiAocmVuZGVyZXIoKS5zZWxlY3Rpb25TdGF0ZSgpID09IFJlbmRlck9iamVjdDo6U2VsZWN0
aW9uSW5zaWRlKSB7CiAgICAgICAgIHN0YXJ0UG9zID0gMDsKICAgICAgICAgZW5kUG9zID0gcmVu
ZGVyZXIoKS50ZXh0TGVuZ3RoKCk7CiAgICAgfSBlbHNlIHsKLSAgICAgICAgcmVuZGVyZXIoKS5z
ZWxlY3Rpb25TdGFydEVuZChzdGFydFBvcywgZW5kUG9zKTsKKyAgICAgICAgaW50IG9yaWdpbmFs
U3RhcnRQb3MsIG9yaWdpbmFsRW5kUG9zOworICAgICAgICByZW5kZXJlcigpLnNlbGVjdGlvblN0
YXJ0RW5kKG9yaWdpbmFsU3RhcnRQb3MsIG9yaWdpbmFsRW5kUG9zKTsKKyAgICAgICAgQVNTRVJU
KG9yaWdpbmFsU3RhcnRQb3MgPj0gMCAmJiBvcmlnaW5hbEVuZFBvcyA+PSAwKTsKKyAgICAgICAg
c3RhcnRQb3MgPSBvcmlnaW5hbFN0YXJ0UG9zOworICAgICAgICBlbmRQb3MgPSBvcmlnaW5hbEVu
ZFBvczsKICAgICAgICAgaWYgKHJlbmRlcmVyKCkuc2VsZWN0aW9uU3RhdGUoKSA9PSBSZW5kZXJP
YmplY3Q6OlNlbGVjdGlvblN0YXJ0KQogICAgICAgICAgICAgZW5kUG9zID0gcmVuZGVyZXIoKS50
ZXh0TGVuZ3RoKCk7CiAgICAgICAgIGVsc2UgaWYgKHJlbmRlcmVyKCkuc2VsZWN0aW9uU3RhdGUo
KSA9PSBSZW5kZXJPYmplY3Q6OlNlbGVjdGlvbkVuZCkKICAgICAgICAgICAgIHN0YXJ0UG9zID0g
MDsKICAgICB9Ci0KLSAgICBzUG9zID0gc3RkOjptYXgoc3RhcnRQb3MgLSBtX3N0YXJ0LCAwKTsK
LSAgICBlUG9zID0gc3RkOjptaW4oZW5kUG9zIC0gbV9zdGFydCwgKGludCltX2xlbik7CisgICAg
CisgICAgc1BvcyA9IHN0YXJ0UG9zID4gbV9zdGFydCA/IHN0YXJ0UG9zIC0gbV9zdGFydCA6IDA7
CisgICAgZVBvcyA9IGVuZFBvcyA+IG1fc3RhcnQgPyBlbmRQb3MgLSBtX3N0YXJ0IDogMDsKKyAg
ICBlUG9zID0gc3RkOjptaW4oZVBvcywgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KG1fbGVuKSk7CiB9
CiAKIHZvaWQgSW5saW5lVGV4dEJveDo6cGFpbnRTZWxlY3Rpb24oR3JhcGhpY3NDb250ZXh0KiBj
b250ZXh0LCBjb25zdCBGbG9hdFBvaW50JiBib3hPcmlnaW4sIGNvbnN0IFJlbmRlclN0eWxlJiBz
dHlsZSwgY29uc3QgRm9udCYgZm9udCwgQ29sb3IgdGV4dENvbG9yKQpAQCAtNzE4LDcgKzczMSw3
IEBAIHZvaWQgSW5saW5lVGV4dEJveDo6cGFpbnRTZWxlY3Rpb24oR3JhcGhpY3NDb250ZXh0KiBj
b250ZXh0LCBjb25zdCBGbG9hdFBvaW50JiBiCiAgICAgICAgIHJldHVybjsKIAogICAgIC8vIFNl
ZSBpZiB3ZSBoYXZlIGEgc2VsZWN0aW9uIHRvIHBhaW50IGF0IGFsbC4KLSAgICBpbnQgc1Bvcywg
ZVBvczsKKyAgICB1bnNpZ25lZCBzUG9zLCBlUG9zOwogICAgIHNlbGVjdGlvblN0YXJ0RW5kKHNQ
b3MsIGVQb3MpOwogICAgIGlmIChzUG9zID49IGVQb3MpCiAgICAgICAgIHJldHVybjsKQEAgLTcz
Nyw3ICs3NTAsNyBAQCB2b2lkIElubGluZVRleHRCb3g6OnBhaW50U2VsZWN0aW9uKEdyYXBoaWNz
Q29udGV4dCogY29udGV4dCwgY29uc3QgRmxvYXRQb2ludCYgYgogICAgIAogICAgIC8vIElmIHRo
ZSB0ZXh0IGlzIHRydW5jYXRlZCwgbGV0IHRoZSB0aGluZyBiZWluZyBwYWludGVkIGluIHRoZSB0
cnVuY2F0aW9uCiAgICAgLy8gZHJhdyBpdHMgb3duIGhpZ2hsaWdodC4KLSAgICBpbnQgbGVuZ3Ro
ID0gbV90cnVuY2F0aW9uICE9IGNOb1RydW5jYXRpb24gPyBtX3RydW5jYXRpb24gOiBtX2xlbjsK
KyAgICB1bnNpZ25lZCBsZW5ndGggPSBtX3RydW5jYXRpb24gIT0gY05vVHJ1bmNhdGlvbiA/IG1f
dHJ1bmNhdGlvbiA6IG1fbGVuOwogICAgIFN0cmluZyBzdHJpbmcgPSByZW5kZXJlcigpLnRleHQo
KTsKIAogICAgIGlmIChzdHJpbmcubGVuZ3RoKCkgIT0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGxl
bmd0aCkgfHwgbV9zdGFydCkgewpAQCAtNzQ3LDYgKzc2MCw3IEBAIHZvaWQgSW5saW5lVGV4dEJv
eDo6cGFpbnRTZWxlY3Rpb24oR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBjb25zdCBGbG9hdFBv
aW50JiBiCiAKICAgICBCdWZmZXJGb3JBcHBlbmRpbmdIeXBoZW4gY2hhcmFjdGVyc1dpdGhIeXBo
ZW47CiAgICAgYm9vbCByZXNwZWN0SHlwaGVuID0gZVBvcyA9PSBsZW5ndGggJiYgaGFzSHlwaGVu
KCk7CisgICAgQVNTRVJUKHJlbmRlcmVyKCkudGV4dExlbmd0aCgpID49IG1fc3RhcnQpOwogICAg
IFRleHRSdW4gdGV4dFJ1biA9IGNvbnN0cnVjdFRleHRSdW4oc3R5bGUsIGZvbnQsIHN0cmluZywg
cmVuZGVyZXIoKS50ZXh0TGVuZ3RoKCkgLSBtX3N0YXJ0LCByZXNwZWN0SHlwaGVuID8gJmNoYXJh
Y3RlcnNXaXRoSHlwaGVuIDogMCk7CiAgICAgaWYgKHJlc3BlY3RIeXBoZW4pCiAgICAgICAgIGVQ
b3MgPSB0ZXh0UnVuLmxlbmd0aCgpOwpAQCAtNzcwLDExICs3ODQsMTIgQEAgdm9pZCBJbmxpbmVU
ZXh0Qm94OjpwYWludFNlbGVjdGlvbihHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IEZs
b2F0UG9pbnQmIGIKICNlbmRpZgogfQogCi12b2lkIElubGluZVRleHRCb3g6OnBhaW50Q29tcG9z
aXRpb25CYWNrZ3JvdW5kKEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgY29uc3QgRmxvYXRQb2lu
dCYgYm94T3JpZ2luLCBjb25zdCBSZW5kZXJTdHlsZSYgc3R5bGUsIGNvbnN0IEZvbnQmIGZvbnQs
IGludCBzdGFydFBvcywgaW50IGVuZFBvcykKK3ZvaWQgSW5saW5lVGV4dEJveDo6cGFpbnRDb21w
b3NpdGlvbkJhY2tncm91bmQoR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBjb25zdCBGbG9hdFBv
aW50JiBib3hPcmlnaW4sIGNvbnN0IFJlbmRlclN0eWxlJiBzdHlsZSwgY29uc3QgRm9udCYgZm9u
dCwgdW5zaWduZWQgc3RhcnRQb3MsIHVuc2lnbmVkIGVuZFBvcykKIHsKLSAgICBpbnQgb2Zmc2V0
ID0gbV9zdGFydDsKLSAgICBpbnQgc1BvcyA9IHN0ZDo6bWF4KHN0YXJ0UG9zIC0gb2Zmc2V0LCAw
KTsKLSAgICBpbnQgZVBvcyA9IHN0ZDo6bWluKGVuZFBvcyAtIG9mZnNldCwgKGludCltX2xlbik7
CisgICAgdW5zaWduZWQgb2Zmc2V0ID0gbV9zdGFydDsKKyAgICB1bnNpZ25lZCBzUG9zID0gc3Rh
cnRQb3MgPiBvZmZzZXQgPyBzdGFydFBvcyAtIG9mZnNldCA6IDA7CisgICAgQVNTRVJUKGVuZFBv
cyA+PSBvZmZzZXQpOworICAgIHVuc2lnbmVkIGVQb3MgPSBzdGQ6Om1pbihlbmRQb3MgLSBvZmZz
ZXQsIHN0YXRpY19jYXN0PHVuc2lnbmVkPihtX2xlbikpOwogCiAgICAgaWYgKHNQb3MgPj0gZVBv
cykKICAgICAgICAgcmV0dXJuOwpAQCAtMTExMyw3ICsxMTI4LDcgQEAgdm9pZCBJbmxpbmVUZXh0
Qm94OjpwYWludERvY3VtZW50TWFya2VyKEdyYXBoaWNzQ29udGV4dCogcHQsIGNvbnN0IEZsb2F0
UG9pbnQmIGIKIAogICAgIC8vIERldGVybWluZSB3aGV0aGVyIHdlIG5lZWQgdG8gbWVhc3VyZSB0
ZXh0CiAgICAgYm9vbCBtYXJrZXJTcGFuc1dob2xlQm94ID0gdHJ1ZTsKLSAgICBpZiAobV9zdGFy
dCA8PSAoaW50KW1hcmtlci0+c3RhcnRPZmZzZXQoKSkKKyAgICBpZiAobV9zdGFydCA8PSBtYXJr
ZXItPnN0YXJ0T2Zmc2V0KCkpCiAgICAgICAgIG1hcmtlclNwYW5zV2hvbGVCb3ggPSBmYWxzZTsK
ICAgICBpZiAoKGVuZCgpICsgMSkgIT0gbWFya2VyLT5lbmRPZmZzZXQoKSkgLy8gZW5kIHBvaW50
cyBhdCB0aGUgbGFzdCBjaGFyLCBub3QgcGFzdCBpdAogICAgICAgICBtYXJrZXJTcGFuc1dob2xl
Qm94ID0gZmFsc2U7CkBAIC0xMTIyLDExICsxMTM3LDEyIEBAIHZvaWQgSW5saW5lVGV4dEJveDo6
cGFpbnREb2N1bWVudE1hcmtlcihHcmFwaGljc0NvbnRleHQqIHB0LCBjb25zdCBGbG9hdFBvaW50
JiBiCiAKICAgICBib29sIGlzRGljdGF0aW9uTWFya2VyID0gbWFya2VyLT50eXBlKCkgPT0gRG9j
dW1lbnRNYXJrZXI6OkRpY3RhdGlvbkFsdGVybmF0aXZlczsKICAgICBpZiAoIW1hcmtlclNwYW5z
V2hvbGVCb3ggfHwgZ3JhbW1hciB8fCBpc0RpY3RhdGlvbk1hcmtlcikgewotICAgICAgICBpbnQg
c3RhcnRQb3NpdGlvbiA9IHN0ZDo6bWF4PGludD4obWFya2VyLT5zdGFydE9mZnNldCgpIC0gbV9z
dGFydCwgMCk7Ci0gICAgICAgIGludCBlbmRQb3NpdGlvbiA9IHN0ZDo6bWluPGludD4obWFya2Vy
LT5lbmRPZmZzZXQoKSAtIG1fc3RhcnQsIG1fbGVuKTsKKyAgICAgICAgdW5zaWduZWQgc3RhcnRQ
b3NpdGlvbiA9IG1hcmtlci0+c3RhcnRPZmZzZXQoKSA+IG1fc3RhcnQgPyBtYXJrZXItPnN0YXJ0
T2Zmc2V0KCkgLSBtX3N0YXJ0IDogMDsKKyAgICAgICAgQVNTRVJUKG1hcmtlci0+ZW5kT2Zmc2V0
KCkgPj0gbV9zdGFydCk7CisgICAgICAgIHVuc2lnbmVkIGVuZFBvc2l0aW9uID0gc3RkOjptaW4o
bWFya2VyLT5lbmRPZmZzZXQoKSAtIG1fc3RhcnQsIHN0YXRpY19jYXN0PHVuc2lnbmVkPihtX2xl
bikpOwogICAgICAgICAKICAgICAgICAgaWYgKG1fdHJ1bmNhdGlvbiAhPSBjTm9UcnVuY2F0aW9u
KQotICAgICAgICAgICAgZW5kUG9zaXRpb24gPSBzdGQ6Om1pbjxpbnQ+KGVuZFBvc2l0aW9uLCBt
X3RydW5jYXRpb24pOworICAgICAgICAgICAgZW5kUG9zaXRpb24gPSBzdGQ6Om1pbihlbmRQb3Np
dGlvbiwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KG1fdHJ1bmNhdGlvbikpOwogCiAgICAgICAgIC8v
IENhbGN1bGF0ZSBzdGFydCAmIHdpZHRoCiAgICAgICAgIGludCBkZWx0YVkgPSByZW5kZXJlcigp
LnN0eWxlKCkuaXNGbGlwcGVkTGluZXNXcml0aW5nTW9kZSgpID8gc2VsZWN0aW9uQm90dG9tKCkg
LSBsb2dpY2FsQm90dG9tKCkgOiBsb2dpY2FsVG9wKCkgLSBzZWxlY3Rpb25Ub3AoKTsKQEAgLTEx
NzMsOCArMTE4OSw5IEBAIHZvaWQgSW5saW5lVGV4dEJveDo6cGFpbnRUZXh0TWF0Y2hNYXJrZXIo
R3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBjb25zdCBGbG9hdFBvCiB7CiAgICAgTGF5b3V0VW5p
dCBzZWxlY3Rpb25IZWlnaHQgPSB0aGlzLT5zZWxlY3Rpb25IZWlnaHQoKTsKIAotICAgIGludCBz
UG9zID0gc3RkOjptYXgobWFya2VyLT5zdGFydE9mZnNldCgpIC0gbV9zdGFydCwgKHVuc2lnbmVk
KTApOwotICAgIGludCBlUG9zID0gc3RkOjptaW4obWFya2VyLT5lbmRPZmZzZXQoKSAtIG1fc3Rh
cnQsICh1bnNpZ25lZCltX2xlbik7CisgICAgdW5zaWduZWQgc1BvcyA9IG1hcmtlci0+c3RhcnRP
ZmZzZXQoKSA+IG1fc3RhcnQgPyBtYXJrZXItPnN0YXJ0T2Zmc2V0KCkgLSBtX3N0YXJ0IDogMDsK
KyAgICBBU1NFUlQobWFya2VyLT5lbmRPZmZzZXQoKSA+PSBtX3N0YXJ0KTsKKyAgICB1bnNpZ25l
ZCBlUG9zID0gc3RkOjptaW4obWFya2VyLT5lbmRPZmZzZXQoKSAtIG1fc3RhcnQsIHN0YXRpY19j
YXN0PHVuc2lnbmVkPihtX2xlbikpOwogICAgIFRleHRSdW4gcnVuID0gY29uc3RydWN0VGV4dFJ1
bihzdHlsZSwgZm9udCk7CiAKICAgICAvLyBBbHdheXMgY29tcHV0ZSBhbmQgc3RvcmUgdGhlIHJl
Y3QgYXNzb2NpYXRlZCB3aXRoIHRoaXMgbWFya2VyLiBUaGUgY29tcHV0ZWQgcmVjdCBpcyBpbiBh
YnNvbHV0ZSBjb29yZGluYXRlcy4KQEAgLTEyMDYsOCArMTIyMyw5IEBAIHZvaWQgSW5saW5lVGV4
dEJveDo6Y29tcHV0ZVJlY3RGb3JSZXBsYWNlbWVudE1hcmtlcihEb2N1bWVudE1hcmtlciogbWFy
a2VyLCBjb25zCiAgICAgTGF5b3V0VW5pdCB0b3AgPSBzZWxlY3Rpb25Ub3AoKTsKICAgICBMYXlv
dXRVbml0IGggPSBzZWxlY3Rpb25IZWlnaHQoKTsKICAgICAKLSAgICBpbnQgc1BvcyA9IHN0ZDo6
bWF4KG1hcmtlci0+c3RhcnRPZmZzZXQoKSAtIG1fc3RhcnQsICh1bnNpZ25lZCkwKTsKLSAgICBp
bnQgZVBvcyA9IHN0ZDo6bWluKG1hcmtlci0+ZW5kT2Zmc2V0KCkgLSBtX3N0YXJ0LCAodW5zaWdu
ZWQpbV9sZW4pOworICAgIHVuc2lnbmVkIHNQb3MgPSBtYXJrZXItPnN0YXJ0T2Zmc2V0KCkgPiBt
X3N0YXJ0ID8gbWFya2VyLT5zdGFydE9mZnNldCgpIC0gbV9zdGFydCA6IDA7CisgICAgQVNTRVJU
KG1hcmtlci0+ZW5kT2Zmc2V0KCkgPj0gbV9zdGFydCk7CisgICAgdW5zaWduZWQgZVBvcyA9IHN0
ZDo6bWluKG1hcmtlci0+ZW5kT2Zmc2V0KCkgLSBtX3N0YXJ0LCAodW5zaWduZWQpbV9sZW4pOwog
ICAgIFRleHRSdW4gcnVuID0gY29uc3RydWN0VGV4dFJ1bihzdHlsZSwgZm9udCk7CiAKICAgICAv
LyBDb21wdXRlIGFuZCBzdG9yZSB0aGUgcmVjdCBhc3NvY2lhdGVkIHdpdGggdGhpcyBtYXJrZXIu
CkBAIC0xMzE0LDExICsxMzMyLDExIEBAIHZvaWQgSW5saW5lVGV4dEJveDo6cGFpbnRDb21wb3Np
dGlvblVuZGVybGluZShHcmFwaGljc0NvbnRleHQqIGN0eCwgY29uc3QgRmxvYXRQCiAgICAgICAg
IHN0YXJ0ID0gcmVuZGVyZXIoKS53aWR0aChtX3N0YXJ0LCBwYWludFN0YXJ0IC0gbV9zdGFydCwg
dGV4dFBvcygpLCBpc0ZpcnN0TGluZSgpKTsKICAgICB9CiAgICAgaWYgKHBhaW50RW5kICE9IHVu
ZGVybGluZS5lbmRPZmZzZXQpIHsgICAgICAvLyBlbmQgcG9pbnRzIGF0IHRoZSBsYXN0IGNoYXIs
IG5vdCBwYXN0IGl0Ci0gICAgICAgIHBhaW50RW5kID0gc3RkOjptaW4ocGFpbnRFbmQsICh1bnNp
Z25lZCl1bmRlcmxpbmUuZW5kT2Zmc2V0KTsKKyAgICAgICAgcGFpbnRFbmQgPSBzdGQ6Om1pbihw
YWludEVuZCwgdW5kZXJsaW5lLmVuZE9mZnNldCk7CiAgICAgICAgIHVzZVdob2xlV2lkdGggPSBm
YWxzZTsKICAgICB9CiAgICAgaWYgKG1fdHJ1bmNhdGlvbiAhPSBjTm9UcnVuY2F0aW9uKSB7Ci0g
ICAgICAgIHBhaW50RW5kID0gc3RkOjptaW4ocGFpbnRFbmQsICh1bnNpZ25lZCltX3N0YXJ0ICsg
bV90cnVuY2F0aW9uKTsKKyAgICAgICAgcGFpbnRFbmQgPSBzdGQ6Om1pbihwYWludEVuZCwgbV9z
dGFydCArIG1fdHJ1bmNhdGlvbik7CiAgICAgICAgIHVzZVdob2xlV2lkdGggPSBmYWxzZTsKICAg
ICB9CiAgICAgaWYgKCF1c2VXaG9sZVdpZHRoKSB7CkBAIC0xMzc5LDcgKzEzOTcsNyBAQCBpbnQg
SW5saW5lVGV4dEJveDo6b2Zmc2V0Rm9yUG9zaXRpb24oZmxvYXQgbGluZU9mZnNldCwgYm9vbCBp
bmNsdWRlUGFydGlhbEdseXBocwogICAgIHJldHVybiBmb250Lm9mZnNldEZvclBvc2l0aW9uKGNv
bnN0cnVjdFRleHRSdW4obGluZVN0eWxlLCBmb250KSwgbGluZU9mZnNldCAtIGxvZ2ljYWxMZWZ0
KCksIGluY2x1ZGVQYXJ0aWFsR2x5cGhzKTsKIH0KIAotZmxvYXQgSW5saW5lVGV4dEJveDo6cG9z
aXRpb25Gb3JPZmZzZXQoaW50IG9mZnNldCkgY29uc3QKK2Zsb2F0IElubGluZVRleHRCb3g6OnBv
c2l0aW9uRm9yT2Zmc2V0KHVuc2lnbmVkIG9mZnNldCkgY29uc3QKIHsKICAgICBBU1NFUlQob2Zm
c2V0ID49IG1fc3RhcnQpOwogICAgIEFTU0VSVChvZmZzZXQgPD0gbV9zdGFydCArIG1fbGVuKTsK
QEAgLTEzOTEsOCArMTQwOSw4IEBAIGZsb2F0IElubGluZVRleHRCb3g6OnBvc2l0aW9uRm9yT2Zm
c2V0KGludCBvZmZzZXQpIGNvbnN0CiAKICAgICBjb25zdCBSZW5kZXJTdHlsZSYgbGluZVN0eWxl
ID0gdGhpcy0+bGluZVN0eWxlKCk7CiAgICAgY29uc3QgRm9udCYgZm9udCA9IGZvbnRUb1VzZShs
aW5lU3R5bGUsIHJlbmRlcmVyKCkpOwotICAgIGludCBmcm9tID0gIWlzTGVmdFRvUmlnaHREaXJl
Y3Rpb24oKSA/IG9mZnNldCAtIG1fc3RhcnQgOiAwOwotICAgIGludCB0byA9ICFpc0xlZnRUb1Jp
Z2h0RGlyZWN0aW9uKCkgPyBtX2xlbiA6IG9mZnNldCAtIG1fc3RhcnQ7CisgICAgdW5zaWduZWQg
ZnJvbSA9ICFpc0xlZnRUb1JpZ2h0RGlyZWN0aW9uKCkgPyBvZmZzZXQgLSBtX3N0YXJ0IDogMDsK
KyAgICB1bnNpZ25lZCB0byA9ICFpc0xlZnRUb1JpZ2h0RGlyZWN0aW9uKCkgPyBtX2xlbiA6IG9m
ZnNldCAtIG1fc3RhcnQ7CiAgICAgLy8gRklYTUU6IERvIHdlIG5lZWQgdG8gYWRkIHJpZ2h0QmVh
cmluZyBoZXJlPwogICAgIExheW91dFJlY3Qgc2VsZWN0aW9uUmVjdCA9IExheW91dFJlY3QobG9n
aWNhbExlZnQoKSwgMCwgMCwgMCk7CiAgICAgVGV4dFJ1biBydW4gPSBjb25zdHJ1Y3RUZXh0UnVu
KGxpbmVTdHlsZSwgZm9udCk7CkBAIC0xNDEwLDEzICsxNDI4LDE0IEBAIFRleHRSdW4gSW5saW5l
VGV4dEJveDo6Y29uc3RydWN0VGV4dFJ1bihjb25zdCBSZW5kZXJTdHlsZSYgc3R5bGUsIGNvbnN0
IEZvbnQmIGZvCiAKICAgICBpZiAoc3RyaW5nLmxlbmd0aCgpICE9IGxlbmd0aCB8fCBzdGFydFBv
cykKICAgICAgICAgc3RyaW5nID0gc3RyaW5nLnN1YnN0cmluZ1NoYXJpbmdJbXBsKHN0YXJ0UG9z
LCBsZW5ndGgpOwotCisgICAgCisgICAgQVNTRVJUKHJlbmRlcmVyKCkudGV4dExlbmd0aCgpID49
IHN0YXJ0UG9zKTsKICAgICByZXR1cm4gY29uc3RydWN0VGV4dFJ1bihzdHlsZSwgZm9udCwgc3Ry
aW5nLCByZW5kZXJlcigpLnRleHRMZW5ndGgoKSAtIHN0YXJ0UG9zLCBjaGFyYWN0ZXJzV2l0aEh5
cGhlbik7CiB9CiAKLVRleHRSdW4gSW5saW5lVGV4dEJveDo6Y29uc3RydWN0VGV4dFJ1bihjb25z
dCBSZW5kZXJTdHlsZSYgc3R5bGUsIGNvbnN0IEZvbnQmIGZvbnQsIFN0cmluZyBzdHJpbmcsIGlu
dCBtYXhpbXVtTGVuZ3RoLCBCdWZmZXJGb3JBcHBlbmRpbmdIeXBoZW4qIGNoYXJhY3RlcnNXaXRo
SHlwaGVuKSBjb25zdAorVGV4dFJ1biBJbmxpbmVUZXh0Qm94Ojpjb25zdHJ1Y3RUZXh0UnVuKGNv
bnN0IFJlbmRlclN0eWxlJiBzdHlsZSwgY29uc3QgRm9udCYgZm9udCwgU3RyaW5nIHN0cmluZywg
dW5zaWduZWQgbWF4aW11bUxlbmd0aCwgQnVmZmVyRm9yQXBwZW5kaW5nSHlwaGVuKiBjaGFyYWN0
ZXJzV2l0aEh5cGhlbikgY29uc3QKIHsKLSAgICBpbnQgbGVuZ3RoID0gc3RyaW5nLmxlbmd0aCgp
OworICAgIHVuc2lnbmVkIGxlbmd0aCA9IHN0cmluZy5sZW5ndGgoKTsKIAogICAgIGlmIChjaGFy
YWN0ZXJzV2l0aEh5cGhlbikgewogICAgICAgICBhZGp1c3RDaGFyYWN0ZXJzQW5kTGVuZ3RoRm9y
SHlwaGVuKCpjaGFyYWN0ZXJzV2l0aEh5cGhlbiwgc3R5bGUsIHN0cmluZywgbGVuZ3RoKTsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9JbmxpbmVUZXh0Qm94LmggYi9Tb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvSW5saW5lVGV4dEJveC5oCmluZGV4IGM0MmI1NGU4ZDJiNzU5
NGY4YWI5YTY3ODhmODk3OWRmZTU2Yjg0YjAuLjdkM2Y1YjY2ZWZkODMxOTU2NDhlZmI4MmJkM2Ri
YTkwNTNhMmQ0ZmMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9JbmxpbmVU
ZXh0Qm94LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0lubGluZVRleHRCb3guaApA
QCAtMTEwLDE1ICsxMTAsMTUgQEAgcHJpdmF0ZToKICAgICBMYXlvdXRVbml0IHNlbGVjdGlvbkJv
dHRvbSgpIGNvbnN0OwogICAgIExheW91dFVuaXQgc2VsZWN0aW9uSGVpZ2h0KCkgY29uc3Q7CiAK
LSAgICBUZXh0UnVuIGNvbnN0cnVjdFRleHRSdW4oY29uc3QgUmVuZGVyU3R5bGUmLCBjb25zdCBG
b250JiwgQnVmZmVyRm9yQXBwZW5kaW5nSHlwaGVuKiA9IDApIGNvbnN0OwotICAgIFRleHRSdW4g
Y29uc3RydWN0VGV4dFJ1bihjb25zdCBSZW5kZXJTdHlsZSYsIGNvbnN0IEZvbnQmLCBTdHJpbmcs
IGludCBtYXhpbXVtTGVuZ3RoLCBCdWZmZXJGb3JBcHBlbmRpbmdIeXBoZW4qID0gMCkgY29uc3Q7
CisgICAgVGV4dFJ1biBjb25zdHJ1Y3RUZXh0UnVuKGNvbnN0IFJlbmRlclN0eWxlJiwgY29uc3Qg
Rm9udCYsIEJ1ZmZlckZvckFwcGVuZGluZ0h5cGhlbiogPSBudWxscHRyKSBjb25zdDsKKyAgICBU
ZXh0UnVuIGNvbnN0cnVjdFRleHRSdW4oY29uc3QgUmVuZGVyU3R5bGUmLCBjb25zdCBGb250Jiwg
U3RyaW5nLCB1bnNpZ25lZCBtYXhpbXVtTGVuZ3RoLCBCdWZmZXJGb3JBcHBlbmRpbmdIeXBoZW4q
ID0gbnVsbHB0cikgY29uc3Q7CiAKIHB1YmxpYzoKICAgICB2aXJ0dWFsIEZsb2F0UmVjdCBjYWxj
dWxhdGVCb3VuZGFyaWVzKCkgY29uc3QgeyByZXR1cm4gRmxvYXRSZWN0KHgoKSwgeSgpLCB3aWR0
aCgpLCBoZWlnaHQoKSk7IH0KIAotICAgIHZpcnR1YWwgTGF5b3V0UmVjdCBsb2NhbFNlbGVjdGlv
blJlY3QoaW50IHN0YXJ0UG9zLCBpbnQgZW5kUG9zKSBjb25zdDsKLSAgICBib29sIGlzU2VsZWN0
ZWQoaW50IHN0YXJ0UG9zLCBpbnQgZW5kUG9zKSBjb25zdDsKLSAgICB2b2lkIHNlbGVjdGlvblN0
YXJ0RW5kKGludCYgc1BvcywgaW50JiBlUG9zKTsKKyAgICB2aXJ0dWFsIExheW91dFJlY3QgbG9j
YWxTZWxlY3Rpb25SZWN0KHVuc2lnbmVkIHN0YXJ0UG9zLCB1bnNpZ25lZCBlbmRQb3MpIGNvbnN0
OworICAgIGJvb2wgaXNTZWxlY3RlZCh1bnNpZ25lZCBzdGFydFBvcywgdW5zaWduZWQgZW5kUG9z
KSBjb25zdDsKKyAgICB2b2lkIHNlbGVjdGlvblN0YXJ0RW5kKHVuc2lnbmVkJiBzUG9zLCB1bnNp
Z25lZCYgZVBvcyk7CiAKIHByb3RlY3RlZDoKICAgICB2aXJ0dWFsIHZvaWQgcGFpbnQoUGFpbnRJ
bmZvJiwgY29uc3QgTGF5b3V0UG9pbnQmLCBMYXlvdXRVbml0IGxpbmVUb3AsIExheW91dFVuaXQg
bGluZUJvdHRvbSk7CkBAIC0xNTgsMTMgKzE1OCwxMyBAQCBwcml2YXRlOgogCiBwdWJsaWM6CiAg
ICAgdmlydHVhbCBpbnQgb2Zmc2V0Rm9yUG9zaXRpb24oZmxvYXQgeCwgYm9vbCBpbmNsdWRlUGFy
dGlhbEdseXBocyA9IHRydWUpIGNvbnN0OwotICAgIHZpcnR1YWwgZmxvYXQgcG9zaXRpb25Gb3JP
ZmZzZXQoaW50IG9mZnNldCkgY29uc3Q7CisgICAgdmlydHVhbCBmbG9hdCBwb3NpdGlvbkZvck9m
ZnNldCh1bnNpZ25lZCBvZmZzZXQpIGNvbnN0OwogCiAgICAgLy8gTmVlZHMgdG8gYmUgcHVibGlj
LCBzbyB0aGUgc3RhdGljIHBhaW50VGV4dFdpdGhTaGFkb3dzKCkgZnVuY3Rpb24gY2FuIHVzZSBp
dC4KICAgICBzdGF0aWMgRmxvYXRTaXplIGFwcGx5U2hhZG93VG9HcmFwaGljc0NvbnRleHQoR3Jh
cGhpY3NDb250ZXh0KiwgY29uc3QgU2hhZG93RGF0YSosIGNvbnN0IEZsb2F0UmVjdCYgdGV4dFJl
Y3QsIGJvb2wgc3Ryb2tlZCwgYm9vbCBvcGFxdWUsIGJvb2wgaG9yaXpvbnRhbCk7CiAKIHByb3Rl
Y3RlZDoKLSAgICB2b2lkIHBhaW50Q29tcG9zaXRpb25CYWNrZ3JvdW5kKEdyYXBoaWNzQ29udGV4
dCosIGNvbnN0IEZsb2F0UG9pbnQmIGJveE9yaWdpbiwgY29uc3QgUmVuZGVyU3R5bGUmLCBjb25z
dCBGb250JiwgaW50IHN0YXJ0UG9zLCBpbnQgZW5kUG9zKTsKKyAgICB2b2lkIHBhaW50Q29tcG9z
aXRpb25CYWNrZ3JvdW5kKEdyYXBoaWNzQ29udGV4dCosIGNvbnN0IEZsb2F0UG9pbnQmIGJveE9y
aWdpbiwgY29uc3QgUmVuZGVyU3R5bGUmLCBjb25zdCBGb250JiwgdW5zaWduZWQgc3RhcnRQb3Ms
IHVuc2lnbmVkIGVuZFBvcyk7CiAgICAgdm9pZCBwYWludERvY3VtZW50TWFya2VycyhHcmFwaGlj
c0NvbnRleHQqLCBjb25zdCBGbG9hdFBvaW50JiBib3hPcmlnaW4sIGNvbnN0IFJlbmRlclN0eWxl
JiwgY29uc3QgRm9udCYsIGJvb2wgYmFja2dyb3VuZCk7CiAgICAgdm9pZCBwYWludENvbXBvc2l0
aW9uVW5kZXJsaW5lKEdyYXBoaWNzQ29udGV4dCosIGNvbnN0IEZsb2F0UG9pbnQmIGJveE9yaWdp
biwgY29uc3QgQ29tcG9zaXRpb25VbmRlcmxpbmUmKTsKIApAQCAtMTg3LDcgKzE4Nyw3IEBAIHBy
aXZhdGU6CiAgICAgSW5saW5lVGV4dEJveCogbV9wcmV2VGV4dEJveDsgLy8gVGhlIHByZXZpb3Vz
IGJveCB0aGF0IGFsc28gdXNlcyBvdXIgUmVuZGVyT2JqZWN0CiAgICAgSW5saW5lVGV4dEJveCog
bV9uZXh0VGV4dEJveDsgLy8gVGhlIG5leHQgYm94IHRoYXQgYWxzbyB1c2VzIG91ciBSZW5kZXJP
YmplY3QKIAotICAgIGludCBtX3N0YXJ0OworICAgIHVuc2lnbmVkIG1fc3RhcnQ7CiAgICAgdW5z
aWduZWQgc2hvcnQgbV9sZW47CiAKICAgICAvLyBXaGVyZSB0byB0cnVuY2F0ZSB3aGVuIHRleHQg
b3ZlcmZsb3cgaXMgYXBwbGllZC4gV2UgdXNlIHNwZWNpYWwgY29uc3RhbnRzIHRvCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQ29tYmluZVRleHQuY3BwIGIvU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckNvbWJpbmVUZXh0LmNwcAppbmRleCAzZjAxM2Ri
OTFkN2Y1Yzg3NTVlNTJkOGM0MGVjOTlkNmEwNmM4M2E4Li5jYjM2ZmZkYmZhNmEyNDQzOGZhOGUy
NTVkNTYwNzgxNTQzNjhhMjEyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyQ29tYmluZVRleHQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJDb21iaW5lVGV4dC5jcHAKQEAgLTcyLDkgKzcyLDggQEAgdm9pZCBSZW5kZXJDb21iaW5lVGV4
dDo6YWRqdXN0VGV4dE9yaWdpbihGbG9hdFBvaW50JiB0ZXh0T3JpZ2luLCBjb25zdCBGbG9hdFJl
Y3QKICAgICAgICAgdGV4dE9yaWdpbi5tb3ZlKGJveFJlY3QuaGVpZ2h0KCkgLyAyIC0gY2VpbGYo
bV9jb21iaW5lZFRleHRXaWR0aCkgLyAyLCBzdHlsZSgpLmZvbnQoKS5waXhlbFNpemUoKSk7CiB9
CiAKLXZvaWQgUmVuZGVyQ29tYmluZVRleHQ6OmdldFN0cmluZ1RvUmVuZGVyKGludCBzdGFydCwg
U3RyaW5nJiBzdHJpbmcsIGludCYgbGVuZ3RoKSBjb25zdAordm9pZCBSZW5kZXJDb21iaW5lVGV4
dDo6Z2V0U3RyaW5nVG9SZW5kZXIodW5zaWduZWQgc3RhcnQsIFN0cmluZyYgc3RyaW5nLCB1bnNp
Z25lZCYgbGVuZ3RoKSBjb25zdAogewotICAgIEFTU0VSVChzdGFydCA+PSAwKTsKICAgICBpZiAo
bV9pc0NvbWJpbmVkKSB7CiAgICAgICAgIHN0cmluZyA9IG9yaWdpbmFsVGV4dCgpOwogICAgICAg
ICBsZW5ndGggPSBzdHJpbmcubGVuZ3RoKCk7CkBAIC04Miw3ICs4MSw3IEBAIHZvaWQgUmVuZGVy
Q29tYmluZVRleHQ6OmdldFN0cmluZ1RvUmVuZGVyKGludCBzdGFydCwgU3RyaW5nJiBzdHJpbmcs
IGludCYgbGVuZ3RoCiAgICAgfQogIAogICAgIHN0cmluZyA9IHRleHQoKTsKLSAgICBzdHJpbmcg
PSBzdHJpbmcuc3Vic3RyaW5nU2hhcmluZ0ltcGwoc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KHN0YXJ0
KSwgbGVuZ3RoKTsKKyAgICBzdHJpbmcgPSBzdHJpbmcuc3Vic3RyaW5nU2hhcmluZ0ltcGwoc3Rh
cnQsIGxlbmd0aCk7CiB9CiAKIHZvaWQgUmVuZGVyQ29tYmluZVRleHQ6OmNvbWJpbmVUZXh0KCkK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJDb21iaW5lVGV4dC5o
IGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckNvbWJpbmVUZXh0LmgKaW5kZXggMWRk
ZmVlOTI5ZjVjNDkwMjFhYzk1YmQ3OGU5OTRkZjY5NTUxMzUyOS4uNGNmZjk2MDY5MjYyYTM4Mzk1
MDhjNDI0Mjk3MTI3YTM0MmMwNjNiZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlckNvbWJpbmVUZXh0LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlckNvbWJpbmVUZXh0LmgKQEAgLTM2LDcgKzM2LDcgQEAgcHVibGljOgogCiAgICAgdm9pZCBj
b21iaW5lVGV4dCgpOwogICAgIHZvaWQgYWRqdXN0VGV4dE9yaWdpbihGbG9hdFBvaW50JiB0ZXh0
T3JpZ2luLCBjb25zdCBGbG9hdFJlY3QmIGJveFJlY3QpIGNvbnN0OwotICAgIHZvaWQgZ2V0U3Ry
aW5nVG9SZW5kZXIoaW50LCBTdHJpbmcmIHN0cmluZywgaW50JiBsZW5ndGgpIGNvbnN0OworICAg
IHZvaWQgZ2V0U3RyaW5nVG9SZW5kZXIodW5zaWduZWQsIFN0cmluZyYsIHVuc2lnbmVkJiBsZW5n
dGgpIGNvbnN0OwogICAgIGJvb2wgaXNDb21iaW5lZCgpIGNvbnN0IHsgcmV0dXJuIG1faXNDb21i
aW5lZDsgfQogICAgIGZsb2F0IGNvbWJpbmVkVGV4dFdpZHRoKGNvbnN0IEZvbnQmIGZvbnQpIGNv
bnN0IHsgcmV0dXJuIGZvbnQuc2l6ZSgpOyB9CiAgICAgY29uc3QgRm9udCYgb3JpZ2luYWxGb250
KCkgY29uc3QgeyByZXR1cm4gcGFyZW50KCktPnN0eWxlKCkuZm9udCgpOyB9CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR0lubGluZUZsb3dCb3guY3BwIGIvU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdJbmxpbmVGbG93Qm94LmNwcAppbmRleCAxN2Q0
MWJkOGY0YmExODRhZDFmZjViNzI3YTE0MDg3NzEwZjRjNjEwLi42ZmIyNzllMzQ1ODBkMzM1MGZk
OWZiYjExNTNjZThiZmZjMWM3ZWRkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvc3ZnL1NWR0lubGluZUZsb3dCb3guY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9zdmcvU1ZHSW5saW5lRmxvd0JveC5jcHAKQEAgLTEwNiw4ICsxMDYsOCBAQCB2b2lkIFNWR0lu
bGluZUZsb3dCb3g6OmNvbXB1dGVUZXh0TWF0Y2hNYXJrZXJSZWN0Rm9yUmVuZGVyZXIoUmVuZGVy
U1ZHSW5saW5lVGV4dAogICAgICAgICAgICAgaWYgKG1hcmtlclN0YXJ0UG9zaXRpb24gPj0gbWFy
a2VyRW5kUG9zaXRpb24pCiAgICAgICAgICAgICAgICAgY29udGludWU7CiAKLSAgICAgICAgICAg
IGludCBmcmFnbWVudFN0YXJ0UG9zaXRpb24gPSAwOwotICAgICAgICAgICAgaW50IGZyYWdtZW50
RW5kUG9zaXRpb24gPSAwOworICAgICAgICAgICAgdW5zaWduZWQgZnJhZ21lbnRTdGFydFBvc2l0
aW9uID0gMDsKKyAgICAgICAgICAgIHVuc2lnbmVkIGZyYWdtZW50RW5kUG9zaXRpb24gPSAwOwog
CiAgICAgICAgICAgICBjb25zdCBWZWN0b3I8U1ZHVGV4dEZyYWdtZW50PiYgZnJhZ21lbnRzID0g
dGV4dEJveC0+dGV4dEZyYWdtZW50cygpOwogICAgICAgICAgICAgdW5zaWduZWQgdGV4dEZyYWdt
ZW50c1NpemUgPSBmcmFnbWVudHMuc2l6ZSgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL3N2Zy9TVkdJbmxpbmVUZXh0Qm94LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9zdmcvU1ZHSW5saW5lVGV4dEJveC5jcHAKaW5kZXggYjE5MzY3M2M4MzA1NmY4ZjViYzBh
ZjA2YjU2MGYzMmZhODBlNTMzYS4uMWJiNjVhZDQ2YjJjNjA5ODY0OGM4MjM1NDIwOGIzMWQxOWIz
ZDE3YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdJbmxpbmVU
ZXh0Qm94LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR0lubGluZVRl
eHRCb3guY3BwCkBAIC0xMDEsNyArMTAxLDcgQEAgaW50IFNWR0lubGluZVRleHRCb3g6Om9mZnNl
dEZvclBvc2l0aW9uSW5GcmFnbWVudChjb25zdCBTVkdUZXh0RnJhZ21lbnQmIGZyYWdtZW4KICAg
ICByZXR1cm4gZnJhZ21lbnQuY2hhcmFjdGVyT2Zmc2V0IC0gc3RhcnQoKSArIHJlbmRlcmVyKCku
c2NhbGVkRm9udCgpLm9mZnNldEZvclBvc2l0aW9uKHRleHRSdW4sIHBvc2l0aW9uICogc2NhbGlu
Z0ZhY3RvciwgaW5jbHVkZVBhcnRpYWxHbHlwaHMpOwogfQogCi1mbG9hdCBTVkdJbmxpbmVUZXh0
Qm94Ojpwb3NpdGlvbkZvck9mZnNldChpbnQpIGNvbnN0CitmbG9hdCBTVkdJbmxpbmVUZXh0Qm94
Ojpwb3NpdGlvbkZvck9mZnNldCh1bnNpZ25lZCkgY29uc3QKIHsKICAgICAvLyBTVkcgZG9lc24n
dCB1c2UgdGhlIG9mZnNldCA8LT4gcG9zaXRpb24gc2VsZWN0aW9uIHN5c3RlbS4gCiAgICAgQVNT
RVJUX05PVF9SRUFDSEVEKCk7CkBAIC0xMzcsMTEgKzEzNywxMiBAQCBGbG9hdFJlY3QgU1ZHSW5s
aW5lVGV4dEJveDo6c2VsZWN0aW9uUmVjdEZvclRleHRGcmFnbWVudChjb25zdCBTVkdUZXh0RnJh
Z21lbnQmCiAgICAgcmV0dXJuIHNuYXBwZWRTZWxlY3Rpb25SZWN0OwogfQogCi1MYXlvdXRSZWN0
IFNWR0lubGluZVRleHRCb3g6OmxvY2FsU2VsZWN0aW9uUmVjdChpbnQgc3RhcnRQb3NpdGlvbiwg
aW50IGVuZFBvc2l0aW9uKSBjb25zdAorTGF5b3V0UmVjdCBTVkdJbmxpbmVUZXh0Qm94Ojpsb2Nh
bFNlbGVjdGlvblJlY3QodW5zaWduZWQgc3RhcnRQb3NpdGlvbiwgdW5zaWduZWQgZW5kUG9zaXRp
b24pIGNvbnN0CiB7Ci0gICAgaW50IGJveFN0YXJ0ID0gc3RhcnQoKTsKLSAgICBzdGFydFBvc2l0
aW9uID0gc3RkOjptYXgoc3RhcnRQb3NpdGlvbiAtIGJveFN0YXJ0LCAwKTsKLSAgICBlbmRQb3Np
dGlvbiA9IHN0ZDo6bWluKGVuZFBvc2l0aW9uIC0gYm94U3RhcnQsIHN0YXRpY19jYXN0PGludD4o
bGVuKCkpKTsKKyAgICB1bnNpZ25lZCBib3hTdGFydCA9IHN0YXJ0KCk7CisgICAgc3RhcnRQb3Np
dGlvbiA9IHN0YXJ0UG9zaXRpb24gPiBib3hTdGFydCA/IHN0YXJ0UG9zaXRpb24gLSBib3hTdGFy
dCA6IDA7CisgICAgQVNTRVJUKGVuZFBvc2l0aW9uID49IGJveFN0YXJ0KTsKKyAgICBlbmRQb3Np
dGlvbiA9IHN0ZDo6bWluKGVuZFBvc2l0aW9uIC0gYm94U3RhcnQsIGxlbigpKTsKICAgICBpZiAo
c3RhcnRQb3NpdGlvbiA+PSBlbmRQb3NpdGlvbikKICAgICAgICAgcmV0dXJuIExheW91dFJlY3Qo
KTsKIApAQCAtMTQ5LDggKzE1MCw4IEBAIExheW91dFJlY3QgU1ZHSW5saW5lVGV4dEJveDo6bG9j
YWxTZWxlY3Rpb25SZWN0KGludCBzdGFydFBvc2l0aW9uLCBpbnQgZW5kUG9zaXRpCiAKICAgICBB
ZmZpbmVUcmFuc2Zvcm0gZnJhZ21lbnRUcmFuc2Zvcm07CiAgICAgRmxvYXRSZWN0IHNlbGVjdGlv
blJlY3Q7Ci0gICAgaW50IGZyYWdtZW50U3RhcnRQb3NpdGlvbiA9IDA7Ci0gICAgaW50IGZyYWdt
ZW50RW5kUG9zaXRpb24gPSAwOworICAgIHVuc2lnbmVkIGZyYWdtZW50U3RhcnRQb3NpdGlvbiA9
IDA7CisgICAgdW5zaWduZWQgZnJhZ21lbnRFbmRQb3NpdGlvbiA9IDA7CiAKICAgICB1bnNpZ25l
ZCB0ZXh0RnJhZ21lbnRzU2l6ZSA9IG1fdGV4dEZyYWdtZW50cy5zaXplKCk7CiAgICAgZm9yICh1
bnNpZ25lZCBpID0gMDsgaSA8IHRleHRGcmFnbWVudHNTaXplOyArK2kpIHsKQEAgLTIxMywxMSAr
MjE0LDExIEBAIHZvaWQgU1ZHSW5saW5lVGV4dEJveDo6cGFpbnRTZWxlY3Rpb25CYWNrZ3JvdW5k
KFBhaW50SW5mbyYgcGFpbnRJbmZvKQogICAgICAgICAgICAgc2VsZWN0aW9uU3R5bGUgPSAmc3R5
bGU7CiAgICAgfQogCi0gICAgaW50IHN0YXJ0UG9zaXRpb24sIGVuZFBvc2l0aW9uOworICAgIHVu
c2lnbmVkIHN0YXJ0UG9zaXRpb24sIGVuZFBvc2l0aW9uOwogICAgIHNlbGVjdGlvblN0YXJ0RW5k
KHN0YXJ0UG9zaXRpb24sIGVuZFBvc2l0aW9uKTsKIAotICAgIGludCBmcmFnbWVudFN0YXJ0UG9z
aXRpb24gPSAwOwotICAgIGludCBmcmFnbWVudEVuZFBvc2l0aW9uID0gMDsKKyAgICB1bnNpZ25l
ZCBmcmFnbWVudFN0YXJ0UG9zaXRpb24gPSAwOworICAgIHVuc2lnbmVkIGZyYWdtZW50RW5kUG9z
aXRpb24gPSAwOwogICAgIEFmZmluZVRyYW5zZm9ybSBmcmFnbWVudFRyYW5zZm9ybTsKICAgICB1
bnNpZ25lZCB0ZXh0RnJhZ21lbnRzU2l6ZSA9IG1fdGV4dEZyYWdtZW50cy5zaXplKCk7CiAgICAg
Zm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHRleHRGcmFnbWVudHNTaXplOyArK2kpIHsKQEAgLTQ0
MCwyMSArNDQxLDI0IEBAIFRleHRSdW4gU1ZHSW5saW5lVGV4dEJveDo6Y29uc3RydWN0VGV4dFJ1
bihSZW5kZXJTdHlsZSogc3R5bGUsIGNvbnN0IFNWR1RleHRGcmFnCiAgICAgcmV0dXJuIHJ1bjsK
IH0KIAotYm9vbCBTVkdJbmxpbmVUZXh0Qm94OjptYXBTdGFydEVuZFBvc2l0aW9uc0ludG9GcmFn
bWVudENvb3JkaW5hdGVzKGNvbnN0IFNWR1RleHRGcmFnbWVudCYgZnJhZ21lbnQsIGludCYgc3Rh
cnRQb3NpdGlvbiwgaW50JiBlbmRQb3NpdGlvbikgY29uc3QKK2Jvb2wgU1ZHSW5saW5lVGV4dEJv
eDo6bWFwU3RhcnRFbmRQb3NpdGlvbnNJbnRvRnJhZ21lbnRDb29yZGluYXRlcyhjb25zdCBTVkdU
ZXh0RnJhZ21lbnQmIGZyYWdtZW50LCB1bnNpZ25lZCYgc3RhcnRQb3NpdGlvbiwgdW5zaWduZWQm
IGVuZFBvc2l0aW9uKSBjb25zdAogewogICAgIGlmIChzdGFydFBvc2l0aW9uID49IGVuZFBvc2l0
aW9uKQogICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBpbnQgb2Zmc2V0ID0gc3RhdGljX2Nh
c3Q8aW50PihmcmFnbWVudC5jaGFyYWN0ZXJPZmZzZXQpIC0gc3RhcnQoKTsKLSAgICBpbnQgbGVu
Z3RoID0gc3RhdGljX2Nhc3Q8aW50PihmcmFnbWVudC5sZW5ndGgpOworICAgIAorICAgIEFTU0VS
VChmcmFnbWVudC5jaGFyYWN0ZXJPZmZzZXQgPj0gc3RhcnQoKSk7CisgICAgdW5zaWduZWQgb2Zm
c2V0ID0gZnJhZ21lbnQuY2hhcmFjdGVyT2Zmc2V0IC0gc3RhcnQoKTsKKyAgICB1bnNpZ25lZCBs
ZW5ndGggPSBmcmFnbWVudC5sZW5ndGg7CiAKICAgICBpZiAoc3RhcnRQb3NpdGlvbiA+PSBvZmZz
ZXQgKyBsZW5ndGggfHwgZW5kUG9zaXRpb24gPD0gb2Zmc2V0KQogICAgICAgICByZXR1cm4gZmFs
c2U7CiAKICAgICBpZiAoc3RhcnRQb3NpdGlvbiA8IG9mZnNldCkKICAgICAgICAgc3RhcnRQb3Np
dGlvbiA9IDA7Ci0gICAgZWxzZQorICAgIGVsc2UgeworICAgICAgICBBU1NFUlQoc3RhcnRQb3Np
dGlvbiA+PSBvZmZzZXQpOwogICAgICAgICBzdGFydFBvc2l0aW9uIC09IG9mZnNldDsKKyAgICB9
CiAKICAgICBpZiAoZW5kUG9zaXRpb24gPiBvZmZzZXQgKyBsZW5ndGgpCiAgICAgICAgIGVuZFBv
c2l0aW9uID0gbGVuZ3RoOwpAQCAtNjI2LDggKzYzMCw4IEBAIHZvaWQgU1ZHSW5saW5lVGV4dEJv
eDo6cGFpbnRUZXh0KEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgUmVuZGVyU3R5bGUqIHN0eWxl
LCBSCiAgICAgQVNTRVJUKHN0eWxlKTsKICAgICBBU1NFUlQoc2VsZWN0aW9uU3R5bGUpOwogCi0g
ICAgaW50IHN0YXJ0UG9zaXRpb24gPSAwOwotICAgIGludCBlbmRQb3NpdGlvbiA9IDA7CisgICAg
dW5zaWduZWQgc3RhcnRQb3NpdGlvbiA9IDA7CisgICAgdW5zaWduZWQgZW5kUG9zaXRpb24gPSAw
OwogICAgIGlmIChoYXNTZWxlY3Rpb24pIHsKICAgICAgICAgc2VsZWN0aW9uU3RhcnRFbmQoc3Rh
cnRQb3NpdGlvbiwgZW5kUG9zaXRpb24pOwogICAgICAgICBoYXNTZWxlY3Rpb24gPSBtYXBTdGFy
dEVuZFBvc2l0aW9uc0ludG9GcmFnbWVudENvb3JkaW5hdGVzKGZyYWdtZW50LCBzdGFydFBvc2l0
aW9uLCBlbmRQb3NpdGlvbik7CkBAIC02NTUsNyArNjU5LDcgQEAgdm9pZCBTVkdJbmxpbmVUZXh0
Qm94OjpwYWludFRleHQoR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBSZW5kZXJTdHlsZSogc3R5
bGUsIFIKICAgICAgICAgU1ZHUmVzb3VyY2VzQ2FjaGU6OmNsaWVudFN0eWxlQ2hhbmdlZChwYXJl
bnQoKS0+cmVuZGVyZXIoKSwgU3R5bGVEaWZmZXJlbmNlUmVwYWludCwgKnN0eWxlKTsKIAogICAg
IC8vIEV2ZW50dWFsbHkgZHJhdyB0ZXh0IHVzaW5nIHJlZ3VsYXIgc3R5bGUgZnJvbSB0aGUgZW5k
IHBvc2l0aW9uIG9mIHRoZSBzZWxlY3Rpb24gdG8gdGhlIGVuZCBvZiB0aGUgY3VycmVudCBjaHVu
ayBwYXJ0Ci0gICAgaWYgKGVuZFBvc2l0aW9uIDwgc3RhdGljX2Nhc3Q8aW50PihmcmFnbWVudC5s
ZW5ndGgpICYmICFwYWludFNlbGVjdGVkVGV4dE9ubHkpCisgICAgaWYgKGVuZFBvc2l0aW9uIDwg
ZnJhZ21lbnQubGVuZ3RoICYmICFwYWludFNlbGVjdGVkVGV4dE9ubHkpCiAgICAgICAgIHBhaW50
VGV4dFdpdGhTaGFkb3dzKGNvbnRleHQsIHN0eWxlLCB0ZXh0UnVuLCBmcmFnbWVudCwgZW5kUG9z
aXRpb24sIGZyYWdtZW50Lmxlbmd0aCk7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9zdmcvU1ZHSW5saW5lVGV4dEJveC5oIGIvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL3N2Zy9TVkdJbmxpbmVUZXh0Qm94LmgKaW5kZXggZjA4OTRmMGI1NTNhOWRiMGQ2YmFjNWEx
Yjg0Y2YzNGFlYzdmMTU5NS4uNTE4ZWExYjg2NzJmMzNhYjExMmJkZDE5NWJlMzdiNzZhN2JmMDZh
MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdJbmxpbmVUZXh0
Qm94LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdJbmxpbmVUZXh0Qm94
LmgKQEAgLTQzLDEzICs0MywxMyBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCBpbnQgc2VsZWN0aW9u
VG9wKCkgeyByZXR1cm4gdG9wKCk7IH0KICAgICB2aXJ0dWFsIGludCBzZWxlY3Rpb25IZWlnaHQo
KSB7IHJldHVybiBzdGF0aWNfY2FzdDxpbnQ+KGNlaWxmKG1fbG9naWNhbEhlaWdodCkpOyB9CiAg
ICAgdmlydHVhbCBpbnQgb2Zmc2V0Rm9yUG9zaXRpb24oZmxvYXQgeCwgYm9vbCBpbmNsdWRlUGFy
dGlhbEdseXBocyA9IHRydWUpIGNvbnN0OwotICAgIHZpcnR1YWwgZmxvYXQgcG9zaXRpb25Gb3JP
ZmZzZXQoaW50IG9mZnNldCkgY29uc3Q7CisgICAgdmlydHVhbCBmbG9hdCBwb3NpdGlvbkZvck9m
ZnNldCh1bnNpZ25lZCBvZmZzZXQpIGNvbnN0OwogCiAgICAgdm9pZCBwYWludFNlbGVjdGlvbkJh
Y2tncm91bmQoUGFpbnRJbmZvJik7CiAgICAgdmlydHVhbCB2b2lkIHBhaW50KFBhaW50SW5mbyYs
IGNvbnN0IExheW91dFBvaW50JiwgTGF5b3V0VW5pdCBsaW5lVG9wLCBMYXlvdXRVbml0IGxpbmVC
b3R0b20pOwotICAgIHZpcnR1YWwgTGF5b3V0UmVjdCBsb2NhbFNlbGVjdGlvblJlY3QoaW50IHN0
YXJ0UG9zaXRpb24sIGludCBlbmRQb3NpdGlvbikgY29uc3Qgb3ZlcnJpZGU7CisgICAgdmlydHVh
bCBMYXlvdXRSZWN0IGxvY2FsU2VsZWN0aW9uUmVjdCh1bnNpZ25lZCBzdGFydFBvc2l0aW9uLCB1
bnNpZ25lZCBlbmRQb3NpdGlvbikgY29uc3Qgb3ZlcnJpZGU7CiAKLSAgICBib29sIG1hcFN0YXJ0
RW5kUG9zaXRpb25zSW50b0ZyYWdtZW50Q29vcmRpbmF0ZXMoY29uc3QgU1ZHVGV4dEZyYWdtZW50
JiwgaW50JiBzdGFydFBvc2l0aW9uLCBpbnQmIGVuZFBvc2l0aW9uKSBjb25zdDsKKyAgICBib29s
IG1hcFN0YXJ0RW5kUG9zaXRpb25zSW50b0ZyYWdtZW50Q29vcmRpbmF0ZXMoY29uc3QgU1ZHVGV4
dEZyYWdtZW50JiwgdW5zaWduZWQmIHN0YXJ0UG9zaXRpb24sIHVuc2lnbmVkJiBlbmRQb3NpdGlv
bikgY29uc3Q7CiAKICAgICB2aXJ0dWFsIEZsb2F0UmVjdCBjYWxjdWxhdGVCb3VuZGFyaWVzKCkg
Y29uc3Q7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHVGV4
dE1ldHJpY3NCdWlsZGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHVGV4
dE1ldHJpY3NCdWlsZGVyLmNwcAppbmRleCBlNjAxMDJkYjA4YzM5NjM5NDhiOGE1NmNmMTk2ZmE1
NjMzZGMwODFmLi4xY2I1YmMyOTVhMjFiMWZjOGFjNTg0YzJjNzI2NzMxMzFhNWRhMjQ3IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR1RleHRNZXRyaWNzQnVpbGRl
ci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdUZXh0TWV0cmljc0J1
aWxkZXIuY3BwCkBAIC0zNywxMyArMzcsMTMgQEAgU1ZHVGV4dE1ldHJpY3NCdWlsZGVyOjpTVkdU
ZXh0TWV0cmljc0J1aWxkZXIoKQogCiBpbmxpbmUgYm9vbCBTVkdUZXh0TWV0cmljc0J1aWxkZXI6
OmN1cnJlbnRDaGFyYWN0ZXJTdGFydHNTdXJyb2dhdGVQYWlyKCkgY29uc3QKIHsKLSAgICByZXR1
cm4gVTE2X0lTX0xFQUQobV9ydW5bbV90ZXh0UG9zaXRpb25dKSAmJiBpbnQobV90ZXh0UG9zaXRp
b24gKyAxKSA8IG1fcnVuLmNoYXJhY3RlcnNMZW5ndGgoKSAmJiBVMTZfSVNfVFJBSUwobV9ydW5b
bV90ZXh0UG9zaXRpb24gKyAxXSk7CisgICAgcmV0dXJuIFUxNl9JU19MRUFEKG1fcnVuW21fdGV4
dFBvc2l0aW9uXSkgJiYgbV90ZXh0UG9zaXRpb24gKyAxIDwgbV9ydW4uY2hhcmFjdGVyc0xlbmd0
aCgpICYmIFUxNl9JU19UUkFJTChtX3J1blttX3RleHRQb3NpdGlvbiArIDFdKTsKIH0KIAogYm9v
bCBTVkdUZXh0TWV0cmljc0J1aWxkZXI6OmFkdmFuY2UoKQogewogICAgIG1fdGV4dFBvc2l0aW9u
ICs9IG1fY3VycmVudE1ldHJpY3MubGVuZ3RoKCk7Ci0gICAgaWYgKGludChtX3RleHRQb3NpdGlv
bikgPj0gbV9ydW4uY2hhcmFjdGVyc0xlbmd0aCgpKQorICAgIGlmIChtX3RleHRQb3NpdGlvbiA+
PSBtX3J1bi5jaGFyYWN0ZXJzTGVuZ3RoKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAg
IGlmIChtX2lzQ29tcGxleFRleHQpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvc3ZnL1NWR1RleHRRdWVyeS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NW
R1RleHRRdWVyeS5jcHAKaW5kZXggZTQ2ODQxNmU3ZWE2OGFkYzE0ZmY5YmFmYzUwNGUxOWE5NjAx
ZWE2NS4uNzFkZGY4MWRhMTkzNTZkZGVmMzI3ZGVmMTQ2NmQ5ZGQ3YWJmYzg3ZCAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdUZXh0UXVlcnkuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHVGV4dFF1ZXJ5LmNwcApAQCAtMTMzLDEzICsx
MzMsMTUgQEAgYm9vbCBTVkdUZXh0UXVlcnk6OmV4ZWN1dGVRdWVyeShEYXRhKiBxdWVyeURhdGEs
IFByb2Nlc3NUZXh0RnJhZ21lbnRDYWxsYmFjayBmcmEKICAgICByZXR1cm4gZmFsc2U7CiB9CiAK
LWJvb2wgU1ZHVGV4dFF1ZXJ5OjptYXBTdGFydEVuZFBvc2l0aW9uc0ludG9GcmFnbWVudENvb3Jk
aW5hdGVzKERhdGEqIHF1ZXJ5RGF0YSwgY29uc3QgU1ZHVGV4dEZyYWdtZW50JiBmcmFnbWVudCwg
aW50JiBzdGFydFBvc2l0aW9uLCBpbnQmIGVuZFBvc2l0aW9uKSBjb25zdAorYm9vbCBTVkdUZXh0
UXVlcnk6Om1hcFN0YXJ0RW5kUG9zaXRpb25zSW50b0ZyYWdtZW50Q29vcmRpbmF0ZXMoRGF0YSog
cXVlcnlEYXRhLCBjb25zdCBTVkdUZXh0RnJhZ21lbnQmIGZyYWdtZW50LCB1bnNpZ25lZCYgc3Rh
cnRQb3NpdGlvbiwgdW5zaWduZWQmIGVuZFBvc2l0aW9uKSBjb25zdAogewogICAgIC8vIFJldXNl
IHRoZSBzYW1lIGxvZ2ljIHVzZWQgZm9yIHRleHQgc2VsZWN0aW9uICYgcGFpbnRpbmcsIHRvIG1h
cCBvdXIgcXVlcnkgc3RhcnQvbGVuZ3RoIGludG8gc3RhcnQvZW5kUG9zaXRpb25zIG9mIHRoZSBj
dXJyZW50IHRleHQgZnJhZ21lbnQuCisgICAgQVNTRVJUKHN0YXJ0UG9zaXRpb24gPj0gcXVlcnlE
YXRhLT5wcm9jZXNzZWRDaGFyYWN0ZXJzKTsKKyAgICBBU1NFUlQoZW5kUG9zaXRpb24gPj0gcXVl
cnlEYXRhLT5wcm9jZXNzZWRDaGFyYWN0ZXJzKTsKICAgICBzdGFydFBvc2l0aW9uIC09IHF1ZXJ5
RGF0YS0+cHJvY2Vzc2VkQ2hhcmFjdGVyczsKICAgICBlbmRQb3NpdGlvbiAtPSBxdWVyeURhdGEt
PnByb2Nlc3NlZENoYXJhY3RlcnM7CiAKLSAgICBpZiAoc3RhcnRQb3NpdGlvbiA+PSBlbmRQb3Np
dGlvbiB8fCBzdGFydFBvc2l0aW9uIDwgMCB8fCBlbmRQb3NpdGlvbiA8IDApCisgICAgaWYgKHN0
YXJ0UG9zaXRpb24gPj0gZW5kUG9zaXRpb24pCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAg
IG1vZGlmeVN0YXJ0RW5kUG9zaXRpb25zUmVzcGVjdGluZ0xpZ2F0dXJlcyhxdWVyeURhdGEsIHN0
YXJ0UG9zaXRpb24sIGVuZFBvc2l0aW9uKTsKQEAgLTE1MCw3ICsxNTIsNyBAQCBib29sIFNWR1Rl
eHRRdWVyeTo6bWFwU3RhcnRFbmRQb3NpdGlvbnNJbnRvRnJhZ21lbnRDb29yZGluYXRlcyhEYXRh
KiBxdWVyeURhdGEsCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLXZvaWQgU1ZHVGV4dFF1ZXJ5Ojpt
b2RpZnlTdGFydEVuZFBvc2l0aW9uc1Jlc3BlY3RpbmdMaWdhdHVyZXMoRGF0YSogcXVlcnlEYXRh
LCBpbnQmIHN0YXJ0UG9zaXRpb24sIGludCYgZW5kUG9zaXRpb24pIGNvbnN0Cit2b2lkIFNWR1Rl
eHRRdWVyeTo6bW9kaWZ5U3RhcnRFbmRQb3NpdGlvbnNSZXNwZWN0aW5nTGlnYXR1cmVzKERhdGEq
IHF1ZXJ5RGF0YSwgdW5zaWduZWQmIHN0YXJ0UG9zaXRpb24sIHVuc2lnbmVkJiBlbmRQb3NpdGlv
bikgY29uc3QKIHsKICAgICBTVkdUZXh0TGF5b3V0QXR0cmlidXRlcyogbGF5b3V0QXR0cmlidXRl
cyA9IHF1ZXJ5RGF0YS0+dGV4dFJlbmRlcmVyLT5sYXlvdXRBdHRyaWJ1dGVzKCk7CiAgICAgVmVj
dG9yPFNWR1RleHRNZXRyaWNzPiYgdGV4dE1ldHJpY3NWYWx1ZXMgPSBsYXlvdXRBdHRyaWJ1dGVz
LT50ZXh0TWV0cmljc1ZhbHVlcygpOwpAQCAtMTgxLDIxICsxODMsMjEgQEAgdm9pZCBTVkdUZXh0
UXVlcnk6Om1vZGlmeVN0YXJ0RW5kUG9zaXRpb25zUmVzcGVjdGluZ0xpZ2F0dXJlcyhEYXRhKiBx
dWVyeURhdGEsIGkKICAgICAgICAgICAgIGJyZWFrOwogCiAgICAgICAgIC8vIElmIHRoZSBzdGFy
dCBwb3NpdGlvbiBtYXBzIHRvIGEgY2hhcmFjdGVyIGluIHRoZSBtZXRyaWNzIGxpc3QsIHdlIGRv
bid0IG5lZWQgdG8gbW9kaWZ5IGl0LgotICAgICAgICBpZiAoc3RhcnRQb3NpdGlvbiA9PSBzdGF0
aWNfY2FzdDxpbnQ+KHBvc2l0aW9uT2Zmc2V0KSkKKyAgICAgICAgaWYgKHN0YXJ0UG9zaXRpb24g
PT0gcG9zaXRpb25PZmZzZXQpCiAgICAgICAgICAgICBhbHRlclN0YXJ0UG9zaXRpb24gPSBmYWxz
ZTsKIAogICAgICAgICAvLyBJZiB0aGUgc3RhcnQgcG9zaXRpb24gbWFwcyB0byBhIGNoYXJhY3Rl
ciBpbiB0aGUgbWV0cmljcyBsaXN0LCB3ZSBkb24ndCBuZWVkIHRvIG1vZGlmeSBpdC4KLSAgICAg
ICAgaWYgKGVuZFBvc2l0aW9uID09IHN0YXRpY19jYXN0PGludD4ocG9zaXRpb25PZmZzZXQpKQor
ICAgICAgICBpZiAoZW5kUG9zaXRpb24gPT0gcG9zaXRpb25PZmZzZXQpCiAgICAgICAgICAgICBh
bHRlckVuZFBvc2l0aW9uID0gZmFsc2U7CiAKICAgICAgICAgLy8gRGV0ZWN0IGxpZ2F0dXJlcy4K
ICAgICAgICAgaWYgKGxhc3RQb3NpdGlvbk9mZnNldCAhPSAtMSAmJiBsYXN0UG9zaXRpb25PZmZz
ZXQgLSBwb3NpdGlvbk9mZnNldCA+IDEpIHsKLSAgICAgICAgICAgIGlmIChhbHRlclN0YXJ0UG9z
aXRpb24gJiYgc3RhcnRQb3NpdGlvbiA+IGxhc3RQb3NpdGlvbk9mZnNldCAmJiBzdGFydFBvc2l0
aW9uIDwgc3RhdGljX2Nhc3Q8aW50Pihwb3NpdGlvbk9mZnNldCkpIHsKKyAgICAgICAgICAgIGlm
IChhbHRlclN0YXJ0UG9zaXRpb24gJiYgc3RhcnRQb3NpdGlvbiA+IHN0YXRpY19jYXN0PHVuc2ln
bmVkPihsYXN0UG9zaXRpb25PZmZzZXQpICYmIHN0YXJ0UG9zaXRpb24gPCBwb3NpdGlvbk9mZnNl
dCkgewogICAgICAgICAgICAgICAgIHN0YXJ0UG9zaXRpb24gPSBsYXN0UG9zaXRpb25PZmZzZXQ7
CiAgICAgICAgICAgICAgICAgYWx0ZXJTdGFydFBvc2l0aW9uID0gZmFsc2U7CiAgICAgICAgICAg
ICB9CiAKLSAgICAgICAgICAgIGlmIChhbHRlckVuZFBvc2l0aW9uICYmIGVuZFBvc2l0aW9uID4g
bGFzdFBvc2l0aW9uT2Zmc2V0ICYmIGVuZFBvc2l0aW9uIDwgc3RhdGljX2Nhc3Q8aW50Pihwb3Np
dGlvbk9mZnNldCkpIHsKKyAgICAgICAgICAgIGlmIChhbHRlckVuZFBvc2l0aW9uICYmIGVuZFBv
c2l0aW9uID4gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGxhc3RQb3NpdGlvbk9mZnNldCkgJiYgZW5k
UG9zaXRpb24gPCBwb3NpdGlvbk9mZnNldCkgewogICAgICAgICAgICAgICAgIGVuZFBvc2l0aW9u
ID0gcG9zaXRpb25PZmZzZXQ7CiAgICAgICAgICAgICAgICAgYWx0ZXJFbmRQb3NpdGlvbiA9IGZh
bHNlOwogICAgICAgICAgICAgfQpAQCAtMjEyLDEyICsyMTQsMTIgQEAgdm9pZCBTVkdUZXh0UXVl
cnk6Om1vZGlmeVN0YXJ0RW5kUG9zaXRpb25zUmVzcGVjdGluZ0xpZ2F0dXJlcyhEYXRhKiBxdWVy
eURhdGEsIGkKICAgICAgICAgcmV0dXJuOwogCiAgICAgaWYgKGxhc3RQb3NpdGlvbk9mZnNldCAh
PSAtMSAmJiBsYXN0UG9zaXRpb25PZmZzZXQgLSBwb3NpdGlvbk9mZnNldCA+IDEpIHsKLSAgICAg
ICAgaWYgKGFsdGVyU3RhcnRQb3NpdGlvbiAmJiBzdGFydFBvc2l0aW9uID4gbGFzdFBvc2l0aW9u
T2Zmc2V0ICYmIHN0YXJ0UG9zaXRpb24gPCBzdGF0aWNfY2FzdDxpbnQ+KHBvc2l0aW9uT2Zmc2V0
KSkgeworICAgICAgICBpZiAoYWx0ZXJTdGFydFBvc2l0aW9uICYmIHN0YXJ0UG9zaXRpb24gPiBz
dGF0aWNfY2FzdDx1bnNpZ25lZD4obGFzdFBvc2l0aW9uT2Zmc2V0KSAmJiBzdGFydFBvc2l0aW9u
IDwgcG9zaXRpb25PZmZzZXQpIHsKICAgICAgICAgICAgIHN0YXJ0UG9zaXRpb24gPSBsYXN0UG9z
aXRpb25PZmZzZXQ7CiAgICAgICAgICAgICBhbHRlclN0YXJ0UG9zaXRpb24gPSBmYWxzZTsKICAg
ICAgICAgfQogCi0gICAgICAgIGlmIChhbHRlckVuZFBvc2l0aW9uICYmIGVuZFBvc2l0aW9uID4g
bGFzdFBvc2l0aW9uT2Zmc2V0ICYmIGVuZFBvc2l0aW9uIDwgc3RhdGljX2Nhc3Q8aW50Pihwb3Np
dGlvbk9mZnNldCkpIHsKKyAgICAgICAgaWYgKGFsdGVyRW5kUG9zaXRpb24gJiYgZW5kUG9zaXRp
b24gPiBzdGF0aWNfY2FzdDx1bnNpZ25lZD4obGFzdFBvc2l0aW9uT2Zmc2V0KSAmJiBlbmRQb3Np
dGlvbiA8IHBvc2l0aW9uT2Zmc2V0KSB7CiAgICAgICAgICAgICBlbmRQb3NpdGlvbiA9IHBvc2l0
aW9uT2Zmc2V0OwogICAgICAgICAgICAgYWx0ZXJFbmRQb3NpdGlvbiA9IGZhbHNlOwogICAgICAg
ICB9CkBAIC0yODcsOCArMjg5LDggQEAgYm9vbCBTVkdUZXh0UXVlcnk6OnN1YlN0cmluZ0xlbmd0
aENhbGxiYWNrKERhdGEqIHF1ZXJ5RGF0YSwgY29uc3QgU1ZHVGV4dEZyYWdtZW4KIHsKICAgICBT
dWJTdHJpbmdMZW5ndGhEYXRhKiBkYXRhID0gc3RhdGljX2Nhc3Q8U3ViU3RyaW5nTGVuZ3RoRGF0
YSo+KHF1ZXJ5RGF0YSk7CiAKLSAgICBpbnQgc3RhcnRQb3NpdGlvbiA9IGRhdGEtPnN0YXJ0UG9z
aXRpb247Ci0gICAgaW50IGVuZFBvc2l0aW9uID0gc3RhcnRQb3NpdGlvbiArIGRhdGEtPmxlbmd0
aDsKKyAgICB1bnNpZ25lZCBzdGFydFBvc2l0aW9uID0gZGF0YS0+c3RhcnRQb3NpdGlvbjsKKyAg
ICB1bnNpZ25lZCBlbmRQb3NpdGlvbiA9IHN0YXJ0UG9zaXRpb24gKyBkYXRhLT5sZW5ndGg7CiAg
ICAgaWYgKCFtYXBTdGFydEVuZFBvc2l0aW9uc0ludG9GcmFnbWVudENvb3JkaW5hdGVzKHF1ZXJ5
RGF0YSwgZnJhZ21lbnQsIHN0YXJ0UG9zaXRpb24sIGVuZFBvc2l0aW9uKSkKICAgICAgICAgcmV0
dXJuIGZhbHNlOwogCkBAIC0zMjIsOCArMzI0LDggQEAgYm9vbCBTVkdUZXh0UXVlcnk6OnN0YXJ0
UG9zaXRpb25PZkNoYXJhY3RlckNhbGxiYWNrKERhdGEqIHF1ZXJ5RGF0YSwgY29uc3QgU1ZHVGUK
IHsKICAgICBTdGFydFBvc2l0aW9uT2ZDaGFyYWN0ZXJEYXRhKiBkYXRhID0gc3RhdGljX2Nhc3Q8
U3RhcnRQb3NpdGlvbk9mQ2hhcmFjdGVyRGF0YSo+KHF1ZXJ5RGF0YSk7CiAKLSAgICBpbnQgc3Rh
cnRQb3NpdGlvbiA9IGRhdGEtPnBvc2l0aW9uOwotICAgIGludCBlbmRQb3NpdGlvbiA9IHN0YXJ0
UG9zaXRpb24gKyAxOworICAgIHVuc2lnbmVkIHN0YXJ0UG9zaXRpb24gPSBkYXRhLT5wb3NpdGlv
bjsKKyAgICB1bnNpZ25lZCBlbmRQb3NpdGlvbiA9IHN0YXJ0UG9zaXRpb24gKyAxOwogICAgIGlm
ICghbWFwU3RhcnRFbmRQb3NpdGlvbnNJbnRvRnJhZ21lbnRDb29yZGluYXRlcyhxdWVyeURhdGEs
IGZyYWdtZW50LCBzdGFydFBvc2l0aW9uLCBlbmRQb3NpdGlvbikpCiAgICAgICAgIHJldHVybiBm
YWxzZTsKIApAQCAtMzcxLDggKzM3Myw4IEBAIGJvb2wgU1ZHVGV4dFF1ZXJ5OjplbmRQb3NpdGlv
bk9mQ2hhcmFjdGVyQ2FsbGJhY2soRGF0YSogcXVlcnlEYXRhLCBjb25zdCBTVkdUZXh0CiB7CiAg
ICAgRW5kUG9zaXRpb25PZkNoYXJhY3RlckRhdGEqIGRhdGEgPSBzdGF0aWNfY2FzdDxFbmRQb3Np
dGlvbk9mQ2hhcmFjdGVyRGF0YSo+KHF1ZXJ5RGF0YSk7CiAKLSAgICBpbnQgc3RhcnRQb3NpdGlv
biA9IGRhdGEtPnBvc2l0aW9uOwotICAgIGludCBlbmRQb3NpdGlvbiA9IHN0YXJ0UG9zaXRpb24g
KyAxOworICAgIHVuc2lnbmVkIHN0YXJ0UG9zaXRpb24gPSBkYXRhLT5wb3NpdGlvbjsKKyAgICB1
bnNpZ25lZCBlbmRQb3NpdGlvbiA9IHN0YXJ0UG9zaXRpb24gKyAxOwogICAgIGlmICghbWFwU3Rh
cnRFbmRQb3NpdGlvbnNJbnRvRnJhZ21lbnRDb29yZGluYXRlcyhxdWVyeURhdGEsIGZyYWdtZW50
LCBzdGFydFBvc2l0aW9uLCBlbmRQb3NpdGlvbikpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIApA
QCAtNDE5LDggKzQyMSw4IEBAIGJvb2wgU1ZHVGV4dFF1ZXJ5Ojpyb3RhdGlvbk9mQ2hhcmFjdGVy
Q2FsbGJhY2soRGF0YSogcXVlcnlEYXRhLCBjb25zdCBTVkdUZXh0RnJhCiB7CiAgICAgUm90YXRp
b25PZkNoYXJhY3RlckRhdGEqIGRhdGEgPSBzdGF0aWNfY2FzdDxSb3RhdGlvbk9mQ2hhcmFjdGVy
RGF0YSo+KHF1ZXJ5RGF0YSk7CiAKLSAgICBpbnQgc3RhcnRQb3NpdGlvbiA9IGRhdGEtPnBvc2l0
aW9uOwotICAgIGludCBlbmRQb3NpdGlvbiA9IHN0YXJ0UG9zaXRpb24gKyAxOworICAgIHVuc2ln
bmVkIHN0YXJ0UG9zaXRpb24gPSBkYXRhLT5wb3NpdGlvbjsKKyAgICB1bnNpZ25lZCBlbmRQb3Np
dGlvbiA9IHN0YXJ0UG9zaXRpb24gKyAxOwogICAgIGlmICghbWFwU3RhcnRFbmRQb3NpdGlvbnNJ
bnRvRnJhZ21lbnRDb29yZGluYXRlcyhxdWVyeURhdGEsIGZyYWdtZW50LCBzdGFydFBvc2l0aW9u
LCBlbmRQb3NpdGlvbikpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIApAQCAtNDg3LDggKzQ4OSw4
IEBAIGJvb2wgU1ZHVGV4dFF1ZXJ5OjpleHRlbnRPZkNoYXJhY3RlckNhbGxiYWNrKERhdGEqIHF1
ZXJ5RGF0YSwgY29uc3QgU1ZHVGV4dEZyYWdtCiB7CiAgICAgRXh0ZW50T2ZDaGFyYWN0ZXJEYXRh
KiBkYXRhID0gc3RhdGljX2Nhc3Q8RXh0ZW50T2ZDaGFyYWN0ZXJEYXRhKj4ocXVlcnlEYXRhKTsK
IAotICAgIGludCBzdGFydFBvc2l0aW9uID0gZGF0YS0+cG9zaXRpb247Ci0gICAgaW50IGVuZFBv
c2l0aW9uID0gc3RhcnRQb3NpdGlvbiArIDE7CisgICAgdW5zaWduZWQgc3RhcnRQb3NpdGlvbiA9
IGRhdGEtPnBvc2l0aW9uOworICAgIHVuc2lnbmVkIGVuZFBvc2l0aW9uID0gc3RhcnRQb3NpdGlv
biArIDE7CiAgICAgaWYgKCFtYXBTdGFydEVuZFBvc2l0aW9uc0ludG9GcmFnbWVudENvb3JkaW5h
dGVzKHF1ZXJ5RGF0YSwgZnJhZ21lbnQsIHN0YXJ0UG9zaXRpb24sIGVuZFBvc2l0aW9uKSkKICAg
ICAgICAgcmV0dXJuIGZhbHNlOwogCkBAIC01MjIsOCArNTI0LDggQEAgYm9vbCBTVkdUZXh0UXVl
cnk6OmNoYXJhY3Rlck51bWJlckF0UG9zaXRpb25DYWxsYmFjayhEYXRhKiBxdWVyeURhdGEsIGNv
bnN0IFNWR1QKIAogICAgIEZsb2F0UmVjdCBleHRlbnQ7CiAgICAgZm9yICh1bnNpZ25lZCBpID0g
MDsgaSA8IGZyYWdtZW50Lmxlbmd0aDsgKytpKSB7Ci0gICAgICAgIGludCBzdGFydFBvc2l0aW9u
ID0gZGF0YS0+cHJvY2Vzc2VkQ2hhcmFjdGVycyArIGk7Ci0gICAgICAgIGludCBlbmRQb3NpdGlv
biA9IHN0YXJ0UG9zaXRpb24gKyAxOworICAgICAgICB1bnNpZ25lZCBzdGFydFBvc2l0aW9uID0g
ZGF0YS0+cHJvY2Vzc2VkQ2hhcmFjdGVycyArIGk7CisgICAgICAgIHVuc2lnbmVkIGVuZFBvc2l0
aW9uID0gc3RhcnRQb3NpdGlvbiArIDE7CiAgICAgICAgIGlmICghbWFwU3RhcnRFbmRQb3NpdGlv
bnNJbnRvRnJhZ21lbnRDb29yZGluYXRlcyhxdWVyeURhdGEsIGZyYWdtZW50LCBzdGFydFBvc2l0
aW9uLCBlbmRQb3NpdGlvbikpCiAgICAgICAgICAgICBjb250aW51ZTsKIApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdUZXh0UXVlcnkuaCBiL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9zdmcvU1ZHVGV4dFF1ZXJ5LmgKaW5kZXggNzIxYjJkZjhlMzMyNDVkYTg2
NDMzODViZTZlZTJiMWQyYjA5MzhkZi4uMzg3MzBhMzhkMDYxZTgyNWNkOTM3ZDc4MTg0YjhkM2Iz
ZmEwZmFhZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdUZXh0
UXVlcnkuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR1RleHRRdWVyeS5o
CkBAIC01Miw4ICs1Miw4IEBAIHByaXZhdGU6CiAgICAgYm9vbCBleGVjdXRlUXVlcnkoRGF0YSos
IFByb2Nlc3NUZXh0RnJhZ21lbnRDYWxsYmFjaykgY29uc3Q7CiAKICAgICB2b2lkIGNvbGxlY3RU
ZXh0Qm94ZXNJbkZsb3dCb3goSW5saW5lRmxvd0JveCopOwotICAgIGJvb2wgbWFwU3RhcnRFbmRQ
b3NpdGlvbnNJbnRvRnJhZ21lbnRDb29yZGluYXRlcyhEYXRhKiwgY29uc3QgU1ZHVGV4dEZyYWdt
ZW50JiwgaW50JiBzdGFydFBvc2l0aW9uLCBpbnQmIGVuZFBvc2l0aW9uKSBjb25zdDsKLSAgICB2
b2lkIG1vZGlmeVN0YXJ0RW5kUG9zaXRpb25zUmVzcGVjdGluZ0xpZ2F0dXJlcyhEYXRhKiwgaW50
JiBzdGFydFBvc2l0aW9uLCBpbnQmIGVuZFBvc2l0aW9uKSBjb25zdDsKKyAgICBib29sIG1hcFN0
YXJ0RW5kUG9zaXRpb25zSW50b0ZyYWdtZW50Q29vcmRpbmF0ZXMoRGF0YSosIGNvbnN0IFNWR1Rl
eHRGcmFnbWVudCYsIHVuc2lnbmVkJiBzdGFydFBvc2l0aW9uLCB1bnNpZ25lZCYgZW5kUG9zaXRp
b24pIGNvbnN0OworICAgIHZvaWQgbW9kaWZ5U3RhcnRFbmRQb3NpdGlvbnNSZXNwZWN0aW5nTGln
YXR1cmVzKERhdGEqLCB1bnNpZ25lZCYgc3RhcnRQb3NpdGlvbiwgdW5zaWduZWQmIGVuZFBvc2l0
aW9uKSBjb25zdDsKIAogcHJpdmF0ZToKICAgICBib29sIG51bWJlck9mQ2hhcmFjdGVyc0NhbGxi
YWNrKERhdGEqLCBjb25zdCBTVkdUZXh0RnJhZ21lbnQmKSBjb25zdDsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHVGV4dFJ1blJlbmRlcmluZ0NvbnRleHQuY3Bw
IGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdUZXh0UnVuUmVuZGVyaW5nQ29udGV4
dC5jcHAKaW5kZXggNjE3NzM4NjNjN2NmNDMzMmUyZDQzOWMxMWRmYTllNzdmZGI3ZDg3NC4uMjEy
OTg0OGZjYWZmY2UzYjQ1ZDU1YjA4NDJmMTJmNTI3YmJkZjkwZCAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdUZXh0UnVuUmVuZGVyaW5nQ29udGV4dC5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdUZXh0UnVuUmVuZGVyaW5nQ29udGV4
dC5jcHAKQEAgLTEwMyw3ICsxMDMsNyBAQCBib29sIFNWR1RleHRSdW5SZW5kZXJpbmdDb250ZXh0
OjphcHBseVNWR0tlcm5pbmcoY29uc3QgU2ltcGxlRm9udERhdGEqIGZvbnREYXRhLAogCiBjbGFz
cyBTVkdHbHlwaFRvUGF0aFRyYW5zbGF0b3IgZmluYWwgOiBwdWJsaWMgR2x5cGhUb1BhdGhUcmFu
c2xhdG9yIHsKIHB1YmxpYzoKLSAgICBTVkdHbHlwaFRvUGF0aFRyYW5zbGF0b3IoY29uc3QgVGV4
dFJ1biogY29uc3QsIGNvbnN0IEdseXBoQnVmZmVyJiwgY29uc3QgRmxvYXRQb2ludCYsIGNvbnN0
IFNWR0ZvbnREYXRhJiwgU1ZHRm9udEVsZW1lbnQmLCBjb25zdCBpbnQgZnJvbSwgY29uc3QgaW50
IG51bUdseXBocywgZmxvYXQgc2NhbGUsIGJvb2wgaXNWZXJ0aWNhbFRleHQpOworICAgIFNWR0ds
eXBoVG9QYXRoVHJhbnNsYXRvcihjb25zdCBUZXh0UnVuKiBjb25zdCwgY29uc3QgR2x5cGhCdWZm
ZXImLCBjb25zdCBGbG9hdFBvaW50JiwgY29uc3QgU1ZHRm9udERhdGEmLCBTVkdGb250RWxlbWVu
dCYsIHVuc2lnbmVkIGZyb20sIHVuc2lnbmVkIG51bUdseXBocywgZmxvYXQgc2NhbGUsIGJvb2wg
aXNWZXJ0aWNhbFRleHQpOwogcHJpdmF0ZToKICAgICB2aXJ0dWFsIGJvb2wgY29udGFpbnNNb3Jl
UGF0aHMoKSBvdmVycmlkZQogICAgIHsKQEAgLTEyMywxNSArMTIzLDE1IEBAIHByaXZhdGU6CiAg
ICAgRmxvYXRQb2ludCBtX2N1cnJlbnRQb2ludDsKICAgICBGbG9hdFBvaW50IG1fZ2x5cGhPcmln
aW47CiAgICAgU1ZHR2x5cGggbV9zdmdHbHlwaDsKLSAgICBpbnQgbV9pbmRleDsKKyAgICB1bnNp
Z25lZCBtX2luZGV4OwogICAgIEdseXBoIG1fZ2x5cGg7CiAgICAgU1ZHRm9udEVsZW1lbnQmIG1f
Zm9udEVsZW1lbnQ7Ci0gICAgY29uc3QgZmxvYXQgbV9zdG9wcGluZ1BvaW50OworICAgIGNvbnN0
IHVuc2lnbmVkIG1fc3RvcHBpbmdQb2ludDsKICAgICBjb25zdCBmbG9hdCBtX3NjYWxlOwogICAg
IGNvbnN0IGJvb2wgbV9pc1ZlcnRpY2FsVGV4dDsKIH07CiAKLVNWR0dseXBoVG9QYXRoVHJhbnNs
YXRvcjo6U1ZHR2x5cGhUb1BhdGhUcmFuc2xhdG9yKGNvbnN0IFRleHRSdW4qIGNvbnN0IHRleHRS
dW4sIGNvbnN0IEdseXBoQnVmZmVyJiBnbHlwaEJ1ZmZlciwgY29uc3QgRmxvYXRQb2ludCYgcG9p
bnQsIGNvbnN0IFNWR0ZvbnREYXRhJiBzdmdGb250RGF0YSwgU1ZHRm9udEVsZW1lbnQmIGZvbnRF
bGVtZW50LCBjb25zdCBpbnQgZnJvbSwgY29uc3QgaW50IG51bUdseXBocywgZmxvYXQgc2NhbGUs
IGJvb2wgaXNWZXJ0aWNhbFRleHQpCitTVkdHbHlwaFRvUGF0aFRyYW5zbGF0b3I6OlNWR0dseXBo
VG9QYXRoVHJhbnNsYXRvcihjb25zdCBUZXh0UnVuKiBjb25zdCB0ZXh0UnVuLCBjb25zdCBHbHlw
aEJ1ZmZlciYgZ2x5cGhCdWZmZXIsIGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50LCBjb25zdCBTVkdG
b250RGF0YSYgc3ZnRm9udERhdGEsIFNWR0ZvbnRFbGVtZW50JiBmb250RWxlbWVudCwgdW5zaWdu
ZWQgZnJvbSwgdW5zaWduZWQgbnVtR2x5cGhzLCBmbG9hdCBzY2FsZSwgYm9vbCBpc1ZlcnRpY2Fs
VGV4dCkKICAgICA6IG1fdGV4dFJ1bih0ZXh0UnVuKQogICAgICwgbV9nbHlwaEJ1ZmZlcihnbHlw
aEJ1ZmZlcikKICAgICAsIG1fc3ZnRm9udERhdGEoc3ZnRm9udERhdGEpCkBAIC0yODcsNyArMjg3
LDcgQEAgdm9pZCBTVkdUZXh0UnVuUmVuZGVyaW5nQ29udGV4dDo6ZHJhd1NWR0dseXBocyhHcmFw
aGljc0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IFMKICAgICB9CiB9CiAKLUdseXBoRGF0YSBTVkdU
ZXh0UnVuUmVuZGVyaW5nQ29udGV4dDo6Z2x5cGhEYXRhRm9yQ2hhcmFjdGVyKGNvbnN0IEZvbnQm
IGZvbnQsIFdpZHRoSXRlcmF0b3ImIGl0ZXJhdG9yLCBVQ2hhcjMyIGNoYXJhY3RlciwgYm9vbCBt
aXJyb3IsIGludCBjdXJyZW50Q2hhcmFjdGVyLCB1bnNpZ25lZCYgYWR2YW5jZUxlbmd0aCkKK0ds
eXBoRGF0YSBTVkdUZXh0UnVuUmVuZGVyaW5nQ29udGV4dDo6Z2x5cGhEYXRhRm9yQ2hhcmFjdGVy
KGNvbnN0IEZvbnQmIGZvbnQsIFdpZHRoSXRlcmF0b3ImIGl0ZXJhdG9yLCBVQ2hhcjMyIGNoYXJh
Y3RlciwgYm9vbCBtaXJyb3IsIHVuc2lnbmVkIGN1cnJlbnRDaGFyYWN0ZXIsIHVuc2lnbmVkJiBh
ZHZhbmNlTGVuZ3RoKQogewogICAgIGNvbnN0IFNpbXBsZUZvbnREYXRhKiBwcmltYXJ5Rm9udCA9
IGZvbnQucHJpbWFyeUZvbnQoKTsKICAgICBBU1NFUlQocHJpbWFyeUZvbnQpOwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdUZXh0UnVuUmVuZGVyaW5nQ29udGV4
dC5oIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdUZXh0UnVuUmVuZGVyaW5nQ29u
dGV4dC5oCmluZGV4IGQwYjkxZjZjYjM0OGVlNzNjYzYxZDQ5MzhiYTE0ZDQ2NGMwYWNhNmQuLjFk
ZDY0NmI1NzBjZDZjNThlNmQ0NmJmMDU3NGY2OTNjZmFiYjQ3NWMgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHVGV4dFJ1blJlbmRlcmluZ0NvbnRleHQuaAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR1RleHRSdW5SZW5kZXJpbmdDb250ZXh0
LmgKQEAgLTQyLDcgKzQyLDcgQEAgcHVibGljOgogICAgIFJlbmRlclNWR1Jlc291cmNlKiBhY3Rp
dmVQYWludGluZ1Jlc291cmNlKCkgY29uc3QgeyByZXR1cm4gbV9hY3RpdmVQYWludGluZ1Jlc291
cmNlOyB9CiAgICAgdm9pZCBzZXRBY3RpdmVQYWludGluZ1Jlc291cmNlKFJlbmRlclNWR1Jlc291
cmNlKiBvYmplY3QpIHsgbV9hY3RpdmVQYWludGluZ1Jlc291cmNlID0gb2JqZWN0OyB9CiAKLSAg
ICB2aXJ0dWFsIEdseXBoRGF0YSBnbHlwaERhdGFGb3JDaGFyYWN0ZXIoY29uc3QgRm9udCYsIFdp
ZHRoSXRlcmF0b3ImLCBVQ2hhcjMyIGNoYXJhY3RlciwgYm9vbCBtaXJyb3IsIGludCBjdXJyZW50
Q2hhcmFjdGVyLCB1bnNpZ25lZCYgYWR2YW5jZUxlbmd0aCkgb3ZlcnJpZGU7CisgICAgdmlydHVh
bCBHbHlwaERhdGEgZ2x5cGhEYXRhRm9yQ2hhcmFjdGVyKGNvbnN0IEZvbnQmLCBXaWR0aEl0ZXJh
dG9yJiwgVUNoYXIzMiBjaGFyYWN0ZXIsIGJvb2wgbWlycm9yLCB1bnNpZ25lZCBjdXJyZW50Q2hh
cmFjdGVyLCB1bnNpZ25lZCYgYWR2YW5jZUxlbmd0aCkgb3ZlcnJpZGU7CiAgICAgdmlydHVhbCB2
b2lkIGRyYXdTVkdHbHlwaHMoR3JhcGhpY3NDb250ZXh0KiwgY29uc3QgU2ltcGxlRm9udERhdGEq
LCBjb25zdCBHbHlwaEJ1ZmZlciYsIGludCBmcm9tLCBpbnQgdG8sIGNvbnN0IEZsb2F0UG9pbnQm
KSBjb25zdCBvdmVycmlkZTsKICAgICB2aXJ0dWFsIGZsb2F0IGZsb2F0V2lkdGhVc2luZ1NWR0Zv
bnQoY29uc3QgRm9udCYsIGNvbnN0IFRleHRSdW4mLCBpbnQmIGNoYXJzQ29uc3VtZWQsIFN0cmlu
ZyYgZ2x5cGhOYW1lKSBjb25zdCBvdmVycmlkZTsKICAgICB2aXJ0dWFsIGJvb2wgYXBwbHlTVkdL
ZXJuaW5nKGNvbnN0IFNpbXBsZUZvbnREYXRhKiwgV2lkdGhJdGVyYXRvciYsIEdseXBoQnVmZmVy
KiwgaW50IGZyb20pIGNvbnN0IG92ZXJyaWRlOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
c3ZnL1NWR0ZvbnREYXRhLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGb250RGF0YS5jcHAK
aW5kZXggODA3MTBjZTZjZmNjNThhYmI2ZGRiMWY5MWUzZmQ0ZDIyZTQyYzBkYy4uODI1ZTU5Zjlh
ZDA0ODcyMmE2NTIxMzFlNTMyMjAxYjk1MDk2ODk1ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvc3ZnL1NWR0ZvbnREYXRhLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRm9udERh
dGEuY3BwCkBAIC0xMzAsMTEgKzEzMCwxMSBAQCBmbG9hdCBTVkdGb250RGF0YTo6d2lkdGhGb3JT
VkdHbHlwaChHbHlwaCBnbHlwaCwgZmxvYXQgZm9udFNpemUpIGNvbnN0CiAgICAgcmV0dXJuIHN2
Z0dseXBoLmhvcml6b250YWxBZHZhbmNlWCAqIHNjYWxlRW1Ub1VuaXRzKGZvbnRTaXplLCBzdmdG
b250RmFjZUVsZW1lbnQtPnVuaXRzUGVyRW0oKSk7CiB9CiAKLWJvb2wgU1ZHRm9udERhdGE6OmFw
cGx5U1ZHR2x5cGhTZWxlY3Rpb24oV2lkdGhJdGVyYXRvciYgaXRlcmF0b3IsIEdseXBoRGF0YSYg
Z2x5cGhEYXRhLCBib29sIG1pcnJvciwgaW50IGN1cnJlbnRDaGFyYWN0ZXIsIHVuc2lnbmVkJiBh
ZHZhbmNlTGVuZ3RoKSBjb25zdAorYm9vbCBTVkdGb250RGF0YTo6YXBwbHlTVkdHbHlwaFNlbGVj
dGlvbihXaWR0aEl0ZXJhdG9yJiBpdGVyYXRvciwgR2x5cGhEYXRhJiBnbHlwaERhdGEsIGJvb2wg
bWlycm9yLCB1bnNpZ25lZCBjdXJyZW50Q2hhcmFjdGVyLCB1bnNpZ25lZCYgYWR2YW5jZUxlbmd0
aCkgY29uc3QKIHsKICAgICBjb25zdCBUZXh0UnVuJiBydW4gPSBpdGVyYXRvci5ydW4oKTsKICAg
ICBWZWN0b3I8U1ZHR2x5cGg6OkFyYWJpY0Zvcm0+JiBhcmFiaWNGb3JtcyA9IGl0ZXJhdG9yLmFy
YWJpY0Zvcm1zKCk7Ci0gICAgQVNTRVJUKGludChydW4uY2hhcmFjdGVyc0xlbmd0aCgpKSA+PSBj
dXJyZW50Q2hhcmFjdGVyKTsKKyAgICBBU1NFUlQocnVuLmNoYXJhY3RlcnNMZW5ndGgoKSA+PSBj
dXJyZW50Q2hhcmFjdGVyKTsKIAogICAgIC8vIEFzc29jaWF0ZSB0ZXh0IHdpdGggYXJhYmljIGZv
cm1zLCBpZiBuZWVkZWQuCiAgICAgU3RyaW5nIHJlbWFpbmluZ1RleHRJblJ1bjsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGb250RGF0YS5oIGIvU291cmNlL1dlYkNvcmUvc3Zn
L1NWR0ZvbnREYXRhLmgKaW5kZXggNzI3MjhhMTdhYTQ0YjM5NmNkMDQxMjRiNTEyNDkyMzgwY2Yy
MjQzOS4uMzI1MGE0NWY2ZDM3NzdmODMxZTgyYjMyZDZhMjM0NThkZGQzNTZmYSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZvbnREYXRhLmgKKysrIGIvU291cmNlL1dlYkNvcmUv
c3ZnL1NWR0ZvbnREYXRhLmgKQEAgLTM2LDcgKzM2LDcgQEAgcHVibGljOgogICAgIHZpcnR1YWwg
dm9pZCBpbml0aWFsaXplRm9udERhdGEoU2ltcGxlRm9udERhdGEqLCBmbG9hdCBmb250U2l6ZSkg
b3ZlcnJpZGU7CiAgICAgdmlydHVhbCBmbG9hdCB3aWR0aEZvclNWR0dseXBoKEdseXBoLCBmbG9h
dCBmb250U2l6ZSkgY29uc3Qgb3ZlcnJpZGU7CiAgICAgdmlydHVhbCBib29sIGZpbGxTVkdHbHlw
aFBhZ2UoR2x5cGhQYWdlKiwgdW5zaWduZWQgb2Zmc2V0LCB1bnNpZ25lZCBsZW5ndGgsIFVDaGFy
KiBidWZmZXIsIHVuc2lnbmVkIGJ1ZmZlckxlbmd0aCwgY29uc3QgU2ltcGxlRm9udERhdGEqKSBj
b25zdCBvdmVycmlkZTsKLSAgICB2aXJ0dWFsIGJvb2wgYXBwbHlTVkdHbHlwaFNlbGVjdGlvbihX
aWR0aEl0ZXJhdG9yJiwgR2x5cGhEYXRhJiwgYm9vbCBtaXJyb3IsIGludCBjdXJyZW50Q2hhcmFj
dGVyLCB1bnNpZ25lZCYgYWR2YW5jZUxlbmd0aCkgY29uc3Qgb3ZlcnJpZGU7CisgICAgdmlydHVh
bCBib29sIGFwcGx5U1ZHR2x5cGhTZWxlY3Rpb24oV2lkdGhJdGVyYXRvciYsIEdseXBoRGF0YSYs
IGJvb2wgbWlycm9yLCB1bnNpZ25lZCBjdXJyZW50Q2hhcmFjdGVyLCB1bnNpZ25lZCYgYWR2YW5j
ZUxlbmd0aCkgY29uc3Qgb3ZlcnJpZGU7CiAKICAgICBTVkdGb250RmFjZUVsZW1lbnQqIHN2Z0Zv
bnRGYWNlRWxlbWVudCgpIGNvbnN0IHsgcmV0dXJuIG1fc3ZnRm9udEZhY2VFbGVtZW50OyB9CiAK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>233476</attachid>
            <date>2014-06-20 16:12:11 -0700</date>
            <delta_ts>2014-06-20 16:25:59 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-133592-20140620161149.patch</filename>
            <type>text/plain</type>
            <size>91740</size>
            <attacher name="Myles C. Maxfield">mmaxfield</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTcwMjIwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggOThkMjY2NmYwZDk3M2E4
OTI0ZWNiYzUxOWFjMGE5YmUzZGI5MTc2ZS4uMWQ5ODA2ZmQyZGEzOTQ4OTk4ZGY4ZjI1MDJmZGY3
ZmM2MzNhZmY0NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDEzNCBAQAorMjAxNC0wNi0yMCAgTXls
ZXMgQy4gTWF4ZmllbGQgIDxtbWF4ZmllbGRAYXBwbGUuY29tPgorCisgICAgICAgIFVzZSB1bnNp
Z25lZHMgaW5zdGVhZCBvZiBpbnRzIGZvciBpbmRleGVzIGludG8gYSBzdHJpbmcgaW4gdGV4dCBs
YXlvdXQgY29kZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9MTMzNTkyCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAg
ICAgTWlncmF0ZSBtdWNoIG9mIHRoZSB0ZXh0LWhhbmRsaW5nIGNvZGUgdG8gdXNlIHVuc2lnbmVk
cyBmb3IgaW5kZXhlcyBpbnRvIGEgc3RyaW5nLgorCisgICAgICAgIE5vIG5ldyB0ZXN0cyBiZWNh
dXNlIHRoZXJlIGlzIG5vIGJlaGF2aW9yIGNoYW5nZS4KKworICAgICAgICAqIFdlYkNvcmUuZXhw
LmluOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0ZvbnQuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6Rm9udDo6ZHJhd1RleHQpOgorICAgICAgICAoV2ViQ29yZTo6Rm9udDo6ZHJhd0VtcGhh
c2lzTWFya3MpOgorICAgICAgICAoV2ViQ29yZTo6Rm9udDo6YWRqdXN0U2VsZWN0aW9uUmVjdEZv
clRleHQpOgorICAgICAgICAoV2ViQ29yZTo6Y29tcHV0ZVVuZGVybGluZVR5cGUpOgorICAgICAg
ICAqIHBsYXRmb3JtL2dyYXBoaWNzL0ZvbnQuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy9Gb250RmFzdFBhdGguY3BwOgorICAgICAgICAoV2ViQ29yZTo6Rm9udDo6Z2V0R2x5cGhzQW5k
QWR2YW5jZXNGb3JTaW1wbGVUZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OkZvbnQ6OmRyYXdTaW1w
bGVUZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OkZvbnQ6OmRyYXdFbXBoYXNpc01hcmtzRm9yU2lt
cGxlVGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpGb250OjpkcmF3R2x5cGhCdWZmZXIpOgorICAg
ICAgICAoV2ViQ29yZTo6Rm9udDo6ZHJhd0VtcGhhc2lzTWFya3MpOgorICAgICAgICAoV2ViQ29y
ZTo6Rm9udDo6YWRqdXN0U2VsZWN0aW9uUmVjdEZvclNpbXBsZVRleHQpOgorICAgICAgICAqIHBs
YXRmb3JtL2dyYXBoaWNzL0dseXBoQnVmZmVyLmg6CisgICAgICAgIChXZWJDb3JlOjpHbHlwaEJ1
ZmZlcjo6c2l6ZSk6CisgICAgICAgIChXZWJDb3JlOjpHbHlwaEJ1ZmZlcjo6Z2x5cGhzKToKKyAg
ICAgICAgKFdlYkNvcmU6OkdseXBoQnVmZmVyOjphZHZhbmNlcyk6CisgICAgICAgIChXZWJDb3Jl
OjpHbHlwaEJ1ZmZlcjo6Zm9udERhdGFBdCk6CisgICAgICAgIChXZWJDb3JlOjpHbHlwaEJ1ZmZl
cjo6YWR2YW5jZUF0KToKKyAgICAgICAgKFdlYkNvcmU6OkdseXBoQnVmZmVyOjpvZmZzZXRBdCk6
CisgICAgICAgIChXZWJDb3JlOjpHbHlwaEJ1ZmZlcjo6cmV2ZXJzZSk6CisgICAgICAgIChXZWJD
b3JlOjpHbHlwaEJ1ZmZlcjo6b2Zmc2V0SW5TdHJpbmcpOgorICAgICAgICAoV2ViQ29yZTo6R2x5
cGhCdWZmZXI6OnN3YXApOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29u
dGV4dC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpUZXh0UnVuSXRlcmF0b3I6OmF0RW5kKToKKyAg
ICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9MYXRpbjFUZXh0SXRlcmF0b3IuaDoKKyAgICAgICAg
KFdlYkNvcmU6OkxhdGluMVRleHRJdGVyYXRvcjo6TGF0aW4xVGV4dEl0ZXJhdG9yKToKKyAgICAg
ICAgKFdlYkNvcmU6OkxhdGluMVRleHRJdGVyYXRvcjo6Y3VycmVudENoYXJhY3Rlcik6CisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvU2ltcGxlRm9udERhdGEuaDoKKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy9TdXJyb2dhdGVQYWlyQXdhcmVUZXh0SXRlcmF0b3IuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6U3Vycm9nYXRlUGFpckF3YXJlVGV4dEl0ZXJhdG9yOjpTdXJyb2dhdGVQYWly
QXdhcmVUZXh0SXRlcmF0b3IpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL1N1cnJvZ2F0
ZVBhaXJBd2FyZVRleHRJdGVyYXRvci5oOgorICAgICAgICAoV2ViQ29yZTo6U3Vycm9nYXRlUGFp
ckF3YXJlVGV4dEl0ZXJhdG9yOjpjdXJyZW50Q2hhcmFjdGVyKToKKyAgICAgICAgKiBwbGF0Zm9y
bS9ncmFwaGljcy9UZXh0UnVuLmg6CisgICAgICAgIChXZWJDb3JlOjpUZXh0UnVuOjpsZW5ndGgp
OgorICAgICAgICAoV2ViQ29yZTo6VGV4dFJ1bjo6Y2hhcmFjdGVyc0xlbmd0aCk6CisgICAgICAg
ICogcGxhdGZvcm0vZ3JhcGhpY3MvV2lkdGhJdGVyYXRvci5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpXaWR0aEl0ZXJhdG9yOjpnbHlwaERhdGFGb3JDaGFyYWN0ZXIpOgorICAgICAgICAoV2ViQ29y
ZTo6YXBwbHlGb250VHJhbnNmb3Jtcyk6CisgICAgICAgIChXZWJDb3JlOjpXaWR0aEl0ZXJhdG9y
OjphZHZhbmNlSW50ZXJuYWwpOgorICAgICAgICAoV2ViQ29yZTo6V2lkdGhJdGVyYXRvcjo6YWR2
YW5jZSk6CisgICAgICAgIChXZWJDb3JlOjpXaWR0aEl0ZXJhdG9yOjphZHZhbmNlT25lQ2hhcmFj
dGVyKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9XaWR0aEl0ZXJhdG9yLmg6CisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vRm9udENhaXJvLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OkZvbnQ6OmRyYXdHbHlwaHMpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nh
aXJvL0ZvbnRDYWlyb0hhcmZidXp6TkcuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Rm9udDo6ZHJh
d0NvbXBsZXhUZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OkZvbnQ6OmRyYXdFbXBoYXNpc01hcmtz
Rm9yQ29tcGxleFRleHQpOgorICAgICAgICAoV2ViQ29yZTo6Rm9udDo6YWRqdXN0U2VsZWN0aW9u
UmVjdEZvckNvbXBsZXhUZXh0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9oYXJmYnV6
ei9IYXJmQnV6elNoYXBlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpIYXJmQnV6elNoYXBlcjo6
c2V0Tm9ybWFsaXplZEJ1ZmZlcik6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0Zv
bnRDb21wbGV4VGV4dE1hYy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGb250OjphZGp1c3RTZWxl
Y3Rpb25SZWN0Rm9yQ29tcGxleFRleHQpOgorICAgICAgICAoV2ViQ29yZTo6Rm9udDo6Z2V0R2x5
cGhzQW5kQWR2YW5jZXNGb3JDb21wbGV4VGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpGb250Ojpk
cmF3Q29tcGxleFRleHQpOgorICAgICAgICAoV2ViQ29yZTo6Rm9udDo6ZHJhd0VtcGhhc2lzTWFy
a3NGb3JDb21wbGV4VGV4dCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0ZvbnRN
YWMubW06CisgICAgICAgIChXZWJDb3JlOjpGb250OjpkcmF3R2x5cGhzKToKKyAgICAgICAgKiBw
bGF0Zm9ybS9ncmFwaGljcy93aW4vRm9udENHV2luLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZv
bnQ6OmRyYXdHbHlwaHMpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9Gb250V2lu
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZvbnQ6OmFkanVzdFNlbGVjdGlvblJlY3RGb3JDb21w
bGV4VGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpGb250OjpnZXRHbHlwaHNBbmRBZHZhbmNlc0Zv
ckNvbXBsZXhUZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OkZvbnQ6OmRyYXdDb21wbGV4VGV4dCk6
CisgICAgICAgIChXZWJDb3JlOjpGb250OjpkcmF3RW1waGFzaXNNYXJrc0ZvckNvbXBsZXhUZXh0
KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy93aW5jZS9Gb250V2luQ0UuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6Rm9udDo6ZHJhd0dseXBocyk6CisgICAgICAgIChXZWJDb3JlOjpGb250
OjpkcmF3Q29tcGxleFRleHQpOgorICAgICAgICAoV2ViQ29yZTo6Rm9udDo6ZHJhd0VtcGhhc2lz
TWFya3NGb3JDb21wbGV4VGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpGb250OjpzZWxlY3Rpb25S
ZWN0Rm9yQ29tcGxleFRleHQpOgorICAgICAgICAqIHJlbmRlcmluZy9JbmxpbmVUZXh0Qm94LmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OklubGluZVRleHRCb3g6OmlzU2VsZWN0ZWQpOgorICAgICAg
ICAoV2ViQ29yZTo6SW5saW5lVGV4dEJveDo6c2VsZWN0aW9uU3RhdGUpOgorICAgICAgICAoV2Vi
Q29yZTo6YWRqdXN0Q2hhcmFjdGVyc0FuZExlbmd0aEZvckh5cGhlbik6CisgICAgICAgIChXZWJD
b3JlOjpJbmxpbmVUZXh0Qm94Ojpsb2NhbFNlbGVjdGlvblJlY3QpOgorICAgICAgICAoV2ViQ29y
ZTo6SW5saW5lVGV4dEJveDo6cGFpbnQpOgorICAgICAgICAoV2ViQ29yZTo6SW5saW5lVGV4dEJv
eDo6c2VsZWN0aW9uU3RhcnRFbmQpOgorICAgICAgICAoV2ViQ29yZTo6SW5saW5lVGV4dEJveDo6
cGFpbnRTZWxlY3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6SW5saW5lVGV4dEJveDo6cGFpbnRD
b21wb3NpdGlvbkJhY2tncm91bmQpOgorICAgICAgICAoV2ViQ29yZTo6SW5saW5lVGV4dEJveDo6
cGFpbnREb2N1bWVudE1hcmtlcik6CisgICAgICAgIChXZWJDb3JlOjpJbmxpbmVUZXh0Qm94Ojpw
YWludFRleHRNYXRjaE1hcmtlcik6CisgICAgICAgIChXZWJDb3JlOjpJbmxpbmVUZXh0Qm94Ojpj
b21wdXRlUmVjdEZvclJlcGxhY2VtZW50TWFya2VyKToKKyAgICAgICAgKFdlYkNvcmU6OklubGlu
ZVRleHRCb3g6OnBhaW50Q29tcG9zaXRpb25VbmRlcmxpbmUpOgorICAgICAgICAoV2ViQ29yZTo6
SW5saW5lVGV4dEJveDo6cG9zaXRpb25Gb3JPZmZzZXQpOgorICAgICAgICAoV2ViQ29yZTo6SW5s
aW5lVGV4dEJveDo6Y29uc3RydWN0VGV4dFJ1bik6CisgICAgICAgICogcmVuZGVyaW5nL0lubGlu
ZVRleHRCb3guaDoKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyQ29tYmluZVRleHQuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQ29tYmluZVRleHQ6OmdldFN0cmluZ1RvUmVuZGVyKToK
KyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyQ29tYmluZVRleHQuaDoKKyAgICAgICAgKiByZW5k
ZXJpbmcvc3ZnL1NWR0lubGluZUZsb3dCb3guY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZHSW5s
aW5lRmxvd0JveDo6Y29tcHV0ZVRleHRNYXRjaE1hcmtlclJlY3RGb3JSZW5kZXJlcik6CisgICAg
ICAgICogcmVuZGVyaW5nL3N2Zy9TVkdJbmxpbmVUZXh0Qm94LmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OlNWR0lubGluZVRleHRCb3g6OnBvc2l0aW9uRm9yT2Zmc2V0KToKKyAgICAgICAgKFdlYkNv
cmU6OlNWR0lubGluZVRleHRCb3g6OmxvY2FsU2VsZWN0aW9uUmVjdCk6CisgICAgICAgIChXZWJD
b3JlOjpTVkdJbmxpbmVUZXh0Qm94OjpwYWludFNlbGVjdGlvbkJhY2tncm91bmQpOgorICAgICAg
ICAoV2ViQ29yZTo6U1ZHSW5saW5lVGV4dEJveDo6bWFwU3RhcnRFbmRQb3NpdGlvbnNJbnRvRnJh
Z21lbnRDb29yZGluYXRlcyk6CisgICAgICAgIChXZWJDb3JlOjpTVkdJbmxpbmVUZXh0Qm94Ojpw
YWludFRleHQpOgorICAgICAgICAqIHJlbmRlcmluZy9zdmcvU1ZHSW5saW5lVGV4dEJveC5oOgor
ICAgICAgICAqIHJlbmRlcmluZy9zdmcvU1ZHVGV4dE1ldHJpY3NCdWlsZGVyLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OlNWR1RleHRNZXRyaWNzQnVpbGRlcjo6Y3VycmVudENoYXJhY3RlclN0YXJ0
c1N1cnJvZ2F0ZVBhaXIpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHVGV4dE1ldHJpY3NCdWlsZGVy
OjphZHZhbmNlKToKKyAgICAgICAgKiByZW5kZXJpbmcvc3ZnL1NWR1RleHRRdWVyeS5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpTVkdUZXh0UXVlcnk6Om1hcFN0YXJ0RW5kUG9zaXRpb25zSW50b0Zy
YWdtZW50Q29vcmRpbmF0ZXMpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHVGV4dFF1ZXJ5Ojptb2Rp
ZnlTdGFydEVuZFBvc2l0aW9uc1Jlc3BlY3RpbmdMaWdhdHVyZXMpOgorICAgICAgICAoV2ViQ29y
ZTo6U1ZHVGV4dFF1ZXJ5OjpzdWJTdHJpbmdMZW5ndGhDYWxsYmFjayk6CisgICAgICAgIChXZWJD
b3JlOjpTVkdUZXh0UXVlcnk6OnN0YXJ0UG9zaXRpb25PZkNoYXJhY3RlckNhbGxiYWNrKToKKyAg
ICAgICAgKFdlYkNvcmU6OlNWR1RleHRRdWVyeTo6ZW5kUG9zaXRpb25PZkNoYXJhY3RlckNhbGxi
YWNrKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR1RleHRRdWVyeTo6cm90YXRpb25PZkNoYXJhY3Rl
ckNhbGxiYWNrKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR1RleHRRdWVyeTo6ZXh0ZW50T2ZDaGFy
YWN0ZXJDYWxsYmFjayk6CisgICAgICAgIChXZWJDb3JlOjpTVkdUZXh0UXVlcnk6OmNoYXJhY3Rl
ck51bWJlckF0UG9zaXRpb25DYWxsYmFjayk6CisgICAgICAgICogcmVuZGVyaW5nL3N2Zy9TVkdU
ZXh0UXVlcnkuaDoKKyAgICAgICAgKiByZW5kZXJpbmcvc3ZnL1NWR1RleHRSdW5SZW5kZXJpbmdD
b250ZXh0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR0dseXBoVG9QYXRoVHJhbnNsYXRvcjo6
U1ZHR2x5cGhUb1BhdGhUcmFuc2xhdG9yKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR1RleHRSdW5S
ZW5kZXJpbmdDb250ZXh0OjpnbHlwaERhdGFGb3JDaGFyYWN0ZXIpOgorICAgICAgICAqIHJlbmRl
cmluZy9zdmcvU1ZHVGV4dFJ1blJlbmRlcmluZ0NvbnRleHQuaDoKKyAgICAgICAgKiBzdmcvU1ZH
Rm9udERhdGEuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZHRm9udERhdGE6OmFwcGx5U1ZHR2x5
cGhTZWxlY3Rpb24pOgorICAgICAgICAqIHN2Zy9TVkdGb250RGF0YS5oOgorCiAyMDE0LTA2LTE5
ICBaYWxhbiBCdWp0YXMgIDx6YWxhbkBhcHBsZS5jb20+CiAKICAgICAgICAgSW50cm9kdWNlIFJl
bmRlckxheWVyOjpvZmZzZXRGcm9tQW5jZXN0b3JMYXllcigpIHRvIG1ha2UgY29udmVydFRvTGF5
ZXJDb29yZHMoKSBjYWxscyB3aXRoCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3Jl
LmV4cC5pbiBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZXhwLmluCmluZGV4IGIzOTQ3OTNiMzky
ZjhhN2QxMWI1ZjgxYjk2ZTQ5NGZkMTZiMDk0YzIuLjhmOWY4Y2EzM2UxZmJkY2E5ODNiNzA0MGM2
NWZjZDgzMTRkY2I0NDAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZXhwLmlu
CisrKyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZXhwLmluCkBAIC0xODUzLDcgKzE4NTMsNyBA
QCBfX1pOSzdXZWJDb3JlM1VSTDVxdWVyeUV2CiBfX1pOSzdXZWJDb3JlM1VSTDhwcm90b2NvbEV2
CiBfX1pOSzdXZWJDb3JlM1VSTGN2UDVOU1VSTEV2CiBfX1pOSzdXZWJDb3JlNEZvbnQ1d2lkdGhF
UktOU183VGV4dFJ1bkVQTjNXVEY3SGFzaFNldElQS05TXzE0U2ltcGxlRm9udERhdGFFTlM0XzdQ
dHJIYXNoSVM4X0VFTlM0XzEwSGFzaFRyYWl0c0lTOF9FRUVFUE5TXzEzR2x5cGhPdmVyZmxvd0UK
LV9fWk5LN1dlYkNvcmU0Rm9udDhkcmF3VGV4dEVQTlNfMTVHcmFwaGljc0NvbnRleHRFUktOU183
VGV4dFJ1bkVSS05TXzEwRmxvYXRQb2ludEVpaU5TMF8yNEN1c3RvbUZvbnROb3RSZWFkeUFjdGlv
bkUKK19fWk5LN1dlYkNvcmU0Rm9udDhkcmF3VGV4dEVQTlNfMTVHcmFwaGljc0NvbnRleHRFUktO
U183VGV4dFJ1bkVSS05TXzEwRmxvYXRQb2ludEVqaU5TMF8yNEN1c3RvbUZvbnROb3RSZWFkeUFj
dGlvbkUKIF9fWk5LN1dlYkNvcmU0Rm9udGVxRVJLUzBfCiBfX1pOSzdXZWJDb3JlNE5vZGUxMXRl
eHRDb250ZW50RWIKIF9fWk5LN1dlYkNvcmU0Tm9kZTEzb3duZXJEb2N1bWVudEV2CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250LmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnQuY3BwCmluZGV4IGNkNjIzZjM4OTVhNTA5ODUw
YzY4OGM0ZDY4MDUyOWM3ZmEzYWE1ZmYuLjczOWE1YjNhY2M5YjZkYjU0ZTBhMjY2MjU0N2I1NDI0
YzU0YTMzZTggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0Zv
bnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnQuY3BwCkBA
IC0zMjksNyArMzI5LDcgQEAgdm9pZCBGb250Ojp1cGRhdGUoUGFzc1JlZlB0cjxGb250U2VsZWN0
b3I+IGZvbnRTZWxlY3RvcikgY29uc3QKICAgICBtX3R5cGVzZXR0aW5nRmVhdHVyZXMgPSBjb21w
dXRlVHlwZXNldHRpbmdGZWF0dXJlcygpOwogfQogCi1mbG9hdCBGb250OjpkcmF3VGV4dChHcmFw
aGljc0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IFRleHRSdW4mIHJ1biwgY29uc3QgRmxvYXRQb2lu
dCYgcG9pbnQsIGludCBmcm9tLCBpbnQgdG8sIEN1c3RvbUZvbnROb3RSZWFkeUFjdGlvbiBjdXN0
b21Gb250Tm90UmVhZHlBY3Rpb24pIGNvbnN0CitmbG9hdCBGb250OjpkcmF3VGV4dChHcmFwaGlj
c0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IFRleHRSdW4mIHJ1biwgY29uc3QgRmxvYXRQb2ludCYg
cG9pbnQsIHVuc2lnbmVkIGZyb20sIGludCBpbml0aWFsVG8sIEN1c3RvbUZvbnROb3RSZWFkeUFj
dGlvbiBjdXN0b21Gb250Tm90UmVhZHlBY3Rpb24pIGNvbnN0CiB7CiAgICAgLy8gRG9uJ3QgZHJh
dyBhbnl0aGluZyB3aGlsZSB3ZSBhcmUgdXNpbmcgY3VzdG9tIGZvbnRzIHRoYXQgYXJlIGluIHRo
ZSBwcm9jZXNzIG9mIGxvYWRpbmcsCiAgICAgLy8gZXhjZXB0IGlmIHRoZSAnZm9yY2UnIGFyZ3Vt
ZW50IGlzIHNldCB0byB0cnVlIChpbiB3aGljaCBjYXNlIGl0IHdpbGwgdXNlIGEgZmFsbGJhY2sK
QEAgLTMzNyw3ICszMzcsNyBAQCBmbG9hdCBGb250OjpkcmF3VGV4dChHcmFwaGljc0NvbnRleHQq
IGNvbnRleHQsIGNvbnN0IFRleHRSdW4mIHJ1biwgY29uc3QgRmxvYXRQbwogICAgIGlmIChsb2Fk
aW5nQ3VzdG9tRm9udHMoKSAmJiBjdXN0b21Gb250Tm90UmVhZHlBY3Rpb24gPT0gRG9Ob3RQYWlu
dElmRm9udE5vdFJlYWR5KQogICAgICAgICByZXR1cm4gMDsKIAotICAgIHRvID0gKHRvID09IC0x
ID8gcnVuLmxlbmd0aCgpIDogdG8pOworICAgIHVuc2lnbmVkIHRvID0gaW5pdGlhbFRvIDwgMCA/
IHJ1bi5sZW5ndGgoKSA6IGluaXRpYWxUbzsKIAogICAgIENvZGVQYXRoIGNvZGVQYXRoVG9Vc2Ug
PSBjb2RlUGF0aChydW4pOwogICAgIC8vIEZJWE1FOiBVc2UgdGhlIGZhc3QgY29kZSBwYXRoIG9u
Y2UgaXQgaGFuZGxlcyBwYXJ0aWFsIHJ1bnMgd2l0aCBrZXJuaW5nIGFuZCBsaWdhdHVyZXMuIFNl
ZSBodHRwOi8vd2Via2l0Lm9yZy9iLzEwMDA1MApAQCAtMzUwLDEzICszNTAsMTIgQEAgZmxvYXQg
Rm9udDo6ZHJhd1RleHQoR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBjb25zdCBUZXh0UnVuJiBy
dW4sIGNvbnN0IEZsb2F0UG8KICAgICByZXR1cm4gZHJhd0NvbXBsZXhUZXh0KGNvbnRleHQsIHJ1
biwgcG9pbnQsIGZyb20sIHRvKTsKIH0KIAotdm9pZCBGb250OjpkcmF3RW1waGFzaXNNYXJrcyhH
cmFwaGljc0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IFRleHRSdW4mIHJ1biwgY29uc3QgQXRvbWlj
U3RyaW5nJiBtYXJrLCBjb25zdCBGbG9hdFBvaW50JiBwb2ludCwgaW50IGZyb20sIGludCB0bykg
Y29uc3QKK3ZvaWQgRm9udDo6ZHJhd0VtcGhhc2lzTWFya3MoR3JhcGhpY3NDb250ZXh0KiBjb250
ZXh0LCBjb25zdCBUZXh0UnVuJiBydW4sIGNvbnN0IEF0b21pY1N0cmluZyYgbWFyaywgY29uc3Qg
RmxvYXRQb2ludCYgcG9pbnQsIHVuc2lnbmVkIGZyb20sIGludCBpbml0aWFsVG8pIGNvbnN0CiB7
CiAgICAgaWYgKGxvYWRpbmdDdXN0b21Gb250cygpKQogICAgICAgICByZXR1cm47Ci0KLSAgICBp
ZiAodG8gPCAwKQotICAgICAgICB0byA9IHJ1bi5sZW5ndGgoKTsKKyAgICAKKyAgICB1bnNpZ25l
ZCB0byA9IGluaXRpYWxUbyA8IDAgPyBydW4ubGVuZ3RoKCkgOiBpbml0aWFsVG87CiAKICAgICBD
b2RlUGF0aCBjb2RlUGF0aFRvVXNlID0gY29kZVBhdGgocnVuKTsKICAgICAvLyBGSVhNRTogVXNl
IHRoZSBmYXN0IGNvZGUgcGF0aCBvbmNlIGl0IGhhbmRsZXMgcGFydGlhbCBydW5zIHdpdGgga2Vy
bmluZyBhbmQgbGlnYXR1cmVzLiBTZWUgaHR0cDovL3dlYmtpdC5vcmcvYi8xMDAwNTAKQEAgLTUw
Nyw5ICs1MDYsOSBAQCBib29sIEZvbnQ6OmZhc3RBdmVyYWdlQ2hhcldpZHRoSWZBdmFpbGFibGUo
ZmxvYXQmIHdpZHRoKSBjb25zdAogICAgIHJldHVybiBzdWNjZXNzOwogfQogCi12b2lkIEZvbnQ6
OmFkanVzdFNlbGVjdGlvblJlY3RGb3JUZXh0KGNvbnN0IFRleHRSdW4mIHJ1biwgTGF5b3V0UmVj
dCYgc2VsZWN0aW9uUmVjdCwgaW50IGZyb20sIGludCB0bykgY29uc3QKK3ZvaWQgRm9udDo6YWRq
dXN0U2VsZWN0aW9uUmVjdEZvclRleHQoY29uc3QgVGV4dFJ1biYgcnVuLCBMYXlvdXRSZWN0JiBz
ZWxlY3Rpb25SZWN0LCB1bnNpZ25lZCBmcm9tLCBpbnQgaW5pdGlhbFRvKSBjb25zdAogewotICAg
IHRvID0gKHRvID09IC0xID8gcnVuLmxlbmd0aCgpIDogdG8pOworICAgIHVuc2lnbmVkIHRvID0g
aW5pdGlhbFRvIDwgMCA/IHJ1bi5sZW5ndGgoKSA6IGluaXRpYWxUbzsKIAogICAgIENvZGVQYXRo
IGNvZGVQYXRoVG9Vc2UgPSBjb2RlUGF0aChydW4pOwogICAgIC8vIEZJWE1FOiBVc2UgdGhlIGZh
c3QgY29kZSBwYXRoIG9uY2UgaXQgaGFuZGxlcyBwYXJ0aWFsIHJ1bnMgd2l0aCBrZXJuaW5nIGFu
ZCBsaWdhdHVyZXMuIFNlZSBodHRwOi8vd2Via2l0Lm9yZy9iLzEwMDA1MApAQCAtMTA1NCwyMyAr
MTA1MywyNSBAQCBib29sIEZvbnQ6OmNhblJlY2VpdmVUZXh0RW1waGFzaXMoVUNoYXIzMiBjKQog
ICAgIHJldHVybiB0cnVlOwogfQogICAgIAotR2x5cGhUb1BhdGhUcmFuc2xhdG9yOjpHbHlwaFVu
ZGVybGluZVR5cGUgY29tcHV0ZVVuZGVybGluZVR5cGUoY29uc3QgVGV4dFJ1biYgdGV4dFJ1biwg
Y29uc3QgR2x5cGhCdWZmZXImIGdseXBoQnVmZmVyLCBpbnQgaW5kZXgpCitHbHlwaFRvUGF0aFRy
YW5zbGF0b3I6OkdseXBoVW5kZXJsaW5lVHlwZSBjb21wdXRlVW5kZXJsaW5lVHlwZShjb25zdCBU
ZXh0UnVuJiB0ZXh0UnVuLCBjb25zdCBHbHlwaEJ1ZmZlciYgZ2x5cGhCdWZmZXIsIHVuc2lnbmVk
IGluZGV4KQogewogICAgIC8vIEluIGdlbmVyYWwsIHdlIHdhbnQgdG8gc2tpcCBkZXNjZW5kZXJz
LiBIb3dldmVyLCBza2lwcGluZyBkZXNjZW5kZXJzIG9uIENKSyBjaGFyYWN0ZXJzIGxlYWRzIHRv
IHVuZGVzaXJhYmxlIHJlbmRlcmluZ3MsCiAgICAgLy8gc28gd2Ugd2FudCB0byBkcmF3IHRocm91
Z2ggQ0pLIGNoYXJhY3RlcnMgKG9uIGEgY2hhcmFjdGVyLWJ5LWNoYXJhY3RlciBiYXNpcykuCiAg
ICAgVUNoYXIzMiBiYXNlQ2hhcmFjdGVyOwotICAgIGludCBvZmZzZXRJblN0cmluZyA9IGdseXBo
QnVmZmVyLm9mZnNldEluU3RyaW5nKGluZGV4KTsKKyAgICBpbnQgaW5pdGlhbE9mZnNldEluU3Ry
aW5nID0gZ2x5cGhCdWZmZXIub2Zmc2V0SW5TdHJpbmcoaW5kZXgpOwogCi0gICAgaWYgKG9mZnNl
dEluU3RyaW5nID09IEdseXBoQnVmZmVyOjprTm9PZmZzZXQpIHsKKyAgICBpZiAoaW5pdGlhbE9m
ZnNldEluU3RyaW5nID09IEdseXBoQnVmZmVyOjprTm9PZmZzZXQpIHsKICAgICAgICAgLy8gV2Ug
aGF2ZSBubyBpZGVhIHdoaWNoIGNoYXJhY3RlciBzcGF3bmVkIHRoaXMgZ2x5cGguIEJhaWwuCiAg
ICAgICAgIHJldHVybiBHbHlwaFRvUGF0aFRyYW5zbGF0b3I6OkdseXBoVW5kZXJsaW5lVHlwZTo6
RHJhd092ZXJHbHlwaDsKICAgICB9CiAgICAgCisgICAgQVNTRVJUKGluaXRpYWxPZmZzZXRJblN0
cmluZyA+PSAwKTsKKyAgICB1bnNpZ25lZCBvZmZzZXRJblN0cmluZyA9IHN0YXRpY19jYXN0PHVu
c2lnbmVkPihpbml0aWFsT2Zmc2V0SW5TdHJpbmcpOworICAgIAogICAgIGlmICh0ZXh0UnVuLmlz
OEJpdCgpKQogICAgICAgICBiYXNlQ2hhcmFjdGVyID0gdGV4dFJ1bi5jaGFyYWN0ZXJzOCgpW29m
ZnNldEluU3RyaW5nXTsKLSAgICBlbHNlIHsKKyAgICBlbHNlCiAgICAgICAgIFUxNl9ORVhUKHRl
eHRSdW4uY2hhcmFjdGVyczE2KCksIG9mZnNldEluU3RyaW5nLCB0ZXh0UnVuLmxlbmd0aCgpLCBi
YXNlQ2hhcmFjdGVyKTsKLSAgICB9CiAgICAgCiAgICAgLy8gdV9nZXRJbnRQcm9wZXJ0eVZhbHVl
IHdpdGggVUNIQVJfSURFT0dSQVBISUMgZG9lc24ndCByZXR1cm4gdHJ1ZSBmb3IgSmFwYW5lc2Ug
b3IgS29yZWFuIGNvZGVwb2ludHMuCiAgICAgLy8gSW5zdGVhZCwgd2UgY2FuIHVzZSB0aGUgIlVu
aWNvZGUgYWxsb2NhdGlvbiBibG9jayIgZm9yIHRoZSBjaGFyYWN0ZXIuCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250LmggYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9Gb250LmgKaW5kZXggMWFkZmYwYTU1ODk1MmI4ZWYwZDIwMTA4MGUy
YTk0ZjI5MzViYTdjMi4uOGQyZDc0Y2UzZjBkOWM2Y2VmM2NkZGUwMzVkZjhiNjA3MDljZTE2YSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udC5oCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnQuaApAQCAtMTA0LDcgKzEwNCw3
IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgYWR2YW5jZSgpID0gMDsKICAgICB2aXJ0dWFs
IH5HbHlwaFRvUGF0aFRyYW5zbGF0b3IoKSB7IH0KIH07Ci1HbHlwaFRvUGF0aFRyYW5zbGF0b3I6
OkdseXBoVW5kZXJsaW5lVHlwZSBjb21wdXRlVW5kZXJsaW5lVHlwZShjb25zdCBUZXh0UnVuJiwg
Y29uc3QgR2x5cGhCdWZmZXImLCBpbnQgaW5kZXgpOworR2x5cGhUb1BhdGhUcmFuc2xhdG9yOjpH
bHlwaFVuZGVybGluZVR5cGUgY29tcHV0ZVVuZGVybGluZVR5cGUoY29uc3QgVGV4dFJ1biYsIGNv
bnN0IEdseXBoQnVmZmVyJiwgdW5zaWduZWQgaW5kZXgpOwogCiBjbGFzcyBGb250IHsKIHB1Ymxp
YzoKQEAgLTEzMyw5ICsxMzMsOSBAQCBwdWJsaWM6CiAgICAgdm9pZCB1cGRhdGUoUGFzc1JlZlB0
cjxGb250U2VsZWN0b3I+KSBjb25zdDsKIAogICAgIGVudW0gQ3VzdG9tRm9udE5vdFJlYWR5QWN0
aW9uIHsgRG9Ob3RQYWludElmRm9udE5vdFJlYWR5LCBVc2VGYWxsYmFja0lmRm9udE5vdFJlYWR5
IH07Ci0gICAgZmxvYXQgZHJhd1RleHQoR3JhcGhpY3NDb250ZXh0KiwgY29uc3QgVGV4dFJ1biYs
IGNvbnN0IEZsb2F0UG9pbnQmLCBpbnQgZnJvbSA9IDAsIGludCB0byA9IC0xLCBDdXN0b21Gb250
Tm90UmVhZHlBY3Rpb24gPSBEb05vdFBhaW50SWZGb250Tm90UmVhZHkpIGNvbnN0OwotICAgIHZv
aWQgZHJhd0dseXBocyhHcmFwaGljc0NvbnRleHQqLCBjb25zdCBTaW1wbGVGb250RGF0YSosIGNv
bnN0IEdseXBoQnVmZmVyJiwgaW50IGZyb20sIGludCBudW1HbHlwaHMsIGNvbnN0IEZsb2F0UG9p
bnQmKSBjb25zdDsKLSAgICB2b2lkIGRyYXdFbXBoYXNpc01hcmtzKEdyYXBoaWNzQ29udGV4dCos
IGNvbnN0IFRleHRSdW4mLCBjb25zdCBBdG9taWNTdHJpbmcmIG1hcmssIGNvbnN0IEZsb2F0UG9p
bnQmLCBpbnQgZnJvbSA9IDAsIGludCB0byA9IC0xKSBjb25zdDsKKyAgICBmbG9hdCBkcmF3VGV4
dChHcmFwaGljc0NvbnRleHQqLCBjb25zdCBUZXh0UnVuJiwgY29uc3QgRmxvYXRQb2ludCYsIHVu
c2lnbmVkIGZyb20gPSAwLCBpbnQgdG8gPSAtMSwgQ3VzdG9tRm9udE5vdFJlYWR5QWN0aW9uID0g
RG9Ob3RQYWludElmRm9udE5vdFJlYWR5KSBjb25zdDsKKyAgICB2b2lkIGRyYXdHbHlwaHMoR3Jh
cGhpY3NDb250ZXh0KiwgY29uc3QgU2ltcGxlRm9udERhdGEqLCBjb25zdCBHbHlwaEJ1ZmZlciYs
IHVuc2lnbmVkIGZyb20sIHVuc2lnbmVkIG51bUdseXBocywgY29uc3QgRmxvYXRQb2ludCYpIGNv
bnN0OworICAgIHZvaWQgZHJhd0VtcGhhc2lzTWFya3MoR3JhcGhpY3NDb250ZXh0KiwgY29uc3Qg
VGV4dFJ1biYsIGNvbnN0IEF0b21pY1N0cmluZyYgbWFyaywgY29uc3QgRmxvYXRQb2ludCYsIHVu
c2lnbmVkIGZyb20gPSAwLCBpbnQgdG8gPSAtMSkgY29uc3Q7CiAKICAgICBEYXNoQXJyYXkgZGFz
aGVzRm9ySW50ZXJzZWN0aW9uc1dpdGhSZWN0KGNvbnN0IFRleHRSdW4mLCBjb25zdCBGbG9hdFBv
aW50JiB0ZXh0T3JpZ2luLCBjb25zdCBGbG9hdFJlY3QmIGxpbmVFeHRlbnRzKSBjb25zdDsKIApA
QCAtMTQ3LDcgKzE0Nyw3IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgZmxvYXQgd2lkdGgoVGV4dExh
eW91dCYsIHVuc2lnbmVkIGZyb20sIHVuc2lnbmVkIGxlbiwgSGFzaFNldDxjb25zdCBTaW1wbGVG
b250RGF0YSo+KiBmYWxsYmFja0ZvbnRzID0gMCk7CiAKICAgICBpbnQgb2Zmc2V0Rm9yUG9zaXRp
b24oY29uc3QgVGV4dFJ1biYsIGZsb2F0IHBvc2l0aW9uLCBib29sIGluY2x1ZGVQYXJ0aWFsR2x5
cGhzKSBjb25zdDsKLSAgICB2b2lkIGFkanVzdFNlbGVjdGlvblJlY3RGb3JUZXh0KGNvbnN0IFRl
eHRSdW4mLCBMYXlvdXRSZWN0JiBzZWxlY3Rpb25SZWN0LCBpbnQgZnJvbSA9IDAsIGludCB0byA9
IC0xKSBjb25zdDsKKyAgICB2b2lkIGFkanVzdFNlbGVjdGlvblJlY3RGb3JUZXh0KGNvbnN0IFRl
eHRSdW4mLCBMYXlvdXRSZWN0JiBzZWxlY3Rpb25SZWN0LCB1bnNpZ25lZCBmcm9tID0gMCwgaW50
IHRvID0gLTEpIGNvbnN0OwogCiAgICAgYm9vbCBpc1NtYWxsQ2FwcygpIGNvbnN0IHsgcmV0dXJu
IG1fZm9udERlc2NyaXB0aW9uLnNtYWxsQ2FwcygpOyB9CiAKQEAgLTIxOSwxNCArMjE5LDE0IEBA
IHByaXZhdGU6CiAgICAgZW51bSBGb3JUZXh0RW1waGFzaXNPck5vdCB7IE5vdEZvclRleHRFbXBo
YXNpcywgRm9yVGV4dEVtcGhhc2lzIH07CiAKICAgICAvLyBSZXR1cm5zIHRoZSBpbml0aWFsIGlu
LXN0cmVhbSBhZHZhbmNlLgotICAgIGZsb2F0IGdldEdseXBoc0FuZEFkdmFuY2VzRm9yU2ltcGxl
VGV4dChjb25zdCBUZXh0UnVuJiwgaW50IGZyb20sIGludCB0bywgR2x5cGhCdWZmZXImLCBGb3JU
ZXh0RW1waGFzaXNPck5vdCA9IE5vdEZvclRleHRFbXBoYXNpcykgY29uc3Q7Ci0gICAgZmxvYXQg
ZHJhd1NpbXBsZVRleHQoR3JhcGhpY3NDb250ZXh0KiwgY29uc3QgVGV4dFJ1biYsIGNvbnN0IEZs
b2F0UG9pbnQmLCBpbnQgZnJvbSwgaW50IHRvKSBjb25zdDsKLSAgICB2b2lkIGRyYXdFbXBoYXNp
c01hcmtzRm9yU2ltcGxlVGV4dChHcmFwaGljc0NvbnRleHQqLCBjb25zdCBUZXh0UnVuJiwgY29u
c3QgQXRvbWljU3RyaW5nJiBtYXJrLCBjb25zdCBGbG9hdFBvaW50JiwgaW50IGZyb20sIGludCB0
bykgY29uc3Q7CisgICAgZmxvYXQgZ2V0R2x5cGhzQW5kQWR2YW5jZXNGb3JTaW1wbGVUZXh0KGNv
bnN0IFRleHRSdW4mLCB1bnNpZ25lZCBmcm9tLCB1bnNpZ25lZCB0bywgR2x5cGhCdWZmZXImLCBG
b3JUZXh0RW1waGFzaXNPck5vdCA9IE5vdEZvclRleHRFbXBoYXNpcykgY29uc3Q7CisgICAgZmxv
YXQgZHJhd1NpbXBsZVRleHQoR3JhcGhpY3NDb250ZXh0KiwgY29uc3QgVGV4dFJ1biYsIGNvbnN0
IEZsb2F0UG9pbnQmLCB1bnNpZ25lZCBmcm9tLCB1bnNpZ25lZCB0bykgY29uc3Q7CisgICAgdm9p
ZCBkcmF3RW1waGFzaXNNYXJrc0ZvclNpbXBsZVRleHQoR3JhcGhpY3NDb250ZXh0KiwgY29uc3Qg
VGV4dFJ1biYsIGNvbnN0IEF0b21pY1N0cmluZyYgbWFyaywgY29uc3QgRmxvYXRQb2ludCYsIHVu
c2lnbmVkIGZyb20sIHVuc2lnbmVkIHRvKSBjb25zdDsKICAgICB2b2lkIGRyYXdHbHlwaEJ1ZmZl
cihHcmFwaGljc0NvbnRleHQqLCBjb25zdCBUZXh0UnVuJiwgY29uc3QgR2x5cGhCdWZmZXImLCBG
bG9hdFBvaW50JikgY29uc3Q7CiAgICAgdm9pZCBkcmF3RW1waGFzaXNNYXJrcyhHcmFwaGljc0Nv
bnRleHQqLCBjb25zdCBUZXh0UnVuJiwgY29uc3QgR2x5cGhCdWZmZXImLCBjb25zdCBBdG9taWNT
dHJpbmcmLCBjb25zdCBGbG9hdFBvaW50JikgY29uc3Q7CiAgICAgZmxvYXQgZmxvYXRXaWR0aEZv
clNpbXBsZVRleHQoY29uc3QgVGV4dFJ1biYsIEhhc2hTZXQ8Y29uc3QgU2ltcGxlRm9udERhdGEq
PiogZmFsbGJhY2tGb250cyA9IDAsIEdseXBoT3ZlcmZsb3cqID0gMCkgY29uc3Q7CiAgICAgaW50
IG9mZnNldEZvclBvc2l0aW9uRm9yU2ltcGxlVGV4dChjb25zdCBUZXh0UnVuJiwgZmxvYXQgcG9z
aXRpb24sIGJvb2wgaW5jbHVkZVBhcnRpYWxHbHlwaHMpIGNvbnN0OwotICAgIHZvaWQgYWRqdXN0
U2VsZWN0aW9uUmVjdEZvclNpbXBsZVRleHQoY29uc3QgVGV4dFJ1biYsIExheW91dFJlY3QmIHNl
bGVjdGlvblJlY3QsIGludCBmcm9tLCBpbnQgdG8pIGNvbnN0OworICAgIHZvaWQgYWRqdXN0U2Vs
ZWN0aW9uUmVjdEZvclNpbXBsZVRleHQoY29uc3QgVGV4dFJ1biYsIExheW91dFJlY3QmIHNlbGVj
dGlvblJlY3QsIHVuc2lnbmVkIGZyb20sIHVuc2lnbmVkIHRvKSBjb25zdDsKIAogICAgIGJvb2wg
Z2V0RW1waGFzaXNNYXJrR2x5cGhEYXRhKGNvbnN0IEF0b21pY1N0cmluZyYsIEdseXBoRGF0YSYp
IGNvbnN0OwogCkBAIC0yMzQsMTIgKzIzNCwxMiBAQCBwcml2YXRlOgogICAgIHN0YXRpYyBib29s
IGNhbkV4cGFuZEFyb3VuZElkZW9ncmFwaHNJbkNvbXBsZXhUZXh0KCk7CiAKICAgICAvLyBSZXR1
cm5zIHRoZSBpbml0aWFsIGluLXN0cmVhbSBhZHZhbmNlLgotICAgIGZsb2F0IGdldEdseXBoc0Fu
ZEFkdmFuY2VzRm9yQ29tcGxleFRleHQoY29uc3QgVGV4dFJ1biYsIGludCBmcm9tLCBpbnQgdG8s
IEdseXBoQnVmZmVyJiwgRm9yVGV4dEVtcGhhc2lzT3JOb3QgPSBOb3RGb3JUZXh0RW1waGFzaXMp
IGNvbnN0OwotICAgIGZsb2F0IGRyYXdDb21wbGV4VGV4dChHcmFwaGljc0NvbnRleHQqLCBjb25z
dCBUZXh0UnVuJiwgY29uc3QgRmxvYXRQb2ludCYsIGludCBmcm9tLCBpbnQgdG8pIGNvbnN0Owot
ICAgIHZvaWQgZHJhd0VtcGhhc2lzTWFya3NGb3JDb21wbGV4VGV4dChHcmFwaGljc0NvbnRleHQq
LCBjb25zdCBUZXh0UnVuJiwgY29uc3QgQXRvbWljU3RyaW5nJiBtYXJrLCBjb25zdCBGbG9hdFBv
aW50JiwgaW50IGZyb20sIGludCB0bykgY29uc3Q7CisgICAgZmxvYXQgZ2V0R2x5cGhzQW5kQWR2
YW5jZXNGb3JDb21wbGV4VGV4dChjb25zdCBUZXh0UnVuJiwgdW5zaWduZWQgZnJvbSwgdW5zaWdu
ZWQgdG8sIEdseXBoQnVmZmVyJiwgRm9yVGV4dEVtcGhhc2lzT3JOb3QgPSBOb3RGb3JUZXh0RW1w
aGFzaXMpIGNvbnN0OworICAgIGZsb2F0IGRyYXdDb21wbGV4VGV4dChHcmFwaGljc0NvbnRleHQq
LCBjb25zdCBUZXh0UnVuJiwgY29uc3QgRmxvYXRQb2ludCYsIHVuc2lnbmVkIGZyb20sIHVuc2ln
bmVkIHRvKSBjb25zdDsKKyAgICB2b2lkIGRyYXdFbXBoYXNpc01hcmtzRm9yQ29tcGxleFRleHQo
R3JhcGhpY3NDb250ZXh0KiwgY29uc3QgVGV4dFJ1biYsIGNvbnN0IEF0b21pY1N0cmluZyYgbWFy
aywgY29uc3QgRmxvYXRQb2ludCYsIHVuc2lnbmVkIGZyb20sIHVuc2lnbmVkIHRvKSBjb25zdDsK
ICAgICBmbG9hdCBmbG9hdFdpZHRoRm9yQ29tcGxleFRleHQoY29uc3QgVGV4dFJ1biYsIEhhc2hT
ZXQ8Y29uc3QgU2ltcGxlRm9udERhdGEqPiogZmFsbGJhY2tGb250cyA9IDAsIEdseXBoT3ZlcmZs
b3cqID0gMCkgY29uc3Q7CiAgICAgaW50IG9mZnNldEZvclBvc2l0aW9uRm9yQ29tcGxleFRleHQo
Y29uc3QgVGV4dFJ1biYsIGZsb2F0IHBvc2l0aW9uLCBib29sIGluY2x1ZGVQYXJ0aWFsR2x5cGhz
KSBjb25zdDsKLSAgICB2b2lkIGFkanVzdFNlbGVjdGlvblJlY3RGb3JDb21wbGV4VGV4dChjb25z
dCBUZXh0UnVuJiwgTGF5b3V0UmVjdCYgc2VsZWN0aW9uUmVjdCwgaW50IGZyb20sIGludCB0bykg
Y29uc3Q7CisgICAgdm9pZCBhZGp1c3RTZWxlY3Rpb25SZWN0Rm9yQ29tcGxleFRleHQoY29uc3Qg
VGV4dFJ1biYsIExheW91dFJlY3QmIHNlbGVjdGlvblJlY3QsIHVuc2lnbmVkIGZyb20sIHVuc2ln
bmVkIHRvKSBjb25zdDsKIAogICAgIGZyaWVuZCBzdHJ1Y3QgV2lkdGhJdGVyYXRvcjsKICAgICBm
cmllbmQgY2xhc3MgU1ZHVGV4dFJ1blJlbmRlcmluZ0NvbnRleHQ7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250RmFzdFBhdGguY3BwIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udEZhc3RQYXRoLmNwcAppbmRleCBiYmVkM2QwZGRk
MjdhNGQ3NDA4ZDRlZDcyZDI2NDFhMTRkZTA3N2VhLi43ZjIwZTBiMzY1MjFkOWNkY2QzZjc2Zjcw
YzNlZWJmZjQ3OWRkODIxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9Gb250RmFzdFBhdGguY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL0ZvbnRGYXN0UGF0aC5jcHAKQEAgLTEyNiw3ICsxMjYsNyBAQCBpbnQgRm9udDo6ZW1waGFz
aXNNYXJrSGVpZ2h0KGNvbnN0IEF0b21pY1N0cmluZyYgbWFyaykgY29uc3QKICAgICByZXR1cm4g
bWFya0ZvbnREYXRhLT5mb250TWV0cmljcygpLmhlaWdodCgpOwogfQogCi1mbG9hdCBGb250Ojpn
ZXRHbHlwaHNBbmRBZHZhbmNlc0ZvclNpbXBsZVRleHQoY29uc3QgVGV4dFJ1biYgcnVuLCBpbnQg
ZnJvbSwgaW50IHRvLCBHbHlwaEJ1ZmZlciYgZ2x5cGhCdWZmZXIsIEZvclRleHRFbXBoYXNpc09y
Tm90IGZvclRleHRFbXBoYXNpcykgY29uc3QKK2Zsb2F0IEZvbnQ6OmdldEdseXBoc0FuZEFkdmFu
Y2VzRm9yU2ltcGxlVGV4dChjb25zdCBUZXh0UnVuJiBydW4sIHVuc2lnbmVkIGZyb20sIHVuc2ln
bmVkIHRvLCBHbHlwaEJ1ZmZlciYgZ2x5cGhCdWZmZXIsIEZvclRleHRFbXBoYXNpc09yTm90IGZv
clRleHRFbXBoYXNpcykgY29uc3QKIHsKICAgICBmbG9hdCBpbml0aWFsQWR2YW5jZTsKIApAQCAt
MTU2LDcgKzE1Niw3IEBAIGZsb2F0IEZvbnQ6OmdldEdseXBoc0FuZEFkdmFuY2VzRm9yU2ltcGxl
VGV4dChjb25zdCBUZXh0UnVuJiBydW4sIGludCBmcm9tLCBpbnQKICAgICByZXR1cm4gaW5pdGlh
bEFkdmFuY2U7CiB9CiAKLWZsb2F0IEZvbnQ6OmRyYXdTaW1wbGVUZXh0KEdyYXBoaWNzQ29udGV4
dCogY29udGV4dCwgY29uc3QgVGV4dFJ1biYgcnVuLCBjb25zdCBGbG9hdFBvaW50JiBwb2ludCwg
aW50IGZyb20sIGludCB0bykgY29uc3QKK2Zsb2F0IEZvbnQ6OmRyYXdTaW1wbGVUZXh0KEdyYXBo
aWNzQ29udGV4dCogY29udGV4dCwgY29uc3QgVGV4dFJ1biYgcnVuLCBjb25zdCBGbG9hdFBvaW50
JiBwb2ludCwgdW5zaWduZWQgZnJvbSwgdW5zaWduZWQgdG8pIGNvbnN0CiB7CiAgICAgLy8gVGhp
cyBnbHlwaCBidWZmZXIgaG9sZHMgb3VyIGdseXBocythZHZhbmNlcytmb250IGRhdGEgZm9yIGVh
Y2ggZ2x5cGguCiAgICAgR2x5cGhCdWZmZXIgZ2x5cGhCdWZmZXI7CkBAIC0xNzIsNyArMTcyLDcg
QEAgZmxvYXQgRm9udDo6ZHJhd1NpbXBsZVRleHQoR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBj
b25zdCBUZXh0UnVuJiBydW4sIGNvbnN0IEYKICAgICByZXR1cm4gc3RhcnRQb2ludC54KCkgLSBz
dGFydFg7CiB9CiAKLXZvaWQgRm9udDo6ZHJhd0VtcGhhc2lzTWFya3NGb3JTaW1wbGVUZXh0KEdy
YXBoaWNzQ29udGV4dCogY29udGV4dCwgY29uc3QgVGV4dFJ1biYgcnVuLCBjb25zdCBBdG9taWNT
dHJpbmcmIG1hcmssIGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50LCBpbnQgZnJvbSwgaW50IHRvKSBj
b25zdAordm9pZCBGb250OjpkcmF3RW1waGFzaXNNYXJrc0ZvclNpbXBsZVRleHQoR3JhcGhpY3ND
b250ZXh0KiBjb250ZXh0LCBjb25zdCBUZXh0UnVuJiBydW4sIGNvbnN0IEF0b21pY1N0cmluZyYg
bWFyaywgY29uc3QgRmxvYXRQb2ludCYgcG9pbnQsIHVuc2lnbmVkIGZyb20sIHVuc2lnbmVkIHRv
KSBjb25zdAogewogICAgIEdseXBoQnVmZmVyIGdseXBoQnVmZmVyOwogICAgIGZsb2F0IGluaXRp
YWxBZHZhbmNlID0gZ2V0R2x5cGhzQW5kQWR2YW5jZXNGb3JTaW1wbGVUZXh0KHJ1biwgZnJvbSwg
dG8sIGdseXBoQnVmZmVyLCBGb3JUZXh0RW1waGFzaXMpOwpAQCAtMTk1LDggKzE5NSw4IEBAIHZv
aWQgRm9udDo6ZHJhd0dseXBoQnVmZmVyKEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgY29uc3Qg
VGV4dFJ1biYgcnVuLCBjb25zdCBHCiAgICAgRmxvYXRQb2ludCBzdGFydFBvaW50KHBvaW50Lngo
KSwgcG9pbnQueSgpIC0gZ2x5cGhCdWZmZXIuaW5pdGlhbEFkdmFuY2UoKS5oZWlnaHQoKSk7CiAg
ICAgZmxvYXQgbmV4dFggPSBzdGFydFBvaW50LngoKSArIGdseXBoQnVmZmVyLmFkdmFuY2VBdCgw
KS53aWR0aCgpOwogICAgIGZsb2F0IG5leHRZID0gc3RhcnRQb2ludC55KCkgKyBnbHlwaEJ1ZmZl
ci5hZHZhbmNlQXQoMCkuaGVpZ2h0KCk7Ci0gICAgaW50IGxhc3RGcm9tID0gMDsKLSAgICBpbnQg
bmV4dEdseXBoID0gMTsKKyAgICB1bnNpZ25lZCBsYXN0RnJvbSA9IDA7CisgICAgdW5zaWduZWQg
bmV4dEdseXBoID0gMTsKICNpZiBFTkFCTEUoU1ZHX0ZPTlRTKQogICAgIFRleHRSdW46OlJlbmRl
cmluZ0NvbnRleHQqIHJlbmRlcmluZ0NvbnRleHQgPSBydW4ucmVuZGVyaW5nQ29udGV4dCgpOwog
I2VuZGlmCkBAIC0yMTAsNyArMjEwLDEwIEBAIHZvaWQgRm9udDo6ZHJhd0dseXBoQnVmZmVyKEdy
YXBoaWNzQ29udGV4dCogY29udGV4dCwgY29uc3QgVGV4dFJ1biYgcnVuLCBjb25zdCBHCiAgICAg
ICAgICAgICAgICAgcmVuZGVyaW5nQ29udGV4dC0+ZHJhd1NWR0dseXBocyhjb250ZXh0LCBmb250
RGF0YSwgZ2x5cGhCdWZmZXIsIGxhc3RGcm9tLCBuZXh0R2x5cGggLSBsYXN0RnJvbSwgc3RhcnRQ
b2ludCk7CiAgICAgICAgICAgICBlbHNlCiAjZW5kaWYKKyAgICAgICAgICAgIHsKKyAgICAgICAg
ICAgICAgICBBU1NFUlQobmV4dEdseXBoID49IGxhc3RGcm9tKTsKICAgICAgICAgICAgICAgICBk
cmF3R2x5cGhzKGNvbnRleHQsIGZvbnREYXRhLCBnbHlwaEJ1ZmZlciwgbGFzdEZyb20sIG5leHRH
bHlwaCAtIGxhc3RGcm9tLCBzdGFydFBvaW50KTsKKyAgICAgICAgICAgIH0KIAogICAgICAgICAg
ICAgbGFzdEZyb20gPSBuZXh0R2x5cGg7CiAgICAgICAgICAgICBmb250RGF0YSA9IG5leHRGb250
RGF0YTsKQEAgLTI2OSw3ICsyNzIsNyBAQCB2b2lkIEZvbnQ6OmRyYXdFbXBoYXNpc01hcmtzKEdy
YXBoaWNzQ29udGV4dCogY29udGV4dCwgY29uc3QgVGV4dFJ1biYgcnVuLCBjb25zdAogICAgIEZs
b2F0UG9pbnQgc3RhcnRQb2ludChwb2ludC54KCkgKyBtaWRkbGVPZkxhc3RHbHlwaCAtIG9mZnNl
dFRvTWlkZGxlT2ZHbHlwaChtYXJrRm9udERhdGEsIG1hcmtHbHlwaCksIHBvaW50LnkoKSk7CiAK
ICAgICBHbHlwaEJ1ZmZlciBtYXJrQnVmZmVyOwotICAgIGZvciAoaW50IGkgPSAwOyBpICsgMSA8
IGdseXBoQnVmZmVyLnNpemUoKTsgKytpKSB7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSAr
IDEgPCBnbHlwaEJ1ZmZlci5zaXplKCk7ICsraSkgewogICAgICAgICBmbG9hdCBtaWRkbGVPZk5l
eHRHbHlwaCA9IG9mZnNldFRvTWlkZGxlT2ZHbHlwaEF0SW5kZXgoZ2x5cGhCdWZmZXIsIGkgKyAx
KTsKICAgICAgICAgZmxvYXQgYWR2YW5jZSA9IGdseXBoQnVmZmVyLmFkdmFuY2VBdChpKS53aWR0
aCgpIC0gbWlkZGxlT2ZMYXN0R2x5cGggKyBtaWRkbGVPZk5leHRHbHlwaDsKICAgICAgICAgbWFy
a0J1ZmZlci5hZGQoZ2x5cGhCdWZmZXIuZ2x5cGhBdChpKSA/IG1hcmtHbHlwaCA6IHNwYWNlR2x5
cGgsIG1hcmtGb250RGF0YSwgYWR2YW5jZSk7CkBAIC0yOTYsNyArMjk5LDcgQEAgZmxvYXQgRm9u
dDo6ZmxvYXRXaWR0aEZvclNpbXBsZVRleHQoY29uc3QgVGV4dFJ1biYgcnVuLCBIYXNoU2V0PGNv
bnN0IFNpbXBsZUZvbnQKICAgICByZXR1cm4gaXQubV9ydW5XaWR0aFNvRmFyOwogfQogCi12b2lk
IEZvbnQ6OmFkanVzdFNlbGVjdGlvblJlY3RGb3JTaW1wbGVUZXh0KGNvbnN0IFRleHRSdW4mIHJ1
biwgTGF5b3V0UmVjdCYgc2VsZWN0aW9uUmVjdCwgaW50IGZyb20sIGludCB0bykgY29uc3QKK3Zv
aWQgRm9udDo6YWRqdXN0U2VsZWN0aW9uUmVjdEZvclNpbXBsZVRleHQoY29uc3QgVGV4dFJ1biYg
cnVuLCBMYXlvdXRSZWN0JiBzZWxlY3Rpb25SZWN0LCB1bnNpZ25lZCBmcm9tLCB1bnNpZ25lZCB0
bykgY29uc3QKIHsKICAgICBHbHlwaEJ1ZmZlciBnbHlwaEJ1ZmZlcjsKICAgICBXaWR0aEl0ZXJh
dG9yIGl0KHRoaXMsIHJ1bik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9HbHlwaEJ1ZmZlci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
R2x5cGhCdWZmZXIuaAppbmRleCAzYzU5MzVmYzZkMmMwMjQ3NjA3ZTMzMzI0ZDM5MGIwNWQ3Zjg5
YjQ2Li43YTI4MWFkMmQ0ZWE2OWZhNGNlOTg0NmFlYzllMzE4MDg5YTFmNDMxIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HbHlwaEJ1ZmZlci5oCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dseXBoQnVmZmVyLmgKQEAgLTc2LDcgKzc2
LDcgQEAgdHlwZWRlZiBGbG9hdFNpemUgR2x5cGhCdWZmZXJBZHZhbmNlOwogY2xhc3MgR2x5cGhC
dWZmZXIgewogcHVibGljOgogICAgIGJvb2wgaXNFbXB0eSgpIGNvbnN0IHsgcmV0dXJuIG1fZm9u
dERhdGEuaXNFbXB0eSgpOyB9Ci0gICAgaW50IHNpemUoKSBjb25zdCB7IHJldHVybiBtX2ZvbnRE
YXRhLnNpemUoKTsgfQorICAgIHVuc2lnbmVkIHNpemUoKSBjb25zdCB7IHJldHVybiBtX2ZvbnRE
YXRhLnNpemUoKTsgfQogICAgIAogICAgIHZvaWQgY2xlYXIoKQogICAgIHsKQEAgLTkwLDEyICs5
MCwxMiBAQCBwdWJsaWM6CiAjZW5kaWYKICAgICB9CiAKLSAgICBHbHlwaEJ1ZmZlckdseXBoKiBn
bHlwaHMoaW50IGZyb20pIHsgcmV0dXJuIG1fZ2x5cGhzLmRhdGEoKSArIGZyb207IH0KLSAgICBH
bHlwaEJ1ZmZlckFkdmFuY2UqIGFkdmFuY2VzKGludCBmcm9tKSB7IHJldHVybiBtX2FkdmFuY2Vz
LmRhdGEoKSArIGZyb207IH0KLSAgICBjb25zdCBHbHlwaEJ1ZmZlckdseXBoKiBnbHlwaHMoaW50
IGZyb20pIGNvbnN0IHsgcmV0dXJuIG1fZ2x5cGhzLmRhdGEoKSArIGZyb207IH0KLSAgICBjb25z
dCBHbHlwaEJ1ZmZlckFkdmFuY2UqIGFkdmFuY2VzKGludCBmcm9tKSBjb25zdCB7IHJldHVybiBt
X2FkdmFuY2VzLmRhdGEoKSArIGZyb207IH0KKyAgICBHbHlwaEJ1ZmZlckdseXBoKiBnbHlwaHMo
dW5zaWduZWQgZnJvbSkgeyByZXR1cm4gbV9nbHlwaHMuZGF0YSgpICsgZnJvbTsgfQorICAgIEds
eXBoQnVmZmVyQWR2YW5jZSogYWR2YW5jZXModW5zaWduZWQgZnJvbSkgeyByZXR1cm4gbV9hZHZh
bmNlcy5kYXRhKCkgKyBmcm9tOyB9CisgICAgY29uc3QgR2x5cGhCdWZmZXJHbHlwaCogZ2x5cGhz
KHVuc2lnbmVkIGZyb20pIGNvbnN0IHsgcmV0dXJuIG1fZ2x5cGhzLmRhdGEoKSArIGZyb207IH0K
KyAgICBjb25zdCBHbHlwaEJ1ZmZlckFkdmFuY2UqIGFkdmFuY2VzKHVuc2lnbmVkIGZyb20pIGNv
bnN0IHsgcmV0dXJuIG1fYWR2YW5jZXMuZGF0YSgpICsgZnJvbTsgfQogCi0gICAgY29uc3QgU2lt
cGxlRm9udERhdGEqIGZvbnREYXRhQXQoaW50IGluZGV4KSBjb25zdCB7IHJldHVybiBtX2ZvbnRE
YXRhW2luZGV4XTsgfQorICAgIGNvbnN0IFNpbXBsZUZvbnREYXRhKiBmb250RGF0YUF0KHVuc2ln
bmVkIGluZGV4KSBjb25zdCB7IHJldHVybiBtX2ZvbnREYXRhW2luZGV4XTsgfQogCiAgICAgdm9p
ZCBzZXRJbml0aWFsQWR2YW5jZShHbHlwaEJ1ZmZlckFkdmFuY2UgaW5pdGlhbEFkdmFuY2UpIHsg
bV9pbml0aWFsQWR2YW5jZSA9IGluaXRpYWxBZHZhbmNlOyB9CiAgICAgY29uc3QgR2x5cGhCdWZm
ZXJBZHZhbmNlJiBpbml0aWFsQWR2YW5jZSgpIGNvbnN0IHsgcmV0dXJuIG1faW5pdGlhbEFkdmFu
Y2U7IH0KQEAgLTEwOSwxMiArMTA5LDEyIEBAIHB1YmxpYzoKICNlbmRpZgogICAgIH0KIAotICAg
IEdseXBoQnVmZmVyQWR2YW5jZSBhZHZhbmNlQXQoaW50IGluZGV4KSBjb25zdAorICAgIEdseXBo
QnVmZmVyQWR2YW5jZSBhZHZhbmNlQXQodW5zaWduZWQgaW5kZXgpIGNvbnN0CiAgICAgewogICAg
ICAgICByZXR1cm4gbV9hZHZhbmNlc1tpbmRleF07CiAgICAgfQogCi0gICAgRmxvYXRTaXplIG9m
ZnNldEF0KGludCBpbmRleCkgY29uc3QKKyAgICBGbG9hdFNpemUgb2Zmc2V0QXQodW5zaWduZWQg
aW5kZXgpIGNvbnN0CiAgICAgewogI2lmIFBMQVRGT1JNKFdJTikKICAgICAgICAgcmV0dXJuIG1f
b2Zmc2V0c1tpbmRleF07CkBAIC0xNzYsNyArMTc2LDcgQEAgcHVibGljOgogICAgIH0KICNlbmRp
ZgogCi0gICAgdm9pZCByZXZlcnNlKGludCBmcm9tLCBpbnQgbGVuZ3RoKQorICAgIHZvaWQgcmV2
ZXJzZSh1bnNpZ25lZCBmcm9tLCB1bnNpZ25lZCBsZW5ndGgpCiAgICAgewogICAgICAgICBmb3Ig
KGludCBpID0gZnJvbSwgZW5kID0gZnJvbSArIGxlbmd0aCAtIDE7IGkgPCBlbmQ7ICsraSwgLS1l
bmQpCiAgICAgICAgICAgICBzd2FwKGksIGVuZCk7CkBAIC0xOTQsMTQgKzE5NCwxNCBAQCBwdWJs
aWM6CiAgICAgICAgIG1fb2Zmc2V0c0luU3RyaW5nLnJlc2V0KG5ldyBWZWN0b3I8aW50LCAyMDQ4
PigpKTsKICAgICB9CiAgICAgCi0gICAgaW50IG9mZnNldEluU3RyaW5nKGludCBpbmRleCkgY29u
c3QKKyAgICBpbnQgb2Zmc2V0SW5TdHJpbmcodW5zaWduZWQgaW5kZXgpIGNvbnN0CiAgICAgewog
ICAgICAgICBBU1NFUlQobV9vZmZzZXRzSW5TdHJpbmcpOwogICAgICAgICByZXR1cm4gKCptX29m
ZnNldHNJblN0cmluZylbaW5kZXhdOwogICAgIH0KIAogcHJpdmF0ZToKLSAgICB2b2lkIHN3YXAo
aW50IGluZGV4MSwgaW50IGluZGV4MikKKyAgICB2b2lkIHN3YXAodW5zaWduZWQgaW5kZXgxLCB1
bnNpZ25lZCBpbmRleDIpCiAgICAgewogICAgICAgICBjb25zdCBTaW1wbGVGb250RGF0YSogZiA9
IG1fZm9udERhdGFbaW5kZXgxXTsKICAgICAgICAgbV9mb250RGF0YVtpbmRleDFdID0gbV9mb250
RGF0YVtpbmRleDJdOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvR3JhcGhpY3NDb250ZXh0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L0dyYXBoaWNzQ29udGV4dC5jcHAKaW5kZXggMGU0MDBlYzgwNzM5ZDdjOTViMmMzYTEyZWZhNDA3
MjFjNGJhNmFkMy4uZTA5NjQ0ZDQ1OGZlZDhhMmY3Njg4NTk5NzRhZDc5NTAxYjVkYzNkZSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRl
eHQuY3BwCkBAIC03NCw3ICs3NCw3IEBAIHB1YmxpYzoKIAogcHJpdmF0ZToKICAgICBjb25zdCBU
ZXh0UnVuKiBtX3RleHRSdW47Ci0gICAgaW50IG1fb2Zmc2V0OworICAgIHVuc2lnbmVkIG1fb2Zm
c2V0OwogfTsKIAogY2xhc3MgSW50ZXJwb2xhdGlvblF1YWxpdHlNYWludGFpbmVyIHsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0xhdGluMVRleHRJdGVyYXRv
ci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvTGF0aW4xVGV4dEl0ZXJhdG9y
LmgKaW5kZXggYzQwMTg5YmZlOTMzMmEwZGViNDA2NDNjMTRkMWUyODA3N2RhZDM4OS4uNmI3ZTU5
OWQwMDIzZjk4YjMyNjA2ODIwOWY5YzYwMjcyNzdlZGJhZSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvTGF0aW4xVGV4dEl0ZXJhdG9yLmgKKysrIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvTGF0aW4xVGV4dEl0ZXJhdG9yLmgKQEAgLTMwLDcg
KzMwLDcgQEAgY2xhc3MgTGF0aW4xVGV4dEl0ZXJhdG9yIHsKIHB1YmxpYzoKICAgICAvLyBUaGUg
cGFzc2VkIGluIExDaGFyIHBvaW50ZXIgc3RhcnRzIGF0ICdjdXJyZW50Q2hhcmFjdGVyJy4gVGhl
IGl0ZXJhdG9yIG9wZXJhdGVzIG9uIHRoZSByYW5nZSBbY3VycmVudENoYXJhY3RlciwgbGFzdENo
YXJhY3Rlcl0uCiAgICAgLy8gJ2VuZENoYXJhY3RlcicgZGVub3RlcyB0aGUgbWF4aW11bSBsZW5n
dGggb2YgdGhlIFVDaGFyIGFycmF5LCB3aGljaCBtaWdodCBleGNlZWQgJ2xhc3RDaGFyYWN0ZXIn
LgotICAgIExhdGluMVRleHRJdGVyYXRvcihjb25zdCBMQ2hhciogY2hhcmFjdGVycywgaW50IGN1
cnJlbnRDaGFyYWN0ZXIsIGludCBsYXN0Q2hhcmFjdGVyLCBpbnQgLyplbmRDaGFyYWN0ZXIqLykK
KyAgICBMYXRpbjFUZXh0SXRlcmF0b3IoY29uc3QgTENoYXIqIGNoYXJhY3RlcnMsIHVuc2lnbmVk
IGN1cnJlbnRDaGFyYWN0ZXIsIHVuc2lnbmVkIGxhc3RDaGFyYWN0ZXIsIHVuc2lnbmVkIC8qZW5k
Q2hhcmFjdGVyKi8pCiAgICAgICAgIDogbV9jaGFyYWN0ZXJzKGNoYXJhY3RlcnMpCiAgICAgICAg
ICwgbV9jdXJyZW50Q2hhcmFjdGVyKGN1cnJlbnRDaGFyYWN0ZXIpCiAgICAgICAgICwgbV9sYXN0
Q2hhcmFjdGVyKGxhc3RDaGFyYWN0ZXIpCkBAIC01MywxMyArNTMsMTMgQEAgcHVibGljOgogICAg
ICAgICBtX2N1cnJlbnRDaGFyYWN0ZXIgKz0gYWR2YW5jZUxlbmd0aDsKICAgICB9CiAKLSAgICBp
bnQgY3VycmVudENoYXJhY3RlcigpIGNvbnN0IHsgcmV0dXJuIG1fY3VycmVudENoYXJhY3Rlcjsg
fQorICAgIHVuc2lnbmVkIGN1cnJlbnRDaGFyYWN0ZXIoKSBjb25zdCB7IHJldHVybiBtX2N1cnJl
bnRDaGFyYWN0ZXI7IH0KICAgICBjb25zdCBMQ2hhciogY2hhcmFjdGVycygpIGNvbnN0IHsgcmV0
dXJuIG1fY2hhcmFjdGVyczsgfQogCiBwcml2YXRlOgogICAgIGNvbnN0IExDaGFyKiBtX2NoYXJh
Y3RlcnM7Ci0gICAgaW50IG1fY3VycmVudENoYXJhY3RlcjsKLSAgICBpbnQgbV9sYXN0Q2hhcmFj
dGVyOworICAgIHVuc2lnbmVkIG1fY3VycmVudENoYXJhY3RlcjsKKyAgICB1bnNpZ25lZCBtX2xh
c3RDaGFyYWN0ZXI7CiB9OwogCiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9TaW1wbGVGb250RGF0YS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvU2ltcGxlRm9udERhdGEuaAppbmRleCA5ZGY4YzU3ZDYwYTc0MjAyYTc5MjQzNjdhYjM5
Mzk3Njc2NzUwNzYzLi44NmI5NWIxMjliYmE2YjI5ZDM1NmZhMGI1ZTg0ZTlkMjA0YzFjNDc2IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9TaW1wbGVGb250RGF0
YS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1NpbXBsZUZvbnREYXRh
LmgKQEAgLTg5LDcgKzg5LDcgQEAgcHVibGljOgogICAgICAgICB2aXJ0dWFsIHZvaWQgaW5pdGlh
bGl6ZUZvbnREYXRhKFNpbXBsZUZvbnREYXRhKiwgZmxvYXQgZm9udFNpemUpID0gMDsKICAgICAg
ICAgdmlydHVhbCBmbG9hdCB3aWR0aEZvclNWR0dseXBoKEdseXBoLCBmbG9hdCBmb250U2l6ZSkg
Y29uc3QgPSAwOwogICAgICAgICB2aXJ0dWFsIGJvb2wgZmlsbFNWR0dseXBoUGFnZShHbHlwaFBh
Z2UqLCB1bnNpZ25lZCBvZmZzZXQsIHVuc2lnbmVkIGxlbmd0aCwgVUNoYXIqIGJ1ZmZlciwgdW5z
aWduZWQgYnVmZmVyTGVuZ3RoLCBjb25zdCBTaW1wbGVGb250RGF0YSopIGNvbnN0ID0gMDsKLSAg
ICAgICAgdmlydHVhbCBib29sIGFwcGx5U1ZHR2x5cGhTZWxlY3Rpb24oV2lkdGhJdGVyYXRvciYs
IEdseXBoRGF0YSYsIGJvb2wgbWlycm9yLCBpbnQgY3VycmVudENoYXJhY3RlciwgdW5zaWduZWQm
IGFkdmFuY2VMZW5ndGgpIGNvbnN0ID0gMDsKKyAgICAgICAgdmlydHVhbCBib29sIGFwcGx5U1ZH
R2x5cGhTZWxlY3Rpb24oV2lkdGhJdGVyYXRvciYsIEdseXBoRGF0YSYsIGJvb2wgbWlycm9yLCB1
bnNpZ25lZCBjdXJyZW50Q2hhcmFjdGVyLCB1bnNpZ25lZCYgYWR2YW5jZUxlbmd0aCkgY29uc3Qg
PSAwOwogICAgIH07CiAKICAgICAvLyBVc2VkIHRvIGNyZWF0ZSBwbGF0Zm9ybSBmb250cy4KZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1N1cnJvZ2F0ZVBhaXJB
d2FyZVRleHRJdGVyYXRvci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9T
dXJyb2dhdGVQYWlyQXdhcmVUZXh0SXRlcmF0b3IuY3BwCmluZGV4IDkxNTVlNzExYThkYTgwZDRl
YjNkY2Y1ZGE1YWMzMDVhMjhjYmVhNzkuLmNlNzA0YmUzZjIzNjAzYzgyZjg4ZDExNWNkZDZiZWMw
ZjU0MTY3ZWUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1N1
cnJvZ2F0ZVBhaXJBd2FyZVRleHRJdGVyYXRvci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvU3Vycm9nYXRlUGFpckF3YXJlVGV4dEl0ZXJhdG9yLmNwcApAQCAtMjcs
NyArMjcsNyBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLVN1cnJvZ2F0ZVBhaXJBd2FyZVRl
eHRJdGVyYXRvcjo6U3Vycm9nYXRlUGFpckF3YXJlVGV4dEl0ZXJhdG9yKGNvbnN0IFVDaGFyKiBj
aGFyYWN0ZXJzLCBpbnQgY3VycmVudENoYXJhY3RlciwgaW50IGxhc3RDaGFyYWN0ZXIsIGludCBl
bmRDaGFyYWN0ZXIpCitTdXJyb2dhdGVQYWlyQXdhcmVUZXh0SXRlcmF0b3I6OlN1cnJvZ2F0ZVBh
aXJBd2FyZVRleHRJdGVyYXRvcihjb25zdCBVQ2hhciogY2hhcmFjdGVycywgdW5zaWduZWQgY3Vy
cmVudENoYXJhY3RlciwgdW5zaWduZWQgbGFzdENoYXJhY3RlciwgdW5zaWduZWQgZW5kQ2hhcmFj
dGVyKQogICAgIDogbV9jaGFyYWN0ZXJzKGNoYXJhY3RlcnMpCiAgICAgLCBtX2N1cnJlbnRDaGFy
YWN0ZXIoY3VycmVudENoYXJhY3RlcikKICAgICAsIG1fbGFzdENoYXJhY3RlcihsYXN0Q2hhcmFj
dGVyKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvU3Vycm9n
YXRlUGFpckF3YXJlVGV4dEl0ZXJhdG9yLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9TdXJyb2dhdGVQYWlyQXdhcmVUZXh0SXRlcmF0b3IuaAppbmRleCA4NWM5Njk0Yzc2YTIy
Y2RlYWVlYjNiYTg0MWIxMGEwYTUwMzE2ODEzLi4xYTcxNWMwY2EyZDI0ODNiMjQ3Mjk5NzVlYjc1
YzlmYTIyMzZlZDQ5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9TdXJyb2dhdGVQYWlyQXdhcmVUZXh0SXRlcmF0b3IuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9TdXJyb2dhdGVQYWlyQXdhcmVUZXh0SXRlcmF0b3IuaApAQCAtMzAs
NyArMzAsNyBAQCBjbGFzcyBTdXJyb2dhdGVQYWlyQXdhcmVUZXh0SXRlcmF0b3IgewogcHVibGlj
OgogICAgIC8vIFRoZSBwYXNzZWQgaW4gVUNoYXIgcG9pbnRlciBzdGFydHMgYXQgJ2N1cnJlbnRD
aGFyYWN0ZXInLiBUaGUgaXRlcmF0b3Igb3BlcmF0b2VzIG9uIHRoZSByYW5nZSBbY3VycmVudENo
YXJhY3RlciwgbGFzdENoYXJhY3Rlcl0uCiAgICAgLy8gJ2VuZENoYXJhY3RlcicgZGVub3RlcyB0
aGUgbWF4aW11bSBsZW5ndGggb2YgdGhlIFVDaGFyIGFycmF5LCB3aGljaCBtaWdodCBleGNlZWQg
J2xhc3RDaGFyYWN0ZXInLgotICAgIFN1cnJvZ2F0ZVBhaXJBd2FyZVRleHRJdGVyYXRvcihjb25z
dCBVQ2hhciosIGludCBjdXJyZW50Q2hhcmFjdGVyLCBpbnQgbGFzdENoYXJhY3RlciwgaW50IGVu
ZENoYXJhY3Rlcik7CisgICAgU3Vycm9nYXRlUGFpckF3YXJlVGV4dEl0ZXJhdG9yKGNvbnN0IFVD
aGFyKiwgdW5zaWduZWQgY3VycmVudENoYXJhY3RlciwgdW5zaWduZWQgbGFzdENoYXJhY3Rlciwg
dW5zaWduZWQgZW5kQ2hhcmFjdGVyKTsKIAogICAgIGlubGluZSBib29sIGNvbnN1bWUoVUNoYXIz
MiYgY2hhcmFjdGVyLCB1bnNpZ25lZCYgY2x1c3Rlckxlbmd0aCkKICAgICB7CkBAIC01Miw3ICs1
Miw3IEBAIHB1YmxpYzoKICAgICAgICAgbV9jdXJyZW50Q2hhcmFjdGVyICs9IGFkdmFuY2VMZW5n
dGg7CiAgICAgfQogCi0gICAgaW50IGN1cnJlbnRDaGFyYWN0ZXIoKSBjb25zdCB7IHJldHVybiBt
X2N1cnJlbnRDaGFyYWN0ZXI7IH0KKyAgICB1bnNpZ25lZCBjdXJyZW50Q2hhcmFjdGVyKCkgY29u
c3QgeyByZXR1cm4gbV9jdXJyZW50Q2hhcmFjdGVyOyB9CiAgICAgY29uc3QgVUNoYXIqIGNoYXJh
Y3RlcnMoKSBjb25zdCB7IHJldHVybiBtX2NoYXJhY3RlcnM7IH0KIAogcHJpdmF0ZToKQEAgLTYw
LDkgKzYwLDkgQEAgcHJpdmF0ZToKICAgICBVQ2hhcjMyIG5vcm1hbGl6ZVZvaWNpbmdNYXJrcygp
OwogCiAgICAgY29uc3QgVUNoYXIqIG1fY2hhcmFjdGVyczsKLSAgICBpbnQgbV9jdXJyZW50Q2hh
cmFjdGVyOwotICAgIGludCBtX2xhc3RDaGFyYWN0ZXI7Ci0gICAgaW50IG1fZW5kQ2hhcmFjdGVy
OworICAgIHVuc2lnbmVkIG1fY3VycmVudENoYXJhY3RlcjsKKyAgICB1bnNpZ25lZCBtX2xhc3RD
aGFyYWN0ZXI7CisgICAgdW5zaWduZWQgbV9lbmRDaGFyYWN0ZXI7CiB9OwogCiB9CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9UZXh0UnVuLmggYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9UZXh0UnVuLmgKaW5kZXggMzcyMDg0NTZlYjNjOWMz
NjVkYzU2MmZjMzVlMDM0YzBlMTUyNTJkMS4uMTg0MWQ4N2NjNGQzNDUzOGNjNDM1ZTJlODAwMWMy
MDdjZGI2YjU5MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
VGV4dFJ1bi5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1RleHRSdW4u
aApAQCAtMTcxLDggKzE3MSw4IEBAIHB1YmxpYzoKICAgICBjb25zdCBVQ2hhciogY2hhcmFjdGVy
czE2KCkgY29uc3QgeyBBU1NFUlQoIWlzOEJpdCgpKTsgcmV0dXJuIG1fZGF0YS5jaGFyYWN0ZXJz
MTY7IH0KICAgICAKICAgICBib29sIGlzOEJpdCgpIGNvbnN0IHsgcmV0dXJuIG1faXM4Qml0OyB9
Ci0gICAgaW50IGxlbmd0aCgpIGNvbnN0IHsgcmV0dXJuIG1fbGVuOyB9Ci0gICAgaW50IGNoYXJh
Y3RlcnNMZW5ndGgoKSBjb25zdCB7IHJldHVybiBtX2NoYXJhY3RlcnNMZW5ndGg7IH0KKyAgICB1
bnNpZ25lZCBsZW5ndGgoKSBjb25zdCB7IHJldHVybiBtX2xlbjsgfQorICAgIHVuc2lnbmVkIGNo
YXJhY3RlcnNMZW5ndGgoKSBjb25zdCB7IHJldHVybiBtX2NoYXJhY3RlcnNMZW5ndGg7IH0KICAg
ICBTdHJpbmcgc3RyaW5nKCkgY29uc3QKICAgICB7CiAgICAgICAgIGlmIChpczhCaXQoKSkKQEAg
LTIxNyw3ICsyMTcsNyBAQCBwdWJsaWM6CiAgICAgICAgIHZpcnR1YWwgflJlbmRlcmluZ0NvbnRl
eHQoKSB7IH0KIAogI2lmIEVOQUJMRShTVkdfRk9OVFMpCi0gICAgICAgIHZpcnR1YWwgR2x5cGhE
YXRhIGdseXBoRGF0YUZvckNoYXJhY3Rlcihjb25zdCBGb250JiwgV2lkdGhJdGVyYXRvciYsIFVD
aGFyMzIgY2hhcmFjdGVyLCBib29sIG1pcnJvciwgaW50IGN1cnJlbnRDaGFyYWN0ZXIsIHVuc2ln
bmVkJiBhZHZhbmNlTGVuZ3RoKSA9IDA7CisgICAgICAgIHZpcnR1YWwgR2x5cGhEYXRhIGdseXBo
RGF0YUZvckNoYXJhY3Rlcihjb25zdCBGb250JiwgV2lkdGhJdGVyYXRvciYsIFVDaGFyMzIgY2hh
cmFjdGVyLCBib29sIG1pcnJvciwgdW5zaWduZWQgY3VycmVudENoYXJhY3RlciwgdW5zaWduZWQm
IGFkdmFuY2VMZW5ndGgpID0gMDsKICAgICAgICAgdmlydHVhbCB2b2lkIGRyYXdTVkdHbHlwaHMo
R3JhcGhpY3NDb250ZXh0KiwgY29uc3QgU2ltcGxlRm9udERhdGEqLCBjb25zdCBHbHlwaEJ1ZmZl
ciYsIGludCBmcm9tLCBpbnQgdG8sIGNvbnN0IEZsb2F0UG9pbnQmKSBjb25zdCA9IDA7CiAgICAg
ICAgIHZpcnR1YWwgZmxvYXQgZmxvYXRXaWR0aFVzaW5nU1ZHRm9udChjb25zdCBGb250JiwgY29u
c3QgVGV4dFJ1biYsIGludCYgY2hhcnNDb25zdW1lZCwgU3RyaW5nJiBnbHlwaE5hbWUpIGNvbnN0
ID0gMDsKICAgICAgICAgdmlydHVhbCBib29sIGFwcGx5U1ZHS2VybmluZyhjb25zdCBTaW1wbGVG
b250RGF0YSosIFdpZHRoSXRlcmF0b3ImLCBHbHlwaEJ1ZmZlciosIGludCBmcm9tKSBjb25zdCA9
IDA7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9XaWR0aEl0
ZXJhdG9yLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1dpZHRoSXRlcmF0
b3IuY3BwCmluZGV4IDc3N2RjMjk3OGRiZjk3Y2JkMTc3M2ZmNmEwY2JmYjAwNTNjNmNiNTkuLjk4
ODliZDBlZDYzOWU2ZGM4NDYxZDEyNzQzMDNjMTJjMWE2NDg1MjAgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1dpZHRoSXRlcmF0b3IuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1dpZHRoSXRlcmF0b3IuY3BwCkBAIC02OCw3ICs2
OCw3IEBAIFdpZHRoSXRlcmF0b3I6OldpZHRoSXRlcmF0b3IoY29uc3QgRm9udCogZm9udCwgY29u
c3QgVGV4dFJ1biYgcnVuLCBIYXNoU2V0PGNvbnN0CiAgICAgfQogfQogCi1HbHlwaERhdGEgV2lk
dGhJdGVyYXRvcjo6Z2x5cGhEYXRhRm9yQ2hhcmFjdGVyKFVDaGFyMzIgY2hhcmFjdGVyLCBib29s
IG1pcnJvciwgaW50IGN1cnJlbnRDaGFyYWN0ZXIsIHVuc2lnbmVkJiBhZHZhbmNlTGVuZ3RoKQor
R2x5cGhEYXRhIFdpZHRoSXRlcmF0b3I6OmdseXBoRGF0YUZvckNoYXJhY3RlcihVQ2hhcjMyIGNo
YXJhY3RlciwgYm9vbCBtaXJyb3IsIHVuc2lnbmVkIGN1cnJlbnRDaGFyYWN0ZXIsIHVuc2lnbmVk
JiBhZHZhbmNlTGVuZ3RoKQogewogICAgIEFTU0VSVChtX2ZvbnQpOwogCkBAIC05OSw3ICs5OSw3
IEBAIHB1YmxpYzoKIAogdHlwZWRlZiBWZWN0b3I8c3RkOjpwYWlyPGludCwgT3JpZ2luYWxBZHZh
bmNlc0ZvckNoYXJhY3RlclRyZWF0ZWRBc1NwYWNlPiwgNjQ+IENoYXJhY3RlcnNUcmVhdGVkQXNT
cGFjZTsKIAotc3RhdGljIGlubGluZSBmbG9hdCBhcHBseUZvbnRUcmFuc2Zvcm1zKEdseXBoQnVm
ZmVyKiBnbHlwaEJ1ZmZlciwgYm9vbCBsdHIsIGludCYgbGFzdEdseXBoQ291bnQsIGNvbnN0IFNp
bXBsZUZvbnREYXRhKiBmb250RGF0YSwgV2lkdGhJdGVyYXRvciYgaXRlcmF0b3IsIFR5cGVzZXR0
aW5nRmVhdHVyZXMgdHlwZXNldHRpbmdGZWF0dXJlcywgQ2hhcmFjdGVyc1RyZWF0ZWRBc1NwYWNl
JiBjaGFyYWN0ZXJzVHJlYXRlZEFzU3BhY2UpCitzdGF0aWMgaW5saW5lIGZsb2F0IGFwcGx5Rm9u
dFRyYW5zZm9ybXMoR2x5cGhCdWZmZXIqIGdseXBoQnVmZmVyLCBib29sIGx0ciwgdW5zaWduZWQm
IGxhc3RHbHlwaENvdW50LCBjb25zdCBTaW1wbGVGb250RGF0YSogZm9udERhdGEsIFdpZHRoSXRl
cmF0b3ImIGl0ZXJhdG9yLCBUeXBlc2V0dGluZ0ZlYXR1cmVzIHR5cGVzZXR0aW5nRmVhdHVyZXMs
IENoYXJhY3RlcnNUcmVhdGVkQXNTcGFjZSYgY2hhcmFjdGVyc1RyZWF0ZWRBc1NwYWNlKQogewog
ICAgIEFTU0VSVCh0eXBlc2V0dGluZ0ZlYXR1cmVzICYgKEtlcm5pbmcgfCBMaWdhdHVyZXMpKTsK
IApAQCAtMTY1LDE0ICsxNjUsMTQgQEAgaW5saW5lIHVuc2lnbmVkIFdpZHRoSXRlcmF0b3I6OmFk
dmFuY2VJbnRlcm5hbChUZXh0SXRlcmF0b3ImIHRleHRJdGVyYXRvciwgR2x5cGgKIAogICAgIGNv
bnN0IFNpbXBsZUZvbnREYXRhKiBwcmltYXJ5Rm9udCA9IG1fZm9udC0+cHJpbWFyeUZvbnQoKTsK
ICAgICBjb25zdCBTaW1wbGVGb250RGF0YSogbGFzdEZvbnREYXRhID0gcHJpbWFyeUZvbnQ7Ci0g
ICAgaW50IGxhc3RHbHlwaENvdW50ID0gZ2x5cGhCdWZmZXIgPyBnbHlwaEJ1ZmZlci0+c2l6ZSgp
IDogMDsKKyAgICB1bnNpZ25lZCBsYXN0R2x5cGhDb3VudCA9IGdseXBoQnVmZmVyID8gZ2x5cGhC
dWZmZXItPnNpemUoKSA6IDA7CiAKICAgICBVQ2hhcjMyIGNoYXJhY3RlciA9IDA7CiAgICAgdW5z
aWduZWQgY2x1c3Rlckxlbmd0aCA9IDA7CiAgICAgQ2hhcmFjdGVyc1RyZWF0ZWRBc1NwYWNlIGNo
YXJhY3RlcnNUcmVhdGVkQXNTcGFjZTsKICAgICB3aGlsZSAodGV4dEl0ZXJhdG9yLmNvbnN1bWUo
Y2hhcmFjdGVyLCBjbHVzdGVyTGVuZ3RoKSkgewogICAgICAgICB1bnNpZ25lZCBhZHZhbmNlTGVu
Z3RoID0gY2x1c3Rlckxlbmd0aDsKLSAgICAgICAgaW50IGN1cnJlbnRDaGFyYWN0ZXIgPSB0ZXh0
SXRlcmF0b3IuY3VycmVudENoYXJhY3RlcigpOworICAgICAgICB1bnNpZ25lZCBjdXJyZW50Q2hh
cmFjdGVyID0gdGV4dEl0ZXJhdG9yLmN1cnJlbnRDaGFyYWN0ZXIoKTsKICAgICAgICAgY29uc3Qg
R2x5cGhEYXRhJiBnbHlwaERhdGEgPSBnbHlwaERhdGFGb3JDaGFyYWN0ZXIoY2hhcmFjdGVyLCBy
dGwsIGN1cnJlbnRDaGFyYWN0ZXIsIGFkdmFuY2VMZW5ndGgpOwogICAgICAgICBHbHlwaCBnbHlw
aCA9IGdseXBoRGF0YS5nbHlwaDsKICAgICAgICAgY29uc3QgU2ltcGxlRm9udERhdGEqIGZvbnRE
YXRhID0gZ2x5cGhEYXRhLmZvbnREYXRhOwpAQCAtMzI3LDE0ICszMjcsMTQgQEAgaW5saW5lIHVu
c2lnbmVkIFdpZHRoSXRlcmF0b3I6OmFkdmFuY2VJbnRlcm5hbChUZXh0SXRlcmF0b3ImIHRleHRJ
dGVyYXRvciwgR2x5cGgKICAgICByZXR1cm4gY29uc3VtZWRDaGFyYWN0ZXJzOwogfQogCi11bnNp
Z25lZCBXaWR0aEl0ZXJhdG9yOjphZHZhbmNlKGludCBvZmZzZXQsIEdseXBoQnVmZmVyKiBnbHlw
aEJ1ZmZlcikKK3Vuc2lnbmVkIFdpZHRoSXRlcmF0b3I6OmFkdmFuY2UodW5zaWduZWQgb2Zmc2V0
LCBHbHlwaEJ1ZmZlciogZ2x5cGhCdWZmZXIpCiB7Ci0gICAgaW50IGxlbmd0aCA9IG1fcnVuLmxl
bmd0aCgpOworICAgIHVuc2lnbmVkIGxlbmd0aCA9IG1fcnVuLmxlbmd0aCgpOwogCiAgICAgaWYg
KG9mZnNldCA+IGxlbmd0aCkKICAgICAgICAgb2Zmc2V0ID0gbGVuZ3RoOwogCi0gICAgaWYgKG1f
Y3VycmVudENoYXJhY3RlciA+PSBzdGF0aWNfY2FzdDx1bnNpZ25lZD4ob2Zmc2V0KSkKKyAgICBp
ZiAobV9jdXJyZW50Q2hhcmFjdGVyID49IG9mZnNldCkKICAgICAgICAgcmV0dXJuIDA7CiAKICAg
ICBpZiAobV9ydW4uaXM4Qml0KCkpIHsKQEAgLTM0OCwxMCArMzQ4LDEwIEBAIHVuc2lnbmVkIFdp
ZHRoSXRlcmF0b3I6OmFkdmFuY2UoaW50IG9mZnNldCwgR2x5cGhCdWZmZXIqIGdseXBoQnVmZmVy
KQogCiBib29sIFdpZHRoSXRlcmF0b3I6OmFkdmFuY2VPbmVDaGFyYWN0ZXIoZmxvYXQmIHdpZHRo
LCBHbHlwaEJ1ZmZlciYgZ2x5cGhCdWZmZXIpCiB7Ci0gICAgaW50IG9sZFNpemUgPSBnbHlwaEJ1
ZmZlci5zaXplKCk7CisgICAgdW5zaWduZWQgb2xkU2l6ZSA9IGdseXBoQnVmZmVyLnNpemUoKTsK
ICAgICBhZHZhbmNlKG1fY3VycmVudENoYXJhY3RlciArIDEsICZnbHlwaEJ1ZmZlcik7CiAgICAg
ZmxvYXQgdyA9IDA7Ci0gICAgZm9yIChpbnQgaSA9IG9sZFNpemU7IGkgPCBnbHlwaEJ1ZmZlci5z
aXplKCk7ICsraSkKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSBvbGRTaXplOyBpIDwgZ2x5cGhCdWZm
ZXIuc2l6ZSgpOyArK2kpCiAgICAgICAgIHcgKz0gZ2x5cGhCdWZmZXIuYWR2YW5jZUF0KGkpLndp
ZHRoKCk7CiAgICAgd2lkdGggPSB3OwogICAgIHJldHVybiBnbHlwaEJ1ZmZlci5zaXplKCkgPiBv
bGRTaXplOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvV2lk
dGhJdGVyYXRvci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvV2lkdGhJdGVy
YXRvci5oCmluZGV4IGNkMDZkN2M0ZGNjNDEyMGE2NmEzZDA0NDg3YWU4OGZkY2ExMzk4YjYuLmZk
YzRiYTRjZTM1NjFhMTVkNDExM2EzZjEyOWRkYmU1ZjExMTE4ZDAgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1dpZHRoSXRlcmF0b3IuaAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9XaWR0aEl0ZXJhdG9yLmgKQEAgLTQxLDcgKzQxLDcg
QEAgc3RydWN0IFdpZHRoSXRlcmF0b3IgewogcHVibGljOgogICAgIFdpZHRoSXRlcmF0b3IoY29u
c3QgRm9udCosIGNvbnN0IFRleHRSdW4mLCBIYXNoU2V0PGNvbnN0IFNpbXBsZUZvbnREYXRhKj4q
IGZhbGxiYWNrRm9udHMgPSAwLCBib29sIGFjY291bnRGb3JHbHlwaEJvdW5kcyA9IGZhbHNlLCBi
b29sIGZvclRleHRFbXBoYXNpcyA9IGZhbHNlKTsKIAotICAgIHVuc2lnbmVkIGFkdmFuY2UoaW50
IHRvLCBHbHlwaEJ1ZmZlciopOworICAgIHVuc2lnbmVkIGFkdmFuY2UodW5zaWduZWQgdG8sIEds
eXBoQnVmZmVyKik7CiAgICAgYm9vbCBhZHZhbmNlT25lQ2hhcmFjdGVyKGZsb2F0JiB3aWR0aCwg
R2x5cGhCdWZmZXImKTsKIAogICAgIGZsb2F0IG1heEdseXBoQm91bmRpbmdCb3hZKCkgY29uc3Qg
eyBBU1NFUlQobV9hY2NvdW50Rm9yR2x5cGhCb3VuZHMpOyByZXR1cm4gbV9tYXhHbHlwaEJvdW5k
aW5nQm94WTsgfQpAQCAtODcsNyArODcsNyBAQCBwdWJsaWM6CiAjZW5kaWYKIAogcHJpdmF0ZToK
LSAgICBHbHlwaERhdGEgZ2x5cGhEYXRhRm9yQ2hhcmFjdGVyKFVDaGFyMzIsIGJvb2wgbWlycm9y
LCBpbnQgY3VycmVudENoYXJhY3RlciwgdW5zaWduZWQmIGFkdmFuY2VMZW5ndGgpOworICAgIEds
eXBoRGF0YSBnbHlwaERhdGFGb3JDaGFyYWN0ZXIoVUNoYXIzMiwgYm9vbCBtaXJyb3IsIHVuc2ln
bmVkIGN1cnJlbnRDaGFyYWN0ZXIsIHVuc2lnbmVkJiBhZHZhbmNlTGVuZ3RoKTsKICAgICB0ZW1w
bGF0ZSA8dHlwZW5hbWUgVGV4dEl0ZXJhdG9yPgogICAgIGlubGluZSB1bnNpZ25lZCBhZHZhbmNl
SW50ZXJuYWwoVGV4dEl0ZXJhdG9yJiwgR2x5cGhCdWZmZXIqKTsKIApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vRm9udENhaXJvLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ZvbnRDYWlyby5jcHAKaW5kZXggYzE5
MGFiYTIzZmNlYTM5ZjRiOTQ4ZDIyNzMxNWVmNWJmMzExMTVhNy4uMjkxNzFiZjBjMWU5YTM3MDVk
OTNjNzBlNmE3ZTU3YWI2MDE0MGYzZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2Fpcm8vRm9udENhaXJvLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jYWlyby9Gb250Q2Fpcm8uY3BwCkBAIC05NCw3ICs5NCw3IEBAIHN0YXRp
YyB2b2lkIGRyYXdHbHlwaHNTaGFkb3coR3JhcGhpY3NDb250ZXh0KiBncmFwaGljc0NvbnRleHQs
IGNvbnN0IEZsb2F0UG9pbnQmCiB9CiAKIHZvaWQgRm9udDo6ZHJhd0dseXBocyhHcmFwaGljc0Nv
bnRleHQqIGNvbnRleHQsIGNvbnN0IFNpbXBsZUZvbnREYXRhKiBmb250LCBjb25zdCBHbHlwaEJ1
ZmZlciYgZ2x5cGhCdWZmZXIsCi0gICAgICAgICAgICAgICAgICAgICAgaW50IGZyb20sIGludCBu
dW1HbHlwaHMsIGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50KSBjb25zdAorICAgIHVuc2lnbmVkIGZy
b20sIHVuc2lnbmVkIG51bUdseXBocywgY29uc3QgRmxvYXRQb2ludCYgcG9pbnQpIGNvbnN0CiB7
CiAgICAgaWYgKCFmb250LT5wbGF0Zm9ybURhdGEoKS5zaXplKCkpCiAgICAgICAgIHJldHVybjsK
QEAgLTEwMiw3ICsxMDIsNyBAQCB2b2lkIEZvbnQ6OmRyYXdHbHlwaHMoR3JhcGhpY3NDb250ZXh0
KiBjb250ZXh0LCBjb25zdCBTaW1wbGVGb250RGF0YSogZm9udCwgY29ucwogICAgIEdseXBoQnVm
ZmVyR2x5cGgqIGdseXBocyA9IGNvbnN0X2Nhc3Q8R2x5cGhCdWZmZXJHbHlwaCo+KGdseXBoQnVm
ZmVyLmdseXBocyhmcm9tKSk7CiAKICAgICBmbG9hdCBvZmZzZXQgPSBwb2ludC54KCk7Ci0gICAg
Zm9yIChpbnQgaSA9IDA7IGkgPCBudW1HbHlwaHM7IGkrKykgeworICAgIGZvciAodW5zaWduZWQg
aSA9IDA7IGkgPCBudW1HbHlwaHM7IGkrKykgewogICAgICAgICBnbHlwaHNbaV0ueCA9IG9mZnNl
dDsKICAgICAgICAgZ2x5cGhzW2ldLnkgPSBwb2ludC55KCk7CiAgICAgICAgIG9mZnNldCArPSBn
bHlwaEJ1ZmZlci5hZHZhbmNlQXQoZnJvbSArIGkpLndpZHRoKCk7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9Gb250Q2Fpcm9IYXJmYnV6ek5HLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ZvbnRDYWlyb0hhcmZi
dXp6TkcuY3BwCmluZGV4IGU4NDc4MTBhMzlhYjhmMmZmNWZmZWZiZWYzMmI1MTJkYjBmZTliZmYu
LmNiMDhjY2FkMzVmOTg4YzExZTRkMWE3OGU0YjhiMWE2YTQ4ZDI5MjIgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ZvbnRDYWlyb0hhcmZidXp6Tkcu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ZvbnRDYWly
b0hhcmZidXp6TkcuY3BwCkBAIC0zOCw3ICszOCw3IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsK
IAotZmxvYXQgRm9udDo6ZHJhd0NvbXBsZXhUZXh0KEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwg
Y29uc3QgVGV4dFJ1biYgcnVuLCBjb25zdCBGbG9hdFBvaW50JiBwb2ludCwgaW50LCBpbnQpIGNv
bnN0CitmbG9hdCBGb250OjpkcmF3Q29tcGxleFRleHQoR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0
LCBjb25zdCBUZXh0UnVuJiBydW4sIGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50LCB1bnNpZ25lZCwg
dW5zaWduZWQpIGNvbnN0CiB7CiAgICAgR2x5cGhCdWZmZXIgZ2x5cGhCdWZmZXI7CiAgICAgSGFy
ZkJ1enpTaGFwZXIgc2hhcGVyKHRoaXMsIHJ1bik7CkBAIC01Miw3ICs1Miw3IEBAIGZsb2F0IEZv
bnQ6OmRyYXdDb21wbGV4VGV4dChHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IFRleHRS
dW4mIHJ1biwgY29uc3QKICAgICByZXR1cm4gMDsKIH0KIAotdm9pZCBGb250OjpkcmF3RW1waGFz
aXNNYXJrc0ZvckNvbXBsZXhUZXh0KEdyYXBoaWNzQ29udGV4dCogLyogY29udGV4dCAqLywgY29u
c3QgVGV4dFJ1biYgLyogcnVuICovLCBjb25zdCBBdG9taWNTdHJpbmcmIC8qIG1hcmsgKi8sIGNv
bnN0IEZsb2F0UG9pbnQmIC8qIHBvaW50ICovLCBpbnQgLyogZnJvbSAqLywgaW50IC8qIHRvICov
KSBjb25zdAordm9pZCBGb250OjpkcmF3RW1waGFzaXNNYXJrc0ZvckNvbXBsZXhUZXh0KEdyYXBo
aWNzQ29udGV4dCogLyogY29udGV4dCAqLywgY29uc3QgVGV4dFJ1biYgLyogcnVuICovLCBjb25z
dCBBdG9taWNTdHJpbmcmIC8qIG1hcmsgKi8sIGNvbnN0IEZsb2F0UG9pbnQmIC8qIHBvaW50ICov
LCB1bnNpZ25lZCAvKiBmcm9tICovLCB1bnNpZ25lZCAvKiB0byAqLykgY29uc3QKIHsKICAgICBu
b3RJbXBsZW1lbnRlZCgpOwogfQpAQCAtODUsNyArODUsNyBAQCBpbnQgRm9udDo6b2Zmc2V0Rm9y
UG9zaXRpb25Gb3JDb21wbGV4VGV4dChjb25zdCBUZXh0UnVuJiBydW4sIGZsb2F0IHgsIGJvb2wp
IGNvbgogICAgIHJldHVybiAwOwogfQogCi12b2lkIEZvbnQ6OmFkanVzdFNlbGVjdGlvblJlY3RG
b3JDb21wbGV4VGV4dChjb25zdCBUZXh0UnVuJiBydW4sIExheW91dFJlY3QmIHNlbGVjdGlvblJl
Y3QsIGludCBmcm9tLCBpbnQgdG8pIGNvbnN0Cit2b2lkIEZvbnQ6OmFkanVzdFNlbGVjdGlvblJl
Y3RGb3JDb21wbGV4VGV4dChjb25zdCBUZXh0UnVuJiBydW4sIExheW91dFJlY3QmIHNlbGVjdGlv
blJlY3QsIHVuc2lnbmVkIGZyb20sIHVuc2lnbmVkIHRvKSBjb25zdAogewogICAgIEhhcmZCdXp6
U2hhcGVyIHNoYXBlcih0aGlzLCBydW4pOwogICAgIGlmIChzaGFwZXIuc2hhcGUoKSkgewpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvaGFyZmJ1enovSGFyZkJ1
enpTaGFwZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvaGFyZmJ1enov
SGFyZkJ1enpTaGFwZXIuY3BwCmluZGV4IDliOGU0ZTBhOWQyMTNiNTI1NmQ3N2MwYjNmZGI4NTJj
YzM2YTU2ZTIuLjQyMzRkNmExNGUyYjhkN2UyZTAxZDNiZDY4ZmExMjc0NmFlMDBkM2QgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2hhcmZidXp6L0hhcmZCdXp6
U2hhcGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9oYXJmYnV6
ei9IYXJmQnV6elNoYXBlci5jcHAKQEAgLTI1Niw3ICsyNTYsNyBAQCB2b2lkIEhhcmZCdXp6U2hh
cGVyOjpzZXROb3JtYWxpemVkQnVmZmVyKE5vcm1hbGl6ZU1vZGUgbm9ybWFsaXplTW9kZSkKICAg
ICB9IGVsc2UKICAgICAgICAgcnVuQ2hhcmFjdGVycyA9IG1fcnVuLmNoYXJhY3RlcnMxNigpOwog
Ci0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBtX3J1bi5sZW5ndGgoKTsgKytpKSB7CisgICAgZm9y
ICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fcnVuLmxlbmd0aCgpOyArK2kpIHsKICAgICAgICAgVUNo
YXIgY2ggPSBydW5DaGFyYWN0ZXJzW2ldOwogICAgICAgICBpZiAoOjp1YmxvY2tfZ2V0Q29kZShj
aCkgPT0gVUJMT0NLX0NPTUJJTklOR19ESUFDUklUSUNBTF9NQVJLUykgewogICAgICAgICAgICAg
aWN1OjpOb3JtYWxpemVyOjpub3JtYWxpemUoaWN1OjpVbmljb2RlU3RyaW5nKHJ1bkNoYXJhY3Rl
cnMsCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMvRm9u
dENvbXBsZXhUZXh0TWFjLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL21h
Yy9Gb250Q29tcGxleFRleHRNYWMuY3BwCmluZGV4IDgzMjViMmY1ZGU3YTQ0ZGU3YjZhODYwMWE2
N2QxMTJkNWUwMThmNTcuLmZiZTEyNWE3OWVkNTg3NzQ4Yzg5MzU2ZDRiMWEwZjI4YTY2ZTc5YTYg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL21hYy9Gb250Q29t
cGxleFRleHRNYWMuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL21h
Yy9Gb250Q29tcGxleFRleHRNYWMuY3BwCkBAIC0zNyw3ICszNyw3IEBACiAKIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKIAotdm9pZCBGb250OjphZGp1c3RTZWxlY3Rpb25SZWN0Rm9yQ29tcGxleFRleHQo
Y29uc3QgVGV4dFJ1biYgcnVuLCBMYXlvdXRSZWN0JiBzZWxlY3Rpb25SZWN0LCBpbnQgZnJvbSwg
aW50IHRvKSBjb25zdAordm9pZCBGb250OjphZGp1c3RTZWxlY3Rpb25SZWN0Rm9yQ29tcGxleFRl
eHQoY29uc3QgVGV4dFJ1biYgcnVuLCBMYXlvdXRSZWN0JiBzZWxlY3Rpb25SZWN0LCB1bnNpZ25l
ZCBmcm9tLCB1bnNpZ25lZCB0bykgY29uc3QKIHsKICAgICBDb21wbGV4VGV4dENvbnRyb2xsZXIg
Y29udHJvbGxlcih0aGlzLCBydW4pOwogICAgIGNvbnRyb2xsZXIuYWR2YW5jZShmcm9tKTsKQEAg
LTUyLDcgKzUyLDcgQEAgdm9pZCBGb250OjphZGp1c3RTZWxlY3Rpb25SZWN0Rm9yQ29tcGxleFRl
eHQoY29uc3QgVGV4dFJ1biYgcnVuLCBMYXlvdXRSZWN0JiBzZWwKICAgICBzZWxlY3Rpb25SZWN0
LnNldFdpZHRoKGFmdGVyV2lkdGggLSBiZWZvcmVXaWR0aCk7CiB9CiAKLWZsb2F0IEZvbnQ6Omdl
dEdseXBoc0FuZEFkdmFuY2VzRm9yQ29tcGxleFRleHQoY29uc3QgVGV4dFJ1biYgcnVuLCBpbnQg
ZnJvbSwgaW50IHRvLCBHbHlwaEJ1ZmZlciYgZ2x5cGhCdWZmZXIsIEZvclRleHRFbXBoYXNpc09y
Tm90IGZvclRleHRFbXBoYXNpcykgY29uc3QKK2Zsb2F0IEZvbnQ6OmdldEdseXBoc0FuZEFkdmFu
Y2VzRm9yQ29tcGxleFRleHQoY29uc3QgVGV4dFJ1biYgcnVuLCB1bnNpZ25lZCBmcm9tLCB1bnNp
Z25lZCB0bywgR2x5cGhCdWZmZXImIGdseXBoQnVmZmVyLCBGb3JUZXh0RW1waGFzaXNPck5vdCBm
b3JUZXh0RW1waGFzaXMpIGNvbnN0CiB7CiAgICAgZmxvYXQgaW5pdGlhbEFkdmFuY2U7CiAKQEAg
LTc1LDcgKzc1LDcgQEAgZmxvYXQgRm9udDo6Z2V0R2x5cGhzQW5kQWR2YW5jZXNGb3JDb21wbGV4
VGV4dChjb25zdCBUZXh0UnVuJiBydW4sIGludCBmcm9tLCBpbnQKICAgICByZXR1cm4gaW5pdGlh
bEFkdmFuY2U7CiB9CiAKLWZsb2F0IEZvbnQ6OmRyYXdDb21wbGV4VGV4dChHcmFwaGljc0NvbnRl
eHQqIGNvbnRleHQsIGNvbnN0IFRleHRSdW4mIHJ1biwgY29uc3QgRmxvYXRQb2ludCYgcG9pbnQs
IGludCBmcm9tLCBpbnQgdG8pIGNvbnN0CitmbG9hdCBGb250OjpkcmF3Q29tcGxleFRleHQoR3Jh
cGhpY3NDb250ZXh0KiBjb250ZXh0LCBjb25zdCBUZXh0UnVuJiBydW4sIGNvbnN0IEZsb2F0UG9p
bnQmIHBvaW50LCB1bnNpZ25lZCBmcm9tLCB1bnNpZ25lZCB0bykgY29uc3QKIHsKICAgICAvLyBU
aGlzIGdseXBoIGJ1ZmZlciBob2xkcyBvdXIgZ2x5cGhzICsgYWR2YW5jZXMgKyBmb250IGRhdGEg
Zm9yIGVhY2ggZ2x5cGguCiAgICAgR2x5cGhCdWZmZXIgZ2x5cGhCdWZmZXI7CkBAIC05Myw3ICs5
Myw3IEBAIGZsb2F0IEZvbnQ6OmRyYXdDb21wbGV4VGV4dChHcmFwaGljc0NvbnRleHQqIGNvbnRl
eHQsIGNvbnN0IFRleHRSdW4mIHJ1biwgY29uc3QKICAgICByZXR1cm4gc3RhcnRQb2ludC54KCkg
LSBzdGFydFg7CiB9CiAKLXZvaWQgRm9udDo6ZHJhd0VtcGhhc2lzTWFya3NGb3JDb21wbGV4VGV4
dChHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IFRleHRSdW4mIHJ1biwgY29uc3QgQXRv
bWljU3RyaW5nJiBtYXJrLCBjb25zdCBGbG9hdFBvaW50JiBwb2ludCwgaW50IGZyb20sIGludCB0
bykgY29uc3QKK3ZvaWQgRm9udDo6ZHJhd0VtcGhhc2lzTWFya3NGb3JDb21wbGV4VGV4dChHcmFw
aGljc0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IFRleHRSdW4mIHJ1biwgY29uc3QgQXRvbWljU3Ry
aW5nJiBtYXJrLCBjb25zdCBGbG9hdFBvaW50JiBwb2ludCwgdW5zaWduZWQgZnJvbSwgdW5zaWdu
ZWQgdG8pIGNvbnN0CiB7CiAgICAgR2x5cGhCdWZmZXIgZ2x5cGhCdWZmZXI7CiAgICAgZmxvYXQg
aW5pdGlhbEFkdmFuY2UgPSBnZXRHbHlwaHNBbmRBZHZhbmNlc0ZvckNvbXBsZXhUZXh0KHJ1biwg
ZnJvbSwgdG8sIGdseXBoQnVmZmVyLCBGb3JUZXh0RW1waGFzaXMpOwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0ZvbnRNYWMubW0gYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMvRm9udE1hYy5tbQppbmRleCBjNzcxZWU5ZTliNWM5
MGE0YTNlOWUwYjc4ZjkyYmU3MGUyOGU3MzBmLi4wNTllMWZlY2VjNDc2ZjI5MzQ4NzZiNDg0ZmVi
YWQ5ZDI3YzZiMjdiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9tYWMvRm9udE1hYy5tbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9t
YWMvRm9udE1hYy5tbQpAQCAtMTg0LDcgKzE4NCw3IEBAIHN0YXRpYyB2b2lkIHNob3dHbHlwaHNX
aXRoQWR2YW5jZXMoY29uc3QgRmxvYXRQb2ludCYgcG9pbnQsIGNvbnN0IFNpbXBsZUZvbnREYXRh
CiAgICAgfQogfQogCi12b2lkIEZvbnQ6OmRyYXdHbHlwaHMoR3JhcGhpY3NDb250ZXh0KiBjb250
ZXh0LCBjb25zdCBTaW1wbGVGb250RGF0YSogZm9udCwgY29uc3QgR2x5cGhCdWZmZXImIGdseXBo
QnVmZmVyLCBpbnQgZnJvbSwgaW50IG51bUdseXBocywgY29uc3QgRmxvYXRQb2ludCYgYW5jaG9y
UG9pbnQpIGNvbnN0Cit2b2lkIEZvbnQ6OmRyYXdHbHlwaHMoR3JhcGhpY3NDb250ZXh0KiBjb250
ZXh0LCBjb25zdCBTaW1wbGVGb250RGF0YSogZm9udCwgY29uc3QgR2x5cGhCdWZmZXImIGdseXBo
QnVmZmVyLCB1bnNpZ25lZCBmcm9tLCB1bnNpZ25lZCBudW1HbHlwaHMsIGNvbnN0IEZsb2F0UG9p
bnQmIGFuY2hvclBvaW50KSBjb25zdAogewogICAgIGNvbnN0IEZvbnRQbGF0Zm9ybURhdGEmIHBs
YXRmb3JtRGF0YSA9IGZvbnQtPnBsYXRmb3JtRGF0YSgpOwogICAgIGlmICghcGxhdGZvcm1EYXRh
LnNpemUoKSkKQEAgLTQ2OCw3ICs0NjgsNyBAQCBwcml2YXRlOgogICAgIHZpcnR1YWwgdm9pZCBh
ZHZhbmNlKCkgb3ZlcnJpZGU7CiAgICAgdm9pZCBtb3ZlVG9OZXh0VmFsaWRHbHlwaCgpOwogCi0g
ICAgaW50IG1faW5kZXg7CisgICAgdW5zaWduZWQgbV9pbmRleDsKICAgICBjb25zdCBUZXh0UnVu
JiBtX3RleHRSdW47CiAgICAgY29uc3QgR2x5cGhCdWZmZXImIG1fZ2x5cGhCdWZmZXI7CiAgICAg
Y29uc3QgU2ltcGxlRm9udERhdGEqIG1fZm9udERhdGE7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vRm9udENHV2luLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9Gb250Q0dXaW4uY3BwCmluZGV4IGJhMTNkZDBkMTVkYzI3
Mjc2ZTUyNTA0YmU2MDkxZjMzZGExNGU3Y2QuLjc2Yjg2ODU1NWQ1ZmQ5OWI0ZTMyMGIxYjE0YjYz
ZDE5N2RiOGU2NGQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L3dpbi9Gb250Q0dXaW4uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L3dpbi9Gb250Q0dXaW4uY3BwCkBAIC0xMjgsNyArMTI4LDcgQEAgc3RhdGljIENHUGF0aFJlZiBj
cmVhdGVQYXRoRm9yR2x5cGgoSERDIGhkYywgR2x5cGggZ2x5cGgpCiB9CiAKIHZvaWQgRm9udDo6
ZHJhd0dseXBocyhHcmFwaGljc0NvbnRleHQqIGdyYXBoaWNzQ29udGV4dCwgY29uc3QgU2ltcGxl
Rm9udERhdGEqIGZvbnQsIGNvbnN0IEdseXBoQnVmZmVyJiBnbHlwaEJ1ZmZlciwgCi0gICAgICAg
ICAgICAgICAgICAgICAgaW50IGZyb20sIGludCBudW1HbHlwaHMsIGNvbnN0IEZsb2F0UG9pbnQm
IHBvaW50KSBjb25zdAorICAgIHVuc2lnbmVkIGZyb20sIHVuc2lnbmVkIG51bUdseXBocywgY29u
c3QgRmxvYXRQb2ludCYgcG9pbnQpIGNvbnN0CiB7CiAgICAgQ0dDb250ZXh0UmVmIGNnQ29udGV4
dCA9IGdyYXBoaWNzQ29udGV4dC0+cGxhdGZvcm1Db250ZXh0KCk7CiAgICAgYm9vbCBzaG91bGRV
c2VGb250U21vb3RoaW5nID0gV2ViQ29yZVNob3VsZFVzZUZvbnRTbW9vdGhpbmcoKTsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9Gb250V2luLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9Gb250V2luLmNwcAppbmRleCBj
NjZiMmM0MGY2Nzc2NjI5NTBmNTIyZjhmY2QzZTM5NWQ2NTI5NDcyLi4wNmM2YzAwMmMwYWI5Y2My
YzM4ODA4MTk1NjE0ZWMyNzdkMTkzNmMwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy93aW4vRm9udFdpbi5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3Mvd2luL0ZvbnRXaW4uY3BwCkBAIC01MSw3ICs1MSw3IEBAIGJvb2wgRm9udDo6
Y2FuRXhwYW5kQXJvdW5kSWRlb2dyYXBoc0luQ29tcGxleFRleHQoKQogICAgIHJldHVybiBmYWxz
ZTsKIH0KIAotdm9pZCBGb250OjphZGp1c3RTZWxlY3Rpb25SZWN0Rm9yQ29tcGxleFRleHQoY29u
c3QgVGV4dFJ1biYgcnVuLCBMYXlvdXRSZWN0JiBzZWxlY3Rpb25SZWN0LCBpbnQgZnJvbSwgaW50
IHRvKSBjb25zdAordm9pZCBGb250OjphZGp1c3RTZWxlY3Rpb25SZWN0Rm9yQ29tcGxleFRleHQo
Y29uc3QgVGV4dFJ1biYgcnVuLCBMYXlvdXRSZWN0JiBzZWxlY3Rpb25SZWN0LCB1bnNpZ25lZCBm
cm9tLCB1bnNpZ25lZCB0bykgY29uc3QKIHsKICAgICBVbmlzY3JpYmVDb250cm9sbGVyIGl0KHRo
aXMsIHJ1bik7CiAgICAgaXQuYWR2YW5jZShmcm9tKTsKQEAgLTY3LDcgKzY3LDcgQEAgdm9pZCBG
b250OjphZGp1c3RTZWxlY3Rpb25SZWN0Rm9yQ29tcGxleFRleHQoY29uc3QgVGV4dFJ1biYgcnVu
LCBMYXlvdXRSZWN0JiBzZWwKICAgICBzZWxlY3Rpb25SZWN0LnNldFdpZHRoKGFmdGVyV2lkdGgg
LSBiZWZvcmVXaWR0aCk7CiB9CiAKLWZsb2F0IEZvbnQ6OmdldEdseXBoc0FuZEFkdmFuY2VzRm9y
Q29tcGxleFRleHQoY29uc3QgVGV4dFJ1biYgcnVuLCBpbnQgZnJvbSwgaW50IHRvLCBHbHlwaEJ1
ZmZlciYgZ2x5cGhCdWZmZXIsIEZvclRleHRFbXBoYXNpc09yTm90IGZvclRleHRFbXBoYXNpcykg
Y29uc3QKK2Zsb2F0IEZvbnQ6OmdldEdseXBoc0FuZEFkdmFuY2VzRm9yQ29tcGxleFRleHQoY29u
c3QgVGV4dFJ1biYgcnVuLCB1bnNpZ25lZCBmcm9tLCB1bnNpZ25lZCB0bywgR2x5cGhCdWZmZXIm
IGdseXBoQnVmZmVyLCBGb3JUZXh0RW1waGFzaXNPck5vdCBmb3JUZXh0RW1waGFzaXMpIGNvbnN0
CiB7CiAgICAgaWYgKGZvclRleHRFbXBoYXNpcykgewogICAgICAgICAvLyBGSVhNRTogQWRkIGZv
clRleHRFbXBoYXNpcyBwYXJlbWV0ZXIgdG8gVW5pc2NyaWJlQ29udHJvbGxlciBhbmQgdXNlIGl0
LgpAQCAtOTIsNyArOTIsNyBAQCBmbG9hdCBGb250OjpnZXRHbHlwaHNBbmRBZHZhbmNlc0ZvckNv
bXBsZXhUZXh0KGNvbnN0IFRleHRSdW4mIHJ1biwgaW50IGZyb20sIGludAogICAgIHJldHVybiBi
ZWZvcmVXaWR0aDsKIH0KIAotZmxvYXQgRm9udDo6ZHJhd0NvbXBsZXhUZXh0KEdyYXBoaWNzQ29u
dGV4dCogY29udGV4dCwgY29uc3QgVGV4dFJ1biYgcnVuLCBjb25zdCBGbG9hdFBvaW50JiBwb2lu
dCwgaW50IGZyb20sIGludCB0bykgY29uc3QKK2Zsb2F0IEZvbnQ6OmRyYXdDb21wbGV4VGV4dChH
cmFwaGljc0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IFRleHRSdW4mIHJ1biwgY29uc3QgRmxvYXRQ
b2ludCYgcG9pbnQsIHVuc2lnbmVkIGZyb20sIHVuc2lnbmVkIHRvKSBjb25zdAogewogICAgIC8v
IFRoaXMgZ2x5cGggYnVmZmVyIGhvbGRzIG91ciBnbHlwaHMgKyBhZHZhbmNlcyArIGZvbnQgZGF0
YSBmb3IgZWFjaCBnbHlwaC4KICAgICBHbHlwaEJ1ZmZlciBnbHlwaEJ1ZmZlcjsKQEAgLTEwOSw3
ICsxMDksNyBAQCBmbG9hdCBGb250OjpkcmF3Q29tcGxleFRleHQoR3JhcGhpY3NDb250ZXh0KiBj
b250ZXh0LCBjb25zdCBUZXh0UnVuJiBydW4sIGNvbnN0CiAgICAgcmV0dXJuIHN0YXJ0UG9pbnQu
eCgpIC0gc3RhcnRYOwogfQogCi12b2lkIEZvbnQ6OmRyYXdFbXBoYXNpc01hcmtzRm9yQ29tcGxl
eFRleHQoR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBjb25zdCBUZXh0UnVuJiBydW4sIGNvbnN0
IEF0b21pY1N0cmluZyYgbWFyaywgY29uc3QgRmxvYXRQb2ludCYgcG9pbnQsIGludCBmcm9tLCBp
bnQgdG8pIGNvbnN0Cit2b2lkIEZvbnQ6OmRyYXdFbXBoYXNpc01hcmtzRm9yQ29tcGxleFRleHQo
R3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBjb25zdCBUZXh0UnVuJiBydW4sIGNvbnN0IEF0b21p
Y1N0cmluZyYgbWFyaywgY29uc3QgRmxvYXRQb2ludCYgcG9pbnQsIHVuc2lnbmVkIGZyb20sIHVu
c2lnbmVkIHRvKSBjb25zdAogewogICAgIEdseXBoQnVmZmVyIGdseXBoQnVmZmVyOwogICAgIGZs
b2F0IGluaXRpYWxBZHZhbmNlID0gZ2V0R2x5cGhzQW5kQWR2YW5jZXNGb3JDb21wbGV4VGV4dChy
dW4sIGZyb20sIHRvLCBnbHlwaEJ1ZmZlciwgRm9yVGV4dEVtcGhhc2lzKTsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbmNlL0ZvbnRXaW5DRS5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW5jZS9Gb250V2luQ0UuY3BwCmluZGV4
IGVkNzI2MjdjM2U5ODY2YWI5MTliMGRiYjQ5NjEzMTFjZGI1ZDc2OGUuLmUwYjNmNjMwZWJkYjkz
ZDc2NmMxNzMxYTA2OTk1NzVkYmY0NGRlZDEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL3dpbmNlL0ZvbnRXaW5DRS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3Mvd2luY2UvRm9udFdpbkNFLmNwcApAQCAtNjIsNyArNjIsNyBAQCBw
dWJsaWM6CiBTY3JlZW5EY1JlbGVhc2VyIHJlbGVhc2VTY3JlZW5EYzsKIAogdm9pZCBGb250Ojpk
cmF3R2x5cGhzKEdyYXBoaWNzQ29udGV4dCogZ3JhcGhpY3NDb250ZXh0LCBjb25zdCBTaW1wbGVG
b250RGF0YSogZm9udERhdGEsIGNvbnN0IEdseXBoQnVmZmVyJiBnbHlwaEJ1ZmZlciwKLSAgICAg
ICAgICAgICAgICAgICAgICBpbnQgZnJvbSwgaW50IG51bUdseXBocywgY29uc3QgRmxvYXRQb2lu
dCYgcG9pbnQpIGNvbnN0CisgICAgdW5zaWduZWQgZnJvbSwgdW5zaWduZWQgbnVtR2x5cGhzLCBj
b25zdCBGbG9hdFBvaW50JiBwb2ludCkgY29uc3QKIHsKICAgICBncmFwaGljc0NvbnRleHQtPmRy
YXdUZXh0KGZvbnREYXRhLCBnbHlwaEJ1ZmZlciwgZnJvbSwgbnVtR2x5cGhzLCBwb2ludCk7CiB9
CkBAIC0yMDYsNyArMjA2LDcgQEAgc3RhdGljIGludCBnZW5lcmF0ZUNvbXBvbmVudHMoVGV4dFJ1
bkNvbXBvbmVudHMqIGNvbXBvbmVudHMsIGNvbnN0IEZvbnQgJmZvbnQsIGMKICAgICByZXR1cm4g
b2Zmc2V0OwogfQogCi1mbG9hdCBGb250OjpkcmF3Q29tcGxleFRleHQoR3JhcGhpY3NDb250ZXh0
KiBjb250ZXh0LCBjb25zdCBUZXh0UnVuJiBydW4sIGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50LCBp
bnQgZnJvbSwgaW50IHRvKSBjb25zdAorZmxvYXQgRm9udDo6ZHJhd0NvbXBsZXhUZXh0KEdyYXBo
aWNzQ29udGV4dCogY29udGV4dCwgY29uc3QgVGV4dFJ1biYgcnVuLCBjb25zdCBGbG9hdFBvaW50
JiBwb2ludCwgdW5zaWduZWQgZnJvbSwgdW5zaWduZWQgdG8pIGNvbnN0CiB7CiAgICAgaWYgKHRv
IDwgMCkKICAgICAgICAgdG8gPSBydW4ubGVuZ3RoKCk7CkBAIC0yMzcsNyArMjM3LDcgQEAgZmxv
YXQgRm9udDo6ZHJhd0NvbXBsZXhUZXh0KEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgY29uc3Qg
VGV4dFJ1biYgcnVuLCBjb25zdAogICAgIHJldHVybiB3aWR0aE9mRHJhd25UZXh0OwogfQogCi12
b2lkIEZvbnQ6OmRyYXdFbXBoYXNpc01hcmtzRm9yQ29tcGxleFRleHQoR3JhcGhpY3NDb250ZXh0
KiAvKiBjb250ZXh0ICovLCBjb25zdCBUZXh0UnVuJiAvKiBydW4gKi8sIGNvbnN0IEF0b21pY1N0
cmluZyYgLyogbWFyayAqLywgY29uc3QgRmxvYXRQb2ludCYgLyogcG9pbnQgKi8sIGludCAvKiBm
cm9tICovLCBpbnQgLyogdG8gKi8pIGNvbnN0Cit2b2lkIEZvbnQ6OmRyYXdFbXBoYXNpc01hcmtz
Rm9yQ29tcGxleFRleHQoR3JhcGhpY3NDb250ZXh0KiAvKiBjb250ZXh0ICovLCBjb25zdCBUZXh0
UnVuJiAvKiBydW4gKi8sIGNvbnN0IEF0b21pY1N0cmluZyYgLyogbWFyayAqLywgY29uc3QgRmxv
YXRQb2ludCYgLyogcG9pbnQgKi8sIHVuc2lnbmVkIC8qIGZyb20gKi8sIHVuc2lnbmVkIC8qIHRv
ICovKSBjb25zdAogewogICAgIG5vdEltcGxlbWVudGVkKCk7CiB9CkBAIC0zMjEsNyArMzIxLDcg
QEAgc3RhdGljIGZsb2F0IGN1cnNvclRvWChjb25zdCBGb250KiBmb250LCBjb25zdCBUZXh0UnVu
Q29tcG9uZW50cyYgY29tcG9uZW50cywgaW4KIH0KIAogRmxvYXRSZWN0IEZvbnQ6OnNlbGVjdGlv
blJlY3RGb3JDb21wbGV4VGV4dChjb25zdCBUZXh0UnVuJiBydW4sIGNvbnN0IEZsb2F0UG9pbnQm
IHB0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBoLCBpbnQgZnJv
bSwgaW50IHRvKSBjb25zdAorICAgIGludCBoLCB1bnNpZ25lZCBmcm9tLCB1bnNpZ25lZCB0bykg
Y29uc3QKIHsKICAgICBUZXh0UnVuQ29tcG9uZW50cyBjb21wb25lbnRzOwogICAgIGludCB3ID0g
Z2VuZXJhdGVDb21wb25lbnRzKCZjb21wb25lbnRzLCAqdGhpcywgcnVuKTsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9JbmxpbmVUZXh0Qm94LmNwcCBiL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9JbmxpbmVUZXh0Qm94LmNwcAppbmRleCBhYTQ0ZGNlN2M0YjAzMmMwNDVk
ZGNmN2MyYWUxZWNlMWZjNDM1NGQxLi5jM2M5NmEzNDljZmM5ODc4MTJjOTRkMTYxZjNlZWE2MmVi
MTg1ODUxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvSW5saW5lVGV4dEJv
eC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0lubGluZVRleHRCb3guY3BwCkBA
IC0xOTYsMjEgKzE5NiwyNiBAQCBMYXlvdXRVbml0IElubGluZVRleHRCb3g6OnNlbGVjdGlvbkhl
aWdodCgpIGNvbnN0CiAgICAgcmV0dXJuIHJvb3QoKS5zZWxlY3Rpb25IZWlnaHQoKTsKIH0KIAot
Ym9vbCBJbmxpbmVUZXh0Qm94Ojppc1NlbGVjdGVkKGludCBzdGFydFBvcywgaW50IGVuZFBvcykg
Y29uc3QKK2Jvb2wgSW5saW5lVGV4dEJveDo6aXNTZWxlY3RlZCh1bnNpZ25lZCBzdGFydFBvcywg
dW5zaWduZWQgZW5kUG9zKSBjb25zdAogewotICAgIGludCBzUG9zID0gc3RkOjptYXgoc3RhcnRQ
b3MgLSBtX3N0YXJ0LCAwKTsKLSAgICBpbnQgZVBvcyA9IHN0ZDo6bWluKGVuZFBvcyAtIG1fc3Rh
cnQsIHN0YXRpY19jYXN0PGludD4obV9sZW4pKTsKLSAgICByZXR1cm4gKHNQb3MgPCBlUG9zKTsK
KyAgICB1bnNpZ25lZCBzUG9zID0gc3RhcnRQb3MgPiBtX3N0YXJ0ID8gc3RhcnRQb3MgLSBtX3N0
YXJ0IDogMDsKKyAgICBpZiAoZW5kUG9zIDw9IG1fc3RhcnQpCisgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICB1bnNpZ25lZCBlUG9zID0gc3RkOjptaW4oZW5kUG9zIC0gbV9zdGFydCwgc3RhdGlj
X2Nhc3Q8dW5zaWduZWQ+KG1fbGVuKSk7CisgICAgcmV0dXJuIHNQb3MgPCBlUG9zOwogfQogCiBS
ZW5kZXJPYmplY3Q6OlNlbGVjdGlvblN0YXRlIElubGluZVRleHRCb3g6OnNlbGVjdGlvblN0YXRl
KCkKIHsKICAgICBSZW5kZXJPYmplY3Q6OlNlbGVjdGlvblN0YXRlIHN0YXRlID0gcmVuZGVyZXIo
KS5zZWxlY3Rpb25TdGF0ZSgpOwogICAgIGlmIChzdGF0ZSA9PSBSZW5kZXJPYmplY3Q6OlNlbGVj
dGlvblN0YXJ0IHx8IHN0YXRlID09IFJlbmRlck9iamVjdDo6U2VsZWN0aW9uRW5kIHx8IHN0YXRl
ID09IFJlbmRlck9iamVjdDo6U2VsZWN0aW9uQm90aCkgewotICAgICAgICBpbnQgc3RhcnRQb3Ms
IGVuZFBvczsKLSAgICAgICAgcmVuZGVyZXIoKS5zZWxlY3Rpb25TdGFydEVuZChzdGFydFBvcywg
ZW5kUG9zKTsKKyAgICAgICAgaW50IGluaXRpYWxTdGFydFBvcywgaW5pdGlhbEVuZFBvczsKKyAg
ICAgICAgcmVuZGVyZXIoKS5zZWxlY3Rpb25TdGFydEVuZChpbml0aWFsU3RhcnRQb3MsIGluaXRp
YWxFbmRQb3MpOworICAgICAgICBBU1NFUlQoaW5pdGlhbFN0YXJ0UG9zID49IDAgJiYgaW5pdGlh
bEVuZFBvcyA+PSAwKTsKKyAgICAgICAgdW5zaWduZWQgc3RhcnRQb3MgPSBpbml0aWFsU3RhcnRQ
b3M7CisgICAgICAgIHVuc2lnbmVkIGVuZFBvcyA9IGluaXRpYWxFbmRQb3M7CiAgICAgICAgIC8v
IFRoZSBwb3NpdGlvbiBhZnRlciBhIGhhcmQgbGluZSBicmVhayBpcyBjb25zaWRlcmVkIHRvIGJl
IHBhc3QgaXRzIGVuZC4KLSAgICAgICAgaW50IGxhc3RTZWxlY3RhYmxlID0gc3RhcnQoKSArIGxl
bigpIC0gKGlzTGluZUJyZWFrKCkgPyAxIDogMCk7CisgICAgICAgIHVuc2lnbmVkIGxhc3RTZWxl
Y3RhYmxlID0gc3RhcnQoKSArIGxlbigpIC0gKGlzTGluZUJyZWFrKCkgPyAxIDogMCk7CiAKICAg
ICAgICAgYm9vbCBzdGFydCA9IChzdGF0ZSAhPSBSZW5kZXJPYmplY3Q6OlNlbGVjdGlvbkVuZCAm
JiBzdGFydFBvcyA+PSBtX3N0YXJ0ICYmIHN0YXJ0UG9zIDwgbV9zdGFydCArIG1fbGVuKTsKICAg
ICAgICAgYm9vbCBlbmQgPSAoc3RhdGUgIT0gUmVuZGVyT2JqZWN0OjpTZWxlY3Rpb25TdGFydCAm
JiBlbmRQb3MgPiBtX3N0YXJ0ICYmIGVuZFBvcyA8PSBsYXN0U2VsZWN0YWJsZSk7CkBAIC0yMzEs
NyArMjM2LDcgQEAgUmVuZGVyT2JqZWN0OjpTZWxlY3Rpb25TdGF0ZSBJbmxpbmVUZXh0Qm94Ojpz
ZWxlY3Rpb25TdGF0ZSgpCiAgICAgaWYgKG1fdHJ1bmNhdGlvbiAhPSBjTm9UcnVuY2F0aW9uICYm
IHJvb3QoKS5lbGxpcHNpc0JveCgpKSB7CiAgICAgICAgIEVsbGlwc2lzQm94KiBlbGxpcHNpcyA9
IHJvb3QoKS5lbGxpcHNpc0JveCgpOwogICAgICAgICBpZiAoc3RhdGUgIT0gUmVuZGVyT2JqZWN0
OjpTZWxlY3Rpb25Ob25lKSB7Ci0gICAgICAgICAgICBpbnQgc3RhcnQsIGVuZDsKKyAgICAgICAg
ICAgIHVuc2lnbmVkIHN0YXJ0LCBlbmQ7CiAgICAgICAgICAgICBzZWxlY3Rpb25TdGFydEVuZChz
dGFydCwgZW5kKTsKICAgICAgICAgICAgIC8vIFRoZSBlbGxpcHNpcyBzaG91bGQgYmUgY29uc2lk
ZXJlZCB0byBiZSBzZWxlY3RlZCBpZiB0aGUgZW5kIG9mCiAgICAgICAgICAgICAvLyB0aGUgc2Vs
ZWN0aW9uIGlzIHBhc3QgdGhlIGJlZ2lubmluZyBvZiB0aGUgdHJ1bmNhdGlvbiBhbmQgdGhlCkBA
IC0yNDYsNyArMjUxLDcgQEAgUmVuZGVyT2JqZWN0OjpTZWxlY3Rpb25TdGF0ZSBJbmxpbmVUZXh0
Qm94OjpzZWxlY3Rpb25TdGF0ZSgpCiAgICAgcmV0dXJuIHN0YXRlOwogfQogCi1zdGF0aWMgdm9p
ZCBhZGp1c3RDaGFyYWN0ZXJzQW5kTGVuZ3RoRm9ySHlwaGVuKEJ1ZmZlckZvckFwcGVuZGluZ0h5
cGhlbiYgY2hhcmFjdGVyc1dpdGhIeXBoZW4sIGNvbnN0IFJlbmRlclN0eWxlJiBzdHlsZSwgU3Ry
aW5nJiBzdHJpbmcsIGludCYgbGVuZ3RoKQorc3RhdGljIHZvaWQgYWRqdXN0Q2hhcmFjdGVyc0Fu
ZExlbmd0aEZvckh5cGhlbihCdWZmZXJGb3JBcHBlbmRpbmdIeXBoZW4mIGNoYXJhY3RlcnNXaXRo
SHlwaGVuLCBjb25zdCBSZW5kZXJTdHlsZSYgc3R5bGUsIFN0cmluZyYgc3RyaW5nLCB1bnNpZ25l
ZCYgbGVuZ3RoKQogewogICAgIGNvbnN0IEF0b21pY1N0cmluZyYgaHlwaGVuU3RyaW5nID0gc3R5
bGUuaHlwaGVuU3RyaW5nKCk7CiAgICAgY2hhcmFjdGVyc1dpdGhIeXBoZW4ucmVzZXJ2ZUNhcGFj
aXR5KGxlbmd0aCArIGh5cGhlblN0cmluZy5sZW5ndGgoKSk7CkBAIC0yNjYsMTAgKzI3MSwxNCBA
QCBzdGF0aWMgY29uc3QgRm9udCYgZm9udFRvVXNlKGNvbnN0IFJlbmRlclN0eWxlJiBzdHlsZSwg
Y29uc3QgUmVuZGVyVGV4dCYgcmVuZGVyZQogICAgIHJldHVybiBzdHlsZS5mb250KCk7CiB9CiAK
LUxheW91dFJlY3QgSW5saW5lVGV4dEJveDo6bG9jYWxTZWxlY3Rpb25SZWN0KGludCBzdGFydFBv
cywgaW50IGVuZFBvcykgY29uc3QKK0xheW91dFJlY3QgSW5saW5lVGV4dEJveDo6bG9jYWxTZWxl
Y3Rpb25SZWN0KHVuc2lnbmVkIHN0YXJ0UG9zLCB1bnNpZ25lZCBlbmRQb3MpIGNvbnN0CiB7Ci0g
ICAgaW50IHNQb3MgPSBzdGQ6Om1heChzdGFydFBvcyAtIG1fc3RhcnQsIDApOwotICAgIGludCBl
UG9zID0gc3RkOjptaW4oZW5kUG9zIC0gbV9zdGFydCwgKGludCltX2xlbik7CisgICAgdW5zaWdu
ZWQgc1BvcyA9IHN0YXJ0UG9zID4gbV9zdGFydCA/IHN0YXJ0UG9zIC0gbV9zdGFydCA6IDA7Cisg
ICAgCisgICAgaWYgKGVuZFBvcyA8IG1fc3RhcnQpCisgICAgICAgIHJldHVybiBMYXlvdXRSZWN0
KCk7CisKKyAgICB1bnNpZ25lZCBlUG9zID0gc3RkOjptaW4oZW5kUG9zIC0gbV9zdGFydCwgc3Rh
dGljX2Nhc3Q8dW5zaWduZWQ+KG1fbGVuKSk7CiAgICAgCiAgICAgaWYgKHNQb3MgPiBlUG9zKQog
ICAgICAgICByZXR1cm4gTGF5b3V0UmVjdCgpOwpAQCAtMjg0LDEyICsyOTMsMTAgQEAgTGF5b3V0
UmVjdCBJbmxpbmVUZXh0Qm94Ojpsb2NhbFNlbGVjdGlvblJlY3QoaW50IHN0YXJ0UG9zLCBpbnQg
ZW5kUG9zKSBjb25zdAogICAgIEJ1ZmZlckZvckFwcGVuZGluZ0h5cGhlbiBjaGFyYWN0ZXJzV2l0
aEh5cGhlbjsKICAgICBib29sIHJlc3BlY3RIeXBoZW4gPSBlUG9zID09IG1fbGVuICYmIGhhc0h5
cGhlbigpOwogICAgIFRleHRSdW4gdGV4dFJ1biA9IGNvbnN0cnVjdFRleHRSdW4obGluZVN0eWxl
LCBmb250LCByZXNwZWN0SHlwaGVuID8gJmNoYXJhY3RlcnNXaXRoSHlwaGVuIDogMCk7Ci0gICAg
aWYgKHJlc3BlY3RIeXBoZW4pCi0gICAgICAgIGVuZFBvcyA9IHRleHRSdW4ubGVuZ3RoKCk7CiAK
ICAgICBMYXlvdXRSZWN0IHNlbGVjdGlvblJlY3QgPSBMYXlvdXRSZWN0KExheW91dFBvaW50KGxv
Z2ljYWxMZWZ0KCksIHNlbGVjdGlvblRvcCksIExheW91dFNpemUobV9sb2dpY2FsV2lkdGgsIHNl
bGVjdGlvbkhlaWdodCkpOwogICAgIC8vIEF2b2lkIGNvbXB1dGluZyB0aGUgZm9udCB3aWR0aCB3
aGVuIHRoZSBlbnRpcmUgbGluZSBib3ggaXMgc2VsZWN0ZWQgYXMgYW4gb3B0aW1pemF0aW9uLgot
ICAgIGlmIChzUG9zIHx8IGVQb3MgIT0gc3RhdGljX2Nhc3Q8aW50PihtX2xlbikpCisgICAgaWYg
KHNQb3MgfHwgZVBvcyAhPSBtX2xlbikKICAgICAgICAgZm9udC5hZGp1c3RTZWxlY3Rpb25SZWN0
Rm9yVGV4dCh0ZXh0UnVuLCBzZWxlY3Rpb25SZWN0LCBzUG9zLCBlUG9zKTsKICAgICBJbnRSZWN0
IHNuYXBwZWRTZWxlY3Rpb25SZWN0ID0gZW5jbG9zaW5nSW50UmVjdChzZWxlY3Rpb25SZWN0KTsK
ICAgICBMYXlvdXRVbml0IGxvZ2ljYWxXaWR0aCA9IHNuYXBwZWRTZWxlY3Rpb25SZWN0LndpZHRo
KCk7CkBAIC02MDYsMTUgKzYxMywxNiBAQCB2b2lkIElubGluZVRleHRCb3g6OnBhaW50KFBhaW50
SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBMYXlvdXRQb2ludCYgcGFpbnRPZmZzZXQsCiAgICAgfQog
CiAgICAgLy8gMi4gTm93IHBhaW50IHRoZSBmb3JlZ3JvdW5kLCBpbmNsdWRpbmcgdGV4dCBhbmQg
ZGVjb3JhdGlvbnMgbGlrZSB1bmRlcmxpbmUvb3ZlcmxpbmUgKGluIHF1aXJrcyBtb2RlIG9ubHkp
LgotICAgIGludCBsZW5ndGggPSBtX2xlbjsKLSAgICBpbnQgbWF4aW11bUxlbmd0aDsKKyAgICB1
bnNpZ25lZCBsZW5ndGggPSBtX2xlbjsKKyAgICB1bnNpZ25lZCBtYXhpbXVtTGVuZ3RoOwogICAg
IFN0cmluZyBzdHJpbmc7CiAgICAgaWYgKCFjb21iaW5lZFRleHQpIHsKICAgICAgICAgc3RyaW5n
ID0gcmVuZGVyZXIoKS50ZXh0KCk7Ci0gICAgICAgIGlmIChzdGF0aWNfY2FzdDx1bnNpZ25lZD4o
bGVuZ3RoKSAhPSBzdHJpbmcubGVuZ3RoKCkgfHwgbV9zdGFydCkgewotICAgICAgICAgICAgQVNT
RVJUX1dJVEhfU0VDVVJJVFlfSU1QTElDQVRJT04oc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KG1fc3Rh
cnQgKyBsZW5ndGgpIDw9IHN0cmluZy5sZW5ndGgoKSk7CisgICAgICAgIGlmIChsZW5ndGggIT0g
c3RyaW5nLmxlbmd0aCgpIHx8IG1fc3RhcnQpIHsKKyAgICAgICAgICAgIEFTU0VSVF9XSVRIX1NF
Q1VSSVRZX0lNUExJQ0FUSU9OKG1fc3RhcnQgKyBsZW5ndGggPD0gc3RyaW5nLmxlbmd0aCgpKTsK
ICAgICAgICAgICAgIHN0cmluZyA9IHN0cmluZy5zdWJzdHJpbmdTaGFyaW5nSW1wbChtX3N0YXJ0
LCBsZW5ndGgpOwogICAgICAgICB9CisgICAgICAgIEFTU0VSVChyZW5kZXJlcigpLnRleHRMZW5n
dGgoKSA+PSBtX3N0YXJ0KTsKICAgICAgICAgbWF4aW11bUxlbmd0aCA9IHJlbmRlcmVyKCkudGV4
dExlbmd0aCgpIC0gbV9zdGFydDsKICAgICB9IGVsc2UgewogICAgICAgICBjb21iaW5lZFRleHQt
PmdldFN0cmluZ1RvUmVuZGVyKG1fc3RhcnQsIHN0cmluZywgbGVuZ3RoKTsKQEAgLTYyNiwxNCAr
NjM0LDE0IEBAIHZvaWQgSW5saW5lVGV4dEJveDo6cGFpbnQoUGFpbnRJbmZvJiBwYWludEluZm8s
IGNvbnN0IExheW91dFBvaW50JiBwYWludE9mZnNldCwKICAgICBpZiAoaGFzSHlwaGVuKCkpCiAg
ICAgICAgIGxlbmd0aCA9IHRleHRSdW4ubGVuZ3RoKCk7CiAKLSAgICBpbnQgc1BvcyA9IDA7Ci0g
ICAgaW50IGVQb3MgPSAwOworICAgIHVuc2lnbmVkIHNQb3MgPSAwOworICAgIHVuc2lnbmVkIGVQ
b3MgPSAwOwogICAgIGlmIChoYXZlU2VsZWN0aW9uICYmIChwYWludFNlbGVjdGVkVGV4dE9ubHkg
fHwgcGFpbnRTZWxlY3RlZFRleHRTZXBhcmF0ZWx5KSkKICAgICAgICAgc2VsZWN0aW9uU3RhcnRF
bmQoc1BvcywgZVBvcyk7CiAKICAgICBpZiAobV90cnVuY2F0aW9uICE9IGNOb1RydW5jYXRpb24p
IHsKLSAgICAgICAgc1BvcyA9IHN0ZDo6bWluPGludD4oc1BvcywgbV90cnVuY2F0aW9uKTsKLSAg
ICAgICAgZVBvcyA9IHN0ZDo6bWluPGludD4oZVBvcywgbV90cnVuY2F0aW9uKTsKKyAgICAgICAg
c1BvcyA9IHN0ZDo6bWluKHNQb3MsIHN0YXRpY19jYXN0PHVuc2lnbmVkPihtX3RydW5jYXRpb24p
KTsKKyAgICAgICAgZVBvcyA9IHN0ZDo6bWluKGVQb3MsIHN0YXRpY19jYXN0PHVuc2lnbmVkPiht
X3RydW5jYXRpb24pKTsKICAgICAgICAgbGVuZ3RoID0gbV90cnVuY2F0aW9uOwogICAgIH0KIApA
QCAtNjkzLDIyICs3MDEsMjcgQEAgdm9pZCBJbmxpbmVUZXh0Qm94OjpwYWludChQYWludEluZm8m
IHBhaW50SW5mbywgY29uc3QgTGF5b3V0UG9pbnQmIHBhaW50T2Zmc2V0LAogICAgICAgICBjb250
ZXh0LT5jb25jYXRDVE0ocm90YXRpb24oYm94UmVjdCwgQ291bnRlcmNsb2Nrd2lzZSkpOwogfQog
Ci12b2lkIElubGluZVRleHRCb3g6OnNlbGVjdGlvblN0YXJ0RW5kKGludCYgc1BvcywgaW50JiBl
UG9zKQordm9pZCBJbmxpbmVUZXh0Qm94OjpzZWxlY3Rpb25TdGFydEVuZCh1bnNpZ25lZCYgc1Bv
cywgdW5zaWduZWQmIGVQb3MpCiB7Ci0gICAgaW50IHN0YXJ0UG9zLCBlbmRQb3M7CisgICAgdW5z
aWduZWQgc3RhcnRQb3MsIGVuZFBvczsKICAgICBpZiAocmVuZGVyZXIoKS5zZWxlY3Rpb25TdGF0
ZSgpID09IFJlbmRlck9iamVjdDo6U2VsZWN0aW9uSW5zaWRlKSB7CiAgICAgICAgIHN0YXJ0UG9z
ID0gMDsKICAgICAgICAgZW5kUG9zID0gcmVuZGVyZXIoKS50ZXh0TGVuZ3RoKCk7CiAgICAgfSBl
bHNlIHsKLSAgICAgICAgcmVuZGVyZXIoKS5zZWxlY3Rpb25TdGFydEVuZChzdGFydFBvcywgZW5k
UG9zKTsKKyAgICAgICAgaW50IG9yaWdpbmFsU3RhcnRQb3MsIG9yaWdpbmFsRW5kUG9zOworICAg
ICAgICByZW5kZXJlcigpLnNlbGVjdGlvblN0YXJ0RW5kKG9yaWdpbmFsU3RhcnRQb3MsIG9yaWdp
bmFsRW5kUG9zKTsKKyAgICAgICAgQVNTRVJUKG9yaWdpbmFsU3RhcnRQb3MgPj0gMCAmJiBvcmln
aW5hbEVuZFBvcyA+PSAwKTsKKyAgICAgICAgc3RhcnRQb3MgPSBvcmlnaW5hbFN0YXJ0UG9zOwor
ICAgICAgICBlbmRQb3MgPSBvcmlnaW5hbEVuZFBvczsKICAgICAgICAgaWYgKHJlbmRlcmVyKCku
c2VsZWN0aW9uU3RhdGUoKSA9PSBSZW5kZXJPYmplY3Q6OlNlbGVjdGlvblN0YXJ0KQogICAgICAg
ICAgICAgZW5kUG9zID0gcmVuZGVyZXIoKS50ZXh0TGVuZ3RoKCk7CiAgICAgICAgIGVsc2UgaWYg
KHJlbmRlcmVyKCkuc2VsZWN0aW9uU3RhdGUoKSA9PSBSZW5kZXJPYmplY3Q6OlNlbGVjdGlvbkVu
ZCkKICAgICAgICAgICAgIHN0YXJ0UG9zID0gMDsKICAgICB9Ci0KLSAgICBzUG9zID0gc3RkOjpt
YXgoc3RhcnRQb3MgLSBtX3N0YXJ0LCAwKTsKLSAgICBlUG9zID0gc3RkOjptaW4oZW5kUG9zIC0g
bV9zdGFydCwgKGludCltX2xlbik7CisgICAgCisgICAgc1BvcyA9IHN0YXJ0UG9zID4gbV9zdGFy
dCA/IHN0YXJ0UG9zIC0gbV9zdGFydCA6IDA7CisgICAgZVBvcyA9IGVuZFBvcyA+IG1fc3RhcnQg
PyBlbmRQb3MgLSBtX3N0YXJ0IDogMDsKKyAgICBlUG9zID0gc3RkOjptaW4oZVBvcywgc3RhdGlj
X2Nhc3Q8dW5zaWduZWQ+KG1fbGVuKSk7CiB9CiAKIHZvaWQgSW5saW5lVGV4dEJveDo6cGFpbnRT
ZWxlY3Rpb24oR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBjb25zdCBGbG9hdFBvaW50JiBib3hP
cmlnaW4sIGNvbnN0IFJlbmRlclN0eWxlJiBzdHlsZSwgY29uc3QgRm9udCYgZm9udCwgQ29sb3Ig
dGV4dENvbG9yKQpAQCAtNzE4LDcgKzczMSw3IEBAIHZvaWQgSW5saW5lVGV4dEJveDo6cGFpbnRT
ZWxlY3Rpb24oR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBjb25zdCBGbG9hdFBvaW50JiBiCiAg
ICAgICAgIHJldHVybjsKIAogICAgIC8vIFNlZSBpZiB3ZSBoYXZlIGEgc2VsZWN0aW9uIHRvIHBh
aW50IGF0IGFsbC4KLSAgICBpbnQgc1BvcywgZVBvczsKKyAgICB1bnNpZ25lZCBzUG9zLCBlUG9z
OwogICAgIHNlbGVjdGlvblN0YXJ0RW5kKHNQb3MsIGVQb3MpOwogICAgIGlmIChzUG9zID49IGVQ
b3MpCiAgICAgICAgIHJldHVybjsKQEAgLTczNyw3ICs3NTAsNyBAQCB2b2lkIElubGluZVRleHRC
b3g6OnBhaW50U2VsZWN0aW9uKEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgY29uc3QgRmxvYXRQ
b2ludCYgYgogICAgIAogICAgIC8vIElmIHRoZSB0ZXh0IGlzIHRydW5jYXRlZCwgbGV0IHRoZSB0
aGluZyBiZWluZyBwYWludGVkIGluIHRoZSB0cnVuY2F0aW9uCiAgICAgLy8gZHJhdyBpdHMgb3du
IGhpZ2hsaWdodC4KLSAgICBpbnQgbGVuZ3RoID0gbV90cnVuY2F0aW9uICE9IGNOb1RydW5jYXRp
b24gPyBtX3RydW5jYXRpb24gOiBtX2xlbjsKKyAgICB1bnNpZ25lZCBsZW5ndGggPSBtX3RydW5j
YXRpb24gIT0gY05vVHJ1bmNhdGlvbiA/IG1fdHJ1bmNhdGlvbiA6IG1fbGVuOwogICAgIFN0cmlu
ZyBzdHJpbmcgPSByZW5kZXJlcigpLnRleHQoKTsKIAogICAgIGlmIChzdHJpbmcubGVuZ3RoKCkg
IT0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGxlbmd0aCkgfHwgbV9zdGFydCkgewpAQCAtNzQ3LDYg
Kzc2MCw3IEBAIHZvaWQgSW5saW5lVGV4dEJveDo6cGFpbnRTZWxlY3Rpb24oR3JhcGhpY3NDb250
ZXh0KiBjb250ZXh0LCBjb25zdCBGbG9hdFBvaW50JiBiCiAKICAgICBCdWZmZXJGb3JBcHBlbmRp
bmdIeXBoZW4gY2hhcmFjdGVyc1dpdGhIeXBoZW47CiAgICAgYm9vbCByZXNwZWN0SHlwaGVuID0g
ZVBvcyA9PSBsZW5ndGggJiYgaGFzSHlwaGVuKCk7CisgICAgQVNTRVJUKHJlbmRlcmVyKCkudGV4
dExlbmd0aCgpID49IG1fc3RhcnQpOwogICAgIFRleHRSdW4gdGV4dFJ1biA9IGNvbnN0cnVjdFRl
eHRSdW4oc3R5bGUsIGZvbnQsIHN0cmluZywgcmVuZGVyZXIoKS50ZXh0TGVuZ3RoKCkgLSBtX3N0
YXJ0LCByZXNwZWN0SHlwaGVuID8gJmNoYXJhY3RlcnNXaXRoSHlwaGVuIDogMCk7CiAgICAgaWYg
KHJlc3BlY3RIeXBoZW4pCiAgICAgICAgIGVQb3MgPSB0ZXh0UnVuLmxlbmd0aCgpOwpAQCAtNzcw
LDExICs3ODQsMTIgQEAgdm9pZCBJbmxpbmVUZXh0Qm94OjpwYWludFNlbGVjdGlvbihHcmFwaGlj
c0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IEZsb2F0UG9pbnQmIGIKICNlbmRpZgogfQogCi12b2lk
IElubGluZVRleHRCb3g6OnBhaW50Q29tcG9zaXRpb25CYWNrZ3JvdW5kKEdyYXBoaWNzQ29udGV4
dCogY29udGV4dCwgY29uc3QgRmxvYXRQb2ludCYgYm94T3JpZ2luLCBjb25zdCBSZW5kZXJTdHls
ZSYgc3R5bGUsIGNvbnN0IEZvbnQmIGZvbnQsIGludCBzdGFydFBvcywgaW50IGVuZFBvcykKK3Zv
aWQgSW5saW5lVGV4dEJveDo6cGFpbnRDb21wb3NpdGlvbkJhY2tncm91bmQoR3JhcGhpY3NDb250
ZXh0KiBjb250ZXh0LCBjb25zdCBGbG9hdFBvaW50JiBib3hPcmlnaW4sIGNvbnN0IFJlbmRlclN0
eWxlJiBzdHlsZSwgY29uc3QgRm9udCYgZm9udCwgdW5zaWduZWQgc3RhcnRQb3MsIHVuc2lnbmVk
IGVuZFBvcykKIHsKLSAgICBpbnQgb2Zmc2V0ID0gbV9zdGFydDsKLSAgICBpbnQgc1BvcyA9IHN0
ZDo6bWF4KHN0YXJ0UG9zIC0gb2Zmc2V0LCAwKTsKLSAgICBpbnQgZVBvcyA9IHN0ZDo6bWluKGVu
ZFBvcyAtIG9mZnNldCwgKGludCltX2xlbik7CisgICAgdW5zaWduZWQgb2Zmc2V0ID0gbV9zdGFy
dDsKKyAgICB1bnNpZ25lZCBzUG9zID0gc3RhcnRQb3MgPiBvZmZzZXQgPyBzdGFydFBvcyAtIG9m
ZnNldCA6IDA7CisgICAgQVNTRVJUKGVuZFBvcyA+PSBvZmZzZXQpOworICAgIHVuc2lnbmVkIGVQ
b3MgPSBzdGQ6Om1pbihlbmRQb3MgLSBvZmZzZXQsIHN0YXRpY19jYXN0PHVuc2lnbmVkPihtX2xl
bikpOwogCiAgICAgaWYgKHNQb3MgPj0gZVBvcykKICAgICAgICAgcmV0dXJuOwpAQCAtMTExMyw3
ICsxMTI4LDcgQEAgdm9pZCBJbmxpbmVUZXh0Qm94OjpwYWludERvY3VtZW50TWFya2VyKEdyYXBo
aWNzQ29udGV4dCogcHQsIGNvbnN0IEZsb2F0UG9pbnQmIGIKIAogICAgIC8vIERldGVybWluZSB3
aGV0aGVyIHdlIG5lZWQgdG8gbWVhc3VyZSB0ZXh0CiAgICAgYm9vbCBtYXJrZXJTcGFuc1dob2xl
Qm94ID0gdHJ1ZTsKLSAgICBpZiAobV9zdGFydCA8PSAoaW50KW1hcmtlci0+c3RhcnRPZmZzZXQo
KSkKKyAgICBpZiAobV9zdGFydCA8PSBtYXJrZXItPnN0YXJ0T2Zmc2V0KCkpCiAgICAgICAgIG1h
cmtlclNwYW5zV2hvbGVCb3ggPSBmYWxzZTsKICAgICBpZiAoKGVuZCgpICsgMSkgIT0gbWFya2Vy
LT5lbmRPZmZzZXQoKSkgLy8gZW5kIHBvaW50cyBhdCB0aGUgbGFzdCBjaGFyLCBub3QgcGFzdCBp
dAogICAgICAgICBtYXJrZXJTcGFuc1dob2xlQm94ID0gZmFsc2U7CkBAIC0xMTIyLDExICsxMTM3
LDEyIEBAIHZvaWQgSW5saW5lVGV4dEJveDo6cGFpbnREb2N1bWVudE1hcmtlcihHcmFwaGljc0Nv
bnRleHQqIHB0LCBjb25zdCBGbG9hdFBvaW50JiBiCiAKICAgICBib29sIGlzRGljdGF0aW9uTWFy
a2VyID0gbWFya2VyLT50eXBlKCkgPT0gRG9jdW1lbnRNYXJrZXI6OkRpY3RhdGlvbkFsdGVybmF0
aXZlczsKICAgICBpZiAoIW1hcmtlclNwYW5zV2hvbGVCb3ggfHwgZ3JhbW1hciB8fCBpc0RpY3Rh
dGlvbk1hcmtlcikgewotICAgICAgICBpbnQgc3RhcnRQb3NpdGlvbiA9IHN0ZDo6bWF4PGludD4o
bWFya2VyLT5zdGFydE9mZnNldCgpIC0gbV9zdGFydCwgMCk7Ci0gICAgICAgIGludCBlbmRQb3Np
dGlvbiA9IHN0ZDo6bWluPGludD4obWFya2VyLT5lbmRPZmZzZXQoKSAtIG1fc3RhcnQsIG1fbGVu
KTsKKyAgICAgICAgdW5zaWduZWQgc3RhcnRQb3NpdGlvbiA9IG1hcmtlci0+c3RhcnRPZmZzZXQo
KSA+IG1fc3RhcnQgPyBtYXJrZXItPnN0YXJ0T2Zmc2V0KCkgLSBtX3N0YXJ0IDogMDsKKyAgICAg
ICAgQVNTRVJUKG1hcmtlci0+ZW5kT2Zmc2V0KCkgPj0gbV9zdGFydCk7CisgICAgICAgIHVuc2ln
bmVkIGVuZFBvc2l0aW9uID0gc3RkOjptaW4obWFya2VyLT5lbmRPZmZzZXQoKSAtIG1fc3RhcnQs
IHN0YXRpY19jYXN0PHVuc2lnbmVkPihtX2xlbikpOwogICAgICAgICAKICAgICAgICAgaWYgKG1f
dHJ1bmNhdGlvbiAhPSBjTm9UcnVuY2F0aW9uKQotICAgICAgICAgICAgZW5kUG9zaXRpb24gPSBz
dGQ6Om1pbjxpbnQ+KGVuZFBvc2l0aW9uLCBtX3RydW5jYXRpb24pOworICAgICAgICAgICAgZW5k
UG9zaXRpb24gPSBzdGQ6Om1pbihlbmRQb3NpdGlvbiwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KG1f
dHJ1bmNhdGlvbikpOwogCiAgICAgICAgIC8vIENhbGN1bGF0ZSBzdGFydCAmIHdpZHRoCiAgICAg
ICAgIGludCBkZWx0YVkgPSByZW5kZXJlcigpLnN0eWxlKCkuaXNGbGlwcGVkTGluZXNXcml0aW5n
TW9kZSgpID8gc2VsZWN0aW9uQm90dG9tKCkgLSBsb2dpY2FsQm90dG9tKCkgOiBsb2dpY2FsVG9w
KCkgLSBzZWxlY3Rpb25Ub3AoKTsKQEAgLTExNzMsOCArMTE4OSw5IEBAIHZvaWQgSW5saW5lVGV4
dEJveDo6cGFpbnRUZXh0TWF0Y2hNYXJrZXIoR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBjb25z
dCBGbG9hdFBvCiB7CiAgICAgTGF5b3V0VW5pdCBzZWxlY3Rpb25IZWlnaHQgPSB0aGlzLT5zZWxl
Y3Rpb25IZWlnaHQoKTsKIAotICAgIGludCBzUG9zID0gc3RkOjptYXgobWFya2VyLT5zdGFydE9m
ZnNldCgpIC0gbV9zdGFydCwgKHVuc2lnbmVkKTApOwotICAgIGludCBlUG9zID0gc3RkOjptaW4o
bWFya2VyLT5lbmRPZmZzZXQoKSAtIG1fc3RhcnQsICh1bnNpZ25lZCltX2xlbik7CisgICAgdW5z
aWduZWQgc1BvcyA9IG1hcmtlci0+c3RhcnRPZmZzZXQoKSA+IG1fc3RhcnQgPyBtYXJrZXItPnN0
YXJ0T2Zmc2V0KCkgLSBtX3N0YXJ0IDogMDsKKyAgICBBU1NFUlQobWFya2VyLT5lbmRPZmZzZXQo
KSA+PSBtX3N0YXJ0KTsKKyAgICB1bnNpZ25lZCBlUG9zID0gc3RkOjptaW4obWFya2VyLT5lbmRP
ZmZzZXQoKSAtIG1fc3RhcnQsIHN0YXRpY19jYXN0PHVuc2lnbmVkPihtX2xlbikpOwogICAgIFRl
eHRSdW4gcnVuID0gY29uc3RydWN0VGV4dFJ1bihzdHlsZSwgZm9udCk7CiAKICAgICAvLyBBbHdh
eXMgY29tcHV0ZSBhbmQgc3RvcmUgdGhlIHJlY3QgYXNzb2NpYXRlZCB3aXRoIHRoaXMgbWFya2Vy
LiBUaGUgY29tcHV0ZWQgcmVjdCBpcyBpbiBhYnNvbHV0ZSBjb29yZGluYXRlcy4KQEAgLTEyMDYs
OCArMTIyMyw5IEBAIHZvaWQgSW5saW5lVGV4dEJveDo6Y29tcHV0ZVJlY3RGb3JSZXBsYWNlbWVu
dE1hcmtlcihEb2N1bWVudE1hcmtlciogbWFya2VyLCBjb25zCiAgICAgTGF5b3V0VW5pdCB0b3Ag
PSBzZWxlY3Rpb25Ub3AoKTsKICAgICBMYXlvdXRVbml0IGggPSBzZWxlY3Rpb25IZWlnaHQoKTsK
ICAgICAKLSAgICBpbnQgc1BvcyA9IHN0ZDo6bWF4KG1hcmtlci0+c3RhcnRPZmZzZXQoKSAtIG1f
c3RhcnQsICh1bnNpZ25lZCkwKTsKLSAgICBpbnQgZVBvcyA9IHN0ZDo6bWluKG1hcmtlci0+ZW5k
T2Zmc2V0KCkgLSBtX3N0YXJ0LCAodW5zaWduZWQpbV9sZW4pOworICAgIHVuc2lnbmVkIHNQb3Mg
PSBtYXJrZXItPnN0YXJ0T2Zmc2V0KCkgPiBtX3N0YXJ0ID8gbWFya2VyLT5zdGFydE9mZnNldCgp
IC0gbV9zdGFydCA6IDA7CisgICAgQVNTRVJUKG1hcmtlci0+ZW5kT2Zmc2V0KCkgPj0gbV9zdGFy
dCk7CisgICAgdW5zaWduZWQgZVBvcyA9IHN0ZDo6bWluKG1hcmtlci0+ZW5kT2Zmc2V0KCkgLSBt
X3N0YXJ0LCAodW5zaWduZWQpbV9sZW4pOwogICAgIFRleHRSdW4gcnVuID0gY29uc3RydWN0VGV4
dFJ1bihzdHlsZSwgZm9udCk7CiAKICAgICAvLyBDb21wdXRlIGFuZCBzdG9yZSB0aGUgcmVjdCBh
c3NvY2lhdGVkIHdpdGggdGhpcyBtYXJrZXIuCkBAIC0xMzE0LDExICsxMzMyLDExIEBAIHZvaWQg
SW5saW5lVGV4dEJveDo6cGFpbnRDb21wb3NpdGlvblVuZGVybGluZShHcmFwaGljc0NvbnRleHQq
IGN0eCwgY29uc3QgRmxvYXRQCiAgICAgICAgIHN0YXJ0ID0gcmVuZGVyZXIoKS53aWR0aChtX3N0
YXJ0LCBwYWludFN0YXJ0IC0gbV9zdGFydCwgdGV4dFBvcygpLCBpc0ZpcnN0TGluZSgpKTsKICAg
ICB9CiAgICAgaWYgKHBhaW50RW5kICE9IHVuZGVybGluZS5lbmRPZmZzZXQpIHsgICAgICAvLyBl
bmQgcG9pbnRzIGF0IHRoZSBsYXN0IGNoYXIsIG5vdCBwYXN0IGl0Ci0gICAgICAgIHBhaW50RW5k
ID0gc3RkOjptaW4ocGFpbnRFbmQsICh1bnNpZ25lZCl1bmRlcmxpbmUuZW5kT2Zmc2V0KTsKKyAg
ICAgICAgcGFpbnRFbmQgPSBzdGQ6Om1pbihwYWludEVuZCwgdW5kZXJsaW5lLmVuZE9mZnNldCk7
CiAgICAgICAgIHVzZVdob2xlV2lkdGggPSBmYWxzZTsKICAgICB9CiAgICAgaWYgKG1fdHJ1bmNh
dGlvbiAhPSBjTm9UcnVuY2F0aW9uKSB7Ci0gICAgICAgIHBhaW50RW5kID0gc3RkOjptaW4ocGFp
bnRFbmQsICh1bnNpZ25lZCltX3N0YXJ0ICsgbV90cnVuY2F0aW9uKTsKKyAgICAgICAgcGFpbnRF
bmQgPSBzdGQ6Om1pbihwYWludEVuZCwgbV9zdGFydCArIG1fdHJ1bmNhdGlvbik7CiAgICAgICAg
IHVzZVdob2xlV2lkdGggPSBmYWxzZTsKICAgICB9CiAgICAgaWYgKCF1c2VXaG9sZVdpZHRoKSB7
CkBAIC0xMzc5LDcgKzEzOTcsNyBAQCBpbnQgSW5saW5lVGV4dEJveDo6b2Zmc2V0Rm9yUG9zaXRp
b24oZmxvYXQgbGluZU9mZnNldCwgYm9vbCBpbmNsdWRlUGFydGlhbEdseXBocwogICAgIHJldHVy
biBmb250Lm9mZnNldEZvclBvc2l0aW9uKGNvbnN0cnVjdFRleHRSdW4obGluZVN0eWxlLCBmb250
KSwgbGluZU9mZnNldCAtIGxvZ2ljYWxMZWZ0KCksIGluY2x1ZGVQYXJ0aWFsR2x5cGhzKTsKIH0K
IAotZmxvYXQgSW5saW5lVGV4dEJveDo6cG9zaXRpb25Gb3JPZmZzZXQoaW50IG9mZnNldCkgY29u
c3QKK2Zsb2F0IElubGluZVRleHRCb3g6OnBvc2l0aW9uRm9yT2Zmc2V0KHVuc2lnbmVkIG9mZnNl
dCkgY29uc3QKIHsKICAgICBBU1NFUlQob2Zmc2V0ID49IG1fc3RhcnQpOwogICAgIEFTU0VSVChv
ZmZzZXQgPD0gbV9zdGFydCArIG1fbGVuKTsKQEAgLTEzOTEsOCArMTQwOSw4IEBAIGZsb2F0IElu
bGluZVRleHRCb3g6OnBvc2l0aW9uRm9yT2Zmc2V0KGludCBvZmZzZXQpIGNvbnN0CiAKICAgICBj
b25zdCBSZW5kZXJTdHlsZSYgbGluZVN0eWxlID0gdGhpcy0+bGluZVN0eWxlKCk7CiAgICAgY29u
c3QgRm9udCYgZm9udCA9IGZvbnRUb1VzZShsaW5lU3R5bGUsIHJlbmRlcmVyKCkpOwotICAgIGlu
dCBmcm9tID0gIWlzTGVmdFRvUmlnaHREaXJlY3Rpb24oKSA/IG9mZnNldCAtIG1fc3RhcnQgOiAw
OwotICAgIGludCB0byA9ICFpc0xlZnRUb1JpZ2h0RGlyZWN0aW9uKCkgPyBtX2xlbiA6IG9mZnNl
dCAtIG1fc3RhcnQ7CisgICAgdW5zaWduZWQgZnJvbSA9ICFpc0xlZnRUb1JpZ2h0RGlyZWN0aW9u
KCkgPyBvZmZzZXQgLSBtX3N0YXJ0IDogMDsKKyAgICB1bnNpZ25lZCB0byA9ICFpc0xlZnRUb1Jp
Z2h0RGlyZWN0aW9uKCkgPyBtX2xlbiA6IG9mZnNldCAtIG1fc3RhcnQ7CiAgICAgLy8gRklYTUU6
IERvIHdlIG5lZWQgdG8gYWRkIHJpZ2h0QmVhcmluZyBoZXJlPwogICAgIExheW91dFJlY3Qgc2Vs
ZWN0aW9uUmVjdCA9IExheW91dFJlY3QobG9naWNhbExlZnQoKSwgMCwgMCwgMCk7CiAgICAgVGV4
dFJ1biBydW4gPSBjb25zdHJ1Y3RUZXh0UnVuKGxpbmVTdHlsZSwgZm9udCk7CkBAIC0xNDEwLDEz
ICsxNDI4LDE0IEBAIFRleHRSdW4gSW5saW5lVGV4dEJveDo6Y29uc3RydWN0VGV4dFJ1bihjb25z
dCBSZW5kZXJTdHlsZSYgc3R5bGUsIGNvbnN0IEZvbnQmIGZvCiAKICAgICBpZiAoc3RyaW5nLmxl
bmd0aCgpICE9IGxlbmd0aCB8fCBzdGFydFBvcykKICAgICAgICAgc3RyaW5nID0gc3RyaW5nLnN1
YnN0cmluZ1NoYXJpbmdJbXBsKHN0YXJ0UG9zLCBsZW5ndGgpOwotCisgICAgCisgICAgQVNTRVJU
KHJlbmRlcmVyKCkudGV4dExlbmd0aCgpID49IHN0YXJ0UG9zKTsKICAgICByZXR1cm4gY29uc3Ry
dWN0VGV4dFJ1bihzdHlsZSwgZm9udCwgc3RyaW5nLCByZW5kZXJlcigpLnRleHRMZW5ndGgoKSAt
IHN0YXJ0UG9zLCBjaGFyYWN0ZXJzV2l0aEh5cGhlbik7CiB9CiAKLVRleHRSdW4gSW5saW5lVGV4
dEJveDo6Y29uc3RydWN0VGV4dFJ1bihjb25zdCBSZW5kZXJTdHlsZSYgc3R5bGUsIGNvbnN0IEZv
bnQmIGZvbnQsIFN0cmluZyBzdHJpbmcsIGludCBtYXhpbXVtTGVuZ3RoLCBCdWZmZXJGb3JBcHBl
bmRpbmdIeXBoZW4qIGNoYXJhY3RlcnNXaXRoSHlwaGVuKSBjb25zdAorVGV4dFJ1biBJbmxpbmVU
ZXh0Qm94Ojpjb25zdHJ1Y3RUZXh0UnVuKGNvbnN0IFJlbmRlclN0eWxlJiBzdHlsZSwgY29uc3Qg
Rm9udCYgZm9udCwgU3RyaW5nIHN0cmluZywgdW5zaWduZWQgbWF4aW11bUxlbmd0aCwgQnVmZmVy
Rm9yQXBwZW5kaW5nSHlwaGVuKiBjaGFyYWN0ZXJzV2l0aEh5cGhlbikgY29uc3QKIHsKLSAgICBp
bnQgbGVuZ3RoID0gc3RyaW5nLmxlbmd0aCgpOworICAgIHVuc2lnbmVkIGxlbmd0aCA9IHN0cmlu
Zy5sZW5ndGgoKTsKIAogICAgIGlmIChjaGFyYWN0ZXJzV2l0aEh5cGhlbikgewogICAgICAgICBh
ZGp1c3RDaGFyYWN0ZXJzQW5kTGVuZ3RoRm9ySHlwaGVuKCpjaGFyYWN0ZXJzV2l0aEh5cGhlbiwg
c3R5bGUsIHN0cmluZywgbGVuZ3RoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9JbmxpbmVUZXh0Qm94LmggYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvSW5saW5lVGV4
dEJveC5oCmluZGV4IGM0MmI1NGU4ZDJiNzU5NGY4YWI5YTY3ODhmODk3OWRmZTU2Yjg0YjAuLjdk
M2Y1YjY2ZWZkODMxOTU2NDhlZmI4MmJkM2RiYTkwNTNhMmQ0ZmMgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9JbmxpbmVUZXh0Qm94LmgKKysrIGIvU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL0lubGluZVRleHRCb3guaApAQCAtMTEwLDE1ICsxMTAsMTUgQEAgcHJpdmF0ZToK
ICAgICBMYXlvdXRVbml0IHNlbGVjdGlvbkJvdHRvbSgpIGNvbnN0OwogICAgIExheW91dFVuaXQg
c2VsZWN0aW9uSGVpZ2h0KCkgY29uc3Q7CiAKLSAgICBUZXh0UnVuIGNvbnN0cnVjdFRleHRSdW4o
Y29uc3QgUmVuZGVyU3R5bGUmLCBjb25zdCBGb250JiwgQnVmZmVyRm9yQXBwZW5kaW5nSHlwaGVu
KiA9IDApIGNvbnN0OwotICAgIFRleHRSdW4gY29uc3RydWN0VGV4dFJ1bihjb25zdCBSZW5kZXJT
dHlsZSYsIGNvbnN0IEZvbnQmLCBTdHJpbmcsIGludCBtYXhpbXVtTGVuZ3RoLCBCdWZmZXJGb3JB
cHBlbmRpbmdIeXBoZW4qID0gMCkgY29uc3Q7CisgICAgVGV4dFJ1biBjb25zdHJ1Y3RUZXh0UnVu
KGNvbnN0IFJlbmRlclN0eWxlJiwgY29uc3QgRm9udCYsIEJ1ZmZlckZvckFwcGVuZGluZ0h5cGhl
biogPSBudWxscHRyKSBjb25zdDsKKyAgICBUZXh0UnVuIGNvbnN0cnVjdFRleHRSdW4oY29uc3Qg
UmVuZGVyU3R5bGUmLCBjb25zdCBGb250JiwgU3RyaW5nLCB1bnNpZ25lZCBtYXhpbXVtTGVuZ3Ro
LCBCdWZmZXJGb3JBcHBlbmRpbmdIeXBoZW4qID0gbnVsbHB0cikgY29uc3Q7CiAKIHB1YmxpYzoK
ICAgICB2aXJ0dWFsIEZsb2F0UmVjdCBjYWxjdWxhdGVCb3VuZGFyaWVzKCkgY29uc3QgeyByZXR1
cm4gRmxvYXRSZWN0KHgoKSwgeSgpLCB3aWR0aCgpLCBoZWlnaHQoKSk7IH0KIAotICAgIHZpcnR1
YWwgTGF5b3V0UmVjdCBsb2NhbFNlbGVjdGlvblJlY3QoaW50IHN0YXJ0UG9zLCBpbnQgZW5kUG9z
KSBjb25zdDsKLSAgICBib29sIGlzU2VsZWN0ZWQoaW50IHN0YXJ0UG9zLCBpbnQgZW5kUG9zKSBj
b25zdDsKLSAgICB2b2lkIHNlbGVjdGlvblN0YXJ0RW5kKGludCYgc1BvcywgaW50JiBlUG9zKTsK
KyAgICB2aXJ0dWFsIExheW91dFJlY3QgbG9jYWxTZWxlY3Rpb25SZWN0KHVuc2lnbmVkIHN0YXJ0
UG9zLCB1bnNpZ25lZCBlbmRQb3MpIGNvbnN0OworICAgIGJvb2wgaXNTZWxlY3RlZCh1bnNpZ25l
ZCBzdGFydFBvcywgdW5zaWduZWQgZW5kUG9zKSBjb25zdDsKKyAgICB2b2lkIHNlbGVjdGlvblN0
YXJ0RW5kKHVuc2lnbmVkJiBzUG9zLCB1bnNpZ25lZCYgZVBvcyk7CiAKIHByb3RlY3RlZDoKICAg
ICB2aXJ0dWFsIHZvaWQgcGFpbnQoUGFpbnRJbmZvJiwgY29uc3QgTGF5b3V0UG9pbnQmLCBMYXlv
dXRVbml0IGxpbmVUb3AsIExheW91dFVuaXQgbGluZUJvdHRvbSk7CkBAIC0xNTgsMTMgKzE1OCwx
MyBAQCBwcml2YXRlOgogCiBwdWJsaWM6CiAgICAgdmlydHVhbCBpbnQgb2Zmc2V0Rm9yUG9zaXRp
b24oZmxvYXQgeCwgYm9vbCBpbmNsdWRlUGFydGlhbEdseXBocyA9IHRydWUpIGNvbnN0OwotICAg
IHZpcnR1YWwgZmxvYXQgcG9zaXRpb25Gb3JPZmZzZXQoaW50IG9mZnNldCkgY29uc3Q7CisgICAg
dmlydHVhbCBmbG9hdCBwb3NpdGlvbkZvck9mZnNldCh1bnNpZ25lZCBvZmZzZXQpIGNvbnN0Owog
CiAgICAgLy8gTmVlZHMgdG8gYmUgcHVibGljLCBzbyB0aGUgc3RhdGljIHBhaW50VGV4dFdpdGhT
aGFkb3dzKCkgZnVuY3Rpb24gY2FuIHVzZSBpdC4KICAgICBzdGF0aWMgRmxvYXRTaXplIGFwcGx5
U2hhZG93VG9HcmFwaGljc0NvbnRleHQoR3JhcGhpY3NDb250ZXh0KiwgY29uc3QgU2hhZG93RGF0
YSosIGNvbnN0IEZsb2F0UmVjdCYgdGV4dFJlY3QsIGJvb2wgc3Ryb2tlZCwgYm9vbCBvcGFxdWUs
IGJvb2wgaG9yaXpvbnRhbCk7CiAKIHByb3RlY3RlZDoKLSAgICB2b2lkIHBhaW50Q29tcG9zaXRp
b25CYWNrZ3JvdW5kKEdyYXBoaWNzQ29udGV4dCosIGNvbnN0IEZsb2F0UG9pbnQmIGJveE9yaWdp
biwgY29uc3QgUmVuZGVyU3R5bGUmLCBjb25zdCBGb250JiwgaW50IHN0YXJ0UG9zLCBpbnQgZW5k
UG9zKTsKKyAgICB2b2lkIHBhaW50Q29tcG9zaXRpb25CYWNrZ3JvdW5kKEdyYXBoaWNzQ29udGV4
dCosIGNvbnN0IEZsb2F0UG9pbnQmIGJveE9yaWdpbiwgY29uc3QgUmVuZGVyU3R5bGUmLCBjb25z
dCBGb250JiwgdW5zaWduZWQgc3RhcnRQb3MsIHVuc2lnbmVkIGVuZFBvcyk7CiAgICAgdm9pZCBw
YWludERvY3VtZW50TWFya2VycyhHcmFwaGljc0NvbnRleHQqLCBjb25zdCBGbG9hdFBvaW50JiBi
b3hPcmlnaW4sIGNvbnN0IFJlbmRlclN0eWxlJiwgY29uc3QgRm9udCYsIGJvb2wgYmFja2dyb3Vu
ZCk7CiAgICAgdm9pZCBwYWludENvbXBvc2l0aW9uVW5kZXJsaW5lKEdyYXBoaWNzQ29udGV4dCos
IGNvbnN0IEZsb2F0UG9pbnQmIGJveE9yaWdpbiwgY29uc3QgQ29tcG9zaXRpb25VbmRlcmxpbmUm
KTsKIApAQCAtMTg3LDcgKzE4Nyw3IEBAIHByaXZhdGU6CiAgICAgSW5saW5lVGV4dEJveCogbV9w
cmV2VGV4dEJveDsgLy8gVGhlIHByZXZpb3VzIGJveCB0aGF0IGFsc28gdXNlcyBvdXIgUmVuZGVy
T2JqZWN0CiAgICAgSW5saW5lVGV4dEJveCogbV9uZXh0VGV4dEJveDsgLy8gVGhlIG5leHQgYm94
IHRoYXQgYWxzbyB1c2VzIG91ciBSZW5kZXJPYmplY3QKIAotICAgIGludCBtX3N0YXJ0OworICAg
IHVuc2lnbmVkIG1fc3RhcnQ7CiAgICAgdW5zaWduZWQgc2hvcnQgbV9sZW47CiAKICAgICAvLyBX
aGVyZSB0byB0cnVuY2F0ZSB3aGVuIHRleHQgb3ZlcmZsb3cgaXMgYXBwbGllZC4gV2UgdXNlIHNw
ZWNpYWwgY29uc3RhbnRzIHRvCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyQ29tYmluZVRleHQuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckNv
bWJpbmVUZXh0LmNwcAppbmRleCAzZjAxM2RiOTFkN2Y1Yzg3NTVlNTJkOGM0MGVjOTlkNmEwNmM4
M2E4Li5jYjM2ZmZkYmZhNmEyNDQzOGZhOGUyNTVkNTYwNzgxNTQzNjhhMjEyIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQ29tYmluZVRleHQuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJDb21iaW5lVGV4dC5jcHAKQEAgLTcyLDkgKzcy
LDggQEAgdm9pZCBSZW5kZXJDb21iaW5lVGV4dDo6YWRqdXN0VGV4dE9yaWdpbihGbG9hdFBvaW50
JiB0ZXh0T3JpZ2luLCBjb25zdCBGbG9hdFJlY3QKICAgICAgICAgdGV4dE9yaWdpbi5tb3ZlKGJv
eFJlY3QuaGVpZ2h0KCkgLyAyIC0gY2VpbGYobV9jb21iaW5lZFRleHRXaWR0aCkgLyAyLCBzdHls
ZSgpLmZvbnQoKS5waXhlbFNpemUoKSk7CiB9CiAKLXZvaWQgUmVuZGVyQ29tYmluZVRleHQ6Omdl
dFN0cmluZ1RvUmVuZGVyKGludCBzdGFydCwgU3RyaW5nJiBzdHJpbmcsIGludCYgbGVuZ3RoKSBj
b25zdAordm9pZCBSZW5kZXJDb21iaW5lVGV4dDo6Z2V0U3RyaW5nVG9SZW5kZXIodW5zaWduZWQg
c3RhcnQsIFN0cmluZyYgc3RyaW5nLCB1bnNpZ25lZCYgbGVuZ3RoKSBjb25zdAogewotICAgIEFT
U0VSVChzdGFydCA+PSAwKTsKICAgICBpZiAobV9pc0NvbWJpbmVkKSB7CiAgICAgICAgIHN0cmlu
ZyA9IG9yaWdpbmFsVGV4dCgpOwogICAgICAgICBsZW5ndGggPSBzdHJpbmcubGVuZ3RoKCk7CkBA
IC04Miw3ICs4MSw3IEBAIHZvaWQgUmVuZGVyQ29tYmluZVRleHQ6OmdldFN0cmluZ1RvUmVuZGVy
KGludCBzdGFydCwgU3RyaW5nJiBzdHJpbmcsIGludCYgbGVuZ3RoCiAgICAgfQogIAogICAgIHN0
cmluZyA9IHRleHQoKTsKLSAgICBzdHJpbmcgPSBzdHJpbmcuc3Vic3RyaW5nU2hhcmluZ0ltcGwo
c3RhdGljX2Nhc3Q8dW5zaWduZWQ+KHN0YXJ0KSwgbGVuZ3RoKTsKKyAgICBzdHJpbmcgPSBzdHJp
bmcuc3Vic3RyaW5nU2hhcmluZ0ltcGwoc3RhcnQsIGxlbmd0aCk7CiB9CiAKIHZvaWQgUmVuZGVy
Q29tYmluZVRleHQ6OmNvbWJpbmVUZXh0KCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJDb21iaW5lVGV4dC5oIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlckNvbWJpbmVUZXh0LmgKaW5kZXggMWRkZmVlOTI5ZjVjNDkwMjFhYzk1YmQ3OGU5OTRkZjY5
NTUxMzUyOS4uNGNmZjk2MDY5MjYyYTM4Mzk1MDhjNDI0Mjk3MTI3YTM0MmMwNjNiZiAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckNvbWJpbmVUZXh0LmgKKysrIGIv
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckNvbWJpbmVUZXh0LmgKQEAgLTM2LDcgKzM2
LDcgQEAgcHVibGljOgogCiAgICAgdm9pZCBjb21iaW5lVGV4dCgpOwogICAgIHZvaWQgYWRqdXN0
VGV4dE9yaWdpbihGbG9hdFBvaW50JiB0ZXh0T3JpZ2luLCBjb25zdCBGbG9hdFJlY3QmIGJveFJl
Y3QpIGNvbnN0OwotICAgIHZvaWQgZ2V0U3RyaW5nVG9SZW5kZXIoaW50LCBTdHJpbmcmIHN0cmlu
ZywgaW50JiBsZW5ndGgpIGNvbnN0OworICAgIHZvaWQgZ2V0U3RyaW5nVG9SZW5kZXIodW5zaWdu
ZWQsIFN0cmluZyYsIHVuc2lnbmVkJiBsZW5ndGgpIGNvbnN0OwogICAgIGJvb2wgaXNDb21iaW5l
ZCgpIGNvbnN0IHsgcmV0dXJuIG1faXNDb21iaW5lZDsgfQogICAgIGZsb2F0IGNvbWJpbmVkVGV4
dFdpZHRoKGNvbnN0IEZvbnQmIGZvbnQpIGNvbnN0IHsgcmV0dXJuIGZvbnQuc2l6ZSgpOyB9CiAg
ICAgY29uc3QgRm9udCYgb3JpZ2luYWxGb250KCkgY29uc3QgeyByZXR1cm4gcGFyZW50KCktPnN0
eWxlKCkuZm9udCgpOyB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3Zn
L1NWR0lubGluZUZsb3dCb3guY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdJ
bmxpbmVGbG93Qm94LmNwcAppbmRleCAxN2Q0MWJkOGY0YmExODRhZDFmZjViNzI3YTE0MDg3NzEw
ZjRjNjEwLi42ZmIyNzllMzQ1ODBkMzM1MGZkOWZiYjExNTNjZThiZmZjMWM3ZWRkIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR0lubGluZUZsb3dCb3guY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHSW5saW5lRmxvd0JveC5jcHAKQEAg
LTEwNiw4ICsxMDYsOCBAQCB2b2lkIFNWR0lubGluZUZsb3dCb3g6OmNvbXB1dGVUZXh0TWF0Y2hN
YXJrZXJSZWN0Rm9yUmVuZGVyZXIoUmVuZGVyU1ZHSW5saW5lVGV4dAogICAgICAgICAgICAgaWYg
KG1hcmtlclN0YXJ0UG9zaXRpb24gPj0gbWFya2VyRW5kUG9zaXRpb24pCiAgICAgICAgICAgICAg
ICAgY29udGludWU7CiAKLSAgICAgICAgICAgIGludCBmcmFnbWVudFN0YXJ0UG9zaXRpb24gPSAw
OwotICAgICAgICAgICAgaW50IGZyYWdtZW50RW5kUG9zaXRpb24gPSAwOworICAgICAgICAgICAg
dW5zaWduZWQgZnJhZ21lbnRTdGFydFBvc2l0aW9uID0gMDsKKyAgICAgICAgICAgIHVuc2lnbmVk
IGZyYWdtZW50RW5kUG9zaXRpb24gPSAwOwogCiAgICAgICAgICAgICBjb25zdCBWZWN0b3I8U1ZH
VGV4dEZyYWdtZW50PiYgZnJhZ21lbnRzID0gdGV4dEJveC0+dGV4dEZyYWdtZW50cygpOwogICAg
ICAgICAgICAgdW5zaWduZWQgdGV4dEZyYWdtZW50c1NpemUgPSBmcmFnbWVudHMuc2l6ZSgpOwpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdJbmxpbmVUZXh0Qm94
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHSW5saW5lVGV4dEJveC5jcHAK
aW5kZXggYjE5MzY3M2M4MzA1NmY4ZjViYzBhZjA2YjU2MGYzMmZhODBlNTMzYS4uMWJiNjVhZDQ2
YjJjNjA5ODY0OGM4MjM1NDIwOGIzMWQxOWIzZDE3YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL3N2Zy9TVkdJbmxpbmVUZXh0Qm94LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvc3ZnL1NWR0lubGluZVRleHRCb3guY3BwCkBAIC0xMDEsNyArMTAxLDcgQEAg
aW50IFNWR0lubGluZVRleHRCb3g6Om9mZnNldEZvclBvc2l0aW9uSW5GcmFnbWVudChjb25zdCBT
VkdUZXh0RnJhZ21lbnQmIGZyYWdtZW4KICAgICByZXR1cm4gZnJhZ21lbnQuY2hhcmFjdGVyT2Zm
c2V0IC0gc3RhcnQoKSArIHJlbmRlcmVyKCkuc2NhbGVkRm9udCgpLm9mZnNldEZvclBvc2l0aW9u
KHRleHRSdW4sIHBvc2l0aW9uICogc2NhbGluZ0ZhY3RvciwgaW5jbHVkZVBhcnRpYWxHbHlwaHMp
OwogfQogCi1mbG9hdCBTVkdJbmxpbmVUZXh0Qm94Ojpwb3NpdGlvbkZvck9mZnNldChpbnQpIGNv
bnN0CitmbG9hdCBTVkdJbmxpbmVUZXh0Qm94Ojpwb3NpdGlvbkZvck9mZnNldCh1bnNpZ25lZCkg
Y29uc3QKIHsKICAgICAvLyBTVkcgZG9lc24ndCB1c2UgdGhlIG9mZnNldCA8LT4gcG9zaXRpb24g
c2VsZWN0aW9uIHN5c3RlbS4gCiAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CkBAIC0xMzcsMTEg
KzEzNywxMiBAQCBGbG9hdFJlY3QgU1ZHSW5saW5lVGV4dEJveDo6c2VsZWN0aW9uUmVjdEZvclRl
eHRGcmFnbWVudChjb25zdCBTVkdUZXh0RnJhZ21lbnQmCiAgICAgcmV0dXJuIHNuYXBwZWRTZWxl
Y3Rpb25SZWN0OwogfQogCi1MYXlvdXRSZWN0IFNWR0lubGluZVRleHRCb3g6OmxvY2FsU2VsZWN0
aW9uUmVjdChpbnQgc3RhcnRQb3NpdGlvbiwgaW50IGVuZFBvc2l0aW9uKSBjb25zdAorTGF5b3V0
UmVjdCBTVkdJbmxpbmVUZXh0Qm94Ojpsb2NhbFNlbGVjdGlvblJlY3QodW5zaWduZWQgc3RhcnRQ
b3NpdGlvbiwgdW5zaWduZWQgZW5kUG9zaXRpb24pIGNvbnN0CiB7Ci0gICAgaW50IGJveFN0YXJ0
ID0gc3RhcnQoKTsKLSAgICBzdGFydFBvc2l0aW9uID0gc3RkOjptYXgoc3RhcnRQb3NpdGlvbiAt
IGJveFN0YXJ0LCAwKTsKLSAgICBlbmRQb3NpdGlvbiA9IHN0ZDo6bWluKGVuZFBvc2l0aW9uIC0g
Ym94U3RhcnQsIHN0YXRpY19jYXN0PGludD4obGVuKCkpKTsKKyAgICB1bnNpZ25lZCBib3hTdGFy
dCA9IHN0YXJ0KCk7CisgICAgc3RhcnRQb3NpdGlvbiA9IHN0YXJ0UG9zaXRpb24gPiBib3hTdGFy
dCA/IHN0YXJ0UG9zaXRpb24gLSBib3hTdGFydCA6IDA7CisgICAgQVNTRVJUKGVuZFBvc2l0aW9u
ID49IGJveFN0YXJ0KTsKKyAgICBlbmRQb3NpdGlvbiA9IHN0ZDo6bWluKGVuZFBvc2l0aW9uIC0g
Ym94U3RhcnQsIGxlbigpKTsKICAgICBpZiAoc3RhcnRQb3NpdGlvbiA+PSBlbmRQb3NpdGlvbikK
ICAgICAgICAgcmV0dXJuIExheW91dFJlY3QoKTsKIApAQCAtMTQ5LDggKzE1MCw4IEBAIExheW91
dFJlY3QgU1ZHSW5saW5lVGV4dEJveDo6bG9jYWxTZWxlY3Rpb25SZWN0KGludCBzdGFydFBvc2l0
aW9uLCBpbnQgZW5kUG9zaXRpCiAKICAgICBBZmZpbmVUcmFuc2Zvcm0gZnJhZ21lbnRUcmFuc2Zv
cm07CiAgICAgRmxvYXRSZWN0IHNlbGVjdGlvblJlY3Q7Ci0gICAgaW50IGZyYWdtZW50U3RhcnRQ
b3NpdGlvbiA9IDA7Ci0gICAgaW50IGZyYWdtZW50RW5kUG9zaXRpb24gPSAwOworICAgIHVuc2ln
bmVkIGZyYWdtZW50U3RhcnRQb3NpdGlvbiA9IDA7CisgICAgdW5zaWduZWQgZnJhZ21lbnRFbmRQ
b3NpdGlvbiA9IDA7CiAKICAgICB1bnNpZ25lZCB0ZXh0RnJhZ21lbnRzU2l6ZSA9IG1fdGV4dEZy
YWdtZW50cy5zaXplKCk7CiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHRleHRGcmFnbWVu
dHNTaXplOyArK2kpIHsKQEAgLTIxMywxMSArMjE0LDExIEBAIHZvaWQgU1ZHSW5saW5lVGV4dEJv
eDo6cGFpbnRTZWxlY3Rpb25CYWNrZ3JvdW5kKFBhaW50SW5mbyYgcGFpbnRJbmZvKQogICAgICAg
ICAgICAgc2VsZWN0aW9uU3R5bGUgPSAmc3R5bGU7CiAgICAgfQogCi0gICAgaW50IHN0YXJ0UG9z
aXRpb24sIGVuZFBvc2l0aW9uOworICAgIHVuc2lnbmVkIHN0YXJ0UG9zaXRpb24sIGVuZFBvc2l0
aW9uOwogICAgIHNlbGVjdGlvblN0YXJ0RW5kKHN0YXJ0UG9zaXRpb24sIGVuZFBvc2l0aW9uKTsK
IAotICAgIGludCBmcmFnbWVudFN0YXJ0UG9zaXRpb24gPSAwOwotICAgIGludCBmcmFnbWVudEVu
ZFBvc2l0aW9uID0gMDsKKyAgICB1bnNpZ25lZCBmcmFnbWVudFN0YXJ0UG9zaXRpb24gPSAwOwor
ICAgIHVuc2lnbmVkIGZyYWdtZW50RW5kUG9zaXRpb24gPSAwOwogICAgIEFmZmluZVRyYW5zZm9y
bSBmcmFnbWVudFRyYW5zZm9ybTsKICAgICB1bnNpZ25lZCB0ZXh0RnJhZ21lbnRzU2l6ZSA9IG1f
dGV4dEZyYWdtZW50cy5zaXplKCk7CiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHRleHRG
cmFnbWVudHNTaXplOyArK2kpIHsKQEAgLTQ0MCwyMSArNDQxLDI0IEBAIFRleHRSdW4gU1ZHSW5s
aW5lVGV4dEJveDo6Y29uc3RydWN0VGV4dFJ1bihSZW5kZXJTdHlsZSogc3R5bGUsIGNvbnN0IFNW
R1RleHRGcmFnCiAgICAgcmV0dXJuIHJ1bjsKIH0KIAotYm9vbCBTVkdJbmxpbmVUZXh0Qm94Ojpt
YXBTdGFydEVuZFBvc2l0aW9uc0ludG9GcmFnbWVudENvb3JkaW5hdGVzKGNvbnN0IFNWR1RleHRG
cmFnbWVudCYgZnJhZ21lbnQsIGludCYgc3RhcnRQb3NpdGlvbiwgaW50JiBlbmRQb3NpdGlvbikg
Y29uc3QKK2Jvb2wgU1ZHSW5saW5lVGV4dEJveDo6bWFwU3RhcnRFbmRQb3NpdGlvbnNJbnRvRnJh
Z21lbnRDb29yZGluYXRlcyhjb25zdCBTVkdUZXh0RnJhZ21lbnQmIGZyYWdtZW50LCB1bnNpZ25l
ZCYgc3RhcnRQb3NpdGlvbiwgdW5zaWduZWQmIGVuZFBvc2l0aW9uKSBjb25zdAogewogICAgIGlm
IChzdGFydFBvc2l0aW9uID49IGVuZFBvc2l0aW9uKQogICAgICAgICByZXR1cm4gZmFsc2U7Ci0K
LSAgICBpbnQgb2Zmc2V0ID0gc3RhdGljX2Nhc3Q8aW50PihmcmFnbWVudC5jaGFyYWN0ZXJPZmZz
ZXQpIC0gc3RhcnQoKTsKLSAgICBpbnQgbGVuZ3RoID0gc3RhdGljX2Nhc3Q8aW50PihmcmFnbWVu
dC5sZW5ndGgpOworICAgIAorICAgIEFTU0VSVChmcmFnbWVudC5jaGFyYWN0ZXJPZmZzZXQgPj0g
c3RhcnQoKSk7CisgICAgdW5zaWduZWQgb2Zmc2V0ID0gZnJhZ21lbnQuY2hhcmFjdGVyT2Zmc2V0
IC0gc3RhcnQoKTsKKyAgICB1bnNpZ25lZCBsZW5ndGggPSBmcmFnbWVudC5sZW5ndGg7CiAKICAg
ICBpZiAoc3RhcnRQb3NpdGlvbiA+PSBvZmZzZXQgKyBsZW5ndGggfHwgZW5kUG9zaXRpb24gPD0g
b2Zmc2V0KQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICBpZiAoc3RhcnRQb3NpdGlvbiA8
IG9mZnNldCkKICAgICAgICAgc3RhcnRQb3NpdGlvbiA9IDA7Ci0gICAgZWxzZQorICAgIGVsc2Ug
eworICAgICAgICBBU1NFUlQoc3RhcnRQb3NpdGlvbiA+PSBvZmZzZXQpOwogICAgICAgICBzdGFy
dFBvc2l0aW9uIC09IG9mZnNldDsKKyAgICB9CiAKICAgICBpZiAoZW5kUG9zaXRpb24gPiBvZmZz
ZXQgKyBsZW5ndGgpCiAgICAgICAgIGVuZFBvc2l0aW9uID0gbGVuZ3RoOwpAQCAtNjI2LDggKzYz
MCw4IEBAIHZvaWQgU1ZHSW5saW5lVGV4dEJveDo6cGFpbnRUZXh0KEdyYXBoaWNzQ29udGV4dCog
Y29udGV4dCwgUmVuZGVyU3R5bGUqIHN0eWxlLCBSCiAgICAgQVNTRVJUKHN0eWxlKTsKICAgICBB
U1NFUlQoc2VsZWN0aW9uU3R5bGUpOwogCi0gICAgaW50IHN0YXJ0UG9zaXRpb24gPSAwOwotICAg
IGludCBlbmRQb3NpdGlvbiA9IDA7CisgICAgdW5zaWduZWQgc3RhcnRQb3NpdGlvbiA9IDA7Cisg
ICAgdW5zaWduZWQgZW5kUG9zaXRpb24gPSAwOwogICAgIGlmIChoYXNTZWxlY3Rpb24pIHsKICAg
ICAgICAgc2VsZWN0aW9uU3RhcnRFbmQoc3RhcnRQb3NpdGlvbiwgZW5kUG9zaXRpb24pOwogICAg
ICAgICBoYXNTZWxlY3Rpb24gPSBtYXBTdGFydEVuZFBvc2l0aW9uc0ludG9GcmFnbWVudENvb3Jk
aW5hdGVzKGZyYWdtZW50LCBzdGFydFBvc2l0aW9uLCBlbmRQb3NpdGlvbik7CkBAIC02NTUsNyAr
NjU5LDcgQEAgdm9pZCBTVkdJbmxpbmVUZXh0Qm94OjpwYWludFRleHQoR3JhcGhpY3NDb250ZXh0
KiBjb250ZXh0LCBSZW5kZXJTdHlsZSogc3R5bGUsIFIKICAgICAgICAgU1ZHUmVzb3VyY2VzQ2Fj
aGU6OmNsaWVudFN0eWxlQ2hhbmdlZChwYXJlbnQoKS0+cmVuZGVyZXIoKSwgU3R5bGVEaWZmZXJl
bmNlUmVwYWludCwgKnN0eWxlKTsKIAogICAgIC8vIEV2ZW50dWFsbHkgZHJhdyB0ZXh0IHVzaW5n
IHJlZ3VsYXIgc3R5bGUgZnJvbSB0aGUgZW5kIHBvc2l0aW9uIG9mIHRoZSBzZWxlY3Rpb24gdG8g
dGhlIGVuZCBvZiB0aGUgY3VycmVudCBjaHVuayBwYXJ0Ci0gICAgaWYgKGVuZFBvc2l0aW9uIDwg
c3RhdGljX2Nhc3Q8aW50PihmcmFnbWVudC5sZW5ndGgpICYmICFwYWludFNlbGVjdGVkVGV4dE9u
bHkpCisgICAgaWYgKGVuZFBvc2l0aW9uIDwgZnJhZ21lbnQubGVuZ3RoICYmICFwYWludFNlbGVj
dGVkVGV4dE9ubHkpCiAgICAgICAgIHBhaW50VGV4dFdpdGhTaGFkb3dzKGNvbnRleHQsIHN0eWxl
LCB0ZXh0UnVuLCBmcmFnbWVudCwgZW5kUG9zaXRpb24sIGZyYWdtZW50Lmxlbmd0aCk7CiB9CiAK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHSW5saW5lVGV4dEJv
eC5oIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdJbmxpbmVUZXh0Qm94LmgKaW5k
ZXggZjA4OTRmMGI1NTNhOWRiMGQ2YmFjNWExYjg0Y2YzNGFlYzdmMTU5NS4uNTE4ZWExYjg2NzJm
MzNhYjExMmJkZDE5NWJlMzdiNzZhN2JmMDZhMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL3N2Zy9TVkdJbmxpbmVUZXh0Qm94LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL3N2Zy9TVkdJbmxpbmVUZXh0Qm94LmgKQEAgLTQzLDEzICs0MywxMyBAQCBwdWJsaWM6
CiAgICAgdmlydHVhbCBpbnQgc2VsZWN0aW9uVG9wKCkgeyByZXR1cm4gdG9wKCk7IH0KICAgICB2
aXJ0dWFsIGludCBzZWxlY3Rpb25IZWlnaHQoKSB7IHJldHVybiBzdGF0aWNfY2FzdDxpbnQ+KGNl
aWxmKG1fbG9naWNhbEhlaWdodCkpOyB9CiAgICAgdmlydHVhbCBpbnQgb2Zmc2V0Rm9yUG9zaXRp
b24oZmxvYXQgeCwgYm9vbCBpbmNsdWRlUGFydGlhbEdseXBocyA9IHRydWUpIGNvbnN0OwotICAg
IHZpcnR1YWwgZmxvYXQgcG9zaXRpb25Gb3JPZmZzZXQoaW50IG9mZnNldCkgY29uc3Q7CisgICAg
dmlydHVhbCBmbG9hdCBwb3NpdGlvbkZvck9mZnNldCh1bnNpZ25lZCBvZmZzZXQpIGNvbnN0Owog
CiAgICAgdm9pZCBwYWludFNlbGVjdGlvbkJhY2tncm91bmQoUGFpbnRJbmZvJik7CiAgICAgdmly
dHVhbCB2b2lkIHBhaW50KFBhaW50SW5mbyYsIGNvbnN0IExheW91dFBvaW50JiwgTGF5b3V0VW5p
dCBsaW5lVG9wLCBMYXlvdXRVbml0IGxpbmVCb3R0b20pOwotICAgIHZpcnR1YWwgTGF5b3V0UmVj
dCBsb2NhbFNlbGVjdGlvblJlY3QoaW50IHN0YXJ0UG9zaXRpb24sIGludCBlbmRQb3NpdGlvbikg
Y29uc3Qgb3ZlcnJpZGU7CisgICAgdmlydHVhbCBMYXlvdXRSZWN0IGxvY2FsU2VsZWN0aW9uUmVj
dCh1bnNpZ25lZCBzdGFydFBvc2l0aW9uLCB1bnNpZ25lZCBlbmRQb3NpdGlvbikgY29uc3Qgb3Zl
cnJpZGU7CiAKLSAgICBib29sIG1hcFN0YXJ0RW5kUG9zaXRpb25zSW50b0ZyYWdtZW50Q29vcmRp
bmF0ZXMoY29uc3QgU1ZHVGV4dEZyYWdtZW50JiwgaW50JiBzdGFydFBvc2l0aW9uLCBpbnQmIGVu
ZFBvc2l0aW9uKSBjb25zdDsKKyAgICBib29sIG1hcFN0YXJ0RW5kUG9zaXRpb25zSW50b0ZyYWdt
ZW50Q29vcmRpbmF0ZXMoY29uc3QgU1ZHVGV4dEZyYWdtZW50JiwgdW5zaWduZWQmIHN0YXJ0UG9z
aXRpb24sIHVuc2lnbmVkJiBlbmRQb3NpdGlvbikgY29uc3Q7CiAKICAgICB2aXJ0dWFsIEZsb2F0
UmVjdCBjYWxjdWxhdGVCb3VuZGFyaWVzKCkgY29uc3Q7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHVGV4dE1ldHJpY3NCdWlsZGVyLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHVGV4dE1ldHJpY3NCdWlsZGVyLmNwcAppbmRleCBlNjAx
MDJkYjA4YzM5NjM5NDhiOGE1NmNmMTk2ZmE1NjMzZGMwODFmLi4xY2I1YmMyOTVhMjFiMWZjOGFj
NTg0YzJjNzI2NzMxMzFhNWRhMjQ3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvc3ZnL1NWR1RleHRNZXRyaWNzQnVpbGRlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL3N2Zy9TVkdUZXh0TWV0cmljc0J1aWxkZXIuY3BwCkBAIC0zNywxMyArMzcsMTMgQEAg
U1ZHVGV4dE1ldHJpY3NCdWlsZGVyOjpTVkdUZXh0TWV0cmljc0J1aWxkZXIoKQogCiBpbmxpbmUg
Ym9vbCBTVkdUZXh0TWV0cmljc0J1aWxkZXI6OmN1cnJlbnRDaGFyYWN0ZXJTdGFydHNTdXJyb2dh
dGVQYWlyKCkgY29uc3QKIHsKLSAgICByZXR1cm4gVTE2X0lTX0xFQUQobV9ydW5bbV90ZXh0UG9z
aXRpb25dKSAmJiBpbnQobV90ZXh0UG9zaXRpb24gKyAxKSA8IG1fcnVuLmNoYXJhY3RlcnNMZW5n
dGgoKSAmJiBVMTZfSVNfVFJBSUwobV9ydW5bbV90ZXh0UG9zaXRpb24gKyAxXSk7CisgICAgcmV0
dXJuIFUxNl9JU19MRUFEKG1fcnVuW21fdGV4dFBvc2l0aW9uXSkgJiYgbV90ZXh0UG9zaXRpb24g
KyAxIDwgbV9ydW4uY2hhcmFjdGVyc0xlbmd0aCgpICYmIFUxNl9JU19UUkFJTChtX3J1blttX3Rl
eHRQb3NpdGlvbiArIDFdKTsKIH0KIAogYm9vbCBTVkdUZXh0TWV0cmljc0J1aWxkZXI6OmFkdmFu
Y2UoKQogewogICAgIG1fdGV4dFBvc2l0aW9uICs9IG1fY3VycmVudE1ldHJpY3MubGVuZ3RoKCk7
Ci0gICAgaWYgKGludChtX3RleHRQb3NpdGlvbikgPj0gbV9ydW4uY2hhcmFjdGVyc0xlbmd0aCgp
KQorICAgIGlmIChtX3RleHRQb3NpdGlvbiA+PSBtX3J1bi5jaGFyYWN0ZXJzTGVuZ3RoKCkpCiAg
ICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIGlmIChtX2lzQ29tcGxleFRleHQpCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR1RleHRRdWVyeS5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR1RleHRRdWVyeS5jcHAKaW5kZXggZTQ2ODQxNmU3
ZWE2OGFkYzE0ZmY5YmFmYzUwNGUxOWE5NjAxZWE2NS4uNzFkZGY4MWRhMTkzNTZkZGVmMzI3ZGVm
MTQ2NmQ5ZGQ3YWJmYzg3ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2
Zy9TVkdUZXh0UXVlcnkuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZH
VGV4dFF1ZXJ5LmNwcApAQCAtMTMzLDEzICsxMzMsMTUgQEAgYm9vbCBTVkdUZXh0UXVlcnk6OmV4
ZWN1dGVRdWVyeShEYXRhKiBxdWVyeURhdGEsIFByb2Nlc3NUZXh0RnJhZ21lbnRDYWxsYmFjayBm
cmEKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLWJvb2wgU1ZHVGV4dFF1ZXJ5OjptYXBTdGFydEVu
ZFBvc2l0aW9uc0ludG9GcmFnbWVudENvb3JkaW5hdGVzKERhdGEqIHF1ZXJ5RGF0YSwgY29uc3Qg
U1ZHVGV4dEZyYWdtZW50JiBmcmFnbWVudCwgaW50JiBzdGFydFBvc2l0aW9uLCBpbnQmIGVuZFBv
c2l0aW9uKSBjb25zdAorYm9vbCBTVkdUZXh0UXVlcnk6Om1hcFN0YXJ0RW5kUG9zaXRpb25zSW50
b0ZyYWdtZW50Q29vcmRpbmF0ZXMoRGF0YSogcXVlcnlEYXRhLCBjb25zdCBTVkdUZXh0RnJhZ21l
bnQmIGZyYWdtZW50LCB1bnNpZ25lZCYgc3RhcnRQb3NpdGlvbiwgdW5zaWduZWQmIGVuZFBvc2l0
aW9uKSBjb25zdAogewogICAgIC8vIFJldXNlIHRoZSBzYW1lIGxvZ2ljIHVzZWQgZm9yIHRleHQg
c2VsZWN0aW9uICYgcGFpbnRpbmcsIHRvIG1hcCBvdXIgcXVlcnkgc3RhcnQvbGVuZ3RoIGludG8g
c3RhcnQvZW5kUG9zaXRpb25zIG9mIHRoZSBjdXJyZW50IHRleHQgZnJhZ21lbnQuCisgICAgQVNT
RVJUKHN0YXJ0UG9zaXRpb24gPj0gcXVlcnlEYXRhLT5wcm9jZXNzZWRDaGFyYWN0ZXJzKTsKKyAg
ICBBU1NFUlQoZW5kUG9zaXRpb24gPj0gcXVlcnlEYXRhLT5wcm9jZXNzZWRDaGFyYWN0ZXJzKTsK
ICAgICBzdGFydFBvc2l0aW9uIC09IHF1ZXJ5RGF0YS0+cHJvY2Vzc2VkQ2hhcmFjdGVyczsKICAg
ICBlbmRQb3NpdGlvbiAtPSBxdWVyeURhdGEtPnByb2Nlc3NlZENoYXJhY3RlcnM7CiAKLSAgICBp
ZiAoc3RhcnRQb3NpdGlvbiA+PSBlbmRQb3NpdGlvbiB8fCBzdGFydFBvc2l0aW9uIDwgMCB8fCBl
bmRQb3NpdGlvbiA8IDApCisgICAgaWYgKHN0YXJ0UG9zaXRpb24gPj0gZW5kUG9zaXRpb24pCiAg
ICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIG1vZGlmeVN0YXJ0RW5kUG9zaXRpb25zUmVzcGVj
dGluZ0xpZ2F0dXJlcyhxdWVyeURhdGEsIHN0YXJ0UG9zaXRpb24sIGVuZFBvc2l0aW9uKTsKQEAg
LTE1MCw3ICsxNTIsNyBAQCBib29sIFNWR1RleHRRdWVyeTo6bWFwU3RhcnRFbmRQb3NpdGlvbnNJ
bnRvRnJhZ21lbnRDb29yZGluYXRlcyhEYXRhKiBxdWVyeURhdGEsCiAgICAgcmV0dXJuIHRydWU7
CiB9CiAKLXZvaWQgU1ZHVGV4dFF1ZXJ5Ojptb2RpZnlTdGFydEVuZFBvc2l0aW9uc1Jlc3BlY3Rp
bmdMaWdhdHVyZXMoRGF0YSogcXVlcnlEYXRhLCBpbnQmIHN0YXJ0UG9zaXRpb24sIGludCYgZW5k
UG9zaXRpb24pIGNvbnN0Cit2b2lkIFNWR1RleHRRdWVyeTo6bW9kaWZ5U3RhcnRFbmRQb3NpdGlv
bnNSZXNwZWN0aW5nTGlnYXR1cmVzKERhdGEqIHF1ZXJ5RGF0YSwgdW5zaWduZWQmIHN0YXJ0UG9z
aXRpb24sIHVuc2lnbmVkJiBlbmRQb3NpdGlvbikgY29uc3QKIHsKICAgICBTVkdUZXh0TGF5b3V0
QXR0cmlidXRlcyogbGF5b3V0QXR0cmlidXRlcyA9IHF1ZXJ5RGF0YS0+dGV4dFJlbmRlcmVyLT5s
YXlvdXRBdHRyaWJ1dGVzKCk7CiAgICAgVmVjdG9yPFNWR1RleHRNZXRyaWNzPiYgdGV4dE1ldHJp
Y3NWYWx1ZXMgPSBsYXlvdXRBdHRyaWJ1dGVzLT50ZXh0TWV0cmljc1ZhbHVlcygpOwpAQCAtMTgx
LDIxICsxODMsMjEgQEAgdm9pZCBTVkdUZXh0UXVlcnk6Om1vZGlmeVN0YXJ0RW5kUG9zaXRpb25z
UmVzcGVjdGluZ0xpZ2F0dXJlcyhEYXRhKiBxdWVyeURhdGEsIGkKICAgICAgICAgICAgIGJyZWFr
OwogCiAgICAgICAgIC8vIElmIHRoZSBzdGFydCBwb3NpdGlvbiBtYXBzIHRvIGEgY2hhcmFjdGVy
IGluIHRoZSBtZXRyaWNzIGxpc3QsIHdlIGRvbid0IG5lZWQgdG8gbW9kaWZ5IGl0LgotICAgICAg
ICBpZiAoc3RhcnRQb3NpdGlvbiA9PSBzdGF0aWNfY2FzdDxpbnQ+KHBvc2l0aW9uT2Zmc2V0KSkK
KyAgICAgICAgaWYgKHN0YXJ0UG9zaXRpb24gPT0gcG9zaXRpb25PZmZzZXQpCiAgICAgICAgICAg
ICBhbHRlclN0YXJ0UG9zaXRpb24gPSBmYWxzZTsKIAogICAgICAgICAvLyBJZiB0aGUgc3RhcnQg
cG9zaXRpb24gbWFwcyB0byBhIGNoYXJhY3RlciBpbiB0aGUgbWV0cmljcyBsaXN0LCB3ZSBkb24n
dCBuZWVkIHRvIG1vZGlmeSBpdC4KLSAgICAgICAgaWYgKGVuZFBvc2l0aW9uID09IHN0YXRpY19j
YXN0PGludD4ocG9zaXRpb25PZmZzZXQpKQorICAgICAgICBpZiAoZW5kUG9zaXRpb24gPT0gcG9z
aXRpb25PZmZzZXQpCiAgICAgICAgICAgICBhbHRlckVuZFBvc2l0aW9uID0gZmFsc2U7CiAKICAg
ICAgICAgLy8gRGV0ZWN0IGxpZ2F0dXJlcy4KICAgICAgICAgaWYgKGxhc3RQb3NpdGlvbk9mZnNl
dCAhPSAtMSAmJiBsYXN0UG9zaXRpb25PZmZzZXQgLSBwb3NpdGlvbk9mZnNldCA+IDEpIHsKLSAg
ICAgICAgICAgIGlmIChhbHRlclN0YXJ0UG9zaXRpb24gJiYgc3RhcnRQb3NpdGlvbiA+IGxhc3RQ
b3NpdGlvbk9mZnNldCAmJiBzdGFydFBvc2l0aW9uIDwgc3RhdGljX2Nhc3Q8aW50Pihwb3NpdGlv
bk9mZnNldCkpIHsKKyAgICAgICAgICAgIGlmIChhbHRlclN0YXJ0UG9zaXRpb24gJiYgc3RhcnRQ
b3NpdGlvbiA+IHN0YXRpY19jYXN0PHVuc2lnbmVkPihsYXN0UG9zaXRpb25PZmZzZXQpICYmIHN0
YXJ0UG9zaXRpb24gPCBwb3NpdGlvbk9mZnNldCkgewogICAgICAgICAgICAgICAgIHN0YXJ0UG9z
aXRpb24gPSBsYXN0UG9zaXRpb25PZmZzZXQ7CiAgICAgICAgICAgICAgICAgYWx0ZXJTdGFydFBv
c2l0aW9uID0gZmFsc2U7CiAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgIGlmIChhbHRlckVu
ZFBvc2l0aW9uICYmIGVuZFBvc2l0aW9uID4gbGFzdFBvc2l0aW9uT2Zmc2V0ICYmIGVuZFBvc2l0
aW9uIDwgc3RhdGljX2Nhc3Q8aW50Pihwb3NpdGlvbk9mZnNldCkpIHsKKyAgICAgICAgICAgIGlm
IChhbHRlckVuZFBvc2l0aW9uICYmIGVuZFBvc2l0aW9uID4gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+
KGxhc3RQb3NpdGlvbk9mZnNldCkgJiYgZW5kUG9zaXRpb24gPCBwb3NpdGlvbk9mZnNldCkgewog
ICAgICAgICAgICAgICAgIGVuZFBvc2l0aW9uID0gcG9zaXRpb25PZmZzZXQ7CiAgICAgICAgICAg
ICAgICAgYWx0ZXJFbmRQb3NpdGlvbiA9IGZhbHNlOwogICAgICAgICAgICAgfQpAQCAtMjEyLDEy
ICsyMTQsMTIgQEAgdm9pZCBTVkdUZXh0UXVlcnk6Om1vZGlmeVN0YXJ0RW5kUG9zaXRpb25zUmVz
cGVjdGluZ0xpZ2F0dXJlcyhEYXRhKiBxdWVyeURhdGEsIGkKICAgICAgICAgcmV0dXJuOwogCiAg
ICAgaWYgKGxhc3RQb3NpdGlvbk9mZnNldCAhPSAtMSAmJiBsYXN0UG9zaXRpb25PZmZzZXQgLSBw
b3NpdGlvbk9mZnNldCA+IDEpIHsKLSAgICAgICAgaWYgKGFsdGVyU3RhcnRQb3NpdGlvbiAmJiBz
dGFydFBvc2l0aW9uID4gbGFzdFBvc2l0aW9uT2Zmc2V0ICYmIHN0YXJ0UG9zaXRpb24gPCBzdGF0
aWNfY2FzdDxpbnQ+KHBvc2l0aW9uT2Zmc2V0KSkgeworICAgICAgICBpZiAoYWx0ZXJTdGFydFBv
c2l0aW9uICYmIHN0YXJ0UG9zaXRpb24gPiBzdGF0aWNfY2FzdDx1bnNpZ25lZD4obGFzdFBvc2l0
aW9uT2Zmc2V0KSAmJiBzdGFydFBvc2l0aW9uIDwgcG9zaXRpb25PZmZzZXQpIHsKICAgICAgICAg
ICAgIHN0YXJ0UG9zaXRpb24gPSBsYXN0UG9zaXRpb25PZmZzZXQ7CiAgICAgICAgICAgICBhbHRl
clN0YXJ0UG9zaXRpb24gPSBmYWxzZTsKICAgICAgICAgfQogCi0gICAgICAgIGlmIChhbHRlckVu
ZFBvc2l0aW9uICYmIGVuZFBvc2l0aW9uID4gbGFzdFBvc2l0aW9uT2Zmc2V0ICYmIGVuZFBvc2l0
aW9uIDwgc3RhdGljX2Nhc3Q8aW50Pihwb3NpdGlvbk9mZnNldCkpIHsKKyAgICAgICAgaWYgKGFs
dGVyRW5kUG9zaXRpb24gJiYgZW5kUG9zaXRpb24gPiBzdGF0aWNfY2FzdDx1bnNpZ25lZD4obGFz
dFBvc2l0aW9uT2Zmc2V0KSAmJiBlbmRQb3NpdGlvbiA8IHBvc2l0aW9uT2Zmc2V0KSB7CiAgICAg
ICAgICAgICBlbmRQb3NpdGlvbiA9IHBvc2l0aW9uT2Zmc2V0OwogICAgICAgICAgICAgYWx0ZXJF
bmRQb3NpdGlvbiA9IGZhbHNlOwogICAgICAgICB9CkBAIC0yODcsOCArMjg5LDggQEAgYm9vbCBT
VkdUZXh0UXVlcnk6OnN1YlN0cmluZ0xlbmd0aENhbGxiYWNrKERhdGEqIHF1ZXJ5RGF0YSwgY29u
c3QgU1ZHVGV4dEZyYWdtZW4KIHsKICAgICBTdWJTdHJpbmdMZW5ndGhEYXRhKiBkYXRhID0gc3Rh
dGljX2Nhc3Q8U3ViU3RyaW5nTGVuZ3RoRGF0YSo+KHF1ZXJ5RGF0YSk7CiAKLSAgICBpbnQgc3Rh
cnRQb3NpdGlvbiA9IGRhdGEtPnN0YXJ0UG9zaXRpb247Ci0gICAgaW50IGVuZFBvc2l0aW9uID0g
c3RhcnRQb3NpdGlvbiArIGRhdGEtPmxlbmd0aDsKKyAgICB1bnNpZ25lZCBzdGFydFBvc2l0aW9u
ID0gZGF0YS0+c3RhcnRQb3NpdGlvbjsKKyAgICB1bnNpZ25lZCBlbmRQb3NpdGlvbiA9IHN0YXJ0
UG9zaXRpb24gKyBkYXRhLT5sZW5ndGg7CiAgICAgaWYgKCFtYXBTdGFydEVuZFBvc2l0aW9uc0lu
dG9GcmFnbWVudENvb3JkaW5hdGVzKHF1ZXJ5RGF0YSwgZnJhZ21lbnQsIHN0YXJ0UG9zaXRpb24s
IGVuZFBvc2l0aW9uKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCkBAIC0zMjIsOCArMzI0LDgg
QEAgYm9vbCBTVkdUZXh0UXVlcnk6OnN0YXJ0UG9zaXRpb25PZkNoYXJhY3RlckNhbGxiYWNrKERh
dGEqIHF1ZXJ5RGF0YSwgY29uc3QgU1ZHVGUKIHsKICAgICBTdGFydFBvc2l0aW9uT2ZDaGFyYWN0
ZXJEYXRhKiBkYXRhID0gc3RhdGljX2Nhc3Q8U3RhcnRQb3NpdGlvbk9mQ2hhcmFjdGVyRGF0YSo+
KHF1ZXJ5RGF0YSk7CiAKLSAgICBpbnQgc3RhcnRQb3NpdGlvbiA9IGRhdGEtPnBvc2l0aW9uOwot
ICAgIGludCBlbmRQb3NpdGlvbiA9IHN0YXJ0UG9zaXRpb24gKyAxOworICAgIHVuc2lnbmVkIHN0
YXJ0UG9zaXRpb24gPSBkYXRhLT5wb3NpdGlvbjsKKyAgICB1bnNpZ25lZCBlbmRQb3NpdGlvbiA9
IHN0YXJ0UG9zaXRpb24gKyAxOwogICAgIGlmICghbWFwU3RhcnRFbmRQb3NpdGlvbnNJbnRvRnJh
Z21lbnRDb29yZGluYXRlcyhxdWVyeURhdGEsIGZyYWdtZW50LCBzdGFydFBvc2l0aW9uLCBlbmRQ
b3NpdGlvbikpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIApAQCAtMzcxLDggKzM3Myw4IEBAIGJv
b2wgU1ZHVGV4dFF1ZXJ5OjplbmRQb3NpdGlvbk9mQ2hhcmFjdGVyQ2FsbGJhY2soRGF0YSogcXVl
cnlEYXRhLCBjb25zdCBTVkdUZXh0CiB7CiAgICAgRW5kUG9zaXRpb25PZkNoYXJhY3RlckRhdGEq
IGRhdGEgPSBzdGF0aWNfY2FzdDxFbmRQb3NpdGlvbk9mQ2hhcmFjdGVyRGF0YSo+KHF1ZXJ5RGF0
YSk7CiAKLSAgICBpbnQgc3RhcnRQb3NpdGlvbiA9IGRhdGEtPnBvc2l0aW9uOwotICAgIGludCBl
bmRQb3NpdGlvbiA9IHN0YXJ0UG9zaXRpb24gKyAxOworICAgIHVuc2lnbmVkIHN0YXJ0UG9zaXRp
b24gPSBkYXRhLT5wb3NpdGlvbjsKKyAgICB1bnNpZ25lZCBlbmRQb3NpdGlvbiA9IHN0YXJ0UG9z
aXRpb24gKyAxOwogICAgIGlmICghbWFwU3RhcnRFbmRQb3NpdGlvbnNJbnRvRnJhZ21lbnRDb29y
ZGluYXRlcyhxdWVyeURhdGEsIGZyYWdtZW50LCBzdGFydFBvc2l0aW9uLCBlbmRQb3NpdGlvbikp
CiAgICAgICAgIHJldHVybiBmYWxzZTsKIApAQCAtNDE5LDggKzQyMSw4IEBAIGJvb2wgU1ZHVGV4
dFF1ZXJ5Ojpyb3RhdGlvbk9mQ2hhcmFjdGVyQ2FsbGJhY2soRGF0YSogcXVlcnlEYXRhLCBjb25z
dCBTVkdUZXh0RnJhCiB7CiAgICAgUm90YXRpb25PZkNoYXJhY3RlckRhdGEqIGRhdGEgPSBzdGF0
aWNfY2FzdDxSb3RhdGlvbk9mQ2hhcmFjdGVyRGF0YSo+KHF1ZXJ5RGF0YSk7CiAKLSAgICBpbnQg
c3RhcnRQb3NpdGlvbiA9IGRhdGEtPnBvc2l0aW9uOwotICAgIGludCBlbmRQb3NpdGlvbiA9IHN0
YXJ0UG9zaXRpb24gKyAxOworICAgIHVuc2lnbmVkIHN0YXJ0UG9zaXRpb24gPSBkYXRhLT5wb3Np
dGlvbjsKKyAgICB1bnNpZ25lZCBlbmRQb3NpdGlvbiA9IHN0YXJ0UG9zaXRpb24gKyAxOwogICAg
IGlmICghbWFwU3RhcnRFbmRQb3NpdGlvbnNJbnRvRnJhZ21lbnRDb29yZGluYXRlcyhxdWVyeURh
dGEsIGZyYWdtZW50LCBzdGFydFBvc2l0aW9uLCBlbmRQb3NpdGlvbikpCiAgICAgICAgIHJldHVy
biBmYWxzZTsKIApAQCAtNDg3LDggKzQ4OSw4IEBAIGJvb2wgU1ZHVGV4dFF1ZXJ5OjpleHRlbnRP
ZkNoYXJhY3RlckNhbGxiYWNrKERhdGEqIHF1ZXJ5RGF0YSwgY29uc3QgU1ZHVGV4dEZyYWdtCiB7
CiAgICAgRXh0ZW50T2ZDaGFyYWN0ZXJEYXRhKiBkYXRhID0gc3RhdGljX2Nhc3Q8RXh0ZW50T2ZD
aGFyYWN0ZXJEYXRhKj4ocXVlcnlEYXRhKTsKIAotICAgIGludCBzdGFydFBvc2l0aW9uID0gZGF0
YS0+cG9zaXRpb247Ci0gICAgaW50IGVuZFBvc2l0aW9uID0gc3RhcnRQb3NpdGlvbiArIDE7Cisg
ICAgdW5zaWduZWQgc3RhcnRQb3NpdGlvbiA9IGRhdGEtPnBvc2l0aW9uOworICAgIHVuc2lnbmVk
IGVuZFBvc2l0aW9uID0gc3RhcnRQb3NpdGlvbiArIDE7CiAgICAgaWYgKCFtYXBTdGFydEVuZFBv
c2l0aW9uc0ludG9GcmFnbWVudENvb3JkaW5hdGVzKHF1ZXJ5RGF0YSwgZnJhZ21lbnQsIHN0YXJ0
UG9zaXRpb24sIGVuZFBvc2l0aW9uKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCkBAIC01MjIs
OCArNTI0LDggQEAgYm9vbCBTVkdUZXh0UXVlcnk6OmNoYXJhY3Rlck51bWJlckF0UG9zaXRpb25D
YWxsYmFjayhEYXRhKiBxdWVyeURhdGEsIGNvbnN0IFNWR1QKIAogICAgIEZsb2F0UmVjdCBleHRl
bnQ7CiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGZyYWdtZW50Lmxlbmd0aDsgKytpKSB7
Ci0gICAgICAgIGludCBzdGFydFBvc2l0aW9uID0gZGF0YS0+cHJvY2Vzc2VkQ2hhcmFjdGVycyAr
IGk7Ci0gICAgICAgIGludCBlbmRQb3NpdGlvbiA9IHN0YXJ0UG9zaXRpb24gKyAxOworICAgICAg
ICB1bnNpZ25lZCBzdGFydFBvc2l0aW9uID0gZGF0YS0+cHJvY2Vzc2VkQ2hhcmFjdGVycyArIGk7
CisgICAgICAgIHVuc2lnbmVkIGVuZFBvc2l0aW9uID0gc3RhcnRQb3NpdGlvbiArIDE7CiAgICAg
ICAgIGlmICghbWFwU3RhcnRFbmRQb3NpdGlvbnNJbnRvRnJhZ21lbnRDb29yZGluYXRlcyhxdWVy
eURhdGEsIGZyYWdtZW50LCBzdGFydFBvc2l0aW9uLCBlbmRQb3NpdGlvbikpCiAgICAgICAgICAg
ICBjb250aW51ZTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9T
VkdUZXh0UXVlcnkuaCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHVGV4dFF1ZXJ5
LmgKaW5kZXggNzIxYjJkZjhlMzMyNDVkYTg2NDMzODViZTZlZTJiMWQyYjA5MzhkZi4uMzg3MzBh
MzhkMDYxZTgyNWNkOTM3ZDc4MTg0YjhkM2IzZmEwZmFhZiAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdUZXh0UXVlcnkuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvc3ZnL1NWR1RleHRRdWVyeS5oCkBAIC01Miw4ICs1Miw4IEBAIHByaXZhdGU6CiAg
ICAgYm9vbCBleGVjdXRlUXVlcnkoRGF0YSosIFByb2Nlc3NUZXh0RnJhZ21lbnRDYWxsYmFjaykg
Y29uc3Q7CiAKICAgICB2b2lkIGNvbGxlY3RUZXh0Qm94ZXNJbkZsb3dCb3goSW5saW5lRmxvd0Jv
eCopOwotICAgIGJvb2wgbWFwU3RhcnRFbmRQb3NpdGlvbnNJbnRvRnJhZ21lbnRDb29yZGluYXRl
cyhEYXRhKiwgY29uc3QgU1ZHVGV4dEZyYWdtZW50JiwgaW50JiBzdGFydFBvc2l0aW9uLCBpbnQm
IGVuZFBvc2l0aW9uKSBjb25zdDsKLSAgICB2b2lkIG1vZGlmeVN0YXJ0RW5kUG9zaXRpb25zUmVz
cGVjdGluZ0xpZ2F0dXJlcyhEYXRhKiwgaW50JiBzdGFydFBvc2l0aW9uLCBpbnQmIGVuZFBvc2l0
aW9uKSBjb25zdDsKKyAgICBib29sIG1hcFN0YXJ0RW5kUG9zaXRpb25zSW50b0ZyYWdtZW50Q29v
cmRpbmF0ZXMoRGF0YSosIGNvbnN0IFNWR1RleHRGcmFnbWVudCYsIHVuc2lnbmVkJiBzdGFydFBv
c2l0aW9uLCB1bnNpZ25lZCYgZW5kUG9zaXRpb24pIGNvbnN0OworICAgIHZvaWQgbW9kaWZ5U3Rh
cnRFbmRQb3NpdGlvbnNSZXNwZWN0aW5nTGlnYXR1cmVzKERhdGEqLCB1bnNpZ25lZCYgc3RhcnRQ
b3NpdGlvbiwgdW5zaWduZWQmIGVuZFBvc2l0aW9uKSBjb25zdDsKIAogcHJpdmF0ZToKICAgICBi
b29sIG51bWJlck9mQ2hhcmFjdGVyc0NhbGxiYWNrKERhdGEqLCBjb25zdCBTVkdUZXh0RnJhZ21l
bnQmKSBjb25zdDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZH
VGV4dFJ1blJlbmRlcmluZ0NvbnRleHQuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2
Zy9TVkdUZXh0UnVuUmVuZGVyaW5nQ29udGV4dC5jcHAKaW5kZXggNjE3NzM4NjNjN2NmNDMzMmUy
ZDQzOWMxMWRmYTllNzdmZGI3ZDg3NC4uMjEyOTg0OGZjYWZmY2UzYjQ1ZDU1YjA4NDJmMTJmNTI3
YmJkZjkwZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdUZXh0
UnVuUmVuZGVyaW5nQ29udGV4dC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2
Zy9TVkdUZXh0UnVuUmVuZGVyaW5nQ29udGV4dC5jcHAKQEAgLTEwMyw3ICsxMDMsNyBAQCBib29s
IFNWR1RleHRSdW5SZW5kZXJpbmdDb250ZXh0OjphcHBseVNWR0tlcm5pbmcoY29uc3QgU2ltcGxl
Rm9udERhdGEqIGZvbnREYXRhLAogCiBjbGFzcyBTVkdHbHlwaFRvUGF0aFRyYW5zbGF0b3IgZmlu
YWwgOiBwdWJsaWMgR2x5cGhUb1BhdGhUcmFuc2xhdG9yIHsKIHB1YmxpYzoKLSAgICBTVkdHbHlw
aFRvUGF0aFRyYW5zbGF0b3IoY29uc3QgVGV4dFJ1biogY29uc3QsIGNvbnN0IEdseXBoQnVmZmVy
JiwgY29uc3QgRmxvYXRQb2ludCYsIGNvbnN0IFNWR0ZvbnREYXRhJiwgU1ZHRm9udEVsZW1lbnQm
LCBjb25zdCBpbnQgZnJvbSwgY29uc3QgaW50IG51bUdseXBocywgZmxvYXQgc2NhbGUsIGJvb2wg
aXNWZXJ0aWNhbFRleHQpOworICAgIFNWR0dseXBoVG9QYXRoVHJhbnNsYXRvcihjb25zdCBUZXh0
UnVuKiBjb25zdCwgY29uc3QgR2x5cGhCdWZmZXImLCBjb25zdCBGbG9hdFBvaW50JiwgY29uc3Qg
U1ZHRm9udERhdGEmLCBTVkdGb250RWxlbWVudCYsIHVuc2lnbmVkIGZyb20sIHVuc2lnbmVkIG51
bUdseXBocywgZmxvYXQgc2NhbGUsIGJvb2wgaXNWZXJ0aWNhbFRleHQpOwogcHJpdmF0ZToKICAg
ICB2aXJ0dWFsIGJvb2wgY29udGFpbnNNb3JlUGF0aHMoKSBvdmVycmlkZQogICAgIHsKQEAgLTEy
MywxNSArMTIzLDE1IEBAIHByaXZhdGU6CiAgICAgRmxvYXRQb2ludCBtX2N1cnJlbnRQb2ludDsK
ICAgICBGbG9hdFBvaW50IG1fZ2x5cGhPcmlnaW47CiAgICAgU1ZHR2x5cGggbV9zdmdHbHlwaDsK
LSAgICBpbnQgbV9pbmRleDsKKyAgICB1bnNpZ25lZCBtX2luZGV4OwogICAgIEdseXBoIG1fZ2x5
cGg7CiAgICAgU1ZHRm9udEVsZW1lbnQmIG1fZm9udEVsZW1lbnQ7Ci0gICAgY29uc3QgZmxvYXQg
bV9zdG9wcGluZ1BvaW50OworICAgIGNvbnN0IHVuc2lnbmVkIG1fc3RvcHBpbmdQb2ludDsKICAg
ICBjb25zdCBmbG9hdCBtX3NjYWxlOwogICAgIGNvbnN0IGJvb2wgbV9pc1ZlcnRpY2FsVGV4dDsK
IH07CiAKLVNWR0dseXBoVG9QYXRoVHJhbnNsYXRvcjo6U1ZHR2x5cGhUb1BhdGhUcmFuc2xhdG9y
KGNvbnN0IFRleHRSdW4qIGNvbnN0IHRleHRSdW4sIGNvbnN0IEdseXBoQnVmZmVyJiBnbHlwaEJ1
ZmZlciwgY29uc3QgRmxvYXRQb2ludCYgcG9pbnQsIGNvbnN0IFNWR0ZvbnREYXRhJiBzdmdGb250
RGF0YSwgU1ZHRm9udEVsZW1lbnQmIGZvbnRFbGVtZW50LCBjb25zdCBpbnQgZnJvbSwgY29uc3Qg
aW50IG51bUdseXBocywgZmxvYXQgc2NhbGUsIGJvb2wgaXNWZXJ0aWNhbFRleHQpCitTVkdHbHlw
aFRvUGF0aFRyYW5zbGF0b3I6OlNWR0dseXBoVG9QYXRoVHJhbnNsYXRvcihjb25zdCBUZXh0UnVu
KiBjb25zdCB0ZXh0UnVuLCBjb25zdCBHbHlwaEJ1ZmZlciYgZ2x5cGhCdWZmZXIsIGNvbnN0IEZs
b2F0UG9pbnQmIHBvaW50LCBjb25zdCBTVkdGb250RGF0YSYgc3ZnRm9udERhdGEsIFNWR0ZvbnRF
bGVtZW50JiBmb250RWxlbWVudCwgdW5zaWduZWQgZnJvbSwgdW5zaWduZWQgbnVtR2x5cGhzLCBm
bG9hdCBzY2FsZSwgYm9vbCBpc1ZlcnRpY2FsVGV4dCkKICAgICA6IG1fdGV4dFJ1bih0ZXh0UnVu
KQogICAgICwgbV9nbHlwaEJ1ZmZlcihnbHlwaEJ1ZmZlcikKICAgICAsIG1fc3ZnRm9udERhdGEo
c3ZnRm9udERhdGEpCkBAIC0yODcsNyArMjg3LDcgQEAgdm9pZCBTVkdUZXh0UnVuUmVuZGVyaW5n
Q29udGV4dDo6ZHJhd1NWR0dseXBocyhHcmFwaGljc0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IFMK
ICAgICB9CiB9CiAKLUdseXBoRGF0YSBTVkdUZXh0UnVuUmVuZGVyaW5nQ29udGV4dDo6Z2x5cGhE
YXRhRm9yQ2hhcmFjdGVyKGNvbnN0IEZvbnQmIGZvbnQsIFdpZHRoSXRlcmF0b3ImIGl0ZXJhdG9y
LCBVQ2hhcjMyIGNoYXJhY3RlciwgYm9vbCBtaXJyb3IsIGludCBjdXJyZW50Q2hhcmFjdGVyLCB1
bnNpZ25lZCYgYWR2YW5jZUxlbmd0aCkKK0dseXBoRGF0YSBTVkdUZXh0UnVuUmVuZGVyaW5nQ29u
dGV4dDo6Z2x5cGhEYXRhRm9yQ2hhcmFjdGVyKGNvbnN0IEZvbnQmIGZvbnQsIFdpZHRoSXRlcmF0
b3ImIGl0ZXJhdG9yLCBVQ2hhcjMyIGNoYXJhY3RlciwgYm9vbCBtaXJyb3IsIHVuc2lnbmVkIGN1
cnJlbnRDaGFyYWN0ZXIsIHVuc2lnbmVkJiBhZHZhbmNlTGVuZ3RoKQogewogICAgIGNvbnN0IFNp
bXBsZUZvbnREYXRhKiBwcmltYXJ5Rm9udCA9IGZvbnQucHJpbWFyeUZvbnQoKTsKICAgICBBU1NF
UlQocHJpbWFyeUZvbnQpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2
Zy9TVkdUZXh0UnVuUmVuZGVyaW5nQ29udGV4dC5oIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L3N2Zy9TVkdUZXh0UnVuUmVuZGVyaW5nQ29udGV4dC5oCmluZGV4IGQwYjkxZjZjYjM0OGVlNzNj
YzYxZDQ5MzhiYTE0ZDQ2NGMwYWNhNmQuLjFkZDY0NmI1NzBjZDZjNThlNmQ0NmJmMDU3NGY2OTNj
ZmFiYjQ3NWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHVGV4
dFJ1blJlbmRlcmluZ0NvbnRleHQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3Zn
L1NWR1RleHRSdW5SZW5kZXJpbmdDb250ZXh0LmgKQEAgLTQyLDcgKzQyLDcgQEAgcHVibGljOgog
ICAgIFJlbmRlclNWR1Jlc291cmNlKiBhY3RpdmVQYWludGluZ1Jlc291cmNlKCkgY29uc3QgeyBy
ZXR1cm4gbV9hY3RpdmVQYWludGluZ1Jlc291cmNlOyB9CiAgICAgdm9pZCBzZXRBY3RpdmVQYWlu
dGluZ1Jlc291cmNlKFJlbmRlclNWR1Jlc291cmNlKiBvYmplY3QpIHsgbV9hY3RpdmVQYWludGlu
Z1Jlc291cmNlID0gb2JqZWN0OyB9CiAKLSAgICB2aXJ0dWFsIEdseXBoRGF0YSBnbHlwaERhdGFG
b3JDaGFyYWN0ZXIoY29uc3QgRm9udCYsIFdpZHRoSXRlcmF0b3ImLCBVQ2hhcjMyIGNoYXJhY3Rl
ciwgYm9vbCBtaXJyb3IsIGludCBjdXJyZW50Q2hhcmFjdGVyLCB1bnNpZ25lZCYgYWR2YW5jZUxl
bmd0aCkgb3ZlcnJpZGU7CisgICAgdmlydHVhbCBHbHlwaERhdGEgZ2x5cGhEYXRhRm9yQ2hhcmFj
dGVyKGNvbnN0IEZvbnQmLCBXaWR0aEl0ZXJhdG9yJiwgVUNoYXIzMiBjaGFyYWN0ZXIsIGJvb2wg
bWlycm9yLCB1bnNpZ25lZCBjdXJyZW50Q2hhcmFjdGVyLCB1bnNpZ25lZCYgYWR2YW5jZUxlbmd0
aCkgb3ZlcnJpZGU7CiAgICAgdmlydHVhbCB2b2lkIGRyYXdTVkdHbHlwaHMoR3JhcGhpY3NDb250
ZXh0KiwgY29uc3QgU2ltcGxlRm9udERhdGEqLCBjb25zdCBHbHlwaEJ1ZmZlciYsIGludCBmcm9t
LCBpbnQgdG8sIGNvbnN0IEZsb2F0UG9pbnQmKSBjb25zdCBvdmVycmlkZTsKICAgICB2aXJ0dWFs
IGZsb2F0IGZsb2F0V2lkdGhVc2luZ1NWR0ZvbnQoY29uc3QgRm9udCYsIGNvbnN0IFRleHRSdW4m
LCBpbnQmIGNoYXJzQ29uc3VtZWQsIFN0cmluZyYgZ2x5cGhOYW1lKSBjb25zdCBvdmVycmlkZTsK
ICAgICB2aXJ0dWFsIGJvb2wgYXBwbHlTVkdLZXJuaW5nKGNvbnN0IFNpbXBsZUZvbnREYXRhKiwg
V2lkdGhJdGVyYXRvciYsIEdseXBoQnVmZmVyKiwgaW50IGZyb20pIGNvbnN0IG92ZXJyaWRlOwpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZvbnREYXRhLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL3N2Zy9TVkdGb250RGF0YS5jcHAKaW5kZXggODA3MTBjZTZjZmNjNThhYmI2ZGRiMWY5
MWUzZmQ0ZDIyZTQyYzBkYy4uODI1ZTU5ZjlhZDA0ODcyMmE2NTIxMzFlNTMyMjAxYjk1MDk2ODk1
ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZvbnREYXRhLmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9zdmcvU1ZHRm9udERhdGEuY3BwCkBAIC0xMzAsMTEgKzEzMCwxMSBAQCBm
bG9hdCBTVkdGb250RGF0YTo6d2lkdGhGb3JTVkdHbHlwaChHbHlwaCBnbHlwaCwgZmxvYXQgZm9u
dFNpemUpIGNvbnN0CiAgICAgcmV0dXJuIHN2Z0dseXBoLmhvcml6b250YWxBZHZhbmNlWCAqIHNj
YWxlRW1Ub1VuaXRzKGZvbnRTaXplLCBzdmdGb250RmFjZUVsZW1lbnQtPnVuaXRzUGVyRW0oKSk7
CiB9CiAKLWJvb2wgU1ZHRm9udERhdGE6OmFwcGx5U1ZHR2x5cGhTZWxlY3Rpb24oV2lkdGhJdGVy
YXRvciYgaXRlcmF0b3IsIEdseXBoRGF0YSYgZ2x5cGhEYXRhLCBib29sIG1pcnJvciwgaW50IGN1
cnJlbnRDaGFyYWN0ZXIsIHVuc2lnbmVkJiBhZHZhbmNlTGVuZ3RoKSBjb25zdAorYm9vbCBTVkdG
b250RGF0YTo6YXBwbHlTVkdHbHlwaFNlbGVjdGlvbihXaWR0aEl0ZXJhdG9yJiBpdGVyYXRvciwg
R2x5cGhEYXRhJiBnbHlwaERhdGEsIGJvb2wgbWlycm9yLCB1bnNpZ25lZCBjdXJyZW50Q2hhcmFj
dGVyLCB1bnNpZ25lZCYgYWR2YW5jZUxlbmd0aCkgY29uc3QKIHsKICAgICBjb25zdCBUZXh0UnVu
JiBydW4gPSBpdGVyYXRvci5ydW4oKTsKICAgICBWZWN0b3I8U1ZHR2x5cGg6OkFyYWJpY0Zvcm0+
JiBhcmFiaWNGb3JtcyA9IGl0ZXJhdG9yLmFyYWJpY0Zvcm1zKCk7Ci0gICAgQVNTRVJUKGludChy
dW4uY2hhcmFjdGVyc0xlbmd0aCgpKSA+PSBjdXJyZW50Q2hhcmFjdGVyKTsKKyAgICBBU1NFUlQo
cnVuLmNoYXJhY3RlcnNMZW5ndGgoKSA+PSBjdXJyZW50Q2hhcmFjdGVyKTsKIAogICAgIC8vIEFz
c29jaWF0ZSB0ZXh0IHdpdGggYXJhYmljIGZvcm1zLCBpZiBuZWVkZWQuCiAgICAgU3RyaW5nIHJl
bWFpbmluZ1RleHRJblJ1bjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGb250
RGF0YS5oIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZvbnREYXRhLmgKaW5kZXggNzI3MjhhMTdh
YTQ0YjM5NmNkMDQxMjRiNTEyNDkyMzgwY2YyMjQzOS4uMzI1MGE0NWY2ZDM3NzdmODMxZTgyYjMy
ZDZhMjM0NThkZGQzNTZmYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZvbnRE
YXRhLmgKKysrIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZvbnREYXRhLmgKQEAgLTM2LDcgKzM2
LDcgQEAgcHVibGljOgogICAgIHZpcnR1YWwgdm9pZCBpbml0aWFsaXplRm9udERhdGEoU2ltcGxl
Rm9udERhdGEqLCBmbG9hdCBmb250U2l6ZSkgb3ZlcnJpZGU7CiAgICAgdmlydHVhbCBmbG9hdCB3
aWR0aEZvclNWR0dseXBoKEdseXBoLCBmbG9hdCBmb250U2l6ZSkgY29uc3Qgb3ZlcnJpZGU7CiAg
ICAgdmlydHVhbCBib29sIGZpbGxTVkdHbHlwaFBhZ2UoR2x5cGhQYWdlKiwgdW5zaWduZWQgb2Zm
c2V0LCB1bnNpZ25lZCBsZW5ndGgsIFVDaGFyKiBidWZmZXIsIHVuc2lnbmVkIGJ1ZmZlckxlbmd0
aCwgY29uc3QgU2ltcGxlRm9udERhdGEqKSBjb25zdCBvdmVycmlkZTsKLSAgICB2aXJ0dWFsIGJv
b2wgYXBwbHlTVkdHbHlwaFNlbGVjdGlvbihXaWR0aEl0ZXJhdG9yJiwgR2x5cGhEYXRhJiwgYm9v
bCBtaXJyb3IsIGludCBjdXJyZW50Q2hhcmFjdGVyLCB1bnNpZ25lZCYgYWR2YW5jZUxlbmd0aCkg
Y29uc3Qgb3ZlcnJpZGU7CisgICAgdmlydHVhbCBib29sIGFwcGx5U1ZHR2x5cGhTZWxlY3Rpb24o
V2lkdGhJdGVyYXRvciYsIEdseXBoRGF0YSYsIGJvb2wgbWlycm9yLCB1bnNpZ25lZCBjdXJyZW50
Q2hhcmFjdGVyLCB1bnNpZ25lZCYgYWR2YW5jZUxlbmd0aCkgY29uc3Qgb3ZlcnJpZGU7CiAKICAg
ICBTVkdGb250RmFjZUVsZW1lbnQqIHN2Z0ZvbnRGYWNlRWxlbWVudCgpIGNvbnN0IHsgcmV0dXJu
IG1fc3ZnRm9udEZhY2VFbGVtZW50OyB9CiAK
</data>
<flag name="review"
          id="257985"
          type_id="1"
          status="+"
          setter="zalan"
    />
          </attachment>
      

    </bug>

</bugzilla>