<?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>41110</bug_id>
          
          <creation_ts>2010-06-23 16:21:39 -0700</creation_ts>
          <short_desc>Move more form submission logic into FormSubmission.</short_desc>
          <delta_ts>2010-07-23 15:21:38 -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>Other</rep_platform>
          <op_sys>OS X 10.5</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>39021</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Dimitri Glazkov (Google)">dglazkov</reporter>
          <assigned_to name="Dimitri Glazkov (Google)">dglazkov</assigned_to>
          <cc>darin</cc>
    
    <cc>dglazkov</cc>
    
    <cc>eric</cc>
    
    <cc>tkent</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>242140</commentid>
    <comment_count>0</comment_count>
    <who name="Dimitri Glazkov (Google)">dglazkov</who>
    <bug_when>2010-06-23 16:21:39 -0700</bug_when>
    <thetext>Move more form submission logic into FormSubmission.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>242144</commentid>
    <comment_count>1</comment_count>
      <attachid>59575</attachid>
    <who name="Dimitri Glazkov (Google)">dglazkov</who>
    <bug_when>2010-06-23 16:32:12 -0700</bug_when>
    <thetext>Created attachment 59575
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>242146</commentid>
    <comment_count>2</comment_count>
    <who name="Dimitri Glazkov (Google)">dglazkov</who>
    <bug_when>2010-06-23 16:34:23 -0700</bug_when>
    <thetext>Apologies for a largish patch -- I tried splitting it up, but the it was less readable in chunks.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>242149</commentid>
    <comment_count>3</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2010-06-23 16:38:04 -0700</bug_when>
    <thetext>Attachment 59575 did not build on mac:
Build output: http://webkit-commit-queue.appspot.com/results/3331655</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>242245</commentid>
    <comment_count>4</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-06-23 19:01:14 -0700</bug_when>
    <thetext>Attachment 59575 did not build on chromium:
