<?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>138704</bug_id>
          
          <creation_ts>2014-11-13 13:14:25 -0800</creation_ts>
          <short_desc>Simple line layout: Move simple line layout RunResolver and LineResolver implementation to SimpleLineLayoutResolver.cpp</short_desc>
          <delta_ts>2014-11-14 08:20:19 -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>Layout and Rendering</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="alan">zalan</reporter>
          <assigned_to name="alan">zalan</assigned_to>
          <cc>commit-queue</cc>
    
    <cc>koivisto</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1048465</commentid>
    <comment_count>0</comment_count>
    <who name="alan">zalan</who>
    <bug_when>2014-11-13 13:14:25 -0800</bug_when>
    <thetext>from SimpleLineLayoutResolver.h.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1048472</commentid>
    <comment_count>1</comment_count>
      <attachid>241498</attachid>
    <who name="alan">zalan</who>
    <bug_when>2014-11-13 13:24:55 -0800</bug_when>
    <thetext>Created attachment 241498
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1048489</commentid>
    <comment_count>2</comment_count>
      <attachid>241498</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2014-11-13 14:22:38 -0800</bug_when>
    <thetext>Comment on attachment 241498
Patch

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

Hope this doesn&apos;t make things slower.

&gt; Source/WebCore/rendering/SimpleLineLayoutResolver.h:43
&gt; -    IteratorType begin() const { return m_begin; }
&gt; -    IteratorType end() const { return m_end; }
&gt; +    inline IteratorType begin() const { return m_begin; }
&gt; +    inline IteratorType end() const { return m_end; }

The inline keywords here and elsewhere don&apos;t do anything and should not be added.

&gt; Source/WebCore/rendering/SimpleLineLayoutResolver.h:80
&gt; +        inline bool operator==(const Iterator&amp; other) const { ASSERT(&amp;m_resolver == &amp;other.m_resolver); return m_runIndex == other.m_runIndex; }
&gt; +        inline bool operator!=(const Iterator&amp; other) const { return !(*this == other); }
&gt;  
&gt; -        Run operator*() const;
&gt; +        inline Run operator*() const { return Run(*this); }

Multiline function definitions should stay on the bottom of the file. 

I don&apos;t generally think anything except trivial accessors should be inlined to declaration.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1048504</commentid>
    <comment_count>3</comment_count>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2014-11-13 14:51:26 -0800</bug_when>
    <thetext>r=me but please keep the function bodies that stay in the header as-is.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1048514</commentid>
    <comment_count>4</comment_count>
      <attachid>241509</attachid>
    <who name="alan">zalan</who>
    <bug_when>2014-11-13 15:07:46 -0800</bug_when>
    <thetext>Created attachment 241509
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1048757</commentid>
    <comment_count>5</comment_count>
      <attachid>241509</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2014-11-14 08:20:15 -0800</bug_when>
    <thetext>Comment on attachment 241509
Patch

Clearing flags on attachment: 241509

Committed r176123: &lt;http://trac.webkit.org/changeset/176123&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1048758</commentid>
    <comment_count>6</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2014-11-14 08:20:19 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>241498</attachid>
            <date>2014-11-13 13:24:55 -0800</date>
            <delta_ts>2014-11-13 14:30:10 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-138704-20141113132501.patch</filename>
            <type>text/plain</type>
            <size>27951</size>
            <attacher name="alan">zalan</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTc2MDc5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNGQ3MmY3ZTRjMmMxNjc0
