<?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>77296</bug_id>
          
          <creation_ts>2012-01-29 05:09:52 -0800</creation_ts>
          <short_desc>Make GraphicsContext3DPrivate of GTK port shareable.</short_desc>
          <delta_ts>2012-01-30 01:40:57 -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>Platform</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>77219</blocked>
          <everconfirmed>0</everconfirmed>
          <reporter name="ChangSeok Oh">kevin.cs.oh</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>eric</cc>
    
    <cc>igor.oliveira</cc>
    
    <cc>jamesr</cc>
    
    <cc>mrobinson</cc>
    
    <cc>simon.fraser</cc>
    
    <cc>webkit.review.bot</cc>
    
    <cc>xan.lopez</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>544731</commentid>
    <comment_count>0</comment_count>
    <who name="ChangSeok Oh">kevin.cs.oh</who>
    <bug_when>2012-01-29 05:09:52 -0800</bug_when>
    <thetext>I think that GraphicsContext3DPrivate of GTK port could be shareable with another port using glx backend like EFL port.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>544734</commentid>
    <comment_count>1</comment_count>
      <attachid>124464</attachid>
    <who name="ChangSeok Oh">kevin.cs.oh</who>
    <bug_when>2012-01-29 07:40:11 -0800</bug_when>
    <thetext>Created attachment 124464
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>544749</commentid>
    <comment_count>2</comment_count>
      <attachid>124464</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2012-01-29 11:59:23 -0800</bug_when>
    <thetext>Comment on attachment 124464
Patch

