<?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>86448</bug_id>
          
          <creation_ts>2012-05-14 23:45:29 -0700</creation_ts>
          <short_desc>Optimize save/restore with no drawing operations between them (shows up on some canvas benchmarks)</short_desc>
          <delta_ts>2012-05-15 11:42:43 -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>Canvas</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Darin Adler">darin</reporter>
          <assigned_to name="Darin Adler">darin</assigned_to>
          <cc>simon.fraser</cc>
    
    <cc>thorton</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>623702</commentid>
    <comment_count>0</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2012-05-14 23:45:29 -0700</bug_when>
    <thetext>Optimize save/restore with no drawing operations between them (shows up on some canvas benchmarks)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>623730</commentid>
    <comment_count>1</comment_count>
      <attachid>141872</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2012-05-15 00:11:33 -0700</bug_when>
    <thetext>Created attachment 141872
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>624328</commentid>
    <comment_count>2</comment_count>
      <attachid>141872</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-05-15 11:42:38 -0700</bug_when>
    <thetext>Comment on attachment 141872
Patch

Clearing flags on attachment: 141872

Committed r117106: &lt;http://trac.webkit.org/changeset/117106&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>624329</commentid>
    <comment_count>3</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-05-15 11:42:43 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>141872</attachid>
            <date>2012-05-15 00:11:33 -0700</date>
            <delta_ts>2012-05-15 11:42:38 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-86448-20120515001132.patch</filename>
            <type>text/plain</type>
            <size>30314</size>
            <attacher name="Darin Adler">darin</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDExNzAzNCkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDcwIEBACisyMDEyLTA1LTE1ICBEYXJpbiBB