NTI4ZDhjNTQxNTMxOTUxODEzN2EwNWI3Mi4uZDUyM2FmMDllOWUyNjc5ZjUyOTMxMjlkMTRlMzc2
ZjI0YzM2ODAwNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDcxIEBACisyMDE0LTExLTEzICBaYWxh
biBCdWp0YXMgIDx6YWxhbkBhcHBsZS5jb20+CisKKyAgICAgICAgU2ltcGxlIGxpbmUgbGF5b3V0
OiBNb3ZlIHNpbXBsZSBsaW5lIGxheW91dCBSdW5SZXNvbHZlciBhbmQgTGluZVJlc29sdmVyIGlt
cGxlbWVudGF0aW9uIHRvIFNpbXBsZUxpbmVMYXlvdXRSZXNvbHZlci5jcHAKKyAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEzODcwNAorCisgICAgICAgIFJl
dmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIE5vIGNoYW5nZSBpbiBmdW5jdGlv
bmFsaXR5LgorCisgICAgICAgICogQ01ha2VMaXN0cy50eHQ6CisgICAgICAgICogV2ViQ29yZS52
Y3hwcm9qL1dlYkNvcmUudmN4cHJvajoKKyAgICAgICAgKiBXZWJDb3JlLnZjeHByb2ovV2ViQ29y
ZS52Y3hwcm9qLmZpbHRlcnM6CisgICAgICAgICogV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5w
Ynhwcm9qOgorICAgICAgICAqIHJlbmRlcmluZy9TaW1wbGVMaW5lTGF5b3V0UmVzb2x2ZXIuY3Bw
OiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlNpbXBsZUxpbmVMYXlvdXQ6OlJ1blJlc29sdmVy
OjpSdW46OlJ1bik6CisgICAgICAgIChXZWJDb3JlOjpTaW1wbGVMaW5lTGF5b3V0OjpSdW5SZXNv
bHZlcjo6UnVuOjpyZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OlNpbXBsZUxpbmVMYXlvdXQ6OlJ1
blJlc29sdmVyOjpSdW46OmJhc2VsaW5lKToKKyAgICAgICAgKFdlYkNvcmU6OlNpbXBsZUxpbmVM
YXlvdXQ6OlJ1blJlc29sdmVyOjpSdW46OnRleHQpOgorICAgICAgICAoV2ViQ29yZTo6U2ltcGxl
TGluZUxheW91dDo6UnVuUmVzb2x2ZXI6Okl0ZXJhdG9yOjpJdGVyYXRvcik6CisgICAgICAgIChX
ZWJDb3JlOjpTaW1wbGVMaW5lTGF5b3V0OjpSdW5SZXNvbHZlcjo6SXRlcmF0b3I6OmFkdmFuY2Up
OgorICAgICAgICAoV2ViQ29yZTo6U2ltcGxlTGluZUxheW91dDo6UnVuUmVzb2x2ZXI6Okl0ZXJh
dG9yOjphZHZhbmNlTGluZXMpOgorICAgICAgICAoV2ViQ29yZTo6U2ltcGxlTGluZUxheW91dDo6
UnVuUmVzb2x2ZXI6OlJ1blJlc29sdmVyKToKKyAgICAgICAgKFdlYkNvcmU6OlNpbXBsZUxpbmVM
YXlvdXQ6OlJ1blJlc29sdmVyOjpsaW5lSW5kZXhGb3JIZWlnaHQpOgorICAgICAgICAoV2ViQ29y
ZTo6U2ltcGxlTGluZUxheW91dDo6UnVuUmVzb2x2ZXI6OnJhbmdlRm9yUmVjdCk6CisgICAgICAg
IChXZWJDb3JlOjpTaW1wbGVMaW5lTGF5b3V0OjpMaW5lUmVzb2x2ZXI6Okl0ZXJhdG9yOjpJdGVy
YXRvcik6CisgICAgICAgIChXZWJDb3JlOjpTaW1wbGVMaW5lTGF5b3V0OjpMaW5lUmVzb2x2ZXI6
Okl0ZXJhdG9yOjpvcGVyYXRvcisrKToKKyAgICAgICAgKFdlYkNvcmU6OlNpbXBsZUxpbmVMYXlv
dXQ6OkxpbmVSZXNvbHZlcjo6SXRlcmF0b3I6Om9wZXJhdG9yKik6CisgICAgICAgIChXZWJDb3Jl
OjpTaW1wbGVMaW5lTGF5b3V0OjpMaW5lUmVzb2x2ZXI6OkxpbmVSZXNvbHZlcik6CisgICAgICAg
IChXZWJDb3JlOjpTaW1wbGVMaW5lTGF5b3V0OjpMaW5lUmVzb2x2ZXI6OnJhbmdlRm9yUmVjdCk6
CisgICAgICAgIChXZWJDb3JlOjpTaW1wbGVMaW5lTGF5b3V0OjpydW5SZXNvbHZlcik6CisgICAg
ICAgIChXZWJDb3JlOjpTaW1wbGVMaW5lTGF5b3V0OjpsaW5lUmVzb2x2ZXIpOgorICAgICAgICAq
IHJlbmRlcmluZy9TaW1wbGVMaW5lTGF5b3V0UmVzb2x2ZXIuaDoKKyAgICAgICAgKFdlYkNvcmU6
OlNpbXBsZUxpbmVMYXlvdXQ6OlJhbmdlOjpiZWdpbik6CisgICAgICAgIChXZWJDb3JlOjpTaW1w
bGVMaW5lTGF5b3V0OjpSYW5nZTo6ZW5kKToKKyAgICAgICAgKFdlYkNvcmU6OlNpbXBsZUxpbmVM
YXlvdXQ6OlJ1blJlc29sdmVyOjpSdW46OnN0YXJ0KToKKyAgICAgICAgKFdlYkNvcmU6OlNpbXBs
ZUxpbmVMYXlvdXQ6OlJ1blJlc29sdmVyOjpSdW46OmVuZCk6CisgICAgICAgIChXZWJDb3JlOjpT
aW1wbGVMaW5lTGF5b3V0OjpSdW5SZXNvbHZlcjo6UnVuOjpsaW5lSW5kZXgpOgorICAgICAgICAo
V2ViQ29yZTo6U2ltcGxlTGluZUxheW91dDo6UnVuUmVzb2x2ZXI6Okl0ZXJhdG9yOjpvcGVyYXRv
cisrKToKKyAgICAgICAgKFdlYkNvcmU6OlNpbXBsZUxpbmVMYXlvdXQ6OlJ1blJlc29sdmVyOjpJ
dGVyYXRvcjo6b3BlcmF0b3I9PSk6CisgICAgICAgIChXZWJDb3JlOjpTaW1wbGVMaW5lTGF5b3V0
OjpSdW5SZXNvbHZlcjo6SXRlcmF0b3I6Om9wZXJhdG9yIT0pOgorICAgICAgICAoV2ViQ29yZTo6
U2ltcGxlTGluZUxheW91dDo6UnVuUmVzb2x2ZXI6Okl0ZXJhdG9yOjpvcGVyYXRvciopOgorICAg
ICAgICAoV2ViQ29yZTo6U2ltcGxlTGluZUxheW91dDo6UnVuUmVzb2x2ZXI6Okl0ZXJhdG9yOjpy
ZXNvbHZlcik6CisgICAgICAgIChXZWJDb3JlOjpTaW1wbGVMaW5lTGF5b3V0OjpSdW5SZXNvbHZl
cjo6SXRlcmF0b3I6OnNpbXBsZVJ1bik6CisgICAgICAgIChXZWJDb3JlOjpTaW1wbGVMaW5lTGF5
b3V0OjpSdW5SZXNvbHZlcjo6SXRlcmF0b3I6OmxpbmVJbmRleCk6CisgICAgICAgIChXZWJDb3Jl
OjpTaW1wbGVMaW5lTGF5b3V0OjpSdW5SZXNvbHZlcjo6YmVnaW4pOgorICAgICAgICAoV2ViQ29y
ZTo6U2ltcGxlTGluZUxheW91dDo6UnVuUmVzb2x2ZXI6OmVuZCk6CisgICAgICAgIChXZWJDb3Jl
OjpTaW1wbGVMaW5lTGF5b3V0OjpMaW5lUmVzb2x2ZXI6Okl0ZXJhdG9yOjpvcGVyYXRvcj09KToK
KyAgICAgICAgKFdlYkNvcmU6OlNpbXBsZUxpbmVMYXlvdXQ6OkxpbmVSZXNvbHZlcjo6SXRlcmF0
b3I6Om9wZXJhdG9yIT0pOgorICAgICAgICAoV2ViQ29yZTo6U2ltcGxlTGluZUxheW91dDo6TGlu
ZVJlc29sdmVyOjpiZWdpbik6CisgICAgICAgIChXZWJDb3JlOjpTaW1wbGVMaW5lTGF5b3V0OjpM
aW5lUmVzb2x2ZXI6OmVuZCk6CisgICAgICAgIChXZWJDb3JlOjpTaW1wbGVMaW5lTGF5b3V0OjpS
dW5SZXNvbHZlcjo6UnVuOjpSdW4pOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6U2ltcGxl
TGluZUxheW91dDo6UnVuUmVzb2x2ZXI6OlJ1bjo6cmVjdCk6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJDb3JlOjpTaW1wbGVMaW5lTGF5b3V0OjpSdW5SZXNvbHZlcjo6UnVuOjpiYXNlbGluZSk6IERl
bGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpTaW1wbGVMaW5lTGF5b3V0OjpSdW5SZXNvbHZlcjo6
UnVuOjp0ZXh0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlNpbXBsZUxpbmVMYXlvdXQ6
OlJ1blJlc29sdmVyOjpJdGVyYXRvcjo6SXRlcmF0b3IpOiBEZWxldGVkLgorICAgICAgICAoV2Vi
Q29yZTo6U2ltcGxlTGluZUxheW91dDo6UnVuUmVzb2x2ZXI6Okl0ZXJhdG9yOjphZHZhbmNlKTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlNpbXBsZUxpbmVMYXlvdXQ6OlJ1blJlc29sdmVy
OjpJdGVyYXRvcjo6YWR2YW5jZUxpbmVzKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlNp
bXBsZUxpbmVMYXlvdXQ6OlJ1blJlc29sdmVyOjpSdW5SZXNvbHZlcik6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJDb3JlOjpTaW1wbGVMaW5lTGF5b3V0OjpSdW5SZXNvbHZlcjo6bGluZUluZGV4Rm9y
SGVpZ2h0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlNpbXBsZUxpbmVMYXlvdXQ6OlJ1
blJlc29sdmVyOjpyYW5nZUZvclJlY3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6U2lt
cGxlTGluZUxheW91dDo6TGluZVJlc29sdmVyOjpJdGVyYXRvcjo6SXRlcmF0b3IpOiBEZWxldGVk
LgorICAgICAgICAoV2ViQ29yZTo6U2ltcGxlTGluZUxheW91dDo6TGluZVJlc29sdmVyOjpJdGVy
YXRvcjo6b3BlcmF0b3IrKyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpTaW1wbGVMaW5l
TGF5b3V0OjpMaW5lUmVzb2x2ZXI6Okl0ZXJhdG9yOjpvcGVyYXRvciopOiBEZWxldGVkLgorICAg
ICAgICAoV2ViQ29yZTo6U2ltcGxlTGluZUxheW91dDo6TGluZVJlc29sdmVyOjpMaW5lUmVzb2x2
ZXIpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6U2ltcGxlTGluZUxheW91dDo6TGluZVJl
c29sdmVyOjpyYW5nZUZvclJlY3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6U2ltcGxl
TGluZUxheW91dDo6cnVuUmVzb2x2ZXIpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6U2lt
cGxlTGluZUxheW91dDo6bGluZVJlc29sdmVyKTogRGVsZXRlZC4KKwogMjAxNC0xMS0xMyAgSm9h
bm1hcmllIERpZ2dzICA8amRpZ2dzQGlnYWxpYS5jb20+CiAKICAgICAgICAgQVg6IFtBVEtdIEFj
Y2Vzc2libGUgZm9jdXMgZXZlbnRzIGFyZSBlbWl0dGVkIHdoZW4gdGhlIHNlbGVjdGlvbiBpcyBj
aGFuZ2VkIGluIG5vbi1mb2N1c2VkIGNvbWJvIGJveGVzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9DTWFrZUxpc3RzLnR4dCBiL1NvdXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0CmluZGV4
IDE3NmEwZDgyNmZmYTM0ODA1MmNmMWVkODU0ZjIxNjEzYzA1NmRmZjIuLmYwMTM0YTBhNGQwYzE2
YzNhZjEwOWNlODA2YjM3NzAwYmJiMzUzNDAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL0NN
YWtlTGlzdHMudHh0CisrKyBiL1NvdXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0CkBAIC0yMzUx
LDYgKzIzNTEsNyBAQCBzZXQoV2ViQ29yZV9TT1VSQ0VTCiAgICAgcmVuZGVyaW5nL1Njcm9sbEJl
aGF2aW9yLmNwcAogICAgIHJlbmRlcmluZy9TaW1wbGVMaW5lTGF5b3V0LmNwcAogICAgIHJlbmRl
cmluZy9TaW1wbGVMaW5lTGF5b3V0RnVuY3Rpb25zLmNwcAorICAgIHJlbmRlcmluZy9TaW1wbGVM
aW5lTGF5b3V0UmVzb2x2ZXIuY3BwCiAgICAgcmVuZGVyaW5nL1RleHRBdXRvc2l6ZXIuY3BwCiAg
ICAgcmVuZGVyaW5nL1RleHRQYWludFN0eWxlLmNwcAogICAgIHJlbmRlcmluZy9UZXh0UGFpbnRl
ci5jcHAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUudmN4cHJvai9XZWJDb3Jl
LnZjeHByb2ogYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnZjeHByb2ovV2ViQ29yZS52Y3hwcm9q
CmluZGV4IGM1OTU4NGMzZmI0ZWVmZGZjMDZlZjFmY2YyNDU3YTY1ZGY2NjYzYzQuLjZiZTdiZmFm
OTlhMzJiODBhZGRlNDE4OWFmNTExOGUzZWRmNWU4ODkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL1dlYkNvcmUudmN4cHJvai9XZWJDb3JlLnZjeHByb2oKKysrIGIvU291cmNlL1dlYkNvcmUv
V2ViQ29yZS52Y3hwcm9qL1dlYkNvcmUudmN4cHJvagpAQCAtMTE1MTEsNiArMTE1MTEsNyBAQAog
ICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5ccmVuZGVyaW5nXFNlbGVjdGlvblN1YnRyZWVSb290
LmNwcCIgLz4KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHJlbmRlcmluZ1xTaW1wbGVMaW5l
TGF5b3V0LmNwcCIgLz4KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHJlbmRlcmluZ1xTaW1w
bGVMaW5lTGF5b3V0RnVuY3Rpb25zLmNwcCIgLz4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4u
XHJlbmRlcmluZ1xTaW1wbGVMaW5lTGF5b3V0UmVzb2x2ZXIuY3BwIiAvPgogICAgIDxDbENvbXBp
bGUgSW5jbHVkZT0iLi5ccmVuZGVyaW5nXFRleHRQYWludFN0eWxlLmNwcCIgLz4KICAgICA8Q2xD
b21waWxlIEluY2x1ZGU9Ii4uXHJlbmRlcmluZ1xsaW5lXExpbmVCcmVha2VyLmNwcCIgLz4KICAg
ICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHJlbmRlcmluZ1xsaW5lXExpbmVJbmZvLmNwcCIgLz4K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUudmN4cHJvai9XZWJDb3JlLnZjeHBy
b2ouZmlsdGVycyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUudmN4cHJvai9XZWJDb3JlLnZjeHBy
b2ouZmlsdGVycwppbmRleCA5YjA2YTE1ZjE3NzNhYWM4YzllZDVjYTk0MmQwYzkzNTJkYzM5ZDNk
Li43NTY1ODI2ZWEyNzdjNTVkZTJkNjQ2YmM0YTlkY2MwOTIwN2NkYzVkIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9XZWJDb3JlLnZjeHByb2ovV2ViQ29yZS52Y3hwcm9qLmZpbHRlcnMKKysr
IGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS52Y3hwcm9qL1dlYkNvcmUudmN4cHJvai5maWx0ZXJz
CkBAIC02OTMxLDYgKzY5MzEsOSBAQAogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5ccmVuZGVy
aW5nXFNpbXBsZUxpbmVMYXlvdXRGdW5jdGlvbnMuY3BwIj4KICAgICAgIDxGaWx0ZXI+cmVuZGVy
aW5nPC9GaWx0ZXI+CiAgICAgPC9DbENvbXBpbGU+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIu
LlxyZW5kZXJpbmdcU2ltcGxlTGluZUxheW91dFJlc29sdmVyLmNwcCI+CisgICAgICA8RmlsdGVy
PnJlbmRlcmluZzwvRmlsdGVyPgorICAgIDwvQ2xDb21waWxlPgogICAgIDxDbENvbXBpbGUgSW5j
bHVkZT0iLi5cY3NzXENTU0dyaWRUZW1wbGF0ZUFyZWFzVmFsdWUuY3BwIj4KICAgICAgIDxGaWx0
ZXI+Y3NzPC9GaWx0ZXI+CiAgICAgPC9DbENvbXBpbGU+CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2ogYi9Tb3VyY2UvV2ViQ29yZS9X
ZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKaW5kZXggMGQ3MzhmMDUzYWM4Y2VlY2Y4
NWQ4NGRhMjk1MDQyNTNjZTRmYTYxYy4uNmNiNzYxOWMxM2M3MWQxYTFiOGE5MjBmMjI5N2Q3ZDQ4
MjRlODljMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qCisrKyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2pl
Y3QucGJ4cHJvagpAQCAtMjA1Nyw2ICsyMDU3LDcgQEAKIAkJNTdCNzkxQTQxNEM2QTYyOTAwRjIw
MkQxIC8qIENvbnRlbnREaXN0cmlidXRvci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gNTdCNzkxQTAxNEM2QTYyOTAwRjIwMkQxIC8qIENvbnRlbnREaXN0
cmlidXRvci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07
CiAJCTU3Q0Y0OTc0MTRFRTM2RDcwMEVDRkYxNCAvKiBJbnNlcnRpb25Qb2ludC5jcHAgaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1N0NGNDk3MjE0RUUzNkQ3
MDBFQ0ZGMTQgLyogSW5zZXJ0aW9uUG9pbnQuY3BwICovOyB9OwogCQk1N0NGNDk3NTE0RUUzNkQ3
MDBFQ0ZGMTQgLyogSW5zZXJ0aW9uUG9pbnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDU3Q0Y0OTczMTRFRTM2RDcwMEVDRkYxNCAvKiBJbnNlcnRpb25Q
b2ludC5oICovOyB9OworCQk1ODVENkRGQzFBMTUzNTU2MDBGQTRGMTIgLyogU2ltcGxlTGluZUxh
eW91dFJlc29sdmVyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDU4NUQ2REZCMUExNTM1NTYwMEZBNEYxMiAvKiBTaW1wbGVMaW5lTGF5b3V0UmVzb2x2
ZXIuY3BwICovOyB9OwogCQk1ODk1NTZFRDE4RDRBNDQwMDA3NjRCMDMgLyogQm9yZGVyRWRnZS5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTg5NTU2RUMx
OEQ0QTQ0MDAwNzY0QjAzIC8qIEJvcmRlckVkZ2UuaCAqLzsgfTsKIAkJNThBRUUyRjQxOEQ0QkND
RjAwMjJFN0ZFIC8qIEJvcmRlckVkZ2UuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gNThBRUUyRjMxOEQ0QkNDRjAwMjJFN0ZFIC8qIEJvcmRlckVkZ2Uu
Y3BwICovOyB9OwogCQk1OENEMzVDQjE4RUI0QzM5MDBCOUYzQUMgLyogRmxvYXRTaXplSGFzaC5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNThDRDM1Q0Ex
OEVCNEMzOTAwQjlGM0FDIC8qIEZsb2F0U2l6ZUhhc2guaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklC
VVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwpAQCAtOTE3MCw2ICs5MTcxLDcgQEAKIAkJNTdCNzkx
QTAxNEM2QTYyOTAwRjIwMkQxIC8qIENvbnRlbnREaXN0cmlidXRvci5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBDb250ZW50RGlzdHJpYnV0b3IuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJNTdDRjQ5NzIxNEVFMzZENzAwRUNGRjE0IC8qIEluc2VydGlvblBvaW50
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEluc2VydGlvblBvaW50
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTdDRjQ5NzMxNEVFMzZENzAwRUNG
RjE0IC8qIEluc2VydGlvblBvaW50LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IEluc2VydGlvblBvaW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTU4NUQ2REZC
MUExNTM1NTYwMEZBNEYxMiAvKiBTaW1wbGVMaW5lTGF5b3V0UmVzb2x2ZXIuY3BwICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gU2ltcGxlTGluZUxheW91dFJlc29sdmVyLmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNTg5NTU2RUMxOEQ0QTQ0MDAwNzY0QjAz
IC8qIEJvcmRlckVkZ2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQm9yZGVy
RWRnZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1OEFFRTJGMzE4RDRCQ0NGMDAy
MkU3RkUgLyogQm9yZGVyRWRnZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBh
dGggPSBCb3JkZXJFZGdlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNThDRDM1
Q0ExOEVCNEMzOTAwQjlGM0FDIC8qIEZsb2F0U2l6ZUhhc2guaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gRmxvYXRTaXplSGFzaC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwpAQCAtMjI0NzAsNiArMjI0NzIsNyBAQAogCQkJCUU0ODk0NEExMTgwQjU3RDgwMEYxNjVEOCAv
KiBTaW1wbGVMaW5lTGF5b3V0LmggKi8sCiAJCQkJRTRFOUIxMUExODE0NTY5MjAwM0FDQ0RGIC8q
IFNpbXBsZUxpbmVMYXlvdXRGdW5jdGlvbnMuY3BwICovLAogCQkJCUU0RTlCMTFDMTgxNDU2OUMw
MDNBQ0NERiAvKiBTaW1wbGVMaW5lTGF5b3V0RnVuY3Rpb25zLmggKi8sCisJCQkJNTg1RDZERkIx
QTE1MzU1NjAwRkE0RjEyIC8qIFNpbXBsZUxpbmVMYXlvdXRSZXNvbHZlci5jcHAgKi8sCiAJCQkJ
RTRFOUIxMTgxODEwOTE2RjAwM0FDQ0RGIC8qIFNpbXBsZUxpbmVMYXlvdXRSZXNvbHZlci5oICov
LAogCQkJCUE4Q0ZGMDRDMEExNTRGMDkwMDBBNDIzNCAvKiBUYWJsZUxheW91dC5oICovLAogCQkJ
CTBGNTREQ0UzMTg4MTA1MUQwMDNFRURCQiAvKiBUZXh0QXV0b1NpemluZy5jcHAgKi8sCkBAIC0y
ODQxMSw2ICsyODQxNCw3IEBACiAJCQkJRTFBREVENDcwRTc2QjhERDAwNEExQTVFIC8qIEpTTWVz
c2FnZVBvcnRDdXN0b20uY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTg2NjI5RDIwOURBMkI0ODAw
OTYzM0E1IC8qIEpTTW91c2VFdmVudC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlDNkY0MjBBMjE2
QjcxNjRFMDA1MkE5RjIgLyogSlNNdXRhdGlvbkNhbGxiYWNrLmNwcCBpbiBTb3VyY2VzICovLAor
CQkJCTU4NUQ2REZDMUExNTM1NTYwMEZBNEYxMiAvKiBTaW1wbGVMaW5lTGF5b3V0UmVzb2x2ZXIu
Y3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNjVERjMxRkIwOUQxQ0M2MDAwMEJFMzI1IC8qIEpTTXV0
YXRpb25FdmVudC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlDNkYwOTAyQzE0MzI3RDRGMDA2ODU4
NDkgLyogSlNNdXRhdGlvbk9ic2VydmVyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUM2RjA5MTdG
MTQzQTJCQjkwMDY4NTg0OSAvKiBKU011dGF0aW9uT2JzZXJ2ZXJDdXN0b20uY3BwIGluIFNvdXJj
ZXMgKi8sCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvU2ltcGxlTGluZUxh
eW91dFJlc29sdmVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9TaW1wbGVMaW5lTGF5
b3V0UmVzb2x2ZXIuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjMzZDI4MDQ4NjQwMWFhZjhiMGViZWQ2NzQyYThm
NGUxMzlkMGUxNWEKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
U2ltcGxlTGluZUxheW91dFJlc29sdmVyLmNwcApAQCAtMCwwICsxLDE4MyBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMg
Q09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
CisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisg
KiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQor
ICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICov
CisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJTaW1wbGVMaW5lTGF5b3V0UmVzb2x2
ZXIuaCIKKworI2luY2x1ZGUgIlJlbmRlckJsb2NrRmxvdy5oIgorI2luY2x1ZGUgIlJlbmRlclRl
eHQuaCIKKyNpbmNsdWRlICJTaW1wbGVMaW5lTGF5b3V0RnVuY3Rpb25zLmgiCisKK25hbWVzcGFj
ZSBXZWJDb3JlIHsKK25hbWVzcGFjZSBTaW1wbGVMaW5lTGF5b3V0IHsKKworUnVuUmVzb2x2ZXI6
OlJ1bjo6UnVuKGNvbnN0IEl0ZXJhdG9yJiBpdGVyYXRvcikKKyAgICA6IG1faXRlcmF0b3IoaXRl
cmF0b3IpCit7Cit9CisKK0xheW91dFJlY3QgUnVuUmVzb2x2ZXI6OlJ1bjo6cmVjdCgpIGNvbnN0
Cit7CisgICAgYXV0byYgcmVzb2x2ZXIgPSBtX2l0ZXJhdG9yLnJlc29sdmVyKCk7CisgICAgYXV0
byYgcnVuID0gbV9pdGVyYXRvci5zaW1wbGVSdW4oKTsKKworICAgIGZsb2F0IGJhc2VsaW5lUG9z
aXRpb24gPSByZXNvbHZlci5tX2xpbmVIZWlnaHQgKiBtX2l0ZXJhdG9yLmxpbmVJbmRleCgpICsg
cmVzb2x2ZXIubV9iYXNlbGluZTsKKyAgICBMYXlvdXRQb2ludCBsaW5lUG9zaXRpb24oTGF5b3V0
VW5pdDo6ZnJvbUZsb2F0Rmxvb3IocnVuLmxvZ2ljYWxMZWZ0KSwgcm91bmRUb0ludChiYXNlbGlu
ZVBvc2l0aW9uIC0gcmVzb2x2ZXIubV9hc2NlbnQgKyByZXNvbHZlci5tX2JvcmRlckFuZFBhZGRp
bmdCZWZvcmUpKTsKKyAgICBMYXlvdXRTaXplIGxpbmVTaXplKExheW91dFVuaXQ6OmZyb21GbG9h
dENlaWwocnVuLmxvZ2ljYWxSaWdodCkgLSBMYXlvdXRVbml0Ojpmcm9tRmxvYXRGbG9vcihydW4u
bG9naWNhbExlZnQpLCByZXNvbHZlci5tX2FzY2VudCArIHJlc29sdmVyLm1fZGVzY2VudCk7Cisg
ICAgcmV0dXJuIExheW91dFJlY3QobGluZVBvc2l0aW9uLCBsaW5lU2l6ZSk7Cit9CisKK0Zsb2F0
UG9pbnQgUnVuUmVzb2x2ZXI6OlJ1bjo6YmFzZWxpbmUoKSBjb25zdAoreworICAgIGF1dG8mIHJl
c29sdmVyID0gbV9pdGVyYXRvci5yZXNvbHZlcigpOworICAgIGF1dG8mIHJ1biA9IG1faXRlcmF0
b3Iuc2ltcGxlUnVuKCk7CisKKyAgICBmbG9hdCBiYXNlbGluZVBvc2l0aW9uID0gcmVzb2x2ZXIu
bV9saW5lSGVpZ2h0ICogbV9pdGVyYXRvci5saW5lSW5kZXgoKSArIHJlc29sdmVyLm1fYmFzZWxp
bmU7CisgICAgcmV0dXJuIEZsb2F0UG9pbnQocnVuLmxvZ2ljYWxMZWZ0LCByb3VuZFRvSW50KGJh
c2VsaW5lUG9zaXRpb24gKyByZXNvbHZlci5tX2JvcmRlckFuZFBhZGRpbmdCZWZvcmUpKTsKK30K
KworU3RyaW5nVmlldyBSdW5SZXNvbHZlcjo6UnVuOjp0ZXh0KCkgY29uc3QKK3sKKyAgICBhdXRv
JiByZXNvbHZlciA9IG1faXRlcmF0b3IucmVzb2x2ZXIoKTsKKyAgICBhdXRvJiBydW4gPSBtX2l0
ZXJhdG9yLnNpbXBsZVJ1bigpOworICAgIHJldHVybiBTdHJpbmdWaWV3KHJlc29sdmVyLm1fc3Ry
aW5nKS5zdWJzdHJpbmcocnVuLnN0YXJ0LCBydW4uZW5kIC0gcnVuLnN0YXJ0KTsKK30KKworUnVu
UmVzb2x2ZXI6Okl0ZXJhdG9yOjpJdGVyYXRvcihjb25zdCBSdW5SZXNvbHZlciYgcmVzb2x2ZXIs
IHVuc2lnbmVkIHJ1bkluZGV4LCB1bnNpZ25lZCBsaW5lSW5kZXgpCisgICAgOiBtX3Jlc29sdmVy
KHJlc29sdmVyKQorICAgICwgbV9ydW5JbmRleChydW5JbmRleCkKKyAgICAsIG1fbGluZUluZGV4
KGxpbmVJbmRleCkKK3sKK30KKworUnVuUmVzb2x2ZXI6Okl0ZXJhdG9yJiBSdW5SZXNvbHZlcjo6
SXRlcmF0b3I6OmFkdmFuY2UoKQoreworICAgIGlmIChzaW1wbGVSdW4oKS5pc0VuZE9mTGluZSkK
KyAgICAgICAgKyttX2xpbmVJbmRleDsKKyAgICArK21fcnVuSW5kZXg7CisgICAgcmV0dXJuICp0
aGlzOworfQorCitSdW5SZXNvbHZlcjo6SXRlcmF0b3ImIFJ1blJlc29sdmVyOjpJdGVyYXRvcjo6
YWR2YW5jZUxpbmVzKHVuc2lnbmVkIGxpbmVDb3VudCkKK3sKKyAgICB1bnNpZ25lZCBydW5Db3Vu
dCA9IG1fcmVzb2x2ZXIubV9sYXlvdXQucnVuQ291bnQoKTsKKyAgICBpZiAocnVuQ291bnQgPT0g
bV9yZXNvbHZlci5tX2xheW91dC5saW5lQ291bnQoKSkgeworICAgICAgICBtX3J1bkluZGV4ID0g
c3RkOjptaW4ocnVuQ291bnQsIG1fcnVuSW5kZXggKyBsaW5lQ291bnQpOworICAgICAgICBtX2xp
bmVJbmRleCA9IG1fcnVuSW5kZXg7CisgICAgICAgIHJldHVybiAqdGhpczsKKyAgICB9CisgICAg
dW5zaWduZWQgdGFyZ2V0ID0gbV9saW5lSW5kZXggKyBsaW5lQ291bnQ7CisgICAgd2hpbGUgKG1f
bGluZUluZGV4IDwgdGFyZ2V0ICYmIG1fcnVuSW5kZXggPCBydW5Db3VudCkKKyAgICAgICAgYWR2
YW5jZSgpOworCisgICAgcmV0dXJuICp0aGlzOworfQorCitSdW5SZXNvbHZlcjo6UnVuUmVzb2x2
ZXIoY29uc3QgUmVuZGVyQmxvY2tGbG93JiBmbG93LCBjb25zdCBMYXlvdXQmIGxheW91dCkKKyAg
ICA6IG1fbGF5b3V0KGxheW91dCkKKyAgICAsIG1fc3RyaW5nKGRvd25jYXN0PFJlbmRlclRleHQ+
KCpmbG93LmZpcnN0Q2hpbGQoKSkudGV4dCgpKQorICAgICwgbV9saW5lSGVpZ2h0KGxpbmVIZWln
aHRGcm9tRmxvdyhmbG93KSkKKyAgICAsIG1fYmFzZWxpbmUoYmFzZWxpbmVGcm9tRmxvdyhmbG93
KSkKKyAgICAsIG1fYm9yZGVyQW5kUGFkZGluZ0JlZm9yZShmbG93LmJvcmRlckFuZFBhZGRpbmdC
ZWZvcmUoKSkKKyAgICAsIG1fYXNjZW50KGZsb3cuc3R5bGUoKS5mb250KCkuZm9udE1ldHJpY3Mo
KS5hc2NlbnQoKSkKKyAgICAsIG1fZGVzY2VudChmbG93LnN0eWxlKCkuZm9udCgpLmZvbnRNZXRy
aWNzKCkuZGVzY2VudCgpKQoreworfQorCit1bnNpZ25lZCBSdW5SZXNvbHZlcjo6bGluZUluZGV4
Rm9ySGVpZ2h0KExheW91dFVuaXQgaGVpZ2h0LCBJbmRleFR5cGUgdHlwZSkgY29uc3QKK3sKKyAg
ICBBU1NFUlQobV9saW5lSGVpZ2h0KTsKKyAgICBmbG9hdCB5ID0gaGVpZ2h0IC0gbV9ib3JkZXJB
bmRQYWRkaW5nQmVmb3JlOworICAgIC8vIExpbmVzIG1heSBvdmVybGFwLCBhZGp1c3QgdG8gZ2V0
IHRoZSBmaXJzdCBvciBsYXN0IGxpbmUgYXQgdGhpcyBoZWlnaHQuCisgICAgaWYgKHR5cGUgPT0g
SW5kZXhUeXBlOjpGaXJzdCkKKyAgICAgICAgeSArPSBtX2xpbmVIZWlnaHQgLSAobV9iYXNlbGlu
ZSArIG1fZGVzY2VudCk7CisgICAgZWxzZQorICAgICAgICB5IC09IG1fYmFzZWxpbmUgLSBtX2Fz
Y2VudDsKKyAgICB5ID0gc3RkOjptYXg8ZmxvYXQ+KHksIDApOworICAgIHJldHVybiBzdGQ6Om1p
bjx1bnNpZ25lZD4oeSAvIG1fbGluZUhlaWdodCwgbV9sYXlvdXQubGluZUNvdW50KCkgLSAxKTsK
K30KKworUmFuZ2U8UnVuUmVzb2x2ZXI6Okl0ZXJhdG9yPiBSdW5SZXNvbHZlcjo6cmFuZ2VGb3JS
ZWN0KGNvbnN0IExheW91dFJlY3QmIHJlY3QpIGNvbnN0Cit7IAorICAgIGlmICghbV9saW5lSGVp
Z2h0KQorICAgICAgICByZXR1cm4gUmFuZ2U8SXRlcmF0b3I+KGJlZ2luKCksIGVuZCgpKTsKKwor
ICAgIHVuc2lnbmVkIGZpcnN0TGluZSA9IGxpbmVJbmRleEZvckhlaWdodChyZWN0LnkoKSwgSW5k
ZXhUeXBlOjpGaXJzdCk7CisgICAgdW5zaWduZWQgbGFzdExpbmUgPSBzdGQ6Om1heChmaXJzdExp
bmUsIGxpbmVJbmRleEZvckhlaWdodChyZWN0Lm1heFkoKSwgSW5kZXhUeXBlOjpMYXN0KSk7CisK
KyAgICBhdXRvIHJhbmdlQmVnaW4gPSBiZWdpbigpLmFkdmFuY2VMaW5lcyhmaXJzdExpbmUpOwor
ICAgIGlmIChyYW5nZUJlZ2luID09IGVuZCgpKQorICAgICAgICByZXR1cm4gUmFuZ2U8SXRlcmF0
b3I+KGVuZCgpLCBlbmQoKSk7CisgICAgYXV0byByYW5nZUVuZCA9IHJhbmdlQmVnaW47CisgICAg
QVNTRVJUKGxhc3RMaW5lID49IGZpcnN0TGluZSk7CisgICAgcmFuZ2VFbmQuYWR2YW5jZUxpbmVz
KGxhc3RMaW5lIC0gZmlyc3RMaW5lICsgMSk7CisgICAgcmV0dXJuIFJhbmdlPEl0ZXJhdG9yPihy
YW5nZUJlZ2luLCByYW5nZUVuZCk7Cit9CisKK0xpbmVSZXNvbHZlcjo6SXRlcmF0b3I6Okl0ZXJh
dG9yKFJ1blJlc29sdmVyOjpJdGVyYXRvciBydW5JdGVyYXRvcikKKyAgICA6IG1fcnVuSXRlcmF0
b3IocnVuSXRlcmF0b3IpCit7Cit9CisKK0xpbmVSZXNvbHZlcjo6SXRlcmF0b3ImIExpbmVSZXNv
bHZlcjo6SXRlcmF0b3I6Om9wZXJhdG9yKysoKQoreworICAgIG1fcnVuSXRlcmF0b3IuYWR2YW5j
ZUxpbmVzKDEpOworICAgIHJldHVybiAqdGhpczsKK30KKworY29uc3QgTGF5b3V0UmVjdCBMaW5l
UmVzb2x2ZXI6Okl0ZXJhdG9yOjpvcGVyYXRvciooKSBjb25zdAoreworICAgIHVuc2lnbmVkIGN1
cnJlbnRMaW5lID0gbV9ydW5JdGVyYXRvci5saW5lSW5kZXgoKTsKKyAgICBhdXRvIGl0ID0gbV9y
dW5JdGVyYXRvcjsKKyAgICBMYXlvdXRSZWN0IHJlY3QgPSAoKml0KS5yZWN0KCk7CisgICAgd2hp
bGUgKGl0LmFkdmFuY2UoKS5saW5lSW5kZXgoKSA9PSBjdXJyZW50TGluZSkKKyAgICAgICAgcmVj
dC51bml0ZSgoKml0KS5yZWN0KCkpOworCisgICAgcmV0dXJuIHJlY3Q7Cit9CisKK0xpbmVSZXNv
bHZlcjo6TGluZVJlc29sdmVyKGNvbnN0IFJlbmRlckJsb2NrRmxvdyYgZmxvdywgY29uc3QgTGF5
b3V0JiBsYXlvdXQpCisgICAgOiBtX3J1blJlc29sdmVyKGZsb3csIGxheW91dCkKK3sKK30KKwor
UmFuZ2U8TGluZVJlc29sdmVyOjpJdGVyYXRvcj4gTGluZVJlc29sdmVyOjpyYW5nZUZvclJlY3Qo
Y29uc3QgTGF5b3V0UmVjdCYgcmVjdCkgY29uc3QKK3sKKyAgICBhdXRvIHJ1blJhbmdlID0gbV9y
dW5SZXNvbHZlci5yYW5nZUZvclJlY3QocmVjdCk7CisgICAgcmV0dXJuIFJhbmdlPEl0ZXJhdG9y
PihJdGVyYXRvcihydW5SYW5nZS5iZWdpbigpKSwgSXRlcmF0b3IocnVuUmFuZ2UuZW5kKCkpKTsK
K30KKworUnVuUmVzb2x2ZXIgcnVuUmVzb2x2ZXIoY29uc3QgUmVuZGVyQmxvY2tGbG93JiBmbG93
LCBjb25zdCBMYXlvdXQmIGxheW91dCkKK3sKKyAgICByZXR1cm4gUnVuUmVzb2x2ZXIoZmxvdywg
bGF5b3V0KTsKK30KKworTGluZVJlc29sdmVyIGxpbmVSZXNvbHZlcihjb25zdCBSZW5kZXJCbG9j
a0Zsb3cmIGZsb3csIGNvbnN0IExheW91dCYgbGF5b3V0KQoreworICAgIHJldHVybiBMaW5lUmVz
b2x2ZXIoZmxvdywgbGF5b3V0KTsKK30KKworfQorfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL1NpbXBsZUxpbmVMYXlvdXRSZXNvbHZlci5oIGIvU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL1NpbXBsZUxpbmVMYXlvdXRSZXNvbHZlci5oCmluZGV4IGJkOTIzYWQwOTIzOTk4
NjQxMzIyZDM4NGMwMzA0OTFkNjg4MTFlNzkuLmUwYThmYjg4ODMyOWRiM2FlMzFiMzgyN2ZkNWIy
MzQwMzMwNmRiNzYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9TaW1wbGVM
aW5lTGF5b3V0UmVzb2x2ZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvU2ltcGxl
TGluZUxheW91dFJlc29sdmVyLmgKQEAgLTI3LDkgKzI3LDcgQEAKICNkZWZpbmUgU2ltcGxlTGlu
ZUxheW91dFJlc29sdmVyX2gKIAogI2luY2x1ZGUgIkxheW91dFJlY3QuaCIKLSNpbmNsdWRlICJS
ZW5kZXJCbG9ja0Zsb3cuaCIKLSNpbmNsdWRlICJSZW5kZXJUZXh0LmgiCi0jaW5jbHVkZSAiU2lt
cGxlTGluZUxheW91dEZ1bmN0aW9ucy5oIgorI2luY2x1ZGUgIlNpbXBsZUxpbmVMYXlvdXQuaCIK
ICNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+
CiAKQEAgLTQxLDggKzM5LDggQEAgY2xhc3MgUmFuZ2UgewogcHVibGljOgogICAgIFJhbmdlKEl0
ZXJhdG9yVHlwZSBiZWdpbiwgSXRlcmF0b3JUeXBlIGVuZCkgOiBtX2JlZ2luKGJlZ2luKSwgbV9l
bmQoZW5kKSB7IH0KIAotICAgIEl0ZXJhdG9yVHlwZSBiZWdpbigpIGNvbnN0IHsgcmV0dXJuIG1f
YmVnaW47IH0KLSAgICBJdGVyYXRvclR5cGUgZW5kKCkgY29uc3QgeyByZXR1cm4gbV9lbmQ7IH0K
KyAgICBpbmxpbmUgSXRlcmF0b3JUeXBlIGJlZ2luKCkgY29uc3QgeyByZXR1cm4gbV9iZWdpbjsg
fQorICAgIGlubGluZSBJdGVyYXRvclR5cGUgZW5kKCkgY29uc3QgeyByZXR1cm4gbV9lbmQ7IH0K
IAogcHJpdmF0ZToKICAgICBJdGVyYXRvclR5cGUgbV9iZWdpbjsKQEAgLTU3LDE0ICs1NSwxNCBA
QCBwdWJsaWM6CiAgICAgcHVibGljOgogICAgICAgICBleHBsaWNpdCBSdW4oY29uc3QgSXRlcmF0
b3ImKTsKIAotICAgICAgICB1bnNpZ25lZCBzdGFydCgpIGNvbnN0OwotICAgICAgICB1bnNpZ25l
ZCBlbmQoKSBjb25zdDsKKyAgICAgICAgaW5saW5lIHVuc2lnbmVkIHN0YXJ0KCkgY29uc3QgeyBy
ZXR1cm4gbV9pdGVyYXRvci5zaW1wbGVSdW4oKS5zdGFydDsgfQorICAgICAgICBpbmxpbmUgdW5z
aWduZWQgZW5kKCkgY29uc3QgeyByZXR1cm4gbV9pdGVyYXRvci5zaW1wbGVSdW4oKS5lbmQ7IH0K
IAogICAgICAgICBMYXlvdXRSZWN0IHJlY3QoKSBjb25zdDsKICAgICAgICAgRmxvYXRQb2ludCBi
YXNlbGluZSgpIGNvbnN0OwogICAgICAgICBTdHJpbmdWaWV3IHRleHQoKSBjb25zdDsKIAotICAg
ICAgICB1bnNpZ25lZCBsaW5lSW5kZXgoKSBjb25zdDsKKyAgICAgICAgaW5saW5lIHVuc2lnbmVk
IGxpbmVJbmRleCgpIGNvbnN0IHsgcmV0dXJuIG1faXRlcmF0b3IubGluZUluZGV4KCk7IH0KIAog
ICAgIHByaXZhdGU6CiAgICAgICAgIGNvbnN0IEl0ZXJhdG9yJiBtX2l0ZXJhdG9yOwpAQCAtNzQs
MTkgKzcyLDE5IEBAIHB1YmxpYzoKICAgICBwdWJsaWM6CiAgICAgICAgIEl0ZXJhdG9yKGNvbnN0
IFJ1blJlc29sdmVyJiwgdW5zaWduZWQgcnVuSW5kZXgsIHVuc2lnbmVkIGxpbmVJbmRleCk7CiAK
LSAgICAgICAgSXRlcmF0b3ImIG9wZXJhdG9yKysoKTsKKyAgICAgICAgaW5saW5lIEl0ZXJhdG9y
JiBvcGVyYXRvcisrKCkgeyByZXR1cm4gYWR2YW5jZSgpOyB9CiAKLSAgICAgICAgYm9vbCBvcGVy
YXRvcj09KGNvbnN0IEl0ZXJhdG9yJikgY29uc3Q7Ci0gICAgICAgIGJvb2wgb3BlcmF0b3IhPShj
b25zdCBJdGVyYXRvciYpIGNvbnN0OworICAgICAgICBpbmxpbmUgYm9vbCBvcGVyYXRvcj09KGNv
bnN0IEl0ZXJhdG9yJiBvdGhlcikgY29uc3QgeyBBU1NFUlQoJm1fcmVzb2x2ZXIgPT0gJm90aGVy
Lm1fcmVzb2x2ZXIpOyByZXR1cm4gbV9ydW5JbmRleCA9PSBvdGhlci5tX3J1bkluZGV4OyB9Cisg
ICAgICAgIGlubGluZSBib29sIG9wZXJhdG9yIT0oY29uc3QgSXRlcmF0b3ImIG90aGVyKSBjb25z
dCB7IHJldHVybiAhKCp0aGlzID09IG90aGVyKTsgfQogCi0gICAgICAgIFJ1biBvcGVyYXRvcioo
KSBjb25zdDsKKyAgICAgICAgaW5saW5lIFJ1biBvcGVyYXRvciooKSBjb25zdCB7IHJldHVybiBS
dW4oKnRoaXMpOyB9CiAKICAgICAgICAgSXRlcmF0b3ImIGFkdmFuY2UoKTsKICAgICAgICAgSXRl
cmF0b3ImIGFkdmFuY2VMaW5lcyh1bnNpZ25lZCk7CiAKLSAgICAgICAgY29uc3QgUnVuUmVzb2x2
ZXImIHJlc29sdmVyKCkgY29uc3QgeyByZXR1cm4gbV9yZXNvbHZlcjsgfQotICAgICAgICBjb25z
dCBTaW1wbGVMaW5lTGF5b3V0OjpSdW4mIHNpbXBsZVJ1bigpIGNvbnN0OwotICAgICAgICB1bnNp
Z25lZCBsaW5lSW5kZXgoKSBjb25zdCB7IHJldHVybiBtX2xpbmVJbmRleDsgfQorICAgICAgICBp
bmxpbmUgY29uc3QgUnVuUmVzb2x2ZXImIHJlc29sdmVyKCkgY29uc3QgeyByZXR1cm4gbV9yZXNv
bHZlcjsgfQorICAgICAgICBpbmxpbmUgY29uc3QgU2ltcGxlTGluZUxheW91dDo6UnVuJiBzaW1w
bGVSdW4oKSBjb25zdCB7IHJldHVybiBtX3Jlc29sdmVyLm1fbGF5b3V0LnJ1bkF0KG1fcnVuSW5k
ZXgpOyB9CisgICAgICAgIGlubGluZSB1bnNpZ25lZCBsaW5lSW5kZXgoKSBjb25zdCB7IHJldHVy
biBtX2xpbmVJbmRleDsgfQogCiAgICAgcHJpdmF0ZToKICAgICAgICAgY29uc3QgUnVuUmVzb2x2
ZXImIG1fcmVzb2x2ZXI7CkBAIC05Niw4ICs5NCw4IEBAIHB1YmxpYzoKIAogICAgIFJ1blJlc29s
dmVyKGNvbnN0IFJlbmRlckJsb2NrRmxvdyYsIGNvbnN0IExheW91dCYpOwogCi0gICAgSXRlcmF0
b3IgYmVnaW4oKSBjb25zdDsKLSAgICBJdGVyYXRvciBlbmQoKSBjb25zdDsKKyAgICBpbmxpbmUg
SXRlcmF0b3IgYmVnaW4oKSBjb25zdCB7IHJldHVybiBJdGVyYXRvcigqdGhpcywgMCwgMCk7IH0K
KyAgICBpbmxpbmUgSXRlcmF0b3IgZW5kKCkgY29uc3QgeyByZXR1cm4gSXRlcmF0b3IoKnRoaXMs
IG1fbGF5b3V0LnJ1bkNvdW50KCksIG1fbGF5b3V0LmxpbmVDb3VudCgpKTsgIH0KIAogICAgIFJh
bmdlPEl0ZXJhdG9yPiByYW5nZUZvclJlY3QoY29uc3QgTGF5b3V0UmVjdCYpIGNvbnN0OwogCkBA
IC0xMjMsOCArMTIxLDggQEAgcHVibGljOgogICAgICAgICBleHBsaWNpdCBJdGVyYXRvcihSdW5S
ZXNvbHZlcjo6SXRlcmF0b3IpOwogCiAgICAgICAgIEl0ZXJhdG9yJiBvcGVyYXRvcisrKCk7Ci0g
ICAgICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBJdGVyYXRvciYpIGNvbnN0OwotICAgICAgICBi
b29sIG9wZXJhdG9yIT0oY29uc3QgSXRlcmF0b3ImKSBjb25zdDsKKyAgICAgICAgaW5saW5lIGJv
b2wgb3BlcmF0b3I9PShjb25zdCBJdGVyYXRvciYgb3RoZXIpIGNvbnN0IHsgcmV0dXJuIG1fcnVu
SXRlcmF0b3IgPT0gb3RoZXIubV9ydW5JdGVyYXRvcjsgfQorICAgICAgICBpbmxpbmUgYm9vbCBv
cGVyYXRvciE9KGNvbnN0IEl0ZXJhdG9yJiBvdGhlcikgY29uc3QgeyByZXR1cm4gbV9ydW5JdGVy
YXRvciAhPSBvdGhlci5tX3J1bkl0ZXJhdG9yOyB9CiAKICAgICAgICAgY29uc3QgTGF5b3V0UmVj
dCBvcGVyYXRvciooKSBjb25zdDsKIApAQCAtMTM1LDggKzEzMyw4IEBAIHB1YmxpYzoKIAogICAg
IExpbmVSZXNvbHZlcihjb25zdCBSZW5kZXJCbG9ja0Zsb3cmLCBjb25zdCBMYXlvdXQmKTsKIAot
ICAgIEl0ZXJhdG9yIGJlZ2luKCkgY29uc3Q7Ci0gICAgSXRlcmF0b3IgZW5kKCkgY29uc3Q7Cisg
ICAgaW5saW5lIEl0ZXJhdG9yIGJlZ2luKCkgY29uc3QgeyByZXR1cm4gSXRlcmF0b3IobV9ydW5S
ZXNvbHZlci5iZWdpbigpKTsgfQorICAgIGlubGluZSBJdGVyYXRvciBlbmQoKSBjb25zdCB7IHJl
dHVybiBJdGVyYXRvcihtX3J1blJlc29sdmVyLmVuZCgpKTsgfQogCiAgICAgUmFuZ2U8SXRlcmF0
b3I+IHJhbmdlRm9yUmVjdChjb25zdCBMYXlvdXRSZWN0JikgY29uc3Q7CiAKQEAgLTE0NiwyMjQg
KzE0NCw2IEBAIHByaXZhdGU6CiAKIFJ1blJlc29sdmVyIHJ1blJlc29sdmVyKGNvbnN0IFJlbmRl
ckJsb2NrRmxvdyYsIGNvbnN0IExheW91dCYpOwogTGluZVJlc29sdmVyIGxpbmVSZXNvbHZlcihj
b25zdCBSZW5kZXJCbG9ja0Zsb3cmLCBjb25zdCBMYXlvdXQmKTsKLQotaW5saW5lIFJ1blJlc29s
dmVyOjpSdW46OlJ1bihjb25zdCBJdGVyYXRvciYgaXRlcmF0b3IpCi0gICAgOiBtX2l0ZXJhdG9y
KGl0ZXJhdG9yKQotewotfQotCi1pbmxpbmUgdW5zaWduZWQgUnVuUmVzb2x2ZXI6OlJ1bjo6c3Rh
cnQoKSBjb25zdAotewotICAgIHJldHVybiBtX2l0ZXJhdG9yLnNpbXBsZVJ1bigpLnN0YXJ0Owot
fQotCi1pbmxpbmUgdW5zaWduZWQgUnVuUmVzb2x2ZXI6OlJ1bjo6ZW5kKCkgY29uc3QKLXsKLSAg
ICByZXR1cm4gbV9pdGVyYXRvci5zaW1wbGVSdW4oKS5lbmQ7Ci19Ci0KLWlubGluZSBMYXlvdXRS
ZWN0IFJ1blJlc29sdmVyOjpSdW46OnJlY3QoKSBjb25zdAotewotICAgIGF1dG8mIHJlc29sdmVy
ID0gbV9pdGVyYXRvci5yZXNvbHZlcigpOwotICAgIGF1dG8mIHJ1biA9IG1faXRlcmF0b3Iuc2lt
cGxlUnVuKCk7Ci0KLSAgICBmbG9hdCBiYXNlbGluZVBvc2l0aW9uID0gcmVzb2x2ZXIubV9saW5l
SGVpZ2h0ICogbV9pdGVyYXRvci5saW5lSW5kZXgoKSArIHJlc29sdmVyLm1fYmFzZWxpbmU7Ci0g
ICAgTGF5b3V0UG9pbnQgbGluZVBvc2l0aW9uKExheW91dFVuaXQ6OmZyb21GbG9hdEZsb29yKHJ1
bi5sb2dpY2FsTGVmdCksIHJvdW5kVG9JbnQoYmFzZWxpbmVQb3NpdGlvbiAtIHJlc29sdmVyLm1f
YXNjZW50ICsgcmVzb2x2ZXIubV9ib3JkZXJBbmRQYWRkaW5nQmVmb3JlKSk7Ci0gICAgTGF5b3V0
U2l6ZSBsaW5lU2l6ZShMYXlvdXRVbml0Ojpmcm9tRmxvYXRDZWlsKHJ1bi5sb2dpY2FsUmlnaHQp
IC0gTGF5b3V0VW5pdDo6ZnJvbUZsb2F0Rmxvb3IocnVuLmxvZ2ljYWxMZWZ0KSwgcmVzb2x2ZXIu
bV9hc2NlbnQgKyByZXNvbHZlci5tX2Rlc2NlbnQpOwotICAgIHJldHVybiBMYXlvdXRSZWN0KGxp
bmVQb3NpdGlvbiwgbGluZVNpemUpOwotfQotCi1pbmxpbmUgRmxvYXRQb2ludCBSdW5SZXNvbHZl
cjo6UnVuOjpiYXNlbGluZSgpIGNvbnN0Ci17Ci0gICAgYXV0byYgcmVzb2x2ZXIgPSBtX2l0ZXJh
dG9yLnJlc29sdmVyKCk7Ci0gICAgYXV0byYgcnVuID0gbV9pdGVyYXRvci5zaW1wbGVSdW4oKTsK
LQotICAgIGZsb2F0IGJhc2VsaW5lUG9zaXRpb24gPSByZXNvbHZlci5tX2xpbmVIZWlnaHQgKiBt
X2l0ZXJhdG9yLmxpbmVJbmRleCgpICsgcmVzb2x2ZXIubV9iYXNlbGluZTsKLSAgICByZXR1cm4g
RmxvYXRQb2ludChydW4ubG9naWNhbExlZnQsIHJvdW5kVG9JbnQoYmFzZWxpbmVQb3NpdGlvbiAr
IHJlc29sdmVyLm1fYm9yZGVyQW5kUGFkZGluZ0JlZm9yZSkpOwotfQotCi1pbmxpbmUgU3RyaW5n
VmlldyBSdW5SZXNvbHZlcjo6UnVuOjp0ZXh0KCkgY29uc3QKLXsKLSAgICBhdXRvJiByZXNvbHZl
ciA9IG1faXRlcmF0b3IucmVzb2x2ZXIoKTsKLSAgICBhdXRvJiBydW4gPSBtX2l0ZXJhdG9yLnNp
bXBsZVJ1bigpOwotICAgIHJldHVybiBTdHJpbmdWaWV3KHJlc29sdmVyLm1fc3RyaW5nKS5zdWJz
dHJpbmcocnVuLnN0YXJ0LCBydW4uZW5kIC0gcnVuLnN0YXJ0KTsKLX0KLQotaW5saW5lIHVuc2ln
bmVkIFJ1blJlc29sdmVyOjpSdW46OmxpbmVJbmRleCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1f
aXRlcmF0b3IubGluZUluZGV4KCk7Ci19Ci0KLWlubGluZSBSdW5SZXNvbHZlcjo6SXRlcmF0b3I6
Okl0ZXJhdG9yKGNvbnN0IFJ1blJlc29sdmVyJiByZXNvbHZlciwgdW5zaWduZWQgcnVuSW5kZXgs
IHVuc2lnbmVkIGxpbmVJbmRleCkKLSAgICA6IG1fcmVzb2x2ZXIocmVzb2x2ZXIpCi0gICAgLCBt
X3J1bkluZGV4KHJ1bkluZGV4KQotICAgICwgbV9saW5lSW5kZXgobGluZUluZGV4KQotewotfQot
Ci1pbmxpbmUgUnVuUmVzb2x2ZXI6Okl0ZXJhdG9yJiBSdW5SZXNvbHZlcjo6SXRlcmF0b3I6Om9w
ZXJhdG9yKysoKQotewotICAgIHJldHVybiBhZHZhbmNlKCk7Ci19Ci0KLWlubGluZSBib29sIFJ1
blJlc29sdmVyOjpJdGVyYXRvcjo6b3BlcmF0b3I9PShjb25zdCBJdGVyYXRvciYgb3RoZXIpIGNv
bnN0Ci17Ci0gICAgQVNTRVJUKCZtX3Jlc29sdmVyID09ICZvdGhlci5tX3Jlc29sdmVyKTsKLSAg
ICByZXR1cm4gbV9ydW5JbmRleCA9PSBvdGhlci5tX3J1bkluZGV4OwotfQotCi1pbmxpbmUgYm9v
bCBSdW5SZXNvbHZlcjo6SXRlcmF0b3I6Om9wZXJhdG9yIT0oY29uc3QgSXRlcmF0b3ImIG90aGVy
KSBjb25zdAotewotICAgIHJldHVybiAhKCp0aGlzID09IG90aGVyKTsKLX0KLQotaW5saW5lIFJ1
blJlc29sdmVyOjpSdW4gUnVuUmVzb2x2ZXI6Okl0ZXJhdG9yOjpvcGVyYXRvciooKSBjb25zdAot
ewotICAgIHJldHVybiBSdW4oKnRoaXMpOwotfQotCi1pbmxpbmUgUnVuUmVzb2x2ZXI6Okl0ZXJh
dG9yJiBSdW5SZXNvbHZlcjo6SXRlcmF0b3I6OmFkdmFuY2UoKQotewotICAgIGlmIChzaW1wbGVS
dW4oKS5pc0VuZE9mTGluZSkKLSAgICAgICAgKyttX2xpbmVJbmRleDsKLSAgICArK21fcnVuSW5k
ZXg7Ci0gICAgcmV0dXJuICp0aGlzOwotfQotCi1pbmxpbmUgUnVuUmVzb2x2ZXI6Okl0ZXJhdG9y
JiBSdW5SZXNvbHZlcjo6SXRlcmF0b3I6OmFkdmFuY2VMaW5lcyh1bnNpZ25lZCBsaW5lQ291bnQp
Ci17Ci0gICAgdW5zaWduZWQgcnVuQ291bnQgPSBtX3Jlc29sdmVyLm1fbGF5b3V0LnJ1bkNvdW50
KCk7Ci0gICAgaWYgKHJ1bkNvdW50ID09IG1fcmVzb2x2ZXIubV9sYXlvdXQubGluZUNvdW50KCkp
IHsKLSAgICAgICAgbV9ydW5JbmRleCA9IHN0ZDo6bWluKHJ1bkNvdW50LCBtX3J1bkluZGV4ICsg
bGluZUNvdW50KTsKLSAgICAgICAgbV9saW5lSW5kZXggPSBtX3J1bkluZGV4OwotICAgICAgICBy
ZXR1cm4gKnRoaXM7Ci0gICAgfQotICAgIHVuc2lnbmVkIHRhcmdldCA9IG1fbGluZUluZGV4ICsg
bGluZUNvdW50OwotICAgIHdoaWxlIChtX2xpbmVJbmRleCA8IHRhcmdldCAmJiBtX3J1bkluZGV4
IDwgcnVuQ291bnQpCi0gICAgICAgIGFkdmFuY2UoKTsKLQotICAgIHJldHVybiAqdGhpczsKLX0K
LQotaW5saW5lIGNvbnN0IFNpbXBsZUxpbmVMYXlvdXQ6OlJ1biYgUnVuUmVzb2x2ZXI6Okl0ZXJh
dG9yOjpzaW1wbGVSdW4oKSBjb25zdAotewotICAgIHJldHVybiBtX3Jlc29sdmVyLm1fbGF5b3V0
LnJ1bkF0KG1fcnVuSW5kZXgpOwotfQotCi1pbmxpbmUgUnVuUmVzb2x2ZXI6OlJ1blJlc29sdmVy
KGNvbnN0IFJlbmRlckJsb2NrRmxvdyYgZmxvdywgY29uc3QgTGF5b3V0JiBsYXlvdXQpCi0gICAg
OiBtX2xheW91dChsYXlvdXQpCi0gICAgLCBtX3N0cmluZyhkb3duY2FzdDxSZW5kZXJUZXh0Pigq
Zmxvdy5maXJzdENoaWxkKCkpLnRleHQoKSkKLSAgICAsIG1fbGluZUhlaWdodChsaW5lSGVpZ2h0
RnJvbUZsb3coZmxvdykpCi0gICAgLCBtX2Jhc2VsaW5lKGJhc2VsaW5lRnJvbUZsb3coZmxvdykp
Ci0gICAgLCBtX2JvcmRlckFuZFBhZGRpbmdCZWZvcmUoZmxvdy5ib3JkZXJBbmRQYWRkaW5nQmVm
b3JlKCkpCi0gICAgLCBtX2FzY2VudChmbG93LnN0eWxlKCkuZm9udCgpLmZvbnRNZXRyaWNzKCku
YXNjZW50KCkpCi0gICAgLCBtX2Rlc2NlbnQoZmxvdy5zdHlsZSgpLmZvbnQoKS5mb250TWV0cmlj
cygpLmRlc2NlbnQoKSkKLXsKLX0KLQotaW5saW5lIFJ1blJlc29sdmVyOjpJdGVyYXRvciBSdW5S
ZXNvbHZlcjo6YmVnaW4oKSBjb25zdAotewotICAgIHJldHVybiBJdGVyYXRvcigqdGhpcywgMCwg
MCk7Ci19Ci0KLWlubGluZSBSdW5SZXNvbHZlcjo6SXRlcmF0b3IgUnVuUmVzb2x2ZXI6OmVuZCgp
IGNvbnN0Ci17Ci0gICAgcmV0dXJuIEl0ZXJhdG9yKCp0aGlzLCBtX2xheW91dC5ydW5Db3VudCgp
LCBtX2xheW91dC5saW5lQ291bnQoKSk7Ci19Ci0KLWlubGluZSB1bnNpZ25lZCBSdW5SZXNvbHZl
cjo6bGluZUluZGV4Rm9ySGVpZ2h0KExheW91dFVuaXQgaGVpZ2h0LCBJbmRleFR5cGUgdHlwZSkg
Y29uc3QKLXsKLSAgICBBU1NFUlQobV9saW5lSGVpZ2h0KTsKLSAgICBmbG9hdCB5ID0gaGVpZ2h0
IC0gbV9ib3JkZXJBbmRQYWRkaW5nQmVmb3JlOwotICAgIC8vIExpbmVzIG1heSBvdmVybGFwLCBh
ZGp1c3QgdG8gZ2V0IHRoZSBmaXJzdCBvciBsYXN0IGxpbmUgYXQgdGhpcyBoZWlnaHQuCi0gICAg
aWYgKHR5cGUgPT0gSW5kZXhUeXBlOjpGaXJzdCkKLSAgICAgICAgeSArPSBtX2xpbmVIZWlnaHQg
LSAobV9iYXNlbGluZSArIG1fZGVzY2VudCk7Ci0gICAgZWxzZQotICAgICAgICB5IC09IG1fYmFz
ZWxpbmUgLSBtX2FzY2VudDsKLSAgICB5ID0gc3RkOjptYXg8ZmxvYXQ+KHksIDApOwotICAgIHJl
dHVybiBzdGQ6Om1pbjx1bnNpZ25lZD4oeSAvIG1fbGluZUhlaWdodCwgbV9sYXlvdXQubGluZUNv
dW50KCkgLSAxKTsKLX0KLQotaW5saW5lIFJhbmdlPFJ1blJlc29sdmVyOjpJdGVyYXRvcj4gUnVu
UmVzb2x2ZXI6OnJhbmdlRm9yUmVjdChjb25zdCBMYXlvdXRSZWN0JiByZWN0KSBjb25zdAotewot
ICAgIGlmICghbV9saW5lSGVpZ2h0KQotICAgICAgICByZXR1cm4gUmFuZ2U8SXRlcmF0b3I+KGJl
Z2luKCksIGVuZCgpKTsKLQotICAgIHVuc2lnbmVkIGZpcnN0TGluZSA9IGxpbmVJbmRleEZvckhl
aWdodChyZWN0LnkoKSwgSW5kZXhUeXBlOjpGaXJzdCk7Ci0gICAgdW5zaWduZWQgbGFzdExpbmUg
PSBzdGQ6Om1heChmaXJzdExpbmUsIGxpbmVJbmRleEZvckhlaWdodChyZWN0Lm1heFkoKSwgSW5k
ZXhUeXBlOjpMYXN0KSk7Ci0KLSAgICBhdXRvIHJhbmdlQmVnaW4gPSBiZWdpbigpLmFkdmFuY2VM
aW5lcyhmaXJzdExpbmUpOwotICAgIGlmIChyYW5nZUJlZ2luID09IGVuZCgpKQotICAgICAgICBy
ZXR1cm4gUmFuZ2U8SXRlcmF0b3I+KGVuZCgpLCBlbmQoKSk7Ci0gICAgYXV0byByYW5nZUVuZCA9
IHJhbmdlQmVnaW47Ci0gICAgQVNTRVJUKGxhc3RMaW5lID49IGZpcnN0TGluZSk7Ci0gICAgcmFu
Z2VFbmQuYWR2YW5jZUxpbmVzKGxhc3RMaW5lIC0gZmlyc3RMaW5lICsgMSk7Ci0gICAgcmV0dXJu
IFJhbmdlPEl0ZXJhdG9yPihyYW5nZUJlZ2luLCByYW5nZUVuZCk7Ci19Ci0KLWlubGluZSBMaW5l
UmVzb2x2ZXI6Okl0ZXJhdG9yOjpJdGVyYXRvcihSdW5SZXNvbHZlcjo6SXRlcmF0b3IgcnVuSXRl
cmF0b3IpCi0gICAgOiBtX3J1bkl0ZXJhdG9yKHJ1bkl0ZXJhdG9yKQotewotfQotCi1pbmxpbmUg
TGluZVJlc29sdmVyOjpJdGVyYXRvciYgTGluZVJlc29sdmVyOjpJdGVyYXRvcjo6b3BlcmF0b3Ir
KygpCi17Ci0gICAgbV9ydW5JdGVyYXRvci5hZHZhbmNlTGluZXMoMSk7Ci0gICAgcmV0dXJuICp0
aGlzOwotfQotCi1pbmxpbmUgYm9vbCBMaW5lUmVzb2x2ZXI6Okl0ZXJhdG9yOjpvcGVyYXRvcj09
KGNvbnN0IEl0ZXJhdG9yJiBvdGhlcikgY29uc3QKLXsKLSAgICByZXR1cm4gbV9ydW5JdGVyYXRv
ciA9PSBvdGhlci5tX3J1bkl0ZXJhdG9yOwotfQotCi1pbmxpbmUgYm9vbCBMaW5lUmVzb2x2ZXI6
Okl0ZXJhdG9yOjpvcGVyYXRvciE9KGNvbnN0IEl0ZXJhdG9yJiBvdGhlcikgY29uc3QKLXsKLSAg
ICByZXR1cm4gbV9ydW5JdGVyYXRvciAhPSBvdGhlci5tX3J1bkl0ZXJhdG9yOwotfQotCi1pbmxp
bmUgY29uc3QgTGF5b3V0UmVjdCBMaW5lUmVzb2x2ZXI6Okl0ZXJhdG9yOjpvcGVyYXRvciooKSBj
b25zdAotewotICAgIHVuc2lnbmVkIGN1cnJlbnRMaW5lID0gbV9ydW5JdGVyYXRvci5saW5lSW5k
ZXgoKTsKLSAgICBhdXRvIGl0ID0gbV9ydW5JdGVyYXRvcjsKLSAgICBMYXlvdXRSZWN0IHJlY3Qg
PSAoKml0KS5yZWN0KCk7Ci0gICAgd2hpbGUgKGl0LmFkdmFuY2UoKS5saW5lSW5kZXgoKSA9PSBj
dXJyZW50TGluZSkKLSAgICAgICAgcmVjdC51bml0ZSgoKml0KS5yZWN0KCkpOwotCi0gICAgcmV0
dXJuIHJlY3Q7Ci19Ci0KLWlubGluZSBMaW5lUmVzb2x2ZXI6OkxpbmVSZXNvbHZlcihjb25zdCBS
ZW5kZXJCbG9ja0Zsb3cmIGZsb3csIGNvbnN0IExheW91dCYgbGF5b3V0KQotICAgIDogbV9ydW5S
ZXNvbHZlcihmbG93LCBsYXlvdXQpCi17Ci19Ci0KLWlubGluZSBMaW5lUmVzb2x2ZXI6Okl0ZXJh
dG9yIExpbmVSZXNvbHZlcjo6YmVnaW4oKSBjb25zdAotewotICAgIHJldHVybiBJdGVyYXRvciht
X3J1blJlc29sdmVyLmJlZ2luKCkpOwotfQotCi1pbmxpbmUgTGluZVJlc29sdmVyOjpJdGVyYXRv
ciBMaW5lUmVzb2x2ZXI6OmVuZCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIEl0ZXJhdG9yKG1fcnVu
UmVzb2x2ZXIuZW5kKCkpOwotfQotCi1pbmxpbmUgUmFuZ2U8TGluZVJlc29sdmVyOjpJdGVyYXRv
cj4gTGluZVJlc29sdmVyOjpyYW5nZUZvclJlY3QoY29uc3QgTGF5b3V0UmVjdCYgcmVjdCkgY29u
c3QKLXsKLSAgICBhdXRvIHJ1blJhbmdlID0gbV9ydW5SZXNvbHZlci5yYW5nZUZvclJlY3QocmVj
dCk7Ci0gICAgcmV0dXJuIFJhbmdlPEl0ZXJhdG9yPihJdGVyYXRvcihydW5SYW5nZS5iZWdpbigp
KSwgSXRlcmF0b3IocnVuUmFuZ2UuZW5kKCkpKTsKLX0KLQotaW5saW5lIFJ1blJlc29sdmVyIHJ1
blJlc29sdmVyKGNvbnN0IFJlbmRlckJsb2NrRmxvdyYgZmxvdywgY29uc3QgTGF5b3V0JiBsYXlv
dXQpCi17Ci0gICAgcmV0dXJuIFJ1blJlc29sdmVyKGZsb3csIGxheW91dCk7Ci19Ci0KLWlubGlu
ZSBMaW5lUmVzb2x2ZXIgbGluZVJlc29sdmVyKGNvbnN0IFJlbmRlckJsb2NrRmxvdyYgZmxvdywg
Y29uc3QgTGF5b3V0JiBsYXlvdXQpCi17Ci0gICAgcmV0dXJuIExpbmVSZXNvbHZlcihmbG93LCBs
YXlvdXQpOwotfQotCiB9CiB9CiAK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>241509</attachid>
            <date>2014-11-13 15:07:46 -0800</date>
            <delta_ts>2014-11-14 08:20:15 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-138704-20141113150752.patch</filename>
            <type>text/plain</type>
            <size>20950</size>
            <attacher name="alan">zalan</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTc2MDc5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNGQ3MmY3ZTRjMmMxNjc0