We&apos;re just moving code here?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>544802</commentid>
    <comment_count>3</comment_count>
    <who name="ChangSeok Oh">kevin.cs.oh</who>
    <bug_when>2012-01-29 17:37:27 -0800</bug_when>
    <thetext>(In reply to comment #2)
&gt; (From update of attachment 124464 [details])
&gt; We&apos;re just moving code here?

Yes. But in the next patch, I plan to add some codes to support WebGL for EFL port based on this patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>544818</commentid>
    <comment_count>4</comment_count>
      <attachid>124464</attachid>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2012-01-29 18:21:59 -0800</bug_when>
    <thetext>Comment on attachment 124464
Patch

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

&gt; Source/WebCore/platform/graphics/glx/GraphicsContext3DPrivate.h:41
&gt; +    public:
&gt; +    static PassOwnPtr&lt;GraphicsContext3DPrivate&gt; create();
&gt; +    ~GraphicsContext3DPrivate();
&gt; +    bool makeContextCurrent();
&gt; +
&gt; +    private:

Since the code is moving it might be a good idea to fix the indentation of &quot;public:&quot; and &quot;private:&quot;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>544860</commentid>
    <comment_count>5</comment_count>
      <attachid>124490</attachid>
    <who name="ChangSeok Oh">kevin.cs.oh</who>
    <bug_when>2012-01-29 20:53:10 -0800</bug_when>
    <thetext>Created attachment 124490
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>544861</commentid>
    <comment_count>6</comment_count>
      <attachid>124464</attachid>
    <who name="ChangSeok Oh">kevin.cs.oh</who>
    <bug_when>2012-01-29 20:55:23 -0800</bug_when>
    <thetext>Comment on attachment 124464
Patch

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

Thank you for review!

&gt;&gt; Source/WebCore/platform/graphics/glx/GraphicsContext3DPrivate.h:41
&gt;&gt; +    private:
&gt; 
&gt; Since the code is moving it might be a good idea to fix the indentation of &quot;public:&quot; and &quot;private:&quot;

Done. :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>544909</commentid>
    <comment_count>7</comment_count>
      <attachid>124490</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2012-01-30 00:12:47 -0800</bug_when>
    <thetext>Comment on attachment 124490
Patch

rs=me.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>544939</commentid>
    <comment_count>8</comment_count>
      <attachid>124490</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-01-30 01:40:52 -0800</bug_when>
    <thetext>Comment on attachment 124490
Patch

Clearing flags on attachment: 124490

Committed r106220: &lt;http://trac.webkit.org/changeset/106220&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>544940</commentid>
    <comment_count>9</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-01-30 01:40:57 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>124464</attachid>
            <date>2012-01-29 07:40:11 -0800</date>
            <delta_ts>2012-01-29 20:55:23 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-77296-20120130004003.patch</filename>
            <type>text/plain</type>
            <size>25223</size>
            <attacher name="ChangSeok Oh">kevin.cs.oh</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTA2MTk4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggODVmMjUxM2RlNDA3NmJh
NTE3N2RlZDNmM2U5MTliNGIwYzc1MTRjNS4uZjk5NGNmMjkzN2M1ODU4MzU1ZDk4NGNmMTg1Nzgx
YTg5NDUzYzIyOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDM1IEBACisyMDEyLTAxLTI5ICBDaGFu
Z1Nlb2sgT2ggIDxzaGl2YW1pZG93QGdtYWlsLmNvbT4KKworICAgICAgICBNYWtlIEdyYXBoaWNz
Q29udGV4dDNEUHJpdmF0ZSBvZiBHVEsgcG9ydCBzaGFyZWFibGUuCisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03NzI5NgorCisgICAgICAgIFJldmlld2Vk
IGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZS5j
cHAvaCBvZiBHVEsgcG9ydCBsb29rIHNoYXJlYWJsZSB3aXRoIGFub3RoZXIgcG9ydAorICAgICAg
ICB1c2luZyBnbHggYmFja2VuZCBmb3IgV2ViR0wuIEZvciBleGFtcGxlLCBFRkwgcG9ydC4KKyAg
ICAgICAgTW92ZWQgR3JhcGhpY3NDb250ZXh0M0RQcml2YXRlLmNwcCBhbmQgaXRzIGhlYWRlciBp
bnRvIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dseC4KKworICAgICAgICBObyBu
ZXcgdGVzdHMgcmVxdWlyZWQsIGJlY2F1c2Ugb2Ygbm8gbmV3IGZlYXR1cmUuCisKKyAgICAgICAg
KiBHTlVtYWtlZmlsZS5hbToKKyAgICAgICAgKiBHTlVtYWtlZmlsZS5saXN0LmFtOgorICAgICAg
ICAqIHBsYXRmb3JtL2dyYXBoaWNzL2dseC9HcmFwaGljc0NvbnRleHQzRFByaXZhdGUuY3BwOiBS
ZW5hbWVkIGZyb20gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3RrL0dyYXBoaWNz
Q29udGV4dDNEUHJpdmF0ZS5jcHAuCisgICAgICAgIChzaGFyZWREaXNwbGF5KToKKyAgICAgICAg
KFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6YWN0aXZlR3JhcGhpY3NDb250ZXh0cyk6Cisg
ICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRFByaXZhdGU6OmFkZEFjdGl2ZUdyYXBo
aWNzQ29udGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRFByaXZhdGU6
OnJlbW92ZUFjdGl2ZUdyYXBoaWNzQ29udGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGlj
c0NvbnRleHQzRFByaXZhdGU6OmNsZWFudXBBY3RpdmVDb250ZXh0c0F0RXhpdCk6CisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRFByaXZhdGU6OmNyZWF0ZSk6CisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRFByaXZhdGU6OmNyZWF0ZVBidWZmZXJDb250ZXh0KToK
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZTo6Y3JlYXRlUGl4bWFw
Q29udGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRFByaXZhdGU6Okdy
YXBoaWNzQ29udGV4dDNEUHJpdmF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHQzRFByaXZhdGU6On5HcmFwaGljc0NvbnRleHQzRFByaXZhdGUpOgorICAgICAgICAoV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0M0RQcml2YXRlOjptYWtlQ29udGV4dEN1cnJlbnQpOgorICAgICAg
ICAqIHBsYXRmb3JtL2dyYXBoaWNzL2dseC9HcmFwaGljc0NvbnRleHQzRFByaXZhdGUuaDogUmVu
YW1lZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2d0ay9HcmFwaGljc0Nv
bnRleHQzRFByaXZhdGUuaC4KKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoR3JhcGhpY3ND
b250ZXh0M0RQcml2YXRlKToKKwogMjAxMi0wMS0yOCAgQWxleGFuZGVyIEbDpnLDuHkgIDxhaGZA
MHg5MC5kaz4KIAogICAgICAgICBbUXRdIFJlbW92ZSByZWZlcmVuY2VzIHRvIENTU0JvcmRlcklt
YWdlVmFsdWUuaCBpbiBUYXJnZXQucHJpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9HTlVt
YWtlZmlsZS5hbSBiL1NvdXJjZS9XZWJDb3JlL0dOVW1ha2VmaWxlLmFtCmluZGV4IGM4MTVkN2Ix
Yzk3NTY0ZWE3ZDc2NWJiNDdmNmU5OWNhZDVmNWIwNmQuLjQzYmMwMTRjNDIzMDg2NWUxNTVjYTJj
NzVjZTgwYWQyNjY2NmE3NzIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL0dOVW1ha2VmaWxl
LmFtCisrKyBiL1NvdXJjZS9XZWJDb3JlL0dOVW1ha2VmaWxlLmFtCkBAIC0xMDEsNiArMTAxLDcg
QEAgd2ViY29yZWd0a19jcHBmbGFncyArPSBcCiAJLUkkKHNyY2RpcikvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vY2Fpcm8gXAogCS1JJChzcmNkaXIpL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1
ZGlvL2dzdHJlYW1lciBcCiAJLUkkKHNyY2RpcikvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2Fpcm8gXAorCS1JJChzcmNkaXIpL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2dseCBcCiAJLUkkKHNyY2RpcikvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Z3N0cmVhbWVyIFwKIAktSSQoc3JjZGlyKS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9ndGsgXAogCS1JJChzcmNkaXIpL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ayBcCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9HTlVtYWtlZmlsZS5saXN0LmFtIGIvU291cmNlL1dlYkNv
cmUvR05VbWFrZWZpbGUubGlzdC5hbQppbmRleCA1YWZlZTFlY2I1NzE1NTU2YzRhNmIwMzk0MzMy
MTM3MzY1MWJiZGQwLi5hNTg2YTU3ZDVkNTIyNjc0Y2I5N2YxYmMwNmY5ZmY3ODVkY2Y3YjUyIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9HTlVtYWtlZmlsZS5saXN0LmFtCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0KQEAgLTU2NjUsMTQgKzU2NjUsMTQgQEAgd2Vi
Y29yZV9zb3VyY2VzICs9IFwKIAlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWly
by9HcmFwaGljc0NvbnRleHQzRENhaXJvLmNwcCBcCiAJU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2Fpcm8vT3BlbkdMU2hpbXMuY3BwIFwKIAlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jYWlyby9PcGVuR0xTaGltcy5oIFwKKwlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9nbHgvR3JhcGhpY3NDb250ZXh0M0RQcml2YXRlLmNwcCBcCisJU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ2x4L0dyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZS5oIFwK
IAlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ncHUvRHJhd2luZ0J1ZmZlci5jcHAg
XAogCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dwdS9EcmF3aW5nQnVmZmVyLmgg
XAogCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dDNELmNw
cCBcCiAJU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0M0Qu
aCBcCiAJU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3RrL0RyYXdpbmdCdWZmZXJH
dGsuY3BwIFwKIAlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ndGsvR3JhcGhpY3ND
b250ZXh0M0RHdGsuY3BwIFwKLQlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ndGsv
R3JhcGhpY3NDb250ZXh0M0RQcml2YXRlLmNwcCBcCi0JU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvZ3RrL0dyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZS5oIFwKIAlTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvRXh0ZW5zaW9uczNET3BlbkdMLmNwcCBcCiAJU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0V4dGVuc2lvbnMzRE9wZW5HTC5o
IFwKIAlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR3JhcGhpY3NDb250
ZXh0M0RPcGVuR0wuY3BwIFwKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2dseC9HcmFwaGljc0NvbnRleHQzRFByaXZhdGUuY3BwIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvZ2x4L0dyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZS5jcHAKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMC4uYTYyOGE0YmQ2ZWZlYjE3YWFlZGYyMzg2NGEwY2Y2OWMzMWE0MGI3MQotLS0gL2Rldi9u
dWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dseC9HcmFwaGljc0Nv
bnRleHQzRFByaXZhdGUuY3BwCkBAIC0wLDAgKzEsMjUyIEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDExIElnYWxpYSBTLkwuCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJl
OyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICBtb2RpZnkgaXQgdW5kZXIgdGhl
IHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhcyBw
dWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiAgdmVy
c2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJz
aW9uLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhh
dCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhv
dXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiAgTGVzc2Vy
IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNo
b3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1Ymxp
YworICogIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8g
dGhlIEZyZWUKKyAqICBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJl
ZXQsIEZpZnRoIEZsb29yLAorICogIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSBVU0EKKyAqLworCisj
aW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0M0RQcml2YXRlLmgi
CisKKyNpZiBFTkFCTEUoV0VCR0wpCisKKyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQzRC5oIgor
I2luY2x1ZGUgIk9wZW5HTFNoaW1zLmgiCisjaW5jbHVkZSA8R0wvZ2x4Lmg+CisjaW5jbHVkZSA8
ZGxmY24uaD4KKworLy8gV2UgZG8gbm90IHdhbnQgdG8gY2FsbCBnbFhNYWtlQ29udGV4dEN1cnJl
bnQgdXNpbmcgZGlmZmVyZW50IERpc3BsYXkgcG9pbnRlcnMsCisvLyBiZWNhdXNlIGl0IG1pZ2h0
IGxlYWQgdG8gY3Jhc2hlcyBpbiBzb21lIGRyaXZlcnMgKGZnbHJ4KS4gV2UgdXNlIGEgc2hhcmVk
IGRpc3BsYXkKKy8vIHBvaW50ZXIgaGVyZS4KK3N0YXRpYyBEaXNwbGF5KiBnU2hhcmVkRGlzcGxh
eSA9IDA7CitzdGF0aWMgRGlzcGxheSogc2hhcmVkRGlzcGxheSgpCit7CisgICAgaWYgKCFnU2hh
cmVkRGlzcGxheSkKKyAgICAgICAgZ1NoYXJlZERpc3BsYXkgPSBYT3BlbkRpc3BsYXkoMCk7Cisg
ICAgcmV0dXJuIGdTaGFyZWREaXNwbGF5OworfQorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKKy8v
IEJlY2F1c2Ugb2YgZHJpdmVyIGJ1Z3MsIGV4aXRpbmcgdGhlIHByb2dyYW0gd2hlbiB0aGVyZSBh
cmUgYWN0aXZlIHBidWZmZXJzCisvLyBjYW4gY3Jhc2ggdGhlIFggc2VydmVyICh0aGlzIGhhcyBi
ZWVuIG9ic2VydmVkIHdpdGggdGhlIG9mZmljaWFsIE52aWRpYSBkcml2ZXJzKS4KKy8vIFdlIG5l
ZWQgdG8gZW5zdXJlIHRoYXQgd2UgY2xlYW4gZXZlcnl0aGluZyB1cCBvbiBleGl0LiBUaGVyZSBh
cmUgc2V2ZXJhbCByZWFzb25zCisvLyB0aGF0IEdyYXBoaWNzQ29udGV4dDNEcyB3aWxsIHN0aWxs
IGJlIGFsaXZlIGF0IGV4aXQsIGluY2x1ZGluZyB1c2VyIGVycm9yIChtZW1vcnkKKy8vIGxlYWtz
KSBhbmQgdGhlIHBhZ2UgY2FjaGUuIEluIGFueSBjYXNlLCB3ZSBkb24ndCB3YW50IHRoZSBYIHNl
cnZlciB0byBjcmFzaC4KK3N0YXRpYyBib29sIGNsZWFuaW5nVXBBdEV4aXQgPSBmYWxzZTsKK3N0
YXRpYyBWZWN0b3I8R3JhcGhpY3NDb250ZXh0M0QqPiYgYWN0aXZlR3JhcGhpY3NDb250ZXh0cygp
Cit7CisgICAgREVGSU5FX1NUQVRJQ19MT0NBTChWZWN0b3I8R3JhcGhpY3NDb250ZXh0M0QqPiwg
Y29udGV4dHMsICgpKTsKKyAgICByZXR1cm4gY29udGV4dHM7Cit9CisKK3ZvaWQgR3JhcGhpY3ND
b250ZXh0M0RQcml2YXRlOjphZGRBY3RpdmVHcmFwaGljc0NvbnRleHQoR3JhcGhpY3NDb250ZXh0
M0QqIGNvbnRleHQpCit7CisgICAgc3RhdGljIGJvb2wgYWRkZWRBdEV4aXRIYW5kbGVyID0gZmFs
c2U7CisgICAgaWYgKCFhZGRlZEF0RXhpdEhhbmRsZXIpIHsKKyAgICAgICAgYXRleGl0KCZHcmFw
aGljc0NvbnRleHQzRFByaXZhdGU6OmNsZWFudXBBY3RpdmVDb250ZXh0c0F0RXhpdCk7CisgICAg
ICAgIGFkZGVkQXRFeGl0SGFuZGxlciA9IHRydWU7CisgICAgfQorICAgIGFjdGl2ZUdyYXBoaWNz
Q29udGV4dHMoKS5hcHBlbmQoY29udGV4dCk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0RQ
cml2YXRlOjpyZW1vdmVBY3RpdmVHcmFwaGljc0NvbnRleHQoR3JhcGhpY3NDb250ZXh0M0QqIGNv
bnRleHQpCit7CisgICAgaWYgKGNsZWFuaW5nVXBBdEV4aXQpCisgICAgICAgIHJldHVybjsKKwor
ICAgIFZlY3RvcjxHcmFwaGljc0NvbnRleHQzRCo+JiBjb250ZXh0cyA9IGFjdGl2ZUdyYXBoaWNz
Q29udGV4dHMoKTsKKyAgICBzaXplX3QgbG9jYXRpb24gPSBjb250ZXh0cy5maW5kKGNvbnRleHQp
OworICAgIGlmIChsb2NhdGlvbiAhPSBXVEY6Om5vdEZvdW5kKQorICAgICAgICBjb250ZXh0cy5y
ZW1vdmUobG9jYXRpb24pOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZTo6Y2xl
YW51cEFjdGl2ZUNvbnRleHRzQXRFeGl0KCkKK3sKKyAgICBjbGVhbmluZ1VwQXRFeGl0ID0gdHJ1
ZTsKKworICAgIFZlY3RvcjxHcmFwaGljc0NvbnRleHQzRCo+JiBjb250ZXh0cyA9IGFjdGl2ZUdy
YXBoaWNzQ29udGV4dHMoKTsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGNvbnRleHRzLnNp
emUoKTsgaSsrKQorICAgICAgICBjb250ZXh0c1tpXS0+fkdyYXBoaWNzQ29udGV4dDNEKCk7CisK
KyAgICBpZiAoIWdTaGFyZWREaXNwbGF5KQorICAgICAgICByZXR1cm47CisgICAgWENsb3NlRGlz
cGxheShnU2hhcmVkRGlzcGxheSk7CisgICAgZ1NoYXJlZERpc3BsYXkgPSAwOworfQorCitQYXNz
T3duUHRyPEdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZT4gR3JhcGhpY3NDb250ZXh0M0RQcml2YXRl
OjpjcmVhdGUoKQoreworICAgIGlmICghc2hhcmVkRGlzcGxheSgpKQorICAgICAgICByZXR1cm4g
bnVsbHB0cjsKKworICAgIHN0YXRpYyBib29sIGluaXRpYWxpemVkID0gZmFsc2U7CisgICAgc3Rh
dGljIGJvb2wgc3VjY2VzcyA9IHRydWU7CisgICAgaWYgKCFpbml0aWFsaXplZCkgeworICAgICAg
ICBzdWNjZXNzID0gaW5pdGlhbGl6ZU9wZW5HTFNoaW1zKCk7CisgICAgICAgIGluaXRpYWxpemVk
ID0gdHJ1ZTsKKyAgICB9CisgICAgaWYgKCFzdWNjZXNzKQorICAgICAgICByZXR1cm4gbnVsbHB0
cjsKKworICAgIEdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZSogaW50ZXJuYWwgPSBjcmVhdGVQYnVm
ZmVyQ29udGV4dCgpOworICAgIGlmICghaW50ZXJuYWwpCisgICAgICAgIGludGVybmFsID0gY3Jl
YXRlUGl4bWFwQ29udGV4dCgpOworICAgIGlmICghaW50ZXJuYWwpCisgICAgICAgIHJldHVybiBu
dWxscHRyOworCisgICAgLy8gVGhlIEdyYXBoaWNzQ29udGV4dDNEIGNvbnN0cnVjdG9yIHJlcXVp
cmVzIHRoYXQgdGhpcyBjb250ZXh0IGlzIHRoZSBjdXJyZW50IE9wZW5HTCBjb250ZXh0LgorICAg
IGludGVybmFsLT5tYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICByZXR1cm4gYWRvcHRQdHIoaW50
ZXJuYWwpOworfQorCitHcmFwaGljc0NvbnRleHQzRFByaXZhdGUqIEdyYXBoaWNzQ29udGV4dDNE
UHJpdmF0ZTo6Y3JlYXRlUGJ1ZmZlckNvbnRleHQoKQoreworICAgIGludCBmYkNvbmZpZ0F0dHJp
YnV0ZXNbXSA9IHsKKyAgICAgICAgR0xYX0RSQVdBQkxFX1RZUEUsIEdMWF9QQlVGRkVSX0JJVCwK
KyAgICAgICAgR0xYX1JFTkRFUl9UWVBFLCBHTFhfUkdCQV9CSVQsCisgICAgICAgIEdMWF9SRURf
U0laRSwgMSwKKyAgICAgICAgR0xYX0dSRUVOX1NJWkUsIDEsCisgICAgICAgIEdMWF9CTFVFX1NJ
WkUsIDEsCisgICAgICAgIEdMWF9BTFBIQV9TSVpFLCAxLAorICAgICAgICBHTFhfREVQVEhfU0la
RSwgMSwKKyAgICAgICAgR0xYX1NURU5DSUxfU0laRSwgMSwKKyAgICAgICAgR0xYX1NBTVBMRV9C
VUZGRVJTLCAxLAorICAgICAgICBHTFhfRE9VQkxFQlVGRkVSLCBHTF9GQUxTRSwKKyAgICAgICAg
R0xYX1NBTVBMRVMsIDQsCisgICAgICAgIDAKKyAgICB9OworICAgIGludCByZXR1cm5lZEVsZW1l
bnRzOworICAgIEdMWEZCQ29uZmlnKiBjb25maWdzID0gZ2xYQ2hvb3NlRkJDb25maWcoc2hhcmVk
RGlzcGxheSgpLCAwLCBmYkNvbmZpZ0F0dHJpYnV0ZXMsICZyZXR1cm5lZEVsZW1lbnRzKTsKKyAg
ICBpZiAoIWNvbmZpZ3MpIHsKKyAgICAgICAgZmJDb25maWdBdHRyaWJ1dGVzWzIwXSA9IDA7IC8v
IEF0dGVtcHQgd2l0aG91dCBhbnRpLWFsaWFzaW5nLgorICAgICAgICBjb25maWdzID0gZ2xYQ2hv
b3NlRkJDb25maWcoc2hhcmVkRGlzcGxheSgpLCAwLCBmYkNvbmZpZ0F0dHJpYnV0ZXMsICZyZXR1
cm5lZEVsZW1lbnRzKTsKKyAgICB9CisgICAgaWYgKCFyZXR1cm5lZEVsZW1lbnRzKSB7CisgICAg
ICAgIFhGcmVlKGNvbmZpZ3MpOworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisKKyAgICAvLyBX
ZSB3aWxsIGJlIHJlbmRlcmluZyB0byBhIHRleHR1cmUsIHNvIG91ciBwYnVmZmVyIGRvZXMgbm90
IG5lZWQgdG8gYmUgbGFyZ2UuCisgICAgc3RhdGljIGNvbnN0IGludCBwYnVmZmVyQXR0cmlidXRl
c1tdID0geyBHTFhfUEJVRkZFUl9XSURUSCwgMSwgR0xYX1BCVUZGRVJfSEVJR0hULCAxLCAwIH07
CisgICAgR0xYUGJ1ZmZlciBwYnVmZmVyID0gZ2xYQ3JlYXRlUGJ1ZmZlcihzaGFyZWREaXNwbGF5
KCksIGNvbmZpZ3NbMF0sIHBidWZmZXJBdHRyaWJ1dGVzKTsKKyAgICBpZiAoIXBidWZmZXIpIHsK
KyAgICAgICAgWEZyZWUoY29uZmlncyk7CisgICAgICAgIHJldHVybiAwOworICAgIH0KKworICAg
IEdMWENvbnRleHQgY29udGV4dCA9IGdsWENyZWF0ZU5ld0NvbnRleHQoc2hhcmVkRGlzcGxheSgp
LCBjb25maWdzWzBdLCBHTFhfUkdCQV9UWVBFLCAwLCBHTF9UUlVFKTsKKyAgICBYRnJlZShjb25m
aWdzKTsKKyAgICBpZiAoIWNvbnRleHQpCisgICAgICAgIHJldHVybiAwOworICAgIHJldHVybiBu
ZXcgR3JhcGhpY3NDb250ZXh0M0RQcml2YXRlKGNvbnRleHQsIHBidWZmZXIpOworfQorCitHcmFw
aGljc0NvbnRleHQzRFByaXZhdGUqIEdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZTo6Y3JlYXRlUGl4
bWFwQ29udGV4dCgpCit7CisgICAgc3RhdGljIGludCB2aXN1YWxBdHRyaWJ1dGVzW10gPSB7Cisg
ICAgICAgIEdMWF9SR0JBLAorICAgICAgICBHTFhfUkVEX1NJWkUsIDEsCisgICAgICAgIEdMWF9H
UkVFTl9TSVpFLCAxLAorICAgICAgICBHTFhfQkxVRV9TSVpFLCAxLAorICAgICAgICBHTFhfQUxQ
SEFfU0laRSwgMSwKKyAgICAgICAgR0xYX0RPVUJMRUJVRkZFUiwKKyAgICAgICAgMAorICAgIH07
CisKKyAgICBYVmlzdWFsSW5mbyogdmlzdWFsSW5mbyA9IGdsWENob29zZVZpc3VhbChzaGFyZWRE
aXNwbGF5KCksIERlZmF1bHRTY3JlZW4oc2hhcmVkRGlzcGxheSgpKSwgdmlzdWFsQXR0cmlidXRl
cyk7CisgICAgaWYgKCF2aXN1YWxJbmZvKQorICAgICAgICByZXR1cm4gMDsKKyAKKyAgICBHTFhD
b250ZXh0IGNvbnRleHQgPSBnbFhDcmVhdGVDb250ZXh0KHNoYXJlZERpc3BsYXkoKSwgdmlzdWFs
SW5mbywgMCwgR0xfVFJVRSk7CisgICAgaWYgKCFjb250ZXh0KSB7CisgICAgICAgIFhGcmVlKHZp
c3VhbEluZm8pOworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisKKyAgICBQaXhtYXAgcGl4bWFw
ID0gWENyZWF0ZVBpeG1hcChzaGFyZWREaXNwbGF5KCksIERlZmF1bHRSb290V2luZG93KHNoYXJl
ZERpc3BsYXkoKSksIDEsIDEsIHZpc3VhbEluZm8tPmRlcHRoKTsKKyAgICBpZiAoIXBpeG1hcCkg
eworICAgICAgICBYRnJlZSh2aXN1YWxJbmZvKTsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQor
CisgICAgR0xYUGl4bWFwIGdseFBpeG1hcCA9IGdsWENyZWF0ZUdMWFBpeG1hcChzaGFyZWREaXNw
bGF5KCksIHZpc3VhbEluZm8sIHBpeG1hcCk7CisgICAgaWYgKCFnbHhQaXhtYXApIHsKKyAgICAg
ICAgWEZyZWVQaXhtYXAoc2hhcmVkRGlzcGxheSgpLCBwaXhtYXApOworICAgICAgICBYRnJlZSh2
aXN1YWxJbmZvKTsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorCisgICAgcmV0dXJuIG5ldyBH
cmFwaGljc0NvbnRleHQzRFByaXZhdGUoY29udGV4dCwgcGl4bWFwLCBnbHhQaXhtYXApOworfQor
CitHcmFwaGljc0NvbnRleHQzRFByaXZhdGU6OkdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZShHTFhD
b250ZXh0IGNvbnRleHQsIEdMWFBidWZmZXIgcGJ1ZmZlcikKKyAgICA6IG1fY29udGV4dChjb250
ZXh0KQorICAgICwgbV9wYnVmZmVyKHBidWZmZXIpCisgICAgLCBtX3BpeG1hcCgwKQorICAgICwg
bV9nbHhQaXhtYXAoMCkKK3sKK30KKworR3JhcGhpY3NDb250ZXh0M0RQcml2YXRlOjpHcmFwaGlj
c0NvbnRleHQzRFByaXZhdGUoR0xYQ29udGV4dCBjb250ZXh0LCBQaXhtYXAgcGl4bWFwLCBHTFhQ
aXhtYXAgZ2x4UGl4bWFwKQorICAgIDogbV9jb250ZXh0KGNvbnRleHQpCisgICAgLCBtX3BidWZm
ZXIoMCkKKyAgICAsIG1fcGl4bWFwKHBpeG1hcCkKKyAgICAsIG1fZ2x4UGl4bWFwKGdseFBpeG1h
cCkKK3sKK30KKworR3JhcGhpY3NDb250ZXh0M0RQcml2YXRlOjp+R3JhcGhpY3NDb250ZXh0M0RQ
cml2YXRlKCkKK3sKKyAgICBpZiAobV9jb250ZXh0KSB7CisgICAgICAgIC8vIFRoaXMgbWF5IGJl
IG5lY2Vzc2FyeSB0byBwcmV2ZW50IGNyYXNoZXMgd2l0aCBOVmlkaWEncyBjbG9zZWQgc291cmNl
IGRyaXZlcnMuIE9yaWdpbmFsbHkKKyAgICAgICAgLy8gZnJvbSBNb3ppbGxhJ3MgM0QgY2FudmFz
IGltcGxlbWVudGF0aW9uIGF0OiBodHRwOi8vYml0YnVja2V0Lm9yZy9pbG1hcmkvY2FudmFzM2Qv
CisgICAgICAgIDo6Z2xCaW5kRnJhbWVidWZmZXJFWFQoR0xfRlJBTUVCVUZGRVJfRVhULCAwKTsK
KworICAgICAgICA6OmdsWE1ha2VDb250ZXh0Q3VycmVudChzaGFyZWREaXNwbGF5KCksIDAsIDAs
IDApOworICAgICAgICA6OmdsWERlc3Ryb3lDb250ZXh0KHNoYXJlZERpc3BsYXkoKSwgbV9jb250
ZXh0KTsKKyAgICAgICAgbV9jb250ZXh0ID0gMDsKKyAgICB9CisKKyAgICBpZiAobV9wYnVmZmVy
KSB7CisgICAgICAgIDo6Z2xYRGVzdHJveVBidWZmZXIoc2hhcmVkRGlzcGxheSgpLCBtX3BidWZm
ZXIpOworICAgICAgICBtX3BidWZmZXIgPSAwOworICAgIH0KKyAgICBpZiAobV9nbHhQaXhtYXAp
IHsKKyAgICAgICAgZ2xYRGVzdHJveUdMWFBpeG1hcChzaGFyZWREaXNwbGF5KCksIG1fZ2x4UGl4
bWFwKTsKKyAgICAgICAgbV9nbHhQaXhtYXAgPSAwOworICAgIH0KKyAgICBpZiAobV9waXhtYXAp
IHsKKyAgICAgICAgWEZyZWVQaXhtYXAoc2hhcmVkRGlzcGxheSgpLCBtX3BpeG1hcCk7CisgICAg
ICAgIG1fcGl4bWFwID0gMDsKKyAgICB9Cit9CisKK2Jvb2wgR3JhcGhpY3NDb250ZXh0M0RQcml2
YXRlOjptYWtlQ29udGV4dEN1cnJlbnQoKQoreworICAgIGlmICg6OmdsWEdldEN1cnJlbnRDb250
ZXh0KCkgPT0gbV9jb250ZXh0KQorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICBpZiAoIW1fY29u
dGV4dCkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGlmIChtX3BidWZmZXIpCisgICAgICAg
IHJldHVybiA6OmdsWE1ha2VDdXJyZW50KHNoYXJlZERpc3BsYXkoKSwgbV9wYnVmZmVyLCBtX2Nv
bnRleHQpOworCisgICAgQVNTRVJUKG1fZ2x4UGl4bWFwKTsKKyAgICByZXR1cm4gOjpnbFhNYWtl
Q3VycmVudChzaGFyZWREaXNwbGF5KCksIG1fZ2x4UGl4bWFwLCBtX2NvbnRleHQpOworfQorCit9
IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFCTEVfV0VCR0wKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dseC9HcmFwaGljc0NvbnRleHQz
RFByaXZhdGUuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dseC9HcmFwaGlj
c0NvbnRleHQzRFByaXZhdGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi40MTM0ODk1Yjc2OTdjODRjMzk0MDNjM2I2
N2NiZjM0YzkzNDEyYjc2Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvZ2x4L0dyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZS5oCkBAIC0wLDAgKzEsNjAg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgSWdhbGlhIFMuTC4KKyAqCisgKiAgVGhpcyBs
aWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgor
ICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQ
dWJsaWMKKyAqICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3Vu
ZGF0aW9uOyBlaXRoZXIKKyAqICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3Vy
IG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBkaXN0
cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRI
T1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisg
KiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAg
U2VlIHRoZSBHTlUKKyAqICBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBk
ZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBH
TlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGli
cmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZQorICogIFNvZnR3YXJlIEZvdW5kYXRpb24s
IEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiAgQm9zdG9uLCBNQSAw
MjExMC0xMzAxIFVTQQorICovCisKKyNpZm5kZWYgR3JhcGhpY3NDb250ZXh0M0RQcml2YXRlX2gK
KyNkZWZpbmUgR3JhcGhpY3NDb250ZXh0M0RQcml2YXRlX2gKKworI2luY2x1ZGUgPHd0Zi9QYXNz
T3duUHRyLmg+CisKK3R5cGVkZWYgc3RydWN0IF9fR0xYY29udGV4dFJlYyAqR0xYQ29udGV4dDsK
K3R5cGVkZWYgdW5zaWduZWQgbG9uZyBHTFhQYnVmZmVyOwordHlwZWRlZiB1bnNpZ25lZCBsb25n
IEdMWFBpeG1hcDsKK3R5cGVkZWYgdW5zaWduZWQgY2hhciBHTHVieXRlOwordHlwZWRlZiB1bnNp
Z25lZCBsb25nIFBpeG1hcDsKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBHcmFwaGlj
c0NvbnRleHQzRDsKKworY2xhc3MgR3JhcGhpY3NDb250ZXh0M0RQcml2YXRlIHsKKyAgICBwdWJs
aWM6CisgICAgc3RhdGljIFBhc3NPd25QdHI8R3JhcGhpY3NDb250ZXh0M0RQcml2YXRlPiBjcmVh
dGUoKTsKKyAgICB+R3JhcGhpY3NDb250ZXh0M0RQcml2YXRlKCk7CisgICAgYm9vbCBtYWtlQ29u
dGV4dEN1cnJlbnQoKTsKKworICAgIHByaXZhdGU6CisgICAgZnJpZW5kIGNsYXNzIEdyYXBoaWNz
Q29udGV4dDNEOworICAgIHN0YXRpYyBHcmFwaGljc0NvbnRleHQzRFByaXZhdGUqIGNyZWF0ZVBi
dWZmZXJDb250ZXh0KCk7CisgICAgc3RhdGljIEdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZSogY3Jl
YXRlUGl4bWFwQ29udGV4dCgpOworICAgIEdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZShHTFhDb250
ZXh0LCBHTFhQYnVmZmVyKTsKKyAgICBHcmFwaGljc0NvbnRleHQzRFByaXZhdGUoR0xYQ29udGV4
dCwgUGl4bWFwLCBHTFhQaXhtYXApOworCisgICAgc3RhdGljIHZvaWQgYWRkQWN0aXZlR3JhcGhp
Y3NDb250ZXh0KEdyYXBoaWNzQ29udGV4dDNEKik7CisgICAgc3RhdGljIHZvaWQgcmVtb3ZlQWN0
aXZlR3JhcGhpY3NDb250ZXh0KEdyYXBoaWNzQ29udGV4dDNEKik7CisgICAgc3RhdGljIHZvaWQg
Y2xlYW51cEFjdGl2ZUNvbnRleHRzQXRFeGl0KCk7CisKKyAgICBHTFhDb250ZXh0IG1fY29udGV4
dDsKKyAgICBHTFhQYnVmZmVyIG1fcGJ1ZmZlcjsKKyAgICBQaXhtYXAgbV9waXhtYXA7CisgICAg
R0xYUGl4bWFwIG1fZ2x4UGl4bWFwOworfTsKKworfQorCisjZW5kaWYgLy8gR3JhcGhpY3NDb250
ZXh0M0RQcml2YXRlX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2d0ay9HcmFwaGljc0NvbnRleHQzRFByaXZhdGUuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvZ3RrL0dyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZS5jcHAKZGVsZXRlZCBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDUyM2JjN2UzNmFlZTljMDBlNTZmN2VjZDU2YTZmNmIxNTMw
YzFkYmUuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3RrL0dyYXBoaWNzQ29udGV4dDNEUHJpdmF0
ZS5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSwyNTMgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAo
QykgMjAxMSBJZ2FsaWEgUy5MLgotICoKLSAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2Fy
ZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiAgbW9kaWZ5IGl0IHVuZGVyIHRo
ZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwotICogIExpY2Vuc2UgYXMg
cHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogIHZl
cnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVy
c2lvbi4KLSAqCi0gKiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRo
YXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRo
b3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqICBNRVJDSEFOVEFCSUxJVFkgb3Ig
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogIExlc3Nl
ciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogIFlvdSBz
aG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJs
aWMKLSAqICBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRv
IHRoZSBGcmVlCi0gKiAgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3Ry
ZWV0LCBGaWZ0aCBGbG9vciwKLSAqICBCb3N0b24sIE1BIDAyMTEwLTEzMDEgVVNBCi0gKi8KLQot
I2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZS5o
IgotCi0jaWYgRU5BQkxFKFdFQkdMKQotCi0jaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0M0QuaCIK
LSNpbmNsdWRlICJPcGVuR0xTaGltcy5oIgotI2luY2x1ZGUgPEdML2dseC5oPgotI2luY2x1ZGUg
PGRsZmNuLmg+Ci0KLS8vIFdlIGRvIG5vdCB3YW50IHRvIGNhbGwgZ2xYTWFrZUNvbnRleHRDdXJy
ZW50IHVzaW5nIGRpZmZlcmVudCBEaXNwbGF5IHBvaW50ZXJzLAotLy8gYmVjYXVzZSBpdCBtaWdo
dCBsZWFkIHRvIGNyYXNoZXMgaW4gc29tZSBkcml2ZXJzIChmZ2xyeCkuIFdlIHVzZSBhIHNoYXJl
ZCBkaXNwbGF5Ci0vLyBwb2ludGVyIGhlcmUuCi1zdGF0aWMgRGlzcGxheSogZ1NoYXJlZERpc3Bs
YXkgPSAwOwotc3RhdGljIERpc3BsYXkqIHNoYXJlZERpc3BsYXkoKQotewotICAgIGlmICghZ1No
YXJlZERpc3BsYXkpCi0gICAgICAgIGdTaGFyZWREaXNwbGF5ID0gWE9wZW5EaXNwbGF5KDApOwot
ICAgIHJldHVybiBnU2hhcmVkRGlzcGxheTsKLX0KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi0v
LyBCZWNhdXNlIG9mIGRyaXZlciBidWdzLCBleGl0aW5nIHRoZSBwcm9ncmFtIHdoZW4gdGhlcmUg
YXJlIGFjdGl2ZSBwYnVmZmVycwotLy8gY2FuIGNyYXNoIHRoZSBYIHNlcnZlciAodGhpcyBoYXMg
YmVlbiBvYnNlcnZlZCB3aXRoIHRoZSBvZmZpY2lhbCBOdmlkaWEgZHJpdmVycykuCi0vLyBXZSBu
ZWVkIHRvIGVuc3VyZSB0aGF0IHdlIGNsZWFuIGV2ZXJ5dGhpbmcgdXAgb24gZXhpdC4gVGhlcmUg
YXJlIHNldmVyYWwgcmVhc29ucwotLy8gdGhhdCBHcmFwaGljc0NvbnRleHQzRHMgd2lsbCBzdGls
bCBiZSBhbGl2ZSBhdCBleGl0LCBpbmNsdWRpbmcgdXNlciBlcnJvciAobWVtb3J5Ci0vLyBsZWFr
cykgYW5kIHRoZSBwYWdlIGNhY2hlLiBJbiBhbnkgY2FzZSwgd2UgZG9uJ3Qgd2FudCB0aGUgWCBz
ZXJ2ZXIgdG8gY3Jhc2guCi1zdGF0aWMgYm9vbCBjbGVhbmluZ1VwQXRFeGl0ID0gZmFsc2U7Ci1z
dGF0aWMgVmVjdG9yPEdyYXBoaWNzQ29udGV4dDNEKj4mIGFjdGl2ZUdyYXBoaWNzQ29udGV4dHMo
KQotewotICAgIERFRklORV9TVEFUSUNfTE9DQUwoVmVjdG9yPEdyYXBoaWNzQ29udGV4dDNEKj4s
IGNvbnRleHRzLCAoKSk7Ci0gICAgcmV0dXJuIGNvbnRleHRzOwotfQotCi12b2lkIEdyYXBoaWNz
Q29udGV4dDNEUHJpdmF0ZTo6YWRkQWN0aXZlR3JhcGhpY3NDb250ZXh0KEdyYXBoaWNzQ29udGV4
dDNEKiBjb250ZXh0KQotewotICAgIHN0YXRpYyBib29sIGFkZGVkQXRFeGl0SGFuZGxlciA9IGZh
bHNlOwotICAgIGlmICghYWRkZWRBdEV4aXRIYW5kbGVyKSB7Ci0gICAgICAgIGF0ZXhpdCgmR3Jh
cGhpY3NDb250ZXh0M0RQcml2YXRlOjpjbGVhbnVwQWN0aXZlQ29udGV4dHNBdEV4aXQpOwotICAg
ICAgICBhZGRlZEF0RXhpdEhhbmRsZXIgPSB0cnVlOwotICAgIH0KLSAgICBhY3RpdmVHcmFwaGlj
c0NvbnRleHRzKCkuYXBwZW5kKGNvbnRleHQpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDNE
UHJpdmF0ZTo6cmVtb3ZlQWN0aXZlR3JhcGhpY3NDb250ZXh0KEdyYXBoaWNzQ29udGV4dDNEKiBj
b250ZXh0KQotewotICAgIGlmIChjbGVhbmluZ1VwQXRFeGl0KQotICAgICAgICByZXR1cm47Ci0K
LSAgICBWZWN0b3I8R3JhcGhpY3NDb250ZXh0M0QqPiYgY29udGV4dHMgPSBhY3RpdmVHcmFwaGlj
c0NvbnRleHRzKCk7Ci0gICAgc2l6ZV90IGxvY2F0aW9uID0gY29udGV4dHMuZmluZChjb250ZXh0
KTsKLSAgICBpZiAobG9jYXRpb24gIT0gV1RGOjpub3RGb3VuZCkKLSAgICAgICAgY29udGV4dHMu
cmVtb3ZlKGxvY2F0aW9uKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRFByaXZhdGU6OmNs
ZWFudXBBY3RpdmVDb250ZXh0c0F0RXhpdCgpCi17Ci0gICAgY2xlYW5pbmdVcEF0RXhpdCA9IHRy
dWU7Ci0KLSAgICBWZWN0b3I8R3JhcGhpY3NDb250ZXh0M0QqPiYgY29udGV4dHMgPSBhY3RpdmVH
cmFwaGljc0NvbnRleHRzKCk7Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBjb250ZXh0cy5z
aXplKCk7IGkrKykKLSAgICAgICAgY29udGV4dHNbaV0tPn5HcmFwaGljc0NvbnRleHQzRCgpOwot
Ci0gICAgaWYgKCFnU2hhcmVkRGlzcGxheSkKLSAgICAgICAgcmV0dXJuOwotICAgIFhDbG9zZURp
c3BsYXkoZ1NoYXJlZERpc3BsYXkpOwotICAgIGdTaGFyZWREaXNwbGF5ID0gMDsKLX0KLQotUGFz
c093blB0cjxHcmFwaGljc0NvbnRleHQzRFByaXZhdGU+IEdyYXBoaWNzQ29udGV4dDNEUHJpdmF0
ZTo6Y3JlYXRlKCkKLXsKLSAgICBpZiAoIXNoYXJlZERpc3BsYXkoKSkKLSAgICAgICAgcmV0dXJu
IG51bGxwdHI7Ci0KLSAgICBzdGF0aWMgYm9vbCBpbml0aWFsaXplZCA9IGZhbHNlOwotICAgIHN0
YXRpYyBib29sIHN1Y2Nlc3MgPSB0cnVlOwotICAgIGlmICghaW5pdGlhbGl6ZWQpIHsKLSAgICAg
ICAgc3VjY2VzcyA9IGluaXRpYWxpemVPcGVuR0xTaGltcygpOwotICAgICAgICBpbml0aWFsaXpl
ZCA9IHRydWU7Ci0gICAgfQotICAgIGlmICghc3VjY2VzcykKLSAgICAgICAgcmV0dXJuIG51bGxw
dHI7Ci0KLSAgICBHcmFwaGljc0NvbnRleHQzRFByaXZhdGUqIGludGVybmFsID0gY3JlYXRlUGJ1
ZmZlckNvbnRleHQoKTsKLSAgICBpZiAoIWludGVybmFsKQotICAgICAgICBpbnRlcm5hbCA9IGNy
ZWF0ZVBpeG1hcENvbnRleHQoKTsKLSAgICBpZiAoIWludGVybmFsKQotICAgICAgICByZXR1cm4g
bnVsbHB0cjsKLQotICAgIC8vIFRoZSBHcmFwaGljc0NvbnRleHQzRCBjb25zdHJ1Y3RvciByZXF1
aXJlcyB0aGF0IHRoaXMgY29udGV4dCBpcyB0aGUgY3VycmVudCBPcGVuR0wgY29udGV4dC4KLSAg
ICBpbnRlcm5hbC0+bWFrZUNvbnRleHRDdXJyZW50KCk7Ci0gICAgcmV0dXJuIGFkb3B0UHRyKGlu
dGVybmFsKTsKLX0KLQotR3JhcGhpY3NDb250ZXh0M0RQcml2YXRlKiBHcmFwaGljc0NvbnRleHQz
RFByaXZhdGU6OmNyZWF0ZVBidWZmZXJDb250ZXh0KCkKLXsKLSAgICBpbnQgZmJDb25maWdBdHRy
aWJ1dGVzW10gPSB7Ci0gICAgICAgIEdMWF9EUkFXQUJMRV9UWVBFLCBHTFhfUEJVRkZFUl9CSVQs
Ci0gICAgICAgIEdMWF9SRU5ERVJfVFlQRSwgR0xYX1JHQkFfQklULAotICAgICAgICBHTFhfUkVE
X1NJWkUsIDEsCi0gICAgICAgIEdMWF9HUkVFTl9TSVpFLCAxLAotICAgICAgICBHTFhfQkxVRV9T
SVpFLCAxLAotICAgICAgICBHTFhfQUxQSEFfU0laRSwgMSwKLSAgICAgICAgR0xYX0RFUFRIX1NJ
WkUsIDEsCi0gICAgICAgIEdMWF9TVEVOQ0lMX1NJWkUsIDEsCi0gICAgICAgIEdMWF9TQU1QTEVf
QlVGRkVSUywgMSwKLSAgICAgICAgR0xYX0RPVUJMRUJVRkZFUiwgR0xfRkFMU0UsCi0gICAgICAg
IEdMWF9TQU1QTEVTLCA0LAotICAgICAgICAwCi0gICAgfTsKLSAgICBpbnQgcmV0dXJuZWRFbGVt
ZW50czsKLSAgICBHTFhGQkNvbmZpZyogY29uZmlncyA9IGdsWENob29zZUZCQ29uZmlnKHNoYXJl
ZERpc3BsYXkoKSwgMCwgZmJDb25maWdBdHRyaWJ1dGVzLCAmcmV0dXJuZWRFbGVtZW50cyk7Ci0g
ICAgaWYgKCFjb25maWdzKSB7Ci0gICAgICAgIGZiQ29uZmlnQXR0cmlidXRlc1syMF0gPSAwOyAv
LyBBdHRlbXB0IHdpdGhvdXQgYW50aS1hbGlhc2luZy4KLSAgICAgICAgY29uZmlncyA9IGdsWENo
b29zZUZCQ29uZmlnKHNoYXJlZERpc3BsYXkoKSwgMCwgZmJDb25maWdBdHRyaWJ1dGVzLCAmcmV0
dXJuZWRFbGVtZW50cyk7Ci0gICAgfQotICAgIGlmICghcmV0dXJuZWRFbGVtZW50cykgewotICAg
ICAgICBYRnJlZShjb25maWdzKTsKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgfQotCi0gICAgLy8g
V2Ugd2lsbCBiZSByZW5kZXJpbmcgdG8gYSB0ZXh0dXJlLCBzbyBvdXIgcGJ1ZmZlciBkb2VzIG5v
dCBuZWVkIHRvIGJlIGxhcmdlLgotICAgIHN0YXRpYyBjb25zdCBpbnQgcGJ1ZmZlckF0dHJpYnV0
ZXNbXSA9IHsgR0xYX1BCVUZGRVJfV0lEVEgsIDEsIEdMWF9QQlVGRkVSX0hFSUdIVCwgMSwgMCB9
OwotICAgIEdMWFBidWZmZXIgcGJ1ZmZlciA9IGdsWENyZWF0ZVBidWZmZXIoc2hhcmVkRGlzcGxh
eSgpLCBjb25maWdzWzBdLCBwYnVmZmVyQXR0cmlidXRlcyk7Ci0gICAgaWYgKCFwYnVmZmVyKSB7
Ci0gICAgICAgIFhGcmVlKGNvbmZpZ3MpOwotICAgICAgICByZXR1cm4gMDsKLSAgICB9Ci0KLSAg
ICBHTFhDb250ZXh0IGNvbnRleHQgPSBnbFhDcmVhdGVOZXdDb250ZXh0KHNoYXJlZERpc3BsYXko
KSwgY29uZmlnc1swXSwgR0xYX1JHQkFfVFlQRSwgMCwgR0xfVFJVRSk7Ci0gICAgWEZyZWUoY29u
Zmlncyk7Ci0gICAgaWYgKCFjb250ZXh0KQotICAgICAgICByZXR1cm4gMDsKLSAgICByZXR1cm4g
bmV3IEdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZShjb250ZXh0LCBwYnVmZmVyKTsKLX0KLQotR3Jh
cGhpY3NDb250ZXh0M0RQcml2YXRlKiBHcmFwaGljc0NvbnRleHQzRFByaXZhdGU6OmNyZWF0ZVBp
eG1hcENvbnRleHQoKQotewotICAgIHN0YXRpYyBpbnQgdmlzdWFsQXR0cmlidXRlc1tdID0gewot
ICAgICAgICBHTFhfUkdCQSwKLSAgICAgICAgR0xYX1JFRF9TSVpFLCAxLAotICAgICAgICBHTFhf
R1JFRU5fU0laRSwgMSwKLSAgICAgICAgR0xYX0JMVUVfU0laRSwgMSwKLSAgICAgICAgR0xYX0FM
UEhBX1NJWkUsIDEsCi0gICAgICAgIEdMWF9ET1VCTEVCVUZGRVIsCi0gICAgICAgIDAKLSAgICB9
OwotCi0gICAgWFZpc3VhbEluZm8qIHZpc3VhbEluZm8gPSBnbFhDaG9vc2VWaXN1YWwoc2hhcmVk
RGlzcGxheSgpLCBEZWZhdWx0U2NyZWVuKHNoYXJlZERpc3BsYXkoKSksIHZpc3VhbEF0dHJpYnV0
ZXMpOwotICAgIGlmICghdmlzdWFsSW5mbykKLSAgICAgICAgcmV0dXJuIDA7Ci0gCi0gICAgR0xY
Q29udGV4dCBjb250ZXh0ID0gZ2xYQ3JlYXRlQ29udGV4dChzaGFyZWREaXNwbGF5KCksIHZpc3Vh
bEluZm8sIDAsIEdMX1RSVUUpOwotICAgIGlmICghY29udGV4dCkgewotICAgICAgICBYRnJlZSh2
aXN1YWxJbmZvKTsKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgfQotCi0gICAgUGl4bWFwIHBpeG1h
cCA9IFhDcmVhdGVQaXhtYXAoc2hhcmVkRGlzcGxheSgpLCBEZWZhdWx0Um9vdFdpbmRvdyhzaGFy
ZWREaXNwbGF5KCkpLCAxLCAxLCB2aXN1YWxJbmZvLT5kZXB0aCk7Ci0gICAgaWYgKCFwaXhtYXAp
IHsKLSAgICAgICAgWEZyZWUodmlzdWFsSW5mbyk7Ci0gICAgICAgIHJldHVybiAwOwotICAgIH0K
LQotICAgIEdMWFBpeG1hcCBnbHhQaXhtYXAgPSBnbFhDcmVhdGVHTFhQaXhtYXAoc2hhcmVkRGlz
cGxheSgpLCB2aXN1YWxJbmZvLCBwaXhtYXApOwotICAgIGlmICghZ2x4UGl4bWFwKSB7Ci0gICAg
ICAgIFhGcmVlUGl4bWFwKHNoYXJlZERpc3BsYXkoKSwgcGl4bWFwKTsKLSAgICAgICAgWEZyZWUo
dmlzdWFsSW5mbyk7Ci0gICAgICAgIHJldHVybiAwOwotICAgIH0KLQotICAgIHJldHVybiBuZXcg
R3JhcGhpY3NDb250ZXh0M0RQcml2YXRlKGNvbnRleHQsIHBpeG1hcCwgZ2x4UGl4bWFwKTsKLX0K
LQotR3JhcGhpY3NDb250ZXh0M0RQcml2YXRlOjpHcmFwaGljc0NvbnRleHQzRFByaXZhdGUoR0xY
Q29udGV4dCBjb250ZXh0LCBHTFhQYnVmZmVyIHBidWZmZXIpCi0gICAgOiBtX2NvbnRleHQoY29u
dGV4dCkKLSAgICAsIG1fcGJ1ZmZlcihwYnVmZmVyKQotICAgICwgbV9waXhtYXAoMCkKLSAgICAs
IG1fZ2x4UGl4bWFwKDApCi17Ci19Ci0KLUdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZTo6R3JhcGhp
Y3NDb250ZXh0M0RQcml2YXRlKEdMWENvbnRleHQgY29udGV4dCwgUGl4bWFwIHBpeG1hcCwgR0xY
UGl4bWFwIGdseFBpeG1hcCkKLSAgICA6IG1fY29udGV4dChjb250ZXh0KQotICAgICwgbV9wYnVm
ZmVyKDApCi0gICAgLCBtX3BpeG1hcChwaXhtYXApCi0gICAgLCBtX2dseFBpeG1hcChnbHhQaXht
YXApCi17Ci19Ci0KLUdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZTo6fkdyYXBoaWNzQ29udGV4dDNE
UHJpdmF0ZSgpCi17Ci0gICAgaWYgKG1fY29udGV4dCkgewotICAgICAgICAvLyBUaGlzIG1heSBi
ZSBuZWNlc3NhcnkgdG8gcHJldmVudCBjcmFzaGVzIHdpdGggTlZpZGlhJ3MgY2xvc2VkIHNvdXJj
ZSBkcml2ZXJzLiBPcmlnaW5hbGx5Ci0gICAgICAgIC8vIGZyb20gTW96aWxsYSdzIDNEIGNhbnZh
cyBpbXBsZW1lbnRhdGlvbiBhdDogaHR0cDovL2JpdGJ1Y2tldC5vcmcvaWxtYXJpL2NhbnZhczNk
LwotICAgICAgICA6OmdsQmluZEZyYW1lYnVmZmVyRVhUKEdMX0ZSQU1FQlVGRkVSX0VYVCwgMCk7
Ci0KLSAgICAgICAgOjpnbFhNYWtlQ29udGV4dEN1cnJlbnQoc2hhcmVkRGlzcGxheSgpLCAwLCAw
LCAwKTsKLSAgICAgICAgOjpnbFhEZXN0cm95Q29udGV4dChzaGFyZWREaXNwbGF5KCksIG1fY29u
dGV4dCk7Ci0gICAgICAgIG1fY29udGV4dCA9IDA7Ci0gICAgfQotCi0gICAgaWYgKG1fcGJ1ZmZl
cikgewotICAgICAgICA6OmdsWERlc3Ryb3lQYnVmZmVyKHNoYXJlZERpc3BsYXkoKSwgbV9wYnVm
ZmVyKTsKLSAgICAgICAgbV9wYnVmZmVyID0gMDsKLSAgICB9Ci0gICAgaWYgKG1fZ2x4UGl4bWFw
KSB7Ci0gICAgICAgIGdsWERlc3Ryb3lHTFhQaXhtYXAoc2hhcmVkRGlzcGxheSgpLCBtX2dseFBp
eG1hcCk7Ci0gICAgICAgIG1fZ2x4UGl4bWFwID0gMDsKLSAgICB9Ci0gICAgaWYgKG1fcGl4bWFw
KSB7Ci0gICAgICAgIFhGcmVlUGl4bWFwKHNoYXJlZERpc3BsYXkoKSwgbV9waXhtYXApOwotICAg
ICAgICBtX3BpeG1hcCA9IDA7Ci0gICAgfQotfQotCi1ib29sIEdyYXBoaWNzQ29udGV4dDNEUHJp
dmF0ZTo6bWFrZUNvbnRleHRDdXJyZW50KCkKLXsKLSAgICBpZiAoOjpnbFhHZXRDdXJyZW50Q29u
dGV4dCgpID09IG1fY29udGV4dCkKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgaWYgKCFtX2Nv
bnRleHQpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBpZiAobV9wYnVmZmVyKSB7Ci0gICAg
ICAgIHJldHVybiA6OmdsWE1ha2VDdXJyZW50KHNoYXJlZERpc3BsYXkoKSwgbV9wYnVmZmVyLCBt
X2NvbnRleHQpOwotICAgIH0KLQotICAgIEFTU0VSVChtX2dseFBpeG1hcCk7Ci0gICAgcmV0dXJu
IDo6Z2xYTWFrZUN1cnJlbnQoc2hhcmVkRGlzcGxheSgpLCBtX2dseFBpeG1hcCwgbV9jb250ZXh0
KTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZW5kaWYgLy8gRU5BQkxFX1dFQkdM
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ndGsvR3JhcGhp
Y3NDb250ZXh0M0RQcml2YXRlLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9n
dGsvR3JhcGhpY3NDb250ZXh0M0RQcml2YXRlLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDQxMzQ4OTViNzY5N2M4NGMzOTQwM2MzYjY3Y2JmMzRjOTM0MTJiNzYuLjAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvZ3RrL0dyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZS5oCisrKyAvZGV2L251bGwK
QEAgLTEsNjAgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMSBJZ2FsaWEgUy5MLgot
ICoKLSAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1
dGUgaXQgYW5kL29yCi0gKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExl
c3NlciBHZW5lcmFsIFB1YmxpYwotICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVl
IFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5z
ZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiAgVGhpcyBs
aWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWws
Ci0gKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQg
d2FycmFudHkgb2YKLSAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNl
bnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBh
IGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKLSAqICBMaWNlbnNlIGFsb25n
IHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlCi0gKiAgU29mdHdh
cmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKLSAq
ICBCb3N0b24sIE1BIDAyMTEwLTEzMDEgVVNBCi0gKi8KLQotI2lmbmRlZiBHcmFwaGljc0NvbnRl
eHQzRFByaXZhdGVfaAotI2RlZmluZSBHcmFwaGljc0NvbnRleHQzRFByaXZhdGVfaAotCi0jaW5j
bHVkZSA8d3RmL1Bhc3NPd25QdHIuaD4KLQotdHlwZWRlZiBzdHJ1Y3QgX19HTFhjb250ZXh0UmVj
ICpHTFhDb250ZXh0OwotdHlwZWRlZiB1bnNpZ25lZCBsb25nIEdMWFBidWZmZXI7Ci10eXBlZGVm
IHVuc2lnbmVkIGxvbmcgR0xYUGl4bWFwOwotdHlwZWRlZiB1bnNpZ25lZCBjaGFyIEdMdWJ5dGU7
Ci10eXBlZGVmIHVuc2lnbmVkIGxvbmcgUGl4bWFwOwotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0K
LWNsYXNzIEdyYXBoaWNzQ29udGV4dDNEOwotCi1jbGFzcyBHcmFwaGljc0NvbnRleHQzRFByaXZh
dGUgewotICAgIHB1YmxpYzoKLSAgICBzdGF0aWMgUGFzc093blB0cjxHcmFwaGljc0NvbnRleHQz
RFByaXZhdGU+IGNyZWF0ZSgpOwotICAgIH5HcmFwaGljc0NvbnRleHQzRFByaXZhdGUoKTsKLSAg
ICBib29sIG1ha2VDb250ZXh0Q3VycmVudCgpOwotCi0gICAgcHJpdmF0ZToKLSAgICBmcmllbmQg
Y2xhc3MgR3JhcGhpY3NDb250ZXh0M0Q7Ci0gICAgc3RhdGljIEdyYXBoaWNzQ29udGV4dDNEUHJp
dmF0ZSogY3JlYXRlUGJ1ZmZlckNvbnRleHQoKTsKLSAgICBzdGF0aWMgR3JhcGhpY3NDb250ZXh0
M0RQcml2YXRlKiBjcmVhdGVQaXhtYXBDb250ZXh0KCk7Ci0gICAgR3JhcGhpY3NDb250ZXh0M0RQ
cml2YXRlKEdMWENvbnRleHQsIEdMWFBidWZmZXIpOwotICAgIEdyYXBoaWNzQ29udGV4dDNEUHJp
dmF0ZShHTFhDb250ZXh0LCBQaXhtYXAsIEdMWFBpeG1hcCk7Ci0KLSAgICBzdGF0aWMgdm9pZCBh
ZGRBY3RpdmVHcmFwaGljc0NvbnRleHQoR3JhcGhpY3NDb250ZXh0M0QqKTsKLSAgICBzdGF0aWMg
dm9pZCByZW1vdmVBY3RpdmVHcmFwaGljc0NvbnRleHQoR3JhcGhpY3NDb250ZXh0M0QqKTsKLSAg
ICBzdGF0aWMgdm9pZCBjbGVhbnVwQWN0aXZlQ29udGV4dHNBdEV4aXQoKTsKLQotICAgIEdMWENv
bnRleHQgbV9jb250ZXh0OwotICAgIEdMWFBidWZmZXIgbV9wYnVmZmVyOwotICAgIFBpeG1hcCBt
X3BpeG1hcDsKLSAgICBHTFhQaXhtYXAgbV9nbHhQaXhtYXA7Ci19OwotCi19Ci0KLSNlbmRpZiAv
LyBHcmFwaGljc0NvbnRleHQzRFByaXZhdGVfaAo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>124490</attachid>
            <date>2012-01-29 20:53:10 -0800</date>
            <delta_ts>2012-01-30 01:40:51 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-77296-20120130135308.patch</filename>
            <type>text/plain</type>
            <size>25209</size>
            <attacher name="ChangSeok Oh">kevin.cs.oh</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTA2MjEyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMzJlMzc5NGYwYjNiYzBh
ZjUwZWQ0ZDEwMzVlYjJlZWQ3ZmZiNGQ3Ny4uNmI5YmJiYmJjMGQ4NDJjNTBjMGQxZTJjNDkyMjg0
YzkwZWEyNmRjNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDM1IEBACisyMDEyLTAxLTI5ICBDaGFu
Z1Nlb2sgT2ggIDxzaGl2YW1pZG93QGdtYWlsLmNvbT4KKworICAgICAgICBNYWtlIEdyYXBoaWNz
Q29udGV4dDNEUHJpdmF0ZSBvZiBHVEsgcG9ydCBzaGFyZWFibGUuCisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03NzI5NgorCisgICAgICAgIFJldmlld2Vk
IGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZS5j
cHAvaCBvZiBHVEsgcG9ydCBsb29rIHNoYXJlYWJsZSB3aXRoIGFub3RoZXIgcG9ydAorICAgICAg
ICB1c2luZyBnbHggYmFja2VuZCBmb3IgV2ViR0wuIEZvciBleGFtcGxlLCBFRkwgcG9ydC4KKyAg
ICAgICAgTW92ZWQgR3JhcGhpY3NDb250ZXh0M0RQcml2YXRlLmNwcCBhbmQgaXRzIGhlYWRlciBp
bnRvIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dseC4KKworICAgICAgICBObyBu
ZXcgdGVzdHMgcmVxdWlyZWQsIGJlY2F1c2Ugb2Ygbm8gbmV3IGZlYXR1cmUuCisKKyAgICAgICAg
KiBHTlVtYWtlZmlsZS5hbToKKyAgICAgICAgKiBHTlVtYWtlZmlsZS5saXN0LmFtOgorICAgICAg
ICAqIHBsYXRmb3JtL2dyYXBoaWNzL2dseC9HcmFwaGljc0NvbnRleHQzRFByaXZhdGUuY3BwOiBS
ZW5hbWVkIGZyb20gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3RrL0dyYXBoaWNz
Q29udGV4dDNEUHJpdmF0ZS5jcHAuCisgICAgICAgIChzaGFyZWREaXNwbGF5KToKKyAgICAgICAg
KFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6YWN0aXZlR3JhcGhpY3NDb250ZXh0cyk6Cisg
ICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRFByaXZhdGU6OmFkZEFjdGl2ZUdyYXBo
aWNzQ29udGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRFByaXZhdGU6
OnJlbW92ZUFjdGl2ZUdyYXBoaWNzQ29udGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGlj
c0NvbnRleHQzRFByaXZhdGU6OmNsZWFudXBBY3RpdmVDb250ZXh0c0F0RXhpdCk6CisgICAgICAg
IChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRFByaXZhdGU6OmNyZWF0ZSk6CisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRFByaXZhdGU6OmNyZWF0ZVBidWZmZXJDb250ZXh0KToK
KyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZTo6Y3JlYXRlUGl4bWFw
Q29udGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQzRFByaXZhdGU6Okdy
YXBoaWNzQ29udGV4dDNEUHJpdmF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHQzRFByaXZhdGU6On5HcmFwaGljc0NvbnRleHQzRFByaXZhdGUpOgorICAgICAgICAoV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0M0RQcml2YXRlOjptYWtlQ29udGV4dEN1cnJlbnQpOgorICAgICAg
ICAqIHBsYXRmb3JtL2dyYXBoaWNzL2dseC9HcmFwaGljc0NvbnRleHQzRFByaXZhdGUuaDogUmVu
YW1lZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2d0ay9HcmFwaGljc0Nv
bnRleHQzRFByaXZhdGUuaC4KKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoR3JhcGhpY3ND
b250ZXh0M0RQcml2YXRlKToKKwogMjAxMi0wMS0yOSAgRGFsZSBDdXJ0aXMgIDxkYWxlY3VydGlz
QGNocm9taXVtLm9yZz4KIAogICAgICAgICBQcmVwYXJlIFdlYkNvcmUuZ3lwIGZvciBmZm1wZWcg
c291cmNlIHRyYW5zaXRpb24uCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9HTlVtYWtlZmls
ZS5hbSBiL1NvdXJjZS9XZWJDb3JlL0dOVW1ha2VmaWxlLmFtCmluZGV4IGM4MTVkN2IxYzk3NTY0
ZWE3ZDc2NWJiNDdmNmU5OWNhZDVmNWIwNmQuLjQzYmMwMTRjNDIzMDg2NWUxNTVjYTJjNzVjZTgw
YWQyNjY2NmE3NzIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL0dOVW1ha2VmaWxlLmFtCisr
KyBiL1NvdXJjZS9XZWJDb3JlL0dOVW1ha2VmaWxlLmFtCkBAIC0xMDEsNiArMTAxLDcgQEAgd2Vi
Y29yZWd0a19jcHBmbGFncyArPSBcCiAJLUkkKHNyY2RpcikvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vY2Fpcm8gXAogCS1JJChzcmNkaXIpL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL2dz
dHJlYW1lciBcCiAJLUkkKHNyY2RpcikvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2Fpcm8gXAorCS1JJChzcmNkaXIpL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ds
eCBcCiAJLUkkKHNyY2RpcikvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVh
bWVyIFwKIAktSSQoc3JjZGlyKS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ndGsg
XAogCS1JJChzcmNkaXIpL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ayBcCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9HTlVtYWtlZmlsZS5saXN0LmFtIGIvU291cmNlL1dlYkNvcmUvR05V
bWFrZWZpbGUubGlzdC5hbQppbmRleCA1YWZlZTFlY2I1NzE1NTU2YzRhNmIwMzk0MzMyMTM3MzY1
MWJiZGQwLi5hNTg2YTU3ZDVkNTIyNjc0Y2I5N2YxYmMwNmY5ZmY3ODVkY2Y3YjUyIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9HTlVtYWtlZmlsZS5saXN0LmFtCisrKyBiL1NvdXJjZS9XZWJD
b3JlL0dOVW1ha2VmaWxlLmxpc3QuYW0KQEAgLTU2NjUsMTQgKzU2NjUsMTQgQEAgd2ViY29yZV9z
b3VyY2VzICs9IFwKIAlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9HcmFw
aGljc0NvbnRleHQzRENhaXJvLmNwcCBcCiAJU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2Fpcm8vT3BlbkdMU2hpbXMuY3BwIFwKIAlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jYWlyby9PcGVuR0xTaGltcy5oIFwKKwlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9nbHgvR3JhcGhpY3NDb250ZXh0M0RQcml2YXRlLmNwcCBcCisJU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvZ2x4L0dyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZS5oIFwKIAlTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ncHUvRHJhd2luZ0J1ZmZlci5jcHAgXAogCVNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dwdS9EcmF3aW5nQnVmZmVyLmggXAogCVNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dDNELmNwcCBcCiAJ
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0M0QuaCBcCiAJ
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3RrL0RyYXdpbmdCdWZmZXJHdGsuY3Bw
IFwKIAlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ndGsvR3JhcGhpY3NDb250ZXh0
M0RHdGsuY3BwIFwKLQlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ndGsvR3JhcGhp
Y3NDb250ZXh0M0RQcml2YXRlLmNwcCBcCi0JU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvZ3RrL0dyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZS5oIFwKIAlTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9vcGVuZ2wvRXh0ZW5zaW9uczNET3BlbkdMLmNwcCBcCiAJU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbmdsL0V4dGVuc2lvbnMzRE9wZW5HTC5oIFwKIAlT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR3JhcGhpY3NDb250ZXh0M0RP
cGVuR0wuY3BwIFwKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2dseC9HcmFwaGljc0NvbnRleHQzRFByaXZhdGUuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvZ2x4L0dyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZS5jcHAKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4u
YTYyOGE0YmQ2ZWZlYjE3YWFlZGYyMzg2NGEwY2Y2OWMzMWE0MGI3MQotLS0gL2Rldi9udWxsCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dseC9HcmFwaGljc0NvbnRleHQz
RFByaXZhdGUuY3BwCkBAIC0wLDAgKzEsMjUyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEx
IElnYWxpYSBTLkwuCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3Ug
Y2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1z
IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhcyBwdWJsaXNo
ZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiAgdmVyc2lvbiAy
IG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgor
ICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3
aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZl
biB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiAgTGVzc2VyIEdlbmVy
YWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBo
YXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICog
IExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZy
ZWUKKyAqICBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZp
ZnRoIEZsb29yLAorICogIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSBVU0EKKyAqLworCisjaW5jbHVk
ZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0M0RQcml2YXRlLmgiCisKKyNp
ZiBFTkFCTEUoV0VCR0wpCisKKyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQzRC5oIgorI2luY2x1
ZGUgIk9wZW5HTFNoaW1zLmgiCisjaW5jbHVkZSA8R0wvZ2x4Lmg+CisjaW5jbHVkZSA8ZGxmY24u
aD4KKworLy8gV2UgZG8gbm90IHdhbnQgdG8gY2FsbCBnbFhNYWtlQ29udGV4dEN1cnJlbnQgdXNp
bmcgZGlmZmVyZW50IERpc3BsYXkgcG9pbnRlcnMsCisvLyBiZWNhdXNlIGl0IG1pZ2h0IGxlYWQg
dG8gY3Jhc2hlcyBpbiBzb21lIGRyaXZlcnMgKGZnbHJ4KS4gV2UgdXNlIGEgc2hhcmVkIGRpc3Bs
YXkKKy8vIHBvaW50ZXIgaGVyZS4KK3N0YXRpYyBEaXNwbGF5KiBnU2hhcmVkRGlzcGxheSA9IDA7
CitzdGF0aWMgRGlzcGxheSogc2hhcmVkRGlzcGxheSgpCit7CisgICAgaWYgKCFnU2hhcmVkRGlz
cGxheSkKKyAgICAgICAgZ1NoYXJlZERpc3BsYXkgPSBYT3BlbkRpc3BsYXkoMCk7CisgICAgcmV0
dXJuIGdTaGFyZWREaXNwbGF5OworfQorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKKy8vIEJlY2F1
c2Ugb2YgZHJpdmVyIGJ1Z3MsIGV4aXRpbmcgdGhlIHByb2dyYW0gd2hlbiB0aGVyZSBhcmUgYWN0
aXZlIHBidWZmZXJzCisvLyBjYW4gY3Jhc2ggdGhlIFggc2VydmVyICh0aGlzIGhhcyBiZWVuIG9i
c2VydmVkIHdpdGggdGhlIG9mZmljaWFsIE52aWRpYSBkcml2ZXJzKS4KKy8vIFdlIG5lZWQgdG8g
ZW5zdXJlIHRoYXQgd2UgY2xlYW4gZXZlcnl0aGluZyB1cCBvbiBleGl0LiBUaGVyZSBhcmUgc2V2
ZXJhbCByZWFzb25zCisvLyB0aGF0IEdyYXBoaWNzQ29udGV4dDNEcyB3aWxsIHN0aWxsIGJlIGFs
aXZlIGF0IGV4aXQsIGluY2x1ZGluZyB1c2VyIGVycm9yIChtZW1vcnkKKy8vIGxlYWtzKSBhbmQg
dGhlIHBhZ2UgY2FjaGUuIEluIGFueSBjYXNlLCB3ZSBkb24ndCB3YW50IHRoZSBYIHNlcnZlciB0
byBjcmFzaC4KK3N0YXRpYyBib29sIGNsZWFuaW5nVXBBdEV4aXQgPSBmYWxzZTsKK3N0YXRpYyBW
ZWN0b3I8R3JhcGhpY3NDb250ZXh0M0QqPiYgYWN0aXZlR3JhcGhpY3NDb250ZXh0cygpCit7Cisg
ICAgREVGSU5FX1NUQVRJQ19MT0NBTChWZWN0b3I8R3JhcGhpY3NDb250ZXh0M0QqPiwgY29udGV4
dHMsICgpKTsKKyAgICByZXR1cm4gY29udGV4dHM7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0
M0RQcml2YXRlOjphZGRBY3RpdmVHcmFwaGljc0NvbnRleHQoR3JhcGhpY3NDb250ZXh0M0QqIGNv
bnRleHQpCit7CisgICAgc3RhdGljIGJvb2wgYWRkZWRBdEV4aXRIYW5kbGVyID0gZmFsc2U7Cisg
ICAgaWYgKCFhZGRlZEF0RXhpdEhhbmRsZXIpIHsKKyAgICAgICAgYXRleGl0KCZHcmFwaGljc0Nv
bnRleHQzRFByaXZhdGU6OmNsZWFudXBBY3RpdmVDb250ZXh0c0F0RXhpdCk7CisgICAgICAgIGFk
ZGVkQXRFeGl0SGFuZGxlciA9IHRydWU7CisgICAgfQorICAgIGFjdGl2ZUdyYXBoaWNzQ29udGV4
dHMoKS5hcHBlbmQoY29udGV4dCk7Cit9CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0M0RQcml2YXRl
OjpyZW1vdmVBY3RpdmVHcmFwaGljc0NvbnRleHQoR3JhcGhpY3NDb250ZXh0M0QqIGNvbnRleHQp
Cit7CisgICAgaWYgKGNsZWFuaW5nVXBBdEV4aXQpCisgICAgICAgIHJldHVybjsKKworICAgIFZl
Y3RvcjxHcmFwaGljc0NvbnRleHQzRCo+JiBjb250ZXh0cyA9IGFjdGl2ZUdyYXBoaWNzQ29udGV4
dHMoKTsKKyAgICBzaXplX3QgbG9jYXRpb24gPSBjb250ZXh0cy5maW5kKGNvbnRleHQpOworICAg
IGlmIChsb2NhdGlvbiAhPSBXVEY6Om5vdEZvdW5kKQorICAgICAgICBjb250ZXh0cy5yZW1vdmUo
bG9jYXRpb24pOworfQorCit2b2lkIEdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZTo6Y2xlYW51cEFj
dGl2ZUNvbnRleHRzQXRFeGl0KCkKK3sKKyAgICBjbGVhbmluZ1VwQXRFeGl0ID0gdHJ1ZTsKKwor
ICAgIFZlY3RvcjxHcmFwaGljc0NvbnRleHQzRCo+JiBjb250ZXh0cyA9IGFjdGl2ZUdyYXBoaWNz
Q29udGV4dHMoKTsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGNvbnRleHRzLnNpemUoKTsg
aSsrKQorICAgICAgICBjb250ZXh0c1tpXS0+fkdyYXBoaWNzQ29udGV4dDNEKCk7CisKKyAgICBp
ZiAoIWdTaGFyZWREaXNwbGF5KQorICAgICAgICByZXR1cm47CisgICAgWENsb3NlRGlzcGxheShn
U2hhcmVkRGlzcGxheSk7CisgICAgZ1NoYXJlZERpc3BsYXkgPSAwOworfQorCitQYXNzT3duUHRy
PEdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZT4gR3JhcGhpY3NDb250ZXh0M0RQcml2YXRlOjpjcmVh
dGUoKQoreworICAgIGlmICghc2hhcmVkRGlzcGxheSgpKQorICAgICAgICByZXR1cm4gbnVsbHB0
cjsKKworICAgIHN0YXRpYyBib29sIGluaXRpYWxpemVkID0gZmFsc2U7CisgICAgc3RhdGljIGJv
b2wgc3VjY2VzcyA9IHRydWU7CisgICAgaWYgKCFpbml0aWFsaXplZCkgeworICAgICAgICBzdWNj
ZXNzID0gaW5pdGlhbGl6ZU9wZW5HTFNoaW1zKCk7CisgICAgICAgIGluaXRpYWxpemVkID0gdHJ1
ZTsKKyAgICB9CisgICAgaWYgKCFzdWNjZXNzKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKwor
ICAgIEdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZSogaW50ZXJuYWwgPSBjcmVhdGVQYnVmZmVyQ29u
dGV4dCgpOworICAgIGlmICghaW50ZXJuYWwpCisgICAgICAgIGludGVybmFsID0gY3JlYXRlUGl4
bWFwQ29udGV4dCgpOworICAgIGlmICghaW50ZXJuYWwpCisgICAgICAgIHJldHVybiBudWxscHRy
OworCisgICAgLy8gVGhlIEdyYXBoaWNzQ29udGV4dDNEIGNvbnN0cnVjdG9yIHJlcXVpcmVzIHRo
YXQgdGhpcyBjb250ZXh0IGlzIHRoZSBjdXJyZW50IE9wZW5HTCBjb250ZXh0LgorICAgIGludGVy
bmFsLT5tYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICByZXR1cm4gYWRvcHRQdHIoaW50ZXJuYWwp
OworfQorCitHcmFwaGljc0NvbnRleHQzRFByaXZhdGUqIEdyYXBoaWNzQ29udGV4dDNEUHJpdmF0
ZTo6Y3JlYXRlUGJ1ZmZlckNvbnRleHQoKQoreworICAgIGludCBmYkNvbmZpZ0F0dHJpYnV0ZXNb
XSA9IHsKKyAgICAgICAgR0xYX0RSQVdBQkxFX1RZUEUsIEdMWF9QQlVGRkVSX0JJVCwKKyAgICAg
ICAgR0xYX1JFTkRFUl9UWVBFLCBHTFhfUkdCQV9CSVQsCisgICAgICAgIEdMWF9SRURfU0laRSwg
MSwKKyAgICAgICAgR0xYX0dSRUVOX1NJWkUsIDEsCisgICAgICAgIEdMWF9CTFVFX1NJWkUsIDEs
CisgICAgICAgIEdMWF9BTFBIQV9TSVpFLCAxLAorICAgICAgICBHTFhfREVQVEhfU0laRSwgMSwK
KyAgICAgICAgR0xYX1NURU5DSUxfU0laRSwgMSwKKyAgICAgICAgR0xYX1NBTVBMRV9CVUZGRVJT
LCAxLAorICAgICAgICBHTFhfRE9VQkxFQlVGRkVSLCBHTF9GQUxTRSwKKyAgICAgICAgR0xYX1NB
TVBMRVMsIDQsCisgICAgICAgIDAKKyAgICB9OworICAgIGludCByZXR1cm5lZEVsZW1lbnRzOwor
ICAgIEdMWEZCQ29uZmlnKiBjb25maWdzID0gZ2xYQ2hvb3NlRkJDb25maWcoc2hhcmVkRGlzcGxh
eSgpLCAwLCBmYkNvbmZpZ0F0dHJpYnV0ZXMsICZyZXR1cm5lZEVsZW1lbnRzKTsKKyAgICBpZiAo
IWNvbmZpZ3MpIHsKKyAgICAgICAgZmJDb25maWdBdHRyaWJ1dGVzWzIwXSA9IDA7IC8vIEF0dGVt
cHQgd2l0aG91dCBhbnRpLWFsaWFzaW5nLgorICAgICAgICBjb25maWdzID0gZ2xYQ2hvb3NlRkJD
b25maWcoc2hhcmVkRGlzcGxheSgpLCAwLCBmYkNvbmZpZ0F0dHJpYnV0ZXMsICZyZXR1cm5lZEVs
ZW1lbnRzKTsKKyAgICB9CisgICAgaWYgKCFyZXR1cm5lZEVsZW1lbnRzKSB7CisgICAgICAgIFhG
cmVlKGNvbmZpZ3MpOworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisKKyAgICAvLyBXZSB3aWxs
IGJlIHJlbmRlcmluZyB0byBhIHRleHR1cmUsIHNvIG91ciBwYnVmZmVyIGRvZXMgbm90IG5lZWQg
dG8gYmUgbGFyZ2UuCisgICAgc3RhdGljIGNvbnN0IGludCBwYnVmZmVyQXR0cmlidXRlc1tdID0g
eyBHTFhfUEJVRkZFUl9XSURUSCwgMSwgR0xYX1BCVUZGRVJfSEVJR0hULCAxLCAwIH07CisgICAg
R0xYUGJ1ZmZlciBwYnVmZmVyID0gZ2xYQ3JlYXRlUGJ1ZmZlcihzaGFyZWREaXNwbGF5KCksIGNv
bmZpZ3NbMF0sIHBidWZmZXJBdHRyaWJ1dGVzKTsKKyAgICBpZiAoIXBidWZmZXIpIHsKKyAgICAg
ICAgWEZyZWUoY29uZmlncyk7CisgICAgICAgIHJldHVybiAwOworICAgIH0KKworICAgIEdMWENv
bnRleHQgY29udGV4dCA9IGdsWENyZWF0ZU5ld0NvbnRleHQoc2hhcmVkRGlzcGxheSgpLCBjb25m
aWdzWzBdLCBHTFhfUkdCQV9UWVBFLCAwLCBHTF9UUlVFKTsKKyAgICBYRnJlZShjb25maWdzKTsK
KyAgICBpZiAoIWNvbnRleHQpCisgICAgICAgIHJldHVybiAwOworICAgIHJldHVybiBuZXcgR3Jh
cGhpY3NDb250ZXh0M0RQcml2YXRlKGNvbnRleHQsIHBidWZmZXIpOworfQorCitHcmFwaGljc0Nv
bnRleHQzRFByaXZhdGUqIEdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZTo6Y3JlYXRlUGl4bWFwQ29u
dGV4dCgpCit7CisgICAgc3RhdGljIGludCB2aXN1YWxBdHRyaWJ1dGVzW10gPSB7CisgICAgICAg
IEdMWF9SR0JBLAorICAgICAgICBHTFhfUkVEX1NJWkUsIDEsCisgICAgICAgIEdMWF9HUkVFTl9T
SVpFLCAxLAorICAgICAgICBHTFhfQkxVRV9TSVpFLCAxLAorICAgICAgICBHTFhfQUxQSEFfU0la
RSwgMSwKKyAgICAgICAgR0xYX0RPVUJMRUJVRkZFUiwKKyAgICAgICAgMAorICAgIH07CisKKyAg
ICBYVmlzdWFsSW5mbyogdmlzdWFsSW5mbyA9IGdsWENob29zZVZpc3VhbChzaGFyZWREaXNwbGF5
KCksIERlZmF1bHRTY3JlZW4oc2hhcmVkRGlzcGxheSgpKSwgdmlzdWFsQXR0cmlidXRlcyk7Cisg
ICAgaWYgKCF2aXN1YWxJbmZvKQorICAgICAgICByZXR1cm4gMDsKKyAKKyAgICBHTFhDb250ZXh0
IGNvbnRleHQgPSBnbFhDcmVhdGVDb250ZXh0KHNoYXJlZERpc3BsYXkoKSwgdmlzdWFsSW5mbywg
MCwgR0xfVFJVRSk7CisgICAgaWYgKCFjb250ZXh0KSB7CisgICAgICAgIFhGcmVlKHZpc3VhbElu
Zm8pOworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisKKyAgICBQaXhtYXAgcGl4bWFwID0gWENy
ZWF0ZVBpeG1hcChzaGFyZWREaXNwbGF5KCksIERlZmF1bHRSb290V2luZG93KHNoYXJlZERpc3Bs
YXkoKSksIDEsIDEsIHZpc3VhbEluZm8tPmRlcHRoKTsKKyAgICBpZiAoIXBpeG1hcCkgeworICAg
ICAgICBYRnJlZSh2aXN1YWxJbmZvKTsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorCisgICAg
R0xYUGl4bWFwIGdseFBpeG1hcCA9IGdsWENyZWF0ZUdMWFBpeG1hcChzaGFyZWREaXNwbGF5KCks
IHZpc3VhbEluZm8sIHBpeG1hcCk7CisgICAgaWYgKCFnbHhQaXhtYXApIHsKKyAgICAgICAgWEZy
ZWVQaXhtYXAoc2hhcmVkRGlzcGxheSgpLCBwaXhtYXApOworICAgICAgICBYRnJlZSh2aXN1YWxJ
bmZvKTsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorCisgICAgcmV0dXJuIG5ldyBHcmFwaGlj
c0NvbnRleHQzRFByaXZhdGUoY29udGV4dCwgcGl4bWFwLCBnbHhQaXhtYXApOworfQorCitHcmFw
aGljc0NvbnRleHQzRFByaXZhdGU6OkdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZShHTFhDb250ZXh0
IGNvbnRleHQsIEdMWFBidWZmZXIgcGJ1ZmZlcikKKyAgICA6IG1fY29udGV4dChjb250ZXh0KQor
ICAgICwgbV9wYnVmZmVyKHBidWZmZXIpCisgICAgLCBtX3BpeG1hcCgwKQorICAgICwgbV9nbHhQ
aXhtYXAoMCkKK3sKK30KKworR3JhcGhpY3NDb250ZXh0M0RQcml2YXRlOjpHcmFwaGljc0NvbnRl
eHQzRFByaXZhdGUoR0xYQ29udGV4dCBjb250ZXh0LCBQaXhtYXAgcGl4bWFwLCBHTFhQaXhtYXAg
Z2x4UGl4bWFwKQorICAgIDogbV9jb250ZXh0KGNvbnRleHQpCisgICAgLCBtX3BidWZmZXIoMCkK
KyAgICAsIG1fcGl4bWFwKHBpeG1hcCkKKyAgICAsIG1fZ2x4UGl4bWFwKGdseFBpeG1hcCkKK3sK
K30KKworR3JhcGhpY3NDb250ZXh0M0RQcml2YXRlOjp+R3JhcGhpY3NDb250ZXh0M0RQcml2YXRl
KCkKK3sKKyAgICBpZiAobV9jb250ZXh0KSB7CisgICAgICAgIC8vIFRoaXMgbWF5IGJlIG5lY2Vz
c2FyeSB0byBwcmV2ZW50IGNyYXNoZXMgd2l0aCBOVmlkaWEncyBjbG9zZWQgc291cmNlIGRyaXZl
cnMuIE9yaWdpbmFsbHkKKyAgICAgICAgLy8gZnJvbSBNb3ppbGxhJ3MgM0QgY2FudmFzIGltcGxl
bWVudGF0aW9uIGF0OiBodHRwOi8vYml0YnVja2V0Lm9yZy9pbG1hcmkvY2FudmFzM2QvCisgICAg
ICAgIDo6Z2xCaW5kRnJhbWVidWZmZXJFWFQoR0xfRlJBTUVCVUZGRVJfRVhULCAwKTsKKworICAg
ICAgICA6OmdsWE1ha2VDb250ZXh0Q3VycmVudChzaGFyZWREaXNwbGF5KCksIDAsIDAsIDApOwor
ICAgICAgICA6OmdsWERlc3Ryb3lDb250ZXh0KHNoYXJlZERpc3BsYXkoKSwgbV9jb250ZXh0KTsK
KyAgICAgICAgbV9jb250ZXh0ID0gMDsKKyAgICB9CisKKyAgICBpZiAobV9wYnVmZmVyKSB7Cisg
ICAgICAgIDo6Z2xYRGVzdHJveVBidWZmZXIoc2hhcmVkRGlzcGxheSgpLCBtX3BidWZmZXIpOwor
ICAgICAgICBtX3BidWZmZXIgPSAwOworICAgIH0KKyAgICBpZiAobV9nbHhQaXhtYXApIHsKKyAg
ICAgICAgZ2xYRGVzdHJveUdMWFBpeG1hcChzaGFyZWREaXNwbGF5KCksIG1fZ2x4UGl4bWFwKTsK
KyAgICAgICAgbV9nbHhQaXhtYXAgPSAwOworICAgIH0KKyAgICBpZiAobV9waXhtYXApIHsKKyAg
ICAgICAgWEZyZWVQaXhtYXAoc2hhcmVkRGlzcGxheSgpLCBtX3BpeG1hcCk7CisgICAgICAgIG1f
cGl4bWFwID0gMDsKKyAgICB9Cit9CisKK2Jvb2wgR3JhcGhpY3NDb250ZXh0M0RQcml2YXRlOjpt
YWtlQ29udGV4dEN1cnJlbnQoKQoreworICAgIGlmICg6OmdsWEdldEN1cnJlbnRDb250ZXh0KCkg
PT0gbV9jb250ZXh0KQorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICBpZiAoIW1fY29udGV4dCkK
KyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGlmIChtX3BidWZmZXIpCisgICAgICAgIHJldHVy
biA6OmdsWE1ha2VDdXJyZW50KHNoYXJlZERpc3BsYXkoKSwgbV9wYnVmZmVyLCBtX2NvbnRleHQp
OworCisgICAgQVNTRVJUKG1fZ2x4UGl4bWFwKTsKKyAgICByZXR1cm4gOjpnbFhNYWtlQ3VycmVu
dChzaGFyZWREaXNwbGF5KCksIG1fZ2x4UGl4bWFwLCBtX2NvbnRleHQpOworfQorCit9IC8vIG5h
bWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFCTEVfV0VCR0wKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dseC9HcmFwaGljc0NvbnRleHQzRFByaXZh
dGUuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dseC9HcmFwaGljc0NvbnRl
eHQzRFByaXZhdGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4zM2E1MDBkMGEwMDdmNmQ0MGE3ODkyZDQxY2U3ZTM4
Y2EwNzRiNWUwCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvZ2x4L0dyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZS5oCkBAIC0wLDAgKzEsNjAgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgSWdhbGlhIFMuTC4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5
IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogIG1v
ZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMK
KyAqICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9u
OyBlaXRoZXIKKyAqICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlv
bikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRl
ZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFO
WSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVS
Q0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRo
ZSBHTlUKKyAqICBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxz
LgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVz
c2VyIEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsg
aWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZQorICogIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4s
IDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiAgQm9zdG9uLCBNQSAwMjExMC0x
MzAxIFVTQQorICovCisKKyNpZm5kZWYgR3JhcGhpY3NDb250ZXh0M0RQcml2YXRlX2gKKyNkZWZp
bmUgR3JhcGhpY3NDb250ZXh0M0RQcml2YXRlX2gKKworI2luY2x1ZGUgPHd0Zi9QYXNzT3duUHRy
Lmg+CisKK3R5cGVkZWYgc3RydWN0IF9fR0xYY29udGV4dFJlYyAqR0xYQ29udGV4dDsKK3R5cGVk
ZWYgdW5zaWduZWQgbG9uZyBHTFhQYnVmZmVyOwordHlwZWRlZiB1bnNpZ25lZCBsb25nIEdMWFBp
eG1hcDsKK3R5cGVkZWYgdW5zaWduZWQgY2hhciBHTHVieXRlOwordHlwZWRlZiB1bnNpZ25lZCBs
b25nIFBpeG1hcDsKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBHcmFwaGljc0NvbnRl
eHQzRDsKKworY2xhc3MgR3JhcGhpY3NDb250ZXh0M0RQcml2YXRlIHsKK3B1YmxpYzoKKyAgICBz
dGF0aWMgUGFzc093blB0cjxHcmFwaGljc0NvbnRleHQzRFByaXZhdGU+IGNyZWF0ZSgpOworICAg
IH5HcmFwaGljc0NvbnRleHQzRFByaXZhdGUoKTsKKyAgICBib29sIG1ha2VDb250ZXh0Q3VycmVu
dCgpOworCitwcml2YXRlOgorICAgIGZyaWVuZCBjbGFzcyBHcmFwaGljc0NvbnRleHQzRDsKKyAg
ICBzdGF0aWMgR3JhcGhpY3NDb250ZXh0M0RQcml2YXRlKiBjcmVhdGVQYnVmZmVyQ29udGV4dCgp
OworICAgIHN0YXRpYyBHcmFwaGljc0NvbnRleHQzRFByaXZhdGUqIGNyZWF0ZVBpeG1hcENvbnRl
eHQoKTsKKyAgICBHcmFwaGljc0NvbnRleHQzRFByaXZhdGUoR0xYQ29udGV4dCwgR0xYUGJ1ZmZl
cik7CisgICAgR3JhcGhpY3NDb250ZXh0M0RQcml2YXRlKEdMWENvbnRleHQsIFBpeG1hcCwgR0xY
UGl4bWFwKTsKKworICAgIHN0YXRpYyB2b2lkIGFkZEFjdGl2ZUdyYXBoaWNzQ29udGV4dChHcmFw
aGljc0NvbnRleHQzRCopOworICAgIHN0YXRpYyB2b2lkIHJlbW92ZUFjdGl2ZUdyYXBoaWNzQ29u
dGV4dChHcmFwaGljc0NvbnRleHQzRCopOworICAgIHN0YXRpYyB2b2lkIGNsZWFudXBBY3RpdmVD
b250ZXh0c0F0RXhpdCgpOworCisgICAgR0xYQ29udGV4dCBtX2NvbnRleHQ7CisgICAgR0xYUGJ1
ZmZlciBtX3BidWZmZXI7CisgICAgUGl4bWFwIG1fcGl4bWFwOworICAgIEdMWFBpeG1hcCBtX2ds
eFBpeG1hcDsKK307CisKK30KKworI2VuZGlmIC8vIEdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZV9o
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ndGsvR3JhcGhp
Y3NDb250ZXh0M0RQcml2YXRlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2d0ay9HcmFwaGljc0NvbnRleHQzRFByaXZhdGUuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCA1MjNiYzdlMzZhZWU5YzAwZTU2ZjdlY2Q1NmE2ZjZiMTUzMGMxZGJlLi4wMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2d0ay9HcmFwaGljc0NvbnRleHQzRFByaXZhdGUuY3BwCisrKyAvZGV2
L251bGwKQEAgLTEsMjUzICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEgSWdhbGlh
IFMuTC4KLSAqCi0gKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVk
aXN0cmlidXRlIGl0IGFuZC9vcgotICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhl
IEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKLSAqICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0
aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAqICB2ZXJzaW9uIDIgb2YgdGhl
IExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICog
IFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUg
dXNlZnVsLAotICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBp
bXBsaWVkIHdhcnJhbnR5IG9mCi0gKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAqICBMZXNzZXIgR2VuZXJhbCBQdWJs
aWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqICBZb3Ugc2hvdWxkIGhhdmUgcmVj
ZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCi0gKiAgTGljZW5z
ZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZQotICog
IFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxv
b3IsCi0gKiAgQm9zdG9uLCBNQSAwMjExMC0xMzAxIFVTQQotICovCi0KLSNpbmNsdWRlICJjb25m
aWcuaCIKLSNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQzRFByaXZhdGUuaCIKLQotI2lmIEVOQUJM
RShXRUJHTCkKLQotI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dDNELmgiCi0jaW5jbHVkZSAiT3Bl
bkdMU2hpbXMuaCIKLSNpbmNsdWRlIDxHTC9nbHguaD4KLSNpbmNsdWRlIDxkbGZjbi5oPgotCi0v
LyBXZSBkbyBub3Qgd2FudCB0byBjYWxsIGdsWE1ha2VDb250ZXh0Q3VycmVudCB1c2luZyBkaWZm
ZXJlbnQgRGlzcGxheSBwb2ludGVycywKLS8vIGJlY2F1c2UgaXQgbWlnaHQgbGVhZCB0byBjcmFz
aGVzIGluIHNvbWUgZHJpdmVycyAoZmdscngpLiBXZSB1c2UgYSBzaGFyZWQgZGlzcGxheQotLy8g
cG9pbnRlciBoZXJlLgotc3RhdGljIERpc3BsYXkqIGdTaGFyZWREaXNwbGF5ID0gMDsKLXN0YXRp
YyBEaXNwbGF5KiBzaGFyZWREaXNwbGF5KCkKLXsKLSAgICBpZiAoIWdTaGFyZWREaXNwbGF5KQot
ICAgICAgICBnU2hhcmVkRGlzcGxheSA9IFhPcGVuRGlzcGxheSgwKTsKLSAgICByZXR1cm4gZ1No
YXJlZERpc3BsYXk7Ci19Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotLy8gQmVjYXVzZSBvZiBk
cml2ZXIgYnVncywgZXhpdGluZyB0aGUgcHJvZ3JhbSB3aGVuIHRoZXJlIGFyZSBhY3RpdmUgcGJ1
ZmZlcnMKLS8vIGNhbiBjcmFzaCB0aGUgWCBzZXJ2ZXIgKHRoaXMgaGFzIGJlZW4gb2JzZXJ2ZWQg
d2l0aCB0aGUgb2ZmaWNpYWwgTnZpZGlhIGRyaXZlcnMpLgotLy8gV2UgbmVlZCB0byBlbnN1cmUg
dGhhdCB3ZSBjbGVhbiBldmVyeXRoaW5nIHVwIG9uIGV4aXQuIFRoZXJlIGFyZSBzZXZlcmFsIHJl
YXNvbnMKLS8vIHRoYXQgR3JhcGhpY3NDb250ZXh0M0RzIHdpbGwgc3RpbGwgYmUgYWxpdmUgYXQg
ZXhpdCwgaW5jbHVkaW5nIHVzZXIgZXJyb3IgKG1lbW9yeQotLy8gbGVha3MpIGFuZCB0aGUgcGFn
ZSBjYWNoZS4gSW4gYW55IGNhc2UsIHdlIGRvbid0IHdhbnQgdGhlIFggc2VydmVyIHRvIGNyYXNo
Lgotc3RhdGljIGJvb2wgY2xlYW5pbmdVcEF0RXhpdCA9IGZhbHNlOwotc3RhdGljIFZlY3RvcjxH
cmFwaGljc0NvbnRleHQzRCo+JiBhY3RpdmVHcmFwaGljc0NvbnRleHRzKCkKLXsKLSAgICBERUZJ
TkVfU1RBVElDX0xPQ0FMKFZlY3RvcjxHcmFwaGljc0NvbnRleHQzRCo+LCBjb250ZXh0cywgKCkp
OwotICAgIHJldHVybiBjb250ZXh0czsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRFByaXZh
dGU6OmFkZEFjdGl2ZUdyYXBoaWNzQ29udGV4dChHcmFwaGljc0NvbnRleHQzRCogY29udGV4dCkK
LXsKLSAgICBzdGF0aWMgYm9vbCBhZGRlZEF0RXhpdEhhbmRsZXIgPSBmYWxzZTsKLSAgICBpZiAo
IWFkZGVkQXRFeGl0SGFuZGxlcikgewotICAgICAgICBhdGV4aXQoJkdyYXBoaWNzQ29udGV4dDNE
UHJpdmF0ZTo6Y2xlYW51cEFjdGl2ZUNvbnRleHRzQXRFeGl0KTsKLSAgICAgICAgYWRkZWRBdEV4
aXRIYW5kbGVyID0gdHJ1ZTsKLSAgICB9Ci0gICAgYWN0aXZlR3JhcGhpY3NDb250ZXh0cygpLmFw
cGVuZChjb250ZXh0KTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQzRFByaXZhdGU6OnJlbW92
ZUFjdGl2ZUdyYXBoaWNzQ29udGV4dChHcmFwaGljc0NvbnRleHQzRCogY29udGV4dCkKLXsKLSAg
ICBpZiAoY2xlYW5pbmdVcEF0RXhpdCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgVmVjdG9yPEdy
YXBoaWNzQ29udGV4dDNEKj4mIGNvbnRleHRzID0gYWN0aXZlR3JhcGhpY3NDb250ZXh0cygpOwot
ICAgIHNpemVfdCBsb2NhdGlvbiA9IGNvbnRleHRzLmZpbmQoY29udGV4dCk7Ci0gICAgaWYgKGxv
Y2F0aW9uICE9IFdURjo6bm90Rm91bmQpCi0gICAgICAgIGNvbnRleHRzLnJlbW92ZShsb2NhdGlv
bik7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0M0RQcml2YXRlOjpjbGVhbnVwQWN0aXZlQ29u
dGV4dHNBdEV4aXQoKQotewotICAgIGNsZWFuaW5nVXBBdEV4aXQgPSB0cnVlOwotCi0gICAgVmVj
dG9yPEdyYXBoaWNzQ29udGV4dDNEKj4mIGNvbnRleHRzID0gYWN0aXZlR3JhcGhpY3NDb250ZXh0
cygpOwotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgY29udGV4dHMuc2l6ZSgpOyBpKyspCi0g
ICAgICAgIGNvbnRleHRzW2ldLT5+R3JhcGhpY3NDb250ZXh0M0QoKTsKLQotICAgIGlmICghZ1No
YXJlZERpc3BsYXkpCi0gICAgICAgIHJldHVybjsKLSAgICBYQ2xvc2VEaXNwbGF5KGdTaGFyZWRE
aXNwbGF5KTsKLSAgICBnU2hhcmVkRGlzcGxheSA9IDA7Ci19Ci0KLVBhc3NPd25QdHI8R3JhcGhp
Y3NDb250ZXh0M0RQcml2YXRlPiBHcmFwaGljc0NvbnRleHQzRFByaXZhdGU6OmNyZWF0ZSgpCi17
Ci0gICAgaWYgKCFzaGFyZWREaXNwbGF5KCkpCi0gICAgICAgIHJldHVybiBudWxscHRyOwotCi0g
ICAgc3RhdGljIGJvb2wgaW5pdGlhbGl6ZWQgPSBmYWxzZTsKLSAgICBzdGF0aWMgYm9vbCBzdWNj
ZXNzID0gdHJ1ZTsKLSAgICBpZiAoIWluaXRpYWxpemVkKSB7Ci0gICAgICAgIHN1Y2Nlc3MgPSBp
bml0aWFsaXplT3BlbkdMU2hpbXMoKTsKLSAgICAgICAgaW5pdGlhbGl6ZWQgPSB0cnVlOwotICAg
IH0KLSAgICBpZiAoIXN1Y2Nlc3MpCi0gICAgICAgIHJldHVybiBudWxscHRyOwotCi0gICAgR3Jh
cGhpY3NDb250ZXh0M0RQcml2YXRlKiBpbnRlcm5hbCA9IGNyZWF0ZVBidWZmZXJDb250ZXh0KCk7
Ci0gICAgaWYgKCFpbnRlcm5hbCkKLSAgICAgICAgaW50ZXJuYWwgPSBjcmVhdGVQaXhtYXBDb250
ZXh0KCk7Ci0gICAgaWYgKCFpbnRlcm5hbCkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAg
ICAvLyBUaGUgR3JhcGhpY3NDb250ZXh0M0QgY29uc3RydWN0b3IgcmVxdWlyZXMgdGhhdCB0aGlz
IGNvbnRleHQgaXMgdGhlIGN1cnJlbnQgT3BlbkdMIGNvbnRleHQuCi0gICAgaW50ZXJuYWwtPm1h
a2VDb250ZXh0Q3VycmVudCgpOwotICAgIHJldHVybiBhZG9wdFB0cihpbnRlcm5hbCk7Ci19Ci0K
LUdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZSogR3JhcGhpY3NDb250ZXh0M0RQcml2YXRlOjpjcmVh
dGVQYnVmZmVyQ29udGV4dCgpCi17Ci0gICAgaW50IGZiQ29uZmlnQXR0cmlidXRlc1tdID0gewot
ICAgICAgICBHTFhfRFJBV0FCTEVfVFlQRSwgR0xYX1BCVUZGRVJfQklULAotICAgICAgICBHTFhf
UkVOREVSX1RZUEUsIEdMWF9SR0JBX0JJVCwKLSAgICAgICAgR0xYX1JFRF9TSVpFLCAxLAotICAg
ICAgICBHTFhfR1JFRU5fU0laRSwgMSwKLSAgICAgICAgR0xYX0JMVUVfU0laRSwgMSwKLSAgICAg
ICAgR0xYX0FMUEhBX1NJWkUsIDEsCi0gICAgICAgIEdMWF9ERVBUSF9TSVpFLCAxLAotICAgICAg
ICBHTFhfU1RFTkNJTF9TSVpFLCAxLAotICAgICAgICBHTFhfU0FNUExFX0JVRkZFUlMsIDEsCi0g
ICAgICAgIEdMWF9ET1VCTEVCVUZGRVIsIEdMX0ZBTFNFLAotICAgICAgICBHTFhfU0FNUExFUywg
NCwKLSAgICAgICAgMAotICAgIH07Ci0gICAgaW50IHJldHVybmVkRWxlbWVudHM7Ci0gICAgR0xY
RkJDb25maWcqIGNvbmZpZ3MgPSBnbFhDaG9vc2VGQkNvbmZpZyhzaGFyZWREaXNwbGF5KCksIDAs
IGZiQ29uZmlnQXR0cmlidXRlcywgJnJldHVybmVkRWxlbWVudHMpOwotICAgIGlmICghY29uZmln
cykgewotICAgICAgICBmYkNvbmZpZ0F0dHJpYnV0ZXNbMjBdID0gMDsgLy8gQXR0ZW1wdCB3aXRo
b3V0IGFudGktYWxpYXNpbmcuCi0gICAgICAgIGNvbmZpZ3MgPSBnbFhDaG9vc2VGQkNvbmZpZyhz
aGFyZWREaXNwbGF5KCksIDAsIGZiQ29uZmlnQXR0cmlidXRlcywgJnJldHVybmVkRWxlbWVudHMp
OwotICAgIH0KLSAgICBpZiAoIXJldHVybmVkRWxlbWVudHMpIHsKLSAgICAgICAgWEZyZWUoY29u
Zmlncyk7Ci0gICAgICAgIHJldHVybiAwOwotICAgIH0KLQotICAgIC8vIFdlIHdpbGwgYmUgcmVu
ZGVyaW5nIHRvIGEgdGV4dHVyZSwgc28gb3VyIHBidWZmZXIgZG9lcyBub3QgbmVlZCB0byBiZSBs
YXJnZS4KLSAgICBzdGF0aWMgY29uc3QgaW50IHBidWZmZXJBdHRyaWJ1dGVzW10gPSB7IEdMWF9Q
QlVGRkVSX1dJRFRILCAxLCBHTFhfUEJVRkZFUl9IRUlHSFQsIDEsIDAgfTsKLSAgICBHTFhQYnVm
ZmVyIHBidWZmZXIgPSBnbFhDcmVhdGVQYnVmZmVyKHNoYXJlZERpc3BsYXkoKSwgY29uZmlnc1sw
XSwgcGJ1ZmZlckF0dHJpYnV0ZXMpOwotICAgIGlmICghcGJ1ZmZlcikgewotICAgICAgICBYRnJl
ZShjb25maWdzKTsKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgfQotCi0gICAgR0xYQ29udGV4dCBj
b250ZXh0ID0gZ2xYQ3JlYXRlTmV3Q29udGV4dChzaGFyZWREaXNwbGF5KCksIGNvbmZpZ3NbMF0s
IEdMWF9SR0JBX1RZUEUsIDAsIEdMX1RSVUUpOwotICAgIFhGcmVlKGNvbmZpZ3MpOwotICAgIGlm
ICghY29udGV4dCkKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgcmV0dXJuIG5ldyBHcmFwaGljc0Nv
bnRleHQzRFByaXZhdGUoY29udGV4dCwgcGJ1ZmZlcik7Ci19Ci0KLUdyYXBoaWNzQ29udGV4dDNE
UHJpdmF0ZSogR3JhcGhpY3NDb250ZXh0M0RQcml2YXRlOjpjcmVhdGVQaXhtYXBDb250ZXh0KCkK
LXsKLSAgICBzdGF0aWMgaW50IHZpc3VhbEF0dHJpYnV0ZXNbXSA9IHsKLSAgICAgICAgR0xYX1JH
QkEsCi0gICAgICAgIEdMWF9SRURfU0laRSwgMSwKLSAgICAgICAgR0xYX0dSRUVOX1NJWkUsIDEs
Ci0gICAgICAgIEdMWF9CTFVFX1NJWkUsIDEsCi0gICAgICAgIEdMWF9BTFBIQV9TSVpFLCAxLAot
ICAgICAgICBHTFhfRE9VQkxFQlVGRkVSLAotICAgICAgICAwCi0gICAgfTsKLQotICAgIFhWaXN1
YWxJbmZvKiB2aXN1YWxJbmZvID0gZ2xYQ2hvb3NlVmlzdWFsKHNoYXJlZERpc3BsYXkoKSwgRGVm
YXVsdFNjcmVlbihzaGFyZWREaXNwbGF5KCkpLCB2aXN1YWxBdHRyaWJ1dGVzKTsKLSAgICBpZiAo
IXZpc3VhbEluZm8pCi0gICAgICAgIHJldHVybiAwOwotIAotICAgIEdMWENvbnRleHQgY29udGV4
dCA9IGdsWENyZWF0ZUNvbnRleHQoc2hhcmVkRGlzcGxheSgpLCB2aXN1YWxJbmZvLCAwLCBHTF9U
UlVFKTsKLSAgICBpZiAoIWNvbnRleHQpIHsKLSAgICAgICAgWEZyZWUodmlzdWFsSW5mbyk7Ci0g
ICAgICAgIHJldHVybiAwOwotICAgIH0KLQotICAgIFBpeG1hcCBwaXhtYXAgPSBYQ3JlYXRlUGl4
bWFwKHNoYXJlZERpc3BsYXkoKSwgRGVmYXVsdFJvb3RXaW5kb3coc2hhcmVkRGlzcGxheSgpKSwg
MSwgMSwgdmlzdWFsSW5mby0+ZGVwdGgpOwotICAgIGlmICghcGl4bWFwKSB7Ci0gICAgICAgIFhG
cmVlKHZpc3VhbEluZm8pOwotICAgICAgICByZXR1cm4gMDsKLSAgICB9Ci0KLSAgICBHTFhQaXht
YXAgZ2x4UGl4bWFwID0gZ2xYQ3JlYXRlR0xYUGl4bWFwKHNoYXJlZERpc3BsYXkoKSwgdmlzdWFs
SW5mbywgcGl4bWFwKTsKLSAgICBpZiAoIWdseFBpeG1hcCkgewotICAgICAgICBYRnJlZVBpeG1h
cChzaGFyZWREaXNwbGF5KCksIHBpeG1hcCk7Ci0gICAgICAgIFhGcmVlKHZpc3VhbEluZm8pOwot
ICAgICAgICByZXR1cm4gMDsKLSAgICB9Ci0KLSAgICByZXR1cm4gbmV3IEdyYXBoaWNzQ29udGV4
dDNEUHJpdmF0ZShjb250ZXh0LCBwaXhtYXAsIGdseFBpeG1hcCk7Ci19Ci0KLUdyYXBoaWNzQ29u
dGV4dDNEUHJpdmF0ZTo6R3JhcGhpY3NDb250ZXh0M0RQcml2YXRlKEdMWENvbnRleHQgY29udGV4
dCwgR0xYUGJ1ZmZlciBwYnVmZmVyKQotICAgIDogbV9jb250ZXh0KGNvbnRleHQpCi0gICAgLCBt
X3BidWZmZXIocGJ1ZmZlcikKLSAgICAsIG1fcGl4bWFwKDApCi0gICAgLCBtX2dseFBpeG1hcCgw
KQotewotfQotCi1HcmFwaGljc0NvbnRleHQzRFByaXZhdGU6OkdyYXBoaWNzQ29udGV4dDNEUHJp
dmF0ZShHTFhDb250ZXh0IGNvbnRleHQsIFBpeG1hcCBwaXhtYXAsIEdMWFBpeG1hcCBnbHhQaXht
YXApCi0gICAgOiBtX2NvbnRleHQoY29udGV4dCkKLSAgICAsIG1fcGJ1ZmZlcigwKQotICAgICwg
bV9waXhtYXAocGl4bWFwKQotICAgICwgbV9nbHhQaXhtYXAoZ2x4UGl4bWFwKQotewotfQotCi1H
cmFwaGljc0NvbnRleHQzRFByaXZhdGU6On5HcmFwaGljc0NvbnRleHQzRFByaXZhdGUoKQotewot
ICAgIGlmIChtX2NvbnRleHQpIHsKLSAgICAgICAgLy8gVGhpcyBtYXkgYmUgbmVjZXNzYXJ5IHRv
IHByZXZlbnQgY3Jhc2hlcyB3aXRoIE5WaWRpYSdzIGNsb3NlZCBzb3VyY2UgZHJpdmVycy4gT3Jp
Z2luYWxseQotICAgICAgICAvLyBmcm9tIE1vemlsbGEncyAzRCBjYW52YXMgaW1wbGVtZW50YXRp
b24gYXQ6IGh0dHA6Ly9iaXRidWNrZXQub3JnL2lsbWFyaS9jYW52YXMzZC8KLSAgICAgICAgOjpn
bEJpbmRGcmFtZWJ1ZmZlckVYVChHTF9GUkFNRUJVRkZFUl9FWFQsIDApOwotCi0gICAgICAgIDo6
Z2xYTWFrZUNvbnRleHRDdXJyZW50KHNoYXJlZERpc3BsYXkoKSwgMCwgMCwgMCk7Ci0gICAgICAg
IDo6Z2xYRGVzdHJveUNvbnRleHQoc2hhcmVkRGlzcGxheSgpLCBtX2NvbnRleHQpOwotICAgICAg
ICBtX2NvbnRleHQgPSAwOwotICAgIH0KLQotICAgIGlmIChtX3BidWZmZXIpIHsKLSAgICAgICAg
OjpnbFhEZXN0cm95UGJ1ZmZlcihzaGFyZWREaXNwbGF5KCksIG1fcGJ1ZmZlcik7Ci0gICAgICAg
IG1fcGJ1ZmZlciA9IDA7Ci0gICAgfQotICAgIGlmIChtX2dseFBpeG1hcCkgewotICAgICAgICBn
bFhEZXN0cm95R0xYUGl4bWFwKHNoYXJlZERpc3BsYXkoKSwgbV9nbHhQaXhtYXApOwotICAgICAg
ICBtX2dseFBpeG1hcCA9IDA7Ci0gICAgfQotICAgIGlmIChtX3BpeG1hcCkgewotICAgICAgICBY
RnJlZVBpeG1hcChzaGFyZWREaXNwbGF5KCksIG1fcGl4bWFwKTsKLSAgICAgICAgbV9waXhtYXAg
PSAwOwotICAgIH0KLX0KLQotYm9vbCBHcmFwaGljc0NvbnRleHQzRFByaXZhdGU6Om1ha2VDb250
ZXh0Q3VycmVudCgpCi17Ci0gICAgaWYgKDo6Z2xYR2V0Q3VycmVudENvbnRleHQoKSA9PSBtX2Nv
bnRleHQpCi0gICAgICAgIHJldHVybiB0cnVlOwotICAgIGlmICghbV9jb250ZXh0KQotICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0gICAgaWYgKG1fcGJ1ZmZlcikgewotICAgICAgICByZXR1cm4gOjpn
bFhNYWtlQ3VycmVudChzaGFyZWREaXNwbGF5KCksIG1fcGJ1ZmZlciwgbV9jb250ZXh0KTsKLSAg
ICB9Ci0KLSAgICBBU1NFUlQobV9nbHhQaXhtYXApOwotICAgIHJldHVybiA6OmdsWE1ha2VDdXJy
ZW50KHNoYXJlZERpc3BsYXkoKSwgbV9nbHhQaXhtYXAsIG1fY29udGV4dCk7Ci19Ci0KLX0gLy8g
bmFtZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmIC8vIEVOQUJMRV9XRUJHTApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3RrL0dyYXBoaWNzQ29udGV4dDNEUHJp
dmF0ZS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3RrL0dyYXBoaWNzQ29u
dGV4dDNEUHJpdmF0ZS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0MTM0ODk1Yjc2
OTdjODRjMzk0MDNjM2I2N2NiZjM0YzkzNDEyYjc2Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2d0
ay9HcmFwaGljc0NvbnRleHQzRFByaXZhdGUuaAorKysgL2Rldi9udWxsCkBAIC0xLDYwICswLDAg
QEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEgSWdhbGlhIFMuTC4KLSAqCi0gKiAgVGhpcyBs
aWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgot
ICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQ
dWJsaWMKLSAqICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3Vu
ZGF0aW9uOyBlaXRoZXIKLSAqICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3Vy
IG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogIFRoaXMgbGlicmFyeSBpcyBkaXN0
cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogIGJ1dCBXSVRI
T1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0g
KiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAg
U2VlIHRoZSBHTlUKLSAqICBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBk
ZXRhaWxzLgotICoKLSAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBH
TlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCi0gKiAgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGli
cmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZQotICogIFNvZnR3YXJlIEZvdW5kYXRpb24s
IEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCi0gKiAgQm9zdG9uLCBNQSAw
MjExMC0xMzAxIFVTQQotICovCi0KLSNpZm5kZWYgR3JhcGhpY3NDb250ZXh0M0RQcml2YXRlX2gK
LSNkZWZpbmUgR3JhcGhpY3NDb250ZXh0M0RQcml2YXRlX2gKLQotI2luY2x1ZGUgPHd0Zi9QYXNz
T3duUHRyLmg+Ci0KLXR5cGVkZWYgc3RydWN0IF9fR0xYY29udGV4dFJlYyAqR0xYQ29udGV4dDsK
LXR5cGVkZWYgdW5zaWduZWQgbG9uZyBHTFhQYnVmZmVyOwotdHlwZWRlZiB1bnNpZ25lZCBsb25n
IEdMWFBpeG1hcDsKLXR5cGVkZWYgdW5zaWduZWQgY2hhciBHTHVieXRlOwotdHlwZWRlZiB1bnNp
Z25lZCBsb25nIFBpeG1hcDsKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1jbGFzcyBHcmFwaGlj
c0NvbnRleHQzRDsKLQotY2xhc3MgR3JhcGhpY3NDb250ZXh0M0RQcml2YXRlIHsKLSAgICBwdWJs
aWM6Ci0gICAgc3RhdGljIFBhc3NPd25QdHI8R3JhcGhpY3NDb250ZXh0M0RQcml2YXRlPiBjcmVh
dGUoKTsKLSAgICB+R3JhcGhpY3NDb250ZXh0M0RQcml2YXRlKCk7Ci0gICAgYm9vbCBtYWtlQ29u
dGV4dEN1cnJlbnQoKTsKLQotICAgIHByaXZhdGU6Ci0gICAgZnJpZW5kIGNsYXNzIEdyYXBoaWNz
Q29udGV4dDNEOwotICAgIHN0YXRpYyBHcmFwaGljc0NvbnRleHQzRFByaXZhdGUqIGNyZWF0ZVBi
dWZmZXJDb250ZXh0KCk7Ci0gICAgc3RhdGljIEdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZSogY3Jl
YXRlUGl4bWFwQ29udGV4dCgpOwotICAgIEdyYXBoaWNzQ29udGV4dDNEUHJpdmF0ZShHTFhDb250
ZXh0LCBHTFhQYnVmZmVyKTsKLSAgICBHcmFwaGljc0NvbnRleHQzRFByaXZhdGUoR0xYQ29udGV4
dCwgUGl4bWFwLCBHTFhQaXhtYXApOwotCi0gICAgc3RhdGljIHZvaWQgYWRkQWN0aXZlR3JhcGhp
Y3NDb250ZXh0KEdyYXBoaWNzQ29udGV4dDNEKik7Ci0gICAgc3RhdGljIHZvaWQgcmVtb3ZlQWN0
aXZlR3JhcGhpY3NDb250ZXh0KEdyYXBoaWNzQ29udGV4dDNEKik7Ci0gICAgc3RhdGljIHZvaWQg
Y2xlYW51cEFjdGl2ZUNvbnRleHRzQXRFeGl0KCk7Ci0KLSAgICBHTFhDb250ZXh0IG1fY29udGV4
dDsKLSAgICBHTFhQYnVmZmVyIG1fcGJ1ZmZlcjsKLSAgICBQaXhtYXAgbV9waXhtYXA7Ci0gICAg
R0xYUGl4bWFwIG1fZ2x4UGl4bWFwOwotfTsKLQotfQotCi0jZW5kaWYgLy8gR3JhcGhpY3NDb250
ZXh0M0RQcml2YXRlX2gK
</data>

          </attachment>
      

    </bug>

</bugzilla>