ZGxlciAgPGRhcmluQGFwcGxlLmNvbT4KKworICAgICAgICBPcHRpbWl6ZSBzYXZlL3Jlc3RvcmUg
d2l0aCBubyBkcmF3aW5nIG9wZXJhdGlvbnMgYmV0d2VlbiB0aGVtIChzaG93cyB1cCBvbiBzb21l
IGNhbnZhcyBiZW5jaG1hcmtzKQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9ODY0NDgKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4K
KworICAgICAgICBTaW5jZSBjYW52YXMgcHJvZ3JhbW1lcnMgc29tZXRpbWVzIGVuZCB1cCBkb2lu
ZyBleHRyYSBzYXZlL3Jlc3RvcmUgcGFpcnMgd2l0aCBubyBhY3R1YWwgZHJhd2luZworICAgICAg
ICBpbiBiZXR3ZWVuLCBvcHRpbWl6ZSB0aGF0IGNhc2UgYnkgbm90IHJlYWxpemluZyBzYXZlcyB1
bnRpbCB3ZSBoYXZlIHRvLiBUaGlzIGlzIGRvdWJseSBpbXBvcnRhbnQKKyAgICAgICAgYmVjYXVz
ZSBzYXZlcyBhcmUgY29zdGx5LgorCisgICAgICAgICogaHRtbC9jYW52YXMvQ2FudmFzUmVuZGVy
aW5nQ29udGV4dDJELmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNhbnZhc1JlbmRlcmluZ0NvbnRl
eHQyRDo6Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEKTogSW5pdGlhbGl6ZSBtX3VucmVhbGl6ZWRT
YXZlQ291bnQuCisgICAgICAgIChXZWJDb3JlOjpDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6Omlz
QWNjZWxlcmF0ZWQpOiBJbXByb3ZlIHBlcmZvcm1hbmNlIGJ5IGNhbGxpbmcgdGhlCisgICAgICAg
IGRyYXdpbmdDb250ZXh0IGZ1bmN0aW9uIG9ubHkgb25jZS4KKyAgICAgICAgKFdlYkNvcmU6OkNh
bnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6cmVzZXQpOiBTZXQgbV91bnJlYWxpemVkU2F2ZUNvdW50
IHRvIDAuCisgICAgICAgIChXZWJDb3JlOjpDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6OnJlYWxp
emVTYXZlc0xvb3ApOiBBZGRlZC4gUmVwbGFjZXMgdGhlIHNhdmUgZnVuY3Rpb24gYXMgdGhlCisg
ICAgICAgIGZ1bmN0aW9uIHRoYXQgYWN0dWFsbHkgcHVzaGVzIGNvbnRleHQgb250byB0aGUgc3Rh
dGUgc3RhY2suCisgICAgICAgIChXZWJDb3JlOjpDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6OnJl
c3RvcmUpOiBBZGRlZCBjb2RlIHRvIGRvIGFuIGVhcmx5IHJldHVybiBpZiB3ZSBjYW4gZG8gdGhl
CisgICAgICAgIHJlc3RvcmUganVzdCBieSBkZWNyZW1lbnRpbmcgdGhlIHVucmVhbGl6ZWQgc2F2
ZSBjb3VudC4KKyAgICAgICAgKFdlYkNvcmU6OkNhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6c2V0
U3Ryb2tlU3R5bGUpOiBBZGRlZCBjYWxscyB0byByZWFsaXplU2F2ZXMgYW5kIHJlcGxhY2VkCisg
ICAgICAgIGNhbGxzIHRvIHN0YXRlIHdpdGggY2FsbHMgdG8gbW9kaWZpYWJsZVN0YXRlLgorICAg
ICAgICAoV2ViQ29yZTo6Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjpzZXRGaWxsU3R5bGUpOiBE
aXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkNhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6c2V0TGlu
ZVdpZHRoKTogRGl0dG8uIEFsc28gYWRkZWQgYW4gZWFybHkgb3V0IGZvciBjYXNlcyB3aGVyZQor
ICAgICAgICB0aGUgbGluZSB3aWR0aCBpcyBub3QgY2hhbmdpbmcuCisgICAgICAgIChXZWJDb3Jl
OjpDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6OnNldExpbmVDYXApOiBEaXR0by4KKyAgICAgICAg
KFdlYkNvcmU6OkNhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6c2V0TGluZUpvaW4pOiBEaXR0by4K
KyAgICAgICAgKFdlYkNvcmU6OkNhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6c2V0TWl0ZXJMaW1p
dCk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjpz
ZXRTaGFkb3dPZmZzZXRYKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpDYW52YXNSZW5kZXJp
bmdDb250ZXh0MkQ6OnNldFNoYWRvd09mZnNldFkpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6
OkNhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6c2V0U2hhZG93Qmx1cik6IERpdHRvLgorICAgICAg
ICAoV2ViQ29yZTo6Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjpzZXRTaGFkb3dDb2xvcik6IERp
dHRvLgorICAgICAgICAoV2ViQ29yZTo6Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjpzZXRXZWJr
aXRMaW5lRGFzaCk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6Q2FudmFzUmVuZGVyaW5nQ29u
dGV4dDJEOjpzZXRXZWJraXRMaW5lRGFzaE9mZnNldCk6IERpdHRvLgorICAgICAgICAoV2ViQ29y
ZTo6Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjpzZXRHbG9iYWxBbHBoYSk6IERpdHRvLgorICAg
ICAgICAoV2ViQ29yZTo6Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjpzZXRHbG9iYWxDb21wb3Np
dGVPcGVyYXRpb24pOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkNhbnZhc1JlbmRlcmluZ0Nv
bnRleHQyRDo6c2NhbGUpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkNhbnZhc1JlbmRlcmlu
Z0NvbnRleHQyRDo6cm90YXRlKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpDYW52YXNSZW5k
ZXJpbmdDb250ZXh0MkQ6OnRyYW5zbGF0ZSk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6Q2Fu
dmFzUmVuZGVyaW5nQ29udGV4dDJEOjp0cmFuc2Zvcm0pOiBEaXR0by4KKyAgICAgICAgKFdlYkNv
cmU6OkNhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6c2V0VHJhbnNmb3JtKTogRGl0dG8uCisgICAg
ICAgIChXZWJDb3JlOjpDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6OnNldFN0cm9rZUNvbG9yKTog
RGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6OnNldEZp
bGxDb2xvcik6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6Q2FudmFzUmVuZGVyaW5nQ29udGV4
dDJEOjpjbGlwKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpDYW52YXNSZW5kZXJpbmdDb250
ZXh0MkQ6OmNsZWFyUmVjdCk6IENoYW5nZWQgaW1wbGVtZW50YXRpb24gc28gaXQgZG9lcyBub3Qg
c2F2ZQorICAgICAgICB0aGUgZ3JhcGhpY3MgY29udGV4dCBpbiB0aGUgY29tbW9uIGNhc2Ugd2hl
cmUgc2hhZG93cywgZ2xvYmFsIGFscGhhLCBhbmQgZ2xvYmFsIGNvbXBvc2l0aW5nCisgICAgICAg
IG9wZXJhdG9ycyBkbyBub3QgaW50ZXJmZXIgd2l0aCB0aGUgZnVuY3Rpb24ncyBvcGVyYXRpb24u
IFRoaXMgYWxsb3dlZCB1cyB0byBnZXQgcmlkIG9mIHRoZQorICAgICAgICBzZXRBbGxBdHRyaWJ1
dGVzVG9EZWZhdWx0IGZ1bmN0aW9uLCB3aGljaCB3YXMgdXNlZCBub3doZXJlIGVsc2UuCisgICAg
ICAgIChXZWJDb3JlOjpDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6OnNldFNoYWRvdyk6IEFkZGVk
IGEgbmV3IGNvbW1vbiBib3R0bGVuZWNrIGFuZCBtYWRlIGFsbAorICAgICAgICB0aGUgc2V0U2hh
ZG93IGZ1bmN0aW9ucyBjYWxsIGl0LgorICAgICAgICAoV2ViQ29yZTo6Q2FudmFzUmVuZGVyaW5n
Q29udGV4dDJEOjpjbGVhclNoYWRvdyk6IENoYW5nZWQgdG8gY2FsbCB0aGUgbmV3IHNldFNoYWRv
dy4KKyAgICAgICAgKFdlYkNvcmU6OkNhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6c2V0Rm9udCk6
IFJlbmFtZWQgdGVtcERlY2wgdG8gdGhlIG1vcmUgZnJpZW5kbHkKKyAgICAgICAgcGFyc2VkU3R5
bGUuIENoYW5nZWQgY29kZSBzdHJ1Y3R1cmUgc28gdGhlIENTUyBwYXJzZXIgaXMgZGVsZXRlZCBy
aWdodCBhZnRlciBwYXJzaW5nIGlzCisgICAgICAgIGRvbmUuIFVzZWQgc3RyaW5nIGNvbmNhdGVu
YXRpb24gaW5zdGVhZCBvZiBtb3JlIGV4cGVuc2l2ZSBzdHJpbmcgYXBwZW5kLiBBZGRlZCBjYWxs
cyB0bworICAgICAgICByZWFsaXplU2F2ZXMgYW5kIG1vZGlmaWFibGVTdGF0ZS4KKyAgICAgICAg
KFdlYkNvcmU6OkNhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6c2V0VGV4dEFsaWduKTogQWRkZWQg
Y2FsbHMgdG8gcmVhbGl6ZVNhdmVzIGFuZCByZXBsYWNlZAorICAgICAgICBjYWxscyB0byBzdGF0
ZSB3aXRoIGNhbGxzIHRvIG1vZGlmaWFibGVTdGF0ZS4gQWxzbyBhZGRlZCBhbiBlYXJseSBvdXQg
Zm9yIGNhc2VzIHdoZXJlIHRoZQorICAgICAgICBhbGlnbm1lbnQgaXMgbm90IGNoYW5naW5nLgor
ICAgICAgICAoV2ViQ29yZTo6Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjpzZXRUZXh0QmFzZWxp
bmUpOiBEaXR0by4KKworICAgICAgICAqIGh0bWwvY2FudmFzL0NhbnZhc1JlbmRlcmluZ0NvbnRl
eHQyRC5oOiBNYWRlIHNhdmUgYW4gaW5saW5lIGZ1bmN0aW9uIHRoYXQgYnVtcHMKKyAgICAgICAg
bV91bnJlYWxpemVkU2F2ZUNvdW50LiBSZW1vdmVkIHNldEFsbEF0dHJpYnV0ZXNUb0RlZmF1bHQu
IEFkZGVkIE9WRVJSSURFIGZvciBhbGwgdGhlCisgICAgICAgIHZpcnR1YWwgZnVuY3Rpb24gb3Zl
cnJpZGVzLCBhbmQgbWFkZSB0aGVtIGFsbCBwcml2YXRlLiBNb3ZlZCBtX3BhdGggZG93biB3aXRo
IHRoZSBvdGhlciBkYXRhCisgICAgICAgIG1lbWJlcnMuIFJlbmFtZWQgdGhlIG5vbi1jb25zdCBz
dGF0ZSBmdW5jdGlvbiB0byBtb2RpZmlhYmxlU3RhdGUuIEFkZGVkIGEgcmVhbGl6ZVNhdmVzCisg
ICAgICAgIGZ1bmN0aW9uIGFuZCB0aGUgcmVhbGl6ZVNhdmVzTG9vcCBmb3IgdGhlIHVudXN1YWwg
Y2FzZSB3aGVyZSB0aGVyZSBpcyB3b3JrIHRvIGRvLgorICAgICAgICBBZGRlZCBtX3VucmVhbGl6
ZWRTYXZlQ291bnQuCisKIDIwMTItMDUtMTQgIEx1a2UgTWFjcGhlcnNvbiAgPG1hY3BoZXJzb25A
Y2hyb21pdW0ub3JnPgogCiAgICAgICAgIE1ha2UgU3R5bGVSZXNvbHZlcjo6YXBwbHlNYXRjaGVk
UHJvcGVydGllcyBhbmQgOjphcHBseVByb3BlcnRpZXMgdXNlIGVudW0gdGVtcGxhdGUgcGFyYW1l
dGVyIGluc3RlYWQgb2YgYm9vbC4KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL0Nh
bnZhc1JlbmRlcmluZ0NvbnRleHQyRC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
aHRtbC9jYW52YXMvQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJELmNwcAkocmV2aXNpb24gMTE2OTA5
KQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJE
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDkgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3LCAyMDA4
LCAyMDA5LCAyMDEwLCAyMDExLCAyMDEyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
ICAqIENvcHlyaWdodCAoQykgMjAwOCwgMjAxMCBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRz
IHN1YnNpZGlhcnkoLWllcykKICAqIENvcHlyaWdodCAoQykgMjAwNyBBbHAgVG9rZXIgPGFscEBh
dG9rZXIuY29tPgogICogQ29weXJpZ2h0IChDKSAyMDA4IEVyaWMgU2VpZGVsIDxlcmljQHdlYmtp
dC5vcmc+CkBAIC0xMTUsNiArMTE1LDcgQEAgcHJpdmF0ZToKIENhbnZhc1JlbmRlcmluZ0NvbnRl
eHQyRDo6Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEKEhUTUxDYW52YXNFbGVtZW50KiBjYW52YXMs
IGJvb2wgdXNlc0NTU0NvbXBhdGliaWxpdHlQYXJzZU1vZGUsIGJvb2wgdXNlc0Rhc2hib2FyZENv
bXBhdGliaWxpdHlNb2RlKQogICAgIDogQ2FudmFzUmVuZGVyaW5nQ29udGV4dChjYW52YXMpCiAg
ICAgLCBtX3N0YXRlU3RhY2soMSkKKyAgICAsIG1fdW5yZWFsaXplZFNhdmVDb3VudCgwKQogICAg
ICwgbV91c2VzQ1NTQ29tcGF0aWJpbGl0eVBhcnNlTW9kZSh1c2VzQ1NTQ29tcGF0aWJpbGl0eVBh
cnNlTW9kZSkKICNpZiBFTkFCTEUoREFTSEJPQVJEX1NVUFBPUlQpCiAgICAgLCBtX3VzZXNEYXNo
Ym9hcmRDb21wYXRpYmlsaXR5TW9kZSh1c2VzRGFzaGJvYXJkQ29tcGF0aWJpbGl0eU1vZGUpCkBA
IC0xNDgsNyArMTQ5LDEwIEBAIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6fkNhbnZhc1JlbmRl
cmkKIGJvb2wgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjppc0FjY2VsZXJhdGVkKCkgY29uc3QK
IHsKICNpZiBVU0UoSU9TVVJGQUNFX0NBTlZBU19CQUNLSU5HX1NUT1JFKSB8fCBFTkFCTEUoQUND
RUxFUkFURURfMkRfQ0FOVkFTKQotICAgIHJldHVybiBjYW52YXMoKS0+aGFzQ3JlYXRlZEltYWdl
QnVmZmVyKCkgJiYgZHJhd2luZ0NvbnRleHQoKSAmJiBkcmF3aW5nQ29udGV4dCgpLT5pc0FjY2Vs
ZXJhdGVkQ29udGV4dCgpOworICAgIGlmICghY2FudmFzKCktPmhhc0NyZWF0ZWRJbWFnZUJ1ZmZl
cigpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0
ID0gZHJhd2luZ0NvbnRleHQoKTsKKyAgICByZXR1cm4gY29udGV4dCAmJiBjb250ZXh0LT5pc0Fj
Y2VsZXJhdGVkQ29udGV4dCgpOwogI2Vsc2UKICAgICByZXR1cm4gZmFsc2U7CiAjZW5kaWYKQEAg
LTE2MCw2ICsxNjQsNyBAQCB2b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6cmVzZXQoKQog
ICAgIG1fc3RhdGVTdGFjay5yZXNpemUoMSk7CiAgICAgbV9zdGF0ZVN0YWNrLmZpcnN0KCkgPSBT
dGF0ZSgpOwogICAgIG1fcGF0aC5jbGVhcigpOworICAgIG1fdW5yZWFsaXplZFNhdmVDb3VudCA9
IDA7CiB9CiAKIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6U3RhdGU6OlN0YXRlKCkKQEAgLTI1
OSwxOCArMjY0LDI0IEBAIHZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjpTdGF0ZTo6Zm8K
ICAgICBtX2ZvbnQudXBkYXRlKGZvbnRTZWxlY3Rvcik7CiB9CiAKLXZvaWQgQ2FudmFzUmVuZGVy
aW5nQ29udGV4dDJEOjpzYXZlKCkKK3ZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjpyZWFs
aXplU2F2ZXNMb29wKCkKIHsKKyAgICBBU1NFUlQobV91bnJlYWxpemVkU2F2ZUNvdW50KTsKICAg
ICBBU1NFUlQobV9zdGF0ZVN0YWNrLnNpemUoKSA+PSAxKTsKLSAgICBtX3N0YXRlU3RhY2suYXBw
ZW5kKHN0YXRlKCkpOwotICAgIEdyYXBoaWNzQ29udGV4dCogYyA9IGRyYXdpbmdDb250ZXh0KCk7
Ci0gICAgaWYgKCFjKQotICAgICAgICByZXR1cm47Ci0gICAgYy0+c2F2ZSgpOworICAgIEdyYXBo
aWNzQ29udGV4dCogY29udGV4dCA9IGRyYXdpbmdDb250ZXh0KCk7CisgICAgZG8geworICAgICAg
ICBtX3N0YXRlU3RhY2suYXBwZW5kKHN0YXRlKCkpOworICAgICAgICBpZiAoY29udGV4dCkKKyAg
ICAgICAgICAgIGNvbnRleHQtPnNhdmUoKTsKKyAgICB9IHdoaWxlICgtLW1fdW5yZWFsaXplZFNh
dmVDb3VudCk7CiB9CiAKIHZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjpyZXN0b3JlKCkK
IHsKKyAgICBpZiAobV91bnJlYWxpemVkU2F2ZUNvdW50KSB7CisgICAgICAgIC0tbV91bnJlYWxp
emVkU2F2ZUNvdW50OworICAgICAgICByZXR1cm47CisgICAgfQogICAgIEFTU0VSVChtX3N0YXRl
U3RhY2suc2l6ZSgpID49IDEpOwogICAgIGlmIChtX3N0YXRlU3RhY2suc2l6ZSgpIDw9IDEpCiAg
ICAgICAgIHJldHVybjsKQEAgLTI4MywyMyArMjk0LDYgQEAgdm9pZCBDYW52YXNSZW5kZXJpbmdD
b250ZXh0MkQ6OnJlc3RvcmUoKQogICAgIGMtPnJlc3RvcmUoKTsKIH0KIAotdm9pZCBDYW52YXNS
ZW5kZXJpbmdDb250ZXh0MkQ6OnNldEFsbEF0dHJpYnV0ZXNUb0RlZmF1bHQoKQotewotICAgIHN0
YXRlKCkubV9nbG9iYWxBbHBoYSA9IDE7Ci0gICAgc3RhdGUoKS5tX3NoYWRvd09mZnNldCA9IEZs
b2F0U2l6ZSgpOwotICAgIHN0YXRlKCkubV9zaGFkb3dCbHVyID0gMDsKLSAgICBzdGF0ZSgpLm1f
c2hhZG93Q29sb3IgPSBDb2xvcjo6dHJhbnNwYXJlbnQ7Ci0gICAgc3RhdGUoKS5tX2dsb2JhbENv
bXBvc2l0ZSA9IENvbXBvc2l0ZVNvdXJjZU92ZXI7Ci0KLSAgICBHcmFwaGljc0NvbnRleHQqIGNv
bnRleHQgPSBkcmF3aW5nQ29udGV4dCgpOwotICAgIGlmICghY29udGV4dCkKLSAgICAgICAgcmV0
dXJuOwotCi0gICAgYXBwbHlTaGFkb3coKTsKLSAgICBjb250ZXh0LT5zZXRBbHBoYSgxKTsKLSAg
ICBjb250ZXh0LT5zZXRDb21wb3NpdGVPcGVyYXRpb24oQ29tcG9zaXRlU291cmNlT3Zlcik7Ci19
Ci0KIENhbnZhc1N0eWxlKiBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6OnN0cm9rZVN0eWxlKCkg
Y29uc3QKIHsKICAgICByZXR1cm4gc3RhdGUoKS5tX3N0cm9rZVN0eWxlLmdldCgpOwpAQCAtMzIz
LDEyICszMTcsMTMgQEAgdm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6OnNldFN0cm9rZQog
ICAgIH0gZWxzZQogICAgICAgICBjaGVja09yaWdpbihzdHlsZS0+Y2FudmFzUGF0dGVybigpKTsK
IAotICAgIHN0YXRlKCkubV9zdHJva2VTdHlsZSA9IHN0eWxlLnJlbGVhc2UoKTsKKyAgICByZWFs
aXplU2F2ZXMoKTsKKyAgICBtb2RpZmlhYmxlU3RhdGUoKS5tX3N0cm9rZVN0eWxlID0gc3R5bGUu
cmVsZWFzZSgpOwogICAgIEdyYXBoaWNzQ29udGV4dCogYyA9IGRyYXdpbmdDb250ZXh0KCk7CiAg
ICAgaWYgKCFjKQogICAgICAgICByZXR1cm47CiAgICAgc3RhdGUoKS5tX3N0cm9rZVN0eWxlLT5h
cHBseVN0cm9rZUNvbG9yKGMpOwotICAgIHN0YXRlKCkubV91bnBhcnNlZFN0cm9rZUNvbG9yID0g
U3RyaW5nKCk7CisgICAgbW9kaWZpYWJsZVN0YXRlKCkubV91bnBhcnNlZFN0cm9rZUNvbG9yID0g
U3RyaW5nKCk7CiB9CiAKIENhbnZhc1N0eWxlKiBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6OmZp
bGxTdHlsZSgpIGNvbnN0CkBAIC0zNTQsMTIgKzM0OSwxMyBAQCB2b2lkIENhbnZhc1JlbmRlcmlu
Z0NvbnRleHQyRDo6c2V0RmlsbFN0CiAgICAgfSBlbHNlCiAgICAgICAgIGNoZWNrT3JpZ2luKHN0
eWxlLT5jYW52YXNQYXR0ZXJuKCkpOwogCi0gICAgc3RhdGUoKS5tX2ZpbGxTdHlsZSA9IHN0eWxl
LnJlbGVhc2UoKTsKKyAgICByZWFsaXplU2F2ZXMoKTsKKyAgICBtb2RpZmlhYmxlU3RhdGUoKS5t
X2ZpbGxTdHlsZSA9IHN0eWxlLnJlbGVhc2UoKTsKICAgICBHcmFwaGljc0NvbnRleHQqIGMgPSBk
cmF3aW5nQ29udGV4dCgpOwogICAgIGlmICghYykKICAgICAgICAgcmV0dXJuOwogICAgIHN0YXRl
KCkubV9maWxsU3R5bGUtPmFwcGx5RmlsbENvbG9yKGMpOwotICAgIHN0YXRlKCkubV91bnBhcnNl
ZEZpbGxDb2xvciA9IFN0cmluZygpOworICAgIG1vZGlmaWFibGVTdGF0ZSgpLm1fdW5wYXJzZWRG
aWxsQ29sb3IgPSBTdHJpbmcoKTsKIH0KIAogZmxvYXQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJE
OjpsaW5lV2lkdGgoKSBjb25zdApAQCAtMzcxLDcgKzM2NywxMCBAQCB2b2lkIENhbnZhc1JlbmRl
cmluZ0NvbnRleHQyRDo6c2V0TGluZVdpCiB7CiAgICAgaWYgKCEoaXNmaW5pdGUod2lkdGgpICYm
IHdpZHRoID4gMCkpCiAgICAgICAgIHJldHVybjsKLSAgICBzdGF0ZSgpLm1fbGluZVdpZHRoID0g
d2lkdGg7CisgICAgaWYgKHN0YXRlKCkubV9saW5lV2lkdGggPT0gd2lkdGgpCisgICAgICAgIHJl
dHVybjsKKyAgICByZWFsaXplU2F2ZXMoKTsKKyAgICBtb2RpZmlhYmxlU3RhdGUoKS5tX2xpbmVX
aWR0aCA9IHdpZHRoOwogICAgIEdyYXBoaWNzQ29udGV4dCogYyA9IGRyYXdpbmdDb250ZXh0KCk7
CiAgICAgaWYgKCFjKQogICAgICAgICByZXR1cm47CkBAIC0zODgsNyArMzg3LDEwIEBAIHZvaWQg
Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjpzZXRMaW5lQ2EKICAgICBMaW5lQ2FwIGNhcDsKICAg
ICBpZiAoIXBhcnNlTGluZUNhcChzLCBjYXApKQogICAgICAgICByZXR1cm47Ci0gICAgc3RhdGUo
KS5tX2xpbmVDYXAgPSBjYXA7CisgICAgaWYgKHN0YXRlKCkubV9saW5lQ2FwID09IGNhcCkKKyAg
ICAgICAgcmV0dXJuOworICAgIHJlYWxpemVTYXZlcygpOworICAgIG1vZGlmaWFibGVTdGF0ZSgp
Lm1fbGluZUNhcCA9IGNhcDsKICAgICBHcmFwaGljc0NvbnRleHQqIGMgPSBkcmF3aW5nQ29udGV4
dCgpOwogICAgIGlmICghYykKICAgICAgICAgcmV0dXJuOwpAQCAtNDA1LDcgKzQwNywxMCBAQCB2
b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6c2V0TGluZUpvCiAgICAgTGluZUpvaW4gam9p
bjsKICAgICBpZiAoIXBhcnNlTGluZUpvaW4ocywgam9pbikpCiAgICAgICAgIHJldHVybjsKLSAg
ICBzdGF0ZSgpLm1fbGluZUpvaW4gPSBqb2luOworICAgIGlmIChzdGF0ZSgpLm1fbGluZUpvaW4g
PT0gam9pbikKKyAgICAgICAgcmV0dXJuOworICAgIHJlYWxpemVTYXZlcygpOworICAgIG1vZGlm
aWFibGVTdGF0ZSgpLm1fbGluZUpvaW4gPSBqb2luOwogICAgIEdyYXBoaWNzQ29udGV4dCogYyA9
IGRyYXdpbmdDb250ZXh0KCk7CiAgICAgaWYgKCFjKQogICAgICAgICByZXR1cm47CkBAIC00MjEs
NyArNDI2LDEwIEBAIHZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjpzZXRNaXRlckwKIHsK
ICAgICBpZiAoIShpc2Zpbml0ZShsaW1pdCkgJiYgbGltaXQgPiAwKSkKICAgICAgICAgcmV0dXJu
OwotICAgIHN0YXRlKCkubV9taXRlckxpbWl0ID0gbGltaXQ7CisgICAgaWYgKHN0YXRlKCkubV9t
aXRlckxpbWl0ID09IGxpbWl0KQorICAgICAgICByZXR1cm47CisgICAgcmVhbGl6ZVNhdmVzKCk7
CisgICAgbW9kaWZpYWJsZVN0YXRlKCkubV9taXRlckxpbWl0ID0gbGltaXQ7CiAgICAgR3JhcGhp
Y3NDb250ZXh0KiBjID0gZHJhd2luZ0NvbnRleHQoKTsKICAgICBpZiAoIWMpCiAgICAgICAgIHJl
dHVybjsKQEAgLTQzNyw3ICs0NDUsMTAgQEAgdm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6
OnNldFNoYWRvdwogewogICAgIGlmICghaXNmaW5pdGUoeCkpCiAgICAgICAgIHJldHVybjsKLSAg
ICBzdGF0ZSgpLm1fc2hhZG93T2Zmc2V0LnNldFdpZHRoKHgpOworICAgIGlmIChzdGF0ZSgpLm1f
c2hhZG93T2Zmc2V0LndpZHRoKCkgPT0geCkKKyAgICAgICAgcmV0dXJuOworICAgIHJlYWxpemVT
YXZlcygpOworICAgIG1vZGlmaWFibGVTdGF0ZSgpLm1fc2hhZG93T2Zmc2V0LnNldFdpZHRoKHgp
OwogICAgIGFwcGx5U2hhZG93KCk7CiB9CiAKQEAgLTQ1MCw3ICs0NjEsMTAgQEAgdm9pZCBDYW52
YXNSZW5kZXJpbmdDb250ZXh0MkQ6OnNldFNoYWRvdwogewogICAgIGlmICghaXNmaW5pdGUoeSkp
CiAgICAgICAgIHJldHVybjsKLSAgICBzdGF0ZSgpLm1fc2hhZG93T2Zmc2V0LnNldEhlaWdodCh5
KTsKKyAgICBpZiAoc3RhdGUoKS5tX3NoYWRvd09mZnNldC5oZWlnaHQoKSA9PSB5KQorICAgICAg
ICByZXR1cm47CisgICAgcmVhbGl6ZVNhdmVzKCk7CisgICAgbW9kaWZpYWJsZVN0YXRlKCkubV9z
aGFkb3dPZmZzZXQuc2V0SGVpZ2h0KHkpOwogICAgIGFwcGx5U2hhZG93KCk7CiB9CiAKQEAgLTQ2
Myw3ICs0NzcsMTAgQEAgdm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6OnNldFNoYWRvdwog
ewogICAgIGlmICghKGlzZmluaXRlKGJsdXIpICYmIGJsdXIgPj0gMCkpCiAgICAgICAgIHJldHVy
bjsKLSAgICBzdGF0ZSgpLm1fc2hhZG93Qmx1ciA9IGJsdXI7CisgICAgaWYgKHN0YXRlKCkubV9z
aGFkb3dCbHVyID09IGJsdXIpCisgICAgICAgIHJldHVybjsKKyAgICByZWFsaXplU2F2ZXMoKTsK
KyAgICBtb2RpZmlhYmxlU3RhdGUoKS5tX3NoYWRvd0JsdXIgPSBibHVyOwogICAgIGFwcGx5U2hh
ZG93KCk7CiB9CiAKQEAgLTQ3NCw4ICs0OTEsMTMgQEAgU3RyaW5nIENhbnZhc1JlbmRlcmluZ0Nv
bnRleHQyRDo6c2hhZG93QwogCiB2b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6c2V0U2hh
ZG93Q29sb3IoY29uc3QgU3RyaW5nJiBjb2xvcikKIHsKLSAgICBpZiAoIXBhcnNlQ29sb3JPckN1
cnJlbnRDb2xvcihzdGF0ZSgpLm1fc2hhZG93Q29sb3IsIGNvbG9yLCBjYW52YXMoKSkpCisgICAg
UkdCQTMyIHJnYmE7CisgICAgaWYgKCFwYXJzZUNvbG9yT3JDdXJyZW50Q29sb3IocmdiYSwgY29s
b3IsIGNhbnZhcygpKSkKKyAgICAgICAgcmV0dXJuOworICAgIGlmIChzdGF0ZSgpLm1fc2hhZG93
Q29sb3IgPT0gcmdiYSkKICAgICAgICAgcmV0dXJuOworICAgIHJlYWxpemVTYXZlcygpOworICAg
IG1vZGlmaWFibGVTdGF0ZSgpLm1fc2hhZG93Q29sb3IgPSByZ2JhOwogICAgIGFwcGx5U2hhZG93
KCk7CiB9CiAKQEAgLTQ4Niw4ICs1MDgsMTAgQEAgY29uc3QgRGFzaEFycmF5KiBDYW52YXNSZW5k
ZXJpbmdDb250ZXh0MgogCiB2b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6c2V0V2Via2l0
TGluZURhc2goY29uc3QgRGFzaEFycmF5JiBkYXNoKQogewotICAgIHN0YXRlKCkubV9saW5lRGFz
aCA9IGRhc2g7Ci0KKyAgICBpZiAoc3RhdGUoKS5tX2xpbmVEYXNoID09IGRhc2gpCisgICAgICAg
IHJldHVybjsKKyAgICByZWFsaXplU2F2ZXMoKTsKKyAgICBtb2RpZmlhYmxlU3RhdGUoKS5tX2xp
bmVEYXNoID0gZGFzaDsKICAgICBHcmFwaGljc0NvbnRleHQqIGMgPSBkcmF3aW5nQ29udGV4dCgp
OwogICAgIGlmICghYykKICAgICAgICAgcmV0dXJuOwpAQCAtNTAzLDkgKzUyNywxMCBAQCB2b2lk
IENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6c2V0V2Via2l0CiB7CiAgICAgaWYgKCFpc2Zpbml0
ZShvZmZzZXQpKQogICAgICAgICByZXR1cm47Ci0KLSAgICBzdGF0ZSgpLm1fbGluZURhc2hPZmZz
ZXQgPSBvZmZzZXQ7Ci0KKyAgICBpZiAoc3RhdGUoKS5tX2xpbmVEYXNoT2Zmc2V0ID09IG9mZnNl
dCkKKyAgICAgICAgcmV0dXJuOworICAgIHJlYWxpemVTYXZlcygpOworICAgIG1vZGlmaWFibGVT
dGF0ZSgpLm1fbGluZURhc2hPZmZzZXQgPSBvZmZzZXQ7CiAgICAgR3JhcGhpY3NDb250ZXh0KiBj
ID0gZHJhd2luZ0NvbnRleHQoKTsKICAgICBpZiAoIWMpCiAgICAgICAgIHJldHVybjsKQEAgLTUy
MSw3ICs1NDYsMTAgQEAgdm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6OnNldEdsb2JhbAog
ewogICAgIGlmICghKGFscGhhID49IDAgJiYgYWxwaGEgPD0gMSkpCiAgICAgICAgIHJldHVybjsK
LSAgICBzdGF0ZSgpLm1fZ2xvYmFsQWxwaGEgPSBhbHBoYTsKKyAgICBpZiAoc3RhdGUoKS5tX2ds
b2JhbEFscGhhID09IGFscGhhKQorICAgICAgICByZXR1cm47CisgICAgcmVhbGl6ZVNhdmVzKCk7
CisgICAgbW9kaWZpYWJsZVN0YXRlKCkubV9nbG9iYWxBbHBoYSA9IGFscGhhOwogICAgIEdyYXBo
aWNzQ29udGV4dCogYyA9IGRyYXdpbmdDb250ZXh0KCk7CiAgICAgaWYgKCFjKQogICAgICAgICBy
ZXR1cm47CkBAIC01MzgsNyArNTY2LDEwIEBAIHZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJE
OjpzZXRHbG9iYWwKICAgICBDb21wb3NpdGVPcGVyYXRvciBvcDsKICAgICBpZiAoIXBhcnNlQ29t
cG9zaXRlT3BlcmF0b3Iob3BlcmF0aW9uLCBvcCkpCiAgICAgICAgIHJldHVybjsKLSAgICBzdGF0
ZSgpLm1fZ2xvYmFsQ29tcG9zaXRlID0gb3A7CisgICAgaWYgKHN0YXRlKCkubV9nbG9iYWxDb21w
b3NpdGUgPT0gb3ApCisgICAgICAgIHJldHVybjsKKyAgICByZWFsaXplU2F2ZXMoKTsKKyAgICBt
b2RpZmlhYmxlU3RhdGUoKS5tX2dsb2JhbENvbXBvc2l0ZSA9IG9wOwogICAgIEdyYXBoaWNzQ29u
dGV4dCogYyA9IGRyYXdpbmdDb250ZXh0KCk7CiAgICAgaWYgKCFjKQogICAgICAgICByZXR1cm47
CkBAIC01NTgsMTIgKzU4OSwxNyBAQCB2b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6c2Nh
bGUoZmxvCiAKICAgICBBZmZpbmVUcmFuc2Zvcm0gbmV3VHJhbnNmb3JtID0gc3RhdGUoKS5tX3Ry
YW5zZm9ybTsKICAgICBuZXdUcmFuc2Zvcm0uc2NhbGVOb25Vbmlmb3JtKHN4LCBzeSk7CisgICAg
aWYgKHN0YXRlKCkubV90cmFuc2Zvcm0gPT0gbmV3VHJhbnNmb3JtKQorICAgICAgICByZXR1cm47
CisKKyAgICByZWFsaXplU2F2ZXMoKTsKKwogICAgIGlmICghbmV3VHJhbnNmb3JtLmlzSW52ZXJ0
aWJsZSgpKSB7Ci0gICAgICAgIHN0YXRlKCkubV9pbnZlcnRpYmxlQ1RNID0gZmFsc2U7CisgICAg
ICAgIG1vZGlmaWFibGVTdGF0ZSgpLm1faW52ZXJ0aWJsZUNUTSA9IGZhbHNlOwogICAgICAgICBy
ZXR1cm47CiAgICAgfQogCi0gICAgc3RhdGUoKS5tX3RyYW5zZm9ybSA9IG5ld1RyYW5zZm9ybTsK
KyAgICBtb2RpZmlhYmxlU3RhdGUoKS5tX3RyYW5zZm9ybSA9IG5ld1RyYW5zZm9ybTsKICAgICBj
LT5zY2FsZShGbG9hdFNpemUoc3gsIHN5KSk7CiAgICAgbV9wYXRoLnRyYW5zZm9ybShBZmZpbmVU
cmFuc2Zvcm0oKS5zY2FsZU5vblVuaWZvcm0oMS4wIC8gc3gsIDEuMCAvIHN5KSk7CiB9CkBAIC01
ODEsMTIgKzYxNywxNyBAQCB2b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6cm90YXRlKGZs
CiAKICAgICBBZmZpbmVUcmFuc2Zvcm0gbmV3VHJhbnNmb3JtID0gc3RhdGUoKS5tX3RyYW5zZm9y
bTsKICAgICBuZXdUcmFuc2Zvcm0ucm90YXRlKGFuZ2xlSW5SYWRpYW5zIC8gcGlEb3VibGUgKiAx
ODAuMCk7CisgICAgaWYgKHN0YXRlKCkubV90cmFuc2Zvcm0gPT0gbmV3VHJhbnNmb3JtKQorICAg
ICAgICByZXR1cm47CisKKyAgICByZWFsaXplU2F2ZXMoKTsKKwogICAgIGlmICghbmV3VHJhbnNm
b3JtLmlzSW52ZXJ0aWJsZSgpKSB7Ci0gICAgICAgIHN0YXRlKCkubV9pbnZlcnRpYmxlQ1RNID0g
ZmFsc2U7CisgICAgICAgIG1vZGlmaWFibGVTdGF0ZSgpLm1faW52ZXJ0aWJsZUNUTSA9IGZhbHNl
OwogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgc3RhdGUoKS5tX3RyYW5zZm9ybSA9IG5l
d1RyYW5zZm9ybTsKKyAgICBtb2RpZmlhYmxlU3RhdGUoKS5tX3RyYW5zZm9ybSA9IG5ld1RyYW5z
Zm9ybTsKICAgICBjLT5yb3RhdGUoYW5nbGVJblJhZGlhbnMpOwogICAgIG1fcGF0aC50cmFuc2Zv
cm0oQWZmaW5lVHJhbnNmb3JtKCkucm90YXRlKC1hbmdsZUluUmFkaWFucyAvIHBpRG91YmxlICog
MTgwLjApKTsKIH0KQEAgLTYwNCwxMiArNjQ1LDE3IEBAIHZvaWQgQ2FudmFzUmVuZGVyaW5nQ29u
dGV4dDJEOjp0cmFuc2xhdGUKIAogICAgIEFmZmluZVRyYW5zZm9ybSBuZXdUcmFuc2Zvcm0gPSBz
dGF0ZSgpLm1fdHJhbnNmb3JtOwogICAgIG5ld1RyYW5zZm9ybS50cmFuc2xhdGUodHgsIHR5KTsK
KyAgICBpZiAoc3RhdGUoKS5tX3RyYW5zZm9ybSA9PSBuZXdUcmFuc2Zvcm0pCisgICAgICAgIHJl
dHVybjsKKworICAgIHJlYWxpemVTYXZlcygpOworCiAgICAgaWYgKCFuZXdUcmFuc2Zvcm0uaXNJ
bnZlcnRpYmxlKCkpIHsKLSAgICAgICAgc3RhdGUoKS5tX2ludmVydGlibGVDVE0gPSBmYWxzZTsK
KyAgICAgICAgbW9kaWZpYWJsZVN0YXRlKCkubV9pbnZlcnRpYmxlQ1RNID0gZmFsc2U7CiAgICAg
ICAgIHJldHVybjsKICAgICB9CiAKLSAgICBzdGF0ZSgpLm1fdHJhbnNmb3JtID0gbmV3VHJhbnNm
b3JtOworICAgIG1vZGlmaWFibGVTdGF0ZSgpLm1fdHJhbnNmb3JtID0gbmV3VHJhbnNmb3JtOwog
ICAgIGMtPnRyYW5zbGF0ZSh0eCwgdHkpOwogICAgIG1fcGF0aC50cmFuc2Zvcm0oQWZmaW5lVHJh
bnNmb3JtKCkudHJhbnNsYXRlKC10eCwgLXR5KSk7CiB9CkBAIC02MjcsMTIgKzY3MywxNyBAQCB2
b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6dHJhbnNmb3JtCiAKICAgICBBZmZpbmVUcmFu
c2Zvcm0gdHJhbnNmb3JtKG0xMSwgbTEyLCBtMjEsIG0yMiwgZHgsIGR5KTsKICAgICBBZmZpbmVU
cmFuc2Zvcm0gbmV3VHJhbnNmb3JtID0gc3RhdGUoKS5tX3RyYW5zZm9ybSAqIHRyYW5zZm9ybTsK
KyAgICBpZiAoc3RhdGUoKS5tX3RyYW5zZm9ybSA9PSBuZXdUcmFuc2Zvcm0pCisgICAgICAgIHJl
dHVybjsKKworICAgIHJlYWxpemVTYXZlcygpOworCiAgICAgaWYgKCFuZXdUcmFuc2Zvcm0uaXNJ
bnZlcnRpYmxlKCkpIHsKLSAgICAgICAgc3RhdGUoKS5tX2ludmVydGlibGVDVE0gPSBmYWxzZTsK
KyAgICAgICAgbW9kaWZpYWJsZVN0YXRlKCkubV9pbnZlcnRpYmxlQ1RNID0gZmFsc2U7CiAgICAg
ICAgIHJldHVybjsKICAgICB9CiAKLSAgICBzdGF0ZSgpLm1fdHJhbnNmb3JtID0gbmV3VHJhbnNm
b3JtOworICAgIG1vZGlmaWFibGVTdGF0ZSgpLm1fdHJhbnNmb3JtID0gbmV3VHJhbnNmb3JtOwog
ICAgIGMtPmNvbmNhdENUTSh0cmFuc2Zvcm0pOwogICAgIG1fcGF0aC50cmFuc2Zvcm0odHJhbnNm
b3JtLmludmVyc2UoKSk7CiB9CkBAIC02NDksMTEgKzcwMCwxNCBAQCB2b2lkIENhbnZhc1JlbmRl
cmluZ0NvbnRleHQyRDo6c2V0VHJhbnNmCiAgICAgQWZmaW5lVHJhbnNmb3JtIGN0bSA9IHN0YXRl
KCkubV90cmFuc2Zvcm07CiAgICAgaWYgKCFjdG0uaXNJbnZlcnRpYmxlKCkpCiAgICAgICAgIHJl
dHVybjsKKworICAgIHJlYWxpemVTYXZlcygpOworICAgIAogICAgIGMtPnNldENUTShjYW52YXMo
KS0+YmFzZVRyYW5zZm9ybSgpKTsKLSAgICBzdGF0ZSgpLm1fdHJhbnNmb3JtID0gQWZmaW5lVHJh
bnNmb3JtKCk7CisgICAgbW9kaWZpYWJsZVN0YXRlKCkubV90cmFuc2Zvcm0gPSBBZmZpbmVUcmFu
c2Zvcm0oKTsKICAgICBtX3BhdGgudHJhbnNmb3JtKGN0bSk7CiAKLSAgICBzdGF0ZSgpLm1faW52
ZXJ0aWJsZUNUTSA9IHRydWU7CisgICAgbW9kaWZpYWJsZVN0YXRlKCkubV9pbnZlcnRpYmxlQ1RN
ID0gdHJ1ZTsKICAgICB0cmFuc2Zvcm0obTExLCBtMTIsIG0yMSwgbTIyLCBkeCwgZHkpOwogfQog
CkBAIC02NjEsOCArNzE1LDkgQEAgdm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6OnNldFN0
cm9rZQogewogICAgIGlmIChjb2xvciA9PSBzdGF0ZSgpLm1fdW5wYXJzZWRTdHJva2VDb2xvcikK
ICAgICAgICAgcmV0dXJuOworICAgIHJlYWxpemVTYXZlcygpOwogICAgIHNldFN0cm9rZVN0eWxl
KENhbnZhc1N0eWxlOjpjcmVhdGVGcm9tU3RyaW5nKGNvbG9yLCBjYW52YXMoKS0+ZG9jdW1lbnQo
KSkpOwotICAgIHN0YXRlKCkubV91bnBhcnNlZFN0cm9rZUNvbG9yID0gY29sb3I7CisgICAgbW9k
aWZpYWJsZVN0YXRlKCkubV91bnBhcnNlZFN0cm9rZUNvbG9yID0gY29sb3I7CiB9CiAKIHZvaWQg
Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjpzZXRTdHJva2VDb2xvcihmbG9hdCBncmF5TGV2ZWwp
CkBAIC03MDIsOCArNzU3LDkgQEAgdm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6OnNldEZp
bGxDbwogewogICAgIGlmIChjb2xvciA9PSBzdGF0ZSgpLm1fdW5wYXJzZWRGaWxsQ29sb3IpCiAg
ICAgICAgIHJldHVybjsKKyAgICByZWFsaXplU2F2ZXMoKTsKICAgICBzZXRGaWxsU3R5bGUoQ2Fu
dmFzU3R5bGU6OmNyZWF0ZUZyb21TdHJpbmcoY29sb3IsIGNhbnZhcygpLT5kb2N1bWVudCgpKSk7
Ci0gICAgc3RhdGUoKS5tX3VucGFyc2VkRmlsbENvbG9yID0gY29sb3I7CisgICAgbW9kaWZpYWJs
ZVN0YXRlKCkubV91bnBhcnNlZEZpbGxDb2xvciA9IGNvbG9yOwogfQogCiB2b2lkIENhbnZhc1Jl
bmRlcmluZ0NvbnRleHQyRDo6c2V0RmlsbENvbG9yKGZsb2F0IGdyYXlMZXZlbCkKQEAgLTk3MSw2
ICsxMDI3LDcgQEAgdm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6OmNsaXAoKQogICAgICAg
ICByZXR1cm47CiAgICAgaWYgKCFzdGF0ZSgpLm1faW52ZXJ0aWJsZUNUTSkKICAgICAgICAgcmV0
dXJuOworICAgIHJlYWxpemVTYXZlcygpOwogICAgIGMtPmNhbnZhc0NsaXAobV9wYXRoKTsKICNp
ZiBFTkFCTEUoREFTSEJPQVJEX1NVUFBPUlQpCiAgICAgY2xlYXJQYXRoRm9yRGFzaGJvYXJkQmFj
a3dhcmRDb21wYXRpYmlsaXR5TW9kZSgpOwpAQCAtMTAwNCwxMSArMTA2MSwzMCBAQCB2b2lkIENh
bnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6Y2xlYXJSZWN0CiAgICAgICAgIHJldHVybjsKICAgICBG
bG9hdFJlY3QgcmVjdCh4LCB5LCB3aWR0aCwgaGVpZ2h0KTsKIAotICAgIHNhdmUoKTsKLSAgICBz
ZXRBbGxBdHRyaWJ1dGVzVG9EZWZhdWx0KCk7CisgICAgYm9vbCBzYXZlZCA9IGZhbHNlOworICAg
IGlmIChzaG91bGREcmF3U2hhZG93cygpKSB7CisgICAgICAgIGNvbnRleHQtPnNhdmUoKTsKKyAg
ICAgICAgc2F2ZWQgPSB0cnVlOworICAgICAgICBjb250ZXh0LT5zZXRMZWdhY3lTaGFkb3coRmxv
YXRTaXplKCksIDAsIENvbG9yOjp0cmFuc3BhcmVudCwgQ29sb3JTcGFjZURldmljZVJHQik7Cisg
ICAgfQorICAgIGlmIChzdGF0ZSgpLm1fZ2xvYmFsQWxwaGEgIT0gMSkgeworICAgICAgICBpZiAo
IXNhdmVkKSB7CisgICAgICAgICAgICBjb250ZXh0LT5zYXZlKCk7CisgICAgICAgICAgICBzYXZl
ZCA9IHRydWU7CisgICAgICAgIH0KKyAgICAgICAgY29udGV4dC0+c2V0QWxwaGEoMSk7CisgICAg
fQorICAgIGlmIChzdGF0ZSgpLm1fZ2xvYmFsQ29tcG9zaXRlICE9IENvbXBvc2l0ZVNvdXJjZU92
ZXIpIHsKKyAgICAgICAgaWYgKCFzYXZlZCkgeworICAgICAgICAgICAgY29udGV4dC0+c2F2ZSgp
OworICAgICAgICAgICAgc2F2ZWQgPSB0cnVlOworICAgICAgICB9CisgICAgICAgIGNvbnRleHQt
PnNldENvbXBvc2l0ZU9wZXJhdGlvbihDb21wb3NpdGVTb3VyY2VPdmVyKTsKKyAgICB9CiAgICAg
Y29udGV4dC0+Y2xlYXJSZWN0KHJlY3QpOworICAgIGlmIChzYXZlZCkKKyAgICAgICAgY29udGV4
dC0+cmVzdG9yZSgpOwogICAgIGRpZERyYXcocmVjdCk7Ci0gICAgcmVzdG9yZSgpOwogfQogCiB2
b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6ZmlsbFJlY3QoZmxvYXQgeCwgZmxvYXQgeSwg
ZmxvYXQgd2lkdGgsIGZsb2F0IGhlaWdodCkKQEAgLTEwNzksNzIgKzExNTUsNjEgQEAgdm9pZCBD
YW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6OnN0cm9rZVJlYwogCiB2b2lkIENhbnZhc1JlbmRlcmlu
Z0NvbnRleHQyRDo6c2V0U2hhZG93KGZsb2F0IHdpZHRoLCBmbG9hdCBoZWlnaHQsIGZsb2F0IGJs
dXIpCiB7Ci0gICAgc3RhdGUoKS5tX3NoYWRvd09mZnNldCA9IEZsb2F0U2l6ZSh3aWR0aCwgaGVp
Z2h0KTsKLSAgICBzdGF0ZSgpLm1fc2hhZG93Qmx1ciA9IGJsdXI7Ci0gICAgc3RhdGUoKS5tX3No
YWRvd0NvbG9yID0gQ29sb3I6OnRyYW5zcGFyZW50OwotICAgIGFwcGx5U2hhZG93KCk7CisgICAg
c2V0U2hhZG93KEZsb2F0U2l6ZSh3aWR0aCwgaGVpZ2h0KSwgYmx1ciwgQ29sb3I6OnRyYW5zcGFy
ZW50KTsKIH0KIAogdm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6OnNldFNoYWRvdyhmbG9h
dCB3aWR0aCwgZmxvYXQgaGVpZ2h0LCBmbG9hdCBibHVyLCBjb25zdCBTdHJpbmcmIGNvbG9yKQog
ewotICAgIGlmICghcGFyc2VDb2xvck9yQ3VycmVudENvbG9yKHN0YXRlKCkubV9zaGFkb3dDb2xv
ciwgY29sb3IsIGNhbnZhcygpKSkKKyAgICBSR0JBMzIgcmdiYTsKKyAgICBpZiAoIXBhcnNlQ29s
b3JPckN1cnJlbnRDb2xvcihyZ2JhLCBjb2xvciwgY2FudmFzKCkpKQogICAgICAgICByZXR1cm47
Ci0KLSAgICBzdGF0ZSgpLm1fc2hhZG93T2Zmc2V0ID0gRmxvYXRTaXplKHdpZHRoLCBoZWlnaHQp
OwotICAgIHN0YXRlKCkubV9zaGFkb3dCbHVyID0gYmx1cjsKLSAgICBhcHBseVNoYWRvdygpOwor
ICAgIHNldFNoYWRvdyhGbG9hdFNpemUod2lkdGgsIGhlaWdodCksIGJsdXIsIHJnYmEpOwogfQog
CiB2b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6c2V0U2hhZG93KGZsb2F0IHdpZHRoLCBm
bG9hdCBoZWlnaHQsIGZsb2F0IGJsdXIsIGZsb2F0IGdyYXlMZXZlbCkKIHsKLSAgICBzdGF0ZSgp
Lm1fc2hhZG93T2Zmc2V0ID0gRmxvYXRTaXplKHdpZHRoLCBoZWlnaHQpOwotICAgIHN0YXRlKCku
bV9zaGFkb3dCbHVyID0gYmx1cjsKLSAgICBzdGF0ZSgpLm1fc2hhZG93Q29sb3IgPSBtYWtlUkdC
QTMyRnJvbUZsb2F0cyhncmF5TGV2ZWwsIGdyYXlMZXZlbCwgZ3JheUxldmVsLCAxLjBmKTsKLSAg
ICBhcHBseVNoYWRvdygpOworICAgIHNldFNoYWRvdyhGbG9hdFNpemUod2lkdGgsIGhlaWdodCks
IGJsdXIsIG1ha2VSR0JBMzJGcm9tRmxvYXRzKGdyYXlMZXZlbCwgZ3JheUxldmVsLCBncmF5TGV2
ZWwsIDEpKTsKIH0KIAogdm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6OnNldFNoYWRvdyhm
bG9hdCB3aWR0aCwgZmxvYXQgaGVpZ2h0LCBmbG9hdCBibHVyLCBjb25zdCBTdHJpbmcmIGNvbG9y
LCBmbG9hdCBhbHBoYSkKIHsKICAgICBSR0JBMzIgcmdiYTsKLQogICAgIGlmICghcGFyc2VDb2xv
ck9yQ3VycmVudENvbG9yKHJnYmEsIGNvbG9yLCBjYW52YXMoKSkpCiAgICAgICAgIHJldHVybjsK
LQotICAgIHN0YXRlKCkubV9zaGFkb3dDb2xvciA9IGNvbG9yV2l0aE92ZXJyaWRlQWxwaGEocmdi
YSwgYWxwaGEpOwotICAgIHN0YXRlKCkubV9zaGFkb3dPZmZzZXQgPSBGbG9hdFNpemUod2lkdGgs
IGhlaWdodCk7Ci0gICAgc3RhdGUoKS5tX3NoYWRvd0JsdXIgPSBibHVyOwotICAgIGFwcGx5U2hh
ZG93KCk7CisgICAgc2V0U2hhZG93KEZsb2F0U2l6ZSh3aWR0aCwgaGVpZ2h0KSwgYmx1ciwgY29s
b3JXaXRoT3ZlcnJpZGVBbHBoYShyZ2JhLCBhbHBoYSkpOwogfQogCiB2b2lkIENhbnZhc1JlbmRl
cmluZ0NvbnRleHQyRDo6c2V0U2hhZG93KGZsb2F0IHdpZHRoLCBmbG9hdCBoZWlnaHQsIGZsb2F0
IGJsdXIsIGZsb2F0IGdyYXlMZXZlbCwgZmxvYXQgYWxwaGEpCiB7Ci0gICAgc3RhdGUoKS5tX3No
YWRvd09mZnNldCA9IEZsb2F0U2l6ZSh3aWR0aCwgaGVpZ2h0KTsKLSAgICBzdGF0ZSgpLm1fc2hh
ZG93Qmx1ciA9IGJsdXI7Ci0gICAgc3RhdGUoKS5tX3NoYWRvd0NvbG9yID0gbWFrZVJHQkEzMkZy
b21GbG9hdHMoZ3JheUxldmVsLCBncmF5TGV2ZWwsIGdyYXlMZXZlbCwgYWxwaGEpOwotICAgIGFw
cGx5U2hhZG93KCk7CisgICAgc2V0U2hhZG93KEZsb2F0U2l6ZSh3aWR0aCwgaGVpZ2h0KSwgYmx1
ciwgbWFrZVJHQkEzMkZyb21GbG9hdHMoZ3JheUxldmVsLCBncmF5TGV2ZWwsIGdyYXlMZXZlbCwg
YWxwaGEpKTsKIH0KIAogdm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6OnNldFNoYWRvdyhm
bG9hdCB3aWR0aCwgZmxvYXQgaGVpZ2h0LCBmbG9hdCBibHVyLCBmbG9hdCByLCBmbG9hdCBnLCBm
bG9hdCBiLCBmbG9hdCBhKQogewotICAgIHN0YXRlKCkubV9zaGFkb3dPZmZzZXQgPSBGbG9hdFNp
emUod2lkdGgsIGhlaWdodCk7Ci0gICAgc3RhdGUoKS5tX3NoYWRvd0JsdXIgPSBibHVyOwotICAg
IHN0YXRlKCkubV9zaGFkb3dDb2xvciA9IG1ha2VSR0JBMzJGcm9tRmxvYXRzKHIsIGcsIGIsIGEp
OwotICAgIGFwcGx5U2hhZG93KCk7CisgICAgc2V0U2hhZG93KEZsb2F0U2l6ZSh3aWR0aCwgaGVp
Z2h0KSwgYmx1ciwgbWFrZVJHQkEzMkZyb21GbG9hdHMociwgZywgYiwgYSkpOwogfQogCiB2b2lk
IENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6c2V0U2hhZG93KGZsb2F0IHdpZHRoLCBmbG9hdCBo
ZWlnaHQsIGZsb2F0IGJsdXIsIGZsb2F0IGMsIGZsb2F0IG0sIGZsb2F0IHksIGZsb2F0IGssIGZs
b2F0IGEpCiB7Ci0gICAgc3RhdGUoKS5tX3NoYWRvd09mZnNldCA9IEZsb2F0U2l6ZSh3aWR0aCwg
aGVpZ2h0KTsKLSAgICBzdGF0ZSgpLm1fc2hhZG93Qmx1ciA9IGJsdXI7Ci0gICAgc3RhdGUoKS5t
X3NoYWRvd0NvbG9yID0gbWFrZVJHQkFGcm9tQ01ZS0EoYywgbSwgeSwgaywgYSk7Ci0gICAgYXBw
bHlTaGFkb3coKTsKKyAgICBzZXRTaGFkb3coRmxvYXRTaXplKHdpZHRoLCBoZWlnaHQpLCBibHVy
LCBtYWtlUkdCQUZyb21DTVlLQShjLCBtLCB5LCBrLCBhKSk7CiB9CiAKIHZvaWQgQ2FudmFzUmVu
ZGVyaW5nQ29udGV4dDJEOjpjbGVhclNoYWRvdygpCiB7Ci0gICAgc3RhdGUoKS5tX3NoYWRvd09m
ZnNldCA9IEZsb2F0U2l6ZSgpOwotICAgIHN0YXRlKCkubV9zaGFkb3dCbHVyID0gMDsKLSAgICBz
dGF0ZSgpLm1fc2hhZG93Q29sb3IgPSBDb2xvcjo6dHJhbnNwYXJlbnQ7CisgICAgc2V0U2hhZG93
KEZsb2F0U2l6ZSgpLCAwLCBDb2xvcjo6dHJhbnNwYXJlbnQpOworfQorCit2b2lkIENhbnZhc1Jl
bmRlcmluZ0NvbnRleHQyRDo6c2V0U2hhZG93KGNvbnN0IEZsb2F0U2l6ZSYgb2Zmc2V0LCBmbG9h
dCBibHVyLCBSR0JBMzIgY29sb3IpCit7CisgICAgaWYgKHN0YXRlKCkubV9zaGFkb3dPZmZzZXQg
PT0gb2Zmc2V0ICYmIHN0YXRlKCkubV9zaGFkb3dCbHVyID09IGJsdXIgJiYgc3RhdGUoKS5tX3No
YWRvd0NvbG9yID09IGNvbG9yKQorICAgICAgICByZXR1cm47CisgICAgYm9vbCB3YXNEcmF3aW5n
U2hhZG93cyA9IHNob3VsZERyYXdTaGFkb3dzKCk7CisgICAgcmVhbGl6ZVNhdmVzKCk7CisgICAg
bW9kaWZpYWJsZVN0YXRlKCkubV9zaGFkb3dPZmZzZXQgPSBvZmZzZXQ7CisgICAgbW9kaWZpYWJs
ZVN0YXRlKCkubV9zaGFkb3dCbHVyID0gYmx1cjsKKyAgICBtb2RpZmlhYmxlU3RhdGUoKS5tX3No
YWRvd0NvbG9yID0gY29sb3I7CisgICAgaWYgKCF3YXNEcmF3aW5nU2hhZG93cyAmJiAhc2hvdWxk
RHJhd1NoYWRvd3MoKSkKKyAgICAgICAgcmV0dXJuOwogICAgIGFwcGx5U2hhZG93KCk7CiB9CiAK
QEAgLTE5MjMsMTcgKzE5ODgsMTQgQEAgU3RyaW5nIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6
Zm9udCgpIAogCiB2b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6c2V0Rm9udChjb25zdCBT
dHJpbmcmIG5ld0ZvbnQpCiB7Ci0gICAgUmVmUHRyPFN0eWxlUHJvcGVydHlTZXQ+IHRlbXBEZWNs
ID0gU3R5bGVQcm9wZXJ0eVNldDo6Y3JlYXRlKCk7Ci0gICAgQ1NTUGFyc2VyIHBhcnNlcihzdHJp
Y3RUb0NTU1BhcnNlck1vZGUoIW1fdXNlc0NTU0NvbXBhdGliaWxpdHlQYXJzZU1vZGUpKTsKLQot
ICAgIFN0cmluZyBkZWNsYXJhdGlvblRleHQoImZvbnQ6ICIpOwotICAgIGRlY2xhcmF0aW9uVGV4
dCArPSBuZXdGb250OwotICAgIHBhcnNlci5wYXJzZURlY2xhcmF0aW9uKHRlbXBEZWNsLmdldCgp
LCBkZWNsYXJhdGlvblRleHQsIDAsIDApOwotICAgIGlmICh0ZW1wRGVjbC0+aXNFbXB0eSgpKQor
ICAgIFJlZlB0cjxTdHlsZVByb3BlcnR5U2V0PiBwYXJzZWRTdHlsZSA9IFN0eWxlUHJvcGVydHlT
ZXQ6OmNyZWF0ZSgpOworICAgIENTU1BhcnNlcihzdHJpY3RUb0NTU1BhcnNlck1vZGUoIW1fdXNl
c0NTU0NvbXBhdGliaWxpdHlQYXJzZU1vZGUpKS5wYXJzZURlY2xhcmF0aW9uKHBhcnNlZFN0eWxl
LmdldCgpLCAiZm9udDoiICsgbmV3Rm9udCwgMCwgMCk7CisgICAgaWYgKHBhcnNlZFN0eWxlLT5p
c0VtcHR5KCkpCiAgICAgICAgIHJldHVybjsKIAogICAgIC8vIFRoZSBwYXJzZSBzdWNjZWVkZWQu
Ci0gICAgc3RhdGUoKS5tX3VucGFyc2VkRm9udCA9IG5ld0ZvbnQ7CisgICAgcmVhbGl6ZVNhdmVz
KCk7CisgICAgbW9kaWZpYWJsZVN0YXRlKCkubV91bnBhcnNlZEZvbnQgPSBuZXdGb250OwogCiAg
ICAgLy8gTWFwIHRoZSA8Y2FudmFzPiBmb250IGludG8gdGhlIHRleHQgc3R5bGUuIElmIHRoZSBm
b250IHVzZXMga2V5d29yZHMgbGlrZSBsYXJnZXIvc21hbGxlciwgdGhlc2Ugd2lsbCB3b3JrCiAg
ICAgLy8gcmVsYXRpdmUgdG8gdGhlIGNhbnZhcy4KQEAgLTE5NDQsMjIgKzIwMDYsMjIgQEAgdm9p
ZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6OnNldEZvbnQoYwogCiAgICAgLy8gTm93IG1hcCB0
aGUgZm9udCBwcm9wZXJ0eSBsb25naGFuZHMgaW50byB0aGUgc3R5bGUuCiAgICAgU3R5bGVSZXNv
bHZlciogc3R5bGVSZXNvbHZlciA9IGNhbnZhcygpLT5zdHlsZVJlc29sdmVyKCk7Ci0gICAgc3R5
bGVSZXNvbHZlci0+YXBwbHlQcm9wZXJ0eVRvU3R5bGUoQ1NTUHJvcGVydHlGb250RmFtaWx5LCB0
ZW1wRGVjbC0+Z2V0UHJvcGVydHlDU1NWYWx1ZShDU1NQcm9wZXJ0eUZvbnRGYW1pbHkpLmdldCgp
LCBuZXdTdHlsZS5nZXQoKSk7Ci0gICAgc3R5bGVSZXNvbHZlci0+YXBwbHlQcm9wZXJ0eVRvQ3Vy
cmVudFN0eWxlKENTU1Byb3BlcnR5Rm9udFN0eWxlLCB0ZW1wRGVjbC0+Z2V0UHJvcGVydHlDU1NW
YWx1ZShDU1NQcm9wZXJ0eUZvbnRTdHlsZSkuZ2V0KCkpOwotICAgIHN0eWxlUmVzb2x2ZXItPmFw
cGx5UHJvcGVydHlUb0N1cnJlbnRTdHlsZShDU1NQcm9wZXJ0eUZvbnRWYXJpYW50LCB0ZW1wRGVj
bC0+Z2V0UHJvcGVydHlDU1NWYWx1ZShDU1NQcm9wZXJ0eUZvbnRWYXJpYW50KS5nZXQoKSk7Ci0g
ICAgc3R5bGVSZXNvbHZlci0+YXBwbHlQcm9wZXJ0eVRvQ3VycmVudFN0eWxlKENTU1Byb3BlcnR5
Rm9udFdlaWdodCwgdGVtcERlY2wtPmdldFByb3BlcnR5Q1NTVmFsdWUoQ1NTUHJvcGVydHlGb250
V2VpZ2h0KS5nZXQoKSk7CisgICAgc3R5bGVSZXNvbHZlci0+YXBwbHlQcm9wZXJ0eVRvU3R5bGUo
Q1NTUHJvcGVydHlGb250RmFtaWx5LCBwYXJzZWRTdHlsZS0+Z2V0UHJvcGVydHlDU1NWYWx1ZShD
U1NQcm9wZXJ0eUZvbnRGYW1pbHkpLmdldCgpLCBuZXdTdHlsZS5nZXQoKSk7CisgICAgc3R5bGVS
ZXNvbHZlci0+YXBwbHlQcm9wZXJ0eVRvQ3VycmVudFN0eWxlKENTU1Byb3BlcnR5Rm9udFN0eWxl
LCBwYXJzZWRTdHlsZS0+Z2V0UHJvcGVydHlDU1NWYWx1ZShDU1NQcm9wZXJ0eUZvbnRTdHlsZSku
Z2V0KCkpOworICAgIHN0eWxlUmVzb2x2ZXItPmFwcGx5UHJvcGVydHlUb0N1cnJlbnRTdHlsZShD
U1NQcm9wZXJ0eUZvbnRWYXJpYW50LCBwYXJzZWRTdHlsZS0+Z2V0UHJvcGVydHlDU1NWYWx1ZShD
U1NQcm9wZXJ0eUZvbnRWYXJpYW50KS5nZXQoKSk7CisgICAgc3R5bGVSZXNvbHZlci0+YXBwbHlQ
cm9wZXJ0eVRvQ3VycmVudFN0eWxlKENTU1Byb3BlcnR5Rm9udFdlaWdodCwgcGFyc2VkU3R5bGUt
PmdldFByb3BlcnR5Q1NTVmFsdWUoQ1NTUHJvcGVydHlGb250V2VpZ2h0KS5nZXQoKSk7CiAKICAg
ICAvLyBBcyBkZXNjcmliZWQgaW4gQlVHNjYyOTEsIHNldHRpbmcgZm9udC1zaXplIG9uIGEgZm9u
dCBtYXkgZW50YWlsIGEgQ1NTUHJpbWl0aXZlVmFsdWU6OmNvbXB1dGVMZW5ndGhEb3VibGUgY2Fs
bCwKICAgICAvLyB3aGljaCBhc3N1bWVzIHRoZSBmb250TWV0cmljcyBhcmUgYXZhaWxhYmxlIGZv
ciB0aGUgYWZmZWN0ZWQgZm9udCwgb3RoZXJ3aXNlIGEgY3Jhc2ggb2NjdXJzIChzZWUgaHR0cDov
L3RyYWMud2Via2l0Lm9yZy9jaGFuZ2VzZXQvOTYxMjIpLgogICAgIC8vIFRoZSB1cGRhdGVGb250
KCkgY2FsbCBiZWxvdyB1cGRhdGVzIHRoZSBmb250TWV0cmljcyBhbmQgZW5zdXJlcyB0aGUgcHJv
cGVyIHNldHRpbmcgb2YgZm9udC1zaXplLgogICAgIHN0eWxlUmVzb2x2ZXItPnVwZGF0ZUZvbnQo
KTsKLSAgICBzdHlsZVJlc29sdmVyLT5hcHBseVByb3BlcnR5VG9DdXJyZW50U3R5bGUoQ1NTUHJv
cGVydHlGb250U2l6ZSwgdGVtcERlY2wtPmdldFByb3BlcnR5Q1NTVmFsdWUoQ1NTUHJvcGVydHlG
b250U2l6ZSkuZ2V0KCkpOwotICAgIHN0eWxlUmVzb2x2ZXItPmFwcGx5UHJvcGVydHlUb0N1cnJl
bnRTdHlsZShDU1NQcm9wZXJ0eUxpbmVIZWlnaHQsIHRlbXBEZWNsLT5nZXRQcm9wZXJ0eUNTU1Zh
bHVlKENTU1Byb3BlcnR5TGluZUhlaWdodCkuZ2V0KCkpOworICAgIHN0eWxlUmVzb2x2ZXItPmFw
cGx5UHJvcGVydHlUb0N1cnJlbnRTdHlsZShDU1NQcm9wZXJ0eUZvbnRTaXplLCBwYXJzZWRTdHls
ZS0+Z2V0UHJvcGVydHlDU1NWYWx1ZShDU1NQcm9wZXJ0eUZvbnRTaXplKS5nZXQoKSk7CisgICAg
c3R5bGVSZXNvbHZlci0+YXBwbHlQcm9wZXJ0eVRvQ3VycmVudFN0eWxlKENTU1Byb3BlcnR5TGlu
ZUhlaWdodCwgcGFyc2VkU3R5bGUtPmdldFByb3BlcnR5Q1NTVmFsdWUoQ1NTUHJvcGVydHlMaW5l
SGVpZ2h0KS5nZXQoKSk7CiAKLSAgICBzdGF0ZSgpLm1fZm9udCA9IG5ld1N0eWxlLT5mb250KCk7
Ci0gICAgc3RhdGUoKS5tX2ZvbnQudXBkYXRlKHN0eWxlUmVzb2x2ZXItPmZvbnRTZWxlY3Rvcigp
KTsKLSAgICBzdGF0ZSgpLm1fcmVhbGl6ZWRGb250ID0gdHJ1ZTsKLSAgICBzdHlsZVJlc29sdmVy
LT5mb250U2VsZWN0b3IoKS0+cmVnaXN0ZXJGb3JJbnZhbGlkYXRpb25DYWxsYmFja3MoJnN0YXRl
KCkpOworICAgIG1vZGlmaWFibGVTdGF0ZSgpLm1fZm9udCA9IG5ld1N0eWxlLT5mb250KCk7Cisg
ICAgbW9kaWZpYWJsZVN0YXRlKCkubV9mb250LnVwZGF0ZShzdHlsZVJlc29sdmVyLT5mb250U2Vs
ZWN0b3IoKSk7CisgICAgbW9kaWZpYWJsZVN0YXRlKCkubV9yZWFsaXplZEZvbnQgPSB0cnVlOwor
ICAgIHN0eWxlUmVzb2x2ZXItPmZvbnRTZWxlY3RvcigpLT5yZWdpc3RlckZvckludmFsaWRhdGlv
bkNhbGxiYWNrcygmbW9kaWZpYWJsZVN0YXRlKCkpOwogfQogCiBTdHJpbmcgQ2FudmFzUmVuZGVy
aW5nQ29udGV4dDJEOjp0ZXh0QWxpZ24oKSBjb25zdApAQCAtMTk3Miw3ICsyMDM0LDEwIEBAIHZv
aWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjpzZXRUZXh0QWwKICAgICBUZXh0QWxpZ24gYWxp
Z247CiAgICAgaWYgKCFwYXJzZVRleHRBbGlnbihzLCBhbGlnbikpCiAgICAgICAgIHJldHVybjsK
LSAgICBzdGF0ZSgpLm1fdGV4dEFsaWduID0gYWxpZ247CisgICAgaWYgKHN0YXRlKCkubV90ZXh0
QWxpZ24gPT0gYWxpZ24pCisgICAgICAgIHJldHVybjsKKyAgICByZWFsaXplU2F2ZXMoKTsKKyAg
ICBtb2RpZmlhYmxlU3RhdGUoKS5tX3RleHRBbGlnbiA9IGFsaWduOwogfQogCiBTdHJpbmcgQ2Fu
dmFzUmVuZGVyaW5nQ29udGV4dDJEOjp0ZXh0QmFzZWxpbmUoKSBjb25zdApAQCAtMTk4NSw3ICsy
MDUwLDEwIEBAIHZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjpzZXRUZXh0QmEKICAgICBU
ZXh0QmFzZWxpbmUgYmFzZWxpbmU7CiAgICAgaWYgKCFwYXJzZVRleHRCYXNlbGluZShzLCBiYXNl
bGluZSkpCiAgICAgICAgIHJldHVybjsKLSAgICBzdGF0ZSgpLm1fdGV4dEJhc2VsaW5lID0gYmFz
ZWxpbmU7CisgICAgaWYgKHN0YXRlKCkubV90ZXh0QmFzZWxpbmUgPT0gYmFzZWxpbmUpCisgICAg
ICAgIHJldHVybjsKKyAgICByZWFsaXplU2F2ZXMoKTsKKyAgICBtb2RpZmlhYmxlU3RhdGUoKS5t
X3RleHRCYXNlbGluZSA9IGJhc2VsaW5lOwogfQogCiB2b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRl
eHQyRDo6ZmlsbFRleHQoY29uc3QgU3RyaW5nJiB0ZXh0LCBmbG9hdCB4LCBmbG9hdCB5KQpJbmRl
eDogU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJELmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvQ2FudmFzUmVuZGVyaW5n
Q29udGV4dDJELmgJKHJldmlzaW9uIDExNjkwOSkKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvY2Fu
dmFzL0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEs
NSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNiwgMjAwNywgMjAwOSBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYsIDIwMDcsIDIwMDksIDIw
MTAsIDIwMTEsIDIwMTIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC02Niw5ICs2Niw2IEBAIHB1YmxpYzoKICAgICB9CiAg
ICAgdmlydHVhbCB+Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEKCk7CiAKLSAgICB2aXJ0dWFsIGJv
b2wgaXMyZCgpIGNvbnN0IHsgcmV0dXJuIHRydWU7IH0KLSAgICB2aXJ0dWFsIGJvb2wgaXNBY2Nl
bGVyYXRlZCgpIGNvbnN0OwotCiAgICAgQ2FudmFzU3R5bGUqIHN0cm9rZVN0eWxlKCkgY29uc3Q7
CiAgICAgdm9pZCBzZXRTdHJva2VTdHlsZShQYXNzUmVmUHRyPENhbnZhc1N0eWxlPik7CiAKQEAg
LTExMSw5ICsxMDgsOCBAQCBwdWJsaWM6CiAgICAgU3RyaW5nIGdsb2JhbENvbXBvc2l0ZU9wZXJh
dGlvbigpIGNvbnN0OwogICAgIHZvaWQgc2V0R2xvYmFsQ29tcG9zaXRlT3BlcmF0aW9uKGNvbnN0
IFN0cmluZyYpOwogCi0gICAgdm9pZCBzYXZlKCk7CisgICAgdm9pZCBzYXZlKCkgeyArK21fdW5y
ZWFsaXplZFNhdmVDb3VudDsgfQogICAgIHZvaWQgcmVzdG9yZSgpOwotICAgIHZvaWQgc2V0QWxs
QXR0cmlidXRlc1RvRGVmYXVsdCgpOwogCiAgICAgdm9pZCBzY2FsZShmbG9hdCBzeCwgZmxvYXQg
c3kpOwogICAgIHZvaWQgcm90YXRlKGZsb2F0IGFuZ2xlSW5SYWRpYW5zKTsKQEAgLTIyNiwxMCAr
MjIyLDYgQEAgcHVibGljOgogICAgIExpbmVDYXAgZ2V0TGluZUNhcCgpIGNvbnN0IHsgcmV0dXJu
IHN0YXRlKCkubV9saW5lQ2FwOyB9CiAgICAgTGluZUpvaW4gZ2V0TGluZUpvaW4oKSBjb25zdCB7
IHJldHVybiBzdGF0ZSgpLm1fbGluZUpvaW47IH0KIAotI2lmIEVOQUJMRShBQ0NFTEVSQVRFRF8y
RF9DQU5WQVMpICYmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKLSAgICB2aXJ0dWFsIFBs
YXRmb3JtTGF5ZXIqIHBsYXRmb3JtTGF5ZXIoKSBjb25zdDsKLSNlbmRpZgotCiBwcml2YXRlOgog
ICAgIHN0cnVjdCBTdGF0ZSA6IEZvbnRTZWxlY3RvckNsaWVudCB7CiAgICAgICAgIFN0YXRlKCk7
CkBAIC0yMzgsNyArMjMwLDcgQEAgcHJpdmF0ZToKICAgICAgICAgU3RhdGUoY29uc3QgU3RhdGUm
KTsKICAgICAgICAgU3RhdGUmIG9wZXJhdG9yPShjb25zdCBTdGF0ZSYpOwogCi0gICAgICAgIHZp
cnR1YWwgdm9pZCBmb250c05lZWRVcGRhdGUoRm9udFNlbGVjdG9yKik7CisgICAgICAgIHZpcnR1
YWwgdm9pZCBmb250c05lZWRVcGRhdGUoRm9udFNlbGVjdG9yKikgT1ZFUlJJREU7CiAKICAgICAg
ICAgU3RyaW5nIG1fdW5wYXJzZWRTdHJva2VDb2xvcjsKICAgICAgICAgU3RyaW5nIG1fdW5wYXJz
ZWRGaWxsQ29sb3I7CkBAIC0yNzcsMTEgKzI2OSwxMCBAQCBwcml2YXRlOgogCiAgICAgQ2FudmFz
UmVuZGVyaW5nQ29udGV4dDJEKEhUTUxDYW52YXNFbGVtZW50KiwgYm9vbCB1c2VzQ1NTQ29tcGF0
aWJpbGl0eVBhcnNlTW9kZSwgYm9vbCB1c2VzRGFzaGJvYXJkQ29tcGF0aWJpbGl0eU1vZGUpOwog
Ci0gICAgUGF0aCBtX3BhdGg7Ci0KLSAgICBTdGF0ZSYgc3RhdGUoKSB7IHJldHVybiBtX3N0YXRl
U3RhY2subGFzdCgpOyB9CisgICAgU3RhdGUmIG1vZGlmaWFibGVTdGF0ZSgpIHsgQVNTRVJUKCFt
X3VucmVhbGl6ZWRTYXZlQ291bnQpOyByZXR1cm4gbV9zdGF0ZVN0YWNrLmxhc3QoKTsgfQogICAg
IGNvbnN0IFN0YXRlJiBzdGF0ZSgpIGNvbnN0IHsgcmV0dXJuIG1fc3RhdGVTdGFjay5sYXN0KCk7
IH0KIAorICAgIHZvaWQgc2V0U2hhZG93KGNvbnN0IEZsb2F0U2l6ZSYgb2Zmc2V0LCBmbG9hdCBi
bHVyLCBSR0JBMzIgY29sb3IpOwogICAgIHZvaWQgYXBwbHlTaGFkb3coKTsKICAgICBib29sIHNo
b3VsZERyYXdTaGFkb3dzKCkgY29uc3Q7CiAKQEAgLTI5MSw2ICsyODIsMTIgQEAgcHJpdmF0ZToK
ICAgICBHcmFwaGljc0NvbnRleHQqIGRyYXdpbmdDb250ZXh0KCkgY29uc3Q7CiAKICAgICB2b2lk
IHVud2luZFN0YXRlU3RhY2soKTsKKyAgICB2b2lkIHJlYWxpemVTYXZlcygpCisgICAgeworICAg
ICAgICBpZiAobV91bnJlYWxpemVkU2F2ZUNvdW50KQorICAgICAgICAgICAgcmVhbGl6ZVNhdmVz
TG9vcCgpOworICAgIH0KKyAgICB2b2lkIHJlYWxpemVTYXZlc0xvb3AoKTsKIAogICAgIHZvaWQg
YXBwbHlTdHJva2VQYXR0ZXJuKCk7CiAgICAgdm9pZCBhcHBseUZpbGxQYXR0ZXJuKCk7CkBAIC0z
MjIsNyArMzE5LDE2IEBAIHByaXZhdGU6CiAgICAgUGFzc1JlZlB0cjxJbWFnZURhdGE+IGdldElt
YWdlRGF0YShJbWFnZUJ1ZmZlcjo6Q29vcmRpbmF0ZVN5c3RlbSwgZmxvYXQgc3gsIGZsb2F0IHN5
LCBmbG9hdCBzdywgZmxvYXQgc2gsIEV4Y2VwdGlvbkNvZGUmKSBjb25zdDsKICAgICB2b2lkIHB1
dEltYWdlRGF0YShJbWFnZURhdGEqLCBJbWFnZUJ1ZmZlcjo6Q29vcmRpbmF0ZVN5c3RlbSwgZmxv
YXQgZHgsIGZsb2F0IGR5LCBmbG9hdCBkaXJ0eVgsIGZsb2F0IGRpcnR5WSwgZmxvYXQgZGlydHlX
aWR0aCwgZmxvYXQgZGlydHlIZWlnaHQsIEV4Y2VwdGlvbkNvZGUmKTsKIAorICAgIHZpcnR1YWwg
Ym9vbCBpczJkKCkgY29uc3QgT1ZFUlJJREUgeyByZXR1cm4gdHJ1ZTsgfQorICAgIHZpcnR1YWwg
Ym9vbCBpc0FjY2VsZXJhdGVkKCkgY29uc3QgT1ZFUlJJREU7CisKKyNpZiBFTkFCTEUoQUNDRUxF
UkFURURfMkRfQ0FOVkFTKSAmJiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCisgICAgdmly
dHVhbCBQbGF0Zm9ybUxheWVyKiBwbGF0Zm9ybUxheWVyKCkgY29uc3QgT1ZFUlJJREU7CisjZW5k
aWYKKworICAgIFBhdGggbV9wYXRoOyAgICAKICAgICBWZWN0b3I8U3RhdGUsIDE+IG1fc3RhdGVT
dGFjazsKKyAgICB1bnNpZ25lZCBtX3VucmVhbGl6ZWRTYXZlQ291bnQ7CiAgICAgYm9vbCBtX3Vz
ZXNDU1NDb21wYXRpYmlsaXR5UGFyc2VNb2RlOwogI2lmIEVOQUJMRShEQVNIQk9BUkRfU1VQUE9S
VCkKICAgICBib29sIG1fdXNlc0Rhc2hib2FyZENvbXBhdGliaWxpdHlNb2RlOwo=
</data>

          </attachment>
      

    </bug>

</bugzilla>