NTI4ZDhjNTQxNTMxOTUxODEzN2EwNWI3Mi4uMGE1YmI2YmRmN2E1OWQ4NDBiYzhhOTFiOWEzODFk
NjkxNmNlMWViYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQ1IEBACisyMDE0LTExLTEzICBaYWxh
biBCdWp0YXMgIDx6YWxhbkBhcHBsZS5jb20+CisKKyAgICAgICAgU2ltcGxlIGxpbmUgbGF5b3V0
OiBNb3ZlIHNpbXBsZSBsaW5lIGxheW91dCBSdW5SZXNvbHZlciBhbmQgTGluZVJlc29sdmVyIGlt
cGxlbWVudGF0aW9uIHRvIFNpbXBsZUxpbmVMYXlvdXRSZXNvbHZlci5jcHAKKyAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEzODcwNAorCisgICAgICAgIFJl
dmlld2VkIGJ5IEFudHRpIEtvaXZpc3RvLgorCisgICAgICAgIE5vIGNoYW5nZSBpbiBmdW5jdGlv
bmFsaXR5LgorCisgICAgICAgICogQ01ha2VMaXN0cy50eHQ6CisgICAgICAgICogV2ViQ29yZS52
Y3hwcm9qL1dlYkNvcmUudmN4cHJvajoKKyAgICAgICAgKiBXZWJDb3JlLnZjeHByb2ovV2ViQ29y
ZS52Y3hwcm9qLmZpbHRlcnM6CisgICAgICAgICogV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5w
Ynhwcm9qOgorICAgICAgICAqIHJlbmRlcmluZy9TaW1wbGVMaW5lTGF5b3V0UmVzb2x2ZXIuY3Bw
OiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlNpbXBsZUxpbmVMYXlvdXQ6OlJ1blJlc29sdmVy
OjpSdW46OlJ1bik6CisgICAgICAgIChXZWJDb3JlOjpTaW1wbGVMaW5lTGF5b3V0OjpSdW5SZXNv
bHZlcjo6UnVuOjpyZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OlNpbXBsZUxpbmVMYXlvdXQ6OlJ1
blJlc29sdmVyOjpSdW46OmJhc2VsaW5lKToKKyAgICAgICAgKFdlYkNvcmU6OlNpbXBsZUxpbmVM
YXlvdXQ6OlJ1blJlc29sdmVyOjpSdW46OnRleHQpOgorICAgICAgICAoV2ViQ29yZTo6U2ltcGxl
TGluZUxheW91dDo6UnVuUmVzb2x2ZXI6Okl0ZXJhdG9yOjpJdGVyYXRvcik6CisgICAgICAgIChX
ZWJDb3JlOjpTaW1wbGVMaW5lTGF5b3V0OjpSdW5SZXNvbHZlcjo6SXRlcmF0b3I6OmFkdmFuY2Up
OgorICAgICAgICAoV2ViQ29yZTo6U2ltcGxlTGluZUxheW91dDo6UnVuUmVzb2x2ZXI6Okl0ZXJh
dG9yOjphZHZhbmNlTGluZXMpOgorICAgICAgICAoV2ViQ29yZTo6U2ltcGxlTGluZUxheW91dDo6
UnVuUmVzb2x2ZXI6OlJ1blJlc29sdmVyKToKKyAgICAgICAgKFdlYkNvcmU6OlNpbXBsZUxpbmVM
YXlvdXQ6OlJ1blJlc29sdmVyOjpsaW5lSW5kZXhGb3JIZWlnaHQpOgorICAgICAgICAoV2ViQ29y
ZTo6U2ltcGxlTGluZUxheW91dDo6UnVuUmVzb2x2ZXI6OnJhbmdlRm9yUmVjdCk6CisgICAgICAg
IChXZWJDb3JlOjpTaW1wbGVMaW5lTGF5b3V0OjpMaW5lUmVzb2x2ZXI6Okl0ZXJhdG9yOjpJdGVy
YXRvcik6CisgICAgICAgIChXZWJDb3JlOjpTaW1wbGVMaW5lTGF5b3V0OjpMaW5lUmVzb2x2ZXI6
Okl0ZXJhdG9yOjpvcGVyYXRvciopOgorICAgICAgICAoV2ViQ29yZTo6U2ltcGxlTGluZUxheW91
dDo6TGluZVJlc29sdmVyOjpMaW5lUmVzb2x2ZXIpOgorICAgICAgICAqIHJlbmRlcmluZy9TaW1w
bGVMaW5lTGF5b3V0UmVzb2x2ZXIuaDoKKyAgICAgICAgKFdlYkNvcmU6OlNpbXBsZUxpbmVMYXlv
dXQ6OlJ1blJlc29sdmVyOjpSdW46OlJ1bik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpT
aW1wbGVMaW5lTGF5b3V0OjpSdW5SZXNvbHZlcjo6UnVuOjpyZWN0KTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OlNpbXBsZUxpbmVMYXlvdXQ6OlJ1blJlc29sdmVyOjpSdW46OmJhc2VsaW5l
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlNpbXBsZUxpbmVMYXlvdXQ6OlJ1blJlc29s
dmVyOjpSdW46OnRleHQpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6U2ltcGxlTGluZUxh
eW91dDo6UnVuUmVzb2x2ZXI6Okl0ZXJhdG9yOjpJdGVyYXRvcik6IERlbGV0ZWQuCisgICAgICAg
IChXZWJDb3JlOjpTaW1wbGVMaW5lTGF5b3V0OjpSdW5SZXNvbHZlcjo6SXRlcmF0b3I6OmFkdmFu
Y2UpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6U2ltcGxlTGluZUxheW91dDo6UnVuUmVz
b2x2ZXI6Okl0ZXJhdG9yOjphZHZhbmNlTGluZXMpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29y
ZTo6U2ltcGxlTGluZUxheW91dDo6UnVuUmVzb2x2ZXI6OlJ1blJlc29sdmVyKTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OlNpbXBsZUxpbmVMYXlvdXQ6OlJ1blJlc29sdmVyOjpsaW5lSW5k
ZXhGb3JIZWlnaHQpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6U2ltcGxlTGluZUxheW91
dDo6UnVuUmVzb2x2ZXI6OnJhbmdlRm9yUmVjdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3Jl
OjpTaW1wbGVMaW5lTGF5b3V0OjpMaW5lUmVzb2x2ZXI6Okl0ZXJhdG9yOjpJdGVyYXRvcik6IERl
bGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpTaW1wbGVMaW5lTGF5b3V0OjpMaW5lUmVzb2x2ZXI6
Okl0ZXJhdG9yOjpvcGVyYXRvciopOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6U2ltcGxl
TGluZUxheW91dDo6TGluZVJlc29sdmVyOjpMaW5lUmVzb2x2ZXIpOiBEZWxldGVkLgorCiAyMDE0
LTExLTEzICBKb2FubWFyaWUgRGlnZ3MgIDxqZGlnZ3NAaWdhbGlhLmNvbT4KIAogICAgICAgICBB
WDogW0FUS10gQWNjZXNzaWJsZSBmb2N1cyBldmVudHMgYXJlIGVtaXR0ZWQgd2hlbiB0aGUgc2Vs
ZWN0aW9uIGlzIGNoYW5nZWQgaW4gbm9uLWZvY3VzZWQgY29tYm8gYm94ZXMKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0IGIvU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0
cy50eHQKaW5kZXggMTc2YTBkODI2ZmZhMzQ4MDUyY2YxZWQ4NTRmMjE2MTNjMDU2ZGZmMi4uZjAx
MzRhMGE0ZDBjMTZjM2FmMTA5Y2U4MDZiMzc3MDBiYmIzNTM0MCAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvQ01ha2VMaXN0cy50eHQKKysrIGIvU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0cy50
eHQKQEAgLTIzNTEsNiArMjM1MSw3IEBAIHNldChXZWJDb3JlX1NPVVJDRVMKICAgICByZW5kZXJp
bmcvU2Nyb2xsQmVoYXZpb3IuY3BwCiAgICAgcmVuZGVyaW5nL1NpbXBsZUxpbmVMYXlvdXQuY3Bw
CiAgICAgcmVuZGVyaW5nL1NpbXBsZUxpbmVMYXlvdXRGdW5jdGlvbnMuY3BwCisgICAgcmVuZGVy
aW5nL1NpbXBsZUxpbmVMYXlvdXRSZXNvbHZlci5jcHAKICAgICByZW5kZXJpbmcvVGV4dEF1dG9z
aXplci5jcHAKICAgICByZW5kZXJpbmcvVGV4dFBhaW50U3R5bGUuY3BwCiAgICAgcmVuZGVyaW5n
L1RleHRQYWludGVyLmNwcApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS52Y3hw
cm9qL1dlYkNvcmUudmN4cHJvaiBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUudmN4cHJvai9XZWJD
b3JlLnZjeHByb2oKaW5kZXggYzU5NTg0YzNmYjRlZWZkZmMwNmVmMWZjZjI0NTdhNjVkZjY2NjNj
NC4uNmJlN2JmYWY5OWEzMmI4MGFkZGU0MTg5YWY1MTE4ZTNlZGY1ZTg4OSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvV2ViQ29yZS52Y3hwcm9qL1dlYkNvcmUudmN4cHJvagorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9XZWJDb3JlLnZjeHByb2ovV2ViQ29yZS52Y3hwcm9qCkBAIC0xMTUxMSw2ICsx
MTUxMSw3IEBACiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxyZW5kZXJpbmdcU2VsZWN0aW9u
U3VidHJlZVJvb3QuY3BwIiAvPgogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5ccmVuZGVyaW5n
XFNpbXBsZUxpbmVMYXlvdXQuY3BwIiAvPgogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5ccmVu
ZGVyaW5nXFNpbXBsZUxpbmVMYXlvdXRGdW5jdGlvbnMuY3BwIiAvPgorICAgIDxDbENvbXBpbGUg
SW5jbHVkZT0iLi5ccmVuZGVyaW5nXFNpbXBsZUxpbmVMYXlvdXRSZXNvbHZlci5jcHAiIC8+CiAg
ICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxyZW5kZXJpbmdcVGV4dFBhaW50U3R5bGUuY3BwIiAv
PgogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5ccmVuZGVyaW5nXGxpbmVcTGluZUJyZWFrZXIu
Y3BwIiAvPgogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5ccmVuZGVyaW5nXGxpbmVcTGluZUlu
Zm8uY3BwIiAvPgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS52Y3hwcm9qL1dl
YkNvcmUudmN4cHJvai5maWx0ZXJzIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS52Y3hwcm9qL1dl
YkNvcmUudmN4cHJvai5maWx0ZXJzCmluZGV4IDliMDZhMTVmMTc3M2FhYzhjOWVkNWNhOTQyZDBj
OTM1MmRjMzlkM2QuLjc1NjU4MjZlYTI3N2M1NWRlMmQ2NDZiYzRhOWRjYzA5MjA3Y2RjNWQgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUudmN4cHJvai9XZWJDb3JlLnZjeHByb2ou
ZmlsdGVycworKysgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnZjeHByb2ovV2ViQ29yZS52Y3hw
cm9qLmZpbHRlcnMKQEAgLTY5MzEsNiArNjkzMSw5IEBACiAgICAgPENsQ29tcGlsZSBJbmNsdWRl
PSIuLlxyZW5kZXJpbmdcU2ltcGxlTGluZUxheW91dEZ1bmN0aW9ucy5jcHAiPgogICAgICAgPEZp
bHRlcj5yZW5kZXJpbmc8L0ZpbHRlcj4KICAgICA8L0NsQ29tcGlsZT4KKyAgICA8Q2xDb21waWxl
IEluY2x1ZGU9Ii4uXHJlbmRlcmluZ1xTaW1wbGVMaW5lTGF5b3V0UmVzb2x2ZXIuY3BwIj4KKyAg
ICAgIDxGaWx0ZXI+cmVuZGVyaW5nPC9GaWx0ZXI+CisgICAgPC9DbENvbXBpbGU+CiAgICAgPENs
Q29tcGlsZSBJbmNsdWRlPSIuLlxjc3NcQ1NTR3JpZFRlbXBsYXRlQXJlYXNWYWx1ZS5jcHAiPgog
ICAgICAgPEZpbHRlcj5jc3M8L0ZpbHRlcj4KICAgICA8L0NsQ29tcGlsZT4KZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBiL1NvdXJj
ZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagppbmRleCAwZDczOGYw
NTNhYzhjZWVjZjg1ZDg0ZGEyOTUwNDI1M2NlNGZhNjFjLi42Y2I3NjE5YzEzYzcxZDFhMWI4YTky
MGYyMjk3ZDdkNDgyNGU4OWMxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhj
b2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29k
ZXByb2ovcHJvamVjdC5wYnhwcm9qCkBAIC0yMDU3LDYgKzIwNTcsNyBAQAogCQk1N0I3OTFBNDE0
QzZBNjI5MDBGMjAyRDEgLyogQ29udGVudERpc3RyaWJ1dG9yLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1N0I3OTFBMDE0QzZBNjI5MDBGMjAyRDEgLyog
Q29udGVudERpc3RyaWJ1dG9yLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0
ZSwgKTsgfTsgfTsKIAkJNTdDRjQ5NzQxNEVFMzZENzAwRUNGRjE0IC8qIEluc2VydGlvblBvaW50
LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDU3Q0Y0
OTcyMTRFRTM2RDcwMEVDRkYxNCAvKiBJbnNlcnRpb25Qb2ludC5jcHAgKi87IH07CiAJCTU3Q0Y0
OTc1MTRFRTM2RDcwMEVDRkYxNCAvKiBJbnNlcnRpb25Qb2ludC5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTdDRjQ5NzMxNEVFMzZENzAwRUNGRjE0IC8q
IEluc2VydGlvblBvaW50LmggKi87IH07CisJCTU4NUQ2REZDMUExNTM1NTYwMEZBNEYxMiAvKiBT
aW1wbGVMaW5lTGF5b3V0UmVzb2x2ZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gNTg1RDZERkIxQTE1MzU1NjAwRkE0RjEyIC8qIFNpbXBsZUxpbmVM
YXlvdXRSZXNvbHZlci5jcHAgKi87IH07CiAJCTU4OTU1NkVEMThENEE0NDAwMDc2NEIwMyAvKiBC
b3JkZXJFZGdlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSA1ODk1NTZFQzE4RDRBNDQwMDA3NjRCMDMgLyogQm9yZGVyRWRnZS5oICovOyB9OwogCQk1OEFF
RTJGNDE4RDRCQ0NGMDAyMkU3RkUgLyogQm9yZGVyRWRnZS5jcHAgaW4gU291cmNlcyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1OEFFRTJGMzE4RDRCQ0NGMDAyMkU3RkUgLyog
Qm9yZGVyRWRnZS5jcHAgKi87IH07CiAJCTU4Q0QzNUNCMThFQjRDMzkwMEI5RjNBQyAvKiBGbG9h
dFNpemVIYXNoLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSA1OENEMzVDQTE4RUI0QzM5MDBCOUYzQUMgLyogRmxvYXRTaXplSGFzaC5oICovOyBzZXR0aW5n
cyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CkBAIC05MTcwLDYgKzkxNzEsNyBA
QAogCQk1N0I3OTFBMDE0QzZBNjI5MDBGMjAyRDEgLyogQ29udGVudERpc3RyaWJ1dG9yLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IENvbnRlbnREaXN0cmlidXRvci5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1N0NGNDk3MjE0RUUzNkQ3MDBFQ0ZGMTQgLyogSW5z
ZXJ0aW9uUG9pbnQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSW5z
ZXJ0aW9uUG9pbnQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1N0NGNDk3MzE0
RUUzNkQ3MDBFQ0ZGMTQgLyogSW5zZXJ0aW9uUG9pbnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gSW5zZXJ0aW9uUG9pbnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
KwkJNTg1RDZERkIxQTE1MzU1NjAwRkE0RjEyIC8qIFNpbXBsZUxpbmVMYXlvdXRSZXNvbHZlci5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTaW1wbGVMaW5lTGF5b3V0
UmVzb2x2ZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1ODk1NTZFQzE4RDRB
NDQwMDA3NjRCMDMgLyogQm9yZGVyRWRnZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBCb3JkZXJFZGdlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTU4QUVFMkYz
MThENEJDQ0YwMDIyRTdGRSAvKiBCb3JkZXJFZGdlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLmNwcDsgcGF0aCA9IEJvcmRlckVkZ2UuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQk1OENEMzVDQTE4RUI0QzM5MDBCOUYzQUMgLyogRmxvYXRTaXplSGFzaC5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBGbG9hdFNpemVIYXNoLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CkBAIC0yMjQ3MCw2ICsyMjQ3Miw3IEBACiAJCQkJRTQ4OTQ0QTExODBCNTdE
ODAwRjE2NUQ4IC8qIFNpbXBsZUxpbmVMYXlvdXQuaCAqLywKIAkJCQlFNEU5QjExQTE4MTQ1Njky
MDAzQUNDREYgLyogU2ltcGxlTGluZUxheW91dEZ1bmN0aW9ucy5jcHAgKi8sCiAJCQkJRTRFOUIx
MUMxODE0NTY5QzAwM0FDQ0RGIC8qIFNpbXBsZUxpbmVMYXlvdXRGdW5jdGlvbnMuaCAqLywKKwkJ
CQk1ODVENkRGQjFBMTUzNTU2MDBGQTRGMTIgLyogU2ltcGxlTGluZUxheW91dFJlc29sdmVyLmNw
cCAqLywKIAkJCQlFNEU5QjExODE4MTA5MTZGMDAzQUNDREYgLyogU2ltcGxlTGluZUxheW91dFJl
c29sdmVyLmggKi8sCiAJCQkJQThDRkYwNEMwQTE1NEYwOTAwMEE0MjM0IC8qIFRhYmxlTGF5b3V0
LmggKi8sCiAJCQkJMEY1NERDRTMxODgxMDUxRDAwM0VFREJCIC8qIFRleHRBdXRvU2l6aW5nLmNw
cCAqLywKQEAgLTI4NDExLDYgKzI4NDE0LDcgQEAKIAkJCQlFMUFERUQ0NzBFNzZCOEREMDA0QTFB
NUUgLyogSlNNZXNzYWdlUG9ydEN1c3RvbS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBODY2MjlE
MjA5REEyQjQ4MDA5NjMzQTUgLyogSlNNb3VzZUV2ZW50LmNwcCBpbiBTb3VyY2VzICovLAogCQkJ
CUM2RjQyMEEyMTZCNzE2NEUwMDUyQTlGMiAvKiBKU011dGF0aW9uQ2FsbGJhY2suY3BwIGluIFNv
dXJjZXMgKi8sCisJCQkJNTg1RDZERkMxQTE1MzU1NjAwRkE0RjEyIC8qIFNpbXBsZUxpbmVMYXlv
dXRSZXNvbHZlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk2NURGMzFGQjA5RDFDQzYwMDAwQkUz
MjUgLyogSlNNdXRhdGlvbkV2ZW50LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUM2RjA5MDJDMTQz
MjdENEYwMDY4NTg0OSAvKiBKU011dGF0aW9uT2JzZXJ2ZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJ
CQkJQzZGMDkxN0YxNDNBMkJCOTAwNjg1ODQ5IC8qIEpTTXV0YXRpb25PYnNlcnZlckN1c3RvbS5j
cHAgaW4gU291cmNlcyAqLywKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9T
aW1wbGVMaW5lTGF5b3V0UmVzb2x2ZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Np
bXBsZUxpbmVMYXlvdXRSZXNvbHZlci5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uY2NiNDUyODZkMTgyM2ZmYjZm
Yjc5YzQ2NDY0ZTE3ZjcwMTYzNzI4MgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9TaW1wbGVMaW5lTGF5b3V0UmVzb2x2ZXIuY3BwCkBAIC0wLDAgKzEsMTYxIEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRI
RSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlNpbXBsZUxpbmVM
YXlvdXRSZXNvbHZlci5oIgorCisjaW5jbHVkZSAiUmVuZGVyQmxvY2tGbG93LmgiCisjaW5jbHVk
ZSAiUmVuZGVyVGV4dC5oIgorI2luY2x1ZGUgIlNpbXBsZUxpbmVMYXlvdXRGdW5jdGlvbnMuaCIK
KworbmFtZXNwYWNlIFdlYkNvcmUgeworbmFtZXNwYWNlIFNpbXBsZUxpbmVMYXlvdXQgeworCitS
dW5SZXNvbHZlcjo6UnVuOjpSdW4oY29uc3QgSXRlcmF0b3ImIGl0ZXJhdG9yKQorICAgIDogbV9p
dGVyYXRvcihpdGVyYXRvcikKK3sKK30KKworTGF5b3V0UmVjdCBSdW5SZXNvbHZlcjo6UnVuOjpy
ZWN0KCkgY29uc3QKK3sKKyAgICBhdXRvJiByZXNvbHZlciA9IG1faXRlcmF0b3IucmVzb2x2ZXIo
KTsKKyAgICBhdXRvJiBydW4gPSBtX2l0ZXJhdG9yLnNpbXBsZVJ1bigpOworCisgICAgZmxvYXQg
YmFzZWxpbmVQb3NpdGlvbiA9IHJlc29sdmVyLm1fbGluZUhlaWdodCAqIG1faXRlcmF0b3IubGlu
ZUluZGV4KCkgKyByZXNvbHZlci5tX2Jhc2VsaW5lOworICAgIExheW91dFBvaW50IGxpbmVQb3Np
dGlvbihMYXlvdXRVbml0Ojpmcm9tRmxvYXRGbG9vcihydW4ubG9naWNhbExlZnQpLCByb3VuZFRv
SW50KGJhc2VsaW5lUG9zaXRpb24gLSByZXNvbHZlci5tX2FzY2VudCArIHJlc29sdmVyLm1fYm9y
ZGVyQW5kUGFkZGluZ0JlZm9yZSkpOworICAgIExheW91dFNpemUgbGluZVNpemUoTGF5b3V0VW5p
dDo6ZnJvbUZsb2F0Q2VpbChydW4ubG9naWNhbFJpZ2h0KSAtIExheW91dFVuaXQ6OmZyb21GbG9h
dEZsb29yKHJ1bi5sb2dpY2FsTGVmdCksIHJlc29sdmVyLm1fYXNjZW50ICsgcmVzb2x2ZXIubV9k
ZXNjZW50KTsKKyAgICByZXR1cm4gTGF5b3V0UmVjdChsaW5lUG9zaXRpb24sIGxpbmVTaXplKTsK
K30KKworRmxvYXRQb2ludCBSdW5SZXNvbHZlcjo6UnVuOjpiYXNlbGluZSgpIGNvbnN0Cit7Cisg
ICAgYXV0byYgcmVzb2x2ZXIgPSBtX2l0ZXJhdG9yLnJlc29sdmVyKCk7CisgICAgYXV0byYgcnVu
ID0gbV9pdGVyYXRvci5zaW1wbGVSdW4oKTsKKworICAgIGZsb2F0IGJhc2VsaW5lUG9zaXRpb24g
PSByZXNvbHZlci5tX2xpbmVIZWlnaHQgKiBtX2l0ZXJhdG9yLmxpbmVJbmRleCgpICsgcmVzb2x2
ZXIubV9iYXNlbGluZTsKKyAgICByZXR1cm4gRmxvYXRQb2ludChydW4ubG9naWNhbExlZnQsIHJv
dW5kVG9JbnQoYmFzZWxpbmVQb3NpdGlvbiArIHJlc29sdmVyLm1fYm9yZGVyQW5kUGFkZGluZ0Jl
Zm9yZSkpOworfQorCitTdHJpbmdWaWV3IFJ1blJlc29sdmVyOjpSdW46OnRleHQoKSBjb25zdAor
eworICAgIGF1dG8mIHJlc29sdmVyID0gbV9pdGVyYXRvci5yZXNvbHZlcigpOworICAgIGF1dG8m
IHJ1biA9IG1faXRlcmF0b3Iuc2ltcGxlUnVuKCk7CisgICAgcmV0dXJuIFN0cmluZ1ZpZXcocmVz
b2x2ZXIubV9zdHJpbmcpLnN1YnN0cmluZyhydW4uc3RhcnQsIHJ1bi5lbmQgLSBydW4uc3RhcnQp
OworfQorCitSdW5SZXNvbHZlcjo6SXRlcmF0b3I6Okl0ZXJhdG9yKGNvbnN0IFJ1blJlc29sdmVy
JiByZXNvbHZlciwgdW5zaWduZWQgcnVuSW5kZXgsIHVuc2lnbmVkIGxpbmVJbmRleCkKKyAgICA6
IG1fcmVzb2x2ZXIocmVzb2x2ZXIpCisgICAgLCBtX3J1bkluZGV4KHJ1bkluZGV4KQorICAgICwg
bV9saW5lSW5kZXgobGluZUluZGV4KQoreworfQorCitSdW5SZXNvbHZlcjo6SXRlcmF0b3ImIFJ1
blJlc29sdmVyOjpJdGVyYXRvcjo6YWR2YW5jZSgpCit7CisgICAgaWYgKHNpbXBsZVJ1bigpLmlz
RW5kT2ZMaW5lKQorICAgICAgICArK21fbGluZUluZGV4OworICAgICsrbV9ydW5JbmRleDsKKyAg
ICByZXR1cm4gKnRoaXM7Cit9CisKK1J1blJlc29sdmVyOjpJdGVyYXRvciYgUnVuUmVzb2x2ZXI6
Okl0ZXJhdG9yOjphZHZhbmNlTGluZXModW5zaWduZWQgbGluZUNvdW50KQoreworICAgIHVuc2ln
bmVkIHJ1bkNvdW50ID0gbV9yZXNvbHZlci5tX2xheW91dC5ydW5Db3VudCgpOworICAgIGlmIChy
dW5Db3VudCA9PSBtX3Jlc29sdmVyLm1fbGF5b3V0LmxpbmVDb3VudCgpKSB7CisgICAgICAgIG1f
cnVuSW5kZXggPSBzdGQ6Om1pbihydW5Db3VudCwgbV9ydW5JbmRleCArIGxpbmVDb3VudCk7Cisg
ICAgICAgIG1fbGluZUluZGV4ID0gbV9ydW5JbmRleDsKKyAgICAgICAgcmV0dXJuICp0aGlzOwor
ICAgIH0KKyAgICB1bnNpZ25lZCB0YXJnZXQgPSBtX2xpbmVJbmRleCArIGxpbmVDb3VudDsKKyAg
ICB3aGlsZSAobV9saW5lSW5kZXggPCB0YXJnZXQgJiYgbV9ydW5JbmRleCA8IHJ1bkNvdW50KQor
ICAgICAgICBhZHZhbmNlKCk7CisKKyAgICByZXR1cm4gKnRoaXM7Cit9CisKK1J1blJlc29sdmVy
OjpSdW5SZXNvbHZlcihjb25zdCBSZW5kZXJCbG9ja0Zsb3cmIGZsb3csIGNvbnN0IExheW91dCYg
bGF5b3V0KQorICAgIDogbV9sYXlvdXQobGF5b3V0KQorICAgICwgbV9zdHJpbmcoZG93bmNhc3Q8
UmVuZGVyVGV4dD4oKmZsb3cuZmlyc3RDaGlsZCgpKS50ZXh0KCkpCisgICAgLCBtX2xpbmVIZWln
aHQobGluZUhlaWdodEZyb21GbG93KGZsb3cpKQorICAgICwgbV9iYXNlbGluZShiYXNlbGluZUZy
b21GbG93KGZsb3cpKQorICAgICwgbV9ib3JkZXJBbmRQYWRkaW5nQmVmb3JlKGZsb3cuYm9yZGVy
QW5kUGFkZGluZ0JlZm9yZSgpKQorICAgICwgbV9hc2NlbnQoZmxvdy5zdHlsZSgpLmZvbnQoKS5m
b250TWV0cmljcygpLmFzY2VudCgpKQorICAgICwgbV9kZXNjZW50KGZsb3cuc3R5bGUoKS5mb250
KCkuZm9udE1ldHJpY3MoKS5kZXNjZW50KCkpCit7Cit9CisKK3Vuc2lnbmVkIFJ1blJlc29sdmVy
OjpsaW5lSW5kZXhGb3JIZWlnaHQoTGF5b3V0VW5pdCBoZWlnaHQsIEluZGV4VHlwZSB0eXBlKSBj
b25zdAoreworICAgIEFTU0VSVChtX2xpbmVIZWlnaHQpOworICAgIGZsb2F0IHkgPSBoZWlnaHQg
LSBtX2JvcmRlckFuZFBhZGRpbmdCZWZvcmU7CisgICAgLy8gTGluZXMgbWF5IG92ZXJsYXAsIGFk
anVzdCB0byBnZXQgdGhlIGZpcnN0IG9yIGxhc3QgbGluZSBhdCB0aGlzIGhlaWdodC4KKyAgICBp
ZiAodHlwZSA9PSBJbmRleFR5cGU6OkZpcnN0KQorICAgICAgICB5ICs9IG1fbGluZUhlaWdodCAt
IChtX2Jhc2VsaW5lICsgbV9kZXNjZW50KTsKKyAgICBlbHNlCisgICAgICAgIHkgLT0gbV9iYXNl
bGluZSAtIG1fYXNjZW50OworICAgIHkgPSBzdGQ6Om1heDxmbG9hdD4oeSwgMCk7CisgICAgcmV0
dXJuIHN0ZDo6bWluPHVuc2lnbmVkPih5IC8gbV9saW5lSGVpZ2h0LCBtX2xheW91dC5saW5lQ291
bnQoKSAtIDEpOworfQorCitSYW5nZTxSdW5SZXNvbHZlcjo6SXRlcmF0b3I+IFJ1blJlc29sdmVy
OjpyYW5nZUZvclJlY3QoY29uc3QgTGF5b3V0UmVjdCYgcmVjdCkgY29uc3QKK3sgCisgICAgaWYg
KCFtX2xpbmVIZWlnaHQpCisgICAgICAgIHJldHVybiBSYW5nZTxJdGVyYXRvcj4oYmVnaW4oKSwg
ZW5kKCkpOworCisgICAgdW5zaWduZWQgZmlyc3RMaW5lID0gbGluZUluZGV4Rm9ySGVpZ2h0KHJl
Y3QueSgpLCBJbmRleFR5cGU6OkZpcnN0KTsKKyAgICB1bnNpZ25lZCBsYXN0TGluZSA9IHN0ZDo6
bWF4KGZpcnN0TGluZSwgbGluZUluZGV4Rm9ySGVpZ2h0KHJlY3QubWF4WSgpLCBJbmRleFR5cGU6
Okxhc3QpKTsKKworICAgIGF1dG8gcmFuZ2VCZWdpbiA9IGJlZ2luKCkuYWR2YW5jZUxpbmVzKGZp
cnN0TGluZSk7CisgICAgaWYgKHJhbmdlQmVnaW4gPT0gZW5kKCkpCisgICAgICAgIHJldHVybiBS
YW5nZTxJdGVyYXRvcj4oZW5kKCksIGVuZCgpKTsKKyAgICBhdXRvIHJhbmdlRW5kID0gcmFuZ2VC
ZWdpbjsKKyAgICBBU1NFUlQobGFzdExpbmUgPj0gZmlyc3RMaW5lKTsKKyAgICByYW5nZUVuZC5h
ZHZhbmNlTGluZXMobGFzdExpbmUgLSBmaXJzdExpbmUgKyAxKTsKKyAgICByZXR1cm4gUmFuZ2U8
SXRlcmF0b3I+KHJhbmdlQmVnaW4sIHJhbmdlRW5kKTsKK30KKworTGluZVJlc29sdmVyOjpJdGVy
YXRvcjo6SXRlcmF0b3IoUnVuUmVzb2x2ZXI6Okl0ZXJhdG9yIHJ1bkl0ZXJhdG9yKQorICAgIDog
bV9ydW5JdGVyYXRvcihydW5JdGVyYXRvcikKK3sKK30KKworY29uc3QgTGF5b3V0UmVjdCBMaW5l
UmVzb2x2ZXI6Okl0ZXJhdG9yOjpvcGVyYXRvciooKSBjb25zdAoreworICAgIHVuc2lnbmVkIGN1
cnJlbnRMaW5lID0gbV9ydW5JdGVyYXRvci5saW5lSW5kZXgoKTsKKyAgICBhdXRvIGl0ID0gbV9y
dW5JdGVyYXRvcjsKKyAgICBMYXlvdXRSZWN0IHJlY3QgPSAoKml0KS5yZWN0KCk7CisgICAgd2hp
bGUgKGl0LmFkdmFuY2UoKS5saW5lSW5kZXgoKSA9PSBjdXJyZW50TGluZSkKKyAgICAgICAgcmVj
dC51bml0ZSgoKml0KS5yZWN0KCkpOworCisgICAgcmV0dXJuIHJlY3Q7Cit9CisKK0xpbmVSZXNv
bHZlcjo6TGluZVJlc29sdmVyKGNvbnN0IFJlbmRlckJsb2NrRmxvdyYgZmxvdywgY29uc3QgTGF5
b3V0JiBsYXlvdXQpCisgICAgOiBtX3J1blJlc29sdmVyKGZsb3csIGxheW91dCkKK3sKK30KKwor
fQorfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1NpbXBsZUxpbmVMYXlv
dXRSZXNvbHZlci5oIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1NpbXBsZUxpbmVMYXlvdXRS
ZXNvbHZlci5oCmluZGV4IGJkOTIzYWQwOTIzOTk4NjQxMzIyZDM4NGMwMzA0OTFkNjg4MTFlNzku
LjkyMjczMTllMTdlMGZiNDc0MjU4OWE1NzFkMTJiMzI5NDExNWU1MTYgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9TaW1wbGVMaW5lTGF5b3V0UmVzb2x2ZXIuaAorKysgYi9T
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvU2ltcGxlTGluZUxheW91dFJlc29sdmVyLmgKQEAgLTE0
NywxMSArMTQ3LDYgQEAgcHJpdmF0ZToKIFJ1blJlc29sdmVyIHJ1blJlc29sdmVyKGNvbnN0IFJl
bmRlckJsb2NrRmxvdyYsIGNvbnN0IExheW91dCYpOwogTGluZVJlc29sdmVyIGxpbmVSZXNvbHZl
cihjb25zdCBSZW5kZXJCbG9ja0Zsb3cmLCBjb25zdCBMYXlvdXQmKTsKIAotaW5saW5lIFJ1blJl
c29sdmVyOjpSdW46OlJ1bihjb25zdCBJdGVyYXRvciYgaXRlcmF0b3IpCi0gICAgOiBtX2l0ZXJh
dG9yKGl0ZXJhdG9yKQotewotfQotCiBpbmxpbmUgdW5zaWduZWQgUnVuUmVzb2x2ZXI6OlJ1bjo6
c3RhcnQoKSBjb25zdAogewogICAgIHJldHVybiBtX2l0ZXJhdG9yLnNpbXBsZVJ1bigpLnN0YXJ0
OwpAQCAtMTYyLDQ1ICsxNTcsMTEgQEAgaW5saW5lIHVuc2lnbmVkIFJ1blJlc29sdmVyOjpSdW46
OmVuZCgpIGNvbnN0CiAgICAgcmV0dXJuIG1faXRlcmF0b3Iuc2ltcGxlUnVuKCkuZW5kOwogfQog
Ci1pbmxpbmUgTGF5b3V0UmVjdCBSdW5SZXNvbHZlcjo6UnVuOjpyZWN0KCkgY29uc3QKLXsKLSAg
ICBhdXRvJiByZXNvbHZlciA9IG1faXRlcmF0b3IucmVzb2x2ZXIoKTsKLSAgICBhdXRvJiBydW4g
PSBtX2l0ZXJhdG9yLnNpbXBsZVJ1bigpOwotCi0gICAgZmxvYXQgYmFzZWxpbmVQb3NpdGlvbiA9
IHJlc29sdmVyLm1fbGluZUhlaWdodCAqIG1faXRlcmF0b3IubGluZUluZGV4KCkgKyByZXNvbHZl
ci5tX2Jhc2VsaW5lOwotICAgIExheW91dFBvaW50IGxpbmVQb3NpdGlvbihMYXlvdXRVbml0Ojpm
cm9tRmxvYXRGbG9vcihydW4ubG9naWNhbExlZnQpLCByb3VuZFRvSW50KGJhc2VsaW5lUG9zaXRp
b24gLSByZXNvbHZlci5tX2FzY2VudCArIHJlc29sdmVyLm1fYm9yZGVyQW5kUGFkZGluZ0JlZm9y
ZSkpOwotICAgIExheW91dFNpemUgbGluZVNpemUoTGF5b3V0VW5pdDo6ZnJvbUZsb2F0Q2VpbChy
dW4ubG9naWNhbFJpZ2h0KSAtIExheW91dFVuaXQ6OmZyb21GbG9hdEZsb29yKHJ1bi5sb2dpY2Fs
TGVmdCksIHJlc29sdmVyLm1fYXNjZW50ICsgcmVzb2x2ZXIubV9kZXNjZW50KTsKLSAgICByZXR1
cm4gTGF5b3V0UmVjdChsaW5lUG9zaXRpb24sIGxpbmVTaXplKTsKLX0KLQotaW5saW5lIEZsb2F0
UG9pbnQgUnVuUmVzb2x2ZXI6OlJ1bjo6YmFzZWxpbmUoKSBjb25zdAotewotICAgIGF1dG8mIHJl
c29sdmVyID0gbV9pdGVyYXRvci5yZXNvbHZlcigpOwotICAgIGF1dG8mIHJ1biA9IG1faXRlcmF0
b3Iuc2ltcGxlUnVuKCk7Ci0KLSAgICBmbG9hdCBiYXNlbGluZVBvc2l0aW9uID0gcmVzb2x2ZXIu
bV9saW5lSGVpZ2h0ICogbV9pdGVyYXRvci5saW5lSW5kZXgoKSArIHJlc29sdmVyLm1fYmFzZWxp
bmU7Ci0gICAgcmV0dXJuIEZsb2F0UG9pbnQocnVuLmxvZ2ljYWxMZWZ0LCByb3VuZFRvSW50KGJh
c2VsaW5lUG9zaXRpb24gKyByZXNvbHZlci5tX2JvcmRlckFuZFBhZGRpbmdCZWZvcmUpKTsKLX0K
LQotaW5saW5lIFN0cmluZ1ZpZXcgUnVuUmVzb2x2ZXI6OlJ1bjo6dGV4dCgpIGNvbnN0Ci17Ci0g
ICAgYXV0byYgcmVzb2x2ZXIgPSBtX2l0ZXJhdG9yLnJlc29sdmVyKCk7Ci0gICAgYXV0byYgcnVu
ID0gbV9pdGVyYXRvci5zaW1wbGVSdW4oKTsKLSAgICByZXR1cm4gU3RyaW5nVmlldyhyZXNvbHZl
ci5tX3N0cmluZykuc3Vic3RyaW5nKHJ1bi5zdGFydCwgcnVuLmVuZCAtIHJ1bi5zdGFydCk7Ci19
Ci0KIGlubGluZSB1bnNpZ25lZCBSdW5SZXNvbHZlcjo6UnVuOjpsaW5lSW5kZXgoKSBjb25zdAog
ewogICAgIHJldHVybiBtX2l0ZXJhdG9yLmxpbmVJbmRleCgpOwogfQogCi1pbmxpbmUgUnVuUmVz
b2x2ZXI6Okl0ZXJhdG9yOjpJdGVyYXRvcihjb25zdCBSdW5SZXNvbHZlciYgcmVzb2x2ZXIsIHVu
c2lnbmVkIHJ1bkluZGV4LCB1bnNpZ25lZCBsaW5lSW5kZXgpCi0gICAgOiBtX3Jlc29sdmVyKHJl
c29sdmVyKQotICAgICwgbV9ydW5JbmRleChydW5JbmRleCkKLSAgICAsIG1fbGluZUluZGV4KGxp
bmVJbmRleCkKLXsKLX0KLQogaW5saW5lIFJ1blJlc29sdmVyOjpJdGVyYXRvciYgUnVuUmVzb2x2
ZXI6Okl0ZXJhdG9yOjpvcGVyYXRvcisrKCkKIHsKICAgICByZXR1cm4gYWR2YW5jZSgpOwpAQCAt
MjIyLDQ1ICsxODMsMTEgQEAgaW5saW5lIFJ1blJlc29sdmVyOjpSdW4gUnVuUmVzb2x2ZXI6Okl0
ZXJhdG9yOjpvcGVyYXRvciooKSBjb25zdAogICAgIHJldHVybiBSdW4oKnRoaXMpOwogfQogCi1p
bmxpbmUgUnVuUmVzb2x2ZXI6Okl0ZXJhdG9yJiBSdW5SZXNvbHZlcjo6SXRlcmF0b3I6OmFkdmFu
Y2UoKQotewotICAgIGlmIChzaW1wbGVSdW4oKS5pc0VuZE9mTGluZSkKLSAgICAgICAgKyttX2xp
bmVJbmRleDsKLSAgICArK21fcnVuSW5kZXg7Ci0gICAgcmV0dXJuICp0aGlzOwotfQotCi1pbmxp
bmUgUnVuUmVzb2x2ZXI6Okl0ZXJhdG9yJiBSdW5SZXNvbHZlcjo6SXRlcmF0b3I6OmFkdmFuY2VM
aW5lcyh1bnNpZ25lZCBsaW5lQ291bnQpCi17Ci0gICAgdW5zaWduZWQgcnVuQ291bnQgPSBtX3Jl
c29sdmVyLm1fbGF5b3V0LnJ1bkNvdW50KCk7Ci0gICAgaWYgKHJ1bkNvdW50ID09IG1fcmVzb2x2
ZXIubV9sYXlvdXQubGluZUNvdW50KCkpIHsKLSAgICAgICAgbV9ydW5JbmRleCA9IHN0ZDo6bWlu
KHJ1bkNvdW50LCBtX3J1bkluZGV4ICsgbGluZUNvdW50KTsKLSAgICAgICAgbV9saW5lSW5kZXgg
PSBtX3J1bkluZGV4OwotICAgICAgICByZXR1cm4gKnRoaXM7Ci0gICAgfQotICAgIHVuc2lnbmVk
IHRhcmdldCA9IG1fbGluZUluZGV4ICsgbGluZUNvdW50OwotICAgIHdoaWxlIChtX2xpbmVJbmRl
eCA8IHRhcmdldCAmJiBtX3J1bkluZGV4IDwgcnVuQ291bnQpCi0gICAgICAgIGFkdmFuY2UoKTsK
LQotICAgIHJldHVybiAqdGhpczsKLX0KLQogaW5saW5lIGNvbnN0IFNpbXBsZUxpbmVMYXlvdXQ6
OlJ1biYgUnVuUmVzb2x2ZXI6Okl0ZXJhdG9yOjpzaW1wbGVSdW4oKSBjb25zdAogewogICAgIHJl
dHVybiBtX3Jlc29sdmVyLm1fbGF5b3V0LnJ1bkF0KG1fcnVuSW5kZXgpOwogfQogCi1pbmxpbmUg
UnVuUmVzb2x2ZXI6OlJ1blJlc29sdmVyKGNvbnN0IFJlbmRlckJsb2NrRmxvdyYgZmxvdywgY29u
c3QgTGF5b3V0JiBsYXlvdXQpCi0gICAgOiBtX2xheW91dChsYXlvdXQpCi0gICAgLCBtX3N0cmlu
Zyhkb3duY2FzdDxSZW5kZXJUZXh0PigqZmxvdy5maXJzdENoaWxkKCkpLnRleHQoKSkKLSAgICAs
IG1fbGluZUhlaWdodChsaW5lSGVpZ2h0RnJvbUZsb3coZmxvdykpCi0gICAgLCBtX2Jhc2VsaW5l
KGJhc2VsaW5lRnJvbUZsb3coZmxvdykpCi0gICAgLCBtX2JvcmRlckFuZFBhZGRpbmdCZWZvcmUo
Zmxvdy5ib3JkZXJBbmRQYWRkaW5nQmVmb3JlKCkpCi0gICAgLCBtX2FzY2VudChmbG93LnN0eWxl
KCkuZm9udCgpLmZvbnRNZXRyaWNzKCkuYXNjZW50KCkpCi0gICAgLCBtX2Rlc2NlbnQoZmxvdy5z
dHlsZSgpLmZvbnQoKS5mb250TWV0cmljcygpLmRlc2NlbnQoKSkKLXsKLX0KLQogaW5saW5lIFJ1
blJlc29sdmVyOjpJdGVyYXRvciBSdW5SZXNvbHZlcjo6YmVnaW4oKSBjb25zdAogewogICAgIHJl
dHVybiBJdGVyYXRvcigqdGhpcywgMCwgMCk7CkBAIC0yNzEsNDEgKzE5OCw2IEBAIGlubGluZSBS
dW5SZXNvbHZlcjo6SXRlcmF0b3IgUnVuUmVzb2x2ZXI6OmVuZCgpIGNvbnN0CiAgICAgcmV0dXJu
IEl0ZXJhdG9yKCp0aGlzLCBtX2xheW91dC5ydW5Db3VudCgpLCBtX2xheW91dC5saW5lQ291bnQo
KSk7CiB9CiAKLWlubGluZSB1bnNpZ25lZCBSdW5SZXNvbHZlcjo6bGluZUluZGV4Rm9ySGVpZ2h0
KExheW91dFVuaXQgaGVpZ2h0LCBJbmRleFR5cGUgdHlwZSkgY29uc3QKLXsKLSAgICBBU1NFUlQo
bV9saW5lSGVpZ2h0KTsKLSAgICBmbG9hdCB5ID0gaGVpZ2h0IC0gbV9ib3JkZXJBbmRQYWRkaW5n
QmVmb3JlOwotICAgIC8vIExpbmVzIG1heSBvdmVybGFwLCBhZGp1c3QgdG8gZ2V0IHRoZSBmaXJz
dCBvciBsYXN0IGxpbmUgYXQgdGhpcyBoZWlnaHQuCi0gICAgaWYgKHR5cGUgPT0gSW5kZXhUeXBl
OjpGaXJzdCkKLSAgICAgICAgeSArPSBtX2xpbmVIZWlnaHQgLSAobV9iYXNlbGluZSArIG1fZGVz
Y2VudCk7Ci0gICAgZWxzZQotICAgICAgICB5IC09IG1fYmFzZWxpbmUgLSBtX2FzY2VudDsKLSAg
ICB5ID0gc3RkOjptYXg8ZmxvYXQ+KHksIDApOwotICAgIHJldHVybiBzdGQ6Om1pbjx1bnNpZ25l
ZD4oeSAvIG1fbGluZUhlaWdodCwgbV9sYXlvdXQubGluZUNvdW50KCkgLSAxKTsKLX0KLQotaW5s
aW5lIFJhbmdlPFJ1blJlc29sdmVyOjpJdGVyYXRvcj4gUnVuUmVzb2x2ZXI6OnJhbmdlRm9yUmVj
dChjb25zdCBMYXlvdXRSZWN0JiByZWN0KSBjb25zdAotewotICAgIGlmICghbV9saW5lSGVpZ2h0
KQotICAgICAgICByZXR1cm4gUmFuZ2U8SXRlcmF0b3I+KGJlZ2luKCksIGVuZCgpKTsKLQotICAg
IHVuc2lnbmVkIGZpcnN0TGluZSA9IGxpbmVJbmRleEZvckhlaWdodChyZWN0LnkoKSwgSW5kZXhU
eXBlOjpGaXJzdCk7Ci0gICAgdW5zaWduZWQgbGFzdExpbmUgPSBzdGQ6Om1heChmaXJzdExpbmUs
IGxpbmVJbmRleEZvckhlaWdodChyZWN0Lm1heFkoKSwgSW5kZXhUeXBlOjpMYXN0KSk7Ci0KLSAg
ICBhdXRvIHJhbmdlQmVnaW4gPSBiZWdpbigpLmFkdmFuY2VMaW5lcyhmaXJzdExpbmUpOwotICAg
IGlmIChyYW5nZUJlZ2luID09IGVuZCgpKQotICAgICAgICByZXR1cm4gUmFuZ2U8SXRlcmF0b3I+
KGVuZCgpLCBlbmQoKSk7Ci0gICAgYXV0byByYW5nZUVuZCA9IHJhbmdlQmVnaW47Ci0gICAgQVNT
RVJUKGxhc3RMaW5lID49IGZpcnN0TGluZSk7Ci0gICAgcmFuZ2VFbmQuYWR2YW5jZUxpbmVzKGxh
c3RMaW5lIC0gZmlyc3RMaW5lICsgMSk7Ci0gICAgcmV0dXJuIFJhbmdlPEl0ZXJhdG9yPihyYW5n
ZUJlZ2luLCByYW5nZUVuZCk7Ci19Ci0KLWlubGluZSBMaW5lUmVzb2x2ZXI6Okl0ZXJhdG9yOjpJ
dGVyYXRvcihSdW5SZXNvbHZlcjo6SXRlcmF0b3IgcnVuSXRlcmF0b3IpCi0gICAgOiBtX3J1bkl0
ZXJhdG9yKHJ1bkl0ZXJhdG9yKQotewotfQotCiBpbmxpbmUgTGluZVJlc29sdmVyOjpJdGVyYXRv
ciYgTGluZVJlc29sdmVyOjpJdGVyYXRvcjo6b3BlcmF0b3IrKygpCiB7CiAgICAgbV9ydW5JdGVy
YXRvci5hZHZhbmNlTGluZXMoMSk7CkBAIC0zMjIsMjIgKzIxNCw2IEBAIGlubGluZSBib29sIExp
bmVSZXNvbHZlcjo6SXRlcmF0b3I6Om9wZXJhdG9yIT0oY29uc3QgSXRlcmF0b3ImIG90aGVyKSBj
b25zdAogICAgIHJldHVybiBtX3J1bkl0ZXJhdG9yICE9IG90aGVyLm1fcnVuSXRlcmF0b3I7CiB9
CiAKLWlubGluZSBjb25zdCBMYXlvdXRSZWN0IExpbmVSZXNvbHZlcjo6SXRlcmF0b3I6Om9wZXJh
dG9yKigpIGNvbnN0Ci17Ci0gICAgdW5zaWduZWQgY3VycmVudExpbmUgPSBtX3J1bkl0ZXJhdG9y
LmxpbmVJbmRleCgpOwotICAgIGF1dG8gaXQgPSBtX3J1bkl0ZXJhdG9yOwotICAgIExheW91dFJl
Y3QgcmVjdCA9ICgqaXQpLnJlY3QoKTsKLSAgICB3aGlsZSAoaXQuYWR2YW5jZSgpLmxpbmVJbmRl
eCgpID09IGN1cnJlbnRMaW5lKQotICAgICAgICByZWN0LnVuaXRlKCgqaXQpLnJlY3QoKSk7Ci0K
LSAgICByZXR1cm4gcmVjdDsKLX0KLQotaW5saW5lIExpbmVSZXNvbHZlcjo6TGluZVJlc29sdmVy
KGNvbnN0IFJlbmRlckJsb2NrRmxvdyYgZmxvdywgY29uc3QgTGF5b3V0JiBsYXlvdXQpCi0gICAg
OiBtX3J1blJlc29sdmVyKGZsb3csIGxheW91dCkKLXsKLX0KLQogaW5saW5lIExpbmVSZXNvbHZl
cjo6SXRlcmF0b3IgTGluZVJlc29sdmVyOjpiZWdpbigpIGNvbnN0CiB7CiAgICAgcmV0dXJuIEl0
ZXJhdG9yKG1fcnVuUmVzb2x2ZXIuYmVnaW4oKSk7Cg==
</data>

          </attachment>
      

    </bug>

</bugzilla>