<?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>66502</bug_id>
          
          <creation_ts>2011-08-18 14:57:26 -0700</creation_ts>
          <short_desc>Switch RenderBlock to to new layout types</short_desc>
          <delta_ts>2011-08-19 13:58:18 -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>eric</cc>
    
    <cc>leviw</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>453379</commentid>
    <comment_count>0</comment_count>
    <who name="Emil A Eklund">eae</who>
    <bug_when>2011-08-18 14:57:26 -0700</bug_when>
    <thetext>Convert RenderBlock to new layout abstraction.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>453382</commentid>
    <comment_count>1</comment_count>
      <attachid>104403</attachid>
    <who name="Emil A Eklund">eae</who>
    <bug_when>2011-08-18 14:59:24 -0700</bug_when>
    <thetext>Created attachment 104403
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>453929</commentid>
    <comment_count>2</comment_count>
      <attachid>104403</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2011-08-19 10:57:18 -0700</bug_when>
    <thetext>Comment on attachment 104403
Patch

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

&gt; Source/WebCore/rendering/RenderBlock.cpp:1349
&gt; +            repaintRect.intersect(LayoutRect(0, 0, width(), height()));

I&apos;m surprised there isn&apos;t a size() function to use here.

&gt; Source/WebCore/rendering/RenderBlock.h:823
&gt; +    typedef PODInterval&lt;int, FloatingObject*&gt; FloatingObjectInterval;
&gt; +    typedef PODIntervalTree&lt;int, FloatingObject*&gt; FloatingObjectTree;

?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>453933</commentid>
    <comment_count>3</comment_count>
    <who name="Emil A Eklund">eae</who>
    <bug_when>2011-08-19 11:11:53 -0700</bug_when>
    <thetext>(In reply to comment #2)
&gt; (From update of attachment 104403 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=104403&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/rendering/RenderBlock.cpp:1349
&gt; &gt; +            repaintRect.intersect(LayoutRect(0, 0, width(), height()));
&gt; 
&gt; I&apos;m surprised there isn&apos;t a size() function to use here.

There is, rewrote it as LayoutRect(LayoutPoint(), size())

&gt; 
&gt; &gt; Source/WebCore/rendering/RenderBlock.h:823
&gt; &gt; +    typedef PODInterval&lt;int, FloatingObject*&gt; FloatingObjectInterval;
&gt; &gt; +    typedef PODIntervalTree&lt;int, FloatingObject*&gt; FloatingObjectTree;

Argh, merge failure, reverted.

Thanks.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>453946</commentid>
    <comment_count>4</comment_count>
      <attachid>104535</attachid>
    <who name="Emil A Eklund">eae</who>
    <bug_when>2011-08-19 11:34:01 -0700</bug_when>
    <thetext>Created attachment 104535
Patch for landing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>454057</commentid>
    <comment_count>5</comment_count>
      <attachid>104535</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-08-19 13:58:13 -0700</bug_when>
    <thetext>Comment on attachment 104535
Patch for landing

Clearing flags on attachment: 104535

Committed r93436: &lt;http://trac.webkit.org/changeset/93436&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>454058</commentid>
    <comment_count>6</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-08-19 13:58:18 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>104403</attachid>
            <date>2011-08-18 14:59:24 -0700</date>
            <delta_ts>2011-08-19 11:33:58 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-66502-20110818145923.patch</filename>
            <type>text/plain</type>
            <size>67914</size>
            <attacher name="Emil A Eklund">eae</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDkzMzUyKQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTggQEAKKzIwMTEtMDgtMTggIEVtaWwgQSBF
a2x1bmQgIDxlYWVAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFN3aXRjaCBSZW5kZXJCbG9jayB0
byB0byBuZXcgbGF5b3V0IHR5cGVzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD02NjUwMgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEp
LgorCisgICAgICAgIENvbnZlcnQgUmVuZGVyQmxvY2sgdG8gbmV3IGxheW91dCBhYnN0cmFjdGlv
bi4gTGVhdmUgbV9saW5lSGlnaHQgYXMgYSAzMAorICAgICAgICBiaXQgaW50IGZvciBub3cgdG8g
YXZvaWQgdW5uZWNlc3NhcmlseSBpbmNyZWFzaW5nIHRoZSBtZW1vcnkgdXNhZ2UuCisKKyAgICAg
ICAgTm8gbmV3IHRlc3RzIGFzIG5vIG5ldyBmdW5jdGlvbmFsaXR5LgorCisgICAgICAgICogcmVu
ZGVyaW5nL1JlbmRlckJsb2NrLmNwcDoKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyQmxvY2su
aDoKKwogMjAxMS0wOC0xOCAgU2hlcmlmZiBCb3QgIDx3ZWJraXQucmV2aWV3LmJvdEBnbWFpbC5j
b20+CiAKICAgICAgICAgVW5yZXZpZXdlZCwgcm9sbGluZyBvdXQgcjkzMzI5LgpJbmRleDogU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2suY3BwCShyZXZpc2lvbiA5MzM0MykKKysr
IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9jay5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTEyMDYsNyArMTIwNiw3IEBAIHZvaWQgUmVuZGVyQmxvY2s6OmxheW91dEJsb2NrKGJvb2wg
cmVsYXkKICAgICAgICAgICAgIC8vIFdlIG5lZWQgdG8gZ28gYWhlYWQgYW5kIHNldCBvdXIgZXhw
bGljaXQgcGFnZSBoZWlnaHQgaWYgb25lIGV4aXN0cywgc28gdGhhdCB3ZSBjYW4KICAgICAgICAg
ICAgIC8vIGF2b2lkIGRvaW5nIHR3byBsYXlvdXQgcGFzc2VzLgogICAgICAgICAgICAgY29tcHV0
ZUxvZ2ljYWxIZWlnaHQoKTsKLSAgICAgICAgICAgIGludCBjb2x1bW5IZWlnaHQgPSBjb250ZW50
TG9naWNhbEhlaWdodCgpOworICAgICAgICAgICAgTGF5b3V0VW5pdCBjb2x1bW5IZWlnaHQgPSBj
b250ZW50TG9naWNhbEhlaWdodCgpOwogICAgICAgICAgICAgaWYgKGNvbHVtbkhlaWdodCA+IDAp
IHsKICAgICAgICAgICAgICAgICBwYWdlTG9naWNhbEhlaWdodCA9IGNvbHVtbkhlaWdodDsKICAg
ICAgICAgICAgICAgICBoYXNTcGVjaWZpZWRQYWdlTG9naWNhbEhlaWdodCA9IHRydWU7CkBAIC0x
MjIyLDcgKzEyMjIsNyBAQCB2b2lkIFJlbmRlckJsb2NrOjpsYXlvdXRCbG9jayhib29sIHJlbGF5
CiAgICAgICAgICAgICBjb2xJbmZvLT5jbGVhckZvcmNlZEJyZWFrcygpOwogICAgIH0KIAotICAg
IExheW91dFN0YXRlTWFpbnRhaW5lciBzdGF0ZVB1c2hlcih2aWV3KCksIHRoaXMsIEludFNpemUo
eCgpLCB5KCkpLCBoYXNDb2x1bW5zKCkgfHwgaGFzVHJhbnNmb3JtKCkgfHwgaGFzUmVmbGVjdGlv
bigpIHx8IHN0eWxlKCktPmlzRmxpcHBlZEJsb2Nrc1dyaXRpbmdNb2RlKCksIHBhZ2VMb2dpY2Fs
SGVpZ2h0LCBwYWdlTG9naWNhbEhlaWdodENoYW5nZWQsIGNvbEluZm8pOworICAgIExheW91dFN0
YXRlTWFpbnRhaW5lciBzdGF0ZVB1c2hlcih2aWV3KCksIHRoaXMsIGxvY2F0aW9uT2Zmc2V0KCks
IGhhc0NvbHVtbnMoKSB8fCBoYXNUcmFuc2Zvcm0oKSB8fCBoYXNSZWZsZWN0aW9uKCkgfHwgc3R5
bGUoKS0+aXNGbGlwcGVkQmxvY2tzV3JpdGluZ01vZGUoKSwgcGFnZUxvZ2ljYWxIZWlnaHQsIHBh
Z2VMb2dpY2FsSGVpZ2h0Q2hhbmdlZCwgY29sSW5mbyk7CiAKICAgICAvLyBXZSB1c2UgZm91ciB2
YWx1ZXMsIG1heFRvcFBvcywgbWF4VG9wTmVnLCBtYXhCb3R0b21Qb3MsIGFuZCBtYXhCb3R0b21O
ZWcsIHRvIHRyYWNrCiAgICAgLy8gb3VyIGN1cnJlbnQgbWF4aW1hbCBwb3NpdGl2ZSBhbmQgbmVn
YXRpdmUgbWFyZ2lucy4gIFRoZXNlIHZhbHVlcyBhcmUgdXNlZCB3aGVuIHdlCkBAIC0xMzQ2LDcg
KzEzNDYsNyBAQCB2b2lkIFJlbmRlckJsb2NrOjpsYXlvdXRCbG9jayhib29sIHJlbGF5CiAgICAg
ICAgICAgICByZXBhaW50UmVjdC5tb3ZlKC1sYXllcigpLT5zY3JvbGxlZENvbnRlbnRPZmZzZXQo
KSk7CiAKICAgICAgICAgICAgIC8vIERvbid0IGFsbG93IHRoaXMgcmVjdCB0byBzcGlsbCBvdXQg
b2Ygb3VyIG92ZXJmbG93IGJveC4KLSAgICAgICAgICAgIHJlcGFpbnRSZWN0LmludGVyc2VjdChJ
bnRSZWN0KDAsIDAsIHdpZHRoKCksIGhlaWdodCgpKSk7CisgICAgICAgICAgICByZXBhaW50UmVj
dC5pbnRlcnNlY3QoTGF5b3V0UmVjdCgwLCAwLCB3aWR0aCgpLCBoZWlnaHQoKSkpOwogICAgICAg
ICB9CiAKICAgICAgICAgLy8gTWFrZSBzdXJlIHRoZSByZWN0IGlzIHN0aWxsIG5vbi1lbXB0eSBh
ZnRlciBpbnRlcnNlY3RpbmcgZm9yIG92ZXJmbG93IGFib3ZlCkBAIC0xNDE0LDkgKzE0MTQsOSBA
QCB2b2lkIFJlbmRlckJsb2NrOjpjb21wdXRlT3ZlcmZsb3coTGF5b3V0CiAgICAgICAgIExheW91
dFJlY3QgY2xpZW50UmVjdChjbGllbnRCb3hSZWN0KCkpOwogICAgICAgICBMYXlvdXRSZWN0IHJl
Y3RUb0FwcGx5OwogICAgICAgICBpZiAoaXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKSkKLSAgICAg
ICAgICAgIHJlY3RUb0FwcGx5ID0gTGF5b3V0UmVjdChjbGllbnRSZWN0LngoKSwgY2xpZW50UmVj
dC55KCksIDEsIG1heCgwLCBvbGRDbGllbnRBZnRlckVkZ2UgLSBjbGllbnRSZWN0LnkoKSkpOwor
ICAgICAgICAgICAgcmVjdFRvQXBwbHkgPSBMYXlvdXRSZWN0KGNsaWVudFJlY3QueCgpLCBjbGll
bnRSZWN0LnkoKSwgMSwgbWF4PExheW91dFVuaXQ+KDAsIG9sZENsaWVudEFmdGVyRWRnZSAtIGNs
aWVudFJlY3QueSgpKSk7CiAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIHJlY3RUb0FwcGx5ID0g
TGF5b3V0UmVjdChjbGllbnRSZWN0LngoKSwgY2xpZW50UmVjdC55KCksIG1heCgwLCBvbGRDbGll
bnRBZnRlckVkZ2UgLSBjbGllbnRSZWN0LngoKSksIDEpOworICAgICAgICAgICAgcmVjdFRvQXBw
bHkgPSBMYXlvdXRSZWN0KGNsaWVudFJlY3QueCgpLCBjbGllbnRSZWN0LnkoKSwgbWF4PExheW91
dFVuaXQ+KDAsIG9sZENsaWVudEFmdGVyRWRnZSAtIGNsaWVudFJlY3QueCgpKSwgMSk7CiAgICAg
ICAgIGFkZExheW91dE92ZXJmbG93KHJlY3RUb0FwcGx5KTsKICAgICB9CiAgICAgICAgIApAQCAt
MTg0Myw3ICsxODQzLDcgQEAgdm9pZCBSZW5kZXJCbG9jazo6c2V0Q29sbGFwc2VkQm90dG9tTWFy
ZwogICAgIH0KIH0KIAotdm9pZCBSZW5kZXJCbG9jazo6aGFuZGxlQWZ0ZXJTaWRlT2ZCbG9jayhp
bnQgYmVmb3JlU2lkZSwgaW50IGFmdGVyU2lkZSwgTWFyZ2luSW5mbyYgbWFyZ2luSW5mbykKK3Zv
aWQgUmVuZGVyQmxvY2s6OmhhbmRsZUFmdGVyU2lkZU9mQmxvY2soTGF5b3V0VW5pdCBiZWZvcmVT
aWRlLCBMYXlvdXRVbml0IGFmdGVyU2lkZSwgTWFyZ2luSW5mbyYgbWFyZ2luSW5mbykKIHsKICAg
ICBtYXJnaW5JbmZvLnNldEF0QWZ0ZXJTaWRlT2ZCbG9jayh0cnVlKTsKIApAQCAtMjEyNCw3ICsy
MTI0LDggQEAgdm9pZCBSZW5kZXJCbG9jazo6bGF5b3V0QmxvY2tDaGlsZChSZW5kZQogICAgICAg
ICAgICAgc2V0TG9naWNhbEhlaWdodChuZXdIZWlnaHQpOwogICAgIH0KIAotICAgIC8vIEZJWE1F
OiBOZWVkcyB0byB1c2UgZXBzaWxvbiBvbmNlIHdlIG1vdmUgdG8gZmxvYXQsIHNlZSBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjQwMjEKKyAgICAvLyBGSVhNRTogQ2hh
bmdlIHRvIHVzZSByb3VnaGx5RXF1YWxzIHdoZW4gd2UgbW92ZSB0byBmbG9hdC4KKyAgICAvLyBT
ZWUgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTY2MTQ4CiAgICAgQVNT
RVJUKG9sZExheW91dERlbHRhID09IHZpZXcoKS0+bGF5b3V0RGVsdGEoKSk7CiB9CiAKQEAgLTI0
OTUsNyArMjQ5Niw3IEBAIHZvaWQgUmVuZGVyQmxvY2s6OnBhaW50Q2hpbGRyZW4oUGFpbnRJbmYK
ICAgICAgICAgaWYgKGNoZWNrQWZ0ZXJBbHdheXMKICAgICAgICAgICAgICYmIChhYnNvbHV0ZUNo
aWxkWSArIGNoaWxkLT5oZWlnaHQoKSkgPiBwYWludEluZm8ucmVjdC55KCkKICAgICAgICAgICAg
ICYmIChhYnNvbHV0ZUNoaWxkWSArIGNoaWxkLT5oZWlnaHQoKSkgPCBwYWludEluZm8ucmVjdC5t
YXhZKCkpIHsKLSAgICAgICAgICAgIHZpZXcoKS0+c2V0QmVzdFRydW5jYXRlZEF0KGFic29sdXRl
Q2hpbGRZICsgY2hpbGQtPmhlaWdodCgpICsgbWF4KDAsIGNoaWxkLT5jb2xsYXBzZWRNYXJnaW5B
ZnRlcigpKSwgdGhpcywgdHJ1ZSk7CisgICAgICAgICAgICB2aWV3KCktPnNldEJlc3RUcnVuY2F0
ZWRBdChhYnNvbHV0ZUNoaWxkWSArIGNoaWxkLT5oZWlnaHQoKSArIG1heDxMYXlvdXRVbml0Pigw
LCBjaGlsZC0+Y29sbGFwc2VkTWFyZ2luQWZ0ZXIoKSksIHRoaXMsIHRydWUpOwogICAgICAgICAg
ICAgcmV0dXJuOwogICAgICAgICB9CiAgICAgfQpAQCAtMjc5Nyw3ICsyNzk4LDcgQEAgR2FwUmVj
dHMgUmVuZGVyQmxvY2s6OnNlbGVjdGlvbkdhcFJlY3RzRgogICAgIC8vIEZJWE1FOiB0aGlzIGlz
IGJyb2tlbiB3aXRoIHRyYW5zZm9ybXMKICAgICBUcmFuc2Zvcm1TdGF0ZSB0cmFuc2Zvcm1TdGF0
ZShUcmFuc2Zvcm1TdGF0ZTo6QXBwbHlUcmFuc2Zvcm1EaXJlY3Rpb24sIEZsb2F0UG9pbnQoKSk7
CiAgICAgbWFwTG9jYWxUb0NvbnRhaW5lcihyZXBhaW50Q29udGFpbmVyLCBmYWxzZSwgZmFsc2Us
IHRyYW5zZm9ybVN0YXRlKTsKLSAgICBJbnRQb2ludCBvZmZzZXRGcm9tUmVwYWludENvbnRhaW5l
ciA9IHJvdW5kZWRJbnRQb2ludCh0cmFuc2Zvcm1TdGF0ZS5tYXBwZWRQb2ludCgpKTsKKyAgICBM
YXlvdXRQb2ludCBvZmZzZXRGcm9tUmVwYWludENvbnRhaW5lciA9IHJvdW5kZWRMYXlvdXRQb2lu
dCh0cmFuc2Zvcm1TdGF0ZS5tYXBwZWRQb2ludCgpKTsKIAogICAgIGlmIChoYXNPdmVyZmxvd0Ns
aXAoKSkKICAgICAgICAgb2Zmc2V0RnJvbVJlcGFpbnRDb250YWluZXIgLT0gbGF5ZXIoKS0+c2Ny
b2xsZWRDb250ZW50T2Zmc2V0KCk7CkBAIC0yODMzLDcgKzI4MzQsNyBAQCB2b2lkIFJlbmRlckJs
b2NrOjpwYWludFNlbGVjdGlvbihQYWludEluCiAgICAgfQogfQogCi1zdGF0aWMgdm9pZCBjbGlw
T3V0UG9zaXRpb25lZE9iamVjdHMoY29uc3QgUGFpbnRJbmZvKiBwYWludEluZm8sIGNvbnN0IElu
dFBvaW50JiBvZmZzZXQsIFJlbmRlckJsb2NrOjpQb3NpdGlvbmVkT2JqZWN0c0xpc3RIYXNoU2V0
KiBwb3NpdGlvbmVkT2JqZWN0cykKK3N0YXRpYyB2b2lkIGNsaXBPdXRQb3NpdGlvbmVkT2JqZWN0
cyhjb25zdCBQYWludEluZm8qIHBhaW50SW5mbywgY29uc3QgTGF5b3V0UG9pbnQmIG9mZnNldCwg
UmVuZGVyQmxvY2s6OlBvc2l0aW9uZWRPYmplY3RzTGlzdEhhc2hTZXQqIHBvc2l0aW9uZWRPYmpl
Y3RzKQogewogICAgIGlmICghcG9zaXRpb25lZE9iamVjdHMpCiAgICAgICAgIHJldHVybjsKQEAg
LTI4NDEsMTYgKzI4NDIsMTYgQEAgc3RhdGljIHZvaWQgY2xpcE91dFBvc2l0aW9uZWRPYmplY3Rz
KGNvbgogICAgIFJlbmRlckJsb2NrOjpQb3NpdGlvbmVkT2JqZWN0c0xpc3RIYXNoU2V0Ojpjb25z
dF9pdGVyYXRvciBlbmQgPSBwb3NpdGlvbmVkT2JqZWN0cy0+ZW5kKCk7CiAgICAgZm9yIChSZW5k
ZXJCbG9jazo6UG9zaXRpb25lZE9iamVjdHNMaXN0SGFzaFNldDo6Y29uc3RfaXRlcmF0b3IgaXQg
PSBwb3NpdGlvbmVkT2JqZWN0cy0+YmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7CiAgICAgICAg
IFJlbmRlckJveCogciA9ICppdDsKLSAgICAgICAgcGFpbnRJbmZvLT5jb250ZXh0LT5jbGlwT3V0
KEludFJlY3Qob2Zmc2V0LngoKSArIHItPngoKSwgb2Zmc2V0LnkoKSArIHItPnkoKSwgci0+d2lk
dGgoKSwgci0+aGVpZ2h0KCkpKTsKKyAgICAgICAgcGFpbnRJbmZvLT5jb250ZXh0LT5jbGlwT3V0
KExheW91dFJlY3Qob2Zmc2V0LngoKSArIHItPngoKSwgb2Zmc2V0LnkoKSArIHItPnkoKSwgci0+
d2lkdGgoKSwgci0+aGVpZ2h0KCkpKTsKICAgICB9CiB9CiAKLXN0YXRpYyBpbnQgYmxvY2tEaXJl
Y3Rpb25PZmZzZXQoUmVuZGVyQmxvY2sqIHJvb3RCbG9jaywgY29uc3QgSW50U2l6ZSYgb2Zmc2V0
RnJvbVJvb3RCbG9jaykKK3N0YXRpYyBpbnQgYmxvY2tEaXJlY3Rpb25PZmZzZXQoUmVuZGVyQmxv
Y2sqIHJvb3RCbG9jaywgY29uc3QgTGF5b3V0U2l6ZSYgb2Zmc2V0RnJvbVJvb3RCbG9jaykKIHsK
ICAgICByZXR1cm4gcm9vdEJsb2NrLT5pc0hvcml6b250YWxXcml0aW5nTW9kZSgpID8gb2Zmc2V0
RnJvbVJvb3RCbG9jay5oZWlnaHQoKSA6IG9mZnNldEZyb21Sb290QmxvY2sud2lkdGgoKTsKIH0K
IAotc3RhdGljIGludCBpbmxpbmVEaXJlY3Rpb25PZmZzZXQoUmVuZGVyQmxvY2sqIHJvb3RCbG9j
aywgY29uc3QgSW50U2l6ZSYgb2Zmc2V0RnJvbVJvb3RCbG9jaykKK3N0YXRpYyBpbnQgaW5saW5l
RGlyZWN0aW9uT2Zmc2V0KFJlbmRlckJsb2NrKiByb290QmxvY2ssIGNvbnN0IExheW91dFNpemUm
IG9mZnNldEZyb21Sb290QmxvY2spCiB7CiAgICAgcmV0dXJuIHJvb3RCbG9jay0+aXNIb3Jpem9u
dGFsV3JpdGluZ01vZGUoKSA/IG9mZnNldEZyb21Sb290QmxvY2sud2lkdGgoKSA6IG9mZnNldEZy
b21Sb290QmxvY2suaGVpZ2h0KCk7CiB9CkBAIC0yODgwLDcgKzI4ODEsNyBAQCBHYXBSZWN0cyBS
ZW5kZXJCbG9jazo6c2VsZWN0aW9uR2FwcyhSZW5kCiAgICAgICAgIGNsaXBPdXRQb3NpdGlvbmVk
T2JqZWN0cyhwYWludEluZm8sIGZsaXBwZWRCbG9ja1JlY3QubG9jYXRpb24oKSwgbV9wb3NpdGlv
bmVkT2JqZWN0cy5nZXQoKSk7CiAgICAgICAgIGlmIChpc0JvZHkoKSB8fCBpc1Jvb3QoKSkgLy8g
VGhlIDxib2R5PiBtdXN0IG1ha2Ugc3VyZSB0byBleGFtaW5lIGl0cyBjb250YWluaW5nQmxvY2sn
cyBwb3NpdGlvbmVkIG9iamVjdHMuCiAgICAgICAgICAgICBmb3IgKFJlbmRlckJsb2NrKiBjYiA9
IGNvbnRhaW5pbmdCbG9jaygpOyBjYiAmJiAhY2ItPmlzUmVuZGVyVmlldygpOyBjYiA9IGNiLT5j
b250YWluaW5nQmxvY2soKSkKLSAgICAgICAgICAgICAgICBjbGlwT3V0UG9zaXRpb25lZE9iamVj
dHMocGFpbnRJbmZvLCBJbnRQb2ludChjYi0+eCgpLCBjYi0+eSgpKSwgY2ItPm1fcG9zaXRpb25l
ZE9iamVjdHMuZ2V0KCkpOyAvLyBGSVhNRTogTm90IHJpZ2h0IGZvciBmbGlwcGVkIHdyaXRpbmcg
bW9kZXMuCisgICAgICAgICAgICAgICAgY2xpcE91dFBvc2l0aW9uZWRPYmplY3RzKHBhaW50SW5m
bywgTGF5b3V0UG9pbnQoY2ItPngoKSwgY2ItPnkoKSksIGNiLT5tX3Bvc2l0aW9uZWRPYmplY3Rz
LmdldCgpKTsgLy8gRklYTUU6IE5vdCByaWdodCBmb3IgZmxpcHBlZCB3cml0aW5nIG1vZGVzLgog
ICAgICAgICBpZiAobV9mbG9hdGluZ09iamVjdHMpIHsKICAgICAgICAgICAgIGNvbnN0IEZsb2F0
aW5nT2JqZWN0U2V0JiBmbG9hdGluZ09iamVjdFNldCA9IG1fZmxvYXRpbmdPYmplY3RzLT5zZXQo
KTsKICAgICAgICAgICAgIEZsb2F0aW5nT2JqZWN0U2V0SXRlcmF0b3IgZW5kID0gZmxvYXRpbmdP
YmplY3RTZXQuZW5kKCk7CkBAIC0yOTU2LDcgKzI5NTcsNyBAQCBHYXBSZWN0cyBSZW5kZXJCbG9j
azo6aW5saW5lU2VsZWN0aW9uR2FwCiAgICAgICAgIAogICAgICAgICBMYXlvdXRSZWN0IGxvZ2lj
YWxSZWN0KGN1cnItPmxvZ2ljYWxMZWZ0KCksIHNlbFRvcCwgY3Vyci0+bG9naWNhbFdpZHRoKCks
IHNlbFRvcCArIHNlbEhlaWdodCk7CiAgICAgICAgIGxvZ2ljYWxSZWN0Lm1vdmUoaXNIb3Jpem9u
dGFsV3JpdGluZ01vZGUoKSA/IG9mZnNldEZyb21Sb290QmxvY2sgOiBvZmZzZXRGcm9tUm9vdEJs
b2NrLnRyYW5zcG9zZWRTaXplKCkpOwotICAgICAgICBJbnRSZWN0IHBoeXNpY2FsUmVjdCA9IHJv
b3RCbG9jay0+bG9naWNhbFJlY3RUb1BoeXNpY2FsUmVjdChyb290QmxvY2tQaHlzaWNhbFBvc2l0
aW9uLCBsb2dpY2FsUmVjdCk7CisgICAgICAgIExheW91dFJlY3QgcGh5c2ljYWxSZWN0ID0gcm9v
dEJsb2NrLT5sb2dpY2FsUmVjdFRvUGh5c2ljYWxSZWN0KHJvb3RCbG9ja1BoeXNpY2FsUG9zaXRp
b24sIGxvZ2ljYWxSZWN0KTsKICAgICAgICAgaWYgKCFwYWludEluZm8gfHwgKGlzSG9yaXpvbnRh
bFdyaXRpbmdNb2RlKCkgJiYgcGh5c2ljYWxSZWN0LnkoKSA8IHBhaW50SW5mby0+cmVjdC5tYXhZ
KCkgJiYgcGh5c2ljYWxSZWN0Lm1heFkoKSA+IHBhaW50SW5mby0+cmVjdC55KCkpCiAgICAgICAg
ICAgICB8fCAoIWlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCkgJiYgcGh5c2ljYWxSZWN0LngoKSA8
IHBhaW50SW5mby0+cmVjdC5tYXhYKCkgJiYgcGh5c2ljYWxSZWN0Lm1heFgoKSA+IHBhaW50SW5m
by0+cmVjdC54KCkpKQogICAgICAgICAgICAgcmVzdWx0LnVuaXRlKGN1cnItPmxpbmVTZWxlY3Rp
b25HYXAocm9vdEJsb2NrLCByb290QmxvY2tQaHlzaWNhbFBvc2l0aW9uLCBvZmZzZXRGcm9tUm9v
dEJsb2NrLCBzZWxUb3AsIHNlbEhlaWdodCwgcGFpbnRJbmZvKSk7CkBAIC0zMzE3LDcgKzMzMTgs
NyBAQCBib29sIFJlbmRlckJsb2NrOjpwb3NpdGlvbk5ld0Zsb2F0cygpCiAgICAgICAgIH0KICAg
ICB9CiAKLSAgICBpbnQgbG9naWNhbFRvcCA9IGxvZ2ljYWxIZWlnaHQoKTsKKyAgICBMYXlvdXRV
bml0IGxvZ2ljYWxUb3AgPSBsb2dpY2FsSGVpZ2h0KCk7CiAgICAgCiAgICAgLy8gVGhlIGZsb2F0
IGNhbm5vdCBzdGFydCBhYm92ZSB0aGUgdG9wIHBvc2l0aW9uIG9mIHRoZSBsYXN0IHBvc2l0aW9u
ZWQgZmxvYXQuCiAgICAgaWYgKGxhc3RQbGFjZWRGbG9hdGluZ09iamVjdCkKQEAgLTMzMzQsMzQg
KzMzMzUsMzQgQEAgYm9vbCBSZW5kZXJCbG9jazo6cG9zaXRpb25OZXdGbG9hdHMoKQogICAgICAg
ICAgICAgY29udGludWU7CiAKICAgICAgICAgUmVuZGVyQm94KiBjaGlsZEJveCA9IGZsb2F0aW5n
T2JqZWN0LT5yZW5kZXJlcigpOwotICAgICAgICBpbnQgY2hpbGRMb2dpY2FsTGVmdE1hcmdpbiA9
IHN0eWxlKCktPmlzTGVmdFRvUmlnaHREaXJlY3Rpb24oKSA/IG1hcmdpblN0YXJ0Rm9yQ2hpbGQo
Y2hpbGRCb3gpIDogbWFyZ2luRW5kRm9yQ2hpbGQoY2hpbGRCb3gpOworICAgICAgICBMYXlvdXRV
bml0IGNoaWxkTG9naWNhbExlZnRNYXJnaW4gPSBzdHlsZSgpLT5pc0xlZnRUb1JpZ2h0RGlyZWN0
aW9uKCkgPyBtYXJnaW5TdGFydEZvckNoaWxkKGNoaWxkQm94KSA6IG1hcmdpbkVuZEZvckNoaWxk
KGNoaWxkQm94KTsKIAotICAgICAgICBpbnQgcmlnaHRPZmZzZXQgPSBsb2dpY2FsUmlnaHRPZmZz
ZXRGb3JDb250ZW50KCk7IC8vIENvbnN0YW50IHBhcnQgb2YgcmlnaHQgb2Zmc2V0LgotICAgICAg
ICBpbnQgbGVmdE9mZnNldCA9IGxvZ2ljYWxMZWZ0T2Zmc2V0Rm9yQ29udGVudCgpOyAvLyBDb25z
dGFudCBwYXJ0IG9mIGxlZnQgb2Zmc2V0LgotICAgICAgICBpbnQgZmxvYXRMb2dpY2FsV2lkdGgg
PSBsb2dpY2FsV2lkdGhGb3JGbG9hdChmbG9hdGluZ09iamVjdCk7IC8vIFRoZSB3aWR0aCB3ZSBs
b29rIGZvci4KKyAgICAgICAgTGF5b3V0VW5pdCByaWdodE9mZnNldCA9IGxvZ2ljYWxSaWdodE9m
ZnNldEZvckNvbnRlbnQoKTsgLy8gQ29uc3RhbnQgcGFydCBvZiByaWdodCBvZmZzZXQuCisgICAg
ICAgIExheW91dFVuaXQgbGVmdE9mZnNldCA9IGxvZ2ljYWxMZWZ0T2Zmc2V0Rm9yQ29udGVudCgp
OyAvLyBDb25zdGFudCBwYXJ0IG9mIGxlZnQgb2Zmc2V0LgorICAgICAgICBMYXlvdXRVbml0IGZs
b2F0TG9naWNhbFdpZHRoID0gbG9naWNhbFdpZHRoRm9yRmxvYXQoZmxvYXRpbmdPYmplY3QpOyAv
LyBUaGUgd2lkdGggd2UgbG9vayBmb3IuCiAgICAgICAgIGlmIChyaWdodE9mZnNldCAtIGxlZnRP
ZmZzZXQgPCBmbG9hdExvZ2ljYWxXaWR0aCkKICAgICAgICAgICAgIGZsb2F0TG9naWNhbFdpZHRo
ID0gcmlnaHRPZmZzZXQgLSBsZWZ0T2Zmc2V0OyAvLyBOZXZlciBsb29rIGZvciBtb3JlIHRoYW4g
d2hhdCB3aWxsIGJlIGF2YWlsYWJsZS4KICAgICAgICAgCi0gICAgICAgIEludFJlY3Qgb2xkUmVj
dChjaGlsZEJveC0+eCgpLCBjaGlsZEJveC0+eSgpICwgY2hpbGRCb3gtPndpZHRoKCksIGNoaWxk
Qm94LT5oZWlnaHQoKSk7CisgICAgICAgIExheW91dFJlY3Qgb2xkUmVjdChjaGlsZEJveC0+eCgp
LCBjaGlsZEJveC0+eSgpICwgY2hpbGRCb3gtPndpZHRoKCksIGNoaWxkQm94LT5oZWlnaHQoKSk7
CiAKICAgICAgICAgaWYgKGNoaWxkQm94LT5zdHlsZSgpLT5jbGVhcigpICYgQ0xFRlQpCiAgICAg
ICAgICAgICBsb2dpY2FsVG9wID0gbWF4KGxvd2VzdEZsb2F0TG9naWNhbEJvdHRvbShGbG9hdGlu
Z09iamVjdDo6RmxvYXRMZWZ0KSwgbG9naWNhbFRvcCk7CiAgICAgICAgIGlmIChjaGlsZEJveC0+
c3R5bGUoKS0+Y2xlYXIoKSAmIENSSUdIVCkKICAgICAgICAgICAgIGxvZ2ljYWxUb3AgPSBtYXgo
bG93ZXN0RmxvYXRMb2dpY2FsQm90dG9tKEZsb2F0aW5nT2JqZWN0OjpGbG9hdFJpZ2h0KSwgbG9n
aWNhbFRvcCk7CiAKLSAgICAgICAgaW50IGZsb2F0TG9naWNhbExlZnQ7CisgICAgICAgIExheW91
dFVuaXQgZmxvYXRMb2dpY2FsTGVmdDsKICAgICAgICAgaWYgKGNoaWxkQm94LT5zdHlsZSgpLT5m
bG9hdGluZygpID09IExlZnRGbG9hdCkgewotICAgICAgICAgICAgaW50IGhlaWdodFJlbWFpbmlu
Z0xlZnQgPSAxOwotICAgICAgICAgICAgaW50IGhlaWdodFJlbWFpbmluZ1JpZ2h0ID0gMTsKKyAg
ICAgICAgICAgIExheW91dFVuaXQgaGVpZ2h0UmVtYWluaW5nTGVmdCA9IDE7CisgICAgICAgICAg
ICBMYXlvdXRVbml0IGhlaWdodFJlbWFpbmluZ1JpZ2h0ID0gMTsKICAgICAgICAgICAgIGZsb2F0
TG9naWNhbExlZnQgPSBsb2dpY2FsTGVmdE9mZnNldEZvckxpbmUobG9naWNhbFRvcCwgbGVmdE9m
ZnNldCwgZmFsc2UsICZoZWlnaHRSZW1haW5pbmdMZWZ0KTsKICAgICAgICAgICAgIHdoaWxlIChs
b2dpY2FsUmlnaHRPZmZzZXRGb3JMaW5lKGxvZ2ljYWxUb3AsIHJpZ2h0T2Zmc2V0LCBmYWxzZSwg
JmhlaWdodFJlbWFpbmluZ1JpZ2h0KSAtIGZsb2F0TG9naWNhbExlZnQgPCBmbG9hdExvZ2ljYWxX
aWR0aCkgewogICAgICAgICAgICAgICAgIGxvZ2ljYWxUb3AgKz0gbWluKGhlaWdodFJlbWFpbmlu
Z0xlZnQsIGhlaWdodFJlbWFpbmluZ1JpZ2h0KTsKICAgICAgICAgICAgICAgICBmbG9hdExvZ2lj
YWxMZWZ0ID0gbG9naWNhbExlZnRPZmZzZXRGb3JMaW5lKGxvZ2ljYWxUb3AsIGxlZnRPZmZzZXQs
IGZhbHNlLCAmaGVpZ2h0UmVtYWluaW5nTGVmdCk7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAg
ICBmbG9hdExvZ2ljYWxMZWZ0ID0gbWF4KDAsIGZsb2F0TG9naWNhbExlZnQpOworICAgICAgICAg
ICAgZmxvYXRMb2dpY2FsTGVmdCA9IG1heDxMYXlvdXRVbml0PigwLCBmbG9hdExvZ2ljYWxMZWZ0
KTsKICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIGludCBoZWlnaHRSZW1haW5pbmdMZWZ0
ID0gMTsKLSAgICAgICAgICAgIGludCBoZWlnaHRSZW1haW5pbmdSaWdodCA9IDE7CisgICAgICAg
ICAgICBMYXlvdXRVbml0IGhlaWdodFJlbWFpbmluZ0xlZnQgPSAxOworICAgICAgICAgICAgTGF5
b3V0VW5pdCBoZWlnaHRSZW1haW5pbmdSaWdodCA9IDE7CiAgICAgICAgICAgICBmbG9hdExvZ2lj
YWxMZWZ0ID0gbG9naWNhbFJpZ2h0T2Zmc2V0Rm9yTGluZShsb2dpY2FsVG9wLCByaWdodE9mZnNl
dCwgZmFsc2UsICZoZWlnaHRSZW1haW5pbmdSaWdodCk7CiAgICAgICAgICAgICB3aGlsZSAoZmxv
YXRMb2dpY2FsTGVmdCAtIGxvZ2ljYWxMZWZ0T2Zmc2V0Rm9yTGluZShsb2dpY2FsVG9wLCBsZWZ0
T2Zmc2V0LCBmYWxzZSwgJmhlaWdodFJlbWFpbmluZ0xlZnQpIDwgZmxvYXRMb2dpY2FsV2lkdGgp
IHsKICAgICAgICAgICAgICAgICBsb2dpY2FsVG9wICs9IG1pbihoZWlnaHRSZW1haW5pbmdMZWZ0
LCBoZWlnaHRSZW1haW5pbmdSaWdodCk7CkBAIC0zMzg1LDcgKzMzODYsNyBAQCBib29sIFJlbmRl
ckJsb2NrOjpwb3NpdGlvbk5ld0Zsb2F0cygpCiAKICAgICAgICAgICAgIC8vIElmIHdlIGFyZSB1
bnNwbGl0dGFibGUgYW5kIGRvbid0IGZpdCwgdGhlbiB3ZSBuZWVkIHRvIG1vdmUgZG93bi4KICAg
ICAgICAgICAgIC8vIFdlIGluY2x1ZGUgb3VyIG1hcmdpbnMgYXMgcGFydCBvZiB0aGUgdW5zcGxp
dHRhYmxlIGFyZWEuCi0gICAgICAgICAgICBpbnQgbmV3TG9naWNhbFRvcCA9IGFkanVzdEZvclVu
c3BsaXR0YWJsZUNoaWxkKGNoaWxkQm94LCBsb2dpY2FsVG9wLCB0cnVlKTsKKyAgICAgICAgICAg
IExheW91dFVuaXQgbmV3TG9naWNhbFRvcCA9IGFkanVzdEZvclVuc3BsaXR0YWJsZUNoaWxkKGNo
aWxkQm94LCBsb2dpY2FsVG9wLCB0cnVlKTsKICAgICAgICAgICAgIAogICAgICAgICAgICAgLy8g
U2VlIGlmIHdlIGhhdmUgYSBwYWdpbmF0aW9uIHN0cnV0IHRoYXQgaXMgbWFraW5nIHVzIG1vdmUg
ZG93biBmdXJ0aGVyLgogICAgICAgICAgICAgLy8gTm90ZSB0aGF0IGFuIHVuc3BsaXR0YWJsZSBj
aGlsZCBjYW4ndCBhbHNvIGhhdmUgYSBwYWdpbmF0aW9uIHN0cnV0LCBzbyB0aGlzIGlzCkBAIC0z
NTgzLDI5ICszNTg0LDI5IEBAIExheW91dFVuaXQgUmVuZGVyQmxvY2s6OmF2YWlsYWJsZUxvZ2lj
YWwKICAgICByZXR1cm4gKHJlc3VsdCA8IDApID8gMCA6IHJlc3VsdDsKIH0KIAotaW50IFJlbmRl
ckJsb2NrOjpuZXh0RmxvYXRMb2dpY2FsQm90dG9tQmVsb3coaW50IGxvZ2ljYWxIZWlnaHQpIGNv
bnN0CitMYXlvdXRVbml0IFJlbmRlckJsb2NrOjpuZXh0RmxvYXRMb2dpY2FsQm90dG9tQmVsb3co
TGF5b3V0VW5pdCBsb2dpY2FsSGVpZ2h0KSBjb25zdAogewogICAgIGlmICghbV9mbG9hdGluZ09i
amVjdHMpCiAgICAgICAgIHJldHVybiAwOwogCi0gICAgaW50IGJvdHRvbSA9IElOVF9NQVg7Cisg
ICAgTGF5b3V0VW5pdCBib3R0b20gPSBudW1lcmljX2xpbWl0czxMYXlvdXRVbml0Pjo6bWF4KCk7
CiAgICAgY29uc3QgRmxvYXRpbmdPYmplY3RTZXQmIGZsb2F0aW5nT2JqZWN0U2V0ID0gbV9mbG9h
dGluZ09iamVjdHMtPnNldCgpOwogICAgIEZsb2F0aW5nT2JqZWN0U2V0SXRlcmF0b3IgZW5kID0g
ZmxvYXRpbmdPYmplY3RTZXQuZW5kKCk7CiAgICAgZm9yIChGbG9hdGluZ09iamVjdFNldEl0ZXJh
dG9yIGl0ID0gZmxvYXRpbmdPYmplY3RTZXQuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KSB7CiAg
ICAgICAgIEZsb2F0aW5nT2JqZWN0KiByID0gKml0OwotICAgICAgICBpbnQgZmxvYXRCb3R0b20g
PSBsb2dpY2FsQm90dG9tRm9yRmxvYXQocik7CisgICAgICAgIExheW91dFVuaXQgZmxvYXRCb3R0
b20gPSBsb2dpY2FsQm90dG9tRm9yRmxvYXQocik7CiAgICAgICAgIGlmIChmbG9hdEJvdHRvbSA+
IGxvZ2ljYWxIZWlnaHQpCiAgICAgICAgICAgICBib3R0b20gPSBtaW4oZmxvYXRCb3R0b20sIGJv
dHRvbSk7CiAgICAgfQogCi0gICAgcmV0dXJuIGJvdHRvbSA9PSBJTlRfTUFYID8gMCA6IGJvdHRv
bTsKKyAgICByZXR1cm4gYm90dG9tID09IG51bWVyaWNfbGltaXRzPExheW91dFVuaXQ+OjptYXgo
KSA/IDAgOiBib3R0b207CiB9CiAKLWludCBSZW5kZXJCbG9jazo6bG93ZXN0RmxvYXRMb2dpY2Fs
Qm90dG9tKEZsb2F0aW5nT2JqZWN0OjpUeXBlIGZsb2F0VHlwZSkgY29uc3QKK0xheW91dFVuaXQg
UmVuZGVyQmxvY2s6Omxvd2VzdEZsb2F0TG9naWNhbEJvdHRvbShGbG9hdGluZ09iamVjdDo6VHlw
ZSBmbG9hdFR5cGUpIGNvbnN0CiB7CiAgICAgaWYgKCFtX2Zsb2F0aW5nT2JqZWN0cykKICAgICAg
ICAgcmV0dXJuIDA7Ci0gICAgaW50IGxvd2VzdEZsb2F0Qm90dG9tID0gMDsKKyAgICBMYXlvdXRV
bml0IGxvd2VzdEZsb2F0Qm90dG9tID0gMDsKICAgICBjb25zdCBGbG9hdGluZ09iamVjdFNldCYg
ZmxvYXRpbmdPYmplY3RTZXQgPSBtX2Zsb2F0aW5nT2JqZWN0cy0+c2V0KCk7CiAgICAgRmxvYXRp
bmdPYmplY3RTZXRJdGVyYXRvciBlbmQgPSBmbG9hdGluZ09iamVjdFNldC5lbmQoKTsKICAgICBm
b3IgKEZsb2F0aW5nT2JqZWN0U2V0SXRlcmF0b3IgaXQgPSBmbG9hdGluZ09iamVjdFNldC5iZWdp
bigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKQEAgLTM2MTYsMTQgKzM2MTcsMTQgQEAgaW50IFJlbmRl
ckJsb2NrOjpsb3dlc3RGbG9hdExvZ2ljYWxCb3R0bwogICAgIHJldHVybiBsb3dlc3RGbG9hdEJv
dHRvbTsKIH0KIAotdm9pZCBSZW5kZXJCbG9jazo6bWFya0xpbmVzRGlydHlJbkJsb2NrUmFuZ2Uo
aW50IGxvZ2ljYWxUb3AsIGludCBsb2dpY2FsQm90dG9tLCBSb290SW5saW5lQm94KiBoaWdoZXN0
KQordm9pZCBSZW5kZXJCbG9jazo6bWFya0xpbmVzRGlydHlJbkJsb2NrUmFuZ2UoTGF5b3V0VW5p
dCBsb2dpY2FsVG9wLCBMYXlvdXRVbml0IGxvZ2ljYWxCb3R0b20sIFJvb3RJbmxpbmVCb3gqIGhp
Z2hlc3QpCiB7CiAgICAgaWYgKGxvZ2ljYWxUb3AgPj0gbG9naWNhbEJvdHRvbSkKICAgICAgICAg
cmV0dXJuOwogCiAgICAgUm9vdElubGluZUJveCogbG93ZXN0RGlydHlMaW5lID0gbGFzdFJvb3RC
b3goKTsKICAgICBSb290SW5saW5lQm94KiBhZnRlckxvd2VzdCA9IGxvd2VzdERpcnR5TGluZTsK
LSAgICB3aGlsZSAobG93ZXN0RGlydHlMaW5lICYmIGxvd2VzdERpcnR5TGluZS0+YmxvY2tMb2dp
Y2FsSGVpZ2h0KCkgPj0gbG9naWNhbEJvdHRvbSAmJiBsb2dpY2FsQm90dG9tIDwgbnVtZXJpY19s
aW1pdHM8aW50Pjo6bWF4KCkpIHsKKyAgICB3aGlsZSAobG93ZXN0RGlydHlMaW5lICYmIGxvd2Vz
dERpcnR5TGluZS0+YmxvY2tMb2dpY2FsSGVpZ2h0KCkgPj0gbG9naWNhbEJvdHRvbSAmJiBsb2dp
Y2FsQm90dG9tIDwgbnVtZXJpY19saW1pdHM8TGF5b3V0VW5pdD46Om1heCgpKSB7CiAgICAgICAg
IGFmdGVyTG93ZXN0ID0gbG93ZXN0RGlydHlMaW5lOwogICAgICAgICBsb3dlc3REaXJ0eUxpbmUg
PSBsb3dlc3REaXJ0eUxpbmUtPnByZXZSb290Qm94KCk7CiAgICAgfQpAQCAtMzcxOCwxMSArMzcx
OSwxMSBAQCB2b2lkIFJlbmRlckJsb2NrOjpjbGVhckZsb2F0cyhCbG9ja0xheW91CiAgICAgfQog
CiAgICAgLy8gRmlyc3QgYWRkIGluIGZsb2F0cyBmcm9tIHRoZSBwYXJlbnQuCi0gICAgaW50IGxv
Z2ljYWxUb3BPZmZzZXQgPSBsb2dpY2FsVG9wKCk7CisgICAgTGF5b3V0VW5pdCBsb2dpY2FsVG9w
T2Zmc2V0ID0gbG9naWNhbFRvcCgpOwogICAgIGlmIChwYXJlbnRIYXNGbG9hdHMpCiAgICAgICAg
IGFkZEludHJ1ZGluZ0Zsb2F0cyhwYXJlbnRCbG9jaywgcGFyZW50QmxvY2stPmxvZ2ljYWxMZWZ0
T2Zmc2V0Rm9yQ29udGVudCgpLCBsb2dpY2FsVG9wT2Zmc2V0KTsKICAgICAKLSAgICBpbnQgbG9n
aWNhbExlZnRPZmZzZXQgPSAwOworICAgIExheW91dFVuaXQgbG9naWNhbExlZnRPZmZzZXQgPSAw
OwogICAgIGlmIChwcmV2KQogICAgICAgICBsb2dpY2FsVG9wT2Zmc2V0IC09IHRvUmVuZGVyQm94
KHByZXYpLT5sb2dpY2FsVG9wKCk7CiAgICAgZWxzZSBpZiAoIXBhcmVudEhhc0Zsb2F0cykgewpA
QCAtMzczNiwxNyArMzczNywxNyBAQCB2b2lkIFJlbmRlckJsb2NrOjpjbGVhckZsb2F0cyhCbG9j
a0xheW91CiAgICAgICAgIGFkZEludHJ1ZGluZ0Zsb2F0cyhibG9jaywgbG9naWNhbExlZnRPZmZz
ZXQsIGxvZ2ljYWxUb3BPZmZzZXQpOwogCiAgICAgaWYgKGNoaWxkcmVuSW5saW5lKCkpIHsKLSAg
ICAgICAgaW50IGNoYW5nZUxvZ2ljYWxUb3AgPSBudW1lcmljX2xpbWl0czxpbnQ+OjptYXgoKTsK
LSAgICAgICAgaW50IGNoYW5nZUxvZ2ljYWxCb3R0b20gPSBudW1lcmljX2xpbWl0czxpbnQ+Ojpt
aW4oKTsKKyAgICAgICAgTGF5b3V0VW5pdCBjaGFuZ2VMb2dpY2FsVG9wID0gbnVtZXJpY19saW1p
dHM8TGF5b3V0VW5pdD46Om1heCgpOworICAgICAgICBMYXlvdXRVbml0IGNoYW5nZUxvZ2ljYWxC
b3R0b20gPSBudW1lcmljX2xpbWl0czxMYXlvdXRVbml0Pjo6bWluKCk7CiAgICAgICAgIGlmICht
X2Zsb2F0aW5nT2JqZWN0cykgewogICAgICAgICAgICAgY29uc3QgRmxvYXRpbmdPYmplY3RTZXQm
IGZsb2F0aW5nT2JqZWN0U2V0ID0gbV9mbG9hdGluZ09iamVjdHMtPnNldCgpOwogICAgICAgICAg
ICAgRmxvYXRpbmdPYmplY3RTZXRJdGVyYXRvciBlbmQgPSBmbG9hdGluZ09iamVjdFNldC5lbmQo
KTsKICAgICAgICAgICAgIGZvciAoRmxvYXRpbmdPYmplY3RTZXRJdGVyYXRvciBpdCA9IGZsb2F0
aW5nT2JqZWN0U2V0LmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgewogICAgICAgICAgICAgICAg
IEZsb2F0aW5nT2JqZWN0KiBmID0gKml0OwogICAgICAgICAgICAgICAgIEZsb2F0aW5nT2JqZWN0
KiBvbGRGbG9hdGluZ09iamVjdCA9IGZsb2F0TWFwLmdldChmLT5tX3JlbmRlcmVyKTsKLSAgICAg
ICAgICAgICAgICBpbnQgbG9naWNhbEJvdHRvbSA9IGxvZ2ljYWxCb3R0b21Gb3JGbG9hdChmKTsK
KyAgICAgICAgICAgICAgICBMYXlvdXRVbml0IGxvZ2ljYWxCb3R0b20gPSBsb2dpY2FsQm90dG9t
Rm9yRmxvYXQoZik7CiAgICAgICAgICAgICAgICAgaWYgKG9sZEZsb2F0aW5nT2JqZWN0KSB7Ci0g
ICAgICAgICAgICAgICAgICAgIGludCBvbGRMb2dpY2FsQm90dG9tID0gbG9naWNhbEJvdHRvbUZv
ckZsb2F0KG9sZEZsb2F0aW5nT2JqZWN0KTsKKyAgICAgICAgICAgICAgICAgICAgTGF5b3V0VW5p
dCBvbGRMb2dpY2FsQm90dG9tID0gbG9naWNhbEJvdHRvbUZvckZsb2F0KG9sZEZsb2F0aW5nT2Jq
ZWN0KTsKICAgICAgICAgICAgICAgICAgICAgaWYgKGxvZ2ljYWxXaWR0aEZvckZsb2F0KGYpICE9
IGxvZ2ljYWxXaWR0aEZvckZsb2F0KG9sZEZsb2F0aW5nT2JqZWN0KSB8fCBsb2dpY2FsTGVmdEZv
ckZsb2F0KGYpICE9IGxvZ2ljYWxMZWZ0Rm9yRmxvYXQob2xkRmxvYXRpbmdPYmplY3QpKSB7CiAg
ICAgICAgICAgICAgICAgICAgICAgICBjaGFuZ2VMb2dpY2FsVG9wID0gMDsKICAgICAgICAgICAg
ICAgICAgICAgICAgIGNoYW5nZUxvZ2ljYWxCb3R0b20gPSBtYXgoY2hhbmdlTG9naWNhbEJvdHRv
bSwgbWF4KGxvZ2ljYWxCb3R0b20sIG9sZExvZ2ljYWxCb3R0b20pKTsKQEAgLTM3ODIsMzAgKzM3
ODMsMzAgQEAgdm9pZCBSZW5kZXJCbG9jazo6Y2xlYXJGbG9hdHMoQmxvY2tMYXlvdQogICAgIH0K
IH0KIAotaW50IFJlbmRlckJsb2NrOjphZGRPdmVyaGFuZ2luZ0Zsb2F0cyhSZW5kZXJCbG9jayog
Y2hpbGQsIGludCBsb2dpY2FsTGVmdE9mZnNldCwgaW50IGxvZ2ljYWxUb3BPZmZzZXQsIGJvb2wg
bWFrZUNoaWxkUGFpbnRPdGhlckZsb2F0cykKK0xheW91dFVuaXQgUmVuZGVyQmxvY2s6OmFkZE92
ZXJoYW5naW5nRmxvYXRzKFJlbmRlckJsb2NrKiBjaGlsZCwgTGF5b3V0VW5pdCBsb2dpY2FsTGVm
dE9mZnNldCwgTGF5b3V0VW5pdCBsb2dpY2FsVG9wT2Zmc2V0LCBib29sIG1ha2VDaGlsZFBhaW50
T3RoZXJGbG9hdHMpCiB7CiAgICAgLy8gUHJldmVudCBmbG9hdHMgZnJvbSBiZWluZyBhZGRlZCB0
byB0aGUgY2FudmFzIGJ5IHRoZSByb290IGVsZW1lbnQsIGUuZy4sIDxodG1sPi4KICAgICBpZiAo
Y2hpbGQtPmhhc092ZXJmbG93Q2xpcCgpIHx8ICFjaGlsZC0+Y29udGFpbnNGbG9hdHMoKSB8fCBj
aGlsZC0+aXNSb290KCkgfHwgY2hpbGQtPmhhc0NvbHVtbnMoKSB8fCBjaGlsZC0+aXNXcml0aW5n
TW9kZVJvb3QoKSkKICAgICAgICAgcmV0dXJuIDA7CiAKLSAgICBpbnQgY2hpbGRMb2dpY2FsVG9w
ID0gY2hpbGQtPmxvZ2ljYWxUb3AoKTsKLSAgICBpbnQgbG93ZXN0RmxvYXRMb2dpY2FsQm90dG9t
ID0gMDsKKyAgICBMYXlvdXRVbml0IGNoaWxkTG9naWNhbFRvcCA9IGNoaWxkLT5sb2dpY2FsVG9w
KCk7CisgICAgTGF5b3V0VW5pdCBsb3dlc3RGbG9hdExvZ2ljYWxCb3R0b20gPSAwOwogCiAgICAg
Ly8gRmxvYXRzIHRoYXQgd2lsbCByZW1haW4gdGhlIGNoaWxkJ3MgcmVzcG9uc2liaWxpdHkgdG8g
cGFpbnQgc2hvdWxkIGZhY3RvciBpbnRvIGl0cwogICAgIC8vIG92ZXJmbG93LgogICAgIEZsb2F0
aW5nT2JqZWN0U2V0SXRlcmF0b3IgY2hpbGRFbmQgPSBjaGlsZC0+bV9mbG9hdGluZ09iamVjdHMt
PnNldCgpLmVuZCgpOwogICAgIGZvciAoRmxvYXRpbmdPYmplY3RTZXRJdGVyYXRvciBjaGlsZEl0
ID0gY2hpbGQtPm1fZmxvYXRpbmdPYmplY3RzLT5zZXQoKS5iZWdpbigpOyBjaGlsZEl0ICE9IGNo
aWxkRW5kOyArK2NoaWxkSXQpIHsKICAgICAgICAgRmxvYXRpbmdPYmplY3QqIHIgPSAqY2hpbGRJ
dDsKLSAgICAgICAgaW50IGxvZ2ljYWxCb3R0b21Gb3JGbG9hdCA9IG1pbih0aGlzLT5sb2dpY2Fs
Qm90dG9tRm9yRmxvYXQociksIG51bWVyaWNfbGltaXRzPGludD46Om1heCgpIC0gY2hpbGRMb2dp
Y2FsVG9wKTsKLSAgICAgICAgaW50IGxvZ2ljYWxCb3R0b20gPSBjaGlsZExvZ2ljYWxUb3AgKyBs
b2dpY2FsQm90dG9tRm9yRmxvYXQ7CisgICAgICAgIExheW91dFVuaXQgbG9naWNhbEJvdHRvbUZv
ckZsb2F0ID0gbWluKHRoaXMtPmxvZ2ljYWxCb3R0b21Gb3JGbG9hdChyKSwgbnVtZXJpY19saW1p
dHM8TGF5b3V0VW5pdD46Om1heCgpIC0gY2hpbGRMb2dpY2FsVG9wKTsKKyAgICAgICAgTGF5b3V0
VW5pdCBsb2dpY2FsQm90dG9tID0gY2hpbGRMb2dpY2FsVG9wICsgbG9naWNhbEJvdHRvbUZvckZs
b2F0OwogICAgICAgICBsb3dlc3RGbG9hdExvZ2ljYWxCb3R0b20gPSBtYXgobG93ZXN0RmxvYXRM
b2dpY2FsQm90dG9tLCBsb2dpY2FsQm90dG9tKTsKIAogICAgICAgICBpZiAobG9naWNhbEJvdHRv
bSA+IGxvZ2ljYWxIZWlnaHQoKSkgewogICAgICAgICAgICAgLy8gSWYgdGhlIG9iamVjdCBpcyBu
b3QgaW4gdGhlIGxpc3QsIHdlIGFkZCBpdCBub3cuCiAgICAgICAgICAgICBpZiAoIWNvbnRhaW5z
RmxvYXQoci0+bV9yZW5kZXJlcikpIHsKLSAgICAgICAgICAgICAgICBpbnQgbGVmdE9mZnNldCA9
IGlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCkgPyBsb2dpY2FsTGVmdE9mZnNldCA6IGxvZ2ljYWxU
b3BPZmZzZXQ7Ci0gICAgICAgICAgICAgICAgaW50IHRvcE9mZnNldCA9IGlzSG9yaXpvbnRhbFdy
aXRpbmdNb2RlKCkgPyBsb2dpY2FsVG9wT2Zmc2V0IDogbG9naWNhbExlZnRPZmZzZXQ7Ci0gICAg
ICAgICAgICAgICAgRmxvYXRpbmdPYmplY3QqIGZsb2F0aW5nT2JqID0gbmV3IEZsb2F0aW5nT2Jq
ZWN0KHItPnR5cGUoKSwgSW50UmVjdChyLT54KCkgLSBsZWZ0T2Zmc2V0LCByLT55KCkgLSB0b3BP
ZmZzZXQsIHItPndpZHRoKCksIHItPmhlaWdodCgpKSk7CisgICAgICAgICAgICAgICAgTGF5b3V0
VW5pdCBsZWZ0T2Zmc2V0ID0gaXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKSA/IGxvZ2ljYWxMZWZ0
T2Zmc2V0IDogbG9naWNhbFRvcE9mZnNldDsKKyAgICAgICAgICAgICAgICBMYXlvdXRVbml0IHRv
cE9mZnNldCA9IGlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCkgPyBsb2dpY2FsVG9wT2Zmc2V0IDog
bG9naWNhbExlZnRPZmZzZXQ7CisgICAgICAgICAgICAgICAgRmxvYXRpbmdPYmplY3QqIGZsb2F0
aW5nT2JqID0gbmV3IEZsb2F0aW5nT2JqZWN0KHItPnR5cGUoKSwgTGF5b3V0UmVjdChyLT54KCkg
LSBsZWZ0T2Zmc2V0LCByLT55KCkgLSB0b3BPZmZzZXQsIHItPndpZHRoKCksIHItPmhlaWdodCgp
KSk7CiAgICAgICAgICAgICAgICAgZmxvYXRpbmdPYmotPm1fcmVuZGVyZXIgPSByLT5tX3JlbmRl
cmVyOwogCiAgICAgICAgICAgICAgICAgLy8gVGhlIG5lYXJlc3QgZW5jbG9zaW5nIGxheWVyIGFs
d2F5cyBwYWludHMgdGhlIGZsb2F0IChzbyB0aGF0IHppbmRleCBhbmQgc3RhY2tpbmcKQEAgLTM4
MzksNyArMzg0MCw3IEBAIGludCBSZW5kZXJCbG9jazo6YWRkT3ZlcmhhbmdpbmdGbG9hdHMoUmUK
ICAgICAgICAgICAgIC8vIFNpbmNlIHRoZSBmbG9hdCBkb2Vzbid0IG92ZXJoYW5nLCBpdCBkaWRu
J3QgZ2V0IHB1dCBpbnRvIG91ciBsaXN0LiAgV2UgbmVlZCB0byBnbyBhaGVhZCBhbmQgYWRkIGl0
cyBvdmVyZmxvdyBpbiB0byB0aGUKICAgICAgICAgICAgIC8vIGNoaWxkIG5vdy4KICAgICAgICAg
ICAgIGlmIChyLT5tX2lzRGVzY2VuZGFudCkKLSAgICAgICAgICAgICAgICBjaGlsZC0+YWRkT3Zl
cmZsb3dGcm9tQ2hpbGQoci0+bV9yZW5kZXJlciwgSW50U2l6ZSh4UG9zaXRpb25Gb3JGbG9hdElu
Y2x1ZGluZ01hcmdpbihyKSwgeVBvc2l0aW9uRm9yRmxvYXRJbmNsdWRpbmdNYXJnaW4ocikpKTsK
KyAgICAgICAgICAgICAgICBjaGlsZC0+YWRkT3ZlcmZsb3dGcm9tQ2hpbGQoci0+bV9yZW5kZXJl
ciwgTGF5b3V0U2l6ZSh4UG9zaXRpb25Gb3JGbG9hdEluY2x1ZGluZ01hcmdpbihyKSwgeVBvc2l0
aW9uRm9yRmxvYXRJbmNsdWRpbmdNYXJnaW4ocikpKTsKICAgICAgICAgfQogICAgIH0KICAgICBy
ZXR1cm4gbG93ZXN0RmxvYXRMb2dpY2FsQm90dG9tOwpAQCAtMzg1OCw3ICszODU5LDcgQEAgYm9v
bCBSZW5kZXJCbG9jazo6aGFzT3ZlcmhhbmdpbmdGbG9hdChSZQogICAgIHJldHVybiBsb2dpY2Fs
Qm90dG9tRm9yRmxvYXQoKml0KSA+IGxvZ2ljYWxIZWlnaHQoKTsKIH0KIAotdm9pZCBSZW5kZXJC
bG9jazo6YWRkSW50cnVkaW5nRmxvYXRzKFJlbmRlckJsb2NrKiBwcmV2LCBpbnQgbG9naWNhbExl
ZnRPZmZzZXQsIGludCBsb2dpY2FsVG9wT2Zmc2V0KQordm9pZCBSZW5kZXJCbG9jazo6YWRkSW50
cnVkaW5nRmxvYXRzKFJlbmRlckJsb2NrKiBwcmV2LCBMYXlvdXRVbml0IGxvZ2ljYWxMZWZ0T2Zm
c2V0LCBMYXlvdXRVbml0IGxvZ2ljYWxUb3BPZmZzZXQpCiB7CiAgICAgLy8gSWYgdGhlIHBhcmVu
dCBvciBwcmV2aW91cyBzaWJsaW5nIGRvZXNuJ3QgaGF2ZSBhbnkgZmxvYXRzIHRvIGFkZCwgZG9u
J3QgYm90aGVyLgogICAgIGlmICghcHJldi0+bV9mbG9hdGluZ09iamVjdHMpCkBAIC0zODcyLDEw
ICszODczLDEwIEBAIHZvaWQgUmVuZGVyQmxvY2s6OmFkZEludHJ1ZGluZ0Zsb2F0cyhSZW4KICAg
ICAgICAgRmxvYXRpbmdPYmplY3QqIHIgPSAqcHJldkl0OwogICAgICAgICBpZiAobG9naWNhbEJv
dHRvbUZvckZsb2F0KHIpID4gbG9naWNhbFRvcE9mZnNldCkgewogICAgICAgICAgICAgaWYgKCFt
X2Zsb2F0aW5nT2JqZWN0cyB8fCAhbV9mbG9hdGluZ09iamVjdHMtPnNldCgpLmNvbnRhaW5zKHIp
KSB7Ci0gICAgICAgICAgICAgICAgaW50IGxlZnRPZmZzZXQgPSBpc0hvcml6b250YWxXcml0aW5n
TW9kZSgpID8gbG9naWNhbExlZnRPZmZzZXQgOiBsb2dpY2FsVG9wT2Zmc2V0OwotICAgICAgICAg
ICAgICAgIGludCB0b3BPZmZzZXQgPSBpc0hvcml6b250YWxXcml0aW5nTW9kZSgpID8gbG9naWNh
bFRvcE9mZnNldCA6IGxvZ2ljYWxMZWZ0T2Zmc2V0OworICAgICAgICAgICAgICAgIExheW91dFVu
aXQgbGVmdE9mZnNldCA9IGlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCkgPyBsb2dpY2FsTGVmdE9m
ZnNldCA6IGxvZ2ljYWxUb3BPZmZzZXQ7CisgICAgICAgICAgICAgICAgTGF5b3V0VW5pdCB0b3BP
ZmZzZXQgPSBpc0hvcml6b250YWxXcml0aW5nTW9kZSgpID8gbG9naWNhbFRvcE9mZnNldCA6IGxv
Z2ljYWxMZWZ0T2Zmc2V0OwogICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIEZsb2F0
aW5nT2JqZWN0KiBmbG9hdGluZ09iaiA9IG5ldyBGbG9hdGluZ09iamVjdChyLT50eXBlKCksIElu
dFJlY3Qoci0+eCgpIC0gbGVmdE9mZnNldCwgci0+eSgpIC0gdG9wT2Zmc2V0LCByLT53aWR0aCgp
LCByLT5oZWlnaHQoKSkpOworICAgICAgICAgICAgICAgIEZsb2F0aW5nT2JqZWN0KiBmbG9hdGlu
Z09iaiA9IG5ldyBGbG9hdGluZ09iamVjdChyLT50eXBlKCksIExheW91dFJlY3Qoci0+eCgpIC0g
bGVmdE9mZnNldCwgci0+eSgpIC0gdG9wT2Zmc2V0LCByLT53aWR0aCgpLCByLT5oZWlnaHQoKSkp
OwogCiAgICAgICAgICAgICAgICAgLy8gQXBwbHlpbmcgdGhlIGNoaWxkJ3MgbWFyZ2luIG1ha2Vz
IG5vIHNlbnNlIGluIHRoZSBjYXNlIHdoZXJlIHRoZSBjaGlsZCB3YXMgcGFzc2VkIGluLgogICAg
ICAgICAgICAgICAgIC8vIHNpbmNlIHRoaXMgbWFyZ2luIHdhcyBhZGRlZCBhbHJlYWR5IHRocm91
Z2ggdGhlIG1vZGlmaWNhdGlvbiBvZiB0aGUgfGxvZ2ljYWxMZWZ0T2Zmc2V0fCB2YXJpYWJsZQpA
QCAtMzk1OCw3ICszOTU5LDcgQEAgdm9pZCBSZW5kZXJCbG9jazo6bWFya1NpYmxpbmdzV2l0aEZs
b2F0cwogICAgIH0KIH0KIAotaW50IFJlbmRlckJsb2NrOjpnZXRDbGVhckRlbHRhKFJlbmRlckJv
eCogY2hpbGQsIGludCB5UG9zKQorTGF5b3V0VW5pdCBSZW5kZXJCbG9jazo6Z2V0Q2xlYXJEZWx0
YShSZW5kZXJCb3gqIGNoaWxkLCBMYXlvdXRVbml0IHlQb3MpCiB7CiAgICAgLy8gVGhlcmUgaXMg
bm8gbmVlZCB0byBjb21wdXRlIGNsZWFyYW5jZSBpZiB3ZSBoYXZlIG5vIGZsb2F0cy4KICAgICBp
ZiAoIWNvbnRhaW5zRmxvYXRzKCkpCkBAIC0zOTY2LDcgKzM5NjcsNyBAQCBpbnQgUmVuZGVyQmxv
Y2s6OmdldENsZWFyRGVsdGEoUmVuZGVyQm94CiAgICAgCiAgICAgLy8gQXQgbGVhc3Qgb25lIGZs
b2F0IGlzIHByZXNlbnQuICBXZSBuZWVkIHRvIHBlcmZvcm0gdGhlIGNsZWFyYW5jZSBjb21wdXRh
dGlvbi4KICAgICBib29sIGNsZWFyU2V0ID0gY2hpbGQtPnN0eWxlKCktPmNsZWFyKCkgIT0gQ05P
TkU7Ci0gICAgaW50IGJvdHRvbSA9IDA7CisgICAgTGF5b3V0VW5pdCBib3R0b20gPSAwOwogICAg
IHN3aXRjaCAoY2hpbGQtPnN0eWxlKCktPmNsZWFyKCkpIHsKICAgICAgICAgY2FzZSBDTk9ORToK
ICAgICAgICAgICAgIGJyZWFrOwpAQCAtMzk4MiwyMiArMzk4MywyNiBAQCBpbnQgUmVuZGVyQmxv
Y2s6OmdldENsZWFyRGVsdGEoUmVuZGVyQm94CiAgICAgfQogCiAgICAgLy8gV2UgYWxzbyBjbGVh
ciBmbG9hdHMgaWYgd2UgYXJlIHRvbyBiaWcgdG8gc2l0IG9uIHRoZSBzYW1lIGxpbmUgYXMgYSBm
bG9hdCAoYW5kIHdpc2ggdG8gYXZvaWQgZmxvYXRzIGJ5IGRlZmF1bHQpLgotICAgIGludCByZXN1
bHQgPSBjbGVhclNldCA/IG1heCgwLCBib3R0b20gLSB5UG9zKSA6IDA7CisgICAgTGF5b3V0VW5p
dCByZXN1bHQgPSBjbGVhclNldCA/IG1heDxMYXlvdXRVbml0PigwLCBib3R0b20gLSB5UG9zKSA6
IDA7CiAgICAgaWYgKCFyZXN1bHQgJiYgY2hpbGQtPmF2b2lkc0Zsb2F0cygpKSB7Ci0gICAgICAg
IGludCB5ID0geVBvczsKKyAgICAgICAgTGF5b3V0VW5pdCB5ID0geVBvczsKICAgICAgICAgd2hp
bGUgKHRydWUpIHsKLSAgICAgICAgICAgIGludCB3aWR0aEF0WSA9IGF2YWlsYWJsZUxvZ2ljYWxX
aWR0aEZvckxpbmUoeSwgZmFsc2UpOworICAgICAgICAgICAgTGF5b3V0VW5pdCB3aWR0aEF0WSA9
IGF2YWlsYWJsZUxvZ2ljYWxXaWR0aEZvckxpbmUoeSwgZmFsc2UpOworICAgICAgICAgICAgLy8g
RklYTUU6IENoYW5nZSB0byB1c2Ugcm91Z2hseUVxdWFscyB3aGVuIHdlIG1vdmUgdG8gZmxvYXQu
CisgICAgICAgICAgICAvLyBTZWUgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTY2MTQ4CiAgICAgICAgICAgICBpZiAod2lkdGhBdFkgPT0gYXZhaWxhYmxlTG9naWNhbFdp
ZHRoKCkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIHkgLSB5UG9zOwogCi0gICAgICAgICAgICBp
bnQgb2xkQ2hpbGRZID0gY2hpbGQtPnkoKTsKLSAgICAgICAgICAgIGludCBvbGRDaGlsZFdpZHRo
ID0gY2hpbGQtPndpZHRoKCk7CisgICAgICAgICAgICBMYXlvdXRVbml0IG9sZENoaWxkWSA9IGNo
aWxkLT55KCk7CisgICAgICAgICAgICBMYXlvdXRVbml0IG9sZENoaWxkV2lkdGggPSBjaGlsZC0+
d2lkdGgoKTsKICAgICAgICAgICAgIGNoaWxkLT5zZXRZKHkpOwogICAgICAgICAgICAgY2hpbGQt
PmNvbXB1dGVMb2dpY2FsV2lkdGgoKTsKLSAgICAgICAgICAgIGludCBjaGlsZFdpZHRoQXRZID0g
Y2hpbGQtPndpZHRoKCk7CisgICAgICAgICAgICBMYXlvdXRVbml0IGNoaWxkV2lkdGhBdFkgPSBj
aGlsZC0+d2lkdGgoKTsKICAgICAgICAgICAgIGNoaWxkLT5zZXRZKG9sZENoaWxkWSk7CiAgICAg
ICAgICAgICBjaGlsZC0+c2V0V2lkdGgob2xkQ2hpbGRXaWR0aCk7CiAKKyAgICAgICAgICAgIC8v
IEZJWE1FOiBDaGFuZ2UgdG8gdXNlIHJvdWdobHlFcXVhbHMgd2hlbiB3ZSBtb3ZlIHRvIGZsb2F0
LgorICAgICAgICAgICAgLy8gU2VlIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD02NjE0OAogICAgICAgICAgICAgaWYgKGNoaWxkV2lkdGhBdFkgPD0gd2lkdGhBdFkpCiAg
ICAgICAgICAgICAgICAgcmV0dXJuIHkgLSB5UG9zOwogCkBAIC00MjY0LDcgKzQyNjksNyBAQCBW
aXNpYmxlUG9zaXRpb24gUmVuZGVyQmxvY2s6OnBvc2l0aW9uRm9yCiAgICAgICAgIH0KIAogICAg
ICAgICAvLyBwYXNzIHRoZSBib3ggYSB0b3AgcG9zaXRpb24gdGhhdCBpcyBpbnNpZGUgaXQKLSAg
ICAgICAgSW50UG9pbnQgcG9pbnQocG9pbnRJbkxvZ2ljYWxDb250ZW50cy54KCksIGNsb3Nlc3RC
b3gtPmxvZ2ljYWxUb3AoKSk7CisgICAgICAgIExheW91dFBvaW50IHBvaW50KHBvaW50SW5Mb2dp
Y2FsQ29udGVudHMueCgpLCBjbG9zZXN0Qm94LT5sb2dpY2FsVG9wKCkpOwogICAgICAgICBpZiAo
IWlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCkpCiAgICAgICAgICAgICBwb2ludCA9IHBvaW50LnRy
YW5zcG9zZWRQb2ludCgpOwogICAgICAgICBpZiAoY2xvc2VzdEJveC0+cmVuZGVyZXIoKS0+aXNS
ZXBsYWNlZCgpKQpAQCAtNDMzMyw3ICs0MzM4LDcgQEAgVmlzaWJsZVBvc2l0aW9uIFJlbmRlckJs
b2NrOjpwb3NpdGlvbkZvcgogICAgIHJldHVybiBSZW5kZXJCb3g6OnBvc2l0aW9uRm9yUG9pbnQo
cG9pbnQpOwogfQogCi12b2lkIFJlbmRlckJsb2NrOjpvZmZzZXRGb3JDb250ZW50cyhJbnRQb2lu
dCYgb2Zmc2V0KSBjb25zdAordm9pZCBSZW5kZXJCbG9jazo6b2Zmc2V0Rm9yQ29udGVudHMoTGF5
b3V0UG9pbnQmIG9mZnNldCkgY29uc3QKIHsKICAgICBpZiAoaGFzT3ZlcmZsb3dDbGlwKCkpCiAg
ICAgICAgIG9mZnNldCArPSBsYXllcigpLT5zY3JvbGxlZENvbnRlbnRPZmZzZXQoKTsKQEAgLTQz
ODcsNyArNDM5Miw3IEBAIHZvaWQgUmVuZGVyQmxvY2s6OmNhbGNDb2x1bW5XaWR0aCgpCiAgICAg
c2V0RGVzaXJlZENvbHVtbkNvdW50QW5kV2lkdGgoZGVzaXJlZENvbHVtbkNvdW50LCBkZXNpcmVk
Q29sdW1uV2lkdGgpOwogfQogCi12b2lkIFJlbmRlckJsb2NrOjpzZXREZXNpcmVkQ29sdW1uQ291
bnRBbmRXaWR0aChpbnQgY291bnQsIGludCB3aWR0aCkKK3ZvaWQgUmVuZGVyQmxvY2s6OnNldERl
c2lyZWRDb2x1bW5Db3VudEFuZFdpZHRoKGludCBjb3VudCwgTGF5b3V0VW5pdCB3aWR0aCkKIHsK
ICAgICBib29sIGRlc3Ryb3lDb2x1bW5zID0gIWZpcnN0Q2hpbGQoKQogICAgICAgICAgICAgICAg
ICAgICAgICAgICB8fCAoY291bnQgPT0gMSAmJiBzdHlsZSgpLT5oYXNBdXRvQ29sdW1uV2lkdGgo
KSkKQEAgLTQ0NjksMTkgKzQ0NzQsMTkgQEAgYm9vbCBSZW5kZXJCbG9jazo6bGF5b3V0Q29sdW1u
cyhib29sIGhhcwogICAgIENvbHVtbkluZm8qIGNvbEluZm8gPSBjb2x1bW5JbmZvKCk7CiAgICAg
aW50IGRlc2lyZWRDb2x1bW5Db3VudCA9IGNvbEluZm8tPmRlc2lyZWRDb2x1bW5Db3VudCgpOwog
ICAgIGlmICghaGFzU3BlY2lmaWVkUGFnZUxvZ2ljYWxIZWlnaHQpIHsKLSAgICAgICAgaW50IGNv
bHVtbkhlaWdodCA9IHBhZ2VMb2dpY2FsSGVpZ2h0OworICAgICAgICBMYXlvdXRVbml0IGNvbHVt
bkhlaWdodCA9IHBhZ2VMb2dpY2FsSGVpZ2h0OwogICAgICAgICBpbnQgbWluQ29sdW1uQ291bnQg
PSBjb2xJbmZvLT5mb3JjZWRCcmVha3MoKSArIDE7CiAgICAgICAgIGlmIChtaW5Db2x1bW5Db3Vu
dCA+PSBkZXNpcmVkQ29sdW1uQ291bnQpIHsKICAgICAgICAgICAgIC8vIFRoZSBmb3JjZWQgcGFn
ZSBicmVha3MgYXJlIGluIGNvbnRyb2wgb2YgdGhlIGJhbGFuY2luZy4gIEp1c3Qgc2V0IHRoZSBj
b2x1bW4gaGVpZ2h0IHRvIHRoZQogICAgICAgICAgICAgLy8gbWF4aW11bSBwYWdlIGJyZWFrIGRp
c3RhbmNlLgogICAgICAgICAgICAgaWYgKCFwYWdlTG9naWNhbEhlaWdodCkgewotICAgICAgICAg
ICAgICAgIGludCBkaXN0YW5jZUJldHdlZW5CcmVha3MgPSBtYXgoY29sSW5mby0+bWF4aW11bURp
c3RhbmNlQmV0d2VlbkZvcmNlZEJyZWFrcygpLAorICAgICAgICAgICAgICAgIExheW91dFVuaXQg
ZGlzdGFuY2VCZXR3ZWVuQnJlYWtzID0gbWF4KGNvbEluZm8tPm1heGltdW1EaXN0YW5jZUJldHdl
ZW5Gb3JjZWRCcmVha3MoKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHZpZXcoKS0+bGF5b3V0U3RhdGUoKS0+cGFnZUxvZ2ljYWxPZmZzZXQoYm9yZGVy
QmVmb3JlKCkgKyBwYWRkaW5nQmVmb3JlKCkgKyBjb250ZW50TG9naWNhbEhlaWdodCgpKSAtIGNv
bEluZm8tPmZvcmNlZEJyZWFrT2Zmc2V0KCkpOwogICAgICAgICAgICAgICAgIGNvbHVtbkhlaWdo
dCA9IG1heChjb2xJbmZvLT5taW5pbXVtQ29sdW1uSGVpZ2h0KCksIGRpc3RhbmNlQmV0d2VlbkJy
ZWFrcyk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0gZWxzZSBpZiAoY29udGVudExvZ2ljYWxI
ZWlnaHQoKSA+IHBhZ2VMb2dpY2FsSGVpZ2h0ICogZGVzaXJlZENvbHVtbkNvdW50KSB7CiAgICAg
ICAgICAgICAvLyBOb3cgdGhhdCB3ZSBrbm93IHRoZSBpbnRyaW5zaWMgaGVpZ2h0IG9mIHRoZSBj
b2x1bW5zLCB3ZSBoYXZlIHRvIHJlYmFsYW5jZSB0aGVtLgotICAgICAgICAgICAgY29sdW1uSGVp
Z2h0ID0gbWF4KGNvbEluZm8tPm1pbmltdW1Db2x1bW5IZWlnaHQoKSwgKGludCljZWlsZigoZmxv
YXQpY29udGVudExvZ2ljYWxIZWlnaHQoKSAvIGRlc2lyZWRDb2x1bW5Db3VudCkpOworICAgICAg
ICAgICAgY29sdW1uSGVpZ2h0ID0gbWF4KGNvbEluZm8tPm1pbmltdW1Db2x1bW5IZWlnaHQoKSwg
Y2VpbGVkTGF5b3V0VW5pdCgoZmxvYXQpY29udGVudExvZ2ljYWxIZWlnaHQoKSAvIGRlc2lyZWRD
b2x1bW5Db3VudCkpOwogICAgICAgICB9CiAgICAgICAgIAogICAgICAgICBpZiAoY29sdW1uSGVp
Z2h0ICYmIGNvbHVtbkhlaWdodCAhPSBwYWdlTG9naWNhbEhlaWdodCkgewpAQCAtNDUwMyw3ICs0
NTA4LDcgQEAgYm9vbCBSZW5kZXJCbG9jazo6bGF5b3V0Q29sdW1ucyhib29sIGhhcwogICAgIHJl
dHVybiBmYWxzZTsKIH0KIAotdm9pZCBSZW5kZXJCbG9jazo6YWRqdXN0UG9pbnRUb0NvbHVtbkNv
bnRlbnRzKEludFBvaW50JiBwb2ludCkgY29uc3QKK3ZvaWQgUmVuZGVyQmxvY2s6OmFkanVzdFBv
aW50VG9Db2x1bW5Db250ZW50cyhMYXlvdXRQb2ludCYgcG9pbnQpIGNvbnN0CiB7CiAgICAgLy8g
SnVzdCBiYWlsIGlmIHdlIGhhdmUgbm8gY29sdW1ucy4KICAgICBpZiAoIWhhc0NvbHVtbnMoKSkK
QEAgLTQ1MTQsMTUgKzQ1MTksMTUgQEAgdm9pZCBSZW5kZXJCbG9jazo6YWRqdXN0UG9pbnRUb0Nv
bHVtbkNvbgogICAgICAgICByZXR1cm47CiAKICAgICAvLyBEZXRlcm1pbmUgd2hpY2ggY29sdW1u
cyB3ZSBpbnRlcnNlY3QuCi0gICAgaW50IGNvbEdhcCA9IGNvbHVtbkdhcCgpOwotICAgIGludCBo
YWxmQ29sR2FwID0gY29sR2FwIC8gMjsKLSAgICBJbnRQb2ludCBjb2x1bW5Qb2ludChjb2x1bW5S
ZWN0QXQoY29sSW5mbywgMCkubG9jYXRpb24oKSk7Ci0gICAgaW50IGxvZ2ljYWxPZmZzZXQgPSAw
OworICAgIExheW91dFVuaXQgY29sR2FwID0gY29sdW1uR2FwKCk7CisgICAgTGF5b3V0VW5pdCBo
YWxmQ29sR2FwID0gY29sR2FwIC8gMjsKKyAgICBMYXlvdXRQb2ludCBjb2x1bW5Qb2ludChjb2x1
bW5SZWN0QXQoY29sSW5mbywgMCkubG9jYXRpb24oKSk7CisgICAgTGF5b3V0VW5pdCBsb2dpY2Fs
T2Zmc2V0ID0gMDsKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgY29sSW5mby0+Y29sdW1u
Q291bnQoKTsgaSsrKSB7CiAgICAgICAgIC8vIEFkZCBpbiBoYWxmIHRoZSBjb2x1bW4gZ2FwIHRv
IHRoZSBsZWZ0IGFuZCByaWdodCBvZiB0aGUgcmVjdC4KLSAgICAgICAgSW50UmVjdCBjb2xSZWN0
ID0gY29sdW1uUmVjdEF0KGNvbEluZm8sIGkpOworICAgICAgICBMYXlvdXRSZWN0IGNvbFJlY3Qg
PSBjb2x1bW5SZWN0QXQoY29sSW5mbywgaSk7CiAgICAgICAgIGlmIChpc0hvcml6b250YWxXcml0
aW5nTW9kZSgpKSB7Ci0gICAgICAgICAgICBJbnRSZWN0IGdhcEFuZENvbHVtblJlY3QoY29sUmVj
dC54KCkgLSBoYWxmQ29sR2FwLCBjb2xSZWN0LnkoKSwgY29sUmVjdC53aWR0aCgpICsgY29sR2Fw
LCBjb2xSZWN0LmhlaWdodCgpKTsKKyAgICAgICAgICAgIExheW91dFJlY3QgZ2FwQW5kQ29sdW1u
UmVjdChjb2xSZWN0LngoKSAtIGhhbGZDb2xHYXAsIGNvbFJlY3QueSgpLCBjb2xSZWN0LndpZHRo
KCkgKyBjb2xHYXAsIGNvbFJlY3QuaGVpZ2h0KCkpOwogICAgICAgICAgICAgaWYgKHBvaW50Lngo
KSA+PSBnYXBBbmRDb2x1bW5SZWN0LngoKSAmJiBwb2ludC54KCkgPCBnYXBBbmRDb2x1bW5SZWN0
Lm1heFgoKSkgewogICAgICAgICAgICAgICAgIC8vIEZJWE1FOiBUaGUgY2xhbXBpbmcgdGhhdCBm
b2xsb3dzIGlzIG5vdCBjb21wbGV0ZWx5IHJpZ2h0IGZvciByaWdodC10by1sZWZ0CiAgICAgICAg
ICAgICAgICAgLy8gY29udGVudC4KQEAgLTQ1NDQsNyArNDU0OSw3IEBAIHZvaWQgUmVuZGVyQmxv
Y2s6OmFkanVzdFBvaW50VG9Db2x1bW5Db24KICAgICAgICAgICAgIC8vIE1vdmUgdG8gdGhlIG5l
eHQgcG9zaXRpb24uCiAgICAgICAgICAgICBsb2dpY2FsT2Zmc2V0ICs9IGNvbFJlY3QuaGVpZ2h0
KCk7CiAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBJbnRSZWN0IGdhcEFuZENvbHVtblJl
Y3QoY29sUmVjdC54KCksIGNvbFJlY3QueSgpIC0gaGFsZkNvbEdhcCwgY29sUmVjdC53aWR0aCgp
LCBjb2xSZWN0LmhlaWdodCgpICsgY29sR2FwKTsKKyAgICAgICAgICAgIExheW91dFJlY3QgZ2Fw
QW5kQ29sdW1uUmVjdChjb2xSZWN0LngoKSwgY29sUmVjdC55KCkgLSBoYWxmQ29sR2FwLCBjb2xS
ZWN0LndpZHRoKCksIGNvbFJlY3QuaGVpZ2h0KCkgKyBjb2xHYXApOwogICAgICAgICAgICAgaWYg
KHBvaW50LnkoKSA+PSBnYXBBbmRDb2x1bW5SZWN0LnkoKSAmJiBwb2ludC55KCkgPCBnYXBBbmRD
b2x1bW5SZWN0Lm1heFkoKSkgewogICAgICAgICAgICAgICAgIC8vIEZJWE1FOiBUaGUgY2xhbXBp
bmcgdGhhdCBmb2xsb3dzIGlzIG5vdCBjb21wbGV0ZWx5IHJpZ2h0IGZvciByaWdodC10by1sZWZ0
CiAgICAgICAgICAgICAgICAgLy8gY29udGVudC4KQEAgLTUyMDUsOCArNTIxMCw4IEBAIHZvaWQg
UmVuZGVyQmxvY2s6OmNvbXB1dGVCbG9ja1ByZWZlcnJlZEwKICAgICB9CiAKICAgICAvLyBBbHdh
eXMgbWFrZSBzdXJlIHRoZXNlIHZhbHVlcyBhcmUgbm9uLW5lZ2F0aXZlLgotICAgIG1fbWluUHJl
ZmVycmVkTG9naWNhbFdpZHRoID0gbWF4KDAsIG1fbWluUHJlZmVycmVkTG9naWNhbFdpZHRoKTsK
LSAgICBtX21heFByZWZlcnJlZExvZ2ljYWxXaWR0aCA9IG1heCgwLCBtX21heFByZWZlcnJlZExv
Z2ljYWxXaWR0aCk7CisgICAgbV9taW5QcmVmZXJyZWRMb2dpY2FsV2lkdGggPSBtYXg8TGF5b3V0
VW5pdD4oMCwgbV9taW5QcmVmZXJyZWRMb2dpY2FsV2lkdGgpOworICAgIG1fbWF4UHJlZmVycmVk
TG9naWNhbFdpZHRoID0gbWF4PExheW91dFVuaXQ+KDAsIG1fbWF4UHJlZmVycmVkTG9naWNhbFdp
ZHRoKTsKIAogICAgIG1fbWF4UHJlZmVycmVkTG9naWNhbFdpZHRoID0gbWF4KGZsb2F0TGVmdFdp
ZHRoICsgZmxvYXRSaWdodFdpZHRoLCBtX21heFByZWZlcnJlZExvZ2ljYWxXaWR0aCk7CiB9CkBA
IC01MjI1LDcgKzUyMzAsNyBAQCBib29sIFJlbmRlckJsb2NrOjpoYXNMaW5lSWZFbXB0eSgpIGNv
bnN0CiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi1pbnQgUmVuZGVyQmxvY2s6OmxpbmVIZWlnaHQo
Ym9vbCBmaXJzdExpbmUsIExpbmVEaXJlY3Rpb25Nb2RlIGRpcmVjdGlvbiwgTGluZVBvc2l0aW9u
TW9kZSBsaW5lUG9zaXRpb25Nb2RlKSBjb25zdAorTGF5b3V0VW5pdCBSZW5kZXJCbG9jazo6bGlu
ZUhlaWdodChib29sIGZpcnN0TGluZSwgTGluZURpcmVjdGlvbk1vZGUgZGlyZWN0aW9uLCBMaW5l
UG9zaXRpb25Nb2RlIGxpbmVQb3NpdGlvbk1vZGUpIGNvbnN0CiB7CiAgICAgLy8gSW5saW5lIGJs
b2NrcyBhcmUgcmVwbGFjZWQgZWxlbWVudHMuIE90aGVyd2lzZSwganVzdCBwYXNzIG9mZiB0bwog
ICAgIC8vIHRoZSBiYXNlIGNsYXNzLiAgSWYgd2UncmUgYmVpbmcgcXVlcmllZCBhcyB0aG91Z2gg
d2UncmUgdGhlIHJvb3QgbGluZQpAQCAtNTI0Niw3ICs1MjUxLDcgQEAgaW50IFJlbmRlckJsb2Nr
OjpsaW5lSGVpZ2h0KGJvb2wgZmlyc3RMaQogICAgIHJldHVybiBtX2xpbmVIZWlnaHQ7CiB9CiAK
LWludCBSZW5kZXJCbG9jazo6YmFzZWxpbmVQb3NpdGlvbihGb250QmFzZWxpbmUgYmFzZWxpbmVU
eXBlLCBib29sIGZpcnN0TGluZSwgTGluZURpcmVjdGlvbk1vZGUgZGlyZWN0aW9uLCBMaW5lUG9z
aXRpb25Nb2RlIGxpbmVQb3NpdGlvbk1vZGUpIGNvbnN0CitMYXlvdXRVbml0IFJlbmRlckJsb2Nr
OjpiYXNlbGluZVBvc2l0aW9uKEZvbnRCYXNlbGluZSBiYXNlbGluZVR5cGUsIGJvb2wgZmlyc3RM
aW5lLCBMaW5lRGlyZWN0aW9uTW9kZSBkaXJlY3Rpb24sIExpbmVQb3NpdGlvbk1vZGUgbGluZVBv
c2l0aW9uTW9kZSkgY29uc3QKIHsKICAgICAvLyBJbmxpbmUgYmxvY2tzIGFyZSByZXBsYWNlZCBl
bGVtZW50cy4gT3RoZXJ3aXNlLCBqdXN0IHBhc3Mgb2ZmIHRvCiAgICAgLy8gdGhlIGJhc2UgY2xh
c3MuICBJZiB3ZSdyZSBiZWluZyBxdWVyaWVkIGFzIHRob3VnaCB3ZSdyZSB0aGUgcm9vdCBsaW5l
CkBAIC01MjgyLDcgKzUyODcsNyBAQCBpbnQgUmVuZGVyQmxvY2s6OmJhc2VsaW5lUG9zaXRpb24o
Rm9udEJhCiAgICAgcmV0dXJuIGZvbnRNZXRyaWNzLmFzY2VudChiYXNlbGluZVR5cGUpICsgKGxp
bmVIZWlnaHQoZmlyc3RMaW5lLCBkaXJlY3Rpb24sIGxpbmVQb3NpdGlvbk1vZGUpIC0gZm9udE1l
dHJpY3MuaGVpZ2h0KCkpIC8gMjsKIH0KIAotaW50IFJlbmRlckJsb2NrOjpmaXJzdExpbmVCb3hC
YXNlbGluZSgpIGNvbnN0CitMYXlvdXRVbml0IFJlbmRlckJsb2NrOjpmaXJzdExpbmVCb3hCYXNl
bGluZSgpIGNvbnN0CiB7CiAgICAgaWYgKCFpc0Jsb2NrRmxvdygpIHx8IChpc1dyaXRpbmdNb2Rl
Um9vdCgpICYmICFpc1J1YnlSdW4oKSkpCiAgICAgICAgIHJldHVybiAtMTsKQEAgLTUyOTYsNyAr
NTMwMSw3IEBAIGludCBSZW5kZXJCbG9jazo6Zmlyc3RMaW5lQm94QmFzZWxpbmUoKSAKICAgICBl
bHNlIHsKICAgICAgICAgZm9yIChSZW5kZXJCb3gqIGN1cnIgPSBmaXJzdENoaWxkQm94KCk7IGN1
cnI7IGN1cnIgPSBjdXJyLT5uZXh0U2libGluZ0JveCgpKSB7CiAgICAgICAgICAgICBpZiAoIWN1
cnItPmlzRmxvYXRpbmdPclBvc2l0aW9uZWQoKSkgewotICAgICAgICAgICAgICAgIGludCByZXN1
bHQgPSBjdXJyLT5maXJzdExpbmVCb3hCYXNlbGluZSgpOworICAgICAgICAgICAgICAgIExheW91
dFVuaXQgcmVzdWx0ID0gY3Vyci0+Zmlyc3RMaW5lQm94QmFzZWxpbmUoKTsKICAgICAgICAgICAg
ICAgICBpZiAocmVzdWx0ICE9IC0xKQogICAgICAgICAgICAgICAgICAgICByZXR1cm4gY3Vyci0+
bG9naWNhbFRvcCgpICsgcmVzdWx0OyAvLyBUcmFuc2xhdGUgdG8gb3VyIGNvb3JkaW5hdGUgc3Bh
Y2UuCiAgICAgICAgICAgICB9CkBAIC01MzA2LDcgKzUzMTEsNyBAQCBpbnQgUmVuZGVyQmxvY2s6
OmZpcnN0TGluZUJveEJhc2VsaW5lKCkgCiAgICAgcmV0dXJuIC0xOwogfQogCi1pbnQgUmVuZGVy
QmxvY2s6Omxhc3RMaW5lQm94QmFzZWxpbmUoKSBjb25zdAorTGF5b3V0VW5pdCBSZW5kZXJCbG9j
azo6bGFzdExpbmVCb3hCYXNlbGluZSgpIGNvbnN0CiB7CiAgICAgaWYgKCFpc0Jsb2NrRmxvdygp
IHx8IChpc1dyaXRpbmdNb2RlUm9vdCgpICYmICFpc1J1YnlSdW4oKSkpCiAgICAgICAgIHJldHVy
biAtMTsKQEAgLTUzMjgsNyArNTMzMyw3IEBAIGludCBSZW5kZXJCbG9jazo6bGFzdExpbmVCb3hC
YXNlbGluZSgpIGMKICAgICAgICAgZm9yIChSZW5kZXJCb3gqIGN1cnIgPSBsYXN0Q2hpbGRCb3go
KTsgY3VycjsgY3VyciA9IGN1cnItPnByZXZpb3VzU2libGluZ0JveCgpKSB7CiAgICAgICAgICAg
ICBpZiAoIWN1cnItPmlzRmxvYXRpbmdPclBvc2l0aW9uZWQoKSkgewogICAgICAgICAgICAgICAg
IGhhdmVOb3JtYWxGbG93Q2hpbGQgPSB0cnVlOwotICAgICAgICAgICAgICAgIGludCByZXN1bHQg
PSBjdXJyLT5sYXN0TGluZUJveEJhc2VsaW5lKCk7CisgICAgICAgICAgICAgICAgTGF5b3V0VW5p
dCByZXN1bHQgPSBjdXJyLT5sYXN0TGluZUJveEJhc2VsaW5lKCk7CiAgICAgICAgICAgICAgICAg
aWYgKHJlc3VsdCAhPSAtMSkKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGN1cnItPmxvZ2lj
YWxUb3AoKSArIHJlc3VsdDsgLy8gVHJhbnNsYXRlIHRvIG91ciBjb29yZGluYXRlIHNwYWNlLgog
ICAgICAgICAgICAgfQpAQCAtNTY2Nyw3ICs1NjcyLDcgQEAgaW50IFJlbmRlckJsb2NrOjpoZWln
aHRGb3JMaW5lQ291bnQoaW50IAogICAgIHJldHVybiBnZXRIZWlnaHRGb3JMaW5lQ291bnQodGhp
cywgbCwgdHJ1ZSwgY291bnQpOwogfQogCi12b2lkIFJlbmRlckJsb2NrOjphZGp1c3RGb3JCb3Jk
ZXJGaXQoaW50IHgsIGludCYgbGVmdCwgaW50JiByaWdodCkgY29uc3QKK3ZvaWQgUmVuZGVyQmxv
Y2s6OmFkanVzdEZvckJvcmRlckZpdChMYXlvdXRVbml0IHgsIExheW91dFVuaXQmIGxlZnQsIExh
eW91dFVuaXQmIHJpZ2h0KSBjb25zdAogewogICAgIC8vIFdlIGRvbid0IGRlYWwgd2l0aCByZWxh
dGl2ZSBwb3NpdGlvbmluZy4gIE91ciBhc3N1bXB0aW9uIGlzIHRoYXQgeW91IHNocmluayB0byBm
aXQgdGhlIGxpbmVzIHdpdGhvdXQgYWNjb3VudGluZwogICAgIC8vIGZvciBlaXRoZXIgb3ZlcmZs
b3cgb3IgdHJhbnNsYXRpb25zIHZpYSByZWxhdGl2ZSBwb3NpdGlvbmluZy4KQEAgLTU2NzUsOSAr
NTY4MCw5IEBAIHZvaWQgUmVuZGVyQmxvY2s6OmFkanVzdEZvckJvcmRlckZpdChpbnQKICAgICAg
ICAgaWYgKGNoaWxkcmVuSW5saW5lKCkpIHsKICAgICAgICAgICAgIGZvciAoUm9vdElubGluZUJv
eCogYm94ID0gZmlyc3RSb290Qm94KCk7IGJveDsgYm94ID0gYm94LT5uZXh0Um9vdEJveCgpKSB7
CiAgICAgICAgICAgICAgICAgaWYgKGJveC0+Zmlyc3RDaGlsZCgpKQotICAgICAgICAgICAgICAg
ICAgICBsZWZ0ID0gbWluKGxlZnQsIHggKyBzdGF0aWNfY2FzdDxpbnQ+KGJveC0+Zmlyc3RDaGls
ZCgpLT54KCkpKTsKKyAgICAgICAgICAgICAgICAgICAgbGVmdCA9IG1pbihsZWZ0LCB4ICsgc3Rh
dGljX2Nhc3Q8TGF5b3V0VW5pdD4oYm94LT5maXJzdENoaWxkKCktPngoKSkpOwogICAgICAgICAg
ICAgICAgIGlmIChib3gtPmxhc3RDaGlsZCgpKQotICAgICAgICAgICAgICAgICAgICByaWdodCA9
IG1heChyaWdodCwgeCArIHN0YXRpY19jYXN0PGludD4oY2VpbGYoYm94LT5sYXN0Q2hpbGQoKS0+
bG9naWNhbFJpZ2h0KCkpKSk7CisgICAgICAgICAgICAgICAgICAgIHJpZ2h0ID0gbWF4KHJpZ2h0
LCB4ICsgc3RhdGljX2Nhc3Q8TGF5b3V0VW5pdD4oY2VpbGYoYm94LT5sYXN0Q2hpbGQoKS0+bG9n
aWNhbFJpZ2h0KCkpKSk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICAgICAgZWxzZSB7
CkBAIC01NzAxLDggKzU3MDYsOCBAQCB2b2lkIFJlbmRlckJsb2NrOjphZGp1c3RGb3JCb3JkZXJG
aXQoaW50CiAgICAgICAgICAgICAgICAgRmxvYXRpbmdPYmplY3QqIHIgPSAqaXQ7CiAgICAgICAg
ICAgICAgICAgLy8gT25seSBleGFtaW5lIHRoZSBvYmplY3QgaWYgb3VyIG1fc2hvdWxkUGFpbnQg
ZmxhZyBpcyBzZXQuCiAgICAgICAgICAgICAgICAgaWYgKHItPm1fc2hvdWxkUGFpbnQpIHsKLSAg
ICAgICAgICAgICAgICAgICAgaW50IGZsb2F0TGVmdCA9IHhQb3NpdGlvbkZvckZsb2F0SW5jbHVk
aW5nTWFyZ2luKHIpIC0gci0+bV9yZW5kZXJlci0+eCgpOwotICAgICAgICAgICAgICAgICAgICBp
bnQgZmxvYXRSaWdodCA9IGZsb2F0TGVmdCArIHItPm1fcmVuZGVyZXItPndpZHRoKCk7CisgICAg
ICAgICAgICAgICAgICAgIExheW91dFVuaXQgZmxvYXRMZWZ0ID0geFBvc2l0aW9uRm9yRmxvYXRJ
bmNsdWRpbmdNYXJnaW4ocikgLSByLT5tX3JlbmRlcmVyLT54KCk7CisgICAgICAgICAgICAgICAg
ICAgIExheW91dFVuaXQgZmxvYXRSaWdodCA9IGZsb2F0TGVmdCArIHItPm1fcmVuZGVyZXItPndp
ZHRoKCk7CiAgICAgICAgICAgICAgICAgICAgIGxlZnQgPSBtaW4obGVmdCwgZmxvYXRMZWZ0KTsK
ICAgICAgICAgICAgICAgICAgICAgcmlnaHQgPSBtYXgocmlnaHQsIGZsb2F0UmlnaHQpOwogICAg
ICAgICAgICAgICAgIH0KQEAgLTU3MTEsMjQgKzU3MTYsMjQgQEAgdm9pZCBSZW5kZXJCbG9jazo6
YWRqdXN0Rm9yQm9yZGVyRml0KGludAogICAgIH0KIH0KIAotdm9pZCBSZW5kZXJCbG9jazo6Ym9y
ZGVyRml0QWRqdXN0KEludFJlY3QmIHJlY3QpIGNvbnN0Cit2b2lkIFJlbmRlckJsb2NrOjpib3Jk
ZXJGaXRBZGp1c3QoTGF5b3V0UmVjdCYgcmVjdCkgY29uc3QKIHsKICAgICBpZiAoc3R5bGUoKS0+
Ym9yZGVyRml0KCkgPT0gQm9yZGVyRml0Qm9yZGVyKQogICAgICAgICByZXR1cm47CiAKICAgICAv
LyBXYWxrIGFueSBub3JtYWwgZmxvdyBsaW5lcyB0byBzbnVnbHkgZml0LgotICAgIGludCBsZWZ0
ID0gSU5UX01BWDsKLSAgICBpbnQgcmlnaHQgPSBJTlRfTUlOOwotICAgIGludCBvbGRXaWR0aCA9
IHJlY3Qud2lkdGgoKTsKKyAgICBMYXlvdXRVbml0IGxlZnQgPSBudW1lcmljX2xpbWl0czxMYXlv
dXRVbml0Pjo6bWF4KCk7CisgICAgTGF5b3V0VW5pdCByaWdodCA9IG51bWVyaWNfbGltaXRzPExh
eW91dFVuaXQ+OjptaW4oKTsKKyAgICBMYXlvdXRVbml0IG9sZFdpZHRoID0gcmVjdC53aWR0aCgp
OwogICAgIGFkanVzdEZvckJvcmRlckZpdCgwLCBsZWZ0LCByaWdodCk7Ci0gICAgaWYgKGxlZnQg
IT0gSU5UX01BWCkgeworICAgIGlmIChsZWZ0ICE9IG51bWVyaWNfbGltaXRzPExheW91dFVuaXQ+
OjptYXgoKSkgewogICAgICAgICBsZWZ0IC09IChib3JkZXJMZWZ0KCkgKyBwYWRkaW5nTGVmdCgp
KTsKICAgICAgICAgaWYgKGxlZnQgPiAwKSB7CiAgICAgICAgICAgICByZWN0Lm1vdmUobGVmdCwg
MCk7CiAgICAgICAgICAgICByZWN0LmV4cGFuZCgtbGVmdCwgMCk7CiAgICAgICAgIH0KICAgICB9
Ci0gICAgaWYgKHJpZ2h0ICE9IElOVF9NSU4pIHsKKyAgICBpZiAocmlnaHQgIT0gbnVtZXJpY19s
aW1pdHM8TGF5b3V0VW5pdD46Om1pbigpKSB7CiAgICAgICAgIHJpZ2h0ICs9IChib3JkZXJSaWdo
dCgpICsgcGFkZGluZ1JpZ2h0KCkpOwogICAgICAgICBpZiAocmlnaHQgPCBvbGRXaWR0aCkKICAg
ICAgICAgICAgIHJlY3QuZXhwYW5kKC0ob2xkV2lkdGggLSByaWdodCksIDApOwpAQCAtNTc1MCw3
ICs1NzU1LDcgQEAgdm9pZCBSZW5kZXJCbG9jazo6Y2xlYXJUcnVuY2F0aW9uKCkKICAgICB9CiB9
CiAKLXZvaWQgUmVuZGVyQmxvY2s6OnNldE1heE1hcmdpbkJlZm9yZVZhbHVlcyhpbnQgcG9zLCBp
bnQgbmVnKQordm9pZCBSZW5kZXJCbG9jazo6c2V0TWF4TWFyZ2luQmVmb3JlVmFsdWVzKExheW91
dFVuaXQgcG9zLCBMYXlvdXRVbml0IG5lZykKIHsKICAgICBpZiAoIW1fcmFyZURhdGEpIHsKICAg
ICAgICAgaWYgKHBvcyA9PSBSZW5kZXJCbG9ja1JhcmVEYXRhOjpwb3NpdGl2ZU1hcmdpbkJlZm9y
ZURlZmF1bHQodGhpcykgJiYgbmVnID09IFJlbmRlckJsb2NrUmFyZURhdGE6Om5lZ2F0aXZlTWFy
Z2luQmVmb3JlRGVmYXVsdCh0aGlzKSkKQEAgLTU3NjEsNyArNTc2Niw3IEBAIHZvaWQgUmVuZGVy
QmxvY2s6OnNldE1heE1hcmdpbkJlZm9yZVZhbHUKICAgICBtX3JhcmVEYXRhLT5tX21hcmdpbnMu
c2V0TmVnYXRpdmVNYXJnaW5CZWZvcmUobmVnKTsKIH0KIAotdm9pZCBSZW5kZXJCbG9jazo6c2V0
TWF4TWFyZ2luQWZ0ZXJWYWx1ZXMoaW50IHBvcywgaW50IG5lZykKK3ZvaWQgUmVuZGVyQmxvY2s6
OnNldE1heE1hcmdpbkFmdGVyVmFsdWVzKExheW91dFVuaXQgcG9zLCBMYXlvdXRVbml0IG5lZykK
IHsKICAgICBpZiAoIW1fcmFyZURhdGEpIHsKICAgICAgICAgaWYgKHBvcyA9PSBSZW5kZXJCbG9j
a1JhcmVEYXRhOjpwb3NpdGl2ZU1hcmdpbkFmdGVyRGVmYXVsdCh0aGlzKSAmJiBuZWcgPT0gUmVu
ZGVyQmxvY2tSYXJlRGF0YTo6bmVnYXRpdmVNYXJnaW5BZnRlckRlZmF1bHQodGhpcykpCkBAIC01
ODI0LDkgKzU4MjksOSBAQCB2b2lkIFJlbmRlckJsb2NrOjphYnNvbHV0ZVF1YWRzKFZlY3RvcjxG
CiAgICAgICAgIHF1YWRzLmFwcGVuZChSZW5kZXJCb3g6OmxvY2FsVG9BYnNvbHV0ZVF1YWQoRmxv
YXRSZWN0KDAsIDAsIHdpZHRoKCksIGhlaWdodCgpKSwgZmFsc2UsIHdhc0ZpeGVkKSk7CiB9CiAK
LUludFJlY3QgUmVuZGVyQmxvY2s6OnJlY3RXaXRoT3V0bGluZUZvclJlcGFpbnQoUmVuZGVyQm94
TW9kZWxPYmplY3QqIHJlcGFpbnRDb250YWluZXIsIGludCBvdXRsaW5lV2lkdGgpIGNvbnN0CitM
YXlvdXRSZWN0IFJlbmRlckJsb2NrOjpyZWN0V2l0aE91dGxpbmVGb3JSZXBhaW50KFJlbmRlckJv
eE1vZGVsT2JqZWN0KiByZXBhaW50Q29udGFpbmVyLCBMYXlvdXRVbml0IG91dGxpbmVXaWR0aCkg
Y29uc3QKIHsKLSAgICBJbnRSZWN0IHIoUmVuZGVyQm94OjpyZWN0V2l0aE91dGxpbmVGb3JSZXBh
aW50KHJlcGFpbnRDb250YWluZXIsIG91dGxpbmVXaWR0aCkpOworICAgIExheW91dFJlY3QgcihS
ZW5kZXJCb3g6OnJlY3RXaXRoT3V0bGluZUZvclJlcGFpbnQocmVwYWludENvbnRhaW5lciwgb3V0
bGluZVdpZHRoKSk7CiAgICAgaWYgKGlzQW5vbnltb3VzQmxvY2tDb250aW51YXRpb24oKSkKICAg
ICAgICAgci5pbmZsYXRlWShjb2xsYXBzZWRNYXJnaW5CZWZvcmUoKSk7IC8vIEZJWE1FOiBUaGlz
IGlzIHdyb25nIGZvciBibG9jay1mbG93cyB0aGF0IGFyZSBob3Jpem9udGFsLgogICAgIHJldHVy
biByOwpAQCAtNTg3Nyw3ICs1ODgyLDcgQEAgdm9pZCBSZW5kZXJCbG9jazo6dXBkYXRlSGl0VGVz
dFJlc3VsdChIaQogICAgIH0KIH0KIAotSW50UmVjdCBSZW5kZXJCbG9jazo6bG9jYWxDYXJldFJl
Y3QoSW5saW5lQm94KiBpbmxpbmVCb3gsIGludCBjYXJldE9mZnNldCwgaW50KiBleHRyYVdpZHRo
VG9FbmRPZkxpbmUpCitMYXlvdXRSZWN0IFJlbmRlckJsb2NrOjpsb2NhbENhcmV0UmVjdChJbmxp
bmVCb3gqIGlubGluZUJveCwgaW50IGNhcmV0T2Zmc2V0LCBMYXlvdXRVbml0KiBleHRyYVdpZHRo
VG9FbmRPZkxpbmUpCiB7CiAgICAgLy8gRG8gdGhlIG5vcm1hbCBjYWxjdWxhdGlvbiBpbiBtb3N0
IGNhc2VzLgogICAgIGlmIChmaXJzdENoaWxkKCkpCkBAIC01ODkyLDcgKzU4OTcsNyBAQCBJbnRS
ZWN0IFJlbmRlckJsb2NrOjpsb2NhbENhcmV0UmVjdChJbmxpCiAgICAgLy8gY29uc3RydWN0ZWQg
YW5kIHRoaXMga2x1ZGdlIGlzIG5vdCBjYWxsZWQgYW55IG1vcmUuIFNvIG9ubHkgdGhlIGNhcmV0
IHNpemUKICAgICAvLyBvZiBhbiBlbXB0eSA6Zmlyc3QtbGluZSdkIGJsb2NrIGlzIHdyb25nLiBJ
IHRoaW5rIHdlIGNhbiBsaXZlIHdpdGggdGhhdC4KICAgICBSZW5kZXJTdHlsZSogY3VycmVudFN0
eWxlID0gZmlyc3RMaW5lU3R5bGUoKTsKLSAgICBpbnQgaGVpZ2h0ID0gbGluZUhlaWdodCh0cnVl
LCBjdXJyZW50U3R5bGUtPmlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCkgPyBIb3Jpem9udGFsTGlu
ZSA6IFZlcnRpY2FsTGluZSk7CisgICAgTGF5b3V0VW5pdCBoZWlnaHQgPSBsaW5lSGVpZ2h0KHRy
dWUsIGN1cnJlbnRTdHlsZS0+aXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKSA/IEhvcml6b250YWxM
aW5lIDogVmVydGljYWxMaW5lKTsKIAogICAgIGVudW0gQ2FyZXRBbGlnbm1lbnQgeyBhbGlnbkxl
ZnQsIGFsaWduUmlnaHQsIGFsaWduQ2VudGVyIH07CiAKQEAgLTU5MjUsOCArNTkzMCw4IEBAIElu
dFJlY3QgUmVuZGVyQmxvY2s6OmxvY2FsQ2FyZXRSZWN0KElubGkKICAgICAgICAgICAgIGJyZWFr
OwogICAgIH0KIAotICAgIGludCB4ID0gYm9yZGVyTGVmdCgpICsgcGFkZGluZ0xlZnQoKTsKLSAg
ICBpbnQgdyA9IHdpZHRoKCk7CisgICAgTGF5b3V0VW5pdCB4ID0gYm9yZGVyTGVmdCgpICsgcGFk
ZGluZ0xlZnQoKTsKKyAgICBMYXlvdXRVbml0IHcgPSB3aWR0aCgpOwogCiAgICAgc3dpdGNoIChh
bGlnbm1lbnQpIHsKICAgICAgICAgY2FzZSBhbGlnbkxlZnQ6CkBAIC01OTQ3LDIwICs1OTUyLDIw
IEBAIEludFJlY3QgUmVuZGVyQmxvY2s6OmxvY2FsQ2FyZXRSZWN0KElubGkKICAgICAgICAgICAg
IC8vIG15UmlnaHQgYW5kIGNvbnRhaW5lclJpZ2h0IGFyZSBzZXQgdXAsIGJ1dCB0aGVuIGNsb2Ji
ZXJlZC4KICAgICAgICAgICAgIC8vIFNvICpleHRyYVdpZHRoVG9FbmRPZkxpbmUgd2lsbCBhbHdh
eXMgYmUgMCBoZXJlLgogCi0gICAgICAgICAgICBpbnQgbXlSaWdodCA9IHggKyBjYXJldFdpZHRo
OworICAgICAgICAgICAgTGF5b3V0VW5pdCBteVJpZ2h0ID0geCArIGNhcmV0V2lkdGg7CiAgICAg
ICAgICAgICAvLyBGSVhNRTogd2h5IGNhbGwgbG9jYWxUb0Fic29sdXRlRm9yQ29udGVudCgpIHR3
aWNlIGhlcmUsIHRvbz8KICAgICAgICAgICAgIEZsb2F0UG9pbnQgYWJzUmlnaHRQb2ludCA9IGxv
Y2FsVG9BYnNvbHV0ZShGbG9hdFBvaW50KG15UmlnaHQsIDApKTsKIAotICAgICAgICAgICAgaW50
IGNvbnRhaW5lclJpZ2h0ID0gY29udGFpbmluZ0Jsb2NrKCktPngoKSArIGNvbnRhaW5pbmdCbG9j
a0xvZ2ljYWxXaWR0aEZvckNvbnRlbnQoKTsKKyAgICAgICAgICAgIExheW91dFVuaXQgY29udGFp
bmVyUmlnaHQgPSBjb250YWluaW5nQmxvY2soKS0+eCgpICsgY29udGFpbmluZ0Jsb2NrTG9naWNh
bFdpZHRoRm9yQ29udGVudCgpOwogICAgICAgICAgICAgRmxvYXRQb2ludCBhYnNDb250YWluZXJQ
b2ludCA9IGxvY2FsVG9BYnNvbHV0ZShGbG9hdFBvaW50KGNvbnRhaW5lclJpZ2h0LCAwKSk7CiAK
ICAgICAgICAgICAgICpleHRyYVdpZHRoVG9FbmRPZkxpbmUgPSBhYnNDb250YWluZXJQb2ludC54
KCkgLSBhYnNSaWdodFBvaW50LngoKTsKICAgICAgICAgfQogICAgIH0KIAotICAgIGludCB5ID0g
cGFkZGluZ1RvcCgpICsgYm9yZGVyVG9wKCk7CisgICAgTGF5b3V0VW5pdCB5ID0gcGFkZGluZ1Rv
cCgpICsgYm9yZGVyVG9wKCk7CiAKLSAgICByZXR1cm4gSW50UmVjdCh4LCB5LCBjYXJldFdpZHRo
LCBoZWlnaHQpOworICAgIHJldHVybiBMYXlvdXRSZWN0KHgsIHksIGNhcmV0V2lkdGgsIGhlaWdo
dCk7CiB9CiAKIHZvaWQgUmVuZGVyQmxvY2s6OmFkZEZvY3VzUmluZ1JlY3RzKFZlY3RvcjxMYXlv
dXRSZWN0PiYgcmVjdHMsIGNvbnN0IExheW91dFBvaW50JiBhZGRpdGlvbmFsT2Zmc2V0KQpAQCAt
NjAwMSw3ICs2MDA2LDcgQEAgdm9pZCBSZW5kZXJCbG9jazo6YWRkRm9jdXNSaW5nUmVjdHMoVmVj
dAogICAgICAgICAgICAgICAgICAgICBwb3MgPSBjdXJyLT5sb2NhbFRvQWJzb2x1dGUoKTsKICAg
ICAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgICAgIHBvcyA9IEZsb2F0UG9pbnQo
YWRkaXRpb25hbE9mZnNldC54KCkgKyBib3gtPngoKSwgYWRkaXRpb25hbE9mZnNldC55KCkgKyBi
b3gtPnkoKSk7Ci0gICAgICAgICAgICAgICAgYm94LT5hZGRGb2N1c1JpbmdSZWN0cyhyZWN0cywg
Zmxvb3JlZEludFBvaW50KHBvcykpOworICAgICAgICAgICAgICAgIGJveC0+YWRkRm9jdXNSaW5n
UmVjdHMocmVjdHMsIGZsb29yZWRMYXlvdXRQb2ludChwb3MpKTsKICAgICAgICAgICAgIH0KICAg
ICAgICAgfQogICAgIH0KQEAgLTYwNTgsMzEgKzYwNjMsMzEgQEAgUmVuZGVyQmxvY2sqIFJlbmRl
ckJsb2NrOjpjcmVhdGVBbm9ueW1vdQogICAgIHJldHVybiBuZXdCb3g7CiB9CiAKLWludCBSZW5k
ZXJCbG9jazo6bmV4dFBhZ2VMb2dpY2FsVG9wRXhjbHVkaW5nQm91bmRhcnlQb2ludChpbnQgbG9n
aWNhbE9mZnNldCkgY29uc3QKK0xheW91dFVuaXQgUmVuZGVyQmxvY2s6Om5leHRQYWdlTG9naWNh
bFRvcEV4Y2x1ZGluZ0JvdW5kYXJ5UG9pbnQoTGF5b3V0VW5pdCBsb2dpY2FsT2Zmc2V0KSBjb25z
dAogewogICAgIExheW91dFN0YXRlKiBsYXlvdXRTdGF0ZSA9IHZpZXcoKS0+bGF5b3V0U3RhdGUo
KTsKICAgICBpZiAoIWxheW91dFN0YXRlLT5tX3BhZ2VMb2dpY2FsSGVpZ2h0KQogICAgICAgICBy
ZXR1cm4gbG9naWNhbE9mZnNldDsKICAgICAKICAgICAvLyBUaGUgbG9naWNhbE9mZnNldCBpcyBp
biBvdXIgY29vcmRpbmF0ZSBzcGFjZS4gIFdlIGNhbiBhZGQgaW4gb3VyIHB1c2hlZCBvZmZzZXQu
Ci0gICAgaW50IHBhZ2VMb2dpY2FsSGVpZ2h0ID0gbGF5b3V0U3RhdGUtPm1fcGFnZUxvZ2ljYWxI
ZWlnaHQ7Ci0gICAgSW50U2l6ZSBkZWx0YSA9IGxheW91dFN0YXRlLT5tX2xheW91dE9mZnNldCAt
IGxheW91dFN0YXRlLT5tX3BhZ2VPZmZzZXQ7Ci0gICAgaW50IG9mZnNldCA9IGlzSG9yaXpvbnRh
bFdyaXRpbmdNb2RlKCkgPyBkZWx0YS5oZWlnaHQoKSA6IGRlbHRhLndpZHRoKCk7Ci0gICAgaW50
IHJlbWFpbmluZ0xvZ2ljYWxIZWlnaHQgPSAocGFnZUxvZ2ljYWxIZWlnaHQgLSAob2Zmc2V0ICsg
bG9naWNhbE9mZnNldCkgJSBwYWdlTG9naWNhbEhlaWdodCkgJSBwYWdlTG9naWNhbEhlaWdodDsK
KyAgICBMYXlvdXRVbml0IHBhZ2VMb2dpY2FsSGVpZ2h0ID0gbGF5b3V0U3RhdGUtPm1fcGFnZUxv
Z2ljYWxIZWlnaHQ7CisgICAgTGF5b3V0U2l6ZSBkZWx0YSA9IGxheW91dFN0YXRlLT5tX2xheW91
dE9mZnNldCAtIGxheW91dFN0YXRlLT5tX3BhZ2VPZmZzZXQ7CisgICAgTGF5b3V0VW5pdCBvZmZz
ZXQgPSBpc0hvcml6b250YWxXcml0aW5nTW9kZSgpID8gZGVsdGEuaGVpZ2h0KCkgOiBkZWx0YS53
aWR0aCgpOworICAgIExheW91dFVuaXQgcmVtYWluaW5nTG9naWNhbEhlaWdodCA9IGxheW91dE1v
ZChwYWdlTG9naWNhbEhlaWdodCAtIGxheW91dE1vZChvZmZzZXQgKyBsb2dpY2FsT2Zmc2V0LCBw
YWdlTG9naWNhbEhlaWdodCksIHBhZ2VMb2dpY2FsSGVpZ2h0KTsKICAgICByZXR1cm4gbG9naWNh
bE9mZnNldCArIChyZW1haW5pbmdMb2dpY2FsSGVpZ2h0ID8gcmVtYWluaW5nTG9naWNhbEhlaWdo
dCA6IHBhZ2VMb2dpY2FsSGVpZ2h0KTsKIH0KIAotaW50IFJlbmRlckJsb2NrOjpuZXh0UGFnZUxv
Z2ljYWxUb3BJbmNsdWRpbmdCb3VuZGFyeVBvaW50KGludCBsb2dpY2FsT2Zmc2V0KSBjb25zdAor
TGF5b3V0VW5pdCBSZW5kZXJCbG9jazo6bmV4dFBhZ2VMb2dpY2FsVG9wSW5jbHVkaW5nQm91bmRh
cnlQb2ludChMYXlvdXRVbml0IGxvZ2ljYWxPZmZzZXQpIGNvbnN0CiB7CiAgICAgTGF5b3V0U3Rh
dGUqIGxheW91dFN0YXRlID0gdmlldygpLT5sYXlvdXRTdGF0ZSgpOwogICAgIGlmICghbGF5b3V0
U3RhdGUtPm1fcGFnZUxvZ2ljYWxIZWlnaHQpCiAgICAgICAgIHJldHVybiBsb2dpY2FsT2Zmc2V0
OwogICAgIAogICAgIC8vIFRoZSBsb2dpY2FsT2Zmc2V0IGlzIGluIG91ciBjb29yZGluYXRlIHNw
YWNlLiAgV2UgY2FuIGFkZCBpbiBvdXIgcHVzaGVkIG9mZnNldC4KLSAgICBpbnQgcGFnZUxvZ2lj
YWxIZWlnaHQgPSBsYXlvdXRTdGF0ZS0+bV9wYWdlTG9naWNhbEhlaWdodDsKLSAgICBJbnRTaXpl
IGRlbHRhID0gbGF5b3V0U3RhdGUtPm1fbGF5b3V0T2Zmc2V0IC0gbGF5b3V0U3RhdGUtPm1fcGFn
ZU9mZnNldDsKLSAgICBpbnQgb2Zmc2V0ID0gaXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKSA/IGRl
bHRhLmhlaWdodCgpIDogZGVsdGEud2lkdGgoKTsKLSAgICBpbnQgcmVtYWluaW5nTG9naWNhbEhl
aWdodCA9IChwYWdlTG9naWNhbEhlaWdodCAtIChvZmZzZXQgKyBsb2dpY2FsT2Zmc2V0KSAlIHBh
Z2VMb2dpY2FsSGVpZ2h0KSAlIHBhZ2VMb2dpY2FsSGVpZ2h0OworICAgIExheW91dFVuaXQgcGFn
ZUxvZ2ljYWxIZWlnaHQgPSBsYXlvdXRTdGF0ZS0+bV9wYWdlTG9naWNhbEhlaWdodDsKKyAgICBM
YXlvdXRTaXplIGRlbHRhID0gbGF5b3V0U3RhdGUtPm1fbGF5b3V0T2Zmc2V0IC0gbGF5b3V0U3Rh
dGUtPm1fcGFnZU9mZnNldDsKKyAgICBMYXlvdXRVbml0IG9mZnNldCA9IGlzSG9yaXpvbnRhbFdy
aXRpbmdNb2RlKCkgPyBkZWx0YS5oZWlnaHQoKSA6IGRlbHRhLndpZHRoKCk7CisgICAgTGF5b3V0
VW5pdCByZW1haW5pbmdMb2dpY2FsSGVpZ2h0ID0gbGF5b3V0TW9kKHBhZ2VMb2dpY2FsSGVpZ2h0
IC0gbGF5b3V0TW9kKG9mZnNldCArIGxvZ2ljYWxPZmZzZXQsIHBhZ2VMb2dpY2FsSGVpZ2h0KSwg
cGFnZUxvZ2ljYWxIZWlnaHQpOwogICAgIHJldHVybiBsb2dpY2FsT2Zmc2V0ICsgcmVtYWluaW5n
TG9naWNhbEhlaWdodDsKIH0KIApAQCAtNjEyOSwyNyArNjEzNCwyNyBAQCBpbnQgUmVuZGVyQmxv
Y2s6OmFwcGx5QWZ0ZXJCcmVhayhSZW5kZXJCCiAgICAgcmV0dXJuIGxvZ2ljYWxPZmZzZXQ7CiB9
CiAKLWludCBSZW5kZXJCbG9jazo6YWRqdXN0Rm9yVW5zcGxpdHRhYmxlQ2hpbGQoUmVuZGVyQm94
KiBjaGlsZCwgaW50IGxvZ2ljYWxPZmZzZXQsIGJvb2wgaW5jbHVkZU1hcmdpbnMpCitMYXlvdXRV
bml0IFJlbmRlckJsb2NrOjphZGp1c3RGb3JVbnNwbGl0dGFibGVDaGlsZChSZW5kZXJCb3gqIGNo
aWxkLCBMYXlvdXRVbml0IGxvZ2ljYWxPZmZzZXQsIGJvb2wgaW5jbHVkZU1hcmdpbnMpCiB7CiAg
ICAgYm9vbCBpc1Vuc3BsaXR0YWJsZSA9IGNoaWxkLT5pc1JlcGxhY2VkKCkgfHwgY2hpbGQtPnNj
cm9sbHNPdmVyZmxvdygpIHx8IGNoaWxkLT5zdHlsZSgpLT5jb2x1bW5CcmVha0luc2lkZSgpID09
IFBCQVZPSUQ7CiAgICAgaWYgKCFpc1Vuc3BsaXR0YWJsZSkKICAgICAgICAgcmV0dXJuIGxvZ2lj
YWxPZmZzZXQ7Ci0gICAgaW50IGNoaWxkTG9naWNhbEhlaWdodCA9IGxvZ2ljYWxIZWlnaHRGb3JD
aGlsZChjaGlsZCkgKyAoaW5jbHVkZU1hcmdpbnMgPyBtYXJnaW5CZWZvcmVGb3JDaGlsZChjaGls
ZCkgKyBtYXJnaW5BZnRlckZvckNoaWxkKGNoaWxkKSA6IDApOworICAgIExheW91dFVuaXQgY2hp
bGRMb2dpY2FsSGVpZ2h0ID0gbG9naWNhbEhlaWdodEZvckNoaWxkKGNoaWxkKSArIChpbmNsdWRl
TWFyZ2lucyA/IG1hcmdpbkJlZm9yZUZvckNoaWxkKGNoaWxkKSArIG1hcmdpbkFmdGVyRm9yQ2hp
bGQoY2hpbGQpIDogMCk7CiAgICAgTGF5b3V0U3RhdGUqIGxheW91dFN0YXRlID0gdmlldygpLT5s
YXlvdXRTdGF0ZSgpOwogICAgIGlmIChsYXlvdXRTdGF0ZS0+bV9jb2x1bW5JbmZvKQogICAgICAg
ICBsYXlvdXRTdGF0ZS0+bV9jb2x1bW5JbmZvLT51cGRhdGVNaW5pbXVtQ29sdW1uSGVpZ2h0KGNo
aWxkTG9naWNhbEhlaWdodCk7Ci0gICAgaW50IHBhZ2VMb2dpY2FsSGVpZ2h0ID0gbGF5b3V0U3Rh
dGUtPm1fcGFnZUxvZ2ljYWxIZWlnaHQ7CisgICAgTGF5b3V0VW5pdCBwYWdlTG9naWNhbEhlaWdo
dCA9IGxheW91dFN0YXRlLT5tX3BhZ2VMb2dpY2FsSGVpZ2h0OwogICAgIGlmICghcGFnZUxvZ2lj
YWxIZWlnaHQgfHwgY2hpbGRMb2dpY2FsSGVpZ2h0ID4gcGFnZUxvZ2ljYWxIZWlnaHQpCiAgICAg
ICAgIHJldHVybiBsb2dpY2FsT2Zmc2V0OwotICAgIEludFNpemUgZGVsdGEgPSBsYXlvdXRTdGF0
ZS0+bV9sYXlvdXRPZmZzZXQgLSBsYXlvdXRTdGF0ZS0+bV9wYWdlT2Zmc2V0OwotICAgIGludCBv
ZmZzZXQgPSBpc0hvcml6b250YWxXcml0aW5nTW9kZSgpID8gZGVsdGEuaGVpZ2h0KCkgOiBkZWx0
YS53aWR0aCgpOwotICAgIGludCByZW1haW5pbmdMb2dpY2FsSGVpZ2h0ID0gKHBhZ2VMb2dpY2Fs
SGVpZ2h0IC0gKG9mZnNldCArIGxvZ2ljYWxPZmZzZXQpICUgcGFnZUxvZ2ljYWxIZWlnaHQpICUg
cGFnZUxvZ2ljYWxIZWlnaHQ7CisgICAgTGF5b3V0U2l6ZSBkZWx0YSA9IGxheW91dFN0YXRlLT5t
X2xheW91dE9mZnNldCAtIGxheW91dFN0YXRlLT5tX3BhZ2VPZmZzZXQ7CisgICAgTGF5b3V0VW5p
dCBvZmZzZXQgPSBpc0hvcml6b250YWxXcml0aW5nTW9kZSgpID8gZGVsdGEuaGVpZ2h0KCkgOiBk
ZWx0YS53aWR0aCgpOworICAgIExheW91dFVuaXQgcmVtYWluaW5nTG9naWNhbEhlaWdodCA9IGxh
eW91dE1vZChwYWdlTG9naWNhbEhlaWdodCAtIGxheW91dE1vZChvZmZzZXQgKyBsb2dpY2FsT2Zm
c2V0LCBwYWdlTG9naWNhbEhlaWdodCksIHBhZ2VMb2dpY2FsSGVpZ2h0KTsKICAgICBpZiAocmVt
YWluaW5nTG9naWNhbEhlaWdodCA8IGNoaWxkTG9naWNhbEhlaWdodCkKICAgICAgICAgcmV0dXJu
IGxvZ2ljYWxPZmZzZXQgKyByZW1haW5pbmdMb2dpY2FsSGVpZ2h0OwogICAgIHJldHVybiBsb2dp
Y2FsT2Zmc2V0OwogfQogCi12b2lkIFJlbmRlckJsb2NrOjphZGp1c3RMaW5lUG9zaXRpb25Gb3JQ
YWdpbmF0aW9uKFJvb3RJbmxpbmVCb3gqIGxpbmVCb3gsIGludCYgZGVsdGEpCit2b2lkIFJlbmRl
ckJsb2NrOjphZGp1c3RMaW5lUG9zaXRpb25Gb3JQYWdpbmF0aW9uKFJvb3RJbmxpbmVCb3gqIGxp
bmVCb3gsIExheW91dFVuaXQmIGRlbHRhKQogewogICAgIC8vIEZJWE1FOiBGb3Igbm93IHdlIHBh
Z2luYXRlIHVzaW5nIGxpbmUgb3ZlcmZsb3cuICBUaGlzIGVuc3VyZXMgdGhhdCBsaW5lcyBkb24n
dCBvdmVybGFwIGF0IGFsbCB3aGVuIHdlCiAgICAgLy8gcHV0IGEgc3RydXQgYmV0d2VlbiB0aGVt
IGZvciBwYWdpbmF0aW9uIHB1cnBvc2VzLiAgSG93ZXZlciwgdGhpcyByZWFsbHkgaXNuJ3QgdGhl
IGRlc2lyZWQgcmVuZGVyaW5nLCBzaW5jZQpAQCAtNjE2OCwyMyArNjE3MywyMyBAQCB2b2lkIFJl
bmRlckJsb2NrOjphZGp1c3RMaW5lUG9zaXRpb25Gb3JQCiAgICAgLy8gVGVjaG5pY2FsbHkgaWYg
dGhlIGxvY2F0aW9uIHdlIG1vdmUgdGhlIGxpbmUgdG8gaGFzIGEgZGlmZmVyZW50IGxpbmUgd2lk
dGggdGhhbiBvdXIgb2xkIHBvc2l0aW9uLCB0aGVuIHdlIG5lZWQgdG8gZGlydHkgdGhlCiAgICAg
Ly8gbGluZSBhbmQgYWxsIGZvbGxvd2luZyBsaW5lcy4KICAgICBMYXlvdXRTdGF0ZSogbGF5b3V0
U3RhdGUgPSB2aWV3KCktPmxheW91dFN0YXRlKCk7Ci0gICAgaW50IHBhZ2VMb2dpY2FsSGVpZ2h0
ID0gbGF5b3V0U3RhdGUtPm1fcGFnZUxvZ2ljYWxIZWlnaHQ7Ci0gICAgSW50UmVjdCBsb2dpY2Fs
VmlzdWFsT3ZlcmZsb3cgPSBsaW5lQm94LT5sb2dpY2FsVmlzdWFsT3ZlcmZsb3dSZWN0KGxpbmVC
b3gtPmxpbmVUb3AoKSwgbGluZUJveC0+bGluZUJvdHRvbSgpKTsKLSAgICBpbnQgbG9naWNhbE9m
ZnNldCA9IGxvZ2ljYWxWaXN1YWxPdmVyZmxvdy55KCk7Ci0gICAgaW50IGxpbmVIZWlnaHQgPSBs
b2dpY2FsVmlzdWFsT3ZlcmZsb3cubWF4WSgpIC0gbG9naWNhbE9mZnNldDsKKyAgICBMYXlvdXRV
bml0IHBhZ2VMb2dpY2FsSGVpZ2h0ID0gbGF5b3V0U3RhdGUtPm1fcGFnZUxvZ2ljYWxIZWlnaHQ7
CisgICAgTGF5b3V0UmVjdCBsb2dpY2FsVmlzdWFsT3ZlcmZsb3cgPSBsaW5lQm94LT5sb2dpY2Fs
VmlzdWFsT3ZlcmZsb3dSZWN0KGxpbmVCb3gtPmxpbmVUb3AoKSwgbGluZUJveC0+bGluZUJvdHRv
bSgpKTsKKyAgICBMYXlvdXRVbml0IGxvZ2ljYWxPZmZzZXQgPSBsb2dpY2FsVmlzdWFsT3ZlcmZs
b3cueSgpOworICAgIExheW91dFVuaXQgbGluZUhlaWdodCA9IGxvZ2ljYWxWaXN1YWxPdmVyZmxv
dy5tYXhZKCkgLSBsb2dpY2FsT2Zmc2V0OwogICAgIGlmIChsYXlvdXRTdGF0ZS0+bV9jb2x1bW5J
bmZvKQogICAgICAgICBsYXlvdXRTdGF0ZS0+bV9jb2x1bW5JbmZvLT51cGRhdGVNaW5pbXVtQ29s
dW1uSGVpZ2h0KGxpbmVIZWlnaHQpOwogICAgIGxvZ2ljYWxPZmZzZXQgKz0gZGVsdGE7CiAgICAg
bGluZUJveC0+c2V0UGFnaW5hdGlvblN0cnV0KDApOwogICAgIGlmICghcGFnZUxvZ2ljYWxIZWln
aHQgfHwgbGluZUhlaWdodCA+IHBhZ2VMb2dpY2FsSGVpZ2h0KQogICAgICAgICByZXR1cm47Ci0g
ICAgSW50U2l6ZSBvZmZzZXREZWx0YSA9IGxheW91dFN0YXRlLT5tX2xheW91dE9mZnNldCAtIGxh
eW91dFN0YXRlLT5tX3BhZ2VPZmZzZXQ7Ci0gICAgaW50IG9mZnNldCA9IGlzSG9yaXpvbnRhbFdy
aXRpbmdNb2RlKCkgPyBvZmZzZXREZWx0YS5oZWlnaHQoKSA6IG9mZnNldERlbHRhLndpZHRoKCk7
Ci0gICAgaW50IHJlbWFpbmluZ0xvZ2ljYWxIZWlnaHQgPSBwYWdlTG9naWNhbEhlaWdodCAtIChv
ZmZzZXQgKyBsb2dpY2FsT2Zmc2V0KSAlIHBhZ2VMb2dpY2FsSGVpZ2h0OworICAgIExheW91dFNp
emUgb2Zmc2V0RGVsdGEgPSBsYXlvdXRTdGF0ZS0+bV9sYXlvdXRPZmZzZXQgLSBsYXlvdXRTdGF0
ZS0+bV9wYWdlT2Zmc2V0OworICAgIExheW91dFVuaXQgb2Zmc2V0ID0gaXNIb3Jpem9udGFsV3Jp
dGluZ01vZGUoKSA/IG9mZnNldERlbHRhLmhlaWdodCgpIDogb2Zmc2V0RGVsdGEud2lkdGgoKTsK
KyAgICBMYXlvdXRVbml0IHJlbWFpbmluZ0xvZ2ljYWxIZWlnaHQgPSBwYWdlTG9naWNhbEhlaWdo
dCAtIGxheW91dE1vZChvZmZzZXQgKyBsb2dpY2FsT2Zmc2V0LCBwYWdlTG9naWNhbEhlaWdodCk7
CiAgICAgaWYgKHJlbWFpbmluZ0xvZ2ljYWxIZWlnaHQgPCBsaW5lSGVpZ2h0KSB7Ci0gICAgICAg
IGludCB0b3RhbExvZ2ljYWxIZWlnaHQgPSBsaW5lSGVpZ2h0ICsgbWF4KDAsIGxvZ2ljYWxPZmZz
ZXQpOworICAgICAgICBMYXlvdXRVbml0IHRvdGFsTG9naWNhbEhlaWdodCA9IGxpbmVIZWlnaHQg
KyBtYXg8TGF5b3V0VW5pdD4oMCwgbG9naWNhbE9mZnNldCk7CiAgICAgICAgIGlmIChsaW5lQm94
ID09IGZpcnN0Um9vdEJveCgpICYmIHRvdGFsTG9naWNhbEhlaWdodCA8IHBhZ2VMb2dpY2FsSGVp
Z2h0ICYmICFpc1Bvc2l0aW9uZWQoKSAmJiAhaXNUYWJsZUNlbGwoKSkKLSAgICAgICAgICAgIHNl
dFBhZ2luYXRpb25TdHJ1dChyZW1haW5pbmdMb2dpY2FsSGVpZ2h0ICsgbWF4KDAsIGxvZ2ljYWxP
ZmZzZXQpKTsKKyAgICAgICAgICAgIHNldFBhZ2luYXRpb25TdHJ1dChyZW1haW5pbmdMb2dpY2Fs
SGVpZ2h0ICsgbWF4PExheW91dFVuaXQ+KDAsIGxvZ2ljYWxPZmZzZXQpKTsKICAgICAgICAgZWxz
ZSB7CiAgICAgICAgICAgICBkZWx0YSArPSByZW1haW5pbmdMb2dpY2FsSGVpZ2h0OwogICAgICAg
ICAgICAgbGluZUJveC0+c2V0UGFnaW5hdGlvblN0cnV0KHJlbWFpbmluZ0xvZ2ljYWxIZWlnaHQp
OwpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrLmgJKHJldmlzaW9uIDkz
MzQzKQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTgyLDggKzgyLDggQEAgcHVibGljOgogICAgIGJvb2wgYmVpbmdEZXN0cm95ZWQo
KSBjb25zdCB7IHJldHVybiBtX2JlaW5nRGVzdHJveWVkOyB9CiAKICAgICAvLyBUaGVzZSB0d28g
ZnVuY3Rpb25zIGFyZSBvdmVycmlkZGVuIGZvciBpbmxpbmUtYmxvY2suCi0gICAgdmlydHVhbCBp
bnQgbGluZUhlaWdodChib29sIGZpcnN0TGluZSwgTGluZURpcmVjdGlvbk1vZGUsIExpbmVQb3Np
dGlvbk1vZGUgPSBQb3NpdGlvbk9uQ29udGFpbmluZ0xpbmUpIGNvbnN0OwotICAgIHZpcnR1YWwg
aW50IGJhc2VsaW5lUG9zaXRpb24oRm9udEJhc2VsaW5lLCBib29sIGZpcnN0TGluZSwgTGluZURp
cmVjdGlvbk1vZGUsIExpbmVQb3NpdGlvbk1vZGUgPSBQb3NpdGlvbk9uQ29udGFpbmluZ0xpbmUp
IGNvbnN0OworICAgIHZpcnR1YWwgTGF5b3V0VW5pdCBsaW5lSGVpZ2h0KGJvb2wgZmlyc3RMaW5l
LCBMaW5lRGlyZWN0aW9uTW9kZSwgTGluZVBvc2l0aW9uTW9kZSA9IFBvc2l0aW9uT25Db250YWlu
aW5nTGluZSkgY29uc3Q7CisgICAgdmlydHVhbCBMYXlvdXRVbml0IGJhc2VsaW5lUG9zaXRpb24o
Rm9udEJhc2VsaW5lLCBib29sIGZpcnN0TGluZSwgTGluZURpcmVjdGlvbk1vZGUsIExpbmVQb3Np
dGlvbk1vZGUgPSBQb3NpdGlvbk9uQ29udGFpbmluZ0xpbmUpIGNvbnN0OwogCiAgICAgUmVuZGVy
TGluZUJveExpc3QqIGxpbmVCb3hlcygpIHsgcmV0dXJuICZtX2xpbmVCb3hlczsgfQogICAgIGNv
bnN0IFJlbmRlckxpbmVCb3hMaXN0KiBsaW5lQm94ZXMoKSBjb25zdCB7IHJldHVybiAmbV9saW5l
Qm94ZXM7IH0KQEAgLTIwMywxMCArMjAzLDEwIEBAIHB1YmxpYzoKIAogICAgIC8vIEFjY2Vzc29y
cyBmb3IgbG9naWNhbCB3aWR0aC9oZWlnaHQgYW5kIG1hcmdpbnMgaW4gdGhlIGNvbnRhaW5pbmcg
YmxvY2sncyBibG9jay1mbG93IGRpcmVjdGlvbi4KICAgICBlbnVtIEFwcGx5TGF5b3V0RGVsdGFN
b2RlIHsgQXBwbHlMYXlvdXREZWx0YSwgRG9Ob3RBcHBseUxheW91dERlbHRhIH07Ci0gICAgaW50
IGxvZ2ljYWxXaWR0aEZvckNoaWxkKFJlbmRlckJveCogY2hpbGQpIHsgcmV0dXJuIGlzSG9yaXpv
bnRhbFdyaXRpbmdNb2RlKCkgPyBjaGlsZC0+d2lkdGgoKSA6IGNoaWxkLT5oZWlnaHQoKTsgfQot
ICAgIGludCBsb2dpY2FsSGVpZ2h0Rm9yQ2hpbGQoUmVuZGVyQm94KiBjaGlsZCkgeyByZXR1cm4g
aXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKSA/IGNoaWxkLT5oZWlnaHQoKSA6IGNoaWxkLT53aWR0
aCgpOyB9Ci0gICAgaW50IGxvZ2ljYWxUb3BGb3JDaGlsZChSZW5kZXJCb3gqIGNoaWxkKSB7IHJl
dHVybiBpc0hvcml6b250YWxXcml0aW5nTW9kZSgpID8gY2hpbGQtPnkoKSA6IGNoaWxkLT54KCk7
IH0KLSAgICBpbnQgbG9naWNhbExlZnRGb3JDaGlsZChSZW5kZXJCb3gqIGNoaWxkKSB7IHJldHVy
biBpc0hvcml6b250YWxXcml0aW5nTW9kZSgpID8gY2hpbGQtPngoKSA6IGNoaWxkLT55KCk7IH0K
KyAgICBMYXlvdXRVbml0IGxvZ2ljYWxXaWR0aEZvckNoaWxkKFJlbmRlckJveCogY2hpbGQpIHsg
cmV0dXJuIGlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCkgPyBjaGlsZC0+d2lkdGgoKSA6IGNoaWxk
LT5oZWlnaHQoKTsgfQorICAgIExheW91dFVuaXQgbG9naWNhbEhlaWdodEZvckNoaWxkKFJlbmRl
ckJveCogY2hpbGQpIHsgcmV0dXJuIGlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCkgPyBjaGlsZC0+
aGVpZ2h0KCkgOiBjaGlsZC0+d2lkdGgoKTsgfQorICAgIExheW91dFVuaXQgbG9naWNhbFRvcEZv
ckNoaWxkKFJlbmRlckJveCogY2hpbGQpIHsgcmV0dXJuIGlzSG9yaXpvbnRhbFdyaXRpbmdNb2Rl
KCkgPyBjaGlsZC0+eSgpIDogY2hpbGQtPngoKTsgfQorICAgIExheW91dFVuaXQgbG9naWNhbExl
ZnRGb3JDaGlsZChSZW5kZXJCb3gqIGNoaWxkKSB7IHJldHVybiBpc0hvcml6b250YWxXcml0aW5n
TW9kZSgpID8gY2hpbGQtPngoKSA6IGNoaWxkLT55KCk7IH0KICAgICB2b2lkIHNldExvZ2ljYWxM
ZWZ0Rm9yQ2hpbGQoUmVuZGVyQm94KiBjaGlsZCwgTGF5b3V0VW5pdCBsb2dpY2FsTGVmdCwgQXBw
bHlMYXlvdXREZWx0YU1vZGUgPSBEb05vdEFwcGx5TGF5b3V0RGVsdGEpOwogICAgIHZvaWQgc2V0
TG9naWNhbFRvcEZvckNoaWxkKFJlbmRlckJveCogY2hpbGQsIExheW91dFVuaXQgbG9naWNhbFRv
cCwgQXBwbHlMYXlvdXREZWx0YU1vZGUgPSBEb05vdEFwcGx5TGF5b3V0RGVsdGEpOwogICAgIExh
eW91dFVuaXQgbWFyZ2luQmVmb3JlRm9yQ2hpbGQoUmVuZGVyQm94TW9kZWxPYmplY3QqIGNoaWxk
KSBjb25zdDsKQEAgLTIxOSwzNSArMjE5LDM1IEBAIHB1YmxpYzoKICAgICB2b2lkIHNldE1hcmdp
bkVuZEZvckNoaWxkKFJlbmRlckJveCogY2hpbGQsIExheW91dFVuaXQpOwogICAgIHZvaWQgc2V0
TWFyZ2luQmVmb3JlRm9yQ2hpbGQoUmVuZGVyQm94KiBjaGlsZCwgTGF5b3V0VW5pdCk7CiAgICAg
dm9pZCBzZXRNYXJnaW5BZnRlckZvckNoaWxkKFJlbmRlckJveCogY2hpbGQsIExheW91dFVuaXQp
OwotICAgIGludCBjb2xsYXBzZWRNYXJnaW5CZWZvcmVGb3JDaGlsZChSZW5kZXJCb3gqIGNoaWxk
KSBjb25zdDsKLSAgICBpbnQgY29sbGFwc2VkTWFyZ2luQWZ0ZXJGb3JDaGlsZChSZW5kZXJCb3gq
IGNoaWxkKSBjb25zdDsKKyAgICBMYXlvdXRVbml0IGNvbGxhcHNlZE1hcmdpbkJlZm9yZUZvckNo
aWxkKFJlbmRlckJveCogY2hpbGQpIGNvbnN0OworICAgIExheW91dFVuaXQgY29sbGFwc2VkTWFy
Z2luQWZ0ZXJGb3JDaGlsZChSZW5kZXJCb3gqIGNoaWxkKSBjb25zdDsKIAogICAgIHZpcnR1YWwg
dm9pZCB1cGRhdGVGaXJzdExldHRlcigpOwogCiAgICAgY2xhc3MgTWFyZ2luVmFsdWVzIHsKICAg
ICBwdWJsaWM6Ci0gICAgICAgIE1hcmdpblZhbHVlcyhpbnQgYmVmb3JlUG9zLCBpbnQgYmVmb3Jl
TmVnLCBpbnQgYWZ0ZXJQb3MsIGludCBhZnRlck5lZykKKyAgICAgICAgTWFyZ2luVmFsdWVzKExh
eW91dFVuaXQgYmVmb3JlUG9zLCBMYXlvdXRVbml0IGJlZm9yZU5lZywgTGF5b3V0VW5pdCBhZnRl
clBvcywgTGF5b3V0VW5pdCBhZnRlck5lZykKICAgICAgICAgICAgIDogbV9wb3NpdGl2ZU1hcmdp
bkJlZm9yZShiZWZvcmVQb3MpCiAgICAgICAgICAgICAsIG1fbmVnYXRpdmVNYXJnaW5CZWZvcmUo
YmVmb3JlTmVnKQogICAgICAgICAgICAgLCBtX3Bvc2l0aXZlTWFyZ2luQWZ0ZXIoYWZ0ZXJQb3Mp
CiAgICAgICAgICAgICAsIG1fbmVnYXRpdmVNYXJnaW5BZnRlcihhZnRlck5lZykKICAgICAgICAg
eyB9CiAgICAgICAgIAotICAgICAgICBpbnQgcG9zaXRpdmVNYXJnaW5CZWZvcmUoKSBjb25zdCB7
IHJldHVybiBtX3Bvc2l0aXZlTWFyZ2luQmVmb3JlOyB9Ci0gICAgICAgIGludCBuZWdhdGl2ZU1h
cmdpbkJlZm9yZSgpIGNvbnN0IHsgcmV0dXJuIG1fbmVnYXRpdmVNYXJnaW5CZWZvcmU7IH0KLSAg
ICAgICAgaW50IHBvc2l0aXZlTWFyZ2luQWZ0ZXIoKSBjb25zdCB7IHJldHVybiBtX3Bvc2l0aXZl
TWFyZ2luQWZ0ZXI7IH0KLSAgICAgICAgaW50IG5lZ2F0aXZlTWFyZ2luQWZ0ZXIoKSBjb25zdCB7
IHJldHVybiBtX25lZ2F0aXZlTWFyZ2luQWZ0ZXI7IH0KLSAgICAgICAgCi0gICAgICAgIHZvaWQg
c2V0UG9zaXRpdmVNYXJnaW5CZWZvcmUoaW50IHBvcykgeyBtX3Bvc2l0aXZlTWFyZ2luQmVmb3Jl
ID0gcG9zOyB9Ci0gICAgICAgIHZvaWQgc2V0TmVnYXRpdmVNYXJnaW5CZWZvcmUoaW50IG5lZykg
eyBtX25lZ2F0aXZlTWFyZ2luQmVmb3JlID0gbmVnOyB9Ci0gICAgICAgIHZvaWQgc2V0UG9zaXRp
dmVNYXJnaW5BZnRlcihpbnQgcG9zKSB7IG1fcG9zaXRpdmVNYXJnaW5BZnRlciA9IHBvczsgfQot
ICAgICAgICB2b2lkIHNldE5lZ2F0aXZlTWFyZ2luQWZ0ZXIoaW50IG5lZykgeyBtX25lZ2F0aXZl
TWFyZ2luQWZ0ZXIgPSBuZWc7IH0KKyAgICAgICAgTGF5b3V0VW5pdCBwb3NpdGl2ZU1hcmdpbkJl
Zm9yZSgpIGNvbnN0IHsgcmV0dXJuIG1fcG9zaXRpdmVNYXJnaW5CZWZvcmU7IH0KKyAgICAgICAg
TGF5b3V0VW5pdCBuZWdhdGl2ZU1hcmdpbkJlZm9yZSgpIGNvbnN0IHsgcmV0dXJuIG1fbmVnYXRp
dmVNYXJnaW5CZWZvcmU7IH0KKyAgICAgICAgTGF5b3V0VW5pdCBwb3NpdGl2ZU1hcmdpbkFmdGVy
KCkgY29uc3QgeyByZXR1cm4gbV9wb3NpdGl2ZU1hcmdpbkFmdGVyOyB9CisgICAgICAgIExheW91
dFVuaXQgbmVnYXRpdmVNYXJnaW5BZnRlcigpIGNvbnN0IHsgcmV0dXJuIG1fbmVnYXRpdmVNYXJn
aW5BZnRlcjsgfQorICAgICAgICAKKyAgICAgICAgdm9pZCBzZXRQb3NpdGl2ZU1hcmdpbkJlZm9y
ZShMYXlvdXRVbml0IHBvcykgeyBtX3Bvc2l0aXZlTWFyZ2luQmVmb3JlID0gcG9zOyB9CisgICAg
ICAgIHZvaWQgc2V0TmVnYXRpdmVNYXJnaW5CZWZvcmUoTGF5b3V0VW5pdCBuZWcpIHsgbV9uZWdh
dGl2ZU1hcmdpbkJlZm9yZSA9IG5lZzsgfQorICAgICAgICB2b2lkIHNldFBvc2l0aXZlTWFyZ2lu
QWZ0ZXIoTGF5b3V0VW5pdCBwb3MpIHsgbV9wb3NpdGl2ZU1hcmdpbkFmdGVyID0gcG9zOyB9Cisg
ICAgICAgIHZvaWQgc2V0TmVnYXRpdmVNYXJnaW5BZnRlcihMYXlvdXRVbml0IG5lZykgeyBtX25l
Z2F0aXZlTWFyZ2luQWZ0ZXIgPSBuZWc7IH0KICAgICAKICAgICBwcml2YXRlOgotICAgICAgICBp
bnQgbV9wb3NpdGl2ZU1hcmdpbkJlZm9yZTsKLSAgICAgICAgaW50IG1fbmVnYXRpdmVNYXJnaW5C
ZWZvcmU7Ci0gICAgICAgIGludCBtX3Bvc2l0aXZlTWFyZ2luQWZ0ZXI7Ci0gICAgICAgIGludCBt
X25lZ2F0aXZlTWFyZ2luQWZ0ZXI7CisgICAgICAgIExheW91dFVuaXQgbV9wb3NpdGl2ZU1hcmdp
bkJlZm9yZTsKKyAgICAgICAgTGF5b3V0VW5pdCBtX25lZ2F0aXZlTWFyZ2luQmVmb3JlOworICAg
ICAgICBMYXlvdXRVbml0IG1fcG9zaXRpdmVNYXJnaW5BZnRlcjsKKyAgICAgICAgTGF5b3V0VW5p
dCBtX25lZ2F0aXZlTWFyZ2luQWZ0ZXI7CiAgICAgfTsKICAgICBNYXJnaW5WYWx1ZXMgbWFyZ2lu
VmFsdWVzRm9yQ2hpbGQoUmVuZGVyQm94KiBjaGlsZCk7CiAKQEAgLTI4NywxMyArMjg3LDEzIEBA
IHByb3RlY3RlZDoKICAgICB9CiAgICAgdm9pZCBtb3ZlQ2hpbGRyZW5UbyhSZW5kZXJCbG9jayog
dG8sIFJlbmRlck9iamVjdCogc3RhcnRDaGlsZCwgUmVuZGVyT2JqZWN0KiBlbmRDaGlsZCwgUmVu
ZGVyT2JqZWN0KiBiZWZvcmVDaGlsZCwgYm9vbCBmdWxsUmVtb3ZlSW5zZXJ0ID0gZmFsc2UpOwog
ICAgIAotICAgIGludCBtYXhQb3NpdGl2ZU1hcmdpbkJlZm9yZSgpIGNvbnN0IHsgcmV0dXJuIG1f
cmFyZURhdGEgPyBtX3JhcmVEYXRhLT5tX21hcmdpbnMucG9zaXRpdmVNYXJnaW5CZWZvcmUoKSA6
IFJlbmRlckJsb2NrUmFyZURhdGE6OnBvc2l0aXZlTWFyZ2luQmVmb3JlRGVmYXVsdCh0aGlzKTsg
fQotICAgIGludCBtYXhOZWdhdGl2ZU1hcmdpbkJlZm9yZSgpIGNvbnN0IHsgcmV0dXJuIG1fcmFy
ZURhdGEgPyBtX3JhcmVEYXRhLT5tX21hcmdpbnMubmVnYXRpdmVNYXJnaW5CZWZvcmUoKSA6IFJl
bmRlckJsb2NrUmFyZURhdGE6Om5lZ2F0aXZlTWFyZ2luQmVmb3JlRGVmYXVsdCh0aGlzKTsgfQot
ICAgIGludCBtYXhQb3NpdGl2ZU1hcmdpbkFmdGVyKCkgY29uc3QgeyByZXR1cm4gbV9yYXJlRGF0
YSA/IG1fcmFyZURhdGEtPm1fbWFyZ2lucy5wb3NpdGl2ZU1hcmdpbkFmdGVyKCkgOiBSZW5kZXJC
bG9ja1JhcmVEYXRhOjpwb3NpdGl2ZU1hcmdpbkFmdGVyRGVmYXVsdCh0aGlzKTsgfQotICAgIGlu
dCBtYXhOZWdhdGl2ZU1hcmdpbkFmdGVyKCkgY29uc3QgeyByZXR1cm4gbV9yYXJlRGF0YSA/IG1f
cmFyZURhdGEtPm1fbWFyZ2lucy5uZWdhdGl2ZU1hcmdpbkFmdGVyKCkgOiBSZW5kZXJCbG9ja1Jh
cmVEYXRhOjpuZWdhdGl2ZU1hcmdpbkFmdGVyRGVmYXVsdCh0aGlzKTsgfQorICAgIExheW91dFVu
aXQgbWF4UG9zaXRpdmVNYXJnaW5CZWZvcmUoKSBjb25zdCB7IHJldHVybiBtX3JhcmVEYXRhID8g
bV9yYXJlRGF0YS0+bV9tYXJnaW5zLnBvc2l0aXZlTWFyZ2luQmVmb3JlKCkgOiBSZW5kZXJCbG9j
a1JhcmVEYXRhOjpwb3NpdGl2ZU1hcmdpbkJlZm9yZURlZmF1bHQodGhpcyk7IH0KKyAgICBMYXlv
dXRVbml0IG1heE5lZ2F0aXZlTWFyZ2luQmVmb3JlKCkgY29uc3QgeyByZXR1cm4gbV9yYXJlRGF0
YSA/IG1fcmFyZURhdGEtPm1fbWFyZ2lucy5uZWdhdGl2ZU1hcmdpbkJlZm9yZSgpIDogUmVuZGVy
QmxvY2tSYXJlRGF0YTo6bmVnYXRpdmVNYXJnaW5CZWZvcmVEZWZhdWx0KHRoaXMpOyB9CisgICAg
TGF5b3V0VW5pdCBtYXhQb3NpdGl2ZU1hcmdpbkFmdGVyKCkgY29uc3QgeyByZXR1cm4gbV9yYXJl
RGF0YSA/IG1fcmFyZURhdGEtPm1fbWFyZ2lucy5wb3NpdGl2ZU1hcmdpbkFmdGVyKCkgOiBSZW5k
ZXJCbG9ja1JhcmVEYXRhOjpwb3NpdGl2ZU1hcmdpbkFmdGVyRGVmYXVsdCh0aGlzKTsgfQorICAg
IExheW91dFVuaXQgbWF4TmVnYXRpdmVNYXJnaW5BZnRlcigpIGNvbnN0IHsgcmV0dXJuIG1fcmFy
ZURhdGEgPyBtX3JhcmVEYXRhLT5tX21hcmdpbnMubmVnYXRpdmVNYXJnaW5BZnRlcigpIDogUmVu
ZGVyQmxvY2tSYXJlRGF0YTo6bmVnYXRpdmVNYXJnaW5BZnRlckRlZmF1bHQodGhpcyk7IH0KICAg
ICAKLSAgICB2b2lkIHNldE1heE1hcmdpbkJlZm9yZVZhbHVlcyhpbnQgcG9zLCBpbnQgbmVnKTsK
LSAgICB2b2lkIHNldE1heE1hcmdpbkFmdGVyVmFsdWVzKGludCBwb3MsIGludCBuZWcpOworICAg
IHZvaWQgc2V0TWF4TWFyZ2luQmVmb3JlVmFsdWVzKExheW91dFVuaXQgcG9zLCBMYXlvdXRVbml0
IG5lZyk7CisgICAgdm9pZCBzZXRNYXhNYXJnaW5BZnRlclZhbHVlcyhMYXlvdXRVbml0IHBvcywg
TGF5b3V0VW5pdCBuZWcpOwogCiAgICAgdm9pZCBpbml0TWF4TWFyZ2luVmFsdWVzKCkKICAgICB7
CkBAIC0zMTEsOCArMzExLDggQEAgcHJvdGVjdGVkOgogICAgIHZpcnR1YWwgdm9pZCBwYWludChQ
YWludEluZm8mLCBjb25zdCBMYXlvdXRQb2ludCYpOwogICAgIHZpcnR1YWwgdm9pZCBwYWludE9i
amVjdChQYWludEluZm8mLCBjb25zdCBMYXlvdXRQb2ludCYpOwogCi0gICAgTGF5b3V0VW5pdCBs
b2dpY2FsUmlnaHRPZmZzZXRGb3JMaW5lKExheW91dFVuaXQgcG9zaXRpb24sIExheW91dFVuaXQg
Zml4ZWRPZmZzZXQsIGJvb2wgYXBwbHlUZXh0SW5kZW50ID0gdHJ1ZSwgaW50KiBsb2dpY2FsSGVp
Z2h0UmVtYWluaW5nID0gMCkgY29uc3Q7Ci0gICAgTGF5b3V0VW5pdCBsb2dpY2FsTGVmdE9mZnNl
dEZvckxpbmUoTGF5b3V0VW5pdCBwb3NpdGlvbiwgTGF5b3V0VW5pdCBmaXhlZE9mZnNldCwgYm9v
bCBhcHBseVRleHRJbmRlbnQgPSB0cnVlLCBpbnQqIGxvZ2ljYWxIZWlnaHRSZW1haW5pbmcgPSAw
KSBjb25zdDsKKyAgICBMYXlvdXRVbml0IGxvZ2ljYWxSaWdodE9mZnNldEZvckxpbmUoTGF5b3V0
VW5pdCBwb3NpdGlvbiwgTGF5b3V0VW5pdCBmaXhlZE9mZnNldCwgYm9vbCBhcHBseVRleHRJbmRl
bnQgPSB0cnVlLCBMYXlvdXRVbml0KiBsb2dpY2FsSGVpZ2h0UmVtYWluaW5nID0gMCkgY29uc3Q7
CisgICAgTGF5b3V0VW5pdCBsb2dpY2FsTGVmdE9mZnNldEZvckxpbmUoTGF5b3V0VW5pdCBwb3Np
dGlvbiwgTGF5b3V0VW5pdCBmaXhlZE9mZnNldCwgYm9vbCBhcHBseVRleHRJbmRlbnQgPSB0cnVl
LCBMYXlvdXRVbml0KiBsb2dpY2FsSGVpZ2h0UmVtYWluaW5nID0gMCkgY29uc3Q7CiAKICAgICB2
aXJ0dWFsIEVUZXh0QWxpZ24gdGV4dEFsaWdubWVudEZvckxpbmUoYm9vbCBlbmRzV2l0aFNvZnRC
cmVhaykgY29uc3Q7CiAgICAgdmlydHVhbCB2b2lkIGFkanVzdElubGluZURpcmVjdGlvbkxpbmVC
b3VuZHMoaW50IC8qIGV4cGFuc2lvbk9wcG9ydHVuaXR5Q291bnQgKi8sIGZsb2F0JiAvKiBsb2dp
Y2FsTGVmdCAqLywgZmxvYXQmIC8qIGxvZ2ljYWxXaWR0aCAqLykgY29uc3QgeyB9CkBAIC0zMjEs
OCArMzIxLDggQEAgcHJvdGVjdGVkOgogCiAgICAgdmlydHVhbCB2b2lkIGNvbXB1dGVQcmVmZXJy
ZWRMb2dpY2FsV2lkdGhzKCk7CiAKLSAgICB2aXJ0dWFsIGludCBmaXJzdExpbmVCb3hCYXNlbGlu
ZSgpIGNvbnN0OwotICAgIHZpcnR1YWwgaW50IGxhc3RMaW5lQm94QmFzZWxpbmUoKSBjb25zdDsK
KyAgICB2aXJ0dWFsIExheW91dFVuaXQgZmlyc3RMaW5lQm94QmFzZWxpbmUoKSBjb25zdDsKKyAg
ICB2aXJ0dWFsIExheW91dFVuaXQgbGFzdExpbmVCb3hCYXNlbGluZSgpIGNvbnN0OwogCiAgICAg
dmlydHVhbCB2b2lkIHVwZGF0ZUhpdFRlc3RSZXN1bHQoSGl0VGVzdFJlc3VsdCYsIGNvbnN0IExh
eW91dFBvaW50Jik7CiAKQEAgLTM1NSw4ICszNTUsOCBAQCBwcm90ZWN0ZWQ6CiAgICAgLy8gT25s
eSB1c2VkIGJ5IFJlbmRlclNWR1RleHQsIHdoaWNoIGV4cGxpY2l0ZWx5IG92ZXJyaWRlcyBSZW5k
ZXJCbG9jazo6bGF5b3V0QmxvY2soKSwgZG8gTk9UIHVzZSBmb3IgYW55dGhpbmcgZWxzZS4KICAg
ICB2b2lkIGZvcmNlTGF5b3V0SW5saW5lQ2hpbGRyZW4oKQogICAgIHsKLSAgICAgICAgaW50IHJl
cGFpbnRMb2dpY2FsVG9wID0gMDsKLSAgICAgICAgaW50IHJlcGFpbnRMb2dpY2FsQm90dG9tID0g
MDsKKyAgICAgICAgTGF5b3V0VW5pdCByZXBhaW50TG9naWNhbFRvcCA9IDA7CisgICAgICAgIExh
eW91dFVuaXQgcmVwYWludExvZ2ljYWxCb3R0b20gPSAwOwogICAgICAgICBsYXlvdXRJbmxpbmVD
aGlsZHJlbih0cnVlLCByZXBhaW50TG9naWNhbFRvcCwgcmVwYWludExvZ2ljYWxCb3R0b20pOwog
ICAgIH0KICNlbmRpZgpAQCAtMzg5LDEwICszODksMTAgQEAgcHJpdmF0ZToKICAgICB2aXJ0dWFs
IHZvaWQgcmVwYWludE92ZXJoYW5naW5nRmxvYXRzKGJvb2wgcGFpbnRBbGxEZXNjZW5kYW50cyk7
CiAKICAgICB2b2lkIGxheW91dEJsb2NrQ2hpbGRyZW4oYm9vbCByZWxheW91dENoaWxkcmVuLCBM
YXlvdXRVbml0JiBtYXhGbG9hdExvZ2ljYWxCb3R0b20pOwotICAgIHZvaWQgbGF5b3V0SW5saW5l
Q2hpbGRyZW4oYm9vbCByZWxheW91dENoaWxkcmVuLCBpbnQmIHJlcGFpbnRMb2dpY2FsVG9wLCBp
bnQmIHJlcGFpbnRMb2dpY2FsQm90dG9tKTsKKyAgICB2b2lkIGxheW91dElubGluZUNoaWxkcmVu
KGJvb2wgcmVsYXlvdXRDaGlsZHJlbiwgTGF5b3V0VW5pdCYgcmVwYWludExvZ2ljYWxUb3AsIExh
eW91dFVuaXQmIHJlcGFpbnRMb2dpY2FsQm90dG9tKTsKICAgICBCaWRpUnVuKiBoYW5kbGVUcmFp
bGluZ1NwYWNlcyhCaWRpUnVuTGlzdDxCaWRpUnVuPiYsIEJpZGlDb250ZXh0Kik7CiAKLSAgICB2
aXJ0dWFsIHZvaWQgYm9yZGVyRml0QWRqdXN0KEludFJlY3QmKSBjb25zdDsgLy8gU2hyaW5rIHRo
ZSBib3ggaW4gd2hpY2ggdGhlIGJvcmRlciBwYWludHMgaWYgYm9yZGVyLWZpdCBpcyBzZXQuCisg
ICAgdmlydHVhbCB2b2lkIGJvcmRlckZpdEFkanVzdChMYXlvdXRSZWN0JikgY29uc3Q7IC8vIFNo
cmluayB0aGUgYm94IGluIHdoaWNoIHRoZSBib3JkZXIgcGFpbnRzIGlmIGJvcmRlci1maXQgaXMg
c2V0LgogCiAgICAgdmlydHVhbCB2b2lkIHVwZGF0ZUJlZm9yZUFmdGVyQ29udGVudChQc2V1ZG9J
ZCk7CiAKQEAgLTQ0MSw3ICs0NDEsNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgIG1fdHlw
ZSA9IEZsb2F0UG9zaXRpb25lZDsKICAgICAgICAgfQogCi0gICAgICAgIEZsb2F0aW5nT2JqZWN0
KFR5cGUgdHlwZSwgY29uc3QgSW50UmVjdCYgZnJhbWVSZWN0KQorICAgICAgICBGbG9hdGluZ09i
amVjdChUeXBlIHR5cGUsIGNvbnN0IExheW91dFJlY3QmIGZyYW1lUmVjdCkKICAgICAgICAgICAg
IDogbV9yZW5kZXJlcigwKQogICAgICAgICAgICAgLCBtX29yaWdpbmF0aW5nTGluZSgwKQogICAg
ICAgICAgICAgLCBtX2ZyYW1lUmVjdChmcmFtZVJlY3QpCkBAIC00NjIsMjAgKzQ2MiwyMCBAQCBw
cml2YXRlOgogICAgICAgICBib29sIGlzUGxhY2VkKCkgY29uc3QgeyByZXR1cm4gbV9pc1BsYWNl
ZDsgfQogICAgICAgICB2b2lkIHNldElzUGxhY2VkKGJvb2wgcGxhY2VkID0gdHJ1ZSkgeyBtX2lz
UGxhY2VkID0gcGxhY2VkOyB9CiAKLSAgICAgICAgaW50IHgoKSBjb25zdCB7IEFTU0VSVChpc1Bs
YWNlZCgpKTsgcmV0dXJuIG1fZnJhbWVSZWN0LngoKTsgfQotICAgICAgICBpbnQgbWF4WCgpIGNv
bnN0IHsgQVNTRVJUKGlzUGxhY2VkKCkpOyByZXR1cm4gbV9mcmFtZVJlY3QubWF4WCgpOyB9Ci0g
ICAgICAgIGludCB5KCkgY29uc3QgeyBBU1NFUlQoaXNQbGFjZWQoKSk7IHJldHVybiBtX2ZyYW1l
UmVjdC55KCk7IH0KLSAgICAgICAgaW50IG1heFkoKSBjb25zdCB7IEFTU0VSVChpc1BsYWNlZCgp
KTsgcmV0dXJuIG1fZnJhbWVSZWN0Lm1heFkoKTsgfQotICAgICAgICBpbnQgd2lkdGgoKSBjb25z
dCB7IHJldHVybiBtX2ZyYW1lUmVjdC53aWR0aCgpOyB9Ci0gICAgICAgIGludCBoZWlnaHQoKSBj
b25zdCB7IHJldHVybiBtX2ZyYW1lUmVjdC5oZWlnaHQoKTsgfQotCi0gICAgICAgIHZvaWQgc2V0
WChpbnQgeCkgeyBBU1NFUlQoIWlzSW5QbGFjZWRUcmVlKCkpOyBtX2ZyYW1lUmVjdC5zZXRYKHgp
OyB9Ci0gICAgICAgIHZvaWQgc2V0WShpbnQgeSkgeyBBU1NFUlQoIWlzSW5QbGFjZWRUcmVlKCkp
OyBtX2ZyYW1lUmVjdC5zZXRZKHkpOyB9Ci0gICAgICAgIHZvaWQgc2V0V2lkdGgoaW50IHdpZHRo
KSB7IEFTU0VSVCghaXNJblBsYWNlZFRyZWUoKSk7IG1fZnJhbWVSZWN0LnNldFdpZHRoKHdpZHRo
KTsgfQotICAgICAgICB2b2lkIHNldEhlaWdodChpbnQgaGVpZ2h0KSB7IEFTU0VSVCghaXNJblBs
YWNlZFRyZWUoKSk7IG1fZnJhbWVSZWN0LnNldEhlaWdodChoZWlnaHQpOyB9CisgICAgICAgIExh
eW91dFVuaXQgeCgpIGNvbnN0IHsgQVNTRVJUKGlzUGxhY2VkKCkpOyByZXR1cm4gbV9mcmFtZVJl
Y3QueCgpOyB9CisgICAgICAgIExheW91dFVuaXQgbWF4WCgpIGNvbnN0IHsgQVNTRVJUKGlzUGxh
Y2VkKCkpOyByZXR1cm4gbV9mcmFtZVJlY3QubWF4WCgpOyB9CisgICAgICAgIExheW91dFVuaXQg
eSgpIGNvbnN0IHsgQVNTRVJUKGlzUGxhY2VkKCkpOyByZXR1cm4gbV9mcmFtZVJlY3QueSgpOyB9
CisgICAgICAgIExheW91dFVuaXQgbWF4WSgpIGNvbnN0IHsgQVNTRVJUKGlzUGxhY2VkKCkpOyBy
ZXR1cm4gbV9mcmFtZVJlY3QubWF4WSgpOyB9CisgICAgICAgIExheW91dFVuaXQgd2lkdGgoKSBj
b25zdCB7IHJldHVybiBtX2ZyYW1lUmVjdC53aWR0aCgpOyB9CisgICAgICAgIExheW91dFVuaXQg
aGVpZ2h0KCkgY29uc3QgeyByZXR1cm4gbV9mcmFtZVJlY3QuaGVpZ2h0KCk7IH0KKworICAgICAg
ICB2b2lkIHNldFgoTGF5b3V0VW5pdCB4KSB7IEFTU0VSVCghaXNJblBsYWNlZFRyZWUoKSk7IG1f
ZnJhbWVSZWN0LnNldFgoeCk7IH0KKyAgICAgICAgdm9pZCBzZXRZKExheW91dFVuaXQgeSkgeyBB
U1NFUlQoIWlzSW5QbGFjZWRUcmVlKCkpOyBtX2ZyYW1lUmVjdC5zZXRZKHkpOyB9CisgICAgICAg
IHZvaWQgc2V0V2lkdGgoTGF5b3V0VW5pdCB3aWR0aCkgeyBBU1NFUlQoIWlzSW5QbGFjZWRUcmVl
KCkpOyBtX2ZyYW1lUmVjdC5zZXRXaWR0aCh3aWR0aCk7IH0KKyAgICAgICAgdm9pZCBzZXRIZWln
aHQoTGF5b3V0VW5pdCBoZWlnaHQpIHsgQVNTRVJUKCFpc0luUGxhY2VkVHJlZSgpKTsgbV9mcmFt
ZVJlY3Quc2V0SGVpZ2h0KGhlaWdodCk7IH0KIAotICAgICAgICBjb25zdCBJbnRSZWN0JiBmcmFt
ZVJlY3QoKSBjb25zdCB7IEFTU0VSVChpc1BsYWNlZCgpKTsgcmV0dXJuIG1fZnJhbWVSZWN0OyB9
Ci0gICAgICAgIHZvaWQgc2V0RnJhbWVSZWN0KGNvbnN0IEludFJlY3QmIGZyYW1lUmVjdCkgeyBB
U1NFUlQoIWlzSW5QbGFjZWRUcmVlKCkpOyBtX2ZyYW1lUmVjdCA9IGZyYW1lUmVjdDsgfQorICAg
ICAgICBjb25zdCBMYXlvdXRSZWN0JiBmcmFtZVJlY3QoKSBjb25zdCB7IEFTU0VSVChpc1BsYWNl
ZCgpKTsgcmV0dXJuIG1fZnJhbWVSZWN0OyB9CisgICAgICAgIHZvaWQgc2V0RnJhbWVSZWN0KGNv
bnN0IExheW91dFJlY3QmIGZyYW1lUmVjdCkgeyBBU1NFUlQoIWlzSW5QbGFjZWRUcmVlKCkpOyBt
X2ZyYW1lUmVjdCA9IGZyYW1lUmVjdDsgfQogCiAjaWZuZGVmIE5ERUJVRwogICAgICAgICBib29s
IGlzSW5QbGFjZWRUcmVlKCkgY29uc3QgeyByZXR1cm4gbV9pc0luUGxhY2VkVHJlZTsgfQpAQCAt
NDg0LDcgKzQ4NCw3IEBAIHByaXZhdGU6CiAKICAgICAgICAgUmVuZGVyQm94KiBtX3JlbmRlcmVy
OwogICAgICAgICBSb290SW5saW5lQm94KiBtX29yaWdpbmF0aW5nTGluZTsKLSAgICAgICAgSW50
UmVjdCBtX2ZyYW1lUmVjdDsKKyAgICAgICAgTGF5b3V0UmVjdCBtX2ZyYW1lUmVjdDsKICAgICAg
ICAgaW50IG1fcGFnaW5hdGlvblN0cnV0OwogICAgICAgICB1bnNpZ25lZCBtX3R5cGUgOiAzOyAv
LyBUeXBlIChsZWZ0L3JpZ2h0IGFsaWduZWQgb3IgcG9zaXRpb25lZCkKICAgICAgICAgYm9vbCBt
X3Nob3VsZFBhaW50IDogMTsKQEAgLTYxOCwxOSArNjE4LDE5IEBAIHByaXZhdGU6CiAgICAgYm9v
bCBwb3NpdGlvbmVkRmxvYXRzTmVlZFJlbGF5b3V0KCk7CiAKICAgICB2b2lkIGNsZWFyRmxvYXRz
KEJsb2NrTGF5b3V0UGFzcyk7Ci0gICAgaW50IGdldENsZWFyRGVsdGEoUmVuZGVyQm94KiBjaGls
ZCwgaW50IHlQb3MpOworICAgIExheW91dFVuaXQgZ2V0Q2xlYXJEZWx0YShSZW5kZXJCb3gqIGNo
aWxkLCBMYXlvdXRVbml0IHlQb3MpOwogCiAgICAgdmlydHVhbCBib29sIGF2b2lkc0Zsb2F0cygp
IGNvbnN0OwogCiAgICAgYm9vbCBoYXNPdmVyaGFuZ2luZ0Zsb2F0cygpIHsgcmV0dXJuIHBhcmVu
dCgpICYmICFoYXNDb2x1bW5zKCkgJiYgY29udGFpbnNGbG9hdHMoKSAmJiBsb3dlc3RGbG9hdExv
Z2ljYWxCb3R0b21JbmNsdWRpbmdQb3NpdGlvbmVkRmxvYXRzKCkgPiBsb2dpY2FsSGVpZ2h0KCk7
IH0KICAgICBib29sIGhhc092ZXJoYW5naW5nRmxvYXQoUmVuZGVyQm94Kik7Ci0gICAgdm9pZCBh
ZGRJbnRydWRpbmdGbG9hdHMoUmVuZGVyQmxvY2sqIHByZXYsIGludCB4b2Zmc2V0LCBpbnQgeW9m
ZnNldCk7Ci0gICAgaW50IGFkZE92ZXJoYW5naW5nRmxvYXRzKFJlbmRlckJsb2NrKiBjaGlsZCwg
aW50IHhvZmZzZXQsIGludCB5b2Zmc2V0LCBib29sIG1ha2VDaGlsZFBhaW50T3RoZXJGbG9hdHMp
OworICAgIHZvaWQgYWRkSW50cnVkaW5nRmxvYXRzKFJlbmRlckJsb2NrKiBwcmV2LCBMYXlvdXRV
bml0IHhvZmZzZXQsIExheW91dFVuaXQgeW9mZnNldCk7CisgICAgTGF5b3V0VW5pdCBhZGRPdmVy
aGFuZ2luZ0Zsb2F0cyhSZW5kZXJCbG9jayogY2hpbGQsIExheW91dFVuaXQgeG9mZnNldCwgTGF5
b3V0VW5pdCB5b2Zmc2V0LCBib29sIG1ha2VDaGlsZFBhaW50T3RoZXJGbG9hdHMpOwogCi0gICAg
aW50IGxvd2VzdEZsb2F0TG9naWNhbEJvdHRvbSgpIGNvbnN0IHsgcmV0dXJuIGxvd2VzdEZsb2F0
TG9naWNhbEJvdHRvbShGbG9hdGluZ09iamVjdDo6RmxvYXRMZWZ0UmlnaHQpOyB9Ci0gICAgaW50
IGxvd2VzdEZsb2F0TG9naWNhbEJvdHRvbUluY2x1ZGluZ1Bvc2l0aW9uZWRGbG9hdHMoKSBjb25z
dCB7IHJldHVybiBsb3dlc3RGbG9hdExvZ2ljYWxCb3R0b20oRmxvYXRpbmdPYmplY3Q6OkZsb2F0
QWxsKTsgfQotICAgIGludCBsb3dlc3RGbG9hdExvZ2ljYWxCb3R0b20oRmxvYXRpbmdPYmplY3Q6
OlR5cGUpIGNvbnN0OwotICAgIGludCBuZXh0RmxvYXRMb2dpY2FsQm90dG9tQmVsb3coaW50KSBj
b25zdDsKKyAgICBMYXlvdXRVbml0IGxvd2VzdEZsb2F0TG9naWNhbEJvdHRvbSgpIGNvbnN0IHsg
cmV0dXJuIGxvd2VzdEZsb2F0TG9naWNhbEJvdHRvbShGbG9hdGluZ09iamVjdDo6RmxvYXRMZWZ0
UmlnaHQpOyB9CisgICAgTGF5b3V0VW5pdCBsb3dlc3RGbG9hdExvZ2ljYWxCb3R0b21JbmNsdWRp
bmdQb3NpdGlvbmVkRmxvYXRzKCkgY29uc3QgeyByZXR1cm4gbG93ZXN0RmxvYXRMb2dpY2FsQm90
dG9tKEZsb2F0aW5nT2JqZWN0OjpGbG9hdEFsbCk7IH0KKyAgICBMYXlvdXRVbml0IGxvd2VzdEZs
b2F0TG9naWNhbEJvdHRvbShGbG9hdGluZ09iamVjdDo6VHlwZSkgY29uc3Q7CisgICAgTGF5b3V0
VW5pdCBuZXh0RmxvYXRMb2dpY2FsQm90dG9tQmVsb3coTGF5b3V0VW5pdCkgY29uc3Q7CiAgICAg
CiAgICAgdmlydHVhbCBib29sIGhpdFRlc3RDb2x1bW5zKGNvbnN0IEhpdFRlc3RSZXF1ZXN0Jiwg
SGl0VGVzdFJlc3VsdCYsIGNvbnN0IExheW91dFBvaW50JiBwb2ludEluQ29udGFpbmVyLCBjb25z
dCBMYXlvdXRQb2ludCYgYWNjdW11bGF0ZWRPZmZzZXQsIEhpdFRlc3RBY3Rpb24pOwogICAgIHZp
cnR1YWwgYm9vbCBoaXRUZXN0Q29udGVudHMoY29uc3QgSGl0VGVzdFJlcXVlc3QmLCBIaXRUZXN0
UmVzdWx0JiwgY29uc3QgTGF5b3V0UG9pbnQmIHBvaW50SW5Db250YWluZXIsIGNvbnN0IExheW91
dFBvaW50JiBhY2N1bXVsYXRlZE9mZnNldCwgSGl0VGVzdEFjdGlvbik7CkBAIC02NDUsNyArNjQ1
LDcgQEAgcHJpdmF0ZToKICAgICAvLyBjaGlsZHJlbi4KICAgICB2aXJ0dWFsIFJlbmRlckJsb2Nr
KiBmaXJzdExpbmVCbG9jaygpIGNvbnN0OwogCi0gICAgdmlydHVhbCBJbnRSZWN0IHJlY3RXaXRo
T3V0bGluZUZvclJlcGFpbnQoUmVuZGVyQm94TW9kZWxPYmplY3QqIHJlcGFpbnRDb250YWluZXIs
IGludCBvdXRsaW5lV2lkdGgpIGNvbnN0OworICAgIHZpcnR1YWwgTGF5b3V0UmVjdCByZWN0V2l0
aE91dGxpbmVGb3JSZXBhaW50KFJlbmRlckJveE1vZGVsT2JqZWN0KiByZXBhaW50Q29udGFpbmVy
LCBMYXlvdXRVbml0IG91dGxpbmVXaWR0aCkgY29uc3Q7CiAgICAgdmlydHVhbCBSZW5kZXJTdHls
ZSogb3V0bGluZVN0eWxlRm9yUmVwYWludCgpIGNvbnN0OwogICAgIAogICAgIHZpcnR1YWwgUmVu
ZGVyT2JqZWN0KiBob3ZlckFuY2VzdG9yKCkgY29uc3Q7CkBAIC02NzQsMTYgKzY3NCwxNiBAQCBw
cml2YXRlOgogCiAgICAgTGF5b3V0VW5pdCBkZXNpcmVkQ29sdW1uV2lkdGgoKSBjb25zdDsKICAg
ICB1bnNpZ25lZCBkZXNpcmVkQ29sdW1uQ291bnQoKSBjb25zdDsKLSAgICB2b2lkIHNldERlc2ly
ZWRDb2x1bW5Db3VudEFuZFdpZHRoKGludCBjb3VudCwgaW50IHdpZHRoKTsKKyAgICB2b2lkIHNl
dERlc2lyZWRDb2x1bW5Db3VudEFuZFdpZHRoKGludCBjb3VudCwgTGF5b3V0VW5pdCB3aWR0aCk7
CiAKLSAgICB2b2lkIHBhaW50Q29udGludWF0aW9uT3V0bGluZXMoUGFpbnRJbmZvJiwgY29uc3Qg
SW50UG9pbnQmKTsKKyAgICB2b2lkIHBhaW50Q29udGludWF0aW9uT3V0bGluZXMoUGFpbnRJbmZv
JiwgY29uc3QgTGF5b3V0UG9pbnQmKTsKIAotICAgIHZpcnR1YWwgSW50UmVjdCBsb2NhbENhcmV0
UmVjdChJbmxpbmVCb3gqLCBpbnQgY2FyZXRPZmZzZXQsIGludCogZXh0cmFXaWR0aFRvRW5kT2ZM
aW5lID0gMCk7CisgICAgdmlydHVhbCBMYXlvdXRSZWN0IGxvY2FsQ2FyZXRSZWN0KElubGluZUJv
eCosIGludCBjYXJldE9mZnNldCwgTGF5b3V0VW5pdCogZXh0cmFXaWR0aFRvRW5kT2ZMaW5lID0g
MCk7CiAKLSAgICB2b2lkIGFkanVzdFBvaW50VG9Db2x1bW5Db250ZW50cyhJbnRQb2ludCYpIGNv
bnN0OwotICAgIHZvaWQgYWRqdXN0Rm9yQm9yZGVyRml0KGludCB4LCBpbnQmIGxlZnQsIGludCYg
cmlnaHQpIGNvbnN0OyAvLyBIZWxwZXIgZnVuY3Rpb24gZm9yIGJvcmRlckZpdEFkanVzdAorICAg
IHZvaWQgYWRqdXN0UG9pbnRUb0NvbHVtbkNvbnRlbnRzKExheW91dFBvaW50JikgY29uc3Q7Cisg
ICAgdm9pZCBhZGp1c3RGb3JCb3JkZXJGaXQoTGF5b3V0VW5pdCB4LCBMYXlvdXRVbml0JiBsZWZ0
LCBMYXlvdXRVbml0JiByaWdodCkgY29uc3Q7IC8vIEhlbHBlciBmdW5jdGlvbiBmb3IgYm9yZGVy
Rml0QWRqdXN0CiAKLSAgICB2b2lkIG1hcmtMaW5lc0RpcnR5SW5CbG9ja1JhbmdlKGludCBsb2dp
Y2FsVG9wLCBpbnQgbG9naWNhbEJvdHRvbSwgUm9vdElubGluZUJveCogaGlnaGVzdCA9IDApOwor
ICAgIHZvaWQgbWFya0xpbmVzRGlydHlJbkJsb2NrUmFuZ2UoTGF5b3V0VW5pdCBsb2dpY2FsVG9w
LCBMYXlvdXRVbml0IGxvZ2ljYWxCb3R0b20sIFJvb3RJbmxpbmVCb3gqIGhpZ2hlc3QgPSAwKTsK
IAogICAgIHZvaWQgbmV3TGluZShFQ2xlYXIpOwogCkBAIC02OTEsNyArNjkxLDcgQEAgcHJpdmF0
ZToKICAgICBWaXNpYmxlUG9zaXRpb24gcG9zaXRpb25Gb3JQb2ludFdpdGhJbmxpbmVDaGlsZHJl
bihjb25zdCBMYXlvdXRQb2ludCYpOwogCiAgICAgLy8gQWRqdXN0IGZyb20gcGFpbnRpbmcgb2Zm
c2V0cyB0byB0aGUgbG9jYWwgY29vcmRzIG9mIHRoaXMgcmVuZGVyZXIKLSAgICB2b2lkIG9mZnNl
dEZvckNvbnRlbnRzKEludFBvaW50JikgY29uc3Q7CisgICAgdm9pZCBvZmZzZXRGb3JDb250ZW50
cyhMYXlvdXRQb2ludCYpIGNvbnN0OwogCiAgICAgdm9pZCBjYWxjQ29sdW1uV2lkdGgoKTsKICAg
ICBib29sIGxheW91dENvbHVtbnMoYm9vbCBoYXNTcGVjaWZpZWRQYWdlTG9naWNhbEhlaWdodCwg
aW50IHBhZ2VMb2dpY2FsSGVpZ2h0LCBMYXlvdXRTdGF0ZU1haW50YWluZXImKTsKQEAgLTczOCw4
ICs3MzgsOCBAQCBwcml2YXRlOgogICAgICAgICBib29sIG1fZGV0ZXJtaW5lZE1hcmdpbkJlZm9y
ZVF1aXJrIDogMTsKIAogICAgICAgICAvLyBUaGVzZSBmbGFncyB0cmFjayB0aGUgcHJldmlvdXMg
bWF4aW1hbCBwb3NpdGl2ZSBhbmQgbmVnYXRpdmUgbWFyZ2lucy4KLSAgICAgICAgaW50IG1fcG9z
aXRpdmVNYXJnaW47Ci0gICAgICAgIGludCBtX25lZ2F0aXZlTWFyZ2luOworICAgICAgICBMYXlv
dXRVbml0IG1fcG9zaXRpdmVNYXJnaW47CisgICAgICAgIExheW91dFVuaXQgbV9uZWdhdGl2ZU1h
cmdpbjsKIAogICAgIHB1YmxpYzoKICAgICAgICAgTWFyZ2luSW5mbyhSZW5kZXJCbG9jayosIExh
eW91dFVuaXQgYmVmb3JlQm9yZGVyUGFkZGluZywgTGF5b3V0VW5pdCBhZnRlckJvcmRlclBhZGRp
bmcpOwpAQCAtNzY2LDkgKzc2Niw5IEBAIHByaXZhdGU6CiAgICAgICAgIGJvb2wgZGV0ZXJtaW5l
ZE1hcmdpbkJlZm9yZVF1aXJrKCkgY29uc3QgeyByZXR1cm4gbV9kZXRlcm1pbmVkTWFyZ2luQmVm
b3JlUXVpcms7IH0KICAgICAgICAgYm9vbCBtYXJnaW5CZWZvcmVRdWlyaygpIGNvbnN0IHsgcmV0
dXJuIG1fbWFyZ2luQmVmb3JlUXVpcms7IH0KICAgICAgICAgYm9vbCBtYXJnaW5BZnRlclF1aXJr
KCkgY29uc3QgeyByZXR1cm4gbV9tYXJnaW5BZnRlclF1aXJrOyB9Ci0gICAgICAgIGludCBwb3Np
dGl2ZU1hcmdpbigpIGNvbnN0IHsgcmV0dXJuIG1fcG9zaXRpdmVNYXJnaW47IH0KLSAgICAgICAg
aW50IG5lZ2F0aXZlTWFyZ2luKCkgY29uc3QgeyByZXR1cm4gbV9uZWdhdGl2ZU1hcmdpbjsgfQot
ICAgICAgICBpbnQgbWFyZ2luKCkgY29uc3QgeyByZXR1cm4gbV9wb3NpdGl2ZU1hcmdpbiAtIG1f
bmVnYXRpdmVNYXJnaW47IH0KKyAgICAgICAgTGF5b3V0VW5pdCBwb3NpdGl2ZU1hcmdpbigpIGNv
bnN0IHsgcmV0dXJuIG1fcG9zaXRpdmVNYXJnaW47IH0KKyAgICAgICAgTGF5b3V0VW5pdCBuZWdh
dGl2ZU1hcmdpbigpIGNvbnN0IHsgcmV0dXJuIG1fbmVnYXRpdmVNYXJnaW47IH0KKyAgICAgICAg
TGF5b3V0VW5pdCBtYXJnaW4oKSBjb25zdCB7IHJldHVybiBtX3Bvc2l0aXZlTWFyZ2luIC0gbV9u
ZWdhdGl2ZU1hcmdpbjsgfQogICAgIH07CiAKICAgICB2b2lkIGxheW91dEJsb2NrQ2hpbGQoUmVu
ZGVyQm94KiBjaGlsZCwgTWFyZ2luSW5mbyYsIExheW91dFVuaXQmIHByZXZpb3VzRmxvYXRMb2dp
Y2FsQm90dG9tLCBMYXlvdXRVbml0JiBtYXhGbG9hdExvZ2ljYWxCb3R0b20pOwpAQCAtNzgyLDcg
Kzc4Miw3IEBAIHByaXZhdGU6CiAgICAgTGF5b3V0VW5pdCBjbGVhckZsb2F0c0lmTmVlZGVkKFJl
bmRlckJveCogY2hpbGQsIE1hcmdpbkluZm8mLCBpbnQgb2xkVG9wUG9zTWFyZ2luLCBpbnQgb2xk
VG9wTmVnTWFyZ2luLCBpbnQgeVBvcyk7CiAgICAgTGF5b3V0VW5pdCBlc3RpbWF0ZUxvZ2ljYWxU
b3BQb3NpdGlvbihSZW5kZXJCb3gqIGNoaWxkLCBjb25zdCBNYXJnaW5JbmZvJik7CiAgICAgdm9p
ZCBkZXRlcm1pbmVMb2dpY2FsTGVmdFBvc2l0aW9uRm9yQ2hpbGQoUmVuZGVyQm94KiBjaGlsZCk7
Ci0gICAgdm9pZCBoYW5kbGVBZnRlclNpZGVPZkJsb2NrKGludCB0b3AsIGludCBib3R0b20sIE1h
cmdpbkluZm8mKTsKKyAgICB2b2lkIGhhbmRsZUFmdGVyU2lkZU9mQmxvY2soTGF5b3V0VW5pdCB0
b3AsIExheW91dFVuaXQgYm90dG9tLCBNYXJnaW5JbmZvJik7CiAgICAgdm9pZCBzZXRDb2xsYXBz
ZWRCb3R0b21NYXJnaW4oY29uc3QgTWFyZ2luSW5mbyYpOwogICAgIC8vIEVuZCBoZWxwZXIgZnVu
Y3Rpb25zIGFuZCBzdHJ1Y3RzIHVzZWQgYnkgbGF5b3V0QmxvY2tDaGlsZHJlbi4KIApAQCAtODAw
LDEzICs4MDAsMTMgQEAgcHJpdmF0ZToKICAgICAvLyB3aWxsIG5vdC4KICAgICAvLwogICAgIC8v
IEZvciBhIHBhZ2UgaGVpZ2h0IG9mIDgwMHB4LCB0aGUgZmlyc3QgZnVuY3Rpb24gd2lsbCByZXR1
cm4gODAwIGlmIHRoZSB2YWx1ZSBwYXNzZWQgaW4gaXMgMC4gVGhlIHNlY29uZCBmdW5jdGlvbiB3
aWxsIHNpbXBseSByZXR1cm4gMC4KLSAgICBpbnQgbmV4dFBhZ2VMb2dpY2FsVG9wRXhjbHVkaW5n
Qm91bmRhcnlQb2ludChpbnQgbG9naWNhbE9mZnNldCkgY29uc3Q7Ci0gICAgaW50IG5leHRQYWdl
TG9naWNhbFRvcEluY2x1ZGluZ0JvdW5kYXJ5UG9pbnQoaW50IGxvZ2ljYWxPZmZzZXQpIGNvbnN0
OworICAgIExheW91dFVuaXQgbmV4dFBhZ2VMb2dpY2FsVG9wRXhjbHVkaW5nQm91bmRhcnlQb2lu
dChMYXlvdXRVbml0IGxvZ2ljYWxPZmZzZXQpIGNvbnN0OworICAgIExheW91dFVuaXQgbmV4dFBh
Z2VMb2dpY2FsVG9wSW5jbHVkaW5nQm91bmRhcnlQb2ludChMYXlvdXRVbml0IGxvZ2ljYWxPZmZz
ZXQpIGNvbnN0OwogCiAgICAgaW50IGFwcGx5QmVmb3JlQnJlYWsoUmVuZGVyQm94KiBjaGlsZCwg
aW50IGxvZ2ljYWxPZmZzZXQpOyAvLyBJZiB0aGUgY2hpbGQgaGFzIGEgYmVmb3JlIGJyZWFrLCB0
aGVuIHJldHVybiBhIG5ldyB5UG9zIHRoYXQgc2hpZnRzIHRvIHRoZSB0b3Agb2YgdGhlIG5leHQg
cGFnZS9jb2x1bW4uCiAgICAgaW50IGFwcGx5QWZ0ZXJCcmVhayhSZW5kZXJCb3gqIGNoaWxkLCBp
bnQgbG9naWNhbE9mZnNldCwgTWFyZ2luSW5mbyYgbWFyZ2luSW5mbyk7IC8vIElmIHRoZSBjaGls
ZCBoYXMgYW4gYWZ0ZXIgYnJlYWssIHRoZW4gcmV0dXJuIGEgbmV3IG9mZnNldCB0aGF0IHNoaWZ0
cyB0byB0aGUgdG9wIG9mIHRoZSBuZXh0IHBhZ2UvY29sdW1uLgotICAgIGludCBhZGp1c3RGb3JV
bnNwbGl0dGFibGVDaGlsZChSZW5kZXJCb3gqIGNoaWxkLCBpbnQgbG9naWNhbE9mZnNldCwgYm9v
bCBpbmNsdWRlTWFyZ2lucyA9IGZhbHNlKTsgLy8gSWYgdGhlIGNoaWxkIGlzIHVuc3BsaXR0YWJs
ZSBhbmQgY2FuJ3QgZml0IG9uIHRoZSBjdXJyZW50IHBhZ2UsIHJldHVybiB0aGUgdG9wIG9mIHRo
ZSBuZXh0IHBhZ2UvY29sdW1uLgotICAgIHZvaWQgYWRqdXN0TGluZVBvc2l0aW9uRm9yUGFnaW5h
dGlvbihSb290SW5saW5lQm94KiwgaW50JiBkZWx0YU9mZnNldCk7IC8vIENvbXB1dGVzIGEgZGVs
dGFPZmZzZXQgdmFsdWUgdGhhdCBwdXQgYSBsaW5lIGF0IHRoZSB0b3Agb2YgdGhlIG5leHQgcGFn
ZSBpZiBpdCBkb2Vzbid0IGZpdCBvbiB0aGUgY3VycmVudCBwYWdlLgorICAgIExheW91dFVuaXQg
YWRqdXN0Rm9yVW5zcGxpdHRhYmxlQ2hpbGQoUmVuZGVyQm94KiBjaGlsZCwgTGF5b3V0VW5pdCBs
b2dpY2FsT2Zmc2V0LCBib29sIGluY2x1ZGVNYXJnaW5zID0gZmFsc2UpOyAvLyBJZiB0aGUgY2hp
bGQgaXMgdW5zcGxpdHRhYmxlIGFuZCBjYW4ndCBmaXQgb24gdGhlIGN1cnJlbnQgcGFnZSwgcmV0
dXJuIHRoZSB0b3Agb2YgdGhlIG5leHQgcGFnZS9jb2x1bW4uCisgICAgdm9pZCBhZGp1c3RMaW5l
UG9zaXRpb25Gb3JQYWdpbmF0aW9uKFJvb3RJbmxpbmVCb3gqLCBMYXlvdXRVbml0JiBkZWx0YU9m
ZnNldCk7IC8vIENvbXB1dGVzIGEgZGVsdGFPZmZzZXQgdmFsdWUgdGhhdCBwdXQgYSBsaW5lIGF0
IHRoZSB0b3Agb2YgdGhlIG5leHQgcGFnZSBpZiBpdCBkb2Vzbid0IGZpdCBvbiB0aGUgY3VycmVu
dCBwYWdlLgogCiAgICAgc3RydWN0IEZsb2F0aW5nT2JqZWN0SGFzaEZ1bmN0aW9ucyB7CiAgICAg
ICAgIHN0YXRpYyB1bnNpZ25lZCBoYXNoKEZsb2F0aW5nT2JqZWN0KiBrZXkpIHsgcmV0dXJuIERl
ZmF1bHRIYXNoPFJlbmRlckJveCo+OjpIYXNoOjpoYXNoKGtleS0+bV9yZW5kZXJlcik7IH0KQEAg
LTgxOSw4ICs4MTksOCBAQCBwcml2YXRlOgogICAgIH07CiAgICAgdHlwZWRlZiBMaXN0SGFzaFNl
dDxGbG9hdGluZ09iamVjdCosIDQsIEZsb2F0aW5nT2JqZWN0SGFzaEZ1bmN0aW9ucz4gRmxvYXRp
bmdPYmplY3RTZXQ7CiAgICAgdHlwZWRlZiBGbG9hdGluZ09iamVjdFNldDo6Y29uc3RfaXRlcmF0
b3IgRmxvYXRpbmdPYmplY3RTZXRJdGVyYXRvcjsKLSAgICB0eXBlZGVmIFBPREludGVydmFsPExh
eW91dFVuaXQsIEZsb2F0aW5nT2JqZWN0Kj4gRmxvYXRpbmdPYmplY3RJbnRlcnZhbDsKLSAgICB0
eXBlZGVmIFBPREludGVydmFsVHJlZTxMYXlvdXRVbml0LCBGbG9hdGluZ09iamVjdCo+IEZsb2F0
aW5nT2JqZWN0VHJlZTsKKyAgICB0eXBlZGVmIFBPREludGVydmFsPGludCwgRmxvYXRpbmdPYmpl
Y3QqPiBGbG9hdGluZ09iamVjdEludGVydmFsOworICAgIHR5cGVkZWYgUE9ESW50ZXJ2YWxUcmVl
PGludCwgRmxvYXRpbmdPYmplY3QqPiBGbG9hdGluZ09iamVjdFRyZWU7CiAgICAgCiAgICAgdGVt
cGxhdGUgPEZsb2F0aW5nT2JqZWN0OjpUeXBlIEZsb2F0VHlwZVZhbHVlPgogICAgIGNsYXNzIEZs
b2F0SW50ZXJ2YWxTZWFyY2hBZGFwdGVyIHsK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>104535</attachid>
            <date>2011-08-19 11:34:01 -0700</date>
            <delta_ts>2011-08-19 13:58:13 -0700</delta_ts>
            <desc>Patch for landing</desc>
            <filename>bug-66502-20110819113400.patch</filename>
            <type>text/plain</type>
            <size>67338</size>
            <attacher name="Emil A Eklund">eae</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDkzNDI0KQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTggQEAKKzIwMTEtMDgtMTkgIEVtaWwgQSBF
a2x1bmQgIDxlYWVAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFN3aXRjaCBSZW5kZXJCbG9jayB0
byB0byBuZXcgbGF5b3V0IHR5cGVzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD02NjUwMgorCisgICAgICAgIFJldmlld2VkIGJ5IEVyaWMgU2VpZGVsLgor
CisgICAgICAgIENvbnZlcnQgUmVuZGVyQmxvY2sgdG8gbmV3IGxheW91dCBhYnN0cmFjdGlvbi4g
TGVhdmUgbV9saW5lSGlnaHQgYXMgYSAzMAorICAgICAgICBiaXQgaW50IGZvciBub3cgdG8gYXZv
aWQgdW5uZWNlc3NhcmlseSBpbmNyZWFzaW5nIHRoZSBtZW1vcnkgdXNhZ2UuCisKKyAgICAgICAg
Tm8gbmV3IHRlc3RzIGFzIG5vIG5ldyBmdW5jdGlvbmFsaXR5LgorCisgICAgICAgICogcmVuZGVy
aW5nL1JlbmRlckJsb2NrLmNwcDoKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyQmxvY2suaDoK
KwogMjAxMS0wOC0xNyAgQWRyaWVubmUgV2Fsa2VyICA8ZW5uZUBnb29nbGUuY29tPgogCiAgICAg
ICAgIFtjaHJvbWl1bV0gU3BsaXQgdGlsZXIgaW50byBtYWluIHRocmVhZCAvIGNvbXBvc2l0b3Ig
dGhyZWFkIHZlcnNpb25zCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxv
Y2suY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9j
ay5jcHAJKHJldmlzaW9uIDkzNDI0KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
ckJsb2NrLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTIwNiw3ICsxMjA2LDcgQEAgdm9pZCBSZW5k
ZXJCbG9jazo6bGF5b3V0QmxvY2soYm9vbCByZWxheQogICAgICAgICAgICAgLy8gV2UgbmVlZCB0
byBnbyBhaGVhZCBhbmQgc2V0IG91ciBleHBsaWNpdCBwYWdlIGhlaWdodCBpZiBvbmUgZXhpc3Rz
LCBzbyB0aGF0IHdlIGNhbgogICAgICAgICAgICAgLy8gYXZvaWQgZG9pbmcgdHdvIGxheW91dCBw
YXNzZXMuCiAgICAgICAgICAgICBjb21wdXRlTG9naWNhbEhlaWdodCgpOwotICAgICAgICAgICAg
aW50IGNvbHVtbkhlaWdodCA9IGNvbnRlbnRMb2dpY2FsSGVpZ2h0KCk7CisgICAgICAgICAgICBM
YXlvdXRVbml0IGNvbHVtbkhlaWdodCA9IGNvbnRlbnRMb2dpY2FsSGVpZ2h0KCk7CiAgICAgICAg
ICAgICBpZiAoY29sdW1uSGVpZ2h0ID4gMCkgewogICAgICAgICAgICAgICAgIHBhZ2VMb2dpY2Fs
SGVpZ2h0ID0gY29sdW1uSGVpZ2h0OwogICAgICAgICAgICAgICAgIGhhc1NwZWNpZmllZFBhZ2VM
b2dpY2FsSGVpZ2h0ID0gdHJ1ZTsKQEAgLTEyMjIsNyArMTIyMiw3IEBAIHZvaWQgUmVuZGVyQmxv
Y2s6OmxheW91dEJsb2NrKGJvb2wgcmVsYXkKICAgICAgICAgICAgIGNvbEluZm8tPmNsZWFyRm9y
Y2VkQnJlYWtzKCk7CiAgICAgfQogCi0gICAgTGF5b3V0U3RhdGVNYWludGFpbmVyIHN0YXRlUHVz
aGVyKHZpZXcoKSwgdGhpcywgSW50U2l6ZSh4KCksIHkoKSksIGhhc0NvbHVtbnMoKSB8fCBoYXNU
cmFuc2Zvcm0oKSB8fCBoYXNSZWZsZWN0aW9uKCkgfHwgc3R5bGUoKS0+aXNGbGlwcGVkQmxvY2tz
V3JpdGluZ01vZGUoKSwgcGFnZUxvZ2ljYWxIZWlnaHQsIHBhZ2VMb2dpY2FsSGVpZ2h0Q2hhbmdl
ZCwgY29sSW5mbyk7CisgICAgTGF5b3V0U3RhdGVNYWludGFpbmVyIHN0YXRlUHVzaGVyKHZpZXco
KSwgdGhpcywgbG9jYXRpb25PZmZzZXQoKSwgaGFzQ29sdW1ucygpIHx8IGhhc1RyYW5zZm9ybSgp
IHx8IGhhc1JlZmxlY3Rpb24oKSB8fCBzdHlsZSgpLT5pc0ZsaXBwZWRCbG9ja3NXcml0aW5nTW9k
ZSgpLCBwYWdlTG9naWNhbEhlaWdodCwgcGFnZUxvZ2ljYWxIZWlnaHRDaGFuZ2VkLCBjb2xJbmZv
KTsKIAogICAgIC8vIFdlIHVzZSBmb3VyIHZhbHVlcywgbWF4VG9wUG9zLCBtYXhUb3BOZWcsIG1h
eEJvdHRvbVBvcywgYW5kIG1heEJvdHRvbU5lZywgdG8gdHJhY2sKICAgICAvLyBvdXIgY3VycmVu
dCBtYXhpbWFsIHBvc2l0aXZlIGFuZCBuZWdhdGl2ZSBtYXJnaW5zLiAgVGhlc2UgdmFsdWVzIGFy
ZSB1c2VkIHdoZW4gd2UKQEAgLTEzNDYsNyArMTM0Niw3IEBAIHZvaWQgUmVuZGVyQmxvY2s6Omxh
eW91dEJsb2NrKGJvb2wgcmVsYXkKICAgICAgICAgICAgIHJlcGFpbnRSZWN0Lm1vdmUoLWxheWVy
KCktPnNjcm9sbGVkQ29udGVudE9mZnNldCgpKTsKIAogICAgICAgICAgICAgLy8gRG9uJ3QgYWxs
b3cgdGhpcyByZWN0IHRvIHNwaWxsIG91dCBvZiBvdXIgb3ZlcmZsb3cgYm94LgotICAgICAgICAg
ICAgcmVwYWludFJlY3QuaW50ZXJzZWN0KEludFJlY3QoMCwgMCwgd2lkdGgoKSwgaGVpZ2h0KCkp
KTsKKyAgICAgICAgICAgIHJlcGFpbnRSZWN0LmludGVyc2VjdChMYXlvdXRSZWN0KExheW91dFBv
aW50KCksIHNpemUoKSkpOwogICAgICAgICB9CiAKICAgICAgICAgLy8gTWFrZSBzdXJlIHRoZSBy
ZWN0IGlzIHN0aWxsIG5vbi1lbXB0eSBhZnRlciBpbnRlcnNlY3RpbmcgZm9yIG92ZXJmbG93IGFi
b3ZlCkBAIC0xNDE0LDkgKzE0MTQsOSBAQCB2b2lkIFJlbmRlckJsb2NrOjpjb21wdXRlT3ZlcmZs
b3coTGF5b3V0CiAgICAgICAgIExheW91dFJlY3QgY2xpZW50UmVjdChjbGllbnRCb3hSZWN0KCkp
OwogICAgICAgICBMYXlvdXRSZWN0IHJlY3RUb0FwcGx5OwogICAgICAgICBpZiAoaXNIb3Jpem9u
dGFsV3JpdGluZ01vZGUoKSkKLSAgICAgICAgICAgIHJlY3RUb0FwcGx5ID0gTGF5b3V0UmVjdChj
bGllbnRSZWN0LngoKSwgY2xpZW50UmVjdC55KCksIDEsIG1heCgwLCBvbGRDbGllbnRBZnRlckVk
Z2UgLSBjbGllbnRSZWN0LnkoKSkpOworICAgICAgICAgICAgcmVjdFRvQXBwbHkgPSBMYXlvdXRS
ZWN0KGNsaWVudFJlY3QueCgpLCBjbGllbnRSZWN0LnkoKSwgMSwgbWF4PExheW91dFVuaXQ+KDAs
IG9sZENsaWVudEFmdGVyRWRnZSAtIGNsaWVudFJlY3QueSgpKSk7CiAgICAgICAgIGVsc2UKLSAg
ICAgICAgICAgIHJlY3RUb0FwcGx5ID0gTGF5b3V0UmVjdChjbGllbnRSZWN0LngoKSwgY2xpZW50
UmVjdC55KCksIG1heCgwLCBvbGRDbGllbnRBZnRlckVkZ2UgLSBjbGllbnRSZWN0LngoKSksIDEp
OworICAgICAgICAgICAgcmVjdFRvQXBwbHkgPSBMYXlvdXRSZWN0KGNsaWVudFJlY3QueCgpLCBj
bGllbnRSZWN0LnkoKSwgbWF4PExheW91dFVuaXQ+KDAsIG9sZENsaWVudEFmdGVyRWRnZSAtIGNs
aWVudFJlY3QueCgpKSwgMSk7CiAgICAgICAgIGFkZExheW91dE92ZXJmbG93KHJlY3RUb0FwcGx5
KTsKICAgICB9CiAgICAgICAgIApAQCAtMTg0Myw3ICsxODQzLDcgQEAgdm9pZCBSZW5kZXJCbG9j
azo6c2V0Q29sbGFwc2VkQm90dG9tTWFyZwogICAgIH0KIH0KIAotdm9pZCBSZW5kZXJCbG9jazo6
aGFuZGxlQWZ0ZXJTaWRlT2ZCbG9jayhpbnQgYmVmb3JlU2lkZSwgaW50IGFmdGVyU2lkZSwgTWFy
Z2luSW5mbyYgbWFyZ2luSW5mbykKK3ZvaWQgUmVuZGVyQmxvY2s6OmhhbmRsZUFmdGVyU2lkZU9m
QmxvY2soTGF5b3V0VW5pdCBiZWZvcmVTaWRlLCBMYXlvdXRVbml0IGFmdGVyU2lkZSwgTWFyZ2lu
SW5mbyYgbWFyZ2luSW5mbykKIHsKICAgICBtYXJnaW5JbmZvLnNldEF0QWZ0ZXJTaWRlT2ZCbG9j
ayh0cnVlKTsKIApAQCAtMjEyNCw3ICsyMTI0LDggQEAgdm9pZCBSZW5kZXJCbG9jazo6bGF5b3V0
QmxvY2tDaGlsZChSZW5kZQogICAgICAgICAgICAgc2V0TG9naWNhbEhlaWdodChuZXdIZWlnaHQp
OwogICAgIH0KIAotICAgIC8vIEZJWE1FOiBOZWVkcyB0byB1c2UgZXBzaWxvbiBvbmNlIHdlIG1v
dmUgdG8gZmxvYXQsIHNlZSBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
NjQwMjEKKyAgICAvLyBGSVhNRTogQ2hhbmdlIHRvIHVzZSByb3VnaGx5RXF1YWxzIHdoZW4gd2Ug
bW92ZSB0byBmbG9hdC4KKyAgICAvLyBTZWUgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTY2MTQ4CiAgICAgQVNTRVJUKG9sZExheW91dERlbHRhID09IHZpZXcoKS0+bGF5
b3V0RGVsdGEoKSk7CiB9CiAKQEAgLTI0OTUsNyArMjQ5Niw3IEBAIHZvaWQgUmVuZGVyQmxvY2s6
OnBhaW50Q2hpbGRyZW4oUGFpbnRJbmYKICAgICAgICAgaWYgKGNoZWNrQWZ0ZXJBbHdheXMKICAg
ICAgICAgICAgICYmIChhYnNvbHV0ZUNoaWxkWSArIGNoaWxkLT5oZWlnaHQoKSkgPiBwYWludElu
Zm8ucmVjdC55KCkKICAgICAgICAgICAgICYmIChhYnNvbHV0ZUNoaWxkWSArIGNoaWxkLT5oZWln
aHQoKSkgPCBwYWludEluZm8ucmVjdC5tYXhZKCkpIHsKLSAgICAgICAgICAgIHZpZXcoKS0+c2V0
QmVzdFRydW5jYXRlZEF0KGFic29sdXRlQ2hpbGRZICsgY2hpbGQtPmhlaWdodCgpICsgbWF4KDAs
IGNoaWxkLT5jb2xsYXBzZWRNYXJnaW5BZnRlcigpKSwgdGhpcywgdHJ1ZSk7CisgICAgICAgICAg
ICB2aWV3KCktPnNldEJlc3RUcnVuY2F0ZWRBdChhYnNvbHV0ZUNoaWxkWSArIGNoaWxkLT5oZWln
aHQoKSArIG1heDxMYXlvdXRVbml0PigwLCBjaGlsZC0+Y29sbGFwc2VkTWFyZ2luQWZ0ZXIoKSks
IHRoaXMsIHRydWUpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAgICAgfQpAQCAt
Mjc5Nyw3ICsyNzk4LDcgQEAgR2FwUmVjdHMgUmVuZGVyQmxvY2s6OnNlbGVjdGlvbkdhcFJlY3Rz
RgogICAgIC8vIEZJWE1FOiB0aGlzIGlzIGJyb2tlbiB3aXRoIHRyYW5zZm9ybXMKICAgICBUcmFu
c2Zvcm1TdGF0ZSB0cmFuc2Zvcm1TdGF0ZShUcmFuc2Zvcm1TdGF0ZTo6QXBwbHlUcmFuc2Zvcm1E
aXJlY3Rpb24sIEZsb2F0UG9pbnQoKSk7CiAgICAgbWFwTG9jYWxUb0NvbnRhaW5lcihyZXBhaW50
Q29udGFpbmVyLCBmYWxzZSwgZmFsc2UsIHRyYW5zZm9ybVN0YXRlKTsKLSAgICBJbnRQb2ludCBv
ZmZzZXRGcm9tUmVwYWludENvbnRhaW5lciA9IHJvdW5kZWRJbnRQb2ludCh0cmFuc2Zvcm1TdGF0
ZS5tYXBwZWRQb2ludCgpKTsKKyAgICBMYXlvdXRQb2ludCBvZmZzZXRGcm9tUmVwYWludENvbnRh
aW5lciA9IHJvdW5kZWRMYXlvdXRQb2ludCh0cmFuc2Zvcm1TdGF0ZS5tYXBwZWRQb2ludCgpKTsK
IAogICAgIGlmIChoYXNPdmVyZmxvd0NsaXAoKSkKICAgICAgICAgb2Zmc2V0RnJvbVJlcGFpbnRD
b250YWluZXIgLT0gbGF5ZXIoKS0+c2Nyb2xsZWRDb250ZW50T2Zmc2V0KCk7CkBAIC0yODMzLDcg
KzI4MzQsNyBAQCB2b2lkIFJlbmRlckJsb2NrOjpwYWludFNlbGVjdGlvbihQYWludEluCiAgICAg
fQogfQogCi1zdGF0aWMgdm9pZCBjbGlwT3V0UG9zaXRpb25lZE9iamVjdHMoY29uc3QgUGFpbnRJ
bmZvKiBwYWludEluZm8sIGNvbnN0IEludFBvaW50JiBvZmZzZXQsIFJlbmRlckJsb2NrOjpQb3Np
dGlvbmVkT2JqZWN0c0xpc3RIYXNoU2V0KiBwb3NpdGlvbmVkT2JqZWN0cykKK3N0YXRpYyB2b2lk
IGNsaXBPdXRQb3NpdGlvbmVkT2JqZWN0cyhjb25zdCBQYWludEluZm8qIHBhaW50SW5mbywgY29u
c3QgTGF5b3V0UG9pbnQmIG9mZnNldCwgUmVuZGVyQmxvY2s6OlBvc2l0aW9uZWRPYmplY3RzTGlz
dEhhc2hTZXQqIHBvc2l0aW9uZWRPYmplY3RzKQogewogICAgIGlmICghcG9zaXRpb25lZE9iamVj
dHMpCiAgICAgICAgIHJldHVybjsKQEAgLTI4NDEsMTYgKzI4NDIsMTYgQEAgc3RhdGljIHZvaWQg
Y2xpcE91dFBvc2l0aW9uZWRPYmplY3RzKGNvbgogICAgIFJlbmRlckJsb2NrOjpQb3NpdGlvbmVk
T2JqZWN0c0xpc3RIYXNoU2V0Ojpjb25zdF9pdGVyYXRvciBlbmQgPSBwb3NpdGlvbmVkT2JqZWN0
cy0+ZW5kKCk7CiAgICAgZm9yIChSZW5kZXJCbG9jazo6UG9zaXRpb25lZE9iamVjdHNMaXN0SGFz
aFNldDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBwb3NpdGlvbmVkT2JqZWN0cy0+YmVnaW4oKTsgaXQg
IT0gZW5kOyArK2l0KSB7CiAgICAgICAgIFJlbmRlckJveCogciA9ICppdDsKLSAgICAgICAgcGFp
bnRJbmZvLT5jb250ZXh0LT5jbGlwT3V0KEludFJlY3Qob2Zmc2V0LngoKSArIHItPngoKSwgb2Zm
c2V0LnkoKSArIHItPnkoKSwgci0+d2lkdGgoKSwgci0+aGVpZ2h0KCkpKTsKKyAgICAgICAgcGFp
bnRJbmZvLT5jb250ZXh0LT5jbGlwT3V0KExheW91dFJlY3Qob2Zmc2V0LngoKSArIHItPngoKSwg
b2Zmc2V0LnkoKSArIHItPnkoKSwgci0+d2lkdGgoKSwgci0+aGVpZ2h0KCkpKTsKICAgICB9CiB9
CiAKLXN0YXRpYyBpbnQgYmxvY2tEaXJlY3Rpb25PZmZzZXQoUmVuZGVyQmxvY2sqIHJvb3RCbG9j
aywgY29uc3QgSW50U2l6ZSYgb2Zmc2V0RnJvbVJvb3RCbG9jaykKK3N0YXRpYyBpbnQgYmxvY2tE
aXJlY3Rpb25PZmZzZXQoUmVuZGVyQmxvY2sqIHJvb3RCbG9jaywgY29uc3QgTGF5b3V0U2l6ZSYg
b2Zmc2V0RnJvbVJvb3RCbG9jaykKIHsKICAgICByZXR1cm4gcm9vdEJsb2NrLT5pc0hvcml6b250
YWxXcml0aW5nTW9kZSgpID8gb2Zmc2V0RnJvbVJvb3RCbG9jay5oZWlnaHQoKSA6IG9mZnNldEZy
b21Sb290QmxvY2sud2lkdGgoKTsKIH0KIAotc3RhdGljIGludCBpbmxpbmVEaXJlY3Rpb25PZmZz
ZXQoUmVuZGVyQmxvY2sqIHJvb3RCbG9jaywgY29uc3QgSW50U2l6ZSYgb2Zmc2V0RnJvbVJvb3RC
bG9jaykKK3N0YXRpYyBpbnQgaW5saW5lRGlyZWN0aW9uT2Zmc2V0KFJlbmRlckJsb2NrKiByb290
QmxvY2ssIGNvbnN0IExheW91dFNpemUmIG9mZnNldEZyb21Sb290QmxvY2spCiB7CiAgICAgcmV0
dXJuIHJvb3RCbG9jay0+aXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKSA/IG9mZnNldEZyb21Sb290
QmxvY2sud2lkdGgoKSA6IG9mZnNldEZyb21Sb290QmxvY2suaGVpZ2h0KCk7CiB9CkBAIC0yODgw
LDcgKzI4ODEsNyBAQCBHYXBSZWN0cyBSZW5kZXJCbG9jazo6c2VsZWN0aW9uR2FwcyhSZW5kCiAg
ICAgICAgIGNsaXBPdXRQb3NpdGlvbmVkT2JqZWN0cyhwYWludEluZm8sIGZsaXBwZWRCbG9ja1Jl
Y3QubG9jYXRpb24oKSwgbV9wb3NpdGlvbmVkT2JqZWN0cy5nZXQoKSk7CiAgICAgICAgIGlmIChp
c0JvZHkoKSB8fCBpc1Jvb3QoKSkgLy8gVGhlIDxib2R5PiBtdXN0IG1ha2Ugc3VyZSB0byBleGFt
aW5lIGl0cyBjb250YWluaW5nQmxvY2sncyBwb3NpdGlvbmVkIG9iamVjdHMuCiAgICAgICAgICAg
ICBmb3IgKFJlbmRlckJsb2NrKiBjYiA9IGNvbnRhaW5pbmdCbG9jaygpOyBjYiAmJiAhY2ItPmlz
UmVuZGVyVmlldygpOyBjYiA9IGNiLT5jb250YWluaW5nQmxvY2soKSkKLSAgICAgICAgICAgICAg
ICBjbGlwT3V0UG9zaXRpb25lZE9iamVjdHMocGFpbnRJbmZvLCBJbnRQb2ludChjYi0+eCgpLCBj
Yi0+eSgpKSwgY2ItPm1fcG9zaXRpb25lZE9iamVjdHMuZ2V0KCkpOyAvLyBGSVhNRTogTm90IHJp
Z2h0IGZvciBmbGlwcGVkIHdyaXRpbmcgbW9kZXMuCisgICAgICAgICAgICAgICAgY2xpcE91dFBv
c2l0aW9uZWRPYmplY3RzKHBhaW50SW5mbywgTGF5b3V0UG9pbnQoY2ItPngoKSwgY2ItPnkoKSks
IGNiLT5tX3Bvc2l0aW9uZWRPYmplY3RzLmdldCgpKTsgLy8gRklYTUU6IE5vdCByaWdodCBmb3Ig
ZmxpcHBlZCB3cml0aW5nIG1vZGVzLgogICAgICAgICBpZiAobV9mbG9hdGluZ09iamVjdHMpIHsK
ICAgICAgICAgICAgIGNvbnN0IEZsb2F0aW5nT2JqZWN0U2V0JiBmbG9hdGluZ09iamVjdFNldCA9
IG1fZmxvYXRpbmdPYmplY3RzLT5zZXQoKTsKICAgICAgICAgICAgIEZsb2F0aW5nT2JqZWN0U2V0
SXRlcmF0b3IgZW5kID0gZmxvYXRpbmdPYmplY3RTZXQuZW5kKCk7CkBAIC0yOTU2LDcgKzI5NTcs
NyBAQCBHYXBSZWN0cyBSZW5kZXJCbG9jazo6aW5saW5lU2VsZWN0aW9uR2FwCiAgICAgICAgIAog
ICAgICAgICBMYXlvdXRSZWN0IGxvZ2ljYWxSZWN0KGN1cnItPmxvZ2ljYWxMZWZ0KCksIHNlbFRv
cCwgY3Vyci0+bG9naWNhbFdpZHRoKCksIHNlbFRvcCArIHNlbEhlaWdodCk7CiAgICAgICAgIGxv
Z2ljYWxSZWN0Lm1vdmUoaXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKSA/IG9mZnNldEZyb21Sb290
QmxvY2sgOiBvZmZzZXRGcm9tUm9vdEJsb2NrLnRyYW5zcG9zZWRTaXplKCkpOwotICAgICAgICBJ
bnRSZWN0IHBoeXNpY2FsUmVjdCA9IHJvb3RCbG9jay0+bG9naWNhbFJlY3RUb1BoeXNpY2FsUmVj
dChyb290QmxvY2tQaHlzaWNhbFBvc2l0aW9uLCBsb2dpY2FsUmVjdCk7CisgICAgICAgIExheW91
dFJlY3QgcGh5c2ljYWxSZWN0ID0gcm9vdEJsb2NrLT5sb2dpY2FsUmVjdFRvUGh5c2ljYWxSZWN0
KHJvb3RCbG9ja1BoeXNpY2FsUG9zaXRpb24sIGxvZ2ljYWxSZWN0KTsKICAgICAgICAgaWYgKCFw
YWludEluZm8gfHwgKGlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCkgJiYgcGh5c2ljYWxSZWN0Lnko
KSA8IHBhaW50SW5mby0+cmVjdC5tYXhZKCkgJiYgcGh5c2ljYWxSZWN0Lm1heFkoKSA+IHBhaW50
SW5mby0+cmVjdC55KCkpCiAgICAgICAgICAgICB8fCAoIWlzSG9yaXpvbnRhbFdyaXRpbmdNb2Rl
KCkgJiYgcGh5c2ljYWxSZWN0LngoKSA8IHBhaW50SW5mby0+cmVjdC5tYXhYKCkgJiYgcGh5c2lj
YWxSZWN0Lm1heFgoKSA+IHBhaW50SW5mby0+cmVjdC54KCkpKQogICAgICAgICAgICAgcmVzdWx0
LnVuaXRlKGN1cnItPmxpbmVTZWxlY3Rpb25HYXAocm9vdEJsb2NrLCByb290QmxvY2tQaHlzaWNh
bFBvc2l0aW9uLCBvZmZzZXRGcm9tUm9vdEJsb2NrLCBzZWxUb3AsIHNlbEhlaWdodCwgcGFpbnRJ
bmZvKSk7CkBAIC0zMzE3LDcgKzMzMTgsNyBAQCBib29sIFJlbmRlckJsb2NrOjpwb3NpdGlvbk5l
d0Zsb2F0cygpCiAgICAgICAgIH0KICAgICB9CiAKLSAgICBpbnQgbG9naWNhbFRvcCA9IGxvZ2lj
YWxIZWlnaHQoKTsKKyAgICBMYXlvdXRVbml0IGxvZ2ljYWxUb3AgPSBsb2dpY2FsSGVpZ2h0KCk7
CiAgICAgCiAgICAgLy8gVGhlIGZsb2F0IGNhbm5vdCBzdGFydCBhYm92ZSB0aGUgdG9wIHBvc2l0
aW9uIG9mIHRoZSBsYXN0IHBvc2l0aW9uZWQgZmxvYXQuCiAgICAgaWYgKGxhc3RQbGFjZWRGbG9h
dGluZ09iamVjdCkKQEAgLTMzMzQsMzQgKzMzMzUsMzQgQEAgYm9vbCBSZW5kZXJCbG9jazo6cG9z
aXRpb25OZXdGbG9hdHMoKQogICAgICAgICAgICAgY29udGludWU7CiAKICAgICAgICAgUmVuZGVy
Qm94KiBjaGlsZEJveCA9IGZsb2F0aW5nT2JqZWN0LT5yZW5kZXJlcigpOwotICAgICAgICBpbnQg
Y2hpbGRMb2dpY2FsTGVmdE1hcmdpbiA9IHN0eWxlKCktPmlzTGVmdFRvUmlnaHREaXJlY3Rpb24o
KSA/IG1hcmdpblN0YXJ0Rm9yQ2hpbGQoY2hpbGRCb3gpIDogbWFyZ2luRW5kRm9yQ2hpbGQoY2hp
bGRCb3gpOworICAgICAgICBMYXlvdXRVbml0IGNoaWxkTG9naWNhbExlZnRNYXJnaW4gPSBzdHls
ZSgpLT5pc0xlZnRUb1JpZ2h0RGlyZWN0aW9uKCkgPyBtYXJnaW5TdGFydEZvckNoaWxkKGNoaWxk
Qm94KSA6IG1hcmdpbkVuZEZvckNoaWxkKGNoaWxkQm94KTsKIAotICAgICAgICBpbnQgcmlnaHRP
ZmZzZXQgPSBsb2dpY2FsUmlnaHRPZmZzZXRGb3JDb250ZW50KCk7IC8vIENvbnN0YW50IHBhcnQg
b2YgcmlnaHQgb2Zmc2V0LgotICAgICAgICBpbnQgbGVmdE9mZnNldCA9IGxvZ2ljYWxMZWZ0T2Zm
c2V0Rm9yQ29udGVudCgpOyAvLyBDb25zdGFudCBwYXJ0IG9mIGxlZnQgb2Zmc2V0LgotICAgICAg
ICBpbnQgZmxvYXRMb2dpY2FsV2lkdGggPSBsb2dpY2FsV2lkdGhGb3JGbG9hdChmbG9hdGluZ09i
amVjdCk7IC8vIFRoZSB3aWR0aCB3ZSBsb29rIGZvci4KKyAgICAgICAgTGF5b3V0VW5pdCByaWdo
dE9mZnNldCA9IGxvZ2ljYWxSaWdodE9mZnNldEZvckNvbnRlbnQoKTsgLy8gQ29uc3RhbnQgcGFy
dCBvZiByaWdodCBvZmZzZXQuCisgICAgICAgIExheW91dFVuaXQgbGVmdE9mZnNldCA9IGxvZ2lj
YWxMZWZ0T2Zmc2V0Rm9yQ29udGVudCgpOyAvLyBDb25zdGFudCBwYXJ0IG9mIGxlZnQgb2Zmc2V0
LgorICAgICAgICBMYXlvdXRVbml0IGZsb2F0TG9naWNhbFdpZHRoID0gbG9naWNhbFdpZHRoRm9y
RmxvYXQoZmxvYXRpbmdPYmplY3QpOyAvLyBUaGUgd2lkdGggd2UgbG9vayBmb3IuCiAgICAgICAg
IGlmIChyaWdodE9mZnNldCAtIGxlZnRPZmZzZXQgPCBmbG9hdExvZ2ljYWxXaWR0aCkKICAgICAg
ICAgICAgIGZsb2F0TG9naWNhbFdpZHRoID0gcmlnaHRPZmZzZXQgLSBsZWZ0T2Zmc2V0OyAvLyBO
ZXZlciBsb29rIGZvciBtb3JlIHRoYW4gd2hhdCB3aWxsIGJlIGF2YWlsYWJsZS4KICAgICAgICAg
Ci0gICAgICAgIEludFJlY3Qgb2xkUmVjdChjaGlsZEJveC0+eCgpLCBjaGlsZEJveC0+eSgpICwg
Y2hpbGRCb3gtPndpZHRoKCksIGNoaWxkQm94LT5oZWlnaHQoKSk7CisgICAgICAgIExheW91dFJl
Y3Qgb2xkUmVjdChjaGlsZEJveC0+eCgpLCBjaGlsZEJveC0+eSgpICwgY2hpbGRCb3gtPndpZHRo
KCksIGNoaWxkQm94LT5oZWlnaHQoKSk7CiAKICAgICAgICAgaWYgKGNoaWxkQm94LT5zdHlsZSgp
LT5jbGVhcigpICYgQ0xFRlQpCiAgICAgICAgICAgICBsb2dpY2FsVG9wID0gbWF4KGxvd2VzdEZs
b2F0TG9naWNhbEJvdHRvbShGbG9hdGluZ09iamVjdDo6RmxvYXRMZWZ0KSwgbG9naWNhbFRvcCk7
CiAgICAgICAgIGlmIChjaGlsZEJveC0+c3R5bGUoKS0+Y2xlYXIoKSAmIENSSUdIVCkKICAgICAg
ICAgICAgIGxvZ2ljYWxUb3AgPSBtYXgobG93ZXN0RmxvYXRMb2dpY2FsQm90dG9tKEZsb2F0aW5n
T2JqZWN0OjpGbG9hdFJpZ2h0KSwgbG9naWNhbFRvcCk7CiAKLSAgICAgICAgaW50IGZsb2F0TG9n
aWNhbExlZnQ7CisgICAgICAgIExheW91dFVuaXQgZmxvYXRMb2dpY2FsTGVmdDsKICAgICAgICAg
aWYgKGNoaWxkQm94LT5zdHlsZSgpLT5mbG9hdGluZygpID09IExlZnRGbG9hdCkgewotICAgICAg
ICAgICAgaW50IGhlaWdodFJlbWFpbmluZ0xlZnQgPSAxOwotICAgICAgICAgICAgaW50IGhlaWdo
dFJlbWFpbmluZ1JpZ2h0ID0gMTsKKyAgICAgICAgICAgIExheW91dFVuaXQgaGVpZ2h0UmVtYWlu
aW5nTGVmdCA9IDE7CisgICAgICAgICAgICBMYXlvdXRVbml0IGhlaWdodFJlbWFpbmluZ1JpZ2h0
ID0gMTsKICAgICAgICAgICAgIGZsb2F0TG9naWNhbExlZnQgPSBsb2dpY2FsTGVmdE9mZnNldEZv
ckxpbmUobG9naWNhbFRvcCwgbGVmdE9mZnNldCwgZmFsc2UsICZoZWlnaHRSZW1haW5pbmdMZWZ0
KTsKICAgICAgICAgICAgIHdoaWxlIChsb2dpY2FsUmlnaHRPZmZzZXRGb3JMaW5lKGxvZ2ljYWxU
b3AsIHJpZ2h0T2Zmc2V0LCBmYWxzZSwgJmhlaWdodFJlbWFpbmluZ1JpZ2h0KSAtIGZsb2F0TG9n
aWNhbExlZnQgPCBmbG9hdExvZ2ljYWxXaWR0aCkgewogICAgICAgICAgICAgICAgIGxvZ2ljYWxU
b3AgKz0gbWluKGhlaWdodFJlbWFpbmluZ0xlZnQsIGhlaWdodFJlbWFpbmluZ1JpZ2h0KTsKICAg
ICAgICAgICAgICAgICBmbG9hdExvZ2ljYWxMZWZ0ID0gbG9naWNhbExlZnRPZmZzZXRGb3JMaW5l
KGxvZ2ljYWxUb3AsIGxlZnRPZmZzZXQsIGZhbHNlLCAmaGVpZ2h0UmVtYWluaW5nTGVmdCk7CiAg
ICAgICAgICAgICB9Ci0gICAgICAgICAgICBmbG9hdExvZ2ljYWxMZWZ0ID0gbWF4KDAsIGZsb2F0
TG9naWNhbExlZnQpOworICAgICAgICAgICAgZmxvYXRMb2dpY2FsTGVmdCA9IG1heDxMYXlvdXRV
bml0PigwLCBmbG9hdExvZ2ljYWxMZWZ0KTsKICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAg
IGludCBoZWlnaHRSZW1haW5pbmdMZWZ0ID0gMTsKLSAgICAgICAgICAgIGludCBoZWlnaHRSZW1h
aW5pbmdSaWdodCA9IDE7CisgICAgICAgICAgICBMYXlvdXRVbml0IGhlaWdodFJlbWFpbmluZ0xl
ZnQgPSAxOworICAgICAgICAgICAgTGF5b3V0VW5pdCBoZWlnaHRSZW1haW5pbmdSaWdodCA9IDE7
CiAgICAgICAgICAgICBmbG9hdExvZ2ljYWxMZWZ0ID0gbG9naWNhbFJpZ2h0T2Zmc2V0Rm9yTGlu
ZShsb2dpY2FsVG9wLCByaWdodE9mZnNldCwgZmFsc2UsICZoZWlnaHRSZW1haW5pbmdSaWdodCk7
CiAgICAgICAgICAgICB3aGlsZSAoZmxvYXRMb2dpY2FsTGVmdCAtIGxvZ2ljYWxMZWZ0T2Zmc2V0
Rm9yTGluZShsb2dpY2FsVG9wLCBsZWZ0T2Zmc2V0LCBmYWxzZSwgJmhlaWdodFJlbWFpbmluZ0xl
ZnQpIDwgZmxvYXRMb2dpY2FsV2lkdGgpIHsKICAgICAgICAgICAgICAgICBsb2dpY2FsVG9wICs9
IG1pbihoZWlnaHRSZW1haW5pbmdMZWZ0LCBoZWlnaHRSZW1haW5pbmdSaWdodCk7CkBAIC0zMzg1
LDcgKzMzODYsNyBAQCBib29sIFJlbmRlckJsb2NrOjpwb3NpdGlvbk5ld0Zsb2F0cygpCiAKICAg
ICAgICAgICAgIC8vIElmIHdlIGFyZSB1bnNwbGl0dGFibGUgYW5kIGRvbid0IGZpdCwgdGhlbiB3
ZSBuZWVkIHRvIG1vdmUgZG93bi4KICAgICAgICAgICAgIC8vIFdlIGluY2x1ZGUgb3VyIG1hcmdp
bnMgYXMgcGFydCBvZiB0aGUgdW5zcGxpdHRhYmxlIGFyZWEuCi0gICAgICAgICAgICBpbnQgbmV3
TG9naWNhbFRvcCA9IGFkanVzdEZvclVuc3BsaXR0YWJsZUNoaWxkKGNoaWxkQm94LCBsb2dpY2Fs
VG9wLCB0cnVlKTsKKyAgICAgICAgICAgIExheW91dFVuaXQgbmV3TG9naWNhbFRvcCA9IGFkanVz
dEZvclVuc3BsaXR0YWJsZUNoaWxkKGNoaWxkQm94LCBsb2dpY2FsVG9wLCB0cnVlKTsKICAgICAg
ICAgICAgIAogICAgICAgICAgICAgLy8gU2VlIGlmIHdlIGhhdmUgYSBwYWdpbmF0aW9uIHN0cnV0
IHRoYXQgaXMgbWFraW5nIHVzIG1vdmUgZG93biBmdXJ0aGVyLgogICAgICAgICAgICAgLy8gTm90
ZSB0aGF0IGFuIHVuc3BsaXR0YWJsZSBjaGlsZCBjYW4ndCBhbHNvIGhhdmUgYSBwYWdpbmF0aW9u
IHN0cnV0LCBzbyB0aGlzIGlzCkBAIC0zNTgzLDI5ICszNTg0LDI5IEBAIExheW91dFVuaXQgUmVu
ZGVyQmxvY2s6OmF2YWlsYWJsZUxvZ2ljYWwKICAgICByZXR1cm4gKHJlc3VsdCA8IDApID8gMCA6
IHJlc3VsdDsKIH0KIAotaW50IFJlbmRlckJsb2NrOjpuZXh0RmxvYXRMb2dpY2FsQm90dG9tQmVs
b3coaW50IGxvZ2ljYWxIZWlnaHQpIGNvbnN0CitMYXlvdXRVbml0IFJlbmRlckJsb2NrOjpuZXh0
RmxvYXRMb2dpY2FsQm90dG9tQmVsb3coTGF5b3V0VW5pdCBsb2dpY2FsSGVpZ2h0KSBjb25zdAog
ewogICAgIGlmICghbV9mbG9hdGluZ09iamVjdHMpCiAgICAgICAgIHJldHVybiAwOwogCi0gICAg
aW50IGJvdHRvbSA9IElOVF9NQVg7CisgICAgTGF5b3V0VW5pdCBib3R0b20gPSBudW1lcmljX2xp
bWl0czxMYXlvdXRVbml0Pjo6bWF4KCk7CiAgICAgY29uc3QgRmxvYXRpbmdPYmplY3RTZXQmIGZs
b2F0aW5nT2JqZWN0U2V0ID0gbV9mbG9hdGluZ09iamVjdHMtPnNldCgpOwogICAgIEZsb2F0aW5n
T2JqZWN0U2V0SXRlcmF0b3IgZW5kID0gZmxvYXRpbmdPYmplY3RTZXQuZW5kKCk7CiAgICAgZm9y
IChGbG9hdGluZ09iamVjdFNldEl0ZXJhdG9yIGl0ID0gZmxvYXRpbmdPYmplY3RTZXQuYmVnaW4o
KTsgaXQgIT0gZW5kOyArK2l0KSB7CiAgICAgICAgIEZsb2F0aW5nT2JqZWN0KiByID0gKml0Owot
ICAgICAgICBpbnQgZmxvYXRCb3R0b20gPSBsb2dpY2FsQm90dG9tRm9yRmxvYXQocik7CisgICAg
ICAgIExheW91dFVuaXQgZmxvYXRCb3R0b20gPSBsb2dpY2FsQm90dG9tRm9yRmxvYXQocik7CiAg
ICAgICAgIGlmIChmbG9hdEJvdHRvbSA+IGxvZ2ljYWxIZWlnaHQpCiAgICAgICAgICAgICBib3R0
b20gPSBtaW4oZmxvYXRCb3R0b20sIGJvdHRvbSk7CiAgICAgfQogCi0gICAgcmV0dXJuIGJvdHRv
bSA9PSBJTlRfTUFYID8gMCA6IGJvdHRvbTsKKyAgICByZXR1cm4gYm90dG9tID09IG51bWVyaWNf
bGltaXRzPExheW91dFVuaXQ+OjptYXgoKSA/IDAgOiBib3R0b207CiB9CiAKLWludCBSZW5kZXJC
bG9jazo6bG93ZXN0RmxvYXRMb2dpY2FsQm90dG9tKEZsb2F0aW5nT2JqZWN0OjpUeXBlIGZsb2F0
VHlwZSkgY29uc3QKK0xheW91dFVuaXQgUmVuZGVyQmxvY2s6Omxvd2VzdEZsb2F0TG9naWNhbEJv
dHRvbShGbG9hdGluZ09iamVjdDo6VHlwZSBmbG9hdFR5cGUpIGNvbnN0CiB7CiAgICAgaWYgKCFt
X2Zsb2F0aW5nT2JqZWN0cykKICAgICAgICAgcmV0dXJuIDA7Ci0gICAgaW50IGxvd2VzdEZsb2F0
Qm90dG9tID0gMDsKKyAgICBMYXlvdXRVbml0IGxvd2VzdEZsb2F0Qm90dG9tID0gMDsKICAgICBj
b25zdCBGbG9hdGluZ09iamVjdFNldCYgZmxvYXRpbmdPYmplY3RTZXQgPSBtX2Zsb2F0aW5nT2Jq
ZWN0cy0+c2V0KCk7CiAgICAgRmxvYXRpbmdPYmplY3RTZXRJdGVyYXRvciBlbmQgPSBmbG9hdGlu
Z09iamVjdFNldC5lbmQoKTsKICAgICBmb3IgKEZsb2F0aW5nT2JqZWN0U2V0SXRlcmF0b3IgaXQg
PSBmbG9hdGluZ09iamVjdFNldC5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpIHsKQEAgLTM2MTYs
MTQgKzM2MTcsMTQgQEAgaW50IFJlbmRlckJsb2NrOjpsb3dlc3RGbG9hdExvZ2ljYWxCb3R0bwog
ICAgIHJldHVybiBsb3dlc3RGbG9hdEJvdHRvbTsKIH0KIAotdm9pZCBSZW5kZXJCbG9jazo6bWFy
a0xpbmVzRGlydHlJbkJsb2NrUmFuZ2UoaW50IGxvZ2ljYWxUb3AsIGludCBsb2dpY2FsQm90dG9t
LCBSb290SW5saW5lQm94KiBoaWdoZXN0KQordm9pZCBSZW5kZXJCbG9jazo6bWFya0xpbmVzRGly
dHlJbkJsb2NrUmFuZ2UoTGF5b3V0VW5pdCBsb2dpY2FsVG9wLCBMYXlvdXRVbml0IGxvZ2ljYWxC
b3R0b20sIFJvb3RJbmxpbmVCb3gqIGhpZ2hlc3QpCiB7CiAgICAgaWYgKGxvZ2ljYWxUb3AgPj0g
bG9naWNhbEJvdHRvbSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgUm9vdElubGluZUJveCogbG93
ZXN0RGlydHlMaW5lID0gbGFzdFJvb3RCb3goKTsKICAgICBSb290SW5saW5lQm94KiBhZnRlckxv
d2VzdCA9IGxvd2VzdERpcnR5TGluZTsKLSAgICB3aGlsZSAobG93ZXN0RGlydHlMaW5lICYmIGxv
d2VzdERpcnR5TGluZS0+YmxvY2tMb2dpY2FsSGVpZ2h0KCkgPj0gbG9naWNhbEJvdHRvbSAmJiBs
b2dpY2FsQm90dG9tIDwgbnVtZXJpY19saW1pdHM8aW50Pjo6bWF4KCkpIHsKKyAgICB3aGlsZSAo
bG93ZXN0RGlydHlMaW5lICYmIGxvd2VzdERpcnR5TGluZS0+YmxvY2tMb2dpY2FsSGVpZ2h0KCkg
Pj0gbG9naWNhbEJvdHRvbSAmJiBsb2dpY2FsQm90dG9tIDwgbnVtZXJpY19saW1pdHM8TGF5b3V0
VW5pdD46Om1heCgpKSB7CiAgICAgICAgIGFmdGVyTG93ZXN0ID0gbG93ZXN0RGlydHlMaW5lOwog
ICAgICAgICBsb3dlc3REaXJ0eUxpbmUgPSBsb3dlc3REaXJ0eUxpbmUtPnByZXZSb290Qm94KCk7
CiAgICAgfQpAQCAtMzcxOCwxMSArMzcxOSwxMSBAQCB2b2lkIFJlbmRlckJsb2NrOjpjbGVhckZs
b2F0cyhCbG9ja0xheW91CiAgICAgfQogCiAgICAgLy8gRmlyc3QgYWRkIGluIGZsb2F0cyBmcm9t
IHRoZSBwYXJlbnQuCi0gICAgaW50IGxvZ2ljYWxUb3BPZmZzZXQgPSBsb2dpY2FsVG9wKCk7Cisg
ICAgTGF5b3V0VW5pdCBsb2dpY2FsVG9wT2Zmc2V0ID0gbG9naWNhbFRvcCgpOwogICAgIGlmIChw
YXJlbnRIYXNGbG9hdHMpCiAgICAgICAgIGFkZEludHJ1ZGluZ0Zsb2F0cyhwYXJlbnRCbG9jaywg
cGFyZW50QmxvY2stPmxvZ2ljYWxMZWZ0T2Zmc2V0Rm9yQ29udGVudCgpLCBsb2dpY2FsVG9wT2Zm
c2V0KTsKICAgICAKLSAgICBpbnQgbG9naWNhbExlZnRPZmZzZXQgPSAwOworICAgIExheW91dFVu
aXQgbG9naWNhbExlZnRPZmZzZXQgPSAwOwogICAgIGlmIChwcmV2KQogICAgICAgICBsb2dpY2Fs
VG9wT2Zmc2V0IC09IHRvUmVuZGVyQm94KHByZXYpLT5sb2dpY2FsVG9wKCk7CiAgICAgZWxzZSBp
ZiAoIXBhcmVudEhhc0Zsb2F0cykgewpAQCAtMzczNiwxNyArMzczNywxNyBAQCB2b2lkIFJlbmRl
ckJsb2NrOjpjbGVhckZsb2F0cyhCbG9ja0xheW91CiAgICAgICAgIGFkZEludHJ1ZGluZ0Zsb2F0
cyhibG9jaywgbG9naWNhbExlZnRPZmZzZXQsIGxvZ2ljYWxUb3BPZmZzZXQpOwogCiAgICAgaWYg
KGNoaWxkcmVuSW5saW5lKCkpIHsKLSAgICAgICAgaW50IGNoYW5nZUxvZ2ljYWxUb3AgPSBudW1l
cmljX2xpbWl0czxpbnQ+OjptYXgoKTsKLSAgICAgICAgaW50IGNoYW5nZUxvZ2ljYWxCb3R0b20g
PSBudW1lcmljX2xpbWl0czxpbnQ+OjptaW4oKTsKKyAgICAgICAgTGF5b3V0VW5pdCBjaGFuZ2VM
b2dpY2FsVG9wID0gbnVtZXJpY19saW1pdHM8TGF5b3V0VW5pdD46Om1heCgpOworICAgICAgICBM
YXlvdXRVbml0IGNoYW5nZUxvZ2ljYWxCb3R0b20gPSBudW1lcmljX2xpbWl0czxMYXlvdXRVbml0
Pjo6bWluKCk7CiAgICAgICAgIGlmIChtX2Zsb2F0aW5nT2JqZWN0cykgewogICAgICAgICAgICAg
Y29uc3QgRmxvYXRpbmdPYmplY3RTZXQmIGZsb2F0aW5nT2JqZWN0U2V0ID0gbV9mbG9hdGluZ09i
amVjdHMtPnNldCgpOwogICAgICAgICAgICAgRmxvYXRpbmdPYmplY3RTZXRJdGVyYXRvciBlbmQg
PSBmbG9hdGluZ09iamVjdFNldC5lbmQoKTsKICAgICAgICAgICAgIGZvciAoRmxvYXRpbmdPYmpl
Y3RTZXRJdGVyYXRvciBpdCA9IGZsb2F0aW5nT2JqZWN0U2V0LmJlZ2luKCk7IGl0ICE9IGVuZDsg
KytpdCkgewogICAgICAgICAgICAgICAgIEZsb2F0aW5nT2JqZWN0KiBmID0gKml0OwogICAgICAg
ICAgICAgICAgIEZsb2F0aW5nT2JqZWN0KiBvbGRGbG9hdGluZ09iamVjdCA9IGZsb2F0TWFwLmdl
dChmLT5tX3JlbmRlcmVyKTsKLSAgICAgICAgICAgICAgICBpbnQgbG9naWNhbEJvdHRvbSA9IGxv
Z2ljYWxCb3R0b21Gb3JGbG9hdChmKTsKKyAgICAgICAgICAgICAgICBMYXlvdXRVbml0IGxvZ2lj
YWxCb3R0b20gPSBsb2dpY2FsQm90dG9tRm9yRmxvYXQoZik7CiAgICAgICAgICAgICAgICAgaWYg
KG9sZEZsb2F0aW5nT2JqZWN0KSB7Ci0gICAgICAgICAgICAgICAgICAgIGludCBvbGRMb2dpY2Fs
Qm90dG9tID0gbG9naWNhbEJvdHRvbUZvckZsb2F0KG9sZEZsb2F0aW5nT2JqZWN0KTsKKyAgICAg
ICAgICAgICAgICAgICAgTGF5b3V0VW5pdCBvbGRMb2dpY2FsQm90dG9tID0gbG9naWNhbEJvdHRv
bUZvckZsb2F0KG9sZEZsb2F0aW5nT2JqZWN0KTsKICAgICAgICAgICAgICAgICAgICAgaWYgKGxv
Z2ljYWxXaWR0aEZvckZsb2F0KGYpICE9IGxvZ2ljYWxXaWR0aEZvckZsb2F0KG9sZEZsb2F0aW5n
T2JqZWN0KSB8fCBsb2dpY2FsTGVmdEZvckZsb2F0KGYpICE9IGxvZ2ljYWxMZWZ0Rm9yRmxvYXQo
b2xkRmxvYXRpbmdPYmplY3QpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICBjaGFuZ2VMb2dp
Y2FsVG9wID0gMDsKICAgICAgICAgICAgICAgICAgICAgICAgIGNoYW5nZUxvZ2ljYWxCb3R0b20g
PSBtYXgoY2hhbmdlTG9naWNhbEJvdHRvbSwgbWF4KGxvZ2ljYWxCb3R0b20sIG9sZExvZ2ljYWxC
b3R0b20pKTsKQEAgLTM3ODIsMzAgKzM3ODMsMzAgQEAgdm9pZCBSZW5kZXJCbG9jazo6Y2xlYXJG
bG9hdHMoQmxvY2tMYXlvdQogICAgIH0KIH0KIAotaW50IFJlbmRlckJsb2NrOjphZGRPdmVyaGFu
Z2luZ0Zsb2F0cyhSZW5kZXJCbG9jayogY2hpbGQsIGludCBsb2dpY2FsTGVmdE9mZnNldCwgaW50
IGxvZ2ljYWxUb3BPZmZzZXQsIGJvb2wgbWFrZUNoaWxkUGFpbnRPdGhlckZsb2F0cykKK0xheW91
dFVuaXQgUmVuZGVyQmxvY2s6OmFkZE92ZXJoYW5naW5nRmxvYXRzKFJlbmRlckJsb2NrKiBjaGls
ZCwgTGF5b3V0VW5pdCBsb2dpY2FsTGVmdE9mZnNldCwgTGF5b3V0VW5pdCBsb2dpY2FsVG9wT2Zm
c2V0LCBib29sIG1ha2VDaGlsZFBhaW50T3RoZXJGbG9hdHMpCiB7CiAgICAgLy8gUHJldmVudCBm
bG9hdHMgZnJvbSBiZWluZyBhZGRlZCB0byB0aGUgY2FudmFzIGJ5IHRoZSByb290IGVsZW1lbnQs
IGUuZy4sIDxodG1sPi4KICAgICBpZiAoY2hpbGQtPmhhc092ZXJmbG93Q2xpcCgpIHx8ICFjaGls
ZC0+Y29udGFpbnNGbG9hdHMoKSB8fCBjaGlsZC0+aXNSb290KCkgfHwgY2hpbGQtPmhhc0NvbHVt
bnMoKSB8fCBjaGlsZC0+aXNXcml0aW5nTW9kZVJvb3QoKSkKICAgICAgICAgcmV0dXJuIDA7CiAK
LSAgICBpbnQgY2hpbGRMb2dpY2FsVG9wID0gY2hpbGQtPmxvZ2ljYWxUb3AoKTsKLSAgICBpbnQg
bG93ZXN0RmxvYXRMb2dpY2FsQm90dG9tID0gMDsKKyAgICBMYXlvdXRVbml0IGNoaWxkTG9naWNh
bFRvcCA9IGNoaWxkLT5sb2dpY2FsVG9wKCk7CisgICAgTGF5b3V0VW5pdCBsb3dlc3RGbG9hdExv
Z2ljYWxCb3R0b20gPSAwOwogCiAgICAgLy8gRmxvYXRzIHRoYXQgd2lsbCByZW1haW4gdGhlIGNo
aWxkJ3MgcmVzcG9uc2liaWxpdHkgdG8gcGFpbnQgc2hvdWxkIGZhY3RvciBpbnRvIGl0cwogICAg
IC8vIG92ZXJmbG93LgogICAgIEZsb2F0aW5nT2JqZWN0U2V0SXRlcmF0b3IgY2hpbGRFbmQgPSBj
aGlsZC0+bV9mbG9hdGluZ09iamVjdHMtPnNldCgpLmVuZCgpOwogICAgIGZvciAoRmxvYXRpbmdP
YmplY3RTZXRJdGVyYXRvciBjaGlsZEl0ID0gY2hpbGQtPm1fZmxvYXRpbmdPYmplY3RzLT5zZXQo
KS5iZWdpbigpOyBjaGlsZEl0ICE9IGNoaWxkRW5kOyArK2NoaWxkSXQpIHsKICAgICAgICAgRmxv
YXRpbmdPYmplY3QqIHIgPSAqY2hpbGRJdDsKLSAgICAgICAgaW50IGxvZ2ljYWxCb3R0b21Gb3JG
bG9hdCA9IG1pbih0aGlzLT5sb2dpY2FsQm90dG9tRm9yRmxvYXQociksIG51bWVyaWNfbGltaXRz
PGludD46Om1heCgpIC0gY2hpbGRMb2dpY2FsVG9wKTsKLSAgICAgICAgaW50IGxvZ2ljYWxCb3R0
b20gPSBjaGlsZExvZ2ljYWxUb3AgKyBsb2dpY2FsQm90dG9tRm9yRmxvYXQ7CisgICAgICAgIExh
eW91dFVuaXQgbG9naWNhbEJvdHRvbUZvckZsb2F0ID0gbWluKHRoaXMtPmxvZ2ljYWxCb3R0b21G
b3JGbG9hdChyKSwgbnVtZXJpY19saW1pdHM8TGF5b3V0VW5pdD46Om1heCgpIC0gY2hpbGRMb2dp
Y2FsVG9wKTsKKyAgICAgICAgTGF5b3V0VW5pdCBsb2dpY2FsQm90dG9tID0gY2hpbGRMb2dpY2Fs
VG9wICsgbG9naWNhbEJvdHRvbUZvckZsb2F0OwogICAgICAgICBsb3dlc3RGbG9hdExvZ2ljYWxC
b3R0b20gPSBtYXgobG93ZXN0RmxvYXRMb2dpY2FsQm90dG9tLCBsb2dpY2FsQm90dG9tKTsKIAog
ICAgICAgICBpZiAobG9naWNhbEJvdHRvbSA+IGxvZ2ljYWxIZWlnaHQoKSkgewogICAgICAgICAg
ICAgLy8gSWYgdGhlIG9iamVjdCBpcyBub3QgaW4gdGhlIGxpc3QsIHdlIGFkZCBpdCBub3cuCiAg
ICAgICAgICAgICBpZiAoIWNvbnRhaW5zRmxvYXQoci0+bV9yZW5kZXJlcikpIHsKLSAgICAgICAg
ICAgICAgICBpbnQgbGVmdE9mZnNldCA9IGlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCkgPyBsb2dp
Y2FsTGVmdE9mZnNldCA6IGxvZ2ljYWxUb3BPZmZzZXQ7Ci0gICAgICAgICAgICAgICAgaW50IHRv
cE9mZnNldCA9IGlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCkgPyBsb2dpY2FsVG9wT2Zmc2V0IDog
bG9naWNhbExlZnRPZmZzZXQ7Ci0gICAgICAgICAgICAgICAgRmxvYXRpbmdPYmplY3QqIGZsb2F0
aW5nT2JqID0gbmV3IEZsb2F0aW5nT2JqZWN0KHItPnR5cGUoKSwgSW50UmVjdChyLT54KCkgLSBs
ZWZ0T2Zmc2V0LCByLT55KCkgLSB0b3BPZmZzZXQsIHItPndpZHRoKCksIHItPmhlaWdodCgpKSk7
CisgICAgICAgICAgICAgICAgTGF5b3V0VW5pdCBsZWZ0T2Zmc2V0ID0gaXNIb3Jpem9udGFsV3Jp
dGluZ01vZGUoKSA/IGxvZ2ljYWxMZWZ0T2Zmc2V0IDogbG9naWNhbFRvcE9mZnNldDsKKyAgICAg
ICAgICAgICAgICBMYXlvdXRVbml0IHRvcE9mZnNldCA9IGlzSG9yaXpvbnRhbFdyaXRpbmdNb2Rl
KCkgPyBsb2dpY2FsVG9wT2Zmc2V0IDogbG9naWNhbExlZnRPZmZzZXQ7CisgICAgICAgICAgICAg
ICAgRmxvYXRpbmdPYmplY3QqIGZsb2F0aW5nT2JqID0gbmV3IEZsb2F0aW5nT2JqZWN0KHItPnR5
cGUoKSwgTGF5b3V0UmVjdChyLT54KCkgLSBsZWZ0T2Zmc2V0LCByLT55KCkgLSB0b3BPZmZzZXQs
IHItPndpZHRoKCksIHItPmhlaWdodCgpKSk7CiAgICAgICAgICAgICAgICAgZmxvYXRpbmdPYmot
Pm1fcmVuZGVyZXIgPSByLT5tX3JlbmRlcmVyOwogCiAgICAgICAgICAgICAgICAgLy8gVGhlIG5l
YXJlc3QgZW5jbG9zaW5nIGxheWVyIGFsd2F5cyBwYWludHMgdGhlIGZsb2F0IChzbyB0aGF0IHpp
bmRleCBhbmQgc3RhY2tpbmcKQEAgLTM4MzksNyArMzg0MCw3IEBAIGludCBSZW5kZXJCbG9jazo6
YWRkT3ZlcmhhbmdpbmdGbG9hdHMoUmUKICAgICAgICAgICAgIC8vIFNpbmNlIHRoZSBmbG9hdCBk
b2Vzbid0IG92ZXJoYW5nLCBpdCBkaWRuJ3QgZ2V0IHB1dCBpbnRvIG91ciBsaXN0LiAgV2UgbmVl
ZCB0byBnbyBhaGVhZCBhbmQgYWRkIGl0cyBvdmVyZmxvdyBpbiB0byB0aGUKICAgICAgICAgICAg
IC8vIGNoaWxkIG5vdy4KICAgICAgICAgICAgIGlmIChyLT5tX2lzRGVzY2VuZGFudCkKLSAgICAg
ICAgICAgICAgICBjaGlsZC0+YWRkT3ZlcmZsb3dGcm9tQ2hpbGQoci0+bV9yZW5kZXJlciwgSW50
U2l6ZSh4UG9zaXRpb25Gb3JGbG9hdEluY2x1ZGluZ01hcmdpbihyKSwgeVBvc2l0aW9uRm9yRmxv
YXRJbmNsdWRpbmdNYXJnaW4ocikpKTsKKyAgICAgICAgICAgICAgICBjaGlsZC0+YWRkT3ZlcmZs
b3dGcm9tQ2hpbGQoci0+bV9yZW5kZXJlciwgTGF5b3V0U2l6ZSh4UG9zaXRpb25Gb3JGbG9hdElu
Y2x1ZGluZ01hcmdpbihyKSwgeVBvc2l0aW9uRm9yRmxvYXRJbmNsdWRpbmdNYXJnaW4ocikpKTsK
ICAgICAgICAgfQogICAgIH0KICAgICByZXR1cm4gbG93ZXN0RmxvYXRMb2dpY2FsQm90dG9tOwpA
QCAtMzg1OCw3ICszODU5LDcgQEAgYm9vbCBSZW5kZXJCbG9jazo6aGFzT3ZlcmhhbmdpbmdGbG9h
dChSZQogICAgIHJldHVybiBsb2dpY2FsQm90dG9tRm9yRmxvYXQoKml0KSA+IGxvZ2ljYWxIZWln
aHQoKTsKIH0KIAotdm9pZCBSZW5kZXJCbG9jazo6YWRkSW50cnVkaW5nRmxvYXRzKFJlbmRlckJs
b2NrKiBwcmV2LCBpbnQgbG9naWNhbExlZnRPZmZzZXQsIGludCBsb2dpY2FsVG9wT2Zmc2V0KQor
dm9pZCBSZW5kZXJCbG9jazo6YWRkSW50cnVkaW5nRmxvYXRzKFJlbmRlckJsb2NrKiBwcmV2LCBM
YXlvdXRVbml0IGxvZ2ljYWxMZWZ0T2Zmc2V0LCBMYXlvdXRVbml0IGxvZ2ljYWxUb3BPZmZzZXQp
CiB7CiAgICAgLy8gSWYgdGhlIHBhcmVudCBvciBwcmV2aW91cyBzaWJsaW5nIGRvZXNuJ3QgaGF2
ZSBhbnkgZmxvYXRzIHRvIGFkZCwgZG9uJ3QgYm90aGVyLgogICAgIGlmICghcHJldi0+bV9mbG9h
dGluZ09iamVjdHMpCkBAIC0zODcyLDEwICszODczLDEwIEBAIHZvaWQgUmVuZGVyQmxvY2s6OmFk
ZEludHJ1ZGluZ0Zsb2F0cyhSZW4KICAgICAgICAgRmxvYXRpbmdPYmplY3QqIHIgPSAqcHJldkl0
OwogICAgICAgICBpZiAobG9naWNhbEJvdHRvbUZvckZsb2F0KHIpID4gbG9naWNhbFRvcE9mZnNl
dCkgewogICAgICAgICAgICAgaWYgKCFtX2Zsb2F0aW5nT2JqZWN0cyB8fCAhbV9mbG9hdGluZ09i
amVjdHMtPnNldCgpLmNvbnRhaW5zKHIpKSB7Ci0gICAgICAgICAgICAgICAgaW50IGxlZnRPZmZz
ZXQgPSBpc0hvcml6b250YWxXcml0aW5nTW9kZSgpID8gbG9naWNhbExlZnRPZmZzZXQgOiBsb2dp
Y2FsVG9wT2Zmc2V0OwotICAgICAgICAgICAgICAgIGludCB0b3BPZmZzZXQgPSBpc0hvcml6b250
YWxXcml0aW5nTW9kZSgpID8gbG9naWNhbFRvcE9mZnNldCA6IGxvZ2ljYWxMZWZ0T2Zmc2V0Owor
ICAgICAgICAgICAgICAgIExheW91dFVuaXQgbGVmdE9mZnNldCA9IGlzSG9yaXpvbnRhbFdyaXRp
bmdNb2RlKCkgPyBsb2dpY2FsTGVmdE9mZnNldCA6IGxvZ2ljYWxUb3BPZmZzZXQ7CisgICAgICAg
ICAgICAgICAgTGF5b3V0VW5pdCB0b3BPZmZzZXQgPSBpc0hvcml6b250YWxXcml0aW5nTW9kZSgp
ID8gbG9naWNhbFRvcE9mZnNldCA6IGxvZ2ljYWxMZWZ0T2Zmc2V0OwogICAgICAgICAgICAgICAg
IAotICAgICAgICAgICAgICAgIEZsb2F0aW5nT2JqZWN0KiBmbG9hdGluZ09iaiA9IG5ldyBGbG9h
dGluZ09iamVjdChyLT50eXBlKCksIEludFJlY3Qoci0+eCgpIC0gbGVmdE9mZnNldCwgci0+eSgp
IC0gdG9wT2Zmc2V0LCByLT53aWR0aCgpLCByLT5oZWlnaHQoKSkpOworICAgICAgICAgICAgICAg
IEZsb2F0aW5nT2JqZWN0KiBmbG9hdGluZ09iaiA9IG5ldyBGbG9hdGluZ09iamVjdChyLT50eXBl
KCksIExheW91dFJlY3Qoci0+eCgpIC0gbGVmdE9mZnNldCwgci0+eSgpIC0gdG9wT2Zmc2V0LCBy
LT53aWR0aCgpLCByLT5oZWlnaHQoKSkpOwogCiAgICAgICAgICAgICAgICAgLy8gQXBwbHlpbmcg
dGhlIGNoaWxkJ3MgbWFyZ2luIG1ha2VzIG5vIHNlbnNlIGluIHRoZSBjYXNlIHdoZXJlIHRoZSBj
aGlsZCB3YXMgcGFzc2VkIGluLgogICAgICAgICAgICAgICAgIC8vIHNpbmNlIHRoaXMgbWFyZ2lu
IHdhcyBhZGRlZCBhbHJlYWR5IHRocm91Z2ggdGhlIG1vZGlmaWNhdGlvbiBvZiB0aGUgfGxvZ2lj
YWxMZWZ0T2Zmc2V0fCB2YXJpYWJsZQpAQCAtMzk1OCw3ICszOTU5LDcgQEAgdm9pZCBSZW5kZXJC
bG9jazo6bWFya1NpYmxpbmdzV2l0aEZsb2F0cwogICAgIH0KIH0KIAotaW50IFJlbmRlckJsb2Nr
OjpnZXRDbGVhckRlbHRhKFJlbmRlckJveCogY2hpbGQsIGludCB5UG9zKQorTGF5b3V0VW5pdCBS
ZW5kZXJCbG9jazo6Z2V0Q2xlYXJEZWx0YShSZW5kZXJCb3gqIGNoaWxkLCBMYXlvdXRVbml0IHlQ
b3MpCiB7CiAgICAgLy8gVGhlcmUgaXMgbm8gbmVlZCB0byBjb21wdXRlIGNsZWFyYW5jZSBpZiB3
ZSBoYXZlIG5vIGZsb2F0cy4KICAgICBpZiAoIWNvbnRhaW5zRmxvYXRzKCkpCkBAIC0zOTY2LDcg
KzM5NjcsNyBAQCBpbnQgUmVuZGVyQmxvY2s6OmdldENsZWFyRGVsdGEoUmVuZGVyQm94CiAgICAg
CiAgICAgLy8gQXQgbGVhc3Qgb25lIGZsb2F0IGlzIHByZXNlbnQuICBXZSBuZWVkIHRvIHBlcmZv
cm0gdGhlIGNsZWFyYW5jZSBjb21wdXRhdGlvbi4KICAgICBib29sIGNsZWFyU2V0ID0gY2hpbGQt
PnN0eWxlKCktPmNsZWFyKCkgIT0gQ05PTkU7Ci0gICAgaW50IGJvdHRvbSA9IDA7CisgICAgTGF5
b3V0VW5pdCBib3R0b20gPSAwOwogICAgIHN3aXRjaCAoY2hpbGQtPnN0eWxlKCktPmNsZWFyKCkp
IHsKICAgICAgICAgY2FzZSBDTk9ORToKICAgICAgICAgICAgIGJyZWFrOwpAQCAtMzk4MiwyMiAr
Mzk4MywyNiBAQCBpbnQgUmVuZGVyQmxvY2s6OmdldENsZWFyRGVsdGEoUmVuZGVyQm94CiAgICAg
fQogCiAgICAgLy8gV2UgYWxzbyBjbGVhciBmbG9hdHMgaWYgd2UgYXJlIHRvbyBiaWcgdG8gc2l0
IG9uIHRoZSBzYW1lIGxpbmUgYXMgYSBmbG9hdCAoYW5kIHdpc2ggdG8gYXZvaWQgZmxvYXRzIGJ5
IGRlZmF1bHQpLgotICAgIGludCByZXN1bHQgPSBjbGVhclNldCA/IG1heCgwLCBib3R0b20gLSB5
UG9zKSA6IDA7CisgICAgTGF5b3V0VW5pdCByZXN1bHQgPSBjbGVhclNldCA/IG1heDxMYXlvdXRV
bml0PigwLCBib3R0b20gLSB5UG9zKSA6IDA7CiAgICAgaWYgKCFyZXN1bHQgJiYgY2hpbGQtPmF2
b2lkc0Zsb2F0cygpKSB7Ci0gICAgICAgIGludCB5ID0geVBvczsKKyAgICAgICAgTGF5b3V0VW5p
dCB5ID0geVBvczsKICAgICAgICAgd2hpbGUgKHRydWUpIHsKLSAgICAgICAgICAgIGludCB3aWR0
aEF0WSA9IGF2YWlsYWJsZUxvZ2ljYWxXaWR0aEZvckxpbmUoeSwgZmFsc2UpOworICAgICAgICAg
ICAgTGF5b3V0VW5pdCB3aWR0aEF0WSA9IGF2YWlsYWJsZUxvZ2ljYWxXaWR0aEZvckxpbmUoeSwg
ZmFsc2UpOworICAgICAgICAgICAgLy8gRklYTUU6IENoYW5nZSB0byB1c2Ugcm91Z2hseUVxdWFs
cyB3aGVuIHdlIG1vdmUgdG8gZmxvYXQuCisgICAgICAgICAgICAvLyBTZWUgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTY2MTQ4CiAgICAgICAgICAgICBpZiAod2lkdGhB
dFkgPT0gYXZhaWxhYmxlTG9naWNhbFdpZHRoKCkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIHkg
LSB5UG9zOwogCi0gICAgICAgICAgICBpbnQgb2xkQ2hpbGRZID0gY2hpbGQtPnkoKTsKLSAgICAg
ICAgICAgIGludCBvbGRDaGlsZFdpZHRoID0gY2hpbGQtPndpZHRoKCk7CisgICAgICAgICAgICBM
YXlvdXRVbml0IG9sZENoaWxkWSA9IGNoaWxkLT55KCk7CisgICAgICAgICAgICBMYXlvdXRVbml0
IG9sZENoaWxkV2lkdGggPSBjaGlsZC0+d2lkdGgoKTsKICAgICAgICAgICAgIGNoaWxkLT5zZXRZ
KHkpOwogICAgICAgICAgICAgY2hpbGQtPmNvbXB1dGVMb2dpY2FsV2lkdGgoKTsKLSAgICAgICAg
ICAgIGludCBjaGlsZFdpZHRoQXRZID0gY2hpbGQtPndpZHRoKCk7CisgICAgICAgICAgICBMYXlv
dXRVbml0IGNoaWxkV2lkdGhBdFkgPSBjaGlsZC0+d2lkdGgoKTsKICAgICAgICAgICAgIGNoaWxk
LT5zZXRZKG9sZENoaWxkWSk7CiAgICAgICAgICAgICBjaGlsZC0+c2V0V2lkdGgob2xkQ2hpbGRX
aWR0aCk7CiAKKyAgICAgICAgICAgIC8vIEZJWE1FOiBDaGFuZ2UgdG8gdXNlIHJvdWdobHlFcXVh
bHMgd2hlbiB3ZSBtb3ZlIHRvIGZsb2F0LgorICAgICAgICAgICAgLy8gU2VlIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD02NjE0OAogICAgICAgICAgICAgaWYgKGNoaWxk
V2lkdGhBdFkgPD0gd2lkdGhBdFkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIHkgLSB5UG9zOwog
CkBAIC00MjY0LDcgKzQyNjksNyBAQCBWaXNpYmxlUG9zaXRpb24gUmVuZGVyQmxvY2s6OnBvc2l0
aW9uRm9yCiAgICAgICAgIH0KIAogICAgICAgICAvLyBwYXNzIHRoZSBib3ggYSB0b3AgcG9zaXRp
b24gdGhhdCBpcyBpbnNpZGUgaXQKLSAgICAgICAgSW50UG9pbnQgcG9pbnQocG9pbnRJbkxvZ2lj
YWxDb250ZW50cy54KCksIGNsb3Nlc3RCb3gtPmxvZ2ljYWxUb3AoKSk7CisgICAgICAgIExheW91
dFBvaW50IHBvaW50KHBvaW50SW5Mb2dpY2FsQ29udGVudHMueCgpLCBjbG9zZXN0Qm94LT5sb2dp
Y2FsVG9wKCkpOwogICAgICAgICBpZiAoIWlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCkpCiAgICAg
ICAgICAgICBwb2ludCA9IHBvaW50LnRyYW5zcG9zZWRQb2ludCgpOwogICAgICAgICBpZiAoY2xv
c2VzdEJveC0+cmVuZGVyZXIoKS0+aXNSZXBsYWNlZCgpKQpAQCAtNDMzMyw3ICs0MzM4LDcgQEAg
VmlzaWJsZVBvc2l0aW9uIFJlbmRlckJsb2NrOjpwb3NpdGlvbkZvcgogICAgIHJldHVybiBSZW5k
ZXJCb3g6OnBvc2l0aW9uRm9yUG9pbnQocG9pbnQpOwogfQogCi12b2lkIFJlbmRlckJsb2NrOjpv
ZmZzZXRGb3JDb250ZW50cyhJbnRQb2ludCYgb2Zmc2V0KSBjb25zdAordm9pZCBSZW5kZXJCbG9j
azo6b2Zmc2V0Rm9yQ29udGVudHMoTGF5b3V0UG9pbnQmIG9mZnNldCkgY29uc3QKIHsKICAgICBp
ZiAoaGFzT3ZlcmZsb3dDbGlwKCkpCiAgICAgICAgIG9mZnNldCArPSBsYXllcigpLT5zY3JvbGxl
ZENvbnRlbnRPZmZzZXQoKTsKQEAgLTQzODcsNyArNDM5Miw3IEBAIHZvaWQgUmVuZGVyQmxvY2s6
OmNhbGNDb2x1bW5XaWR0aCgpCiAgICAgc2V0RGVzaXJlZENvbHVtbkNvdW50QW5kV2lkdGgoZGVz
aXJlZENvbHVtbkNvdW50LCBkZXNpcmVkQ29sdW1uV2lkdGgpOwogfQogCi12b2lkIFJlbmRlckJs
b2NrOjpzZXREZXNpcmVkQ29sdW1uQ291bnRBbmRXaWR0aChpbnQgY291bnQsIGludCB3aWR0aCkK
K3ZvaWQgUmVuZGVyQmxvY2s6OnNldERlc2lyZWRDb2x1bW5Db3VudEFuZFdpZHRoKGludCBjb3Vu
dCwgTGF5b3V0VW5pdCB3aWR0aCkKIHsKICAgICBib29sIGRlc3Ryb3lDb2x1bW5zID0gIWZpcnN0
Q2hpbGQoKQogICAgICAgICAgICAgICAgICAgICAgICAgICB8fCAoY291bnQgPT0gMSAmJiBzdHls
ZSgpLT5oYXNBdXRvQ29sdW1uV2lkdGgoKSkKQEAgLTQ0NjksMTkgKzQ0NzQsMTkgQEAgYm9vbCBS
ZW5kZXJCbG9jazo6bGF5b3V0Q29sdW1ucyhib29sIGhhcwogICAgIENvbHVtbkluZm8qIGNvbElu
Zm8gPSBjb2x1bW5JbmZvKCk7CiAgICAgaW50IGRlc2lyZWRDb2x1bW5Db3VudCA9IGNvbEluZm8t
PmRlc2lyZWRDb2x1bW5Db3VudCgpOwogICAgIGlmICghaGFzU3BlY2lmaWVkUGFnZUxvZ2ljYWxI
ZWlnaHQpIHsKLSAgICAgICAgaW50IGNvbHVtbkhlaWdodCA9IHBhZ2VMb2dpY2FsSGVpZ2h0Owor
ICAgICAgICBMYXlvdXRVbml0IGNvbHVtbkhlaWdodCA9IHBhZ2VMb2dpY2FsSGVpZ2h0OwogICAg
ICAgICBpbnQgbWluQ29sdW1uQ291bnQgPSBjb2xJbmZvLT5mb3JjZWRCcmVha3MoKSArIDE7CiAg
ICAgICAgIGlmIChtaW5Db2x1bW5Db3VudCA+PSBkZXNpcmVkQ29sdW1uQ291bnQpIHsKICAgICAg
ICAgICAgIC8vIFRoZSBmb3JjZWQgcGFnZSBicmVha3MgYXJlIGluIGNvbnRyb2wgb2YgdGhlIGJh
bGFuY2luZy4gIEp1c3Qgc2V0IHRoZSBjb2x1bW4gaGVpZ2h0IHRvIHRoZQogICAgICAgICAgICAg
Ly8gbWF4aW11bSBwYWdlIGJyZWFrIGRpc3RhbmNlLgogICAgICAgICAgICAgaWYgKCFwYWdlTG9n
aWNhbEhlaWdodCkgewotICAgICAgICAgICAgICAgIGludCBkaXN0YW5jZUJldHdlZW5CcmVha3Mg
PSBtYXgoY29sSW5mby0+bWF4aW11bURpc3RhbmNlQmV0d2VlbkZvcmNlZEJyZWFrcygpLAorICAg
ICAgICAgICAgICAgIExheW91dFVuaXQgZGlzdGFuY2VCZXR3ZWVuQnJlYWtzID0gbWF4KGNvbElu
Zm8tPm1heGltdW1EaXN0YW5jZUJldHdlZW5Gb3JjZWRCcmVha3MoKSwKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZpZXcoKS0+bGF5b3V0U3RhdGUoKS0+
cGFnZUxvZ2ljYWxPZmZzZXQoYm9yZGVyQmVmb3JlKCkgKyBwYWRkaW5nQmVmb3JlKCkgKyBjb250
ZW50TG9naWNhbEhlaWdodCgpKSAtIGNvbEluZm8tPmZvcmNlZEJyZWFrT2Zmc2V0KCkpOwogICAg
ICAgICAgICAgICAgIGNvbHVtbkhlaWdodCA9IG1heChjb2xJbmZvLT5taW5pbXVtQ29sdW1uSGVp
Z2h0KCksIGRpc3RhbmNlQmV0d2VlbkJyZWFrcyk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0g
ZWxzZSBpZiAoY29udGVudExvZ2ljYWxIZWlnaHQoKSA+IHBhZ2VMb2dpY2FsSGVpZ2h0ICogZGVz
aXJlZENvbHVtbkNvdW50KSB7CiAgICAgICAgICAgICAvLyBOb3cgdGhhdCB3ZSBrbm93IHRoZSBp
bnRyaW5zaWMgaGVpZ2h0IG9mIHRoZSBjb2x1bW5zLCB3ZSBoYXZlIHRvIHJlYmFsYW5jZSB0aGVt
LgotICAgICAgICAgICAgY29sdW1uSGVpZ2h0ID0gbWF4KGNvbEluZm8tPm1pbmltdW1Db2x1bW5I
ZWlnaHQoKSwgKGludCljZWlsZigoZmxvYXQpY29udGVudExvZ2ljYWxIZWlnaHQoKSAvIGRlc2ly
ZWRDb2x1bW5Db3VudCkpOworICAgICAgICAgICAgY29sdW1uSGVpZ2h0ID0gbWF4KGNvbEluZm8t
Pm1pbmltdW1Db2x1bW5IZWlnaHQoKSwgY2VpbGVkTGF5b3V0VW5pdCgoZmxvYXQpY29udGVudExv
Z2ljYWxIZWlnaHQoKSAvIGRlc2lyZWRDb2x1bW5Db3VudCkpOwogICAgICAgICB9CiAgICAgICAg
IAogICAgICAgICBpZiAoY29sdW1uSGVpZ2h0ICYmIGNvbHVtbkhlaWdodCAhPSBwYWdlTG9naWNh
bEhlaWdodCkgewpAQCAtNDUwMyw3ICs0NTA4LDcgQEAgYm9vbCBSZW5kZXJCbG9jazo6bGF5b3V0
Q29sdW1ucyhib29sIGhhcwogICAgIHJldHVybiBmYWxzZTsKIH0KIAotdm9pZCBSZW5kZXJCbG9j
azo6YWRqdXN0UG9pbnRUb0NvbHVtbkNvbnRlbnRzKEludFBvaW50JiBwb2ludCkgY29uc3QKK3Zv
aWQgUmVuZGVyQmxvY2s6OmFkanVzdFBvaW50VG9Db2x1bW5Db250ZW50cyhMYXlvdXRQb2ludCYg
cG9pbnQpIGNvbnN0CiB7CiAgICAgLy8gSnVzdCBiYWlsIGlmIHdlIGhhdmUgbm8gY29sdW1ucy4K
ICAgICBpZiAoIWhhc0NvbHVtbnMoKSkKQEAgLTQ1MTQsMTUgKzQ1MTksMTUgQEAgdm9pZCBSZW5k
ZXJCbG9jazo6YWRqdXN0UG9pbnRUb0NvbHVtbkNvbgogICAgICAgICByZXR1cm47CiAKICAgICAv
LyBEZXRlcm1pbmUgd2hpY2ggY29sdW1ucyB3ZSBpbnRlcnNlY3QuCi0gICAgaW50IGNvbEdhcCA9
IGNvbHVtbkdhcCgpOwotICAgIGludCBoYWxmQ29sR2FwID0gY29sR2FwIC8gMjsKLSAgICBJbnRQ
b2ludCBjb2x1bW5Qb2ludChjb2x1bW5SZWN0QXQoY29sSW5mbywgMCkubG9jYXRpb24oKSk7Ci0g
ICAgaW50IGxvZ2ljYWxPZmZzZXQgPSAwOworICAgIExheW91dFVuaXQgY29sR2FwID0gY29sdW1u
R2FwKCk7CisgICAgTGF5b3V0VW5pdCBoYWxmQ29sR2FwID0gY29sR2FwIC8gMjsKKyAgICBMYXlv
dXRQb2ludCBjb2x1bW5Qb2ludChjb2x1bW5SZWN0QXQoY29sSW5mbywgMCkubG9jYXRpb24oKSk7
CisgICAgTGF5b3V0VW5pdCBsb2dpY2FsT2Zmc2V0ID0gMDsKICAgICBmb3IgKHVuc2lnbmVkIGkg
PSAwOyBpIDwgY29sSW5mby0+Y29sdW1uQ291bnQoKTsgaSsrKSB7CiAgICAgICAgIC8vIEFkZCBp
biBoYWxmIHRoZSBjb2x1bW4gZ2FwIHRvIHRoZSBsZWZ0IGFuZCByaWdodCBvZiB0aGUgcmVjdC4K
LSAgICAgICAgSW50UmVjdCBjb2xSZWN0ID0gY29sdW1uUmVjdEF0KGNvbEluZm8sIGkpOworICAg
ICAgICBMYXlvdXRSZWN0IGNvbFJlY3QgPSBjb2x1bW5SZWN0QXQoY29sSW5mbywgaSk7CiAgICAg
ICAgIGlmIChpc0hvcml6b250YWxXcml0aW5nTW9kZSgpKSB7Ci0gICAgICAgICAgICBJbnRSZWN0
IGdhcEFuZENvbHVtblJlY3QoY29sUmVjdC54KCkgLSBoYWxmQ29sR2FwLCBjb2xSZWN0LnkoKSwg
Y29sUmVjdC53aWR0aCgpICsgY29sR2FwLCBjb2xSZWN0LmhlaWdodCgpKTsKKyAgICAgICAgICAg
IExheW91dFJlY3QgZ2FwQW5kQ29sdW1uUmVjdChjb2xSZWN0LngoKSAtIGhhbGZDb2xHYXAsIGNv
bFJlY3QueSgpLCBjb2xSZWN0LndpZHRoKCkgKyBjb2xHYXAsIGNvbFJlY3QuaGVpZ2h0KCkpOwog
ICAgICAgICAgICAgaWYgKHBvaW50LngoKSA+PSBnYXBBbmRDb2x1bW5SZWN0LngoKSAmJiBwb2lu
dC54KCkgPCBnYXBBbmRDb2x1bW5SZWN0Lm1heFgoKSkgewogICAgICAgICAgICAgICAgIC8vIEZJ
WE1FOiBUaGUgY2xhbXBpbmcgdGhhdCBmb2xsb3dzIGlzIG5vdCBjb21wbGV0ZWx5IHJpZ2h0IGZv
ciByaWdodC10by1sZWZ0CiAgICAgICAgICAgICAgICAgLy8gY29udGVudC4KQEAgLTQ1NDQsNyAr
NDU0OSw3IEBAIHZvaWQgUmVuZGVyQmxvY2s6OmFkanVzdFBvaW50VG9Db2x1bW5Db24KICAgICAg
ICAgICAgIC8vIE1vdmUgdG8gdGhlIG5leHQgcG9zaXRpb24uCiAgICAgICAgICAgICBsb2dpY2Fs
T2Zmc2V0ICs9IGNvbFJlY3QuaGVpZ2h0KCk7CiAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAg
ICBJbnRSZWN0IGdhcEFuZENvbHVtblJlY3QoY29sUmVjdC54KCksIGNvbFJlY3QueSgpIC0gaGFs
ZkNvbEdhcCwgY29sUmVjdC53aWR0aCgpLCBjb2xSZWN0LmhlaWdodCgpICsgY29sR2FwKTsKKyAg
ICAgICAgICAgIExheW91dFJlY3QgZ2FwQW5kQ29sdW1uUmVjdChjb2xSZWN0LngoKSwgY29sUmVj
dC55KCkgLSBoYWxmQ29sR2FwLCBjb2xSZWN0LndpZHRoKCksIGNvbFJlY3QuaGVpZ2h0KCkgKyBj
b2xHYXApOwogICAgICAgICAgICAgaWYgKHBvaW50LnkoKSA+PSBnYXBBbmRDb2x1bW5SZWN0Lnko
KSAmJiBwb2ludC55KCkgPCBnYXBBbmRDb2x1bW5SZWN0Lm1heFkoKSkgewogICAgICAgICAgICAg
ICAgIC8vIEZJWE1FOiBUaGUgY2xhbXBpbmcgdGhhdCBmb2xsb3dzIGlzIG5vdCBjb21wbGV0ZWx5
IHJpZ2h0IGZvciByaWdodC10by1sZWZ0CiAgICAgICAgICAgICAgICAgLy8gY29udGVudC4KQEAg
LTUyMDUsOCArNTIxMCw4IEBAIHZvaWQgUmVuZGVyQmxvY2s6OmNvbXB1dGVCbG9ja1ByZWZlcnJl
ZEwKICAgICB9CiAKICAgICAvLyBBbHdheXMgbWFrZSBzdXJlIHRoZXNlIHZhbHVlcyBhcmUgbm9u
LW5lZ2F0aXZlLgotICAgIG1fbWluUHJlZmVycmVkTG9naWNhbFdpZHRoID0gbWF4KDAsIG1fbWlu
UHJlZmVycmVkTG9naWNhbFdpZHRoKTsKLSAgICBtX21heFByZWZlcnJlZExvZ2ljYWxXaWR0aCA9
IG1heCgwLCBtX21heFByZWZlcnJlZExvZ2ljYWxXaWR0aCk7CisgICAgbV9taW5QcmVmZXJyZWRM
b2dpY2FsV2lkdGggPSBtYXg8TGF5b3V0VW5pdD4oMCwgbV9taW5QcmVmZXJyZWRMb2dpY2FsV2lk
dGgpOworICAgIG1fbWF4UHJlZmVycmVkTG9naWNhbFdpZHRoID0gbWF4PExheW91dFVuaXQ+KDAs
IG1fbWF4UHJlZmVycmVkTG9naWNhbFdpZHRoKTsKIAogICAgIG1fbWF4UHJlZmVycmVkTG9naWNh
bFdpZHRoID0gbWF4KGZsb2F0TGVmdFdpZHRoICsgZmxvYXRSaWdodFdpZHRoLCBtX21heFByZWZl
cnJlZExvZ2ljYWxXaWR0aCk7CiB9CkBAIC01MjI1LDcgKzUyMzAsNyBAQCBib29sIFJlbmRlckJs
b2NrOjpoYXNMaW5lSWZFbXB0eSgpIGNvbnN0CiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi1pbnQg
UmVuZGVyQmxvY2s6OmxpbmVIZWlnaHQoYm9vbCBmaXJzdExpbmUsIExpbmVEaXJlY3Rpb25Nb2Rl
IGRpcmVjdGlvbiwgTGluZVBvc2l0aW9uTW9kZSBsaW5lUG9zaXRpb25Nb2RlKSBjb25zdAorTGF5
b3V0VW5pdCBSZW5kZXJCbG9jazo6bGluZUhlaWdodChib29sIGZpcnN0TGluZSwgTGluZURpcmVj
dGlvbk1vZGUgZGlyZWN0aW9uLCBMaW5lUG9zaXRpb25Nb2RlIGxpbmVQb3NpdGlvbk1vZGUpIGNv
bnN0CiB7CiAgICAgLy8gSW5saW5lIGJsb2NrcyBhcmUgcmVwbGFjZWQgZWxlbWVudHMuIE90aGVy
d2lzZSwganVzdCBwYXNzIG9mZiB0bwogICAgIC8vIHRoZSBiYXNlIGNsYXNzLiAgSWYgd2UncmUg
YmVpbmcgcXVlcmllZCBhcyB0aG91Z2ggd2UncmUgdGhlIHJvb3QgbGluZQpAQCAtNTI0Niw3ICs1
MjUxLDcgQEAgaW50IFJlbmRlckJsb2NrOjpsaW5lSGVpZ2h0KGJvb2wgZmlyc3RMaQogICAgIHJl
dHVybiBtX2xpbmVIZWlnaHQ7CiB9CiAKLWludCBSZW5kZXJCbG9jazo6YmFzZWxpbmVQb3NpdGlv
bihGb250QmFzZWxpbmUgYmFzZWxpbmVUeXBlLCBib29sIGZpcnN0TGluZSwgTGluZURpcmVjdGlv
bk1vZGUgZGlyZWN0aW9uLCBMaW5lUG9zaXRpb25Nb2RlIGxpbmVQb3NpdGlvbk1vZGUpIGNvbnN0
CitMYXlvdXRVbml0IFJlbmRlckJsb2NrOjpiYXNlbGluZVBvc2l0aW9uKEZvbnRCYXNlbGluZSBi
YXNlbGluZVR5cGUsIGJvb2wgZmlyc3RMaW5lLCBMaW5lRGlyZWN0aW9uTW9kZSBkaXJlY3Rpb24s
IExpbmVQb3NpdGlvbk1vZGUgbGluZVBvc2l0aW9uTW9kZSkgY29uc3QKIHsKICAgICAvLyBJbmxp
bmUgYmxvY2tzIGFyZSByZXBsYWNlZCBlbGVtZW50cy4gT3RoZXJ3aXNlLCBqdXN0IHBhc3Mgb2Zm
IHRvCiAgICAgLy8gdGhlIGJhc2UgY2xhc3MuICBJZiB3ZSdyZSBiZWluZyBxdWVyaWVkIGFzIHRo
b3VnaCB3ZSdyZSB0aGUgcm9vdCBsaW5lCkBAIC01MjgyLDcgKzUyODcsNyBAQCBpbnQgUmVuZGVy
QmxvY2s6OmJhc2VsaW5lUG9zaXRpb24oRm9udEJhCiAgICAgcmV0dXJuIGZvbnRNZXRyaWNzLmFz
Y2VudChiYXNlbGluZVR5cGUpICsgKGxpbmVIZWlnaHQoZmlyc3RMaW5lLCBkaXJlY3Rpb24sIGxp
bmVQb3NpdGlvbk1vZGUpIC0gZm9udE1ldHJpY3MuaGVpZ2h0KCkpIC8gMjsKIH0KIAotaW50IFJl
bmRlckJsb2NrOjpmaXJzdExpbmVCb3hCYXNlbGluZSgpIGNvbnN0CitMYXlvdXRVbml0IFJlbmRl
ckJsb2NrOjpmaXJzdExpbmVCb3hCYXNlbGluZSgpIGNvbnN0CiB7CiAgICAgaWYgKCFpc0Jsb2Nr
RmxvdygpIHx8IChpc1dyaXRpbmdNb2RlUm9vdCgpICYmICFpc1J1YnlSdW4oKSkpCiAgICAgICAg
IHJldHVybiAtMTsKQEAgLTUyOTYsNyArNTMwMSw3IEBAIGludCBSZW5kZXJCbG9jazo6Zmlyc3RM
aW5lQm94QmFzZWxpbmUoKSAKICAgICBlbHNlIHsKICAgICAgICAgZm9yIChSZW5kZXJCb3gqIGN1
cnIgPSBmaXJzdENoaWxkQm94KCk7IGN1cnI7IGN1cnIgPSBjdXJyLT5uZXh0U2libGluZ0JveCgp
KSB7CiAgICAgICAgICAgICBpZiAoIWN1cnItPmlzRmxvYXRpbmdPclBvc2l0aW9uZWQoKSkgewot
ICAgICAgICAgICAgICAgIGludCByZXN1bHQgPSBjdXJyLT5maXJzdExpbmVCb3hCYXNlbGluZSgp
OworICAgICAgICAgICAgICAgIExheW91dFVuaXQgcmVzdWx0ID0gY3Vyci0+Zmlyc3RMaW5lQm94
QmFzZWxpbmUoKTsKICAgICAgICAgICAgICAgICBpZiAocmVzdWx0ICE9IC0xKQogICAgICAgICAg
ICAgICAgICAgICByZXR1cm4gY3Vyci0+bG9naWNhbFRvcCgpICsgcmVzdWx0OyAvLyBUcmFuc2xh
dGUgdG8gb3VyIGNvb3JkaW5hdGUgc3BhY2UuCiAgICAgICAgICAgICB9CkBAIC01MzA2LDcgKzUz
MTEsNyBAQCBpbnQgUmVuZGVyQmxvY2s6OmZpcnN0TGluZUJveEJhc2VsaW5lKCkgCiAgICAgcmV0
dXJuIC0xOwogfQogCi1pbnQgUmVuZGVyQmxvY2s6Omxhc3RMaW5lQm94QmFzZWxpbmUoKSBjb25z
dAorTGF5b3V0VW5pdCBSZW5kZXJCbG9jazo6bGFzdExpbmVCb3hCYXNlbGluZSgpIGNvbnN0CiB7
CiAgICAgaWYgKCFpc0Jsb2NrRmxvdygpIHx8IChpc1dyaXRpbmdNb2RlUm9vdCgpICYmICFpc1J1
YnlSdW4oKSkpCiAgICAgICAgIHJldHVybiAtMTsKQEAgLTUzMjgsNyArNTMzMyw3IEBAIGludCBS
ZW5kZXJCbG9jazo6bGFzdExpbmVCb3hCYXNlbGluZSgpIGMKICAgICAgICAgZm9yIChSZW5kZXJC
b3gqIGN1cnIgPSBsYXN0Q2hpbGRCb3goKTsgY3VycjsgY3VyciA9IGN1cnItPnByZXZpb3VzU2li
bGluZ0JveCgpKSB7CiAgICAgICAgICAgICBpZiAoIWN1cnItPmlzRmxvYXRpbmdPclBvc2l0aW9u
ZWQoKSkgewogICAgICAgICAgICAgICAgIGhhdmVOb3JtYWxGbG93Q2hpbGQgPSB0cnVlOwotICAg
ICAgICAgICAgICAgIGludCByZXN1bHQgPSBjdXJyLT5sYXN0TGluZUJveEJhc2VsaW5lKCk7Cisg
ICAgICAgICAgICAgICAgTGF5b3V0VW5pdCByZXN1bHQgPSBjdXJyLT5sYXN0TGluZUJveEJhc2Vs
aW5lKCk7CiAgICAgICAgICAgICAgICAgaWYgKHJlc3VsdCAhPSAtMSkKICAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuIGN1cnItPmxvZ2ljYWxUb3AoKSArIHJlc3VsdDsgLy8gVHJhbnNsYXRlIHRv
IG91ciBjb29yZGluYXRlIHNwYWNlLgogICAgICAgICAgICAgfQpAQCAtNTY2Nyw3ICs1NjcyLDcg
QEAgaW50IFJlbmRlckJsb2NrOjpoZWlnaHRGb3JMaW5lQ291bnQoaW50IAogICAgIHJldHVybiBn
ZXRIZWlnaHRGb3JMaW5lQ291bnQodGhpcywgbCwgdHJ1ZSwgY291bnQpOwogfQogCi12b2lkIFJl
bmRlckJsb2NrOjphZGp1c3RGb3JCb3JkZXJGaXQoaW50IHgsIGludCYgbGVmdCwgaW50JiByaWdo
dCkgY29uc3QKK3ZvaWQgUmVuZGVyQmxvY2s6OmFkanVzdEZvckJvcmRlckZpdChMYXlvdXRVbml0
IHgsIExheW91dFVuaXQmIGxlZnQsIExheW91dFVuaXQmIHJpZ2h0KSBjb25zdAogewogICAgIC8v
IFdlIGRvbid0IGRlYWwgd2l0aCByZWxhdGl2ZSBwb3NpdGlvbmluZy4gIE91ciBhc3N1bXB0aW9u
IGlzIHRoYXQgeW91IHNocmluayB0byBmaXQgdGhlIGxpbmVzIHdpdGhvdXQgYWNjb3VudGluZwog
ICAgIC8vIGZvciBlaXRoZXIgb3ZlcmZsb3cgb3IgdHJhbnNsYXRpb25zIHZpYSByZWxhdGl2ZSBw
b3NpdGlvbmluZy4KQEAgLTU2NzUsOSArNTY4MCw5IEBAIHZvaWQgUmVuZGVyQmxvY2s6OmFkanVz
dEZvckJvcmRlckZpdChpbnQKICAgICAgICAgaWYgKGNoaWxkcmVuSW5saW5lKCkpIHsKICAgICAg
ICAgICAgIGZvciAoUm9vdElubGluZUJveCogYm94ID0gZmlyc3RSb290Qm94KCk7IGJveDsgYm94
ID0gYm94LT5uZXh0Um9vdEJveCgpKSB7CiAgICAgICAgICAgICAgICAgaWYgKGJveC0+Zmlyc3RD
aGlsZCgpKQotICAgICAgICAgICAgICAgICAgICBsZWZ0ID0gbWluKGxlZnQsIHggKyBzdGF0aWNf
Y2FzdDxpbnQ+KGJveC0+Zmlyc3RDaGlsZCgpLT54KCkpKTsKKyAgICAgICAgICAgICAgICAgICAg
bGVmdCA9IG1pbihsZWZ0LCB4ICsgc3RhdGljX2Nhc3Q8TGF5b3V0VW5pdD4oYm94LT5maXJzdENo
aWxkKCktPngoKSkpOwogICAgICAgICAgICAgICAgIGlmIChib3gtPmxhc3RDaGlsZCgpKQotICAg
ICAgICAgICAgICAgICAgICByaWdodCA9IG1heChyaWdodCwgeCArIHN0YXRpY19jYXN0PGludD4o
Y2VpbGYoYm94LT5sYXN0Q2hpbGQoKS0+bG9naWNhbFJpZ2h0KCkpKSk7CisgICAgICAgICAgICAg
ICAgICAgIHJpZ2h0ID0gbWF4KHJpZ2h0LCB4ICsgc3RhdGljX2Nhc3Q8TGF5b3V0VW5pdD4oY2Vp
bGYoYm94LT5sYXN0Q2hpbGQoKS0+bG9naWNhbFJpZ2h0KCkpKSk7CiAgICAgICAgICAgICB9CiAg
ICAgICAgIH0KICAgICAgICAgZWxzZSB7CkBAIC01NzAxLDggKzU3MDYsOCBAQCB2b2lkIFJlbmRl
ckJsb2NrOjphZGp1c3RGb3JCb3JkZXJGaXQoaW50CiAgICAgICAgICAgICAgICAgRmxvYXRpbmdP
YmplY3QqIHIgPSAqaXQ7CiAgICAgICAgICAgICAgICAgLy8gT25seSBleGFtaW5lIHRoZSBvYmpl
Y3QgaWYgb3VyIG1fc2hvdWxkUGFpbnQgZmxhZyBpcyBzZXQuCiAgICAgICAgICAgICAgICAgaWYg
KHItPm1fc2hvdWxkUGFpbnQpIHsKLSAgICAgICAgICAgICAgICAgICAgaW50IGZsb2F0TGVmdCA9
IHhQb3NpdGlvbkZvckZsb2F0SW5jbHVkaW5nTWFyZ2luKHIpIC0gci0+bV9yZW5kZXJlci0+eCgp
OwotICAgICAgICAgICAgICAgICAgICBpbnQgZmxvYXRSaWdodCA9IGZsb2F0TGVmdCArIHItPm1f
cmVuZGVyZXItPndpZHRoKCk7CisgICAgICAgICAgICAgICAgICAgIExheW91dFVuaXQgZmxvYXRM
ZWZ0ID0geFBvc2l0aW9uRm9yRmxvYXRJbmNsdWRpbmdNYXJnaW4ocikgLSByLT5tX3JlbmRlcmVy
LT54KCk7CisgICAgICAgICAgICAgICAgICAgIExheW91dFVuaXQgZmxvYXRSaWdodCA9IGZsb2F0
TGVmdCArIHItPm1fcmVuZGVyZXItPndpZHRoKCk7CiAgICAgICAgICAgICAgICAgICAgIGxlZnQg
PSBtaW4obGVmdCwgZmxvYXRMZWZ0KTsKICAgICAgICAgICAgICAgICAgICAgcmlnaHQgPSBtYXgo
cmlnaHQsIGZsb2F0UmlnaHQpOwogICAgICAgICAgICAgICAgIH0KQEAgLTU3MTEsMjQgKzU3MTYs
MjQgQEAgdm9pZCBSZW5kZXJCbG9jazo6YWRqdXN0Rm9yQm9yZGVyRml0KGludAogICAgIH0KIH0K
IAotdm9pZCBSZW5kZXJCbG9jazo6Ym9yZGVyRml0QWRqdXN0KEludFJlY3QmIHJlY3QpIGNvbnN0
Cit2b2lkIFJlbmRlckJsb2NrOjpib3JkZXJGaXRBZGp1c3QoTGF5b3V0UmVjdCYgcmVjdCkgY29u
c3QKIHsKICAgICBpZiAoc3R5bGUoKS0+Ym9yZGVyRml0KCkgPT0gQm9yZGVyRml0Qm9yZGVyKQog
ICAgICAgICByZXR1cm47CiAKICAgICAvLyBXYWxrIGFueSBub3JtYWwgZmxvdyBsaW5lcyB0byBz
bnVnbHkgZml0LgotICAgIGludCBsZWZ0ID0gSU5UX01BWDsKLSAgICBpbnQgcmlnaHQgPSBJTlRf
TUlOOwotICAgIGludCBvbGRXaWR0aCA9IHJlY3Qud2lkdGgoKTsKKyAgICBMYXlvdXRVbml0IGxl
ZnQgPSBudW1lcmljX2xpbWl0czxMYXlvdXRVbml0Pjo6bWF4KCk7CisgICAgTGF5b3V0VW5pdCBy
aWdodCA9IG51bWVyaWNfbGltaXRzPExheW91dFVuaXQ+OjptaW4oKTsKKyAgICBMYXlvdXRVbml0
IG9sZFdpZHRoID0gcmVjdC53aWR0aCgpOwogICAgIGFkanVzdEZvckJvcmRlckZpdCgwLCBsZWZ0
LCByaWdodCk7Ci0gICAgaWYgKGxlZnQgIT0gSU5UX01BWCkgeworICAgIGlmIChsZWZ0ICE9IG51
bWVyaWNfbGltaXRzPExheW91dFVuaXQ+OjptYXgoKSkgewogICAgICAgICBsZWZ0IC09IChib3Jk
ZXJMZWZ0KCkgKyBwYWRkaW5nTGVmdCgpKTsKICAgICAgICAgaWYgKGxlZnQgPiAwKSB7CiAgICAg
ICAgICAgICByZWN0Lm1vdmUobGVmdCwgMCk7CiAgICAgICAgICAgICByZWN0LmV4cGFuZCgtbGVm
dCwgMCk7CiAgICAgICAgIH0KICAgICB9Ci0gICAgaWYgKHJpZ2h0ICE9IElOVF9NSU4pIHsKKyAg
ICBpZiAocmlnaHQgIT0gbnVtZXJpY19saW1pdHM8TGF5b3V0VW5pdD46Om1pbigpKSB7CiAgICAg
ICAgIHJpZ2h0ICs9IChib3JkZXJSaWdodCgpICsgcGFkZGluZ1JpZ2h0KCkpOwogICAgICAgICBp
ZiAocmlnaHQgPCBvbGRXaWR0aCkKICAgICAgICAgICAgIHJlY3QuZXhwYW5kKC0ob2xkV2lkdGgg
LSByaWdodCksIDApOwpAQCAtNTc1MCw3ICs1NzU1LDcgQEAgdm9pZCBSZW5kZXJCbG9jazo6Y2xl
YXJUcnVuY2F0aW9uKCkKICAgICB9CiB9CiAKLXZvaWQgUmVuZGVyQmxvY2s6OnNldE1heE1hcmdp
bkJlZm9yZVZhbHVlcyhpbnQgcG9zLCBpbnQgbmVnKQordm9pZCBSZW5kZXJCbG9jazo6c2V0TWF4
TWFyZ2luQmVmb3JlVmFsdWVzKExheW91dFVuaXQgcG9zLCBMYXlvdXRVbml0IG5lZykKIHsKICAg
ICBpZiAoIW1fcmFyZURhdGEpIHsKICAgICAgICAgaWYgKHBvcyA9PSBSZW5kZXJCbG9ja1JhcmVE
YXRhOjpwb3NpdGl2ZU1hcmdpbkJlZm9yZURlZmF1bHQodGhpcykgJiYgbmVnID09IFJlbmRlckJs
b2NrUmFyZURhdGE6Om5lZ2F0aXZlTWFyZ2luQmVmb3JlRGVmYXVsdCh0aGlzKSkKQEAgLTU3NjEs
NyArNTc2Niw3IEBAIHZvaWQgUmVuZGVyQmxvY2s6OnNldE1heE1hcmdpbkJlZm9yZVZhbHUKICAg
ICBtX3JhcmVEYXRhLT5tX21hcmdpbnMuc2V0TmVnYXRpdmVNYXJnaW5CZWZvcmUobmVnKTsKIH0K
IAotdm9pZCBSZW5kZXJCbG9jazo6c2V0TWF4TWFyZ2luQWZ0ZXJWYWx1ZXMoaW50IHBvcywgaW50
IG5lZykKK3ZvaWQgUmVuZGVyQmxvY2s6OnNldE1heE1hcmdpbkFmdGVyVmFsdWVzKExheW91dFVu
aXQgcG9zLCBMYXlvdXRVbml0IG5lZykKIHsKICAgICBpZiAoIW1fcmFyZURhdGEpIHsKICAgICAg
ICAgaWYgKHBvcyA9PSBSZW5kZXJCbG9ja1JhcmVEYXRhOjpwb3NpdGl2ZU1hcmdpbkFmdGVyRGVm
YXVsdCh0aGlzKSAmJiBuZWcgPT0gUmVuZGVyQmxvY2tSYXJlRGF0YTo6bmVnYXRpdmVNYXJnaW5B
ZnRlckRlZmF1bHQodGhpcykpCkBAIC01ODI0LDkgKzU4MjksOSBAQCB2b2lkIFJlbmRlckJsb2Nr
OjphYnNvbHV0ZVF1YWRzKFZlY3RvcjxGCiAgICAgICAgIHF1YWRzLmFwcGVuZChSZW5kZXJCb3g6
OmxvY2FsVG9BYnNvbHV0ZVF1YWQoRmxvYXRSZWN0KDAsIDAsIHdpZHRoKCksIGhlaWdodCgpKSwg
ZmFsc2UsIHdhc0ZpeGVkKSk7CiB9CiAKLUludFJlY3QgUmVuZGVyQmxvY2s6OnJlY3RXaXRoT3V0
bGluZUZvclJlcGFpbnQoUmVuZGVyQm94TW9kZWxPYmplY3QqIHJlcGFpbnRDb250YWluZXIsIGlu
dCBvdXRsaW5lV2lkdGgpIGNvbnN0CitMYXlvdXRSZWN0IFJlbmRlckJsb2NrOjpyZWN0V2l0aE91
dGxpbmVGb3JSZXBhaW50KFJlbmRlckJveE1vZGVsT2JqZWN0KiByZXBhaW50Q29udGFpbmVyLCBM
YXlvdXRVbml0IG91dGxpbmVXaWR0aCkgY29uc3QKIHsKLSAgICBJbnRSZWN0IHIoUmVuZGVyQm94
OjpyZWN0V2l0aE91dGxpbmVGb3JSZXBhaW50KHJlcGFpbnRDb250YWluZXIsIG91dGxpbmVXaWR0
aCkpOworICAgIExheW91dFJlY3QgcihSZW5kZXJCb3g6OnJlY3RXaXRoT3V0bGluZUZvclJlcGFp
bnQocmVwYWludENvbnRhaW5lciwgb3V0bGluZVdpZHRoKSk7CiAgICAgaWYgKGlzQW5vbnltb3Vz
QmxvY2tDb250aW51YXRpb24oKSkKICAgICAgICAgci5pbmZsYXRlWShjb2xsYXBzZWRNYXJnaW5C
ZWZvcmUoKSk7IC8vIEZJWE1FOiBUaGlzIGlzIHdyb25nIGZvciBibG9jay1mbG93cyB0aGF0IGFy
ZSBob3Jpem9udGFsLgogICAgIHJldHVybiByOwpAQCAtNTg3Nyw3ICs1ODgyLDcgQEAgdm9pZCBS
ZW5kZXJCbG9jazo6dXBkYXRlSGl0VGVzdFJlc3VsdChIaQogICAgIH0KIH0KIAotSW50UmVjdCBS
ZW5kZXJCbG9jazo6bG9jYWxDYXJldFJlY3QoSW5saW5lQm94KiBpbmxpbmVCb3gsIGludCBjYXJl
dE9mZnNldCwgaW50KiBleHRyYVdpZHRoVG9FbmRPZkxpbmUpCitMYXlvdXRSZWN0IFJlbmRlckJs
b2NrOjpsb2NhbENhcmV0UmVjdChJbmxpbmVCb3gqIGlubGluZUJveCwgaW50IGNhcmV0T2Zmc2V0
LCBMYXlvdXRVbml0KiBleHRyYVdpZHRoVG9FbmRPZkxpbmUpCiB7CiAgICAgLy8gRG8gdGhlIG5v
cm1hbCBjYWxjdWxhdGlvbiBpbiBtb3N0IGNhc2VzLgogICAgIGlmIChmaXJzdENoaWxkKCkpCkBA
IC01ODkyLDcgKzU4OTcsNyBAQCBJbnRSZWN0IFJlbmRlckJsb2NrOjpsb2NhbENhcmV0UmVjdChJ
bmxpCiAgICAgLy8gY29uc3RydWN0ZWQgYW5kIHRoaXMga2x1ZGdlIGlzIG5vdCBjYWxsZWQgYW55
IG1vcmUuIFNvIG9ubHkgdGhlIGNhcmV0IHNpemUKICAgICAvLyBvZiBhbiBlbXB0eSA6Zmlyc3Qt
bGluZSdkIGJsb2NrIGlzIHdyb25nLiBJIHRoaW5rIHdlIGNhbiBsaXZlIHdpdGggdGhhdC4KICAg
ICBSZW5kZXJTdHlsZSogY3VycmVudFN0eWxlID0gZmlyc3RMaW5lU3R5bGUoKTsKLSAgICBpbnQg
aGVpZ2h0ID0gbGluZUhlaWdodCh0cnVlLCBjdXJyZW50U3R5bGUtPmlzSG9yaXpvbnRhbFdyaXRp
bmdNb2RlKCkgPyBIb3Jpem9udGFsTGluZSA6IFZlcnRpY2FsTGluZSk7CisgICAgTGF5b3V0VW5p
dCBoZWlnaHQgPSBsaW5lSGVpZ2h0KHRydWUsIGN1cnJlbnRTdHlsZS0+aXNIb3Jpem9udGFsV3Jp
dGluZ01vZGUoKSA/IEhvcml6b250YWxMaW5lIDogVmVydGljYWxMaW5lKTsKIAogICAgIGVudW0g
Q2FyZXRBbGlnbm1lbnQgeyBhbGlnbkxlZnQsIGFsaWduUmlnaHQsIGFsaWduQ2VudGVyIH07CiAK
QEAgLTU5MjUsOCArNTkzMCw4IEBAIEludFJlY3QgUmVuZGVyQmxvY2s6OmxvY2FsQ2FyZXRSZWN0
KElubGkKICAgICAgICAgICAgIGJyZWFrOwogICAgIH0KIAotICAgIGludCB4ID0gYm9yZGVyTGVm
dCgpICsgcGFkZGluZ0xlZnQoKTsKLSAgICBpbnQgdyA9IHdpZHRoKCk7CisgICAgTGF5b3V0VW5p
dCB4ID0gYm9yZGVyTGVmdCgpICsgcGFkZGluZ0xlZnQoKTsKKyAgICBMYXlvdXRVbml0IHcgPSB3
aWR0aCgpOwogCiAgICAgc3dpdGNoIChhbGlnbm1lbnQpIHsKICAgICAgICAgY2FzZSBhbGlnbkxl
ZnQ6CkBAIC01OTQ3LDIwICs1OTUyLDIwIEBAIEludFJlY3QgUmVuZGVyQmxvY2s6OmxvY2FsQ2Fy
ZXRSZWN0KElubGkKICAgICAgICAgICAgIC8vIG15UmlnaHQgYW5kIGNvbnRhaW5lclJpZ2h0IGFy
ZSBzZXQgdXAsIGJ1dCB0aGVuIGNsb2JiZXJlZC4KICAgICAgICAgICAgIC8vIFNvICpleHRyYVdp
ZHRoVG9FbmRPZkxpbmUgd2lsbCBhbHdheXMgYmUgMCBoZXJlLgogCi0gICAgICAgICAgICBpbnQg
bXlSaWdodCA9IHggKyBjYXJldFdpZHRoOworICAgICAgICAgICAgTGF5b3V0VW5pdCBteVJpZ2h0
ID0geCArIGNhcmV0V2lkdGg7CiAgICAgICAgICAgICAvLyBGSVhNRTogd2h5IGNhbGwgbG9jYWxU
b0Fic29sdXRlRm9yQ29udGVudCgpIHR3aWNlIGhlcmUsIHRvbz8KICAgICAgICAgICAgIEZsb2F0
UG9pbnQgYWJzUmlnaHRQb2ludCA9IGxvY2FsVG9BYnNvbHV0ZShGbG9hdFBvaW50KG15UmlnaHQs
IDApKTsKIAotICAgICAgICAgICAgaW50IGNvbnRhaW5lclJpZ2h0ID0gY29udGFpbmluZ0Jsb2Nr
KCktPngoKSArIGNvbnRhaW5pbmdCbG9ja0xvZ2ljYWxXaWR0aEZvckNvbnRlbnQoKTsKKyAgICAg
ICAgICAgIExheW91dFVuaXQgY29udGFpbmVyUmlnaHQgPSBjb250YWluaW5nQmxvY2soKS0+eCgp
ICsgY29udGFpbmluZ0Jsb2NrTG9naWNhbFdpZHRoRm9yQ29udGVudCgpOwogICAgICAgICAgICAg
RmxvYXRQb2ludCBhYnNDb250YWluZXJQb2ludCA9IGxvY2FsVG9BYnNvbHV0ZShGbG9hdFBvaW50
KGNvbnRhaW5lclJpZ2h0LCAwKSk7CiAKICAgICAgICAgICAgICpleHRyYVdpZHRoVG9FbmRPZkxp
bmUgPSBhYnNDb250YWluZXJQb2ludC54KCkgLSBhYnNSaWdodFBvaW50LngoKTsKICAgICAgICAg
fQogICAgIH0KIAotICAgIGludCB5ID0gcGFkZGluZ1RvcCgpICsgYm9yZGVyVG9wKCk7CisgICAg
TGF5b3V0VW5pdCB5ID0gcGFkZGluZ1RvcCgpICsgYm9yZGVyVG9wKCk7CiAKLSAgICByZXR1cm4g
SW50UmVjdCh4LCB5LCBjYXJldFdpZHRoLCBoZWlnaHQpOworICAgIHJldHVybiBMYXlvdXRSZWN0
KHgsIHksIGNhcmV0V2lkdGgsIGhlaWdodCk7CiB9CiAKIHZvaWQgUmVuZGVyQmxvY2s6OmFkZEZv
Y3VzUmluZ1JlY3RzKFZlY3RvcjxMYXlvdXRSZWN0PiYgcmVjdHMsIGNvbnN0IExheW91dFBvaW50
JiBhZGRpdGlvbmFsT2Zmc2V0KQpAQCAtNjAwMSw3ICs2MDA2LDcgQEAgdm9pZCBSZW5kZXJCbG9j
azo6YWRkRm9jdXNSaW5nUmVjdHMoVmVjdAogICAgICAgICAgICAgICAgICAgICBwb3MgPSBjdXJy
LT5sb2NhbFRvQWJzb2x1dGUoKTsKICAgICAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAg
ICAgICAgIHBvcyA9IEZsb2F0UG9pbnQoYWRkaXRpb25hbE9mZnNldC54KCkgKyBib3gtPngoKSwg
YWRkaXRpb25hbE9mZnNldC55KCkgKyBib3gtPnkoKSk7Ci0gICAgICAgICAgICAgICAgYm94LT5h
ZGRGb2N1c1JpbmdSZWN0cyhyZWN0cywgZmxvb3JlZEludFBvaW50KHBvcykpOworICAgICAgICAg
ICAgICAgIGJveC0+YWRkRm9jdXNSaW5nUmVjdHMocmVjdHMsIGZsb29yZWRMYXlvdXRQb2ludChw
b3MpKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgIH0KQEAgLTYwNTgsMzEgKzYwNjMs
MzEgQEAgUmVuZGVyQmxvY2sqIFJlbmRlckJsb2NrOjpjcmVhdGVBbm9ueW1vdQogICAgIHJldHVy
biBuZXdCb3g7CiB9CiAKLWludCBSZW5kZXJCbG9jazo6bmV4dFBhZ2VMb2dpY2FsVG9wRXhjbHVk
aW5nQm91bmRhcnlQb2ludChpbnQgbG9naWNhbE9mZnNldCkgY29uc3QKK0xheW91dFVuaXQgUmVu
ZGVyQmxvY2s6Om5leHRQYWdlTG9naWNhbFRvcEV4Y2x1ZGluZ0JvdW5kYXJ5UG9pbnQoTGF5b3V0
VW5pdCBsb2dpY2FsT2Zmc2V0KSBjb25zdAogewogICAgIExheW91dFN0YXRlKiBsYXlvdXRTdGF0
ZSA9IHZpZXcoKS0+bGF5b3V0U3RhdGUoKTsKICAgICBpZiAoIWxheW91dFN0YXRlLT5tX3BhZ2VM
b2dpY2FsSGVpZ2h0KQogICAgICAgICByZXR1cm4gbG9naWNhbE9mZnNldDsKICAgICAKICAgICAv
LyBUaGUgbG9naWNhbE9mZnNldCBpcyBpbiBvdXIgY29vcmRpbmF0ZSBzcGFjZS4gIFdlIGNhbiBh
ZGQgaW4gb3VyIHB1c2hlZCBvZmZzZXQuCi0gICAgaW50IHBhZ2VMb2dpY2FsSGVpZ2h0ID0gbGF5
b3V0U3RhdGUtPm1fcGFnZUxvZ2ljYWxIZWlnaHQ7Ci0gICAgSW50U2l6ZSBkZWx0YSA9IGxheW91
dFN0YXRlLT5tX2xheW91dE9mZnNldCAtIGxheW91dFN0YXRlLT5tX3BhZ2VPZmZzZXQ7Ci0gICAg
aW50IG9mZnNldCA9IGlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCkgPyBkZWx0YS5oZWlnaHQoKSA6
IGRlbHRhLndpZHRoKCk7Ci0gICAgaW50IHJlbWFpbmluZ0xvZ2ljYWxIZWlnaHQgPSAocGFnZUxv
Z2ljYWxIZWlnaHQgLSAob2Zmc2V0ICsgbG9naWNhbE9mZnNldCkgJSBwYWdlTG9naWNhbEhlaWdo
dCkgJSBwYWdlTG9naWNhbEhlaWdodDsKKyAgICBMYXlvdXRVbml0IHBhZ2VMb2dpY2FsSGVpZ2h0
ID0gbGF5b3V0U3RhdGUtPm1fcGFnZUxvZ2ljYWxIZWlnaHQ7CisgICAgTGF5b3V0U2l6ZSBkZWx0
YSA9IGxheW91dFN0YXRlLT5tX2xheW91dE9mZnNldCAtIGxheW91dFN0YXRlLT5tX3BhZ2VPZmZz
ZXQ7CisgICAgTGF5b3V0VW5pdCBvZmZzZXQgPSBpc0hvcml6b250YWxXcml0aW5nTW9kZSgpID8g
ZGVsdGEuaGVpZ2h0KCkgOiBkZWx0YS53aWR0aCgpOworICAgIExheW91dFVuaXQgcmVtYWluaW5n
TG9naWNhbEhlaWdodCA9IGxheW91dE1vZChwYWdlTG9naWNhbEhlaWdodCAtIGxheW91dE1vZChv
ZmZzZXQgKyBsb2dpY2FsT2Zmc2V0LCBwYWdlTG9naWNhbEhlaWdodCksIHBhZ2VMb2dpY2FsSGVp
Z2h0KTsKICAgICByZXR1cm4gbG9naWNhbE9mZnNldCArIChyZW1haW5pbmdMb2dpY2FsSGVpZ2h0
ID8gcmVtYWluaW5nTG9naWNhbEhlaWdodCA6IHBhZ2VMb2dpY2FsSGVpZ2h0KTsKIH0KIAotaW50
IFJlbmRlckJsb2NrOjpuZXh0UGFnZUxvZ2ljYWxUb3BJbmNsdWRpbmdCb3VuZGFyeVBvaW50KGlu
dCBsb2dpY2FsT2Zmc2V0KSBjb25zdAorTGF5b3V0VW5pdCBSZW5kZXJCbG9jazo6bmV4dFBhZ2VM
b2dpY2FsVG9wSW5jbHVkaW5nQm91bmRhcnlQb2ludChMYXlvdXRVbml0IGxvZ2ljYWxPZmZzZXQp
IGNvbnN0CiB7CiAgICAgTGF5b3V0U3RhdGUqIGxheW91dFN0YXRlID0gdmlldygpLT5sYXlvdXRT
dGF0ZSgpOwogICAgIGlmICghbGF5b3V0U3RhdGUtPm1fcGFnZUxvZ2ljYWxIZWlnaHQpCiAgICAg
ICAgIHJldHVybiBsb2dpY2FsT2Zmc2V0OwogICAgIAogICAgIC8vIFRoZSBsb2dpY2FsT2Zmc2V0
IGlzIGluIG91ciBjb29yZGluYXRlIHNwYWNlLiAgV2UgY2FuIGFkZCBpbiBvdXIgcHVzaGVkIG9m
ZnNldC4KLSAgICBpbnQgcGFnZUxvZ2ljYWxIZWlnaHQgPSBsYXlvdXRTdGF0ZS0+bV9wYWdlTG9n
aWNhbEhlaWdodDsKLSAgICBJbnRTaXplIGRlbHRhID0gbGF5b3V0U3RhdGUtPm1fbGF5b3V0T2Zm
c2V0IC0gbGF5b3V0U3RhdGUtPm1fcGFnZU9mZnNldDsKLSAgICBpbnQgb2Zmc2V0ID0gaXNIb3Jp
em9udGFsV3JpdGluZ01vZGUoKSA/IGRlbHRhLmhlaWdodCgpIDogZGVsdGEud2lkdGgoKTsKLSAg
ICBpbnQgcmVtYWluaW5nTG9naWNhbEhlaWdodCA9IChwYWdlTG9naWNhbEhlaWdodCAtIChvZmZz
ZXQgKyBsb2dpY2FsT2Zmc2V0KSAlIHBhZ2VMb2dpY2FsSGVpZ2h0KSAlIHBhZ2VMb2dpY2FsSGVp
Z2h0OworICAgIExheW91dFVuaXQgcGFnZUxvZ2ljYWxIZWlnaHQgPSBsYXlvdXRTdGF0ZS0+bV9w
YWdlTG9naWNhbEhlaWdodDsKKyAgICBMYXlvdXRTaXplIGRlbHRhID0gbGF5b3V0U3RhdGUtPm1f
bGF5b3V0T2Zmc2V0IC0gbGF5b3V0U3RhdGUtPm1fcGFnZU9mZnNldDsKKyAgICBMYXlvdXRVbml0
IG9mZnNldCA9IGlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCkgPyBkZWx0YS5oZWlnaHQoKSA6IGRl
bHRhLndpZHRoKCk7CisgICAgTGF5b3V0VW5pdCByZW1haW5pbmdMb2dpY2FsSGVpZ2h0ID0gbGF5
b3V0TW9kKHBhZ2VMb2dpY2FsSGVpZ2h0IC0gbGF5b3V0TW9kKG9mZnNldCArIGxvZ2ljYWxPZmZz
ZXQsIHBhZ2VMb2dpY2FsSGVpZ2h0KSwgcGFnZUxvZ2ljYWxIZWlnaHQpOwogICAgIHJldHVybiBs
b2dpY2FsT2Zmc2V0ICsgcmVtYWluaW5nTG9naWNhbEhlaWdodDsKIH0KIApAQCAtNjEyOSwyNyAr
NjEzNCwyNyBAQCBpbnQgUmVuZGVyQmxvY2s6OmFwcGx5QWZ0ZXJCcmVhayhSZW5kZXJCCiAgICAg
cmV0dXJuIGxvZ2ljYWxPZmZzZXQ7CiB9CiAKLWludCBSZW5kZXJCbG9jazo6YWRqdXN0Rm9yVW5z
cGxpdHRhYmxlQ2hpbGQoUmVuZGVyQm94KiBjaGlsZCwgaW50IGxvZ2ljYWxPZmZzZXQsIGJvb2wg
aW5jbHVkZU1hcmdpbnMpCitMYXlvdXRVbml0IFJlbmRlckJsb2NrOjphZGp1c3RGb3JVbnNwbGl0
dGFibGVDaGlsZChSZW5kZXJCb3gqIGNoaWxkLCBMYXlvdXRVbml0IGxvZ2ljYWxPZmZzZXQsIGJv
b2wgaW5jbHVkZU1hcmdpbnMpCiB7CiAgICAgYm9vbCBpc1Vuc3BsaXR0YWJsZSA9IGNoaWxkLT5p
c1JlcGxhY2VkKCkgfHwgY2hpbGQtPnNjcm9sbHNPdmVyZmxvdygpIHx8IGNoaWxkLT5zdHlsZSgp
LT5jb2x1bW5CcmVha0luc2lkZSgpID09IFBCQVZPSUQ7CiAgICAgaWYgKCFpc1Vuc3BsaXR0YWJs
ZSkKICAgICAgICAgcmV0dXJuIGxvZ2ljYWxPZmZzZXQ7Ci0gICAgaW50IGNoaWxkTG9naWNhbEhl
aWdodCA9IGxvZ2ljYWxIZWlnaHRGb3JDaGlsZChjaGlsZCkgKyAoaW5jbHVkZU1hcmdpbnMgPyBt
YXJnaW5CZWZvcmVGb3JDaGlsZChjaGlsZCkgKyBtYXJnaW5BZnRlckZvckNoaWxkKGNoaWxkKSA6
IDApOworICAgIExheW91dFVuaXQgY2hpbGRMb2dpY2FsSGVpZ2h0ID0gbG9naWNhbEhlaWdodEZv
ckNoaWxkKGNoaWxkKSArIChpbmNsdWRlTWFyZ2lucyA/IG1hcmdpbkJlZm9yZUZvckNoaWxkKGNo
aWxkKSArIG1hcmdpbkFmdGVyRm9yQ2hpbGQoY2hpbGQpIDogMCk7CiAgICAgTGF5b3V0U3RhdGUq
IGxheW91dFN0YXRlID0gdmlldygpLT5sYXlvdXRTdGF0ZSgpOwogICAgIGlmIChsYXlvdXRTdGF0
ZS0+bV9jb2x1bW5JbmZvKQogICAgICAgICBsYXlvdXRTdGF0ZS0+bV9jb2x1bW5JbmZvLT51cGRh
dGVNaW5pbXVtQ29sdW1uSGVpZ2h0KGNoaWxkTG9naWNhbEhlaWdodCk7Ci0gICAgaW50IHBhZ2VM
b2dpY2FsSGVpZ2h0ID0gbGF5b3V0U3RhdGUtPm1fcGFnZUxvZ2ljYWxIZWlnaHQ7CisgICAgTGF5
b3V0VW5pdCBwYWdlTG9naWNhbEhlaWdodCA9IGxheW91dFN0YXRlLT5tX3BhZ2VMb2dpY2FsSGVp
Z2h0OwogICAgIGlmICghcGFnZUxvZ2ljYWxIZWlnaHQgfHwgY2hpbGRMb2dpY2FsSGVpZ2h0ID4g
cGFnZUxvZ2ljYWxIZWlnaHQpCiAgICAgICAgIHJldHVybiBsb2dpY2FsT2Zmc2V0OwotICAgIElu
dFNpemUgZGVsdGEgPSBsYXlvdXRTdGF0ZS0+bV9sYXlvdXRPZmZzZXQgLSBsYXlvdXRTdGF0ZS0+
bV9wYWdlT2Zmc2V0OwotICAgIGludCBvZmZzZXQgPSBpc0hvcml6b250YWxXcml0aW5nTW9kZSgp
ID8gZGVsdGEuaGVpZ2h0KCkgOiBkZWx0YS53aWR0aCgpOwotICAgIGludCByZW1haW5pbmdMb2dp
Y2FsSGVpZ2h0ID0gKHBhZ2VMb2dpY2FsSGVpZ2h0IC0gKG9mZnNldCArIGxvZ2ljYWxPZmZzZXQp
ICUgcGFnZUxvZ2ljYWxIZWlnaHQpICUgcGFnZUxvZ2ljYWxIZWlnaHQ7CisgICAgTGF5b3V0U2l6
ZSBkZWx0YSA9IGxheW91dFN0YXRlLT5tX2xheW91dE9mZnNldCAtIGxheW91dFN0YXRlLT5tX3Bh
Z2VPZmZzZXQ7CisgICAgTGF5b3V0VW5pdCBvZmZzZXQgPSBpc0hvcml6b250YWxXcml0aW5nTW9k
ZSgpID8gZGVsdGEuaGVpZ2h0KCkgOiBkZWx0YS53aWR0aCgpOworICAgIExheW91dFVuaXQgcmVt
YWluaW5nTG9naWNhbEhlaWdodCA9IGxheW91dE1vZChwYWdlTG9naWNhbEhlaWdodCAtIGxheW91
dE1vZChvZmZzZXQgKyBsb2dpY2FsT2Zmc2V0LCBwYWdlTG9naWNhbEhlaWdodCksIHBhZ2VMb2dp
Y2FsSGVpZ2h0KTsKICAgICBpZiAocmVtYWluaW5nTG9naWNhbEhlaWdodCA8IGNoaWxkTG9naWNh
bEhlaWdodCkKICAgICAgICAgcmV0dXJuIGxvZ2ljYWxPZmZzZXQgKyByZW1haW5pbmdMb2dpY2Fs
SGVpZ2h0OwogICAgIHJldHVybiBsb2dpY2FsT2Zmc2V0OwogfQogCi12b2lkIFJlbmRlckJsb2Nr
OjphZGp1c3RMaW5lUG9zaXRpb25Gb3JQYWdpbmF0aW9uKFJvb3RJbmxpbmVCb3gqIGxpbmVCb3gs
IGludCYgZGVsdGEpCit2b2lkIFJlbmRlckJsb2NrOjphZGp1c3RMaW5lUG9zaXRpb25Gb3JQYWdp
bmF0aW9uKFJvb3RJbmxpbmVCb3gqIGxpbmVCb3gsIExheW91dFVuaXQmIGRlbHRhKQogewogICAg
IC8vIEZJWE1FOiBGb3Igbm93IHdlIHBhZ2luYXRlIHVzaW5nIGxpbmUgb3ZlcmZsb3cuICBUaGlz
IGVuc3VyZXMgdGhhdCBsaW5lcyBkb24ndCBvdmVybGFwIGF0IGFsbCB3aGVuIHdlCiAgICAgLy8g
cHV0IGEgc3RydXQgYmV0d2VlbiB0aGVtIGZvciBwYWdpbmF0aW9uIHB1cnBvc2VzLiAgSG93ZXZl
ciwgdGhpcyByZWFsbHkgaXNuJ3QgdGhlIGRlc2lyZWQgcmVuZGVyaW5nLCBzaW5jZQpAQCAtNjE2
OCwyMyArNjE3MywyMyBAQCB2b2lkIFJlbmRlckJsb2NrOjphZGp1c3RMaW5lUG9zaXRpb25Gb3JQ
CiAgICAgLy8gVGVjaG5pY2FsbHkgaWYgdGhlIGxvY2F0aW9uIHdlIG1vdmUgdGhlIGxpbmUgdG8g
aGFzIGEgZGlmZmVyZW50IGxpbmUgd2lkdGggdGhhbiBvdXIgb2xkIHBvc2l0aW9uLCB0aGVuIHdl
IG5lZWQgdG8gZGlydHkgdGhlCiAgICAgLy8gbGluZSBhbmQgYWxsIGZvbGxvd2luZyBsaW5lcy4K
ICAgICBMYXlvdXRTdGF0ZSogbGF5b3V0U3RhdGUgPSB2aWV3KCktPmxheW91dFN0YXRlKCk7Ci0g
ICAgaW50IHBhZ2VMb2dpY2FsSGVpZ2h0ID0gbGF5b3V0U3RhdGUtPm1fcGFnZUxvZ2ljYWxIZWln
aHQ7Ci0gICAgSW50UmVjdCBsb2dpY2FsVmlzdWFsT3ZlcmZsb3cgPSBsaW5lQm94LT5sb2dpY2Fs
VmlzdWFsT3ZlcmZsb3dSZWN0KGxpbmVCb3gtPmxpbmVUb3AoKSwgbGluZUJveC0+bGluZUJvdHRv
bSgpKTsKLSAgICBpbnQgbG9naWNhbE9mZnNldCA9IGxvZ2ljYWxWaXN1YWxPdmVyZmxvdy55KCk7
Ci0gICAgaW50IGxpbmVIZWlnaHQgPSBsb2dpY2FsVmlzdWFsT3ZlcmZsb3cubWF4WSgpIC0gbG9n
aWNhbE9mZnNldDsKKyAgICBMYXlvdXRVbml0IHBhZ2VMb2dpY2FsSGVpZ2h0ID0gbGF5b3V0U3Rh
dGUtPm1fcGFnZUxvZ2ljYWxIZWlnaHQ7CisgICAgTGF5b3V0UmVjdCBsb2dpY2FsVmlzdWFsT3Zl
cmZsb3cgPSBsaW5lQm94LT5sb2dpY2FsVmlzdWFsT3ZlcmZsb3dSZWN0KGxpbmVCb3gtPmxpbmVU
b3AoKSwgbGluZUJveC0+bGluZUJvdHRvbSgpKTsKKyAgICBMYXlvdXRVbml0IGxvZ2ljYWxPZmZz
ZXQgPSBsb2dpY2FsVmlzdWFsT3ZlcmZsb3cueSgpOworICAgIExheW91dFVuaXQgbGluZUhlaWdo
dCA9IGxvZ2ljYWxWaXN1YWxPdmVyZmxvdy5tYXhZKCkgLSBsb2dpY2FsT2Zmc2V0OwogICAgIGlm
IChsYXlvdXRTdGF0ZS0+bV9jb2x1bW5JbmZvKQogICAgICAgICBsYXlvdXRTdGF0ZS0+bV9jb2x1
bW5JbmZvLT51cGRhdGVNaW5pbXVtQ29sdW1uSGVpZ2h0KGxpbmVIZWlnaHQpOwogICAgIGxvZ2lj
YWxPZmZzZXQgKz0gZGVsdGE7CiAgICAgbGluZUJveC0+c2V0UGFnaW5hdGlvblN0cnV0KDApOwog
ICAgIGlmICghcGFnZUxvZ2ljYWxIZWlnaHQgfHwgbGluZUhlaWdodCA+IHBhZ2VMb2dpY2FsSGVp
Z2h0KQogICAgICAgICByZXR1cm47Ci0gICAgSW50U2l6ZSBvZmZzZXREZWx0YSA9IGxheW91dFN0
YXRlLT5tX2xheW91dE9mZnNldCAtIGxheW91dFN0YXRlLT5tX3BhZ2VPZmZzZXQ7Ci0gICAgaW50
IG9mZnNldCA9IGlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCkgPyBvZmZzZXREZWx0YS5oZWlnaHQo
KSA6IG9mZnNldERlbHRhLndpZHRoKCk7Ci0gICAgaW50IHJlbWFpbmluZ0xvZ2ljYWxIZWlnaHQg
PSBwYWdlTG9naWNhbEhlaWdodCAtIChvZmZzZXQgKyBsb2dpY2FsT2Zmc2V0KSAlIHBhZ2VMb2dp
Y2FsSGVpZ2h0OworICAgIExheW91dFNpemUgb2Zmc2V0RGVsdGEgPSBsYXlvdXRTdGF0ZS0+bV9s
YXlvdXRPZmZzZXQgLSBsYXlvdXRTdGF0ZS0+bV9wYWdlT2Zmc2V0OworICAgIExheW91dFVuaXQg
b2Zmc2V0ID0gaXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKSA/IG9mZnNldERlbHRhLmhlaWdodCgp
IDogb2Zmc2V0RGVsdGEud2lkdGgoKTsKKyAgICBMYXlvdXRVbml0IHJlbWFpbmluZ0xvZ2ljYWxI
ZWlnaHQgPSBwYWdlTG9naWNhbEhlaWdodCAtIGxheW91dE1vZChvZmZzZXQgKyBsb2dpY2FsT2Zm
c2V0LCBwYWdlTG9naWNhbEhlaWdodCk7CiAgICAgaWYgKHJlbWFpbmluZ0xvZ2ljYWxIZWlnaHQg
PCBsaW5lSGVpZ2h0KSB7Ci0gICAgICAgIGludCB0b3RhbExvZ2ljYWxIZWlnaHQgPSBsaW5lSGVp
Z2h0ICsgbWF4KDAsIGxvZ2ljYWxPZmZzZXQpOworICAgICAgICBMYXlvdXRVbml0IHRvdGFsTG9n
aWNhbEhlaWdodCA9IGxpbmVIZWlnaHQgKyBtYXg8TGF5b3V0VW5pdD4oMCwgbG9naWNhbE9mZnNl
dCk7CiAgICAgICAgIGlmIChsaW5lQm94ID09IGZpcnN0Um9vdEJveCgpICYmIHRvdGFsTG9naWNh
bEhlaWdodCA8IHBhZ2VMb2dpY2FsSGVpZ2h0ICYmICFpc1Bvc2l0aW9uZWQoKSAmJiAhaXNUYWJs
ZUNlbGwoKSkKLSAgICAgICAgICAgIHNldFBhZ2luYXRpb25TdHJ1dChyZW1haW5pbmdMb2dpY2Fs
SGVpZ2h0ICsgbWF4KDAsIGxvZ2ljYWxPZmZzZXQpKTsKKyAgICAgICAgICAgIHNldFBhZ2luYXRp
b25TdHJ1dChyZW1haW5pbmdMb2dpY2FsSGVpZ2h0ICsgbWF4PExheW91dFVuaXQ+KDAsIGxvZ2lj
YWxPZmZzZXQpKTsKICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICBkZWx0YSArPSByZW1haW5p
bmdMb2dpY2FsSGVpZ2h0OwogICAgICAgICAgICAgbGluZUJveC0+c2V0UGFnaW5hdGlvblN0cnV0
KHJlbWFpbmluZ0xvZ2ljYWxIZWlnaHQpOwpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlckJsb2NrLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlckJsb2NrLmgJKHJldmlzaW9uIDkzNDI0KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlckJsb2NrLmgJKHdvcmtpbmcgY29weSkKQEAgLTgyLDggKzgyLDggQEAgcHVibGljOgog
ICAgIGJvb2wgYmVpbmdEZXN0cm95ZWQoKSBjb25zdCB7IHJldHVybiBtX2JlaW5nRGVzdHJveWVk
OyB9CiAKICAgICAvLyBUaGVzZSB0d28gZnVuY3Rpb25zIGFyZSBvdmVycmlkZGVuIGZvciBpbmxp
bmUtYmxvY2suCi0gICAgdmlydHVhbCBpbnQgbGluZUhlaWdodChib29sIGZpcnN0TGluZSwgTGlu
ZURpcmVjdGlvbk1vZGUsIExpbmVQb3NpdGlvbk1vZGUgPSBQb3NpdGlvbk9uQ29udGFpbmluZ0xp
bmUpIGNvbnN0OwotICAgIHZpcnR1YWwgaW50IGJhc2VsaW5lUG9zaXRpb24oRm9udEJhc2VsaW5l
LCBib29sIGZpcnN0TGluZSwgTGluZURpcmVjdGlvbk1vZGUsIExpbmVQb3NpdGlvbk1vZGUgPSBQ
b3NpdGlvbk9uQ29udGFpbmluZ0xpbmUpIGNvbnN0OworICAgIHZpcnR1YWwgTGF5b3V0VW5pdCBs
aW5lSGVpZ2h0KGJvb2wgZmlyc3RMaW5lLCBMaW5lRGlyZWN0aW9uTW9kZSwgTGluZVBvc2l0aW9u
TW9kZSA9IFBvc2l0aW9uT25Db250YWluaW5nTGluZSkgY29uc3Q7CisgICAgdmlydHVhbCBMYXlv
dXRVbml0IGJhc2VsaW5lUG9zaXRpb24oRm9udEJhc2VsaW5lLCBib29sIGZpcnN0TGluZSwgTGlu
ZURpcmVjdGlvbk1vZGUsIExpbmVQb3NpdGlvbk1vZGUgPSBQb3NpdGlvbk9uQ29udGFpbmluZ0xp
bmUpIGNvbnN0OwogCiAgICAgUmVuZGVyTGluZUJveExpc3QqIGxpbmVCb3hlcygpIHsgcmV0dXJu
ICZtX2xpbmVCb3hlczsgfQogICAgIGNvbnN0IFJlbmRlckxpbmVCb3hMaXN0KiBsaW5lQm94ZXMo
KSBjb25zdCB7IHJldHVybiAmbV9saW5lQm94ZXM7IH0KQEAgLTIwMywxMCArMjAzLDEwIEBAIHB1
YmxpYzoKIAogICAgIC8vIEFjY2Vzc29ycyBmb3IgbG9naWNhbCB3aWR0aC9oZWlnaHQgYW5kIG1h
cmdpbnMgaW4gdGhlIGNvbnRhaW5pbmcgYmxvY2sncyBibG9jay1mbG93IGRpcmVjdGlvbi4KICAg
ICBlbnVtIEFwcGx5TGF5b3V0RGVsdGFNb2RlIHsgQXBwbHlMYXlvdXREZWx0YSwgRG9Ob3RBcHBs
eUxheW91dERlbHRhIH07Ci0gICAgaW50IGxvZ2ljYWxXaWR0aEZvckNoaWxkKFJlbmRlckJveCog
Y2hpbGQpIHsgcmV0dXJuIGlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCkgPyBjaGlsZC0+d2lkdGgo
KSA6IGNoaWxkLT5oZWlnaHQoKTsgfQotICAgIGludCBsb2dpY2FsSGVpZ2h0Rm9yQ2hpbGQoUmVu
ZGVyQm94KiBjaGlsZCkgeyByZXR1cm4gaXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKSA/IGNoaWxk
LT5oZWlnaHQoKSA6IGNoaWxkLT53aWR0aCgpOyB9Ci0gICAgaW50IGxvZ2ljYWxUb3BGb3JDaGls
ZChSZW5kZXJCb3gqIGNoaWxkKSB7IHJldHVybiBpc0hvcml6b250YWxXcml0aW5nTW9kZSgpID8g
Y2hpbGQtPnkoKSA6IGNoaWxkLT54KCk7IH0KLSAgICBpbnQgbG9naWNhbExlZnRGb3JDaGlsZChS
ZW5kZXJCb3gqIGNoaWxkKSB7IHJldHVybiBpc0hvcml6b250YWxXcml0aW5nTW9kZSgpID8gY2hp
bGQtPngoKSA6IGNoaWxkLT55KCk7IH0KKyAgICBMYXlvdXRVbml0IGxvZ2ljYWxXaWR0aEZvckNo
aWxkKFJlbmRlckJveCogY2hpbGQpIHsgcmV0dXJuIGlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCkg
PyBjaGlsZC0+d2lkdGgoKSA6IGNoaWxkLT5oZWlnaHQoKTsgfQorICAgIExheW91dFVuaXQgbG9n
aWNhbEhlaWdodEZvckNoaWxkKFJlbmRlckJveCogY2hpbGQpIHsgcmV0dXJuIGlzSG9yaXpvbnRh
bFdyaXRpbmdNb2RlKCkgPyBjaGlsZC0+aGVpZ2h0KCkgOiBjaGlsZC0+d2lkdGgoKTsgfQorICAg
IExheW91dFVuaXQgbG9naWNhbFRvcEZvckNoaWxkKFJlbmRlckJveCogY2hpbGQpIHsgcmV0dXJu
IGlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCkgPyBjaGlsZC0+eSgpIDogY2hpbGQtPngoKTsgfQor
ICAgIExheW91dFVuaXQgbG9naWNhbExlZnRGb3JDaGlsZChSZW5kZXJCb3gqIGNoaWxkKSB7IHJl
dHVybiBpc0hvcml6b250YWxXcml0aW5nTW9kZSgpID8gY2hpbGQtPngoKSA6IGNoaWxkLT55KCk7
IH0KICAgICB2b2lkIHNldExvZ2ljYWxMZWZ0Rm9yQ2hpbGQoUmVuZGVyQm94KiBjaGlsZCwgTGF5
b3V0VW5pdCBsb2dpY2FsTGVmdCwgQXBwbHlMYXlvdXREZWx0YU1vZGUgPSBEb05vdEFwcGx5TGF5
b3V0RGVsdGEpOwogICAgIHZvaWQgc2V0TG9naWNhbFRvcEZvckNoaWxkKFJlbmRlckJveCogY2hp
bGQsIExheW91dFVuaXQgbG9naWNhbFRvcCwgQXBwbHlMYXlvdXREZWx0YU1vZGUgPSBEb05vdEFw
cGx5TGF5b3V0RGVsdGEpOwogICAgIExheW91dFVuaXQgbWFyZ2luQmVmb3JlRm9yQ2hpbGQoUmVu
ZGVyQm94TW9kZWxPYmplY3QqIGNoaWxkKSBjb25zdDsKQEAgLTIxOSwzNSArMjE5LDM1IEBAIHB1
YmxpYzoKICAgICB2b2lkIHNldE1hcmdpbkVuZEZvckNoaWxkKFJlbmRlckJveCogY2hpbGQsIExh
eW91dFVuaXQpOwogICAgIHZvaWQgc2V0TWFyZ2luQmVmb3JlRm9yQ2hpbGQoUmVuZGVyQm94KiBj
aGlsZCwgTGF5b3V0VW5pdCk7CiAgICAgdm9pZCBzZXRNYXJnaW5BZnRlckZvckNoaWxkKFJlbmRl
ckJveCogY2hpbGQsIExheW91dFVuaXQpOwotICAgIGludCBjb2xsYXBzZWRNYXJnaW5CZWZvcmVG
b3JDaGlsZChSZW5kZXJCb3gqIGNoaWxkKSBjb25zdDsKLSAgICBpbnQgY29sbGFwc2VkTWFyZ2lu
QWZ0ZXJGb3JDaGlsZChSZW5kZXJCb3gqIGNoaWxkKSBjb25zdDsKKyAgICBMYXlvdXRVbml0IGNv
bGxhcHNlZE1hcmdpbkJlZm9yZUZvckNoaWxkKFJlbmRlckJveCogY2hpbGQpIGNvbnN0OworICAg
IExheW91dFVuaXQgY29sbGFwc2VkTWFyZ2luQWZ0ZXJGb3JDaGlsZChSZW5kZXJCb3gqIGNoaWxk
KSBjb25zdDsKIAogICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVGaXJzdExldHRlcigpOwogCiAgICAg
Y2xhc3MgTWFyZ2luVmFsdWVzIHsKICAgICBwdWJsaWM6Ci0gICAgICAgIE1hcmdpblZhbHVlcyhp
bnQgYmVmb3JlUG9zLCBpbnQgYmVmb3JlTmVnLCBpbnQgYWZ0ZXJQb3MsIGludCBhZnRlck5lZykK
KyAgICAgICAgTWFyZ2luVmFsdWVzKExheW91dFVuaXQgYmVmb3JlUG9zLCBMYXlvdXRVbml0IGJl
Zm9yZU5lZywgTGF5b3V0VW5pdCBhZnRlclBvcywgTGF5b3V0VW5pdCBhZnRlck5lZykKICAgICAg
ICAgICAgIDogbV9wb3NpdGl2ZU1hcmdpbkJlZm9yZShiZWZvcmVQb3MpCiAgICAgICAgICAgICAs
IG1fbmVnYXRpdmVNYXJnaW5CZWZvcmUoYmVmb3JlTmVnKQogICAgICAgICAgICAgLCBtX3Bvc2l0
aXZlTWFyZ2luQWZ0ZXIoYWZ0ZXJQb3MpCiAgICAgICAgICAgICAsIG1fbmVnYXRpdmVNYXJnaW5B
ZnRlcihhZnRlck5lZykKICAgICAgICAgeyB9CiAgICAgICAgIAotICAgICAgICBpbnQgcG9zaXRp
dmVNYXJnaW5CZWZvcmUoKSBjb25zdCB7IHJldHVybiBtX3Bvc2l0aXZlTWFyZ2luQmVmb3JlOyB9
Ci0gICAgICAgIGludCBuZWdhdGl2ZU1hcmdpbkJlZm9yZSgpIGNvbnN0IHsgcmV0dXJuIG1fbmVn
YXRpdmVNYXJnaW5CZWZvcmU7IH0KLSAgICAgICAgaW50IHBvc2l0aXZlTWFyZ2luQWZ0ZXIoKSBj
b25zdCB7IHJldHVybiBtX3Bvc2l0aXZlTWFyZ2luQWZ0ZXI7IH0KLSAgICAgICAgaW50IG5lZ2F0
aXZlTWFyZ2luQWZ0ZXIoKSBjb25zdCB7IHJldHVybiBtX25lZ2F0aXZlTWFyZ2luQWZ0ZXI7IH0K
LSAgICAgICAgCi0gICAgICAgIHZvaWQgc2V0UG9zaXRpdmVNYXJnaW5CZWZvcmUoaW50IHBvcykg
eyBtX3Bvc2l0aXZlTWFyZ2luQmVmb3JlID0gcG9zOyB9Ci0gICAgICAgIHZvaWQgc2V0TmVnYXRp
dmVNYXJnaW5CZWZvcmUoaW50IG5lZykgeyBtX25lZ2F0aXZlTWFyZ2luQmVmb3JlID0gbmVnOyB9
Ci0gICAgICAgIHZvaWQgc2V0UG9zaXRpdmVNYXJnaW5BZnRlcihpbnQgcG9zKSB7IG1fcG9zaXRp
dmVNYXJnaW5BZnRlciA9IHBvczsgfQotICAgICAgICB2b2lkIHNldE5lZ2F0aXZlTWFyZ2luQWZ0
ZXIoaW50IG5lZykgeyBtX25lZ2F0aXZlTWFyZ2luQWZ0ZXIgPSBuZWc7IH0KKyAgICAgICAgTGF5
b3V0VW5pdCBwb3NpdGl2ZU1hcmdpbkJlZm9yZSgpIGNvbnN0IHsgcmV0dXJuIG1fcG9zaXRpdmVN
YXJnaW5CZWZvcmU7IH0KKyAgICAgICAgTGF5b3V0VW5pdCBuZWdhdGl2ZU1hcmdpbkJlZm9yZSgp
IGNvbnN0IHsgcmV0dXJuIG1fbmVnYXRpdmVNYXJnaW5CZWZvcmU7IH0KKyAgICAgICAgTGF5b3V0
VW5pdCBwb3NpdGl2ZU1hcmdpbkFmdGVyKCkgY29uc3QgeyByZXR1cm4gbV9wb3NpdGl2ZU1hcmdp
bkFmdGVyOyB9CisgICAgICAgIExheW91dFVuaXQgbmVnYXRpdmVNYXJnaW5BZnRlcigpIGNvbnN0
IHsgcmV0dXJuIG1fbmVnYXRpdmVNYXJnaW5BZnRlcjsgfQorICAgICAgICAKKyAgICAgICAgdm9p
ZCBzZXRQb3NpdGl2ZU1hcmdpbkJlZm9yZShMYXlvdXRVbml0IHBvcykgeyBtX3Bvc2l0aXZlTWFy
Z2luQmVmb3JlID0gcG9zOyB9CisgICAgICAgIHZvaWQgc2V0TmVnYXRpdmVNYXJnaW5CZWZvcmUo
TGF5b3V0VW5pdCBuZWcpIHsgbV9uZWdhdGl2ZU1hcmdpbkJlZm9yZSA9IG5lZzsgfQorICAgICAg
ICB2b2lkIHNldFBvc2l0aXZlTWFyZ2luQWZ0ZXIoTGF5b3V0VW5pdCBwb3MpIHsgbV9wb3NpdGl2
ZU1hcmdpbkFmdGVyID0gcG9zOyB9CisgICAgICAgIHZvaWQgc2V0TmVnYXRpdmVNYXJnaW5BZnRl
cihMYXlvdXRVbml0IG5lZykgeyBtX25lZ2F0aXZlTWFyZ2luQWZ0ZXIgPSBuZWc7IH0KICAgICAK
ICAgICBwcml2YXRlOgotICAgICAgICBpbnQgbV9wb3NpdGl2ZU1hcmdpbkJlZm9yZTsKLSAgICAg
ICAgaW50IG1fbmVnYXRpdmVNYXJnaW5CZWZvcmU7Ci0gICAgICAgIGludCBtX3Bvc2l0aXZlTWFy
Z2luQWZ0ZXI7Ci0gICAgICAgIGludCBtX25lZ2F0aXZlTWFyZ2luQWZ0ZXI7CisgICAgICAgIExh
eW91dFVuaXQgbV9wb3NpdGl2ZU1hcmdpbkJlZm9yZTsKKyAgICAgICAgTGF5b3V0VW5pdCBtX25l
Z2F0aXZlTWFyZ2luQmVmb3JlOworICAgICAgICBMYXlvdXRVbml0IG1fcG9zaXRpdmVNYXJnaW5B
ZnRlcjsKKyAgICAgICAgTGF5b3V0VW5pdCBtX25lZ2F0aXZlTWFyZ2luQWZ0ZXI7CiAgICAgfTsK
ICAgICBNYXJnaW5WYWx1ZXMgbWFyZ2luVmFsdWVzRm9yQ2hpbGQoUmVuZGVyQm94KiBjaGlsZCk7
CiAKQEAgLTI4NywxMyArMjg3LDEzIEBAIHByb3RlY3RlZDoKICAgICB9CiAgICAgdm9pZCBtb3Zl
Q2hpbGRyZW5UbyhSZW5kZXJCbG9jayogdG8sIFJlbmRlck9iamVjdCogc3RhcnRDaGlsZCwgUmVu
ZGVyT2JqZWN0KiBlbmRDaGlsZCwgUmVuZGVyT2JqZWN0KiBiZWZvcmVDaGlsZCwgYm9vbCBmdWxs
UmVtb3ZlSW5zZXJ0ID0gZmFsc2UpOwogICAgIAotICAgIGludCBtYXhQb3NpdGl2ZU1hcmdpbkJl
Zm9yZSgpIGNvbnN0IHsgcmV0dXJuIG1fcmFyZURhdGEgPyBtX3JhcmVEYXRhLT5tX21hcmdpbnMu
cG9zaXRpdmVNYXJnaW5CZWZvcmUoKSA6IFJlbmRlckJsb2NrUmFyZURhdGE6OnBvc2l0aXZlTWFy
Z2luQmVmb3JlRGVmYXVsdCh0aGlzKTsgfQotICAgIGludCBtYXhOZWdhdGl2ZU1hcmdpbkJlZm9y
ZSgpIGNvbnN0IHsgcmV0dXJuIG1fcmFyZURhdGEgPyBtX3JhcmVEYXRhLT5tX21hcmdpbnMubmVn
YXRpdmVNYXJnaW5CZWZvcmUoKSA6IFJlbmRlckJsb2NrUmFyZURhdGE6Om5lZ2F0aXZlTWFyZ2lu
QmVmb3JlRGVmYXVsdCh0aGlzKTsgfQotICAgIGludCBtYXhQb3NpdGl2ZU1hcmdpbkFmdGVyKCkg
Y29uc3QgeyByZXR1cm4gbV9yYXJlRGF0YSA/IG1fcmFyZURhdGEtPm1fbWFyZ2lucy5wb3NpdGl2
ZU1hcmdpbkFmdGVyKCkgOiBSZW5kZXJCbG9ja1JhcmVEYXRhOjpwb3NpdGl2ZU1hcmdpbkFmdGVy
RGVmYXVsdCh0aGlzKTsgfQotICAgIGludCBtYXhOZWdhdGl2ZU1hcmdpbkFmdGVyKCkgY29uc3Qg
eyByZXR1cm4gbV9yYXJlRGF0YSA/IG1fcmFyZURhdGEtPm1fbWFyZ2lucy5uZWdhdGl2ZU1hcmdp
bkFmdGVyKCkgOiBSZW5kZXJCbG9ja1JhcmVEYXRhOjpuZWdhdGl2ZU1hcmdpbkFmdGVyRGVmYXVs
dCh0aGlzKTsgfQorICAgIExheW91dFVuaXQgbWF4UG9zaXRpdmVNYXJnaW5CZWZvcmUoKSBjb25z
dCB7IHJldHVybiBtX3JhcmVEYXRhID8gbV9yYXJlRGF0YS0+bV9tYXJnaW5zLnBvc2l0aXZlTWFy
Z2luQmVmb3JlKCkgOiBSZW5kZXJCbG9ja1JhcmVEYXRhOjpwb3NpdGl2ZU1hcmdpbkJlZm9yZURl
ZmF1bHQodGhpcyk7IH0KKyAgICBMYXlvdXRVbml0IG1heE5lZ2F0aXZlTWFyZ2luQmVmb3JlKCkg
Y29uc3QgeyByZXR1cm4gbV9yYXJlRGF0YSA/IG1fcmFyZURhdGEtPm1fbWFyZ2lucy5uZWdhdGl2
ZU1hcmdpbkJlZm9yZSgpIDogUmVuZGVyQmxvY2tSYXJlRGF0YTo6bmVnYXRpdmVNYXJnaW5CZWZv
cmVEZWZhdWx0KHRoaXMpOyB9CisgICAgTGF5b3V0VW5pdCBtYXhQb3NpdGl2ZU1hcmdpbkFmdGVy
KCkgY29uc3QgeyByZXR1cm4gbV9yYXJlRGF0YSA/IG1fcmFyZURhdGEtPm1fbWFyZ2lucy5wb3Np
dGl2ZU1hcmdpbkFmdGVyKCkgOiBSZW5kZXJCbG9ja1JhcmVEYXRhOjpwb3NpdGl2ZU1hcmdpbkFm
dGVyRGVmYXVsdCh0aGlzKTsgfQorICAgIExheW91dFVuaXQgbWF4TmVnYXRpdmVNYXJnaW5BZnRl
cigpIGNvbnN0IHsgcmV0dXJuIG1fcmFyZURhdGEgPyBtX3JhcmVEYXRhLT5tX21hcmdpbnMubmVn
YXRpdmVNYXJnaW5BZnRlcigpIDogUmVuZGVyQmxvY2tSYXJlRGF0YTo6bmVnYXRpdmVNYXJnaW5B
ZnRlckRlZmF1bHQodGhpcyk7IH0KICAgICAKLSAgICB2b2lkIHNldE1heE1hcmdpbkJlZm9yZVZh
bHVlcyhpbnQgcG9zLCBpbnQgbmVnKTsKLSAgICB2b2lkIHNldE1heE1hcmdpbkFmdGVyVmFsdWVz
KGludCBwb3MsIGludCBuZWcpOworICAgIHZvaWQgc2V0TWF4TWFyZ2luQmVmb3JlVmFsdWVzKExh
eW91dFVuaXQgcG9zLCBMYXlvdXRVbml0IG5lZyk7CisgICAgdm9pZCBzZXRNYXhNYXJnaW5BZnRl
clZhbHVlcyhMYXlvdXRVbml0IHBvcywgTGF5b3V0VW5pdCBuZWcpOwogCiAgICAgdm9pZCBpbml0
TWF4TWFyZ2luVmFsdWVzKCkKICAgICB7CkBAIC0zMTEsOCArMzExLDggQEAgcHJvdGVjdGVkOgog
ICAgIHZpcnR1YWwgdm9pZCBwYWludChQYWludEluZm8mLCBjb25zdCBMYXlvdXRQb2ludCYpOwog
ICAgIHZpcnR1YWwgdm9pZCBwYWludE9iamVjdChQYWludEluZm8mLCBjb25zdCBMYXlvdXRQb2lu
dCYpOwogCi0gICAgTGF5b3V0VW5pdCBsb2dpY2FsUmlnaHRPZmZzZXRGb3JMaW5lKExheW91dFVu
aXQgcG9zaXRpb24sIExheW91dFVuaXQgZml4ZWRPZmZzZXQsIGJvb2wgYXBwbHlUZXh0SW5kZW50
ID0gdHJ1ZSwgaW50KiBsb2dpY2FsSGVpZ2h0UmVtYWluaW5nID0gMCkgY29uc3Q7Ci0gICAgTGF5
b3V0VW5pdCBsb2dpY2FsTGVmdE9mZnNldEZvckxpbmUoTGF5b3V0VW5pdCBwb3NpdGlvbiwgTGF5
b3V0VW5pdCBmaXhlZE9mZnNldCwgYm9vbCBhcHBseVRleHRJbmRlbnQgPSB0cnVlLCBpbnQqIGxv
Z2ljYWxIZWlnaHRSZW1haW5pbmcgPSAwKSBjb25zdDsKKyAgICBMYXlvdXRVbml0IGxvZ2ljYWxS
aWdodE9mZnNldEZvckxpbmUoTGF5b3V0VW5pdCBwb3NpdGlvbiwgTGF5b3V0VW5pdCBmaXhlZE9m
ZnNldCwgYm9vbCBhcHBseVRleHRJbmRlbnQgPSB0cnVlLCBMYXlvdXRVbml0KiBsb2dpY2FsSGVp
Z2h0UmVtYWluaW5nID0gMCkgY29uc3Q7CisgICAgTGF5b3V0VW5pdCBsb2dpY2FsTGVmdE9mZnNl
dEZvckxpbmUoTGF5b3V0VW5pdCBwb3NpdGlvbiwgTGF5b3V0VW5pdCBmaXhlZE9mZnNldCwgYm9v
bCBhcHBseVRleHRJbmRlbnQgPSB0cnVlLCBMYXlvdXRVbml0KiBsb2dpY2FsSGVpZ2h0UmVtYWlu
aW5nID0gMCkgY29uc3Q7CiAKICAgICB2aXJ0dWFsIEVUZXh0QWxpZ24gdGV4dEFsaWdubWVudEZv
ckxpbmUoYm9vbCBlbmRzV2l0aFNvZnRCcmVhaykgY29uc3Q7CiAgICAgdmlydHVhbCB2b2lkIGFk
anVzdElubGluZURpcmVjdGlvbkxpbmVCb3VuZHMoaW50IC8qIGV4cGFuc2lvbk9wcG9ydHVuaXR5
Q291bnQgKi8sIGZsb2F0JiAvKiBsb2dpY2FsTGVmdCAqLywgZmxvYXQmIC8qIGxvZ2ljYWxXaWR0
aCAqLykgY29uc3QgeyB9CkBAIC0zMjEsOCArMzIxLDggQEAgcHJvdGVjdGVkOgogCiAgICAgdmly
dHVhbCB2b2lkIGNvbXB1dGVQcmVmZXJyZWRMb2dpY2FsV2lkdGhzKCk7CiAKLSAgICB2aXJ0dWFs
IGludCBmaXJzdExpbmVCb3hCYXNlbGluZSgpIGNvbnN0OwotICAgIHZpcnR1YWwgaW50IGxhc3RM
aW5lQm94QmFzZWxpbmUoKSBjb25zdDsKKyAgICB2aXJ0dWFsIExheW91dFVuaXQgZmlyc3RMaW5l
Qm94QmFzZWxpbmUoKSBjb25zdDsKKyAgICB2aXJ0dWFsIExheW91dFVuaXQgbGFzdExpbmVCb3hC
YXNlbGluZSgpIGNvbnN0OwogCiAgICAgdmlydHVhbCB2b2lkIHVwZGF0ZUhpdFRlc3RSZXN1bHQo
SGl0VGVzdFJlc3VsdCYsIGNvbnN0IExheW91dFBvaW50Jik7CiAKQEAgLTM1NSw4ICszNTUsOCBA
QCBwcm90ZWN0ZWQ6CiAgICAgLy8gT25seSB1c2VkIGJ5IFJlbmRlclNWR1RleHQsIHdoaWNoIGV4
cGxpY2l0ZWx5IG92ZXJyaWRlcyBSZW5kZXJCbG9jazo6bGF5b3V0QmxvY2soKSwgZG8gTk9UIHVz
ZSBmb3IgYW55dGhpbmcgZWxzZS4KICAgICB2b2lkIGZvcmNlTGF5b3V0SW5saW5lQ2hpbGRyZW4o
KQogICAgIHsKLSAgICAgICAgaW50IHJlcGFpbnRMb2dpY2FsVG9wID0gMDsKLSAgICAgICAgaW50
IHJlcGFpbnRMb2dpY2FsQm90dG9tID0gMDsKKyAgICAgICAgTGF5b3V0VW5pdCByZXBhaW50TG9n
aWNhbFRvcCA9IDA7CisgICAgICAgIExheW91dFVuaXQgcmVwYWludExvZ2ljYWxCb3R0b20gPSAw
OwogICAgICAgICBsYXlvdXRJbmxpbmVDaGlsZHJlbih0cnVlLCByZXBhaW50TG9naWNhbFRvcCwg
cmVwYWludExvZ2ljYWxCb3R0b20pOwogICAgIH0KICNlbmRpZgpAQCAtMzg5LDEwICszODksMTAg
QEAgcHJpdmF0ZToKICAgICB2aXJ0dWFsIHZvaWQgcmVwYWludE92ZXJoYW5naW5nRmxvYXRzKGJv
b2wgcGFpbnRBbGxEZXNjZW5kYW50cyk7CiAKICAgICB2b2lkIGxheW91dEJsb2NrQ2hpbGRyZW4o
Ym9vbCByZWxheW91dENoaWxkcmVuLCBMYXlvdXRVbml0JiBtYXhGbG9hdExvZ2ljYWxCb3R0b20p
OwotICAgIHZvaWQgbGF5b3V0SW5saW5lQ2hpbGRyZW4oYm9vbCByZWxheW91dENoaWxkcmVuLCBp
bnQmIHJlcGFpbnRMb2dpY2FsVG9wLCBpbnQmIHJlcGFpbnRMb2dpY2FsQm90dG9tKTsKKyAgICB2
b2lkIGxheW91dElubGluZUNoaWxkcmVuKGJvb2wgcmVsYXlvdXRDaGlsZHJlbiwgTGF5b3V0VW5p
dCYgcmVwYWludExvZ2ljYWxUb3AsIExheW91dFVuaXQmIHJlcGFpbnRMb2dpY2FsQm90dG9tKTsK
ICAgICBCaWRpUnVuKiBoYW5kbGVUcmFpbGluZ1NwYWNlcyhCaWRpUnVuTGlzdDxCaWRpUnVuPiYs
IEJpZGlDb250ZXh0Kik7CiAKLSAgICB2aXJ0dWFsIHZvaWQgYm9yZGVyRml0QWRqdXN0KEludFJl
Y3QmKSBjb25zdDsgLy8gU2hyaW5rIHRoZSBib3ggaW4gd2hpY2ggdGhlIGJvcmRlciBwYWludHMg
aWYgYm9yZGVyLWZpdCBpcyBzZXQuCisgICAgdmlydHVhbCB2b2lkIGJvcmRlckZpdEFkanVzdChM
YXlvdXRSZWN0JikgY29uc3Q7IC8vIFNocmluayB0aGUgYm94IGluIHdoaWNoIHRoZSBib3JkZXIg
cGFpbnRzIGlmIGJvcmRlci1maXQgaXMgc2V0LgogCiAgICAgdmlydHVhbCB2b2lkIHVwZGF0ZUJl
Zm9yZUFmdGVyQ29udGVudChQc2V1ZG9JZCk7CiAKQEAgLTQ0MSw3ICs0NDEsNyBAQCBwcml2YXRl
OgogICAgICAgICAgICAgICAgIG1fdHlwZSA9IEZsb2F0UG9zaXRpb25lZDsKICAgICAgICAgfQog
Ci0gICAgICAgIEZsb2F0aW5nT2JqZWN0KFR5cGUgdHlwZSwgY29uc3QgSW50UmVjdCYgZnJhbWVS
ZWN0KQorICAgICAgICBGbG9hdGluZ09iamVjdChUeXBlIHR5cGUsIGNvbnN0IExheW91dFJlY3Qm
IGZyYW1lUmVjdCkKICAgICAgICAgICAgIDogbV9yZW5kZXJlcigwKQogICAgICAgICAgICAgLCBt
X29yaWdpbmF0aW5nTGluZSgwKQogICAgICAgICAgICAgLCBtX2ZyYW1lUmVjdChmcmFtZVJlY3Qp
CkBAIC00NjIsMjAgKzQ2MiwyMCBAQCBwcml2YXRlOgogICAgICAgICBib29sIGlzUGxhY2VkKCkg
Y29uc3QgeyByZXR1cm4gbV9pc1BsYWNlZDsgfQogICAgICAgICB2b2lkIHNldElzUGxhY2VkKGJv
b2wgcGxhY2VkID0gdHJ1ZSkgeyBtX2lzUGxhY2VkID0gcGxhY2VkOyB9CiAKLSAgICAgICAgaW50
IHgoKSBjb25zdCB7IEFTU0VSVChpc1BsYWNlZCgpKTsgcmV0dXJuIG1fZnJhbWVSZWN0LngoKTsg
fQotICAgICAgICBpbnQgbWF4WCgpIGNvbnN0IHsgQVNTRVJUKGlzUGxhY2VkKCkpOyByZXR1cm4g
bV9mcmFtZVJlY3QubWF4WCgpOyB9Ci0gICAgICAgIGludCB5KCkgY29uc3QgeyBBU1NFUlQoaXNQ
bGFjZWQoKSk7IHJldHVybiBtX2ZyYW1lUmVjdC55KCk7IH0KLSAgICAgICAgaW50IG1heFkoKSBj
b25zdCB7IEFTU0VSVChpc1BsYWNlZCgpKTsgcmV0dXJuIG1fZnJhbWVSZWN0Lm1heFkoKTsgfQot
ICAgICAgICBpbnQgd2lkdGgoKSBjb25zdCB7IHJldHVybiBtX2ZyYW1lUmVjdC53aWR0aCgpOyB9
Ci0gICAgICAgIGludCBoZWlnaHQoKSBjb25zdCB7IHJldHVybiBtX2ZyYW1lUmVjdC5oZWlnaHQo
KTsgfQotCi0gICAgICAgIHZvaWQgc2V0WChpbnQgeCkgeyBBU1NFUlQoIWlzSW5QbGFjZWRUcmVl
KCkpOyBtX2ZyYW1lUmVjdC5zZXRYKHgpOyB9Ci0gICAgICAgIHZvaWQgc2V0WShpbnQgeSkgeyBB
U1NFUlQoIWlzSW5QbGFjZWRUcmVlKCkpOyBtX2ZyYW1lUmVjdC5zZXRZKHkpOyB9Ci0gICAgICAg
IHZvaWQgc2V0V2lkdGgoaW50IHdpZHRoKSB7IEFTU0VSVCghaXNJblBsYWNlZFRyZWUoKSk7IG1f
ZnJhbWVSZWN0LnNldFdpZHRoKHdpZHRoKTsgfQotICAgICAgICB2b2lkIHNldEhlaWdodChpbnQg
aGVpZ2h0KSB7IEFTU0VSVCghaXNJblBsYWNlZFRyZWUoKSk7IG1fZnJhbWVSZWN0LnNldEhlaWdo
dChoZWlnaHQpOyB9CisgICAgICAgIExheW91dFVuaXQgeCgpIGNvbnN0IHsgQVNTRVJUKGlzUGxh
Y2VkKCkpOyByZXR1cm4gbV9mcmFtZVJlY3QueCgpOyB9CisgICAgICAgIExheW91dFVuaXQgbWF4
WCgpIGNvbnN0IHsgQVNTRVJUKGlzUGxhY2VkKCkpOyByZXR1cm4gbV9mcmFtZVJlY3QubWF4WCgp
OyB9CisgICAgICAgIExheW91dFVuaXQgeSgpIGNvbnN0IHsgQVNTRVJUKGlzUGxhY2VkKCkpOyBy
ZXR1cm4gbV9mcmFtZVJlY3QueSgpOyB9CisgICAgICAgIExheW91dFVuaXQgbWF4WSgpIGNvbnN0
IHsgQVNTRVJUKGlzUGxhY2VkKCkpOyByZXR1cm4gbV9mcmFtZVJlY3QubWF4WSgpOyB9CisgICAg
ICAgIExheW91dFVuaXQgd2lkdGgoKSBjb25zdCB7IHJldHVybiBtX2ZyYW1lUmVjdC53aWR0aCgp
OyB9CisgICAgICAgIExheW91dFVuaXQgaGVpZ2h0KCkgY29uc3QgeyByZXR1cm4gbV9mcmFtZVJl
Y3QuaGVpZ2h0KCk7IH0KKworICAgICAgICB2b2lkIHNldFgoTGF5b3V0VW5pdCB4KSB7IEFTU0VS
VCghaXNJblBsYWNlZFRyZWUoKSk7IG1fZnJhbWVSZWN0LnNldFgoeCk7IH0KKyAgICAgICAgdm9p
ZCBzZXRZKExheW91dFVuaXQgeSkgeyBBU1NFUlQoIWlzSW5QbGFjZWRUcmVlKCkpOyBtX2ZyYW1l
UmVjdC5zZXRZKHkpOyB9CisgICAgICAgIHZvaWQgc2V0V2lkdGgoTGF5b3V0VW5pdCB3aWR0aCkg
eyBBU1NFUlQoIWlzSW5QbGFjZWRUcmVlKCkpOyBtX2ZyYW1lUmVjdC5zZXRXaWR0aCh3aWR0aCk7
IH0KKyAgICAgICAgdm9pZCBzZXRIZWlnaHQoTGF5b3V0VW5pdCBoZWlnaHQpIHsgQVNTRVJUKCFp
c0luUGxhY2VkVHJlZSgpKTsgbV9mcmFtZVJlY3Quc2V0SGVpZ2h0KGhlaWdodCk7IH0KIAotICAg
ICAgICBjb25zdCBJbnRSZWN0JiBmcmFtZVJlY3QoKSBjb25zdCB7IEFTU0VSVChpc1BsYWNlZCgp
KTsgcmV0dXJuIG1fZnJhbWVSZWN0OyB9Ci0gICAgICAgIHZvaWQgc2V0RnJhbWVSZWN0KGNvbnN0
IEludFJlY3QmIGZyYW1lUmVjdCkgeyBBU1NFUlQoIWlzSW5QbGFjZWRUcmVlKCkpOyBtX2ZyYW1l
UmVjdCA9IGZyYW1lUmVjdDsgfQorICAgICAgICBjb25zdCBMYXlvdXRSZWN0JiBmcmFtZVJlY3Qo
KSBjb25zdCB7IEFTU0VSVChpc1BsYWNlZCgpKTsgcmV0dXJuIG1fZnJhbWVSZWN0OyB9CisgICAg
ICAgIHZvaWQgc2V0RnJhbWVSZWN0KGNvbnN0IExheW91dFJlY3QmIGZyYW1lUmVjdCkgeyBBU1NF
UlQoIWlzSW5QbGFjZWRUcmVlKCkpOyBtX2ZyYW1lUmVjdCA9IGZyYW1lUmVjdDsgfQogCiAjaWZu
ZGVmIE5ERUJVRwogICAgICAgICBib29sIGlzSW5QbGFjZWRUcmVlKCkgY29uc3QgeyByZXR1cm4g
bV9pc0luUGxhY2VkVHJlZTsgfQpAQCAtNDg0LDcgKzQ4NCw3IEBAIHByaXZhdGU6CiAKICAgICAg
ICAgUmVuZGVyQm94KiBtX3JlbmRlcmVyOwogICAgICAgICBSb290SW5saW5lQm94KiBtX29yaWdp
bmF0aW5nTGluZTsKLSAgICAgICAgSW50UmVjdCBtX2ZyYW1lUmVjdDsKKyAgICAgICAgTGF5b3V0
UmVjdCBtX2ZyYW1lUmVjdDsKICAgICAgICAgaW50IG1fcGFnaW5hdGlvblN0cnV0OwogICAgICAg
ICB1bnNpZ25lZCBtX3R5cGUgOiAzOyAvLyBUeXBlIChsZWZ0L3JpZ2h0IGFsaWduZWQgb3IgcG9z
aXRpb25lZCkKICAgICAgICAgYm9vbCBtX3Nob3VsZFBhaW50IDogMTsKQEAgLTYxOCwxOSArNjE4
LDE5IEBAIHByaXZhdGU6CiAgICAgYm9vbCBwb3NpdGlvbmVkRmxvYXRzTmVlZFJlbGF5b3V0KCk7
CiAKICAgICB2b2lkIGNsZWFyRmxvYXRzKEJsb2NrTGF5b3V0UGFzcyk7Ci0gICAgaW50IGdldENs
ZWFyRGVsdGEoUmVuZGVyQm94KiBjaGlsZCwgaW50IHlQb3MpOworICAgIExheW91dFVuaXQgZ2V0
Q2xlYXJEZWx0YShSZW5kZXJCb3gqIGNoaWxkLCBMYXlvdXRVbml0IHlQb3MpOwogCiAgICAgdmly
dHVhbCBib29sIGF2b2lkc0Zsb2F0cygpIGNvbnN0OwogCiAgICAgYm9vbCBoYXNPdmVyaGFuZ2lu
Z0Zsb2F0cygpIHsgcmV0dXJuIHBhcmVudCgpICYmICFoYXNDb2x1bW5zKCkgJiYgY29udGFpbnNG
bG9hdHMoKSAmJiBsb3dlc3RGbG9hdExvZ2ljYWxCb3R0b21JbmNsdWRpbmdQb3NpdGlvbmVkRmxv
YXRzKCkgPiBsb2dpY2FsSGVpZ2h0KCk7IH0KICAgICBib29sIGhhc092ZXJoYW5naW5nRmxvYXQo
UmVuZGVyQm94Kik7Ci0gICAgdm9pZCBhZGRJbnRydWRpbmdGbG9hdHMoUmVuZGVyQmxvY2sqIHBy
ZXYsIGludCB4b2Zmc2V0LCBpbnQgeW9mZnNldCk7Ci0gICAgaW50IGFkZE92ZXJoYW5naW5nRmxv
YXRzKFJlbmRlckJsb2NrKiBjaGlsZCwgaW50IHhvZmZzZXQsIGludCB5b2Zmc2V0LCBib29sIG1h
a2VDaGlsZFBhaW50T3RoZXJGbG9hdHMpOworICAgIHZvaWQgYWRkSW50cnVkaW5nRmxvYXRzKFJl
bmRlckJsb2NrKiBwcmV2LCBMYXlvdXRVbml0IHhvZmZzZXQsIExheW91dFVuaXQgeW9mZnNldCk7
CisgICAgTGF5b3V0VW5pdCBhZGRPdmVyaGFuZ2luZ0Zsb2F0cyhSZW5kZXJCbG9jayogY2hpbGQs
IExheW91dFVuaXQgeG9mZnNldCwgTGF5b3V0VW5pdCB5b2Zmc2V0LCBib29sIG1ha2VDaGlsZFBh
aW50T3RoZXJGbG9hdHMpOwogCi0gICAgaW50IGxvd2VzdEZsb2F0TG9naWNhbEJvdHRvbSgpIGNv
bnN0IHsgcmV0dXJuIGxvd2VzdEZsb2F0TG9naWNhbEJvdHRvbShGbG9hdGluZ09iamVjdDo6Rmxv
YXRMZWZ0UmlnaHQpOyB9Ci0gICAgaW50IGxvd2VzdEZsb2F0TG9naWNhbEJvdHRvbUluY2x1ZGlu
Z1Bvc2l0aW9uZWRGbG9hdHMoKSBjb25zdCB7IHJldHVybiBsb3dlc3RGbG9hdExvZ2ljYWxCb3R0
b20oRmxvYXRpbmdPYmplY3Q6OkZsb2F0QWxsKTsgfQotICAgIGludCBsb3dlc3RGbG9hdExvZ2lj
YWxCb3R0b20oRmxvYXRpbmdPYmplY3Q6OlR5cGUpIGNvbnN0OwotICAgIGludCBuZXh0RmxvYXRM
b2dpY2FsQm90dG9tQmVsb3coaW50KSBjb25zdDsKKyAgICBMYXlvdXRVbml0IGxvd2VzdEZsb2F0
TG9naWNhbEJvdHRvbSgpIGNvbnN0IHsgcmV0dXJuIGxvd2VzdEZsb2F0TG9naWNhbEJvdHRvbShG
bG9hdGluZ09iamVjdDo6RmxvYXRMZWZ0UmlnaHQpOyB9CisgICAgTGF5b3V0VW5pdCBsb3dlc3RG
bG9hdExvZ2ljYWxCb3R0b21JbmNsdWRpbmdQb3NpdGlvbmVkRmxvYXRzKCkgY29uc3QgeyByZXR1
cm4gbG93ZXN0RmxvYXRMb2dpY2FsQm90dG9tKEZsb2F0aW5nT2JqZWN0OjpGbG9hdEFsbCk7IH0K
KyAgICBMYXlvdXRVbml0IGxvd2VzdEZsb2F0TG9naWNhbEJvdHRvbShGbG9hdGluZ09iamVjdDo6
VHlwZSkgY29uc3Q7CisgICAgTGF5b3V0VW5pdCBuZXh0RmxvYXRMb2dpY2FsQm90dG9tQmVsb3co
TGF5b3V0VW5pdCkgY29uc3Q7CiAgICAgCiAgICAgdmlydHVhbCBib29sIGhpdFRlc3RDb2x1bW5z
KGNvbnN0IEhpdFRlc3RSZXF1ZXN0JiwgSGl0VGVzdFJlc3VsdCYsIGNvbnN0IExheW91dFBvaW50
JiBwb2ludEluQ29udGFpbmVyLCBjb25zdCBMYXlvdXRQb2ludCYgYWNjdW11bGF0ZWRPZmZzZXQs
IEhpdFRlc3RBY3Rpb24pOwogICAgIHZpcnR1YWwgYm9vbCBoaXRUZXN0Q29udGVudHMoY29uc3Qg
SGl0VGVzdFJlcXVlc3QmLCBIaXRUZXN0UmVzdWx0JiwgY29uc3QgTGF5b3V0UG9pbnQmIHBvaW50
SW5Db250YWluZXIsIGNvbnN0IExheW91dFBvaW50JiBhY2N1bXVsYXRlZE9mZnNldCwgSGl0VGVz
dEFjdGlvbik7CkBAIC02NDUsNyArNjQ1LDcgQEAgcHJpdmF0ZToKICAgICAvLyBjaGlsZHJlbi4K
ICAgICB2aXJ0dWFsIFJlbmRlckJsb2NrKiBmaXJzdExpbmVCbG9jaygpIGNvbnN0OwogCi0gICAg
dmlydHVhbCBJbnRSZWN0IHJlY3RXaXRoT3V0bGluZUZvclJlcGFpbnQoUmVuZGVyQm94TW9kZWxP
YmplY3QqIHJlcGFpbnRDb250YWluZXIsIGludCBvdXRsaW5lV2lkdGgpIGNvbnN0OworICAgIHZp
cnR1YWwgTGF5b3V0UmVjdCByZWN0V2l0aE91dGxpbmVGb3JSZXBhaW50KFJlbmRlckJveE1vZGVs
T2JqZWN0KiByZXBhaW50Q29udGFpbmVyLCBMYXlvdXRVbml0IG91dGxpbmVXaWR0aCkgY29uc3Q7
CiAgICAgdmlydHVhbCBSZW5kZXJTdHlsZSogb3V0bGluZVN0eWxlRm9yUmVwYWludCgpIGNvbnN0
OwogICAgIAogICAgIHZpcnR1YWwgUmVuZGVyT2JqZWN0KiBob3ZlckFuY2VzdG9yKCkgY29uc3Q7
CkBAIC02NzQsMTYgKzY3NCwxNiBAQCBwcml2YXRlOgogCiAgICAgTGF5b3V0VW5pdCBkZXNpcmVk
Q29sdW1uV2lkdGgoKSBjb25zdDsKICAgICB1bnNpZ25lZCBkZXNpcmVkQ29sdW1uQ291bnQoKSBj
b25zdDsKLSAgICB2b2lkIHNldERlc2lyZWRDb2x1bW5Db3VudEFuZFdpZHRoKGludCBjb3VudCwg
aW50IHdpZHRoKTsKKyAgICB2b2lkIHNldERlc2lyZWRDb2x1bW5Db3VudEFuZFdpZHRoKGludCBj
b3VudCwgTGF5b3V0VW5pdCB3aWR0aCk7CiAKLSAgICB2b2lkIHBhaW50Q29udGludWF0aW9uT3V0
bGluZXMoUGFpbnRJbmZvJiwgY29uc3QgSW50UG9pbnQmKTsKKyAgICB2b2lkIHBhaW50Q29udGlu
dWF0aW9uT3V0bGluZXMoUGFpbnRJbmZvJiwgY29uc3QgTGF5b3V0UG9pbnQmKTsKIAotICAgIHZp
cnR1YWwgSW50UmVjdCBsb2NhbENhcmV0UmVjdChJbmxpbmVCb3gqLCBpbnQgY2FyZXRPZmZzZXQs
IGludCogZXh0cmFXaWR0aFRvRW5kT2ZMaW5lID0gMCk7CisgICAgdmlydHVhbCBMYXlvdXRSZWN0
IGxvY2FsQ2FyZXRSZWN0KElubGluZUJveCosIGludCBjYXJldE9mZnNldCwgTGF5b3V0VW5pdCog
ZXh0cmFXaWR0aFRvRW5kT2ZMaW5lID0gMCk7CiAKLSAgICB2b2lkIGFkanVzdFBvaW50VG9Db2x1
bW5Db250ZW50cyhJbnRQb2ludCYpIGNvbnN0OwotICAgIHZvaWQgYWRqdXN0Rm9yQm9yZGVyRml0
KGludCB4LCBpbnQmIGxlZnQsIGludCYgcmlnaHQpIGNvbnN0OyAvLyBIZWxwZXIgZnVuY3Rpb24g
Zm9yIGJvcmRlckZpdEFkanVzdAorICAgIHZvaWQgYWRqdXN0UG9pbnRUb0NvbHVtbkNvbnRlbnRz
KExheW91dFBvaW50JikgY29uc3Q7CisgICAgdm9pZCBhZGp1c3RGb3JCb3JkZXJGaXQoTGF5b3V0
VW5pdCB4LCBMYXlvdXRVbml0JiBsZWZ0LCBMYXlvdXRVbml0JiByaWdodCkgY29uc3Q7IC8vIEhl
bHBlciBmdW5jdGlvbiBmb3IgYm9yZGVyRml0QWRqdXN0CiAKLSAgICB2b2lkIG1hcmtMaW5lc0Rp
cnR5SW5CbG9ja1JhbmdlKGludCBsb2dpY2FsVG9wLCBpbnQgbG9naWNhbEJvdHRvbSwgUm9vdElu
bGluZUJveCogaGlnaGVzdCA9IDApOworICAgIHZvaWQgbWFya0xpbmVzRGlydHlJbkJsb2NrUmFu
Z2UoTGF5b3V0VW5pdCBsb2dpY2FsVG9wLCBMYXlvdXRVbml0IGxvZ2ljYWxCb3R0b20sIFJvb3RJ
bmxpbmVCb3gqIGhpZ2hlc3QgPSAwKTsKIAogICAgIHZvaWQgbmV3TGluZShFQ2xlYXIpOwogCkBA
IC02OTEsNyArNjkxLDcgQEAgcHJpdmF0ZToKICAgICBWaXNpYmxlUG9zaXRpb24gcG9zaXRpb25G
b3JQb2ludFdpdGhJbmxpbmVDaGlsZHJlbihjb25zdCBMYXlvdXRQb2ludCYpOwogCiAgICAgLy8g
QWRqdXN0IGZyb20gcGFpbnRpbmcgb2Zmc2V0cyB0byB0aGUgbG9jYWwgY29vcmRzIG9mIHRoaXMg
cmVuZGVyZXIKLSAgICB2b2lkIG9mZnNldEZvckNvbnRlbnRzKEludFBvaW50JikgY29uc3Q7Cisg
ICAgdm9pZCBvZmZzZXRGb3JDb250ZW50cyhMYXlvdXRQb2ludCYpIGNvbnN0OwogCiAgICAgdm9p
ZCBjYWxjQ29sdW1uV2lkdGgoKTsKICAgICBib29sIGxheW91dENvbHVtbnMoYm9vbCBoYXNTcGVj
aWZpZWRQYWdlTG9naWNhbEhlaWdodCwgaW50IHBhZ2VMb2dpY2FsSGVpZ2h0LCBMYXlvdXRTdGF0
ZU1haW50YWluZXImKTsKQEAgLTczOCw4ICs3MzgsOCBAQCBwcml2YXRlOgogICAgICAgICBib29s
IG1fZGV0ZXJtaW5lZE1hcmdpbkJlZm9yZVF1aXJrIDogMTsKIAogICAgICAgICAvLyBUaGVzZSBm
bGFncyB0cmFjayB0aGUgcHJldmlvdXMgbWF4aW1hbCBwb3NpdGl2ZSBhbmQgbmVnYXRpdmUgbWFy
Z2lucy4KLSAgICAgICAgaW50IG1fcG9zaXRpdmVNYXJnaW47Ci0gICAgICAgIGludCBtX25lZ2F0
aXZlTWFyZ2luOworICAgICAgICBMYXlvdXRVbml0IG1fcG9zaXRpdmVNYXJnaW47CisgICAgICAg
IExheW91dFVuaXQgbV9uZWdhdGl2ZU1hcmdpbjsKIAogICAgIHB1YmxpYzoKICAgICAgICAgTWFy
Z2luSW5mbyhSZW5kZXJCbG9jayosIExheW91dFVuaXQgYmVmb3JlQm9yZGVyUGFkZGluZywgTGF5
b3V0VW5pdCBhZnRlckJvcmRlclBhZGRpbmcpOwpAQCAtNzY2LDkgKzc2Niw5IEBAIHByaXZhdGU6
CiAgICAgICAgIGJvb2wgZGV0ZXJtaW5lZE1hcmdpbkJlZm9yZVF1aXJrKCkgY29uc3QgeyByZXR1
cm4gbV9kZXRlcm1pbmVkTWFyZ2luQmVmb3JlUXVpcms7IH0KICAgICAgICAgYm9vbCBtYXJnaW5C
ZWZvcmVRdWlyaygpIGNvbnN0IHsgcmV0dXJuIG1fbWFyZ2luQmVmb3JlUXVpcms7IH0KICAgICAg
ICAgYm9vbCBtYXJnaW5BZnRlclF1aXJrKCkgY29uc3QgeyByZXR1cm4gbV9tYXJnaW5BZnRlclF1
aXJrOyB9Ci0gICAgICAgIGludCBwb3NpdGl2ZU1hcmdpbigpIGNvbnN0IHsgcmV0dXJuIG1fcG9z
aXRpdmVNYXJnaW47IH0KLSAgICAgICAgaW50IG5lZ2F0aXZlTWFyZ2luKCkgY29uc3QgeyByZXR1
cm4gbV9uZWdhdGl2ZU1hcmdpbjsgfQotICAgICAgICBpbnQgbWFyZ2luKCkgY29uc3QgeyByZXR1
cm4gbV9wb3NpdGl2ZU1hcmdpbiAtIG1fbmVnYXRpdmVNYXJnaW47IH0KKyAgICAgICAgTGF5b3V0
VW5pdCBwb3NpdGl2ZU1hcmdpbigpIGNvbnN0IHsgcmV0dXJuIG1fcG9zaXRpdmVNYXJnaW47IH0K
KyAgICAgICAgTGF5b3V0VW5pdCBuZWdhdGl2ZU1hcmdpbigpIGNvbnN0IHsgcmV0dXJuIG1fbmVn
YXRpdmVNYXJnaW47IH0KKyAgICAgICAgTGF5b3V0VW5pdCBtYXJnaW4oKSBjb25zdCB7IHJldHVy
biBtX3Bvc2l0aXZlTWFyZ2luIC0gbV9uZWdhdGl2ZU1hcmdpbjsgfQogICAgIH07CiAKICAgICB2
b2lkIGxheW91dEJsb2NrQ2hpbGQoUmVuZGVyQm94KiBjaGlsZCwgTWFyZ2luSW5mbyYsIExheW91
dFVuaXQmIHByZXZpb3VzRmxvYXRMb2dpY2FsQm90dG9tLCBMYXlvdXRVbml0JiBtYXhGbG9hdExv
Z2ljYWxCb3R0b20pOwpAQCAtNzgyLDcgKzc4Miw3IEBAIHByaXZhdGU6CiAgICAgTGF5b3V0VW5p
dCBjbGVhckZsb2F0c0lmTmVlZGVkKFJlbmRlckJveCogY2hpbGQsIE1hcmdpbkluZm8mLCBpbnQg
b2xkVG9wUG9zTWFyZ2luLCBpbnQgb2xkVG9wTmVnTWFyZ2luLCBpbnQgeVBvcyk7CiAgICAgTGF5
b3V0VW5pdCBlc3RpbWF0ZUxvZ2ljYWxUb3BQb3NpdGlvbihSZW5kZXJCb3gqIGNoaWxkLCBjb25z
dCBNYXJnaW5JbmZvJik7CiAgICAgdm9pZCBkZXRlcm1pbmVMb2dpY2FsTGVmdFBvc2l0aW9uRm9y
Q2hpbGQoUmVuZGVyQm94KiBjaGlsZCk7Ci0gICAgdm9pZCBoYW5kbGVBZnRlclNpZGVPZkJsb2Nr
KGludCB0b3AsIGludCBib3R0b20sIE1hcmdpbkluZm8mKTsKKyAgICB2b2lkIGhhbmRsZUFmdGVy
U2lkZU9mQmxvY2soTGF5b3V0VW5pdCB0b3AsIExheW91dFVuaXQgYm90dG9tLCBNYXJnaW5JbmZv
Jik7CiAgICAgdm9pZCBzZXRDb2xsYXBzZWRCb3R0b21NYXJnaW4oY29uc3QgTWFyZ2luSW5mbyYp
OwogICAgIC8vIEVuZCBoZWxwZXIgZnVuY3Rpb25zIGFuZCBzdHJ1Y3RzIHVzZWQgYnkgbGF5b3V0
QmxvY2tDaGlsZHJlbi4KIApAQCAtODAwLDEzICs4MDAsMTMgQEAgcHJpdmF0ZToKICAgICAvLyB3
aWxsIG5vdC4KICAgICAvLwogICAgIC8vIEZvciBhIHBhZ2UgaGVpZ2h0IG9mIDgwMHB4LCB0aGUg
Zmlyc3QgZnVuY3Rpb24gd2lsbCByZXR1cm4gODAwIGlmIHRoZSB2YWx1ZSBwYXNzZWQgaW4gaXMg
MC4gVGhlIHNlY29uZCBmdW5jdGlvbiB3aWxsIHNpbXBseSByZXR1cm4gMC4KLSAgICBpbnQgbmV4
dFBhZ2VMb2dpY2FsVG9wRXhjbHVkaW5nQm91bmRhcnlQb2ludChpbnQgbG9naWNhbE9mZnNldCkg
Y29uc3Q7Ci0gICAgaW50IG5leHRQYWdlTG9naWNhbFRvcEluY2x1ZGluZ0JvdW5kYXJ5UG9pbnQo
aW50IGxvZ2ljYWxPZmZzZXQpIGNvbnN0OworICAgIExheW91dFVuaXQgbmV4dFBhZ2VMb2dpY2Fs
VG9wRXhjbHVkaW5nQm91bmRhcnlQb2ludChMYXlvdXRVbml0IGxvZ2ljYWxPZmZzZXQpIGNvbnN0
OworICAgIExheW91dFVuaXQgbmV4dFBhZ2VMb2dpY2FsVG9wSW5jbHVkaW5nQm91bmRhcnlQb2lu
dChMYXlvdXRVbml0IGxvZ2ljYWxPZmZzZXQpIGNvbnN0OwogCiAgICAgaW50IGFwcGx5QmVmb3Jl
QnJlYWsoUmVuZGVyQm94KiBjaGlsZCwgaW50IGxvZ2ljYWxPZmZzZXQpOyAvLyBJZiB0aGUgY2hp
bGQgaGFzIGEgYmVmb3JlIGJyZWFrLCB0aGVuIHJldHVybiBhIG5ldyB5UG9zIHRoYXQgc2hpZnRz
IHRvIHRoZSB0b3Agb2YgdGhlIG5leHQgcGFnZS9jb2x1bW4uCiAgICAgaW50IGFwcGx5QWZ0ZXJC
cmVhayhSZW5kZXJCb3gqIGNoaWxkLCBpbnQgbG9naWNhbE9mZnNldCwgTWFyZ2luSW5mbyYgbWFy
Z2luSW5mbyk7IC8vIElmIHRoZSBjaGlsZCBoYXMgYW4gYWZ0ZXIgYnJlYWssIHRoZW4gcmV0dXJu
IGEgbmV3IG9mZnNldCB0aGF0IHNoaWZ0cyB0byB0aGUgdG9wIG9mIHRoZSBuZXh0IHBhZ2UvY29s
dW1uLgotICAgIGludCBhZGp1c3RGb3JVbnNwbGl0dGFibGVDaGlsZChSZW5kZXJCb3gqIGNoaWxk
LCBpbnQgbG9naWNhbE9mZnNldCwgYm9vbCBpbmNsdWRlTWFyZ2lucyA9IGZhbHNlKTsgLy8gSWYg
dGhlIGNoaWxkIGlzIHVuc3BsaXR0YWJsZSBhbmQgY2FuJ3QgZml0IG9uIHRoZSBjdXJyZW50IHBh
Z2UsIHJldHVybiB0aGUgdG9wIG9mIHRoZSBuZXh0IHBhZ2UvY29sdW1uLgotICAgIHZvaWQgYWRq
dXN0TGluZVBvc2l0aW9uRm9yUGFnaW5hdGlvbihSb290SW5saW5lQm94KiwgaW50JiBkZWx0YU9m
ZnNldCk7IC8vIENvbXB1dGVzIGEgZGVsdGFPZmZzZXQgdmFsdWUgdGhhdCBwdXQgYSBsaW5lIGF0
IHRoZSB0b3Agb2YgdGhlIG5leHQgcGFnZSBpZiBpdCBkb2Vzbid0IGZpdCBvbiB0aGUgY3VycmVu
dCBwYWdlLgorICAgIExheW91dFVuaXQgYWRqdXN0Rm9yVW5zcGxpdHRhYmxlQ2hpbGQoUmVuZGVy
Qm94KiBjaGlsZCwgTGF5b3V0VW5pdCBsb2dpY2FsT2Zmc2V0LCBib29sIGluY2x1ZGVNYXJnaW5z
ID0gZmFsc2UpOyAvLyBJZiB0aGUgY2hpbGQgaXMgdW5zcGxpdHRhYmxlIGFuZCBjYW4ndCBmaXQg
b24gdGhlIGN1cnJlbnQgcGFnZSwgcmV0dXJuIHRoZSB0b3Agb2YgdGhlIG5leHQgcGFnZS9jb2x1
bW4uCisgICAgdm9pZCBhZGp1c3RMaW5lUG9zaXRpb25Gb3JQYWdpbmF0aW9uKFJvb3RJbmxpbmVC
b3gqLCBMYXlvdXRVbml0JiBkZWx0YU9mZnNldCk7IC8vIENvbXB1dGVzIGEgZGVsdGFPZmZzZXQg
dmFsdWUgdGhhdCBwdXQgYSBsaW5lIGF0IHRoZSB0b3Agb2YgdGhlIG5leHQgcGFnZSBpZiBpdCBk
b2Vzbid0IGZpdCBvbiB0aGUgY3VycmVudCBwYWdlLgogCiAgICAgc3RydWN0IEZsb2F0aW5nT2Jq
ZWN0SGFzaEZ1bmN0aW9ucyB7CiAgICAgICAgIHN0YXRpYyB1bnNpZ25lZCBoYXNoKEZsb2F0aW5n
T2JqZWN0KiBrZXkpIHsgcmV0dXJuIERlZmF1bHRIYXNoPFJlbmRlckJveCo+OjpIYXNoOjpoYXNo
KGtleS0+bV9yZW5kZXJlcik7IH0K
</data>

          </attachment>
      

    </bug>

</bugzilla>