<?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>150004</bug_id>
          
          <creation_ts>2015-10-10 13:17:32 -0700</creation_ts>
          <short_desc>Remove InsertionPoint and ContentDistributor</short_desc>
          <delta_ts>2015-10-11 00:20: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>DOM</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>149698</dependson>
          <blocked>149997</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Antti Koivisto">koivisto</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>rniwa</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1132159</commentid>
    <comment_count>0</comment_count>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2015-10-10 13:17:32 -0700</bug_when>
    <thetext>Now that &lt;details&gt; is on top of the modern Shadow DOM remove the last vestiges of the V0 Shadow DOM API.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1132161</commentid>
    <comment_count>1</comment_count>
      <attachid>262831</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2015-10-10 14:15:06 -0700</bug_when>
    <thetext>Created attachment 262831
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1132166</commentid>
    <comment_count>2</comment_count>
      <attachid>262831</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2015-10-10 15:16:32 -0700</bug_when>
    <thetext>Comment on attachment 262831
patch

rs=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1132224</commentid>
    <comment_count>3</comment_count>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2015-10-11 00:20:18 -0700</bug_when>
    <thetext>https://trac.webkit.org/r190845</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>262831</attachid>
            <date>2015-10-10 14:15:06 -0700</date>
            <delta_ts>2015-10-10 15:16:32 -0700</delta_ts>
            <desc>patch</desc>
            <filename>remove-insertionpoint.patch</filename>
            <type>text/plain</type>
            <size>49178</size>
            <attacher name="Antti Koivisto">koivisto</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE5MDg0MSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDY2IEBACisyMDE1LTEwLTEwICBBbnR0aSBL
