<?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>8696</bug_id>
          
          <creation_ts>2006-05-02 09:33:37 -0700</creation_ts>
          <short_desc>another round of GraphicsContext improvements</short_desc>
          <delta_ts>2006-05-03 14:45:03 -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>Platform</component>
          <version>420+</version>
          <rep_platform>Mac</rep_platform>
          <op_sys>OS X 10.4</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>
          
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>40861</commentid>
    <comment_count>0</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2006-05-02 09:33:37 -0700</bug_when>
    <thetext>Need to move more code from canvas into GraphicsContext. Also ported more of the Macintosh-specific GraphicsContext to use CoreGraphics and not NSGraphicsContext.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>40863</commentid>
    <comment_count>1</comment_count>
      <attachid>8075</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2006-05-02 09:37:56 -0700</bug_when>
    <thetext>Created attachment 8075
patch with change log</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>40866</commentid>
    <comment_count>2</comment_count>
      <attachid>8075</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2006-05-02 09:44:26 -0700</bug_when>
    <thetext>Comment on attachment 8075
patch with change log

r=me.  This looks great.  This will need to be performance tested, or at least you&apos;ll need to be ready to roll it out should it cause a performance regression. :)</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>8075</attachid>
            <date>2006-05-02 09:37:56 -0700</date>
            <delta_ts>2006-05-02 09:44:26 -0700</delta_ts>
            <desc>patch with change log</desc>
            <filename>GraphicsContextPatch.txt</filename>
            <type>text/plain</type>
            <size>50058</size>
            <attacher name="Darin Adler">darin</attacher>
            
              <data encoding="base64">SW5kZXg6IHBsYXRmb3JtL0dyYXBoaWNzQ29udGV4dC5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIHBsYXRmb3Jt
