<?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>78970</bug_id>
          
          <creation_ts>2012-02-18 12:33:33 -0800</creation_ts>
          <short_desc>[GTK] [EFL] Collapse duplicate WebGL support code</short_desc>
          <delta_ts>2012-02-20 19:10:07 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebKitGTK</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>78968</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Martin Robinson">mrobinson</reporter>
          <assigned_to name="Martin Robinson">mrobinson</assigned_to>
          <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>559809</commentid>
    <comment_count>0</comment_count>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2012-02-18 12:33:33 -0800</bug_when>
    <thetext>GraphicsContext3DPrivate and DrawingBuffer can be shared between both EFL and GTK.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>559814</commentid>
    <comment_count>1</comment_count>
      <attachid>127710</attachid>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2012-02-18 12:58:30 -0800</bug_when>
    <thetext>Created attachment 127710
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>560489</commentid>
    <comment_count>2</comment_count>
      <attachid>127710</attachid>
    <who name="Gustavo Noronha (kov)">gustavo</who>
    <bug_when>2012-02-20 17:49:06 -0800</bug_when>
    <thetext>Comment on attachment 127710
Patch

Looks sane.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>560538</commentid>
    <comment_count>3</comment_count>
      <attachid>127710</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-02-20 19:10:03 -0800</bug_when>
    <thetext>Comment on attachment 127710
Patch

Clearing flags on attachment: 127710

Committed r108289: &lt;http://trac.webkit.org/changeset/108289&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>560539</commentid>
    <comment_count>4</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-02-20 19:10:07 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>127710</attachid>
            <date>2012-02-18 12:58:30 -0800</date>
            <delta_ts>2012-02-20 19:10:02 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-78970-20120218125829.patch</filename>
            <type>text/plain</type>
            <size>33406</size>
            <attacher name="Martin Robinson">mrobinson</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTA4MTUyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggN2M1ODMzMWYwMGViZDBh
