<?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>65396</bug_id>
          
          <creation_ts>2011-07-29 15:01:06 -0700</creation_ts>
          <short_desc>Switch RenderBlock to to new layout types</short_desc>
          <delta_ts>2011-08-09 14:53:03 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Layout and Rendering</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>63567</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Emil A Eklund">eae</reporter>
          <assigned_to name="Emil A Eklund">eae</assigned_to>
          <cc>abarth</cc>
    
    <cc>darin</cc>
    
    <cc>eric</cc>
    
    <cc>leviw</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>444125</commentid>
    <comment_count>0</comment_count>
    <who name="Emil A Eklund">eae</who>
    <bug_when>2011-07-29 15:01:06 -0700</bug_when>
    <thetext>Convert RenderBlock to new layout abstraction.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>444135</commentid>
    <comment_count>1</comment_count>
      <attachid>102403</attachid>
    <who name="Emil A Eklund">eae</who>
    <bug_when>2011-07-29 15:11:21 -0700</bug_when>
    <thetext>Created attachment 102403
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>444302</commentid>
    <comment_count>2</comment_count>
      <attachid>102403</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2011-07-30 11:01:52 -0700</bug_when>
    <thetext>Comment on attachment 102403
Patch

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

No EWS because the patch doesn’t apply.

I suggest putting in a patch that only adds the new typedef and is entirely mechanical, and leaving the part that introduces new functions as a separate far smaller patch.

&gt; Source/WebCore/platform/graphics/IntRect.cpp:142
&gt; +IntRect enclosingIntRect(const IntRect&amp; rect)
&gt; +{
&gt; +    return IntRect(rect);
&gt; +}

This must be inlined in the header. We do not want to pay a function call to convert an IntRect to an IntRect.

&gt; Source/WebCore/rendering/LayoutTypes.h:89
&gt; +inline bool layoutUnitEquals(LayoutUnit a, LayoutUnit b)

If the idea here is to use a definition that involves epsilon, then I think you need a different name. After all, == does not use epsilon, so the name &quot;equal&quot; is already taken.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>444817</commentid>
    <comment_count>3</comment_count>
      <attachid>102546</attachid>
    <who name="Emil A Eklund">eae</who>
    <bug_when>2011-08-01 13:12:13 -0700</bug_when>
    <thetext>Created attachment 102546
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>444819</commentid>
    <comment_count>4</comment_count>
    <who name="Emil A Eklund">eae</who>
    <bug_when>2011-08-01 13:12:37 -0700</bug_when>
    <thetext>Thanks Darin, made the changes you suggested. Please take another look.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>448038</commentid>
    <comment_count>5</comment_count>
      <attachid>102546</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2011-08-08 09:28:01 -0700</bug_when>
    <thetext>Comment on attachment 102546
Patch

LGTM.  You may want to let Darin take another look too.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>448240</commentid>
    <comment_count>6</comment_count>
    <who name="Emil A Eklund">eae</who>
    <bug_when>2011-08-08 13:38:53 -0700</bug_when>
    <thetext>Thanks Eric,

I&apos;ll hold of landing this for another day or so to give Darin a chance to look at it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>448823</commentid>
    <comment_count>7</comment_count>
      <attachid>102546</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-08-09 14:52:54 -0700</bug_when>
    <thetext>Comment on attachment 102546
Patch

Clearing flags on attachment: 102546

Committed r92712: &lt;http://trac.webkit.org/changeset/92712&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>448824</commentid>
    <comment_count>8</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-08-09 14:53:03 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>102403</attachid>
            <date>2011-07-29 15:11:21 -0700</date>
            <delta_ts>2011-08-01 13:12:10 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-65396-20110729151120.patch</filename>
            <type>text/plain</type>
            <size>39853</size>
            <attacher name="Emil A Eklund">eae</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDkyMDE2KQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsNTIgQEAKKzIwMTEtMDctMjkgIEVtaWwgQSBF