L0dyYXBoaWNzQ29udGV4dC5oCShyZXZpc2lvbiAxNDE1NikKKysrIHBsYXRmb3JtL0dyYXBoaWNz
Q29udGV4dC5oCSh3b3JraW5nIGNvcHkpCkBAIC03Myw4ICs3Myw4IEBACiAgICAgICAgIHZvaWQg
c2V0UGVuKFBlbjo6UGVuU3R5bGUpOwogICAgICAgICB2b2lkIHNldFBlbihSR0JBMzIpOwogICAg
ICAgICAKLSAgICAgICAgY29uc3QgUkdCQTMyIGZpbGxDb2xvcigpIGNvbnN0OwotICAgICAgICB2
b2lkIHNldEZpbGxDb2xvcihSR0JBMzIpOworICAgICAgICBDb2xvciBmaWxsQ29sb3IoKSBjb25z
dDsKKyAgICAgICAgdm9pZCBzZXRGaWxsQ29sb3IoY29uc3QgQ29sb3ImKTsKIAogICAgICAgICB2
b2lkIHNhdmUoKTsKICAgICAgICAgdm9pZCByZXN0b3JlKCk7CkBAIC0xNTAsNiArMTUwLDEwIEBA
CiAKICAgICAgICAgdm9pZCBjbGlwKGNvbnN0IFBhdGgmKTsKIAorICAgICAgICB2b2lkIHNjYWxl
KGNvbnN0IEZsb2F0U2l6ZSYpOworICAgICAgICB2b2lkIHJvdGF0ZShmbG9hdCBhbmdsZUluUmFk
aWFucyk7CisgICAgICAgIHZvaWQgdHJhbnNsYXRlKGNvbnN0IEZsb2F0U2l6ZSYpOworCiAjaWYg
U1ZHX1NVUFBPUlQKICAgICAgICAgS1JlbmRlcmluZ0RldmljZUNvbnRleHQqIGNyZWF0ZVJlbmRl
cmluZ0RldmljZUNvbnRleHQoKTsKICNlbmRpZgpAQCAtMTU5LDE5ICsxNjMsMTYgQEAKICNlbmRp
ZgogCiAgICAgcHJpdmF0ZToKLSAgICAgICAgdm9pZCBzZXRDb2xvckZyb21GaWxsQ29sb3IoKTsK
LSAgICAgICAgdm9pZCBzZXRDb2xvckZyb21QZW4oKTsKLSAgICAgICAgCiAgICAgICAgIHZvaWQg
c2F2ZVBsYXRmb3JtU3RhdGUoKTsKICAgICAgICAgdm9pZCByZXN0b3JlUGxhdGZvcm1TdGF0ZSgp
OwotICAgICAgICAKKwogICAgICAgICBpbnQgZm9jdXNSaW5nV2lkdGgoKSBjb25zdDsKICAgICAg
ICAgaW50IGZvY3VzUmluZ09mZnNldCgpIGNvbnN0OwogICAgICAgICBjb25zdCBWZWN0b3I8SW50
UmVjdD4mIGZvY3VzUmluZ1JlY3RzKCkgY29uc3Q7Ci0gICAgICAgIAorCiAgICAgICAgIHN0YXRp
YyBHcmFwaGljc0NvbnRleHRQcml2YXRlKiBjcmVhdGVHcmFwaGljc0NvbnRleHRQcml2YXRlKCk7
CiAgICAgICAgIHN0YXRpYyB2b2lkIGRlc3Ryb3lHcmFwaGljc0NvbnRleHRQcml2YXRlKEdyYXBo
aWNzQ29udGV4dFByaXZhdGUqKTsKLSAgICAgICAgCisKICAgICAgICAgR3JhcGhpY3NDb250ZXh0
UHJpdmF0ZSogbV9jb21tb247CiAgICAgICAgIEdyYXBoaWNzQ29udGV4dFBsYXRmb3JtUHJpdmF0
ZSogbV9kYXRhOwogICAgIH07CkluZGV4OiBwbGF0Zm9ybS9tYWMvR3JhcGhpY3NDb250ZXh0TWFj
Lm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIHBsYXRmb3JtL21hYy9HcmFwaGljc0NvbnRleHRNYWMubW0JKHJl
dmlzaW9uIDE0MTU2KQorKysgcGxhdGZvcm0vbWFjL0dyYXBoaWNzQ29udGV4dE1hYy5tbQkod29y
a2luZyBjb3B5KQpAQCAtMjYsMjAgKzI2LDExIEBACiAjaW1wb3J0ICJjb25maWcuaCIKICNpbXBv
cnQgIkdyYXBoaWNzQ29udGV4dC5oIgogCi0jaW1wb3J0ICJCbG9ja0V4Y2VwdGlvbnMuaCIKLSNp
bXBvcnQgIkZsb2F0UmVjdC5oIgotI2ltcG9ydCAiRm9udC5oIgotI2ltcG9ydCAiRm91bmRhdGlv
bkV4dHJhcy5oIgotI2ltcG9ydCAiSW50UG9pbnRBcnJheS5oIgotI2ltcG9ydCAiS1JlbmRlcmlu
Z0RldmljZVF1YXJ0ei5oIgotI2ltcG9ydCAiUGF0aC5oIgogI2ltcG9ydCAiV2ViQ29yZVN5c3Rl
bUludGVyZmFjZS5oIgogCi0vLyBGSVhNRTogQSBsb3QgbW9yZSBvZiB0aGlzIHNob3VsZCB1c2Ug
Q29yZUdyYXBoaWNzIGluc3RlYWQgb2YgQXBwS2l0LgotLy8gRklYTUU6IEEgbG90IG1vcmUgb2Yg
dGhpcyBzaG91bGQgbW92ZSBpbnRvIEdyYXBoaWNzQ29udGV4dENHLmNwcC4KKy8vIEZJWE1FOiBN
b3JlIG9mIHRoaXMgc2hvdWxkIHVzZSBDb3JlR3JhcGhpY3MgaW5zdGVhZCBvZiBBcHBLaXQuCisv
LyBGSVhNRTogTW9yZSBvZiB0aGlzIHNob3VsZCBtb3ZlIGludG8gR3JhcGhpY3NDb250ZXh0Q0cu
Y3BwLgogCi11c2luZyBuYW1lc3BhY2Ugc3RkOwotCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIC8v
IE5TQ29sb3IsIE5TQmV6aWVyUGF0aCwgYW5kIE5TR3JhcGhpY3NDb250ZXh0CkBAIC01NSwxMyAr
NDYsNiBAQAogICAgIEludFJlY3QgbV9mb2N1c1JpbmdDbGlwOyAvLyBXb3JrIGFyb3VuZCBDRyBi
dWcgaW4gZm9jdXMgcmluZyBjbGlwcGluZy4KIH07CiAKLS8vIEEgZmlsbFJlY3QgaGVscGVyIHRv
IHdvcmsgYXJvdW5kIHRoZSBmYWN0IHRoYXQgTlNSZWN0RmlsbCB1c2VzIGNvcHkgbW9kZSwgbm90
IHNvdXJjZSBvdmVyLgotc3RhdGljIGlubGluZSB2b2lkIGZpbGxSZWN0U291cmNlT3Zlcihjb25z
dCBGbG9hdFJlY3QmIHJlY3QsIGNvbnN0IENvbG9yJiBjb2wpCi17Ci0gICAgW25zQ29sb3IoY29s
KSBzZXRdOwotICAgIE5TUmVjdEZpbGxVc2luZ09wZXJhdGlvbihyZWN0LCBOU0NvbXBvc2l0ZVNv
dXJjZU92ZXIpOwotfQotCiBHcmFwaGljc0NvbnRleHRQbGF0Zm9ybVByaXZhdGU6OkdyYXBoaWNz
Q29udGV4dFBsYXRmb3JtUHJpdmF0ZShDR0NvbnRleHRSZWYgY2dDb250ZXh0KQogewogICAgIG1f
Y2dDb250ZXh0ID0gY2dDb250ZXh0OwpAQCAtODYsMjc0ICs3MCw2IEBACiAgICAgZGVsZXRlIG1f
ZGF0YTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6OnNhdmVQbGF0Zm9ybVN0YXRlKCkKLXsK
LSAgICBDR0NvbnRleHRTYXZlR1N0YXRlKHBsYXRmb3JtQ29udGV4dCgpKTsKLX0KLQotdm9pZCBH
cmFwaGljc0NvbnRleHQ6OnJlc3RvcmVQbGF0Zm9ybVN0YXRlKCkKLXsKLSAgICBDR0NvbnRleHRS
ZXN0b3JlR1N0YXRlKHBsYXRmb3JtQ29udGV4dCgpKTsKLX0KLQotLy8gRHJhd3MgYSBmaWxsZWQg
cmVjdGFuZ2xlIHdpdGggYSBzdHJva2VkIGJvcmRlci4KLXZvaWQgR3JhcGhpY3NDb250ZXh0Ojpk
cmF3UmVjdChjb25zdCBJbnRSZWN0JiByZWN0KQotewotICAgIGlmIChwYWludGluZ0Rpc2FibGVk
KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIC8vIEZJWE1FOiBUaGlzIGZ1bmN0aW9uIGN1cnJl
bnRseSB3b3JrcyBvbmx5IHdoZW4gdGhlIGN1cnJlbnQgY29udGV4dCBpcyB0aGUgY3VycmVudCBO
U0dyYXBoaWNzQ29udGV4dC4KLSAgICBBU1NFUlQocGxhdGZvcm1Db250ZXh0KCkgPT0gW1tOU0dy
YXBoaWNzQ29udGV4dCBjdXJyZW50Q29udGV4dF0gZ3JhcGhpY3NQb3J0XSk7Ci0KLSAgICBpZiAo
ZmlsbENvbG9yKCkgJiAweEZGMDAwMDAwKQotICAgICAgICBmaWxsUmVjdFNvdXJjZU92ZXIocmVj
dCwgZmlsbENvbG9yKCkpOwotCi0gICAgaWYgKHBlbigpLnN0eWxlKCkgIT0gUGVuOjpQZW46Ok5v
UGVuKSB7Ci0gICAgICAgIHNldENvbG9yRnJvbVBlbigpOwotICAgICAgICBOU0ZyYW1lUmVjdChy
ZWN0KTsKLSAgICB9Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpzZXRDb2xvckZyb21GaWxs
Q29sb3IoKQotewotICAgIC8vIEZJWE1FOiBUaGlzIGZ1bmN0aW9uIGN1cnJlbnRseSB3b3JrcyBv
bmx5IHdoZW4gdGhlIGN1cnJlbnQgY29udGV4dCBpcyB0aGUgY3VycmVudCBOU0dyYXBoaWNzQ29u
dGV4dC4KLSAgICBBU1NFUlQocGxhdGZvcm1Db250ZXh0KCkgPT0gW1tOU0dyYXBoaWNzQ29udGV4
dCBjdXJyZW50Q29udGV4dF0gZ3JhcGhpY3NQb3J0XSk7Ci0KLSAgICBbbnNDb2xvcihmaWxsQ29s
b3IoKSkgc2V0XTsKLX0KLSAgCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0Q29sb3JGcm9tUGVu
KCkKLXsKLSAgICAvLyBGSVhNRTogVGhpcyBmdW5jdGlvbiBjdXJyZW50bHkgd29ya3Mgb25seSB3
aGVuIHRoZSBjdXJyZW50IGNvbnRleHQgaXMgdGhlIGN1cnJlbnQgTlNHcmFwaGljc0NvbnRleHQu
Ci0gICAgQVNTRVJUKHBsYXRmb3JtQ29udGV4dCgpID09IFtbTlNHcmFwaGljc0NvbnRleHQgY3Vy
cmVudENvbnRleHRdIGdyYXBoaWNzUG9ydF0pOwotCi0gICAgW25zQ29sb3IocGVuKCkuY29sb3Io
KSkgc2V0XTsKLX0KLSAgCi0vLyBUaGlzIGlzIG9ubHkgdXNlZCB0byBkcmF3IGJvcmRlcnMuCi12
b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd0xpbmUoY29uc3QgSW50UG9pbnQmIHBvaW50MSwgY29u
c3QgSW50UG9pbnQmIHBvaW50MikKLXsKLSAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQotICAg
ICAgICByZXR1cm47Ci0KLSAgICAvLyBGSVhNRTogVGhpcyBmdW5jdGlvbiBjdXJyZW50bHkgd29y
a3Mgb25seSB3aGVuIHRoZSBjdXJyZW50IGNvbnRleHQgaXMgdGhlIGN1cnJlbnQgTlNHcmFwaGlj
c0NvbnRleHQuCi0gICAgQVNTRVJUKHBsYXRmb3JtQ29udGV4dCgpID09IFtbTlNHcmFwaGljc0Nv
bnRleHQgY3VycmVudENvbnRleHRdIGdyYXBoaWNzUG9ydF0pOwotCi0gICAgUGVuOjpQZW5TdHls
ZSBwZW5TdHlsZSA9IHBlbigpLnN0eWxlKCk7Ci0gICAgaWYgKHBlblN0eWxlID09IFBlbjo6UGVu
OjpOb1BlbikKLSAgICAgICAgcmV0dXJuOwotICAgIGZsb2F0IHdpZHRoID0gcGVuKCkud2lkdGgo
KTsKLSAgICBpZiAod2lkdGggPCAxKQotICAgICAgICB3aWR0aCA9IDE7Ci0KLSAgICBOU1BvaW50
IHAxID0gcG9pbnQxOwotICAgIE5TUG9pbnQgcDIgPSBwb2ludDI7Ci0gICAgYm9vbCBpc1ZlcnRp
Y2FsTGluZSA9IChwMS54ID09IHAyLngpOwotICAgIAotICAgIC8vIEZvciBvZGQgd2lkdGhzLCB3
ZSBhZGQgaW4gMC41IHRvIHRoZSBhcHByb3ByaWF0ZSB4L3kgc28gdGhhdCB0aGUgZmxvYXQgYXJp
dGhtZXRpYwotICAgIC8vIHdvcmtzIG91dC4gIEZvciBleGFtcGxlLCB3aXRoIGEgYm9yZGVyIHdp
ZHRoIG9mIDMsIEtIVE1MIHdpbGwgcGFzcyB1cyAoeTEreTIpLzIsIGUuZy4sCi0gICAgLy8gKDUw
KzUzKS8yID0gMTAzLzIgPSA1MSB3aGVuIHdlIHdhbnQgNTEuNS4gIEl0IGlzIGFsd2F5cyB0cnVl
IHRoYXQgYW4gZXZlbiB3aWR0aCBnYXZlCi0gICAgLy8gdXMgYSBwZXJmZWN0IHBvc2l0aW9uLCBi
dXQgYW4gb2RkIHdpZHRoIGdhdmUgdXMgYSBwb3NpdGlvbiB0aGF0IGlzIG9mZiBieSBleGFjdGx5
IDAuNS4KLSAgICBpZiAocGVuU3R5bGUgPT0gUGVuOjpEb3RMaW5lIHx8IHBlblN0eWxlID09IFBl
bjo6RGFzaExpbmUpIHsKLSAgICAgICAgaWYgKGlzVmVydGljYWxMaW5lKSB7Ci0gICAgICAgICAg
ICBwMS55ICs9IHdpZHRoOwotICAgICAgICAgICAgcDIueSAtPSB3aWR0aDsKLSAgICAgICAgfSBl
bHNlIHsKLSAgICAgICAgICAgIHAxLnggKz0gd2lkdGg7Ci0gICAgICAgICAgICBwMi54IC09IHdp
ZHRoOwotICAgICAgICB9Ci0gICAgfQotICAgIAotICAgIGlmICgoKGludCl3aWR0aCklMikgewot
ICAgICAgICBpZiAoaXNWZXJ0aWNhbExpbmUpIHsKLSAgICAgICAgICAgIC8vIFdlJ3JlIGEgdmVy
dGljYWwgbGluZS4gIEFkanVzdCBvdXIgeC4KLSAgICAgICAgICAgIHAxLnggKz0gMC41OwotICAg
ICAgICAgICAgcDIueCArPSAwLjU7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAvLyBX
ZSdyZSBhIGhvcml6b250YWwgbGluZS4gQWRqdXN0IG91ciB5LgotICAgICAgICAgICAgcDEueSAr
PSAwLjU7Ci0gICAgICAgICAgICBwMi55ICs9IDAuNTsKLSAgICAgICAgfQotICAgIH0KLSAgICAK
LSAgICBOU0JlemllclBhdGggKnBhdGggPSBbW05TQmV6aWVyUGF0aCBhbGxvY10gaW5pdF07Ci0g
ICAgW3BhdGggc2V0TGluZVdpZHRoOndpZHRoXTsKLQotICAgIGludCBwYXRXaWR0aCA9IDA7Ci0g
ICAgc3dpdGNoIChwZW5TdHlsZSkgewotICAgIGNhc2UgUGVuOjpOb1BlbjoKLSAgICBjYXNlIFBl
bjo6U29saWRMaW5lOgotICAgICAgICBicmVhazsKLSAgICBjYXNlIFBlbjo6RG90TGluZToKLSAg
ICAgICAgcGF0V2lkdGggPSAoaW50KXdpZHRoOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIFBl
bjo6RGFzaExpbmU6Ci0gICAgICAgIHBhdFdpZHRoID0gMyooaW50KXdpZHRoOwotICAgICAgICBi
cmVhazsKLSAgICB9Ci0KLSAgICBDR0NvbnRleHRTYXZlR1N0YXRlKHBsYXRmb3JtQ29udGV4dCgp
KTsKLQotICAgIHNldENvbG9yRnJvbVBlbigpOwotCi0gICAgQ0dDb250ZXh0U2V0U2hvdWxkQW50
aWFsaWFzKHBsYXRmb3JtQ29udGV4dCgpLCBmYWxzZSk7Ci0gICAgCi0gICAgaWYgKHBhdFdpZHRo
KSB7Ci0gICAgICAgIC8vIERvIGEgcmVjdCBmaWxsIG9mIG91ciBlbmRwb2ludHMuICBUaGlzIGVu
c3VyZXMgd2UgYWx3YXlzIGhhdmUgdGhlCi0gICAgICAgIC8vIGFwcGVhcmFuY2Ugb2YgYmVpbmcg
YSBib3JkZXIuICBXZSB0aGVuIGRyYXcgdGhlIGFjdHVhbCBkb3R0ZWQvZGFzaGVkIGxpbmUuCi0g
ICAgICAgIGNvbnN0IENvbG9yJiBwZW5Db2xvciA9IHBlbigpLmNvbG9yKCk7Ci0gICAgICAgIGlm
IChpc1ZlcnRpY2FsTGluZSkgewotICAgICAgICAgICAgZmlsbFJlY3RTb3VyY2VPdmVyKEZsb2F0
UmVjdChwMS54LXdpZHRoLzIsIHAxLnktd2lkdGgsIHdpZHRoLCB3aWR0aCksIHBlbkNvbG9yKTsK
LSAgICAgICAgICAgIGZpbGxSZWN0U291cmNlT3ZlcihGbG9hdFJlY3QocDIueC13aWR0aC8yLCBw
Mi55LCB3aWR0aCwgd2lkdGgpLCBwZW5Db2xvcik7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAg
ICAgICBmaWxsUmVjdFNvdXJjZU92ZXIoRmxvYXRSZWN0KHAxLngtd2lkdGgsIHAxLnktd2lkdGgv
Miwgd2lkdGgsIHdpZHRoKSwgcGVuQ29sb3IpOwotICAgICAgICAgICAgZmlsbFJlY3RTb3VyY2VP
dmVyKEZsb2F0UmVjdChwMi54LCBwMi55LXdpZHRoLzIsIHdpZHRoLCB3aWR0aCksIHBlbkNvbG9y
KTsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgLy8gRXhhbXBsZTogODAgcGl4ZWxzIHdp
dGggYSB3aWR0aCBvZiAzMCBwaXhlbHMuCi0gICAgICAgIC8vIFJlbWFpbmRlciBpcyAyMC4gIFRo
ZSBtYXhpbXVtIHBpeGVscyBvZiBsaW5lIHdlIGNvdWxkIHBhaW50Ci0gICAgICAgIC8vIHdpbGwg
YmUgNTAgcGl4ZWxzLgotICAgICAgICBpbnQgZGlzdGFuY2UgPSAoaXNWZXJ0aWNhbExpbmUgPyAo
cG9pbnQyLnkoKSAtIHBvaW50MS55KCkpIDogKHBvaW50Mi54KCkgLSBwb2ludDEueCgpKSkgLSAy
KihpbnQpd2lkdGg7Ci0gICAgICAgIGludCByZW1haW5kZXIgPSBkaXN0YW5jZSVwYXRXaWR0aDsK
LSAgICAgICAgaW50IGNvdmVyYWdlID0gZGlzdGFuY2UtcmVtYWluZGVyOwotICAgICAgICBpbnQg
bnVtU2VnbWVudHMgPSBjb3ZlcmFnZS9wYXRXaWR0aDsKLQotICAgICAgICBmbG9hdCBwYXR0ZXJu
T2Zmc2V0ID0gMDsKLSAgICAgICAgLy8gU3BlY2lhbCBjYXNlIDFweCBkb3R0ZWQgYm9yZGVycyBm
b3Igc3BlZWQuCi0gICAgICAgIGlmIChwYXRXaWR0aCA9PSAxKQotICAgICAgICAgICAgcGF0dGVy
bk9mZnNldCA9IDEuMDsKLSAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICBib29sIGV2ZW5OdW1i
ZXJPZlNlZ21lbnRzID0gbnVtU2VnbWVudHMlMiA9PSAwOwotICAgICAgICAgICAgaWYgKHJlbWFp
bmRlcikKLSAgICAgICAgICAgICAgICBldmVuTnVtYmVyT2ZTZWdtZW50cyA9ICFldmVuTnVtYmVy
T2ZTZWdtZW50czsKLSAgICAgICAgICAgIGlmIChldmVuTnVtYmVyT2ZTZWdtZW50cykgewotICAg
ICAgICAgICAgICAgIGlmIChyZW1haW5kZXIpIHsKLSAgICAgICAgICAgICAgICAgICAgcGF0dGVy
bk9mZnNldCArPSBwYXRXaWR0aCAtIHJlbWFpbmRlcjsKLSAgICAgICAgICAgICAgICAgICAgcGF0
dGVybk9mZnNldCArPSByZW1haW5kZXIvMjsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAg
ICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAgICBwYXR0ZXJuT2Zmc2V0ID0gcGF0V2lkdGgv
MjsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGVsc2UgaWYgKCFldmVuTnVtYmVyT2ZTZWdt
ZW50cykgewotICAgICAgICAgICAgICAgIGlmIChyZW1haW5kZXIpCi0gICAgICAgICAgICAgICAg
ICAgIHBhdHRlcm5PZmZzZXQgPSAocGF0V2lkdGggLSByZW1haW5kZXIpLzI7Ci0gICAgICAgICAg
ICB9Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIGNvbnN0IENHRmxvYXQgZG90dGVkTGlu
ZVsyXSA9IHsgcGF0V2lkdGgsIHBhdFdpZHRoIH07Ci0gICAgICAgIFtwYXRoIHNldExpbmVEYXNo
OmRvdHRlZExpbmUgY291bnQ6MiBwaGFzZTpwYXR0ZXJuT2Zmc2V0XTsKLSAgICB9Ci0gICAgCi0g
ICAgW3BhdGggbW92ZVRvUG9pbnQ6cDFdOwotICAgIFtwYXRoIGxpbmVUb1BvaW50OnAyXTsKLQot
ICAgIFtwYXRoIHN0cm9rZV07Ci0gICAgCi0gICAgW3BhdGggcmVsZWFzZV07Ci0KLSAgICBDR0Nv
bnRleHRSZXN0b3JlR1N0YXRlKHBsYXRmb3JtQ29udGV4dCgpKTsKLX0KLQotCi0vLyBUaGlzIG1l
dGhvZCBpcyBvbmx5IHVzZWQgdG8gZHJhdyB0aGUgbGl0dGxlIGNpcmNsZXMgdXNlZCBpbiBsaXN0
cy4KLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3RWxsaXBzZShjb25zdCBJbnRSZWN0JiByZWN0
KQotewotICAgIC8vIEZJWE1FOiBDRyBhZGRlZCBDR0NvbnRleHRBZGRFbGxpcHNlaW5SZWN0IGlu
IFRpZ2VyLCBzbyB3ZSBzaG91bGQgYmUgYWJsZSB0byBxdWl0ZSBlYXNpbHkgZHJhdyBhbiBlbGxp
cHNlLgotICAgIC8vIFRoaXMgY29kZSBjYW4gb25seSBoYW5kbGUgY2lyY2xlcywgbm90IGVsbGlw
c2VzLiBCdXQga2h0bWwgb25seQotICAgIC8vIHVzZXMgaXQgZm9yIGNpcmNsZXMuCi0gICAgQVNT
RVJUKHJlY3Qud2lkdGgoKSA9PSByZWN0LmhlaWdodCgpKTsKLQotICAgIGlmIChwYWludGluZ0Rp
c2FibGVkKCkpCi0gICAgICAgIHJldHVybjsKLSAgICAgICAgCi0gICAgQ0dDb250ZXh0UmVmIGNv
bnRleHQgPSBwbGF0Zm9ybUNvbnRleHQoKTsKLSAgICBDR0NvbnRleHRCZWdpblBhdGgoY29udGV4
dCk7Ci0gICAgZmxvYXQgciA9IChmbG9hdClyZWN0LndpZHRoKCkgLyAyOwotICAgIENHQ29udGV4
dEFkZEFyYyhjb250ZXh0LCByZWN0LngoKSArIHIsIHJlY3QueSgpICsgciwgciwgMCwgMipNX1BJ
LCB0cnVlKTsKLSAgICBDR0NvbnRleHRDbG9zZVBhdGgoY29udGV4dCk7Ci0KLSAgICBpZiAoZmls
bENvbG9yKCkgJiAweEZGMDAwMDAwKSB7Ci0gICAgICAgIHNldENvbG9yRnJvbUZpbGxDb2xvcigp
OwotICAgICAgICBpZiAocGVuKCkuc3R5bGUoKSAhPSBQZW46Ok5vUGVuKSB7Ci0gICAgICAgICAg
ICAvLyBzdHJva2UgYW5kIGZpbGwKLSAgICAgICAgICAgIHNldENvbG9yRnJvbVBlbigpOwotICAg
ICAgICAgICAgdW5zaWduZWQgcGVuV2lkdGggPSBwZW4oKS53aWR0aCgpOwotICAgICAgICAgICAg
aWYgKHBlbldpZHRoID09IDApIAotICAgICAgICAgICAgICAgIHBlbldpZHRoKys7Ci0gICAgICAg
ICAgICBDR0NvbnRleHRTZXRMaW5lV2lkdGgoY29udGV4dCwgcGVuV2lkdGgpOwotICAgICAgICAg
ICAgQ0dDb250ZXh0RHJhd1BhdGgoY29udGV4dCwga0NHUGF0aEZpbGxTdHJva2UpOwotICAgICAg
ICB9IGVsc2UKLSAgICAgICAgICAgIENHQ29udGV4dEZpbGxQYXRoKGNvbnRleHQpOwotICAgIH0K
LSAgICBpZiAocGVuKCkuc3R5bGUoKSAhPSBQZW46Ok5vUGVuKSB7Ci0gICAgICAgIHNldENvbG9y
RnJvbVBlbigpOwotICAgICAgICB1bnNpZ25lZCBwZW5XaWR0aCA9IHBlbigpLndpZHRoKCk7Ci0g
ICAgICAgIGlmIChwZW5XaWR0aCA9PSAwKSAKLSAgICAgICAgICAgIHBlbldpZHRoKys7Ci0gICAg
ICAgIENHQ29udGV4dFNldExpbmVXaWR0aChjb250ZXh0LCBwZW5XaWR0aCk7Ci0gICAgICAgIENH
Q29udGV4dFN0cm9rZVBhdGgoY29udGV4dCk7Ci0gICAgfQotfQotCi0KLXZvaWQgR3JhcGhpY3ND
b250ZXh0OjpkcmF3QXJjKGludCB4LCBpbnQgeSwgaW50IHcsIGludCBoLCBpbnQgYSwgaW50IGFs
ZW4pCi17IAotICAgIC8vIE9ubHkgc3VwcG9ydHMgYXJjIG9uIGNpcmNsZXMuICBUaGF0J3MgYWxs
IGtodG1sIG5lZWRzLgotICAgIEFTU0VSVCh3ID09IGgpOwotCi0gICAgaWYgKHBhaW50aW5nRGlz
YWJsZWQoKSkKLSAgICAgICAgcmV0dXJuOwotICAgIAotICAgIGlmIChwZW4oKS5zdHlsZSgpICE9
IFBlbjo6Tm9QZW4pIHsKLSAgICAgICAgQ0dDb250ZXh0UmVmIGNvbnRleHQgPSBwbGF0Zm9ybUNv
bnRleHQoKTsKLSAgICAgICAgQ0dDb250ZXh0QmVnaW5QYXRoKGNvbnRleHQpOwotICAgICAgICAK
LSAgICAgICAgZmxvYXQgciA9IChmbG9hdCl3IC8gMjsKLSAgICAgICAgZmxvYXQgZmEgPSAoZmxv
YXQpYSAvIDE2OwotICAgICAgICBmbG9hdCBmYWxlbiA9ICBmYSArIChmbG9hdClhbGVuIC8gMTY7
Ci0gICAgICAgIENHQ29udGV4dEFkZEFyYyhjb250ZXh0LCB4ICsgciwgeSArIHIsIHIsIC1mYSAq
IE1fUEkvMTgwLCAtZmFsZW4gKiBNX1BJLzE4MCwgdHJ1ZSk7Ci0gICAgICAgIAotICAgICAgICBz
ZXRDb2xvckZyb21QZW4oKTsKLSAgICAgICAgQ0dDb250ZXh0U2V0TGluZVdpZHRoKGNvbnRleHQs
IHBlbigpLndpZHRoKCkpOwotICAgICAgICBDR0NvbnRleHRTdHJva2VQYXRoKGNvbnRleHQpOwot
ICAgIH0KLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdDb252ZXhQb2x5Z29uKGNvbnN0
IEludFBvaW50QXJyYXkmIHBvaW50cykKLXsKLSAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQot
ICAgICAgICByZXR1cm47Ci0KLSAgICBpbnQgbnBvaW50cyA9IHBvaW50cy5zaXplKCk7Ci0gICAg
aWYgKG5wb2ludHMgPD0gMSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgQ0dDb250ZXh0UmVmIGNv
bnRleHQgPSBwbGF0Zm9ybUNvbnRleHQoKTsKLQotICAgIENHQ29udGV4dFNhdmVHU3RhdGUoY29u
dGV4dCk7Ci0KLSAgICBDR0NvbnRleHRTZXRTaG91bGRBbnRpYWxpYXMoY29udGV4dCwgZmFsc2Up
OwotICAgIAotICAgIENHQ29udGV4dEJlZ2luUGF0aChjb250ZXh0KTsKLSAgICBDR0NvbnRleHRN
b3ZlVG9Qb2ludChjb250ZXh0LCBwb2ludHNbMF0ueCgpLCBwb2ludHNbMF0ueSgpKTsKLSAgICBm
b3IgKGludCBpID0gMTsgaSA8IG5wb2ludHM7IGkrKykKLSAgICAgICAgQ0dDb250ZXh0QWRkTGlu
ZVRvUG9pbnQoY29udGV4dCwgcG9pbnRzW2ldLngoKSwgcG9pbnRzW2ldLnkoKSk7Ci0gICAgQ0dD
b250ZXh0Q2xvc2VQYXRoKGNvbnRleHQpOwotCi0gICAgaWYgKGZpbGxDb2xvcigpICYgMHhGRjAw
MDAwMCkgewotICAgICAgICBzZXRDb2xvckZyb21GaWxsQ29sb3IoKTsKLSAgICAgICAgQ0dDb250
ZXh0RU9GaWxsUGF0aChjb250ZXh0KTsKLSAgICB9Ci0KLSAgICBpZiAocGVuKCkuc3R5bGUoKSAh
PSBQZW46Ok5vUGVuKSB7Ci0gICAgICAgIHNldENvbG9yRnJvbVBlbigpOwotICAgICAgICBDR0Nv
bnRleHRTZXRMaW5lV2lkdGgoY29udGV4dCwgcGVuKCkud2lkdGgoKSk7Ci0gICAgICAgIENHQ29u
dGV4dFN0cm9rZVBhdGgoY29udGV4dCk7Ci0gICAgfQotCi0gICAgQ0dDb250ZXh0UmVzdG9yZUdT
dGF0ZShjb250ZXh0KTsKLX0KLQogc3RhdGljIGludCBnZXRCbGVuZGVkQ29sb3JDb21wb25lbnQo
aW50IGMsIGludCBhKQogewogICAgIC8vIFdlIHVzZSB3aGl0ZS4KQEAgLTM4Myw4MCArOTksNiBA
QAogICAgIHJldHVybiBjb2w7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpmaWxsUmVjdChj
b25zdCBJbnRSZWN0JiByZWN0LCBjb25zdCBDb2xvciYgY29sb3IpCi17Ci0gICAgaWYgKHBhaW50
aW5nRGlzYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgLy8gRklYTUU6IFRoaXMgZnVu
Y3Rpb24gY3VycmVudGx5IHdvcmtzIG9ubHkgd2hlbiB0aGUgY3VycmVudCBjb250ZXh0IGlzIHRo
ZSBjdXJyZW50IE5TR3JhcGhpY3NDb250ZXh0LgotICAgIEFTU0VSVChwbGF0Zm9ybUNvbnRleHQo
KSA9PSBbW05TR3JhcGhpY3NDb250ZXh0IGN1cnJlbnRDb250ZXh0XSBncmFwaGljc1BvcnRdKTsK
LQotICAgIGlmIChjb2xvci5hbHBoYSgpKQotICAgICAgICBmaWxsUmVjdFNvdXJjZU92ZXIocmVj
dCwgY29sb3IucmdiKCkpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6YWRkQ2xpcChjb25z
dCBJbnRSZWN0JiByZWN0KQotewotICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCi0gICAgICAg
IHJldHVybjsKLQotICAgIENHQ29udGV4dENsaXBUb1JlY3QocGxhdGZvcm1Db250ZXh0KCksIHJl
Y3QpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6YWRkUm91bmRlZFJlY3RDbGlwKGNvbnN0
IEludFJlY3QmIHJlY3QsIGNvbnN0IEludFNpemUmIHRvcExlZnQsIGNvbnN0IEludFNpemUmIHRv
cFJpZ2h0LAotICAgIGNvbnN0IEludFNpemUmIGJvdHRvbUxlZnQsIGNvbnN0IEludFNpemUmIGJv
dHRvbVJpZ2h0KQotewotICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCi0gICAgICAgIHJldHVy
bjsKLQotICAgIC8vIE5lZWQgc3VmZmljaWVudCB3aWR0aCBhbmQgaGVpZ2h0IHRvIGNvbnRhaW4g
dGhlc2UgY3VydmVzLiAgU2FuaXR5IGNoZWNrIG91ciB0b3AvYm90dG9tCi0gICAgLy8gdmFsdWVz
IGFuZCBvdXIgd2lkdGgvaGVpZ2h0IHZhbHVlcyB0byBtYWtlIHN1cmUgdGhlIGN1cnZlcyBjYW4g
YWxsIGZpdC4KLSAgICBpbnQgcmVxdWlyZWRXaWR0aCA9IG1heCh0b3BMZWZ0LndpZHRoKCkgKyB0
b3BSaWdodC53aWR0aCgpLCBib3R0b21MZWZ0LndpZHRoKCkgKyBib3R0b21SaWdodC53aWR0aCgp
KTsKLSAgICBpZiAocmVxdWlyZWRXaWR0aCA+IHJlY3Qud2lkdGgoKSkKLSAgICAgICAgcmV0dXJu
OwotICAgIGludCByZXF1aXJlZEhlaWdodCA9IG1heCh0b3BMZWZ0LmhlaWdodCgpICsgYm90dG9t
TGVmdC5oZWlnaHQoKSwgdG9wUmlnaHQuaGVpZ2h0KCkgKyBib3R0b21SaWdodC5oZWlnaHQoKSk7
Ci0gICAgaWYgKHJlcXVpcmVkSGVpZ2h0ID4gcmVjdC5oZWlnaHQoKSkKLSAgICAgICAgcmV0dXJu
OwotIAotICAgIC8vIENsaXAgdG8gb3VyIHJlY3QuCi0gICAgYWRkQ2xpcChyZWN0KTsKLQotICAg
IC8vIE9LLCB0aGUgY3VydmVzIGNhbiBmaXQuCi0gICAgQ0dDb250ZXh0UmVmIGNvbnRleHQgPSBw
bGF0Zm9ybUNvbnRleHQoKTsKLSAgICAKLSAgICAvLyBBZGQgdGhlIGZvdXIgZWxsaXBzZXMgdG8g
dGhlIHBhdGguICBUZWNobmljYWxseSB0aGlzIHJlYWxseSBpc24ndCBnb29kIGVub3VnaCwgc2lu
Y2Ugd2UgY291bGQgZW5kIHVwCi0gICAgLy8gbm90IGNsaXBwaW5nIHRoZSBvdGhlciAzLzQgb2Yg
dGhlIGVsbGlwc2Ugd2UgZG9uJ3QgY2FyZSBhYm91dC4gIFdlJ3JlIHJlbHlpbmcgb24gdGhlIGZh
Y3QgdGhhdCBmb3IKLSAgICAvLyBub3JtYWwgdXNlIGNhc2VzIHRoZXNlIGVsbGlwc2VzIHdvbid0
IG92ZXJsYXAgb25lIGFub3RoZXIgKG9yIHdoZW4gdGhleSBkbyB0aGUgY3VydmF0dXJlIG9mIG9u
ZSB3aWxsCi0gICAgLy8gYmUgc3Vic3VtZWQgYnkgdGhlIG90aGVyKS4KLSAgICBDR0NvbnRleHRB
ZGRFbGxpcHNlSW5SZWN0KGNvbnRleHQsIENHUmVjdE1ha2UocmVjdC54KCksIHJlY3QueSgpLCB0
b3BMZWZ0LndpZHRoKCkgKiAyLCB0b3BMZWZ0LmhlaWdodCgpICogMikpOwotICAgIENHQ29udGV4
dEFkZEVsbGlwc2VJblJlY3QoY29udGV4dCwgQ0dSZWN0TWFrZShyZWN0LnJpZ2h0KCkgLSB0b3BS
aWdodC53aWR0aCgpICogMiwgcmVjdC55KCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHRvcFJpZ2h0LndpZHRoKCkgKiAyLCB0b3BSaWdodC5oZWln
aHQoKSAqIDIpKTsKLSAgICBDR0NvbnRleHRBZGRFbGxpcHNlSW5SZWN0KGNvbnRleHQsIENHUmVj
dE1ha2UocmVjdC54KCksIHJlY3QuYm90dG9tKCkgLSBib3R0b21MZWZ0LmhlaWdodCgpICogMiwK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm90dG9t
TGVmdC53aWR0aCgpICogMiwgYm90dG9tTGVmdC5oZWlnaHQoKSAqIDIpKTsKLSAgICBDR0NvbnRl
eHRBZGRFbGxpcHNlSW5SZWN0KGNvbnRleHQsIENHUmVjdE1ha2UocmVjdC5yaWdodCgpIC0gYm90
dG9tUmlnaHQud2lkdGgoKSAqIDIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHJlY3QuYm90dG9tKCkgLSBib3R0b21SaWdodC5oZWlnaHQoKSAqIDIs
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvdHRv
bVJpZ2h0LndpZHRoKCkgKiAyLCBib3R0b21SaWdodC5oZWlnaHQoKSAqIDIpKTsKLSAgICAKLSAg
ICAvLyBOb3cgYWRkIGZpdmUgcmVjdHMgKG9uZSBmb3IgZWFjaCBlZGdlIHJlY3QgaW4gYmV0d2Vl
biB0aGUgcm91bmRlZCBjb3JuZXJzIGFuZCBvbmUgZm9yIHRoZSBpbnRlcmlvcikuCi0gICAgQ0dD
b250ZXh0QWRkUmVjdChjb250ZXh0LCBDR1JlY3RNYWtlKHJlY3QueCgpICsgdG9wTGVmdC53aWR0
aCgpLCByZWN0LnkoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
cmVjdC53aWR0aCgpIC0gdG9wTGVmdC53aWR0aCgpIC0gdG9wUmlnaHQud2lkdGgoKSwKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF4KHRvcExlZnQuaGVpZ2h0KCks
IHRvcFJpZ2h0LmhlaWdodCgpKSkpOwotICAgIENHQ29udGV4dEFkZFJlY3QoY29udGV4dCwgQ0dS
ZWN0TWFrZShyZWN0LngoKSArIGJvdHRvbUxlZnQud2lkdGgoKSwgCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHJlY3QuYm90dG9tKCkgLSBtYXgoYm90dG9tTGVmdC5o
ZWlnaHQoKSwgYm90dG9tUmlnaHQuaGVpZ2h0KCkpLAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICByZWN0LndpZHRoKCkgLSBib3R0b21MZWZ0LndpZHRoKCkgLSBib3R0
b21SaWdodC53aWR0aCgpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBtYXgoYm90dG9tTGVmdC5oZWlnaHQoKSwgYm90dG9tUmlnaHQuaGVpZ2h0KCkpKSk7Ci0gICAg
Q0dDb250ZXh0QWRkUmVjdChjb250ZXh0LCBDR1JlY3RNYWtlKHJlY3QueCgpLCByZWN0LnkoKSAr
IHRvcExlZnQuaGVpZ2h0KCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIG1heCh0b3BMZWZ0LndpZHRoKCksIGJvdHRvbUxlZnQud2lkdGgoKSksIHJlY3QuaGVpZ2h0
KCkgLSB0b3BMZWZ0LmhlaWdodCgpIC0gYm90dG9tTGVmdC5oZWlnaHQoKSkpOwotICAgIENHQ29u
dGV4dEFkZFJlY3QoY29udGV4dCwgQ0dSZWN0TWFrZShyZWN0LnJpZ2h0KCkgLSBtYXgodG9wUmln
aHQud2lkdGgoKSwgYm90dG9tUmlnaHQud2lkdGgoKSksCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHJlY3QueSgpICsgdG9wUmlnaHQuaGVpZ2h0KCksCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1heCh0b3BSaWdodC53aWR0aCgpLCBi
b3R0b21SaWdodC53aWR0aCgpKSwgcmVjdC5oZWlnaHQoKSAtIHRvcFJpZ2h0LmhlaWdodCgpIC0g
Ym90dG9tUmlnaHQuaGVpZ2h0KCkpKTsKLSAgICBDR0NvbnRleHRBZGRSZWN0KGNvbnRleHQsIENH
UmVjdE1ha2UocmVjdC54KCkgKyBtYXgodG9wTGVmdC53aWR0aCgpLCBib3R0b21MZWZ0LndpZHRo
KCkpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWN0LnkoKSAr
IG1heCh0b3BMZWZ0LmhlaWdodCgpLCB0b3BSaWdodC5oZWlnaHQoKSksCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlY3Qud2lkdGgoKSAtIG1heCh0b3BMZWZ0Lndp
ZHRoKCksIGJvdHRvbUxlZnQud2lkdGgoKSkgLSBtYXgodG9wUmlnaHQud2lkdGgoKSwgYm90dG9t
UmlnaHQud2lkdGgoKSksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHJlY3QuaGVpZ2h0KCkgLSBtYXgodG9wTGVmdC5oZWlnaHQoKSwgdG9wUmlnaHQuaGVpZ2h0KCkp
IC0gbWF4KGJvdHRvbUxlZnQuaGVpZ2h0KCksIGJvdHRvbVJpZ2h0LmhlaWdodCgpKSkpOwotICAg
IENHQ29udGV4dENsaXAoY29udGV4dCk7Ci19Ci0KIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpzZXRG
b2N1c1JpbmdDbGlwKGNvbnN0IEludFJlY3QmIHIpCiB7CiAgICAgLy8gVGhpcyBtZXRob2Qgb25s
eSBleGlzdHMgdG8gd29yayBhcm91bmQgYnVncyBpbiBNYWMgZm9jdXMgcmluZyBjbGlwcGluZy4K
QEAgLTQ2OSw1OSArMTExLDYgQEAKICAgICBtX2RhdGEtPm1fZm9jdXNSaW5nQ2xpcCA9IEludFJl
Y3QoKTsKIH0KIAotI2lmIFNWR19TVVBQT1JUCi1LUmVuZGVyaW5nRGV2aWNlQ29udGV4dCogR3Jh
cGhpY3NDb250ZXh0OjpjcmVhdGVSZW5kZXJpbmdEZXZpY2VDb250ZXh0KCkKLXsKLSAgICByZXR1
cm4gbmV3IEtSZW5kZXJpbmdEZXZpY2VDb250ZXh0UXVhcnR6KHBsYXRmb3JtQ29udGV4dCgpKTsK
LX0KLSNlbmRpZgotCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6YmVnaW5UcmFuc3BhcmVuY3lMYXll
cihmbG9hdCBvcGFjaXR5KQotewotICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCi0gICAgICAg
IHJldHVybjsKLSAgICBDR0NvbnRleHRSZWYgY29udGV4dCA9IHBsYXRmb3JtQ29udGV4dCgpOwot
ICAgIENHQ29udGV4dFNhdmVHU3RhdGUoY29udGV4dCk7Ci0gICAgQ0dDb250ZXh0U2V0QWxwaGEo
Y29udGV4dCwgb3BhY2l0eSk7Ci0gICAgQ0dDb250ZXh0QmVnaW5UcmFuc3BhcmVuY3lMYXllcihj
b250ZXh0LCAwKTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQ6OmVuZFRyYW5zcGFyZW5jeUxh
eWVyKCkKLXsKLSAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQotICAgICAgICByZXR1cm47Ci0g
ICAgQ0dDb250ZXh0UmVmIGNvbnRleHQgPSBwbGF0Zm9ybUNvbnRleHQoKTsKLSAgICBDR0NvbnRl
eHRFbmRUcmFuc3BhcmVuY3lMYXllcihjb250ZXh0KTsKLSAgICBDR0NvbnRleHRSZXN0b3JlR1N0
YXRlKGNvbnRleHQpOwotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0U2hhZG93KGNvbnN0
IEludFNpemUmIHNpemUsIGludCBibHVyLCBjb25zdCBDb2xvciYgY29sb3IpCi17Ci0gICAgaWYg
KHBhaW50aW5nRGlzYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuOwotICAgIC8vIENoZWNrIGZvciBh
biBpbnZhbGlkIGNvbG9yLCBhcyB0aGlzIG1lYW5zIHRoYXQgdGhlIGNvbG9yIHdhcyBub3Qgc2V0
IGZvciB0aGUgc2hhZG93Ci0gICAgLy8gYW5kIHdlIHNob3VsZCB0aGVyZWZvcmUganVzdCB1c2Ug
dGhlIGRlZmF1bHQgc2hhZG93IGNvbG9yLgotICAgIENHQ29udGV4dFJlZiBjb250ZXh0ID0gcGxh
dGZvcm1Db250ZXh0KCk7Ci0gICAgaWYgKCFjb2xvci5pc1ZhbGlkKCkpCi0gICAgICAgIENHQ29u
dGV4dFNldFNoYWRvdyhjb250ZXh0LCBDR1NpemVNYWtlKHNpemUud2lkdGgoKSwgLXNpemUuaGVp
Z2h0KCkpLCBibHVyKTsgLy8geSBpcyBmbGlwcGVkLgotICAgIGVsc2UgewotICAgICAgICBDR0Nv
bG9yUmVmIGNvbG9yQ0cgPSBjZ0NvbG9yKGNvbG9yKTsKLSAgICAgICAgQ0dDb250ZXh0U2V0U2hh
ZG93V2l0aENvbG9yKGNvbnRleHQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBDR1NpemVNYWtlKHNpemUud2lkdGgoKSwgLXNpemUuaGVpZ2h0KCkpLCAvLyB5IGlzIGZsaXBw
ZWQuCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBibHVyLCAKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbG9yQ0cpOwotICAgICAgICBDR0NvbG9yUmVs
ZWFzZShjb2xvckNHKTsKLSAgICB9Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpjbGVhclNo
YWRvdygpCi17Ci0gICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuOwot
ICAgIENHQ29udGV4dFJlZiBjb250ZXh0ID0gcGxhdGZvcm1Db250ZXh0KCk7Ci0gICAgQ0dDb250
ZXh0U2V0U2hhZG93V2l0aENvbG9yKGNvbnRleHQsIENHU2l6ZVplcm8sIDAsIE5VTEwpOwotfQot
CiB2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd0ZvY3VzUmluZyhjb25zdCBDb2xvciYgY29sb3Ip
CiB7CiAgICAgaWYgKHBhaW50aW5nRGlzYWJsZWQoKSkKQEAgLTU3NSw3NCArMTY0LDE0IEBACiAg
ICAgcmV0dXJuIG1fZGF0YS0+bV9jZ0NvbnRleHQ7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0
OjpzZXRMaW5lV2lkdGgoZmxvYXQgd2lkdGgpCi17Ci0gICAgQ0dDb250ZXh0U2V0TGluZVdpZHRo
KHBsYXRmb3JtQ29udGV4dCgpLCB3aWR0aCk7Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0Ojpz
ZXRNaXRlckxpbWl0KGZsb2F0IGxpbWl0KQotewotICAgIENHQ29udGV4dFNldE1pdGVyTGltaXQo
cGxhdGZvcm1Db250ZXh0KCksIGxpbWl0KTsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRleHQ6OnNl
dEFscGhhKGZsb2F0IGFscGhhKQotewotICAgIENHQ29udGV4dFNldEFscGhhKHBsYXRmb3JtQ29u
dGV4dCgpLCBhbHBoYSk7Ci19Ci0KIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpzZXRDb21wb3NpdGVP
cGVyYXRpb24oQ29tcG9zaXRlT3BlcmF0b3Igb3ApCiB7CisgICAgaWYgKHBhaW50aW5nRGlzYWJs
ZWQoKSkKKyAgICAgICAgcmV0dXJuOwogICAgIE5TQXV0b3JlbGVhc2VQb29sKiBwb29sID0gW1tO
U0F1dG9yZWxlYXNlUG9vbCBhbGxvY10gaW5pdF07CiAgICAgW1tOU0dyYXBoaWNzQ29udGV4dCBn
cmFwaGljc0NvbnRleHRXaXRoR3JhcGhpY3NQb3J0OnBsYXRmb3JtQ29udGV4dCgpIGZsaXBwZWQ6
WUVTXQogICAgICAgICBzZXRDb21wb3NpdGluZ09wZXJhdGlvbjooTlNDb21wb3NpdGluZ09wZXJh
dGlvbilvcF07CiAgICAgW3Bvb2wgcmVsZWFzZV07CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0
OjpjbGVhclJlY3QoY29uc3QgRmxvYXRSZWN0JiByKQotewotICAgIENHQ29udGV4dENsZWFyUmVj
dChwbGF0Zm9ybUNvbnRleHQoKSwgcik7CiB9Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpzdHJv
a2VSZWN0KGNvbnN0IEZsb2F0UmVjdCYgciwgZmxvYXQgbGluZVdpZHRoKQotewotICAgIENHQ29u
dGV4dFN0cm9rZVJlY3RXaXRoV2lkdGgocGxhdGZvcm1Db250ZXh0KCksIHIsIGxpbmVXaWR0aCk7
Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpzZXRMaW5lQ2FwKExpbmVDYXAgY2FwKQotewot
ICAgIHN3aXRjaCAoY2FwKSB7Ci0gICAgICAgIGNhc2UgQnV0dENhcDoKLSAgICAgICAgICAgIENH
Q29udGV4dFNldExpbmVDYXAocGxhdGZvcm1Db250ZXh0KCksIGtDR0xpbmVDYXBCdXR0KTsKLSAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIFJvdW5kQ2FwOgotICAgICAgICAgICAgQ0dD
b250ZXh0U2V0TGluZUNhcChwbGF0Zm9ybUNvbnRleHQoKSwga0NHTGluZUNhcFJvdW5kKTsKLSAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIFNxdWFyZUNhcDoKLSAgICAgICAgICAgIENH
Q29udGV4dFNldExpbmVDYXAocGxhdGZvcm1Db250ZXh0KCksIGtDR0xpbmVDYXBTcXVhcmUpOwot
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgfQotfQotCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0
TGluZUpvaW4oTGluZUpvaW4gam9pbikKLXsKLSAgICBzd2l0Y2ggKGpvaW4pIHsKLSAgICAgICAg
Y2FzZSBNaXRlckpvaW46Ci0gICAgICAgICAgICBDR0NvbnRleHRTZXRMaW5lSm9pbihwbGF0Zm9y
bUNvbnRleHQoKSwga0NHTGluZUpvaW5NaXRlcik7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAg
ICAgY2FzZSBSb3VuZEpvaW46Ci0gICAgICAgICAgICBDR0NvbnRleHRTZXRMaW5lSm9pbihwbGF0
Zm9ybUNvbnRleHQoKSwga0NHTGluZUpvaW5Sb3VuZCk7Ci0gICAgICAgICAgICBicmVhazsKLSAg
ICAgICAgY2FzZSBCZXZlbEpvaW46Ci0gICAgICAgICAgICBDR0NvbnRleHRTZXRMaW5lSm9pbihw
bGF0Zm9ybUNvbnRleHQoKSwga0NHTGluZUpvaW5CZXZlbCk7Ci0gICAgICAgICAgICBicmVhazsK
LSAgICB9Ci19Ci0KLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpjbGlwKGNvbnN0IFBhdGgmIHBhdGgp
Ci17Ci0gICAgQ0dDb250ZXh0QmVnaW5QYXRoKHBsYXRmb3JtQ29udGV4dCgpKTsKLSAgICBDR0Nv
bnRleHRBZGRQYXRoKHBsYXRmb3JtQ29udGV4dCgpLCBwYXRoLnBsYXRmb3JtUGF0aCgpKTsKLSAg
ICBDR0NvbnRleHRDbGlwKHBsYXRmb3JtQ29udGV4dCgpKTsKLX0KLQotfQpJbmRleDogcGxhdGZv
cm0vbWFjL1dlYkNvcmVTeXN0ZW1JbnRlcmZhY2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBwbGF0Zm9ybS9t
YWMvV2ViQ29yZVN5c3RlbUludGVyZmFjZS5oCShyZXZpc2lvbiAxNDE1NikKKysrIHBsYXRmb3Jt
L21hYy9XZWJDb3JlU3lzdGVtSW50ZXJmYWNlLmgJKHdvcmtpbmcgY29weSkKQEAgLTI2LDYgKzI2
LDkgQEAKICNpZm5kZWYgV2ViQ29yZVN5c3RlbUludGVyZmFjZV9oCiAjZGVmaW5lIFdlYkNvcmVT
eXN0ZW1JbnRlcmZhY2VfaAogCit0eXBlZGVmIHNpZ25lZCBjaGFyIEJPT0w7Cit0eXBlZGVmIHN0
cnVjdCBfTlNSYW5nZSBOU1JhbmdlOworCiAjaWZkZWYgX19jcGx1c3BsdXMKIGV4dGVybiAiQyIg
ewogI2VuZGlmCkluZGV4OiBwbGF0Zm9ybS9HcmFwaGljc1R5cGVzLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
cGxhdGZvcm0vR3JhcGhpY3NUeXBlcy5oCShyZXZpc2lvbiAxNDE1NikKKysrIHBsYXRmb3JtL0dy
YXBoaWNzVHlwZXMuaAkod29ya2luZyBjb3B5KQpAQCAtNTQsNiArNTQsOCBAQAogCiAgICAgZW51
bSBMaW5lSm9pbiB7IE1pdGVySm9pbiwgUm91bmRKb2luLCBCZXZlbEpvaW4gfTsKIAorICAgIGVu
dW0gSG9yaXpvbnRhbEFsaWdubWVudCB7IEFsaWduTGVmdCwgQWxpZ25SaWdodCwgQWxpZ25IQ2Vu
dGVyIH07CisKICAgICBTdHJpbmcgY29tcG9zaXRlT3BlcmF0b3JOYW1lKENvbXBvc2l0ZU9wZXJh
dG9yKTsKICAgICBib29sIHBhcnNlQ29tcG9zaXRlT3BlcmF0b3IoY29uc3QgU3RyaW5nJiwgQ29t
cG9zaXRlT3BlcmF0b3ImKTsKIApJbmRleDogcGxhdGZvcm0vR3JhcGhpY3NDb250ZXh0LmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBwbGF0Zm9ybS9HcmFwaGljc0NvbnRleHQuY3BwCShyZXZpc2lvbiAxNDE1
NikKKysrIHBsYXRmb3JtL0dyYXBoaWNzQ29udGV4dC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI2
LDEwICsyNiw3IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiR3JhcGhpY3NDb250
ZXh0LmgiCiAKLSNpbmNsdWRlICJGbG9hdFJlY3QuaCIKICNpbmNsdWRlICJGb250LmgiCi0jaW5j
bHVkZSAiSW50UmVjdC5oIgotI2luY2x1ZGUgIldpZGdldC5oIgogCiB1c2luZyBuYW1lc3BhY2Ug
c3RkOwogCkBAIC0zOSw3ICszNiw3IEBACiAgICAgR3JhcGhpY3NDb250ZXh0U3RhdGUoKSA6IGZp
bGxDb2xvcihDb2xvcjo6YmxhY2spLCBwYWludGluZ0Rpc2FibGVkKGZhbHNlKSB7IH0KICAgICBG
b250IGZvbnQ7CiAgICAgUGVuIHBlbjsKLSAgICBSR0JBMzIgZmlsbENvbG9yOworICAgIENvbG9y
IGZpbGxDb2xvcjsKICAgICBib29sIHBhaW50aW5nRGlzYWJsZWQ7CiB9OwogICAgICAgICAKQEAg
LTEzMywxMiArMTMwLDEyIEBACiAgICAgbV9jb21tb24tPnN0YXRlLnBlbi5zZXRXaWR0aCgwKTsK
IH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6OnNldEZpbGxDb2xvcihSR0JBMzIgY29sb3IpCit2
b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0RmlsbENvbG9yKGNvbnN0IENvbG9yJiBjb2xvcikKIHsK
ICAgICBtX2NvbW1vbi0+c3RhdGUuZmlsbENvbG9yID0gY29sb3I7CiB9CiAKLWNvbnN0IFJHQkEz
MiBHcmFwaGljc0NvbnRleHQ6OmZpbGxDb2xvcigpIGNvbnN0CitDb2xvciBHcmFwaGljc0NvbnRl
eHQ6OmZpbGxDb2xvcigpIGNvbnN0CiB7CiAgICAgcmV0dXJuIG1fY29tbW9uLT5zdGF0ZS5maWxs
Q29sb3I7CiB9CkluZGV4OiBwbGF0Zm9ybS9jZy9HcmFwaGljc0NvbnRleHRDRy5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gcGxhdGZvcm0vY2cvR3JhcGhpY3NDb250ZXh0Q0cuY3BwCShyZXZpc2lvbiAxNDEy
MSkKKysrIHBsYXRmb3JtL2NnL0dyYXBoaWNzQ29udGV4dENHLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMjMsMjEgKzIzLDEzIEBACiAgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKICAqLwogCi0jaW1wb3J0ICJjb25m
aWcuaCIKLSNpbXBvcnQgIkdyYXBoaWNzQ29udGV4dC5oIgorI2luY2x1ZGUgImNvbmZpZy5oIgor
I2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgogCi0jaW1wb3J0ICJCbG9ja0V4Y2VwdGlvbnMu
aCIKLSNpbXBvcnQgIkZsb2F0UmVjdC5oIgotI2ltcG9ydCAiRm9udC5oIgotI2ltcG9ydCAiRm91
bmRhdGlvbkV4dHJhcy5oIgotI2ltcG9ydCAiSW50UG9pbnRBcnJheS5oIgotI2ltcG9ydCAiS1Jl
bmRlcmluZ0RldmljZVF1YXJ0ei5oIgotI2ltcG9ydCAiUGF0aC5oIgotI2ltcG9ydCAiV2ViQ29y
ZVN5c3RlbUludGVyZmFjZS5oIgorI2luY2x1ZGUgIkludFBvaW50QXJyYXkuaCIKKyNpbmNsdWRl
ICJLUmVuZGVyaW5nRGV2aWNlUXVhcnR6LmgiCisjaW5jbHVkZSAiUGF0aC5oIgogCi0vLyBGSVhN
RTogQSBsb3QgbW9yZSBvZiB0aGlzIHNob3VsZCB1c2UgQ29yZUdyYXBoaWNzIGluc3RlYWQgb2Yg
QXBwS2l0LgotLy8gRklYTUU6IEEgbG90IG1vcmUgb2YgdGhpcyBzaG91bGQgbW92ZSBpbnRvIEdy
YXBoaWNzQ29udGV4dENHLmNwcC4KLQogdXNpbmcgbmFtZXNwYWNlIHN0ZDsKIAogbmFtZXNwYWNl
IFdlYkNvcmUgewpAQCAtNDYsNDYgKzM4LDYgQEAKIC8vIGNhbGxzIGluIHRoaXMgZmlsZSBhcmUg
YWxsIGV4Y2VwdGlvbi1zYWZlLCBzbyB3ZSBkb24ndCBibG9jawogLy8gZXhjZXB0aW9ucyBmb3Ig
dGhvc2UuCiAKLWNsYXNzIEdyYXBoaWNzQ29udGV4dFBsYXRmb3JtUHJpdmF0ZSB7Ci1wdWJsaWM6
Ci0gICAgR3JhcGhpY3NDb250ZXh0UGxhdGZvcm1Qcml2YXRlKENHQ29udGV4dFJlZik7Ci0gICAg
fkdyYXBoaWNzQ29udGV4dFBsYXRmb3JtUHJpdmF0ZSgpOwotCi0gICAgQ0dDb250ZXh0UmVmIG1f
Y2dDb250ZXh0OwotICAgIEludFJlY3QgbV9mb2N1c1JpbmdDbGlwOyAvLyBXb3JrIGFyb3VuZCBD
RyBidWcgaW4gZm9jdXMgcmluZyBjbGlwcGluZy4KLX07Ci0KLS8vIEEgZmlsbFJlY3QgaGVscGVy
IHRvIHdvcmsgYXJvdW5kIHRoZSBmYWN0IHRoYXQgTlNSZWN0RmlsbCB1c2VzIGNvcHkgbW9kZSwg
bm90IHNvdXJjZSBvdmVyLgotc3RhdGljIGlubGluZSB2b2lkIGZpbGxSZWN0U291cmNlT3Zlcihj
b25zdCBGbG9hdFJlY3QmIHJlY3QsIGNvbnN0IENvbG9yJiBjb2wpCi17Ci0gICAgW25zQ29sb3Io
Y29sKSBzZXRdOwotICAgIE5TUmVjdEZpbGxVc2luZ09wZXJhdGlvbihyZWN0LCBOU0NvbXBvc2l0
ZVNvdXJjZU92ZXIpOwotfQotCi1HcmFwaGljc0NvbnRleHRQbGF0Zm9ybVByaXZhdGU6OkdyYXBo
aWNzQ29udGV4dFBsYXRmb3JtUHJpdmF0ZShDR0NvbnRleHRSZWYgY2dDb250ZXh0KQotewotICAg
IG1fY2dDb250ZXh0ID0gY2dDb250ZXh0OwotICAgIENHQ29udGV4dFJldGFpbihtX2NnQ29udGV4
dCk7Ci19Ci0KLUdyYXBoaWNzQ29udGV4dFBsYXRmb3JtUHJpdmF0ZTo6fkdyYXBoaWNzQ29udGV4
dFBsYXRmb3JtUHJpdmF0ZSgpCi17Ci0gICAgQ0dDb250ZXh0UmVsZWFzZShtX2NnQ29udGV4dCk7
Ci19Ci0KLUdyYXBoaWNzQ29udGV4dDo6R3JhcGhpY3NDb250ZXh0KENHQ29udGV4dFJlZiBjZ0Nv
bnRleHQpCi0gICAgOiBtX2NvbW1vbihjcmVhdGVHcmFwaGljc0NvbnRleHRQcml2YXRlKCkpCi0g
ICAgLCBtX2RhdGEobmV3IEdyYXBoaWNzQ29udGV4dFBsYXRmb3JtUHJpdmF0ZShjZ0NvbnRleHQp
KQotewotICAgIHNldFBhaW50aW5nRGlzYWJsZWQoIWNnQ29udGV4dCk7Ci19Ci0KLUdyYXBoaWNz
Q29udGV4dDo6fkdyYXBoaWNzQ29udGV4dCgpCi17Ci0gICAgZGVzdHJveUdyYXBoaWNzQ29udGV4
dFByaXZhdGUobV9jb21tb24pOwotICAgIGRlbGV0ZSBtX2RhdGE7Ci19Ci0KIHZvaWQgR3JhcGhp
Y3NDb250ZXh0OjpzYXZlUGxhdGZvcm1TdGF0ZSgpCiB7CiAgICAgQ0dDb250ZXh0U2F2ZUdTdGF0
ZShwbGF0Zm9ybUNvbnRleHQoKSk7CkBAIC0xMDIsNDMgKzU0LDMxIEBACiAgICAgaWYgKHBhaW50
aW5nRGlzYWJsZWQoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgLy8gRklYTUU6IFRoaXMgZnVu
Y3Rpb24gY3VycmVudGx5IHdvcmtzIG9ubHkgd2hlbiB0aGUgY3VycmVudCBjb250ZXh0IGlzIHRo
ZSBjdXJyZW50IE5TR3JhcGhpY3NDb250ZXh0LgotICAgIEFTU0VSVChwbGF0Zm9ybUNvbnRleHQo
KSA9PSBbW05TR3JhcGhpY3NDb250ZXh0IGN1cnJlbnRDb250ZXh0XSBncmFwaGljc1BvcnRdKTsK
KyAgICBDR0NvbnRleHRSZWYgY29udGV4dCA9IHBsYXRmb3JtQ29udGV4dCgpOwogCi0gICAgaWYg
KGZpbGxDb2xvcigpICYgMHhGRjAwMDAwMCkKLSAgICAgICAgZmlsbFJlY3RTb3VyY2VPdmVyKHJl
Y3QsIGZpbGxDb2xvcigpKTsKKyAgICBpZiAoZmlsbENvbG9yKCkuYWxwaGEoKSkgeworICAgICAg
ICBDR0NvbnRleHRTZXRGaWxsQ29sb3JXaXRoQ29sb3IoY29udGV4dCwgY2dDb2xvcihmaWxsQ29s
b3IoKSkpOworICAgICAgICBDR0NvbnRleHRGaWxsUmVjdChjb250ZXh0LCByZWN0KTsKKyAgICB9
CiAKICAgICBpZiAocGVuKCkuc3R5bGUoKSAhPSBQZW46OlBlbjo6Tm9QZW4pIHsKLSAgICAgICAg
c2V0Q29sb3JGcm9tUGVuKCk7Ci0gICAgICAgIE5TRnJhbWVSZWN0KHJlY3QpOworICAgICAgICBD
R0NvbnRleHRTZXRGaWxsQ29sb3JXaXRoQ29sb3IoY29udGV4dCwgY2dDb2xvcihwZW4oKS5jb2xv
cigpKSk7CisgICAgICAgIENHUmVjdCByZWN0c1s0XSA9IHsKKyAgICAgICAgICAgIEZsb2F0UmVj
dChyZWN0LngoKSwgcmVjdC55KCksIHJlY3Qud2lkdGgoKSwgMSksCisgICAgICAgICAgICBGbG9h
dFJlY3QocmVjdC54KCksIHJlY3QuYm90dG9tKCkgLSAxLCByZWN0LndpZHRoKCksIDEpLAorICAg
ICAgICAgICAgRmxvYXRSZWN0KHJlY3QueCgpLCByZWN0LnkoKSArIDEsIDEsIHJlY3QuaGVpZ2h0
KCkgLSAyKSwKKyAgICAgICAgICAgIEZsb2F0UmVjdChyZWN0LnJpZ2h0KCkgLSAxLCByZWN0Lnko
KSArIDEsIDEsIHJlY3QuaGVpZ2h0KCkgLSAyKQorICAgICAgICB9OworICAgICAgICBDR0NvbnRl
eHRGaWxsUmVjdHMoY29udGV4dCwgcmVjdHMsIDQpOwogICAgIH0KIH0KIAotdm9pZCBHcmFwaGlj
c0NvbnRleHQ6OnNldENvbG9yRnJvbUZpbGxDb2xvcigpCi17Ci0gICAgLy8gRklYTUU6IFRoaXMg
ZnVuY3Rpb24gY3VycmVudGx5IHdvcmtzIG9ubHkgd2hlbiB0aGUgY3VycmVudCBjb250ZXh0IGlz
IHRoZSBjdXJyZW50IE5TR3JhcGhpY3NDb250ZXh0LgotICAgIEFTU0VSVChwbGF0Zm9ybUNvbnRl
eHQoKSA9PSBbW05TR3JhcGhpY3NDb250ZXh0IGN1cnJlbnRDb250ZXh0XSBncmFwaGljc1BvcnRd
KTsKLQotICAgIFtuc0NvbG9yKGZpbGxDb2xvcigpKSBzZXRdOwotfQotICAKLXZvaWQgR3JhcGhp
Y3NDb250ZXh0OjpzZXRDb2xvckZyb21QZW4oKQotewotICAgIC8vIEZJWE1FOiBUaGlzIGZ1bmN0
aW9uIGN1cnJlbnRseSB3b3JrcyBvbmx5IHdoZW4gdGhlIGN1cnJlbnQgY29udGV4dCBpcyB0aGUg
Y3VycmVudCBOU0dyYXBoaWNzQ29udGV4dC4KLSAgICBBU1NFUlQocGxhdGZvcm1Db250ZXh0KCkg
PT0gW1tOU0dyYXBoaWNzQ29udGV4dCBjdXJyZW50Q29udGV4dF0gZ3JhcGhpY3NQb3J0XSk7Ci0K
LSAgICBbbnNDb2xvcihwZW4oKS5jb2xvcigpKSBzZXRdOwotfQotICAKIC8vIFRoaXMgaXMgb25s
eSB1c2VkIHRvIGRyYXcgYm9yZGVycy4KIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3TGluZShj
b25zdCBJbnRQb2ludCYgcG9pbnQxLCBjb25zdCBJbnRQb2ludCYgcG9pbnQyKQogewogICAgIGlm
IChwYWludGluZ0Rpc2FibGVkKCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIC8vIEZJWE1FOiBU
aGlzIGZ1bmN0aW9uIGN1cnJlbnRseSB3b3JrcyBvbmx5IHdoZW4gdGhlIGN1cnJlbnQgY29udGV4
dCBpcyB0aGUgY3VycmVudCBOU0dyYXBoaWNzQ29udGV4dC4KLSAgICBBU1NFUlQocGxhdGZvcm1D
b250ZXh0KCkgPT0gW1tOU0dyYXBoaWNzQ29udGV4dCBjdXJyZW50Q29udGV4dF0gZ3JhcGhpY3NQ
b3J0XSk7Ci0KICAgICBQZW46OlBlblN0eWxlIHBlblN0eWxlID0gcGVuKCkuc3R5bGUoKTsKICAg
ICBpZiAocGVuU3R5bGUgPT0gUGVuOjpQZW46Ok5vUGVuKQogICAgICAgICByZXR1cm47CkBAIC0x
NDYsOSArODYsOSBAQAogICAgIGlmICh3aWR0aCA8IDEpCiAgICAgICAgIHdpZHRoID0gMTsKIAot
ICAgIE5TUG9pbnQgcDEgPSBwb2ludDE7Ci0gICAgTlNQb2ludCBwMiA9IHBvaW50MjsKLSAgICBi
b29sIGlzVmVydGljYWxMaW5lID0gKHAxLnggPT0gcDIueCk7CisgICAgRmxvYXRQb2ludCBwMSA9
IHBvaW50MTsKKyAgICBGbG9hdFBvaW50IHAyID0gcG9pbnQyOworICAgIGJvb2wgaXNWZXJ0aWNh
bExpbmUgPSAocDEueCgpID09IHAyLngoKSk7CiAgICAgCiAgICAgLy8gRm9yIG9kZCB3aWR0aHMs
IHdlIGFkZCBpbiAwLjUgdG8gdGhlIGFwcHJvcHJpYXRlIHgveSBzbyB0aGF0IHRoZSBmbG9hdCBh
cml0aG1ldGljCiAgICAgLy8gd29ya3Mgb3V0LiAgRm9yIGV4YW1wbGUsIHdpdGggYSBib3JkZXIg
d2lkdGggb2YgMywgS0hUTUwgd2lsbCBwYXNzIHVzICh5MSt5MikvMiwgZS5nLiwKQEAgLTE1Niwx
MDUgKzk2LDEwMyBAQAogICAgIC8vIHVzIGEgcGVyZmVjdCBwb3NpdGlvbiwgYnV0IGFuIG9kZCB3
aWR0aCBnYXZlIHVzIGEgcG9zaXRpb24gdGhhdCBpcyBvZmYgYnkgZXhhY3RseSAwLjUuCiAgICAg
aWYgKHBlblN0eWxlID09IFBlbjo6RG90TGluZSB8fCBwZW5TdHlsZSA9PSBQZW46OkRhc2hMaW5l
KSB7CiAgICAgICAgIGlmIChpc1ZlcnRpY2FsTGluZSkgewotICAgICAgICAgICAgcDEueSArPSB3
aWR0aDsKLSAgICAgICAgICAgIHAyLnkgLT0gd2lkdGg7CisgICAgICAgICAgICBwMS5tb3ZlKDAs
IHdpZHRoKTsKKyAgICAgICAgICAgIHAyLm1vdmUoMCwgLXdpZHRoKTsKICAgICAgICAgfSBlbHNl
IHsKLSAgICAgICAgICAgIHAxLnggKz0gd2lkdGg7Ci0gICAgICAgICAgICBwMi54IC09IHdpZHRo
OworICAgICAgICAgICAgcDEubW92ZSh3aWR0aCwgMCk7CisgICAgICAgICAgICBwMi5tb3ZlKC13
aWR0aCwgMCk7CiAgICAgICAgIH0KICAgICB9CiAgICAgCi0gICAgaWYgKCgoaW50KXdpZHRoKSUy
KSB7CisgICAgaWYgKCgoaW50KXdpZHRoKSAlIDIpIHsKICAgICAgICAgaWYgKGlzVmVydGljYWxM
aW5lKSB7CiAgICAgICAgICAgICAvLyBXZSdyZSBhIHZlcnRpY2FsIGxpbmUuICBBZGp1c3Qgb3Vy
IHguCi0gICAgICAgICAgICBwMS54ICs9IDAuNTsKLSAgICAgICAgICAgIHAyLnggKz0gMC41Owor
ICAgICAgICAgICAgcDEubW92ZSgwLjUsIDApOworICAgICAgICAgICAgcDIubW92ZSgwLjUsIDAp
OwogICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgLy8gV2UncmUgYSBob3Jpem9udGFsIGxp
bmUuIEFkanVzdCBvdXIgeS4KLSAgICAgICAgICAgIHAxLnkgKz0gMC41OwotICAgICAgICAgICAg
cDIueSArPSAwLjU7CisgICAgICAgICAgICBwMS5tb3ZlKDAsIDAuNSk7CisgICAgICAgICAgICBw
Mi5tb3ZlKDAsIDAuNSk7CiAgICAgICAgIH0KICAgICB9CiAgICAgCi0gICAgTlNCZXppZXJQYXRo
ICpwYXRoID0gW1tOU0JlemllclBhdGggYWxsb2NdIGluaXRdOwotICAgIFtwYXRoIHNldExpbmVX
aWR0aDp3aWR0aF07Ci0KICAgICBpbnQgcGF0V2lkdGggPSAwOwogICAgIHN3aXRjaCAocGVuU3R5
bGUpIHsKLSAgICBjYXNlIFBlbjo6Tm9QZW46Ci0gICAgY2FzZSBQZW46OlNvbGlkTGluZToKLSAg
ICAgICAgYnJlYWs7Ci0gICAgY2FzZSBQZW46OkRvdExpbmU6Ci0gICAgICAgIHBhdFdpZHRoID0g
KGludCl3aWR0aDsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBQZW46OkRhc2hMaW5lOgotICAg
ICAgICBwYXRXaWR0aCA9IDMqKGludCl3aWR0aDsKLSAgICAgICAgYnJlYWs7CisgICAgICAgIGNh
c2UgUGVuOjpOb1BlbjoKKyAgICAgICAgY2FzZSBQZW46OlNvbGlkTGluZToKKyAgICAgICAgICAg
IGJyZWFrOworICAgICAgICBjYXNlIFBlbjo6RG90TGluZToKKyAgICAgICAgICAgIHBhdFdpZHRo
ID0gKGludCl3aWR0aDsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFBlbjo6RGFz
aExpbmU6CisgICAgICAgICAgICBwYXRXaWR0aCA9IDMgKiAoaW50KXdpZHRoOworICAgICAgICAg
ICAgYnJlYWs7CiAgICAgfQogCi0gICAgQ0dDb250ZXh0U2F2ZUdTdGF0ZShwbGF0Zm9ybUNvbnRl
eHQoKSk7CisgICAgQ0dDb250ZXh0UmVmIGNvbnRleHQgPSBwbGF0Zm9ybUNvbnRleHQoKTsKIAot
ICAgIHNldENvbG9yRnJvbVBlbigpOworICAgIENHQ29udGV4dFNhdmVHU3RhdGUoY29udGV4dCk7
CiAKLSAgICBDR0NvbnRleHRTZXRTaG91bGRBbnRpYWxpYXMocGxhdGZvcm1Db250ZXh0KCksIGZh
bHNlKTsKKyAgICBDR0NvbG9yUmVmIGNvbG9yUmVmID0gY2dDb2xvcihwZW4oKS5jb2xvcigpKTsK
KyAgICBDR0NvbnRleHRTZXRGaWxsQ29sb3JXaXRoQ29sb3IoY29udGV4dCwgY29sb3JSZWYpOwor
ICAgIENHQ29udGV4dFNldFN0cm9rZUNvbG9yV2l0aENvbG9yKGNvbnRleHQsIGNvbG9yUmVmKTsK
KworICAgIENHQ29udGV4dFNldFNob3VsZEFudGlhbGlhcyhjb250ZXh0LCBmYWxzZSk7CiAgICAg
CiAgICAgaWYgKHBhdFdpZHRoKSB7CiAgICAgICAgIC8vIERvIGEgcmVjdCBmaWxsIG9mIG91ciBl
bmRwb2ludHMuICBUaGlzIGVuc3VyZXMgd2UgYWx3YXlzIGhhdmUgdGhlCiAgICAgICAgIC8vIGFw
cGVhcmFuY2Ugb2YgYmVpbmcgYSBib3JkZXIuICBXZSB0aGVuIGRyYXcgdGhlIGFjdHVhbCBkb3R0
ZWQvZGFzaGVkIGxpbmUuCi0gICAgICAgIGNvbnN0IENvbG9yJiBwZW5Db2xvciA9IHBlbigpLmNv
bG9yKCk7CiAgICAgICAgIGlmIChpc1ZlcnRpY2FsTGluZSkgewotICAgICAgICAgICAgZmlsbFJl
Y3RTb3VyY2VPdmVyKEZsb2F0UmVjdChwMS54LXdpZHRoLzIsIHAxLnktd2lkdGgsIHdpZHRoLCB3
aWR0aCksIHBlbkNvbG9yKTsKLSAgICAgICAgICAgIGZpbGxSZWN0U291cmNlT3ZlcihGbG9hdFJl
Y3QocDIueC13aWR0aC8yLCBwMi55LCB3aWR0aCwgd2lkdGgpLCBwZW5Db2xvcik7CisgICAgICAg
ICAgICBDR0NvbnRleHRGaWxsUmVjdChjb250ZXh0LCBGbG9hdFJlY3QocDEueCgpIC0gd2lkdGgg
LyAyLCBwMS55KCkgLSB3aWR0aCwgd2lkdGgsIHdpZHRoKSk7CisgICAgICAgICAgICBDR0NvbnRl
eHRGaWxsUmVjdChjb250ZXh0LCBGbG9hdFJlY3QocDIueCgpIC0gd2lkdGggLyAyLCBwMi55KCks
IHdpZHRoLCB3aWR0aCkpOwogICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgZmlsbFJlY3RT
b3VyY2VPdmVyKEZsb2F0UmVjdChwMS54LXdpZHRoLCBwMS55LXdpZHRoLzIsIHdpZHRoLCB3aWR0
aCksIHBlbkNvbG9yKTsKLSAgICAgICAgICAgIGZpbGxSZWN0U291cmNlT3ZlcihGbG9hdFJlY3Qo
cDIueCwgcDIueS13aWR0aC8yLCB3aWR0aCwgd2lkdGgpLCBwZW5Db2xvcik7CisgICAgICAgICAg
ICBDR0NvbnRleHRGaWxsUmVjdChjb250ZXh0LCBGbG9hdFJlY3QocDEueCgpIC0gd2lkdGgsIHAx
LnkoKSAtIHdpZHRoIC8gMiwgd2lkdGgsIHdpZHRoKSk7CisgICAgICAgICAgICBDR0NvbnRleHRG
aWxsUmVjdChjb250ZXh0LCBGbG9hdFJlY3QocDIueCgpLCBwMi55KCkgLSB3aWR0aCAvIDIsIHdp
ZHRoLCB3aWR0aCkpOwogICAgICAgICB9Ci0gICAgICAgIAorCiAgICAgICAgIC8vIEV4YW1wbGU6
IDgwIHBpeGVscyB3aXRoIGEgd2lkdGggb2YgMzAgcGl4ZWxzLgogICAgICAgICAvLyBSZW1haW5k
ZXIgaXMgMjAuICBUaGUgbWF4aW11bSBwaXhlbHMgb2YgbGluZSB3ZSBjb3VsZCBwYWludAogICAg
ICAgICAvLyB3aWxsIGJlIDUwIHBpeGVscy4KICAgICAgICAgaW50IGRpc3RhbmNlID0gKGlzVmVy
dGljYWxMaW5lID8gKHBvaW50Mi55KCkgLSBwb2ludDEueSgpKSA6IChwb2ludDIueCgpIC0gcG9p
bnQxLngoKSkpIC0gMiooaW50KXdpZHRoOwotICAgICAgICBpbnQgcmVtYWluZGVyID0gZGlzdGFu
Y2UlcGF0V2lkdGg7Ci0gICAgICAgIGludCBjb3ZlcmFnZSA9IGRpc3RhbmNlLXJlbWFpbmRlcjsK
LSAgICAgICAgaW50IG51bVNlZ21lbnRzID0gY292ZXJhZ2UvcGF0V2lkdGg7CisgICAgICAgIGlu
dCByZW1haW5kZXIgPSBkaXN0YW5jZSAlIHBhdFdpZHRoOworICAgICAgICBpbnQgY292ZXJhZ2Ug
PSBkaXN0YW5jZSAtIHJlbWFpbmRlcjsKKyAgICAgICAgaW50IG51bVNlZ21lbnRzID0gY292ZXJh
Z2UgLyBwYXRXaWR0aDsKIAogICAgICAgICBmbG9hdCBwYXR0ZXJuT2Zmc2V0ID0gMDsKICAgICAg
ICAgLy8gU3BlY2lhbCBjYXNlIDFweCBkb3R0ZWQgYm9yZGVycyBmb3Igc3BlZWQuCiAgICAgICAg
IGlmIChwYXRXaWR0aCA9PSAxKQogICAgICAgICAgICAgcGF0dGVybk9mZnNldCA9IDEuMDsKICAg
ICAgICAgZWxzZSB7Ci0gICAgICAgICAgICBib29sIGV2ZW5OdW1iZXJPZlNlZ21lbnRzID0gbnVt
U2VnbWVudHMlMiA9PSAwOworICAgICAgICAgICAgYm9vbCBldmVuTnVtYmVyT2ZTZWdtZW50cyA9
IG51bVNlZ21lbnRzICUgMiA9PSAwOwogICAgICAgICAgICAgaWYgKHJlbWFpbmRlcikKICAgICAg
ICAgICAgICAgICBldmVuTnVtYmVyT2ZTZWdtZW50cyA9ICFldmVuTnVtYmVyT2ZTZWdtZW50czsK
ICAgICAgICAgICAgIGlmIChldmVuTnVtYmVyT2ZTZWdtZW50cykgewogICAgICAgICAgICAgICAg
IGlmIChyZW1haW5kZXIpIHsKICAgICAgICAgICAgICAgICAgICAgcGF0dGVybk9mZnNldCArPSBw
YXRXaWR0aCAtIHJlbWFpbmRlcjsKLSAgICAgICAgICAgICAgICAgICAgcGF0dGVybk9mZnNldCAr
PSByZW1haW5kZXIvMjsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgZWxzZQot
ICAgICAgICAgICAgICAgICAgICBwYXR0ZXJuT2Zmc2V0ID0gcGF0V2lkdGgvMjsKLSAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgIGVsc2UgaWYgKCFldmVuTnVtYmVyT2ZTZWdtZW50cykgeworICAg
ICAgICAgICAgICAgICAgICBwYXR0ZXJuT2Zmc2V0ICs9IHJlbWFpbmRlciAvIDI7CisgICAgICAg
ICAgICAgICAgfSBlbHNlCisgICAgICAgICAgICAgICAgICAgIHBhdHRlcm5PZmZzZXQgPSBwYXRX
aWR0aCAvIDI7CisgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgIGlmIChyZW1h
aW5kZXIpCiAgICAgICAgICAgICAgICAgICAgIHBhdHRlcm5PZmZzZXQgPSAocGF0V2lkdGggLSBy
ZW1haW5kZXIpLzI7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICAgICAgCiAgICAgICAg
IGNvbnN0IENHRmxvYXQgZG90dGVkTGluZVsyXSA9IHsgcGF0V2lkdGgsIHBhdFdpZHRoIH07Ci0g
ICAgICAgIFtwYXRoIHNldExpbmVEYXNoOmRvdHRlZExpbmUgY291bnQ6MiBwaGFzZTpwYXR0ZXJu
T2Zmc2V0XTsKKyAgICAgICAgQ0dDb250ZXh0U2V0TGluZURhc2goY29udGV4dCwgcGF0dGVybk9m
ZnNldCwgZG90dGVkTGluZSwgMik7CiAgICAgfQogICAgIAotICAgIFtwYXRoIG1vdmVUb1BvaW50
OnAxXTsKLSAgICBbcGF0aCBsaW5lVG9Qb2ludDpwMl07CisgICAgQ0dDb250ZXh0U2V0TGluZVdp
ZHRoKGNvbnRleHQsIHdpZHRoKTsKIAotICAgIFtwYXRoIHN0cm9rZV07Ci0gICAgCi0gICAgW3Bh
dGggcmVsZWFzZV07CisgICAgQ0dDb250ZXh0QmVnaW5QYXRoKGNvbnRleHQpOworICAgIENHQ29u
dGV4dE1vdmVUb1BvaW50KGNvbnRleHQsIHAxLngoKSwgcDEueSgpKTsKKyAgICBDR0NvbnRleHRB
ZGRMaW5lVG9Qb2ludChjb250ZXh0LCBwMi54KCksIHAyLnkoKSk7CiAKLSAgICBDR0NvbnRleHRS
ZXN0b3JlR1N0YXRlKHBsYXRmb3JtQ29udGV4dCgpKTsKKyAgICBDR0NvbnRleHRTdHJva2VQYXRo
KGNvbnRleHQpOworCisgICAgQ0dDb250ZXh0UmVzdG9yZUdTdGF0ZShjb250ZXh0KTsKIH0KIAot
CiAvLyBUaGlzIG1ldGhvZCBpcyBvbmx5IHVzZWQgdG8gZHJhdyB0aGUgbGl0dGxlIGNpcmNsZXMg
dXNlZCBpbiBsaXN0cy4KIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3RWxsaXBzZShjb25zdCBJ
bnRSZWN0JiByZWN0KQogewpAQCAtMjcyLDExICsyMTAsMTEgQEAKICAgICBDR0NvbnRleHRBZGRB
cmMoY29udGV4dCwgcmVjdC54KCkgKyByLCByZWN0LnkoKSArIHIsIHIsIDAsIDIqTV9QSSwgdHJ1
ZSk7CiAgICAgQ0dDb250ZXh0Q2xvc2VQYXRoKGNvbnRleHQpOwogCi0gICAgaWYgKGZpbGxDb2xv
cigpICYgMHhGRjAwMDAwMCkgewotICAgICAgICBzZXRDb2xvckZyb21GaWxsQ29sb3IoKTsKKyAg
ICBpZiAoZmlsbENvbG9yKCkuYWxwaGEoKSkgeworICAgICAgICBDR0NvbnRleHRTZXRGaWxsQ29s
b3JXaXRoQ29sb3IoY29udGV4dCwgY2dDb2xvcihmaWxsQ29sb3IoKSkpOwogICAgICAgICBpZiAo
cGVuKCkuc3R5bGUoKSAhPSBQZW46Ok5vUGVuKSB7CiAgICAgICAgICAgICAvLyBzdHJva2UgYW5k
IGZpbGwKLSAgICAgICAgICAgIHNldENvbG9yRnJvbVBlbigpOworICAgICAgICAgICAgQ0dDb250
ZXh0U2V0U3Ryb2tlQ29sb3JXaXRoQ29sb3IoY29udGV4dCwgY2dDb2xvcihwZW4oKS5jb2xvcigp
KSk7CiAgICAgICAgICAgICB1bnNpZ25lZCBwZW5XaWR0aCA9IHBlbigpLndpZHRoKCk7CiAgICAg
ICAgICAgICBpZiAocGVuV2lkdGggPT0gMCkgCiAgICAgICAgICAgICAgICAgcGVuV2lkdGgrKzsK
QEAgLTI4NCw5ICsyMjIsOCBAQAogICAgICAgICAgICAgQ0dDb250ZXh0RHJhd1BhdGgoY29udGV4
dCwga0NHUGF0aEZpbGxTdHJva2UpOwogICAgICAgICB9IGVsc2UKICAgICAgICAgICAgIENHQ29u
dGV4dEZpbGxQYXRoKGNvbnRleHQpOwotICAgIH0KLSAgICBpZiAocGVuKCkuc3R5bGUoKSAhPSBQ
ZW46Ok5vUGVuKSB7Ci0gICAgICAgIHNldENvbG9yRnJvbVBlbigpOworICAgIH0gZWxzZSBpZiAo
cGVuKCkuc3R5bGUoKSAhPSBQZW46Ok5vUGVuKSB7CisgICAgICAgIENHQ29udGV4dFNldFN0cm9r
ZUNvbG9yV2l0aENvbG9yKGNvbnRleHQsIGNnQ29sb3IocGVuKCkuY29sb3IoKSkpOwogICAgICAg
ICB1bnNpZ25lZCBwZW5XaWR0aCA9IHBlbigpLndpZHRoKCk7CiAgICAgICAgIGlmIChwZW5XaWR0
aCA9PSAwKSAKICAgICAgICAgICAgIHBlbldpZHRoKys7CkBAIC0zMTMsNyArMjUwLDcgQEAKICAg
ICAgICAgZmxvYXQgZmFsZW4gPSAgZmEgKyAoZmxvYXQpYWxlbiAvIDE2OwogICAgICAgICBDR0Nv
bnRleHRBZGRBcmMoY29udGV4dCwgeCArIHIsIHkgKyByLCByLCAtZmEgKiBNX1BJLzE4MCwgLWZh
bGVuICogTV9QSS8xODAsIHRydWUpOwogICAgICAgICAKLSAgICAgICAgc2V0Q29sb3JGcm9tUGVu
KCk7CisgICAgICAgIENHQ29udGV4dFNldFN0cm9rZUNvbG9yV2l0aENvbG9yKGNvbnRleHQsIGNn
Q29sb3IocGVuKCkuY29sb3IoKSkpOwogICAgICAgICBDR0NvbnRleHRTZXRMaW5lV2lkdGgoY29u
dGV4dCwgcGVuKCkud2lkdGgoKSk7CiAgICAgICAgIENHQ29udGV4dFN0cm9rZVBhdGgoY29udGV4
dCk7CiAgICAgfQpAQCAtMzQwLDEzICsyNzcsMTMgQEAKICAgICAgICAgQ0dDb250ZXh0QWRkTGlu
ZVRvUG9pbnQoY29udGV4dCwgcG9pbnRzW2ldLngoKSwgcG9pbnRzW2ldLnkoKSk7CiAgICAgQ0dD
b250ZXh0Q2xvc2VQYXRoKGNvbnRleHQpOwogCi0gICAgaWYgKGZpbGxDb2xvcigpICYgMHhGRjAw
MDAwMCkgewotICAgICAgICBzZXRDb2xvckZyb21GaWxsQ29sb3IoKTsKKyAgICBpZiAoZmlsbENv
bG9yKCkuYWxwaGEoKSkgeworICAgICAgICBDR0NvbnRleHRTZXRGaWxsQ29sb3JXaXRoQ29sb3Io
Y29udGV4dCwgY2dDb2xvcihmaWxsQ29sb3IoKSkpOwogICAgICAgICBDR0NvbnRleHRFT0ZpbGxQ
YXRoKGNvbnRleHQpOwogICAgIH0KIAogICAgIGlmIChwZW4oKS5zdHlsZSgpICE9IFBlbjo6Tm9Q
ZW4pIHsKLSAgICAgICAgc2V0Q29sb3JGcm9tUGVuKCk7CisgICAgICAgIENHQ29udGV4dFNldFN0
cm9rZUNvbG9yV2l0aENvbG9yKGNvbnRleHQsIGNnQ29sb3IocGVuKCkuY29sb3IoKSkpOwogICAg
ICAgICBDR0NvbnRleHRTZXRMaW5lV2lkdGgoY29udGV4dCwgcGVuKCkud2lkdGgoKSk7CiAgICAg
ICAgIENHQ29udGV4dFN0cm9rZVBhdGgoY29udGV4dCk7CiAgICAgfQpAQCAtMzU0LDUyICsyOTEs
MjEgQEAKICAgICBDR0NvbnRleHRSZXN0b3JlR1N0YXRlKGNvbnRleHQpOwogfQogCi1zdGF0aWMg
aW50IGdldEJsZW5kZWRDb2xvckNvbXBvbmVudChpbnQgYywgaW50IGEpCi17Ci0gICAgLy8gV2Ug
dXNlIHdoaXRlLgotICAgIGZsb2F0IGFscGhhID0gKGZsb2F0KShhKSAvIDI1NTsKLSAgICBpbnQg
d2hpdGVCbGVuZCA9IDI1NSAtIGE7Ci0gICAgYyAtPSB3aGl0ZUJsZW5kOwotICAgIHJldHVybiAo
aW50KShjL2FscGhhKTsKLX0KLQotQ29sb3IgR3JhcGhpY3NDb250ZXh0OjpzZWxlY3RlZFRleHRC
YWNrZ3JvdW5kQ29sb3IoKSBjb25zdAotewotICAgIE5TQ29sb3IgKmNvbG9yID0gdXNlc0luYWN0
aXZlVGV4dEJhY2tncm91bmRDb2xvcigpID8gW05TQ29sb3Igc2Vjb25kYXJ5U2VsZWN0ZWRDb250
cm9sQ29sb3JdIDogW05TQ29sb3Igc2VsZWN0ZWRUZXh0QmFja2dyb3VuZENvbG9yXTsKLSAgICAv
LyB0aGlzIG5lZWRzIHRvIGFsd2F5cyB1c2UgZGV2aWNlIGNvbG9yc3BhY2Ugc28gaXQgY2FuIGRl
LWNhbGlicmF0ZSB0aGUgY29sb3IgZm9yCi0gICAgLy8gQ29sb3IgdG8gcG9zc2libHkgcmVjYWxp
YnJhdGUgaXQKLSAgICBjb2xvciA9IFtjb2xvciBjb2xvclVzaW5nQ29sb3JTcGFjZU5hbWU6TlNE
ZXZpY2VSR0JDb2xvclNwYWNlXTsKLSAgICAKLSAgICBDb2xvciBjb2wgPSBDb2xvcigoaW50KSgy
NTUgKiBbY29sb3IgcmVkQ29tcG9uZW50XSksIChpbnQpKDI1NSAqIFtjb2xvciBncmVlbkNvbXBv
bmVudF0pLCAoaW50KSgyNTUgKiBbY29sb3IgYmx1ZUNvbXBvbmVudF0pKTsKLSAgICAKLSAgICAv
LyBBdHRlbXB0IHRvIG1ha2UgdGhlIHNlbGVjdGlvbiA2MCUgdHJhbnNwYXJlbnQuICBXZSBkbyB0
aGlzIGJ5IGFwcGx5aW5nIGEgc3RhbmRhcmQgYmxlbmQgYW5kIHRoZW4KLSAgICAvLyBzZWVpbmcg
aWYgdGhlIHJlc3VsdGFudCBjb2xvciBpcyBzdGlsbCB3aXRoaW4gdGhlIDAtMjU1IHJhbmdlLgot
ICAgIGludCBhbHBoYSA9IDE1MzsKLSAgICBpbnQgcmVkID0gZ2V0QmxlbmRlZENvbG9yQ29tcG9u
ZW50KGNvbC5yZWQoKSwgYWxwaGEpOwotICAgIGludCBncmVlbiA9IGdldEJsZW5kZWRDb2xvckNv
bXBvbmVudChjb2wuZ3JlZW4oKSwgYWxwaGEpOwotICAgIGludCBibHVlID0gZ2V0QmxlbmRlZENv
bG9yQ29tcG9uZW50KGNvbC5ibHVlKCksIGFscGhhKTsKLSAgICBpZiAocmVkID49IDAgJiYgcmVk
IDw9IDI1NSAmJiBncmVlbiA+PSAwICYmIGdyZWVuIDw9IDI1NSAmJiBibHVlID49IDAgJiYgYmx1
ZSA8PSAyNTUpCi0gICAgICAgIHJldHVybiBDb2xvcihyZWQsIGdyZWVuLCBibHVlLCBhbHBoYSk7
Ci0gICAgcmV0dXJuIGNvbDsKLX0KLQogdm9pZCBHcmFwaGljc0NvbnRleHQ6OmZpbGxSZWN0KGNv
bnN0IEludFJlY3QmIHJlY3QsIGNvbnN0IENvbG9yJiBjb2xvcikKIHsKICAgICBpZiAocGFpbnRp
bmdEaXNhYmxlZCgpKQogICAgICAgICByZXR1cm47Ci0KLSAgICAvLyBGSVhNRTogVGhpcyBmdW5j
dGlvbiBjdXJyZW50bHkgd29ya3Mgb25seSB3aGVuIHRoZSBjdXJyZW50IGNvbnRleHQgaXMgdGhl
IGN1cnJlbnQgTlNHcmFwaGljc0NvbnRleHQuCi0gICAgQVNTRVJUKHBsYXRmb3JtQ29udGV4dCgp
ID09IFtbTlNHcmFwaGljc0NvbnRleHQgY3VycmVudENvbnRleHRdIGdyYXBoaWNzUG9ydF0pOwot
Ci0gICAgaWYgKGNvbG9yLmFscGhhKCkpCi0gICAgICAgIGZpbGxSZWN0U291cmNlT3ZlcihyZWN0
LCBjb2xvci5yZ2IoKSk7CisgICAgaWYgKGNvbG9yLmFscGhhKCkpIHsKKyAgICAgICAgQ0dDb250
ZXh0UmVmIGNvbnRleHQgPSBwbGF0Zm9ybUNvbnRleHQoKTsKKyAgICAgICAgQ0dDb250ZXh0U2V0
RmlsbENvbG9yV2l0aENvbG9yKGNvbnRleHQsIGNnQ29sb3IoY29sb3IpKTsKKyAgICAgICAgQ0dD
b250ZXh0RmlsbFJlY3QoY29udGV4dCwgcmVjdCk7CisgICAgfQogfQogCiB2b2lkIEdyYXBoaWNz
Q29udGV4dDo6YWRkQ2xpcChjb25zdCBJbnRSZWN0JiByZWN0KQogewogICAgIGlmIChwYWludGlu
Z0Rpc2FibGVkKCkpCiAgICAgICAgIHJldHVybjsKLQogICAgIENHQ29udGV4dENsaXBUb1JlY3Qo
cGxhdGZvcm1Db250ZXh0KCksIHJlY3QpOwogfQogCkBAIC00NTcsMTggKzM2Myw2IEBACiAgICAg
Q0dDb250ZXh0Q2xpcChjb250ZXh0KTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6OnNldEZv
Y3VzUmluZ0NsaXAoY29uc3QgSW50UmVjdCYgcikKLXsKLSAgICAvLyBUaGlzIG1ldGhvZCBvbmx5
IGV4aXN0cyB0byB3b3JrIGFyb3VuZCBidWdzIGluIE1hYyBmb2N1cyByaW5nIGNsaXBwaW5nLgot
ICAgIG1fZGF0YS0+bV9mb2N1c1JpbmdDbGlwID0gcjsKLX0KLQotdm9pZCBHcmFwaGljc0NvbnRl
eHQ6OmNsZWFyRm9jdXNSaW5nQ2xpcCgpCi17Ci0gICAgLy8gVGhpcyBtZXRob2Qgb25seSBleGlz
dHMgdG8gd29yayBhcm91bmQgYnVncyBpbiBNYWMgZm9jdXMgcmluZyBjbGlwcGluZy4KLSAgICBt
X2RhdGEtPm1fZm9jdXNSaW5nQ2xpcCA9IEludFJlY3QoKTsKLX0KLQogI2lmIFNWR19TVVBQT1JU
CiBLUmVuZGVyaW5nRGV2aWNlQ29udGV4dCogR3JhcGhpY3NDb250ZXh0OjpjcmVhdGVSZW5kZXJp
bmdEZXZpY2VDb250ZXh0KCkKIHsKQEAgLTUxOCw5OCArNDEyLDQ4IEBACiB7CiAgICAgaWYgKHBh
aW50aW5nRGlzYWJsZWQoKSkKICAgICAgICAgcmV0dXJuOwotICAgIENHQ29udGV4dFJlZiBjb250
ZXh0ID0gcGxhdGZvcm1Db250ZXh0KCk7Ci0gICAgQ0dDb250ZXh0U2V0U2hhZG93V2l0aENvbG9y
KGNvbnRleHQsIENHU2l6ZVplcm8sIDAsIE5VTEwpOworICAgIENHQ29udGV4dFNldFNoYWRvd1dp
dGhDb2xvcihwbGF0Zm9ybUNvbnRleHQoKSwgQ0dTaXplWmVybywgMCwgTlVMTCk7CiB9CiAKLXZv
aWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3Rm9jdXNSaW5nKGNvbnN0IENvbG9yJiBjb2xvcikKK3Zv
aWQgR3JhcGhpY3NDb250ZXh0OjpzZXRMaW5lV2lkdGgoZmxvYXQgd2lkdGgpCiB7CiAgICAgaWYg
KHBhaW50aW5nRGlzYWJsZWQoKSkKICAgICAgICAgcmV0dXJuOwotCi0gICAgaW50IHJhZGl1cyA9
IChmb2N1c1JpbmdXaWR0aCgpIC0gMSkgLyAyOwotICAgIGludCBvZmZzZXQgPSByYWRpdXMgKyBm
b2N1c1JpbmdPZmZzZXQoKTsKLSAgICBDR0NvbG9yUmVmIGNvbG9yUmVmID0gY29sb3IuaXNWYWxp
ZCgpID8gY2dDb2xvcihjb2xvcikgOiAwOwotCi0gICAgQ0dNdXRhYmxlUGF0aFJlZiBmb2N1c1Jp
bmdQYXRoID0gQ0dQYXRoQ3JlYXRlTXV0YWJsZSgpOwotICAgIGNvbnN0IFZlY3RvcjxJbnRSZWN0
PiYgcmVjdHMgPSBmb2N1c1JpbmdSZWN0cygpOwotICAgIHVuc2lnbmVkIHJlY3RDb3VudCA9IHJl
Y3RzLnNpemUoKTsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgcmVjdENvdW50OyBpKysp
Ci0gICAgICAgIENHUGF0aEFkZFJlY3QoZm9jdXNSaW5nUGF0aCwgMCwgQ0dSZWN0SW5zZXQocmVj
dHNbaV0sIC1vZmZzZXQsIC1vZmZzZXQpKTsKLQotICAgIENHQ29udGV4dFJlZiBjb250ZXh0ID0g
cGxhdGZvcm1Db250ZXh0KCk7Ci0KLSAgICAvLyBGSVhNRTogVGhpcyB3b3JrcyBvbmx5IGluc2lk
ZSBhIE5TVmlldydzIGRyYXdSZWN0IG1ldGhvZC4gVGhlIHZpZXcgbXVzdCBiZQotICAgIC8vIGZv
Y3VzZWQgYW5kIHRoaXMgY29udGV4dCBtdXN0IGJlIHRoZSBjdXJyZW50IE5TR3JhcGhpY3NDb250
ZXh0LgotICAgIEFTU0VSVChjb250ZXh0ID09IFtbTlNHcmFwaGljc0NvbnRleHQgY3VycmVudENv
bnRleHRdIGdyYXBoaWNzUG9ydF0pOwotICAgIE5TVmlldyogdmlldyA9IFtOU1ZpZXcgZm9jdXNW
aWV3XTsKLSAgICBBU1NFUlQodmlldyk7Ci0KLSAgICBjb25zdCBOU1JlY3QqIGRyYXdSZWN0czsK
LSAgICBpbnQgY291bnQ7Ci0gICAgW3ZpZXcgZ2V0UmVjdHNCZWluZ0RyYXduOiZkcmF3UmVjdHMg
Y291bnQ6JmNvdW50XTsKLQotICAgIC8vIFdlIGhhdmUgdG8gcGFzcyBpbiBvdXIgb3duIGNsaXAg
cmVjdGFuZ2xlcyBoZXJlIGJlY2F1c2UgYSBidWcgaW4gQ0cKLSAgICAvLyBzZWVtcyB0byBpbmZs
YXRlIHRoZSBjbGlwICh0aHVzIGFsbG93aW5nIHRoZSBmb2N1cyByaW5nIHRvIHBhaW50Ci0gICAg
Ly8gc2xpZ2h0bHkgb3V0c2lkZSB0aGUgY2xpcCkuCi0gICAgTlNSZWN0IHRyYW5zZm9ybWVkQ2xp
cFJlY3QgPSBbdmlldyBjb252ZXJ0UmVjdDptX2RhdGEtPm1fZm9jdXNSaW5nQ2xpcCB0b1ZpZXc6
bmlsXTsKLSAgICBmb3IgKGludCBpID0gMDsgaSA8IGNvdW50OyArK2kpIHsKLSAgICAgICAgTlNS
ZWN0IHRyYW5zZm9ybWVkUmVjdCA9IFt2aWV3IGNvbnZlcnRSZWN0OmRyYXdSZWN0c1tpXSB0b1Zp
ZXc6bmlsXTsKLSAgICAgICAgTlNSZWN0IHJlY3RUb1VzZSA9IE5TSW50ZXJzZWN0aW9uUmVjdCh0
cmFuc2Zvcm1lZFJlY3QsIHRyYW5zZm9ybWVkQ2xpcFJlY3QpOwotICAgICAgICBpZiAoIU5TSXNF
bXB0eVJlY3QocmVjdFRvVXNlKSkgewotICAgICAgICAgICAgQ0dDb250ZXh0QmVnaW5QYXRoKGNv
bnRleHQpOwotICAgICAgICAgICAgQ0dDb250ZXh0QWRkUGF0aChjb250ZXh0LCBmb2N1c1JpbmdQ
YXRoKTsKLSAgICAgICAgICAgIHdrRHJhd0ZvY3VzUmluZyhjb250ZXh0LCAqKENHUmVjdCAqKSZy
ZWN0VG9Vc2UsIGNvbG9yUmVmLCByYWRpdXMpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgQ0dD
b2xvclJlbGVhc2UoY29sb3JSZWYpOwotCi0gICAgQ0dQYXRoUmVsZWFzZShmb2N1c1JpbmdQYXRo
KTsKLX0KLQotQ0dDb250ZXh0UmVmIEdyYXBoaWNzQ29udGV4dDo6cGxhdGZvcm1Db250ZXh0KCkg
Y29uc3QKLXsKLSAgICBBU1NFUlQoIXBhaW50aW5nRGlzYWJsZWQoKSk7Ci0gICAgQVNTRVJUKG1f
ZGF0YS0+bV9jZ0NvbnRleHQpOwotICAgIHJldHVybiBtX2RhdGEtPm1fY2dDb250ZXh0OwotfQot
Ci12b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0TGluZVdpZHRoKGZsb2F0IHdpZHRoKQotewogICAg
IENHQ29udGV4dFNldExpbmVXaWR0aChwbGF0Zm9ybUNvbnRleHQoKSwgd2lkdGgpOwogfQogCiB2
b2lkIEdyYXBoaWNzQ29udGV4dDo6c2V0TWl0ZXJMaW1pdChmbG9hdCBsaW1pdCkKIHsKKyAgICBp
ZiAocGFpbnRpbmdEaXNhYmxlZCgpKQorICAgICAgICByZXR1cm47CiAgICAgQ0dDb250ZXh0U2V0
TWl0ZXJMaW1pdChwbGF0Zm9ybUNvbnRleHQoKSwgbGltaXQpOwogfQogCiB2b2lkIEdyYXBoaWNz
Q29udGV4dDo6c2V0QWxwaGEoZmxvYXQgYWxwaGEpCiB7CisgICAgaWYgKHBhaW50aW5nRGlzYWJs
ZWQoKSkKKyAgICAgICAgcmV0dXJuOwogICAgIENHQ29udGV4dFNldEFscGhhKHBsYXRmb3JtQ29u
dGV4dCgpLCBhbHBoYSk7CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0OjpzZXRDb21wb3NpdGVP
cGVyYXRpb24oQ29tcG9zaXRlT3BlcmF0b3Igb3ApCi17Ci0gICAgTlNBdXRvcmVsZWFzZVBvb2wq
IHBvb2wgPSBbW05TQXV0b3JlbGVhc2VQb29sIGFsbG9jXSBpbml0XTsKLSAgICBbW05TR3JhcGhp
Y3NDb250ZXh0IGdyYXBoaWNzQ29udGV4dFdpdGhHcmFwaGljc1BvcnQ6cGxhdGZvcm1Db250ZXh0
KCkgZmxpcHBlZDpZRVNdCi0gICAgICAgIHNldENvbXBvc2l0aW5nT3BlcmF0aW9uOihOU0NvbXBv
c2l0aW5nT3BlcmF0aW9uKW9wXTsKLSAgICBbcG9vbCByZWxlYXNlXTsKLX0KLQogdm9pZCBHcmFw
aGljc0NvbnRleHQ6OmNsZWFyUmVjdChjb25zdCBGbG9hdFJlY3QmIHIpCiB7CisgICAgaWYgKHBh
aW50aW5nRGlzYWJsZWQoKSkKKyAgICAgICAgcmV0dXJuOwogICAgIENHQ29udGV4dENsZWFyUmVj
dChwbGF0Zm9ybUNvbnRleHQoKSwgcik7CiB9CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpzdHJv
a2VSZWN0KGNvbnN0IEZsb2F0UmVjdCYgciwgZmxvYXQgbGluZVdpZHRoKQogeworICAgIGlmIChw
YWludGluZ0Rpc2FibGVkKCkpCisgICAgICAgIHJldHVybjsKICAgICBDR0NvbnRleHRTdHJva2VS
ZWN0V2l0aFdpZHRoKHBsYXRmb3JtQ29udGV4dCgpLCByLCBsaW5lV2lkdGgpOwogfQogCiB2b2lk
IEdyYXBoaWNzQ29udGV4dDo6c2V0TGluZUNhcChMaW5lQ2FwIGNhcCkKIHsKKyAgICBpZiAocGFp
bnRpbmdEaXNhYmxlZCgpKQorICAgICAgICByZXR1cm47CiAgICAgc3dpdGNoIChjYXApIHsKICAg
ICAgICAgY2FzZSBCdXR0Q2FwOgogICAgICAgICAgICAgQ0dDb250ZXh0U2V0TGluZUNhcChwbGF0
Zm9ybUNvbnRleHQoKSwga0NHTGluZUNhcEJ1dHQpOwpAQCAtNjI1LDYgKzQ2OSw4IEBACiAKIHZv
aWQgR3JhcGhpY3NDb250ZXh0OjpzZXRMaW5lSm9pbihMaW5lSm9pbiBqb2luKQogeworICAgIGlm
IChwYWludGluZ0Rpc2FibGVkKCkpCisgICAgICAgIHJldHVybjsKICAgICBzd2l0Y2ggKGpvaW4p
IHsKICAgICAgICAgY2FzZSBNaXRlckpvaW46CiAgICAgICAgICAgICBDR0NvbnRleHRTZXRMaW5l
Sm9pbihwbGF0Zm9ybUNvbnRleHQoKSwga0NHTGluZUpvaW5NaXRlcik7CkBAIC02NDAsOSArNDg2
LDMzIEBACiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpjbGlwKGNvbnN0IFBhdGgmIHBhdGgpCiB7
Ci0gICAgQ0dDb250ZXh0QmVnaW5QYXRoKHBsYXRmb3JtQ29udGV4dCgpKTsKLSAgICBDR0NvbnRl
eHRBZGRQYXRoKHBsYXRmb3JtQ29udGV4dCgpLCBwYXRoLnBsYXRmb3JtUGF0aCgpKTsKLSAgICBD
R0NvbnRleHRDbGlwKHBsYXRmb3JtQ29udGV4dCgpKTsKKyAgICBpZiAocGFpbnRpbmdEaXNhYmxl
ZCgpKQorICAgICAgICByZXR1cm47CisgICAgQ0dDb250ZXh0UmVmIGNvbnRleHQgPSBwbGF0Zm9y
bUNvbnRleHQoKTsKKyAgICBDR0NvbnRleHRCZWdpblBhdGgoY29udGV4dCk7CisgICAgQ0dDb250
ZXh0QWRkUGF0aChjb250ZXh0LCBwYXRoLnBsYXRmb3JtUGF0aCgpKTsKKyAgICBDR0NvbnRleHRD
bGlwKGNvbnRleHQpOwogfQogCit2b2lkIEdyYXBoaWNzQ29udGV4dDo6c2NhbGUoY29uc3QgRmxv
YXRTaXplJiBzaXplKQoreworICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCisgICAgICAgIHJl
dHVybjsKKyAgICBDR0NvbnRleHRTY2FsZUNUTShwbGF0Zm9ybUNvbnRleHQoKSwgc2l6ZS53aWR0
aCgpLCBzaXplLmhlaWdodCgpKTsKIH0KKwordm9pZCBHcmFwaGljc0NvbnRleHQ6OnJvdGF0ZShm
bG9hdCBhbmdsZSkKK3sKKyAgICBpZiAocGFpbnRpbmdEaXNhYmxlZCgpKQorICAgICAgICByZXR1
cm47CisgICAgQ0dDb250ZXh0Um90YXRlQ1RNKHBsYXRmb3JtQ29udGV4dCgpLCBhbmdsZSk7Cit9
CisKK3ZvaWQgR3JhcGhpY3NDb250ZXh0Ojp0cmFuc2xhdGUoY29uc3QgRmxvYXRTaXplJiBzaXpl
KQoreworICAgIGlmIChwYWludGluZ0Rpc2FibGVkKCkpCisgICAgICAgIHJldHVybjsKKyAgICBD
R0NvbnRleHRUcmFuc2xhdGVDVE0ocGxhdGZvcm1Db250ZXh0KCksIHNpemUud2lkdGgoKSwgc2l6
ZS5oZWlnaHQoKSk7Cit9CisKK30KSW5kZXg6IHBsYXRmb3JtL1dpZGdldC5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIHBsYXRmb3JtL1dpZGdldC5oCShyZXZpc2lvbiAxNDE1NikKKysrIHBsYXRmb3JtL1dpZGdl
dC5oCSh3b3JraW5nIGNvcHkpCkBAIC01Myw4ICs1Myw2IEBACiAgICAgY2xhc3MgV2lkZ2V0Q2xp
ZW50OwogICAgIGNsYXNzIFdpZGdldFByaXZhdGU7CiAKLSAgICBlbnVtIEhvcml6b250YWxBbGln
bm1lbnQgeyBBbGlnbkxlZnQsIEFsaWduUmlnaHQsIEFsaWduSENlbnRlciB9OwotCiAgICAgY2xh
c3MgV2lkZ2V0IHsKICAgICBwdWJsaWM6CiAKSW5kZXg6IGh0bWwvQ2FudmFzUmVuZGVyaW5nQ29u
dGV4dDJELmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBodG1sL0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRC5j
cHAJKHJldmlzaW9uIDE0MTU2KQorKysgaHRtbC9DYW52YXNSZW5kZXJpbmdDb250ZXh0MkQuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0yNzMsMTAgKzI3Myw3IEBACiAgICAgR3JhcGhpY3NDb250ZXh0
KiBjID0gZHJhd2luZ0NvbnRleHQoKTsKICAgICBpZiAoIWMpCiAgICAgICAgIHJldHVybjsKLSAg
ICAvLyBGSVhNRTogRG8gdGhpcyB0aHJvdWdoIHBsYXRmb3JtLWluZGVwZW5kZW50IEdyYXBoaWNz
Q29udGV4dCBBUEkuCi0jaWYgX19BUFBMRV9fCi0gICAgQ0dDb250ZXh0U2NhbGVDVE0oYy0+cGxh
dGZvcm1Db250ZXh0KCksIHN4LCBzeSk7Ci0jZW5kaWYKKyAgICBjLT5zY2FsZShGbG9hdFNpemUo
c3gsIHN5KSk7CiB9CiAKIHZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjpyb3RhdGUoZmxv
YXQgYW5nbGVJblJhZGlhbnMpCkBAIC0yODQsMTAgKzI4MSw3IEBACiAgICAgR3JhcGhpY3NDb250
ZXh0KiBjID0gZHJhd2luZ0NvbnRleHQoKTsKICAgICBpZiAoIWMpCiAgICAgICAgIHJldHVybjsK
LSAgICAvLyBGSVhNRTogRG8gdGhpcyB0aHJvdWdoIHBsYXRmb3JtLWluZGVwZW5kZW50IEdyYXBo
aWNzQ29udGV4dCBBUEkuCi0jaWYgX19BUFBMRV9fCi0gICAgQ0dDb250ZXh0Um90YXRlQ1RNKGMt
PnBsYXRmb3JtQ29udGV4dCgpLCBhbmdsZUluUmFkaWFucyk7Ci0jZW5kaWYKKyAgICBjLT5yb3Rh
dGUoYW5nbGVJblJhZGlhbnMpOwogfQogCiB2b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6
dHJhbnNsYXRlKGZsb2F0IHR4LCBmbG9hdCB0eSkKQEAgLTI5NSwxMCArMjg5LDcgQEAKICAgICBH
cmFwaGljc0NvbnRleHQqIGMgPSBkcmF3aW5nQ29udGV4dCgpOwogICAgIGlmICghYykKICAgICAg
ICAgcmV0dXJuOwotICAgIC8vIEZJWE1FOiBEbyB0aGlzIHRocm91Z2ggcGxhdGZvcm0taW5kZXBl
bmRlbnQgR3JhcGhpY3NDb250ZXh0IEFQSS4KLSNpZiBfX0FQUExFX18KLSAgICBDR0NvbnRleHRU
cmFuc2xhdGVDVE0oYy0+cGxhdGZvcm1Db250ZXh0KCksIHR4LCB0eSk7Ci0jZW5kaWYKKyAgICBj
LT50cmFuc2xhdGUoRmxvYXRTaXplKHR4LCB0eSkpOwogfQogCiB2b2lkIENhbnZhc1JlbmRlcmlu
Z0NvbnRleHQyRDo6c2V0U3Ryb2tlQ29sb3IoY29uc3QgU3RyaW5nJiBjb2xvcikKSW5kZXg6IFdl
YkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlLnhj
b2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDE0MTU2KQorKysgV2ViQ29yZS54Y29k
ZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC0zMDUsNiArMzA1LDcgQEAK
IAkJOTM1RkJDNDUwOUJBMDBCOTAwRTIzMEIxIC8qIEV2ZW50TGlzdGVuZXIuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDkzNUZCQzQ0MDlCQTAwQjkwMEUy
MzBCMSAvKiBFdmVudExpc3RlbmVyLmggKi87IH07CiAJCTkzNUZCQ0YyMDlCQTE0M0IwMEUyMzBC
MSAvKiBFeGNlcHRpb25Db2RlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSA5MzVGQkNGMTA5QkExNDNCMDBFMjMwQjEgLyogRXhjZXB0aW9uQ29kZS5oICov
OyB9OwogCQk5MzZCNDI0RTA5QTQzNkNEMDBCQUE4MjAgLyogU1ZHQ1NTUGFyc2VyLmNwcCBpbiBT
b3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE4QzBGNkY2MDg5NzAx
RjEwMEJBNTExNCAvKiBTVkdDU1NQYXJzZXIuY3BwICovOyB9OworCQk5MzZCREQxRDBBMDMxQUVC
MDA0REY0QUIgLyogR3JhcGhpY3NDb250ZXh0Q0cuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTM2QkREMUMwQTAzMUFFQjAwNERGNEFCIC8qIEdyYXBo
aWNzQ29udGV4dENHLmNwcCAqLzsgfTsKIAkJOTM4MEY0NzMwOUExMUFCNDAwMUZEQjM0IC8qIFdp
ZGdldC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5
MzgwRjQ3MTA5QTExQUI0MDAxRkRCMzQgLyogV2lkZ2V0LmNwcCAqLzsgfTsKIAkJOTM4MEY0NzQw
OUExMUFCNDAwMUZEQjM0IC8qIFdpZGdldC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gOTM4MEY0NzIwOUExMUFCNDAwMUZEQjM0IC8qIFdpZGdldC5oICov
OyB9OwogCQk5MzgwRjQ3ODA5QTExQUNDMDAxRkRCMzQgLyogV2lkZ2V0TWFjLm1tIGluIFNvdXJj
ZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTM4MEY0NzcwOUExMUFDQzAw
MUZEQjM0IC8qIFdpZGdldE1hYy5tbSAqLzsgfTsKQEAgLTE1NjgsNiArMTU2OSw3IEBACiAJCTkz
NUM0Nzc0MDlBQzREOEQwMEE2QUFCNCAvKiBHYXBSZWN0cy5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBHYXBSZWN0cy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk5
MzVGQkM0NDA5QkEwMEI5MDBFMjMwQjEgLyogRXZlbnRMaXN0ZW5lci5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBFdmVudExpc3RlbmVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCTkzNUZCQ0YxMDlCQTE0M0IwMEUyMzBCMSAvKiBFeGNlcHRpb25Db2RlLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEV4Y2VwdGlvbkNvZGUuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKKwkJOTM2QkREMUMwQTAzMUFFQjAwNERGNEFCIC8qIEdyYXBoaWNz
Q29udGV4dENHLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEdyYXBo
aWNzQ29udGV4dENHLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJOTM2REQwM0Ew
OUNFQUMyNzAwNTZBRThDIC8qIFJhbmdlLmlkbCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQ7IHBhdGggPSBSYW5n
ZS5pZGw7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTkzODBGNDcxMDlBMTFBQjQwMDFG
REIzNCAvKiBXaWRnZXQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9
IFdpZGdldC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTkzODBGNDcyMDlBMTFB
QjQwMDFGREIzNCAvKiBXaWRnZXQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IFdpZGdldC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMjkyOCw2ICsyOTMwLDcg
QEAKIAkJOTMwMzJDQ0MwOUFFQzM2MjAwRjgyQTE4IC8qIGNnICovID0gewogCQkJaXNhID0gUEJY
R3JvdXA7CiAJCQljaGlsZHJlbiA9ICgKKwkJCQk5MzZCREQxQzBBMDMxQUVCMDA0REY0QUIgLyog
R3JhcGhpY3NDb250ZXh0Q0cuY3BwICovLAogCQkJCTkzMDMyQ0M3MDlBRUMzNDMwMEY4MkExOCAv
KiBQYXRoQ0cuY3BwICovLAogCQkJKTsKIAkJCXBhdGggPSBjZzsKQEAgLTU1NjIsNiArNTU2NSw3
IEBACiAJCQkJQkNGRThFMzIwQTAyQTFEMzAwMDlFNjFEIC8qIFdlYkNvcmVUZXh0UmVuZGVyZXIu
bW0gaW4gU291cmNlcyAqLywKIAkJCQkxNERDMEQzNzA5RkVEMDczMDA3QjAyMzUgLyogSlNOb2Rl
LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTE0MjAxMUI2MEEwMDMxMzMwMDgzMDNGOSAvKiBKU0NT
U1N0eWxlRGVjbGFyYXRpb24uY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJOTM2QkREMUQwQTAzMUFF
QjAwNERGNEFCIC8qIEdyYXBoaWNzQ29udGV4dENHLmNwcCBpbiBTb3VyY2VzICovLAogCQkJKTsK
IAkJCXJ1bk9ubHlGb3JEZXBsb3ltZW50UG9zdHByb2Nlc3NpbmcgPSAwOwogCQl9OwpJbmRleDog
Q2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIENoYW5nZUxvZwkocmV2aXNpb24gMTQxNTcpCisrKyBD
aGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSw1MyBAQAorMjAwNi0wNS0wMiAgRGFy
aW4gQWRsZXIgIDxkYXJpbkBhcHBsZS5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCisKKyAgICAgICAgLSBodHRwOi8vYnVnemlsbGEub3BlbmRhcndpbi5vcmcvc2hv
d19idWcuY2dpP2lkPTg2OTYKKyAgICAgICAgICBhbm90aGVyIHJvdW5kIG9mIEdyYXBoaWNzQ29u
dGV4dCBpbXByb3ZlbWVudHMKKworICAgICAgICAqIFdlYkNvcmUueGNvZGVwcm9qL3Byb2plY3Qu
cGJ4cHJvajogQWRkZWQgR3JhcGhpY3NDb250ZXh0Q0cuY3BwLgorICAgICAgICAqIGh0bWwvQ2Fu
dmFzUmVuZGVyaW5nQ29udGV4dDJELmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNhbnZhc1JlbmRl
cmluZ0NvbnRleHQyRDo6c2NhbGUpOiBVc2UgbmV3IEdyYXBoaWNzQ29udGV4dCBmdW5jdGlvbi4K
KyAgICAgICAgKFdlYkNvcmU6OkNhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6cm90YXRlKTogRGl0
dG8uCisgICAgICAgIChXZWJDb3JlOjpDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6OnRyYW5zbGF0
ZSk6IERpdHRvLgorICAgICAgICAqIGt3cS9LV1FDb21ib0JveC5tbTogQWRkZWQgaW5jbHVkZSAo
bm90IHN1cmUgaWYgdGhpcyBpcyBuZWVkZWQgZm9yIHRoaXMgcGF0Y2gsCisgICAgICAgIGJ1dCBp
dCdzIG5lZWRlZCBmb3Igb25lIG9mIG15IHVwY29taW5nIG9uZXMpLgorCisgICAgICAgICogcGxh
dGZvcm0vR3JhcGhpY3NDb250ZXh0Lmg6IENoYW5nZWQgZmlsbENvbG9yIGFuZCBzZXRGaWxsQ29s
b3IgdG8gdXNlIENvbG9yCisgICAgICAgIGluc3RlYWQgb2YgUkdCQTMyLiBSZW1vdmVkIHNldENv
bG9yRnJvbUZpbGxDb2xvciBhbmQgc2V0Q29sb3JGcm9tUGVuLiBBZGRlZAorICAgICAgICBzY2Fs
ZSwgcm90YXRlLCBhbmQgdHJhbnNsYXRlIGZ1bmN0aW9ucy4KKyAgICAgICAgKiBwbGF0Zm9ybS9H
cmFwaGljc0NvbnRleHQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0Ojpz
ZXRGaWxsQ29sb3IpOiBDaGFuZ2VkIHRvIHVzZSBDb2xvciBpbnN0ZWFkIG9mIFJHQkEzMi4KKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6ZmlsbENvbG9yKTogRGl0dG8uCisKKyAg
ICAgICAgKiBwbGF0Zm9ybS9HcmFwaGljc1R5cGVzLmg6IE1vdmVkIEhvcml6b250YWxBbGlnbm1l
bnQgaGVyZS4KKyAgICAgICAgKiBwbGF0Zm9ybS9XaWRnZXQuaDogUmVtb3ZlZCBIb3Jpem9udGFs
QWxpZ25tZW50IGZyb20gaGVyZS4KKworICAgICAgICAqIHBsYXRmb3JtL2NnL0dyYXBoaWNzQ29u
dGV4dENHLmNwcDogQWRkZWQuIFN0YXJ0ZWQgYXMgYSBjb3B5IG9mIEdyYXBoaWNzQ29udGV4dE1h
Yy5tbS4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6ZHJhd1JlY3QpOiBSZXdy
b3RlIHRvIG5vdCByZWx5IG9uIFtOU0dyYXBoaWNzQ29udGV4dCBjdXJyZW50Q29udGV4dF0uCisg
ICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmRyYXdMaW5lKTogRGl0dG8uCisgICAg
ICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmRyYXdFbGxpcHNlKTogRGl0dG8uCisgICAg
ICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmRyYXdBcmMpOiBEaXR0by4KKyAgICAgICAg
KFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6ZHJhd0NvbnZleFBvbHlnb24pOiBEaXR0by4KKyAg
ICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6ZmlsbFJlY3QpOiBEaXR0by4KKyAgICAg
ICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6c2V0TGluZVdpZHRoKTogIEFkZGVkIGNoZWNr
IG9mIHBhaW50aW5nRGlzYWJsZWQoKS4gCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHQ6OnNldE1pdGVyTGltaXQpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29u
dGV4dDo6c2V0QWxwaGEpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dDo6Y2xlYXJSZWN0KTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6
OnN0cm9rZVJlY3QpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dDo6
c2V0TGluZUNhcCk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0Ojpz
ZXRMaW5lSm9pbik6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0Ojpj
bGlwKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OnNjYWxlKTog
QWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OnJvdGF0ZSk6IEFkZGVk
LgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0Ojp0cmFuc2xhdGUpOiBBZGRlZC4K
KworICAgICAgICAqIHBsYXRmb3JtL21hYy9HcmFwaGljc0NvbnRleHRNYWMubW06IE1vdmVkIG1v
c3Qgb2YgdGhpcyBmaWxlIGludG8gR3JhcGhpY3NDb250ZXh0Q0cuY3BwLgorICAgICAgICAoV2Vi
Q29yZTo6R3JhcGhpY3NDb250ZXh0OjpzZXRDb21wb3NpdGVPcGVyYXRpb24pOiBBZGRlZCBjaGVj
ayBvZiBwYWludGluZ0Rpc2FibGVkKCkuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9tYWMvV2ViQ29y
ZVN5c3RlbUludGVyZmFjZS5oOiBBZGRlZCBkZWNsYXJhdGlvbnMgc28gdGhpcyBoZWFkZXIKKyAg
ICAgICAgc3RhbmRzIGFsb25lLgorCiAyMDA2LTA1LTAyICBBbmRlcnMgQ2FybHNzb24gIDxhbmRl
cnNjYUBtYWMuY29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5IERhdmUgSHlhdHQuCkluZGV4OiBr
d3EvS1dRVGV4dEVkaXQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBrd3EvS1dRVGV4dEVkaXQuaAkocmV2aXNp
b24gMTQxNTYpCisrKyBrd3EvS1dRVGV4dEVkaXQuaAkod29ya2luZyBjb3B5KQpAQCAtMjYsNiAr
MjYsNyBAQAogI2lmbmRlZiBRVEVYVEVESVRfSF8KICNkZWZpbmUgUVRFWFRFRElUX0hfCiAKKyNp
bmNsdWRlICJHcmFwaGljc1R5cGVzLmgiCiAjaW5jbHVkZSAiU2Nyb2xsVmlldy5oIgogI2luY2x1
ZGUgIlRleHREaXJlY3Rpb24uaCIKIApJbmRleDoga3dxL0tXUUNvbWJvQm94Lm1tCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIGt3cS9LV1FDb21ib0JveC5tbQkocmV2aXNpb24gMTQxNTYpCisrKyBrd3EvS1dRQ29t
Ym9Cb3gubW0JKHdvcmtpbmcgY29weSkKQEAgLTI5LDYgKzI5LDcgQEAKICNpbXBvcnQgIkJsb2Nr
RXhjZXB0aW9ucy5oIgogI2ltcG9ydCAiRm91bmRhdGlvbkV4dHJhcy5oIgogI2ltcG9ydCAiRnJh
bWVNYWMuaCIKKyNpbXBvcnQgIktXUUxpbmVFZGl0LmgiCiAjaW1wb3J0ICJXZWJDb3JlRnJhbWVC
cmlkZ2UuaCIKICNpbXBvcnQgIldlYlRleHRSZW5kZXJlci5oIgogI2ltcG9ydCAiV2ViVGV4dFJl
bmRlcmVyRmFjdG9yeS5oIgpJbmRleDoga3dxL0tXUUxpbmVFZGl0LmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
a3dxL0tXUUxpbmVFZGl0LmgJKHJldmlzaW9uIDE0MTU2KQorKysga3dxL0tXUUxpbmVFZGl0LmgJ
KHdvcmtpbmcgY29weSkKQEAgLTI2LDYgKzI2LDcgQEAKICNpZm5kZWYgUUxpbmVFZGl0X0gKICNk
ZWZpbmUgUUxpbmVFZGl0X0gKIAorI2luY2x1ZGUgIkdyYXBoaWNzVHlwZXMuaCIKICNpbmNsdWRl
ICJQbGF0Zm9ybVN0cmluZy5oIgogI2luY2x1ZGUgIlRleHREaXJlY3Rpb24uaCIKICNpbmNsdWRl
ICJXaWRnZXQuaCIK
</data>
<flag name="review"
          id="2237"
          type_id="1"
          status="+"
          setter="eric"
    />
          </attachment>
      

    </bug>

</bugzilla>