Build output: http://webkit-commit-queue.appspot.com/results/3313637</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>242267</commentid>
    <comment_count>5</comment_count>
    <who name="Dimitri Glazkov (Google)">dglazkov</who>
    <bug_when>2010-06-23 20:03:06 -0700</bug_when>
    <thetext>(In reply to comment #3)
&gt; Attachment 59575 [details] did not build on mac:
&gt; Build output: http://webkit-commit-queue.appspot.com/results/3331655

Weird... I don&apos;t get this error when building locally. I&apos;ll investigate.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>242575</commentid>
    <comment_count>6</comment_count>
      <attachid>59670</attachid>
    <who name="Dimitri Glazkov (Google)">dglazkov</who>
    <bug_when>2010-06-24 10:26:42 -0700</bug_when>
    <thetext>Created attachment 59670
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>242577</commentid>
    <comment_count>7</comment_count>
    <who name="Dimitri Glazkov (Google)">dglazkov</who>
    <bug_when>2010-06-24 10:28:26 -0700</bug_when>
    <thetext>(In reply to comment #6)
&gt; Created an attachment (id=59670) [details]
&gt; Patch

I went back and forth on making FormSubmission::Attributes nested. It just looks prettier that way :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>249823</commentid>
    <comment_count>8</comment_count>
      <attachid>59670</attachid>
    <who name="Kent Tamura">tkent</who>
    <bug_when>2010-07-12 07:32:27 -0700</bug_when>
    <thetext>Comment on attachment 59670
Patch

WebCore/loader/FormSubmission.h:56
 +              {
Indentation is wrong.  It should be 8 spaces.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>255582</commentid>
    <comment_count>9</comment_count>
    <who name="Dimitri Glazkov (Google)">dglazkov</who>
    <bug_when>2010-07-23 15:21:38 -0700</bug_when>
    <thetext>Fixed up and landed as http://trac.webkit.org/changeset/63999</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>59575</attachid>
            <date>2010-06-23 16:32:12 -0700</date>
            <delta_ts>2010-06-23 20:03:17 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-41110-20100623163211.patch</filename>
            <type>text/plain</type>
            <size>32638</size>
            <attacher name="Dimitri Glazkov (Google)">dglazkov</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
MTkwOWRlNzljMTE1YTFhMzgxNDIwOGZkN2ZiMDAxYmU0NTg3YjM1Yi4uMDIyZmZjNjdiYTU2MTBl
YWQ3NWU1ZGUzODdjOTg2YWIzNzViMjI3NCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cK
KysrIGIvV2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSw1NSBAQAorMjAxMC0wNi0yMyAgRGlt
aXRyaSBHbGF6a292ICA8ZGdsYXprb3ZAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFJldmlld2Vk
IGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIE1vdmUgbW9yZSBmb3JtIHN1Ym1pc3Npb24g
bG9naWMgaW50byBGb3JtU3VibWlzc2lvbi4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTQxMTEwCisKKyAgICAgICAgVHdvIG1ham9yIG1vdmVzOgorICAg
ICAgICAqIEZvbGQgSFRNTEZvcm1FbGVtZW50OjpwcmVwYXJlRm9ybVN1Ym1pc3Npb24gaW50byBG
b3JtU3VibWlzc2lvbjo6Y3JlYXRlCisgICAgICAgICogTW92ZSBub24tc3RhdGljIChub24tRm9y
bURhdGEtYnVpbGRpbmcpIG1ldGhvZHMgb2YgRm9ybURhdGFCdWlsZGVyCisgICAgICAgICAgICB0
byBGb3JtU3VibWlzc2lvbjo6UGFyYW1ldGVycy4KKworICAgICAgICBNZWNoYW5pY2FsIG1vdmlu
Zywgbm8gY2hhbmdlIGluIGJlaGF2aW9yLCBzbyBubyBuZXcgdGVzdHMuCisKKyAgICAgICAgKiBo
dG1sL0hUTUxGb3JtRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpIVE1MRm9ybUVsZW1l
bnQ6OnN1Ym1pdCk6IENoYW5nZWQgdG8gdXNlIEZvcm1TdWJtaXNzaW9uOjpjcmVhdGUuCisgICAg
ICAgIChXZWJDb3JlOjpIVE1MRm9ybUVsZW1lbnQ6OnBhcnNlTWFwcGVkQXR0cmlidXRlKTogQ2hh
bmdlZCB0byB1c2UgbV9wYXJhbWV0ZXJzLgorICAgICAgICAqIGh0bWwvSFRNTEZvcm1FbGVtZW50
Lmg6CisgICAgICAgIChXZWJDb3JlOjpIVE1MRm9ybUVsZW1lbnQ6OmVuY3R5cGUpOiBEaXR0by4K
KyAgICAgICAgKFdlYkNvcmU6OkhUTUxGb3JtRWxlbWVudDo6ZW5jb2RpbmcpOiBEaXR0by4KKyAg
ICAgICAgKFdlYkNvcmU6OkhUTUxGb3JtRWxlbWVudDo6YWNjZXB0Q2hhcnNldCk6IERpdHRvLgor
ICAgICAgICAqIGxvYWRlci9Gb3JtU3VibWlzc2lvbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpn
ZW5lcmF0ZUZvcm1EYXRhSWRlbnRpZmllcik6IE1vdmVkIGZyb20gSFRNTEZvcm1FbGVtZW50Lgor
ICAgICAgICAoV2ViQ29yZTo6YXBwZW5kTWFpbHRvUG9zdEZvcm1EYXRhVG9VUkwpOiBEaXR0by4K
KyAgICAgICAgKFdlYkNvcmU6OkZvcm1TdWJtaXNzaW9uOjpQYXJhbWV0ZXJzOjpwYXJzZUFjdGlv
bik6IE1vdmVkIGZyb20gRm9ybURhdGFCdWlsZGVyLgorICAgICAgICAoV2ViQ29yZTo6Rm9ybVN1
Ym1pc3Npb246OlBhcmFtZXRlcnM6OnBhcnNlRW5jb2RpbmdUeXBlKTogRGl0dG8uCisgICAgICAg
IChXZWJDb3JlOjpGb3JtU3VibWlzc2lvbjo6UGFyYW1ldGVyczo6cGFyc2VNZXRob2RUeXBlKTog
RGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpGb3JtU3VibWlzc2lvbjo6Rm9ybVN1Ym1pc3Npb24p
OiBNYWRlIGlubGluZS4KKyAgICAgICAgKFdlYkNvcmU6OkZvcm1TdWJtaXNzaW9uOjpjcmVhdGUp
OiBBZGRlZCBsb2dpYyB0aGF0IHVzZWQgdG8gYmUgaW4KKyAgICAgICAgICAgIEhUTUxGb3JtRWxl
bWVudDo6cHJlcGFyZUZvcm1TdWJtaXNzaW9uLgorICAgICAgICAqIGxvYWRlci9Gb3JtU3VibWlz
c2lvbi5oOgorICAgICAgICAoV2ViQ29yZTo6Rm9ybVN1Ym1pc3Npb246Oik6CisgICAgICAgIChX
ZWJDb3JlOjpGb3JtU3VibWlzc2lvbjo6UGFyYW1ldGVyczo6UGFyYW1ldGVycyk6IEFkZGVkIG5l
dyBjbGFzcy4KKyAgICAgICAgKFdlYkNvcmU6OkZvcm1TdWJtaXNzaW9uOjpQYXJhbWV0ZXJzOjpt
ZXRob2QpOiBNb3ZlZCBmcm9tIEZvcm1EYXRhQnVpbGRlci4KKyAgICAgICAgKFdlYkNvcmU6OkZv
cm1TdWJtaXNzaW9uOjpQYXJhbWV0ZXJzOjppc011bHRpUGFydEZvcm0pOiBEaXR0by4KKyAgICAg
ICAgKFdlYkNvcmU6OkZvcm1TdWJtaXNzaW9uOjpQYXJhbWV0ZXJzOjphY3Rpb24pOiBEaXR0by4K
KyAgICAgICAgKFdlYkNvcmU6OkZvcm1TdWJtaXNzaW9uOjpQYXJhbWV0ZXJzOjp0YXJnZXQpOiBE
aXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkZvcm1TdWJtaXNzaW9uOjpQYXJhbWV0ZXJzOjpzZXRU
YXJnZXQpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkZvcm1TdWJtaXNzaW9uOjpQYXJhbWV0
ZXJzOjplbmNvZGluZ1R5cGUpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkZvcm1TdWJtaXNz
aW9uOjpQYXJhbWV0ZXJzOjphY2NlcHRDaGFyc2V0KTogRGl0dG8uCisgICAgICAgIChXZWJDb3Jl
OjpGb3JtU3VibWlzc2lvbjo6UGFyYW1ldGVyczo6c2V0QWNjZXB0Q2hhcnNldCk6IERpdHRvLgor
ICAgICAgICAoV2ViQ29yZTo6Rm9ybVN1Ym1pc3Npb246OnRhcmdldCk6IERpdHRvLgorICAgICAg
ICAoV2ViQ29yZTo6Rm9ybVN1Ym1pc3Npb246OmNvbnRlbnRUeXBlKTogQ29uc3QtaWZpZWQgcmV0
dXJuIHR5cGUuCisgICAgICAgIChXZWJDb3JlOjpGb3JtU3VibWlzc2lvbjo6Ym91bmRhcnkpOiBE
aXR0by4KKyAgICAgICAgKiBwbGF0Zm9ybS9uZXR3b3JrL0Zvcm1EYXRhQnVpbGRlci5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpGb3JtRGF0YUJ1aWxkZXI6OmVuY29kaW5nRnJvbUFjY2VwdENoYXJz
ZXQpOiBSZW5hbWVkIG1ldGhvZCBmb3IgY2xhcml0eSwKKyAgICAgICAgICAgIG1hZGUgaXQgdXNl
IHBhcmFtIGluc3RlYWQgb2YgYSBjbGFzcyBtZW1iZXIuCisgICAgICAgICogcGxhdGZvcm0vbmV0
d29yay9Gb3JtRGF0YUJ1aWxkZXIuaDoKKyAgICAgICAgKFdlYkNvcmU6OkZvcm1EYXRhQnVpbGRl
cjo6Rm9ybURhdGFCdWlsZGVyKTogTWFkZSBjb25zdHJ1Y3RvciBwcml2YXRlLgorICAgICAgICAq
IHdtbC9XTUxHb0VsZW1lbnQuY3BwOiBDaGFuZ2VkIHRvIHVzZSBGb3JtU3VibWlzaW9uOjpQYXJh
bWV0ZXJzLgorICAgICAgICAqIHdtbC9XTUxHb0VsZW1lbnQuaDogRGl0dG8uCisKIDIwMTAtMDYt
MDQgIERpbWl0cmkgR2xhemtvdiAgPGRnbGF6a292QGNocm9taXVtLm9yZz4KIAogICAgICAgICBS
ZXZpZXdlZCBieSBEYXJpbiBBZGxlci4KZGlmZiAtLWdpdCBhL1dlYkNvcmUvaHRtbC9IVE1MRm9y
bUVsZW1lbnQuY3BwIGIvV2ViQ29yZS9odG1sL0hUTUxGb3JtRWxlbWVudC5jcHAKaW5kZXggOWQ1
ODkzNDJhMzI2MzQzZmZlZjI3OGIwNDEyOGMxZTUzMGY2NjBmOS4uNzExZThlZTUzMWVjMDY3YjEx
M2IxODhhOGIwOGJmZjg2YTUwMDI5NyAxMDA2NDQKLS0tIGEvV2ViQ29yZS9odG1sL0hUTUxGb3Jt
RWxlbWVudC5jcHAKKysrIGIvV2ViQ29yZS9odG1sL0hUTUxGb3JtRWxlbWVudC5jcHAKQEAgLTM2
LDcgKzM2LDYgQEAKICNpbmNsdWRlICJGb3JtRGF0YS5oIgogI2luY2x1ZGUgIkZvcm1EYXRhTGlz
dC5oIgogI2luY2x1ZGUgIkZvcm1TdGF0ZS5oIgotI2luY2x1ZGUgIkZvcm1TdWJtaXNzaW9uLmgi
CiAjaW5jbHVkZSAiRnJhbWUuaCIKICNpbmNsdWRlICJGcmFtZUxvYWRlci5oIgogI2luY2x1ZGUg
IkZyYW1lTG9hZGVyQ2xpZW50LmgiCkBAIC02NCwxNCArNjMsNiBAQCBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiAKIHVzaW5nIG5hbWVzcGFjZSBIVE1MTmFtZXM7CiAKLXN0YXRpYyBpbnQ2NF90IGdlbmVy
YXRlRm9ybURhdGFJZGVudGlmaWVyKCkKLXsKLSAgICAvLyBJbml0aWFsaXplIHRvIHRoZSBjdXJy
ZW50IHRpbWUgdG8gcmVkdWNlIHRoZSBsaWtlbGlob29kIG9mIGdlbmVyYXRpbmcKLSAgICAvLyBp
ZGVudGlmaWVycyB0aGF0IG92ZXJsYXAgd2l0aCB0aG9zZSBmcm9tIHBhc3QvZnV0dXJlIGJyb3dz
ZXIgc2Vzc2lvbnMuCi0gICAgc3RhdGljIGludDY0X3QgbmV4dElkZW50aWZpZXIgPSBzdGF0aWNf
Y2FzdDxpbnQ2NF90PihjdXJyZW50VGltZSgpICogMTAwMDAwMC4wKTsKLSAgICByZXR1cm4gKytu
ZXh0SWRlbnRpZmllcjsKLX0KLQogSFRNTEZvcm1FbGVtZW50OjpIVE1MRm9ybUVsZW1lbnQoY29u
c3QgUXVhbGlmaWVkTmFtZSYgdGFnTmFtZSwgRG9jdW1lbnQqIGRvY3VtZW50KQogICAgIDogSFRN
TEVsZW1lbnQodGFnTmFtZSwgZG9jdW1lbnQpCiAgICAgLCBtX2F1dG9jb21wbGV0ZSh0cnVlKQpA
QCAtMTkyLDc5ICsxODMsNiBAQCB2b2lkIEhUTUxGb3JtRWxlbWVudDo6c3VibWl0SW1wbGljaXRs
eShFdmVudCogZXZlbnQsIGJvb2wgZnJvbUltcGxpY2l0U3VibWlzc2lvbgogICAgICAgICBwcmVw
YXJlU3VibWl0KGV2ZW50KTsKIH0KIAotc3RhdGljIHZvaWQgYXBwZW5kTWFpbHRvUG9zdEZvcm1E
YXRhVG9VUkwoS1VSTCYgdXJsLCBjb25zdCBGb3JtRGF0YSYgZGF0YSwgY29uc3QgU3RyaW5nJiBl
bmNvZGluZ1R5cGUpCi17Ci0gICAgU3RyaW5nIGJvZHkgPSBkYXRhLmZsYXR0ZW5Ub1N0cmluZygp
OwotCi0gICAgaWYgKGVxdWFsSWdub3JpbmdDYXNlKGVuY29kaW5nVHlwZSwgInRleHQvcGxhaW4i
KSkgewotICAgICAgICAvLyBDb252ZW50aW9uIHNlZW1zIHRvIGJlIHRvIGRlY29kZSwgYW5kIHMv
Ji9cclxuLy4gQWxzbywgc3BhY2VzIGFyZSBlbmNvZGVkIGFzICUyMC4KLSAgICAgICAgYm9keSA9
IGRlY29kZVVSTEVzY2FwZVNlcXVlbmNlcyhib2R5LnJlcGxhY2UoJyYnLCAiXHJcbiIpLnJlcGxh
Y2UoJysnLCAnICcpICsgIlxyXG4iKTsKLSAgICB9Ci0KLSAgICBWZWN0b3I8Y2hhcj4gYm9keURh
dGE7Ci0gICAgYm9keURhdGEuYXBwZW5kKCJib2R5PSIsIDUpOwotICAgIEZvcm1EYXRhQnVpbGRl
cjo6ZW5jb2RlU3RyaW5nQXNGb3JtRGF0YShib2R5RGF0YSwgYm9keS51dGY4KCkpOwotICAgIGJv
ZHkgPSBTdHJpbmcoYm9keURhdGEuZGF0YSgpLCBib2R5RGF0YS5zaXplKCkpLnJlcGxhY2UoJysn
LCAiJTIwIik7Ci0KLSAgICBTdHJpbmcgcXVlcnkgPSB1cmwucXVlcnkoKTsKLSAgICBpZiAoIXF1
ZXJ5LmlzRW1wdHkoKSkKLSAgICAgICAgcXVlcnkuYXBwZW5kKCcmJyk7Ci0gICAgcXVlcnkuYXBw
ZW5kKGJvZHkpOwotICAgIHVybC5zZXRRdWVyeShxdWVyeSk7Ci19Ci0KLVBhc3NSZWZQdHI8Rm9y
bVN1Ym1pc3Npb24+IEhUTUxGb3JtRWxlbWVudDo6cHJlcGFyZUZvcm1TdWJtaXNzaW9uKEV2ZW50
KiBldmVudCwgYm9vbCBsb2NrSGlzdG9yeSwgRm9ybVN1Ym1pc3Npb25UcmlnZ2VyIHRyaWdnZXIp
Ci17Ci0gICAgS1VSTCBhY3Rpb25VUkwgPSBkb2N1bWVudCgpLT5jb21wbGV0ZVVSTChtX2Zvcm1E
YXRhQnVpbGRlci5hY3Rpb24oKS5pc0VtcHR5KCkgPyBkb2N1bWVudCgpLT51cmwoKS5zdHJpbmco
KSA6IG1fZm9ybURhdGFCdWlsZGVyLmFjdGlvbigpKTsKLSAgICBib29sIGlzTWFpbHRvRm9ybSA9
IGFjdGlvblVSTC5wcm90b2NvbElzKCJtYWlsdG8iKTsKLQotICAgIGlmIChtX2Zvcm1EYXRhQnVp
bGRlci5pc1Bvc3RNZXRob2QoKSkgewotICAgICAgICBpZiAobV9mb3JtRGF0YUJ1aWxkZXIuaXNN
dWx0aVBhcnRGb3JtKCkgJiYgaXNNYWlsdG9Gb3JtKSB7Ci0gICAgICAgICAgICBtX2Zvcm1EYXRh
QnVpbGRlci5wYXJzZUVuY29kaW5nVHlwZSgiYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNv
ZGVkIik7Ci0gICAgICAgICAgICBBU1NFUlQoIW1fZm9ybURhdGFCdWlsZGVyLmlzTXVsdGlQYXJ0
Rm9ybSgpKTsKLSAgICAgICAgfQotICAgIH0gZWxzZQotICAgICAgICBtX2Zvcm1EYXRhQnVpbGRl
ci5zZXRJc011bHRpUGFydEZvcm0oZmFsc2UpOwotCi0gICAgVGV4dEVuY29kaW5nIGRhdGFFbmNv
ZGluZyA9IGlzTWFpbHRvRm9ybSA/IFVURjhFbmNvZGluZygpIDogbV9mb3JtRGF0YUJ1aWxkZXIu
ZGF0YUVuY29kaW5nKGRvY3VtZW50KCkpOwotICAgIFJlZlB0cjxET01Gb3JtRGF0YT4gZG9tRm9y
bURhdGEgPSBET01Gb3JtRGF0YTo6Y3JlYXRlKGRhdGFFbmNvZGluZy5lbmNvZGluZ0ZvckZvcm1T
dWJtaXNzaW9uKCkpOwotICAgIFZlY3RvcjxwYWlyPFN0cmluZywgU3RyaW5nPiA+IGZvcm1WYWx1
ZXM7Ci0KLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9hc3NvY2lhdGVkRWxlbWVudHMu
c2l6ZSgpOyArK2kpIHsKLSAgICAgICAgSFRNTEZvcm1Db250cm9sRWxlbWVudCogY29udHJvbCA9
IG1fYXNzb2NpYXRlZEVsZW1lbnRzW2ldOwotICAgICAgICBpZiAoIWNvbnRyb2wtPmRpc2FibGVk
KCkpCi0gICAgICAgICAgICBjb250cm9sLT5hcHBlbmRGb3JtRGF0YSgqZG9tRm9ybURhdGEsIG1f
Zm9ybURhdGFCdWlsZGVyLmlzTXVsdGlQYXJ0Rm9ybSgpKTsKLSAgICAgICAgaWYgKGNvbnRyb2wt
Pmhhc0xvY2FsTmFtZShpbnB1dFRhZykpIHsKLSAgICAgICAgICAgIEhUTUxJbnB1dEVsZW1lbnQq
IGlucHV0ID0gc3RhdGljX2Nhc3Q8SFRNTElucHV0RWxlbWVudCo+KGNvbnRyb2wpOwotICAgICAg
ICAgICAgaWYgKGlucHV0LT5pc1RleHRGaWVsZCgpKSB7Ci0gICAgICAgICAgICAgICAgZm9ybVZh
bHVlcy5hcHBlbmQocGFpcjxTdHJpbmcsIFN0cmluZz4oaW5wdXQtPm5hbWUoKSwgaW5wdXQtPnZh
bHVlKCkpKTsKLSAgICAgICAgICAgICAgICBpZiAoaW5wdXQtPmlzU2VhcmNoRmllbGQoKSkKLSAg
ICAgICAgICAgICAgICAgICAgaW5wdXQtPmFkZFNlYXJjaFJlc3VsdCgpOwotICAgICAgICAgICAg
fQotICAgICAgICB9Ci0gICAgfQotCi0gICAgUmVmUHRyPEZvcm1EYXRhPiBmb3JtRGF0YTsKLSAg
ICBTdHJpbmcgYm91bmRhcnk7Ci0KLSAgICBpZiAobV9mb3JtRGF0YUJ1aWxkZXIuaXNNdWx0aVBh
cnRGb3JtKCkpIHsKLSAgICAgICAgZm9ybURhdGEgPSBGb3JtRGF0YTo6Y3JlYXRlTXVsdGlQYXJ0
KGRvbUZvcm1EYXRhLT5pdGVtcygpLCBkb21Gb3JtRGF0YS0+ZW5jb2RpbmcoKSwgZG9jdW1lbnQo
KSk7Ci0gICAgICAgIGJvdW5kYXJ5ID0gZm9ybURhdGEtPmJvdW5kYXJ5KCkuZGF0YSgpOwotICAg
IH0gZWxzZSB7Ci0gICAgICAgIGZvcm1EYXRhID0gRm9ybURhdGE6OmNyZWF0ZShkb21Gb3JtRGF0
YS0+aXRlbXMoKSwgZG9tRm9ybURhdGEtPmVuY29kaW5nKCkpOwotICAgICAgICBpZiAobV9mb3Jt
RGF0YUJ1aWxkZXIuaXNQb3N0TWV0aG9kKCkgJiYgaXNNYWlsdG9Gb3JtKSB7Ci0gICAgICAgICAg
ICAvLyBDb252ZXJ0IHRoZSBmb3JtIGRhdGEgaW50byBhIHN0cmluZyB0aGF0IHdlIHB1dCBpbnRv
IHRoZSBVUkwuCi0gICAgICAgICAgICBhcHBlbmRNYWlsdG9Qb3N0Rm9ybURhdGFUb1VSTChhY3Rp
b25VUkwsICpmb3JtRGF0YSwgbV9mb3JtRGF0YUJ1aWxkZXIuZW5jb2RpbmdUeXBlKCkpOwotICAg
ICAgICAgICAgZm9ybURhdGEgPSBGb3JtRGF0YTo6Y3JlYXRlKCk7Ci0gICAgICAgIH0KLSAgICB9
Ci0KLSAgICBmb3JtRGF0YS0+c2V0SWRlbnRpZmllcihnZW5lcmF0ZUZvcm1EYXRhSWRlbnRpZmll
cigpKTsKLSAgICBGb3JtU3VibWlzc2lvbjo6TWV0aG9kIG1ldGhvZCA9IG1fZm9ybURhdGFCdWls
ZGVyLmlzUG9zdE1ldGhvZCgpID8gRm9ybVN1Ym1pc3Npb246OlBvc3RNZXRob2QgOiBGb3JtU3Vi
bWlzc2lvbjo6R2V0TWV0aG9kOwotICAgIFN0cmluZyB0YXJnZXRPckJhc2VUYXJnZXQgPSBtX2Zv
cm1EYXRhQnVpbGRlci50YXJnZXQoKS5pc0VtcHR5KCkgPyBkb2N1bWVudCgpLT5iYXNlVGFyZ2V0
KCkgOiBtX2Zvcm1EYXRhQnVpbGRlci50YXJnZXQoKTsKLSAgICByZXR1cm4gRm9ybVN1Ym1pc3Np
b246OmNyZWF0ZShtZXRob2QsIGFjdGlvblVSTCwgdGFyZ2V0T3JCYXNlVGFyZ2V0LCBtX2Zvcm1E
YXRhQnVpbGRlci5lbmNvZGluZ1R5cGUoKSwgRm9ybVN0YXRlOjpjcmVhdGUodGhpcywgZm9ybVZh
bHVlcywgZG9jdW1lbnQoKS0+ZnJhbWUoKSwgdHJpZ2dlciksIGZvcm1EYXRhLnJlbGVhc2UoKSwg
Ym91bmRhcnksIGxvY2tIaXN0b3J5LCBldmVudCk7Ci19Ci0KIHN0YXRpYyBpbmxpbmUgSFRNTEZv
cm1Db250cm9sRWxlbWVudCogc3VibWl0RWxlbWVudEZyb21FdmVudChjb25zdCBFdmVudCogZXZl
bnQpCiB7CiAgICAgTm9kZSogdGFyZ2V0Tm9kZSA9IGV2ZW50LT50YXJnZXQoKS0+dG9Ob2RlKCk7
CkBAIC0zODcsNyArMzA1LDcgQEAgdm9pZCBIVE1MRm9ybUVsZW1lbnQ6OnN1Ym1pdChFdmVudCog
ZXZlbnQsIGJvb2wgYWN0aXZhdGVTdWJtaXRCdXR0b24sIGJvb2wgbG9ja0gKICAgICBpZiAobmVl
ZEJ1dHRvbkFjdGl2YXRpb24gJiYgZmlyc3RTdWNjZXNzZnVsU3VibWl0QnV0dG9uKQogICAgICAg
ICBmaXJzdFN1Y2Nlc3NmdWxTdWJtaXRCdXR0b24tPnNldEFjdGl2YXRlZFN1Ym1pdCh0cnVlKTsK
IAotICAgIGZyYW1lLT5sb2FkZXIoKS0+c3VibWl0Rm9ybShwcmVwYXJlRm9ybVN1Ym1pc3Npb24o
ZXZlbnQsIGxvY2tIaXN0b3J5LCBmb3JtU3VibWlzc2lvblRyaWdnZXIpKTsKKyAgICBmcmFtZS0+
bG9hZGVyKCktPnN1Ym1pdEZvcm0oRm9ybVN1Ym1pc3Npb246OmNyZWF0ZSh0aGlzLCBtX3BhcmFt
ZXRlcnMsIGV2ZW50LCBsb2NrSGlzdG9yeSwgZm9ybVN1Ym1pc3Npb25UcmlnZ2VyKSk7CiAKICAg
ICBpZiAobmVlZEJ1dHRvbkFjdGl2YXRpb24gJiYgZmlyc3RTdWNjZXNzZnVsU3VibWl0QnV0dG9u
KQogICAgICAgICBmaXJzdFN1Y2Nlc3NmdWxTdWJtaXRCdXR0b24tPnNldEFjdGl2YXRlZFN1Ym1p
dChmYWxzZSk7CkBAIC00MTksMTcgKzMzNywxNyBAQCB2b2lkIEhUTUxGb3JtRWxlbWVudDo6cmVz
ZXQoKQogdm9pZCBIVE1MRm9ybUVsZW1lbnQ6OnBhcnNlTWFwcGVkQXR0cmlidXRlKEF0dHJpYnV0
ZSogYXR0cikKIHsKICAgICBpZiAoYXR0ci0+bmFtZSgpID09IGFjdGlvbkF0dHIpCi0gICAgICAg
IG1fZm9ybURhdGFCdWlsZGVyLnBhcnNlQWN0aW9uKGF0dHItPnZhbHVlKCkpOworICAgICAgICBt
X3BhcmFtZXRlcnMucGFyc2VBY3Rpb24oYXR0ci0+dmFsdWUoKSk7CiAgICAgZWxzZSBpZiAoYXR0
ci0+bmFtZSgpID09IHRhcmdldEF0dHIpCi0gICAgICAgIG1fZm9ybURhdGFCdWlsZGVyLnNldFRh
cmdldChhdHRyLT52YWx1ZSgpKTsKKyAgICAgICAgbV9wYXJhbWV0ZXJzLnNldFRhcmdldChhdHRy
LT52YWx1ZSgpKTsKICAgICBlbHNlIGlmIChhdHRyLT5uYW1lKCkgPT0gbWV0aG9kQXR0cikKLSAg
ICAgICAgbV9mb3JtRGF0YUJ1aWxkZXIucGFyc2VNZXRob2RUeXBlKGF0dHItPnZhbHVlKCkpOwor
ICAgICAgICBtX3BhcmFtZXRlcnMucGFyc2VNZXRob2RUeXBlKGF0dHItPnZhbHVlKCkpOwogICAg
IGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9PSBlbmN0eXBlQXR0cikKLSAgICAgICAgbV9mb3JtRGF0
YUJ1aWxkZXIucGFyc2VFbmNvZGluZ1R5cGUoYXR0ci0+dmFsdWUoKSk7CisgICAgICAgIG1fcGFy
YW1ldGVycy5wYXJzZUVuY29kaW5nVHlwZShhdHRyLT52YWx1ZSgpKTsKICAgICBlbHNlIGlmIChh
dHRyLT5uYW1lKCkgPT0gYWNjZXB0X2NoYXJzZXRBdHRyKQogICAgICAgICAvLyBzcGFjZSBzZXBh
cmF0ZWQgbGlzdCBvZiBjaGFyc2V0cyB0aGUgc2VydmVyCiAgICAgICAgIC8vIGFjY2VwdHMgLSBz
ZWUgcmZjMjA0NQotICAgICAgICBtX2Zvcm1EYXRhQnVpbGRlci5zZXRBY2NlcHRDaGFyc2V0KGF0
dHItPnZhbHVlKCkpOworICAgICAgICBtX3BhcmFtZXRlcnMuc2V0QWNjZXB0Q2hhcnNldChhdHRy
LT52YWx1ZSgpKTsKICAgICBlbHNlIGlmIChhdHRyLT5uYW1lKCkgPT0gYWNjZXB0QXR0cikgewog
ICAgICAgICAvLyBpZ25vcmUgdGhpcyBvbmUgZm9yIHRoZSBtb21lbnQuLi4KICAgICB9IGVsc2Ug
aWYgKGF0dHItPm5hbWUoKSA9PSBhdXRvY29tcGxldGVBdHRyKSB7CmRpZmYgLS1naXQgYS9XZWJD
b3JlL2h0bWwvSFRNTEZvcm1FbGVtZW50LmggYi9XZWJDb3JlL2h0bWwvSFRNTEZvcm1FbGVtZW50
LmgKaW5kZXggYjE5ZmYwNzMyOWY1MDJiNGQ5ZGNjMDAwMWJhZTFhOTU2MTZjMGNkYS4uOWIxYzE5
ZDE0NTE3NmQ4ZGFmOTMzMGYxYTgzOWFhMDNiYWUzMTQ0OSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9o
dG1sL0hUTUxGb3JtRWxlbWVudC5oCisrKyBiL1dlYkNvcmUvaHRtbC9IVE1MRm9ybUVsZW1lbnQu
aApAQCAtMjcsNiArMjcsNyBAQAogI2luY2x1ZGUgIkNoZWNrZWRSYWRpb0J1dHRvbnMuaCIKICNp
bmNsdWRlICJGb3JtRGF0YUJ1aWxkZXIuaCIKICNpbmNsdWRlICJGb3JtU3RhdGUuaCIKKyNpbmNs
dWRlICJGb3JtU3VibWlzc2lvbi5oIgogI2luY2x1ZGUgIkhUTUxFbGVtZW50LmgiCiAjaW5jbHVk
ZSA8d3RmL093blB0ci5oPgogCkBAIC0zNCw3ICszNSw2IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsK
IAogY2xhc3MgRXZlbnQ7CiBjbGFzcyBGb3JtRGF0YTsKLWNsYXNzIEZvcm1TdWJtaXNzaW9uOwog
Y2xhc3MgSFRNTEZvcm1Db250cm9sRWxlbWVudDsKIGNsYXNzIEhUTUxJbWFnZUVsZW1lbnQ7CiBj
bGFzcyBIVE1MSW5wdXRFbGVtZW50OwpAQCAtNTUsMTAgKzU1LDEwIEBAIHB1YmxpYzoKICAgICB1
bnNpZ25lZCBsZW5ndGgoKSBjb25zdDsKICAgICBOb2RlKiBpdGVtKHVuc2lnbmVkIGluZGV4KTsK
IAotICAgIFN0cmluZyBlbmN0eXBlKCkgY29uc3QgeyByZXR1cm4gbV9mb3JtRGF0YUJ1aWxkZXIu
ZW5jb2RpbmdUeXBlKCk7IH0KKyAgICBTdHJpbmcgZW5jdHlwZSgpIGNvbnN0IHsgcmV0dXJuIG1f
cGFyYW1ldGVycy5lbmNvZGluZ1R5cGUoKTsgfQogICAgIHZvaWQgc2V0RW5jdHlwZShjb25zdCBT
dHJpbmcmKTsKIAotICAgIFN0cmluZyBlbmNvZGluZygpIGNvbnN0IHsgcmV0dXJuIG1fZm9ybURh
dGFCdWlsZGVyLmVuY29kaW5nVHlwZSgpOyB9CisgICAgU3RyaW5nIGVuY29kaW5nKCkgY29uc3Qg
eyByZXR1cm4gbV9wYXJhbWV0ZXJzLmVuY29kaW5nVHlwZSgpOyB9CiAgICAgdm9pZCBzZXRFbmNv
ZGluZyhjb25zdCBTdHJpbmcmIHZhbHVlKSB7IHNldEVuY3R5cGUodmFsdWUpOyB9CiAKICAgICBi
b29sIGF1dG9Db21wbGV0ZSgpIGNvbnN0IHsgcmV0dXJuIG1fYXV0b2NvbXBsZXRlOyB9CkBAIC05
MCw3ICs5MCw3IEBAIHB1YmxpYzoKICAgICBib29sIG5vVmFsaWRhdGUoKSBjb25zdDsKICAgICB2
b2lkIHNldE5vVmFsaWRhdGUoYm9vbCk7CiAKLSAgICBTdHJpbmcgYWNjZXB0Q2hhcnNldCgpIGNv
bnN0IHsgcmV0dXJuIG1fZm9ybURhdGFCdWlsZGVyLmFjY2VwdENoYXJzZXQoKTsgfQorICAgIFN0
cmluZyBhY2NlcHRDaGFyc2V0KCkgY29uc3QgeyByZXR1cm4gbV9wYXJhbWV0ZXJzLmFjY2VwdENo
YXJzZXQoKTsgfQogICAgIHZvaWQgc2V0QWNjZXB0Q2hhcnNldChjb25zdCBTdHJpbmcmKTsKIAog
ICAgIFN0cmluZyBhY3Rpb24oKSBjb25zdDsKQEAgLTEzNiw3ICsxMzYsNiBAQCBwcml2YXRlOgog
CiAgICAgdm9pZCBzdWJtaXQoRXZlbnQqLCBib29sIGFjdGl2YXRlU3VibWl0QnV0dG9uLCBib29s
IGxvY2tIaXN0b3J5LCBGb3JtU3VibWlzc2lvblRyaWdnZXIpOwogCi0gICAgUGFzc1JlZlB0cjxG
b3JtU3VibWlzc2lvbj4gcHJlcGFyZUZvcm1TdWJtaXNzaW9uKEV2ZW50KiwgYm9vbCBsb2NrSGlz
dG9yeSwgRm9ybVN1Ym1pc3Npb25UcmlnZ2VyKTsKICAgICB1bnNpZ25lZCBmb3JtRWxlbWVudElu
ZGV4KEhUTUxGb3JtQ29udHJvbEVsZW1lbnQqKTsKICAgICAvLyBSZXR1cm5zIHRydWUgaWYgdGhl
IHN1Ym1pc3Npb24gc2hvdWxkIGJlIHByb2NlZWRlZC4KICAgICBib29sIHZhbGlkYXRlSW50ZXJh
Y3RpdmVseShFdmVudCopOwpAQCAtMTQ4LDcgKzE0Nyw3IEBAIHByaXZhdGU6CiAKICAgICB0eXBl
ZGVmIEhhc2hNYXA8UmVmUHRyPEF0b21pY1N0cmluZ0ltcGw+LCBSZWZQdHI8SFRNTEZvcm1Db250
cm9sRWxlbWVudD4gPiBBbGlhc01hcDsKIAotICAgIEZvcm1EYXRhQnVpbGRlciBtX2Zvcm1EYXRh
QnVpbGRlcjsKKyAgICBGb3JtU3VibWlzc2lvbjo6UGFyYW1ldGVycyBtX3BhcmFtZXRlcnM7CiAg
ICAgT3duUHRyPEFsaWFzTWFwPiBtX2VsZW1lbnRBbGlhc2VzOwogICAgIE93blB0cjxDb2xsZWN0
aW9uQ2FjaGU+IG1fY29sbGVjdGlvbkNhY2hlOwogCmRpZmYgLS1naXQgYS9XZWJDb3JlL2xvYWRl
ci9Gb3JtU3VibWlzc2lvbi5jcHAgYi9XZWJDb3JlL2xvYWRlci9Gb3JtU3VibWlzc2lvbi5jcHAK
aW5kZXggNGQ0NDE3NDJmMjg4NWQ2NzdjYzg3ZDFjYWJjNGQyYzIzYWFmMGZhOS4uMjBkZDUxOGU5
MDU5MmY4OTQyM2UzMTMxOGZmN2Y2NzIxMmU4YjEwYiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9sb2Fk
ZXIvRm9ybVN1Ym1pc3Npb24uY3BwCisrKyBiL1dlYkNvcmUvbG9hZGVyL0Zvcm1TdWJtaXNzaW9u
LmNwcApAQCAtMzEsMTggKzMxLDg0IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAi
Rm9ybVN1Ym1pc3Npb24uaCIKIAorI2luY2x1ZGUgIkNTU0hlbHBlci5oIgorI2luY2x1ZGUgIkRP
TUZvcm1EYXRhLmgiCisjaW5jbHVkZSAiRG9jdW1lbnQuaCIKICNpbmNsdWRlICJFdmVudC5oIgog
I2luY2x1ZGUgIkZvcm1EYXRhLmgiCiAjaW5jbHVkZSAiRm9ybVN0YXRlLmgiCiAjaW5jbHVkZSAi
RnJhbWUuaCIKICNpbmNsdWRlICJGcmFtZUxvYWRSZXF1ZXN0LmgiCiAjaW5jbHVkZSAiRnJhbWVM
b2FkZXIuaCIKKyNpbmNsdWRlICJIVE1MRm9ybUNvbnRyb2xFbGVtZW50LmgiCiAjaW5jbHVkZSAi
SFRNTEZvcm1FbGVtZW50LmgiCisjaW5jbHVkZSAiSFRNTElucHV0RWxlbWVudC5oIgorI2luY2x1
ZGUgIkhUTUxOYW1lcy5oIgorI2luY2x1ZGUgIlRleHRFbmNvZGluZy5oIgogI2luY2x1ZGUgPHd0
Zi9QYXNzUmVmUHRyLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotRm9ybVN1Ym1pc3Npb246
OkZvcm1TdWJtaXNzaW9uKE1ldGhvZCBtZXRob2QsIGNvbnN0IEtVUkwmIGFjdGlvbiwgY29uc3Qg
U3RyaW5nJiB0YXJnZXQsIGNvbnN0IFN0cmluZyYgY29udGVudFR5cGUsIFBhc3NSZWZQdHI8Rm9y
bVN0YXRlPiBzdGF0ZSwgUGFzc1JlZlB0cjxGb3JtRGF0YT4gZGF0YSwgY29uc3QgU3RyaW5nJiBi
b3VuZGFyeSwgYm9vbCBsb2NrSGlzdG9yeSwgUGFzc1JlZlB0cjxFdmVudD4gZXZlbnQpCit1c2lu
ZyBuYW1lc3BhY2UgSFRNTE5hbWVzOworCitzdGF0aWMgaW50NjRfdCBnZW5lcmF0ZUZvcm1EYXRh
SWRlbnRpZmllcigpCit7CisgICAgLy8gSW5pdGlhbGl6ZSB0byB0aGUgY3VycmVudCB0aW1lIHRv
IHJlZHVjZSB0aGUgbGlrZWxpaG9vZCBvZiBnZW5lcmF0aW5nCisgICAgLy8gaWRlbnRpZmllcnMg
dGhhdCBvdmVybGFwIHdpdGggdGhvc2UgZnJvbSBwYXN0L2Z1dHVyZSBicm93c2VyIHNlc3Npb25z
LgorICAgIHN0YXRpYyBpbnQ2NF90IG5leHRJZGVudGlmaWVyID0gc3RhdGljX2Nhc3Q8aW50NjRf
dD4oY3VycmVudFRpbWUoKSAqIDEwMDAwMDAuMCk7CisgICAgcmV0dXJuICsrbmV4dElkZW50aWZp
ZXI7Cit9CisKK3N0YXRpYyB2b2lkIGFwcGVuZE1haWx0b1Bvc3RGb3JtRGF0YVRvVVJMKEtVUkwm
IHVybCwgY29uc3QgRm9ybURhdGEmIGRhdGEsIGNvbnN0IFN0cmluZyYgZW5jb2RpbmdUeXBlKQor
eworICAgIFN0cmluZyBib2R5ID0gZGF0YS5mbGF0dGVuVG9TdHJpbmcoKTsKKworICAgIGlmIChl
cXVhbElnbm9yaW5nQ2FzZShlbmNvZGluZ1R5cGUsICJ0ZXh0L3BsYWluIikpIHsKKyAgICAgICAg
Ly8gQ29udmVudGlvbiBzZWVtcyB0byBiZSB0byBkZWNvZGUsIGFuZCBzLyYvXHJcbi8uIEFsc28s
IHNwYWNlcyBhcmUgZW5jb2RlZCBhcyAlMjAuCisgICAgICAgIGJvZHkgPSBkZWNvZGVVUkxFc2Nh
cGVTZXF1ZW5jZXMoYm9keS5yZXBsYWNlKCcmJywgIlxyXG4iKS5yZXBsYWNlKCcrJywgJyAnKSAr
ICJcclxuIik7CisgICAgfQorCisgICAgVmVjdG9yPGNoYXI+IGJvZHlEYXRhOworICAgIGJvZHlE
YXRhLmFwcGVuZCgiYm9keT0iLCA1KTsKKyAgICBGb3JtRGF0YUJ1aWxkZXI6OmVuY29kZVN0cmlu
Z0FzRm9ybURhdGEoYm9keURhdGEsIGJvZHkudXRmOCgpKTsKKyAgICBib2R5ID0gU3RyaW5nKGJv
ZHlEYXRhLmRhdGEoKSwgYm9keURhdGEuc2l6ZSgpKS5yZXBsYWNlKCcrJywgIiUyMCIpOworCisg
ICAgU3RyaW5nIHF1ZXJ5ID0gdXJsLnF1ZXJ5KCk7CisgICAgaWYgKCFxdWVyeS5pc0VtcHR5KCkp
CisgICAgICAgIHF1ZXJ5LmFwcGVuZCgnJicpOworICAgIHF1ZXJ5LmFwcGVuZChib2R5KTsKKyAg
ICB1cmwuc2V0UXVlcnkocXVlcnkpOworfQorCit2b2lkIEZvcm1TdWJtaXNzaW9uOjpQYXJhbWV0
ZXJzOjpwYXJzZUFjdGlvbihjb25zdCBTdHJpbmcmIGFjdGlvbikKK3sKKyAgICAvLyBGSVhNRTog
Q2FuIHdlIHBhcnNlIGludG8gYSBLVVJMPworICAgIG1fYWN0aW9uID0gZGVwcmVjYXRlZFBhcnNl
VVJMKGFjdGlvbik7Cit9CisKK3ZvaWQgRm9ybVN1Ym1pc3Npb246OlBhcmFtZXRlcnM6OnBhcnNl
RW5jb2RpbmdUeXBlKGNvbnN0IFN0cmluZyYgdHlwZSkKK3sKKyAgICBpZiAodHlwZS5jb250YWlu
cygibXVsdGlwYXJ0IiwgZmFsc2UpIHx8IHR5cGUuY29udGFpbnMoImZvcm0tZGF0YSIsIGZhbHNl
KSkgeworICAgICAgICBtX2VuY29kaW5nVHlwZSA9ICJtdWx0aXBhcnQvZm9ybS1kYXRhIjsKKyAg
ICAgICAgbV9pc011bHRpUGFydEZvcm0gPSB0cnVlOworICAgIH0gZWxzZSBpZiAodHlwZS5jb250
YWlucygidGV4dCIsIGZhbHNlKSB8fCB0eXBlLmNvbnRhaW5zKCJwbGFpbiIsIGZhbHNlKSkgewor
ICAgICAgICBtX2VuY29kaW5nVHlwZSA9ICJ0ZXh0L3BsYWluIjsKKyAgICAgICAgbV9pc011bHRp
UGFydEZvcm0gPSBmYWxzZTsKKyAgICB9IGVsc2UgeworICAgICAgICBtX2VuY29kaW5nVHlwZSA9
ICJhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQiOworICAgICAgICBtX2lzTXVsdGlQ
YXJ0Rm9ybSA9IGZhbHNlOworICAgIH0KK30KKwordm9pZCBGb3JtU3VibWlzc2lvbjo6UGFyYW1l
dGVyczo6cGFyc2VNZXRob2RUeXBlKGNvbnN0IFN0cmluZyYgdHlwZSkKK3sKKyAgICBpZiAoZXF1
YWxJZ25vcmluZ0Nhc2UodHlwZSwgInBvc3QiKSkKKyAgICAgICAgbV9tZXRob2QgPSBGb3JtU3Vi
bWlzc2lvbjo6UG9zdE1ldGhvZDsKKyAgICBlbHNlIGlmIChlcXVhbElnbm9yaW5nQ2FzZSh0eXBl
LCAiZ2V0IikpCisgICAgICAgIG1fbWV0aG9kID0gRm9ybVN1Ym1pc3Npb246OkdldE1ldGhvZDsK
K30KKworaW5saW5lIEZvcm1TdWJtaXNzaW9uOjpGb3JtU3VibWlzc2lvbihNZXRob2QgbWV0aG9k
LCBjb25zdCBLVVJMJiBhY3Rpb24sIGNvbnN0IFN0cmluZyYgdGFyZ2V0LCBjb25zdCBTdHJpbmcm
IGNvbnRlbnRUeXBlLCBQYXNzUmVmUHRyPEZvcm1TdGF0ZT4gc3RhdGUsIFBhc3NSZWZQdHI8Rm9y
bURhdGE+IGRhdGEsIGNvbnN0IFN0cmluZyYgYm91bmRhcnksIGJvb2wgbG9ja0hpc3RvcnksIFBh
c3NSZWZQdHI8RXZlbnQ+IGV2ZW50KQogICAgIDogbV9tZXRob2QobWV0aG9kKQogICAgICwgbV9h
Y3Rpb24oYWN0aW9uKQogICAgICwgbV90YXJnZXQodGFyZ2V0KQpAQCAtNTUsOSArMTIxLDYwIEBA
IEZvcm1TdWJtaXNzaW9uOjpGb3JtU3VibWlzc2lvbihNZXRob2QgbWV0aG9kLCBjb25zdCBLVVJM
JiBhY3Rpb24sIGNvbnN0IFN0cmluZyYKIHsKIH0KIAotUGFzc1JlZlB0cjxGb3JtU3VibWlzc2lv
bj4gRm9ybVN1Ym1pc3Npb246OmNyZWF0ZShNZXRob2QgbWV0aG9kLCBjb25zdCBLVVJMJiBhY3Rp
b24sIGNvbnN0IFN0cmluZyYgdGFyZ2V0LCBjb25zdCBTdHJpbmcmIGNvbnRlbnRUeXBlLCBQYXNz
UmVmUHRyPEZvcm1TdGF0ZT4gc3RhdGUsIFBhc3NSZWZQdHI8Rm9ybURhdGE+IGRhdGEsIGNvbnN0
IFN0cmluZyYgYm91bmRhcnksIGJvb2wgbG9ja0hpc3RvcnksIFBhc3NSZWZQdHI8RXZlbnQ+IGV2
ZW50KQorUGFzc1JlZlB0cjxGb3JtU3VibWlzc2lvbj4gRm9ybVN1Ym1pc3Npb246OmNyZWF0ZShI
VE1MRm9ybUVsZW1lbnQqIGZvcm0sIGNvbnN0IFBhcmFtZXRlcnMmIHBhcmFtZXRlcnMsIFBhc3NS
ZWZQdHI8RXZlbnQ+IGV2ZW50LCBib29sIGxvY2tIaXN0b3J5LCBGb3JtU3VibWlzc2lvblRyaWdn
ZXIgdHJpZ2dlcikKIHsKLSAgICByZXR1cm4gYWRvcHRSZWYobmV3IEZvcm1TdWJtaXNzaW9uKG1l
dGhvZCwgYWN0aW9uLCB0YXJnZXQsIGNvbnRlbnRUeXBlLCBzdGF0ZSwgZGF0YSwgYm91bmRhcnks
IGxvY2tIaXN0b3J5LCBldmVudCkpOworICAgIEFTU0VSVChmb3JtKTsKKyAgICBEb2N1bWVudCog
ZG9jdW1lbnQgPSBmb3JtLT5kb2N1bWVudCgpOworICAgIEtVUkwgYWN0aW9uVVJMID0gZG9jdW1l
bnQtPmNvbXBsZXRlVVJMKHBhcmFtZXRlcnMuYWN0aW9uKCkuaXNFbXB0eSgpID8gZG9jdW1lbnQt
PnVybCgpLnN0cmluZygpIDogcGFyYW1ldGVycy5hY3Rpb24oKSk7CisgICAgYm9vbCBpc01haWx0
b0Zvcm0gPSBhY3Rpb25VUkwucHJvdG9jb2xJcygibWFpbHRvIik7CisgICAgYm9vbCBpc011bHRp
UGFydEZvcm0gPSBmYWxzZTsKKyAgICBTdHJpbmcgZW5jb2RpbmdUeXBlID0gcGFyYW1ldGVycy5l
bmNvZGluZ1R5cGUoKTsKKworICAgIGlmIChwYXJhbWV0ZXJzLm1ldGhvZCgpID09IFBvc3RNZXRo
b2QpIHsKKyAgICAgICAgaXNNdWx0aVBhcnRGb3JtID0gcGFyYW1ldGVycy5pc011bHRpUGFydEZv
cm0oKTsKKyAgICAgICAgaWYgKGlzTXVsdGlQYXJ0Rm9ybSAmJiBpc01haWx0b0Zvcm0pIHsKKyAg
ICAgICAgICAgIGVuY29kaW5nVHlwZSA9ICJhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29k
ZWQiOworICAgICAgICAgICAgaXNNdWx0aVBhcnRGb3JtID0gZmFsc2U7CisgICAgICAgIH0KKyAg
ICB9CisKKyAgICBUZXh0RW5jb2RpbmcgZGF0YUVuY29kaW5nID0gaXNNYWlsdG9Gb3JtID8gVVRG
OEVuY29kaW5nKCkgOiBGb3JtRGF0YUJ1aWxkZXI6OmVuY29kaW5nRnJvbUFjY2VwdENoYXJzZXQo
cGFyYW1ldGVycy5hY2NlcHRDaGFyc2V0KCksIGRvY3VtZW50KTsKKyAgICBSZWZQdHI8RE9NRm9y
bURhdGE+IGRvbUZvcm1EYXRhID0gRE9NRm9ybURhdGE6OmNyZWF0ZShkYXRhRW5jb2RpbmcuZW5j
b2RpbmdGb3JGb3JtU3VibWlzc2lvbigpKTsKKyAgICBWZWN0b3I8cGFpcjxTdHJpbmcsIFN0cmlu
Zz4gPiBmb3JtVmFsdWVzOworCisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGZvcm0tPmFz
c29jaWF0ZWRFbGVtZW50cygpLnNpemUoKTsgKytpKSB7CisgICAgICAgIEhUTUxGb3JtQ29udHJv
bEVsZW1lbnQqIGNvbnRyb2wgPSBmb3JtLT5hc3NvY2lhdGVkRWxlbWVudHMoKVtpXTsKKyAgICAg
ICAgaWYgKCFjb250cm9sLT5kaXNhYmxlZCgpKQorICAgICAgICAgICAgY29udHJvbC0+YXBwZW5k
Rm9ybURhdGEoKmRvbUZvcm1EYXRhLCBpc011bHRpUGFydEZvcm0pOworICAgICAgICBpZiAoY29u
dHJvbC0+aGFzTG9jYWxOYW1lKGlucHV0VGFnKSkgeworICAgICAgICAgICAgSFRNTElucHV0RWxl
bWVudCogaW5wdXQgPSBzdGF0aWNfY2FzdDxIVE1MSW5wdXRFbGVtZW50Kj4oY29udHJvbCk7Cisg
ICAgICAgICAgICBpZiAoaW5wdXQtPmlzVGV4dEZpZWxkKCkpIHsKKyAgICAgICAgICAgICAgICBm
b3JtVmFsdWVzLmFwcGVuZChwYWlyPFN0cmluZywgU3RyaW5nPihpbnB1dC0+bmFtZSgpLCBpbnB1
dC0+dmFsdWUoKSkpOworICAgICAgICAgICAgICAgIGlmIChpbnB1dC0+aXNTZWFyY2hGaWVsZCgp
KQorICAgICAgICAgICAgICAgICAgICBpbnB1dC0+YWRkU2VhcmNoUmVzdWx0KCk7CisgICAgICAg
ICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICBSZWZQdHI8Rm9ybURhdGE+IGZvcm1EYXRh
OworICAgIFN0cmluZyBib3VuZGFyeTsKKworICAgIGlmIChpc011bHRpUGFydEZvcm0pIHsKKyAg
ICAgICAgZm9ybURhdGEgPSBGb3JtRGF0YTo6Y3JlYXRlTXVsdGlQYXJ0KGRvbUZvcm1EYXRhLT5p
dGVtcygpLCBkb21Gb3JtRGF0YS0+ZW5jb2RpbmcoKSwgZG9jdW1lbnQpOworICAgICAgICBib3Vu
ZGFyeSA9IGZvcm1EYXRhLT5ib3VuZGFyeSgpLmRhdGEoKTsKKyAgICB9IGVsc2UgeworICAgICAg
ICBmb3JtRGF0YSA9IEZvcm1EYXRhOjpjcmVhdGUoZG9tRm9ybURhdGEtPml0ZW1zKCksIGRvbUZv
cm1EYXRhLT5lbmNvZGluZygpKTsKKyAgICAgICAgaWYgKHBhcmFtZXRlcnMubWV0aG9kKCkgPT0g
UG9zdE1ldGhvZCAmJiBpc01haWx0b0Zvcm0pIHsKKyAgICAgICAgICAgIC8vIENvbnZlcnQgdGhl
IGZvcm0gZGF0YSBpbnRvIGEgc3RyaW5nIHRoYXQgd2UgcHV0IGludG8gdGhlIFVSTC4KKyAgICAg
ICAgICAgIGFwcGVuZE1haWx0b1Bvc3RGb3JtRGF0YVRvVVJMKGFjdGlvblVSTCwgKmZvcm1EYXRh
LCBlbmNvZGluZ1R5cGUpOworICAgICAgICAgICAgZm9ybURhdGEgPSBGb3JtRGF0YTo6Y3JlYXRl
KCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBmb3JtRGF0YS0+c2V0SWRlbnRpZmllcihnZW5l
cmF0ZUZvcm1EYXRhSWRlbnRpZmllcigpKTsKKyAgICBTdHJpbmcgdGFyZ2V0T3JCYXNlVGFyZ2V0
ID0gcGFyYW1ldGVycy50YXJnZXQoKS5pc0VtcHR5KCkgPyBkb2N1bWVudC0+YmFzZVRhcmdldCgp
IDogcGFyYW1ldGVycy50YXJnZXQoKTsKKyAgICBSZWZQdHI8Rm9ybVN0YXRlPiBmb3JtU3RhdGUg
PSBGb3JtU3RhdGU6OmNyZWF0ZShmb3JtLCBmb3JtVmFsdWVzLCBkb2N1bWVudC0+ZnJhbWUoKSwg
dHJpZ2dlcik7CisgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBGb3JtU3VibWlzc2lvbihwYXJhbWV0
ZXJzLm1ldGhvZCgpLCBhY3Rpb25VUkwsIHRhcmdldE9yQmFzZVRhcmdldCwgZW5jb2RpbmdUeXBl
LCBmb3JtU3RhdGUucmVsZWFzZSgpLCBmb3JtRGF0YS5yZWxlYXNlKCksIGJvdW5kYXJ5LCBsb2Nr
SGlzdG9yeSwgZXZlbnQpKTsKIH0KIAogdm9pZCBGb3JtU3VibWlzc2lvbjo6cG9wdWxhdGVGcmFt
ZUxvYWRSZXF1ZXN0KEZyYW1lTG9hZFJlcXVlc3QmIGZyYW1lUmVxdWVzdCkKZGlmZiAtLWdpdCBh
L1dlYkNvcmUvbG9hZGVyL0Zvcm1TdWJtaXNzaW9uLmggYi9XZWJDb3JlL2xvYWRlci9Gb3JtU3Vi
bWlzc2lvbi5oCmluZGV4IDY0N2M2YzY5M2JiOWQxMDVjMDdjMWI3Y2JkNmI4Y2M3M2ZkYTBmYTku
LjY3NDEwOWZkMDQyNzk4NDNhMWQ3NWZlY2IwNTQ1MWI1NDgyMWU4NDggMTAwNjQ0Ci0tLSBhL1dl
YkNvcmUvbG9hZGVyL0Zvcm1TdWJtaXNzaW9uLmgKKysrIGIvV2ViQ29yZS9sb2FkZXIvRm9ybVN1
Ym1pc3Npb24uaApAQCAtMzEsMzQgKzMxLDY2IEBACiAjaWZuZGVmIEZvcm1TdWJtaXNzaW9uX2gK
ICNkZWZpbmUgRm9ybVN1Ym1pc3Npb25faAogCisjaW5jbHVkZSAiRm9ybVN0YXRlLmgiCiAjaW5j
bHVkZSAiS1VSTC5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKK2NsYXNzIERvY3VtZW50Owog
Y2xhc3MgRXZlbnQ7CiBjbGFzcyBGb3JtRGF0YTsKLWNsYXNzIEZvcm1TdGF0ZTsKIHN0cnVjdCBG
cmFtZUxvYWRSZXF1ZXN0OworY2xhc3MgSFRNTEZvcm1FbGVtZW50OworY2xhc3MgVGV4dEVuY29k
aW5nOwogCiBjbGFzcyBGb3JtU3VibWlzc2lvbiA6IHB1YmxpYyBSZWZDb3VudGVkPEZvcm1TdWJt
aXNzaW9uPiB7CiBwdWJsaWM6Ci0gICAgZW51bSBNZXRob2QgewotICAgICAgICBHZXRNZXRob2Qs
Ci0gICAgICAgIFBvc3RNZXRob2QKKyAgICBlbnVtIE1ldGhvZCB7IEdldE1ldGhvZCwgUG9zdE1l
dGhvZCB9OworCisgICAgY2xhc3MgUGFyYW1ldGVycyA6IHB1YmxpYyBOb25jb3B5YWJsZSB7Cisg
ICAgcHVibGljOgorICAgICAgICBQYXJhbWV0ZXJzKCkKKyAgICAgICAgICAgIDogbV9tZXRob2Qo
Rm9ybVN1Ym1pc3Npb246OkdldE1ldGhvZCkKKyAgICAgICAgICAgICwgbV9pc011bHRpUGFydEZv
cm0oZmFsc2UpCisgICAgICAgICAgICAsIG1fZW5jb2RpbmdUeXBlKCJhcHBsaWNhdGlvbi94LXd3
dy1mb3JtLXVybGVuY29kZWQiKQorICAgICAgICB7CisgICAgICAgIH0KKworICAgICAgICBNZXRo
b2QgbWV0aG9kKCkgY29uc3QgeyByZXR1cm4gbV9tZXRob2Q7IH0KKyAgICAgICAgYm9vbCBpc011
bHRpUGFydEZvcm0oKSBjb25zdCB7IHJldHVybiBtX2lzTXVsdGlQYXJ0Rm9ybTsgfQorICAgICAg
ICBjb25zdCBTdHJpbmcmIGFjdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fYWN0aW9uOyB9CisgICAg
ICAgIGNvbnN0IFN0cmluZyYgdGFyZ2V0KCkgY29uc3QgeyByZXR1cm4gbV90YXJnZXQ7IH0KKyAg
ICAgICAgdm9pZCBzZXRUYXJnZXQoY29uc3QgU3RyaW5nJiB0YXJnZXQpIHsgbV90YXJnZXQgPSB0
YXJnZXQ7IH0KKyAgICAgICAgY29uc3QgU3RyaW5nJiBlbmNvZGluZ1R5cGUoKSBjb25zdCB7IHJl
dHVybiBtX2VuY29kaW5nVHlwZTsgfQorICAgICAgICBjb25zdCBTdHJpbmcmIGFjY2VwdENoYXJz
ZXQoKSBjb25zdCB7IHJldHVybiBtX2FjY2VwdENoYXJzZXQ7IH0KKyAgICAgICAgdm9pZCBzZXRB
Y2NlcHRDaGFyc2V0KGNvbnN0IFN0cmluZyYgdmFsdWUpIHsgbV9hY2NlcHRDaGFyc2V0ID0gdmFs
dWU7IH0KKworICAgICAgICB2b2lkIHBhcnNlQWN0aW9uKGNvbnN0IFN0cmluZyYpOworICAgICAg
ICB2b2lkIHBhcnNlRW5jb2RpbmdUeXBlKGNvbnN0IFN0cmluZyYpOworICAgICAgICB2b2lkIHBh
cnNlTWV0aG9kVHlwZShjb25zdCBTdHJpbmcmKTsKKworICAgIHByaXZhdGU6CisgICAgICAgIE1l
dGhvZCBtX21ldGhvZDsKKyAgICAgICAgYm9vbCBtX2lzTXVsdGlQYXJ0Rm9ybTsKKworICAgICAg
ICBTdHJpbmcgbV9hY3Rpb247CisgICAgICAgIFN0cmluZyBtX3RhcmdldDsKKyAgICAgICAgU3Ry
aW5nIG1fZW5jb2RpbmdUeXBlOworICAgICAgICBTdHJpbmcgbV9hY2NlcHRDaGFyc2V0OwogICAg
IH07CiAKLSAgICBzdGF0aWMgUGFzc1JlZlB0cjxGb3JtU3VibWlzc2lvbj4gY3JlYXRlKE1ldGhv
ZCwgY29uc3QgS1VSTCYgYWN0aW9uLCBjb25zdCBTdHJpbmcmIHRhcmdldCwgY29uc3QgU3RyaW5n
JiBjb250ZW50VHlwZSwgUGFzc1JlZlB0cjxGb3JtU3RhdGU+LCBQYXNzUmVmUHRyPEZvcm1EYXRh
PiwgY29uc3QgU3RyaW5nJiBib3VuZGFyeSwgYm9vbCBsb2NrSGlzdG9yeSwgUGFzc1JlZlB0cjxF
dmVudD4pOworICAgIHN0YXRpYyBQYXNzUmVmUHRyPEZvcm1TdWJtaXNzaW9uPiBjcmVhdGUoSFRN
TEZvcm1FbGVtZW50KiwgY29uc3QgUGFyYW1ldGVycyYsIFBhc3NSZWZQdHI8RXZlbnQ+IGV2ZW50
LCBib29sIGxvY2tIaXN0b3J5LCBGb3JtU3VibWlzc2lvblRyaWdnZXIpOwogCiAgICAgdm9pZCBw
b3B1bGF0ZUZyYW1lTG9hZFJlcXVlc3QoRnJhbWVMb2FkUmVxdWVzdCYpOwogCiAgICAgTWV0aG9k
IG1ldGhvZCgpIGNvbnN0IHsgcmV0dXJuIG1fbWV0aG9kOyB9CiAgICAgY29uc3QgS1VSTCYgYWN0
aW9uKCkgY29uc3QgeyByZXR1cm4gbV9hY3Rpb247IH0KLSAgICBTdHJpbmcgdGFyZ2V0KCkgY29u
c3QgeyByZXR1cm4gbV90YXJnZXQ7IH0KKyAgICBjb25zdCBTdHJpbmcmIHRhcmdldCgpIGNvbnN0
IHsgcmV0dXJuIG1fdGFyZ2V0OyB9CiAgICAgdm9pZCBjbGVhclRhcmdldCgpIHsgbV90YXJnZXQg
PSBTdHJpbmcoKTsgfQotICAgIFN0cmluZyBjb250ZW50VHlwZSgpIGNvbnN0IHsgcmV0dXJuIG1f
Y29udGVudFR5cGU7IH0KKyAgICBjb25zdCBTdHJpbmcmIGNvbnRlbnRUeXBlKCkgY29uc3QgeyBy
ZXR1cm4gbV9jb250ZW50VHlwZTsgfQogICAgIEZvcm1TdGF0ZSogc3RhdGUoKSBjb25zdCB7IHJl
dHVybiBtX2Zvcm1TdGF0ZS5nZXQoKTsgfQogICAgIEZvcm1EYXRhKiBkYXRhKCkgY29uc3QgeyBy
ZXR1cm4gbV9mb3JtRGF0YS5nZXQoKTsgfQotICAgIFN0cmluZyBib3VuZGFyeSgpIGNvbnN0IHsg
cmV0dXJuIG1fYm91bmRhcnk7IH0KKyAgICBjb25zdCBTdHJpbmcgYm91bmRhcnkoKSBjb25zdCB7
IHJldHVybiBtX2JvdW5kYXJ5OyB9CiAgICAgYm9vbCBsb2NrSGlzdG9yeSgpIGNvbnN0IHsgcmV0
dXJuIG1fbG9ja0hpc3Rvcnk7IH0KICAgICBFdmVudCogZXZlbnQoKSBjb25zdCB7IHJldHVybiBt
X2V2ZW50LmdldCgpOyB9CiAKQEAgLTcwLDYgKzEwMiw3IEBAIHB1YmxpYzoKIHByaXZhdGU6CiAg
ICAgRm9ybVN1Ym1pc3Npb24oTWV0aG9kLCBjb25zdCBLVVJMJiBhY3Rpb24sIGNvbnN0IFN0cmlu
ZyYgdGFyZ2V0LCBjb25zdCBTdHJpbmcmIGNvbnRlbnRUeXBlLCBQYXNzUmVmUHRyPEZvcm1TdGF0
ZT4sIFBhc3NSZWZQdHI8Rm9ybURhdGE+LCBjb25zdCBTdHJpbmcmIGJvdW5kYXJ5LCBib29sIGxv
Y2tIaXN0b3J5LCBQYXNzUmVmUHRyPEV2ZW50Pik7CiAKKyAgICAvLyBGSVhNRTogSG9sZCBhbiBp
bnN0YW5jZSBvZiBQYXJhbWV0ZXJzIGluc3RlYWQgb2YgaW5kaXZpZHVhbCBtZW1iZXJzLgogICAg
IE1ldGhvZCBtX21ldGhvZDsKICAgICBLVVJMIG1fYWN0aW9uOwogICAgIFN0cmluZyBtX3Rhcmdl
dDsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9Gb3JtRGF0YUJ1aWxkZXIu
Y3BwIGIvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL0Zvcm1EYXRhQnVpbGRlci5jcHAKaW5kZXgg
ZmI3OGIwOGNjNmNiMTQ5MmExOGY3MGE5MTc4YWJjNDkyMTI0ZjlhNy4uZGEyOGZjMjJhMGY3M2M5
YzgzYjBiZmY2MmVkZGVlMGYzMTQyNDJkZiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9wbGF0Zm9ybS9u
ZXR3b3JrL0Zvcm1EYXRhQnVpbGRlci5jcHAKKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3Jr
L0Zvcm1EYXRhQnVpbGRlci5jcHAKQEAgLTI1LDcgKzI1LDYgQEAKICNpbmNsdWRlICJjb25maWcu
aCIKICNpbmNsdWRlICJGb3JtRGF0YUJ1aWxkZXIuaCIKIAotI2luY2x1ZGUgIkNTU0hlbHBlci5o
IgogI2luY2x1ZGUgIkRvY3VtZW50LmgiCiAjaW5jbHVkZSAiRnJhbWUuaCIKICNpbmNsdWRlICJG
cmFtZUxvYWRlci5oIgpAQCAtMzgsNjcgKzM3LDYgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewog
Ci1Gb3JtRGF0YUJ1aWxkZXI6OkZvcm1EYXRhQnVpbGRlcigpCi0gICAgOiBtX2lzUG9zdE1ldGhv
ZChmYWxzZSkKLSAgICAsIG1faXNNdWx0aVBhcnRGb3JtKGZhbHNlKQotICAgICwgbV9lbmNvZGlu
Z1R5cGUoImFwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZCIpCi17Ci19Ci0KLUZvcm1E
YXRhQnVpbGRlcjo6fkZvcm1EYXRhQnVpbGRlcigpCi17Ci19Ci0KLXZvaWQgRm9ybURhdGFCdWls
ZGVyOjpwYXJzZUFjdGlvbihjb25zdCBTdHJpbmcmIGFjdGlvbikKLXsKLSAgICAvLyBGSVhNRTog
Q2FuIHdlIHBhcnNlIGludG8gYSBLVVJMPwotICAgIG1fYWN0aW9uID0gZGVwcmVjYXRlZFBhcnNl
VVJMKGFjdGlvbik7Ci19Ci0KLXZvaWQgRm9ybURhdGFCdWlsZGVyOjpwYXJzZUVuY29kaW5nVHlw
ZShjb25zdCBTdHJpbmcmIHR5cGUpCi17Ci0gICAgaWYgKHR5cGUuY29udGFpbnMoIm11bHRpcGFy
dCIsIGZhbHNlKSB8fCB0eXBlLmNvbnRhaW5zKCJmb3JtLWRhdGEiLCBmYWxzZSkpIHsKLSAgICAg
ICAgbV9lbmNvZGluZ1R5cGUgPSAibXVsdGlwYXJ0L2Zvcm0tZGF0YSI7Ci0gICAgICAgIG1faXNN
dWx0aVBhcnRGb3JtID0gdHJ1ZTsKLSAgICB9IGVsc2UgaWYgKHR5cGUuY29udGFpbnMoInRleHQi
LCBmYWxzZSkgfHwgdHlwZS5jb250YWlucygicGxhaW4iLCBmYWxzZSkpIHsKLSAgICAgICAgbV9l
bmNvZGluZ1R5cGUgPSAidGV4dC9wbGFpbiI7Ci0gICAgICAgIG1faXNNdWx0aVBhcnRGb3JtID0g
ZmFsc2U7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgbV9lbmNvZGluZ1R5cGUgPSAiYXBwbGljYXRp
b24veC13d3ctZm9ybS11cmxlbmNvZGVkIjsKLSAgICAgICAgbV9pc011bHRpUGFydEZvcm0gPSBm
YWxzZTsKLSAgICB9Ci19Ci0KLXZvaWQgRm9ybURhdGFCdWlsZGVyOjpwYXJzZU1ldGhvZFR5cGUo
Y29uc3QgU3RyaW5nJiB0eXBlKQotewotICAgIGlmIChlcXVhbElnbm9yaW5nQ2FzZSh0eXBlLCAi
cG9zdCIpKQotICAgICAgICBtX2lzUG9zdE1ldGhvZCA9IHRydWU7Ci0gICAgZWxzZSBpZiAoZXF1
YWxJZ25vcmluZ0Nhc2UodHlwZSwgImdldCIpKQotICAgICAgICBtX2lzUG9zdE1ldGhvZCA9IGZh
bHNlOwotfQotCi1UZXh0RW5jb2RpbmcgRm9ybURhdGFCdWlsZGVyOjpkYXRhRW5jb2RpbmcoRG9j
dW1lbnQqIGRvY3VtZW50KSBjb25zdAotewotICAgIFN0cmluZyBhY2NlcHRDaGFyc2V0ID0gbV9h
Y2NlcHRDaGFyc2V0OwotICAgIGFjY2VwdENoYXJzZXQucmVwbGFjZSgnLCcsICcgJyk7Ci0KLSAg
ICBWZWN0b3I8U3RyaW5nPiBjaGFyc2V0czsKLSAgICBhY2NlcHRDaGFyc2V0LnNwbGl0KCcgJywg
Y2hhcnNldHMpOwotCi0gICAgVGV4dEVuY29kaW5nIGVuY29kaW5nOwotCi0gICAgVmVjdG9yPFN0
cmluZz46OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IGNoYXJzZXRzLmVuZCgpOwotICAgIGZvciAoVmVj
dG9yPFN0cmluZz46OmNvbnN0X2l0ZXJhdG9yIGl0ID0gY2hhcnNldHMuYmVnaW4oKTsgaXQgIT0g
ZW5kOyArK2l0KSB7Ci0gICAgICAgIGlmICgoZW5jb2RpbmcgPSBUZXh0RW5jb2RpbmcoKml0KSku
aXNWYWxpZCgpKQotICAgICAgICAgICAgcmV0dXJuIGVuY29kaW5nOwotICAgIH0KLQotICAgIGlm
IChGcmFtZSogZnJhbWUgPSBkb2N1bWVudC0+ZnJhbWUoKSkKLSAgICAgICAgcmV0dXJuIGZyYW1l
LT5sb2FkZXIoKS0+d3JpdGVyKCktPmVuY29kaW5nKCk7Ci0KLSAgICByZXR1cm4gTGF0aW4xRW5j
b2RpbmcoKTsKLX0KLQogLy8gSGVscGVyIGZ1bmN0aW9ucwogc3RhdGljIGlubGluZSB2b2lkIGFw
cGVuZChWZWN0b3I8Y2hhcj4mIGJ1ZmZlciwgY2hhciBzdHJpbmcpCiB7CkBAIC0xNDAsNiArNzgs
MjggQEAgc3RhdGljIHZvaWQgYXBwZW5kUXVvdGVkU3RyaW5nKFZlY3RvcjxjaGFyPiYgYnVmZmVy
LCBjb25zdCBDU3RyaW5nJiBzdHJpbmcpCiAgICAgfQogfQogCitUZXh0RW5jb2RpbmcgRm9ybURh
dGFCdWlsZGVyOjplbmNvZGluZ0Zyb21BY2NlcHRDaGFyc2V0KGNvbnN0IFN0cmluZyYgYWNjZXB0
Q2hhcnNldCwgRG9jdW1lbnQqIGRvY3VtZW50KQoreworICAgIFN0cmluZyBub3JtYWxpemVkQWNj
ZXB0Q2hhcnNldCA9IGFjY2VwdENoYXJzZXQ7CisgICAgbm9ybWFsaXplZEFjY2VwdENoYXJzZXQu
cmVwbGFjZSgnLCcsICcgJyk7CisKKyAgICBWZWN0b3I8U3RyaW5nPiBjaGFyc2V0czsKKyAgICBu
b3JtYWxpemVkQWNjZXB0Q2hhcnNldC5zcGxpdCgnICcsIGNoYXJzZXRzKTsKKworICAgIFRleHRF
bmNvZGluZyBlbmNvZGluZzsKKworICAgIFZlY3RvcjxTdHJpbmc+Ojpjb25zdF9pdGVyYXRvciBl
bmQgPSBjaGFyc2V0cy5lbmQoKTsKKyAgICBmb3IgKFZlY3RvcjxTdHJpbmc+Ojpjb25zdF9pdGVy
YXRvciBpdCA9IGNoYXJzZXRzLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgeworICAgICAgICBp
ZiAoKGVuY29kaW5nID0gVGV4dEVuY29kaW5nKCppdCkpLmlzVmFsaWQoKSkKKyAgICAgICAgICAg
IHJldHVybiBlbmNvZGluZzsKKyAgICB9CisKKyAgICBpZiAoRnJhbWUqIGZyYW1lID0gZG9jdW1l
bnQtPmZyYW1lKCkpCisgICAgICAgIHJldHVybiBmcmFtZS0+bG9hZGVyKCktPndyaXRlcigpLT5l
bmNvZGluZygpOworCisgICAgcmV0dXJuIExhdGluMUVuY29kaW5nKCk7Cit9CisKIFZlY3Rvcjxj
aGFyPiBGb3JtRGF0YUJ1aWxkZXI6OmdlbmVyYXRlVW5pcXVlQm91bmRhcnlTdHJpbmcoKQogewog
ICAgIFZlY3RvcjxjaGFyPiBib3VuZGFyeTsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0v
bmV0d29yay9Gb3JtRGF0YUJ1aWxkZXIuaCBiL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9Gb3Jt
RGF0YUJ1aWxkZXIuaAppbmRleCA1NTk5MDZlMDA5MzBmNWJhNWJmZDA1ZmYwMjc4NmEzYzRmNDk3
MDBkLi4yNmI5MGFmYjA3ZTM0OWIyZDdmY2MxZjM0NjdmZGViYmVkNjYwNjNkIDEwMDY0NAotLS0g
YS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvRm9ybURhdGFCdWlsZGVyLmgKKysrIGIvV2ViQ29y
ZS9wbGF0Zm9ybS9uZXR3b3JrL0Zvcm1EYXRhQnVpbGRlci5oCkBAIC0zNiwzMSArMzYsNyBAQCBj
bGFzcyBUZXh0RW5jb2Rpbmc7CiAKIGNsYXNzIEZvcm1EYXRhQnVpbGRlciA6IHB1YmxpYyBOb25j
b3B5YWJsZSB7CiBwdWJsaWM6Ci0gICAgRm9ybURhdGFCdWlsZGVyKCk7Ci0gICAgfkZvcm1EYXRh
QnVpbGRlcigpOwotCi0gICAgYm9vbCBpc1Bvc3RNZXRob2QoKSBjb25zdCB7IHJldHVybiBtX2lz
UG9zdE1ldGhvZDsgfQotICAgIHZvaWQgc2V0SXNQb3N0TWV0aG9kKGJvb2wgdmFsdWUpIHsgbV9p
c1Bvc3RNZXRob2QgPSB2YWx1ZTsgfQotCi0gICAgYm9vbCBpc011bHRpUGFydEZvcm0oKSBjb25z
dCB7IHJldHVybiBtX2lzTXVsdGlQYXJ0Rm9ybTsgfQotICAgIHZvaWQgc2V0SXNNdWx0aVBhcnRG
b3JtKGJvb2wgdmFsdWUpIHsgbV9pc011bHRpUGFydEZvcm0gPSB2YWx1ZTsgfQotCi0gICAgY29u
c3QgU3RyaW5nJiBhY3Rpb24oKSBjb25zdCB7IHJldHVybiBtX2FjdGlvbjsgfQotCi0gICAgY29u
c3QgU3RyaW5nJiB0YXJnZXQoKSBjb25zdCB7IHJldHVybiBtX3RhcmdldDsgfQotICAgIHZvaWQg
c2V0VGFyZ2V0KGNvbnN0IFN0cmluZyYgdGFyZ2V0KSB7IG1fdGFyZ2V0ID0gdGFyZ2V0OyB9Ci0K
LSAgICBTdHJpbmcgZW5jb2RpbmdUeXBlKCkgY29uc3QgeyByZXR1cm4gbV9lbmNvZGluZ1R5cGU7
IH0KLSAgICB2b2lkIHNldEVuY29kaW5nVHlwZShjb25zdCBTdHJpbmcmIHZhbHVlKSB7IG1fZW5j
b2RpbmdUeXBlID0gdmFsdWU7IH0KLQotICAgIFN0cmluZyBhY2NlcHRDaGFyc2V0KCkgY29uc3Qg
eyByZXR1cm4gbV9hY2NlcHRDaGFyc2V0OyB9Ci0gICAgdm9pZCBzZXRBY2NlcHRDaGFyc2V0KGNv
bnN0IFN0cmluZyYgdmFsdWUpIHsgbV9hY2NlcHRDaGFyc2V0ID0gdmFsdWU7IH0KLQotICAgIHZv
aWQgcGFyc2VBY3Rpb24oY29uc3QgU3RyaW5nJik7Ci0gICAgdm9pZCBwYXJzZUVuY29kaW5nVHlw
ZShjb25zdCBTdHJpbmcmKTsKLSAgICB2b2lkIHBhcnNlTWV0aG9kVHlwZShjb25zdCBTdHJpbmcm
KTsKLQotICAgIFRleHRFbmNvZGluZyBkYXRhRW5jb2RpbmcoRG9jdW1lbnQqKSBjb25zdDsKKyAg
ICBzdGF0aWMgVGV4dEVuY29kaW5nIGVuY29kaW5nRnJvbUFjY2VwdENoYXJzZXQoY29uc3QgU3Ry
aW5nJiBhY2NlcHRDaGFyc2V0LCBEb2N1bWVudCogZG9jdW1lbnQpOwogCiAgICAgLy8gSGVscGVy
IGZ1bmN0aW9ucyB1c2VkIGJ5IEhUTUxGb3JtRWxlbWVudC9XTUxHb0VsZW1lbnQgZm9yIG11bHRp
LXBhcnQgZm9ybSBkYXRhCiAgICAgc3RhdGljIFZlY3RvcjxjaGFyPiBnZW5lcmF0ZVVuaXF1ZUJv
dW5kYXJ5U3RyaW5nKCk7CkBAIC03NSwxMyArNTEsNyBAQCBwdWJsaWM6CiAgICAgc3RhdGljIHZv
aWQgZW5jb2RlU3RyaW5nQXNGb3JtRGF0YShWZWN0b3I8Y2hhcj4mLCBjb25zdCBXVEY6OkNTdHJp
bmcmKTsKIAogcHJpdmF0ZToKLSAgICBib29sIG1faXNQb3N0TWV0aG9kOwotICAgIGJvb2wgbV9p
c011bHRpUGFydEZvcm07Ci0KLSAgICBTdHJpbmcgbV9hY3Rpb247Ci0gICAgU3RyaW5nIG1fdGFy
Z2V0OwotICAgIFN0cmluZyBtX2VuY29kaW5nVHlwZTsKLSAgICBTdHJpbmcgbV9hY2NlcHRDaGFy
c2V0OworICAgIEZvcm1EYXRhQnVpbGRlcigpIHt9CiB9OwogCiB9CmRpZmYgLS1naXQgYS9XZWJD
b3JlL3dtbC9XTUxHb0VsZW1lbnQuY3BwIGIvV2ViQ29yZS93bWwvV01MR29FbGVtZW50LmNwcApp
bmRleCBkYjQ4ODBjNDE4YjMyMjZhNDY5MDE0NGYxMGY2Yzg4MDVmYzViZWFkLi4xOGY0YmQxMGI4
MWVjNTYyMTY2ZTdhMmM0MTVhMmNhZDU0YThmNGUwIDEwMDY0NAotLS0gYS9XZWJDb3JlL3dtbC9X
TUxHb0VsZW1lbnQuY3BwCisrKyBiL1dlYkNvcmUvd21sL1dNTEdvRWxlbWVudC5jcHAKQEAgLTI1
LDYgKzI1LDcgQEAKIAogI2luY2x1ZGUgIkF0dHJpYnV0ZS5oIgogI2luY2x1ZGUgIkZvcm1EYXRh
LmgiCisjaW5jbHVkZSAiRm9ybVN1Ym1pc3Npb24uaCIKICNpbmNsdWRlICJGcmFtZS5oIgogI2lu
Y2x1ZGUgIkZyYW1lTG9hZGVyLmgiCiAjaW5jbHVkZSAiSFRNTE5hbWVzLmgiCkBAIC02NCwxMSAr
NjUsMTEgQEAgdm9pZCBXTUxHb0VsZW1lbnQ6OmRlcmVnaXN0ZXJQb3N0ZmllbGRFbGVtZW50KFdN
TFBvc3RmaWVsZEVsZW1lbnQqIHBvc3RmaWVsZCkKIHZvaWQgV01MR29FbGVtZW50OjpwYXJzZU1h
cHBlZEF0dHJpYnV0ZShBdHRyaWJ1dGUqIGF0dHIpCiB7CiAgICAgaWYgKGF0dHItPm5hbWUoKSA9
PSBIVE1MTmFtZXM6Om1ldGhvZEF0dHIpCi0gICAgICAgIG1fZm9ybURhdGFCdWlsZGVyLnBhcnNl
TWV0aG9kVHlwZShhdHRyLT52YWx1ZSgpKTsKKyAgICAgICAgbV9mb3JtUGFyYW1ldGVycy5wYXJz
ZU1ldGhvZFR5cGUoYXR0ci0+dmFsdWUoKSk7CiAgICAgZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09
IEhUTUxOYW1lczo6ZW5jdHlwZUF0dHIpCi0gICAgICAgIG1fZm9ybURhdGFCdWlsZGVyLnBhcnNl
RW5jb2RpbmdUeXBlKHBhcnNlVmFsdWVTdWJzdGl0dXRpbmdWYXJpYWJsZVJlZmVyZW5jZXMoYXR0
ci0+dmFsdWUoKSkpOworICAgICAgICBtX2Zvcm1QYXJhbWV0ZXJzLnBhcnNlRW5jb2RpbmdUeXBl
KHBhcnNlVmFsdWVTdWJzdGl0dXRpbmdWYXJpYWJsZVJlZmVyZW5jZXMoYXR0ci0+dmFsdWUoKSkp
OwogICAgIGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9PSBIVE1MTmFtZXM6OmFjY2VwdF9jaGFyc2V0
QXR0cikKLSAgICAgICAgbV9mb3JtRGF0YUJ1aWxkZXIuc2V0QWNjZXB0Q2hhcnNldChwYXJzZVZh
bHVlRm9yYmlkZGluZ1ZhcmlhYmxlUmVmZXJlbmNlcyhhdHRyLT52YWx1ZSgpKSk7CisgICAgICAg
IG1fZm9ybVBhcmFtZXRlcnMuc2V0QWNjZXB0Q2hhcnNldChwYXJzZVZhbHVlRm9yYmlkZGluZ1Zh
cmlhYmxlUmVmZXJlbmNlcyhhdHRyLT52YWx1ZSgpKSk7CiAgICAgZWxzZQogICAgICAgICBXTUxU
YXNrRWxlbWVudDo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUoYXR0cik7CiB9CkBAIC0xMjYsNyArMTI3
LDcgQEAgdm9pZCBXTUxHb0VsZW1lbnQ6OmV4ZWN1dGVUYXNrKCkKIAogICAgIFN0cmluZyBjYWNo
ZUNvbnRyb2wgPSBnZXRBdHRyaWJ1dGUoY2FjaGVfY29udHJvbEF0dHIpOwogCi0gICAgaWYgKG1f
Zm9ybURhdGFCdWlsZGVyLmlzUG9zdE1ldGhvZCgpKQorICAgIGlmIChtX2Zvcm1QYXJhbWV0ZXJz
Lm1ldGhvZCgpID09IEZvcm1TdWJtaXNzaW9uOjpQb3N0TWV0aG9kKQogICAgICAgICBwcmVwYXJl
UE9TVFJlcXVlc3QocmVxdWVzdCwgaW5TYW1lRGVjaywgY2FjaGVDb250cm9sKTsKICAgICBlbHNl
CiAgICAgICAgIHByZXBhcmVHRVRSZXF1ZXN0KHJlcXVlc3QsIHVybCk7CkBAIC0xNTMsMTQgKzE1
NCwxNCBAQCB2b2lkIFdNTEdvRWxlbWVudDo6cHJlcGFyZVBPU1RSZXF1ZXN0KFJlc291cmNlUmVx
dWVzdCYgcmVxdWVzdCwgYm9vbCBpblNhbWVEZWNrLAogCiAgICAgUmVmUHRyPEZvcm1EYXRhPiBk
YXRhOwogCi0gICAgaWYgKG1fZm9ybURhdGFCdWlsZGVyLmlzTXVsdGlQYXJ0Rm9ybSgpKSB7IC8v
IG11bHRpcGFydC9mb3JtLWRhdGEKLSAgICAgICAgVmVjdG9yPGNoYXI+IGJvdW5kYXJ5ID0gbV9m
b3JtRGF0YUJ1aWxkZXIuZ2VuZXJhdGVVbmlxdWVCb3VuZGFyeVN0cmluZygpOworICAgIGlmICht
X2Zvcm1QYXJhbWV0ZXJzLmlzTXVsdGlQYXJ0Rm9ybSgpKSB7IC8vIG11bHRpcGFydC9mb3JtLWRh
dGEKKyAgICAgICAgVmVjdG9yPGNoYXI+IGJvdW5kYXJ5ID0gRm9ybURhdGFCdWlsZGVyOjpnZW5l
cmF0ZVVuaXF1ZUJvdW5kYXJ5U3RyaW5nKCk7CiAgICAgICAgIGRhdGEgPSBjcmVhdGVGb3JtRGF0
YShib3VuZGFyeS5kYXRhKCkpOwotICAgICAgICByZXF1ZXN0LnNldEhUVFBDb250ZW50VHlwZSht
X2Zvcm1EYXRhQnVpbGRlci5lbmNvZGluZ1R5cGUoKSArICI7IGJvdW5kYXJ5PSIgKyBib3VuZGFy
eS5kYXRhKCkpOworICAgICAgICByZXF1ZXN0LnNldEhUVFBDb250ZW50VHlwZShtX2Zvcm1QYXJh
bWV0ZXJzLmVuY29kaW5nVHlwZSgpICsgIjsgYm91bmRhcnk9IiArIGJvdW5kYXJ5LmRhdGEoKSk7
CiAgICAgfSBlbHNlIHsKICAgICAgICAgLy8gdGV4dC9wbGFpbiBvciBhcHBsaWNhdGlvbi94LXd3
dy1mb3JtLXVybGVuY29kZWQKICAgICAgICAgZGF0YSA9IGNyZWF0ZUZvcm1EYXRhKENTdHJpbmco
KSk7Ci0gICAgICAgIHJlcXVlc3Quc2V0SFRUUENvbnRlbnRUeXBlKG1fZm9ybURhdGFCdWlsZGVy
LmVuY29kaW5nVHlwZSgpKTsKKyAgICAgICAgcmVxdWVzdC5zZXRIVFRQQ29udGVudFR5cGUobV9m
b3JtUGFyYW1ldGVycy5lbmNvZGluZ1R5cGUoKSk7CiAgICAgfQogCiAgICAgcmVxdWVzdC5zZXRI
VFRQQm9keShkYXRhLmdldCgpKTsKQEAgLTE3MSw3ICsxNzIsNyBAQCB2b2lkIFdNTEdvRWxlbWVu
dDo6cHJlcGFyZUdFVFJlcXVlc3QoUmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0LCBjb25zdCBLVVJM
JiB1cmwpCiAgICAgcmVxdWVzdC5zZXRIVFRQTWV0aG9kKCJHRVQiKTsKIAogICAgIC8vIEV2ZW50
dWFsbHkgZGlzcGxheSBlcnJvciBtZXNzYWdlPwotICAgIGlmIChtX2Zvcm1EYXRhQnVpbGRlci5p
c011bHRpUGFydEZvcm0oKSkKKyAgICBpZiAobV9mb3JtUGFyYW1ldGVycy5pc011bHRpUGFydEZv
cm0oKSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgUmVmUHRyPEZvcm1EYXRhPiBkYXRhID0gY3Jl
YXRlRm9ybURhdGEoQ1N0cmluZygpKTsKQEAgLTE4Nyw3ICsxODgsNyBAQCBQYXNzUmVmUHRyPEZv
cm1EYXRhPiBXTUxHb0VsZW1lbnQ6OmNyZWF0ZUZvcm1EYXRhKGNvbnN0IENTdHJpbmcmIGJvdW5k
YXJ5KQogICAgIENTdHJpbmcgdmFsdWU7CiAKICAgICBWZWN0b3I8Y2hhcj4gZW5jb2RlZERhdGE7
Ci0gICAgVGV4dEVuY29kaW5nIGVuY29kaW5nID0gbV9mb3JtRGF0YUJ1aWxkZXIuZGF0YUVuY29k
aW5nKGRvY3VtZW50KCkpLmVuY29kaW5nRm9yRm9ybVN1Ym1pc3Npb24oKTsKKyAgICBUZXh0RW5j
b2RpbmcgZW5jb2RpbmcgPSBGb3JtRGF0YUJ1aWxkZXI6OmVuY29kaW5nRnJvbUFjY2VwdENoYXJz
ZXQobV9mb3JtUGFyYW1ldGVycy5hY2NlcHRDaGFyc2V0KCksIGRvY3VtZW50KCkpLmVuY29kaW5n
Rm9yRm9ybVN1Ym1pc3Npb24oKTsKIAogICAgIFZlY3RvcjxXTUxQb3N0ZmllbGRFbGVtZW50Kj46
Oml0ZXJhdG9yIGl0ID0gbV9wb3N0ZmllbGRFbGVtZW50cy5iZWdpbigpOwogICAgIFZlY3RvcjxX
TUxQb3N0ZmllbGRFbGVtZW50Kj46Oml0ZXJhdG9yIGVuZCA9IG1fcG9zdGZpZWxkRWxlbWVudHMu
ZW5kKCk7CkBAIC0xOTYsMTAgKzE5NywxMCBAQCBQYXNzUmVmUHRyPEZvcm1EYXRhPiBXTUxHb0Vs
ZW1lbnQ6OmNyZWF0ZUZvcm1EYXRhKGNvbnN0IENTdHJpbmcmIGJvdW5kYXJ5KQogICAgIGZvciAo
OyBpdCAhPSBlbmQ7ICsraXQpIHsKICAgICAgICAgKCppdCktPmVuY29kZURhdGEoZW5jb2Rpbmcs
IGtleSwgdmFsdWUpOwogCi0gICAgICAgIGlmIChtX2Zvcm1EYXRhQnVpbGRlci5pc011bHRpUGFy
dEZvcm0oKSkgeworICAgICAgICBpZiAobV9mb3JtUGFyYW1ldGVycy5pc011bHRpUGFydEZvcm0o
KSkgewogICAgICAgICAgICAgVmVjdG9yPGNoYXI+IGhlYWRlcjsKLSAgICAgICAgICAgIG1fZm9y
bURhdGFCdWlsZGVyLmJlZ2luTXVsdGlQYXJ0SGVhZGVyKGhlYWRlciwgYm91bmRhcnksIGtleSk7
Ci0gICAgICAgICAgICBtX2Zvcm1EYXRhQnVpbGRlci5maW5pc2hNdWx0aVBhcnRIZWFkZXIoaGVh
ZGVyKTsKKyAgICAgICAgICAgIEZvcm1EYXRhQnVpbGRlcjo6YmVnaW5NdWx0aVBhcnRIZWFkZXIo
aGVhZGVyLCBib3VuZGFyeSwga2V5KTsKKyAgICAgICAgICAgIEZvcm1EYXRhQnVpbGRlcjo6Zmlu
aXNoTXVsdGlQYXJ0SGVhZGVyKGhlYWRlcik7CiAgICAgICAgICAgICByZXN1bHQtPmFwcGVuZERh
dGEoaGVhZGVyLmRhdGEoKSwgaGVhZGVyLnNpemUoKSk7CiAKICAgICAgICAgICAgIGlmIChzaXpl
X3QgZGF0YVNpemUgPSB2YWx1ZS5sZW5ndGgoKSkKQEAgLTIwNywxMSArMjA4LDExIEBAIFBhc3NS
ZWZQdHI8Rm9ybURhdGE+IFdNTEdvRWxlbWVudDo6Y3JlYXRlRm9ybURhdGEoY29uc3QgQ1N0cmlu
ZyYgYm91bmRhcnkpCiAKICAgICAgICAgICAgIHJlc3VsdC0+YXBwZW5kRGF0YSgiXHJcbiIsIDIp
OwogICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgIG1fZm9ybURhdGFCdWlsZGVyLmFkZEtleVZh
bHVlUGFpckFzRm9ybURhdGEoZW5jb2RlZERhdGEsIGtleSwgdmFsdWUpOworICAgICAgICAgICAg
Rm9ybURhdGFCdWlsZGVyOjphZGRLZXlWYWx1ZVBhaXJBc0Zvcm1EYXRhKGVuY29kZWREYXRhLCBr
ZXksIHZhbHVlKTsKICAgICB9CiAKLSAgICBpZiAobV9mb3JtRGF0YUJ1aWxkZXIuaXNNdWx0aVBh
cnRGb3JtKCkpCi0gICAgICAgIG1fZm9ybURhdGFCdWlsZGVyLmFkZEJvdW5kYXJ5VG9NdWx0aVBh
cnRIZWFkZXIoZW5jb2RlZERhdGEsIGJvdW5kYXJ5LCB0cnVlKTsKKyAgICBpZiAobV9mb3JtUGFy
YW1ldGVycy5pc011bHRpUGFydEZvcm0oKSkKKyAgICAgICAgRm9ybURhdGFCdWlsZGVyOjphZGRC
b3VuZGFyeVRvTXVsdGlQYXJ0SGVhZGVyKGVuY29kZWREYXRhLCBib3VuZGFyeSwgdHJ1ZSk7CiAK
ICAgICByZXN1bHQtPmFwcGVuZERhdGEoZW5jb2RlZERhdGEuZGF0YSgpLCBlbmNvZGVkRGF0YS5z
aXplKCkpOwogICAgIHJldHVybiByZXN1bHQ7CmRpZmYgLS1naXQgYS9XZWJDb3JlL3dtbC9XTUxH
b0VsZW1lbnQuaCBiL1dlYkNvcmUvd21sL1dNTEdvRWxlbWVudC5oCmluZGV4IGY2MDJhMzk1OGE2
MWI2ZTU2OTQyOTAwMTlmOTBjY2Y1MTU1ZjQzMTcuLmI2OTc5MDBmNzc1NzNkNGJmYjNjMTUyMGQx
ZTlkYzExYTRmZGJlZTAgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvd21sL1dNTEdvRWxlbWVudC5oCisr
KyBiL1dlYkNvcmUvd21sL1dNTEdvRWxlbWVudC5oCkBAIC0yMyw2ICsyMyw3IEBACiAKICNpZiBF
TkFCTEUoV01MKQogI2luY2x1ZGUgIkZvcm1EYXRhQnVpbGRlci5oIgorI2luY2x1ZGUgIkZvcm1T
dWJtaXNzaW9uLmgiCiAjaW5jbHVkZSAiV01MVGFza0VsZW1lbnQuaCIKIAogbmFtZXNwYWNlIFdl
YkNvcmUgewpAQCAtNDgsNyArNDksNyBAQCBwcml2YXRlOgogICAgIFBhc3NSZWZQdHI8Rm9ybURh
dGE+IGNyZWF0ZUZvcm1EYXRhKGNvbnN0IENTdHJpbmcmIGJvdW5kYXJ5KTsKIAogICAgIFZlY3Rv
cjxXTUxQb3N0ZmllbGRFbGVtZW50Kj4gbV9wb3N0ZmllbGRFbGVtZW50czsKLSAgICBGb3JtRGF0
YUJ1aWxkZXIgbV9mb3JtRGF0YUJ1aWxkZXI7CisgICAgRm9ybVN1Ym1pc3Npb246OkZvcm1QYXJh
bWV0ZXJzIG1fZm9ybVBhcmFtZXRlcnM7CiB9OwogCiB9Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>59670</attachid>
            <date>2010-06-24 10:26:42 -0700</date>
            <delta_ts>2010-07-12 07:32:27 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-41110-20100624102641.patch</filename>
            <type>text/plain</type>
            <size>36049</size>
            <attacher name="Dimitri Glazkov (Google)">dglazkov</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
MTkwOWRlNzljMTE1YTFhMzgxNDIwOGZkN2ZiMDAxYmU0NTg3YjM1Yi4uYWIzODVmYzA2MWM2NDlm
ZjYzNGNmNWNmZjU4ZmRjYTUwNTE3YzhlZiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cK
KysrIGIvV2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSw1NyBAQAorMjAxMC0wNi0yNCAgRGlt
aXRyaSBHbGF6a292ICA8ZGdsYXprb3ZAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFJldmlld2Vk
IGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIE1vdmUgbW9yZSBmb3JtIHN1Ym1pc3Npb24g
bG9naWMgaW50byBGb3JtU3VibWlzc2lvbi4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTQxMTEwCisKKyAgICAgICAgVHdvIG1ham9yIG1vdmVzOgorICAg
ICAgICAqIEZvbGQgSFRNTEZvcm1FbGVtZW50OjpwcmVwYXJlRm9ybVN1Ym1pc3Npb24gaW50byBG
b3JtU3VibWlzc2lvbjo6Y3JlYXRlCisgICAgICAgICogTW92ZSBub24tc3RhdGljIChub24tRm9y
bURhdGEtYnVpbGRpbmcpIG1ldGhvZHMgb2YgRm9ybURhdGFCdWlsZGVyCisgICAgICAgICAgICB0
byBGb3JtU3VibWlzc2lvbjo6QXR0cmlidXRlcy4KKworICAgICAgICBNZWNoYW5pY2FsIG1vdmlu
Zywgbm8gY2hhbmdlIGluIGJlaGF2aW9yLCBzbyBubyBuZXcgdGVzdHMuCisKKyAgICAgICAgKiBX
ZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6IEdhdmUgRm9ybURhdGFCdWlsZGVyLmgg
InByb2plY3QiIGFuZAorICAgICAgICAgICAgRm9ybVN1Ym1pc3Npb24uaCAicHJpdmF0ZSIgdmlz
aWJpbGl0eS4KKyAgICAgICAgKiBodG1sL0hUTUxGb3JtRWxlbWVudC5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpIVE1MRm9ybUVsZW1lbnQ6OnN1Ym1pdCk6IENoYW5nZWQgdG8gdXNlIEZvcm1TdWJt
aXNzaW9uOjpjcmVhdGUuCisgICAgICAgIChXZWJDb3JlOjpIVE1MRm9ybUVsZW1lbnQ6OnBhcnNl
TWFwcGVkQXR0cmlidXRlKTogQ2hhbmdlZCB0byB1c2UgbV9hdHRyaWJ1dGVzLgorICAgICAgICAq
IGh0bWwvSFRNTEZvcm1FbGVtZW50Lmg6CisgICAgICAgIChXZWJDb3JlOjpIVE1MRm9ybUVsZW1l
bnQ6OmVuY3R5cGUpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkhUTUxGb3JtRWxlbWVudDo6
ZW5jb2RpbmcpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkhUTUxGb3JtRWxlbWVudDo6YWNj
ZXB0Q2hhcnNldCk6IERpdHRvLgorICAgICAgICAqIGxvYWRlci9Gb3JtU3VibWlzc2lvbi5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpnZW5lcmF0ZUZvcm1EYXRhSWRlbnRpZmllcik6IE1vdmVkIGZy
b20gSFRNTEZvcm1FbGVtZW50LgorICAgICAgICAoV2ViQ29yZTo6YXBwZW5kTWFpbHRvUG9zdEZv
cm1EYXRhVG9VUkwpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkZvcm1TdWJtaXNzaW9uOjpB
dHRyaWJ1dGVzOjpwYXJzZUFjdGlvbik6IE1vdmVkIGZyb20gRm9ybURhdGFCdWlsZGVyLgorICAg
ICAgICAoV2ViQ29yZTo6Rm9ybVN1Ym1pc3Npb246OkF0dHJpYnV0ZXM6OnBhcnNlRW5jb2RpbmdU
eXBlKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpGb3JtU3VibWlzc2lvbjo6QXR0cmlidXRl
czo6cGFyc2VNZXRob2RUeXBlKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpGb3JtU3VibWlz
c2lvbjo6Rm9ybVN1Ym1pc3Npb24pOiBNYWRlIGlubGluZS4KKyAgICAgICAgKFdlYkNvcmU6OkZv
cm1TdWJtaXNzaW9uOjpjcmVhdGUpOiBBZGRlZCBsb2dpYyB0aGF0IHVzZWQgdG8gYmUgaW4KKyAg
ICAgICAgICAgIEhUTUxGb3JtRWxlbWVudDo6cHJlcGFyZUZvcm1TdWJtaXNzaW9uLgorICAgICAg
ICAqIGxvYWRlci9Gb3JtU3VibWlzc2lvbi5oOgorICAgICAgICAoV2ViQ29yZTo6Rm9ybVN1Ym1p
c3Npb246Oik6CisgICAgICAgIChXZWJDb3JlOjpGb3JtU3VibWlzc2lvbjo6QXR0cmlidXRlczo6
QXR0cmlidXRlcyk6IEFkZGVkIG5ldyBjbGFzcy4KKyAgICAgICAgKFdlYkNvcmU6OkZvcm1TdWJt
aXNzaW9uOjpBdHRyaWJ1dGVzOjptZXRob2QpOiBNb3ZlZCBmcm9tIEZvcm1EYXRhQnVpbGRlci4K
KyAgICAgICAgKFdlYkNvcmU6OkZvcm1TdWJtaXNzaW9uOjpBdHRyaWJ1dGVzOjppc011bHRpUGFy
dEZvcm0pOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkZvcm1TdWJtaXNzaW9uOjpBdHRyaWJ1
dGVzOjphY3Rpb24pOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkZvcm1TdWJtaXNzaW9uOjpB
dHRyaWJ1dGVzOjp0YXJnZXQpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkZvcm1TdWJtaXNz
aW9uOjpBdHRyaWJ1dGVzOjpzZXRUYXJnZXQpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkZv
cm1TdWJtaXNzaW9uOjpBdHRyaWJ1dGVzOjplbmNvZGluZ1R5cGUpOiBEaXR0by4KKyAgICAgICAg
KFdlYkNvcmU6OkZvcm1TdWJtaXNzaW9uOjpBdHRyaWJ1dGVzOjphY2NlcHRDaGFyc2V0KTogRGl0
dG8uCisgICAgICAgIChXZWJDb3JlOjpGb3JtU3VibWlzc2lvbjo6QXR0cmlidXRlczo6c2V0QWNj
ZXB0Q2hhcnNldCk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6Rm9ybVN1Ym1pc3Npb246OnRh
cmdldCk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6Rm9ybVN1Ym1pc3Npb246OmNvbnRlbnRU
eXBlKTogQ29uc3QtaWZpZWQgcmV0dXJuIHR5cGUuCisgICAgICAgIChXZWJDb3JlOjpGb3JtU3Vi
bWlzc2lvbjo6Ym91bmRhcnkpOiBEaXR0by4KKyAgICAgICAgKiBwbGF0Zm9ybS9uZXR3b3JrL0Zv
cm1EYXRhQnVpbGRlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGb3JtRGF0YUJ1aWxkZXI6OmVu
Y29kaW5nRnJvbUFjY2VwdENoYXJzZXQpOiBSZW5hbWVkIG1ldGhvZCBmb3IgY2xhcml0eSwKKyAg
ICAgICAgICAgIG1hZGUgaXQgdXNlIHBhcmFtIGluc3RlYWQgb2YgYSBjbGFzcyBtZW1iZXIuCisg
ICAgICAgICogcGxhdGZvcm0vbmV0d29yay9Gb3JtRGF0YUJ1aWxkZXIuaDoKKyAgICAgICAgKFdl
YkNvcmU6OkZvcm1EYXRhQnVpbGRlcjo6Rm9ybURhdGFCdWlsZGVyKTogTWFkZSBjb25zdHJ1Y3Rv
ciBwcml2YXRlLgorICAgICAgICAqIHdtbC9XTUxHb0VsZW1lbnQuY3BwOiBDaGFuZ2VkIHRvIHVz
ZSBGb3JtU3VibWlzaW9uOjpBdHRyaWJ1dGVzLgorICAgICAgICAqIHdtbC9XTUxHb0VsZW1lbnQu
aDogRGl0dG8uCisKIDIwMTAtMDYtMDQgIERpbWl0cmkgR2xhemtvdiAgPGRnbGF6a292QGNocm9t
aXVtLm9yZz4KIAogICAgICAgICBSZXZpZXdlZCBieSBEYXJpbiBBZGxlci4KZGlmZiAtLWdpdCBh
L1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qIGIvV2ViQ29yZS9XZWJD
b3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKaW5kZXggNTdmZGM0MTNkZTViODU4NjVhOTRk
YjFjNWI1ZmIwODFiMzE2Nzk5Zi4uNzE5ZjU2OTJjMDQ1Yjg4MWJlMzcxZmU4YmZjYWIwZTY2NDhi
MjFiNiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHBy
b2oKKysrIGIvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKQEAgLTEw
MCw3ICsxMDAsNyBAQAogCQkwODVBRkRDODBGMjk3NzM1MDA2MUYyQjMgLyogV01MRm9ybUNvbnRy
b2xFbGVtZW50LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDA4NUFGREM2MEYyOTc3MzUwMDYxRjJCMyAvKiBXTUxGb3JtQ29udHJvbEVsZW1lbnQuY3Bw
ICovOyB9OwogCQkwODVBRkRDOTBGMjk3NzM1MDA2MUYyQjMgLyogV01MRm9ybUNvbnRyb2xFbGVt
ZW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwODVB
RkRDNzBGMjk3NzM1MDA2MUYyQjMgLyogV01MRm9ybUNvbnRyb2xFbGVtZW50LmggKi87IHNldHRp
bmdzID0ge0FUVFJJQlVURVMgPSAoKTsgfTsgfTsKIAkJMDg1QjkyQkEwRUZERTczRDAwRTYxMjND
IC8qIEZvcm1EYXRhQnVpbGRlci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSAwODVCOTJCODBFRkRFNzNEMDBFNjEyM0MgLyogRm9ybURhdGFCdWlsZGVy
LmNwcCAqLzsgfTsKLQkJMDg1QjkyQkIwRUZERTczRDAwRTYxMjNDIC8qIEZvcm1EYXRhQnVpbGRl
ci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMDg1Qjky
QjkwRUZERTczRDAwRTYxMjNDIC8qIEZvcm1EYXRhQnVpbGRlci5oICovOyBzZXR0aW5ncyA9IHtB
VFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTA4NUI5MkJCMEVGREU3M0QwMEU2MTIz
QyAvKiBGb3JtRGF0YUJ1aWxkZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDA4NUI5MkI5MEVGREU3M0QwMEU2MTIzQyAvKiBGb3JtRGF0YUJ1aWxkZXIu
aCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9ICgpOyB9OyB9OwogCQkwODY1Q0NFNjBFRERG
NTFCMDBERjlFQzMgLyogV01MTm9vcEVsZW1lbnQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMDg2NUNDRTQwRURERjUxQjAwREY5RUMzIC8qIFdNTE5v
b3BFbGVtZW50LmNwcCAqLzsgfTsKIAkJMDg2NUNDRTcwRURERjUxQjAwREY5RUMzIC8qIFdNTE5v
b3BFbGVtZW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSAwODY1Q0NFNTBFRERGNTFCMDBERjlFQzMgLyogV01MTm9vcEVsZW1lbnQuaCAqLzsgfTsKIAkJ
MDg3MDBCRTcwRjA4NkM1MzAwOTE5NDE5IC8qIElucHV0RWxlbWVudC5jcHAgaW4gU291cmNlcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwODcwMEJFNjBGMDg2QzUzMDA5MTk0
MTkgLyogSW5wdXRFbGVtZW50LmNwcCAqLzsgfTsKQEAgLTc4NSw3ICs3ODUsNyBAQAogCQk0MTZF
NzVDQjBFREY5MEM3MDAzNjBFMUQgLyogU2NyaXB0Q2FsbEZyYW1lLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0MTZFNzVDOTBFREY5MEM3MDAzNjBFMUQg
LyogU2NyaXB0Q2FsbEZyYW1lLmggKi87IH07CiAJCTQxNkU3NUNDMEVERjkwQzcwMDM2MEUxRCAv
KiBTY3JpcHRDYWxsRnJhbWUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gNDE2RTc1Q0EwRURGOTBDNzAwMzYwRTFEIC8qIFNjcmlwdENhbGxGcmFtZS5j
cHAgKi87IH07CiAJCTQxNkY0NUYwMEVEN0IzMTEwMDgyMTVCNiAvKiBTY3JpcHRTdHJpbmcuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQxNkY0NUVGMEVE
N0IzMTEwMDgyMTVCNiAvKiBTY3JpcHRTdHJpbmcuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRF
UyA9IChQcml2YXRlLCApOyB9OyB9OwotCQk0MTg4NUI5MzExQjZGREE2MDAzMzgzQkIgLyogRm9y
bVN1Ym1pc3Npb24uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDQxODg1QjkxMTFCNkZEQTYwMDMzODNCQiAvKiBGb3JtU3VibWlzc2lvbi5oICovOyB9Owor
CQk0MTg4NUI5MzExQjZGREE2MDAzMzgzQkIgLyogRm9ybVN1Ym1pc3Npb24uaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQxODg1QjkxMTFCNkZEQTYwMDMz
ODNCQiAvKiBGb3JtU3VibWlzc2lvbi5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFBy
aXZhdGUsICk7IH07IH07CiAJCTQxODg1Qjk0MTFCNkZEQTYwMDMzODNCQiAvKiBGb3JtU3VibWlz
c2lvbi5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0
MTg4NUI5MjExQjZGREE2MDAzMzgzQkIgLyogRm9ybVN1Ym1pc3Npb24uY3BwICovOyB9OwogCQk0
MThGODgwNDBGRjk1N0FFMDA4MEYwNDUgLyogSlNBYnN0cmFjdFdvcmtlci5jcHAgaW4gU291cmNl
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0MThGODgwMjBGRjk1N0FFMDA4
MEYwNDUgLyogSlNBYnN0cmFjdFdvcmtlci5jcHAgKi87IH07CiAJCTQxOEY4ODA1MEZGOTU3QUYw
MDgwRjA0NSAvKiBKU0Fic3RyYWN0V29ya2VyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSA0MThGODgwMzBGRjk1N0FFMDA4MEYwNDUgLyogSlNBYnN0cmFj
dFdvcmtlci5oICovOyB9OwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9odG1sL0hUTUxGb3JtRWxlbWVu
dC5jcHAgYi9XZWJDb3JlL2h0bWwvSFRNTEZvcm1FbGVtZW50LmNwcAppbmRleCA5ZDU4OTM0MmEz
MjYzNDNmZmVmMjc4YjA0MTI4YzFlNTMwZjY2MGY5Li44YTI2ODBiYTBhMWE3YWU1OGFmM2FkZTNj
MDY5ZjI2NmE3YWJhODhjIDEwMDY0NAotLS0gYS9XZWJDb3JlL2h0bWwvSFRNTEZvcm1FbGVtZW50
LmNwcAorKysgYi9XZWJDb3JlL2h0bWwvSFRNTEZvcm1FbGVtZW50LmNwcApAQCAtMzYsNyArMzYs
NiBAQAogI2luY2x1ZGUgIkZvcm1EYXRhLmgiCiAjaW5jbHVkZSAiRm9ybURhdGFMaXN0LmgiCiAj
aW5jbHVkZSAiRm9ybVN0YXRlLmgiCi0jaW5jbHVkZSAiRm9ybVN1Ym1pc3Npb24uaCIKICNpbmNs
dWRlICJGcmFtZS5oIgogI2luY2x1ZGUgIkZyYW1lTG9hZGVyLmgiCiAjaW5jbHVkZSAiRnJhbWVM
b2FkZXJDbGllbnQuaCIKQEAgLTUwLDggKzQ5LDYgQEAKICNpbmNsdWRlICJTY3JpcHRFdmVudExp
c3RlbmVyLmgiCiAjaW5jbHVkZSAiVmFsaWRpdHlTdGF0ZS5oIgogI2luY2x1ZGUgPGxpbWl0cz4K
LSNpbmNsdWRlIDx3dGYvQ3VycmVudFRpbWUuaD4KLSNpbmNsdWRlIDx3dGYvUmFuZG9tTnVtYmVy
Lmg+CiAKICNpZiBQTEFURk9STShXWCkKICNpbmNsdWRlIDx3eC9kZWZzLmg+CkBAIC02NCwxNCAr
NjEsNiBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIHVzaW5nIG5hbWVzcGFjZSBIVE1MTmFtZXM7
CiAKLXN0YXRpYyBpbnQ2NF90IGdlbmVyYXRlRm9ybURhdGFJZGVudGlmaWVyKCkKLXsKLSAgICAv
LyBJbml0aWFsaXplIHRvIHRoZSBjdXJyZW50IHRpbWUgdG8gcmVkdWNlIHRoZSBsaWtlbGlob29k
IG9mIGdlbmVyYXRpbmcKLSAgICAvLyBpZGVudGlmaWVycyB0aGF0IG92ZXJsYXAgd2l0aCB0aG9z
ZSBmcm9tIHBhc3QvZnV0dXJlIGJyb3dzZXIgc2Vzc2lvbnMuCi0gICAgc3RhdGljIGludDY0X3Qg
bmV4dElkZW50aWZpZXIgPSBzdGF0aWNfY2FzdDxpbnQ2NF90PihjdXJyZW50VGltZSgpICogMTAw
MDAwMC4wKTsKLSAgICByZXR1cm4gKytuZXh0SWRlbnRpZmllcjsKLX0KLQogSFRNTEZvcm1FbGVt
ZW50OjpIVE1MRm9ybUVsZW1lbnQoY29uc3QgUXVhbGlmaWVkTmFtZSYgdGFnTmFtZSwgRG9jdW1l
bnQqIGRvY3VtZW50KQogICAgIDogSFRNTEVsZW1lbnQodGFnTmFtZSwgZG9jdW1lbnQpCiAgICAg
LCBtX2F1dG9jb21wbGV0ZSh0cnVlKQpAQCAtMTkyLDc5ICsxODEsNiBAQCB2b2lkIEhUTUxGb3Jt
RWxlbWVudDo6c3VibWl0SW1wbGljaXRseShFdmVudCogZXZlbnQsIGJvb2wgZnJvbUltcGxpY2l0
U3VibWlzc2lvbgogICAgICAgICBwcmVwYXJlU3VibWl0KGV2ZW50KTsKIH0KIAotc3RhdGljIHZv
aWQgYXBwZW5kTWFpbHRvUG9zdEZvcm1EYXRhVG9VUkwoS1VSTCYgdXJsLCBjb25zdCBGb3JtRGF0
YSYgZGF0YSwgY29uc3QgU3RyaW5nJiBlbmNvZGluZ1R5cGUpCi17Ci0gICAgU3RyaW5nIGJvZHkg
PSBkYXRhLmZsYXR0ZW5Ub1N0cmluZygpOwotCi0gICAgaWYgKGVxdWFsSWdub3JpbmdDYXNlKGVu
Y29kaW5nVHlwZSwgInRleHQvcGxhaW4iKSkgewotICAgICAgICAvLyBDb252ZW50aW9uIHNlZW1z
IHRvIGJlIHRvIGRlY29kZSwgYW5kIHMvJi9cclxuLy4gQWxzbywgc3BhY2VzIGFyZSBlbmNvZGVk
IGFzICUyMC4KLSAgICAgICAgYm9keSA9IGRlY29kZVVSTEVzY2FwZVNlcXVlbmNlcyhib2R5LnJl
cGxhY2UoJyYnLCAiXHJcbiIpLnJlcGxhY2UoJysnLCAnICcpICsgIlxyXG4iKTsKLSAgICB9Ci0K
LSAgICBWZWN0b3I8Y2hhcj4gYm9keURhdGE7Ci0gICAgYm9keURhdGEuYXBwZW5kKCJib2R5PSIs
IDUpOwotICAgIEZvcm1EYXRhQnVpbGRlcjo6ZW5jb2RlU3RyaW5nQXNGb3JtRGF0YShib2R5RGF0
YSwgYm9keS51dGY4KCkpOwotICAgIGJvZHkgPSBTdHJpbmcoYm9keURhdGEuZGF0YSgpLCBib2R5
RGF0YS5zaXplKCkpLnJlcGxhY2UoJysnLCAiJTIwIik7Ci0KLSAgICBTdHJpbmcgcXVlcnkgPSB1
cmwucXVlcnkoKTsKLSAgICBpZiAoIXF1ZXJ5LmlzRW1wdHkoKSkKLSAgICAgICAgcXVlcnkuYXBw
ZW5kKCcmJyk7Ci0gICAgcXVlcnkuYXBwZW5kKGJvZHkpOwotICAgIHVybC5zZXRRdWVyeShxdWVy
eSk7Ci19Ci0KLVBhc3NSZWZQdHI8Rm9ybVN1Ym1pc3Npb24+IEhUTUxGb3JtRWxlbWVudDo6cHJl
cGFyZUZvcm1TdWJtaXNzaW9uKEV2ZW50KiBldmVudCwgYm9vbCBsb2NrSGlzdG9yeSwgRm9ybVN1
Ym1pc3Npb25UcmlnZ2VyIHRyaWdnZXIpCi17Ci0gICAgS1VSTCBhY3Rpb25VUkwgPSBkb2N1bWVu
dCgpLT5jb21wbGV0ZVVSTChtX2Zvcm1EYXRhQnVpbGRlci5hY3Rpb24oKS5pc0VtcHR5KCkgPyBk
b2N1bWVudCgpLT51cmwoKS5zdHJpbmcoKSA6IG1fZm9ybURhdGFCdWlsZGVyLmFjdGlvbigpKTsK
LSAgICBib29sIGlzTWFpbHRvRm9ybSA9IGFjdGlvblVSTC5wcm90b2NvbElzKCJtYWlsdG8iKTsK
LQotICAgIGlmIChtX2Zvcm1EYXRhQnVpbGRlci5pc1Bvc3RNZXRob2QoKSkgewotICAgICAgICBp
ZiAobV9mb3JtRGF0YUJ1aWxkZXIuaXNNdWx0aVBhcnRGb3JtKCkgJiYgaXNNYWlsdG9Gb3JtKSB7
Ci0gICAgICAgICAgICBtX2Zvcm1EYXRhQnVpbGRlci5wYXJzZUVuY29kaW5nVHlwZSgiYXBwbGlj
YXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkIik7Ci0gICAgICAgICAgICBBU1NFUlQoIW1fZm9y
bURhdGFCdWlsZGVyLmlzTXVsdGlQYXJ0Rm9ybSgpKTsKLSAgICAgICAgfQotICAgIH0gZWxzZQot
ICAgICAgICBtX2Zvcm1EYXRhQnVpbGRlci5zZXRJc011bHRpUGFydEZvcm0oZmFsc2UpOwotCi0g
ICAgVGV4dEVuY29kaW5nIGRhdGFFbmNvZGluZyA9IGlzTWFpbHRvRm9ybSA/IFVURjhFbmNvZGlu
ZygpIDogbV9mb3JtRGF0YUJ1aWxkZXIuZGF0YUVuY29kaW5nKGRvY3VtZW50KCkpOwotICAgIFJl
ZlB0cjxET01Gb3JtRGF0YT4gZG9tRm9ybURhdGEgPSBET01Gb3JtRGF0YTo6Y3JlYXRlKGRhdGFF
bmNvZGluZy5lbmNvZGluZ0ZvckZvcm1TdWJtaXNzaW9uKCkpOwotICAgIFZlY3RvcjxwYWlyPFN0
cmluZywgU3RyaW5nPiA+IGZvcm1WYWx1ZXM7Ci0KLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBp
IDwgbV9hc3NvY2lhdGVkRWxlbWVudHMuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgSFRNTEZvcm1D
b250cm9sRWxlbWVudCogY29udHJvbCA9IG1fYXNzb2NpYXRlZEVsZW1lbnRzW2ldOwotICAgICAg
ICBpZiAoIWNvbnRyb2wtPmRpc2FibGVkKCkpCi0gICAgICAgICAgICBjb250cm9sLT5hcHBlbmRG
b3JtRGF0YSgqZG9tRm9ybURhdGEsIG1fZm9ybURhdGFCdWlsZGVyLmlzTXVsdGlQYXJ0Rm9ybSgp
KTsKLSAgICAgICAgaWYgKGNvbnRyb2wtPmhhc0xvY2FsTmFtZShpbnB1dFRhZykpIHsKLSAgICAg
ICAgICAgIEhUTUxJbnB1dEVsZW1lbnQqIGlucHV0ID0gc3RhdGljX2Nhc3Q8SFRNTElucHV0RWxl
bWVudCo+KGNvbnRyb2wpOwotICAgICAgICAgICAgaWYgKGlucHV0LT5pc1RleHRGaWVsZCgpKSB7
Ci0gICAgICAgICAgICAgICAgZm9ybVZhbHVlcy5hcHBlbmQocGFpcjxTdHJpbmcsIFN0cmluZz4o
aW5wdXQtPm5hbWUoKSwgaW5wdXQtPnZhbHVlKCkpKTsKLSAgICAgICAgICAgICAgICBpZiAoaW5w
dXQtPmlzU2VhcmNoRmllbGQoKSkKLSAgICAgICAgICAgICAgICAgICAgaW5wdXQtPmFkZFNlYXJj
aFJlc3VsdCgpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotCi0gICAgUmVmUHRy
PEZvcm1EYXRhPiBmb3JtRGF0YTsKLSAgICBTdHJpbmcgYm91bmRhcnk7Ci0KLSAgICBpZiAobV9m
b3JtRGF0YUJ1aWxkZXIuaXNNdWx0aVBhcnRGb3JtKCkpIHsKLSAgICAgICAgZm9ybURhdGEgPSBG
b3JtRGF0YTo6Y3JlYXRlTXVsdGlQYXJ0KGRvbUZvcm1EYXRhLT5pdGVtcygpLCBkb21Gb3JtRGF0
YS0+ZW5jb2RpbmcoKSwgZG9jdW1lbnQoKSk7Ci0gICAgICAgIGJvdW5kYXJ5ID0gZm9ybURhdGEt
PmJvdW5kYXJ5KCkuZGF0YSgpOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIGZvcm1EYXRhID0gRm9y
bURhdGE6OmNyZWF0ZShkb21Gb3JtRGF0YS0+aXRlbXMoKSwgZG9tRm9ybURhdGEtPmVuY29kaW5n
KCkpOwotICAgICAgICBpZiAobV9mb3JtRGF0YUJ1aWxkZXIuaXNQb3N0TWV0aG9kKCkgJiYgaXNN
YWlsdG9Gb3JtKSB7Ci0gICAgICAgICAgICAvLyBDb252ZXJ0IHRoZSBmb3JtIGRhdGEgaW50byBh
IHN0cmluZyB0aGF0IHdlIHB1dCBpbnRvIHRoZSBVUkwuCi0gICAgICAgICAgICBhcHBlbmRNYWls
dG9Qb3N0Rm9ybURhdGFUb1VSTChhY3Rpb25VUkwsICpmb3JtRGF0YSwgbV9mb3JtRGF0YUJ1aWxk
ZXIuZW5jb2RpbmdUeXBlKCkpOwotICAgICAgICAgICAgZm9ybURhdGEgPSBGb3JtRGF0YTo6Y3Jl
YXRlKCk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBmb3JtRGF0YS0+c2V0SWRlbnRpZmllcihn
ZW5lcmF0ZUZvcm1EYXRhSWRlbnRpZmllcigpKTsKLSAgICBGb3JtU3VibWlzc2lvbjo6TWV0aG9k
IG1ldGhvZCA9IG1fZm9ybURhdGFCdWlsZGVyLmlzUG9zdE1ldGhvZCgpID8gRm9ybVN1Ym1pc3Np
b246OlBvc3RNZXRob2QgOiBGb3JtU3VibWlzc2lvbjo6R2V0TWV0aG9kOwotICAgIFN0cmluZyB0
YXJnZXRPckJhc2VUYXJnZXQgPSBtX2Zvcm1EYXRhQnVpbGRlci50YXJnZXQoKS5pc0VtcHR5KCkg
PyBkb2N1bWVudCgpLT5iYXNlVGFyZ2V0KCkgOiBtX2Zvcm1EYXRhQnVpbGRlci50YXJnZXQoKTsK
LSAgICByZXR1cm4gRm9ybVN1Ym1pc3Npb246OmNyZWF0ZShtZXRob2QsIGFjdGlvblVSTCwgdGFy
Z2V0T3JCYXNlVGFyZ2V0LCBtX2Zvcm1EYXRhQnVpbGRlci5lbmNvZGluZ1R5cGUoKSwgRm9ybVN0
YXRlOjpjcmVhdGUodGhpcywgZm9ybVZhbHVlcywgZG9jdW1lbnQoKS0+ZnJhbWUoKSwgdHJpZ2dl
ciksIGZvcm1EYXRhLnJlbGVhc2UoKSwgYm91bmRhcnksIGxvY2tIaXN0b3J5LCBldmVudCk7Ci19
Ci0KIHN0YXRpYyBpbmxpbmUgSFRNTEZvcm1Db250cm9sRWxlbWVudCogc3VibWl0RWxlbWVudEZy
b21FdmVudChjb25zdCBFdmVudCogZXZlbnQpCiB7CiAgICAgTm9kZSogdGFyZ2V0Tm9kZSA9IGV2
ZW50LT50YXJnZXQoKS0+dG9Ob2RlKCk7CkBAIC0zODcsNyArMzAzLDcgQEAgdm9pZCBIVE1MRm9y
bUVsZW1lbnQ6OnN1Ym1pdChFdmVudCogZXZlbnQsIGJvb2wgYWN0aXZhdGVTdWJtaXRCdXR0b24s
IGJvb2wgbG9ja0gKICAgICBpZiAobmVlZEJ1dHRvbkFjdGl2YXRpb24gJiYgZmlyc3RTdWNjZXNz
ZnVsU3VibWl0QnV0dG9uKQogICAgICAgICBmaXJzdFN1Y2Nlc3NmdWxTdWJtaXRCdXR0b24tPnNl
dEFjdGl2YXRlZFN1Ym1pdCh0cnVlKTsKIAotICAgIGZyYW1lLT5sb2FkZXIoKS0+c3VibWl0Rm9y
bShwcmVwYXJlRm9ybVN1Ym1pc3Npb24oZXZlbnQsIGxvY2tIaXN0b3J5LCBmb3JtU3VibWlzc2lv
blRyaWdnZXIpKTsKKyAgICBmcmFtZS0+bG9hZGVyKCktPnN1Ym1pdEZvcm0oRm9ybVN1Ym1pc3Np
b246OmNyZWF0ZSh0aGlzLCBtX2F0dHJpYnV0ZXMsIGV2ZW50LCBsb2NrSGlzdG9yeSwgZm9ybVN1
Ym1pc3Npb25UcmlnZ2VyKSk7CiAKICAgICBpZiAobmVlZEJ1dHRvbkFjdGl2YXRpb24gJiYgZmly
c3RTdWNjZXNzZnVsU3VibWl0QnV0dG9uKQogICAgICAgICBmaXJzdFN1Y2Nlc3NmdWxTdWJtaXRC
dXR0b24tPnNldEFjdGl2YXRlZFN1Ym1pdChmYWxzZSk7CkBAIC00MTksMTcgKzMzNSwxNyBAQCB2
b2lkIEhUTUxGb3JtRWxlbWVudDo6cmVzZXQoKQogdm9pZCBIVE1MRm9ybUVsZW1lbnQ6OnBhcnNl
TWFwcGVkQXR0cmlidXRlKEF0dHJpYnV0ZSogYXR0cikKIHsKICAgICBpZiAoYXR0ci0+bmFtZSgp
ID09IGFjdGlvbkF0dHIpCi0gICAgICAgIG1fZm9ybURhdGFCdWlsZGVyLnBhcnNlQWN0aW9uKGF0
dHItPnZhbHVlKCkpOworICAgICAgICBtX2F0dHJpYnV0ZXMucGFyc2VBY3Rpb24oYXR0ci0+dmFs
dWUoKSk7CiAgICAgZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09IHRhcmdldEF0dHIpCi0gICAgICAg
IG1fZm9ybURhdGFCdWlsZGVyLnNldFRhcmdldChhdHRyLT52YWx1ZSgpKTsKKyAgICAgICAgbV9h
dHRyaWJ1dGVzLnNldFRhcmdldChhdHRyLT52YWx1ZSgpKTsKICAgICBlbHNlIGlmIChhdHRyLT5u
YW1lKCkgPT0gbWV0aG9kQXR0cikKLSAgICAgICAgbV9mb3JtRGF0YUJ1aWxkZXIucGFyc2VNZXRo
b2RUeXBlKGF0dHItPnZhbHVlKCkpOworICAgICAgICBtX2F0dHJpYnV0ZXMucGFyc2VNZXRob2RU
eXBlKGF0dHItPnZhbHVlKCkpOwogICAgIGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9PSBlbmN0eXBl
QXR0cikKLSAgICAgICAgbV9mb3JtRGF0YUJ1aWxkZXIucGFyc2VFbmNvZGluZ1R5cGUoYXR0ci0+
dmFsdWUoKSk7CisgICAgICAgIG1fYXR0cmlidXRlcy5wYXJzZUVuY29kaW5nVHlwZShhdHRyLT52
YWx1ZSgpKTsKICAgICBlbHNlIGlmIChhdHRyLT5uYW1lKCkgPT0gYWNjZXB0X2NoYXJzZXRBdHRy
KQogICAgICAgICAvLyBzcGFjZSBzZXBhcmF0ZWQgbGlzdCBvZiBjaGFyc2V0cyB0aGUgc2VydmVy
CiAgICAgICAgIC8vIGFjY2VwdHMgLSBzZWUgcmZjMjA0NQotICAgICAgICBtX2Zvcm1EYXRhQnVp
bGRlci5zZXRBY2NlcHRDaGFyc2V0KGF0dHItPnZhbHVlKCkpOworICAgICAgICBtX2F0dHJpYnV0
ZXMuc2V0QWNjZXB0Q2hhcnNldChhdHRyLT52YWx1ZSgpKTsKICAgICBlbHNlIGlmIChhdHRyLT5u
YW1lKCkgPT0gYWNjZXB0QXR0cikgewogICAgICAgICAvLyBpZ25vcmUgdGhpcyBvbmUgZm9yIHRo
ZSBtb21lbnQuLi4KICAgICB9IGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9PSBhdXRvY29tcGxldGVB
dHRyKSB7CmRpZmYgLS1naXQgYS9XZWJDb3JlL2h0bWwvSFRNTEZvcm1FbGVtZW50LmggYi9XZWJD
b3JlL2h0bWwvSFRNTEZvcm1FbGVtZW50LmgKaW5kZXggYjE5ZmYwNzMyOWY1MDJiNGQ5ZGNjMDAw
MWJhZTFhOTU2MTZjMGNkYS4uNTgwNjA3MGU1MDIwMmFjODU2YmU2OGJjZTZlNjEwNmIxMjUwMzE3
MiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9odG1sL0hUTUxGb3JtRWxlbWVudC5oCisrKyBiL1dlYkNv
cmUvaHRtbC9IVE1MRm9ybUVsZW1lbnQuaApAQCAtMjUsOCArMjUsOCBAQAogI2RlZmluZSBIVE1M
Rm9ybUVsZW1lbnRfaAogCiAjaW5jbHVkZSAiQ2hlY2tlZFJhZGlvQnV0dG9ucy5oIgotI2luY2x1
ZGUgIkZvcm1EYXRhQnVpbGRlci5oIgogI2luY2x1ZGUgIkZvcm1TdGF0ZS5oIgorI2luY2x1ZGUg
IkZvcm1TdWJtaXNzaW9uLmgiCiAjaW5jbHVkZSAiSFRNTEVsZW1lbnQuaCIKICNpbmNsdWRlIDx3
dGYvT3duUHRyLmg+CiAKQEAgLTM0LDcgKzM0LDYgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiBj
bGFzcyBFdmVudDsKIGNsYXNzIEZvcm1EYXRhOwotY2xhc3MgRm9ybVN1Ym1pc3Npb247CiBjbGFz
cyBIVE1MRm9ybUNvbnRyb2xFbGVtZW50OwogY2xhc3MgSFRNTEltYWdlRWxlbWVudDsKIGNsYXNz
IEhUTUxJbnB1dEVsZW1lbnQ7CkBAIC01NSwxMCArNTQsMTAgQEAgcHVibGljOgogICAgIHVuc2ln
bmVkIGxlbmd0aCgpIGNvbnN0OwogICAgIE5vZGUqIGl0ZW0odW5zaWduZWQgaW5kZXgpOwogCi0g
ICAgU3RyaW5nIGVuY3R5cGUoKSBjb25zdCB7IHJldHVybiBtX2Zvcm1EYXRhQnVpbGRlci5lbmNv
ZGluZ1R5cGUoKTsgfQorICAgIFN0cmluZyBlbmN0eXBlKCkgY29uc3QgeyByZXR1cm4gbV9hdHRy
aWJ1dGVzLmVuY29kaW5nVHlwZSgpOyB9CiAgICAgdm9pZCBzZXRFbmN0eXBlKGNvbnN0IFN0cmlu
ZyYpOwogCi0gICAgU3RyaW5nIGVuY29kaW5nKCkgY29uc3QgeyByZXR1cm4gbV9mb3JtRGF0YUJ1
aWxkZXIuZW5jb2RpbmdUeXBlKCk7IH0KKyAgICBTdHJpbmcgZW5jb2RpbmcoKSBjb25zdCB7IHJl
dHVybiBtX2F0dHJpYnV0ZXMuZW5jb2RpbmdUeXBlKCk7IH0KICAgICB2b2lkIHNldEVuY29kaW5n
KGNvbnN0IFN0cmluZyYgdmFsdWUpIHsgc2V0RW5jdHlwZSh2YWx1ZSk7IH0KIAogICAgIGJvb2wg
YXV0b0NvbXBsZXRlKCkgY29uc3QgeyByZXR1cm4gbV9hdXRvY29tcGxldGU7IH0KQEAgLTkwLDcg
Kzg5LDcgQEAgcHVibGljOgogICAgIGJvb2wgbm9WYWxpZGF0ZSgpIGNvbnN0OwogICAgIHZvaWQg
c2V0Tm9WYWxpZGF0ZShib29sKTsKIAotICAgIFN0cmluZyBhY2NlcHRDaGFyc2V0KCkgY29uc3Qg
eyByZXR1cm4gbV9mb3JtRGF0YUJ1aWxkZXIuYWNjZXB0Q2hhcnNldCgpOyB9CisgICAgU3RyaW5n
IGFjY2VwdENoYXJzZXQoKSBjb25zdCB7IHJldHVybiBtX2F0dHJpYnV0ZXMuYWNjZXB0Q2hhcnNl
dCgpOyB9CiAgICAgdm9pZCBzZXRBY2NlcHRDaGFyc2V0KGNvbnN0IFN0cmluZyYpOwogCiAgICAg
U3RyaW5nIGFjdGlvbigpIGNvbnN0OwpAQCAtMTM2LDcgKzEzNSw2IEBAIHByaXZhdGU6CiAKICAg
ICB2b2lkIHN1Ym1pdChFdmVudCosIGJvb2wgYWN0aXZhdGVTdWJtaXRCdXR0b24sIGJvb2wgbG9j
a0hpc3RvcnksIEZvcm1TdWJtaXNzaW9uVHJpZ2dlcik7CiAKLSAgICBQYXNzUmVmUHRyPEZvcm1T
dWJtaXNzaW9uPiBwcmVwYXJlRm9ybVN1Ym1pc3Npb24oRXZlbnQqLCBib29sIGxvY2tIaXN0b3J5
LCBGb3JtU3VibWlzc2lvblRyaWdnZXIpOwogICAgIHVuc2lnbmVkIGZvcm1FbGVtZW50SW5kZXgo
SFRNTEZvcm1Db250cm9sRWxlbWVudCopOwogICAgIC8vIFJldHVybnMgdHJ1ZSBpZiB0aGUgc3Vi
bWlzc2lvbiBzaG91bGQgYmUgcHJvY2VlZGVkLgogICAgIGJvb2wgdmFsaWRhdGVJbnRlcmFjdGl2
ZWx5KEV2ZW50Kik7CkBAIC0xNDgsNyArMTQ2LDcgQEAgcHJpdmF0ZToKIAogICAgIHR5cGVkZWYg
SGFzaE1hcDxSZWZQdHI8QXRvbWljU3RyaW5nSW1wbD4sIFJlZlB0cjxIVE1MRm9ybUNvbnRyb2xF
bGVtZW50PiA+IEFsaWFzTWFwOwogCi0gICAgRm9ybURhdGFCdWlsZGVyIG1fZm9ybURhdGFCdWls
ZGVyOworICAgIEZvcm1TdWJtaXNzaW9uOjpBdHRyaWJ1dGVzIG1fYXR0cmlidXRlczsKICAgICBP
d25QdHI8QWxpYXNNYXA+IG1fZWxlbWVudEFsaWFzZXM7CiAgICAgT3duUHRyPENvbGxlY3Rpb25D
YWNoZT4gbV9jb2xsZWN0aW9uQ2FjaGU7CiAKZGlmZiAtLWdpdCBhL1dlYkNvcmUvbG9hZGVyL0Zv
cm1TdWJtaXNzaW9uLmNwcCBiL1dlYkNvcmUvbG9hZGVyL0Zvcm1TdWJtaXNzaW9uLmNwcAppbmRl
eCA0ZDQ0MTc0MmYyODg1ZDY3N2NjODdkMWNhYmM0ZDJjMjNhYWYwZmE5Li5mNjYxMjczNWJjNzMx
M2E1YTNhMmI0ZWVlOGI4ZjFmNzA5ZDk1YzliIDEwMDY0NAotLS0gYS9XZWJDb3JlL2xvYWRlci9G
b3JtU3VibWlzc2lvbi5jcHAKKysrIGIvV2ViQ29yZS9sb2FkZXIvRm9ybVN1Ym1pc3Npb24uY3Bw
CkBAIC0zMSwxOCArMzEsODYgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJGb3Jt
U3VibWlzc2lvbi5oIgogCisjaW5jbHVkZSAiQ1NTSGVscGVyLmgiCisjaW5jbHVkZSAiRE9NRm9y
bURhdGEuaCIKKyNpbmNsdWRlICJEb2N1bWVudC5oIgogI2luY2x1ZGUgIkV2ZW50LmgiCiAjaW5j
bHVkZSAiRm9ybURhdGEuaCIKKyNpbmNsdWRlICJGb3JtRGF0YUJ1aWxkZXIuaCIKICNpbmNsdWRl
ICJGb3JtU3RhdGUuaCIKICNpbmNsdWRlICJGcmFtZS5oIgogI2luY2x1ZGUgIkZyYW1lTG9hZFJl
cXVlc3QuaCIKICNpbmNsdWRlICJGcmFtZUxvYWRlci5oIgorI2luY2x1ZGUgIkhUTUxGb3JtQ29u
dHJvbEVsZW1lbnQuaCIKICNpbmNsdWRlICJIVE1MRm9ybUVsZW1lbnQuaCIKLSNpbmNsdWRlIDx3
dGYvUGFzc1JlZlB0ci5oPgorI2luY2x1ZGUgIkhUTUxJbnB1dEVsZW1lbnQuaCIKKyNpbmNsdWRl
ICJIVE1MTmFtZXMuaCIKKyNpbmNsdWRlICJUZXh0RW5jb2RpbmcuaCIKKyNpbmNsdWRlIDx3dGYv
Q3VycmVudFRpbWUuaD4KKyNpbmNsdWRlIDx3dGYvUmFuZG9tTnVtYmVyLmg+CiAKIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKIAotRm9ybVN1Ym1pc3Npb246OkZvcm1TdWJtaXNzaW9uKE1ldGhvZCBtZXRo
b2QsIGNvbnN0IEtVUkwmIGFjdGlvbiwgY29uc3QgU3RyaW5nJiB0YXJnZXQsIGNvbnN0IFN0cmlu
ZyYgY29udGVudFR5cGUsIFBhc3NSZWZQdHI8Rm9ybVN0YXRlPiBzdGF0ZSwgUGFzc1JlZlB0cjxG
b3JtRGF0YT4gZGF0YSwgY29uc3QgU3RyaW5nJiBib3VuZGFyeSwgYm9vbCBsb2NrSGlzdG9yeSwg
UGFzc1JlZlB0cjxFdmVudD4gZXZlbnQpCit1c2luZyBuYW1lc3BhY2UgSFRNTE5hbWVzOworCitz
dGF0aWMgaW50NjRfdCBnZW5lcmF0ZUZvcm1EYXRhSWRlbnRpZmllcigpCit7CisgICAgLy8gSW5p
dGlhbGl6ZSB0byB0aGUgY3VycmVudCB0aW1lIHRvIHJlZHVjZSB0aGUgbGlrZWxpaG9vZCBvZiBn
ZW5lcmF0aW5nCisgICAgLy8gaWRlbnRpZmllcnMgdGhhdCBvdmVybGFwIHdpdGggdGhvc2UgZnJv
bSBwYXN0L2Z1dHVyZSBicm93c2VyIHNlc3Npb25zLgorICAgIHN0YXRpYyBpbnQ2NF90IG5leHRJ
ZGVudGlmaWVyID0gc3RhdGljX2Nhc3Q8aW50NjRfdD4oY3VycmVudFRpbWUoKSAqIDEwMDAwMDAu
MCk7CisgICAgcmV0dXJuICsrbmV4dElkZW50aWZpZXI7Cit9CisKK3N0YXRpYyB2b2lkIGFwcGVu
ZE1haWx0b1Bvc3RGb3JtRGF0YVRvVVJMKEtVUkwmIHVybCwgY29uc3QgRm9ybURhdGEmIGRhdGEs
IGNvbnN0IFN0cmluZyYgZW5jb2RpbmdUeXBlKQoreworICAgIFN0cmluZyBib2R5ID0gZGF0YS5m
bGF0dGVuVG9TdHJpbmcoKTsKKworICAgIGlmIChlcXVhbElnbm9yaW5nQ2FzZShlbmNvZGluZ1R5
cGUsICJ0ZXh0L3BsYWluIikpIHsKKyAgICAgICAgLy8gQ29udmVudGlvbiBzZWVtcyB0byBiZSB0
byBkZWNvZGUsIGFuZCBzLyYvXHJcbi8uIEFsc28sIHNwYWNlcyBhcmUgZW5jb2RlZCBhcyAlMjAu
CisgICAgICAgIGJvZHkgPSBkZWNvZGVVUkxFc2NhcGVTZXF1ZW5jZXMoYm9keS5yZXBsYWNlKCcm
JywgIlxyXG4iKS5yZXBsYWNlKCcrJywgJyAnKSArICJcclxuIik7CisgICAgfQorCisgICAgVmVj
dG9yPGNoYXI+IGJvZHlEYXRhOworICAgIGJvZHlEYXRhLmFwcGVuZCgiYm9keT0iLCA1KTsKKyAg
ICBGb3JtRGF0YUJ1aWxkZXI6OmVuY29kZVN0cmluZ0FzRm9ybURhdGEoYm9keURhdGEsIGJvZHku
dXRmOCgpKTsKKyAgICBib2R5ID0gU3RyaW5nKGJvZHlEYXRhLmRhdGEoKSwgYm9keURhdGEuc2l6
ZSgpKS5yZXBsYWNlKCcrJywgIiUyMCIpOworCisgICAgU3RyaW5nIHF1ZXJ5ID0gdXJsLnF1ZXJ5
KCk7CisgICAgaWYgKCFxdWVyeS5pc0VtcHR5KCkpCisgICAgICAgIHF1ZXJ5LmFwcGVuZCgnJicp
OworICAgIHF1ZXJ5LmFwcGVuZChib2R5KTsKKyAgICB1cmwuc2V0UXVlcnkocXVlcnkpOworfQor
Cit2b2lkIEZvcm1TdWJtaXNzaW9uOjpBdHRyaWJ1dGVzOjpwYXJzZUFjdGlvbihjb25zdCBTdHJp
bmcmIGFjdGlvbikKK3sKKyAgICAvLyBGSVhNRTogQ2FuIHdlIHBhcnNlIGludG8gYSBLVVJMPwor
ICAgIG1fYWN0aW9uID0gZGVwcmVjYXRlZFBhcnNlVVJMKGFjdGlvbik7Cit9CisKK3ZvaWQgRm9y
bVN1Ym1pc3Npb246OkF0dHJpYnV0ZXM6OnBhcnNlRW5jb2RpbmdUeXBlKGNvbnN0IFN0cmluZyYg
dHlwZSkKK3sKKyAgICBpZiAodHlwZS5jb250YWlucygibXVsdGlwYXJ0IiwgZmFsc2UpIHx8IHR5
cGUuY29udGFpbnMoImZvcm0tZGF0YSIsIGZhbHNlKSkgeworICAgICAgICBtX2VuY29kaW5nVHlw
ZSA9ICJtdWx0aXBhcnQvZm9ybS1kYXRhIjsKKyAgICAgICAgbV9pc011bHRpUGFydEZvcm0gPSB0
cnVlOworICAgIH0gZWxzZSBpZiAodHlwZS5jb250YWlucygidGV4dCIsIGZhbHNlKSB8fCB0eXBl
LmNvbnRhaW5zKCJwbGFpbiIsIGZhbHNlKSkgeworICAgICAgICBtX2VuY29kaW5nVHlwZSA9ICJ0
ZXh0L3BsYWluIjsKKyAgICAgICAgbV9pc011bHRpUGFydEZvcm0gPSBmYWxzZTsKKyAgICB9IGVs
c2UgeworICAgICAgICBtX2VuY29kaW5nVHlwZSA9ICJhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVy
bGVuY29kZWQiOworICAgICAgICBtX2lzTXVsdGlQYXJ0Rm9ybSA9IGZhbHNlOworICAgIH0KK30K
Kwordm9pZCBGb3JtU3VibWlzc2lvbjo6QXR0cmlidXRlczo6cGFyc2VNZXRob2RUeXBlKGNvbnN0
IFN0cmluZyYgdHlwZSkKK3sKKyAgICBpZiAoZXF1YWxJZ25vcmluZ0Nhc2UodHlwZSwgInBvc3Qi
KSkKKyAgICAgICAgbV9tZXRob2QgPSBGb3JtU3VibWlzc2lvbjo6UG9zdE1ldGhvZDsKKyAgICBl
bHNlIGlmIChlcXVhbElnbm9yaW5nQ2FzZSh0eXBlLCAiZ2V0IikpCisgICAgICAgIG1fbWV0aG9k
ID0gRm9ybVN1Ym1pc3Npb246OkdldE1ldGhvZDsKK30KKworaW5saW5lIEZvcm1TdWJtaXNzaW9u
OjpGb3JtU3VibWlzc2lvbihNZXRob2QgbWV0aG9kLCBjb25zdCBLVVJMJiBhY3Rpb24sIGNvbnN0
IFN0cmluZyYgdGFyZ2V0LCBjb25zdCBTdHJpbmcmIGNvbnRlbnRUeXBlLCBQYXNzUmVmUHRyPEZv
cm1TdGF0ZT4gc3RhdGUsIFBhc3NSZWZQdHI8Rm9ybURhdGE+IGRhdGEsIGNvbnN0IFN0cmluZyYg
Ym91bmRhcnksIGJvb2wgbG9ja0hpc3RvcnksIFBhc3NSZWZQdHI8RXZlbnQ+IGV2ZW50KQogICAg
IDogbV9tZXRob2QobWV0aG9kKQogICAgICwgbV9hY3Rpb24oYWN0aW9uKQogICAgICwgbV90YXJn
ZXQodGFyZ2V0KQpAQCAtNTUsOSArMTIzLDYwIEBAIEZvcm1TdWJtaXNzaW9uOjpGb3JtU3VibWlz
c2lvbihNZXRob2QgbWV0aG9kLCBjb25zdCBLVVJMJiBhY3Rpb24sIGNvbnN0IFN0cmluZyYKIHsK
IH0KIAotUGFzc1JlZlB0cjxGb3JtU3VibWlzc2lvbj4gRm9ybVN1Ym1pc3Npb246OmNyZWF0ZShN
ZXRob2QgbWV0aG9kLCBjb25zdCBLVVJMJiBhY3Rpb24sIGNvbnN0IFN0cmluZyYgdGFyZ2V0LCBj
b25zdCBTdHJpbmcmIGNvbnRlbnRUeXBlLCBQYXNzUmVmUHRyPEZvcm1TdGF0ZT4gc3RhdGUsIFBh
c3NSZWZQdHI8Rm9ybURhdGE+IGRhdGEsIGNvbnN0IFN0cmluZyYgYm91bmRhcnksIGJvb2wgbG9j
a0hpc3RvcnksIFBhc3NSZWZQdHI8RXZlbnQ+IGV2ZW50KQorUGFzc1JlZlB0cjxGb3JtU3VibWlz
c2lvbj4gRm9ybVN1Ym1pc3Npb246OmNyZWF0ZShIVE1MRm9ybUVsZW1lbnQqIGZvcm0sIGNvbnN0
IEF0dHJpYnV0ZXMmIGF0dHJpYnV0ZXMsIFBhc3NSZWZQdHI8RXZlbnQ+IGV2ZW50LCBib29sIGxv
Y2tIaXN0b3J5LCBGb3JtU3VibWlzc2lvblRyaWdnZXIgdHJpZ2dlcikKIHsKLSAgICByZXR1cm4g
YWRvcHRSZWYobmV3IEZvcm1TdWJtaXNzaW9uKG1ldGhvZCwgYWN0aW9uLCB0YXJnZXQsIGNvbnRl
bnRUeXBlLCBzdGF0ZSwgZGF0YSwgYm91bmRhcnksIGxvY2tIaXN0b3J5LCBldmVudCkpOworICAg
IEFTU0VSVChmb3JtKTsKKyAgICBEb2N1bWVudCogZG9jdW1lbnQgPSBmb3JtLT5kb2N1bWVudCgp
OworICAgIEtVUkwgYWN0aW9uVVJMID0gZG9jdW1lbnQtPmNvbXBsZXRlVVJMKGF0dHJpYnV0ZXMu
YWN0aW9uKCkuaXNFbXB0eSgpID8gZG9jdW1lbnQtPnVybCgpLnN0cmluZygpIDogYXR0cmlidXRl
cy5hY3Rpb24oKSk7CisgICAgYm9vbCBpc01haWx0b0Zvcm0gPSBhY3Rpb25VUkwucHJvdG9jb2xJ
cygibWFpbHRvIik7CisgICAgYm9vbCBpc011bHRpUGFydEZvcm0gPSBmYWxzZTsKKyAgICBTdHJp
bmcgZW5jb2RpbmdUeXBlID0gYXR0cmlidXRlcy5lbmNvZGluZ1R5cGUoKTsKKworICAgIGlmIChh
dHRyaWJ1dGVzLm1ldGhvZCgpID09IFBvc3RNZXRob2QpIHsKKyAgICAgICAgaXNNdWx0aVBhcnRG
b3JtID0gYXR0cmlidXRlcy5pc011bHRpUGFydEZvcm0oKTsKKyAgICAgICAgaWYgKGlzTXVsdGlQ
YXJ0Rm9ybSAmJiBpc01haWx0b0Zvcm0pIHsKKyAgICAgICAgICAgIGVuY29kaW5nVHlwZSA9ICJh
cHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQiOworICAgICAgICAgICAgaXNNdWx0aVBh
cnRGb3JtID0gZmFsc2U7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBUZXh0RW5jb2RpbmcgZGF0
YUVuY29kaW5nID0gaXNNYWlsdG9Gb3JtID8gVVRGOEVuY29kaW5nKCkgOiBGb3JtRGF0YUJ1aWxk
ZXI6OmVuY29kaW5nRnJvbUFjY2VwdENoYXJzZXQoYXR0cmlidXRlcy5hY2NlcHRDaGFyc2V0KCks
IGRvY3VtZW50KTsKKyAgICBSZWZQdHI8RE9NRm9ybURhdGE+IGRvbUZvcm1EYXRhID0gRE9NRm9y
bURhdGE6OmNyZWF0ZShkYXRhRW5jb2RpbmcuZW5jb2RpbmdGb3JGb3JtU3VibWlzc2lvbigpKTsK
KyAgICBWZWN0b3I8cGFpcjxTdHJpbmcsIFN0cmluZz4gPiBmb3JtVmFsdWVzOworCisgICAgZm9y
ICh1bnNpZ25lZCBpID0gMDsgaSA8IGZvcm0tPmFzc29jaWF0ZWRFbGVtZW50cygpLnNpemUoKTsg
KytpKSB7CisgICAgICAgIEhUTUxGb3JtQ29udHJvbEVsZW1lbnQqIGNvbnRyb2wgPSBmb3JtLT5h
c3NvY2lhdGVkRWxlbWVudHMoKVtpXTsKKyAgICAgICAgaWYgKCFjb250cm9sLT5kaXNhYmxlZCgp
KQorICAgICAgICAgICAgY29udHJvbC0+YXBwZW5kRm9ybURhdGEoKmRvbUZvcm1EYXRhLCBpc011
bHRpUGFydEZvcm0pOworICAgICAgICBpZiAoY29udHJvbC0+aGFzTG9jYWxOYW1lKGlucHV0VGFn
KSkgeworICAgICAgICAgICAgSFRNTElucHV0RWxlbWVudCogaW5wdXQgPSBzdGF0aWNfY2FzdDxI
VE1MSW5wdXRFbGVtZW50Kj4oY29udHJvbCk7CisgICAgICAgICAgICBpZiAoaW5wdXQtPmlzVGV4
dEZpZWxkKCkpIHsKKyAgICAgICAgICAgICAgICBmb3JtVmFsdWVzLmFwcGVuZChwYWlyPFN0cmlu
ZywgU3RyaW5nPihpbnB1dC0+bmFtZSgpLCBpbnB1dC0+dmFsdWUoKSkpOworICAgICAgICAgICAg
ICAgIGlmIChpbnB1dC0+aXNTZWFyY2hGaWVsZCgpKQorICAgICAgICAgICAgICAgICAgICBpbnB1
dC0+YWRkU2VhcmNoUmVzdWx0KCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisK
KyAgICBSZWZQdHI8Rm9ybURhdGE+IGZvcm1EYXRhOworICAgIFN0cmluZyBib3VuZGFyeTsKKwor
ICAgIGlmIChpc011bHRpUGFydEZvcm0pIHsKKyAgICAgICAgZm9ybURhdGEgPSBGb3JtRGF0YTo6
Y3JlYXRlTXVsdGlQYXJ0KGRvbUZvcm1EYXRhLT5pdGVtcygpLCBkb21Gb3JtRGF0YS0+ZW5jb2Rp
bmcoKSwgZG9jdW1lbnQpOworICAgICAgICBib3VuZGFyeSA9IGZvcm1EYXRhLT5ib3VuZGFyeSgp
LmRhdGEoKTsKKyAgICB9IGVsc2UgeworICAgICAgICBmb3JtRGF0YSA9IEZvcm1EYXRhOjpjcmVh
dGUoZG9tRm9ybURhdGEtPml0ZW1zKCksIGRvbUZvcm1EYXRhLT5lbmNvZGluZygpKTsKKyAgICAg
ICAgaWYgKGF0dHJpYnV0ZXMubWV0aG9kKCkgPT0gUG9zdE1ldGhvZCAmJiBpc01haWx0b0Zvcm0p
IHsKKyAgICAgICAgICAgIC8vIENvbnZlcnQgdGhlIGZvcm0gZGF0YSBpbnRvIGEgc3RyaW5nIHRo
YXQgd2UgcHV0IGludG8gdGhlIFVSTC4KKyAgICAgICAgICAgIGFwcGVuZE1haWx0b1Bvc3RGb3Jt
RGF0YVRvVVJMKGFjdGlvblVSTCwgKmZvcm1EYXRhLCBlbmNvZGluZ1R5cGUpOworICAgICAgICAg
ICAgZm9ybURhdGEgPSBGb3JtRGF0YTo6Y3JlYXRlKCk7CisgICAgICAgIH0KKyAgICB9CisKKyAg
ICBmb3JtRGF0YS0+c2V0SWRlbnRpZmllcihnZW5lcmF0ZUZvcm1EYXRhSWRlbnRpZmllcigpKTsK
KyAgICBTdHJpbmcgdGFyZ2V0T3JCYXNlVGFyZ2V0ID0gYXR0cmlidXRlcy50YXJnZXQoKS5pc0Vt
cHR5KCkgPyBkb2N1bWVudC0+YmFzZVRhcmdldCgpIDogYXR0cmlidXRlcy50YXJnZXQoKTsKKyAg
ICBSZWZQdHI8Rm9ybVN0YXRlPiBmb3JtU3RhdGUgPSBGb3JtU3RhdGU6OmNyZWF0ZShmb3JtLCBm
b3JtVmFsdWVzLCBkb2N1bWVudC0+ZnJhbWUoKSwgdHJpZ2dlcik7CisgICAgcmV0dXJuIGFkb3B0
UmVmKG5ldyBGb3JtU3VibWlzc2lvbihhdHRyaWJ1dGVzLm1ldGhvZCgpLCBhY3Rpb25VUkwsIHRh
cmdldE9yQmFzZVRhcmdldCwgZW5jb2RpbmdUeXBlLCBmb3JtU3RhdGUucmVsZWFzZSgpLCBmb3Jt
RGF0YS5yZWxlYXNlKCksIGJvdW5kYXJ5LCBsb2NrSGlzdG9yeSwgZXZlbnQpKTsKIH0KIAogdm9p
ZCBGb3JtU3VibWlzc2lvbjo6cG9wdWxhdGVGcmFtZUxvYWRSZXF1ZXN0KEZyYW1lTG9hZFJlcXVl
c3QmIGZyYW1lUmVxdWVzdCkKZGlmZiAtLWdpdCBhL1dlYkNvcmUvbG9hZGVyL0Zvcm1TdWJtaXNz
aW9uLmggYi9XZWJDb3JlL2xvYWRlci9Gb3JtU3VibWlzc2lvbi5oCmluZGV4IDY0N2M2YzY5M2Ji
OWQxMDVjMDdjMWI3Y2JkNmI4Y2M3M2ZkYTBmYTkuLmQ0OTgwMGRhNWQ3Mjc5ZDhiZTRmODljZWFk
OTZkOTA5Zjg3ZmUyYTggMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvbG9hZGVyL0Zvcm1TdWJtaXNzaW9u
LmgKKysrIGIvV2ViQ29yZS9sb2FkZXIvRm9ybVN1Ym1pc3Npb24uaApAQCAtMzEsMzQgKzMxLDY5
IEBACiAjaWZuZGVmIEZvcm1TdWJtaXNzaW9uX2gKICNkZWZpbmUgRm9ybVN1Ym1pc3Npb25faAog
CisjaW5jbHVkZSAiRm9ybVN0YXRlLmgiCiAjaW5jbHVkZSAiS1VSTC5oIgogCiBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiAKK2NsYXNzIERvY3VtZW50OwogY2xhc3MgRXZlbnQ7CiBjbGFzcyBGb3JtRGF0
YTsKLWNsYXNzIEZvcm1TdGF0ZTsKIHN0cnVjdCBGcmFtZUxvYWRSZXF1ZXN0OworY2xhc3MgSFRN
TEZvcm1FbGVtZW50OworY2xhc3MgVGV4dEVuY29kaW5nOwogCiBjbGFzcyBGb3JtU3VibWlzc2lv
biA6IHB1YmxpYyBSZWZDb3VudGVkPEZvcm1TdWJtaXNzaW9uPiB7CiBwdWJsaWM6Ci0gICAgZW51
bSBNZXRob2QgewotICAgICAgICBHZXRNZXRob2QsCi0gICAgICAgIFBvc3RNZXRob2QKKyAgICBl
bnVtIE1ldGhvZCB7IEdldE1ldGhvZCwgUG9zdE1ldGhvZCB9OworCisgICAgY2xhc3MgQXR0cmli
dXRlcyA6IHB1YmxpYyBOb25jb3B5YWJsZSB7CisgICAgcHVibGljOgorICAgICAgICBBdHRyaWJ1
dGVzKCkKKyAgICAgICAgICAgIDogbV9tZXRob2QoR2V0TWV0aG9kKQorICAgICAgICAgICAgLCBt
X2lzTXVsdGlQYXJ0Rm9ybShmYWxzZSkKKyAgICAgICAgICAgICwgbV9lbmNvZGluZ1R5cGUoImFw
cGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZCIpCisgICAgICAgICAgICB7CisgICAgICAg
ICAgICB9CisKKyAgICAgICAgTWV0aG9kIG1ldGhvZCgpIGNvbnN0IHsgcmV0dXJuIG1fbWV0aG9k
OyB9CisgICAgICAgIHZvaWQgcGFyc2VNZXRob2RUeXBlKGNvbnN0IFN0cmluZyYpOworCisgICAg
ICAgIGNvbnN0IFN0cmluZyYgYWN0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9hY3Rpb247IH0KKyAg
ICAgICAgdm9pZCBwYXJzZUFjdGlvbihjb25zdCBTdHJpbmcmKTsKKworICAgICAgICBjb25zdCBT
dHJpbmcmIHRhcmdldCgpIGNvbnN0IHsgcmV0dXJuIG1fdGFyZ2V0OyB9CisgICAgICAgIHZvaWQg
c2V0VGFyZ2V0KGNvbnN0IFN0cmluZyYgdGFyZ2V0KSB7IG1fdGFyZ2V0ID0gdGFyZ2V0OyB9CisK
KyAgICAgICAgY29uc3QgU3RyaW5nJiBlbmNvZGluZ1R5cGUoKSBjb25zdCB7IHJldHVybiBtX2Vu
Y29kaW5nVHlwZTsgfQorICAgICAgICB2b2lkIHBhcnNlRW5jb2RpbmdUeXBlKGNvbnN0IFN0cmlu
ZyYpOworICAgICAgICBib29sIGlzTXVsdGlQYXJ0Rm9ybSgpIGNvbnN0IHsgcmV0dXJuIG1faXNN
dWx0aVBhcnRGb3JtOyB9CisKKyAgICAgICAgY29uc3QgU3RyaW5nJiBhY2NlcHRDaGFyc2V0KCkg
Y29uc3QgeyByZXR1cm4gbV9hY2NlcHRDaGFyc2V0OyB9CisgICAgICAgIHZvaWQgc2V0QWNjZXB0
Q2hhcnNldChjb25zdCBTdHJpbmcmIHZhbHVlKSB7IG1fYWNjZXB0Q2hhcnNldCA9IHZhbHVlOyB9
CisKKyAgICBwcml2YXRlOgorICAgICAgICBNZXRob2QgbV9tZXRob2Q7CisgICAgICAgIGJvb2wg
bV9pc011bHRpUGFydEZvcm07CisKKyAgICAgICAgU3RyaW5nIG1fYWN0aW9uOworICAgICAgICBT
dHJpbmcgbV90YXJnZXQ7CisgICAgICAgIFN0cmluZyBtX2VuY29kaW5nVHlwZTsKKyAgICAgICAg
U3RyaW5nIG1fYWNjZXB0Q2hhcnNldDsKICAgICB9OwogCi0gICAgc3RhdGljIFBhc3NSZWZQdHI8
Rm9ybVN1Ym1pc3Npb24+IGNyZWF0ZShNZXRob2QsIGNvbnN0IEtVUkwmIGFjdGlvbiwgY29uc3Qg
U3RyaW5nJiB0YXJnZXQsIGNvbnN0IFN0cmluZyYgY29udGVudFR5cGUsIFBhc3NSZWZQdHI8Rm9y
bVN0YXRlPiwgUGFzc1JlZlB0cjxGb3JtRGF0YT4sIGNvbnN0IFN0cmluZyYgYm91bmRhcnksIGJv
b2wgbG9ja0hpc3RvcnksIFBhc3NSZWZQdHI8RXZlbnQ+KTsKKyAgICBzdGF0aWMgUGFzc1JlZlB0
cjxGb3JtU3VibWlzc2lvbj4gY3JlYXRlKEhUTUxGb3JtRWxlbWVudCosIGNvbnN0IEF0dHJpYnV0
ZXMmLCBQYXNzUmVmUHRyPEV2ZW50PiBldmVudCwgYm9vbCBsb2NrSGlzdG9yeSwgRm9ybVN1Ym1p
c3Npb25UcmlnZ2VyKTsKIAogICAgIHZvaWQgcG9wdWxhdGVGcmFtZUxvYWRSZXF1ZXN0KEZyYW1l
TG9hZFJlcXVlc3QmKTsKIAogICAgIE1ldGhvZCBtZXRob2QoKSBjb25zdCB7IHJldHVybiBtX21l
dGhvZDsgfQogICAgIGNvbnN0IEtVUkwmIGFjdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fYWN0aW9u
OyB9Ci0gICAgU3RyaW5nIHRhcmdldCgpIGNvbnN0IHsgcmV0dXJuIG1fdGFyZ2V0OyB9CisgICAg
Y29uc3QgU3RyaW5nJiB0YXJnZXQoKSBjb25zdCB7IHJldHVybiBtX3RhcmdldDsgfQogICAgIHZv
aWQgY2xlYXJUYXJnZXQoKSB7IG1fdGFyZ2V0ID0gU3RyaW5nKCk7IH0KLSAgICBTdHJpbmcgY29u
dGVudFR5cGUoKSBjb25zdCB7IHJldHVybiBtX2NvbnRlbnRUeXBlOyB9CisgICAgY29uc3QgU3Ry
aW5nJiBjb250ZW50VHlwZSgpIGNvbnN0IHsgcmV0dXJuIG1fY29udGVudFR5cGU7IH0KICAgICBG
b3JtU3RhdGUqIHN0YXRlKCkgY29uc3QgeyByZXR1cm4gbV9mb3JtU3RhdGUuZ2V0KCk7IH0KICAg
ICBGb3JtRGF0YSogZGF0YSgpIGNvbnN0IHsgcmV0dXJuIG1fZm9ybURhdGEuZ2V0KCk7IH0KLSAg
ICBTdHJpbmcgYm91bmRhcnkoKSBjb25zdCB7IHJldHVybiBtX2JvdW5kYXJ5OyB9CisgICAgY29u
c3QgU3RyaW5nIGJvdW5kYXJ5KCkgY29uc3QgeyByZXR1cm4gbV9ib3VuZGFyeTsgfQogICAgIGJv
b2wgbG9ja0hpc3RvcnkoKSBjb25zdCB7IHJldHVybiBtX2xvY2tIaXN0b3J5OyB9CiAgICAgRXZl
bnQqIGV2ZW50KCkgY29uc3QgeyByZXR1cm4gbV9ldmVudC5nZXQoKTsgfQogCkBAIC03MCw2ICsx
MDUsNyBAQCBwdWJsaWM6CiBwcml2YXRlOgogICAgIEZvcm1TdWJtaXNzaW9uKE1ldGhvZCwgY29u
c3QgS1VSTCYgYWN0aW9uLCBjb25zdCBTdHJpbmcmIHRhcmdldCwgY29uc3QgU3RyaW5nJiBjb250
ZW50VHlwZSwgUGFzc1JlZlB0cjxGb3JtU3RhdGU+LCBQYXNzUmVmUHRyPEZvcm1EYXRhPiwgY29u
c3QgU3RyaW5nJiBib3VuZGFyeSwgYm9vbCBsb2NrSGlzdG9yeSwgUGFzc1JlZlB0cjxFdmVudD4p
OwogCisgICAgLy8gRklYTUU6IEhvbGQgYW4gaW5zdGFuY2Ugb2YgQXR0cmlidXRlcyBpbnN0ZWFk
IG9mIGluZGl2aWR1YWwgbWVtYmVycy4KICAgICBNZXRob2QgbV9tZXRob2Q7CiAgICAgS1VSTCBt
X2FjdGlvbjsKICAgICBTdHJpbmcgbV90YXJnZXQ7CmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRm
b3JtL25ldHdvcmsvRm9ybURhdGFCdWlsZGVyLmNwcCBiL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29y
ay9Gb3JtRGF0YUJ1aWxkZXIuY3BwCmluZGV4IGZiNzhiMDhjYzZjYjE0OTJhMThmNzBhOTE3OGFi
YzQ5MjEyNGY5YTcuLmRhMjhmYzIyYTBmNzNjOWM4M2IwYmZmNjJlZGRlZTBmMzE0MjQyZGYgMTAw
NjQ0Ci0tLSBhL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9Gb3JtRGF0YUJ1aWxkZXIuY3BwCisr
KyBiL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9Gb3JtRGF0YUJ1aWxkZXIuY3BwCkBAIC0yNSw3
ICsyNSw2IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiRm9ybURhdGFCdWlsZGVy
LmgiCiAKLSNpbmNsdWRlICJDU1NIZWxwZXIuaCIKICNpbmNsdWRlICJEb2N1bWVudC5oIgogI2lu
Y2x1ZGUgIkZyYW1lLmgiCiAjaW5jbHVkZSAiRnJhbWVMb2FkZXIuaCIKQEAgLTM4LDY3ICszNyw2
IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotRm9ybURhdGFCdWlsZGVyOjpGb3JtRGF0YUJ1
aWxkZXIoKQotICAgIDogbV9pc1Bvc3RNZXRob2QoZmFsc2UpCi0gICAgLCBtX2lzTXVsdGlQYXJ0
Rm9ybShmYWxzZSkKLSAgICAsIG1fZW5jb2RpbmdUeXBlKCJhcHBsaWNhdGlvbi94LXd3dy1mb3Jt
LXVybGVuY29kZWQiKQotewotfQotCi1Gb3JtRGF0YUJ1aWxkZXI6On5Gb3JtRGF0YUJ1aWxkZXIo
KQotewotfQotCi12b2lkIEZvcm1EYXRhQnVpbGRlcjo6cGFyc2VBY3Rpb24oY29uc3QgU3RyaW5n
JiBhY3Rpb24pCi17Ci0gICAgLy8gRklYTUU6IENhbiB3ZSBwYXJzZSBpbnRvIGEgS1VSTD8KLSAg
ICBtX2FjdGlvbiA9IGRlcHJlY2F0ZWRQYXJzZVVSTChhY3Rpb24pOwotfQotCi12b2lkIEZvcm1E
YXRhQnVpbGRlcjo6cGFyc2VFbmNvZGluZ1R5cGUoY29uc3QgU3RyaW5nJiB0eXBlKQotewotICAg
IGlmICh0eXBlLmNvbnRhaW5zKCJtdWx0aXBhcnQiLCBmYWxzZSkgfHwgdHlwZS5jb250YWlucygi
Zm9ybS1kYXRhIiwgZmFsc2UpKSB7Ci0gICAgICAgIG1fZW5jb2RpbmdUeXBlID0gIm11bHRpcGFy
dC9mb3JtLWRhdGEiOwotICAgICAgICBtX2lzTXVsdGlQYXJ0Rm9ybSA9IHRydWU7Ci0gICAgfSBl
bHNlIGlmICh0eXBlLmNvbnRhaW5zKCJ0ZXh0IiwgZmFsc2UpIHx8IHR5cGUuY29udGFpbnMoInBs
YWluIiwgZmFsc2UpKSB7Ci0gICAgICAgIG1fZW5jb2RpbmdUeXBlID0gInRleHQvcGxhaW4iOwot
ICAgICAgICBtX2lzTXVsdGlQYXJ0Rm9ybSA9IGZhbHNlOwotICAgIH0gZWxzZSB7Ci0gICAgICAg
IG1fZW5jb2RpbmdUeXBlID0gImFwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZCI7Ci0g
ICAgICAgIG1faXNNdWx0aVBhcnRGb3JtID0gZmFsc2U7Ci0gICAgfQotfQotCi12b2lkIEZvcm1E
YXRhQnVpbGRlcjo6cGFyc2VNZXRob2RUeXBlKGNvbnN0IFN0cmluZyYgdHlwZSkKLXsKLSAgICBp
ZiAoZXF1YWxJZ25vcmluZ0Nhc2UodHlwZSwgInBvc3QiKSkKLSAgICAgICAgbV9pc1Bvc3RNZXRo
b2QgPSB0cnVlOwotICAgIGVsc2UgaWYgKGVxdWFsSWdub3JpbmdDYXNlKHR5cGUsICJnZXQiKSkK
LSAgICAgICAgbV9pc1Bvc3RNZXRob2QgPSBmYWxzZTsKLX0KLQotVGV4dEVuY29kaW5nIEZvcm1E
YXRhQnVpbGRlcjo6ZGF0YUVuY29kaW5nKERvY3VtZW50KiBkb2N1bWVudCkgY29uc3QKLXsKLSAg
ICBTdHJpbmcgYWNjZXB0Q2hhcnNldCA9IG1fYWNjZXB0Q2hhcnNldDsKLSAgICBhY2NlcHRDaGFy
c2V0LnJlcGxhY2UoJywnLCAnICcpOwotCi0gICAgVmVjdG9yPFN0cmluZz4gY2hhcnNldHM7Ci0g
ICAgYWNjZXB0Q2hhcnNldC5zcGxpdCgnICcsIGNoYXJzZXRzKTsKLQotICAgIFRleHRFbmNvZGlu
ZyBlbmNvZGluZzsKLQotICAgIFZlY3RvcjxTdHJpbmc+Ojpjb25zdF9pdGVyYXRvciBlbmQgPSBj
aGFyc2V0cy5lbmQoKTsKLSAgICBmb3IgKFZlY3RvcjxTdHJpbmc+Ojpjb25zdF9pdGVyYXRvciBp
dCA9IGNoYXJzZXRzLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgewotICAgICAgICBpZiAoKGVu
Y29kaW5nID0gVGV4dEVuY29kaW5nKCppdCkpLmlzVmFsaWQoKSkKLSAgICAgICAgICAgIHJldHVy
biBlbmNvZGluZzsKLSAgICB9Ci0KLSAgICBpZiAoRnJhbWUqIGZyYW1lID0gZG9jdW1lbnQtPmZy
YW1lKCkpCi0gICAgICAgIHJldHVybiBmcmFtZS0+bG9hZGVyKCktPndyaXRlcigpLT5lbmNvZGlu
ZygpOwotCi0gICAgcmV0dXJuIExhdGluMUVuY29kaW5nKCk7Ci19Ci0KIC8vIEhlbHBlciBmdW5j
dGlvbnMKIHN0YXRpYyBpbmxpbmUgdm9pZCBhcHBlbmQoVmVjdG9yPGNoYXI+JiBidWZmZXIsIGNo
YXIgc3RyaW5nKQogewpAQCAtMTQwLDYgKzc4LDI4IEBAIHN0YXRpYyB2b2lkIGFwcGVuZFF1b3Rl
ZFN0cmluZyhWZWN0b3I8Y2hhcj4mIGJ1ZmZlciwgY29uc3QgQ1N0cmluZyYgc3RyaW5nKQogICAg
IH0KIH0KIAorVGV4dEVuY29kaW5nIEZvcm1EYXRhQnVpbGRlcjo6ZW5jb2RpbmdGcm9tQWNjZXB0
Q2hhcnNldChjb25zdCBTdHJpbmcmIGFjY2VwdENoYXJzZXQsIERvY3VtZW50KiBkb2N1bWVudCkK
K3sKKyAgICBTdHJpbmcgbm9ybWFsaXplZEFjY2VwdENoYXJzZXQgPSBhY2NlcHRDaGFyc2V0Owor
ICAgIG5vcm1hbGl6ZWRBY2NlcHRDaGFyc2V0LnJlcGxhY2UoJywnLCAnICcpOworCisgICAgVmVj
dG9yPFN0cmluZz4gY2hhcnNldHM7CisgICAgbm9ybWFsaXplZEFjY2VwdENoYXJzZXQuc3BsaXQo
JyAnLCBjaGFyc2V0cyk7CisKKyAgICBUZXh0RW5jb2RpbmcgZW5jb2Rpbmc7CisKKyAgICBWZWN0
b3I8U3RyaW5nPjo6Y29uc3RfaXRlcmF0b3IgZW5kID0gY2hhcnNldHMuZW5kKCk7CisgICAgZm9y
IChWZWN0b3I8U3RyaW5nPjo6Y29uc3RfaXRlcmF0b3IgaXQgPSBjaGFyc2V0cy5iZWdpbigpOyBp
dCAhPSBlbmQ7ICsraXQpIHsKKyAgICAgICAgaWYgKChlbmNvZGluZyA9IFRleHRFbmNvZGluZygq
aXQpKS5pc1ZhbGlkKCkpCisgICAgICAgICAgICByZXR1cm4gZW5jb2Rpbmc7CisgICAgfQorCisg
ICAgaWYgKEZyYW1lKiBmcmFtZSA9IGRvY3VtZW50LT5mcmFtZSgpKQorICAgICAgICByZXR1cm4g
ZnJhbWUtPmxvYWRlcigpLT53cml0ZXIoKS0+ZW5jb2RpbmcoKTsKKworICAgIHJldHVybiBMYXRp
bjFFbmNvZGluZygpOworfQorCiBWZWN0b3I8Y2hhcj4gRm9ybURhdGFCdWlsZGVyOjpnZW5lcmF0
ZVVuaXF1ZUJvdW5kYXJ5U3RyaW5nKCkKIHsKICAgICBWZWN0b3I8Y2hhcj4gYm91bmRhcnk7CmRp
ZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvRm9ybURhdGFCdWlsZGVyLmggYi9X
ZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvRm9ybURhdGFCdWlsZGVyLmgKaW5kZXggNTU5OTA2ZTAw
OTMwZjViYTViZmQwNWZmMDI3ODZhM2M0ZjQ5NzAwZC4uMjZiOTBhZmIwN2UzNDliMmQ3ZmNjMWYz
NDY3ZmRlYmJlZDY2MDYzZCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL0Zv
cm1EYXRhQnVpbGRlci5oCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9Gb3JtRGF0YUJ1
aWxkZXIuaApAQCAtMzYsMzEgKzM2LDcgQEAgY2xhc3MgVGV4dEVuY29kaW5nOwogCiBjbGFzcyBG
b3JtRGF0YUJ1aWxkZXIgOiBwdWJsaWMgTm9uY29weWFibGUgewogcHVibGljOgotICAgIEZvcm1E
YXRhQnVpbGRlcigpOwotICAgIH5Gb3JtRGF0YUJ1aWxkZXIoKTsKLQotICAgIGJvb2wgaXNQb3N0
TWV0aG9kKCkgY29uc3QgeyByZXR1cm4gbV9pc1Bvc3RNZXRob2Q7IH0KLSAgICB2b2lkIHNldElz
UG9zdE1ldGhvZChib29sIHZhbHVlKSB7IG1faXNQb3N0TWV0aG9kID0gdmFsdWU7IH0KLQotICAg
IGJvb2wgaXNNdWx0aVBhcnRGb3JtKCkgY29uc3QgeyByZXR1cm4gbV9pc011bHRpUGFydEZvcm07
IH0KLSAgICB2b2lkIHNldElzTXVsdGlQYXJ0Rm9ybShib29sIHZhbHVlKSB7IG1faXNNdWx0aVBh
cnRGb3JtID0gdmFsdWU7IH0KLQotICAgIGNvbnN0IFN0cmluZyYgYWN0aW9uKCkgY29uc3QgeyBy
ZXR1cm4gbV9hY3Rpb247IH0KLQotICAgIGNvbnN0IFN0cmluZyYgdGFyZ2V0KCkgY29uc3QgeyBy
ZXR1cm4gbV90YXJnZXQ7IH0KLSAgICB2b2lkIHNldFRhcmdldChjb25zdCBTdHJpbmcmIHRhcmdl
dCkgeyBtX3RhcmdldCA9IHRhcmdldDsgfQotCi0gICAgU3RyaW5nIGVuY29kaW5nVHlwZSgpIGNv
bnN0IHsgcmV0dXJuIG1fZW5jb2RpbmdUeXBlOyB9Ci0gICAgdm9pZCBzZXRFbmNvZGluZ1R5cGUo
Y29uc3QgU3RyaW5nJiB2YWx1ZSkgeyBtX2VuY29kaW5nVHlwZSA9IHZhbHVlOyB9Ci0KLSAgICBT
dHJpbmcgYWNjZXB0Q2hhcnNldCgpIGNvbnN0IHsgcmV0dXJuIG1fYWNjZXB0Q2hhcnNldDsgfQot
ICAgIHZvaWQgc2V0QWNjZXB0Q2hhcnNldChjb25zdCBTdHJpbmcmIHZhbHVlKSB7IG1fYWNjZXB0
Q2hhcnNldCA9IHZhbHVlOyB9Ci0KLSAgICB2b2lkIHBhcnNlQWN0aW9uKGNvbnN0IFN0cmluZyYp
OwotICAgIHZvaWQgcGFyc2VFbmNvZGluZ1R5cGUoY29uc3QgU3RyaW5nJik7Ci0gICAgdm9pZCBw
YXJzZU1ldGhvZFR5cGUoY29uc3QgU3RyaW5nJik7Ci0KLSAgICBUZXh0RW5jb2RpbmcgZGF0YUVu
Y29kaW5nKERvY3VtZW50KikgY29uc3Q7CisgICAgc3RhdGljIFRleHRFbmNvZGluZyBlbmNvZGlu
Z0Zyb21BY2NlcHRDaGFyc2V0KGNvbnN0IFN0cmluZyYgYWNjZXB0Q2hhcnNldCwgRG9jdW1lbnQq
IGRvY3VtZW50KTsKIAogICAgIC8vIEhlbHBlciBmdW5jdGlvbnMgdXNlZCBieSBIVE1MRm9ybUVs
ZW1lbnQvV01MR29FbGVtZW50IGZvciBtdWx0aS1wYXJ0IGZvcm0gZGF0YQogICAgIHN0YXRpYyBW
ZWN0b3I8Y2hhcj4gZ2VuZXJhdGVVbmlxdWVCb3VuZGFyeVN0cmluZygpOwpAQCAtNzUsMTMgKzUx
LDcgQEAgcHVibGljOgogICAgIHN0YXRpYyB2b2lkIGVuY29kZVN0cmluZ0FzRm9ybURhdGEoVmVj
dG9yPGNoYXI+JiwgY29uc3QgV1RGOjpDU3RyaW5nJik7CiAKIHByaXZhdGU6Ci0gICAgYm9vbCBt
X2lzUG9zdE1ldGhvZDsKLSAgICBib29sIG1faXNNdWx0aVBhcnRGb3JtOwotCi0gICAgU3RyaW5n
IG1fYWN0aW9uOwotICAgIFN0cmluZyBtX3RhcmdldDsKLSAgICBTdHJpbmcgbV9lbmNvZGluZ1R5
cGU7Ci0gICAgU3RyaW5nIG1fYWNjZXB0Q2hhcnNldDsKKyAgICBGb3JtRGF0YUJ1aWxkZXIoKSB7
fQogfTsKIAogfQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS93bWwvV01MR29FbGVtZW50LmNwcCBiL1dl
YkNvcmUvd21sL1dNTEdvRWxlbWVudC5jcHAKaW5kZXggZGI0ODgwYzQxOGIzMjI2YTQ2OTAxNDRm
MTBmNmM4ODA1ZmM1YmVhZC4uOWIzMjlkNzE3MGYzZTYyMjQ3MTBhMDg1MzdmMjE4MjVjOThmM2Nj
YyAxMDA2NDQKLS0tIGEvV2ViQ29yZS93bWwvV01MR29FbGVtZW50LmNwcAorKysgYi9XZWJDb3Jl
L3dtbC9XTUxHb0VsZW1lbnQuY3BwCkBAIC0yNSw2ICsyNSw3IEBACiAKICNpbmNsdWRlICJBdHRy
aWJ1dGUuaCIKICNpbmNsdWRlICJGb3JtRGF0YS5oIgorI2luY2x1ZGUgIkZvcm1TdWJtaXNzaW9u
LmgiCiAjaW5jbHVkZSAiRnJhbWUuaCIKICNpbmNsdWRlICJGcmFtZUxvYWRlci5oIgogI2luY2x1
ZGUgIkhUTUxOYW1lcy5oIgpAQCAtNjQsMTEgKzY1LDExIEBAIHZvaWQgV01MR29FbGVtZW50Ojpk
ZXJlZ2lzdGVyUG9zdGZpZWxkRWxlbWVudChXTUxQb3N0ZmllbGRFbGVtZW50KiBwb3N0ZmllbGQp
CiB2b2lkIFdNTEdvRWxlbWVudDo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUoQXR0cmlidXRlKiBhdHRy
KQogewogICAgIGlmIChhdHRyLT5uYW1lKCkgPT0gSFRNTE5hbWVzOjptZXRob2RBdHRyKQotICAg
ICAgICBtX2Zvcm1EYXRhQnVpbGRlci5wYXJzZU1ldGhvZFR5cGUoYXR0ci0+dmFsdWUoKSk7Cisg
ICAgICAgIG1fZm9ybUF0dHJpYnV0ZXMucGFyc2VNZXRob2RUeXBlKGF0dHItPnZhbHVlKCkpOwog
ICAgIGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9PSBIVE1MTmFtZXM6OmVuY3R5cGVBdHRyKQotICAg
ICAgICBtX2Zvcm1EYXRhQnVpbGRlci5wYXJzZUVuY29kaW5nVHlwZShwYXJzZVZhbHVlU3Vic3Rp
dHV0aW5nVmFyaWFibGVSZWZlcmVuY2VzKGF0dHItPnZhbHVlKCkpKTsKKyAgICAgICAgbV9mb3Jt
QXR0cmlidXRlcy5wYXJzZUVuY29kaW5nVHlwZShwYXJzZVZhbHVlU3Vic3RpdHV0aW5nVmFyaWFi
bGVSZWZlcmVuY2VzKGF0dHItPnZhbHVlKCkpKTsKICAgICBlbHNlIGlmIChhdHRyLT5uYW1lKCkg
PT0gSFRNTE5hbWVzOjphY2NlcHRfY2hhcnNldEF0dHIpCi0gICAgICAgIG1fZm9ybURhdGFCdWls
ZGVyLnNldEFjY2VwdENoYXJzZXQocGFyc2VWYWx1ZUZvcmJpZGRpbmdWYXJpYWJsZVJlZmVyZW5j
ZXMoYXR0ci0+dmFsdWUoKSkpOworICAgICAgICBtX2Zvcm1BdHRyaWJ1dGVzLnNldEFjY2VwdENo
YXJzZXQocGFyc2VWYWx1ZUZvcmJpZGRpbmdWYXJpYWJsZVJlZmVyZW5jZXMoYXR0ci0+dmFsdWUo
KSkpOwogICAgIGVsc2UKICAgICAgICAgV01MVGFza0VsZW1lbnQ6OnBhcnNlTWFwcGVkQXR0cmli
dXRlKGF0dHIpOwogfQpAQCAtMTI2LDcgKzEyNyw3IEBAIHZvaWQgV01MR29FbGVtZW50OjpleGVj
dXRlVGFzaygpCiAKICAgICBTdHJpbmcgY2FjaGVDb250cm9sID0gZ2V0QXR0cmlidXRlKGNhY2hl
X2NvbnRyb2xBdHRyKTsKIAotICAgIGlmIChtX2Zvcm1EYXRhQnVpbGRlci5pc1Bvc3RNZXRob2Qo
KSkKKyAgICBpZiAobV9mb3JtQXR0cmlidXRlcy5tZXRob2QoKSA9PSBGb3JtU3VibWlzc2lvbjo6
UG9zdE1ldGhvZCkKICAgICAgICAgcHJlcGFyZVBPU1RSZXF1ZXN0KHJlcXVlc3QsIGluU2FtZURl
Y2ssIGNhY2hlQ29udHJvbCk7CiAgICAgZWxzZQogICAgICAgICBwcmVwYXJlR0VUUmVxdWVzdChy
ZXF1ZXN0LCB1cmwpOwpAQCAtMTUzLDE0ICsxNTQsMTQgQEAgdm9pZCBXTUxHb0VsZW1lbnQ6OnBy
ZXBhcmVQT1NUUmVxdWVzdChSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QsIGJvb2wgaW5TYW1lRGVj
aywKIAogICAgIFJlZlB0cjxGb3JtRGF0YT4gZGF0YTsKIAotICAgIGlmIChtX2Zvcm1EYXRhQnVp
bGRlci5pc011bHRpUGFydEZvcm0oKSkgeyAvLyBtdWx0aXBhcnQvZm9ybS1kYXRhCi0gICAgICAg
IFZlY3RvcjxjaGFyPiBib3VuZGFyeSA9IG1fZm9ybURhdGFCdWlsZGVyLmdlbmVyYXRlVW5pcXVl
Qm91bmRhcnlTdHJpbmcoKTsKKyAgICBpZiAobV9mb3JtQXR0cmlidXRlcy5pc011bHRpUGFydEZv
cm0oKSkgeyAvLyBtdWx0aXBhcnQvZm9ybS1kYXRhCisgICAgICAgIFZlY3RvcjxjaGFyPiBib3Vu
ZGFyeSA9IEZvcm1EYXRhQnVpbGRlcjo6Z2VuZXJhdGVVbmlxdWVCb3VuZGFyeVN0cmluZygpOwog
ICAgICAgICBkYXRhID0gY3JlYXRlRm9ybURhdGEoYm91bmRhcnkuZGF0YSgpKTsKLSAgICAgICAg
cmVxdWVzdC5zZXRIVFRQQ29udGVudFR5cGUobV9mb3JtRGF0YUJ1aWxkZXIuZW5jb2RpbmdUeXBl
KCkgKyAiOyBib3VuZGFyeT0iICsgYm91bmRhcnkuZGF0YSgpKTsKKyAgICAgICAgcmVxdWVzdC5z
ZXRIVFRQQ29udGVudFR5cGUobV9mb3JtQXR0cmlidXRlcy5lbmNvZGluZ1R5cGUoKSArICI7IGJv
dW5kYXJ5PSIgKyBib3VuZGFyeS5kYXRhKCkpOwogICAgIH0gZWxzZSB7CiAgICAgICAgIC8vIHRl
eHQvcGxhaW4gb3IgYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkCiAgICAgICAgIGRh
dGEgPSBjcmVhdGVGb3JtRGF0YShDU3RyaW5nKCkpOwotICAgICAgICByZXF1ZXN0LnNldEhUVFBD
b250ZW50VHlwZShtX2Zvcm1EYXRhQnVpbGRlci5lbmNvZGluZ1R5cGUoKSk7CisgICAgICAgIHJl
cXVlc3Quc2V0SFRUUENvbnRlbnRUeXBlKG1fZm9ybUF0dHJpYnV0ZXMuZW5jb2RpbmdUeXBlKCkp
OwogICAgIH0KIAogICAgIHJlcXVlc3Quc2V0SFRUUEJvZHkoZGF0YS5nZXQoKSk7CkBAIC0xNzEs
NyArMTcyLDcgQEAgdm9pZCBXTUxHb0VsZW1lbnQ6OnByZXBhcmVHRVRSZXF1ZXN0KFJlc291cmNl
UmVxdWVzdCYgcmVxdWVzdCwgY29uc3QgS1VSTCYgdXJsKQogICAgIHJlcXVlc3Quc2V0SFRUUE1l
dGhvZCgiR0VUIik7CiAKICAgICAvLyBFdmVudHVhbGx5IGRpc3BsYXkgZXJyb3IgbWVzc2FnZT8K
LSAgICBpZiAobV9mb3JtRGF0YUJ1aWxkZXIuaXNNdWx0aVBhcnRGb3JtKCkpCisgICAgaWYgKG1f
Zm9ybUF0dHJpYnV0ZXMuaXNNdWx0aVBhcnRGb3JtKCkpCiAgICAgICAgIHJldHVybjsKIAogICAg
IFJlZlB0cjxGb3JtRGF0YT4gZGF0YSA9IGNyZWF0ZUZvcm1EYXRhKENTdHJpbmcoKSk7CkBAIC0x
ODcsNyArMTg4LDcgQEAgUGFzc1JlZlB0cjxGb3JtRGF0YT4gV01MR29FbGVtZW50OjpjcmVhdGVG
b3JtRGF0YShjb25zdCBDU3RyaW5nJiBib3VuZGFyeSkKICAgICBDU3RyaW5nIHZhbHVlOwogCiAg
ICAgVmVjdG9yPGNoYXI+IGVuY29kZWREYXRhOwotICAgIFRleHRFbmNvZGluZyBlbmNvZGluZyA9
IG1fZm9ybURhdGFCdWlsZGVyLmRhdGFFbmNvZGluZyhkb2N1bWVudCgpKS5lbmNvZGluZ0ZvckZv
cm1TdWJtaXNzaW9uKCk7CisgICAgVGV4dEVuY29kaW5nIGVuY29kaW5nID0gRm9ybURhdGFCdWls
ZGVyOjplbmNvZGluZ0Zyb21BY2NlcHRDaGFyc2V0KG1fZm9ybUF0dHJpYnV0ZXMuYWNjZXB0Q2hh
cnNldCgpLCBkb2N1bWVudCgpKS5lbmNvZGluZ0ZvckZvcm1TdWJtaXNzaW9uKCk7CiAKICAgICBW
ZWN0b3I8V01MUG9zdGZpZWxkRWxlbWVudCo+OjppdGVyYXRvciBpdCA9IG1fcG9zdGZpZWxkRWxl
bWVudHMuYmVnaW4oKTsKICAgICBWZWN0b3I8V01MUG9zdGZpZWxkRWxlbWVudCo+OjppdGVyYXRv
ciBlbmQgPSBtX3Bvc3RmaWVsZEVsZW1lbnRzLmVuZCgpOwpAQCAtMTk2LDEwICsxOTcsMTAgQEAg
UGFzc1JlZlB0cjxGb3JtRGF0YT4gV01MR29FbGVtZW50OjpjcmVhdGVGb3JtRGF0YShjb25zdCBD
U3RyaW5nJiBib3VuZGFyeSkKICAgICBmb3IgKDsgaXQgIT0gZW5kOyArK2l0KSB7CiAgICAgICAg
ICgqaXQpLT5lbmNvZGVEYXRhKGVuY29kaW5nLCBrZXksIHZhbHVlKTsKIAotICAgICAgICBpZiAo
bV9mb3JtRGF0YUJ1aWxkZXIuaXNNdWx0aVBhcnRGb3JtKCkpIHsKKyAgICAgICAgaWYgKG1fZm9y
bUF0dHJpYnV0ZXMuaXNNdWx0aVBhcnRGb3JtKCkpIHsKICAgICAgICAgICAgIFZlY3RvcjxjaGFy
PiBoZWFkZXI7Ci0gICAgICAgICAgICBtX2Zvcm1EYXRhQnVpbGRlci5iZWdpbk11bHRpUGFydEhl
YWRlcihoZWFkZXIsIGJvdW5kYXJ5LCBrZXkpOwotICAgICAgICAgICAgbV9mb3JtRGF0YUJ1aWxk
ZXIuZmluaXNoTXVsdGlQYXJ0SGVhZGVyKGhlYWRlcik7CisgICAgICAgICAgICBGb3JtRGF0YUJ1
aWxkZXI6OmJlZ2luTXVsdGlQYXJ0SGVhZGVyKGhlYWRlciwgYm91bmRhcnksIGtleSk7CisgICAg
ICAgICAgICBGb3JtRGF0YUJ1aWxkZXI6OmZpbmlzaE11bHRpUGFydEhlYWRlcihoZWFkZXIpOwog
ICAgICAgICAgICAgcmVzdWx0LT5hcHBlbmREYXRhKGhlYWRlci5kYXRhKCksIGhlYWRlci5zaXpl
KCkpOwogCiAgICAgICAgICAgICBpZiAoc2l6ZV90IGRhdGFTaXplID0gdmFsdWUubGVuZ3RoKCkp
CkBAIC0yMDcsMTEgKzIwOCwxMSBAQCBQYXNzUmVmUHRyPEZvcm1EYXRhPiBXTUxHb0VsZW1lbnQ6
OmNyZWF0ZUZvcm1EYXRhKGNvbnN0IENTdHJpbmcmIGJvdW5kYXJ5KQogCiAgICAgICAgICAgICBy
ZXN1bHQtPmFwcGVuZERhdGEoIlxyXG4iLCAyKTsKICAgICAgICAgfSBlbHNlCi0gICAgICAgICAg
ICBtX2Zvcm1EYXRhQnVpbGRlci5hZGRLZXlWYWx1ZVBhaXJBc0Zvcm1EYXRhKGVuY29kZWREYXRh
LCBrZXksIHZhbHVlKTsKKyAgICAgICAgICAgIEZvcm1EYXRhQnVpbGRlcjo6YWRkS2V5VmFsdWVQ
YWlyQXNGb3JtRGF0YShlbmNvZGVkRGF0YSwga2V5LCB2YWx1ZSk7CiAgICAgfQogCi0gICAgaWYg
KG1fZm9ybURhdGFCdWlsZGVyLmlzTXVsdGlQYXJ0Rm9ybSgpKQotICAgICAgICBtX2Zvcm1EYXRh
QnVpbGRlci5hZGRCb3VuZGFyeVRvTXVsdGlQYXJ0SGVhZGVyKGVuY29kZWREYXRhLCBib3VuZGFy
eSwgdHJ1ZSk7CisgICAgaWYgKG1fZm9ybUF0dHJpYnV0ZXMuaXNNdWx0aVBhcnRGb3JtKCkpCisg
ICAgICAgIEZvcm1EYXRhQnVpbGRlcjo6YWRkQm91bmRhcnlUb011bHRpUGFydEhlYWRlcihlbmNv
ZGVkRGF0YSwgYm91bmRhcnksIHRydWUpOwogCiAgICAgcmVzdWx0LT5hcHBlbmREYXRhKGVuY29k
ZWREYXRhLmRhdGEoKSwgZW5jb2RlZERhdGEuc2l6ZSgpKTsKICAgICByZXR1cm4gcmVzdWx0Owpk
aWZmIC0tZ2l0IGEvV2ViQ29yZS93bWwvV01MR29FbGVtZW50LmggYi9XZWJDb3JlL3dtbC9XTUxH
b0VsZW1lbnQuaAppbmRleCBmNjAyYTM5NThhNjFiNmU1Njk0MjkwMDE5ZjkwY2NmNTE1NWY0MzE3
Li5kN2Y4OTkxOGJjZTkwN2VhYWVlNDIyNjI4NzRiMWZjYWJlMDcyYjZiIDEwMDY0NAotLS0gYS9X
ZWJDb3JlL3dtbC9XTUxHb0VsZW1lbnQuaAorKysgYi9XZWJDb3JlL3dtbC9XTUxHb0VsZW1lbnQu
aApAQCAtMjIsNyArMjIsNyBAQAogI2RlZmluZSBXTUxHb0VsZW1lbnRfaAogCiAjaWYgRU5BQkxF
KFdNTCkKLSNpbmNsdWRlICJGb3JtRGF0YUJ1aWxkZXIuaCIKKyNpbmNsdWRlICJGb3JtU3VibWlz
c2lvbi5oIgogI2luY2x1ZGUgIldNTFRhc2tFbGVtZW50LmgiCiAKIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKQEAgLTQ4LDcgKzQ4LDcgQEAgcHJpdmF0ZToKICAgICBQYXNzUmVmUHRyPEZvcm1EYXRhPiBj
cmVhdGVGb3JtRGF0YShjb25zdCBDU3RyaW5nJiBib3VuZGFyeSk7CiAKICAgICBWZWN0b3I8V01M
UG9zdGZpZWxkRWxlbWVudCo+IG1fcG9zdGZpZWxkRWxlbWVudHM7Ci0gICAgRm9ybURhdGFCdWls
ZGVyIG1fZm9ybURhdGFCdWlsZGVyOworICAgIEZvcm1TdWJtaXNzaW9uOjpBdHRyaWJ1dGVzIG1f
Zm9ybUF0dHJpYnV0ZXM7CiB9OwogCiB9Cg==
</data>
<flag name="review"
          id="46661"
          type_id="1"
          status="+"
          setter="tkent"
    />
          </attachment>
      

    </bug>

</bugzilla>