a2x1bmQgIDxlYWVAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFN3aXRjaCBSZW5kZXJCbG9jayB0
byB0byBuZXcgbGF5b3V0IHR5cGVzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD02NTM5NgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEp
LgorCisgICAgICAgIE5vIG5ldyB0ZXN0cywgbm8gbmV3IGZ1bmN0aW9uYWxpdHkuCisKKyAgICAg
ICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9JbnRSZWN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmVu
Y2xvc2luZ0ludFJlY3QpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0ludFJlY3QuaDoK
KyAgICAgICAgQWRkIG5vLW9wIEludFJlY3QgdmVyc2lvbiBvZiBlbmNsb3NpbmdJbnRSZWN0Lgor
ICAgICAgICAKKyAgICAgICAgKiByZW5kZXJpbmcvTGF5b3V0VHlwZXMuaDoKKyAgICAgICAgKFdl
YkNvcmU6OmxheW91dFVuaXRFcXVhbHMpOgorICAgICAgICBBZGQgbGF5b3V0VW5pdEVxdWFscyBm
b3IgY29tcGFyaW5nIGxheW91dCB2YWx1ZXMuIEZsb2F0IGltcGxlbWVudGF0aW9uCisgICAgICAg
IHdpbGwgdXNlIGVwc2lsb24uCisgICAgICAgIAorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJC
bG9jay5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9jazo6TWFyZ2luSW5mbzo6TWFy
Z2luSW5mbyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9jazo6bGF5b3V0QmxvY2spOgor
ICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQmxvY2s6OmFkZE92ZXJmbG93RnJvbUNoaWxkcmVuKToK
KyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrOjpjb21wdXRlT3ZlcmZsb3cpOgorICAgICAg
ICAoV2ViQ29yZTo6UmVuZGVyQmxvY2s6OmFkanVzdFBvc2l0aW9uZWRCbG9jayk6CisgICAgICAg
IChXZWJDb3JlOjpSZW5kZXJCbG9jazo6YWRqdXN0RmxvYXRpbmdCbG9jayk6CisgICAgICAgIChX
ZWJDb3JlOjpSZW5kZXJCbG9jazo6Y29sbGFwc2VNYXJnaW5zKToKKyAgICAgICAgKFdlYkNvcmU6
OlJlbmRlckJsb2NrOjpjbGVhckZsb2F0c0lmTmVlZGVkKToKKyAgICAgICAgKFdlYkNvcmU6OlJl
bmRlckJsb2NrOjplc3RpbWF0ZUxvZ2ljYWxUb3BQb3NpdGlvbik6CisgICAgICAgIChXZWJDb3Jl
OjpSZW5kZXJCbG9jazo6ZGV0ZXJtaW5lTG9naWNhbExlZnRQb3NpdGlvbkZvckNoaWxkKToKKyAg
ICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrOjpzZXRMb2dpY2FsTGVmdEZvckNoaWxkKToKKyAg
ICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrOjpzZXRMb2dpY2FsVG9wRm9yQ2hpbGQpOgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyQmxvY2s6OmxheW91dEJsb2NrQ2hpbGRyZW4pOgorICAgICAg
ICAoV2ViQ29yZTo6UmVuZGVyQmxvY2s6OmxheW91dEJsb2NrQ2hpbGQpOgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyQmxvY2s6OnBhaW50KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2Nr
OjpmbGlwRmxvYXRGb3JXcml0aW5nTW9kZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9j
azo6aXNQb2ludEluT3ZlcmZsb3dDb250cm9sKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJs
b2NrOjpoaXRUZXN0RmxvYXRzKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyQmxvY2suaDoK
KyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrOjpsb2dpY2FsVG9wRm9yRmxvYXQpOgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyQmxvY2s6OmxvZ2ljYWxCb3R0b21Gb3JGbG9hdCk6CisgICAg
ICAgIChXZWJDb3JlOjpSZW5kZXJCbG9jazo6bG9naWNhbExlZnRGb3JGbG9hdCk6CisgICAgICAg
IChXZWJDb3JlOjpSZW5kZXJCbG9jazo6bG9naWNhbFJpZ2h0Rm9yRmxvYXQpOgorICAgICAgICAo
V2ViQ29yZTo6UmVuZGVyQmxvY2s6OmxvZ2ljYWxXaWR0aEZvckZsb2F0KToKKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlckJsb2NrOjpzZXRMb2dpY2FsVG9wRm9yRmxvYXQpOgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyQmxvY2s6OnNldExvZ2ljYWxMZWZ0Rm9yRmxvYXQpOgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyQmxvY2s6OnNldExvZ2ljYWxIZWlnaHRGb3JGbG9hdCk6CisgICAgICAgIChX
ZWJDb3JlOjpSZW5kZXJCbG9jazo6c2V0TG9naWNhbFdpZHRoRm9yRmxvYXQpOgorCiAyMDExLTA3
LTI5ICBTYW0gV2VpbmlnICA8c2FtQHdlYmtpdC5vcmc+CiAKICAgICAgICAgTW92ZSBSZWdpb24g
Y29kZSBmcm9tIFdlYktpdDIgdG8gV2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvSW50UmVjdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvSW50UmVjdC5jcHAJKHJldmlzaW9uIDkxOTQ2KQorKysgU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvSW50UmVjdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEz
Niw0ICsxMzYsOSBAQCBJbnRSZWN0IHVuaW9uUmVjdChjb25zdCBWZWN0b3I8SW50UmVjdD4mCiAg
ICAgcmV0dXJuIHJlc3VsdDsKIH0KIAorSW50UmVjdCBlbmNsb3NpbmdJbnRSZWN0KGNvbnN0IElu
dFJlY3QmIHJlY3QpCit7CisgICAgcmV0dXJuIEludFJlY3QocmVjdCk7Cit9CisKIH0gLy8gbmFt
ZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0lu
dFJlY3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9J
bnRSZWN0LmgJKHJldmlzaW9uIDkxOTQ2KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvSW50UmVjdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNDgsNiArMjQ4LDggQEAgaW5saW5l
IGJvb2wgb3BlcmF0b3IhPShjb25zdCBJbnRSZWN0JiBhLAogICAgIHJldHVybiBhLmxvY2F0aW9u
KCkgIT0gYi5sb2NhdGlvbigpIHx8IGEuc2l6ZSgpICE9IGIuc2l6ZSgpOwogfQogCitJbnRSZWN0
IGVuY2xvc2luZ0ludFJlY3QoY29uc3QgSW50UmVjdCYpOworCiAjaWYgVVNFKENHKSB8fCBVU0Uo
U0tJQV9PTl9NQUNfQ0hST01JVU0pCiBJbnRSZWN0IGVuY2xvc2luZ0ludFJlY3QoY29uc3QgQ0dS
ZWN0Jik7CiAjZW5kaWYKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9MYXlvdXRUeXBl
cy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9MYXlvdXRUeXBlcy5o
CShyZXZpc2lvbiA5MTk0NikKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9MYXlvdXRUeXBl
cy5oCSh3b3JraW5nIGNvcHkpCkBAIC04Niw2ICs4NiwxMSBAQCBpbmxpbmUgTGF5b3V0UG9pbnQg
dG9MYXlvdXRQb2ludChjb25zdCBMCiAgICAgcmV0dXJuIExheW91dFBvaW50KHAud2lkdGgoKSwg
cC5oZWlnaHQoKSk7CiB9CiAKK2lubGluZSBib29sIGxheW91dFVuaXRFcXVhbHMoTGF5b3V0VW5p
dCBhLCBMYXlvdXRVbml0IGIpCit7CisgICAgcmV0dXJuIGEgPT0gYjsKK30KKwogfSAvLyBuYW1l
c3BhY2UgV2ViQ29yZQogCiAjZW5kaWYgLy8gTGF5b3V0VHlwZXNfaApJbmRleDogU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2suY3BwCShyZXZpc2lvbiA5MTk0NikKKysrIFNvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9jay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTgx
LDcgKzgxLDcgQEAgc3RhdGljIERlbGF5ZWRVcGRhdGVTY3JvbGxJbmZvU2V0KiBnRGVsYQogYm9v
bCBSZW5kZXJCbG9jazo6c19jYW5Qcm9wYWdhdGVGbG9hdEludG9TaWJsaW5nID0gZmFsc2U7CiAK
IC8vIE91ciBNYXJnaW5JbmZvIHN0YXRlIHVzZWQgd2hlbiBsYXlpbmcgb3V0IGJsb2NrIGNoaWxk
cmVuLgotUmVuZGVyQmxvY2s6Ok1hcmdpbkluZm86Ok1hcmdpbkluZm8oUmVuZGVyQmxvY2sqIGJs
b2NrLCBpbnQgYmVmb3JlQm9yZGVyUGFkZGluZywgaW50IGFmdGVyQm9yZGVyUGFkZGluZykKK1Jl
bmRlckJsb2NrOjpNYXJnaW5JbmZvOjpNYXJnaW5JbmZvKFJlbmRlckJsb2NrKiBibG9jaywgTGF5
b3V0VW5pdCBiZWZvcmVCb3JkZXJQYWRkaW5nLCBMYXlvdXRVbml0IGFmdGVyQm9yZGVyUGFkZGlu
ZykKICAgICA6IG1fYXRCZWZvcmVTaWRlT2ZCbG9jayh0cnVlKQogICAgICwgbV9hdEFmdGVyU2lk
ZU9mQmxvY2soZmFsc2UpCiAgICAgLCBtX21hcmdpbkJlZm9yZVF1aXJrKGZhbHNlKQpAQCAtMTE2
NSw3ICsxMTY1LDcgQEAgdm9pZCBSZW5kZXJCbG9jazo6bGF5b3V0KCkKICAgICAgICAgY2xlYXJM
YXlvdXRPdmVyZmxvdygpOwogfQogCi12b2lkIFJlbmRlckJsb2NrOjpsYXlvdXRCbG9jayhib29s
IHJlbGF5b3V0Q2hpbGRyZW4sIGludCBwYWdlTG9naWNhbEhlaWdodCkKK3ZvaWQgUmVuZGVyQmxv
Y2s6OmxheW91dEJsb2NrKGJvb2wgcmVsYXlvdXRDaGlsZHJlbiwgTGF5b3V0VW5pdCBwYWdlTG9n
aWNhbEhlaWdodCkKIHsKICAgICBBU1NFUlQobmVlZHNMYXlvdXQoKSk7CiAKQEAgLTExNzcsOCAr
MTE3Nyw4IEBAIHZvaWQgUmVuZGVyQmxvY2s6OmxheW91dEJsb2NrKGJvb2wgcmVsYXkKIAogICAg
IExheW91dFJlcGFpbnRlciByZXBhaW50ZXIoKnRoaXMsIG1fZXZlckhhZExheW91dCAmJiBjaGVj
a0ZvclJlcGFpbnREdXJpbmdMYXlvdXQoKSk7CiAKLSAgICBpbnQgb2xkV2lkdGggPSBsb2dpY2Fs
V2lkdGgoKTsKLSAgICBpbnQgb2xkQ29sdW1uV2lkdGggPSBkZXNpcmVkQ29sdW1uV2lkdGgoKTsK
KyAgICBMYXlvdXRVbml0IG9sZFdpZHRoID0gbG9naWNhbFdpZHRoKCk7CisgICAgTGF5b3V0VW5p
dCBvbGRDb2x1bW5XaWR0aCA9IGRlc2lyZWRDb2x1bW5XaWR0aCgpOwogCiAgICAgY29tcHV0ZUxv
Z2ljYWxXaWR0aCgpOwogICAgIGNhbGNDb2x1bW5XaWR0aCgpOwpAQCAtMTE5MCw3ICsxMTkwLDcg
QEAgdm9pZCBSZW5kZXJCbG9jazo6bGF5b3V0QmxvY2soYm9vbCByZWxheQogCiAgICAgY2xlYXJG
bG9hdHMoKTsKIAotICAgIGludCBwcmV2aW91c0hlaWdodCA9IGxvZ2ljYWxIZWlnaHQoKTsKKyAg
ICBMYXlvdXRVbml0IHByZXZpb3VzSGVpZ2h0ID0gbG9naWNhbEhlaWdodCgpOwogICAgIHNldExv
Z2ljYWxIZWlnaHQoMCk7CiAgICAgYm9vbCBoYXNTcGVjaWZpZWRQYWdlTG9naWNhbEhlaWdodCA9
IGZhbHNlOwogICAgIGJvb2wgcGFnZUxvZ2ljYWxIZWlnaHRDaGFuZ2VkID0gZmFsc2U7CkBAIC0x
MjUzLDkgKzEyNTMsOSBAQCB2b2lkIFJlbmRlckJsb2NrOjpsYXlvdXRCbG9jayhib29sIHJlbGF5
CiAgICAgICAgICAgICBsYXllcigpLT5zZXRIYXNWZXJ0aWNhbFNjcm9sbGJhcih0cnVlKTsKICAg
ICB9CiAKLSAgICBpbnQgcmVwYWludExvZ2ljYWxUb3AgPSAwOwotICAgIGludCByZXBhaW50TG9n
aWNhbEJvdHRvbSA9IDA7Ci0gICAgaW50IG1heEZsb2F0TG9naWNhbEJvdHRvbSA9IDA7CisgICAg
TGF5b3V0VW5pdCByZXBhaW50TG9naWNhbFRvcCA9IDA7CisgICAgTGF5b3V0VW5pdCByZXBhaW50
TG9naWNhbEJvdHRvbSA9IDA7CisgICAgTGF5b3V0VW5pdCBtYXhGbG9hdExvZ2ljYWxCb3R0b20g
PSAwOwogICAgIGlmICghZmlyc3RDaGlsZCgpICYmICFpc0Fub255bW91c0Jsb2NrKCkpCiAgICAg
ICAgIHNldENoaWxkcmVuSW5saW5lKHRydWUpOwogICAgIGlmIChjaGlsZHJlbklubGluZSgpKQpA
QCAtMTI2NCw3ICsxMjY0LDcgQEAgdm9pZCBSZW5kZXJCbG9jazo6bGF5b3V0QmxvY2soYm9vbCBy
ZWxheQogICAgICAgICBsYXlvdXRCbG9ja0NoaWxkcmVuKHJlbGF5b3V0Q2hpbGRyZW4sIG1heEZs
b2F0TG9naWNhbEJvdHRvbSk7CiAKICAgICAvLyBFeHBhbmQgb3VyIGludHJpbnNpYyBoZWlnaHQg
dG8gZW5jb21wYXNzIGZsb2F0cy4KLSAgICBpbnQgdG9BZGQgPSBib3JkZXJBZnRlcigpICsgcGFk
ZGluZ0FmdGVyKCkgKyBzY3JvbGxiYXJMb2dpY2FsSGVpZ2h0KCk7CisgICAgTGF5b3V0VW5pdCB0
b0FkZCA9IGJvcmRlckFmdGVyKCkgKyBwYWRkaW5nQWZ0ZXIoKSArIHNjcm9sbGJhckxvZ2ljYWxI
ZWlnaHQoKTsKICAgICBpZiAobG93ZXN0RmxvYXRMb2dpY2FsQm90dG9tKCkgPiAobG9naWNhbEhl
aWdodCgpIC0gdG9BZGQpICYmIGV4cGFuZHNUb0VuY2xvc2VPdmVyaGFuZ2luZ0Zsb2F0cygpKQog
ICAgICAgICBzZXRMb2dpY2FsSGVpZ2h0KGxvd2VzdEZsb2F0TG9naWNhbEJvdHRvbSgpICsgdG9B
ZGQpOwogICAgIApAQCAtMTI3MiwxMCArMTI3MiwxMCBAQCB2b2lkIFJlbmRlckJsb2NrOjpsYXlv
dXRCbG9jayhib29sIHJlbGF5CiAgICAgICAgIHJldHVybjsKICAKICAgICAvLyBDYWxjdWxhdGUg
b3VyIG5ldyBoZWlnaHQuCi0gICAgaW50IG9sZEhlaWdodCA9IGxvZ2ljYWxIZWlnaHQoKTsKLSAg
ICBpbnQgb2xkQ2xpZW50QWZ0ZXJFZGdlID0gY2xpZW50TG9naWNhbEJvdHRvbSgpOworICAgIExh
eW91dFVuaXQgb2xkSGVpZ2h0ID0gbG9naWNhbEhlaWdodCgpOworICAgIExheW91dFVuaXQgb2xk
Q2xpZW50QWZ0ZXJFZGdlID0gY2xpZW50TG9naWNhbEJvdHRvbSgpOwogICAgIGNvbXB1dGVMb2dp
Y2FsSGVpZ2h0KCk7Ci0gICAgaW50IG5ld0hlaWdodCA9IGxvZ2ljYWxIZWlnaHQoKTsKKyAgICBM
YXlvdXRVbml0IG5ld0hlaWdodCA9IGxvZ2ljYWxIZWlnaHQoKTsKICAgICBpZiAob2xkSGVpZ2h0
ICE9IG5ld0hlaWdodCkgewogICAgICAgICBpZiAob2xkSGVpZ2h0ID4gbmV3SGVpZ2h0ICYmIG1h
eEZsb2F0TG9naWNhbEJvdHRvbSA+IG5ld0hlaWdodCAmJiAhY2hpbGRyZW5JbmxpbmUoKSkgewog
ICAgICAgICAgICAgLy8gT25lIG9mIG91ciBjaGlsZHJlbidzIGZsb2F0cyBtYXkgaGF2ZSBiZWNv
bWUgYW4gb3ZlcmhhbmdpbmcgZmxvYXQgZm9yIHVzLiBXZSBuZWVkIHRvIGxvb2sgZm9yIGl0LgpA
QCAtMTMxNCw4ICsxMzE0LDggQEAgdm9pZCBSZW5kZXJCbG9jazo6bGF5b3V0QmxvY2soYm9vbCBy
ZWxheQogICAgIGlmICghZGlkRnVsbFJlcGFpbnQgJiYgcmVwYWludExvZ2ljYWxUb3AgIT0gcmVw
YWludExvZ2ljYWxCb3R0b20gJiYgKHN0eWxlKCktPnZpc2liaWxpdHkoKSA9PSBWSVNJQkxFIHx8
IGVuY2xvc2luZ0xheWVyKCktPmhhc1Zpc2libGVDb250ZW50KCkpKSB7CiAgICAgICAgIC8vIEZJ
WE1FOiBXZSBjb3VsZCB0aWdodGVuIHVwIHRoZSBsZWZ0IGFuZCByaWdodCBpbnZhbGlkYXRpb24g
cG9pbnRzIGlmIHdlIGxldCBsYXlvdXRJbmxpbmVDaGlsZHJlbiBmaWxsIHRoZW0gaW4gYmFzZWQg
b2ZmIHRoZSBwYXJ0aWN1bGFyIGxpbmVzCiAgICAgICAgIC8vIGl0IGhhZCB0byBsYXkgb3V0LiAg
V2Ugd291bGRuJ3QgbmVlZCB0aGUgaGFzT3ZlcmZsb3dDbGlwKCkgaGFjayBpbiB0aGF0IGNhc2Ug
ZWl0aGVyLgotICAgICAgICBpbnQgcmVwYWludExvZ2ljYWxMZWZ0ID0gbG9naWNhbExlZnRWaXN1
YWxPdmVyZmxvdygpOwotICAgICAgICBpbnQgcmVwYWludExvZ2ljYWxSaWdodCA9IGxvZ2ljYWxS
aWdodFZpc3VhbE92ZXJmbG93KCk7CisgICAgICAgIExheW91dFVuaXQgcmVwYWludExvZ2ljYWxM
ZWZ0ID0gbG9naWNhbExlZnRWaXN1YWxPdmVyZmxvdygpOworICAgICAgICBMYXlvdXRVbml0IHJl
cGFpbnRMb2dpY2FsUmlnaHQgPSBsb2dpY2FsUmlnaHRWaXN1YWxPdmVyZmxvdygpOwogICAgICAg
ICBpZiAoaGFzT3ZlcmZsb3dDbGlwKCkpIHsKICAgICAgICAgICAgIC8vIElmIHdlIGhhdmUgY2xp
cHBlZCBvdmVyZmxvdywgd2Ugc2hvdWxkIHVzZSBsYXlvdXQgb3ZlcmZsb3cgYXMgd2VsbCwgc2lu
Y2UgdmlzdWFsIG92ZXJmbG93IGZyb20gbGluZXMgZGlkbid0IHByb3BhZ2F0ZSB0byBvdXIgYmxv
Y2sncyBvdmVyZmxvdy4KICAgICAgICAgICAgIC8vIE5vdGUgdGhlIG9sZCBjb2RlIGRpZCB0aGlz
IGFzIHdlbGwgYnV0IGV2ZW4gZm9yIG92ZXJmbG93OnZpc2libGUuICBUaGUgYWRkaXRpb24gb2Yg
aGFzT3ZlcmZsb3dDbGlwKCkgYXQgbGVhc3QgdGlnaHRlbnMgdXAgdGhlIGhhY2sgYSBiaXQuCkBA
IC0xMzI0LDExICsxMzI0LDExIEBAIHZvaWQgUmVuZGVyQmxvY2s6OmxheW91dEJsb2NrKGJvb2wg
cmVsYXkKICAgICAgICAgICAgIHJlcGFpbnRMb2dpY2FsUmlnaHQgPSBtYXgocmVwYWludExvZ2lj
YWxSaWdodCwgbG9naWNhbFJpZ2h0TGF5b3V0T3ZlcmZsb3coKSk7CiAgICAgICAgIH0KICAgICAg
ICAgCi0gICAgICAgIEludFJlY3QgcmVwYWludFJlY3Q7CisgICAgICAgIExheW91dFJlY3QgcmVw
YWludFJlY3Q7CiAgICAgICAgIGlmIChpc0hvcml6b250YWxXcml0aW5nTW9kZSgpKQotICAgICAg
ICAgICAgcmVwYWludFJlY3QgPSBJbnRSZWN0KHJlcGFpbnRMb2dpY2FsTGVmdCwgcmVwYWludExv
Z2ljYWxUb3AsIHJlcGFpbnRMb2dpY2FsUmlnaHQgLSByZXBhaW50TG9naWNhbExlZnQsIHJlcGFp
bnRMb2dpY2FsQm90dG9tIC0gcmVwYWludExvZ2ljYWxUb3ApOworICAgICAgICAgICAgcmVwYWlu
dFJlY3QgPSBMYXlvdXRSZWN0KHJlcGFpbnRMb2dpY2FsTGVmdCwgcmVwYWludExvZ2ljYWxUb3As
IHJlcGFpbnRMb2dpY2FsUmlnaHQgLSByZXBhaW50TG9naWNhbExlZnQsIHJlcGFpbnRMb2dpY2Fs
Qm90dG9tIC0gcmVwYWludExvZ2ljYWxUb3ApOwogICAgICAgICBlbHNlCi0gICAgICAgICAgICBy
ZXBhaW50UmVjdCA9IEludFJlY3QocmVwYWludExvZ2ljYWxUb3AsIHJlcGFpbnRMb2dpY2FsTGVm
dCwgcmVwYWludExvZ2ljYWxCb3R0b20gLSByZXBhaW50TG9naWNhbFRvcCwgcmVwYWludExvZ2lj
YWxSaWdodCAtIHJlcGFpbnRMb2dpY2FsTGVmdCk7CisgICAgICAgICAgICByZXBhaW50UmVjdCA9
IExheW91dFJlY3QocmVwYWludExvZ2ljYWxUb3AsIHJlcGFpbnRMb2dpY2FsTGVmdCwgcmVwYWlu
dExvZ2ljYWxCb3R0b20gLSByZXBhaW50TG9naWNhbFRvcCwgcmVwYWludExvZ2ljYWxSaWdodCAt
IHJlcGFpbnRMb2dpY2FsTGVmdCk7CiAKICAgICAgICAgLy8gVGhlIHJlcGFpbnQgcmVjdCBtYXkg
YmUgc3BsaXQgYWNyb3NzIGNvbHVtbnMsIGluIHdoaWNoIGNhc2UgYWRqdXN0UmVjdEZvckNvbHVt
bnMoKSB3aWxsIHJldHVybiB0aGUgdW5pb24uCiAgICAgICAgIGFkanVzdFJlY3RGb3JDb2x1bW5z
KHJlcGFpbnRSZWN0KTsKQEAgLTEzNDUsOSArMTM0NSw5IEBAIHZvaWQgUmVuZGVyQmxvY2s6Omxh
eW91dEJsb2NrKGJvb2wgcmVsYXkKIAogICAgICAgICAvLyBNYWtlIHN1cmUgdGhlIHJlY3QgaXMg
c3RpbGwgbm9uLWVtcHR5IGFmdGVyIGludGVyc2VjdGluZyBmb3Igb3ZlcmZsb3cgYWJvdmUKICAg
ICAgICAgaWYgKCFyZXBhaW50UmVjdC5pc0VtcHR5KCkpIHsKLSAgICAgICAgICAgIHJlcGFpbnRS
ZWN0YW5nbGUocmVwYWludFJlY3QpOyAvLyBXZSBuZWVkIHRvIGRvIGEgcGFydGlhbCByZXBhaW50
IG9mIG91ciBjb250ZW50LgorICAgICAgICAgICAgcmVwYWludFJlY3RhbmdsZShlbmNsb3NpbmdJ
bnRSZWN0KHJlcGFpbnRSZWN0KSk7IC8vIFdlIG5lZWQgdG8gZG8gYSBwYXJ0aWFsIHJlcGFpbnQg
b2Ygb3VyIGNvbnRlbnQuCiAgICAgICAgICAgICBpZiAoaGFzUmVmbGVjdGlvbigpKQotICAgICAg
ICAgICAgICAgIHJlcGFpbnRSZWN0YW5nbGUocmVmbGVjdGVkUmVjdChyZXBhaW50UmVjdCkpOwor
ICAgICAgICAgICAgICAgIHJlcGFpbnRSZWN0YW5nbGUoZW5jbG9zaW5nSW50UmVjdChyZWZsZWN0
ZWRSZWN0KHJlcGFpbnRSZWN0KSkpOwogICAgICAgICB9CiAgICAgfQogICAgIHNldE5lZWRzTGF5
b3V0KGZhbHNlKTsKQEAgLTEzNjUsMjYgKzEzNjUsMjYgQEAgdm9pZCBSZW5kZXJCbG9jazo6YWRk
T3ZlcmZsb3dGcm9tQ2hpbGRyZQogICAgICAgICBpZiAoY29sdW1uQ291bnQoY29sSW5mbykpIHsK
ICAgICAgICAgICAgIExheW91dFJlY3QgbGFzdFJlY3QgPSBjb2x1bW5SZWN0QXQoY29sSW5mbywg
Y29sdW1uQ291bnQoY29sSW5mbykgLSAxKTsKICAgICAgICAgICAgIGlmIChpc0hvcml6b250YWxX
cml0aW5nTW9kZSgpKSB7Ci0gICAgICAgICAgICAgICAgaW50IG92ZXJmbG93TGVmdCA9ICFzdHls
ZSgpLT5pc0xlZnRUb1JpZ2h0RGlyZWN0aW9uKCkgPyBtaW4oMCwgbGFzdFJlY3QueCgpKSA6IDA7
Ci0gICAgICAgICAgICAgICAgaW50IG92ZXJmbG93UmlnaHQgPSBzdHlsZSgpLT5pc0xlZnRUb1Jp
Z2h0RGlyZWN0aW9uKCkgPyBtYXgod2lkdGgoKSwgbGFzdFJlY3QubWF4WCgpKSA6IDA7Ci0gICAg
ICAgICAgICAgICAgaW50IG92ZXJmbG93SGVpZ2h0ID0gYm9yZGVyQmVmb3JlKCkgKyBwYWRkaW5n
QmVmb3JlKCkgKyBjb2xJbmZvLT5jb2x1bW5IZWlnaHQoKTsKLSAgICAgICAgICAgICAgICBhZGRM
YXlvdXRPdmVyZmxvdyhJbnRSZWN0KG92ZXJmbG93TGVmdCwgMCwgb3ZlcmZsb3dSaWdodCAtIG92
ZXJmbG93TGVmdCwgb3ZlcmZsb3dIZWlnaHQpKTsKKyAgICAgICAgICAgICAgICBMYXlvdXRVbml0
IG92ZXJmbG93TGVmdCA9ICFzdHlsZSgpLT5pc0xlZnRUb1JpZ2h0RGlyZWN0aW9uKCkgPyBtaW48
TGF5b3V0VW5pdD4oMCwgbGFzdFJlY3QueCgpKSA6IDA7CisgICAgICAgICAgICAgICAgTGF5b3V0
VW5pdCBvdmVyZmxvd1JpZ2h0ID0gc3R5bGUoKS0+aXNMZWZ0VG9SaWdodERpcmVjdGlvbigpID8g
bWF4KHdpZHRoKCksIGxhc3RSZWN0Lm1heFgoKSkgOiAwOworICAgICAgICAgICAgICAgIExheW91
dFVuaXQgb3ZlcmZsb3dIZWlnaHQgPSBib3JkZXJCZWZvcmUoKSArIHBhZGRpbmdCZWZvcmUoKSAr
IGNvbEluZm8tPmNvbHVtbkhlaWdodCgpOworICAgICAgICAgICAgICAgIGFkZExheW91dE92ZXJm
bG93KExheW91dFJlY3Qob3ZlcmZsb3dMZWZ0LCAwLCBvdmVyZmxvd1JpZ2h0IC0gb3ZlcmZsb3dM
ZWZ0LCBvdmVyZmxvd0hlaWdodCkpOwogICAgICAgICAgICAgICAgIGlmICghaGFzT3ZlcmZsb3dD
bGlwKCkpCi0gICAgICAgICAgICAgICAgICAgIGFkZFZpc3VhbE92ZXJmbG93KEludFJlY3Qob3Zl
cmZsb3dMZWZ0LCAwLCBvdmVyZmxvd1JpZ2h0IC0gb3ZlcmZsb3dMZWZ0LCBvdmVyZmxvd0hlaWdo
dCkpOworICAgICAgICAgICAgICAgICAgICBhZGRWaXN1YWxPdmVyZmxvdyhMYXlvdXRSZWN0KG92
ZXJmbG93TGVmdCwgMCwgb3ZlcmZsb3dSaWdodCAtIG92ZXJmbG93TGVmdCwgb3ZlcmZsb3dIZWln
aHQpKTsKICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgTGF5b3V0UmVjdCBs
YXN0UmVjdCA9IGNvbHVtblJlY3RBdChjb2xJbmZvLCBjb2x1bW5Db3VudChjb2xJbmZvKSAtIDEp
OwotICAgICAgICAgICAgICAgIGludCBvdmVyZmxvd1RvcCA9ICFzdHlsZSgpLT5pc0xlZnRUb1Jp
Z2h0RGlyZWN0aW9uKCkgPyBtaW4oMCwgbGFzdFJlY3QueSgpKSA6IDA7Ci0gICAgICAgICAgICAg
ICAgaW50IG92ZXJmbG93Qm90dG9tID0gc3R5bGUoKS0+aXNMZWZ0VG9SaWdodERpcmVjdGlvbigp
ID8gbWF4KGhlaWdodCgpLCBsYXN0UmVjdC5tYXhZKCkpIDogMDsKLSAgICAgICAgICAgICAgICBp
bnQgb3ZlcmZsb3dXaWR0aCA9IGJvcmRlckJlZm9yZSgpICsgcGFkZGluZ0JlZm9yZSgpICsgY29s
SW5mby0+Y29sdW1uSGVpZ2h0KCk7Ci0gICAgICAgICAgICAgICAgYWRkTGF5b3V0T3ZlcmZsb3co
SW50UmVjdCgwLCBvdmVyZmxvd1RvcCwgb3ZlcmZsb3dXaWR0aCwgb3ZlcmZsb3dCb3R0b20gLSBv
dmVyZmxvd1RvcCkpOworICAgICAgICAgICAgICAgIExheW91dFVuaXQgb3ZlcmZsb3dUb3AgPSAh
c3R5bGUoKS0+aXNMZWZ0VG9SaWdodERpcmVjdGlvbigpID8gbWluPExheW91dFVuaXQ+KDAsIGxh
c3RSZWN0LnkoKSkgOiAwOworICAgICAgICAgICAgICAgIExheW91dFVuaXQgb3ZlcmZsb3dCb3R0
b20gPSBzdHlsZSgpLT5pc0xlZnRUb1JpZ2h0RGlyZWN0aW9uKCkgPyBtYXgoaGVpZ2h0KCksIGxh
c3RSZWN0Lm1heFkoKSkgOiAwOworICAgICAgICAgICAgICAgIExheW91dFVuaXQgb3ZlcmZsb3dX
aWR0aCA9IGJvcmRlckJlZm9yZSgpICsgcGFkZGluZ0JlZm9yZSgpICsgY29sSW5mby0+Y29sdW1u
SGVpZ2h0KCk7CisgICAgICAgICAgICAgICAgYWRkTGF5b3V0T3ZlcmZsb3coTGF5b3V0UmVjdCgw
LCBvdmVyZmxvd1RvcCwgb3ZlcmZsb3dXaWR0aCwgb3ZlcmZsb3dCb3R0b20gLSBvdmVyZmxvd1Rv
cCkpOwogICAgICAgICAgICAgICAgIGlmICghaGFzT3ZlcmZsb3dDbGlwKCkpCi0gICAgICAgICAg
ICAgICAgICAgIGFkZFZpc3VhbE92ZXJmbG93KEludFJlY3QoMCwgb3ZlcmZsb3dUb3AsIG92ZXJm
bG93V2lkdGgsIG92ZXJmbG93Qm90dG9tIC0gb3ZlcmZsb3dUb3ApKTsKKyAgICAgICAgICAgICAg
ICAgICAgYWRkVmlzdWFsT3ZlcmZsb3coTGF5b3V0UmVjdCgwLCBvdmVyZmxvd1RvcCwgb3ZlcmZs
b3dXaWR0aCwgb3ZlcmZsb3dCb3R0b20gLSBvdmVyZmxvd1RvcCkpOwogICAgICAgICAgICAgfQog
ICAgICAgICB9CiAgICAgfQogfQogCi12b2lkIFJlbmRlckJsb2NrOjpjb21wdXRlT3ZlcmZsb3co
aW50IG9sZENsaWVudEFmdGVyRWRnZSwgYm9vbCByZWNvbXB1dGVGbG9hdHMpCit2b2lkIFJlbmRl
ckJsb2NrOjpjb21wdXRlT3ZlcmZsb3coTGF5b3V0VW5pdCBvbGRDbGllbnRBZnRlckVkZ2UsIGJv
b2wgcmVjb21wdXRlRmxvYXRzKQogewogICAgIC8vIEFkZCBvdmVyZmxvdyBmcm9tIGNoaWxkcmVu
LgogICAgIGFkZE92ZXJmbG93RnJvbUNoaWxkcmVuKCk7CkBAIC0xMzk5LDEyICsxMzk5LDEyIEBA
IHZvaWQgUmVuZGVyQmxvY2s6OmNvbXB1dGVPdmVyZmxvdyhpbnQgb2wKICAgICAgICAgLy8gV2hl
biB3ZSBoYXZlIG92ZXJmbG93IGNsaXAsIHByb3BhZ2F0ZSB0aGUgb3JpZ2luYWwgc3BpbGxvdXQg
c2luY2UgaXQgd2lsbCBpbmNsdWRlIGNvbGxhcHNlZCBib3R0b20gbWFyZ2lucwogICAgICAgICAv
LyBhbmQgYm90dG9tIHBhZGRpbmcuICBTZXQgdGhlIGF4aXMgd2UgZG9uJ3QgY2FyZSBhYm91dCB0
byBiZSAxLCBzaW5jZSB3ZSB3YW50IHRoaXMgb3ZlcmZsb3cgdG8gYWx3YXlzCiAgICAgICAgIC8v
IGJlIGNvbnNpZGVyZWQgcmVhY2hhYmxlLgotICAgICAgICBJbnRSZWN0IGNsaWVudFJlY3QoY2xp
ZW50Qm94UmVjdCgpKTsKLSAgICAgICAgSW50UmVjdCByZWN0VG9BcHBseTsKKyAgICAgICAgTGF5
b3V0UmVjdCBjbGllbnRSZWN0KGNsaWVudEJveFJlY3QoKSk7CisgICAgICAgIExheW91dFJlY3Qg
cmVjdFRvQXBwbHk7CiAgICAgICAgIGlmIChpc0hvcml6b250YWxXcml0aW5nTW9kZSgpKQotICAg
ICAgICAgICAgcmVjdFRvQXBwbHkgPSBJbnRSZWN0KGNsaWVudFJlY3QueCgpLCBjbGllbnRSZWN0
LnkoKSwgMSwgbWF4KDAsIG9sZENsaWVudEFmdGVyRWRnZSAtIGNsaWVudFJlY3QueSgpKSk7Cisg
ICAgICAgICAgICByZWN0VG9BcHBseSA9IExheW91dFJlY3QoY2xpZW50UmVjdC54KCksIGNsaWVu
dFJlY3QueSgpLCAxLCBtYXgoMCwgb2xkQ2xpZW50QWZ0ZXJFZGdlIC0gY2xpZW50UmVjdC55KCkp
KTsKICAgICAgICAgZWxzZQotICAgICAgICAgICAgcmVjdFRvQXBwbHkgPSBJbnRSZWN0KGNsaWVu
dFJlY3QueCgpLCBjbGllbnRSZWN0LnkoKSwgbWF4KDAsIG9sZENsaWVudEFmdGVyRWRnZSAtIGNs
aWVudFJlY3QueCgpKSwgMSk7CisgICAgICAgICAgICByZWN0VG9BcHBseSA9IExheW91dFJlY3Qo
Y2xpZW50UmVjdC54KCksIGNsaWVudFJlY3QueSgpLCBtYXgoMCwgb2xkQ2xpZW50QWZ0ZXJFZGdl
IC0gY2xpZW50UmVjdC54KCkpLCAxKTsKICAgICAgICAgYWRkTGF5b3V0T3ZlcmZsb3cocmVjdFRv
QXBwbHkpOwogICAgIH0KICAgICAgICAgCkBAIC0xNDY1LDEyICsxNDY1LDEyIEBAIHZvaWQgUmVu
ZGVyQmxvY2s6OmFkanVzdFBvc2l0aW9uZWRCbG9jaygKICAgICAgICAgCiAgICAgY2hpbGRMYXll
ci0+c2V0U3RhdGljSW5saW5lUG9zaXRpb24oYm9yZGVyQW5kUGFkZGluZ1N0YXJ0KCkpOwogCi0g
ICAgaW50IGxvZ2ljYWxUb3AgPSBsb2dpY2FsSGVpZ2h0KCk7CisgICAgTGF5b3V0VW5pdCBsb2dp
Y2FsVG9wID0gbG9naWNhbEhlaWdodCgpOwogICAgIGlmICghbWFyZ2luSW5mby5jYW5Db2xsYXBz
ZVdpdGhNYXJnaW5CZWZvcmUoKSkgewogICAgICAgICBjaGlsZC0+Y29tcHV0ZUJsb2NrRGlyZWN0
aW9uTWFyZ2lucyh0aGlzKTsKLSAgICAgICAgaW50IG1hcmdpbkJlZm9yZSA9IG1hcmdpbkJlZm9y
ZUZvckNoaWxkKGNoaWxkKTsKLSAgICAgICAgaW50IGNvbGxhcHNlZEJlZm9yZVBvcyA9IG1hcmdp
bkluZm8ucG9zaXRpdmVNYXJnaW4oKTsKLSAgICAgICAgaW50IGNvbGxhcHNlZEJlZm9yZU5lZyA9
IG1hcmdpbkluZm8ubmVnYXRpdmVNYXJnaW4oKTsKKyAgICAgICAgTGF5b3V0VW5pdCBtYXJnaW5C
ZWZvcmUgPSBtYXJnaW5CZWZvcmVGb3JDaGlsZChjaGlsZCk7CisgICAgICAgIExheW91dFVuaXQg
Y29sbGFwc2VkQmVmb3JlUG9zID0gbWFyZ2luSW5mby5wb3NpdGl2ZU1hcmdpbigpOworICAgICAg
ICBMYXlvdXRVbml0IGNvbGxhcHNlZEJlZm9yZU5lZyA9IG1hcmdpbkluZm8ubmVnYXRpdmVNYXJn
aW4oKTsKICAgICAgICAgaWYgKG1hcmdpbkJlZm9yZSA+IDApIHsKICAgICAgICAgICAgIGlmICht
YXJnaW5CZWZvcmUgPiBjb2xsYXBzZWRCZWZvcmVQb3MpCiAgICAgICAgICAgICAgICAgY29sbGFw
c2VkQmVmb3JlUG9zID0gbWFyZ2luQmVmb3JlOwpAQCAtMTUwMiw3ICsxNTAyLDcgQEAgdm9pZCBS
ZW5kZXJCbG9jazo6YWRqdXN0RmxvYXRpbmdCbG9jayhjbwogICAgIC8vIGZvciBieSBzaW1wbHkg
Y2FsbGluZyBjYW5Db2xsYXBzZVdpdGhNYXJnaW5CZWZvcmUuICBTZWUKICAgICAvLyBodHRwOi8v
d3d3LmhpeGllLmNoL3Rlc3RzL2FkaG9jL2Nzcy9ib3gvYmxvY2svbWFyZ2luLWNvbGxhcHNlLzA0
Ni5odG1sIGZvcgogICAgIC8vIGFuIGV4YW1wbGUgb2YgdGhpcyBzY2VuYXJpby4KLSAgICBpbnQg
bWFyZ2luT2Zmc2V0ID0gbWFyZ2luSW5mby5jYW5Db2xsYXBzZVdpdGhNYXJnaW5CZWZvcmUoKSA/
IDAgOiBtYXJnaW5JbmZvLm1hcmdpbigpOworICAgIExheW91dFVuaXQgbWFyZ2luT2Zmc2V0ID0g
bWFyZ2luSW5mby5jYW5Db2xsYXBzZVdpdGhNYXJnaW5CZWZvcmUoKSA/IDAgOiBtYXJnaW5JbmZv
Lm1hcmdpbigpOwogICAgIHNldExvZ2ljYWxIZWlnaHQobG9naWNhbEhlaWdodCgpICsgbWFyZ2lu
T2Zmc2V0KTsKICAgICBwb3NpdGlvbk5ld0Zsb2F0cygpOwogICAgIHNldExvZ2ljYWxIZWlnaHQo
bG9naWNhbEhlaWdodCgpIC0gbWFyZ2luT2Zmc2V0KTsKQEAgLTE1OTgsMTQgKzE1OTgsMTQgQEAg
Ym9vbCBSZW5kZXJCbG9jazo6aGFuZGxlUnVuSW5DaGlsZChSZW5kZQogICAgIHJldHVybiB0cnVl
OwogfQogCi1pbnQgUmVuZGVyQmxvY2s6OmNvbGxhcHNlTWFyZ2lucyhSZW5kZXJCb3gqIGNoaWxk
LCBNYXJnaW5JbmZvJiBtYXJnaW5JbmZvKQorTGF5b3V0VW5pdCBSZW5kZXJCbG9jazo6Y29sbGFw
c2VNYXJnaW5zKFJlbmRlckJveCogY2hpbGQsIE1hcmdpbkluZm8mIG1hcmdpbkluZm8pCiB7CiAg
ICAgLy8gR2V0IHRoZSBmb3VyIG1hcmdpbiB2YWx1ZXMgZm9yIHRoZSBjaGlsZCBhbmQgY2FjaGUg
dGhlbS4KICAgICBjb25zdCBNYXJnaW5WYWx1ZXMgY2hpbGRNYXJnaW5zID0gbWFyZ2luVmFsdWVz
Rm9yQ2hpbGQoY2hpbGQpOwogCiAgICAgLy8gR2V0IG91ciBtYXggcG9zIGFuZCBuZWcgdG9wIG1h
cmdpbnMuCi0gICAgaW50IHBvc1RvcCA9IGNoaWxkTWFyZ2lucy5wb3NpdGl2ZU1hcmdpbkJlZm9y
ZSgpOwotICAgIGludCBuZWdUb3AgPSBjaGlsZE1hcmdpbnMubmVnYXRpdmVNYXJnaW5CZWZvcmUo
KTsKKyAgICBMYXlvdXRVbml0IHBvc1RvcCA9IGNoaWxkTWFyZ2lucy5wb3NpdGl2ZU1hcmdpbkJl
Zm9yZSgpOworICAgIExheW91dFVuaXQgbmVnVG9wID0gY2hpbGRNYXJnaW5zLm5lZ2F0aXZlTWFy
Z2luQmVmb3JlKCk7CiAKICAgICAvLyBGb3Igc2VsZi1jb2xsYXBzaW5nIGJsb2NrcywgY29sbGFw
c2Ugb3VyIGJvdHRvbSBtYXJnaW5zIGludG8gb3VyCiAgICAgLy8gdG9wIHRvIGdldCBuZXcgcG9z
VG9wIGFuZCBuZWdUb3AgdmFsdWVzLgpAQCAtMTY0NiwxNCArMTY0NiwxNCBAQCBpbnQgUmVuZGVy
QmxvY2s6OmNvbGxhcHNlTWFyZ2lucyhSZW5kZXJCCiAgICAgaWYgKG1hcmdpbkluZm8ucXVpcmtD
b250YWluZXIoKSAmJiBtYXJnaW5JbmZvLmF0QmVmb3JlU2lkZU9mQmxvY2soKSAmJiAocG9zVG9w
IC0gbmVnVG9wKSkKICAgICAgICAgbWFyZ2luSW5mby5zZXRNYXJnaW5CZWZvcmVRdWlyayh0b3BR
dWlyayk7CiAKLSAgICBpbnQgYmVmb3JlQ29sbGFwc2VMb2dpY2FsVG9wID0gbG9naWNhbEhlaWdo
dCgpOwotICAgIGludCBsb2dpY2FsVG9wID0gYmVmb3JlQ29sbGFwc2VMb2dpY2FsVG9wOworICAg
IExheW91dFVuaXQgYmVmb3JlQ29sbGFwc2VMb2dpY2FsVG9wID0gbG9naWNhbEhlaWdodCgpOwor
ICAgIExheW91dFVuaXQgbG9naWNhbFRvcCA9IGJlZm9yZUNvbGxhcHNlTG9naWNhbFRvcDsKICAg
ICBpZiAoY2hpbGQtPmlzU2VsZkNvbGxhcHNpbmdCbG9jaygpKSB7CiAgICAgICAgIC8vIFRoaXMg
Y2hpbGQgaGFzIG5vIGhlaWdodC4gIFdlIG5lZWQgdG8gY29tcHV0ZSBvdXIKICAgICAgICAgLy8g
cG9zaXRpb24gYmVmb3JlIHdlIGNvbGxhcHNlIHRoZSBjaGlsZCdzIG1hcmdpbnMgdG9nZXRoZXIs
CiAgICAgICAgIC8vIHNvIHRoYXQgd2UgY2FuIGdldCBhbiBhY2N1cmF0ZSBwb3NpdGlvbiBmb3Ig
dGhlIHplcm8taGVpZ2h0IGJsb2NrLgotICAgICAgICBpbnQgY29sbGFwc2VkQmVmb3JlUG9zID0g
bWF4KG1hcmdpbkluZm8ucG9zaXRpdmVNYXJnaW4oKSwgY2hpbGRNYXJnaW5zLnBvc2l0aXZlTWFy
Z2luQmVmb3JlKCkpOwotICAgICAgICBpbnQgY29sbGFwc2VkQmVmb3JlTmVnID0gbWF4KG1hcmdp
bkluZm8ubmVnYXRpdmVNYXJnaW4oKSwgY2hpbGRNYXJnaW5zLm5lZ2F0aXZlTWFyZ2luQmVmb3Jl
KCkpOworICAgICAgICBMYXlvdXRVbml0IGNvbGxhcHNlZEJlZm9yZVBvcyA9IG1heChtYXJnaW5J
bmZvLnBvc2l0aXZlTWFyZ2luKCksIGNoaWxkTWFyZ2lucy5wb3NpdGl2ZU1hcmdpbkJlZm9yZSgp
KTsKKyAgICAgICAgTGF5b3V0VW5pdCBjb2xsYXBzZWRCZWZvcmVOZWcgPSBtYXgobWFyZ2luSW5m
by5uZWdhdGl2ZU1hcmdpbigpLCBjaGlsZE1hcmdpbnMubmVnYXRpdmVNYXJnaW5CZWZvcmUoKSk7
CiAgICAgICAgIG1hcmdpbkluZm8uc2V0TWFyZ2luKGNvbGxhcHNlZEJlZm9yZVBvcywgY29sbGFw
c2VkQmVmb3JlTmVnKTsKICAgICAgICAgCiAgICAgICAgIC8vIE5vdyBjb2xsYXBzZSB0aGUgY2hp
bGQncyBtYXJnaW5zIHRvZ2V0aGVyLCB3aGljaCBtZWFucyBleGFtaW5pbmcgb3VyCkBAIC0xNjkz
LDE2ICsxNjkzLDE2IEBAIGludCBSZW5kZXJCbG9jazo6Y29sbGFwc2VNYXJnaW5zKFJlbmRlckIK
ICAgICAvLyBjb2xsYXBzZWQgaW50byB0aGUgcGFnZSBlZGdlLgogICAgIExheW91dFN0YXRlKiBs
YXlvdXRTdGF0ZSA9IHZpZXcoKS0+bGF5b3V0U3RhdGUoKTsKICAgICBpZiAobGF5b3V0U3RhdGUt
PmlzUGFnaW5hdGVkKCkgJiYgbGF5b3V0U3RhdGUtPnBhZ2VMb2dpY2FsSGVpZ2h0KCkgJiYgbG9n
aWNhbFRvcCA+IGJlZm9yZUNvbGxhcHNlTG9naWNhbFRvcCkgewotICAgICAgICBpbnQgb2xkTG9n
aWNhbFRvcCA9IGxvZ2ljYWxUb3A7CisgICAgICAgIExheW91dFVuaXQgb2xkTG9naWNhbFRvcCA9
IGxvZ2ljYWxUb3A7CiAgICAgICAgIGxvZ2ljYWxUb3AgPSBtaW4obG9naWNhbFRvcCwgbmV4dFBh
Z2VMb2dpY2FsVG9wRXhjbHVkaW5nQm91bmRhcnlQb2ludChiZWZvcmVDb2xsYXBzZUxvZ2ljYWxU
b3ApKTsKICAgICAgICAgc2V0TG9naWNhbEhlaWdodChsb2dpY2FsSGVpZ2h0KCkgKyAobG9naWNh
bFRvcCAtIG9sZExvZ2ljYWxUb3ApKTsKICAgICB9CiAgICAgcmV0dXJuIGxvZ2ljYWxUb3A7CiB9
CiAKLWludCBSZW5kZXJCbG9jazo6Y2xlYXJGbG9hdHNJZk5lZWRlZChSZW5kZXJCb3gqIGNoaWxk
LCBNYXJnaW5JbmZvJiBtYXJnaW5JbmZvLCBpbnQgb2xkVG9wUG9zTWFyZ2luLCBpbnQgb2xkVG9w
TmVnTWFyZ2luLCBpbnQgeVBvcykKK0xheW91dFVuaXQgUmVuZGVyQmxvY2s6OmNsZWFyRmxvYXRz
SWZOZWVkZWQoUmVuZGVyQm94KiBjaGlsZCwgTWFyZ2luSW5mbyYgbWFyZ2luSW5mbywgaW50IG9s
ZFRvcFBvc01hcmdpbiwgaW50IG9sZFRvcE5lZ01hcmdpbiwgaW50IHlQb3MpCiB7Ci0gICAgaW50
IGhlaWdodEluY3JlYXNlID0gZ2V0Q2xlYXJEZWx0YShjaGlsZCwgeVBvcyk7CisgICAgTGF5b3V0
VW5pdCBoZWlnaHRJbmNyZWFzZSA9IGdldENsZWFyRGVsdGEoY2hpbGQsIHlQb3MpOwogICAgIGlm
ICghaGVpZ2h0SW5jcmVhc2UpCiAgICAgICAgIHJldHVybiB5UG9zOwogCkBAIC0xNzMxLDcgKzE3
MzEsNyBAQCBpbnQgUmVuZGVyQmxvY2s6OmNsZWFyRmxvYXRzSWZOZWVkZWQoUmVuCiAgICAgICAg
IAogICAgICAgICAvLyBBZGp1c3Qgb3VyIGhlaWdodCBzdWNoIHRoYXQgd2UgYXJlIHJlYWR5IHRv
IGJlIGNvbGxhcHNlZCB3aXRoIHN1YnNlcXVlbnQgc2libGluZ3MgKG9yIHRoZSBib3R0b20KICAg
ICAgICAgLy8gb2YgdGhlIHBhcmVudCBibG9jaykuCi0gICAgICAgIHNldExvZ2ljYWxIZWlnaHQo
Y2hpbGQtPnkoKSAtIG1heCgwLCBtYXJnaW5JbmZvLm1hcmdpbigpKSk7CisgICAgICAgIHNldExv
Z2ljYWxIZWlnaHQoY2hpbGQtPnkoKSAtIG1heDxMYXlvdXRVbml0PigwLCBtYXJnaW5JbmZvLm1h
cmdpbigpKSk7CiAgICAgfSBlbHNlCiAgICAgICAgIC8vIEluY3JlYXNlIG91ciBoZWlnaHQgYnkg
dGhlIGFtb3VudCB3ZSBoYWQgdG8gY2xlYXIuCiAgICAgICAgIHNldExvZ2ljYWxIZWlnaHQoaGVp
Z2h0KCkgKyBoZWlnaHRJbmNyZWFzZSk7CkBAIC0xNzQ5LDEzICsxNzQ5LDEzIEBAIGludCBSZW5k
ZXJCbG9jazo6Y2xlYXJGbG9hdHNJZk5lZWRlZChSZW4KICAgICByZXR1cm4geVBvcyArIGhlaWdo
dEluY3JlYXNlOwogfQogCi1pbnQgUmVuZGVyQmxvY2s6OmVzdGltYXRlTG9naWNhbFRvcFBvc2l0
aW9uKFJlbmRlckJveCogY2hpbGQsIGNvbnN0IE1hcmdpbkluZm8mIG1hcmdpbkluZm8pCitMYXlv
dXRVbml0IFJlbmRlckJsb2NrOjplc3RpbWF0ZUxvZ2ljYWxUb3BQb3NpdGlvbihSZW5kZXJCb3gq
IGNoaWxkLCBjb25zdCBNYXJnaW5JbmZvJiBtYXJnaW5JbmZvKQogewogICAgIC8vIEZJWE1FOiBX
ZSBuZWVkIHRvIGVsaW1pbmF0ZSB0aGUgZXN0aW1hdGlvbiBvZiB2ZXJ0aWNhbCBwb3NpdGlvbiwg
YmVjYXVzZSB3aGVuIGl0J3Mgd3Jvbmcgd2Ugc29tZXRpbWVzIHRyaWdnZXIgYSBwYXRob2xvZ2lj
YWwKICAgICAvLyByZWxheW91dCBpZiB0aGVyZSBhcmUgaW50cnVkaW5nIGZsb2F0cy4KLSAgICBp
bnQgbG9naWNhbFRvcEVzdGltYXRlID0gbG9naWNhbEhlaWdodCgpOworICAgIExheW91dFVuaXQg
bG9naWNhbFRvcEVzdGltYXRlID0gbG9naWNhbEhlaWdodCgpOwogICAgIGlmICghbWFyZ2luSW5m
by5jYW5Db2xsYXBzZVdpdGhNYXJnaW5CZWZvcmUoKSkgewotICAgICAgICBpbnQgY2hpbGRNYXJn
aW5CZWZvcmUgPSBjaGlsZC0+c2VsZk5lZWRzTGF5b3V0KCkgPyBtYXJnaW5CZWZvcmVGb3JDaGls
ZChjaGlsZCkgOiBjb2xsYXBzZWRNYXJnaW5CZWZvcmVGb3JDaGlsZChjaGlsZCk7CisgICAgICAg
IExheW91dFVuaXQgY2hpbGRNYXJnaW5CZWZvcmUgPSBjaGlsZC0+c2VsZk5lZWRzTGF5b3V0KCkg
PyBtYXJnaW5CZWZvcmVGb3JDaGlsZChjaGlsZCkgOiBjb2xsYXBzZWRNYXJnaW5CZWZvcmVGb3JD
aGlsZChjaGlsZCk7CiAgICAgICAgIGxvZ2ljYWxUb3BFc3RpbWF0ZSArPSBtYXgobWFyZ2luSW5m
by5tYXJnaW4oKSwgY2hpbGRNYXJnaW5CZWZvcmUpOwogICAgIH0KIApAQCAtMTc4MywyMiArMTc4
MywyMiBAQCBpbnQgUmVuZGVyQmxvY2s6OmVzdGltYXRlTG9naWNhbFRvcFBvc2l0CiAKIHZvaWQg
UmVuZGVyQmxvY2s6OmRldGVybWluZUxvZ2ljYWxMZWZ0UG9zaXRpb25Gb3JDaGlsZChSZW5kZXJC
b3gqIGNoaWxkKQogewotICAgIGludCBzdGFydFBvc2l0aW9uID0gYm9yZGVyU3RhcnQoKSArIHBh
ZGRpbmdTdGFydCgpOwotICAgIGludCB0b3RhbEF2YWlsYWJsZUxvZ2ljYWxXaWR0aCA9IGJvcmRl
ckFuZFBhZGRpbmdMb2dpY2FsV2lkdGgoKSArIGF2YWlsYWJsZUxvZ2ljYWxXaWR0aCgpOworICAg
IExheW91dFVuaXQgc3RhcnRQb3NpdGlvbiA9IGJvcmRlclN0YXJ0KCkgKyBwYWRkaW5nU3RhcnQo
KTsKKyAgICBMYXlvdXRVbml0IHRvdGFsQXZhaWxhYmxlTG9naWNhbFdpZHRoID0gYm9yZGVyQW5k
UGFkZGluZ0xvZ2ljYWxXaWR0aCgpICsgYXZhaWxhYmxlTG9naWNhbFdpZHRoKCk7CiAKICAgICAv
LyBBZGQgaW4gb3VyIHN0YXJ0IG1hcmdpbi4KLSAgICBpbnQgY2hpbGRNYXJnaW5TdGFydCA9IG1h
cmdpblN0YXJ0Rm9yQ2hpbGQoY2hpbGQpOwotICAgIGludCBuZXdQb3NpdGlvbiA9IHN0YXJ0UG9z
aXRpb24gKyBjaGlsZE1hcmdpblN0YXJ0OworICAgIExheW91dFVuaXQgY2hpbGRNYXJnaW5TdGFy
dCA9IG1hcmdpblN0YXJ0Rm9yQ2hpbGQoY2hpbGQpOworICAgIExheW91dFVuaXQgbmV3UG9zaXRp
b24gPSBzdGFydFBvc2l0aW9uICsgY2hpbGRNYXJnaW5TdGFydDsKICAgICAgICAgCiAgICAgLy8g
U29tZSBvYmplY3RzIChlLmcuLCB0YWJsZXMsIGhvcml6b250YWwgcnVsZXMsIG92ZXJmbG93OmF1
dG8gYmxvY2tzKSBhdm9pZCBmbG9hdHMuICBUaGV5IG5lZWQKICAgICAvLyB0byBzaGlmdCBvdmVy
IGFzIG5lY2Vzc2FyeSB0byBkb2RnZSBhbnkgZmxvYXRzIHRoYXQgbWlnaHQgZ2V0IGluIHRoZSB3
YXkuCiAgICAgaWYgKGNoaWxkLT5hdm9pZHNGbG9hdHMoKSkgewotICAgICAgICBpbnQgc3RhcnRP
ZmYgPSBzdHlsZSgpLT5pc0xlZnRUb1JpZ2h0RGlyZWN0aW9uKCkgPyBsb2dpY2FsTGVmdE9mZnNl
dEZvckxpbmUobG9naWNhbEhlaWdodCgpLCBmYWxzZSkgOiB0b3RhbEF2YWlsYWJsZUxvZ2ljYWxX
aWR0aCAtIGxvZ2ljYWxSaWdodE9mZnNldEZvckxpbmUobG9naWNhbEhlaWdodCgpLCBmYWxzZSk7
CisgICAgICAgIExheW91dFVuaXQgc3RhcnRPZmYgPSBzdHlsZSgpLT5pc0xlZnRUb1JpZ2h0RGly
ZWN0aW9uKCkgPyBsb2dpY2FsTGVmdE9mZnNldEZvckxpbmUobG9naWNhbEhlaWdodCgpLCBmYWxz
ZSkgOiB0b3RhbEF2YWlsYWJsZUxvZ2ljYWxXaWR0aCAtIGxvZ2ljYWxSaWdodE9mZnNldEZvckxp
bmUobG9naWNhbEhlaWdodCgpLCBmYWxzZSk7CiAgICAgICAgIGlmIChzdHlsZSgpLT50ZXh0QWxp
Z24oKSAhPSBXRUJLSVRfQ0VOVEVSICYmICFjaGlsZC0+c3R5bGUoKS0+bWFyZ2luU3RhcnRVc2lu
ZyhzdHlsZSgpKS5pc0F1dG8oKSkgewogICAgICAgICAgICAgaWYgKGNoaWxkTWFyZ2luU3RhcnQg
PCAwKQogICAgICAgICAgICAgICAgIHN0YXJ0T2ZmICs9IGNoaWxkTWFyZ2luU3RhcnQ7CiAgICAg
ICAgICAgICBuZXdQb3NpdGlvbiA9IG1heChuZXdQb3NpdGlvbiwgc3RhcnRPZmYpOyAvLyBMZXQg
dGhlIGZsb2F0IHNpdCBpbiB0aGUgY2hpbGQncyBtYXJnaW4gaWYgaXQgY2FuIGZpdC4KLSAgICAg
ICAgfSBlbHNlIGlmIChzdGFydE9mZiAhPSBzdGFydFBvc2l0aW9uKSB7CisgICAgICAgIH0gZWxz
ZSBpZiAoIWxheW91dFVuaXRFcXVhbHMoc3RhcnRPZmYsIHN0YXJ0UG9zaXRpb24pKSB7CiAgICAg
ICAgICAgICAvLyBUaGUgb2JqZWN0IGlzIHNoaWZ0aW5nIHRvIHRoZSAiZW5kIiBzaWRlIG9mIHRo
ZSBibG9jay4gVGhlIG9iamVjdCBtaWdodCBiZSBjZW50ZXJlZCwgc28gd2UgbmVlZCB0bwogICAg
ICAgICAgICAgLy8gcmVjYWxjdWxhdGUgb3VyIGlubGluZSBkaXJlY3Rpb24gbWFyZ2lucy4gTm90
ZSB0aGF0IHRoZSBjb250YWluaW5nIGJsb2NrIGNvbnRlbnQKICAgICAgICAgICAgIC8vIHdpZHRo
IGNvbXB1dGF0aW9uIHdpbGwgdGFrZSBpbnRvIGFjY291bnQgdGhlIGRlbHRhIGJldHdlZW4gfHN0
YXJ0T2ZmfCBhbmQgfHN0YXJ0UG9zaXRpb258CkBAIC0xODUwLDMzICsxODUwLDMzIEBAIHZvaWQg
UmVuZGVyQmxvY2s6OmhhbmRsZUFmdGVyU2lkZU9mQmxvY2sKICAgICBzZXRDb2xsYXBzZWRCb3R0
b21NYXJnaW4obWFyZ2luSW5mbyk7CiB9CiAKLXZvaWQgUmVuZGVyQmxvY2s6OnNldExvZ2ljYWxM
ZWZ0Rm9yQ2hpbGQoUmVuZGVyQm94KiBjaGlsZCwgaW50IGxvZ2ljYWxMZWZ0LCBBcHBseUxheW91
dERlbHRhTW9kZSBhcHBseURlbHRhKQordm9pZCBSZW5kZXJCbG9jazo6c2V0TG9naWNhbExlZnRG
b3JDaGlsZChSZW5kZXJCb3gqIGNoaWxkLCBMYXlvdXRVbml0IGxvZ2ljYWxMZWZ0LCBBcHBseUxh
eW91dERlbHRhTW9kZSBhcHBseURlbHRhKQogewogICAgIGlmIChpc0hvcml6b250YWxXcml0aW5n
TW9kZSgpKSB7CiAgICAgICAgIGlmIChhcHBseURlbHRhID09IEFwcGx5TGF5b3V0RGVsdGEpCi0g
ICAgICAgICAgICB2aWV3KCktPmFkZExheW91dERlbHRhKEludFNpemUoY2hpbGQtPngoKSAtIGxv
Z2ljYWxMZWZ0LCAwKSk7CisgICAgICAgICAgICB2aWV3KCktPmFkZExheW91dERlbHRhKExheW91
dFNpemUoY2hpbGQtPngoKSAtIGxvZ2ljYWxMZWZ0LCAwKSk7CiAgICAgICAgIGNoaWxkLT5zZXRY
KGxvZ2ljYWxMZWZ0KTsKICAgICB9IGVsc2UgewogICAgICAgICBpZiAoYXBwbHlEZWx0YSA9PSBB
cHBseUxheW91dERlbHRhKQotICAgICAgICAgICAgdmlldygpLT5hZGRMYXlvdXREZWx0YShJbnRT
aXplKDAsIGNoaWxkLT55KCkgLSBsb2dpY2FsTGVmdCkpOworICAgICAgICAgICAgdmlldygpLT5h
ZGRMYXlvdXREZWx0YShMYXlvdXRTaXplKDAsIGNoaWxkLT55KCkgLSBsb2dpY2FsTGVmdCkpOwog
ICAgICAgICBjaGlsZC0+c2V0WShsb2dpY2FsTGVmdCk7CiAgICAgfQogfQogCi12b2lkIFJlbmRl
ckJsb2NrOjpzZXRMb2dpY2FsVG9wRm9yQ2hpbGQoUmVuZGVyQm94KiBjaGlsZCwgaW50IGxvZ2lj
YWxUb3AsIEFwcGx5TGF5b3V0RGVsdGFNb2RlIGFwcGx5RGVsdGEpCit2b2lkIFJlbmRlckJsb2Nr
OjpzZXRMb2dpY2FsVG9wRm9yQ2hpbGQoUmVuZGVyQm94KiBjaGlsZCwgTGF5b3V0VW5pdCBsb2dp
Y2FsVG9wLCBBcHBseUxheW91dERlbHRhTW9kZSBhcHBseURlbHRhKQogewogICAgIGlmIChpc0hv
cml6b250YWxXcml0aW5nTW9kZSgpKSB7CiAgICAgICAgIGlmIChhcHBseURlbHRhID09IEFwcGx5
TGF5b3V0RGVsdGEpCi0gICAgICAgICAgICB2aWV3KCktPmFkZExheW91dERlbHRhKEludFNpemUo
MCwgY2hpbGQtPnkoKSAtIGxvZ2ljYWxUb3ApKTsKKyAgICAgICAgICAgIHZpZXcoKS0+YWRkTGF5
b3V0RGVsdGEoTGF5b3V0U2l6ZSgwLCBjaGlsZC0+eSgpIC0gbG9naWNhbFRvcCkpOwogICAgICAg
ICBjaGlsZC0+c2V0WShsb2dpY2FsVG9wKTsKICAgICB9IGVsc2UgewogICAgICAgICBpZiAoYXBw
bHlEZWx0YSA9PSBBcHBseUxheW91dERlbHRhKQotICAgICAgICAgICAgdmlldygpLT5hZGRMYXlv
dXREZWx0YShJbnRTaXplKGNoaWxkLT54KCkgLSBsb2dpY2FsVG9wLCAwKSk7CisgICAgICAgICAg
ICB2aWV3KCktPmFkZExheW91dERlbHRhKExheW91dFNpemUoY2hpbGQtPngoKSAtIGxvZ2ljYWxU
b3AsIDApKTsKICAgICAgICAgY2hpbGQtPnNldFgobG9naWNhbFRvcCk7CiAgICAgfQogfQogCi12
b2lkIFJlbmRlckJsb2NrOjpsYXlvdXRCbG9ja0NoaWxkcmVuKGJvb2wgcmVsYXlvdXRDaGlsZHJl
biwgaW50JiBtYXhGbG9hdExvZ2ljYWxCb3R0b20pCit2b2lkIFJlbmRlckJsb2NrOjpsYXlvdXRC
bG9ja0NoaWxkcmVuKGJvb2wgcmVsYXlvdXRDaGlsZHJlbiwgTGF5b3V0VW5pdCYgbWF4RmxvYXRM
b2dpY2FsQm90dG9tKQogewogICAgIGlmIChnUGVyY2VudEhlaWdodERlc2NlbmRhbnRzTWFwKSB7
CiAgICAgICAgIGlmIChIYXNoU2V0PFJlbmRlckJveCo+KiBkZXNjZW5kYW50cyA9IGdQZXJjZW50
SGVpZ2h0RGVzY2VuZGFudHNNYXAtPmdldCh0aGlzKSkgewpAQCAtMTg5Niw4ICsxODk2LDggQEAg
dm9pZCBSZW5kZXJCbG9jazo6bGF5b3V0QmxvY2tDaGlsZHJlbihibwogICAgICAgICB9CiAgICAg
fQogCi0gICAgaW50IGJlZm9yZUVkZ2UgPSBib3JkZXJCZWZvcmUoKSArIHBhZGRpbmdCZWZvcmUo
KTsKLSAgICBpbnQgYWZ0ZXJFZGdlID0gYm9yZGVyQWZ0ZXIoKSArIHBhZGRpbmdBZnRlcigpICsg
c2Nyb2xsYmFyTG9naWNhbEhlaWdodCgpOworICAgIExheW91dFVuaXQgYmVmb3JlRWRnZSA9IGJv
cmRlckJlZm9yZSgpICsgcGFkZGluZ0JlZm9yZSgpOworICAgIExheW91dFVuaXQgYWZ0ZXJFZGdl
ID0gYm9yZGVyQWZ0ZXIoKSArIHBhZGRpbmdBZnRlcigpICsgc2Nyb2xsYmFyTG9naWNhbEhlaWdo
dCgpOwogCiAgICAgc2V0TG9naWNhbEhlaWdodChiZWZvcmVFZGdlKTsKIApAQCAtMTkwOSw3ICsx
OTA5LDcgQEAgdm9pZCBSZW5kZXJCbG9jazo6bGF5b3V0QmxvY2tDaGlsZHJlbihibwogICAgIC8v
IEl0IGRvZXNuJ3QgZ2V0IGluY2x1ZGVkIGluIHRoZSBub3JtYWwgbGF5b3V0IHByb2Nlc3MgYnV0
IGlzIGluc3RlYWQgc2tpcHBlZC4KICAgICBSZW5kZXJPYmplY3QqIGNoaWxkVG9FeGNsdWRlID0g
bGF5b3V0U3BlY2lhbEV4Y2x1ZGVkQ2hpbGQocmVsYXlvdXRDaGlsZHJlbik7CiAKLSAgICBpbnQg
cHJldmlvdXNGbG9hdExvZ2ljYWxCb3R0b20gPSAwOworICAgIExheW91dFVuaXQgcHJldmlvdXNG
bG9hdExvZ2ljYWxCb3R0b20gPSAwOwogICAgIG1heEZsb2F0TG9naWNhbEJvdHRvbSA9IDA7CiAK
ICAgICBSZW5kZXJCb3gqIG5leHQgPSBmaXJzdENoaWxkQm94KCk7CkBAIC0xOTQ1LDEwICsxOTQ1
LDEwIEBAIHZvaWQgUmVuZGVyQmxvY2s6OmxheW91dEJsb2NrQ2hpbGRyZW4oYm8KICAgICBoYW5k
bGVBZnRlclNpZGVPZkJsb2NrKGJlZm9yZUVkZ2UsIGFmdGVyRWRnZSwgbWFyZ2luSW5mbyk7CiB9
CiAKLXZvaWQgUmVuZGVyQmxvY2s6OmxheW91dEJsb2NrQ2hpbGQoUmVuZGVyQm94KiBjaGlsZCwg
TWFyZ2luSW5mbyYgbWFyZ2luSW5mbywgaW50JiBwcmV2aW91c0Zsb2F0TG9naWNhbEJvdHRvbSwg
aW50JiBtYXhGbG9hdExvZ2ljYWxCb3R0b20pCit2b2lkIFJlbmRlckJsb2NrOjpsYXlvdXRCbG9j
a0NoaWxkKFJlbmRlckJveCogY2hpbGQsIE1hcmdpbkluZm8mIG1hcmdpbkluZm8sIExheW91dFVu
aXQmIHByZXZpb3VzRmxvYXRMb2dpY2FsQm90dG9tLCBMYXlvdXRVbml0JiBtYXhGbG9hdExvZ2lj
YWxCb3R0b20pCiB7Ci0gICAgaW50IG9sZFBvc01hcmdpbkJlZm9yZSA9IG1heFBvc2l0aXZlTWFy
Z2luQmVmb3JlKCk7Ci0gICAgaW50IG9sZE5lZ01hcmdpbkJlZm9yZSA9IG1heE5lZ2F0aXZlTWFy
Z2luQmVmb3JlKCk7CisgICAgTGF5b3V0VW5pdCBvbGRQb3NNYXJnaW5CZWZvcmUgPSBtYXhQb3Np
dGl2ZU1hcmdpbkJlZm9yZSgpOworICAgIExheW91dFVuaXQgb2xkTmVnTWFyZ2luQmVmb3JlID0g
bWF4TmVnYXRpdmVNYXJnaW5CZWZvcmUoKTsKIAogICAgIC8vIFRoZSBjaGlsZCBpcyBhIG5vcm1h
bCBmbG93IG9iamVjdC4gIENvbXB1dGUgdGhlIG1hcmdpbnMgd2Ugd2lsbCB1c2UgZm9yIGNvbGxh
cHNpbmcgbm93LgogICAgIGNoaWxkLT5jb21wdXRlQmxvY2tEaXJlY3Rpb25NYXJnaW5zKHRoaXMp
OwpAQCAtMTk2MiwxNCArMTk2MiwxNCBAQCB2b2lkIFJlbmRlckJsb2NrOjpsYXlvdXRCbG9ja0No
aWxkKFJlbmRlCiAgICAgLy8gVHJ5IHRvIGd1ZXNzIG91ciBjb3JyZWN0IGxvZ2ljYWwgdG9wIHBv
c2l0aW9uLiAgSW4gbW9zdCBjYXNlcyB0aGlzIGd1ZXNzIHdpbGwKICAgICAvLyBiZSBjb3JyZWN0
LiAgT25seSBpZiB3ZSdyZSB3cm9uZyAod2hlbiB3ZSBjb21wdXRlIHRoZSByZWFsIGxvZ2ljYWwg
dG9wIHBvc2l0aW9uKQogICAgIC8vIHdpbGwgd2UgaGF2ZSB0byBwb3RlbnRpYWxseSByZWxheW91
dC4KLSAgICBpbnQgbG9naWNhbFRvcEVzdGltYXRlID0gZXN0aW1hdGVMb2dpY2FsVG9wUG9zaXRp
b24oY2hpbGQsIG1hcmdpbkluZm8pOworICAgIExheW91dFVuaXQgbG9naWNhbFRvcEVzdGltYXRl
ID0gZXN0aW1hdGVMb2dpY2FsVG9wUG9zaXRpb24oY2hpbGQsIG1hcmdpbkluZm8pOwogCiAgICAg
Ly8gQ2FjaGUgb3VyIG9sZCByZWN0IHNvIHRoYXQgd2UgY2FuIGRpcnR5IHRoZSBwcm9wZXIgcmVw
YWludCByZWN0cyBpZiB0aGUgY2hpbGQgbW92ZXMuCi0gICAgSW50UmVjdCBvbGRSZWN0KGNoaWxk
LT54KCksIGNoaWxkLT55KCkgLCBjaGlsZC0+d2lkdGgoKSwgY2hpbGQtPmhlaWdodCgpKTsKLSAg
ICBpbnQgb2xkTG9naWNhbFRvcCA9IGxvZ2ljYWxUb3BGb3JDaGlsZChjaGlsZCk7CisgICAgTGF5
b3V0UmVjdCBvbGRSZWN0KGNoaWxkLT54KCksIGNoaWxkLT55KCkgLCBjaGlsZC0+d2lkdGgoKSwg
Y2hpbGQtPmhlaWdodCgpKTsKKyAgICBMYXlvdXRVbml0IG9sZExvZ2ljYWxUb3AgPSBsb2dpY2Fs
VG9wRm9yQ2hpbGQoY2hpbGQpOwogCiAjaWZuZGVmIE5ERUJVRwotICAgIEludFNpemUgb2xkTGF5
b3V0RGVsdGEgPSB2aWV3KCktPmxheW91dERlbHRhKCk7CisgICAgTGF5b3V0U2l6ZSBvbGRMYXlv
dXREZWx0YSA9IHZpZXcoKS0+bGF5b3V0RGVsdGEoKTsKICNlbmRpZgogICAgIC8vIEdvIGFoZWFk
IGFuZCBwb3NpdGlvbiB0aGUgY2hpbGQgYXMgdGhvdWdoIGl0IGRpZG4ndCBjb2xsYXBzZSB3aXRo
IHRoZSB0b3AuCiAgICAgc2V0TG9naWNhbFRvcEZvckNoaWxkKGNoaWxkLCBsb2dpY2FsVG9wRXN0
aW1hdGUsIEFwcGx5TGF5b3V0RGVsdGEpOwpAQCAtMTk4MSw3ICsxOTgxLDcgQEAgdm9pZCBSZW5k
ZXJCbG9jazo6bGF5b3V0QmxvY2tDaGlsZChSZW5kZQogICAgIGVsc2UgaWYgKCFjaGlsZC0+YXZv
aWRzRmxvYXRzKCkgfHwgY2hpbGQtPnNocmlua1RvQXZvaWRGbG9hdHMoKSkgewogICAgICAgICAv
LyBJZiBhbiBlbGVtZW50IG1pZ2h0IGJlIGFmZmVjdGVkIGJ5IHRoZSBwcmVzZW5jZSBvZiBmbG9h
dHMsIHRoZW4gYWx3YXlzIG1hcmsgaXQgZm9yCiAgICAgICAgIC8vIGxheW91dC4KLSAgICAgICAg
aW50IGZiID0gbWF4KHByZXZpb3VzRmxvYXRMb2dpY2FsQm90dG9tLCBsb3dlc3RGbG9hdExvZ2lj
YWxCb3R0b20oKSk7CisgICAgICAgIExheW91dFVuaXQgZmIgPSBtYXgocHJldmlvdXNGbG9hdExv
Z2ljYWxCb3R0b20sIGxvd2VzdEZsb2F0TG9naWNhbEJvdHRvbSgpKTsKICAgICAgICAgaWYgKGZi
ID4gbG9naWNhbFRvcEVzdGltYXRlKQogICAgICAgICAgICAgbWFya0Rlc2NlbmRhbnRzV2l0aEZs
b2F0cyA9IHRydWU7CiAgICAgfQpAQCAtMjAwNiwyNCArMjAwNiwyNCBAQCB2b2lkIFJlbmRlckJs
b2NrOjpsYXlvdXRCbG9ja0NoaWxkKFJlbmRlCiAKICAgICAvLyBOb3cgZGV0ZXJtaW5lIHRoZSBj
b3JyZWN0IHlwb3MgYmFzZWQgb2ZmIGV4YW1pbmF0aW9uIG9mIGNvbGxhcHNpbmcgbWFyZ2luCiAg
ICAgLy8gdmFsdWVzLgotICAgIGludCBsb2dpY2FsVG9wQmVmb3JlQ2xlYXIgPSBjb2xsYXBzZU1h
cmdpbnMoY2hpbGQsIG1hcmdpbkluZm8pOworICAgIExheW91dFVuaXQgbG9naWNhbFRvcEJlZm9y
ZUNsZWFyID0gY29sbGFwc2VNYXJnaW5zKGNoaWxkLCBtYXJnaW5JbmZvKTsKIAogICAgIC8vIE5v
dyBjaGVjayBmb3IgY2xlYXIuCi0gICAgaW50IGxvZ2ljYWxUb3BBZnRlckNsZWFyID0gY2xlYXJG
bG9hdHNJZk5lZWRlZChjaGlsZCwgbWFyZ2luSW5mbywgb2xkUG9zTWFyZ2luQmVmb3JlLCBvbGRO
ZWdNYXJnaW5CZWZvcmUsIGxvZ2ljYWxUb3BCZWZvcmVDbGVhcik7CisgICAgTGF5b3V0VW5pdCBs
b2dpY2FsVG9wQWZ0ZXJDbGVhciA9IGNsZWFyRmxvYXRzSWZOZWVkZWQoY2hpbGQsIG1hcmdpbklu
Zm8sIG9sZFBvc01hcmdpbkJlZm9yZSwgb2xkTmVnTWFyZ2luQmVmb3JlLCBsb2dpY2FsVG9wQmVm
b3JlQ2xlYXIpOwogICAgIAogICAgIGJvb2wgcGFnaW5hdGVkID0gdmlldygpLT5sYXlvdXRTdGF0
ZSgpLT5pc1BhZ2luYXRlZCgpOwogICAgIGlmIChwYWdpbmF0ZWQpIHsKLSAgICAgICAgaW50IG9s
ZFRvcCA9IGxvZ2ljYWxUb3BBZnRlckNsZWFyOworICAgICAgICBMYXlvdXRVbml0IG9sZFRvcCA9
IGxvZ2ljYWxUb3BBZnRlckNsZWFyOwogICAgICAgICAKICAgICAgICAgLy8gSWYgdGhlIG9iamVj
dCBoYXMgYSBwYWdlIG9yIGNvbHVtbiBicmVhayB2YWx1ZSBvZiAiYmVmb3JlIiwgdGhlbiB3ZSBz
aG91bGQgc2hpZnQgdG8gdGhlIHRvcCBvZiB0aGUgbmV4dCBwYWdlLgogICAgICAgICBsb2dpY2Fs
VG9wQWZ0ZXJDbGVhciA9IGFwcGx5QmVmb3JlQnJlYWsoY2hpbGQsIGxvZ2ljYWxUb3BBZnRlckNs
ZWFyKTsKICAgICAKICAgICAgICAgLy8gRm9yIHJlcGxhY2VkIGVsZW1lbnRzIGFuZCBzY3JvbGxl
ZCBlbGVtZW50cywgd2Ugd2FudCB0byBzaGlmdCB0aGVtIHRvIHRoZSBuZXh0IHBhZ2UgaWYgdGhl
eSBkb24ndCBmaXQgb24gdGhlIGN1cnJlbnQgb25lLgotICAgICAgICBpbnQgbG9naWNhbFRvcEJl
Zm9yZVVuc3BsaXR0YWJsZUFkanVzdG1lbnQgPSBsb2dpY2FsVG9wQWZ0ZXJDbGVhcjsKLSAgICAg
ICAgaW50IGxvZ2ljYWxUb3BBZnRlclVuc3BsaXR0YWJsZUFkanVzdG1lbnQgPSBhZGp1c3RGb3JV
bnNwbGl0dGFibGVDaGlsZChjaGlsZCwgbG9naWNhbFRvcEFmdGVyQ2xlYXIpOworICAgICAgICBM
YXlvdXRVbml0IGxvZ2ljYWxUb3BCZWZvcmVVbnNwbGl0dGFibGVBZGp1c3RtZW50ID0gbG9naWNh
bFRvcEFmdGVyQ2xlYXI7CisgICAgICAgIExheW91dFVuaXQgbG9naWNhbFRvcEFmdGVyVW5zcGxp
dHRhYmxlQWRqdXN0bWVudCA9IGFkanVzdEZvclVuc3BsaXR0YWJsZUNoaWxkKGNoaWxkLCBsb2dp
Y2FsVG9wQWZ0ZXJDbGVhcik7CiAgICAgICAgIAotICAgICAgICBpbnQgcGFnaW5hdGlvblN0cnV0
ID0gMDsKLSAgICAgICAgaW50IHVuc3BsaXR0YWJsZUFkanVzdG1lbnREZWx0YSA9IGxvZ2ljYWxU
b3BBZnRlclVuc3BsaXR0YWJsZUFkanVzdG1lbnQgLSBsb2dpY2FsVG9wQmVmb3JlVW5zcGxpdHRh
YmxlQWRqdXN0bWVudDsKKyAgICAgICAgTGF5b3V0VW5pdCBwYWdpbmF0aW9uU3RydXQgPSAwOwor
ICAgICAgICBMYXlvdXRVbml0IHVuc3BsaXR0YWJsZUFkanVzdG1lbnREZWx0YSA9IGxvZ2ljYWxU
b3BBZnRlclVuc3BsaXR0YWJsZUFkanVzdG1lbnQgLSBsb2dpY2FsVG9wQmVmb3JlVW5zcGxpdHRh
YmxlQWRqdXN0bWVudDsKICAgICAgICAgaWYgKHVuc3BsaXR0YWJsZUFkanVzdG1lbnREZWx0YSkK
ICAgICAgICAgICAgIHBhZ2luYXRpb25TdHJ1dCA9IHVuc3BsaXR0YWJsZUFkanVzdG1lbnREZWx0
YTsKICAgICAgICAgZWxzZSBpZiAoY2hpbGRSZW5kZXJCbG9jayAmJiBjaGlsZFJlbmRlckJsb2Nr
LT5wYWdpbmF0aW9uU3RydXQoKSkKQEAgLTIwODgsNyArMjA4OCw3IEBAIHZvaWQgUmVuZGVyQmxv
Y2s6OmxheW91dEJsb2NrQ2hpbGQoUmVuZGUKICAgICBpZiAoY2hpbGRSZW5kZXJCbG9jayAmJiBj
aGlsZFJlbmRlckJsb2NrLT5jb250YWluc0Zsb2F0cygpKQogICAgICAgICBtYXhGbG9hdExvZ2lj
YWxCb3R0b20gPSBtYXgobWF4RmxvYXRMb2dpY2FsQm90dG9tLCBhZGRPdmVyaGFuZ2luZ0Zsb2F0
cyh0b1JlbmRlckJsb2NrKGNoaWxkKSwgLWNoaWxkLT5sb2dpY2FsTGVmdCgpLCAtY2hpbGQtPmxv
Z2ljYWxUb3AoKSwgIWNoaWxkTmVlZGVkTGF5b3V0KSk7CiAKLSAgICBJbnRTaXplIGNoaWxkT2Zm
c2V0KGNoaWxkLT54KCkgLSBvbGRSZWN0LngoKSwgY2hpbGQtPnkoKSAtIG9sZFJlY3QueSgpKTsK
KyAgICBMYXlvdXRTaXplIGNoaWxkT2Zmc2V0KGNoaWxkLT54KCkgLSBvbGRSZWN0LngoKSwgY2hp
bGQtPnkoKSAtIG9sZFJlY3QueSgpKTsKICAgICBpZiAoY2hpbGRPZmZzZXQud2lkdGgoKSB8fCBj
aGlsZE9mZnNldC5oZWlnaHQoKSkgewogICAgICAgICB2aWV3KCktPmFkZExheW91dERlbHRhKGNo
aWxkT2Zmc2V0KTsKIApAQCAtMjEwNiwxMiArMjEwNiwxMiBAQCB2b2lkIFJlbmRlckJsb2NrOjps
YXlvdXRCbG9ja0NoaWxkKFJlbmRlCiAKICAgICBpZiAocGFnaW5hdGVkKSB7CiAgICAgICAgIC8v
IENoZWNrIGZvciBhbiBhZnRlciBwYWdlL2NvbHVtbiBicmVhay4KLSAgICAgICAgaW50IG5ld0hl
aWdodCA9IGFwcGx5QWZ0ZXJCcmVhayhjaGlsZCwgbG9naWNhbEhlaWdodCgpLCBtYXJnaW5JbmZv
KTsKKyAgICAgICAgTGF5b3V0VW5pdCBuZXdIZWlnaHQgPSBhcHBseUFmdGVyQnJlYWsoY2hpbGQs
IGxvZ2ljYWxIZWlnaHQoKSwgbWFyZ2luSW5mbyk7CiAgICAgICAgIGlmIChuZXdIZWlnaHQgIT0g
aGVpZ2h0KCkpCiAgICAgICAgICAgICBzZXRMb2dpY2FsSGVpZ2h0KG5ld0hlaWdodCk7CiAgICAg
fQogCi0gICAgQVNTRVJUKG9sZExheW91dERlbHRhID09IHZpZXcoKS0+bGF5b3V0RGVsdGEoKSk7
CisgICAgQVNTRVJUKG9sZExheW91dERlbHRhLmlzUm91Z2hseUVxdWFsVG8odmlldygpLT5sYXlv
dXREZWx0YSgpKSk7CiB9CiAKIHZvaWQgUmVuZGVyQmxvY2s6OnNpbXBsaWZpZWROb3JtYWxGbG93
TGF5b3V0KCkKQEAgLTI1NjQsNyArMjU2NCw3IEBAIHZvaWQgUmVuZGVyQmxvY2s6OnBhaW50T2Jq
ZWN0KFBhaW50SW5mbyYKICAgICB9CiB9CiAKLUludFBvaW50IFJlbmRlckJsb2NrOjpmbGlwRmxv
YXRGb3JXcml0aW5nTW9kZShjb25zdCBGbG9hdGluZ09iamVjdCogY2hpbGQsIGNvbnN0IEludFBv
aW50JiBwb2ludCkgY29uc3QKK0xheW91dFBvaW50IFJlbmRlckJsb2NrOjpmbGlwRmxvYXRGb3JX
cml0aW5nTW9kZShjb25zdCBGbG9hdGluZ09iamVjdCogY2hpbGQsIGNvbnN0IExheW91dFBvaW50
JiBwb2ludCkgY29uc3QKIHsKICAgICBpZiAoIXN0eWxlKCktPmlzRmxpcHBlZEJsb2Nrc1dyaXRp
bmdNb2RlKCkpCiAgICAgICAgIHJldHVybiBwb2ludDsKQEAgLTI1NzMsOCArMjU3Myw4IEBAIElu
dFBvaW50IFJlbmRlckJsb2NrOjpmbGlwRmxvYXRGb3JXcml0aW4KICAgICAvLyBpdCdzIGdvaW5n
IHRvIGdldCBhZGRlZCBiYWNrIGluLiAgV2UgaGlkZSB0aGlzIGNvbXBsaWNhdGlvbiBoZXJlIHNv
IHRoYXQgdGhlIGNhbGxpbmcgY29kZSBsb29rcyBub3JtYWwgZm9yIHRoZSB1bmZsaXBwZWQKICAg
ICAvLyBjYXNlLgogICAgIGlmIChpc0hvcml6b250YWxXcml0aW5nTW9kZSgpKQotICAgICAgICBy
ZXR1cm4gSW50UG9pbnQocG9pbnQueCgpLCBwb2ludC55KCkgKyBoZWlnaHQoKSAtIGNoaWxkLT5y
ZW5kZXJlcigpLT5oZWlnaHQoKSAtIDIgKiB5UG9zaXRpb25Gb3JGbG9hdEluY2x1ZGluZ01hcmdp
bihjaGlsZCkpOwotICAgIHJldHVybiBJbnRQb2ludChwb2ludC54KCkgKyB3aWR0aCgpIC0gY2hp
bGQtPndpZHRoKCkgLSAyICogeFBvc2l0aW9uRm9yRmxvYXRJbmNsdWRpbmdNYXJnaW4oY2hpbGQp
LCBwb2ludC55KCkpOworICAgICAgICByZXR1cm4gTGF5b3V0UG9pbnQocG9pbnQueCgpLCBwb2lu
dC55KCkgKyBoZWlnaHQoKSAtIGNoaWxkLT5yZW5kZXJlcigpLT5oZWlnaHQoKSAtIDIgKiB5UG9z
aXRpb25Gb3JGbG9hdEluY2x1ZGluZ01hcmdpbihjaGlsZCkpOworICAgIHJldHVybiBMYXlvdXRQ
b2ludChwb2ludC54KCkgKyB3aWR0aCgpIC0gY2hpbGQtPndpZHRoKCkgLSAyICogeFBvc2l0aW9u
Rm9yRmxvYXRJbmNsdWRpbmdNYXJnaW4oY2hpbGQpLCBwb2ludC55KCkpOwogfQogCiB2b2lkIFJl
bmRlckJsb2NrOjpwYWludEZsb2F0cyhQYWludEluZm8mIHBhaW50SW5mbywgY29uc3QgTGF5b3V0
UG9pbnQmIHBhaW50T2Zmc2V0LCBib29sIHByZXNlcnZlUGhhc2UpCkBAIC0zOTQxLDcgKzM5NDEs
NyBAQCBib29sIFJlbmRlckJsb2NrOjppc1BvaW50SW5PdmVyZmxvd0NvbnRyCiAgICAgaWYgKCFz
Y3JvbGxzT3ZlcmZsb3coKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgcmV0dXJuIGxh
eWVyKCktPmhpdFRlc3RPdmVyZmxvd0NvbnRyb2xzKHJlc3VsdCwgcG9pbnRJbkNvbnRhaW5lciAt
IHRvU2l6ZShhY2N1bXVsYXRlZE9mZnNldCkpOworICAgIHJldHVybiBsYXllcigpLT5oaXRUZXN0
T3ZlcmZsb3dDb250cm9scyhyZXN1bHQsIHBvaW50SW5Db250YWluZXIgLSB0b0xheW91dFNpemUo
YWNjdW11bGF0ZWRPZmZzZXQpKTsKIH0KIAogYm9vbCBSZW5kZXJCbG9jazo6bm9kZUF0UG9pbnQo
Y29uc3QgSGl0VGVzdFJlcXVlc3QmIHJlcXVlc3QsIEhpdFRlc3RSZXN1bHQmIHJlc3VsdCwgY29u
c3QgTGF5b3V0UG9pbnQmIHBvaW50SW5Db250YWluZXIsIGNvbnN0IExheW91dFBvaW50JiBhY2N1
bXVsYXRlZE9mZnNldCwgSGl0VGVzdEFjdGlvbiBoaXRUZXN0QWN0aW9uKQpAQCAtNDAxMCw3ICs0
MDEwLDcgQEAgYm9vbCBSZW5kZXJCbG9jazo6aGl0VGVzdEZsb2F0cyhjb25zdCBIaQogCiAgICAg
TGF5b3V0UG9pbnQgYWRqdXN0ZWRMb2NhdGlvbiA9IGFjY3VtdWxhdGVkT2Zmc2V0OwogICAgIGlm
IChpc1JlbmRlclZpZXcoKSkgewotICAgICAgICBhZGp1c3RlZExvY2F0aW9uICs9IHRvU2l6ZSh0
b1JlbmRlclZpZXcodGhpcyktPmZyYW1lVmlldygpLT5zY3JvbGxQb3NpdGlvbigpKTsKKyAgICAg
ICAgYWRqdXN0ZWRMb2NhdGlvbiArPSB0b0xheW91dFNpemUodG9SZW5kZXJWaWV3KHRoaXMpLT5m
cmFtZVZpZXcoKS0+c2Nyb2xsUG9zaXRpb24oKSk7CiAgICAgfQogCiAgICAgRmxvYXRpbmdPYmpl
Y3RTZXQmIGZsb2F0aW5nT2JqZWN0U2V0ID0gbV9mbG9hdGluZ09iamVjdHMtPnNldCgpOwpJbmRl
eDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrLmgJKHJldmlzaW9uIDkxOTQ2KQor
KysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrLmgJKHdvcmtpbmcgY29weSkK
QEAgLTg5LDcgKzg5LDcgQEAgcHVibGljOgogICAgIHZpcnR1YWwgdm9pZCBhZGRDaGlsZChSZW5k
ZXJPYmplY3QqIG5ld0NoaWxkLCBSZW5kZXJPYmplY3QqIGJlZm9yZUNoaWxkID0gMCk7CiAgICAg
dmlydHVhbCB2b2lkIHJlbW92ZUNoaWxkKFJlbmRlck9iamVjdCopOwogCi0gICAgdmlydHVhbCB2
b2lkIGxheW91dEJsb2NrKGJvb2wgcmVsYXlvdXRDaGlsZHJlbiwgaW50IHBhZ2VMb2dpY2FsSGVp
Z2h0ID0gMCk7CisgICAgdmlydHVhbCB2b2lkIGxheW91dEJsb2NrKGJvb2wgcmVsYXlvdXRDaGls
ZHJlbiwgTGF5b3V0VW5pdCBwYWdlTG9naWNhbEhlaWdodCA9IDApOwogCiAgICAgdm9pZCBpbnNl
cnRQb3NpdGlvbmVkT2JqZWN0KFJlbmRlckJveCopOwogICAgIHZvaWQgcmVtb3ZlUG9zaXRpb25l
ZE9iamVjdChSZW5kZXJCb3gqKTsKQEAgLTE5OCw4ICsxOTgsOCBAQCBwdWJsaWM6CiAgICAgaW50
IGxvZ2ljYWxXaWR0aEZvckNoaWxkKFJlbmRlckJveCogY2hpbGQpIHsgcmV0dXJuIGlzSG9yaXpv
bnRhbFdyaXRpbmdNb2RlKCkgPyBjaGlsZC0+d2lkdGgoKSA6IGNoaWxkLT5oZWlnaHQoKTsgfQog
ICAgIGludCBsb2dpY2FsSGVpZ2h0Rm9yQ2hpbGQoUmVuZGVyQm94KiBjaGlsZCkgeyByZXR1cm4g
aXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKSA/IGNoaWxkLT5oZWlnaHQoKSA6IGNoaWxkLT53aWR0
aCgpOyB9CiAgICAgaW50IGxvZ2ljYWxUb3BGb3JDaGlsZChSZW5kZXJCb3gqIGNoaWxkKSB7IHJl
dHVybiBpc0hvcml6b250YWxXcml0aW5nTW9kZSgpID8gY2hpbGQtPnkoKSA6IGNoaWxkLT54KCk7
IH0KLSAgICB2b2lkIHNldExvZ2ljYWxMZWZ0Rm9yQ2hpbGQoUmVuZGVyQm94KiBjaGlsZCwgaW50
IGxvZ2ljYWxMZWZ0LCBBcHBseUxheW91dERlbHRhTW9kZSA9IERvTm90QXBwbHlMYXlvdXREZWx0
YSk7Ci0gICAgdm9pZCBzZXRMb2dpY2FsVG9wRm9yQ2hpbGQoUmVuZGVyQm94KiBjaGlsZCwgaW50
IGxvZ2ljYWxUb3AsIEFwcGx5TGF5b3V0RGVsdGFNb2RlID0gRG9Ob3RBcHBseUxheW91dERlbHRh
KTsKKyAgICB2b2lkIHNldExvZ2ljYWxMZWZ0Rm9yQ2hpbGQoUmVuZGVyQm94KiBjaGlsZCwgTGF5
b3V0VW5pdCBsb2dpY2FsTGVmdCwgQXBwbHlMYXlvdXREZWx0YU1vZGUgPSBEb05vdEFwcGx5TGF5
b3V0RGVsdGEpOworICAgIHZvaWQgc2V0TG9naWNhbFRvcEZvckNoaWxkKFJlbmRlckJveCogY2hp
bGQsIExheW91dFVuaXQgbG9naWNhbFRvcCwgQXBwbHlMYXlvdXREZWx0YU1vZGUgPSBEb05vdEFw
cGx5TGF5b3V0RGVsdGEpOwogICAgIExheW91dFVuaXQgbWFyZ2luQmVmb3JlRm9yQ2hpbGQoUmVu
ZGVyQm94TW9kZWxPYmplY3QqIGNoaWxkKSBjb25zdDsKICAgICBMYXlvdXRVbml0IG1hcmdpbkFm
dGVyRm9yQ2hpbGQoUmVuZGVyQm94TW9kZWxPYmplY3QqIGNoaWxkKSBjb25zdDsKICAgICBMYXlv
dXRVbml0IG1hcmdpblN0YXJ0Rm9yQ2hpbGQoUmVuZGVyQm94TW9kZWxPYmplY3QqIGNoaWxkKSBj
b25zdDsKQEAgLTMzMSw3ICszMzEsNyBAQCBwcm90ZWN0ZWQ6CiAgICAgYm9vbCBzaW1wbGlmaWVk
TGF5b3V0KCk7CiAgICAgdm9pZCBzaW1wbGlmaWVkTm9ybWFsRmxvd0xheW91dCgpOwogCi0gICAg
dm9pZCBjb21wdXRlT3ZlcmZsb3coaW50IG9sZENsaWVudEFmdGVyRWRnZSwgYm9vbCByZWNvbXB1
dGVGbG9hdHMgPSBmYWxzZSk7CisgICAgdm9pZCBjb21wdXRlT3ZlcmZsb3coTGF5b3V0VW5pdCBv
bGRDbGllbnRBZnRlckVkZ2UsIGJvb2wgcmVjb21wdXRlRmxvYXRzID0gZmFsc2UpOwogICAgIHZp
cnR1YWwgdm9pZCBhZGRPdmVyZmxvd0Zyb21DaGlsZHJlbigpOwogICAgIHZvaWQgYWRkT3ZlcmZs
b3dGcm9tRmxvYXRzKCk7CiAgICAgdm9pZCBhZGRPdmVyZmxvd0Zyb21Qb3NpdGlvbmVkT2JqZWN0
cygpOwpAQCAtMzc3LDcgKzM3Nyw3IEBAIHByaXZhdGU6CiAKICAgICB2aXJ0dWFsIHZvaWQgcmVw
YWludE92ZXJoYW5naW5nRmxvYXRzKGJvb2wgcGFpbnRBbGxEZXNjZW5kYW50cyk7CiAKLSAgICB2
b2lkIGxheW91dEJsb2NrQ2hpbGRyZW4oYm9vbCByZWxheW91dENoaWxkcmVuLCBpbnQmIG1heEZs
b2F0TG9naWNhbEJvdHRvbSk7CisgICAgdm9pZCBsYXlvdXRCbG9ja0NoaWxkcmVuKGJvb2wgcmVs
YXlvdXRDaGlsZHJlbiwgTGF5b3V0VW5pdCYgbWF4RmxvYXRMb2dpY2FsQm90dG9tKTsKICAgICB2
b2lkIGxheW91dElubGluZUNoaWxkcmVuKGJvb2wgcmVsYXlvdXRDaGlsZHJlbiwgaW50JiByZXBh
aW50TG9naWNhbFRvcCwgaW50JiByZXBhaW50TG9naWNhbEJvdHRvbSk7CiAgICAgQmlkaVJ1biog
aGFuZGxlVHJhaWxpbmdTcGFjZXMoQmlkaVJ1bkxpc3Q8QmlkaVJ1bj4mLCBCaWRpQ29udGV4dCop
OwogCkBAIC00NjMsMzUgKzQ2MywzNSBAQCBwcml2YXRlOgogICAgICAgICBib29sIG1faXNQbGFj
ZWQgOiAxOwogICAgIH07CiAKLSAgICBJbnRQb2ludCBmbGlwRmxvYXRGb3JXcml0aW5nTW9kZShj
b25zdCBGbG9hdGluZ09iamVjdCosIGNvbnN0IEludFBvaW50JikgY29uc3Q7CisgICAgTGF5b3V0
UG9pbnQgZmxpcEZsb2F0Rm9yV3JpdGluZ01vZGUoY29uc3QgRmxvYXRpbmdPYmplY3QqLCBjb25z
dCBMYXlvdXRQb2ludCYpIGNvbnN0OwogCi0gICAgaW50IGxvZ2ljYWxUb3BGb3JGbG9hdChjb25z
dCBGbG9hdGluZ09iamVjdCogY2hpbGQpIGNvbnN0IHsgcmV0dXJuIGlzSG9yaXpvbnRhbFdyaXRp
bmdNb2RlKCkgPyBjaGlsZC0+eSgpIDogY2hpbGQtPngoKTsgfQotICAgIGludCBsb2dpY2FsQm90
dG9tRm9yRmxvYXQoY29uc3QgRmxvYXRpbmdPYmplY3QqIGNoaWxkKSBjb25zdCB7IHJldHVybiBp
c0hvcml6b250YWxXcml0aW5nTW9kZSgpID8gY2hpbGQtPm1heFkoKSA6IGNoaWxkLT5tYXhYKCk7
IH0KLSAgICBpbnQgbG9naWNhbExlZnRGb3JGbG9hdChjb25zdCBGbG9hdGluZ09iamVjdCogY2hp
bGQpIGNvbnN0IHsgcmV0dXJuIGlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCkgPyBjaGlsZC0+eCgp
IDogY2hpbGQtPnkoKTsgfQotICAgIGludCBsb2dpY2FsUmlnaHRGb3JGbG9hdChjb25zdCBGbG9h
dGluZ09iamVjdCogY2hpbGQpIGNvbnN0IHsgcmV0dXJuIGlzSG9yaXpvbnRhbFdyaXRpbmdNb2Rl
KCkgPyBjaGlsZC0+bWF4WCgpIDogY2hpbGQtPm1heFkoKTsgfQotICAgIGludCBsb2dpY2FsV2lk
dGhGb3JGbG9hdChjb25zdCBGbG9hdGluZ09iamVjdCogY2hpbGQpIGNvbnN0IHsgcmV0dXJuIGlz
SG9yaXpvbnRhbFdyaXRpbmdNb2RlKCkgPyBjaGlsZC0+d2lkdGgoKSA6IGNoaWxkLT5oZWlnaHQo
KTsgfQotICAgIHZvaWQgc2V0TG9naWNhbFRvcEZvckZsb2F0KEZsb2F0aW5nT2JqZWN0KiBjaGls
ZCwgaW50IGxvZ2ljYWxUb3ApCisgICAgTGF5b3V0VW5pdCBsb2dpY2FsVG9wRm9yRmxvYXQoY29u
c3QgRmxvYXRpbmdPYmplY3QqIGNoaWxkKSBjb25zdCB7IHJldHVybiBpc0hvcml6b250YWxXcml0
aW5nTW9kZSgpID8gY2hpbGQtPnkoKSA6IGNoaWxkLT54KCk7IH0KKyAgICBMYXlvdXRVbml0IGxv
Z2ljYWxCb3R0b21Gb3JGbG9hdChjb25zdCBGbG9hdGluZ09iamVjdCogY2hpbGQpIGNvbnN0IHsg
cmV0dXJuIGlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCkgPyBjaGlsZC0+bWF4WSgpIDogY2hpbGQt
Pm1heFgoKTsgfQorICAgIExheW91dFVuaXQgbG9naWNhbExlZnRGb3JGbG9hdChjb25zdCBGbG9h
dGluZ09iamVjdCogY2hpbGQpIGNvbnN0IHsgcmV0dXJuIGlzSG9yaXpvbnRhbFdyaXRpbmdNb2Rl
KCkgPyBjaGlsZC0+eCgpIDogY2hpbGQtPnkoKTsgfQorICAgIExheW91dFVuaXQgbG9naWNhbFJp
Z2h0Rm9yRmxvYXQoY29uc3QgRmxvYXRpbmdPYmplY3QqIGNoaWxkKSBjb25zdCB7IHJldHVybiBp
c0hvcml6b250YWxXcml0aW5nTW9kZSgpID8gY2hpbGQtPm1heFgoKSA6IGNoaWxkLT5tYXhZKCk7
IH0KKyAgICBMYXlvdXRVbml0IGxvZ2ljYWxXaWR0aEZvckZsb2F0KGNvbnN0IEZsb2F0aW5nT2Jq
ZWN0KiBjaGlsZCkgY29uc3QgeyByZXR1cm4gaXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKSA/IGNo
aWxkLT53aWR0aCgpIDogY2hpbGQtPmhlaWdodCgpOyB9CisgICAgdm9pZCBzZXRMb2dpY2FsVG9w
Rm9yRmxvYXQoRmxvYXRpbmdPYmplY3QqIGNoaWxkLCBMYXlvdXRVbml0IGxvZ2ljYWxUb3ApCiAg
ICAgewogICAgICAgICBpZiAoaXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKSkKICAgICAgICAgICAg
IGNoaWxkLT5zZXRZKGxvZ2ljYWxUb3ApOwogICAgICAgICBlbHNlCiAgICAgICAgICAgICBjaGls
ZC0+c2V0WChsb2dpY2FsVG9wKTsKICAgICB9Ci0gICAgdm9pZCBzZXRMb2dpY2FsTGVmdEZvckZs
b2F0KEZsb2F0aW5nT2JqZWN0KiBjaGlsZCwgaW50IGxvZ2ljYWxMZWZ0KQorICAgIHZvaWQgc2V0
TG9naWNhbExlZnRGb3JGbG9hdChGbG9hdGluZ09iamVjdCogY2hpbGQsIExheW91dFVuaXQgbG9n
aWNhbExlZnQpCiAgICAgewogICAgICAgICBpZiAoaXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKSkK
ICAgICAgICAgICAgIGNoaWxkLT5zZXRYKGxvZ2ljYWxMZWZ0KTsKICAgICAgICAgZWxzZQogICAg
ICAgICAgICAgY2hpbGQtPnNldFkobG9naWNhbExlZnQpOwogICAgIH0KLSAgICB2b2lkIHNldExv
Z2ljYWxIZWlnaHRGb3JGbG9hdChGbG9hdGluZ09iamVjdCogY2hpbGQsIGludCBsb2dpY2FsSGVp
Z2h0KQorICAgIHZvaWQgc2V0TG9naWNhbEhlaWdodEZvckZsb2F0KEZsb2F0aW5nT2JqZWN0KiBj
aGlsZCwgTGF5b3V0VW5pdCBsb2dpY2FsSGVpZ2h0KQogICAgIHsKICAgICAgICAgaWYgKGlzSG9y
aXpvbnRhbFdyaXRpbmdNb2RlKCkpCiAgICAgICAgICAgICBjaGlsZC0+c2V0SGVpZ2h0KGxvZ2lj
YWxIZWlnaHQpOwogICAgICAgICBlbHNlCiAgICAgICAgICAgICBjaGlsZC0+c2V0V2lkdGgobG9n
aWNhbEhlaWdodCk7CiAgICAgfQotICAgIHZvaWQgc2V0TG9naWNhbFdpZHRoRm9yRmxvYXQoRmxv
YXRpbmdPYmplY3QqIGNoaWxkLCBpbnQgbG9naWNhbFdpZHRoKQorICAgIHZvaWQgc2V0TG9naWNh
bFdpZHRoRm9yRmxvYXQoRmxvYXRpbmdPYmplY3QqIGNoaWxkLCBMYXlvdXRVbml0IGxvZ2ljYWxX
aWR0aCkKICAgICB7CiAgICAgICAgIGlmIChpc0hvcml6b250YWxXcml0aW5nTW9kZSgpKQogICAg
ICAgICAgICAgY2hpbGQtPnNldFdpZHRoKGxvZ2ljYWxXaWR0aCk7CkBAIC03MDQsNyArNzA0LDcg
QEAgcHJpdmF0ZToKICAgICAgICAgaW50IG1fbmVnYXRpdmVNYXJnaW47CiAKICAgICBwdWJsaWM6
Ci0gICAgICAgIE1hcmdpbkluZm8oUmVuZGVyQmxvY2sqIGIsIGludCBiZWZvcmVCb3JkZXJQYWRk
aW5nLCBpbnQgYWZ0ZXJCb3JkZXJQYWRkaW5nKTsKKyAgICAgICAgTWFyZ2luSW5mbyhSZW5kZXJC
bG9jayosIExheW91dFVuaXQgYmVmb3JlQm9yZGVyUGFkZGluZywgTGF5b3V0VW5pdCBhZnRlckJv
cmRlclBhZGRpbmcpOwogCiAgICAgICAgIHZvaWQgc2V0QXRCZWZvcmVTaWRlT2ZCbG9jayhib29s
IGIpIHsgbV9hdEJlZm9yZVNpZGVPZkJsb2NrID0gYjsgfQogICAgICAgICB2b2lkIHNldEF0QWZ0
ZXJTaWRlT2ZCbG9jayhib29sIGIpIHsgbV9hdEFmdGVyU2lkZU9mQmxvY2sgPSBiOyB9CkBAIC03
MzMsMTYgKzczMywxNiBAQCBwcml2YXRlOgogICAgICAgICBpbnQgbWFyZ2luKCkgY29uc3QgeyBy
ZXR1cm4gbV9wb3NpdGl2ZU1hcmdpbiAtIG1fbmVnYXRpdmVNYXJnaW47IH0KICAgICB9OwogCi0g
ICAgdm9pZCBsYXlvdXRCbG9ja0NoaWxkKFJlbmRlckJveCogY2hpbGQsIE1hcmdpbkluZm8mLCBp
bnQmIHByZXZpb3VzRmxvYXRMb2dpY2FsQm90dG9tLCBpbnQmIG1heEZsb2F0TG9naWNhbEJvdHRv
bSk7CisgICAgdm9pZCBsYXlvdXRCbG9ja0NoaWxkKFJlbmRlckJveCogY2hpbGQsIE1hcmdpbklu
Zm8mLCBMYXlvdXRVbml0JiBwcmV2aW91c0Zsb2F0TG9naWNhbEJvdHRvbSwgTGF5b3V0VW5pdCYg
bWF4RmxvYXRMb2dpY2FsQm90dG9tKTsKICAgICB2b2lkIGFkanVzdFBvc2l0aW9uZWRCbG9jayhS
ZW5kZXJCb3gqIGNoaWxkLCBjb25zdCBNYXJnaW5JbmZvJik7CiAgICAgdm9pZCBhZGp1c3RGbG9h
dGluZ0Jsb2NrKGNvbnN0IE1hcmdpbkluZm8mKTsKICAgICBib29sIGhhbmRsZVNwZWNpYWxDaGls
ZChSZW5kZXJCb3gqIGNoaWxkLCBjb25zdCBNYXJnaW5JbmZvJik7CiAgICAgYm9vbCBoYW5kbGVG
bG9hdGluZ0NoaWxkKFJlbmRlckJveCogY2hpbGQsIGNvbnN0IE1hcmdpbkluZm8mKTsKICAgICBi
b29sIGhhbmRsZVBvc2l0aW9uZWRDaGlsZChSZW5kZXJCb3gqIGNoaWxkLCBjb25zdCBNYXJnaW5J
bmZvJik7CiAgICAgYm9vbCBoYW5kbGVSdW5JbkNoaWxkKFJlbmRlckJveCogY2hpbGQpOwotICAg
IGludCBjb2xsYXBzZU1hcmdpbnMoUmVuZGVyQm94KiBjaGlsZCwgTWFyZ2luSW5mbyYpOwotICAg
IGludCBjbGVhckZsb2F0c0lmTmVlZGVkKFJlbmRlckJveCogY2hpbGQsIE1hcmdpbkluZm8mLCBp
bnQgb2xkVG9wUG9zTWFyZ2luLCBpbnQgb2xkVG9wTmVnTWFyZ2luLCBpbnQgeVBvcyk7Ci0gICAg
aW50IGVzdGltYXRlTG9naWNhbFRvcFBvc2l0aW9uKFJlbmRlckJveCogY2hpbGQsIGNvbnN0IE1h
cmdpbkluZm8mKTsKKyAgICBMYXlvdXRVbml0IGNvbGxhcHNlTWFyZ2lucyhSZW5kZXJCb3gqIGNo
aWxkLCBNYXJnaW5JbmZvJik7CisgICAgTGF5b3V0VW5pdCBjbGVhckZsb2F0c0lmTmVlZGVkKFJl
bmRlckJveCogY2hpbGQsIE1hcmdpbkluZm8mLCBpbnQgb2xkVG9wUG9zTWFyZ2luLCBpbnQgb2xk
VG9wTmVnTWFyZ2luLCBpbnQgeVBvcyk7CisgICAgTGF5b3V0VW5pdCBlc3RpbWF0ZUxvZ2ljYWxU
b3BQb3NpdGlvbihSZW5kZXJCb3gqIGNoaWxkLCBjb25zdCBNYXJnaW5JbmZvJik7CiAgICAgdm9p
ZCBkZXRlcm1pbmVMb2dpY2FsTGVmdFBvc2l0aW9uRm9yQ2hpbGQoUmVuZGVyQm94KiBjaGlsZCk7
CiAgICAgdm9pZCBoYW5kbGVBZnRlclNpZGVPZkJsb2NrKGludCB0b3AsIGludCBib3R0b20sIE1h
cmdpbkluZm8mKTsKICAgICB2b2lkIHNldENvbGxhcHNlZEJvdHRvbU1hcmdpbihjb25zdCBNYXJn
aW5JbmZvJik7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>102546</attachid>
            <date>2011-08-01 13:12:13 -0700</date>
            <delta_ts>2011-08-09 14:52:54 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-65396-20110801131212.patch</filename>
            <type>text/plain</type>
            <size>38086</size>
            <attacher name="Emil A Eklund">eae</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDkyMTM2KQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsNDEgQEAKKzIwMTEtMDgtMDEgIEVtaWwgQSBF
