<?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>115224</bug_id>
          
          <creation_ts>2013-04-25 22:45:11 -0700</creation_ts>
          <short_desc>[Texmap] Use fewer intermediate surfaces when compositing filters</short_desc>
          <delta_ts>2013-04-30 06:46:54 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>New Bugs</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Noam Rosenthal">noam</reporter>
          <assigned_to name="Noam Rosenthal">noam</assigned_to>
          <cc>allan.jensen</cc>
    
    <cc>cmarcelo</cc>
    
    <cc>commit-queue</cc>
    
    <cc>eflews.bot</cc>
    
    <cc>gtk-ews</cc>
    
    <cc>gyuyoung.kim</cc>
    
    <cc>jturcotte</cc>
    
    <cc>luiz</cc>
    
    <cc>rego+ews</cc>
    
    <cc>xan.lopez</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>881695</commentid>
    <comment_count>0</comment_count>
    <who name="Noam Rosenthal">noam</who>
    <bug_when>2013-04-25 22:45:11 -0700</bug_when>
    <thetext>[Texmap] Use fewer intermediate surfaces when compositing filters</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>881699</commentid>
    <comment_count>1</comment_count>
      <attachid>199783</attachid>
    <who name="Noam Rosenthal">noam</who>
    <bug_when>2013-04-25 22:53:57 -0700</bug_when>
    <thetext>Created attachment 199783
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>881709</commentid>
    <comment_count>2</comment_count>
      <attachid>199783</attachid>
    <who name="EFL EWS Bot">eflews.bot</who>
    <bug_when>2013-04-25 23:10:16 -0700</bug_when>
    <thetext>Comment on attachment 199783
Patch

Attachment 199783 did not pass efl-ews (efl):
Output: http://webkit-queues.appspot.com/results/171357</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>881712</commentid>
    <comment_count>3</comment_count>
      <attachid>199783</attachid>
    <who name="EFL EWS Bot">eflews.bot</who>
    <bug_when>2013-04-25 23:11:35 -0700</bug_when>
    <thetext>Comment on attachment 199783
Patch

Attachment 199783 did not pass efl-wk2-ews (efl-wk2):
Output: http://webkit-queues.appspot.com/results/38589</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>881721</commentid>
    <comment_count>4</comment_count>
      <attachid>199783</attachid>
    <who name="kov&apos;s GTK+ EWS bot">gtk-ews</who>
    <bug_when>2013-04-25 23:45:47 -0700</bug_when>
    <thetext>Comment on attachment 199783
Patch

Attachment 199783 did not pass gtk-ews (gtk):
Output: http://webkit-queues.appspot.com/results/61486</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>881787</commentid>
    <comment_count>5</comment_count>
      <attachid>199808</attachid>
    <who name="Noam Rosenthal">noam</who>
    <bug_when>2013-04-26 02:43:52 -0700</bug_when>
    <thetext>Created attachment 199808
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>883056</commentid>
    <comment_count>6</comment_count>
      <attachid>199808</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2013-04-30 06:46:51 -0700</bug_when>
    <thetext>Comment on attachment 199808
Patch

Clearing flags on attachment: 199808

Committed r149365: &lt;http://trac.webkit.org/changeset/149365&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>883057</commentid>
    <comment_count>7</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2013-04-30 06:46:54 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>199783</attachid>
            <date>2013-04-25 22:53:57 -0700</date>
            <delta_ts>2013-04-26 02:43:45 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-115224-20130426075317.patch</filename>
            <type>text/plain</type>
            <size>30310</size>
            <attacher name="Noam Rosenthal">noam</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTQ4OTQ5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYTZmODc1OTMxOGUxYjA2
