<?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>109156</bug_id>
          
          <creation_ts>2013-02-07 01:29:38 -0800</creation_ts>
          <short_desc>Factor Event retargeting code.</short_desc>
          <delta_ts>2013-02-14 21:57:26 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>UI Events</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>
          <dependson>109278</dependson>
    
    <dependson>109561</dependson>
    
    <dependson>109650</dependson>
          <blocked>107800</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Hayato Ito">hayato</reporter>
          <assigned_to name="Hayato Ito">hayato</assigned_to>
          <cc>dglazkov</cc>
    
    <cc>eric.carlson</cc>
    
    <cc>feature-media-reviews</cc>
    
    <cc>gyuyoung.kim</cc>
    
    <cc>ojan.autocc</cc>
    
    <cc>rakuco</cc>
    
    <cc>rniwa</cc>
    
    <cc>webcomponents-bugzilla</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>827174</commentid>
    <comment_count>0</comment_count>
    <who name="Hayato Ito">hayato</who>
    <bug_when>2013-02-07 01:29:38 -0800</bug_when>
    <thetext>To support Touch Event retargeting (bug 107800), we have to factor current code base which handles Event retargeting.

The current code base is tightly integrated with a MouseEvent. We have to factor it nicely so that we can support Touch Event retargeting.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>827211</commentid>
    <comment_count>1</comment_count>
      <attachid>187029</attachid>
    <who name="Hayato Ito">hayato</who>
    <bug_when>2013-02-07 02:38:24 -0800</bug_when>
    <thetext>Created attachment 187029
Factor event retargeting</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>827580</commentid>
    <comment_count>2</comment_count>
      <attachid>187029</attachid>
    <who name="Dimitri Glazkov (Google)">dglazkov</who>
    <bug_when>2013-02-07 08:55:22 -0800</bug_when>
    <thetext>Comment on attachment 187029
Factor event retargeting

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

I like the direction, but isn&apos;t this two patches in one?
1) introduces a (really nice abstraction of) MouseEventContext
2) splits retargeting off into two bits.
Also, EWS: Y SO PURPLE!?

&gt; Source/WebCore/ChangeLog:22
&gt; +        This patch make them separeted to make each intention clear.

separeted -&gt; separated</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>827663</commentid>
    <comment_count>3</comment_count>
      <attachid>187029</attachid>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2013-02-07 10:20:29 -0800</bug_when>
    <thetext>Comment on attachment 187029
Factor event retargeting

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

&gt; Source/WebCore/dom/EventContext.cpp:63
&gt; +MouseEventContext::MouseEventContext(PassRefPtr&lt;Node&gt; node, PassRefPtr&lt;EventTarget&gt; currentTarget, PassRefPtr&lt;EventTarget&gt; target)

And so on.

&gt; Source/WebCore/dom/EventContext.h:66
&gt; +    MouseEventContext(PassRefPtr&lt;Node&gt;, PassRefPtr&lt;EventTarget&gt; currentTarget, PassRefPtr&lt;EventTarget&gt; target);

These should not be PassRefPtrs, because ownership is not being passed.

&gt; Source/WebCore/dom/EventContext.h:116
&gt; +inline void MouseEventContext::setRelatedTarget(PassRefPtr&lt;EventTarget&gt; relatedTarget)

Ditto.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>828089</commentid>
    <comment_count>4</comment_count>
    <who name="Hayato Ito">hayato</who>
    <bug_when>2013-02-07 18:45:08 -0800</bug_when>
    <thetext>Thank you for the review.

(In reply to comment #2)
&gt; (From update of attachment 187029 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=187029&amp;action=review
&gt; 
&gt; I like the direction, but isn&apos;t this two patches in one?
&gt; 1) introduces a (really nice abstraction of) MouseEventContext
&gt; 2) splits retargeting off into two bits.

Okay. Let me separate this into some patches.

&gt; Also, EWS: Y SO PURPLE!?
&gt; 
&gt; &gt; Source/WebCore/ChangeLog:22
&gt; &gt; +        This patch make them separeted to make each intention clear.
&gt; 
&gt; separeted -&gt; separated

Let me fix it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>828091</commentid>
    <comment_count>5</comment_count>
    <who name="Hayato Ito">hayato</who>
    <bug_when>2013-02-07 18:46:24 -0800</bug_when>
    <thetext>(In reply to comment #3)
&gt; (From update of attachment 187029 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=187029&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/dom/EventContext.cpp:63
&gt; &gt; +MouseEventContext::MouseEventContext(PassRefPtr&lt;Node&gt; node, PassRefPtr&lt;EventTarget&gt; currentTarget, PassRefPtr&lt;EventTarget&gt; target)
&gt; 
&gt; And so on.
&gt; 
&gt; &gt; Source/WebCore/dom/EventContext.h:66
&gt; &gt; +    MouseEventContext(PassRefPtr&lt;Node&gt;, PassRefPtr&lt;EventTarget&gt; currentTarget, PassRefPtr&lt;EventTarget&gt; target);
&gt; 
&gt; These should not be PassRefPtrs, because ownership is not being passed.

Good point. But I think EventContext (and MouseEventContext) needs to have an ownership of a node.

If EventContext does not have an ownership, I am afraid that EventContext will have a pointer to a node which is freed if the node is deleted by an event listener on other EventContext.

I&apos;d like to hear an opinion from Dimitri, the original author of EventContext, I guess.


&gt; 
&gt; &gt; Source/WebCore/dom/EventContext.h:116
&gt; &gt; +inline void MouseEventContext::setRelatedTarget(PassRefPtr&lt;EventTarget&gt; relatedTarget)
&gt; 
&gt; Ditto.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>828129</commentid>
    <comment_count>6</comment_count>
    <who name="Dimitri Glazkov (Google)">dglazkov</who>
    <bug_when>2013-02-07 20:14:54 -0800</bug_when>
    <thetext>(In reply to comment #5)

&gt; I&apos;d like to hear an opinion from Dimitri, the original author of EventContext, I guess.

I would just do what Alexey suggests.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>828647</commentid>
    <comment_count>7</comment_count>
      <attachid>187029</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2013-02-08 09:54:30 -0800</bug_when>
    <thetext>Comment on attachment 187029
Factor event retargeting

I know that smaller pieces are supposed to be easier to understand, but the event code is getting harder and harder for me to understand since we made the mediator changes. Basic event dispatch is now a maze of classes with names I don’t understand, whereas it used to be a one-page function that easily fit on my computer screen. What can we do about this?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>830557</commentid>
    <comment_count>8</comment_count>
    <who name="Hayato Ito">hayato</who>
    <bug_when>2013-02-11 22:01:40 -0800</bug_when>
    <thetext>Thank you for the comment, Darin!

(In reply to comment #7)
&gt; (From update of attachment 187029 [details])
&gt; I know that smaller pieces are supposed to be easier to understand, but the event code is getting harder and harder for me to understand since we made the mediator changes. Basic event dispatch is now a maze of classes with names I don’t understand, whereas it used to be a one-page function that easily fit on my computer screen. What can we do about this?

I understand your concerns. Basic event dispatch should not be complex than necessary!
The most of complexity comes from Event retargeting.
Spec: https://dvcs.w3.org/hg/webcomponents/raw-file/tip/spec/shadow/index.html#events

I am afraid that the algorithm descriped in the spec is not easy to understand. I don&apos;t have a nice idea which makes the algorithm simpler.

So what we can do is to recover good old simple EventDispatcher.{h,cpp}. Factoring event disptch code might be helpful to separate concerns.

I don&apos;t like the current code of EventDispacher.cpp since it contains event retargeting code, which makes readers uncomfortable. One of the motivation of this patch is to make EventDispacher.{h,cpp} simple one , as described in http://dom.spec.whatwg.org/#dispatching-events.

Let me think further what we can do better.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>832799</commentid>
    <comment_count>9</comment_count>
      <attachid>188277</attachid>
    <who name="Hayato Ito">hayato</who>
    <bug_when>2013-02-14 00:45:28 -0800</bug_when>
    <thetext>Created attachment 188277
Rabased.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>832809</commentid>
    <comment_count>10</comment_count>
      <attachid>188277</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2013-02-14 01:04:22 -0800</bug_when>
    <thetext>Comment on attachment 188277
Rabased.

Attachment 188277 did not pass cr-linux-debug-ews (chromium-xvfb):
Output: http://queues.webkit.org/results/16514544</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>832900</commentid>
    <comment_count>11</comment_count>
      <attachid>188298</attachid>
    <who name="Hayato Ito">hayato</who>
    <bug_when>2013-02-14 03:24:52 -0800</bug_when>
    <thetext>Created attachment 188298
Fix a regression.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>833140</commentid>
    <comment_count>12</comment_count>
      <attachid>188298</attachid>
    <who name="Dimitri Glazkov (Google)">dglazkov</who>
    <bug_when>2013-02-14 09:21:44 -0800</bug_when>
    <thetext>Comment on attachment 188298
Fix a regression.

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

&gt; Source/WebCore/dom/FocusEvent.cpp:96
&gt; +    EventRetargeter::adjustForFocusEvent(dispatcher-&gt;node(), *event(), dispatcher-&gt;ensureEventPath(event()));

This is a bit awkward. The ensureEventPath calls EventRetargeter method, whose results are then passed back into another EventRetargeter method. Basically EventDispatcher is just a RAII wrapper for event path here.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>833645</commentid>
    <comment_count>13</comment_count>
      <attachid>188298</attachid>
    <who name="Hayato Ito">hayato</who>
    <bug_when>2013-02-14 20:12:56 -0800</bug_when>
    <thetext>Comment on attachment 188298
Fix a regression.

Thank you for the review.

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

&gt;&gt; Source/WebCore/dom/FocusEvent.cpp:96
&gt;&gt; +    EventRetargeter::adjustForFocusEvent(dispatcher-&gt;node(), *event(), dispatcher-&gt;ensureEventPath(event()));
&gt; 
&gt; This is a bit awkward. The ensureEventPath calls EventRetargeter method, whose results are then passed back into another EventRetargeter method. Basically EventDispatcher is just a RAII wrapper for event path here.

Agreed. Before working on constructing event path in EventDispatcher&apos;s constructor, I&apos;d like to check whether it&apos;s okay or not to do so.
Let me work on that in a following patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>833658</commentid>
    <comment_count>14</comment_count>
      <attachid>188298</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2013-02-14 20:40:21 -0800</bug_when>
    <thetext>Comment on attachment 188298
Fix a regression.

Clearing flags on attachment: 188298

Committed r142957: &lt;http://trac.webkit.org/changeset/142957&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>833659</commentid>
    <comment_count>15</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2013-02-14 20:40:28 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>833683</commentid>
    <comment_count>16</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2013-02-14 21:57:26 -0800</bug_when>
    <thetext>Windows build fix landed in http://trac.webkit.org/changeset/142959.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>187029</attachid>
            <date>2013-02-07 02:38:24 -0800</date>
            <delta_ts>2013-02-14 00:45:25 -0800</delta_ts>
            <desc>Factor event retargeting</desc>
            <filename>bug-109156-20130207193500.patch</filename>
            <type>text/plain</type>
            <size>45032</size>
            <attacher name="Hayato Ito">hayato</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTQxOTgwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZWY0ZmNjYjE3NTc5NjFl
NjYzNGJkNzUyM2M2ODA5MDFiMTYzNmI0NS4uMTA0MWE1NTE4ZmVmNTNjYjdkYmIxODk4ODUxMWEz
NmQ4YTk2YThlMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDkxIEBACisyMDEzLTAyLTA3ICBIYXlh
dG8gSXRvICA8aGF5YXRvQGNocm9taXVtLm9yZz4KKworICAgICAgICBGYWN0b3IgRXZlbnQgcmV0
YXJnZXRpbmcgY29kZS4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTEwOTE1NgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisg
ICAgICAgIFRvIHN1cG9vcnQgVG91Y2ggZXZlbnQgcmV0YXJnZXRpbmcgKGJ1ZyAxMDc4MDApLCB3
ZSBoYXZlIHRvIGZhY3RvcgorICAgICAgICBldmVudCByZXRhcmdldGluZyBjb2RlIHNvIHRoYXQg
aXQgY2FuIHN1cHBvcnQgbm90IG9ubHkgTW91c2VFdmVudCwKKyAgICAgICAgYnV0IGFsc28gb3Ro
ZXIgZXZlbnRzLgorCisgICAgICAgIE5ldyBjbGFzcywgRXZlbnRSZXRhcmdldGVyLCB3YXMgaW50
cm9kdWNlZC4gRnJvbSBub3csCisgICAgICAgIEV2ZW50RGlzcGF0Y2hNZWRpYXRvciAoYW5kIGl0
cyBzdWJjbGFzc2VzKSBzaG91bGQgY2FsbCwgaWYgZXZlbnQKKyAgICAgICAgcmV0YXJnZXRpbmcg
aXMgcmVxdWlyZWQsIGFuIGFwcHJvcHJpYXRlIGZ1bmN0aW9uIHByb3ZpZGVkIGluCisgICAgICAg
IEV2ZW50UmV0YXJnZXRlciByYXRoZXIgdGhhbiBjYWxsaW5nCisgICAgICAgIEV2ZW50RGlzcGF0
Y2hlcjo6YWRqdXN0UmVsYXRlZFRhcmdldCgpLCB3aGljaCB3YXMgcmVtb3ZlZCBpbiB0aGlzCisg
ICAgICAgIHBhdGNoLgorCisgICAgICAgIEluIGFkZHRpb24gdG8gdGhhdCwgY3VycmVudCBGb2N1
cy9CbHVyIGV2ZW50IHJldGFyZ2V0aW5nIGNvZGUgaXMKKyAgICAgICAgbWlzbGVhZGluZyBzaW5j
ZSBpdCBzaGFyZXMgY29kZSBwYXRoIHdpdGggTW91c2VFdmVudAorICAgICAgICByZXRhcmdldGlu
Zy4gU29tZSBvZiB0aGVtIGFyZSB1bm5lY2Vzc2FyeSBmb3IgRm9jdXMvQmx1ciBldmVudHMuCisg
ICAgICAgIFRoaXMgcGF0Y2ggbWFrZSB0aGVtIHNlcGFyZXRlZCB0byBtYWtlIGVhY2ggaW50ZW50
aW9uIGNsZWFyLgorCisgICAgICAgIEluIGZvbGxvd2luZyBwYXRjaGVzLCBJJ2xsIGludHJvZHVj
ZSBUb3VjaEV2ZW50Q29udGV4dCBhbmQKKyAgICAgICAgVG91Y2hFdmVudERpc3BhdGNoTWVkaWF0
b3IgdG8gc3VwcG9ydCBUb3VjaCBldmVudCByZXRhcmdldGluZy4KKworICAgICAgICBObyBuZXcg
dGVzdHMgKE9PUFMhKS4KKworICAgICAgICAqIENNYWtlTGlzdHMudHh0OgorICAgICAgICAqIEdO
VW1ha2VmaWxlLmxpc3QuYW06CisgICAgICAgICogVGFyZ2V0LnByaToKKyAgICAgICAgKiBXZWJD
b3JlLmd5cGk6CisgICAgICAgICogV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgor
ICAgICAgICAqIGRvbS9FdmVudENvbnRleHQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RXZlbnRD
b250ZXh0OjpFdmVudENvbnRleHQpOiBGYWN0b3IgcmVsYXRlZFRhcmdldCBvdXQgZnJvbSBFdmVu
dENvbnRleHQgaW50byBNb3VzZUV2ZW50Q29udGV4dC4KKyAgICAgICAgKFdlYkNvcmU6OkV2ZW50
Q29udGV4dDo6fkV2ZW50Q29udGV4dCk6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdl
YkNvcmU6OkV2ZW50Q29udGV4dDo6aGFuZGxlTG9jYWxFdmVudHMpOgorICAgICAgICAoV2ViQ29y
ZTo6RXZlbnRDb250ZXh0Ojppc01vdXNlRXZlbnRDb250ZXh0KToKKyAgICAgICAgKFdlYkNvcmU6
Ok1vdXNlRXZlbnRDb250ZXh0OjpNb3VzZUV2ZW50Q29udGV4dCk6IE5ldy4gSGFuZGxlcyBNb3Vz
ZUV2ZW50J3MgcmVsYXRlZFRhcmdldCByZXRhcmdldGluZy4KKyAgICAgICAgKFdlYkNvcmU6Ok1v
dXNlRXZlbnRDb250ZXh0Ojp+TW91c2VFdmVudENvbnRleHQpOgorICAgICAgICAoV2ViQ29yZTo6
TW91c2VFdmVudENvbnRleHQ6OmhhbmRsZUxvY2FsRXZlbnRzKToKKyAgICAgICAgKFdlYkNvcmU6
Ok1vdXNlRXZlbnRDb250ZXh0Ojppc01vdXNlRXZlbnRDb250ZXh0KToKKyAgICAgICAgKiBkb20v
RXZlbnRDb250ZXh0Lmg6CisgICAgICAgIChFdmVudENvbnRleHQpOgorICAgICAgICAoV2ViQ29y
ZSk6CisgICAgICAgIChNb3VzZUV2ZW50Q29udGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpNb3Vz
ZUV2ZW50Q29udGV4dDo6cmVsYXRlZFRhcmdldCk6CisgICAgICAgIChXZWJDb3JlOjpNb3VzZUV2
ZW50Q29udGV4dDo6c2V0UmVsYXRlZFRhcmdldCk6CisgICAgICAgICogZG9tL0V2ZW50RGlzcGF0
Y2hNZWRpYXRvci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGb2N1c0V2ZW50RGlzcGF0Y2hNZWRp
YXRvcjo6ZGlzcGF0Y2hFdmVudCk6IFVwZGF0ZWQgc28gdGhhdCBpdCBjYWxscyBFdmVudFJldGFy
Z2V0ZXI6OmFkanVzdEZvckZvY3VzRXZlbnQoKS4KKyAgICAgICAgKFdlYkNvcmU6OkJsdXJFdmVu
dERpc3BhdGNoTWVkaWF0b3I6OmRpc3BhdGNoRXZlbnQpOiBVcGRhdGVkIHNvIHRoYXQgaXQgY2Fs
bHMgRXZlbnRSZXRhcmdldGVyOjphZGp1c3RGb3JCbHVlRXZlbnQoKS4KKyAgICAgICAgKiBkb20v
RXZlbnREaXNwYXRjaGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29y
ZTo6RXZlbnREaXNwYXRjaGVyOjplbnN1cmVFdmVudENvbnRleHRBbmNlc3RvcnMpOiBDaGFuZ2Vk
IHRvIHJldHVybiBhbmNlc3RvcnMsIHdoaWNoIHdpbGwgYmUgdXNlZCBieSBFdmVudFJldGFyZ2V0
ZXIuCisgICAgICAgIChXZWJDb3JlOjpFdmVudERpc3BhdGNoZXI6OmRpc3BhdGNoRXZlbnQpOgor
ICAgICAgICAoV2ViQ29yZTo6RXZlbnREaXNwYXRjaGVyOjpkaXNwYXRjaEV2ZW50QXRDYXB0dXJp
bmcpOgorICAgICAgICAoV2ViQ29yZTo6RXZlbnREaXNwYXRjaGVyOjpkaXNwYXRjaEV2ZW50QXRU
YXJnZXQpOgorICAgICAgICAoV2ViQ29yZTo6RXZlbnREaXNwYXRjaGVyOjpkaXNwYXRjaEV2ZW50
QXRCdWJibGluZyk6CisgICAgICAgIChXZWJDb3JlOjpFdmVudERpc3BhdGNoZXI6OmRpc3BhdGNo
RXZlbnRQb3N0UHJvY2Vzcyk6CisgICAgICAgIChXZWJDb3JlOjpFdmVudERpc3BhdGNoZXI6OnRv
cEV2ZW50Q29udGV4dCk6CisgICAgICAgICogZG9tL0V2ZW50RGlzcGF0Y2hlci5oOgorICAgICAg
ICAoRXZlbnREaXNwYXRjaGVyKToKKyAgICAgICAgKiBkb20vRXZlbnRSZXRhcmdldGVyLmNwcDog
QWRkZWQuCisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6OkV2ZW50UmV0YXJn
ZXRlcjo6YnVpbGRSZWxhdGVkTm9kZU1hcCk6IEZhY3RvcmVkIG91dCBmcm9tIEV2ZW50UmVsYXRl
ZFRhcmdldEFqdXN0ZXI6OmFkanVzdFJlbGF0ZWRUYXJnZXQoKS4KKyAgICAgICAgKFdlYkNvcmU6
OkV2ZW50UmV0YXJnZXRlcjo6YWRqdXN0Rm9yRm9jdXNFdmVudCk6IE9uZSBvZiBmdW5jdGlvbnMg
d2hpY2ggRXZlbnREaXNwYXRjaE1lZGlhdG9yIHNob3VsZCBjYWxsIGRpcmVjdGx5IHJhdGhlciB0
aGFuIEV2ZW50RGlzcHRjaGVyOjphZGp1c3RSZWxhdGVkVGFyZ2V0KCkuCisgICAgICAgIChXZWJD
b3JlOjpFdmVudFJldGFyZ2V0ZXI6OmFkanVzdEZvckJsdXJFdmVudCk6IERpdHRvLgorICAgICAg
ICAoV2ViQ29yZTo6RXZlbnRSZXRhcmdldGVyOjphZGp1c3RGb3JNb3VzZUV2ZW50KTogRGl0dG8u
CisgICAgICAgIChXZWJDb3JlOjpFdmVudFJldGFyZ2V0ZXI6OmFkanVzdEZvckZvY3VzUmVsYXRl
ZEV2ZW50KTogSW50ZXJuYWxseSB1c2VkIHRvIHN1cHBvcnQgZm9jdXMvYmx1ZSBldmVudHMuCisg
ICAgICAgIChXZWJDb3JlOjpFdmVudFJldGFyZ2V0ZXI6OmNhbGN1bGF0ZUFkanVzdGVkTm9kZXMp
OiBGYWN0b3JlZCBvdXQgZnJvbSBFdmVudFJlbGF0ZWRUYXJnZXRBanVzdGVyOjphZGp1c3RSZWxh
dGVkVGFyZ2V0KCkuCisgICAgICAgIChXZWJDb3JlOjpFdmVudFJldGFyZ2V0ZXI6OmZpbmRSZWxh
dGVkTm9kZSk6CisgICAgICAgICogZG9tL0V2ZW50UmV0YXJnZXRlci5oOiBBZGRlZC4KKyAgICAg
ICAgKFdlYkNvcmUpOgorICAgICAgICAoRXZlbnRSZXRhcmdldGVyKToKKyAgICAgICAgKiBkb20v
TW91c2VFdmVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpNb3VzZUV2ZW50RGlzcGF0Y2hNZWRp
YXRvcjo6ZGlzcGF0Y2hFdmVudCk6CisgICAgICAgICogZG9tL1VJRXZlbnQuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6Rm9jdXNJbkV2ZW50RGlzcGF0Y2hNZWRpYXRvcjo6ZGlzcGF0Y2hFdmVudCk6
IFVwZGF0ZWQgc28gdGhhdCBpdCBjYWxscyBFdmVudFJldGFyZ2V0ZXI6OmFkanVzdEZvckZvY3Vz
RXZlbnQoKS4KKyAgICAgICAgKFdlYkNvcmU6OkZvY3VzT3V0RXZlbnREaXNwYXRjaE1lZGlhdG9y
OjpkaXNwYXRjaEV2ZW50KTogVXBkYXRlZCBzbyB0aGF0IGl0IGNhbGxzIEV2ZW50UmV0YXJnZXRl
cjo6YWRqdXN0Rm9yRm9jdXNFdmVudCgpLgorICAgICAgICAqIGluc3BlY3Rvci9JbnNwZWN0b3JJ
bnN0cnVtZW50YXRpb24uY3BwOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJDb3Jl
OjpldmVudEhhc0xpc3RlbmVycyk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JJbnN0cnVt
ZW50YXRpb246OndpbGxEaXNwYXRjaEV2ZW50SW1wbCk6CisgICAgICAgICogaW5zcGVjdG9yL0lu
c3BlY3Rvckluc3RydW1lbnRhdGlvbi5oOgorICAgICAgICAoSW5zcGVjdG9ySW5zdHJ1bWVudGF0
aW9uKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6d2lsbERp
c3BhdGNoRXZlbnQpOgorCiAyMDEzLTAyLTA2ICBQYXZlbCBGZWxkbWFuICA8cGZlbGRtYW5AY2hy
b21pdW0ub3JnPgogCiAgICAgICAgIFdlYiBJbnNwZWN0b3I6IGZpbGUgc2VsZWN0b3IgbGlzdCBq
dW1wcyBhcyBJIHR5cGUgb3IgbW92ZSBVcC9Eb3duCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9DTWFrZUxpc3RzLnR4dCBiL1NvdXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0CmluZGV4IGVj
Mjg2YmJkZDJhMWEyZGVlNWI5YWNlNDE0OTY0ODM0YWZlMGUxZjQuLjE0YmRlNDZhY2JjYTQ2N2Y1
YWJkODI1MjkzNDI4NTU2MDdjM2E0YzQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL0NNYWtl
TGlzdHMudHh0CisrKyBiL1NvdXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0CkBAIC0xMTc5LDYg
KzExNzksNyBAQCBzZXQoV2ViQ29yZV9TT1VSQ0VTCiAgICAgZG9tL0V2ZW50RXhjZXB0aW9uLmNw
cAogICAgIGRvbS9FdmVudExpc3RlbmVyTWFwLmNwcAogICAgIGRvbS9FdmVudE5hbWVzLmNwcAor
ICAgIGRvbS9FdmVudFJldGFyZ2V0ZXIuY3BwCiAgICAgZG9tL0V2ZW50VGFyZ2V0LmNwcAogICAg
IGRvbS9FeGNlcHRpb25CYXNlLmNwcAogICAgIGRvbS9FeGNlcHRpb25Db2RlUGxhY2Vob2xkZXIu
Y3BwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9HTlVtYWtlZmlsZS5saXN0LmFtIGIvU291
cmNlL1dlYkNvcmUvR05VbWFrZWZpbGUubGlzdC5hbQppbmRleCBhYWU1YzNiOGVlYTFlODQ0ZDlh
YTM0NDhhYzNiOWQ3MzkwOTUwZGEyLi5iNTM3Yzk1Zjk4ZDlkZmQ1ZjhjNTM2ODVhMTM5NTc0MmY3
MzU2ZjkzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9HTlVtYWtlZmlsZS5saXN0LmFtCisr
KyBiL1NvdXJjZS9XZWJDb3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0KQEAgLTI4NDYsNiArMjg0Niw3
IEBAIHdlYmNvcmVfc291cmNlcyArPSBcCiAJU291cmNlL1dlYkNvcmUvZG9tL0V2ZW50TGlzdGVu
ZXJNYXAuaCBcCiAJU291cmNlL1dlYkNvcmUvZG9tL0V2ZW50TmFtZXMuY3BwIFwKIAlTb3VyY2Uv
V2ViQ29yZS9kb20vRXZlbnROYW1lcy5oIFwKKwlTb3VyY2UvV2ViQ29yZS9kb20vRXZlbnRSZXRh
cmdldGVyLmNwcCBcCiAJU291cmNlL1dlYkNvcmUvZG9tL0V2ZW50VGFyZ2V0LmNwcCBcCiAJU291
cmNlL1dlYkNvcmUvZG9tL0V2ZW50VGFyZ2V0LmggXAogCVNvdXJjZS9XZWJDb3JlL2RvbS9FdmVu
dFF1ZXVlLmggXApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvVGFyZ2V0LnByaSBiL1NvdXJj
ZS9XZWJDb3JlL1RhcmdldC5wcmkKaW5kZXggNTI5M2NhZDU0Y2IxZmNhZTY4ZWRhYzliYWNkMWVk
NTk2MGIxNzBlMS4uZDgzMzEzMmM3NmY1YzRiMjA2YTA4MWViNmVlNTljYWYxOGRhNmM3ZiAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvVGFyZ2V0LnByaQorKysgYi9Tb3VyY2UvV2ViQ29yZS9U
YXJnZXQucHJpCkBAIC00MTEsNiArNDExLDcgQEAgU09VUkNFUyArPSBcCiAgICAgZG9tL0V2ZW50
RXhjZXB0aW9uLmNwcCBcCiAgICAgZG9tL0V2ZW50TGlzdGVuZXJNYXAuY3BwIFwKICAgICBkb20v
RXZlbnROYW1lcy5jcHAgXAorICAgIGRvbS9FdmVudFJldGFyZ2V0ZXIuY3BwIFwKICAgICBkb20v
RXZlbnRUYXJnZXQuY3BwIFwKICAgICBkb20vRXhjZXB0aW9uQmFzZS5jcHAgXAogICAgIGRvbS9F
eGNlcHRpb25Db2RlUGxhY2Vob2xkZXIuY3BwIFwKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L1dlYkNvcmUuZ3lwaSBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQppbmRleCA1NjMzOTBl
ZTRmMDQzNDFjYzMwYjE5MzQ5YTA2NGY0NDcwMDgzM2YwLi5hNTg1MWI5NzM3MWE1ZWNiYmViMTZj
MWZmODkxYjQ2MmM3MjdlNTQzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5
cGkKKysrIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpCkBAIC0yODMxLDYgKzI4MzEsOCBA
QAogICAgICAgICAgICAgJ2RvbS9FdmVudERpc3BhdGNoTWVkaWF0b3IuaCcsCiAgICAgICAgICAg
ICAnZG9tL0V2ZW50RGlzcGF0Y2hlci5jcHAnLAogICAgICAgICAgICAgJ2RvbS9FdmVudERpc3Bh
dGNoZXIuaCcsCisgICAgICAgICAgICAnZG9tL0V2ZW50UmV0YXJnZXRlci5jcHAnLAorICAgICAg
ICAgICAgJ2RvbS9FdmVudFJldGFyZ2V0ZXIuaCcsCiAgICAgICAgICAgICAnZG9tL0V2ZW50RXhj
ZXB0aW9uLmNwcCcsCiAgICAgICAgICAgICAnZG9tL0V2ZW50RXhjZXB0aW9uLmgnLAogICAgICAg
ICAgICAgJ2RvbS9FdmVudExpc3RlbmVyTWFwLmNwcCcsCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2ogYi9Tb3VyY2UvV2ViQ29yZS9X
ZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKaW5kZXggYzJhZmVmZGUxNTk1OTVhZDVl
YzdhMzkzMDNhMWZlYTBlYzY5YjlmNy4uNDFmYjUxNmJjMDI2YWI4M2JiOTFiNjZmZjUxMDkyZDgz
MDZlMTgxYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qCisrKyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2pl
Y3QucGJ4cHJvagpAQCAtMTQzOSw2ICsxNDM5LDggQEAKIAkJNEEzOEJGNTExNEZFMUMwOTAwNjEy
NTEyIC8qIFdlYlNvY2tldERlZmxhdGVGcmFtZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDRBMzhCRjRGMTRGRTFDMDkwMDYxMjUxMiAvKiBXZWJTb2Nr
ZXREZWZsYXRlRnJhbWVyLmggKi87IH07CiAJCTRBNUEyQURCMTYxRTdFMDAwMDU4ODlERCAvKiBX
ZWJTb2NrZXRFeHRlbnNpb25QYXJzZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gNEE1QTJBRDkxNjFFN0UwMDAwNTg4OUREIC8qIFdlYlNvY2tldEV4
dGVuc2lvblBhcnNlci5jcHAgKi87IH07CiAJCTRBNUEyQURDMTYxRTdFMDAwMDU4ODlERCAvKiBX
ZWJTb2NrZXRFeHRlbnNpb25QYXJzZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDRBNUEyQURBMTYxRTdFMDAwMDU4ODlERCAvKiBXZWJTb2NrZXRFeHRl
bnNpb25QYXJzZXIuaCAqLzsgfTsKKwkJNEE1Q0IxQzUxNkMzQTVGRDAwQUIyODg2IC8qIEV2ZW50
UmV0YXJnZXRlci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSA0QTVDQjFDMzE2QzNBNUZEMDBBQjI4ODYgLyogRXZlbnRSZXRhcmdldGVyLmNwcCAqLzsg
fTsKKwkJNEE1Q0IxQzYxNkMzQTVGRDAwQUIyODg2IC8qIEV2ZW50UmV0YXJnZXRlci5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNEE1Q0IxQzQxNkMzQTVG
RDAwQUIyODg2IC8qIEV2ZW50UmV0YXJnZXRlci5oICovOyB9OwogCQk0QTZBMEM1QjE1MjMyRjI0
MDBCMDlDNkUgLyogQ29tcG9zZWRTaGFkb3dUcmVlV2Fsa2VyLmNwcCBpbiBTb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDRBNkEwQzU5MTUyMzJGMjQwMEIwOUM2RSAv
KiBDb21wb3NlZFNoYWRvd1RyZWVXYWxrZXIuY3BwICovOyB9OwogCQk0QTZBMEM1QzE1MjMyRjI0
MDBCMDlDNkUgLyogQ29tcG9zZWRTaGFkb3dUcmVlV2Fsa2VyLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0QTZBMEM1QTE1MjMyRjI0MDBCMDlDNkUgLyog
Q29tcG9zZWRTaGFkb3dUcmVlV2Fsa2VyLmggKi87IH07CiAJCTRBNkU5RkMzMTNDMTdEMUQwMDQ2
QTdGOCAvKiBGb250RmVhdHVyZVZhbHVlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDRBNkU5RkMxMTNDMTdEMUQwMDQ2QTdGOCAvKiBGb250RmVhdHVy
ZVZhbHVlLmNwcCAqLzsgfTsKQEAgLTg4MTksNiArODgyMSw4IEBACiAJCTRBMzhCRjRGMTRGRTFD
MDkwMDYxMjUxMiAvKiBXZWJTb2NrZXREZWZsYXRlRnJhbWVyLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgbmFtZSA9IFdlYlNvY2tldERlZmxhdGVGcmFtZXIuaDsgcGF0aCA9IE1vZHVsZXMv
d2Vic29ja2V0cy9XZWJTb2NrZXREZWZsYXRlRnJhbWVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCTRBNUEyQUQ5MTYxRTdFMDAwMDU4ODlERCAvKiBXZWJTb2NrZXRFeHRlbnNpb25Q
YXJzZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gV2ViU29ja2V0
RXh0ZW5zaW9uUGFyc2VyLmNwcDsgcGF0aCA9IE1vZHVsZXMvd2Vic29ja2V0cy9XZWJTb2NrZXRF
eHRlbnNpb25QYXJzZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk0QTVBMkFE
QTE2MUU3RTAwMDA1ODg5REQgLyogV2ViU29ja2V0RXh0ZW5zaW9uUGFyc2VyLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IFdlYlNvY2tldEV4dGVuc2lvblBhcnNlci5oOyBwYXRo
ID0gTW9kdWxlcy93ZWJzb2NrZXRzL1dlYlNvY2tldEV4dGVuc2lvblBhcnNlci5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OworCQk0QTVDQjFDMzE2QzNBNUZEMDBBQjI4ODYgLyogRXZlbnRS
ZXRhcmdldGVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEV2ZW50
UmV0YXJnZXRlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTRBNUNCMUM0MTZD
M0E1RkQwMEFCMjg4NiAvKiBFdmVudFJldGFyZ2V0ZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gRXZlbnRSZXRhcmdldGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCTRBNkEwQzU5MTUyMzJGMjQwMEIwOUM2RSAvKiBDb21wb3NlZFNoYWRvd1RyZWVXYWxrZXIu
Y3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQ29tcG9zZWRTaGFkb3dU
cmVlV2Fsa2VyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNEE2QTBDNUExNTIz
MkYyNDAwQjA5QzZFIC8qIENvbXBvc2VkU2hhZG93VHJlZVdhbGtlci5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBDb21wb3NlZFNoYWRvd1RyZWVXYWxrZXIuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNEE2RTlGQzExM0MxN0QxRDAwNDZBN0Y4IC8qIEZvbnRGZWF0
dXJlVmFsdWUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRm9udEZl
YXR1cmVWYWx1ZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0yMjM5NSw2ICsy
MjM5OSw4IEBACiAJCQkJOTM5ODg1QzIwOEI3RTNEMTAwRTcwN0M0IC8qIEV2ZW50TmFtZXMuaCAq
LywKIAkJCQlCQzlBNjE0MjE0Njg1OUQ5MDA2MDU3RkQgLyogRXZlbnROYW1lcy5pbiAqLywKIAkJ
CQk4RjY3NTYxOTEyODhCMTdCMDA0N0FDQTMgLyogRXZlbnRRdWV1ZS5oICovLAorCQkJCTRBNUNC
MUMzMTZDM0E1RkQwMEFCMjg4NiAvKiBFdmVudFJldGFyZ2V0ZXIuY3BwICovLAorCQkJCTRBNUNC
MUM0MTZDM0E1RkQwMEFCMjg4NiAvKiBFdmVudFJldGFyZ2V0ZXIuaCAqLywKIAkJCQlDRTVDQjFC
MzE0RURBQjZGMDBCQjI3OTUgLyogRXZlbnRTZW5kZXIuaCAqLywKIAkJCQlFMTJFREJFOTBCMzA4
RTBCMDAyNzA0QjYgLyogRXZlbnRUYXJnZXQuY3BwICovLAogCQkJCUUxMkVEQjdBMEIzMDhBNzgw
MDI3MDRCNiAvKiBFdmVudFRhcmdldC5oICovLApAQCAtMjQxMTMsNiArMjQxMTksNyBAQAogCQkJ
CTkzOTg4NUM0MDhCN0UzRDEwMEU3MDdDNCAvKiBFdmVudE5hbWVzLmggaW4gSGVhZGVycyAqLywK
IAkJCQk4RjY3NTYxQjEyODhCMTdCMDA0N0FDQTMgLyogRXZlbnRRdWV1ZS5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJRTBGRUYzNzJCMTdDNTNFQUMxQzFGQkVFIC8qIEV2ZW50U291cmNlLmggaW4gSGVh
ZGVycyAqLywKKwkJCQk0QTVDQjFDNjE2QzNBNUZEMDBBQjI4ODYgLyogRXZlbnRSZXRhcmdldGVy
LmggaW4gSGVhZGVycyAqLywKIAkJCQlFMTJFREI3QjBCMzA4QTc4MDAyNzA0QjYgLyogRXZlbnRU
YXJnZXQuaCBpbiBIZWFkZXJzICovLAogCQkJCTk3QUEzQ0E1MTQ1MjM3Q0MwMDNFMURBNiAvKiBF
dmVudFRhcmdldEhlYWRlcnMuaCBpbiBIZWFkZXJzICovLAogCQkJCTk3QUEzQ0E2MTQ1MjM3Q0Mw
MDNFMURBNiAvKiBFdmVudFRhcmdldEludGVyZmFjZXMuaCBpbiBIZWFkZXJzICovLApAQCAtMjc0
MzYsNiArMjc0NDMsNyBAQAogCQkJCTFDQTE5RTA1MERDMjU1OTUwMDY1QTk5NCAvKiBFdmVudExv
b3BNYWMubW0gaW4gU291cmNlcyAqLywKIAkJCQk5Mzk4ODVDMzA4QjdFM0QxMDBFNzA3QzQgLyog
RXZlbnROYW1lcy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlFMEZFRjM3MkIyN0M1M0VBQzFDMUZC
RUUgLyogRXZlbnRTb3VyY2UuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJNEE1Q0IxQzUxNkMzQTVG
RDAwQUIyODg2IC8qIEV2ZW50UmV0YXJnZXRlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlFMTJF
REJFQTBCMzA4RTBCMDAyNzA0QjYgLyogRXZlbnRUYXJnZXQuY3BwIGluIFNvdXJjZXMgKi8sCiAJ
CQkJRDZGREFFRjMxNDlDMDYxOTAwMzdCMUU0IC8qIEV2ZW50VHJhY2VyLmNwcCBpbiBTb3VyY2Vz
ICovLAogCQkJCUJDNjBEOEYyMEQyQTExRTAwMEI5OTE4RiAvKiBFeGNlcHRpb25CYXNlLmNwcCBp
biBTb3VyY2VzICovLApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL0V2ZW50Q29udGV4
dC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9kb20vRXZlbnRDb250ZXh0LmNwcAppbmRleCA4ODdmNjgz
YjI2YmY5MzFkZTgwMDQ3NzdhYzQ0NWI3MWFlMDRkZTNjLi4zNTUwYjRiYmFkM2FhYWFhNTExMGQ3
OTU0ZmMwNDExYTViYTY1YTk0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vRXZlbnRD
b250ZXh0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vRXZlbnRDb250ZXh0LmNwcApAQCAt
MzksMTkgKzM5LDQ4IEBAIEV2ZW50Q29udGV4dDo6RXZlbnRDb250ZXh0KFBhc3NSZWZQdHI8Tm9k
ZT4gbm9kZSwgUGFzc1JlZlB0cjxFdmVudFRhcmdldD4gY3VycmVuCiAgICAgOiBtX25vZGUobm9k
ZSkKICAgICAsIG1fY3VycmVudFRhcmdldChjdXJyZW50VGFyZ2V0KQogICAgICwgbV90YXJnZXQo
dGFyZ2V0KQotICAgICwgbV9yZWxhdGVkVGFyZ2V0KDApCiB7CiAgICAgQVNTRVJUKG1fbm9kZSk7
CiAgICAgQVNTRVJUKCFpc1VucmVhY2hhYmxlTm9kZShtX3RhcmdldC5nZXQoKSkpOwogfQogCitF
dmVudENvbnRleHQ6On5FdmVudENvbnRleHQoKQoreworfQorCiB2b2lkIEV2ZW50Q29udGV4dDo6
aGFuZGxlTG9jYWxFdmVudHMoRXZlbnQqIGV2ZW50KSBjb25zdAogewogICAgIGV2ZW50LT5zZXRU
YXJnZXQobV90YXJnZXQuZ2V0KCkpOwogICAgIGV2ZW50LT5zZXRDdXJyZW50VGFyZ2V0KG1fY3Vy
cmVudFRhcmdldC5nZXQoKSk7Ci0gICAgaWYgKG1fcmVsYXRlZFRhcmdldC5nZXQoKSAmJiBldmVu
dC0+aXNNb3VzZUV2ZW50KCkpCi0gICAgICAgIHRvTW91c2VFdmVudChldmVudCktPnNldFJlbGF0
ZWRUYXJnZXQobV9yZWxhdGVkVGFyZ2V0LmdldCgpKTsKICAgICBtX25vZGUtPmhhbmRsZUxvY2Fs
RXZlbnRzKGV2ZW50KTsKIH0KIAorYm9vbCBFdmVudENvbnRleHQ6OmlzTW91c2VFdmVudENvbnRl
eHQoKSBjb25zdAoreworICAgIHJldHVybiBmYWxzZTsKK30KKworTW91c2VFdmVudENvbnRleHQ6
Ok1vdXNlRXZlbnRDb250ZXh0KFBhc3NSZWZQdHI8Tm9kZT4gbm9kZSwgUGFzc1JlZlB0cjxFdmVu
dFRhcmdldD4gY3VycmVudFRhcmdldCwgUGFzc1JlZlB0cjxFdmVudFRhcmdldD4gdGFyZ2V0KQor
ICAgIDogRXZlbnRDb250ZXh0KG5vZGUsIGN1cnJlbnRUYXJnZXQsIHRhcmdldCkKKyAgICAsIG1f
cmVsYXRlZFRhcmdldCgwKQoreworfQorCitNb3VzZUV2ZW50Q29udGV4dDo6fk1vdXNlRXZlbnRD
b250ZXh0KCkKK3sKK30KKwordm9pZCBNb3VzZUV2ZW50Q29udGV4dDo6aGFuZGxlTG9jYWxFdmVu
dHMoRXZlbnQqIGV2ZW50KSBjb25zdAoreworICAgIEFTU0VSVChldmVudC0+aXNNb3VzZUV2ZW50
KCkpOworICAgIGlmIChtX3JlbGF0ZWRUYXJnZXQuZ2V0KCkpCisgICAgICAgIHRvTW91c2VFdmVu
dChldmVudCktPnNldFJlbGF0ZWRUYXJnZXQobV9yZWxhdGVkVGFyZ2V0LmdldCgpKTsKKyAgICBF
dmVudENvbnRleHQ6OmhhbmRsZUxvY2FsRXZlbnRzKGV2ZW50KTsKK30KKworYm9vbCBNb3VzZUV2
ZW50Q29udGV4dDo6aXNNb3VzZUV2ZW50Q29udGV4dCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIHRy
dWU7Cit9CisKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9FdmVudENvbnRleHQu
aCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9FdmVudENvbnRleHQuaAppbmRleCA3OGUzNWMwNDcyZGRk
ZDkxOTZiZDQyN2MzODE4ZDdhZjQxN2ZmOWIyLi5jYWVjMGU5ZGU1NDJjYWM1NmMwYTkwMDVmNjRk
ZjA4MjNiODdiZjc1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vRXZlbnRDb250ZXh0
LmgKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL0V2ZW50Q29udGV4dC5oCkBAIC00MCwxNSArNDAs
MTYgQEAgY2xhc3MgRXZlbnRDb250ZXh0IHsKIHB1YmxpYzoKICAgICAvLyBGSVhNRTogVXNlIENv
bnRhaW5lck5vZGUgaW5zdGVhZCBvZiBOb2RlLgogICAgIEV2ZW50Q29udGV4dChQYXNzUmVmUHRy
PE5vZGU+LCBQYXNzUmVmUHRyPEV2ZW50VGFyZ2V0PiBjdXJyZW50VGFyZ2V0LCBQYXNzUmVmUHRy
PEV2ZW50VGFyZ2V0PiB0YXJnZXQpOworICAgIHZpcnR1YWwgfkV2ZW50Q29udGV4dCgpOwogCiAg
ICAgTm9kZSogbm9kZSgpIGNvbnN0OwogICAgIEV2ZW50VGFyZ2V0KiB0YXJnZXQoKSBjb25zdDsK
ICAgICBFdmVudFRhcmdldCogcmVsYXRlZFRhcmdldCgpIGNvbnN0OwogICAgIGJvb2wgY3VycmVu
dFRhcmdldFNhbWVBc1RhcmdldCgpIGNvbnN0OwotICAgIHZvaWQgaGFuZGxlTG9jYWxFdmVudHMo
RXZlbnQqKSBjb25zdDsKLSAgICB2b2lkIHNldFJlbGF0ZWRUYXJnZXQoUGFzc1JlZlB0cjxFdmVu
dFRhcmdldD4pOworICAgIHZpcnR1YWwgdm9pZCBoYW5kbGVMb2NhbEV2ZW50cyhFdmVudCopIGNv
bnN0OworICAgIHZpcnR1YWwgYm9vbCBpc01vdXNlRXZlbnRDb250ZXh0KCkgY29uc3Q7CiAKLXBy
aXZhdGU6Citwcm90ZWN0ZWQ6CiAjaWZuZGVmIE5ERUJVRwogICAgIGJvb2wgaXNVbnJlYWNoYWJs
ZU5vZGUoRXZlbnRUYXJnZXQqKTsKICAgICBib29sIGlzUmVhY2hhYmxlKE5vZGUqKTsKQEAgLTU2
LDYgKzU3LDIwIEBAIHByaXZhdGU6CiAgICAgUmVmUHRyPE5vZGU+IG1fbm9kZTsKICAgICBSZWZQ
dHI8RXZlbnRUYXJnZXQ+IG1fY3VycmVudFRhcmdldDsKICAgICBSZWZQdHI8RXZlbnRUYXJnZXQ+
IG1fdGFyZ2V0OworfTsKKwordHlwZWRlZiBWZWN0b3I8T3duUHRyPEV2ZW50Q29udGV4dD4sIDMy
PiBFdmVudENvbnRleHRBbmNlc3RvcnM7CisKK2NsYXNzIE1vdXNlRXZlbnRDb250ZXh0IDogcHVi
bGljIEV2ZW50Q29udGV4dCB7CitwdWJsaWM6CisgICAgTW91c2VFdmVudENvbnRleHQoUGFzc1Jl
ZlB0cjxOb2RlPiwgUGFzc1JlZlB0cjxFdmVudFRhcmdldD4gY3VycmVudFRhcmdldCwgUGFzc1Jl
ZlB0cjxFdmVudFRhcmdldD4gdGFyZ2V0KTsKKyAgICB2aXJ0dWFsIH5Nb3VzZUV2ZW50Q29udGV4
dCgpOworICAgIEV2ZW50VGFyZ2V0KiByZWxhdGVkVGFyZ2V0KCkgY29uc3Q7CisgICAgdm9pZCBz
ZXRSZWxhdGVkVGFyZ2V0KFBhc3NSZWZQdHI8RXZlbnRUYXJnZXQ+KTsKKyAgICB2aXJ0dWFsIHZv
aWQgaGFuZGxlTG9jYWxFdmVudHMoRXZlbnQqKSBjb25zdCBPVkVSUklERTsKKyAgICB2aXJ0dWFs
IGJvb2wgaXNNb3VzZUV2ZW50Q29udGV4dCgpIGNvbnN0IE9WRVJSSURFOworCitwcml2YXRlOgog
ICAgIFJlZlB0cjxFdmVudFRhcmdldD4gbV9yZWxhdGVkVGFyZ2V0OwogfTsKIApAQCAtNzQsMTcg
Kzg5LDYgQEAgaW5saW5lIGJvb2wgRXZlbnRDb250ZXh0OjpjdXJyZW50VGFyZ2V0U2FtZUFzVGFy
Z2V0KCkgY29uc3QKICAgICByZXR1cm4gbV9jdXJyZW50VGFyZ2V0LmdldCgpID09IG1fdGFyZ2V0
LmdldCgpOwogfQogCi1pbmxpbmUgRXZlbnRUYXJnZXQqIEV2ZW50Q29udGV4dDo6cmVsYXRlZFRh
cmdldCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1fcmVsYXRlZFRhcmdldC5nZXQoKTsKLX0KLQot
aW5saW5lIHZvaWQgRXZlbnRDb250ZXh0OjpzZXRSZWxhdGVkVGFyZ2V0KFBhc3NSZWZQdHI8RXZl
bnRUYXJnZXQ+IHJlbGF0ZWRUYXJnZXQpCi17Ci0gICAgQVNTRVJUKCFpc1VucmVhY2hhYmxlTm9k
ZShyZWxhdGVkVGFyZ2V0LmdldCgpKSk7Ci0gICAgbV9yZWxhdGVkVGFyZ2V0ID0gcmVsYXRlZFRh
cmdldDsKLX0KLQogI2lmbmRlZiBOREVCVUcKIGlubGluZSBib29sIEV2ZW50Q29udGV4dDo6aXNV
bnJlYWNoYWJsZU5vZGUoRXZlbnRUYXJnZXQqIHRhcmdldCkKIHsKQEAgLTEwNCw2ICsxMDgsMTcg
QEAgaW5saW5lIGJvb2wgRXZlbnRDb250ZXh0Ojppc1JlYWNoYWJsZShOb2RlKiB0YXJnZXQpCiB9
CiAjZW5kaWYKIAoraW5saW5lIEV2ZW50VGFyZ2V0KiBNb3VzZUV2ZW50Q29udGV4dDo6cmVsYXRl
ZFRhcmdldCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fcmVsYXRlZFRhcmdldC5nZXQoKTsKK30K
KworaW5saW5lIHZvaWQgTW91c2VFdmVudENvbnRleHQ6OnNldFJlbGF0ZWRUYXJnZXQoUGFzc1Jl
ZlB0cjxFdmVudFRhcmdldD4gcmVsYXRlZFRhcmdldCkKK3sKKyAgICBBU1NFUlQoIWlzVW5yZWFj
aGFibGVOb2RlKHJlbGF0ZWRUYXJnZXQuZ2V0KCkpKTsKKyAgICBtX3JlbGF0ZWRUYXJnZXQgPSBy
ZWxhdGVkVGFyZ2V0OworfQorCiB9CiAKICNlbmRpZiAvLyBFdmVudENvbnRleHRfaApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL0V2ZW50RGlzcGF0Y2hNZWRpYXRvci5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9kb20vRXZlbnREaXNwYXRjaE1lZGlhdG9yLmNwcAppbmRleCA4ZGIzY2IxYmE5
MjFkMzcwYmQ2N2U0NWRkY2FmZDg2NjIzZjM3ZjJmLi40Mzk5YWQ4NTNjZmM4NjgwYzM4ZDE0ZGVh
OGFhN2E3MTVkMjI5MThjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vRXZlbnREaXNw
YXRjaE1lZGlhdG9yLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vRXZlbnREaXNwYXRjaE1l
ZGlhdG9yLmNwcApAQCAtMzMsNiArMzMsNyBAQAogCiAjaW5jbHVkZSAiRXZlbnQuaCIKICNpbmNs
dWRlICJFdmVudERpc3BhdGNoZXIuaCIKKyNpbmNsdWRlICJFdmVudFJldGFyZ2V0ZXIuaCIKICNp
bmNsdWRlICJOb2RlLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKQEAgLTY1LDcgKzY2LDcgQEAg
Rm9jdXNFdmVudERpc3BhdGNoTWVkaWF0b3I6OkZvY3VzRXZlbnREaXNwYXRjaE1lZGlhdG9yKFBh
c3NSZWZQdHI8Tm9kZT4gb2xkRm9jdXMKIAogYm9vbCBGb2N1c0V2ZW50RGlzcGF0Y2hNZWRpYXRv
cjo6ZGlzcGF0Y2hFdmVudChFdmVudERpc3BhdGNoZXIqIGRpc3BhdGNoZXIpIGNvbnN0CiB7Ci0g
ICAgZGlzcGF0Y2hlci0+YWRqdXN0UmVsYXRlZFRhcmdldChldmVudCgpLCBtX29sZEZvY3VzZWRO
b2RlKTsKKyAgICBFdmVudFJldGFyZ2V0ZXI6OmFkanVzdEZvckZvY3VzRXZlbnQoZGlzcGF0Y2hl
ci0+bm9kZSgpLCBtX29sZEZvY3VzZWROb2RlLCBkaXNwYXRjaGVyLT5lbnN1cmVFdmVudENvbnRl
eHRBbmNlc3RvcnMoZXZlbnQoKSkpOwogICAgIHJldHVybiBFdmVudERpc3BhdGNoTWVkaWF0b3I6
OmRpc3BhdGNoRXZlbnQoZGlzcGF0Y2hlcik7CiB9CiAKQEAgLTgyLDcgKzgzLDcgQEAgQmx1ckV2
ZW50RGlzcGF0Y2hNZWRpYXRvcjo6Qmx1ckV2ZW50RGlzcGF0Y2hNZWRpYXRvcihQYXNzUmVmUHRy
PE5vZGU+IG5ld0ZvY3VzZWQKIAogYm9vbCBCbHVyRXZlbnREaXNwYXRjaE1lZGlhdG9yOjpkaXNw
YXRjaEV2ZW50KEV2ZW50RGlzcGF0Y2hlciogZGlzcGF0Y2hlcikgY29uc3QKIHsKLSAgICBkaXNw
YXRjaGVyLT5hZGp1c3RSZWxhdGVkVGFyZ2V0KGV2ZW50KCksIG1fbmV3Rm9jdXNlZE5vZGUpOwor
ICAgIEV2ZW50UmV0YXJnZXRlcjo6YWRqdXN0Rm9yQmx1ckV2ZW50KGRpc3BhdGNoZXItPm5vZGUo
KSwgbV9uZXdGb2N1c2VkTm9kZSwgZGlzcGF0Y2hlci0+ZW5zdXJlRXZlbnRDb250ZXh0QW5jZXN0
b3JzKGV2ZW50KCkpKTsKICAgICByZXR1cm4gRXZlbnREaXNwYXRjaE1lZGlhdG9yOjpkaXNwYXRj
aEV2ZW50KGRpc3BhdGNoZXIpOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20v
RXZlbnREaXNwYXRjaGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9FdmVudERpc3BhdGNoZXIu
Y3BwCmluZGV4IGQ0MDlhODNiOWMyM2FiZjUzMDIzYjE1YTY0NjY4MGExOWQzODg0MTcuLjVkOWJi
OGMyMzgzODg4MDRjYTI5ZjI3OGZjOTgzMmM3ZjM3NjU4ODggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL2RvbS9FdmVudERpc3BhdGNoZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9F
dmVudERpc3BhdGNoZXIuY3BwCkBAIC01Miw4MSArNTIsNiBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7
CiAKIHN0YXRpYyBIYXNoU2V0PE5vZGUqPiogZ05vZGVzRGlzcGF0Y2hpbmdTaW11bGF0ZWRDbGlj
a3MgPSAwOwogCi1FdmVudFJlbGF0ZWRUYXJnZXRBZGp1c3Rlcjo6RXZlbnRSZWxhdGVkVGFyZ2V0
QWRqdXN0ZXIoUGFzc1JlZlB0cjxOb2RlPiBub2RlLCBQYXNzUmVmUHRyPE5vZGU+IHJlbGF0ZWRU
YXJnZXQpCi0gICAgOiBtX25vZGUobm9kZSkKLSAgICAsIG1fcmVsYXRlZFRhcmdldChyZWxhdGVk
VGFyZ2V0KQotewotICAgIEFTU0VSVChtX25vZGUpOwotICAgIEFTU0VSVChtX3JlbGF0ZWRUYXJn
ZXQpOwotfQotCi12b2lkIEV2ZW50UmVsYXRlZFRhcmdldEFkanVzdGVyOjphZGp1c3QoVmVjdG9y
PEV2ZW50Q29udGV4dCwgMzI+JiBhbmNlc3RvcnMpCi17Ci0gICAgLy8gU3ludGhldGljIG1vdXNl
IGV2ZW50cyBjYW4gaGF2ZSBhIHJlbGF0ZWRUYXJnZXQgd2hpY2ggaXMgaWRlbnRpY2FsIHRvIHRo
ZSB0YXJnZXQuCi0gICAgYm9vbCB0YXJnZXRJc0lkZW50aWNhbFRvVG9SZWxhdGVkVGFyZ2V0ID0g
KG1fbm9kZS5nZXQoKSA9PSBtX3JlbGF0ZWRUYXJnZXQuZ2V0KCkpOwotCi0gICAgVmVjdG9yPEV2
ZW50VGFyZ2V0KiwgMzI+IHJlbGF0ZWRUYXJnZXRTdGFjazsKLSAgICBUcmVlU2NvcGUqIGxhc3RU
cmVlU2NvcGUgPSAwOwotICAgIGZvciAoQW5jZXN0b3JDaGFpbldhbGtlciB3YWxrZXIobV9yZWxh
dGVkVGFyZ2V0LmdldCgpKTsgd2Fsa2VyLmdldCgpOyB3YWxrZXIucGFyZW50KCkpIHsKLSAgICAg
ICAgTm9kZSogbm9kZSA9IHdhbGtlci5nZXQoKTsKLSAgICAgICAgaWYgKHJlbGF0ZWRUYXJnZXRT
dGFjay5pc0VtcHR5KCkpCi0gICAgICAgICAgICByZWxhdGVkVGFyZ2V0U3RhY2suYXBwZW5kKG5v
ZGUpOwotICAgICAgICBlbHNlIGlmICh3YWxrZXIuY3Jvc3NpbmdJbnNlcnRpb25Qb2ludCgpKQot
ICAgICAgICAgICAgcmVsYXRlZFRhcmdldFN0YWNrLmFwcGVuZChyZWxhdGVkVGFyZ2V0U3RhY2su
bGFzdCgpKTsKLSAgICAgICAgVHJlZVNjb3BlKiBzY29wZSA9IG5vZGUtPnRyZWVTY29wZSgpOwot
ICAgICAgICAvLyBTa2lwcyBhZGRpbmcgYSBub2RlIHRvIHRoZSBtYXAgaWYgdHJlZVNjb3BlIGRv
ZXMgbm90IGNoYW5nZS4gSnVzdCBmb3IgdGhlIHBlcmZvcm1hbmNlIG9wdGltaXphdGlvbi4KLSAg
ICAgICAgaWYgKHNjb3BlICE9IGxhc3RUcmVlU2NvcGUpCi0gICAgICAgICAgICBtX3JlbGF0ZWRU
YXJnZXRNYXAuYWRkKHNjb3BlLCByZWxhdGVkVGFyZ2V0U3RhY2subGFzdCgpKTsKLSAgICAgICAg
bGFzdFRyZWVTY29wZSA9IHNjb3BlOwotICAgICAgICBpZiAobm9kZS0+aXNTaGFkb3dSb290KCkp
IHsKLSAgICAgICAgICAgIEFTU0VSVCghcmVsYXRlZFRhcmdldFN0YWNrLmlzRW1wdHkoKSk7Ci0g
ICAgICAgICAgICByZWxhdGVkVGFyZ2V0U3RhY2sucmVtb3ZlTGFzdCgpOwotICAgICAgICB9Ci0g
ICAgfQotCi0gICAgbGFzdFRyZWVTY29wZSA9IDA7Ci0gICAgRXZlbnRUYXJnZXQqIGFkanVzdGVk
UmVsYXRlZFRhcmdldCA9IDA7Ci0gICAgZm9yIChWZWN0b3I8RXZlbnRDb250ZXh0LCAzMj46Oml0
ZXJhdG9yIGl0ZXIgPSBhbmNlc3RvcnMuYmVnaW4oKTsgaXRlciA8IGFuY2VzdG9ycy5lbmQoKTsg
KytpdGVyKSB7Ci0gICAgICAgIFRyZWVTY29wZSogc2NvcGUgPSBpdGVyLT5ub2RlKCktPnRyZWVT
Y29wZSgpOwotICAgICAgICBpZiAoc2NvcGUgPT0gbGFzdFRyZWVTY29wZSkgewotICAgICAgICAg
ICAgLy8gUmUtdXNlIHRoZSBwcmV2aW91cyBhZGp1c3RlZFJlbGF0ZWRUYXJnZXQgaWYgdHJlZVNj
b3BlIGRvZXMgbm90IGNoYW5nZS4gSnVzdCBmb3IgdGhlIHBlcmZvcm1hbmNlIG9wdGltaXphdGlv
bi4KLSAgICAgICAgICAgIGl0ZXItPnNldFJlbGF0ZWRUYXJnZXQoYWRqdXN0ZWRSZWxhdGVkVGFy
Z2V0KTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIGFkanVzdGVkUmVsYXRlZFRhcmdl
dCA9IGZpbmRSZWxhdGVkVGFyZ2V0KHNjb3BlKTsKLSAgICAgICAgICAgIGl0ZXItPnNldFJlbGF0
ZWRUYXJnZXQoYWRqdXN0ZWRSZWxhdGVkVGFyZ2V0KTsKLSAgICAgICAgfQotICAgICAgICBsYXN0
VHJlZVNjb3BlID0gc2NvcGU7Ci0gICAgICAgIGlmICh0YXJnZXRJc0lkZW50aWNhbFRvVG9SZWxh
dGVkVGFyZ2V0KSB7Ci0gICAgICAgICAgICBpZiAobV9ub2RlLT50cmVlU2NvcGUoKS0+cm9vdE5v
ZGUoKSA9PSBpdGVyLT5ub2RlKCkpIHsKLSAgICAgICAgICAgICAgICBhbmNlc3RvcnMuc2hyaW5r
KGl0ZXIgKyAxIC0gYW5jZXN0b3JzLmJlZ2luKCkpOwotICAgICAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICAgICAgfQotICAgICAgICB9IGVsc2UgaWYgKGl0ZXItPnRhcmdldCgpID09IGFkanVz
dGVkUmVsYXRlZFRhcmdldCkgewotICAgICAgICAgICAgLy8gRXZlbnQgZGlzcGF0Y2hpbmcgc2hv
dWxkIGJlIHN0b3BwZWQgaGVyZS4KLSAgICAgICAgICAgIGFuY2VzdG9ycy5zaHJpbmsoaXRlciAt
IGFuY2VzdG9ycy5iZWdpbigpKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAg
fQotfQotCi1FdmVudFRhcmdldCogRXZlbnRSZWxhdGVkVGFyZ2V0QWRqdXN0ZXI6OmZpbmRSZWxh
dGVkVGFyZ2V0KFRyZWVTY29wZSogc2NvcGUpCi17Ci0gICAgVmVjdG9yPFRyZWVTY29wZSosIDMy
PiBwYXJlbnRUcmVlU2NvcGVzOwotICAgIEV2ZW50VGFyZ2V0KiByZWxhdGVkVGFyZ2V0ID0gMDsK
LSAgICB3aGlsZSAoc2NvcGUpIHsKLSAgICAgICAgcGFyZW50VHJlZVNjb3Blcy5hcHBlbmQoc2Nv
cGUpOwotICAgICAgICBSZWxhdGVkVGFyZ2V0TWFwOjpjb25zdF9pdGVyYXRvciBmb3VuZCA9IG1f
cmVsYXRlZFRhcmdldE1hcC5maW5kKHNjb3BlKTsKLSAgICAgICAgaWYgKGZvdW5kICE9IG1fcmVs
YXRlZFRhcmdldE1hcC5lbmQoKSkgewotICAgICAgICAgICAgcmVsYXRlZFRhcmdldCA9IGZvdW5k
LT52YWx1ZTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIHNjb3BlID0g
c2NvcGUtPnBhcmVudFRyZWVTY29wZSgpOwotICAgIH0KLSAgICBmb3IgKFZlY3RvcjxUcmVlU2Nv
cGUqLCAzMj46Oml0ZXJhdG9yIGl0ZXIgPSBwYXJlbnRUcmVlU2NvcGVzLmJlZ2luKCk7IGl0ZXIg
PCBwYXJlbnRUcmVlU2NvcGVzLmVuZCgpOyArK2l0ZXIpCi0gICAgICBtX3JlbGF0ZWRUYXJnZXRN
YXAuYWRkKCppdGVyLCByZWxhdGVkVGFyZ2V0KTsKLSAgICByZXR1cm4gcmVsYXRlZFRhcmdldDsK
LX0KLQogYm9vbCBFdmVudERpc3BhdGNoZXI6OmRpc3BhdGNoRXZlbnQoTm9kZSogbm9kZSwgUGFz
c1JlZlB0cjxFdmVudERpc3BhdGNoTWVkaWF0b3I+IG1lZGlhdG9yKQogewogICAgIEFTU0VSVCgh
Tm9FdmVudERpc3BhdGNoQXNzZXJ0aW9uOjppc0V2ZW50RGlzcGF0Y2hGb3JiaWRkZW4oKSk7CkBA
IC0xNjAsMTkgKzg1LDYgQEAgaW5saW5lIHN0YXRpYyBFdmVudFRhcmdldCogZXZlbnRUYXJnZXRS
ZXNwZWN0aW5nVGFyZ2V0UnVsZXMoTm9kZSogcmVmZXJlbmNlTm9kZSkKICAgICByZXR1cm4gcmVm
ZXJlbmNlTm9kZTsKIH0KIAotdm9pZCBFdmVudERpc3BhdGNoZXI6OmFkanVzdFJlbGF0ZWRUYXJn
ZXQoRXZlbnQqIGV2ZW50LCBQYXNzUmVmUHRyPEV2ZW50VGFyZ2V0PiBwcnBSZWxhdGVkVGFyZ2V0
KQotewotICAgIGlmICghcHJwUmVsYXRlZFRhcmdldCkKLSAgICAgICAgcmV0dXJuOwotICAgIFJl
ZlB0cjxOb2RlPiByZWxhdGVkVGFyZ2V0ID0gcHJwUmVsYXRlZFRhcmdldC0+dG9Ob2RlKCk7Ci0g
ICAgaWYgKCFyZWxhdGVkVGFyZ2V0KQotICAgICAgICByZXR1cm47Ci0gICAgaWYgKCFtX25vZGUu
Z2V0KCkpCi0gICAgICAgIHJldHVybjsKLSAgICBlbnN1cmVFdmVudEFuY2VzdG9ycyhldmVudCk7
Ci0gICAgRXZlbnRSZWxhdGVkVGFyZ2V0QWRqdXN0ZXIobV9ub2RlLCByZWxhdGVkVGFyZ2V0LnJl
bGVhc2UoKSkuYWRqdXN0KG1fYW5jZXN0b3JzKTsKLX0KLQogRXZlbnREaXNwYXRjaGVyOjpFdmVu
dERpc3BhdGNoZXIoTm9kZSogbm9kZSkKICAgICA6IG1fbm9kZShub2RlKQogICAgICwgbV9hbmNl
c3RvcnNJbml0aWFsaXplZChmYWxzZSkKQEAgLTE4NCwxMyArOTYsMTQgQEAgRXZlbnREaXNwYXRj
aGVyOjpFdmVudERpc3BhdGNoZXIoTm9kZSogbm9kZSkKICAgICBtX3ZpZXcgPSBub2RlLT5kb2N1
bWVudCgpLT52aWV3KCk7CiB9CiAKLXZvaWQgRXZlbnREaXNwYXRjaGVyOjplbnN1cmVFdmVudEFu
Y2VzdG9ycyhFdmVudCogZXZlbnQpCitFdmVudENvbnRleHRBbmNlc3RvcnMmIEV2ZW50RGlzcGF0
Y2hlcjo6ZW5zdXJlRXZlbnRDb250ZXh0QW5jZXN0b3JzKEV2ZW50KiBldmVudCkKIHsKICAgICBp
ZiAobV9hbmNlc3RvcnNJbml0aWFsaXplZCkKLSAgICAgICAgcmV0dXJuOworICAgICAgICByZXR1
cm4gbV9hbmNlc3RvcnM7CiAgICAgbV9hbmNlc3RvcnNJbml0aWFsaXplZCA9IHRydWU7CiAgICAg
Ym9vbCBpbkRvY3VtZW50ID0gbV9ub2RlLT5pbkRvY3VtZW50KCk7CiAgICAgYm9vbCBpc1NWR0Vs
ZW1lbnQgPSBtX25vZGUtPmlzU1ZHRWxlbWVudCgpOworICAgIGJvb2wgaXNNb3VzZUV2ZW50ID0g
ZXZlbnQtPmlzTW91c2VFdmVudCgpOwogICAgIFZlY3RvcjxFdmVudFRhcmdldCosIDMyPiB0YXJn
ZXRTdGFjazsKICAgICBmb3IgKEFuY2VzdG9yQ2hhaW5XYWxrZXIgd2Fsa2VyKG1fbm9kZS5nZXQo
KSk7IHdhbGtlci5nZXQoKTsgd2Fsa2VyLnBhcmVudCgpKSB7CiAgICAgICAgIE5vZGUqIG5vZGUg
PSB3YWxrZXIuZ2V0KCk7CkBAIC0xOTgsMTggKzExMSwyMiBAQCB2b2lkIEV2ZW50RGlzcGF0Y2hl
cjo6ZW5zdXJlRXZlbnRBbmNlc3RvcnMoRXZlbnQqIGV2ZW50KQogICAgICAgICAgICAgdGFyZ2V0
U3RhY2suYXBwZW5kKGV2ZW50VGFyZ2V0UmVzcGVjdGluZ1RhcmdldFJ1bGVzKG5vZGUpKTsKICAg
ICAgICAgZWxzZSBpZiAod2Fsa2VyLmNyb3NzaW5nSW5zZXJ0aW9uUG9pbnQoKSkKICAgICAgICAg
ICAgIHRhcmdldFN0YWNrLmFwcGVuZCh0YXJnZXRTdGFjay5sYXN0KCkpOwotICAgICAgICBtX2Fu
Y2VzdG9ycy5hcHBlbmQoRXZlbnRDb250ZXh0KG5vZGUsIGV2ZW50VGFyZ2V0UmVzcGVjdGluZ1Rh
cmdldFJ1bGVzKG5vZGUpLCB0YXJnZXRTdGFjay5sYXN0KCkpKTsKKyAgICAgICAgaWYgKGlzTW91
c2VFdmVudCkKKyAgICAgICAgICAgIG1fYW5jZXN0b3JzLmFwcGVuZChhZG9wdFB0cihuZXcgTW91
c2VFdmVudENvbnRleHQobm9kZSwgZXZlbnRUYXJnZXRSZXNwZWN0aW5nVGFyZ2V0UnVsZXMobm9k
ZSksIHRhcmdldFN0YWNrLmxhc3QoKSkpKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgbV9h
bmNlc3RvcnMuYXBwZW5kKGFkb3B0UHRyKG5ldyBFdmVudENvbnRleHQobm9kZSwgZXZlbnRUYXJn
ZXRSZXNwZWN0aW5nVGFyZ2V0UnVsZXMobm9kZSksIHRhcmdldFN0YWNrLmxhc3QoKSkpKTsKICAg
ICAgICAgaWYgKCFpbkRvY3VtZW50KQotICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAg
cmV0dXJuIG1fYW5jZXN0b3JzOwogICAgICAgICBpZiAoIW5vZGUtPmlzU2hhZG93Um9vdCgpKQog
ICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIGlmIChkZXRlcm1pbmVEaXNwYXRjaEJlaGF2
aW9yKGV2ZW50LCB0b1NoYWRvd1Jvb3Qobm9kZSksIHRhcmdldFN0YWNrLmxhc3QoKSkgPT0gU3Rh
eUluc2lkZVNoYWRvd0RPTSkKLSAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIHJldHVy
biBtX2FuY2VzdG9yczsKICAgICAgICAgaWYgKCFpc1NWR0VsZW1lbnQpIHsKICAgICAgICAgICAg
IEFTU0VSVCghdGFyZ2V0U3RhY2suaXNFbXB0eSgpKTsKICAgICAgICAgICAgIHRhcmdldFN0YWNr
LnJlbW92ZUxhc3QoKTsKICAgICAgICAgfQogICAgIH0KKyAgICByZXR1cm4gbV9hbmNlc3RvcnM7
CiB9CiAKIHZvaWQgRXZlbnREaXNwYXRjaGVyOjpkaXNwYXRjaFNjb3BlZEV2ZW50KE5vZGUqIG5v
ZGUsIFBhc3NSZWZQdHI8RXZlbnREaXNwYXRjaE1lZGlhdG9yPiBtZWRpYXRvcikKQEAgLTI2MCw3
ICsxNzcsNyBAQCBib29sIEV2ZW50RGlzcGF0Y2hlcjo6ZGlzcGF0Y2hFdmVudChQYXNzUmVmUHRy
PEV2ZW50PiBwcnBFdmVudCkKICAgICBBU1NFUlQoIU5vRXZlbnREaXNwYXRjaEFzc2VydGlvbjo6
aXNFdmVudERpc3BhdGNoRm9yYmlkZGVuKCkpOwogICAgIEFTU0VSVChldmVudC0+dGFyZ2V0KCkp
OwogICAgIEFTU0VSVCghZXZlbnQtPnR5cGUoKS5pc051bGwoKSk7IC8vIEphdmFTY3JpcHQgY29k
ZSBjYW4gY3JlYXRlIGFuIGV2ZW50IHdpdGggYW4gZW1wdHkgbmFtZSwgYnV0IG5vdCBudWxsLgot
ICAgIGVuc3VyZUV2ZW50QW5jZXN0b3JzKGV2ZW50LmdldCgpKTsKKyAgICBlbnN1cmVFdmVudENv
bnRleHRBbmNlc3RvcnMoZXZlbnQuZ2V0KCkpOwogICAgIFdpbmRvd0V2ZW50Q29udGV4dCB3aW5k
b3dFdmVudENvbnRleHQoZXZlbnQuZ2V0KCksIG1fbm9kZS5nZXQoKSwgdG9wRXZlbnRDb250ZXh0
KCkpOwogICAgIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbkNvb2tpZSBjb29raWUgPSBJbnNwZWN0
b3JJbnN0cnVtZW50YXRpb246OndpbGxEaXNwYXRjaEV2ZW50KG1fbm9kZS0+ZG9jdW1lbnQoKSwg
KmV2ZW50LCB3aW5kb3dFdmVudENvbnRleHQud2luZG93KCksIG1fbm9kZS5nZXQoKSwgbV9hbmNl
c3RvcnMpOwogCkBAIC0yOTYsNyArMjEzLDcgQEAgaW5saW5lIEV2ZW50RGlzcGF0Y2hDb250aW51
YXRpb24gRXZlbnREaXNwYXRjaGVyOjpkaXNwYXRjaEV2ZW50QXRDYXB0dXJpbmcoUGFzc1IKICAg
ICAgICAgcmV0dXJuIERvbmVEaXNwYXRjaGluZzsKIAogICAgIGZvciAoc2l6ZV90IGkgPSBtX2Fu
Y2VzdG9ycy5zaXplKCkgLSAxOyBpID4gMDsgLS1pKSB7Ci0gICAgICAgIGNvbnN0IEV2ZW50Q29u
dGV4dCYgZXZlbnRDb250ZXh0ID0gbV9hbmNlc3RvcnNbaV07CisgICAgICAgIGNvbnN0IEV2ZW50
Q29udGV4dCYgZXZlbnRDb250ZXh0ID0gKm1fYW5jZXN0b3JzW2ldOwogICAgICAgICBpZiAoZXZl
bnRDb250ZXh0LmN1cnJlbnRUYXJnZXRTYW1lQXNUYXJnZXQoKSkgewogICAgICAgICAgICAgaWYg
KGV2ZW50LT5idWJibGVzKCkpCiAgICAgICAgICAgICAgICAgY29udGludWU7CkBAIC0zMTQsNyAr
MjMxLDcgQEAgaW5saW5lIEV2ZW50RGlzcGF0Y2hDb250aW51YXRpb24gRXZlbnREaXNwYXRjaGVy
OjpkaXNwYXRjaEV2ZW50QXRDYXB0dXJpbmcoUGFzc1IKIGlubGluZSBFdmVudERpc3BhdGNoQ29u
dGludWF0aW9uIEV2ZW50RGlzcGF0Y2hlcjo6ZGlzcGF0Y2hFdmVudEF0VGFyZ2V0KFBhc3NSZWZQ
dHI8RXZlbnQ+IGV2ZW50KQogewogICAgIGV2ZW50LT5zZXRFdmVudFBoYXNlKEV2ZW50OjpBVF9U
QVJHRVQpOwotICAgIG1fYW5jZXN0b3JzWzBdLmhhbmRsZUxvY2FsRXZlbnRzKGV2ZW50LmdldCgp
KTsKKyAgICBtX2FuY2VzdG9yc1swXS0+aGFuZGxlTG9jYWxFdmVudHMoZXZlbnQuZ2V0KCkpOwog
ICAgIHJldHVybiBldmVudC0+cHJvcGFnYXRpb25TdG9wcGVkKCkgPyBEb25lRGlzcGF0Y2hpbmcg
OiBDb250aW51ZURpc3BhdGNoaW5nOwogfQogCkBAIC0zMjYsNyArMjQzLDcgQEAgaW5saW5lIEV2
ZW50RGlzcGF0Y2hDb250aW51YXRpb24gRXZlbnREaXNwYXRjaGVyOjpkaXNwYXRjaEV2ZW50QXRC
dWJibGluZyhQYXNzUmUKIAogICAgICAgICBzaXplX3Qgc2l6ZSA9IG1fYW5jZXN0b3JzLnNpemUo
KTsKICAgICAgICAgZm9yIChzaXplX3QgaSA9IDE7IGkgPCBzaXplOyArK2kpIHsKLSAgICAgICAg
ICAgIGNvbnN0IEV2ZW50Q29udGV4dCYgZXZlbnRDb250ZXh0ID0gbV9hbmNlc3RvcnNbaV07Cisg
ICAgICAgICAgICBjb25zdCBFdmVudENvbnRleHQmIGV2ZW50Q29udGV4dCA9ICptX2FuY2VzdG9y
c1tpXTsKICAgICAgICAgICAgIGlmIChldmVudENvbnRleHQuY3VycmVudFRhcmdldFNhbWVBc1Rh
cmdldCgpKQogICAgICAgICAgICAgICAgIGV2ZW50LT5zZXRFdmVudFBoYXNlKEV2ZW50OjpBVF9U
QVJHRVQpOwogICAgICAgICAgICAgZWxzZQpAQCAtMzYzLDcgKzI4MCw3IEBAIGlubGluZSB2b2lk
IEV2ZW50RGlzcGF0Y2hlcjo6ZGlzcGF0Y2hFdmVudFBvc3RQcm9jZXNzKFBhc3NSZWZQdHI8RXZl
bnQ+IGV2ZW50LCB2CiAgICAgICAgIGlmIChldmVudC0+YnViYmxlcygpKSB7CiAgICAgICAgICAg
ICBzaXplX3Qgc2l6ZSA9IG1fYW5jZXN0b3JzLnNpemUoKTsKICAgICAgICAgICAgIGZvciAoc2l6
ZV90IGkgPSAxOyBpIDwgc2l6ZTsgKytpKSB7Ci0gICAgICAgICAgICAgICAgbV9hbmNlc3RvcnNb
aV0ubm9kZSgpLT5kZWZhdWx0RXZlbnRIYW5kbGVyKGV2ZW50LmdldCgpKTsKKyAgICAgICAgICAg
ICAgICBtX2FuY2VzdG9yc1tpXS0+bm9kZSgpLT5kZWZhdWx0RXZlbnRIYW5kbGVyKGV2ZW50Lmdl
dCgpKTsKICAgICAgICAgICAgICAgICBBU1NFUlQoIWV2ZW50LT5kZWZhdWx0UHJldmVudGVkKCkp
OwogICAgICAgICAgICAgICAgIGlmIChldmVudC0+ZGVmYXVsdEhhbmRsZWQoKSkKICAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuOwpAQCAtMzc0LDcgKzI5MSw3IEBAIGlubGluZSB2b2lkIEV2ZW50
RGlzcGF0Y2hlcjo6ZGlzcGF0Y2hFdmVudFBvc3RQcm9jZXNzKFBhc3NSZWZQdHI8RXZlbnQ+IGV2
ZW50LCB2CiAKIGNvbnN0IEV2ZW50Q29udGV4dCogRXZlbnREaXNwYXRjaGVyOjp0b3BFdmVudENv
bnRleHQoKQogewotICAgIHJldHVybiBtX2FuY2VzdG9ycy5pc0VtcHR5KCkgPyAwIDogJm1fYW5j
ZXN0b3JzLmxhc3QoKTsKKyAgICByZXR1cm4gbV9hbmNlc3RvcnMuaXNFbXB0eSgpID8gMCA6IG1f
YW5jZXN0b3JzLmxhc3QoKS5nZXQoKTsKIH0KIAogc3RhdGljIGlubGluZSBib29sIGluVGhlU2Ft
ZVNjb3BlKFNoYWRvd1Jvb3QqIHNoYWRvd1Jvb3QsIEV2ZW50VGFyZ2V0KiB0YXJnZXQpCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vRXZlbnREaXNwYXRjaGVyLmggYi9Tb3VyY2UvV2Vi
Q29yZS9kb20vRXZlbnREaXNwYXRjaGVyLmgKaW5kZXggZGFjZjIzZDg0NGIxMmZmMjBiNWE4ZDky
YTUxMzJiNDZkOGM3NDA0My4uYmNiZTEwZWE2ODk4NmMyZWFjMjNiMGNhYjc1OWVhYmExMGJiM2Ey
NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL0V2ZW50RGlzcGF0Y2hlci5oCisrKyBi
L1NvdXJjZS9XZWJDb3JlL2RvbS9FdmVudERpc3BhdGNoZXIuaApAQCAtNTUsMTkgKzU1LDYgQEAg
ZW51bSBFdmVudERpc3BhdGNoQ29udGludWF0aW9uIHsKICAgICBEb25lRGlzcGF0Y2hpbmcKIH07
CiAKLWNsYXNzIEV2ZW50UmVsYXRlZFRhcmdldEFkanVzdGVyIHsKLXB1YmxpYzoKLSAgICBFdmVu
dFJlbGF0ZWRUYXJnZXRBZGp1c3RlcihQYXNzUmVmUHRyPE5vZGU+LCBQYXNzUmVmUHRyPE5vZGU+
IHJlbGF0ZWRUYXJnZXQpOwotICAgIHZvaWQgYWRqdXN0KFZlY3RvcjxFdmVudENvbnRleHQsIDMy
PiYpOwotcHJpdmF0ZToKLSAgICB0eXBlZGVmIEhhc2hNYXA8VHJlZVNjb3BlKiwgRXZlbnRUYXJn
ZXQqPiBSZWxhdGVkVGFyZ2V0TWFwOwotICAgIEV2ZW50VGFyZ2V0KiBmaW5kUmVsYXRlZFRhcmdl
dChUcmVlU2NvcGUqKTsKLQotICAgIFJlZlB0cjxOb2RlPiBtX25vZGU7Ci0gICAgUmVmUHRyPE5v
ZGU+IG1fcmVsYXRlZFRhcmdldDsKLSAgICBSZWxhdGVkVGFyZ2V0TWFwIG1fcmVsYXRlZFRhcmdl
dE1hcDsKLX07Ci0KIGNsYXNzIEV2ZW50RGlzcGF0Y2hlciB7CiBwdWJsaWM6CiAgICAgc3RhdGlj
IGJvb2wgZGlzcGF0Y2hFdmVudChOb2RlKiwgUGFzc1JlZlB0cjxFdmVudERpc3BhdGNoTWVkaWF0
b3I+KTsKQEAgLTc2LDE1ICs2MywxNCBAQCBwdWJsaWM6CiAgICAgc3RhdGljIHZvaWQgZGlzcGF0
Y2hTaW11bGF0ZWRDbGljayhOb2RlKiwgRXZlbnQqIHVuZGVybHlpbmdFdmVudCwgU2ltdWxhdGVk
Q2xpY2tNb3VzZUV2ZW50T3B0aW9ucywgU2ltdWxhdGVkQ2xpY2tWaXN1YWxPcHRpb25zKTsKIAog
ICAgIGJvb2wgZGlzcGF0Y2hFdmVudChQYXNzUmVmUHRyPEV2ZW50Pik7Ci0gICAgdm9pZCBhZGp1
c3RSZWxhdGVkVGFyZ2V0KEV2ZW50KiwgUGFzc1JlZlB0cjxFdmVudFRhcmdldD4gcHJwUmVsYXRl
ZFRhcmdldCk7CiAgICAgTm9kZSogbm9kZSgpIGNvbnN0OworICAgIEV2ZW50Q29udGV4dEFuY2Vz
dG9ycyYgZW5zdXJlRXZlbnRDb250ZXh0QW5jZXN0b3JzKEV2ZW50Kik7CiAKIHByaXZhdGU6CiAg
ICAgRXZlbnREaXNwYXRjaGVyKE5vZGUqKTsKIAogICAgIEV2ZW50RGlzcGF0Y2hCZWhhdmlvciBk
ZXRlcm1pbmVEaXNwYXRjaEJlaGF2aW9yKEV2ZW50KiwgU2hhZG93Um9vdCosIEV2ZW50VGFyZ2V0
Kik7CiAKLSAgICB2b2lkIGVuc3VyZUV2ZW50QW5jZXN0b3JzKEV2ZW50Kik7CiAgICAgY29uc3Qg
RXZlbnRDb250ZXh0KiB0b3BFdmVudENvbnRleHQoKTsKIAogICAgIEV2ZW50RGlzcGF0Y2hDb250
aW51YXRpb24gZGlzcGF0Y2hFdmVudFByZVByb2Nlc3MoUGFzc1JlZlB0cjxFdmVudD4sIHZvaWQq
JiBwcmVEaXNwYXRjaEV2ZW50SGFuZGxlclJlc3VsdCk7CkBAIC05Myw3ICs3OSw3IEBAIHByaXZh
dGU6CiAgICAgRXZlbnREaXNwYXRjaENvbnRpbnVhdGlvbiBkaXNwYXRjaEV2ZW50QXRCdWJibGlu
ZyhQYXNzUmVmUHRyPEV2ZW50PiwgV2luZG93RXZlbnRDb250ZXh0Jik7CiAgICAgdm9pZCBkaXNw
YXRjaEV2ZW50UG9zdFByb2Nlc3MoUGFzc1JlZlB0cjxFdmVudD4sIHZvaWQqIHByZURpc3BhdGNo
RXZlbnRIYW5kbGVyUmVzdWx0KTsKIAotICAgIFZlY3RvcjxFdmVudENvbnRleHQsIDMyPiBtX2Fu
Y2VzdG9yczsKKyAgICBFdmVudENvbnRleHRBbmNlc3RvcnMgbV9hbmNlc3RvcnM7CiAgICAgUmVm
UHRyPE5vZGU+IG1fbm9kZTsKICAgICBSZWZQdHI8RnJhbWVWaWV3PiBtX3ZpZXc7CiAgICAgYm9v
bCBtX2FuY2VzdG9yc0luaXRpYWxpemVkOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9t
L0V2ZW50UmV0YXJnZXRlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9kb20vRXZlbnRSZXRhcmdldGVy
LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwLi5lMGVlMjgyNjI4M2EwMGIyOWIxMjA4YTAwNTNjOTEzMGVlMzZmY2Mw
Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL0V2ZW50UmV0YXJnZXRlci5j
cHAKQEAgLTAsMCArMSwxNTggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0
d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIg
dGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBh
cyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2
ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZl
cnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRo
YXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhv
dXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkg
R2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91
bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGlj
IExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlO
Ry5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9u
LCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAw
MjExMC0xMzAxLCBVU0EuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkV2
ZW50UmV0YXJnZXRlci5oIgorCisjaW5jbHVkZSAiQW5jZXN0b3JDaGFpbldhbGtlci5oIgorI2lu
Y2x1ZGUgIkNvbnRhaW5lck5vZGUuaCIKKyNpbmNsdWRlICJFdmVudENvbnRleHQuaCIKKyNpbmNs
dWRlICJNb3VzZUV2ZW50LmgiCisjaW5jbHVkZSAiVHJlZVNjb3BlLmgiCisjaW5jbHVkZSA8d3Rm
L1JlZlB0ci5oPgorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUg
eworCit2b2lkIEV2ZW50UmV0YXJnZXRlcjo6YnVpbGRSZWxhdGVkTm9kZU1hcChjb25zdCBOb2Rl
KiByZWxhdGVkTm9kZSwgUmVsYXRlZE5vZGVNYXAmIHJlbGF0ZWROb2RlTWFwKQoreworICAgIFZl
Y3RvcjxOb2RlKiwgMzI+IHJlbGF0ZWROb2RlU3RhY2s7CisgICAgVHJlZVNjb3BlKiBsYXN0VHJl
ZVNjb3BlID0gMDsKKyAgICBmb3IgKEFuY2VzdG9yQ2hhaW5XYWxrZXIgd2Fsa2VyKHJlbGF0ZWRO
b2RlKTsgd2Fsa2VyLmdldCgpOyB3YWxrZXIucGFyZW50KCkpIHsKKyAgICAgICAgTm9kZSogbm9k
ZSA9IHdhbGtlci5nZXQoKTsKKyAgICAgICAgaWYgKHJlbGF0ZWROb2RlU3RhY2suaXNFbXB0eSgp
KQorICAgICAgICAgICAgcmVsYXRlZE5vZGVTdGFjay5hcHBlbmQobm9kZSk7CisgICAgICAgIGVs
c2UgaWYgKHdhbGtlci5jcm9zc2luZ0luc2VydGlvblBvaW50KCkpCisgICAgICAgICAgICByZWxh
dGVkTm9kZVN0YWNrLmFwcGVuZChyZWxhdGVkTm9kZVN0YWNrLmxhc3QoKSk7CisgICAgICAgIFRy
ZWVTY29wZSogc2NvcGUgPSBub2RlLT50cmVlU2NvcGUoKTsKKyAgICAgICAgLy8gU2tpcHMgYWRk
aW5nIGEgbm9kZSB0byB0aGUgbWFwIGlmIHRyZWVTY29wZSBkb2VzIG5vdCBjaGFuZ2UuIEp1c3Qg
Zm9yIHRoZSBwZXJmb3JtYW5jZSBvcHRpbWl6YXRpb24uCisgICAgICAgIGlmIChzY29wZSAhPSBs
YXN0VHJlZVNjb3BlKQorICAgICAgICAgICAgcmVsYXRlZE5vZGVNYXAuYWRkKHNjb3BlLCByZWxh
dGVkTm9kZVN0YWNrLmxhc3QoKSk7CisgICAgICAgIGxhc3RUcmVlU2NvcGUgPSBzY29wZTsKKyAg
ICAgICAgaWYgKG5vZGUtPmlzU2hhZG93Um9vdCgpKSB7CisgICAgICAgICAgICBBU1NFUlQoIXJl
bGF0ZWROb2RlU3RhY2suaXNFbXB0eSgpKTsKKyAgICAgICAgICAgIHJlbGF0ZWROb2RlU3RhY2su
cmVtb3ZlTGFzdCgpOworICAgICAgICB9CisgICAgfQorfQorCit2b2lkIEV2ZW50UmV0YXJnZXRl
cjo6YWRqdXN0Rm9yRm9jdXNFdmVudChQYXNzUmVmUHRyPE5vZGU+IG5vZGUsIFBhc3NSZWZQdHI8
Tm9kZT4gb2xkRm9jdXNlZE5vZGUsIEV2ZW50Q29udGV4dEFuY2VzdG9ycyYgYW5jZXN0b3JzKQor
eworICAgIGFkanVzdEZvckZvY3VzUmVsYXRlZEV2ZW50KG5vZGUsIG9sZEZvY3VzZWROb2RlLCBh
bmNlc3RvcnMpOworfQorCit2b2lkIEV2ZW50UmV0YXJnZXRlcjo6YWRqdXN0Rm9yQmx1ckV2ZW50
KFBhc3NSZWZQdHI8Tm9kZT4gbm9kZSwgUGFzc1JlZlB0cjxOb2RlPiBuZXdGb2N1c2VkTm9kZSwg
RXZlbnRDb250ZXh0QW5jZXN0b3JzJiBhbmNlc3RvcnMpCit7CisgICAgYWRqdXN0Rm9yRm9jdXNS
ZWxhdGVkRXZlbnQobm9kZSwgbmV3Rm9jdXNlZE5vZGUsIGFuY2VzdG9ycyk7Cit9CisKK3ZvaWQg
RXZlbnRSZXRhcmdldGVyOjphZGp1c3RGb3JGb2N1c1JlbGF0ZWRFdmVudChQYXNzUmVmUHRyPE5v
ZGU+IG5vZGUsIFBhc3NSZWZQdHI8Tm9kZT4gcmVsYXRlZE5vZGUsIEV2ZW50Q29udGV4dEFuY2Vz
dG9ycyYgYW5jZXN0b3JzKQoreworICAgIEFTU0VSVChub2RlKTsKKyAgICBBU1NFUlQocmVsYXRl
ZE5vZGUpOworICAgIFJlbGF0ZWROb2RlTWFwIHJlbGF0ZWROb2RlTWFwOworICAgIGJ1aWxkUmVs
YXRlZE5vZGVNYXAocmVsYXRlZE5vZGUuZ2V0KCksIHJlbGF0ZWROb2RlTWFwKTsKKyAgICBUcmVl
U2NvcGUqIGxhc3RUcmVlU2NvcGUgPSAwOworICAgIE5vZGUqIGFkanVzdGVkTm9kZSA9IDA7Cisg
ICAgZm9yIChFdmVudENvbnRleHRBbmNlc3RvcnM6OmNvbnN0X2l0ZXJhdG9yIGl0ZXIgPSBhbmNl
c3RvcnMuYmVnaW4oKTsgaXRlciA8IGFuY2VzdG9ycy5lbmQoKTsgKytpdGVyKSB7CisgICAgICAg
IFRyZWVTY29wZSogc2NvcGUgPSAoKml0ZXIpLT5ub2RlKCktPnRyZWVTY29wZSgpOworICAgICAg
ICBpZiAoc2NvcGUgIT0gbGFzdFRyZWVTY29wZSkKKyAgICAgICAgICAgIGFkanVzdGVkTm9kZSA9
IGZpbmRSZWxhdGVkTm9kZShzY29wZSwgcmVsYXRlZE5vZGVNYXApOworICAgICAgICBsYXN0VHJl
ZVNjb3BlID0gc2NvcGU7CisgICAgICAgIGlmICgoKml0ZXIpLT50YXJnZXQoKSA9PSBhZGp1c3Rl
ZE5vZGUpIHsKKyAgICAgICAgICAgIC8vIEV2ZW50IGRpc3BhdGNoaW5nIHNob3VsZCBiZSBzdG9w
cGVkIGhlcmUuCisgICAgICAgICAgICBhbmNlc3RvcnMuc2hyaW5rKGl0ZXIgLSBhbmNlc3RvcnMu
YmVnaW4oKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgIH0KK30KKwordm9p
ZCBFdmVudFJldGFyZ2V0ZXI6OmFkanVzdEZvck1vdXNlRXZlbnQoUGFzc1JlZlB0cjxOb2RlPiBu
b2RlLCBjb25zdCBNb3VzZUV2ZW50JiBtb3VzZUV2ZW50LCBFdmVudENvbnRleHRBbmNlc3RvcnMm
IGFuY2VzdG9ycykKK3sKKyAgICBpZiAoIW5vZGUuZ2V0KCkpCisgICAgICAgIHJldHVybjsKKyAg
ICBpZiAoIW1vdXNlRXZlbnQucmVsYXRlZFRhcmdldCgpKQorICAgICAgICByZXR1cm47CisgICAg
UmVmUHRyPE5vZGU+IHJlbGF0ZWROb2RlID0gbW91c2VFdmVudC5yZWxhdGVkVGFyZ2V0KCktPnRv
Tm9kZSgpOworICAgIGlmICghcmVsYXRlZE5vZGUpCisgICAgICAgIHJldHVybjsKKyAgICBBZGp1
c3RlZE5vZGVzIGFkanVzdGVkTm9kZXM7CisgICAgY2FsY3VsYXRlQWRqdXN0ZWROb2Rlcyhub2Rl
LCByZWxhdGVkTm9kZSwgYW5jZXN0b3JzLCBhZGp1c3RlZE5vZGVzKTsKKyAgICBBU1NFUlQoYW5j
ZXN0b3JzLnNpemUoKSA9PSBhZGp1c3RlZE5vZGVzLnNpemUoKSk7CisgICAgZm9yIChzaXplX3Qg
aSA9IDA7IGkgPCBhbmNlc3RvcnMuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgaWYgKGFkanVzdGVk
Tm9kZXNbaV0uZ2V0KCkpIHsKKyAgICAgICAgICAgIEFTU0VSVChhbmNlc3RvcnNbaV0tPmlzTW91
c2VFdmVudENvbnRleHQoKSk7CisgICAgICAgICAgICBNb3VzZUV2ZW50Q29udGV4dCogbW91c2VF
dmVudENvbnRleHQgPSBzdGF0aWNfY2FzdDxNb3VzZUV2ZW50Q29udGV4dCo+KGFuY2VzdG9yc1tp
XS5nZXQoKSk7CisgICAgICAgICAgICBtb3VzZUV2ZW50Q29udGV4dC0+c2V0UmVsYXRlZFRhcmdl
dChhZGp1c3RlZE5vZGVzW2ldKTsKKyAgICAgICAgfQorICAgIH0KK30KKwordm9pZCBFdmVudFJl
dGFyZ2V0ZXI6OmNhbGN1bGF0ZUFkanVzdGVkTm9kZXMoUGFzc1JlZlB0cjxOb2RlPiBub2RlLCBQ
YXNzUmVmUHRyPE5vZGU+IHJlbGF0ZWROb2RlLCBFdmVudENvbnRleHRBbmNlc3RvcnMmIGFuY2Vz
dG9ycywgQWRqdXN0ZWROb2RlcyYgYWRqdXN0ZWROb2RlcykKK3sKKyAgICBSZWxhdGVkTm9kZU1h
cCByZWxhdGVkTm9kZU1hcDsKKyAgICBidWlsZFJlbGF0ZWROb2RlTWFwKHJlbGF0ZWROb2RlLmdl
dCgpLCByZWxhdGVkTm9kZU1hcCk7CisKKyAgICAvLyBTeW50aGV0aWMgbW91c2UgZXZlbnRzIGNh
biBoYXZlIGEgcmVsYXRlZFRhcmdldCB3aGljaCBpcyBpZGVudGljYWwgdG8gdGhlIHRhcmdldC4K
KyAgICBib29sIHRhcmdldElzSWRlbnRpY2FsVG9Ub1JlbGF0ZWRUYXJnZXQgPSAobm9kZS5nZXQo
KSA9PSByZWxhdGVkTm9kZS5nZXQoKSk7CisKKyAgICBUcmVlU2NvcGUqIGxhc3RUcmVlU2NvcGUg
PSAwOworICAgIE5vZGUqIGFkanVzdGVkTm9kZSA9IDA7CisgICAgZm9yIChFdmVudENvbnRleHRB
bmNlc3RvcnM6OmNvbnN0X2l0ZXJhdG9yIGl0ZXIgPSBhbmNlc3RvcnMuYmVnaW4oKTsgaXRlciA8
IGFuY2VzdG9ycy5lbmQoKTsgKytpdGVyKSB7CisgICAgICAgIFRyZWVTY29wZSogc2NvcGUgPSAo
Kml0ZXIpLT5ub2RlKCktPnRyZWVTY29wZSgpOworICAgICAgICBpZiAoc2NvcGUgPT0gbGFzdFRy
ZWVTY29wZSkgeworICAgICAgICAgICAgLy8gUmUtdXNlIHRoZSBwcmV2aW91cyBhZGp1c3RlZFJl
bGF0ZWRUYXJnZXQgaWYgdHJlZVNjb3BlIGRvZXMgbm90IGNoYW5nZS4gSnVzdCBmb3IgdGhlIHBl
cmZvcm1hbmNlIG9wdGltaXphdGlvbi4KKyAgICAgICAgICAgIGFkanVzdGVkTm9kZXMuYXBwZW5k
KGFkanVzdGVkTm9kZSk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBhZGp1c3RlZE5v
ZGUgPSBmaW5kUmVsYXRlZE5vZGUoc2NvcGUsIHJlbGF0ZWROb2RlTWFwKTsKKyAgICAgICAgICAg
IGFkanVzdGVkTm9kZXMuYXBwZW5kKGFkanVzdGVkTm9kZSk7CisgICAgICAgIH0KKyAgICAgICAg
bGFzdFRyZWVTY29wZSA9IHNjb3BlOworICAgICAgICBpZiAodGFyZ2V0SXNJZGVudGljYWxUb1Rv
UmVsYXRlZFRhcmdldCkgeworICAgICAgICAgICAgaWYgKG5vZGUtPnRyZWVTY29wZSgpLT5yb290
Tm9kZSgpID09ICgqaXRlciktPm5vZGUoKSkgeworICAgICAgICAgICAgICAgIGFuY2VzdG9ycy5z
aHJpbmsoaXRlciArIDEgLSBhbmNlc3RvcnMuYmVnaW4oKSk7CisgICAgICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgICAgICB9CisgICAgICAgIH0gZWxzZSBpZiAoKCppdGVyKS0+dGFyZ2V0KCkg
PT0gYWRqdXN0ZWROb2RlKSB7CisgICAgICAgICAgICAvLyBFdmVudCBkaXNwYXRjaGluZyBzaG91
bGQgYmUgc3RvcHBlZCBoZXJlLgorICAgICAgICAgICAgYW5jZXN0b3JzLnNocmluayhpdGVyIC0g
YW5jZXN0b3JzLmJlZ2luKCkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9
Cit9CisKK05vZGUqIEV2ZW50UmV0YXJnZXRlcjo6ZmluZFJlbGF0ZWROb2RlKFRyZWVTY29wZSog
c2NvcGUsIFJlbGF0ZWROb2RlTWFwJiByZWxhdGVkTm9kZU1hcCkKK3sKKyAgICBWZWN0b3I8VHJl
ZVNjb3BlKiwgMzI+IHBhcmVudFRyZWVTY29wZXM7CisgICAgTm9kZSogcmVsYXRlZE5vZGUgPSAw
OworICAgIHdoaWxlIChzY29wZSkgeworICAgICAgICBwYXJlbnRUcmVlU2NvcGVzLmFwcGVuZChz
Y29wZSk7CisgICAgICAgIFJlbGF0ZWROb2RlTWFwOjpjb25zdF9pdGVyYXRvciBmb3VuZCA9IHJl
bGF0ZWROb2RlTWFwLmZpbmQoc2NvcGUpOworICAgICAgICBpZiAoZm91bmQgIT0gcmVsYXRlZE5v
ZGVNYXAuZW5kKCkpIHsKKyAgICAgICAgICAgIHJlbGF0ZWROb2RlID0gZm91bmQtPnZhbHVlOwor
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgc2NvcGUgPSBzY29wZS0+cGFy
ZW50VHJlZVNjb3BlKCk7CisgICAgfQorICAgIGZvciAoVmVjdG9yPFRyZWVTY29wZSosIDMyPjo6
aXRlcmF0b3IgaXRlciA9IHBhcmVudFRyZWVTY29wZXMuYmVnaW4oKTsgaXRlciA8IHBhcmVudFRy
ZWVTY29wZXMuZW5kKCk7ICsraXRlcikKKyAgICAgICAgcmVsYXRlZE5vZGVNYXAuYWRkKCppdGVy
LCByZWxhdGVkTm9kZSk7CisgICAgcmV0dXJuIHJlbGF0ZWROb2RlOworfQorCit9CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vRXZlbnRSZXRhcmdldGVyLmggYi9Tb3VyY2UvV2ViQ29y
ZS9kb20vRXZlbnRSZXRhcmdldGVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMzM5MDczYWIyNTczYTBmYTQ1ZmM2
MDIzMzk5N2IyOWI2MTI0MTQ3NQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Rv
bS9FdmVudFJldGFyZ2V0ZXIuaApAQCAtMCwwICsxLDUxIEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBsaWJy
YXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICog
bW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJs
aWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRp
b247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRp
b24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRl
ZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5Z
IFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNI
QU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUg
R05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4K
KyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFy
eSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2Vl
IHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29m
dHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwK
KyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpZm5kZWYgRXZlbnRSZXRh
cmdldGVyX2gKKyNkZWZpbmUgRXZlbnRSZXRhcmdldGVyX2gKKworI2luY2x1ZGUgIkV2ZW50Q29u
dGV4dC5oIgorI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CisjaW5jbHVkZSA8d3RmL1Bhc3NSZWZQ
dHIuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBNb3VzZUV2ZW50OworY2xhc3Mg
Tm9kZTsKK2NsYXNzIFRyZWVTY29wZTsKKworY2xhc3MgRXZlbnRSZXRhcmdldGVyIHsKK3B1Ymxp
YzoKKyAgICB0eXBlZGVmIFZlY3RvcjxSZWZQdHI8Tm9kZT4gPiBBZGp1c3RlZE5vZGVzOworICAg
IHR5cGVkZWYgSGFzaE1hcDxUcmVlU2NvcGUqLCBOb2RlKj4gUmVsYXRlZE5vZGVNYXA7CisKKyAg
ICBzdGF0aWMgdm9pZCBhZGp1c3RGb3JNb3VzZUV2ZW50KFBhc3NSZWZQdHI8Tm9kZT4sIGNvbnN0
IE1vdXNlRXZlbnQmLCBFdmVudENvbnRleHRBbmNlc3RvcnMmKTsKKyAgICBzdGF0aWMgdm9pZCBh
ZGp1c3RGb3JGb2N1c0V2ZW50KFBhc3NSZWZQdHI8Tm9kZT4sIFBhc3NSZWZQdHI8Tm9kZT4gb2xk
Rm9jdXNlZE5vZGUsIEV2ZW50Q29udGV4dEFuY2VzdG9ycyYpOworICAgIHN0YXRpYyB2b2lkIGFk
anVzdEZvckJsdXJFdmVudChQYXNzUmVmUHRyPE5vZGU+LCBQYXNzUmVmUHRyPE5vZGU+IG5ld0Zv
Y3VzZWROb2RlLCBFdmVudENvbnRleHRBbmNlc3RvcnMmKTsKKworcHJpdmF0ZToKKyAgICBzdGF0
aWMgdm9pZCBhZGp1c3RGb3JGb2N1c1JlbGF0ZWRFdmVudChQYXNzUmVmUHRyPE5vZGU+LCBQYXNz
UmVmUHRyPE5vZGU+IHJlbGF0ZWROb2RlLCBFdmVudENvbnRleHRBbmNlc3RvcnMmKTsKKyAgICBz
dGF0aWMgTm9kZSogZmluZFJlbGF0ZWROb2RlKFRyZWVTY29wZSosIFJlbGF0ZWROb2RlTWFwJik7
CisgICAgc3RhdGljIHZvaWQgYnVpbGRSZWxhdGVkTm9kZU1hcChjb25zdCBOb2RlKiwgUmVsYXRl
ZE5vZGVNYXAmKTsKKyAgICBzdGF0aWMgdm9pZCBjYWxjdWxhdGVBZGp1c3RlZE5vZGVzKFBhc3NS
ZWZQdHI8Tm9kZT4sIFBhc3NSZWZQdHI8Tm9kZT4gcmVsYXRlZE5vZGUsIEV2ZW50Q29udGV4dEFu
Y2VzdG9ycyYsIEFkanVzdGVkTm9kZXMmKTsKK307CisKK30KKworI2VuZGlmIC8vIEV2ZW50UmV0
YXJnZXRlcl9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vTW91c2VFdmVudC5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9kb20vTW91c2VFdmVudC5jcHAKaW5kZXggNjk1ZTJmN2NhYmI0Njhj
OGJhYzg2NzU3MDFlZjRlNGExN2YwZGY1Ny4uYTQ1YjkzMjgwMDA2OTIwNTc0MGViZWVlMTFmZTFj
NzM2Y2U2NmY1NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL01vdXNlRXZlbnQuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9Nb3VzZUV2ZW50LmNwcApAQCAtMjUsNiArMjUsNyBA
QAogCiAjaW5jbHVkZSAiRXZlbnREaXNwYXRjaGVyLmgiCiAjaW5jbHVkZSAiRXZlbnROYW1lcy5o
IgorI2luY2x1ZGUgIkV2ZW50UmV0YXJnZXRlci5oIgogI2luY2x1ZGUgIkZyYW1lLmgiCiAjaW5j
bHVkZSAiRnJhbWVWaWV3LmgiCiAjaW5jbHVkZSAiSFRNTElGcmFtZUVsZW1lbnQuaCIKQEAgLTI2
MSw3ICsyNjIsNyBAQCBNb3VzZUV2ZW50KiBNb3VzZUV2ZW50RGlzcGF0Y2hNZWRpYXRvcjo6ZXZl
bnQoKSBjb25zdAogYm9vbCBNb3VzZUV2ZW50RGlzcGF0Y2hNZWRpYXRvcjo6ZGlzcGF0Y2hFdmVu
dChFdmVudERpc3BhdGNoZXIqIGRpc3BhdGNoZXIpIGNvbnN0CiB7CiAgICAgaWYgKGlzU3ludGhl
dGljTW91c2VFdmVudCgpKSB7Ci0gICAgICAgIGRpc3BhdGNoZXItPmFkanVzdFJlbGF0ZWRUYXJn
ZXQoZXZlbnQoKSwgZXZlbnQoKS0+cmVsYXRlZFRhcmdldCgpKTsKKyAgICAgICAgRXZlbnRSZXRh
cmdldGVyOjphZGp1c3RGb3JNb3VzZUV2ZW50KGRpc3BhdGNoZXItPm5vZGUoKSwgKmV2ZW50KCks
ICBkaXNwYXRjaGVyLT5lbnN1cmVFdmVudENvbnRleHRBbmNlc3RvcnMoZXZlbnQoKSkpOwogICAg
ICAgICByZXR1cm4gZGlzcGF0Y2hlci0+ZGlzcGF0Y2hFdmVudChldmVudCgpKTsKICAgICB9CiAK
QEAgLTI3NCw3ICsyNzUsNyBAQCBib29sIE1vdXNlRXZlbnREaXNwYXRjaE1lZGlhdG9yOjpkaXNw
YXRjaEV2ZW50KEV2ZW50RGlzcGF0Y2hlciogZGlzcGF0Y2hlcikgY29ucwogICAgIEFTU0VSVCgh
ZXZlbnQoKS0+dGFyZ2V0KCkgfHwgZXZlbnQoKS0+dGFyZ2V0KCkgIT0gZXZlbnQoKS0+cmVsYXRl
ZFRhcmdldCgpKTsKIAogICAgIEV2ZW50VGFyZ2V0KiByZWxhdGVkVGFyZ2V0ID0gZXZlbnQoKS0+
cmVsYXRlZFRhcmdldCgpOwotICAgIGRpc3BhdGNoZXItPmFkanVzdFJlbGF0ZWRUYXJnZXQoZXZl
bnQoKSwgcmVsYXRlZFRhcmdldCk7CisgICAgRXZlbnRSZXRhcmdldGVyOjphZGp1c3RGb3JNb3Vz
ZUV2ZW50KGRpc3BhdGNoZXItPm5vZGUoKSwgKmV2ZW50KCksICBkaXNwYXRjaGVyLT5lbnN1cmVF
dmVudENvbnRleHRBbmNlc3RvcnMoZXZlbnQoKSkpOwogCiAgICAgZGlzcGF0Y2hlci0+ZGlzcGF0
Y2hFdmVudChldmVudCgpKTsKICAgICBib29sIHN3YWxsb3dFdmVudCA9IGV2ZW50KCktPmRlZmF1
bHRIYW5kbGVkKCkgfHwgZXZlbnQoKS0+ZGVmYXVsdFByZXZlbnRlZCgpOwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvZG9tL1VJRXZlbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvZG9tL1VJRXZl
bnQuY3BwCmluZGV4IGI5N2FiMDBlMmY2ZmVkNmE1ZmU0ZjkzYmRhNDA3NTE5YjM1MDQ0YzguLjM5
MDc0M2I4ZDQyNWYyNTBjMWM1M2IzMDIwYTdjOGEwYWUxOGNhMmYgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL2RvbS9VSUV2ZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vVUlFdmVu
dC5jcHAKQEAgLTI2LDYgKzI2LDcgQEAKICNpbmNsdWRlICJDb25zb2xlLmgiCiAjaW5jbHVkZSAi
RE9NV2luZG93LmgiCiAjaW5jbHVkZSAiRXZlbnREaXNwYXRjaGVyLmgiCisjaW5jbHVkZSAiRXZl
bnRSZXRhcmdldGVyLmgiCiAjaW5jbHVkZSAiTm9kZS5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7
CkBAIC0xMjgsNyArMTI5LDcgQEAgRm9jdXNJbkV2ZW50RGlzcGF0Y2hNZWRpYXRvcjo6Rm9jdXNJ
bkV2ZW50RGlzcGF0Y2hNZWRpYXRvcihQYXNzUmVmUHRyPEV2ZW50PiBldmUKIAogYm9vbCBGb2N1
c0luRXZlbnREaXNwYXRjaE1lZGlhdG9yOjpkaXNwYXRjaEV2ZW50KEV2ZW50RGlzcGF0Y2hlciog
ZGlzcGF0Y2hlcikgY29uc3QKIHsKLSAgICBkaXNwYXRjaGVyLT5hZGp1c3RSZWxhdGVkVGFyZ2V0
KGV2ZW50KCksIG1fb2xkRm9jdXNlZE5vZGUpOworICAgIEV2ZW50UmV0YXJnZXRlcjo6YWRqdXN0
Rm9yRm9jdXNFdmVudChkaXNwYXRjaGVyLT5ub2RlKCksIG1fb2xkRm9jdXNlZE5vZGUsIGRpc3Bh
dGNoZXItPmVuc3VyZUV2ZW50Q29udGV4dEFuY2VzdG9ycyhldmVudCgpKSk7CiAgICAgcmV0dXJu
IEV2ZW50RGlzcGF0Y2hNZWRpYXRvcjo6ZGlzcGF0Y2hFdmVudChkaXNwYXRjaGVyKTsKIH0KIApA
QCAtMTQ1LDcgKzE0Niw3IEBAIEZvY3VzT3V0RXZlbnREaXNwYXRjaE1lZGlhdG9yOjpGb2N1c091
dEV2ZW50RGlzcGF0Y2hNZWRpYXRvcihQYXNzUmVmUHRyPEV2ZW50PiBlCiAKIGJvb2wgRm9jdXNP
dXRFdmVudERpc3BhdGNoTWVkaWF0b3I6OmRpc3BhdGNoRXZlbnQoRXZlbnREaXNwYXRjaGVyKiBk
aXNwYXRjaGVyKSBjb25zdAogewotICAgIGRpc3BhdGNoZXItPmFkanVzdFJlbGF0ZWRUYXJnZXQo
ZXZlbnQoKSwgbV9uZXdGb2N1c2VkTm9kZSk7CisgICAgRXZlbnRSZXRhcmdldGVyOjphZGp1c3RG
b3JGb2N1c0V2ZW50KGRpc3BhdGNoZXItPm5vZGUoKSwgbV9uZXdGb2N1c2VkTm9kZSwgZGlzcGF0
Y2hlci0+ZW5zdXJlRXZlbnRDb250ZXh0QW5jZXN0b3JzKGV2ZW50KCkpKTsKICAgICByZXR1cm4g
RXZlbnREaXNwYXRjaE1lZGlhdG9yOjpkaXNwYXRjaEV2ZW50KGRpc3BhdGNoZXIpOwogfQogCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9ySW5zdHJ1bWVudGF0
aW9uLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JJbnN0cnVtZW50YXRp
b24uY3BwCmluZGV4IGExZjUwMWQyNDA1NThiOGNlYjhjYjBkZWYxMDA2ZGFiNWNjMDg5ZDUuLjQy
ZDM3Mjg0YzY1ZDA2NjQ3ZDU0MzVjNTI5NzViNzFiMDdkOWQ2OGIgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JJbnN0cnVtZW50YXRpb24uY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JJbnN0cnVtZW50YXRpb24uY3BwCkBAIC05
Miw3ICs5Miw3IEBAIHN0YXRpYyBIYXNoU2V0PEluc3RydW1lbnRpbmdBZ2VudHMqPiogaW5zdHJ1
bWVudGluZ0FnZW50c1NldCA9IDA7CiAKIGludCBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OnNf
ZnJvbnRlbmRDb3VudGVyID0gMDsKIAotc3RhdGljIGJvb2wgZXZlbnRIYXNMaXN0ZW5lcnMoY29u
c3QgQXRvbWljU3RyaW5nJiBldmVudFR5cGUsIERPTVdpbmRvdyogd2luZG93LCBOb2RlKiBub2Rl
LCBjb25zdCBWZWN0b3I8RXZlbnRDb250ZXh0PiYgYW5jZXN0b3JzKQorc3RhdGljIGJvb2wgZXZl
bnRIYXNMaXN0ZW5lcnMoY29uc3QgQXRvbWljU3RyaW5nJiBldmVudFR5cGUsIERPTVdpbmRvdyog
d2luZG93LCBOb2RlKiBub2RlLCBjb25zdCBFdmVudENvbnRleHRBbmNlc3RvcnMmIGFuY2VzdG9y
cykKIHsKICAgICBpZiAod2luZG93ICYmIHdpbmRvdy0+aGFzRXZlbnRMaXN0ZW5lcnMoZXZlbnRU
eXBlKSkKICAgICAgICAgcmV0dXJuIHRydWU7CkBAIC0xMDEsNyArMTAxLDcgQEAgc3RhdGljIGJv
b2wgZXZlbnRIYXNMaXN0ZW5lcnMoY29uc3QgQXRvbWljU3RyaW5nJiBldmVudFR5cGUsIERPTVdp
bmRvdyogd2luZG93LAogICAgICAgICByZXR1cm4gdHJ1ZTsKIAogICAgIGZvciAoc2l6ZV90IGkg
PSAwOyBpIDwgYW5jZXN0b3JzLnNpemUoKTsgaSsrKSB7Ci0gICAgICAgIE5vZGUqIGFuY2VzdG9y
ID0gYW5jZXN0b3JzW2ldLm5vZGUoKTsKKyAgICAgICAgTm9kZSogYW5jZXN0b3IgPSBhbmNlc3Rv
cnNbaV0tPm5vZGUoKTsKICAgICAgICAgaWYgKGFuY2VzdG9yLT5oYXNFdmVudExpc3RlbmVycyhl
dmVudFR5cGUpKQogICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQpAQCAtMzg2LDcgKzM4
Niw3IEBAIHZvaWQgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpkaWREaXNwYXRjaFhIUlJlYWR5
U3RhdGVDaGFuZ2VFdmVudEltcGwoY29uc3QgSW5zCiAgICAgICAgIHRpbWVsaW5lQWdlbnQtPmRp
ZERpc3BhdGNoWEhSUmVhZHlTdGF0ZUNoYW5nZUV2ZW50KCk7CiB9CiAKLUluc3BlY3Rvckluc3Ry
dW1lbnRhdGlvbkNvb2tpZSBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OndpbGxEaXNwYXRjaEV2
ZW50SW1wbChJbnN0cnVtZW50aW5nQWdlbnRzKiBpbnN0cnVtZW50aW5nQWdlbnRzLCBjb25zdCBF
dmVudCYgZXZlbnQsIERPTVdpbmRvdyogd2luZG93LCBOb2RlKiBub2RlLCBjb25zdCBWZWN0b3I8
RXZlbnRDb250ZXh0PiYgYW5jZXN0b3JzLCBEb2N1bWVudCogZG9jdW1lbnQpCitJbnNwZWN0b3JJ
bnN0cnVtZW50YXRpb25Db29raWUgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjp3aWxsRGlzcGF0
Y2hFdmVudEltcGwoSW5zdHJ1bWVudGluZ0FnZW50cyogaW5zdHJ1bWVudGluZ0FnZW50cywgY29u
c3QgRXZlbnQmIGV2ZW50LCBET01XaW5kb3cqIHdpbmRvdywgTm9kZSogbm9kZSwgY29uc3QgRXZl
bnRDb250ZXh0QW5jZXN0b3JzJiBhbmNlc3RvcnMsIERvY3VtZW50KiBkb2N1bWVudCkKIHsKICAg
ICBpbnQgdGltZWxpbmVBZ2VudElkID0gMDsKICAgICBJbnNwZWN0b3JUaW1lbGluZUFnZW50KiB0
aW1lbGluZUFnZW50ID0gaW5zdHJ1bWVudGluZ0FnZW50cy0+aW5zcGVjdG9yVGltZWxpbmVBZ2Vu
dCgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3Rvckluc3Ry
dW1lbnRhdGlvbi5oIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3Rvckluc3RydW1l
bnRhdGlvbi5oCmluZGV4IDFmYThkZmIzYTA2ZDBjMTZjNmE1MzhmOWUyNTIwMDY1NDNjZDNkMmEu
LjEwYTNjOWY0NDE4MTkwY2Y1YTQ3ZjczN2RmYTVhYzMxZDg0MDA4MzggMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JJbnN0cnVtZW50YXRpb24uaAorKysgYi9T
b3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uLmgKQEAgLTM1
LDYgKzM1LDcgQEAKICNpbmNsdWRlICJDb25zb2xlQVBJVHlwZXMuaCIKICNpbmNsdWRlICJDb25z
b2xlVHlwZXMuaCIKICNpbmNsdWRlICJFbGVtZW50LmgiCisjaW5jbHVkZSAiRXZlbnRDb250ZXh0
LmgiCiAjaW5jbHVkZSAiRnJhbWUuaCIKICNpbmNsdWRlICJIaXRUZXN0UmVzdWx0LmgiCiAjaW5j
bHVkZSAiUGFnZS5oIgpAQCAtMTQzLDcgKzE0NCw3IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgdm9p
ZCBkaWRDYWxsRnVuY3Rpb24oY29uc3QgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uQ29va2llJik7
CiAgICAgc3RhdGljIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbkNvb2tpZSB3aWxsRGlzcGF0Y2hY
SFJSZWFkeVN0YXRlQ2hhbmdlRXZlbnQoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIFhNTEh0dHBS
ZXF1ZXN0Kik7CiAgICAgc3RhdGljIHZvaWQgZGlkRGlzcGF0Y2hYSFJSZWFkeVN0YXRlQ2hhbmdl
RXZlbnQoY29uc3QgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uQ29va2llJik7Ci0gICAgc3RhdGlj
IEluc3BlY3Rvckluc3RydW1lbnRhdGlvbkNvb2tpZSB3aWxsRGlzcGF0Y2hFdmVudChEb2N1bWVu
dCosIGNvbnN0IEV2ZW50JiBldmVudCwgRE9NV2luZG93KiB3aW5kb3csIE5vZGUqIG5vZGUsIGNv
bnN0IFZlY3RvcjxFdmVudENvbnRleHQ+JiBhbmNlc3RvcnMpOworICAgIHN0YXRpYyBJbnNwZWN0
b3JJbnN0cnVtZW50YXRpb25Db29raWUgd2lsbERpc3BhdGNoRXZlbnQoRG9jdW1lbnQqLCBjb25z
dCBFdmVudCYsIERPTVdpbmRvdyosIE5vZGUqLCBjb25zdCBFdmVudENvbnRleHRBbmNlc3RvcnMm
KTsKICAgICBzdGF0aWMgdm9pZCBkaWREaXNwYXRjaEV2ZW50KGNvbnN0IEluc3BlY3Rvckluc3Ry
dW1lbnRhdGlvbkNvb2tpZSYpOwogICAgIHN0YXRpYyBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb25D
b29raWUgd2lsbEhhbmRsZUV2ZW50KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBFdmVudCopOwog
ICAgIHN0YXRpYyB2b2lkIGRpZEhhbmRsZUV2ZW50KGNvbnN0IEluc3BlY3Rvckluc3RydW1lbnRh
dGlvbkNvb2tpZSYpOwpAQCAtMzQ3LDcgKzM0OCw3IEBAIHByaXZhdGU6CiAgICAgc3RhdGljIHZv
aWQgZGlkQ2FsbEZ1bmN0aW9uSW1wbChjb25zdCBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb25Db29r
aWUmKTsKICAgICBzdGF0aWMgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uQ29va2llIHdpbGxEaXNw
YXRjaFhIUlJlYWR5U3RhdGVDaGFuZ2VFdmVudEltcGwoSW5zdHJ1bWVudGluZ0FnZW50cyosIFhN
TEh0dHBSZXF1ZXN0KiwgU2NyaXB0RXhlY3V0aW9uQ29udGV4dCopOwogICAgIHN0YXRpYyB2b2lk
IGRpZERpc3BhdGNoWEhSUmVhZHlTdGF0ZUNoYW5nZUV2ZW50SW1wbChjb25zdCBJbnNwZWN0b3JJ
bnN0cnVtZW50YXRpb25Db29raWUmKTsKLSAgICBzdGF0aWMgSW5zcGVjdG9ySW5zdHJ1bWVudGF0
aW9uQ29va2llIHdpbGxEaXNwYXRjaEV2ZW50SW1wbChJbnN0cnVtZW50aW5nQWdlbnRzKiwgY29u
c3QgRXZlbnQmLCBET01XaW5kb3cqLCBOb2RlKiwgY29uc3QgVmVjdG9yPEV2ZW50Q29udGV4dD4m
IGFuY2VzdG9ycywgRG9jdW1lbnQqKTsKKyAgICBzdGF0aWMgSW5zcGVjdG9ySW5zdHJ1bWVudGF0
aW9uQ29va2llIHdpbGxEaXNwYXRjaEV2ZW50SW1wbChJbnN0cnVtZW50aW5nQWdlbnRzKiwgY29u
c3QgRXZlbnQmLCBET01XaW5kb3cqLCBOb2RlKiwgY29uc3QgRXZlbnRDb250ZXh0QW5jZXN0b3Jz
JiwgRG9jdW1lbnQqKTsKICAgICBzdGF0aWMgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uQ29va2ll
IHdpbGxIYW5kbGVFdmVudEltcGwoSW5zdHJ1bWVudGluZ0FnZW50cyosIEV2ZW50Kik7CiAgICAg
c3RhdGljIHZvaWQgZGlkSGFuZGxlRXZlbnRJbXBsKGNvbnN0IEluc3BlY3Rvckluc3RydW1lbnRh
dGlvbkNvb2tpZSYpOwogICAgIHN0YXRpYyB2b2lkIGRpZERpc3BhdGNoRXZlbnRJbXBsKGNvbnN0
IEluc3BlY3Rvckluc3RydW1lbnRhdGlvbkNvb2tpZSYpOwpAQCAtODY0LDcgKzg2NSw3IEBAIGlu
bGluZSB2b2lkIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6ZGlkRGlzcGF0Y2hYSFJSZWFkeVN0
YXRlQ2hhbmdlRXZlbnQoY29uc3QKICNlbmRpZgogfQogCi1pbmxpbmUgSW5zcGVjdG9ySW5zdHJ1
bWVudGF0aW9uQ29va2llIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6d2lsbERpc3BhdGNoRXZl
bnQoRG9jdW1lbnQqIGRvY3VtZW50LCBjb25zdCBFdmVudCYgZXZlbnQsIERPTVdpbmRvdyogd2lu
ZG93LCBOb2RlKiBub2RlLCBjb25zdCBWZWN0b3I8RXZlbnRDb250ZXh0PiYgYW5jZXN0b3JzKQor
aW5saW5lIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbkNvb2tpZSBJbnNwZWN0b3JJbnN0cnVtZW50
YXRpb246OndpbGxEaXNwYXRjaEV2ZW50KERvY3VtZW50KiBkb2N1bWVudCwgY29uc3QgRXZlbnQm
IGV2ZW50LCBET01XaW5kb3cqIHdpbmRvdywgTm9kZSogbm9kZSwgY29uc3QgRXZlbnRDb250ZXh0
QW5jZXN0b3JzJiBhbmNlc3RvcnMpCiB7CiAjaWYgRU5BQkxFKElOU1BFQ1RPUikKICAgICBGQVNU
X1JFVFVSTl9JRl9OT19GUk9OVEVORFMoSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uQ29va2llKCkp
Owo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>188277</attachid>
            <date>2013-02-14 00:45:28 -0800</date>
            <delta_ts>2013-02-14 03:24:47 -0800</delta_ts>
            <desc>Rabased.</desc>
            <filename>bug-109156-20130214174156.patch</filename>
            <type>text/plain</type>
            <size>39424</size>
            <attacher name="Hayato Ito">hayato</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTQyODUzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZjc1Y2IzYjYxMzgyYTk1
MGY1MTNlYzZmMzE3MTgwNjZmMmRhNWVjZC4uMWY4NDVhOTcwZTI3MzZlZTI1ZTkxMjUyOTQyNWFl
NmU3NTBhZGU5YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDYxIEBACisyMDEzLTAyLTA3ICBIYXlh
dG8gSXRvICA8aGF5YXRvQGNocm9taXVtLm9yZz4KKworICAgICAgICBGYWN0b3IgRXZlbnQgcmV0
YXJnZXRpbmcgY29kZS4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTEwOTE1NgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisg
ICAgICAgIFRvIHN1cG9vcnQgVG91Y2ggZXZlbnQgcmV0YXJnZXRpbmcgKGJ1ZyAxMDc4MDApLCB3
ZSBoYXZlIHRvIGZhY3RvcgorICAgICAgICBldmVudCByZXRhcmdldGluZyBjb2RlIHNvIHRoYXQg
aXQgY2FuIHN1cHBvcnQgbm90IG9ubHkgTW91c2VFdmVudCwKKyAgICAgICAgYnV0IGFsc28gb3Ro
ZXIgZXZlbnRzLgorCisgICAgICAgIE5ldyBjbGFzcywgRXZlbnRSZXRhcmdldGVyLCB3YXMgaW50
cm9kdWNlZC4gRnJvbSBub3csCisgICAgICAgIEV2ZW50RGlzcGF0Y2hNZWRpYXRvciAoYW5kIGl0
cyBzdWJjbGFzc2VzKSBzaG91bGQgY2FsbCwgaWYgZXZlbnQKKyAgICAgICAgcmV0YXJnZXRpbmcg
aXMgcmVxdWlyZWQsIGFuIGFwcHJvcHJpYXRlIGZ1bmN0aW9uIHByb3ZpZGVkIGluCisgICAgICAg
IEV2ZW50UmV0YXJnZXRlciByYXRoZXIgdGhhbiBjYWxsaW5nCisgICAgICAgIEV2ZW50RGlzcGF0
Y2hlcjo6YWRqdXN0UmVsYXRlZFRhcmdldCgpLCB3aGljaCB3YXMgcmVtb3ZlZCBpbiB0aGlzCisg
ICAgICAgIHBhdGNoLgorCisgICAgICAgIE5vIHRlc3RzLiBObyBjaGFuZ2UgaW4gYmVoYXZpb3Iu
CisKKyAgICAgICAgKiBDTWFrZUxpc3RzLnR4dDoKKyAgICAgICAgKiBHTlVtYWtlZmlsZS5saXN0
LmFtOgorICAgICAgICAqIFRhcmdldC5wcmk6CisgICAgICAgICogV2ViQ29yZS5neXBpOgorICAg
ICAgICAqIFdlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBkb20v
RXZlbnREaXNwYXRjaE1lZGlhdG9yLmNwcDoKKyAgICAgICAgKiBkb20vRXZlbnREaXNwYXRjaGVy
LmNwcDoKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6RXZlbnREaXNwYXRj
aGVyOjplbnN1cmVFdmVudFBhdGgpOiBDaGFuZ2VkIHRvIHJldHVybiBhbiBFdmVudFBhdGgsIHdo
aWNoIHdpbGwgYmUgdXNlZCBieSBFdmVudFJldGFyZ2V0ZXIuCisgICAgICAgIChXZWJDb3JlOjpF
dmVudERpc3BhdGNoZXI6OmRpc3BhdGNoU2NvcGVkRXZlbnQpOgorICAgICAgICAoV2ViQ29yZTo6
RXZlbnREaXNwYXRjaGVyOjpkaXNwYXRjaEV2ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkV2ZW50
RGlzcGF0Y2hlcjo6ZGlzcGF0Y2hFdmVudFBvc3RQcm9jZXNzKToKKyAgICAgICAgKiBkb20vRXZl
bnREaXNwYXRjaGVyLmg6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKEV2ZW50RGlzcGF0
Y2hlcik6CisgICAgICAgICogZG9tL0V2ZW50UmV0YXJnZXRlci5jcHA6IEFkZGVkLgorICAgICAg
ICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJDb3JlOjppblRoZVNhbWVTY29wZSk6CisgICAgICAg
IChXZWJDb3JlOjpkZXRlcm1pbmVEaXNwYXRjaEJlaGF2aW9yKToKKyAgICAgICAgKFdlYkNvcmU6
OkV2ZW50UmV0YXJnZXRlcjo6Y2FsY3VsYXRlRXZlbnRQYXRoKTogRmFjdG9yZWQgb3V0IGZyb20g
RXZlbnREaXNwYXRjaGVyOjplbnN1cmVFdmVudFBhdGgoKS4KKyAgICAgICAgKFdlYkNvcmU6OkV2
ZW50UmV0YXJnZXRlcjo6YWRqdXN0Rm9yTW91c2VFdmVudCk6CisgICAgICAgIChXZWJDb3JlOjpF
dmVudFJldGFyZ2V0ZXI6OmFkanVzdEZvckZvY3VzRXZlbnQpOgorICAgICAgICAoV2ViQ29yZTo6
RXZlbnRSZXRhcmdldGVyOjphZGp1c3RGb3JSZWxhdGVkVGFyZ2V0KToKKyAgICAgICAgKFdlYkNv
cmU6OkV2ZW50UmV0YXJnZXRlcjo6Y2FsY3VsYXRlQWRqdXN0ZWROb2Rlcyk6IEZhY3RvcmVkIG91
dCBmcm9tIEV2ZW50UmVsYXRlZFRhcmdldEFqdXN0ZXI6OmFkanVzdFJlbGF0ZWRUYXJnZXQoKS4K
KyAgICAgICAgKFdlYkNvcmU6OkV2ZW50UmV0YXJnZXRlcjo6YnVpbGRSZWxhdGVkTm9kZU1hcCk6
IEZhY3RvcmVkIG91dCBmcm9tIEV2ZW50UmVsYXRlZFRhcmdldEFqdXN0ZXI6OmFkanVzdFJlbGF0
ZWRUYXJnZXQoKS4KKyAgICAgICAgKFdlYkNvcmU6OkV2ZW50UmV0YXJnZXRlcjo6ZmluZFJlbGF0
ZWROb2RlKToKKyAgICAgICAgKiBkb20vRXZlbnRSZXRhcmdldGVyLmg6IEFkZGVkLgorICAgICAg
ICAoV2ViQ29yZSk6CisgICAgICAgIChFdmVudFJldGFyZ2V0ZXIpOgorICAgICAgICAoV2ViQ29y
ZTo6RXZlbnRSZXRhcmdldGVyOjpldmVudFRhcmdldFJlc3BlY3RpbmdUYXJnZXRSdWxlcyk6Cisg
ICAgICAgICogZG9tL0ZvY3VzRXZlbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Rm9jdXNFdmVu
dERpc3BhdGNoTWVkaWF0b3I6OmRpc3BhdGNoRXZlbnQpOiBDaGFuZ2VkIHRvIGNhbGwgRXZlbnRS
ZXRhcmdldGVyOjphZGp1c3RGb3JGb2N1c0V2ZW50KCkuCisgICAgICAgIChXZWJDb3JlOjpCbHVy
RXZlbnREaXNwYXRjaE1lZGlhdG9yOjpkaXNwYXRjaEV2ZW50KTogRGl0dG8uCisgICAgICAgIChX
ZWJDb3JlOjpGb2N1c0luRXZlbnREaXNwYXRjaE1lZGlhdG9yOjpkaXNwYXRjaEV2ZW50KTogRGl0
dG8uCisgICAgICAgIChXZWJDb3JlOjpGb2N1c091dEV2ZW50RGlzcGF0Y2hNZWRpYXRvcjo6ZGlz
cGF0Y2hFdmVudCk6IERpdHRvLgorICAgICAgICAqIGRvbS9Nb3VzZUV2ZW50LmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6Ok1vdXNlRXZlbnREaXNwYXRjaE1lZGlhdG9yOjpkaXNwYXRjaEV2ZW50KTog
Q2hhbmdlZCB0byBjYWxsIEV2ZW50UmV0YXJnZXRlcjo6YWRqdXN0Rm9yTW91c2VFdmVudCgpLgor
CiAyMDEzLTAyLTEzICBLZW50YXJvIEhhcmEgIDxoYXJha2VuQGNocm9taXVtLm9yZz4KIAogICAg
ICAgICBbVjhdIEdlbmVyYXRlIHdyYXBwZXIgbWV0aG9kcyBmb3IgY3VzdG9tIG1ldGhvZHMKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0IGIvU291cmNlL1dlYkNvcmUv
Q01ha2VMaXN0cy50eHQKaW5kZXggNWVjMmE3NTZhMjI3ZDE5M2Y2N2E4M2YwMDlkZDUzODhhODlh
MThiZS4uMTllZWI3NWFiYmY0YTI2M2NhOTZkZWFkYTM1Y2E2ODY2MmQwMjRkNCAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQKKysrIGIvU291cmNlL1dlYkNvcmUvQ01h
a2VMaXN0cy50eHQKQEAgLTExNzQsNiArMTE3NCw3IEBAIHNldChXZWJDb3JlX1NPVVJDRVMKICAg
ICBkb20vRXZlbnRFeGNlcHRpb24uY3BwCiAgICAgZG9tL0V2ZW50TGlzdGVuZXJNYXAuY3BwCiAg
ICAgZG9tL0V2ZW50TmFtZXMuY3BwCisgICAgZG9tL0V2ZW50UmV0YXJnZXRlci5jcHAKICAgICBk
b20vRXZlbnRUYXJnZXQuY3BwCiAgICAgZG9tL0V4Y2VwdGlvbkJhc2UuY3BwCiAgICAgZG9tL0V4
Y2VwdGlvbkNvZGVQbGFjZWhvbGRlci5jcHAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0dO
VW1ha2VmaWxlLmxpc3QuYW0gYi9Tb3VyY2UvV2ViQ29yZS9HTlVtYWtlZmlsZS5saXN0LmFtCmlu
ZGV4IGIwZmIxMTg0MTNmZmNmOTY2Nzk2ZmQ5NzQ0OWE3ZDZkYzA1NjUyMmMuLjQ0ZGRkYzM2YmVi
N2JmODI0MjI5OTIwMmFjY2Y0ZGQ3OTI4ODEyNTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L0dOVW1ha2VmaWxlLmxpc3QuYW0KKysrIGIvU291cmNlL1dlYkNvcmUvR05VbWFrZWZpbGUubGlz
dC5hbQpAQCAtMjg2OCw2ICsyODY4LDcgQEAgd2ViY29yZV9zb3VyY2VzICs9IFwKIAlTb3VyY2Uv
V2ViQ29yZS9kb20vRXZlbnRMaXN0ZW5lck1hcC5oIFwKIAlTb3VyY2UvV2ViQ29yZS9kb20vRXZl
bnROYW1lcy5jcHAgXAogCVNvdXJjZS9XZWJDb3JlL2RvbS9FdmVudE5hbWVzLmggXAorCVNvdXJj
ZS9XZWJDb3JlL2RvbS9FdmVudFJldGFyZ2V0ZXIuY3BwIFwKIAlTb3VyY2UvV2ViQ29yZS9kb20v
RXZlbnRUYXJnZXQuY3BwIFwKIAlTb3VyY2UvV2ViQ29yZS9kb20vRXZlbnRUYXJnZXQuaCBcCiAJ
U291cmNlL1dlYkNvcmUvZG9tL0V2ZW50UXVldWUuaCBcCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9UYXJnZXQucHJpIGIvU291cmNlL1dlYkNvcmUvVGFyZ2V0LnByaQppbmRleCBhNzg1ZGQ1
ZjkyMjljMzIxNWE4ZWI4MjExYWIzNTVkYTQ0NGI5OWY5Li42YTE4ZmI3MjAyOGIwZmFmYzU0NDgz
N2Y3ZjNmMjQ1YTFlY2MyZTFjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9UYXJnZXQucHJp
CisrKyBiL1NvdXJjZS9XZWJDb3JlL1RhcmdldC5wcmkKQEAgLTQxMCw2ICs0MTAsNyBAQCBTT1VS
Q0VTICs9IFwKICAgICBkb20vRXZlbnRFeGNlcHRpb24uY3BwIFwKICAgICBkb20vRXZlbnRMaXN0
ZW5lck1hcC5jcHAgXAogICAgIGRvbS9FdmVudE5hbWVzLmNwcCBcCisgICAgZG9tL0V2ZW50UmV0
YXJnZXRlci5jcHAgXAogICAgIGRvbS9FdmVudFRhcmdldC5jcHAgXAogICAgIGRvbS9FeGNlcHRp
b25CYXNlLmNwcCBcCiAgICAgZG9tL0V4Y2VwdGlvbkNvZGVQbGFjZWhvbGRlci5jcHAgXApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpIGIvU291cmNlL1dlYkNvcmUvV2Vi
Q29yZS5neXBpCmluZGV4IDg1ODRiOTY2M2YwZDVhYWMzZmFmMDM1ZDczYjA2NDljYzNlOWIyNTMu
LjhlZjg0MTcwNWY5ZmMzM2NmNWI3M2Y5MjQzZGE2ODE4MDRjZDIwNWQgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQorKysgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5
cGkKQEAgLTI4MzAsNiArMjgzMCw4IEBACiAgICAgICAgICAgICAnZG9tL0V2ZW50RGlzcGF0Y2hN
ZWRpYXRvci5oJywKICAgICAgICAgICAgICdkb20vRXZlbnREaXNwYXRjaGVyLmNwcCcsCiAgICAg
ICAgICAgICAnZG9tL0V2ZW50RGlzcGF0Y2hlci5oJywKKyAgICAgICAgICAgICdkb20vRXZlbnRS
ZXRhcmdldGVyLmNwcCcsCisgICAgICAgICAgICAnZG9tL0V2ZW50UmV0YXJnZXRlci5oJywKICAg
ICAgICAgICAgICdkb20vRXZlbnRFeGNlcHRpb24uY3BwJywKICAgICAgICAgICAgICdkb20vRXZl
bnRFeGNlcHRpb24uaCcsCiAgICAgICAgICAgICAnZG9tL0V2ZW50TGlzdGVuZXJNYXAuY3BwJywK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvaiBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpp
bmRleCA5MDQ3NmFiNDhiNTA0YjJiOTZjMGM2M2VhNjdlM2FiZjJlMTUyZTMyLi5jMTA2YzM5MzNl
Y2EyYjkyZGQxZWRiYjg0NTIxOWI0MTdiYjI3NGU4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIvU291cmNlL1dlYkNvcmUv
V2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCkBAIC0xNDQ3LDYgKzE0NDcsOCBAQAog
CQk0QTRGNDhBQTE2QjBERkMwMDBFREJCMjkgLyogRG9jdW1lbnRSdWxlU2V0cy5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNEE0RjQ4QTgxNkIwREZDMDAw
RURCQjI5IC8qIERvY3VtZW50UnVsZVNldHMuaCAqLzsgfTsKIAkJNEE1QTJBREIxNjFFN0UwMDAw
NTg4OUREIC8qIFdlYlNvY2tldEV4dGVuc2lvblBhcnNlci5jcHAgaW4gU291cmNlcyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0QTVBMkFEOTE2MUU3RTAwMDA1ODg5REQgLyog
V2ViU29ja2V0RXh0ZW5zaW9uUGFyc2VyLmNwcCAqLzsgfTsKIAkJNEE1QTJBREMxNjFFN0UwMDAw
NTg4OUREIC8qIFdlYlNvY2tldEV4dGVuc2lvblBhcnNlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNEE1QTJBREExNjFFN0UwMDAwNTg4OUREIC8qIFdl
YlNvY2tldEV4dGVuc2lvblBhcnNlci5oICovOyB9OworCQk0QTVDQjFDNTE2QzNBNUZEMDBBQjI4
ODYgLyogRXZlbnRSZXRhcmdldGVyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDRBNUNCMUMzMTZDM0E1RkQwMEFCMjg4NiAvKiBFdmVudFJldGFyZ2V0
ZXIuY3BwICovOyB9OworCQk0QTVDQjFDNjE2QzNBNUZEMDBBQjI4ODYgLyogRXZlbnRSZXRhcmdl
dGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0QTVD
QjFDNDE2QzNBNUZEMDBBQjI4ODYgLyogRXZlbnRSZXRhcmdldGVyLmggKi87IH07CiAJCTRBNkEw
QzVCMTUyMzJGMjQwMEIwOUM2RSAvKiBDb21wb3NlZFNoYWRvd1RyZWVXYWxrZXIuY3BwIGluIFNv
dXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNEE2QTBDNTkxNTIzMkYy
NDAwQjA5QzZFIC8qIENvbXBvc2VkU2hhZG93VHJlZVdhbGtlci5jcHAgKi87IH07CiAJCTRBNkEw
QzVDMTUyMzJGMjQwMEIwOUM2RSAvKiBDb21wb3NlZFNoYWRvd1RyZWVXYWxrZXIuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDRBNkEwQzVBMTUyMzJGMjQw
MEIwOUM2RSAvKiBDb21wb3NlZFNoYWRvd1RyZWVXYWxrZXIuaCAqLzsgfTsKIAkJNEE2RTlGQzMx
M0MxN0QxRDAwNDZBN0Y4IC8qIEZvbnRGZWF0dXJlVmFsdWUuY3BwIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNEE2RTlGQzExM0MxN0QxRDAwNDZBN0Y4IC8q
IEZvbnRGZWF0dXJlVmFsdWUuY3BwICovOyB9OwpAQCAtODg2MSw2ICs4ODYzLDggQEAKIAkJNEE0
RjQ4QTgxNkIwREZDMDAwRURCQjI5IC8qIERvY3VtZW50UnVsZVNldHMuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gRG9jdW1lbnRSdWxlU2V0cy5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQk0QTVBMkFEOTE2MUU3RTAwMDA1ODg5REQgLyogV2ViU29ja2V0RXh0ZW5z
aW9uUGFyc2VyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IFdlYlNv
Y2tldEV4dGVuc2lvblBhcnNlci5jcHA7IHBhdGggPSBNb2R1bGVzL3dlYnNvY2tldHMvV2ViU29j
a2V0RXh0ZW5zaW9uUGFyc2VyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNEE1
QTJBREExNjFFN0UwMDAwNTg4OUREIC8qIFdlYlNvY2tldEV4dGVuc2lvblBhcnNlci5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBXZWJTb2NrZXRFeHRlbnNpb25QYXJzZXIuaDsg
cGF0aCA9IE1vZHVsZXMvd2Vic29ja2V0cy9XZWJTb2NrZXRFeHRlbnNpb25QYXJzZXIuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNEE1Q0IxQzMxNkMzQTVGRDAwQUIyODg2IC8qIEV2
ZW50UmV0YXJnZXRlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBF
dmVudFJldGFyZ2V0ZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk0QTVDQjFD
NDE2QzNBNUZEMDBBQjI4ODYgLyogRXZlbnRSZXRhcmdldGVyLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IEV2ZW50UmV0YXJnZXRlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQk0QTZBMEM1OTE1MjMyRjI0MDBCMDlDNkUgLyogQ29tcG9zZWRTaGFkb3dUcmVlV2Fs
a2VyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IENvbXBvc2VkU2hh
ZG93VHJlZVdhbGtlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTRBNkEwQzVB
MTUyMzJGMjQwMEIwOUM2RSAvKiBDb21wb3NlZFNoYWRvd1RyZWVXYWxrZXIuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQ29tcG9zZWRTaGFkb3dUcmVlV2Fsa2VyLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTRBNkU5RkMxMTNDMTdEMUQwMDQ2QTdGOCAvKiBGb250
RmVhdHVyZVZhbHVlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEZv
bnRGZWF0dXJlVmFsdWUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMjI1Mzcs
NiArMjI1NDEsOCBAQAogCQkJCTkzOTg4NUMyMDhCN0UzRDEwMEU3MDdDNCAvKiBFdmVudE5hbWVz
LmggKi8sCiAJCQkJQkM5QTYxNDIxNDY4NTlEOTAwNjA1N0ZEIC8qIEV2ZW50TmFtZXMuaW4gKi8s
CiAJCQkJOEY2NzU2MTkxMjg4QjE3QjAwNDdBQ0EzIC8qIEV2ZW50UXVldWUuaCAqLywKKwkJCQk0
QTVDQjFDMzE2QzNBNUZEMDBBQjI4ODYgLyogRXZlbnRSZXRhcmdldGVyLmNwcCAqLywKKwkJCQk0
QTVDQjFDNDE2QzNBNUZEMDBBQjI4ODYgLyogRXZlbnRSZXRhcmdldGVyLmggKi8sCiAJCQkJQ0U1
Q0IxQjMxNEVEQUI2RjAwQkIyNzk1IC8qIEV2ZW50U2VuZGVyLmggKi8sCiAJCQkJRTEyRURCRTkw
QjMwOEUwQjAwMjcwNEI2IC8qIEV2ZW50VGFyZ2V0LmNwcCAqLywKIAkJCQlFMTJFREI3QTBCMzA4
QTc4MDAyNzA0QjYgLyogRXZlbnRUYXJnZXQuaCAqLywKQEAgLTI0MjYwLDYgKzI0MjY2LDcgQEAK
IAkJCQk5Mzk4ODVDNDA4QjdFM0QxMDBFNzA3QzQgLyogRXZlbnROYW1lcy5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJOEY2NzU2MUIxMjg4QjE3QjAwNDdBQ0EzIC8qIEV2ZW50UXVldWUuaCBpbiBIZWFk
ZXJzICovLAogCQkJCUUwRkVGMzcyQjE3QzUzRUFDMUMxRkJFRSAvKiBFdmVudFNvdXJjZS5oIGlu
IEhlYWRlcnMgKi8sCisJCQkJNEE1Q0IxQzYxNkMzQTVGRDAwQUIyODg2IC8qIEV2ZW50UmV0YXJn
ZXRlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRTEyRURCN0IwQjMwOEE3ODAwMjcwNEI2IC8qIEV2
ZW50VGFyZ2V0LmggaW4gSGVhZGVycyAqLywKIAkJCQk5N0FBM0NBNTE0NTIzN0NDMDAzRTFEQTYg
LyogRXZlbnRUYXJnZXRIZWFkZXJzLmggaW4gSGVhZGVycyAqLywKIAkJCQk5N0FBM0NBNjE0NTIz
N0NDMDAzRTFEQTYgLyogRXZlbnRUYXJnZXRJbnRlcmZhY2VzLmggaW4gSGVhZGVycyAqLywKQEAg
LTI3NTk2LDYgKzI3NjAzLDcgQEAKIAkJCQkxQ0ExOUUwNTBEQzI1NTk1MDA2NUE5OTQgLyogRXZl
bnRMb29wTWFjLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJOTM5ODg1QzMwOEI3RTNEMTAwRTcwN0M0
IC8qIEV2ZW50TmFtZXMuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJRTBGRUYzNzJCMjdDNTNFQUMx
QzFGQkVFIC8qIEV2ZW50U291cmNlLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTRBNUNCMUM1MTZD
M0E1RkQwMEFCMjg4NiAvKiBFdmVudFJldGFyZ2V0ZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJ
RTEyRURCRUEwQjMwOEUwQjAwMjcwNEI2IC8qIEV2ZW50VGFyZ2V0LmNwcCBpbiBTb3VyY2VzICov
LAogCQkJCUQ2RkRBRUYzMTQ5QzA2MTkwMDM3QjFFNCAvKiBFdmVudFRyYWNlci5jcHAgaW4gU291
cmNlcyAqLywKIAkJCQlCQzYwRDhGMjBEMkExMUUwMDBCOTkxOEYgLyogRXhjZXB0aW9uQmFzZS5j
cHAgaW4gU291cmNlcyAqLywKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9FdmVudERp
c3BhdGNoTWVkaWF0b3IuY3BwIGIvU291cmNlL1dlYkNvcmUvZG9tL0V2ZW50RGlzcGF0Y2hNZWRp
YXRvci5jcHAKaW5kZXggZTY4Mzc0MDA3MDQ1MzBjYTVmNTI3OGQwZjhiNjMxOTRkNDE5MzAxYi4u
YTMwOWM2OTU3MDQ0MjY1ZDBiNTNhMDM3OTJmZmI5NTQyMzNhZTUwNyAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvZG9tL0V2ZW50RGlzcGF0Y2hNZWRpYXRvci5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvZG9tL0V2ZW50RGlzcGF0Y2hNZWRpYXRvci5jcHAKQEAgLTMzLDYgKzMzLDcgQEAKIAog
I2luY2x1ZGUgIkV2ZW50LmgiCiAjaW5jbHVkZSAiRXZlbnREaXNwYXRjaGVyLmgiCisjaW5jbHVk
ZSAiRXZlbnRSZXRhcmdldGVyLmgiCiAjaW5jbHVkZSAiTm9kZS5oIgogCiBuYW1lc3BhY2UgV2Vi
Q29yZSB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vRXZlbnREaXNwYXRjaGVyLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9FdmVudERpc3BhdGNoZXIuY3BwCmluZGV4IDc2NTVjN2Nk
ZTcwZTVlODE5YmIyMTA5NWY2NjgwNzRlYWRkOWViZWQuLjRjNmM4MzUzYzg4MDJhY2I3OWM3ZDEw
MzNlNzg4NTA0ZTlmNDhhODggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9FdmVudERp
c3BhdGNoZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9FdmVudERpc3BhdGNoZXIuY3Bw
CkBAIC0zMSw2ICszMSw3IEBACiAjaW5jbHVkZSAiRWxlbWVudFNoYWRvdy5oIgogI2luY2x1ZGUg
IkV2ZW50Q29udGV4dC5oIgogI2luY2x1ZGUgIkV2ZW50RGlzcGF0Y2hNZWRpYXRvci5oIgorI2lu
Y2x1ZGUgIkV2ZW50UmV0YXJnZXRlci5oIgogI2luY2x1ZGUgIkZyYW1lVmlldy5oIgogI2luY2x1
ZGUgIkhUTUxNZWRpYUVsZW1lbnQuaCIKICNpbmNsdWRlICJJbnNlcnRpb25Qb2ludC5oIgpAQCAt
NDIsOTMgKzQzLDEwIEBACiAjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgogI2luY2x1ZGUgPHd0Zi9V
bnVzZWRQYXJhbS5oPgogCi0jaWYgRU5BQkxFKFNWRykKLSNpbmNsdWRlICJTVkdFbGVtZW50SW5z
dGFuY2UuaCIKLSNpbmNsdWRlICJTVkdOYW1lcy5oIgotI2luY2x1ZGUgIlNWR1VzZUVsZW1lbnQu
aCIKLSNlbmRpZgotCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIHN0YXRpYyBIYXNoU2V0PE5vZGUq
PiogZ05vZGVzRGlzcGF0Y2hpbmdTaW11bGF0ZWRDbGlja3MgPSAwOwogCi1FdmVudFJlbGF0ZWRU
YXJnZXRBZGp1c3Rlcjo6RXZlbnRSZWxhdGVkVGFyZ2V0QWRqdXN0ZXIoUGFzc1JlZlB0cjxOb2Rl
PiBub2RlLCBQYXNzUmVmUHRyPE5vZGU+IHJlbGF0ZWRUYXJnZXQpCi0gICAgOiBtX25vZGUobm9k
ZSkKLSAgICAsIG1fcmVsYXRlZFRhcmdldChyZWxhdGVkVGFyZ2V0KQotewotICAgIEFTU0VSVCht
X25vZGUpOwotICAgIEFTU0VSVChtX3JlbGF0ZWRUYXJnZXQpOwotfQotCi12b2lkIEV2ZW50UmVs
YXRlZFRhcmdldEFkanVzdGVyOjphZGp1c3QoRXZlbnRQYXRoJiBldmVudFBhdGgpCi17Ci0gICAg
Ly8gU3ludGhldGljIG1vdXNlIGV2ZW50cyBjYW4gaGF2ZSBhIHJlbGF0ZWRUYXJnZXQgd2hpY2gg
aXMgaWRlbnRpY2FsIHRvIHRoZSB0YXJnZXQuCi0gICAgYm9vbCB0YXJnZXRJc0lkZW50aWNhbFRv
VG9SZWxhdGVkVGFyZ2V0ID0gKG1fbm9kZS5nZXQoKSA9PSBtX3JlbGF0ZWRUYXJnZXQuZ2V0KCkp
OwotCi0gICAgVmVjdG9yPEV2ZW50VGFyZ2V0KiwgMzI+IHJlbGF0ZWRUYXJnZXRTdGFjazsKLSAg
ICBUcmVlU2NvcGUqIGxhc3RUcmVlU2NvcGUgPSAwOwotICAgIGZvciAoQW5jZXN0b3JDaGFpbldh
bGtlciB3YWxrZXIobV9yZWxhdGVkVGFyZ2V0LmdldCgpKTsgd2Fsa2VyLmdldCgpOyB3YWxrZXIu
cGFyZW50KCkpIHsKLSAgICAgICAgTm9kZSogbm9kZSA9IHdhbGtlci5nZXQoKTsKLSAgICAgICAg
aWYgKHJlbGF0ZWRUYXJnZXRTdGFjay5pc0VtcHR5KCkpCi0gICAgICAgICAgICByZWxhdGVkVGFy
Z2V0U3RhY2suYXBwZW5kKG5vZGUpOwotICAgICAgICBlbHNlIGlmICh3YWxrZXIuY3Jvc3NpbmdJ
bnNlcnRpb25Qb2ludCgpKQotICAgICAgICAgICAgcmVsYXRlZFRhcmdldFN0YWNrLmFwcGVuZChy
ZWxhdGVkVGFyZ2V0U3RhY2subGFzdCgpKTsKLSAgICAgICAgVHJlZVNjb3BlKiBzY29wZSA9IG5v
ZGUtPnRyZWVTY29wZSgpOwotICAgICAgICAvLyBTa2lwcyBhZGRpbmcgYSBub2RlIHRvIHRoZSBt
YXAgaWYgdHJlZVNjb3BlIGRvZXMgbm90IGNoYW5nZS4gSnVzdCBmb3IgdGhlIHBlcmZvcm1hbmNl
IG9wdGltaXphdGlvbi4KLSAgICAgICAgaWYgKHNjb3BlICE9IGxhc3RUcmVlU2NvcGUpCi0gICAg
ICAgICAgICBtX3JlbGF0ZWRUYXJnZXRNYXAuYWRkKHNjb3BlLCByZWxhdGVkVGFyZ2V0U3RhY2su
bGFzdCgpKTsKLSAgICAgICAgbGFzdFRyZWVTY29wZSA9IHNjb3BlOwotICAgICAgICBpZiAobm9k
ZS0+aXNTaGFkb3dSb290KCkpIHsKLSAgICAgICAgICAgIEFTU0VSVCghcmVsYXRlZFRhcmdldFN0
YWNrLmlzRW1wdHkoKSk7Ci0gICAgICAgICAgICByZWxhdGVkVGFyZ2V0U3RhY2sucmVtb3ZlTGFz
dCgpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgbGFzdFRyZWVTY29wZSA9IDA7Ci0gICAgRXZl
bnRUYXJnZXQqIGFkanVzdGVkUmVsYXRlZFRhcmdldCA9IDA7Ci0gICAgZm9yIChFdmVudFBhdGg6
Oml0ZXJhdG9yIGl0ZXIgPSBldmVudFBhdGguYmVnaW4oKTsgaXRlciA8IGV2ZW50UGF0aC5lbmQo
KTsgKytpdGVyKSB7Ci0gICAgICAgIEFTU0VSVCgoKml0ZXIpLT5pc01vdXNlT3JGb2N1c0V2ZW50
Q29udGV4dCgpKTsKLSAgICAgICAgTW91c2VPckZvY3VzRXZlbnRDb250ZXh0KiBtb3N1ZU9yRm9j
dXNFdmVudENvbnRleHQgPSBzdGF0aWNfY2FzdDxNb3VzZU9yRm9jdXNFdmVudENvbnRleHQqPihp
dGVyLT5nZXQoKSk7Ci0gICAgICAgIFRyZWVTY29wZSogc2NvcGUgPSBtb3N1ZU9yRm9jdXNFdmVu
dENvbnRleHQtPm5vZGUoKS0+dHJlZVNjb3BlKCk7Ci0gICAgICAgIGlmIChzY29wZSA9PSBsYXN0
VHJlZVNjb3BlKSB7Ci0gICAgICAgICAgICAvLyBSZS11c2UgdGhlIHByZXZpb3VzIGFkanVzdGVk
UmVsYXRlZFRhcmdldCBpZiB0cmVlU2NvcGUgZG9lcyBub3QgY2hhbmdlLiBKdXN0IGZvciB0aGUg
cGVyZm9ybWFuY2Ugb3B0aW1pemF0aW9uLgotICAgICAgICAgICAgbW9zdWVPckZvY3VzRXZlbnRD
b250ZXh0LT5zZXRSZWxhdGVkVGFyZ2V0KGFkanVzdGVkUmVsYXRlZFRhcmdldCk7Ci0gICAgICAg
IH0gZWxzZSB7Ci0gICAgICAgICAgICBhZGp1c3RlZFJlbGF0ZWRUYXJnZXQgPSBmaW5kUmVsYXRl
ZFRhcmdldChzY29wZSk7Ci0gICAgICAgICAgICBtb3N1ZU9yRm9jdXNFdmVudENvbnRleHQtPnNl
dFJlbGF0ZWRUYXJnZXQoYWRqdXN0ZWRSZWxhdGVkVGFyZ2V0KTsKLSAgICAgICAgfQotICAgICAg
ICBsYXN0VHJlZVNjb3BlID0gc2NvcGU7Ci0gICAgICAgIGlmICh0YXJnZXRJc0lkZW50aWNhbFRv
VG9SZWxhdGVkVGFyZ2V0KSB7Ci0gICAgICAgICAgICBpZiAobV9ub2RlLT50cmVlU2NvcGUoKS0+
cm9vdE5vZGUoKSA9PSBtb3N1ZU9yRm9jdXNFdmVudENvbnRleHQtPm5vZGUoKSkgewotICAgICAg
ICAgICAgICAgIGV2ZW50UGF0aC5zaHJpbmsoaXRlciArIDEgLSBldmVudFBhdGguYmVnaW4oKSk7
Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0gZWxzZSBp
ZiAobW9zdWVPckZvY3VzRXZlbnRDb250ZXh0LT50YXJnZXQoKSA9PSBhZGp1c3RlZFJlbGF0ZWRU
YXJnZXQpIHsKLSAgICAgICAgICAgIC8vIEV2ZW50IGRpc3BhdGNoaW5nIHNob3VsZCBiZSBzdG9w
cGVkIGhlcmUuCi0gICAgICAgICAgICBldmVudFBhdGguc2hyaW5rKGl0ZXIgLSBldmVudFBhdGgu
YmVnaW4oKSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgIH0KLX0KLQotRXZl
bnRUYXJnZXQqIEV2ZW50UmVsYXRlZFRhcmdldEFkanVzdGVyOjpmaW5kUmVsYXRlZFRhcmdldChU
cmVlU2NvcGUqIHNjb3BlKQotewotICAgIFZlY3RvcjxUcmVlU2NvcGUqLCAzMj4gcGFyZW50VHJl
ZVNjb3BlczsKLSAgICBFdmVudFRhcmdldCogcmVsYXRlZFRhcmdldCA9IDA7Ci0gICAgd2hpbGUg
KHNjb3BlKSB7Ci0gICAgICAgIHBhcmVudFRyZWVTY29wZXMuYXBwZW5kKHNjb3BlKTsKLSAgICAg
ICAgUmVsYXRlZFRhcmdldE1hcDo6Y29uc3RfaXRlcmF0b3IgZm91bmQgPSBtX3JlbGF0ZWRUYXJn
ZXRNYXAuZmluZChzY29wZSk7Ci0gICAgICAgIGlmIChmb3VuZCAhPSBtX3JlbGF0ZWRUYXJnZXRN
YXAuZW5kKCkpIHsKLSAgICAgICAgICAgIHJlbGF0ZWRUYXJnZXQgPSBmb3VuZC0+dmFsdWU7Ci0g
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBzY29wZSA9IHNjb3BlLT5wYXJl
bnRUcmVlU2NvcGUoKTsKLSAgICB9Ci0gICAgZm9yIChWZWN0b3I8VHJlZVNjb3BlKiwgMzI+Ojpp
dGVyYXRvciBpdGVyID0gcGFyZW50VHJlZVNjb3Blcy5iZWdpbigpOyBpdGVyIDwgcGFyZW50VHJl
ZVNjb3Blcy5lbmQoKTsgKytpdGVyKQotICAgICAgbV9yZWxhdGVkVGFyZ2V0TWFwLmFkZCgqaXRl
ciwgcmVsYXRlZFRhcmdldCk7Ci0gICAgcmV0dXJuIHJlbGF0ZWRUYXJnZXQ7Ci19Ci0KIGJvb2wg
RXZlbnREaXNwYXRjaGVyOjpkaXNwYXRjaEV2ZW50KE5vZGUqIG5vZGUsIFBhc3NSZWZQdHI8RXZl
bnREaXNwYXRjaE1lZGlhdG9yPiBtZWRpYXRvcikKIHsKICAgICBBU1NFUlQoIU5vRXZlbnREaXNw
YXRjaEFzc2VydGlvbjo6aXNFdmVudERpc3BhdGNoRm9yYmlkZGVuKCkpOwpAQCAtMTM3LDQ0ICs1
NSw2IEBAIGJvb2wgRXZlbnREaXNwYXRjaGVyOjpkaXNwYXRjaEV2ZW50KE5vZGUqIG5vZGUsIFBh
c3NSZWZQdHI8RXZlbnREaXNwYXRjaE1lZGlhdG9yCiAgICAgcmV0dXJuIG1lZGlhdG9yLT5kaXNw
YXRjaEV2ZW50KCZkaXNwYXRjaGVyKTsKIH0KIAotaW5saW5lIHN0YXRpYyBFdmVudFRhcmdldCog
ZXZlbnRUYXJnZXRSZXNwZWN0aW5nVGFyZ2V0UnVsZXMoTm9kZSogcmVmZXJlbmNlTm9kZSkKLXsK
LSAgICBBU1NFUlQocmVmZXJlbmNlTm9kZSk7Ci0KLSAgICBpZiAocmVmZXJlbmNlTm9kZS0+aXNQ
c2V1ZG9FbGVtZW50KCkpCi0gICAgICAgIHJldHVybiByZWZlcmVuY2VOb2RlLT5wYXJlbnROb2Rl
KCk7Ci0KLSNpZiBFTkFCTEUoU1ZHKQotICAgIGlmICghcmVmZXJlbmNlTm9kZS0+aXNTVkdFbGVt
ZW50KCkgfHwgIXJlZmVyZW5jZU5vZGUtPmlzSW5TaGFkb3dUcmVlKCkpCi0gICAgICAgIHJldHVy
biByZWZlcmVuY2VOb2RlOwotCi0gICAgLy8gU3BlYzogVGhlIGV2ZW50IGhhbmRsaW5nIGZvciB0
aGUgbm9uLWV4cG9zZWQgdHJlZSB3b3JrcyBhcyBpZiB0aGUgcmVmZXJlbmNlZCBlbGVtZW50IGhh
ZCBiZWVuIHRleHR1YWxseSBpbmNsdWRlZAotICAgIC8vIGFzIGEgZGVlcGx5IGNsb25lZCBjaGls
ZCBvZiB0aGUgJ3VzZScgZWxlbWVudCwgZXhjZXB0IHRoYXQgZXZlbnRzIGFyZSBkaXNwYXRjaGVk
IHRvIHRoZSBTVkdFbGVtZW50SW5zdGFuY2Ugb2JqZWN0cwotICAgIEVsZW1lbnQqIHNoYWRvd0hv
c3RFbGVtZW50ID0gdG9TaGFkb3dSb290KHJlZmVyZW5jZU5vZGUtPnRyZWVTY29wZSgpLT5yb290
Tm9kZSgpKS0+aG9zdCgpOwotICAgIC8vIEF0IHRoaXMgdGltZSwgU1ZHIG5vZGVzIGFyZSBub3Qg
c3VwcG9ydGVkIGluIG5vbi08dXNlPiBzaGFkb3cgdHJlZXMuCi0gICAgaWYgKCFzaGFkb3dIb3N0
RWxlbWVudCB8fCAhc2hhZG93SG9zdEVsZW1lbnQtPmhhc1RhZ05hbWUoU1ZHTmFtZXM6OnVzZVRh
ZykpCi0gICAgICAgIHJldHVybiByZWZlcmVuY2VOb2RlOwotICAgIFNWR1VzZUVsZW1lbnQqIHVz
ZUVsZW1lbnQgPSBzdGF0aWNfY2FzdDxTVkdVc2VFbGVtZW50Kj4oc2hhZG93SG9zdEVsZW1lbnQp
OwotICAgIGlmIChTVkdFbGVtZW50SW5zdGFuY2UqIGluc3RhbmNlID0gdXNlRWxlbWVudC0+aW5z
dGFuY2VGb3JTaGFkb3dUcmVlRWxlbWVudChyZWZlcmVuY2VOb2RlKSkKLSAgICAgICAgcmV0dXJu
IGluc3RhbmNlOwotI2VuZGlmCi0KLSAgICByZXR1cm4gcmVmZXJlbmNlTm9kZTsKLX0KLQotdm9p
ZCBFdmVudERpc3BhdGNoZXI6OmFkanVzdFJlbGF0ZWRUYXJnZXQoRXZlbnQqIGV2ZW50LCBQYXNz
UmVmUHRyPEV2ZW50VGFyZ2V0PiBwcnBSZWxhdGVkVGFyZ2V0KQotewotICAgIGlmICghcHJwUmVs
YXRlZFRhcmdldCkKLSAgICAgICAgcmV0dXJuOwotICAgIFJlZlB0cjxOb2RlPiByZWxhdGVkVGFy
Z2V0ID0gcHJwUmVsYXRlZFRhcmdldC0+dG9Ob2RlKCk7Ci0gICAgaWYgKCFyZWxhdGVkVGFyZ2V0
KQotICAgICAgICByZXR1cm47Ci0gICAgaWYgKCFtX25vZGUuZ2V0KCkpCi0gICAgICAgIHJldHVy
bjsKLSAgICBlbnN1cmVFdmVudFBhdGgoZXZlbnQpOwotICAgIEV2ZW50UmVsYXRlZFRhcmdldEFk
anVzdGVyKG1fbm9kZSwgcmVsYXRlZFRhcmdldC5yZWxlYXNlKCkpLmFkanVzdChtX2V2ZW50UGF0
aCk7Ci19Ci0KIEV2ZW50RGlzcGF0Y2hlcjo6RXZlbnREaXNwYXRjaGVyKE5vZGUqIG5vZGUpCiAg
ICAgOiBtX25vZGUobm9kZSkKICAgICAsIG1fZXZlbnRQYXRoSW5pdGlhbGl6ZWQoZmFsc2UpCkBA
IC0xODYsNDIgKzY2LDE5IEBAIEV2ZW50RGlzcGF0Y2hlcjo6RXZlbnREaXNwYXRjaGVyKE5vZGUq
IG5vZGUpCiAgICAgbV92aWV3ID0gbm9kZS0+ZG9jdW1lbnQoKS0+dmlldygpOwogfQogCi12b2lk
IEV2ZW50RGlzcGF0Y2hlcjo6ZW5zdXJlRXZlbnRQYXRoKEV2ZW50KiBldmVudCkKK0V2ZW50UGF0
aCYgRXZlbnREaXNwYXRjaGVyOjplbnN1cmVFdmVudFBhdGgoRXZlbnQqIGV2ZW50KQogewogICAg
IGlmIChtX2V2ZW50UGF0aEluaXRpYWxpemVkKQotICAgICAgICByZXR1cm47CisgICAgICAgIHJl
dHVybiBtX2V2ZW50UGF0aDsKICAgICBtX2V2ZW50UGF0aEluaXRpYWxpemVkID0gdHJ1ZTsKLSAg
ICBib29sIGluRG9jdW1lbnQgPSBtX25vZGUtPmluRG9jdW1lbnQoKTsKLSAgICBib29sIGlzU1ZH
RWxlbWVudCA9IG1fbm9kZS0+aXNTVkdFbGVtZW50KCk7Ci0gICAgYm9vbCBpc01vdXNlT3JGb2N1
c0V2ZW50ID0gZXZlbnQtPmlzTW91c2VFdmVudCgpIHx8IGV2ZW50LT5pc0ZvY3VzRXZlbnQoKTsK
LSAgICBWZWN0b3I8RXZlbnRUYXJnZXQqLCAzMj4gdGFyZ2V0U3RhY2s7Ci0gICAgZm9yIChBbmNl
c3RvckNoYWluV2Fsa2VyIHdhbGtlcihtX25vZGUuZ2V0KCkpOyB3YWxrZXIuZ2V0KCk7IHdhbGtl
ci5wYXJlbnQoKSkgewotICAgICAgICBOb2RlKiBub2RlID0gd2Fsa2VyLmdldCgpOwotICAgICAg
ICBpZiAodGFyZ2V0U3RhY2suaXNFbXB0eSgpKQotICAgICAgICAgICAgdGFyZ2V0U3RhY2suYXBw
ZW5kKGV2ZW50VGFyZ2V0UmVzcGVjdGluZ1RhcmdldFJ1bGVzKG5vZGUpKTsKLSAgICAgICAgZWxz
ZSBpZiAod2Fsa2VyLmNyb3NzaW5nSW5zZXJ0aW9uUG9pbnQoKSkKLSAgICAgICAgICAgIHRhcmdl
dFN0YWNrLmFwcGVuZCh0YXJnZXRTdGFjay5sYXN0KCkpOwotICAgICAgICBpZiAoaXNNb3VzZU9y
Rm9jdXNFdmVudCkKLSAgICAgICAgICAgIG1fZXZlbnRQYXRoLmFwcGVuZChhZG9wdFB0cihuZXcg
TW91c2VPckZvY3VzRXZlbnRDb250ZXh0KG5vZGUsIGV2ZW50VGFyZ2V0UmVzcGVjdGluZ1Rhcmdl
dFJ1bGVzKG5vZGUpLCB0YXJnZXRTdGFjay5sYXN0KCkpKSk7Ci0gICAgICAgIGVsc2UKLSAgICAg
ICAgICAgIG1fZXZlbnRQYXRoLmFwcGVuZChhZG9wdFB0cihuZXcgRXZlbnRDb250ZXh0KG5vZGUs
IGV2ZW50VGFyZ2V0UmVzcGVjdGluZ1RhcmdldFJ1bGVzKG5vZGUpLCB0YXJnZXRTdGFjay5sYXN0
KCkpKSk7Ci0gICAgICAgIGlmICghaW5Eb2N1bWVudCkKLSAgICAgICAgICAgIHJldHVybjsKLSAg
ICAgICAgaWYgKCFub2RlLT5pc1NoYWRvd1Jvb3QoKSkKLSAgICAgICAgICAgIGNvbnRpbnVlOwot
ICAgICAgICBpZiAoZGV0ZXJtaW5lRGlzcGF0Y2hCZWhhdmlvcihldmVudCwgdG9TaGFkb3dSb290
KG5vZGUpLCB0YXJnZXRTdGFjay5sYXN0KCkpID09IFN0YXlJbnNpZGVTaGFkb3dET00pCi0gICAg
ICAgICAgICByZXR1cm47Ci0gICAgICAgIGlmICghaXNTVkdFbGVtZW50KSB7Ci0gICAgICAgICAg
ICBBU1NFUlQoIXRhcmdldFN0YWNrLmlzRW1wdHkoKSk7Ci0gICAgICAgICAgICB0YXJnZXRTdGFj
ay5yZW1vdmVMYXN0KCk7Ci0gICAgICAgIH0KLSAgICB9CisgICAgRXZlbnRSZXRhcmdldGVyOjpj
YWxjdWxhdGVFdmVudFBhdGgobV9ub2RlLmdldCgpLCBldmVudCwgbV9ldmVudFBhdGgpOworICAg
IHJldHVybiBtX2V2ZW50UGF0aDsKIH0KIAogdm9pZCBFdmVudERpc3BhdGNoZXI6OmRpc3BhdGNo
U2NvcGVkRXZlbnQoTm9kZSogbm9kZSwgUGFzc1JlZlB0cjxFdmVudERpc3BhdGNoTWVkaWF0b3I+
IG1lZGlhdG9yKQogewogICAgIC8vIFdlIG5lZWQgdG8gc2V0IHRoZSB0YXJnZXQgaGVyZSBiZWNh
dXNlIGl0IGNhbiBnbyBhd2F5IGJ5IHRoZSB0aW1lIHdlIGFjdHVhbGx5IGZpcmUgdGhlIGV2ZW50
LgotICAgIG1lZGlhdG9yLT5ldmVudCgpLT5zZXRUYXJnZXQoZXZlbnRUYXJnZXRSZXNwZWN0aW5n
VGFyZ2V0UnVsZXMobm9kZSkpOworICAgIG1lZGlhdG9yLT5ldmVudCgpLT5zZXRUYXJnZXQoRXZl
bnRSZXRhcmdldGVyOjpldmVudFRhcmdldFJlc3BlY3RpbmdUYXJnZXRSdWxlcyhub2RlKSk7CiAg
ICAgU2NvcGVkRXZlbnRRdWV1ZTo6aW5zdGFuY2UoKS0+ZW5xdWV1ZUV2ZW50RGlzcGF0Y2hNZWRp
YXRvcihtZWRpYXRvcik7CiB9CiAKQEAgLTI2Miw3ICsxMTksNyBAQCBib29sIEV2ZW50RGlzcGF0
Y2hlcjo6ZGlzcGF0Y2hFdmVudChQYXNzUmVmUHRyPEV2ZW50PiBwcnBFdmVudCkKICAgICBSZWZQ
dHI8RXZlbnQ+IGV2ZW50ID0gcHJwRXZlbnQ7CiAgICAgQ2hpbGROb2Rlc0xhenlTbmFwc2hvdDo6
dGFrZUNoaWxkTm9kZXNMYXp5U25hcHNob3QoKTsKIAotICAgIGV2ZW50LT5zZXRUYXJnZXQoZXZl
bnRUYXJnZXRSZXNwZWN0aW5nVGFyZ2V0UnVsZXMobV9ub2RlLmdldCgpKSk7CisgICAgZXZlbnQt
PnNldFRhcmdldChFdmVudFJldGFyZ2V0ZXI6OmV2ZW50VGFyZ2V0UmVzcGVjdGluZ1RhcmdldFJ1
bGVzKG1fbm9kZS5nZXQoKSkpOwogICAgIEFTU0VSVCghTm9FdmVudERpc3BhdGNoQXNzZXJ0aW9u
Ojppc0V2ZW50RGlzcGF0Y2hGb3JiaWRkZW4oKSk7CiAgICAgQVNTRVJUKGV2ZW50LT50YXJnZXQo
KSk7CiAgICAgQVNTRVJUKCFldmVudC0+dHlwZSgpLmlzTnVsbCgpKTsgLy8gSmF2YVNjcmlwdCBj
b2RlIGNhbiBjcmVhdGUgYW4gZXZlbnQgd2l0aCBhbiBlbXB0eSBuYW1lLCBidXQgbm90IG51bGwu
CkBAIC0zNDgsNyArMjA1LDcgQEAgaW5saW5lIEV2ZW50RGlzcGF0Y2hDb250aW51YXRpb24gRXZl
bnREaXNwYXRjaGVyOjpkaXNwYXRjaEV2ZW50QXRCdWJibGluZyhQYXNzUmUKIAogaW5saW5lIHZv
aWQgRXZlbnREaXNwYXRjaGVyOjpkaXNwYXRjaEV2ZW50UG9zdFByb2Nlc3MoUGFzc1JlZlB0cjxF
dmVudD4gZXZlbnQsIHZvaWQqIHByZURpc3BhdGNoRXZlbnRIYW5kbGVyUmVzdWx0KQogewotICAg
IGV2ZW50LT5zZXRUYXJnZXQoZXZlbnRUYXJnZXRSZXNwZWN0aW5nVGFyZ2V0UnVsZXMobV9ub2Rl
LmdldCgpKSk7CisgICAgZXZlbnQtPnNldFRhcmdldChFdmVudFJldGFyZ2V0ZXI6OmV2ZW50VGFy
Z2V0UmVzcGVjdGluZ1RhcmdldFJ1bGVzKG1fbm9kZS5nZXQoKSkpOwogICAgIGV2ZW50LT5zZXRD
dXJyZW50VGFyZ2V0KDApOwogICAgIGV2ZW50LT5zZXRFdmVudFBoYXNlKDApOwogCkBAIC0zODMs
NDMgKzI0MCw0IEBAIGNvbnN0IEV2ZW50Q29udGV4dCogRXZlbnREaXNwYXRjaGVyOjp0b3BFdmVu
dENvbnRleHQoKQogICAgIHJldHVybiBtX2V2ZW50UGF0aC5pc0VtcHR5KCkgPyAwIDogbV9ldmVu
dFBhdGgubGFzdCgpLmdldCgpOwogfQogCi1zdGF0aWMgaW5saW5lIGJvb2wgaW5UaGVTYW1lU2Nv
cGUoU2hhZG93Um9vdCogc2hhZG93Um9vdCwgRXZlbnRUYXJnZXQqIHRhcmdldCkKLXsKLSAgICBy
ZXR1cm4gdGFyZ2V0LT50b05vZGUoKSAmJiB0YXJnZXQtPnRvTm9kZSgpLT50cmVlU2NvcGUoKS0+
cm9vdE5vZGUoKSA9PSBzaGFkb3dSb290OwotfQotCi1FdmVudERpc3BhdGNoQmVoYXZpb3IgRXZl
bnREaXNwYXRjaGVyOjpkZXRlcm1pbmVEaXNwYXRjaEJlaGF2aW9yKEV2ZW50KiBldmVudCwgU2hh
ZG93Um9vdCogc2hhZG93Um9vdCwgRXZlbnRUYXJnZXQqIHRhcmdldCkKLXsKLSNpZiBFTkFCTEUo
RlVMTFNDUkVFTl9BUEkpICYmIEVOQUJMRShWSURFTykKLSAgICAvLyBWaWRlby1vbmx5IGZ1bGwg
c2NyZWVuIGlzIGEgbW9kZSB3aGVyZSB3ZSB1c2UgdGhlIHNoYWRvdyBET00gYXMgYW4gaW1wbGVt
ZW50YXRpb24KLSAgICAvLyBkZXRhaWwgdGhhdCBzaG91bGQgbm90IGJlIGRldGVjdGFibGUgYnkg
dGhlIHdlYiBjb250ZW50LgotICAgIGlmIChFbGVtZW50KiBlbGVtZW50ID0gbV9ub2RlLT5kb2N1
bWVudCgpLT53ZWJraXRDdXJyZW50RnVsbFNjcmVlbkVsZW1lbnQoKSkgewotICAgICAgICAvLyBG
SVhNRTogV2UgYXNzdW1lIHRoYXQgaWYgdGhlIGZ1bGwgc2NyZWVuIGVsZW1lbnQgaXMgYSBtZWRp
YSBlbGVtZW50IHRoYXQgaXQncwotICAgICAgICAvLyB0aGUgdmlkZW8tb25seSBmdWxsIHNjcmVl
bi4gQm90aCBoZXJlIGFuZCBlbHNld2hlcmUuIEJ1dCB0aGF0IGlzIHByb2JhYmx5IHdyb25nLgot
ICAgICAgICBpZiAoZWxlbWVudC0+aXNNZWRpYUVsZW1lbnQoKSAmJiBzaGFkb3dSb290ICYmIHNo
YWRvd1Jvb3QtPmhvc3QoKSA9PSBlbGVtZW50KQotICAgICAgICAgICAgcmV0dXJuIFN0YXlJbnNp
ZGVTaGFkb3dET007Ci0gICAgfQotI2Vsc2UKLSAgICBVTlVTRURfUEFSQU0oc2hhZG93Um9vdCk7
Ci0jZW5kaWYKLQotICAgIC8vIFdlYktpdCBuZXZlciBhbGxvd2VkIHNlbGVjdHN0YXJ0IGV2ZW50
IHRvIGNyb3NzIHRoZSB0aGUgc2hhZG93IERPTSBib3VuZGFyeS4KLSAgICAvLyBDaGFuZ2luZyB0
aGlzIGJyZWFrcyBleGlzdGluZyBzaXRlcy4KLSAgICAvLyBTZWUgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTUyMTk1IGZvciBkZXRhaWxzLgotICAgIGNvbnN0IEF0b21p
Y1N0cmluZyBldmVudFR5cGUgPSBldmVudC0+dHlwZSgpOwotICAgIGlmIChpblRoZVNhbWVTY29w
ZShzaGFkb3dSb290LCB0YXJnZXQpCi0gICAgICAgICYmIChldmVudFR5cGUgPT0gZXZlbnROYW1l
cygpLmFib3J0RXZlbnQKLSAgICAgICAgICAgIHx8IGV2ZW50VHlwZSA9PSBldmVudE5hbWVzKCku
Y2hhbmdlRXZlbnQKLSAgICAgICAgICAgIHx8IGV2ZW50VHlwZSA9PSBldmVudE5hbWVzKCkuZXJy
b3JFdmVudAotICAgICAgICAgICAgfHwgZXZlbnRUeXBlID09IGV2ZW50TmFtZXMoKS5sb2FkRXZl
bnQKLSAgICAgICAgICAgIHx8IGV2ZW50VHlwZSA9PSBldmVudE5hbWVzKCkucmVzZXRFdmVudAot
ICAgICAgICAgICAgfHwgZXZlbnRUeXBlID09IGV2ZW50TmFtZXMoKS5yZXNpemVFdmVudAotICAg
ICAgICAgICAgfHwgZXZlbnRUeXBlID09IGV2ZW50TmFtZXMoKS5zY3JvbGxFdmVudAotICAgICAg
ICAgICAgfHwgZXZlbnRUeXBlID09IGV2ZW50TmFtZXMoKS5zZWxlY3RFdmVudAotICAgICAgICAg
ICAgfHwgZXZlbnRUeXBlID09IGV2ZW50TmFtZXMoKS5zZWxlY3RzdGFydEV2ZW50KSkKLSAgICAg
ICAgcmV0dXJuIFN0YXlJbnNpZGVTaGFkb3dET007Ci0KLSAgICByZXR1cm4gUmV0YXJnZXRFdmVu
dDsKLX0KLQogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL0V2ZW50RGlzcGF0Y2hl
ci5oIGIvU291cmNlL1dlYkNvcmUvZG9tL0V2ZW50RGlzcGF0Y2hlci5oCmluZGV4IDdkZjQwMTA3
YjIzNDAwMGVhNzU4Nzc3M2VmOTM1YWYwOTQ0M2JmMjIuLjk5MmVhZDgyZDNhNmFlMmYyYTdhYTUx
ZGE1ZTAxY2JkMjNlOTU5NjkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9FdmVudERp
c3BhdGNoZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vRXZlbnREaXNwYXRjaGVyLmgKQEAg
LTQ1LDI5ICs0NSwxMSBAQCBjbGFzcyBTaGFkb3dSb290OwogY2xhc3MgVHJlZVNjb3BlOwogY2xh
c3MgV2luZG93RXZlbnRDb250ZXh0OwogCi1lbnVtIEV2ZW50RGlzcGF0Y2hCZWhhdmlvciB7Ci0g
ICAgUmV0YXJnZXRFdmVudCwKLSAgICBTdGF5SW5zaWRlU2hhZG93RE9NCi19OwotCiBlbnVtIEV2
ZW50RGlzcGF0Y2hDb250aW51YXRpb24gewogICAgIENvbnRpbnVlRGlzcGF0Y2hpbmcsCiAgICAg
RG9uZURpc3BhdGNoaW5nCiB9OwogCi1jbGFzcyBFdmVudFJlbGF0ZWRUYXJnZXRBZGp1c3RlciB7
Ci1wdWJsaWM6Ci0gICAgRXZlbnRSZWxhdGVkVGFyZ2V0QWRqdXN0ZXIoUGFzc1JlZlB0cjxOb2Rl
PiwgUGFzc1JlZlB0cjxOb2RlPiByZWxhdGVkVGFyZ2V0KTsKLSAgICB2b2lkIGFkanVzdChFdmVu
dFBhdGgmKTsKLXByaXZhdGU6Ci0gICAgdHlwZWRlZiBIYXNoTWFwPFRyZWVTY29wZSosIEV2ZW50
VGFyZ2V0Kj4gUmVsYXRlZFRhcmdldE1hcDsKLSAgICBFdmVudFRhcmdldCogZmluZFJlbGF0ZWRU
YXJnZXQoVHJlZVNjb3BlKik7Ci0KLSAgICBSZWZQdHI8Tm9kZT4gbV9ub2RlOwotICAgIFJlZlB0
cjxOb2RlPiBtX3JlbGF0ZWRUYXJnZXQ7Ci0gICAgUmVsYXRlZFRhcmdldE1hcCBtX3JlbGF0ZWRU
YXJnZXRNYXA7Ci19OwotCiBjbGFzcyBFdmVudERpc3BhdGNoZXIgewogcHVibGljOgogICAgIHN0
YXRpYyBib29sIGRpc3BhdGNoRXZlbnQoTm9kZSosIFBhc3NSZWZQdHI8RXZlbnREaXNwYXRjaE1l
ZGlhdG9yPik7CkBAIC03NiwxNSArNTgsMTEgQEAgcHVibGljOgogICAgIHN0YXRpYyB2b2lkIGRp
c3BhdGNoU2ltdWxhdGVkQ2xpY2soTm9kZSosIEV2ZW50KiB1bmRlcmx5aW5nRXZlbnQsIFNpbXVs
YXRlZENsaWNrTW91c2VFdmVudE9wdGlvbnMsIFNpbXVsYXRlZENsaWNrVmlzdWFsT3B0aW9ucyk7
CiAKICAgICBib29sIGRpc3BhdGNoRXZlbnQoUGFzc1JlZlB0cjxFdmVudD4pOwotICAgIHZvaWQg
YWRqdXN0UmVsYXRlZFRhcmdldChFdmVudCosIFBhc3NSZWZQdHI8RXZlbnRUYXJnZXQ+IHBycFJl
bGF0ZWRUYXJnZXQpOwogICAgIE5vZGUqIG5vZGUoKSBjb25zdDsKKyAgICBFdmVudFBhdGgmIGVu
c3VyZUV2ZW50UGF0aChFdmVudCopOwogCiBwcml2YXRlOgogICAgIEV2ZW50RGlzcGF0Y2hlcihO
b2RlKik7Ci0KLSAgICBFdmVudERpc3BhdGNoQmVoYXZpb3IgZGV0ZXJtaW5lRGlzcGF0Y2hCZWhh
dmlvcihFdmVudCosIFNoYWRvd1Jvb3QqLCBFdmVudFRhcmdldCopOwotCi0gICAgdm9pZCBlbnN1
cmVFdmVudFBhdGgoRXZlbnQqKTsKICAgICBjb25zdCBFdmVudENvbnRleHQqIHRvcEV2ZW50Q29u
dGV4dCgpOwogCiAgICAgRXZlbnREaXNwYXRjaENvbnRpbnVhdGlvbiBkaXNwYXRjaEV2ZW50UHJl
UHJvY2VzcyhQYXNzUmVmUHRyPEV2ZW50Piwgdm9pZComIHByZURpc3BhdGNoRXZlbnRIYW5kbGVy
UmVzdWx0KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9FdmVudFJldGFyZ2V0ZXIu
Y3BwIGIvU291cmNlL1dlYkNvcmUvZG9tL0V2ZW50UmV0YXJnZXRlci5jcHAKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4u
YWU0YjllM2FmZDE3MWExODU4YTk4YmVlNWVmYTg4ZDBkY2UxY2NkMgotLS0gL2Rldi9udWxsCisr
KyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9FdmVudFJldGFyZ2V0ZXIuY3BwCkBAIC0wLDAgKzEsMjA4
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVk
aXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUg
R05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRo
ZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBM
aWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRo
aXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNl
ZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxp
ZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExp
Y2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQg
YSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9u
ZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3
cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmts
aW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgor
ICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJFdmVudFJldGFyZ2V0ZXIuaCIK
KworI2luY2x1ZGUgIkFuY2VzdG9yQ2hhaW5XYWxrZXIuaCIKKyNpbmNsdWRlICJDb250YWluZXJO
b2RlLmgiCisjaW5jbHVkZSAiRXZlbnRDb250ZXh0LmgiCisjaW5jbHVkZSAiRm9jdXNFdmVudC5o
IgorI2luY2x1ZGUgIk1vdXNlRXZlbnQuaCIKKyNpbmNsdWRlICJTaGFkb3dSb290LmgiCisjaW5j
bHVkZSAiVHJlZVNjb3BlLmgiCisjaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KKyNpbmNsdWRl
IDx3dGYvUmVmUHRyLmg+CisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgorCituYW1lc3BhY2UgV2Vi
Q29yZSB7CisKK3N0YXRpYyBpbmxpbmUgYm9vbCBpblRoZVNhbWVTY29wZShTaGFkb3dSb290KiBz
aGFkb3dSb290LCBFdmVudFRhcmdldCogdGFyZ2V0KQoreworICAgIHJldHVybiB0YXJnZXQtPnRv
Tm9kZSgpICYmIHRhcmdldC0+dG9Ob2RlKCktPnRyZWVTY29wZSgpLT5yb290Tm9kZSgpID09IHNo
YWRvd1Jvb3Q7Cit9CisKK3N0YXRpYyBpbmxpbmUgRXZlbnREaXNwYXRjaEJlaGF2aW9yIGRldGVy
bWluZURpc3BhdGNoQmVoYXZpb3IoRXZlbnQqIGV2ZW50LCBTaGFkb3dSb290KiBzaGFkb3dSb290
LCBFdmVudFRhcmdldCogdGFyZ2V0KQoreworI2lmIEVOQUJMRShGVUxMU0NSRUVOX0FQSSkgJiYg
RU5BQkxFKFZJREVPKQorICAgIC8vIFZpZGVvLW9ubHkgZnVsbCBzY3JlZW4gaXMgYSBtb2RlIHdo
ZXJlIHdlIHVzZSB0aGUgc2hhZG93IERPTSBhcyBhbiBpbXBsZW1lbnRhdGlvbgorICAgIC8vIGRl
dGFpbCB0aGF0IHNob3VsZCBub3QgYmUgZGV0ZWN0YWJsZSBieSB0aGUgd2ViIGNvbnRlbnQuCisg
ICAgaWYgKEVsZW1lbnQqIGVsZW1lbnQgPSB0YXJnZXQtPnRvTm9kZSgpLT5kb2N1bWVudCgpLT53
ZWJraXRDdXJyZW50RnVsbFNjcmVlbkVsZW1lbnQoKSkgeworICAgICAgICAvLyBGSVhNRTogV2Ug
YXNzdW1lIHRoYXQgaWYgdGhlIGZ1bGwgc2NyZWVuIGVsZW1lbnQgaXMgYSBtZWRpYSBlbGVtZW50
IHRoYXQgaXQncworICAgICAgICAvLyB0aGUgdmlkZW8tb25seSBmdWxsIHNjcmVlbi4gQm90aCBo
ZXJlIGFuZCBlbHNld2hlcmUuIEJ1dCB0aGF0IGlzIHByb2JhYmx5IHdyb25nLgorICAgICAgICBp
ZiAoZWxlbWVudC0+aXNNZWRpYUVsZW1lbnQoKSAmJiBzaGFkb3dSb290ICYmIHNoYWRvd1Jvb3Qt
Pmhvc3QoKSA9PSBlbGVtZW50KQorICAgICAgICAgICAgcmV0dXJuIFN0YXlJbnNpZGVTaGFkb3dE
T007CisgICAgfQorI2Vsc2UKKyAgICBVTlVTRURfUEFSQU0oc2hhZG93Um9vdCk7CisjZW5kaWYK
KworICAgIC8vIFdlYktpdCBuZXZlciBhbGxvd2VkIHNlbGVjdHN0YXJ0IGV2ZW50IHRvIGNyb3Nz
IHRoZSB0aGUgc2hhZG93IERPTSBib3VuZGFyeS4KKyAgICAvLyBDaGFuZ2luZyB0aGlzIGJyZWFr
cyBleGlzdGluZyBzaXRlcy4KKyAgICAvLyBTZWUgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTUyMTk1IGZvciBkZXRhaWxzLgorICAgIGNvbnN0IEF0b21pY1N0cmluZyBl
dmVudFR5cGUgPSBldmVudC0+dHlwZSgpOworICAgIGlmIChpblRoZVNhbWVTY29wZShzaGFkb3dS
b290LCB0YXJnZXQpCisgICAgICAgICYmIChldmVudFR5cGUgPT0gZXZlbnROYW1lcygpLmFib3J0
RXZlbnQKKyAgICAgICAgICAgIHx8IGV2ZW50VHlwZSA9PSBldmVudE5hbWVzKCkuY2hhbmdlRXZl
bnQKKyAgICAgICAgICAgIHx8IGV2ZW50VHlwZSA9PSBldmVudE5hbWVzKCkuZXJyb3JFdmVudAor
ICAgICAgICAgICAgfHwgZXZlbnRUeXBlID09IGV2ZW50TmFtZXMoKS5sb2FkRXZlbnQKKyAgICAg
ICAgICAgIHx8IGV2ZW50VHlwZSA9PSBldmVudE5hbWVzKCkucmVzZXRFdmVudAorICAgICAgICAg
ICAgfHwgZXZlbnRUeXBlID09IGV2ZW50TmFtZXMoKS5yZXNpemVFdmVudAorICAgICAgICAgICAg
fHwgZXZlbnRUeXBlID09IGV2ZW50TmFtZXMoKS5zY3JvbGxFdmVudAorICAgICAgICAgICAgfHwg
ZXZlbnRUeXBlID09IGV2ZW50TmFtZXMoKS5zZWxlY3RFdmVudAorICAgICAgICAgICAgfHwgZXZl
bnRUeXBlID09IGV2ZW50TmFtZXMoKS5zZWxlY3RzdGFydEV2ZW50KSkKKyAgICAgICAgcmV0dXJu
IFN0YXlJbnNpZGVTaGFkb3dET007CisKKyAgICByZXR1cm4gUmV0YXJnZXRFdmVudDsKK30KKwor
dm9pZCBFdmVudFJldGFyZ2V0ZXI6OmNhbGN1bGF0ZUV2ZW50UGF0aChOb2RlKiBub2RlLCBFdmVu
dCogZXZlbnQsIEV2ZW50UGF0aCYgZXZlbnRQYXRoKQoreworICAgIGJvb2wgaW5Eb2N1bWVudCA9
IG5vZGUtPmluRG9jdW1lbnQoKTsKKyAgICBib29sIGlzU1ZHRWxlbWVudCA9IG5vZGUtPmlzU1ZH
RWxlbWVudCgpOworICAgIGJvb2wgaXNNb3VzZU9yRm9jdXNFdmVudCA9IGV2ZW50LT5pc01vdXNl
RXZlbnQoKSB8fCBldmVudC0+aXNGb2N1c0V2ZW50KCk7CisgICAgVmVjdG9yPEV2ZW50VGFyZ2V0
KiwgMzI+IHRhcmdldFN0YWNrOworICAgIGZvciAoQW5jZXN0b3JDaGFpbldhbGtlciB3YWxrZXIo
bm9kZSk7IHdhbGtlci5nZXQoKTsgd2Fsa2VyLnBhcmVudCgpKSB7CisgICAgICAgIE5vZGUqIG5v
ZGUgPSB3YWxrZXIuZ2V0KCk7CisgICAgICAgIGlmICh0YXJnZXRTdGFjay5pc0VtcHR5KCkpCisg
ICAgICAgICAgICB0YXJnZXRTdGFjay5hcHBlbmQoZXZlbnRUYXJnZXRSZXNwZWN0aW5nVGFyZ2V0
UnVsZXMobm9kZSkpOworICAgICAgICBlbHNlIGlmICh3YWxrZXIuY3Jvc3NpbmdJbnNlcnRpb25Q
b2ludCgpKQorICAgICAgICAgICAgdGFyZ2V0U3RhY2suYXBwZW5kKHRhcmdldFN0YWNrLmxhc3Qo
KSk7CisgICAgICAgIGlmIChpc01vdXNlT3JGb2N1c0V2ZW50KQorICAgICAgICAgICAgZXZlbnRQ
YXRoLmFwcGVuZChhZG9wdFB0cihuZXcgTW91c2VPckZvY3VzRXZlbnRDb250ZXh0KG5vZGUsIGV2
ZW50VGFyZ2V0UmVzcGVjdGluZ1RhcmdldFJ1bGVzKG5vZGUpLCB0YXJnZXRTdGFjay5sYXN0KCkp
KSk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGV2ZW50UGF0aC5hcHBlbmQoYWRvcHRQdHIo
bmV3IEV2ZW50Q29udGV4dChub2RlLCBldmVudFRhcmdldFJlc3BlY3RpbmdUYXJnZXRSdWxlcyhu
b2RlKSwgdGFyZ2V0U3RhY2subGFzdCgpKSkpOworICAgICAgICBpZiAoIWluRG9jdW1lbnQpCisg
ICAgICAgICAgICByZXR1cm47CisgICAgICAgIGlmICghbm9kZS0+aXNTaGFkb3dSb290KCkpCisg
ICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgaWYgKGRldGVybWluZURpc3BhdGNoQmVoYXZp
b3IoZXZlbnQsIHRvU2hhZG93Um9vdChub2RlKSwgdGFyZ2V0U3RhY2subGFzdCgpKSA9PSBTdGF5
SW5zaWRlU2hhZG93RE9NKQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBpZiAoIWlzU1ZH
RWxlbWVudCkgeworICAgICAgICAgICAgQVNTRVJUKCF0YXJnZXRTdGFjay5pc0VtcHR5KCkpOwor
ICAgICAgICAgICAgdGFyZ2V0U3RhY2sucmVtb3ZlTGFzdCgpOworICAgICAgICB9CisgICAgfQor
fQorCit2b2lkIEV2ZW50UmV0YXJnZXRlcjo6YWRqdXN0Rm9yTW91c2VFdmVudChOb2RlKiBub2Rl
LCBjb25zdCBNb3VzZUV2ZW50JiBtb3VzZUV2ZW50LCBFdmVudFBhdGgmIGV2ZW50UGF0aCkKK3sK
KyAgICBhZGp1c3RGb3JSZWxhdGVkVGFyZ2V0KG5vZGUsIG1vdXNlRXZlbnQucmVsYXRlZFRhcmdl
dCgpLCBldmVudFBhdGgpOworfQorCit2b2lkIEV2ZW50UmV0YXJnZXRlcjo6YWRqdXN0Rm9yRm9j
dXNFdmVudChOb2RlKiBub2RlLCBjb25zdCBGb2N1c0V2ZW50JiBmb2N1c0V2ZW50LCBFdmVudFBh
dGgmIGV2ZW50UGF0aCkKK3sKKyAgICBhZGp1c3RGb3JSZWxhdGVkVGFyZ2V0KG5vZGUsIGZvY3Vz
RXZlbnQucmVsYXRlZFRhcmdldCgpLCBldmVudFBhdGgpOworfQorCit2b2lkIEV2ZW50UmV0YXJn
ZXRlcjo6YWRqdXN0Rm9yUmVsYXRlZFRhcmdldChOb2RlKiBub2RlLCBFdmVudFRhcmdldCogcmVs
YXRlZFRhcmdldCwgRXZlbnRQYXRoJiBldmVudFBhdGgpCit7CisgICAgaWYgKCFub2RlKQorICAg
ICAgICByZXR1cm47CisgICAgaWYgKCFyZWxhdGVkVGFyZ2V0KQorICAgICAgICByZXR1cm47Cisg
ICAgTm9kZSogcmVsYXRlZE5vZGUgPSByZWxhdGVkVGFyZ2V0LT50b05vZGUoKTsKKyAgICBpZiAo
IXJlbGF0ZWROb2RlKQorICAgICAgICByZXR1cm47CisgICAgQWRqdXN0ZWROb2RlcyBhZGp1c3Rl
ZE5vZGVzOworICAgIGNhbGN1bGF0ZUFkanVzdGVkTm9kZXMobm9kZSwgcmVsYXRlZE5vZGUsIGV2
ZW50UGF0aCwgYWRqdXN0ZWROb2Rlcyk7CisgICAgQVNTRVJUKGFuY2VzdG9ycy5zaXplKCkgPT0g
YWRqdXN0ZWROb2Rlcy5zaXplKCkpOworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgZXZlbnRQ
YXRoLnNpemUoKTsgKytpKSB7CisgICAgICAgIGlmIChhZGp1c3RlZE5vZGVzW2ldLmdldCgpKSB7
CisgICAgICAgICAgICBBU1NFUlQoZXZlbnRQYXRoW2ldLT5pc01vdXNlT3JGb2N1c0V2ZW50Q29u
dGV4dCgpKTsKKyAgICAgICAgICAgIE1vdXNlT3JGb2N1c0V2ZW50Q29udGV4dCogbW91c2VPckZv
Y3VzRXZlbnRDb250ZXh0ID0gc3RhdGljX2Nhc3Q8TW91c2VPckZvY3VzRXZlbnRDb250ZXh0Kj4o
ZXZlbnRQYXRoW2ldLmdldCgpKTsKKyAgICAgICAgICAgIG1vdXNlT3JGb2N1c0V2ZW50Q29udGV4
dC0+c2V0UmVsYXRlZFRhcmdldChhZGp1c3RlZE5vZGVzW2ldKTsKKyAgICAgICAgfQorICAgIH0K
K30KKwordm9pZCBFdmVudFJldGFyZ2V0ZXI6OmNhbGN1bGF0ZUFkanVzdGVkTm9kZXMoTm9kZSog
bm9kZSwgTm9kZSogcmVsYXRlZE5vZGUsIEV2ZW50UGF0aCYgZXZlbnRQYXRoLCBBZGp1c3RlZE5v
ZGVzJiBhZGp1c3RlZE5vZGVzKQoreworICAgIFJlbGF0ZWROb2RlTWFwIHJlbGF0ZWROb2RlTWFw
OworICAgIGJ1aWxkUmVsYXRlZE5vZGVNYXAocmVsYXRlZE5vZGUsIHJlbGF0ZWROb2RlTWFwKTsK
KworICAgIC8vIFN5bnRoZXRpYyBtb3VzZSBldmVudHMgY2FuIGhhdmUgYSByZWxhdGVkVGFyZ2V0
IHdoaWNoIGlzIGlkZW50aWNhbCB0byB0aGUgdGFyZ2V0LgorICAgIGJvb2wgdGFyZ2V0SXNJZGVu
dGljYWxUb1RvUmVsYXRlZFRhcmdldCA9IChub2RlID09IHJlbGF0ZWROb2RlKTsKKworICAgIFRy
ZWVTY29wZSogbGFzdFRyZWVTY29wZSA9IDA7CisgICAgTm9kZSogYWRqdXN0ZWROb2RlID0gMDsK
KyAgICBmb3IgKEV2ZW50UGF0aDo6Y29uc3RfaXRlcmF0b3IgaXRlciA9IGV2ZW50UGF0aC5iZWdp
bigpOyBpdGVyIDwgZXZlbnRQYXRoLmVuZCgpOyArK2l0ZXIpIHsKKyAgICAgICAgVHJlZVNjb3Bl
KiBzY29wZSA9ICgqaXRlciktPm5vZGUoKS0+dHJlZVNjb3BlKCk7CisgICAgICAgIGlmIChzY29w
ZSA9PSBsYXN0VHJlZVNjb3BlKSB7CisgICAgICAgICAgICAvLyBSZS11c2UgdGhlIHByZXZpb3Vz
IGFkanVzdGVkUmVsYXRlZFRhcmdldCBpZiB0cmVlU2NvcGUgZG9lcyBub3QgY2hhbmdlLiBKdXN0
IGZvciB0aGUgcGVyZm9ybWFuY2Ugb3B0aW1pemF0aW9uLgorICAgICAgICAgICAgYWRqdXN0ZWRO
b2Rlcy5hcHBlbmQoYWRqdXN0ZWROb2RlKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAg
IGFkanVzdGVkTm9kZSA9IGZpbmRSZWxhdGVkTm9kZShzY29wZSwgcmVsYXRlZE5vZGVNYXApOwor
ICAgICAgICAgICAgYWRqdXN0ZWROb2Rlcy5hcHBlbmQoYWRqdXN0ZWROb2RlKTsKKyAgICAgICAg
fQorICAgICAgICBsYXN0VHJlZVNjb3BlID0gc2NvcGU7CisgICAgICAgIGlmICh0YXJnZXRJc0lk
ZW50aWNhbFRvVG9SZWxhdGVkVGFyZ2V0KSB7CisgICAgICAgICAgICBpZiAobm9kZS0+dHJlZVNj
b3BlKCktPnJvb3ROb2RlKCkgPT0gKCppdGVyKS0+bm9kZSgpKSB7CisgICAgICAgICAgICAgICAg
ZXZlbnRQYXRoLnNocmluayhpdGVyICsgMSAtIGV2ZW50UGF0aC5iZWdpbigpKTsKKyAgICAgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlIGlmICgoKml0ZXIp
LT50YXJnZXQoKSA9PSBhZGp1c3RlZE5vZGUpIHsKKyAgICAgICAgICAgIC8vIEV2ZW50IGRpc3Bh
dGNoaW5nIHNob3VsZCBiZSBzdG9wcGVkIGhlcmUuCisgICAgICAgICAgICBldmVudFBhdGguc2hy
aW5rKGl0ZXIgLSBldmVudFBhdGguYmVnaW4oKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgfQorICAgIH0KK30KKwordm9pZCBFdmVudFJldGFyZ2V0ZXI6OmJ1aWxkUmVsYXRlZE5vZGVN
YXAoTm9kZSogcmVsYXRlZE5vZGUsIFJlbGF0ZWROb2RlTWFwJiByZWxhdGVkTm9kZU1hcCkKK3sK
KyAgICBWZWN0b3I8Tm9kZSosIDMyPiByZWxhdGVkTm9kZVN0YWNrOworICAgIFRyZWVTY29wZSog
bGFzdFRyZWVTY29wZSA9IDA7CisgICAgZm9yIChBbmNlc3RvckNoYWluV2Fsa2VyIHdhbGtlcihy
ZWxhdGVkTm9kZSk7IHdhbGtlci5nZXQoKTsgd2Fsa2VyLnBhcmVudCgpKSB7CisgICAgICAgIE5v
ZGUqIG5vZGUgPSB3YWxrZXIuZ2V0KCk7CisgICAgICAgIGlmIChyZWxhdGVkTm9kZVN0YWNrLmlz
RW1wdHkoKSkKKyAgICAgICAgICAgIHJlbGF0ZWROb2RlU3RhY2suYXBwZW5kKG5vZGUpOworICAg
ICAgICBlbHNlIGlmICh3YWxrZXIuY3Jvc3NpbmdJbnNlcnRpb25Qb2ludCgpKQorICAgICAgICAg
ICAgcmVsYXRlZE5vZGVTdGFjay5hcHBlbmQocmVsYXRlZE5vZGVTdGFjay5sYXN0KCkpOworICAg
ICAgICBUcmVlU2NvcGUqIHNjb3BlID0gbm9kZS0+dHJlZVNjb3BlKCk7CisgICAgICAgIC8vIFNr
aXBzIGFkZGluZyBhIG5vZGUgdG8gdGhlIG1hcCBpZiB0cmVlU2NvcGUgZG9lcyBub3QgY2hhbmdl
LiBKdXN0IGZvciB0aGUgcGVyZm9ybWFuY2Ugb3B0aW1pemF0aW9uLgorICAgICAgICBpZiAoc2Nv
cGUgIT0gbGFzdFRyZWVTY29wZSkKKyAgICAgICAgICAgIHJlbGF0ZWROb2RlTWFwLmFkZChzY29w
ZSwgcmVsYXRlZE5vZGVTdGFjay5sYXN0KCkpOworICAgICAgICBsYXN0VHJlZVNjb3BlID0gc2Nv
cGU7CisgICAgICAgIGlmIChub2RlLT5pc1NoYWRvd1Jvb3QoKSkgeworICAgICAgICAgICAgQVNT
RVJUKCFyZWxhdGVkTm9kZVN0YWNrLmlzRW1wdHkoKSk7CisgICAgICAgICAgICByZWxhdGVkTm9k
ZVN0YWNrLnJlbW92ZUxhc3QoKTsKKyAgICAgICAgfQorICAgIH0KK30KKworTm9kZSogRXZlbnRS
ZXRhcmdldGVyOjpmaW5kUmVsYXRlZE5vZGUoVHJlZVNjb3BlKiBzY29wZSwgUmVsYXRlZE5vZGVN
YXAmIHJlbGF0ZWROb2RlTWFwKQoreworICAgIFZlY3RvcjxUcmVlU2NvcGUqLCAzMj4gcGFyZW50
VHJlZVNjb3BlczsKKyAgICBOb2RlKiByZWxhdGVkTm9kZSA9IDA7CisgICAgd2hpbGUgKHNjb3Bl
KSB7CisgICAgICAgIHBhcmVudFRyZWVTY29wZXMuYXBwZW5kKHNjb3BlKTsKKyAgICAgICAgUmVs
YXRlZE5vZGVNYXA6OmNvbnN0X2l0ZXJhdG9yIGZvdW5kID0gcmVsYXRlZE5vZGVNYXAuZmluZChz
Y29wZSk7CisgICAgICAgIGlmIChmb3VuZCAhPSByZWxhdGVkTm9kZU1hcC5lbmQoKSkgeworICAg
ICAgICAgICAgcmVsYXRlZE5vZGUgPSBmb3VuZC0+dmFsdWU7CisgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgfQorICAgICAgICBzY29wZSA9IHNjb3BlLT5wYXJlbnRUcmVlU2NvcGUoKTsKKyAg
ICB9CisgICAgZm9yIChWZWN0b3I8VHJlZVNjb3BlKiwgMzI+OjppdGVyYXRvciBpdGVyID0gcGFy
ZW50VHJlZVNjb3Blcy5iZWdpbigpOyBpdGVyIDwgcGFyZW50VHJlZVNjb3Blcy5lbmQoKTsgKytp
dGVyKQorICAgICAgICByZWxhdGVkTm9kZU1hcC5hZGQoKml0ZXIsIHJlbGF0ZWROb2RlKTsKKyAg
ICByZXR1cm4gcmVsYXRlZE5vZGU7Cit9CisKK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L2RvbS9FdmVudFJldGFyZ2V0ZXIuaCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9FdmVudFJldGFyZ2V0
ZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwLi5jNzExYTk2ZTgzMjZiZTUwMzYxZTYxZDM4YzUzNmFkODc4MzE4MTM2
Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL0V2ZW50UmV0YXJnZXRlci5o
CkBAIC0wLDAgKzEsOTMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2Fy
ZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhl
IHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBw
dWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJz
aW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNp
b24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQg
aXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQg
ZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2Vu
ZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQg
aGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExp
Y2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5M
SUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJ
bmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjEx
MC0xMzAxLCBVU0EuCisgKi8KKworI2lmbmRlZiBFdmVudFJldGFyZ2V0ZXJfaAorI2RlZmluZSBF
dmVudFJldGFyZ2V0ZXJfaAorCisjaW5jbHVkZSAiQ29udGFpbmVyTm9kZS5oIgorI2luY2x1ZGUg
IkV2ZW50Q29udGV4dC5oIgorI2luY2x1ZGUgIlNoYWRvd1Jvb3QuaCIKKyNpbmNsdWRlIDx3dGYv
SGFzaE1hcC5oPgorI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+CisjaW5jbHVkZSA8d3RmL1Jl
ZlB0ci5oPgorCisjaWYgRU5BQkxFKFNWRykKKyNpbmNsdWRlICJTVkdFbGVtZW50SW5zdGFuY2Uu
aCIKKyNpbmNsdWRlICJTVkdOYW1lcy5oIgorI2luY2x1ZGUgIlNWR1VzZUVsZW1lbnQuaCIKKyNl
bmRpZgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIEV2ZW50VGFyZ2V0OworY2xhc3Mg
Rm9jdXNFdmVudDsKK2NsYXNzIE1vdXNlRXZlbnQ7CitjbGFzcyBOb2RlOworY2xhc3MgVHJlZVNj
b3BlOworCitlbnVtIEV2ZW50RGlzcGF0Y2hCZWhhdmlvciB7CisgICAgUmV0YXJnZXRFdmVudCwK
KyAgICBTdGF5SW5zaWRlU2hhZG93RE9NCit9OworCitjbGFzcyBFdmVudFJldGFyZ2V0ZXIgewor
cHVibGljOgorICAgIHN0YXRpYyB2b2lkIGNhbGN1bGF0ZUV2ZW50UGF0aChOb2RlKiwgRXZlbnQq
LCBFdmVudFBhdGgmKTsKKyAgICBzdGF0aWMgdm9pZCBhZGp1c3RGb3JNb3VzZUV2ZW50KE5vZGUq
LCBjb25zdCBNb3VzZUV2ZW50JiwgRXZlbnRQYXRoJik7CisgICAgc3RhdGljIHZvaWQgYWRqdXN0
Rm9yRm9jdXNFdmVudChOb2RlKiwgY29uc3QgRm9jdXNFdmVudCYsIEV2ZW50UGF0aCYpOworICAg
IHN0YXRpYyBFdmVudFRhcmdldCogZXZlbnRUYXJnZXRSZXNwZWN0aW5nVGFyZ2V0UnVsZXMoTm9k
ZSogcmVmZXJlbmNlTm9kZSk7CisKK3ByaXZhdGU6CisgICAgdHlwZWRlZiBWZWN0b3I8UmVmUHRy
PE5vZGU+ID4gQWRqdXN0ZWROb2RlczsKKyAgICB0eXBlZGVmIEhhc2hNYXA8VHJlZVNjb3BlKiwg
Tm9kZSo+IFJlbGF0ZWROb2RlTWFwOworCisgICAgc3RhdGljIHZvaWQgYWRqdXN0Rm9yUmVsYXRl
ZFRhcmdldChOb2RlKiwgRXZlbnRUYXJnZXQqIHJlbGF0ZWRUYXJnZXQsIEV2ZW50UGF0aCYpOwor
ICAgIHN0YXRpYyB2b2lkIGNhbGN1bGF0ZUFkanVzdGVkTm9kZXMoTm9kZSosIE5vZGUqIHJlbGF0
ZWROb2RlLCBFdmVudFBhdGgmLCBBZGp1c3RlZE5vZGVzJik7CisgICAgc3RhdGljIHZvaWQgYnVp
bGRSZWxhdGVkTm9kZU1hcChOb2RlKiwgUmVsYXRlZE5vZGVNYXAmKTsKKyAgICBzdGF0aWMgTm9k
ZSogZmluZFJlbGF0ZWROb2RlKFRyZWVTY29wZSosIFJlbGF0ZWROb2RlTWFwJik7Cit9OworCitp
bmxpbmUgRXZlbnRUYXJnZXQqIEV2ZW50UmV0YXJnZXRlcjo6ZXZlbnRUYXJnZXRSZXNwZWN0aW5n
VGFyZ2V0UnVsZXMoTm9kZSogcmVmZXJlbmNlTm9kZSkKK3sKKyAgICBBU1NFUlQocmVmZXJlbmNl
Tm9kZSk7CisKKyAgICBpZiAocmVmZXJlbmNlTm9kZS0+aXNQc2V1ZG9FbGVtZW50KCkpCisgICAg
ICAgIHJldHVybiByZWZlcmVuY2VOb2RlLT5wYXJlbnROb2RlKCk7CisKKyNpZiBFTkFCTEUoU1ZH
KQorICAgIGlmICghcmVmZXJlbmNlTm9kZS0+aXNTVkdFbGVtZW50KCkgfHwgIXJlZmVyZW5jZU5v
ZGUtPmlzSW5TaGFkb3dUcmVlKCkpCisgICAgICAgIHJldHVybiByZWZlcmVuY2VOb2RlOworCisg
ICAgLy8gU3BlYzogVGhlIGV2ZW50IGhhbmRsaW5nIGZvciB0aGUgbm9uLWV4cG9zZWQgdHJlZSB3
b3JrcyBhcyBpZiB0aGUgcmVmZXJlbmNlZCBlbGVtZW50IGhhZCBiZWVuIHRleHR1YWxseSBpbmNs
dWRlZAorICAgIC8vIGFzIGEgZGVlcGx5IGNsb25lZCBjaGlsZCBvZiB0aGUgJ3VzZScgZWxlbWVu
dCwgZXhjZXB0IHRoYXQgZXZlbnRzIGFyZSBkaXNwYXRjaGVkIHRvIHRoZSBTVkdFbGVtZW50SW5z
dGFuY2Ugb2JqZWN0cworICAgIEVsZW1lbnQqIHNoYWRvd0hvc3RFbGVtZW50ID0gdG9TaGFkb3dS
b290KHJlZmVyZW5jZU5vZGUtPnRyZWVTY29wZSgpLT5yb290Tm9kZSgpKS0+aG9zdCgpOworICAg
IC8vIEF0IHRoaXMgdGltZSwgU1ZHIG5vZGVzIGFyZSBub3Qgc3VwcG9ydGVkIGluIG5vbi08dXNl
PiBzaGFkb3cgdHJlZXMuCisgICAgaWYgKCFzaGFkb3dIb3N0RWxlbWVudCB8fCAhc2hhZG93SG9z
dEVsZW1lbnQtPmhhc1RhZ05hbWUoU1ZHTmFtZXM6OnVzZVRhZykpCisgICAgICAgIHJldHVybiBy
ZWZlcmVuY2VOb2RlOworICAgIFNWR1VzZUVsZW1lbnQqIHVzZUVsZW1lbnQgPSBzdGF0aWNfY2Fz
dDxTVkdVc2VFbGVtZW50Kj4oc2hhZG93SG9zdEVsZW1lbnQpOworICAgIGlmIChTVkdFbGVtZW50
SW5zdGFuY2UqIGluc3RhbmNlID0gdXNlRWxlbWVudC0+aW5zdGFuY2VGb3JTaGFkb3dUcmVlRWxl
bWVudChyZWZlcmVuY2VOb2RlKSkKKyAgICAgICAgcmV0dXJuIGluc3RhbmNlOworI2VuZGlmCisK
KyAgICByZXR1cm4gcmVmZXJlbmNlTm9kZTsKK30KKworfQorCisjZW5kaWYgLy8gRXZlbnRSZXRh
cmdldGVyX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9Gb2N1c0V2ZW50LmNwcCBi
L1NvdXJjZS9XZWJDb3JlL2RvbS9Gb2N1c0V2ZW50LmNwcAppbmRleCBmYmQzMWU5MTM2NDk1YjFk
NjE1N2NlNmZiNDJhZjRmYmYzODg3N2JiLi4xNWJhNDAxY2ExNWUwMjQ2YWMwNGJkYTU0MTExMzgy
YWU3MDY5ZTVlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vRm9jdXNFdmVudC5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvZG9tL0ZvY3VzRXZlbnQuY3BwCkBAIC0yOSw2ICsyOSw3IEBA
CiAjaW5jbHVkZSAiRXZlbnQuaCIKICNpbmNsdWRlICJFdmVudERpc3BhdGNoZXIuaCIKICNpbmNs
dWRlICJFdmVudE5hbWVzLmgiCisjaW5jbHVkZSAiRXZlbnRSZXRhcmdldGVyLmgiCiAjaW5jbHVk
ZSAiTm9kZS5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkBAIC03Niw3ICs3Nyw3IEBAIEZvY3Vz
RXZlbnREaXNwYXRjaE1lZGlhdG9yOjpGb2N1c0V2ZW50RGlzcGF0Y2hNZWRpYXRvcihQYXNzUmVm
UHRyPEZvY3VzRXZlbnQ+IGZvCiAKIGJvb2wgRm9jdXNFdmVudERpc3BhdGNoTWVkaWF0b3I6OmRp
c3BhdGNoRXZlbnQoRXZlbnREaXNwYXRjaGVyKiBkaXNwYXRjaGVyKSBjb25zdAogewotICAgIGRp
c3BhdGNoZXItPmFkanVzdFJlbGF0ZWRUYXJnZXQoZXZlbnQoKSwgZXZlbnQoKS0+cmVsYXRlZFRh
cmdldCgpKTsKKyAgICBFdmVudFJldGFyZ2V0ZXI6OmFkanVzdEZvckZvY3VzRXZlbnQoZGlzcGF0
Y2hlci0+bm9kZSgpLCAqZXZlbnQoKSwgZGlzcGF0Y2hlci0+ZW5zdXJlRXZlbnRQYXRoKGV2ZW50
KCkpKTsKICAgICByZXR1cm4gRXZlbnREaXNwYXRjaE1lZGlhdG9yOjpkaXNwYXRjaEV2ZW50KGRp
c3BhdGNoZXIpOwogfQogCkBAIC05Miw3ICs5Myw3IEBAIEJsdXJFdmVudERpc3BhdGNoTWVkaWF0
b3I6OkJsdXJFdmVudERpc3BhdGNoTWVkaWF0b3IoUGFzc1JlZlB0cjxGb2N1c0V2ZW50PiBmb2N1
CiAKIGJvb2wgQmx1ckV2ZW50RGlzcGF0Y2hNZWRpYXRvcjo6ZGlzcGF0Y2hFdmVudChFdmVudERp
c3BhdGNoZXIqIGRpc3BhdGNoZXIpIGNvbnN0CiB7Ci0gICAgZGlzcGF0Y2hlci0+YWRqdXN0UmVs
YXRlZFRhcmdldChldmVudCgpLCBldmVudCgpLT5yZWxhdGVkVGFyZ2V0KCkpOworICAgIEV2ZW50
UmV0YXJnZXRlcjo6YWRqdXN0Rm9yRm9jdXNFdmVudChkaXNwYXRjaGVyLT5ub2RlKCksICpldmVu
dCgpLCBkaXNwYXRjaGVyLT5lbnN1cmVFdmVudFBhdGgoZXZlbnQoKSkpOwogICAgIHJldHVybiBF
dmVudERpc3BhdGNoTWVkaWF0b3I6OmRpc3BhdGNoRXZlbnQoZGlzcGF0Y2hlcik7CiB9CiAKQEAg
LTEwOCw3ICsxMDksNyBAQCBGb2N1c0luRXZlbnREaXNwYXRjaE1lZGlhdG9yOjpGb2N1c0luRXZl
bnREaXNwYXRjaE1lZGlhdG9yKFBhc3NSZWZQdHI8Rm9jdXNFdmVudAogCiBib29sIEZvY3VzSW5F
dmVudERpc3BhdGNoTWVkaWF0b3I6OmRpc3BhdGNoRXZlbnQoRXZlbnREaXNwYXRjaGVyKiBkaXNw
YXRjaGVyKSBjb25zdAogewotICAgIGRpc3BhdGNoZXItPmFkanVzdFJlbGF0ZWRUYXJnZXQoZXZl
bnQoKSwgZXZlbnQoKS0+cmVsYXRlZFRhcmdldCgpKTsKKyAgICBFdmVudFJldGFyZ2V0ZXI6OmFk
anVzdEZvckZvY3VzRXZlbnQoZGlzcGF0Y2hlci0+bm9kZSgpLCAqZXZlbnQoKSwgZGlzcGF0Y2hl
ci0+ZW5zdXJlRXZlbnRQYXRoKGV2ZW50KCkpKTsKICAgICByZXR1cm4gRXZlbnREaXNwYXRjaE1l
ZGlhdG9yOjpkaXNwYXRjaEV2ZW50KGRpc3BhdGNoZXIpOwogfQogCkBAIC0xMjQsNyArMTI1LDcg
QEAgRm9jdXNPdXRFdmVudERpc3BhdGNoTWVkaWF0b3I6OkZvY3VzT3V0RXZlbnREaXNwYXRjaE1l
ZGlhdG9yKFBhc3NSZWZQdHI8Rm9jdXNFdmUKIAogYm9vbCBGb2N1c091dEV2ZW50RGlzcGF0Y2hN
ZWRpYXRvcjo6ZGlzcGF0Y2hFdmVudChFdmVudERpc3BhdGNoZXIqIGRpc3BhdGNoZXIpIGNvbnN0
CiB7Ci0gICAgZGlzcGF0Y2hlci0+YWRqdXN0UmVsYXRlZFRhcmdldChldmVudCgpLCBldmVudCgp
LT5yZWxhdGVkVGFyZ2V0KCkpOworICAgIEV2ZW50UmV0YXJnZXRlcjo6YWRqdXN0Rm9yRm9jdXNF
dmVudChkaXNwYXRjaGVyLT5ub2RlKCksICpldmVudCgpLCBkaXNwYXRjaGVyLT5lbnN1cmVFdmVu
dFBhdGgoZXZlbnQoKSkpOwogICAgIHJldHVybiBFdmVudERpc3BhdGNoTWVkaWF0b3I6OmRpc3Bh
dGNoRXZlbnQoZGlzcGF0Y2hlcik7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Rv
bS9Nb3VzZUV2ZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9Nb3VzZUV2ZW50LmNwcAppbmRl
eCA2OTVlMmY3Y2FiYjQ2OGM4YmFjODY3NTcwMWVmNGU0YTE3ZjBkZjU3Li5kNTkyY2E5ODc5OWE0
M2UyZDJiMTY2NmQ1OTljMDE3MTZjNjkzMTI3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9k
b20vTW91c2VFdmVudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL01vdXNlRXZlbnQuY3Bw
CkBAIC0yNSw2ICsyNSw3IEBACiAKICNpbmNsdWRlICJFdmVudERpc3BhdGNoZXIuaCIKICNpbmNs
dWRlICJFdmVudE5hbWVzLmgiCisjaW5jbHVkZSAiRXZlbnRSZXRhcmdldGVyLmgiCiAjaW5jbHVk
ZSAiRnJhbWUuaCIKICNpbmNsdWRlICJGcmFtZVZpZXcuaCIKICNpbmNsdWRlICJIVE1MSUZyYW1l
RWxlbWVudC5oIgpAQCAtMjYxLDcgKzI2Miw3IEBAIE1vdXNlRXZlbnQqIE1vdXNlRXZlbnREaXNw
YXRjaE1lZGlhdG9yOjpldmVudCgpIGNvbnN0CiBib29sIE1vdXNlRXZlbnREaXNwYXRjaE1lZGlh
dG9yOjpkaXNwYXRjaEV2ZW50KEV2ZW50RGlzcGF0Y2hlciogZGlzcGF0Y2hlcikgY29uc3QKIHsK
ICAgICBpZiAoaXNTeW50aGV0aWNNb3VzZUV2ZW50KCkpIHsKLSAgICAgICAgZGlzcGF0Y2hlci0+
YWRqdXN0UmVsYXRlZFRhcmdldChldmVudCgpLCBldmVudCgpLT5yZWxhdGVkVGFyZ2V0KCkpOwor
ICAgICAgICBFdmVudFJldGFyZ2V0ZXI6OmFkanVzdEZvck1vdXNlRXZlbnQoZGlzcGF0Y2hlci0+
bm9kZSgpLCAqZXZlbnQoKSwgIGRpc3BhdGNoZXItPmVuc3VyZUV2ZW50UGF0aChldmVudCgpKSk7
CiAgICAgICAgIHJldHVybiBkaXNwYXRjaGVyLT5kaXNwYXRjaEV2ZW50KGV2ZW50KCkpOwogICAg
IH0KIApAQCAtMjc0LDcgKzI3NSw3IEBAIGJvb2wgTW91c2VFdmVudERpc3BhdGNoTWVkaWF0b3I6
OmRpc3BhdGNoRXZlbnQoRXZlbnREaXNwYXRjaGVyKiBkaXNwYXRjaGVyKSBjb25zCiAgICAgQVNT
RVJUKCFldmVudCgpLT50YXJnZXQoKSB8fCBldmVudCgpLT50YXJnZXQoKSAhPSBldmVudCgpLT5y
ZWxhdGVkVGFyZ2V0KCkpOwogCiAgICAgRXZlbnRUYXJnZXQqIHJlbGF0ZWRUYXJnZXQgPSBldmVu
dCgpLT5yZWxhdGVkVGFyZ2V0KCk7Ci0gICAgZGlzcGF0Y2hlci0+YWRqdXN0UmVsYXRlZFRhcmdl
dChldmVudCgpLCByZWxhdGVkVGFyZ2V0KTsKKyAgICBFdmVudFJldGFyZ2V0ZXI6OmFkanVzdEZv
ck1vdXNlRXZlbnQoZGlzcGF0Y2hlci0+bm9kZSgpLCAqZXZlbnQoKSwgIGRpc3BhdGNoZXItPmVu
c3VyZUV2ZW50UGF0aChldmVudCgpKSk7CiAKICAgICBkaXNwYXRjaGVyLT5kaXNwYXRjaEV2ZW50
KGV2ZW50KCkpOwogICAgIGJvb2wgc3dhbGxvd0V2ZW50ID0gZXZlbnQoKS0+ZGVmYXVsdEhhbmRs
ZWQoKSB8fCBldmVudCgpLT5kZWZhdWx0UHJldmVudGVkKCk7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>188298</attachid>
            <date>2013-02-14 03:24:52 -0800</date>
            <delta_ts>2013-02-14 20:40:20 -0800</delta_ts>
            <desc>Fix a regression.</desc>
            <filename>bug-109156-20130214202119.patch</filename>
            <type>text/plain</type>
            <size>39427</size>
            <attacher name="Hayato Ito">hayato</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTQyODUzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZjc1Y2IzYjYxMzgyYTk1
MGY1MTNlYzZmMzE3MTgwNjZmMmRhNWVjZC4uMWY4NDVhOTcwZTI3MzZlZTI1ZTkxMjUyOTQyNWFl
NmU3NTBhZGU5YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDYxIEBACisyMDEzLTAyLTA3ICBIYXlh
dG8gSXRvICA8aGF5YXRvQGNocm9taXVtLm9yZz4KKworICAgICAgICBGYWN0b3IgRXZlbnQgcmV0
YXJnZXRpbmcgY29kZS4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTEwOTE1NgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisg
ICAgICAgIFRvIHN1cG9vcnQgVG91Y2ggZXZlbnQgcmV0YXJnZXRpbmcgKGJ1ZyAxMDc4MDApLCB3
ZSBoYXZlIHRvIGZhY3RvcgorICAgICAgICBldmVudCByZXRhcmdldGluZyBjb2RlIHNvIHRoYXQg
aXQgY2FuIHN1cHBvcnQgbm90IG9ubHkgTW91c2VFdmVudCwKKyAgICAgICAgYnV0IGFsc28gb3Ro
ZXIgZXZlbnRzLgorCisgICAgICAgIE5ldyBjbGFzcywgRXZlbnRSZXRhcmdldGVyLCB3YXMgaW50
cm9kdWNlZC4gRnJvbSBub3csCisgICAgICAgIEV2ZW50RGlzcGF0Y2hNZWRpYXRvciAoYW5kIGl0
cyBzdWJjbGFzc2VzKSBzaG91bGQgY2FsbCwgaWYgZXZlbnQKKyAgICAgICAgcmV0YXJnZXRpbmcg
aXMgcmVxdWlyZWQsIGFuIGFwcHJvcHJpYXRlIGZ1bmN0aW9uIHByb3ZpZGVkIGluCisgICAgICAg
IEV2ZW50UmV0YXJnZXRlciByYXRoZXIgdGhhbiBjYWxsaW5nCisgICAgICAgIEV2ZW50RGlzcGF0
Y2hlcjo6YWRqdXN0UmVsYXRlZFRhcmdldCgpLCB3aGljaCB3YXMgcmVtb3ZlZCBpbiB0aGlzCisg
ICAgICAgIHBhdGNoLgorCisgICAgICAgIE5vIHRlc3RzLiBObyBjaGFuZ2UgaW4gYmVoYXZpb3Iu
CisKKyAgICAgICAgKiBDTWFrZUxpc3RzLnR4dDoKKyAgICAgICAgKiBHTlVtYWtlZmlsZS5saXN0
LmFtOgorICAgICAgICAqIFRhcmdldC5wcmk6CisgICAgICAgICogV2ViQ29yZS5neXBpOgorICAg
ICAgICAqIFdlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBkb20v
RXZlbnREaXNwYXRjaE1lZGlhdG9yLmNwcDoKKyAgICAgICAgKiBkb20vRXZlbnREaXNwYXRjaGVy
LmNwcDoKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6RXZlbnREaXNwYXRj
aGVyOjplbnN1cmVFdmVudFBhdGgpOiBDaGFuZ2VkIHRvIHJldHVybiBhbiBFdmVudFBhdGgsIHdo
aWNoIHdpbGwgYmUgdXNlZCBieSBFdmVudFJldGFyZ2V0ZXIuCisgICAgICAgIChXZWJDb3JlOjpF
dmVudERpc3BhdGNoZXI6OmRpc3BhdGNoU2NvcGVkRXZlbnQpOgorICAgICAgICAoV2ViQ29yZTo6
RXZlbnREaXNwYXRjaGVyOjpkaXNwYXRjaEV2ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkV2ZW50
RGlzcGF0Y2hlcjo6ZGlzcGF0Y2hFdmVudFBvc3RQcm9jZXNzKToKKyAgICAgICAgKiBkb20vRXZl
bnREaXNwYXRjaGVyLmg6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKEV2ZW50RGlzcGF0
Y2hlcik6CisgICAgICAgICogZG9tL0V2ZW50UmV0YXJnZXRlci5jcHA6IEFkZGVkLgorICAgICAg
ICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJDb3JlOjppblRoZVNhbWVTY29wZSk6CisgICAgICAg
IChXZWJDb3JlOjpkZXRlcm1pbmVEaXNwYXRjaEJlaGF2aW9yKToKKyAgICAgICAgKFdlYkNvcmU6
OkV2ZW50UmV0YXJnZXRlcjo6Y2FsY3VsYXRlRXZlbnRQYXRoKTogRmFjdG9yZWQgb3V0IGZyb20g
RXZlbnREaXNwYXRjaGVyOjplbnN1cmVFdmVudFBhdGgoKS4KKyAgICAgICAgKFdlYkNvcmU6OkV2
ZW50UmV0YXJnZXRlcjo6YWRqdXN0Rm9yTW91c2VFdmVudCk6CisgICAgICAgIChXZWJDb3JlOjpF
dmVudFJldGFyZ2V0ZXI6OmFkanVzdEZvckZvY3VzRXZlbnQpOgorICAgICAgICAoV2ViQ29yZTo6
RXZlbnRSZXRhcmdldGVyOjphZGp1c3RGb3JSZWxhdGVkVGFyZ2V0KToKKyAgICAgICAgKFdlYkNv
cmU6OkV2ZW50UmV0YXJnZXRlcjo6Y2FsY3VsYXRlQWRqdXN0ZWROb2Rlcyk6IEZhY3RvcmVkIG91
dCBmcm9tIEV2ZW50UmVsYXRlZFRhcmdldEFqdXN0ZXI6OmFkanVzdFJlbGF0ZWRUYXJnZXQoKS4K
KyAgICAgICAgKFdlYkNvcmU6OkV2ZW50UmV0YXJnZXRlcjo6YnVpbGRSZWxhdGVkTm9kZU1hcCk6
IEZhY3RvcmVkIG91dCBmcm9tIEV2ZW50UmVsYXRlZFRhcmdldEFqdXN0ZXI6OmFkanVzdFJlbGF0
ZWRUYXJnZXQoKS4KKyAgICAgICAgKFdlYkNvcmU6OkV2ZW50UmV0YXJnZXRlcjo6ZmluZFJlbGF0
ZWROb2RlKToKKyAgICAgICAgKiBkb20vRXZlbnRSZXRhcmdldGVyLmg6IEFkZGVkLgorICAgICAg
ICAoV2ViQ29yZSk6CisgICAgICAgIChFdmVudFJldGFyZ2V0ZXIpOgorICAgICAgICAoV2ViQ29y
ZTo6RXZlbnRSZXRhcmdldGVyOjpldmVudFRhcmdldFJlc3BlY3RpbmdUYXJnZXRSdWxlcyk6Cisg
ICAgICAgICogZG9tL0ZvY3VzRXZlbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Rm9jdXNFdmVu
dERpc3BhdGNoTWVkaWF0b3I6OmRpc3BhdGNoRXZlbnQpOiBDaGFuZ2VkIHRvIGNhbGwgRXZlbnRS
ZXRhcmdldGVyOjphZGp1c3RGb3JGb2N1c0V2ZW50KCkuCisgICAgICAgIChXZWJDb3JlOjpCbHVy
RXZlbnREaXNwYXRjaE1lZGlhdG9yOjpkaXNwYXRjaEV2ZW50KTogRGl0dG8uCisgICAgICAgIChX
ZWJDb3JlOjpGb2N1c0luRXZlbnREaXNwYXRjaE1lZGlhdG9yOjpkaXNwYXRjaEV2ZW50KTogRGl0
dG8uCisgICAgICAgIChXZWJDb3JlOjpGb2N1c091dEV2ZW50RGlzcGF0Y2hNZWRpYXRvcjo6ZGlz
cGF0Y2hFdmVudCk6IERpdHRvLgorICAgICAgICAqIGRvbS9Nb3VzZUV2ZW50LmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6Ok1vdXNlRXZlbnREaXNwYXRjaE1lZGlhdG9yOjpkaXNwYXRjaEV2ZW50KTog
Q2hhbmdlZCB0byBjYWxsIEV2ZW50UmV0YXJnZXRlcjo6YWRqdXN0Rm9yTW91c2VFdmVudCgpLgor
CiAyMDEzLTAyLTEzICBLZW50YXJvIEhhcmEgIDxoYXJha2VuQGNocm9taXVtLm9yZz4KIAogICAg
ICAgICBbVjhdIEdlbmVyYXRlIHdyYXBwZXIgbWV0aG9kcyBmb3IgY3VzdG9tIG1ldGhvZHMKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0IGIvU291cmNlL1dlYkNvcmUv
Q01ha2VMaXN0cy50eHQKaW5kZXggNWVjMmE3NTZhMjI3ZDE5M2Y2N2E4M2YwMDlkZDUzODhhODlh
MThiZS4uMTllZWI3NWFiYmY0YTI2M2NhOTZkZWFkYTM1Y2E2ODY2MmQwMjRkNCAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQKKysrIGIvU291cmNlL1dlYkNvcmUvQ01h
a2VMaXN0cy50eHQKQEAgLTExNzQsNiArMTE3NCw3IEBAIHNldChXZWJDb3JlX1NPVVJDRVMKICAg
ICBkb20vRXZlbnRFeGNlcHRpb24uY3BwCiAgICAgZG9tL0V2ZW50TGlzdGVuZXJNYXAuY3BwCiAg
ICAgZG9tL0V2ZW50TmFtZXMuY3BwCisgICAgZG9tL0V2ZW50UmV0YXJnZXRlci5jcHAKICAgICBk
b20vRXZlbnRUYXJnZXQuY3BwCiAgICAgZG9tL0V4Y2VwdGlvbkJhc2UuY3BwCiAgICAgZG9tL0V4
Y2VwdGlvbkNvZGVQbGFjZWhvbGRlci5jcHAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0dO
VW1ha2VmaWxlLmxpc3QuYW0gYi9Tb3VyY2UvV2ViQ29yZS9HTlVtYWtlZmlsZS5saXN0LmFtCmlu
ZGV4IGIwZmIxMTg0MTNmZmNmOTY2Nzk2ZmQ5NzQ0OWE3ZDZkYzA1NjUyMmMuLjQ0ZGRkYzM2YmVi
N2JmODI0MjI5OTIwMmFjY2Y0ZGQ3OTI4ODEyNTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L0dOVW1ha2VmaWxlLmxpc3QuYW0KKysrIGIvU291cmNlL1dlYkNvcmUvR05VbWFrZWZpbGUubGlz
dC5hbQpAQCAtMjg2OCw2ICsyODY4LDcgQEAgd2ViY29yZV9zb3VyY2VzICs9IFwKIAlTb3VyY2Uv
V2ViQ29yZS9kb20vRXZlbnRMaXN0ZW5lck1hcC5oIFwKIAlTb3VyY2UvV2ViQ29yZS9kb20vRXZl
bnROYW1lcy5jcHAgXAogCVNvdXJjZS9XZWJDb3JlL2RvbS9FdmVudE5hbWVzLmggXAorCVNvdXJj
ZS9XZWJDb3JlL2RvbS9FdmVudFJldGFyZ2V0ZXIuY3BwIFwKIAlTb3VyY2UvV2ViQ29yZS9kb20v
RXZlbnRUYXJnZXQuY3BwIFwKIAlTb3VyY2UvV2ViQ29yZS9kb20vRXZlbnRUYXJnZXQuaCBcCiAJ
U291cmNlL1dlYkNvcmUvZG9tL0V2ZW50UXVldWUuaCBcCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9UYXJnZXQucHJpIGIvU291cmNlL1dlYkNvcmUvVGFyZ2V0LnByaQppbmRleCBhNzg1ZGQ1
ZjkyMjljMzIxNWE4ZWI4MjExYWIzNTVkYTQ0NGI5OWY5Li42YTE4ZmI3MjAyOGIwZmFmYzU0NDgz
N2Y3ZjNmMjQ1YTFlY2MyZTFjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9UYXJnZXQucHJp
CisrKyBiL1NvdXJjZS9XZWJDb3JlL1RhcmdldC5wcmkKQEAgLTQxMCw2ICs0MTAsNyBAQCBTT1VS
Q0VTICs9IFwKICAgICBkb20vRXZlbnRFeGNlcHRpb24uY3BwIFwKICAgICBkb20vRXZlbnRMaXN0
ZW5lck1hcC5jcHAgXAogICAgIGRvbS9FdmVudE5hbWVzLmNwcCBcCisgICAgZG9tL0V2ZW50UmV0
YXJnZXRlci5jcHAgXAogICAgIGRvbS9FdmVudFRhcmdldC5jcHAgXAogICAgIGRvbS9FeGNlcHRp
b25CYXNlLmNwcCBcCiAgICAgZG9tL0V4Y2VwdGlvbkNvZGVQbGFjZWhvbGRlci5jcHAgXApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpIGIvU291cmNlL1dlYkNvcmUvV2Vi
Q29yZS5neXBpCmluZGV4IDg1ODRiOTY2M2YwZDVhYWMzZmFmMDM1ZDczYjA2NDljYzNlOWIyNTMu
LjhlZjg0MTcwNWY5ZmMzM2NmNWI3M2Y5MjQzZGE2ODE4MDRjZDIwNWQgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQorKysgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5
cGkKQEAgLTI4MzAsNiArMjgzMCw4IEBACiAgICAgICAgICAgICAnZG9tL0V2ZW50RGlzcGF0Y2hN
ZWRpYXRvci5oJywKICAgICAgICAgICAgICdkb20vRXZlbnREaXNwYXRjaGVyLmNwcCcsCiAgICAg
ICAgICAgICAnZG9tL0V2ZW50RGlzcGF0Y2hlci5oJywKKyAgICAgICAgICAgICdkb20vRXZlbnRS
ZXRhcmdldGVyLmNwcCcsCisgICAgICAgICAgICAnZG9tL0V2ZW50UmV0YXJnZXRlci5oJywKICAg
ICAgICAgICAgICdkb20vRXZlbnRFeGNlcHRpb24uY3BwJywKICAgICAgICAgICAgICdkb20vRXZl
bnRFeGNlcHRpb24uaCcsCiAgICAgICAgICAgICAnZG9tL0V2ZW50TGlzdGVuZXJNYXAuY3BwJywK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvaiBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpp
bmRleCA5MDQ3NmFiNDhiNTA0YjJiOTZjMGM2M2VhNjdlM2FiZjJlMTUyZTMyLi5jMTA2YzM5MzNl
Y2EyYjkyZGQxZWRiYjg0NTIxOWI0MTdiYjI3NGU4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIvU291cmNlL1dlYkNvcmUv
V2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCkBAIC0xNDQ3LDYgKzE0NDcsOCBAQAog
CQk0QTRGNDhBQTE2QjBERkMwMDBFREJCMjkgLyogRG9jdW1lbnRSdWxlU2V0cy5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNEE0RjQ4QTgxNkIwREZDMDAw
RURCQjI5IC8qIERvY3VtZW50UnVsZVNldHMuaCAqLzsgfTsKIAkJNEE1QTJBREIxNjFFN0UwMDAw
NTg4OUREIC8qIFdlYlNvY2tldEV4dGVuc2lvblBhcnNlci5jcHAgaW4gU291cmNlcyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0QTVBMkFEOTE2MUU3RTAwMDA1ODg5REQgLyog
V2ViU29ja2V0RXh0ZW5zaW9uUGFyc2VyLmNwcCAqLzsgfTsKIAkJNEE1QTJBREMxNjFFN0UwMDAw
NTg4OUREIC8qIFdlYlNvY2tldEV4dGVuc2lvblBhcnNlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNEE1QTJBREExNjFFN0UwMDAwNTg4OUREIC8qIFdl
YlNvY2tldEV4dGVuc2lvblBhcnNlci5oICovOyB9OworCQk0QTVDQjFDNTE2QzNBNUZEMDBBQjI4
ODYgLyogRXZlbnRSZXRhcmdldGVyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDRBNUNCMUMzMTZDM0E1RkQwMEFCMjg4NiAvKiBFdmVudFJldGFyZ2V0
ZXIuY3BwICovOyB9OworCQk0QTVDQjFDNjE2QzNBNUZEMDBBQjI4ODYgLyogRXZlbnRSZXRhcmdl
dGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0QTVD
QjFDNDE2QzNBNUZEMDBBQjI4ODYgLyogRXZlbnRSZXRhcmdldGVyLmggKi87IH07CiAJCTRBNkEw
QzVCMTUyMzJGMjQwMEIwOUM2RSAvKiBDb21wb3NlZFNoYWRvd1RyZWVXYWxrZXIuY3BwIGluIFNv
dXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNEE2QTBDNTkxNTIzMkYy
NDAwQjA5QzZFIC8qIENvbXBvc2VkU2hhZG93VHJlZVdhbGtlci5jcHAgKi87IH07CiAJCTRBNkEw
QzVDMTUyMzJGMjQwMEIwOUM2RSAvKiBDb21wb3NlZFNoYWRvd1RyZWVXYWxrZXIuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDRBNkEwQzVBMTUyMzJGMjQw
MEIwOUM2RSAvKiBDb21wb3NlZFNoYWRvd1RyZWVXYWxrZXIuaCAqLzsgfTsKIAkJNEE2RTlGQzMx
M0MxN0QxRDAwNDZBN0Y4IC8qIEZvbnRGZWF0dXJlVmFsdWUuY3BwIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNEE2RTlGQzExM0MxN0QxRDAwNDZBN0Y4IC8q
IEZvbnRGZWF0dXJlVmFsdWUuY3BwICovOyB9OwpAQCAtODg2MSw2ICs4ODYzLDggQEAKIAkJNEE0
RjQ4QTgxNkIwREZDMDAwRURCQjI5IC8qIERvY3VtZW50UnVsZVNldHMuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gRG9jdW1lbnRSdWxlU2V0cy5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQk0QTVBMkFEOTE2MUU3RTAwMDA1ODg5REQgLyogV2ViU29ja2V0RXh0ZW5z
aW9uUGFyc2VyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IFdlYlNv
Y2tldEV4dGVuc2lvblBhcnNlci5jcHA7IHBhdGggPSBNb2R1bGVzL3dlYnNvY2tldHMvV2ViU29j
a2V0RXh0ZW5zaW9uUGFyc2VyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNEE1
QTJBREExNjFFN0UwMDAwNTg4OUREIC8qIFdlYlNvY2tldEV4dGVuc2lvblBhcnNlci5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBXZWJTb2NrZXRFeHRlbnNpb25QYXJzZXIuaDsg
cGF0aCA9IE1vZHVsZXMvd2Vic29ja2V0cy9XZWJTb2NrZXRFeHRlbnNpb25QYXJzZXIuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNEE1Q0IxQzMxNkMzQTVGRDAwQUIyODg2IC8qIEV2
ZW50UmV0YXJnZXRlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBF
dmVudFJldGFyZ2V0ZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk0QTVDQjFD
NDE2QzNBNUZEMDBBQjI4ODYgLyogRXZlbnRSZXRhcmdldGVyLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IEV2ZW50UmV0YXJnZXRlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQk0QTZBMEM1OTE1MjMyRjI0MDBCMDlDNkUgLyogQ29tcG9zZWRTaGFkb3dUcmVlV2Fs
a2VyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IENvbXBvc2VkU2hh
ZG93VHJlZVdhbGtlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTRBNkEwQzVB
MTUyMzJGMjQwMEIwOUM2RSAvKiBDb21wb3NlZFNoYWRvd1RyZWVXYWxrZXIuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQ29tcG9zZWRTaGFkb3dUcmVlV2Fsa2VyLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTRBNkU5RkMxMTNDMTdEMUQwMDQ2QTdGOCAvKiBGb250
RmVhdHVyZVZhbHVlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEZv
bnRGZWF0dXJlVmFsdWUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMjI1Mzcs
NiArMjI1NDEsOCBAQAogCQkJCTkzOTg4NUMyMDhCN0UzRDEwMEU3MDdDNCAvKiBFdmVudE5hbWVz
LmggKi8sCiAJCQkJQkM5QTYxNDIxNDY4NTlEOTAwNjA1N0ZEIC8qIEV2ZW50TmFtZXMuaW4gKi8s
CiAJCQkJOEY2NzU2MTkxMjg4QjE3QjAwNDdBQ0EzIC8qIEV2ZW50UXVldWUuaCAqLywKKwkJCQk0
QTVDQjFDMzE2QzNBNUZEMDBBQjI4ODYgLyogRXZlbnRSZXRhcmdldGVyLmNwcCAqLywKKwkJCQk0
QTVDQjFDNDE2QzNBNUZEMDBBQjI4ODYgLyogRXZlbnRSZXRhcmdldGVyLmggKi8sCiAJCQkJQ0U1
Q0IxQjMxNEVEQUI2RjAwQkIyNzk1IC8qIEV2ZW50U2VuZGVyLmggKi8sCiAJCQkJRTEyRURCRTkw
QjMwOEUwQjAwMjcwNEI2IC8qIEV2ZW50VGFyZ2V0LmNwcCAqLywKIAkJCQlFMTJFREI3QTBCMzA4
QTc4MDAyNzA0QjYgLyogRXZlbnRUYXJnZXQuaCAqLywKQEAgLTI0MjYwLDYgKzI0MjY2LDcgQEAK
IAkJCQk5Mzk4ODVDNDA4QjdFM0QxMDBFNzA3QzQgLyogRXZlbnROYW1lcy5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJOEY2NzU2MUIxMjg4QjE3QjAwNDdBQ0EzIC8qIEV2ZW50UXVldWUuaCBpbiBIZWFk
ZXJzICovLAogCQkJCUUwRkVGMzcyQjE3QzUzRUFDMUMxRkJFRSAvKiBFdmVudFNvdXJjZS5oIGlu
IEhlYWRlcnMgKi8sCisJCQkJNEE1Q0IxQzYxNkMzQTVGRDAwQUIyODg2IC8qIEV2ZW50UmV0YXJn
ZXRlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRTEyRURCN0IwQjMwOEE3ODAwMjcwNEI2IC8qIEV2
ZW50VGFyZ2V0LmggaW4gSGVhZGVycyAqLywKIAkJCQk5N0FBM0NBNTE0NTIzN0NDMDAzRTFEQTYg
LyogRXZlbnRUYXJnZXRIZWFkZXJzLmggaW4gSGVhZGVycyAqLywKIAkJCQk5N0FBM0NBNjE0NTIz
N0NDMDAzRTFEQTYgLyogRXZlbnRUYXJnZXRJbnRlcmZhY2VzLmggaW4gSGVhZGVycyAqLywKQEAg
LTI3NTk2LDYgKzI3NjAzLDcgQEAKIAkJCQkxQ0ExOUUwNTBEQzI1NTk1MDA2NUE5OTQgLyogRXZl
bnRMb29wTWFjLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJOTM5ODg1QzMwOEI3RTNEMTAwRTcwN0M0
IC8qIEV2ZW50TmFtZXMuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJRTBGRUYzNzJCMjdDNTNFQUMx
QzFGQkVFIC8qIEV2ZW50U291cmNlLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTRBNUNCMUM1MTZD
M0E1RkQwMEFCMjg4NiAvKiBFdmVudFJldGFyZ2V0ZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJ
RTEyRURCRUEwQjMwOEUwQjAwMjcwNEI2IC8qIEV2ZW50VGFyZ2V0LmNwcCBpbiBTb3VyY2VzICov
LAogCQkJCUQ2RkRBRUYzMTQ5QzA2MTkwMDM3QjFFNCAvKiBFdmVudFRyYWNlci5jcHAgaW4gU291
cmNlcyAqLywKIAkJCQlCQzYwRDhGMjBEMkExMUUwMDBCOTkxOEYgLyogRXhjZXB0aW9uQmFzZS5j
cHAgaW4gU291cmNlcyAqLywKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9FdmVudERp
c3BhdGNoTWVkaWF0b3IuY3BwIGIvU291cmNlL1dlYkNvcmUvZG9tL0V2ZW50RGlzcGF0Y2hNZWRp
YXRvci5jcHAKaW5kZXggZTY4Mzc0MDA3MDQ1MzBjYTVmNTI3OGQwZjhiNjMxOTRkNDE5MzAxYi4u
YTMwOWM2OTU3MDQ0MjY1ZDBiNTNhMDM3OTJmZmI5NTQyMzNhZTUwNyAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvZG9tL0V2ZW50RGlzcGF0Y2hNZWRpYXRvci5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvZG9tL0V2ZW50RGlzcGF0Y2hNZWRpYXRvci5jcHAKQEAgLTMzLDYgKzMzLDcgQEAKIAog
I2luY2x1ZGUgIkV2ZW50LmgiCiAjaW5jbHVkZSAiRXZlbnREaXNwYXRjaGVyLmgiCisjaW5jbHVk
ZSAiRXZlbnRSZXRhcmdldGVyLmgiCiAjaW5jbHVkZSAiTm9kZS5oIgogCiBuYW1lc3BhY2UgV2Vi
Q29yZSB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vRXZlbnREaXNwYXRjaGVyLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9FdmVudERpc3BhdGNoZXIuY3BwCmluZGV4IDc2NTVjN2Nk
ZTcwZTVlODE5YmIyMTA5NWY2NjgwNzRlYWRkOWViZWQuLjRjNmM4MzUzYzg4MDJhY2I3OWM3ZDEw
MzNlNzg4NTA0ZTlmNDhhODggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9FdmVudERp
c3BhdGNoZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9FdmVudERpc3BhdGNoZXIuY3Bw
CkBAIC0zMSw2ICszMSw3IEBACiAjaW5jbHVkZSAiRWxlbWVudFNoYWRvdy5oIgogI2luY2x1ZGUg
IkV2ZW50Q29udGV4dC5oIgogI2luY2x1ZGUgIkV2ZW50RGlzcGF0Y2hNZWRpYXRvci5oIgorI2lu
Y2x1ZGUgIkV2ZW50UmV0YXJnZXRlci5oIgogI2luY2x1ZGUgIkZyYW1lVmlldy5oIgogI2luY2x1
ZGUgIkhUTUxNZWRpYUVsZW1lbnQuaCIKICNpbmNsdWRlICJJbnNlcnRpb25Qb2ludC5oIgpAQCAt
NDIsOTMgKzQzLDEwIEBACiAjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgogI2luY2x1ZGUgPHd0Zi9V
bnVzZWRQYXJhbS5oPgogCi0jaWYgRU5BQkxFKFNWRykKLSNpbmNsdWRlICJTVkdFbGVtZW50SW5z
dGFuY2UuaCIKLSNpbmNsdWRlICJTVkdOYW1lcy5oIgotI2luY2x1ZGUgIlNWR1VzZUVsZW1lbnQu
aCIKLSNlbmRpZgotCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIHN0YXRpYyBIYXNoU2V0PE5vZGUq
PiogZ05vZGVzRGlzcGF0Y2hpbmdTaW11bGF0ZWRDbGlja3MgPSAwOwogCi1FdmVudFJlbGF0ZWRU
YXJnZXRBZGp1c3Rlcjo6RXZlbnRSZWxhdGVkVGFyZ2V0QWRqdXN0ZXIoUGFzc1JlZlB0cjxOb2Rl
PiBub2RlLCBQYXNzUmVmUHRyPE5vZGU+IHJlbGF0ZWRUYXJnZXQpCi0gICAgOiBtX25vZGUobm9k
ZSkKLSAgICAsIG1fcmVsYXRlZFRhcmdldChyZWxhdGVkVGFyZ2V0KQotewotICAgIEFTU0VSVCht
X25vZGUpOwotICAgIEFTU0VSVChtX3JlbGF0ZWRUYXJnZXQpOwotfQotCi12b2lkIEV2ZW50UmVs
YXRlZFRhcmdldEFkanVzdGVyOjphZGp1c3QoRXZlbnRQYXRoJiBldmVudFBhdGgpCi17Ci0gICAg
Ly8gU3ludGhldGljIG1vdXNlIGV2ZW50cyBjYW4gaGF2ZSBhIHJlbGF0ZWRUYXJnZXQgd2hpY2gg
aXMgaWRlbnRpY2FsIHRvIHRoZSB0YXJnZXQuCi0gICAgYm9vbCB0YXJnZXRJc0lkZW50aWNhbFRv
VG9SZWxhdGVkVGFyZ2V0ID0gKG1fbm9kZS5nZXQoKSA9PSBtX3JlbGF0ZWRUYXJnZXQuZ2V0KCkp
OwotCi0gICAgVmVjdG9yPEV2ZW50VGFyZ2V0KiwgMzI+IHJlbGF0ZWRUYXJnZXRTdGFjazsKLSAg
ICBUcmVlU2NvcGUqIGxhc3RUcmVlU2NvcGUgPSAwOwotICAgIGZvciAoQW5jZXN0b3JDaGFpbldh
bGtlciB3YWxrZXIobV9yZWxhdGVkVGFyZ2V0LmdldCgpKTsgd2Fsa2VyLmdldCgpOyB3YWxrZXIu
cGFyZW50KCkpIHsKLSAgICAgICAgTm9kZSogbm9kZSA9IHdhbGtlci5nZXQoKTsKLSAgICAgICAg
aWYgKHJlbGF0ZWRUYXJnZXRTdGFjay5pc0VtcHR5KCkpCi0gICAgICAgICAgICByZWxhdGVkVGFy
Z2V0U3RhY2suYXBwZW5kKG5vZGUpOwotICAgICAgICBlbHNlIGlmICh3YWxrZXIuY3Jvc3NpbmdJ
bnNlcnRpb25Qb2ludCgpKQotICAgICAgICAgICAgcmVsYXRlZFRhcmdldFN0YWNrLmFwcGVuZChy
ZWxhdGVkVGFyZ2V0U3RhY2subGFzdCgpKTsKLSAgICAgICAgVHJlZVNjb3BlKiBzY29wZSA9IG5v
ZGUtPnRyZWVTY29wZSgpOwotICAgICAgICAvLyBTa2lwcyBhZGRpbmcgYSBub2RlIHRvIHRoZSBt
YXAgaWYgdHJlZVNjb3BlIGRvZXMgbm90IGNoYW5nZS4gSnVzdCBmb3IgdGhlIHBlcmZvcm1hbmNl
IG9wdGltaXphdGlvbi4KLSAgICAgICAgaWYgKHNjb3BlICE9IGxhc3RUcmVlU2NvcGUpCi0gICAg
ICAgICAgICBtX3JlbGF0ZWRUYXJnZXRNYXAuYWRkKHNjb3BlLCByZWxhdGVkVGFyZ2V0U3RhY2su
bGFzdCgpKTsKLSAgICAgICAgbGFzdFRyZWVTY29wZSA9IHNjb3BlOwotICAgICAgICBpZiAobm9k
ZS0+aXNTaGFkb3dSb290KCkpIHsKLSAgICAgICAgICAgIEFTU0VSVCghcmVsYXRlZFRhcmdldFN0
YWNrLmlzRW1wdHkoKSk7Ci0gICAgICAgICAgICByZWxhdGVkVGFyZ2V0U3RhY2sucmVtb3ZlTGFz
dCgpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgbGFzdFRyZWVTY29wZSA9IDA7Ci0gICAgRXZl
bnRUYXJnZXQqIGFkanVzdGVkUmVsYXRlZFRhcmdldCA9IDA7Ci0gICAgZm9yIChFdmVudFBhdGg6
Oml0ZXJhdG9yIGl0ZXIgPSBldmVudFBhdGguYmVnaW4oKTsgaXRlciA8IGV2ZW50UGF0aC5lbmQo
KTsgKytpdGVyKSB7Ci0gICAgICAgIEFTU0VSVCgoKml0ZXIpLT5pc01vdXNlT3JGb2N1c0V2ZW50
Q29udGV4dCgpKTsKLSAgICAgICAgTW91c2VPckZvY3VzRXZlbnRDb250ZXh0KiBtb3N1ZU9yRm9j
dXNFdmVudENvbnRleHQgPSBzdGF0aWNfY2FzdDxNb3VzZU9yRm9jdXNFdmVudENvbnRleHQqPihp
dGVyLT5nZXQoKSk7Ci0gICAgICAgIFRyZWVTY29wZSogc2NvcGUgPSBtb3N1ZU9yRm9jdXNFdmVu
dENvbnRleHQtPm5vZGUoKS0+dHJlZVNjb3BlKCk7Ci0gICAgICAgIGlmIChzY29wZSA9PSBsYXN0
VHJlZVNjb3BlKSB7Ci0gICAgICAgICAgICAvLyBSZS11c2UgdGhlIHByZXZpb3VzIGFkanVzdGVk
UmVsYXRlZFRhcmdldCBpZiB0cmVlU2NvcGUgZG9lcyBub3QgY2hhbmdlLiBKdXN0IGZvciB0aGUg
cGVyZm9ybWFuY2Ugb3B0aW1pemF0aW9uLgotICAgICAgICAgICAgbW9zdWVPckZvY3VzRXZlbnRD
b250ZXh0LT5zZXRSZWxhdGVkVGFyZ2V0KGFkanVzdGVkUmVsYXRlZFRhcmdldCk7Ci0gICAgICAg
IH0gZWxzZSB7Ci0gICAgICAgICAgICBhZGp1c3RlZFJlbGF0ZWRUYXJnZXQgPSBmaW5kUmVsYXRl
ZFRhcmdldChzY29wZSk7Ci0gICAgICAgICAgICBtb3N1ZU9yRm9jdXNFdmVudENvbnRleHQtPnNl
dFJlbGF0ZWRUYXJnZXQoYWRqdXN0ZWRSZWxhdGVkVGFyZ2V0KTsKLSAgICAgICAgfQotICAgICAg
ICBsYXN0VHJlZVNjb3BlID0gc2NvcGU7Ci0gICAgICAgIGlmICh0YXJnZXRJc0lkZW50aWNhbFRv
VG9SZWxhdGVkVGFyZ2V0KSB7Ci0gICAgICAgICAgICBpZiAobV9ub2RlLT50cmVlU2NvcGUoKS0+
cm9vdE5vZGUoKSA9PSBtb3N1ZU9yRm9jdXNFdmVudENvbnRleHQtPm5vZGUoKSkgewotICAgICAg
ICAgICAgICAgIGV2ZW50UGF0aC5zaHJpbmsoaXRlciArIDEgLSBldmVudFBhdGguYmVnaW4oKSk7
Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0gZWxzZSBp
ZiAobW9zdWVPckZvY3VzRXZlbnRDb250ZXh0LT50YXJnZXQoKSA9PSBhZGp1c3RlZFJlbGF0ZWRU
YXJnZXQpIHsKLSAgICAgICAgICAgIC8vIEV2ZW50IGRpc3BhdGNoaW5nIHNob3VsZCBiZSBzdG9w
cGVkIGhlcmUuCi0gICAgICAgICAgICBldmVudFBhdGguc2hyaW5rKGl0ZXIgLSBldmVudFBhdGgu
YmVnaW4oKSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgIH0KLX0KLQotRXZl
bnRUYXJnZXQqIEV2ZW50UmVsYXRlZFRhcmdldEFkanVzdGVyOjpmaW5kUmVsYXRlZFRhcmdldChU
cmVlU2NvcGUqIHNjb3BlKQotewotICAgIFZlY3RvcjxUcmVlU2NvcGUqLCAzMj4gcGFyZW50VHJl
ZVNjb3BlczsKLSAgICBFdmVudFRhcmdldCogcmVsYXRlZFRhcmdldCA9IDA7Ci0gICAgd2hpbGUg
KHNjb3BlKSB7Ci0gICAgICAgIHBhcmVudFRyZWVTY29wZXMuYXBwZW5kKHNjb3BlKTsKLSAgICAg
ICAgUmVsYXRlZFRhcmdldE1hcDo6Y29uc3RfaXRlcmF0b3IgZm91bmQgPSBtX3JlbGF0ZWRUYXJn
ZXRNYXAuZmluZChzY29wZSk7Ci0gICAgICAgIGlmIChmb3VuZCAhPSBtX3JlbGF0ZWRUYXJnZXRN
YXAuZW5kKCkpIHsKLSAgICAgICAgICAgIHJlbGF0ZWRUYXJnZXQgPSBmb3VuZC0+dmFsdWU7Ci0g
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBzY29wZSA9IHNjb3BlLT5wYXJl
bnRUcmVlU2NvcGUoKTsKLSAgICB9Ci0gICAgZm9yIChWZWN0b3I8VHJlZVNjb3BlKiwgMzI+Ojpp
dGVyYXRvciBpdGVyID0gcGFyZW50VHJlZVNjb3Blcy5iZWdpbigpOyBpdGVyIDwgcGFyZW50VHJl
ZVNjb3Blcy5lbmQoKTsgKytpdGVyKQotICAgICAgbV9yZWxhdGVkVGFyZ2V0TWFwLmFkZCgqaXRl
ciwgcmVsYXRlZFRhcmdldCk7Ci0gICAgcmV0dXJuIHJlbGF0ZWRUYXJnZXQ7Ci19Ci0KIGJvb2wg
RXZlbnREaXNwYXRjaGVyOjpkaXNwYXRjaEV2ZW50KE5vZGUqIG5vZGUsIFBhc3NSZWZQdHI8RXZl
bnREaXNwYXRjaE1lZGlhdG9yPiBtZWRpYXRvcikKIHsKICAgICBBU1NFUlQoIU5vRXZlbnREaXNw
YXRjaEFzc2VydGlvbjo6aXNFdmVudERpc3BhdGNoRm9yYmlkZGVuKCkpOwpAQCAtMTM3LDQ0ICs1
NSw2IEBAIGJvb2wgRXZlbnREaXNwYXRjaGVyOjpkaXNwYXRjaEV2ZW50KE5vZGUqIG5vZGUsIFBh
c3NSZWZQdHI8RXZlbnREaXNwYXRjaE1lZGlhdG9yCiAgICAgcmV0dXJuIG1lZGlhdG9yLT5kaXNw
YXRjaEV2ZW50KCZkaXNwYXRjaGVyKTsKIH0KIAotaW5saW5lIHN0YXRpYyBFdmVudFRhcmdldCog
ZXZlbnRUYXJnZXRSZXNwZWN0aW5nVGFyZ2V0UnVsZXMoTm9kZSogcmVmZXJlbmNlTm9kZSkKLXsK
LSAgICBBU1NFUlQocmVmZXJlbmNlTm9kZSk7Ci0KLSAgICBpZiAocmVmZXJlbmNlTm9kZS0+aXNQ
c2V1ZG9FbGVtZW50KCkpCi0gICAgICAgIHJldHVybiByZWZlcmVuY2VOb2RlLT5wYXJlbnROb2Rl
KCk7Ci0KLSNpZiBFTkFCTEUoU1ZHKQotICAgIGlmICghcmVmZXJlbmNlTm9kZS0+aXNTVkdFbGVt
ZW50KCkgfHwgIXJlZmVyZW5jZU5vZGUtPmlzSW5TaGFkb3dUcmVlKCkpCi0gICAgICAgIHJldHVy
biByZWZlcmVuY2VOb2RlOwotCi0gICAgLy8gU3BlYzogVGhlIGV2ZW50IGhhbmRsaW5nIGZvciB0
aGUgbm9uLWV4cG9zZWQgdHJlZSB3b3JrcyBhcyBpZiB0aGUgcmVmZXJlbmNlZCBlbGVtZW50IGhh
ZCBiZWVuIHRleHR1YWxseSBpbmNsdWRlZAotICAgIC8vIGFzIGEgZGVlcGx5IGNsb25lZCBjaGls
ZCBvZiB0aGUgJ3VzZScgZWxlbWVudCwgZXhjZXB0IHRoYXQgZXZlbnRzIGFyZSBkaXNwYXRjaGVk
IHRvIHRoZSBTVkdFbGVtZW50SW5zdGFuY2Ugb2JqZWN0cwotICAgIEVsZW1lbnQqIHNoYWRvd0hv
c3RFbGVtZW50ID0gdG9TaGFkb3dSb290KHJlZmVyZW5jZU5vZGUtPnRyZWVTY29wZSgpLT5yb290
Tm9kZSgpKS0+aG9zdCgpOwotICAgIC8vIEF0IHRoaXMgdGltZSwgU1ZHIG5vZGVzIGFyZSBub3Qg
c3VwcG9ydGVkIGluIG5vbi08dXNlPiBzaGFkb3cgdHJlZXMuCi0gICAgaWYgKCFzaGFkb3dIb3N0
RWxlbWVudCB8fCAhc2hhZG93SG9zdEVsZW1lbnQtPmhhc1RhZ05hbWUoU1ZHTmFtZXM6OnVzZVRh
ZykpCi0gICAgICAgIHJldHVybiByZWZlcmVuY2VOb2RlOwotICAgIFNWR1VzZUVsZW1lbnQqIHVz
ZUVsZW1lbnQgPSBzdGF0aWNfY2FzdDxTVkdVc2VFbGVtZW50Kj4oc2hhZG93SG9zdEVsZW1lbnQp
OwotICAgIGlmIChTVkdFbGVtZW50SW5zdGFuY2UqIGluc3RhbmNlID0gdXNlRWxlbWVudC0+aW5z
dGFuY2VGb3JTaGFkb3dUcmVlRWxlbWVudChyZWZlcmVuY2VOb2RlKSkKLSAgICAgICAgcmV0dXJu
IGluc3RhbmNlOwotI2VuZGlmCi0KLSAgICByZXR1cm4gcmVmZXJlbmNlTm9kZTsKLX0KLQotdm9p
ZCBFdmVudERpc3BhdGNoZXI6OmFkanVzdFJlbGF0ZWRUYXJnZXQoRXZlbnQqIGV2ZW50LCBQYXNz
UmVmUHRyPEV2ZW50VGFyZ2V0PiBwcnBSZWxhdGVkVGFyZ2V0KQotewotICAgIGlmICghcHJwUmVs
YXRlZFRhcmdldCkKLSAgICAgICAgcmV0dXJuOwotICAgIFJlZlB0cjxOb2RlPiByZWxhdGVkVGFy
Z2V0ID0gcHJwUmVsYXRlZFRhcmdldC0+dG9Ob2RlKCk7Ci0gICAgaWYgKCFyZWxhdGVkVGFyZ2V0
KQotICAgICAgICByZXR1cm47Ci0gICAgaWYgKCFtX25vZGUuZ2V0KCkpCi0gICAgICAgIHJldHVy
bjsKLSAgICBlbnN1cmVFdmVudFBhdGgoZXZlbnQpOwotICAgIEV2ZW50UmVsYXRlZFRhcmdldEFk
anVzdGVyKG1fbm9kZSwgcmVsYXRlZFRhcmdldC5yZWxlYXNlKCkpLmFkanVzdChtX2V2ZW50UGF0
aCk7Ci19Ci0KIEV2ZW50RGlzcGF0Y2hlcjo6RXZlbnREaXNwYXRjaGVyKE5vZGUqIG5vZGUpCiAg
ICAgOiBtX25vZGUobm9kZSkKICAgICAsIG1fZXZlbnRQYXRoSW5pdGlhbGl6ZWQoZmFsc2UpCkBA
IC0xODYsNDIgKzY2LDE5IEBAIEV2ZW50RGlzcGF0Y2hlcjo6RXZlbnREaXNwYXRjaGVyKE5vZGUq
IG5vZGUpCiAgICAgbV92aWV3ID0gbm9kZS0+ZG9jdW1lbnQoKS0+dmlldygpOwogfQogCi12b2lk
IEV2ZW50RGlzcGF0Y2hlcjo6ZW5zdXJlRXZlbnRQYXRoKEV2ZW50KiBldmVudCkKK0V2ZW50UGF0
aCYgRXZlbnREaXNwYXRjaGVyOjplbnN1cmVFdmVudFBhdGgoRXZlbnQqIGV2ZW50KQogewogICAg
IGlmIChtX2V2ZW50UGF0aEluaXRpYWxpemVkKQotICAgICAgICByZXR1cm47CisgICAgICAgIHJl
dHVybiBtX2V2ZW50UGF0aDsKICAgICBtX2V2ZW50UGF0aEluaXRpYWxpemVkID0gdHJ1ZTsKLSAg
ICBib29sIGluRG9jdW1lbnQgPSBtX25vZGUtPmluRG9jdW1lbnQoKTsKLSAgICBib29sIGlzU1ZH
RWxlbWVudCA9IG1fbm9kZS0+aXNTVkdFbGVtZW50KCk7Ci0gICAgYm9vbCBpc01vdXNlT3JGb2N1
c0V2ZW50ID0gZXZlbnQtPmlzTW91c2VFdmVudCgpIHx8IGV2ZW50LT5pc0ZvY3VzRXZlbnQoKTsK
LSAgICBWZWN0b3I8RXZlbnRUYXJnZXQqLCAzMj4gdGFyZ2V0U3RhY2s7Ci0gICAgZm9yIChBbmNl
c3RvckNoYWluV2Fsa2VyIHdhbGtlcihtX25vZGUuZ2V0KCkpOyB3YWxrZXIuZ2V0KCk7IHdhbGtl
ci5wYXJlbnQoKSkgewotICAgICAgICBOb2RlKiBub2RlID0gd2Fsa2VyLmdldCgpOwotICAgICAg
ICBpZiAodGFyZ2V0U3RhY2suaXNFbXB0eSgpKQotICAgICAgICAgICAgdGFyZ2V0U3RhY2suYXBw
ZW5kKGV2ZW50VGFyZ2V0UmVzcGVjdGluZ1RhcmdldFJ1bGVzKG5vZGUpKTsKLSAgICAgICAgZWxz
ZSBpZiAod2Fsa2VyLmNyb3NzaW5nSW5zZXJ0aW9uUG9pbnQoKSkKLSAgICAgICAgICAgIHRhcmdl
dFN0YWNrLmFwcGVuZCh0YXJnZXRTdGFjay5sYXN0KCkpOwotICAgICAgICBpZiAoaXNNb3VzZU9y
Rm9jdXNFdmVudCkKLSAgICAgICAgICAgIG1fZXZlbnRQYXRoLmFwcGVuZChhZG9wdFB0cihuZXcg
TW91c2VPckZvY3VzRXZlbnRDb250ZXh0KG5vZGUsIGV2ZW50VGFyZ2V0UmVzcGVjdGluZ1Rhcmdl
dFJ1bGVzKG5vZGUpLCB0YXJnZXRTdGFjay5sYXN0KCkpKSk7Ci0gICAgICAgIGVsc2UKLSAgICAg
ICAgICAgIG1fZXZlbnRQYXRoLmFwcGVuZChhZG9wdFB0cihuZXcgRXZlbnRDb250ZXh0KG5vZGUs
IGV2ZW50VGFyZ2V0UmVzcGVjdGluZ1RhcmdldFJ1bGVzKG5vZGUpLCB0YXJnZXRTdGFjay5sYXN0
KCkpKSk7Ci0gICAgICAgIGlmICghaW5Eb2N1bWVudCkKLSAgICAgICAgICAgIHJldHVybjsKLSAg
ICAgICAgaWYgKCFub2RlLT5pc1NoYWRvd1Jvb3QoKSkKLSAgICAgICAgICAgIGNvbnRpbnVlOwot
ICAgICAgICBpZiAoZGV0ZXJtaW5lRGlzcGF0Y2hCZWhhdmlvcihldmVudCwgdG9TaGFkb3dSb290
KG5vZGUpLCB0YXJnZXRTdGFjay5sYXN0KCkpID09IFN0YXlJbnNpZGVTaGFkb3dET00pCi0gICAg
ICAgICAgICByZXR1cm47Ci0gICAgICAgIGlmICghaXNTVkdFbGVtZW50KSB7Ci0gICAgICAgICAg
ICBBU1NFUlQoIXRhcmdldFN0YWNrLmlzRW1wdHkoKSk7Ci0gICAgICAgICAgICB0YXJnZXRTdGFj
ay5yZW1vdmVMYXN0KCk7Ci0gICAgICAgIH0KLSAgICB9CisgICAgRXZlbnRSZXRhcmdldGVyOjpj
YWxjdWxhdGVFdmVudFBhdGgobV9ub2RlLmdldCgpLCBldmVudCwgbV9ldmVudFBhdGgpOworICAg
IHJldHVybiBtX2V2ZW50UGF0aDsKIH0KIAogdm9pZCBFdmVudERpc3BhdGNoZXI6OmRpc3BhdGNo
U2NvcGVkRXZlbnQoTm9kZSogbm9kZSwgUGFzc1JlZlB0cjxFdmVudERpc3BhdGNoTWVkaWF0b3I+
IG1lZGlhdG9yKQogewogICAgIC8vIFdlIG5lZWQgdG8gc2V0IHRoZSB0YXJnZXQgaGVyZSBiZWNh
dXNlIGl0IGNhbiBnbyBhd2F5IGJ5IHRoZSB0aW1lIHdlIGFjdHVhbGx5IGZpcmUgdGhlIGV2ZW50
LgotICAgIG1lZGlhdG9yLT5ldmVudCgpLT5zZXRUYXJnZXQoZXZlbnRUYXJnZXRSZXNwZWN0aW5n
VGFyZ2V0UnVsZXMobm9kZSkpOworICAgIG1lZGlhdG9yLT5ldmVudCgpLT5zZXRUYXJnZXQoRXZl
bnRSZXRhcmdldGVyOjpldmVudFRhcmdldFJlc3BlY3RpbmdUYXJnZXRSdWxlcyhub2RlKSk7CiAg
ICAgU2NvcGVkRXZlbnRRdWV1ZTo6aW5zdGFuY2UoKS0+ZW5xdWV1ZUV2ZW50RGlzcGF0Y2hNZWRp
YXRvcihtZWRpYXRvcik7CiB9CiAKQEAgLTI2Miw3ICsxMTksNyBAQCBib29sIEV2ZW50RGlzcGF0
Y2hlcjo6ZGlzcGF0Y2hFdmVudChQYXNzUmVmUHRyPEV2ZW50PiBwcnBFdmVudCkKICAgICBSZWZQ
dHI8RXZlbnQ+IGV2ZW50ID0gcHJwRXZlbnQ7CiAgICAgQ2hpbGROb2Rlc0xhenlTbmFwc2hvdDo6
dGFrZUNoaWxkTm9kZXNMYXp5U25hcHNob3QoKTsKIAotICAgIGV2ZW50LT5zZXRUYXJnZXQoZXZl
bnRUYXJnZXRSZXNwZWN0aW5nVGFyZ2V0UnVsZXMobV9ub2RlLmdldCgpKSk7CisgICAgZXZlbnQt
PnNldFRhcmdldChFdmVudFJldGFyZ2V0ZXI6OmV2ZW50VGFyZ2V0UmVzcGVjdGluZ1RhcmdldFJ1
bGVzKG1fbm9kZS5nZXQoKSkpOwogICAgIEFTU0VSVCghTm9FdmVudERpc3BhdGNoQXNzZXJ0aW9u
Ojppc0V2ZW50RGlzcGF0Y2hGb3JiaWRkZW4oKSk7CiAgICAgQVNTRVJUKGV2ZW50LT50YXJnZXQo
KSk7CiAgICAgQVNTRVJUKCFldmVudC0+dHlwZSgpLmlzTnVsbCgpKTsgLy8gSmF2YVNjcmlwdCBj
b2RlIGNhbiBjcmVhdGUgYW4gZXZlbnQgd2l0aCBhbiBlbXB0eSBuYW1lLCBidXQgbm90IG51bGwu
CkBAIC0zNDgsNyArMjA1LDcgQEAgaW5saW5lIEV2ZW50RGlzcGF0Y2hDb250aW51YXRpb24gRXZl
bnREaXNwYXRjaGVyOjpkaXNwYXRjaEV2ZW50QXRCdWJibGluZyhQYXNzUmUKIAogaW5saW5lIHZv
aWQgRXZlbnREaXNwYXRjaGVyOjpkaXNwYXRjaEV2ZW50UG9zdFByb2Nlc3MoUGFzc1JlZlB0cjxF
dmVudD4gZXZlbnQsIHZvaWQqIHByZURpc3BhdGNoRXZlbnRIYW5kbGVyUmVzdWx0KQogewotICAg
IGV2ZW50LT5zZXRUYXJnZXQoZXZlbnRUYXJnZXRSZXNwZWN0aW5nVGFyZ2V0UnVsZXMobV9ub2Rl
LmdldCgpKSk7CisgICAgZXZlbnQtPnNldFRhcmdldChFdmVudFJldGFyZ2V0ZXI6OmV2ZW50VGFy
Z2V0UmVzcGVjdGluZ1RhcmdldFJ1bGVzKG1fbm9kZS5nZXQoKSkpOwogICAgIGV2ZW50LT5zZXRD
dXJyZW50VGFyZ2V0KDApOwogICAgIGV2ZW50LT5zZXRFdmVudFBoYXNlKDApOwogCkBAIC0zODMs
NDMgKzI0MCw0IEBAIGNvbnN0IEV2ZW50Q29udGV4dCogRXZlbnREaXNwYXRjaGVyOjp0b3BFdmVu
dENvbnRleHQoKQogICAgIHJldHVybiBtX2V2ZW50UGF0aC5pc0VtcHR5KCkgPyAwIDogbV9ldmVu
dFBhdGgubGFzdCgpLmdldCgpOwogfQogCi1zdGF0aWMgaW5saW5lIGJvb2wgaW5UaGVTYW1lU2Nv
cGUoU2hhZG93Um9vdCogc2hhZG93Um9vdCwgRXZlbnRUYXJnZXQqIHRhcmdldCkKLXsKLSAgICBy
ZXR1cm4gdGFyZ2V0LT50b05vZGUoKSAmJiB0YXJnZXQtPnRvTm9kZSgpLT50cmVlU2NvcGUoKS0+
cm9vdE5vZGUoKSA9PSBzaGFkb3dSb290OwotfQotCi1FdmVudERpc3BhdGNoQmVoYXZpb3IgRXZl
bnREaXNwYXRjaGVyOjpkZXRlcm1pbmVEaXNwYXRjaEJlaGF2aW9yKEV2ZW50KiBldmVudCwgU2hh
ZG93Um9vdCogc2hhZG93Um9vdCwgRXZlbnRUYXJnZXQqIHRhcmdldCkKLXsKLSNpZiBFTkFCTEUo
RlVMTFNDUkVFTl9BUEkpICYmIEVOQUJMRShWSURFTykKLSAgICAvLyBWaWRlby1vbmx5IGZ1bGwg
c2NyZWVuIGlzIGEgbW9kZSB3aGVyZSB3ZSB1c2UgdGhlIHNoYWRvdyBET00gYXMgYW4gaW1wbGVt
ZW50YXRpb24KLSAgICAvLyBkZXRhaWwgdGhhdCBzaG91bGQgbm90IGJlIGRldGVjdGFibGUgYnkg
dGhlIHdlYiBjb250ZW50LgotICAgIGlmIChFbGVtZW50KiBlbGVtZW50ID0gbV9ub2RlLT5kb2N1
bWVudCgpLT53ZWJraXRDdXJyZW50RnVsbFNjcmVlbkVsZW1lbnQoKSkgewotICAgICAgICAvLyBG
SVhNRTogV2UgYXNzdW1lIHRoYXQgaWYgdGhlIGZ1bGwgc2NyZWVuIGVsZW1lbnQgaXMgYSBtZWRp
YSBlbGVtZW50IHRoYXQgaXQncwotICAgICAgICAvLyB0aGUgdmlkZW8tb25seSBmdWxsIHNjcmVl
bi4gQm90aCBoZXJlIGFuZCBlbHNld2hlcmUuIEJ1dCB0aGF0IGlzIHByb2JhYmx5IHdyb25nLgot
ICAgICAgICBpZiAoZWxlbWVudC0+aXNNZWRpYUVsZW1lbnQoKSAmJiBzaGFkb3dSb290ICYmIHNo
YWRvd1Jvb3QtPmhvc3QoKSA9PSBlbGVtZW50KQotICAgICAgICAgICAgcmV0dXJuIFN0YXlJbnNp
ZGVTaGFkb3dET007Ci0gICAgfQotI2Vsc2UKLSAgICBVTlVTRURfUEFSQU0oc2hhZG93Um9vdCk7
Ci0jZW5kaWYKLQotICAgIC8vIFdlYktpdCBuZXZlciBhbGxvd2VkIHNlbGVjdHN0YXJ0IGV2ZW50
IHRvIGNyb3NzIHRoZSB0aGUgc2hhZG93IERPTSBib3VuZGFyeS4KLSAgICAvLyBDaGFuZ2luZyB0
aGlzIGJyZWFrcyBleGlzdGluZyBzaXRlcy4KLSAgICAvLyBTZWUgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTUyMTk1IGZvciBkZXRhaWxzLgotICAgIGNvbnN0IEF0b21p
Y1N0cmluZyBldmVudFR5cGUgPSBldmVudC0+dHlwZSgpOwotICAgIGlmIChpblRoZVNhbWVTY29w
ZShzaGFkb3dSb290LCB0YXJnZXQpCi0gICAgICAgICYmIChldmVudFR5cGUgPT0gZXZlbnROYW1l
cygpLmFib3J0RXZlbnQKLSAgICAgICAgICAgIHx8IGV2ZW50VHlwZSA9PSBldmVudE5hbWVzKCku
Y2hhbmdlRXZlbnQKLSAgICAgICAgICAgIHx8IGV2ZW50VHlwZSA9PSBldmVudE5hbWVzKCkuZXJy
b3JFdmVudAotICAgICAgICAgICAgfHwgZXZlbnRUeXBlID09IGV2ZW50TmFtZXMoKS5sb2FkRXZl
bnQKLSAgICAgICAgICAgIHx8IGV2ZW50VHlwZSA9PSBldmVudE5hbWVzKCkucmVzZXRFdmVudAot
ICAgICAgICAgICAgfHwgZXZlbnRUeXBlID09IGV2ZW50TmFtZXMoKS5yZXNpemVFdmVudAotICAg
ICAgICAgICAgfHwgZXZlbnRUeXBlID09IGV2ZW50TmFtZXMoKS5zY3JvbGxFdmVudAotICAgICAg
ICAgICAgfHwgZXZlbnRUeXBlID09IGV2ZW50TmFtZXMoKS5zZWxlY3RFdmVudAotICAgICAgICAg
ICAgfHwgZXZlbnRUeXBlID09IGV2ZW50TmFtZXMoKS5zZWxlY3RzdGFydEV2ZW50KSkKLSAgICAg
ICAgcmV0dXJuIFN0YXlJbnNpZGVTaGFkb3dET007Ci0KLSAgICByZXR1cm4gUmV0YXJnZXRFdmVu
dDsKLX0KLQogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL0V2ZW50RGlzcGF0Y2hl
ci5oIGIvU291cmNlL1dlYkNvcmUvZG9tL0V2ZW50RGlzcGF0Y2hlci5oCmluZGV4IDdkZjQwMTA3
YjIzNDAwMGVhNzU4Nzc3M2VmOTM1YWYwOTQ0M2JmMjIuLjk5MmVhZDgyZDNhNmFlMmYyYTdhYTUx
ZGE1ZTAxY2JkMjNlOTU5NjkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9FdmVudERp
c3BhdGNoZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vRXZlbnREaXNwYXRjaGVyLmgKQEAg
LTQ1LDI5ICs0NSwxMSBAQCBjbGFzcyBTaGFkb3dSb290OwogY2xhc3MgVHJlZVNjb3BlOwogY2xh
c3MgV2luZG93RXZlbnRDb250ZXh0OwogCi1lbnVtIEV2ZW50RGlzcGF0Y2hCZWhhdmlvciB7Ci0g
ICAgUmV0YXJnZXRFdmVudCwKLSAgICBTdGF5SW5zaWRlU2hhZG93RE9NCi19OwotCiBlbnVtIEV2
ZW50RGlzcGF0Y2hDb250aW51YXRpb24gewogICAgIENvbnRpbnVlRGlzcGF0Y2hpbmcsCiAgICAg
RG9uZURpc3BhdGNoaW5nCiB9OwogCi1jbGFzcyBFdmVudFJlbGF0ZWRUYXJnZXRBZGp1c3RlciB7
Ci1wdWJsaWM6Ci0gICAgRXZlbnRSZWxhdGVkVGFyZ2V0QWRqdXN0ZXIoUGFzc1JlZlB0cjxOb2Rl
PiwgUGFzc1JlZlB0cjxOb2RlPiByZWxhdGVkVGFyZ2V0KTsKLSAgICB2b2lkIGFkanVzdChFdmVu
dFBhdGgmKTsKLXByaXZhdGU6Ci0gICAgdHlwZWRlZiBIYXNoTWFwPFRyZWVTY29wZSosIEV2ZW50
VGFyZ2V0Kj4gUmVsYXRlZFRhcmdldE1hcDsKLSAgICBFdmVudFRhcmdldCogZmluZFJlbGF0ZWRU
YXJnZXQoVHJlZVNjb3BlKik7Ci0KLSAgICBSZWZQdHI8Tm9kZT4gbV9ub2RlOwotICAgIFJlZlB0
cjxOb2RlPiBtX3JlbGF0ZWRUYXJnZXQ7Ci0gICAgUmVsYXRlZFRhcmdldE1hcCBtX3JlbGF0ZWRU
YXJnZXRNYXA7Ci19OwotCiBjbGFzcyBFdmVudERpc3BhdGNoZXIgewogcHVibGljOgogICAgIHN0
YXRpYyBib29sIGRpc3BhdGNoRXZlbnQoTm9kZSosIFBhc3NSZWZQdHI8RXZlbnREaXNwYXRjaE1l
ZGlhdG9yPik7CkBAIC03NiwxNSArNTgsMTEgQEAgcHVibGljOgogICAgIHN0YXRpYyB2b2lkIGRp
c3BhdGNoU2ltdWxhdGVkQ2xpY2soTm9kZSosIEV2ZW50KiB1bmRlcmx5aW5nRXZlbnQsIFNpbXVs
YXRlZENsaWNrTW91c2VFdmVudE9wdGlvbnMsIFNpbXVsYXRlZENsaWNrVmlzdWFsT3B0aW9ucyk7
CiAKICAgICBib29sIGRpc3BhdGNoRXZlbnQoUGFzc1JlZlB0cjxFdmVudD4pOwotICAgIHZvaWQg
YWRqdXN0UmVsYXRlZFRhcmdldChFdmVudCosIFBhc3NSZWZQdHI8RXZlbnRUYXJnZXQ+IHBycFJl
bGF0ZWRUYXJnZXQpOwogICAgIE5vZGUqIG5vZGUoKSBjb25zdDsKKyAgICBFdmVudFBhdGgmIGVu
c3VyZUV2ZW50UGF0aChFdmVudCopOwogCiBwcml2YXRlOgogICAgIEV2ZW50RGlzcGF0Y2hlcihO
b2RlKik7Ci0KLSAgICBFdmVudERpc3BhdGNoQmVoYXZpb3IgZGV0ZXJtaW5lRGlzcGF0Y2hCZWhh
dmlvcihFdmVudCosIFNoYWRvd1Jvb3QqLCBFdmVudFRhcmdldCopOwotCi0gICAgdm9pZCBlbnN1
cmVFdmVudFBhdGgoRXZlbnQqKTsKICAgICBjb25zdCBFdmVudENvbnRleHQqIHRvcEV2ZW50Q29u
dGV4dCgpOwogCiAgICAgRXZlbnREaXNwYXRjaENvbnRpbnVhdGlvbiBkaXNwYXRjaEV2ZW50UHJl
UHJvY2VzcyhQYXNzUmVmUHRyPEV2ZW50Piwgdm9pZComIHByZURpc3BhdGNoRXZlbnRIYW5kbGVy
UmVzdWx0KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9FdmVudFJldGFyZ2V0ZXIu
Y3BwIGIvU291cmNlL1dlYkNvcmUvZG9tL0V2ZW50UmV0YXJnZXRlci5jcHAKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4u
OTI3MzBkMGU5YzJlNmU3ZDViYmI5M2M2MmQ0ZmE4MjE3MjIwMGYyYQotLS0gL2Rldi9udWxsCisr
KyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9FdmVudFJldGFyZ2V0ZXIuY3BwCkBAIC0wLDAgKzEsMjA3
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVk
aXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUg
R05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRo
ZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBM
aWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRo
aXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNl
ZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxp
ZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExp
Y2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQg
YSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9u
ZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3
cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmts
aW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgor
ICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJFdmVudFJldGFyZ2V0ZXIuaCIK
KworI2luY2x1ZGUgIkFuY2VzdG9yQ2hhaW5XYWxrZXIuaCIKKyNpbmNsdWRlICJDb250YWluZXJO
b2RlLmgiCisjaW5jbHVkZSAiRXZlbnRDb250ZXh0LmgiCisjaW5jbHVkZSAiRm9jdXNFdmVudC5o
IgorI2luY2x1ZGUgIk1vdXNlRXZlbnQuaCIKKyNpbmNsdWRlICJTaGFkb3dSb290LmgiCisjaW5j
bHVkZSAiVHJlZVNjb3BlLmgiCisjaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KKyNpbmNsdWRl
IDx3dGYvUmVmUHRyLmg+CisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgorCituYW1lc3BhY2UgV2Vi
Q29yZSB7CisKK3N0YXRpYyBpbmxpbmUgYm9vbCBpblRoZVNhbWVTY29wZShTaGFkb3dSb290KiBz
aGFkb3dSb290LCBFdmVudFRhcmdldCogdGFyZ2V0KQoreworICAgIHJldHVybiB0YXJnZXQtPnRv
Tm9kZSgpICYmIHRhcmdldC0+dG9Ob2RlKCktPnRyZWVTY29wZSgpLT5yb290Tm9kZSgpID09IHNo
YWRvd1Jvb3Q7Cit9CisKK3N0YXRpYyBpbmxpbmUgRXZlbnREaXNwYXRjaEJlaGF2aW9yIGRldGVy
bWluZURpc3BhdGNoQmVoYXZpb3IoRXZlbnQqIGV2ZW50LCBTaGFkb3dSb290KiBzaGFkb3dSb290
LCBFdmVudFRhcmdldCogdGFyZ2V0KQoreworI2lmIEVOQUJMRShGVUxMU0NSRUVOX0FQSSkgJiYg
RU5BQkxFKFZJREVPKQorICAgIC8vIFZpZGVvLW9ubHkgZnVsbCBzY3JlZW4gaXMgYSBtb2RlIHdo
ZXJlIHdlIHVzZSB0aGUgc2hhZG93IERPTSBhcyBhbiBpbXBsZW1lbnRhdGlvbgorICAgIC8vIGRl
dGFpbCB0aGF0IHNob3VsZCBub3QgYmUgZGV0ZWN0YWJsZSBieSB0aGUgd2ViIGNvbnRlbnQuCisg
ICAgaWYgKEVsZW1lbnQqIGVsZW1lbnQgPSB0YXJnZXQtPnRvTm9kZSgpLT5kb2N1bWVudCgpLT53
ZWJraXRDdXJyZW50RnVsbFNjcmVlbkVsZW1lbnQoKSkgeworICAgICAgICAvLyBGSVhNRTogV2Ug
YXNzdW1lIHRoYXQgaWYgdGhlIGZ1bGwgc2NyZWVuIGVsZW1lbnQgaXMgYSBtZWRpYSBlbGVtZW50
IHRoYXQgaXQncworICAgICAgICAvLyB0aGUgdmlkZW8tb25seSBmdWxsIHNjcmVlbi4gQm90aCBo
ZXJlIGFuZCBlbHNld2hlcmUuIEJ1dCB0aGF0IGlzIHByb2JhYmx5IHdyb25nLgorICAgICAgICBp
ZiAoZWxlbWVudC0+aXNNZWRpYUVsZW1lbnQoKSAmJiBzaGFkb3dSb290ICYmIHNoYWRvd1Jvb3Qt
Pmhvc3QoKSA9PSBlbGVtZW50KQorICAgICAgICAgICAgcmV0dXJuIFN0YXlJbnNpZGVTaGFkb3dE
T007CisgICAgfQorI2Vsc2UKKyAgICBVTlVTRURfUEFSQU0oc2hhZG93Um9vdCk7CisjZW5kaWYK
KworICAgIC8vIFdlYktpdCBuZXZlciBhbGxvd2VkIHNlbGVjdHN0YXJ0IGV2ZW50IHRvIGNyb3Nz
IHRoZSB0aGUgc2hhZG93IERPTSBib3VuZGFyeS4KKyAgICAvLyBDaGFuZ2luZyB0aGlzIGJyZWFr
cyBleGlzdGluZyBzaXRlcy4KKyAgICAvLyBTZWUgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTUyMTk1IGZvciBkZXRhaWxzLgorICAgIGNvbnN0IEF0b21pY1N0cmluZyBl
dmVudFR5cGUgPSBldmVudC0+dHlwZSgpOworICAgIGlmIChpblRoZVNhbWVTY29wZShzaGFkb3dS
b290LCB0YXJnZXQpCisgICAgICAgICYmIChldmVudFR5cGUgPT0gZXZlbnROYW1lcygpLmFib3J0
RXZlbnQKKyAgICAgICAgICAgIHx8IGV2ZW50VHlwZSA9PSBldmVudE5hbWVzKCkuY2hhbmdlRXZl
bnQKKyAgICAgICAgICAgIHx8IGV2ZW50VHlwZSA9PSBldmVudE5hbWVzKCkuZXJyb3JFdmVudAor
ICAgICAgICAgICAgfHwgZXZlbnRUeXBlID09IGV2ZW50TmFtZXMoKS5sb2FkRXZlbnQKKyAgICAg
ICAgICAgIHx8IGV2ZW50VHlwZSA9PSBldmVudE5hbWVzKCkucmVzZXRFdmVudAorICAgICAgICAg
ICAgfHwgZXZlbnRUeXBlID09IGV2ZW50TmFtZXMoKS5yZXNpemVFdmVudAorICAgICAgICAgICAg
fHwgZXZlbnRUeXBlID09IGV2ZW50TmFtZXMoKS5zY3JvbGxFdmVudAorICAgICAgICAgICAgfHwg
ZXZlbnRUeXBlID09IGV2ZW50TmFtZXMoKS5zZWxlY3RFdmVudAorICAgICAgICAgICAgfHwgZXZl
bnRUeXBlID09IGV2ZW50TmFtZXMoKS5zZWxlY3RzdGFydEV2ZW50KSkKKyAgICAgICAgcmV0dXJu
IFN0YXlJbnNpZGVTaGFkb3dET007CisKKyAgICByZXR1cm4gUmV0YXJnZXRFdmVudDsKK30KKwor
dm9pZCBFdmVudFJldGFyZ2V0ZXI6OmNhbGN1bGF0ZUV2ZW50UGF0aChOb2RlKiBub2RlLCBFdmVu
dCogZXZlbnQsIEV2ZW50UGF0aCYgZXZlbnRQYXRoKQoreworICAgIGJvb2wgaW5Eb2N1bWVudCA9
IG5vZGUtPmluRG9jdW1lbnQoKTsKKyAgICBib29sIGlzU1ZHRWxlbWVudCA9IG5vZGUtPmlzU1ZH
RWxlbWVudCgpOworICAgIGJvb2wgaXNNb3VzZU9yRm9jdXNFdmVudCA9IGV2ZW50LT5pc01vdXNl
RXZlbnQoKSB8fCBldmVudC0+aXNGb2N1c0V2ZW50KCk7CisgICAgVmVjdG9yPEV2ZW50VGFyZ2V0
KiwgMzI+IHRhcmdldFN0YWNrOworICAgIGZvciAoQW5jZXN0b3JDaGFpbldhbGtlciB3YWxrZXIo
bm9kZSk7IHdhbGtlci5nZXQoKTsgd2Fsa2VyLnBhcmVudCgpKSB7CisgICAgICAgIE5vZGUqIG5v
ZGUgPSB3YWxrZXIuZ2V0KCk7CisgICAgICAgIGlmICh0YXJnZXRTdGFjay5pc0VtcHR5KCkpCisg
ICAgICAgICAgICB0YXJnZXRTdGFjay5hcHBlbmQoZXZlbnRUYXJnZXRSZXNwZWN0aW5nVGFyZ2V0
UnVsZXMobm9kZSkpOworICAgICAgICBlbHNlIGlmICh3YWxrZXIuY3Jvc3NpbmdJbnNlcnRpb25Q
b2ludCgpKQorICAgICAgICAgICAgdGFyZ2V0U3RhY2suYXBwZW5kKHRhcmdldFN0YWNrLmxhc3Qo
KSk7CisgICAgICAgIGlmIChpc01vdXNlT3JGb2N1c0V2ZW50KQorICAgICAgICAgICAgZXZlbnRQ
YXRoLmFwcGVuZChhZG9wdFB0cihuZXcgTW91c2VPckZvY3VzRXZlbnRDb250ZXh0KG5vZGUsIGV2
ZW50VGFyZ2V0UmVzcGVjdGluZ1RhcmdldFJ1bGVzKG5vZGUpLCB0YXJnZXRTdGFjay5sYXN0KCkp
KSk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGV2ZW50UGF0aC5hcHBlbmQoYWRvcHRQdHIo
bmV3IEV2ZW50Q29udGV4dChub2RlLCBldmVudFRhcmdldFJlc3BlY3RpbmdUYXJnZXRSdWxlcyhu
b2RlKSwgdGFyZ2V0U3RhY2subGFzdCgpKSkpOworICAgICAgICBpZiAoIWluRG9jdW1lbnQpCisg
ICAgICAgICAgICByZXR1cm47CisgICAgICAgIGlmICghbm9kZS0+aXNTaGFkb3dSb290KCkpCisg
ICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgaWYgKGRldGVybWluZURpc3BhdGNoQmVoYXZp
b3IoZXZlbnQsIHRvU2hhZG93Um9vdChub2RlKSwgdGFyZ2V0U3RhY2subGFzdCgpKSA9PSBTdGF5
SW5zaWRlU2hhZG93RE9NKQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBpZiAoIWlzU1ZH
RWxlbWVudCkgeworICAgICAgICAgICAgQVNTRVJUKCF0YXJnZXRTdGFjay5pc0VtcHR5KCkpOwor
ICAgICAgICAgICAgdGFyZ2V0U3RhY2sucmVtb3ZlTGFzdCgpOworICAgICAgICB9CisgICAgfQor
fQorCit2b2lkIEV2ZW50UmV0YXJnZXRlcjo6YWRqdXN0Rm9yTW91c2VFdmVudChOb2RlKiBub2Rl
LCBjb25zdCBNb3VzZUV2ZW50JiBtb3VzZUV2ZW50LCBFdmVudFBhdGgmIGV2ZW50UGF0aCkKK3sK
KyAgICBhZGp1c3RGb3JSZWxhdGVkVGFyZ2V0KG5vZGUsIG1vdXNlRXZlbnQucmVsYXRlZFRhcmdl
dCgpLCBldmVudFBhdGgpOworfQorCit2b2lkIEV2ZW50UmV0YXJnZXRlcjo6YWRqdXN0Rm9yRm9j
dXNFdmVudChOb2RlKiBub2RlLCBjb25zdCBGb2N1c0V2ZW50JiBmb2N1c0V2ZW50LCBFdmVudFBh
dGgmIGV2ZW50UGF0aCkKK3sKKyAgICBhZGp1c3RGb3JSZWxhdGVkVGFyZ2V0KG5vZGUsIGZvY3Vz
RXZlbnQucmVsYXRlZFRhcmdldCgpLCBldmVudFBhdGgpOworfQorCit2b2lkIEV2ZW50UmV0YXJn
ZXRlcjo6YWRqdXN0Rm9yUmVsYXRlZFRhcmdldChOb2RlKiBub2RlLCBFdmVudFRhcmdldCogcmVs
YXRlZFRhcmdldCwgRXZlbnRQYXRoJiBldmVudFBhdGgpCit7CisgICAgaWYgKCFub2RlKQorICAg
ICAgICByZXR1cm47CisgICAgaWYgKCFyZWxhdGVkVGFyZ2V0KQorICAgICAgICByZXR1cm47Cisg
ICAgTm9kZSogcmVsYXRlZE5vZGUgPSByZWxhdGVkVGFyZ2V0LT50b05vZGUoKTsKKyAgICBpZiAo
IXJlbGF0ZWROb2RlKQorICAgICAgICByZXR1cm47CisgICAgQWRqdXN0ZWROb2RlcyBhZGp1c3Rl
ZE5vZGVzOworICAgIGNhbGN1bGF0ZUFkanVzdGVkTm9kZXMobm9kZSwgcmVsYXRlZE5vZGUsIGV2
ZW50UGF0aCwgYWRqdXN0ZWROb2Rlcyk7CisgICAgQVNTRVJUKGFkanVzdGVkTm9kZXMuc2l6ZSgp
IDw9IGV2ZW50UGF0aC5zaXplKCkpOworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgYWRqdXN0
ZWROb2Rlcy5zaXplKCk7ICsraSkgeworICAgICAgICBBU1NFUlQoZXZlbnRQYXRoW2ldLT5pc01v
dXNlT3JGb2N1c0V2ZW50Q29udGV4dCgpKTsKKyAgICAgICAgTW91c2VPckZvY3VzRXZlbnRDb250
ZXh0KiBtb3VzZU9yRm9jdXNFdmVudENvbnRleHQgPSBzdGF0aWNfY2FzdDxNb3VzZU9yRm9jdXNF
dmVudENvbnRleHQqPihldmVudFBhdGhbaV0uZ2V0KCkpOworICAgICAgICBtb3VzZU9yRm9jdXNF
dmVudENvbnRleHQtPnNldFJlbGF0ZWRUYXJnZXQoYWRqdXN0ZWROb2Rlc1tpXSk7CisgICAgfQor
fQorCit2b2lkIEV2ZW50UmV0YXJnZXRlcjo6Y2FsY3VsYXRlQWRqdXN0ZWROb2RlcyhOb2RlKiBu
b2RlLCBOb2RlKiByZWxhdGVkTm9kZSwgRXZlbnRQYXRoJiBldmVudFBhdGgsIEFkanVzdGVkTm9k
ZXMmIGFkanVzdGVkTm9kZXMpCit7CisgICAgUmVsYXRlZE5vZGVNYXAgcmVsYXRlZE5vZGVNYXA7
CisgICAgYnVpbGRSZWxhdGVkTm9kZU1hcChyZWxhdGVkTm9kZSwgcmVsYXRlZE5vZGVNYXApOwor
CisgICAgLy8gU3ludGhldGljIG1vdXNlIGV2ZW50cyBjYW4gaGF2ZSBhIHJlbGF0ZWRUYXJnZXQg
d2hpY2ggaXMgaWRlbnRpY2FsIHRvIHRoZSB0YXJnZXQuCisgICAgYm9vbCB0YXJnZXRJc0lkZW50
aWNhbFRvVG9SZWxhdGVkVGFyZ2V0ID0gKG5vZGUgPT0gcmVsYXRlZE5vZGUpOworCisgICAgVHJl
ZVNjb3BlKiBsYXN0VHJlZVNjb3BlID0gMDsKKyAgICBOb2RlKiBhZGp1c3RlZE5vZGUgPSAwOwor
ICAgIGZvciAoRXZlbnRQYXRoOjpjb25zdF9pdGVyYXRvciBpdGVyID0gZXZlbnRQYXRoLmJlZ2lu
KCk7IGl0ZXIgPCBldmVudFBhdGguZW5kKCk7ICsraXRlcikgeworICAgICAgICBUcmVlU2NvcGUq
IHNjb3BlID0gKCppdGVyKS0+bm9kZSgpLT50cmVlU2NvcGUoKTsKKyAgICAgICAgaWYgKHNjb3Bl
ID09IGxhc3RUcmVlU2NvcGUpIHsKKyAgICAgICAgICAgIC8vIFJlLXVzZSB0aGUgcHJldmlvdXMg
YWRqdXN0ZWRSZWxhdGVkVGFyZ2V0IGlmIHRyZWVTY29wZSBkb2VzIG5vdCBjaGFuZ2UuIEp1c3Qg
Zm9yIHRoZSBwZXJmb3JtYW5jZSBvcHRpbWl6YXRpb24uCisgICAgICAgICAgICBhZGp1c3RlZE5v
ZGVzLmFwcGVuZChhZGp1c3RlZE5vZGUpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAg
YWRqdXN0ZWROb2RlID0gZmluZFJlbGF0ZWROb2RlKHNjb3BlLCByZWxhdGVkTm9kZU1hcCk7Cisg
ICAgICAgICAgICBhZGp1c3RlZE5vZGVzLmFwcGVuZChhZGp1c3RlZE5vZGUpOworICAgICAgICB9
CisgICAgICAgIGxhc3RUcmVlU2NvcGUgPSBzY29wZTsKKyAgICAgICAgaWYgKHRhcmdldElzSWRl
bnRpY2FsVG9Ub1JlbGF0ZWRUYXJnZXQpIHsKKyAgICAgICAgICAgIGlmIChub2RlLT50cmVlU2Nv
cGUoKS0+cm9vdE5vZGUoKSA9PSAoKml0ZXIpLT5ub2RlKCkpIHsKKyAgICAgICAgICAgICAgICBl
dmVudFBhdGguc2hyaW5rKGl0ZXIgKyAxIC0gZXZlbnRQYXRoLmJlZ2luKCkpOworICAgICAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICB9IGVsc2UgaWYgKCgqaXRlcikt
PnRhcmdldCgpID09IGFkanVzdGVkTm9kZSkgeworICAgICAgICAgICAgLy8gRXZlbnQgZGlzcGF0
Y2hpbmcgc2hvdWxkIGJlIHN0b3BwZWQgaGVyZS4KKyAgICAgICAgICAgIGV2ZW50UGF0aC5zaHJp
bmsoaXRlciAtIGV2ZW50UGF0aC5iZWdpbigpKTsKKyAgICAgICAgICAgIGFkanVzdGVkTm9kZXMu
c2hyaW5rKGFkanVzdGVkTm9kZXMuc2l6ZSgpIC0gMSk7CisgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgfQorICAgIH0KK30KKwordm9pZCBFdmVudFJldGFyZ2V0ZXI6OmJ1aWxkUmVsYXRlZE5v
ZGVNYXAoTm9kZSogcmVsYXRlZE5vZGUsIFJlbGF0ZWROb2RlTWFwJiByZWxhdGVkTm9kZU1hcCkK
K3sKKyAgICBWZWN0b3I8Tm9kZSosIDMyPiByZWxhdGVkTm9kZVN0YWNrOworICAgIFRyZWVTY29w
ZSogbGFzdFRyZWVTY29wZSA9IDA7CisgICAgZm9yIChBbmNlc3RvckNoYWluV2Fsa2VyIHdhbGtl
cihyZWxhdGVkTm9kZSk7IHdhbGtlci5nZXQoKTsgd2Fsa2VyLnBhcmVudCgpKSB7CisgICAgICAg
IE5vZGUqIG5vZGUgPSB3YWxrZXIuZ2V0KCk7CisgICAgICAgIGlmIChyZWxhdGVkTm9kZVN0YWNr
LmlzRW1wdHkoKSkKKyAgICAgICAgICAgIHJlbGF0ZWROb2RlU3RhY2suYXBwZW5kKG5vZGUpOwor
ICAgICAgICBlbHNlIGlmICh3YWxrZXIuY3Jvc3NpbmdJbnNlcnRpb25Qb2ludCgpKQorICAgICAg
ICAgICAgcmVsYXRlZE5vZGVTdGFjay5hcHBlbmQocmVsYXRlZE5vZGVTdGFjay5sYXN0KCkpOwor
ICAgICAgICBUcmVlU2NvcGUqIHNjb3BlID0gbm9kZS0+dHJlZVNjb3BlKCk7CisgICAgICAgIC8v
IFNraXBzIGFkZGluZyBhIG5vZGUgdG8gdGhlIG1hcCBpZiB0cmVlU2NvcGUgZG9lcyBub3QgY2hh
bmdlLiBKdXN0IGZvciB0aGUgcGVyZm9ybWFuY2Ugb3B0aW1pemF0aW9uLgorICAgICAgICBpZiAo
c2NvcGUgIT0gbGFzdFRyZWVTY29wZSkKKyAgICAgICAgICAgIHJlbGF0ZWROb2RlTWFwLmFkZChz
Y29wZSwgcmVsYXRlZE5vZGVTdGFjay5sYXN0KCkpOworICAgICAgICBsYXN0VHJlZVNjb3BlID0g
c2NvcGU7CisgICAgICAgIGlmIChub2RlLT5pc1NoYWRvd1Jvb3QoKSkgeworICAgICAgICAgICAg
QVNTRVJUKCFyZWxhdGVkTm9kZVN0YWNrLmlzRW1wdHkoKSk7CisgICAgICAgICAgICByZWxhdGVk
Tm9kZVN0YWNrLnJlbW92ZUxhc3QoKTsKKyAgICAgICAgfQorICAgIH0KK30KKworTm9kZSogRXZl
bnRSZXRhcmdldGVyOjpmaW5kUmVsYXRlZE5vZGUoVHJlZVNjb3BlKiBzY29wZSwgUmVsYXRlZE5v
ZGVNYXAmIHJlbGF0ZWROb2RlTWFwKQoreworICAgIFZlY3RvcjxUcmVlU2NvcGUqLCAzMj4gcGFy
ZW50VHJlZVNjb3BlczsKKyAgICBOb2RlKiByZWxhdGVkTm9kZSA9IDA7CisgICAgd2hpbGUgKHNj
b3BlKSB7CisgICAgICAgIHBhcmVudFRyZWVTY29wZXMuYXBwZW5kKHNjb3BlKTsKKyAgICAgICAg
UmVsYXRlZE5vZGVNYXA6OmNvbnN0X2l0ZXJhdG9yIGZvdW5kID0gcmVsYXRlZE5vZGVNYXAuZmlu
ZChzY29wZSk7CisgICAgICAgIGlmIChmb3VuZCAhPSByZWxhdGVkTm9kZU1hcC5lbmQoKSkgewor
ICAgICAgICAgICAgcmVsYXRlZE5vZGUgPSBmb3VuZC0+dmFsdWU7CisgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgfQorICAgICAgICBzY29wZSA9IHNjb3BlLT5wYXJlbnRUcmVlU2NvcGUoKTsK
KyAgICB9CisgICAgZm9yIChWZWN0b3I8VHJlZVNjb3BlKiwgMzI+OjppdGVyYXRvciBpdGVyID0g
cGFyZW50VHJlZVNjb3Blcy5iZWdpbigpOyBpdGVyIDwgcGFyZW50VHJlZVNjb3Blcy5lbmQoKTsg
KytpdGVyKQorICAgICAgICByZWxhdGVkTm9kZU1hcC5hZGQoKml0ZXIsIHJlbGF0ZWROb2RlKTsK
KyAgICByZXR1cm4gcmVsYXRlZE5vZGU7Cit9CisKK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL2RvbS9FdmVudFJldGFyZ2V0ZXIuaCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9FdmVudFJldGFy
Z2V0ZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwLi5jNzExYTk2ZTgzMjZiZTUwMzYxZTYxZDM4YzUzNmFkODc4MzE4
MTM2Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL0V2ZW50UmV0YXJnZXRl
ci5oCkBAIC0wLDAgKzEsOTMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgR29vZ2xlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0
d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIg
dGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBh
cyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2
ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZl
cnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRo
YXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhv
dXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkg
R2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91
bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGlj
IExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlO
Ry5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9u
LCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAw
MjExMC0xMzAxLCBVU0EuCisgKi8KKworI2lmbmRlZiBFdmVudFJldGFyZ2V0ZXJfaAorI2RlZmlu
ZSBFdmVudFJldGFyZ2V0ZXJfaAorCisjaW5jbHVkZSAiQ29udGFpbmVyTm9kZS5oIgorI2luY2x1
ZGUgIkV2ZW50Q29udGV4dC5oIgorI2luY2x1ZGUgIlNoYWRvd1Jvb3QuaCIKKyNpbmNsdWRlIDx3
dGYvSGFzaE1hcC5oPgorI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+CisjaW5jbHVkZSA8d3Rm
L1JlZlB0ci5oPgorCisjaWYgRU5BQkxFKFNWRykKKyNpbmNsdWRlICJTVkdFbGVtZW50SW5zdGFu
Y2UuaCIKKyNpbmNsdWRlICJTVkdOYW1lcy5oIgorI2luY2x1ZGUgIlNWR1VzZUVsZW1lbnQuaCIK
KyNlbmRpZgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIEV2ZW50VGFyZ2V0OworY2xh
c3MgRm9jdXNFdmVudDsKK2NsYXNzIE1vdXNlRXZlbnQ7CitjbGFzcyBOb2RlOworY2xhc3MgVHJl
ZVNjb3BlOworCitlbnVtIEV2ZW50RGlzcGF0Y2hCZWhhdmlvciB7CisgICAgUmV0YXJnZXRFdmVu
dCwKKyAgICBTdGF5SW5zaWRlU2hhZG93RE9NCit9OworCitjbGFzcyBFdmVudFJldGFyZ2V0ZXIg
eworcHVibGljOgorICAgIHN0YXRpYyB2b2lkIGNhbGN1bGF0ZUV2ZW50UGF0aChOb2RlKiwgRXZl
bnQqLCBFdmVudFBhdGgmKTsKKyAgICBzdGF0aWMgdm9pZCBhZGp1c3RGb3JNb3VzZUV2ZW50KE5v
ZGUqLCBjb25zdCBNb3VzZUV2ZW50JiwgRXZlbnRQYXRoJik7CisgICAgc3RhdGljIHZvaWQgYWRq
dXN0Rm9yRm9jdXNFdmVudChOb2RlKiwgY29uc3QgRm9jdXNFdmVudCYsIEV2ZW50UGF0aCYpOwor
ICAgIHN0YXRpYyBFdmVudFRhcmdldCogZXZlbnRUYXJnZXRSZXNwZWN0aW5nVGFyZ2V0UnVsZXMo
Tm9kZSogcmVmZXJlbmNlTm9kZSk7CisKK3ByaXZhdGU6CisgICAgdHlwZWRlZiBWZWN0b3I8UmVm
UHRyPE5vZGU+ID4gQWRqdXN0ZWROb2RlczsKKyAgICB0eXBlZGVmIEhhc2hNYXA8VHJlZVNjb3Bl
KiwgTm9kZSo+IFJlbGF0ZWROb2RlTWFwOworCisgICAgc3RhdGljIHZvaWQgYWRqdXN0Rm9yUmVs
YXRlZFRhcmdldChOb2RlKiwgRXZlbnRUYXJnZXQqIHJlbGF0ZWRUYXJnZXQsIEV2ZW50UGF0aCYp
OworICAgIHN0YXRpYyB2b2lkIGNhbGN1bGF0ZUFkanVzdGVkTm9kZXMoTm9kZSosIE5vZGUqIHJl
bGF0ZWROb2RlLCBFdmVudFBhdGgmLCBBZGp1c3RlZE5vZGVzJik7CisgICAgc3RhdGljIHZvaWQg
YnVpbGRSZWxhdGVkTm9kZU1hcChOb2RlKiwgUmVsYXRlZE5vZGVNYXAmKTsKKyAgICBzdGF0aWMg
Tm9kZSogZmluZFJlbGF0ZWROb2RlKFRyZWVTY29wZSosIFJlbGF0ZWROb2RlTWFwJik7Cit9Owor
CitpbmxpbmUgRXZlbnRUYXJnZXQqIEV2ZW50UmV0YXJnZXRlcjo6ZXZlbnRUYXJnZXRSZXNwZWN0
aW5nVGFyZ2V0UnVsZXMoTm9kZSogcmVmZXJlbmNlTm9kZSkKK3sKKyAgICBBU1NFUlQocmVmZXJl
bmNlTm9kZSk7CisKKyAgICBpZiAocmVmZXJlbmNlTm9kZS0+aXNQc2V1ZG9FbGVtZW50KCkpCisg
ICAgICAgIHJldHVybiByZWZlcmVuY2VOb2RlLT5wYXJlbnROb2RlKCk7CisKKyNpZiBFTkFCTEUo
U1ZHKQorICAgIGlmICghcmVmZXJlbmNlTm9kZS0+aXNTVkdFbGVtZW50KCkgfHwgIXJlZmVyZW5j
ZU5vZGUtPmlzSW5TaGFkb3dUcmVlKCkpCisgICAgICAgIHJldHVybiByZWZlcmVuY2VOb2RlOwor
CisgICAgLy8gU3BlYzogVGhlIGV2ZW50IGhhbmRsaW5nIGZvciB0aGUgbm9uLWV4cG9zZWQgdHJl
ZSB3b3JrcyBhcyBpZiB0aGUgcmVmZXJlbmNlZCBlbGVtZW50IGhhZCBiZWVuIHRleHR1YWxseSBp
bmNsdWRlZAorICAgIC8vIGFzIGEgZGVlcGx5IGNsb25lZCBjaGlsZCBvZiB0aGUgJ3VzZScgZWxl
bWVudCwgZXhjZXB0IHRoYXQgZXZlbnRzIGFyZSBkaXNwYXRjaGVkIHRvIHRoZSBTVkdFbGVtZW50
SW5zdGFuY2Ugb2JqZWN0cworICAgIEVsZW1lbnQqIHNoYWRvd0hvc3RFbGVtZW50ID0gdG9TaGFk
b3dSb290KHJlZmVyZW5jZU5vZGUtPnRyZWVTY29wZSgpLT5yb290Tm9kZSgpKS0+aG9zdCgpOwor
ICAgIC8vIEF0IHRoaXMgdGltZSwgU1ZHIG5vZGVzIGFyZSBub3Qgc3VwcG9ydGVkIGluIG5vbi08
dXNlPiBzaGFkb3cgdHJlZXMuCisgICAgaWYgKCFzaGFkb3dIb3N0RWxlbWVudCB8fCAhc2hhZG93
SG9zdEVsZW1lbnQtPmhhc1RhZ05hbWUoU1ZHTmFtZXM6OnVzZVRhZykpCisgICAgICAgIHJldHVy
biByZWZlcmVuY2VOb2RlOworICAgIFNWR1VzZUVsZW1lbnQqIHVzZUVsZW1lbnQgPSBzdGF0aWNf
Y2FzdDxTVkdVc2VFbGVtZW50Kj4oc2hhZG93SG9zdEVsZW1lbnQpOworICAgIGlmIChTVkdFbGVt
ZW50SW5zdGFuY2UqIGluc3RhbmNlID0gdXNlRWxlbWVudC0+aW5zdGFuY2VGb3JTaGFkb3dUcmVl
RWxlbWVudChyZWZlcmVuY2VOb2RlKSkKKyAgICAgICAgcmV0dXJuIGluc3RhbmNlOworI2VuZGlm
CisKKyAgICByZXR1cm4gcmVmZXJlbmNlTm9kZTsKK30KKworfQorCisjZW5kaWYgLy8gRXZlbnRS
ZXRhcmdldGVyX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9Gb2N1c0V2ZW50LmNw
cCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9Gb2N1c0V2ZW50LmNwcAppbmRleCBmYmQzMWU5MTM2NDk1
YjFkNjE1N2NlNmZiNDJhZjRmYmYzODg3N2JiLi4xNWJhNDAxY2ExNWUwMjQ2YWMwNGJkYTU0MTEx
MzgyYWU3MDY5ZTVlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vRm9jdXNFdmVudC5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL0ZvY3VzRXZlbnQuY3BwCkBAIC0yOSw2ICsyOSw3
IEBACiAjaW5jbHVkZSAiRXZlbnQuaCIKICNpbmNsdWRlICJFdmVudERpc3BhdGNoZXIuaCIKICNp
bmNsdWRlICJFdmVudE5hbWVzLmgiCisjaW5jbHVkZSAiRXZlbnRSZXRhcmdldGVyLmgiCiAjaW5j
bHVkZSAiTm9kZS5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkBAIC03Niw3ICs3Nyw3IEBAIEZv
Y3VzRXZlbnREaXNwYXRjaE1lZGlhdG9yOjpGb2N1c0V2ZW50RGlzcGF0Y2hNZWRpYXRvcihQYXNz
UmVmUHRyPEZvY3VzRXZlbnQ+IGZvCiAKIGJvb2wgRm9jdXNFdmVudERpc3BhdGNoTWVkaWF0b3I6
OmRpc3BhdGNoRXZlbnQoRXZlbnREaXNwYXRjaGVyKiBkaXNwYXRjaGVyKSBjb25zdAogewotICAg
IGRpc3BhdGNoZXItPmFkanVzdFJlbGF0ZWRUYXJnZXQoZXZlbnQoKSwgZXZlbnQoKS0+cmVsYXRl
ZFRhcmdldCgpKTsKKyAgICBFdmVudFJldGFyZ2V0ZXI6OmFkanVzdEZvckZvY3VzRXZlbnQoZGlz
cGF0Y2hlci0+bm9kZSgpLCAqZXZlbnQoKSwgZGlzcGF0Y2hlci0+ZW5zdXJlRXZlbnRQYXRoKGV2
ZW50KCkpKTsKICAgICByZXR1cm4gRXZlbnREaXNwYXRjaE1lZGlhdG9yOjpkaXNwYXRjaEV2ZW50
KGRpc3BhdGNoZXIpOwogfQogCkBAIC05Miw3ICs5Myw3IEBAIEJsdXJFdmVudERpc3BhdGNoTWVk
aWF0b3I6OkJsdXJFdmVudERpc3BhdGNoTWVkaWF0b3IoUGFzc1JlZlB0cjxGb2N1c0V2ZW50PiBm
b2N1CiAKIGJvb2wgQmx1ckV2ZW50RGlzcGF0Y2hNZWRpYXRvcjo6ZGlzcGF0Y2hFdmVudChFdmVu
dERpc3BhdGNoZXIqIGRpc3BhdGNoZXIpIGNvbnN0CiB7Ci0gICAgZGlzcGF0Y2hlci0+YWRqdXN0
UmVsYXRlZFRhcmdldChldmVudCgpLCBldmVudCgpLT5yZWxhdGVkVGFyZ2V0KCkpOworICAgIEV2
ZW50UmV0YXJnZXRlcjo6YWRqdXN0Rm9yRm9jdXNFdmVudChkaXNwYXRjaGVyLT5ub2RlKCksICpl
dmVudCgpLCBkaXNwYXRjaGVyLT5lbnN1cmVFdmVudFBhdGgoZXZlbnQoKSkpOwogICAgIHJldHVy
biBFdmVudERpc3BhdGNoTWVkaWF0b3I6OmRpc3BhdGNoRXZlbnQoZGlzcGF0Y2hlcik7CiB9CiAK
QEAgLTEwOCw3ICsxMDksNyBAQCBGb2N1c0luRXZlbnREaXNwYXRjaE1lZGlhdG9yOjpGb2N1c0lu
RXZlbnREaXNwYXRjaE1lZGlhdG9yKFBhc3NSZWZQdHI8Rm9jdXNFdmVudAogCiBib29sIEZvY3Vz
SW5FdmVudERpc3BhdGNoTWVkaWF0b3I6OmRpc3BhdGNoRXZlbnQoRXZlbnREaXNwYXRjaGVyKiBk
aXNwYXRjaGVyKSBjb25zdAogewotICAgIGRpc3BhdGNoZXItPmFkanVzdFJlbGF0ZWRUYXJnZXQo
ZXZlbnQoKSwgZXZlbnQoKS0+cmVsYXRlZFRhcmdldCgpKTsKKyAgICBFdmVudFJldGFyZ2V0ZXI6
OmFkanVzdEZvckZvY3VzRXZlbnQoZGlzcGF0Y2hlci0+bm9kZSgpLCAqZXZlbnQoKSwgZGlzcGF0
Y2hlci0+ZW5zdXJlRXZlbnRQYXRoKGV2ZW50KCkpKTsKICAgICByZXR1cm4gRXZlbnREaXNwYXRj
aE1lZGlhdG9yOjpkaXNwYXRjaEV2ZW50KGRpc3BhdGNoZXIpOwogfQogCkBAIC0xMjQsNyArMTI1
LDcgQEAgRm9jdXNPdXRFdmVudERpc3BhdGNoTWVkaWF0b3I6OkZvY3VzT3V0RXZlbnREaXNwYXRj
aE1lZGlhdG9yKFBhc3NSZWZQdHI8Rm9jdXNFdmUKIAogYm9vbCBGb2N1c091dEV2ZW50RGlzcGF0
Y2hNZWRpYXRvcjo6ZGlzcGF0Y2hFdmVudChFdmVudERpc3BhdGNoZXIqIGRpc3BhdGNoZXIpIGNv
bnN0CiB7Ci0gICAgZGlzcGF0Y2hlci0+YWRqdXN0UmVsYXRlZFRhcmdldChldmVudCgpLCBldmVu
dCgpLT5yZWxhdGVkVGFyZ2V0KCkpOworICAgIEV2ZW50UmV0YXJnZXRlcjo6YWRqdXN0Rm9yRm9j
dXNFdmVudChkaXNwYXRjaGVyLT5ub2RlKCksICpldmVudCgpLCBkaXNwYXRjaGVyLT5lbnN1cmVF
dmVudFBhdGgoZXZlbnQoKSkpOwogICAgIHJldHVybiBFdmVudERpc3BhdGNoTWVkaWF0b3I6OmRp
c3BhdGNoRXZlbnQoZGlzcGF0Y2hlcik7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L2RvbS9Nb3VzZUV2ZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9Nb3VzZUV2ZW50LmNwcApp
bmRleCA2OTVlMmY3Y2FiYjQ2OGM4YmFjODY3NTcwMWVmNGU0YTE3ZjBkZjU3Li5kNTkyY2E5ODc5
OWE0M2UyZDJiMTY2NmQ1OTljMDE3MTZjNjkzMTI3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9kb20vTW91c2VFdmVudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL01vdXNlRXZlbnQu
Y3BwCkBAIC0yNSw2ICsyNSw3IEBACiAKICNpbmNsdWRlICJFdmVudERpc3BhdGNoZXIuaCIKICNp
bmNsdWRlICJFdmVudE5hbWVzLmgiCisjaW5jbHVkZSAiRXZlbnRSZXRhcmdldGVyLmgiCiAjaW5j
bHVkZSAiRnJhbWUuaCIKICNpbmNsdWRlICJGcmFtZVZpZXcuaCIKICNpbmNsdWRlICJIVE1MSUZy
YW1lRWxlbWVudC5oIgpAQCAtMjYxLDcgKzI2Miw3IEBAIE1vdXNlRXZlbnQqIE1vdXNlRXZlbnRE
aXNwYXRjaE1lZGlhdG9yOjpldmVudCgpIGNvbnN0CiBib29sIE1vdXNlRXZlbnREaXNwYXRjaE1l
ZGlhdG9yOjpkaXNwYXRjaEV2ZW50KEV2ZW50RGlzcGF0Y2hlciogZGlzcGF0Y2hlcikgY29uc3QK
IHsKICAgICBpZiAoaXNTeW50aGV0aWNNb3VzZUV2ZW50KCkpIHsKLSAgICAgICAgZGlzcGF0Y2hl
ci0+YWRqdXN0UmVsYXRlZFRhcmdldChldmVudCgpLCBldmVudCgpLT5yZWxhdGVkVGFyZ2V0KCkp
OworICAgICAgICBFdmVudFJldGFyZ2V0ZXI6OmFkanVzdEZvck1vdXNlRXZlbnQoZGlzcGF0Y2hl
ci0+bm9kZSgpLCAqZXZlbnQoKSwgIGRpc3BhdGNoZXItPmVuc3VyZUV2ZW50UGF0aChldmVudCgp
KSk7CiAgICAgICAgIHJldHVybiBkaXNwYXRjaGVyLT5kaXNwYXRjaEV2ZW50KGV2ZW50KCkpOwog
ICAgIH0KIApAQCAtMjc0LDcgKzI3NSw3IEBAIGJvb2wgTW91c2VFdmVudERpc3BhdGNoTWVkaWF0
b3I6OmRpc3BhdGNoRXZlbnQoRXZlbnREaXNwYXRjaGVyKiBkaXNwYXRjaGVyKSBjb25zCiAgICAg
QVNTRVJUKCFldmVudCgpLT50YXJnZXQoKSB8fCBldmVudCgpLT50YXJnZXQoKSAhPSBldmVudCgp
LT5yZWxhdGVkVGFyZ2V0KCkpOwogCiAgICAgRXZlbnRUYXJnZXQqIHJlbGF0ZWRUYXJnZXQgPSBl
dmVudCgpLT5yZWxhdGVkVGFyZ2V0KCk7Ci0gICAgZGlzcGF0Y2hlci0+YWRqdXN0UmVsYXRlZFRh
cmdldChldmVudCgpLCByZWxhdGVkVGFyZ2V0KTsKKyAgICBFdmVudFJldGFyZ2V0ZXI6OmFkanVz
dEZvck1vdXNlRXZlbnQoZGlzcGF0Y2hlci0+bm9kZSgpLCAqZXZlbnQoKSwgIGRpc3BhdGNoZXIt
PmVuc3VyZUV2ZW50UGF0aChldmVudCgpKSk7CiAKICAgICBkaXNwYXRjaGVyLT5kaXNwYXRjaEV2
ZW50KGV2ZW50KCkpOwogICAgIGJvb2wgc3dhbGxvd0V2ZW50ID0gZXZlbnQoKS0+ZGVmYXVsdEhh
bmRsZWQoKSB8fCBldmVudCgpLT5kZWZhdWx0UHJldmVudGVkKCk7Cg==
</data>

          </attachment>
      

    </bug>

</bugzilla>