a2x1bmQgIDxlYWVAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFN3aXRjaCBSZW5kZXJCbG9jayB0
byB0byBuZXcgbGF5b3V0IHR5cGVzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD02NTM5NgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEp
LgorCisgICAgICAgIE5vIG5ldyB0ZXN0cywgbm8gbmV3IGZ1bmN0aW9uYWxpdHkuCisKKyAgICAg
ICAgKiByZW5kZXJpbmcvUmVuZGVyQmxvY2suY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVy
QmxvY2s6Ok1hcmdpbkluZm86Ok1hcmdpbkluZm8pOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVy
QmxvY2s6OmxheW91dEJsb2NrKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrOjphZGRP
dmVyZmxvd0Zyb21DaGlsZHJlbik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9jazo6Y29t
cHV0ZU92ZXJmbG93KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrOjphZGp1c3RQb3Np
dGlvbmVkQmxvY2spOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQmxvY2s6OmFkanVzdEZsb2F0
aW5nQmxvY2spOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQmxvY2s6OmNvbGxhcHNlTWFyZ2lu
cyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9jazo6Y2xlYXJGbG9hdHNJZk5lZWRlZCk6
CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9jazo6ZXN0aW1hdGVMb2dpY2FsVG9wUG9zaXRp
b24pOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQmxvY2s6OmRldGVybWluZUxvZ2ljYWxMZWZ0
UG9zaXRpb25Gb3JDaGlsZCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9jazo6c2V0TG9n
aWNhbExlZnRGb3JDaGlsZCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9jazo6c2V0TG9n
aWNhbFRvcEZvckNoaWxkKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrOjpsYXlvdXRC
bG9ja0NoaWxkcmVuKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrOjpsYXlvdXRCbG9j
a0NoaWxkKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrOjpmbGlwRmxvYXRGb3JXcml0
aW5nTW9kZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9jazo6aXNQb2ludEluT3ZlcmZs
b3dDb250cm9sKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrOjpoaXRUZXN0RmxvYXRz
KToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyQmxvY2suaDoKKyAgICAgICAgKFdlYkNvcmU6
OlJlbmRlckJsb2NrOjpsb2dpY2FsVG9wRm9yRmxvYXQpOgorICAgICAgICAoV2ViQ29yZTo6UmVu
ZGVyQmxvY2s6OmxvZ2ljYWxCb3R0b21Gb3JGbG9hdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5k
ZXJCbG9jazo6bG9naWNhbExlZnRGb3JGbG9hdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJC
bG9jazo6bG9naWNhbFJpZ2h0Rm9yRmxvYXQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQmxv
Y2s6OmxvZ2ljYWxXaWR0aEZvckZsb2F0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2Nr
OjpzZXRMb2dpY2FsVG9wRm9yRmxvYXQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQmxvY2s6
OnNldExvZ2ljYWxMZWZ0Rm9yRmxvYXQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQmxvY2s6
OnNldExvZ2ljYWxIZWlnaHRGb3JGbG9hdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9j
azo6c2V0TG9naWNhbFdpZHRoRm9yRmxvYXQpOgorCiAyMDExLTA3LTI4ICBBYmhpc2hlayBBcnlh
ICA8aW5mZXJub0BjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgUmVncmVzc2lvbig4MjE0NCk6IENy
YXNoIGluIFRyYWlsaW5nT2JqZWN0czo6dXBkYXRlTWlkcG9pbnRzRm9yVHJhaWxpbmdCb3hlcwpJ
bmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2suY3BwCShyZXZpc2lvbiA5
MjEzMykKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9jay5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTgxLDcgKzgxLDcgQEAgc3RhdGljIERlbGF5ZWRVcGRhdGVTY3JvbGxJbmZv
U2V0KiBnRGVsYQogYm9vbCBSZW5kZXJCbG9jazo6c19jYW5Qcm9wYWdhdGVGbG9hdEludG9TaWJs
aW5nID0gZmFsc2U7CiAKIC8vIE91ciBNYXJnaW5JbmZvIHN0YXRlIHVzZWQgd2hlbiBsYXlpbmcg
b3V0IGJsb2NrIGNoaWxkcmVuLgotUmVuZGVyQmxvY2s6Ok1hcmdpbkluZm86Ok1hcmdpbkluZm8o
UmVuZGVyQmxvY2sqIGJsb2NrLCBpbnQgYmVmb3JlQm9yZGVyUGFkZGluZywgaW50IGFmdGVyQm9y
ZGVyUGFkZGluZykKK1JlbmRlckJsb2NrOjpNYXJnaW5JbmZvOjpNYXJnaW5JbmZvKFJlbmRlckJs
b2NrKiBibG9jaywgTGF5b3V0VW5pdCBiZWZvcmVCb3JkZXJQYWRkaW5nLCBMYXlvdXRVbml0IGFm
dGVyQm9yZGVyUGFkZGluZykKICAgICA6IG1fYXRCZWZvcmVTaWRlT2ZCbG9jayh0cnVlKQogICAg
ICwgbV9hdEFmdGVyU2lkZU9mQmxvY2soZmFsc2UpCiAgICAgLCBtX21hcmdpbkJlZm9yZVF1aXJr
KGZhbHNlKQpAQCAtMTE2Niw3ICsxMTY2LDcgQEAgdm9pZCBSZW5kZXJCbG9jazo6bGF5b3V0KCkK
ICAgICAgICAgY2xlYXJMYXlvdXRPdmVyZmxvdygpOwogfQogCi12b2lkIFJlbmRlckJsb2NrOjps
YXlvdXRCbG9jayhib29sIHJlbGF5b3V0Q2hpbGRyZW4sIGludCBwYWdlTG9naWNhbEhlaWdodCwg
QmxvY2tMYXlvdXRQYXNzIGxheW91dFBhc3MpCit2b2lkIFJlbmRlckJsb2NrOjpsYXlvdXRCbG9j
ayhib29sIHJlbGF5b3V0Q2hpbGRyZW4sIExheW91dFVuaXQgcGFnZUxvZ2ljYWxIZWlnaHQsIEJs
b2NrTGF5b3V0UGFzcyBsYXlvdXRQYXNzKQogewogICAgIEFTU0VSVChuZWVkc0xheW91dCgpKTsK
IApAQCAtMTE3OCw4ICsxMTc4LDggQEAgdm9pZCBSZW5kZXJCbG9jazo6bGF5b3V0QmxvY2soYm9v
bCByZWxheQogCiAgICAgTGF5b3V0UmVwYWludGVyIHJlcGFpbnRlcigqdGhpcywgbV9ldmVySGFk
TGF5b3V0ICYmIGNoZWNrRm9yUmVwYWludER1cmluZ0xheW91dCgpKTsKIAotICAgIGludCBvbGRX
aWR0aCA9IGxvZ2ljYWxXaWR0aCgpOwotICAgIGludCBvbGRDb2x1bW5XaWR0aCA9IGRlc2lyZWRD
b2x1bW5XaWR0aCgpOworICAgIExheW91dFVuaXQgb2xkV2lkdGggPSBsb2dpY2FsV2lkdGgoKTsK
KyAgICBMYXlvdXRVbml0IG9sZENvbHVtbldpZHRoID0gZGVzaXJlZENvbHVtbldpZHRoKCk7CiAK
ICAgICBjb21wdXRlTG9naWNhbFdpZHRoKCk7CiAgICAgY2FsY0NvbHVtbldpZHRoKCk7CkBAIC0x
MTk2LDcgKzExOTYsNyBAQCB2b2lkIFJlbmRlckJsb2NrOjpsYXlvdXRCbG9jayhib29sIHJlbGF5
CiAgICAgICAgIGZsb2F0c0xheW91dFBhc3MgPSBQb3NpdGlvbmVkRmxvYXRMYXlvdXRQYXNzOwog
ICAgIGNsZWFyRmxvYXRzKGZsb2F0c0xheW91dFBhc3MpOwogCi0gICAgaW50IHByZXZpb3VzSGVp
Z2h0ID0gbG9naWNhbEhlaWdodCgpOworICAgIExheW91dFVuaXQgcHJldmlvdXNIZWlnaHQgPSBs
b2dpY2FsSGVpZ2h0KCk7CiAgICAgc2V0TG9naWNhbEhlaWdodCgwKTsKICAgICBib29sIGhhc1Nw
ZWNpZmllZFBhZ2VMb2dpY2FsSGVpZ2h0ID0gZmFsc2U7CiAgICAgYm9vbCBwYWdlTG9naWNhbEhl
aWdodENoYW5nZWQgPSBmYWxzZTsKQEAgLTEyNTksOSArMTI1OSw5IEBAIHZvaWQgUmVuZGVyQmxv
Y2s6OmxheW91dEJsb2NrKGJvb2wgcmVsYXkKICAgICAgICAgICAgIGxheWVyKCktPnNldEhhc1Zl
cnRpY2FsU2Nyb2xsYmFyKHRydWUpOwogICAgIH0KIAotICAgIGludCByZXBhaW50TG9naWNhbFRv
cCA9IDA7Ci0gICAgaW50IHJlcGFpbnRMb2dpY2FsQm90dG9tID0gMDsKLSAgICBpbnQgbWF4Rmxv
YXRMb2dpY2FsQm90dG9tID0gMDsKKyAgICBMYXlvdXRVbml0IHJlcGFpbnRMb2dpY2FsVG9wID0g
MDsKKyAgICBMYXlvdXRVbml0IHJlcGFpbnRMb2dpY2FsQm90dG9tID0gMDsKKyAgICBMYXlvdXRV
bml0IG1heEZsb2F0TG9naWNhbEJvdHRvbSA9IDA7CiAgICAgaWYgKCFmaXJzdENoaWxkKCkgJiYg
IWlzQW5vbnltb3VzQmxvY2soKSkKICAgICAgICAgc2V0Q2hpbGRyZW5JbmxpbmUodHJ1ZSk7CiAg
ICAgaWYgKGNoaWxkcmVuSW5saW5lKCkpCkBAIC0xMjcwLDcgKzEyNzAsNyBAQCB2b2lkIFJlbmRl
ckJsb2NrOjpsYXlvdXRCbG9jayhib29sIHJlbGF5CiAgICAgICAgIGxheW91dEJsb2NrQ2hpbGRy
ZW4ocmVsYXlvdXRDaGlsZHJlbiwgbWF4RmxvYXRMb2dpY2FsQm90dG9tKTsKIAogICAgIC8vIEV4
cGFuZCBvdXIgaW50cmluc2ljIGhlaWdodCB0byBlbmNvbXBhc3MgZmxvYXRzLgotICAgIGludCB0
b0FkZCA9IGJvcmRlckFmdGVyKCkgKyBwYWRkaW5nQWZ0ZXIoKSArIHNjcm9sbGJhckxvZ2ljYWxI
ZWlnaHQoKTsKKyAgICBMYXlvdXRVbml0IHRvQWRkID0gYm9yZGVyQWZ0ZXIoKSArIHBhZGRpbmdB
ZnRlcigpICsgc2Nyb2xsYmFyTG9naWNhbEhlaWdodCgpOwogICAgIGlmIChsb3dlc3RGbG9hdExv
Z2ljYWxCb3R0b20oKSA+IChsb2dpY2FsSGVpZ2h0KCkgLSB0b0FkZCkgJiYgZXhwYW5kc1RvRW5j
bG9zZU92ZXJoYW5naW5nRmxvYXRzKCkpCiAgICAgICAgIHNldExvZ2ljYWxIZWlnaHQobG93ZXN0
RmxvYXRMb2dpY2FsQm90dG9tKCkgKyB0b0FkZCk7CiAgICAgCkBAIC0xMjc4LDEwICsxMjc4LDEw
IEBAIHZvaWQgUmVuZGVyQmxvY2s6OmxheW91dEJsb2NrKGJvb2wgcmVsYXkKICAgICAgICAgcmV0
dXJuOwogIAogICAgIC8vIENhbGN1bGF0ZSBvdXIgbmV3IGhlaWdodC4KLSAgICBpbnQgb2xkSGVp
Z2h0ID0gbG9naWNhbEhlaWdodCgpOwotICAgIGludCBvbGRDbGllbnRBZnRlckVkZ2UgPSBjbGll
bnRMb2dpY2FsQm90dG9tKCk7CisgICAgTGF5b3V0VW5pdCBvbGRIZWlnaHQgPSBsb2dpY2FsSGVp
Z2h0KCk7CisgICAgTGF5b3V0VW5pdCBvbGRDbGllbnRBZnRlckVkZ2UgPSBjbGllbnRMb2dpY2Fs
Qm90dG9tKCk7CiAgICAgY29tcHV0ZUxvZ2ljYWxIZWlnaHQoKTsKLSAgICBpbnQgbmV3SGVpZ2h0
ID0gbG9naWNhbEhlaWdodCgpOworICAgIExheW91dFVuaXQgbmV3SGVpZ2h0ID0gbG9naWNhbEhl
aWdodCgpOwogICAgIGlmIChvbGRIZWlnaHQgIT0gbmV3SGVpZ2h0KSB7CiAgICAgICAgIGlmIChv
bGRIZWlnaHQgPiBuZXdIZWlnaHQgJiYgbWF4RmxvYXRMb2dpY2FsQm90dG9tID4gbmV3SGVpZ2h0
ICYmICFjaGlsZHJlbklubGluZSgpKSB7CiAgICAgICAgICAgICAvLyBPbmUgb2Ygb3VyIGNoaWxk
cmVuJ3MgZmxvYXRzIG1heSBoYXZlIGJlY29tZSBhbiBvdmVyaGFuZ2luZyBmbG9hdCBmb3IgdXMu
IFdlIG5lZWQgdG8gbG9vayBmb3IgaXQuCkBAIC0xMzIwLDggKzEzMjAsOCBAQCB2b2lkIFJlbmRl
ckJsb2NrOjpsYXlvdXRCbG9jayhib29sIHJlbGF5CiAgICAgaWYgKCFkaWRGdWxsUmVwYWludCAm
JiByZXBhaW50TG9naWNhbFRvcCAhPSByZXBhaW50TG9naWNhbEJvdHRvbSAmJiAoc3R5bGUoKS0+
dmlzaWJpbGl0eSgpID09IFZJU0lCTEUgfHwgZW5jbG9zaW5nTGF5ZXIoKS0+aGFzVmlzaWJsZUNv
bnRlbnQoKSkpIHsKICAgICAgICAgLy8gRklYTUU6IFdlIGNvdWxkIHRpZ2h0ZW4gdXAgdGhlIGxl
ZnQgYW5kIHJpZ2h0IGludmFsaWRhdGlvbiBwb2ludHMgaWYgd2UgbGV0IGxheW91dElubGluZUNo
aWxkcmVuIGZpbGwgdGhlbSBpbiBiYXNlZCBvZmYgdGhlIHBhcnRpY3VsYXIgbGluZXMKICAgICAg
ICAgLy8gaXQgaGFkIHRvIGxheSBvdXQuICBXZSB3b3VsZG4ndCBuZWVkIHRoZSBoYXNPdmVyZmxv
d0NsaXAoKSBoYWNrIGluIHRoYXQgY2FzZSBlaXRoZXIuCi0gICAgICAgIGludCByZXBhaW50TG9n
aWNhbExlZnQgPSBsb2dpY2FsTGVmdFZpc3VhbE92ZXJmbG93KCk7Ci0gICAgICAgIGludCByZXBh
aW50TG9naWNhbFJpZ2h0ID0gbG9naWNhbFJpZ2h0VmlzdWFsT3ZlcmZsb3coKTsKKyAgICAgICAg
TGF5b3V0VW5pdCByZXBhaW50TG9naWNhbExlZnQgPSBsb2dpY2FsTGVmdFZpc3VhbE92ZXJmbG93
KCk7CisgICAgICAgIExheW91dFVuaXQgcmVwYWludExvZ2ljYWxSaWdodCA9IGxvZ2ljYWxSaWdo
dFZpc3VhbE92ZXJmbG93KCk7CiAgICAgICAgIGlmIChoYXNPdmVyZmxvd0NsaXAoKSkgewogICAg
ICAgICAgICAgLy8gSWYgd2UgaGF2ZSBjbGlwcGVkIG92ZXJmbG93LCB3ZSBzaG91bGQgdXNlIGxh
eW91dCBvdmVyZmxvdyBhcyB3ZWxsLCBzaW5jZSB2aXN1YWwgb3ZlcmZsb3cgZnJvbSBsaW5lcyBk
aWRuJ3QgcHJvcGFnYXRlIHRvIG91ciBibG9jaydzIG92ZXJmbG93LgogICAgICAgICAgICAgLy8g
Tm90ZSB0aGUgb2xkIGNvZGUgZGlkIHRoaXMgYXMgd2VsbCBidXQgZXZlbiBmb3Igb3ZlcmZsb3c6
dmlzaWJsZS4gIFRoZSBhZGRpdGlvbiBvZiBoYXNPdmVyZmxvd0NsaXAoKSBhdCBsZWFzdCB0aWdo
dGVucyB1cCB0aGUgaGFjayBhIGJpdC4KQEAgLTEzMzAsMTEgKzEzMzAsMTEgQEAgdm9pZCBSZW5k
ZXJCbG9jazo6bGF5b3V0QmxvY2soYm9vbCByZWxheQogICAgICAgICAgICAgcmVwYWludExvZ2lj
YWxSaWdodCA9IG1heChyZXBhaW50TG9naWNhbFJpZ2h0LCBsb2dpY2FsUmlnaHRMYXlvdXRPdmVy
ZmxvdygpKTsKICAgICAgICAgfQogICAgICAgICAKLSAgICAgICAgSW50UmVjdCByZXBhaW50UmVj
dDsKKyAgICAgICAgTGF5b3V0UmVjdCByZXBhaW50UmVjdDsKICAgICAgICAgaWYgKGlzSG9yaXpv
bnRhbFdyaXRpbmdNb2RlKCkpCi0gICAgICAgICAgICByZXBhaW50UmVjdCA9IEludFJlY3QocmVw
YWludExvZ2ljYWxMZWZ0LCByZXBhaW50TG9naWNhbFRvcCwgcmVwYWludExvZ2ljYWxSaWdodCAt
IHJlcGFpbnRMb2dpY2FsTGVmdCwgcmVwYWludExvZ2ljYWxCb3R0b20gLSByZXBhaW50TG9naWNh
bFRvcCk7CisgICAgICAgICAgICByZXBhaW50UmVjdCA9IExheW91dFJlY3QocmVwYWludExvZ2lj
YWxMZWZ0LCByZXBhaW50TG9naWNhbFRvcCwgcmVwYWludExvZ2ljYWxSaWdodCAtIHJlcGFpbnRM
b2dpY2FsTGVmdCwgcmVwYWludExvZ2ljYWxCb3R0b20gLSByZXBhaW50TG9naWNhbFRvcCk7CiAg
ICAgICAgIGVsc2UKLSAgICAgICAgICAgIHJlcGFpbnRSZWN0ID0gSW50UmVjdChyZXBhaW50TG9n
aWNhbFRvcCwgcmVwYWludExvZ2ljYWxMZWZ0LCByZXBhaW50TG9naWNhbEJvdHRvbSAtIHJlcGFp
bnRMb2dpY2FsVG9wLCByZXBhaW50TG9naWNhbFJpZ2h0IC0gcmVwYWludExvZ2ljYWxMZWZ0KTsK
KyAgICAgICAgICAgIHJlcGFpbnRSZWN0ID0gTGF5b3V0UmVjdChyZXBhaW50TG9naWNhbFRvcCwg
cmVwYWludExvZ2ljYWxMZWZ0LCByZXBhaW50TG9naWNhbEJvdHRvbSAtIHJlcGFpbnRMb2dpY2Fs
VG9wLCByZXBhaW50TG9naWNhbFJpZ2h0IC0gcmVwYWludExvZ2ljYWxMZWZ0KTsKIAogICAgICAg
ICAvLyBUaGUgcmVwYWludCByZWN0IG1heSBiZSBzcGxpdCBhY3Jvc3MgY29sdW1ucywgaW4gd2hp
Y2ggY2FzZSBhZGp1c3RSZWN0Rm9yQ29sdW1ucygpIHdpbGwgcmV0dXJuIHRoZSB1bmlvbi4KICAg
ICAgICAgYWRqdXN0UmVjdEZvckNvbHVtbnMocmVwYWludFJlY3QpOwpAQCAtMTM1MSw2ICsxMzUx
LDcgQEAgdm9pZCBSZW5kZXJCbG9jazo6bGF5b3V0QmxvY2soYm9vbCByZWxheQogCiAgICAgICAg
IC8vIE1ha2Ugc3VyZSB0aGUgcmVjdCBpcyBzdGlsbCBub24tZW1wdHkgYWZ0ZXIgaW50ZXJzZWN0
aW5nIGZvciBvdmVyZmxvdyBhYm92ZQogICAgICAgICBpZiAoIXJlcGFpbnRSZWN0LmlzRW1wdHko
KSkgeworICAgICAgICAgICAgLy8gRklYTUU6IE1pZ2h0IG5lZWQgcm91bmRpbmcgb25jZSB3ZSBz
d2l0Y2ggdG8gZmxvYXQsIHNlZSBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9NjQwMjEKICAgICAgICAgICAgIHJlcGFpbnRSZWN0YW5nbGUocmVwYWludFJlY3QpOyAvLyBX
ZSBuZWVkIHRvIGRvIGEgcGFydGlhbCByZXBhaW50IG9mIG91ciBjb250ZW50LgogICAgICAgICAg
ICAgaWYgKGhhc1JlZmxlY3Rpb24oKSkKICAgICAgICAgICAgICAgICByZXBhaW50UmVjdGFuZ2xl
KHJlZmxlY3RlZFJlY3QocmVwYWludFJlY3QpKTsKQEAgLTEzNzYsMjYgKzEzNzcsMjYgQEAgdm9p
ZCBSZW5kZXJCbG9jazo6YWRkT3ZlcmZsb3dGcm9tQ2hpbGRyZQogICAgICAgICBpZiAoY29sdW1u
Q291bnQoY29sSW5mbykpIHsKICAgICAgICAgICAgIExheW91dFJlY3QgbGFzdFJlY3QgPSBjb2x1
bW5SZWN0QXQoY29sSW5mbywgY29sdW1uQ291bnQoY29sSW5mbykgLSAxKTsKICAgICAgICAgICAg
IGlmIChpc0hvcml6b250YWxXcml0aW5nTW9kZSgpKSB7Ci0gICAgICAgICAgICAgICAgaW50IG92
ZXJmbG93TGVmdCA9ICFzdHlsZSgpLT5pc0xlZnRUb1JpZ2h0RGlyZWN0aW9uKCkgPyBtaW4oMCwg
bGFzdFJlY3QueCgpKSA6IDA7Ci0gICAgICAgICAgICAgICAgaW50IG92ZXJmbG93UmlnaHQgPSBz
dHlsZSgpLT5pc0xlZnRUb1JpZ2h0RGlyZWN0aW9uKCkgPyBtYXgod2lkdGgoKSwgbGFzdFJlY3Qu
bWF4WCgpKSA6IDA7Ci0gICAgICAgICAgICAgICAgaW50IG92ZXJmbG93SGVpZ2h0ID0gYm9yZGVy
QmVmb3JlKCkgKyBwYWRkaW5nQmVmb3JlKCkgKyBjb2xJbmZvLT5jb2x1bW5IZWlnaHQoKTsKLSAg
ICAgICAgICAgICAgICBhZGRMYXlvdXRPdmVyZmxvdyhJbnRSZWN0KG92ZXJmbG93TGVmdCwgMCwg
b3ZlcmZsb3dSaWdodCAtIG92ZXJmbG93TGVmdCwgb3ZlcmZsb3dIZWlnaHQpKTsKKyAgICAgICAg
ICAgICAgICBMYXlvdXRVbml0IG92ZXJmbG93TGVmdCA9ICFzdHlsZSgpLT5pc0xlZnRUb1JpZ2h0
RGlyZWN0aW9uKCkgPyBtaW48TGF5b3V0VW5pdD4oMCwgbGFzdFJlY3QueCgpKSA6IDA7CisgICAg
ICAgICAgICAgICAgTGF5b3V0VW5pdCBvdmVyZmxvd1JpZ2h0ID0gc3R5bGUoKS0+aXNMZWZ0VG9S
aWdodERpcmVjdGlvbigpID8gbWF4KHdpZHRoKCksIGxhc3RSZWN0Lm1heFgoKSkgOiAwOworICAg
ICAgICAgICAgICAgIExheW91dFVuaXQgb3ZlcmZsb3dIZWlnaHQgPSBib3JkZXJCZWZvcmUoKSAr
IHBhZGRpbmdCZWZvcmUoKSArIGNvbEluZm8tPmNvbHVtbkhlaWdodCgpOworICAgICAgICAgICAg
ICAgIGFkZExheW91dE92ZXJmbG93KExheW91dFJlY3Qob3ZlcmZsb3dMZWZ0LCAwLCBvdmVyZmxv
d1JpZ2h0IC0gb3ZlcmZsb3dMZWZ0LCBvdmVyZmxvd0hlaWdodCkpOwogICAgICAgICAgICAgICAg
IGlmICghaGFzT3ZlcmZsb3dDbGlwKCkpCi0gICAgICAgICAgICAgICAgICAgIGFkZFZpc3VhbE92
ZXJmbG93KEludFJlY3Qob3ZlcmZsb3dMZWZ0LCAwLCBvdmVyZmxvd1JpZ2h0IC0gb3ZlcmZsb3dM
ZWZ0LCBvdmVyZmxvd0hlaWdodCkpOworICAgICAgICAgICAgICAgICAgICBhZGRWaXN1YWxPdmVy
ZmxvdyhMYXlvdXRSZWN0KG92ZXJmbG93TGVmdCwgMCwgb3ZlcmZsb3dSaWdodCAtIG92ZXJmbG93
TGVmdCwgb3ZlcmZsb3dIZWlnaHQpKTsKICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAg
ICAgICAgTGF5b3V0UmVjdCBsYXN0UmVjdCA9IGNvbHVtblJlY3RBdChjb2xJbmZvLCBjb2x1bW5D
b3VudChjb2xJbmZvKSAtIDEpOwotICAgICAgICAgICAgICAgIGludCBvdmVyZmxvd1RvcCA9ICFz
dHlsZSgpLT5pc0xlZnRUb1JpZ2h0RGlyZWN0aW9uKCkgPyBtaW4oMCwgbGFzdFJlY3QueSgpKSA6
IDA7Ci0gICAgICAgICAgICAgICAgaW50IG92ZXJmbG93Qm90dG9tID0gc3R5bGUoKS0+aXNMZWZ0
VG9SaWdodERpcmVjdGlvbigpID8gbWF4KGhlaWdodCgpLCBsYXN0UmVjdC5tYXhZKCkpIDogMDsK
LSAgICAgICAgICAgICAgICBpbnQgb3ZlcmZsb3dXaWR0aCA9IGJvcmRlckJlZm9yZSgpICsgcGFk
ZGluZ0JlZm9yZSgpICsgY29sSW5mby0+Y29sdW1uSGVpZ2h0KCk7Ci0gICAgICAgICAgICAgICAg
YWRkTGF5b3V0T3ZlcmZsb3coSW50UmVjdCgwLCBvdmVyZmxvd1RvcCwgb3ZlcmZsb3dXaWR0aCwg
b3ZlcmZsb3dCb3R0b20gLSBvdmVyZmxvd1RvcCkpOworICAgICAgICAgICAgICAgIExheW91dFVu
aXQgb3ZlcmZsb3dUb3AgPSAhc3R5bGUoKS0+aXNMZWZ0VG9SaWdodERpcmVjdGlvbigpID8gbWlu
PExheW91dFVuaXQ+KDAsIGxhc3RSZWN0LnkoKSkgOiAwOworICAgICAgICAgICAgICAgIExheW91
dFVuaXQgb3ZlcmZsb3dCb3R0b20gPSBzdHlsZSgpLT5pc0xlZnRUb1JpZ2h0RGlyZWN0aW9uKCkg
PyBtYXgoaGVpZ2h0KCksIGxhc3RSZWN0Lm1heFkoKSkgOiAwOworICAgICAgICAgICAgICAgIExh
eW91dFVuaXQgb3ZlcmZsb3dXaWR0aCA9IGJvcmRlckJlZm9yZSgpICsgcGFkZGluZ0JlZm9yZSgp
ICsgY29sSW5mby0+Y29sdW1uSGVpZ2h0KCk7CisgICAgICAgICAgICAgICAgYWRkTGF5b3V0T3Zl
cmZsb3coTGF5b3V0UmVjdCgwLCBvdmVyZmxvd1RvcCwgb3ZlcmZsb3dXaWR0aCwgb3ZlcmZsb3dC
b3R0b20gLSBvdmVyZmxvd1RvcCkpOwogICAgICAgICAgICAgICAgIGlmICghaGFzT3ZlcmZsb3dD
bGlwKCkpCi0gICAgICAgICAgICAgICAgICAgIGFkZFZpc3VhbE92ZXJmbG93KEludFJlY3QoMCwg
b3ZlcmZsb3dUb3AsIG92ZXJmbG93V2lkdGgsIG92ZXJmbG93Qm90dG9tIC0gb3ZlcmZsb3dUb3Ap
KTsKKyAgICAgICAgICAgICAgICAgICAgYWRkVmlzdWFsT3ZlcmZsb3coTGF5b3V0UmVjdCgwLCBv
dmVyZmxvd1RvcCwgb3ZlcmZsb3dXaWR0aCwgb3ZlcmZsb3dCb3R0b20gLSBvdmVyZmxvd1RvcCkp
OwogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgfQogfQogCi12b2lkIFJlbmRlckJsb2Nr
Ojpjb21wdXRlT3ZlcmZsb3coaW50IG9sZENsaWVudEFmdGVyRWRnZSwgYm9vbCByZWNvbXB1dGVG
bG9hdHMpCit2b2lkIFJlbmRlckJsb2NrOjpjb21wdXRlT3ZlcmZsb3coTGF5b3V0VW5pdCBvbGRD
bGllbnRBZnRlckVkZ2UsIGJvb2wgcmVjb21wdXRlRmxvYXRzKQogewogICAgIC8vIEFkZCBvdmVy
ZmxvdyBmcm9tIGNoaWxkcmVuLgogICAgIGFkZE92ZXJmbG93RnJvbUNoaWxkcmVuKCk7CkBAIC0x
NDEwLDEyICsxNDExLDEyIEBAIHZvaWQgUmVuZGVyQmxvY2s6OmNvbXB1dGVPdmVyZmxvdyhpbnQg
b2wKICAgICAgICAgLy8gV2hlbiB3ZSBoYXZlIG92ZXJmbG93IGNsaXAsIHByb3BhZ2F0ZSB0aGUg
b3JpZ2luYWwgc3BpbGxvdXQgc2luY2UgaXQgd2lsbCBpbmNsdWRlIGNvbGxhcHNlZCBib3R0b20g
bWFyZ2lucwogICAgICAgICAvLyBhbmQgYm90dG9tIHBhZGRpbmcuICBTZXQgdGhlIGF4aXMgd2Ug
ZG9uJ3QgY2FyZSBhYm91dCB0byBiZSAxLCBzaW5jZSB3ZSB3YW50IHRoaXMgb3ZlcmZsb3cgdG8g
YWx3YXlzCiAgICAgICAgIC8vIGJlIGNvbnNpZGVyZWQgcmVhY2hhYmxlLgotICAgICAgICBJbnRS
ZWN0IGNsaWVudFJlY3QoY2xpZW50Qm94UmVjdCgpKTsKLSAgICAgICAgSW50UmVjdCByZWN0VG9B
cHBseTsKKyAgICAgICAgTGF5b3V0UmVjdCBjbGllbnRSZWN0KGNsaWVudEJveFJlY3QoKSk7Cisg
ICAgICAgIExheW91dFJlY3QgcmVjdFRvQXBwbHk7CiAgICAgICAgIGlmIChpc0hvcml6b250YWxX
cml0aW5nTW9kZSgpKQotICAgICAgICAgICAgcmVjdFRvQXBwbHkgPSBJbnRSZWN0KGNsaWVudFJl
Y3QueCgpLCBjbGllbnRSZWN0LnkoKSwgMSwgbWF4KDAsIG9sZENsaWVudEFmdGVyRWRnZSAtIGNs
aWVudFJlY3QueSgpKSk7CisgICAgICAgICAgICByZWN0VG9BcHBseSA9IExheW91dFJlY3QoY2xp
ZW50UmVjdC54KCksIGNsaWVudFJlY3QueSgpLCAxLCBtYXgoMCwgb2xkQ2xpZW50QWZ0ZXJFZGdl
IC0gY2xpZW50UmVjdC55KCkpKTsKICAgICAgICAgZWxzZQotICAgICAgICAgICAgcmVjdFRvQXBw
bHkgPSBJbnRSZWN0KGNsaWVudFJlY3QueCgpLCBjbGllbnRSZWN0LnkoKSwgbWF4KDAsIG9sZENs
aWVudEFmdGVyRWRnZSAtIGNsaWVudFJlY3QueCgpKSwgMSk7CisgICAgICAgICAgICByZWN0VG9B
cHBseSA9IExheW91dFJlY3QoY2xpZW50UmVjdC54KCksIGNsaWVudFJlY3QueSgpLCBtYXgoMCwg
b2xkQ2xpZW50QWZ0ZXJFZGdlIC0gY2xpZW50UmVjdC54KCkpLCAxKTsKICAgICAgICAgYWRkTGF5
b3V0T3ZlcmZsb3cocmVjdFRvQXBwbHkpOwogICAgIH0KICAgICAgICAgCkBAIC0xNDc2LDEyICsx
NDc3LDEyIEBAIHZvaWQgUmVuZGVyQmxvY2s6OmFkanVzdFBvc2l0aW9uZWRCbG9jaygKICAgICAg
ICAgCiAgICAgY2hpbGRMYXllci0+c2V0U3RhdGljSW5saW5lUG9zaXRpb24oYm9yZGVyQW5kUGFk
ZGluZ1N0YXJ0KCkpOwogCi0gICAgaW50IGxvZ2ljYWxUb3AgPSBsb2dpY2FsSGVpZ2h0KCk7Cisg
ICAgTGF5b3V0VW5pdCBsb2dpY2FsVG9wID0gbG9naWNhbEhlaWdodCgpOwogICAgIGlmICghbWFy
Z2luSW5mby5jYW5Db2xsYXBzZVdpdGhNYXJnaW5CZWZvcmUoKSkgewogICAgICAgICBjaGlsZC0+
Y29tcHV0ZUJsb2NrRGlyZWN0aW9uTWFyZ2lucyh0aGlzKTsKLSAgICAgICAgaW50IG1hcmdpbkJl
Zm9yZSA9IG1hcmdpbkJlZm9yZUZvckNoaWxkKGNoaWxkKTsKLSAgICAgICAgaW50IGNvbGxhcHNl
ZEJlZm9yZVBvcyA9IG1hcmdpbkluZm8ucG9zaXRpdmVNYXJnaW4oKTsKLSAgICAgICAgaW50IGNv
bGxhcHNlZEJlZm9yZU5lZyA9IG1hcmdpbkluZm8ubmVnYXRpdmVNYXJnaW4oKTsKKyAgICAgICAg
TGF5b3V0VW5pdCBtYXJnaW5CZWZvcmUgPSBtYXJnaW5CZWZvcmVGb3JDaGlsZChjaGlsZCk7Cisg
ICAgICAgIExheW91dFVuaXQgY29sbGFwc2VkQmVmb3JlUG9zID0gbWFyZ2luSW5mby5wb3NpdGl2
ZU1hcmdpbigpOworICAgICAgICBMYXlvdXRVbml0IGNvbGxhcHNlZEJlZm9yZU5lZyA9IG1hcmdp
bkluZm8ubmVnYXRpdmVNYXJnaW4oKTsKICAgICAgICAgaWYgKG1hcmdpbkJlZm9yZSA+IDApIHsK
ICAgICAgICAgICAgIGlmIChtYXJnaW5CZWZvcmUgPiBjb2xsYXBzZWRCZWZvcmVQb3MpCiAgICAg
ICAgICAgICAgICAgY29sbGFwc2VkQmVmb3JlUG9zID0gbWFyZ2luQmVmb3JlOwpAQCAtMTUxMyw3
ICsxNTE0LDcgQEAgdm9pZCBSZW5kZXJCbG9jazo6YWRqdXN0RmxvYXRpbmdCbG9jayhjbwogICAg
IC8vIGZvciBieSBzaW1wbHkgY2FsbGluZyBjYW5Db2xsYXBzZVdpdGhNYXJnaW5CZWZvcmUuICBT
ZWUKICAgICAvLyBodHRwOi8vd3d3LmhpeGllLmNoL3Rlc3RzL2FkaG9jL2Nzcy9ib3gvYmxvY2sv
bWFyZ2luLWNvbGxhcHNlLzA0Ni5odG1sIGZvcgogICAgIC8vIGFuIGV4YW1wbGUgb2YgdGhpcyBz
Y2VuYXJpby4KLSAgICBpbnQgbWFyZ2luT2Zmc2V0ID0gbWFyZ2luSW5mby5jYW5Db2xsYXBzZVdp
dGhNYXJnaW5CZWZvcmUoKSA/IDAgOiBtYXJnaW5JbmZvLm1hcmdpbigpOworICAgIExheW91dFVu
aXQgbWFyZ2luT2Zmc2V0ID0gbWFyZ2luSW5mby5jYW5Db2xsYXBzZVdpdGhNYXJnaW5CZWZvcmUo
KSA/IDAgOiBtYXJnaW5JbmZvLm1hcmdpbigpOwogICAgIHNldExvZ2ljYWxIZWlnaHQobG9naWNh
bEhlaWdodCgpICsgbWFyZ2luT2Zmc2V0KTsKICAgICBwb3NpdGlvbk5ld0Zsb2F0cygpOwogICAg
IHNldExvZ2ljYWxIZWlnaHQobG9naWNhbEhlaWdodCgpIC0gbWFyZ2luT2Zmc2V0KTsKQEAgLTE2
MDksMTQgKzE2MTAsMTQgQEAgYm9vbCBSZW5kZXJCbG9jazo6aGFuZGxlUnVuSW5DaGlsZChSZW5k
ZQogICAgIHJldHVybiB0cnVlOwogfQogCi1pbnQgUmVuZGVyQmxvY2s6OmNvbGxhcHNlTWFyZ2lu
cyhSZW5kZXJCb3gqIGNoaWxkLCBNYXJnaW5JbmZvJiBtYXJnaW5JbmZvKQorTGF5b3V0VW5pdCBS
ZW5kZXJCbG9jazo6Y29sbGFwc2VNYXJnaW5zKFJlbmRlckJveCogY2hpbGQsIE1hcmdpbkluZm8m
IG1hcmdpbkluZm8pCiB7CiAgICAgLy8gR2V0IHRoZSBmb3VyIG1hcmdpbiB2YWx1ZXMgZm9yIHRo
ZSBjaGlsZCBhbmQgY2FjaGUgdGhlbS4KICAgICBjb25zdCBNYXJnaW5WYWx1ZXMgY2hpbGRNYXJn
aW5zID0gbWFyZ2luVmFsdWVzRm9yQ2hpbGQoY2hpbGQpOwogCiAgICAgLy8gR2V0IG91ciBtYXgg
cG9zIGFuZCBuZWcgdG9wIG1hcmdpbnMuCi0gICAgaW50IHBvc1RvcCA9IGNoaWxkTWFyZ2lucy5w
b3NpdGl2ZU1hcmdpbkJlZm9yZSgpOwotICAgIGludCBuZWdUb3AgPSBjaGlsZE1hcmdpbnMubmVn
YXRpdmVNYXJnaW5CZWZvcmUoKTsKKyAgICBMYXlvdXRVbml0IHBvc1RvcCA9IGNoaWxkTWFyZ2lu
cy5wb3NpdGl2ZU1hcmdpbkJlZm9yZSgpOworICAgIExheW91dFVuaXQgbmVnVG9wID0gY2hpbGRN
YXJnaW5zLm5lZ2F0aXZlTWFyZ2luQmVmb3JlKCk7CiAKICAgICAvLyBGb3Igc2VsZi1jb2xsYXBz
aW5nIGJsb2NrcywgY29sbGFwc2Ugb3VyIGJvdHRvbSBtYXJnaW5zIGludG8gb3VyCiAgICAgLy8g
dG9wIHRvIGdldCBuZXcgcG9zVG9wIGFuZCBuZWdUb3AgdmFsdWVzLgpAQCAtMTY1NywxNCArMTY1
OCwxNCBAQCBpbnQgUmVuZGVyQmxvY2s6OmNvbGxhcHNlTWFyZ2lucyhSZW5kZXJCCiAgICAgaWYg
KG1hcmdpbkluZm8ucXVpcmtDb250YWluZXIoKSAmJiBtYXJnaW5JbmZvLmF0QmVmb3JlU2lkZU9m
QmxvY2soKSAmJiAocG9zVG9wIC0gbmVnVG9wKSkKICAgICAgICAgbWFyZ2luSW5mby5zZXRNYXJn
aW5CZWZvcmVRdWlyayh0b3BRdWlyayk7CiAKLSAgICBpbnQgYmVmb3JlQ29sbGFwc2VMb2dpY2Fs
VG9wID0gbG9naWNhbEhlaWdodCgpOwotICAgIGludCBsb2dpY2FsVG9wID0gYmVmb3JlQ29sbGFw
c2VMb2dpY2FsVG9wOworICAgIExheW91dFVuaXQgYmVmb3JlQ29sbGFwc2VMb2dpY2FsVG9wID0g
bG9naWNhbEhlaWdodCgpOworICAgIExheW91dFVuaXQgbG9naWNhbFRvcCA9IGJlZm9yZUNvbGxh
cHNlTG9naWNhbFRvcDsKICAgICBpZiAoY2hpbGQtPmlzU2VsZkNvbGxhcHNpbmdCbG9jaygpKSB7
CiAgICAgICAgIC8vIFRoaXMgY2hpbGQgaGFzIG5vIGhlaWdodC4gIFdlIG5lZWQgdG8gY29tcHV0
ZSBvdXIKICAgICAgICAgLy8gcG9zaXRpb24gYmVmb3JlIHdlIGNvbGxhcHNlIHRoZSBjaGlsZCdz
IG1hcmdpbnMgdG9nZXRoZXIsCiAgICAgICAgIC8vIHNvIHRoYXQgd2UgY2FuIGdldCBhbiBhY2N1
cmF0ZSBwb3NpdGlvbiBmb3IgdGhlIHplcm8taGVpZ2h0IGJsb2NrLgotICAgICAgICBpbnQgY29s
bGFwc2VkQmVmb3JlUG9zID0gbWF4KG1hcmdpbkluZm8ucG9zaXRpdmVNYXJnaW4oKSwgY2hpbGRN
YXJnaW5zLnBvc2l0aXZlTWFyZ2luQmVmb3JlKCkpOwotICAgICAgICBpbnQgY29sbGFwc2VkQmVm
b3JlTmVnID0gbWF4KG1hcmdpbkluZm8ubmVnYXRpdmVNYXJnaW4oKSwgY2hpbGRNYXJnaW5zLm5l
Z2F0aXZlTWFyZ2luQmVmb3JlKCkpOworICAgICAgICBMYXlvdXRVbml0IGNvbGxhcHNlZEJlZm9y
ZVBvcyA9IG1heChtYXJnaW5JbmZvLnBvc2l0aXZlTWFyZ2luKCksIGNoaWxkTWFyZ2lucy5wb3Np
dGl2ZU1hcmdpbkJlZm9yZSgpKTsKKyAgICAgICAgTGF5b3V0VW5pdCBjb2xsYXBzZWRCZWZvcmVO
ZWcgPSBtYXgobWFyZ2luSW5mby5uZWdhdGl2ZU1hcmdpbigpLCBjaGlsZE1hcmdpbnMubmVnYXRp
dmVNYXJnaW5CZWZvcmUoKSk7CiAgICAgICAgIG1hcmdpbkluZm8uc2V0TWFyZ2luKGNvbGxhcHNl
ZEJlZm9yZVBvcywgY29sbGFwc2VkQmVmb3JlTmVnKTsKICAgICAgICAgCiAgICAgICAgIC8vIE5v
dyBjb2xsYXBzZSB0aGUgY2hpbGQncyBtYXJnaW5zIHRvZ2V0aGVyLCB3aGljaCBtZWFucyBleGFt
aW5pbmcgb3VyCkBAIC0xNzA0LDE2ICsxNzA1LDE2IEBAIGludCBSZW5kZXJCbG9jazo6Y29sbGFw
c2VNYXJnaW5zKFJlbmRlckIKICAgICAvLyBjb2xsYXBzZWQgaW50byB0aGUgcGFnZSBlZGdlLgog
ICAgIExheW91dFN0YXRlKiBsYXlvdXRTdGF0ZSA9IHZpZXcoKS0+bGF5b3V0U3RhdGUoKTsKICAg
ICBpZiAobGF5b3V0U3RhdGUtPmlzUGFnaW5hdGVkKCkgJiYgbGF5b3V0U3RhdGUtPnBhZ2VMb2dp
Y2FsSGVpZ2h0KCkgJiYgbG9naWNhbFRvcCA+IGJlZm9yZUNvbGxhcHNlTG9naWNhbFRvcCkgewot
ICAgICAgICBpbnQgb2xkTG9naWNhbFRvcCA9IGxvZ2ljYWxUb3A7CisgICAgICAgIExheW91dFVu
aXQgb2xkTG9naWNhbFRvcCA9IGxvZ2ljYWxUb3A7CiAgICAgICAgIGxvZ2ljYWxUb3AgPSBtaW4o
bG9naWNhbFRvcCwgbmV4dFBhZ2VMb2dpY2FsVG9wRXhjbHVkaW5nQm91bmRhcnlQb2ludChiZWZv
cmVDb2xsYXBzZUxvZ2ljYWxUb3ApKTsKICAgICAgICAgc2V0TG9naWNhbEhlaWdodChsb2dpY2Fs
SGVpZ2h0KCkgKyAobG9naWNhbFRvcCAtIG9sZExvZ2ljYWxUb3ApKTsKICAgICB9CiAgICAgcmV0
dXJuIGxvZ2ljYWxUb3A7CiB9CiAKLWludCBSZW5kZXJCbG9jazo6Y2xlYXJGbG9hdHNJZk5lZWRl
ZChSZW5kZXJCb3gqIGNoaWxkLCBNYXJnaW5JbmZvJiBtYXJnaW5JbmZvLCBpbnQgb2xkVG9wUG9z
TWFyZ2luLCBpbnQgb2xkVG9wTmVnTWFyZ2luLCBpbnQgeVBvcykKK0xheW91dFVuaXQgUmVuZGVy
QmxvY2s6OmNsZWFyRmxvYXRzSWZOZWVkZWQoUmVuZGVyQm94KiBjaGlsZCwgTWFyZ2luSW5mbyYg
bWFyZ2luSW5mbywgaW50IG9sZFRvcFBvc01hcmdpbiwgaW50IG9sZFRvcE5lZ01hcmdpbiwgaW50
IHlQb3MpCiB7Ci0gICAgaW50IGhlaWdodEluY3JlYXNlID0gZ2V0Q2xlYXJEZWx0YShjaGlsZCwg
eVBvcyk7CisgICAgTGF5b3V0VW5pdCBoZWlnaHRJbmNyZWFzZSA9IGdldENsZWFyRGVsdGEoY2hp
bGQsIHlQb3MpOwogICAgIGlmICghaGVpZ2h0SW5jcmVhc2UpCiAgICAgICAgIHJldHVybiB5UG9z
OwogCkBAIC0xNzQyLDcgKzE3NDMsNyBAQCBpbnQgUmVuZGVyQmxvY2s6OmNsZWFyRmxvYXRzSWZO
ZWVkZWQoUmVuCiAgICAgICAgIAogICAgICAgICAvLyBBZGp1c3Qgb3VyIGhlaWdodCBzdWNoIHRo
YXQgd2UgYXJlIHJlYWR5IHRvIGJlIGNvbGxhcHNlZCB3aXRoIHN1YnNlcXVlbnQgc2libGluZ3Mg
KG9yIHRoZSBib3R0b20KICAgICAgICAgLy8gb2YgdGhlIHBhcmVudCBibG9jaykuCi0gICAgICAg
IHNldExvZ2ljYWxIZWlnaHQoY2hpbGQtPnkoKSAtIG1heCgwLCBtYXJnaW5JbmZvLm1hcmdpbigp
KSk7CisgICAgICAgIHNldExvZ2ljYWxIZWlnaHQoY2hpbGQtPnkoKSAtIG1heDxMYXlvdXRVbml0
PigwLCBtYXJnaW5JbmZvLm1hcmdpbigpKSk7CiAgICAgfSBlbHNlCiAgICAgICAgIC8vIEluY3Jl
YXNlIG91ciBoZWlnaHQgYnkgdGhlIGFtb3VudCB3ZSBoYWQgdG8gY2xlYXIuCiAgICAgICAgIHNl
dExvZ2ljYWxIZWlnaHQoaGVpZ2h0KCkgKyBoZWlnaHRJbmNyZWFzZSk7CkBAIC0xNzYwLDEzICsx
NzYxLDEzIEBAIGludCBSZW5kZXJCbG9jazo6Y2xlYXJGbG9hdHNJZk5lZWRlZChSZW4KICAgICBy
ZXR1cm4geVBvcyArIGhlaWdodEluY3JlYXNlOwogfQogCi1pbnQgUmVuZGVyQmxvY2s6OmVzdGlt
YXRlTG9naWNhbFRvcFBvc2l0aW9uKFJlbmRlckJveCogY2hpbGQsIGNvbnN0IE1hcmdpbkluZm8m
IG1hcmdpbkluZm8pCitMYXlvdXRVbml0IFJlbmRlckJsb2NrOjplc3RpbWF0ZUxvZ2ljYWxUb3BQ
b3NpdGlvbihSZW5kZXJCb3gqIGNoaWxkLCBjb25zdCBNYXJnaW5JbmZvJiBtYXJnaW5JbmZvKQog
ewogICAgIC8vIEZJWE1FOiBXZSBuZWVkIHRvIGVsaW1pbmF0ZSB0aGUgZXN0aW1hdGlvbiBvZiB2
ZXJ0aWNhbCBwb3NpdGlvbiwgYmVjYXVzZSB3aGVuIGl0J3Mgd3Jvbmcgd2Ugc29tZXRpbWVzIHRy
aWdnZXIgYSBwYXRob2xvZ2ljYWwKICAgICAvLyByZWxheW91dCBpZiB0aGVyZSBhcmUgaW50cnVk
aW5nIGZsb2F0cy4KLSAgICBpbnQgbG9naWNhbFRvcEVzdGltYXRlID0gbG9naWNhbEhlaWdodCgp
OworICAgIExheW91dFVuaXQgbG9naWNhbFRvcEVzdGltYXRlID0gbG9naWNhbEhlaWdodCgpOwog
ICAgIGlmICghbWFyZ2luSW5mby5jYW5Db2xsYXBzZVdpdGhNYXJnaW5CZWZvcmUoKSkgewotICAg
ICAgICBpbnQgY2hpbGRNYXJnaW5CZWZvcmUgPSBjaGlsZC0+c2VsZk5lZWRzTGF5b3V0KCkgPyBt
YXJnaW5CZWZvcmVGb3JDaGlsZChjaGlsZCkgOiBjb2xsYXBzZWRNYXJnaW5CZWZvcmVGb3JDaGls
ZChjaGlsZCk7CisgICAgICAgIExheW91dFVuaXQgY2hpbGRNYXJnaW5CZWZvcmUgPSBjaGlsZC0+
c2VsZk5lZWRzTGF5b3V0KCkgPyBtYXJnaW5CZWZvcmVGb3JDaGlsZChjaGlsZCkgOiBjb2xsYXBz
ZWRNYXJnaW5CZWZvcmVGb3JDaGlsZChjaGlsZCk7CiAgICAgICAgIGxvZ2ljYWxUb3BFc3RpbWF0
ZSArPSBtYXgobWFyZ2luSW5mby5tYXJnaW4oKSwgY2hpbGRNYXJnaW5CZWZvcmUpOwogICAgIH0K
IApAQCAtMTc5NCwyMSArMTc5NSwyMiBAQCBpbnQgUmVuZGVyQmxvY2s6OmVzdGltYXRlTG9naWNh
bFRvcFBvc2l0CiAKIHZvaWQgUmVuZGVyQmxvY2s6OmRldGVybWluZUxvZ2ljYWxMZWZ0UG9zaXRp
b25Gb3JDaGlsZChSZW5kZXJCb3gqIGNoaWxkKQogewotICAgIGludCBzdGFydFBvc2l0aW9uID0g
Ym9yZGVyU3RhcnQoKSArIHBhZGRpbmdTdGFydCgpOwotICAgIGludCB0b3RhbEF2YWlsYWJsZUxv
Z2ljYWxXaWR0aCA9IGJvcmRlckFuZFBhZGRpbmdMb2dpY2FsV2lkdGgoKSArIGF2YWlsYWJsZUxv
Z2ljYWxXaWR0aCgpOworICAgIExheW91dFVuaXQgc3RhcnRQb3NpdGlvbiA9IGJvcmRlclN0YXJ0
KCkgKyBwYWRkaW5nU3RhcnQoKTsKKyAgICBMYXlvdXRVbml0IHRvdGFsQXZhaWxhYmxlTG9naWNh
bFdpZHRoID0gYm9yZGVyQW5kUGFkZGluZ0xvZ2ljYWxXaWR0aCgpICsgYXZhaWxhYmxlTG9naWNh
bFdpZHRoKCk7CiAKICAgICAvLyBBZGQgaW4gb3VyIHN0YXJ0IG1hcmdpbi4KLSAgICBpbnQgY2hp
bGRNYXJnaW5TdGFydCA9IG1hcmdpblN0YXJ0Rm9yQ2hpbGQoY2hpbGQpOwotICAgIGludCBuZXdQ
b3NpdGlvbiA9IHN0YXJ0UG9zaXRpb24gKyBjaGlsZE1hcmdpblN0YXJ0OworICAgIExheW91dFVu
aXQgY2hpbGRNYXJnaW5TdGFydCA9IG1hcmdpblN0YXJ0Rm9yQ2hpbGQoY2hpbGQpOworICAgIExh
eW91dFVuaXQgbmV3UG9zaXRpb24gPSBzdGFydFBvc2l0aW9uICsgY2hpbGRNYXJnaW5TdGFydDsK
ICAgICAgICAgCiAgICAgLy8gU29tZSBvYmplY3RzIChlLmcuLCB0YWJsZXMsIGhvcml6b250YWwg
cnVsZXMsIG92ZXJmbG93OmF1dG8gYmxvY2tzKSBhdm9pZCBmbG9hdHMuICBUaGV5IG5lZWQKICAg
ICAvLyB0byBzaGlmdCBvdmVyIGFzIG5lY2Vzc2FyeSB0byBkb2RnZSBhbnkgZmxvYXRzIHRoYXQg
bWlnaHQgZ2V0IGluIHRoZSB3YXkuCiAgICAgaWYgKGNoaWxkLT5hdm9pZHNGbG9hdHMoKSkgewot
ICAgICAgICBpbnQgc3RhcnRPZmYgPSBzdHlsZSgpLT5pc0xlZnRUb1JpZ2h0RGlyZWN0aW9uKCkg
PyBsb2dpY2FsTGVmdE9mZnNldEZvckxpbmUobG9naWNhbEhlaWdodCgpLCBmYWxzZSkgOiB0b3Rh
bEF2YWlsYWJsZUxvZ2ljYWxXaWR0aCAtIGxvZ2ljYWxSaWdodE9mZnNldEZvckxpbmUobG9naWNh
bEhlaWdodCgpLCBmYWxzZSk7CisgICAgICAgIExheW91dFVuaXQgc3RhcnRPZmYgPSBzdHlsZSgp
LT5pc0xlZnRUb1JpZ2h0RGlyZWN0aW9uKCkgPyBsb2dpY2FsTGVmdE9mZnNldEZvckxpbmUobG9n
aWNhbEhlaWdodCgpLCBmYWxzZSkgOiB0b3RhbEF2YWlsYWJsZUxvZ2ljYWxXaWR0aCAtIGxvZ2lj
YWxSaWdodE9mZnNldEZvckxpbmUobG9naWNhbEhlaWdodCgpLCBmYWxzZSk7CiAgICAgICAgIGlm
IChzdHlsZSgpLT50ZXh0QWxpZ24oKSAhPSBXRUJLSVRfQ0VOVEVSICYmICFjaGlsZC0+c3R5bGUo
KS0+bWFyZ2luU3RhcnRVc2luZyhzdHlsZSgpKS5pc0F1dG8oKSkgewogICAgICAgICAgICAgaWYg
KGNoaWxkTWFyZ2luU3RhcnQgPCAwKQogICAgICAgICAgICAgICAgIHN0YXJ0T2ZmICs9IGNoaWxk
TWFyZ2luU3RhcnQ7CiAgICAgICAgICAgICBuZXdQb3NpdGlvbiA9IG1heChuZXdQb3NpdGlvbiwg
c3RhcnRPZmYpOyAvLyBMZXQgdGhlIGZsb2F0IHNpdCBpbiB0aGUgY2hpbGQncyBtYXJnaW4gaWYg
aXQgY2FuIGZpdC4KKyAgICAgICAgLy8gRklYTUU6IE5lZWRzIHRvIHVzZSBlcHNpbG9uIG9uY2Ug
d2Ugc3dpdGNoIHRvIGZsb2F0LCBzZWUgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTY0MDIxCiAgICAgICAgIH0gZWxzZSBpZiAoc3RhcnRPZmYgIT0gc3RhcnRQb3NpdGlv
bikgewogICAgICAgICAgICAgLy8gVGhlIG9iamVjdCBpcyBzaGlmdGluZyB0byB0aGUgImVuZCIg
c2lkZSBvZiB0aGUgYmxvY2suIFRoZSBvYmplY3QgbWlnaHQgYmUgY2VudGVyZWQsIHNvIHdlIG5l
ZWQgdG8KICAgICAgICAgICAgIC8vIHJlY2FsY3VsYXRlIG91ciBpbmxpbmUgZGlyZWN0aW9uIG1h
cmdpbnMuIE5vdGUgdGhhdCB0aGUgY29udGFpbmluZyBibG9jayBjb250ZW50CkBAIC0xODYxLDMz
ICsxODYzLDMzIEBAIHZvaWQgUmVuZGVyQmxvY2s6OmhhbmRsZUFmdGVyU2lkZU9mQmxvY2sKICAg
ICBzZXRDb2xsYXBzZWRCb3R0b21NYXJnaW4obWFyZ2luSW5mbyk7CiB9CiAKLXZvaWQgUmVuZGVy
QmxvY2s6OnNldExvZ2ljYWxMZWZ0Rm9yQ2hpbGQoUmVuZGVyQm94KiBjaGlsZCwgaW50IGxvZ2lj
YWxMZWZ0LCBBcHBseUxheW91dERlbHRhTW9kZSBhcHBseURlbHRhKQordm9pZCBSZW5kZXJCbG9j
azo6c2V0TG9naWNhbExlZnRGb3JDaGlsZChSZW5kZXJCb3gqIGNoaWxkLCBMYXlvdXRVbml0IGxv
Z2ljYWxMZWZ0LCBBcHBseUxheW91dERlbHRhTW9kZSBhcHBseURlbHRhKQogewogICAgIGlmIChp
c0hvcml6b250YWxXcml0aW5nTW9kZSgpKSB7CiAgICAgICAgIGlmIChhcHBseURlbHRhID09IEFw
cGx5TGF5b3V0RGVsdGEpCi0gICAgICAgICAgICB2aWV3KCktPmFkZExheW91dERlbHRhKEludFNp
emUoY2hpbGQtPngoKSAtIGxvZ2ljYWxMZWZ0LCAwKSk7CisgICAgICAgICAgICB2aWV3KCktPmFk
ZExheW91dERlbHRhKExheW91dFNpemUoY2hpbGQtPngoKSAtIGxvZ2ljYWxMZWZ0LCAwKSk7CiAg
ICAgICAgIGNoaWxkLT5zZXRYKGxvZ2ljYWxMZWZ0KTsKICAgICB9IGVsc2UgewogICAgICAgICBp
ZiAoYXBwbHlEZWx0YSA9PSBBcHBseUxheW91dERlbHRhKQotICAgICAgICAgICAgdmlldygpLT5h
ZGRMYXlvdXREZWx0YShJbnRTaXplKDAsIGNoaWxkLT55KCkgLSBsb2dpY2FsTGVmdCkpOworICAg
ICAgICAgICAgdmlldygpLT5hZGRMYXlvdXREZWx0YShMYXlvdXRTaXplKDAsIGNoaWxkLT55KCkg
LSBsb2dpY2FsTGVmdCkpOwogICAgICAgICBjaGlsZC0+c2V0WShsb2dpY2FsTGVmdCk7CiAgICAg
fQogfQogCi12b2lkIFJlbmRlckJsb2NrOjpzZXRMb2dpY2FsVG9wRm9yQ2hpbGQoUmVuZGVyQm94
KiBjaGlsZCwgaW50IGxvZ2ljYWxUb3AsIEFwcGx5TGF5b3V0RGVsdGFNb2RlIGFwcGx5RGVsdGEp
Cit2b2lkIFJlbmRlckJsb2NrOjpzZXRMb2dpY2FsVG9wRm9yQ2hpbGQoUmVuZGVyQm94KiBjaGls
ZCwgTGF5b3V0VW5pdCBsb2dpY2FsVG9wLCBBcHBseUxheW91dERlbHRhTW9kZSBhcHBseURlbHRh
KQogewogICAgIGlmIChpc0hvcml6b250YWxXcml0aW5nTW9kZSgpKSB7CiAgICAgICAgIGlmIChh
cHBseURlbHRhID09IEFwcGx5TGF5b3V0RGVsdGEpCi0gICAgICAgICAgICB2aWV3KCktPmFkZExh
eW91dERlbHRhKEludFNpemUoMCwgY2hpbGQtPnkoKSAtIGxvZ2ljYWxUb3ApKTsKKyAgICAgICAg
ICAgIHZpZXcoKS0+YWRkTGF5b3V0RGVsdGEoTGF5b3V0U2l6ZSgwLCBjaGlsZC0+eSgpIC0gbG9n
aWNhbFRvcCkpOwogICAgICAgICBjaGlsZC0+c2V0WShsb2dpY2FsVG9wKTsKICAgICB9IGVsc2Ug
ewogICAgICAgICBpZiAoYXBwbHlEZWx0YSA9PSBBcHBseUxheW91dERlbHRhKQotICAgICAgICAg
ICAgdmlldygpLT5hZGRMYXlvdXREZWx0YShJbnRTaXplKGNoaWxkLT54KCkgLSBsb2dpY2FsVG9w
LCAwKSk7CisgICAgICAgICAgICB2aWV3KCktPmFkZExheW91dERlbHRhKExheW91dFNpemUoY2hp
bGQtPngoKSAtIGxvZ2ljYWxUb3AsIDApKTsKICAgICAgICAgY2hpbGQtPnNldFgobG9naWNhbFRv
cCk7CiAgICAgfQogfQogCi12b2lkIFJlbmRlckJsb2NrOjpsYXlvdXRCbG9ja0NoaWxkcmVuKGJv
b2wgcmVsYXlvdXRDaGlsZHJlbiwgaW50JiBtYXhGbG9hdExvZ2ljYWxCb3R0b20pCit2b2lkIFJl
bmRlckJsb2NrOjpsYXlvdXRCbG9ja0NoaWxkcmVuKGJvb2wgcmVsYXlvdXRDaGlsZHJlbiwgTGF5
b3V0VW5pdCYgbWF4RmxvYXRMb2dpY2FsQm90dG9tKQogewogICAgIGlmIChnUGVyY2VudEhlaWdo
dERlc2NlbmRhbnRzTWFwKSB7CiAgICAgICAgIGlmIChIYXNoU2V0PFJlbmRlckJveCo+KiBkZXNj
ZW5kYW50cyA9IGdQZXJjZW50SGVpZ2h0RGVzY2VuZGFudHNNYXAtPmdldCh0aGlzKSkgewpAQCAt
MTkwNyw4ICsxOTA5LDggQEAgdm9pZCBSZW5kZXJCbG9jazo6bGF5b3V0QmxvY2tDaGlsZHJlbihi
bwogICAgICAgICB9CiAgICAgfQogCi0gICAgaW50IGJlZm9yZUVkZ2UgPSBib3JkZXJCZWZvcmUo
KSArIHBhZGRpbmdCZWZvcmUoKTsKLSAgICBpbnQgYWZ0ZXJFZGdlID0gYm9yZGVyQWZ0ZXIoKSAr
IHBhZGRpbmdBZnRlcigpICsgc2Nyb2xsYmFyTG9naWNhbEhlaWdodCgpOworICAgIExheW91dFVu
aXQgYmVmb3JlRWRnZSA9IGJvcmRlckJlZm9yZSgpICsgcGFkZGluZ0JlZm9yZSgpOworICAgIExh
eW91dFVuaXQgYWZ0ZXJFZGdlID0gYm9yZGVyQWZ0ZXIoKSArIHBhZGRpbmdBZnRlcigpICsgc2Ny
b2xsYmFyTG9naWNhbEhlaWdodCgpOwogCiAgICAgc2V0TG9naWNhbEhlaWdodChiZWZvcmVFZGdl
KTsKIApAQCAtMTkyMCw3ICsxOTIyLDcgQEAgdm9pZCBSZW5kZXJCbG9jazo6bGF5b3V0QmxvY2tD
aGlsZHJlbihibwogICAgIC8vIEl0IGRvZXNuJ3QgZ2V0IGluY2x1ZGVkIGluIHRoZSBub3JtYWwg
bGF5b3V0IHByb2Nlc3MgYnV0IGlzIGluc3RlYWQgc2tpcHBlZC4KICAgICBSZW5kZXJPYmplY3Qq
IGNoaWxkVG9FeGNsdWRlID0gbGF5b3V0U3BlY2lhbEV4Y2x1ZGVkQ2hpbGQocmVsYXlvdXRDaGls
ZHJlbik7CiAKLSAgICBpbnQgcHJldmlvdXNGbG9hdExvZ2ljYWxCb3R0b20gPSAwOworICAgIExh
eW91dFVuaXQgcHJldmlvdXNGbG9hdExvZ2ljYWxCb3R0b20gPSAwOwogICAgIG1heEZsb2F0TG9n
aWNhbEJvdHRvbSA9IDA7CiAKICAgICBSZW5kZXJCb3gqIG5leHQgPSBmaXJzdENoaWxkQm94KCk7
CkBAIC0xOTU2LDEwICsxOTU4LDEwIEBAIHZvaWQgUmVuZGVyQmxvY2s6OmxheW91dEJsb2NrQ2hp
bGRyZW4oYm8KICAgICBoYW5kbGVBZnRlclNpZGVPZkJsb2NrKGJlZm9yZUVkZ2UsIGFmdGVyRWRn
ZSwgbWFyZ2luSW5mbyk7CiB9CiAKLXZvaWQgUmVuZGVyQmxvY2s6OmxheW91dEJsb2NrQ2hpbGQo
UmVuZGVyQm94KiBjaGlsZCwgTWFyZ2luSW5mbyYgbWFyZ2luSW5mbywgaW50JiBwcmV2aW91c0Zs
b2F0TG9naWNhbEJvdHRvbSwgaW50JiBtYXhGbG9hdExvZ2ljYWxCb3R0b20pCit2b2lkIFJlbmRl
ckJsb2NrOjpsYXlvdXRCbG9ja0NoaWxkKFJlbmRlckJveCogY2hpbGQsIE1hcmdpbkluZm8mIG1h
cmdpbkluZm8sIExheW91dFVuaXQmIHByZXZpb3VzRmxvYXRMb2dpY2FsQm90dG9tLCBMYXlvdXRV
bml0JiBtYXhGbG9hdExvZ2ljYWxCb3R0b20pCiB7Ci0gICAgaW50IG9sZFBvc01hcmdpbkJlZm9y
ZSA9IG1heFBvc2l0aXZlTWFyZ2luQmVmb3JlKCk7Ci0gICAgaW50IG9sZE5lZ01hcmdpbkJlZm9y
ZSA9IG1heE5lZ2F0aXZlTWFyZ2luQmVmb3JlKCk7CisgICAgTGF5b3V0VW5pdCBvbGRQb3NNYXJn
aW5CZWZvcmUgPSBtYXhQb3NpdGl2ZU1hcmdpbkJlZm9yZSgpOworICAgIExheW91dFVuaXQgb2xk
TmVnTWFyZ2luQmVmb3JlID0gbWF4TmVnYXRpdmVNYXJnaW5CZWZvcmUoKTsKIAogICAgIC8vIFRo
ZSBjaGlsZCBpcyBhIG5vcm1hbCBmbG93IG9iamVjdC4gIENvbXB1dGUgdGhlIG1hcmdpbnMgd2Ug
d2lsbCB1c2UgZm9yIGNvbGxhcHNpbmcgbm93LgogICAgIGNoaWxkLT5jb21wdXRlQmxvY2tEaXJl
Y3Rpb25NYXJnaW5zKHRoaXMpOwpAQCAtMTk3MywxNCArMTk3NSwxNCBAQCB2b2lkIFJlbmRlckJs
b2NrOjpsYXlvdXRCbG9ja0NoaWxkKFJlbmRlCiAgICAgLy8gVHJ5IHRvIGd1ZXNzIG91ciBjb3Jy
ZWN0IGxvZ2ljYWwgdG9wIHBvc2l0aW9uLiAgSW4gbW9zdCBjYXNlcyB0aGlzIGd1ZXNzIHdpbGwK
ICAgICAvLyBiZSBjb3JyZWN0LiAgT25seSBpZiB3ZSdyZSB3cm9uZyAod2hlbiB3ZSBjb21wdXRl
IHRoZSByZWFsIGxvZ2ljYWwgdG9wIHBvc2l0aW9uKQogICAgIC8vIHdpbGwgd2UgaGF2ZSB0byBw
b3RlbnRpYWxseSByZWxheW91dC4KLSAgICBpbnQgbG9naWNhbFRvcEVzdGltYXRlID0gZXN0aW1h
dGVMb2dpY2FsVG9wUG9zaXRpb24oY2hpbGQsIG1hcmdpbkluZm8pOworICAgIExheW91dFVuaXQg
bG9naWNhbFRvcEVzdGltYXRlID0gZXN0aW1hdGVMb2dpY2FsVG9wUG9zaXRpb24oY2hpbGQsIG1h
cmdpbkluZm8pOwogCiAgICAgLy8gQ2FjaGUgb3VyIG9sZCByZWN0IHNvIHRoYXQgd2UgY2FuIGRp
cnR5IHRoZSBwcm9wZXIgcmVwYWludCByZWN0cyBpZiB0aGUgY2hpbGQgbW92ZXMuCi0gICAgSW50
UmVjdCBvbGRSZWN0KGNoaWxkLT54KCksIGNoaWxkLT55KCkgLCBjaGlsZC0+d2lkdGgoKSwgY2hp
bGQtPmhlaWdodCgpKTsKLSAgICBpbnQgb2xkTG9naWNhbFRvcCA9IGxvZ2ljYWxUb3BGb3JDaGls
ZChjaGlsZCk7CisgICAgTGF5b3V0UmVjdCBvbGRSZWN0KGNoaWxkLT54KCksIGNoaWxkLT55KCkg
LCBjaGlsZC0+d2lkdGgoKSwgY2hpbGQtPmhlaWdodCgpKTsKKyAgICBMYXlvdXRVbml0IG9sZExv
Z2ljYWxUb3AgPSBsb2dpY2FsVG9wRm9yQ2hpbGQoY2hpbGQpOwogCiAjaWZuZGVmIE5ERUJVRwot
ICAgIEludFNpemUgb2xkTGF5b3V0RGVsdGEgPSB2aWV3KCktPmxheW91dERlbHRhKCk7CisgICAg
TGF5b3V0U2l6ZSBvbGRMYXlvdXREZWx0YSA9IHZpZXcoKS0+bGF5b3V0RGVsdGEoKTsKICNlbmRp
ZgogICAgIC8vIEdvIGFoZWFkIGFuZCBwb3NpdGlvbiB0aGUgY2hpbGQgYXMgdGhvdWdoIGl0IGRp
ZG4ndCBjb2xsYXBzZSB3aXRoIHRoZSB0b3AuCiAgICAgc2V0TG9naWNhbFRvcEZvckNoaWxkKGNo
aWxkLCBsb2dpY2FsVG9wRXN0aW1hdGUsIEFwcGx5TGF5b3V0RGVsdGEpOwpAQCAtMTk5Miw3ICsx
OTk0LDcgQEAgdm9pZCBSZW5kZXJCbG9jazo6bGF5b3V0QmxvY2tDaGlsZChSZW5kZQogICAgIGVs
c2UgaWYgKCFjaGlsZC0+YXZvaWRzRmxvYXRzKCkgfHwgY2hpbGQtPnNocmlua1RvQXZvaWRGbG9h
dHMoKSkgewogICAgICAgICAvLyBJZiBhbiBlbGVtZW50IG1pZ2h0IGJlIGFmZmVjdGVkIGJ5IHRo
ZSBwcmVzZW5jZSBvZiBmbG9hdHMsIHRoZW4gYWx3YXlzIG1hcmsgaXQgZm9yCiAgICAgICAgIC8v
IGxheW91dC4KLSAgICAgICAgaW50IGZiID0gbWF4KHByZXZpb3VzRmxvYXRMb2dpY2FsQm90dG9t
LCBsb3dlc3RGbG9hdExvZ2ljYWxCb3R0b21JbmNsdWRpbmdQb3NpdGlvbmVkRmxvYXRzKCkpOwor
ICAgICAgICBMYXlvdXRVbml0IGZiID0gbWF4KHByZXZpb3VzRmxvYXRMb2dpY2FsQm90dG9tLCBs
b3dlc3RGbG9hdExvZ2ljYWxCb3R0b21JbmNsdWRpbmdQb3NpdGlvbmVkRmxvYXRzKCkpOwogICAg
ICAgICBpZiAoZmIgPiBsb2dpY2FsVG9wRXN0aW1hdGUpCiAgICAgICAgICAgICBtYXJrRGVzY2Vu
ZGFudHNXaXRoRmxvYXRzID0gdHJ1ZTsKICAgICB9CkBAIC0yMDE3LDI0ICsyMDE5LDI0IEBAIHZv
aWQgUmVuZGVyQmxvY2s6OmxheW91dEJsb2NrQ2hpbGQoUmVuZGUKIAogICAgIC8vIE5vdyBkZXRl
cm1pbmUgdGhlIGNvcnJlY3QgeXBvcyBiYXNlZCBvZmYgZXhhbWluYXRpb24gb2YgY29sbGFwc2lu
ZyBtYXJnaW4KICAgICAvLyB2YWx1ZXMuCi0gICAgaW50IGxvZ2ljYWxUb3BCZWZvcmVDbGVhciA9
IGNvbGxhcHNlTWFyZ2lucyhjaGlsZCwgbWFyZ2luSW5mbyk7CisgICAgTGF5b3V0VW5pdCBsb2dp
Y2FsVG9wQmVmb3JlQ2xlYXIgPSBjb2xsYXBzZU1hcmdpbnMoY2hpbGQsIG1hcmdpbkluZm8pOwog
CiAgICAgLy8gTm93IGNoZWNrIGZvciBjbGVhci4KLSAgICBpbnQgbG9naWNhbFRvcEFmdGVyQ2xl
YXIgPSBjbGVhckZsb2F0c0lmTmVlZGVkKGNoaWxkLCBtYXJnaW5JbmZvLCBvbGRQb3NNYXJnaW5C
ZWZvcmUsIG9sZE5lZ01hcmdpbkJlZm9yZSwgbG9naWNhbFRvcEJlZm9yZUNsZWFyKTsKKyAgICBM
YXlvdXRVbml0IGxvZ2ljYWxUb3BBZnRlckNsZWFyID0gY2xlYXJGbG9hdHNJZk5lZWRlZChjaGls
ZCwgbWFyZ2luSW5mbywgb2xkUG9zTWFyZ2luQmVmb3JlLCBvbGROZWdNYXJnaW5CZWZvcmUsIGxv
Z2ljYWxUb3BCZWZvcmVDbGVhcik7CiAgICAgCiAgICAgYm9vbCBwYWdpbmF0ZWQgPSB2aWV3KCkt
PmxheW91dFN0YXRlKCktPmlzUGFnaW5hdGVkKCk7CiAgICAgaWYgKHBhZ2luYXRlZCkgewotICAg
ICAgICBpbnQgb2xkVG9wID0gbG9naWNhbFRvcEFmdGVyQ2xlYXI7CisgICAgICAgIExheW91dFVu
aXQgb2xkVG9wID0gbG9naWNhbFRvcEFmdGVyQ2xlYXI7CiAgICAgICAgIAogICAgICAgICAvLyBJ
ZiB0aGUgb2JqZWN0IGhhcyBhIHBhZ2Ugb3IgY29sdW1uIGJyZWFrIHZhbHVlIG9mICJiZWZvcmUi
LCB0aGVuIHdlIHNob3VsZCBzaGlmdCB0byB0aGUgdG9wIG9mIHRoZSBuZXh0IHBhZ2UuCiAgICAg
ICAgIGxvZ2ljYWxUb3BBZnRlckNsZWFyID0gYXBwbHlCZWZvcmVCcmVhayhjaGlsZCwgbG9naWNh
bFRvcEFmdGVyQ2xlYXIpOwogICAgIAogICAgICAgICAvLyBGb3IgcmVwbGFjZWQgZWxlbWVudHMg
YW5kIHNjcm9sbGVkIGVsZW1lbnRzLCB3ZSB3YW50IHRvIHNoaWZ0IHRoZW0gdG8gdGhlIG5leHQg
cGFnZSBpZiB0aGV5IGRvbid0IGZpdCBvbiB0aGUgY3VycmVudCBvbmUuCi0gICAgICAgIGludCBs
b2dpY2FsVG9wQmVmb3JlVW5zcGxpdHRhYmxlQWRqdXN0bWVudCA9IGxvZ2ljYWxUb3BBZnRlckNs
ZWFyOwotICAgICAgICBpbnQgbG9naWNhbFRvcEFmdGVyVW5zcGxpdHRhYmxlQWRqdXN0bWVudCA9
IGFkanVzdEZvclVuc3BsaXR0YWJsZUNoaWxkKGNoaWxkLCBsb2dpY2FsVG9wQWZ0ZXJDbGVhcik7
CisgICAgICAgIExheW91dFVuaXQgbG9naWNhbFRvcEJlZm9yZVVuc3BsaXR0YWJsZUFkanVzdG1l
bnQgPSBsb2dpY2FsVG9wQWZ0ZXJDbGVhcjsKKyAgICAgICAgTGF5b3V0VW5pdCBsb2dpY2FsVG9w
QWZ0ZXJVbnNwbGl0dGFibGVBZGp1c3RtZW50ID0gYWRqdXN0Rm9yVW5zcGxpdHRhYmxlQ2hpbGQo
Y2hpbGQsIGxvZ2ljYWxUb3BBZnRlckNsZWFyKTsKICAgICAgICAgCi0gICAgICAgIGludCBwYWdp
bmF0aW9uU3RydXQgPSAwOwotICAgICAgICBpbnQgdW5zcGxpdHRhYmxlQWRqdXN0bWVudERlbHRh
ID0gbG9naWNhbFRvcEFmdGVyVW5zcGxpdHRhYmxlQWRqdXN0bWVudCAtIGxvZ2ljYWxUb3BCZWZv
cmVVbnNwbGl0dGFibGVBZGp1c3RtZW50OworICAgICAgICBMYXlvdXRVbml0IHBhZ2luYXRpb25T
dHJ1dCA9IDA7CisgICAgICAgIExheW91dFVuaXQgdW5zcGxpdHRhYmxlQWRqdXN0bWVudERlbHRh
ID0gbG9naWNhbFRvcEFmdGVyVW5zcGxpdHRhYmxlQWRqdXN0bWVudCAtIGxvZ2ljYWxUb3BCZWZv
cmVVbnNwbGl0dGFibGVBZGp1c3RtZW50OwogICAgICAgICBpZiAodW5zcGxpdHRhYmxlQWRqdXN0
bWVudERlbHRhKQogICAgICAgICAgICAgcGFnaW5hdGlvblN0cnV0ID0gdW5zcGxpdHRhYmxlQWRq
dXN0bWVudERlbHRhOwogICAgICAgICBlbHNlIGlmIChjaGlsZFJlbmRlckJsb2NrICYmIGNoaWxk
UmVuZGVyQmxvY2stPnBhZ2luYXRpb25TdHJ1dCgpKQpAQCAtMjA5OSw3ICsyMTAxLDcgQEAgdm9p
ZCBSZW5kZXJCbG9jazo6bGF5b3V0QmxvY2tDaGlsZChSZW5kZQogICAgIGlmIChjaGlsZFJlbmRl
ckJsb2NrICYmIGNoaWxkUmVuZGVyQmxvY2stPmNvbnRhaW5zRmxvYXRzKCkpCiAgICAgICAgIG1h
eEZsb2F0TG9naWNhbEJvdHRvbSA9IG1heChtYXhGbG9hdExvZ2ljYWxCb3R0b20sIGFkZE92ZXJo
YW5naW5nRmxvYXRzKHRvUmVuZGVyQmxvY2soY2hpbGQpLCAtY2hpbGQtPmxvZ2ljYWxMZWZ0KCks
IC1jaGlsZC0+bG9naWNhbFRvcCgpLCAhY2hpbGROZWVkZWRMYXlvdXQpKTsKIAotICAgIEludFNp
emUgY2hpbGRPZmZzZXQoY2hpbGQtPngoKSAtIG9sZFJlY3QueCgpLCBjaGlsZC0+eSgpIC0gb2xk
UmVjdC55KCkpOworICAgIExheW91dFNpemUgY2hpbGRPZmZzZXQoY2hpbGQtPngoKSAtIG9sZFJl
Y3QueCgpLCBjaGlsZC0+eSgpIC0gb2xkUmVjdC55KCkpOwogICAgIGlmIChjaGlsZE9mZnNldC53
aWR0aCgpIHx8IGNoaWxkT2Zmc2V0LmhlaWdodCgpKSB7CiAgICAgICAgIHZpZXcoKS0+YWRkTGF5
b3V0RGVsdGEoY2hpbGRPZmZzZXQpOwogCkBAIC0yMTE3LDExICsyMTE5LDEyIEBAIHZvaWQgUmVu
ZGVyQmxvY2s6OmxheW91dEJsb2NrQ2hpbGQoUmVuZGUKIAogICAgIGlmIChwYWdpbmF0ZWQpIHsK
ICAgICAgICAgLy8gQ2hlY2sgZm9yIGFuIGFmdGVyIHBhZ2UvY29sdW1uIGJyZWFrLgotICAgICAg
ICBpbnQgbmV3SGVpZ2h0ID0gYXBwbHlBZnRlckJyZWFrKGNoaWxkLCBsb2dpY2FsSGVpZ2h0KCks
IG1hcmdpbkluZm8pOworICAgICAgICBMYXlvdXRVbml0IG5ld0hlaWdodCA9IGFwcGx5QWZ0ZXJC
cmVhayhjaGlsZCwgbG9naWNhbEhlaWdodCgpLCBtYXJnaW5JbmZvKTsKICAgICAgICAgaWYgKG5l
d0hlaWdodCAhPSBoZWlnaHQoKSkKICAgICAgICAgICAgIHNldExvZ2ljYWxIZWlnaHQobmV3SGVp
Z2h0KTsKICAgICB9CiAKKyAgICAvLyBGSVhNRTogTmVlZHMgdG8gdXNlIGVwc2lsb24gb25jZSB3
ZSBtb3ZlIHRvIGZsb2F0LCBzZWUgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTY0MDIxCiAgICAgQVNTRVJUKG9sZExheW91dERlbHRhID09IHZpZXcoKS0+bGF5b3V0RGVs
dGEoKSk7CiB9CiAKQEAgLTI2MDksNyArMjYxMiw3IEBAIHZvaWQgUmVuZGVyQmxvY2s6OnBhaW50
T2JqZWN0KFBhaW50SW5mbyYKICAgICB9CiB9CiAKLUludFBvaW50IFJlbmRlckJsb2NrOjpmbGlw
RmxvYXRGb3JXcml0aW5nTW9kZShjb25zdCBGbG9hdGluZ09iamVjdCogY2hpbGQsIGNvbnN0IElu
dFBvaW50JiBwb2ludCkgY29uc3QKK0xheW91dFBvaW50IFJlbmRlckJsb2NrOjpmbGlwRmxvYXRG
b3JXcml0aW5nTW9kZShjb25zdCBGbG9hdGluZ09iamVjdCogY2hpbGQsIGNvbnN0IExheW91dFBv
aW50JiBwb2ludCkgY29uc3QKIHsKICAgICBpZiAoIXN0eWxlKCktPmlzRmxpcHBlZEJsb2Nrc1dy
aXRpbmdNb2RlKCkpCiAgICAgICAgIHJldHVybiBwb2ludDsKQEAgLTI2MTgsOCArMjYyMSw4IEBA
IEludFBvaW50IFJlbmRlckJsb2NrOjpmbGlwRmxvYXRGb3JXcml0aW4KICAgICAvLyBpdCdzIGdv
aW5nIHRvIGdldCBhZGRlZCBiYWNrIGluLiAgV2UgaGlkZSB0aGlzIGNvbXBsaWNhdGlvbiBoZXJl
IHNvIHRoYXQgdGhlIGNhbGxpbmcgY29kZSBsb29rcyBub3JtYWwgZm9yIHRoZSB1bmZsaXBwZWQK
ICAgICAvLyBjYXNlLgogICAgIGlmIChpc0hvcml6b250YWxXcml0aW5nTW9kZSgpKQotICAgICAg
ICByZXR1cm4gSW50UG9pbnQocG9pbnQueCgpLCBwb2ludC55KCkgKyBoZWlnaHQoKSAtIGNoaWxk
LT5yZW5kZXJlcigpLT5oZWlnaHQoKSAtIDIgKiB5UG9zaXRpb25Gb3JGbG9hdEluY2x1ZGluZ01h
cmdpbihjaGlsZCkpOwotICAgIHJldHVybiBJbnRQb2ludChwb2ludC54KCkgKyB3aWR0aCgpIC0g
Y2hpbGQtPndpZHRoKCkgLSAyICogeFBvc2l0aW9uRm9yRmxvYXRJbmNsdWRpbmdNYXJnaW4oY2hp
bGQpLCBwb2ludC55KCkpOworICAgICAgICByZXR1cm4gTGF5b3V0UG9pbnQocG9pbnQueCgpLCBw
b2ludC55KCkgKyBoZWlnaHQoKSAtIGNoaWxkLT5yZW5kZXJlcigpLT5oZWlnaHQoKSAtIDIgKiB5
UG9zaXRpb25Gb3JGbG9hdEluY2x1ZGluZ01hcmdpbihjaGlsZCkpOworICAgIHJldHVybiBMYXlv
dXRQb2ludChwb2ludC54KCkgKyB3aWR0aCgpIC0gY2hpbGQtPndpZHRoKCkgLSAyICogeFBvc2l0
aW9uRm9yRmxvYXRJbmNsdWRpbmdNYXJnaW4oY2hpbGQpLCBwb2ludC55KCkpOwogfQogCiB2b2lk
IFJlbmRlckJsb2NrOjpwYWludEZsb2F0cyhQYWludEluZm8mIHBhaW50SW5mbywgY29uc3QgTGF5
b3V0UG9pbnQmIHBhaW50T2Zmc2V0LCBib29sIHByZXNlcnZlUGhhc2UpCkBAIC00MDIwLDcgKzQw
MjMsNyBAQCBib29sIFJlbmRlckJsb2NrOjppc1BvaW50SW5PdmVyZmxvd0NvbnRyCiAgICAgaWYg
KCFzY3JvbGxzT3ZlcmZsb3coKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgcmV0dXJu
IGxheWVyKCktPmhpdFRlc3RPdmVyZmxvd0NvbnRyb2xzKHJlc3VsdCwgcG9pbnRJbkNvbnRhaW5l
ciAtIHRvU2l6ZShhY2N1bXVsYXRlZE9mZnNldCkpOworICAgIHJldHVybiBsYXllcigpLT5oaXRU
ZXN0T3ZlcmZsb3dDb250cm9scyhyZXN1bHQsIHBvaW50SW5Db250YWluZXIgLSB0b0xheW91dFNp
emUoYWNjdW11bGF0ZWRPZmZzZXQpKTsKIH0KIAogYm9vbCBSZW5kZXJCbG9jazo6bm9kZUF0UG9p
bnQoY29uc3QgSGl0VGVzdFJlcXVlc3QmIHJlcXVlc3QsIEhpdFRlc3RSZXN1bHQmIHJlc3VsdCwg
Y29uc3QgTGF5b3V0UG9pbnQmIHBvaW50SW5Db250YWluZXIsIGNvbnN0IExheW91dFBvaW50JiBh
Y2N1bXVsYXRlZE9mZnNldCwgSGl0VGVzdEFjdGlvbiBoaXRUZXN0QWN0aW9uKQpAQCAtNDA4OSw3
ICs0MDkyLDcgQEAgYm9vbCBSZW5kZXJCbG9jazo6aGl0VGVzdEZsb2F0cyhjb25zdCBIaQogCiAg
ICAgTGF5b3V0UG9pbnQgYWRqdXN0ZWRMb2NhdGlvbiA9IGFjY3VtdWxhdGVkT2Zmc2V0OwogICAg
IGlmIChpc1JlbmRlclZpZXcoKSkgewotICAgICAgICBhZGp1c3RlZExvY2F0aW9uICs9IHRvU2l6
ZSh0b1JlbmRlclZpZXcodGhpcyktPmZyYW1lVmlldygpLT5zY3JvbGxQb3NpdGlvbigpKTsKKyAg
ICAgICAgYWRqdXN0ZWRMb2NhdGlvbiArPSB0b0xheW91dFNpemUodG9SZW5kZXJWaWV3KHRoaXMp
LT5mcmFtZVZpZXcoKS0+c2Nyb2xsUG9zaXRpb24oKSk7CiAgICAgfQogCiAgICAgRmxvYXRpbmdP
YmplY3RTZXQmIGZsb2F0aW5nT2JqZWN0U2V0ID0gbV9mbG9hdGluZ09iamVjdHMtPnNldCgpOwpJ
bmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrLmgJKHJldmlzaW9uIDkyMTMz
KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTkwLDcgKzkwLDcgQEAgcHVibGljOgogICAgIHZpcnR1YWwgdm9pZCByZW1vdmVDaGls
ZChSZW5kZXJPYmplY3QqKTsKIAogICAgIGVudW0gQmxvY2tMYXlvdXRQYXNzIHsgTm9ybWFsTGF5
b3V0UGFzcywgUG9zaXRpb25lZEZsb2F0TGF5b3V0UGFzcyB9OwotICAgIHZpcnR1YWwgdm9pZCBs
YXlvdXRCbG9jayhib29sIHJlbGF5b3V0Q2hpbGRyZW4sIGludCBwYWdlTG9naWNhbEhlaWdodCA9
IDAsIEJsb2NrTGF5b3V0UGFzcyA9IE5vcm1hbExheW91dFBhc3MpOworICAgIHZpcnR1YWwgdm9p
ZCBsYXlvdXRCbG9jayhib29sIHJlbGF5b3V0Q2hpbGRyZW4sIExheW91dFVuaXQgcGFnZUxvZ2lj
YWxIZWlnaHQgPSAwLCBCbG9ja0xheW91dFBhc3MgPSBOb3JtYWxMYXlvdXRQYXNzKTsKIAogICAg
IHZvaWQgaW5zZXJ0UG9zaXRpb25lZE9iamVjdChSZW5kZXJCb3gqKTsKICAgICB2b2lkIHJlbW92
ZVBvc2l0aW9uZWRPYmplY3QoUmVuZGVyQm94Kik7CkBAIC0yMDAsOCArMjAwLDggQEAgcHVibGlj
OgogICAgIGludCBsb2dpY2FsSGVpZ2h0Rm9yQ2hpbGQoUmVuZGVyQm94KiBjaGlsZCkgeyByZXR1
cm4gaXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKSA/IGNoaWxkLT5oZWlnaHQoKSA6IGNoaWxkLT53
aWR0aCgpOyB9CiAgICAgaW50IGxvZ2ljYWxUb3BGb3JDaGlsZChSZW5kZXJCb3gqIGNoaWxkKSB7
IHJldHVybiBpc0hvcml6b250YWxXcml0aW5nTW9kZSgpID8gY2hpbGQtPnkoKSA6IGNoaWxkLT54
KCk7IH0KICAgICBpbnQgbG9naWNhbExlZnRGb3JDaGlsZChSZW5kZXJCb3gqIGNoaWxkKSB7IHJl
dHVybiBpc0hvcml6b250YWxXcml0aW5nTW9kZSgpID8gY2hpbGQtPngoKSA6IGNoaWxkLT55KCk7
IH0KLSAgICB2b2lkIHNldExvZ2ljYWxMZWZ0Rm9yQ2hpbGQoUmVuZGVyQm94KiBjaGlsZCwgaW50
IGxvZ2ljYWxMZWZ0LCBBcHBseUxheW91dERlbHRhTW9kZSA9IERvTm90QXBwbHlMYXlvdXREZWx0
YSk7Ci0gICAgdm9pZCBzZXRMb2dpY2FsVG9wRm9yQ2hpbGQoUmVuZGVyQm94KiBjaGlsZCwgaW50
IGxvZ2ljYWxUb3AsIEFwcGx5TGF5b3V0RGVsdGFNb2RlID0gRG9Ob3RBcHBseUxheW91dERlbHRh
KTsKKyAgICB2b2lkIHNldExvZ2ljYWxMZWZ0Rm9yQ2hpbGQoUmVuZGVyQm94KiBjaGlsZCwgTGF5
b3V0VW5pdCBsb2dpY2FsTGVmdCwgQXBwbHlMYXlvdXREZWx0YU1vZGUgPSBEb05vdEFwcGx5TGF5
b3V0RGVsdGEpOworICAgIHZvaWQgc2V0TG9naWNhbFRvcEZvckNoaWxkKFJlbmRlckJveCogY2hp
bGQsIExheW91dFVuaXQgbG9naWNhbFRvcCwgQXBwbHlMYXlvdXREZWx0YU1vZGUgPSBEb05vdEFw
cGx5TGF5b3V0RGVsdGEpOwogICAgIExheW91dFVuaXQgbWFyZ2luQmVmb3JlRm9yQ2hpbGQoUmVu
ZGVyQm94TW9kZWxPYmplY3QqIGNoaWxkKSBjb25zdDsKICAgICBMYXlvdXRVbml0IG1hcmdpbkFm
dGVyRm9yQ2hpbGQoUmVuZGVyQm94TW9kZWxPYmplY3QqIGNoaWxkKSBjb25zdDsKICAgICBMYXlv
dXRVbml0IG1hcmdpblN0YXJ0Rm9yQ2hpbGQoUmVuZGVyQm94TW9kZWxPYmplY3QqIGNoaWxkKSBj
b25zdDsKQEAgLTMzNSw3ICszMzUsNyBAQCBwcm90ZWN0ZWQ6CiAgICAgYm9vbCBzaW1wbGlmaWVk
TGF5b3V0KCk7CiAgICAgdm9pZCBzaW1wbGlmaWVkTm9ybWFsRmxvd0xheW91dCgpOwogCi0gICAg
dm9pZCBjb21wdXRlT3ZlcmZsb3coaW50IG9sZENsaWVudEFmdGVyRWRnZSwgYm9vbCByZWNvbXB1
dGVGbG9hdHMgPSBmYWxzZSk7CisgICAgdm9pZCBjb21wdXRlT3ZlcmZsb3coTGF5b3V0VW5pdCBv
bGRDbGllbnRBZnRlckVkZ2UsIGJvb2wgcmVjb21wdXRlRmxvYXRzID0gZmFsc2UpOwogICAgIHZp
cnR1YWwgdm9pZCBhZGRPdmVyZmxvd0Zyb21DaGlsZHJlbigpOwogICAgIHZvaWQgYWRkT3ZlcmZs
b3dGcm9tRmxvYXRzKCk7CiAgICAgdm9pZCBhZGRPdmVyZmxvd0Zyb21Qb3NpdGlvbmVkT2JqZWN0
cygpOwpAQCAtMzgxLDcgKzM4MSw3IEBAIHByaXZhdGU6CiAKICAgICB2aXJ0dWFsIHZvaWQgcmVw
YWludE92ZXJoYW5naW5nRmxvYXRzKGJvb2wgcGFpbnRBbGxEZXNjZW5kYW50cyk7CiAKLSAgICB2
b2lkIGxheW91dEJsb2NrQ2hpbGRyZW4oYm9vbCByZWxheW91dENoaWxkcmVuLCBpbnQmIG1heEZs
b2F0TG9naWNhbEJvdHRvbSk7CisgICAgdm9pZCBsYXlvdXRCbG9ja0NoaWxkcmVuKGJvb2wgcmVs
YXlvdXRDaGlsZHJlbiwgTGF5b3V0VW5pdCYgbWF4RmxvYXRMb2dpY2FsQm90dG9tKTsKICAgICB2
b2lkIGxheW91dElubGluZUNoaWxkcmVuKGJvb2wgcmVsYXlvdXRDaGlsZHJlbiwgaW50JiByZXBh
aW50TG9naWNhbFRvcCwgaW50JiByZXBhaW50TG9naWNhbEJvdHRvbSk7CiAgICAgQmlkaVJ1biog
aGFuZGxlVHJhaWxpbmdTcGFjZXMoQmlkaVJ1bkxpc3Q8QmlkaVJ1bj4mLCBCaWRpQ29udGV4dCop
OwogCkBAIC00NzQsMzUgKzQ3NCwzNSBAQCBwcml2YXRlOgogICAgICAgICBib29sIG1faXNQbGFj
ZWQgOiAxOwogICAgIH07CiAKLSAgICBJbnRQb2ludCBmbGlwRmxvYXRGb3JXcml0aW5nTW9kZShj
b25zdCBGbG9hdGluZ09iamVjdCosIGNvbnN0IEludFBvaW50JikgY29uc3Q7CisgICAgTGF5b3V0
UG9pbnQgZmxpcEZsb2F0Rm9yV3JpdGluZ01vZGUoY29uc3QgRmxvYXRpbmdPYmplY3QqLCBjb25z
dCBMYXlvdXRQb2ludCYpIGNvbnN0OwogCi0gICAgaW50IGxvZ2ljYWxUb3BGb3JGbG9hdChjb25z
dCBGbG9hdGluZ09iamVjdCogY2hpbGQpIGNvbnN0IHsgcmV0dXJuIGlzSG9yaXpvbnRhbFdyaXRp
bmdNb2RlKCkgPyBjaGlsZC0+eSgpIDogY2hpbGQtPngoKTsgfQotICAgIGludCBsb2dpY2FsQm90
dG9tRm9yRmxvYXQoY29uc3QgRmxvYXRpbmdPYmplY3QqIGNoaWxkKSBjb25zdCB7IHJldHVybiBp
c0hvcml6b250YWxXcml0aW5nTW9kZSgpID8gY2hpbGQtPm1heFkoKSA6IGNoaWxkLT5tYXhYKCk7
IH0KLSAgICBpbnQgbG9naWNhbExlZnRGb3JGbG9hdChjb25zdCBGbG9hdGluZ09iamVjdCogY2hp
bGQpIGNvbnN0IHsgcmV0dXJuIGlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCkgPyBjaGlsZC0+eCgp
IDogY2hpbGQtPnkoKTsgfQotICAgIGludCBsb2dpY2FsUmlnaHRGb3JGbG9hdChjb25zdCBGbG9h
dGluZ09iamVjdCogY2hpbGQpIGNvbnN0IHsgcmV0dXJuIGlzSG9yaXpvbnRhbFdyaXRpbmdNb2Rl
KCkgPyBjaGlsZC0+bWF4WCgpIDogY2hpbGQtPm1heFkoKTsgfQotICAgIGludCBsb2dpY2FsV2lk
dGhGb3JGbG9hdChjb25zdCBGbG9hdGluZ09iamVjdCogY2hpbGQpIGNvbnN0IHsgcmV0dXJuIGlz
SG9yaXpvbnRhbFdyaXRpbmdNb2RlKCkgPyBjaGlsZC0+d2lkdGgoKSA6IGNoaWxkLT5oZWlnaHQo
KTsgfQotICAgIHZvaWQgc2V0TG9naWNhbFRvcEZvckZsb2F0KEZsb2F0aW5nT2JqZWN0KiBjaGls
ZCwgaW50IGxvZ2ljYWxUb3ApCisgICAgTGF5b3V0VW5pdCBsb2dpY2FsVG9wRm9yRmxvYXQoY29u
c3QgRmxvYXRpbmdPYmplY3QqIGNoaWxkKSBjb25zdCB7IHJldHVybiBpc0hvcml6b250YWxXcml0
aW5nTW9kZSgpID8gY2hpbGQtPnkoKSA6IGNoaWxkLT54KCk7IH0KKyAgICBMYXlvdXRVbml0IGxv
Z2ljYWxCb3R0b21Gb3JGbG9hdChjb25zdCBGbG9hdGluZ09iamVjdCogY2hpbGQpIGNvbnN0IHsg
cmV0dXJuIGlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCkgPyBjaGlsZC0+bWF4WSgpIDogY2hpbGQt
Pm1heFgoKTsgfQorICAgIExheW91dFVuaXQgbG9naWNhbExlZnRGb3JGbG9hdChjb25zdCBGbG9h
dGluZ09iamVjdCogY2hpbGQpIGNvbnN0IHsgcmV0dXJuIGlzSG9yaXpvbnRhbFdyaXRpbmdNb2Rl
KCkgPyBjaGlsZC0+eCgpIDogY2hpbGQtPnkoKTsgfQorICAgIExheW91dFVuaXQgbG9naWNhbFJp
Z2h0Rm9yRmxvYXQoY29uc3QgRmxvYXRpbmdPYmplY3QqIGNoaWxkKSBjb25zdCB7IHJldHVybiBp
c0hvcml6b250YWxXcml0aW5nTW9kZSgpID8gY2hpbGQtPm1heFgoKSA6IGNoaWxkLT5tYXhZKCk7
IH0KKyAgICBMYXlvdXRVbml0IGxvZ2ljYWxXaWR0aEZvckZsb2F0KGNvbnN0IEZsb2F0aW5nT2Jq
ZWN0KiBjaGlsZCkgY29uc3QgeyByZXR1cm4gaXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKSA/IGNo
aWxkLT53aWR0aCgpIDogY2hpbGQtPmhlaWdodCgpOyB9CisgICAgdm9pZCBzZXRMb2dpY2FsVG9w
Rm9yRmxvYXQoRmxvYXRpbmdPYmplY3QqIGNoaWxkLCBMYXlvdXRVbml0IGxvZ2ljYWxUb3ApCiAg
ICAgewogICAgICAgICBpZiAoaXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKSkKICAgICAgICAgICAg
IGNoaWxkLT5zZXRZKGxvZ2ljYWxUb3ApOwogICAgICAgICBlbHNlCiAgICAgICAgICAgICBjaGls
ZC0+c2V0WChsb2dpY2FsVG9wKTsKICAgICB9Ci0gICAgdm9pZCBzZXRMb2dpY2FsTGVmdEZvckZs
b2F0KEZsb2F0aW5nT2JqZWN0KiBjaGlsZCwgaW50IGxvZ2ljYWxMZWZ0KQorICAgIHZvaWQgc2V0
TG9naWNhbExlZnRGb3JGbG9hdChGbG9hdGluZ09iamVjdCogY2hpbGQsIExheW91dFVuaXQgbG9n
aWNhbExlZnQpCiAgICAgewogICAgICAgICBpZiAoaXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKSkK
ICAgICAgICAgICAgIGNoaWxkLT5zZXRYKGxvZ2ljYWxMZWZ0KTsKICAgICAgICAgZWxzZQogICAg
ICAgICAgICAgY2hpbGQtPnNldFkobG9naWNhbExlZnQpOwogICAgIH0KLSAgICB2b2lkIHNldExv
Z2ljYWxIZWlnaHRGb3JGbG9hdChGbG9hdGluZ09iamVjdCogY2hpbGQsIGludCBsb2dpY2FsSGVp
Z2h0KQorICAgIHZvaWQgc2V0TG9naWNhbEhlaWdodEZvckZsb2F0KEZsb2F0aW5nT2JqZWN0KiBj
aGlsZCwgTGF5b3V0VW5pdCBsb2dpY2FsSGVpZ2h0KQogICAgIHsKICAgICAgICAgaWYgKGlzSG9y
aXpvbnRhbFdyaXRpbmdNb2RlKCkpCiAgICAgICAgICAgICBjaGlsZC0+c2V0SGVpZ2h0KGxvZ2lj
YWxIZWlnaHQpOwogICAgICAgICBlbHNlCiAgICAgICAgICAgICBjaGlsZC0+c2V0V2lkdGgobG9n
aWNhbEhlaWdodCk7CiAgICAgfQotICAgIHZvaWQgc2V0TG9naWNhbFdpZHRoRm9yRmxvYXQoRmxv
YXRpbmdPYmplY3QqIGNoaWxkLCBpbnQgbG9naWNhbFdpZHRoKQorICAgIHZvaWQgc2V0TG9naWNh
bFdpZHRoRm9yRmxvYXQoRmxvYXRpbmdPYmplY3QqIGNoaWxkLCBMYXlvdXRVbml0IGxvZ2ljYWxX
aWR0aCkKICAgICB7CiAgICAgICAgIGlmIChpc0hvcml6b250YWxXcml0aW5nTW9kZSgpKQogICAg
ICAgICAgICAgY2hpbGQtPnNldFdpZHRoKGxvZ2ljYWxXaWR0aCk7CkBAIC03MjEsNyArNzIxLDcg
QEAgcHJpdmF0ZToKICAgICAgICAgaW50IG1fbmVnYXRpdmVNYXJnaW47CiAKICAgICBwdWJsaWM6
Ci0gICAgICAgIE1hcmdpbkluZm8oUmVuZGVyQmxvY2sqIGIsIGludCBiZWZvcmVCb3JkZXJQYWRk
aW5nLCBpbnQgYWZ0ZXJCb3JkZXJQYWRkaW5nKTsKKyAgICAgICAgTWFyZ2luSW5mbyhSZW5kZXJC
bG9jayosIExheW91dFVuaXQgYmVmb3JlQm9yZGVyUGFkZGluZywgTGF5b3V0VW5pdCBhZnRlckJv
cmRlclBhZGRpbmcpOwogCiAgICAgICAgIHZvaWQgc2V0QXRCZWZvcmVTaWRlT2ZCbG9jayhib29s
IGIpIHsgbV9hdEJlZm9yZVNpZGVPZkJsb2NrID0gYjsgfQogICAgICAgICB2b2lkIHNldEF0QWZ0
ZXJTaWRlT2ZCbG9jayhib29sIGIpIHsgbV9hdEFmdGVyU2lkZU9mQmxvY2sgPSBiOyB9CkBAIC03
NTAsMTYgKzc1MCwxNiBAQCBwcml2YXRlOgogICAgICAgICBpbnQgbWFyZ2luKCkgY29uc3QgeyBy
ZXR1cm4gbV9wb3NpdGl2ZU1hcmdpbiAtIG1fbmVnYXRpdmVNYXJnaW47IH0KICAgICB9OwogCi0g
ICAgdm9pZCBsYXlvdXRCbG9ja0NoaWxkKFJlbmRlckJveCogY2hpbGQsIE1hcmdpbkluZm8mLCBp
bnQmIHByZXZpb3VzRmxvYXRMb2dpY2FsQm90dG9tLCBpbnQmIG1heEZsb2F0TG9naWNhbEJvdHRv
bSk7CisgICAgdm9pZCBsYXlvdXRCbG9ja0NoaWxkKFJlbmRlckJveCogY2hpbGQsIE1hcmdpbklu
Zm8mLCBMYXlvdXRVbml0JiBwcmV2aW91c0Zsb2F0TG9naWNhbEJvdHRvbSwgTGF5b3V0VW5pdCYg
bWF4RmxvYXRMb2dpY2FsQm90dG9tKTsKICAgICB2b2lkIGFkanVzdFBvc2l0aW9uZWRCbG9jayhS
ZW5kZXJCb3gqIGNoaWxkLCBjb25zdCBNYXJnaW5JbmZvJik7CiAgICAgdm9pZCBhZGp1c3RGbG9h
dGluZ0Jsb2NrKGNvbnN0IE1hcmdpbkluZm8mKTsKICAgICBib29sIGhhbmRsZVNwZWNpYWxDaGls
ZChSZW5kZXJCb3gqIGNoaWxkLCBjb25zdCBNYXJnaW5JbmZvJik7CiAgICAgYm9vbCBoYW5kbGVG
bG9hdGluZ0NoaWxkKFJlbmRlckJveCogY2hpbGQsIGNvbnN0IE1hcmdpbkluZm8mKTsKICAgICBi
b29sIGhhbmRsZVBvc2l0aW9uZWRDaGlsZChSZW5kZXJCb3gqIGNoaWxkLCBjb25zdCBNYXJnaW5J
bmZvJik7CiAgICAgYm9vbCBoYW5kbGVSdW5JbkNoaWxkKFJlbmRlckJveCogY2hpbGQpOwotICAg
IGludCBjb2xsYXBzZU1hcmdpbnMoUmVuZGVyQm94KiBjaGlsZCwgTWFyZ2luSW5mbyYpOwotICAg
IGludCBjbGVhckZsb2F0c0lmTmVlZGVkKFJlbmRlckJveCogY2hpbGQsIE1hcmdpbkluZm8mLCBp
bnQgb2xkVG9wUG9zTWFyZ2luLCBpbnQgb2xkVG9wTmVnTWFyZ2luLCBpbnQgeVBvcyk7Ci0gICAg
aW50IGVzdGltYXRlTG9naWNhbFRvcFBvc2l0aW9uKFJlbmRlckJveCogY2hpbGQsIGNvbnN0IE1h
cmdpbkluZm8mKTsKKyAgICBMYXlvdXRVbml0IGNvbGxhcHNlTWFyZ2lucyhSZW5kZXJCb3gqIGNo
aWxkLCBNYXJnaW5JbmZvJik7CisgICAgTGF5b3V0VW5pdCBjbGVhckZsb2F0c0lmTmVlZGVkKFJl
bmRlckJveCogY2hpbGQsIE1hcmdpbkluZm8mLCBpbnQgb2xkVG9wUG9zTWFyZ2luLCBpbnQgb2xk
VG9wTmVnTWFyZ2luLCBpbnQgeVBvcyk7CisgICAgTGF5b3V0VW5pdCBlc3RpbWF0ZUxvZ2ljYWxU
b3BQb3NpdGlvbihSZW5kZXJCb3gqIGNoaWxkLCBjb25zdCBNYXJnaW5JbmZvJik7CiAgICAgdm9p
ZCBkZXRlcm1pbmVMb2dpY2FsTGVmdFBvc2l0aW9uRm9yQ2hpbGQoUmVuZGVyQm94KiBjaGlsZCk7
CiAgICAgdm9pZCBoYW5kbGVBZnRlclNpZGVPZkJsb2NrKGludCB0b3AsIGludCBib3R0b20sIE1h
cmdpbkluZm8mKTsKICAgICB2b2lkIHNldENvbGxhcHNlZEJvdHRvbU1hcmdpbihjb25zdCBNYXJn
aW5JbmZvJik7Cg==
</data>

          </attachment>
      

    </bug>

</bugzilla>