<?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>14445</bug_id>
          
          <creation_ts>2007-06-28 07:39:03 -0700</creation_ts>
          <short_desc>[CAIRO] GraphicsContextCairo code style cleanup</short_desc>
          <delta_ts>2007-07-05 06:49:18 -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>523.x (Safari 3)</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="Alp Toker">alp</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>6033</commentid>
    <comment_count>0</comment_count>
    <who name="Alp Toker">alp</who>
    <bug_when>2007-06-28 07:39:03 -0700</bug_when>
    <thetext>GraphicsContextCairo.cpp could do with a cleanup.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>5979</commentid>
    <comment_count>1</comment_count>
      <attachid>15292</attachid>
    <who name="Alp Toker">alp</who>
    <bug_when>2007-06-28 07:52:29 -0700</bug_when>
    <thetext>Created attachment 15292
GraphicsContextCairo code style cleanup</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>5605</commentid>
    <comment_count>2</comment_count>
      <attachid>15384</attachid>
    <who name="Alp Toker">alp</who>
    <bug_when>2007-07-04 06:07:41 -0700</bug_when>
    <thetext>Created attachment 15384
Cairo backend code style cleanup

This patch extends the previous one to cover more of the Cairo backend.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>5552</commentid>
    <comment_count>3</comment_count>
    <who name="Holger Freyther">zecke</who>
    <bug_when>2007-07-05 01:29:14 -0700</bug_when>
    <thetext>The question on IRC was why do we want to name it &apos;cr&apos;? What does cr mean?

The answers were:
    -We don&apos;t know what cr means but you can go from &apos;cairo_t&apos; with finite steps to cr by removoing charachters.
    -Using &apos;context&apos; for GraphicsContext and another name for the cairo_t handle seems natural
    -&apos;cr&apos; follows the habbit of cairo and Gtk+ and should be understandable by everyone having looked at cairo/Gdk/Gtk+.

Please apply this bugfix and cleanup (adding save/restore).

</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>5538</commentid>
    <comment_count>4</comment_count>
      <attachid>15384</attachid>
    <who name="Mark Rowe (bdash)">mrowe</who>
    <bug_when>2007-07-05 05:55:39 -0700</bug_when>
    <thetext>Comment on attachment 15384
Cairo backend code style cleanup

Looks reasonable enough.  I&apos;m not particularly fond of the name &quot;cr&quot; but it does bring some consistency to the naming.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>5542</commentid>
    <comment_count>5</comment_count>
    <who name="Mark Rowe (bdash)">mrowe</who>
    <bug_when>2007-07-05 06:49:18 -0700</bug_when>
    <thetext>Landed in r24016.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>15292</attachid>
            <date>2007-06-28 07:52:29 -0700</date>
            <delta_ts>2007-07-04 06:07:41 -0700</delta_ts>
            <desc>GraphicsContextCairo code style cleanup</desc>
            <filename>gc-cleanup.patch</filename>
            <type>text/plain</type>
            <size>22818</size>
            <attacher name="Alp Toker">alp</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiAyMzg1MikKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsNTEgQEAKKzIwMDctMDYtMjggIEFscCBUb2tlciAgPGFscC50b2tlckBjb2xsYWJv