b2l2aXN0byAgPGFudHRpQGFwcGxlLmNvbT4KKworICAgICAgICBSZW1vdmUgSW5zZXJ0aW9uUG9p
bnQgYW5kIENvbnRlbnREaXN0cmlidXRvcgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MTUwMDA0CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChP
T1BTISkuCisKKyAgICAgICAgTm93IHRoYXQgPGRldGFpbHM+IGlzIG9uIHRvcCBvZiB0aGUgbW9k
ZXJuIFNoYWRvdyBET00gcmVtb3ZlIHRoZSBsYXN0IHZlc3RpZ2VzIG9mIHRoZSBWMCBTaGFkb3cg
RE9NIEFQSS4KKworICAgICAgICAqIENNYWtlTGlzdHMudHh0OgorICAgICAgICAqIFdlYkNvcmUu
dmN4cHJvai9XZWJDb3JlLnZjeHByb2o6CisgICAgICAgICogV2ViQ29yZS54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qOgorICAgICAgICAqIGNzcy9TZWxlY3RvckNoZWNrZXIuY3BwOgorICAgICAg
ICAqIGNzcy9TdHlsZVJlc29sdmVyLmNwcDoKKyAgICAgICAgKiBkb20vQ29udGFpbmVyTm9kZS5j
cHA6CisgICAgICAgICogZG9tL0VsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6c2hvdWxk
VXNlTm9kZVJlbmRlcmluZ1RyYXZlcnNhbFNsb3dQYXRoKToKKyAgICAgICAgKFdlYkNvcmU6OkVs
ZW1lbnQ6OnJlc2V0TmVlZHNOb2RlUmVuZGVyaW5nVHJhdmVyc2FsU2xvd1BhdGgpOgorICAgICAg
ICAqIGRvbS9Ob2RlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Ok5vZGU6OnBhcmVudE9yU2hhZG93
SG9zdEVsZW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6Tm9kZTo6aW5zZXJ0ZWRJbnRvKToKKyAg
ICAgICAgKFdlYkNvcmU6Ok5vZGU6Omluc2VydGlvblBhcmVudEZvckJpbmRpbmcpOiBEZWxldGVk
LgorICAgICAgICAqIGRvbS9Ob2RlLmg6CisgICAgICAgIChXZWJDb3JlOjpOb2RlOjppc0NoYXJh
Y3RlckRhdGFOb2RlKToKKyAgICAgICAgKFdlYkNvcmU6Ok5vZGU6OmlzRnJhbWVPd25lckVsZW1l
bnQpOgorICAgICAgICAoV2ViQ29yZTo6Tm9kZTo6aXNQbHVnaW5FbGVtZW50KToKKyAgICAgICAg
KFdlYkNvcmU6Ok5vZGU6OmlzSW1hZ2VDb250cm9sc1Jvb3RFbGVtZW50KToKKyAgICAgICAgKFdl
YkNvcmU6Ok5vZGU6OmlzSW1hZ2VDb250cm9sc0J1dHRvbkVsZW1lbnQpOgorICAgICAgICAoV2Vi
Q29yZTo6Tm9kZTo6aXNEb2N1bWVudEZyYWdtZW50KToKKyAgICAgICAgKFdlYkNvcmU6Ok5vZGU6
OmlzU2hhZG93Um9vdCk6CisgICAgICAgIChXZWJDb3JlOjpOb2RlOjppc0luc2VydGlvblBvaW50
Tm9kZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpOb2RlOjppc0luc2VydGlvblBvaW50
KTogRGVsZXRlZC4KKyAgICAgICAgKiBkb20vTm9kZVJlbmRlcmluZ1RyYXZlcnNhbC5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpOb2RlUmVuZGVyaW5nVHJhdmVyc2FsOjp0cmF2ZXJzZVBhcmVudCk6
CisgICAgICAgIChXZWJDb3JlOjpOb2RlUmVuZGVyaW5nVHJhdmVyc2FsOjp0cmF2ZXJzZUZpcnN0
Q2hpbGQpOgorICAgICAgICAoV2ViQ29yZTo6Tm9kZVJlbmRlcmluZ1RyYXZlcnNhbDo6dHJhdmVy
c2VMYXN0Q2hpbGQpOgorICAgICAgICAoV2ViQ29yZTo6Tm9kZVJlbmRlcmluZ1RyYXZlcnNhbDo6
dHJhdmVyc2VOZXh0U2libGluZyk6CisgICAgICAgIChXZWJDb3JlOjpOb2RlUmVuZGVyaW5nVHJh
dmVyc2FsOjp0cmF2ZXJzZVByZXZpb3VzU2libGluZyk6CisgICAgICAgIChXZWJDb3JlOjpOb2Rl
UmVuZGVyaW5nVHJhdmVyc2FsOjpwYXJlbnRTbG93KToKKyAgICAgICAgKFdlYkNvcmU6Ok5vZGVS
ZW5kZXJpbmdUcmF2ZXJzYWw6Om5leHRJblNjb3BlKToKKyAgICAgICAgKFdlYkNvcmU6Ok5vZGVS
ZW5kZXJpbmdUcmF2ZXJzYWw6OnByZXZpb3VzSW5TY29wZSk6CisgICAgICAgIChXZWJDb3JlOjpO
b2RlUmVuZGVyaW5nVHJhdmVyc2FsOjpwYXJlbnRJblNjb3BlKToKKyAgICAgICAgKFdlYkNvcmU6
Ok5vZGVSZW5kZXJpbmdUcmF2ZXJzYWw6Omxhc3RDaGlsZEluU2NvcGUpOgorICAgICAgICAoV2Vi
Q29yZTo6Tm9kZVJlbmRlcmluZ1RyYXZlcnNhbDo6bm9kZUNhbkJlRGlzdHJpYnV0ZWQpOiBEZWxl
dGVkLgorICAgICAgICAoV2ViQ29yZTo6Tm9kZVJlbmRlcmluZ1RyYXZlcnNhbDo6ZmluZEZpcnN0
U2libGluZ0VudGVyaW5nSW5zZXJ0aW9uUG9pbnRzKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNv
cmU6Ok5vZGVSZW5kZXJpbmdUcmF2ZXJzYWw6OmZpbmRGaXJzdEVudGVyaW5nSW5zZXJ0aW9uUG9p
bnRzKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6Ok5vZGVSZW5kZXJpbmdUcmF2ZXJzYWw6
OmZpbmRGaXJzdEZyb21EaXN0cmlidXRlZE5vZGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29y
ZTo6Tm9kZVJlbmRlcmluZ1RyYXZlcnNhbDo6ZmluZExhc3RTaWJsaW5nRW50ZXJpbmdJbnNlcnRp
b25Qb2ludHMpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6Tm9kZVJlbmRlcmluZ1RyYXZl
cnNhbDo6ZmluZExhc3RFbnRlcmluZ0luc2VydGlvblBvaW50cyk6IERlbGV0ZWQuCisgICAgICAg
IChXZWJDb3JlOjpOb2RlUmVuZGVyaW5nVHJhdmVyc2FsOjpmaW5kTGFzdEZyb21EaXN0cmlidXRl
ZE5vZGUpOiBEZWxldGVkLgorICAgICAgICAqIGRvbS9TaGFkb3dSb290Lmg6CisgICAgICAgIChX
ZWJDb3JlOjpTaGFkb3dSb290OjpkaXN0cmlidXRvcik6IERlbGV0ZWQuCisgICAgICAgICogaHRt
bC9IVE1MSW5wdXRFbGVtZW50LmNwcDoKKyAgICAgICAgKiBodG1sL0hUTUxTbG90RWxlbWVudC5j
cHA6CisgICAgICAgICogaHRtbC9IVE1MU2xvdEVsZW1lbnQuaDoKKyAgICAgICAgKiBodG1sL3No
YWRvdy9Db250ZW50RGlzdHJpYnV0b3IuY3BwOiBSZW1vdmVkLgorICAgICAgICAqIGh0bWwvc2hh
ZG93L0NvbnRlbnREaXN0cmlidXRvci5oOiBSZW1vdmVkLgorICAgICAgICAqIGh0bWwvc2hhZG93
L0luc2VydGlvblBvaW50LmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiBodG1sL3NoYWRvdy9JbnNl
cnRpb25Qb2ludC5oOiBSZW1vdmVkLgorICAgICAgICAqIHBhZ2UvRm9jdXNDb250cm9sbGVyLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OkZvY3VzQ29udHJvbGxlcjo6cHJldmlvdXNGb2N1c2FibGVF
bGVtZW50KToKKyAgICAgICAgKiB0ZXN0aW5nL0ludGVybmFscy5jcHA6CisKIDIwMTUtMTAtMTAg
IERhbiBCZXJuc3RlaW4gIDxtaXR6QGFwcGxlLmNvbT4KIAogICAgICAgICBbaU9TXSBSZW1vdmUg
dW5uZWNlc3NhcnkgaU9TIHZlcnNpb24gY2hlY2tzCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9DTWFr
ZUxpc3RzLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9DTWFrZUxpc3RzLnR4dAko
cmV2aXNpb24gMTkwODQwKQorKysgU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQJKHdvcmtp
bmcgY29weSkKQEAgLTE4NDMsOSArMTg0Myw3IEBAIHNldChXZWJDb3JlX1NPVVJDRVMKICAgICBo
dG1sL3BhcnNlci9YU1NBdWRpdG9yRGVsZWdhdGUuY3BwCiAKICAgICBodG1sL3NoYWRvdy9BdXRv
RmlsbEJ1dHRvbkVsZW1lbnQuY3BwCi0gICAgaHRtbC9zaGFkb3cvQ29udGVudERpc3RyaWJ1dG9y
LmNwcAogICAgIGh0bWwvc2hhZG93L0RldGFpbHNNYXJrZXJDb250cm9sLmNwcAotICAgIGh0bWwv
c2hhZG93L0luc2VydGlvblBvaW50LmNwcAogICAgIGh0bWwvc2hhZG93L01lZGlhQ29udHJvbEVs
ZW1lbnRUeXBlcy5jcHAKICAgICBodG1sL3NoYWRvdy9NZWRpYUNvbnRyb2xFbGVtZW50cy5jcHAK
ICAgICBodG1sL3NoYWRvdy9NZWRpYUNvbnRyb2xzLmNwcApJbmRleDogU291cmNlL1dlYkNvcmUv
V2ViQ29yZS52Y3hwcm9qL1dlYkNvcmUudmN4cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9XZWJDb3JlLnZjeHByb2ovV2ViQ29yZS52Y3hwcm9qCShyZXZpc2lvbiAxOTA4NDApCisr
KyBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnZjeHByb2ovV2ViQ29yZS52Y3hwcm9qCSh3b3JraW5n
IGNvcHkpCkBAIC0xNzMxNSw5ICsxNzMxNSw3IEBACiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIu
LlxodG1sXHBhcnNlclxYU1NBdWRpdG9yLmNwcCIgLz4KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9
Ii4uXGh0bWxccGFyc2VyXFhTU0F1ZGl0b3JEZWxlZ2F0ZS5jcHAiIC8+CiAgICAgPENsQ29tcGls
ZSBJbmNsdWRlPSIuLlxodG1sXHNoYWRvd1xBdXRvRmlsbEJ1dHRvbkVsZW1lbnQuY3BwIiAvPgot
ICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5caHRtbFxzaGFkb3dcQ29udGVudERpc3RyaWJ1dG9y
LmNwcCIgLz4KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGh0bWxcc2hhZG93XERldGFpbHNN
YXJrZXJDb250cm9sLmNwcCIgLz4KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGh0bWxcc2hh
ZG93XEluc2VydGlvblBvaW50LmNwcCIgLz4KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGh0
bWxcc2hhZG93XE1lZGlhQ29udHJvbEVsZW1lbnRzLmNwcCIgLz4KICAgICA8Q2xDb21waWxlIElu
Y2x1ZGU9Ii4uXGh0bWxcc2hhZG93XE1lZGlhQ29udHJvbEVsZW1lbnRUeXBlcy5jcHAiIC8+CiAg
ICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxodG1sXHNoYWRvd1xNZWRpYUNvbnRyb2xzLmNwcCIg
Lz4KQEAgLTIyMzcyLDkgKzIyMzcwLDcgQEAKICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGh0
bWxccGFyc2VyXFhTU0F1ZGl0b3IuaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGh0
bWxccGFyc2VyXFhTU0F1ZGl0b3JEZWxlZ2F0ZS5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVk
ZT0iLi5caHRtbFxzaGFkb3dcQXV0b0ZpbGxCdXR0b25FbGVtZW50LmgiIC8+Ci0gICAgPENsSW5j
bHVkZSBJbmNsdWRlPSIuLlxodG1sXHNoYWRvd1xDb250ZW50RGlzdHJpYnV0b3IuaCIgLz4KICAg
ICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGh0bWxcc2hhZG93XERldGFpbHNNYXJrZXJDb250cm9s
LmgiIC8+Ci0gICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxodG1sXHNoYWRvd1xJbnNlcnRpb25Q
b2ludC5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5caHRtbFxzaGFkb3dcTWVkaWFD
b250cm9sRWxlbWVudHMuaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGh0bWxcc2hh
ZG93XE1lZGlhQ29udHJvbEVsZW1lbnRUeXBlcy5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVk
ZT0iLi5caHRtbFxzaGFkb3dcTWVkaWFDb250cm9scy5oIiAvPgpJbmRleDogU291cmNlL1dlYkNv
cmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24gMTkw
ODM5KQorKysgU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9q
CSh3b3JraW5nIGNvcHkpCkBAIC0yMjMwLDEwICsyMjMwLDYgQEAKIAkJNTNFRjc2NkMxNjUzMTk5
NDAwNENCRTQ5IC8qIFNldHRpbmdzTWFjcm9zLmggaW4gQ29weSBHZW5lcmF0ZWQgSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1M0VGNzY2QTE2NTMwQTYxMDA0Q0JF
NDkgLyogU2V0dGluZ3NNYWNyb3MuaCAqLzsgfTsKIAkJNTUwQTBCQzkwODVGNjAzOTAwNzM1M0Q2
IC8qIFF1YWxpZmllZE5hbWUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gNTUwQTBCQzcwODVGNjAzOTAwNzM1M0Q2IC8qIFF1YWxpZmllZE5hbWUuY3Bw
ICovOyB9OwogCQk1NTBBMEJDQTA4NUY2MDM5MDA3MzUzRDYgLyogUXVhbGlmaWVkTmFtZS5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTUwQTBCQzgwODVG
NjAzOTAwNzM1M0Q2IC8qIFF1YWxpZmllZE5hbWUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRF
UyA9IChQcml2YXRlLCApOyB9OyB9OwotCQk1N0I3OTFBMzE0QzZBNjI5MDBGMjAyRDEgLyogQ29u
dGVudERpc3RyaWJ1dG9yLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDU3Qjc5MTlGMTRDNkE2MjkwMEYyMDJEMSAvKiBDb250ZW50RGlzdHJpYnV0b3Iu
Y3BwICovOyB9OwotCQk1N0I3OTFBNDE0QzZBNjI5MDBGMjAyRDEgLyogQ29udGVudERpc3RyaWJ1
dG9yLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1N0I3
OTFBMDE0QzZBNjI5MDBGMjAyRDEgLyogQ29udGVudERpc3RyaWJ1dG9yLmggKi87IHNldHRpbmdz
ID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKLQkJNTdDRjQ5NzQxNEVFMzZENzAw
RUNGRjE0IC8qIEluc2VydGlvblBvaW50LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDU3Q0Y0OTcyMTRFRTM2RDcwMEVDRkYxNCAvKiBJbnNlcnRpb25Q
b2ludC5jcHAgKi87IH07Ci0JCTU3Q0Y0OTc1MTRFRTM2RDcwMEVDRkYxNCAvKiBJbnNlcnRpb25Q
b2ludC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTdD
RjQ5NzMxNEVFMzZENzAwRUNGRjE0IC8qIEluc2VydGlvblBvaW50LmggKi87IH07CiAJCTU4MDM3
MTYxMUE2NkYwMEEwMEJBRjUxOSAvKiBDbGlwUmVjdC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1ODAzNzE1RjFBNjZGMDBBMDBCQUY1MTkgLyogQ2xp
cFJlY3QuY3BwICovOyB9OwogCQk1ODAzNzE2MjFBNjZGMDBBMDBCQUY1MTkgLyogQ2xpcFJlY3Qu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDU4MDM3MTYw
MUE2NkYwMEEwMEJBRjUxOSAvKiBDbGlwUmVjdC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVT
ID0gKFByaXZhdGUsICk7IH07IH07CiAJCTU4MDM3MTY0MUE2NkYxRDMwMEJBRjUxOSAvKiBMYXll
ckZyYWdtZW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSA1ODAzNzE2MzFBNjZGMUQzMDBCQUY1MTkgLyogTGF5ZXJGcmFnbWVudC5oICovOyBzZXR0aW5n
cyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CkBAIC05NTk5LDEwICs5NTk1LDYg
QEAKIAkJNTUwQTBCQzcwODVGNjAzOTAwNzM1M0Q2IC8qIFF1YWxpZmllZE5hbWUuY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBpbmRlbnRXaWR0aCA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUXVhbGlm
aWVkTmFtZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IHRhYldpZHRoID0gODsgdXNlc1Rh
YnMgPSAwOyB9OwogCQk1NTBBMEJDODA4NUY2MDM5MDA3MzUzRDYgLyogUXVhbGlmaWVkTmFtZS5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBpbmRlbnRX
aWR0aCA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBRdWFs
aWZpZWROYW1lLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IHRhYldpZHRoID0gODsgdXNlc1Rh
YnMgPSAwOyB9OwogCQk1NUQ0MDhGNzFBN0M2MzE4MDBDNzg0NTAgLyogU1ZHSW1hZ2VDbGllbnRz
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNWR0ltYWdlQ2xpZW50cy5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk1N0I3OTE5RjE0QzZBNjI5MDBGMjAyRDEgLyog
Q29udGVudERpc3RyaWJ1dG9yLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0
aCA9IENvbnRlbnREaXN0cmlidXRvci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0J
CTU3Qjc5MUEwMTRDNkE2MjkwMEYyMDJEMSAvKiBDb250ZW50RGlzdHJpYnV0b3IuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQ29udGVudERpc3RyaWJ1dG9yLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTU3Q0Y0OTcyMTRFRTM2RDcwMEVDRkYxNCAvKiBJbnNlcnRp
b25Qb2ludC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBJbnNlcnRp
b25Qb2ludC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTU3Q0Y0OTczMTRFRTM2
RDcwMEVDRkYxNCAvKiBJbnNlcnRpb25Qb2ludC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBJbnNlcnRpb25Qb2ludC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1
ODAzNzE1RjFBNjZGMDBBMDBCQUY1MTkgLyogQ2xpcFJlY3QuY3BwICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAuY3BwOyBwYXRoID0gQ2xpcFJlY3QuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQk1ODAzNzE2MDFBNjZGMDBBMDBCQUY1MTkgLyogQ2xpcFJlY3QuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQ2xpcFJlY3QuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJNTgwMzcxNjMxQTY2RjFEMzAwQkFGNTE5IC8qIExheWVyRnJhZ21lbnQuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTGF5ZXJGcmFnbWVudC5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwpAQCAtMTYxNzMsMTQgKzE2MTY1LDEwIEBACiAJCQkJNTFDNEFBNTEx
OEIyODM1NzAwN0JGRTlCIC8qIG1hYyAqLywKIAkJCQk3QzFFOTcyNTFBOUY5ODM0MDA3QkYwRkIg
LyogQXV0b0ZpbGxCdXR0b25FbGVtZW50LmNwcCAqLywKIAkJCQk3QzFFOTcyNjFBOUY5ODM0MDA3
QkYwRkIgLyogQXV0b0ZpbGxCdXR0b25FbGVtZW50LmggKi8sCi0JCQkJNTdCNzkxOUYxNEM2QTYy
OTAwRjIwMkQxIC8qIENvbnRlbnREaXN0cmlidXRvci5jcHAgKi8sCi0JCQkJNTdCNzkxQTAxNEM2
QTYyOTAwRjIwMkQxIC8qIENvbnRlbnREaXN0cmlidXRvci5oICovLAogCQkJCUE3QzlBQkY2MTM1
N0EzQkYwMEY1NTAzRiAvKiBEZXRhaWxzTWFya2VyQ29udHJvbC5jcHAgKi8sCiAJCQkJQTdDOUFC
RjcxMzU3QTNCRjAwRjU1MDNGIC8qIERldGFpbHNNYXJrZXJDb250cm9sLmggKi8sCiAJCQkJNTEw
MTkyRDMxOEI2QjlCNzAwN0ZDN0ExIC8qIEltYWdlQ29udHJvbHNSb290RWxlbWVudC5jcHAgKi8s
CiAJCQkJNTEwMTkyRDQxOEI2QjlCNzAwN0ZDN0ExIC8qIEltYWdlQ29udHJvbHNSb290RWxlbWVu
dC5oICovLAotCQkJCTU3Q0Y0OTcyMTRFRTM2RDcwMEVDRkYxNCAvKiBJbnNlcnRpb25Qb2ludC5j
cHAgKi8sCi0JCQkJNTdDRjQ5NzMxNEVFMzZENzAwRUNGRjE0IC8qIEluc2VydGlvblBvaW50Lmgg
Ki8sCiAJCQkJNDE3MjUzQTgxMzU0QkJCQzAwMzYwRjJBIC8qIE1lZGlhQ29udHJvbEVsZW1lbnRz
LmNwcCAqLywKIAkJCQk0MTcyNTNBOTEzNTRCQkJDMDAzNjBGMkEgLyogTWVkaWFDb250cm9sRWxl
bWVudHMuaCAqLywKIAkJCQlERTQ5QjJGRjE2NUYyRkM2MDAxMDMzOEQgLyogTWVkaWFDb250cm9s
RWxlbWVudFR5cGVzLmNwcCAqLywKQEAgLTI0NTAwLDcgKzI0NDg4LDYgQEAKIAkJCQlBODE4NzIx
QzA5NzdEM0MwMDA1ODI2RDkgLyogQ29udGFpbmVyTm9kZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
RTFBMTQ3MDgxMTEwMkIxNTAwRUVDMEYzIC8qIENvbnRhaW5lck5vZGVBbGdvcml0aG1zLmggaW4g
SGVhZGVycyAqLywKIAkJCQlCQzVFQjk4MTBFODIwNzI1MDBCMjU5NjUgLyogQ29udGVudERhdGEu
aCBpbiBIZWFkZXJzICovLAotCQkJCTU3Qjc5MUE0MTRDNkE2MjkwMEYyMDJEMSAvKiBDb250ZW50
RGlzdHJpYnV0b3IuaCBpbiBIZWFkZXJzICovLAogCQkJCTUxQjQ1RDIxMUFCOEQxRTIwMDExN0NE
MiAvKiBDb250ZW50RXh0ZW5zaW9uLmggaW4gSGVhZGVycyAqLywKIAkJCQk1Q0RGQTZDODFBQTRG
MkRBMDBFQTg3NDYgLyogQ29udGVudEV4dGVuc2lvbkFjdGlvbnMuaCBpbiBIZWFkZXJzICovLAog
CQkJCTdDOTNGMzRFMUFBNkJGMDcwMEE5OEJBQiAvKiBDb250ZW50RXh0ZW5zaW9uQ29tcGlsZXIu
aCBpbiBIZWFkZXJzICovLApAQCAtMjU1NjYsNyArMjU1NTMsNiBAQAogCQkJCTM3RTM1MjREMTI0
NTBDNjYwMEJBRjVEOSAvKiBJbnB1dFR5cGUuaCBpbiBIZWFkZXJzICovLAogCQkJCUMzNDg2MTI0
MTVGREUyMUUwMDdBMUNDOSAvKiBJbnB1dFR5cGVOYW1lcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
OTMzMDlERUEwOTlFNjQ5MjAwNTZFNTgxIC8qIEluc2VydEludG9UZXh0Tm9kZUNvbW1hbmQuaCBp
biBIZWFkZXJzICovLAotCQkJCTU3Q0Y0OTc1MTRFRTM2RDcwMEVDRkYxNCAvKiBJbnNlcnRpb25Q
b2ludC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOTMzMDlERUMwOTlFNjQ5MjAwNTZFNTgxIC8qIElu
c2VydExpbmVCcmVha0NvbW1hbmQuaCBpbiBIZWFkZXJzICovLAogCQkJCUQwN0RFQUJBMEEzNjU1
NEEwMENBMzBGOCAvKiBJbnNlcnRMaXN0Q29tbWFuZC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOTMz
MDlERUUwOTlFNjQ5MjAwNTZFNTgxIC8qIEluc2VydE5vZGVCZWZvcmVDb21tYW5kLmggaW4gSGVh
ZGVycyAqLywKQEAgLTI4MzM4LDcgKzI4MzI0LDYgQEAKIAkJCQlBODE4NzIxRjA5NzdEM0MwMDA1
ODI2RDkgLyogQ29udGFpbmVyTm9kZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBN0E3OENENTE1
MzJCQTYyMDA2QzIxRTQgLyogQ29udGFpbmVyTm9kZUFsZ29yaXRobXMuY3BwIGluIFNvdXJjZXMg
Ki8sCiAJCQkJQkM1RUI5ODAwRTgyMDcyNTAwQjI1OTY1IC8qIENvbnRlbnREYXRhLmNwcCBpbiBT
b3VyY2VzICovLAotCQkJCTU3Qjc5MUEzMTRDNkE2MjkwMEYyMDJEMSAvKiBDb250ZW50RGlzdHJp
YnV0b3IuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNTFCNDVEMjAxQUI4RDFFMjAwMTE3Q0QyIC8q
IENvbnRlbnRFeHRlbnNpb24uY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJN0M5M0YzNEQxQUE2QkYw
NzAwQTk4QkFCIC8qIENvbnRlbnRFeHRlbnNpb25Db21waWxlci5jcHAgaW4gU291cmNlcyAqLywK
IAkJCQk3Q0ZEQzU3QzFBQzFEODA1MDBFMjRBNTcgLyogQ29udGVudEV4dGVuc2lvbkVycm9yLmNw
cCBpbiBTb3VyY2VzICovLApAQCAtMjkxMzgsNyArMjkxMjMsNiBAQAogCQkJCTM3RTM1MjRCMTI0
NTBDNTIwMEJBRjVEOSAvKiBJbnB1dFR5cGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQzM0ODYx
MjMxNUZERTIxRTAwN0ExQ0M5IC8qIElucHV0VHlwZU5hbWVzLmNwcCBpbiBTb3VyY2VzICovLAog
CQkJCTkzMzA5REU5MDk5RTY0OTIwMDU2RTU4MSAvKiBJbnNlcnRJbnRvVGV4dE5vZGVDb21tYW5k
LmNwcCBpbiBTb3VyY2VzICovLAotCQkJCTU3Q0Y0OTc0MTRFRTM2RDcwMEVDRkYxNCAvKiBJbnNl
cnRpb25Qb2ludC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk5MzMwOURFQjA5OUU2NDkyMDA1NkU1
ODEgLyogSW5zZXJ0TGluZUJyZWFrQ29tbWFuZC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlEMDdE
RUFCOTBBMzY1NTRBMDBDQTMwRjggLyogSW5zZXJ0TGlzdENvbW1hbmQuY3BwIGluIFNvdXJjZXMg
Ki8sCiAJCQkJOTMzMDlERUQwOTlFNjQ5MjAwNTZFNTgxIC8qIEluc2VydE5vZGVCZWZvcmVDb21t
YW5kLmNwcCBpbiBTb3VyY2VzICovLApJbmRleDogU291cmNlL1dlYkNvcmUvY3NzL1NlbGVjdG9y
Q2hlY2tlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvY3NzL1NlbGVjdG9yQ2hl
Y2tlci5jcHAJKHJldmlzaW9uIDE5MDgzOSkKKysrIFNvdXJjZS9XZWJDb3JlL2Nzcy9TZWxlY3Rv
ckNoZWNrZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00NSw3ICs0NSw2IEBACiAjaW5jbHVkZSAi
SFRNTFBhcnNlcklkaW9tcy5oIgogI2luY2x1ZGUgIkhUTUxQcm9ncmVzc0VsZW1lbnQuaCIKICNp
bmNsdWRlICJIVE1MU3R5bGVFbGVtZW50LmgiCi0jaW5jbHVkZSAiSW5zZXJ0aW9uUG9pbnQuaCIK
ICNpbmNsdWRlICJJbnNwZWN0b3JJbnN0cnVtZW50YXRpb24uaCIKICNpbmNsdWRlICJOb2RlUmVu
ZGVyU3R5bGUuaCIKICNpbmNsdWRlICJQYWdlLmgiCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jc3Mv
U3R5bGVSZXNvbHZlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvY3NzL1N0eWxl
UmVzb2x2ZXIuY3BwCShyZXZpc2lvbiAxOTA4MzkpCisrKyBTb3VyY2UvV2ViQ29yZS9jc3MvU3R5
bGVSZXNvbHZlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTgwLDcgKzgwLDYgQEAKICNpbmNsdWRl
ICJIVE1MU3R5bGVFbGVtZW50LmgiCiAjaW5jbHVkZSAiSFRNTFRhYmxlRWxlbWVudC5oIgogI2lu
Y2x1ZGUgIkhUTUxUZXh0QXJlYUVsZW1lbnQuaCIKLSNpbmNsdWRlICJJbnNlcnRpb25Qb2ludC5o
IgogI2luY2x1ZGUgIkluc3BlY3Rvckluc3RydW1lbnRhdGlvbi5oIgogI2luY2x1ZGUgIktleWZy
YW1lTGlzdC5oIgogI2luY2x1ZGUgIkxpbmtIYXNoLmgiCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9k
b20vQ29udGFpbmVyTm9kZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZG9tL0Nv
bnRhaW5lck5vZGUuY3BwCShyZXZpc2lvbiAxOTA4MzkpCisrKyBTb3VyY2UvV2ViQ29yZS9kb20v
Q29udGFpbmVyTm9kZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM3LDcgKzM3LDYgQEAKICNpbmNs
dWRlICJIVE1MT3B0aW9uc0NvbGxlY3Rpb24uaCIKICNpbmNsdWRlICJIVE1MVGFibGVSb3dzQ29s
bGVjdGlvbi5oIgogI2luY2x1ZGUgIklubGluZVRleHRCb3guaCIKLSNpbmNsdWRlICJJbnNlcnRp
b25Qb2ludC5oIgogI2luY2x1ZGUgIkpTTGF6eUV2ZW50TGlzdGVuZXIuaCIKICNpbmNsdWRlICJK
U05vZGUuaCIKICNpbmNsdWRlICJMYWJlbHNOb2RlTGlzdC5oIgpJbmRleDogU291cmNlL1dlYkNv
cmUvZG9tL0VsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2RvbS9FbGVt
ZW50LmNwcAkocmV2aXNpb24gMTkwODQwKQorKysgU291cmNlL1dlYkNvcmUvZG9tL0VsZW1lbnQu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC01NSw3ICs1NSw2IEBACiAjaW5jbHVkZSAiSFRNTFNlbGVj
dEVsZW1lbnQuaCIKICNpbmNsdWRlICJIVE1MVGVtcGxhdGVFbGVtZW50LmgiCiAjaW5jbHVkZSAi
SWRUYXJnZXRPYnNlcnZlclJlZ2lzdHJ5LmgiCi0jaW5jbHVkZSAiSW5zZXJ0aW9uUG9pbnQuaCIK
ICNpbmNsdWRlICJLZXlib2FyZEV2ZW50LmgiCiAjaW5jbHVkZSAiTWFpbkZyYW1lLmgiCiAjaW5j
bHVkZSAiTXV0YXRpb25PYnNlcnZlckludGVyZXN0R3JvdXAuaCIKQEAgLTE2MjIsOSArMTYyMSw3
IEBAIFNoYWRvd1Jvb3QqIEVsZW1lbnQ6OnNoYWRvd1Jvb3QoKSBjb25zdAogCiBzdGF0aWMgYm9v
bCBzaG91bGRVc2VOb2RlUmVuZGVyaW5nVHJhdmVyc2FsU2xvd1BhdGgoY29uc3QgRWxlbWVudCYg
ZWxlbWVudCkKIHsKLSAgICBpZiAoZWxlbWVudC5pc1NoYWRvd1Jvb3QoKSkKLSAgICAgICAgcmV0
dXJuIHRydWU7Ci0gICAgcmV0dXJuIGVsZW1lbnQuaXNJbnNlcnRpb25Qb2ludCgpIHx8IGVsZW1l
bnQuc2hhZG93Um9vdCgpOworICAgIHJldHVybiBlbGVtZW50LmlzU2hhZG93Um9vdCgpIHx8IGVs
ZW1lbnQuc2hhZG93Um9vdCgpOwogfQogCiB2b2lkIEVsZW1lbnQ6OnJlc2V0TmVlZHNOb2RlUmVu
ZGVyaW5nVHJhdmVyc2FsU2xvd1BhdGgoKQpJbmRleDogU291cmNlL1dlYkNvcmUvZG9tL05vZGUu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2RvbS9Ob2RlLmNwcAkocmV2aXNpb24g
MTkwODM5KQorKysgU291cmNlL1dlYkNvcmUvZG9tL05vZGUuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC00Niw3ICs0Niw2IEBACiAjaW5jbHVkZSAiSFRNTEltYWdlRWxlbWVudC5oIgogI2luY2x1ZGUg
IkhUTUxTbG90RWxlbWVudC5oIgogI2luY2x1ZGUgIkhUTUxTdHlsZUVsZW1lbnQuaCIKLSNpbmNs
dWRlICJJbnNlcnRpb25Qb2ludC5oIgogI2luY2x1ZGUgIkluc3BlY3RvckNvbnRyb2xsZXIuaCIK
ICNpbmNsdWRlICJLZXlib2FyZEV2ZW50LmgiCiAjaW5jbHVkZSAiTG9nZ2luZy5oIgpAQCAtMTEz
MywxMSArMTEzMiw2IEBAIEVsZW1lbnQqIE5vZGU6OnBhcmVudE9yU2hhZG93SG9zdEVsZW1lbnQK
ICAgICByZXR1cm4gZG93bmNhc3Q8RWxlbWVudD4ocGFyZW50KTsKIH0KIAotTm9kZSogTm9kZTo6
aW5zZXJ0aW9uUGFyZW50Rm9yQmluZGluZygpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIGZpbmRJbnNl
cnRpb25Qb2ludE9mKHRoaXMpOwotfQotCiBOb2RlOjpJbnNlcnRpb25Ob3RpZmljYXRpb25SZXF1
ZXN0IE5vZGU6Omluc2VydGVkSW50byhDb250YWluZXJOb2RlJiBpbnNlcnRpb25Qb2ludCkKIHsK
ICAgICBBU1NFUlQoaW5zZXJ0aW9uUG9pbnQuaW5Eb2N1bWVudCgpIHx8IGlzQ29udGFpbmVyTm9k
ZSgpKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9Ob2RlLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvZG9tL05vZGUuaAkocmV2aXNpb24gMTkwODM5KQorKysgU291cmNlL1dlYkNv
cmUvZG9tL05vZGUuaAkod29ya2luZyBjb3B5KQpAQCAtMjU3LDcgKzI1Nyw2IEBAIHB1YmxpYzoK
ICAgICB2aXJ0dWFsIGJvb2wgaXNDaGFyYWN0ZXJEYXRhTm9kZSgpIGNvbnN0IHsgcmV0dXJuIGZh
bHNlOyB9CiAgICAgdmlydHVhbCBib29sIGlzRnJhbWVPd25lckVsZW1lbnQoKSBjb25zdCB7IHJl
dHVybiBmYWxzZTsgfQogICAgIHZpcnR1YWwgYm9vbCBpc1BsdWdpbkVsZW1lbnQoKSBjb25zdCB7
IHJldHVybiBmYWxzZTsgfQotICAgIHZpcnR1YWwgYm9vbCBpc0luc2VydGlvblBvaW50Tm9kZSgp
IGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CiAjaWYgRU5BQkxFKFNFUlZJQ0VfQ09OVFJPTFMpCiAg
ICAgdmlydHVhbCBib29sIGlzSW1hZ2VDb250cm9sc1Jvb3RFbGVtZW50KCkgY29uc3QgeyByZXR1
cm4gZmFsc2U7IH0KICAgICB2aXJ0dWFsIGJvb2wgaXNJbWFnZUNvbnRyb2xzQnV0dG9uRWxlbWVu
dCgpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CkBAIC0yNjcsOSArMjY2LDYgQEAgcHVibGljOgog
ICAgIGJvb2wgaXNUcmVlU2NvcGUoKSBjb25zdDsKICAgICBib29sIGlzRG9jdW1lbnRGcmFnbWVu
dCgpIGNvbnN0IHsgcmV0dXJuIGdldEZsYWcoSXNEb2N1bWVudEZyYWdtZW50RmxhZyk7IH0KICAg
ICBib29sIGlzU2hhZG93Um9vdCgpIGNvbnN0IHsgcmV0dXJuIGlzRG9jdW1lbnRGcmFnbWVudCgp
ICYmIGlzVHJlZVNjb3BlKCk7IH0KLSAgICBib29sIGlzSW5zZXJ0aW9uUG9pbnQoKSBjb25zdCB7
IHJldHVybiBnZXRGbGFnKE5lZWRzTm9kZVJlbmRlcmluZ1RyYXZlcnNhbFNsb3dQYXRoRmxhZykg
JiYgaXNJbnNlcnRpb25Qb2ludE5vZGUoKTsgfQotICAgIC8vIFJldHVybnMgTm9kZSByYXRoZXIg
dGhhbiBJbnNlcnRpb25Qb2ludC4gU2hvdWxkIGJlIHVzZWQgb25seSBmb3IgbGFuZ3VhZ2UgYmlu
ZGluZ3MuCi0gICAgTm9kZSogaW5zZXJ0aW9uUGFyZW50Rm9yQmluZGluZygpIGNvbnN0OwogCiAg
ICAgYm9vbCBuZWVkc05vZGVSZW5kZXJpbmdUcmF2ZXJzYWxTbG93UGF0aCgpIGNvbnN0OwogCkBA
IC02NTUsNyArNjUxLDYgQEAgcHJvdGVjdGVkOgogICAgICAgICBDcmVhdGVIVE1MRWxlbWVudCA9
IENyZWF0ZVN0eWxlZEVsZW1lbnQgfCBJc0hUTUxGbGFnLAogICAgICAgICBDcmVhdGVTVkdFbGVt
ZW50ID0gQ3JlYXRlU3R5bGVkRWxlbWVudCB8IElzU1ZHRmxhZyB8IEhhc0N1c3RvbVN0eWxlUmVz
b2x2ZUNhbGxiYWNrc0ZsYWcsCiAgICAgICAgIENyZWF0ZURvY3VtZW50ID0gQ3JlYXRlQ29udGFp
bmVyIHwgSW5Eb2N1bWVudEZsYWcsCi0gICAgICAgIENyZWF0ZUluc2VydGlvblBvaW50ID0gQ3Jl
YXRlSFRNTEVsZW1lbnQgfCBOZWVkc05vZGVSZW5kZXJpbmdUcmF2ZXJzYWxTbG93UGF0aEZsYWcs
CiAgICAgICAgIENyZWF0ZUVkaXRpbmdUZXh0ID0gQ3JlYXRlVGV4dCB8IElzRWRpdGluZ1RleHRG
bGFnLAogICAgICAgICBDcmVhdGVNYXRoTUxFbGVtZW50ID0gQ3JlYXRlU3R5bGVkRWxlbWVudCB8
IElzTWF0aE1MRmxhZwogICAgIH07CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20vTm9kZVJlbmRl
cmluZ1RyYXZlcnNhbC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZG9tL05vZGVS
ZW5kZXJpbmdUcmF2ZXJzYWwuY3BwCShyZXZpc2lvbiAxOTA4MzkpCisrKyBTb3VyY2UvV2ViQ29y
ZS9kb20vTm9kZVJlbmRlcmluZ1RyYXZlcnNhbC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI4LDk0
ICsyOCwxMiBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIk5vZGVSZW5kZXJpbmdU
cmF2ZXJzYWwuaCIKIAotI2luY2x1ZGUgIkluc2VydGlvblBvaW50LmgiCiAjaW5jbHVkZSAiU2hh
ZG93Um9vdC5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIG5hbWVzcGFjZSBOb2RlUmVuZGVy
aW5nVHJhdmVyc2FsIHsKIAotc3RhdGljIE5vZGUqIGZpbmRGaXJzdFNpYmxpbmdFbnRlcmluZ0lu
c2VydGlvblBvaW50cyhjb25zdCBOb2RlKik7Ci1zdGF0aWMgTm9kZSogZmluZEZpcnN0RW50ZXJp
bmdJbnNlcnRpb25Qb2ludHMoY29uc3QgTm9kZSopOwotc3RhdGljIE5vZGUqIGZpbmRGaXJzdEZy
b21EaXN0cmlidXRlZE5vZGUoY29uc3QgTm9kZSosIGNvbnN0IEluc2VydGlvblBvaW50Kik7Ci1z
dGF0aWMgTm9kZSogZmluZExhc3RTaWJsaW5nRW50ZXJpbmdJbnNlcnRpb25Qb2ludHMoY29uc3Qg
Tm9kZSopOwotc3RhdGljIE5vZGUqIGZpbmRMYXN0RW50ZXJpbmdJbnNlcnRpb25Qb2ludHMoY29u
c3QgTm9kZSopOwotc3RhdGljIE5vZGUqIGZpbmRMYXN0RnJvbURpc3RyaWJ1dGVkTm9kZShjb25z
dCBOb2RlKiwgY29uc3QgSW5zZXJ0aW9uUG9pbnQqKTsKLQotc3RhdGljIGlubGluZSBib29sIG5v
ZGVDYW5CZURpc3RyaWJ1dGVkKGNvbnN0IE5vZGUqIG5vZGUpCi17Ci0gICAgQVNTRVJUKG5vZGUp
OwotICAgIE5vZGUqIHBhcmVudCA9IHBhcmVudE5vZGVGb3JEaXN0cmlidXRpb24obm9kZSk7Ci0g
ICAgaWYgKCFwYXJlbnQpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIGlmIChwYXJlbnQt
PmlzU2hhZG93Um9vdCgpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBpZiAoaXM8RWxl
bWVudD4oKnBhcmVudCkgJiYgZG93bmNhc3Q8RWxlbWVudD4oKnBhcmVudCkuc2hhZG93Um9vdCgp
KQotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAKLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLXN0
YXRpYyBOb2RlKiBmaW5kRmlyc3RTaWJsaW5nRW50ZXJpbmdJbnNlcnRpb25Qb2ludHMoY29uc3Qg
Tm9kZSogbm9kZSkKLXsKLSAgICBmb3IgKGNvbnN0IE5vZGUqIHNpYmxpbmcgPSBub2RlOyBzaWJs
aW5nOyBzaWJsaW5nID0gc2libGluZy0+bmV4dFNpYmxpbmcoKSkgewotICAgICAgICBpZiAoTm9k
ZSogZm91bmQgPSBmaW5kRmlyc3RFbnRlcmluZ0luc2VydGlvblBvaW50cyhzaWJsaW5nKSkKLSAg
ICAgICAgICAgIHJldHVybiBmb3VuZDsKLSAgICB9Ci0gICAgcmV0dXJuIG51bGxwdHI7Ci19Ci0K
LXN0YXRpYyBOb2RlKiBmaW5kRmlyc3RFbnRlcmluZ0luc2VydGlvblBvaW50cyhjb25zdCBOb2Rl
KiBub2RlKQotewotICAgIEFTU0VSVChub2RlKTsKLSAgICBpZiAoIWlzQWN0aXZlSW5zZXJ0aW9u
UG9pbnQobm9kZSkpCi0gICAgICAgIHJldHVybiBjb25zdF9jYXN0PE5vZGUqPihub2RlKTsKLSAg
ICBjb25zdCBJbnNlcnRpb25Qb2ludCYgaW5zZXJ0aW9uUG9pbnQgPSBkb3duY2FzdDxJbnNlcnRp
b25Qb2ludD4oKm5vZGUpOwotICAgIGlmIChOb2RlKiBmb3VuZCA9IGZpbmRGaXJzdEZyb21EaXN0
cmlidXRlZE5vZGUoaW5zZXJ0aW9uUG9pbnQuZmlyc3REaXN0cmlidXRlZCgpLCAmaW5zZXJ0aW9u
UG9pbnQpKQotICAgICAgICByZXR1cm4gZm91bmQ7Ci0gICAgcmV0dXJuIGZpbmRGaXJzdFNpYmxp
bmdFbnRlcmluZ0luc2VydGlvblBvaW50cyhub2RlLT5maXJzdENoaWxkKCkpOwotfQotCi1zdGF0
aWMgTm9kZSogZmluZEZpcnN0RnJvbURpc3RyaWJ1dGVkTm9kZShjb25zdCBOb2RlKiBub2RlLCBj
b25zdCBJbnNlcnRpb25Qb2ludCogaW5zZXJ0aW9uUG9pbnQpCi17Ci0gICAgZm9yIChjb25zdCBO
b2RlKiBuZXh0ID0gbm9kZTsgbmV4dDsgbmV4dCA9IGluc2VydGlvblBvaW50LT5uZXh0RGlzdHJp
YnV0ZWRUbyhuZXh0KSkgewotICAgICAgICBpZiAoTm9kZSogZm91bmQgPSBmaW5kRmlyc3RFbnRl
cmluZ0luc2VydGlvblBvaW50cyhuZXh0KSkKLSAgICAgICAgICAgIHJldHVybiBmb3VuZDsKLSAg
ICB9Ci0gICAgcmV0dXJuIG51bGxwdHI7Ci19Ci0KLXN0YXRpYyBOb2RlKiBmaW5kTGFzdFNpYmxp
bmdFbnRlcmluZ0luc2VydGlvblBvaW50cyhjb25zdCBOb2RlKiBub2RlKQotewotICAgIGZvciAo
Y29uc3QgTm9kZSogc2libGluZyA9IG5vZGU7IHNpYmxpbmc7IHNpYmxpbmcgPSBzaWJsaW5nLT5w
cmV2aW91c1NpYmxpbmcoKSkgewotICAgICAgICBpZiAoTm9kZSogZm91bmQgPSBmaW5kTGFzdEVu
dGVyaW5nSW5zZXJ0aW9uUG9pbnRzKHNpYmxpbmcpKQotICAgICAgICAgICAgcmV0dXJuIGZvdW5k
OwotICAgIH0KLSAgICByZXR1cm4gbnVsbHB0cjsKLX0KLQotc3RhdGljIE5vZGUqIGZpbmRMYXN0
RW50ZXJpbmdJbnNlcnRpb25Qb2ludHMoY29uc3QgTm9kZSogbm9kZSkKLXsKLSAgICBBU1NFUlQo
bm9kZSk7Ci0gICAgaWYgKCFpc0FjdGl2ZUluc2VydGlvblBvaW50KG5vZGUpKQotICAgICAgICBy
ZXR1cm4gY29uc3RfY2FzdDxOb2RlKj4obm9kZSk7Ci0gICAgY29uc3QgSW5zZXJ0aW9uUG9pbnQm
IGluc2VydGlvblBvaW50ID0gZG93bmNhc3Q8SW5zZXJ0aW9uUG9pbnQ+KCpub2RlKTsKLSAgICBp
ZiAoTm9kZSogZm91bmQgPSBmaW5kTGFzdEZyb21EaXN0cmlidXRlZE5vZGUoaW5zZXJ0aW9uUG9p
bnQubGFzdERpc3RyaWJ1dGVkKCksICZpbnNlcnRpb25Qb2ludCkpCi0gICAgICAgIHJldHVybiBm
b3VuZDsKLSAgICByZXR1cm4gZmluZExhc3RTaWJsaW5nRW50ZXJpbmdJbnNlcnRpb25Qb2ludHMo
bm9kZS0+bGFzdENoaWxkKCkpOwotfQotCi1zdGF0aWMgTm9kZSogZmluZExhc3RGcm9tRGlzdHJp
YnV0ZWROb2RlKGNvbnN0IE5vZGUqIG5vZGUsIGNvbnN0IEluc2VydGlvblBvaW50KiBpbnNlcnRp
b25Qb2ludCkKLXsKLSAgICBmb3IgKGNvbnN0IE5vZGUqIG5leHQgPSBub2RlOyBuZXh0OyBuZXh0
ID0gaW5zZXJ0aW9uUG9pbnQtPnByZXZpb3VzRGlzdHJpYnV0ZWRUbyhuZXh0KSkgewotICAgICAg
ICBpZiAoTm9kZSogZm91bmQgPSBmaW5kTGFzdEVudGVyaW5nSW5zZXJ0aW9uUG9pbnRzKG5leHQp
KQotICAgICAgICAgICAgcmV0dXJuIGZvdW5kOwotICAgIH0KLSAgICByZXR1cm4gbnVsbHB0cjsK
LX0KLQogZW51bSBTaGFkb3dSb290Q3Jvc3NpbmcgeyBDcm9zc1NoYWRvd1Jvb3QsIERvbnRDcm9z
c1NoYWRvd1Jvb3QgfTsKIAogc3RhdGljIENvbnRhaW5lck5vZGUqIHRyYXZlcnNlUGFyZW50KGNv
bnN0IE5vZGUqIG5vZGUsIFNoYWRvd1Jvb3RDcm9zc2luZyBzaGFkb3dSb290Q3Jvc3NpbmcpCkBA
IC0xMjMsMjUgKzQxLDE2IEBAIHN0YXRpYyBDb250YWluZXJOb2RlKiB0cmF2ZXJzZVBhcmVudChj
b24KICAgICBpZiAoc2hhZG93Um9vdENyb3NzaW5nID09IERvbnRDcm9zc1NoYWRvd1Jvb3QgICYm
IG5vZGUtPmlzU2hhZG93Um9vdCgpKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAotICAgIGlm
IChub2RlQ2FuQmVEaXN0cmlidXRlZChub2RlKSkgewotICAgICAgICBpZiAoSW5zZXJ0aW9uUG9p
bnQqIGluc2VydGlvblBvaW50ID0gZmluZEluc2VydGlvblBvaW50T2Yobm9kZSkpCi0gICAgICAg
ICAgICByZXR1cm4gdHJhdmVyc2VQYXJlbnQoaW5zZXJ0aW9uUG9pbnQsIHNoYWRvd1Jvb3RDcm9z
c2luZyk7Ci0gICAgICAgIHJldHVybiBudWxscHRyOwotICAgIH0KICAgICBDb250YWluZXJOb2Rl
KiBwYXJlbnQgPSBub2RlLT5wYXJlbnROb2RlKCk7CisgICAgaWYgKHBhcmVudCAmJiBwYXJlbnQt
PnNoYWRvd1Jvb3QoKSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKICAgICBpZiAoIXBhcmVu
dCkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKICAgICBpZiAoaXM8U2hhZG93Um9vdD4oKnBh
cmVudCkpCiAgICAgICAgIHJldHVybiBzaGFkb3dSb290Q3Jvc3NpbmcgPT0gQ3Jvc3NTaGFkb3dS
b290ID8gZG93bmNhc3Q8U2hhZG93Um9vdD4ocGFyZW50KS0+aG9zdCgpIDogcGFyZW50OwogCi0g
ICAgaWYgKGlzPEluc2VydGlvblBvaW50PigqcGFyZW50KSkgewotICAgICAgICBjb25zdCBJbnNl
cnRpb25Qb2ludCYgaW5zZXJ0aW9uUG9pbnQgPSBkb3duY2FzdDxJbnNlcnRpb25Qb2ludD4oKnBh
cmVudCk7Ci0gICAgICAgIGlmIChpbnNlcnRpb25Qb2ludC5oYXNEaXN0cmlidXRpb24oKSkKLSAg
ICAgICAgICAgIHJldHVybiBudWxscHRyOwotICAgICAgICBpZiAoaW5zZXJ0aW9uUG9pbnQuaXNB
Y3RpdmUoKSkKLSAgICAgICAgICAgIHJldHVybiB0cmF2ZXJzZVBhcmVudChwYXJlbnQsIHNoYWRv
d1Jvb3RDcm9zc2luZyk7Ci0gICAgfQogICAgIHJldHVybiBwYXJlbnQ7CiB9CiAKQEAgLTE1Myw3
ICs2Miw3IEBAIHN0YXRpYyBOb2RlKiB0cmF2ZXJzZUZpcnN0Q2hpbGQoY29uc3QgTm8KICAgICAg
ICAgICAgIHJldHVybiBudWxscHRyOwogICAgICAgICBub2RlID0gbm9kZS0+c2hhZG93Um9vdCgp
OwogICAgIH0KLSAgICByZXR1cm4gZmluZEZpcnN0U2libGluZ0VudGVyaW5nSW5zZXJ0aW9uUG9p
bnRzKG5vZGUtPmZpcnN0Q2hpbGQoKSk7CisgICAgcmV0dXJuIG5vZGUtPmZpcnN0Q2hpbGQoKTsK
IH0KIAogc3RhdGljIE5vZGUqIHRyYXZlcnNlTGFzdENoaWxkKGNvbnN0IE5vZGUqIG5vZGUsIFNo
YWRvd1Jvb3RDcm9zc2luZyBzaGFkb3dSb290Q3Jvc3NpbmcpCkBAIC0xNjQsNTEgKzczLDE5IEBA
IHN0YXRpYyBOb2RlKiB0cmF2ZXJzZUxhc3RDaGlsZChjb25zdCBOb2QKICAgICAgICAgICAgIHJl
dHVybiBudWxscHRyOwogICAgICAgICBub2RlID0gbm9kZS0+c2hhZG93Um9vdCgpOwogICAgIH0K
LSAgICByZXR1cm4gZmluZExhc3RTaWJsaW5nRW50ZXJpbmdJbnNlcnRpb25Qb2ludHMobm9kZS0+
bGFzdENoaWxkKCkpOworICAgIHJldHVybiBub2RlLT5sYXN0Q2hpbGQoKTsKIH0KIAogc3RhdGlj
IE5vZGUqIHRyYXZlcnNlTmV4dFNpYmxpbmcoY29uc3QgTm9kZSogbm9kZSkKIHsKICAgICBBU1NF
UlQobm9kZSk7Ci0KLSAgICBJbnNlcnRpb25Qb2ludCogaW5zZXJ0aW9uUG9pbnQ7Ci0gICAgaWYg
KG5vZGVDYW5CZURpc3RyaWJ1dGVkKG5vZGUpICYmIChpbnNlcnRpb25Qb2ludCA9IGZpbmRJbnNl
cnRpb25Qb2ludE9mKG5vZGUpKSkgewotICAgICAgICBOb2RlKiBmb3VuZCA9IGZpbmRGaXJzdEZy
b21EaXN0cmlidXRlZE5vZGUoaW5zZXJ0aW9uUG9pbnQtPm5leHREaXN0cmlidXRlZFRvKG5vZGUp
LCBpbnNlcnRpb25Qb2ludCk7Ci0gICAgICAgIGlmIChmb3VuZCkKLSAgICAgICAgICAgIHJldHVy
biBmb3VuZDsKLSAgICAgICAgcmV0dXJuIHRyYXZlcnNlTmV4dFNpYmxpbmcoaW5zZXJ0aW9uUG9p
bnQpOwotICAgIH0KLQotICAgIGZvciAoY29uc3QgTm9kZSogc2libGluZyA9IG5vZGUtPm5leHRT
aWJsaW5nKCk7IHNpYmxpbmc7IHNpYmxpbmcgPSBzaWJsaW5nLT5uZXh0U2libGluZygpKSB7Ci0g
ICAgICAgIGlmIChOb2RlKiBmb3VuZCA9IGZpbmRGaXJzdEVudGVyaW5nSW5zZXJ0aW9uUG9pbnRz
KHNpYmxpbmcpKQotICAgICAgICAgICAgcmV0dXJuIGZvdW5kOwotICAgIH0KLSAgICBpZiAobm9k
ZS0+cGFyZW50Tm9kZSgpICYmIGlzQWN0aXZlSW5zZXJ0aW9uUG9pbnQobm9kZS0+cGFyZW50Tm9k
ZSgpKSkKLSAgICAgICAgcmV0dXJuIHRyYXZlcnNlTmV4dFNpYmxpbmcobm9kZS0+cGFyZW50Tm9k
ZSgpKTsKLQotICAgIHJldHVybiBudWxscHRyOworICAgIHJldHVybiBub2RlLT5uZXh0U2libGlu
ZygpOwogfQogCiBzdGF0aWMgTm9kZSogdHJhdmVyc2VQcmV2aW91c1NpYmxpbmcoY29uc3QgTm9k
ZSogbm9kZSkKIHsKICAgICBBU1NFUlQobm9kZSk7Ci0KLSAgICBJbnNlcnRpb25Qb2ludCogaW5z
ZXJ0aW9uUG9pbnQ7Ci0gICAgaWYgKG5vZGVDYW5CZURpc3RyaWJ1dGVkKG5vZGUpICYmIChpbnNl
cnRpb25Qb2ludCA9IGZpbmRJbnNlcnRpb25Qb2ludE9mKG5vZGUpKSkgewotICAgICAgICBOb2Rl
KiBmb3VuZCA9IGZpbmRMYXN0RnJvbURpc3RyaWJ1dGVkTm9kZShpbnNlcnRpb25Qb2ludC0+cHJl
dmlvdXNEaXN0cmlidXRlZFRvKG5vZGUpLCBpbnNlcnRpb25Qb2ludCk7Ci0gICAgICAgIGlmIChm
b3VuZCkKLSAgICAgICAgICAgIHJldHVybiBmb3VuZDsKLSAgICAgICAgcmV0dXJuIHRyYXZlcnNl
UHJldmlvdXNTaWJsaW5nKGluc2VydGlvblBvaW50KTsKLSAgICB9Ci0KLSAgICBmb3IgKGNvbnN0
IE5vZGUqIHNpYmxpbmcgPSBub2RlLT5wcmV2aW91c1NpYmxpbmcoKTsgc2libGluZzsgc2libGlu
ZyA9IHNpYmxpbmctPnByZXZpb3VzU2libGluZygpKSB7Ci0gICAgICAgIGlmIChOb2RlKiBmb3Vu
ZCA9IGZpbmRMYXN0RW50ZXJpbmdJbnNlcnRpb25Qb2ludHMoc2libGluZykpCi0gICAgICAgICAg
ICByZXR1cm4gZm91bmQ7Ci0gICAgfQotICAgIGlmIChub2RlLT5wYXJlbnROb2RlKCkgJiYgaXNB
Y3RpdmVJbnNlcnRpb25Qb2ludChub2RlLT5wYXJlbnROb2RlKCkpKQotICAgICAgICByZXR1cm4g
dHJhdmVyc2VQcmV2aW91c1NpYmxpbmcobm9kZS0+cGFyZW50Tm9kZSgpKTsKLQotICAgIHJldHVy
biBudWxscHRyOworICAgIHJldHVybiBub2RlLT5wcmV2aW91c1NpYmxpbmcoKTsKIH0KIAogQ29u
dGFpbmVyTm9kZSogcGFyZW50U2xvdyhjb25zdCBOb2RlKiBub2RlKQpAQCAtMjQxLDggKzExOCw2
IEBAIE5vZGUqIHByZXZpb3VzU2libGluZ1Nsb3coY29uc3QgTm9kZSogbm8KIAogTm9kZSogbmV4
dEluU2NvcGUoY29uc3QgTm9kZSogbm9kZSkKIHsKLSAgICBBU1NFUlQoIWlzQWN0aXZlSW5zZXJ0
aW9uUG9pbnQobm9kZSkpOwotCiAgICAgaWYgKE5vZGUqIG5leHQgPSB0cmF2ZXJzZUZpcnN0Q2hp
bGQobm9kZSwgRG9udENyb3NzU2hhZG93Um9vdCkpCiAgICAgICAgIHJldHVybiBuZXh0OwogICAg
IGlmIChOb2RlKiBuZXh0ID0gdHJhdmVyc2VOZXh0U2libGluZyhub2RlKSkKQEAgLTI1NSw4ICsx
MzAsNiBAQCBOb2RlKiBuZXh0SW5TY29wZShjb25zdCBOb2RlKiBub2RlKQogCiBOb2RlKiBwcmV2
aW91c0luU2NvcGUoY29uc3QgTm9kZSogbm9kZSkKIHsKLSAgICBBU1NFUlQoIWlzQWN0aXZlSW5z
ZXJ0aW9uUG9pbnQobm9kZSkpOwotCiAgICAgaWYgKE5vZGUqIGN1cnJlbnQgPSB0cmF2ZXJzZVBy
ZXZpb3VzU2libGluZyhub2RlKSkgewogICAgICAgICB3aGlsZSAoTm9kZSogY2hpbGQgPSB0cmF2
ZXJzZUxhc3RDaGlsZChjdXJyZW50LCBEb250Q3Jvc3NTaGFkb3dSb290KSkKICAgICAgICAgICAg
IGN1cnJlbnQgPSBjaGlsZDsKQEAgLTI2NywxNSArMTQwLDExIEBAIE5vZGUqIHByZXZpb3VzSW5T
Y29wZShjb25zdCBOb2RlKiBub2RlKQogCiBOb2RlKiBwYXJlbnRJblNjb3BlKGNvbnN0IE5vZGUq
IG5vZGUpCiB7Ci0gICAgQVNTRVJUKCFpc0FjdGl2ZUluc2VydGlvblBvaW50KG5vZGUpKTsKLQog
ICAgIHJldHVybiB0cmF2ZXJzZVBhcmVudChub2RlLCBEb250Q3Jvc3NTaGFkb3dSb290KTsKIH0K
IAogTm9kZSogbGFzdENoaWxkSW5TY29wZShjb25zdCBOb2RlKiBub2RlKQogewotICAgIEFTU0VS
VCghaXNBY3RpdmVJbnNlcnRpb25Qb2ludChub2RlKSk7Ci0KICAgICByZXR1cm4gdHJhdmVyc2VM
YXN0Q2hpbGQobm9kZSwgRG9udENyb3NzU2hhZG93Um9vdCk7CiB9CiAKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL2RvbS9TaGFkb3dSb290LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZG9t
L1NoYWRvd1Jvb3QuaAkocmV2aXNpb24gMTkwODQwKQorKysgU291cmNlL1dlYkNvcmUvZG9tL1No
YWRvd1Jvb3QuaAkod29ya2luZyBjb3B5KQpAQCAtMzcsMTEgKzM3LDEwIEBACiBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiAKIGNsYXNzIEF1dGhvclN0eWxlU2hlZXRzOwotY2xhc3MgQ29udGVudERpc3Ry
aWJ1dG9yOwogY2xhc3MgSFRNTFNsb3RFbGVtZW50OwogY2xhc3MgU2xvdEFzc2lnbm1lbnQ7CiAK
LWNsYXNzIFNoYWRvd1Jvb3QgOiBwdWJsaWMgRG9jdW1lbnRGcmFnbWVudCwgcHVibGljIFRyZWVT
Y29wZSB7CitjbGFzcyBTaGFkb3dSb290IGZpbmFsIDogcHVibGljIERvY3VtZW50RnJhZ21lbnQs
IHB1YmxpYyBUcmVlU2NvcGUgewogcHVibGljOgogICAgIGVudW0gY2xhc3MgVHlwZSA6IHVpbnQ4
X3QgewogICAgICAgICBVc2VyQWdlbnQgPSAwLApAQCAtODYsOCArODUsNiBAQCBwdWJsaWM6CiAK
ICAgICB2aXJ0dWFsIHZvaWQgcmVtb3ZlQWxsRXZlbnRMaXN0ZW5lcnMoKSBvdmVycmlkZTsKIAot
ICAgIHZpcnR1YWwgQ29udGVudERpc3RyaWJ1dG9yKiBkaXN0cmlidXRvcigpIHsgcmV0dXJuIG51
bGxwdHI7IH0KLQogI2lmIEVOQUJMRShTSEFET1dfRE9NKSB8fCBFTkFCTEUoREVUQUlMU19FTEVN
RU5UKQogICAgIEhUTUxTbG90RWxlbWVudCogZmluZEFzc2lnbmVkU2xvdChjb25zdCBOb2RlJik7
CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTElucHV0RWxlbWVudC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MSW5wdXRFbGVtZW50LmNwcAkocmV2aXNp
b24gMTkwODM5KQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MSW5wdXRFbGVtZW50LmNwcAko
d29ya2luZyBjb3B5KQpAQCAtNDksNyArNDksNiBAQAogI2luY2x1ZGUgIkhUTUxPcHRpb25FbGVt
ZW50LmgiCiAjaW5jbHVkZSAiSFRNTFBhcnNlcklkaW9tcy5oIgogI2luY2x1ZGUgIklkVGFyZ2V0
T2JzZXJ2ZXIuaCIKLSNpbmNsdWRlICJJbnNlcnRpb25Qb2ludC5oIgogI2luY2x1ZGUgIktleWJv
YXJkRXZlbnQuaCIKICNpbmNsdWRlICJMYW5ndWFnZS5oIgogI2luY2x1ZGUgIkxvY2FsaXplZFN0
cmluZ3MuaCIKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFNsb3RFbGVtZW50LmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxTbG90RWxlbWVudC5jcHAJKHJl
dmlzaW9uIDE5MDg0MCkKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFNsb3RFbGVtZW50LmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMzAsNiArMzAsNyBAQAogCiAjaW5jbHVkZSAiRWxlbWVudENo
aWxkSXRlcmF0b3IuaCIKICNpbmNsdWRlICJIVE1MTmFtZXMuaCIKKyNpbmNsdWRlICJTaGFkb3dS
b290LmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApJbmRleDogU291cmNlL1dlYkNvcmUvaHRt
bC9IVE1MU2xvdEVsZW1lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL0hU
TUxTbG90RWxlbWVudC5oCShyZXZpc2lvbiAxOTA4NDApCisrKyBTb3VyY2UvV2ViQ29yZS9odG1s
L0hUTUxTbG90RWxlbWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOSw3ICsyOSw2IEBACiAjaWYg
RU5BQkxFKFNIQURPV19ET00pIHx8IEVOQUJMRShERVRBSUxTX0VMRU1FTlQpCiAKICNpbmNsdWRl
ICJIVE1MRWxlbWVudC5oIgotI2luY2x1ZGUgIkluc2VydGlvblBvaW50LmgiCiAjaW5jbHVkZSAi
UmFuZ2UuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewpJbmRleDogU291cmNlL1dlYkNvcmUvaHRt
bC9zaGFkb3cvQ29udGVudERpc3RyaWJ1dG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9odG1sL3NoYWRvdy9Db250ZW50RGlzdHJpYnV0b3IuY3BwCShyZXZpc2lvbiAxOTA4Mzkp
CisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL3NoYWRvdy9Db250ZW50RGlzdHJpYnV0b3IuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0xLDE1OSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEx
IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMgYXJlCi0gKiBtZXQ6Ci0gKgotICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqICAg
ICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMK
LSAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVj
dHMgZGVyaXZlZCBmcm9tCi0gKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Ig
d3JpdHRlbiBwZXJtaXNzaW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
VEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKLSAqICJBUyBJUyIgQU5EIEFO
WSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBM
SU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IKLSAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0gKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSAqIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QK
LSAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLAotICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCi0gKiBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2lu
Y2x1ZGUgIkNvbnRlbnREaXN0cmlidXRvci5oIgotCi0jaW5jbHVkZSAiRWxlbWVudEl0ZXJhdG9y
LmgiCi0jaW5jbHVkZSAiSW5zZXJ0aW9uUG9pbnQuaCIKLQotbmFtZXNwYWNlIFdlYkNvcmUgewot
Ci1Db250ZW50RGlzdHJpYnV0b3I6OkNvbnRlbnREaXN0cmlidXRvcigpCi0gICAgOiBtX2luc2Vy
dGlvblBvaW50TGlzdElzVmFsaWQodHJ1ZSkKLSAgICAsIG1fdmFsaWRpdHkoVW5kZXRlcm1pbmVk
KQotewotfQotCi1Db250ZW50RGlzdHJpYnV0b3I6On5Db250ZW50RGlzdHJpYnV0b3IoKQotewot
fQotCi12b2lkIENvbnRlbnREaXN0cmlidXRvcjo6aW52YWxpZGF0ZUluc2VydGlvblBvaW50TGlz
dCgpCi17Ci0gICAgbV9pbnNlcnRpb25Qb2ludExpc3RJc1ZhbGlkID0gZmFsc2U7Ci0gICAgbV9p
bnNlcnRpb25Qb2ludExpc3QuY2xlYXIoKTsKLX0KLQotY29uc3QgVmVjdG9yPFJlZlB0cjxJbnNl
cnRpb25Qb2ludD4+JiBDb250ZW50RGlzdHJpYnV0b3I6OmVuc3VyZUluc2VydGlvblBvaW50TGlz
dChTaGFkb3dSb290KiBzaGFkb3dSb290KQotewotICAgIGlmIChtX2luc2VydGlvblBvaW50TGlz
dElzVmFsaWQpCi0gICAgICAgIHJldHVybiBtX2luc2VydGlvblBvaW50TGlzdDsKLQotICAgIG1f
aW5zZXJ0aW9uUG9pbnRMaXN0SXNWYWxpZCA9IHRydWU7Ci0gICAgQVNTRVJUKG1faW5zZXJ0aW9u
UG9pbnRMaXN0LmlzRW1wdHkoKSk7Ci0KLSAgICBmb3IgKGF1dG8mIGVsZW1lbnQgOiBkZXNjZW5k
YW50c09mVHlwZTxJbnNlcnRpb25Qb2ludD4oKnNoYWRvd1Jvb3QpKQotICAgICAgICBtX2luc2Vy
dGlvblBvaW50TGlzdC5hcHBlbmQoJmVsZW1lbnQpOwotCi0gICAgcmV0dXJuIG1faW5zZXJ0aW9u
UG9pbnRMaXN0OwotfQotCi1JbnNlcnRpb25Qb2ludCogQ29udGVudERpc3RyaWJ1dG9yOjpmaW5k
SW5zZXJ0aW9uUG9pbnRGb3IoY29uc3QgTm9kZSoga2V5KSBjb25zdAotewotICAgIHJldHVybiBt
X25vZGVUb0luc2VydGlvblBvaW50LmdldChrZXkpOwotfQotCi12b2lkIENvbnRlbnREaXN0cmli
dXRvcjo6ZGlzdHJpYnV0ZShFbGVtZW50KiBob3N0KQotewotICAgIEFTU0VSVChuZWVkc0Rpc3Ry
aWJ1dGlvbigpKTsKLSAgICBBU1NFUlQobV9ub2RlVG9JbnNlcnRpb25Qb2ludC5pc0VtcHR5KCkp
OwotICAgIEFTU0VSVCghaG9zdC0+Y29udGFpbmluZ1NoYWRvd1Jvb3QoKQotICAgICAgICB8fCAh
aG9zdC0+Y29udGFpbmluZ1NoYWRvd1Jvb3QoKS0+ZGlzdHJpYnV0b3IoKQotICAgICAgICB8fCBo
b3N0LT5jb250YWluaW5nU2hhZG93Um9vdCgpLT5kaXN0cmlidXRvcigpLT5pc1ZhbGlkKCkpOwot
Ci0gICAgbV92YWxpZGl0eSA9IFZhbGlkOwotCi0gICAgaWYgKFNoYWRvd1Jvb3QqIHJvb3QgPSBo
b3N0LT5zaGFkb3dSb290KCkpIHsKLSAgICAgICAgZm9yIChhdXRvJiBwb2ludCA6IGVuc3VyZUlu
c2VydGlvblBvaW50TGlzdChyb290KSkgewotICAgICAgICAgICAgaWYgKCFwb2ludC0+aXNBY3Rp
dmUoKSkKLSAgICAgICAgICAgICAgICBjb250aW51ZTsKLQotICAgICAgICAgICAgZGlzdHJpYnV0
ZVNlbGVjdGlvbnNUbyhwb2ludC5nZXQoKSwgaG9zdCk7Ci0gICAgICAgIH0KLSAgICB9Ci19Ci0K
LWJvb2wgQ29udGVudERpc3RyaWJ1dG9yOjppbnZhbGlkYXRlKEVsZW1lbnQqIGhvc3QpCi17Ci0g
ICAgQVNTRVJUKG5lZWRzSW52YWxpZGF0aW9uKCkpOwotICAgIGJvb2wgbmVlZHNSZWF0dGFjaCA9
IChtX3ZhbGlkaXR5ID09IFVuZGV0ZXJtaW5lZCkgfHwgIW1fbm9kZVRvSW5zZXJ0aW9uUG9pbnQu
aXNFbXB0eSgpOwotCi0gICAgaWYgKFNoYWRvd1Jvb3QqIHJvb3QgPSBob3N0LT5zaGFkb3dSb290
KCkpIHsKLSAgICAgICAgZm9yIChhdXRvJiBwb2ludCA6IGVuc3VyZUluc2VydGlvblBvaW50TGlz
dChyb290KSkgewotICAgICAgICAgICAgbmVlZHNSZWF0dGFjaCA9IHRydWU7Ci0gICAgICAgICAg
ICBwb2ludC0+Y2xlYXJEaXN0cmlidXRpb24oKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIG1f
dmFsaWRpdHkgPSBJbnZhbGlkYXRpbmc7Ci0gICAgbV9ub2RlVG9JbnNlcnRpb25Qb2ludC5jbGVh
cigpOwotICAgIHJldHVybiBuZWVkc1JlYXR0YWNoOwotfQotCi12b2lkIENvbnRlbnREaXN0cmli
dXRvcjo6ZGlzdHJpYnV0ZVNlbGVjdGlvbnNUbyhJbnNlcnRpb25Qb2ludCogaW5zZXJ0aW9uUG9p
bnQsIEVsZW1lbnQqIGhvc3QpCi17Ci0gICAgZm9yIChOb2RlKiBjaGlsZCA9IGhvc3QtPmZpcnN0
Q2hpbGQoKTsgY2hpbGQ7IGNoaWxkID0gY2hpbGQtPm5leHRTaWJsaW5nKCkpIHsKLSAgICAgICAg
QVNTRVJUKCFjaGlsZC0+aXNJbnNlcnRpb25Qb2ludCgpKTsKLQotICAgICAgICBpZiAoaW5zZXJ0
aW9uUG9pbnQtPm1hdGNoVHlwZUZvcihjaGlsZCkgIT0gSW5zZXJ0aW9uUG9pbnQ6OkFsd2F5c01h
dGNoZXMpCi0gICAgICAgICAgICBjb250aW51ZTsKLQotICAgICAgICBtX25vZGVUb0luc2VydGlv
blBvaW50LmFkZChjaGlsZCwgaW5zZXJ0aW9uUG9pbnQpOwotICAgIH0KLQotICAgIGlmIChtX25v
ZGVUb0luc2VydGlvblBvaW50LmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuOwotICAgIGluc2Vy
dGlvblBvaW50LT5zZXRIYXNEaXN0cmlidXRpb24oKTsKLX0KLQotdm9pZCBDb250ZW50RGlzdHJp
YnV0b3I6OmVuc3VyZURpc3RyaWJ1dGlvbihTaGFkb3dSb290KiBzaGFkb3dSb290KQotewotICAg
IEFTU0VSVChzaGFkb3dSb290KTsKLQotICAgIFZlY3RvcjxTaGFkb3dSb290KiwgOD4gc2hhZG93
Um9vdHM7Ci0gICAgZm9yIChFbGVtZW50KiBjdXJyZW50ID0gc2hhZG93Um9vdC0+aG9zdCgpOyBj
dXJyZW50OyBjdXJyZW50ID0gY3VycmVudC0+c2hhZG93SG9zdCgpKSB7Ci0gICAgICAgIFNoYWRv
d1Jvb3QqIGN1cnJlbnRSb290ID0gY3VycmVudC0+c2hhZG93Um9vdCgpOwotICAgICAgICBpZiAo
IWN1cnJlbnRSb290LT5kaXN0cmlidXRvcigpIHx8ICFjdXJyZW50Um9vdC0+ZGlzdHJpYnV0b3Io
KS0+bmVlZHNEaXN0cmlidXRpb24oKSkKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBzaGFk
b3dSb290cy5hcHBlbmQoY3VycmVudFJvb3QpOwotICAgIH0KLQotICAgIGZvciAoc2l6ZV90IGkg
PSBzaGFkb3dSb290cy5zaXplKCk7IGkgPiAwOyAtLWkpCi0gICAgICAgIHNoYWRvd1Jvb3RzW2kg
LSAxXS0+ZGlzdHJpYnV0b3IoKS0+ZGlzdHJpYnV0ZShzaGFkb3dSb290c1tpIC0gMV0tPmhvc3Qo
KSk7Ci19Ci0KLXZvaWQgQ29udGVudERpc3RyaWJ1dG9yOjppbnZhbGlkYXRlRGlzdHJpYnV0aW9u
KEVsZW1lbnQqIGhvc3QpCi17Ci0gICAgYm9vbCBkaWROZWVkSW52YWxpZGF0aW9uID0gbmVlZHNJ
bnZhbGlkYXRpb24oKTsKLSAgICBib29sIG5lZWRzUmVhdHRhY2ggPSBkaWROZWVkSW52YWxpZGF0
aW9uID8gaW52YWxpZGF0ZShob3N0KSA6IGZhbHNlOwotCi0gICAgaWYgKG5lZWRzUmVhdHRhY2gp
Ci0gICAgICAgIGhvc3QtPnNldE5lZWRzU3R5bGVSZWNhbGMoUmVjb25zdHJ1Y3RSZW5kZXJUcmVl
KTsKLQotICAgIGlmIChkaWROZWVkSW52YWxpZGF0aW9uKSB7Ci0gICAgICAgIEFTU0VSVChtX3Zh
bGlkaXR5ID09IEludmFsaWRhdGluZyk7Ci0gICAgICAgIG1fdmFsaWRpdHkgPSBJbnZhbGlkYXRl
ZDsKLSAgICB9Ci19Ci0KLXZvaWQgQ29udGVudERpc3RyaWJ1dG9yOjpkaWRTaGFkb3dCb3VuZGFy
eUNoYW5nZShFbGVtZW50KiBob3N0KQotewotICAgIHNldFZhbGlkaXR5KFVuZGV0ZXJtaW5lZCk7
Ci0gICAgaW52YWxpZGF0ZURpc3RyaWJ1dGlvbihob3N0KTsKLX0KLQotfQpJbmRleDogU291cmNl
L1dlYkNvcmUvaHRtbC9zaGFkb3cvQ29udGVudERpc3RyaWJ1dG9yLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvaHRtbC9zaGFkb3cvQ29udGVudERpc3RyaWJ1dG9yLmgJKHJldmlzaW9u
IDE5MDgzOSkKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvc2hhZG93L0NvbnRlbnREaXN0cmlidXRv
ci5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDk2ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
LSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucyBhcmUKLSAqIG1ldDoKLSAqCi0gKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgot
ICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZQotICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgotICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotICogZGlzdHJpYnV0aW9uLgotICog
ICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0
cwotICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9k
dWN0cyBkZXJpdmVkIGZyb20KLSAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlv
ciB3cml0dGVuIHBlcm1pc3Npb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwotICogIkFTIElTIiBBTkQg
QU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLSAq
IExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUgotICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKLSAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotICogU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VAotICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsCi0gKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKLSAqIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaWZuZGVmIENvbnRlbnREaXN0cmli
dXRvcl9oCi0jZGVmaW5lIENvbnRlbnREaXN0cmlidXRvcl9oCi0KLSNpbmNsdWRlIDx3dGYvRm9y
d2FyZC5oPgotI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+Ci0jaW5jbHVkZSA8d3RmL1JlZkNvdW50
ZWQuaD4KLSNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQot
Y2xhc3MgQ29udGFpbmVyTm9kZTsKLWNsYXNzIEVsZW1lbnQ7Ci1jbGFzcyBJbnNlcnRpb25Qb2lu
dDsKLWNsYXNzIE5vZGU7Ci1jbGFzcyBTaGFkb3dSb290OwotCi1jbGFzcyBDb250ZW50RGlzdHJp
YnV0b3IgewotICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKENvbnRlbnREaXN0cmlidXRvcik7Ci1w
dWJsaWM6Ci0gICAgZW51bSBWYWxpZGl0eSB7Ci0gICAgICAgIFZhbGlkID0gMCwKLSAgICAgICAg
SW52YWxpZGF0ZWQgPSAxLAotICAgICAgICBJbnZhbGlkYXRpbmcgPSAyLAotICAgICAgICBVbmRl
dGVybWluZWQgPSAzCi0gICAgfTsKLQotICAgIENvbnRlbnREaXN0cmlidXRvcigpOwotICAgIH5D
b250ZW50RGlzdHJpYnV0b3IoKTsKLQotICAgIHZvaWQgaW52YWxpZGF0ZUluc2VydGlvblBvaW50
TGlzdCgpOwotICAgIAotICAgIEluc2VydGlvblBvaW50KiBmaW5kSW5zZXJ0aW9uUG9pbnRGb3Io
Y29uc3QgTm9kZSoga2V5KSBjb25zdDsKLQotICAgIHZvaWQgZGlzdHJpYnV0ZVNlbGVjdGlvbnNU
byhJbnNlcnRpb25Qb2ludCosIEVsZW1lbnQqIGhvc3QpOwotCi0gICAgdm9pZCBpbnZhbGlkYXRl
RGlzdHJpYnV0aW9uKEVsZW1lbnQqIGhvc3QpOwotICAgIHZvaWQgZGlkU2hhZG93Qm91bmRhcnlD
aGFuZ2UoRWxlbWVudCogaG9zdCk7Ci0KLSAgICBzdGF0aWMgdm9pZCBlbnN1cmVEaXN0cmlidXRp
b24oU2hhZG93Um9vdCopOwotICAgIHZvaWQgZGlzdHJpYnV0ZShFbGVtZW50KiBob3N0KTsKLSAg
ICBib29sIG5lZWRzRGlzdHJpYnV0aW9uKCkgY29uc3Q7Ci0KLXByaXZhdGU6Ci0gICAgY29uc3Qg
VmVjdG9yPFJlZlB0cjxJbnNlcnRpb25Qb2ludD4+JiBlbnN1cmVJbnNlcnRpb25Qb2ludExpc3Qo
U2hhZG93Um9vdCopOwotCi0gICAgYm9vbCBpbnZhbGlkYXRlKEVsZW1lbnQqIGhvc3QpOwotCi0g
ICAgdm9pZCBzZXRWYWxpZGl0eShWYWxpZGl0eSB2YWxpZGl0eSkgeyBtX3ZhbGlkaXR5ID0gdmFs
aWRpdHk7IH0KLSAgICBib29sIGlzVmFsaWQoKSBjb25zdCB7IHJldHVybiBtX3ZhbGlkaXR5ID09
IFZhbGlkOyB9Ci0gICAgYm9vbCBuZWVkc0ludmFsaWRhdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1f
dmFsaWRpdHkgIT0gSW52YWxpZGF0ZWQ7IH0KLQotICAgIFZlY3RvcjxSZWZQdHI8SW5zZXJ0aW9u
UG9pbnQ+PiBtX2luc2VydGlvblBvaW50TGlzdDsKLSAgICBIYXNoTWFwPGNvbnN0IE5vZGUqLCBS
ZWZQdHI8SW5zZXJ0aW9uUG9pbnQ+PiBtX25vZGVUb0luc2VydGlvblBvaW50OwotICAgIGJvb2wg
bV9pbnNlcnRpb25Qb2ludExpc3RJc1ZhbGlkOwotICAgIHVuc2lnbmVkIG1fdmFsaWRpdHkgOiAy
OwotfTsKLQotaW5saW5lIGJvb2wgQ29udGVudERpc3RyaWJ1dG9yOjpuZWVkc0Rpc3RyaWJ1dGlv
bigpIGNvbnN0Ci17Ci0gICAgLy8gRHVyaW5nIHRoZSBpbnZhbGlkYXRpb24sIHJlLWRpc3RyaWJ1
dGlvbiBzaG91bGQgYmUgc3VwcHJlc3NlZC4KLSAgICByZXR1cm4gbV92YWxpZGl0eSAhPSBWYWxp
ZCAmJiBtX3ZhbGlkaXR5ICE9IEludmFsaWRhdGluZzsKLX0KLQotfQotCi0jZW5kaWYKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL2h0bWwvc2hhZG93L0luc2VydGlvblBvaW50LmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL3NoYWRvdy9JbnNlcnRpb25Qb2ludC5jcHAJKHJldmlz
aW9uIDE5MDgzOSkKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvc2hhZG93L0luc2VydGlvblBvaW50
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSwxNzUgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAo
QykgMjAxMiBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zIGFyZQotICogbWV0OgotICoKLSAqICAgICAqIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
Ci0gKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlCi0gKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCi0gKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0gKiBkaXN0cmlidXRpb24uCi0g
KiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2Yg
aXRzCi0gKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHBy
b2R1Y3RzIGRlcml2ZWQgZnJvbQotICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHBy
aW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0gKiAiQVMgSVMiIEFO
RCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAot
ICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SCi0gKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAotICogT1dORVIgT1IgQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0gKiBTUEVD
SUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UCi0gKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwKLSAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQotICogVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIK
LSNpbmNsdWRlICJJbnNlcnRpb25Qb2ludC5oIgotCi0jaW5jbHVkZSAiUXVhbGlmaWVkTmFtZS5o
IgotI2luY2x1ZGUgIlN0YXRpY05vZGVMaXN0LmgiCi0jaW5jbHVkZSAiVGV4dC5oIgotCi1uYW1l
c3BhY2UgV2ViQ29yZSB7Ci0KLXVzaW5nIG5hbWVzcGFjZSBIVE1MTmFtZXM7Ci0KLUluc2VydGlv
blBvaW50OjpJbnNlcnRpb25Qb2ludChjb25zdCBRdWFsaWZpZWROYW1lJiB0YWdOYW1lLCBEb2N1
bWVudCYgZG9jdW1lbnQpCi0gICAgOiBIVE1MRWxlbWVudCh0YWdOYW1lLCBkb2N1bWVudCwgQ3Jl
YXRlSW5zZXJ0aW9uUG9pbnQpCi0gICAgLCBtX2hhc0Rpc3RyaWJ1dGlvbihmYWxzZSkKLXsKLX0K
LQotSW5zZXJ0aW9uUG9pbnQ6On5JbnNlcnRpb25Qb2ludCgpCi17Ci19Ci0KLWJvb2wgSW5zZXJ0
aW9uUG9pbnQ6OnNob3VsZFVzZUZhbGxiYWNrRWxlbWVudHMoKSBjb25zdAotewotICAgIHJldHVy
biBpc0FjdGl2ZSgpICYmICFoYXNEaXN0cmlidXRpb24oKTsKLX0KLQotYm9vbCBJbnNlcnRpb25Q
b2ludDo6aXNBY3RpdmUoKSBjb25zdAotewotICAgIGlmICghY29udGFpbmluZ1NoYWRvd1Jvb3Qo
KSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGNvbnN0IE5vZGUqIG5vZGUgPSBwYXJlbnRO
b2RlKCk7Ci0gICAgd2hpbGUgKG5vZGUpIHsKLSAgICAgICAgaWYgKG5vZGUtPmlzSW5zZXJ0aW9u
UG9pbnQoKSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgICAgICBub2RlID0gbm9k
ZS0+cGFyZW50Tm9kZSgpOwotICAgIH0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbCBJbnNl
cnRpb25Qb2ludDo6cmVuZGVyZXJJc05lZWRlZChjb25zdCBSZW5kZXJTdHlsZSYgc3R5bGUpCi17
Ci0gICAgcmV0dXJuICFpc0FjdGl2ZSgpICYmIEhUTUxFbGVtZW50OjpyZW5kZXJlcklzTmVlZGVk
KHN0eWxlKTsKLX0KLQotdm9pZCBJbnNlcnRpb25Qb2ludDo6Y2hpbGRyZW5DaGFuZ2VkKGNvbnN0
IENoaWxkQ2hhbmdlJiBjaGFuZ2UpCi17Ci0gICAgSFRNTEVsZW1lbnQ6OmNoaWxkcmVuQ2hhbmdl
ZChjaGFuZ2UpOwotICAgIGlmIChTaGFkb3dSb290KiByb290ID0gY29udGFpbmluZ1NoYWRvd1Jv
b3QoKSkgewotICAgICAgICBSRUxFQVNFX0FTU0VSVChyb290LT5kaXN0cmlidXRvcigpKTsKLSAg
ICAgICAgcm9vdC0+ZGlzdHJpYnV0b3IoKS0+aW52YWxpZGF0ZURpc3RyaWJ1dGlvbihyb290LT5o
b3N0KCkpOwotICAgIH0KLX0KLQotTm9kZTo6SW5zZXJ0aW9uTm90aWZpY2F0aW9uUmVxdWVzdCBJ
bnNlcnRpb25Qb2ludDo6aW5zZXJ0ZWRJbnRvKENvbnRhaW5lck5vZGUmIGluc2VydGlvblBvaW50
KQotewotICAgIEhUTUxFbGVtZW50OjppbnNlcnRlZEludG8oaW5zZXJ0aW9uUG9pbnQpOwotCi0g
ICAgaWYgKFNoYWRvd1Jvb3QqIHJvb3QgPSBjb250YWluaW5nU2hhZG93Um9vdCgpKSB7Ci0gICAg
ICAgIFJFTEVBU0VfQVNTRVJUKHJvb3QtPmRpc3RyaWJ1dG9yKCkpOwotICAgICAgICByb290LT5k
aXN0cmlidXRvcigpLT5kaWRTaGFkb3dCb3VuZGFyeUNoYW5nZShyb290LT5ob3N0KCkpOwotICAg
ICAgICByb290LT5kaXN0cmlidXRvcigpLT5pbnZhbGlkYXRlSW5zZXJ0aW9uUG9pbnRMaXN0KCk7
Ci0gICAgfQotCi0gICAgcmV0dXJuIEluc2VydGlvbkRvbmU7Ci19Ci0KLXZvaWQgSW5zZXJ0aW9u
UG9pbnQ6OnJlbW92ZWRGcm9tKENvbnRhaW5lck5vZGUmIGluc2VydGlvblBvaW50KQotewotICAg
IFNoYWRvd1Jvb3QqIHJvb3QgPSBjb250YWluaW5nU2hhZG93Um9vdCgpOwotICAgIGlmICghcm9v
dCkKLSAgICAgICAgcm9vdCA9IGluc2VydGlvblBvaW50LmNvbnRhaW5pbmdTaGFkb3dSb290KCk7
Ci0KLSAgICBpZiAocm9vdCAmJiByb290LT5ob3N0KCkpIHsKLSAgICAgICAgUkVMRUFTRV9BU1NF
UlQocm9vdC0+ZGlzdHJpYnV0b3IoKSk7Ci0gICAgICAgIHJvb3QtPmRpc3RyaWJ1dG9yKCktPmlu
dmFsaWRhdGVEaXN0cmlidXRpb24ocm9vdC0+aG9zdCgpKTsKLSAgICAgICAgcm9vdC0+ZGlzdHJp
YnV0b3IoKS0+aW52YWxpZGF0ZUluc2VydGlvblBvaW50TGlzdCgpOwotICAgIH0KLQotICAgIC8v
IFNpbmNlIHRoaXMgaW5zZXJ0aW9uIHBvaW50IGlzIG5vIGxvbmdlciB2aXNpYmxlIGZyb20gdGhl
IHNoYWRvdyBzdWJ0cmVlLCBpdCBuZWVkIHRvIGNsZWFuIGl0c2VsZiB1cC4KLSAgICBjbGVhckRp
c3RyaWJ1dGlvbigpOwotCi0gICAgSFRNTEVsZW1lbnQ6OnJlbW92ZWRGcm9tKGluc2VydGlvblBv
aW50KTsKLX0KLSAgICAKLU5vZGUqIEluc2VydGlvblBvaW50OjpmaXJzdERpc3RyaWJ1dGVkKCkg
Y29uc3QKLXsKLSAgICBpZiAoIW1faGFzRGlzdHJpYnV0aW9uKQotICAgICAgICByZXR1cm4gMDsK
LSAgICBmb3IgKE5vZGUqIGN1cnJlbnQgPSBzaGFkb3dIb3N0KCktPmZpcnN0Q2hpbGQoKTsgY3Vy
cmVudDsgY3VycmVudCA9IGN1cnJlbnQtPm5leHRTaWJsaW5nKCkpIHsKLSAgICAgICAgaWYgKG1h
dGNoVHlwZUZvcihjdXJyZW50KSA9PSBJbnNlcnRpb25Qb2ludDo6QWx3YXlzTWF0Y2hlcykKLSAg
ICAgICAgICAgIHJldHVybiBjdXJyZW50OwotICAgIH0KLSAgICByZXR1cm4gMDsKLX0KLQotTm9k
ZSogSW5zZXJ0aW9uUG9pbnQ6Omxhc3REaXN0cmlidXRlZCgpIGNvbnN0Ci17Ci0gICAgaWYgKCFt
X2hhc0Rpc3RyaWJ1dGlvbikKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgZm9yIChOb2RlKiBjdXJy
ZW50ID0gc2hhZG93SG9zdCgpLT5sYXN0Q2hpbGQoKTsgY3VycmVudDsgY3VycmVudCA9IGN1cnJl
bnQtPnByZXZpb3VzU2libGluZygpKSB7Ci0gICAgICAgIGlmIChtYXRjaFR5cGVGb3IoY3VycmVu
dCkgPT0gSW5zZXJ0aW9uUG9pbnQ6OkFsd2F5c01hdGNoZXMpCi0gICAgICAgICAgICByZXR1cm4g
Y3VycmVudDsKLSAgICB9Ci0gICAgcmV0dXJuIDA7Ci19Ci0KLU5vZGUqIEluc2VydGlvblBvaW50
OjpuZXh0RGlzdHJpYnV0ZWRUbyhjb25zdCBOb2RlKiBub2RlKSBjb25zdAotewotICAgIGZvciAo
Tm9kZSogY3VycmVudCA9IG5vZGUtPm5leHRTaWJsaW5nKCk7IGN1cnJlbnQ7IGN1cnJlbnQgPSBj
dXJyZW50LT5uZXh0U2libGluZygpKSB7Ci0gICAgICAgIGlmIChtYXRjaFR5cGVGb3IoY3VycmVu
dCkgPT0gSW5zZXJ0aW9uUG9pbnQ6OkFsd2F5c01hdGNoZXMpCi0gICAgICAgICAgICByZXR1cm4g
Y3VycmVudDsKLSAgICB9Ci0gICAgcmV0dXJuIDA7Ci19Ci0KLU5vZGUqIEluc2VydGlvblBvaW50
OjpwcmV2aW91c0Rpc3RyaWJ1dGVkVG8oY29uc3QgTm9kZSogbm9kZSkgY29uc3QKLXsKLSAgICBm
b3IgKE5vZGUqIGN1cnJlbnQgPSBub2RlLT5wcmV2aW91c1NpYmxpbmcoKTsgY3VycmVudDsgY3Vy
cmVudCA9IGN1cnJlbnQtPnByZXZpb3VzU2libGluZygpKSB7Ci0gICAgICAgIGlmIChtYXRjaFR5
cGVGb3IoY3VycmVudCkgPT0gSW5zZXJ0aW9uUG9pbnQ6OkFsd2F5c01hdGNoZXMpCi0gICAgICAg
ICAgICByZXR1cm4gY3VycmVudDsKLSAgICB9Ci0gICAgcmV0dXJuIDA7Ci19Ci0KLUluc2VydGlv
blBvaW50KiBmaW5kSW5zZXJ0aW9uUG9pbnRPZihjb25zdCBOb2RlKiBwcm9qZWN0ZWROb2RlKQot
ewotICAgIGlmIChTaGFkb3dSb290KiBzaGFkb3dSb290ID0gc2hhZG93Um9vdE9mUGFyZW50Rm9y
RGlzdHJpYnV0aW9uKHByb2plY3RlZE5vZGUpKSB7Ci0gICAgICAgIGlmIChTaGFkb3dSb290KiBy
b290ID0gcHJvamVjdGVkTm9kZS0+Y29udGFpbmluZ1NoYWRvd1Jvb3QoKSkKLSAgICAgICAgICAg
IENvbnRlbnREaXN0cmlidXRvcjo6ZW5zdXJlRGlzdHJpYnV0aW9uKHJvb3QpOwotICAgICAgICBp
ZiAoYXV0byogZGlzdHJpYnV0b3IgPSBzaGFkb3dSb290LT5kaXN0cmlidXRvcigpKQotICAgICAg
ICAgICAgcmV0dXJuIGRpc3RyaWJ1dG9yLT5maW5kSW5zZXJ0aW9uUG9pbnRGb3IocHJvamVjdGVk
Tm9kZSk7Ci0gICAgfQotICAgIHJldHVybiAwOwotfQotCi12b2lkIFNoYWRvd1Jvb3RXaXRoSW5z
ZXJ0aW9uUG9pbnRzOjpjaGlsZHJlbkNoYW5nZWQoY29uc3QgQ2hpbGRDaGFuZ2UmIGNoYW5nZSkK
LXsKLSAgICBDb250YWluZXJOb2RlOjpjaGlsZHJlbkNoYW5nZWQoY2hhbmdlKTsKLSAgICAKLSAg
ICBpZiAoIWlzT3JwaGFuKCkpCi0gICAgICAgIG1fZGlzdHJpYnV0b3IuaW52YWxpZGF0ZURpc3Ry
aWJ1dGlvbihob3N0KCkpOwotfQotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9odG1sL3NoYWRvdy9JbnNlcnRpb25Qb2ludC5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL2h0bWwvc2hhZG93L0luc2VydGlvblBvaW50LmgJKHJldmlzaW9uIDE5MDgz
OSkKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvc2hhZG93L0luc2VydGlvblBvaW50LmgJKHdvcmtp
bmcgY29weSkKQEAgLTEsMTUwICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTIgR29v
Z2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucyBhcmUKLSAqIG1ldDoKLSAqCi0gKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogICAgICog
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQot
ICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lcgotICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotICogZGlzdHJpYnV0aW9uLgotICogICAgICogTmVp
dGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwotICogY29u
dHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJp
dmVkIGZyb20KLSAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVu
IHBlcm1pc3Npb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09Q
WVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwotICogIkFTIElTIiBBTkQgQU5ZIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQg
VE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUgotICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIFRIRSBDT1BZUklHSFQKLSAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotICogU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotICogTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsCi0gKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKLSAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaWZuZGVmIEluc2VydGlvblBvaW50X2gKLSNkZWZp
bmUgSW5zZXJ0aW9uUG9pbnRfaAotCi0jaW5jbHVkZSAiQ29udGVudERpc3RyaWJ1dG9yLmgiCi0j
aW5jbHVkZSAiSFRNTEVsZW1lbnQuaCIKLSNpbmNsdWRlICJIVE1MTmFtZXMuaCIKLSNpbmNsdWRl
ICJTaGFkb3dSb290LmgiCi0jaW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4KLQotbmFtZXNwYWNlIFdl
YkNvcmUgewotCi1jbGFzcyBJbnNlcnRpb25Qb2ludCA6IHB1YmxpYyBIVE1MRWxlbWVudCB7Ci1w
dWJsaWM6Ci0gICAgZW51bSBNYXRjaFR5cGUgewotICAgICAgICBBbHdheXNNYXRjaGVzLAotICAg
ICAgICBOZXZlck1hdGNoZXMsCi0gICAgfTsKLQotICAgIHZpcnR1YWwgfkluc2VydGlvblBvaW50
KCk7Ci0KLSAgICBib29sIGhhc0Rpc3RyaWJ1dGlvbigpIGNvbnN0IHsgcmV0dXJuIG1faGFzRGlz
dHJpYnV0aW9uOyB9Ci0gICAgdm9pZCBzZXRIYXNEaXN0cmlidXRpb24oKSB7IG1faGFzRGlzdHJp
YnV0aW9uID0gdHJ1ZTsgfQotICAgIHZvaWQgY2xlYXJEaXN0cmlidXRpb24oKSB7IG1faGFzRGlz
dHJpYnV0aW9uID0gZmFsc2U7IH0KLSAgICBXRUJDT1JFX0VYUE9SVCBib29sIGlzQWN0aXZlKCkg
Y29uc3Q7Ci0KLSAgICB2aXJ0dWFsIE1hdGNoVHlwZSBtYXRjaFR5cGVGb3IoTm9kZSopIGNvbnN0
IHsgcmV0dXJuIEFsd2F5c01hdGNoZXM7IH0KLQotICAgIGJvb2wgc2hvdWxkVXNlRmFsbGJhY2tF
bGVtZW50cygpIGNvbnN0OwotCi0gICAgTm9kZSogZmlyc3REaXN0cmlidXRlZCgpIGNvbnN0Owot
ICAgIE5vZGUqIGxhc3REaXN0cmlidXRlZCgpIGNvbnN0OwotICAgIE5vZGUqIG5leHREaXN0cmli
dXRlZFRvKGNvbnN0IE5vZGUqKSBjb25zdDsKLSAgICBOb2RlKiBwcmV2aW91c0Rpc3RyaWJ1dGVk
VG8oY29uc3QgTm9kZSopIGNvbnN0OwotCi1wcm90ZWN0ZWQ6Ci0gICAgSW5zZXJ0aW9uUG9pbnQo
Y29uc3QgUXVhbGlmaWVkTmFtZSYsIERvY3VtZW50Jik7Ci0gICAgdmlydHVhbCBib29sIHJlbmRl
cmVySXNOZWVkZWQoY29uc3QgUmVuZGVyU3R5bGUmKSBvdmVycmlkZTsKLSAgICB2aXJ0dWFsIHZv
aWQgY2hpbGRyZW5DaGFuZ2VkKGNvbnN0IENoaWxkQ2hhbmdlJikgb3ZlcnJpZGU7Ci0gICAgdmly
dHVhbCBJbnNlcnRpb25Ob3RpZmljYXRpb25SZXF1ZXN0IGluc2VydGVkSW50byhDb250YWluZXJO
b2RlJikgb3ZlcnJpZGU7Ci0gICAgdmlydHVhbCB2b2lkIHJlbW92ZWRGcm9tKENvbnRhaW5lck5v
ZGUmKSBvdmVycmlkZTsKLQotcHJpdmF0ZToKLSAgICB2aXJ0dWFsIGJvb2wgaXNJbnNlcnRpb25Q
b2ludE5vZGUoKSBjb25zdCBvdmVycmlkZSBmaW5hbCB7IHJldHVybiB0cnVlOyB9Ci0KLSAgICBi
b29sIG1faGFzRGlzdHJpYnV0aW9uOwotfTsKLQotY2xhc3MgU2hhZG93Um9vdFdpdGhJbnNlcnRp
b25Qb2ludHMgOiBwdWJsaWMgU2hhZG93Um9vdCB7Ci1wdWJsaWM6Ci0gICAgCi0gICAgc3RhdGlj
IFJlZjxTaGFkb3dSb290V2l0aEluc2VydGlvblBvaW50cz4gY3JlYXRlKERvY3VtZW50JiBkb2N1
bWVudCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3IFNoYWRvd1Jvb3RXaXRo
SW5zZXJ0aW9uUG9pbnRzKGRvY3VtZW50KSk7Ci0gICAgfQotICAgIAotICAgIHZpcnR1YWwgQ29u
dGVudERpc3RyaWJ1dG9yKiBkaXN0cmlidXRvcigpIG92ZXJyaWRlIHsgcmV0dXJuICZtX2Rpc3Ry
aWJ1dG9yOyB9Ci0gICAgCi1wcml2YXRlOgotICAgIFNoYWRvd1Jvb3RXaXRoSW5zZXJ0aW9uUG9p
bnRzKERvY3VtZW50JiBkb2N1bWVudCkKLSAgICAgICAgOiBTaGFkb3dSb290KGRvY3VtZW50LCBU
eXBlOjpVc2VyQWdlbnQpCi0gICAgeyB9Ci0KLSAgICB2aXJ0dWFsIHZvaWQgY2hpbGRyZW5DaGFu
Z2VkKGNvbnN0IENoaWxkQ2hhbmdlJikgb3ZlcnJpZGU7Ci0KLSAgICBDb250ZW50RGlzdHJpYnV0
b3IgbV9kaXN0cmlidXRvcjsKLX07Ci0KLWlubGluZSBib29sIGlzQWN0aXZlSW5zZXJ0aW9uUG9p
bnQoY29uc3QgTm9kZSogbm9kZSkKLXsKLSAgICByZXR1cm4gaXM8SW5zZXJ0aW9uUG9pbnQ+KG5v
ZGUpICYmIGRvd25jYXN0PEluc2VydGlvblBvaW50Pigqbm9kZSkuaXNBY3RpdmUoKTsKLX0KLQot
aW5saW5lIE5vZGUqIHBhcmVudE5vZGVGb3JEaXN0cmlidXRpb24oY29uc3QgTm9kZSogbm9kZSkK
LXsKLSAgICBBU1NFUlQobm9kZSk7Ci0KLSAgICBpZiAoTm9kZSogcGFyZW50ID0gbm9kZS0+cGFy
ZW50Tm9kZSgpKSB7Ci0gICAgICAgIGlmIChpczxJbnNlcnRpb25Qb2ludD4oKnBhcmVudCkgJiYg
ZG93bmNhc3Q8SW5zZXJ0aW9uUG9pbnQ+KCpwYXJlbnQpLnNob3VsZFVzZUZhbGxiYWNrRWxlbWVu
dHMoKSkKLSAgICAgICAgICAgIHJldHVybiBwYXJlbnQtPnBhcmVudE5vZGUoKTsKLSAgICAgICAg
cmV0dXJuIHBhcmVudDsKLSAgICB9Ci0KLSAgICByZXR1cm4gbnVsbHB0cjsKLX0KLQotaW5saW5l
IEVsZW1lbnQqIHBhcmVudEVsZW1lbnRGb3JEaXN0cmlidXRpb24oY29uc3QgTm9kZSogbm9kZSkK
LXsKLSAgICBpZiAoTm9kZSogcGFyZW50ID0gcGFyZW50Tm9kZUZvckRpc3RyaWJ1dGlvbihub2Rl
KSkgewotICAgICAgICBpZiAoaXM8RWxlbWVudD4oKnBhcmVudCkpCi0gICAgICAgICAgICByZXR1
cm4gZG93bmNhc3Q8RWxlbWVudD4ocGFyZW50KTsKLSAgICB9Ci0KLSAgICByZXR1cm4gbnVsbHB0
cjsKLX0KLQotaW5saW5lIFNoYWRvd1Jvb3QqIHNoYWRvd1Jvb3RPZlBhcmVudEZvckRpc3RyaWJ1
dGlvbihjb25zdCBOb2RlKiBub2RlKQotewotICAgIEFTU0VSVChub2RlKTsKLSAgICBpZiAoRWxl
bWVudCogcGFyZW50ID0gcGFyZW50RWxlbWVudEZvckRpc3RyaWJ1dGlvbihub2RlKSkKLSAgICAg
ICAgcmV0dXJuIHBhcmVudC0+c2hhZG93Um9vdCgpOwotCi0gICAgcmV0dXJuIG51bGxwdHI7Ci19
Ci0KLUluc2VydGlvblBvaW50KiBmaW5kSW5zZXJ0aW9uUG9pbnRPZihjb25zdCBOb2RlKik7Ci0K
LWlubGluZSBib29sIGhhc1NoYWRvd1Jvb3RPckFjdGl2ZUluc2VydGlvblBvaW50UGFyZW50KGNv
bnN0IE5vZGUmIG5vZGUpCi17Ci0gICAgcmV0dXJuIGhhc1NoYWRvd1Jvb3RQYXJlbnQobm9kZSkK
LSAgICAgICAgfHwgaXNBY3RpdmVJbnNlcnRpb25Qb2ludChmaW5kSW5zZXJ0aW9uUG9pbnRPZigm
bm9kZSkpCi0gICAgICAgIHx8IGlzQWN0aXZlSW5zZXJ0aW9uUG9pbnQobm9kZS5wYXJlbnROb2Rl
KCkpOwotfQotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KLVNQRUNJQUxJWkVfVFlQRV9UUkFJ
VFNfQkVHSU4oV2ViQ29yZTo6SW5zZXJ0aW9uUG9pbnQpCi0gICAgc3RhdGljIGJvb2wgaXNUeXBl
KGNvbnN0IFdlYkNvcmU6Ok5vZGUmIG5vZGUpIHsgcmV0dXJuIG5vZGUuaXNJbnNlcnRpb25Qb2lu
dCgpOyB9Ci1TUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0VORCgpCi0KLSNlbmRpZiAvLyBJbnNlcnRp
b25Qb2ludF9oCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wYWdlL0ZvY3VzQ29udHJvbGxlci5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGFnZS9Gb2N1c0NvbnRyb2xsZXIuY3BwCShy
ZXZpc2lvbiAxOTA4MzkpCisrKyBTb3VyY2UvV2ViQ29yZS9wYWdlL0ZvY3VzQ29udHJvbGxlci5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTQ5NiwxMCArNDk2LDggQEAgRWxlbWVudCogRm9jdXNDb250
cm9sbGVyOjpuZXh0Rm9jdXNhYmxlRQogCiBFbGVtZW50KiBGb2N1c0NvbnRyb2xsZXI6OnByZXZp
b3VzRm9jdXNhYmxlRWxlbWVudChGb2N1c05hdmlnYXRpb25TY29wZSBzY29wZSwgTm9kZSogc3Rh
cnQsIEtleWJvYXJkRXZlbnQqIGV2ZW50KQogewotICAgIHVzaW5nIG5hbWVzcGFjZSBOb2RlUmVu
ZGVyaW5nVHJhdmVyc2FsOwotCiAgICAgTm9kZSogbGFzdCA9IG51bGxwdHI7Ci0gICAgZm9yIChO
b2RlKiBub2RlID0gc2NvcGUucm9vdE5vZGUoKTsgbm9kZTsgbm9kZSA9IGxhc3RDaGlsZEluU2Nv
cGUobm9kZSkpCisgICAgZm9yIChOb2RlKiBub2RlID0gc2NvcGUucm9vdE5vZGUoKTsgbm9kZTsg
bm9kZSA9IE5vZGVSZW5kZXJpbmdUcmF2ZXJzYWw6Omxhc3RDaGlsZEluU2NvcGUobm9kZSkpCiAg
ICAgICAgIGxhc3QgPSBub2RlOwogICAgIEFTU0VSVChsYXN0KTsKIApAQCAtNTA4LDcgKzUwNiw3
IEBAIEVsZW1lbnQqIEZvY3VzQ29udHJvbGxlcjo6cHJldmlvdXNGb2N1c2EKICAgICBOb2RlKiBz
dGFydGluZ05vZGU7CiAgICAgaW50IHN0YXJ0aW5nVGFiSW5kZXg7CiAgICAgaWYgKHN0YXJ0KSB7
Ci0gICAgICAgIHN0YXJ0aW5nTm9kZSA9IHByZXZpb3VzSW5TY29wZShzdGFydCk7CisgICAgICAg
IHN0YXJ0aW5nTm9kZSA9IE5vZGVSZW5kZXJpbmdUcmF2ZXJzYWw6OnByZXZpb3VzSW5TY29wZShz
dGFydCk7CiAgICAgICAgIHN0YXJ0aW5nVGFiSW5kZXggPSBhZGp1c3RlZFRhYkluZGV4KCpzdGFy
dCwgKmV2ZW50KTsKICAgICB9IGVsc2UgewogICAgICAgICBzdGFydGluZ05vZGUgPSBsYXN0OwpA
QCAtNTE3LDcgKzUxNSw3IEBAIEVsZW1lbnQqIEZvY3VzQ29udHJvbGxlcjo6cHJldmlvdXNGb2N1
c2EKIAogICAgIC8vIEhvd2V2ZXIsIGlmIGEgbm9kZSBpcyBleGNsdWRlZCBmcm9tIHRoZSBub3Jt
YWwgdGFiYmluZyBjeWNsZSwgdGhlIHByZXZpb3VzIGZvY3VzYWJsZSBub2RlIGlzIGRldGVybWlu
ZWQgYnkgdHJlZSBvcmRlcgogICAgIGlmIChzdGFydGluZ1RhYkluZGV4IDwgMCkgewotICAgICAg
ICBmb3IgKE5vZGUqIG5vZGUgPSBzdGFydGluZ05vZGU7IG5vZGU7IG5vZGUgPSBwcmV2aW91c0lu
U2NvcGUobm9kZSkpIHsKKyAgICAgICAgZm9yIChOb2RlKiBub2RlID0gc3RhcnRpbmdOb2RlOyBu
b2RlOyBub2RlID0gTm9kZVJlbmRlcmluZ1RyYXZlcnNhbDo6cHJldmlvdXNJblNjb3BlKG5vZGUp
KSB7CiAgICAgICAgICAgICBpZiAoIWlzPEVsZW1lbnQ+KCpub2RlKSkKICAgICAgICAgICAgICAg
ICBjb250aW51ZTsKICAgICAgICAgICAgIEVsZW1lbnQmIGVsZW1lbnQgPSBkb3duY2FzdDxFbGVt
ZW50Pigqbm9kZSk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS90ZXN0aW5nL0ludGVybmFscy5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvdGVzdGluZy9JbnRlcm5hbHMuY3BwCShyZXZp
c2lvbiAxOTA4MzkpCisrKyBTb3VyY2UvV2ViQ29yZS90ZXN0aW5nL0ludGVybmFscy5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTM3LDcgKzM3LDYgQEAKICNpbmNsdWRlICJDaHJvbWVDbGllbnQuaCIK
ICNpbmNsdWRlICJDbGllbnRSZWN0LmgiCiAjaW5jbHVkZSAiQ2xpZW50UmVjdExpc3QuaCIKLSNp
bmNsdWRlICJDb250ZW50RGlzdHJpYnV0b3IuaCIKICNpbmNsdWRlICJDdXJzb3IuaCIKICNpbmNs
dWRlICJET01QYXRoLmgiCiAjaW5jbHVkZSAiRE9NU3RyaW5nTGlzdC5oIgo=
</data>
<flag name="review"
          id="288028"
          type_id="1"
          status="+"
          setter="sam"
    />
          </attachment>
      

    </bug>

</bugzilla>