<?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>60783</bug_id>
          
          <creation_ts>2011-05-13 11:52:05 -0700</creation_ts>
          <short_desc>Switch addFocusRingRects to use IntPoint</short_desc>
          <delta_ts>2011-05-25 10:04:57 -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></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>60318</blocked>
    
    <blocked>60789</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Levi Weintraub">leviw</reporter>
          <assigned_to name="Levi Weintraub">leviw</assigned_to>
          <cc>darin</cc>
    
    <cc>eae</cc>
    
    <cc>eric</cc>
    
    <cc>simon.fraser</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>403718</commentid>
    <comment_count>0</comment_count>
    <who name="Levi Weintraub">leviw</who>
    <bug_when>2011-05-13 11:52:05 -0700</bug_when>
    <thetext>This is a low-level function taking tx/ty offsets that can be switched to IntPoint without forcing too many other areas to follow suit.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>403720</commentid>
    <comment_count>1</comment_count>
    <who name="Levi Weintraub">leviw</who>
    <bug_when>2011-05-13 11:54:32 -0700</bug_when>
    <thetext>Erm, I mean IntSize!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>403748</commentid>
    <comment_count>2</comment_count>
    <who name="Levi Weintraub">leviw</who>
    <bug_when>2011-05-13 12:29:14 -0700</bug_when>
    <thetext>This isn&apos;t explicitly a paint call, though it&apos;s called from paint functions and ultimately results in coordinates for the paint system, so I&apos;m not sure paintOffset is quite right here. Perhaps offsetForPainting?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>403862</commentid>
    <comment_count>3</comment_count>
      <attachid>93511</attachid>
    <who name="Levi Weintraub">leviw</who>
    <bug_when>2011-05-13 14:32:53 -0700</bug_when>
    <thetext>Created attachment 93511
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>403874</commentid>
    <comment_count>4</comment_count>
      <attachid>93511</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2011-05-13 14:42:55 -0700</bug_when>
    <thetext>Comment on attachment 93511
Patch

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

&gt; Source/WebCore/rendering/RenderBlock.cpp:5852
&gt; +void RenderBlock::addFocusRingRects(Vector&lt;IntRect&gt;&amp; rects, const IntSize&amp; offset)

Seems like this is an IntPoint?  originInParent?  Or maybe we should compute originInParent from offset?  In any case, &quot;offset&quot; needs a better name.  offset to what?  offset in what?  what is &quot;offset&quot;?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>403882</commentid>
    <comment_count>5</comment_count>
    <who name="Levi Weintraub">leviw</who>
    <bug_when>2011-05-13 14:45:58 -0700</bug_when>
    <thetext>I brought this up in IRC too and got nowhere. There will be a similar issue with hit testing. Perhaps this is where we typedef something like RootOffset to IntSize and include a comment about what it is and how it&apos;s used? Otherwise naming this is thoroughly non-trivial :-/</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>403976</commentid>
    <comment_count>6</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2011-05-13 17:18:22 -0700</bug_when>
    <thetext>Certainly if tx,ty,width,height is an IntRect, we want tx,ty to be an IntPoint, not an IntSize.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>408611</commentid>
    <comment_count>7</comment_count>
      <attachid>94554</attachid>
    <who name="Levi Weintraub">leviw</who>
    <bug_when>2011-05-23 20:53:28 -0700</bug_when>
    <thetext>Created attachment 94554
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>408621</commentid>
    <comment_count>8</comment_count>
      <attachid>94554</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2011-05-23 21:11:14 -0700</bug_when>
    <thetext>Comment on attachment 94554
Patch

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

&gt; Source/WebCore/rendering/RenderBlock.h:332
&gt; +    virtual void addFocusRingRects(Vector&lt;IntRect&gt;&amp;, const IntPoint&amp;);

I think the IntPoint may need a name here.  I&apos;m not sure &quot;paintOffset&quot; is descriptive enough though. originInContainer?

&gt; Source/WebCore/rendering/RenderInline.cpp:1351
&gt; +            FloatPoint pos(paintOffset);