cmEuY28udWs+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAg
ICAgaHR0cDovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTQ0NDUKKyAgICAgICAg
R3JhcGhpY3NDb250ZXh0Q2Fpcm8gY29kZSBzdHlsZSBjbGVhbnVwCisKKyAgICAgICAgRm9sbG93
IHRoZSBjciBuYW1pbmcgY29udmVudGlvbiBmb3IgY2Fpcm9fdCouCisgICAgICAgIFJlbW92ZSB0
cmFpbGluZyB3aGl0ZXNwYWNlLgorICAgICAgICBSZXBsYWNlIEMgY2FzdHMgd2l0aCBDKysgY2Fz
dHMuCisgICAgICAgIEF2b2lkIG5lZWRsZXNzIGNhc3RzLgorCisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3MvY2Fpcm8vR3JhcGhpY3NDb250ZXh0Q2Fpcm8uY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0UGxhdGZvcm1Qcml2YXRlOjpHcmFwaGljc0NvbnRleHRQbGF0Zm9y
bVByaXZhdGUpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0UGxhdGZvcm1Qcml2
YXRlOjp+R3JhcGhpY3NDb250ZXh0UGxhdGZvcm1Qcml2YXRlKToKKyAgICAgICAgKFdlYkNvcmU6
OkdyYXBoaWNzQ29udGV4dDo6R3JhcGhpY3NDb250ZXh0KToKKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dDo6cGxhdGZvcm1Db250ZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dDo6c2F2ZVBsYXRmb3JtU3RhdGUpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0OjpyZXN0b3JlUGxhdGZvcm1TdGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHQ6OmRyYXdSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OmFkanVzdExpbmVUb1Bp
eGVsQm91bmRhcmllcyk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmRyYXdM
aW5lKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6ZHJhd0VsbGlwc2UpOgor
ICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpzdHJva2VBcmMpOiBTYXZlL3Jlc3Rv
cmUgdGhlIGdyYXBoaWNzIHN0YXRlLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0
OjpkcmF3Q29udmV4UG9seWdvbik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6
OmZpbGxSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6Y2xpcCk6Cisg
ICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmRyYXdGb2N1c1JpbmcpOgorICAgICAg
ICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0Ojpyb3VuZFRvRGV2aWNlUGl4ZWxzKToKKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6dHJhbnNsYXRlKToKKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dDo6b3JpZ2luKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNz
Q29udGV4dDo6c2V0UGxhdGZvcm1TdHJva2VUaGlja25lc3MpOgorICAgICAgICAoV2ViQ29yZTo6
R3JhcGhpY3NDb250ZXh0OjpzZXRQbGF0Zm9ybVN0cm9rZVN0eWxlKToKKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dDo6c2V0UGxhdGZvcm1Gb250KToKKyAgICAgICAgKFdlYkNvcmU6
OkdyYXBoaWNzQ29udGV4dDo6Y29uY2F0Q1RNKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNz
Q29udGV4dDo6YWRkSW5uZXJSb3VuZGVkUmVjdENsaXApOgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0OjpiZWdpblRyYW5zcGFyZW5jeUxheWVyKToKKyAgICAgICAgKFdlYkNvcmU6
OkdyYXBoaWNzQ29udGV4dDo6ZW5kVHJhbnNwYXJlbmN5TGF5ZXIpOgorICAgICAgICAoV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0OjpjbGVhclJlY3QpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0OjpzZXRMaW5lQ2FwKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dDo6c2V0TGluZUpvaW4pOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpzZXRN
aXRlckxpbWl0KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6c2V0Q29tcG9z
aXRlT3BlcmF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6YmVnaW5Q
YXRoKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6YWRkUGF0aCk6CisgICAg
ICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OnJvdGF0ZSk6CisgICAgICAgIChXZWJDb3Jl
OjpHcmFwaGljc0NvbnRleHQ6OnNjYWxlKToKKwogMjAwNy0wNi0yOCAgU2ltb24gSGF1c21hbm4g
IDxoYXVzbWFubkBrZGUub3JnPgogCiAgICAgICAgIFJldmlld2VkIGJ5IFphY2suCkluZGV4OiBX
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0dyYXBoaWNzQ29udGV4dENhaXJvLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0dyYXBoaWNzQ29u
dGV4dENhaXJvLmNwcAkocmV2aXNpb24gMjM4NTIpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2NhaXJvL0dyYXBoaWNzQ29udGV4dENhaXJvLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTcs
NyArNTcsNyBAQCBwdWJsaWM6CiAgICAgR3JhcGhpY3NDb250ZXh0UGxhdGZvcm1Qcml2YXRlKCk7
CiAgICAgfkdyYXBoaWNzQ29udGV4dFBsYXRmb3JtUHJpdmF0ZSgpOwogCi0gICAgY2Fpcm9fdCog
Y29udGV4dDsKKyAgICBjYWlyb190KiBjcjsKICAgICBWZWN0b3I8ZmxvYXQ+IGxheWVyczsKIH07
CiAKQEAgLTc4LDEzICs3OCwxMyBAQCBzdGF0aWMgaW5saW5lIHZvaWQgZmlsbFJlY3RTb3VyY2VP
dmVyKGNhCiB9CiAKIEdyYXBoaWNzQ29udGV4dFBsYXRmb3JtUHJpdmF0ZTo6R3JhcGhpY3NDb250
ZXh0UGxhdGZvcm1Qcml2YXRlKCkKLSAgICA6ICBjb250ZXh0KDApCisgICAgOiAgY3IoMCkKIHsK
IH0KIAogR3JhcGhpY3NDb250ZXh0UGxhdGZvcm1Qcml2YXRlOjp+R3JhcGhpY3NDb250ZXh0UGxh
dGZvcm1Qcml2YXRlKCkKIHsKLSAgICBjYWlyb19kZXN0cm95KGNvbnRleHQpOworICAgIGNhaXJv
X2Rlc3Ryb3koY3IpOwogfQogCiAjaWYgUExBVEZPUk0oV0lOKQpAQCAtOTMsMTUgKzkzLDE1IEBA
IEdyYXBoaWNzQ29udGV4dDo6R3JhcGhpY3NDb250ZXh0KEhEQyBkYykKICAgICAsIG1fZGF0YShu
ZXcgR3JhcGhpY3NDb250ZXh0UGxhdGZvcm1Qcml2YXRlKQogewogICAgIGNhaXJvX3N1cmZhY2Vf
dCogc3VyZmFjZSA9IGNhaXJvX3dpbjMyX3N1cmZhY2VfY3JlYXRlKGRjKTsKLSAgICBtX2RhdGEt
PmNvbnRleHQgPSBjYWlyb19jcmVhdGUoc3VyZmFjZSk7CisgICAgbV9kYXRhLT5jciA9IGNhaXJv
X2NyZWF0ZShzdXJmYWNlKTsKIH0KICNlbmRpZgogCi1HcmFwaGljc0NvbnRleHQ6OkdyYXBoaWNz
Q29udGV4dChQbGF0Zm9ybUdyYXBoaWNzQ29udGV4dCogY29udGV4dCkKK0dyYXBoaWNzQ29udGV4
dDo6R3JhcGhpY3NDb250ZXh0KFBsYXRmb3JtR3JhcGhpY3NDb250ZXh0KiBjcikKICAgICA6IG1f
Y29tbW9uKGNyZWF0ZUdyYXBoaWNzQ29udGV4dFByaXZhdGUoKSkKICAgICAsIG1fZGF0YShuZXcg
R3JhcGhpY3NDb250ZXh0UGxhdGZvcm1Qcml2YXRlKQogewotICAgIG1fZGF0YS0+Y29udGV4dCA9
IGNhaXJvX3JlZmVyZW5jZShjb250ZXh0KTsKKyAgICBtX2RhdGEtPmNyID0gY2Fpcm9fcmVmZXJl
bmNlKGNyKTsKIH0KIAogR3JhcGhpY3NDb250ZXh0Ojp+R3JhcGhpY3NDb250ZXh0KCkKQEAgLTEx
MiwxNyArMTEyLDE3IEBAIEdyYXBoaWNzQ29udGV4dDo6fkdyYXBoaWNzQ29udGV4dCgpCiAKIGNh
aXJvX3QqIEdyYXBoaWNzQ29udGV4dDo6cGxhdGZvcm1Db250ZXh0KCkgY29uc3QKIHsKLSAgICBy
ZXR1cm4gbV9kYXRhLT5jb250ZXh0OworICAgIHJldHVybiBtX2RhdGEtPmNyOwogfQogCiB2b2lk
IEdyYXBoaWNzQ29udGV4dDo6c2F2ZVBsYXRmb3JtU3RhdGUoKQogewotICAgIGNhaXJvX3NhdmUo
bV9kYXRhLT5jb250ZXh0KTsKKyAgICBjYWlyb19zYXZlKG1fZGF0YS0+Y3IpOwogfQogCiB2b2lk
IEdyYXBoaWNzQ29udGV4dDo6cmVzdG9yZVBsYXRmb3JtU3RhdGUoKQogewotICAgIGNhaXJvX3Jl
c3RvcmUobV9kYXRhLT5jb250ZXh0KTsKKyAgICBjYWlyb19yZXN0b3JlKG1fZGF0YS0+Y3IpOwog
fQogCiAvLyBEcmF3cyBhIGZpbGxlZCByZWN0YW5nbGUgd2l0aCBhIHN0cm9rZWQgYm9yZGVyLgpA
QCAtMTMwLDIzICsxMzAsMjMgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdSZWN0KGNvbnN0
IEludAogewogICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCiAgICAgICAgIHJldHVybjsKLSAg
ICAKLSAgICBjYWlyb190KiBjb250ZXh0ID0gbV9kYXRhLT5jb250ZXh0OwotICAgIGNhaXJvX3Nh
dmUoY29udGV4dCk7CisKKyAgICBjYWlyb190KiBjciA9IG1fZGF0YS0+Y3I7CisgICAgY2Fpcm9f
c2F2ZShjcik7CiAKICAgICBpZiAoZmlsbENvbG9yKCkuYWxwaGEoKSkKLSAgICAgICAgZmlsbFJl
Y3RTb3VyY2VPdmVyKGNvbnRleHQsIHJlY3QsIGZpbGxDb2xvcigpKTsKKyAgICAgICAgZmlsbFJl
Y3RTb3VyY2VPdmVyKGNyLCByZWN0LCBmaWxsQ29sb3IoKSk7CiAKICAgICBpZiAoc3Ryb2tlU3R5
bGUoKSAhPSBOb1N0cm9rZSkgewotICAgICAgICBzZXRDb2xvcihjb250ZXh0LCBzdHJva2VDb2xv
cigpKTsKKyAgICAgICAgc2V0Q29sb3IoY3IsIHN0cm9rZUNvbG9yKCkpOwogICAgICAgICBGbG9h
dFJlY3QgcihyZWN0KTsKICAgICAgICAgci5pbmZsYXRlKC0uNWYpOwotICAgICAgICBjYWlyb19y
ZWN0YW5nbGUoY29udGV4dCwgci54KCksIHIueSgpLCByLndpZHRoKCksIHIuaGVpZ2h0KCkpOwot
ICAgICAgICBjYWlyb19zZXRfbGluZV93aWR0aChjb250ZXh0LCAxLjApOwotICAgICAgICBjYWly
b19zdHJva2UoY29udGV4dCk7CisgICAgICAgIGNhaXJvX3JlY3RhbmdsZShjciwgci54KCksIHIu
eSgpLCByLndpZHRoKCksIHIuaGVpZ2h0KCkpOworICAgICAgICBjYWlyb19zZXRfbGluZV93aWR0
aChjciwgMS4wKTsKKyAgICAgICAgY2Fpcm9fc3Ryb2tlKGNyKTsKICAgICB9CiAKLSAgICBjYWly
b19yZXN0b3JlKGNvbnRleHQpOworICAgIGNhaXJvX3Jlc3RvcmUoY3IpOwogfQogCiAvLyBGSVhN
RTogTm93IHRoYXQgdGhpcyBpcyByZWZhY3RvcmVkLCBpdCBzaG91bGQgYmUgc2hhcmVkIGJ5IGFs
bCBjb250ZXh0cy4KQEAgLTE2Niw4ICsxNjYsOCBAQCBzdGF0aWMgdm9pZCBhZGp1c3RMaW5lVG9Q
aXhlbEJvdW5kYXJpZXMoCiAgICAgICAgICAgICBwMi5zZXRYKHAyLngoKSAtIHN0cm9rZVdpZHRo
KTsKICAgICAgICAgfQogICAgIH0KLSAgICAKLSAgICBpZiAoKChpbnQpc3Ryb2tlV2lkdGgpJTIp
IHsKKworICAgIGlmIChzdGF0aWNfY2FzdDxpbnQ+KHN0cm9rZVdpZHRoKSAlIDIpIHsKICAgICAg
ICAgaWYgKHAxLngoKSA9PSBwMi54KCkpIHsKICAgICAgICAgICAgIC8vIFdlJ3JlIGEgdmVydGlj
YWwgbGluZS4gIEFkanVzdCBvdXIgeC4KICAgICAgICAgICAgIHAxLnNldFgocDEueCgpICsgMC41
KTsKQEAgLTE5MSw4ICsxOTEsOCBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd0xpbmUoY29u
c3QgSW50CiAgICAgaWYgKHN0eWxlID09IE5vU3Ryb2tlKQogICAgICAgICByZXR1cm47CiAKLSAg
ICBjYWlyb190KiBjb250ZXh0ID0gbV9kYXRhLT5jb250ZXh0OwotICAgIGNhaXJvX3NhdmUoY29u
dGV4dCk7CisgICAgY2Fpcm9fdCogY3IgPSBtX2RhdGEtPmNyOworICAgIGNhaXJvX3NhdmUoY3Ip
OwogCiAgICAgZmxvYXQgd2lkdGggPSBzdHJva2VUaGlja25lc3MoKTsKICAgICBpZiAod2lkdGgg
PCAxKQpAQCAtMjAxLDkgKzIwMSw5IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3TGluZShj
b25zdCBJbnQKICAgICBGbG9hdFBvaW50IHAxID0gcG9pbnQxOwogICAgIEZsb2F0UG9pbnQgcDIg
PSBwb2ludDI7CiAgICAgYm9vbCBpc1ZlcnRpY2FsTGluZSA9IChwMS54KCkgPT0gcDIueCgpKTsK
LSAgICAKKyAKICAgICBhZGp1c3RMaW5lVG9QaXhlbEJvdW5kYXJpZXMocDEsIHAyLCB3aWR0aCwg
c3R5bGUpOwotICAgIGNhaXJvX3NldF9saW5lX3dpZHRoKGNvbnRleHQsIHdpZHRoKTsKKyAgICBj
YWlyb19zZXRfbGluZV93aWR0aChjciwgd2lkdGgpOwogCiAgICAgaW50IHBhdFdpZHRoID0gMDsK
ICAgICBzd2l0Y2ggKHN0eWxlKSB7CkBAIC0yMTEsMzIgKzIxMSwzMiBAQCB2b2lkIEdyYXBoaWNz
Q29udGV4dDo6ZHJhd0xpbmUoY29uc3QgSW50CiAgICAgY2FzZSBTb2xpZFN0cm9rZToKICAgICAg
ICAgYnJlYWs7CiAgICAgY2FzZSBEb3R0ZWRTdHJva2U6Ci0gICAgICAgIHBhdFdpZHRoID0gKGlu
dCl3aWR0aDsKKyAgICAgICAgcGF0V2lkdGggPSBzdGF0aWNfY2FzdDxpbnQ+KHdpZHRoKTsKICAg
ICAgICAgYnJlYWs7CiAgICAgY2FzZSBEYXNoZWRTdHJva2U6Ci0gICAgICAgIHBhdFdpZHRoID0g
MyooaW50KXdpZHRoOworICAgICAgICBwYXRXaWR0aCA9IDMqc3RhdGljX2Nhc3Q8aW50Pih3aWR0
aCk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KIAotICAgIHNldENvbG9yKGNvbnRleHQsIHN0cm9r
ZUNvbG9yKCkpOwotICAgIAotICAgIGNhaXJvX3NldF9hbnRpYWxpYXMoY29udGV4dCwgQ0FJUk9f
QU5USUFMSUFTX05PTkUpOwotICAgIAorICAgIHNldENvbG9yKGNyLCBzdHJva2VDb2xvcigpKTsK
KworICAgIGNhaXJvX3NldF9hbnRpYWxpYXMoY3IsIENBSVJPX0FOVElBTElBU19OT05FKTsKKwog
ICAgIGlmIChwYXRXaWR0aCkgewogICAgICAgICAvLyBEbyBhIHJlY3QgZmlsbCBvZiBvdXIgZW5k
cG9pbnRzLiAgVGhpcyBlbnN1cmVzIHdlIGFsd2F5cyBoYXZlIHRoZQogICAgICAgICAvLyBhcHBl
YXJhbmNlIG9mIGJlaW5nIGEgYm9yZGVyLiAgV2UgdGhlbiBkcmF3IHRoZSBhY3R1YWwgZG90dGVk
L2Rhc2hlZCBsaW5lLgogICAgICAgICBpZiAoaXNWZXJ0aWNhbExpbmUpIHsKLSAgICAgICAgICAg
IGZpbGxSZWN0U291cmNlT3Zlcihjb250ZXh0LCBGbG9hdFJlY3QocDEueCgpLXdpZHRoLzIsIHAx
LnkoKS13aWR0aCwgd2lkdGgsIHdpZHRoKSwgc3Ryb2tlQ29sb3IoKSk7Ci0gICAgICAgICAgICBm
aWxsUmVjdFNvdXJjZU92ZXIoY29udGV4dCwgRmxvYXRSZWN0KHAyLngoKS13aWR0aC8yLCBwMi55
KCksIHdpZHRoLCB3aWR0aCksIHN0cm9rZUNvbG9yKCkpOworICAgICAgICAgICAgZmlsbFJlY3RT
b3VyY2VPdmVyKGNyLCBGbG9hdFJlY3QocDEueCgpLXdpZHRoLzIsIHAxLnkoKS13aWR0aCwgd2lk
dGgsIHdpZHRoKSwgc3Ryb2tlQ29sb3IoKSk7CisgICAgICAgICAgICBmaWxsUmVjdFNvdXJjZU92
ZXIoY3IsIEZsb2F0UmVjdChwMi54KCktd2lkdGgvMiwgcDIueSgpLCB3aWR0aCwgd2lkdGgpLCBz
dHJva2VDb2xvcigpKTsKICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIGZpbGxSZWN0U291
cmNlT3Zlcihjb250ZXh0LCBGbG9hdFJlY3QocDEueCgpLXdpZHRoLCBwMS55KCktd2lkdGgvMiwg
d2lkdGgsIHdpZHRoKSwgc3Ryb2tlQ29sb3IoKSk7Ci0gICAgICAgICAgICBmaWxsUmVjdFNvdXJj
ZU92ZXIoY29udGV4dCwgRmxvYXRSZWN0KHAyLngoKSwgcDIueSgpLXdpZHRoLzIsIHdpZHRoLCB3
aWR0aCksIHN0cm9rZUNvbG9yKCkpOworICAgICAgICAgICAgZmlsbFJlY3RTb3VyY2VPdmVyKGNy
LCBGbG9hdFJlY3QocDEueCgpLXdpZHRoLCBwMS55KCktd2lkdGgvMiwgd2lkdGgsIHdpZHRoKSwg
c3Ryb2tlQ29sb3IoKSk7CisgICAgICAgICAgICBmaWxsUmVjdFNvdXJjZU92ZXIoY3IsIEZsb2F0
UmVjdChwMi54KCksIHAyLnkoKS13aWR0aC8yLCB3aWR0aCwgd2lkdGgpLCBzdHJva2VDb2xvcigp
KTsKICAgICAgICAgfQotICAgICAgICAKKwogICAgICAgICAvLyBFeGFtcGxlOiA4MCBwaXhlbHMg
d2l0aCBhIHdpZHRoIG9mIDMwIHBpeGVscy4KICAgICAgICAgLy8gUmVtYWluZGVyIGlzIDIwLiAg
VGhlIG1heGltdW0gcGl4ZWxzIG9mIGxpbmUgd2UgY291bGQgcGFpbnQKICAgICAgICAgLy8gd2ls
bCBiZSA1MCBwaXhlbHMuCi0gICAgICAgIGludCBkaXN0YW5jZSA9IChpc1ZlcnRpY2FsTGluZSA/
IChwb2ludDIueSgpIC0gcG9pbnQxLnkoKSkgOiAocG9pbnQyLngoKSAtIHBvaW50MS54KCkpKSAt
IDIqKGludCl3aWR0aDsKKyAgICAgICAgaW50IGRpc3RhbmNlID0gKGlzVmVydGljYWxMaW5lID8g
KHBvaW50Mi55KCkgLSBwb2ludDEueSgpKSA6IChwb2ludDIueCgpIC0gcG9pbnQxLngoKSkpIC0g
MipzdGF0aWNfY2FzdDxpbnQ+KHdpZHRoKTsKICAgICAgICAgaW50IHJlbWFpbmRlciA9IGRpc3Rh
bmNlJXBhdFdpZHRoOwogICAgICAgICBpbnQgY292ZXJhZ2UgPSBkaXN0YW5jZS1yZW1haW5kZXI7
CiAgICAgICAgIGludCBudW1TZWdtZW50cyA9IGNvdmVyYWdlL3BhdFdpZHRoOwpAQCAtMjYyLDE2
ICsyNjIsMTYgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdMaW5lKGNvbnN0IEludAogICAg
ICAgICAgICAgICAgICAgICBwYXR0ZXJuT2Zmc2V0ID0gKHBhdFdpZHRoIC0gcmVtYWluZGVyKS8y
OwogICAgICAgICAgICAgfQogICAgICAgICB9Ci0gICAgICAgIAorCiAgICAgICAgIGRvdWJsZSBk
YXNoID0gcGF0V2lkdGg7Ci0gICAgICAgIGNhaXJvX3NldF9kYXNoKGNvbnRleHQsICZkYXNoLCAx
LCBwYXR0ZXJuT2Zmc2V0KTsKKyAgICAgICAgY2Fpcm9fc2V0X2Rhc2goY3IsICZkYXNoLCAxLCBw
YXR0ZXJuT2Zmc2V0KTsKICAgICB9CiAKLSAgICBjYWlyb19tb3ZlX3RvKGNvbnRleHQsIHAxLngo
KSwgcDEueSgpKTsKLSAgICBjYWlyb19saW5lX3RvKGNvbnRleHQsIHAyLngoKSwgcDIueSgpKTsK
KyAgICBjYWlyb19tb3ZlX3RvKGNyLCBwMS54KCksIHAxLnkoKSk7CisgICAgY2Fpcm9fbGluZV90
byhjciwgcDIueCgpLCBwMi55KCkpOwogCi0gICAgY2Fpcm9fc3Ryb2tlKGNvbnRleHQpOwotICAg
IGNhaXJvX3Jlc3RvcmUoY29udGV4dCk7CisgICAgY2Fpcm9fc3Ryb2tlKGNyKTsKKyAgICBjYWly
b19yZXN0b3JlKGNyKTsKIH0KIAogLy8gVGhpcyBtZXRob2QgaXMgb25seSB1c2VkIHRvIGRyYXcg
dGhlIGxpdHRsZSBjaXJjbGVzIHVzZWQgaW4gbGlzdHMuCkBAIC0yNzksMjggKzI3OSwyOCBAQCB2
b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd0VsbGlwc2UoY29uc3QgCiB7CiAgICAgaWYgKHBhaW50
aW5nRGlzYWJsZWQoKSkKICAgICAgICAgcmV0dXJuOwotICAgIAotICAgIGNhaXJvX3QqIGNvbnRl
eHQgPSBtX2RhdGEtPmNvbnRleHQ7Ci0gICAgY2Fpcm9fc2F2ZShjb250ZXh0KTsKKworICAgIGNh
aXJvX3QqIGNyID0gbV9kYXRhLT5jcjsKKyAgICBjYWlyb19zYXZlKGNyKTsKICAgICBmbG9hdCB5
UmFkaXVzID0gLjUgKiByZWN0LmhlaWdodCgpOwogICAgIGZsb2F0IHhSYWRpdXMgPSAuNSAqIHJl
Y3Qud2lkdGgoKTsKLSAgICBjYWlyb190cmFuc2xhdGUoY29udGV4dCwgcmVjdC54KCkgKyB4UmFk
aXVzLCByZWN0LnkoKSArIHlSYWRpdXMpOwotICAgIGNhaXJvX3NjYWxlKGNvbnRleHQsIHhSYWRp
dXMsIHlSYWRpdXMpOwotICAgIGNhaXJvX2FyYyhjb250ZXh0LCAwLiwgMC4sIDEuLCAwLiwgMiAq
IE1fUEkpOwotICAgIGNhaXJvX3Jlc3RvcmUoY29udGV4dCk7CisgICAgY2Fpcm9fdHJhbnNsYXRl
KGNyLCByZWN0LngoKSArIHhSYWRpdXMsIHJlY3QueSgpICsgeVJhZGl1cyk7CisgICAgY2Fpcm9f
c2NhbGUoY3IsIHhSYWRpdXMsIHlSYWRpdXMpOworICAgIGNhaXJvX2FyYyhjciwgMC4sIDAuLCAx
LiwgMC4sIDIgKiBNX1BJKTsKKyAgICBjYWlyb19yZXN0b3JlKGNyKTsKIAogICAgIGlmIChmaWxs
Q29sb3IoKS5hbHBoYSgpKSB7Ci0gICAgICAgIHNldENvbG9yKGNvbnRleHQsIGZpbGxDb2xvcigp
KTsKLSAgICAgICAgY2Fpcm9fZmlsbF9wcmVzZXJ2ZShjb250ZXh0KTsKKyAgICAgICAgc2V0Q29s
b3IoY3IsIGZpbGxDb2xvcigpKTsKKyAgICAgICAgY2Fpcm9fZmlsbF9wcmVzZXJ2ZShjcik7CiAg
ICAgfQogCiAgICAgaWYgKHN0cm9rZVN0eWxlKCkgIT0gTm9TdHJva2UpIHsKLSAgICAgICAgc2V0
Q29sb3IoY29udGV4dCwgc3Ryb2tlQ29sb3IoKSk7Ci0gICAgICAgIGNhaXJvX3NldF9saW5lX3dp
ZHRoKGNvbnRleHQsIHN0cm9rZVRoaWNrbmVzcygpKTsKLSAgICAgICAgY2Fpcm9fc3Ryb2tlKGNv
bnRleHQpOworICAgICAgICBzZXRDb2xvcihjciwgc3Ryb2tlQ29sb3IoKSk7CisgICAgICAgIGNh
aXJvX3NldF9saW5lX3dpZHRoKGNyLCBzdHJva2VUaGlja25lc3MoKSk7CisgICAgICAgIGNhaXJv
X3N0cm9rZShjcik7CiAgICAgfQogCi0gICAgY2Fpcm9fbmV3X3BhdGgoY29udGV4dCk7CisgICAg
Y2Fpcm9fbmV3X3BhdGgoY3IpOwogfQogCiAvLyBGSVhNRTogVGhpcyBmdW5jdGlvbiBuZWVkcyB0
byBiZSBhZGp1c3RlZCB0byBtYXRjaCB0aGUgZnVuY3Rpb25hbGl0eSBvbiB0aGUgTWFjIHNpZGUu
CkBAIC0zMDgsMjYgKzMwOCwyOSBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6c3Ryb2tlQXJjKGNv
bnN0IEluCiB7CiAgICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKICAgICAgICAgcmV0dXJuOwot
ICAgIAorCisgICAgaWYgKHN0cm9rZVN0eWxlKCkgPT0gTm9TdHJva2UpCisgICAgICAgIHJldHVy
bjsKKwogICAgIGludCB4ID0gcmVjdC54KCk7CiAgICAgaW50IHkgPSByZWN0LnkoKTsKLSAgICBm
bG9hdCB3ID0gKGZsb2F0KXJlY3Qud2lkdGgoKTsKKyAgICBmbG9hdCB3ID0gcmVjdC53aWR0aCgp
OwogI2lmIDAgLy8gRklYTUU6IHVudXNlZCBzbyBmYXIKLSAgICBmbG9hdCBoID0gKGZsb2F0KXJl
Y3QuaGVpZ2h0KCk7CisgICAgZmxvYXQgaCA9IHJlY3QuaGVpZ2h0KCk7CiAgICAgZmxvYXQgc2Nh
bGVGYWN0b3IgPSBoIC8gdzsKICAgICBmbG9hdCByZXZlcnNlU2NhbGVGYWN0b3IgPSB3IC8gaDsK
ICNlbmRpZgotICAgIGNhaXJvX3QqIGNvbnRleHQgPSBtX2RhdGEtPmNvbnRleHQ7Ci0gICAgaWYg
KHN0cm9rZVN0eWxlKCkgIT0gTm9TdHJva2UpIHsgICAgICAgIAotICAgICAgICBmbG9hdCByID0g
dyAvIDI7Ci0gICAgICAgIGZsb2F0IGZhID0gc3RhcnRBbmdsZTsKLSAgICAgICAgZmxvYXQgZmFs
ZW4gPSAgZmEgKyBhbmdsZVNwYW47Ci0gICAgICAgIGNhaXJvX2FyY19uZWdhdGl2ZShjb250ZXh0
LCB4ICsgciwgeSArIHIsIHIsIC1mYSAqIE1fUEkvMTgwLCAtZmFsZW4gKiBNX1BJLzE4MCk7Ci0g
ICAgICAgIAotICAgICAgICBzZXRDb2xvcihjb250ZXh0LCBzdHJva2VDb2xvcigpKTsKLSAgICAg
ICAgY2Fpcm9fc2V0X2xpbmVfd2lkdGgoY29udGV4dCwgc3Ryb2tlVGhpY2tuZXNzKCkpOwotICAg
ICAgICBjYWlyb19zdHJva2UoY29udGV4dCk7Ci0gICAgfQorICAgIGZsb2F0IHIgPSB3IC8gMjsK
KyAgICBmbG9hdCBmYSA9IHN0YXJ0QW5nbGU7CisgICAgZmxvYXQgZmFsZW4gPSAgZmEgKyBhbmds
ZVNwYW47CisKKyAgICBjYWlyb190KiBjciA9IG1fZGF0YS0+Y3I7CisgICAgY2Fpcm9fc2F2ZShj
cik7CisgICAgY2Fpcm9fYXJjX25lZ2F0aXZlKGNyLCB4ICsgciwgeSArIHIsIHIsIC1mYSAqIE1f
UEkvMTgwLCAtZmFsZW4gKiBNX1BJLzE4MCk7CisgICAgc2V0Q29sb3IoY3IsIHN0cm9rZUNvbG9y
KCkpOworICAgIGNhaXJvX3NldF9saW5lX3dpZHRoKGNyLCBzdHJva2VUaGlja25lc3MoKSk7Cisg
ICAgY2Fpcm9fc3Ryb2tlKGNyKTsKKyAgICBjYWlyb19yZXN0b3JlKGNyKTsKIH0KIAogdm9pZCBH
cmFwaGljc0NvbnRleHQ6OmRyYXdDb252ZXhQb2x5Z29uKHNpemVfdCBucG9pbnRzLCBjb25zdCBG
bG9hdFBvaW50KiBwb2ludHMsIGJvb2wgc2hvdWxkQW50aWFsaWFzKQpAQCAtMzM4LDI5ICszNDEs
MjkgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdDb252ZXhQb2x5Z29uKAogICAgIGlmIChu
cG9pbnRzIDw9IDEpCiAgICAgICAgIHJldHVybjsKIAotICAgIGNhaXJvX3QqIGNvbnRleHQgPSBt
X2RhdGEtPmNvbnRleHQ7CisgICAgY2Fpcm9fdCogY3IgPSBtX2RhdGEtPmNyOwogCi0gICAgY2Fp
cm9fc2F2ZShjb250ZXh0KTsKLSAgICBjYWlyb19zZXRfYW50aWFsaWFzKGNvbnRleHQsIHNob3Vs
ZEFudGlhbGlhcyA/IENBSVJPX0FOVElBTElBU19ERUZBVUxUIDogQ0FJUk9fQU5USUFMSUFTX05P
TkUpOwotICAgIGNhaXJvX21vdmVfdG8oY29udGV4dCwgcG9pbnRzWzBdLngoKSwgcG9pbnRzWzBd
LnkoKSk7CisgICAgY2Fpcm9fc2F2ZShjcik7CisgICAgY2Fpcm9fc2V0X2FudGlhbGlhcyhjciwg
c2hvdWxkQW50aWFsaWFzID8gQ0FJUk9fQU5USUFMSUFTX0RFRkFVTFQgOiBDQUlST19BTlRJQUxJ
QVNfTk9ORSk7CisgICAgY2Fpcm9fbW92ZV90byhjciwgcG9pbnRzWzBdLngoKSwgcG9pbnRzWzBd
LnkoKSk7CiAgICAgZm9yIChzaXplX3QgaSA9IDE7IGkgPCBucG9pbnRzOyBpKyspCi0gICAgICAg
IGNhaXJvX2xpbmVfdG8oY29udGV4dCwgcG9pbnRzW2ldLngoKSwgcG9pbnRzW2ldLnkoKSk7Ci0g
ICAgY2Fpcm9fY2xvc2VfcGF0aChjb250ZXh0KTsKKyAgICAgICAgY2Fpcm9fbGluZV90byhjciwg
cG9pbnRzW2ldLngoKSwgcG9pbnRzW2ldLnkoKSk7CisgICAgY2Fpcm9fY2xvc2VfcGF0aChjcik7
CiAKICAgICBpZiAoZmlsbENvbG9yKCkuYWxwaGEoKSkgewotICAgICAgICBzZXRDb2xvcihjb250
ZXh0LCBmaWxsQ29sb3IoKSk7Ci0gICAgICAgIGNhaXJvX3NldF9maWxsX3J1bGUoY29udGV4dCwg
Q0FJUk9fRklMTF9SVUxFX0VWRU5fT0REKTsKLSAgICAgICAgY2Fpcm9fZmlsbF9wcmVzZXJ2ZShj
b250ZXh0KTsKKyAgICAgICAgc2V0Q29sb3IoY3IsIGZpbGxDb2xvcigpKTsKKyAgICAgICAgY2Fp
cm9fc2V0X2ZpbGxfcnVsZShjciwgQ0FJUk9fRklMTF9SVUxFX0VWRU5fT0REKTsKKyAgICAgICAg
Y2Fpcm9fZmlsbF9wcmVzZXJ2ZShjcik7CiAgICAgfQogCiAgICAgaWYgKHN0cm9rZVN0eWxlKCkg
IT0gTm9TdHJva2UpIHsKLSAgICAgICAgc2V0Q29sb3IoY29udGV4dCwgc3Ryb2tlQ29sb3IoKSk7
Ci0gICAgICAgIGNhaXJvX3NldF9saW5lX3dpZHRoKGNvbnRleHQsIHN0cm9rZVRoaWNrbmVzcygp
KTsKLSAgICAgICAgY2Fpcm9fc3Ryb2tlKGNvbnRleHQpOworICAgICAgICBzZXRDb2xvcihjciwg
c3Ryb2tlQ29sb3IoKSk7CisgICAgICAgIGNhaXJvX3NldF9saW5lX3dpZHRoKGNyLCBzdHJva2VU
aGlja25lc3MoKSk7CisgICAgICAgIGNhaXJvX3N0cm9rZShjcik7CiAgICAgfQogCi0gICAgY2Fp
cm9fbmV3X3BhdGgoY29udGV4dCk7Ci0gICAgY2Fpcm9fcmVzdG9yZShjb250ZXh0KTsKKyAgICBj
YWlyb19uZXdfcGF0aChjcik7CisgICAgY2Fpcm9fcmVzdG9yZShjcik7CiB9CiAKIHZvaWQgR3Jh
cGhpY3NDb250ZXh0OjpmaWxsUmVjdChjb25zdCBJbnRSZWN0JiByZWN0LCBjb25zdCBDb2xvciYg
Y29sb3IpCkBAIC0zNjksNyArMzcyLDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OmZpbGxSZWN0
KGNvbnN0IEludAogICAgICAgICByZXR1cm47CiAKICAgICBpZiAoY29sb3IuYWxwaGEoKSkKLSAg
ICAgICAgZmlsbFJlY3RTb3VyY2VPdmVyKG1fZGF0YS0+Y29udGV4dCwgcmVjdCwgY29sb3IpOwor
ICAgICAgICBmaWxsUmVjdFNvdXJjZU92ZXIobV9kYXRhLT5jciwgcmVjdCwgY29sb3IpOwogfQog
CiB2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZmlsbFJlY3QoY29uc3QgRmxvYXRSZWN0JiByZWN0LCBj
b25zdCBDb2xvciYgY29sb3IpCkBAIC0zNzgsNyArMzgxLDcgQEAgdm9pZCBHcmFwaGljc0NvbnRl
eHQ6OmZpbGxSZWN0KGNvbnN0IEZsbwogICAgICAgICByZXR1cm47CiAKICAgICBpZiAoY29sb3Iu
YWxwaGEoKSkKLSAgICAgICAgZmlsbFJlY3RTb3VyY2VPdmVyKG1fZGF0YS0+Y29udGV4dCwgcmVj
dCwgY29sb3IpOworICAgICAgICBmaWxsUmVjdFNvdXJjZU92ZXIobV9kYXRhLT5jciwgcmVjdCwg
Y29sb3IpOwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dDo6Y2xpcChjb25zdCBJbnRSZWN0JiBy
ZWN0KQpAQCAtMzg2LDkgKzM4OSw5IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpjbGlwKGNvbnN0
IEludFJlY3QKICAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQogICAgICAgICByZXR1cm47CiAK
LSAgICBjYWlyb190KiBjb250ZXh0ID0gbV9kYXRhLT5jb250ZXh0OwotICAgIGNhaXJvX3JlY3Rh
bmdsZShjb250ZXh0LCByZWN0LngoKSwgcmVjdC55KCksIHJlY3Qud2lkdGgoKSwgcmVjdC5oZWln
aHQoKSk7Ci0gICAgY2Fpcm9fY2xpcChjb250ZXh0KTsKKyAgICBjYWlyb190KiBjciA9IG1fZGF0
YS0+Y3I7CisgICAgY2Fpcm9fcmVjdGFuZ2xlKGNyLCByZWN0LngoKSwgcmVjdC55KCksIHJlY3Qu
d2lkdGgoKSwgcmVjdC5oZWlnaHQoKSk7CisgICAgY2Fpcm9fY2xpcChjcik7CiB9CiAKIHZvaWQg
R3JhcGhpY3NDb250ZXh0OjpkcmF3Rm9jdXNSaW5nKGNvbnN0IENvbG9yJiBjb2xvcikKQEAgLTM5
OCw3ICs0MDEsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd0ZvY3VzUmluZyhjb25zCiAK
ICAgICBpbnQgcmFkaXVzID0gKGZvY3VzUmluZ1dpZHRoKCkgLSAxKSAvIDI7CiAgICAgaW50IG9m
ZnNldCA9IHJhZGl1cyArIGZvY3VzUmluZ09mZnNldCgpOwotICAgIAorCiAgICAgY29uc3QgVmVj
dG9yPEludFJlY3Q+JiByZWN0cyA9IGZvY3VzUmluZ1JlY3RzKCk7CiAgICAgdW5zaWduZWQgcmVj
dENvdW50ID0gcmVjdHMuc2l6ZSgpOwogICAgIEludFJlY3QgZmluYWxGb2N1c1JlY3Q7CkBAIC00
MDcsMTMgKzQxMCwxNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd0ZvY3VzUmluZyhjb25z
CiAgICAgICAgIGZvY3VzUmVjdC5pbmZsYXRlKG9mZnNldCk7CiAgICAgICAgIGZpbmFsRm9jdXNS
ZWN0LnVuaXRlKGZvY3VzUmVjdCk7CiAgICAgfQorCisgICAgY2Fpcm9fdCogY3IgPSBtX2RhdGEt
PmNyOworICAgIGNhaXJvX3NhdmUoY3IpOwogICAgIC8vIEZJWE1FOiBUaGVzZSByZWN0cyBzaG91
bGQgYmUgcm91bmRlZAotICAgIGNhaXJvX3JlY3RhbmdsZShtX2RhdGEtPmNvbnRleHQsIGZpbmFs
Rm9jdXNSZWN0LngoKSwgZmluYWxGb2N1c1JlY3QueSgpLCBmaW5hbEZvY3VzUmVjdC53aWR0aCgp
LCBmaW5hbEZvY3VzUmVjdC5oZWlnaHQoKSk7Ci0gICAgCisgICAgY2Fpcm9fcmVjdGFuZ2xlKGNy
LCBmaW5hbEZvY3VzUmVjdC54KCksIGZpbmFsRm9jdXNSZWN0LnkoKSwgZmluYWxGb2N1c1JlY3Qu
d2lkdGgoKSwgZmluYWxGb2N1c1JlY3QuaGVpZ2h0KCkpOworCiAgICAgLy8gRm9yY2UgdGhlIGFs
cGhhIHRvIDUwJS4gIFRoaXMgbWF0Y2hlcyB3aGF0IHRoZSBNYWMgZG9lcyB3aXRoIG91dGxpbmUg
cmluZ3MuCiAgICAgQ29sb3IgcmluZ0NvbG9yKGNvbG9yLnJlZCgpLCBjb2xvci5ncmVlbigpLCBj
b2xvci5ibHVlKCksIDEyNyk7Ci0gICAgc2V0Q29sb3IobV9kYXRhLT5jb250ZXh0LCByaW5nQ29s
b3IpOwotICAgIGNhaXJvX3N0cm9rZShtX2RhdGEtPmNvbnRleHQpOworICAgIHNldENvbG9yKGNy
LCByaW5nQ29sb3IpOworICAgIGNhaXJvX3N0cm9rZShjcik7CisgICAgY2Fpcm9fcmVzdG9yZShj
cik7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpzZXRGb2N1c1JpbmdDbGlwKGNvbnN0IElu
dFJlY3QmKQpAQCAtNDQ1LDQwICs0NTIsNDEgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdM
aW5lRm9yTWlzc3BlbAogRmxvYXRSZWN0IEdyYXBoaWNzQ29udGV4dDo6cm91bmRUb0RldmljZVBp
eGVscyhjb25zdCBGbG9hdFJlY3QmIGZyZWN0KQogewogICAgIEZsb2F0UmVjdCByZXN1bHQ7Ci0g
ICAgZG91YmxlIHggPWZyZWN0LngoKTsKKyAgICBkb3VibGUgeCA9IGZyZWN0LngoKTsKICAgICBk
b3VibGUgeSA9IGZyZWN0LnkoKTsKLSAgICBjYWlyb190KiBjb250ZXh0ID0gbV9kYXRhLT5jb250
ZXh0OwotICAgIGNhaXJvX3VzZXJfdG9fZGV2aWNlKGNvbnRleHQsJngsJnkpOworICAgIGNhaXJv
X3QqIGNyID0gbV9kYXRhLT5jcjsKKyAgICBjYWlyb191c2VyX3RvX2RldmljZShjciwgJngsICZ5
KTsKICAgICB4ID0gcm91bmQoeCk7CiAgICAgeSA9IHJvdW5kKHkpOwotICAgIGNhaXJvX2Rldmlj
ZV90b191c2VyKGNvbnRleHQsJngsJnkpOwotICAgIHJlc3VsdC5zZXRYKChmbG9hdCl4KTsKLSAg
ICByZXN1bHQuc2V0WSgoZmxvYXQpeSk7CisgICAgY2Fpcm9fZGV2aWNlX3RvX3VzZXIoY3IsICZ4
LCAmeSk7CisgICAgcmVzdWx0LnNldFgoc3RhdGljX2Nhc3Q8ZmxvYXQ+KHgpKTsKKyAgICByZXN1
bHQuc2V0WShzdGF0aWNfY2FzdDxmbG9hdD4oeSkpOwogICAgIHggPSBmcmVjdC53aWR0aCgpOwog
ICAgIHkgPSBmcmVjdC5oZWlnaHQoKTsKLSAgICBjYWlyb191c2VyX3RvX2RldmljZV9kaXN0YW5j
ZShjb250ZXh0LCZ4LCZ5KTsKKyAgICBjYWlyb191c2VyX3RvX2RldmljZV9kaXN0YW5jZShjciwg
JngsICZ5KTsKICAgICB4ID0gcm91bmQoeCk7CiAgICAgeSA9IHJvdW5kKHkpOwotICAgIGNhaXJv
X2RldmljZV90b191c2VyX2Rpc3RhbmNlKGNvbnRleHQsJngsJnkpOwotICAgIHJlc3VsdC5zZXRX
aWR0aCgoZmxvYXQpeCk7Ci0gICAgcmVzdWx0LnNldEhlaWdodCgoZmxvYXQpeSk7Ci0gICAgcmV0
dXJuIHJlc3VsdDsgCisgICAgY2Fpcm9fZGV2aWNlX3RvX3VzZXJfZGlzdGFuY2UoY3IsICZ4LCAm
eSk7CisgICAgcmVzdWx0LnNldFdpZHRoKHN0YXRpY19jYXN0PGZsb2F0Pih4KSk7CisgICAgcmVz
dWx0LnNldEhlaWdodChzdGF0aWNfY2FzdDxmbG9hdD4oeSkpOworICAgIHJldHVybiByZXN1bHQ7
CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0Ojp0cmFuc2xhdGUoZmxvYXQgeCwgZmxvYXQgeSkK
IHsKICAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQogICAgICAgICByZXR1cm47Ci0gICAgY2Fp
cm9fdCogY29udGV4dCA9IG1fZGF0YS0+Y29udGV4dDsKLSAgICBjYWlyb190cmFuc2xhdGUoY29u
dGV4dCwgeCwgeSk7CisKKyAgICBjYWlyb190KiBjciA9IG1fZGF0YS0+Y3I7CisgICAgY2Fpcm9f
dHJhbnNsYXRlKGNyLCB4LCB5KTsKIH0KIAogSW50UG9pbnQgR3JhcGhpY3NDb250ZXh0Ojpvcmln
aW4oKQogewogICAgIGNhaXJvX21hdHJpeF90IG1hdHJpeDsKLSAgICBjYWlyb190KiBjb250ZXh0
ID0gbV9kYXRhLT5jb250ZXh0OwotICAgIGNhaXJvX2dldF9tYXRyaXgoY29udGV4dCwgJm1hdHJp
eCk7Ci0gICAgcmV0dXJuIEludFBvaW50KChpbnQpbWF0cml4LngwLCAoaW50KW1hdHJpeC55MCk7
CisgICAgY2Fpcm9fdCogY3IgPSBtX2RhdGEtPmNyOworICAgIGNhaXJvX2dldF9tYXRyaXgoY3Is
ICZtYXRyaXgpOworICAgIHJldHVybiBJbnRQb2ludChzdGF0aWNfY2FzdDxpbnQ+KG1hdHJpeC54
MCksIHN0YXRpY19jYXN0PGludD4obWF0cml4LnkwKSk7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250
ZXh0OjpzZXRQbGF0Zm9ybUZpbGxDb2xvcihjb25zdCBDb2xvciYgY29sKQpAQCAtNDk3LDcgKzUw
NSw4IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpzZXRQbGF0Zm9ybVN0cm9rZVQKIHsKICAgICBp
ZiAocGFpbnRpbmdEaXNhYmxlZCgpKQogICAgICAgICByZXR1cm47Ci0gICAgY2Fpcm9fc2V0X2xp
bmVfd2lkdGgobV9kYXRhLT5jb250ZXh0LCBzdHJva2VUaGlja25lc3MpOworCisgICAgY2Fpcm9f
c2V0X2xpbmVfd2lkdGgobV9kYXRhLT5jciwgc3Ryb2tlVGhpY2tuZXNzKTsKIH0KIAogdm9pZCBH
cmFwaGljc0NvbnRleHQ6OnNldFBsYXRmb3JtU3Ryb2tlU3R5bGUoY29uc3QgU3Ryb2tlU3R5bGUm
IHN0cm9rZVN0eWxlKQpAQCAtNTExLDE2ICs1MjAsMTYgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6
OnNldFBsYXRmb3JtU3Ryb2tlUwogICAgIHN3aXRjaCAoc3Ryb2tlU3R5bGUpIHsKICAgICBjYXNl
IE5vU3Ryb2tlOgogICAgICAgICAvLyBGSVhNRTogaXMgaXQgdGhlIHJpZ2h0IHdheSB0byBlbXVs
YXRlIE5vU3Ryb2tlPwotICAgICAgICBjYWlyb19zZXRfbGluZV93aWR0aChtX2RhdGEtPmNvbnRl
eHQsIDApOworICAgICAgICBjYWlyb19zZXRfbGluZV93aWR0aChtX2RhdGEtPmNyLCAwKTsKICAg
ICAgICAgYnJlYWs7CiAgICAgY2FzZSBTb2xpZFN0cm9rZToKLSAgICAgICAgY2Fpcm9fc2V0X2Rh
c2gobV9kYXRhLT5jb250ZXh0LCAwLCAwLCAwKTsKKyAgICAgICAgY2Fpcm9fc2V0X2Rhc2gobV9k
YXRhLT5jciwgMCwgMCwgMCk7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgRG90dGVkU3Ryb2tl
OgotICAgICAgICBjYWlyb19zZXRfZGFzaChtX2RhdGEtPmNvbnRleHQsIGRvdFBhdHRlcm4sIDIs
IDApOworICAgICAgICBjYWlyb19zZXRfZGFzaChtX2RhdGEtPmNyLCBkb3RQYXR0ZXJuLCAyLCAw
KTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBEYXNoZWRTdHJva2U6Ci0gICAgICAgIGNhaXJv
X3NldF9kYXNoKG1fZGF0YS0+Y29udGV4dCwgZGFzaFBhdHRlcm4sIDIsIDApOworICAgICAgICBj
YWlyb19zZXRfZGFzaChtX2RhdGEtPmNyLCBkYXNoUGF0dGVybiwgMiwgMCk7CiAgICAgICAgIGJy
ZWFrOwogICAgIGRlZmF1bHQ6CiAgICAgICAgIG5vdEltcGxlbWVudGVkKCk7CkBAIC01MzcsNyAr
NTQ2LDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OnNldFBsYXRmb3JtRm9udChjbwogICAgIC8v
IEZJWE1FOiBpcyBpdCB0aGUgcmlnaHQgdGhpbmcgdG8gZG8/IEFsc28sIGRvZXNuJ3Qgd29yayBv
biBXaW4gYmVjYXVzZQogICAgIC8vIHRoZXJlIEZvbnREYXRhIGRvZXNuJ3QgaGF2ZSA6OnNldEZv
bnQoKQogICAgIGNvbnN0IEZvbnREYXRhICpmb250RGF0YSA9IGZvbnQucHJpbWFyeUZvbnQoKTsK
LSAgICBmb250RGF0YS0+c2V0Rm9udChtX2RhdGEtPmNvbnRleHQpOworICAgIGZvbnREYXRhLT5z
ZXRGb250KG1fZGF0YS0+Y3IpOwogI2VuZGlmCiB9CiAKQEAgLTU1MSwxNCArNTYwLDE0IEBAIHZv
aWQgR3JhcGhpY3NDb250ZXh0Ojpjb25jYXRDVE0oY29uc3QgQWYKICAgICBpZiAocGFpbnRpbmdE
aXNhYmxlZCgpKQogICAgICAgICByZXR1cm47CiAKLSAgICBjYWlyb190KiBjciA9IG1fZGF0YS0+
Y29udGV4dDsKKyAgICBjYWlyb190KiBjciA9IG1fZGF0YS0+Y3I7CiAgICAgY29uc3QgY2Fpcm9f
bWF0cml4X3QqIG1hdHJpeCA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgY2Fpcm9fbWF0cml4X3Qq
PigmdHJhbnNmb3JtKTsKICAgICBjYWlyb190cmFuc2Zvcm0oY3IsIG1hdHJpeCk7CiB9CiAKLXZv
aWQgR3JhcGhpY3NDb250ZXh0OjphZGRJbm5lclJvdW5kZWRSZWN0Q2xpcChjb25zdCBJbnRSZWN0
JiByZWN0LCBpbnQgdGhpY2tuZXNzKSAKLXsgCi0gICAgbm90SW1wbGVtZW50ZWQoKTsgCit2b2lk
IEdyYXBoaWNzQ29udGV4dDo6YWRkSW5uZXJSb3VuZGVkUmVjdENsaXAoY29uc3QgSW50UmVjdCYg
cmVjdCwgaW50IHRoaWNrbmVzcykKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOwogfQogCiB2b2lk
IEdyYXBoaWNzQ29udGV4dDo6c2V0U2hhZG93KEludFNpemUgY29uc3QmLCBpbnQsIENvbG9yIGNv
bnN0JikKQEAgLTU3Niw4ICs1ODUsOCBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6YmVnaW5UcmFu
c3BhcmVuY3lMCiAgICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKICAgICAgICAgcmV0dXJuOwog
Ci0gICAgY2Fpcm9fdCogY29udGV4dCA9IG1fZGF0YS0+Y29udGV4dDsKLSAgICBjYWlyb19wdXNo
X2dyb3VwKGNvbnRleHQpOworICAgIGNhaXJvX3QqIGNyID0gbV9kYXRhLT5jcjsKKyAgICBjYWly
b19wdXNoX2dyb3VwKGNyKTsKICAgICBtX2RhdGEtPmxheWVycy5hcHBlbmQob3BhY2l0eSk7CiB9
CiAKQEAgLTU4NiwxMCArNTk1LDEwIEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjplbmRUcmFuc3Bh
cmVuY3lMYXkKICAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQogICAgICAgICByZXR1cm47CiAK
LSAgICBjYWlyb190KiBjb250ZXh0ID0gbV9kYXRhLT5jb250ZXh0OworICAgIGNhaXJvX3QqIGNy
ID0gbV9kYXRhLT5jcjsKIAotICAgIGNhaXJvX3BvcF9ncm91cF90b19zb3VyY2UoY29udGV4dCk7
Ci0gICAgY2Fpcm9fcGFpbnRfd2l0aF9hbHBoYShjb250ZXh0LCBtX2RhdGEtPmxheWVycy5sYXN0
KCkpOworICAgIGNhaXJvX3BvcF9ncm91cF90b19zb3VyY2UoY3IpOworICAgIGNhaXJvX3BhaW50
X3dpdGhfYWxwaGEoY3IsIG1fZGF0YS0+bGF5ZXJzLmxhc3QoKSk7CiAgICAgbV9kYXRhLT5sYXll
cnMucmVtb3ZlTGFzdCgpOwogfQogCkBAIC01OTgsNyArNjA3LDcgQEAgdm9pZCBHcmFwaGljc0Nv
bnRleHQ6OmNsZWFyUmVjdChjb25zdCBGbAogICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCiAg
ICAgICAgIHJldHVybjsKIAotICAgIGNhaXJvX3QqIGNyID0gbV9kYXRhLT5jb250ZXh0OworICAg
IGNhaXJvX3QqIGNyID0gbV9kYXRhLT5jcjsKIAogICAgIGNhaXJvX3NhdmUoY3IpOwogICAgIGNh
aXJvX3JlY3RhbmdsZShjciwgcmVjdC54KCksIHJlY3QueSgpLCByZWN0LndpZHRoKCksIHJlY3Qu
aGVpZ2h0KCkpOwpAQCAtNjI5LDcgKzYzOCw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpzZXRM
aW5lQ2FwKExpbmVDYXAKICAgICAgICAgICAgIGNhaXJvQ2FwID0gQ0FJUk9fTElORV9DQVBfU1FV
QVJFOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgfQotICAgIGNhaXJvX3NldF9saW5lX2NhcCht
X2RhdGEtPmNvbnRleHQsIGNhaXJvQ2FwKTsKKyAgICBjYWlyb19zZXRfbGluZV9jYXAobV9kYXRh
LT5jciwgY2Fpcm9DYXApOwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0TGluZUpvaW4o
TGluZUpvaW4gbGluZUpvaW4pCkBAIC02NDksMTQgKzY1OCwxNSBAQCB2b2lkIEdyYXBoaWNzQ29u
dGV4dDo6c2V0TGluZUpvaW4oTGluZUpvCiAgICAgICAgICAgICBjYWlyb0pvaW4gPSBDQUlST19M
SU5FX0pPSU5fQkVWRUw7CiAgICAgICAgICAgICBicmVhazsKICAgICB9Ci0gICAgY2Fpcm9fc2V0
X2xpbmVfam9pbihtX2RhdGEtPmNvbnRleHQsIGNhaXJvSm9pbik7CisgICAgY2Fpcm9fc2V0X2xp
bmVfam9pbihtX2RhdGEtPmNyLCBjYWlyb0pvaW4pOwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4
dDo6c2V0TWl0ZXJMaW1pdChmbG9hdCBtaXRlcikKIHsKICAgICBpZiAocGFpbnRpbmdEaXNhYmxl
ZCgpKQogICAgICAgICByZXR1cm47Ci0gICAgY2Fpcm9fc2V0X21pdGVyX2xpbWl0KG1fZGF0YS0+
Y29udGV4dCwgbWl0ZXIpOworCisgICAgY2Fpcm9fc2V0X21pdGVyX2xpbWl0KG1fZGF0YS0+Y3Is
IG1pdGVyKTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHQ6OnNldEFscGhhKGZsb2F0KQpAQCAt
NzA0LDcgKzcxNCw4IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpzZXRDb21wb3NpdGVPcGVyYXQK
IHsKICAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQogICAgICAgICByZXR1cm47Ci0gICAgY2Fp
cm9fc2V0X29wZXJhdG9yKG1fZGF0YS0+Y29udGV4dCwgdG9DYWlyb09wZXJhdG9yKG9wKSk7CisK
KyAgICBjYWlyb19zZXRfb3BlcmF0b3IobV9kYXRhLT5jciwgdG9DYWlyb09wZXJhdG9yKG9wKSk7
CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpiZWdpblBhdGgoKQpAQCAtNzEyLDcgKzcyMyw3
IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpiZWdpblBhdGgoKQogICAgIGlmIChwYWludGluZ0Rp
c2FibGVkKCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIGNhaXJvX3QqIGNyID0gbV9kYXRhLT5j
b250ZXh0OworICAgIGNhaXJvX3QqIGNyID0gbV9kYXRhLT5jcjsKICAgICBjYWlyb19uZXdfcGF0
aChjcik7CiB9CiAKQEAgLTcyMSw3ICs3MzIsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6YWRk
UGF0aChjb25zdCBQYXRoCiAgICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKICAgICAgICAgcmV0
dXJuOwogCi0gICAgY2Fpcm9fdCogY3IgPSBtX2RhdGEtPmNvbnRleHQ7CisgICAgY2Fpcm9fdCog
Y3IgPSBtX2RhdGEtPmNyOwogICAgIGNhaXJvX3BhdGhfdCAqcCA9IGNhaXJvX2NvcHlfcGF0aChw
YXRoLnBsYXRmb3JtUGF0aCgpLT5tX2NyKTsKICAgICBjYWlyb19hcHBlbmRfcGF0aChjciwgcCk7
CiAgICAgY2Fpcm9fcGF0aF9kZXN0cm95KHApOwpAQCAtNzMxLDcgKzc0Miw4IEBAIHZvaWQgR3Jh
cGhpY3NDb250ZXh0OjpjbGlwKGNvbnN0IFBhdGgmIHAKIHsKICAgICBpZiAocGFpbnRpbmdEaXNh
YmxlZCgpKQogICAgICAgICByZXR1cm47Ci0gICAgY2Fpcm9fdCogY3IgPSBtX2RhdGEtPmNvbnRl
eHQ7CisKKyAgICBjYWlyb190KiBjciA9IG1fZGF0YS0+Y3I7CiAgICAgY2Fpcm9fcGF0aF90ICpw
ID0gY2Fpcm9fY29weV9wYXRoKHBhdGgucGxhdGZvcm1QYXRoKCktPm1fY3IpOwogICAgIGNhaXJv
X2FwcGVuZF9wYXRoKGNyLCBwKTsKICAgICBjYWlyb19wYXRoX2Rlc3Ryb3kocCk7CkBAIC03NDcs
MTQgKzc1OSwxNiBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6cm90YXRlKGZsb2F0IHJhZGlhCiB7
CiAgICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKICAgICAgICAgcmV0dXJuOwotICAgIGNhaXJv
X3JvdGF0ZShtX2RhdGEtPmNvbnRleHQsIHJhZGlhbnMpOworCisgICAgY2Fpcm9fcm90YXRlKG1f
ZGF0YS0+Y3IsIHJhZGlhbnMpOwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dDo6c2NhbGUoY29u
c3QgRmxvYXRTaXplJiBzaXplKQogewogICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCiAgICAg
ICAgIHJldHVybjsKLSAgICBjYWlyb19zY2FsZShtX2RhdGEtPmNvbnRleHQsIHNpemUud2lkdGgo
KSwgc2l6ZS5oZWlnaHQoKSk7CisKKyAgICBjYWlyb19zY2FsZShtX2RhdGEtPmNyLCBzaXplLndp
ZHRoKCksIHNpemUuaGVpZ2h0KCkpOwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dDo6Y2xpcE91
dChjb25zdCBJbnRSZWN0JikK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>15384</attachid>
            <date>2007-07-04 06:07:41 -0700</date>
            <delta_ts>2007-07-05 05:55:39 -0700</delta_ts>
            <desc>Cairo backend code style cleanup</desc>
            <filename>gc-cleanup-2.patch</filename>
            <type>text/plain</type>
            <size>27696</size>
            <attacher name="Alp Toker">alp</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiAyMzk4MykKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsNTYgQEAKKzIwMDctMDYtMjggIEFscCBUb2tlciAgPGFscC50b2tlckBjb2xsYWJv