OWUwMTIwOWFlM2U2YWE3YTBmYTUzY2FkNC4uNzc4ZDlhNTVjNWQ0MzMxMGUzOGNjNDgzZGM3MTQ2
NzUxZDg2NTI3ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSw1ICsxLDI2IEBACiAyMDEyLTAyLTE4ICBNYXJ0
aW4gUm9iaW5zb24gIDxtcm9iaW5zb25AaWdhbGlhLmNvbT4KIAorICAgICAgICBbR1RLXSBbRUZM
XSBDb2xsYXBzZSBkdXBsaWNhdGUgV2ViR0wgc3VwcG9ydCBjb2RlCisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03ODk3MAorCisgICAgICAgIFJldmlld2Vk
IGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIE5vIG5ldyB0ZXN0cy4gVGhpcyBqdXN0IGNs
ZWFucyB1cCBkdXBsaWNhdGVkIGNvZGUuCisKKyAgICAgICAgQ2VudHJhbGl6ZSBkdXBsaWNhdGVk
IFdlYkdMIGNvZGUgZm9yIEVGTCBhbmQgR1RLKyBpbiB0aGUgQ2Fpcm8KKyAgICAgICAgZGlyZWN0
b3J5LiBUaGlzIGlzIGluIHByZXBhcmF0aW9uIGZvciB0aGUgY2hhbmdlcyBuZWNlc3NhcnkgdG8K
KyAgICAgICAgY29ubmVjdCBXZWJHTCB0byB0aGUgVGV4dHVyZU1hcHBlciBBQy4KKworICAgICAg
ICAqIEdOVW1ha2VmaWxlLmxpc3QuYW06IFVwZGF0ZSBzb3VyY2UgbGlzdC4KKyAgICAgICAgKiBQ
bGF0Zm9ybUVmbC5jbWFrZTogVXBkYXRlIHNvdXJjZSBsaXN0LgorICAgICAgICAqIHBsYXRmb3Jt
L2dyYXBoaWNzL2NhaXJvL0RyYXdpbmdCdWZmZXJDYWlyby5jcHA6IFJlbmFtZWQgZnJvbSBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ndGsvRHJhd2luZ0J1ZmZlckd0ay5jcHAuCisg
ICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vR3JhcGhpY3NDb250ZXh0M0RDYWlyby5j
cHA6IEludGVncmF0ZWQgdGhlIGNvZGUgRnJvbSBHcmFwaGljc0NvbnRleHQzREd0ay5jcHAuCisg
ICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZWZsL0RyYXdpbmdCdWZmZXJFZmwuY3BwOiBSZW1v
dmVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2VmbC9HcmFwaGljc0NvbnRleHQzREVm
bC5jcHA6IFJlbW92ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZ3RrL0dyYXBoaWNz
Q29udGV4dDNER3RrLmNwcDogUmVtb3ZlZC4KKworMjAxMi0wMi0xOCAgTWFydGluIFJvYmluc29u
ICA8bXJvYmluc29uQGlnYWxpYS5jb20+CisKICAgICAgICAgW0dUS10gW0FDXSBHZW5lcmFsaXpl
IFdpbmRvd0NvbnRleHRHTAogICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9Nzg5NjkKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvR05VbWFrZWZpbGUu
bGlzdC5hbSBiL1NvdXJjZS9XZWJDb3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0KaW5kZXggZDhhYWVi
MTIyY2RmNGFmODU1ODQ0NTA4Y2ViOWRmMTdlZWM5NDUwNS4uM2U1NjRlOWY2MzVkNzMxNTI1ZjM5
NjE5ODY1NjA3NjhjYjBlODFjNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvR05VbWFrZWZp
bGUubGlzdC5hbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9HTlVtYWtlZmlsZS5saXN0LmFtCkBAIC01
Njk0LDYgKzU2OTQsNyBAQCB3ZWJjb3JlX3NvdXJjZXMgKz0gXAogCVNvdXJjZS9XZWJDb3JlL2h0
bWwvY2FudmFzL09FU1ZlcnRleEFycmF5T2JqZWN0LmggXAogCVNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL0FOR0xFV2ViS2l0QnJpZGdlLmNwcCBcCiAJU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvQU5HTEVXZWJLaXRCcmlkZ2UuaCBcCisJU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2Fpcm8vRHJhd2luZ0J1ZmZlckNhaXJvLmNwcCBcCiAJU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vR3JhcGhpY3NDb250ZXh0M0RDYWlyby5jcHAg
XAogCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dseC9HcmFwaGljc0NvbnRleHQz
RFByaXZhdGUuY3BwIFwKIAlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nbHgvR3Jh
cGhpY3NDb250ZXh0M0RQcml2YXRlLmggXApAQCAtNTcwMSw4ICs1NzAyLDYgQEAgd2ViY29yZV9z
b3VyY2VzICs9IFwKIAlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ncHUvRHJhd2lu
Z0J1ZmZlci5oIFwKIAlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0Nv
bnRleHQzRC5jcHAgXAogCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNz
Q29udGV4dDNELmggXAotCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2d0ay9EcmF3
aW5nQnVmZmVyR3RrLmNwcCBcCi0JU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3Rr
L0dyYXBoaWNzQ29udGV4dDNER3RrLmNwcCBcCiAJU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvT3BlbkdMU2hpbXMuY3BwIFwKIAlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9PcGVuR0xTaGltcy5oIFwKIAlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVu
Z2wvRXh0ZW5zaW9uczNET3BlbkdMLmNwcCBcCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Q
bGF0Zm9ybUVmbC5jbWFrZSBiL1NvdXJjZS9XZWJDb3JlL1BsYXRmb3JtRWZsLmNtYWtlCmluZGV4
IGIwYjdlOTFlNGQ2N2E5YTI1NzBkNTY1YzJmYzQ2ZGFiOGFhMjFjYWIuLmFjNGQxYjRmMTc0MzM5
YjNhOWMzNmNkNjQ0YzcwMGU3ZTVhYzZiYTggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1Bs
YXRmb3JtRWZsLmNtYWtlCisrKyBiL1NvdXJjZS9XZWJDb3JlL1BsYXRmb3JtRWZsLmNtYWtlCkBA
IC0yNTksOSArMjU5LDggQEAgSUYgKEVOQUJMRV9XRUJHTCkKICAgICAke09QRU5HTF9nbF9MSUJS
QVJZfQogICApCiAgIExJU1QoQVBQRU5EIFdlYkNvcmVfU09VUkNFUworICAgIHBsYXRmb3JtL2dy
YXBoaWNzL2NhaXJvL0RyYXdpbmdCdWZmZXJDYWlyby5jcHAKICAgICBwbGF0Zm9ybS9ncmFwaGlj
cy9jYWlyby9HcmFwaGljc0NvbnRleHQzRENhaXJvLmNwcAotICAgIHBsYXRmb3JtL2dyYXBoaWNz
L2VmbC9EcmF3aW5nQnVmZmVyRWZsLmNwcAotICAgIHBsYXRmb3JtL2dyYXBoaWNzL2VmbC9HcmFw
aGljc0NvbnRleHQzREVmbC5jcHAKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9nbHgvR3JhcGhpY3ND
b250ZXh0M0RQcml2YXRlLmNwcAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL09wZW5HTFNoaW1zLmNw
cAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9FeHRlbnNpb25zM0RPcGVuR0wuY3BwCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9EcmF3aW5n
QnVmZmVyQ2Fpcm8uY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8v
RHJhd2luZ0J1ZmZlckNhaXJvLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4wNjdiOWM3YjM2MjVmYzRiMjQyNWUy
ZTk2MTY3ZmI5YzUxNjBjNjFhCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2Fpcm8vRHJhd2luZ0J1ZmZlckNhaXJvLmNwcApAQCAtMCwwICsxLDk3
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEwIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwg
SU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAq
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAq
LworCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpZiBFTkFCTEUoQUNDRUxFUkFURURfMkRfQ0FO
VkFTKSB8fCBFTkFCTEUoV0VCR0wpCisKKyNpbmNsdWRlICJEcmF3aW5nQnVmZmVyLmgiCisKKyNp
bmNsdWRlICJFeHRlbnNpb25zM0QuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitEcmF3aW5n
QnVmZmVyOjpEcmF3aW5nQnVmZmVyKEdyYXBoaWNzQ29udGV4dDNEKiBjb250ZXh0LAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBJbnRTaXplJiBzaXplLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBib29sIG11bHRpc2FtcGxlRXh0ZW5zaW9uU3VwcG9ydGVkLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIHBhY2tlZERlcHRoU3RlbmNpbEV4dGVuc2lv
blN1cHBvcnRlZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBzZXBhcmF0ZUJh
Y2tpbmdUZXh0dXJlKQorICAgIDogbV9zZXBhcmF0ZUJhY2tpbmdUZXh0dXJlKHNlcGFyYXRlQmFj
a2luZ1RleHR1cmUpCisgICAgLCBtX3NjaXNzb3JFbmFibGVkKGZhbHNlKQorICAgICwgbV90ZXh0
dXJlMkRCaW5kaW5nKDApCisgICAgLCBtX2FjdGl2ZVRleHR1cmVVbml0KEdyYXBoaWNzQ29udGV4
dDNEOjpURVhUVVJFMCkKKyAgICAsIG1fY29udGV4dChjb250ZXh0KQorICAgICwgbV9zaXplKC0x
LCAtMSkKKyAgICAsIG1fbXVsdGlzYW1wbGVFeHRlbnNpb25TdXBwb3J0ZWQobXVsdGlzYW1wbGVF
eHRlbnNpb25TdXBwb3J0ZWQpCisgICAgLCBtX3BhY2tlZERlcHRoU3RlbmNpbEV4dGVuc2lvblN1
cHBvcnRlZChwYWNrZWREZXB0aFN0ZW5jaWxFeHRlbnNpb25TdXBwb3J0ZWQpCisgICAgLCBtX2Zi
byhjb250ZXh0LT5jcmVhdGVGcmFtZWJ1ZmZlcigpKQorICAgICwgbV9jb2xvckJ1ZmZlcigwKQor
ICAgICwgbV9kZXB0aFN0ZW5jaWxCdWZmZXIoMCkKKyAgICAsIG1fZGVwdGhCdWZmZXIoMCkKKyAg
ICAsIG1fc3RlbmNpbEJ1ZmZlcigwKQorICAgICwgbV9tdWx0aXNhbXBsZUZCTygwKQorICAgICwg
bV9tdWx0aXNhbXBsZUNvbG9yQnVmZmVyKDApCit7CisgICAgLy8gU3VwcG9ydCBmb3IgYSBzZXBh
cmF0ZSBiYWNraW5nIHRleHR1cmUgaGFzIG9ubHkgYmVlbiBlbmFibGVkIGZvcgorICAgIC8vIHRo
ZSBjaHJvbWl1bSBwb3J0LgorICAgIEFTU0VSVCghbV9zZXBhcmF0ZUJhY2tpbmdUZXh0dXJlKTsK
KyAgICBBU1NFUlQobV9mYm8pOworICAgIGlmICghbV9mYm8pIHsKKyAgICAgICAgY2xlYXIoKTsK
KyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICAgICAgCisgICAgLy8gY3JlYXRlIGEgdGV4dHVy
ZSB0byByZW5kZXIgaW50bworICAgIG1fY29sb3JCdWZmZXIgPSBjb250ZXh0LT5jcmVhdGVUZXh0
dXJlKCk7CisgICAgY29udGV4dC0+YmluZFRleHR1cmUoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRV
UkVfMkQsIG1fY29sb3JCdWZmZXIpOworICAgIGNvbnRleHQtPnRleFBhcmFtZXRlcmYoR3JhcGhp
Y3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFX01BR19G
SUxURVIsIEdyYXBoaWNzQ29udGV4dDNEOjpMSU5FQVIpOworICAgIGNvbnRleHQtPnRleFBhcmFt
ZXRlcmYoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIEdyYXBoaWNzQ29udGV4dDNEOjpU
RVhUVVJFX01JTl9GSUxURVIsIEdyYXBoaWNzQ29udGV4dDNEOjpMSU5FQVIpOworICAgIGNvbnRl
eHQtPnRleFBhcmFtZXRlcmkoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIEdyYXBoaWNz
Q29udGV4dDNEOjpURVhUVVJFX1dSQVBfUywgR3JhcGhpY3NDb250ZXh0M0Q6OkNMQU1QX1RPX0VE
R0UpOworICAgIGNvbnRleHQtPnRleFBhcmFtZXRlcmkoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRV
UkVfMkQsIEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFX1dSQVBfVCwgR3JhcGhpY3NDb250ZXh0
M0Q6OkNMQU1QX1RPX0VER0UpOworICAgIGNvbnRleHQtPmJpbmRUZXh0dXJlKEdyYXBoaWNzQ29u
dGV4dDNEOjpURVhUVVJFXzJELCAwKTsKKyAgICAKKyAgICBjcmVhdGVTZWNvbmRhcnlCdWZmZXJz
KCk7CisgICAgcmVzZXQoc2l6ZSk7Cit9CisKK0RyYXdpbmdCdWZmZXI6On5EcmF3aW5nQnVmZmVy
KCkKK3sKKyAgICBjbGVhcigpOworfQorCitQbGF0Zm9ybTNET2JqZWN0IERyYXdpbmdCdWZmZXI6
OnBsYXRmb3JtQ29sb3JCdWZmZXIoKSBjb25zdAoreworICAgIHJldHVybiBtX2NvbG9yQnVmZmVy
OworfQorCisjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQordm9pZCBEcmF3aW5nQnVm
ZmVyOjpwYWludENvbXBvc2l0ZWRSZXN1bHRzVG9DYW52YXMoQ2FudmFzUmVuZGVyaW5nQ29udGV4
dCogY29udGV4dCkKK3sKK30KKyNlbmRpZgorCit9CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vR3JhcGhpY3NDb250ZXh0M0RDYWly
by5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9HcmFwaGljc0Nv
bnRleHQzRENhaXJvLmNwcAppbmRleCBjODVhYWI0MTY1ODZiMmUwYjcxYTA3NGU2Yzg5ZjU2YzNk
MGZmNTFlLi5mNTQyZmI5ZWQ2MGM1NzA4ODQ1N2M1ZTM2YTAzNTU3MDZmYzYwY2Y3IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9HcmFwaGljc0NvbnRl
eHQzRENhaXJvLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWly
by9HcmFwaGljc0NvbnRleHQzRENhaXJvLmNwcApAQCAtMzEsMTMgKzMxLDExNiBAQAogCiAjaWYg
RU5BQkxFKFdFQkdMKQogCisjaW5jbHVkZSAiRXh0ZW5zaW9uczNET3BlbkdMLmgiCisjaW5jbHVk
ZSAiR3JhcGhpY3NDb250ZXh0M0RQcml2YXRlLmgiCiAjaW5jbHVkZSAiSW1hZ2UuaCIKKyNpbmNs
dWRlICJPcGVuR0xTaGltcy5oIgogI2luY2x1ZGUgIlJlZlB0ckNhaXJvLmgiCisjaW5jbHVkZSAi
U2hhZGVyTGFuZy5oIgogI2luY2x1ZGUgPGNhaXJvLmg+CiAjaW5jbHVkZSA8d3RmL1Bhc3NPd25Q
dHIuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCitQYXNzUmVmUHRyPEdyYXBoaWNzQ29udGV4
dDNEPiBHcmFwaGljc0NvbnRleHQzRDo6Y3JlYXRlKEdyYXBoaWNzQ29udGV4dDNEOjpBdHRyaWJ1
dGVzIGF0dHJpYnV0ZXMsIEhvc3RXaW5kb3cqIGhvc3RXaW5kb3csIEdyYXBoaWNzQ29udGV4dDNE
OjpSZW5kZXJTdHlsZSByZW5kZXJTdHlsZSkKK3sKKyAgICAvLyBUaGlzIGltcGxlbWVudGF0aW9u
IGRvZXNuJ3QgY3VycmVudGx5IHN1cHBvcnQgcmVuZGVyaW5nIGRpcmVjdGx5IHRvIHRoZSBIb3N0
V2luZG93LgorICAgIGlmIChyZW5kZXJTdHlsZSA9PSBSZW5kZXJEaXJlY3RseVRvSG9zdFdpbmRv
dykKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBPd25QdHI8R3JhcGhpY3NDb250ZXh0M0RQcml2
YXRlPiBwcml2ID0gR3JhcGhpY3NDb250ZXh0M0RQcml2YXRlOjpjcmVhdGUoKTsKKyAgICBpZiAo
IXByaXYpCisgICAgICAgIHJldHVybiAwOworCisgICAgUmVmUHRyPEdyYXBoaWNzQ29udGV4dDNE
PiBjb250ZXh0ID0gYWRvcHRSZWYobmV3IEdyYXBoaWNzQ29udGV4dDNEKGF0dHJpYnV0ZXMsIGhv
c3RXaW5kb3csIGZhbHNlKSk7CisgICAgY29udGV4dC0+bV9wcml2YXRlID0gcHJpdi5yZWxlYXNl
KCk7CisgICAgcmV0dXJuIGNvbnRleHQucmVsZWFzZSgpOworfQorCitHcmFwaGljc0NvbnRleHQz
RDo6R3JhcGhpY3NDb250ZXh0M0QoR3JhcGhpY3NDb250ZXh0M0Q6OkF0dHJpYnV0ZXMgYXR0cmli
dXRlcywgSG9zdFdpbmRvdyosIGJvb2wpCisgICAgOiBtX2N1cnJlbnRXaWR0aCgwKQorICAgICwg
bV9jdXJyZW50SGVpZ2h0KDApCisgICAgLCBtX2F0dHJzKGF0dHJpYnV0ZXMpCisgICAgLCBtX3Rl
eHR1cmUoMCkKKyAgICAsIG1fZmJvKDApCisgICAgLCBtX2RlcHRoU3RlbmNpbEJ1ZmZlcigwKQor
ICAgICwgbV9ib3VuZEZCTygwKQorICAgICwgbV9tdWx0aXNhbXBsZUZCTygwKQorICAgICwgbV9t
dWx0aXNhbXBsZURlcHRoU3RlbmNpbEJ1ZmZlcigwKQorICAgICwgbV9tdWx0aXNhbXBsZUNvbG9y
QnVmZmVyKDApCit7CisgICAgR3JhcGhpY3NDb250ZXh0M0RQcml2YXRlOjphZGRBY3RpdmVHcmFw
aGljc0NvbnRleHQodGhpcyk7CisKKyAgICB2YWxpZGF0ZUF0dHJpYnV0ZXMoKTsKKworICAgIC8v
IENyZWF0ZSBhIHRleHR1cmUgdG8gcmVuZGVyIGludG8uCisgICAgOjpnbEdlblRleHR1cmVzKDEs
ICZtX3RleHR1cmUpOworICAgIDo6Z2xCaW5kVGV4dHVyZShHTF9URVhUVVJFXzJELCBtX3RleHR1
cmUpOworICAgIDo6Z2xUZXhQYXJhbWV0ZXJmKEdMX1RFWFRVUkVfMkQsIEdMX1RFWFRVUkVfTUFH
X0ZJTFRFUiwgR0xfTElORUFSKTsKKyAgICA6OmdsVGV4UGFyYW1ldGVyZihHTF9URVhUVVJFXzJE
LCBHTF9URVhUVVJFX01JTl9GSUxURVIsIEdMX0xJTkVBUik7CisgICAgOjpnbFRleFBhcmFtZXRl
cmkoR0xfVEVYVFVSRV8yRCwgR0xfVEVYVFVSRV9XUkFQX1MsIEdMX0NMQU1QKTsKKyAgICA6Omds
VGV4UGFyYW1ldGVyaShHTF9URVhUVVJFXzJELCBHTF9URVhUVVJFX1dSQVBfVCwgR0xfQ0xBTVAp
OworICAgIDo6Z2xCaW5kVGV4dHVyZShHTF9URVhUVVJFXzJELCAwKTsKKworICAgIC8vIENyZWF0
ZSBhbiBGQk8uCisgICAgOjpnbEdlbkZyYW1lYnVmZmVyc0VYVCgxLCAmbV9mYm8pOworICAgIDo6
Z2xCaW5kRnJhbWVidWZmZXJFWFQoR0xfRlJBTUVCVUZGRVJfRVhULCBtX2Zibyk7CisKKyAgICBt
X2JvdW5kRkJPID0gbV9mYm87CisgICAgaWYgKCFtX2F0dHJzLmFudGlhbGlhcyAmJiAobV9hdHRy
cy5zdGVuY2lsIHx8IG1fYXR0cnMuZGVwdGgpKQorICAgICAgICA6OmdsR2VuUmVuZGVyYnVmZmVy
c0VYVCgxLCAmbV9kZXB0aFN0ZW5jaWxCdWZmZXIpOworICAgIAorICAgIC8vIENyZWF0ZSBhIG11
bHRpc2FtcGxlIEZCTy4KKyAgICBpZiAobV9hdHRycy5hbnRpYWxpYXMpIHsKKyAgICAgICAgOjpn
bEdlbkZyYW1lYnVmZmVyc0VYVCgxLCAmbV9tdWx0aXNhbXBsZUZCTyk7CisgICAgICAgIDo6Z2xC
aW5kRnJhbWVidWZmZXJFWFQoR0xfRlJBTUVCVUZGRVJfRVhULCBtX211bHRpc2FtcGxlRkJPKTsK
KyAgICAgICAgbV9ib3VuZEZCTyA9IG1fbXVsdGlzYW1wbGVGQk87CisgICAgICAgIDo6Z2xHZW5S
ZW5kZXJidWZmZXJzRVhUKDEsICZtX211bHRpc2FtcGxlQ29sb3JCdWZmZXIpOworICAgICAgICBp
ZiAobV9hdHRycy5zdGVuY2lsIHx8IG1fYXR0cnMuZGVwdGgpCisgICAgICAgICAgICA6OmdsR2Vu
UmVuZGVyYnVmZmVyc0VYVCgxLCAmbV9tdWx0aXNhbXBsZURlcHRoU3RlbmNpbEJ1ZmZlcik7Cisg
ICAgfQorCisgICAgLy8gQU5HTEUgaW5pdGlhbGl6YXRpb24uCisgICAgU2hCdWlsdEluUmVzb3Vy
Y2VzIEFOR0xFUmVzb3VyY2VzOworICAgIFNoSW5pdEJ1aWx0SW5SZXNvdXJjZXMoJkFOR0xFUmVz
b3VyY2VzKTsKKworICAgIGdldEludGVnZXJ2KEdyYXBoaWNzQ29udGV4dDNEOjpNQVhfVkVSVEVY
X0FUVFJJQlMsICZBTkdMRVJlc291cmNlcy5NYXhWZXJ0ZXhBdHRyaWJzKTsKKyAgICBnZXRJbnRl
Z2VydihHcmFwaGljc0NvbnRleHQzRDo6TUFYX1ZFUlRFWF9VTklGT1JNX1ZFQ1RPUlMsICZBTkdM
RVJlc291cmNlcy5NYXhWZXJ0ZXhVbmlmb3JtVmVjdG9ycyk7CisgICAgZ2V0SW50ZWdlcnYoR3Jh
cGhpY3NDb250ZXh0M0Q6Ok1BWF9WQVJZSU5HX1ZFQ1RPUlMsICZBTkdMRVJlc291cmNlcy5NYXhW
YXJ5aW5nVmVjdG9ycyk7CisgICAgZ2V0SW50ZWdlcnYoR3JhcGhpY3NDb250ZXh0M0Q6Ok1BWF9W
RVJURVhfVEVYVFVSRV9JTUFHRV9VTklUUywgJkFOR0xFUmVzb3VyY2VzLk1heFZlcnRleFRleHR1
cmVJbWFnZVVuaXRzKTsKKyAgICBnZXRJbnRlZ2VydihHcmFwaGljc0NvbnRleHQzRDo6TUFYX0NP
TUJJTkVEX1RFWFRVUkVfSU1BR0VfVU5JVFMsICZBTkdMRVJlc291cmNlcy5NYXhDb21iaW5lZFRl
eHR1cmVJbWFnZVVuaXRzKTsKKyAgICBnZXRJbnRlZ2VydihHcmFwaGljc0NvbnRleHQzRDo6TUFY
X1RFWFRVUkVfSU1BR0VfVU5JVFMsICZBTkdMRVJlc291cmNlcy5NYXhUZXh0dXJlSW1hZ2VVbml0
cyk7CisgICAgZ2V0SW50ZWdlcnYoR3JhcGhpY3NDb250ZXh0M0Q6Ok1BWF9GUkFHTUVOVF9VTklG
T1JNX1ZFQ1RPUlMsICZBTkdMRVJlc291cmNlcy5NYXhGcmFnbWVudFVuaWZvcm1WZWN0b3JzKTsK
KworICAgIC8vIEFsd2F5cyBzZXQgdG8gMSBmb3IgT3BlbkdMIEVTLgorICAgIEFOR0xFUmVzb3Vy
Y2VzLk1heERyYXdCdWZmZXJzID0gMTsKKyAgICBtX2NvbXBpbGVyLnNldFJlc291cmNlcyhBTkdM
RVJlc291cmNlcyk7CisKKyAgICA6OmdsRW5hYmxlKEdMX1ZFUlRFWF9QUk9HUkFNX1BPSU5UX1NJ
WkUpOworICAgIDo6Z2xFbmFibGUoR0xfUE9JTlRfU1BSSVRFKTsKKyAgICA6OmdsQ2xlYXJDb2xv
cigwLCAwLCAwLCAwKTsKK30KKworR3JhcGhpY3NDb250ZXh0M0Q6On5HcmFwaGljc0NvbnRleHQz
RCgpCit7CisgICAgR3JhcGhpY3NDb250ZXh0M0RQcml2YXRlOjpyZW1vdmVBY3RpdmVHcmFwaGlj
c0NvbnRleHQodGhpcyk7CisgICAgaWYgKCFtX3ByaXZhdGUtPm1fY29udGV4dCkKKyAgICAgICAg
cmV0dXJuOworCisgICAgbWFrZUNvbnRleHRDdXJyZW50KCk7CisgICAgOjpnbERlbGV0ZVRleHR1
cmVzKDEsICZtX3RleHR1cmUpOworICAgIGlmIChtX2F0dHJzLmFudGlhbGlhcykgeworICAgICAg
ICA6OmdsRGVsZXRlUmVuZGVyYnVmZmVyc0VYVCgxLCAmbV9tdWx0aXNhbXBsZUNvbG9yQnVmZmVy
KTsKKyAgICAgICAgaWYgKG1fYXR0cnMuc3RlbmNpbCB8fCBtX2F0dHJzLmRlcHRoKQorICAgICAg
ICAgICAgOjpnbERlbGV0ZVJlbmRlcmJ1ZmZlcnNFWFQoMSwgJm1fbXVsdGlzYW1wbGVEZXB0aFN0
ZW5jaWxCdWZmZXIpOworICAgICAgICA6OmdsRGVsZXRlRnJhbWVidWZmZXJzRVhUKDEsICZtX211
bHRpc2FtcGxlRkJPKTsKKyAgICB9IGVsc2UgeworICAgICAgICBpZiAobV9hdHRycy5zdGVuY2ls
IHx8IG1fYXR0cnMuZGVwdGgpCisgICAgICAgICAgICA6OmdsRGVsZXRlUmVuZGVyYnVmZmVyc0VY
VCgxLCAmbV9kZXB0aFN0ZW5jaWxCdWZmZXIpOworICAgIH0KKyAgICA6OmdsRGVsZXRlRnJhbWVi
dWZmZXJzRVhUKDEsICZtX2Zibyk7Cit9CisKIGJvb2wgR3JhcGhpY3NDb250ZXh0M0Q6OmdldElt
YWdlRGF0YShJbWFnZSogaW1hZ2UsIHVuc2lnbmVkIGludCBmb3JtYXQsIHVuc2lnbmVkIGludCB0
eXBlLCBib29sIHByZW11bHRpcGx5QWxwaGEsIGJvb2wgaWdub3JlR2FtbWFBbmRDb2xvclByb2Zp
bGUsIFZlY3Rvcjx1aW50OF90PiYgb3V0cHV0VmVjdG9yKQogewogICAgIGlmICghaW1hZ2UpCkBA
IC0xMTksNiArMjIyLDIzIEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OnNldEVycm9yTWVzc2Fn
ZUNhbGxiYWNrKFBhc3NPd25QdHI8RXJyb3JNZXNzYWdlQ2FsbGJhY2s+CiB7CiB9CiAKK2Jvb2wg
R3JhcGhpY3NDb250ZXh0M0Q6Om1ha2VDb250ZXh0Q3VycmVudCgpCit7CisgICAgaWYgKCFtX3By
aXZhdGUpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICByZXR1cm4gbV9wcml2YXRlLT5tYWtl
Q29udGV4dEN1cnJlbnQoKTsKK30KKworUGxhdGZvcm1HcmFwaGljc0NvbnRleHQzRCBHcmFwaGlj
c0NvbnRleHQzRDo6cGxhdGZvcm1HcmFwaGljc0NvbnRleHQzRCgpCit7CisgICAgcmV0dXJuIG1f
cHJpdmF0ZS0+bV9jb250ZXh0OworfQorCitib29sIEdyYXBoaWNzQ29udGV4dDNEOjppc0dMRVMy
Q29tcGxpYW50KCkgY29uc3QKK3sKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKICNpZiBVU0UoQUND
RUxFUkFURURfQ09NUE9TSVRJTkcpCiBQbGF0Zm9ybUxheWVyKiBHcmFwaGljc0NvbnRleHQzRDo6
cGxhdGZvcm1MYXllcigpIGNvbnN0CiB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9lZmwvRHJhd2luZ0J1ZmZlckVmbC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9lZmwvRHJhd2luZ0J1ZmZlckVmbC5jcHAKZGVsZXRlZCBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IGJhYmU1ZTQyYTUzNjAzZWIyYTEyZTQ1NGE4Mjg5MzIwYzU2M2QwOTcu
LjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZWZsL0RyYXdpbmdCdWZmZXJFZmwuY3BwCisrKyAvZGV2
L251bGwKQEAgLTEsOTMgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMCBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
LSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQot
ICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQot
ICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4gCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotCi0jaWYgRU5BQkxF
KEFDQ0VMRVJBVEVEXzJEX0NBTlZBUykgfHwgRU5BQkxFKFdFQkdMKQotCi0jaW5jbHVkZSAiRHJh
d2luZ0J1ZmZlci5oIgotCi0jaW5jbHVkZSAiRXh0ZW5zaW9uczNELmgiCi0KLW5hbWVzcGFjZSBX
ZWJDb3JlIHsKLQotRHJhd2luZ0J1ZmZlcjo6RHJhd2luZ0J1ZmZlcihHcmFwaGljc0NvbnRleHQz
RCogY29udGV4dCwgY29uc3QgSW50U2l6ZSYgc2l6ZSwgYm9vbCBtdWx0aXNhbXBsZUV4dGVuc2lv
blN1cHBvcnRlZCwgYm9vbCBwYWNrZWREZXB0aFN0ZW5jaWxFeHRlbnNpb25TdXBwb3J0ZWQsIGJv
b2wgc2VwYXJhdGVCYWNraW5nVGV4dHVyZSkKLSAgICA6IG1fc2VwYXJhdGVCYWNraW5nVGV4dHVy
ZShzZXBhcmF0ZUJhY2tpbmdUZXh0dXJlKQotICAgICwgbV9zY2lzc29yRW5hYmxlZChmYWxzZSkK
LSAgICAsIG1fdGV4dHVyZTJEQmluZGluZygwKQotICAgICwgbV9hY3RpdmVUZXh0dXJlVW5pdChH
cmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRTApCi0gICAgLCBtX2NvbnRleHQoY29udGV4dCkKLSAg
ICAsIG1fc2l6ZSgtMSwgLTEpCi0gICAgLCBtX211bHRpc2FtcGxlRXh0ZW5zaW9uU3VwcG9ydGVk
KG11bHRpc2FtcGxlRXh0ZW5zaW9uU3VwcG9ydGVkKQotICAgICwgbV9wYWNrZWREZXB0aFN0ZW5j
aWxFeHRlbnNpb25TdXBwb3J0ZWQocGFja2VkRGVwdGhTdGVuY2lsRXh0ZW5zaW9uU3VwcG9ydGVk
KQotICAgICwgbV9mYm8oY29udGV4dC0+Y3JlYXRlRnJhbWVidWZmZXIoKSkKLSAgICAsIG1fY29s
b3JCdWZmZXIoMCkKLSAgICAsIG1fZGVwdGhTdGVuY2lsQnVmZmVyKDApCi0gICAgLCBtX2RlcHRo
QnVmZmVyKDApCi0gICAgLCBtX3N0ZW5jaWxCdWZmZXIoMCkKLSAgICAsIG1fbXVsdGlzYW1wbGVG
Qk8oMCkKLSAgICAsIG1fbXVsdGlzYW1wbGVDb2xvckJ1ZmZlcigwKQotewotICAgIC8vIFN1cHBv
cnQgZm9yIGEgc2VwYXJhdGUgYmFja2luZyB0ZXh0dXJlIGhhcyBvbmx5IGJlZW4gZW5hYmxlZCBm
b3IKLSAgICAvLyB0aGUgY2hyb21pdW0gcG9ydC4KLSAgICBBU1NFUlQoIW1fc2VwYXJhdGVCYWNr
aW5nVGV4dHVyZSk7Ci0gICAgQVNTRVJUKG1fZmJvKTsKLSAgICBpZiAoIW1fZmJvKSB7Ci0gICAg
ICAgIGNsZWFyKCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICAvLyBDcmVhdGUgYSB0
ZXh0dXJlIHRvIHJlbmRlciBpbnRvLgotICAgIG1fY29sb3JCdWZmZXIgPSBjb250ZXh0LT5jcmVh
dGVUZXh0dXJlKCk7Ci0gICAgY29udGV4dC0+YmluZFRleHR1cmUoR3JhcGhpY3NDb250ZXh0M0Q6
OlRFWFRVUkVfMkQsIG1fY29sb3JCdWZmZXIpOwotICAgIGNvbnRleHQtPnRleFBhcmFtZXRlcmYo
R3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJF
X01BR19GSUxURVIsIEdyYXBoaWNzQ29udGV4dDNEOjpMSU5FQVIpOwotICAgIGNvbnRleHQtPnRl
eFBhcmFtZXRlcmYoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIEdyYXBoaWNzQ29udGV4
dDNEOjpURVhUVVJFX01JTl9GSUxURVIsIEdyYXBoaWNzQ29udGV4dDNEOjpMSU5FQVIpOwotICAg
IGNvbnRleHQtPnRleFBhcmFtZXRlcmkoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkVfMkQsIEdy
YXBoaWNzQ29udGV4dDNEOjpURVhUVVJFX1dSQVBfUywgR3JhcGhpY3NDb250ZXh0M0Q6OkNMQU1Q
X1RPX0VER0UpOwotICAgIGNvbnRleHQtPnRleFBhcmFtZXRlcmkoR3JhcGhpY3NDb250ZXh0M0Q6
OlRFWFRVUkVfMkQsIEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFX1dSQVBfVCwgR3JhcGhpY3ND
b250ZXh0M0Q6OkNMQU1QX1RPX0VER0UpOwotICAgIGNvbnRleHQtPmJpbmRUZXh0dXJlKEdyYXBo
aWNzQ29udGV4dDNEOjpURVhUVVJFXzJELCAwKTsKLQotICAgIGNyZWF0ZVNlY29uZGFyeUJ1ZmZl
cnMoKTsKLSAgICByZXNldChzaXplKTsKLX0KLQotRHJhd2luZ0J1ZmZlcjo6fkRyYXdpbmdCdWZm
ZXIoKQotewotICAgIGNsZWFyKCk7Ci19Ci0KLVBsYXRmb3JtM0RPYmplY3QgRHJhd2luZ0J1ZmZl
cjo6cGxhdGZvcm1Db2xvckJ1ZmZlcigpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1fY29sb3JCdWZm
ZXI7Ci19Ci0KLSNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCi12b2lkIERyYXdpbmdC
dWZmZXI6OnBhaW50Q29tcG9zaXRlZFJlc3VsdHNUb0NhbnZhcyhDYW52YXNSZW5kZXJpbmdDb250
ZXh0KiBjb250ZXh0KQotewotfQotI2VuZGlmCi0KLX0KLQotI2VuZGlmCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9lZmwvR3JhcGhpY3NDb250ZXh0M0RFZmwu
Y3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZWZsL0dyYXBoaWNzQ29udGV4
dDNERWZsLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMWYxZWRhMjFjMjMyZDc3
NGFhNjk2OTNhOTVlYzIwOGRjZjYxZjM4Zi4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9lZmwvR3Jh
cGhpY3NDb250ZXh0M0RFZmwuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsMTUwICswLDAgQEAKLS8q
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTEsIDIwMTIgU2Ftc3VuZyBFbGVjdHJvbmljcwotICoKLSAq
IFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBh
bmQvb3IKLSAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdl
bmVyYWwgUHVibGljCi0gKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2Fy
ZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0
IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiBUaGlzIGxpYnJhcnkgaXMg
ZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqIGJ1dCBX
SVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9m
Ci0gKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0Uu
ICBTZWUgdGhlIEdOVQotICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3Jl
IGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUg
R05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIGxp
YnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KLSAqIHRo
ZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlm
dGggRmxvb3IsCi0gKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLSAqLwotCi0jaW5jbHVk
ZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0M0QuaCIKLQotI2lmIEVOQUJM
RShXRUJHTCkKLSNpbmNsdWRlICJFeHRlbnNpb25zM0RPcGVuR0wuaCIKLSNpbmNsdWRlICJHcmFw
aGljc0NvbnRleHQzRFByaXZhdGUuaCIKLSNpbmNsdWRlICJPcGVuR0xTaGltcy5oIgotI2luY2x1
ZGUgIlNoYWRlckxhbmcuaCIKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1QYXNzUmVmUHRyPEdy
YXBoaWNzQ29udGV4dDNEPiBHcmFwaGljc0NvbnRleHQzRDo6Y3JlYXRlKEdyYXBoaWNzQ29udGV4
dDNEOjpBdHRyaWJ1dGVzIGF0dHJpYnV0ZXMsIEhvc3RXaW5kb3cqIGhvc3RXaW5kb3csIEdyYXBo
aWNzQ29udGV4dDNEOjpSZW5kZXJTdHlsZSByZW5kZXJTdHlsZSkKLXsKLSAgICBib29sIHJlbmRl
ckRpcmVjdGx5VG9Ib3N0V2luZG93ID0gKHJlbmRlclN0eWxlID09IFJlbmRlckRpcmVjdGx5VG9I
b3N0V2luZG93KTsKLSAgICAvLyBUaGlzIGltcGxlbWVudGF0aW9uIGRvZXNuJ3QgY3VycmVudGx5
IHN1cHBvcnQgcmVuZGVyaW5nIGRpcmVjdGx5IHRvIHRoZSBIb3N0V2luZG93LgotICAgIGlmIChy
ZW5kZXJEaXJlY3RseVRvSG9zdFdpbmRvdykKLSAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICBPd25Q
dHI8R3JhcGhpY3NDb250ZXh0M0RQcml2YXRlPiBwcml2ID0gR3JhcGhpY3NDb250ZXh0M0RQcml2
YXRlOjpjcmVhdGUoKTsKLSAgICBpZiAoIXByaXYpCi0gICAgICAgIHJldHVybiAwOwotCi0gICAg
UmVmUHRyPEdyYXBoaWNzQ29udGV4dDNEPiBjb250ZXh0ID0gYWRvcHRSZWYobmV3IEdyYXBoaWNz
Q29udGV4dDNEKGF0dHJpYnV0ZXMsIGhvc3RXaW5kb3csIHJlbmRlckRpcmVjdGx5VG9Ib3N0V2lu
ZG93KSk7Ci0gICAgY29udGV4dC0+bV9wcml2YXRlID0gcHJpdi5yZWxlYXNlKCk7Ci0gICAgcmV0
dXJuIGNvbnRleHQucmVsZWFzZSgpOwotfQotCi1HcmFwaGljc0NvbnRleHQzRDo6R3JhcGhpY3ND
b250ZXh0M0QoR3JhcGhpY3NDb250ZXh0M0Q6OkF0dHJpYnV0ZXMgYXR0cmlidXRlcywgSG9zdFdp
bmRvdyogaG9zdFdpbmRvdywgYm9vbCByZW5kZXJEaXJlY3RseVRvSG9zdFdpbmRvdykKLSAgICA6
IG1fY3VycmVudFdpZHRoKDApCi0gICAgLCBtX2N1cnJlbnRIZWlnaHQoMCkKLSAgICAsIG1fYXR0
cnMoYXR0cmlidXRlcykKLSAgICAsIG1fdGV4dHVyZSgwKQotICAgICwgbV9mYm8oMCkKLSAgICAs
IG1fZGVwdGhTdGVuY2lsQnVmZmVyKDApCi0gICAgLCBtX2JvdW5kRkJPKDApCi0gICAgLCBtX211
bHRpc2FtcGxlRkJPKDApCi0gICAgLCBtX211bHRpc2FtcGxlRGVwdGhTdGVuY2lsQnVmZmVyKDAp
Ci0gICAgLCBtX211bHRpc2FtcGxlQ29sb3JCdWZmZXIoMCkKLXsKLSAgICBHcmFwaGljc0NvbnRl
eHQzRFByaXZhdGU6OmFkZEFjdGl2ZUdyYXBoaWNzQ29udGV4dCh0aGlzKTsKLQotICAgIHZhbGlk
YXRlQXR0cmlidXRlcygpOwotCi0gICAgLy8gQ3JlYXRlIGEgdGV4dHVyZSB0byByZW5kZXIgaW50
by4KLSAgICA6OmdsR2VuVGV4dHVyZXMoMSwgJm1fdGV4dHVyZSk7Ci0gICAgOjpnbEJpbmRUZXh0
dXJlKEdMX1RFWFRVUkVfMkQsIG1fdGV4dHVyZSk7Ci0gICAgOjpnbFRleFBhcmFtZXRlcmYoR0xf
VEVYVFVSRV8yRCwgR0xfVEVYVFVSRV9NQUdfRklMVEVSLCBHTF9MSU5FQVIpOwotICAgIDo6Z2xU
ZXhQYXJhbWV0ZXJmKEdMX1RFWFRVUkVfMkQsIEdMX1RFWFRVUkVfTUlOX0ZJTFRFUiwgR0xfTElO
RUFSKTsKLSAgICA6OmdsVGV4UGFyYW1ldGVyaShHTF9URVhUVVJFXzJELCBHTF9URVhUVVJFX1dS
QVBfUywgR0xfQ0xBTVApOwotICAgIDo6Z2xUZXhQYXJhbWV0ZXJpKEdMX1RFWFRVUkVfMkQsIEdM
X1RFWFRVUkVfV1JBUF9ULCBHTF9DTEFNUCk7Ci0gICAgOjpnbEJpbmRUZXh0dXJlKEdMX1RFWFRV
UkVfMkQsIDApOwotCi0gICAgLy8gQ3JlYXRlIGFuIEZCTy4KLSAgICA6OmdsR2VuRnJhbWVidWZm
ZXJzRVhUKDEsICZtX2Zibyk7Ci0gICAgOjpnbEJpbmRGcmFtZWJ1ZmZlckVYVChHTF9GUkFNRUJV
RkZFUl9FWFQsIG1fZmJvKTsKLQotICAgIG1fYm91bmRGQk8gPSBtX2ZibzsKLSAgICBpZiAoIW1f
YXR0cnMuYW50aWFsaWFzICYmIChtX2F0dHJzLnN0ZW5jaWwgfHwgbV9hdHRycy5kZXB0aCkpCi0g
ICAgICAgIDo6Z2xHZW5SZW5kZXJidWZmZXJzRVhUKDEsICZtX2RlcHRoU3RlbmNpbEJ1ZmZlcik7
Ci0KLSAgICAvLyBDcmVhdGUgYSBtdWx0aXNhbXBsZSBGQk8uCi0gICAgaWYgKG1fYXR0cnMuYW50
aWFsaWFzKSB7Ci0gICAgICAgIDo6Z2xHZW5GcmFtZWJ1ZmZlcnNFWFQoMSwgJm1fbXVsdGlzYW1w
bGVGQk8pOwotICAgICAgICA6OmdsQmluZEZyYW1lYnVmZmVyRVhUKEdMX0ZSQU1FQlVGRkVSX0VY
VCwgbV9tdWx0aXNhbXBsZUZCTyk7Ci0gICAgICAgIG1fYm91bmRGQk8gPSBtX211bHRpc2FtcGxl
RkJPOwotICAgICAgICA6OmdsR2VuUmVuZGVyYnVmZmVyc0VYVCgxLCAmbV9tdWx0aXNhbXBsZUNv
bG9yQnVmZmVyKTsKLSAgICAgICAgaWYgKG1fYXR0cnMuc3RlbmNpbCB8fCBtX2F0dHJzLmRlcHRo
KQotICAgICAgICAgICAgOjpnbEdlblJlbmRlcmJ1ZmZlcnNFWFQoMSwgJm1fbXVsdGlzYW1wbGVE
ZXB0aFN0ZW5jaWxCdWZmZXIpOwotICAgIH0KLQotICAgIC8vIEFOR0xFIGluaXRpYWxpemF0aW9u
LgotICAgIFNoQnVpbHRJblJlc291cmNlcyBBTkdMRVJlc291cmNlczsKLSAgICBTaEluaXRCdWls
dEluUmVzb3VyY2VzKCZBTkdMRVJlc291cmNlcyk7Ci0KLSAgICBnZXRJbnRlZ2VydihHcmFwaGlj
c0NvbnRleHQzRDo6TUFYX1ZFUlRFWF9BVFRSSUJTLCAmQU5HTEVSZXNvdXJjZXMuTWF4VmVydGV4
QXR0cmlicyk7Ci0gICAgZ2V0SW50ZWdlcnYoR3JhcGhpY3NDb250ZXh0M0Q6Ok1BWF9WRVJURVhf
VU5JRk9STV9WRUNUT1JTLCAmQU5HTEVSZXNvdXJjZXMuTWF4VmVydGV4VW5pZm9ybVZlY3RvcnMp
OwotICAgIGdldEludGVnZXJ2KEdyYXBoaWNzQ29udGV4dDNEOjpNQVhfVkFSWUlOR19WRUNUT1JT
LCAmQU5HTEVSZXNvdXJjZXMuTWF4VmFyeWluZ1ZlY3RvcnMpOwotICAgIGdldEludGVnZXJ2KEdy
YXBoaWNzQ29udGV4dDNEOjpNQVhfVkVSVEVYX1RFWFRVUkVfSU1BR0VfVU5JVFMsICZBTkdMRVJl
c291cmNlcy5NYXhWZXJ0ZXhUZXh0dXJlSW1hZ2VVbml0cyk7Ci0gICAgZ2V0SW50ZWdlcnYoR3Jh
cGhpY3NDb250ZXh0M0Q6Ok1BWF9DT01CSU5FRF9URVhUVVJFX0lNQUdFX1VOSVRTLCAmQU5HTEVS
ZXNvdXJjZXMuTWF4Q29tYmluZWRUZXh0dXJlSW1hZ2VVbml0cyk7Ci0gICAgZ2V0SW50ZWdlcnYo
R3JhcGhpY3NDb250ZXh0M0Q6Ok1BWF9URVhUVVJFX0lNQUdFX1VOSVRTLCAmQU5HTEVSZXNvdXJj
ZXMuTWF4VGV4dHVyZUltYWdlVW5pdHMpOwotICAgIGdldEludGVnZXJ2KEdyYXBoaWNzQ29udGV4
dDNEOjpNQVhfRlJBR01FTlRfVU5JRk9STV9WRUNUT1JTLCAmQU5HTEVSZXNvdXJjZXMuTWF4RnJh
Z21lbnRVbmlmb3JtVmVjdG9ycyk7Ci0KLSAgICAvLyBBbHdheXMgc2V0IHRvIDEgZm9yIE9wZW5H
TCBFUy4KLSAgICBBTkdMRVJlc291cmNlcy5NYXhEcmF3QnVmZmVycyA9IDE7Ci0gICAgbV9jb21w
aWxlci5zZXRSZXNvdXJjZXMoQU5HTEVSZXNvdXJjZXMpOwotCi0gICAgOjpnbEVuYWJsZShHTF9W
RVJURVhfUFJPR1JBTV9QT0lOVF9TSVpFKTsKLSAgICA6OmdsRW5hYmxlKEdMX1BPSU5UX1NQUklU
RSk7Ci0gICAgOjpnbENsZWFyQ29sb3IoMCwgMCwgMCwgMCk7Ci19Ci0KLUdyYXBoaWNzQ29udGV4
dDNEOjp+R3JhcGhpY3NDb250ZXh0M0QoKQotewotICAgIEdyYXBoaWNzQ29udGV4dDNEUHJpdmF0
ZTo6cmVtb3ZlQWN0aXZlR3JhcGhpY3NDb250ZXh0KHRoaXMpOwotICAgIGlmICghbV9wcml2YXRl
LT5tX2NvbnRleHQpCi0gICAgICAgIHJldHVybjsKLQotICAgIG1ha2VDb250ZXh0Q3VycmVudCgp
OwotICAgIDo6Z2xEZWxldGVUZXh0dXJlcygxLCAmbV90ZXh0dXJlKTsKLSAgICBpZiAobV9hdHRy
cy5hbnRpYWxpYXMpIHsKLSAgICAgICAgOjpnbERlbGV0ZVJlbmRlcmJ1ZmZlcnNFWFQoMSwgJm1f
bXVsdGlzYW1wbGVDb2xvckJ1ZmZlcik7Ci0gICAgICAgIGlmIChtX2F0dHJzLnN0ZW5jaWwgfHwg
bV9hdHRycy5kZXB0aCkKLSAgICAgICAgICAgIDo6Z2xEZWxldGVSZW5kZXJidWZmZXJzRVhUKDEs
ICZtX211bHRpc2FtcGxlRGVwdGhTdGVuY2lsQnVmZmVyKTsKLSAgICAgICAgOjpnbERlbGV0ZUZy
YW1lYnVmZmVyc0VYVCgxLCAmbV9tdWx0aXNhbXBsZUZCTyk7Ci0gICAgfSBlbHNlIHsKLSAgICAg
ICAgaWYgKG1fYXR0cnMuc3RlbmNpbCB8fCBtX2F0dHJzLmRlcHRoKQotICAgICAgICAgICAgOjpn
bERlbGV0ZVJlbmRlcmJ1ZmZlcnNFWFQoMSwgJm1fZGVwdGhTdGVuY2lsQnVmZmVyKTsKLSAgICB9
Ci0gICAgOjpnbERlbGV0ZUZyYW1lYnVmZmVyc0VYVCgxLCAmbV9mYm8pOwotfQotCi1ib29sIEdy
YXBoaWNzQ29udGV4dDNEOjptYWtlQ29udGV4dEN1cnJlbnQoKQotewotICAgIGlmICghbV9wcml2
YXRlKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgcmV0dXJuIG1fcHJpdmF0ZS0+bWFrZUNv
bnRleHRDdXJyZW50KCk7Ci19Ci0KLVBsYXRmb3JtR3JhcGhpY3NDb250ZXh0M0QgR3JhcGhpY3ND
b250ZXh0M0Q6OnBsYXRmb3JtR3JhcGhpY3NDb250ZXh0M0QoKSBjb25zdAotewotICAgIHJldHVy
biBtX3ByaXZhdGUtPm1fY29udGV4dDsKLX0KLQotYm9vbCBHcmFwaGljc0NvbnRleHQzRDo6aXNH
TEVTMkNvbXBsaWFudCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCi19IC8vIG5h
bWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRpZiAvLyBFTkFCTEUoV0VCR0wpCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ndGsvRHJhd2luZ0J1ZmZlckd0ay5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ndGsvRHJhd2luZ0J1ZmZlckd0ay5j
cHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDA2N2I5YzdiMzYyNWZjNGIyNDI1ZTJl
OTYxNjdmYjljNTE2MGM2MWEuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3RrL0RyYXdpbmdCdWZm
ZXJHdGsuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsOTcgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdo
dCAoQykgMjAxMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgot
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgot
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQg
QU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKLSAqIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
LSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCi0gKi8KLQotI2luY2x1ZGUgImNvbmZp
Zy5oIgotCi0jaWYgRU5BQkxFKEFDQ0VMRVJBVEVEXzJEX0NBTlZBUykgfHwgRU5BQkxFKFdFQkdM
KQotCi0jaW5jbHVkZSAiRHJhd2luZ0J1ZmZlci5oIgotCi0jaW5jbHVkZSAiRXh0ZW5zaW9uczNE
LmgiCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotRHJhd2luZ0J1ZmZlcjo6RHJhd2luZ0J1ZmZl
cihHcmFwaGljc0NvbnRleHQzRCogY29udGV4dCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgY29uc3QgSW50U2l6ZSYgc2l6ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9v
bCBtdWx0aXNhbXBsZUV4dGVuc2lvblN1cHBvcnRlZCwKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgYm9vbCBwYWNrZWREZXB0aFN0ZW5jaWxFeHRlbnNpb25TdXBwb3J0ZWQsCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGJvb2wgc2VwYXJhdGVCYWNraW5nVGV4dHVyZSkKLSAgICA6
IG1fc2VwYXJhdGVCYWNraW5nVGV4dHVyZShzZXBhcmF0ZUJhY2tpbmdUZXh0dXJlKQotICAgICwg
bV9zY2lzc29yRW5hYmxlZChmYWxzZSkKLSAgICAsIG1fdGV4dHVyZTJEQmluZGluZygwKQotICAg
ICwgbV9hY3RpdmVUZXh0dXJlVW5pdChHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRTApCi0gICAg
LCBtX2NvbnRleHQoY29udGV4dCkKLSAgICAsIG1fc2l6ZSgtMSwgLTEpCi0gICAgLCBtX211bHRp
c2FtcGxlRXh0ZW5zaW9uU3VwcG9ydGVkKG11bHRpc2FtcGxlRXh0ZW5zaW9uU3VwcG9ydGVkKQot
ICAgICwgbV9wYWNrZWREZXB0aFN0ZW5jaWxFeHRlbnNpb25TdXBwb3J0ZWQocGFja2VkRGVwdGhT
dGVuY2lsRXh0ZW5zaW9uU3VwcG9ydGVkKQotICAgICwgbV9mYm8oY29udGV4dC0+Y3JlYXRlRnJh
bWVidWZmZXIoKSkKLSAgICAsIG1fY29sb3JCdWZmZXIoMCkKLSAgICAsIG1fZGVwdGhTdGVuY2ls
QnVmZmVyKDApCi0gICAgLCBtX2RlcHRoQnVmZmVyKDApCi0gICAgLCBtX3N0ZW5jaWxCdWZmZXIo
MCkKLSAgICAsIG1fbXVsdGlzYW1wbGVGQk8oMCkKLSAgICAsIG1fbXVsdGlzYW1wbGVDb2xvckJ1
ZmZlcigwKQotewotICAgIC8vIFN1cHBvcnQgZm9yIGEgc2VwYXJhdGUgYmFja2luZyB0ZXh0dXJl
IGhhcyBvbmx5IGJlZW4gZW5hYmxlZCBmb3IKLSAgICAvLyB0aGUgY2hyb21pdW0gcG9ydC4KLSAg
ICBBU1NFUlQoIW1fc2VwYXJhdGVCYWNraW5nVGV4dHVyZSk7Ci0gICAgQVNTRVJUKG1fZmJvKTsK
LSAgICBpZiAoIW1fZmJvKSB7Ci0gICAgICAgIGNsZWFyKCk7Ci0gICAgICAgIHJldHVybjsKLSAg
ICB9Ci0gICAgICAgIAotICAgIC8vIGNyZWF0ZSBhIHRleHR1cmUgdG8gcmVuZGVyIGludG8KLSAg
ICBtX2NvbG9yQnVmZmVyID0gY29udGV4dC0+Y3JlYXRlVGV4dHVyZSgpOwotICAgIGNvbnRleHQt
PmJpbmRUZXh0dXJlKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJELCBtX2NvbG9yQnVmZmVy
KTsKLSAgICBjb250ZXh0LT50ZXhQYXJhbWV0ZXJmKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJF
XzJELCBHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV9NQUdfRklMVEVSLCBHcmFwaGljc0NvbnRl
eHQzRDo6TElORUFSKTsKLSAgICBjb250ZXh0LT50ZXhQYXJhbWV0ZXJmKEdyYXBoaWNzQ29udGV4
dDNEOjpURVhUVVJFXzJELCBHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV9NSU5fRklMVEVSLCBH
cmFwaGljc0NvbnRleHQzRDo6TElORUFSKTsKLSAgICBjb250ZXh0LT50ZXhQYXJhbWV0ZXJpKEdy
YXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJELCBHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV9X
UkFQX1MsIEdyYXBoaWNzQ29udGV4dDNEOjpDTEFNUF9UT19FREdFKTsKLSAgICBjb250ZXh0LT50
ZXhQYXJhbWV0ZXJpKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJELCBHcmFwaGljc0NvbnRl
eHQzRDo6VEVYVFVSRV9XUkFQX1QsIEdyYXBoaWNzQ29udGV4dDNEOjpDTEFNUF9UT19FREdFKTsK
LSAgICBjb250ZXh0LT5iaW5kVGV4dHVyZShHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCwg
MCk7Ci0gICAgCi0gICAgY3JlYXRlU2Vjb25kYXJ5QnVmZmVycygpOwotICAgIHJlc2V0KHNpemUp
OwotfQotCi1EcmF3aW5nQnVmZmVyOjp+RHJhd2luZ0J1ZmZlcigpCi17Ci0gICAgY2xlYXIoKTsK
LX0KLQotUGxhdGZvcm0zRE9iamVjdCBEcmF3aW5nQnVmZmVyOjpwbGF0Zm9ybUNvbG9yQnVmZmVy
KCkgY29uc3QKLXsKLSAgICByZXR1cm4gbV9jb2xvckJ1ZmZlcjsKLX0KLQotI2lmIFVTRShBQ0NF
TEVSQVRFRF9DT01QT1NJVElORykKLXZvaWQgRHJhd2luZ0J1ZmZlcjo6cGFpbnRDb21wb3NpdGVk
UmVzdWx0c1RvQ2FudmFzKENhbnZhc1JlbmRlcmluZ0NvbnRleHQqIGNvbnRleHQpCi17Ci19Ci0j
ZW5kaWYKLQotfQotCi0jZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2d0ay9HcmFwaGljc0NvbnRleHQzREd0ay5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9ndGsvR3JhcGhpY3NDb250ZXh0M0RHdGsuY3BwCmRlbGV0ZWQgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCA0MThiOGI0NjE5MzJiMDY5M2M3MDJkZDczYzZiZDExNzA2NjVh
OWNkLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2d0ay9HcmFwaGljc0NvbnRleHQzREd0ay5jcHAK
KysrIC9kZXYvbnVsbApAQCAtMSwxNTcgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAw
OSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEg
SWdhbGlhIFMuTC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoK
LSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICog
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgQ09NUFVURVIsIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAot
ICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICog
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4gCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIkdyYXBo
aWNzQ29udGV4dDNELmgiCi0KLSNpZiBFTkFCTEUoV0VCR0wpCi0jaW5jbHVkZSAiRXh0ZW5zaW9u
czNET3BlbkdMLmgiCi0jaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0M0RQcml2YXRlLmgiCi0jaW5j
bHVkZSAiT3BlbkdMU2hpbXMuaCIKLSNpbmNsdWRlICJTaGFkZXJMYW5nLmgiCi0jaW5jbHVkZSA8
d3RmL05vdEZvdW5kLmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotUGFzc1JlZlB0cjxHcmFw
aGljc0NvbnRleHQzRD4gR3JhcGhpY3NDb250ZXh0M0Q6OmNyZWF0ZShHcmFwaGljc0NvbnRleHQz
RDo6QXR0cmlidXRlcyBhdHRyaWJ1dGVzLCBIb3N0V2luZG93KiBob3N0V2luZG93LCBHcmFwaGlj
c0NvbnRleHQzRDo6UmVuZGVyU3R5bGUgcmVuZGVyU3R5bGUpCi17Ci0gICAgLy8gVGhpcyBpbXBs
ZW1lbnRhdGlvbiBkb2Vzbid0IGN1cnJlbnRseSBzdXBwb3J0IHJlbmRlcmluZyBkaXJlY3RseSB0
byB0aGUgSG9zdFdpbmRvdy4KLSAgICBpZiAocmVuZGVyU3R5bGUgPT0gUmVuZGVyRGlyZWN0bHlU
b0hvc3RXaW5kb3cpCi0gICAgICAgIHJldHVybiAwOwotCi0gICAgT3duUHRyPEdyYXBoaWNzQ29u
dGV4dDNEUHJpdmF0ZT4gcHJpdiA9IEdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZTo6Y3JlYXRlKCk7
Ci0gICAgaWYgKCFwcml2KQotICAgICAgICByZXR1cm4gMDsKLQotICAgIFJlZlB0cjxHcmFwaGlj
c0NvbnRleHQzRD4gY29udGV4dCA9IGFkb3B0UmVmKG5ldyBHcmFwaGljc0NvbnRleHQzRChhdHRy
aWJ1dGVzLCBob3N0V2luZG93LCBmYWxzZSkpOwotICAgIGNvbnRleHQtPm1fcHJpdmF0ZSA9IHBy
aXYucmVsZWFzZSgpOwotICAgIHJldHVybiBjb250ZXh0LnJlbGVhc2UoKTsKLX0KLQotR3JhcGhp
Y3NDb250ZXh0M0Q6OkdyYXBoaWNzQ29udGV4dDNEKEdyYXBoaWNzQ29udGV4dDNEOjpBdHRyaWJ1
dGVzIGF0dHJpYnV0ZXMsIEhvc3RXaW5kb3cqLCBib29sKQotICAgIDogbV9jdXJyZW50V2lkdGgo
MCkKLSAgICAsIG1fY3VycmVudEhlaWdodCgwKQotICAgICwgbV9hdHRycyhhdHRyaWJ1dGVzKQot
ICAgICwgbV90ZXh0dXJlKDApCi0gICAgLCBtX2ZibygwKQotICAgICwgbV9kZXB0aFN0ZW5jaWxC
dWZmZXIoMCkKLSAgICAsIG1fYm91bmRGQk8oMCkKLSAgICAsIG1fbXVsdGlzYW1wbGVGQk8oMCkK
LSAgICAsIG1fbXVsdGlzYW1wbGVEZXB0aFN0ZW5jaWxCdWZmZXIoMCkKLSAgICAsIG1fbXVsdGlz
YW1wbGVDb2xvckJ1ZmZlcigwKQotewotICAgIEdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZTo6YWRk
QWN0aXZlR3JhcGhpY3NDb250ZXh0KHRoaXMpOwotCi0gICAgdmFsaWRhdGVBdHRyaWJ1dGVzKCk7
Ci0KLSAgICAvLyBDcmVhdGUgYSB0ZXh0dXJlIHRvIHJlbmRlciBpbnRvLgotICAgIDo6Z2xHZW5U
ZXh0dXJlcygxLCAmbV90ZXh0dXJlKTsKLSAgICA6OmdsQmluZFRleHR1cmUoR0xfVEVYVFVSRV8y
RCwgbV90ZXh0dXJlKTsKLSAgICA6OmdsVGV4UGFyYW1ldGVyZihHTF9URVhUVVJFXzJELCBHTF9U
RVhUVVJFX01BR19GSUxURVIsIEdMX0xJTkVBUik7Ci0gICAgOjpnbFRleFBhcmFtZXRlcmYoR0xf
VEVYVFVSRV8yRCwgR0xfVEVYVFVSRV9NSU5fRklMVEVSLCBHTF9MSU5FQVIpOwotICAgIDo6Z2xU
ZXhQYXJhbWV0ZXJpKEdMX1RFWFRVUkVfMkQsIEdMX1RFWFRVUkVfV1JBUF9TLCBHTF9DTEFNUCk7
Ci0gICAgOjpnbFRleFBhcmFtZXRlcmkoR0xfVEVYVFVSRV8yRCwgR0xfVEVYVFVSRV9XUkFQX1Qs
IEdMX0NMQU1QKTsKLSAgICA6OmdsQmluZFRleHR1cmUoR0xfVEVYVFVSRV8yRCwgMCk7Ci0KLSAg
ICAvLyBDcmVhdGUgYW4gRkJPLgotICAgIDo6Z2xHZW5GcmFtZWJ1ZmZlcnNFWFQoMSwgJm1fZmJv
KTsKLSAgICA6OmdsQmluZEZyYW1lYnVmZmVyRVhUKEdMX0ZSQU1FQlVGRkVSX0VYVCwgbV9mYm8p
OwotCi0gICAgbV9ib3VuZEZCTyA9IG1fZmJvOwotICAgIGlmICghbV9hdHRycy5hbnRpYWxpYXMg
JiYgKG1fYXR0cnMuc3RlbmNpbCB8fCBtX2F0dHJzLmRlcHRoKSkKLSAgICAgICAgOjpnbEdlblJl
bmRlcmJ1ZmZlcnNFWFQoMSwgJm1fZGVwdGhTdGVuY2lsQnVmZmVyKTsKLSAgICAKLSAgICAvLyBD
cmVhdGUgYSBtdWx0aXNhbXBsZSBGQk8uCi0gICAgaWYgKG1fYXR0cnMuYW50aWFsaWFzKSB7Ci0g
ICAgICAgIDo6Z2xHZW5GcmFtZWJ1ZmZlcnNFWFQoMSwgJm1fbXVsdGlzYW1wbGVGQk8pOwotICAg
ICAgICA6OmdsQmluZEZyYW1lYnVmZmVyRVhUKEdMX0ZSQU1FQlVGRkVSX0VYVCwgbV9tdWx0aXNh
bXBsZUZCTyk7Ci0gICAgICAgIG1fYm91bmRGQk8gPSBtX211bHRpc2FtcGxlRkJPOwotICAgICAg
ICA6OmdsR2VuUmVuZGVyYnVmZmVyc0VYVCgxLCAmbV9tdWx0aXNhbXBsZUNvbG9yQnVmZmVyKTsK
LSAgICAgICAgaWYgKG1fYXR0cnMuc3RlbmNpbCB8fCBtX2F0dHJzLmRlcHRoKQotICAgICAgICAg
ICAgOjpnbEdlblJlbmRlcmJ1ZmZlcnNFWFQoMSwgJm1fbXVsdGlzYW1wbGVEZXB0aFN0ZW5jaWxC
dWZmZXIpOwotICAgIH0KLQotICAgIC8vIEFOR0xFIGluaXRpYWxpemF0aW9uLgotICAgIFNoQnVp
bHRJblJlc291cmNlcyBBTkdMRVJlc291cmNlczsKLSAgICBTaEluaXRCdWlsdEluUmVzb3VyY2Vz
KCZBTkdMRVJlc291cmNlcyk7Ci0KLSAgICBnZXRJbnRlZ2VydihHcmFwaGljc0NvbnRleHQzRDo6
TUFYX1ZFUlRFWF9BVFRSSUJTLCAmQU5HTEVSZXNvdXJjZXMuTWF4VmVydGV4QXR0cmlicyk7Ci0g
ICAgZ2V0SW50ZWdlcnYoR3JhcGhpY3NDb250ZXh0M0Q6Ok1BWF9WRVJURVhfVU5JRk9STV9WRUNU
T1JTLCAmQU5HTEVSZXNvdXJjZXMuTWF4VmVydGV4VW5pZm9ybVZlY3RvcnMpOwotICAgIGdldElu
dGVnZXJ2KEdyYXBoaWNzQ29udGV4dDNEOjpNQVhfVkFSWUlOR19WRUNUT1JTLCAmQU5HTEVSZXNv
dXJjZXMuTWF4VmFyeWluZ1ZlY3RvcnMpOwotICAgIGdldEludGVnZXJ2KEdyYXBoaWNzQ29udGV4
dDNEOjpNQVhfVkVSVEVYX1RFWFRVUkVfSU1BR0VfVU5JVFMsICZBTkdMRVJlc291cmNlcy5NYXhW
ZXJ0ZXhUZXh0dXJlSW1hZ2VVbml0cyk7Ci0gICAgZ2V0SW50ZWdlcnYoR3JhcGhpY3NDb250ZXh0
M0Q6Ok1BWF9DT01CSU5FRF9URVhUVVJFX0lNQUdFX1VOSVRTLCAmQU5HTEVSZXNvdXJjZXMuTWF4
Q29tYmluZWRUZXh0dXJlSW1hZ2VVbml0cyk7Ci0gICAgZ2V0SW50ZWdlcnYoR3JhcGhpY3NDb250
ZXh0M0Q6Ok1BWF9URVhUVVJFX0lNQUdFX1VOSVRTLCAmQU5HTEVSZXNvdXJjZXMuTWF4VGV4dHVy
ZUltYWdlVW5pdHMpOwotICAgIGdldEludGVnZXJ2KEdyYXBoaWNzQ29udGV4dDNEOjpNQVhfRlJB
R01FTlRfVU5JRk9STV9WRUNUT1JTLCAmQU5HTEVSZXNvdXJjZXMuTWF4RnJhZ21lbnRVbmlmb3Jt
VmVjdG9ycyk7Ci0KLSAgICAvLyBBbHdheXMgc2V0IHRvIDEgZm9yIE9wZW5HTCBFUy4KLSAgICBB
TkdMRVJlc291cmNlcy5NYXhEcmF3QnVmZmVycyA9IDE7Ci0gICAgbV9jb21waWxlci5zZXRSZXNv
dXJjZXMoQU5HTEVSZXNvdXJjZXMpOwotCi0gICAgOjpnbEVuYWJsZShHTF9WRVJURVhfUFJPR1JB
TV9QT0lOVF9TSVpFKTsKLSAgICA6OmdsRW5hYmxlKEdMX1BPSU5UX1NQUklURSk7Ci0gICAgOjpn
bENsZWFyQ29sb3IoMCwgMCwgMCwgMCk7Ci19Ci0KLUdyYXBoaWNzQ29udGV4dDNEOjp+R3JhcGhp
Y3NDb250ZXh0M0QoKQotewotICAgIEdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZTo6cmVtb3ZlQWN0
aXZlR3JhcGhpY3NDb250ZXh0KHRoaXMpOwotICAgIGlmICghbV9wcml2YXRlLT5tX2NvbnRleHQp
Ci0gICAgICAgIHJldHVybjsKLQotICAgIG1ha2VDb250ZXh0Q3VycmVudCgpOwotICAgIDo6Z2xE
ZWxldGVUZXh0dXJlcygxLCAmbV90ZXh0dXJlKTsKLSAgICBpZiAobV9hdHRycy5hbnRpYWxpYXMp
IHsKLSAgICAgICAgOjpnbERlbGV0ZVJlbmRlcmJ1ZmZlcnNFWFQoMSwgJm1fbXVsdGlzYW1wbGVD
b2xvckJ1ZmZlcik7Ci0gICAgICAgIGlmIChtX2F0dHJzLnN0ZW5jaWwgfHwgbV9hdHRycy5kZXB0
aCkKLSAgICAgICAgICAgIDo6Z2xEZWxldGVSZW5kZXJidWZmZXJzRVhUKDEsICZtX211bHRpc2Ft
cGxlRGVwdGhTdGVuY2lsQnVmZmVyKTsKLSAgICAgICAgOjpnbERlbGV0ZUZyYW1lYnVmZmVyc0VY
VCgxLCAmbV9tdWx0aXNhbXBsZUZCTyk7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgaWYgKG1fYXR0
cnMuc3RlbmNpbCB8fCBtX2F0dHJzLmRlcHRoKQotICAgICAgICAgICAgOjpnbERlbGV0ZVJlbmRl
cmJ1ZmZlcnNFWFQoMSwgJm1fZGVwdGhTdGVuY2lsQnVmZmVyKTsKLSAgICB9Ci0gICAgOjpnbERl
bGV0ZUZyYW1lYnVmZmVyc0VYVCgxLCAmbV9mYm8pOwotfQotCi1ib29sIEdyYXBoaWNzQ29udGV4
dDNEOjptYWtlQ29udGV4dEN1cnJlbnQoKQotewotICAgIGlmICghbV9wcml2YXRlKQotICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0gICAgcmV0dXJuIG1fcHJpdmF0ZS0+bWFrZUNvbnRleHRDdXJyZW50
KCk7Ci19Ci0KLVBsYXRmb3JtR3JhcGhpY3NDb250ZXh0M0QgR3JhcGhpY3NDb250ZXh0M0Q6OnBs
YXRmb3JtR3JhcGhpY3NDb250ZXh0M0QoKQotewotICAgIHJldHVybiBtX3ByaXZhdGUtPm1fY29u
dGV4dDsKLX0KLQotYm9vbCBHcmFwaGljc0NvbnRleHQzRDo6aXNHTEVTMkNvbXBsaWFudCgpIGNv
bnN0Ci17Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCi19Ci0KLSNlbmRpZiAvLyBFTkFCTEUoV0VC
R0wpCg==
</data>

          </attachment>
      

    </bug>

</bugzilla>