Why do we use a FloatPoint here if we just floor it later?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>408634</commentid>
    <comment_count>9</comment_count>
    <who name="Levi Weintraub">leviw</who>
    <bug_when>2011-05-23 21:49:22 -0700</bug_when>
    <thetext>(In reply to comment #8)
&gt; (From update of attachment 94554 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=94554&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/rendering/RenderBlock.h:332
&gt; &gt; +    virtual void addFocusRingRects(Vector&lt;IntRect&gt;&amp;, const IntPoint&amp;);
&gt; 
&gt; I think the IntPoint may need a name here.  I&apos;m not sure &quot;paintOffset&quot; is descriptive enough though. originInContainer?
&gt; 

Again, this is the real rub... I&apos;m happy to call it that if we&apos;re convinced that isn&apos;t misleading in some cases. Container is kind of an overloaded term. Simon&apos;s kind of my go-to guy for naming this, but last run through in IRC only yielded &quot;offset.&quot;

&gt; &gt; Source/WebCore/rendering/RenderInline.cpp:1351
&gt; &gt; +            FloatPoint pos(paintOffset);
&gt; 
&gt; Why do we use a FloatPoint here if we just floor it later?

Sheesh, good question. Sorry I missed that!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>408636</commentid>
    <comment_count>10</comment_count>
      <attachid>94554</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2011-05-23 21:52:54 -0700</bug_when>
    <thetext>Comment on attachment 94554
Patch

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

&gt;&gt;&gt; Source/WebCore/rendering/RenderBlock.h:332
&gt;&gt;&gt; +    virtual void addFocusRingRects(Vector&lt;IntRect&gt;&amp;, const IntPoint&amp;);
&gt;&gt; 
&gt;&gt; I think the IntPoint may need a name here.  I&apos;m not sure &quot;paintOffset&quot; is descriptive enough though. originInContainer?
&gt; 
&gt; Again, this is the real rub... I&apos;m happy to call it that if we&apos;re convinced that isn&apos;t misleading in some cases. Container is kind of an overloaded term. Simon&apos;s kind of my go-to guy for naming this, but last run through in IRC only yielded &quot;offset.&quot;

My understanding is that tx,ty mean differnet things in differnet plaes.  We need to enumerate those places and come up with consistent naming for each.  It seems here it&apos;s used as the origin of the RenderObject for which focus rings are being painted?  I assume that a normal focus ring is something like -5, -5, width + 10, height + 10? and tx, ty are then the x, y (in the containing block?) of the render object?

&gt;&gt;&gt; Source/WebCore/rendering/RenderInline.cpp:1351
&gt;&gt;&gt; +            FloatPoint pos(paintOffset);
&gt;&gt; 
&gt;&gt; Why do we use a FloatPoint here if we just floor it later?
&gt; 
&gt; Sheesh, good question. Sorry I missed that!

I mean, it&apos;s possible we&apos;re using intermediate float values (adding floats, etc), I didn&apos;t look at the code closely enough.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>408873</commentid>
    <comment_count>11</comment_count>
      <attachid>94554</attachid>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2011-05-24 08:29:09 -0700</bug_when>
    <thetext>Comment on attachment 94554
Patch

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

&gt;&gt;&gt;&gt; Source/WebCore/rendering/RenderBlock.h:332
&gt;&gt;&gt;&gt; +    virtual void addFocusRingRects(Vector&lt;IntRect&gt;&amp;, const IntPoint&amp;);
&gt;&gt;&gt; 
&gt;&gt;&gt; I think the IntPoint may need a name here.  I&apos;m not sure &quot;paintOffset&quot; is descriptive enough though. originInContainer?
&gt;&gt; 
&gt;&gt; Again, this is the real rub... I&apos;m happy to call it that if we&apos;re convinced that isn&apos;t misleading in some cases. Container is kind of an overloaded term. Simon&apos;s kind of my go-to guy for naming this, but last run through in IRC only yielded &quot;offset.&quot;
&gt; 
&gt; My understanding is that tx,ty mean differnet things in differnet plaes.  We need to enumerate those places and come up with consistent naming for each.  It seems here it&apos;s used as the origin of the RenderObject for which focus rings are being painted?  I assume that a normal focus ring is something like -5, -5, width + 10, height + 10? and tx, ty are then the x, y (in the containing block?) of the render object?

IIRC addFocusRingRects() is called at times other than painting (you can ask for a renderer&apos;s focus ring rects at any time), so paintOffset doesn&apos;t work so well. I&apos;m OK with &apos;offset&apos;, since we still don&apos;t have a good term for all the things that tx,ty can mean.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>408879</commentid>
    <comment_count>12</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2011-05-24 08:37:26 -0700</bug_when>
    <thetext>I feel like &quot;offset&quot; is as meaningless as &quot;size&quot; or &quot;o&quot; would be.  What&apos;s it an offset from?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>408911</commentid>
    <comment_count>13</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2011-05-24 09:15:04 -0700</bug_when>
    <thetext>(In reply to comment #12)
&gt; I feel like &quot;offset&quot; is as meaningless as &quot;size&quot; or &quot;o&quot; would be.  What&apos;s it an offset from?

That’s not a meaningful question for this function.

The function adds rectangles to a vector and also adds an offset to each rectangle while doing so. The meaning of the offset is known to the caller but not to this function. As far as this function is concerned, it is just an offset to add to the rectangles while adding them to the vector.

Another design would be to remove the offset and apply the offset to the rectangles separately after constructing the vector.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>408940</commentid>
    <comment_count>14</comment_count>
    <who name="Levi Weintraub">leviw</who>
    <bug_when>2011-05-24 09:57:56 -0700</bug_when>
    <thetext>(In reply to comment #13)
&gt; Another design would be to remove the offset and apply the offset to the rectangles separately after constructing the vector.

I think we&apos;re better off keeping the offset since some overloaded versions of this function adjust this offset differently, and I believe it makes the most sense to keep that logic in its respective class.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>408942</commentid>
    <comment_count>15</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2011-05-24 10:00:46 -0700</bug_when>
    <thetext>(In reply to comment #14)
&gt; I think we&apos;re better off keeping the offset since some overloaded versions of this function adjust this offset differently, and I believe it makes the most sense to keep that logic in its respective class.

I’m not sure that’s right. Adjusting the offset is simply applying another offset. That could be done inside the overloaded functions regardless of whether an offset is passed in to the function.

But my main point is that giving a meaningful name explaining what the offset is “relative to” would not be correct for this function.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>408953</commentid>
    <comment_count>16</comment_count>
      <attachid>94634</attachid>
    <who name="Levi Weintraub">leviw</who>
    <bug_when>2011-05-24 10:08:54 -0700</bug_when>
    <thetext>Created attachment 94634
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>409040</commentid>
    <comment_count>17</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2011-05-24 11:33:11 -0700</bug_when>
    <thetext>Perhaps “additionalOffset” would be a good name.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>409043</commentid>
    <comment_count>18</comment_count>
    <who name="Levi Weintraub">leviw</who>
    <bug_when>2011-05-24 11:34:18 -0700</bug_when>
    <thetext>(In reply to comment #17)
&gt; Perhaps “additionalOffset” would be a good name.

Sounds reasonable.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>409104</commentid>
    <comment_count>19</comment_count>
      <attachid>94663</attachid>
    <who name="Levi Weintraub">leviw</who>
    <bug_when>2011-05-24 12:27:40 -0700</bug_when>
    <thetext>Created attachment 94663
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>409322</commentid>
    <comment_count>20</comment_count>
      <attachid>94719</attachid>
    <who name="Levi Weintraub">leviw</who>
    <bug_when>2011-05-24 17:12:37 -0700</bug_when>
    <thetext>Created attachment 94719
Patch

Re-uploading without unintentional xcodeproj change.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>409353</commentid>
    <comment_count>21</comment_count>
      <attachid>94719</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2011-05-24 18:52:48 -0700</bug_when>
    <thetext>Comment on attachment 94719
Patch

OK.  Darin convinced me of the &quot;offset&quot; case.  Thanks for all your work on this.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>409717</commentid>
    <comment_count>22</comment_count>
      <attachid>94719</attachid>
    <who name="Levi Weintraub">leviw</who>
    <bug_when>2011-05-25 10:04:51 -0700</bug_when>
    <thetext>Comment on attachment 94719
Patch

Clearing flags on attachment: 94719

Committed r87302: &lt;http://trac.webkit.org/changeset/87302&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>409718</commentid>
    <comment_count>23</comment_count>
    <who name="Levi Weintraub">leviw</who>
    <bug_when>2011-05-25 10:04:57 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>93511</attachid>
            <date>2011-05-13 14:32:53 -0700</date>
            <delta_ts>2011-05-23 20:53:24 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-60783-20110513143252.patch</filename>
            <type>text/plain</type>
            <size>21711</size>
            <attacher name="Levi Weintraub">leviw</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDg2NDYwKQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsNDggQEAKKzIwMTEtMDUtMTMgIExldmkgV2Vp
bnRyYXViICA8bGV2aXdAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9E
WSAoT09QUyEpLgorCisgICAgICAgIFN3aXRjaCBhZGRGb2N1c1JpbmdSZWN0cyB0byB1c2UgSW50
U2l6ZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjA3
ODMKKworICAgICAgICBTd2l0Y2hpbmcgYWRkRm9jdXNSaW5nUmVjdHMgdG8gdXNlIGFuIEludFNp
emUgcmVwcmVzZW50aW5nIHRoZQorICAgICAgICBsYXlvdXQgb2Zmc2V0IHVzZWQgZm9yIHBhaW50
aW5nIGFuZCBoaXQgdGVzdGluZy4KKworICAgICAgICBObyBuZXcgdGVzdHMgYXMgdGhpcyBpcyBv
bmx5IHJlZmFjdG9yaW5nLgorCisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckJsb2NrLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrOjphZGRGb2N1c1JpbmdSZWN0cyk6CisgICAg
ICAgICogcmVuZGVyaW5nL1JlbmRlckJsb2NrLmg6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRl
ckJveC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCb3g6OmFkZEZvY3VzUmluZ1JlY3Rz
KToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyQm94Lmg6CisgICAgICAgICogcmVuZGVyaW5n
L1JlbmRlcklubGluZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJJbmxpbmU6OmFkZEZv
Y3VzUmluZ1JlY3RzKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVySW5saW5lLmg6CisgICAg
ICAgICogcmVuZGVyaW5nL1JlbmRlckxpc3RCb3guY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVu
ZGVyTGlzdEJveDo6YWRkRm9jdXNSaW5nUmVjdHMpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5k
ZXJMaXN0Qm94Lmg6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlck9iamVjdC5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpSZW5kZXJPYmplY3Q6OnBhaW50Rm9jdXNSaW5nKToKKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlck9iamVjdDo6YWJzb2x1dGVGb2N1c1JpbmdRdWFkcyk6CisgICAgICAgICog
cmVuZGVyaW5nL1JlbmRlck9iamVjdC5oOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyT2JqZWN0
OjphZGRGb2N1c1JpbmdSZWN0cyk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlclRleHRDb250
cm9sLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRleHRDb250cm9sOjphZGRGb2N1c1Jp
bmdSZWN0cyk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlclRleHRDb250cm9sLmg6CisgICAg
ICAgICogcmVuZGVyaW5nL1JlbmRlclRleHRDb250cm9sU2luZ2xlTGluZS5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpSZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmU6OmFkZEZvY3VzUmluZ1JlY3Rz
KToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lLmg6Cisg
ICAgICAgICogcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdDb250YWluZXIuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6UmVuZGVyU1ZHQ29udGFpbmVyOjphZGRGb2N1c1JpbmdSZWN0cyk6CisgICAgICAg
ICogcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdDb250YWluZXIuaDoKKyAgICAgICAgKiByZW5kZXJp
bmcvc3ZnL1JlbmRlclNWR0ltYWdlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNWR0lt
YWdlOjphZGRGb2N1c1JpbmdSZWN0cyk6CisgICAgICAgICogcmVuZGVyaW5nL3N2Zy9SZW5kZXJT
VkdJbWFnZS5oOgorICAgICAgICAqIHJlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUGF0aC5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJTVkdQYXRoOjphZGRGb2N1c1JpbmdSZWN0cyk6CisgICAg
ICAgICogcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdQYXRoLmg6CisKIDIwMTEtMDUtMTMgIEFsZXhl
eSBQcm9za3VyeWFrb3YgIDxhcEBhcHBsZS5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgSm9z
ZXBoIFBlY29yYXJvLgpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2Nr
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2su
Y3BwCShyZXZpc2lvbiA4NjQ1NykKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJC
bG9jay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU4NDksNyArNTg0OSw3IEBAIEludFJlY3QgUmVu
ZGVyQmxvY2s6OmxvY2FsQ2FyZXRSZWN0KElubGkKICAgICByZXR1cm4gSW50UmVjdCh4LCB5LCBj
YXJldFdpZHRoLCBoZWlnaHQpOwogfQogCi12b2lkIFJlbmRlckJsb2NrOjphZGRGb2N1c1JpbmdS
ZWN0cyhWZWN0b3I8SW50UmVjdD4mIHJlY3RzLCBpbnQgdHgsIGludCB0eSkKK3ZvaWQgUmVuZGVy
QmxvY2s6OmFkZEZvY3VzUmluZ1JlY3RzKFZlY3RvcjxJbnRSZWN0PiYgcmVjdHMsIGNvbnN0IElu
dFNpemUmIG9mZnNldCkKIHsKICAgICAvLyBGb3IgYmxvY2tzIGluc2lkZSBpbmxpbmVzLCB3ZSBn
byBhaGVhZCBhbmQgaW5jbHVkZSBtYXJnaW5zIHNvIHRoYXQgd2UgcnVuIHJpZ2h0IHVwIHRvIHRo
ZQogICAgIC8vIGlubGluZSBib3hlcyBhYm92ZSBhbmQgYmVsb3cgdXMgKHRodXMgZ2V0dGluZyBt
ZXJnZWQgd2l0aCB0aGVtIHRvIGZvcm0gYSBzaW5nbGUgaXJyZWd1bGFyCkBAIC01ODYzLDE3ICs1
ODYzLDE3IEBAIHZvaWQgUmVuZGVyQmxvY2s6OmFkZEZvY3VzUmluZ1JlY3RzKFZlY3QKICAgICAg
ICAgYm9vbCBwcmV2SW5saW5lSGFzTGluZUJveCA9IHRvUmVuZGVySW5saW5lKGlubGluZUVsZW1l
bnRDb250aW51YXRpb24oKS0+bm9kZSgpLT5yZW5kZXJlcigpKS0+Zmlyc3RMaW5lQm94KCk7IAog
ICAgICAgICBpbnQgdG9wTWFyZ2luID0gcHJldklubGluZUhhc0xpbmVCb3ggPyBjb2xsYXBzZWRN
YXJnaW5CZWZvcmUoKSA6IDA7CiAgICAgICAgIGludCBib3R0b21NYXJnaW4gPSBuZXh0SW5saW5l
SGFzTGluZUJveCA/IGNvbGxhcHNlZE1hcmdpbkFmdGVyKCkgOiAwOwotICAgICAgICBJbnRSZWN0
IHJlY3QodHgsIHR5IC0gdG9wTWFyZ2luLCB3aWR0aCgpLCBoZWlnaHQoKSArIHRvcE1hcmdpbiAr
IGJvdHRvbU1hcmdpbik7CisgICAgICAgIEludFJlY3QgcmVjdChvZmZzZXQud2lkdGgoKSwgb2Zm
c2V0LmhlaWdodCgpIC0gdG9wTWFyZ2luLCB3aWR0aCgpLCBoZWlnaHQoKSArIHRvcE1hcmdpbiAr
IGJvdHRvbU1hcmdpbik7CiAgICAgICAgIGlmICghcmVjdC5pc0VtcHR5KCkpCiAgICAgICAgICAg
ICByZWN0cy5hcHBlbmQocmVjdCk7CiAgICAgfSBlbHNlIGlmICh3aWR0aCgpICYmIGhlaWdodCgp
KQotICAgICAgICByZWN0cy5hcHBlbmQoSW50UmVjdCh0eCwgdHksIHdpZHRoKCksIGhlaWdodCgp
KSk7CisgICAgICAgIHJlY3RzLmFwcGVuZChJbnRSZWN0KHRvUG9pbnQob2Zmc2V0KSwgc2l6ZSgp
KSk7CiAKICAgICBpZiAoIWhhc092ZXJmbG93Q2xpcCgpICYmICFoYXNDb250cm9sQ2xpcCgpKSB7
CiAgICAgICAgIGZvciAoUm9vdElubGluZUJveCogY3VyciA9IGZpcnN0Um9vdEJveCgpOyBjdXJy
OyBjdXJyID0gY3Vyci0+bmV4dFJvb3RCb3goKSkgewogICAgICAgICAgICAgaW50IHRvcCA9IG1h
eChjdXJyLT5saW5lVG9wKCksIGN1cnItPmxvZ2ljYWxUb3AoKSk7CiAgICAgICAgICAgICBpbnQg
Ym90dG9tID0gbWluKGN1cnItPmxpbmVCb3R0b20oKSwgY3Vyci0+bG9naWNhbFRvcCgpICsgY3Vy
ci0+bG9naWNhbEhlaWdodCgpKTsKLSAgICAgICAgICAgIEludFJlY3QgcmVjdCh0eCArIGN1cnIt
PngoKSwgdHkgKyB0b3AsIGN1cnItPmxvZ2ljYWxXaWR0aCgpLCBib3R0b20gLSB0b3ApOworICAg
ICAgICAgICAgSW50UmVjdCByZWN0KG9mZnNldC53aWR0aCgpICsgY3Vyci0+eCgpLCBvZmZzZXQu
aGVpZ2h0KCkgKyB0b3AsIGN1cnItPmxvZ2ljYWxXaWR0aCgpLCBib3R0b20gLSB0b3ApOwogICAg
ICAgICAgICAgaWYgKCFyZWN0LmlzRW1wdHkoKSkKICAgICAgICAgICAgICAgICByZWN0cy5hcHBl
bmQocmVjdCk7CiAgICAgICAgIH0KQEAgLTU4ODYsMTYgKzU4ODYsMTQgQEAgdm9pZCBSZW5kZXJC
bG9jazo6YWRkRm9jdXNSaW5nUmVjdHMoVmVjdAogICAgICAgICAgICAgICAgIGlmIChib3gtPmxh
eWVyKCkpIAogICAgICAgICAgICAgICAgICAgICBwb3MgPSBjdXJyLT5sb2NhbFRvQWJzb2x1dGUo
KTsKICAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAgIHBvcyA9IEZsb2F0
UG9pbnQodHggKyBib3gtPngoKSwgdHkgKyBib3gtPnkoKSk7Ci0gICAgICAgICAgICAgICAgYm94
LT5hZGRGb2N1c1JpbmdSZWN0cyhyZWN0cywgcG9zLngoKSwgcG9zLnkoKSk7CisgICAgICAgICAg
ICAgICAgICAgIHBvcyA9IEZsb2F0UG9pbnQob2Zmc2V0LndpZHRoKCkgKyBib3gtPngoKSwgb2Zm
c2V0LmhlaWdodCgpICsgYm94LT55KCkpOworICAgICAgICAgICAgICAgIGJveC0+YWRkRm9jdXNS
aW5nUmVjdHMocmVjdHMsIEludFNpemUocG9zLngoKSwgcG9zLnkoKSkpOwogICAgICAgICAgICAg
fQogICAgICAgICB9CiAgICAgfQogCiAgICAgaWYgKGlubGluZUVsZW1lbnRDb250aW51YXRpb24o
KSkKLSAgICAgICAgaW5saW5lRWxlbWVudENvbnRpbnVhdGlvbigpLT5hZGRGb2N1c1JpbmdSZWN0
cyhyZWN0cywgCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgdHggLSB4KCkgKyBpbmxpbmVFbGVtZW50Q29udGludWF0aW9uKCktPmNvbnRhaW5p
bmdCbG9jaygpLT54KCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgdHkgLSB5KCkgKyBpbmxpbmVFbGVtZW50Q29udGludWF0aW9uKCktPmNv
bnRhaW5pbmdCbG9jaygpLT55KCkpOworICAgICAgICBpbmxpbmVFbGVtZW50Q29udGludWF0aW9u
KCktPmFkZEZvY3VzUmluZ1JlY3RzKHJlY3RzLCBpbmxpbmVFbGVtZW50Q29udGludWF0aW9uKCkt
PmNvbnRhaW5pbmdCbG9jaygpLT5sb2NhdGlvbigpIC0gbG9jYXRpb24oKSArIG9mZnNldCk7CiB9
CiAKIFJlbmRlckJsb2NrKiBSZW5kZXJCbG9jazo6Y3JlYXRlQW5vbnltb3VzQmxvY2soYm9vbCBp
c0ZsZXhpYmxlQm94KSBjb25zdApJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
ckJsb2NrLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJs
b2NrLmgJKHJldmlzaW9uIDg2NDU3KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
ckJsb2NrLmgJKHdvcmtpbmcgY29weSkKQEAgLTMxNyw3ICszMTcsNyBAQCBwcm90ZWN0ZWQ6CiAg
ICAgdm9pZCBhZGRPdmVyZmxvd0Zyb21CbG9ja0NoaWxkcmVuKCk7CiAgICAgdm9pZCBhZGRPdmVy
Zmxvd0Zyb21JbmxpbmVDaGlsZHJlbigpOwogCi0gICAgdmlydHVhbCB2b2lkIGFkZEZvY3VzUmlu
Z1JlY3RzKFZlY3RvcjxJbnRSZWN0PiYsIGludCB0eCwgaW50IHR5KTsKKyAgICB2aXJ0dWFsIHZv
aWQgYWRkRm9jdXNSaW5nUmVjdHMoVmVjdG9yPEludFJlY3Q+JiwgY29uc3QgSW50U2l6ZSYpOwog
CiAjaWYgRU5BQkxFKFNWRykKICAgICAvLyBPbmx5IHVzZWQgYnkgUmVuZGVyU1ZHVGV4dCwgd2hp
Y2ggZXhwbGljaXRlbHkgb3ZlcnJpZGVzIFJlbmRlckJsb2NrOjpsYXlvdXRCbG9jaygpLCBkbyBO
T1QgdXNlIGZvciBhbnl0aGluZyBlbHNlLgpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlckJveC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlckJveC5jcHAJKHJldmlzaW9uIDg2NDU3KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlckJveC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTUwNiwxMCArNTA2LDEwIEBAIEludFJl
Y3QgUmVuZGVyQm94OjpvdXRsaW5lQm91bmRzRm9yUmVwYWkKICAgICByZXR1cm4gYm94OwogfQog
Ci12b2lkIFJlbmRlckJveDo6YWRkRm9jdXNSaW5nUmVjdHMoVmVjdG9yPEludFJlY3Q+JiByZWN0
cywgaW50IHR4LCBpbnQgdHkpCit2b2lkIFJlbmRlckJveDo6YWRkRm9jdXNSaW5nUmVjdHMoVmVj
dG9yPEludFJlY3Q+JiByZWN0cywgY29uc3QgSW50U2l6ZSYgb2Zmc2V0KQogewotICAgIGlmICh3
aWR0aCgpICYmIGhlaWdodCgpKQotICAgICAgICByZWN0cy5hcHBlbmQoSW50UmVjdCh0eCwgdHks
IHdpZHRoKCksIGhlaWdodCgpKSk7CisgICAgaWYgKCFzaXplKCkuaXNFbXB0eSgpKQorICAgICAg
ICByZWN0cy5hcHBlbmQoSW50UmVjdCh0b1BvaW50KG9mZnNldCksIHNpemUoKSkpOwogfQogCiBJ
bnRSZWN0IFJlbmRlckJveDo6cmVmbGVjdGlvbkJveCgpIGNvbnN0CkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyQm94LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlckJveC5oCShyZXZpc2lvbiA4NjQ1NykKKysrIFNvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJCb3guaAkod29ya2luZyBjb3B5KQpAQCAtMTI4LDcgKzEyOCw3IEBA
IHB1YmxpYzoKIAogICAgIC8vIEJvdW5kcyBvZiB0aGUgb3V0bGluZSBib3ggaW4gYWJzb2x1dGUg
Y29vcmRzLiBSZXNwZWN0cyB0cmFuc2Zvcm1zCiAgICAgdmlydHVhbCBJbnRSZWN0IG91dGxpbmVC
b3VuZHNGb3JSZXBhaW50KFJlbmRlckJveE1vZGVsT2JqZWN0KiAvKnJlcGFpbnRDb250YWluZXIq
LywgSW50UG9pbnQqIGNhY2hlZE9mZnNldFRvUmVwYWludENvbnRhaW5lcikgY29uc3Q7Ci0gICAg
dmlydHVhbCB2b2lkIGFkZEZvY3VzUmluZ1JlY3RzKFZlY3RvcjxJbnRSZWN0PiYsIGludCB0eCwg
aW50IHR5KTsKKyAgICB2aXJ0dWFsIHZvaWQgYWRkRm9jdXNSaW5nUmVjdHMoVmVjdG9yPEludFJl
Y3Q+JiwgY29uc3QgSW50U2l6ZSYpOwogCiAgICAgLy8gVXNlIHRoaXMgd2l0aCBjYXV0aW9uISBO
byB0eXBlIGNoZWNraW5nIGlzIGRvbmUhCiAgICAgUmVuZGVyQm94KiBwcmV2aW91c1NpYmxpbmdC
b3goKSBjb25zdDsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJJbmxpbmUu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJJbmxpbmUu
Y3BwCShyZXZpc2lvbiA4NjQ1NykKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJJ
bmxpbmUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMzM3LDM2ICsxMzM3LDMyIEBAIHZvaWQgUmVu
ZGVySW5saW5lOjppbWFnZUNoYW5nZWQoV3JhcHBlZEkKICAgICByZXBhaW50KCk7CiB9CiAKLXZv
aWQgUmVuZGVySW5saW5lOjphZGRGb2N1c1JpbmdSZWN0cyhWZWN0b3I8SW50UmVjdD4mIHJlY3Rz
LCBpbnQgdHgsIGludCB0eSkKK3ZvaWQgUmVuZGVySW5saW5lOjphZGRGb2N1c1JpbmdSZWN0cyhW
ZWN0b3I8SW50UmVjdD4mIHJlY3RzLCBjb25zdCBJbnRTaXplJiBvZmZzZXQpCiB7CiAgICAgaWYg
KCFhbHdheXNDcmVhdGVMaW5lQm94ZXMoKSkKLSAgICAgICAgY3VsbGVkSW5saW5lQWJzb2x1dGVS
ZWN0cyh0aGlzLCByZWN0cywgSW50U2l6ZSh0eCwgdHkpKTsKKyAgICAgICAgY3VsbGVkSW5saW5l
QWJzb2x1dGVSZWN0cyh0aGlzLCByZWN0cywgb2Zmc2V0KTsKICAgICBlbHNlIHsKICAgICAgICAg
Zm9yIChJbmxpbmVGbG93Qm94KiBjdXJyID0gZmlyc3RMaW5lQm94KCk7IGN1cnI7IGN1cnIgPSBj
dXJyLT5uZXh0TGluZUJveCgpKQotICAgICAgICAgICAgcmVjdHMuYXBwZW5kKGVuY2xvc2luZ0lu
dFJlY3QoRmxvYXRSZWN0KHR4ICsgY3Vyci0+eCgpLCB0eSArIGN1cnItPnkoKSwgY3Vyci0+d2lk
dGgoKSwgY3Vyci0+aGVpZ2h0KCkpKSk7CisgICAgICAgICAgICByZWN0cy5hcHBlbmQoZW5jbG9z
aW5nSW50UmVjdChGbG9hdFJlY3Qob2Zmc2V0LndpZHRoKCkgKyBjdXJyLT54KCksIG9mZnNldC5o
ZWlnaHQoKSArIGN1cnItPnkoKSwgY3Vyci0+d2lkdGgoKSwgY3Vyci0+aGVpZ2h0KCkpKSk7CiAg
ICAgfQogCiAgICAgZm9yIChSZW5kZXJPYmplY3QqIGN1cnIgPSBmaXJzdENoaWxkKCk7IGN1cnI7
IGN1cnIgPSBjdXJyLT5uZXh0U2libGluZygpKSB7CiAgICAgICAgIGlmICghY3Vyci0+aXNUZXh0
KCkgJiYgIWN1cnItPmlzTGlzdE1hcmtlcigpKSB7Ci0gICAgICAgICAgICBGbG9hdFBvaW50IHBv
cyh0eCwgdHkpOworICAgICAgICAgICAgRmxvYXRQb2ludCBwb3Mob2Zmc2V0LndpZHRoKCksIG9m
ZnNldC5oZWlnaHQoKSk7CiAgICAgICAgICAgICAvLyBGSVhNRTogVGhpcyBkb2Vzbid0IHdvcmsg
Y29ycmVjdGx5IHdpdGggdHJhbnNmb3Jtcy4KICAgICAgICAgICAgIGlmIChjdXJyLT5oYXNMYXll
cigpKSAKICAgICAgICAgICAgICAgICBwb3MgPSBjdXJyLT5sb2NhbFRvQWJzb2x1dGUoKTsKICAg
ICAgICAgICAgIGVsc2UgaWYgKGN1cnItPmlzQm94KCkpCiAgICAgICAgICAgICAgICAgcG9zLm1v
dmUodG9SZW5kZXJCb3goY3VyciktPngoKSwgdG9SZW5kZXJCb3goY3VyciktPnkoKSk7Ci0gICAg
ICAgICAgICBjdXJyLT5hZGRGb2N1c1JpbmdSZWN0cyhyZWN0cywgcG9zLngoKSwgcG9zLnkoKSk7
CisgICAgICAgICAgICBjdXJyLT5hZGRGb2N1c1JpbmdSZWN0cyhyZWN0cywgSW50U2l6ZShwb3Mu
eCgpLCBwb3MueSgpKSk7CiAgICAgICAgIH0KICAgICB9CiAKICAgICBpZiAoY29udGludWF0aW9u
KCkpIHsKICAgICAgICAgaWYgKGNvbnRpbnVhdGlvbigpLT5pc0lubGluZSgpKQotICAgICAgICAg
ICAgY29udGludWF0aW9uKCktPmFkZEZvY3VzUmluZ1JlY3RzKHJlY3RzLCAKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eCAtIGNvbnRhaW5pbmdCbG9jaygp
LT54KCkgKyBjb250aW51YXRpb24oKS0+Y29udGFpbmluZ0Jsb2NrKCktPngoKSwKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eSAtIGNvbnRhaW5pbmdCbG9j
aygpLT55KCkgKyBjb250aW51YXRpb24oKS0+Y29udGFpbmluZ0Jsb2NrKCktPnkoKSk7CisgICAg
ICAgICAgICBjb250aW51YXRpb24oKS0+YWRkRm9jdXNSaW5nUmVjdHMocmVjdHMsIGNvbnRpbnVh
dGlvbigpLT5jb250YWluaW5nQmxvY2soKS0+bG9jYXRpb24oKSAtIGNvbnRhaW5pbmdCbG9jaygp
LT5sb2NhdGlvbigpICsgb2Zmc2V0KTsKICAgICAgICAgZWxzZQotICAgICAgICAgICAgY29udGlu
dWF0aW9uKCktPmFkZEZvY3VzUmluZ1JlY3RzKHJlY3RzLCAKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB0eCAtIGNvbnRhaW5pbmdCbG9jaygpLT54KCkgKyB0
b1JlbmRlckJveChjb250aW51YXRpb24oKSktPngoKSwKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB0eSAtIGNvbnRhaW5pbmdCbG9jaygpLT55KCkgKyB0b1Jl
bmRlckJveChjb250aW51YXRpb24oKSktPnkoKSk7CisgICAgICAgICAgICBjb250aW51YXRpb24o
KS0+YWRkRm9jdXNSaW5nUmVjdHMocmVjdHMsIHRvUmVuZGVyQm94KGNvbnRpbnVhdGlvbigpKS0+
bG9jYXRpb24oKSAtIGNvbnRhaW5pbmdCbG9jaygpLT5sb2NhdGlvbigpICsgb2Zmc2V0KTsKICAg
ICB9CiB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJJbmxpbmUuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVySW5saW5lLmgJKHJl
dmlzaW9uIDg2NDU3KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlcklubGluZS5o
CSh3b3JraW5nIGNvcHkpCkBAIC03NSw3ICs3NSw3IEBAIHB1YmxpYzoKICAgICAKICAgICBJbnRT
aXplIHJlbGF0aXZlUG9zaXRpb25lZElubGluZU9mZnNldChjb25zdCBSZW5kZXJCb3gqIGNoaWxk
KSBjb25zdDsKIAotICAgIHZpcnR1YWwgdm9pZCBhZGRGb2N1c1JpbmdSZWN0cyhWZWN0b3I8SW50
UmVjdD4mLCBpbnQgdHgsIGludCB0eSk7CisgICAgdmlydHVhbCB2b2lkIGFkZEZvY3VzUmluZ1Jl
Y3RzKFZlY3RvcjxJbnRSZWN0PiYsIGNvbnN0IEludFNpemUmKTsKICAgICB2b2lkIHBhaW50T3V0
bGluZShHcmFwaGljc0NvbnRleHQqLCBpbnQgdHgsIGludCB0eSk7CiAKICAgICB1c2luZyBSZW5k
ZXJCb3hNb2RlbE9iamVjdDo6Y29udGludWF0aW9uOwpJbmRleDogU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlckxpc3RCb3guY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJMaXN0Qm94LmNwcAkocmV2aXNpb24gODY0NTcpCisrKyBTb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyTGlzdEJveC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMwMSwx
NyArMzAxLDE3IEBAIHZvaWQgUmVuZGVyTGlzdEJveDo6cGFpbnRPYmplY3QoUGFpbnRJbmYKICAg
ICB9CiB9CiAKLXZvaWQgUmVuZGVyTGlzdEJveDo6YWRkRm9jdXNSaW5nUmVjdHMoVmVjdG9yPElu
dFJlY3Q+JiByZWN0cywgaW50IHR4LCBpbnQgdHkpCit2b2lkIFJlbmRlckxpc3RCb3g6OmFkZEZv
Y3VzUmluZ1JlY3RzKFZlY3RvcjxJbnRSZWN0PiYgcmVjdHMsIGNvbnN0IEludFNpemUmIG9mZnNl
dCkKIHsKICAgICBpZiAoIWlzU3BhdGlhbE5hdmlnYXRpb25FbmFibGVkKGZyYW1lKCkpKQotICAg
ICAgICByZXR1cm4gUmVuZGVyQmxvY2s6OmFkZEZvY3VzUmluZ1JlY3RzKHJlY3RzLCB0eCwgdHkp
OworICAgICAgICByZXR1cm4gUmVuZGVyQmxvY2s6OmFkZEZvY3VzUmluZ1JlY3RzKHJlY3RzLCBv
ZmZzZXQpOwogCiAgICAgU2VsZWN0RWxlbWVudCogc2VsZWN0ID0gdG9TZWxlY3RFbGVtZW50KHN0
YXRpY19jYXN0PEVsZW1lbnQqPihub2RlKCkpKTsKIAogICAgIC8vIEZvY3VzIHRoZSBsYXN0IHNl
bGVjdGVkIGl0ZW0uCiAgICAgaW50IHNlbGVjdGVkSXRlbSA9IHNlbGVjdC0+YWN0aXZlU2VsZWN0
aW9uRW5kTGlzdEluZGV4KCk7CiAgICAgaWYgKHNlbGVjdGVkSXRlbSA+PSAwKSB7Ci0gICAgICAg
IHJlY3RzLmFwcGVuZChpdGVtQm91bmRpbmdCb3hSZWN0KHR4LCB0eSwgc2VsZWN0ZWRJdGVtKSk7
CisgICAgICAgIHJlY3RzLmFwcGVuZChpdGVtQm91bmRpbmdCb3hSZWN0KG9mZnNldC53aWR0aCgp
LCBvZmZzZXQuaGVpZ2h0KCksIHNlbGVjdGVkSXRlbSkpOwogICAgICAgICByZXR1cm47CiAgICAg
fQogCkBAIC0zMjEsNyArMzIxLDcgQEAgdm9pZCBSZW5kZXJMaXN0Qm94OjphZGRGb2N1c1JpbmdS
ZWN0cyhWZQogICAgIGZvciAoaW50IGkgPSAwOyBpIDwgc2l6ZTsgKytpKSB7CiAgICAgICAgIE9w
dGlvbkVsZW1lbnQqIG9wdGlvbkVsZW1lbnQgPSB0b09wdGlvbkVsZW1lbnQobGlzdEl0ZW1zW2ld
KTsKICAgICAgICAgaWYgKG9wdGlvbkVsZW1lbnQgJiYgIW9wdGlvbkVsZW1lbnQtPmRpc2FibGVk
KCkpIHsKLSAgICAgICAgICAgIHJlY3RzLmFwcGVuZChpdGVtQm91bmRpbmdCb3hSZWN0KHR4LCB0
eSwgaSkpOworICAgICAgICAgICAgcmVjdHMuYXBwZW5kKGl0ZW1Cb3VuZGluZ0JveFJlY3Qob2Zm
c2V0LndpZHRoKCksIG9mZnNldC5oZWlnaHQoKSwgaSkpOwogICAgICAgICAgICAgcmV0dXJuOwog
ICAgICAgICB9CiAgICAgfQpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxp
c3RCb3guaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGlz
dEJveC5oCShyZXZpc2lvbiA4NjQ1NykKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJMaXN0Qm94LmgJKHdvcmtpbmcgY29weSkKQEAgLTc5LDcgKzc5LDcgQEAgcHJpdmF0ZToKIAog
ICAgIHZpcnR1YWwgdm9pZCBsYXlvdXQoKTsKIAotICAgIHZpcnR1YWwgdm9pZCBhZGRGb2N1c1Jp
bmdSZWN0cyhWZWN0b3I8SW50UmVjdD4mLCBpbnQgdHgsIGludCB0eSk7CisgICAgdmlydHVhbCB2
b2lkIGFkZEZvY3VzUmluZ1JlY3RzKFZlY3RvcjxJbnRSZWN0PiYsIGNvbnN0IEludFNpemUmKTsK
IAogICAgIHZpcnR1YWwgYm9vbCBjYW5CZVByb2dyYW1hdGljYWxseVNjcm9sbGVkKGJvb2wpIGNv
bnN0IHsgcmV0dXJuIHRydWU7IH0KICAgICB2aXJ0dWFsIHZvaWQgYXV0b3Njcm9sbCgpOwpJbmRl
eDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck9iamVjdC5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck9iamVjdC5jcHAJKHJldmlzaW9uIDg2
NDU3KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck9iamVjdC5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTEwMDAsNyArMTAwMCw3IEBAIHZvaWQgUmVuZGVyT2JqZWN0OjpkcmF3QXJj
Rm9yQm94U2lkZShHcmEKIHZvaWQgUmVuZGVyT2JqZWN0OjpwYWludEZvY3VzUmluZyhHcmFwaGlj
c0NvbnRleHQqIGNvbnRleHQsIGludCB0eCwgaW50IHR5LCBSZW5kZXJTdHlsZSogc3R5bGUpCiB7
CiAgICAgVmVjdG9yPEludFJlY3Q+IGZvY3VzUmluZ1JlY3RzOwotICAgIGFkZEZvY3VzUmluZ1Jl
Y3RzKGZvY3VzUmluZ1JlY3RzLCB0eCwgdHkpOworICAgIGFkZEZvY3VzUmluZ1JlY3RzKGZvY3Vz
UmluZ1JlY3RzLCBJbnRTaXplKHR4LCB0eSkpOwogICAgIGlmIChzdHlsZS0+b3V0bGluZVN0eWxl
SXNBdXRvKCkpCiAgICAgICAgIGNvbnRleHQtPmRyYXdGb2N1c1JpbmcoZm9jdXNSaW5nUmVjdHMs
IHN0eWxlLT5vdXRsaW5lV2lkdGgoKSwgc3R5bGUtPm91dGxpbmVPZmZzZXQoKSwgc3R5bGUtPnZp
c2l0ZWREZXBlbmRlbnRDb2xvcihDU1NQcm9wZXJ0eU91dGxpbmVDb2xvcikpOwogICAgIGVsc2UK
QEAgLTExMTksOCArMTExOSw4IEBAIHZvaWQgUmVuZGVyT2JqZWN0OjphYnNvbHV0ZUZvY3VzUmlu
Z1F1YWQKICAgICAvLyBpbXBsaWNpdGx5IGFzc3VtZXMgdGhhdC4gVGhpcyBkb2Vzbid0IHdvcmsg
Y29ycmVjdGx5IHdpdGggdHJhbnNmb3JtZWQKICAgICAvLyBkZXNjZW5kYW50cy4KICAgICBGbG9h
dFBvaW50IGFic29sdXRlUG9pbnQgPSBsb2NhbFRvQWJzb2x1dGUoKTsKLSAgICBhZGRGb2N1c1Jp
bmdSZWN0cyhyZWN0cywgYWJzb2x1dGVQb2ludC54KCksIGFic29sdXRlUG9pbnQueSgpKTsKLSAg
ICBzaXplX3QgY291bnQgPSByZWN0cy5zaXplKCk7CisgICAgYWRkRm9jdXNSaW5nUmVjdHMocmVj
dHMsIEludFNpemUoYWJzb2x1dGVQb2ludC54KCksIGFic29sdXRlUG9pbnQueSgpKSk7CisgICAg
c2l6ZV90IGNvdW50ID0gcmVjdHMuc2l6ZSgpOyAKICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8
IGNvdW50OyArK2kpIHsKICAgICAgICAgSW50UmVjdCByZWN0ID0gcmVjdHNbaV07CiAgICAgICAg
IHJlY3QubW92ZSgtYWJzb2x1dGVQb2ludC54KCksIC1hYnNvbHV0ZVBvaW50LnkoKSk7CkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck9iamVjdC5oCShyZXZpc2lvbiA4NjQ1NykK
KysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJPYmplY3QuaAkod29ya2luZyBjb3B5
KQpAQCAtNzc1LDcgKzc3NSw3IEBAIHB1YmxpYzoKICAgICBib29sIHNob3VsZFVzZVRyYW5zZm9y
bUZyb21Db250YWluZXIoY29uc3QgUmVuZGVyT2JqZWN0KiBjb250YWluZXIpIGNvbnN0OwogICAg
IHZvaWQgZ2V0VHJhbnNmb3JtRnJvbUNvbnRhaW5lcihjb25zdCBSZW5kZXJPYmplY3QqIGNvbnRh
aW5lciwgY29uc3QgSW50U2l6ZSYgb2Zmc2V0SW5Db250YWluZXIsIFRyYW5zZm9ybWF0aW9uTWF0
cml4JikgY29uc3Q7CiAgICAgCi0gICAgdmlydHVhbCB2b2lkIGFkZEZvY3VzUmluZ1JlY3RzKFZl
Y3RvcjxJbnRSZWN0PiYsIGludCAvKnR4Ki8sIGludCAvKnR5Ki8pIHsgfTsKKyAgICB2aXJ0dWFs
IHZvaWQgYWRkRm9jdXNSaW5nUmVjdHMoVmVjdG9yPEludFJlY3Q+JiwgY29uc3QgSW50U2l6ZSYp
IHsgfTsKIAogICAgIEludFJlY3QgYWJzb2x1dGVPdXRsaW5lQm91bmRzKCkgY29uc3QKICAgICB7
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4dENvbnRyb2wuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0Q29udHJvbC5j
cHAJKHJldmlzaW9uIDg2NDU3KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRl
eHRDb250cm9sLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTk4LDEwICs1OTgsMTAgQEAgdm9pZCBS
ZW5kZXJUZXh0Q29udHJvbDo6c2VsZWN0aW9uQ2hhbmdlZAogICAgIH0KIH0KIAotdm9pZCBSZW5k
ZXJUZXh0Q29udHJvbDo6YWRkRm9jdXNSaW5nUmVjdHMoVmVjdG9yPEludFJlY3Q+JiByZWN0cywg
aW50IHR4LCBpbnQgdHkpCit2b2lkIFJlbmRlclRleHRDb250cm9sOjphZGRGb2N1c1JpbmdSZWN0
cyhWZWN0b3I8SW50UmVjdD4mIHJlY3RzLCBjb25zdCBJbnRTaXplJiBvZmZzZXQpCiB7Ci0gICAg
aWYgKHdpZHRoKCkgJiYgaGVpZ2h0KCkpCi0gICAgICAgIHJlY3RzLmFwcGVuZChJbnRSZWN0KHR4
LCB0eSwgd2lkdGgoKSwgaGVpZ2h0KCkpKTsKKyAgICBpZiAoIXNpemUoKS5pc0VtcHR5KCkpCisg
ICAgICAgIHJlY3RzLmFwcGVuZChJbnRSZWN0KHRvUG9pbnQob2Zmc2V0KSwgc2l6ZSgpKSk7CiB9
CiAKIEhUTUxFbGVtZW50KiBSZW5kZXJUZXh0Q29udHJvbDo6aW5uZXJUZXh0RWxlbWVudCgpIGNv
bnN0CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4dENvbnRyb2wuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4dENvbnRyb2wu
aAkocmV2aXNpb24gODY0NTcpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4
dENvbnRyb2wuaAkod29ya2luZyBjb3B5KQpAQCAtOTQsNyArOTQsNyBAQCBwcml2YXRlOgogICAg
IHZvaWQgc2V0SW5uZXJUZXh0U3R5bGUoUGFzc1JlZlB0cjxSZW5kZXJTdHlsZT4pOwogICAgIHZp
cnR1YWwgdm9pZCBwYWludE9iamVjdChQYWludEluZm8mLCBpbnQgdHgsIGludCB0eSk7CiAgICAg
Ci0gICAgdmlydHVhbCB2b2lkIGFkZEZvY3VzUmluZ1JlY3RzKFZlY3RvcjxJbnRSZWN0PiYsIGlu
dCB0eCwgaW50IHR5KTsKKyAgICB2aXJ0dWFsIHZvaWQgYWRkRm9jdXNSaW5nUmVjdHMoVmVjdG9y
PEludFJlY3Q+JiwgY29uc3QgSW50U2l6ZSYpOwogCiAgICAgdmlydHVhbCBib29sIGNhbkJlUHJv
Z3JhbWF0aWNhbGx5U2Nyb2xsZWQoYm9vbCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsgfQogCkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4dENvbnRy
b2xTaW5nbGVMaW5lLmNwcAkocmV2aXNpb24gODY0NTcpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MjM3LDExICsyMzcsMTEgQEAgdm9pZCBSZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmU6OnBhaW50
QgogICAgIHBhaW50Qm94RGVjb3JhdGlvbnNXaXRoU2l6ZShwYWludEluZm8sIEludFJlY3QodHgs
IHR5LCB3aWR0aCgpIC0gZGVjb3JhdGlvbldpZHRoUmlnaHQoKSwgaGVpZ2h0KCkpKTsKIH0KIAot
dm9pZCBSZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmU6OmFkZEZvY3VzUmluZ1JlY3RzKFZlY3Rv
cjxJbnRSZWN0PiYgcmVjdHMsIGludCB0eCwgaW50IHR5KQordm9pZCBSZW5kZXJUZXh0Q29udHJv
bFNpbmdsZUxpbmU6OmFkZEZvY3VzUmluZ1JlY3RzKFZlY3RvcjxJbnRSZWN0PiYgcmVjdHMsIGNv
bnN0IEludFNpemUmIG9mZnNldCkKIHsKICAgICBpbnQgdyA9IHdpZHRoKCkgLSBkZWNvcmF0aW9u
V2lkdGhSaWdodCgpOwogICAgIGlmICh3ICYmIGhlaWdodCgpKQotICAgICAgICByZWN0cy5hcHBl
bmQoSW50UmVjdCh0eCwgdHksIHcsIGhlaWdodCgpKSk7CisgICAgICAgIHJlY3RzLmFwcGVuZChJ
bnRSZWN0KG9mZnNldC53aWR0aCgpLCBvZmZzZXQuaGVpZ2h0KCksIHcsIGhlaWdodCgpKSk7CiB9
CiAKIHZvaWQgUmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lOjpsYXlvdXQoKQpJbmRleDogU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRleHRDb250cm9sU2luZ2xlTGluZS5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0Q29udHJvbFNpbmds
ZUxpbmUuaAkocmV2aXNpb24gODY0NTcpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lLmgJKHdvcmtpbmcgY29weSkKQEAgLTY4LDcgKzY4LDcg
QEAgcHJpdmF0ZToKICAgICB2aXJ0dWFsIHZvaWQgc3VidHJlZUhhc0NoYW5nZWQoKTsKICAgICB2
aXJ0dWFsIHZvaWQgcGFpbnQoUGFpbnRJbmZvJiwgaW50IHR4LCBpbnQgdHkpOwogICAgIHZpcnR1
YWwgdm9pZCBwYWludEJveERlY29yYXRpb25zKFBhaW50SW5mbyYsIGludCB0eCwgaW50IHR5KTsK
LSAgICB2aXJ0dWFsIHZvaWQgYWRkRm9jdXNSaW5nUmVjdHMoVmVjdG9yPEludFJlY3Q+JiwgaW50
IHR4LCBpbnQgdHkpOworICAgIHZpcnR1YWwgdm9pZCBhZGRGb2N1c1JpbmdSZWN0cyhWZWN0b3I8
SW50UmVjdD4mLCBjb25zdCBJbnRTaXplJik7CiAgICAgdmlydHVhbCB2b2lkIGxheW91dCgpOwog
CiAgICAgdmlydHVhbCBib29sIG5vZGVBdFBvaW50KGNvbnN0IEhpdFRlc3RSZXF1ZXN0JiwgSGl0
VGVzdFJlc3VsdCYsIGludCB4LCBpbnQgeSwgaW50IHR4LCBpbnQgdHksIEhpdFRlc3RBY3Rpb24p
OwpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdDb250YWluZXIu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZH
Q29udGFpbmVyLmNwcAkocmV2aXNpb24gODY0NTcpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvc3ZnL1JlbmRlclNWR0NvbnRhaW5lci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEzOSw3ICsx
MzksNyBAQCB2b2lkIFJlbmRlclNWR0NvbnRhaW5lcjo6cGFpbnQoUGFpbnRJbmZvCiB9CiAKIC8v
IGFkZEZvY3VzUmluZ1JlY3RzIGlzIGNhbGxlZCBmcm9tIHBhaW50T3V0bGluZSBhbmQgbmVlZHMg
dG8gYmUgaW4gdGhlIHNhbWUgY29vcmRpbmF0ZXMgYXMgdGhlIHBhaW50T3VsaW5lIGNhbGwKLXZv
aWQgUmVuZGVyU1ZHQ29udGFpbmVyOjphZGRGb2N1c1JpbmdSZWN0cyhWZWN0b3I8SW50UmVjdD4m
IHJlY3RzLCBpbnQsIGludCkKK3ZvaWQgUmVuZGVyU1ZHQ29udGFpbmVyOjphZGRGb2N1c1JpbmdS
ZWN0cyhWZWN0b3I8SW50UmVjdD4mIHJlY3RzLCBjb25zdCBJbnRTaXplJikKIHsKICAgICBJbnRS
ZWN0IHBhaW50UmVjdEluUGFyZW50ID0gZW5jbG9zaW5nSW50UmVjdChsb2NhbFRvUGFyZW50VHJh
bnNmb3JtKCkubWFwUmVjdChyZXBhaW50UmVjdEluTG9jYWxDb29yZGluYXRlcygpKSk7CiAgICAg
aWYgKCFwYWludFJlY3RJblBhcmVudC5pc0VtcHR5KCkpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvc3ZnL1JlbmRlclNWR0NvbnRhaW5lci5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHQ29udGFpbmVyLmgJKHJldmlzaW9uIDg2NDU3
KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdDb250YWluZXIuaAko
d29ya2luZyBjb3B5KQpAQCAtNTEsNyArNTEsNyBAQCBwcm90ZWN0ZWQ6CiAKICAgICB2aXJ0dWFs
IHZvaWQgbGF5b3V0KCk7CiAKLSAgICB2aXJ0dWFsIHZvaWQgYWRkRm9jdXNSaW5nUmVjdHMoVmVj
dG9yPEludFJlY3Q+JiwgaW50IHR4LCBpbnQgdHkpOworICAgIHZpcnR1YWwgdm9pZCBhZGRGb2N1
c1JpbmdSZWN0cyhWZWN0b3I8SW50UmVjdD4mLCBjb25zdCBJbnRTaXplJik7CiAKICAgICB2aXJ0
dWFsIEZsb2F0UmVjdCBvYmplY3RCb3VuZGluZ0JveCgpIGNvbnN0IHsgcmV0dXJuIG1fb2JqZWN0
Qm91bmRpbmdCb3g7IH0KICAgICB2aXJ0dWFsIEZsb2F0UmVjdCBzdHJva2VCb3VuZGluZ0JveCgp
IGNvbnN0IHsgcmV0dXJuIG1fc3Ryb2tlQm91bmRpbmdCb3g7IH0KSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHSW1hZ2UuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHSW1hZ2UuY3BwCShyZXZpc2lvbiA4NjQ1
NykKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHSW1hZ2UuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0xNzksNyArMTc5LDcgQEAgdm9pZCBSZW5kZXJTVkdJbWFnZTo6aW1h
Z2VDaGFuZ2VkKFdyYXBwZQogICAgIHJlcGFpbnQoKTsKIH0KIAotdm9pZCBSZW5kZXJTVkdJbWFn
ZTo6YWRkRm9jdXNSaW5nUmVjdHMoVmVjdG9yPEludFJlY3Q+JiByZWN0cywgaW50LCBpbnQpCit2
b2lkIFJlbmRlclNWR0ltYWdlOjphZGRGb2N1c1JpbmdSZWN0cyhWZWN0b3I8SW50UmVjdD4mIHJl
Y3RzLCBjb25zdCBJbnRTaXplJikKIHsKICAgICAvLyB0aGlzIGlzIGNhbGxlZCBmcm9tIHBhaW50
KCkgYWZ0ZXIgdGhlIGxvY2FsVHJhbnNmb3JtIGhhcyBhbHJlYWR5IGJlZW4gYXBwbGllZAogICAg
IEludFJlY3QgY29udGVudFJlY3QgPSBlbmNsb3NpbmdJbnRSZWN0KHJlcGFpbnRSZWN0SW5Mb2Nh
bENvb3JkaW5hdGVzKCkpOwpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5k
ZXJTVkdJbWFnZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcv
UmVuZGVyU1ZHSW1hZ2UuaAkocmV2aXNpb24gODY0NTcpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvc3ZnL1JlbmRlclNWR0ltYWdlLmgJKHdvcmtpbmcgY29weSkKQEAgLTU3LDcgKzU3LDcg
QEAgcHJpdmF0ZToKICAgICB2aXJ0dWFsIEZsb2F0UmVjdCBzdHJva2VCb3VuZGluZ0JveCgpIGNv
bnN0IHsgcmV0dXJuIG1fb2JqZWN0Qm91bmRpbmdCb3g7IH0KICAgICB2aXJ0dWFsIEZsb2F0UmVj
dCByZXBhaW50UmVjdEluTG9jYWxDb29yZGluYXRlcygpIGNvbnN0IHsgcmV0dXJuIG1fcmVwYWlu
dEJvdW5kaW5nQm94OyB9CiAKLSAgICB2aXJ0dWFsIHZvaWQgYWRkRm9jdXNSaW5nUmVjdHMoVmVj
dG9yPEludFJlY3Q+JiwgaW50IHR4LCBpbnQgdHkpOworICAgIHZpcnR1YWwgdm9pZCBhZGRGb2N1
c1JpbmdSZWN0cyhWZWN0b3I8SW50UmVjdD4mLCBjb25zdCBJbnRTaXplJik7CiAKICAgICB2aXJ0
dWFsIHZvaWQgaW1hZ2VDaGFuZ2VkKFdyYXBwZWRJbWFnZVB0ciwgY29uc3QgSW50UmVjdCogPSAw
KTsKIApJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdQYXRoLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1Bh
dGguY3BwCShyZXZpc2lvbiA4NjQ1NykKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcv
UmVuZGVyU1ZHUGF0aC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIzNiw3ICsyMzYsNyBAQCB2b2lk
IFJlbmRlclNWR1BhdGg6OnBhaW50KFBhaW50SW5mbyYgcGFpCiAKIC8vIFRoaXMgbWV0aG9kIGlz
IGNhbGxlZCBmcm9tIGluc2lkZSBwYWludE91dGxpbmUoKSBzaW5jZSB3ZSBjYWxsIHBhaW50T3V0
bGluZSgpCiAvLyB3aGlsZSB0cmFuc2Zvcm1lZCB0byBvdXIgY29vcmQgc3lzdGVtLCByZXR1cm4g
bG9jYWwgY29vcmRzCi12b2lkIFJlbmRlclNWR1BhdGg6OmFkZEZvY3VzUmluZ1JlY3RzKFZlY3Rv
cjxJbnRSZWN0PiYgcmVjdHMsIGludCwgaW50KSAKK3ZvaWQgUmVuZGVyU1ZHUGF0aDo6YWRkRm9j
dXNSaW5nUmVjdHMoVmVjdG9yPEludFJlY3Q+JiByZWN0cywgY29uc3QgSW50U2l6ZSYpIAogewog
ICAgIEludFJlY3QgcmVjdCA9IGVuY2xvc2luZ0ludFJlY3QocmVwYWludFJlY3RJbkxvY2FsQ29v
cmRpbmF0ZXMoKSk7CiAgICAgaWYgKCFyZWN0LmlzRW1wdHkoKSkKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUGF0aC5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUGF0aC5oCShyZXZpc2lvbiA4NjQ1NykKKysr
IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUGF0aC5oCSh3b3JraW5nIGNv
cHkpCkBAIC02MSw3ICs2MSw3IEBAIHByaXZhdGU6CiAKICAgICB2aXJ0dWFsIHZvaWQgbGF5b3V0
KCk7CiAgICAgdmlydHVhbCB2b2lkIHBhaW50KFBhaW50SW5mbyYsIGludCBwYXJlbnRYLCBpbnQg
cGFyZW50WSk7Ci0gICAgdmlydHVhbCB2b2lkIGFkZEZvY3VzUmluZ1JlY3RzKFZlY3RvcjxJbnRS
ZWN0PiYsIGludCB0eCwgaW50IHR5KTsKKyAgICB2aXJ0dWFsIHZvaWQgYWRkRm9jdXNSaW5nUmVj
dHMoVmVjdG9yPEludFJlY3Q+JiwgY29uc3QgSW50U2l6ZSYpOwogCiAgICAgdmlydHVhbCBib29s
IG5vZGVBdEZsb2F0UG9pbnQoY29uc3QgSGl0VGVzdFJlcXVlc3QmLCBIaXRUZXN0UmVzdWx0Jiwg
Y29uc3QgRmxvYXRQb2ludCYgcG9pbnRJblBhcmVudCwgSGl0VGVzdEFjdGlvbik7CiAK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>94554</attachid>
            <date>2011-05-23 20:53:28 -0700</date>
            <delta_ts>2011-05-24 10:08:50 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-60783-20110523205326.patch</filename>
            <type>text/plain</type>
            <size>22752</size>
            <attacher name="Levi Weintraub">leviw</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDg3MTIzKQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsNTAgQEAKKzIwMTEtMDUtMjMgIExldmkgV2Vp
bnRyYXViICA8bGV2aXdAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9E
WSAoT09QUyEpLgorCisgICAgICAgIFN3aXRjaCBhZGRGb2N1c1JpbmdSZWN0cyB0byB1c2UgSW50
UG9pbnQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTYw
NzgzCisKKyAgICAgICAgU3dpdGNoaW5nIGFkZEZvY3VzUmluZ1JlY3RzIHRvIHVzZSBhbiBJbnRQ
b2ludCByZXByZXNlbnRpbmcgdGhlCisgICAgICAgIGxheW91dCBvZmZzZXQgdXNlZCBmb3IgcGFp
bnRpbmcgYW5kIGhpdCB0ZXN0aW5nLgorCisgICAgICAgIE5vIG5ldyB0ZXN0cyBhcyB0aGlzIGlz
IG9ubHkgcmVmYWN0b3JpbmcuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9GbG9hdFNp
emUuaDoKKyAgICAgICAgKFdlYkNvcmU6OmZsb29yZWRJbnRQb2ludCk6CisgICAgICAgICogcmVu
ZGVyaW5nL1JlbmRlckJsb2NrLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrOjph
ZGRGb2N1c1JpbmdSZWN0cyk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckJsb2NrLmg6Cisg
ICAgICAgICogcmVuZGVyaW5nL1JlbmRlckJveC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5k
ZXJCb3g6OmFkZEZvY3VzUmluZ1JlY3RzKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyQm94
Lmg6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlcklubGluZS5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpSZW5kZXJJbmxpbmU6OmFkZEZvY3VzUmluZ1JlY3RzKToKKyAgICAgICAgKiByZW5kZXJp
bmcvUmVuZGVySW5saW5lLmg6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckxpc3RCb3guY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGlzdEJveDo6YWRkRm9jdXNSaW5nUmVjdHMpOgor
ICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJMaXN0Qm94Lmg6CisgICAgICAgICogcmVuZGVyaW5n
L1JlbmRlck9iamVjdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJPYmplY3Q6OnBhaW50
Rm9jdXNSaW5nKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlck9iamVjdDo6YWJzb2x1dGVGb2N1
c1JpbmdRdWFkcyk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlck9iamVjdC5oOgorICAgICAg
ICAoV2ViQ29yZTo6UmVuZGVyT2JqZWN0OjphZGRGb2N1c1JpbmdSZWN0cyk6CisgICAgICAgICog
cmVuZGVyaW5nL1JlbmRlclRleHRDb250cm9sLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRl
clRleHRDb250cm9sOjphZGRGb2N1c1JpbmdSZWN0cyk6CisgICAgICAgICogcmVuZGVyaW5nL1Jl
bmRlclRleHRDb250cm9sLmg6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlclRleHRDb250cm9s
U2luZ2xlTGluZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUZXh0Q29udHJvbFNpbmds
ZUxpbmU6OmFkZEZvY3VzUmluZ1JlY3RzKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyVGV4
dENvbnRyb2xTaW5nbGVMaW5lLmg6CisgICAgICAgICogcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdD
b250YWluZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZHQ29udGFpbmVyOjphZGRG
b2N1c1JpbmdSZWN0cyk6CisgICAgICAgICogcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdDb250YWlu
ZXIuaDoKKyAgICAgICAgKiByZW5kZXJpbmcvc3ZnL1JlbmRlclNWR0ltYWdlLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OlJlbmRlclNWR0ltYWdlOjphZGRGb2N1c1JpbmdSZWN0cyk6CisgICAgICAg
ICogcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdJbWFnZS5oOgorICAgICAgICAqIHJlbmRlcmluZy9z
dmcvUmVuZGVyU1ZHUGF0aC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTVkdQYXRoOjph
ZGRGb2N1c1JpbmdSZWN0cyk6CisgICAgICAgICogcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdQYXRo
Lmg6CisKIDIwMTEtMDUtMjAgIE1PUklUQSBIYWppbWUgIDxtb3JyaXRhQGdvb2dsZS5jb20+CiAK
ICAgICAgICAgUmV2aWV3ZWQgYnkgRGltaXRyaSBHbGF6a292LgpJbmRleDogU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvRmxvYXRTaXplLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRmxvYXRTaXplLmgJKHJldmlzaW9uIDg3MTAzKQorKysg
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRmxvYXRTaXplLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTI4LDcgKzI4LDcgQEAKICNpZm5kZWYgRmxvYXRTaXplX2gKICNkZWZpbmUgRmxvYXRT
aXplX2gKIAotI2luY2x1ZGUgIkludFNpemUuaCIKKyNpbmNsdWRlICJJbnRQb2ludC5oIgogI2lu
Y2x1ZGUgPHd0Zi9NYXRoRXh0cmFzLmg+CiAKICNpZiBVU0UoQ0cpIHx8IChQTEFURk9STShXWCkg
JiYgT1MoREFSV0lOKSkgfHwgVVNFKFNLSUFfT05fTUFDX0NIUk9NRSkKQEAgLTE1NSw2ICsxNTUs
MTEgQEAgaW5saW5lIEludFNpemUgZXhwYW5kZWRJbnRTaXplKGNvbnN0IEZsbwogICAgIHJldHVy
biBJbnRTaXplKGNsYW1wVG9JbnRlZ2VyKGNlaWxmKHAud2lkdGgoKSkpLCBjbGFtcFRvSW50ZWdl
cihjZWlsZihwLmhlaWdodCgpKSkpOwogfQogCitpbmxpbmUgSW50UG9pbnQgZmxvb3JlZEludFBv
aW50KGNvbnN0IEZsb2F0U2l6ZSYgcCkKK3sKKyAgICByZXR1cm4gSW50UG9pbnQoc3RhdGljX2Nh
c3Q8aW50PihwLndpZHRoKCkpLCBzdGF0aWNfY2FzdDxpbnQ+KHAuaGVpZ2h0KCkpKTsKK30KKwog
fSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCiAjZW5kaWYgLy8gRmxvYXRTaXplX2gKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9jay5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrLmNwcAkocmV2aXNpb24gODcxMDMpCisr
KyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2suY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC01ODQ2LDcgKzU4NDYsNyBAQCBJbnRSZWN0IFJlbmRlckJsb2NrOjpsb2NhbENhcmV0UmVj
dChJbmxpCiAgICAgcmV0dXJuIEludFJlY3QoeCwgeSwgY2FyZXRXaWR0aCwgaGVpZ2h0KTsKIH0K
IAotdm9pZCBSZW5kZXJCbG9jazo6YWRkRm9jdXNSaW5nUmVjdHMoVmVjdG9yPEludFJlY3Q+JiBy
ZWN0cywgaW50IHR4LCBpbnQgdHkpCit2b2lkIFJlbmRlckJsb2NrOjphZGRGb2N1c1JpbmdSZWN0
cyhWZWN0b3I8SW50UmVjdD4mIHJlY3RzLCBjb25zdCBJbnRQb2ludCYgcGFpbnRPZmZzZXQpCiB7
CiAgICAgLy8gRm9yIGJsb2NrcyBpbnNpZGUgaW5saW5lcywgd2UgZ28gYWhlYWQgYW5kIGluY2x1
ZGUgbWFyZ2lucyBzbyB0aGF0IHdlIHJ1biByaWdodCB1cCB0byB0aGUKICAgICAvLyBpbmxpbmUg
Ym94ZXMgYWJvdmUgYW5kIGJlbG93IHVzICh0aHVzIGdldHRpbmcgbWVyZ2VkIHdpdGggdGhlbSB0
byBmb3JtIGEgc2luZ2xlIGlycmVndWxhcgpAQCAtNTg2MCwxNyArNTg2MCwxNyBAQCB2b2lkIFJl
bmRlckJsb2NrOjphZGRGb2N1c1JpbmdSZWN0cyhWZWN0CiAgICAgICAgIGJvb2wgcHJldklubGlu
ZUhhc0xpbmVCb3ggPSB0b1JlbmRlcklubGluZShpbmxpbmVFbGVtZW50Q29udGludWF0aW9uKCkt
Pm5vZGUoKS0+cmVuZGVyZXIoKSktPmZpcnN0TGluZUJveCgpOyAKICAgICAgICAgaW50IHRvcE1h
cmdpbiA9IHByZXZJbmxpbmVIYXNMaW5lQm94ID8gY29sbGFwc2VkTWFyZ2luQmVmb3JlKCkgOiAw
OwogICAgICAgICBpbnQgYm90dG9tTWFyZ2luID0gbmV4dElubGluZUhhc0xpbmVCb3ggPyBjb2xs
YXBzZWRNYXJnaW5BZnRlcigpIDogMDsKLSAgICAgICAgSW50UmVjdCByZWN0KHR4LCB0eSAtIHRv
cE1hcmdpbiwgd2lkdGgoKSwgaGVpZ2h0KCkgKyB0b3BNYXJnaW4gKyBib3R0b21NYXJnaW4pOwor
ICAgICAgICBJbnRSZWN0IHJlY3QocGFpbnRPZmZzZXQueCgpLCBwYWludE9mZnNldC55KCkgLSB0
b3BNYXJnaW4sIHdpZHRoKCksIGhlaWdodCgpICsgdG9wTWFyZ2luICsgYm90dG9tTWFyZ2luKTsK
ICAgICAgICAgaWYgKCFyZWN0LmlzRW1wdHkoKSkKICAgICAgICAgICAgIHJlY3RzLmFwcGVuZChy
ZWN0KTsKICAgICB9IGVsc2UgaWYgKHdpZHRoKCkgJiYgaGVpZ2h0KCkpCi0gICAgICAgIHJlY3Rz
LmFwcGVuZChJbnRSZWN0KHR4LCB0eSwgd2lkdGgoKSwgaGVpZ2h0KCkpKTsKKyAgICAgICAgcmVj
dHMuYXBwZW5kKEludFJlY3QocGFpbnRPZmZzZXQsIHNpemUoKSkpOwogCiAgICAgaWYgKCFoYXNP
dmVyZmxvd0NsaXAoKSAmJiAhaGFzQ29udHJvbENsaXAoKSkgewogICAgICAgICBmb3IgKFJvb3RJ
bmxpbmVCb3gqIGN1cnIgPSBmaXJzdFJvb3RCb3goKTsgY3VycjsgY3VyciA9IGN1cnItPm5leHRS
b290Qm94KCkpIHsKICAgICAgICAgICAgIGludCB0b3AgPSBtYXgoY3Vyci0+bGluZVRvcCgpLCBj
dXJyLT5sb2dpY2FsVG9wKCkpOwogICAgICAgICAgICAgaW50IGJvdHRvbSA9IG1pbihjdXJyLT5s
aW5lQm90dG9tKCksIGN1cnItPmxvZ2ljYWxUb3AoKSArIGN1cnItPmxvZ2ljYWxIZWlnaHQoKSk7
Ci0gICAgICAgICAgICBJbnRSZWN0IHJlY3QodHggKyBjdXJyLT54KCksIHR5ICsgdG9wLCBjdXJy
LT5sb2dpY2FsV2lkdGgoKSwgYm90dG9tIC0gdG9wKTsKKyAgICAgICAgICAgIEludFJlY3QgcmVj
dChwYWludE9mZnNldC54KCkgKyBjdXJyLT54KCksIHBhaW50T2Zmc2V0LnkoKSArIHRvcCwgY3Vy
ci0+bG9naWNhbFdpZHRoKCksIGJvdHRvbSAtIHRvcCk7CiAgICAgICAgICAgICBpZiAoIXJlY3Qu
aXNFbXB0eSgpKQogICAgICAgICAgICAgICAgIHJlY3RzLmFwcGVuZChyZWN0KTsKICAgICAgICAg
fQpAQCAtNTg4MywxNiArNTg4MywxNCBAQCB2b2lkIFJlbmRlckJsb2NrOjphZGRGb2N1c1JpbmdS
ZWN0cyhWZWN0CiAgICAgICAgICAgICAgICAgaWYgKGJveC0+bGF5ZXIoKSkgCiAgICAgICAgICAg
ICAgICAgICAgIHBvcyA9IGN1cnItPmxvY2FsVG9BYnNvbHV0ZSgpOwogICAgICAgICAgICAgICAg
IGVsc2UKLSAgICAgICAgICAgICAgICAgICAgcG9zID0gRmxvYXRQb2ludCh0eCArIGJveC0+eCgp
LCB0eSArIGJveC0+eSgpKTsKLSAgICAgICAgICAgICAgICBib3gtPmFkZEZvY3VzUmluZ1JlY3Rz
KHJlY3RzLCBwb3MueCgpLCBwb3MueSgpKTsKKyAgICAgICAgICAgICAgICAgICAgcG9zID0gRmxv
YXRQb2ludChwYWludE9mZnNldC54KCkgKyBib3gtPngoKSwgcGFpbnRPZmZzZXQueSgpICsgYm94
LT55KCkpOworICAgICAgICAgICAgICAgIGJveC0+YWRkRm9jdXNSaW5nUmVjdHMocmVjdHMsIGZs
b29yZWRJbnRQb2ludChwb3MpKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgIH0KIAog
ICAgIGlmIChpbmxpbmVFbGVtZW50Q29udGludWF0aW9uKCkpCi0gICAgICAgIGlubGluZUVsZW1l
bnRDb250aW51YXRpb24oKS0+YWRkRm9jdXNSaW5nUmVjdHMocmVjdHMsIAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR4IC0geCgpICsgaW5s
aW5lRWxlbWVudENvbnRpbnVhdGlvbigpLT5jb250YWluaW5nQmxvY2soKS0+eCgpLAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5IC0geSgp
ICsgaW5saW5lRWxlbWVudENvbnRpbnVhdGlvbigpLT5jb250YWluaW5nQmxvY2soKS0+eSgpKTsK
KyAgICAgICAgaW5saW5lRWxlbWVudENvbnRpbnVhdGlvbigpLT5hZGRGb2N1c1JpbmdSZWN0cyhy
ZWN0cywgZmxvb3JlZEludFBvaW50KHBhaW50T2Zmc2V0ICsgaW5saW5lRWxlbWVudENvbnRpbnVh
dGlvbigpLT5jb250YWluaW5nQmxvY2soKS0+bG9jYXRpb24oKSAtIGxvY2F0aW9uKCkpKTsKIH0K
IAogUmVuZGVyQmxvY2sqIFJlbmRlckJsb2NrOjpjcmVhdGVBbm9ueW1vdXNCbG9jayhib29sIGlz
RmxleGlibGVCb3gpIGNvbnN0CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
QmxvY2suaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxv
Y2suaAkocmV2aXNpb24gODcxMDMpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
QmxvY2suaAkod29ya2luZyBjb3B5KQpAQCAtMzI5LDcgKzMyOSw3IEBAIHByb3RlY3RlZDoKICAg
ICB2b2lkIGFkZE92ZXJmbG93RnJvbUJsb2NrQ2hpbGRyZW4oKTsKICAgICB2b2lkIGFkZE92ZXJm
bG93RnJvbUlubGluZUNoaWxkcmVuKCk7CiAKLSAgICB2aXJ0dWFsIHZvaWQgYWRkRm9jdXNSaW5n
UmVjdHMoVmVjdG9yPEludFJlY3Q+JiwgaW50IHR4LCBpbnQgdHkpOworICAgIHZpcnR1YWwgdm9p
ZCBhZGRGb2N1c1JpbmdSZWN0cyhWZWN0b3I8SW50UmVjdD4mLCBjb25zdCBJbnRQb2ludCYpOwog
CiAjaWYgRU5BQkxFKFNWRykKICAgICAvLyBPbmx5IHVzZWQgYnkgUmVuZGVyU1ZHVGV4dCwgd2hp
Y2ggZXhwbGljaXRlbHkgb3ZlcnJpZGVzIFJlbmRlckJsb2NrOjpsYXlvdXRCbG9jaygpLCBkbyBO
T1QgdXNlIGZvciBhbnl0aGluZyBlbHNlLgpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlckJveC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlckJveC5jcHAJKHJldmlzaW9uIDg3MTAzKQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlckJveC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTUwNiwxMCArNTA2LDEwIEBAIEludFJl
Y3QgUmVuZGVyQm94OjpvdXRsaW5lQm91bmRzRm9yUmVwYWkKICAgICByZXR1cm4gYm94OwogfQog
Ci12b2lkIFJlbmRlckJveDo6YWRkRm9jdXNSaW5nUmVjdHMoVmVjdG9yPEludFJlY3Q+JiByZWN0
cywgaW50IHR4LCBpbnQgdHkpCit2b2lkIFJlbmRlckJveDo6YWRkRm9jdXNSaW5nUmVjdHMoVmVj
dG9yPEludFJlY3Q+JiByZWN0cywgY29uc3QgSW50UG9pbnQmIHBhaW50T2Zmc2V0KQogewotICAg
IGlmICh3aWR0aCgpICYmIGhlaWdodCgpKQotICAgICAgICByZWN0cy5hcHBlbmQoSW50UmVjdCh0
eCwgdHksIHdpZHRoKCksIGhlaWdodCgpKSk7CisgICAgaWYgKCFzaXplKCkuaXNFbXB0eSgpKQor
ICAgICAgICByZWN0cy5hcHBlbmQoSW50UmVjdChwYWludE9mZnNldCwgc2l6ZSgpKSk7CiB9CiAK
IEludFJlY3QgUmVuZGVyQm94OjpyZWZsZWN0aW9uQm94KCkgY29uc3QKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3guaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyQm94LmgJKHJldmlzaW9uIDg3MTAzKQorKysgU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlckJveC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMjgsNyArMTI4LDcg
QEAgcHVibGljOgogCiAgICAgLy8gQm91bmRzIG9mIHRoZSBvdXRsaW5lIGJveCBpbiBhYnNvbHV0
ZSBjb29yZHMuIFJlc3BlY3RzIHRyYW5zZm9ybXMKICAgICB2aXJ0dWFsIEludFJlY3Qgb3V0bGlu
ZUJvdW5kc0ZvclJlcGFpbnQoUmVuZGVyQm94TW9kZWxPYmplY3QqIC8qcmVwYWludENvbnRhaW5l
ciovLCBJbnRQb2ludCogY2FjaGVkT2Zmc2V0VG9SZXBhaW50Q29udGFpbmVyKSBjb25zdDsKLSAg
ICB2aXJ0dWFsIHZvaWQgYWRkRm9jdXNSaW5nUmVjdHMoVmVjdG9yPEludFJlY3Q+JiwgaW50IHR4
LCBpbnQgdHkpOworICAgIHZpcnR1YWwgdm9pZCBhZGRGb2N1c1JpbmdSZWN0cyhWZWN0b3I8SW50
UmVjdD4mLCBjb25zdCBJbnRQb2ludCYpOwogCiAgICAgLy8gVXNlIHRoaXMgd2l0aCBjYXV0aW9u
ISBObyB0eXBlIGNoZWNraW5nIGlzIGRvbmUhCiAgICAgUmVuZGVyQm94KiBwcmV2aW91c1NpYmxp
bmdCb3goKSBjb25zdDsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJJbmxp
bmUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJJbmxp
bmUuY3BwCShyZXZpc2lvbiA4NzEwMykKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJJbmxpbmUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMzM3LDM2ICsxMzM3LDMyIEBAIHZvaWQg
UmVuZGVySW5saW5lOjppbWFnZUNoYW5nZWQoV3JhcHBlZEkKICAgICByZXBhaW50KCk7CiB9CiAK
LXZvaWQgUmVuZGVySW5saW5lOjphZGRGb2N1c1JpbmdSZWN0cyhWZWN0b3I8SW50UmVjdD4mIHJl
Y3RzLCBpbnQgdHgsIGludCB0eSkKK3ZvaWQgUmVuZGVySW5saW5lOjphZGRGb2N1c1JpbmdSZWN0
cyhWZWN0b3I8SW50UmVjdD4mIHJlY3RzLCBjb25zdCBJbnRQb2ludCYgcGFpbnRPZmZzZXQpCiB7
CiAgICAgaWYgKCFhbHdheXNDcmVhdGVMaW5lQm94ZXMoKSkKLSAgICAgICAgY3VsbGVkSW5saW5l
QWJzb2x1dGVSZWN0cyh0aGlzLCByZWN0cywgSW50U2l6ZSh0eCwgdHkpKTsKKyAgICAgICAgY3Vs
bGVkSW5saW5lQWJzb2x1dGVSZWN0cyh0aGlzLCByZWN0cywgdG9TaXplKHBhaW50T2Zmc2V0KSk7
CiAgICAgZWxzZSB7CiAgICAgICAgIGZvciAoSW5saW5lRmxvd0JveCogY3VyciA9IGZpcnN0TGlu
ZUJveCgpOyBjdXJyOyBjdXJyID0gY3Vyci0+bmV4dExpbmVCb3goKSkKLSAgICAgICAgICAgIHJl
Y3RzLmFwcGVuZChlbmNsb3NpbmdJbnRSZWN0KEZsb2F0UmVjdCh0eCArIGN1cnItPngoKSwgdHkg
KyBjdXJyLT55KCksIGN1cnItPndpZHRoKCksIGN1cnItPmhlaWdodCgpKSkpOworICAgICAgICAg
ICAgcmVjdHMuYXBwZW5kKGVuY2xvc2luZ0ludFJlY3QoRmxvYXRSZWN0KHBhaW50T2Zmc2V0Lngo
KSArIGN1cnItPngoKSwgcGFpbnRPZmZzZXQueSgpICsgY3Vyci0+eSgpLCBjdXJyLT53aWR0aCgp
LCBjdXJyLT5oZWlnaHQoKSkpKTsKICAgICB9CiAKICAgICBmb3IgKFJlbmRlck9iamVjdCogY3Vy
ciA9IGZpcnN0Q2hpbGQoKTsgY3VycjsgY3VyciA9IGN1cnItPm5leHRTaWJsaW5nKCkpIHsKICAg
ICAgICAgaWYgKCFjdXJyLT5pc1RleHQoKSAmJiAhY3Vyci0+aXNMaXN0TWFya2VyKCkpIHsKLSAg
ICAgICAgICAgIEZsb2F0UG9pbnQgcG9zKHR4LCB0eSk7CisgICAgICAgICAgICBGbG9hdFBvaW50
IHBvcyhwYWludE9mZnNldCk7CiAgICAgICAgICAgICAvLyBGSVhNRTogVGhpcyBkb2Vzbid0IHdv
cmsgY29ycmVjdGx5IHdpdGggdHJhbnNmb3Jtcy4KICAgICAgICAgICAgIGlmIChjdXJyLT5oYXNM
YXllcigpKSAKICAgICAgICAgICAgICAgICBwb3MgPSBjdXJyLT5sb2NhbFRvQWJzb2x1dGUoKTsK
ICAgICAgICAgICAgIGVsc2UgaWYgKGN1cnItPmlzQm94KCkpCiAgICAgICAgICAgICAgICAgcG9z
Lm1vdmUodG9SZW5kZXJCb3goY3VyciktPngoKSwgdG9SZW5kZXJCb3goY3VyciktPnkoKSk7Ci0g
ICAgICAgICAgICBjdXJyLT5hZGRGb2N1c1JpbmdSZWN0cyhyZWN0cywgcG9zLngoKSwgcG9zLnko
KSk7CisgICAgICAgICAgICBjdXJyLT5hZGRGb2N1c1JpbmdSZWN0cyhyZWN0cywgZmxvb3JlZElu
dFBvaW50KHBvcykpOwogICAgICAgICB9CiAgICAgfQogCiAgICAgaWYgKGNvbnRpbnVhdGlvbigp
KSB7CiAgICAgICAgIGlmIChjb250aW51YXRpb24oKS0+aXNJbmxpbmUoKSkKLSAgICAgICAgICAg
IGNvbnRpbnVhdGlvbigpLT5hZGRGb2N1c1JpbmdSZWN0cyhyZWN0cywgCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHggLSBjb250YWluaW5nQmxvY2soKS0+
eCgpICsgY29udGludWF0aW9uKCktPmNvbnRhaW5pbmdCbG9jaygpLT54KCksCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHkgLSBjb250YWluaW5nQmxvY2so
KS0+eSgpICsgY29udGludWF0aW9uKCktPmNvbnRhaW5pbmdCbG9jaygpLT55KCkpOworICAgICAg
ICAgICAgY29udGludWF0aW9uKCktPmFkZEZvY3VzUmluZ1JlY3RzKHJlY3RzLCBmbG9vcmVkSW50
UG9pbnQocGFpbnRPZmZzZXQgKyBjb250aW51YXRpb24oKS0+Y29udGFpbmluZ0Jsb2NrKCktPmxv
Y2F0aW9uKCkgLSBjb250YWluaW5nQmxvY2soKS0+bG9jYXRpb24oKSkpOwogICAgICAgICBlbHNl
Ci0gICAgICAgICAgICBjb250aW51YXRpb24oKS0+YWRkRm9jdXNSaW5nUmVjdHMocmVjdHMsIAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR4IC0gY29udGFp
bmluZ0Jsb2NrKCktPngoKSArIHRvUmVuZGVyQm94KGNvbnRpbnVhdGlvbigpKS0+eCgpLAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5IC0gY29udGFpbmlu
Z0Jsb2NrKCktPnkoKSArIHRvUmVuZGVyQm94KGNvbnRpbnVhdGlvbigpKS0+eSgpKTsKKyAgICAg
ICAgICAgIGNvbnRpbnVhdGlvbigpLT5hZGRGb2N1c1JpbmdSZWN0cyhyZWN0cywgZmxvb3JlZElu
dFBvaW50KHBhaW50T2Zmc2V0ICsgdG9SZW5kZXJCb3goY29udGludWF0aW9uKCkpLT5sb2NhdGlv
bigpIC0gY29udGFpbmluZ0Jsb2NrKCktPmxvY2F0aW9uKCkpKTsKICAgICB9CiB9CiAKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJJbmxpbmUuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVySW5saW5lLmgJKHJldmlzaW9uIDg3MTAzKQor
KysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlcklubGluZS5oCSh3b3JraW5nIGNvcHkp
CkBAIC03NSw3ICs3NSw3IEBAIHB1YmxpYzoKICAgICAKICAgICBJbnRTaXplIHJlbGF0aXZlUG9z
aXRpb25lZElubGluZU9mZnNldChjb25zdCBSZW5kZXJCb3gqIGNoaWxkKSBjb25zdDsKIAotICAg
IHZpcnR1YWwgdm9pZCBhZGRGb2N1c1JpbmdSZWN0cyhWZWN0b3I8SW50UmVjdD4mLCBpbnQgdHgs
IGludCB0eSk7CisgICAgdmlydHVhbCB2b2lkIGFkZEZvY3VzUmluZ1JlY3RzKFZlY3RvcjxJbnRS
ZWN0PiYsIGNvbnN0IEludFBvaW50Jik7CiAgICAgdm9pZCBwYWludE91dGxpbmUoR3JhcGhpY3ND
b250ZXh0KiwgaW50IHR4LCBpbnQgdHkpOwogCiAgICAgdXNpbmcgUmVuZGVyQm94TW9kZWxPYmpl
Y3Q6OmNvbnRpbnVhdGlvbjsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJM
aXN0Qm94LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
TGlzdEJveC5jcHAJKHJldmlzaW9uIDg3MTAzKQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlckxpc3RCb3guY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMDEsMTcgKzMwMSwxNyBAQCB2
b2lkIFJlbmRlckxpc3RCb3g6OnBhaW50T2JqZWN0KFBhaW50SW5mCiAgICAgfQogfQogCi12b2lk
IFJlbmRlckxpc3RCb3g6OmFkZEZvY3VzUmluZ1JlY3RzKFZlY3RvcjxJbnRSZWN0PiYgcmVjdHMs
IGludCB0eCwgaW50IHR5KQordm9pZCBSZW5kZXJMaXN0Qm94OjphZGRGb2N1c1JpbmdSZWN0cyhW
ZWN0b3I8SW50UmVjdD4mIHJlY3RzLCBjb25zdCBJbnRQb2ludCYgcGFpbnRPZmZzZXQpCiB7CiAg
ICAgaWYgKCFpc1NwYXRpYWxOYXZpZ2F0aW9uRW5hYmxlZChmcmFtZSgpKSkKLSAgICAgICAgcmV0
dXJuIFJlbmRlckJsb2NrOjphZGRGb2N1c1JpbmdSZWN0cyhyZWN0cywgdHgsIHR5KTsKKyAgICAg
ICAgcmV0dXJuIFJlbmRlckJsb2NrOjphZGRGb2N1c1JpbmdSZWN0cyhyZWN0cywgcGFpbnRPZmZz
ZXQpOwogCiAgICAgU2VsZWN0RWxlbWVudCogc2VsZWN0ID0gdG9TZWxlY3RFbGVtZW50KHN0YXRp
Y19jYXN0PEVsZW1lbnQqPihub2RlKCkpKTsKIAogICAgIC8vIEZvY3VzIHRoZSBsYXN0IHNlbGVj
dGVkIGl0ZW0uCiAgICAgaW50IHNlbGVjdGVkSXRlbSA9IHNlbGVjdC0+YWN0aXZlU2VsZWN0aW9u
RW5kTGlzdEluZGV4KCk7CiAgICAgaWYgKHNlbGVjdGVkSXRlbSA+PSAwKSB7Ci0gICAgICAgIHJl
Y3RzLmFwcGVuZChpdGVtQm91bmRpbmdCb3hSZWN0KHR4LCB0eSwgc2VsZWN0ZWRJdGVtKSk7Cisg
ICAgICAgIHJlY3RzLmFwcGVuZChpdGVtQm91bmRpbmdCb3hSZWN0KHBhaW50T2Zmc2V0LngoKSwg
cGFpbnRPZmZzZXQueSgpLCBzZWxlY3RlZEl0ZW0pKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0K
IApAQCAtMzIxLDcgKzMyMSw3IEBAIHZvaWQgUmVuZGVyTGlzdEJveDo6YWRkRm9jdXNSaW5nUmVj
dHMoVmUKICAgICBmb3IgKGludCBpID0gMDsgaSA8IHNpemU7ICsraSkgewogICAgICAgICBPcHRp
b25FbGVtZW50KiBvcHRpb25FbGVtZW50ID0gdG9PcHRpb25FbGVtZW50KGxpc3RJdGVtc1tpXSk7
CiAgICAgICAgIGlmIChvcHRpb25FbGVtZW50ICYmICFvcHRpb25FbGVtZW50LT5kaXNhYmxlZCgp
KSB7Ci0gICAgICAgICAgICByZWN0cy5hcHBlbmQoaXRlbUJvdW5kaW5nQm94UmVjdCh0eCwgdHks
IGkpKTsKKyAgICAgICAgICAgIHJlY3RzLmFwcGVuZChpdGVtQm91bmRpbmdCb3hSZWN0KHBhaW50
T2Zmc2V0LngoKSwgcGFpbnRPZmZzZXQueSgpLCBpKSk7CiAgICAgICAgICAgICByZXR1cm47CiAg
ICAgICAgIH0KICAgICB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGlz
dEJveC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMaXN0
Qm94LmgJKHJldmlzaW9uIDg3MTAzKQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
ckxpc3RCb3guaAkod29ya2luZyBjb3B5KQpAQCAtNzksNyArNzksNyBAQCBwcml2YXRlOgogCiAg
ICAgdmlydHVhbCB2b2lkIGxheW91dCgpOwogCi0gICAgdmlydHVhbCB2b2lkIGFkZEZvY3VzUmlu
Z1JlY3RzKFZlY3RvcjxJbnRSZWN0PiYsIGludCB0eCwgaW50IHR5KTsKKyAgICB2aXJ0dWFsIHZv
aWQgYWRkRm9jdXNSaW5nUmVjdHMoVmVjdG9yPEludFJlY3Q+JiwgY29uc3QgSW50UG9pbnQmKTsK
IAogICAgIHZpcnR1YWwgYm9vbCBjYW5CZVByb2dyYW1hdGljYWxseVNjcm9sbGVkKGJvb2wpIGNv
bnN0IHsgcmV0dXJuIHRydWU7IH0KICAgICB2aXJ0dWFsIHZvaWQgYXV0b3Njcm9sbCgpOwpJbmRl
eDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck9iamVjdC5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck9iamVjdC5jcHAJKHJldmlzaW9uIDg3
MTAzKQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck9iamVjdC5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTEwMDAsNyArMTAwMCw3IEBAIHZvaWQgUmVuZGVyT2JqZWN0OjpkcmF3QXJj
Rm9yQm94U2lkZShHcmEKIHZvaWQgUmVuZGVyT2JqZWN0OjpwYWludEZvY3VzUmluZyhHcmFwaGlj
c0NvbnRleHQqIGNvbnRleHQsIGludCB0eCwgaW50IHR5LCBSZW5kZXJTdHlsZSogc3R5bGUpCiB7
CiAgICAgVmVjdG9yPEludFJlY3Q+IGZvY3VzUmluZ1JlY3RzOwotICAgIGFkZEZvY3VzUmluZ1Jl
Y3RzKGZvY3VzUmluZ1JlY3RzLCB0eCwgdHkpOworICAgIGFkZEZvY3VzUmluZ1JlY3RzKGZvY3Vz
UmluZ1JlY3RzLCBJbnRQb2ludCh0eCwgdHkpKTsKICAgICBpZiAoc3R5bGUtPm91dGxpbmVTdHls
ZUlzQXV0bygpKQogICAgICAgICBjb250ZXh0LT5kcmF3Rm9jdXNSaW5nKGZvY3VzUmluZ1JlY3Rz
LCBzdHlsZS0+b3V0bGluZVdpZHRoKCksIHN0eWxlLT5vdXRsaW5lT2Zmc2V0KCksIHN0eWxlLT52
aXNpdGVkRGVwZW5kZW50Q29sb3IoQ1NTUHJvcGVydHlPdXRsaW5lQ29sb3IpKTsKICAgICBlbHNl
CkBAIC0xMTE5LDggKzExMTksOCBAQCB2b2lkIFJlbmRlck9iamVjdDo6YWJzb2x1dGVGb2N1c1Jp
bmdRdWFkCiAgICAgLy8gaW1wbGljaXRseSBhc3N1bWVzIHRoYXQuIFRoaXMgZG9lc24ndCB3b3Jr
IGNvcnJlY3RseSB3aXRoIHRyYW5zZm9ybWVkCiAgICAgLy8gZGVzY2VuZGFudHMuCiAgICAgRmxv
YXRQb2ludCBhYnNvbHV0ZVBvaW50ID0gbG9jYWxUb0Fic29sdXRlKCk7Ci0gICAgYWRkRm9jdXNS
aW5nUmVjdHMocmVjdHMsIGFic29sdXRlUG9pbnQueCgpLCBhYnNvbHV0ZVBvaW50LnkoKSk7Ci0g
ICAgc2l6ZV90IGNvdW50ID0gcmVjdHMuc2l6ZSgpOworICAgIGFkZEZvY3VzUmluZ1JlY3RzKHJl
Y3RzLCBmbG9vcmVkSW50UG9pbnQoYWJzb2x1dGVQb2ludCkpOworICAgIHNpemVfdCBjb3VudCA9
IHJlY3RzLnNpemUoKTsgCiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBjb3VudDsgKytpKSB7
CiAgICAgICAgIEludFJlY3QgcmVjdCA9IHJlY3RzW2ldOwogICAgICAgICByZWN0Lm1vdmUoLWFi
c29sdXRlUG9pbnQueCgpLCAtYWJzb2x1dGVQb2ludC55KCkpOwpJbmRleDogU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlck9iamVjdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJPYmplY3QuaAkocmV2aXNpb24gODcxMDMpCisrKyBTb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTc3NSw3ICs3
NzUsNyBAQCBwdWJsaWM6CiAgICAgYm9vbCBzaG91bGRVc2VUcmFuc2Zvcm1Gcm9tQ29udGFpbmVy
KGNvbnN0IFJlbmRlck9iamVjdCogY29udGFpbmVyKSBjb25zdDsKICAgICB2b2lkIGdldFRyYW5z
Zm9ybUZyb21Db250YWluZXIoY29uc3QgUmVuZGVyT2JqZWN0KiBjb250YWluZXIsIGNvbnN0IElu
dFNpemUmIG9mZnNldEluQ29udGFpbmVyLCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYpIGNvbnN0Owog
ICAgIAotICAgIHZpcnR1YWwgdm9pZCBhZGRGb2N1c1JpbmdSZWN0cyhWZWN0b3I8SW50UmVjdD4m
LCBpbnQgLyp0eCovLCBpbnQgLyp0eSovKSB7IH07CisgICAgdmlydHVhbCB2b2lkIGFkZEZvY3Vz
UmluZ1JlY3RzKFZlY3RvcjxJbnRSZWN0PiYsIGNvbnN0IEludFBvaW50JikgeyB9OwogCiAgICAg
SW50UmVjdCBhYnNvbHV0ZU91dGxpbmVCb3VuZHMoKSBjb25zdAogICAgIHsKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0Q29udHJvbC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRleHRDb250cm9sLmNwcAkocmV2aXNpb24g
ODcxMDMpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4dENvbnRyb2wuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC01OTEsMTAgKzU5MSwxMCBAQCB2b2lkIFJlbmRlclRleHRDb250
cm9sOjpzZWxlY3Rpb25DaGFuZ2VkCiAgICAgfQogfQogCi12b2lkIFJlbmRlclRleHRDb250cm9s
OjphZGRGb2N1c1JpbmdSZWN0cyhWZWN0b3I8SW50UmVjdD4mIHJlY3RzLCBpbnQgdHgsIGludCB0
eSkKK3ZvaWQgUmVuZGVyVGV4dENvbnRyb2w6OmFkZEZvY3VzUmluZ1JlY3RzKFZlY3RvcjxJbnRS
ZWN0PiYgcmVjdHMsIGNvbnN0IEludFBvaW50JiBwYWludE9mZnNldCkKIHsKLSAgICBpZiAod2lk
dGgoKSAmJiBoZWlnaHQoKSkKLSAgICAgICAgcmVjdHMuYXBwZW5kKEludFJlY3QodHgsIHR5LCB3
aWR0aCgpLCBoZWlnaHQoKSkpOworICAgIGlmICghc2l6ZSgpLmlzRW1wdHkoKSkKKyAgICAgICAg
cmVjdHMuYXBwZW5kKEludFJlY3QocGFpbnRPZmZzZXQsIHNpemUoKSkpOwogfQogCiB2b2lkIFJl
bmRlclRleHRDb250cm9sOjp1cGRhdGVQbGFjZWhvbGRlclZpc2liaWxpdHkoYm9vbCBwbGFjZWhv
bGRlclNob3VsZEJlVmlzaWJsZSwgYm9vbCBwbGFjZWhvbGRlclZhbHVlQ2hhbmdlZCkKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0Q29udHJvbC5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0Q29udHJvbC5oCShyZXZpc2lv
biA4NzEwMykKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0Q29udHJvbC5o
CSh3b3JraW5nIGNvcHkpCkBAIC05Miw3ICs5Miw3IEBAIHByaXZhdGU6CiAgICAgdmlydHVhbCBi
b29sIGF2b2lkc0Zsb2F0cygpIGNvbnN0IHsgcmV0dXJuIHRydWU7IH0KICAgICB2aXJ0dWFsIHZv
aWQgcGFpbnRPYmplY3QoUGFpbnRJbmZvJiwgaW50IHR4LCBpbnQgdHkpOwogICAgIAotICAgIHZp
cnR1YWwgdm9pZCBhZGRGb2N1c1JpbmdSZWN0cyhWZWN0b3I8SW50UmVjdD4mLCBpbnQgdHgsIGlu
dCB0eSk7CisgICAgdmlydHVhbCB2b2lkIGFkZEZvY3VzUmluZ1JlY3RzKFZlY3RvcjxJbnRSZWN0
PiYsIGNvbnN0IEludFBvaW50Jik7CiAKICAgICB2aXJ0dWFsIGJvb2wgY2FuQmVQcm9ncmFtYXRp
Y2FsbHlTY3JvbGxlZChib29sKSBjb25zdCB7IHJldHVybiB0cnVlOyB9CiAKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmUuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0Q29udHJvbFNpbmds
ZUxpbmUuY3BwCShyZXZpc2lvbiA4NzEwMykKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNjEsMTEg
KzI2MSwxMSBAQCB2b2lkIFJlbmRlclRleHRDb250cm9sU2luZ2xlTGluZTo6cGFpbnRCCiAgICAg
cGFpbnRCb3hEZWNvcmF0aW9uc1dpdGhTaXplKHBhaW50SW5mbywgSW50UmVjdCh0eCwgdHksIHdp
ZHRoKCkgLSBkZWNvcmF0aW9uV2lkdGhSaWdodCgpLCBoZWlnaHQoKSkpOwogfQogCi12b2lkIFJl
bmRlclRleHRDb250cm9sU2luZ2xlTGluZTo6YWRkRm9jdXNSaW5nUmVjdHMoVmVjdG9yPEludFJl
Y3Q+JiByZWN0cywgaW50IHR4LCBpbnQgdHkpCit2b2lkIFJlbmRlclRleHRDb250cm9sU2luZ2xl
TGluZTo6YWRkRm9jdXNSaW5nUmVjdHMoVmVjdG9yPEludFJlY3Q+JiByZWN0cywgY29uc3QgSW50
UG9pbnQmIHBhaW50T2Zmc2V0KQogewogICAgIGludCB3ID0gd2lkdGgoKSAtIGRlY29yYXRpb25X
aWR0aFJpZ2h0KCk7CiAgICAgaWYgKHcgJiYgaGVpZ2h0KCkpCi0gICAgICAgIHJlY3RzLmFwcGVu
ZChJbnRSZWN0KHR4LCB0eSwgdywgaGVpZ2h0KCkpKTsKKyAgICAgICAgcmVjdHMuYXBwZW5kKElu
dFJlY3QocGFpbnRPZmZzZXQsIEludFNpemUodywgaGVpZ2h0KCkpKSk7CiB9CiAKIHZvaWQgUmVu
ZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lOjpsYXlvdXQoKQpJbmRleDogU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlclRleHRDb250cm9sU2luZ2xlTGluZS5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmUuaAkocmV2
aXNpb24gODcxMDMpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4dENvbnRy
b2xTaW5nbGVMaW5lLmgJKHdvcmtpbmcgY29weSkKQEAgLTc0LDcgKzc0LDcgQEAgcHJpdmF0ZToK
ICAgICB2aXJ0dWFsIHZvaWQgc3VidHJlZUhhc0NoYW5nZWQoKTsKICAgICB2aXJ0dWFsIHZvaWQg
cGFpbnQoUGFpbnRJbmZvJiwgaW50IHR4LCBpbnQgdHkpOwogICAgIHZpcnR1YWwgdm9pZCBwYWlu
dEJveERlY29yYXRpb25zKFBhaW50SW5mbyYsIGludCB0eCwgaW50IHR5KTsKLSAgICB2aXJ0dWFs
IHZvaWQgYWRkRm9jdXNSaW5nUmVjdHMoVmVjdG9yPEludFJlY3Q+JiwgaW50IHR4LCBpbnQgdHkp
OworICAgIHZpcnR1YWwgdm9pZCBhZGRGb2N1c1JpbmdSZWN0cyhWZWN0b3I8SW50UmVjdD4mLCBj
b25zdCBJbnRQb2ludCYpOwogICAgIHZpcnR1YWwgdm9pZCBsYXlvdXQoKTsKIAogICAgIHZpcnR1
YWwgYm9vbCBub2RlQXRQb2ludChjb25zdCBIaXRUZXN0UmVxdWVzdCYsIEhpdFRlc3RSZXN1bHQm
LCBjb25zdCBJbnRQb2ludCYgcG9pbnRJbkNvbnRhaW5lciwgaW50IHR4LCBpbnQgdHksIEhpdFRl
c3RBY3Rpb24pOwpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdD
b250YWluZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcv
UmVuZGVyU1ZHQ29udGFpbmVyLmNwcAkocmV2aXNpb24gODcxMDMpCisrKyBTb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR0NvbnRhaW5lci5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTEzOSw3ICsxMzksNyBAQCB2b2lkIFJlbmRlclNWR0NvbnRhaW5lcjo6cGFpbnQoUGFpbnRJbmZv
CiB9CiAKIC8vIGFkZEZvY3VzUmluZ1JlY3RzIGlzIGNhbGxlZCBmcm9tIHBhaW50T3V0bGluZSBh
bmQgbmVlZHMgdG8gYmUgaW4gdGhlIHNhbWUgY29vcmRpbmF0ZXMgYXMgdGhlIHBhaW50T3VsaW5l
IGNhbGwKLXZvaWQgUmVuZGVyU1ZHQ29udGFpbmVyOjphZGRGb2N1c1JpbmdSZWN0cyhWZWN0b3I8
SW50UmVjdD4mIHJlY3RzLCBpbnQsIGludCkKK3ZvaWQgUmVuZGVyU1ZHQ29udGFpbmVyOjphZGRG
b2N1c1JpbmdSZWN0cyhWZWN0b3I8SW50UmVjdD4mIHJlY3RzLCBjb25zdCBJbnRQb2ludCYpCiB7
CiAgICAgSW50UmVjdCBwYWludFJlY3RJblBhcmVudCA9IGVuY2xvc2luZ0ludFJlY3QobG9jYWxU
b1BhcmVudFRyYW5zZm9ybSgpLm1hcFJlY3QocmVwYWludFJlY3RJbkxvY2FsQ29vcmRpbmF0ZXMo
KSkpOwogICAgIGlmICghcGFpbnRSZWN0SW5QYXJlbnQuaXNFbXB0eSgpKQpJbmRleDogU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdDb250YWluZXIuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR0NvbnRhaW5lci5oCShyZXZp
c2lvbiA4NzEwMykKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHQ29u
dGFpbmVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTUxLDcgKzUxLDcgQEAgcHJvdGVjdGVkOgogCiAg
ICAgdmlydHVhbCB2b2lkIGxheW91dCgpOwogCi0gICAgdmlydHVhbCB2b2lkIGFkZEZvY3VzUmlu
Z1JlY3RzKFZlY3RvcjxJbnRSZWN0PiYsIGludCB0eCwgaW50IHR5KTsKKyAgICB2aXJ0dWFsIHZv
aWQgYWRkRm9jdXNSaW5nUmVjdHMoVmVjdG9yPEludFJlY3Q+JiwgY29uc3QgSW50UG9pbnQmKTsK
IAogICAgIHZpcnR1YWwgRmxvYXRSZWN0IG9iamVjdEJvdW5kaW5nQm94KCkgY29uc3QgeyByZXR1
cm4gbV9vYmplY3RCb3VuZGluZ0JveDsgfQogICAgIHZpcnR1YWwgRmxvYXRSZWN0IHN0cm9rZUJv
dW5kaW5nQm94KCkgY29uc3QgeyByZXR1cm4gbV9zdHJva2VCb3VuZGluZ0JveDsgfQpJbmRleDog
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdJbWFnZS5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdJbWFnZS5jcHAJKHJl
dmlzaW9uIDg3MTAzKQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdJ
bWFnZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE3OSw3ICsxNzksNyBAQCB2b2lkIFJlbmRlclNW
R0ltYWdlOjppbWFnZUNoYW5nZWQoV3JhcHBlCiAgICAgcmVwYWludCgpOwogfQogCi12b2lkIFJl
bmRlclNWR0ltYWdlOjphZGRGb2N1c1JpbmdSZWN0cyhWZWN0b3I8SW50UmVjdD4mIHJlY3RzLCBp
bnQsIGludCkKK3ZvaWQgUmVuZGVyU1ZHSW1hZ2U6OmFkZEZvY3VzUmluZ1JlY3RzKFZlY3RvcjxJ
bnRSZWN0PiYgcmVjdHMsIGNvbnN0IEludFBvaW50JikKIHsKICAgICAvLyB0aGlzIGlzIGNhbGxl
ZCBmcm9tIHBhaW50KCkgYWZ0ZXIgdGhlIGxvY2FsVHJhbnNmb3JtIGhhcyBhbHJlYWR5IGJlZW4g
YXBwbGllZAogICAgIEludFJlY3QgY29udGVudFJlY3QgPSBlbmNsb3NpbmdJbnRSZWN0KHJlcGFp
bnRSZWN0SW5Mb2NhbENvb3JkaW5hdGVzKCkpOwpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL3N2Zy9SZW5kZXJTVkdJbWFnZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9zdmcvUmVuZGVyU1ZHSW1hZ2UuaAkocmV2aXNpb24gODcxMDMpCisrKyBTb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR0ltYWdlLmgJKHdvcmtpbmcgY29weSkKQEAg
LTU3LDcgKzU3LDcgQEAgcHJpdmF0ZToKICAgICB2aXJ0dWFsIEZsb2F0UmVjdCBzdHJva2VCb3Vu
ZGluZ0JveCgpIGNvbnN0IHsgcmV0dXJuIG1fb2JqZWN0Qm91bmRpbmdCb3g7IH0KICAgICB2aXJ0
dWFsIEZsb2F0UmVjdCByZXBhaW50UmVjdEluTG9jYWxDb29yZGluYXRlcygpIGNvbnN0IHsgcmV0
dXJuIG1fcmVwYWludEJvdW5kaW5nQm94OyB9CiAKLSAgICB2aXJ0dWFsIHZvaWQgYWRkRm9jdXNS
aW5nUmVjdHMoVmVjdG9yPEludFJlY3Q+JiwgaW50IHR4LCBpbnQgdHkpOworICAgIHZpcnR1YWwg
dm9pZCBhZGRGb2N1c1JpbmdSZWN0cyhWZWN0b3I8SW50UmVjdD4mLCBjb25zdCBJbnRQb2ludCYp
OwogCiAgICAgdmlydHVhbCB2b2lkIGltYWdlQ2hhbmdlZChXcmFwcGVkSW1hZ2VQdHIsIGNvbnN0
IEludFJlY3QqID0gMCk7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVu
ZGVyU1ZHUGF0aC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2
Zy9SZW5kZXJTVkdQYXRoLmNwcAkocmV2aXNpb24gODcxMDMpCisrKyBTb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1BhdGguY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMzYsNyAr
MjM2LDcgQEAgdm9pZCBSZW5kZXJTVkdQYXRoOjpwYWludChQYWludEluZm8mIHBhaQogCiAvLyBU
aGlzIG1ldGhvZCBpcyBjYWxsZWQgZnJvbSBpbnNpZGUgcGFpbnRPdXRsaW5lKCkgc2luY2Ugd2Ug
Y2FsbCBwYWludE91dGxpbmUoKQogLy8gd2hpbGUgdHJhbnNmb3JtZWQgdG8gb3VyIGNvb3JkIHN5
c3RlbSwgcmV0dXJuIGxvY2FsIGNvb3Jkcwotdm9pZCBSZW5kZXJTVkdQYXRoOjphZGRGb2N1c1Jp
bmdSZWN0cyhWZWN0b3I8SW50UmVjdD4mIHJlY3RzLCBpbnQsIGludCkgCit2b2lkIFJlbmRlclNW
R1BhdGg6OmFkZEZvY3VzUmluZ1JlY3RzKFZlY3RvcjxJbnRSZWN0PiYgcmVjdHMsIGNvbnN0IElu
dFBvaW50JikgCiB7CiAgICAgSW50UmVjdCByZWN0ID0gZW5jbG9zaW5nSW50UmVjdChyZXBhaW50
UmVjdEluTG9jYWxDb29yZGluYXRlcygpKTsKICAgICBpZiAoIXJlY3QuaXNFbXB0eSgpKQpJbmRl
eDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdQYXRoLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdQYXRoLmgJKHJldmlz
aW9uIDg3MTAzKQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdQYXRo
LmgJKHdvcmtpbmcgY29weSkKQEAgLTYxLDcgKzYxLDcgQEAgcHJpdmF0ZToKIAogICAgIHZpcnR1
YWwgdm9pZCBsYXlvdXQoKTsKICAgICB2aXJ0dWFsIHZvaWQgcGFpbnQoUGFpbnRJbmZvJiwgaW50
IHBhcmVudFgsIGludCBwYXJlbnRZKTsKLSAgICB2aXJ0dWFsIHZvaWQgYWRkRm9jdXNSaW5nUmVj
dHMoVmVjdG9yPEludFJlY3Q+JiwgaW50IHR4LCBpbnQgdHkpOworICAgIHZpcnR1YWwgdm9pZCBh
ZGRGb2N1c1JpbmdSZWN0cyhWZWN0b3I8SW50UmVjdD4mLCBjb25zdCBJbnRQb2ludCYpOwogCiAg
ICAgdmlydHVhbCBib29sIG5vZGVBdEZsb2F0UG9pbnQoY29uc3QgSGl0VGVzdFJlcXVlc3QmLCBI
aXRUZXN0UmVzdWx0JiwgY29uc3QgRmxvYXRQb2ludCYgcG9pbnRJblBhcmVudCwgSGl0VGVzdEFj
dGlvbik7CiAK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>94634</attachid>
            <date>2011-05-24 10:08:54 -0700</date>
            <delta_ts>2011-05-24 12:27:36 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-60783-20110524100852.patch</filename>
            <type>text/plain</type>
            <size>22617</size>
            <attacher name="Levi Weintraub">leviw</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDg3MTIzKQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsNTAgQEAKKzIwMTEtMDUtMjMgIExldmkgV2Vp
bnRyYXViICA8bGV2aXdAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9E
WSAoT09QUyEpLgorCisgICAgICAgIFN3aXRjaCBhZGRGb2N1c1JpbmdSZWN0cyB0byB1c2UgSW50
UG9pbnQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTYw
NzgzCisKKyAgICAgICAgU3dpdGNoaW5nIGFkZEZvY3VzUmluZ1JlY3RzIHRvIHVzZSBhbiBJbnRQ
b2ludCByZXByZXNlbnRpbmcgb2Zmc2V0IGJlaW5nCisgICAgICAgIGFwcGxpZWQgaW5zdGVhZCBv
ZiBhIHBhaXIgb2YgaW50cy4KKworICAgICAgICBObyBuZXcgdGVzdHMgYXMgdGhpcyBpcyBvbmx5
IHJlZmFjdG9yaW5nLgorCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvRmxvYXRTaXplLmg6
CisgICAgICAgIChXZWJDb3JlOjpmbG9vcmVkSW50UG9pbnQpOgorICAgICAgICAqIHJlbmRlcmlu
Zy9SZW5kZXJCbG9jay5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9jazo6YWRkRm9j
dXNSaW5nUmVjdHMpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJCbG9jay5oOgorICAgICAg
ICAqIHJlbmRlcmluZy9SZW5kZXJCb3guY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQm94
OjphZGRGb2N1c1JpbmdSZWN0cyk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckJveC5oOgor
ICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJJbmxpbmUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
UmVuZGVySW5saW5lOjphZGRGb2N1c1JpbmdSZWN0cyk6CisgICAgICAgICogcmVuZGVyaW5nL1Jl
bmRlcklubGluZS5oOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJMaXN0Qm94LmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OlJlbmRlckxpc3RCb3g6OmFkZEZvY3VzUmluZ1JlY3RzKToKKyAgICAg
ICAgKiByZW5kZXJpbmcvUmVuZGVyTGlzdEJveC5oOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5k
ZXJPYmplY3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyT2JqZWN0OjpwYWludEZvY3Vz
UmluZyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJPYmplY3Q6OmFic29sdXRlRm9jdXNSaW5n
UXVhZHMpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJPYmplY3QuaDoKKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlck9iamVjdDo6YWRkRm9jdXNSaW5nUmVjdHMpOgorICAgICAgICAqIHJlbmRl
cmluZy9SZW5kZXJUZXh0Q29udHJvbC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUZXh0
Q29udHJvbDo6YWRkRm9jdXNSaW5nUmVjdHMpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJU
ZXh0Q29udHJvbC5oOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJUZXh0Q29udHJvbFNpbmds
ZUxpbmUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5l
OjphZGRGb2N1c1JpbmdSZWN0cyk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlclRleHRDb250
cm9sU2luZ2xlTGluZS5oOgorICAgICAgICAqIHJlbmRlcmluZy9zdmcvUmVuZGVyU1ZHQ29udGFp
bmVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNWR0NvbnRhaW5lcjo6YWRkRm9jdXNS
aW5nUmVjdHMpOgorICAgICAgICAqIHJlbmRlcmluZy9zdmcvUmVuZGVyU1ZHQ29udGFpbmVyLmg6
CisgICAgICAgICogcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdJbWFnZS5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpSZW5kZXJTVkdJbWFnZTo6YWRkRm9jdXNSaW5nUmVjdHMpOgorICAgICAgICAqIHJl
bmRlcmluZy9zdmcvUmVuZGVyU1ZHSW1hZ2UuaDoKKyAgICAgICAgKiByZW5kZXJpbmcvc3ZnL1Jl
bmRlclNWR1BhdGguY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZHUGF0aDo6YWRkRm9j
dXNSaW5nUmVjdHMpOgorICAgICAgICAqIHJlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUGF0aC5oOgor
CiAyMDExLTA1LTIwICBNT1JJVEEgSGFqaW1lICA8bW9ycml0YUBnb29nbGUuY29tPgogCiAgICAg
ICAgIFJldmlld2VkIGJ5IERpbWl0cmkgR2xhemtvdi4KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL0Zsb2F0U2l6ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL0Zsb2F0U2l6ZS5oCShyZXZpc2lvbiA4NzEwMykKKysrIFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0Zsb2F0U2l6ZS5oCSh3b3JraW5nIGNvcHkpCkBA
IC0yOCw3ICsyOCw3IEBACiAjaWZuZGVmIEZsb2F0U2l6ZV9oCiAjZGVmaW5lIEZsb2F0U2l6ZV9o
CiAKLSNpbmNsdWRlICJJbnRTaXplLmgiCisjaW5jbHVkZSAiSW50UG9pbnQuaCIKICNpbmNsdWRl
IDx3dGYvTWF0aEV4dHJhcy5oPgogCiAjaWYgVVNFKENHKSB8fCAoUExBVEZPUk0oV1gpICYmIE9T
KERBUldJTikpIHx8IFVTRShTS0lBX09OX01BQ19DSFJPTUUpCkBAIC0xNTUsNiArMTU1LDExIEBA
IGlubGluZSBJbnRTaXplIGV4cGFuZGVkSW50U2l6ZShjb25zdCBGbG8KICAgICByZXR1cm4gSW50
U2l6ZShjbGFtcFRvSW50ZWdlcihjZWlsZihwLndpZHRoKCkpKSwgY2xhbXBUb0ludGVnZXIoY2Vp
bGYocC5oZWlnaHQoKSkpKTsKIH0KIAoraW5saW5lIEludFBvaW50IGZsb29yZWRJbnRQb2ludChj
b25zdCBGbG9hdFNpemUmIHApCit7CisgICAgcmV0dXJuIEludFBvaW50KHN0YXRpY19jYXN0PGlu
dD4ocC53aWR0aCgpKSwgc3RhdGljX2Nhc3Q8aW50PihwLmhlaWdodCgpKSk7Cit9CisKIH0gLy8g
bmFtZXNwYWNlIFdlYkNvcmUKIAogI2VuZGlmIC8vIEZsb2F0U2l6ZV9oCkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2suY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9jay5jcHAJKHJldmlzaW9uIDg3MTAzKQorKysgU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
NTg0Niw3ICs1ODQ2LDcgQEAgSW50UmVjdCBSZW5kZXJCbG9jazo6bG9jYWxDYXJldFJlY3QoSW5s
aQogICAgIHJldHVybiBJbnRSZWN0KHgsIHksIGNhcmV0V2lkdGgsIGhlaWdodCk7CiB9CiAKLXZv
aWQgUmVuZGVyQmxvY2s6OmFkZEZvY3VzUmluZ1JlY3RzKFZlY3RvcjxJbnRSZWN0PiYgcmVjdHMs
IGludCB0eCwgaW50IHR5KQordm9pZCBSZW5kZXJCbG9jazo6YWRkRm9jdXNSaW5nUmVjdHMoVmVj
dG9yPEludFJlY3Q+JiByZWN0cywgY29uc3QgSW50UG9pbnQmIG9mZnNldCkKIHsKICAgICAvLyBG
b3IgYmxvY2tzIGluc2lkZSBpbmxpbmVzLCB3ZSBnbyBhaGVhZCBhbmQgaW5jbHVkZSBtYXJnaW5z
IHNvIHRoYXQgd2UgcnVuIHJpZ2h0IHVwIHRvIHRoZQogICAgIC8vIGlubGluZSBib3hlcyBhYm92
ZSBhbmQgYmVsb3cgdXMgKHRodXMgZ2V0dGluZyBtZXJnZWQgd2l0aCB0aGVtIHRvIGZvcm0gYSBz
aW5nbGUgaXJyZWd1bGFyCkBAIC01ODYwLDE3ICs1ODYwLDE3IEBAIHZvaWQgUmVuZGVyQmxvY2s6
OmFkZEZvY3VzUmluZ1JlY3RzKFZlY3QKICAgICAgICAgYm9vbCBwcmV2SW5saW5lSGFzTGluZUJv
eCA9IHRvUmVuZGVySW5saW5lKGlubGluZUVsZW1lbnRDb250aW51YXRpb24oKS0+bm9kZSgpLT5y
ZW5kZXJlcigpKS0+Zmlyc3RMaW5lQm94KCk7IAogICAgICAgICBpbnQgdG9wTWFyZ2luID0gcHJl
dklubGluZUhhc0xpbmVCb3ggPyBjb2xsYXBzZWRNYXJnaW5CZWZvcmUoKSA6IDA7CiAgICAgICAg
IGludCBib3R0b21NYXJnaW4gPSBuZXh0SW5saW5lSGFzTGluZUJveCA/IGNvbGxhcHNlZE1hcmdp
bkFmdGVyKCkgOiAwOwotICAgICAgICBJbnRSZWN0IHJlY3QodHgsIHR5IC0gdG9wTWFyZ2luLCB3
aWR0aCgpLCBoZWlnaHQoKSArIHRvcE1hcmdpbiArIGJvdHRvbU1hcmdpbik7CisgICAgICAgIElu
dFJlY3QgcmVjdChvZmZzZXQueCgpLCBvZmZzZXQueSgpIC0gdG9wTWFyZ2luLCB3aWR0aCgpLCBo
ZWlnaHQoKSArIHRvcE1hcmdpbiArIGJvdHRvbU1hcmdpbik7CiAgICAgICAgIGlmICghcmVjdC5p
c0VtcHR5KCkpCiAgICAgICAgICAgICByZWN0cy5hcHBlbmQocmVjdCk7CiAgICAgfSBlbHNlIGlm
ICh3aWR0aCgpICYmIGhlaWdodCgpKQotICAgICAgICByZWN0cy5hcHBlbmQoSW50UmVjdCh0eCwg
dHksIHdpZHRoKCksIGhlaWdodCgpKSk7CisgICAgICAgIHJlY3RzLmFwcGVuZChJbnRSZWN0KG9m
ZnNldCwgc2l6ZSgpKSk7CiAKICAgICBpZiAoIWhhc092ZXJmbG93Q2xpcCgpICYmICFoYXNDb250
cm9sQ2xpcCgpKSB7CiAgICAgICAgIGZvciAoUm9vdElubGluZUJveCogY3VyciA9IGZpcnN0Um9v
dEJveCgpOyBjdXJyOyBjdXJyID0gY3Vyci0+bmV4dFJvb3RCb3goKSkgewogICAgICAgICAgICAg
aW50IHRvcCA9IG1heChjdXJyLT5saW5lVG9wKCksIGN1cnItPmxvZ2ljYWxUb3AoKSk7CiAgICAg
ICAgICAgICBpbnQgYm90dG9tID0gbWluKGN1cnItPmxpbmVCb3R0b20oKSwgY3Vyci0+bG9naWNh
bFRvcCgpICsgY3Vyci0+bG9naWNhbEhlaWdodCgpKTsKLSAgICAgICAgICAgIEludFJlY3QgcmVj
dCh0eCArIGN1cnItPngoKSwgdHkgKyB0b3AsIGN1cnItPmxvZ2ljYWxXaWR0aCgpLCBib3R0b20g
LSB0b3ApOworICAgICAgICAgICAgSW50UmVjdCByZWN0KG9mZnNldC54KCkgKyBjdXJyLT54KCks
IG9mZnNldC55KCkgKyB0b3AsIGN1cnItPmxvZ2ljYWxXaWR0aCgpLCBib3R0b20gLSB0b3ApOwog
ICAgICAgICAgICAgaWYgKCFyZWN0LmlzRW1wdHkoKSkKICAgICAgICAgICAgICAgICByZWN0cy5h
cHBlbmQocmVjdCk7CiAgICAgICAgIH0KQEAgLTU4ODMsMTYgKzU4ODMsMTQgQEAgdm9pZCBSZW5k
ZXJCbG9jazo6YWRkRm9jdXNSaW5nUmVjdHMoVmVjdAogICAgICAgICAgICAgICAgIGlmIChib3gt
PmxheWVyKCkpIAogICAgICAgICAgICAgICAgICAgICBwb3MgPSBjdXJyLT5sb2NhbFRvQWJzb2x1
dGUoKTsKICAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAgIHBvcyA9IEZs
b2F0UG9pbnQodHggKyBib3gtPngoKSwgdHkgKyBib3gtPnkoKSk7Ci0gICAgICAgICAgICAgICAg
Ym94LT5hZGRGb2N1c1JpbmdSZWN0cyhyZWN0cywgcG9zLngoKSwgcG9zLnkoKSk7CisgICAgICAg
ICAgICAgICAgICAgIHBvcyA9IEZsb2F0UG9pbnQob2Zmc2V0LngoKSArIGJveC0+eCgpLCBvZmZz
ZXQueSgpICsgYm94LT55KCkpOworICAgICAgICAgICAgICAgIGJveC0+YWRkRm9jdXNSaW5nUmVj
dHMocmVjdHMsIGZsb29yZWRJbnRQb2ludChwb3MpKTsKICAgICAgICAgICAgIH0KICAgICAgICAg
fQogICAgIH0KIAogICAgIGlmIChpbmxpbmVFbGVtZW50Q29udGludWF0aW9uKCkpCi0gICAgICAg
IGlubGluZUVsZW1lbnRDb250aW51YXRpb24oKS0+YWRkRm9jdXNSaW5nUmVjdHMocmVjdHMsIAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR4
IC0geCgpICsgaW5saW5lRWxlbWVudENvbnRpbnVhdGlvbigpLT5jb250YWluaW5nQmxvY2soKS0+
eCgpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHR5IC0geSgpICsgaW5saW5lRWxlbWVudENvbnRpbnVhdGlvbigpLT5jb250YWluaW5nQmxv
Y2soKS0+eSgpKTsKKyAgICAgICAgaW5saW5lRWxlbWVudENvbnRpbnVhdGlvbigpLT5hZGRGb2N1
c1JpbmdSZWN0cyhyZWN0cywgZmxvb3JlZEludFBvaW50KG9mZnNldCArIGlubGluZUVsZW1lbnRD
b250aW51YXRpb24oKS0+Y29udGFpbmluZ0Jsb2NrKCktPmxvY2F0aW9uKCkgLSBsb2NhdGlvbigp
KSk7CiB9CiAKIFJlbmRlckJsb2NrKiBSZW5kZXJCbG9jazo6Y3JlYXRlQW5vbnltb3VzQmxvY2so
Ym9vbCBpc0ZsZXhpYmxlQm94KSBjb25zdApJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlckJsb2NrLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlckJsb2NrLmgJKHJldmlzaW9uIDg3MTAzKQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlckJsb2NrLmgJKHdvcmtpbmcgY29weSkKQEAgLTMyOSw3ICszMjksNyBAQCBwcm90ZWN0
ZWQ6CiAgICAgdm9pZCBhZGRPdmVyZmxvd0Zyb21CbG9ja0NoaWxkcmVuKCk7CiAgICAgdm9pZCBh
ZGRPdmVyZmxvd0Zyb21JbmxpbmVDaGlsZHJlbigpOwogCi0gICAgdmlydHVhbCB2b2lkIGFkZEZv
Y3VzUmluZ1JlY3RzKFZlY3RvcjxJbnRSZWN0PiYsIGludCB0eCwgaW50IHR5KTsKKyAgICB2aXJ0
dWFsIHZvaWQgYWRkRm9jdXNSaW5nUmVjdHMoVmVjdG9yPEludFJlY3Q+JiwgY29uc3QgSW50UG9p
bnQmKTsKIAogI2lmIEVOQUJMRShTVkcpCiAgICAgLy8gT25seSB1c2VkIGJ5IFJlbmRlclNWR1Rl
eHQsIHdoaWNoIGV4cGxpY2l0ZWx5IG92ZXJyaWRlcyBSZW5kZXJCbG9jazo6bGF5b3V0QmxvY2so
KSwgZG8gTk9UIHVzZSBmb3IgYW55dGhpbmcgZWxzZS4KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJCb3guY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJCb3guY3BwCShyZXZpc2lvbiA4NzEwMykKKysrIFNvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJCb3guY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01MDYsMTAgKzUwNiwxMCBA
QCBJbnRSZWN0IFJlbmRlckJveDo6b3V0bGluZUJvdW5kc0ZvclJlcGFpCiAgICAgcmV0dXJuIGJv
eDsKIH0KIAotdm9pZCBSZW5kZXJCb3g6OmFkZEZvY3VzUmluZ1JlY3RzKFZlY3RvcjxJbnRSZWN0
PiYgcmVjdHMsIGludCB0eCwgaW50IHR5KQordm9pZCBSZW5kZXJCb3g6OmFkZEZvY3VzUmluZ1Jl
Y3RzKFZlY3RvcjxJbnRSZWN0PiYgcmVjdHMsIGNvbnN0IEludFBvaW50JiBvZmZzZXQpCiB7Ci0g
ICAgaWYgKHdpZHRoKCkgJiYgaGVpZ2h0KCkpCi0gICAgICAgIHJlY3RzLmFwcGVuZChJbnRSZWN0
KHR4LCB0eSwgd2lkdGgoKSwgaGVpZ2h0KCkpKTsKKyAgICBpZiAoIXNpemUoKS5pc0VtcHR5KCkp
CisgICAgICAgIHJlY3RzLmFwcGVuZChJbnRSZWN0KG9mZnNldCwgc2l6ZSgpKSk7CiB9CiAKIElu
dFJlY3QgUmVuZGVyQm94OjpyZWZsZWN0aW9uQm94KCkgY29uc3QKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJCb3guaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyQm94LmgJKHJldmlzaW9uIDg3MTAzKQorKysgU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlckJveC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMjgsNyArMTI4LDcgQEAg
cHVibGljOgogCiAgICAgLy8gQm91bmRzIG9mIHRoZSBvdXRsaW5lIGJveCBpbiBhYnNvbHV0ZSBj
b29yZHMuIFJlc3BlY3RzIHRyYW5zZm9ybXMKICAgICB2aXJ0dWFsIEludFJlY3Qgb3V0bGluZUJv
dW5kc0ZvclJlcGFpbnQoUmVuZGVyQm94TW9kZWxPYmplY3QqIC8qcmVwYWludENvbnRhaW5lciov
LCBJbnRQb2ludCogY2FjaGVkT2Zmc2V0VG9SZXBhaW50Q29udGFpbmVyKSBjb25zdDsKLSAgICB2
aXJ0dWFsIHZvaWQgYWRkRm9jdXNSaW5nUmVjdHMoVmVjdG9yPEludFJlY3Q+JiwgaW50IHR4LCBp
bnQgdHkpOworICAgIHZpcnR1YWwgdm9pZCBhZGRGb2N1c1JpbmdSZWN0cyhWZWN0b3I8SW50UmVj
dD4mLCBjb25zdCBJbnRQb2ludCYpOwogCiAgICAgLy8gVXNlIHRoaXMgd2l0aCBjYXV0aW9uISBO
byB0eXBlIGNoZWNraW5nIGlzIGRvbmUhCiAgICAgUmVuZGVyQm94KiBwcmV2aW91c1NpYmxpbmdC
b3goKSBjb25zdDsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJJbmxpbmUu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJJbmxpbmUu
Y3BwCShyZXZpc2lvbiA4NzEwMykKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJJ
bmxpbmUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMzM3LDM2ICsxMzM3LDMyIEBAIHZvaWQgUmVu
ZGVySW5saW5lOjppbWFnZUNoYW5nZWQoV3JhcHBlZEkKICAgICByZXBhaW50KCk7CiB9CiAKLXZv
aWQgUmVuZGVySW5saW5lOjphZGRGb2N1c1JpbmdSZWN0cyhWZWN0b3I8SW50UmVjdD4mIHJlY3Rz
LCBpbnQgdHgsIGludCB0eSkKK3ZvaWQgUmVuZGVySW5saW5lOjphZGRGb2N1c1JpbmdSZWN0cyhW
ZWN0b3I8SW50UmVjdD4mIHJlY3RzLCBjb25zdCBJbnRQb2ludCYgb2Zmc2V0KQogewogICAgIGlm
ICghYWx3YXlzQ3JlYXRlTGluZUJveGVzKCkpCi0gICAgICAgIGN1bGxlZElubGluZUFic29sdXRl
UmVjdHModGhpcywgcmVjdHMsIEludFNpemUodHgsIHR5KSk7CisgICAgICAgIGN1bGxlZElubGlu
ZUFic29sdXRlUmVjdHModGhpcywgcmVjdHMsIHRvU2l6ZShvZmZzZXQpKTsKICAgICBlbHNlIHsK
ICAgICAgICAgZm9yIChJbmxpbmVGbG93Qm94KiBjdXJyID0gZmlyc3RMaW5lQm94KCk7IGN1cnI7
IGN1cnIgPSBjdXJyLT5uZXh0TGluZUJveCgpKQotICAgICAgICAgICAgcmVjdHMuYXBwZW5kKGVu
Y2xvc2luZ0ludFJlY3QoRmxvYXRSZWN0KHR4ICsgY3Vyci0+eCgpLCB0eSArIGN1cnItPnkoKSwg
Y3Vyci0+d2lkdGgoKSwgY3Vyci0+aGVpZ2h0KCkpKSk7CisgICAgICAgICAgICByZWN0cy5hcHBl
bmQoZW5jbG9zaW5nSW50UmVjdChGbG9hdFJlY3Qob2Zmc2V0LngoKSArIGN1cnItPngoKSwgb2Zm
c2V0LnkoKSArIGN1cnItPnkoKSwgY3Vyci0+d2lkdGgoKSwgY3Vyci0+aGVpZ2h0KCkpKSk7CiAg
ICAgfQogCiAgICAgZm9yIChSZW5kZXJPYmplY3QqIGN1cnIgPSBmaXJzdENoaWxkKCk7IGN1cnI7
IGN1cnIgPSBjdXJyLT5uZXh0U2libGluZygpKSB7CiAgICAgICAgIGlmICghY3Vyci0+aXNUZXh0
KCkgJiYgIWN1cnItPmlzTGlzdE1hcmtlcigpKSB7Ci0gICAgICAgICAgICBGbG9hdFBvaW50IHBv
cyh0eCwgdHkpOworICAgICAgICAgICAgRmxvYXRQb2ludCBwb3Mob2Zmc2V0KTsKICAgICAgICAg
ICAgIC8vIEZJWE1FOiBUaGlzIGRvZXNuJ3Qgd29yayBjb3JyZWN0bHkgd2l0aCB0cmFuc2Zvcm1z
LgogICAgICAgICAgICAgaWYgKGN1cnItPmhhc0xheWVyKCkpIAogICAgICAgICAgICAgICAgIHBv
cyA9IGN1cnItPmxvY2FsVG9BYnNvbHV0ZSgpOwogICAgICAgICAgICAgZWxzZSBpZiAoY3Vyci0+
aXNCb3goKSkKICAgICAgICAgICAgICAgICBwb3MubW92ZSh0b1JlbmRlckJveChjdXJyKS0+eCgp
LCB0b1JlbmRlckJveChjdXJyKS0+eSgpKTsKLSAgICAgICAgICAgIGN1cnItPmFkZEZvY3VzUmlu
Z1JlY3RzKHJlY3RzLCBwb3MueCgpLCBwb3MueSgpKTsKKyAgICAgICAgICAgIGN1cnItPmFkZEZv
Y3VzUmluZ1JlY3RzKHJlY3RzLCBmbG9vcmVkSW50UG9pbnQocG9zKSk7CiAgICAgICAgIH0KICAg
ICB9CiAKICAgICBpZiAoY29udGludWF0aW9uKCkpIHsKICAgICAgICAgaWYgKGNvbnRpbnVhdGlv
bigpLT5pc0lubGluZSgpKQotICAgICAgICAgICAgY29udGludWF0aW9uKCktPmFkZEZvY3VzUmlu
Z1JlY3RzKHJlY3RzLCAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB0eCAtIGNvbnRhaW5pbmdCbG9jaygpLT54KCkgKyBjb250aW51YXRpb24oKS0+Y29udGFp
bmluZ0Jsb2NrKCktPngoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB0eSAtIGNvbnRhaW5pbmdCbG9jaygpLT55KCkgKyBjb250aW51YXRpb24oKS0+Y29u
dGFpbmluZ0Jsb2NrKCktPnkoKSk7CisgICAgICAgICAgICBjb250aW51YXRpb24oKS0+YWRkRm9j
dXNSaW5nUmVjdHMocmVjdHMsIGZsb29yZWRJbnRQb2ludChvZmZzZXQgKyBjb250aW51YXRpb24o
KS0+Y29udGFpbmluZ0Jsb2NrKCktPmxvY2F0aW9uKCkgLSBjb250YWluaW5nQmxvY2soKS0+bG9j
YXRpb24oKSkpOwogICAgICAgICBlbHNlCi0gICAgICAgICAgICBjb250aW51YXRpb24oKS0+YWRk
Rm9jdXNSaW5nUmVjdHMocmVjdHMsIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHR4IC0gY29udGFpbmluZ0Jsb2NrKCktPngoKSArIHRvUmVuZGVyQm94KGNv
bnRpbnVhdGlvbigpKS0+eCgpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHR5IC0gY29udGFpbmluZ0Jsb2NrKCktPnkoKSArIHRvUmVuZGVyQm94KGNvbnRp
bnVhdGlvbigpKS0+eSgpKTsKKyAgICAgICAgICAgIGNvbnRpbnVhdGlvbigpLT5hZGRGb2N1c1Jp
bmdSZWN0cyhyZWN0cywgZmxvb3JlZEludFBvaW50KG9mZnNldCArIHRvUmVuZGVyQm94KGNvbnRp
bnVhdGlvbigpKS0+bG9jYXRpb24oKSAtIGNvbnRhaW5pbmdCbG9jaygpLT5sb2NhdGlvbigpKSk7
CiAgICAgfQogfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVySW5saW5l
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlcklubGluZS5o
CShyZXZpc2lvbiA4NzEwMykKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJJbmxp
bmUuaAkod29ya2luZyBjb3B5KQpAQCAtNzUsNyArNzUsNyBAQCBwdWJsaWM6CiAgICAgCiAgICAg
SW50U2l6ZSByZWxhdGl2ZVBvc2l0aW9uZWRJbmxpbmVPZmZzZXQoY29uc3QgUmVuZGVyQm94KiBj
aGlsZCkgY29uc3Q7CiAKLSAgICB2aXJ0dWFsIHZvaWQgYWRkRm9jdXNSaW5nUmVjdHMoVmVjdG9y
PEludFJlY3Q+JiwgaW50IHR4LCBpbnQgdHkpOworICAgIHZpcnR1YWwgdm9pZCBhZGRGb2N1c1Jp
bmdSZWN0cyhWZWN0b3I8SW50UmVjdD4mLCBjb25zdCBJbnRQb2ludCYpOwogICAgIHZvaWQgcGFp
bnRPdXRsaW5lKEdyYXBoaWNzQ29udGV4dCosIGludCB0eCwgaW50IHR5KTsKIAogICAgIHVzaW5n
IFJlbmRlckJveE1vZGVsT2JqZWN0Ojpjb250aW51YXRpb247CkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyTGlzdEJveC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlckxpc3RCb3guY3BwCShyZXZpc2lvbiA4NzEwMykKKysrIFNvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMaXN0Qm94LmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MzAxLDE3ICszMDEsMTcgQEAgdm9pZCBSZW5kZXJMaXN0Qm94OjpwYWludE9iamVjdChQYWludElu
ZgogICAgIH0KIH0KIAotdm9pZCBSZW5kZXJMaXN0Qm94OjphZGRGb2N1c1JpbmdSZWN0cyhWZWN0
b3I8SW50UmVjdD4mIHJlY3RzLCBpbnQgdHgsIGludCB0eSkKK3ZvaWQgUmVuZGVyTGlzdEJveDo6
YWRkRm9jdXNSaW5nUmVjdHMoVmVjdG9yPEludFJlY3Q+JiByZWN0cywgY29uc3QgSW50UG9pbnQm
IG9mZnNldCkKIHsKICAgICBpZiAoIWlzU3BhdGlhbE5hdmlnYXRpb25FbmFibGVkKGZyYW1lKCkp
KQotICAgICAgICByZXR1cm4gUmVuZGVyQmxvY2s6OmFkZEZvY3VzUmluZ1JlY3RzKHJlY3RzLCB0
eCwgdHkpOworICAgICAgICByZXR1cm4gUmVuZGVyQmxvY2s6OmFkZEZvY3VzUmluZ1JlY3RzKHJl
Y3RzLCBvZmZzZXQpOwogCiAgICAgU2VsZWN0RWxlbWVudCogc2VsZWN0ID0gdG9TZWxlY3RFbGVt
ZW50KHN0YXRpY19jYXN0PEVsZW1lbnQqPihub2RlKCkpKTsKIAogICAgIC8vIEZvY3VzIHRoZSBs
YXN0IHNlbGVjdGVkIGl0ZW0uCiAgICAgaW50IHNlbGVjdGVkSXRlbSA9IHNlbGVjdC0+YWN0aXZl
U2VsZWN0aW9uRW5kTGlzdEluZGV4KCk7CiAgICAgaWYgKHNlbGVjdGVkSXRlbSA+PSAwKSB7Ci0g
ICAgICAgIHJlY3RzLmFwcGVuZChpdGVtQm91bmRpbmdCb3hSZWN0KHR4LCB0eSwgc2VsZWN0ZWRJ
dGVtKSk7CisgICAgICAgIHJlY3RzLmFwcGVuZChpdGVtQm91bmRpbmdCb3hSZWN0KG9mZnNldC54
KCksIG9mZnNldC55KCksIHNlbGVjdGVkSXRlbSkpOwogICAgICAgICByZXR1cm47CiAgICAgfQog
CkBAIC0zMjEsNyArMzIxLDcgQEAgdm9pZCBSZW5kZXJMaXN0Qm94OjphZGRGb2N1c1JpbmdSZWN0
cyhWZQogICAgIGZvciAoaW50IGkgPSAwOyBpIDwgc2l6ZTsgKytpKSB7CiAgICAgICAgIE9wdGlv
bkVsZW1lbnQqIG9wdGlvbkVsZW1lbnQgPSB0b09wdGlvbkVsZW1lbnQobGlzdEl0ZW1zW2ldKTsK
ICAgICAgICAgaWYgKG9wdGlvbkVsZW1lbnQgJiYgIW9wdGlvbkVsZW1lbnQtPmRpc2FibGVkKCkp
IHsKLSAgICAgICAgICAgIHJlY3RzLmFwcGVuZChpdGVtQm91bmRpbmdCb3hSZWN0KHR4LCB0eSwg
aSkpOworICAgICAgICAgICAgcmVjdHMuYXBwZW5kKGl0ZW1Cb3VuZGluZ0JveFJlY3Qob2Zmc2V0
LngoKSwgb2Zmc2V0LnkoKSwgaSkpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAg
ICAgfQpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxpc3RCb3guaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGlzdEJveC5oCShyZXZp
c2lvbiA4NzEwMykKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMaXN0Qm94LmgJ
KHdvcmtpbmcgY29weSkKQEAgLTc5LDcgKzc5LDcgQEAgcHJpdmF0ZToKIAogICAgIHZpcnR1YWwg
dm9pZCBsYXlvdXQoKTsKIAotICAgIHZpcnR1YWwgdm9pZCBhZGRGb2N1c1JpbmdSZWN0cyhWZWN0
b3I8SW50UmVjdD4mLCBpbnQgdHgsIGludCB0eSk7CisgICAgdmlydHVhbCB2b2lkIGFkZEZvY3Vz
UmluZ1JlY3RzKFZlY3RvcjxJbnRSZWN0PiYsIGNvbnN0IEludFBvaW50Jik7CiAKICAgICB2aXJ0
dWFsIGJvb2wgY2FuQmVQcm9ncmFtYXRpY2FsbHlTY3JvbGxlZChib29sKSBjb25zdCB7IHJldHVy
biB0cnVlOyB9CiAgICAgdmlydHVhbCB2b2lkIGF1dG9zY3JvbGwoKTsKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJPYmplY3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJPYmplY3QuY3BwCShyZXZpc2lvbiA4NzEwMykKKysrIFNv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJPYmplY3QuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0xMDAwLDcgKzEwMDAsNyBAQCB2b2lkIFJlbmRlck9iamVjdDo6ZHJhd0FyY0ZvckJveFNpZGUo
R3JhCiB2b2lkIFJlbmRlck9iamVjdDo6cGFpbnRGb2N1c1JpbmcoR3JhcGhpY3NDb250ZXh0KiBj
b250ZXh0LCBpbnQgdHgsIGludCB0eSwgUmVuZGVyU3R5bGUqIHN0eWxlKQogewogICAgIFZlY3Rv
cjxJbnRSZWN0PiBmb2N1c1JpbmdSZWN0czsKLSAgICBhZGRGb2N1c1JpbmdSZWN0cyhmb2N1c1Jp
bmdSZWN0cywgdHgsIHR5KTsKKyAgICBhZGRGb2N1c1JpbmdSZWN0cyhmb2N1c1JpbmdSZWN0cywg
SW50UG9pbnQodHgsIHR5KSk7CiAgICAgaWYgKHN0eWxlLT5vdXRsaW5lU3R5bGVJc0F1dG8oKSkK
ICAgICAgICAgY29udGV4dC0+ZHJhd0ZvY3VzUmluZyhmb2N1c1JpbmdSZWN0cywgc3R5bGUtPm91
dGxpbmVXaWR0aCgpLCBzdHlsZS0+b3V0bGluZU9mZnNldCgpLCBzdHlsZS0+dmlzaXRlZERlcGVu
ZGVudENvbG9yKENTU1Byb3BlcnR5T3V0bGluZUNvbG9yKSk7CiAgICAgZWxzZQpAQCAtMTExOSw4
ICsxMTE5LDggQEAgdm9pZCBSZW5kZXJPYmplY3Q6OmFic29sdXRlRm9jdXNSaW5nUXVhZAogICAg
IC8vIGltcGxpY2l0bHkgYXNzdW1lcyB0aGF0LiBUaGlzIGRvZXNuJ3Qgd29yayBjb3JyZWN0bHkg
d2l0aCB0cmFuc2Zvcm1lZAogICAgIC8vIGRlc2NlbmRhbnRzLgogICAgIEZsb2F0UG9pbnQgYWJz
b2x1dGVQb2ludCA9IGxvY2FsVG9BYnNvbHV0ZSgpOwotICAgIGFkZEZvY3VzUmluZ1JlY3RzKHJl
Y3RzLCBhYnNvbHV0ZVBvaW50LngoKSwgYWJzb2x1dGVQb2ludC55KCkpOwotICAgIHNpemVfdCBj
b3VudCA9IHJlY3RzLnNpemUoKTsKKyAgICBhZGRGb2N1c1JpbmdSZWN0cyhyZWN0cywgZmxvb3Jl
ZEludFBvaW50KGFic29sdXRlUG9pbnQpKTsKKyAgICBzaXplX3QgY291bnQgPSByZWN0cy5zaXpl
KCk7IAogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgY291bnQ7ICsraSkgewogICAgICAgICBJ
bnRSZWN0IHJlY3QgPSByZWN0c1tpXTsKICAgICAgICAgcmVjdC5tb3ZlKC1hYnNvbHV0ZVBvaW50
LngoKSwgLWFic29sdXRlUG9pbnQueSgpKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJPYmplY3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyT2JqZWN0LmgJKHJldmlzaW9uIDg3MTAzKQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlck9iamVjdC5oCSh3b3JraW5nIGNvcHkpCkBAIC03NzUsNyArNzc1LDcgQEAgcHVi
bGljOgogICAgIGJvb2wgc2hvdWxkVXNlVHJhbnNmb3JtRnJvbUNvbnRhaW5lcihjb25zdCBSZW5k
ZXJPYmplY3QqIGNvbnRhaW5lcikgY29uc3Q7CiAgICAgdm9pZCBnZXRUcmFuc2Zvcm1Gcm9tQ29u
dGFpbmVyKGNvbnN0IFJlbmRlck9iamVjdCogY29udGFpbmVyLCBjb25zdCBJbnRTaXplJiBvZmZz
ZXRJbkNvbnRhaW5lciwgVHJhbnNmb3JtYXRpb25NYXRyaXgmKSBjb25zdDsKICAgICAKLSAgICB2
aXJ0dWFsIHZvaWQgYWRkRm9jdXNSaW5nUmVjdHMoVmVjdG9yPEludFJlY3Q+JiwgaW50IC8qdHgq
LywgaW50IC8qdHkqLykgeyB9OworICAgIHZpcnR1YWwgdm9pZCBhZGRGb2N1c1JpbmdSZWN0cyhW
ZWN0b3I8SW50UmVjdD4mLCBjb25zdCBJbnRQb2ludCYpIHsgfTsKIAogICAgIEludFJlY3QgYWJz
b2x1dGVPdXRsaW5lQm91bmRzKCkgY29uc3QKICAgICB7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyVGV4dENvbnRyb2wuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0Q29udHJvbC5jcHAJKHJldmlzaW9uIDg3MTAzKQorKysg
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRleHRDb250cm9sLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtNTkxLDEwICs1OTEsMTAgQEAgdm9pZCBSZW5kZXJUZXh0Q29udHJvbDo6c2VsZWN0
aW9uQ2hhbmdlZAogICAgIH0KIH0KIAotdm9pZCBSZW5kZXJUZXh0Q29udHJvbDo6YWRkRm9jdXNS
aW5nUmVjdHMoVmVjdG9yPEludFJlY3Q+JiByZWN0cywgaW50IHR4LCBpbnQgdHkpCit2b2lkIFJl
bmRlclRleHRDb250cm9sOjphZGRGb2N1c1JpbmdSZWN0cyhWZWN0b3I8SW50UmVjdD4mIHJlY3Rz
LCBjb25zdCBJbnRQb2ludCYgb2Zmc2V0KQogewotICAgIGlmICh3aWR0aCgpICYmIGhlaWdodCgp
KQotICAgICAgICByZWN0cy5hcHBlbmQoSW50UmVjdCh0eCwgdHksIHdpZHRoKCksIGhlaWdodCgp
KSk7CisgICAgaWYgKCFzaXplKCkuaXNFbXB0eSgpKQorICAgICAgICByZWN0cy5hcHBlbmQoSW50
UmVjdChvZmZzZXQsIHNpemUoKSkpOwogfQogCiB2b2lkIFJlbmRlclRleHRDb250cm9sOjp1cGRh
dGVQbGFjZWhvbGRlclZpc2liaWxpdHkoYm9vbCBwbGFjZWhvbGRlclNob3VsZEJlVmlzaWJsZSwg
Ym9vbCBwbGFjZWhvbGRlclZhbHVlQ2hhbmdlZCkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJUZXh0Q29udHJvbC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJUZXh0Q29udHJvbC5oCShyZXZpc2lvbiA4NzEwMykKKysrIFNvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0Q29udHJvbC5oCSh3b3JraW5nIGNvcHkpCkBAIC05
Miw3ICs5Miw3IEBAIHByaXZhdGU6CiAgICAgdmlydHVhbCBib29sIGF2b2lkc0Zsb2F0cygpIGNv
bnN0IHsgcmV0dXJuIHRydWU7IH0KICAgICB2aXJ0dWFsIHZvaWQgcGFpbnRPYmplY3QoUGFpbnRJ
bmZvJiwgaW50IHR4LCBpbnQgdHkpOwogICAgIAotICAgIHZpcnR1YWwgdm9pZCBhZGRGb2N1c1Jp
bmdSZWN0cyhWZWN0b3I8SW50UmVjdD4mLCBpbnQgdHgsIGludCB0eSk7CisgICAgdmlydHVhbCB2
b2lkIGFkZEZvY3VzUmluZ1JlY3RzKFZlY3RvcjxJbnRSZWN0PiYsIGNvbnN0IEludFBvaW50Jik7
CiAKICAgICB2aXJ0dWFsIGJvb2wgY2FuQmVQcm9ncmFtYXRpY2FsbHlTY3JvbGxlZChib29sKSBj
b25zdCB7IHJldHVybiB0cnVlOyB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmUuY3BwCShyZXZpc2lvbiA4
NzEwMykKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0Q29udHJvbFNpbmds
ZUxpbmUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNjEsMTEgKzI2MSwxMSBAQCB2b2lkIFJlbmRl
clRleHRDb250cm9sU2luZ2xlTGluZTo6cGFpbnRCCiAgICAgcGFpbnRCb3hEZWNvcmF0aW9uc1dp
dGhTaXplKHBhaW50SW5mbywgSW50UmVjdCh0eCwgdHksIHdpZHRoKCkgLSBkZWNvcmF0aW9uV2lk
dGhSaWdodCgpLCBoZWlnaHQoKSkpOwogfQogCi12b2lkIFJlbmRlclRleHRDb250cm9sU2luZ2xl
TGluZTo6YWRkRm9jdXNSaW5nUmVjdHMoVmVjdG9yPEludFJlY3Q+JiByZWN0cywgaW50IHR4LCBp
bnQgdHkpCit2b2lkIFJlbmRlclRleHRDb250cm9sU2luZ2xlTGluZTo6YWRkRm9jdXNSaW5nUmVj
dHMoVmVjdG9yPEludFJlY3Q+JiByZWN0cywgY29uc3QgSW50UG9pbnQmIHBhaW50T2Zmc2V0KQog
ewogICAgIGludCB3ID0gd2lkdGgoKSAtIGRlY29yYXRpb25XaWR0aFJpZ2h0KCk7CiAgICAgaWYg
KHcgJiYgaGVpZ2h0KCkpCi0gICAgICAgIHJlY3RzLmFwcGVuZChJbnRSZWN0KHR4LCB0eSwgdywg
aGVpZ2h0KCkpKTsKKyAgICAgICAgcmVjdHMuYXBwZW5kKEludFJlY3QocGFpbnRPZmZzZXQsIElu
dFNpemUodywgaGVpZ2h0KCkpKSk7CiB9CiAKIHZvaWQgUmVuZGVyVGV4dENvbnRyb2xTaW5nbGVM
aW5lOjpsYXlvdXQoKQpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRleHRD
b250cm9sU2luZ2xlTGluZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmUuaAkocmV2aXNpb24gODcxMDMpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lLmgJKHdvcmtp
bmcgY29weSkKQEAgLTc0LDcgKzc0LDcgQEAgcHJpdmF0ZToKICAgICB2aXJ0dWFsIHZvaWQgc3Vi
dHJlZUhhc0NoYW5nZWQoKTsKICAgICB2aXJ0dWFsIHZvaWQgcGFpbnQoUGFpbnRJbmZvJiwgaW50
IHR4LCBpbnQgdHkpOwogICAgIHZpcnR1YWwgdm9pZCBwYWludEJveERlY29yYXRpb25zKFBhaW50
SW5mbyYsIGludCB0eCwgaW50IHR5KTsKLSAgICB2aXJ0dWFsIHZvaWQgYWRkRm9jdXNSaW5nUmVj
dHMoVmVjdG9yPEludFJlY3Q+JiwgaW50IHR4LCBpbnQgdHkpOworICAgIHZpcnR1YWwgdm9pZCBh
ZGRGb2N1c1JpbmdSZWN0cyhWZWN0b3I8SW50UmVjdD4mLCBjb25zdCBJbnRQb2ludCYpOwogICAg
IHZpcnR1YWwgdm9pZCBsYXlvdXQoKTsKIAogICAgIHZpcnR1YWwgYm9vbCBub2RlQXRQb2ludChj
b25zdCBIaXRUZXN0UmVxdWVzdCYsIEhpdFRlc3RSZXN1bHQmLCBjb25zdCBJbnRQb2ludCYgcG9p
bnRJbkNvbnRhaW5lciwgaW50IHR4LCBpbnQgdHksIEhpdFRlc3RBY3Rpb24pOwpJbmRleDogU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdDb250YWluZXIuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHQ29udGFpbmVyLmNw
cAkocmV2aXNpb24gODcxMDMpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRl
clNWR0NvbnRhaW5lci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEzOSw3ICsxMzksNyBAQCB2b2lk
IFJlbmRlclNWR0NvbnRhaW5lcjo6cGFpbnQoUGFpbnRJbmZvCiB9CiAKIC8vIGFkZEZvY3VzUmlu
Z1JlY3RzIGlzIGNhbGxlZCBmcm9tIHBhaW50T3V0bGluZSBhbmQgbmVlZHMgdG8gYmUgaW4gdGhl
IHNhbWUgY29vcmRpbmF0ZXMgYXMgdGhlIHBhaW50T3VsaW5lIGNhbGwKLXZvaWQgUmVuZGVyU1ZH
Q29udGFpbmVyOjphZGRGb2N1c1JpbmdSZWN0cyhWZWN0b3I8SW50UmVjdD4mIHJlY3RzLCBpbnQs
IGludCkKK3ZvaWQgUmVuZGVyU1ZHQ29udGFpbmVyOjphZGRGb2N1c1JpbmdSZWN0cyhWZWN0b3I8
SW50UmVjdD4mIHJlY3RzLCBjb25zdCBJbnRQb2ludCYpCiB7CiAgICAgSW50UmVjdCBwYWludFJl
Y3RJblBhcmVudCA9IGVuY2xvc2luZ0ludFJlY3QobG9jYWxUb1BhcmVudFRyYW5zZm9ybSgpLm1h
cFJlY3QocmVwYWludFJlY3RJbkxvY2FsQ29vcmRpbmF0ZXMoKSkpOwogICAgIGlmICghcGFpbnRS
ZWN0SW5QYXJlbnQuaXNFbXB0eSgpKQpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2
Zy9SZW5kZXJTVkdDb250YWluZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvc3ZnL1JlbmRlclNWR0NvbnRhaW5lci5oCShyZXZpc2lvbiA4NzEwMykKKysrIFNvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHQ29udGFpbmVyLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTUxLDcgKzUxLDcgQEAgcHJvdGVjdGVkOgogCiAgICAgdmlydHVhbCB2b2lkIGxheW91
dCgpOwogCi0gICAgdmlydHVhbCB2b2lkIGFkZEZvY3VzUmluZ1JlY3RzKFZlY3RvcjxJbnRSZWN0
PiYsIGludCB0eCwgaW50IHR5KTsKKyAgICB2aXJ0dWFsIHZvaWQgYWRkRm9jdXNSaW5nUmVjdHMo
VmVjdG9yPEludFJlY3Q+JiwgY29uc3QgSW50UG9pbnQmKTsKIAogICAgIHZpcnR1YWwgRmxvYXRS
ZWN0IG9iamVjdEJvdW5kaW5nQm94KCkgY29uc3QgeyByZXR1cm4gbV9vYmplY3RCb3VuZGluZ0Jv
eDsgfQogICAgIHZpcnR1YWwgRmxvYXRSZWN0IHN0cm9rZUJvdW5kaW5nQm94KCkgY29uc3QgeyBy
ZXR1cm4gbV9zdHJva2VCb3VuZGluZ0JveDsgfQpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL3N2Zy9SZW5kZXJTVkdJbWFnZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdJbWFnZS5jcHAJKHJldmlzaW9uIDg3MTAzKQorKysgU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdJbWFnZS5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTE3OSw3ICsxNzksNyBAQCB2b2lkIFJlbmRlclNWR0ltYWdlOjppbWFnZUNoYW5nZWQo
V3JhcHBlCiAgICAgcmVwYWludCgpOwogfQogCi12b2lkIFJlbmRlclNWR0ltYWdlOjphZGRGb2N1
c1JpbmdSZWN0cyhWZWN0b3I8SW50UmVjdD4mIHJlY3RzLCBpbnQsIGludCkKK3ZvaWQgUmVuZGVy
U1ZHSW1hZ2U6OmFkZEZvY3VzUmluZ1JlY3RzKFZlY3RvcjxJbnRSZWN0PiYgcmVjdHMsIGNvbnN0
IEludFBvaW50JikKIHsKICAgICAvLyB0aGlzIGlzIGNhbGxlZCBmcm9tIHBhaW50KCkgYWZ0ZXIg
dGhlIGxvY2FsVHJhbnNmb3JtIGhhcyBhbHJlYWR5IGJlZW4gYXBwbGllZAogICAgIEludFJlY3Qg
Y29udGVudFJlY3QgPSBlbmNsb3NpbmdJbnRSZWN0KHJlcGFpbnRSZWN0SW5Mb2NhbENvb3JkaW5h
dGVzKCkpOwpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdJbWFn
ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZH
SW1hZ2UuaAkocmV2aXNpb24gODcxMDMpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3Zn
L1JlbmRlclNWR0ltYWdlLmgJKHdvcmtpbmcgY29weSkKQEAgLTU3LDcgKzU3LDcgQEAgcHJpdmF0
ZToKICAgICB2aXJ0dWFsIEZsb2F0UmVjdCBzdHJva2VCb3VuZGluZ0JveCgpIGNvbnN0IHsgcmV0
dXJuIG1fb2JqZWN0Qm91bmRpbmdCb3g7IH0KICAgICB2aXJ0dWFsIEZsb2F0UmVjdCByZXBhaW50
UmVjdEluTG9jYWxDb29yZGluYXRlcygpIGNvbnN0IHsgcmV0dXJuIG1fcmVwYWludEJvdW5kaW5n
Qm94OyB9CiAKLSAgICB2aXJ0dWFsIHZvaWQgYWRkRm9jdXNSaW5nUmVjdHMoVmVjdG9yPEludFJl
Y3Q+JiwgaW50IHR4LCBpbnQgdHkpOworICAgIHZpcnR1YWwgdm9pZCBhZGRGb2N1c1JpbmdSZWN0
cyhWZWN0b3I8SW50UmVjdD4mLCBjb25zdCBJbnRQb2ludCYpOwogCiAgICAgdmlydHVhbCB2b2lk
IGltYWdlQ2hhbmdlZChXcmFwcGVkSW1hZ2VQdHIsIGNvbnN0IEludFJlY3QqID0gMCk7CiAKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUGF0aC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdQYXRoLmNwcAko
cmV2aXNpb24gODcxMDMpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNW
R1BhdGguY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMzYsNyArMjM2LDcgQEAgdm9pZCBSZW5kZXJT
VkdQYXRoOjpwYWludChQYWludEluZm8mIHBhaQogCiAvLyBUaGlzIG1ldGhvZCBpcyBjYWxsZWQg
ZnJvbSBpbnNpZGUgcGFpbnRPdXRsaW5lKCkgc2luY2Ugd2UgY2FsbCBwYWludE91dGxpbmUoKQog
Ly8gd2hpbGUgdHJhbnNmb3JtZWQgdG8gb3VyIGNvb3JkIHN5c3RlbSwgcmV0dXJuIGxvY2FsIGNv
b3Jkcwotdm9pZCBSZW5kZXJTVkdQYXRoOjphZGRGb2N1c1JpbmdSZWN0cyhWZWN0b3I8SW50UmVj
dD4mIHJlY3RzLCBpbnQsIGludCkgCit2b2lkIFJlbmRlclNWR1BhdGg6OmFkZEZvY3VzUmluZ1Jl
Y3RzKFZlY3RvcjxJbnRSZWN0PiYgcmVjdHMsIGNvbnN0IEludFBvaW50JikgCiB7CiAgICAgSW50
UmVjdCByZWN0ID0gZW5jbG9zaW5nSW50UmVjdChyZXBhaW50UmVjdEluTG9jYWxDb29yZGluYXRl
cygpKTsKICAgICBpZiAoIXJlY3QuaXNFbXB0eSgpKQpJbmRleDogU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL3N2Zy9SZW5kZXJTVkdQYXRoLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdQYXRoLmgJKHJldmlzaW9uIDg3MTAzKQorKysgU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdQYXRoLmgJKHdvcmtpbmcgY29weSkKQEAg
LTYxLDcgKzYxLDcgQEAgcHJpdmF0ZToKIAogICAgIHZpcnR1YWwgdm9pZCBsYXlvdXQoKTsKICAg
ICB2aXJ0dWFsIHZvaWQgcGFpbnQoUGFpbnRJbmZvJiwgaW50IHBhcmVudFgsIGludCBwYXJlbnRZ
KTsKLSAgICB2aXJ0dWFsIHZvaWQgYWRkRm9jdXNSaW5nUmVjdHMoVmVjdG9yPEludFJlY3Q+Jiwg
aW50IHR4LCBpbnQgdHkpOworICAgIHZpcnR1YWwgdm9pZCBhZGRGb2N1c1JpbmdSZWN0cyhWZWN0
b3I8SW50UmVjdD4mLCBjb25zdCBJbnRQb2ludCYpOwogCiAgICAgdmlydHVhbCBib29sIG5vZGVB
dEZsb2F0UG9pbnQoY29uc3QgSGl0VGVzdFJlcXVlc3QmLCBIaXRUZXN0UmVzdWx0JiwgY29uc3Qg
RmxvYXRQb2ludCYgcG9pbnRJblBhcmVudCwgSGl0VGVzdEFjdGlvbik7CiAK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>94663</attachid>
            <date>2011-05-24 12:27:40 -0700</date>
            <delta_ts>2011-05-24 17:12:37 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-60783-20110524122739.patch</filename>
            <type>text/plain</type>
            <size>35815</size>
            <attacher name="Levi Weintraub">leviw</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDg3MTg1KQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsNTAgQEAKKzIwMTEtMDUtMjQgIExldmkgV2Vp
bnRyYXViICA8bGV2aXdAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9E
WSAoT09QUyEpLgorCisgICAgICAgIFN3aXRjaCBhZGRGb2N1c1JpbmdSZWN0cyB0byB1c2UgSW50
UG9pbnQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTYw
NzgzCisKKyAgICAgICAgU3dpdGNoaW5nIGFkZEZvY3VzUmluZ1JlY3RzIHRvIHVzZSBhbiBJbnRQ
b2ludCByZXByZXNlbnRpbmcgdGhlIG9mZnNldCBiZWluZworICAgICAgICBhcHBsaWVkIGluc3Rl
YWQgb2YgYSBwYWlyIG9mIGludHMuCisKKyAgICAgICAgTm8gbmV3IHRlc3RzIGFzIHRoaXMgaXMg
b25seSByZWZhY3RvcmluZy4KKworICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0Zsb2F0U2l6
ZS5oOgorICAgICAgICAoV2ViQ29yZTo6Zmxvb3JlZEludFBvaW50KToKKyAgICAgICAgKiByZW5k
ZXJpbmcvUmVuZGVyQmxvY2suY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQmxvY2s6OmFk
ZEZvY3VzUmluZ1JlY3RzKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyQmxvY2suaDoKKyAg
ICAgICAgKiByZW5kZXJpbmcvUmVuZGVyQm94LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRl
ckJveDo6YWRkRm9jdXNSaW5nUmVjdHMpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJCb3gu
aDoKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVySW5saW5lLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OlJlbmRlcklubGluZTo6YWRkRm9jdXNSaW5nUmVjdHMpOgorICAgICAgICAqIHJlbmRlcmlu
Zy9SZW5kZXJJbmxpbmUuaDoKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyTGlzdEJveC5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMaXN0Qm94OjphZGRGb2N1c1JpbmdSZWN0cyk6Cisg
ICAgICAgICogcmVuZGVyaW5nL1JlbmRlckxpc3RCb3guaDoKKyAgICAgICAgKiByZW5kZXJpbmcv
UmVuZGVyT2JqZWN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlck9iamVjdDo6cGFpbnRG
b2N1c1JpbmcpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyT2JqZWN0OjphYnNvbHV0ZUZvY3Vz
UmluZ1F1YWRzKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyT2JqZWN0Lmg6CisgICAgICAg
IChXZWJDb3JlOjpSZW5kZXJPYmplY3Q6OmFkZEZvY3VzUmluZ1JlY3RzKToKKyAgICAgICAgKiBy
ZW5kZXJpbmcvUmVuZGVyVGV4dENvbnRyb2wuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVy
VGV4dENvbnRyb2w6OmFkZEZvY3VzUmluZ1JlY3RzKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVu
ZGVyVGV4dENvbnRyb2wuaDoKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyVGV4dENvbnRyb2xT
aW5nbGVMaW5lLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRleHRDb250cm9sU2luZ2xl
TGluZTo6YWRkRm9jdXNSaW5nUmVjdHMpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJUZXh0
Q29udHJvbFNpbmdsZUxpbmUuaDoKKyAgICAgICAgKiByZW5kZXJpbmcvc3ZnL1JlbmRlclNWR0Nv
bnRhaW5lci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTVkdDb250YWluZXI6OmFkZEZv
Y3VzUmluZ1JlY3RzKToKKyAgICAgICAgKiByZW5kZXJpbmcvc3ZnL1JlbmRlclNWR0NvbnRhaW5l
ci5oOgorICAgICAgICAqIHJlbmRlcmluZy9zdmcvUmVuZGVyU1ZHSW1hZ2UuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6UmVuZGVyU1ZHSW1hZ2U6OmFkZEZvY3VzUmluZ1JlY3RzKToKKyAgICAgICAg
KiByZW5kZXJpbmcvc3ZnL1JlbmRlclNWR0ltYWdlLmg6CisgICAgICAgICogcmVuZGVyaW5nL3N2
Zy9SZW5kZXJTVkdQYXRoLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNWR1BhdGg6OmFk
ZEZvY3VzUmluZ1JlY3RzKToKKyAgICAgICAgKiByZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1BhdGgu
aDoKKwogMjAxMS0wNS0yNCAgQWRhbSBSb2JlbiAgPGFyb2JlbkBhcHBsZS5jb20+CiAKICAgICAg
ICAgTGVvcGFyZCBidWlsZCBmaXgKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVw
cm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9XZWJDb3Jl
Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDg3MTg1KQorKysgU291cmNlL1dl
YkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBA
IC00MDk3LDYgKzQwOTcsMTAgQEAKIAkJQURERjFBRDcxMjU3Q0Q5QTAwMDNBNzU5IC8qIFJlbmRl
clNWR1BhdGguaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IEFEREYxQUQ1MTI1N0NEOUEwMDAzQTc1OSAvKiBSZW5kZXJTVkdQYXRoLmggKi87IH07CiAJCUIx
ODI3NDkzMTM0Q0E0QzEwMEI5OEMyRCAvKiBDYWxsYmFja0Z1bmN0aW9uLmNwcCBpbiBTb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEIxODI3NDkyMTM0Q0E0QzEwMEI5
OEMyRCAvKiBDYWxsYmFja0Z1bmN0aW9uLmNwcCAqLzsgfTsKIAkJQjFENUVDQjUxMzRCNThEQTAw
ODdDNzhGIC8qIENhbGxiYWNrRnVuY3Rpb24uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IEIxRDVFQ0I0MTM0QjU4REEwMDg3Qzc4RiAvKiBDYWxsYmFja0Z1
bmN0aW9uLmggKi87IH07CisJCUIxRTU0NTdBMTM0NjI5MUYwMDkyQTU0NSAvKiBHZW5lcmF0ZWRT
dHJlYW0uY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
QjFFNTQ1NzExMzQ2MjkxRjAwOTJBNTQ1IC8qIEdlbmVyYXRlZFN0cmVhbS5jcHAgKi87IH07CisJ
CUIxRTU0NTdCMTM0NjI5MUYwMDkyQTU0NSAvKiBHZW5lcmF0ZWRTdHJlYW0uaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEIxRTU0NTcyMTM0NjI5MUYwMDky
QTU0NSAvKiBHZW5lcmF0ZWRTdHJlYW0uaCAqLzsgfTsKKwkJQjFFNTQ1N0QxMzQ2MjkxRjAwOTJB
NTQ1IC8qIFN0cmVhbS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSBCMUU1NDU3NDEzNDYyOTFGMDA5MkE1NDUgLyogU3RyZWFtLmNwcCAqLzsgfTsKKwkJ
QjFFNTQ1N0UxMzQ2MjkxRjAwOTJBNTQ1IC8qIFN0cmVhbS5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQjFFNTQ1NzUxMzQ2MjkxRjAwOTJBNTQ1IC8qIFN0
cmVhbS5oICovOyB9OwogCQlCMUU1NDU5MzEzNDYyOUMxMDA5MkE1NDUgLyogQ2FsbGJhY2tUYXNr
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCMUU1NDU4
NzEzNDYyOUMxMDA5MkE1NDUgLyogQ2FsbGJhY2tUYXNrLmggKi87IH07CiAJCUIxRTU0NTk0MTM0
NjI5QzEwMDkyQTU0NSAvKiBNZWRpYVN0cmVhbUNsaWVudC5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQjFFNTQ1ODgxMzQ2MjlDMTAwOTJBNTQ1IC8qIE1l
ZGlhU3RyZWFtQ2xpZW50LmggKi87IH07CiAJCUIxRTU0NTk1MTM0NjI5QzEwMDkyQTU0NSAvKiBN
ZWRpYVN0cmVhbUZyYW1lQ29udHJvbGxlci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSBCMUU1NDU4OTEzNDYyOUMxMDA5MkE1NDUgLyogTWVkaWFTdHJl
YW1GcmFtZUNvbnRyb2xsZXIuY3BwICovOyB9OwpAQCAtNDEwNiwxOCArNDExMCwxNCBAQAogCQlC
MUU1NDU5OTEzNDYyOUMxMDA5MkE1NDUgLyogTmF2aWdhdG9yVXNlck1lZGlhRXJyb3IuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEIxRTU0NThEMTM0NjI5
QzEwMDkyQTU0NSAvKiBOYXZpZ2F0b3JVc2VyTWVkaWFFcnJvci5oICovOyB9OwogCQlCMUU1NDU5
QjEzNDYyOUMxMDA5MkE1NDUgLyogTmF2aWdhdG9yVXNlck1lZGlhRXJyb3JDYWxsYmFjay5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQjFFNTQ1OEYxMzQ2
MjlDMTAwOTJBNTQ1IC8qIE5hdmlnYXRvclVzZXJNZWRpYUVycm9yQ2FsbGJhY2suaCAqLzsgfTsK
IAkJQjFFNTQ1OUQxMzQ2MjlDMTAwOTJBNTQ1IC8qIE5hdmlnYXRvclVzZXJNZWRpYVN1Y2Nlc3ND
YWxsYmFjay5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
QjFFNTQ1OTExMzQ2MjlDMTAwOTJBNTQ1IC8qIE5hdmlnYXRvclVzZXJNZWRpYVN1Y2Nlc3NDYWxs
YmFjay5oICovOyB9OwotCQlCMUU1NDU3QTEzNDYyOTFGMDA5MkE1NDUgLyogR2VuZXJhdGVkU3Ry
ZWFtLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEIx
RTU0NTcxMTM0NjI5MUYwMDkyQTU0NSAvKiBHZW5lcmF0ZWRTdHJlYW0uY3BwICovOyB9OwotCQlC
MUU1NDU3QjEzNDYyOTFGMDA5MkE1NDUgLyogR2VuZXJhdGVkU3RyZWFtLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCMUU1NDU3MjEzNDYyOTFGMDA5MkE1
NDUgLyogR2VuZXJhdGVkU3RyZWFtLmggKi87IH07Ci0JCUIxRTU0NTdEMTM0NjI5MUYwMDkyQTU0
NSAvKiBTdHJlYW0uY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gQjFFNTQ1NzQxMzQ2MjkxRjAwOTJBNTQ1IC8qIFN0cmVhbS5jcHAgKi87IH07Ci0JCUIx
RTU0NTdFMTM0NjI5MUYwMDkyQTU0NSAvKiBTdHJlYW0uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEIxRTU0NTc1MTM0NjI5MUYwMDkyQTU0NSAvKiBTdHJl
YW0uaCAqLzsgfTsKKwkJQjFFNTQ1REQxMzQ2MkIwQjAwOTJBNTQ1IC8qIEpTR2VuZXJhdGVkU3Ry
ZWFtLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEIx
RTU0NUNGMTM0NjJCMEIwMDkyQTU0NSAvKiBKU0dlbmVyYXRlZFN0cmVhbS5jcHAgKi87IH07CisJ
CUIxRTU0NURFMTM0NjJCMEIwMDkyQTU0NSAvKiBKU0dlbmVyYXRlZFN0cmVhbS5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQjFFNTQ1RDAxMzQ2MkIwQjAw
OTJBNTQ1IC8qIEpTR2VuZXJhdGVkU3RyZWFtLmggKi87IH07CiAJCUIxRTU0NURGMTM0NjJCMEIw
MDkyQTU0NSAvKiBKU05hdmlnYXRvclVzZXJNZWRpYUVycm9yLmNwcCBpbiBTb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEIxRTU0NUQxMTM0NjJCMEIwMDkyQTU0NSAv
KiBKU05hdmlnYXRvclVzZXJNZWRpYUVycm9yLmNwcCAqLzsgfTsKIAkJQjFFNTQ1RTAxMzQ2MkIw
QjAwOTJBNTQ1IC8qIEpTTmF2aWdhdG9yVXNlck1lZGlhRXJyb3IuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEIxRTU0NUQyMTM0NjJCMEIwMDkyQTU0NSAv
KiBKU05hdmlnYXRvclVzZXJNZWRpYUVycm9yLmggKi87IH07CiAJCUIxRTU0NUUxMTM0NjJCMEIw
MDkyQTU0NSAvKiBKU05hdmlnYXRvclVzZXJNZWRpYUVycm9yQ2FsbGJhY2suY3BwIGluIFNvdXJj
ZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQjFFNTQ1RDMxMzQ2MkIwQjAw
OTJBNTQ1IC8qIEpTTmF2aWdhdG9yVXNlck1lZGlhRXJyb3JDYWxsYmFjay5jcHAgKi87IH07CiAJ
CUIxRTU0NUUyMTM0NjJCMEIwMDkyQTU0NSAvKiBKU05hdmlnYXRvclVzZXJNZWRpYUVycm9yQ2Fs
bGJhY2suaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEIx
RTU0NUQ0MTM0NjJCMEIwMDkyQTU0NSAvKiBKU05hdmlnYXRvclVzZXJNZWRpYUVycm9yQ2FsbGJh
Y2suaCAqLzsgfTsKIAkJQjFFNTQ1RTMxMzQ2MkIwQjAwOTJBNTQ1IC8qIEpTTmF2aWdhdG9yVXNl
ck1lZGlhU3VjY2Vzc0NhbGxiYWNrLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IEIxRTU0NUQ1MTM0NjJCMEIwMDkyQTU0NSAvKiBKU05hdmlnYXRvclVz
ZXJNZWRpYVN1Y2Nlc3NDYWxsYmFjay5jcHAgKi87IH07CiAJCUIxRTU0NUU0MTM0NjJCMEIwMDky
QTU0NSAvKiBKU05hdmlnYXRvclVzZXJNZWRpYVN1Y2Nlc3NDYWxsYmFjay5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQjFFNTQ1RDYxMzQ2MkIwQjAwOTJB
NTQ1IC8qIEpTTmF2aWdhdG9yVXNlck1lZGlhU3VjY2Vzc0NhbGxiYWNrLmggKi87IH07Ci0JCUIx
RTU0NUREMTM0NjJCMEIwMDkyQTU0NSAvKiBKU0dlbmVyYXRlZFN0cmVhbS5jcHAgaW4gU291cmNl
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCMUU1NDVDRjEzNDYyQjBCMDA5
MkE1NDUgLyogSlNHZW5lcmF0ZWRTdHJlYW0uY3BwICovOyB9OwotCQlCMUU1NDVERTEzNDYyQjBC
MDA5MkE1NDUgLyogSlNHZW5lcmF0ZWRTdHJlYW0uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEIxRTU0NUQwMTM0NjJCMEIwMDkyQTU0NSAvKiBKU0dlbmVy
YXRlZFN0cmVhbS5oICovOyB9OwogCQlCMUU1NDVFNTEzNDYyQjBCMDA5MkE1NDUgLyogSlNTdHJl
YW0uY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQjFF
NTQ1RDcxMzQ2MkIwQjAwOTJBNTQ1IC8qIEpTU3RyZWFtLmNwcCAqLzsgfTsKIAkJQjFFNTQ1RTYx
MzQ2MkIwQjAwOTJBNTQ1IC8qIEpTU3RyZWFtLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSBCMUU1NDVEODEzNDYyQjBCMDA5MkE1NDUgLyogSlNTdHJlYW0u
aCAqLzsgfTsKIAkJQjIwMTExMDcwQUI3NzQwNTAwREIwRTY4IC8qIEpTU1ZHQUVsZW1lbnQuY3Bw
IGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQjIwMTExMDUw
QUI3NzQwNTAwREIwRTY4IC8qIEpTU1ZHQUVsZW1lbnQuY3BwICovOyB9OwpAQCAtMTAzODIsMTgg
KzEwMzgyLDE4IEBACiAJCUFEREYxQUQ1MTI1N0NEOUEwMDAzQTc1OSAvKiBSZW5kZXJTVkdQYXRo
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFJlbmRlclNWR1BhdGguaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQjE4Mjc0OTIxMzRDQTRDMTAwQjk4QzJEIC8qIENh
bGxiYWNrRnVuY3Rpb24uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0g
Q2FsbGJhY2tGdW5jdGlvbi5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUIxRDVF
Q0I0MTM0QjU4REEwMDg3Qzc4RiAvKiBDYWxsYmFja0Z1bmN0aW9uLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IENhbGxiYWNrRnVuY3Rpb24uaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKLQkJQjFFNTQ1ODcxMzQ2MjlDMTAwOTJBNTQ1IC8qIENhbGxiYWNrVGFzay5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBDYWxsYmFja1Rhc2suaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKLQkJQjFFNTQ1ODgxMzQ2MjlDMTAwOTJBNTQ1IC8qIE1lZGlhU3Ry
ZWFtQ2xpZW50LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IE1lZGlhU3RyZWFt
Q2xpZW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUIxRTU0NTg5MTM0NjI5QzEw
MDkyQTU0NSAvKiBNZWRpYVN0cmVhbUZyYW1lQ29udHJvbGxlci5jcHAgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBNZWRpYVN0cmVhbUZyYW1lQ29udHJvbGxlci5jcHA7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUIxRTU0NThBMTM0NjI5QzEwMDkyQTU0NSAvKiBN
ZWRpYVN0cmVhbUZyYW1lQ29udHJvbGxlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBNZWRpYVN0cmVhbUZyYW1lQ29udHJvbGxlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwotCQlCMUU1NDU4QjEzNDYyOUMxMDA5MkE1NDUgLyogTWVkaWFTdHJlYW1Db250cm9sbGVy
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IE1lZGlhU3RyZWFtQ29u
dHJvbGxlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUIxRTU0NThDMTM0NjI5
QzEwMDkyQTU0NSAvKiBNZWRpYVN0cmVhbUNvbnRyb2xsZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gTWVkaWFTdHJlYW1Db250cm9sbGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCUIxRTU0NTcxMTM0NjI5MUYwMDkyQTU0NSAvKiBHZW5lcmF0ZWRTdHJlYW0u
Y3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gR2VuZXJhdGVkU3RyZWFt
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQjFFNTQ1NzIxMzQ2MjkxRjAwOTJB
NTQ1IC8qIEdlbmVyYXRlZFN0cmVhbS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBHZW5lcmF0ZWRTdHJlYW0uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQjFFNTQ1
NzMxMzQ2MjkxRjAwOTJBNTQ1IC8qIEdlbmVyYXRlZFN0cmVhbS5pZGwgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0
OyBwYXRoID0gR2VuZXJhdGVkU3RyZWFtLmlkbDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJQjFFNTQ1NzQxMzQ2MjkxRjAwOTJBNTQ1IC8qIFN0cmVhbS5jcHAgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTdHJlYW0uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQlCMUU1NDU3NTEzNDYyOTFGMDA5MkE1NDUgLyogU3RyZWFtLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFN0cmVhbS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQlCMUU1NDU3NjEzNDYyOTFGMDA5MkE1NDUgLyogU3RyZWFtLmlkbCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRl
eHQ7IHBhdGggPSBTdHJlYW0uaWRsOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlCMUU1
NDU4NzEzNDYyOUMxMDA5MkE1NDUgLyogQ2FsbGJhY2tUYXNrLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IENhbGxiYWNrVGFzay5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OworCQlCMUU1NDU4ODEzNDYyOUMxMDA5MkE1NDUgLyogTWVkaWFTdHJlYW1DbGllbnQuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTWVkaWFTdHJlYW1DbGllbnQuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQjFFNTQ1ODkxMzQ2MjlDMTAwOTJBNTQ1IC8qIE1lZGlh
U3RyZWFtRnJhbWVDb250cm9sbGVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsg
cGF0aCA9IE1lZGlhU3RyZWFtRnJhbWVDb250cm9sbGVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKKwkJQjFFNTQ1OEExMzQ2MjlDMTAwOTJBNTQ1IC8qIE1lZGlhU3RyZWFtRnJhbWVD
b250cm9sbGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IE1lZGlhU3RyZWFt
RnJhbWVDb250cm9sbGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUIxRTU0NThC
MTM0NjI5QzEwMDkyQTU0NSAvKiBNZWRpYVN0cmVhbUNvbnRyb2xsZXIuY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gTWVkaWFTdHJlYW1Db250cm9sbGVyLmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQjFFNTQ1OEMxMzQ2MjlDMTAwOTJBNTQ1IC8qIE1l
ZGlhU3RyZWFtQ29udHJvbGxlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBN
ZWRpYVN0cmVhbUNvbnRyb2xsZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQjFF
NTQ1OEQxMzQ2MjlDMTAwOTJBNTQ1IC8qIE5hdmlnYXRvclVzZXJNZWRpYUVycm9yLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IE5hdmlnYXRvclVzZXJNZWRpYUVycm9yLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUIxRTU0NThFMTM0NjI5QzEwMDkyQTU0NSAvKiBO
YXZpZ2F0b3JVc2VyTWVkaWFFcnJvci5pZGwgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0OyBwYXRoID0gTmF2aWdh
dG9yVXNlck1lZGlhRXJyb3IuaWRsOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlCMUU1
NDU4RjEzNDYyOUMxMDA5MkE1NDUgLyogTmF2aWdhdG9yVXNlck1lZGlhRXJyb3JDYWxsYmFjay5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBOYXZpZ2F0b3JVc2VyTWVkaWFFcnJv
ckNhbGxiYWNrLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0xMDQwMiwxNCArMTA0
MDIsMTQgQEAKIAkJQjFFNTQ1OTIxMzQ2MjlDMTAwOTJBNTQ1IC8qIE5hdmlnYXRvclVzZXJNZWRp
YVN1Y2Nlc3NDYWxsYmFjay5pZGwgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0OyBwYXRoID0gTmF2aWdhdG9yVXNl
ck1lZGlhU3VjY2Vzc0NhbGxiYWNrLmlkbDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
QjFFNTQ1Q0YxMzQ2MkIwQjAwOTJBNTQ1IC8qIEpTR2VuZXJhdGVkU3RyZWFtLmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTR2VuZXJhdGVkU3RyZWFtLmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQjFFNTQ1RDAxMzQ2MkIwQjAwOTJBNTQ1IC8qIEpT
R2VuZXJhdGVkU3RyZWFtLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTR2Vu
ZXJhdGVkU3RyZWFtLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUIxRTU0NUQ3MTM0
NjJCMEIwMDkyQTU0NSAvKiBKU1N0cmVhbS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5j
cHA7IHBhdGggPSBKU1N0cmVhbS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUIx
RTU0NUQ4MTM0NjJCMEIwMDkyQTU0NSAvKiBKU1N0cmVhbS5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBKU1N0cmVhbS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlC
MUU1NDVEMTEzNDYyQjBCMDA5MkE1NDUgLyogSlNOYXZpZ2F0b3JVc2VyTWVkaWFFcnJvci5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU05hdmlnYXRvclVzZXJNZWRp
YUVycm9yLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQjFFNTQ1RDIxMzQ2MkIw
QjAwOTJBNTQ1IC8qIEpTTmF2aWdhdG9yVXNlck1lZGlhRXJyb3IuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gSlNOYXZpZ2F0b3JVc2VyTWVkaWFFcnJvci5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQlCMUU1NDVEMzEzNDYyQjBCMDA5MkE1NDUgLyogSlNOYXZpZ2F0
b3JVc2VyTWVkaWFFcnJvckNhbGxiYWNrLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNw
cDsgcGF0aCA9IEpTTmF2aWdhdG9yVXNlck1lZGlhRXJyb3JDYWxsYmFjay5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCUIxRTU0NUQ0MTM0NjJCMEIwMDkyQTU0NSAvKiBKU05hdmln
YXRvclVzZXJNZWRpYUVycm9yQ2FsbGJhY2suaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gSlNOYXZpZ2F0b3JVc2VyTWVkaWFFcnJvckNhbGxiYWNrLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCUIxRTU0NUQ1MTM0NjJCMEIwMDkyQTU0NSAvKiBKU05hdmlnYXRvclVz
ZXJNZWRpYVN1Y2Nlc3NDYWxsYmFjay5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IHBhdGggPSBKU05hdmlnYXRvclVzZXJNZWRpYVN1Y2Nlc3NDYWxsYmFjay5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCUIxRTU0NUQ2MTM0NjJCMEIwMDkyQTU0NSAvKiBKU05hdmln
YXRvclVzZXJNZWRpYVN1Y2Nlc3NDYWxsYmFjay5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBKU05hdmlnYXRvclVzZXJNZWRpYVN1Y2Nlc3NDYWxsYmFjay5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OworCQlCMUU1NDVENzEzNDYyQjBCMDA5MkE1NDUgLyogSlNTdHJlYW0u
Y3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSlNTdHJlYW0uY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlCMUU1NDVEODEzNDYyQjBCMDA5MkE1NDUgLyog
SlNTdHJlYW0uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNTdHJlYW0uaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQjIwMTExMDUwQUI3NzQwNTAwREIwRTY4IC8q
IEpTU1ZHQUVsZW1lbnQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9
IEpTU1ZHQUVsZW1lbnQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlCMjAxMTEw
NjBBQjc3NDA1MDBEQjBFNjggLyogSlNTVkdBRWxlbWVudC5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gSlNTVkdBRWxlbWVudC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQlCMjIyNzdDQjBEMDBCRjFGMDA3MUI3ODIgLyogQ29sb3JEaXN0YW5jZS5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQ29sb3JEaXN0YW5jZS5jcHA7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9GbG9hdFNpemUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9GbG9hdFNpemUuaAkocmV2aXNpb24gODcxODUpCisrKyBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9GbG9hdFNpemUuaAkod29ya2luZyBjb3B5KQpAQCAtMjgsNyArMjgs
NyBAQAogI2lmbmRlZiBGbG9hdFNpemVfaAogI2RlZmluZSBGbG9hdFNpemVfaAogCi0jaW5jbHVk
ZSAiSW50U2l6ZS5oIgorI2luY2x1ZGUgIkludFBvaW50LmgiCiAjaW5jbHVkZSA8d3RmL01hdGhF
eHRyYXMuaD4KIAogI2lmIFVTRShDRykgfHwgKFBMQVRGT1JNKFdYKSAmJiBPUyhEQVJXSU4pKSB8
fCBVU0UoU0tJQV9PTl9NQUNfQ0hST01FKQpAQCAtMTU1LDYgKzE1NSwxMSBAQCBpbmxpbmUgSW50
U2l6ZSBleHBhbmRlZEludFNpemUoY29uc3QgRmxvCiAgICAgcmV0dXJuIEludFNpemUoY2xhbXBU
b0ludGVnZXIoY2VpbGYocC53aWR0aCgpKSksIGNsYW1wVG9JbnRlZ2VyKGNlaWxmKHAuaGVpZ2h0
KCkpKSk7CiB9CiAKK2lubGluZSBJbnRQb2ludCBmbG9vcmVkSW50UG9pbnQoY29uc3QgRmxvYXRT
aXplJiBwKQoreworICAgIHJldHVybiBJbnRQb2ludChzdGF0aWNfY2FzdDxpbnQ+KHAud2lkdGgo
KSksIHN0YXRpY19jYXN0PGludD4ocC5oZWlnaHQoKSkpOworfQorCiB9IC8vIG5hbWVzcGFjZSBX
ZWJDb3JlCiAKICNlbmRpZiAvLyBGbG9hdFNpemVfaApJbmRleDogU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlckJsb2NrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyQmxvY2suY3BwCShyZXZpc2lvbiA4NzE4NSkKKysrIFNvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJCbG9jay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU4NDYsNyArNTg0
Niw3IEBAIEludFJlY3QgUmVuZGVyQmxvY2s6OmxvY2FsQ2FyZXRSZWN0KElubGkKICAgICByZXR1
cm4gSW50UmVjdCh4LCB5LCBjYXJldFdpZHRoLCBoZWlnaHQpOwogfQogCi12b2lkIFJlbmRlckJs
b2NrOjphZGRGb2N1c1JpbmdSZWN0cyhWZWN0b3I8SW50UmVjdD4mIHJlY3RzLCBpbnQgdHgsIGlu
dCB0eSkKK3ZvaWQgUmVuZGVyQmxvY2s6OmFkZEZvY3VzUmluZ1JlY3RzKFZlY3RvcjxJbnRSZWN0
PiYgcmVjdHMsIGNvbnN0IEludFBvaW50JiBhZGRpdGlvbmFsT2Zmc2V0KQogewogICAgIC8vIEZv
ciBibG9ja3MgaW5zaWRlIGlubGluZXMsIHdlIGdvIGFoZWFkIGFuZCBpbmNsdWRlIG1hcmdpbnMg
c28gdGhhdCB3ZSBydW4gcmlnaHQgdXAgdG8gdGhlCiAgICAgLy8gaW5saW5lIGJveGVzIGFib3Zl
IGFuZCBiZWxvdyB1cyAodGh1cyBnZXR0aW5nIG1lcmdlZCB3aXRoIHRoZW0gdG8gZm9ybSBhIHNp
bmdsZSBpcnJlZ3VsYXIKQEAgLTU4NjAsMTcgKzU4NjAsMTcgQEAgdm9pZCBSZW5kZXJCbG9jazo6
YWRkRm9jdXNSaW5nUmVjdHMoVmVjdAogICAgICAgICBib29sIHByZXZJbmxpbmVIYXNMaW5lQm94
ID0gdG9SZW5kZXJJbmxpbmUoaW5saW5lRWxlbWVudENvbnRpbnVhdGlvbigpLT5ub2RlKCktPnJl
bmRlcmVyKCkpLT5maXJzdExpbmVCb3goKTsgCiAgICAgICAgIGludCB0b3BNYXJnaW4gPSBwcmV2
SW5saW5lSGFzTGluZUJveCA/IGNvbGxhcHNlZE1hcmdpbkJlZm9yZSgpIDogMDsKICAgICAgICAg
aW50IGJvdHRvbU1hcmdpbiA9IG5leHRJbmxpbmVIYXNMaW5lQm94ID8gY29sbGFwc2VkTWFyZ2lu
QWZ0ZXIoKSA6IDA7Ci0gICAgICAgIEludFJlY3QgcmVjdCh0eCwgdHkgLSB0b3BNYXJnaW4sIHdp
ZHRoKCksIGhlaWdodCgpICsgdG9wTWFyZ2luICsgYm90dG9tTWFyZ2luKTsKKyAgICAgICAgSW50
UmVjdCByZWN0KGFkZGl0aW9uYWxPZmZzZXQueCgpLCBhZGRpdGlvbmFsT2Zmc2V0LnkoKSAtIHRv
cE1hcmdpbiwgd2lkdGgoKSwgaGVpZ2h0KCkgKyB0b3BNYXJnaW4gKyBib3R0b21NYXJnaW4pOwog
ICAgICAgICBpZiAoIXJlY3QuaXNFbXB0eSgpKQogICAgICAgICAgICAgcmVjdHMuYXBwZW5kKHJl
Y3QpOwogICAgIH0gZWxzZSBpZiAod2lkdGgoKSAmJiBoZWlnaHQoKSkKLSAgICAgICAgcmVjdHMu
YXBwZW5kKEludFJlY3QodHgsIHR5LCB3aWR0aCgpLCBoZWlnaHQoKSkpOworICAgICAgICByZWN0
cy5hcHBlbmQoSW50UmVjdChhZGRpdGlvbmFsT2Zmc2V0LCBzaXplKCkpKTsKIAogICAgIGlmICgh
aGFzT3ZlcmZsb3dDbGlwKCkgJiYgIWhhc0NvbnRyb2xDbGlwKCkpIHsKICAgICAgICAgZm9yIChS
b290SW5saW5lQm94KiBjdXJyID0gZmlyc3RSb290Qm94KCk7IGN1cnI7IGN1cnIgPSBjdXJyLT5u
ZXh0Um9vdEJveCgpKSB7CiAgICAgICAgICAgICBpbnQgdG9wID0gbWF4KGN1cnItPmxpbmVUb3Ao
KSwgY3Vyci0+bG9naWNhbFRvcCgpKTsKICAgICAgICAgICAgIGludCBib3R0b20gPSBtaW4oY3Vy
ci0+bGluZUJvdHRvbSgpLCBjdXJyLT5sb2dpY2FsVG9wKCkgKyBjdXJyLT5sb2dpY2FsSGVpZ2h0
KCkpOwotICAgICAgICAgICAgSW50UmVjdCByZWN0KHR4ICsgY3Vyci0+eCgpLCB0eSArIHRvcCwg
Y3Vyci0+bG9naWNhbFdpZHRoKCksIGJvdHRvbSAtIHRvcCk7CisgICAgICAgICAgICBJbnRSZWN0
IHJlY3QoYWRkaXRpb25hbE9mZnNldC54KCkgKyBjdXJyLT54KCksIGFkZGl0aW9uYWxPZmZzZXQu
eSgpICsgdG9wLCBjdXJyLT5sb2dpY2FsV2lkdGgoKSwgYm90dG9tIC0gdG9wKTsKICAgICAgICAg
ICAgIGlmICghcmVjdC5pc0VtcHR5KCkpCiAgICAgICAgICAgICAgICAgcmVjdHMuYXBwZW5kKHJl
Y3QpOwogICAgICAgICB9CkBAIC01ODgzLDE2ICs1ODgzLDE0IEBAIHZvaWQgUmVuZGVyQmxvY2s6
OmFkZEZvY3VzUmluZ1JlY3RzKFZlY3QKICAgICAgICAgICAgICAgICBpZiAoYm94LT5sYXllcigp
KSAKICAgICAgICAgICAgICAgICAgICAgcG9zID0gY3Vyci0+bG9jYWxUb0Fic29sdXRlKCk7CiAg
ICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAgICBwb3MgPSBGbG9hdFBvaW50
KHR4ICsgYm94LT54KCksIHR5ICsgYm94LT55KCkpOwotICAgICAgICAgICAgICAgIGJveC0+YWRk
Rm9jdXNSaW5nUmVjdHMocmVjdHMsIHBvcy54KCksIHBvcy55KCkpOworICAgICAgICAgICAgICAg
ICAgICBwb3MgPSBGbG9hdFBvaW50KGFkZGl0aW9uYWxPZmZzZXQueCgpICsgYm94LT54KCksIGFk
ZGl0aW9uYWxPZmZzZXQueSgpICsgYm94LT55KCkpOworICAgICAgICAgICAgICAgIGJveC0+YWRk
Rm9jdXNSaW5nUmVjdHMocmVjdHMsIGZsb29yZWRJbnRQb2ludChwb3MpKTsKICAgICAgICAgICAg
IH0KICAgICAgICAgfQogICAgIH0KIAogICAgIGlmIChpbmxpbmVFbGVtZW50Q29udGludWF0aW9u
KCkpCi0gICAgICAgIGlubGluZUVsZW1lbnRDb250aW51YXRpb24oKS0+YWRkRm9jdXNSaW5nUmVj
dHMocmVjdHMsIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHR4IC0geCgpICsgaW5saW5lRWxlbWVudENvbnRpbnVhdGlvbigpLT5jb250YWlu
aW5nQmxvY2soKS0+eCgpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHR5IC0geSgpICsgaW5saW5lRWxlbWVudENvbnRpbnVhdGlvbigpLT5j
b250YWluaW5nQmxvY2soKS0+eSgpKTsKKyAgICAgICAgaW5saW5lRWxlbWVudENvbnRpbnVhdGlv
bigpLT5hZGRGb2N1c1JpbmdSZWN0cyhyZWN0cywgZmxvb3JlZEludFBvaW50KGFkZGl0aW9uYWxP
ZmZzZXQgKyBpbmxpbmVFbGVtZW50Q29udGludWF0aW9uKCktPmNvbnRhaW5pbmdCbG9jaygpLT5s
b2NhdGlvbigpIC0gbG9jYXRpb24oKSkpOwogfQogCiBSZW5kZXJCbG9jayogUmVuZGVyQmxvY2s6
OmNyZWF0ZUFub255bW91c0Jsb2NrKGJvb2wgaXNGbGV4aWJsZUJveCkgY29uc3QKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9jay5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9jay5oCShyZXZpc2lvbiA4NzE4NSkKKysrIFNv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9jay5oCSh3b3JraW5nIGNvcHkpCkBAIC0z
MzMsNyArMzMzLDcgQEAgcHJvdGVjdGVkOgogICAgIHZvaWQgYWRkT3ZlcmZsb3dGcm9tQmxvY2tD
aGlsZHJlbigpOwogICAgIHZvaWQgYWRkT3ZlcmZsb3dGcm9tSW5saW5lQ2hpbGRyZW4oKTsKIAot
ICAgIHZpcnR1YWwgdm9pZCBhZGRGb2N1c1JpbmdSZWN0cyhWZWN0b3I8SW50UmVjdD4mLCBpbnQg
dHgsIGludCB0eSk7CisgICAgdmlydHVhbCB2b2lkIGFkZEZvY3VzUmluZ1JlY3RzKFZlY3RvcjxJ
bnRSZWN0PiYsIGNvbnN0IEludFBvaW50Jik7CiAKICNpZiBFTkFCTEUoU1ZHKQogICAgIC8vIE9u
bHkgdXNlZCBieSBSZW5kZXJTVkdUZXh0LCB3aGljaCBleHBsaWNpdGVseSBvdmVycmlkZXMgUmVu
ZGVyQmxvY2s6OmxheW91dEJsb2NrKCksIGRvIE5PVCB1c2UgZm9yIGFueXRoaW5nIGVsc2UuCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94LmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94LmNwcAkocmV2aXNpb24gODcxODUp
CisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94LmNwcAkod29ya2luZyBjb3B5
KQpAQCAtNTA2LDEwICs1MDYsMTAgQEAgSW50UmVjdCBSZW5kZXJCb3g6Om91dGxpbmVCb3VuZHNG
b3JSZXBhaQogICAgIHJldHVybiBib3g7CiB9CiAKLXZvaWQgUmVuZGVyQm94OjphZGRGb2N1c1Jp
bmdSZWN0cyhWZWN0b3I8SW50UmVjdD4mIHJlY3RzLCBpbnQgdHgsIGludCB0eSkKK3ZvaWQgUmVu
ZGVyQm94OjphZGRGb2N1c1JpbmdSZWN0cyhWZWN0b3I8SW50UmVjdD4mIHJlY3RzLCBjb25zdCBJ
bnRQb2ludCYgYWRkaXRpb25hbE9mZnNldCkKIHsKLSAgICBpZiAod2lkdGgoKSAmJiBoZWlnaHQo
KSkKLSAgICAgICAgcmVjdHMuYXBwZW5kKEludFJlY3QodHgsIHR5LCB3aWR0aCgpLCBoZWlnaHQo
KSkpOworICAgIGlmICghc2l6ZSgpLmlzRW1wdHkoKSkKKyAgICAgICAgcmVjdHMuYXBwZW5kKElu
dFJlY3QoYWRkaXRpb25hbE9mZnNldCwgc2l6ZSgpKSk7CiB9CiAKIEludFJlY3QgUmVuZGVyQm94
OjpyZWZsZWN0aW9uQm94KCkgY29uc3QKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJCb3guaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
Qm94LmgJKHJldmlzaW9uIDg3MTg1KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
ckJveC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMjgsNyArMTI4LDcgQEAgcHVibGljOgogCiAgICAg
Ly8gQm91bmRzIG9mIHRoZSBvdXRsaW5lIGJveCBpbiBhYnNvbHV0ZSBjb29yZHMuIFJlc3BlY3Rz
IHRyYW5zZm9ybXMKICAgICB2aXJ0dWFsIEludFJlY3Qgb3V0bGluZUJvdW5kc0ZvclJlcGFpbnQo
UmVuZGVyQm94TW9kZWxPYmplY3QqIC8qcmVwYWludENvbnRhaW5lciovLCBJbnRQb2ludCogY2Fj
aGVkT2Zmc2V0VG9SZXBhaW50Q29udGFpbmVyKSBjb25zdDsKLSAgICB2aXJ0dWFsIHZvaWQgYWRk
Rm9jdXNSaW5nUmVjdHMoVmVjdG9yPEludFJlY3Q+JiwgaW50IHR4LCBpbnQgdHkpOworICAgIHZp
cnR1YWwgdm9pZCBhZGRGb2N1c1JpbmdSZWN0cyhWZWN0b3I8SW50UmVjdD4mLCBjb25zdCBJbnRQ
b2ludCYpOwogCiAgICAgLy8gVXNlIHRoaXMgd2l0aCBjYXV0aW9uISBObyB0eXBlIGNoZWNraW5n
IGlzIGRvbmUhCiAgICAgUmVuZGVyQm94KiBwcmV2aW91c1NpYmxpbmdCb3goKSBjb25zdDsKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJJbmxpbmUuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJJbmxpbmUuY3BwCShyZXZpc2lvbiA4
NzE4NSkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJJbmxpbmUuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xMzM3LDM2ICsxMzM3LDMyIEBAIHZvaWQgUmVuZGVySW5saW5lOjppbWFn
ZUNoYW5nZWQoV3JhcHBlZEkKICAgICByZXBhaW50KCk7CiB9CiAKLXZvaWQgUmVuZGVySW5saW5l
OjphZGRGb2N1c1JpbmdSZWN0cyhWZWN0b3I8SW50UmVjdD4mIHJlY3RzLCBpbnQgdHgsIGludCB0
eSkKK3ZvaWQgUmVuZGVySW5saW5lOjphZGRGb2N1c1JpbmdSZWN0cyhWZWN0b3I8SW50UmVjdD4m
IHJlY3RzLCBjb25zdCBJbnRQb2ludCYgYWRkaXRpb25hbE9mZnNldCkKIHsKICAgICBpZiAoIWFs
d2F5c0NyZWF0ZUxpbmVCb3hlcygpKQotICAgICAgICBjdWxsZWRJbmxpbmVBYnNvbHV0ZVJlY3Rz
KHRoaXMsIHJlY3RzLCBJbnRTaXplKHR4LCB0eSkpOworICAgICAgICBjdWxsZWRJbmxpbmVBYnNv
bHV0ZVJlY3RzKHRoaXMsIHJlY3RzLCB0b1NpemUoYWRkaXRpb25hbE9mZnNldCkpOwogICAgIGVs
c2UgewogICAgICAgICBmb3IgKElubGluZUZsb3dCb3gqIGN1cnIgPSBmaXJzdExpbmVCb3goKTsg
Y3VycjsgY3VyciA9IGN1cnItPm5leHRMaW5lQm94KCkpCi0gICAgICAgICAgICByZWN0cy5hcHBl
bmQoZW5jbG9zaW5nSW50UmVjdChGbG9hdFJlY3QodHggKyBjdXJyLT54KCksIHR5ICsgY3Vyci0+
eSgpLCBjdXJyLT53aWR0aCgpLCBjdXJyLT5oZWlnaHQoKSkpKTsKKyAgICAgICAgICAgIHJlY3Rz
LmFwcGVuZChlbmNsb3NpbmdJbnRSZWN0KEZsb2F0UmVjdChhZGRpdGlvbmFsT2Zmc2V0LngoKSAr
IGN1cnItPngoKSwgYWRkaXRpb25hbE9mZnNldC55KCkgKyBjdXJyLT55KCksIGN1cnItPndpZHRo
KCksIGN1cnItPmhlaWdodCgpKSkpOwogICAgIH0KIAogICAgIGZvciAoUmVuZGVyT2JqZWN0KiBj
dXJyID0gZmlyc3RDaGlsZCgpOyBjdXJyOyBjdXJyID0gY3Vyci0+bmV4dFNpYmxpbmcoKSkgewog
ICAgICAgICBpZiAoIWN1cnItPmlzVGV4dCgpICYmICFjdXJyLT5pc0xpc3RNYXJrZXIoKSkgewot
ICAgICAgICAgICAgRmxvYXRQb2ludCBwb3ModHgsIHR5KTsKKyAgICAgICAgICAgIEZsb2F0UG9p
bnQgcG9zKGFkZGl0aW9uYWxPZmZzZXQpOwogICAgICAgICAgICAgLy8gRklYTUU6IFRoaXMgZG9l
c24ndCB3b3JrIGNvcnJlY3RseSB3aXRoIHRyYW5zZm9ybXMuCiAgICAgICAgICAgICBpZiAoY3Vy
ci0+aGFzTGF5ZXIoKSkgCiAgICAgICAgICAgICAgICAgcG9zID0gY3Vyci0+bG9jYWxUb0Fic29s
dXRlKCk7CiAgICAgICAgICAgICBlbHNlIGlmIChjdXJyLT5pc0JveCgpKQogICAgICAgICAgICAg
ICAgIHBvcy5tb3ZlKHRvUmVuZGVyQm94KGN1cnIpLT54KCksIHRvUmVuZGVyQm94KGN1cnIpLT55
KCkpOwotICAgICAgICAgICAgY3Vyci0+YWRkRm9jdXNSaW5nUmVjdHMocmVjdHMsIHBvcy54KCks
IHBvcy55KCkpOworICAgICAgICAgICAgY3Vyci0+YWRkRm9jdXNSaW5nUmVjdHMocmVjdHMsIGZs
b29yZWRJbnRQb2ludChwb3MpKTsKICAgICAgICAgfQogICAgIH0KIAogICAgIGlmIChjb250aW51
YXRpb24oKSkgewogICAgICAgICBpZiAoY29udGludWF0aW9uKCktPmlzSW5saW5lKCkpCi0gICAg
ICAgICAgICBjb250aW51YXRpb24oKS0+YWRkRm9jdXNSaW5nUmVjdHMocmVjdHMsIAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR4IC0gY29udGFpbmluZ0Js
b2NrKCktPngoKSArIGNvbnRpbnVhdGlvbigpLT5jb250YWluaW5nQmxvY2soKS0+eCgpLAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5IC0gY29udGFpbmlu
Z0Jsb2NrKCktPnkoKSArIGNvbnRpbnVhdGlvbigpLT5jb250YWluaW5nQmxvY2soKS0+eSgpKTsK
KyAgICAgICAgICAgIGNvbnRpbnVhdGlvbigpLT5hZGRGb2N1c1JpbmdSZWN0cyhyZWN0cywgZmxv
b3JlZEludFBvaW50KGFkZGl0aW9uYWxPZmZzZXQgKyBjb250aW51YXRpb24oKS0+Y29udGFpbmlu
Z0Jsb2NrKCktPmxvY2F0aW9uKCkgLSBjb250YWluaW5nQmxvY2soKS0+bG9jYXRpb24oKSkpOwog
ICAgICAgICBlbHNlCi0gICAgICAgICAgICBjb250aW51YXRpb24oKS0+YWRkRm9jdXNSaW5nUmVj
dHMocmVjdHMsIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHR4IC0gY29udGFpbmluZ0Jsb2NrKCktPngoKSArIHRvUmVuZGVyQm94KGNvbnRpbnVhdGlvbigp
KS0+eCgpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5
IC0gY29udGFpbmluZ0Jsb2NrKCktPnkoKSArIHRvUmVuZGVyQm94KGNvbnRpbnVhdGlvbigpKS0+
eSgpKTsKKyAgICAgICAgICAgIGNvbnRpbnVhdGlvbigpLT5hZGRGb2N1c1JpbmdSZWN0cyhyZWN0
cywgZmxvb3JlZEludFBvaW50KGFkZGl0aW9uYWxPZmZzZXQgKyB0b1JlbmRlckJveChjb250aW51
YXRpb24oKSktPmxvY2F0aW9uKCkgLSBjb250YWluaW5nQmxvY2soKS0+bG9jYXRpb24oKSkpOwog
ICAgIH0KIH0KIApJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlcklubGluZS5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJJbmxpbmUuaAko
cmV2aXNpb24gODcxODUpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVySW5saW5l
LmgJKHdvcmtpbmcgY29weSkKQEAgLTc1LDcgKzc1LDcgQEAgcHVibGljOgogICAgIAogICAgIElu
dFNpemUgcmVsYXRpdmVQb3NpdGlvbmVkSW5saW5lT2Zmc2V0KGNvbnN0IFJlbmRlckJveCogY2hp
bGQpIGNvbnN0OwogCi0gICAgdmlydHVhbCB2b2lkIGFkZEZvY3VzUmluZ1JlY3RzKFZlY3RvcjxJ
bnRSZWN0PiYsIGludCB0eCwgaW50IHR5KTsKKyAgICB2aXJ0dWFsIHZvaWQgYWRkRm9jdXNSaW5n
UmVjdHMoVmVjdG9yPEludFJlY3Q+JiwgY29uc3QgSW50UG9pbnQmKTsKICAgICB2b2lkIHBhaW50
T3V0bGluZShHcmFwaGljc0NvbnRleHQqLCBpbnQgdHgsIGludCB0eSk7CiAKICAgICB1c2luZyBS
ZW5kZXJCb3hNb2RlbE9iamVjdDo6Y29udGludWF0aW9uOwpJbmRleDogU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlckxpc3RCb3guY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJMaXN0Qm94LmNwcAkocmV2aXNpb24gODcxODUpCisrKyBTb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGlzdEJveC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMw
MCwxNyArMzAwLDE3IEBAIHZvaWQgUmVuZGVyTGlzdEJveDo6cGFpbnRPYmplY3QoUGFpbnRJbmYK
ICAgICB9CiB9CiAKLXZvaWQgUmVuZGVyTGlzdEJveDo6YWRkRm9jdXNSaW5nUmVjdHMoVmVjdG9y
PEludFJlY3Q+JiByZWN0cywgaW50IHR4LCBpbnQgdHkpCit2b2lkIFJlbmRlckxpc3RCb3g6OmFk
ZEZvY3VzUmluZ1JlY3RzKFZlY3RvcjxJbnRSZWN0PiYgcmVjdHMsIGNvbnN0IEludFBvaW50JiBh
ZGRpdGlvbmFsT2Zmc2V0KQogewogICAgIGlmICghaXNTcGF0aWFsTmF2aWdhdGlvbkVuYWJsZWQo
ZnJhbWUoKSkpCi0gICAgICAgIHJldHVybiBSZW5kZXJCbG9jazo6YWRkRm9jdXNSaW5nUmVjdHMo
cmVjdHMsIHR4LCB0eSk7CisgICAgICAgIHJldHVybiBSZW5kZXJCbG9jazo6YWRkRm9jdXNSaW5n
UmVjdHMocmVjdHMsIGFkZGl0aW9uYWxPZmZzZXQpOwogCiAgICAgU2VsZWN0RWxlbWVudCogc2Vs
ZWN0ID0gdG9TZWxlY3RFbGVtZW50KHN0YXRpY19jYXN0PEVsZW1lbnQqPihub2RlKCkpKTsKIAog
ICAgIC8vIEZvY3VzIHRoZSBsYXN0IHNlbGVjdGVkIGl0ZW0uCiAgICAgaW50IHNlbGVjdGVkSXRl
bSA9IHNlbGVjdC0+YWN0aXZlU2VsZWN0aW9uRW5kTGlzdEluZGV4KCk7CiAgICAgaWYgKHNlbGVj
dGVkSXRlbSA+PSAwKSB7Ci0gICAgICAgIHJlY3RzLmFwcGVuZChpdGVtQm91bmRpbmdCb3hSZWN0
KHR4LCB0eSwgc2VsZWN0ZWRJdGVtKSk7CisgICAgICAgIHJlY3RzLmFwcGVuZChpdGVtQm91bmRp
bmdCb3hSZWN0KGFkZGl0aW9uYWxPZmZzZXQueCgpLCBhZGRpdGlvbmFsT2Zmc2V0LnkoKSwgc2Vs
ZWN0ZWRJdGVtKSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKQEAgLTMyMCw3ICszMjAsNyBA
QCB2b2lkIFJlbmRlckxpc3RCb3g6OmFkZEZvY3VzUmluZ1JlY3RzKFZlCiAgICAgZm9yIChpbnQg
aSA9IDA7IGkgPCBzaXplOyArK2kpIHsKICAgICAgICAgT3B0aW9uRWxlbWVudCogb3B0aW9uRWxl
bWVudCA9IHRvT3B0aW9uRWxlbWVudChsaXN0SXRlbXNbaV0pOwogICAgICAgICBpZiAob3B0aW9u
RWxlbWVudCAmJiAhb3B0aW9uRWxlbWVudC0+ZGlzYWJsZWQoKSkgewotICAgICAgICAgICAgcmVj
dHMuYXBwZW5kKGl0ZW1Cb3VuZGluZ0JveFJlY3QodHgsIHR5LCBpKSk7CisgICAgICAgICAgICBy
ZWN0cy5hcHBlbmQoaXRlbUJvdW5kaW5nQm94UmVjdChhZGRpdGlvbmFsT2Zmc2V0LngoKSwgYWRk
aXRpb25hbE9mZnNldC55KCksIGkpKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQog
ICAgIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMaXN0Qm94LmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxpc3RCb3guaAkocmV2
aXNpb24gODcxODUpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGlzdEJveC5o
CSh3b3JraW5nIGNvcHkpCkBAIC03OSw3ICs3OSw3IEBAIHByaXZhdGU6CiAKICAgICB2aXJ0dWFs
IHZvaWQgbGF5b3V0KCk7CiAKLSAgICB2aXJ0dWFsIHZvaWQgYWRkRm9jdXNSaW5nUmVjdHMoVmVj
dG9yPEludFJlY3Q+JiwgaW50IHR4LCBpbnQgdHkpOworICAgIHZpcnR1YWwgdm9pZCBhZGRGb2N1
c1JpbmdSZWN0cyhWZWN0b3I8SW50UmVjdD4mLCBjb25zdCBJbnRQb2ludCYpOwogCiAgICAgdmly
dHVhbCBib29sIGNhbkJlUHJvZ3JhbWF0aWNhbGx5U2Nyb2xsZWQoYm9vbCkgY29uc3QgeyByZXR1
cm4gdHJ1ZTsgfQogICAgIHZpcnR1YWwgdm9pZCBhdXRvc2Nyb2xsKCk7CkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmNwcAkocmV2aXNpb24gODcxODUpCisrKyBT
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMTAwMCw3ICsxMDAwLDcgQEAgdm9pZCBSZW5kZXJPYmplY3Q6OmRyYXdBcmNGb3JCb3hTaWRl
KEdyYQogdm9pZCBSZW5kZXJPYmplY3Q6OnBhaW50Rm9jdXNSaW5nKEdyYXBoaWNzQ29udGV4dCog
Y29udGV4dCwgaW50IHR4LCBpbnQgdHksIFJlbmRlclN0eWxlKiBzdHlsZSkKIHsKICAgICBWZWN0
b3I8SW50UmVjdD4gZm9jdXNSaW5nUmVjdHM7Ci0gICAgYWRkRm9jdXNSaW5nUmVjdHMoZm9jdXNS
aW5nUmVjdHMsIHR4LCB0eSk7CisgICAgYWRkRm9jdXNSaW5nUmVjdHMoZm9jdXNSaW5nUmVjdHMs
IEludFBvaW50KHR4LCB0eSkpOwogICAgIGlmIChzdHlsZS0+b3V0bGluZVN0eWxlSXNBdXRvKCkp
CiAgICAgICAgIGNvbnRleHQtPmRyYXdGb2N1c1JpbmcoZm9jdXNSaW5nUmVjdHMsIHN0eWxlLT5v
dXRsaW5lV2lkdGgoKSwgc3R5bGUtPm91dGxpbmVPZmZzZXQoKSwgc3R5bGUtPnZpc2l0ZWREZXBl
bmRlbnRDb2xvcihDU1NQcm9wZXJ0eU91dGxpbmVDb2xvcikpOwogICAgIGVsc2UKQEAgLTExMTks
OCArMTExOSw4IEBAIHZvaWQgUmVuZGVyT2JqZWN0OjphYnNvbHV0ZUZvY3VzUmluZ1F1YWQKICAg
ICAvLyBpbXBsaWNpdGx5IGFzc3VtZXMgdGhhdC4gVGhpcyBkb2Vzbid0IHdvcmsgY29ycmVjdGx5
IHdpdGggdHJhbnNmb3JtZWQKICAgICAvLyBkZXNjZW5kYW50cy4KICAgICBGbG9hdFBvaW50IGFi
c29sdXRlUG9pbnQgPSBsb2NhbFRvQWJzb2x1dGUoKTsKLSAgICBhZGRGb2N1c1JpbmdSZWN0cyhy
ZWN0cywgYWJzb2x1dGVQb2ludC54KCksIGFic29sdXRlUG9pbnQueSgpKTsKLSAgICBzaXplX3Qg
Y291bnQgPSByZWN0cy5zaXplKCk7CisgICAgYWRkRm9jdXNSaW5nUmVjdHMocmVjdHMsIGZsb29y
ZWRJbnRQb2ludChhYnNvbHV0ZVBvaW50KSk7CisgICAgc2l6ZV90IGNvdW50ID0gcmVjdHMuc2l6
ZSgpOyAKICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGNvdW50OyArK2kpIHsKICAgICAgICAg
SW50UmVjdCByZWN0ID0gcmVjdHNbaV07CiAgICAgICAgIHJlY3QubW92ZSgtYWJzb2x1dGVQb2lu
dC54KCksIC1hYnNvbHV0ZVBvaW50LnkoKSk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyT2JqZWN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlck9iamVjdC5oCShyZXZpc2lvbiA4NzE4NSkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJPYmplY3QuaAkod29ya2luZyBjb3B5KQpAQCAtNzc1LDcgKzc3NSw3IEBAIHB1
YmxpYzoKICAgICBib29sIHNob3VsZFVzZVRyYW5zZm9ybUZyb21Db250YWluZXIoY29uc3QgUmVu
ZGVyT2JqZWN0KiBjb250YWluZXIpIGNvbnN0OwogICAgIHZvaWQgZ2V0VHJhbnNmb3JtRnJvbUNv
bnRhaW5lcihjb25zdCBSZW5kZXJPYmplY3QqIGNvbnRhaW5lciwgY29uc3QgSW50U2l6ZSYgb2Zm
c2V0SW5Db250YWluZXIsIFRyYW5zZm9ybWF0aW9uTWF0cml4JikgY29uc3Q7CiAgICAgCi0gICAg
dmlydHVhbCB2b2lkIGFkZEZvY3VzUmluZ1JlY3RzKFZlY3RvcjxJbnRSZWN0PiYsIGludCAvKnR4
Ki8sIGludCAvKnR5Ki8pIHsgfTsKKyAgICB2aXJ0dWFsIHZvaWQgYWRkRm9jdXNSaW5nUmVjdHMo
VmVjdG9yPEludFJlY3Q+JiwgY29uc3QgSW50UG9pbnQmKSB7IH07CiAKICAgICBJbnRSZWN0IGFi
c29sdXRlT3V0bGluZUJvdW5kcygpIGNvbnN0CiAgICAgewpJbmRleDogU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlclRleHRDb250cm9sLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4dENvbnRyb2wuY3BwCShyZXZpc2lvbiA4NzE4NSkKKysr
IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0Q29udHJvbC5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTU5MSwxMCArNTkxLDEwIEBAIHZvaWQgUmVuZGVyVGV4dENvbnRyb2w6OnNlbGVj
dGlvbkNoYW5nZWQKICAgICB9CiB9CiAKLXZvaWQgUmVuZGVyVGV4dENvbnRyb2w6OmFkZEZvY3Vz
UmluZ1JlY3RzKFZlY3RvcjxJbnRSZWN0PiYgcmVjdHMsIGludCB0eCwgaW50IHR5KQordm9pZCBS
ZW5kZXJUZXh0Q29udHJvbDo6YWRkRm9jdXNSaW5nUmVjdHMoVmVjdG9yPEludFJlY3Q+JiByZWN0
cywgY29uc3QgSW50UG9pbnQmIGFkZGl0aW9uYWxPZmZzZXQpCiB7Ci0gICAgaWYgKHdpZHRoKCkg
JiYgaGVpZ2h0KCkpCi0gICAgICAgIHJlY3RzLmFwcGVuZChJbnRSZWN0KHR4LCB0eSwgd2lkdGgo
KSwgaGVpZ2h0KCkpKTsKKyAgICBpZiAoIXNpemUoKS5pc0VtcHR5KCkpCisgICAgICAgIHJlY3Rz
LmFwcGVuZChJbnRSZWN0KGFkZGl0aW9uYWxPZmZzZXQsIHNpemUoKSkpOwogfQogCiB2b2lkIFJl
bmRlclRleHRDb250cm9sOjp1cGRhdGVQbGFjZWhvbGRlclZpc2liaWxpdHkoYm9vbCBwbGFjZWhv
bGRlclNob3VsZEJlVmlzaWJsZSwgYm9vbCBwbGFjZWhvbGRlclZhbHVlQ2hhbmdlZCkKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0Q29udHJvbC5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0Q29udHJvbC5oCShyZXZpc2lv
biA4NzE4NSkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0Q29udHJvbC5o
CSh3b3JraW5nIGNvcHkpCkBAIC05Miw3ICs5Miw3IEBAIHByaXZhdGU6CiAgICAgdmlydHVhbCBi
b29sIGF2b2lkc0Zsb2F0cygpIGNvbnN0IHsgcmV0dXJuIHRydWU7IH0KICAgICB2aXJ0dWFsIHZv
aWQgcGFpbnRPYmplY3QoUGFpbnRJbmZvJiwgaW50IHR4LCBpbnQgdHkpOwogICAgIAotICAgIHZp
cnR1YWwgdm9pZCBhZGRGb2N1c1JpbmdSZWN0cyhWZWN0b3I8SW50UmVjdD4mLCBpbnQgdHgsIGlu
dCB0eSk7CisgICAgdmlydHVhbCB2b2lkIGFkZEZvY3VzUmluZ1JlY3RzKFZlY3RvcjxJbnRSZWN0
PiYsIGNvbnN0IEludFBvaW50Jik7CiAKICAgICB2aXJ0dWFsIGJvb2wgY2FuQmVQcm9ncmFtYXRp
Y2FsbHlTY3JvbGxlZChib29sKSBjb25zdCB7IHJldHVybiB0cnVlOyB9CiAKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmUuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0Q29udHJvbFNpbmds
ZUxpbmUuY3BwCShyZXZpc2lvbiA4NzE4NSkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNjEsMTEg
KzI2MSwxMSBAQCB2b2lkIFJlbmRlclRleHRDb250cm9sU2luZ2xlTGluZTo6cGFpbnRCCiAgICAg
cGFpbnRCb3hEZWNvcmF0aW9uc1dpdGhTaXplKHBhaW50SW5mbywgSW50UmVjdCh0eCwgdHksIHdp
ZHRoKCkgLSBkZWNvcmF0aW9uV2lkdGhSaWdodCgpLCBoZWlnaHQoKSkpOwogfQogCi12b2lkIFJl
bmRlclRleHRDb250cm9sU2luZ2xlTGluZTo6YWRkRm9jdXNSaW5nUmVjdHMoVmVjdG9yPEludFJl
Y3Q+JiByZWN0cywgaW50IHR4LCBpbnQgdHkpCit2b2lkIFJlbmRlclRleHRDb250cm9sU2luZ2xl
TGluZTo6YWRkRm9jdXNSaW5nUmVjdHMoVmVjdG9yPEludFJlY3Q+JiByZWN0cywgY29uc3QgSW50
UG9pbnQmIGFkZGl0aW9uYWxPZmZzZXQpCiB7CiAgICAgaW50IHcgPSB3aWR0aCgpIC0gZGVjb3Jh
dGlvbldpZHRoUmlnaHQoKTsKICAgICBpZiAodyAmJiBoZWlnaHQoKSkKLSAgICAgICAgcmVjdHMu
YXBwZW5kKEludFJlY3QodHgsIHR5LCB3LCBoZWlnaHQoKSkpOworICAgICAgICByZWN0cy5hcHBl
bmQoSW50UmVjdChhZGRpdGlvbmFsT2Zmc2V0LCBJbnRTaXplKHcsIGhlaWdodCgpKSkpOwogfQog
CiB2b2lkIFJlbmRlclRleHRDb250cm9sU2luZ2xlTGluZTo6bGF5b3V0KCkKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmUuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4dENvbnRyb2xTaW5nbGVM
aW5lLmgJKHJldmlzaW9uIDg3MTg1KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
clRleHRDb250cm9sU2luZ2xlTGluZS5oCSh3b3JraW5nIGNvcHkpCkBAIC03NCw3ICs3NCw3IEBA
IHByaXZhdGU6CiAgICAgdmlydHVhbCB2b2lkIHN1YnRyZWVIYXNDaGFuZ2VkKCk7CiAgICAgdmly
dHVhbCB2b2lkIHBhaW50KFBhaW50SW5mbyYsIGludCB0eCwgaW50IHR5KTsKICAgICB2aXJ0dWFs
IHZvaWQgcGFpbnRCb3hEZWNvcmF0aW9ucyhQYWludEluZm8mLCBpbnQgdHgsIGludCB0eSk7Ci0g
ICAgdmlydHVhbCB2b2lkIGFkZEZvY3VzUmluZ1JlY3RzKFZlY3RvcjxJbnRSZWN0PiYsIGludCB0
eCwgaW50IHR5KTsKKyAgICB2aXJ0dWFsIHZvaWQgYWRkRm9jdXNSaW5nUmVjdHMoVmVjdG9yPElu
dFJlY3Q+JiwgY29uc3QgSW50UG9pbnQmKTsKICAgICB2aXJ0dWFsIHZvaWQgbGF5b3V0KCk7CiAK
ICAgICB2aXJ0dWFsIGJvb2wgbm9kZUF0UG9pbnQoY29uc3QgSGl0VGVzdFJlcXVlc3QmLCBIaXRU
ZXN0UmVzdWx0JiwgY29uc3QgSW50UG9pbnQmIHBvaW50SW5Db250YWluZXIsIGludCB0eCwgaW50
IHR5LCBIaXRUZXN0QWN0aW9uKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcv
UmVuZGVyU1ZHQ29udGFpbmVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvc3ZnL1JlbmRlclNWR0NvbnRhaW5lci5jcHAJKHJldmlzaW9uIDg3MTg1KQorKysgU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdDb250YWluZXIuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0xMzksNyArMTM5LDcgQEAgdm9pZCBSZW5kZXJTVkdDb250YWluZXI6OnBhaW50
KFBhaW50SW5mbwogfQogCiAvLyBhZGRGb2N1c1JpbmdSZWN0cyBpcyBjYWxsZWQgZnJvbSBwYWlu
dE91dGxpbmUgYW5kIG5lZWRzIHRvIGJlIGluIHRoZSBzYW1lIGNvb3JkaW5hdGVzIGFzIHRoZSBw
YWludE91bGluZSBjYWxsCi12b2lkIFJlbmRlclNWR0NvbnRhaW5lcjo6YWRkRm9jdXNSaW5nUmVj
dHMoVmVjdG9yPEludFJlY3Q+JiByZWN0cywgaW50LCBpbnQpCit2b2lkIFJlbmRlclNWR0NvbnRh
aW5lcjo6YWRkRm9jdXNSaW5nUmVjdHMoVmVjdG9yPEludFJlY3Q+JiByZWN0cywgY29uc3QgSW50
UG9pbnQmKQogewogICAgIEludFJlY3QgcGFpbnRSZWN0SW5QYXJlbnQgPSBlbmNsb3NpbmdJbnRS
ZWN0KGxvY2FsVG9QYXJlbnRUcmFuc2Zvcm0oKS5tYXBSZWN0KHJlcGFpbnRSZWN0SW5Mb2NhbENv
b3JkaW5hdGVzKCkpKTsKICAgICBpZiAoIXBhaW50UmVjdEluUGFyZW50LmlzRW1wdHkoKSkKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHQ29udGFpbmVyLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdDb250YWlu
ZXIuaAkocmV2aXNpb24gODcxODUpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1Jl
bmRlclNWR0NvbnRhaW5lci5oCSh3b3JraW5nIGNvcHkpCkBAIC01MSw3ICs1MSw3IEBAIHByb3Rl
Y3RlZDoKIAogICAgIHZpcnR1YWwgdm9pZCBsYXlvdXQoKTsKIAotICAgIHZpcnR1YWwgdm9pZCBh
ZGRGb2N1c1JpbmdSZWN0cyhWZWN0b3I8SW50UmVjdD4mLCBpbnQgdHgsIGludCB0eSk7CisgICAg
dmlydHVhbCB2b2lkIGFkZEZvY3VzUmluZ1JlY3RzKFZlY3RvcjxJbnRSZWN0PiYsIGNvbnN0IElu
dFBvaW50Jik7CiAKICAgICB2aXJ0dWFsIEZsb2F0UmVjdCBvYmplY3RCb3VuZGluZ0JveCgpIGNv
bnN0IHsgcmV0dXJuIG1fb2JqZWN0Qm91bmRpbmdCb3g7IH0KICAgICB2aXJ0dWFsIEZsb2F0UmVj
dCBzdHJva2VCb3VuZGluZ0JveCgpIGNvbnN0IHsgcmV0dXJuIG1fc3Ryb2tlQm91bmRpbmdCb3g7
IH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHSW1hZ2UuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHSW1h
Z2UuY3BwCShyZXZpc2lvbiA4NzE4NSkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcv
UmVuZGVyU1ZHSW1hZ2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNzksNyArMTc5LDcgQEAgdm9p
ZCBSZW5kZXJTVkdJbWFnZTo6aW1hZ2VDaGFuZ2VkKFdyYXBwZQogICAgIHJlcGFpbnQoKTsKIH0K
IAotdm9pZCBSZW5kZXJTVkdJbWFnZTo6YWRkRm9jdXNSaW5nUmVjdHMoVmVjdG9yPEludFJlY3Q+
JiByZWN0cywgaW50LCBpbnQpCit2b2lkIFJlbmRlclNWR0ltYWdlOjphZGRGb2N1c1JpbmdSZWN0
cyhWZWN0b3I8SW50UmVjdD4mIHJlY3RzLCBjb25zdCBJbnRQb2ludCYpCiB7CiAgICAgLy8gdGhp
cyBpcyBjYWxsZWQgZnJvbSBwYWludCgpIGFmdGVyIHRoZSBsb2NhbFRyYW5zZm9ybSBoYXMgYWxy
ZWFkeSBiZWVuIGFwcGxpZWQKICAgICBJbnRSZWN0IGNvbnRlbnRSZWN0ID0gZW5jbG9zaW5nSW50
UmVjdChyZXBhaW50UmVjdEluTG9jYWxDb29yZGluYXRlcygpKTsKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHSW1hZ2UuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR0ltYWdlLmgJKHJldmlzaW9uIDg3MTg1KQor
KysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdJbWFnZS5oCSh3b3JraW5n
IGNvcHkpCkBAIC01Nyw3ICs1Nyw3IEBAIHByaXZhdGU6CiAgICAgdmlydHVhbCBGbG9hdFJlY3Qg
c3Ryb2tlQm91bmRpbmdCb3goKSBjb25zdCB7IHJldHVybiBtX29iamVjdEJvdW5kaW5nQm94OyB9
CiAgICAgdmlydHVhbCBGbG9hdFJlY3QgcmVwYWludFJlY3RJbkxvY2FsQ29vcmRpbmF0ZXMoKSBj
b25zdCB7IHJldHVybiBtX3JlcGFpbnRCb3VuZGluZ0JveDsgfQogCi0gICAgdmlydHVhbCB2b2lk
IGFkZEZvY3VzUmluZ1JlY3RzKFZlY3RvcjxJbnRSZWN0PiYsIGludCB0eCwgaW50IHR5KTsKKyAg
ICB2aXJ0dWFsIHZvaWQgYWRkRm9jdXNSaW5nUmVjdHMoVmVjdG9yPEludFJlY3Q+JiwgY29uc3Qg
SW50UG9pbnQmKTsKIAogICAgIHZpcnR1YWwgdm9pZCBpbWFnZUNoYW5nZWQoV3JhcHBlZEltYWdl
UHRyLCBjb25zdCBJbnRSZWN0KiA9IDApOwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvc3ZnL1JlbmRlclNWR1BhdGguY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9zdmcvUmVuZGVyU1ZHUGF0aC5jcHAJKHJldmlzaW9uIDg3MTg1KQorKysgU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdQYXRoLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMjM2LDcgKzIzNiw3IEBAIHZvaWQgUmVuZGVyU1ZHUGF0aDo6cGFpbnQoUGFpbnRJbmZvJiBw
YWkKIAogLy8gVGhpcyBtZXRob2QgaXMgY2FsbGVkIGZyb20gaW5zaWRlIHBhaW50T3V0bGluZSgp
IHNpbmNlIHdlIGNhbGwgcGFpbnRPdXRsaW5lKCkKIC8vIHdoaWxlIHRyYW5zZm9ybWVkIHRvIG91
ciBjb29yZCBzeXN0ZW0sIHJldHVybiBsb2NhbCBjb29yZHMKLXZvaWQgUmVuZGVyU1ZHUGF0aDo6
YWRkRm9jdXNSaW5nUmVjdHMoVmVjdG9yPEludFJlY3Q+JiByZWN0cywgaW50LCBpbnQpIAordm9p
ZCBSZW5kZXJTVkdQYXRoOjphZGRGb2N1c1JpbmdSZWN0cyhWZWN0b3I8SW50UmVjdD4mIHJlY3Rz
LCBjb25zdCBJbnRQb2ludCYpIAogewogICAgIEludFJlY3QgcmVjdCA9IGVuY2xvc2luZ0ludFJl
Y3QocmVwYWludFJlY3RJbkxvY2FsQ29vcmRpbmF0ZXMoKSk7CiAgICAgaWYgKCFyZWN0LmlzRW1w
dHkoKSkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUGF0aC5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHUGF0
aC5oCShyZXZpc2lvbiA4NzE4NSkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVu
ZGVyU1ZHUGF0aC5oCSh3b3JraW5nIGNvcHkpCkBAIC02MSw3ICs2MSw3IEBAIHByaXZhdGU6CiAK
ICAgICB2aXJ0dWFsIHZvaWQgbGF5b3V0KCk7CiAgICAgdmlydHVhbCB2b2lkIHBhaW50KFBhaW50
SW5mbyYsIGludCBwYXJlbnRYLCBpbnQgcGFyZW50WSk7Ci0gICAgdmlydHVhbCB2b2lkIGFkZEZv
Y3VzUmluZ1JlY3RzKFZlY3RvcjxJbnRSZWN0PiYsIGludCB0eCwgaW50IHR5KTsKKyAgICB2aXJ0
dWFsIHZvaWQgYWRkRm9jdXNSaW5nUmVjdHMoVmVjdG9yPEludFJlY3Q+JiwgY29uc3QgSW50UG9p
bnQmKTsKIAogICAgIHZpcnR1YWwgYm9vbCBub2RlQXRGbG9hdFBvaW50KGNvbnN0IEhpdFRlc3RS
ZXF1ZXN0JiwgSGl0VGVzdFJlc3VsdCYsIGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50SW5QYXJlbnQs
IEhpdFRlc3RBY3Rpb24pOwogCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>94719</attachid>
            <date>2011-05-24 17:12:37 -0700</date>
            <delta_ts>2011-05-25 10:04:51 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>patch</filename>
            <type>text/plain</type>
            <size>22873</size>
            <attacher name="Levi Weintraub">leviw</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDg3MTg1KQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsNTAgQEAKKzIwMTEtMDUtMjQgIExldmkgV2Vp
bnRyYXViICA8bGV2aXdAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9E
WSAoT09QUyEpLgorCisgICAgICAgIFN3aXRjaCBhZGRGb2N1c1JpbmdSZWN0cyB0byB1c2UgSW50
UG9pbnQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTYw
NzgzCisKKyAgICAgICAgU3dpdGNoaW5nIGFkZEZvY3VzUmluZ1JlY3RzIHRvIHVzZSBhbiBJbnRQ
b2ludCByZXByZXNlbnRpbmcgdGhlIG9mZnNldCBiZWluZworICAgICAgICBhcHBsaWVkIGluc3Rl
YWQgb2YgYSBwYWlyIG9mIGludHMuCisKKyAgICAgICAgTm8gbmV3IHRlc3RzIGFzIHRoaXMgaXMg
b25seSByZWZhY3RvcmluZy4KKworICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0Zsb2F0U2l6
ZS5oOgorICAgICAgICAoV2ViQ29yZTo6Zmxvb3JlZEludFBvaW50KToKKyAgICAgICAgKiByZW5k
ZXJpbmcvUmVuZGVyQmxvY2suY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQmxvY2s6OmFk
ZEZvY3VzUmluZ1JlY3RzKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyQmxvY2suaDoKKyAg
ICAgICAgKiByZW5kZXJpbmcvUmVuZGVyQm94LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRl
ckJveDo6YWRkRm9jdXNSaW5nUmVjdHMpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJCb3gu
aDoKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVySW5saW5lLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OlJlbmRlcklubGluZTo6YWRkRm9jdXNSaW5nUmVjdHMpOgorICAgICAgICAqIHJlbmRlcmlu
Zy9SZW5kZXJJbmxpbmUuaDoKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyTGlzdEJveC5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMaXN0Qm94OjphZGRGb2N1c1JpbmdSZWN0cyk6Cisg
ICAgICAgICogcmVuZGVyaW5nL1JlbmRlckxpc3RCb3guaDoKKyAgICAgICAgKiByZW5kZXJpbmcv
UmVuZGVyT2JqZWN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlck9iamVjdDo6cGFpbnRG
b2N1c1JpbmcpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyT2JqZWN0OjphYnNvbHV0ZUZvY3Vz
UmluZ1F1YWRzKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyT2JqZWN0Lmg6CisgICAgICAg
IChXZWJDb3JlOjpSZW5kZXJPYmplY3Q6OmFkZEZvY3VzUmluZ1JlY3RzKToKKyAgICAgICAgKiBy
ZW5kZXJpbmcvUmVuZGVyVGV4dENvbnRyb2wuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVy
VGV4dENvbnRyb2w6OmFkZEZvY3VzUmluZ1JlY3RzKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVu
ZGVyVGV4dENvbnRyb2wuaDoKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyVGV4dENvbnRyb2xT
aW5nbGVMaW5lLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRleHRDb250cm9sU2luZ2xl
TGluZTo6YWRkRm9jdXNSaW5nUmVjdHMpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJUZXh0
Q29udHJvbFNpbmdsZUxpbmUuaDoKKyAgICAgICAgKiByZW5kZXJpbmcvc3ZnL1JlbmRlclNWR0Nv
bnRhaW5lci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJTVkdDb250YWluZXI6OmFkZEZv
Y3VzUmluZ1JlY3RzKToKKyAgICAgICAgKiByZW5kZXJpbmcvc3ZnL1JlbmRlclNWR0NvbnRhaW5l
ci5oOgorICAgICAgICAqIHJlbmRlcmluZy9zdmcvUmVuZGVyU1ZHSW1hZ2UuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6UmVuZGVyU1ZHSW1hZ2U6OmFkZEZvY3VzUmluZ1JlY3RzKToKKyAgICAgICAg
KiByZW5kZXJpbmcvc3ZnL1JlbmRlclNWR0ltYWdlLmg6CisgICAgICAgICogcmVuZGVyaW5nL3N2
Zy9SZW5kZXJTVkdQYXRoLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNWR1BhdGg6OmFk
ZEZvY3VzUmluZ1JlY3RzKToKKyAgICAgICAgKiByZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1BhdGgu
aDoKKwogMjAxMS0wNS0yNCAgQWRhbSBSb2JlbiAgPGFyb2JlbkBhcHBsZS5jb20+CiAKICAgICAg
ICAgTGVvcGFyZCBidWlsZCBmaXgKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL0Zsb2F0U2l6ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL0Zsb2F0U2l6ZS5oCShyZXZpc2lvbiA4NzE4NSkKKysrIFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL0Zsb2F0U2l6ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOCw3ICsyOCw3
IEBACiAjaWZuZGVmIEZsb2F0U2l6ZV9oCiAjZGVmaW5lIEZsb2F0U2l6ZV9oCiAKLSNpbmNsdWRl
ICJJbnRTaXplLmgiCisjaW5jbHVkZSAiSW50UG9pbnQuaCIKICNpbmNsdWRlIDx3dGYvTWF0aEV4
dHJhcy5oPgogCiAjaWYgVVNFKENHKSB8fCAoUExBVEZPUk0oV1gpICYmIE9TKERBUldJTikpIHx8
IFVTRShTS0lBX09OX01BQ19DSFJPTUUpCkBAIC0xNTUsNiArMTU1LDExIEBAIGlubGluZSBJbnRT
aXplIGV4cGFuZGVkSW50U2l6ZShjb25zdCBGbG8KICAgICByZXR1cm4gSW50U2l6ZShjbGFtcFRv
SW50ZWdlcihjZWlsZihwLndpZHRoKCkpKSwgY2xhbXBUb0ludGVnZXIoY2VpbGYocC5oZWlnaHQo
KSkpKTsKIH0KIAoraW5saW5lIEludFBvaW50IGZsb29yZWRJbnRQb2ludChjb25zdCBGbG9hdFNp
emUmIHApCit7CisgICAgcmV0dXJuIEludFBvaW50KHN0YXRpY19jYXN0PGludD4ocC53aWR0aCgp
KSwgc3RhdGljX2Nhc3Q8aW50PihwLmhlaWdodCgpKSk7Cit9CisKIH0gLy8gbmFtZXNwYWNlIFdl
YkNvcmUKIAogI2VuZGlmIC8vIEZsb2F0U2l6ZV9oCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyQmxvY2suY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJCbG9jay5jcHAJKHJldmlzaW9uIDg3MTg1KQorKysgU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlckJsb2NrLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTg0Niw3ICs1ODQ2
LDcgQEAgSW50UmVjdCBSZW5kZXJCbG9jazo6bG9jYWxDYXJldFJlY3QoSW5saQogICAgIHJldHVy
biBJbnRSZWN0KHgsIHksIGNhcmV0V2lkdGgsIGhlaWdodCk7CiB9CiAKLXZvaWQgUmVuZGVyQmxv
Y2s6OmFkZEZvY3VzUmluZ1JlY3RzKFZlY3RvcjxJbnRSZWN0PiYgcmVjdHMsIGludCB0eCwgaW50
IHR5KQordm9pZCBSZW5kZXJCbG9jazo6YWRkRm9jdXNSaW5nUmVjdHMoVmVjdG9yPEludFJlY3Q+
JiByZWN0cywgY29uc3QgSW50UG9pbnQmIGFkZGl0aW9uYWxPZmZzZXQpCiB7CiAgICAgLy8gRm9y
IGJsb2NrcyBpbnNpZGUgaW5saW5lcywgd2UgZ28gYWhlYWQgYW5kIGluY2x1ZGUgbWFyZ2lucyBz
byB0aGF0IHdlIHJ1biByaWdodCB1cCB0byB0aGUKICAgICAvLyBpbmxpbmUgYm94ZXMgYWJvdmUg
YW5kIGJlbG93IHVzICh0aHVzIGdldHRpbmcgbWVyZ2VkIHdpdGggdGhlbSB0byBmb3JtIGEgc2lu
Z2xlIGlycmVndWxhcgpAQCAtNTg2MCwxNyArNTg2MCwxNyBAQCB2b2lkIFJlbmRlckJsb2NrOjph
ZGRGb2N1c1JpbmdSZWN0cyhWZWN0CiAgICAgICAgIGJvb2wgcHJldklubGluZUhhc0xpbmVCb3gg
PSB0b1JlbmRlcklubGluZShpbmxpbmVFbGVtZW50Q29udGludWF0aW9uKCktPm5vZGUoKS0+cmVu
ZGVyZXIoKSktPmZpcnN0TGluZUJveCgpOyAKICAgICAgICAgaW50IHRvcE1hcmdpbiA9IHByZXZJ
bmxpbmVIYXNMaW5lQm94ID8gY29sbGFwc2VkTWFyZ2luQmVmb3JlKCkgOiAwOwogICAgICAgICBp
bnQgYm90dG9tTWFyZ2luID0gbmV4dElubGluZUhhc0xpbmVCb3ggPyBjb2xsYXBzZWRNYXJnaW5B
ZnRlcigpIDogMDsKLSAgICAgICAgSW50UmVjdCByZWN0KHR4LCB0eSAtIHRvcE1hcmdpbiwgd2lk
dGgoKSwgaGVpZ2h0KCkgKyB0b3BNYXJnaW4gKyBib3R0b21NYXJnaW4pOworICAgICAgICBJbnRS
ZWN0IHJlY3QoYWRkaXRpb25hbE9mZnNldC54KCksIGFkZGl0aW9uYWxPZmZzZXQueSgpIC0gdG9w
TWFyZ2luLCB3aWR0aCgpLCBoZWlnaHQoKSArIHRvcE1hcmdpbiArIGJvdHRvbU1hcmdpbik7CiAg
ICAgICAgIGlmICghcmVjdC5pc0VtcHR5KCkpCiAgICAgICAgICAgICByZWN0cy5hcHBlbmQocmVj
dCk7CiAgICAgfSBlbHNlIGlmICh3aWR0aCgpICYmIGhlaWdodCgpKQotICAgICAgICByZWN0cy5h
cHBlbmQoSW50UmVjdCh0eCwgdHksIHdpZHRoKCksIGhlaWdodCgpKSk7CisgICAgICAgIHJlY3Rz
LmFwcGVuZChJbnRSZWN0KGFkZGl0aW9uYWxPZmZzZXQsIHNpemUoKSkpOwogCiAgICAgaWYgKCFo
YXNPdmVyZmxvd0NsaXAoKSAmJiAhaGFzQ29udHJvbENsaXAoKSkgewogICAgICAgICBmb3IgKFJv
b3RJbmxpbmVCb3gqIGN1cnIgPSBmaXJzdFJvb3RCb3goKTsgY3VycjsgY3VyciA9IGN1cnItPm5l
eHRSb290Qm94KCkpIHsKICAgICAgICAgICAgIGludCB0b3AgPSBtYXgoY3Vyci0+bGluZVRvcCgp
LCBjdXJyLT5sb2dpY2FsVG9wKCkpOwogICAgICAgICAgICAgaW50IGJvdHRvbSA9IG1pbihjdXJy
LT5saW5lQm90dG9tKCksIGN1cnItPmxvZ2ljYWxUb3AoKSArIGN1cnItPmxvZ2ljYWxIZWlnaHQo
KSk7Ci0gICAgICAgICAgICBJbnRSZWN0IHJlY3QodHggKyBjdXJyLT54KCksIHR5ICsgdG9wLCBj
dXJyLT5sb2dpY2FsV2lkdGgoKSwgYm90dG9tIC0gdG9wKTsKKyAgICAgICAgICAgIEludFJlY3Qg
cmVjdChhZGRpdGlvbmFsT2Zmc2V0LngoKSArIGN1cnItPngoKSwgYWRkaXRpb25hbE9mZnNldC55
KCkgKyB0b3AsIGN1cnItPmxvZ2ljYWxXaWR0aCgpLCBib3R0b20gLSB0b3ApOwogICAgICAgICAg
ICAgaWYgKCFyZWN0LmlzRW1wdHkoKSkKICAgICAgICAgICAgICAgICByZWN0cy5hcHBlbmQocmVj
dCk7CiAgICAgICAgIH0KQEAgLTU4ODMsMTYgKzU4ODMsMTQgQEAgdm9pZCBSZW5kZXJCbG9jazo6
YWRkRm9jdXNSaW5nUmVjdHMoVmVjdAogICAgICAgICAgICAgICAgIGlmIChib3gtPmxheWVyKCkp
IAogICAgICAgICAgICAgICAgICAgICBwb3MgPSBjdXJyLT5sb2NhbFRvQWJzb2x1dGUoKTsKICAg
ICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAgIHBvcyA9IEZsb2F0UG9pbnQo
dHggKyBib3gtPngoKSwgdHkgKyBib3gtPnkoKSk7Ci0gICAgICAgICAgICAgICAgYm94LT5hZGRG
b2N1c1JpbmdSZWN0cyhyZWN0cywgcG9zLngoKSwgcG9zLnkoKSk7CisgICAgICAgICAgICAgICAg
ICAgIHBvcyA9IEZsb2F0UG9pbnQoYWRkaXRpb25hbE9mZnNldC54KCkgKyBib3gtPngoKSwgYWRk
aXRpb25hbE9mZnNldC55KCkgKyBib3gtPnkoKSk7CisgICAgICAgICAgICAgICAgYm94LT5hZGRG
b2N1c1JpbmdSZWN0cyhyZWN0cywgZmxvb3JlZEludFBvaW50KHBvcykpOwogICAgICAgICAgICAg
fQogICAgICAgICB9CiAgICAgfQogCiAgICAgaWYgKGlubGluZUVsZW1lbnRDb250aW51YXRpb24o
KSkKLSAgICAgICAgaW5saW5lRWxlbWVudENvbnRpbnVhdGlvbigpLT5hZGRGb2N1c1JpbmdSZWN0
cyhyZWN0cywgCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgdHggLSB4KCkgKyBpbmxpbmVFbGVtZW50Q29udGludWF0aW9uKCktPmNvbnRhaW5p
bmdCbG9jaygpLT54KCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgdHkgLSB5KCkgKyBpbmxpbmVFbGVtZW50Q29udGludWF0aW9uKCktPmNv
bnRhaW5pbmdCbG9jaygpLT55KCkpOworICAgICAgICBpbmxpbmVFbGVtZW50Q29udGludWF0aW9u
KCktPmFkZEZvY3VzUmluZ1JlY3RzKHJlY3RzLCBmbG9vcmVkSW50UG9pbnQoYWRkaXRpb25hbE9m
ZnNldCArIGlubGluZUVsZW1lbnRDb250aW51YXRpb24oKS0+Y29udGFpbmluZ0Jsb2NrKCktPmxv
Y2F0aW9uKCkgLSBsb2NhdGlvbigpKSk7CiB9CiAKIFJlbmRlckJsb2NrKiBSZW5kZXJCbG9jazo6
Y3JlYXRlQW5vbnltb3VzQmxvY2soYm9vbCBpc0ZsZXhpYmxlQm94KSBjb25zdApJbmRleDogU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrLmgJKHJldmlzaW9uIDg3MTg1KQorKysgU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrLmgJKHdvcmtpbmcgY29weSkKQEAgLTMz
Myw3ICszMzMsNyBAQCBwcm90ZWN0ZWQ6CiAgICAgdm9pZCBhZGRPdmVyZmxvd0Zyb21CbG9ja0No
aWxkcmVuKCk7CiAgICAgdm9pZCBhZGRPdmVyZmxvd0Zyb21JbmxpbmVDaGlsZHJlbigpOwogCi0g
ICAgdmlydHVhbCB2b2lkIGFkZEZvY3VzUmluZ1JlY3RzKFZlY3RvcjxJbnRSZWN0PiYsIGludCB0
eCwgaW50IHR5KTsKKyAgICB2aXJ0dWFsIHZvaWQgYWRkRm9jdXNSaW5nUmVjdHMoVmVjdG9yPElu
dFJlY3Q+JiwgY29uc3QgSW50UG9pbnQmKTsKIAogI2lmIEVOQUJMRShTVkcpCiAgICAgLy8gT25s
eSB1c2VkIGJ5IFJlbmRlclNWR1RleHQsIHdoaWNoIGV4cGxpY2l0ZWx5IG92ZXJyaWRlcyBSZW5k
ZXJCbG9jazo6bGF5b3V0QmxvY2soKSwgZG8gTk9UIHVzZSBmb3IgYW55dGhpbmcgZWxzZS4KSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3guY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3guY3BwCShyZXZpc2lvbiA4NzE4NSkK
KysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCb3guY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC01MDYsMTAgKzUwNiwxMCBAQCBJbnRSZWN0IFJlbmRlckJveDo6b3V0bGluZUJvdW5kc0Zv
clJlcGFpCiAgICAgcmV0dXJuIGJveDsKIH0KIAotdm9pZCBSZW5kZXJCb3g6OmFkZEZvY3VzUmlu
Z1JlY3RzKFZlY3RvcjxJbnRSZWN0PiYgcmVjdHMsIGludCB0eCwgaW50IHR5KQordm9pZCBSZW5k
ZXJCb3g6OmFkZEZvY3VzUmluZ1JlY3RzKFZlY3RvcjxJbnRSZWN0PiYgcmVjdHMsIGNvbnN0IElu
dFBvaW50JiBhZGRpdGlvbmFsT2Zmc2V0KQogewotICAgIGlmICh3aWR0aCgpICYmIGhlaWdodCgp
KQotICAgICAgICByZWN0cy5hcHBlbmQoSW50UmVjdCh0eCwgdHksIHdpZHRoKCksIGhlaWdodCgp
KSk7CisgICAgaWYgKCFzaXplKCkuaXNFbXB0eSgpKQorICAgICAgICByZWN0cy5hcHBlbmQoSW50
UmVjdChhZGRpdGlvbmFsT2Zmc2V0LCBzaXplKCkpKTsKIH0KIAogSW50UmVjdCBSZW5kZXJCb3g6
OnJlZmxlY3Rpb25Cb3goKSBjb25zdApJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlckJveC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJC
b3guaAkocmV2aXNpb24gODcxODUpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
Qm94LmgJKHdvcmtpbmcgY29weSkKQEAgLTEyOCw3ICsxMjgsNyBAQCBwdWJsaWM6CiAKICAgICAv
LyBCb3VuZHMgb2YgdGhlIG91dGxpbmUgYm94IGluIGFic29sdXRlIGNvb3Jkcy4gUmVzcGVjdHMg
dHJhbnNmb3JtcwogICAgIHZpcnR1YWwgSW50UmVjdCBvdXRsaW5lQm91bmRzRm9yUmVwYWludChS
ZW5kZXJCb3hNb2RlbE9iamVjdCogLypyZXBhaW50Q29udGFpbmVyKi8sIEludFBvaW50KiBjYWNo
ZWRPZmZzZXRUb1JlcGFpbnRDb250YWluZXIpIGNvbnN0OwotICAgIHZpcnR1YWwgdm9pZCBhZGRG
b2N1c1JpbmdSZWN0cyhWZWN0b3I8SW50UmVjdD4mLCBpbnQgdHgsIGludCB0eSk7CisgICAgdmly
dHVhbCB2b2lkIGFkZEZvY3VzUmluZ1JlY3RzKFZlY3RvcjxJbnRSZWN0PiYsIGNvbnN0IEludFBv
aW50Jik7CiAKICAgICAvLyBVc2UgdGhpcyB3aXRoIGNhdXRpb24hIE5vIHR5cGUgY2hlY2tpbmcg
aXMgZG9uZSEKICAgICBSZW5kZXJCb3gqIHByZXZpb3VzU2libGluZ0JveCgpIGNvbnN0OwpJbmRl
eDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlcklubGluZS5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlcklubGluZS5jcHAJKHJldmlzaW9uIDg3
MTg1KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlcklubGluZS5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTEzMzcsMzYgKzEzMzcsMzIgQEAgdm9pZCBSZW5kZXJJbmxpbmU6OmltYWdl
Q2hhbmdlZChXcmFwcGVkSQogICAgIHJlcGFpbnQoKTsKIH0KIAotdm9pZCBSZW5kZXJJbmxpbmU6
OmFkZEZvY3VzUmluZ1JlY3RzKFZlY3RvcjxJbnRSZWN0PiYgcmVjdHMsIGludCB0eCwgaW50IHR5
KQordm9pZCBSZW5kZXJJbmxpbmU6OmFkZEZvY3VzUmluZ1JlY3RzKFZlY3RvcjxJbnRSZWN0PiYg
cmVjdHMsIGNvbnN0IEludFBvaW50JiBhZGRpdGlvbmFsT2Zmc2V0KQogewogICAgIGlmICghYWx3
YXlzQ3JlYXRlTGluZUJveGVzKCkpCi0gICAgICAgIGN1bGxlZElubGluZUFic29sdXRlUmVjdHMo
dGhpcywgcmVjdHMsIEludFNpemUodHgsIHR5KSk7CisgICAgICAgIGN1bGxlZElubGluZUFic29s
dXRlUmVjdHModGhpcywgcmVjdHMsIHRvU2l6ZShhZGRpdGlvbmFsT2Zmc2V0KSk7CiAgICAgZWxz
ZSB7CiAgICAgICAgIGZvciAoSW5saW5lRmxvd0JveCogY3VyciA9IGZpcnN0TGluZUJveCgpOyBj
dXJyOyBjdXJyID0gY3Vyci0+bmV4dExpbmVCb3goKSkKLSAgICAgICAgICAgIHJlY3RzLmFwcGVu
ZChlbmNsb3NpbmdJbnRSZWN0KEZsb2F0UmVjdCh0eCArIGN1cnItPngoKSwgdHkgKyBjdXJyLT55
KCksIGN1cnItPndpZHRoKCksIGN1cnItPmhlaWdodCgpKSkpOworICAgICAgICAgICAgcmVjdHMu
YXBwZW5kKGVuY2xvc2luZ0ludFJlY3QoRmxvYXRSZWN0KGFkZGl0aW9uYWxPZmZzZXQueCgpICsg
Y3Vyci0+eCgpLCBhZGRpdGlvbmFsT2Zmc2V0LnkoKSArIGN1cnItPnkoKSwgY3Vyci0+d2lkdGgo
KSwgY3Vyci0+aGVpZ2h0KCkpKSk7CiAgICAgfQogCiAgICAgZm9yIChSZW5kZXJPYmplY3QqIGN1
cnIgPSBmaXJzdENoaWxkKCk7IGN1cnI7IGN1cnIgPSBjdXJyLT5uZXh0U2libGluZygpKSB7CiAg
ICAgICAgIGlmICghY3Vyci0+aXNUZXh0KCkgJiYgIWN1cnItPmlzTGlzdE1hcmtlcigpKSB7Ci0g
ICAgICAgICAgICBGbG9hdFBvaW50IHBvcyh0eCwgdHkpOworICAgICAgICAgICAgRmxvYXRQb2lu
dCBwb3MoYWRkaXRpb25hbE9mZnNldCk7CiAgICAgICAgICAgICAvLyBGSVhNRTogVGhpcyBkb2Vz
bid0IHdvcmsgY29ycmVjdGx5IHdpdGggdHJhbnNmb3Jtcy4KICAgICAgICAgICAgIGlmIChjdXJy
LT5oYXNMYXllcigpKSAKICAgICAgICAgICAgICAgICBwb3MgPSBjdXJyLT5sb2NhbFRvQWJzb2x1
dGUoKTsKICAgICAgICAgICAgIGVsc2UgaWYgKGN1cnItPmlzQm94KCkpCiAgICAgICAgICAgICAg
ICAgcG9zLm1vdmUodG9SZW5kZXJCb3goY3VyciktPngoKSwgdG9SZW5kZXJCb3goY3VyciktPnko
KSk7Ci0gICAgICAgICAgICBjdXJyLT5hZGRGb2N1c1JpbmdSZWN0cyhyZWN0cywgcG9zLngoKSwg
cG9zLnkoKSk7CisgICAgICAgICAgICBjdXJyLT5hZGRGb2N1c1JpbmdSZWN0cyhyZWN0cywgZmxv
b3JlZEludFBvaW50KHBvcykpOwogICAgICAgICB9CiAgICAgfQogCiAgICAgaWYgKGNvbnRpbnVh
dGlvbigpKSB7CiAgICAgICAgIGlmIChjb250aW51YXRpb24oKS0+aXNJbmxpbmUoKSkKLSAgICAg
ICAgICAgIGNvbnRpbnVhdGlvbigpLT5hZGRGb2N1c1JpbmdSZWN0cyhyZWN0cywgCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHggLSBjb250YWluaW5nQmxv
Y2soKS0+eCgpICsgY29udGludWF0aW9uKCktPmNvbnRhaW5pbmdCbG9jaygpLT54KCksCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHkgLSBjb250YWluaW5n
QmxvY2soKS0+eSgpICsgY29udGludWF0aW9uKCktPmNvbnRhaW5pbmdCbG9jaygpLT55KCkpOwor
ICAgICAgICAgICAgY29udGludWF0aW9uKCktPmFkZEZvY3VzUmluZ1JlY3RzKHJlY3RzLCBmbG9v
cmVkSW50UG9pbnQoYWRkaXRpb25hbE9mZnNldCArIGNvbnRpbnVhdGlvbigpLT5jb250YWluaW5n
QmxvY2soKS0+bG9jYXRpb24oKSAtIGNvbnRhaW5pbmdCbG9jaygpLT5sb2NhdGlvbigpKSk7CiAg
ICAgICAgIGVsc2UKLSAgICAgICAgICAgIGNvbnRpbnVhdGlvbigpLT5hZGRGb2N1c1JpbmdSZWN0
cyhyZWN0cywgCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
dHggLSBjb250YWluaW5nQmxvY2soKS0+eCgpICsgdG9SZW5kZXJCb3goY29udGludWF0aW9uKCkp
LT54KCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHkg
LSBjb250YWluaW5nQmxvY2soKS0+eSgpICsgdG9SZW5kZXJCb3goY29udGludWF0aW9uKCkpLT55
KCkpOworICAgICAgICAgICAgY29udGludWF0aW9uKCktPmFkZEZvY3VzUmluZ1JlY3RzKHJlY3Rz
LCBmbG9vcmVkSW50UG9pbnQoYWRkaXRpb25hbE9mZnNldCArIHRvUmVuZGVyQm94KGNvbnRpbnVh
dGlvbigpKS0+bG9jYXRpb24oKSAtIGNvbnRhaW5pbmdCbG9jaygpLT5sb2NhdGlvbigpKSk7CiAg
ICAgfQogfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVySW5saW5lLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlcklubGluZS5oCShy
ZXZpc2lvbiA4NzE4NSkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJJbmxpbmUu
aAkod29ya2luZyBjb3B5KQpAQCAtNzUsNyArNzUsNyBAQCBwdWJsaWM6CiAgICAgCiAgICAgSW50
U2l6ZSByZWxhdGl2ZVBvc2l0aW9uZWRJbmxpbmVPZmZzZXQoY29uc3QgUmVuZGVyQm94KiBjaGls
ZCkgY29uc3Q7CiAKLSAgICB2aXJ0dWFsIHZvaWQgYWRkRm9jdXNSaW5nUmVjdHMoVmVjdG9yPElu
dFJlY3Q+JiwgaW50IHR4LCBpbnQgdHkpOworICAgIHZpcnR1YWwgdm9pZCBhZGRGb2N1c1JpbmdS
ZWN0cyhWZWN0b3I8SW50UmVjdD4mLCBjb25zdCBJbnRQb2ludCYpOwogICAgIHZvaWQgcGFpbnRP
dXRsaW5lKEdyYXBoaWNzQ29udGV4dCosIGludCB0eCwgaW50IHR5KTsKIAogICAgIHVzaW5nIFJl
bmRlckJveE1vZGVsT2JqZWN0Ojpjb250aW51YXRpb247CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyTGlzdEJveC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlckxpc3RCb3guY3BwCShyZXZpc2lvbiA4NzE4NSkKKysrIFNvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMaXN0Qm94LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzAw
LDE3ICszMDAsMTcgQEAgdm9pZCBSZW5kZXJMaXN0Qm94OjpwYWludE9iamVjdChQYWludEluZgog
ICAgIH0KIH0KIAotdm9pZCBSZW5kZXJMaXN0Qm94OjphZGRGb2N1c1JpbmdSZWN0cyhWZWN0b3I8
SW50UmVjdD4mIHJlY3RzLCBpbnQgdHgsIGludCB0eSkKK3ZvaWQgUmVuZGVyTGlzdEJveDo6YWRk
Rm9jdXNSaW5nUmVjdHMoVmVjdG9yPEludFJlY3Q+JiByZWN0cywgY29uc3QgSW50UG9pbnQmIGFk
ZGl0aW9uYWxPZmZzZXQpCiB7CiAgICAgaWYgKCFpc1NwYXRpYWxOYXZpZ2F0aW9uRW5hYmxlZChm
cmFtZSgpKSkKLSAgICAgICAgcmV0dXJuIFJlbmRlckJsb2NrOjphZGRGb2N1c1JpbmdSZWN0cyhy
ZWN0cywgdHgsIHR5KTsKKyAgICAgICAgcmV0dXJuIFJlbmRlckJsb2NrOjphZGRGb2N1c1JpbmdS
ZWN0cyhyZWN0cywgYWRkaXRpb25hbE9mZnNldCk7CiAKICAgICBTZWxlY3RFbGVtZW50KiBzZWxl
Y3QgPSB0b1NlbGVjdEVsZW1lbnQoc3RhdGljX2Nhc3Q8RWxlbWVudCo+KG5vZGUoKSkpOwogCiAg
ICAgLy8gRm9jdXMgdGhlIGxhc3Qgc2VsZWN0ZWQgaXRlbS4KICAgICBpbnQgc2VsZWN0ZWRJdGVt
ID0gc2VsZWN0LT5hY3RpdmVTZWxlY3Rpb25FbmRMaXN0SW5kZXgoKTsKICAgICBpZiAoc2VsZWN0
ZWRJdGVtID49IDApIHsKLSAgICAgICAgcmVjdHMuYXBwZW5kKGl0ZW1Cb3VuZGluZ0JveFJlY3Qo
dHgsIHR5LCBzZWxlY3RlZEl0ZW0pKTsKKyAgICAgICAgcmVjdHMuYXBwZW5kKGl0ZW1Cb3VuZGlu
Z0JveFJlY3QoYWRkaXRpb25hbE9mZnNldC54KCksIGFkZGl0aW9uYWxPZmZzZXQueSgpLCBzZWxl
Y3RlZEl0ZW0pKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIApAQCAtMzIwLDcgKzMyMCw3IEBA
IHZvaWQgUmVuZGVyTGlzdEJveDo6YWRkRm9jdXNSaW5nUmVjdHMoVmUKICAgICBmb3IgKGludCBp
ID0gMDsgaSA8IHNpemU7ICsraSkgewogICAgICAgICBPcHRpb25FbGVtZW50KiBvcHRpb25FbGVt
ZW50ID0gdG9PcHRpb25FbGVtZW50KGxpc3RJdGVtc1tpXSk7CiAgICAgICAgIGlmIChvcHRpb25F
bGVtZW50ICYmICFvcHRpb25FbGVtZW50LT5kaXNhYmxlZCgpKSB7Ci0gICAgICAgICAgICByZWN0
cy5hcHBlbmQoaXRlbUJvdW5kaW5nQm94UmVjdCh0eCwgdHksIGkpKTsKKyAgICAgICAgICAgIHJl
Y3RzLmFwcGVuZChpdGVtQm91bmRpbmdCb3hSZWN0KGFkZGl0aW9uYWxPZmZzZXQueCgpLCBhZGRp
dGlvbmFsT2Zmc2V0LnkoKSwgaSkpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAg
ICAgfQpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxpc3RCb3guaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGlzdEJveC5oCShyZXZp
c2lvbiA4NzE4NSkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMaXN0Qm94LmgJ
KHdvcmtpbmcgY29weSkKQEAgLTc5LDcgKzc5LDcgQEAgcHJpdmF0ZToKIAogICAgIHZpcnR1YWwg
dm9pZCBsYXlvdXQoKTsKIAotICAgIHZpcnR1YWwgdm9pZCBhZGRGb2N1c1JpbmdSZWN0cyhWZWN0
b3I8SW50UmVjdD4mLCBpbnQgdHgsIGludCB0eSk7CisgICAgdmlydHVhbCB2b2lkIGFkZEZvY3Vz
UmluZ1JlY3RzKFZlY3RvcjxJbnRSZWN0PiYsIGNvbnN0IEludFBvaW50Jik7CiAKICAgICB2aXJ0
dWFsIGJvb2wgY2FuQmVQcm9ncmFtYXRpY2FsbHlTY3JvbGxlZChib29sKSBjb25zdCB7IHJldHVy
biB0cnVlOyB9CiAgICAgdmlydHVhbCB2b2lkIGF1dG9zY3JvbGwoKTsKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJPYmplY3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJPYmplY3QuY3BwCShyZXZpc2lvbiA4NzE4NSkKKysrIFNv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJPYmplY3QuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0xMDAwLDcgKzEwMDAsNyBAQCB2b2lkIFJlbmRlck9iamVjdDo6ZHJhd0FyY0ZvckJveFNpZGUo
R3JhCiB2b2lkIFJlbmRlck9iamVjdDo6cGFpbnRGb2N1c1JpbmcoR3JhcGhpY3NDb250ZXh0KiBj
b250ZXh0LCBpbnQgdHgsIGludCB0eSwgUmVuZGVyU3R5bGUqIHN0eWxlKQogewogICAgIFZlY3Rv
cjxJbnRSZWN0PiBmb2N1c1JpbmdSZWN0czsKLSAgICBhZGRGb2N1c1JpbmdSZWN0cyhmb2N1c1Jp
bmdSZWN0cywgdHgsIHR5KTsKKyAgICBhZGRGb2N1c1JpbmdSZWN0cyhmb2N1c1JpbmdSZWN0cywg
SW50UG9pbnQodHgsIHR5KSk7CiAgICAgaWYgKHN0eWxlLT5vdXRsaW5lU3R5bGVJc0F1dG8oKSkK
ICAgICAgICAgY29udGV4dC0+ZHJhd0ZvY3VzUmluZyhmb2N1c1JpbmdSZWN0cywgc3R5bGUtPm91
dGxpbmVXaWR0aCgpLCBzdHlsZS0+b3V0bGluZU9mZnNldCgpLCBzdHlsZS0+dmlzaXRlZERlcGVu
ZGVudENvbG9yKENTU1Byb3BlcnR5T3V0bGluZUNvbG9yKSk7CiAgICAgZWxzZQpAQCAtMTExOSw4
ICsxMTE5LDggQEAgdm9pZCBSZW5kZXJPYmplY3Q6OmFic29sdXRlRm9jdXNSaW5nUXVhZAogICAg
IC8vIGltcGxpY2l0bHkgYXNzdW1lcyB0aGF0LiBUaGlzIGRvZXNuJ3Qgd29yayBjb3JyZWN0bHkg
d2l0aCB0cmFuc2Zvcm1lZAogICAgIC8vIGRlc2NlbmRhbnRzLgogICAgIEZsb2F0UG9pbnQgYWJz
b2x1dGVQb2ludCA9IGxvY2FsVG9BYnNvbHV0ZSgpOwotICAgIGFkZEZvY3VzUmluZ1JlY3RzKHJl
Y3RzLCBhYnNvbHV0ZVBvaW50LngoKSwgYWJzb2x1dGVQb2ludC55KCkpOwotICAgIHNpemVfdCBj
b3VudCA9IHJlY3RzLnNpemUoKTsKKyAgICBhZGRGb2N1c1JpbmdSZWN0cyhyZWN0cywgZmxvb3Jl
ZEludFBvaW50KGFic29sdXRlUG9pbnQpKTsKKyAgICBzaXplX3QgY291bnQgPSByZWN0cy5zaXpl
KCk7IAogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgY291bnQ7ICsraSkgewogICAgICAgICBJ
bnRSZWN0IHJlY3QgPSByZWN0c1tpXTsKICAgICAgICAgcmVjdC5tb3ZlKC1hYnNvbHV0ZVBvaW50
LngoKSwgLWFic29sdXRlUG9pbnQueSgpKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJPYmplY3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyT2JqZWN0LmgJKHJldmlzaW9uIDg3MTg1KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlck9iamVjdC5oCSh3b3JraW5nIGNvcHkpCkBAIC03NzUsNyArNzc1LDcgQEAgcHVi
bGljOgogICAgIGJvb2wgc2hvdWxkVXNlVHJhbnNmb3JtRnJvbUNvbnRhaW5lcihjb25zdCBSZW5k
ZXJPYmplY3QqIGNvbnRhaW5lcikgY29uc3Q7CiAgICAgdm9pZCBnZXRUcmFuc2Zvcm1Gcm9tQ29u
dGFpbmVyKGNvbnN0IFJlbmRlck9iamVjdCogY29udGFpbmVyLCBjb25zdCBJbnRTaXplJiBvZmZz
ZXRJbkNvbnRhaW5lciwgVHJhbnNmb3JtYXRpb25NYXRyaXgmKSBjb25zdDsKICAgICAKLSAgICB2
aXJ0dWFsIHZvaWQgYWRkRm9jdXNSaW5nUmVjdHMoVmVjdG9yPEludFJlY3Q+JiwgaW50IC8qdHgq
LywgaW50IC8qdHkqLykgeyB9OworICAgIHZpcnR1YWwgdm9pZCBhZGRGb2N1c1JpbmdSZWN0cyhW
ZWN0b3I8SW50UmVjdD4mLCBjb25zdCBJbnRQb2ludCYpIHsgfTsKIAogICAgIEludFJlY3QgYWJz
b2x1dGVPdXRsaW5lQm91bmRzKCkgY29uc3QKICAgICB7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyVGV4dENvbnRyb2wuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0Q29udHJvbC5jcHAJKHJldmlzaW9uIDg3MTg1KQorKysg
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRleHRDb250cm9sLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtNTkxLDEwICs1OTEsMTAgQEAgdm9pZCBSZW5kZXJUZXh0Q29udHJvbDo6c2VsZWN0
aW9uQ2hhbmdlZAogICAgIH0KIH0KIAotdm9pZCBSZW5kZXJUZXh0Q29udHJvbDo6YWRkRm9jdXNS
aW5nUmVjdHMoVmVjdG9yPEludFJlY3Q+JiByZWN0cywgaW50IHR4LCBpbnQgdHkpCit2b2lkIFJl
bmRlclRleHRDb250cm9sOjphZGRGb2N1c1JpbmdSZWN0cyhWZWN0b3I8SW50UmVjdD4mIHJlY3Rz
LCBjb25zdCBJbnRQb2ludCYgYWRkaXRpb25hbE9mZnNldCkKIHsKLSAgICBpZiAod2lkdGgoKSAm
JiBoZWlnaHQoKSkKLSAgICAgICAgcmVjdHMuYXBwZW5kKEludFJlY3QodHgsIHR5LCB3aWR0aCgp
LCBoZWlnaHQoKSkpOworICAgIGlmICghc2l6ZSgpLmlzRW1wdHkoKSkKKyAgICAgICAgcmVjdHMu
YXBwZW5kKEludFJlY3QoYWRkaXRpb25hbE9mZnNldCwgc2l6ZSgpKSk7CiB9CiAKIHZvaWQgUmVu
ZGVyVGV4dENvbnRyb2w6OnVwZGF0ZVBsYWNlaG9sZGVyVmlzaWJpbGl0eShib29sIHBsYWNlaG9s
ZGVyU2hvdWxkQmVWaXNpYmxlLCBib29sIHBsYWNlaG9sZGVyVmFsdWVDaGFuZ2VkKQpJbmRleDog
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRleHRDb250cm9sLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRleHRDb250cm9sLmgJKHJldmlzaW9u
IDg3MTg1KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRleHRDb250cm9sLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTkyLDcgKzkyLDcgQEAgcHJpdmF0ZToKICAgICB2aXJ0dWFsIGJv
b2wgYXZvaWRzRmxvYXRzKCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsgfQogICAgIHZpcnR1YWwgdm9p
ZCBwYWludE9iamVjdChQYWludEluZm8mLCBpbnQgdHgsIGludCB0eSk7CiAgICAgCi0gICAgdmly
dHVhbCB2b2lkIGFkZEZvY3VzUmluZ1JlY3RzKFZlY3RvcjxJbnRSZWN0PiYsIGludCB0eCwgaW50
IHR5KTsKKyAgICB2aXJ0dWFsIHZvaWQgYWRkRm9jdXNSaW5nUmVjdHMoVmVjdG9yPEludFJlY3Q+
JiwgY29uc3QgSW50UG9pbnQmKTsKIAogICAgIHZpcnR1YWwgYm9vbCBjYW5CZVByb2dyYW1hdGlj
YWxseVNjcm9sbGVkKGJvb2wpIGNvbnN0IHsgcmV0dXJuIHRydWU7IH0KIApJbmRleDogU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRleHRDb250cm9sU2luZ2xlTGluZS5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRleHRDb250cm9sU2luZ2xl
TGluZS5jcHAJKHJldmlzaW9uIDg3MTg1KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlclRleHRDb250cm9sU2luZ2xlTGluZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI2MSwxMSAr
MjYxLDExIEBAIHZvaWQgUmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lOjpwYWludEIKICAgICBw
YWludEJveERlY29yYXRpb25zV2l0aFNpemUocGFpbnRJbmZvLCBJbnRSZWN0KHR4LCB0eSwgd2lk
dGgoKSAtIGRlY29yYXRpb25XaWR0aFJpZ2h0KCksIGhlaWdodCgpKSk7CiB9CiAKLXZvaWQgUmVu
ZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lOjphZGRGb2N1c1JpbmdSZWN0cyhWZWN0b3I8SW50UmVj
dD4mIHJlY3RzLCBpbnQgdHgsIGludCB0eSkKK3ZvaWQgUmVuZGVyVGV4dENvbnRyb2xTaW5nbGVM
aW5lOjphZGRGb2N1c1JpbmdSZWN0cyhWZWN0b3I8SW50UmVjdD4mIHJlY3RzLCBjb25zdCBJbnRQ
b2ludCYgYWRkaXRpb25hbE9mZnNldCkKIHsKICAgICBpbnQgdyA9IHdpZHRoKCkgLSBkZWNvcmF0
aW9uV2lkdGhSaWdodCgpOwogICAgIGlmICh3ICYmIGhlaWdodCgpKQotICAgICAgICByZWN0cy5h
cHBlbmQoSW50UmVjdCh0eCwgdHksIHcsIGhlaWdodCgpKSk7CisgICAgICAgIHJlY3RzLmFwcGVu
ZChJbnRSZWN0KGFkZGl0aW9uYWxPZmZzZXQsIEludFNpemUodywgaGVpZ2h0KCkpKSk7CiB9CiAK
IHZvaWQgUmVuZGVyVGV4dENvbnRyb2xTaW5nbGVMaW5lOjpsYXlvdXQoKQpJbmRleDogU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRleHRDb250cm9sU2luZ2xlTGluZS5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxp
bmUuaAkocmV2aXNpb24gODcxODUpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
VGV4dENvbnRyb2xTaW5nbGVMaW5lLmgJKHdvcmtpbmcgY29weSkKQEAgLTc0LDcgKzc0LDcgQEAg
cHJpdmF0ZToKICAgICB2aXJ0dWFsIHZvaWQgc3VidHJlZUhhc0NoYW5nZWQoKTsKICAgICB2aXJ0
dWFsIHZvaWQgcGFpbnQoUGFpbnRJbmZvJiwgaW50IHR4LCBpbnQgdHkpOwogICAgIHZpcnR1YWwg
dm9pZCBwYWludEJveERlY29yYXRpb25zKFBhaW50SW5mbyYsIGludCB0eCwgaW50IHR5KTsKLSAg
ICB2aXJ0dWFsIHZvaWQgYWRkRm9jdXNSaW5nUmVjdHMoVmVjdG9yPEludFJlY3Q+JiwgaW50IHR4
LCBpbnQgdHkpOworICAgIHZpcnR1YWwgdm9pZCBhZGRGb2N1c1JpbmdSZWN0cyhWZWN0b3I8SW50
UmVjdD4mLCBjb25zdCBJbnRQb2ludCYpOwogICAgIHZpcnR1YWwgdm9pZCBsYXlvdXQoKTsKIAog
ICAgIHZpcnR1YWwgYm9vbCBub2RlQXRQb2ludChjb25zdCBIaXRUZXN0UmVxdWVzdCYsIEhpdFRl
c3RSZXN1bHQmLCBjb25zdCBJbnRQb2ludCYgcG9pbnRJbkNvbnRhaW5lciwgaW50IHR4LCBpbnQg
dHksIEhpdFRlc3RBY3Rpb24pOwpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9S
ZW5kZXJTVkdDb250YWluZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9zdmcvUmVuZGVyU1ZHQ29udGFpbmVyLmNwcAkocmV2aXNpb24gODcxODUpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR0NvbnRhaW5lci5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTEzOSw3ICsxMzksNyBAQCB2b2lkIFJlbmRlclNWR0NvbnRhaW5lcjo6cGFpbnQo
UGFpbnRJbmZvCiB9CiAKIC8vIGFkZEZvY3VzUmluZ1JlY3RzIGlzIGNhbGxlZCBmcm9tIHBhaW50
T3V0bGluZSBhbmQgbmVlZHMgdG8gYmUgaW4gdGhlIHNhbWUgY29vcmRpbmF0ZXMgYXMgdGhlIHBh
aW50T3VsaW5lIGNhbGwKLXZvaWQgUmVuZGVyU1ZHQ29udGFpbmVyOjphZGRGb2N1c1JpbmdSZWN0
cyhWZWN0b3I8SW50UmVjdD4mIHJlY3RzLCBpbnQsIGludCkKK3ZvaWQgUmVuZGVyU1ZHQ29udGFp
bmVyOjphZGRGb2N1c1JpbmdSZWN0cyhWZWN0b3I8SW50UmVjdD4mIHJlY3RzLCBjb25zdCBJbnRQ
b2ludCYpCiB7CiAgICAgSW50UmVjdCBwYWludFJlY3RJblBhcmVudCA9IGVuY2xvc2luZ0ludFJl
Y3QobG9jYWxUb1BhcmVudFRyYW5zZm9ybSgpLm1hcFJlY3QocmVwYWludFJlY3RJbkxvY2FsQ29v
cmRpbmF0ZXMoKSkpOwogICAgIGlmICghcGFpbnRSZWN0SW5QYXJlbnQuaXNFbXB0eSgpKQpJbmRl
eDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdDb250YWluZXIuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR0NvbnRhaW5l
ci5oCShyZXZpc2lvbiA4NzE4NSkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVu
ZGVyU1ZHQ29udGFpbmVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTUxLDcgKzUxLDcgQEAgcHJvdGVj
dGVkOgogCiAgICAgdmlydHVhbCB2b2lkIGxheW91dCgpOwogCi0gICAgdmlydHVhbCB2b2lkIGFk
ZEZvY3VzUmluZ1JlY3RzKFZlY3RvcjxJbnRSZWN0PiYsIGludCB0eCwgaW50IHR5KTsKKyAgICB2
aXJ0dWFsIHZvaWQgYWRkRm9jdXNSaW5nUmVjdHMoVmVjdG9yPEludFJlY3Q+JiwgY29uc3QgSW50
UG9pbnQmKTsKIAogICAgIHZpcnR1YWwgRmxvYXRSZWN0IG9iamVjdEJvdW5kaW5nQm94KCkgY29u
c3QgeyByZXR1cm4gbV9vYmplY3RCb3VuZGluZ0JveDsgfQogICAgIHZpcnR1YWwgRmxvYXRSZWN0
IHN0cm9rZUJvdW5kaW5nQm94KCkgY29uc3QgeyByZXR1cm4gbV9zdHJva2VCb3VuZGluZ0JveDsg
fQpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdJbWFnZS5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdJbWFn
ZS5jcHAJKHJldmlzaW9uIDg3MTg1KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9S
ZW5kZXJTVkdJbWFnZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE3OSw3ICsxNzksNyBAQCB2b2lk
IFJlbmRlclNWR0ltYWdlOjppbWFnZUNoYW5nZWQoV3JhcHBlCiAgICAgcmVwYWludCgpOwogfQog
Ci12b2lkIFJlbmRlclNWR0ltYWdlOjphZGRGb2N1c1JpbmdSZWN0cyhWZWN0b3I8SW50UmVjdD4m
IHJlY3RzLCBpbnQsIGludCkKK3ZvaWQgUmVuZGVyU1ZHSW1hZ2U6OmFkZEZvY3VzUmluZ1JlY3Rz
KFZlY3RvcjxJbnRSZWN0PiYgcmVjdHMsIGNvbnN0IEludFBvaW50JikKIHsKICAgICAvLyB0aGlz
IGlzIGNhbGxlZCBmcm9tIHBhaW50KCkgYWZ0ZXIgdGhlIGxvY2FsVHJhbnNmb3JtIGhhcyBhbHJl
YWR5IGJlZW4gYXBwbGllZAogICAgIEludFJlY3QgY29udGVudFJlY3QgPSBlbmNsb3NpbmdJbnRS
ZWN0KHJlcGFpbnRSZWN0SW5Mb2NhbENvb3JkaW5hdGVzKCkpOwpJbmRleDogU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdJbWFnZS5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9zdmcvUmVuZGVyU1ZHSW1hZ2UuaAkocmV2aXNpb24gODcxODUpCisr
KyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR0ltYWdlLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTU3LDcgKzU3LDcgQEAgcHJpdmF0ZToKICAgICB2aXJ0dWFsIEZsb2F0UmVjdCBz
dHJva2VCb3VuZGluZ0JveCgpIGNvbnN0IHsgcmV0dXJuIG1fb2JqZWN0Qm91bmRpbmdCb3g7IH0K
ICAgICB2aXJ0dWFsIEZsb2F0UmVjdCByZXBhaW50UmVjdEluTG9jYWxDb29yZGluYXRlcygpIGNv
bnN0IHsgcmV0dXJuIG1fcmVwYWludEJvdW5kaW5nQm94OyB9CiAKLSAgICB2aXJ0dWFsIHZvaWQg
YWRkRm9jdXNSaW5nUmVjdHMoVmVjdG9yPEludFJlY3Q+JiwgaW50IHR4LCBpbnQgdHkpOworICAg
IHZpcnR1YWwgdm9pZCBhZGRGb2N1c1JpbmdSZWN0cyhWZWN0b3I8SW50UmVjdD4mLCBjb25zdCBJ
bnRQb2ludCYpOwogCiAgICAgdmlydHVhbCB2b2lkIGltYWdlQ2hhbmdlZChXcmFwcGVkSW1hZ2VQ
dHIsIGNvbnN0IEludFJlY3QqID0gMCk7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9zdmcvUmVuZGVyU1ZHUGF0aC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL3N2Zy9SZW5kZXJTVkdQYXRoLmNwcAkocmV2aXNpb24gODcxODUpCisrKyBTb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1JlbmRlclNWR1BhdGguY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0yMzYsNyArMjM2LDcgQEAgdm9pZCBSZW5kZXJTVkdQYXRoOjpwYWludChQYWludEluZm8mIHBh
aQogCiAvLyBUaGlzIG1ldGhvZCBpcyBjYWxsZWQgZnJvbSBpbnNpZGUgcGFpbnRPdXRsaW5lKCkg
c2luY2Ugd2UgY2FsbCBwYWludE91dGxpbmUoKQogLy8gd2hpbGUgdHJhbnNmb3JtZWQgdG8gb3Vy
IGNvb3JkIHN5c3RlbSwgcmV0dXJuIGxvY2FsIGNvb3Jkcwotdm9pZCBSZW5kZXJTVkdQYXRoOjph
ZGRGb2N1c1JpbmdSZWN0cyhWZWN0b3I8SW50UmVjdD4mIHJlY3RzLCBpbnQsIGludCkgCit2b2lk
IFJlbmRlclNWR1BhdGg6OmFkZEZvY3VzUmluZ1JlY3RzKFZlY3RvcjxJbnRSZWN0PiYgcmVjdHMs
IGNvbnN0IEludFBvaW50JikgCiB7CiAgICAgSW50UmVjdCByZWN0ID0gZW5jbG9zaW5nSW50UmVj
dChyZXBhaW50UmVjdEluTG9jYWxDb29yZGluYXRlcygpKTsKICAgICBpZiAoIXJlY3QuaXNFbXB0
eSgpKQpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdQYXRoLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5kZXJTVkdQYXRo
LmgJKHJldmlzaW9uIDg3MTg1KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9SZW5k
ZXJTVkdQYXRoLmgJKHdvcmtpbmcgY29weSkKQEAgLTYxLDcgKzYxLDcgQEAgcHJpdmF0ZToKIAog
ICAgIHZpcnR1YWwgdm9pZCBsYXlvdXQoKTsKICAgICB2aXJ0dWFsIHZvaWQgcGFpbnQoUGFpbnRJ
bmZvJiwgaW50IHBhcmVudFgsIGludCBwYXJlbnRZKTsKLSAgICB2aXJ0dWFsIHZvaWQgYWRkRm9j
dXNSaW5nUmVjdHMoVmVjdG9yPEludFJlY3Q+JiwgaW50IHR4LCBpbnQgdHkpOworICAgIHZpcnR1
YWwgdm9pZCBhZGRGb2N1c1JpbmdSZWN0cyhWZWN0b3I8SW50UmVjdD4mLCBjb25zdCBJbnRQb2lu
dCYpOwogCiAgICAgdmlydHVhbCBib29sIG5vZGVBdEZsb2F0UG9pbnQoY29uc3QgSGl0VGVzdFJl
cXVlc3QmLCBIaXRUZXN0UmVzdWx0JiwgY29uc3QgRmxvYXRQb2ludCYgcG9pbnRJblBhcmVudCwg
SGl0VGVzdEFjdGlvbik7Cg==
</data>

          </attachment>
      

    </bug>

</bugzilla>