cmEuY28udWs+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAg
ICAgaHR0cDovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTQ0NDUKKyAgICAgICAg
R3JhcGhpY3NDb250ZXh0Q2Fpcm8gY29kZSBzdHlsZSBjbGVhbnVwCisKKyAgICAgICAgRm9sbG93
IHRoZSBjciBuYW1pbmcgY29udmVudGlvbiBmb3IgY2Fpcm9fdCouCisgICAgICAgIFJlbW92ZSB0
cmFpbGluZyB3aGl0ZXNwYWNlLgorICAgICAgICBSZXBsYWNlIEMgY2FzdHMgd2l0aCBDKysgY2Fz
dHMuCisgICAgICAgIEF2b2lkIG5lZWRsZXNzIGNhc3RzLgorCisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3MvY2Fpcm8vR3JhcGhpY3NDb250ZXh0Q2Fpcm8uY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0UGxhdGZvcm1Qcml2YXRlOjpHcmFwaGljc0NvbnRleHRQbGF0Zm9y
bVByaXZhdGUpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0UGxhdGZvcm1Qcml2
YXRlOjp+R3JhcGhpY3NDb250ZXh0UGxhdGZvcm1Qcml2YXRlKToKKyAgICAgICAgKFdlYkNvcmU6
OkdyYXBoaWNzQ29udGV4dDo6R3JhcGhpY3NDb250ZXh0KToKKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dDo6cGxhdGZvcm1Db250ZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dDo6c2F2ZVBsYXRmb3JtU3RhdGUpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0OjpyZXN0b3JlUGxhdGZvcm1TdGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHQ6OmRyYXdSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OmFkanVzdExpbmVUb1Bp
eGVsQm91bmRhcmllcyk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmRyYXdM
aW5lKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6ZHJhd0VsbGlwc2UpOgor
ICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpzdHJva2VBcmMpOiBTYXZlL3Jlc3Rv
cmUgdGhlIGdyYXBoaWNzIHN0YXRlLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0
OjpkcmF3Q29udmV4UG9seWdvbik6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6
OmZpbGxSZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6Y2xpcCk6Cisg
ICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmRyYXdGb2N1c1JpbmcpOgorICAgICAg
ICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0Ojpyb3VuZFRvRGV2aWNlUGl4ZWxzKToKKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6dHJhbnNsYXRlKToKKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dDo6b3JpZ2luKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNz
Q29udGV4dDo6c2V0UGxhdGZvcm1TdHJva2VUaGlja25lc3MpOgorICAgICAgICAoV2ViQ29yZTo6
R3JhcGhpY3NDb250ZXh0OjpzZXRQbGF0Zm9ybVN0cm9rZVN0eWxlKToKKyAgICAgICAgKFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dDo6c2V0UGxhdGZvcm1Gb250KToKKyAgICAgICAgKFdlYkNvcmU6
OkdyYXBoaWNzQ29udGV4dDo6Y29uY2F0Q1RNKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNz
Q29udGV4dDo6YWRkSW5uZXJSb3VuZGVkUmVjdENsaXApOgorICAgICAgICAoV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0OjpiZWdpblRyYW5zcGFyZW5jeUxheWVyKToKKyAgICAgICAgKFdlYkNvcmU6
OkdyYXBoaWNzQ29udGV4dDo6ZW5kVHJhbnNwYXJlbmN5TGF5ZXIpOgorICAgICAgICAoV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0OjpjbGVhclJlY3QpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0OjpzZXRMaW5lQ2FwKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dDo6c2V0TGluZUpvaW4pOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpzZXRN
aXRlckxpbWl0KToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6c2V0Q29tcG9z
aXRlT3BlcmF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6YmVnaW5Q
YXRoKToKKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6YWRkUGF0aCk6CisgICAg
ICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OnJvdGF0ZSk6CisgICAgICAgIChXZWJDb3Jl
OjpHcmFwaGljc0NvbnRleHQ6OnNjYWxlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9j
YWlyby9JbWFnZUJ1ZmZlckNhaXJvLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkltYWdlQnVmZmVy
OjpJbWFnZUJ1ZmZlcik6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vSW1hZ2VD
YWlyby5jcHA6IEF2b2lkIHRoZSBjb25mdXNpbmcgY3R4dC9jb250ZXh0IG5hbWluZyBzY2hlbWUu
CisgICAgICAgIChXZWJDb3JlOjpCaXRtYXBJbWFnZTo6ZHJhdyk6CisgICAgICAgIChXZWJDb3Jl
OjpJbWFnZTo6ZHJhd1BhdHRlcm4pOgorCiAyMDA3LTA3LTA0ICBNaXR6IFBldHRlbCAgPG1pdHpA
d2Via2l0Lm9yZz4KIAogICAgICAgICBSZXZpZXdlZCBieSBNYWNpZWouCkluZGV4OiBXZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0dyYXBoaWNzQ29udGV4dENhaXJvLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0dyYXBoaWNzQ29udGV4dENh
aXJvLmNwcAkocmV2aXNpb24gMjM5ODMpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nh
aXJvL0dyYXBoaWNzQ29udGV4dENhaXJvLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTcsNyArNTcs
NyBAQCBwdWJsaWM6CiAgICAgR3JhcGhpY3NDb250ZXh0UGxhdGZvcm1Qcml2YXRlKCk7CiAgICAg
fkdyYXBoaWNzQ29udGV4dFBsYXRmb3JtUHJpdmF0ZSgpOwogCi0gICAgY2Fpcm9fdCogY29udGV4
dDsKKyAgICBjYWlyb190KiBjcjsKICAgICBWZWN0b3I8ZmxvYXQ+IGxheWVyczsKIH07CiAKQEAg
LTc4LDEzICs3OCwxMyBAQCBzdGF0aWMgaW5saW5lIHZvaWQgZmlsbFJlY3RTb3VyY2VPdmVyKGNh
CiB9CiAKIEdyYXBoaWNzQ29udGV4dFBsYXRmb3JtUHJpdmF0ZTo6R3JhcGhpY3NDb250ZXh0UGxh
dGZvcm1Qcml2YXRlKCkKLSAgICA6ICBjb250ZXh0KDApCisgICAgOiAgY3IoMCkKIHsKIH0KIAog
R3JhcGhpY3NDb250ZXh0UGxhdGZvcm1Qcml2YXRlOjp+R3JhcGhpY3NDb250ZXh0UGxhdGZvcm1Q
cml2YXRlKCkKIHsKLSAgICBjYWlyb19kZXN0cm95KGNvbnRleHQpOworICAgIGNhaXJvX2Rlc3Ry
b3koY3IpOwogfQogCiAjaWYgUExBVEZPUk0oV0lOKQpAQCAtOTMsMTUgKzkzLDE1IEBAIEdyYXBo
aWNzQ29udGV4dDo6R3JhcGhpY3NDb250ZXh0KEhEQyBkYykKICAgICAsIG1fZGF0YShuZXcgR3Jh
cGhpY3NDb250ZXh0UGxhdGZvcm1Qcml2YXRlKQogewogICAgIGNhaXJvX3N1cmZhY2VfdCogc3Vy
ZmFjZSA9IGNhaXJvX3dpbjMyX3N1cmZhY2VfY3JlYXRlKGRjKTsKLSAgICBtX2RhdGEtPmNvbnRl
eHQgPSBjYWlyb19jcmVhdGUoc3VyZmFjZSk7CisgICAgbV9kYXRhLT5jciA9IGNhaXJvX2NyZWF0
ZShzdXJmYWNlKTsKIH0KICNlbmRpZgogCi1HcmFwaGljc0NvbnRleHQ6OkdyYXBoaWNzQ29udGV4
dChQbGF0Zm9ybUdyYXBoaWNzQ29udGV4dCogY29udGV4dCkKK0dyYXBoaWNzQ29udGV4dDo6R3Jh
cGhpY3NDb250ZXh0KFBsYXRmb3JtR3JhcGhpY3NDb250ZXh0KiBjcikKICAgICA6IG1fY29tbW9u
KGNyZWF0ZUdyYXBoaWNzQ29udGV4dFByaXZhdGUoKSkKICAgICAsIG1fZGF0YShuZXcgR3JhcGhp
Y3NDb250ZXh0UGxhdGZvcm1Qcml2YXRlKQogewotICAgIG1fZGF0YS0+Y29udGV4dCA9IGNhaXJv
X3JlZmVyZW5jZShjb250ZXh0KTsKKyAgICBtX2RhdGEtPmNyID0gY2Fpcm9fcmVmZXJlbmNlKGNy
KTsKIH0KIAogR3JhcGhpY3NDb250ZXh0Ojp+R3JhcGhpY3NDb250ZXh0KCkKQEAgLTExMiwxNyAr
MTEyLDE3IEBAIEdyYXBoaWNzQ29udGV4dDo6fkdyYXBoaWNzQ29udGV4dCgpCiAKIGNhaXJvX3Qq
IEdyYXBoaWNzQ29udGV4dDo6cGxhdGZvcm1Db250ZXh0KCkgY29uc3QKIHsKLSAgICByZXR1cm4g
bV9kYXRhLT5jb250ZXh0OworICAgIHJldHVybiBtX2RhdGEtPmNyOwogfQogCiB2b2lkIEdyYXBo
aWNzQ29udGV4dDo6c2F2ZVBsYXRmb3JtU3RhdGUoKQogewotICAgIGNhaXJvX3NhdmUobV9kYXRh
LT5jb250ZXh0KTsKKyAgICBjYWlyb19zYXZlKG1fZGF0YS0+Y3IpOwogfQogCiB2b2lkIEdyYXBo
aWNzQ29udGV4dDo6cmVzdG9yZVBsYXRmb3JtU3RhdGUoKQogewotICAgIGNhaXJvX3Jlc3RvcmUo
bV9kYXRhLT5jb250ZXh0KTsKKyAgICBjYWlyb19yZXN0b3JlKG1fZGF0YS0+Y3IpOwogfQogCiAv
LyBEcmF3cyBhIGZpbGxlZCByZWN0YW5nbGUgd2l0aCBhIHN0cm9rZWQgYm9yZGVyLgpAQCAtMTMw
LDIzICsxMzAsMjMgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdSZWN0KGNvbnN0IEludAog
ewogICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCiAgICAgICAgIHJldHVybjsKLSAgICAKLSAg
ICBjYWlyb190KiBjb250ZXh0ID0gbV9kYXRhLT5jb250ZXh0OwotICAgIGNhaXJvX3NhdmUoY29u
dGV4dCk7CisKKyAgICBjYWlyb190KiBjciA9IG1fZGF0YS0+Y3I7CisgICAgY2Fpcm9fc2F2ZShj
cik7CiAKICAgICBpZiAoZmlsbENvbG9yKCkuYWxwaGEoKSkKLSAgICAgICAgZmlsbFJlY3RTb3Vy
Y2VPdmVyKGNvbnRleHQsIHJlY3QsIGZpbGxDb2xvcigpKTsKKyAgICAgICAgZmlsbFJlY3RTb3Vy
Y2VPdmVyKGNyLCByZWN0LCBmaWxsQ29sb3IoKSk7CiAKICAgICBpZiAoc3Ryb2tlU3R5bGUoKSAh
PSBOb1N0cm9rZSkgewotICAgICAgICBzZXRDb2xvcihjb250ZXh0LCBzdHJva2VDb2xvcigpKTsK
KyAgICAgICAgc2V0Q29sb3IoY3IsIHN0cm9rZUNvbG9yKCkpOwogICAgICAgICBGbG9hdFJlY3Qg
cihyZWN0KTsKICAgICAgICAgci5pbmZsYXRlKC0uNWYpOwotICAgICAgICBjYWlyb19yZWN0YW5n
bGUoY29udGV4dCwgci54KCksIHIueSgpLCByLndpZHRoKCksIHIuaGVpZ2h0KCkpOwotICAgICAg
ICBjYWlyb19zZXRfbGluZV93aWR0aChjb250ZXh0LCAxLjApOwotICAgICAgICBjYWlyb19zdHJv
a2UoY29udGV4dCk7CisgICAgICAgIGNhaXJvX3JlY3RhbmdsZShjciwgci54KCksIHIueSgpLCBy
LndpZHRoKCksIHIuaGVpZ2h0KCkpOworICAgICAgICBjYWlyb19zZXRfbGluZV93aWR0aChjciwg
MS4wKTsKKyAgICAgICAgY2Fpcm9fc3Ryb2tlKGNyKTsKICAgICB9CiAKLSAgICBjYWlyb19yZXN0
b3JlKGNvbnRleHQpOworICAgIGNhaXJvX3Jlc3RvcmUoY3IpOwogfQogCiAvLyBGSVhNRTogTm93
IHRoYXQgdGhpcyBpcyByZWZhY3RvcmVkLCBpdCBzaG91bGQgYmUgc2hhcmVkIGJ5IGFsbCBjb250
ZXh0cy4KQEAgLTE2Niw4ICsxNjYsOCBAQCBzdGF0aWMgdm9pZCBhZGp1c3RMaW5lVG9QaXhlbEJv
dW5kYXJpZXMoCiAgICAgICAgICAgICBwMi5zZXRYKHAyLngoKSAtIHN0cm9rZVdpZHRoKTsKICAg
ICAgICAgfQogICAgIH0KLSAgICAKLSAgICBpZiAoKChpbnQpc3Ryb2tlV2lkdGgpJTIpIHsKKwor
ICAgIGlmIChzdGF0aWNfY2FzdDxpbnQ+KHN0cm9rZVdpZHRoKSAlIDIpIHsKICAgICAgICAgaWYg
KHAxLngoKSA9PSBwMi54KCkpIHsKICAgICAgICAgICAgIC8vIFdlJ3JlIGEgdmVydGljYWwgbGlu
ZS4gIEFkanVzdCBvdXIgeC4KICAgICAgICAgICAgIHAxLnNldFgocDEueCgpICsgMC41KTsKQEAg
LTE5MSw4ICsxOTEsOCBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd0xpbmUoY29uc3QgSW50
CiAgICAgaWYgKHN0eWxlID09IE5vU3Ryb2tlKQogICAgICAgICByZXR1cm47CiAKLSAgICBjYWly
b190KiBjb250ZXh0ID0gbV9kYXRhLT5jb250ZXh0OwotICAgIGNhaXJvX3NhdmUoY29udGV4dCk7
CisgICAgY2Fpcm9fdCogY3IgPSBtX2RhdGEtPmNyOworICAgIGNhaXJvX3NhdmUoY3IpOwogCiAg
ICAgZmxvYXQgd2lkdGggPSBzdHJva2VUaGlja25lc3MoKTsKICAgICBpZiAod2lkdGggPCAxKQpA
QCAtMjAxLDkgKzIwMSw5IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3TGluZShjb25zdCBJ
bnQKICAgICBGbG9hdFBvaW50IHAxID0gcG9pbnQxOwogICAgIEZsb2F0UG9pbnQgcDIgPSBwb2lu
dDI7CiAgICAgYm9vbCBpc1ZlcnRpY2FsTGluZSA9IChwMS54KCkgPT0gcDIueCgpKTsKLSAgICAK
KyAKICAgICBhZGp1c3RMaW5lVG9QaXhlbEJvdW5kYXJpZXMocDEsIHAyLCB3aWR0aCwgc3R5bGUp
OwotICAgIGNhaXJvX3NldF9saW5lX3dpZHRoKGNvbnRleHQsIHdpZHRoKTsKKyAgICBjYWlyb19z
ZXRfbGluZV93aWR0aChjciwgd2lkdGgpOwogCiAgICAgaW50IHBhdFdpZHRoID0gMDsKICAgICBz
d2l0Y2ggKHN0eWxlKSB7CkBAIC0yMTEsMzIgKzIxMSwzMiBAQCB2b2lkIEdyYXBoaWNzQ29udGV4
dDo6ZHJhd0xpbmUoY29uc3QgSW50CiAgICAgY2FzZSBTb2xpZFN0cm9rZToKICAgICAgICAgYnJl
YWs7CiAgICAgY2FzZSBEb3R0ZWRTdHJva2U6Ci0gICAgICAgIHBhdFdpZHRoID0gKGludCl3aWR0
aDsKKyAgICAgICAgcGF0V2lkdGggPSBzdGF0aWNfY2FzdDxpbnQ+KHdpZHRoKTsKICAgICAgICAg
YnJlYWs7CiAgICAgY2FzZSBEYXNoZWRTdHJva2U6Ci0gICAgICAgIHBhdFdpZHRoID0gMyooaW50
KXdpZHRoOworICAgICAgICBwYXRXaWR0aCA9IDMqc3RhdGljX2Nhc3Q8aW50Pih3aWR0aCk7CiAg
ICAgICAgIGJyZWFrOwogICAgIH0KIAotICAgIHNldENvbG9yKGNvbnRleHQsIHN0cm9rZUNvbG9y
KCkpOwotICAgIAotICAgIGNhaXJvX3NldF9hbnRpYWxpYXMoY29udGV4dCwgQ0FJUk9fQU5USUFM
SUFTX05PTkUpOwotICAgIAorICAgIHNldENvbG9yKGNyLCBzdHJva2VDb2xvcigpKTsKKworICAg
IGNhaXJvX3NldF9hbnRpYWxpYXMoY3IsIENBSVJPX0FOVElBTElBU19OT05FKTsKKwogICAgIGlm
IChwYXRXaWR0aCkgewogICAgICAgICAvLyBEbyBhIHJlY3QgZmlsbCBvZiBvdXIgZW5kcG9pbnRz
LiAgVGhpcyBlbnN1cmVzIHdlIGFsd2F5cyBoYXZlIHRoZQogICAgICAgICAvLyBhcHBlYXJhbmNl
IG9mIGJlaW5nIGEgYm9yZGVyLiAgV2UgdGhlbiBkcmF3IHRoZSBhY3R1YWwgZG90dGVkL2Rhc2hl
ZCBsaW5lLgogICAgICAgICBpZiAoaXNWZXJ0aWNhbExpbmUpIHsKLSAgICAgICAgICAgIGZpbGxS
ZWN0U291cmNlT3Zlcihjb250ZXh0LCBGbG9hdFJlY3QocDEueCgpLXdpZHRoLzIsIHAxLnkoKS13
aWR0aCwgd2lkdGgsIHdpZHRoKSwgc3Ryb2tlQ29sb3IoKSk7Ci0gICAgICAgICAgICBmaWxsUmVj
dFNvdXJjZU92ZXIoY29udGV4dCwgRmxvYXRSZWN0KHAyLngoKS13aWR0aC8yLCBwMi55KCksIHdp
ZHRoLCB3aWR0aCksIHN0cm9rZUNvbG9yKCkpOworICAgICAgICAgICAgZmlsbFJlY3RTb3VyY2VP
dmVyKGNyLCBGbG9hdFJlY3QocDEueCgpIC0gd2lkdGgvMiwgcDEueSgpIC0gd2lkdGgsIHdpZHRo
LCB3aWR0aCksIHN0cm9rZUNvbG9yKCkpOworICAgICAgICAgICAgZmlsbFJlY3RTb3VyY2VPdmVy
KGNyLCBGbG9hdFJlY3QocDIueCgpIC0gd2lkdGgvMiwgcDIueSgpLCB3aWR0aCwgd2lkdGgpLCBz
dHJva2VDb2xvcigpKTsKICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIGZpbGxSZWN0U291
cmNlT3Zlcihjb250ZXh0LCBGbG9hdFJlY3QocDEueCgpLXdpZHRoLCBwMS55KCktd2lkdGgvMiwg
d2lkdGgsIHdpZHRoKSwgc3Ryb2tlQ29sb3IoKSk7Ci0gICAgICAgICAgICBmaWxsUmVjdFNvdXJj
ZU92ZXIoY29udGV4dCwgRmxvYXRSZWN0KHAyLngoKSwgcDIueSgpLXdpZHRoLzIsIHdpZHRoLCB3
aWR0aCksIHN0cm9rZUNvbG9yKCkpOworICAgICAgICAgICAgZmlsbFJlY3RTb3VyY2VPdmVyKGNy
LCBGbG9hdFJlY3QocDEueCgpIC0gd2lkdGgsIHAxLnkoKSAtIHdpZHRoLzIsIHdpZHRoLCB3aWR0
aCksIHN0cm9rZUNvbG9yKCkpOworICAgICAgICAgICAgZmlsbFJlY3RTb3VyY2VPdmVyKGNyLCBG
bG9hdFJlY3QocDIueCgpLCBwMi55KCkgLSB3aWR0aC8yLCB3aWR0aCwgd2lkdGgpLCBzdHJva2VD
b2xvcigpKTsKICAgICAgICAgfQotICAgICAgICAKKwogICAgICAgICAvLyBFeGFtcGxlOiA4MCBw
aXhlbHMgd2l0aCBhIHdpZHRoIG9mIDMwIHBpeGVscy4KICAgICAgICAgLy8gUmVtYWluZGVyIGlz
IDIwLiAgVGhlIG1heGltdW0gcGl4ZWxzIG9mIGxpbmUgd2UgY291bGQgcGFpbnQKICAgICAgICAg
Ly8gd2lsbCBiZSA1MCBwaXhlbHMuCi0gICAgICAgIGludCBkaXN0YW5jZSA9IChpc1ZlcnRpY2Fs
TGluZSA/IChwb2ludDIueSgpIC0gcG9pbnQxLnkoKSkgOiAocG9pbnQyLngoKSAtIHBvaW50MS54
KCkpKSAtIDIqKGludCl3aWR0aDsKKyAgICAgICAgaW50IGRpc3RhbmNlID0gKGlzVmVydGljYWxM
aW5lID8gKHBvaW50Mi55KCkgLSBwb2ludDEueSgpKSA6IChwb2ludDIueCgpIC0gcG9pbnQxLngo
KSkpIC0gMipzdGF0aWNfY2FzdDxpbnQ+KHdpZHRoKTsKICAgICAgICAgaW50IHJlbWFpbmRlciA9
IGRpc3RhbmNlJXBhdFdpZHRoOwogICAgICAgICBpbnQgY292ZXJhZ2UgPSBkaXN0YW5jZS1yZW1h
aW5kZXI7CiAgICAgICAgIGludCBudW1TZWdtZW50cyA9IGNvdmVyYWdlL3BhdFdpZHRoOwpAQCAt
MjYyLDE2ICsyNjIsMTYgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdMaW5lKGNvbnN0IElu
dAogICAgICAgICAgICAgICAgICAgICBwYXR0ZXJuT2Zmc2V0ID0gKHBhdFdpZHRoIC0gcmVtYWlu
ZGVyKS8yOwogICAgICAgICAgICAgfQogICAgICAgICB9Ci0gICAgICAgIAorCiAgICAgICAgIGRv
dWJsZSBkYXNoID0gcGF0V2lkdGg7Ci0gICAgICAgIGNhaXJvX3NldF9kYXNoKGNvbnRleHQsICZk
YXNoLCAxLCBwYXR0ZXJuT2Zmc2V0KTsKKyAgICAgICAgY2Fpcm9fc2V0X2Rhc2goY3IsICZkYXNo
LCAxLCBwYXR0ZXJuT2Zmc2V0KTsKICAgICB9CiAKLSAgICBjYWlyb19tb3ZlX3RvKGNvbnRleHQs
IHAxLngoKSwgcDEueSgpKTsKLSAgICBjYWlyb19saW5lX3RvKGNvbnRleHQsIHAyLngoKSwgcDIu
eSgpKTsKKyAgICBjYWlyb19tb3ZlX3RvKGNyLCBwMS54KCksIHAxLnkoKSk7CisgICAgY2Fpcm9f
bGluZV90byhjciwgcDIueCgpLCBwMi55KCkpOwogCi0gICAgY2Fpcm9fc3Ryb2tlKGNvbnRleHQp
OwotICAgIGNhaXJvX3Jlc3RvcmUoY29udGV4dCk7CisgICAgY2Fpcm9fc3Ryb2tlKGNyKTsKKyAg
ICBjYWlyb19yZXN0b3JlKGNyKTsKIH0KIAogLy8gVGhpcyBtZXRob2QgaXMgb25seSB1c2VkIHRv
IGRyYXcgdGhlIGxpdHRsZSBjaXJjbGVzIHVzZWQgaW4gbGlzdHMuCkBAIC0yNzksMjggKzI3OSwy
OCBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd0VsbGlwc2UoY29uc3QgCiB7CiAgICAgaWYg
KHBhaW50aW5nRGlzYWJsZWQoKSkKICAgICAgICAgcmV0dXJuOwotICAgIAotICAgIGNhaXJvX3Qq
IGNvbnRleHQgPSBtX2RhdGEtPmNvbnRleHQ7Ci0gICAgY2Fpcm9fc2F2ZShjb250ZXh0KTsKKwor
ICAgIGNhaXJvX3QqIGNyID0gbV9kYXRhLT5jcjsKKyAgICBjYWlyb19zYXZlKGNyKTsKICAgICBm
bG9hdCB5UmFkaXVzID0gLjUgKiByZWN0LmhlaWdodCgpOwogICAgIGZsb2F0IHhSYWRpdXMgPSAu
NSAqIHJlY3Qud2lkdGgoKTsKLSAgICBjYWlyb190cmFuc2xhdGUoY29udGV4dCwgcmVjdC54KCkg
KyB4UmFkaXVzLCByZWN0LnkoKSArIHlSYWRpdXMpOwotICAgIGNhaXJvX3NjYWxlKGNvbnRleHQs
IHhSYWRpdXMsIHlSYWRpdXMpOwotICAgIGNhaXJvX2FyYyhjb250ZXh0LCAwLiwgMC4sIDEuLCAw
LiwgMiAqIE1fUEkpOwotICAgIGNhaXJvX3Jlc3RvcmUoY29udGV4dCk7CisgICAgY2Fpcm9fdHJh
bnNsYXRlKGNyLCByZWN0LngoKSArIHhSYWRpdXMsIHJlY3QueSgpICsgeVJhZGl1cyk7CisgICAg
Y2Fpcm9fc2NhbGUoY3IsIHhSYWRpdXMsIHlSYWRpdXMpOworICAgIGNhaXJvX2FyYyhjciwgMC4s
IDAuLCAxLiwgMC4sIDIgKiBNX1BJKTsKKyAgICBjYWlyb19yZXN0b3JlKGNyKTsKIAogICAgIGlm
IChmaWxsQ29sb3IoKS5hbHBoYSgpKSB7Ci0gICAgICAgIHNldENvbG9yKGNvbnRleHQsIGZpbGxD
b2xvcigpKTsKLSAgICAgICAgY2Fpcm9fZmlsbF9wcmVzZXJ2ZShjb250ZXh0KTsKKyAgICAgICAg
c2V0Q29sb3IoY3IsIGZpbGxDb2xvcigpKTsKKyAgICAgICAgY2Fpcm9fZmlsbF9wcmVzZXJ2ZShj
cik7CiAgICAgfQogCiAgICAgaWYgKHN0cm9rZVN0eWxlKCkgIT0gTm9TdHJva2UpIHsKLSAgICAg
ICAgc2V0Q29sb3IoY29udGV4dCwgc3Ryb2tlQ29sb3IoKSk7Ci0gICAgICAgIGNhaXJvX3NldF9s
aW5lX3dpZHRoKGNvbnRleHQsIHN0cm9rZVRoaWNrbmVzcygpKTsKLSAgICAgICAgY2Fpcm9fc3Ry
b2tlKGNvbnRleHQpOworICAgICAgICBzZXRDb2xvcihjciwgc3Ryb2tlQ29sb3IoKSk7CisgICAg
ICAgIGNhaXJvX3NldF9saW5lX3dpZHRoKGNyLCBzdHJva2VUaGlja25lc3MoKSk7CisgICAgICAg
IGNhaXJvX3N0cm9rZShjcik7CiAgICAgfQogCi0gICAgY2Fpcm9fbmV3X3BhdGgoY29udGV4dCk7
CisgICAgY2Fpcm9fbmV3X3BhdGgoY3IpOwogfQogCiAvLyBGSVhNRTogVGhpcyBmdW5jdGlvbiBu
ZWVkcyB0byBiZSBhZGp1c3RlZCB0byBtYXRjaCB0aGUgZnVuY3Rpb25hbGl0eSBvbiB0aGUgTWFj
IHNpZGUuCkBAIC0zMDgsMjYgKzMwOCwyOSBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6c3Ryb2tl
QXJjKGNvbnN0IEluCiB7CiAgICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKICAgICAgICAgcmV0
dXJuOwotICAgIAorCisgICAgaWYgKHN0cm9rZVN0eWxlKCkgPT0gTm9TdHJva2UpCisgICAgICAg
IHJldHVybjsKKwogICAgIGludCB4ID0gcmVjdC54KCk7CiAgICAgaW50IHkgPSByZWN0LnkoKTsK
LSAgICBmbG9hdCB3ID0gKGZsb2F0KXJlY3Qud2lkdGgoKTsKKyAgICBmbG9hdCB3ID0gcmVjdC53
aWR0aCgpOwogI2lmIDAgLy8gRklYTUU6IHVudXNlZCBzbyBmYXIKLSAgICBmbG9hdCBoID0gKGZs
b2F0KXJlY3QuaGVpZ2h0KCk7CisgICAgZmxvYXQgaCA9IHJlY3QuaGVpZ2h0KCk7CiAgICAgZmxv
YXQgc2NhbGVGYWN0b3IgPSBoIC8gdzsKICAgICBmbG9hdCByZXZlcnNlU2NhbGVGYWN0b3IgPSB3
IC8gaDsKICNlbmRpZgotICAgIGNhaXJvX3QqIGNvbnRleHQgPSBtX2RhdGEtPmNvbnRleHQ7Ci0g
ICAgaWYgKHN0cm9rZVN0eWxlKCkgIT0gTm9TdHJva2UpIHsgICAgICAgIAotICAgICAgICBmbG9h
dCByID0gdyAvIDI7Ci0gICAgICAgIGZsb2F0IGZhID0gc3RhcnRBbmdsZTsKLSAgICAgICAgZmxv
YXQgZmFsZW4gPSAgZmEgKyBhbmdsZVNwYW47Ci0gICAgICAgIGNhaXJvX2FyY19uZWdhdGl2ZShj
b250ZXh0LCB4ICsgciwgeSArIHIsIHIsIC1mYSAqIE1fUEkvMTgwLCAtZmFsZW4gKiBNX1BJLzE4
MCk7Ci0gICAgICAgIAotICAgICAgICBzZXRDb2xvcihjb250ZXh0LCBzdHJva2VDb2xvcigpKTsK
LSAgICAgICAgY2Fpcm9fc2V0X2xpbmVfd2lkdGgoY29udGV4dCwgc3Ryb2tlVGhpY2tuZXNzKCkp
OwotICAgICAgICBjYWlyb19zdHJva2UoY29udGV4dCk7Ci0gICAgfQorICAgIGZsb2F0IHIgPSB3
IC8gMjsKKyAgICBmbG9hdCBmYSA9IHN0YXJ0QW5nbGU7CisgICAgZmxvYXQgZmFsZW4gPSAgZmEg
KyBhbmdsZVNwYW47CisKKyAgICBjYWlyb190KiBjciA9IG1fZGF0YS0+Y3I7CisgICAgY2Fpcm9f
c2F2ZShjcik7CisgICAgY2Fpcm9fYXJjX25lZ2F0aXZlKGNyLCB4ICsgciwgeSArIHIsIHIsIC1m
YSAqIE1fUEkvMTgwLCAtZmFsZW4gKiBNX1BJLzE4MCk7CisgICAgc2V0Q29sb3IoY3IsIHN0cm9r
ZUNvbG9yKCkpOworICAgIGNhaXJvX3NldF9saW5lX3dpZHRoKGNyLCBzdHJva2VUaGlja25lc3Mo
KSk7CisgICAgY2Fpcm9fc3Ryb2tlKGNyKTsKKyAgICBjYWlyb19yZXN0b3JlKGNyKTsKIH0KIAog
dm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdDb252ZXhQb2x5Z29uKHNpemVfdCBucG9pbnRzLCBj
b25zdCBGbG9hdFBvaW50KiBwb2ludHMsIGJvb2wgc2hvdWxkQW50aWFsaWFzKQpAQCAtMzM4LDI5
ICszNDEsMjkgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdDb252ZXhQb2x5Z29uKAogICAg
IGlmIChucG9pbnRzIDw9IDEpCiAgICAgICAgIHJldHVybjsKIAotICAgIGNhaXJvX3QqIGNvbnRl
eHQgPSBtX2RhdGEtPmNvbnRleHQ7CisgICAgY2Fpcm9fdCogY3IgPSBtX2RhdGEtPmNyOwogCi0g
ICAgY2Fpcm9fc2F2ZShjb250ZXh0KTsKLSAgICBjYWlyb19zZXRfYW50aWFsaWFzKGNvbnRleHQs
IHNob3VsZEFudGlhbGlhcyA/IENBSVJPX0FOVElBTElBU19ERUZBVUxUIDogQ0FJUk9fQU5USUFM
SUFTX05PTkUpOwotICAgIGNhaXJvX21vdmVfdG8oY29udGV4dCwgcG9pbnRzWzBdLngoKSwgcG9p
bnRzWzBdLnkoKSk7CisgICAgY2Fpcm9fc2F2ZShjcik7CisgICAgY2Fpcm9fc2V0X2FudGlhbGlh
cyhjciwgc2hvdWxkQW50aWFsaWFzID8gQ0FJUk9fQU5USUFMSUFTX0RFRkFVTFQgOiBDQUlST19B
TlRJQUxJQVNfTk9ORSk7CisgICAgY2Fpcm9fbW92ZV90byhjciwgcG9pbnRzWzBdLngoKSwgcG9p
bnRzWzBdLnkoKSk7CiAgICAgZm9yIChzaXplX3QgaSA9IDE7IGkgPCBucG9pbnRzOyBpKyspCi0g
ICAgICAgIGNhaXJvX2xpbmVfdG8oY29udGV4dCwgcG9pbnRzW2ldLngoKSwgcG9pbnRzW2ldLnko
KSk7Ci0gICAgY2Fpcm9fY2xvc2VfcGF0aChjb250ZXh0KTsKKyAgICAgICAgY2Fpcm9fbGluZV90
byhjciwgcG9pbnRzW2ldLngoKSwgcG9pbnRzW2ldLnkoKSk7CisgICAgY2Fpcm9fY2xvc2VfcGF0
aChjcik7CiAKICAgICBpZiAoZmlsbENvbG9yKCkuYWxwaGEoKSkgewotICAgICAgICBzZXRDb2xv
cihjb250ZXh0LCBmaWxsQ29sb3IoKSk7Ci0gICAgICAgIGNhaXJvX3NldF9maWxsX3J1bGUoY29u
dGV4dCwgQ0FJUk9fRklMTF9SVUxFX0VWRU5fT0REKTsKLSAgICAgICAgY2Fpcm9fZmlsbF9wcmVz
ZXJ2ZShjb250ZXh0KTsKKyAgICAgICAgc2V0Q29sb3IoY3IsIGZpbGxDb2xvcigpKTsKKyAgICAg
ICAgY2Fpcm9fc2V0X2ZpbGxfcnVsZShjciwgQ0FJUk9fRklMTF9SVUxFX0VWRU5fT0REKTsKKyAg
ICAgICAgY2Fpcm9fZmlsbF9wcmVzZXJ2ZShjcik7CiAgICAgfQogCiAgICAgaWYgKHN0cm9rZVN0
eWxlKCkgIT0gTm9TdHJva2UpIHsKLSAgICAgICAgc2V0Q29sb3IoY29udGV4dCwgc3Ryb2tlQ29s
b3IoKSk7Ci0gICAgICAgIGNhaXJvX3NldF9saW5lX3dpZHRoKGNvbnRleHQsIHN0cm9rZVRoaWNr
bmVzcygpKTsKLSAgICAgICAgY2Fpcm9fc3Ryb2tlKGNvbnRleHQpOworICAgICAgICBzZXRDb2xv
cihjciwgc3Ryb2tlQ29sb3IoKSk7CisgICAgICAgIGNhaXJvX3NldF9saW5lX3dpZHRoKGNyLCBz
dHJva2VUaGlja25lc3MoKSk7CisgICAgICAgIGNhaXJvX3N0cm9rZShjcik7CiAgICAgfQogCi0g
ICAgY2Fpcm9fbmV3X3BhdGgoY29udGV4dCk7Ci0gICAgY2Fpcm9fcmVzdG9yZShjb250ZXh0KTsK
KyAgICBjYWlyb19uZXdfcGF0aChjcik7CisgICAgY2Fpcm9fcmVzdG9yZShjcik7CiB9CiAKIHZv
aWQgR3JhcGhpY3NDb250ZXh0OjpmaWxsUmVjdChjb25zdCBJbnRSZWN0JiByZWN0LCBjb25zdCBD
b2xvciYgY29sb3IpCkBAIC0zNjksNyArMzcyLDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OmZp
bGxSZWN0KGNvbnN0IEludAogICAgICAgICByZXR1cm47CiAKICAgICBpZiAoY29sb3IuYWxwaGEo
KSkKLSAgICAgICAgZmlsbFJlY3RTb3VyY2VPdmVyKG1fZGF0YS0+Y29udGV4dCwgcmVjdCwgY29s
b3IpOworICAgICAgICBmaWxsUmVjdFNvdXJjZU92ZXIobV9kYXRhLT5jciwgcmVjdCwgY29sb3Ip
OwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZmlsbFJlY3QoY29uc3QgRmxvYXRSZWN0JiBy
ZWN0LCBjb25zdCBDb2xvciYgY29sb3IpCkBAIC0zNzgsNyArMzgxLDcgQEAgdm9pZCBHcmFwaGlj
c0NvbnRleHQ6OmZpbGxSZWN0KGNvbnN0IEZsbwogICAgICAgICByZXR1cm47CiAKICAgICBpZiAo
Y29sb3IuYWxwaGEoKSkKLSAgICAgICAgZmlsbFJlY3RTb3VyY2VPdmVyKG1fZGF0YS0+Y29udGV4
dCwgcmVjdCwgY29sb3IpOworICAgICAgICBmaWxsUmVjdFNvdXJjZU92ZXIobV9kYXRhLT5jciwg
cmVjdCwgY29sb3IpOwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dDo6Y2xpcChjb25zdCBJbnRS
ZWN0JiByZWN0KQpAQCAtMzg2LDkgKzM4OSw5IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpjbGlw
KGNvbnN0IEludFJlY3QKICAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQogICAgICAgICByZXR1
cm47CiAKLSAgICBjYWlyb190KiBjb250ZXh0ID0gbV9kYXRhLT5jb250ZXh0OwotICAgIGNhaXJv
X3JlY3RhbmdsZShjb250ZXh0LCByZWN0LngoKSwgcmVjdC55KCksIHJlY3Qud2lkdGgoKSwgcmVj
dC5oZWlnaHQoKSk7Ci0gICAgY2Fpcm9fY2xpcChjb250ZXh0KTsKKyAgICBjYWlyb190KiBjciA9
IG1fZGF0YS0+Y3I7CisgICAgY2Fpcm9fcmVjdGFuZ2xlKGNyLCByZWN0LngoKSwgcmVjdC55KCks
IHJlY3Qud2lkdGgoKSwgcmVjdC5oZWlnaHQoKSk7CisgICAgY2Fpcm9fY2xpcChjcik7CiB9CiAK
IHZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3Rm9jdXNSaW5nKGNvbnN0IENvbG9yJiBjb2xvcikK
QEAgLTM5OCw3ICs0MDEsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd0ZvY3VzUmluZyhj
b25zCiAKICAgICBpbnQgcmFkaXVzID0gKGZvY3VzUmluZ1dpZHRoKCkgLSAxKSAvIDI7CiAgICAg
aW50IG9mZnNldCA9IHJhZGl1cyArIGZvY3VzUmluZ09mZnNldCgpOwotICAgIAorCiAgICAgY29u
c3QgVmVjdG9yPEludFJlY3Q+JiByZWN0cyA9IGZvY3VzUmluZ1JlY3RzKCk7CiAgICAgdW5zaWdu
ZWQgcmVjdENvdW50ID0gcmVjdHMuc2l6ZSgpOwogICAgIEludFJlY3QgZmluYWxGb2N1c1JlY3Q7
CkBAIC00MDcsMTMgKzQxMCwxNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd0ZvY3VzUmlu
Zyhjb25zCiAgICAgICAgIGZvY3VzUmVjdC5pbmZsYXRlKG9mZnNldCk7CiAgICAgICAgIGZpbmFs
Rm9jdXNSZWN0LnVuaXRlKGZvY3VzUmVjdCk7CiAgICAgfQorCisgICAgY2Fpcm9fdCogY3IgPSBt
X2RhdGEtPmNyOworICAgIGNhaXJvX3NhdmUoY3IpOwogICAgIC8vIEZJWE1FOiBUaGVzZSByZWN0
cyBzaG91bGQgYmUgcm91bmRlZAotICAgIGNhaXJvX3JlY3RhbmdsZShtX2RhdGEtPmNvbnRleHQs
IGZpbmFsRm9jdXNSZWN0LngoKSwgZmluYWxGb2N1c1JlY3QueSgpLCBmaW5hbEZvY3VzUmVjdC53
aWR0aCgpLCBmaW5hbEZvY3VzUmVjdC5oZWlnaHQoKSk7Ci0gICAgCisgICAgY2Fpcm9fcmVjdGFu
Z2xlKGNyLCBmaW5hbEZvY3VzUmVjdC54KCksIGZpbmFsRm9jdXNSZWN0LnkoKSwgZmluYWxGb2N1
c1JlY3Qud2lkdGgoKSwgZmluYWxGb2N1c1JlY3QuaGVpZ2h0KCkpOworCiAgICAgLy8gRm9yY2Ug
dGhlIGFscGhhIHRvIDUwJS4gIFRoaXMgbWF0Y2hlcyB3aGF0IHRoZSBNYWMgZG9lcyB3aXRoIG91
dGxpbmUgcmluZ3MuCiAgICAgQ29sb3IgcmluZ0NvbG9yKGNvbG9yLnJlZCgpLCBjb2xvci5ncmVl
bigpLCBjb2xvci5ibHVlKCksIDEyNyk7Ci0gICAgc2V0Q29sb3IobV9kYXRhLT5jb250ZXh0LCBy
aW5nQ29sb3IpOwotICAgIGNhaXJvX3N0cm9rZShtX2RhdGEtPmNvbnRleHQpOworICAgIHNldENv
bG9yKGNyLCByaW5nQ29sb3IpOworICAgIGNhaXJvX3N0cm9rZShjcik7CisgICAgY2Fpcm9fcmVz
dG9yZShjcik7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpzZXRGb2N1c1JpbmdDbGlwKGNv
bnN0IEludFJlY3QmKQpAQCAtNDQ1LDQwICs0NTIsNDEgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6
OmRyYXdMaW5lRm9yTWlzc3BlbAogRmxvYXRSZWN0IEdyYXBoaWNzQ29udGV4dDo6cm91bmRUb0Rl
dmljZVBpeGVscyhjb25zdCBGbG9hdFJlY3QmIGZyZWN0KQogewogICAgIEZsb2F0UmVjdCByZXN1
bHQ7Ci0gICAgZG91YmxlIHggPWZyZWN0LngoKTsKKyAgICBkb3VibGUgeCA9IGZyZWN0LngoKTsK
ICAgICBkb3VibGUgeSA9IGZyZWN0LnkoKTsKLSAgICBjYWlyb190KiBjb250ZXh0ID0gbV9kYXRh
LT5jb250ZXh0OwotICAgIGNhaXJvX3VzZXJfdG9fZGV2aWNlKGNvbnRleHQsJngsJnkpOworICAg
IGNhaXJvX3QqIGNyID0gbV9kYXRhLT5jcjsKKyAgICBjYWlyb191c2VyX3RvX2RldmljZShjciwg
JngsICZ5KTsKICAgICB4ID0gcm91bmQoeCk7CiAgICAgeSA9IHJvdW5kKHkpOwotICAgIGNhaXJv
X2RldmljZV90b191c2VyKGNvbnRleHQsJngsJnkpOwotICAgIHJlc3VsdC5zZXRYKChmbG9hdCl4
KTsKLSAgICByZXN1bHQuc2V0WSgoZmxvYXQpeSk7CisgICAgY2Fpcm9fZGV2aWNlX3RvX3VzZXIo
Y3IsICZ4LCAmeSk7CisgICAgcmVzdWx0LnNldFgoc3RhdGljX2Nhc3Q8ZmxvYXQ+KHgpKTsKKyAg
ICByZXN1bHQuc2V0WShzdGF0aWNfY2FzdDxmbG9hdD4oeSkpOwogICAgIHggPSBmcmVjdC53aWR0
aCgpOwogICAgIHkgPSBmcmVjdC5oZWlnaHQoKTsKLSAgICBjYWlyb191c2VyX3RvX2RldmljZV9k
aXN0YW5jZShjb250ZXh0LCZ4LCZ5KTsKKyAgICBjYWlyb191c2VyX3RvX2RldmljZV9kaXN0YW5j
ZShjciwgJngsICZ5KTsKICAgICB4ID0gcm91bmQoeCk7CiAgICAgeSA9IHJvdW5kKHkpOwotICAg
IGNhaXJvX2RldmljZV90b191c2VyX2Rpc3RhbmNlKGNvbnRleHQsJngsJnkpOwotICAgIHJlc3Vs
dC5zZXRXaWR0aCgoZmxvYXQpeCk7Ci0gICAgcmVzdWx0LnNldEhlaWdodCgoZmxvYXQpeSk7Ci0g
ICAgcmV0dXJuIHJlc3VsdDsgCisgICAgY2Fpcm9fZGV2aWNlX3RvX3VzZXJfZGlzdGFuY2UoY3Is
ICZ4LCAmeSk7CisgICAgcmVzdWx0LnNldFdpZHRoKHN0YXRpY19jYXN0PGZsb2F0Pih4KSk7Cisg
ICAgcmVzdWx0LnNldEhlaWdodChzdGF0aWNfY2FzdDxmbG9hdD4oeSkpOworICAgIHJldHVybiBy
ZXN1bHQ7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0Ojp0cmFuc2xhdGUoZmxvYXQgeCwgZmxv
YXQgeSkKIHsKICAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQogICAgICAgICByZXR1cm47Ci0g
ICAgY2Fpcm9fdCogY29udGV4dCA9IG1fZGF0YS0+Y29udGV4dDsKLSAgICBjYWlyb190cmFuc2xh
dGUoY29udGV4dCwgeCwgeSk7CisKKyAgICBjYWlyb190KiBjciA9IG1fZGF0YS0+Y3I7CisgICAg
Y2Fpcm9fdHJhbnNsYXRlKGNyLCB4LCB5KTsKIH0KIAogSW50UG9pbnQgR3JhcGhpY3NDb250ZXh0
OjpvcmlnaW4oKQogewogICAgIGNhaXJvX21hdHJpeF90IG1hdHJpeDsKLSAgICBjYWlyb190KiBj
b250ZXh0ID0gbV9kYXRhLT5jb250ZXh0OwotICAgIGNhaXJvX2dldF9tYXRyaXgoY29udGV4dCwg
Jm1hdHJpeCk7Ci0gICAgcmV0dXJuIEludFBvaW50KChpbnQpbWF0cml4LngwLCAoaW50KW1hdHJp
eC55MCk7CisgICAgY2Fpcm9fdCogY3IgPSBtX2RhdGEtPmNyOworICAgIGNhaXJvX2dldF9tYXRy
aXgoY3IsICZtYXRyaXgpOworICAgIHJldHVybiBJbnRQb2ludChzdGF0aWNfY2FzdDxpbnQ+KG1h
dHJpeC54MCksIHN0YXRpY19jYXN0PGludD4obWF0cml4LnkwKSk7CiB9CiAKIHZvaWQgR3JhcGhp
Y3NDb250ZXh0OjpzZXRQbGF0Zm9ybUZpbGxDb2xvcihjb25zdCBDb2xvciYgY29sKQpAQCAtNDk3
LDcgKzUwNSw4IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpzZXRQbGF0Zm9ybVN0cm9rZVQKIHsK
ICAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQogICAgICAgICByZXR1cm47Ci0gICAgY2Fpcm9f
c2V0X2xpbmVfd2lkdGgobV9kYXRhLT5jb250ZXh0LCBzdHJva2VUaGlja25lc3MpOworCisgICAg
Y2Fpcm9fc2V0X2xpbmVfd2lkdGgobV9kYXRhLT5jciwgc3Ryb2tlVGhpY2tuZXNzKTsKIH0KIAog
dm9pZCBHcmFwaGljc0NvbnRleHQ6OnNldFBsYXRmb3JtU3Ryb2tlU3R5bGUoY29uc3QgU3Ryb2tl
U3R5bGUmIHN0cm9rZVN0eWxlKQpAQCAtNTExLDE2ICs1MjAsMTYgQEAgdm9pZCBHcmFwaGljc0Nv
bnRleHQ6OnNldFBsYXRmb3JtU3Ryb2tlUwogICAgIHN3aXRjaCAoc3Ryb2tlU3R5bGUpIHsKICAg
ICBjYXNlIE5vU3Ryb2tlOgogICAgICAgICAvLyBGSVhNRTogaXMgaXQgdGhlIHJpZ2h0IHdheSB0
byBlbXVsYXRlIE5vU3Ryb2tlPwotICAgICAgICBjYWlyb19zZXRfbGluZV93aWR0aChtX2RhdGEt
PmNvbnRleHQsIDApOworICAgICAgICBjYWlyb19zZXRfbGluZV93aWR0aChtX2RhdGEtPmNyLCAw
KTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBTb2xpZFN0cm9rZToKLSAgICAgICAgY2Fpcm9f
c2V0X2Rhc2gobV9kYXRhLT5jb250ZXh0LCAwLCAwLCAwKTsKKyAgICAgICAgY2Fpcm9fc2V0X2Rh
c2gobV9kYXRhLT5jciwgMCwgMCwgMCk7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgRG90dGVk
U3Ryb2tlOgotICAgICAgICBjYWlyb19zZXRfZGFzaChtX2RhdGEtPmNvbnRleHQsIGRvdFBhdHRl
cm4sIDIsIDApOworICAgICAgICBjYWlyb19zZXRfZGFzaChtX2RhdGEtPmNyLCBkb3RQYXR0ZXJu
LCAyLCAwKTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBEYXNoZWRTdHJva2U6Ci0gICAgICAg
IGNhaXJvX3NldF9kYXNoKG1fZGF0YS0+Y29udGV4dCwgZGFzaFBhdHRlcm4sIDIsIDApOworICAg
ICAgICBjYWlyb19zZXRfZGFzaChtX2RhdGEtPmNyLCBkYXNoUGF0dGVybiwgMiwgMCk7CiAgICAg
ICAgIGJyZWFrOwogICAgIGRlZmF1bHQ6CiAgICAgICAgIG5vdEltcGxlbWVudGVkKCk7CkBAIC01
MzcsNyArNTQ2LDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OnNldFBsYXRmb3JtRm9udChjbwog
ICAgIC8vIEZJWE1FOiBpcyBpdCB0aGUgcmlnaHQgdGhpbmcgdG8gZG8/IEFsc28sIGRvZXNuJ3Qg
d29yayBvbiBXaW4gYmVjYXVzZQogICAgIC8vIHRoZXJlIEZvbnREYXRhIGRvZXNuJ3QgaGF2ZSA6
OnNldEZvbnQoKQogICAgIGNvbnN0IEZvbnREYXRhICpmb250RGF0YSA9IGZvbnQucHJpbWFyeUZv
bnQoKTsKLSAgICBmb250RGF0YS0+c2V0Rm9udChtX2RhdGEtPmNvbnRleHQpOworICAgIGZvbnRE
YXRhLT5zZXRGb250KG1fZGF0YS0+Y3IpOwogI2VuZGlmCiB9CiAKQEAgLTU1MSwxNCArNTYwLDE0
IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0Ojpjb25jYXRDVE0oY29uc3QgQWYKICAgICBpZiAocGFp
bnRpbmdEaXNhYmxlZCgpKQogICAgICAgICByZXR1cm47CiAKLSAgICBjYWlyb190KiBjciA9IG1f
ZGF0YS0+Y29udGV4dDsKKyAgICBjYWlyb190KiBjciA9IG1fZGF0YS0+Y3I7CiAgICAgY29uc3Qg
Y2Fpcm9fbWF0cml4X3QqIG1hdHJpeCA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgY2Fpcm9fbWF0
cml4X3QqPigmdHJhbnNmb3JtKTsKICAgICBjYWlyb190cmFuc2Zvcm0oY3IsIG1hdHJpeCk7CiB9
CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0OjphZGRJbm5lclJvdW5kZWRSZWN0Q2xpcChjb25zdCBJ
bnRSZWN0JiByZWN0LCBpbnQgdGhpY2tuZXNzKSAKLXsgCi0gICAgbm90SW1wbGVtZW50ZWQoKTsg
Cit2b2lkIEdyYXBoaWNzQ29udGV4dDo6YWRkSW5uZXJSb3VuZGVkUmVjdENsaXAoY29uc3QgSW50
UmVjdCYgcmVjdCwgaW50IHRoaWNrbmVzcykKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOwogfQog
CiB2b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0U2hhZG93KEludFNpemUgY29uc3QmLCBpbnQsIENv
bG9yIGNvbnN0JikKQEAgLTU3Niw4ICs1ODUsOCBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6YmVn
aW5UcmFuc3BhcmVuY3lMCiAgICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKICAgICAgICAgcmV0
dXJuOwogCi0gICAgY2Fpcm9fdCogY29udGV4dCA9IG1fZGF0YS0+Y29udGV4dDsKLSAgICBjYWly
b19wdXNoX2dyb3VwKGNvbnRleHQpOworICAgIGNhaXJvX3QqIGNyID0gbV9kYXRhLT5jcjsKKyAg
ICBjYWlyb19wdXNoX2dyb3VwKGNyKTsKICAgICBtX2RhdGEtPmxheWVycy5hcHBlbmQob3BhY2l0
eSk7CiB9CiAKQEAgLTU4NiwxMCArNTk1LDEwIEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjplbmRU
cmFuc3BhcmVuY3lMYXkKICAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQogICAgICAgICByZXR1
cm47CiAKLSAgICBjYWlyb190KiBjb250ZXh0ID0gbV9kYXRhLT5jb250ZXh0OworICAgIGNhaXJv
X3QqIGNyID0gbV9kYXRhLT5jcjsKIAotICAgIGNhaXJvX3BvcF9ncm91cF90b19zb3VyY2UoY29u
dGV4dCk7Ci0gICAgY2Fpcm9fcGFpbnRfd2l0aF9hbHBoYShjb250ZXh0LCBtX2RhdGEtPmxheWVy
cy5sYXN0KCkpOworICAgIGNhaXJvX3BvcF9ncm91cF90b19zb3VyY2UoY3IpOworICAgIGNhaXJv
X3BhaW50X3dpdGhfYWxwaGEoY3IsIG1fZGF0YS0+bGF5ZXJzLmxhc3QoKSk7CiAgICAgbV9kYXRh
LT5sYXllcnMucmVtb3ZlTGFzdCgpOwogfQogCkBAIC01OTgsNyArNjA3LDcgQEAgdm9pZCBHcmFw
aGljc0NvbnRleHQ6OmNsZWFyUmVjdChjb25zdCBGbAogICAgIGlmIChwYWludGluZ0Rpc2FibGVk
KCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIGNhaXJvX3QqIGNyID0gbV9kYXRhLT5jb250ZXh0
OworICAgIGNhaXJvX3QqIGNyID0gbV9kYXRhLT5jcjsKIAogICAgIGNhaXJvX3NhdmUoY3IpOwog
ICAgIGNhaXJvX3JlY3RhbmdsZShjciwgcmVjdC54KCksIHJlY3QueSgpLCByZWN0LndpZHRoKCks
IHJlY3QuaGVpZ2h0KCkpOwpAQCAtNjI5LDcgKzYzOCw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0
OjpzZXRMaW5lQ2FwKExpbmVDYXAKICAgICAgICAgICAgIGNhaXJvQ2FwID0gQ0FJUk9fTElORV9D
QVBfU1FVQVJFOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgfQotICAgIGNhaXJvX3NldF9saW5l
X2NhcChtX2RhdGEtPmNvbnRleHQsIGNhaXJvQ2FwKTsKKyAgICBjYWlyb19zZXRfbGluZV9jYXAo
bV9kYXRhLT5jciwgY2Fpcm9DYXApOwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0TGlu
ZUpvaW4oTGluZUpvaW4gbGluZUpvaW4pCkBAIC02NDksMTQgKzY1OCwxNSBAQCB2b2lkIEdyYXBo
aWNzQ29udGV4dDo6c2V0TGluZUpvaW4oTGluZUpvCiAgICAgICAgICAgICBjYWlyb0pvaW4gPSBD
QUlST19MSU5FX0pPSU5fQkVWRUw7CiAgICAgICAgICAgICBicmVhazsKICAgICB9Ci0gICAgY2Fp
cm9fc2V0X2xpbmVfam9pbihtX2RhdGEtPmNvbnRleHQsIGNhaXJvSm9pbik7CisgICAgY2Fpcm9f
c2V0X2xpbmVfam9pbihtX2RhdGEtPmNyLCBjYWlyb0pvaW4pOwogfQogCiB2b2lkIEdyYXBoaWNz
Q29udGV4dDo6c2V0TWl0ZXJMaW1pdChmbG9hdCBtaXRlcikKIHsKICAgICBpZiAocGFpbnRpbmdE
aXNhYmxlZCgpKQogICAgICAgICByZXR1cm47Ci0gICAgY2Fpcm9fc2V0X21pdGVyX2xpbWl0KG1f
ZGF0YS0+Y29udGV4dCwgbWl0ZXIpOworCisgICAgY2Fpcm9fc2V0X21pdGVyX2xpbWl0KG1fZGF0
YS0+Y3IsIG1pdGVyKTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHQ6OnNldEFscGhhKGZsb2F0
KQpAQCAtNzA0LDcgKzcxNCw4IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpzZXRDb21wb3NpdGVP
cGVyYXQKIHsKICAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQogICAgICAgICByZXR1cm47Ci0g
ICAgY2Fpcm9fc2V0X29wZXJhdG9yKG1fZGF0YS0+Y29udGV4dCwgdG9DYWlyb09wZXJhdG9yKG9w
KSk7CisKKyAgICBjYWlyb19zZXRfb3BlcmF0b3IobV9kYXRhLT5jciwgdG9DYWlyb09wZXJhdG9y
KG9wKSk7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpiZWdpblBhdGgoKQpAQCAtNzEyLDcg
KzcyMyw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpiZWdpblBhdGgoKQogICAgIGlmIChwYWlu
dGluZ0Rpc2FibGVkKCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIGNhaXJvX3QqIGNyID0gbV9k
YXRhLT5jb250ZXh0OworICAgIGNhaXJvX3QqIGNyID0gbV9kYXRhLT5jcjsKICAgICBjYWlyb19u
ZXdfcGF0aChjcik7CiB9CiAKQEAgLTcyMSw3ICs3MzIsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4
dDo6YWRkUGF0aChjb25zdCBQYXRoCiAgICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKICAgICAg
ICAgcmV0dXJuOwogCi0gICAgY2Fpcm9fdCogY3IgPSBtX2RhdGEtPmNvbnRleHQ7CisgICAgY2Fp
cm9fdCogY3IgPSBtX2RhdGEtPmNyOwogICAgIGNhaXJvX3BhdGhfdCAqcCA9IGNhaXJvX2NvcHlf
cGF0aChwYXRoLnBsYXRmb3JtUGF0aCgpLT5tX2NyKTsKICAgICBjYWlyb19hcHBlbmRfcGF0aChj
ciwgcCk7CiAgICAgY2Fpcm9fcGF0aF9kZXN0cm95KHApOwpAQCAtNzMxLDcgKzc0Miw4IEBAIHZv
aWQgR3JhcGhpY3NDb250ZXh0OjpjbGlwKGNvbnN0IFBhdGgmIHAKIHsKICAgICBpZiAocGFpbnRp
bmdEaXNhYmxlZCgpKQogICAgICAgICByZXR1cm47Ci0gICAgY2Fpcm9fdCogY3IgPSBtX2RhdGEt
PmNvbnRleHQ7CisKKyAgICBjYWlyb190KiBjciA9IG1fZGF0YS0+Y3I7CiAgICAgY2Fpcm9fcGF0
aF90ICpwID0gY2Fpcm9fY29weV9wYXRoKHBhdGgucGxhdGZvcm1QYXRoKCktPm1fY3IpOwogICAg
IGNhaXJvX2FwcGVuZF9wYXRoKGNyLCBwKTsKICAgICBjYWlyb19wYXRoX2Rlc3Ryb3kocCk7CkBA
IC03NDcsMTQgKzc1OSwxNiBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6cm90YXRlKGZsb2F0IHJh
ZGlhCiB7CiAgICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKICAgICAgICAgcmV0dXJuOwotICAg
IGNhaXJvX3JvdGF0ZShtX2RhdGEtPmNvbnRleHQsIHJhZGlhbnMpOworCisgICAgY2Fpcm9fcm90
YXRlKG1fZGF0YS0+Y3IsIHJhZGlhbnMpOwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dDo6c2Nh
bGUoY29uc3QgRmxvYXRTaXplJiBzaXplKQogewogICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkp
CiAgICAgICAgIHJldHVybjsKLSAgICBjYWlyb19zY2FsZShtX2RhdGEtPmNvbnRleHQsIHNpemUu
d2lkdGgoKSwgc2l6ZS5oZWlnaHQoKSk7CisKKyAgICBjYWlyb19zY2FsZShtX2RhdGEtPmNyLCBz
aXplLndpZHRoKCksIHNpemUuaGVpZ2h0KCkpOwogfQogCiB2b2lkIEdyYXBoaWNzQ29udGV4dDo6
Y2xpcE91dChjb25zdCBJbnRSZWN0JikKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2Fpcm8vSW1hZ2VCdWZmZXJDYWlyby5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jYWlyby9JbWFnZUJ1ZmZlckNhaXJvLmNwcAkocmV2aXNpb24gMjM5ODMpCisr
KyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ltYWdlQnVmZmVyQ2Fpcm8uY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC00OCwxMyArNDgsMTMgQEAgYXV0b19wdHI8SW1hZ2VCdWZmZXI+IElt
YWdlQnVmZmVyOjpjcmVhdAogSW1hZ2VCdWZmZXI6OkltYWdlQnVmZmVyKF9jYWlyb19zdXJmYWNl
KiBzdXJmYWNlKQogICAgIDogbV9zdXJmYWNlKHN1cmZhY2UpCiB7Ci0gICAgY2Fpcm9fdCogY29u
dGV4dCA9IGNhaXJvX2NyZWF0ZShtX3N1cmZhY2UpOwotICAgIG1fY29udGV4dC5zZXQobmV3IEdy
YXBoaWNzQ29udGV4dChjb250ZXh0KSk7CisgICAgY2Fpcm9fdCogY3IgPSBjYWlyb19jcmVhdGUo
bV9zdXJmYWNlKTsKKyAgICBtX2NvbnRleHQuc2V0KG5ldyBHcmFwaGljc0NvbnRleHQoY3IpKTsK
IAogICAgIC8qCiAgICAgICogVGhlIGNvbnRleHQgaXMgbm93IG93bmVkIGJ5IHRoZSBHcmFwaGlj
c0NvbnRleHQKICAgICAgKi8KLSAgICBjYWlyb19kZXN0cm95KGNvbnRleHQpOworICAgIGNhaXJv
X2Rlc3Ryb3koY3IpOwogfQogCiBJbWFnZUJ1ZmZlcjo6fkltYWdlQnVmZmVyKCkKSW5kZXg6IFdl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vSW1hZ2VDYWlyby5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9JbWFnZUNhaXJvLmNwcAkocmV2aXNp
b24gMjM5ODMpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0ltYWdlQ2Fpcm8u
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC01MywyOCArNTMsMjggQEAgdm9pZCBGcmFtZURhdGE6OmNs
ZWFyKCkKIAogLy8gRHJhd2luZyBSb3V0aW5lcwogCi12b2lkIEJpdG1hcEltYWdlOjpkcmF3KEdy
YXBoaWNzQ29udGV4dCogY3R4dCwgY29uc3QgRmxvYXRSZWN0JiBkc3QsIGNvbnN0IEZsb2F0UmVj
dCYgc3JjLCBDb21wb3NpdGVPcGVyYXRvciBvcCkKK3ZvaWQgQml0bWFwSW1hZ2U6OmRyYXcoR3Jh
cGhpY3NDb250ZXh0KiBjb250ZXh0LCBjb25zdCBGbG9hdFJlY3QmIGRzdCwgY29uc3QgRmxvYXRS
ZWN0JiBzcmMsIENvbXBvc2l0ZU9wZXJhdG9yIG9wKQogewotICAgIGNhaXJvX3QqIGNvbnRleHQg
PSBjdHh0LT5wbGF0Zm9ybUNvbnRleHQoKTsKKyAgICBjYWlyb190KiBjciA9IGNvbnRleHQtPnBs
YXRmb3JtQ29udGV4dCgpOwogCiAgICAgaWYgKCFtX3NvdXJjZS5pbml0aWFsaXplZCgpKQogICAg
ICAgICByZXR1cm47Ci0gICAgCisKICAgICBjYWlyb19zdXJmYWNlX3QqIGltYWdlID0gZnJhbWVB
dEluZGV4KG1fY3VycmVudEZyYW1lKTsKICAgICBpZiAoIWltYWdlKSAvLyBJZiBpdCdzIHRvbyBl
YXJseSB3ZSB3b24ndCBoYXZlIGFuIGltYWdlIHlldC4KICAgICAgICAgcmV0dXJuOwogCi0gICAg
SW50U2l6ZSBzZWxmU2l6ZSA9IHNpemUoKTsgICAgICAgICAgICAgICAgICAgICAgIAorICAgIElu
dFNpemUgc2VsZlNpemUgPSBzaXplKCk7CiAgICAgRmxvYXRSZWN0IHNyY1JlY3Qoc3JjKTsKICAg
ICBGbG9hdFJlY3QgZHN0UmVjdChkc3QpOwogCi0gICAgY2Fpcm9fc2F2ZShjb250ZXh0KTsKKyAg
ICBjYWlyb19zYXZlKGNyKTsKIAogICAgIC8vIFNldCB0aGUgY29tcG9zaXRpbmcgb3BlcmF0aW9u
LgogICAgIGlmIChvcCA9PSBDb21wb3NpdGVTb3VyY2VPdmVyICYmICFmcmFtZUhhc0FscGhhQXRJ
bmRleChtX2N1cnJlbnRGcmFtZSkpCi0gICAgICAgIGN0eHQtPnNldENvbXBvc2l0ZU9wZXJhdGlv
bihDb21wb3NpdGVDb3B5KTsKKyAgICAgICAgY29udGV4dC0+c2V0Q29tcG9zaXRlT3BlcmF0aW9u
KENvbXBvc2l0ZUNvcHkpOwogICAgIGVsc2UKLSAgICAgICAgY3R4dC0+c2V0Q29tcG9zaXRlT3Bl
cmF0aW9uKG9wKTsKKyAgICAgICAgY29udGV4dC0+c2V0Q29tcG9zaXRlT3BlcmF0aW9uKG9wKTsK
IAogICAgIC8vIElmIHdlJ3JlIGRyYXdpbmcgYSBzdWIgcG9ydGlvbiBvZiB0aGUgaW1hZ2Ugb3Ig
c2NhbGluZyB0aGVuIGNyZWF0ZQogICAgIC8vIGEgcGF0dGVybiB0cmFuc2Zvcm1hdGlvbiBvbiB0
aGUgaW1hZ2UgYW5kIGRyYXcgdGhlIHRyYW5zZm9ybWVkIHBhdHRlcm4uCkBAIC04OSwzMSArODks
MzAgQEAgdm9pZCBCaXRtYXBJbWFnZTo6ZHJhdyhHcmFwaGljc0NvbnRleHQqIAogCiAgICAgZmxv
YXQgc2NhbGVYID0gc3JjUmVjdC53aWR0aCgpIC8gZHN0UmVjdC53aWR0aCgpOwogICAgIGZsb2F0
IHNjYWxlWSA9IHNyY1JlY3QuaGVpZ2h0KCkgLyBkc3RSZWN0LmhlaWdodCgpOwotICAgIGNhaXJv
X21hdHJpeF90IG1hdCA9IHsgc2NhbGVYLCAgMCwgMCAsIHNjYWxlWSwgc3JjUmVjdC54KCksIHNy
Y1JlY3QueSgpIH07Ci0gICAgY2Fpcm9fcGF0dGVybl9zZXRfbWF0cml4KHBhdHRlcm4sICZtYXQp
OworICAgIGNhaXJvX21hdHJpeF90IG1hdHJpeCA9IHsgc2NhbGVYLCAgMCwgMCAsIHNjYWxlWSwg
c3JjUmVjdC54KCksIHNyY1JlY3QueSgpIH07CisgICAgY2Fpcm9fcGF0dGVybl9zZXRfbWF0cml4
KHBhdHRlcm4sICZtYXRyaXgpOwogCiAgICAgLy8gRHJhdyB0aGUgaW1hZ2UuCi0gICAgY2Fpcm9f
dHJhbnNsYXRlKGNvbnRleHQsIGRzdFJlY3QueCgpLCBkc3RSZWN0LnkoKSk7Ci0gICAgY2Fpcm9f
c2V0X3NvdXJjZShjb250ZXh0LCBwYXR0ZXJuKTsKLSAgICBjYWlyb19yZWN0YW5nbGUoY29udGV4
dCwgMCwgMCwgZHN0UmVjdC53aWR0aCgpLCBkc3RSZWN0LmhlaWdodCgpKTsKLSAgICBjYWlyb19m
aWxsKGNvbnRleHQpOworICAgIGNhaXJvX3RyYW5zbGF0ZShjciwgZHN0UmVjdC54KCksIGRzdFJl
Y3QueSgpKTsKKyAgICBjYWlyb19zZXRfc291cmNlKGNyLCBwYXR0ZXJuKTsKKyAgICBjYWlyb19y
ZWN0YW5nbGUoY3IsIDAsIDAsIGRzdFJlY3Qud2lkdGgoKSwgZHN0UmVjdC5oZWlnaHQoKSk7Cisg
ICAgY2Fpcm9fZmlsbChjcik7CiAKICAgICBjYWlyb19wYXR0ZXJuX2Rlc3Ryb3kocGF0dGVybik7
Ci0gICAgY2Fpcm9fcmVzdG9yZShjb250ZXh0KTsKKyAgICBjYWlyb19yZXN0b3JlKGNyKTsKIAog
ICAgIHN0YXJ0QW5pbWF0aW9uKCk7Ci0KIH0KIAotdm9pZCBJbWFnZTo6ZHJhd1BhdHRlcm4oR3Jh
cGhpY3NDb250ZXh0KiBjdHh0LCBjb25zdCBGbG9hdFJlY3QmIHRpbGVSZWN0LCBjb25zdCBBZmZp
bmVUcmFuc2Zvcm0mIHBhdHRlcm5UcmFuc2Zvcm0sCit2b2lkIEltYWdlOjpkcmF3UGF0dGVybihH
cmFwaGljc0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IEZsb2F0UmVjdCYgdGlsZVJlY3QsIGNvbnN0
IEFmZmluZVRyYW5zZm9ybSYgcGF0dGVyblRyYW5zZm9ybSwKICAgICAgICAgICAgICAgICAgICAg
ICAgIGNvbnN0IEZsb2F0UG9pbnQmIHBoYXNlLCBDb21wb3NpdGVPcGVyYXRvciBvcCwgY29uc3Qg
RmxvYXRSZWN0JiBkZXN0UmVjdCkKIHsKICAgICBjYWlyb19zdXJmYWNlX3QqIGltYWdlID0gbmF0
aXZlSW1hZ2VGb3JDdXJyZW50RnJhbWUoKTsKICAgICBpZiAoIWltYWdlKSAvLyBJZiBpdCdzIHRv
byBlYXJseSB3ZSB3b24ndCBoYXZlIGFuIGltYWdlIHlldC4KICAgICAgICAgcmV0dXJuOwogCi0g
ICAgY2Fpcm9fdCogY29udGV4dCA9IGN0eHQtPnBsYXRmb3JtQ29udGV4dCgpOwotICAgIGN0eHQt
PnNhdmUoKTsKKyAgICBjYWlyb190KiBjciA9IGNvbnRleHQtPnBsYXRmb3JtQ29udGV4dCgpOwor
ICAgIGNvbnRleHQtPnNhdmUoKTsKIAogICAgIC8vIFRPRE86IE1ha2UgdXNlIG9mIHRpbGVSZWN0
LgogCkBAIC0xMzAsMTMgKzEyOSwxMyBAQCB2b2lkIEltYWdlOjpkcmF3UGF0dGVybihHcmFwaGlj
c0NvbnRleHQqCiAgICAgY2Fpcm9fbWF0cml4X2ludmVydCgmY29tYmluZWQpOwogICAgIGNhaXJv
X3BhdHRlcm5fc2V0X21hdHJpeChwYXR0ZXJuLCAmY29tYmluZWQpOwogCi0gICAgY3R4dC0+c2V0
Q29tcG9zaXRlT3BlcmF0aW9uKG9wKTsKLSAgICBjYWlyb19zZXRfc291cmNlKGNvbnRleHQsIHBh
dHRlcm4pOwotICAgIGNhaXJvX3JlY3RhbmdsZShjb250ZXh0LCBkZXN0UmVjdC54KCksIGRlc3RS
ZWN0LnkoKSwgZGVzdFJlY3Qud2lkdGgoKSwgZGVzdFJlY3QuaGVpZ2h0KCkpOwotICAgIGNhaXJv
X2ZpbGwoY29udGV4dCk7CisgICAgY29udGV4dC0+c2V0Q29tcG9zaXRlT3BlcmF0aW9uKG9wKTsK
KyAgICBjYWlyb19zZXRfc291cmNlKGNyLCBwYXR0ZXJuKTsKKyAgICBjYWlyb19yZWN0YW5nbGUo
Y3IsIGRlc3RSZWN0LngoKSwgZGVzdFJlY3QueSgpLCBkZXN0UmVjdC53aWR0aCgpLCBkZXN0UmVj
dC5oZWlnaHQoKSk7CisgICAgY2Fpcm9fZmlsbChjcik7CiAKICAgICBjYWlyb19wYXR0ZXJuX2Rl
c3Ryb3kocGF0dGVybik7Ci0gICAgY3R4dC0+cmVzdG9yZSgpOworICAgIGNvbnRleHQtPnJlc3Rv
cmUoKTsKIH0KIAogdm9pZCBCaXRtYXBJbWFnZTo6Y2hlY2tGb3JTb2xpZENvbG9yKCkK
</data>
<flag name="review"
          id="6380"
          type_id="1"
          status="+"
          setter="mrowe"
    />
          </attachment>
      

    </bug>

</bugzilla>