NzNjOGI3YjcxMjcxMDA5Y2Q5OTE0YTljYi4uY2FlNWQ5M2RkZDYwYmEzYmY5ZDNiZWJhOTM1Y2Nj
MWE4ODc1MGRjZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDU0IEBACisyMDEzLTA0LTI1ICBOb2Ft
IFJvc2VudGhhbCAgPG5vYW1Ad2Via2l0Lm9yZz4KKworICAgICAgICBbVGV4bWFwXSBVc2UgZmV3
ZXIgaW50ZXJtZWRpYXRlIHN1cmZhY2VzIHdoZW4gY29tcG9zaXRpbmcgZmlsdGVycworICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTE1MjI0CisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVW50aWwgbm93LCB3aGVu
IHJlbmRlcmluZyBDU1MgZmlsdGVycywgdGhlIGZpbHRlcnMgd2VyZSBhcHBsaWVkIHRvIHRoZSB0
ZXh0dXJlCisgICAgICAgIGFuZCB0aGVuIHRoZSByZXN1bHRpbmcgdGV4dHVyZSB3b3VsZCBiZSBj
b21wb3NpdGVkIHRvIHRoZSB0YXJnZXQgc3VyZmFjZSB3aXRoCisgICAgICAgIGl0cyB0cmFuc2Zv
cm0vb3BhY2l0eS4KKyAgICAgICAgVGhpcyByZXF1aXJlcyBhdCBsZWFzdCB0d28gaW50ZXJtZWRp
YXRlIHN1cmZhY2UgcGFzc2VzIGZvciBldmVyeSBmaWx0ZXJlZCBsYXllci4KKworICAgICAgICBU
aGlzIHBhdGNoIG1ha2VzIGl0IHNvIHRoYXQgdGhlIGxhc3QgZmlsdGVyIHBhc3MgaXMgYXBwbGll
ZCB0b2dldGhlciB3aXRoIHRoZSAKKyAgICAgICAgcmVzdWx0aW5nIHN1cmZhY2UncyBvcGFjaXR5
IGFuZCB0cmFuc2Zvcm0sIGR1cmluZyBjb21wb3NpdGlvbi4KKworICAgICAgICBUZXN0ZWQgYnkg
Y3NzMy9maWx0ZXJzIHRlc3RzLCB3aGljaG4gbm93IHNjcm9sbC96b29tIGEgbG90IGZhc3Rlci4K
KworICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyLmg6Cisg
ICAgICAgIChXZWJDb3JlOjpCaXRtYXBUZXh0dXJlOjphcHBseUZpbHRlcnMpOgorICAgICAgICAq
IHBsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyR0wuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6VGV4dHVyZU1hcHBlckdMRGF0YTo6VGV4dHVyZU1hcHBlckdMRGF0YSk6CisgICAg
ICAgIChUZXh0dXJlTWFwcGVyR0xEYXRhKToKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAo
V2ViQ29yZTo6b3B0aW9uc0ZvckZpbHRlclR5cGUpOgorICAgICAgICAoV2ViQ29yZTo6Z2V0UGFz
c2VzUmVxdWlyZWRGb3JGaWx0ZXIpOgorICAgICAgICAoV2ViQ29yZTo6Z2F1c3MpOgorICAgICAg
ICAoV2ViQ29yZTo6Z2F1c3NpYW5LZXJuZWwpOgorICAgICAgICAoV2ViQ29yZTo6cHJlcGFyZUZp
bHRlclByb2dyYW0pOgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlckdMOjpkcmF3VGV4
dHVyZSk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0dXJlTWFwcGVyR0w6OmRyYXdGaWx0ZXJlZCk6
CisgICAgICAgIChXZWJDb3JlOjppc0N1c3RvbUZpbHRlcik6CisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJHTC5oOgorICAgICAgICAoVGV4dHVyZU1hcHBl
ckdMKToKKyAgICAgICAgKEJpdG1hcFRleHR1cmVHTCk6CisgICAgICAgIChGaWx0ZXJJbmZvKToK
KyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlckltYWdlQnVm
ZmVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkJpdG1hcFRleHR1cmVJbWFnZUJ1ZmZlcjo6YXBw
bHlGaWx0ZXJzKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1h
cHBlckltYWdlQnVmZmVyLmg6CisgICAgICAgIChCaXRtYXBUZXh0dXJlSW1hZ2VCdWZmZXIpOgor
ICAgICAgICAoV2ViQ29yZTo6Qml0bWFwVGV4dHVyZUdMOjpGaWx0ZXJJbmZvOjpGaWx0ZXJJbmZv
KToKKyAgICAgICAgKFdlYkNvcmU6OkJpdG1hcFRleHR1cmVHTDo6ZmlsdGVySW5mbyk6CisgICAg
ICAgIChXZWJDb3JlOjpCaXRtYXBUZXh0dXJlR0w6OmFwcGx5RmlsdGVycyk6CisgICAgICAgICAg
ICBNb2RpZnkgVGV4dHVyZU1hcHBlckdMIHRvIHJlbWVtYmVyIHRoZSBsYXN0IGZpbHRlciBvcGVy
YXRpb24gYXBwbGllZAorICAgICAgICAgICAgdG8gYSBCaXRtYXBUZXh0dXJlIGFuZCBhcHBseSBp
dCB3aGVuIHRoZSB0ZXh0dXJlIGlzIGNvbXBvc2l0ZWQuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9n
cmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlckxheWVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OlRleHR1cmVNYXBwZXJMYXllcjo6cGFpbnRJbnRvU3VyZmFjZSk6CisgICAgICAgICAgICBTaW1w
bGlmeSB0aGUgY2FsbCB0byBhcHBseUZpbHRlcnMsIHNpbmNlIG5vdyBUZXh0dXJlTWFwcGVyR0wg
aXMgcmVzcG9uc2libGUKKyAgICAgICAgICAgIGZvciBtYWludGFpbmluZyB0aGUgY29udGVudCB0
ZXh0dXJlLgorCisKIDIwMTMtMDQtMjIgIE5vYW0gUm9zZW50aGFsICA8bm9hbUB3ZWJraXQub3Jn
PgogCiAgICAgICAgIFtUZXhtYXBdIERvbid0IHBhaW50IHRvIGFuIGludGVybWVkaWF0ZSBzdXJm
YWNlIHdoZW4gdGhlIHJlc3VsdCBpcyBnb2luZyB0byBiZSBjbGlwcGVkIG91dCBjb21wbGV0ZWx5
LgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1Rl
eHR1cmVNYXBwZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9U
ZXh0dXJlTWFwcGVyLmgKaW5kZXggOWNlMjM5ZTE2YmM5ZWY0MzM1N2JmODgwNWJlZTU1MzQ4YTMy
NTgyOC4uMWJlMGIxYzNmN2FlMWVhZjdmOTgwMmYwYjA5YTcyMWU3NzA3MjVlOCAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXIu
aAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1h
cHBlci5oCkBAIC05NSw3ICs5NSw3IEBAIHB1YmxpYzoKICAgICBpbmxpbmUgYm9vbCBpc09wYXF1
ZSgpIGNvbnN0IHsgcmV0dXJuICEobV9mbGFncyAmIFN1cHBvcnRzQWxwaGEpOyB9CiAKICNpZiBF
TkFCTEUoQ1NTX0ZJTFRFUlMpCi0gICAgdmlydHVhbCBQYXNzUmVmUHRyPEJpdG1hcFRleHR1cmU+
IGFwcGx5RmlsdGVycyhUZXh0dXJlTWFwcGVyKiwgY29uc3QgQml0bWFwVGV4dHVyZSYgY29udGVu
dFRleHR1cmUsIGNvbnN0IEZpbHRlck9wZXJhdGlvbnMmKSB7IHJldHVybiB0aGlzOyB9CisgICAg
dmlydHVhbCBQYXNzUmVmUHRyPEJpdG1hcFRleHR1cmU+IGFwcGx5RmlsdGVycyhUZXh0dXJlTWFw
cGVyKiwgY29uc3QgRmlsdGVyT3BlcmF0aW9ucyYpIHsgcmV0dXJuIHRoaXM7IH0KICNlbmRpZgog
CiBwcm90ZWN0ZWQ6CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy90ZXhtYXAvVGV4dHVyZU1hcHBlckdMLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyR0wuY3BwCmluZGV4IDk0YTNlOTVlYmVmYTc2YzNi
NTYzYmZkMDI5NDFjYWYxMmY3NWUzZTMuLmEyNjc3NWU1ODhhNzNjYTM3NGVmNTFkZDczYWY5OWJm
NTBkZGZkMmIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3Rl
eG1hcC9UZXh0dXJlTWFwcGVyR0wuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyR0wuY3BwCkBAIC0xMzQsNiArMTM0LDcgQEAgcHVi
bGljOgogICAgICAgICAsIHByZXZpb3VzU2Npc3NvclN0YXRlKDApCiAgICAgICAgICwgcHJldmlv
dXNEZXB0aFN0YXRlKDApCiAgICAgICAgICwgc2hhcmVkRGF0YShUZXh0dXJlTWFwcGVyR0xEYXRh
OjpTaGFyZWRHTERhdGE6OmN1cnJlbnRTaGFyZWRHTERhdGEodGhpcy0+Y29udGV4dCkpCisgICAg
ICAgICwgZmlsdGVySW5mbygwKQogICAgIHsgfQogCiAgICAgflRleHR1cmVNYXBwZXJHTERhdGEo
KTsKQEAgLTE1Miw2ICsxNTMsNyBAQCBwdWJsaWM6CiAgICAgUmVmUHRyPFNoYXJlZEdMRGF0YT4g
c2hhcmVkRGF0YTsKICAgICBSZWZQdHI8Qml0bWFwVGV4dHVyZT4gY3VycmVudFN1cmZhY2U7CiAg
ICAgSGFzaE1hcDxjb25zdCB2b2lkKiwgUGxhdGZvcm0zRE9iamVjdD4gdmJvczsKKyAgICBjb25z
dCBCaXRtYXBUZXh0dXJlR0w6OkZpbHRlckluZm8qIGZpbHRlckluZm87CiB9OwogCiBQbGF0Zm9y
bTNET2JqZWN0IFRleHR1cmVNYXBwZXJHTERhdGE6OmdldFN0YXRpY1ZCTyhHQzNEZW51bSB0YXJn
ZXQsIEdDM0RzaXplaXB0ciBzaXplLCBjb25zdCB2b2lkKiBkYXRhKQpAQCAtNDEzLDYgKzQxNSwx
NTcgQEAgdm9pZCBUZXh0dXJlTWFwcGVyR0w6OmRyYXdOdW1iZXIoaW50IG51bWJlciwgY29uc3Qg
Q29sb3ImIGNvbG9yLCBjb25zdCBGbG9hdFBvaW4KICNlbmRpZgogfQogCisjaWYgRU5BQkxFKENT
U19GSUxURVJTKQorCitzdGF0aWMgVGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW06Ok9wdGlvbnMg
b3B0aW9uc0ZvckZpbHRlclR5cGUoRmlsdGVyT3BlcmF0aW9uOjpPcGVyYXRpb25UeXBlIHR5cGUs
IHVuc2lnbmVkIHBhc3MpCit7CisgICAgc3dpdGNoICh0eXBlKSB7CisgICAgY2FzZSBGaWx0ZXJP
cGVyYXRpb246OkdSQVlTQ0FMRToKKyAgICAgICAgcmV0dXJuIFRleHR1cmVNYXBwZXJTaGFkZXJQ
cm9ncmFtOjpUZXh0dXJlIHwgVGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW06OkdyYXlzY2FsZUZp
bHRlcjsKKyAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6U0VQSUE6CisgICAgICAgIHJldHVybiBU
ZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbTo6VGV4dHVyZSB8IFRleHR1cmVNYXBwZXJTaGFkZXJQ
cm9ncmFtOjpTZXBpYUZpbHRlcjsKKyAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6U0FUVVJBVEU6
CisgICAgICAgIHJldHVybiBUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbTo6VGV4dHVyZSB8IFRl
eHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtOjpTYXR1cmF0ZUZpbHRlcjsKKyAgICBjYXNlIEZpbHRl
ck9wZXJhdGlvbjo6SFVFX1JPVEFURToKKyAgICAgICAgcmV0dXJuIFRleHR1cmVNYXBwZXJTaGFk
ZXJQcm9ncmFtOjpUZXh0dXJlIHwgVGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW06Okh1ZVJvdGF0
ZUZpbHRlcjsKKyAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6SU5WRVJUOgorICAgICAgICByZXR1
cm4gVGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW06OlRleHR1cmUgfCBUZXh0dXJlTWFwcGVyU2hh
ZGVyUHJvZ3JhbTo6SW52ZXJ0RmlsdGVyOworICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpCUklH
SFRORVNTOgorICAgICAgICByZXR1cm4gVGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW06OlRleHR1
cmUgfCBUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbTo6QnJpZ2h0bmVzc0ZpbHRlcjsKKyAgICBj
YXNlIEZpbHRlck9wZXJhdGlvbjo6Q09OVFJBU1Q6CisgICAgICAgIHJldHVybiBUZXh0dXJlTWFw
cGVyU2hhZGVyUHJvZ3JhbTo6VGV4dHVyZSB8IFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtOjpD
b250cmFzdEZpbHRlcjsKKyAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6T1BBQ0lUWToKKyAgICAg
ICAgcmV0dXJuIFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtOjpUZXh0dXJlIHwgVGV4dHVyZU1h
cHBlclNoYWRlclByb2dyYW06Ok9wYWNpdHlGaWx0ZXI7CisgICAgY2FzZSBGaWx0ZXJPcGVyYXRp
b246OkJMVVI6CisgICAgICAgIHJldHVybiBUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbTo6Qmx1
ckZpbHRlcjsKKyAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6RFJPUF9TSEFET1c6CisgICAgICAg
IHJldHVybiBUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbTo6QWxwaGFCbHVyCisgICAgICAgICAg
ICB8IChwYXNzID8gVGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW06OkNvbnRlbnRUZXh0dXJlIHwg
VGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW06OlNvbGlkQ29sb3I6IDApOworICAgIGRlZmF1bHQ6
CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICByZXR1cm4gMDsKKyAgICB9
Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBnZXRQYXNzZXNSZXF1aXJlZEZvckZpbHRlcihGaWx0ZXJP
cGVyYXRpb246Ok9wZXJhdGlvblR5cGUgdHlwZSkKK3sKKyAgICBzd2l0Y2ggKHR5cGUpIHsKKyAg
ICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6R1JBWVNDQUxFOgorICAgIGNhc2UgRmlsdGVyT3BlcmF0
aW9uOjpTRVBJQToKKyAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6U0FUVVJBVEU6CisgICAgY2Fz
ZSBGaWx0ZXJPcGVyYXRpb246OkhVRV9ST1RBVEU6CisgICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246
OklOVkVSVDoKKyAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6QlJJR0hUTkVTUzoKKyAgICBjYXNl
IEZpbHRlck9wZXJhdGlvbjo6Q09OVFJBU1Q6CisgICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246Ok9Q
QUNJVFk6CisjaWYgRU5BQkxFKENTU19TSEFERVJTKQorICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9u
OjpDVVNUT006CisgICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246OlZBTElEQVRFRF9DVVNUT006Cisj
ZW5kaWYKKyAgICAgICAgcmV0dXJuIDE7CisgICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246OkJMVVI6
CisgICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246OkRST1BfU0hBRE9XOgorICAgICAgICAvLyBXZSB1
c2UgdHdvLXBhc3NlcyAodmVydGljYWwraG9yaXpvbnRhbCkgZm9yIGJsdXIgYW5kIGRyb3Atc2hh
ZG93LgorICAgICAgICByZXR1cm4gMjsKKyAgICBkZWZhdWx0OgorICAgICAgICByZXR1cm4gMDsK
KyAgICB9Cit9CisKKy8vIENyZWF0ZSBhIG5vcm1hbCBkaXN0cmlidXRpb24gb2YgMjEgdmFsdWVz
IGJldHdlZW4gLTIgYW5kIDIuCitzdGF0aWMgY29uc3QgdW5zaWduZWQgR2F1c3NpYW5LZXJuZWxI
YWxmV2lkdGggPSAxMTsKK3N0YXRpYyBjb25zdCBmbG9hdCBHYXVzc2lhbktlcm5lbFN0ZXAgPSAw
LjI7CisKK3N0YXRpYyBpbmxpbmUgZmxvYXQgZ2F1c3MoZmxvYXQgeCkKK3sKKyAgICByZXR1cm4g
ZXhwKC0oeCAqIHgpIC8gMi4pOworfQorCitzdGF0aWMgZmxvYXQqIGdhdXNzaWFuS2VybmVsKCkK
K3sKKyAgICBzdGF0aWMgYm9vbCBwcmVwYXJlZCA9IGZhbHNlOworICAgIHN0YXRpYyBmbG9hdCBr
ZXJuZWxbR2F1c3NpYW5LZXJuZWxIYWxmV2lkdGhdID0gezAsIH07CisKKyAgICBpZiAocHJlcGFy
ZWQpCisgICAgICAgIHJldHVybiBrZXJuZWw7CisKKyAgICBrZXJuZWxbMF0gPSBnYXVzcygwKTsK
KyAgICBmbG9hdCBzdW0gPSBrZXJuZWxbMF07CisgICAgZm9yICh1bnNpZ25lZCBpID0gMTsgaSA8
IEdhdXNzaWFuS2VybmVsSGFsZldpZHRoOyArK2kpIHsKKyAgICAgICAga2VybmVsW2ldID0gZ2F1
c3MoaSAqIEdhdXNzaWFuS2VybmVsU3RlcCk7CisgICAgICAgIHN1bSArPSAyICoga2VybmVsW2ld
OworICAgIH0KKworICAgIC8vIE5vcm1hbGl6ZSB0aGUga2VybmVsLgorICAgIGZsb2F0IHNjYWxl
ID0gMSAvIHN1bTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgR2F1c3NpYW5LZXJuZWxI
YWxmV2lkdGg7ICsraSkKKyAgICAgICAga2VybmVsW2ldICo9IHNjYWxlOworCisgICAgcHJlcGFy
ZWQgPSB0cnVlOworICAgIHJldHVybiBrZXJuZWw7Cit9CisKK3N0YXRpYyB2b2lkIHByZXBhcmVG
aWx0ZXJQcm9ncmFtKFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtKiBwcm9ncmFtLCBjb25zdCBG
aWx0ZXJPcGVyYXRpb24mIG9wZXJhdGlvbiwgdW5zaWduZWQgcGFzcywgY29uc3QgSW50U2l6ZSYg
c2l6ZSwgR0MzRHVpbnQgY29udGVudFRleHR1cmUpCit7CisgICAgUmVmUHRyPEdyYXBoaWNzQ29u
dGV4dDNEPiBjb250ZXh0ID0gcHJvZ3JhbS0+Y29udGV4dCgpOworICAgIGNvbnRleHQtPnVzZVBy
b2dyYW0ocHJvZ3JhbS0+cHJvZ3JhbUlEKCkpOworCisgICAgc3dpdGNoIChvcGVyYXRpb24uZ2V0
T3BlcmF0aW9uVHlwZSgpKSB7CisgICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246OkdSQVlTQ0FMRToK
KyAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6U0VQSUE6CisgICAgY2FzZSBGaWx0ZXJPcGVyYXRp
b246OlNBVFVSQVRFOgorICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpIVUVfUk9UQVRFOgorICAg
ICAgICBjb250ZXh0LT51bmlmb3JtMWYocHJvZ3JhbS0+ZmlsdGVyQW1vdW50TG9jYXRpb24oKSwg
c3RhdGljX2Nhc3Q8Y29uc3QgQmFzaWNDb2xvck1hdHJpeEZpbHRlck9wZXJhdGlvbiY+KG9wZXJh
dGlvbikuYW1vdW50KCkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEZpbHRlck9wZXJhdGlv
bjo6SU5WRVJUOgorICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpCUklHSFRORVNTOgorICAgIGNh
c2UgRmlsdGVyT3BlcmF0aW9uOjpDT05UUkFTVDoKKyAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6
T1BBQ0lUWToKKyAgICAgICAgY29udGV4dC0+dW5pZm9ybTFmKHByb2dyYW0tPmZpbHRlckFtb3Vu
dExvY2F0aW9uKCksIHN0YXRpY19jYXN0PGNvbnN0IEJhc2ljQ29tcG9uZW50VHJhbnNmZXJGaWx0
ZXJPcGVyYXRpb24mPihvcGVyYXRpb24pLmFtb3VudCgpKTsKKyAgICAgICAgYnJlYWs7CisgICAg
Y2FzZSBGaWx0ZXJPcGVyYXRpb246OkJMVVI6IHsKKyAgICAgICAgY29uc3QgQmx1ckZpbHRlck9w
ZXJhdGlvbiYgYmx1ciA9IHN0YXRpY19jYXN0PGNvbnN0IEJsdXJGaWx0ZXJPcGVyYXRpb24mPihv
cGVyYXRpb24pOworICAgICAgICBGbG9hdFNpemUgcmFkaXVzOworCisgICAgICAgIC8vIEJsdXIg
aXMgZG9uZSBpbiB0d28gcGFzc2VzLCBmaXJzdCBob3Jpem9udGFsbHkgYW5kIHRoZW4gdmVydGlj
YWxseS4gVGhlIHNhbWUgc2hhZGVyIGlzIHVzZWQgZm9yIGJvdGguCisgICAgICAgIGlmIChwYXNz
KQorICAgICAgICAgICAgcmFkaXVzLnNldEhlaWdodChmbG9hdFZhbHVlRm9yTGVuZ3RoKGJsdXIu
c3RkRGV2aWF0aW9uKCksIHNpemUuaGVpZ2h0KCkpIC8gc2l6ZS5oZWlnaHQoKSk7CisgICAgICAg
IGVsc2UKKyAgICAgICAgICAgIHJhZGl1cy5zZXRXaWR0aChmbG9hdFZhbHVlRm9yTGVuZ3RoKGJs
dXIuc3RkRGV2aWF0aW9uKCksIHNpemUud2lkdGgoKSkgLyBzaXplLndpZHRoKCkpOworCisgICAg
ICAgIGNvbnRleHQtPnVuaWZvcm0yZihwcm9ncmFtLT5ibHVyUmFkaXVzTG9jYXRpb24oKSwgcmFk
aXVzLndpZHRoKCksIHJhZGl1cy5oZWlnaHQoKSk7CisgICAgICAgIGNvbnRleHQtPnVuaWZvcm0x
ZnYocHJvZ3JhbS0+Z2F1c3NpYW5LZXJuZWxMb2NhdGlvbigpLCBHYXVzc2lhbktlcm5lbEhhbGZX
aWR0aCwgZ2F1c3NpYW5LZXJuZWwoKSk7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICBjYXNl
IEZpbHRlck9wZXJhdGlvbjo6RFJPUF9TSEFET1c6IHsKKyAgICAgICAgY29uc3QgRHJvcFNoYWRv
d0ZpbHRlck9wZXJhdGlvbiYgc2hhZG93ID0gc3RhdGljX2Nhc3Q8Y29uc3QgRHJvcFNoYWRvd0Zp
bHRlck9wZXJhdGlvbiY+KG9wZXJhdGlvbik7CisgICAgICAgIGNvbnRleHQtPnVuaWZvcm0xZnYo
cHJvZ3JhbS0+Z2F1c3NpYW5LZXJuZWxMb2NhdGlvbigpLCBHYXVzc2lhbktlcm5lbEhhbGZXaWR0
aCwgZ2F1c3NpYW5LZXJuZWwoKSk7CisgICAgICAgIHN3aXRjaCAocGFzcykgeworICAgICAgICBj
YXNlIDA6CisgICAgICAgICAgICAvLyBGaXJzdCBwYXNzOiBob3Jpem9udGFsIGFscGhhIGJsdXIu
CisgICAgICAgICAgICBjb250ZXh0LT51bmlmb3JtMmYocHJvZ3JhbS0+Ymx1clJhZGl1c0xvY2F0
aW9uKCksIHNoYWRvdy5zdGREZXZpYXRpb24oKSAvIGZsb2F0KHNpemUud2lkdGgoKSksIDApOwor
ICAgICAgICAgICAgY29udGV4dC0+dW5pZm9ybTJmKHByb2dyYW0tPnNoYWRvd09mZnNldExvY2F0
aW9uKCksIGZsb2F0KHNoYWRvdy5sb2NhdGlvbigpLngoKSkgLyBmbG9hdChzaXplLndpZHRoKCkp
LCBmbG9hdChzaGFkb3cubG9jYXRpb24oKS55KCkpIC8gZmxvYXQoc2l6ZS5oZWlnaHQoKSkpOwor
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgMToKKyAgICAgICAgICAgIC8vIFNlY29u
ZCBwYXNzOiB3ZSBuZWVkIHRoZSBzaGFkb3cgY29sb3IgYW5kIHRoZSBjb250ZW50IHRleHR1cmUg
Zm9yIGNvbXBvc2l0aW5nLgorICAgICAgICAgICAgZmxvYXQgciwgZywgYiwgYTsKKyAgICAgICAg
ICAgIENvbG9yKHByZW11bHRpcGxpZWRBUkdCRnJvbUNvbG9yKHNoYWRvdy5jb2xvcigpKSkuZ2V0
UkdCQShyLCBnLCBiLCBhKTsKKyAgICAgICAgICAgIGNvbnRleHQtPnVuaWZvcm00Zihwcm9ncmFt
LT5jb2xvckxvY2F0aW9uKCksIHIsIGcsIGIsIGEpOworICAgICAgICAgICAgY29udGV4dC0+dW5p
Zm9ybTJmKHByb2dyYW0tPmJsdXJSYWRpdXNMb2NhdGlvbigpLCAwLCBzaGFkb3cuc3RkRGV2aWF0
aW9uKCkgLyBmbG9hdChzaXplLmhlaWdodCgpKSk7CisgICAgICAgICAgICBjb250ZXh0LT51bmlm
b3JtMmYocHJvZ3JhbS0+c2hhZG93T2Zmc2V0TG9jYXRpb24oKSwgMCwgMCk7CisgICAgICAgICAg
ICBjb250ZXh0LT5hY3RpdmVUZXh0dXJlKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFMSk7Cisg
ICAgICAgICAgICBjb250ZXh0LT5iaW5kVGV4dHVyZShHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVS
RV8yRCwgY29udGVudFRleHR1cmUpOworICAgICAgICAgICAgY29udGV4dC0+dW5pZm9ybTFpKHBy
b2dyYW0tPmNvbnRlbnRUZXh0dXJlTG9jYXRpb24oKSwgMSk7CisgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgfQorICAgICAgICBicmVhazsKKyAgICB9CisgICAgZGVmYXVsdDoKKyAgICAgICAg
YnJlYWs7CisgICAgfQorfQorI2VuZGlmCisKIHZvaWQgVGV4dHVyZU1hcHBlckdMOjpkcmF3VGV4
dHVyZShjb25zdCBCaXRtYXBUZXh0dXJlJiB0ZXh0dXJlLCBjb25zdCBGbG9hdFJlY3QmIHRhcmdl
dFJlY3QsIGNvbnN0IFRyYW5zZm9ybWF0aW9uTWF0cml4JiBtYXRyaXgsIGZsb2F0IG9wYWNpdHks
IHVuc2lnbmVkIGV4cG9zZWRFZGdlcykKIHsKICAgICBpZiAoIXRleHR1cmUuaXNWYWxpZCgpKQpA
QCAtNDIyLDcgKzU3NSwxNSBAQCB2b2lkIFRleHR1cmVNYXBwZXJHTDo6ZHJhd1RleHR1cmUoY29u
c3QgQml0bWFwVGV4dHVyZSYgdGV4dHVyZSwgY29uc3QgRmxvYXRSZWN0JgogICAgICAgICByZXR1
cm47CiAKICAgICBjb25zdCBCaXRtYXBUZXh0dXJlR0wmIHRleHR1cmVHTCA9IHN0YXRpY19jYXN0
PGNvbnN0IEJpdG1hcFRleHR1cmVHTCY+KHRleHR1cmUpOworI2lmIEVOQUJMRShDU1NfRklMVEVS
UykKKyAgICBkYXRhKCkuZmlsdGVySW5mbyA9IHRleHR1cmVHTC5maWx0ZXJJbmZvKCk7CisjZW5k
aWYKKwogICAgIGRyYXdUZXh0dXJlKHRleHR1cmVHTC5pZCgpLCB0ZXh0dXJlR0wuaXNPcGFxdWUo
KSA/IDAgOiBTaG91bGRCbGVuZCwgdGV4dHVyZUdMLnNpemUoKSwgdGFyZ2V0UmVjdCwgbWF0cml4
LCBvcGFjaXR5LCBleHBvc2VkRWRnZXMpOworCisjaWYgRU5BQkxFKENTU19GSUxURVJTKQorICAg
IGRhdGEoKS5maWx0ZXJJbmZvID0gMDsKKyNlbmRpZgogfQogCiB2b2lkIFRleHR1cmVNYXBwZXJH
TDo6ZHJhd1RleHR1cmUoUGxhdGZvcm0zRE9iamVjdCB0ZXh0dXJlLCBGbGFncyBmbGFncywgY29u
c3QgSW50U2l6ZSYgdGV4dHVyZVNpemUsIGNvbnN0IEZsb2F0UmVjdCYgdGFyZ2V0UmVjdCwgY29u
c3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIG1vZGVsVmlld01hdHJpeCwgZmxvYXQgb3BhY2l0eSwg
dW5zaWduZWQgZXhwb3NlZEVkZ2VzKQpAQCAtNDQyLDExICs2MDMsMzAgQEAgdm9pZCBUZXh0dXJl
TWFwcGVyR0w6OmRyYXdUZXh0dXJlKFBsYXRmb3JtM0RPYmplY3QgdGV4dHVyZSwgRmxhZ3MgZmxh
Z3MsIGNvbnN0IEkKICAgICAgICAgZmxhZ3MgfD0gU2hvdWxkQW50aWFsaWFzOwogICAgIH0KIAor
I2lmIEVOQUJMRShDU1NfRklMVEVSUykKKyAgICBSZWZQdHI8RmlsdGVyT3BlcmF0aW9uPiBmaWx0
ZXIgPSBkYXRhKCkuZmlsdGVySW5mbyA/IGRhdGEoKS5maWx0ZXJJbmZvLT5maWx0ZXI6IDA7Cisg
ICAgR0MzRHVpbnQgZmlsdGVyQ29udGVudFRleHR1cmVJRCA9IDA7CisKKyAgICBpZiAoZmlsdGVy
KSB7CisgICAgICAgIGlmIChkYXRhKCkuZmlsdGVySW5mby0+Y29udGVudFRleHR1cmUpCisgICAg
ICAgICAgICBmaWx0ZXJDb250ZW50VGV4dHVyZUlEID0gdG9CaXRtYXBUZXh0dXJlR0woZGF0YSgp
LmZpbHRlckluZm8tPmNvbnRlbnRUZXh0dXJlLmdldCgpKS0+aWQoKTsKKyAgICAgICAgb3B0aW9u
cyB8PSBvcHRpb25zRm9yRmlsdGVyVHlwZShmaWx0ZXItPmdldE9wZXJhdGlvblR5cGUoKSwgZGF0
YSgpLmZpbHRlckluZm8tPnBhc3MpOworICAgICAgICBpZiAoZmlsdGVyLT5hZmZlY3RzT3BhY2l0
eSgpKQorICAgICAgICAgICAgZmxhZ3MgfD0gU2hvdWxkQmxlbmQ7CisgICAgfQorI2VuZGlmCisK
ICAgICBpZiAodXNlQW50aWFsaWFzaW5nIHx8IG9wYWNpdHkgPCAxKQogICAgICAgICBmbGFncyB8
PSBTaG91bGRCbGVuZDsKIAogICAgIFJlZlB0cjxUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbT4g
cHJvZ3JhbTsKICAgICBwcm9ncmFtID0gZGF0YSgpLnNoYXJlZEdMRGF0YSgpLmdldFNoYWRlclBy
b2dyYW0ob3B0aW9ucyk7CisKKyNpZiBFTkFCTEUoQ1NTX0ZJTFRFUlMpCisgICAgaWYgKGZpbHRl
cikKKyAgICAgICAgcHJlcGFyZUZpbHRlclByb2dyYW0ocHJvZ3JhbS5nZXQoKSwgKmZpbHRlci5n
ZXQoKSwgZGF0YSgpLmZpbHRlckluZm8tPnBhc3MsIHRleHR1cmVTaXplLCBmaWx0ZXJDb250ZW50
VGV4dHVyZUlEKTsKKyNlbmRpZgorCiAgICAgZHJhd1RleHR1cmVkUXVhZFdpdGhQcm9ncmFtKHBy
b2dyYW0uZ2V0KCksIHRleHR1cmUsIGZsYWdzLCB0ZXh0dXJlU2l6ZSwgdGFyZ2V0UmVjdCwgbW9k
ZWxWaWV3TWF0cml4LCBvcGFjaXR5KTsKIH0KIApAQCAtNzM3LDE1NiArOTE3LDYgQEAgdm9pZCBC
aXRtYXBUZXh0dXJlR0w6OnVwZGF0ZUNvbnRlbnRzKEltYWdlKiBpbWFnZSwgY29uc3QgSW50UmVj
dCYgdGFyZ2V0UmVjdCwgY28KICAgICB1cGRhdGVDb250ZW50cyhpbWFnZURhdGEsIHRhcmdldFJl
Y3QsIG9mZnNldCwgYnl0ZXNQZXJMaW5lLCB1cGRhdGVDb250ZW50c0ZsYWcpOwogfQogCi0jaWYg
RU5BQkxFKENTU19GSUxURVJTKQotCi1zdGF0aWMgVGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW06
Ok9wdGlvbnMgb3B0aW9uc0ZvckZpbHRlclR5cGUoRmlsdGVyT3BlcmF0aW9uOjpPcGVyYXRpb25U
eXBlIHR5cGUsIHVuc2lnbmVkIHBhc3MpCi17Ci0gICAgc3dpdGNoICh0eXBlKSB7Ci0gICAgY2Fz
ZSBGaWx0ZXJPcGVyYXRpb246OkdSQVlTQ0FMRToKLSAgICAgICAgcmV0dXJuIFRleHR1cmVNYXBw
ZXJTaGFkZXJQcm9ncmFtOjpUZXh0dXJlIHwgVGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW06Okdy
YXlzY2FsZUZpbHRlcjsKLSAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6U0VQSUE6Ci0gICAgICAg
IHJldHVybiBUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbTo6VGV4dHVyZSB8IFRleHR1cmVNYXBw
ZXJTaGFkZXJQcm9ncmFtOjpTZXBpYUZpbHRlcjsKLSAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6
U0FUVVJBVEU6Ci0gICAgICAgIHJldHVybiBUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbTo6VGV4
dHVyZSB8IFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtOjpTYXR1cmF0ZUZpbHRlcjsKLSAgICBj
YXNlIEZpbHRlck9wZXJhdGlvbjo6SFVFX1JPVEFURToKLSAgICAgICAgcmV0dXJuIFRleHR1cmVN
YXBwZXJTaGFkZXJQcm9ncmFtOjpUZXh0dXJlIHwgVGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW06
Okh1ZVJvdGF0ZUZpbHRlcjsKLSAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6SU5WRVJUOgotICAg
ICAgICByZXR1cm4gVGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW06OlRleHR1cmUgfCBUZXh0dXJl
TWFwcGVyU2hhZGVyUHJvZ3JhbTo6SW52ZXJ0RmlsdGVyOwotICAgIGNhc2UgRmlsdGVyT3BlcmF0
aW9uOjpCUklHSFRORVNTOgotICAgICAgICByZXR1cm4gVGV4dHVyZU1hcHBlclNoYWRlclByb2dy
YW06OlRleHR1cmUgfCBUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbTo6QnJpZ2h0bmVzc0ZpbHRl
cjsKLSAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6Q09OVFJBU1Q6Ci0gICAgICAgIHJldHVybiBU
ZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbTo6VGV4dHVyZSB8IFRleHR1cmVNYXBwZXJTaGFkZXJQ
cm9ncmFtOjpDb250cmFzdEZpbHRlcjsKLSAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6T1BBQ0lU
WToKLSAgICAgICAgcmV0dXJuIFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtOjpUZXh0dXJlIHwg
VGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW06Ok9wYWNpdHlGaWx0ZXI7Ci0gICAgY2FzZSBGaWx0
ZXJPcGVyYXRpb246OkJMVVI6Ci0gICAgICAgIHJldHVybiBUZXh0dXJlTWFwcGVyU2hhZGVyUHJv
Z3JhbTo6Qmx1ckZpbHRlcjsKLSAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6RFJPUF9TSEFET1c6
Ci0gICAgICAgIHJldHVybiBUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbTo6QWxwaGFCbHVyCi0g
ICAgICAgICAgICB8IChwYXNzID8gVGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW06OkNvbnRlbnRU
ZXh0dXJlIHwgVGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW06OlNvbGlkQ29sb3I6IDApOwotICAg
IGRlZmF1bHQ6Ci0gICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICByZXR1cm4g
MDsKLSAgICB9Ci19Ci0KLXN0YXRpYyB1bnNpZ25lZCBnZXRQYXNzZXNSZXF1aXJlZEZvckZpbHRl
cihGaWx0ZXJPcGVyYXRpb246Ok9wZXJhdGlvblR5cGUgdHlwZSkKLXsKLSAgICBzd2l0Y2ggKHR5
cGUpIHsKLSAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6R1JBWVNDQUxFOgotICAgIGNhc2UgRmls
dGVyT3BlcmF0aW9uOjpTRVBJQToKLSAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6U0FUVVJBVEU6
Ci0gICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246OkhVRV9ST1RBVEU6Ci0gICAgY2FzZSBGaWx0ZXJP
cGVyYXRpb246OklOVkVSVDoKLSAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6QlJJR0hUTkVTUzoK
LSAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6Q09OVFJBU1Q6Ci0gICAgY2FzZSBGaWx0ZXJPcGVy
YXRpb246Ok9QQUNJVFk6Ci0jaWYgRU5BQkxFKENTU19TSEFERVJTKQotICAgIGNhc2UgRmlsdGVy
T3BlcmF0aW9uOjpDVVNUT006Ci0gICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246OlZBTElEQVRFRF9D
VVNUT006Ci0jZW5kaWYKLSAgICAgICAgcmV0dXJuIDE7Ci0gICAgY2FzZSBGaWx0ZXJPcGVyYXRp
b246OkJMVVI6Ci0gICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246OkRST1BfU0hBRE9XOgotICAgICAg
ICAvLyBXZSB1c2UgdHdvLXBhc3NlcyAodmVydGljYWwraG9yaXpvbnRhbCkgZm9yIGJsdXIgYW5k
IGRyb3Atc2hhZG93LgotICAgICAgICByZXR1cm4gMjsKLSAgICBkZWZhdWx0OgotICAgICAgICBy
ZXR1cm4gMDsKLSAgICB9Ci19Ci0KLS8vIENyZWF0ZSBhIG5vcm1hbCBkaXN0cmlidXRpb24gb2Yg
MjEgdmFsdWVzIGJldHdlZW4gLTIgYW5kIDIuCi1zdGF0aWMgY29uc3QgdW5zaWduZWQgR2F1c3Np
YW5LZXJuZWxIYWxmV2lkdGggPSAxMTsKLXN0YXRpYyBjb25zdCBmbG9hdCBHYXVzc2lhbktlcm5l
bFN0ZXAgPSAwLjI7Ci0KLXN0YXRpYyBpbmxpbmUgZmxvYXQgZ2F1c3MoZmxvYXQgeCkKLXsKLSAg
ICByZXR1cm4gZXhwKC0oeCAqIHgpIC8gMi4pOwotfQotCi1zdGF0aWMgZmxvYXQqIGdhdXNzaWFu
S2VybmVsKCkKLXsKLSAgICBzdGF0aWMgYm9vbCBwcmVwYXJlZCA9IGZhbHNlOwotICAgIHN0YXRp
YyBmbG9hdCBrZXJuZWxbR2F1c3NpYW5LZXJuZWxIYWxmV2lkdGhdID0gezAsIH07Ci0KLSAgICBp
ZiAocHJlcGFyZWQpCi0gICAgICAgIHJldHVybiBrZXJuZWw7Ci0KLSAgICBrZXJuZWxbMF0gPSBn
YXVzcygwKTsKLSAgICBmbG9hdCBzdW0gPSBrZXJuZWxbMF07Ci0gICAgZm9yICh1bnNpZ25lZCBp
ID0gMTsgaSA8IEdhdXNzaWFuS2VybmVsSGFsZldpZHRoOyArK2kpIHsKLSAgICAgICAga2VybmVs
W2ldID0gZ2F1c3MoaSAqIEdhdXNzaWFuS2VybmVsU3RlcCk7Ci0gICAgICAgIHN1bSArPSAyICog
a2VybmVsW2ldOwotICAgIH0KLQotICAgIC8vIE5vcm1hbGl6ZSB0aGUga2VybmVsLgotICAgIGZs
b2F0IHNjYWxlID0gMSAvIHN1bTsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgR2F1c3Np
YW5LZXJuZWxIYWxmV2lkdGg7ICsraSkKLSAgICAgICAga2VybmVsW2ldICo9IHNjYWxlOwotCi0g
ICAgcHJlcGFyZWQgPSB0cnVlOwotICAgIHJldHVybiBrZXJuZWw7Ci19Ci0KLXN0YXRpYyB2b2lk
IHByZXBhcmVGaWx0ZXJQcm9ncmFtKFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtKiBwcm9ncmFt
LCBjb25zdCBGaWx0ZXJPcGVyYXRpb24mIG9wZXJhdGlvbiwgdW5zaWduZWQgcGFzcywgY29uc3Qg
SW50U2l6ZSYgc2l6ZSwgR0MzRHVpbnQgY29udGVudFRleHR1cmUpCi17Ci0gICAgUmVmUHRyPEdy
YXBoaWNzQ29udGV4dDNEPiBjb250ZXh0ID0gcHJvZ3JhbS0+Y29udGV4dCgpOwotICAgIGNvbnRl
eHQtPnVzZVByb2dyYW0ocHJvZ3JhbS0+cHJvZ3JhbUlEKCkpOwotCi0gICAgc3dpdGNoIChvcGVy
YXRpb24uZ2V0T3BlcmF0aW9uVHlwZSgpKSB7Ci0gICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246OkdS
QVlTQ0FMRToKLSAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6U0VQSUE6Ci0gICAgY2FzZSBGaWx0
ZXJPcGVyYXRpb246OlNBVFVSQVRFOgotICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpIVUVfUk9U
QVRFOgotICAgICAgICBjb250ZXh0LT51bmlmb3JtMWYocHJvZ3JhbS0+ZmlsdGVyQW1vdW50TG9j
YXRpb24oKSwgc3RhdGljX2Nhc3Q8Y29uc3QgQmFzaWNDb2xvck1hdHJpeEZpbHRlck9wZXJhdGlv
biY+KG9wZXJhdGlvbikuYW1vdW50KCkpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEZpbHRl
ck9wZXJhdGlvbjo6SU5WRVJUOgotICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpCUklHSFRORVNT
OgotICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpDT05UUkFTVDoKLSAgICBjYXNlIEZpbHRlck9w
ZXJhdGlvbjo6T1BBQ0lUWToKLSAgICAgICAgY29udGV4dC0+dW5pZm9ybTFmKHByb2dyYW0tPmZp
bHRlckFtb3VudExvY2F0aW9uKCksIHN0YXRpY19jYXN0PGNvbnN0IEJhc2ljQ29tcG9uZW50VHJh
bnNmZXJGaWx0ZXJPcGVyYXRpb24mPihvcGVyYXRpb24pLmFtb3VudCgpKTsKLSAgICAgICAgYnJl
YWs7Ci0gICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246OkJMVVI6IHsKLSAgICAgICAgY29uc3QgQmx1
ckZpbHRlck9wZXJhdGlvbiYgYmx1ciA9IHN0YXRpY19jYXN0PGNvbnN0IEJsdXJGaWx0ZXJPcGVy
YXRpb24mPihvcGVyYXRpb24pOwotICAgICAgICBGbG9hdFNpemUgcmFkaXVzOwotCi0gICAgICAg
IC8vIEJsdXIgaXMgZG9uZSBpbiB0d28gcGFzc2VzLCBmaXJzdCBob3Jpem9udGFsbHkgYW5kIHRo
ZW4gdmVydGljYWxseS4gVGhlIHNhbWUgc2hhZGVyIGlzIHVzZWQgZm9yIGJvdGguCi0gICAgICAg
IGlmIChwYXNzKQotICAgICAgICAgICAgcmFkaXVzLnNldEhlaWdodChmbG9hdFZhbHVlRm9yTGVu
Z3RoKGJsdXIuc3RkRGV2aWF0aW9uKCksIHNpemUuaGVpZ2h0KCkpIC8gc2l6ZS5oZWlnaHQoKSk7
Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIHJhZGl1cy5zZXRXaWR0aChmbG9hdFZhbHVlRm9y
TGVuZ3RoKGJsdXIuc3RkRGV2aWF0aW9uKCksIHNpemUud2lkdGgoKSkgLyBzaXplLndpZHRoKCkp
OwotCi0gICAgICAgIGNvbnRleHQtPnVuaWZvcm0yZihwcm9ncmFtLT5ibHVyUmFkaXVzTG9jYXRp
b24oKSwgcmFkaXVzLndpZHRoKCksIHJhZGl1cy5oZWlnaHQoKSk7Ci0gICAgICAgIGNvbnRleHQt
PnVuaWZvcm0xZnYocHJvZ3JhbS0+Z2F1c3NpYW5LZXJuZWxMb2NhdGlvbigpLCBHYXVzc2lhbktl
cm5lbEhhbGZXaWR0aCwgZ2F1c3NpYW5LZXJuZWwoKSk7Ci0gICAgICAgIGJyZWFrOwotICAgIH0K
LSAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6RFJPUF9TSEFET1c6IHsKLSAgICAgICAgY29uc3Qg
RHJvcFNoYWRvd0ZpbHRlck9wZXJhdGlvbiYgc2hhZG93ID0gc3RhdGljX2Nhc3Q8Y29uc3QgRHJv
cFNoYWRvd0ZpbHRlck9wZXJhdGlvbiY+KG9wZXJhdGlvbik7Ci0gICAgICAgIGNvbnRleHQtPnVu
aWZvcm0xZnYocHJvZ3JhbS0+Z2F1c3NpYW5LZXJuZWxMb2NhdGlvbigpLCBHYXVzc2lhbktlcm5l
bEhhbGZXaWR0aCwgZ2F1c3NpYW5LZXJuZWwoKSk7Ci0gICAgICAgIHN3aXRjaCAocGFzcykgewot
ICAgICAgICBjYXNlIDA6Ci0gICAgICAgICAgICAvLyBGaXJzdCBwYXNzOiBob3Jpem9udGFsIGFs
cGhhIGJsdXIuCi0gICAgICAgICAgICBjb250ZXh0LT51bmlmb3JtMmYocHJvZ3JhbS0+Ymx1clJh
ZGl1c0xvY2F0aW9uKCksIHNoYWRvdy5zdGREZXZpYXRpb24oKSAvIGZsb2F0KHNpemUud2lkdGgo
KSksIDApOwotICAgICAgICAgICAgY29udGV4dC0+dW5pZm9ybTJmKHByb2dyYW0tPnNoYWRvd09m
ZnNldExvY2F0aW9uKCksIGZsb2F0KHNoYWRvdy5sb2NhdGlvbigpLngoKSkgLyBmbG9hdChzaXpl
LndpZHRoKCkpLCBmbG9hdChzaGFkb3cubG9jYXRpb24oKS55KCkpIC8gZmxvYXQoc2l6ZS5oZWln
aHQoKSkpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgMToKLSAgICAgICAgICAg
IC8vIFNlY29uZCBwYXNzOiB3ZSBuZWVkIHRoZSBzaGFkb3cgY29sb3IgYW5kIHRoZSBjb250ZW50
IHRleHR1cmUgZm9yIGNvbXBvc2l0aW5nLgotICAgICAgICAgICAgZmxvYXQgciwgZywgYiwgYTsK
LSAgICAgICAgICAgIENvbG9yKHByZW11bHRpcGxpZWRBUkdCRnJvbUNvbG9yKHNoYWRvdy5jb2xv
cigpKSkuZ2V0UkdCQShyLCBnLCBiLCBhKTsKLSAgICAgICAgICAgIGNvbnRleHQtPnVuaWZvcm00
Zihwcm9ncmFtLT5jb2xvckxvY2F0aW9uKCksIHIsIGcsIGIsIGEpOwotICAgICAgICAgICAgY29u
dGV4dC0+dW5pZm9ybTJmKHByb2dyYW0tPmJsdXJSYWRpdXNMb2NhdGlvbigpLCAwLCBzaGFkb3cu
c3RkRGV2aWF0aW9uKCkgLyBmbG9hdChzaXplLmhlaWdodCgpKSk7Ci0gICAgICAgICAgICBjb250
ZXh0LT51bmlmb3JtMmYocHJvZ3JhbS0+c2hhZG93T2Zmc2V0TG9jYXRpb24oKSwgMCwgMCk7Ci0g
ICAgICAgICAgICBjb250ZXh0LT5hY3RpdmVUZXh0dXJlKEdyYXBoaWNzQ29udGV4dDNEOjpURVhU
VVJFMSk7Ci0gICAgICAgICAgICBjb250ZXh0LT5iaW5kVGV4dHVyZShHcmFwaGljc0NvbnRleHQz
RDo6VEVYVFVSRV8yRCwgY29udGVudFRleHR1cmUpOwotICAgICAgICAgICAgY29udGV4dC0+dW5p
Zm9ybTFpKHByb2dyYW0tPmNvbnRlbnRUZXh0dXJlTG9jYXRpb24oKSwgMSk7Ci0gICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBicmVhazsKLSAgICB9Ci0gICAgZGVmYXVsdDoK
LSAgICAgICAgYnJlYWs7Ci0gICAgfQotfQotCiAjaWYgRU5BQkxFKENTU19TSEFERVJTKQogdm9p
ZCBUZXh0dXJlTWFwcGVyR0w6OnJlbW92ZUNhY2hlZEN1c3RvbUZpbHRlclByb2dyYW0oQ3VzdG9t
RmlsdGVyUHJvZ3JhbSogcHJvZ3JhbSkKIHsKQEAgLTk0Niw1MyArOTc2LDc5IEBAIGJvb2wgVGV4
dHVyZU1hcHBlckdMOjpkcmF3VXNpbmdDdXN0b21GaWx0ZXIoQml0bWFwVGV4dHVyZSYgdGFyZ2V0
LCBjb25zdCBCaXRtYXBUCiB9CiAjZW5kaWYKIAotdm9pZCBUZXh0dXJlTWFwcGVyR0w6OmRyYXdG
aWx0ZXJlZChjb25zdCBCaXRtYXBUZXh0dXJlJiBzYW1wbGVyLCBjb25zdCBCaXRtYXBUZXh0dXJl
JiBjb250ZW50VGV4dHVyZSwgY29uc3QgRmlsdGVyT3BlcmF0aW9uJiBmaWx0ZXIsIGludCBwYXNz
KQorI2lmIEVOQUJMRShDU1NfRklMVEVSUykKK3ZvaWQgVGV4dHVyZU1hcHBlckdMOjpkcmF3Rmls
dGVyZWQoY29uc3QgQml0bWFwVGV4dHVyZSYgc2FtcGxlciwgY29uc3QgQml0bWFwVGV4dHVyZSog
Y29udGVudFRleHR1cmUsIGNvbnN0IEZpbHRlck9wZXJhdGlvbiYgZmlsdGVyLCBpbnQgcGFzcykK
IHsKICAgICAvLyBGb3Igc3RhbmRhcmQgZmlsdGVycywgd2UgYWx3YXlzIGRyYXcgdGhlIHdob2xl
IHRleHR1cmUgd2l0aG91dCB0cmFuc2Zvcm1hdGlvbnMuCiAgICAgVGV4dHVyZU1hcHBlclNoYWRl
clByb2dyYW06Ok9wdGlvbnMgb3B0aW9ucyA9IG9wdGlvbnNGb3JGaWx0ZXJUeXBlKGZpbHRlci5n
ZXRPcGVyYXRpb25UeXBlKCksIHBhc3MpOwogICAgIFJlZlB0cjxUZXh0dXJlTWFwcGVyU2hhZGVy
UHJvZ3JhbT4gcHJvZ3JhbSA9IGRhdGEoKS5zaGFyZWRHTERhdGEoKS5nZXRTaGFkZXJQcm9ncmFt
KG9wdGlvbnMpOwogICAgIEFTU0VSVChwcm9ncmFtKTsKIAotICAgIHByZXBhcmVGaWx0ZXJQcm9n
cmFtKHByb2dyYW0uZ2V0KCksIGZpbHRlciwgcGFzcywgc2FtcGxlci5jb250ZW50U2l6ZSgpLCBz
dGF0aWNfY2FzdDxjb25zdCBCaXRtYXBUZXh0dXJlR0wmPihjb250ZW50VGV4dHVyZSkuaWQoKSk7
CisgICAgcHJlcGFyZUZpbHRlclByb2dyYW0ocHJvZ3JhbS5nZXQoKSwgZmlsdGVyLCBwYXNzLCBz
YW1wbGVyLmNvbnRlbnRTaXplKCksIGNvbnRlbnRUZXh0dXJlID8gc3RhdGljX2Nhc3Q8Y29uc3Qg
Qml0bWFwVGV4dHVyZUdMKj4oY29udGVudFRleHR1cmUpLT5pZCgpIDogMCk7CiAgICAgRmxvYXRS
ZWN0IHRhcmdldFJlY3QoSW50UG9pbnQ6Onplcm8oKSwgc2FtcGxlci5jb250ZW50U2l6ZSgpKTsK
ICAgICBkcmF3VGV4dHVyZWRRdWFkV2l0aFByb2dyYW0ocHJvZ3JhbS5nZXQoKSwgc3RhdGljX2Nh
c3Q8Y29uc3QgQml0bWFwVGV4dHVyZUdMJj4oc2FtcGxlcikuaWQoKSwgMCwgSW50U2l6ZSgxLCAx
KSwgdGFyZ2V0UmVjdCwgVHJhbnNmb3JtYXRpb25NYXRyaXgoKSwgMSk7CiB9CiAKLVBhc3NSZWZQ
dHI8Qml0bWFwVGV4dHVyZT4gQml0bWFwVGV4dHVyZUdMOjphcHBseUZpbHRlcnMoVGV4dHVyZU1h
cHBlciogdGV4dHVyZU1hcHBlciwgY29uc3QgQml0bWFwVGV4dHVyZSYgY29udGVudFRleHR1cmUs
IGNvbnN0IEZpbHRlck9wZXJhdGlvbnMmIGZpbHRlcnMpCitzdGF0aWMgYm9vbCBpc0N1c3RvbUZp
bHRlcihGaWx0ZXJPcGVyYXRpb246Ok9wZXJhdGlvblR5cGUgdHlwZSkKK3sKKyNpZiBFTkFCTEUo
Q1NTX1NIQURFUlMpCisgICAgcmV0dXJuIHR5cGUgPT0gRmlsdGVyT3BlcmF0aW9uOjpDVVNUT00g
fHwgdHlwZSA9PSBGaWx0ZXJPcGVyYXRpb246OlZBTElEQVRFRF9DVVNUT007CisjZWxzZQorICAg
IHJldHVybiBmYWxzZTsKKyNlbmRpZgorfQorCitQYXNzUmVmUHRyPEJpdG1hcFRleHR1cmU+IEJp
dG1hcFRleHR1cmVHTDo6YXBwbHlGaWx0ZXJzKFRleHR1cmVNYXBwZXIqIHRleHR1cmVNYXBwZXIs
IGNvbnN0IEZpbHRlck9wZXJhdGlvbnMmIGZpbHRlcnMpCiB7Ci0gICAgVGV4dHVyZU1hcHBlckdM
KiB0ZXh0dXJlTWFwcGVyR0wgPSBzdGF0aWNfY2FzdDxUZXh0dXJlTWFwcGVyR0wqPih0ZXh0dXJl
TWFwcGVyKTsKLSAgICBSZWZQdHI8Qml0bWFwVGV4dHVyZT4gcHJldmlvdXNTdXJmYWNlID0gdGV4
dHVyZU1hcHBlckdMLT5kYXRhKCkuY3VycmVudFN1cmZhY2U7CisgICAgaWYgKGZpbHRlcnMuaXNF
bXB0eSgpKQorICAgICAgICByZXR1cm4gdGhpczsKIAotICAgIFJlZlB0cjxCaXRtYXBUZXh0dXJl
PiBzb3VyY2UgPSB0aGlzOwotICAgIFJlZlB0cjxCaXRtYXBUZXh0dXJlPiB0YXJnZXQgPSB0ZXh0
dXJlTWFwcGVyLT5hY3F1aXJlVGV4dHVyZUZyb21Qb29sKG1fdGV4dHVyZVNpemUpOworICAgIFRl
eHR1cmVNYXBwZXJHTCogdGV4bWFwR0wgPSBzdGF0aWNfY2FzdDxUZXh0dXJlTWFwcGVyR0wqPih0
ZXh0dXJlTWFwcGVyKTsKKyAgICBSZWZQdHI8Qml0bWFwVGV4dHVyZT4gcHJldmlvdXNTdXJmYWNl
ID0gdGV4bWFwR0wtPmRhdGEoKS5jdXJyZW50U3VyZmFjZTsKKyAgICBSZWZQdHI8Qml0bWFwVGV4
dHVyZT4gcmVzdWx0U3VyZmFjZSA9IHRoaXM7CisgICAgUmVmUHRyPEJpdG1hcFRleHR1cmU+IGlu
dGVybWVkaWF0ZVN1cmZhY2U7CisgICAgUmVmUHRyPEJpdG1hcFRleHR1cmU+IHNwYXJlU3VyZmFj
ZTsKKworICAgIG1fZmlsdGVySW5mbyA9IEZpbHRlckluZm8oKTsKIAotICAgIGJvb2wgdXNlQ29u
dGVudFRleHR1cmUgPSB0cnVlOwogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgZmlsdGVycy5z
aXplKCk7ICsraSkgewotICAgICAgICBjb25zdCBGaWx0ZXJPcGVyYXRpb24qIGZpbHRlciA9IGZp
bHRlcnMuYXQoaSk7CisgICAgICAgIFJlZlB0cjxGaWx0ZXJPcGVyYXRpb24+IGZpbHRlciA9IGZp
bHRlcnMub3BlcmF0aW9ucygpW2ldOwogICAgICAgICBBU1NFUlQoZmlsdGVyKTsKIAorICAgICAg
ICBib29sIGN1c3RvbSA9IGlzQ3VzdG9tRmlsdGVyKGZpbHRlci0+Z2V0T3BlcmF0aW9uVHlwZSgp
KTsKKwogICAgICAgICBpbnQgbnVtUGFzc2VzID0gZ2V0UGFzc2VzUmVxdWlyZWRGb3JGaWx0ZXIo
ZmlsdGVyLT5nZXRPcGVyYXRpb25UeXBlKCkpOwogICAgICAgICBmb3IgKGludCBqID0gMDsgaiA8
IG51bVBhc3NlczsgKytqKSB7Ci0gICAgICAgICAgICB0ZXh0dXJlTWFwcGVyR0wtPmJpbmRTdXJm
YWNlKHRhcmdldC5nZXQoKSk7Ci0gICAgICAgICAgICBjb25zdCBCaXRtYXBUZXh0dXJlJiBzb3Vy
Y2VUZXh0dXJlID0gdXNlQ29udGVudFRleHR1cmUgPyBjb250ZW50VGV4dHVyZSA6ICpzb3VyY2U7
CisgICAgICAgICAgICBib29sIGxhc3QgPSAoaSA9PSBmaWx0ZXJzLnNpemUoKSAtIDEpICYmIChq
ID09IG51bVBhc3NlcyAtIDEpOworICAgICAgICAgICAgaWYgKGN1c3RvbSB8fCAhbGFzdCkgewor
ICAgICAgICAgICAgICAgIGlmICghaW50ZXJtZWRpYXRlU3VyZmFjZSkKKyAgICAgICAgICAgICAg
ICAgICAgaW50ZXJtZWRpYXRlU3VyZmFjZSA9IHRleG1hcEdMLT5hY3F1aXJlVGV4dHVyZUZyb21Q
b29sKGNvbnRlbnRTaXplKCkpOworICAgICAgICAgICAgICAgIHRleG1hcEdMLT5iaW5kU3VyZmFj
ZShpbnRlcm1lZGlhdGVTdXJmYWNlLmdldCgpKTsKKyAgICAgICAgICAgIH0KKwogI2lmIEVOQUJM
RShDU1NfU0hBREVSUykKLSAgICAgICAgICAgIGlmIChmaWx0ZXItPmdldE9wZXJhdGlvblR5cGUo
KSA9PSBGaWx0ZXJPcGVyYXRpb246OkNVU1RPTSB8fCBmaWx0ZXItPmdldE9wZXJhdGlvblR5cGUo
KSA9PSBGaWx0ZXJPcGVyYXRpb246OlZBTElEQVRFRF9DVVNUT00pIHsKLSAgICAgICAgICAgICAg
ICBpZiAodGV4dHVyZU1hcHBlckdMLT5kcmF3VXNpbmdDdXN0b21GaWx0ZXIoKnRhcmdldCwgc291
cmNlVGV4dHVyZSwgKmZpbHRlcikpIHsKLSAgICAgICAgICAgICAgICAgICAgLy8gT25seSBzd2Fw
IGlmIHRoZSBkcmF3IHdhcyBzdWNjZXNzZnVsLgotICAgICAgICAgICAgICAgICAgICBzdGQ6OnN3
YXAoc291cmNlLCB0YXJnZXQpOwotICAgICAgICAgICAgICAgICAgICB1c2VDb250ZW50VGV4dHVy
ZSA9IGZhbHNlOwotICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChjdXN0b20pIHsK
KyAgICAgICAgICAgICAgICBpZiAodGV4bWFwR0wtPmRyYXdVc2luZ0N1c3RvbUZpbHRlcigqaW50
ZXJtZWRpYXRlU3VyZmFjZS5nZXQoKSwgKnJlc3VsdFN1cmZhY2UuZ2V0KCksICpmaWx0ZXIpKQor
ICAgICAgICAgICAgICAgICAgICBzdGQ6OnN3YXAocmVzdWx0U3VyZmFjZSwgaW50ZXJtZWRpYXRl
U3VyZmFjZSk7CiAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICB9CiAjZW5k
aWYKLSAgICAgICAgICAgIHRleHR1cmVNYXBwZXJHTC0+ZHJhd0ZpbHRlcmVkKHNvdXJjZVRleHR1
cmUsIGNvbnRlbnRUZXh0dXJlLCAqZmlsdGVyLCBqKTsKLSAgICAgICAgICAgIHN0ZDo6c3dhcChz
b3VyY2UsIHRhcmdldCk7Ci0gICAgICAgICAgICB1c2VDb250ZW50VGV4dHVyZSA9IGZhbHNlOwor
ICAgICAgICAgICAgaWYgKGxhc3QpIHsKKyAgICAgICAgICAgICAgICB0b0JpdG1hcFRleHR1cmVH
TChyZXN1bHRTdXJmYWNlLmdldCgpKS0+bV9maWx0ZXJJbmZvID0gQml0bWFwVGV4dHVyZUdMOjpG
aWx0ZXJJbmZvKGZpbHRlciwgaiwgc3BhcmVTdXJmYWNlKTsKKyAgICAgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgdGV4bWFwR0wtPmRyYXdGaWx0ZXJlZCgq
cmVzdWx0U3VyZmFjZS5nZXQoKSwgc3BhcmVTdXJmYWNlLmdldCgpLCAqZmlsdGVyLCBqKTsKKyAg
ICAgICAgICAgIGlmICghaiAmJiBmaWx0ZXItPmdldE9wZXJhdGlvblR5cGUoKSA9PSBGaWx0ZXJP
cGVyYXRpb246OkRST1BfU0hBRE9XKSB7CisgICAgICAgICAgICAgICAgc3BhcmVTdXJmYWNlID0g
cmVzdWx0U3VyZmFjZTsKKyAgICAgICAgICAgICAgICByZXN1bHRTdXJmYWNlLmNsZWFyKCk7Cisg
ICAgICAgICAgICB9CisgICAgICAgICAgICBzdGQ6OnN3YXAocmVzdWx0U3VyZmFjZSwgaW50ZXJt
ZWRpYXRlU3VyZmFjZSk7CiAgICAgICAgIH0KICAgICB9CiAKLSAgICB0ZXh0dXJlTWFwcGVyR0wt
PmJpbmRTdXJmYWNlKHByZXZpb3VzU3VyZmFjZS5nZXQoKSk7Ci0gICAgcmV0dXJuIHNvdXJjZTsK
KyAgICB0ZXhtYXBHTC0+YmluZFN1cmZhY2UocHJldmlvdXNTdXJmYWNlLmdldCgpKTsKKyAgICBy
ZXR1cm4gcmVzdWx0U3VyZmFjZTsKIH0KICNlbmRpZgogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlckdMLmggYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlckdMLmgKaW5kZXgg
MGZjMDM1ZDI1NmNhNmZkYjIxMjc3ODc1MWQ1OTY5ZThkYzA1NTQ2Ny4uZThlMGI0NDU3NWU5Yjc2
MmU2NTI4ZWM4N2MxMTVkNjBmOWEwMGJkNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJHTC5oCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyR0wuaApAQCAtMjMsNiAr
MjMsNyBAQAogI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKIAogI2luY2x1ZGUgIkN1
c3RvbUZpbHRlclByb2dyYW1JbmZvLmgiCisjaW5jbHVkZSAiRmlsdGVyT3BlcmF0aW9uLmgiCiAj
aW5jbHVkZSAiRmxvYXRRdWFkLmgiCiAjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0M0QuaCIKICNp
bmNsdWRlICJJbnRTaXplLmgiCkBAIC03MCw3ICs3MSw3IEBAIHB1YmxpYzoKICAgICBpbmxpbmUg
R3JhcGhpY3NDb250ZXh0M0QqIGdyYXBoaWNzQ29udGV4dDNEKCkgY29uc3QgeyByZXR1cm4gbV9j
b250ZXh0M0QuZ2V0KCk7IH0KIAogI2lmIEVOQUJMRShDU1NfRklMVEVSUykKLSAgICB2b2lkIGRy
YXdGaWx0ZXJlZChjb25zdCBCaXRtYXBUZXh0dXJlJiBzb3VyY2VUZXh0dXJlLCBjb25zdCBCaXRt
YXBUZXh0dXJlJiBjb250ZW50VGV4dHVyZSwgY29uc3QgRmlsdGVyT3BlcmF0aW9uJiwgaW50IHBh
c3MpOworICAgIHZvaWQgZHJhd0ZpbHRlcmVkKGNvbnN0IEJpdG1hcFRleHR1cmUmIHNvdXJjZVRl
eHR1cmUsIGNvbnN0IEJpdG1hcFRleHR1cmUqIGNvbnRlbnRUZXh0dXJlLCBjb25zdCBGaWx0ZXJP
cGVyYXRpb24mLCBpbnQgcGFzcyk7CiAjZW5kaWYKICNpZiBFTkFCTEUoQ1NTX1NIQURFUlMpCiAg
ICAgYm9vbCBkcmF3VXNpbmdDdXN0b21GaWx0ZXIoQml0bWFwVGV4dHVyZSYgdGFyZ2V0VGV4dHVy
ZSwgY29uc3QgQml0bWFwVGV4dHVyZSYgc291cmNlVGV4dHVyZSwgY29uc3QgRmlsdGVyT3BlcmF0
aW9uJik7CkBAIC0xNjksNyArMTcwLDE5IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIGJvb2wgaXNC
YWNrZWRCeU9wZW5HTCgpIGNvbnN0IHsgcmV0dXJuIHRydWU7IH0KIAogI2lmIEVOQUJMRShDU1Nf
RklMVEVSUykKLSAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8Qml0bWFwVGV4dHVyZT4gYXBwbHlGaWx0
ZXJzKFRleHR1cmVNYXBwZXIqLCBjb25zdCBCaXRtYXBUZXh0dXJlJiBjb250ZW50VGV4dHVyZSwg
Y29uc3QgRmlsdGVyT3BlcmF0aW9ucyYpOworICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxCaXRtYXBU
ZXh0dXJlPiBhcHBseUZpbHRlcnMoVGV4dHVyZU1hcHBlciosIGNvbnN0IEZpbHRlck9wZXJhdGlv
bnMmKSBPVkVSUklERTsKKyAgICBzdHJ1Y3QgRmlsdGVySW5mbyB7CisgICAgICAgIFJlZlB0cjxG
aWx0ZXJPcGVyYXRpb24+IGZpbHRlcjsKKyAgICAgICAgdW5zaWduZWQgcGFzczsKKyAgICAgICAg
UmVmUHRyPEJpdG1hcFRleHR1cmU+IGNvbnRlbnRUZXh0dXJlOworCisgICAgICAgIEZpbHRlcklu
Zm8oUGFzc1JlZlB0cjxGaWx0ZXJPcGVyYXRpb24+IGYgPSAwLCB1bnNpZ25lZCBwID0gMCwgUGFz
c1JlZlB0cjxCaXRtYXBUZXh0dXJlPiB0ID0gMCkKKyAgICAgICAgICAgIDogZmlsdGVyKGYpCisg
ICAgICAgICAgICAsIHBhc3MocCkKKyAgICAgICAgICAgICwgY29udGVudFRleHR1cmUodCkKKyAg
ICAgICAgICAgIHsgfQorICAgIH07CisgICAgY29uc3QgRmlsdGVySW5mbyogZmlsdGVySW5mbygp
IGNvbnN0IHsgcmV0dXJuICZtX2ZpbHRlckluZm87IH0KICNlbmRpZgogCiBwcml2YXRlOgpAQCAt
MTkxLDYgKzIwNCwxMCBAQCBwcml2YXRlOgogICAgIHZvaWQgY2xlYXJJZk5lZWRlZCgpOwogICAg
IHZvaWQgY3JlYXRlRmJvSWZOZWVkZWQoKTsKIAorI2lmIEVOQUJMRShDU1NfRklMVEVSUykKKyAg
ICBGaWx0ZXJJbmZvIG1fZmlsdGVySW5mbzsKKyNlbmRpZgorCiAgICAgZnJpZW5kIGNsYXNzIFRl
eHR1cmVNYXBwZXJHTDsKIH07CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVySW1hZ2VCdWZmZXIuY3BwIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJJbWFnZUJ1ZmZlci5j
cHAKaW5kZXggZDlhMmZmZDQ5ZDk3NzU5ZjJlMDRhNmI4NjY0YmEwM2ZhZmE1OTRlOS4uMDMyNzNi
YTBmZDcxMTE5YmFjYThiYmYwMDBkNTM5OGRiNmRkNzNmZiAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJJbWFnZUJ1ZmZlci5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVN
YXBwZXJJbWFnZUJ1ZmZlci5jcHAKQEAgLTE2Myw3ICsxNjMsNyBAQCB2b2lkIFRleHR1cmVNYXBw
ZXJJbWFnZUJ1ZmZlcjo6ZHJhd051bWJlcihpbnQgLyogbnVtYmVyICovLCBjb25zdCBDb2xvciYs
IGNvbnN0CiB9CiAKICNpZiBFTkFCTEUoQ1NTX0ZJTFRFUlMpCi1QYXNzUmVmUHRyPEJpdG1hcFRl
eHR1cmU+IEJpdG1hcFRleHR1cmVJbWFnZUJ1ZmZlcjo6YXBwbHlGaWx0ZXJzKFRleHR1cmVNYXBw
ZXIqLCBjb25zdCBCaXRtYXBUZXh0dXJlJiwgY29uc3QgRmlsdGVyT3BlcmF0aW9ucyYpCitQYXNz
UmVmUHRyPEJpdG1hcFRleHR1cmU+IEJpdG1hcFRleHR1cmVJbWFnZUJ1ZmZlcjo6YXBwbHlGaWx0
ZXJzKFRleHR1cmVNYXBwZXIqLCBjb25zdCBGaWx0ZXJPcGVyYXRpb25zJikKIHsKICAgICByZXR1
cm4gdGhpczsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L3RleG1hcC9UZXh0dXJlTWFwcGVySW1hZ2VCdWZmZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVySW1hZ2VCdWZmZXIuaAppbmRleCAyM2Ey
ZDY4MTJiYjBiNTk3ZWM3NmE3ZjgzYzliODhkZWMyMTE0ZDhhLi4wNjA3MTNjZTVjYzE3MWNkOGM1
ZTVmN2ZjZTBlMjAwOGJlNzBiNjhkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlckltYWdlQnVmZmVyLmgKKysrIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJJbWFnZUJ1ZmZl
ci5oCkBAIC0zOCw3ICszOCw3IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgdXBkYXRlQ29u
dGVudHMoVGV4dHVyZU1hcHBlciosIEdyYXBoaWNzTGF5ZXIqLCBjb25zdCBJbnRSZWN0JiB0YXJn
ZXQsIGNvbnN0IEludFBvaW50JiBvZmZzZXQsIFVwZGF0ZUNvbnRlbnRzRmxhZyk7CiAgICAgdmly
dHVhbCB2b2lkIHVwZGF0ZUNvbnRlbnRzKGNvbnN0IHZvaWQqLCBjb25zdCBJbnRSZWN0JiB0YXJn
ZXQsIGNvbnN0IEludFBvaW50JiBzb3VyY2VPZmZzZXQsIGludCBieXRlc1BlckxpbmUsIFVwZGF0
ZUNvbnRlbnRzRmxhZyk7CiAjaWYgRU5BQkxFKENTU19GSUxURVJTKQotICAgIFBhc3NSZWZQdHI8
Qml0bWFwVGV4dHVyZT4gYXBwbHlGaWx0ZXJzKFRleHR1cmVNYXBwZXIqLCBjb25zdCBCaXRtYXBU
ZXh0dXJlJiwgY29uc3QgRmlsdGVyT3BlcmF0aW9ucyYpOworICAgIFBhc3NSZWZQdHI8Qml0bWFw
VGV4dHVyZT4gYXBwbHlGaWx0ZXJzKFRleHR1cmVNYXBwZXIqLCBjb25zdCBGaWx0ZXJPcGVyYXRp
b25zJik7CiAjZW5kaWYKIAogcHJpdmF0ZToKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyTGF5ZXIuY3BwIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJMYXllci5jcHAKaW5k
ZXggMzFhMTVhYzhhN2M5Y2JhYjc1NDY5MTI1MTMyZTFhMjIxZmMyNDUyZi4uYjg4MmNmNWMwMjJk
OGU3MmZmOTFjNGQ1Y2MwZjg4NGU3NzU1MTI3NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJMYXllci5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJMYXllci5j
cHAKQEAgLTI1MCwzMSArMjUwLDYgQEAgdm9pZCBUZXh0dXJlTWFwcGVyTGF5ZXI6OnNldEFuaW1h
dGVkRmlsdGVycyhjb25zdCBGaWx0ZXJPcGVyYXRpb25zJiBmaWx0ZXJzKQogewogICAgIG1fY3Vy
cmVudEZpbHRlcnMgPSBmaWx0ZXJzOwogfQotCi1zdGF0aWMgYm9vbCBzaG91bGRLZWVwQ29udGVu
dFRleHR1cmUoY29uc3QgRmlsdGVyT3BlcmF0aW9ucyYgZmlsdGVycykKLXsKLSAgICBmb3IgKHNp
emVfdCBpID0gMDsgaSA8IGZpbHRlcnMuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgc3dpdGNoIChm
aWx0ZXJzLm9wZXJhdGlvbnMoKS5hdChpKS0+Z2V0T3BlcmF0aW9uVHlwZSgpKSB7Ci0gICAgICAg
IC8vIFRoZSBkcm9wLXNoYWRvdyBmaWx0ZXIgcmVxdWlyZXMgdGhlIGNvbnRlbnQgdGV4dHVyZSwg
YmVjYXVzZSBpdCBuZWVkcyB0byBjb21wb3NpdGUgaXQKLSAgICAgICAgLy8gb24gdG9wIG9mIHRo
ZSBibHVycmVkIHNoYWRvdyBjb2xvci4KLSAgICAgICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246OkRS
T1BfU0hBRE9XOgotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIGRlZmF1bHQ6Ci0g
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHJldHVybiBmYWxzZTsK
LX0KLQotc3RhdGljIFBhc3NSZWZQdHI8Qml0bWFwVGV4dHVyZT4gYXBwbHlGaWx0ZXJzKGNvbnN0
IEZpbHRlck9wZXJhdGlvbnMmIGZpbHRlcnMsIFRleHR1cmVNYXBwZXIqIHRleHR1cmVNYXBwZXIs
IEJpdG1hcFRleHR1cmUqIHNvdXJjZSkKLXsKLSAgICBpZiAoIWZpbHRlcnMuc2l6ZSgpKQotICAg
ICAgICByZXR1cm4gc291cmNlOwotCi0gICAgUmVmUHRyPEJpdG1hcFRleHR1cmU+IGZpbHRlclN1
cmZhY2UgPSBzaG91bGRLZWVwQ29udGVudFRleHR1cmUoZmlsdGVycykgPyB0ZXh0dXJlTWFwcGVy
LT5hY3F1aXJlVGV4dHVyZUZyb21Qb29sKHNvdXJjZS0+c2l6ZSgpKSA6IHNvdXJjZTsKLSAgICBy
ZXR1cm4gZmlsdGVyU3VyZmFjZS0+YXBwbHlGaWx0ZXJzKHRleHR1cmVNYXBwZXIsICpzb3VyY2Us
IGZpbHRlcnMpOwotfQogI2VuZGlmCiAKIHN0YXRpYyB2b2lkIHJlc29sdmVPdmVybGFwcyhSZWdp
b24gbmV3UmVnaW9uLCBSZWdpb24mIG92ZXJsYXBSZWdpb24sIFJlZ2lvbiYgbm9uT3ZlcmxhcFJl
Z2lvbikKQEAgLTQwNyw4ICszODIsNyBAQCBQYXNzUmVmUHRyPEJpdG1hcFRleHR1cmU+IFRleHR1
cmVNYXBwZXJMYXllcjo6cGFpbnRJbnRvU3VyZmFjZShjb25zdCBUZXh0dXJlTWFwcAogICAgIGlm
IChtX3N0YXRlLm1hc2tMYXllcikKICAgICAgICAgbV9zdGF0ZS5tYXNrTGF5ZXItPmFwcGx5TWFz
ayhvcHRpb25zKTsKICNpZiBFTkFCTEUoQ1NTX0ZJTFRFUlMpCi0gICAgaWYgKCFtX2N1cnJlbnRG
aWx0ZXJzLmlzRW1wdHkoKSkKLSAgICAgICAgc3VyZmFjZSA9IGFwcGx5RmlsdGVycyhtX2N1cnJl
bnRGaWx0ZXJzLCBvcHRpb25zLnRleHR1cmVNYXBwZXIsIHN1cmZhY2UuZ2V0KCkpOworICAgIHN1
cmZhY2UgPSBzdXJmYWNlLT5hcHBseUZpbHRlcnMob3B0aW9ucy50ZXh0dXJlTWFwcGVyLCBtX2N1
cnJlbnRGaWx0ZXJzKTsKICNlbmRpZgogICAgIG9wdGlvbnMudGV4dHVyZU1hcHBlci0+YmluZFN1
cmZhY2Uoc3VyZmFjZS5nZXQoKSk7CiAgICAgcmV0dXJuIHN1cmZhY2U7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>199808</attachid>
            <date>2013-04-26 02:43:52 -0700</date>
            <delta_ts>2013-04-30 06:46:51 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-115224-20130426114311.patch</filename>
            <type>text/plain</type>
            <size>30354</size>
            <attacher name="Noam Rosenthal">noam</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTQ4OTQ5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYTZmODc1OTMxOGUxYjA2
NzNjOGI3YjcxMjcxMDA5Y2Q5OTE0YTljYi4uY2FlNWQ5M2RkZDYwYmEzYmY5ZDNiZWJhOTM1Y2Nj
MWE4ODc1MGRjZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDU0IEBACisyMDEzLTA0LTI1ICBOb2Ft
IFJvc2VudGhhbCAgPG5vYW1Ad2Via2l0Lm9yZz4KKworICAgICAgICBbVGV4bWFwXSBVc2UgZmV3
ZXIgaW50ZXJtZWRpYXRlIHN1cmZhY2VzIHdoZW4gY29tcG9zaXRpbmcgZmlsdGVycworICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTE1MjI0CisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVW50aWwgbm93LCB3aGVu
IHJlbmRlcmluZyBDU1MgZmlsdGVycywgdGhlIGZpbHRlcnMgd2VyZSBhcHBsaWVkIHRvIHRoZSB0
ZXh0dXJlCisgICAgICAgIGFuZCB0aGVuIHRoZSByZXN1bHRpbmcgdGV4dHVyZSB3b3VsZCBiZSBj
b21wb3NpdGVkIHRvIHRoZSB0YXJnZXQgc3VyZmFjZSB3aXRoCisgICAgICAgIGl0cyB0cmFuc2Zv
cm0vb3BhY2l0eS4KKyAgICAgICAgVGhpcyByZXF1aXJlcyBhdCBsZWFzdCB0d28gaW50ZXJtZWRp
YXRlIHN1cmZhY2UgcGFzc2VzIGZvciBldmVyeSBmaWx0ZXJlZCBsYXllci4KKworICAgICAgICBU
aGlzIHBhdGNoIG1ha2VzIGl0IHNvIHRoYXQgdGhlIGxhc3QgZmlsdGVyIHBhc3MgaXMgYXBwbGll
ZCB0b2dldGhlciB3aXRoIHRoZSAKKyAgICAgICAgcmVzdWx0aW5nIHN1cmZhY2UncyBvcGFjaXR5
IGFuZCB0cmFuc2Zvcm0sIGR1cmluZyBjb21wb3NpdGlvbi4KKworICAgICAgICBUZXN0ZWQgYnkg
Y3NzMy9maWx0ZXJzIHRlc3RzLCB3aGljaG4gbm93IHNjcm9sbC96b29tIGEgbG90IGZhc3Rlci4K
KworICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyLmg6Cisg
ICAgICAgIChXZWJDb3JlOjpCaXRtYXBUZXh0dXJlOjphcHBseUZpbHRlcnMpOgorICAgICAgICAq
IHBsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyR0wuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6VGV4dHVyZU1hcHBlckdMRGF0YTo6VGV4dHVyZU1hcHBlckdMRGF0YSk6CisgICAg
ICAgIChUZXh0dXJlTWFwcGVyR0xEYXRhKToKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAo
V2ViQ29yZTo6b3B0aW9uc0ZvckZpbHRlclR5cGUpOgorICAgICAgICAoV2ViQ29yZTo6Z2V0UGFz
c2VzUmVxdWlyZWRGb3JGaWx0ZXIpOgorICAgICAgICAoV2ViQ29yZTo6Z2F1c3MpOgorICAgICAg
ICAoV2ViQ29yZTo6Z2F1c3NpYW5LZXJuZWwpOgorICAgICAgICAoV2ViQ29yZTo6cHJlcGFyZUZp
bHRlclByb2dyYW0pOgorICAgICAgICAoV2ViQ29yZTo6VGV4dHVyZU1hcHBlckdMOjpkcmF3VGV4
dHVyZSk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0dXJlTWFwcGVyR0w6OmRyYXdGaWx0ZXJlZCk6
CisgICAgICAgIChXZWJDb3JlOjppc0N1c3RvbUZpbHRlcik6CisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJHTC5oOgorICAgICAgICAoVGV4dHVyZU1hcHBl
ckdMKToKKyAgICAgICAgKEJpdG1hcFRleHR1cmVHTCk6CisgICAgICAgIChGaWx0ZXJJbmZvKToK
KyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlckltYWdlQnVm
ZmVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkJpdG1hcFRleHR1cmVJbWFnZUJ1ZmZlcjo6YXBw
bHlGaWx0ZXJzKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1h
cHBlckltYWdlQnVmZmVyLmg6CisgICAgICAgIChCaXRtYXBUZXh0dXJlSW1hZ2VCdWZmZXIpOgor
ICAgICAgICAoV2ViQ29yZTo6Qml0bWFwVGV4dHVyZUdMOjpGaWx0ZXJJbmZvOjpGaWx0ZXJJbmZv
KToKKyAgICAgICAgKFdlYkNvcmU6OkJpdG1hcFRleHR1cmVHTDo6ZmlsdGVySW5mbyk6CisgICAg
ICAgIChXZWJDb3JlOjpCaXRtYXBUZXh0dXJlR0w6OmFwcGx5RmlsdGVycyk6CisgICAgICAgICAg
ICBNb2RpZnkgVGV4dHVyZU1hcHBlckdMIHRvIHJlbWVtYmVyIHRoZSBsYXN0IGZpbHRlciBvcGVy
YXRpb24gYXBwbGllZAorICAgICAgICAgICAgdG8gYSBCaXRtYXBUZXh0dXJlIGFuZCBhcHBseSBp
dCB3aGVuIHRoZSB0ZXh0dXJlIGlzIGNvbXBvc2l0ZWQuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9n
cmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlckxheWVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OlRleHR1cmVNYXBwZXJMYXllcjo6cGFpbnRJbnRvU3VyZmFjZSk6CisgICAgICAgICAgICBTaW1w
bGlmeSB0aGUgY2FsbCB0byBhcHBseUZpbHRlcnMsIHNpbmNlIG5vdyBUZXh0dXJlTWFwcGVyR0wg
aXMgcmVzcG9uc2libGUKKyAgICAgICAgICAgIGZvciBtYWludGFpbmluZyB0aGUgY29udGVudCB0
ZXh0dXJlLgorCisKIDIwMTMtMDQtMjIgIE5vYW0gUm9zZW50aGFsICA8bm9hbUB3ZWJraXQub3Jn
PgogCiAgICAgICAgIFtUZXhtYXBdIERvbid0IHBhaW50IHRvIGFuIGludGVybWVkaWF0ZSBzdXJm
YWNlIHdoZW4gdGhlIHJlc3VsdCBpcyBnb2luZyB0byBiZSBjbGlwcGVkIG91dCBjb21wbGV0ZWx5
LgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1Rl
eHR1cmVNYXBwZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9U
ZXh0dXJlTWFwcGVyLmgKaW5kZXggOWNlMjM5ZTE2YmM5ZWY0MzM1N2JmODgwNWJlZTU1MzQ4YTMy
NTgyOC4uMWJlMGIxYzNmN2FlMWVhZjdmOTgwMmYwYjA5YTcyMWU3NzA3MjVlOCAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXIu
aAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1h
cHBlci5oCkBAIC05NSw3ICs5NSw3IEBAIHB1YmxpYzoKICAgICBpbmxpbmUgYm9vbCBpc09wYXF1
ZSgpIGNvbnN0IHsgcmV0dXJuICEobV9mbGFncyAmIFN1cHBvcnRzQWxwaGEpOyB9CiAKICNpZiBF
TkFCTEUoQ1NTX0ZJTFRFUlMpCi0gICAgdmlydHVhbCBQYXNzUmVmUHRyPEJpdG1hcFRleHR1cmU+
IGFwcGx5RmlsdGVycyhUZXh0dXJlTWFwcGVyKiwgY29uc3QgQml0bWFwVGV4dHVyZSYgY29udGVu
dFRleHR1cmUsIGNvbnN0IEZpbHRlck9wZXJhdGlvbnMmKSB7IHJldHVybiB0aGlzOyB9CisgICAg
dmlydHVhbCBQYXNzUmVmUHRyPEJpdG1hcFRleHR1cmU+IGFwcGx5RmlsdGVycyhUZXh0dXJlTWFw
cGVyKiwgY29uc3QgRmlsdGVyT3BlcmF0aW9ucyYpIHsgcmV0dXJuIHRoaXM7IH0KICNlbmRpZgog
CiBwcm90ZWN0ZWQ6CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy90ZXhtYXAvVGV4dHVyZU1hcHBlckdMLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyR0wuY3BwCmluZGV4IDk0YTNlOTVlYmVmYTc2YzNi
NTYzYmZkMDI5NDFjYWYxMmY3NWUzZTMuLjZmZGM0OWQ3MTY3OTU5M2Y0ODEyOTdkYmUwNTY5MTY5
MmNjODdmNDkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3Rl
eG1hcC9UZXh0dXJlTWFwcGVyR0wuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyR0wuY3BwCkBAIC0zNSw2ICszNSw3IEBACiAjaW5j
bHVkZSA8d3RmL1Bhc3NPd25BcnJheVB0ci5oPgogI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+
CiAjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KKyNpbmNsdWRlIDx3dGYvVGVtcG9yYXJ5Q2hh
bmdlLmg+CiAKICNpZiBQTEFURk9STShRVCkKICNpbmNsdWRlICJOYXRpdmVJbWFnZVF0LmgiCkBA
IC0xMzQsNiArMTM1LDkgQEAgcHVibGljOgogICAgICAgICAsIHByZXZpb3VzU2Npc3NvclN0YXRl
KDApCiAgICAgICAgICwgcHJldmlvdXNEZXB0aFN0YXRlKDApCiAgICAgICAgICwgc2hhcmVkRGF0
YShUZXh0dXJlTWFwcGVyR0xEYXRhOjpTaGFyZWRHTERhdGE6OmN1cnJlbnRTaGFyZWRHTERhdGEo
dGhpcy0+Y29udGV4dCkpCisjaWYgRU5BQkxFKENTU19GSUxURVJTKQorICAgICAgICAsIGZpbHRl
ckluZm8oMCkKKyNlbmRpZgogICAgIHsgfQogCiAgICAgflRleHR1cmVNYXBwZXJHTERhdGEoKTsK
QEAgLTE1Miw2ICsxNTYsOSBAQCBwdWJsaWM6CiAgICAgUmVmUHRyPFNoYXJlZEdMRGF0YT4gc2hh
cmVkRGF0YTsKICAgICBSZWZQdHI8Qml0bWFwVGV4dHVyZT4gY3VycmVudFN1cmZhY2U7CiAgICAg
SGFzaE1hcDxjb25zdCB2b2lkKiwgUGxhdGZvcm0zRE9iamVjdD4gdmJvczsKKyNpZiBFTkFCTEUo
Q1NTX0ZJTFRFUlMpCisgICAgY29uc3QgQml0bWFwVGV4dHVyZUdMOjpGaWx0ZXJJbmZvKiBmaWx0
ZXJJbmZvOworI2VuZGlmCiB9OwogCiBQbGF0Zm9ybTNET2JqZWN0IFRleHR1cmVNYXBwZXJHTERh
dGE6OmdldFN0YXRpY1ZCTyhHQzNEZW51bSB0YXJnZXQsIEdDM0RzaXplaXB0ciBzaXplLCBjb25z
dCB2b2lkKiBkYXRhKQpAQCAtNDEzLDYgKzQyMCwxNTcgQEAgdm9pZCBUZXh0dXJlTWFwcGVyR0w6
OmRyYXdOdW1iZXIoaW50IG51bWJlciwgY29uc3QgQ29sb3ImIGNvbG9yLCBjb25zdCBGbG9hdFBv
aW4KICNlbmRpZgogfQogCisjaWYgRU5BQkxFKENTU19GSUxURVJTKQorCitzdGF0aWMgVGV4dHVy
ZU1hcHBlclNoYWRlclByb2dyYW06Ok9wdGlvbnMgb3B0aW9uc0ZvckZpbHRlclR5cGUoRmlsdGVy
T3BlcmF0aW9uOjpPcGVyYXRpb25UeXBlIHR5cGUsIHVuc2lnbmVkIHBhc3MpCit7CisgICAgc3dp
dGNoICh0eXBlKSB7CisgICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246OkdSQVlTQ0FMRToKKyAgICAg
ICAgcmV0dXJuIFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtOjpUZXh0dXJlIHwgVGV4dHVyZU1h
cHBlclNoYWRlclByb2dyYW06OkdyYXlzY2FsZUZpbHRlcjsKKyAgICBjYXNlIEZpbHRlck9wZXJh
dGlvbjo6U0VQSUE6CisgICAgICAgIHJldHVybiBUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbTo6
VGV4dHVyZSB8IFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtOjpTZXBpYUZpbHRlcjsKKyAgICBj
YXNlIEZpbHRlck9wZXJhdGlvbjo6U0FUVVJBVEU6CisgICAgICAgIHJldHVybiBUZXh0dXJlTWFw
cGVyU2hhZGVyUHJvZ3JhbTo6VGV4dHVyZSB8IFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtOjpT
YXR1cmF0ZUZpbHRlcjsKKyAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6SFVFX1JPVEFURToKKyAg
ICAgICAgcmV0dXJuIFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtOjpUZXh0dXJlIHwgVGV4dHVy
ZU1hcHBlclNoYWRlclByb2dyYW06Okh1ZVJvdGF0ZUZpbHRlcjsKKyAgICBjYXNlIEZpbHRlck9w
ZXJhdGlvbjo6SU5WRVJUOgorICAgICAgICByZXR1cm4gVGV4dHVyZU1hcHBlclNoYWRlclByb2dy
YW06OlRleHR1cmUgfCBUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbTo6SW52ZXJ0RmlsdGVyOwor
ICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpCUklHSFRORVNTOgorICAgICAgICByZXR1cm4gVGV4
dHVyZU1hcHBlclNoYWRlclByb2dyYW06OlRleHR1cmUgfCBUZXh0dXJlTWFwcGVyU2hhZGVyUHJv
Z3JhbTo6QnJpZ2h0bmVzc0ZpbHRlcjsKKyAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6Q09OVFJB
U1Q6CisgICAgICAgIHJldHVybiBUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbTo6VGV4dHVyZSB8
IFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtOjpDb250cmFzdEZpbHRlcjsKKyAgICBjYXNlIEZp
bHRlck9wZXJhdGlvbjo6T1BBQ0lUWToKKyAgICAgICAgcmV0dXJuIFRleHR1cmVNYXBwZXJTaGFk
ZXJQcm9ncmFtOjpUZXh0dXJlIHwgVGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW06Ok9wYWNpdHlG
aWx0ZXI7CisgICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246OkJMVVI6CisgICAgICAgIHJldHVybiBU
ZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbTo6Qmx1ckZpbHRlcjsKKyAgICBjYXNlIEZpbHRlck9w
ZXJhdGlvbjo6RFJPUF9TSEFET1c6CisgICAgICAgIHJldHVybiBUZXh0dXJlTWFwcGVyU2hhZGVy
UHJvZ3JhbTo6QWxwaGFCbHVyCisgICAgICAgICAgICB8IChwYXNzID8gVGV4dHVyZU1hcHBlclNo
YWRlclByb2dyYW06OkNvbnRlbnRUZXh0dXJlIHwgVGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW06
OlNvbGlkQ29sb3I6IDApOworICAgIGRlZmF1bHQ6CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hF
RCgpOworICAgICAgICByZXR1cm4gMDsKKyAgICB9Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBnZXRQ
YXNzZXNSZXF1aXJlZEZvckZpbHRlcihGaWx0ZXJPcGVyYXRpb246Ok9wZXJhdGlvblR5cGUgdHlw
ZSkKK3sKKyAgICBzd2l0Y2ggKHR5cGUpIHsKKyAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6R1JB
WVNDQUxFOgorICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpTRVBJQToKKyAgICBjYXNlIEZpbHRl
ck9wZXJhdGlvbjo6U0FUVVJBVEU6CisgICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246OkhVRV9ST1RB
VEU6CisgICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246OklOVkVSVDoKKyAgICBjYXNlIEZpbHRlck9w
ZXJhdGlvbjo6QlJJR0hUTkVTUzoKKyAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6Q09OVFJBU1Q6
CisgICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246Ok9QQUNJVFk6CisjaWYgRU5BQkxFKENTU19TSEFE
RVJTKQorICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpDVVNUT006CisgICAgY2FzZSBGaWx0ZXJP
cGVyYXRpb246OlZBTElEQVRFRF9DVVNUT006CisjZW5kaWYKKyAgICAgICAgcmV0dXJuIDE7Cisg
ICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246OkJMVVI6CisgICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246
OkRST1BfU0hBRE9XOgorICAgICAgICAvLyBXZSB1c2UgdHdvLXBhc3NlcyAodmVydGljYWwraG9y
aXpvbnRhbCkgZm9yIGJsdXIgYW5kIGRyb3Atc2hhZG93LgorICAgICAgICByZXR1cm4gMjsKKyAg
ICBkZWZhdWx0OgorICAgICAgICByZXR1cm4gMDsKKyAgICB9Cit9CisKKy8vIENyZWF0ZSBhIG5v
cm1hbCBkaXN0cmlidXRpb24gb2YgMjEgdmFsdWVzIGJldHdlZW4gLTIgYW5kIDIuCitzdGF0aWMg
Y29uc3QgdW5zaWduZWQgR2F1c3NpYW5LZXJuZWxIYWxmV2lkdGggPSAxMTsKK3N0YXRpYyBjb25z
dCBmbG9hdCBHYXVzc2lhbktlcm5lbFN0ZXAgPSAwLjI7CisKK3N0YXRpYyBpbmxpbmUgZmxvYXQg
Z2F1c3MoZmxvYXQgeCkKK3sKKyAgICByZXR1cm4gZXhwKC0oeCAqIHgpIC8gMi4pOworfQorCitz
dGF0aWMgZmxvYXQqIGdhdXNzaWFuS2VybmVsKCkKK3sKKyAgICBzdGF0aWMgYm9vbCBwcmVwYXJl
ZCA9IGZhbHNlOworICAgIHN0YXRpYyBmbG9hdCBrZXJuZWxbR2F1c3NpYW5LZXJuZWxIYWxmV2lk
dGhdID0gezAsIH07CisKKyAgICBpZiAocHJlcGFyZWQpCisgICAgICAgIHJldHVybiBrZXJuZWw7
CisKKyAgICBrZXJuZWxbMF0gPSBnYXVzcygwKTsKKyAgICBmbG9hdCBzdW0gPSBrZXJuZWxbMF07
CisgICAgZm9yICh1bnNpZ25lZCBpID0gMTsgaSA8IEdhdXNzaWFuS2VybmVsSGFsZldpZHRoOyAr
K2kpIHsKKyAgICAgICAga2VybmVsW2ldID0gZ2F1c3MoaSAqIEdhdXNzaWFuS2VybmVsU3RlcCk7
CisgICAgICAgIHN1bSArPSAyICoga2VybmVsW2ldOworICAgIH0KKworICAgIC8vIE5vcm1hbGl6
ZSB0aGUga2VybmVsLgorICAgIGZsb2F0IHNjYWxlID0gMSAvIHN1bTsKKyAgICBmb3IgKHVuc2ln
bmVkIGkgPSAwOyBpIDwgR2F1c3NpYW5LZXJuZWxIYWxmV2lkdGg7ICsraSkKKyAgICAgICAga2Vy
bmVsW2ldICo9IHNjYWxlOworCisgICAgcHJlcGFyZWQgPSB0cnVlOworICAgIHJldHVybiBrZXJu
ZWw7Cit9CisKK3N0YXRpYyB2b2lkIHByZXBhcmVGaWx0ZXJQcm9ncmFtKFRleHR1cmVNYXBwZXJT
aGFkZXJQcm9ncmFtKiBwcm9ncmFtLCBjb25zdCBGaWx0ZXJPcGVyYXRpb24mIG9wZXJhdGlvbiwg
dW5zaWduZWQgcGFzcywgY29uc3QgSW50U2l6ZSYgc2l6ZSwgR0MzRHVpbnQgY29udGVudFRleHR1
cmUpCit7CisgICAgUmVmUHRyPEdyYXBoaWNzQ29udGV4dDNEPiBjb250ZXh0ID0gcHJvZ3JhbS0+
Y29udGV4dCgpOworICAgIGNvbnRleHQtPnVzZVByb2dyYW0ocHJvZ3JhbS0+cHJvZ3JhbUlEKCkp
OworCisgICAgc3dpdGNoIChvcGVyYXRpb24uZ2V0T3BlcmF0aW9uVHlwZSgpKSB7CisgICAgY2Fz
ZSBGaWx0ZXJPcGVyYXRpb246OkdSQVlTQ0FMRToKKyAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6
U0VQSUE6CisgICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246OlNBVFVSQVRFOgorICAgIGNhc2UgRmls
dGVyT3BlcmF0aW9uOjpIVUVfUk9UQVRFOgorICAgICAgICBjb250ZXh0LT51bmlmb3JtMWYocHJv
Z3JhbS0+ZmlsdGVyQW1vdW50TG9jYXRpb24oKSwgc3RhdGljX2Nhc3Q8Y29uc3QgQmFzaWNDb2xv
ck1hdHJpeEZpbHRlck9wZXJhdGlvbiY+KG9wZXJhdGlvbikuYW1vdW50KCkpOworICAgICAgICBi
cmVhazsKKyAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6SU5WRVJUOgorICAgIGNhc2UgRmlsdGVy
T3BlcmF0aW9uOjpCUklHSFRORVNTOgorICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpDT05UUkFT
VDoKKyAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6T1BBQ0lUWToKKyAgICAgICAgY29udGV4dC0+
dW5pZm9ybTFmKHByb2dyYW0tPmZpbHRlckFtb3VudExvY2F0aW9uKCksIHN0YXRpY19jYXN0PGNv
bnN0IEJhc2ljQ29tcG9uZW50VHJhbnNmZXJGaWx0ZXJPcGVyYXRpb24mPihvcGVyYXRpb24pLmFt
b3VudCgpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246OkJMVVI6
IHsKKyAgICAgICAgY29uc3QgQmx1ckZpbHRlck9wZXJhdGlvbiYgYmx1ciA9IHN0YXRpY19jYXN0
PGNvbnN0IEJsdXJGaWx0ZXJPcGVyYXRpb24mPihvcGVyYXRpb24pOworICAgICAgICBGbG9hdFNp
emUgcmFkaXVzOworCisgICAgICAgIC8vIEJsdXIgaXMgZG9uZSBpbiB0d28gcGFzc2VzLCBmaXJz
dCBob3Jpem9udGFsbHkgYW5kIHRoZW4gdmVydGljYWxseS4gVGhlIHNhbWUgc2hhZGVyIGlzIHVz
ZWQgZm9yIGJvdGguCisgICAgICAgIGlmIChwYXNzKQorICAgICAgICAgICAgcmFkaXVzLnNldEhl
aWdodChmbG9hdFZhbHVlRm9yTGVuZ3RoKGJsdXIuc3RkRGV2aWF0aW9uKCksIHNpemUuaGVpZ2h0
KCkpIC8gc2l6ZS5oZWlnaHQoKSk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHJhZGl1cy5z
ZXRXaWR0aChmbG9hdFZhbHVlRm9yTGVuZ3RoKGJsdXIuc3RkRGV2aWF0aW9uKCksIHNpemUud2lk
dGgoKSkgLyBzaXplLndpZHRoKCkpOworCisgICAgICAgIGNvbnRleHQtPnVuaWZvcm0yZihwcm9n
cmFtLT5ibHVyUmFkaXVzTG9jYXRpb24oKSwgcmFkaXVzLndpZHRoKCksIHJhZGl1cy5oZWlnaHQo
KSk7CisgICAgICAgIGNvbnRleHQtPnVuaWZvcm0xZnYocHJvZ3JhbS0+Z2F1c3NpYW5LZXJuZWxM
b2NhdGlvbigpLCBHYXVzc2lhbktlcm5lbEhhbGZXaWR0aCwgZ2F1c3NpYW5LZXJuZWwoKSk7Cisg
ICAgICAgIGJyZWFrOworICAgIH0KKyAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6RFJPUF9TSEFE
T1c6IHsKKyAgICAgICAgY29uc3QgRHJvcFNoYWRvd0ZpbHRlck9wZXJhdGlvbiYgc2hhZG93ID0g
c3RhdGljX2Nhc3Q8Y29uc3QgRHJvcFNoYWRvd0ZpbHRlck9wZXJhdGlvbiY+KG9wZXJhdGlvbik7
CisgICAgICAgIGNvbnRleHQtPnVuaWZvcm0xZnYocHJvZ3JhbS0+Z2F1c3NpYW5LZXJuZWxMb2Nh
dGlvbigpLCBHYXVzc2lhbktlcm5lbEhhbGZXaWR0aCwgZ2F1c3NpYW5LZXJuZWwoKSk7CisgICAg
ICAgIHN3aXRjaCAocGFzcykgeworICAgICAgICBjYXNlIDA6CisgICAgICAgICAgICAvLyBGaXJz
dCBwYXNzOiBob3Jpem9udGFsIGFscGhhIGJsdXIuCisgICAgICAgICAgICBjb250ZXh0LT51bmlm
b3JtMmYocHJvZ3JhbS0+Ymx1clJhZGl1c0xvY2F0aW9uKCksIHNoYWRvdy5zdGREZXZpYXRpb24o
KSAvIGZsb2F0KHNpemUud2lkdGgoKSksIDApOworICAgICAgICAgICAgY29udGV4dC0+dW5pZm9y
bTJmKHByb2dyYW0tPnNoYWRvd09mZnNldExvY2F0aW9uKCksIGZsb2F0KHNoYWRvdy5sb2NhdGlv
bigpLngoKSkgLyBmbG9hdChzaXplLndpZHRoKCkpLCBmbG9hdChzaGFkb3cubG9jYXRpb24oKS55
KCkpIC8gZmxvYXQoc2l6ZS5oZWlnaHQoKSkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
IGNhc2UgMToKKyAgICAgICAgICAgIC8vIFNlY29uZCBwYXNzOiB3ZSBuZWVkIHRoZSBzaGFkb3cg
Y29sb3IgYW5kIHRoZSBjb250ZW50IHRleHR1cmUgZm9yIGNvbXBvc2l0aW5nLgorICAgICAgICAg
ICAgZmxvYXQgciwgZywgYiwgYTsKKyAgICAgICAgICAgIENvbG9yKHByZW11bHRpcGxpZWRBUkdC
RnJvbUNvbG9yKHNoYWRvdy5jb2xvcigpKSkuZ2V0UkdCQShyLCBnLCBiLCBhKTsKKyAgICAgICAg
ICAgIGNvbnRleHQtPnVuaWZvcm00Zihwcm9ncmFtLT5jb2xvckxvY2F0aW9uKCksIHIsIGcsIGIs
IGEpOworICAgICAgICAgICAgY29udGV4dC0+dW5pZm9ybTJmKHByb2dyYW0tPmJsdXJSYWRpdXNM
b2NhdGlvbigpLCAwLCBzaGFkb3cuc3RkRGV2aWF0aW9uKCkgLyBmbG9hdChzaXplLmhlaWdodCgp
KSk7CisgICAgICAgICAgICBjb250ZXh0LT51bmlmb3JtMmYocHJvZ3JhbS0+c2hhZG93T2Zmc2V0
TG9jYXRpb24oKSwgMCwgMCk7CisgICAgICAgICAgICBjb250ZXh0LT5hY3RpdmVUZXh0dXJlKEdy
YXBoaWNzQ29udGV4dDNEOjpURVhUVVJFMSk7CisgICAgICAgICAgICBjb250ZXh0LT5iaW5kVGV4
dHVyZShHcmFwaGljc0NvbnRleHQzRDo6VEVYVFVSRV8yRCwgY29udGVudFRleHR1cmUpOworICAg
ICAgICAgICAgY29udGV4dC0+dW5pZm9ybTFpKHByb2dyYW0tPmNvbnRlbnRUZXh0dXJlTG9jYXRp
b24oKSwgMSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBicmVhazsK
KyAgICB9CisgICAgZGVmYXVsdDoKKyAgICAgICAgYnJlYWs7CisgICAgfQorfQorI2VuZGlmCisK
IHZvaWQgVGV4dHVyZU1hcHBlckdMOjpkcmF3VGV4dHVyZShjb25zdCBCaXRtYXBUZXh0dXJlJiB0
ZXh0dXJlLCBjb25zdCBGbG9hdFJlY3QmIHRhcmdldFJlY3QsIGNvbnN0IFRyYW5zZm9ybWF0aW9u
TWF0cml4JiBtYXRyaXgsIGZsb2F0IG9wYWNpdHksIHVuc2lnbmVkIGV4cG9zZWRFZGdlcykKIHsK
ICAgICBpZiAoIXRleHR1cmUuaXNWYWxpZCgpKQpAQCAtNDIyLDYgKzU4MCwxMCBAQCB2b2lkIFRl
eHR1cmVNYXBwZXJHTDo6ZHJhd1RleHR1cmUoY29uc3QgQml0bWFwVGV4dHVyZSYgdGV4dHVyZSwg
Y29uc3QgRmxvYXRSZWN0JgogICAgICAgICByZXR1cm47CiAKICAgICBjb25zdCBCaXRtYXBUZXh0
dXJlR0wmIHRleHR1cmVHTCA9IHN0YXRpY19jYXN0PGNvbnN0IEJpdG1hcFRleHR1cmVHTCY+KHRl
eHR1cmUpOworI2lmIEVOQUJMRShDU1NfRklMVEVSUykKKyAgICBUZW1wb3JhcnlDaGFuZ2U8Y29u
c3QgQml0bWFwVGV4dHVyZUdMOjpGaWx0ZXJJbmZvKj4gZmlsdGVySW5mbyhkYXRhKCkuZmlsdGVy
SW5mbywgdGV4dHVyZUdMLmZpbHRlckluZm8oKSk7CisjZW5kaWYKKwogICAgIGRyYXdUZXh0dXJl
KHRleHR1cmVHTC5pZCgpLCB0ZXh0dXJlR0wuaXNPcGFxdWUoKSA/IDAgOiBTaG91bGRCbGVuZCwg
dGV4dHVyZUdMLnNpemUoKSwgdGFyZ2V0UmVjdCwgbWF0cml4LCBvcGFjaXR5LCBleHBvc2VkRWRn
ZXMpOwogfQogCkBAIC00NDIsMTEgKzYwNCwzMCBAQCB2b2lkIFRleHR1cmVNYXBwZXJHTDo6ZHJh
d1RleHR1cmUoUGxhdGZvcm0zRE9iamVjdCB0ZXh0dXJlLCBGbGFncyBmbGFncywgY29uc3QgSQog
ICAgICAgICBmbGFncyB8PSBTaG91bGRBbnRpYWxpYXM7CiAgICAgfQogCisjaWYgRU5BQkxFKENT
U19GSUxURVJTKQorICAgIFJlZlB0cjxGaWx0ZXJPcGVyYXRpb24+IGZpbHRlciA9IGRhdGEoKS5m
aWx0ZXJJbmZvID8gZGF0YSgpLmZpbHRlckluZm8tPmZpbHRlcjogMDsKKyAgICBHQzNEdWludCBm
aWx0ZXJDb250ZW50VGV4dHVyZUlEID0gMDsKKworICAgIGlmIChmaWx0ZXIpIHsKKyAgICAgICAg
aWYgKGRhdGEoKS5maWx0ZXJJbmZvLT5jb250ZW50VGV4dHVyZSkKKyAgICAgICAgICAgIGZpbHRl
ckNvbnRlbnRUZXh0dXJlSUQgPSB0b0JpdG1hcFRleHR1cmVHTChkYXRhKCkuZmlsdGVySW5mby0+
Y29udGVudFRleHR1cmUuZ2V0KCkpLT5pZCgpOworICAgICAgICBvcHRpb25zIHw9IG9wdGlvbnNG
b3JGaWx0ZXJUeXBlKGZpbHRlci0+Z2V0T3BlcmF0aW9uVHlwZSgpLCBkYXRhKCkuZmlsdGVySW5m
by0+cGFzcyk7CisgICAgICAgIGlmIChmaWx0ZXItPmFmZmVjdHNPcGFjaXR5KCkpCisgICAgICAg
ICAgICBmbGFncyB8PSBTaG91bGRCbGVuZDsKKyAgICB9CisjZW5kaWYKKwogICAgIGlmICh1c2VB
bnRpYWxpYXNpbmcgfHwgb3BhY2l0eSA8IDEpCiAgICAgICAgIGZsYWdzIHw9IFNob3VsZEJsZW5k
OwogCiAgICAgUmVmUHRyPFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtPiBwcm9ncmFtOwogICAg
IHByb2dyYW0gPSBkYXRhKCkuc2hhcmVkR0xEYXRhKCkuZ2V0U2hhZGVyUHJvZ3JhbShvcHRpb25z
KTsKKworI2lmIEVOQUJMRShDU1NfRklMVEVSUykKKyAgICBpZiAoZmlsdGVyKQorICAgICAgICBw
cmVwYXJlRmlsdGVyUHJvZ3JhbShwcm9ncmFtLmdldCgpLCAqZmlsdGVyLmdldCgpLCBkYXRhKCku
ZmlsdGVySW5mby0+cGFzcywgdGV4dHVyZVNpemUsIGZpbHRlckNvbnRlbnRUZXh0dXJlSUQpOwor
I2VuZGlmCisKICAgICBkcmF3VGV4dHVyZWRRdWFkV2l0aFByb2dyYW0ocHJvZ3JhbS5nZXQoKSwg
dGV4dHVyZSwgZmxhZ3MsIHRleHR1cmVTaXplLCB0YXJnZXRSZWN0LCBtb2RlbFZpZXdNYXRyaXgs
IG9wYWNpdHkpOwogfQogCkBAIC03MzcsMTU2ICs5MTgsNiBAQCB2b2lkIEJpdG1hcFRleHR1cmVH
TDo6dXBkYXRlQ29udGVudHMoSW1hZ2UqIGltYWdlLCBjb25zdCBJbnRSZWN0JiB0YXJnZXRSZWN0
LCBjbwogICAgIHVwZGF0ZUNvbnRlbnRzKGltYWdlRGF0YSwgdGFyZ2V0UmVjdCwgb2Zmc2V0LCBi
eXRlc1BlckxpbmUsIHVwZGF0ZUNvbnRlbnRzRmxhZyk7CiB9CiAKLSNpZiBFTkFCTEUoQ1NTX0ZJ
TFRFUlMpCi0KLXN0YXRpYyBUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbTo6T3B0aW9ucyBvcHRp
b25zRm9yRmlsdGVyVHlwZShGaWx0ZXJPcGVyYXRpb246Ok9wZXJhdGlvblR5cGUgdHlwZSwgdW5z
aWduZWQgcGFzcykKLXsKLSAgICBzd2l0Y2ggKHR5cGUpIHsKLSAgICBjYXNlIEZpbHRlck9wZXJh
dGlvbjo6R1JBWVNDQUxFOgotICAgICAgICByZXR1cm4gVGV4dHVyZU1hcHBlclNoYWRlclByb2dy
YW06OlRleHR1cmUgfCBUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbTo6R3JheXNjYWxlRmlsdGVy
OwotICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpTRVBJQToKLSAgICAgICAgcmV0dXJuIFRleHR1
cmVNYXBwZXJTaGFkZXJQcm9ncmFtOjpUZXh0dXJlIHwgVGV4dHVyZU1hcHBlclNoYWRlclByb2dy
YW06OlNlcGlhRmlsdGVyOwotICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpTQVRVUkFURToKLSAg
ICAgICAgcmV0dXJuIFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtOjpUZXh0dXJlIHwgVGV4dHVy
ZU1hcHBlclNoYWRlclByb2dyYW06OlNhdHVyYXRlRmlsdGVyOwotICAgIGNhc2UgRmlsdGVyT3Bl
cmF0aW9uOjpIVUVfUk9UQVRFOgotICAgICAgICByZXR1cm4gVGV4dHVyZU1hcHBlclNoYWRlclBy
b2dyYW06OlRleHR1cmUgfCBUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbTo6SHVlUm90YXRlRmls
dGVyOwotICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpJTlZFUlQ6Ci0gICAgICAgIHJldHVybiBU
ZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbTo6VGV4dHVyZSB8IFRleHR1cmVNYXBwZXJTaGFkZXJQ
cm9ncmFtOjpJbnZlcnRGaWx0ZXI7Ci0gICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246OkJSSUdIVE5F
U1M6Ci0gICAgICAgIHJldHVybiBUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbTo6VGV4dHVyZSB8
IFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtOjpCcmlnaHRuZXNzRmlsdGVyOwotICAgIGNhc2Ug
RmlsdGVyT3BlcmF0aW9uOjpDT05UUkFTVDoKLSAgICAgICAgcmV0dXJuIFRleHR1cmVNYXBwZXJT
aGFkZXJQcm9ncmFtOjpUZXh0dXJlIHwgVGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW06OkNvbnRy
YXN0RmlsdGVyOwotICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpPUEFDSVRZOgotICAgICAgICBy
ZXR1cm4gVGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW06OlRleHR1cmUgfCBUZXh0dXJlTWFwcGVy
U2hhZGVyUHJvZ3JhbTo6T3BhY2l0eUZpbHRlcjsKLSAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6
QkxVUjoKLSAgICAgICAgcmV0dXJuIFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtOjpCbHVyRmls
dGVyOwotICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpEUk9QX1NIQURPVzoKLSAgICAgICAgcmV0
dXJuIFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtOjpBbHBoYUJsdXIKLSAgICAgICAgICAgIHwg
KHBhc3MgPyBUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbTo6Q29udGVudFRleHR1cmUgfCBUZXh0
dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbTo6U29saWRDb2xvcjogMCk7Ci0gICAgZGVmYXVsdDoKLSAg
ICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgIHJldHVybiAwOwotICAgIH0KLX0K
LQotc3RhdGljIHVuc2lnbmVkIGdldFBhc3Nlc1JlcXVpcmVkRm9yRmlsdGVyKEZpbHRlck9wZXJh
dGlvbjo6T3BlcmF0aW9uVHlwZSB0eXBlKQotewotICAgIHN3aXRjaCAodHlwZSkgewotICAgIGNh
c2UgRmlsdGVyT3BlcmF0aW9uOjpHUkFZU0NBTEU6Ci0gICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246
OlNFUElBOgotICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpTQVRVUkFURToKLSAgICBjYXNlIEZp
bHRlck9wZXJhdGlvbjo6SFVFX1JPVEFURToKLSAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6SU5W
RVJUOgotICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpCUklHSFRORVNTOgotICAgIGNhc2UgRmls
dGVyT3BlcmF0aW9uOjpDT05UUkFTVDoKLSAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6T1BBQ0lU
WToKLSNpZiBFTkFCTEUoQ1NTX1NIQURFUlMpCi0gICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246OkNV
U1RPTToKLSAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6VkFMSURBVEVEX0NVU1RPTToKLSNlbmRp
ZgotICAgICAgICByZXR1cm4gMTsKLSAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6QkxVUjoKLSAg
ICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6RFJPUF9TSEFET1c6Ci0gICAgICAgIC8vIFdlIHVzZSB0
d28tcGFzc2VzICh2ZXJ0aWNhbCtob3Jpem9udGFsKSBmb3IgYmx1ciBhbmQgZHJvcC1zaGFkb3cu
Ci0gICAgICAgIHJldHVybiAyOwotICAgIGRlZmF1bHQ6Ci0gICAgICAgIHJldHVybiAwOwotICAg
IH0KLX0KLQotLy8gQ3JlYXRlIGEgbm9ybWFsIGRpc3RyaWJ1dGlvbiBvZiAyMSB2YWx1ZXMgYmV0
d2VlbiAtMiBhbmQgMi4KLXN0YXRpYyBjb25zdCB1bnNpZ25lZCBHYXVzc2lhbktlcm5lbEhhbGZX
aWR0aCA9IDExOwotc3RhdGljIGNvbnN0IGZsb2F0IEdhdXNzaWFuS2VybmVsU3RlcCA9IDAuMjsK
LQotc3RhdGljIGlubGluZSBmbG9hdCBnYXVzcyhmbG9hdCB4KQotewotICAgIHJldHVybiBleHAo
LSh4ICogeCkgLyAyLik7Ci19Ci0KLXN0YXRpYyBmbG9hdCogZ2F1c3NpYW5LZXJuZWwoKQotewot
ICAgIHN0YXRpYyBib29sIHByZXBhcmVkID0gZmFsc2U7Ci0gICAgc3RhdGljIGZsb2F0IGtlcm5l
bFtHYXVzc2lhbktlcm5lbEhhbGZXaWR0aF0gPSB7MCwgfTsKLQotICAgIGlmIChwcmVwYXJlZCkK
LSAgICAgICAgcmV0dXJuIGtlcm5lbDsKLQotICAgIGtlcm5lbFswXSA9IGdhdXNzKDApOwotICAg
IGZsb2F0IHN1bSA9IGtlcm5lbFswXTsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAxOyBpIDwgR2F1
c3NpYW5LZXJuZWxIYWxmV2lkdGg7ICsraSkgewotICAgICAgICBrZXJuZWxbaV0gPSBnYXVzcyhp
ICogR2F1c3NpYW5LZXJuZWxTdGVwKTsKLSAgICAgICAgc3VtICs9IDIgKiBrZXJuZWxbaV07Ci0g
ICAgfQotCi0gICAgLy8gTm9ybWFsaXplIHRoZSBrZXJuZWwuCi0gICAgZmxvYXQgc2NhbGUgPSAx
IC8gc3VtOwotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBHYXVzc2lhbktlcm5lbEhhbGZX
aWR0aDsgKytpKQotICAgICAgICBrZXJuZWxbaV0gKj0gc2NhbGU7Ci0KLSAgICBwcmVwYXJlZCA9
IHRydWU7Ci0gICAgcmV0dXJuIGtlcm5lbDsKLX0KLQotc3RhdGljIHZvaWQgcHJlcGFyZUZpbHRl
clByb2dyYW0oVGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW0qIHByb2dyYW0sIGNvbnN0IEZpbHRl
ck9wZXJhdGlvbiYgb3BlcmF0aW9uLCB1bnNpZ25lZCBwYXNzLCBjb25zdCBJbnRTaXplJiBzaXpl
LCBHQzNEdWludCBjb250ZW50VGV4dHVyZSkKLXsKLSAgICBSZWZQdHI8R3JhcGhpY3NDb250ZXh0
M0Q+IGNvbnRleHQgPSBwcm9ncmFtLT5jb250ZXh0KCk7Ci0gICAgY29udGV4dC0+dXNlUHJvZ3Jh
bShwcm9ncmFtLT5wcm9ncmFtSUQoKSk7Ci0KLSAgICBzd2l0Y2ggKG9wZXJhdGlvbi5nZXRPcGVy
YXRpb25UeXBlKCkpIHsKLSAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6R1JBWVNDQUxFOgotICAg
IGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpTRVBJQToKLSAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6
U0FUVVJBVEU6Ci0gICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246OkhVRV9ST1RBVEU6Ci0gICAgICAg
IGNvbnRleHQtPnVuaWZvcm0xZihwcm9ncmFtLT5maWx0ZXJBbW91bnRMb2NhdGlvbigpLCBzdGF0
aWNfY2FzdDxjb25zdCBCYXNpY0NvbG9yTWF0cml4RmlsdGVyT3BlcmF0aW9uJj4ob3BlcmF0aW9u
KS5hbW91bnQoKSk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpJ
TlZFUlQ6Ci0gICAgY2FzZSBGaWx0ZXJPcGVyYXRpb246OkJSSUdIVE5FU1M6Ci0gICAgY2FzZSBG
aWx0ZXJPcGVyYXRpb246OkNPTlRSQVNUOgotICAgIGNhc2UgRmlsdGVyT3BlcmF0aW9uOjpPUEFD
SVRZOgotICAgICAgICBjb250ZXh0LT51bmlmb3JtMWYocHJvZ3JhbS0+ZmlsdGVyQW1vdW50TG9j
YXRpb24oKSwgc3RhdGljX2Nhc3Q8Y29uc3QgQmFzaWNDb21wb25lbnRUcmFuc2ZlckZpbHRlck9w
ZXJhdGlvbiY+KG9wZXJhdGlvbikuYW1vdW50KCkpOwotICAgICAgICBicmVhazsKLSAgICBjYXNl
IEZpbHRlck9wZXJhdGlvbjo6QkxVUjogewotICAgICAgICBjb25zdCBCbHVyRmlsdGVyT3BlcmF0
aW9uJiBibHVyID0gc3RhdGljX2Nhc3Q8Y29uc3QgQmx1ckZpbHRlck9wZXJhdGlvbiY+KG9wZXJh
dGlvbik7Ci0gICAgICAgIEZsb2F0U2l6ZSByYWRpdXM7Ci0KLSAgICAgICAgLy8gQmx1ciBpcyBk
b25lIGluIHR3byBwYXNzZXMsIGZpcnN0IGhvcml6b250YWxseSBhbmQgdGhlbiB2ZXJ0aWNhbGx5
LiBUaGUgc2FtZSBzaGFkZXIgaXMgdXNlZCBmb3IgYm90aC4KLSAgICAgICAgaWYgKHBhc3MpCi0g
ICAgICAgICAgICByYWRpdXMuc2V0SGVpZ2h0KGZsb2F0VmFsdWVGb3JMZW5ndGgoYmx1ci5zdGRE
ZXZpYXRpb24oKSwgc2l6ZS5oZWlnaHQoKSkgLyBzaXplLmhlaWdodCgpKTsKLSAgICAgICAgZWxz
ZQotICAgICAgICAgICAgcmFkaXVzLnNldFdpZHRoKGZsb2F0VmFsdWVGb3JMZW5ndGgoYmx1ci5z
dGREZXZpYXRpb24oKSwgc2l6ZS53aWR0aCgpKSAvIHNpemUud2lkdGgoKSk7Ci0KLSAgICAgICAg
Y29udGV4dC0+dW5pZm9ybTJmKHByb2dyYW0tPmJsdXJSYWRpdXNMb2NhdGlvbigpLCByYWRpdXMu
d2lkdGgoKSwgcmFkaXVzLmhlaWdodCgpKTsKLSAgICAgICAgY29udGV4dC0+dW5pZm9ybTFmdihw
cm9ncmFtLT5nYXVzc2lhbktlcm5lbExvY2F0aW9uKCksIEdhdXNzaWFuS2VybmVsSGFsZldpZHRo
LCBnYXVzc2lhbktlcm5lbCgpKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotICAgIGNhc2UgRmls
dGVyT3BlcmF0aW9uOjpEUk9QX1NIQURPVzogewotICAgICAgICBjb25zdCBEcm9wU2hhZG93Rmls
dGVyT3BlcmF0aW9uJiBzaGFkb3cgPSBzdGF0aWNfY2FzdDxjb25zdCBEcm9wU2hhZG93RmlsdGVy
T3BlcmF0aW9uJj4ob3BlcmF0aW9uKTsKLSAgICAgICAgY29udGV4dC0+dW5pZm9ybTFmdihwcm9n
cmFtLT5nYXVzc2lhbktlcm5lbExvY2F0aW9uKCksIEdhdXNzaWFuS2VybmVsSGFsZldpZHRoLCBn
YXVzc2lhbktlcm5lbCgpKTsKLSAgICAgICAgc3dpdGNoIChwYXNzKSB7Ci0gICAgICAgIGNhc2Ug
MDoKLSAgICAgICAgICAgIC8vIEZpcnN0IHBhc3M6IGhvcml6b250YWwgYWxwaGEgYmx1ci4KLSAg
ICAgICAgICAgIGNvbnRleHQtPnVuaWZvcm0yZihwcm9ncmFtLT5ibHVyUmFkaXVzTG9jYXRpb24o
KSwgc2hhZG93LnN0ZERldmlhdGlvbigpIC8gZmxvYXQoc2l6ZS53aWR0aCgpKSwgMCk7Ci0gICAg
ICAgICAgICBjb250ZXh0LT51bmlmb3JtMmYocHJvZ3JhbS0+c2hhZG93T2Zmc2V0TG9jYXRpb24o
KSwgZmxvYXQoc2hhZG93LmxvY2F0aW9uKCkueCgpKSAvIGZsb2F0KHNpemUud2lkdGgoKSksIGZs
b2F0KHNoYWRvdy5sb2NhdGlvbigpLnkoKSkgLyBmbG9hdChzaXplLmhlaWdodCgpKSk7Ci0gICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSAxOgotICAgICAgICAgICAgLy8gU2Vjb25kIHBh
c3M6IHdlIG5lZWQgdGhlIHNoYWRvdyBjb2xvciBhbmQgdGhlIGNvbnRlbnQgdGV4dHVyZSBmb3Ig
Y29tcG9zaXRpbmcuCi0gICAgICAgICAgICBmbG9hdCByLCBnLCBiLCBhOwotICAgICAgICAgICAg
Q29sb3IocHJlbXVsdGlwbGllZEFSR0JGcm9tQ29sb3Ioc2hhZG93LmNvbG9yKCkpKS5nZXRSR0JB
KHIsIGcsIGIsIGEpOwotICAgICAgICAgICAgY29udGV4dC0+dW5pZm9ybTRmKHByb2dyYW0tPmNv
bG9yTG9jYXRpb24oKSwgciwgZywgYiwgYSk7Ci0gICAgICAgICAgICBjb250ZXh0LT51bmlmb3Jt
MmYocHJvZ3JhbS0+Ymx1clJhZGl1c0xvY2F0aW9uKCksIDAsIHNoYWRvdy5zdGREZXZpYXRpb24o
KSAvIGZsb2F0KHNpemUuaGVpZ2h0KCkpKTsKLSAgICAgICAgICAgIGNvbnRleHQtPnVuaWZvcm0y
Zihwcm9ncmFtLT5zaGFkb3dPZmZzZXRMb2NhdGlvbigpLCAwLCAwKTsKLSAgICAgICAgICAgIGNv
bnRleHQtPmFjdGl2ZVRleHR1cmUoR3JhcGhpY3NDb250ZXh0M0Q6OlRFWFRVUkUxKTsKLSAgICAg
ICAgICAgIGNvbnRleHQtPmJpbmRUZXh0dXJlKEdyYXBoaWNzQ29udGV4dDNEOjpURVhUVVJFXzJE
LCBjb250ZW50VGV4dHVyZSk7Ci0gICAgICAgICAgICBjb250ZXh0LT51bmlmb3JtMWkocHJvZ3Jh
bS0+Y29udGVudFRleHR1cmVMb2NhdGlvbigpLCAxKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICB9Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLSAgICBkZWZhdWx0OgotICAgICAgICBicmVh
azsKLSAgICB9Ci19Ci0KICNpZiBFTkFCTEUoQ1NTX1NIQURFUlMpCiB2b2lkIFRleHR1cmVNYXBw
ZXJHTDo6cmVtb3ZlQ2FjaGVkQ3VzdG9tRmlsdGVyUHJvZ3JhbShDdXN0b21GaWx0ZXJQcm9ncmFt
KiBwcm9ncmFtKQogewpAQCAtOTQ2LDUzICs5NzcsNzkgQEAgYm9vbCBUZXh0dXJlTWFwcGVyR0w6
OmRyYXdVc2luZ0N1c3RvbUZpbHRlcihCaXRtYXBUZXh0dXJlJiB0YXJnZXQsIGNvbnN0IEJpdG1h
cFQKIH0KICNlbmRpZgogCi12b2lkIFRleHR1cmVNYXBwZXJHTDo6ZHJhd0ZpbHRlcmVkKGNvbnN0
IEJpdG1hcFRleHR1cmUmIHNhbXBsZXIsIGNvbnN0IEJpdG1hcFRleHR1cmUmIGNvbnRlbnRUZXh0
dXJlLCBjb25zdCBGaWx0ZXJPcGVyYXRpb24mIGZpbHRlciwgaW50IHBhc3MpCisjaWYgRU5BQkxF
KENTU19GSUxURVJTKQordm9pZCBUZXh0dXJlTWFwcGVyR0w6OmRyYXdGaWx0ZXJlZChjb25zdCBC
aXRtYXBUZXh0dXJlJiBzYW1wbGVyLCBjb25zdCBCaXRtYXBUZXh0dXJlKiBjb250ZW50VGV4dHVy
ZSwgY29uc3QgRmlsdGVyT3BlcmF0aW9uJiBmaWx0ZXIsIGludCBwYXNzKQogewogICAgIC8vIEZv
ciBzdGFuZGFyZCBmaWx0ZXJzLCB3ZSBhbHdheXMgZHJhdyB0aGUgd2hvbGUgdGV4dHVyZSB3aXRo
b3V0IHRyYW5zZm9ybWF0aW9ucy4KICAgICBUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbTo6T3B0
aW9ucyBvcHRpb25zID0gb3B0aW9uc0ZvckZpbHRlclR5cGUoZmlsdGVyLmdldE9wZXJhdGlvblR5
cGUoKSwgcGFzcyk7CiAgICAgUmVmUHRyPFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtPiBwcm9n
cmFtID0gZGF0YSgpLnNoYXJlZEdMRGF0YSgpLmdldFNoYWRlclByb2dyYW0ob3B0aW9ucyk7CiAg
ICAgQVNTRVJUKHByb2dyYW0pOwogCi0gICAgcHJlcGFyZUZpbHRlclByb2dyYW0ocHJvZ3JhbS5n
ZXQoKSwgZmlsdGVyLCBwYXNzLCBzYW1wbGVyLmNvbnRlbnRTaXplKCksIHN0YXRpY19jYXN0PGNv
bnN0IEJpdG1hcFRleHR1cmVHTCY+KGNvbnRlbnRUZXh0dXJlKS5pZCgpKTsKKyAgICBwcmVwYXJl
RmlsdGVyUHJvZ3JhbShwcm9ncmFtLmdldCgpLCBmaWx0ZXIsIHBhc3MsIHNhbXBsZXIuY29udGVu
dFNpemUoKSwgY29udGVudFRleHR1cmUgPyBzdGF0aWNfY2FzdDxjb25zdCBCaXRtYXBUZXh0dXJl
R0wqPihjb250ZW50VGV4dHVyZSktPmlkKCkgOiAwKTsKICAgICBGbG9hdFJlY3QgdGFyZ2V0UmVj
dChJbnRQb2ludDo6emVybygpLCBzYW1wbGVyLmNvbnRlbnRTaXplKCkpOwogICAgIGRyYXdUZXh0
dXJlZFF1YWRXaXRoUHJvZ3JhbShwcm9ncmFtLmdldCgpLCBzdGF0aWNfY2FzdDxjb25zdCBCaXRt
YXBUZXh0dXJlR0wmPihzYW1wbGVyKS5pZCgpLCAwLCBJbnRTaXplKDEsIDEpLCB0YXJnZXRSZWN0
LCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCgpLCAxKTsKIH0KIAotUGFzc1JlZlB0cjxCaXRtYXBUZXh0
dXJlPiBCaXRtYXBUZXh0dXJlR0w6OmFwcGx5RmlsdGVycyhUZXh0dXJlTWFwcGVyKiB0ZXh0dXJl
TWFwcGVyLCBjb25zdCBCaXRtYXBUZXh0dXJlJiBjb250ZW50VGV4dHVyZSwgY29uc3QgRmlsdGVy
T3BlcmF0aW9ucyYgZmlsdGVycykKK3N0YXRpYyBib29sIGlzQ3VzdG9tRmlsdGVyKEZpbHRlck9w
ZXJhdGlvbjo6T3BlcmF0aW9uVHlwZSB0eXBlKQoreworI2lmIEVOQUJMRShDU1NfU0hBREVSUykK
KyAgICByZXR1cm4gdHlwZSA9PSBGaWx0ZXJPcGVyYXRpb246OkNVU1RPTSB8fCB0eXBlID09IEZp
bHRlck9wZXJhdGlvbjo6VkFMSURBVEVEX0NVU1RPTTsKKyNlbHNlCisgICAgcmV0dXJuIGZhbHNl
OworI2VuZGlmCit9CisKK1Bhc3NSZWZQdHI8Qml0bWFwVGV4dHVyZT4gQml0bWFwVGV4dHVyZUdM
OjphcHBseUZpbHRlcnMoVGV4dHVyZU1hcHBlciogdGV4dHVyZU1hcHBlciwgY29uc3QgRmlsdGVy
T3BlcmF0aW9ucyYgZmlsdGVycykKIHsKLSAgICBUZXh0dXJlTWFwcGVyR0wqIHRleHR1cmVNYXBw
ZXJHTCA9IHN0YXRpY19jYXN0PFRleHR1cmVNYXBwZXJHTCo+KHRleHR1cmVNYXBwZXIpOwotICAg
IFJlZlB0cjxCaXRtYXBUZXh0dXJlPiBwcmV2aW91c1N1cmZhY2UgPSB0ZXh0dXJlTWFwcGVyR0wt
PmRhdGEoKS5jdXJyZW50U3VyZmFjZTsKKyAgICBpZiAoZmlsdGVycy5pc0VtcHR5KCkpCisgICAg
ICAgIHJldHVybiB0aGlzOwogCi0gICAgUmVmUHRyPEJpdG1hcFRleHR1cmU+IHNvdXJjZSA9IHRo
aXM7Ci0gICAgUmVmUHRyPEJpdG1hcFRleHR1cmU+IHRhcmdldCA9IHRleHR1cmVNYXBwZXItPmFj
cXVpcmVUZXh0dXJlRnJvbVBvb2wobV90ZXh0dXJlU2l6ZSk7CisgICAgVGV4dHVyZU1hcHBlckdM
KiB0ZXhtYXBHTCA9IHN0YXRpY19jYXN0PFRleHR1cmVNYXBwZXJHTCo+KHRleHR1cmVNYXBwZXIp
OworICAgIFJlZlB0cjxCaXRtYXBUZXh0dXJlPiBwcmV2aW91c1N1cmZhY2UgPSB0ZXhtYXBHTC0+
ZGF0YSgpLmN1cnJlbnRTdXJmYWNlOworICAgIFJlZlB0cjxCaXRtYXBUZXh0dXJlPiByZXN1bHRT
dXJmYWNlID0gdGhpczsKKyAgICBSZWZQdHI8Qml0bWFwVGV4dHVyZT4gaW50ZXJtZWRpYXRlU3Vy
ZmFjZTsKKyAgICBSZWZQdHI8Qml0bWFwVGV4dHVyZT4gc3BhcmVTdXJmYWNlOworCisgICAgbV9m
aWx0ZXJJbmZvID0gRmlsdGVySW5mbygpOwogCi0gICAgYm9vbCB1c2VDb250ZW50VGV4dHVyZSA9
IHRydWU7CiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBmaWx0ZXJzLnNpemUoKTsgKytpKSB7
Ci0gICAgICAgIGNvbnN0IEZpbHRlck9wZXJhdGlvbiogZmlsdGVyID0gZmlsdGVycy5hdChpKTsK
KyAgICAgICAgUmVmUHRyPEZpbHRlck9wZXJhdGlvbj4gZmlsdGVyID0gZmlsdGVycy5vcGVyYXRp
b25zKClbaV07CiAgICAgICAgIEFTU0VSVChmaWx0ZXIpOwogCisgICAgICAgIGJvb2wgY3VzdG9t
ID0gaXNDdXN0b21GaWx0ZXIoZmlsdGVyLT5nZXRPcGVyYXRpb25UeXBlKCkpOworCiAgICAgICAg
IGludCBudW1QYXNzZXMgPSBnZXRQYXNzZXNSZXF1aXJlZEZvckZpbHRlcihmaWx0ZXItPmdldE9w
ZXJhdGlvblR5cGUoKSk7CiAgICAgICAgIGZvciAoaW50IGogPSAwOyBqIDwgbnVtUGFzc2VzOyAr
K2opIHsKLSAgICAgICAgICAgIHRleHR1cmVNYXBwZXJHTC0+YmluZFN1cmZhY2UodGFyZ2V0Lmdl
dCgpKTsKLSAgICAgICAgICAgIGNvbnN0IEJpdG1hcFRleHR1cmUmIHNvdXJjZVRleHR1cmUgPSB1
c2VDb250ZW50VGV4dHVyZSA/IGNvbnRlbnRUZXh0dXJlIDogKnNvdXJjZTsKKyAgICAgICAgICAg
IGJvb2wgbGFzdCA9IChpID09IGZpbHRlcnMuc2l6ZSgpIC0gMSkgJiYgKGogPT0gbnVtUGFzc2Vz
IC0gMSk7CisgICAgICAgICAgICBpZiAoY3VzdG9tIHx8ICFsYXN0KSB7CisgICAgICAgICAgICAg
ICAgaWYgKCFpbnRlcm1lZGlhdGVTdXJmYWNlKQorICAgICAgICAgICAgICAgICAgICBpbnRlcm1l
ZGlhdGVTdXJmYWNlID0gdGV4bWFwR0wtPmFjcXVpcmVUZXh0dXJlRnJvbVBvb2woY29udGVudFNp
emUoKSk7CisgICAgICAgICAgICAgICAgdGV4bWFwR0wtPmJpbmRTdXJmYWNlKGludGVybWVkaWF0
ZVN1cmZhY2UuZ2V0KCkpOworICAgICAgICAgICAgfQorCiAjaWYgRU5BQkxFKENTU19TSEFERVJT
KQotICAgICAgICAgICAgaWYgKGZpbHRlci0+Z2V0T3BlcmF0aW9uVHlwZSgpID09IEZpbHRlck9w
ZXJhdGlvbjo6Q1VTVE9NIHx8IGZpbHRlci0+Z2V0T3BlcmF0aW9uVHlwZSgpID09IEZpbHRlck9w
ZXJhdGlvbjo6VkFMSURBVEVEX0NVU1RPTSkgewotICAgICAgICAgICAgICAgIGlmICh0ZXh0dXJl
TWFwcGVyR0wtPmRyYXdVc2luZ0N1c3RvbUZpbHRlcigqdGFyZ2V0LCBzb3VyY2VUZXh0dXJlLCAq
ZmlsdGVyKSkgewotICAgICAgICAgICAgICAgICAgICAvLyBPbmx5IHN3YXAgaWYgdGhlIGRyYXcg
d2FzIHN1Y2Nlc3NmdWwuCi0gICAgICAgICAgICAgICAgICAgIHN0ZDo6c3dhcChzb3VyY2UsIHRh
cmdldCk7Ci0gICAgICAgICAgICAgICAgICAgIHVzZUNvbnRlbnRUZXh0dXJlID0gZmFsc2U7Ci0g
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKGN1c3RvbSkgeworICAgICAgICAgICAg
ICAgIGlmICh0ZXhtYXBHTC0+ZHJhd1VzaW5nQ3VzdG9tRmlsdGVyKCppbnRlcm1lZGlhdGVTdXJm
YWNlLmdldCgpLCAqcmVzdWx0U3VyZmFjZS5nZXQoKSwgKmZpbHRlcikpCisgICAgICAgICAgICAg
ICAgICAgIHN0ZDo6c3dhcChyZXN1bHRTdXJmYWNlLCBpbnRlcm1lZGlhdGVTdXJmYWNlKTsKICAg
ICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgIH0KICNlbmRpZgotICAgICAgICAg
ICAgdGV4dHVyZU1hcHBlckdMLT5kcmF3RmlsdGVyZWQoc291cmNlVGV4dHVyZSwgY29udGVudFRl
eHR1cmUsICpmaWx0ZXIsIGopOwotICAgICAgICAgICAgc3RkOjpzd2FwKHNvdXJjZSwgdGFyZ2V0
KTsKLSAgICAgICAgICAgIHVzZUNvbnRlbnRUZXh0dXJlID0gZmFsc2U7CisgICAgICAgICAgICBp
ZiAobGFzdCkgeworICAgICAgICAgICAgICAgIHRvQml0bWFwVGV4dHVyZUdMKHJlc3VsdFN1cmZh
Y2UuZ2V0KCkpLT5tX2ZpbHRlckluZm8gPSBCaXRtYXBUZXh0dXJlR0w6OkZpbHRlckluZm8oZmls
dGVyLCBqLCBzcGFyZVN1cmZhY2UpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAg
ICAgfQorCisgICAgICAgICAgICB0ZXhtYXBHTC0+ZHJhd0ZpbHRlcmVkKCpyZXN1bHRTdXJmYWNl
LmdldCgpLCBzcGFyZVN1cmZhY2UuZ2V0KCksICpmaWx0ZXIsIGopOworICAgICAgICAgICAgaWYg
KCFqICYmIGZpbHRlci0+Z2V0T3BlcmF0aW9uVHlwZSgpID09IEZpbHRlck9wZXJhdGlvbjo6RFJP
UF9TSEFET1cpIHsKKyAgICAgICAgICAgICAgICBzcGFyZVN1cmZhY2UgPSByZXN1bHRTdXJmYWNl
OworICAgICAgICAgICAgICAgIHJlc3VsdFN1cmZhY2UuY2xlYXIoKTsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIHN0ZDo6c3dhcChyZXN1bHRTdXJmYWNlLCBpbnRlcm1lZGlhdGVTdXJmYWNl
KTsKICAgICAgICAgfQogICAgIH0KIAotICAgIHRleHR1cmVNYXBwZXJHTC0+YmluZFN1cmZhY2Uo
cHJldmlvdXNTdXJmYWNlLmdldCgpKTsKLSAgICByZXR1cm4gc291cmNlOworICAgIHRleG1hcEdM
LT5iaW5kU3VyZmFjZShwcmV2aW91c1N1cmZhY2UuZ2V0KCkpOworICAgIHJldHVybiByZXN1bHRT
dXJmYWNlOwogfQogI2VuZGlmCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyR0wuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyR0wuaAppbmRleCAwZmMwMzVkMjU2Y2E2
ZmRiMjEyNzc4NzUxZDU5NjllOGRjMDU1NDY3Li5lOGUwYjQ0NTc1ZTliNzYyZTY1MjhlYzg3YzEx
NWQ2MGY5YTAwYmQ1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy90ZXhtYXAvVGV4dHVyZU1hcHBlckdMLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvdGV4bWFwL1RleHR1cmVNYXBwZXJHTC5oCkBAIC0yMyw2ICsyMyw3IEBACiAjaWYg
VVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQogCiAjaW5jbHVkZSAiQ3VzdG9tRmlsdGVyUHJv
Z3JhbUluZm8uaCIKKyNpbmNsdWRlICJGaWx0ZXJPcGVyYXRpb24uaCIKICNpbmNsdWRlICJGbG9h
dFF1YWQuaCIKICNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQzRC5oIgogI2luY2x1ZGUgIkludFNp
emUuaCIKQEAgLTcwLDcgKzcxLDcgQEAgcHVibGljOgogICAgIGlubGluZSBHcmFwaGljc0NvbnRl
eHQzRCogZ3JhcGhpY3NDb250ZXh0M0QoKSBjb25zdCB7IHJldHVybiBtX2NvbnRleHQzRC5nZXQo
KTsgfQogCiAjaWYgRU5BQkxFKENTU19GSUxURVJTKQotICAgIHZvaWQgZHJhd0ZpbHRlcmVkKGNv
bnN0IEJpdG1hcFRleHR1cmUmIHNvdXJjZVRleHR1cmUsIGNvbnN0IEJpdG1hcFRleHR1cmUmIGNv
bnRlbnRUZXh0dXJlLCBjb25zdCBGaWx0ZXJPcGVyYXRpb24mLCBpbnQgcGFzcyk7CisgICAgdm9p
ZCBkcmF3RmlsdGVyZWQoY29uc3QgQml0bWFwVGV4dHVyZSYgc291cmNlVGV4dHVyZSwgY29uc3Qg
Qml0bWFwVGV4dHVyZSogY29udGVudFRleHR1cmUsIGNvbnN0IEZpbHRlck9wZXJhdGlvbiYsIGlu
dCBwYXNzKTsKICNlbmRpZgogI2lmIEVOQUJMRShDU1NfU0hBREVSUykKICAgICBib29sIGRyYXdV
c2luZ0N1c3RvbUZpbHRlcihCaXRtYXBUZXh0dXJlJiB0YXJnZXRUZXh0dXJlLCBjb25zdCBCaXRt
YXBUZXh0dXJlJiBzb3VyY2VUZXh0dXJlLCBjb25zdCBGaWx0ZXJPcGVyYXRpb24mKTsKQEAgLTE2
OSw3ICsxNzAsMTkgQEAgcHVibGljOgogICAgIHZpcnR1YWwgYm9vbCBpc0JhY2tlZEJ5T3BlbkdM
KCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsgfQogCiAjaWYgRU5BQkxFKENTU19GSUxURVJTKQotICAg
IHZpcnR1YWwgUGFzc1JlZlB0cjxCaXRtYXBUZXh0dXJlPiBhcHBseUZpbHRlcnMoVGV4dHVyZU1h
cHBlciosIGNvbnN0IEJpdG1hcFRleHR1cmUmIGNvbnRlbnRUZXh0dXJlLCBjb25zdCBGaWx0ZXJP
cGVyYXRpb25zJik7CisgICAgdmlydHVhbCBQYXNzUmVmUHRyPEJpdG1hcFRleHR1cmU+IGFwcGx5
RmlsdGVycyhUZXh0dXJlTWFwcGVyKiwgY29uc3QgRmlsdGVyT3BlcmF0aW9ucyYpIE9WRVJSSURF
OworICAgIHN0cnVjdCBGaWx0ZXJJbmZvIHsKKyAgICAgICAgUmVmUHRyPEZpbHRlck9wZXJhdGlv
bj4gZmlsdGVyOworICAgICAgICB1bnNpZ25lZCBwYXNzOworICAgICAgICBSZWZQdHI8Qml0bWFw
VGV4dHVyZT4gY29udGVudFRleHR1cmU7CisKKyAgICAgICAgRmlsdGVySW5mbyhQYXNzUmVmUHRy
PEZpbHRlck9wZXJhdGlvbj4gZiA9IDAsIHVuc2lnbmVkIHAgPSAwLCBQYXNzUmVmUHRyPEJpdG1h
cFRleHR1cmU+IHQgPSAwKQorICAgICAgICAgICAgOiBmaWx0ZXIoZikKKyAgICAgICAgICAgICwg
cGFzcyhwKQorICAgICAgICAgICAgLCBjb250ZW50VGV4dHVyZSh0KQorICAgICAgICAgICAgeyB9
CisgICAgfTsKKyAgICBjb25zdCBGaWx0ZXJJbmZvKiBmaWx0ZXJJbmZvKCkgY29uc3QgeyByZXR1
cm4gJm1fZmlsdGVySW5mbzsgfQogI2VuZGlmCiAKIHByaXZhdGU6CkBAIC0xOTEsNiArMjA0LDEw
IEBAIHByaXZhdGU6CiAgICAgdm9pZCBjbGVhcklmTmVlZGVkKCk7CiAgICAgdm9pZCBjcmVhdGVG
Ym9JZk5lZWRlZCgpOwogCisjaWYgRU5BQkxFKENTU19GSUxURVJTKQorICAgIEZpbHRlckluZm8g
bV9maWx0ZXJJbmZvOworI2VuZGlmCisKICAgICBmcmllbmQgY2xhc3MgVGV4dHVyZU1hcHBlckdM
OwogfTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4
bWFwL1RleHR1cmVNYXBwZXJJbWFnZUJ1ZmZlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlckltYWdlQnVmZmVyLmNwcAppbmRleCBkOWEy
ZmZkNDlkOTc3NTlmMmUwNGE2Yjg2NjRiYTAzZmFmYTU5NGU5Li4wMzI3M2JhMGZkNzExMTliYWNh
OGJiZjAwMGQ1Mzk4ZGI2ZGQ3M2ZmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlckltYWdlQnVmZmVyLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlckltYWdlQnVm
ZmVyLmNwcApAQCAtMTYzLDcgKzE2Myw3IEBAIHZvaWQgVGV4dHVyZU1hcHBlckltYWdlQnVmZmVy
OjpkcmF3TnVtYmVyKGludCAvKiBudW1iZXIgKi8sIGNvbnN0IENvbG9yJiwgY29uc3QKIH0KIAog
I2lmIEVOQUJMRShDU1NfRklMVEVSUykKLVBhc3NSZWZQdHI8Qml0bWFwVGV4dHVyZT4gQml0bWFw
VGV4dHVyZUltYWdlQnVmZmVyOjphcHBseUZpbHRlcnMoVGV4dHVyZU1hcHBlciosIGNvbnN0IEJp
dG1hcFRleHR1cmUmLCBjb25zdCBGaWx0ZXJPcGVyYXRpb25zJikKK1Bhc3NSZWZQdHI8Qml0bWFw
VGV4dHVyZT4gQml0bWFwVGV4dHVyZUltYWdlQnVmZmVyOjphcHBseUZpbHRlcnMoVGV4dHVyZU1h
cHBlciosIGNvbnN0IEZpbHRlck9wZXJhdGlvbnMmKQogewogICAgIHJldHVybiB0aGlzOwogfQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL1RleHR1
cmVNYXBwZXJJbWFnZUJ1ZmZlci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
dGV4bWFwL1RleHR1cmVNYXBwZXJJbWFnZUJ1ZmZlci5oCmluZGV4IDIzYTJkNjgxMmJiMGI1OTdl
Yzc2YTdmODNjOWI4OGRlYzIxMTRkOGEuLjA2MDcxM2NlNWNjMTcxY2Q4YzVlNWY3ZmNlMGUyMDA4
YmU3MGI2OGQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3Rl
eG1hcC9UZXh0dXJlTWFwcGVySW1hZ2VCdWZmZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlckltYWdlQnVmZmVyLmgKQEAgLTM4LDcg
KzM4LDcgQEAgcHVibGljOgogICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVDb250ZW50cyhUZXh0dXJl
TWFwcGVyKiwgR3JhcGhpY3NMYXllciosIGNvbnN0IEludFJlY3QmIHRhcmdldCwgY29uc3QgSW50
UG9pbnQmIG9mZnNldCwgVXBkYXRlQ29udGVudHNGbGFnKTsKICAgICB2aXJ0dWFsIHZvaWQgdXBk
YXRlQ29udGVudHMoY29uc3Qgdm9pZCosIGNvbnN0IEludFJlY3QmIHRhcmdldCwgY29uc3QgSW50
UG9pbnQmIHNvdXJjZU9mZnNldCwgaW50IGJ5dGVzUGVyTGluZSwgVXBkYXRlQ29udGVudHNGbGFn
KTsKICNpZiBFTkFCTEUoQ1NTX0ZJTFRFUlMpCi0gICAgUGFzc1JlZlB0cjxCaXRtYXBUZXh0dXJl
PiBhcHBseUZpbHRlcnMoVGV4dHVyZU1hcHBlciosIGNvbnN0IEJpdG1hcFRleHR1cmUmLCBjb25z
dCBGaWx0ZXJPcGVyYXRpb25zJik7CisgICAgUGFzc1JlZlB0cjxCaXRtYXBUZXh0dXJlPiBhcHBs
eUZpbHRlcnMoVGV4dHVyZU1hcHBlciosIGNvbnN0IEZpbHRlck9wZXJhdGlvbnMmKTsKICNlbmRp
ZgogCiBwcml2YXRlOgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvdGV4bWFwL1RleHR1cmVNYXBwZXJMYXllci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlckxheWVyLmNwcAppbmRleCAzMWExNWFjOGE3
YzljYmFiNzU0NjkxMjUxMzJlMWEyMjFmYzI0NTJmLi5iODgyY2Y1YzAyMmQ4ZTcyZmY5MWM0ZDVj
YzBmODg0ZTc3NTUxMjc0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlckxheWVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvVGV4dHVyZU1hcHBlckxheWVyLmNwcApAQCAtMjUwLDMx
ICsyNTAsNiBAQCB2b2lkIFRleHR1cmVNYXBwZXJMYXllcjo6c2V0QW5pbWF0ZWRGaWx0ZXJzKGNv
bnN0IEZpbHRlck9wZXJhdGlvbnMmIGZpbHRlcnMpCiB7CiAgICAgbV9jdXJyZW50RmlsdGVycyA9
IGZpbHRlcnM7CiB9Ci0KLXN0YXRpYyBib29sIHNob3VsZEtlZXBDb250ZW50VGV4dHVyZShjb25z
dCBGaWx0ZXJPcGVyYXRpb25zJiBmaWx0ZXJzKQotewotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBp
IDwgZmlsdGVycy5zaXplKCk7ICsraSkgewotICAgICAgICBzd2l0Y2ggKGZpbHRlcnMub3BlcmF0
aW9ucygpLmF0KGkpLT5nZXRPcGVyYXRpb25UeXBlKCkpIHsKLSAgICAgICAgLy8gVGhlIGRyb3At
c2hhZG93IGZpbHRlciByZXF1aXJlcyB0aGUgY29udGVudCB0ZXh0dXJlLCBiZWNhdXNlIGl0IG5l
ZWRzIHRvIGNvbXBvc2l0ZSBpdAotICAgICAgICAvLyBvbiB0b3Agb2YgdGhlIGJsdXJyZWQgc2hh
ZG93IGNvbG9yLgotICAgICAgICBjYXNlIEZpbHRlck9wZXJhdGlvbjo6RFJPUF9TSEFET1c6Ci0g
ICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgcmV0dXJuIGZhbHNlOwotfQotCi1zdGF0aWMg
UGFzc1JlZlB0cjxCaXRtYXBUZXh0dXJlPiBhcHBseUZpbHRlcnMoY29uc3QgRmlsdGVyT3BlcmF0
aW9ucyYgZmlsdGVycywgVGV4dHVyZU1hcHBlciogdGV4dHVyZU1hcHBlciwgQml0bWFwVGV4dHVy
ZSogc291cmNlKQotewotICAgIGlmICghZmlsdGVycy5zaXplKCkpCi0gICAgICAgIHJldHVybiBz
b3VyY2U7Ci0KLSAgICBSZWZQdHI8Qml0bWFwVGV4dHVyZT4gZmlsdGVyU3VyZmFjZSA9IHNob3Vs
ZEtlZXBDb250ZW50VGV4dHVyZShmaWx0ZXJzKSA/IHRleHR1cmVNYXBwZXItPmFjcXVpcmVUZXh0
dXJlRnJvbVBvb2woc291cmNlLT5zaXplKCkpIDogc291cmNlOwotICAgIHJldHVybiBmaWx0ZXJT
dXJmYWNlLT5hcHBseUZpbHRlcnModGV4dHVyZU1hcHBlciwgKnNvdXJjZSwgZmlsdGVycyk7Ci19
CiAjZW5kaWYKIAogc3RhdGljIHZvaWQgcmVzb2x2ZU92ZXJsYXBzKFJlZ2lvbiBuZXdSZWdpb24s
IFJlZ2lvbiYgb3ZlcmxhcFJlZ2lvbiwgUmVnaW9uJiBub25PdmVybGFwUmVnaW9uKQpAQCAtNDA3
LDggKzM4Miw3IEBAIFBhc3NSZWZQdHI8Qml0bWFwVGV4dHVyZT4gVGV4dHVyZU1hcHBlckxheWVy
OjpwYWludEludG9TdXJmYWNlKGNvbnN0IFRleHR1cmVNYXBwCiAgICAgaWYgKG1fc3RhdGUubWFz
a0xheWVyKQogICAgICAgICBtX3N0YXRlLm1hc2tMYXllci0+YXBwbHlNYXNrKG9wdGlvbnMpOwog
I2lmIEVOQUJMRShDU1NfRklMVEVSUykKLSAgICBpZiAoIW1fY3VycmVudEZpbHRlcnMuaXNFbXB0
eSgpKQotICAgICAgICBzdXJmYWNlID0gYXBwbHlGaWx0ZXJzKG1fY3VycmVudEZpbHRlcnMsIG9w
dGlvbnMudGV4dHVyZU1hcHBlciwgc3VyZmFjZS5nZXQoKSk7CisgICAgc3VyZmFjZSA9IHN1cmZh
Y2UtPmFwcGx5RmlsdGVycyhvcHRpb25zLnRleHR1cmVNYXBwZXIsIG1fY3VycmVudEZpbHRlcnMp
OwogI2VuZGlmCiAgICAgb3B0aW9ucy50ZXh0dXJlTWFwcGVyLT5iaW5kU3VyZmFjZShzdXJmYWNl
LmdldCgpKTsKICAgICByZXR1cm4gc3VyZmFjZTsK
</data>

          </attachment>
      

    </bug>

</bugzilla>