<?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>178431</bug_id>
          
          <creation_ts>2017-10-17 23:55:44 -0700</creation_ts>
          <short_desc>Add an argument indicating the type of insertion to Node::insertedInto</short_desc>
          <delta_ts>2017-10-18 23:36:46 -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>
          
          <see_also>https://bugs.webkit.org/show_bug.cgi?id=178505</see_also>
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Ryosuke Niwa">rniwa</reporter>
          <assigned_to name="Ryosuke Niwa">rniwa</assigned_to>
          <cc>cdumez</cc>
    
    <cc>jiewen_tan</cc>
    
    <cc>koivisto</cc>
    
    <cc>webkit-bug-importer</cc>
    
    <cc>zalan</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1361584</commentid>
    <comment_count>0</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2017-10-17 23:55:44 -0700</bug_when>
    <thetext>In order to have a better guarantee of node flags,  etc... we need to have an argument
indicating what kind of insertion mutation and happened to insertedInto.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1361588</commentid>
    <comment_count>1</comment_count>
      <attachid>324102</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2017-10-18 00:35:19 -0700</bug_when>
    <thetext>Created attachment 324102
Cleanup</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1361594</commentid>
    <comment_count>2</comment_count>
      <attachid>324105</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2017-10-18 01:16:16 -0700</bug_when>
    <thetext>Created attachment 324105
Cleanup</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1361651</commentid>
    <comment_count>3</comment_count>
      <attachid>324105</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2017-10-18 05:24:00 -0700</bug_when>
    <thetext>Comment on attachment 324105
Cleanup

r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1361890</commentid>
    <comment_count>4</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2017-10-18 14:34:28 -0700</bug_when>
    <thetext>Committed r223628: &lt;https://trac.webkit.org/changeset/223628&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1361891</commentid>
    <comment_count>5</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2017-10-18 14:35:44 -0700</bug_when>
    <thetext>&lt;rdar://problem/35060952&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>324102</attachid>
            <date>2017-10-18 00:35:19 -0700</date>
            <delta_ts>2017-10-18 01:16:14 -0700</delta_ts>
            <desc>Cleanup</desc>
            <filename>bug-178431-20171018003518.patch</filename>
            <type>text/plain</type>
            <size>101599</size>
            <attacher name="Ryosuke Niwa">rniwa</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDIyMzQ3NSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE5NCBAQAorMjAxNy0xMC0xNyAgUnlvc3Vr
ZSBOaXdhICA8cm5pd2FAd2Via2l0Lm9yZz4KKworICAgICAgICBBZGQgYW4gYXJndW1lbnQgaW5k
aWNhdGluZyB0aGUgdHlwZSBvZiBpbnNlcnRpb24gdG8gTm9kZTo6aW5zZXJ0ZWRJbnRvCisgICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNzg0MzEKKworICAg
ICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBBZGRlZCBJbnNlcnRp
b25UeXBlIGFzIHRoZSBmaXJzdCBhcmd1bWVudCB0byBOb2RlOjppbnNlcnRlZEludG8sIHdoaWNo
IGNvbnRhaW5zIHR3byBib29sZWFucyBpbmRpY2F0aW5nCisgICAgICAgIHdoZXRoZXIgdGhlIG5v
ZGUganVzdCBiZWNvbWUgbmV3bHkgY29ubmVjdGVkIHRvIGEgZG9jdW1lbnQsIGFuZCB3aGV0aGVy
IG5vZGUncyB0cmVlIHNjb3BlIGhhZCBjaGFuZ2VkIG9yIG5vdC4KKworICAgICAgICBUaGVzZSBi
b29sZWFuIGZsYWdzIHNpbXBsaWZpZSB0aGUgbG9naWMgaW4gaW5zZXJ0ZWRJbnRvIGltcGxlbWVu
dGF0aW9ucywgYW5kIGFyZSByZXF1aXJlZCB0byBoYXZlIGEgYmV0dGVyCisgICAgICAgIGd1YXJh
bnRlZSBhYm91dCB0aGUgY29ycmVjdG5lc3Mgb2Ygbm9kZSBmbGFncyBkdXJpbmcgY2FsbHMgdG8g
aW5zZXJ0ZWRJbnRvLiBSaWdodCBub3csIGlzQ29ubmVjdGVkKCkgYW5kCisgICAgICAgIGlzSW5T
aGFkb3dUcmVlKCkgYXJlIGJvdGggb3V0ZGF0ZWQgdW50aWwgTm9kZTo6aW5zZXJ0ZWRJbnRvIGlz
IGNhbGxlZC4KKworICAgICAgICBBbHNvIHJlbmFtZWQgdGhlIHNlY29uZCBhcmd1bWVudCBmcm9t
IGluc2VydGlvblBvaW50IHRvIHBhcmVudE9mSW5zZXJ0ZWRUcmVlIHRvIG1ha2UgdGhlIHNlbWFu
dGljcyBjbGVhciwKKyAgICAgICAgYW5kIHJlbmFtZWQgZmluaXNoZWRJbnNlcnRpbmdTdWJ0cmVl
IHRvIGRpZEZpbmlzaEluc2VydGluZ05vZGUsIGFuZCByZW5hbWVkIEluc2VydGlvbk5vdGlmaWNh
dGlvblJlcXVlc3QKKyAgICAgICAgdG8gSW5zZXJ0ZWRJbnRvUmVzdWx0IHVzaW5nIGVudW0gY2xh
c3MuCisKKyAgICAgICAgTm90ZSB0aGF0IGluIHNvbWUgaW1wbGVtZW50YXRpb25zIG9mIGluc2Vy
dGVkSW50bywgd2UgY2hlY2sgd2hldGhlciBpc0Nvbm5lY3RlZCgpIHdhcyBmYWxzZSB0byBkZWNp
ZGUgd2hldGhlcgorICAgICAgICB0aGUgbm9kZSBpcyBuZXdseSBjb25uZWN0ZWQgdG8gYSBkb2N1
bWVudC4gVGhpcyBleHRyYSBjaGVjayBpcyBubyBsb25nZXIgbmVjZXNzYXJ5IHNpbmNlIG5vIG5v
ZGUgd2lsbCBiZSBpbnNlcnRlZAorICAgICAgICBpbnRvIGEgZG9jdW1lbnQgd2l0aG91dCBmaXJz
dCBiZWluZyBjb21wbGV0ZWx5IHJlbW92ZWQgYWZ0ZXIgcjIyMzQ1OC4KKworICAgICAgICBObyBu
ZXcgdGVzdHMgc2luY2UgdGhlcmUgc2hvdWxkIGJlIG5vIGJlaGF2aW9yYWwgY2hhbmdlcy4KKwor
ICAgICAgICAqIGRvbS9Db250YWluZXJOb2RlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRh
aW5lck5vZGU6Om5vdGlmeUNoaWxkSW5zZXJ0ZWQpOgorICAgICAgICAqIGRvbS9Db250YWluZXJO
b2RlQWxnb3JpdGhtcy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpub3RpZnlOb2RlSW5zZXJ0ZWRJ
bnRvRG9jdW1lbnQpOiBSZXBsYWNlZCB0aGUgY2hlY2sgdGhhdCB0aGUgbm9kZSBoYWQgbm90IGJl
ZW4gZGlzY29ubmVjdGVkIGJ5IHNjcmlwdHMKKyAgICAgICAgYnkgYSByZWxlYXNlIGFzc2VydCBu
b3cgdGhhdCB3ZSBiZWxpZXZlIHdlJ3ZlIGVsaW1pbmF0ZWQgYWxsIGNhdXNlcyBvZiB0aGVzZSB1
bndhbnRlZCBET00gbXV0YXRpb25zIGluIHIyMjM0NTguCisgICAgICAgIChXZWJDb3JlOjpub3Rp
ZnlOb2RlSW5zZXJ0ZWRJbnRvVHJlZSk6IFJlbW92ZWQgTm9FdmVudERpc3BhdGNoQXNzZXJ0aW9u
IHNpbmNlIG5vdGlmeUNoaWxkTm9kZUluc2VydGVkIGhhcyBpdAorICAgICAgICBhbHJlYWR5IHNp
bmNlIHIyMjM0NTguCisgICAgICAgIChXZWJDb3JlOjpub3RpZnlDaGlsZE5vZGVJbnNlcnRlZCk6
IE1hZGUgdGhpcyBmdW5jdGlvbiByZXR1cm4gTm9kZVZlY3RvciAoY29weSBlbGlzaW9uKS4KKyAg
ICAgICAgKiBkb20vQ29udGFpbmVyTm9kZUFsZ29yaXRobXMuaDoKKyAgICAgICAgKiBkb20vRWxl
bWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpFbGVtZW50OjppbnNlcnRlZEludG8pOiBVc2Ug
aW5zZXJ0aW9uVHlwZS5jb25uZWN0ZWRUb0RvY3VtZW50IHRvIGRldGVjdCB3aGVuIHRoaXMgZWxl
bWVudCBoYWQgYmVjb21lCisgICAgICAgIGNvbm5lY3RlZCB0byBzb21lIGRvY3VtZW50LiBTaW1p
bGFybHksIHVzZSBpbnNlcnRpb25UeXBlLnRyZWVTY29wZUNoYW5nZWQgdG8gZGV0ZWN0IHdoZW4g
dGhpcyBlbGVtZW50IGhhZCBiZWVuCisgICAgICAgIGluc2VydGVkIGludG8gYSBuZXcgdHJlZSBz
Y29wZS4gUmVtb3ZlZCB0aGUgY29tbWVudCB3aGljaCBiZWNhbWUgb2Jzb2xldGUgZHVlIHRvIHRo
aXMgY2xlYW51cC4KKyAgICAgICAgKFdlYkNvcmU6OkVsZW1lbnQ6OmFkZFNoYWRvd1Jvb3QpOiBT
aW1wbGlmaWVkIHRoZSBjb2RlIGhlcmUgc2luY2Ugd2UgbmV2ZXIgYXR0YWNoIGEgU2hhZG93Um9v
dCB3aXRoIGNoaWxkcmVuLgorICAgICAgICAqIGRvbS9FbGVtZW50Lmg6CisgICAgICAgICogZG9t
L05vZGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Tm9kZTo6aW5zZXJ0ZWRJbnRvKToKKyAgICAg
ICAgKiBkb20vTm9kZS5oOgorICAgICAgICAoV2ViQ29yZTo6Tm9kZTo6SW5zZXJ0ZWRJbnRvUmVz
dWx0KTogUmVuYW1lZCBmcm9tIEluc2VydGlvbk5vdGlmaWNhdGlvblJlcXVlc3QsIGFuZCB0dXJu
ZWQgaW50byBhbiBlbnVtIGNsYXNzLgorICAgICAgICAoV2ViQ29yZTo6Tm9kZTo6SW5zZXJ0aW9u
VHlwZSk6IEFkZGVkLiBXZSBwYXNzIHRoaXMgb2JqZWN0IGJ5IHZhbHVlIHRvIGluc2VydGVkSW50
byBhcyBhIHBlcmZvcm1hbmNlIG9wdGltaXphdGlvbgorICAgICAgICBhcyBwYXNzaW5nIHR3byBi
b29sZWFucyBieSB2YWx1ZSBpcyBmYXN0ZXIgdGhhbiBwYXNzaW5nIGEgcG9pbnRlciBhbmQgdGhl
biBkZS1yZWZlcmVuY2luZyBpdCBpbiBhIHZpcnR1YWwgY2FsbGVlLgorICAgICAgICAoV2ViQ29y
ZTo6Tm9kZTo6ZGlkRmluaXNoSW5zZXJ0aW5nTm9kZSk6IFJlbmFtZWQgZnJvbSBmaW5pc2hlZElu
c2VydGluZ1N1YnRyZWUuCisgICAgICAgICogZG9tL1Byb2Nlc3NpbmdJbnN0cnVjdGlvbi5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpQcm9jZXNzaW5nSW5zdHJ1Y3Rpb246Omluc2VydGVkSW50byk6
CisgICAgICAgIChXZWJDb3JlOjpQcm9jZXNzaW5nSW5zdHJ1Y3Rpb246OmRpZEZpbmlzaEluc2Vy
dGluZ05vZGUpOiBSZW5hbWVkIGZyb20gZmluaXNoZWRJbnNlcnRpbmdTdWJ0cmVlLgorICAgICAg
ICAqIGRvbS9Qcm9jZXNzaW5nSW5zdHJ1Y3Rpb24uaDoKKyAgICAgICAgKiBkb20vU2NyaXB0RWxl
bWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTY3JpcHRFbGVtZW50OjpzaG91bGRDYWxsRmlu
aXNoZWRJbnNlcnRpbmdTdWJ0cmVlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlNjcmlw
dEVsZW1lbnQ6OmRpZEZpbmlzaEluc2VydGluZ05vZGUpOiBSZW5hbWVkIGZyb20gZmluaXNoZWRJ
bnNlcnRpbmdTdWJ0cmVlLgorICAgICAgICAqIGRvbS9TY3JpcHRFbGVtZW50Lmg6CisgICAgICAg
IChXZWJDb3JlOjpTY3JpcHRFbGVtZW50OjppbnNlcnRlZEludG8gY29uc3QpOiBBZGRlZC4gRXh0
cmFjdGVkIGZyb20gc2hvdWxkQ2FsbEZpbmlzaGVkSW5zZXJ0aW5nU3VidHJlZS4KKyAgICAgICAg
KiBkb20vU2hhZG93Um9vdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTaGFkb3dSb290OjppbnNl
cnRlZEludG8pOiBUaGUgZXh0cmEgaXNDb25uZWN0ZWQoKSBjaGVjayBpcyBubyBsb25nZXIgbmVl
ZGVkLiBTZWUgdGhlIGRlc2NyaXB0aW9uIGFib3ZlLgorICAgICAgICAqIGRvbS9TaGFkb3dSb290
Lmg6CisgICAgICAgICogaHRtbC9Gb3JtQXNzb2NpYXRlZEVsZW1lbnQuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6Rm9ybUFzc29jaWF0ZWRFbGVtZW50OjppbnNlcnRlZEludG8pOgorICAgICAgICAq
IGh0bWwvRm9ybUFzc29jaWF0ZWRFbGVtZW50Lmg6CisgICAgICAgICogaHRtbC9IVE1MQmFzZUVs
ZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SFRNTEJhc2VFbGVtZW50OjppbnNlcnRlZElu
dG8pOgorICAgICAgICAqIGh0bWwvSFRNTEJhc2VFbGVtZW50Lmg6CisgICAgICAgICogaHRtbC9I
VE1MQm9keUVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SFRNTEJvZHlFbGVtZW50Ojpp
bnNlcnRlZEludG8pOgorICAgICAgICAoV2ViQ29yZTo6SFRNTEJvZHlFbGVtZW50OjpkaWRGaW5p
c2hJbnNlcnRpbmdOb2RlKTogUmVuYW1lZCBmcm9tIGZpbmlzaGVkSW5zZXJ0aW5nU3VidHJlZS4K
KyAgICAgICAgKiBodG1sL0hUTUxCb2R5RWxlbWVudC5oOgorICAgICAgICAqIGh0bWwvSFRNTEZv
cm1Db250cm9sRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpIVE1MRm9ybUNvbnRyb2xF
bGVtZW50OjppbnNlcnRlZEludG8pOgorICAgICAgICAoV2ViQ29yZTo6SFRNTEZvcm1Db250cm9s
RWxlbWVudDo6ZGlkRmluaXNoSW5zZXJ0aW5nTm9kZSk6IFJlbmFtZWQgZnJvbSBmaW5pc2hlZElu
c2VydGluZ1N1YnRyZWUuCisgICAgICAgICogaHRtbC9IVE1MRm9ybUNvbnRyb2xFbGVtZW50Lmg6
CisgICAgICAgICogaHRtbC9IVE1MRm9ybUNvbnRyb2xFbGVtZW50V2l0aFN0YXRlLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OkhUTUxGb3JtQ29udHJvbEVsZW1lbnRXaXRoU3RhdGU6Omluc2VydGVk
SW50byk6CisgICAgICAgICogaHRtbC9IVE1MRm9ybUNvbnRyb2xFbGVtZW50V2l0aFN0YXRlLmg6
CisgICAgICAgICogaHRtbC9IVE1MRm9ybUVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
SFRNTEZvcm1FbGVtZW50OjppbnNlcnRlZEludG8pOgorICAgICAgICAqIGh0bWwvSFRNTEZvcm1F
bGVtZW50Lmg6CisgICAgICAgICogaHRtbC9IVE1MRnJhbWVFbGVtZW50QmFzZS5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpIVE1MRnJhbWVFbGVtZW50QmFzZTo6aW5zZXJ0ZWRJbnRvKToKKyAgICAg
ICAgKFdlYkNvcmU6OkhUTUxGcmFtZUVsZW1lbnRCYXNlOjpkaWRGaW5pc2hJbnNlcnRpbmdOb2Rl
KTogUmVuYW1lZCBmcm9tIGZpbmlzaGVkSW5zZXJ0aW5nU3VidHJlZS4KKyAgICAgICAgKiBodG1s
L0hUTUxGcmFtZUVsZW1lbnRCYXNlLmg6CisgICAgICAgICogaHRtbC9IVE1MRnJhbWVTZXRFbGVt
ZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxGcmFtZVNldEVsZW1lbnQ6Omluc2VydGVk
SW50byk6CisgICAgICAgICogaHRtbC9IVE1MRnJhbWVTZXRFbGVtZW50Lmg6CisgICAgICAgICog
aHRtbC9IVE1MSW1hZ2VFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxJbWFnZUVs
ZW1lbnQ6Omluc2VydGVkSW50byk6CisgICAgICAgICogaHRtbC9IVE1MSW1hZ2VFbGVtZW50Lmg6
CisgICAgICAgICogaHRtbC9IVE1MSW5wdXRFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OkhUTUxJbnB1dEVsZW1lbnQ6Omluc2VydGVkSW50byk6CisgICAgICAgIChXZWJDb3JlOjpIVE1M
SW5wdXRFbGVtZW50OjpkaWRGaW5pc2hJbnNlcnRpbmdOb2RlKTogUmVuYW1lZCBmcm9tIGZpbmlz
aGVkSW5zZXJ0aW5nU3VidHJlZS4KKyAgICAgICAgKiBodG1sL0hUTUxJbnB1dEVsZW1lbnQuaDoK
KyAgICAgICAgKiBodG1sL0hUTUxMaW5rRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpI
VE1MTGlua0VsZW1lbnQ6Omluc2VydGVkSW50byk6IFRoZSBleHRyYSBpc0Nvbm5lY3RlZCgpIGNo
ZWNrIGlzIG5vIGxvbmdlciBuZWVkZWQuIFNlZSBhYm92ZS4KKyAgICAgICAgKFdlYkNvcmU6OkhU
TUxMaW5rRWxlbWVudDo6ZGlkRmluaXNoSW5zZXJ0aW5nTm9kZSk6IFJlbmFtZWQgZnJvbSBmaW5p
c2hlZEluc2VydGluZ1N1YnRyZWUuCisgICAgICAgICogaHRtbC9IVE1MTGlua0VsZW1lbnQuaDoK
KyAgICAgICAgKiBodG1sL0hUTUxNYXBFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhU
TUxNYXBFbGVtZW50OjppbnNlcnRlZEludG8pOgorICAgICAgICAqIGh0bWwvSFRNTE1hcEVsZW1l
bnQuaDoKKyAgICAgICAgKiBodG1sL0hUTUxNZWRpYUVsZW1lbnQuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6SFRNTE1lZGlhRWxlbWVudDo6aW5zZXJ0ZWRJbnRvKToKKyAgICAgICAgKFdlYkNvcmU6
OkhUTUxNZWRpYUVsZW1lbnQ6OmRpZEZpbmlzaEluc2VydGluZ05vZGUpOiBSZW5hbWVkIGZyb20g
ZmluaXNoZWRJbnNlcnRpbmdTdWJ0cmVlLgorICAgICAgICAqIGh0bWwvSFRNTE1lZGlhRWxlbWVu
dC5oOgorICAgICAgICAqIGh0bWwvSFRNTE1ldGFFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OkhUTUxNZXRhRWxlbWVudDo6aW5zZXJ0ZWRJbnRvKToKKyAgICAgICAgKiBodG1sL0hUTUxN
ZXRhRWxlbWVudC5oOgorICAgICAgICAqIGh0bWwvSFRNTE9iamVjdEVsZW1lbnQuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6SFRNTE9iamVjdEVsZW1lbnQ6Omluc2VydGVkSW50byk6CisgICAgICAg
IChXZWJDb3JlOjpIVE1MT2JqZWN0RWxlbWVudDo6ZGlkRmluaXNoSW5zZXJ0aW5nTm9kZSk6IFJl
bmFtZWQgZnJvbSBmaW5pc2hlZEluc2VydGluZ1N1YnRyZWUuCisgICAgICAgICogaHRtbC9IVE1M
T2JqZWN0RWxlbWVudC5oOgorICAgICAgICAqIGh0bWwvSFRNTE9wdGlvbkVsZW1lbnQuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6SFRNTE9wdGlvbkVsZW1lbnQ6Omluc2VydGVkSW50byk6CisgICAg
ICAgICogaHRtbC9IVE1MT3B0aW9uRWxlbWVudC5oOgorICAgICAgICAqIGh0bWwvSFRNTFNjcmlw
dEVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SFRNTFNjcmlwdEVsZW1lbnQ6Omluc2Vy
dGVkSW50byk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MU2NyaXB0RWxlbWVudDo6ZGlkRmluaXNo
SW5zZXJ0aW5nTm9kZSk6IFJlbmFtZWQgZnJvbSBmaW5pc2hlZEluc2VydGluZ1N1YnRyZWUuCisg
ICAgICAgICogaHRtbC9IVE1MU2NyaXB0RWxlbWVudC5oOgorICAgICAgICAqIGh0bWwvSFRNTFNl
bGVjdEVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SFRNTFNlbGVjdEVsZW1lbnQ6Omlu
c2VydGVkSW50byk6CisgICAgICAgICogaHRtbC9IVE1MU2VsZWN0RWxlbWVudC5oOgorICAgICAg
ICAqIGh0bWwvSFRNTFNsb3RFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxTbG90
RWxlbWVudDo6aW5zZXJ0ZWRJbnRvKTogUmVwbGFjZWQgYSBjdW1iZXJzb21lIGNvbmRpdGlvbiBi
eSBhIGJvb2xlYW4gY2hlY2sgb24gaW5zZXJ0aW9uVHlwZSdzCisgICAgICAgIHRyZWVTY29wZUNo
YW5nZWQgYW5kIHJlbW92ZWQgdGhlIGFjY29tcGFueWluZyBjb21tZW50IHdoaWNoIGlzIG5vIGxv
bmdlciBuZWVkZWQuCisgICAgICAgICogaHRtbC9IVE1MU2xvdEVsZW1lbnQuaDoKKyAgICAgICAg
KiBodG1sL0hUTUxTb3VyY2VFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxTb3Vy
Y2VFbGVtZW50OjppbnNlcnRlZEludG8pOgorICAgICAgICAqIGh0bWwvSFRNTFNvdXJjZUVsZW1l
bnQuaDoKKyAgICAgICAgKiBodG1sL0hUTUxTdHlsZUVsZW1lbnQuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6SFRNTFN0eWxlRWxlbWVudDo6aW5zZXJ0ZWRJbnRvKTogVGhlIGV4dHJhIGlzQ29ubmVj
dGVkKCkgY2hlY2sgaXMgbm8gbG9uZ2VyIG5lZWRlZC4gU2VlIGFib3ZlLgorICAgICAgICAqIGh0
bWwvSFRNTFN0eWxlRWxlbWVudC5oOgorICAgICAgICAqIGh0bWwvSFRNTFRleHRGb3JtQ29udHJv
bEVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SFRNTFRleHRGb3JtQ29udHJvbEVsZW1l
bnQ6Omluc2VydGVkSW50byk6CisgICAgICAgICogaHRtbC9IVE1MVGV4dEZvcm1Db250cm9sRWxl
bWVudC5oOgorICAgICAgICAqIGh0bWwvSFRNTFRpdGxlRWxlbWVudC5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpIVE1MVGl0bGVFbGVtZW50OjppbnNlcnRlZEludG8pOgorICAgICAgICAqIGh0bWwv
SFRNTFRpdGxlRWxlbWVudC5oOgorICAgICAgICAqIGh0bWwvSFRNTFRyYWNrRWxlbWVudC5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpIVE1MVHJhY2tFbGVtZW50OjppbnNlcnRlZEludG8pOiBBZGRl
ZCBhIEZJWE1FIHNpbmNlIHRoaXMgY29kZSBpcyBjbGVhcmx5IHdyb25nLgorICAgICAgICAqIGh0
bWwvSFRNTFRyYWNrRWxlbWVudC5oOgorICAgICAgICAqIHN2Zy9TVkdFbGVtZW50LmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OlNWR0VsZW1lbnQ6Omluc2VydGVkSW50byk6CisgICAgICAgICogc3Zn
L1NWR0VsZW1lbnQuaDoKKyAgICAgICAgKiBzdmcvU1ZHRkVJbWFnZUVsZW1lbnQuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6U1ZHRkVJbWFnZUVsZW1lbnQ6Omluc2VydGVkSW50byk6CisgICAgICAg
IChXZWJDb3JlOjpTVkdGRUltYWdlRWxlbWVudDo6ZGlkRmluaXNoSW5zZXJ0aW5nTm9kZSk6IFJl
bmFtZWQgZnJvbSBmaW5pc2hlZEluc2VydGluZ1N1YnRyZWUuCisgICAgICAgICogc3ZnL1NWR0ZF
SW1hZ2VFbGVtZW50Lmg6CisgICAgICAgICogc3ZnL1NWR0ZvbnRGYWNlRWxlbWVudC5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpTVkdGb250RmFjZUVsZW1lbnQ6Omluc2VydGVkSW50byk6CisgICAg
ICAgICogc3ZnL1NWR0ZvbnRGYWNlRWxlbWVudC5oOgorICAgICAgICAqIHN2Zy9TVkdGb250RmFj
ZVVyaUVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZHRm9udEZhY2VVcmlFbGVtZW50
OjppbnNlcnRlZEludG8pOgorICAgICAgICAqIHN2Zy9TVkdGb250RmFjZVVyaUVsZW1lbnQuaDoK
KyAgICAgICAgKiBzdmcvU1ZHSW1hZ2VFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNW
R0ltYWdlRWxlbWVudDo6aW5zZXJ0ZWRJbnRvKToKKyAgICAgICAgKiBzdmcvU1ZHSW1hZ2VFbGVt
ZW50Lmg6CisgICAgICAgICogc3ZnL1NWR01QYXRoRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpTVkdNUGF0aEVsZW1lbnQ6Omluc2VydGVkSW50byk6CisgICAgICAgIChXZWJDb3JlOjpT
VkdNUGF0aEVsZW1lbnQ6OmRpZEZpbmlzaEluc2VydGluZ05vZGUpOiBSZW5hbWVkIGZyb20gZmlu
aXNoZWRJbnNlcnRpbmdTdWJ0cmVlLgorICAgICAgICAqIHN2Zy9TVkdNUGF0aEVsZW1lbnQuaDoK
KyAgICAgICAgKiBzdmcvU1ZHUGF0aEVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZH
UGF0aEVsZW1lbnQ6Omluc2VydGVkSW50byk6CisgICAgICAgICogc3ZnL1NWR1BhdGhFbGVtZW50
Lmg6CisgICAgICAgICogc3ZnL1NWR1NWR0VsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
U1ZHU1ZHRWxlbWVudDo6aW5zZXJ0ZWRJbnRvKToKKyAgICAgICAgKiBzdmcvU1ZHU1ZHRWxlbWVu
dC5oOgorICAgICAgICAqIHN2Zy9TVkdTY3JpcHRFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OlNWR1NjcmlwdEVsZW1lbnQ6Omluc2VydGVkSW50byk6CisgICAgICAgIChXZWJDb3JlOjpT
VkdTY3JpcHRFbGVtZW50OjpkaWRGaW5pc2hJbnNlcnRpbmdOb2RlKTogUmVuYW1lZCBmcm9tIGZp
bmlzaGVkSW5zZXJ0aW5nU3VidHJlZS4KKyAgICAgICAgKiBzdmcvU1ZHU2NyaXB0RWxlbWVudC5o
OgorICAgICAgICAqIHN2Zy9TVkdTdHlsZUVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
U1ZHU3R5bGVFbGVtZW50OjppbnNlcnRlZEludG8pOiBUaGUgZXh0cmEgaXNDb25uZWN0ZWQoKSBj
aGVjayBpcyBubyBsb25nZXIgbmVlZGVkLiBTZWUgYWJvdmUgZGVzY3JpcHRpb24uCisgICAgICAg
ICogc3ZnL1NWR1N0eWxlRWxlbWVudC5oOgorICAgICAgICAqIHN2Zy9TVkdUUmVmRWxlbWVudC5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdUUmVmRWxlbWVudDo6aW5zZXJ0ZWRJbnRvKToKKyAg
ICAgICAgKFdlYkNvcmU6OlNWR1RSZWZFbGVtZW50OjpkaWRGaW5pc2hJbnNlcnRpbmdOb2RlKTog
UmVuYW1lZCBmcm9tIGZpbmlzaGVkSW5zZXJ0aW5nU3VidHJlZS4KKyAgICAgICAgKiBzdmcvU1ZH
VFJlZkVsZW1lbnQuaDoKKyAgICAgICAgKiBzdmcvU1ZHVGV4dFBhdGhFbGVtZW50LmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OlNWR1RleHRQYXRoRWxlbWVudDo6aW5zZXJ0ZWRJbnRvKToKKyAgICAg
ICAgKFdlYkNvcmU6OlNWR1RleHRQYXRoRWxlbWVudDo6ZGlkRmluaXNoSW5zZXJ0aW5nTm9kZSk6
IFJlbmFtZWQgZnJvbSBmaW5pc2hlZEluc2VydGluZ1N1YnRyZWUuCisgICAgICAgICogc3ZnL1NW
R1RleHRQYXRoRWxlbWVudC5oOgorICAgICAgICAqIHN2Zy9TVkdUaXRsZUVsZW1lbnQuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6U1ZHVGl0bGVFbGVtZW50OjppbnNlcnRlZEludG8pOgorICAgICAg
ICAqIHN2Zy9TVkdUaXRsZUVsZW1lbnQuaDoKKyAgICAgICAgKiBzdmcvU1ZHVXNlRWxlbWVudC5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdVc2VFbGVtZW50OjppbnNlcnRlZEludG8pOgorICAg
ICAgICAqIHN2Zy9TVkdVc2VFbGVtZW50Lmg6CisgICAgICAgICogc3ZnL2FuaW1hdGlvbi9TVkdT
TUlMRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdTTUlMRWxlbWVudDo6aW5zZXJ0
ZWRJbnRvKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR1NNSUxFbGVtZW50OjpkaWRGaW5pc2hJbnNl
cnRpbmdOb2RlKTogUmVuYW1lZCBmcm9tIGZpbmlzaGVkSW5zZXJ0aW5nU3VidHJlZS4KKyAgICAg
ICAgKiBzdmcvYW5pbWF0aW9uL1NWR1NNSUxFbGVtZW50Lmg6CisKIDIwMTctMTAtMTYgIFdlbnNv
biBIc2llaCAgPHdlbnNvbl9oc2llaEBhcHBsZS5jb20+CiAKICAgICAgICAgQWxsb3cgcmVhZGlu
ZyBkYXRhIGFuZCBibG9iIFVSTHMgdmlhIERhdGFUcmFuc2ZlciB3aGVuIHRoZSBwYXN0ZWJvYXJk
IGNvbnRhaW5zIGZpbGVzCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20vQ29udGFpbmVyTm9kZS5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZG9tL0NvbnRhaW5lck5vZGUuY3BwCShy
ZXZpc2lvbiAyMjM0NzUpCisrKyBTb3VyY2UvV2ViQ29yZS9kb20vQ29udGFpbmVyTm9kZS5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTM1NiwxMyArMzU2LDEyIEBAIHZvaWQgQ29udGFpbmVyTm9kZTo6
bm90aWZ5Q2hpbGRJbnNlcnRlZCgKIHsKICAgICBDaGlsZExpc3RNdXRhdGlvblNjb3BlKCp0aGlz
KS5jaGlsZEFkZGVkKGNoaWxkKTsKIAotICAgIE5vZGVWZWN0b3IgcG9zdEluc2VydGlvbk5vdGlm
aWNhdGlvblRhcmdldHM7Ci0gICAgbm90aWZ5Q2hpbGROb2RlSW5zZXJ0ZWQoKnRoaXMsIGNoaWxk
LCBwb3N0SW5zZXJ0aW9uTm90aWZpY2F0aW9uVGFyZ2V0cyk7CisgICAgYXV0byBwb3N0SW5zZXJ0
aW9uTm90aWZpY2F0aW9uVGFyZ2V0cyA9IG5vdGlmeUNoaWxkTm9kZUluc2VydGVkKCp0aGlzLCBj
aGlsZCk7CiAKICAgICBjaGlsZHJlbkNoYW5nZWQoY2hhbmdlKTsKIAogICAgIGZvciAoYXV0byYg
dGFyZ2V0IDogcG9zdEluc2VydGlvbk5vdGlmaWNhdGlvblRhcmdldHMpCi0gICAgICAgIHRhcmdl
dC0+ZmluaXNoZWRJbnNlcnRpbmdTdWJ0cmVlKCk7CisgICAgICAgIHRhcmdldC0+ZGlkRmluaXNo
SW5zZXJ0aW5nTm9kZSgpOwogfQogCiB2b2lkIENvbnRhaW5lck5vZGU6Om5vdGlmeUNoaWxkUmVt
b3ZlZChOb2RlJiBjaGlsZCwgTm9kZSogcHJldmlvdXNTaWJsaW5nLCBOb2RlKiBuZXh0U2libGlu
ZywgQ2hpbGRDaGFuZ2VTb3VyY2Ugc291cmNlKQpJbmRleDogU291cmNlL1dlYkNvcmUvZG9tL0Nv
bnRhaW5lck5vZGVBbGdvcml0aG1zLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9k
b20vQ29udGFpbmVyTm9kZUFsZ29yaXRobXMuY3BwCShyZXZpc2lvbiAyMjM0NzUpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9kb20vQ29udGFpbmVyTm9kZUFsZ29yaXRobXMuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0zNSw1NSArMzUsNTIgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1zdGF0aWMgdm9p
ZCBub3RpZnlOb2RlSW5zZXJ0ZWRJbnRvRG9jdW1lbnQoQ29udGFpbmVyTm9kZSYgaW5zZXJ0aW9u
UG9pbnQsIE5vZGUmIG5vZGUsIE5vZGVWZWN0b3ImIHBvc3RJbnNlcnRpb25Ob3RpZmljYXRpb25U
YXJnZXRzKQorc3RhdGljIHZvaWQgbm90aWZ5Tm9kZUluc2VydGVkSW50b0RvY3VtZW50KENvbnRh
aW5lck5vZGUmIHBhcmVudE9mSW5zZXJ0ZWRUcmVlLCBOb2RlJiBub2RlLCBib29sIHRyZWVTY29w
ZUNoYW5nZWQsIE5vZGVWZWN0b3ImIHBvc3RJbnNlcnRpb25Ob3RpZmljYXRpb25UYXJnZXRzKQog
ewotICAgIEFTU0VSVChpbnNlcnRpb25Qb2ludC5pc0Nvbm5lY3RlZCgpKTsKLSAgICBpZiAobm9k
ZS5pbnNlcnRlZEludG8oaW5zZXJ0aW9uUG9pbnQpID09IE5vZGU6Okluc2VydGlvblNob3VsZENh
bGxGaW5pc2hlZEluc2VydGluZ1N1YnRyZWUpCisgICAgQVNTRVJUKHBhcmVudE9mSW5zZXJ0ZWRU
cmVlLmlzQ29ubmVjdGVkKCkpOworICAgIEFTU0VSVCghbm9kZS5pc0Nvbm5lY3RlZCgpKTsKKyAg
ICBpZiAobm9kZS5pbnNlcnRlZEludG8oTm9kZTo6SW5zZXJ0aW9uVHlwZSB7IHRydWUsIHRyZWVT
Y29wZUNoYW5nZWQgfSwgcGFyZW50T2ZJbnNlcnRlZFRyZWUpID09IE5vZGU6Okluc2VydGVkSW50
b1Jlc3VsdDo6TmVlZHNQb3N0SW5zZXJ0aW9uQ2FsbGJhY2spCiAgICAgICAgIHBvc3RJbnNlcnRp
b25Ob3RpZmljYXRpb25UYXJnZXRzLmFwcGVuZChub2RlKTsKIAogICAgIGlmICghaXM8Q29udGFp
bmVyTm9kZT4obm9kZSkpCiAgICAgICAgIHJldHVybjsKIAotICAgIENoaWxkTm9kZXNMYXp5U25h
cHNob3Qgc25hcHNob3QoZG93bmNhc3Q8Q29udGFpbmVyTm9kZT4obm9kZSkpOwotICAgIHdoaWxl
IChSZWZQdHI8Tm9kZT4gY2hpbGQgPSBzbmFwc2hvdC5uZXh0Tm9kZSgpKSB7Ci0gICAgICAgIC8v
IElmIHdlIGhhdmUgYmVlbiByZW1vdmVkIGZyb20gdGhlIGRvY3VtZW50IGR1cmluZyB0aGlzIGxv
b3AsIHRoZW4KLSAgICAgICAgLy8gd2UgZG9uJ3Qgd2FudCB0byB0ZWxsIHRoZSByZXN0IG9mIG91
ciBjaGlsZHJlbiB0aGF0IHRoZXkndmUgYmVlbgotICAgICAgICAvLyBpbnNlcnRlZCBpbnRvIHRo
ZSBkb2N1bWVudCBiZWNhdXNlIHRoZXkgaGF2ZW4ndC4KLSAgICAgICAgaWYgKG5vZGUuaXNDb25u
ZWN0ZWQoKSAmJiBjaGlsZC0+cGFyZW50Tm9kZSgpID09ICZub2RlKQotICAgICAgICAgICAgbm90
aWZ5Tm9kZUluc2VydGVkSW50b0RvY3VtZW50KGluc2VydGlvblBvaW50LCAqY2hpbGQsIHBvc3RJ
bnNlcnRpb25Ob3RpZmljYXRpb25UYXJnZXRzKTsKKyAgICBmb3IgKFJlZlB0cjxOb2RlPiBjaGls
ZCA9IGRvd25jYXN0PENvbnRhaW5lck5vZGU+KG5vZGUpLmZpcnN0Q2hpbGQoKTsgY2hpbGQ7IGNo
aWxkID0gY2hpbGQtPm5leHRTaWJsaW5nKCkpIHsKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQobm9k
ZS5pc0Nvbm5lY3RlZCgpICYmIGNoaWxkLT5wYXJlbnROb2RlKCkgPT0gJm5vZGUpOworICAgICAg
ICBub3RpZnlOb2RlSW5zZXJ0ZWRJbnRvRG9jdW1lbnQocGFyZW50T2ZJbnNlcnRlZFRyZWUsICpj
aGlsZCwgdHJlZVNjb3BlQ2hhbmdlZCwgcG9zdEluc2VydGlvbk5vdGlmaWNhdGlvblRhcmdldHMp
OwogICAgIH0KIAogICAgIGlmICghaXM8RWxlbWVudD4obm9kZSkpCiAgICAgICAgIHJldHVybjsK
IAogICAgIGlmIChSZWZQdHI8U2hhZG93Um9vdD4gcm9vdCA9IGRvd25jYXN0PEVsZW1lbnQ+KG5v
ZGUpLnNoYWRvd1Jvb3QoKSkgewotICAgICAgICBpZiAobm9kZS5pc0Nvbm5lY3RlZCgpICYmIHJv
b3QtPmhvc3QoKSA9PSAmbm9kZSkKLSAgICAgICAgICAgIG5vdGlmeU5vZGVJbnNlcnRlZEludG9E
b2N1bWVudChpbnNlcnRpb25Qb2ludCwgKnJvb3QsIHBvc3RJbnNlcnRpb25Ob3RpZmljYXRpb25U
YXJnZXRzKTsKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQobm9kZS5pc0Nvbm5lY3RlZCgpICYmIHJv
b3QtPmhvc3QoKSA9PSAmbm9kZSk7CisgICAgICAgIG5vdGlmeU5vZGVJbnNlcnRlZEludG9Eb2N1
bWVudChwYXJlbnRPZkluc2VydGVkVHJlZSwgKnJvb3QsIGZhbHNlLCBwb3N0SW5zZXJ0aW9uTm90
aWZpY2F0aW9uVGFyZ2V0cyk7CiAgICAgfQogfQogCi1zdGF0aWMgdm9pZCBub3RpZnlOb2RlSW5z
ZXJ0ZWRJbnRvVHJlZShDb250YWluZXJOb2RlJiBpbnNlcnRpb25Qb2ludCwgTm9kZSYgbm9kZSwg
Tm9kZVZlY3RvciYgcG9zdEluc2VydGlvbk5vdGlmaWNhdGlvblRhcmdldHMpCitzdGF0aWMgdm9p
ZCBub3RpZnlOb2RlSW5zZXJ0ZWRJbnRvVHJlZShDb250YWluZXJOb2RlJiBwYXJlbnRPZkluc2Vy
dGVkVHJlZSwgTm9kZSYgbm9kZSwgYm9vbCB0cmVlU2NvcGVDaGFuZ2VkLCBOb2RlVmVjdG9yJiBw
b3N0SW5zZXJ0aW9uTm90aWZpY2F0aW9uVGFyZ2V0cykKIHsKLSAgICBOb0V2ZW50RGlzcGF0Y2hB
c3NlcnRpb24gYXNzZXJ0Tm9FdmVudERpc3BhdGNoOwotICAgIEFTU0VSVCghaW5zZXJ0aW9uUG9p
bnQuaXNDb25uZWN0ZWQoKSk7CisgICAgQVNTRVJUKCFwYXJlbnRPZkluc2VydGVkVHJlZS5pc0Nv
bm5lY3RlZCgpKTsKKyAgICBBU1NFUlQoIW5vZGUuaXNDb25uZWN0ZWQoKSk7CiAKLSAgICBpZiAo
bm9kZS5pbnNlcnRlZEludG8oaW5zZXJ0aW9uUG9pbnQpID09IE5vZGU6Okluc2VydGlvblNob3Vs
ZENhbGxGaW5pc2hlZEluc2VydGluZ1N1YnRyZWUpCisgICAgaWYgKG5vZGUuaW5zZXJ0ZWRJbnRv
KE5vZGU6Okluc2VydGlvblR5cGUgeyBmYWxzZSwgdHJlZVNjb3BlQ2hhbmdlZCB9LCBwYXJlbnRP
Zkluc2VydGVkVHJlZSkgPT0gTm9kZTo6SW5zZXJ0ZWRJbnRvUmVzdWx0OjpOZWVkc1Bvc3RJbnNl
cnRpb25DYWxsYmFjaykKICAgICAgICAgcG9zdEluc2VydGlvbk5vdGlmaWNhdGlvblRhcmdldHMu
YXBwZW5kKG5vZGUpOwogCiAgICAgaWYgKCFpczxDb250YWluZXJOb2RlPihub2RlKSkKICAgICAg
ICAgcmV0dXJuOwogCi0gICAgZm9yIChhdXRvKiBjaGlsZCA9IGRvd25jYXN0PENvbnRhaW5lck5v
ZGU+KG5vZGUpLmZpcnN0Q2hpbGQoKTsgY2hpbGQ7IGNoaWxkID0gY2hpbGQtPm5leHRTaWJsaW5n
KCkpCi0gICAgICAgIG5vdGlmeU5vZGVJbnNlcnRlZEludG9UcmVlKGluc2VydGlvblBvaW50LCAq
Y2hpbGQsIHBvc3RJbnNlcnRpb25Ob3RpZmljYXRpb25UYXJnZXRzKTsKKyAgICBmb3IgKFJlZlB0
cjxOb2RlPiBjaGlsZCA9IGRvd25jYXN0PENvbnRhaW5lck5vZGU+KG5vZGUpLmZpcnN0Q2hpbGQo
KTsgY2hpbGQ7IGNoaWxkID0gY2hpbGQtPm5leHRTaWJsaW5nKCkpCisgICAgICAgIG5vdGlmeU5v
ZGVJbnNlcnRlZEludG9UcmVlKHBhcmVudE9mSW5zZXJ0ZWRUcmVlLCAqY2hpbGQsIHRyZWVTY29w
ZUNoYW5nZWQsIHBvc3RJbnNlcnRpb25Ob3RpZmljYXRpb25UYXJnZXRzKTsKIAogICAgIGlmICgh
aXM8RWxlbWVudD4obm9kZSkpCiAgICAgICAgIHJldHVybjsKIAogICAgIGlmIChSZWZQdHI8U2hh
ZG93Um9vdD4gcm9vdCA9IGRvd25jYXN0PEVsZW1lbnQ+KG5vZGUpLnNoYWRvd1Jvb3QoKSkKLSAg
ICAgICAgbm90aWZ5Tm9kZUluc2VydGVkSW50b1RyZWUoaW5zZXJ0aW9uUG9pbnQsICpyb290LCBw
b3N0SW5zZXJ0aW9uTm90aWZpY2F0aW9uVGFyZ2V0cyk7CisgICAgICAgIG5vdGlmeU5vZGVJbnNl
cnRlZEludG9UcmVlKHBhcmVudE9mSW5zZXJ0ZWRUcmVlLCAqcm9vdCwgZmFsc2UsIHBvc3RJbnNl
cnRpb25Ob3RpZmljYXRpb25UYXJnZXRzKTsKIH0KIAotdm9pZCBub3RpZnlDaGlsZE5vZGVJbnNl
cnRlZChDb250YWluZXJOb2RlJiBpbnNlcnRpb25Qb2ludCwgTm9kZSYgbm9kZSwgTm9kZVZlY3Rv
ciYgcG9zdEluc2VydGlvbk5vdGlmaWNhdGlvblRhcmdldHMpCitOb2RlVmVjdG9yIG5vdGlmeUNo
aWxkTm9kZUluc2VydGVkKENvbnRhaW5lck5vZGUmIHBhcmVudE9mSW5zZXJ0ZWRUcmVlLCBOb2Rl
JiBub2RlKQogewogICAgIE5vRXZlbnREaXNwYXRjaEFzc2VydGlvbiBhc3NlcnROb0V2ZW50RGlz
cGF0Y2g7CiAKQEAgLTkyLDEwICs4OSwxNiBAQCB2b2lkIG5vdGlmeUNoaWxkTm9kZUluc2VydGVk
KENvbnRhaW5lck5vCiAgICAgUmVmPERvY3VtZW50PiBwcm90ZWN0RG9jdW1lbnQobm9kZS5kb2N1
bWVudCgpKTsKICAgICBSZWY8Tm9kZT4gcHJvdGVjdE5vZGUobm9kZSk7CiAKLSAgICBpZiAoaW5z
ZXJ0aW9uUG9pbnQuaXNDb25uZWN0ZWQoKSkKLSAgICAgICAgbm90aWZ5Tm9kZUluc2VydGVkSW50
b0RvY3VtZW50KGluc2VydGlvblBvaW50LCBub2RlLCBwb3N0SW5zZXJ0aW9uTm90aWZpY2F0aW9u
VGFyZ2V0cyk7CisgICAgTm9kZVZlY3RvciBwb3N0SW5zZXJ0aW9uTm90aWZpY2F0aW9uVGFyZ2V0
czsKKworICAgIC8vIFRyZWUgc2NvcGUgaGFzIGNoYW5nZWQgaWYgdGhlIGNvbnRhaW5lciBub2Rl
IGludG8gd2hpY2ggIm5vZGUiIGlzIGluc2VydGVkIGlzIGluIGEgZG9jdW1lbnQgb3IgYSBzaGFk
b3cgcm9vdC4KKyAgICBib29sIHRyZWVTY29wZUNoYW5nZWQgPSBwYXJlbnRPZkluc2VydGVkVHJl
ZS5pc0luVHJlZVNjb3BlKCk7CisgICAgaWYgKHBhcmVudE9mSW5zZXJ0ZWRUcmVlLmlzQ29ubmVj
dGVkKCkpCisgICAgICAgIG5vdGlmeU5vZGVJbnNlcnRlZEludG9Eb2N1bWVudChwYXJlbnRPZklu
c2VydGVkVHJlZSwgbm9kZSwgdHJlZVNjb3BlQ2hhbmdlZCwgcG9zdEluc2VydGlvbk5vdGlmaWNh
dGlvblRhcmdldHMpOwogICAgIGVsc2UKLSAgICAgICAgbm90aWZ5Tm9kZUluc2VydGVkSW50b1Ry
ZWUoaW5zZXJ0aW9uUG9pbnQsIG5vZGUsIHBvc3RJbnNlcnRpb25Ob3RpZmljYXRpb25UYXJnZXRz
KTsKKyAgICAgICAgbm90aWZ5Tm9kZUluc2VydGVkSW50b1RyZWUocGFyZW50T2ZJbnNlcnRlZFRy
ZWUsIG5vZGUsIHRyZWVTY29wZUNoYW5nZWQsIHBvc3RJbnNlcnRpb25Ob3RpZmljYXRpb25UYXJn
ZXRzKTsKKworICAgIHJldHVybiBwb3N0SW5zZXJ0aW9uTm90aWZpY2F0aW9uVGFyZ2V0czsKIH0K
IAogc3RhdGljIHZvaWQgbm90aWZ5Tm9kZVJlbW92ZWRGcm9tRG9jdW1lbnQoQ29udGFpbmVyTm9k
ZSYgaW5zZXJ0aW9uUG9pbnQsIE5vZGUmIG5vZGUpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20v
Q29udGFpbmVyTm9kZUFsZ29yaXRobXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9k
b20vQ29udGFpbmVyTm9kZUFsZ29yaXRobXMuaAkocmV2aXNpb24gMjIzNDc1KQorKysgU291cmNl
L1dlYkNvcmUvZG9tL0NvbnRhaW5lck5vZGVBbGdvcml0aG1zLmgJKHdvcmtpbmcgY29weSkKQEAg
LTI2LDcgKzI2LDcgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi12b2lkIG5vdGlmeUNoaWxk
Tm9kZUluc2VydGVkKENvbnRhaW5lck5vZGUmIGluc2VydGlvblBvaW50LCBOb2RlJiwgTm9kZVZl
Y3RvciYgcG9zdEluc2VydGlvbk5vdGlmaWNhdGlvblRhcmdldHMpOworTm9kZVZlY3RvciBub3Rp
ZnlDaGlsZE5vZGVJbnNlcnRlZChDb250YWluZXJOb2RlJiBwYXJlbnRPZkluc2VydGVkVHJlZSwg
Tm9kZSYpOwogdm9pZCBub3RpZnlDaGlsZE5vZGVSZW1vdmVkKENvbnRhaW5lck5vZGUmIGluc2Vy
dGlvblBvaW50LCBOb2RlJik7CiB2b2lkIHJlbW92ZURldGFjaGVkQ2hpbGRyZW5JbkNvbnRhaW5l
cihDb250YWluZXJOb2RlJik7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9FbGVtZW50LmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20vRWxlbWVudC5jcHAJKHJldmlzaW9u
IDIyMzQ3NSkKKysrIFNvdXJjZS9XZWJDb3JlL2RvbS9FbGVtZW50LmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMTYyOSwzNCArMTYyOSwyNyBAQCBSZW5kZXJQdHI8UmVuZGVyRWxlbWVudD4gRWxlbWVu
dDo6Y3JlYXRlCiAgICAgcmV0dXJuIFJlbmRlckVsZW1lbnQ6OmNyZWF0ZUZvcigqdGhpcywgV1RG
TW92ZShzdHlsZSkpOwogfQogCi1Ob2RlOjpJbnNlcnRpb25Ob3RpZmljYXRpb25SZXF1ZXN0IEVs
ZW1lbnQ6Omluc2VydGVkSW50byhDb250YWluZXJOb2RlJiBpbnNlcnRpb25Qb2ludCkKK05vZGU6
Okluc2VydGVkSW50b1Jlc3VsdCBFbGVtZW50OjppbnNlcnRlZEludG8oSW5zZXJ0aW9uVHlwZSBp
bnNlcnRpb25UeXBlLCBDb250YWluZXJOb2RlJiBwYXJlbnRPZkluc2VydGVkVHJlZSkKIHsKLSAg
ICBib29sIHdhc0luRG9jdW1lbnQgPSBpc0Nvbm5lY3RlZCgpOwotICAgIC8vIG5lZWQgdG8gZG8g
c3VwZXJjbGFzcyBwcm9jZXNzaW5nIGZpcnN0IHNvIGlzQ29ubmVjdGVkKCkgaXMgdHJ1ZQotICAg
IC8vIGJ5IHRoZSB0aW1lIHdlIHJlYWNoIHVwZGF0ZUlkCi0gICAgQ29udGFpbmVyTm9kZTo6aW5z
ZXJ0ZWRJbnRvKGluc2VydGlvblBvaW50KTsKLSAgICBBU1NFUlQoIXdhc0luRG9jdW1lbnQgfHwg
aXNDb25uZWN0ZWQoKSk7CisgICAgQ29udGFpbmVyTm9kZTo6aW5zZXJ0ZWRJbnRvKGluc2VydGlv
blR5cGUsIHBhcmVudE9mSW5zZXJ0ZWRUcmVlKTsKIAogI2lmIEVOQUJMRShGVUxMU0NSRUVOX0FQ
SSkKICAgICBpZiAoY29udGFpbnNGdWxsU2NyZWVuRWxlbWVudCgpICYmIHBhcmVudEVsZW1lbnQo
KSAmJiAhcGFyZW50RWxlbWVudCgpLT5jb250YWluc0Z1bGxTY3JlZW5FbGVtZW50KCkpCiAgICAg
ICAgIHNldENvbnRhaW5zRnVsbFNjcmVlbkVsZW1lbnRPbkFuY2VzdG9yc0Nyb3NzaW5nRnJhbWVC
b3VuZGFyaWVzKHRydWUpOwogI2VuZGlmCiAKLSAgICBpZiAocGFyZW50Tm9kZSgpID09ICZpbnNl
cnRpb25Qb2ludCkgeworICAgIGlmIChwYXJlbnROb2RlKCkgPT0gJnBhcmVudE9mSW5zZXJ0ZWRU
cmVlKSB7CiAgICAgICAgIGlmIChhdXRvKiBzaGFkb3dSb290ID0gcGFyZW50Tm9kZSgpLT5zaGFk
b3dSb290KCkpCiAgICAgICAgICAgICBzaGFkb3dSb290LT5ob3N0Q2hpbGRFbGVtZW50RGlkQ2hh
bmdlKCp0aGlzKTsKICAgICB9CiAKLSAgICBpZiAoIWluc2VydGlvblBvaW50LmlzSW5UcmVlU2Nv
cGUoKSkKLSAgICAgICAgcmV0dXJuIEluc2VydGlvbkRvbmU7CisgICAgaWYgKCFwYXJlbnRPZklu
c2VydGVkVHJlZS5pc0luVHJlZVNjb3BlKCkpCisgICAgICAgIHJldHVybiBJbnNlcnRlZEludG9S
ZXN1bHQ6OkRvbmU7CiAKLSAgICAvLyBUaGlzIGZ1bmN0aW9uIGNvdWxkIGJlIGNhbGxlZCB3aGVu
IHRoaXMgZWxlbWVudCdzIHNoYWRvdyByb290J3MgaG9zdCBvciBpdHMgYW5jZXN0b3IgaXMgaW5z
ZXJ0ZWQuCi0gICAgLy8gVGhpcyBlbGVtZW50IGlzIG5ldyB0byB0aGUgc2hhZG93IHRyZWUgKGFu
ZCBpdHMgdHJlZSBzY29wZSkgb25seSBpZiB0aGUgcGFyZW50IGludG8gd2hpY2ggdGhpcyBlbGVt
ZW50Ci0gICAgLy8gb3IgaXRzIGFuY2VzdG9yIGlzIGluc2VydGVkIGJlbG9uZ3MgdG8gdGhlIHNh
bWUgdHJlZSBzY29wZSBhcyB0aGlzIGVsZW1lbnQncy4KLSAgICBUcmVlU2NvcGUqIG5ld1Njb3Bl
ID0gJmluc2VydGlvblBvaW50LnRyZWVTY29wZSgpOwotICAgIGJvb2wgYmVjb21lQ29ubmVjdGVk
ID0gIXdhc0luRG9jdW1lbnQgJiYgaXNDb25uZWN0ZWQoKTsKKyAgICBib29sIGJlY29tZUNvbm5l
Y3RlZCA9IGluc2VydGlvblR5cGUuY29ubmVjdGVkVG9Eb2N1bWVudDsKKyAgICBUcmVlU2NvcGUq
IG5ld1Njb3BlID0gJnBhcmVudE9mSW5zZXJ0ZWRUcmVlLnRyZWVTY29wZSgpOwogICAgIEhUTUxE
b2N1bWVudCogbmV3RG9jdW1lbnQgPSBiZWNvbWVDb25uZWN0ZWQgJiYgaXM8SFRNTERvY3VtZW50
PihuZXdTY29wZS0+ZG9jdW1lbnRTY29wZSgpKSA/ICZkb3duY2FzdDxIVE1MRG9jdW1lbnQ+KG5l
d1Njb3BlLT5kb2N1bWVudFNjb3BlKCkpIDogbnVsbHB0cjsKLSAgICBpZiAobmV3U2NvcGUgIT0g
JnRyZWVTY29wZSgpKQorICAgIGlmICghaW5zZXJ0aW9uVHlwZS50cmVlU2NvcGVDaGFuZ2VkKQog
ICAgICAgICBuZXdTY29wZSA9IG51bGxwdHI7CiAKICAgICBjb25zdCBBdG9taWNTdHJpbmcmIGlk
VmFsdWUgPSBnZXRJZEF0dHJpYnV0ZSgpOwpAQCAtMTY4Nyw3ICsxNjgwLDcgQEAgTm9kZTo6SW5z
ZXJ0aW9uTm90aWZpY2F0aW9uUmVxdWVzdCBFbGVtZQogICAgICAgICAgICAgQ3VzdG9tRWxlbWVu
dFJlYWN0aW9uUXVldWU6OmVucXVldWVDb25uZWN0ZWRDYWxsYmFja0lmTmVlZGVkKCp0aGlzKTsK
ICAgICB9CiAKLSAgICByZXR1cm4gSW5zZXJ0aW9uRG9uZTsKKyAgICByZXR1cm4gSW5zZXJ0ZWRJ
bnRvUmVzdWx0OjpEb25lOwogfQogCiB2b2lkIEVsZW1lbnQ6OnJlbW92ZWRGcm9tKENvbnRhaW5l
ck5vZGUmIGluc2VydGlvblBvaW50KQpAQCAtMTc2NSw2ICsxNzU4LDcgQEAgU2hhZG93Um9vdCog
RWxlbWVudDo6c2hhZG93Um9vdCgpIGNvbnN0CiAKIHZvaWQgRWxlbWVudDo6YWRkU2hhZG93Um9v
dChSZWY8U2hhZG93Um9vdD4mJiBuZXdTaGFkb3dSb290KQogeworICAgIEFTU0VSVCghbmV3U2hh
ZG93Um9vdC0+aGFzQ2hpbGROb2RlcygpKTsKICAgICBBU1NFUlQoIXNoYWRvd1Jvb3QoKSk7CiAg
ICAgCiAgICAgaWYgKHJlbmRlcmVyKCkpCkBAIC0xNzc2LDEwICsxNzcwLDExIEBAIHZvaWQgRWxl
bWVudDo6YWRkU2hhZG93Um9vdChSZWY8U2hhZG93Um8KICAgICBzaGFkb3dSb290LnNldEhvc3Qo
dGhpcyk7CiAgICAgc2hhZG93Um9vdC5zZXRQYXJlbnRUcmVlU2NvcGUodHJlZVNjb3BlKCkpOwog
Ci0gICAgTm9kZVZlY3RvciBwb3N0SW5zZXJ0aW9uTm90aWZpY2F0aW9uVGFyZ2V0czsKLSAgICBu
b3RpZnlDaGlsZE5vZGVJbnNlcnRlZCgqdGhpcywgc2hhZG93Um9vdCwgcG9zdEluc2VydGlvbk5v
dGlmaWNhdGlvblRhcmdldHMpOwotICAgIGZvciAoYXV0byYgdGFyZ2V0IDogcG9zdEluc2VydGlv
bk5vdGlmaWNhdGlvblRhcmdldHMpCi0gICAgICAgIHRhcmdldC0+ZmluaXNoZWRJbnNlcnRpbmdT
dWJ0cmVlKCk7CisjaWYgIUFTU0VSVF9ESVNBQkxFRAorICAgIEFTU0VSVChub3RpZnlDaGlsZE5v
ZGVJbnNlcnRlZCgqdGhpcywgc2hhZG93Um9vdCkuaXNFbXB0eSgpKTsKKyNlbHNlCisgICAgbm90
aWZ5Q2hpbGROb2RlSW5zZXJ0ZWQoKnRoaXMsIHNoYWRvd1Jvb3QpOworI2VuZGlmCiAKICAgICBp
bnZhbGlkYXRlU3R5bGVBbmRSZW5kZXJlcnNGb3JTdWJ0cmVlKCk7CiAKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL2RvbS9FbGVtZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZG9tL0Vs
ZW1lbnQuaAkocmV2aXNpb24gMjIzNDc1KQorKysgU291cmNlL1dlYkNvcmUvZG9tL0VsZW1lbnQu
aAkod29ya2luZyBjb3B5KQpAQCAtNTUxLDcgKzU1MSw3IEBAIHB1YmxpYzoKIHByb3RlY3RlZDoK
ICAgICBFbGVtZW50KGNvbnN0IFF1YWxpZmllZE5hbWUmLCBEb2N1bWVudCYsIENvbnN0cnVjdGlv
blR5cGUpOwogCi0gICAgSW5zZXJ0aW9uTm90aWZpY2F0aW9uUmVxdWVzdCBpbnNlcnRlZEludG8o
Q29udGFpbmVyTm9kZSYpIG92ZXJyaWRlOworICAgIEluc2VydGVkSW50b1Jlc3VsdCBpbnNlcnRl
ZEludG8oSW5zZXJ0aW9uVHlwZSwgQ29udGFpbmVyTm9kZSYpIG92ZXJyaWRlOwogICAgIHZvaWQg
cmVtb3ZlZEZyb20oQ29udGFpbmVyTm9kZSYpIG92ZXJyaWRlOwogICAgIHZvaWQgY2hpbGRyZW5D
aGFuZ2VkKGNvbnN0IENoaWxkQ2hhbmdlJikgb3ZlcnJpZGU7CiAgICAgdm9pZCByZW1vdmVBbGxF
dmVudExpc3RlbmVycygpIGZpbmFsOwpJbmRleDogU291cmNlL1dlYkNvcmUvZG9tL05vZGUuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2RvbS9Ob2RlLmNwcAkocmV2aXNpb24gMjIz
NDc1KQorKysgU291cmNlL1dlYkNvcmUvZG9tL05vZGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0x
MjQxLDE2ICsxMjQxLDE2IEBAIE5vZGUmIE5vZGU6OmdldFJvb3ROb2RlKGNvbnN0IEdldFJvb3RO
b2QKICAgICByZXR1cm4gb3B0aW9ucy5jb21wb3NlZCA/IHNoYWRvd0luY2x1ZGluZ1Jvb3QoKSA6
IHJvb3ROb2RlKCk7CiB9CiAKLU5vZGU6Okluc2VydGlvbk5vdGlmaWNhdGlvblJlcXVlc3QgTm9k
ZTo6aW5zZXJ0ZWRJbnRvKENvbnRhaW5lck5vZGUmIGluc2VydGlvblBvaW50KQorTm9kZTo6SW5z
ZXJ0ZWRJbnRvUmVzdWx0IE5vZGU6Omluc2VydGVkSW50byhJbnNlcnRpb25UeXBlIGluc2VydGlv
blR5cGUsIENvbnRhaW5lck5vZGUmIHBhcmVudE9mSW5zZXJ0ZWRUcmVlKQogewotICAgIGlmIChp
bnNlcnRpb25Qb2ludC5pc0Nvbm5lY3RlZCgpKQorICAgIGlmIChpbnNlcnRpb25UeXBlLmNvbm5l
Y3RlZFRvRG9jdW1lbnQpCiAgICAgICAgIHNldEZsYWcoSXNDb25uZWN0ZWRGbGFnKTsKLSAgICBp
ZiAoaW5zZXJ0aW9uUG9pbnQuaXNJblNoYWRvd1RyZWUoKSkKKyAgICBpZiAocGFyZW50T2ZJbnNl
cnRlZFRyZWUuaXNJblNoYWRvd1RyZWUoKSkKICAgICAgICAgc2V0RmxhZyhJc0luU2hhZG93VHJl
ZUZsYWcpOwogCiAgICAgaW52YWxpZGF0ZVN0eWxlKFN0eWxlOjpWYWxpZGl0eTo6U3VidHJlZUFu
ZFJlbmRlcmVyc0ludmFsaWQpOwogCi0gICAgcmV0dXJuIEluc2VydGlvbkRvbmU7CisgICAgcmV0
dXJuIEluc2VydGVkSW50b1Jlc3VsdDo6RG9uZTsKIH0KIAogdm9pZCBOb2RlOjpyZW1vdmVkRnJv
bShDb250YWluZXJOb2RlJiBpbnNlcnRpb25Qb2ludCkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Rv
bS9Ob2RlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZG9tL05vZGUuaAkocmV2aXNp
b24gMjIzNDc1KQorKysgU291cmNlL1dlYkNvcmUvZG9tL05vZGUuaAkod29ya2luZyBjb3B5KQpA
QCAtNDQzLDE5ICs0NDMsMjIgQEAgcHVibGljOgogICAgIC8vCiAgICAgLy8gV2ViS2l0IG5vdGlm
aWVzIHRoaXMgY2FsbGJhY2sgcmVnYXJkbGVzcyBpZiB0aGUgc3VidHJlZSBvZiB0aGUgbm9kZSBp
cyBhIGRvY3VtZW50IHRyZWUgb3IgYSBmbG9hdGluZyBzdWJ0cmVlLgogICAgIC8vIEltcGxlbWVu
dGF0aW9uIGNhbiBkZXRlcm1pbmUgdGhlIHR5cGUgb2Ygc3VidHJlZSBieSBzZWVpbmcgaW5zZXJ0
aW9uUG9pbnQtPmlzQ29ubmVjdGVkKCkuCi0gICAgLy8gRm9yIGEgcGVyZm9ybWFuY2UgcmVhc29u
LCBub3RpZmljYXRpb25zIGFyZSBkZWxpdmVyZWQgb25seSB0byBDb250YWluZXJOb2RlIHN1YmNs
YXNzZXMgaWYgdGhlIGluc2VydGlvblBvaW50IGlzIG91dCBvZiBkb2N1bWVudC4KICAgICAvLwot
ICAgIC8vIFRoZXJlIGlzIGFub3RoZXIgY2FsbGJhY2sgbmFtZWQgZmluaXNoZWRJbnNlcnRpbmdT
dWJ0cmVlKCksIHdoaWNoIGlzIGNhbGxlZCBhZnRlciBhbGwgZGVzY2VuZGFudHMgYXJlIG5vdGlm
aWVkLgotICAgIC8vIE9ubHkgYSBmZXcgc3ViY2xhc3NlcyBhY3R1YWxseSBuZWVkIHRoaXMuIFRv
IHV0aWxpemUgdGhpcywgdGhlIG5vZGUgc2hvdWxkIHJldHVybiBJbnNlcnRpb25TaG91bGRDYWxs
RmluaXNoZWRJbnNlcnRpbmdTdWJ0cmVlCisgICAgLy8gVGhlcmUgaXMgYW5vdGhlciBjYWxsYmFj
ayBuYW1lZCBkaWRGaW5pc2hJbnNlcnRpbmdOb2RlKCksIHdoaWNoIGlzIGNhbGxlZCBhZnRlciBh
bGwgZGVzY2VuZGFudHMgYXJlIG5vdGlmaWVkLgorICAgIC8vIE9ubHkgYSBmZXcgc3ViY2xhc3Nl
cyBhY3R1YWxseSBuZWVkIHRoaXMuIFRvIHV0aWxpemUgdGhpcywgdGhlIG5vZGUgc2hvdWxkIHJl
dHVybiBJbnNlcnRlZEludG9SZXN1bHQ6Ok5lZWRzUG9zdEluc2VydGlvbkNhbGxiYWNrCiAgICAg
Ly8gZnJvbSBpbnNydGVkSW50bygpLgogICAgIC8vCi0gICAgZW51bSBJbnNlcnRpb25Ob3RpZmlj
YXRpb25SZXF1ZXN0IHsKLSAgICAgICAgSW5zZXJ0aW9uRG9uZSwKLSAgICAgICAgSW5zZXJ0aW9u
U2hvdWxkQ2FsbEZpbmlzaGVkSW5zZXJ0aW5nU3VidHJlZQorICAgIGVudW0gY2xhc3MgSW5zZXJ0
ZWRJbnRvUmVzdWx0IHsKKyAgICAgICAgRG9uZSwKKyAgICAgICAgTmVlZHNQb3N0SW5zZXJ0aW9u
Q2FsbGJhY2ssCiAgICAgfTsKIAotICAgIHZpcnR1YWwgSW5zZXJ0aW9uTm90aWZpY2F0aW9uUmVx
dWVzdCBpbnNlcnRlZEludG8oQ29udGFpbmVyTm9kZSYgaW5zZXJ0aW9uUG9pbnQpOwotICAgIHZp
cnR1YWwgdm9pZCBmaW5pc2hlZEluc2VydGluZ1N1YnRyZWUoKSB7IH0KKyAgICBzdHJ1Y3QgSW5z
ZXJ0aW9uVHlwZSB7CisgICAgICAgIGJvb2wgY29ubmVjdGVkVG9Eb2N1bWVudCB7IGZhbHNlIH07
CisgICAgICAgIGJvb2wgdHJlZVNjb3BlQ2hhbmdlZCB7IGZhbHNlIH07CisgICAgfTsKKyAgICB2
aXJ0dWFsIEluc2VydGVkSW50b1Jlc3VsdCBpbnNlcnRlZEludG8oSW5zZXJ0aW9uVHlwZSwgQ29u
dGFpbmVyTm9kZSYgcGFyZW50T2ZJbnNlcnRlZFRyZWUpOworICAgIHZpcnR1YWwgdm9pZCBkaWRG
aW5pc2hJbnNlcnRpbmdOb2RlKCkgeyB9CiAKICAgICAvLyBOb3RpZmllcyB0aGUgbm9kZSB0aGF0
IGl0IGlzIG5vIGxvbmdlciBwYXJ0IG9mIHRoZSB0cmVlLgogICAgIC8vCkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9kb20vUHJvY2Vzc2luZ0luc3RydWN0aW9uLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9kb20vUHJvY2Vzc2luZ0luc3RydWN0aW9uLmNwcAkocmV2aXNpb24gMjIzNDc1
KQorKysgU291cmNlL1dlYkNvcmUvZG9tL1Byb2Nlc3NpbmdJbnN0cnVjdGlvbi5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTI3NCwxNiArMjc0LDE2IEBAIHZvaWQgUHJvY2Vzc2luZ0luc3RydWN0aW9u
OjphZGRTdWJyZXNvdXIKICAgICBhZGRTdWJyZXNvdXJjZVVSTCh1cmxzLCBzaGVldCgpLT5iYXNl
VVJMKCkpOwogfQogCi1Ob2RlOjpJbnNlcnRpb25Ob3RpZmljYXRpb25SZXF1ZXN0IFByb2Nlc3Np
bmdJbnN0cnVjdGlvbjo6aW5zZXJ0ZWRJbnRvKENvbnRhaW5lck5vZGUmIGluc2VydGlvblBvaW50
KQorTm9kZTo6SW5zZXJ0ZWRJbnRvUmVzdWx0IFByb2Nlc3NpbmdJbnN0cnVjdGlvbjo6aW5zZXJ0
ZWRJbnRvKEluc2VydGlvblR5cGUgaW5zZXJ0aW9uVHlwZSwgQ29udGFpbmVyTm9kZSYgcGFyZW50
T2ZJbnNlcnRlZFRyZWUpCiB7Ci0gICAgQ2hhcmFjdGVyRGF0YTo6aW5zZXJ0ZWRJbnRvKGluc2Vy
dGlvblBvaW50KTsKLSAgICBpZiAoIWluc2VydGlvblBvaW50LmlzQ29ubmVjdGVkKCkpCi0gICAg
ICAgIHJldHVybiBJbnNlcnRpb25Eb25lOworICAgIENoYXJhY3RlckRhdGE6Omluc2VydGVkSW50
byhpbnNlcnRpb25UeXBlLCBwYXJlbnRPZkluc2VydGVkVHJlZSk7CisgICAgaWYgKCFpbnNlcnRp
b25UeXBlLmNvbm5lY3RlZFRvRG9jdW1lbnQpCisgICAgICAgIHJldHVybiBJbnNlcnRlZEludG9S
ZXN1bHQ6OkRvbmU7CiAgICAgZG9jdW1lbnQoKS5zdHlsZVNjb3BlKCkuYWRkU3R5bGVTaGVldENh
bmRpZGF0ZU5vZGUoKnRoaXMsIG1fY3JlYXRlZEJ5UGFyc2VyKTsKLSAgICByZXR1cm4gSW5zZXJ0
aW9uU2hvdWxkQ2FsbEZpbmlzaGVkSW5zZXJ0aW5nU3VidHJlZTsKKyAgICByZXR1cm4gSW5zZXJ0
ZWRJbnRvUmVzdWx0OjpOZWVkc1Bvc3RJbnNlcnRpb25DYWxsYmFjazsKIH0KIAotdm9pZCBQcm9j
ZXNzaW5nSW5zdHJ1Y3Rpb246OmZpbmlzaGVkSW5zZXJ0aW5nU3VidHJlZSgpCit2b2lkIFByb2Nl
c3NpbmdJbnN0cnVjdGlvbjo6ZGlkRmluaXNoSW5zZXJ0aW5nTm9kZSgpCiB7CiAgICAgY2hlY2tT
dHlsZVNoZWV0KCk7CiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20vUHJvY2Vzc2luZ0luc3Ry
dWN0aW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZG9tL1Byb2Nlc3NpbmdJbnN0
cnVjdGlvbi5oCShyZXZpc2lvbiAyMjM0NzUpCisrKyBTb3VyY2UvV2ViQ29yZS9kb20vUHJvY2Vz
c2luZ0luc3RydWN0aW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTU4LDggKzU4LDggQEAgcHJpdmF0
ZToKICAgICBOb2RlVHlwZSBub2RlVHlwZSgpIGNvbnN0IG92ZXJyaWRlOwogICAgIFJlZjxOb2Rl
PiBjbG9uZU5vZGVJbnRlcm5hbChEb2N1bWVudCYsIENsb25pbmdPcGVyYXRpb24pIG92ZXJyaWRl
OwogCi0gICAgSW5zZXJ0aW9uTm90aWZpY2F0aW9uUmVxdWVzdCBpbnNlcnRlZEludG8oQ29udGFp
bmVyTm9kZSYpIG92ZXJyaWRlOwotICAgIHZvaWQgZmluaXNoZWRJbnNlcnRpbmdTdWJ0cmVlKCkg
b3ZlcnJpZGU7CisgICAgSW5zZXJ0ZWRJbnRvUmVzdWx0IGluc2VydGVkSW50byhJbnNlcnRpb25U
eXBlLCBDb250YWluZXJOb2RlJikgb3ZlcnJpZGU7CisgICAgdm9pZCBkaWRGaW5pc2hJbnNlcnRp
bmdOb2RlKCkgb3ZlcnJpZGU7CiAgICAgdm9pZCByZW1vdmVkRnJvbShDb250YWluZXJOb2RlJikg
b3ZlcnJpZGU7CiAKICAgICB2b2lkIGNoZWNrU3R5bGVTaGVldCgpOwpJbmRleDogU291cmNlL1dl
YkNvcmUvZG9tL1NjcmlwdEVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L2RvbS9TY3JpcHRFbGVtZW50LmNwcAkocmV2aXNpb24gMjIzNDc1KQorKysgU291cmNlL1dlYkNv
cmUvZG9tL1NjcmlwdEVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03OCwxMiArNzgsNyBA
QCBTY3JpcHRFbGVtZW50OjpTY3JpcHRFbGVtZW50KEVsZW1lbnQmIGVsCiAgICAgICAgIG1fc3Rh
cnRMaW5lTnVtYmVyID0gbV9lbGVtZW50LmRvY3VtZW50KCkuc2NyaXB0YWJsZURvY3VtZW50UGFy
c2VyKCktPnRleHRQb3NpdGlvbigpLm1fbGluZTsKIH0KIAotYm9vbCBTY3JpcHRFbGVtZW50Ojpz
aG91bGRDYWxsRmluaXNoZWRJbnNlcnRpbmdTdWJ0cmVlKENvbnRhaW5lck5vZGUmIGluc2VydGlv
blBvaW50KQotewotICAgIHJldHVybiBpbnNlcnRpb25Qb2ludC5pc0Nvbm5lY3RlZCgpICYmICFt
X3BhcnNlckluc2VydGVkOwotfQotCi12b2lkIFNjcmlwdEVsZW1lbnQ6OmZpbmlzaGVkSW5zZXJ0
aW5nU3VidHJlZSgpCit2b2lkIFNjcmlwdEVsZW1lbnQ6OmRpZEZpbmlzaEluc2VydGluZ05vZGUo
KQogewogICAgIEFTU0VSVCghbV9wYXJzZXJJbnNlcnRlZCk7CiAgICAgcHJlcGFyZVNjcmlwdCgp
OyAvLyBGSVhNRTogUHJvdmlkZSBhIHJlYWwgc3RhcnRpbmcgbGluZSBudW1iZXIgaGVyZS4KSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9TY3JpcHRFbGVtZW50LmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvZG9tL1NjcmlwdEVsZW1lbnQuaAkocmV2aXNpb24gMjIzNDc1KQorKysgU291
cmNlL1dlYkNvcmUvZG9tL1NjcmlwdEVsZW1lbnQuaAkod29ya2luZyBjb3B5KQpAQCAtODEsOCAr
ODEsMTQgQEAgcHJvdGVjdGVkOgogICAgIGJvb2wgZm9yY2VBc3luYygpIGNvbnN0IHsgcmV0dXJu
IG1fZm9yY2VBc3luYzsgfQogCiAgICAgLy8gSGVscGVyIGZ1bmN0aW9ucyB1c2VkIGJ5IG91ciBw
YXJlbnQgY2xhc3Nlcy4KLSAgICBib29sIHNob3VsZENhbGxGaW5pc2hlZEluc2VydGluZ1N1YnRy
ZWUoQ29udGFpbmVyTm9kZSYpOwotICAgIHZvaWQgZmluaXNoZWRJbnNlcnRpbmdTdWJ0cmVlKCk7
CisgICAgTm9kZTo6SW5zZXJ0ZWRJbnRvUmVzdWx0IGluc2VydGVkSW50byhOb2RlOjpJbnNlcnRp
b25UeXBlIGluc2VydGlvblR5cGUsIENvbnRhaW5lck5vZGUmKSBjb25zdAorICAgIHsKKyAgICAg
ICAgaWYgKGluc2VydGlvblR5cGUuY29ubmVjdGVkVG9Eb2N1bWVudCAmJiAhbV9wYXJzZXJJbnNl
cnRlZCkKKyAgICAgICAgICAgIHJldHVybiBOb2RlOjpJbnNlcnRlZEludG9SZXN1bHQ6Ok5lZWRz
UG9zdEluc2VydGlvbkNhbGxiYWNrOworICAgICAgICByZXR1cm4gTm9kZTo6SW5zZXJ0ZWRJbnRv
UmVzdWx0OjpEb25lOworICAgIH0KKworICAgIHZvaWQgZGlkRmluaXNoSW5zZXJ0aW5nTm9kZSgp
OwogICAgIHZvaWQgY2hpbGRyZW5DaGFuZ2VkKGNvbnN0IENvbnRhaW5lck5vZGU6OkNoaWxkQ2hh
bmdlJik7CiAgICAgdm9pZCBoYW5kbGVTb3VyY2VBdHRyaWJ1dGUoY29uc3QgU3RyaW5nJiBzb3Vy
Y2VVUkwpOwogICAgIHZvaWQgaGFuZGxlQXN5bmNBdHRyaWJ1dGUoKTsKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL2RvbS9TaGFkb3dSb290LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9k
b20vU2hhZG93Um9vdC5jcHAJKHJldmlzaW9uIDIyMzQ3NSkKKysrIFNvdXJjZS9XZWJDb3JlL2Rv
bS9TaGFkb3dSb290LmNwcAkod29ya2luZyBjb3B5KQpAQCAtODUsMTMgKzg1LDEyIEBAIFNoYWRv
d1Jvb3Q6On5TaGFkb3dSb290KCkKICAgICByZW1vdmVEZXRhY2hlZENoaWxkcmVuKCk7CiB9CiAK
LU5vZGU6Okluc2VydGlvbk5vdGlmaWNhdGlvblJlcXVlc3QgU2hhZG93Um9vdDo6aW5zZXJ0ZWRJ
bnRvKENvbnRhaW5lck5vZGUmIGluc2VydGlvblBvaW50KQorTm9kZTo6SW5zZXJ0ZWRJbnRvUmVz
dWx0IFNoYWRvd1Jvb3Q6Omluc2VydGVkSW50byhJbnNlcnRpb25UeXBlIGluc2VydGlvblR5cGUs
IENvbnRhaW5lck5vZGUmIHBhcmVudE9mSW5zZXJ0ZWRUcmVlKQogewotICAgIGJvb2wgd2FzSW5E
b2N1bWVudCA9IGlzQ29ubmVjdGVkKCk7Ci0gICAgRG9jdW1lbnRGcmFnbWVudDo6aW5zZXJ0ZWRJ
bnRvKGluc2VydGlvblBvaW50KTsKLSAgICBpZiAoaW5zZXJ0aW9uUG9pbnQuaXNDb25uZWN0ZWQo
KSAmJiAhd2FzSW5Eb2N1bWVudCkKKyAgICBEb2N1bWVudEZyYWdtZW50OjppbnNlcnRlZEludG8o
aW5zZXJ0aW9uVHlwZSwgcGFyZW50T2ZJbnNlcnRlZFRyZWUpOworICAgIGlmIChpbnNlcnRpb25U
eXBlLmNvbm5lY3RlZFRvRG9jdW1lbnQpCiAgICAgICAgIGRvY3VtZW50KCkuZGlkSW5zZXJ0SW5E
b2N1bWVudFNoYWRvd1Jvb3QoKnRoaXMpOwotICAgIHJldHVybiBJbnNlcnRpb25Eb25lOworICAg
IHJldHVybiBJbnNlcnRlZEludG9SZXN1bHQ6OkRvbmU7CiB9CiAKIHZvaWQgU2hhZG93Um9vdDo6
cmVtb3ZlZEZyb20oQ29udGFpbmVyTm9kZSYgaW5zZXJ0aW9uUG9pbnQpCkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9kb20vU2hhZG93Um9vdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Rv
bS9TaGFkb3dSb290LmgJKHJldmlzaW9uIDIyMzQ3NSkKKysrIFNvdXJjZS9XZWJDb3JlL2RvbS9T
aGFkb3dSb290LmgJKHdvcmtpbmcgY29weSkKQEAgLTk0LDcgKzk0LDcgQEAgcHJpdmF0ZToKIAog
ICAgIFJlZjxOb2RlPiBjbG9uZU5vZGVJbnRlcm5hbChEb2N1bWVudCYsIENsb25pbmdPcGVyYXRp
b24pIG92ZXJyaWRlOwogCi0gICAgTm9kZTo6SW5zZXJ0aW9uTm90aWZpY2F0aW9uUmVxdWVzdCBp
bnNlcnRlZEludG8oQ29udGFpbmVyTm9kZSYgaW5zZXJ0aW9uUG9pbnQpIG92ZXJyaWRlOworICAg
IE5vZGU6Okluc2VydGVkSW50b1Jlc3VsdCBpbnNlcnRlZEludG8oSW5zZXJ0aW9uVHlwZSwgQ29u
dGFpbmVyTm9kZSYpIG92ZXJyaWRlOwogICAgIHZvaWQgcmVtb3ZlZEZyb20oQ29udGFpbmVyTm9k
ZSYgaW5zZXJ0aW9uUG9pbnQpIG92ZXJyaWRlOwogICAgIHZvaWQgZGlkTW92ZVRvTmV3RG9jdW1l
bnQoRG9jdW1lbnQmIG9sZERvY3VtZW50LCBEb2N1bWVudCYgbmV3RG9jdW1lbnQpIG92ZXJyaWRl
OwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL0Zvcm1Bc3NvY2lhdGVkRWxlbWVudC5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9Gb3JtQXNzb2NpYXRlZEVsZW1lbnQu
Y3BwCShyZXZpc2lvbiAyMjM0NzUpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL0Zvcm1Bc3NvY2lh
dGVkRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY4LDcgKzY4LDcgQEAgdm9pZCBGb3Jt
QXNzb2NpYXRlZEVsZW1lbnQ6OmRpZE1vdmVUb05ldwogICAgICAgICByZXNldEZvcm1BdHRyaWJ1
dGVUYXJnZXRPYnNlcnZlcigpOwogfQogCi12b2lkIEZvcm1Bc3NvY2lhdGVkRWxlbWVudDo6aW5z
ZXJ0ZWRJbnRvKENvbnRhaW5lck5vZGUmIGluc2VydGlvblBvaW50KQordm9pZCBGb3JtQXNzb2Np
YXRlZEVsZW1lbnQ6Omluc2VydGVkSW50byhOb2RlOjpJbnNlcnRpb25UeXBlIGluc2VydGlvblR5
cGUsIENvbnRhaW5lck5vZGUmKQogewogICAgIEhUTUxFbGVtZW50JiBlbGVtZW50ID0gYXNIVE1M
RWxlbWVudCgpOwogICAgIGlmIChtX2Zvcm1TZXRCeVBhcnNlcikgewpAQCAtODEsNyArODEsNyBA
QCB2b2lkIEZvcm1Bc3NvY2lhdGVkRWxlbWVudDo6aW5zZXJ0ZWRJbnRvCiAgICAgaWYgKG1fZm9y
bSAmJiBlbGVtZW50LnJvb3RFbGVtZW50KCkgIT0gbV9mb3JtLT5yb290RWxlbWVudCgpKQogICAg
ICAgICBzZXRGb3JtKG51bGxwdHIpOwogCi0gICAgaWYgKCFpbnNlcnRpb25Qb2ludC5pc0Nvbm5l
Y3RlZCgpKQorICAgIGlmICghaW5zZXJ0aW9uVHlwZS5jb25uZWN0ZWRUb0RvY3VtZW50KQogICAg
ICAgICByZXR1cm47CiAKICAgICBpZiAoZWxlbWVudC5oYXNBdHRyaWJ1dGVXaXRob3V0U3luY2hy
b25pemF0aW9uKGZvcm1BdHRyKSkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvRm9ybUFzc29j
aWF0ZWRFbGVtZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9Gb3JtQXNz
b2NpYXRlZEVsZW1lbnQuaAkocmV2aXNpb24gMjIzNDc1KQorKysgU291cmNlL1dlYkNvcmUvaHRt
bC9Gb3JtQXNzb2NpYXRlZEVsZW1lbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMjQsNiArMjQsNyBA
QAogI3ByYWdtYSBvbmNlCiAKICNpbmNsdWRlICJGb3JtTmFtZWRJdGVtLmgiCisjaW5jbHVkZSAi
Tm9kZS5oIgogI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgogCiBuYW1lc3BhY2UgV2Vi
Q29yZSB7CkBAIC0zNCw3ICszNSw2IEBAIGNsYXNzIERvY3VtZW50OwogY2xhc3MgRm9ybUF0dHJp
YnV0ZVRhcmdldE9ic2VydmVyOwogY2xhc3MgSFRNTEVsZW1lbnQ7CiBjbGFzcyBIVE1MRm9ybUVs
ZW1lbnQ7Ci1jbGFzcyBOb2RlOwogY2xhc3MgVmFsaWRpdHlTdGF0ZTsKIAogY2xhc3MgRm9ybUFz
c29jaWF0ZWRFbGVtZW50IDogcHVibGljIEZvcm1OYW1lZEl0ZW0gewpAQCAtOTAsNyArOTAsNyBA
QCBwdWJsaWM6CiBwcm90ZWN0ZWQ6CiAgICAgRm9ybUFzc29jaWF0ZWRFbGVtZW50KEhUTUxGb3Jt
RWxlbWVudCopOwogCi0gICAgdm9pZCBpbnNlcnRlZEludG8oQ29udGFpbmVyTm9kZSYpOworICAg
IHZvaWQgaW5zZXJ0ZWRJbnRvKE5vZGU6Okluc2VydGlvblR5cGUsIENvbnRhaW5lck5vZGUmKTsK
ICAgICB2b2lkIHJlbW92ZWRGcm9tKENvbnRhaW5lck5vZGUmKTsKICAgICB2b2lkIGRpZE1vdmVU
b05ld0RvY3VtZW50KERvY3VtZW50JiBvbGREb2N1bWVudCk7CiAKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL2h0bWwvSFRNTEJhc2VFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9odG1sL0hUTUxCYXNlRWxlbWVudC5jcHAJKHJldmlzaW9uIDIyMzQ3NSkKKysrIFNvdXJjZS9X
ZWJDb3JlL2h0bWwvSFRNTEJhc2VFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTEsMTIg
KzUxLDEyIEBAIHZvaWQgSFRNTEJhc2VFbGVtZW50OjpwYXJzZUF0dHJpYnV0ZShjb24KICAgICAg
ICAgSFRNTEVsZW1lbnQ6OnBhcnNlQXR0cmlidXRlKG5hbWUsIHZhbHVlKTsKIH0KIAotTm9kZTo6
SW5zZXJ0aW9uTm90aWZpY2F0aW9uUmVxdWVzdCBIVE1MQmFzZUVsZW1lbnQ6Omluc2VydGVkSW50
byhDb250YWluZXJOb2RlJiBpbnNlcnRpb25Qb2ludCkKK05vZGU6Okluc2VydGVkSW50b1Jlc3Vs
dCBIVE1MQmFzZUVsZW1lbnQ6Omluc2VydGVkSW50byhJbnNlcnRpb25UeXBlIGluc2VydGlvblR5
cGUsIENvbnRhaW5lck5vZGUmIHBhcmVudE9mSW5zZXJ0ZWRUcmVlKQogewotICAgIEhUTUxFbGVt
ZW50OjppbnNlcnRlZEludG8oaW5zZXJ0aW9uUG9pbnQpOwotICAgIGlmIChpbnNlcnRpb25Qb2lu
dC5pc0Nvbm5lY3RlZCgpKQorICAgIEhUTUxFbGVtZW50OjppbnNlcnRlZEludG8oaW5zZXJ0aW9u
VHlwZSwgcGFyZW50T2ZJbnNlcnRlZFRyZWUpOworICAgIGlmIChpbnNlcnRpb25UeXBlLmNvbm5l
Y3RlZFRvRG9jdW1lbnQpCiAgICAgICAgIGRvY3VtZW50KCkucHJvY2Vzc0Jhc2VFbGVtZW50KCk7
Ci0gICAgcmV0dXJuIEluc2VydGlvbkRvbmU7CisgICAgcmV0dXJuIEluc2VydGVkSW50b1Jlc3Vs
dDo6RG9uZTsKIH0KIAogdm9pZCBIVE1MQmFzZUVsZW1lbnQ6OnJlbW92ZWRGcm9tKENvbnRhaW5l
ck5vZGUmIGluc2VydGlvblBvaW50KQpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MQmFz
ZUVsZW1lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxCYXNlRWxl
bWVudC5oCShyZXZpc2lvbiAyMjM0NzUpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxCYXNl
RWxlbWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zOSw3ICszOSw3IEBAIHByaXZhdGU6CiAgICAg
U3RyaW5nIHRhcmdldCgpIGNvbnN0IGZpbmFsOwogICAgIGJvb2wgaXNVUkxBdHRyaWJ1dGUoY29u
c3QgQXR0cmlidXRlJikgY29uc3QgZmluYWw7CiAgICAgdm9pZCBwYXJzZUF0dHJpYnV0ZShjb25z
dCBRdWFsaWZpZWROYW1lJiwgY29uc3QgQXRvbWljU3RyaW5nJikgZmluYWw7Ci0gICAgSW5zZXJ0
aW9uTm90aWZpY2F0aW9uUmVxdWVzdCBpbnNlcnRlZEludG8oQ29udGFpbmVyTm9kZSYpIGZpbmFs
OworICAgIEluc2VydGVkSW50b1Jlc3VsdCBpbnNlcnRlZEludG8oSW5zZXJ0aW9uVHlwZSwgQ29u
dGFpbmVyTm9kZSYpIGZpbmFsOwogICAgIHZvaWQgcmVtb3ZlZEZyb20oQ29udGFpbmVyTm9kZSYp
IGZpbmFsOwogfTsKIApJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MQm9keUVsZW1lbnQu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEJvZHlFbGVtZW50LmNw
cAkocmV2aXNpb24gMjIzNDc1KQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MQm9keUVsZW1l
bnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xODcsMjMgKzE4NywyMyBAQCB2b2lkIEhUTUxCb2R5
RWxlbWVudDo6cGFyc2VBdHRyaWJ1dGUoY29uCiAgICAgSFRNTEVsZW1lbnQ6OnBhcnNlQXR0cmli
dXRlKG5hbWUsIHZhbHVlKTsKIH0KIAotTm9kZTo6SW5zZXJ0aW9uTm90aWZpY2F0aW9uUmVxdWVz
dCBIVE1MQm9keUVsZW1lbnQ6Omluc2VydGVkSW50byhDb250YWluZXJOb2RlJiBpbnNlcnRpb25Q
b2ludCkKK05vZGU6Okluc2VydGVkSW50b1Jlc3VsdCBIVE1MQm9keUVsZW1lbnQ6Omluc2VydGVk
SW50byhJbnNlcnRpb25UeXBlIGluc2VydGlvblR5cGUsIENvbnRhaW5lck5vZGUmIHBhcmVudE9m
SW5zZXJ0ZWRUcmVlKQogewotICAgIEhUTUxFbGVtZW50OjppbnNlcnRlZEludG8oaW5zZXJ0aW9u
UG9pbnQpOwotICAgIGlmICghaW5zZXJ0aW9uUG9pbnQuaXNDb25uZWN0ZWQoKSkKLSAgICAgICAg
cmV0dXJuIEluc2VydGlvbkRvbmU7CisgICAgSFRNTEVsZW1lbnQ6Omluc2VydGVkSW50byhpbnNl
cnRpb25UeXBlLCBwYXJlbnRPZkluc2VydGVkVHJlZSk7CisgICAgaWYgKCFpbnNlcnRpb25UeXBl
LmNvbm5lY3RlZFRvRG9jdW1lbnQpCisgICAgICAgIHJldHVybiBJbnNlcnRlZEludG9SZXN1bHQ6
OkRvbmU7CiAKICAgICAvLyBGSVhNRTogSXQncyBzdXJwcmlzaW5nIHRoaXMgaXMgd2ViIGNvbXBh
dGlibGUgc2luY2UgaXQgbWVhbnMgYSBtYXJnaW53aWR0aCBhbmQgbWFyZ2luaGVpZ2h0IGF0dHJp
YnV0ZSBjYW4KICAgICAvLyBtYWdpY2FsbHkgYXBwZWFyIG9uIHRoZSA8Ym9keT4gb2YgYWxsIGRv
Y3VtZW50cyBlbWJlZGRlZCB0aHJvdWdoIDxpZnJhbWU+IG9yIDxmcmFtZT4uCiAgICAgLy8gRklY
TUU6IFBlcmhhcHMgdGhpcyBjb2RlIHNob3VsZCBiZSBpbiBhdHRhY2goKSBpbnN0ZWFkIG9mIGhl
cmUuCiAgICAgYXV0byogb3duZXJFbGVtZW50ID0gZG9jdW1lbnQoKS5vd25lckVsZW1lbnQoKTsK
ICAgICBpZiAoIWlzPEhUTUxGcmFtZUVsZW1lbnRCYXNlPihvd25lckVsZW1lbnQpKQotICAgICAg
ICByZXR1cm4gSW5zZXJ0aW9uRG9uZTsKKyAgICAgICAgcmV0dXJuIEluc2VydGVkSW50b1Jlc3Vs
dDo6RG9uZTsKIAotICAgIHJldHVybiBJbnNlcnRpb25TaG91bGRDYWxsRmluaXNoZWRJbnNlcnRp
bmdTdWJ0cmVlOworICAgIHJldHVybiBJbnNlcnRlZEludG9SZXN1bHQ6Ok5lZWRzUG9zdEluc2Vy
dGlvbkNhbGxiYWNrOwogfQogCi12b2lkIEhUTUxCb2R5RWxlbWVudDo6ZmluaXNoZWRJbnNlcnRp
bmdTdWJ0cmVlKCkKK3ZvaWQgSFRNTEJvZHlFbGVtZW50OjpkaWRGaW5pc2hJbnNlcnRpbmdOb2Rl
KCkKIHsKICAgICBhdXRvKiBvd25lckVsZW1lbnQgPSBkb2N1bWVudCgpLm93bmVyRWxlbWVudCgp
OwogICAgIFJFTEVBU0VfQVNTRVJUKGlzPEhUTUxGcmFtZUVsZW1lbnRCYXNlPihvd25lckVsZW1l
bnQpKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEJvZHlFbGVtZW50LmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MQm9keUVsZW1lbnQuaAkocmV2aXNpb24g
MjIzNDc1KQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MQm9keUVsZW1lbnQuaAkod29ya2lu
ZyBjb3B5KQpAQCAtNDQsOCArNDQsOCBAQCBwcml2YXRlOgogICAgIGJvb2wgaXNQcmVzZW50YXRp
b25BdHRyaWJ1dGUoY29uc3QgUXVhbGlmaWVkTmFtZSYpIGNvbnN0IGZpbmFsOwogICAgIHZvaWQg
Y29sbGVjdFN0eWxlRm9yUHJlc2VudGF0aW9uQXR0cmlidXRlKGNvbnN0IFF1YWxpZmllZE5hbWUm
LCBjb25zdCBBdG9taWNTdHJpbmcmLCBNdXRhYmxlU3R5bGVQcm9wZXJ0aWVzJikgZmluYWw7CiAK
LSAgICBJbnNlcnRpb25Ob3RpZmljYXRpb25SZXF1ZXN0IGluc2VydGVkSW50byhDb250YWluZXJO
b2RlJikgZmluYWw7Ci0gICAgdm9pZCBmaW5pc2hlZEluc2VydGluZ1N1YnRyZWUoKSBmaW5hbDsK
KyAgICBJbnNlcnRlZEludG9SZXN1bHQgaW5zZXJ0ZWRJbnRvKEluc2VydGlvblR5cGUsIENvbnRh
aW5lck5vZGUmKSBmaW5hbDsKKyAgICB2b2lkIGRpZEZpbmlzaEluc2VydGluZ05vZGUoKSBmaW5h
bDsKIAogICAgIGJvb2wgaXNVUkxBdHRyaWJ1dGUoY29uc3QgQXR0cmlidXRlJikgY29uc3QgZmlu
YWw7CiAgICAgCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxGb3JtQ29udHJvbEVsZW1l
bnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEZvcm1Db250cm9s
RWxlbWVudC5jcHAJKHJldmlzaW9uIDIyMzQ3NSkKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRN
TEZvcm1Db250cm9sRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI3NCwyMCArMjc0LDIw
IEBAIHN0YXRpYyB2b2lkIHJlbW92ZUludmFsaWRFbGVtZW50VG9BbmNlc3QKICAgICAgICAgYW5j
ZXN0b3IucmVtb3ZlSW52YWxpZERlc2NlbmRhbnQoZWxlbWVudCk7CiB9CiAKLU5vZGU6Okluc2Vy
dGlvbk5vdGlmaWNhdGlvblJlcXVlc3QgSFRNTEZvcm1Db250cm9sRWxlbWVudDo6aW5zZXJ0ZWRJ
bnRvKENvbnRhaW5lck5vZGUmIGluc2VydGlvblBvaW50KQorTm9kZTo6SW5zZXJ0ZWRJbnRvUmVz
dWx0IEhUTUxGb3JtQ29udHJvbEVsZW1lbnQ6Omluc2VydGVkSW50byhJbnNlcnRpb25UeXBlIGlu
c2VydGlvblR5cGUsIENvbnRhaW5lck5vZGUmIHBhcmVudE9mSW5zZXJ0ZWRUcmVlKQogewogICAg
IG1fZGF0YUxpc3RBbmNlc3RvclN0YXRlID0gVW5rbm93bjsKICAgICBzZXROZWVkc1dpbGxWYWxp
ZGF0ZUNoZWNrKCk7CiAgICAgaWYgKHdpbGxWYWxpZGF0ZSgpICYmICFpc1ZhbGlkRm9ybUNvbnRy
b2xFbGVtZW50KCkpCi0gICAgICAgIGFkZEludmFsaWRFbGVtZW50VG9BbmNlc3RvckZyb21JbnNl
cnRpb25Qb2ludCgqdGhpcywgJmluc2VydGlvblBvaW50KTsKKyAgICAgICAgYWRkSW52YWxpZEVs
ZW1lbnRUb0FuY2VzdG9yRnJvbUluc2VydGlvblBvaW50KCp0aGlzLCAmcGFyZW50T2ZJbnNlcnRl
ZFRyZWUpOwogICAgIGlmIChkb2N1bWVudCgpLmhhc0Rpc2FibGVkRmllbGRzZXRFbGVtZW50KCkp
CiAgICAgICAgIHNldEFuY2VzdG9yRGlzYWJsZWQoY29tcHV0ZUlzRGlzYWJsZWRCeUZpZWxkc2V0
QW5jZXN0b3IoKSk7Ci0gICAgSFRNTEVsZW1lbnQ6Omluc2VydGVkSW50byhpbnNlcnRpb25Qb2lu
dCk7Ci0gICAgRm9ybUFzc29jaWF0ZWRFbGVtZW50OjppbnNlcnRlZEludG8oaW5zZXJ0aW9uUG9p
bnQpOwotICAgIHJldHVybiBJbnNlcnRpb25TaG91bGRDYWxsRmluaXNoZWRJbnNlcnRpbmdTdWJ0
cmVlOworICAgIEhUTUxFbGVtZW50OjppbnNlcnRlZEludG8oaW5zZXJ0aW9uVHlwZSwgcGFyZW50
T2ZJbnNlcnRlZFRyZWUpOworICAgIEZvcm1Bc3NvY2lhdGVkRWxlbWVudDo6aW5zZXJ0ZWRJbnRv
KGluc2VydGlvblR5cGUsIHBhcmVudE9mSW5zZXJ0ZWRUcmVlKTsKKyAgICByZXR1cm4gSW5zZXJ0
ZWRJbnRvUmVzdWx0OjpOZWVkc1Bvc3RJbnNlcnRpb25DYWxsYmFjazsKIH0KIAotdm9pZCBIVE1M
Rm9ybUNvbnRyb2xFbGVtZW50OjpmaW5pc2hlZEluc2VydGluZ1N1YnRyZWUoKQordm9pZCBIVE1M
Rm9ybUNvbnRyb2xFbGVtZW50OjpkaWRGaW5pc2hJbnNlcnRpbmdOb2RlKCkKIHsKICAgICByZXNl
dEZvcm1Pd25lcigpOwogfQpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MRm9ybUNvbnRy
b2xFbGVtZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MRm9ybUNv
bnRyb2xFbGVtZW50LmgJKHJldmlzaW9uIDIyMzQ3NSkKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwv
SFRNTEZvcm1Db250cm9sRWxlbWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMzYsOCArMTM2LDgg
QEAgcHJvdGVjdGVkOgogICAgIHZpcnR1YWwgdm9pZCByZWFkT25seUF0dHJpYnV0ZUNoYW5nZWQo
KTsKICAgICB2aXJ0dWFsIHZvaWQgcmVxdWlyZWRBdHRyaWJ1dGVDaGFuZ2VkKCk7CiAgICAgdm9p
ZCBkaWRBdHRhY2hSZW5kZXJlcnMoKSBvdmVycmlkZTsKLSAgICBJbnNlcnRpb25Ob3RpZmljYXRp
b25SZXF1ZXN0IGluc2VydGVkSW50byhDb250YWluZXJOb2RlJikgb3ZlcnJpZGU7Ci0gICAgdm9p
ZCBmaW5pc2hlZEluc2VydGluZ1N1YnRyZWUoKSBvdmVycmlkZTsKKyAgICBJbnNlcnRlZEludG9S
ZXN1bHQgaW5zZXJ0ZWRJbnRvKEluc2VydGlvblR5cGUsIENvbnRhaW5lck5vZGUmKSBvdmVycmlk
ZTsKKyAgICB2b2lkIGRpZEZpbmlzaEluc2VydGluZ05vZGUoKSBvdmVycmlkZTsKICAgICB2b2lk
IHJlbW92ZWRGcm9tKENvbnRhaW5lck5vZGUmKSBvdmVycmlkZTsKICAgICB2b2lkIGRpZE1vdmVU
b05ld0RvY3VtZW50KERvY3VtZW50JiBvbGREb2N1bWVudCwgRG9jdW1lbnQmIG5ld0RvY3VtZW50
KSBvdmVycmlkZTsKIApJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MRm9ybUNvbnRyb2xF
bGVtZW50V2l0aFN0YXRlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL0hU
TUxGb3JtQ29udHJvbEVsZW1lbnRXaXRoU3RhdGUuY3BwCShyZXZpc2lvbiAyMjM0NzUpCisrKyBT
b3VyY2UvV2ViQ29yZS9odG1sL0hUTUxGb3JtQ29udHJvbEVsZW1lbnRXaXRoU3RhdGUuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC00MCwxMSArNDAsMTEgQEAgSFRNTEZvcm1Db250cm9sRWxlbWVudFdp
dGhTdGF0ZTo6fkhUTUxGbwogewogfQogCi1Ob2RlOjpJbnNlcnRpb25Ob3RpZmljYXRpb25SZXF1
ZXN0IEhUTUxGb3JtQ29udHJvbEVsZW1lbnRXaXRoU3RhdGU6Omluc2VydGVkSW50byhDb250YWlu
ZXJOb2RlJiBpbnNlcnRpb25Qb2ludCkKK05vZGU6Okluc2VydGVkSW50b1Jlc3VsdCBIVE1MRm9y
bUNvbnRyb2xFbGVtZW50V2l0aFN0YXRlOjppbnNlcnRlZEludG8oSW5zZXJ0aW9uVHlwZSBpbnNl
cnRpb25UeXBlLCBDb250YWluZXJOb2RlJiBwYXJlbnRPZkluc2VydGVkVHJlZSkKIHsKLSAgICBp
ZiAoaW5zZXJ0aW9uUG9pbnQuaXNDb25uZWN0ZWQoKSAmJiAhY29udGFpbmluZ1NoYWRvd1Jvb3Qo
KSkKKyAgICBpZiAoaW5zZXJ0aW9uVHlwZS5jb25uZWN0ZWRUb0RvY3VtZW50ICYmICFjb250YWlu
aW5nU2hhZG93Um9vdCgpKQogICAgICAgICBkb2N1bWVudCgpLmZvcm1Db250cm9sbGVyKCkucmVn
aXN0ZXJGb3JtRWxlbWVudFdpdGhTdGF0ZSh0aGlzKTsKLSAgICByZXR1cm4gSFRNTEZvcm1Db250
cm9sRWxlbWVudDo6aW5zZXJ0ZWRJbnRvKGluc2VydGlvblBvaW50KTsKKyAgICByZXR1cm4gSFRN
TEZvcm1Db250cm9sRWxlbWVudDo6aW5zZXJ0ZWRJbnRvKGluc2VydGlvblR5cGUsIHBhcmVudE9m
SW5zZXJ0ZWRUcmVlKTsKIH0KIAogdm9pZCBIVE1MRm9ybUNvbnRyb2xFbGVtZW50V2l0aFN0YXRl
OjpyZW1vdmVkRnJvbShDb250YWluZXJOb2RlJiBpbnNlcnRpb25Qb2ludCkKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL2h0bWwvSFRNTEZvcm1Db250cm9sRWxlbWVudFdpdGhTdGF0ZS5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEZvcm1Db250cm9sRWxlbWVudFdpdGhTdGF0
ZS5oCShyZXZpc2lvbiAyMjM0NzUpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxGb3JtQ29u
dHJvbEVsZW1lbnRXaXRoU3RhdGUuaAkod29ya2luZyBjb3B5KQpAQCAtNDUsNyArNDUsNyBAQCBw
cm90ZWN0ZWQ6CiAKICAgICB2aXJ0dWFsIGJvb2wgc2hvdWxkQXV0b2NvbXBsZXRlKCkgY29uc3Q7
CiAgICAgdm9pZCBmaW5pc2hQYXJzaW5nQ2hpbGRyZW4oKSBvdmVycmlkZTsKLSAgICBJbnNlcnRp
b25Ob3RpZmljYXRpb25SZXF1ZXN0IGluc2VydGVkSW50byhDb250YWluZXJOb2RlJikgb3ZlcnJp
ZGU7CisgICAgSW5zZXJ0ZWRJbnRvUmVzdWx0IGluc2VydGVkSW50byhJbnNlcnRpb25UeXBlLCBD
b250YWluZXJOb2RlJikgb3ZlcnJpZGU7CiAgICAgdm9pZCByZW1vdmVkRnJvbShDb250YWluZXJO
b2RlJikgb3ZlcnJpZGU7CiAgICAgYm9vbCBpc0Zvcm1Db250cm9sRWxlbWVudFdpdGhTdGF0ZSgp
IGNvbnN0IG92ZXJyaWRlOwogfTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEZvcm1F
bGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxGb3JtRWxl
bWVudC5jcHAJKHJldmlzaW9uIDIyMzQ3NSkKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEZv
cm1FbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTIxLDEyICsxMjEsMTIgQEAgYm9vbCBI
VE1MRm9ybUVsZW1lbnQ6OnJlbmRlcmVySXNOZWVkZWQoYwogICAgIHJldHVybiBmb3JtSXNUYWJs
ZVBhcnQ7CiB9CiAKLU5vZGU6Okluc2VydGlvbk5vdGlmaWNhdGlvblJlcXVlc3QgSFRNTEZvcm1F
bGVtZW50OjppbnNlcnRlZEludG8oQ29udGFpbmVyTm9kZSYgaW5zZXJ0aW9uUG9pbnQpCitOb2Rl
OjpJbnNlcnRlZEludG9SZXN1bHQgSFRNTEZvcm1FbGVtZW50OjppbnNlcnRlZEludG8oSW5zZXJ0
aW9uVHlwZSBpbnNlcnRpb25UeXBlLCBDb250YWluZXJOb2RlJiBwYXJlbnRPZkluc2VydGVkVHJl
ZSkKIHsKLSAgICBIVE1MRWxlbWVudDo6aW5zZXJ0ZWRJbnRvKGluc2VydGlvblBvaW50KTsKLSAg
ICBpZiAoaW5zZXJ0aW9uUG9pbnQuaXNDb25uZWN0ZWQoKSkKKyAgICBIVE1MRWxlbWVudDo6aW5z
ZXJ0ZWRJbnRvKGluc2VydGlvblR5cGUsIHBhcmVudE9mSW5zZXJ0ZWRUcmVlKTsKKyAgICBpZiAo
aW5zZXJ0aW9uVHlwZS5jb25uZWN0ZWRUb0RvY3VtZW50KQogICAgICAgICBkb2N1bWVudCgpLmRp
ZEFzc29jaWF0ZUZvcm1Db250cm9sKHRoaXMpOwotICAgIHJldHVybiBJbnNlcnRpb25Eb25lOwor
ICAgIHJldHVybiBJbnNlcnRlZEludG9SZXN1bHQ6OkRvbmU7CiB9CiAKIHZvaWQgSFRNTEZvcm1F
bGVtZW50OjpyZW1vdmVkRnJvbShDb250YWluZXJOb2RlJiBpbnNlcnRpb25Qb2ludCkKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEZvcm1FbGVtZW50LmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvaHRtbC9IVE1MRm9ybUVsZW1lbnQuaAkocmV2aXNpb24gMjIzNDc1KQorKysg
U291cmNlL1dlYkNvcmUvaHRtbC9IVE1MRm9ybUVsZW1lbnQuaAkod29ya2luZyBjb3B5KQpAQCAt
MTI0LDcgKzEyNCw3IEBAIHByaXZhdGU6CiAgICAgSFRNTEZvcm1FbGVtZW50KGNvbnN0IFF1YWxp
ZmllZE5hbWUmLCBEb2N1bWVudCYpOwogCiAgICAgYm9vbCByZW5kZXJlcklzTmVlZGVkKGNvbnN0
IFJlbmRlclN0eWxlJikgZmluYWw7Ci0gICAgSW5zZXJ0aW9uTm90aWZpY2F0aW9uUmVxdWVzdCBp
bnNlcnRlZEludG8oQ29udGFpbmVyTm9kZSYpIGZpbmFsOworICAgIEluc2VydGVkSW50b1Jlc3Vs
dCBpbnNlcnRlZEludG8oSW5zZXJ0aW9uVHlwZSwgQ29udGFpbmVyTm9kZSYpIGZpbmFsOwogICAg
IHZvaWQgcmVtb3ZlZEZyb20oQ29udGFpbmVyTm9kZSYpIGZpbmFsOwogICAgIHZvaWQgZmluaXNo
UGFyc2luZ0NoaWxkcmVuKCkgZmluYWw7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRN
TEZyYW1lRWxlbWVudEJhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwv
SFRNTEZyYW1lRWxlbWVudEJhc2UuY3BwCShyZXZpc2lvbiAyMjM0NzUpCisrKyBTb3VyY2UvV2Vi
Q29yZS9odG1sL0hUTUxGcmFtZUVsZW1lbnRCYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTM4
LDE1ICsxMzgsMTUgQEAgdm9pZCBIVE1MRnJhbWVFbGVtZW50QmFzZTo6c2V0TmFtZUFuZE9wZQog
ICAgIG9wZW5VUkwoKTsKIH0KIAotTm9kZTo6SW5zZXJ0aW9uTm90aWZpY2F0aW9uUmVxdWVzdCBI
VE1MRnJhbWVFbGVtZW50QmFzZTo6aW5zZXJ0ZWRJbnRvKENvbnRhaW5lck5vZGUmIGluc2VydGlv
blBvaW50KQorTm9kZTo6SW5zZXJ0ZWRJbnRvUmVzdWx0IEhUTUxGcmFtZUVsZW1lbnRCYXNlOjpp
bnNlcnRlZEludG8oSW5zZXJ0aW9uVHlwZSBpbnNlcnRpb25UeXBlLCBDb250YWluZXJOb2RlJiBw
YXJlbnRPZkluc2VydGVkVHJlZSkKIHsKLSAgICBIVE1MRnJhbWVPd25lckVsZW1lbnQ6Omluc2Vy
dGVkSW50byhpbnNlcnRpb25Qb2ludCk7Ci0gICAgaWYgKGluc2VydGlvblBvaW50LmlzQ29ubmVj
dGVkKCkpCi0gICAgICAgIHJldHVybiBJbnNlcnRpb25TaG91bGRDYWxsRmluaXNoZWRJbnNlcnRp
bmdTdWJ0cmVlOwotICAgIHJldHVybiBJbnNlcnRpb25Eb25lOworICAgIEhUTUxGcmFtZU93bmVy
RWxlbWVudDo6aW5zZXJ0ZWRJbnRvKGluc2VydGlvblR5cGUsIHBhcmVudE9mSW5zZXJ0ZWRUcmVl
KTsKKyAgICBpZiAoaW5zZXJ0aW9uVHlwZS5jb25uZWN0ZWRUb0RvY3VtZW50KQorICAgICAgICBy
ZXR1cm4gSW5zZXJ0ZWRJbnRvUmVzdWx0OjpOZWVkc1Bvc3RJbnNlcnRpb25DYWxsYmFjazsKKyAg
ICByZXR1cm4gSW5zZXJ0ZWRJbnRvUmVzdWx0OjpEb25lOwogfQogCi12b2lkIEhUTUxGcmFtZUVs
ZW1lbnRCYXNlOjpmaW5pc2hlZEluc2VydGluZ1N1YnRyZWUoKQordm9pZCBIVE1MRnJhbWVFbGVt
ZW50QmFzZTo6ZGlkRmluaXNoSW5zZXJ0aW5nTm9kZSgpCiB7CiAgICAgaWYgKCFpc0Nvbm5lY3Rl
ZCgpKQogICAgICAgICByZXR1cm47CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxGcmFt
ZUVsZW1lbnRCYXNlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MRnJh
bWVFbGVtZW50QmFzZS5oCShyZXZpc2lvbiAyMjM0NzUpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1s
L0hUTUxGcmFtZUVsZW1lbnRCYXNlLmgJKHdvcmtpbmcgY29weSkKQEAgLTU2LDggKzU2LDggQEAg
cHJvdGVjdGVkOgogICAgIGJvb2wgaXNVUkxBbGxvd2VkKCkgY29uc3Q7CiAKICAgICB2b2lkIHBh
cnNlQXR0cmlidXRlKGNvbnN0IFF1YWxpZmllZE5hbWUmLCBjb25zdCBBdG9taWNTdHJpbmcmKSBv
dmVycmlkZTsKLSAgICBJbnNlcnRpb25Ob3RpZmljYXRpb25SZXF1ZXN0IGluc2VydGVkSW50byhD
b250YWluZXJOb2RlJikgZmluYWw7Ci0gICAgdm9pZCBmaW5pc2hlZEluc2VydGluZ1N1YnRyZWUo
KSBmaW5hbDsKKyAgICBJbnNlcnRlZEludG9SZXN1bHQgaW5zZXJ0ZWRJbnRvKEluc2VydGlvblR5
cGUsIENvbnRhaW5lck5vZGUmKSBmaW5hbDsKKyAgICB2b2lkIGRpZEZpbmlzaEluc2VydGluZ05v
ZGUoKSBmaW5hbDsKICAgICB2b2lkIGRpZEF0dGFjaFJlbmRlcmVycygpIG92ZXJyaWRlOwogCiBw
cml2YXRlOgpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MRnJhbWVTZXRFbGVtZW50LmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxGcmFtZVNldEVsZW1lbnQu
Y3BwCShyZXZpc2lvbiAyMjM0NzUpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxGcmFtZVNl
dEVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMDgsMTUgKzIwOCwxNSBAQCB2b2lkIEhU
TUxGcmFtZVNldEVsZW1lbnQ6OndpbGxSZWNhbGNTdHlsCiAgICAgICAgIHJlbmRlcmVyKCktPnNl
dE5lZWRzTGF5b3V0KCk7CiB9CiAKLU5vZGU6Okluc2VydGlvbk5vdGlmaWNhdGlvblJlcXVlc3Qg
SFRNTEZyYW1lU2V0RWxlbWVudDo6aW5zZXJ0ZWRJbnRvKENvbnRhaW5lck5vZGUmIGluc2VydGlv
blBvaW50KQorTm9kZTo6SW5zZXJ0ZWRJbnRvUmVzdWx0IEhUTUxGcmFtZVNldEVsZW1lbnQ6Omlu
c2VydGVkSW50byhJbnNlcnRpb25UeXBlIGluc2VydGlvblR5cGUsIENvbnRhaW5lck5vZGUmIHBh
cmVudE9mSW5zZXJ0ZWRUcmVlKQogewotICAgIEhUTUxFbGVtZW50OjppbnNlcnRlZEludG8oaW5z
ZXJ0aW9uUG9pbnQpOwotICAgIGlmIChpbnNlcnRpb25Qb2ludC5pc0Nvbm5lY3RlZCgpKSB7Cisg
ICAgSFRNTEVsZW1lbnQ6Omluc2VydGVkSW50byhpbnNlcnRpb25UeXBlLCBwYXJlbnRPZkluc2Vy
dGVkVHJlZSk7CisgICAgaWYgKGluc2VydGlvblR5cGUuY29ubmVjdGVkVG9Eb2N1bWVudCkgewog
ICAgICAgICBpZiAoRnJhbWUqIGZyYW1lID0gZG9jdW1lbnQoKS5mcmFtZSgpKQogICAgICAgICAg
ICAgZnJhbWUtPmxvYWRlcigpLmNsaWVudCgpLmRpc3BhdGNoRGlkQmVjb21lRnJhbWVzZXQoZG9j
dW1lbnQoKS5pc0ZyYW1lU2V0KCkpOwogICAgIH0KIAotICAgIHJldHVybiBJbnNlcnRpb25Eb25l
OworICAgIHJldHVybiBJbnNlcnRlZEludG9SZXN1bHQ6OkRvbmU7CiB9CiAKIHZvaWQgSFRNTEZy
YW1lU2V0RWxlbWVudDo6cmVtb3ZlZEZyb20oQ29udGFpbmVyTm9kZSYgaW5zZXJ0aW9uUG9pbnQp
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxGcmFtZVNldEVsZW1lbnQuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxGcmFtZVNldEVsZW1lbnQuaAkocmV2aXNp
b24gMjIzNDc1KQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MRnJhbWVTZXRFbGVtZW50LmgJ
KHdvcmtpbmcgY29weSkKQEAgLTY0LDcgKzY0LDcgQEAgcHJpdmF0ZToKIAogICAgIHZvaWQgd2ls
bFJlY2FsY1N0eWxlKFN0eWxlOjpDaGFuZ2UpIGZpbmFsOwogCi0gICAgSW5zZXJ0aW9uTm90aWZp
Y2F0aW9uUmVxdWVzdCBpbnNlcnRlZEludG8oQ29udGFpbmVyTm9kZSYpIGZpbmFsOworICAgIElu
c2VydGVkSW50b1Jlc3VsdCBpbnNlcnRlZEludG8oSW5zZXJ0aW9uVHlwZSwgQ29udGFpbmVyTm9k
ZSYpIGZpbmFsOwogICAgIHZvaWQgcmVtb3ZlZEZyb20oQ29udGFpbmVyTm9kZSYpIGZpbmFsOwog
CiAgICAgc3RkOjp1bmlxdWVfcHRyPExlbmd0aFtdPiBtX3Jvd0xlbmd0aHM7CkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9odG1sL0hUTUxJbWFnZUVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL2h0bWwvSFRNTEltYWdlRWxlbWVudC5jcHAJKHJldmlzaW9uIDIyMzQ3NSkKKysr
IFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEltYWdlRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTI5Myw3ICsyOTMsNyBAQCB2b2lkIEhUTUxJbWFnZUVsZW1lbnQ6OmRpZEF0dGFjaFJlbmRl
cmVyCiAgICAgICAgIHJlbmRlckltYWdlLnNldEltYWdlU2l6ZUZvckFsdFRleHQoKTsKIH0KIAot
Tm9kZTo6SW5zZXJ0aW9uTm90aWZpY2F0aW9uUmVxdWVzdCBIVE1MSW1hZ2VFbGVtZW50OjppbnNl
cnRlZEludG8oQ29udGFpbmVyTm9kZSYgaW5zZXJ0aW9uUG9pbnQpCitOb2RlOjpJbnNlcnRlZElu
dG9SZXN1bHQgSFRNTEltYWdlRWxlbWVudDo6aW5zZXJ0ZWRJbnRvKEluc2VydGlvblR5cGUgaW5z
ZXJ0aW9uVHlwZSwgQ29udGFpbmVyTm9kZSYgcGFyZW50T2ZJbnNlcnRlZFRyZWUpCiB7CiAgICAg
aWYgKG1fZm9ybVNldEJ5UGFyc2VyKSB7CiAgICAgICAgIG1fZm9ybSA9IG1fZm9ybVNldEJ5UGFy
c2VyOwpAQCAtMzEzLDkgKzMxMyw5IEBAIE5vZGU6Okluc2VydGlvbk5vdGlmaWNhdGlvblJlcXVl
c3QgSFRNTEkKICAgICB9CiAgICAgLy8gSW5zZXJ0IG5lZWRzIHRvIGNvbXBsZXRlIGZpcnN0LCBi
ZWZvcmUgd2Ugc3RhcnQgdXBkYXRpbmcgdGhlIGxvYWRlci4gTG9hZGVyIGRpc3BhdGNoZXMgZXZl
bnRzIHdoaWNoIGNvdWxkIHJlc3VsdAogICAgIC8vIGluIGNhbGxiYWNrcyBiYWNrIHRvIHRoaXMg
bm9kZS4KLSAgICBOb2RlOjpJbnNlcnRpb25Ob3RpZmljYXRpb25SZXF1ZXN0IGluc2VydE5vdGlm
aWNhdGlvblJlcXVlc3QgPSBIVE1MRWxlbWVudDo6aW5zZXJ0ZWRJbnRvKGluc2VydGlvblBvaW50
KTsKKyAgICBOb2RlOjpJbnNlcnRlZEludG9SZXN1bHQgaW5zZXJ0Tm90aWZpY2F0aW9uUmVxdWVz
dCA9IEhUTUxFbGVtZW50OjppbnNlcnRlZEludG8oaW5zZXJ0aW9uVHlwZSwgcGFyZW50T2ZJbnNl
cnRlZFRyZWUpOwogCi0gICAgaWYgKGluc2VydGlvblBvaW50LmlzQ29ubmVjdGVkKCkgJiYgIW1f
cGFyc2VkVXNlbWFwLmlzTnVsbCgpKQorICAgIGlmIChpbnNlcnRpb25UeXBlLmNvbm5lY3RlZFRv
RG9jdW1lbnQgJiYgIW1fcGFyc2VkVXNlbWFwLmlzTnVsbCgpKQogICAgICAgICBkb2N1bWVudCgp
LmFkZEltYWdlRWxlbWVudEJ5VXNlbWFwKCptX3BhcnNlZFVzZW1hcC5pbXBsKCksICp0aGlzKTsK
IAogICAgIGlmIChpczxIVE1MUGljdHVyZUVsZW1lbnQ+KHBhcmVudE5vZGUoKSkpIHsKQEAgLTMy
NSw3ICszMjUsNyBAQCBOb2RlOjpJbnNlcnRpb25Ob3RpZmljYXRpb25SZXF1ZXN0IEhUTUxJCiAK
ICAgICAvLyBJZiB3ZSBoYXZlIGJlZW4gaW5zZXJ0ZWQgZnJvbSBhIHJlbmRlcmVyLWxlc3MgZG9j
dW1lbnQsCiAgICAgLy8gb3VyIGxvYWRlciBtYXkgaGF2ZSBub3QgZmV0Y2hlZCB0aGUgaW1hZ2Us
IHNvIGRvIGl0IG5vdy4KLSAgICBpZiAoaW5zZXJ0aW9uUG9pbnQuaXNDb25uZWN0ZWQoKSAmJiAh
bV9pbWFnZUxvYWRlci5pbWFnZSgpKQorICAgIGlmIChpbnNlcnRpb25UeXBlLmNvbm5lY3RlZFRv
RG9jdW1lbnQgJiYgIW1faW1hZ2VMb2FkZXIuaW1hZ2UoKSkKICAgICAgICAgbV9pbWFnZUxvYWRl
ci51cGRhdGVGcm9tRWxlbWVudCgpOwogCiAgICAgcmV0dXJuIGluc2VydE5vdGlmaWNhdGlvblJl
cXVlc3Q7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxJbWFnZUVsZW1lbnQuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxJbWFnZUVsZW1lbnQuaAkocmV2aXNp
b24gMjIzNDc1KQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MSW1hZ2VFbGVtZW50LmgJKHdv
cmtpbmcgY29weSkKQEAgLTEyMCw3ICsxMjAsNyBAQCBwcml2YXRlOgogCiAgICAgdm9pZCBhZGRT
dWJyZXNvdXJjZUF0dHJpYnV0ZVVSTHMoTGlzdEhhc2hTZXQ8VVJMPiYpIGNvbnN0IG92ZXJyaWRl
OwogCi0gICAgSW5zZXJ0aW9uTm90aWZpY2F0aW9uUmVxdWVzdCBpbnNlcnRlZEludG8oQ29udGFp
bmVyTm9kZSYpIG92ZXJyaWRlOworICAgIEluc2VydGVkSW50b1Jlc3VsdCBpbnNlcnRlZEludG8o
SW5zZXJ0aW9uVHlwZSwgQ29udGFpbmVyTm9kZSYpIG92ZXJyaWRlOwogICAgIHZvaWQgcmVtb3Zl
ZEZyb20oQ29udGFpbmVyTm9kZSYpIG92ZXJyaWRlOwogCiAgICAgYm9vbCBpc0Zvcm1Bc3NvY2lh
dGVkRWxlbWVudCgpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIGZhbHNlOyB9CkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9odG1sL0hUTUxJbnB1dEVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL2h0bWwvSFRNTElucHV0RWxlbWVudC5jcHAJKHJldmlzaW9uIDIyMzQ3NSkKKysrIFNv
dXJjZS9XZWJDb3JlL2h0bWwvSFRNTElucHV0RWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTE1MDIsMTggKzE1MDIsMTggQEAgdm9pZCBIVE1MSW5wdXRFbGVtZW50OjpkaWRDaGFuZ2VGb3Jt
KCkKICAgICBhZGRUb1JhZGlvQnV0dG9uR3JvdXAoKTsKIH0KIAotTm9kZTo6SW5zZXJ0aW9uTm90
aWZpY2F0aW9uUmVxdWVzdCBIVE1MSW5wdXRFbGVtZW50OjppbnNlcnRlZEludG8oQ29udGFpbmVy
Tm9kZSYgaW5zZXJ0aW9uUG9pbnQpCitOb2RlOjpJbnNlcnRlZEludG9SZXN1bHQgSFRNTElucHV0
RWxlbWVudDo6aW5zZXJ0ZWRJbnRvKEluc2VydGlvblR5cGUgaW5zZXJ0aW9uVHlwZSwgQ29udGFp
bmVyTm9kZSYgcGFyZW50T2ZJbnNlcnRlZFRyZWUpCiB7Ci0gICAgSFRNTFRleHRGb3JtQ29udHJv
bEVsZW1lbnQ6Omluc2VydGVkSW50byhpbnNlcnRpb25Qb2ludCk7CisgICAgSFRNTFRleHRGb3Jt
Q29udHJvbEVsZW1lbnQ6Omluc2VydGVkSW50byhpbnNlcnRpb25UeXBlLCBwYXJlbnRPZkluc2Vy
dGVkVHJlZSk7CiAjaWYgRU5BQkxFKERBVEFMSVNUX0VMRU1FTlQpCiAgICAgcmVzZXRMaXN0QXR0
cmlidXRlVGFyZ2V0T2JzZXJ2ZXIoKTsKICNlbmRpZgotICAgIHJldHVybiBJbnNlcnRpb25TaG91
bGRDYWxsRmluaXNoZWRJbnNlcnRpbmdTdWJ0cmVlOworICAgIHJldHVybiBJbnNlcnRlZEludG9S
ZXN1bHQ6Ok5lZWRzUG9zdEluc2VydGlvbkNhbGxiYWNrOwogfQogCi12b2lkIEhUTUxJbnB1dEVs
ZW1lbnQ6OmZpbmlzaGVkSW5zZXJ0aW5nU3VidHJlZSgpCit2b2lkIEhUTUxJbnB1dEVsZW1lbnQ6
OmRpZEZpbmlzaEluc2VydGluZ05vZGUoKQogewotICAgIEhUTUxUZXh0Rm9ybUNvbnRyb2xFbGVt
ZW50OjpmaW5pc2hlZEluc2VydGluZ1N1YnRyZWUoKTsKKyAgICBIVE1MVGV4dEZvcm1Db250cm9s
RWxlbWVudDo6ZGlkRmluaXNoSW5zZXJ0aW5nTm9kZSgpOwogICAgIGlmIChpc0Nvbm5lY3RlZCgp
ICYmICFmb3JtKCkpCiAgICAgICAgIGFkZFRvUmFkaW9CdXR0b25Hcm91cCgpOwogfQpJbmRleDog
U291cmNlL1dlYkNvcmUvaHRtbC9IVE1MSW5wdXRFbGVtZW50LmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvaHRtbC9IVE1MSW5wdXRFbGVtZW50LmgJKHJldmlzaW9uIDIyMzQ3NSkKKysr
IFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTElucHV0RWxlbWVudC5oCSh3b3JraW5nIGNvcHkpCkBA
IC0zNTAsOCArMzUwLDggQEAgcHJpdmF0ZToKIAogICAgIHZvaWQgd2lsbENoYW5nZUZvcm0oKSBm
aW5hbDsKICAgICB2b2lkIGRpZENoYW5nZUZvcm0oKSBmaW5hbDsKLSAgICBJbnNlcnRpb25Ob3Rp
ZmljYXRpb25SZXF1ZXN0IGluc2VydGVkSW50byhDb250YWluZXJOb2RlJikgZmluYWw7Ci0gICAg
dm9pZCBmaW5pc2hlZEluc2VydGluZ1N1YnRyZWUoKSBmaW5hbDsKKyAgICBJbnNlcnRlZEludG9S
ZXN1bHQgaW5zZXJ0ZWRJbnRvKEluc2VydGlvblR5cGUsIENvbnRhaW5lck5vZGUmKSBmaW5hbDsK
KyAgICB2b2lkIGRpZEZpbmlzaEluc2VydGluZ05vZGUoKSBmaW5hbDsKICAgICB2b2lkIHJlbW92
ZWRGcm9tKENvbnRhaW5lck5vZGUmKSBmaW5hbDsKICAgICB2b2lkIGRpZE1vdmVUb05ld0RvY3Vt
ZW50KERvY3VtZW50JiBvbGREb2N1bWVudCwgRG9jdW1lbnQmIG5ld0RvY3VtZW50KSBmaW5hbDsK
IApJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MTGlua0VsZW1lbnQuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTExpbmtFbGVtZW50LmNwcAkocmV2aXNpb24g
MjIzNDc1KQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MTGlua0VsZW1lbnQuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0zNDAsMjAgKzM0MCwxOSBAQCB2b2lkIEhUTUxMaW5rRWxlbWVudDo6Y2xl
YXJTaGVldCgpCiAgICAgbV9zaGVldCA9IG51bGxwdHI7CiB9CiAKLU5vZGU6Okluc2VydGlvbk5v
dGlmaWNhdGlvblJlcXVlc3QgSFRNTExpbmtFbGVtZW50OjppbnNlcnRlZEludG8oQ29udGFpbmVy
Tm9kZSYgaW5zZXJ0aW9uUG9pbnQpCitOb2RlOjpJbnNlcnRlZEludG9SZXN1bHQgSFRNTExpbmtF
bGVtZW50OjppbnNlcnRlZEludG8oSW5zZXJ0aW9uVHlwZSBpbnNlcnRpb25UeXBlLCBDb250YWlu
ZXJOb2RlJiBwYXJlbnRPZkluc2VydGVkVHJlZSkKIHsKLSAgICBib29sIHdhc0luRG9jdW1lbnQg
PSBpc0Nvbm5lY3RlZCgpOwotICAgIEhUTUxFbGVtZW50OjppbnNlcnRlZEludG8oaW5zZXJ0aW9u
UG9pbnQpOwotICAgIGlmICghaW5zZXJ0aW9uUG9pbnQuaXNDb25uZWN0ZWQoKSB8fCB3YXNJbkRv
Y3VtZW50KQotICAgICAgICByZXR1cm4gSW5zZXJ0aW9uRG9uZTsKKyAgICBIVE1MRWxlbWVudDo6
aW5zZXJ0ZWRJbnRvKGluc2VydGlvblR5cGUsIHBhcmVudE9mSW5zZXJ0ZWRUcmVlKTsKKyAgICBp
ZiAoIWluc2VydGlvblR5cGUuY29ubmVjdGVkVG9Eb2N1bWVudCkKKyAgICAgICAgcmV0dXJuIElu
c2VydGVkSW50b1Jlc3VsdDo6RG9uZTsKIAogICAgIG1fc3R5bGVTY29wZSA9ICZTdHlsZTo6U2Nv
cGU6OmZvck5vZGUoKnRoaXMpOwogICAgIG1fc3R5bGVTY29wZS0+YWRkU3R5bGVTaGVldENhbmRp
ZGF0ZU5vZGUoKnRoaXMsIG1fY3JlYXRlZEJ5UGFyc2VyKTsKIAotICAgIHJldHVybiBJbnNlcnRp
b25TaG91bGRDYWxsRmluaXNoZWRJbnNlcnRpbmdTdWJ0cmVlOworICAgIHJldHVybiBJbnNlcnRl
ZEludG9SZXN1bHQ6Ok5lZWRzUG9zdEluc2VydGlvbkNhbGxiYWNrOwogfQogCi12b2lkIEhUTUxM
aW5rRWxlbWVudDo6ZmluaXNoZWRJbnNlcnRpbmdTdWJ0cmVlKCkKK3ZvaWQgSFRNTExpbmtFbGVt
ZW50OjpkaWRGaW5pc2hJbnNlcnRpbmdOb2RlKCkKIHsKICAgICBwcm9jZXNzKCk7CiB9CkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxMaW5rRWxlbWVudC5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL2h0bWwvSFRNTExpbmtFbGVtZW50LmgJKHJldmlzaW9uIDIyMzQ3NSkKKysr
IFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTExpbmtFbGVtZW50LmgJKHdvcmtpbmcgY29weSkKQEAg
LTgxLDggKzgxLDggQEAgcHJpdmF0ZToKICAgICBzdGF0aWMgdm9pZCBwcm9jZXNzQ2FsbGJhY2so
Tm9kZSopOwogICAgIHZvaWQgY2xlYXJTaGVldCgpOwogCi0gICAgSW5zZXJ0aW9uTm90aWZpY2F0
aW9uUmVxdWVzdCBpbnNlcnRlZEludG8oQ29udGFpbmVyTm9kZSYpIGZpbmFsOwotICAgIHZvaWQg
ZmluaXNoZWRJbnNlcnRpbmdTdWJ0cmVlKCkgZmluYWw7CisgICAgSW5zZXJ0ZWRJbnRvUmVzdWx0
IGluc2VydGVkSW50byhJbnNlcnRpb25UeXBlLCBDb250YWluZXJOb2RlJikgZmluYWw7CisgICAg
dm9pZCBkaWRGaW5pc2hJbnNlcnRpbmdOb2RlKCkgZmluYWw7CiAgICAgdm9pZCByZW1vdmVkRnJv
bShDb250YWluZXJOb2RlJikgZmluYWw7CiAKICAgICB2b2lkIGluaXRpYWxpemVTdHlsZVNoZWV0
KFJlZjxTdHlsZVNoZWV0Q29udGVudHM+JiYsIGNvbnN0IENhY2hlZENTU1N0eWxlU2hlZXQmKTsK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTE1hcEVsZW1lbnQuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTE1hcEVsZW1lbnQuY3BwCShyZXZpc2lvbiAyMjM0
NzUpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxNYXBFbGVtZW50LmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMTE0LDEwICsxMTQsMTAgQEAgUmVmPEhUTUxDb2xsZWN0aW9uPiBIVE1MTWFwRWxl
bWVudDo6YXJlYQogICAgIHJldHVybiBlbnN1cmVSYXJlRGF0YSgpLmVuc3VyZU5vZGVMaXN0cygp
LmFkZENhY2hlZENvbGxlY3Rpb248R2VuZXJpY0NhY2hlZEhUTUxDb2xsZWN0aW9uPENvbGxlY3Rp
b25UeXBlVHJhaXRzPE1hcEFyZWFzPjo6dHJhdmVyc2FsVHlwZT4+KCp0aGlzLCBNYXBBcmVhcyk7
CiB9CiAKLU5vZGU6Okluc2VydGlvbk5vdGlmaWNhdGlvblJlcXVlc3QgSFRNTE1hcEVsZW1lbnQ6
Omluc2VydGVkSW50byhDb250YWluZXJOb2RlJiBpbnNlcnRpb25Qb2ludCkKK05vZGU6Okluc2Vy
dGVkSW50b1Jlc3VsdCBIVE1MTWFwRWxlbWVudDo6aW5zZXJ0ZWRJbnRvKEluc2VydGlvblR5cGUg
aW5zZXJ0aW9uVHlwZSwgQ29udGFpbmVyTm9kZSYgcGFyZW50T2ZJbnNlcnRlZFRyZWUpCiB7Ci0g
ICAgTm9kZTo6SW5zZXJ0aW9uTm90aWZpY2F0aW9uUmVxdWVzdCByZXF1ZXN0ID0gSFRNTEVsZW1l
bnQ6Omluc2VydGVkSW50byhpbnNlcnRpb25Qb2ludCk7Ci0gICAgaWYgKGluc2VydGlvblBvaW50
LmlzQ29ubmVjdGVkKCkpCisgICAgTm9kZTo6SW5zZXJ0ZWRJbnRvUmVzdWx0IHJlcXVlc3QgPSBI
VE1MRWxlbWVudDo6aW5zZXJ0ZWRJbnRvKGluc2VydGlvblR5cGUsIHBhcmVudE9mSW5zZXJ0ZWRU
cmVlKTsKKyAgICBpZiAoaW5zZXJ0aW9uVHlwZS5jb25uZWN0ZWRUb0RvY3VtZW50KQogICAgICAg
ICB0cmVlU2NvcGUoKS5hZGRJbWFnZU1hcCgqdGhpcyk7CiAgICAgcmV0dXJuIHJlcXVlc3Q7CiB9
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxNYXBFbGVtZW50LmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MTWFwRWxlbWVudC5oCShyZXZpc2lvbiAyMjM0NzUp
CisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxNYXBFbGVtZW50LmgJKHdvcmtpbmcgY29weSkK
QEAgLTQ3LDcgKzQ3LDcgQEAgcHJpdmF0ZToKIAogICAgIHZvaWQgcGFyc2VBdHRyaWJ1dGUoY29u
c3QgUXVhbGlmaWVkTmFtZSYsIGNvbnN0IEF0b21pY1N0cmluZyYpIGZpbmFsOwogCi0gICAgSW5z
ZXJ0aW9uTm90aWZpY2F0aW9uUmVxdWVzdCBpbnNlcnRlZEludG8oQ29udGFpbmVyTm9kZSYpIGZp
bmFsOworICAgIEluc2VydGVkSW50b1Jlc3VsdCBpbnNlcnRlZEludG8oSW5zZXJ0aW9uVHlwZSwg
Q29udGFpbmVyTm9kZSYpIGZpbmFsOwogICAgIHZvaWQgcmVtb3ZlZEZyb20oQ29udGFpbmVyTm9k
ZSYpIGZpbmFsOwogCiAgICAgQXRvbWljU3RyaW5nIG1fbmFtZTsKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL2h0bWwvSFRNTE1lZGlhRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvaHRtbC9IVE1MTWVkaWFFbGVtZW50LmNwcAkocmV2aXNpb24gMjIzNDc1KQorKysgU291cmNl
L1dlYkNvcmUvaHRtbC9IVE1MTWVkaWFFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtODcx
LDEyICs4NzEsMTIgQEAgYm9vbCBIVE1MTWVkaWFFbGVtZW50OjpjaGlsZFNob3VsZENyZWF0ZQog
I2VuZGlmCiB9CiAKLU5vZGU6Okluc2VydGlvbk5vdGlmaWNhdGlvblJlcXVlc3QgSFRNTE1lZGlh
RWxlbWVudDo6aW5zZXJ0ZWRJbnRvKENvbnRhaW5lck5vZGUmIGluc2VydGlvblBvaW50KQorTm9k
ZTo6SW5zZXJ0ZWRJbnRvUmVzdWx0IEhUTUxNZWRpYUVsZW1lbnQ6Omluc2VydGVkSW50byhJbnNl
cnRpb25UeXBlIGluc2VydGlvblR5cGUsIENvbnRhaW5lck5vZGUmIHBhcmVudE9mSW5zZXJ0ZWRU
cmVlKQogewogICAgIElORk9fTE9HKExPR0lERU5USUZJRVIpOwogCi0gICAgSFRNTEVsZW1lbnQ6
Omluc2VydGVkSW50byhpbnNlcnRpb25Qb2ludCk7Ci0gICAgaWYgKGluc2VydGlvblBvaW50Lmlz
Q29ubmVjdGVkKCkpIHsKKyAgICBIVE1MRWxlbWVudDo6aW5zZXJ0ZWRJbnRvKGluc2VydGlvblR5
cGUsIHBhcmVudE9mSW5zZXJ0ZWRUcmVlKTsKKyAgICBpZiAoaW5zZXJ0aW9uVHlwZS5jb25uZWN0
ZWRUb0RvY3VtZW50KSB7CiAgICAgICAgIG1faW5BY3RpdmVEb2N1bWVudCA9IHRydWU7CiAKICNp
ZiBQTEFURk9STShJT1MpCkBAIC04OTMsMTAgKzg5MywxMCBAQCBOb2RlOjpJbnNlcnRpb25Ob3Rp
ZmljYXRpb25SZXF1ZXN0IEhUTUxNCiAgICAgICAgIG1fbWVkaWFTZXNzaW9uLT5jYW5Qcm9kdWNl
QXVkaW9DaGFuZ2VkKCk7CiAgICAgfQogCi0gICAgcmV0dXJuIEluc2VydGlvblNob3VsZENhbGxG
aW5pc2hlZEluc2VydGluZ1N1YnRyZWU7CisgICAgcmV0dXJuIEluc2VydGVkSW50b1Jlc3VsdDo6
TmVlZHNQb3N0SW5zZXJ0aW9uQ2FsbGJhY2s7CiB9CiAKLXZvaWQgSFRNTE1lZGlhRWxlbWVudDo6
ZmluaXNoZWRJbnNlcnRpbmdTdWJ0cmVlKCkKK3ZvaWQgSFRNTE1lZGlhRWxlbWVudDo6ZGlkRmlu
aXNoSW5zZXJ0aW5nTm9kZSgpCiB7CiAgICAgY29uZmlndXJlTWVkaWFDb250cm9scygpOwogfQpJ
bmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MTWVkaWFFbGVtZW50LmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MTWVkaWFFbGVtZW50LmgJKHJldmlzaW9uIDIyMzQ3
NSkKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTE1lZGlhRWxlbWVudC5oCSh3b3JraW5nIGNv
cHkpCkBAIC01ODgsOCArNTg4LDggQEAgcHJpdmF0ZToKICAgICBib29sIGlzTW91c2VGb2N1c2Fi
bGUoKSBjb25zdCBvdmVycmlkZTsKICAgICBib29sIHJlbmRlcmVySXNOZWVkZWQoY29uc3QgUmVu
ZGVyU3R5bGUmKSBvdmVycmlkZTsKICAgICBib29sIGNoaWxkU2hvdWxkQ3JlYXRlUmVuZGVyZXIo
Y29uc3QgTm9kZSYpIGNvbnN0IG92ZXJyaWRlOwotICAgIEluc2VydGlvbk5vdGlmaWNhdGlvblJl
cXVlc3QgaW5zZXJ0ZWRJbnRvKENvbnRhaW5lck5vZGUmKSBvdmVycmlkZTsKLSAgICB2b2lkIGZp
bmlzaGVkSW5zZXJ0aW5nU3VidHJlZSgpIG92ZXJyaWRlOworICAgIEluc2VydGVkSW50b1Jlc3Vs
dCBpbnNlcnRlZEludG8oSW5zZXJ0aW9uVHlwZSwgQ29udGFpbmVyTm9kZSYpIG92ZXJyaWRlOwor
ICAgIHZvaWQgZGlkRmluaXNoSW5zZXJ0aW5nTm9kZSgpIG92ZXJyaWRlOwogICAgIHZvaWQgcmVt
b3ZlZEZyb20oQ29udGFpbmVyTm9kZSYpIG92ZXJyaWRlOwogICAgIHZvaWQgZGlkUmVjYWxjU3R5
bGUoU3R5bGU6OkNoYW5nZSkgb3ZlcnJpZGU7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwv
SFRNTE1ldGFFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL0hU
TUxNZXRhRWxlbWVudC5jcHAJKHJldmlzaW9uIDIyMzQ3NSkKKysrIFNvdXJjZS9XZWJDb3JlL2h0
bWwvSFRNTE1ldGFFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjAsMTIgKzYwLDEyIEBA
IHZvaWQgSFRNTE1ldGFFbGVtZW50OjpwYXJzZUF0dHJpYnV0ZShjb24KICAgICAgICAgSFRNTEVs
ZW1lbnQ6OnBhcnNlQXR0cmlidXRlKG5hbWUsIHZhbHVlKTsKIH0KIAotTm9kZTo6SW5zZXJ0aW9u
Tm90aWZpY2F0aW9uUmVxdWVzdCBIVE1MTWV0YUVsZW1lbnQ6Omluc2VydGVkSW50byhDb250YWlu
ZXJOb2RlJiBpbnNlcnRpb25Qb2ludCkKK05vZGU6Okluc2VydGVkSW50b1Jlc3VsdCBIVE1MTWV0
YUVsZW1lbnQ6Omluc2VydGVkSW50byhJbnNlcnRpb25UeXBlIGluc2VydGlvblR5cGUsIENvbnRh
aW5lck5vZGUmIHBhcmVudE9mSW5zZXJ0ZWRUcmVlKQogewotICAgIEhUTUxFbGVtZW50OjppbnNl
cnRlZEludG8oaW5zZXJ0aW9uUG9pbnQpOwotICAgIGlmIChpbnNlcnRpb25Qb2ludC5pc0Nvbm5l
Y3RlZCgpKQorICAgIEhUTUxFbGVtZW50OjppbnNlcnRlZEludG8oaW5zZXJ0aW9uVHlwZSwgcGFy
ZW50T2ZJbnNlcnRlZFRyZWUpOworICAgIGlmIChpbnNlcnRpb25UeXBlLmNvbm5lY3RlZFRvRG9j
dW1lbnQpCiAgICAgICAgIHByb2Nlc3MoKTsKLSAgICByZXR1cm4gSW5zZXJ0aW9uRG9uZTsKKyAg
ICByZXR1cm4gSW5zZXJ0ZWRJbnRvUmVzdWx0OjpEb25lOwogfQogCiB2b2lkIEhUTUxNZXRhRWxl
bWVudDo6cHJvY2VzcygpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxNZXRhRWxlbWVu
dC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTE1ldGFFbGVtZW50LmgJ
KHJldmlzaW9uIDIyMzQ3NSkKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTE1ldGFFbGVtZW50
LmgJKHdvcmtpbmcgY29weSkKQEAgLTM5LDcgKzM5LDcgQEAgcHJpdmF0ZToKICAgICBIVE1MTWV0
YUVsZW1lbnQoY29uc3QgUXVhbGlmaWVkTmFtZSYsIERvY3VtZW50Jik7CiAKICAgICB2b2lkIHBh
cnNlQXR0cmlidXRlKGNvbnN0IFF1YWxpZmllZE5hbWUmLCBjb25zdCBBdG9taWNTdHJpbmcmKSBm
aW5hbDsKLSAgICBJbnNlcnRpb25Ob3RpZmljYXRpb25SZXF1ZXN0IGluc2VydGVkSW50byhDb250
YWluZXJOb2RlJikgZmluYWw7CisgICAgSW5zZXJ0ZWRJbnRvUmVzdWx0IGluc2VydGVkSW50byhJ
bnNlcnRpb25UeXBlLCBDb250YWluZXJOb2RlJikgZmluYWw7CiAKICAgICB2b2lkIHByb2Nlc3Mo
KTsKIH07CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxPYmplY3RFbGVtZW50LmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxPYmplY3RFbGVtZW50LmNwcAko
cmV2aXNpb24gMjIzNDc1KQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MT2JqZWN0RWxlbWVu
dC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMxMywxNCArMzEzLDE0IEBAIHZvaWQgSFRNTE9iamVj
dEVsZW1lbnQ6OnVwZGF0ZVdpZGdldChDcmUKICAgICAgICAgcmVuZGVyRmFsbGJhY2tDb250ZW50
KCk7CiB9CiAKLU5vZGU6Okluc2VydGlvbk5vdGlmaWNhdGlvblJlcXVlc3QgSFRNTE9iamVjdEVs
ZW1lbnQ6Omluc2VydGVkSW50byhDb250YWluZXJOb2RlJiBpbnNlcnRpb25Qb2ludCkKK05vZGU6
Okluc2VydGVkSW50b1Jlc3VsdCBIVE1MT2JqZWN0RWxlbWVudDo6aW5zZXJ0ZWRJbnRvKEluc2Vy
dGlvblR5cGUgaW5zZXJ0aW9uVHlwZSwgQ29udGFpbmVyTm9kZSYgcGFyZW50T2ZJbnNlcnRlZFRy
ZWUpCiB7Ci0gICAgSFRNTFBsdWdJbkltYWdlRWxlbWVudDo6aW5zZXJ0ZWRJbnRvKGluc2VydGlv
blBvaW50KTsKLSAgICBGb3JtQXNzb2NpYXRlZEVsZW1lbnQ6Omluc2VydGVkSW50byhpbnNlcnRp
b25Qb2ludCk7Ci0gICAgcmV0dXJuIEluc2VydGlvblNob3VsZENhbGxGaW5pc2hlZEluc2VydGlu
Z1N1YnRyZWU7CisgICAgSFRNTFBsdWdJbkltYWdlRWxlbWVudDo6aW5zZXJ0ZWRJbnRvKGluc2Vy
dGlvblR5cGUsIHBhcmVudE9mSW5zZXJ0ZWRUcmVlKTsKKyAgICBGb3JtQXNzb2NpYXRlZEVsZW1l
bnQ6Omluc2VydGVkSW50byhpbnNlcnRpb25UeXBlLCBwYXJlbnRPZkluc2VydGVkVHJlZSk7Cisg
ICAgcmV0dXJuIEluc2VydGVkSW50b1Jlc3VsdDo6TmVlZHNQb3N0SW5zZXJ0aW9uQ2FsbGJhY2s7
CiB9CiAKLXZvaWQgSFRNTE9iamVjdEVsZW1lbnQ6OmZpbmlzaGVkSW5zZXJ0aW5nU3VidHJlZSgp
Cit2b2lkIEhUTUxPYmplY3RFbGVtZW50OjpkaWRGaW5pc2hJbnNlcnRpbmdOb2RlKCkKIHsKICAg
ICByZXNldEZvcm1Pd25lcigpOwogfQpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MT2Jq
ZWN0RWxlbWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTE9iamVj
dEVsZW1lbnQuaAkocmV2aXNpb24gMjIzNDc1KQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9IVE1M
T2JqZWN0RWxlbWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC02Miw4ICs2Miw4IEBAIHByaXZhdGU6
CiAgICAgYm9vbCBpc1ByZXNlbnRhdGlvbkF0dHJpYnV0ZShjb25zdCBRdWFsaWZpZWROYW1lJikg
Y29uc3QgZmluYWw7CiAgICAgdm9pZCBjb2xsZWN0U3R5bGVGb3JQcmVzZW50YXRpb25BdHRyaWJ1
dGUoY29uc3QgUXVhbGlmaWVkTmFtZSYsIGNvbnN0IEF0b21pY1N0cmluZyYsIE11dGFibGVTdHls
ZVByb3BlcnRpZXMmKSBmaW5hbDsKIAotICAgIEluc2VydGlvbk5vdGlmaWNhdGlvblJlcXVlc3Qg
aW5zZXJ0ZWRJbnRvKENvbnRhaW5lck5vZGUmKSBmaW5hbDsKLSAgICB2b2lkIGZpbmlzaGVkSW5z
ZXJ0aW5nU3VidHJlZSgpIGZpbmFsOworICAgIEluc2VydGVkSW50b1Jlc3VsdCBpbnNlcnRlZElu
dG8oSW5zZXJ0aW9uVHlwZSwgQ29udGFpbmVyTm9kZSYpIGZpbmFsOworICAgIHZvaWQgZGlkRmlu
aXNoSW5zZXJ0aW5nTm9kZSgpIGZpbmFsOwogICAgIHZvaWQgcmVtb3ZlZEZyb20oQ29udGFpbmVy
Tm9kZSYpIGZpbmFsOwogCiAgICAgdm9pZCBkaWRNb3ZlVG9OZXdEb2N1bWVudChEb2N1bWVudCYg
b2xkRG9jdW1lbnQsIERvY3VtZW50JiBuZXdEb2N1bWVudCkgZmluYWw7CkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9odG1sL0hUTUxPcHRpb25FbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9odG1sL0hUTUxPcHRpb25FbGVtZW50LmNwcAkocmV2aXNpb24gMjIzNDc1KQorKysg
U291cmNlL1dlYkNvcmUvaHRtbC9IVE1MT3B0aW9uRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTMxNyw3ICszMTcsNyBAQCBib29sIEhUTUxPcHRpb25FbGVtZW50Ojppc0Rpc2FibGVkRm9y
bUNvCiAgICAgcmV0dXJuIGRvd25jYXN0PEhUTUxPcHRHcm91cEVsZW1lbnQ+KCpwYXJlbnROb2Rl
KCkpLmlzRGlzYWJsZWRGb3JtQ29udHJvbCgpOwogfQogCi1Ob2RlOjpJbnNlcnRpb25Ob3RpZmlj
YXRpb25SZXF1ZXN0IEhUTUxPcHRpb25FbGVtZW50OjppbnNlcnRlZEludG8oQ29udGFpbmVyTm9k
ZSYgaW5zZXJ0aW9uUG9pbnQpCitOb2RlOjpJbnNlcnRlZEludG9SZXN1bHQgSFRNTE9wdGlvbkVs
ZW1lbnQ6Omluc2VydGVkSW50byhJbnNlcnRpb25UeXBlIGluc2VydGlvblR5cGUsIENvbnRhaW5l
ck5vZGUmIHBhcmVudE9mSW5zZXJ0ZWRUcmVlKQogewogICAgIGlmIChIVE1MU2VsZWN0RWxlbWVu
dCogc2VsZWN0ID0gb3duZXJTZWxlY3RFbGVtZW50KCkpIHsKICAgICAgICAgc2VsZWN0LT5zZXRS
ZWNhbGNMaXN0SXRlbXMoKTsKQEAgLTMzMSw3ICszMzEsNyBAQCBOb2RlOjpJbnNlcnRpb25Ob3Rp
ZmljYXRpb25SZXF1ZXN0IEhUTUxPCiAgICAgICAgIHNlbGVjdC0+c2Nyb2xsVG9TZWxlY3Rpb24o
KTsKICAgICB9CiAKLSAgICByZXR1cm4gSFRNTEVsZW1lbnQ6Omluc2VydGVkSW50byhpbnNlcnRp
b25Qb2ludCk7CisgICAgcmV0dXJuIEhUTUxFbGVtZW50OjppbnNlcnRlZEludG8oaW5zZXJ0aW9u
VHlwZSwgcGFyZW50T2ZJbnNlcnRlZFRyZWUpOwogfQogCiBTdHJpbmcgSFRNTE9wdGlvbkVsZW1l
bnQ6OmNvbGxlY3RPcHRpb25Jbm5lclRleHQoKSBjb25zdApJbmRleDogU291cmNlL1dlYkNvcmUv
aHRtbC9IVE1MT3B0aW9uRWxlbWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0
bWwvSFRNTE9wdGlvbkVsZW1lbnQuaAkocmV2aXNpb24gMjIzNDc1KQorKysgU291cmNlL1dlYkNv
cmUvaHRtbC9IVE1MT3B0aW9uRWxlbWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC03NCw3ICs3NCw3
IEBAIHByaXZhdGU6CiAKICAgICB2b2lkIHBhcnNlQXR0cmlidXRlKGNvbnN0IFF1YWxpZmllZE5h
bWUmLCBjb25zdCBBdG9taWNTdHJpbmcmKSBmaW5hbDsKIAotICAgIEluc2VydGlvbk5vdGlmaWNh
dGlvblJlcXVlc3QgaW5zZXJ0ZWRJbnRvKENvbnRhaW5lck5vZGUmKSBmaW5hbDsKKyAgICBJbnNl
cnRlZEludG9SZXN1bHQgaW5zZXJ0ZWRJbnRvKEluc2VydGlvblR5cGUsIENvbnRhaW5lck5vZGUm
KSBmaW5hbDsKICAgICB2b2lkIGFjY2Vzc0tleUFjdGlvbihib29sKSBmaW5hbDsKIAogICAgIHZv
aWQgY2hpbGRyZW5DaGFuZ2VkKGNvbnN0IENoaWxkQ2hhbmdlJikgZmluYWw7CkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9odG1sL0hUTUxTY3JpcHRFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9odG1sL0hUTUxTY3JpcHRFbGVtZW50LmNwcAkocmV2aXNpb24gMjIzNDc1KQor
KysgU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MU2NyaXB0RWxlbWVudC5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTY4LDE1ICs2OCwxNSBAQCB2b2lkIEhUTUxTY3JpcHRFbGVtZW50OjpwYXJzZUF0dHJp
YnV0ZShjCiAgICAgICAgIEhUTUxFbGVtZW50OjpwYXJzZUF0dHJpYnV0ZShuYW1lLCB2YWx1ZSk7
CiB9CiAKLU5vZGU6Okluc2VydGlvbk5vdGlmaWNhdGlvblJlcXVlc3QgSFRNTFNjcmlwdEVsZW1l
bnQ6Omluc2VydGVkSW50byhDb250YWluZXJOb2RlJiBpbnNlcnRpb25Qb2ludCkKK05vZGU6Oklu
c2VydGVkSW50b1Jlc3VsdCBIVE1MU2NyaXB0RWxlbWVudDo6aW5zZXJ0ZWRJbnRvKEluc2VydGlv
blR5cGUgaW5zZXJ0aW9uVHlwZSwgQ29udGFpbmVyTm9kZSYgcGFyZW50T2ZJbnNlcnRlZFRyZWUp
CiB7Ci0gICAgSFRNTEVsZW1lbnQ6Omluc2VydGVkSW50byhpbnNlcnRpb25Qb2ludCk7Ci0gICAg
cmV0dXJuIHNob3VsZENhbGxGaW5pc2hlZEluc2VydGluZ1N1YnRyZWUoaW5zZXJ0aW9uUG9pbnQp
ID8gSW5zZXJ0aW9uU2hvdWxkQ2FsbEZpbmlzaGVkSW5zZXJ0aW5nU3VidHJlZSA6IEluc2VydGlv
bkRvbmU7CisgICAgSFRNTEVsZW1lbnQ6Omluc2VydGVkSW50byhpbnNlcnRpb25UeXBlLCBwYXJl
bnRPZkluc2VydGVkVHJlZSk7CisgICAgcmV0dXJuIFNjcmlwdEVsZW1lbnQ6Omluc2VydGVkSW50
byhpbnNlcnRpb25UeXBlLCBwYXJlbnRPZkluc2VydGVkVHJlZSk7CiB9CiAKLXZvaWQgSFRNTFNj
cmlwdEVsZW1lbnQ6OmZpbmlzaGVkSW5zZXJ0aW5nU3VidHJlZSgpCit2b2lkIEhUTUxTY3JpcHRF
bGVtZW50OjpkaWRGaW5pc2hJbnNlcnRpbmdOb2RlKCkKIHsKLSAgICBTY3JpcHRFbGVtZW50Ojpm
aW5pc2hlZEluc2VydGluZ1N1YnRyZWUoKTsKKyAgICBTY3JpcHRFbGVtZW50OjpkaWRGaW5pc2hJ
bnNlcnRpbmdOb2RlKCk7CiB9CiAKIC8vIGh0dHBzOi8vaHRtbC5zcGVjLndoYXR3Zy5vcmcvbXVs
dGlwYWdlL3NjcmlwdGluZy5odG1sI2RvbS1zY3JpcHQtdGV4dApJbmRleDogU291cmNlL1dlYkNv
cmUvaHRtbC9IVE1MU2NyaXB0RWxlbWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L2h0bWwvSFRNTFNjcmlwdEVsZW1lbnQuaAkocmV2aXNpb24gMjIzNDc1KQorKysgU291cmNlL1dl
YkNvcmUvaHRtbC9IVE1MU2NyaXB0RWxlbWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC01MCw4ICs1
MCw4IEBAIHByaXZhdGU6CiAgICAgSFRNTFNjcmlwdEVsZW1lbnQoY29uc3QgUXVhbGlmaWVkTmFt
ZSYsIERvY3VtZW50JiwgYm9vbCB3YXNJbnNlcnRlZEJ5UGFyc2VyLCBib29sIGFscmVhZHlTdGFy
dGVkKTsKIAogICAgIHZvaWQgcGFyc2VBdHRyaWJ1dGUoY29uc3QgUXVhbGlmaWVkTmFtZSYsIGNv
bnN0IEF0b21pY1N0cmluZyYpIGZpbmFsOwotICAgIEluc2VydGlvbk5vdGlmaWNhdGlvblJlcXVl
c3QgaW5zZXJ0ZWRJbnRvKENvbnRhaW5lck5vZGUmKSBmaW5hbDsKLSAgICB2b2lkIGZpbmlzaGVk
SW5zZXJ0aW5nU3VidHJlZSgpIGZpbmFsOworICAgIEluc2VydGVkSW50b1Jlc3VsdCBpbnNlcnRl
ZEludG8oSW5zZXJ0aW9uVHlwZSwgQ29udGFpbmVyTm9kZSYpIGZpbmFsOworICAgIHZvaWQgZGlk
RmluaXNoSW5zZXJ0aW5nTm9kZSgpIGZpbmFsOwogICAgIHZvaWQgY2hpbGRyZW5DaGFuZ2VkKGNv
bnN0IENoaWxkQ2hhbmdlJikgZmluYWw7CiAKICAgICBib29sIGlzVVJMQXR0cmlidXRlKGNvbnN0
IEF0dHJpYnV0ZSYpIGNvbnN0IGZpbmFsOwpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9IVE1M
U2VsZWN0RWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9IVE1M
U2VsZWN0RWxlbWVudC5jcHAJKHJldmlzaW9uIDIyMzQ3NSkKKysrIFNvdXJjZS9XZWJDb3JlL2h0
bWwvSFRNTFNlbGVjdEVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNTYwLDEzICsxNTYw
LDEzIEBAIHZvaWQgSFRNTFNlbGVjdEVsZW1lbnQ6OnR5cGVBaGVhZEZpbmQoS2UKICAgICAgICAg
bGlzdEJveE9uQ2hhbmdlKCk7CiB9CiAKLU5vZGU6Okluc2VydGlvbk5vdGlmaWNhdGlvblJlcXVl
c3QgSFRNTFNlbGVjdEVsZW1lbnQ6Omluc2VydGVkSW50byhDb250YWluZXJOb2RlJiBpbnNlcnRp
b25Qb2ludCkKK05vZGU6Okluc2VydGVkSW50b1Jlc3VsdCBIVE1MU2VsZWN0RWxlbWVudDo6aW5z
ZXJ0ZWRJbnRvKEluc2VydGlvblR5cGUgaW5zZXJ0aW9uVHlwZSwgQ29udGFpbmVyTm9kZSYgcGFy
ZW50T2ZJbnNlcnRlZFRyZWUpCiB7CiAgICAgLy8gV2hlbiB0aGUgZWxlbWVudCBpcyBjcmVhdGVk
IGR1cmluZyBkb2N1bWVudCBwYXJzaW5nLCBpdCB3b24ndCBoYXZlIGFueQogICAgIC8vIGl0ZW1z
IHlldCAtIGJ1dCBmb3IgaW5uZXJIVE1MIGFuZCByZWxhdGVkIG1ldGhvZHMsIHRoaXMgbWV0aG9k
IGlzIGNhbGxlZAogICAgIC8vIGFmdGVyIHRoZSB3aG9sZSBzdWJ0cmVlIGlzIGNvbnN0cnVjdGVk
LgogICAgIHJlY2FsY0xpc3RJdGVtcygpOwotICAgIHJldHVybiBIVE1MRm9ybUNvbnRyb2xFbGVt
ZW50V2l0aFN0YXRlOjppbnNlcnRlZEludG8oaW5zZXJ0aW9uUG9pbnQpOworICAgIHJldHVybiBI
VE1MRm9ybUNvbnRyb2xFbGVtZW50V2l0aFN0YXRlOjppbnNlcnRlZEludG8oaW5zZXJ0aW9uVHlw
ZSwgcGFyZW50T2ZJbnNlcnRlZFRyZWUpOwogfQogCiB2b2lkIEhUTUxTZWxlY3RFbGVtZW50Ojph
Y2Nlc3NLZXlTZXRTZWxlY3RlZEluZGV4KGludCBpbmRleCkKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L2h0bWwvSFRNTFNlbGVjdEVsZW1lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9o
dG1sL0hUTUxTZWxlY3RFbGVtZW50LmgJKHJldmlzaW9uIDIyMzQ3NSkKKysrIFNvdXJjZS9XZWJD
b3JlL2h0bWwvSFRNTFNlbGVjdEVsZW1lbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMTQ3LDcgKzE0
Nyw3IEBAIHByaXZhdGU6CiAgICAgdm9pZCB0eXBlQWhlYWRGaW5kKEtleWJvYXJkRXZlbnQmKTsK
ICAgICB2b2lkIHNhdmVMYXN0U2VsZWN0aW9uKCk7CiAKLSAgICBJbnNlcnRpb25Ob3RpZmljYXRp
b25SZXF1ZXN0IGluc2VydGVkSW50byhDb250YWluZXJOb2RlJikgZmluYWw7CisgICAgSW5zZXJ0
ZWRJbnRvUmVzdWx0IGluc2VydGVkSW50byhJbnNlcnRpb25UeXBlLCBDb250YWluZXJOb2RlJikg
ZmluYWw7CiAKICAgICBib29sIGlzT3B0aW9uYWxGb3JtQ29udHJvbCgpIGNvbnN0IGZpbmFsIHsg
cmV0dXJuICFpc1JlcXVpcmVkRm9ybUNvbnRyb2woKTsgfQogICAgIGJvb2wgaXNSZXF1aXJlZEZv
cm1Db250cm9sKCkgY29uc3QgZmluYWw7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxT
bG90RWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MU2xv
dEVsZW1lbnQuY3BwCShyZXZpc2lvbiAyMjM0NzUpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL0hU
TUxTbG90RWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ4LDIwICs0OCwxNyBAQCBIVE1M
U2xvdEVsZW1lbnQ6OkhUTUxTbG90RWxlbWVudChjb25zdCBRCiAgICAgQVNTRVJUKGhhc1RhZ05h
bWUoc2xvdFRhZykpOwogfQogCi1IVE1MU2xvdEVsZW1lbnQ6Okluc2VydGlvbk5vdGlmaWNhdGlv
blJlcXVlc3QgSFRNTFNsb3RFbGVtZW50OjppbnNlcnRlZEludG8oQ29udGFpbmVyTm9kZSYgaW5z
ZXJ0aW9uUG9pbnQpCitIVE1MU2xvdEVsZW1lbnQ6Okluc2VydGVkSW50b1Jlc3VsdCBIVE1MU2xv
dEVsZW1lbnQ6Omluc2VydGVkSW50byhJbnNlcnRpb25UeXBlIGluc2VydGlvblR5cGUsIENvbnRh
aW5lck5vZGUmIHBhcmVudE9mSW5zZXJ0ZWRUcmVlKQogewotICAgIGF1dG8gaW5zZXJ0aW9uUmVz
dWx0ID0gSFRNTEVsZW1lbnQ6Omluc2VydGVkSW50byhpbnNlcnRpb25Qb2ludCk7Ci0gICAgQVNT
RVJUX1VOVVNFRChpbnNlcnRpb25SZXN1bHQsIGluc2VydGlvblJlc3VsdCA9PSBJbnNlcnRpb25E
b25lKTsKKyAgICBhdXRvIGluc2VydGlvblJlc3VsdCA9IEhUTUxFbGVtZW50OjppbnNlcnRlZElu
dG8oaW5zZXJ0aW9uVHlwZSwgcGFyZW50T2ZJbnNlcnRlZFRyZWUpOworICAgIEFTU0VSVF9VTlVT
RUQoaW5zZXJ0aW9uUmVzdWx0LCBpbnNlcnRpb25SZXN1bHQgPT0gSW5zZXJ0ZWRJbnRvUmVzdWx0
OjpEb25lKTsKIAotICAgIC8vIFRoaXMgZnVuY3Rpb24gY291bGQgYmUgY2FsbGVkIHdoZW4gdGhp
cyBlbGVtZW50J3Mgc2hhZG93IHJvb3QncyBob3N0IG9yIGl0cyBhbmNlc3RvciBpcyBpbnNlcnRl
ZC4KLSAgICAvLyBUaGlzIGVsZW1lbnQgaXMgbmV3IHRvIHRoZSBzaGFkb3cgdHJlZSAoYW5kIGl0
cyB0cmVlIHNjb3BlKSBvbmx5IGlmIHRoZSBwYXJlbnQgaW50byB3aGljaCB0aGlzIGVsZW1lbnQK
LSAgICAvLyBvciBpdHMgYW5jZXN0b3IgaXMgaW5zZXJ0ZWQgYmVsb25ncyB0byB0aGUgc2FtZSB0
cmVlIHNjb3BlIGFzIHRoaXMgZWxlbWVudCdzLgotICAgIGlmIChpbnNlcnRpb25Qb2ludC5pc0lu
U2hhZG93VHJlZSgpICYmIGlzSW5TaGFkb3dUcmVlKCkgJiYgJmluc2VydGlvblBvaW50LnRyZWVT
Y29wZSgpID09ICZ0cmVlU2NvcGUoKSkgeworICAgIGlmIChpbnNlcnRpb25UeXBlLnRyZWVTY29w
ZUNoYW5nZWQgJiYgaXNJblNoYWRvd1RyZWUoKSkgewogICAgICAgICBpZiAoYXV0byBzaGFkb3dS
b290ID0gY29udGFpbmluZ1NoYWRvd1Jvb3QoKSkKICAgICAgICAgICAgIHNoYWRvd1Jvb3QtPmFk
ZFNsb3RFbGVtZW50QnlOYW1lKGF0dHJpYnV0ZVdpdGhvdXRTeW5jaHJvbml6YXRpb24obmFtZUF0
dHIpLCAqdGhpcyk7CiAgICAgfQogCi0gICAgcmV0dXJuIEluc2VydGlvbkRvbmU7CisgICAgcmV0
dXJuIEluc2VydGVkSW50b1Jlc3VsdDo6RG9uZTsKIH0KIAogdm9pZCBIVE1MU2xvdEVsZW1lbnQ6
OnJlbW92ZWRGcm9tKENvbnRhaW5lck5vZGUmIGluc2VydGlvblBvaW50KQpJbmRleDogU291cmNl
L1dlYkNvcmUvaHRtbC9IVE1MU2xvdEVsZW1lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9odG1sL0hUTUxTbG90RWxlbWVudC5oCShyZXZpc2lvbiAyMjM0NzUpCisrKyBTb3VyY2Uv
V2ViQ29yZS9odG1sL0hUTUxTbG90RWxlbWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC00OCw3ICs0
OCw3IEBAIHB1YmxpYzoKIHByaXZhdGU6CiAgICAgSFRNTFNsb3RFbGVtZW50KGNvbnN0IFF1YWxp
ZmllZE5hbWUmLCBEb2N1bWVudCYpOwogCi0gICAgSW5zZXJ0aW9uTm90aWZpY2F0aW9uUmVxdWVz
dCBpbnNlcnRlZEludG8oQ29udGFpbmVyTm9kZSYpIGZpbmFsOworICAgIEluc2VydGVkSW50b1Jl
c3VsdCBpbnNlcnRlZEludG8oSW5zZXJ0aW9uVHlwZSwgQ29udGFpbmVyTm9kZSYpIGZpbmFsOwog
ICAgIHZvaWQgcmVtb3ZlZEZyb20oQ29udGFpbmVyTm9kZSYpIGZpbmFsOwogICAgIHZvaWQgYXR0
cmlidXRlQ2hhbmdlZChjb25zdCBRdWFsaWZpZWROYW1lJiwgY29uc3QgQXRvbWljU3RyaW5nJiBv
bGRWYWx1ZSwgY29uc3QgQXRvbWljU3RyaW5nJiBuZXdWYWx1ZSwgQXR0cmlidXRlTW9kaWZpY2F0
aW9uUmVhc29uKSBmaW5hbDsKIApJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MU291cmNl
RWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MU291cmNl
RWxlbWVudC5jcHAJKHJldmlzaW9uIDIyMzQ3NSkKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRN
TFNvdXJjZUVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02Myw5ICs2Myw5IEBAIFJlZjxI
VE1MU291cmNlRWxlbWVudD4gSFRNTFNvdXJjZUVsZW1lbnQKICAgICByZXR1cm4gY3JlYXRlKHNv
dXJjZVRhZywgZG9jdW1lbnQpOwogfQogCi1Ob2RlOjpJbnNlcnRpb25Ob3RpZmljYXRpb25SZXF1
ZXN0IEhUTUxTb3VyY2VFbGVtZW50OjppbnNlcnRlZEludG8oQ29udGFpbmVyTm9kZSYgaW5zZXJ0
aW9uUG9pbnQpCitOb2RlOjpJbnNlcnRlZEludG9SZXN1bHQgSFRNTFNvdXJjZUVsZW1lbnQ6Omlu
c2VydGVkSW50byhJbnNlcnRpb25UeXBlIGluc2VydGlvblR5cGUsIENvbnRhaW5lck5vZGUmIHBh
cmVudE9mSW5zZXJ0ZWRUcmVlKQogewotICAgIEhUTUxFbGVtZW50OjppbnNlcnRlZEludG8oaW5z
ZXJ0aW9uUG9pbnQpOworICAgIEhUTUxFbGVtZW50OjppbnNlcnRlZEludG8oaW5zZXJ0aW9uVHlw
ZSwgcGFyZW50T2ZJbnNlcnRlZFRyZWUpOwogICAgIGlmIChhdXRvKiBwYXJlbnQgPSBwYXJlbnRF
bGVtZW50KCkpIHsKICNpZiBFTkFCTEUoVklERU8pCiAgICAgICAgIGlmIChpczxIVE1MTWVkaWFF
bGVtZW50PigqcGFyZW50KSkKQEAgLTc1LDcgKzc1LDcgQEAgTm9kZTo6SW5zZXJ0aW9uTm90aWZp
Y2F0aW9uUmVxdWVzdCBIVE1MUwogICAgICAgICBpZiAoaXM8SFRNTFBpY3R1cmVFbGVtZW50Pigq
cGFyZW50KSkKICAgICAgICAgICAgIGRvd25jYXN0PEhUTUxQaWN0dXJlRWxlbWVudD4oKnBhcmVu
dCkuc291cmNlc0NoYW5nZWQoKTsKICAgICB9Ci0gICAgcmV0dXJuIEluc2VydGlvbkRvbmU7Cisg
ICAgcmV0dXJuIEluc2VydGVkSW50b1Jlc3VsdDo6RG9uZTsKIH0KIAogdm9pZCBIVE1MU291cmNl
RWxlbWVudDo6cmVtb3ZlZEZyb20oQ29udGFpbmVyTm9kZSYgcmVtb3ZhbFJvb3QpCkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9odG1sL0hUTUxTb3VyY2VFbGVtZW50LmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvaHRtbC9IVE1MU291cmNlRWxlbWVudC5oCShyZXZpc2lvbiAyMjM0NzUpCisr
KyBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxTb3VyY2VFbGVtZW50LmgJKHdvcmtpbmcgY29weSkK
QEAgLTQ1LDcgKzQ1LDcgQEAgcHVibGljOgogcHJpdmF0ZToKICAgICBIVE1MU291cmNlRWxlbWVu
dChjb25zdCBRdWFsaWZpZWROYW1lJiwgRG9jdW1lbnQmKTsKICAgICAKLSAgICBJbnNlcnRpb25O
b3RpZmljYXRpb25SZXF1ZXN0IGluc2VydGVkSW50byhDb250YWluZXJOb2RlJikgZmluYWw7Cisg
ICAgSW5zZXJ0ZWRJbnRvUmVzdWx0IGluc2VydGVkSW50byhJbnNlcnRpb25UeXBlLCBDb250YWlu
ZXJOb2RlJikgZmluYWw7CiAgICAgdm9pZCByZW1vdmVkRnJvbShDb250YWluZXJOb2RlJikgZmlu
YWw7CiAgICAgYm9vbCBpc1VSTEF0dHJpYnV0ZShjb25zdCBBdHRyaWJ1dGUmKSBjb25zdCBmaW5h
bDsKIApJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MU3R5bGVFbGVtZW50LmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxTdHlsZUVsZW1lbnQuY3BwCShyZXZp
c2lvbiAyMjM0NzUpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxTdHlsZUVsZW1lbnQuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC05NiwxMSArOTYsMTAgQEAgdm9pZCBIVE1MU3R5bGVFbGVtZW50
OjpmaW5pc2hQYXJzaW5nQ2hpbAogICAgIEhUTUxFbGVtZW50OjpmaW5pc2hQYXJzaW5nQ2hpbGRy
ZW4oKTsKIH0KIAotTm9kZTo6SW5zZXJ0aW9uTm90aWZpY2F0aW9uUmVxdWVzdCBIVE1MU3R5bGVF
bGVtZW50OjppbnNlcnRlZEludG8oQ29udGFpbmVyTm9kZSYgaW5zZXJ0aW9uUG9pbnQpCitOb2Rl
OjpJbnNlcnRlZEludG9SZXN1bHQgSFRNTFN0eWxlRWxlbWVudDo6aW5zZXJ0ZWRJbnRvKEluc2Vy
dGlvblR5cGUgaW5zZXJ0aW9uVHlwZSwgQ29udGFpbmVyTm9kZSYgcGFyZW50T2ZJbnNlcnRlZFRy
ZWUpCiB7Ci0gICAgYm9vbCB3YXNJbkRvY3VtZW50ID0gaXNDb25uZWN0ZWQoKTsKLSAgICBhdXRv
IHJlc3VsdCA9IEhUTUxFbGVtZW50OjppbnNlcnRlZEludG8oaW5zZXJ0aW9uUG9pbnQpOwotICAg
IGlmIChpbnNlcnRpb25Qb2ludC5pc0Nvbm5lY3RlZCgpICYmICF3YXNJbkRvY3VtZW50KQorICAg
IGF1dG8gcmVzdWx0ID0gSFRNTEVsZW1lbnQ6Omluc2VydGVkSW50byhpbnNlcnRpb25UeXBlLCBw
YXJlbnRPZkluc2VydGVkVHJlZSk7CisgICAgaWYgKGluc2VydGlvblR5cGUuY29ubmVjdGVkVG9E
b2N1bWVudCkKICAgICAgICAgbV9zdHlsZVNoZWV0T3duZXIuaW5zZXJ0ZWRJbnRvRG9jdW1lbnQo
KnRoaXMpOwogICAgIHJldHVybiByZXN1bHQ7CiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1s
L0hUTUxTdHlsZUVsZW1lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL0hU
TUxTdHlsZUVsZW1lbnQuaAkocmV2aXNpb24gMjIzNDc1KQorKysgU291cmNlL1dlYkNvcmUvaHRt
bC9IVE1MU3R5bGVFbGVtZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTU0LDcgKzU0LDcgQEAgcHJp
dmF0ZToKICAgICBIVE1MU3R5bGVFbGVtZW50KGNvbnN0IFF1YWxpZmllZE5hbWUmLCBEb2N1bWVu
dCYsIGJvb2wgY3JlYXRlZEJ5UGFyc2VyKTsKIAogICAgIHZvaWQgcGFyc2VBdHRyaWJ1dGUoY29u
c3QgUXVhbGlmaWVkTmFtZSYsIGNvbnN0IEF0b21pY1N0cmluZyYpIGZpbmFsOwotICAgIEluc2Vy
dGlvbk5vdGlmaWNhdGlvblJlcXVlc3QgaW5zZXJ0ZWRJbnRvKENvbnRhaW5lck5vZGUmKSBmaW5h
bDsKKyAgICBJbnNlcnRlZEludG9SZXN1bHQgaW5zZXJ0ZWRJbnRvKEluc2VydGlvblR5cGUsIENv
bnRhaW5lck5vZGUmKSBmaW5hbDsKICAgICB2b2lkIHJlbW92ZWRGcm9tKENvbnRhaW5lck5vZGUm
KSBmaW5hbDsKICAgICB2b2lkIGNoaWxkcmVuQ2hhbmdlZChjb25zdCBDaGlsZENoYW5nZSYpIGZp
bmFsOwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxUZXh0Rm9ybUNvbnRyb2xFbGVt
ZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxUZXh0Rm9ybUNv
bnRyb2xFbGVtZW50LmNwcAkocmV2aXNpb24gMjIzNDc1KQorKysgU291cmNlL1dlYkNvcmUvaHRt
bC9IVE1MVGV4dEZvcm1Db250cm9sRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTgwLDE0
ICs4MCwxNCBAQCBib29sIEhUTUxUZXh0Rm9ybUNvbnRyb2xFbGVtZW50OjpjaGlsZFNoCiAgICAg
cmV0dXJuIGhhc1NoYWRvd1Jvb3RQYXJlbnQoY2hpbGQpICYmIEhUTUxGb3JtQ29udHJvbEVsZW1l
bnRXaXRoU3RhdGU6OmNoaWxkU2hvdWxkQ3JlYXRlUmVuZGVyZXIoY2hpbGQpOwogfQogCi1Ob2Rl
OjpJbnNlcnRpb25Ob3RpZmljYXRpb25SZXF1ZXN0IEhUTUxUZXh0Rm9ybUNvbnRyb2xFbGVtZW50
OjppbnNlcnRlZEludG8oQ29udGFpbmVyTm9kZSYgaW5zZXJ0aW9uUG9pbnQpCitOb2RlOjpJbnNl
cnRlZEludG9SZXN1bHQgSFRNTFRleHRGb3JtQ29udHJvbEVsZW1lbnQ6Omluc2VydGVkSW50byhJ
bnNlcnRpb25UeXBlIGluc2VydGlvblR5cGUsIENvbnRhaW5lck5vZGUmIHBhcmVudE9mSW5zZXJ0
ZWRUcmVlKQogewotICAgIEluc2VydGlvbk5vdGlmaWNhdGlvblJlcXVlc3QgaW5zZXJ0aW9uTm90
aWZpY2F0aW9uUmVxdWVzdCA9IEhUTUxGb3JtQ29udHJvbEVsZW1lbnRXaXRoU3RhdGU6Omluc2Vy
dGVkSW50byhpbnNlcnRpb25Qb2ludCk7Ci0gICAgaWYgKCFpbnNlcnRpb25Qb2ludC5pc0Nvbm5l
Y3RlZCgpKQotICAgICAgICByZXR1cm4gaW5zZXJ0aW9uTm90aWZpY2F0aW9uUmVxdWVzdDsKLSAg
ICBTdHJpbmcgaW5pdGlhbFZhbHVlID0gdmFsdWUoKTsKLSAgICBzZXRUZXh0QXNPZkxhc3RGb3Jt
Q29udHJvbENoYW5nZUV2ZW50KGluaXRpYWxWYWx1ZS5pc051bGwoKSA/IGVtcHR5U3RyaW5nKCkg
OiBpbml0aWFsVmFsdWUpOwotICAgIHJldHVybiBpbnNlcnRpb25Ob3RpZmljYXRpb25SZXF1ZXN0
OworICAgIEluc2VydGVkSW50b1Jlc3VsdCBJbnNlcnRlZEludG9SZXN1bHQgPSBIVE1MRm9ybUNv
bnRyb2xFbGVtZW50V2l0aFN0YXRlOjppbnNlcnRlZEludG8oaW5zZXJ0aW9uVHlwZSwgcGFyZW50
T2ZJbnNlcnRlZFRyZWUpOworICAgIGlmIChpbnNlcnRpb25UeXBlLmNvbm5lY3RlZFRvRG9jdW1l
bnQpIHsKKyAgICAgICAgU3RyaW5nIGluaXRpYWxWYWx1ZSA9IHZhbHVlKCk7CisgICAgICAgIHNl
dFRleHRBc09mTGFzdEZvcm1Db250cm9sQ2hhbmdlRXZlbnQoaW5pdGlhbFZhbHVlLmlzTnVsbCgp
ID8gZW1wdHlTdHJpbmcoKSA6IGluaXRpYWxWYWx1ZSk7CisgICAgfQorICAgIHJldHVybiBJbnNl
cnRlZEludG9SZXN1bHQ7CiB9CiAKIHZvaWQgSFRNTFRleHRGb3JtQ29udHJvbEVsZW1lbnQ6OmRp
c3BhdGNoRm9jdXNFdmVudChSZWZQdHI8RWxlbWVudD4mJiBvbGRGb2N1c2VkRWxlbWVudCwgRm9j
dXNEaXJlY3Rpb24gZGlyZWN0aW9uKQpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MVGV4
dEZvcm1Db250cm9sRWxlbWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwv
SFRNTFRleHRGb3JtQ29udHJvbEVsZW1lbnQuaAkocmV2aXNpb24gMjIzNDc1KQorKysgU291cmNl
L1dlYkNvcmUvaHRtbC9IVE1MVGV4dEZvcm1Db250cm9sRWxlbWVudC5oCSh3b3JraW5nIGNvcHkp
CkBAIC01Miw3ICs1Miw3IEBAIHB1YmxpYzoKICAgICBpbnQgbWluTGVuZ3RoKCkgY29uc3QgeyBy
ZXR1cm4gbV9taW5MZW5ndGg7IH0KICAgICBFeGNlcHRpb25Pcjx2b2lkPiBzZXRNaW5MZW5ndGgo
aW50KTsKIAotICAgIEluc2VydGlvbk5vdGlmaWNhdGlvblJlcXVlc3QgaW5zZXJ0ZWRJbnRvKENv
bnRhaW5lck5vZGUmKSBvdmVycmlkZTsKKyAgICBJbnNlcnRlZEludG9SZXN1bHQgaW5zZXJ0ZWRJ
bnRvKEluc2VydGlvblR5cGUsIENvbnRhaW5lck5vZGUmKSBvdmVycmlkZTsKIAogICAgIC8vIFRo
ZSBkZXJpdmVkIGNsYXNzIHNob3VsZCByZXR1cm4gdHJ1ZSBpZiBwbGFjZWhvbGRlciBwcm9jZXNz
aW5nIGlzIG5lZWRlZC4KICAgICBib29sIGlzUGxhY2Vob2xkZXJWaXNpYmxlKCkgY29uc3QgeyBy
ZXR1cm4gbV9pc1BsYWNlaG9sZGVyVmlzaWJsZTsgfQpJbmRleDogU291cmNlL1dlYkNvcmUvaHRt
bC9IVE1MVGl0bGVFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1s
L0hUTUxUaXRsZUVsZW1lbnQuY3BwCShyZXZpc2lvbiAyMjM0NzUpCisrKyBTb3VyY2UvV2ViQ29y
ZS9odG1sL0hUTUxUaXRsZUVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01MCwxMSArNTAs
MTEgQEAgUmVmPEhUTUxUaXRsZUVsZW1lbnQ+IEhUTUxUaXRsZUVsZW1lbnQ6OgogICAgIHJldHVy
biBhZG9wdFJlZigqbmV3IEhUTUxUaXRsZUVsZW1lbnQodGFnTmFtZSwgZG9jdW1lbnQpKTsKIH0K
IAotTm9kZTo6SW5zZXJ0aW9uTm90aWZpY2F0aW9uUmVxdWVzdCBIVE1MVGl0bGVFbGVtZW50Ojpp
bnNlcnRlZEludG8oQ29udGFpbmVyTm9kZSYgaW5zZXJ0aW9uUG9pbnQpCitOb2RlOjpJbnNlcnRl
ZEludG9SZXN1bHQgSFRNTFRpdGxlRWxlbWVudDo6aW5zZXJ0ZWRJbnRvKEluc2VydGlvblR5cGUg
aW5zZXJ0aW9uVHlwZSwgQ29udGFpbmVyTm9kZSYgcGFyZW50T2ZJbnNlcnRlZFRyZWUpCiB7Ci0g
ICAgSFRNTEVsZW1lbnQ6Omluc2VydGVkSW50byhpbnNlcnRpb25Qb2ludCk7CisgICAgSFRNTEVs
ZW1lbnQ6Omluc2VydGVkSW50byhpbnNlcnRpb25UeXBlLCBwYXJlbnRPZkluc2VydGVkVHJlZSk7
CiAgICAgZG9jdW1lbnQoKS50aXRsZUVsZW1lbnRBZGRlZCgqdGhpcyk7Ci0gICAgcmV0dXJuIElu
c2VydGlvbkRvbmU7CisgICAgcmV0dXJuIEluc2VydGVkSW50b1Jlc3VsdDo6RG9uZTsKIH0KIAog
dm9pZCBIVE1MVGl0bGVFbGVtZW50OjpyZW1vdmVkRnJvbShDb250YWluZXJOb2RlJiBpbnNlcnRp
b25Qb2ludCkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFRpdGxlRWxlbWVudC5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFRpdGxlRWxlbWVudC5oCShyZXZp
c2lvbiAyMjM0NzUpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxUaXRsZUVsZW1lbnQuaAko
d29ya2luZyBjb3B5KQpAQCAtMzksNyArMzksNyBAQCBwdWJsaWM6CiBwcml2YXRlOgogICAgIEhU
TUxUaXRsZUVsZW1lbnQoY29uc3QgUXVhbGlmaWVkTmFtZSYsIERvY3VtZW50Jik7CiAKLSAgICBJ
bnNlcnRpb25Ob3RpZmljYXRpb25SZXF1ZXN0IGluc2VydGVkSW50byhDb250YWluZXJOb2RlJikg
ZmluYWw7CisgICAgSW5zZXJ0ZWRJbnRvUmVzdWx0IGluc2VydGVkSW50byhJbnNlcnRpb25UeXBl
LCBDb250YWluZXJOb2RlJikgZmluYWw7CiAgICAgdm9pZCByZW1vdmVkRnJvbShDb250YWluZXJO
b2RlJikgZmluYWw7CiAgICAgdm9pZCBjaGlsZHJlbkNoYW5nZWQoY29uc3QgQ2hpbGRDaGFuZ2Um
KSBmaW5hbDsKIApJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MVHJhY2tFbGVtZW50LmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxUcmFja0VsZW1lbnQuY3Bw
CShyZXZpc2lvbiAyMjM0NzUpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxUcmFja0VsZW1l
bnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03NiwxNyArNzYsMTkgQEAgUmVmPEhUTUxUcmFja0Vs
ZW1lbnQ+IEhUTUxUcmFja0VsZW1lbnQ6OgogICAgIHJldHVybiBhZG9wdFJlZigqbmV3IEhUTUxU
cmFja0VsZW1lbnQodGFnTmFtZSwgZG9jdW1lbnQpKTsKIH0KIAotTm9kZTo6SW5zZXJ0aW9uTm90
aWZpY2F0aW9uUmVxdWVzdCBIVE1MVHJhY2tFbGVtZW50OjppbnNlcnRlZEludG8oQ29udGFpbmVy
Tm9kZSYgaW5zZXJ0aW9uUG9pbnQpCitOb2RlOjpJbnNlcnRlZEludG9SZXN1bHQgSFRNTFRyYWNr
RWxlbWVudDo6aW5zZXJ0ZWRJbnRvKEluc2VydGlvblR5cGUgaW5zZXJ0aW9uVHlwZSwgQ29udGFp
bmVyTm9kZSYgcGFyZW50T2ZJbnNlcnRlZFRyZWUpCiB7Ci0gICAgSFRNTEVsZW1lbnQ6Omluc2Vy
dGVkSW50byhpbnNlcnRpb25Qb2ludCk7CisgICAgSFRNTEVsZW1lbnQ6Omluc2VydGVkSW50byhp
bnNlcnRpb25UeXBlLCBwYXJlbnRPZkluc2VydGVkVHJlZSk7CiAKLSAgICBpZiAoaXM8SFRNTE1l
ZGlhRWxlbWVudD4oaW5zZXJ0aW9uUG9pbnQpKQotICAgICAgICBkb3duY2FzdDxIVE1MTWVkaWFF
bGVtZW50PihpbnNlcnRpb25Qb2ludCkuZGlkQWRkVGV4dFRyYWNrKCp0aGlzKTsKKyAgICAvLyBG
SVhNRTogVGhpcyBjb2RlIGlzIHdyb25nLiBJZiBIVE1MVHJhY2tFbGVtZW50IGNhbiBiZSBhbnkg
ZGVzY2VuZGVudCBvZiBIVE1MTWVkaWFFbGVtZW50LCB0aGVuIGNoZWNrIGFuY2VzdG9ycyBvZiBw
YXJlbnRPZkluc2VydGVkVHJlZS4KKyAgICAvLyBJZiBIVE1MTWVkaWFFbGVtZW50IG9ubHkgc3Vw
cG9ydHMgSFRNTFRyYWNrRWxlbWVudCB3aGljaCBpcyBhbiBpbW1lZGlhdGUgY2hpbGQsIHRoZW4g
Y2hlY2sgcGFyZW50Tm9kZSgpIGluc3RlYWQuCisgICAgaWYgKGlzPEhUTUxNZWRpYUVsZW1lbnQ+
KHBhcmVudE9mSW5zZXJ0ZWRUcmVlKSkKKyAgICAgICAgZG93bmNhc3Q8SFRNTE1lZGlhRWxlbWVu
dD4ocGFyZW50T2ZJbnNlcnRlZFRyZWUpLmRpZEFkZFRleHRUcmFjaygqdGhpcyk7CiAKICAgICAv
LyBTaW5jZSB3ZSd2ZSBtb3ZlZCB0byBhIG5ldyBwYXJlbnQsIHdlIG1heSBub3cgYmUgYWJsZSB0
byBsb2FkLgogICAgIHNjaGVkdWxlTG9hZCgpOwogCi0gICAgcmV0dXJuIEluc2VydGlvbkRvbmU7
CisgICAgcmV0dXJuIEluc2VydGVkSW50b1Jlc3VsdDo6RG9uZTsKIH0KIAogdm9pZCBIVE1MVHJh
Y2tFbGVtZW50OjpyZW1vdmVkRnJvbShDb250YWluZXJOb2RlJiBpbnNlcnRpb25Qb2ludCkKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFRyYWNrRWxlbWVudC5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFRyYWNrRWxlbWVudC5oCShyZXZpc2lvbiAyMjM0NzUp
CisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxUcmFja0VsZW1lbnQuaAkod29ya2luZyBjb3B5
KQpAQCAtNjUsNyArNjUsNyBAQCBwcml2YXRlOgogCiAgICAgdm9pZCBwYXJzZUF0dHJpYnV0ZShj
b25zdCBRdWFsaWZpZWROYW1lJiwgY29uc3QgQXRvbWljU3RyaW5nJikgZmluYWw7CiAKLSAgICBJ
bnNlcnRpb25Ob3RpZmljYXRpb25SZXF1ZXN0IGluc2VydGVkSW50byhDb250YWluZXJOb2RlJikg
ZmluYWw7CisgICAgSW5zZXJ0ZWRJbnRvUmVzdWx0IGluc2VydGVkSW50byhJbnNlcnRpb25UeXBl
LCBDb250YWluZXJOb2RlJikgZmluYWw7CiAgICAgdm9pZCByZW1vdmVkRnJvbShDb250YWluZXJO
b2RlJikgZmluYWw7CiAKICAgICBib29sIGlzVVJMQXR0cmlidXRlKGNvbnN0IEF0dHJpYnV0ZSYp
IGNvbnN0IGZpbmFsOwpJbmRleDogU291cmNlL1dlYkNvcmUvc3ZnL1NWR0VsZW1lbnQuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdFbGVtZW50LmNwcAkocmV2aXNpb24g
MjIzNDc1KQorKysgU291cmNlL1dlYkNvcmUvc3ZnL1NWR0VsZW1lbnQuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC05ODIsMTIgKzk4MiwxMiBAQCB2b2lkIFNWR0VsZW1lbnQ6OnN2Z0F0dHJpYnV0ZUNo
YW5nZWQoY29uCiAgICAgfQogfQogCi1Ob2RlOjpJbnNlcnRpb25Ob3RpZmljYXRpb25SZXF1ZXN0
IFNWR0VsZW1lbnQ6Omluc2VydGVkSW50byhDb250YWluZXJOb2RlJiByb290UGFyZW50KQorTm9k
ZTo6SW5zZXJ0ZWRJbnRvUmVzdWx0IFNWR0VsZW1lbnQ6Omluc2VydGVkSW50byhJbnNlcnRpb25U
eXBlIGluc2VydGlvblR5cGUsIENvbnRhaW5lck5vZGUmIHBhcmVudE9mSW5zZXJ0ZWRUcmVlKQog
ewotICAgIFN0eWxlZEVsZW1lbnQ6Omluc2VydGVkSW50byhyb290UGFyZW50KTsKKyAgICBTdHls
ZWRFbGVtZW50OjppbnNlcnRlZEludG8oaW5zZXJ0aW9uVHlwZSwgcGFyZW50T2ZJbnNlcnRlZFRy
ZWUpOwogICAgIHVwZGF0ZVJlbGF0aXZlTGVuZ3Roc0luZm9ybWF0aW9uKCk7CiAgICAgYnVpbGRQ
ZW5kaW5nUmVzb3VyY2VzSWZOZWVkZWQoKTsKLSAgICByZXR1cm4gSW5zZXJ0aW9uRG9uZTsKKyAg
ICByZXR1cm4gSW5zZXJ0ZWRJbnRvUmVzdWx0OjpEb25lOwogfQogCiB2b2lkIFNWR0VsZW1lbnQ6
OmJ1aWxkUGVuZGluZ1Jlc291cmNlc0lmTmVlZGVkKCkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N2
Zy9TVkdFbGVtZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3ZnL1NWR0VsZW1l
bnQuaAkocmV2aXNpb24gMjIzNDc1KQorKysgU291cmNlL1dlYkNvcmUvc3ZnL1NWR0VsZW1lbnQu
aAkod29ya2luZyBjb3B5KQpAQCAtMTU5LDcgKzE1OSw3IEBAIHByb3RlY3RlZDoKIAogICAgIGJv
b2wgaXNQcmVzZW50YXRpb25BdHRyaWJ1dGUoY29uc3QgUXVhbGlmaWVkTmFtZSYpIGNvbnN0IG92
ZXJyaWRlOwogICAgIHZvaWQgY29sbGVjdFN0eWxlRm9yUHJlc2VudGF0aW9uQXR0cmlidXRlKGNv
bnN0IFF1YWxpZmllZE5hbWUmLCBjb25zdCBBdG9taWNTdHJpbmcmLCBNdXRhYmxlU3R5bGVQcm9w
ZXJ0aWVzJikgb3ZlcnJpZGU7Ci0gICAgSW5zZXJ0aW9uTm90aWZpY2F0aW9uUmVxdWVzdCBpbnNl
cnRlZEludG8oQ29udGFpbmVyTm9kZSYpIG92ZXJyaWRlOworICAgIEluc2VydGVkSW50b1Jlc3Vs
dCBpbnNlcnRlZEludG8oSW5zZXJ0aW9uVHlwZSwgQ29udGFpbmVyTm9kZSYpIG92ZXJyaWRlOwog
ICAgIHZvaWQgcmVtb3ZlZEZyb20oQ29udGFpbmVyTm9kZSYpIG92ZXJyaWRlOwogICAgIHZvaWQg
Y2hpbGRyZW5DaGFuZ2VkKGNvbnN0IENoaWxkQ2hhbmdlJikgb3ZlcnJpZGU7CiAgICAgdmlydHVh
bCBib29sIHNlbGZIYXNSZWxhdGl2ZUxlbmd0aHMoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQpJ
bmRleDogU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFSW1hZ2VFbGVtZW50LmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVJbWFnZUVsZW1lbnQuY3BwCShyZXZpc2lvbiAy
MjM0NzUpCisrKyBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVJbWFnZUVsZW1lbnQuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xNTAsMTMgKzE1MCwxMyBAQCB2b2lkIFNWR0ZFSW1hZ2VFbGVtZW50Ojpz
dmdBdHRyaWJ1dGVDaGFuCiAgICAgU1ZHRmlsdGVyUHJpbWl0aXZlU3RhbmRhcmRBdHRyaWJ1dGVz
OjpzdmdBdHRyaWJ1dGVDaGFuZ2VkKGF0dHJOYW1lKTsKIH0KIAotTm9kZTo6SW5zZXJ0aW9uTm90
aWZpY2F0aW9uUmVxdWVzdCBTVkdGRUltYWdlRWxlbWVudDo6aW5zZXJ0ZWRJbnRvKENvbnRhaW5l
ck5vZGUmIHJvb3RQYXJlbnQpCitOb2RlOjpJbnNlcnRlZEludG9SZXN1bHQgU1ZHRkVJbWFnZUVs
ZW1lbnQ6Omluc2VydGVkSW50byhJbnNlcnRpb25UeXBlIGluc2VydGlvblR5cGUsIENvbnRhaW5l
ck5vZGUmIHBhcmVudE9mSW5zZXJ0ZWRUcmVlKQogewotICAgIFNWR0ZpbHRlclByaW1pdGl2ZVN0
YW5kYXJkQXR0cmlidXRlczo6aW5zZXJ0ZWRJbnRvKHJvb3RQYXJlbnQpOwotICAgIHJldHVybiBJ
bnNlcnRpb25TaG91bGRDYWxsRmluaXNoZWRJbnNlcnRpbmdTdWJ0cmVlOworICAgIFNWR0ZpbHRl
clByaW1pdGl2ZVN0YW5kYXJkQXR0cmlidXRlczo6aW5zZXJ0ZWRJbnRvKGluc2VydGlvblR5cGUs
IHBhcmVudE9mSW5zZXJ0ZWRUcmVlKTsKKyAgICByZXR1cm4gSW5zZXJ0ZWRJbnRvUmVzdWx0OjpO
ZWVkc1Bvc3RJbnNlcnRpb25DYWxsYmFjazsKIH0KIAotdm9pZCBTVkdGRUltYWdlRWxlbWVudDo6
ZmluaXNoZWRJbnNlcnRpbmdTdWJ0cmVlKCkKK3ZvaWQgU1ZHRkVJbWFnZUVsZW1lbnQ6OmRpZEZp
bmlzaEluc2VydGluZ05vZGUoKQogewogICAgIGJ1aWxkUGVuZGluZ1Jlc291cmNlKCk7CiB9Cklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVJbWFnZUVsZW1lbnQuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVJbWFnZUVsZW1lbnQuaAkocmV2aXNpb24gMjIzNDc1
KQorKysgU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFSW1hZ2VFbGVtZW50LmgJKHdvcmtpbmcgY29w
eSkKQEAgLTQ1LDcgKzQ1LDcgQEAgcHVibGljOgogcHJpdmF0ZToKICAgICBTVkdGRUltYWdlRWxl
bWVudChjb25zdCBRdWFsaWZpZWROYW1lJiwgRG9jdW1lbnQmKTsKIAotICAgIHZvaWQgZmluaXNo
ZWRJbnNlcnRpbmdTdWJ0cmVlKCkgb3ZlcnJpZGU7CisgICAgdm9pZCBkaWRGaW5pc2hJbnNlcnRp
bmdOb2RlKCkgb3ZlcnJpZGU7CiAKICAgICB2b2lkIHBhcnNlQXR0cmlidXRlKGNvbnN0IFF1YWxp
ZmllZE5hbWUmLCBjb25zdCBBdG9taWNTdHJpbmcmKSBvdmVycmlkZTsKICAgICB2b2lkIHN2Z0F0
dHJpYnV0ZUNoYW5nZWQoY29uc3QgUXVhbGlmaWVkTmFtZSYpIG92ZXJyaWRlOwpAQCAtNTgsNyAr
NTgsNyBAQCBwcml2YXRlOgogICAgIHZvaWQgcmVxdWVzdEltYWdlUmVzb3VyY2UoKTsKIAogICAg
IHZvaWQgYnVpbGRQZW5kaW5nUmVzb3VyY2UoKSBvdmVycmlkZTsKLSAgICBJbnNlcnRpb25Ob3Rp
ZmljYXRpb25SZXF1ZXN0IGluc2VydGVkSW50byhDb250YWluZXJOb2RlJikgb3ZlcnJpZGU7Cisg
ICAgSW5zZXJ0ZWRJbnRvUmVzdWx0IGluc2VydGVkSW50byhJbnNlcnRpb25UeXBlLCBDb250YWlu
ZXJOb2RlJikgb3ZlcnJpZGU7CiAgICAgdm9pZCByZW1vdmVkRnJvbShDb250YWluZXJOb2RlJikg
b3ZlcnJpZGU7CiAKICAgICBCRUdJTl9ERUNMQVJFX0FOSU1BVEVEX1BST1BFUlRJRVMoU1ZHRkVJ
bWFnZUVsZW1lbnQpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRm9udEZhY2VFbGVtZW50
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRm9udEZhY2VFbGVtZW50
LmNwcAkocmV2aXNpb24gMjIzNDc1KQorKysgU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZvbnRGYWNl
RWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI3MSwxNyArMjcxLDE3IEBAIHZvaWQgU1ZH
Rm9udEZhY2VFbGVtZW50OjpyZWJ1aWxkRm9udEZhY2UKICAgICBkb2N1bWVudCgpLnN0eWxlU2Nv
cGUoKS5kaWRDaGFuZ2VTdHlsZVNoZWV0RW52aXJvbm1lbnQoKTsKIH0KIAotTm9kZTo6SW5zZXJ0
aW9uTm90aWZpY2F0aW9uUmVxdWVzdCBTVkdGb250RmFjZUVsZW1lbnQ6Omluc2VydGVkSW50byhD
b250YWluZXJOb2RlJiByb290UGFyZW50KQorTm9kZTo6SW5zZXJ0ZWRJbnRvUmVzdWx0IFNWR0Zv
bnRGYWNlRWxlbWVudDo6aW5zZXJ0ZWRJbnRvKEluc2VydGlvblR5cGUgaW5zZXJ0aW9uVHlwZSwg
Q29udGFpbmVyTm9kZSYgcGFyZW50T2ZJbnNlcnRlZFRyZWUpCiB7Ci0gICAgU1ZHRWxlbWVudDo6
aW5zZXJ0ZWRJbnRvKHJvb3RQYXJlbnQpOwotICAgIGlmICghcm9vdFBhcmVudC5pc0Nvbm5lY3Rl
ZCgpKSB7CisgICAgU1ZHRWxlbWVudDo6aW5zZXJ0ZWRJbnRvKGluc2VydGlvblR5cGUsIHBhcmVu
dE9mSW5zZXJ0ZWRUcmVlKTsKKyAgICBpZiAoIWluc2VydGlvblR5cGUuY29ubmVjdGVkVG9Eb2N1
bWVudCkgewogICAgICAgICBBU1NFUlQoIW1fZm9udEVsZW1lbnQpOwotICAgICAgICByZXR1cm4g
SW5zZXJ0aW9uRG9uZTsKKyAgICAgICAgcmV0dXJuIEluc2VydGVkSW50b1Jlc3VsdDo6RG9uZTsK
ICAgICB9CiAgICAgZG9jdW1lbnQoKS5hY2Nlc3NTVkdFeHRlbnNpb25zKCkucmVnaXN0ZXJTVkdG
b250RmFjZUVsZW1lbnQodGhpcyk7CiAKICAgICByZWJ1aWxkRm9udEZhY2UoKTsKLSAgICByZXR1
cm4gSW5zZXJ0aW9uRG9uZTsKKyAgICByZXR1cm4gSW5zZXJ0ZWRJbnRvUmVzdWx0OjpEb25lOwog
fQogCiB2b2lkIFNWR0ZvbnRGYWNlRWxlbWVudDo6cmVtb3ZlZEZyb20oQ29udGFpbmVyTm9kZSYg
cm9vdFBhcmVudCkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGb250RmFjZUVsZW1lbnQu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRm9udEZhY2VFbGVtZW50LmgJ
KHJldmlzaW9uIDIyMzQ3NSkKKysrIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGb250RmFjZUVsZW1l
bnQuaAkod29ya2luZyBjb3B5KQpAQCAtNTgsNyArNTgsNyBAQCBwcml2YXRlOgogICAgIHZvaWQg
cGFyc2VBdHRyaWJ1dGUoY29uc3QgUXVhbGlmaWVkTmFtZSYsIGNvbnN0IEF0b21pY1N0cmluZyYp
IGZpbmFsOwogCiAgICAgdm9pZCBjaGlsZHJlbkNoYW5nZWQoY29uc3QgQ2hpbGRDaGFuZ2UmKSBm
aW5hbDsKLSAgICBJbnNlcnRpb25Ob3RpZmljYXRpb25SZXF1ZXN0IGluc2VydGVkSW50byhDb250
YWluZXJOb2RlJikgZmluYWw7CisgICAgSW5zZXJ0ZWRJbnRvUmVzdWx0IGluc2VydGVkSW50byhJ
bnNlcnRpb25UeXBlLCBDb250YWluZXJOb2RlJikgZmluYWw7CiAgICAgdm9pZCByZW1vdmVkRnJv
bShDb250YWluZXJOb2RlJikgZmluYWw7CiAKICAgICBib29sIHJlbmRlcmVySXNOZWVkZWQoY29u
c3QgUmVuZGVyU3R5bGUmKSBmaW5hbCB7IHJldHVybiBmYWxzZTsgfQpJbmRleDogU291cmNlL1dl
YkNvcmUvc3ZnL1NWR0ZvbnRGYWNlVXJpRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvc3ZnL1NWR0ZvbnRGYWNlVXJpRWxlbWVudC5jcHAJKHJldmlzaW9uIDIyMzQ3NSkK
KysrIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGb250RmFjZVVyaUVsZW1lbnQuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC04MSwxMCArODEsMTAgQEAgdm9pZCBTVkdGb250RmFjZVVyaUVsZW1lbnQ6OmNo
aWxkcmVuQ2hhbgogICAgICAgICBkb3duY2FzdDxTVkdGb250RmFjZUVsZW1lbnQ+KCpncmFuZHBh
cmVudCkucmVidWlsZEZvbnRGYWNlKCk7CiB9CiAKLU5vZGU6Okluc2VydGlvbk5vdGlmaWNhdGlv
blJlcXVlc3QgU1ZHRm9udEZhY2VVcmlFbGVtZW50OjppbnNlcnRlZEludG8oQ29udGFpbmVyTm9k
ZSYgcm9vdFBhcmVudCkKK05vZGU6Okluc2VydGVkSW50b1Jlc3VsdCBTVkdGb250RmFjZVVyaUVs
ZW1lbnQ6Omluc2VydGVkSW50byhJbnNlcnRpb25UeXBlIGluc2VydGlvblR5cGUsIENvbnRhaW5l
ck5vZGUmIHBhcmVudE9mSW5zZXJ0ZWRUcmVlKQogewogICAgIGxvYWRGb250KCk7Ci0gICAgcmV0
dXJuIFNWR0VsZW1lbnQ6Omluc2VydGVkSW50byhyb290UGFyZW50KTsKKyAgICByZXR1cm4gU1ZH
RWxlbWVudDo6aW5zZXJ0ZWRJbnRvKGluc2VydGlvblR5cGUsIHBhcmVudE9mSW5zZXJ0ZWRUcmVl
KTsKIH0KIAogc3RhdGljIGJvb2wgaXNTVkdGb250VGFyZ2V0KGNvbnN0IFNWR0ZvbnRGYWNlVXJp
RWxlbWVudCYgZWxlbWVudCkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGb250RmFjZVVy
aUVsZW1lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRm9udEZhY2VV
cmlFbGVtZW50LmgJKHJldmlzaW9uIDIyMzQ3NSkKKysrIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdG
b250RmFjZVVyaUVsZW1lbnQuaAkod29ya2luZyBjb3B5KQpAQCAtNDIsNyArNDIsNyBAQCBwcml2
YXRlOgogICAgIAogICAgIHZvaWQgcGFyc2VBdHRyaWJ1dGUoY29uc3QgUXVhbGlmaWVkTmFtZSYs
IGNvbnN0IEF0b21pY1N0cmluZyYpIGZpbmFsOwogICAgIHZvaWQgY2hpbGRyZW5DaGFuZ2VkKGNv
bnN0IENoaWxkQ2hhbmdlJikgZmluYWw7Ci0gICAgSW5zZXJ0aW9uTm90aWZpY2F0aW9uUmVxdWVz
dCBpbnNlcnRlZEludG8oQ29udGFpbmVyTm9kZSYpIGZpbmFsOworICAgIEluc2VydGVkSW50b1Jl
c3VsdCBpbnNlcnRlZEludG8oSW5zZXJ0aW9uVHlwZSwgQ29udGFpbmVyTm9kZSYpIGZpbmFsOwog
ICAgIGJvb2wgcmVuZGVyZXJJc05lZWRlZChjb25zdCBSZW5kZXJTdHlsZSYpIGZpbmFsIHsgcmV0
dXJuIGZhbHNlOyB9CiAKICAgICB2b2lkIGxvYWRGb250KCk7CkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9zdmcvU1ZHSW1hZ2VFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9z
dmcvU1ZHSW1hZ2VFbGVtZW50LmNwcAkocmV2aXNpb24gMjIzNDc1KQorKysgU291cmNlL1dlYkNv
cmUvc3ZnL1NWR0ltYWdlRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE4NiwxNSArMTg2
LDE1IEBAIHZvaWQgU1ZHSW1hZ2VFbGVtZW50OjpkaWRBdHRhY2hSZW5kZXJlcnMKICAgICB9CiB9
CiAKLU5vZGU6Okluc2VydGlvbk5vdGlmaWNhdGlvblJlcXVlc3QgU1ZHSW1hZ2VFbGVtZW50Ojpp
bnNlcnRlZEludG8oQ29udGFpbmVyTm9kZSYgcm9vdFBhcmVudCkKK05vZGU6Okluc2VydGVkSW50
b1Jlc3VsdCBTVkdJbWFnZUVsZW1lbnQ6Omluc2VydGVkSW50byhJbnNlcnRpb25UeXBlIGluc2Vy
dGlvblR5cGUsIENvbnRhaW5lck5vZGUmIHBhcmVudE9mSW5zZXJ0ZWRUcmVlKQogewotICAgIFNW
R0dyYXBoaWNzRWxlbWVudDo6aW5zZXJ0ZWRJbnRvKHJvb3RQYXJlbnQpOwotICAgIGlmICghcm9v
dFBhcmVudC5pc0Nvbm5lY3RlZCgpKQotICAgICAgICByZXR1cm4gSW5zZXJ0aW9uRG9uZTsKKyAg
ICBTVkdHcmFwaGljc0VsZW1lbnQ6Omluc2VydGVkSW50byhpbnNlcnRpb25UeXBlLCBwYXJlbnRP
Zkluc2VydGVkVHJlZSk7CisgICAgaWYgKCFpbnNlcnRpb25UeXBlLmNvbm5lY3RlZFRvRG9jdW1l
bnQpCisgICAgICAgIHJldHVybiBJbnNlcnRlZEludG9SZXN1bHQ6OkRvbmU7CiAgICAgLy8gVXBk
YXRlIGltYWdlIGxvYWRlciwgYXMgc29vbiBhcyB3ZSdyZSBsaXZpbmcgaW4gdGhlIHRyZWUuCiAg
ICAgLy8gV2UgY2FuIG9ubHkgcmVzb2x2ZSBiYXNlIFVSSXMgcHJvcGVybHksIGFmdGVyIHRoYXQh
CiAgICAgbV9pbWFnZUxvYWRlci51cGRhdGVGcm9tRWxlbWVudCgpOwotICAgIHJldHVybiBJbnNl
cnRpb25Eb25lOworICAgIHJldHVybiBJbnNlcnRlZEludG9SZXN1bHQ6OkRvbmU7CiB9CiAKIGNv
bnN0IEF0b21pY1N0cmluZyYgU1ZHSW1hZ2VFbGVtZW50OjppbWFnZVNvdXJjZVVSTCgpIGNvbnN0
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHSW1hZ2VFbGVtZW50LmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ltYWdlRWxlbWVudC5oCShyZXZpc2lvbiAyMjM0NzUp
CisrKyBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHSW1hZ2VFbGVtZW50LmgJKHdvcmtpbmcgY29weSkK
QEAgLTQ5LDcgKzQ5LDcgQEAgcHJpdmF0ZToKICAgICB2b2lkIHN2Z0F0dHJpYnV0ZUNoYW5nZWQo
Y29uc3QgUXVhbGlmaWVkTmFtZSYpIGZpbmFsOwogCiAgICAgdm9pZCBkaWRBdHRhY2hSZW5kZXJl
cnMoKSBmaW5hbDsKLSAgICBJbnNlcnRpb25Ob3RpZmljYXRpb25SZXF1ZXN0IGluc2VydGVkSW50
byhDb250YWluZXJOb2RlJikgZmluYWw7CisgICAgSW5zZXJ0ZWRJbnRvUmVzdWx0IGluc2VydGVk
SW50byhJbnNlcnRpb25UeXBlLCBDb250YWluZXJOb2RlJikgZmluYWw7CiAKICAgICBSZW5kZXJQ
dHI8UmVuZGVyRWxlbWVudD4gY3JlYXRlRWxlbWVudFJlbmRlcmVyKFJlbmRlclN0eWxlJiYsIGNv
bnN0IFJlbmRlclRyZWVQb3NpdGlvbiYpIGZpbmFsOwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9z
dmcvU1ZHTVBhdGhFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcv
U1ZHTVBhdGhFbGVtZW50LmNwcAkocmV2aXNpb24gMjIzNDc1KQorKysgU291cmNlL1dlYkNvcmUv
c3ZnL1NWR01QYXRoRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTg2LDE1ICs4NiwxNSBA
QCB2b2lkIFNWR01QYXRoRWxlbWVudDo6Y2xlYXJSZXNvdXJjZVJlZmVyCiAgICAgZG9jdW1lbnQo
KS5hY2Nlc3NTVkdFeHRlbnNpb25zKCkucmVtb3ZlQWxsVGFyZ2V0UmVmZXJlbmNlc0ZvckVsZW1l
bnQodGhpcyk7CiB9CiAKLU5vZGU6Okluc2VydGlvbk5vdGlmaWNhdGlvblJlcXVlc3QgU1ZHTVBh
dGhFbGVtZW50OjppbnNlcnRlZEludG8oQ29udGFpbmVyTm9kZSYgcm9vdFBhcmVudCkKK05vZGU6
Okluc2VydGVkSW50b1Jlc3VsdCBTVkdNUGF0aEVsZW1lbnQ6Omluc2VydGVkSW50byhJbnNlcnRp
b25UeXBlIGluc2VydGlvblR5cGUsIENvbnRhaW5lck5vZGUmIHBhcmVudE9mSW5zZXJ0ZWRUcmVl
KQogewotICAgIFNWR0VsZW1lbnQ6Omluc2VydGVkSW50byhyb290UGFyZW50KTsKLSAgICBpZiAo
cm9vdFBhcmVudC5pc0Nvbm5lY3RlZCgpKQotICAgICAgICByZXR1cm4gSW5zZXJ0aW9uU2hvdWxk
Q2FsbEZpbmlzaGVkSW5zZXJ0aW5nU3VidHJlZTsKLSAgICByZXR1cm4gSW5zZXJ0aW9uRG9uZTsK
KyAgICBTVkdFbGVtZW50OjppbnNlcnRlZEludG8oaW5zZXJ0aW9uVHlwZSwgcGFyZW50T2ZJbnNl
cnRlZFRyZWUpOworICAgIGlmIChpbnNlcnRpb25UeXBlLmNvbm5lY3RlZFRvRG9jdW1lbnQpCisg
ICAgICAgIHJldHVybiBJbnNlcnRlZEludG9SZXN1bHQ6Ok5lZWRzUG9zdEluc2VydGlvbkNhbGxi
YWNrOworICAgIHJldHVybiBJbnNlcnRlZEludG9SZXN1bHQ6OkRvbmU7CiB9CiAKLXZvaWQgU1ZH
TVBhdGhFbGVtZW50OjpmaW5pc2hlZEluc2VydGluZ1N1YnRyZWUoKQordm9pZCBTVkdNUGF0aEVs
ZW1lbnQ6OmRpZEZpbmlzaEluc2VydGluZ05vZGUoKQogewogICAgIGJ1aWxkUGVuZGluZ1Jlc291
cmNlKCk7CiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHTVBhdGhFbGVtZW50LmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3ZnL1NWR01QYXRoRWxlbWVudC5oCShyZXZpc2lv
biAyMjM0NzUpCisrKyBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHTVBhdGhFbGVtZW50LmgJKHdvcmtp
bmcgY29weSkKQEAgLTQ1LDE0ICs0NSwxNCBAQCBwcml2YXRlOgogCiAgICAgdm9pZCBidWlsZFBl
bmRpbmdSZXNvdXJjZSgpIGZpbmFsOwogICAgIHZvaWQgY2xlYXJSZXNvdXJjZVJlZmVyZW5jZXMo
KTsKLSAgICBJbnNlcnRpb25Ob3RpZmljYXRpb25SZXF1ZXN0IGluc2VydGVkSW50byhDb250YWlu
ZXJOb2RlJikgZmluYWw7CisgICAgSW5zZXJ0ZWRJbnRvUmVzdWx0IGluc2VydGVkSW50byhJbnNl
cnRpb25UeXBlLCBDb250YWluZXJOb2RlJikgZmluYWw7CiAgICAgdm9pZCByZW1vdmVkRnJvbShD
b250YWluZXJOb2RlJikgZmluYWw7CiAKICAgICB2b2lkIHBhcnNlQXR0cmlidXRlKGNvbnN0IFF1
YWxpZmllZE5hbWUmLCBjb25zdCBBdG9taWNTdHJpbmcmKSBmaW5hbDsKICAgICB2b2lkIHN2Z0F0
dHJpYnV0ZUNoYW5nZWQoY29uc3QgUXVhbGlmaWVkTmFtZSYpIGZpbmFsOwogCiAgICAgYm9vbCBy
ZW5kZXJlcklzTmVlZGVkKGNvbnN0IFJlbmRlclN0eWxlJikgZmluYWwgeyByZXR1cm4gZmFsc2U7
IH0KLSAgICB2b2lkIGZpbmlzaGVkSW5zZXJ0aW5nU3VidHJlZSgpIGZpbmFsOworICAgIHZvaWQg
ZGlkRmluaXNoSW5zZXJ0aW5nTm9kZSgpIGZpbmFsOwogCiAgICAgdm9pZCBub3RpZnlQYXJlbnRP
ZlBhdGhDaGFuZ2UoQ29udGFpbmVyTm9kZSopOwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcv
U1ZHUGF0aEVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdQ
YXRoRWxlbWVudC5jcHAJKHJldmlzaW9uIDIyMzQ3NSkKKysrIFNvdXJjZS9XZWJDb3JlL3N2Zy9T
VkdQYXRoRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI3OSwxMSArMjc5LDExIEBAIHZv
aWQgU1ZHUGF0aEVsZW1lbnQ6OmludmFsaWRhdGVNUGF0aERlcGUKICAgICB9CiB9CiAKLU5vZGU6
Okluc2VydGlvbk5vdGlmaWNhdGlvblJlcXVlc3QgU1ZHUGF0aEVsZW1lbnQ6Omluc2VydGVkSW50
byhDb250YWluZXJOb2RlJiByb290UGFyZW50KQorTm9kZTo6SW5zZXJ0ZWRJbnRvUmVzdWx0IFNW
R1BhdGhFbGVtZW50OjppbnNlcnRlZEludG8oSW5zZXJ0aW9uVHlwZSBpbnNlcnRpb25UeXBlLCBD
b250YWluZXJOb2RlJiBwYXJlbnRPZkluc2VydGVkVHJlZSkKIHsKLSAgICBTVkdHcmFwaGljc0Vs
ZW1lbnQ6Omluc2VydGVkSW50byhyb290UGFyZW50KTsKKyAgICBTVkdHcmFwaGljc0VsZW1lbnQ6
Omluc2VydGVkSW50byhpbnNlcnRpb25UeXBlLCBwYXJlbnRPZkluc2VydGVkVHJlZSk7CiAgICAg
aW52YWxpZGF0ZU1QYXRoRGVwZW5kZW5jaWVzKCk7Ci0gICAgcmV0dXJuIEluc2VydGlvbkRvbmU7
CisgICAgcmV0dXJuIEluc2VydGVkSW50b1Jlc3VsdDo6RG9uZTsKIH0KIAogdm9pZCBTVkdQYXRo
RWxlbWVudDo6cmVtb3ZlZEZyb20oQ29udGFpbmVyTm9kZSYgcm9vdFBhcmVudCkKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL3N2Zy9TVkdQYXRoRWxlbWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL3N2Zy9TVkdQYXRoRWxlbWVudC5oCShyZXZpc2lvbiAyMjM0NzUpCisrKyBTb3VyY2Uv
V2ViQ29yZS9zdmcvU1ZHUGF0aEVsZW1lbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMTI0LDcgKzEy
NCw3IEBAIHByaXZhdGU6CiAKICAgICBSZW5kZXJQdHI8UmVuZGVyRWxlbWVudD4gY3JlYXRlRWxl
bWVudFJlbmRlcmVyKFJlbmRlclN0eWxlJiYsIGNvbnN0IFJlbmRlclRyZWVQb3NpdGlvbiYpIGZp
bmFsOwogCi0gICAgTm9kZTo6SW5zZXJ0aW9uTm90aWZpY2F0aW9uUmVxdWVzdCBpbnNlcnRlZElu
dG8oQ29udGFpbmVyTm9kZSYpIGZpbmFsOworICAgIE5vZGU6Okluc2VydGVkSW50b1Jlc3VsdCBp
bnNlcnRlZEludG8oSW5zZXJ0aW9uVHlwZSwgQ29udGFpbmVyTm9kZSYpIGZpbmFsOwogICAgIHZv
aWQgcmVtb3ZlZEZyb20oQ29udGFpbmVyTm9kZSYpIGZpbmFsOwogCiAgICAgdm9pZCBpbnZhbGlk
YXRlTVBhdGhEZXBlbmRlbmNpZXMoKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdTVkdF
bGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHU1ZHRWxlbWVu
dC5jcHAJKHJldmlzaW9uIDIyMzQ3NSkKKysrIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdTVkdFbGVt
ZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDY3LDkgKzQ2Nyw5IEBAIFJlbmRlclB0cjxSZW5k
ZXJFbGVtZW50PiBTVkdTVkdFbGVtZW50OjoKICAgICByZXR1cm4gY3JlYXRlUmVuZGVyZXI8UmVu
ZGVyU1ZHVmlld3BvcnRDb250YWluZXI+KCp0aGlzLCBXVEZNb3ZlKHN0eWxlKSk7CiB9CiAKLU5v
ZGU6Okluc2VydGlvbk5vdGlmaWNhdGlvblJlcXVlc3QgU1ZHU1ZHRWxlbWVudDo6aW5zZXJ0ZWRJ
bnRvKENvbnRhaW5lck5vZGUmIHJvb3RQYXJlbnQpCitOb2RlOjpJbnNlcnRlZEludG9SZXN1bHQg
U1ZHU1ZHRWxlbWVudDo6aW5zZXJ0ZWRJbnRvKEluc2VydGlvblR5cGUgaW5zZXJ0aW9uVHlwZSwg
Q29udGFpbmVyTm9kZSYgcGFyZW50T2ZJbnNlcnRlZFRyZWUpCiB7Ci0gICAgaWYgKHJvb3RQYXJl
bnQuaXNDb25uZWN0ZWQoKSkgeworICAgIGlmIChpbnNlcnRpb25UeXBlLmNvbm5lY3RlZFRvRG9j
dW1lbnQpIHsKICAgICAgICAgZG9jdW1lbnQoKS5hY2Nlc3NTVkdFeHRlbnNpb25zKCkuYWRkVGlt
ZUNvbnRhaW5lcih0aGlzKTsKICAgICAgICAgaWYgKCFkb2N1bWVudCgpLmFjY2Vzc1NWR0V4dGVu
c2lvbnMoKS5hcmVBbmltYXRpb25zUGF1c2VkKCkpCiAgICAgICAgICAgICB1bnBhdXNlQW5pbWF0
aW9ucygpOwpAQCAtNDgwLDcgKzQ4MCw3IEBAIE5vZGU6Okluc2VydGlvbk5vdGlmaWNhdGlvblJl
cXVlc3QgU1ZHU1YKICAgICAgICAgaWYgKCFkb2N1bWVudCgpLnBhcnNpbmcoKSAmJiAhZG9jdW1l
bnQoKS5wcm9jZXNzaW5nTG9hZEV2ZW50KCkgJiYgZG9jdW1lbnQoKS5sb2FkRXZlbnRGaW5pc2hl
ZCgpICYmICFtX3RpbWVDb250YWluZXItPmlzU3RhcnRlZCgpKQogICAgICAgICAgICAgbV90aW1l
Q29udGFpbmVyLT5iZWdpbigpOwogICAgIH0KLSAgICByZXR1cm4gU1ZHR3JhcGhpY3NFbGVtZW50
OjppbnNlcnRlZEludG8ocm9vdFBhcmVudCk7CisgICAgcmV0dXJuIFNWR0dyYXBoaWNzRWxlbWVu
dDo6aW5zZXJ0ZWRJbnRvKGluc2VydGlvblR5cGUsIHBhcmVudE9mSW5zZXJ0ZWRUcmVlKTsKIH0K
IAogdm9pZCBTVkdTVkdFbGVtZW50OjpyZW1vdmVkRnJvbShDb250YWluZXJOb2RlJiByb290UGFy
ZW50KQpJbmRleDogU291cmNlL1dlYkNvcmUvc3ZnL1NWR1NWR0VsZW1lbnQuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHU1ZHRWxlbWVudC5oCShyZXZpc2lvbiAyMjM0NzUp
CisrKyBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHU1ZHRWxlbWVudC5oCSh3b3JraW5nIGNvcHkpCkBA
IC0xNDMsNyArMTQzLDcgQEAgcHJpdmF0ZToKICAgICB2b2lkIHBhcnNlQXR0cmlidXRlKGNvbnN0
IFF1YWxpZmllZE5hbWUmLCBjb25zdCBBdG9taWNTdHJpbmcmKSBvdmVycmlkZTsKICAgICBib29s
IHJlbmRlcmVySXNOZWVkZWQoY29uc3QgUmVuZGVyU3R5bGUmKSBvdmVycmlkZTsKICAgICBSZW5k
ZXJQdHI8UmVuZGVyRWxlbWVudD4gY3JlYXRlRWxlbWVudFJlbmRlcmVyKFJlbmRlclN0eWxlJiYs
IGNvbnN0IFJlbmRlclRyZWVQb3NpdGlvbiYpIG92ZXJyaWRlOwotICAgIEluc2VydGlvbk5vdGlm
aWNhdGlvblJlcXVlc3QgaW5zZXJ0ZWRJbnRvKENvbnRhaW5lck5vZGUmKSBvdmVycmlkZTsKKyAg
ICBJbnNlcnRlZEludG9SZXN1bHQgaW5zZXJ0ZWRJbnRvKEluc2VydGlvblR5cGUsIENvbnRhaW5l
ck5vZGUmKSBvdmVycmlkZTsKICAgICB2b2lkIHJlbW92ZWRGcm9tKENvbnRhaW5lck5vZGUmKSBv
dmVycmlkZTsKICAgICB2b2lkIHN2Z0F0dHJpYnV0ZUNoYW5nZWQoY29uc3QgUXVhbGlmaWVkTmFt
ZSYpIG92ZXJyaWRlOwogICAgIGJvb2wgc2VsZkhhc1JlbGF0aXZlTGVuZ3RocygpIGNvbnN0IG92
ZXJyaWRlOwpJbmRleDogU291cmNlL1dlYkNvcmUvc3ZnL1NWR1NjcmlwdEVsZW1lbnQuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdTY3JpcHRFbGVtZW50LmNwcAkocmV2
aXNpb24gMjIzNDc1KQorKysgU291cmNlL1dlYkNvcmUvc3ZnL1NWR1NjcmlwdEVsZW1lbnQuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC03MSwxNyArNzEsMTcgQEAgdm9pZCBTVkdTY3JpcHRFbGVtZW50
OjpzdmdBdHRyaWJ1dGVDaGFuZwogICAgIFNWR0VsZW1lbnQ6OnN2Z0F0dHJpYnV0ZUNoYW5nZWQo
YXR0ck5hbWUpOwogfQogCi1Ob2RlOjpJbnNlcnRpb25Ob3RpZmljYXRpb25SZXF1ZXN0IFNWR1Nj
cmlwdEVsZW1lbnQ6Omluc2VydGVkSW50byhDb250YWluZXJOb2RlJiByb290UGFyZW50KQorTm9k
ZTo6SW5zZXJ0ZWRJbnRvUmVzdWx0IFNWR1NjcmlwdEVsZW1lbnQ6Omluc2VydGVkSW50byhJbnNl
cnRpb25UeXBlIGluc2VydGlvblR5cGUsIENvbnRhaW5lck5vZGUmIHBhcmVudE9mSW5zZXJ0ZWRU
cmVlKQogewotICAgIFNWR0VsZW1lbnQ6Omluc2VydGVkSW50byhyb290UGFyZW50KTsKLSAgICBp
ZiAocm9vdFBhcmVudC5pc0Nvbm5lY3RlZCgpKQorICAgIFNWR0VsZW1lbnQ6Omluc2VydGVkSW50
byhpbnNlcnRpb25UeXBlLCBwYXJlbnRPZkluc2VydGVkVHJlZSk7CisgICAgaWYgKGluc2VydGlv
blR5cGUuY29ubmVjdGVkVG9Eb2N1bWVudCkKICAgICAgICAgU1ZHRXh0ZXJuYWxSZXNvdXJjZXNS
ZXF1aXJlZDo6aW5zZXJ0ZWRJbnRvRG9jdW1lbnQodGhpcyk7Ci0gICAgcmV0dXJuIHNob3VsZENh
bGxGaW5pc2hlZEluc2VydGluZ1N1YnRyZWUocm9vdFBhcmVudCkgPyBJbnNlcnRpb25TaG91bGRD
YWxsRmluaXNoZWRJbnNlcnRpbmdTdWJ0cmVlIDogSW5zZXJ0aW9uRG9uZTsKKyAgICByZXR1cm4g
U2NyaXB0RWxlbWVudDo6aW5zZXJ0ZWRJbnRvKGluc2VydGlvblR5cGUsIHBhcmVudE9mSW5zZXJ0
ZWRUcmVlKTsKIH0KIAotdm9pZCBTVkdTY3JpcHRFbGVtZW50OjpmaW5pc2hlZEluc2VydGluZ1N1
YnRyZWUoKQordm9pZCBTVkdTY3JpcHRFbGVtZW50OjpkaWRGaW5pc2hJbnNlcnRpbmdOb2RlKCkK
IHsKLSAgICBTY3JpcHRFbGVtZW50OjpmaW5pc2hlZEluc2VydGluZ1N1YnRyZWUoKTsKKyAgICBT
Y3JpcHRFbGVtZW50OjpkaWRGaW5pc2hJbnNlcnRpbmdOb2RlKCk7CiB9CiAKIHZvaWQgU1ZHU2Ny
aXB0RWxlbWVudDo6Y2hpbGRyZW5DaGFuZ2VkKGNvbnN0IENoaWxkQ2hhbmdlJiBjaGFuZ2UpCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHU2NyaXB0RWxlbWVudC5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdTY3JpcHRFbGVtZW50LmgJKHJldmlzaW9uIDIyMzQ3NSkK
KysrIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdTY3JpcHRFbGVtZW50LmgJKHdvcmtpbmcgY29weSkK
QEAgLTQxLDggKzQxLDggQEAgcHJpdmF0ZToKICAgICBTVkdTY3JpcHRFbGVtZW50KGNvbnN0IFF1
YWxpZmllZE5hbWUmLCBEb2N1bWVudCYsIGJvb2wgd2FzSW5zZXJ0ZWRCeVBhcnNlciwgYm9vbCBh
bHJlYWR5U3RhcnRlZCk7CiAKICAgICB2b2lkIHBhcnNlQXR0cmlidXRlKGNvbnN0IFF1YWxpZmll
ZE5hbWUmLCBjb25zdCBBdG9taWNTdHJpbmcmKSBmaW5hbDsKLSAgICBJbnNlcnRpb25Ob3RpZmlj
YXRpb25SZXF1ZXN0IGluc2VydGVkSW50byhDb250YWluZXJOb2RlJikgZmluYWw7Ci0gICAgdm9p
ZCBmaW5pc2hlZEluc2VydGluZ1N1YnRyZWUoKSBmaW5hbDsKKyAgICBJbnNlcnRlZEludG9SZXN1
bHQgaW5zZXJ0ZWRJbnRvKEluc2VydGlvblR5cGUsIENvbnRhaW5lck5vZGUmKSBmaW5hbDsKKyAg
ICB2b2lkIGRpZEZpbmlzaEluc2VydGluZ05vZGUoKSBmaW5hbDsKICAgICB2b2lkIGNoaWxkcmVu
Q2hhbmdlZChjb25zdCBDaGlsZENoYW5nZSYpIGZpbmFsOwogCiAgICAgdm9pZCBzdmdBdHRyaWJ1
dGVDaGFuZ2VkKGNvbnN0IFF1YWxpZmllZE5hbWUmKSBmaW5hbDsKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL3N2Zy9TVkdTdHlsZUVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L3N2Zy9TVkdTdHlsZUVsZW1lbnQuY3BwCShyZXZpc2lvbiAyMjM0NzUpCisrKyBTb3VyY2UvV2Vi
Q29yZS9zdmcvU1ZHU3R5bGVFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTEzLDExICsx
MTMsMTAgQEAgdm9pZCBTVkdTdHlsZUVsZW1lbnQ6OmZpbmlzaFBhcnNpbmdDaGlsZAogICAgIFNW
R0VsZW1lbnQ6OmZpbmlzaFBhcnNpbmdDaGlsZHJlbigpOwogfQogCi1Ob2RlOjpJbnNlcnRpb25O
b3RpZmljYXRpb25SZXF1ZXN0IFNWR1N0eWxlRWxlbWVudDo6aW5zZXJ0ZWRJbnRvKENvbnRhaW5l
ck5vZGUmIHJvb3RQYXJlbnQpCitOb2RlOjpJbnNlcnRlZEludG9SZXN1bHQgU1ZHU3R5bGVFbGVt
ZW50OjppbnNlcnRlZEludG8oSW5zZXJ0aW9uVHlwZSBpbnNlcnRpb25UeXBlLCBDb250YWluZXJO
b2RlJiBwYXJlbnRPZkluc2VydGVkVHJlZSkKIHsKLSAgICBib29sIHdhc0luRG9jdW1lbnQgPSBp
c0Nvbm5lY3RlZCgpOwotICAgIGF1dG8gcmVzdWx0ID0gU1ZHRWxlbWVudDo6aW5zZXJ0ZWRJbnRv
KHJvb3RQYXJlbnQpOwotICAgIGlmIChyb290UGFyZW50LmlzQ29ubmVjdGVkKCkgJiYgIXdhc0lu
RG9jdW1lbnQpCisgICAgYXV0byByZXN1bHQgPSBTVkdFbGVtZW50OjppbnNlcnRlZEludG8oaW5z
ZXJ0aW9uVHlwZSwgcGFyZW50T2ZJbnNlcnRlZFRyZWUpOworICAgIGlmIChpbnNlcnRpb25UeXBl
LmNvbm5lY3RlZFRvRG9jdW1lbnQpCiAgICAgICAgIG1fc3R5bGVTaGVldE93bmVyLmluc2VydGVk
SW50b0RvY3VtZW50KCp0aGlzKTsKICAgICByZXR1cm4gcmVzdWx0OwogfQpJbmRleDogU291cmNl
L1dlYkNvcmUvc3ZnL1NWR1N0eWxlRWxlbWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL3N2Zy9TVkdTdHlsZUVsZW1lbnQuaAkocmV2aXNpb24gMjIzNDc1KQorKysgU291cmNlL1dl
YkNvcmUvc3ZnL1NWR1N0eWxlRWxlbWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC00Niw3ICs0Niw3
IEBAIHByaXZhdGU6CiAgICAgU1ZHU3R5bGVFbGVtZW50KGNvbnN0IFF1YWxpZmllZE5hbWUmLCBE
b2N1bWVudCYsIGJvb2wgY3JlYXRlZEJ5UGFyc2VyKTsKIAogICAgIHZvaWQgcGFyc2VBdHRyaWJ1
dGUoY29uc3QgUXVhbGlmaWVkTmFtZSYsIGNvbnN0IEF0b21pY1N0cmluZyYpIGZpbmFsOwotICAg
IEluc2VydGlvbk5vdGlmaWNhdGlvblJlcXVlc3QgaW5zZXJ0ZWRJbnRvKENvbnRhaW5lck5vZGUm
KSBmaW5hbDsKKyAgICBJbnNlcnRlZEludG9SZXN1bHQgaW5zZXJ0ZWRJbnRvKEluc2VydGlvblR5
cGUsIENvbnRhaW5lck5vZGUmKSBmaW5hbDsKICAgICB2b2lkIHJlbW92ZWRGcm9tKENvbnRhaW5l
ck5vZGUmKSBmaW5hbDsKICAgICB2b2lkIGNoaWxkcmVuQ2hhbmdlZChjb25zdCBDaGlsZENoYW5n
ZSYpIGZpbmFsOwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHVFJlZkVsZW1lbnQuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdUUmVmRWxlbWVudC5jcHAJKHJl
dmlzaW9uIDIyMzQ3NSkKKysrIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdUUmVmRWxlbWVudC5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTI1NCwxNSArMjU0LDE1IEBAIHZvaWQgU1ZHVFJlZkVsZW1lbnQ6
OmJ1aWxkUGVuZGluZ1Jlc291cmMKICAgICB1cGRhdGVSZWZlcmVuY2VkVGV4dCh0YXJnZXQuZ2V0
KCkpOwogfQogCi1Ob2RlOjpJbnNlcnRpb25Ob3RpZmljYXRpb25SZXF1ZXN0IFNWR1RSZWZFbGVt
ZW50OjppbnNlcnRlZEludG8oQ29udGFpbmVyTm9kZSYgcm9vdFBhcmVudCkKK05vZGU6Okluc2Vy
dGVkSW50b1Jlc3VsdCBTVkdUUmVmRWxlbWVudDo6aW5zZXJ0ZWRJbnRvKEluc2VydGlvblR5cGUg
aW5zZXJ0aW9uVHlwZSwgQ29udGFpbmVyTm9kZSYgcGFyZW50T2ZJbnNlcnRlZFRyZWUpCiB7Ci0g
ICAgU1ZHRWxlbWVudDo6aW5zZXJ0ZWRJbnRvKHJvb3RQYXJlbnQpOwotICAgIGlmIChyb290UGFy
ZW50LmlzQ29ubmVjdGVkKCkpCi0gICAgICAgIHJldHVybiBJbnNlcnRpb25TaG91bGRDYWxsRmlu
aXNoZWRJbnNlcnRpbmdTdWJ0cmVlOwotICAgIHJldHVybiBJbnNlcnRpb25Eb25lOworICAgIFNW
R0VsZW1lbnQ6Omluc2VydGVkSW50byhpbnNlcnRpb25UeXBlLCBwYXJlbnRPZkluc2VydGVkVHJl
ZSk7CisgICAgaWYgKGluc2VydGlvblR5cGUuY29ubmVjdGVkVG9Eb2N1bWVudCkKKyAgICAgICAg
cmV0dXJuIEluc2VydGVkSW50b1Jlc3VsdDo6TmVlZHNQb3N0SW5zZXJ0aW9uQ2FsbGJhY2s7Cisg
ICAgcmV0dXJuIEluc2VydGVkSW50b1Jlc3VsdDo6RG9uZTsKIH0KIAotdm9pZCBTVkdUUmVmRWxl
bWVudDo6ZmluaXNoZWRJbnNlcnRpbmdTdWJ0cmVlKCkKK3ZvaWQgU1ZHVFJlZkVsZW1lbnQ6OmRp
ZEZpbmlzaEluc2VydGluZ05vZGUoKQogewogICAgIGJ1aWxkUGVuZGluZ1Jlc291cmNlKCk7CiB9
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHVFJlZkVsZW1lbnQuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHVFJlZkVsZW1lbnQuaAkocmV2aXNpb24gMjIzNDc1KQor
KysgU291cmNlL1dlYkNvcmUvc3ZnL1NWR1RSZWZFbGVtZW50LmgJKHdvcmtpbmcgY29weSkKQEAg
LTQ0LDkgKzQ0LDkgQEAgcHJpdmF0ZToKICAgICBib29sIGNoaWxkU2hvdWxkQ3JlYXRlUmVuZGVy
ZXIoY29uc3QgTm9kZSYpIGNvbnN0IG92ZXJyaWRlOwogICAgIGJvb2wgcmVuZGVyZXJJc05lZWRl
ZChjb25zdCBSZW5kZXJTdHlsZSYpIG92ZXJyaWRlOwogCi0gICAgSW5zZXJ0aW9uTm90aWZpY2F0
aW9uUmVxdWVzdCBpbnNlcnRlZEludG8oQ29udGFpbmVyTm9kZSYpIG92ZXJyaWRlOworICAgIElu
c2VydGVkSW50b1Jlc3VsdCBpbnNlcnRlZEludG8oSW5zZXJ0aW9uVHlwZSwgQ29udGFpbmVyTm9k
ZSYpIG92ZXJyaWRlOwogICAgIHZvaWQgcmVtb3ZlZEZyb20oQ29udGFpbmVyTm9kZSYpIG92ZXJy
aWRlOwotICAgIHZvaWQgZmluaXNoZWRJbnNlcnRpbmdTdWJ0cmVlKCkgb3ZlcnJpZGU7CisgICAg
dm9pZCBkaWRGaW5pc2hJbnNlcnRpbmdOb2RlKCkgb3ZlcnJpZGU7CiAKICAgICB2b2lkIGNsZWFy
VGFyZ2V0KCkgb3ZlcnJpZGU7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdUZXh0UGF0
aEVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdUZXh0UGF0
aEVsZW1lbnQuY3BwCShyZXZpc2lvbiAyMjM0NzUpCisrKyBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZH
VGV4dFBhdGhFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTczLDEzICsxNzMsMTMgQEAg
dm9pZCBTVkdUZXh0UGF0aEVsZW1lbnQ6OmJ1aWxkUGVuZGluZ1JlcwogICAgIH0KIH0KIAotTm9k
ZTo6SW5zZXJ0aW9uTm90aWZpY2F0aW9uUmVxdWVzdCBTVkdUZXh0UGF0aEVsZW1lbnQ6Omluc2Vy
dGVkSW50byhDb250YWluZXJOb2RlJiByb290UGFyZW50KQorTm9kZTo6SW5zZXJ0ZWRJbnRvUmVz
dWx0IFNWR1RleHRQYXRoRWxlbWVudDo6aW5zZXJ0ZWRJbnRvKEluc2VydGlvblR5cGUgaW5zZXJ0
aW9uVHlwZSwgQ29udGFpbmVyTm9kZSYgcGFyZW50T2ZJbnNlcnRlZFRyZWUpCiB7Ci0gICAgU1ZH
VGV4dENvbnRlbnRFbGVtZW50OjppbnNlcnRlZEludG8ocm9vdFBhcmVudCk7Ci0gICAgcmV0dXJu
IEluc2VydGlvblNob3VsZENhbGxGaW5pc2hlZEluc2VydGluZ1N1YnRyZWU7CisgICAgU1ZHVGV4
dENvbnRlbnRFbGVtZW50OjppbnNlcnRlZEludG8oaW5zZXJ0aW9uVHlwZSwgcGFyZW50T2ZJbnNl
cnRlZFRyZWUpOworICAgIHJldHVybiBJbnNlcnRlZEludG9SZXN1bHQ6Ok5lZWRzUG9zdEluc2Vy
dGlvbkNhbGxiYWNrOwogfQogCi12b2lkIFNWR1RleHRQYXRoRWxlbWVudDo6ZmluaXNoZWRJbnNl
cnRpbmdTdWJ0cmVlKCkKK3ZvaWQgU1ZHVGV4dFBhdGhFbGVtZW50OjpkaWRGaW5pc2hJbnNlcnRp
bmdOb2RlKCkKIHsKICAgICBidWlsZFBlbmRpbmdSZXNvdXJjZSgpOwogfQpJbmRleDogU291cmNl
L1dlYkNvcmUvc3ZnL1NWR1RleHRQYXRoRWxlbWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL3N2Zy9TVkdUZXh0UGF0aEVsZW1lbnQuaAkocmV2aXNpb24gMjIzNDc1KQorKysgU291
cmNlL1dlYkNvcmUvc3ZnL1NWR1RleHRQYXRoRWxlbWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC0x
MTEsNyArMTExLDcgQEAgcHVibGljOgogICAgIHN0YXRpYyBSZWY8U1ZHVGV4dFBhdGhFbGVtZW50
PiBjcmVhdGUoY29uc3QgUXVhbGlmaWVkTmFtZSYsIERvY3VtZW50Jik7CiAKIHByb3RlY3RlZDoK
LSAgICB2b2lkIGZpbmlzaGVkSW5zZXJ0aW5nU3VidHJlZSgpIG92ZXJyaWRlOworICAgIHZvaWQg
ZGlkRmluaXNoSW5zZXJ0aW5nTm9kZSgpIG92ZXJyaWRlOwogCiBwcml2YXRlOgogICAgIFNWR1Rl
eHRQYXRoRWxlbWVudChjb25zdCBRdWFsaWZpZWROYW1lJiwgRG9jdW1lbnQmKTsKQEAgLTEyMSw3
ICsxMjEsNyBAQCBwcml2YXRlOgogICAgIHZvaWQgY2xlYXJSZXNvdXJjZVJlZmVyZW5jZXMoKTsK
IAogICAgIHZvaWQgYnVpbGRQZW5kaW5nUmVzb3VyY2UoKSBvdmVycmlkZTsKLSAgICBJbnNlcnRp
b25Ob3RpZmljYXRpb25SZXF1ZXN0IGluc2VydGVkSW50byhDb250YWluZXJOb2RlJikgb3ZlcnJp
ZGU7CisgICAgSW5zZXJ0ZWRJbnRvUmVzdWx0IGluc2VydGVkSW50byhJbnNlcnRpb25UeXBlLCBD
b250YWluZXJOb2RlJikgb3ZlcnJpZGU7CiAgICAgdm9pZCByZW1vdmVkRnJvbShDb250YWluZXJO
b2RlJikgb3ZlcnJpZGU7CiAKICAgICBzdGF0aWMgYm9vbCBpc1N1cHBvcnRlZEF0dHJpYnV0ZShj
b25zdCBRdWFsaWZpZWROYW1lJik7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHVGl0bGVF
bGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHVGl0bGVFbGVt
ZW50LmNwcAkocmV2aXNpb24gMjIzNDc1KQorKysgU291cmNlL1dlYkNvcmUvc3ZnL1NWR1RpdGxl
RWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM4LDExICszOCwxMSBAQCBSZWY8U1ZHVGl0
bGVFbGVtZW50PiBTVkdUaXRsZUVsZW1lbnQ6OmNyCiAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcg
U1ZHVGl0bGVFbGVtZW50KHRhZ05hbWUsIGRvY3VtZW50KSk7CiB9CiAKLU5vZGU6Okluc2VydGlv
bk5vdGlmaWNhdGlvblJlcXVlc3QgU1ZHVGl0bGVFbGVtZW50OjppbnNlcnRlZEludG8oQ29udGFp
bmVyTm9kZSYgaW5zZXJ0aW9uUG9pbnQpCitOb2RlOjpJbnNlcnRlZEludG9SZXN1bHQgU1ZHVGl0
bGVFbGVtZW50OjppbnNlcnRlZEludG8oSW5zZXJ0aW9uVHlwZSBpbnNlcnRpb25UeXBlLCBDb250
YWluZXJOb2RlJiBwYXJlbnRPZkluc2VydGVkVHJlZSkKIHsKLSAgICBTVkdFbGVtZW50OjppbnNl
cnRlZEludG8oaW5zZXJ0aW9uUG9pbnQpOworICAgIFNWR0VsZW1lbnQ6Omluc2VydGVkSW50byhp
bnNlcnRpb25UeXBlLCBwYXJlbnRPZkluc2VydGVkVHJlZSk7CiAgICAgZG9jdW1lbnQoKS50aXRs
ZUVsZW1lbnRBZGRlZCgqdGhpcyk7Ci0gICAgcmV0dXJuIEluc2VydGlvbkRvbmU7CisgICAgcmV0
dXJuIEluc2VydGVkSW50b1Jlc3VsdDo6RG9uZTsKIH0KIAogdm9pZCBTVkdUaXRsZUVsZW1lbnQ6
OnJlbW92ZWRGcm9tKENvbnRhaW5lck5vZGUmIGluc2VydGlvblBvaW50KQpJbmRleDogU291cmNl
L1dlYkNvcmUvc3ZnL1NWR1RpdGxlRWxlbWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL3N2Zy9TVkdUaXRsZUVsZW1lbnQuaAkocmV2aXNpb24gMjIzNDc1KQorKysgU291cmNlL1dl
YkNvcmUvc3ZnL1NWR1RpdGxlRWxlbWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMiw3ICszMiw3
IEBAIHB1YmxpYzoKIHByaXZhdGU6CiAgICAgU1ZHVGl0bGVFbGVtZW50KGNvbnN0IFF1YWxpZmll
ZE5hbWUmLCBEb2N1bWVudCYpOwogCi0gICAgSW5zZXJ0aW9uTm90aWZpY2F0aW9uUmVxdWVzdCBp
bnNlcnRlZEludG8oQ29udGFpbmVyTm9kZSYpIGZpbmFsOworICAgIEluc2VydGVkSW50b1Jlc3Vs
dCBpbnNlcnRlZEludG8oSW5zZXJ0aW9uVHlwZSwgQ29udGFpbmVyTm9kZSYpIGZpbmFsOwogICAg
IHZvaWQgcmVtb3ZlZEZyb20oQ29udGFpbmVyTm9kZSYpIGZpbmFsOwogICAgIHZvaWQgY2hpbGRy
ZW5DaGFuZ2VkKGNvbnN0IENoaWxkQ2hhbmdlJikgZmluYWw7CiAKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL3N2Zy9TVkdVc2VFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9z
dmcvU1ZHVXNlRWxlbWVudC5jcHAJKHJldmlzaW9uIDIyMzQ3NSkKKysrIFNvdXJjZS9XZWJDb3Jl
L3N2Zy9TVkdVc2VFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTAzLDE1ICsxMDMsMTUg
QEAgdm9pZCBTVkdVc2VFbGVtZW50OjpwYXJzZUF0dHJpYnV0ZShjb25zdAogICAgIFNWR1VSSVJl
ZmVyZW5jZTo6cGFyc2VBdHRyaWJ1dGUobmFtZSwgdmFsdWUpOwogfQogCi1Ob2RlOjpJbnNlcnRp
b25Ob3RpZmljYXRpb25SZXF1ZXN0IFNWR1VzZUVsZW1lbnQ6Omluc2VydGVkSW50byhDb250YWlu
ZXJOb2RlJiByb290UGFyZW50KQorTm9kZTo6SW5zZXJ0ZWRJbnRvUmVzdWx0IFNWR1VzZUVsZW1l
bnQ6Omluc2VydGVkSW50byhJbnNlcnRpb25UeXBlIGluc2VydGlvblR5cGUsIENvbnRhaW5lck5v
ZGUmIHBhcmVudE9mSW5zZXJ0ZWRUcmVlKQogewotICAgIFNWR0dyYXBoaWNzRWxlbWVudDo6aW5z
ZXJ0ZWRJbnRvKHJvb3RQYXJlbnQpOwotICAgIGlmIChpc0Nvbm5lY3RlZCgpKSB7CisgICAgU1ZH
R3JhcGhpY3NFbGVtZW50OjppbnNlcnRlZEludG8oaW5zZXJ0aW9uVHlwZSwgcGFyZW50T2ZJbnNl
cnRlZFRyZWUpOworICAgIGlmIChpbnNlcnRpb25UeXBlLmNvbm5lY3RlZFRvRG9jdW1lbnQpIHsK
ICAgICAgICAgU1ZHRXh0ZXJuYWxSZXNvdXJjZXNSZXF1aXJlZDo6aW5zZXJ0ZWRJbnRvRG9jdW1l
bnQodGhpcyk7CiAgICAgICAgIGludmFsaWRhdGVTaGFkb3dUcmVlKCk7CiAgICAgICAgIHVwZGF0
ZUV4dGVybmFsRG9jdW1lbnQoKTsKICAgICB9Ci0gICAgcmV0dXJuIEluc2VydGlvbkRvbmU7Cisg
ICAgcmV0dXJuIEluc2VydGVkSW50b1Jlc3VsdDo6RG9uZTsKIH0KIAogdm9pZCBTVkdVc2VFbGVt
ZW50OjpyZW1vdmVkRnJvbShDb250YWluZXJOb2RlJiByb290UGFyZW50KQpJbmRleDogU291cmNl
L1dlYkNvcmUvc3ZnL1NWR1VzZUVsZW1lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9zdmcvU1ZHVXNlRWxlbWVudC5oCShyZXZpc2lvbiAyMjM0NzUpCisrKyBTb3VyY2UvV2ViQ29y
ZS9zdmcvU1ZHVXNlRWxlbWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC01Nyw3ICs1Nyw3IEBAIHBy
aXZhdGU6CiAgICAgU1ZHVXNlRWxlbWVudChjb25zdCBRdWFsaWZpZWROYW1lJiwgRG9jdW1lbnQm
KTsKIAogICAgIGJvb2wgaXNWYWxpZCgpIGNvbnN0IG92ZXJyaWRlOwotICAgIEluc2VydGlvbk5v
dGlmaWNhdGlvblJlcXVlc3QgaW5zZXJ0ZWRJbnRvKENvbnRhaW5lck5vZGUmKSBvdmVycmlkZTsK
KyAgICBJbnNlcnRlZEludG9SZXN1bHQgaW5zZXJ0ZWRJbnRvKEluc2VydGlvblR5cGUsIENvbnRh
aW5lck5vZGUmKSBvdmVycmlkZTsKICAgICB2b2lkIHJlbW92ZWRGcm9tKENvbnRhaW5lck5vZGUm
KSBvdmVycmlkZTsKICAgICB2b2lkIGJ1aWxkUGVuZGluZ1Jlc291cmNlKCkgb3ZlcnJpZGU7CiAg
ICAgdm9pZCBwYXJzZUF0dHJpYnV0ZShjb25zdCBRdWFsaWZpZWROYW1lJiwgY29uc3QgQXRvbWlj
U3RyaW5nJikgb3ZlcnJpZGU7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcvYW5pbWF0aW9uL1NW
R1NNSUxFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcvYW5pbWF0
aW9uL1NWR1NNSUxFbGVtZW50LmNwcAkocmV2aXNpb24gMjIzNDc1KQorKysgU291cmNlL1dlYkNv
cmUvc3ZnL2FuaW1hdGlvbi9TVkdTTUlMRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI1
MiwxMSArMjUyLDExIEBAIHZvaWQgU1ZHU01JTEVsZW1lbnQ6OnJlc2V0KCkKICAgICByZXNvbHZl
Rmlyc3RJbnRlcnZhbCgpOwogfQogCi1Ob2RlOjpJbnNlcnRpb25Ob3RpZmljYXRpb25SZXF1ZXN0
IFNWR1NNSUxFbGVtZW50OjppbnNlcnRlZEludG8oQ29udGFpbmVyTm9kZSYgcm9vdFBhcmVudCkK
K05vZGU6Okluc2VydGVkSW50b1Jlc3VsdCBTVkdTTUlMRWxlbWVudDo6aW5zZXJ0ZWRJbnRvKElu
c2VydGlvblR5cGUgaW5zZXJ0aW9uVHlwZSwgQ29udGFpbmVyTm9kZSYgcGFyZW50T2ZJbnNlcnRl
ZFRyZWUpCiB7Ci0gICAgU1ZHRWxlbWVudDo6aW5zZXJ0ZWRJbnRvKHJvb3RQYXJlbnQpOwotICAg
IGlmICghcm9vdFBhcmVudC5pc0Nvbm5lY3RlZCgpKQotICAgICAgICByZXR1cm4gSW5zZXJ0aW9u
RG9uZTsKKyAgICBTVkdFbGVtZW50OjppbnNlcnRlZEludG8oaW5zZXJ0aW9uVHlwZSwgcGFyZW50
T2ZJbnNlcnRlZFRyZWUpOworICAgIGlmICghaW5zZXJ0aW9uVHlwZS5jb25uZWN0ZWRUb0RvY3Vt
ZW50KQorICAgICAgICByZXR1cm4gSW5zZXJ0ZWRJbnRvUmVzdWx0OjpEb25lOwogCiAgICAgLy8g
VmVyaWZ5IHdlIGFyZSBub3QgaW4gPHVzZT4gaW5zdGFuY2UgdHJlZS4KICAgICBBU1NFUlQoIWlz
SW5TaGFkb3dUcmVlKCkpOwpAQCAtMjY1LDcgKzI2NSw3IEBAIE5vZGU6Okluc2VydGlvbk5vdGlm
aWNhdGlvblJlcXVlc3QgU1ZHU00KIAogICAgIFNWR1NWR0VsZW1lbnQqIG93bmVyID0gb3duZXJT
VkdFbGVtZW50KCk7CiAgICAgaWYgKCFvd25lcikKLSAgICAgICAgcmV0dXJuIEluc2VydGlvbkRv
bmU7CisgICAgICAgIHJldHVybiBJbnNlcnRlZEludG9SZXN1bHQ6OkRvbmU7CiAKICAgICBtX3Rp
bWVDb250YWluZXIgPSAmb3duZXItPnRpbWVDb250YWluZXIoKTsKICAgICBtX3RpbWVDb250YWlu
ZXItPnNldERvY3VtZW50T3JkZXJJbmRleGVzRGlydHkoKTsKQEAgLTI4MCwxMCArMjgwLDEwIEBA
IE5vZGU6Okluc2VydGlvbk5vdGlmaWNhdGlvblJlcXVlc3QgU1ZHU00KICAgICBpZiAobV90aW1l
Q29udGFpbmVyKQogICAgICAgICBtX3RpbWVDb250YWluZXItPm5vdGlmeUludGVydmFsc0NoYW5n
ZWQoKTsKIAotICAgIHJldHVybiBJbnNlcnRpb25TaG91bGRDYWxsRmluaXNoZWRJbnNlcnRpbmdT
dWJ0cmVlOworICAgIHJldHVybiBJbnNlcnRlZEludG9SZXN1bHQ6Ok5lZWRzUG9zdEluc2VydGlv
bkNhbGxiYWNrOwogfQogCi12b2lkIFNWR1NNSUxFbGVtZW50OjpmaW5pc2hlZEluc2VydGluZ1N1
YnRyZWUoKQordm9pZCBTVkdTTUlMRWxlbWVudDo6ZGlkRmluaXNoSW5zZXJ0aW5nTm9kZSgpCiB7
CiAgICAgYnVpbGRQZW5kaW5nUmVzb3VyY2UoKTsKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N2
Zy9hbmltYXRpb24vU1ZHU01JTEVsZW1lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9zdmcvYW5pbWF0aW9uL1NWR1NNSUxFbGVtZW50LmgJKHJldmlzaW9uIDIyMzQ3NSkKKysrIFNv
dXJjZS9XZWJDb3JlL3N2Zy9hbmltYXRpb24vU1ZHU01JTEVsZW1lbnQuaAkod29ya2luZyBjb3B5
KQpAQCAtNDcsNyArNDcsNyBAQCBwdWJsaWM6CiAKICAgICB2b2lkIHBhcnNlQXR0cmlidXRlKGNv
bnN0IFF1YWxpZmllZE5hbWUmLCBjb25zdCBBdG9taWNTdHJpbmcmKSBvdmVycmlkZTsKICAgICB2
b2lkIHN2Z0F0dHJpYnV0ZUNoYW5nZWQoY29uc3QgUXVhbGlmaWVkTmFtZSYpIG92ZXJyaWRlOwot
ICAgIEluc2VydGlvbk5vdGlmaWNhdGlvblJlcXVlc3QgaW5zZXJ0ZWRJbnRvKENvbnRhaW5lck5v
ZGUmKSBvdmVycmlkZTsKKyAgICBJbnNlcnRlZEludG9SZXN1bHQgaW5zZXJ0ZWRJbnRvKEluc2Vy
dGlvblR5cGUsIENvbnRhaW5lck5vZGUmKSBvdmVycmlkZTsKICAgICB2b2lkIHJlbW92ZWRGcm9t
KENvbnRhaW5lck5vZGUmKSBvdmVycmlkZTsKICAgICAKICAgICB2aXJ0dWFsIGJvb2wgaGFzVmFs
aWRBdHRyaWJ1dGVUeXBlKCkgPSAwOwpAQCAtMTE4LDcgKzExOCw3IEBAIHByb3RlY3RlZDoKICAg
ICB2aXJ0dWFsIHZvaWQgc2V0VGFyZ2V0RWxlbWVudChTVkdFbGVtZW50Kik7CiAgICAgdmlydHVh
bCB2b2lkIHNldEF0dHJpYnV0ZU5hbWUoY29uc3QgUXVhbGlmaWVkTmFtZSYpOwogCi0gICAgdm9p
ZCBmaW5pc2hlZEluc2VydGluZ1N1YnRyZWUoKSBvdmVycmlkZTsKKyAgICB2b2lkIGRpZEZpbmlz
aEluc2VydGluZ05vZGUoKSBvdmVycmlkZTsKIAogcHJpdmF0ZToKICAgICB2b2lkIGJ1aWxkUGVu
ZGluZ1Jlc291cmNlKCkgb3ZlcnJpZGU7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>324105</attachid>
            <date>2017-10-18 01:16:16 -0700</date>
            <delta_ts>2017-10-18 05:24:00 -0700</delta_ts>
            <desc>Cleanup</desc>
            <filename>bug-178431-20171018011615.patch</filename>
            <type>text/plain</type>
            <size>101884</size>
            <attacher name="Ryosuke Niwa">rniwa</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDIyMzQ3NSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE5NCBAQAorMjAxNy0xMC0xNyAgUnlvc3Vr
ZSBOaXdhICA8cm5pd2FAd2Via2l0Lm9yZz4KKworICAgICAgICBBZGQgYW4gYXJndW1lbnQgaW5k
aWNhdGluZyB0aGUgdHlwZSBvZiBpbnNlcnRpb24gdG8gTm9kZTo6aW5zZXJ0ZWRJbnRvCisgICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNzg0MzEKKworICAg
ICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBBZGRlZCBJbnNlcnRp
b25UeXBlIGFzIHRoZSBmaXJzdCBhcmd1bWVudCB0byBOb2RlOjppbnNlcnRlZEludG8sIHdoaWNo
IGNvbnRhaW5zIHR3byBib29sZWFucyBpbmRpY2F0aW5nCisgICAgICAgIHdoZXRoZXIgdGhlIG5v
ZGUganVzdCBiZWNvbWUgbmV3bHkgY29ubmVjdGVkIHRvIGEgZG9jdW1lbnQsIGFuZCB3aGV0aGVy
IG5vZGUncyB0cmVlIHNjb3BlIGhhZCBjaGFuZ2VkIG9yIG5vdC4KKworICAgICAgICBUaGVzZSBi
b29sZWFuIGZsYWdzIHNpbXBsaWZpZSB0aGUgbG9naWMgaW4gaW5zZXJ0ZWRJbnRvIGltcGxlbWVu
dGF0aW9ucywgYW5kIGFyZSByZXF1aXJlZCB0byBoYXZlIGEgYmV0dGVyCisgICAgICAgIGd1YXJh
bnRlZSBhYm91dCB0aGUgY29ycmVjdG5lc3Mgb2Ygbm9kZSBmbGFncyBkdXJpbmcgY2FsbHMgdG8g
aW5zZXJ0ZWRJbnRvLiBSaWdodCBub3csIGlzQ29ubmVjdGVkKCkgYW5kCisgICAgICAgIGlzSW5T
aGFkb3dUcmVlKCkgYXJlIGJvdGggb3V0ZGF0ZWQgdW50aWwgTm9kZTo6aW5zZXJ0ZWRJbnRvIGlz
IGNhbGxlZC4KKworICAgICAgICBBbHNvIHJlbmFtZWQgdGhlIHNlY29uZCBhcmd1bWVudCBmcm9t
IGluc2VydGlvblBvaW50IHRvIHBhcmVudE9mSW5zZXJ0ZWRUcmVlIHRvIG1ha2UgdGhlIHNlbWFu
dGljcyBjbGVhciwKKyAgICAgICAgYW5kIHJlbmFtZWQgZmluaXNoZWRJbnNlcnRpbmdTdWJ0cmVl
IHRvIGRpZEZpbmlzaEluc2VydGluZ05vZGUsIGFuZCByZW5hbWVkIEluc2VydGlvbk5vdGlmaWNh
dGlvblJlcXVlc3QKKyAgICAgICAgdG8gSW5zZXJ0ZWRJbnRvUmVzdWx0IHVzaW5nIGVudW0gY2xh
c3MuCisKKyAgICAgICAgTm90ZSB0aGF0IGluIHNvbWUgaW1wbGVtZW50YXRpb25zIG9mIGluc2Vy
dGVkSW50bywgd2UgY2hlY2sgd2hldGhlciBpc0Nvbm5lY3RlZCgpIHdhcyBmYWxzZSB0byBkZWNp
ZGUgd2hldGhlcgorICAgICAgICB0aGUgbm9kZSBpcyBuZXdseSBjb25uZWN0ZWQgdG8gYSBkb2N1
bWVudC4gVGhpcyBleHRyYSBjaGVjayBpcyBubyBsb25nZXIgbmVjZXNzYXJ5IHNpbmNlIG5vIG5v
ZGUgd2lsbCBiZSBpbnNlcnRlZAorICAgICAgICBpbnRvIGEgZG9jdW1lbnQgd2l0aG91dCBmaXJz
dCBiZWluZyBjb21wbGV0ZWx5IHJlbW92ZWQgYWZ0ZXIgcjIyMzQ1OC4KKworICAgICAgICBObyBu
ZXcgdGVzdHMgc2luY2UgdGhlcmUgc2hvdWxkIGJlIG5vIGJlaGF2aW9yYWwgY2hhbmdlcy4KKwor
ICAgICAgICAqIGRvbS9Db250YWluZXJOb2RlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNvbnRh
aW5lck5vZGU6Om5vdGlmeUNoaWxkSW5zZXJ0ZWQpOgorICAgICAgICAqIGRvbS9Db250YWluZXJO
b2RlQWxnb3JpdGhtcy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpub3RpZnlOb2RlSW5zZXJ0ZWRJ
bnRvRG9jdW1lbnQpOiBSZXBsYWNlZCB0aGUgY2hlY2sgdGhhdCB0aGUgbm9kZSBoYWQgbm90IGJl
ZW4gZGlzY29ubmVjdGVkIGJ5IHNjcmlwdHMKKyAgICAgICAgYnkgYSByZWxlYXNlIGFzc2VydCBu
b3cgdGhhdCB3ZSBiZWxpZXZlIHdlJ3ZlIGVsaW1pbmF0ZWQgYWxsIGNhdXNlcyBvZiB0aGVzZSB1
bndhbnRlZCBET00gbXV0YXRpb25zIGluIHIyMjM0NTguCisgICAgICAgIChXZWJDb3JlOjpub3Rp
ZnlOb2RlSW5zZXJ0ZWRJbnRvVHJlZSk6IFJlbW92ZWQgTm9FdmVudERpc3BhdGNoQXNzZXJ0aW9u
IHNpbmNlIG5vdGlmeUNoaWxkTm9kZUluc2VydGVkIGhhcyBpdAorICAgICAgICBhbHJlYWR5IHNp
bmNlIHIyMjM0NTguCisgICAgICAgIChXZWJDb3JlOjpub3RpZnlDaGlsZE5vZGVJbnNlcnRlZCk6
IE1hZGUgdGhpcyBmdW5jdGlvbiByZXR1cm4gTm9kZVZlY3RvciAoY29weSBlbGlzaW9uKS4KKyAg
ICAgICAgKiBkb20vQ29udGFpbmVyTm9kZUFsZ29yaXRobXMuaDoKKyAgICAgICAgKiBkb20vRWxl
bWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpFbGVtZW50OjppbnNlcnRlZEludG8pOiBVc2Ug
aW5zZXJ0aW9uVHlwZS5jb25uZWN0ZWRUb0RvY3VtZW50IHRvIGRldGVjdCB3aGVuIHRoaXMgZWxl
bWVudCBoYWQgYmVjb21lCisgICAgICAgIGNvbm5lY3RlZCB0byBzb21lIGRvY3VtZW50LiBTaW1p
bGFybHksIHVzZSBpbnNlcnRpb25UeXBlLnRyZWVTY29wZUNoYW5nZWQgdG8gZGV0ZWN0IHdoZW4g
dGhpcyBlbGVtZW50IGhhZCBiZWVuCisgICAgICAgIGluc2VydGVkIGludG8gYSBuZXcgdHJlZSBz
Y29wZS4gUmVtb3ZlZCB0aGUgY29tbWVudCB3aGljaCBiZWNhbWUgb2Jzb2xldGUgZHVlIHRvIHRo
aXMgY2xlYW51cC4KKyAgICAgICAgKFdlYkNvcmU6OkVsZW1lbnQ6OmFkZFNoYWRvd1Jvb3QpOiBT
aW1wbGlmaWVkIHRoZSBjb2RlIGhlcmUgc2luY2Ugd2UgbmV2ZXIgYXR0YWNoIGEgU2hhZG93Um9v
dCB3aXRoIGNoaWxkcmVuLgorICAgICAgICAqIGRvbS9FbGVtZW50Lmg6CisgICAgICAgICogZG9t
L05vZGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Tm9kZTo6aW5zZXJ0ZWRJbnRvKToKKyAgICAg
ICAgKiBkb20vTm9kZS5oOgorICAgICAgICAoV2ViQ29yZTo6Tm9kZTo6SW5zZXJ0ZWRJbnRvUmVz
dWx0KTogUmVuYW1lZCBmcm9tIEluc2VydGlvbk5vdGlmaWNhdGlvblJlcXVlc3QsIGFuZCB0dXJu
ZWQgaW50byBhbiBlbnVtIGNsYXNzLgorICAgICAgICAoV2ViQ29yZTo6Tm9kZTo6SW5zZXJ0aW9u
VHlwZSk6IEFkZGVkLiBXZSBwYXNzIHRoaXMgb2JqZWN0IGJ5IHZhbHVlIHRvIGluc2VydGVkSW50
byBhcyBhIHBlcmZvcm1hbmNlIG9wdGltaXphdGlvbgorICAgICAgICBhcyBwYXNzaW5nIHR3byBi
b29sZWFucyBieSB2YWx1ZSBpcyBmYXN0ZXIgdGhhbiBwYXNzaW5nIGEgcG9pbnRlciBhbmQgdGhl
biBkZS1yZWZlcmVuY2luZyBpdCBpbiBhIHZpcnR1YWwgY2FsbGVlLgorICAgICAgICAoV2ViQ29y
ZTo6Tm9kZTo6ZGlkRmluaXNoSW5zZXJ0aW5nTm9kZSk6IFJlbmFtZWQgZnJvbSBmaW5pc2hlZElu
c2VydGluZ1N1YnRyZWUuCisgICAgICAgICogZG9tL1Byb2Nlc3NpbmdJbnN0cnVjdGlvbi5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpQcm9jZXNzaW5nSW5zdHJ1Y3Rpb246Omluc2VydGVkSW50byk6
CisgICAgICAgIChXZWJDb3JlOjpQcm9jZXNzaW5nSW5zdHJ1Y3Rpb246OmRpZEZpbmlzaEluc2Vy
dGluZ05vZGUpOiBSZW5hbWVkIGZyb20gZmluaXNoZWRJbnNlcnRpbmdTdWJ0cmVlLgorICAgICAg
ICAqIGRvbS9Qcm9jZXNzaW5nSW5zdHJ1Y3Rpb24uaDoKKyAgICAgICAgKiBkb20vU2NyaXB0RWxl
bWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTY3JpcHRFbGVtZW50OjpzaG91bGRDYWxsRmlu
aXNoZWRJbnNlcnRpbmdTdWJ0cmVlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlNjcmlw
dEVsZW1lbnQ6OmRpZEZpbmlzaEluc2VydGluZ05vZGUpOiBSZW5hbWVkIGZyb20gZmluaXNoZWRJ
bnNlcnRpbmdTdWJ0cmVlLgorICAgICAgICAqIGRvbS9TY3JpcHRFbGVtZW50Lmg6CisgICAgICAg
IChXZWJDb3JlOjpTY3JpcHRFbGVtZW50OjppbnNlcnRlZEludG8gY29uc3QpOiBBZGRlZC4gRXh0
cmFjdGVkIGZyb20gc2hvdWxkQ2FsbEZpbmlzaGVkSW5zZXJ0aW5nU3VidHJlZS4KKyAgICAgICAg
KiBkb20vU2hhZG93Um9vdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTaGFkb3dSb290OjppbnNl
cnRlZEludG8pOiBUaGUgZXh0cmEgaXNDb25uZWN0ZWQoKSBjaGVjayBpcyBubyBsb25nZXIgbmVl
ZGVkLiBTZWUgdGhlIGRlc2NyaXB0aW9uIGFib3ZlLgorICAgICAgICAqIGRvbS9TaGFkb3dSb290
Lmg6CisgICAgICAgICogaHRtbC9Gb3JtQXNzb2NpYXRlZEVsZW1lbnQuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6Rm9ybUFzc29jaWF0ZWRFbGVtZW50OjppbnNlcnRlZEludG8pOgorICAgICAgICAq
IGh0bWwvRm9ybUFzc29jaWF0ZWRFbGVtZW50Lmg6CisgICAgICAgICogaHRtbC9IVE1MQmFzZUVs
ZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SFRNTEJhc2VFbGVtZW50OjppbnNlcnRlZElu
dG8pOgorICAgICAgICAqIGh0bWwvSFRNTEJhc2VFbGVtZW50Lmg6CisgICAgICAgICogaHRtbC9I
VE1MQm9keUVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SFRNTEJvZHlFbGVtZW50Ojpp
bnNlcnRlZEludG8pOgorICAgICAgICAoV2ViQ29yZTo6SFRNTEJvZHlFbGVtZW50OjpkaWRGaW5p
c2hJbnNlcnRpbmdOb2RlKTogUmVuYW1lZCBmcm9tIGZpbmlzaGVkSW5zZXJ0aW5nU3VidHJlZS4K
KyAgICAgICAgKiBodG1sL0hUTUxCb2R5RWxlbWVudC5oOgorICAgICAgICAqIGh0bWwvSFRNTEZv
cm1Db250cm9sRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpIVE1MRm9ybUNvbnRyb2xF
bGVtZW50OjppbnNlcnRlZEludG8pOgorICAgICAgICAoV2ViQ29yZTo6SFRNTEZvcm1Db250cm9s
RWxlbWVudDo6ZGlkRmluaXNoSW5zZXJ0aW5nTm9kZSk6IFJlbmFtZWQgZnJvbSBmaW5pc2hlZElu
c2VydGluZ1N1YnRyZWUuCisgICAgICAgICogaHRtbC9IVE1MRm9ybUNvbnRyb2xFbGVtZW50Lmg6
CisgICAgICAgICogaHRtbC9IVE1MRm9ybUNvbnRyb2xFbGVtZW50V2l0aFN0YXRlLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OkhUTUxGb3JtQ29udHJvbEVsZW1lbnRXaXRoU3RhdGU6Omluc2VydGVk
SW50byk6CisgICAgICAgICogaHRtbC9IVE1MRm9ybUNvbnRyb2xFbGVtZW50V2l0aFN0YXRlLmg6
CisgICAgICAgICogaHRtbC9IVE1MRm9ybUVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
SFRNTEZvcm1FbGVtZW50OjppbnNlcnRlZEludG8pOgorICAgICAgICAqIGh0bWwvSFRNTEZvcm1F
bGVtZW50Lmg6CisgICAgICAgICogaHRtbC9IVE1MRnJhbWVFbGVtZW50QmFzZS5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpIVE1MRnJhbWVFbGVtZW50QmFzZTo6aW5zZXJ0ZWRJbnRvKToKKyAgICAg
ICAgKFdlYkNvcmU6OkhUTUxGcmFtZUVsZW1lbnRCYXNlOjpkaWRGaW5pc2hJbnNlcnRpbmdOb2Rl
KTogUmVuYW1lZCBmcm9tIGZpbmlzaGVkSW5zZXJ0aW5nU3VidHJlZS4KKyAgICAgICAgKiBodG1s
L0hUTUxGcmFtZUVsZW1lbnRCYXNlLmg6CisgICAgICAgICogaHRtbC9IVE1MRnJhbWVTZXRFbGVt
ZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxGcmFtZVNldEVsZW1lbnQ6Omluc2VydGVk
SW50byk6CisgICAgICAgICogaHRtbC9IVE1MRnJhbWVTZXRFbGVtZW50Lmg6CisgICAgICAgICog
aHRtbC9IVE1MSW1hZ2VFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxJbWFnZUVs
ZW1lbnQ6Omluc2VydGVkSW50byk6CisgICAgICAgICogaHRtbC9IVE1MSW1hZ2VFbGVtZW50Lmg6
CisgICAgICAgICogaHRtbC9IVE1MSW5wdXRFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OkhUTUxJbnB1dEVsZW1lbnQ6Omluc2VydGVkSW50byk6CisgICAgICAgIChXZWJDb3JlOjpIVE1M
SW5wdXRFbGVtZW50OjpkaWRGaW5pc2hJbnNlcnRpbmdOb2RlKTogUmVuYW1lZCBmcm9tIGZpbmlz
aGVkSW5zZXJ0aW5nU3VidHJlZS4KKyAgICAgICAgKiBodG1sL0hUTUxJbnB1dEVsZW1lbnQuaDoK
KyAgICAgICAgKiBodG1sL0hUTUxMaW5rRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpI
VE1MTGlua0VsZW1lbnQ6Omluc2VydGVkSW50byk6IFRoZSBleHRyYSBpc0Nvbm5lY3RlZCgpIGNo
ZWNrIGlzIG5vIGxvbmdlciBuZWVkZWQuIFNlZSBhYm92ZS4KKyAgICAgICAgKFdlYkNvcmU6OkhU
TUxMaW5rRWxlbWVudDo6ZGlkRmluaXNoSW5zZXJ0aW5nTm9kZSk6IFJlbmFtZWQgZnJvbSBmaW5p
c2hlZEluc2VydGluZ1N1YnRyZWUuCisgICAgICAgICogaHRtbC9IVE1MTGlua0VsZW1lbnQuaDoK
KyAgICAgICAgKiBodG1sL0hUTUxNYXBFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhU
TUxNYXBFbGVtZW50OjppbnNlcnRlZEludG8pOgorICAgICAgICAqIGh0bWwvSFRNTE1hcEVsZW1l
bnQuaDoKKyAgICAgICAgKiBodG1sL0hUTUxNZWRpYUVsZW1lbnQuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6SFRNTE1lZGlhRWxlbWVudDo6aW5zZXJ0ZWRJbnRvKToKKyAgICAgICAgKFdlYkNvcmU6
OkhUTUxNZWRpYUVsZW1lbnQ6OmRpZEZpbmlzaEluc2VydGluZ05vZGUpOiBSZW5hbWVkIGZyb20g
ZmluaXNoZWRJbnNlcnRpbmdTdWJ0cmVlLgorICAgICAgICAqIGh0bWwvSFRNTE1lZGlhRWxlbWVu
dC5oOgorICAgICAgICAqIGh0bWwvSFRNTE1ldGFFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OkhUTUxNZXRhRWxlbWVudDo6aW5zZXJ0ZWRJbnRvKToKKyAgICAgICAgKiBodG1sL0hUTUxN
ZXRhRWxlbWVudC5oOgorICAgICAgICAqIGh0bWwvSFRNTE9iamVjdEVsZW1lbnQuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6SFRNTE9iamVjdEVsZW1lbnQ6Omluc2VydGVkSW50byk6CisgICAgICAg
IChXZWJDb3JlOjpIVE1MT2JqZWN0RWxlbWVudDo6ZGlkRmluaXNoSW5zZXJ0aW5nTm9kZSk6IFJl
bmFtZWQgZnJvbSBmaW5pc2hlZEluc2VydGluZ1N1YnRyZWUuCisgICAgICAgICogaHRtbC9IVE1M
T2JqZWN0RWxlbWVudC5oOgorICAgICAgICAqIGh0bWwvSFRNTE9wdGlvbkVsZW1lbnQuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6SFRNTE9wdGlvbkVsZW1lbnQ6Omluc2VydGVkSW50byk6CisgICAg
ICAgICogaHRtbC9IVE1MT3B0aW9uRWxlbWVudC5oOgorICAgICAgICAqIGh0bWwvSFRNTFNjcmlw
dEVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SFRNTFNjcmlwdEVsZW1lbnQ6Omluc2Vy
dGVkSW50byk6CisgICAgICAgIChXZWJDb3JlOjpIVE1MU2NyaXB0RWxlbWVudDo6ZGlkRmluaXNo
SW5zZXJ0aW5nTm9kZSk6IFJlbmFtZWQgZnJvbSBmaW5pc2hlZEluc2VydGluZ1N1YnRyZWUuCisg
ICAgICAgICogaHRtbC9IVE1MU2NyaXB0RWxlbWVudC5oOgorICAgICAgICAqIGh0bWwvSFRNTFNl
bGVjdEVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SFRNTFNlbGVjdEVsZW1lbnQ6Omlu
c2VydGVkSW50byk6CisgICAgICAgICogaHRtbC9IVE1MU2VsZWN0RWxlbWVudC5oOgorICAgICAg
ICAqIGh0bWwvSFRNTFNsb3RFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxTbG90
RWxlbWVudDo6aW5zZXJ0ZWRJbnRvKTogUmVwbGFjZWQgYSBjdW1iZXJzb21lIGNvbmRpdGlvbiBi
eSBhIGJvb2xlYW4gY2hlY2sgb24gaW5zZXJ0aW9uVHlwZSdzCisgICAgICAgIHRyZWVTY29wZUNo
YW5nZWQgYW5kIHJlbW92ZWQgdGhlIGFjY29tcGFueWluZyBjb21tZW50IHdoaWNoIGlzIG5vIGxv
bmdlciBuZWVkZWQuCisgICAgICAgICogaHRtbC9IVE1MU2xvdEVsZW1lbnQuaDoKKyAgICAgICAg
KiBodG1sL0hUTUxTb3VyY2VFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxTb3Vy
Y2VFbGVtZW50OjppbnNlcnRlZEludG8pOgorICAgICAgICAqIGh0bWwvSFRNTFNvdXJjZUVsZW1l
bnQuaDoKKyAgICAgICAgKiBodG1sL0hUTUxTdHlsZUVsZW1lbnQuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6SFRNTFN0eWxlRWxlbWVudDo6aW5zZXJ0ZWRJbnRvKTogVGhlIGV4dHJhIGlzQ29ubmVj
dGVkKCkgY2hlY2sgaXMgbm8gbG9uZ2VyIG5lZWRlZC4gU2VlIGFib3ZlLgorICAgICAgICAqIGh0
bWwvSFRNTFN0eWxlRWxlbWVudC5oOgorICAgICAgICAqIGh0bWwvSFRNTFRleHRGb3JtQ29udHJv
bEVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SFRNTFRleHRGb3JtQ29udHJvbEVsZW1l
bnQ6Omluc2VydGVkSW50byk6CisgICAgICAgICogaHRtbC9IVE1MVGV4dEZvcm1Db250cm9sRWxl
bWVudC5oOgorICAgICAgICAqIGh0bWwvSFRNTFRpdGxlRWxlbWVudC5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpIVE1MVGl0bGVFbGVtZW50OjppbnNlcnRlZEludG8pOgorICAgICAgICAqIGh0bWwv
SFRNTFRpdGxlRWxlbWVudC5oOgorICAgICAgICAqIGh0bWwvSFRNTFRyYWNrRWxlbWVudC5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpIVE1MVHJhY2tFbGVtZW50OjppbnNlcnRlZEludG8pOiBBZGRl
ZCBhIEZJWE1FIHNpbmNlIHRoaXMgY29kZSBpcyBjbGVhcmx5IHdyb25nLgorICAgICAgICAqIGh0
bWwvSFRNTFRyYWNrRWxlbWVudC5oOgorICAgICAgICAqIHN2Zy9TVkdFbGVtZW50LmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OlNWR0VsZW1lbnQ6Omluc2VydGVkSW50byk6CisgICAgICAgICogc3Zn
L1NWR0VsZW1lbnQuaDoKKyAgICAgICAgKiBzdmcvU1ZHRkVJbWFnZUVsZW1lbnQuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6U1ZHRkVJbWFnZUVsZW1lbnQ6Omluc2VydGVkSW50byk6CisgICAgICAg
IChXZWJDb3JlOjpTVkdGRUltYWdlRWxlbWVudDo6ZGlkRmluaXNoSW5zZXJ0aW5nTm9kZSk6IFJl
bmFtZWQgZnJvbSBmaW5pc2hlZEluc2VydGluZ1N1YnRyZWUuCisgICAgICAgICogc3ZnL1NWR0ZF
SW1hZ2VFbGVtZW50Lmg6CisgICAgICAgICogc3ZnL1NWR0ZvbnRGYWNlRWxlbWVudC5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpTVkdGb250RmFjZUVsZW1lbnQ6Omluc2VydGVkSW50byk6CisgICAg
ICAgICogc3ZnL1NWR0ZvbnRGYWNlRWxlbWVudC5oOgorICAgICAgICAqIHN2Zy9TVkdGb250RmFj
ZVVyaUVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZHRm9udEZhY2VVcmlFbGVtZW50
OjppbnNlcnRlZEludG8pOgorICAgICAgICAqIHN2Zy9TVkdGb250RmFjZVVyaUVsZW1lbnQuaDoK
KyAgICAgICAgKiBzdmcvU1ZHSW1hZ2VFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNW
R0ltYWdlRWxlbWVudDo6aW5zZXJ0ZWRJbnRvKToKKyAgICAgICAgKiBzdmcvU1ZHSW1hZ2VFbGVt
ZW50Lmg6CisgICAgICAgICogc3ZnL1NWR01QYXRoRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpTVkdNUGF0aEVsZW1lbnQ6Omluc2VydGVkSW50byk6CisgICAgICAgIChXZWJDb3JlOjpT
VkdNUGF0aEVsZW1lbnQ6OmRpZEZpbmlzaEluc2VydGluZ05vZGUpOiBSZW5hbWVkIGZyb20gZmlu
aXNoZWRJbnNlcnRpbmdTdWJ0cmVlLgorICAgICAgICAqIHN2Zy9TVkdNUGF0aEVsZW1lbnQuaDoK
KyAgICAgICAgKiBzdmcvU1ZHUGF0aEVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZH
UGF0aEVsZW1lbnQ6Omluc2VydGVkSW50byk6CisgICAgICAgICogc3ZnL1NWR1BhdGhFbGVtZW50
Lmg6CisgICAgICAgICogc3ZnL1NWR1NWR0VsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
U1ZHU1ZHRWxlbWVudDo6aW5zZXJ0ZWRJbnRvKToKKyAgICAgICAgKiBzdmcvU1ZHU1ZHRWxlbWVu
dC5oOgorICAgICAgICAqIHN2Zy9TVkdTY3JpcHRFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OlNWR1NjcmlwdEVsZW1lbnQ6Omluc2VydGVkSW50byk6CisgICAgICAgIChXZWJDb3JlOjpT
VkdTY3JpcHRFbGVtZW50OjpkaWRGaW5pc2hJbnNlcnRpbmdOb2RlKTogUmVuYW1lZCBmcm9tIGZp
bmlzaGVkSW5zZXJ0aW5nU3VidHJlZS4KKyAgICAgICAgKiBzdmcvU1ZHU2NyaXB0RWxlbWVudC5o
OgorICAgICAgICAqIHN2Zy9TVkdTdHlsZUVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
U1ZHU3R5bGVFbGVtZW50OjppbnNlcnRlZEludG8pOiBUaGUgZXh0cmEgaXNDb25uZWN0ZWQoKSBj
aGVjayBpcyBubyBsb25nZXIgbmVlZGVkLiBTZWUgYWJvdmUgZGVzY3JpcHRpb24uCisgICAgICAg
ICogc3ZnL1NWR1N0eWxlRWxlbWVudC5oOgorICAgICAgICAqIHN2Zy9TVkdUUmVmRWxlbWVudC5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdUUmVmRWxlbWVudDo6aW5zZXJ0ZWRJbnRvKToKKyAg
ICAgICAgKFdlYkNvcmU6OlNWR1RSZWZFbGVtZW50OjpkaWRGaW5pc2hJbnNlcnRpbmdOb2RlKTog
UmVuYW1lZCBmcm9tIGZpbmlzaGVkSW5zZXJ0aW5nU3VidHJlZS4KKyAgICAgICAgKiBzdmcvU1ZH
VFJlZkVsZW1lbnQuaDoKKyAgICAgICAgKiBzdmcvU1ZHVGV4dFBhdGhFbGVtZW50LmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OlNWR1RleHRQYXRoRWxlbWVudDo6aW5zZXJ0ZWRJbnRvKToKKyAgICAg
ICAgKFdlYkNvcmU6OlNWR1RleHRQYXRoRWxlbWVudDo6ZGlkRmluaXNoSW5zZXJ0aW5nTm9kZSk6
IFJlbmFtZWQgZnJvbSBmaW5pc2hlZEluc2VydGluZ1N1YnRyZWUuCisgICAgICAgICogc3ZnL1NW
R1RleHRQYXRoRWxlbWVudC5oOgorICAgICAgICAqIHN2Zy9TVkdUaXRsZUVsZW1lbnQuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6U1ZHVGl0bGVFbGVtZW50OjppbnNlcnRlZEludG8pOgorICAgICAg
ICAqIHN2Zy9TVkdUaXRsZUVsZW1lbnQuaDoKKyAgICAgICAgKiBzdmcvU1ZHVXNlRWxlbWVudC5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdVc2VFbGVtZW50OjppbnNlcnRlZEludG8pOgorICAg
ICAgICAqIHN2Zy9TVkdVc2VFbGVtZW50Lmg6CisgICAgICAgICogc3ZnL2FuaW1hdGlvbi9TVkdT
TUlMRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdTTUlMRWxlbWVudDo6aW5zZXJ0
ZWRJbnRvKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR1NNSUxFbGVtZW50OjpkaWRGaW5pc2hJbnNl
cnRpbmdOb2RlKTogUmVuYW1lZCBmcm9tIGZpbmlzaGVkSW5zZXJ0aW5nU3VidHJlZS4KKyAgICAg
ICAgKiBzdmcvYW5pbWF0aW9uL1NWR1NNSUxFbGVtZW50Lmg6CisKIDIwMTctMTAtMTYgIFdlbnNv
biBIc2llaCAgPHdlbnNvbl9oc2llaEBhcHBsZS5jb20+CiAKICAgICAgICAgQWxsb3cgcmVhZGlu
ZyBkYXRhIGFuZCBibG9iIFVSTHMgdmlhIERhdGFUcmFuc2ZlciB3aGVuIHRoZSBwYXN0ZWJvYXJk
IGNvbnRhaW5zIGZpbGVzCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20vQ29udGFpbmVyTm9kZS5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZG9tL0NvbnRhaW5lck5vZGUuY3BwCShy
ZXZpc2lvbiAyMjM0NzUpCisrKyBTb3VyY2UvV2ViQ29yZS9kb20vQ29udGFpbmVyTm9kZS5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTM1NiwxMyArMzU2LDEyIEBAIHZvaWQgQ29udGFpbmVyTm9kZTo6
bm90aWZ5Q2hpbGRJbnNlcnRlZCgKIHsKICAgICBDaGlsZExpc3RNdXRhdGlvblNjb3BlKCp0aGlz
KS5jaGlsZEFkZGVkKGNoaWxkKTsKIAotICAgIE5vZGVWZWN0b3IgcG9zdEluc2VydGlvbk5vdGlm
aWNhdGlvblRhcmdldHM7Ci0gICAgbm90aWZ5Q2hpbGROb2RlSW5zZXJ0ZWQoKnRoaXMsIGNoaWxk
LCBwb3N0SW5zZXJ0aW9uTm90aWZpY2F0aW9uVGFyZ2V0cyk7CisgICAgYXV0byBwb3N0SW5zZXJ0
aW9uTm90aWZpY2F0aW9uVGFyZ2V0cyA9IG5vdGlmeUNoaWxkTm9kZUluc2VydGVkKCp0aGlzLCBj
aGlsZCk7CiAKICAgICBjaGlsZHJlbkNoYW5nZWQoY2hhbmdlKTsKIAogICAgIGZvciAoYXV0byYg
dGFyZ2V0IDogcG9zdEluc2VydGlvbk5vdGlmaWNhdGlvblRhcmdldHMpCi0gICAgICAgIHRhcmdl
dC0+ZmluaXNoZWRJbnNlcnRpbmdTdWJ0cmVlKCk7CisgICAgICAgIHRhcmdldC0+ZGlkRmluaXNo
SW5zZXJ0aW5nTm9kZSgpOwogfQogCiB2b2lkIENvbnRhaW5lck5vZGU6Om5vdGlmeUNoaWxkUmVt
b3ZlZChOb2RlJiBjaGlsZCwgTm9kZSogcHJldmlvdXNTaWJsaW5nLCBOb2RlKiBuZXh0U2libGlu
ZywgQ2hpbGRDaGFuZ2VTb3VyY2Ugc291cmNlKQpJbmRleDogU291cmNlL1dlYkNvcmUvZG9tL0Nv
bnRhaW5lck5vZGVBbGdvcml0aG1zLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9k
b20vQ29udGFpbmVyTm9kZUFsZ29yaXRobXMuY3BwCShyZXZpc2lvbiAyMjM0NzUpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9kb20vQ29udGFpbmVyTm9kZUFsZ29yaXRobXMuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0zNSw1NSArMzUsNTQgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1zdGF0aWMgdm9p
ZCBub3RpZnlOb2RlSW5zZXJ0ZWRJbnRvRG9jdW1lbnQoQ29udGFpbmVyTm9kZSYgaW5zZXJ0aW9u
UG9pbnQsIE5vZGUmIG5vZGUsIE5vZGVWZWN0b3ImIHBvc3RJbnNlcnRpb25Ob3RpZmljYXRpb25U
YXJnZXRzKQorZW51bSBjbGFzcyBUcmVlU2NvcGVDaGFuZ2UgeyBDaGFuZ2VkLCBEaWROb3RDaGFu
Z2UgfTsKKworc3RhdGljIHZvaWQgbm90aWZ5Tm9kZUluc2VydGVkSW50b0RvY3VtZW50KENvbnRh
aW5lck5vZGUmIHBhcmVudE9mSW5zZXJ0ZWRUcmVlLCBOb2RlJiBub2RlLCBUcmVlU2NvcGVDaGFu
Z2UgdHJlZVNjb3BlQ2hhbmdlLCBOb2RlVmVjdG9yJiBwb3N0SW5zZXJ0aW9uTm90aWZpY2F0aW9u
VGFyZ2V0cykKIHsKLSAgICBBU1NFUlQoaW5zZXJ0aW9uUG9pbnQuaXNDb25uZWN0ZWQoKSk7Ci0g
ICAgaWYgKG5vZGUuaW5zZXJ0ZWRJbnRvKGluc2VydGlvblBvaW50KSA9PSBOb2RlOjpJbnNlcnRp
b25TaG91bGRDYWxsRmluaXNoZWRJbnNlcnRpbmdTdWJ0cmVlKQorICAgIEFTU0VSVChwYXJlbnRP
Zkluc2VydGVkVHJlZS5pc0Nvbm5lY3RlZCgpKTsKKyAgICBBU1NFUlQoIW5vZGUuaXNDb25uZWN0
ZWQoKSk7CisgICAgaWYgKG5vZGUuaW5zZXJ0ZWRJbnRvKE5vZGU6Okluc2VydGlvblR5cGUgeyAv
KiBjb25uZWN0ZWRUb0RvY3VtZW50ICovIHRydWUsIHRyZWVTY29wZUNoYW5nZSA9PSBUcmVlU2Nv
cGVDaGFuZ2U6OkNoYW5nZWQgfSwgcGFyZW50T2ZJbnNlcnRlZFRyZWUpID09IE5vZGU6Okluc2Vy
dGVkSW50b1Jlc3VsdDo6TmVlZHNQb3N0SW5zZXJ0aW9uQ2FsbGJhY2spCiAgICAgICAgIHBvc3RJ
bnNlcnRpb25Ob3RpZmljYXRpb25UYXJnZXRzLmFwcGVuZChub2RlKTsKIAogICAgIGlmICghaXM8
Q29udGFpbmVyTm9kZT4obm9kZSkpCiAgICAgICAgIHJldHVybjsKIAotICAgIENoaWxkTm9kZXNM
YXp5U25hcHNob3Qgc25hcHNob3QoZG93bmNhc3Q8Q29udGFpbmVyTm9kZT4obm9kZSkpOwotICAg
IHdoaWxlIChSZWZQdHI8Tm9kZT4gY2hpbGQgPSBzbmFwc2hvdC5uZXh0Tm9kZSgpKSB7Ci0gICAg
ICAgIC8vIElmIHdlIGhhdmUgYmVlbiByZW1vdmVkIGZyb20gdGhlIGRvY3VtZW50IGR1cmluZyB0
aGlzIGxvb3AsIHRoZW4KLSAgICAgICAgLy8gd2UgZG9uJ3Qgd2FudCB0byB0ZWxsIHRoZSByZXN0
IG9mIG91ciBjaGlsZHJlbiB0aGF0IHRoZXkndmUgYmVlbgotICAgICAgICAvLyBpbnNlcnRlZCBp
bnRvIHRoZSBkb2N1bWVudCBiZWNhdXNlIHRoZXkgaGF2ZW4ndC4KLSAgICAgICAgaWYgKG5vZGUu
aXNDb25uZWN0ZWQoKSAmJiBjaGlsZC0+cGFyZW50Tm9kZSgpID09ICZub2RlKQotICAgICAgICAg
ICAgbm90aWZ5Tm9kZUluc2VydGVkSW50b0RvY3VtZW50KGluc2VydGlvblBvaW50LCAqY2hpbGQs
IHBvc3RJbnNlcnRpb25Ob3RpZmljYXRpb25UYXJnZXRzKTsKKyAgICBmb3IgKFJlZlB0cjxOb2Rl
PiBjaGlsZCA9IGRvd25jYXN0PENvbnRhaW5lck5vZGU+KG5vZGUpLmZpcnN0Q2hpbGQoKTsgY2hp
bGQ7IGNoaWxkID0gY2hpbGQtPm5leHRTaWJsaW5nKCkpIHsKKyAgICAgICAgUkVMRUFTRV9BU1NF
UlQobm9kZS5pc0Nvbm5lY3RlZCgpICYmIGNoaWxkLT5wYXJlbnROb2RlKCkgPT0gJm5vZGUpOwor
ICAgICAgICBub3RpZnlOb2RlSW5zZXJ0ZWRJbnRvRG9jdW1lbnQocGFyZW50T2ZJbnNlcnRlZFRy
ZWUsICpjaGlsZCwgdHJlZVNjb3BlQ2hhbmdlLCBwb3N0SW5zZXJ0aW9uTm90aWZpY2F0aW9uVGFy
Z2V0cyk7CiAgICAgfQogCiAgICAgaWYgKCFpczxFbGVtZW50Pihub2RlKSkKICAgICAgICAgcmV0
dXJuOwogCiAgICAgaWYgKFJlZlB0cjxTaGFkb3dSb290PiByb290ID0gZG93bmNhc3Q8RWxlbWVu
dD4obm9kZSkuc2hhZG93Um9vdCgpKSB7Ci0gICAgICAgIGlmIChub2RlLmlzQ29ubmVjdGVkKCkg
JiYgcm9vdC0+aG9zdCgpID09ICZub2RlKQotICAgICAgICAgICAgbm90aWZ5Tm9kZUluc2VydGVk
SW50b0RvY3VtZW50KGluc2VydGlvblBvaW50LCAqcm9vdCwgcG9zdEluc2VydGlvbk5vdGlmaWNh
dGlvblRhcmdldHMpOworICAgICAgICBSRUxFQVNFX0FTU0VSVChub2RlLmlzQ29ubmVjdGVkKCkg
JiYgcm9vdC0+aG9zdCgpID09ICZub2RlKTsKKyAgICAgICAgbm90aWZ5Tm9kZUluc2VydGVkSW50
b0RvY3VtZW50KHBhcmVudE9mSW5zZXJ0ZWRUcmVlLCAqcm9vdCwgVHJlZVNjb3BlQ2hhbmdlOjpE
aWROb3RDaGFuZ2UsIHBvc3RJbnNlcnRpb25Ob3RpZmljYXRpb25UYXJnZXRzKTsKICAgICB9CiB9
CiAKLXN0YXRpYyB2b2lkIG5vdGlmeU5vZGVJbnNlcnRlZEludG9UcmVlKENvbnRhaW5lck5vZGUm
IGluc2VydGlvblBvaW50LCBOb2RlJiBub2RlLCBOb2RlVmVjdG9yJiBwb3N0SW5zZXJ0aW9uTm90
aWZpY2F0aW9uVGFyZ2V0cykKK3N0YXRpYyB2b2lkIG5vdGlmeU5vZGVJbnNlcnRlZEludG9UcmVl
KENvbnRhaW5lck5vZGUmIHBhcmVudE9mSW5zZXJ0ZWRUcmVlLCBOb2RlJiBub2RlLCBUcmVlU2Nv
cGVDaGFuZ2UgdHJlZVNjb3BlQ2hhbmdlLCBOb2RlVmVjdG9yJiBwb3N0SW5zZXJ0aW9uTm90aWZp
Y2F0aW9uVGFyZ2V0cykKIHsKLSAgICBOb0V2ZW50RGlzcGF0Y2hBc3NlcnRpb24gYXNzZXJ0Tm9F
dmVudERpc3BhdGNoOwotICAgIEFTU0VSVCghaW5zZXJ0aW9uUG9pbnQuaXNDb25uZWN0ZWQoKSk7
CisgICAgQVNTRVJUKCFwYXJlbnRPZkluc2VydGVkVHJlZS5pc0Nvbm5lY3RlZCgpKTsKKyAgICBB
U1NFUlQoIW5vZGUuaXNDb25uZWN0ZWQoKSk7CiAKLSAgICBpZiAobm9kZS5pbnNlcnRlZEludG8o
aW5zZXJ0aW9uUG9pbnQpID09IE5vZGU6Okluc2VydGlvblNob3VsZENhbGxGaW5pc2hlZEluc2Vy
dGluZ1N1YnRyZWUpCisgICAgaWYgKG5vZGUuaW5zZXJ0ZWRJbnRvKE5vZGU6Okluc2VydGlvblR5
cGUgeyAvKiBjb25uZWN0ZWRUb0RvY3VtZW50ICovIGZhbHNlLCB0cmVlU2NvcGVDaGFuZ2UgPT0g
VHJlZVNjb3BlQ2hhbmdlOjpDaGFuZ2VkIH0sIHBhcmVudE9mSW5zZXJ0ZWRUcmVlKSA9PSBOb2Rl
OjpJbnNlcnRlZEludG9SZXN1bHQ6Ok5lZWRzUG9zdEluc2VydGlvbkNhbGxiYWNrKQogICAgICAg
ICBwb3N0SW5zZXJ0aW9uTm90aWZpY2F0aW9uVGFyZ2V0cy5hcHBlbmQobm9kZSk7CiAKICAgICBp
ZiAoIWlzPENvbnRhaW5lck5vZGU+KG5vZGUpKQogICAgICAgICByZXR1cm47CiAKLSAgICBmb3Ig
KGF1dG8qIGNoaWxkID0gZG93bmNhc3Q8Q29udGFpbmVyTm9kZT4obm9kZSkuZmlyc3RDaGlsZCgp
OyBjaGlsZDsgY2hpbGQgPSBjaGlsZC0+bmV4dFNpYmxpbmcoKSkKLSAgICAgICAgbm90aWZ5Tm9k
ZUluc2VydGVkSW50b1RyZWUoaW5zZXJ0aW9uUG9pbnQsICpjaGlsZCwgcG9zdEluc2VydGlvbk5v
dGlmaWNhdGlvblRhcmdldHMpOworICAgIGZvciAoUmVmUHRyPE5vZGU+IGNoaWxkID0gZG93bmNh
c3Q8Q29udGFpbmVyTm9kZT4obm9kZSkuZmlyc3RDaGlsZCgpOyBjaGlsZDsgY2hpbGQgPSBjaGls
ZC0+bmV4dFNpYmxpbmcoKSkKKyAgICAgICAgbm90aWZ5Tm9kZUluc2VydGVkSW50b1RyZWUocGFy
ZW50T2ZJbnNlcnRlZFRyZWUsICpjaGlsZCwgdHJlZVNjb3BlQ2hhbmdlLCBwb3N0SW5zZXJ0aW9u
Tm90aWZpY2F0aW9uVGFyZ2V0cyk7CiAKICAgICBpZiAoIWlzPEVsZW1lbnQ+KG5vZGUpKQogICAg
ICAgICByZXR1cm47CiAKICAgICBpZiAoUmVmUHRyPFNoYWRvd1Jvb3Q+IHJvb3QgPSBkb3duY2Fz
dDxFbGVtZW50Pihub2RlKS5zaGFkb3dSb290KCkpCi0gICAgICAgIG5vdGlmeU5vZGVJbnNlcnRl
ZEludG9UcmVlKGluc2VydGlvblBvaW50LCAqcm9vdCwgcG9zdEluc2VydGlvbk5vdGlmaWNhdGlv
blRhcmdldHMpOworICAgICAgICBub3RpZnlOb2RlSW5zZXJ0ZWRJbnRvVHJlZShwYXJlbnRPZklu
c2VydGVkVHJlZSwgKnJvb3QsIFRyZWVTY29wZUNoYW5nZTo6RGlkTm90Q2hhbmdlLCBwb3N0SW5z
ZXJ0aW9uTm90aWZpY2F0aW9uVGFyZ2V0cyk7CiB9CiAKLXZvaWQgbm90aWZ5Q2hpbGROb2RlSW5z
ZXJ0ZWQoQ29udGFpbmVyTm9kZSYgaW5zZXJ0aW9uUG9pbnQsIE5vZGUmIG5vZGUsIE5vZGVWZWN0
b3ImIHBvc3RJbnNlcnRpb25Ob3RpZmljYXRpb25UYXJnZXRzKQorTm9kZVZlY3RvciBub3RpZnlD
aGlsZE5vZGVJbnNlcnRlZChDb250YWluZXJOb2RlJiBwYXJlbnRPZkluc2VydGVkVHJlZSwgTm9k
ZSYgbm9kZSkKIHsKICAgICBOb0V2ZW50RGlzcGF0Y2hBc3NlcnRpb24gYXNzZXJ0Tm9FdmVudERp
c3BhdGNoOwogCkBAIC05MiwxMCArOTEsMTYgQEAgdm9pZCBub3RpZnlDaGlsZE5vZGVJbnNlcnRl
ZChDb250YWluZXJObwogICAgIFJlZjxEb2N1bWVudD4gcHJvdGVjdERvY3VtZW50KG5vZGUuZG9j
dW1lbnQoKSk7CiAgICAgUmVmPE5vZGU+IHByb3RlY3ROb2RlKG5vZGUpOwogCi0gICAgaWYgKGlu
c2VydGlvblBvaW50LmlzQ29ubmVjdGVkKCkpCi0gICAgICAgIG5vdGlmeU5vZGVJbnNlcnRlZElu
dG9Eb2N1bWVudChpbnNlcnRpb25Qb2ludCwgbm9kZSwgcG9zdEluc2VydGlvbk5vdGlmaWNhdGlv
blRhcmdldHMpOworICAgIE5vZGVWZWN0b3IgcG9zdEluc2VydGlvbk5vdGlmaWNhdGlvblRhcmdl
dHM7CisKKyAgICAvLyBUcmVlIHNjb3BlIGhhcyBjaGFuZ2VkIGlmIHRoZSBjb250YWluZXIgbm9k
ZSBpbnRvIHdoaWNoICJub2RlIiBpcyBpbnNlcnRlZCBpcyBpbiBhIGRvY3VtZW50IG9yIGEgc2hh
ZG93IHJvb3QuCisgICAgYXV0byB0cmVlU2NvcGVDaGFuZ2UgPSBwYXJlbnRPZkluc2VydGVkVHJl
ZS5pc0luVHJlZVNjb3BlKCkgPyBUcmVlU2NvcGVDaGFuZ2U6OkNoYW5nZWQgOiBUcmVlU2NvcGVD
aGFuZ2U6OkRpZE5vdENoYW5nZTsKKyAgICBpZiAocGFyZW50T2ZJbnNlcnRlZFRyZWUuaXNDb25u
ZWN0ZWQoKSkKKyAgICAgICAgbm90aWZ5Tm9kZUluc2VydGVkSW50b0RvY3VtZW50KHBhcmVudE9m
SW5zZXJ0ZWRUcmVlLCBub2RlLCB0cmVlU2NvcGVDaGFuZ2UsIHBvc3RJbnNlcnRpb25Ob3RpZmlj
YXRpb25UYXJnZXRzKTsKICAgICBlbHNlCi0gICAgICAgIG5vdGlmeU5vZGVJbnNlcnRlZEludG9U
cmVlKGluc2VydGlvblBvaW50LCBub2RlLCBwb3N0SW5zZXJ0aW9uTm90aWZpY2F0aW9uVGFyZ2V0
cyk7CisgICAgICAgIG5vdGlmeU5vZGVJbnNlcnRlZEludG9UcmVlKHBhcmVudE9mSW5zZXJ0ZWRU
cmVlLCBub2RlLCB0cmVlU2NvcGVDaGFuZ2UsIHBvc3RJbnNlcnRpb25Ob3RpZmljYXRpb25UYXJn
ZXRzKTsKKworICAgIHJldHVybiBwb3N0SW5zZXJ0aW9uTm90aWZpY2F0aW9uVGFyZ2V0czsKIH0K
IAogc3RhdGljIHZvaWQgbm90aWZ5Tm9kZVJlbW92ZWRGcm9tRG9jdW1lbnQoQ29udGFpbmVyTm9k
ZSYgaW5zZXJ0aW9uUG9pbnQsIE5vZGUmIG5vZGUpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20v
Q29udGFpbmVyTm9kZUFsZ29yaXRobXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9k
b20vQ29udGFpbmVyTm9kZUFsZ29yaXRobXMuaAkocmV2aXNpb24gMjIzNDc1KQorKysgU291cmNl
L1dlYkNvcmUvZG9tL0NvbnRhaW5lck5vZGVBbGdvcml0aG1zLmgJKHdvcmtpbmcgY29weSkKQEAg
LTI2LDcgKzI2LDcgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi12b2lkIG5vdGlmeUNoaWxk
Tm9kZUluc2VydGVkKENvbnRhaW5lck5vZGUmIGluc2VydGlvblBvaW50LCBOb2RlJiwgTm9kZVZl
Y3RvciYgcG9zdEluc2VydGlvbk5vdGlmaWNhdGlvblRhcmdldHMpOworTm9kZVZlY3RvciBub3Rp
ZnlDaGlsZE5vZGVJbnNlcnRlZChDb250YWluZXJOb2RlJiBwYXJlbnRPZkluc2VydGVkVHJlZSwg
Tm9kZSYpOwogdm9pZCBub3RpZnlDaGlsZE5vZGVSZW1vdmVkKENvbnRhaW5lck5vZGUmIGluc2Vy
dGlvblBvaW50LCBOb2RlJik7CiB2b2lkIHJlbW92ZURldGFjaGVkQ2hpbGRyZW5JbkNvbnRhaW5l
cihDb250YWluZXJOb2RlJik7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9FbGVtZW50LmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20vRWxlbWVudC5jcHAJKHJldmlzaW9u
IDIyMzQ3NSkKKysrIFNvdXJjZS9XZWJDb3JlL2RvbS9FbGVtZW50LmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMTYyOSwzNCArMTYyOSwyNyBAQCBSZW5kZXJQdHI8UmVuZGVyRWxlbWVudD4gRWxlbWVu
dDo6Y3JlYXRlCiAgICAgcmV0dXJuIFJlbmRlckVsZW1lbnQ6OmNyZWF0ZUZvcigqdGhpcywgV1RG
TW92ZShzdHlsZSkpOwogfQogCi1Ob2RlOjpJbnNlcnRpb25Ob3RpZmljYXRpb25SZXF1ZXN0IEVs
ZW1lbnQ6Omluc2VydGVkSW50byhDb250YWluZXJOb2RlJiBpbnNlcnRpb25Qb2ludCkKK05vZGU6
Okluc2VydGVkSW50b1Jlc3VsdCBFbGVtZW50OjppbnNlcnRlZEludG8oSW5zZXJ0aW9uVHlwZSBp
bnNlcnRpb25UeXBlLCBDb250YWluZXJOb2RlJiBwYXJlbnRPZkluc2VydGVkVHJlZSkKIHsKLSAg
ICBib29sIHdhc0luRG9jdW1lbnQgPSBpc0Nvbm5lY3RlZCgpOwotICAgIC8vIG5lZWQgdG8gZG8g
c3VwZXJjbGFzcyBwcm9jZXNzaW5nIGZpcnN0IHNvIGlzQ29ubmVjdGVkKCkgaXMgdHJ1ZQotICAg
IC8vIGJ5IHRoZSB0aW1lIHdlIHJlYWNoIHVwZGF0ZUlkCi0gICAgQ29udGFpbmVyTm9kZTo6aW5z
ZXJ0ZWRJbnRvKGluc2VydGlvblBvaW50KTsKLSAgICBBU1NFUlQoIXdhc0luRG9jdW1lbnQgfHwg
aXNDb25uZWN0ZWQoKSk7CisgICAgQ29udGFpbmVyTm9kZTo6aW5zZXJ0ZWRJbnRvKGluc2VydGlv
blR5cGUsIHBhcmVudE9mSW5zZXJ0ZWRUcmVlKTsKIAogI2lmIEVOQUJMRShGVUxMU0NSRUVOX0FQ
SSkKICAgICBpZiAoY29udGFpbnNGdWxsU2NyZWVuRWxlbWVudCgpICYmIHBhcmVudEVsZW1lbnQo
KSAmJiAhcGFyZW50RWxlbWVudCgpLT5jb250YWluc0Z1bGxTY3JlZW5FbGVtZW50KCkpCiAgICAg
ICAgIHNldENvbnRhaW5zRnVsbFNjcmVlbkVsZW1lbnRPbkFuY2VzdG9yc0Nyb3NzaW5nRnJhbWVC
b3VuZGFyaWVzKHRydWUpOwogI2VuZGlmCiAKLSAgICBpZiAocGFyZW50Tm9kZSgpID09ICZpbnNl
cnRpb25Qb2ludCkgeworICAgIGlmIChwYXJlbnROb2RlKCkgPT0gJnBhcmVudE9mSW5zZXJ0ZWRU
cmVlKSB7CiAgICAgICAgIGlmIChhdXRvKiBzaGFkb3dSb290ID0gcGFyZW50Tm9kZSgpLT5zaGFk
b3dSb290KCkpCiAgICAgICAgICAgICBzaGFkb3dSb290LT5ob3N0Q2hpbGRFbGVtZW50RGlkQ2hh
bmdlKCp0aGlzKTsKICAgICB9CiAKLSAgICBpZiAoIWluc2VydGlvblBvaW50LmlzSW5UcmVlU2Nv
cGUoKSkKLSAgICAgICAgcmV0dXJuIEluc2VydGlvbkRvbmU7CisgICAgaWYgKCFwYXJlbnRPZklu
c2VydGVkVHJlZS5pc0luVHJlZVNjb3BlKCkpCisgICAgICAgIHJldHVybiBJbnNlcnRlZEludG9S
ZXN1bHQ6OkRvbmU7CiAKLSAgICAvLyBUaGlzIGZ1bmN0aW9uIGNvdWxkIGJlIGNhbGxlZCB3aGVu
IHRoaXMgZWxlbWVudCdzIHNoYWRvdyByb290J3MgaG9zdCBvciBpdHMgYW5jZXN0b3IgaXMgaW5z
ZXJ0ZWQuCi0gICAgLy8gVGhpcyBlbGVtZW50IGlzIG5ldyB0byB0aGUgc2hhZG93IHRyZWUgKGFu
ZCBpdHMgdHJlZSBzY29wZSkgb25seSBpZiB0aGUgcGFyZW50IGludG8gd2hpY2ggdGhpcyBlbGVt
ZW50Ci0gICAgLy8gb3IgaXRzIGFuY2VzdG9yIGlzIGluc2VydGVkIGJlbG9uZ3MgdG8gdGhlIHNh
bWUgdHJlZSBzY29wZSBhcyB0aGlzIGVsZW1lbnQncy4KLSAgICBUcmVlU2NvcGUqIG5ld1Njb3Bl
ID0gJmluc2VydGlvblBvaW50LnRyZWVTY29wZSgpOwotICAgIGJvb2wgYmVjb21lQ29ubmVjdGVk
ID0gIXdhc0luRG9jdW1lbnQgJiYgaXNDb25uZWN0ZWQoKTsKKyAgICBib29sIGJlY29tZUNvbm5l
Y3RlZCA9IGluc2VydGlvblR5cGUuY29ubmVjdGVkVG9Eb2N1bWVudDsKKyAgICBUcmVlU2NvcGUq
IG5ld1Njb3BlID0gJnBhcmVudE9mSW5zZXJ0ZWRUcmVlLnRyZWVTY29wZSgpOwogICAgIEhUTUxE
b2N1bWVudCogbmV3RG9jdW1lbnQgPSBiZWNvbWVDb25uZWN0ZWQgJiYgaXM8SFRNTERvY3VtZW50
PihuZXdTY29wZS0+ZG9jdW1lbnRTY29wZSgpKSA/ICZkb3duY2FzdDxIVE1MRG9jdW1lbnQ+KG5l
d1Njb3BlLT5kb2N1bWVudFNjb3BlKCkpIDogbnVsbHB0cjsKLSAgICBpZiAobmV3U2NvcGUgIT0g
JnRyZWVTY29wZSgpKQorICAgIGlmICghaW5zZXJ0aW9uVHlwZS50cmVlU2NvcGVDaGFuZ2VkKQog
ICAgICAgICBuZXdTY29wZSA9IG51bGxwdHI7CiAKICAgICBjb25zdCBBdG9taWNTdHJpbmcmIGlk
VmFsdWUgPSBnZXRJZEF0dHJpYnV0ZSgpOwpAQCAtMTY4Nyw3ICsxNjgwLDcgQEAgTm9kZTo6SW5z
ZXJ0aW9uTm90aWZpY2F0aW9uUmVxdWVzdCBFbGVtZQogICAgICAgICAgICAgQ3VzdG9tRWxlbWVu
dFJlYWN0aW9uUXVldWU6OmVucXVldWVDb25uZWN0ZWRDYWxsYmFja0lmTmVlZGVkKCp0aGlzKTsK
ICAgICB9CiAKLSAgICByZXR1cm4gSW5zZXJ0aW9uRG9uZTsKKyAgICByZXR1cm4gSW5zZXJ0ZWRJ
bnRvUmVzdWx0OjpEb25lOwogfQogCiB2b2lkIEVsZW1lbnQ6OnJlbW92ZWRGcm9tKENvbnRhaW5l
ck5vZGUmIGluc2VydGlvblBvaW50KQpAQCAtMTc2NSw2ICsxNzU4LDcgQEAgU2hhZG93Um9vdCog
RWxlbWVudDo6c2hhZG93Um9vdCgpIGNvbnN0CiAKIHZvaWQgRWxlbWVudDo6YWRkU2hhZG93Um9v
dChSZWY8U2hhZG93Um9vdD4mJiBuZXdTaGFkb3dSb290KQogeworICAgIEFTU0VSVCghbmV3U2hh
ZG93Um9vdC0+aGFzQ2hpbGROb2RlcygpKTsKICAgICBBU1NFUlQoIXNoYWRvd1Jvb3QoKSk7CiAg
ICAgCiAgICAgaWYgKHJlbmRlcmVyKCkpCkBAIC0xNzc2LDEwICsxNzcwLDExIEBAIHZvaWQgRWxl
bWVudDo6YWRkU2hhZG93Um9vdChSZWY8U2hhZG93Um8KICAgICBzaGFkb3dSb290LnNldEhvc3Qo
dGhpcyk7CiAgICAgc2hhZG93Um9vdC5zZXRQYXJlbnRUcmVlU2NvcGUodHJlZVNjb3BlKCkpOwog
Ci0gICAgTm9kZVZlY3RvciBwb3N0SW5zZXJ0aW9uTm90aWZpY2F0aW9uVGFyZ2V0czsKLSAgICBu
b3RpZnlDaGlsZE5vZGVJbnNlcnRlZCgqdGhpcywgc2hhZG93Um9vdCwgcG9zdEluc2VydGlvbk5v
dGlmaWNhdGlvblRhcmdldHMpOwotICAgIGZvciAoYXV0byYgdGFyZ2V0IDogcG9zdEluc2VydGlv
bk5vdGlmaWNhdGlvblRhcmdldHMpCi0gICAgICAgIHRhcmdldC0+ZmluaXNoZWRJbnNlcnRpbmdT
dWJ0cmVlKCk7CisjaWYgIUFTU0VSVF9ESVNBQkxFRAorICAgIEFTU0VSVChub3RpZnlDaGlsZE5v
ZGVJbnNlcnRlZCgqdGhpcywgc2hhZG93Um9vdCkuaXNFbXB0eSgpKTsKKyNlbHNlCisgICAgbm90
aWZ5Q2hpbGROb2RlSW5zZXJ0ZWQoKnRoaXMsIHNoYWRvd1Jvb3QpOworI2VuZGlmCiAKICAgICBp
bnZhbGlkYXRlU3R5bGVBbmRSZW5kZXJlcnNGb3JTdWJ0cmVlKCk7CiAKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL2RvbS9FbGVtZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZG9tL0Vs
ZW1lbnQuaAkocmV2aXNpb24gMjIzNDc1KQorKysgU291cmNlL1dlYkNvcmUvZG9tL0VsZW1lbnQu
aAkod29ya2luZyBjb3B5KQpAQCAtNTUxLDcgKzU1MSw3IEBAIHB1YmxpYzoKIHByb3RlY3RlZDoK
ICAgICBFbGVtZW50KGNvbnN0IFF1YWxpZmllZE5hbWUmLCBEb2N1bWVudCYsIENvbnN0cnVjdGlv
blR5cGUpOwogCi0gICAgSW5zZXJ0aW9uTm90aWZpY2F0aW9uUmVxdWVzdCBpbnNlcnRlZEludG8o
Q29udGFpbmVyTm9kZSYpIG92ZXJyaWRlOworICAgIEluc2VydGVkSW50b1Jlc3VsdCBpbnNlcnRl
ZEludG8oSW5zZXJ0aW9uVHlwZSwgQ29udGFpbmVyTm9kZSYpIG92ZXJyaWRlOwogICAgIHZvaWQg
cmVtb3ZlZEZyb20oQ29udGFpbmVyTm9kZSYpIG92ZXJyaWRlOwogICAgIHZvaWQgY2hpbGRyZW5D
aGFuZ2VkKGNvbnN0IENoaWxkQ2hhbmdlJikgb3ZlcnJpZGU7CiAgICAgdm9pZCByZW1vdmVBbGxF
dmVudExpc3RlbmVycygpIGZpbmFsOwpJbmRleDogU291cmNlL1dlYkNvcmUvZG9tL05vZGUuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2RvbS9Ob2RlLmNwcAkocmV2aXNpb24gMjIz
NDc1KQorKysgU291cmNlL1dlYkNvcmUvZG9tL05vZGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0x
MjQxLDE2ICsxMjQxLDE2IEBAIE5vZGUmIE5vZGU6OmdldFJvb3ROb2RlKGNvbnN0IEdldFJvb3RO
b2QKICAgICByZXR1cm4gb3B0aW9ucy5jb21wb3NlZCA/IHNoYWRvd0luY2x1ZGluZ1Jvb3QoKSA6
IHJvb3ROb2RlKCk7CiB9CiAKLU5vZGU6Okluc2VydGlvbk5vdGlmaWNhdGlvblJlcXVlc3QgTm9k
ZTo6aW5zZXJ0ZWRJbnRvKENvbnRhaW5lck5vZGUmIGluc2VydGlvblBvaW50KQorTm9kZTo6SW5z
ZXJ0ZWRJbnRvUmVzdWx0IE5vZGU6Omluc2VydGVkSW50byhJbnNlcnRpb25UeXBlIGluc2VydGlv
blR5cGUsIENvbnRhaW5lck5vZGUmIHBhcmVudE9mSW5zZXJ0ZWRUcmVlKQogewotICAgIGlmIChp
bnNlcnRpb25Qb2ludC5pc0Nvbm5lY3RlZCgpKQorICAgIGlmIChpbnNlcnRpb25UeXBlLmNvbm5l
Y3RlZFRvRG9jdW1lbnQpCiAgICAgICAgIHNldEZsYWcoSXNDb25uZWN0ZWRGbGFnKTsKLSAgICBp
ZiAoaW5zZXJ0aW9uUG9pbnQuaXNJblNoYWRvd1RyZWUoKSkKKyAgICBpZiAocGFyZW50T2ZJbnNl
cnRlZFRyZWUuaXNJblNoYWRvd1RyZWUoKSkKICAgICAgICAgc2V0RmxhZyhJc0luU2hhZG93VHJl
ZUZsYWcpOwogCiAgICAgaW52YWxpZGF0ZVN0eWxlKFN0eWxlOjpWYWxpZGl0eTo6U3VidHJlZUFu
ZFJlbmRlcmVyc0ludmFsaWQpOwogCi0gICAgcmV0dXJuIEluc2VydGlvbkRvbmU7CisgICAgcmV0
dXJuIEluc2VydGVkSW50b1Jlc3VsdDo6RG9uZTsKIH0KIAogdm9pZCBOb2RlOjpyZW1vdmVkRnJv
bShDb250YWluZXJOb2RlJiBpbnNlcnRpb25Qb2ludCkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Rv
bS9Ob2RlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZG9tL05vZGUuaAkocmV2aXNp
b24gMjIzNDc1KQorKysgU291cmNlL1dlYkNvcmUvZG9tL05vZGUuaAkod29ya2luZyBjb3B5KQpA
QCAtNDQzLDE5ICs0NDMsMjIgQEAgcHVibGljOgogICAgIC8vCiAgICAgLy8gV2ViS2l0IG5vdGlm
aWVzIHRoaXMgY2FsbGJhY2sgcmVnYXJkbGVzcyBpZiB0aGUgc3VidHJlZSBvZiB0aGUgbm9kZSBp
cyBhIGRvY3VtZW50IHRyZWUgb3IgYSBmbG9hdGluZyBzdWJ0cmVlLgogICAgIC8vIEltcGxlbWVu
dGF0aW9uIGNhbiBkZXRlcm1pbmUgdGhlIHR5cGUgb2Ygc3VidHJlZSBieSBzZWVpbmcgaW5zZXJ0
aW9uUG9pbnQtPmlzQ29ubmVjdGVkKCkuCi0gICAgLy8gRm9yIGEgcGVyZm9ybWFuY2UgcmVhc29u
LCBub3RpZmljYXRpb25zIGFyZSBkZWxpdmVyZWQgb25seSB0byBDb250YWluZXJOb2RlIHN1YmNs
YXNzZXMgaWYgdGhlIGluc2VydGlvblBvaW50IGlzIG91dCBvZiBkb2N1bWVudC4KICAgICAvLwot
ICAgIC8vIFRoZXJlIGlzIGFub3RoZXIgY2FsbGJhY2sgbmFtZWQgZmluaXNoZWRJbnNlcnRpbmdT
dWJ0cmVlKCksIHdoaWNoIGlzIGNhbGxlZCBhZnRlciBhbGwgZGVzY2VuZGFudHMgYXJlIG5vdGlm
aWVkLgotICAgIC8vIE9ubHkgYSBmZXcgc3ViY2xhc3NlcyBhY3R1YWxseSBuZWVkIHRoaXMuIFRv
IHV0aWxpemUgdGhpcywgdGhlIG5vZGUgc2hvdWxkIHJldHVybiBJbnNlcnRpb25TaG91bGRDYWxs
RmluaXNoZWRJbnNlcnRpbmdTdWJ0cmVlCisgICAgLy8gVGhlcmUgaXMgYW5vdGhlciBjYWxsYmFj
ayBuYW1lZCBkaWRGaW5pc2hJbnNlcnRpbmdOb2RlKCksIHdoaWNoIGlzIGNhbGxlZCBhZnRlciBh
bGwgZGVzY2VuZGFudHMgYXJlIG5vdGlmaWVkLgorICAgIC8vIE9ubHkgYSBmZXcgc3ViY2xhc3Nl
cyBhY3R1YWxseSBuZWVkIHRoaXMuIFRvIHV0aWxpemUgdGhpcywgdGhlIG5vZGUgc2hvdWxkIHJl
dHVybiBJbnNlcnRlZEludG9SZXN1bHQ6Ok5lZWRzUG9zdEluc2VydGlvbkNhbGxiYWNrCiAgICAg
Ly8gZnJvbSBpbnNydGVkSW50bygpLgogICAgIC8vCi0gICAgZW51bSBJbnNlcnRpb25Ob3RpZmlj
YXRpb25SZXF1ZXN0IHsKLSAgICAgICAgSW5zZXJ0aW9uRG9uZSwKLSAgICAgICAgSW5zZXJ0aW9u
U2hvdWxkQ2FsbEZpbmlzaGVkSW5zZXJ0aW5nU3VidHJlZQorICAgIGVudW0gY2xhc3MgSW5zZXJ0
ZWRJbnRvUmVzdWx0IHsKKyAgICAgICAgRG9uZSwKKyAgICAgICAgTmVlZHNQb3N0SW5zZXJ0aW9u
Q2FsbGJhY2ssCiAgICAgfTsKIAotICAgIHZpcnR1YWwgSW5zZXJ0aW9uTm90aWZpY2F0aW9uUmVx
dWVzdCBpbnNlcnRlZEludG8oQ29udGFpbmVyTm9kZSYgaW5zZXJ0aW9uUG9pbnQpOwotICAgIHZp
cnR1YWwgdm9pZCBmaW5pc2hlZEluc2VydGluZ1N1YnRyZWUoKSB7IH0KKyAgICBzdHJ1Y3QgSW5z
ZXJ0aW9uVHlwZSB7CisgICAgICAgIGJvb2wgY29ubmVjdGVkVG9Eb2N1bWVudCB7IGZhbHNlIH07
CisgICAgICAgIGJvb2wgdHJlZVNjb3BlQ2hhbmdlZCB7IGZhbHNlIH07CisgICAgfTsKKyAgICB2
aXJ0dWFsIEluc2VydGVkSW50b1Jlc3VsdCBpbnNlcnRlZEludG8oSW5zZXJ0aW9uVHlwZSwgQ29u
dGFpbmVyTm9kZSYgcGFyZW50T2ZJbnNlcnRlZFRyZWUpOworICAgIHZpcnR1YWwgdm9pZCBkaWRG
aW5pc2hJbnNlcnRpbmdOb2RlKCkgeyB9CiAKICAgICAvLyBOb3RpZmllcyB0aGUgbm9kZSB0aGF0
IGl0IGlzIG5vIGxvbmdlciBwYXJ0IG9mIHRoZSB0cmVlLgogICAgIC8vCkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9kb20vUHJvY2Vzc2luZ0luc3RydWN0aW9uLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9kb20vUHJvY2Vzc2luZ0luc3RydWN0aW9uLmNwcAkocmV2aXNpb24gMjIzNDc1
KQorKysgU291cmNlL1dlYkNvcmUvZG9tL1Byb2Nlc3NpbmdJbnN0cnVjdGlvbi5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTI3NCwxNiArMjc0LDE2IEBAIHZvaWQgUHJvY2Vzc2luZ0luc3RydWN0aW9u
OjphZGRTdWJyZXNvdXIKICAgICBhZGRTdWJyZXNvdXJjZVVSTCh1cmxzLCBzaGVldCgpLT5iYXNl
VVJMKCkpOwogfQogCi1Ob2RlOjpJbnNlcnRpb25Ob3RpZmljYXRpb25SZXF1ZXN0IFByb2Nlc3Np
bmdJbnN0cnVjdGlvbjo6aW5zZXJ0ZWRJbnRvKENvbnRhaW5lck5vZGUmIGluc2VydGlvblBvaW50
KQorTm9kZTo6SW5zZXJ0ZWRJbnRvUmVzdWx0IFByb2Nlc3NpbmdJbnN0cnVjdGlvbjo6aW5zZXJ0
ZWRJbnRvKEluc2VydGlvblR5cGUgaW5zZXJ0aW9uVHlwZSwgQ29udGFpbmVyTm9kZSYgcGFyZW50
T2ZJbnNlcnRlZFRyZWUpCiB7Ci0gICAgQ2hhcmFjdGVyRGF0YTo6aW5zZXJ0ZWRJbnRvKGluc2Vy
dGlvblBvaW50KTsKLSAgICBpZiAoIWluc2VydGlvblBvaW50LmlzQ29ubmVjdGVkKCkpCi0gICAg
ICAgIHJldHVybiBJbnNlcnRpb25Eb25lOworICAgIENoYXJhY3RlckRhdGE6Omluc2VydGVkSW50
byhpbnNlcnRpb25UeXBlLCBwYXJlbnRPZkluc2VydGVkVHJlZSk7CisgICAgaWYgKCFpbnNlcnRp
b25UeXBlLmNvbm5lY3RlZFRvRG9jdW1lbnQpCisgICAgICAgIHJldHVybiBJbnNlcnRlZEludG9S
ZXN1bHQ6OkRvbmU7CiAgICAgZG9jdW1lbnQoKS5zdHlsZVNjb3BlKCkuYWRkU3R5bGVTaGVldENh
bmRpZGF0ZU5vZGUoKnRoaXMsIG1fY3JlYXRlZEJ5UGFyc2VyKTsKLSAgICByZXR1cm4gSW5zZXJ0
aW9uU2hvdWxkQ2FsbEZpbmlzaGVkSW5zZXJ0aW5nU3VidHJlZTsKKyAgICByZXR1cm4gSW5zZXJ0
ZWRJbnRvUmVzdWx0OjpOZWVkc1Bvc3RJbnNlcnRpb25DYWxsYmFjazsKIH0KIAotdm9pZCBQcm9j
ZXNzaW5nSW5zdHJ1Y3Rpb246OmZpbmlzaGVkSW5zZXJ0aW5nU3VidHJlZSgpCit2b2lkIFByb2Nl
c3NpbmdJbnN0cnVjdGlvbjo6ZGlkRmluaXNoSW5zZXJ0aW5nTm9kZSgpCiB7CiAgICAgY2hlY2tT
dHlsZVNoZWV0KCk7CiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20vUHJvY2Vzc2luZ0luc3Ry
dWN0aW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZG9tL1Byb2Nlc3NpbmdJbnN0
cnVjdGlvbi5oCShyZXZpc2lvbiAyMjM0NzUpCisrKyBTb3VyY2UvV2ViQ29yZS9kb20vUHJvY2Vz
c2luZ0luc3RydWN0aW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTU4LDggKzU4LDggQEAgcHJpdmF0
ZToKICAgICBOb2RlVHlwZSBub2RlVHlwZSgpIGNvbnN0IG92ZXJyaWRlOwogICAgIFJlZjxOb2Rl
PiBjbG9uZU5vZGVJbnRlcm5hbChEb2N1bWVudCYsIENsb25pbmdPcGVyYXRpb24pIG92ZXJyaWRl
OwogCi0gICAgSW5zZXJ0aW9uTm90aWZpY2F0aW9uUmVxdWVzdCBpbnNlcnRlZEludG8oQ29udGFp
bmVyTm9kZSYpIG92ZXJyaWRlOwotICAgIHZvaWQgZmluaXNoZWRJbnNlcnRpbmdTdWJ0cmVlKCkg
b3ZlcnJpZGU7CisgICAgSW5zZXJ0ZWRJbnRvUmVzdWx0IGluc2VydGVkSW50byhJbnNlcnRpb25U
eXBlLCBDb250YWluZXJOb2RlJikgb3ZlcnJpZGU7CisgICAgdm9pZCBkaWRGaW5pc2hJbnNlcnRp
bmdOb2RlKCkgb3ZlcnJpZGU7CiAgICAgdm9pZCByZW1vdmVkRnJvbShDb250YWluZXJOb2RlJikg
b3ZlcnJpZGU7CiAKICAgICB2b2lkIGNoZWNrU3R5bGVTaGVldCgpOwpJbmRleDogU291cmNlL1dl
YkNvcmUvZG9tL1NjcmlwdEVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L2RvbS9TY3JpcHRFbGVtZW50LmNwcAkocmV2aXNpb24gMjIzNDc1KQorKysgU291cmNlL1dlYkNv
cmUvZG9tL1NjcmlwdEVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03OCwxMiArNzgsNyBA
QCBTY3JpcHRFbGVtZW50OjpTY3JpcHRFbGVtZW50KEVsZW1lbnQmIGVsCiAgICAgICAgIG1fc3Rh
cnRMaW5lTnVtYmVyID0gbV9lbGVtZW50LmRvY3VtZW50KCkuc2NyaXB0YWJsZURvY3VtZW50UGFy
c2VyKCktPnRleHRQb3NpdGlvbigpLm1fbGluZTsKIH0KIAotYm9vbCBTY3JpcHRFbGVtZW50Ojpz
aG91bGRDYWxsRmluaXNoZWRJbnNlcnRpbmdTdWJ0cmVlKENvbnRhaW5lck5vZGUmIGluc2VydGlv
blBvaW50KQotewotICAgIHJldHVybiBpbnNlcnRpb25Qb2ludC5pc0Nvbm5lY3RlZCgpICYmICFt
X3BhcnNlckluc2VydGVkOwotfQotCi12b2lkIFNjcmlwdEVsZW1lbnQ6OmZpbmlzaGVkSW5zZXJ0
aW5nU3VidHJlZSgpCit2b2lkIFNjcmlwdEVsZW1lbnQ6OmRpZEZpbmlzaEluc2VydGluZ05vZGUo
KQogewogICAgIEFTU0VSVCghbV9wYXJzZXJJbnNlcnRlZCk7CiAgICAgcHJlcGFyZVNjcmlwdCgp
OyAvLyBGSVhNRTogUHJvdmlkZSBhIHJlYWwgc3RhcnRpbmcgbGluZSBudW1iZXIgaGVyZS4KSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9TY3JpcHRFbGVtZW50LmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvZG9tL1NjcmlwdEVsZW1lbnQuaAkocmV2aXNpb24gMjIzNDc1KQorKysgU291
cmNlL1dlYkNvcmUvZG9tL1NjcmlwdEVsZW1lbnQuaAkod29ya2luZyBjb3B5KQpAQCAtODEsOCAr
ODEsMTQgQEAgcHJvdGVjdGVkOgogICAgIGJvb2wgZm9yY2VBc3luYygpIGNvbnN0IHsgcmV0dXJu
IG1fZm9yY2VBc3luYzsgfQogCiAgICAgLy8gSGVscGVyIGZ1bmN0aW9ucyB1c2VkIGJ5IG91ciBw
YXJlbnQgY2xhc3Nlcy4KLSAgICBib29sIHNob3VsZENhbGxGaW5pc2hlZEluc2VydGluZ1N1YnRy
ZWUoQ29udGFpbmVyTm9kZSYpOwotICAgIHZvaWQgZmluaXNoZWRJbnNlcnRpbmdTdWJ0cmVlKCk7
CisgICAgTm9kZTo6SW5zZXJ0ZWRJbnRvUmVzdWx0IGluc2VydGVkSW50byhOb2RlOjpJbnNlcnRp
b25UeXBlIGluc2VydGlvblR5cGUsIENvbnRhaW5lck5vZGUmKSBjb25zdAorICAgIHsKKyAgICAg
ICAgaWYgKGluc2VydGlvblR5cGUuY29ubmVjdGVkVG9Eb2N1bWVudCAmJiAhbV9wYXJzZXJJbnNl
cnRlZCkKKyAgICAgICAgICAgIHJldHVybiBOb2RlOjpJbnNlcnRlZEludG9SZXN1bHQ6Ok5lZWRz
UG9zdEluc2VydGlvbkNhbGxiYWNrOworICAgICAgICByZXR1cm4gTm9kZTo6SW5zZXJ0ZWRJbnRv
UmVzdWx0OjpEb25lOworICAgIH0KKworICAgIHZvaWQgZGlkRmluaXNoSW5zZXJ0aW5nTm9kZSgp
OwogICAgIHZvaWQgY2hpbGRyZW5DaGFuZ2VkKGNvbnN0IENvbnRhaW5lck5vZGU6OkNoaWxkQ2hh
bmdlJik7CiAgICAgdm9pZCBoYW5kbGVTb3VyY2VBdHRyaWJ1dGUoY29uc3QgU3RyaW5nJiBzb3Vy
Y2VVUkwpOwogICAgIHZvaWQgaGFuZGxlQXN5bmNBdHRyaWJ1dGUoKTsKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL2RvbS9TaGFkb3dSb290LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9k
b20vU2hhZG93Um9vdC5jcHAJKHJldmlzaW9uIDIyMzQ3NSkKKysrIFNvdXJjZS9XZWJDb3JlL2Rv
bS9TaGFkb3dSb290LmNwcAkod29ya2luZyBjb3B5KQpAQCAtODUsMTMgKzg1LDEyIEBAIFNoYWRv
d1Jvb3Q6On5TaGFkb3dSb290KCkKICAgICByZW1vdmVEZXRhY2hlZENoaWxkcmVuKCk7CiB9CiAK
LU5vZGU6Okluc2VydGlvbk5vdGlmaWNhdGlvblJlcXVlc3QgU2hhZG93Um9vdDo6aW5zZXJ0ZWRJ
bnRvKENvbnRhaW5lck5vZGUmIGluc2VydGlvblBvaW50KQorTm9kZTo6SW5zZXJ0ZWRJbnRvUmVz
dWx0IFNoYWRvd1Jvb3Q6Omluc2VydGVkSW50byhJbnNlcnRpb25UeXBlIGluc2VydGlvblR5cGUs
IENvbnRhaW5lck5vZGUmIHBhcmVudE9mSW5zZXJ0ZWRUcmVlKQogewotICAgIGJvb2wgd2FzSW5E
b2N1bWVudCA9IGlzQ29ubmVjdGVkKCk7Ci0gICAgRG9jdW1lbnRGcmFnbWVudDo6aW5zZXJ0ZWRJ
bnRvKGluc2VydGlvblBvaW50KTsKLSAgICBpZiAoaW5zZXJ0aW9uUG9pbnQuaXNDb25uZWN0ZWQo
KSAmJiAhd2FzSW5Eb2N1bWVudCkKKyAgICBEb2N1bWVudEZyYWdtZW50OjppbnNlcnRlZEludG8o
aW5zZXJ0aW9uVHlwZSwgcGFyZW50T2ZJbnNlcnRlZFRyZWUpOworICAgIGlmIChpbnNlcnRpb25U
eXBlLmNvbm5lY3RlZFRvRG9jdW1lbnQpCiAgICAgICAgIGRvY3VtZW50KCkuZGlkSW5zZXJ0SW5E
b2N1bWVudFNoYWRvd1Jvb3QoKnRoaXMpOwotICAgIHJldHVybiBJbnNlcnRpb25Eb25lOworICAg
IHJldHVybiBJbnNlcnRlZEludG9SZXN1bHQ6OkRvbmU7CiB9CiAKIHZvaWQgU2hhZG93Um9vdDo6
cmVtb3ZlZEZyb20oQ29udGFpbmVyTm9kZSYgaW5zZXJ0aW9uUG9pbnQpCkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9kb20vU2hhZG93Um9vdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Rv
bS9TaGFkb3dSb290LmgJKHJldmlzaW9uIDIyMzQ3NSkKKysrIFNvdXJjZS9XZWJDb3JlL2RvbS9T
aGFkb3dSb290LmgJKHdvcmtpbmcgY29weSkKQEAgLTk0LDcgKzk0LDcgQEAgcHJpdmF0ZToKIAog
ICAgIFJlZjxOb2RlPiBjbG9uZU5vZGVJbnRlcm5hbChEb2N1bWVudCYsIENsb25pbmdPcGVyYXRp
b24pIG92ZXJyaWRlOwogCi0gICAgTm9kZTo6SW5zZXJ0aW9uTm90aWZpY2F0aW9uUmVxdWVzdCBp
bnNlcnRlZEludG8oQ29udGFpbmVyTm9kZSYgaW5zZXJ0aW9uUG9pbnQpIG92ZXJyaWRlOworICAg
IE5vZGU6Okluc2VydGVkSW50b1Jlc3VsdCBpbnNlcnRlZEludG8oSW5zZXJ0aW9uVHlwZSwgQ29u
dGFpbmVyTm9kZSYpIG92ZXJyaWRlOwogICAgIHZvaWQgcmVtb3ZlZEZyb20oQ29udGFpbmVyTm9k
ZSYgaW5zZXJ0aW9uUG9pbnQpIG92ZXJyaWRlOwogICAgIHZvaWQgZGlkTW92ZVRvTmV3RG9jdW1l
bnQoRG9jdW1lbnQmIG9sZERvY3VtZW50LCBEb2N1bWVudCYgbmV3RG9jdW1lbnQpIG92ZXJyaWRl
OwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL0Zvcm1Bc3NvY2lhdGVkRWxlbWVudC5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9Gb3JtQXNzb2NpYXRlZEVsZW1lbnQu
Y3BwCShyZXZpc2lvbiAyMjM0NzUpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL0Zvcm1Bc3NvY2lh
dGVkRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY4LDcgKzY4LDcgQEAgdm9pZCBGb3Jt
QXNzb2NpYXRlZEVsZW1lbnQ6OmRpZE1vdmVUb05ldwogICAgICAgICByZXNldEZvcm1BdHRyaWJ1
dGVUYXJnZXRPYnNlcnZlcigpOwogfQogCi12b2lkIEZvcm1Bc3NvY2lhdGVkRWxlbWVudDo6aW5z
ZXJ0ZWRJbnRvKENvbnRhaW5lck5vZGUmIGluc2VydGlvblBvaW50KQordm9pZCBGb3JtQXNzb2Np
YXRlZEVsZW1lbnQ6Omluc2VydGVkSW50byhOb2RlOjpJbnNlcnRpb25UeXBlIGluc2VydGlvblR5
cGUsIENvbnRhaW5lck5vZGUmKQogewogICAgIEhUTUxFbGVtZW50JiBlbGVtZW50ID0gYXNIVE1M
RWxlbWVudCgpOwogICAgIGlmIChtX2Zvcm1TZXRCeVBhcnNlcikgewpAQCAtODEsNyArODEsNyBA
QCB2b2lkIEZvcm1Bc3NvY2lhdGVkRWxlbWVudDo6aW5zZXJ0ZWRJbnRvCiAgICAgaWYgKG1fZm9y
bSAmJiBlbGVtZW50LnJvb3RFbGVtZW50KCkgIT0gbV9mb3JtLT5yb290RWxlbWVudCgpKQogICAg
ICAgICBzZXRGb3JtKG51bGxwdHIpOwogCi0gICAgaWYgKCFpbnNlcnRpb25Qb2ludC5pc0Nvbm5l
Y3RlZCgpKQorICAgIGlmICghaW5zZXJ0aW9uVHlwZS5jb25uZWN0ZWRUb0RvY3VtZW50KQogICAg
ICAgICByZXR1cm47CiAKICAgICBpZiAoZWxlbWVudC5oYXNBdHRyaWJ1dGVXaXRob3V0U3luY2hy
b25pemF0aW9uKGZvcm1BdHRyKSkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvRm9ybUFzc29j
aWF0ZWRFbGVtZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9Gb3JtQXNz
b2NpYXRlZEVsZW1lbnQuaAkocmV2aXNpb24gMjIzNDc1KQorKysgU291cmNlL1dlYkNvcmUvaHRt
bC9Gb3JtQXNzb2NpYXRlZEVsZW1lbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMjQsNiArMjQsNyBA
QAogI3ByYWdtYSBvbmNlCiAKICNpbmNsdWRlICJGb3JtTmFtZWRJdGVtLmgiCisjaW5jbHVkZSAi
Tm9kZS5oIgogI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgogCiBuYW1lc3BhY2UgV2Vi
Q29yZSB7CkBAIC0zNCw3ICszNSw2IEBAIGNsYXNzIERvY3VtZW50OwogY2xhc3MgRm9ybUF0dHJp
YnV0ZVRhcmdldE9ic2VydmVyOwogY2xhc3MgSFRNTEVsZW1lbnQ7CiBjbGFzcyBIVE1MRm9ybUVs
ZW1lbnQ7Ci1jbGFzcyBOb2RlOwogY2xhc3MgVmFsaWRpdHlTdGF0ZTsKIAogY2xhc3MgRm9ybUFz
c29jaWF0ZWRFbGVtZW50IDogcHVibGljIEZvcm1OYW1lZEl0ZW0gewpAQCAtOTAsNyArOTAsNyBA
QCBwdWJsaWM6CiBwcm90ZWN0ZWQ6CiAgICAgRm9ybUFzc29jaWF0ZWRFbGVtZW50KEhUTUxGb3Jt
RWxlbWVudCopOwogCi0gICAgdm9pZCBpbnNlcnRlZEludG8oQ29udGFpbmVyTm9kZSYpOworICAg
IHZvaWQgaW5zZXJ0ZWRJbnRvKE5vZGU6Okluc2VydGlvblR5cGUsIENvbnRhaW5lck5vZGUmKTsK
ICAgICB2b2lkIHJlbW92ZWRGcm9tKENvbnRhaW5lck5vZGUmKTsKICAgICB2b2lkIGRpZE1vdmVU
b05ld0RvY3VtZW50KERvY3VtZW50JiBvbGREb2N1bWVudCk7CiAKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL2h0bWwvSFRNTEJhc2VFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9odG1sL0hUTUxCYXNlRWxlbWVudC5jcHAJKHJldmlzaW9uIDIyMzQ3NSkKKysrIFNvdXJjZS9X
ZWJDb3JlL2h0bWwvSFRNTEJhc2VFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTEsMTIg
KzUxLDEyIEBAIHZvaWQgSFRNTEJhc2VFbGVtZW50OjpwYXJzZUF0dHJpYnV0ZShjb24KICAgICAg
ICAgSFRNTEVsZW1lbnQ6OnBhcnNlQXR0cmlidXRlKG5hbWUsIHZhbHVlKTsKIH0KIAotTm9kZTo6
SW5zZXJ0aW9uTm90aWZpY2F0aW9uUmVxdWVzdCBIVE1MQmFzZUVsZW1lbnQ6Omluc2VydGVkSW50
byhDb250YWluZXJOb2RlJiBpbnNlcnRpb25Qb2ludCkKK05vZGU6Okluc2VydGVkSW50b1Jlc3Vs
dCBIVE1MQmFzZUVsZW1lbnQ6Omluc2VydGVkSW50byhJbnNlcnRpb25UeXBlIGluc2VydGlvblR5
cGUsIENvbnRhaW5lck5vZGUmIHBhcmVudE9mSW5zZXJ0ZWRUcmVlKQogewotICAgIEhUTUxFbGVt
ZW50OjppbnNlcnRlZEludG8oaW5zZXJ0aW9uUG9pbnQpOwotICAgIGlmIChpbnNlcnRpb25Qb2lu
dC5pc0Nvbm5lY3RlZCgpKQorICAgIEhUTUxFbGVtZW50OjppbnNlcnRlZEludG8oaW5zZXJ0aW9u
VHlwZSwgcGFyZW50T2ZJbnNlcnRlZFRyZWUpOworICAgIGlmIChpbnNlcnRpb25UeXBlLmNvbm5l
Y3RlZFRvRG9jdW1lbnQpCiAgICAgICAgIGRvY3VtZW50KCkucHJvY2Vzc0Jhc2VFbGVtZW50KCk7
Ci0gICAgcmV0dXJuIEluc2VydGlvbkRvbmU7CisgICAgcmV0dXJuIEluc2VydGVkSW50b1Jlc3Vs
dDo6RG9uZTsKIH0KIAogdm9pZCBIVE1MQmFzZUVsZW1lbnQ6OnJlbW92ZWRGcm9tKENvbnRhaW5l
ck5vZGUmIGluc2VydGlvblBvaW50KQpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MQmFz
ZUVsZW1lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxCYXNlRWxl
bWVudC5oCShyZXZpc2lvbiAyMjM0NzUpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxCYXNl
RWxlbWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zOSw3ICszOSw3IEBAIHByaXZhdGU6CiAgICAg
U3RyaW5nIHRhcmdldCgpIGNvbnN0IGZpbmFsOwogICAgIGJvb2wgaXNVUkxBdHRyaWJ1dGUoY29u
c3QgQXR0cmlidXRlJikgY29uc3QgZmluYWw7CiAgICAgdm9pZCBwYXJzZUF0dHJpYnV0ZShjb25z
dCBRdWFsaWZpZWROYW1lJiwgY29uc3QgQXRvbWljU3RyaW5nJikgZmluYWw7Ci0gICAgSW5zZXJ0
aW9uTm90aWZpY2F0aW9uUmVxdWVzdCBpbnNlcnRlZEludG8oQ29udGFpbmVyTm9kZSYpIGZpbmFs
OworICAgIEluc2VydGVkSW50b1Jlc3VsdCBpbnNlcnRlZEludG8oSW5zZXJ0aW9uVHlwZSwgQ29u
dGFpbmVyTm9kZSYpIGZpbmFsOwogICAgIHZvaWQgcmVtb3ZlZEZyb20oQ29udGFpbmVyTm9kZSYp
IGZpbmFsOwogfTsKIApJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MQm9keUVsZW1lbnQu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEJvZHlFbGVtZW50LmNw
cAkocmV2aXNpb24gMjIzNDc1KQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MQm9keUVsZW1l
bnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xODcsMjMgKzE4NywyMyBAQCB2b2lkIEhUTUxCb2R5
RWxlbWVudDo6cGFyc2VBdHRyaWJ1dGUoY29uCiAgICAgSFRNTEVsZW1lbnQ6OnBhcnNlQXR0cmli
dXRlKG5hbWUsIHZhbHVlKTsKIH0KIAotTm9kZTo6SW5zZXJ0aW9uTm90aWZpY2F0aW9uUmVxdWVz
dCBIVE1MQm9keUVsZW1lbnQ6Omluc2VydGVkSW50byhDb250YWluZXJOb2RlJiBpbnNlcnRpb25Q
b2ludCkKK05vZGU6Okluc2VydGVkSW50b1Jlc3VsdCBIVE1MQm9keUVsZW1lbnQ6Omluc2VydGVk
SW50byhJbnNlcnRpb25UeXBlIGluc2VydGlvblR5cGUsIENvbnRhaW5lck5vZGUmIHBhcmVudE9m
SW5zZXJ0ZWRUcmVlKQogewotICAgIEhUTUxFbGVtZW50OjppbnNlcnRlZEludG8oaW5zZXJ0aW9u
UG9pbnQpOwotICAgIGlmICghaW5zZXJ0aW9uUG9pbnQuaXNDb25uZWN0ZWQoKSkKLSAgICAgICAg
cmV0dXJuIEluc2VydGlvbkRvbmU7CisgICAgSFRNTEVsZW1lbnQ6Omluc2VydGVkSW50byhpbnNl
cnRpb25UeXBlLCBwYXJlbnRPZkluc2VydGVkVHJlZSk7CisgICAgaWYgKCFpbnNlcnRpb25UeXBl
LmNvbm5lY3RlZFRvRG9jdW1lbnQpCisgICAgICAgIHJldHVybiBJbnNlcnRlZEludG9SZXN1bHQ6
OkRvbmU7CiAKICAgICAvLyBGSVhNRTogSXQncyBzdXJwcmlzaW5nIHRoaXMgaXMgd2ViIGNvbXBh
dGlibGUgc2luY2UgaXQgbWVhbnMgYSBtYXJnaW53aWR0aCBhbmQgbWFyZ2luaGVpZ2h0IGF0dHJp
YnV0ZSBjYW4KICAgICAvLyBtYWdpY2FsbHkgYXBwZWFyIG9uIHRoZSA8Ym9keT4gb2YgYWxsIGRv
Y3VtZW50cyBlbWJlZGRlZCB0aHJvdWdoIDxpZnJhbWU+IG9yIDxmcmFtZT4uCiAgICAgLy8gRklY
TUU6IFBlcmhhcHMgdGhpcyBjb2RlIHNob3VsZCBiZSBpbiBhdHRhY2goKSBpbnN0ZWFkIG9mIGhl
cmUuCiAgICAgYXV0byogb3duZXJFbGVtZW50ID0gZG9jdW1lbnQoKS5vd25lckVsZW1lbnQoKTsK
ICAgICBpZiAoIWlzPEhUTUxGcmFtZUVsZW1lbnRCYXNlPihvd25lckVsZW1lbnQpKQotICAgICAg
ICByZXR1cm4gSW5zZXJ0aW9uRG9uZTsKKyAgICAgICAgcmV0dXJuIEluc2VydGVkSW50b1Jlc3Vs
dDo6RG9uZTsKIAotICAgIHJldHVybiBJbnNlcnRpb25TaG91bGRDYWxsRmluaXNoZWRJbnNlcnRp
bmdTdWJ0cmVlOworICAgIHJldHVybiBJbnNlcnRlZEludG9SZXN1bHQ6Ok5lZWRzUG9zdEluc2Vy
dGlvbkNhbGxiYWNrOwogfQogCi12b2lkIEhUTUxCb2R5RWxlbWVudDo6ZmluaXNoZWRJbnNlcnRp
bmdTdWJ0cmVlKCkKK3ZvaWQgSFRNTEJvZHlFbGVtZW50OjpkaWRGaW5pc2hJbnNlcnRpbmdOb2Rl
KCkKIHsKICAgICBhdXRvKiBvd25lckVsZW1lbnQgPSBkb2N1bWVudCgpLm93bmVyRWxlbWVudCgp
OwogICAgIFJFTEVBU0VfQVNTRVJUKGlzPEhUTUxGcmFtZUVsZW1lbnRCYXNlPihvd25lckVsZW1l
bnQpKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEJvZHlFbGVtZW50LmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MQm9keUVsZW1lbnQuaAkocmV2aXNpb24g
MjIzNDc1KQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MQm9keUVsZW1lbnQuaAkod29ya2lu
ZyBjb3B5KQpAQCAtNDQsOCArNDQsOCBAQCBwcml2YXRlOgogICAgIGJvb2wgaXNQcmVzZW50YXRp
b25BdHRyaWJ1dGUoY29uc3QgUXVhbGlmaWVkTmFtZSYpIGNvbnN0IGZpbmFsOwogICAgIHZvaWQg
Y29sbGVjdFN0eWxlRm9yUHJlc2VudGF0aW9uQXR0cmlidXRlKGNvbnN0IFF1YWxpZmllZE5hbWUm
LCBjb25zdCBBdG9taWNTdHJpbmcmLCBNdXRhYmxlU3R5bGVQcm9wZXJ0aWVzJikgZmluYWw7CiAK
LSAgICBJbnNlcnRpb25Ob3RpZmljYXRpb25SZXF1ZXN0IGluc2VydGVkSW50byhDb250YWluZXJO
b2RlJikgZmluYWw7Ci0gICAgdm9pZCBmaW5pc2hlZEluc2VydGluZ1N1YnRyZWUoKSBmaW5hbDsK
KyAgICBJbnNlcnRlZEludG9SZXN1bHQgaW5zZXJ0ZWRJbnRvKEluc2VydGlvblR5cGUsIENvbnRh
aW5lck5vZGUmKSBmaW5hbDsKKyAgICB2b2lkIGRpZEZpbmlzaEluc2VydGluZ05vZGUoKSBmaW5h
bDsKIAogICAgIGJvb2wgaXNVUkxBdHRyaWJ1dGUoY29uc3QgQXR0cmlidXRlJikgY29uc3QgZmlu
YWw7CiAgICAgCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxGb3JtQ29udHJvbEVsZW1l
bnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEZvcm1Db250cm9s
RWxlbWVudC5jcHAJKHJldmlzaW9uIDIyMzQ3NSkKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRN
TEZvcm1Db250cm9sRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI3NCwyMCArMjc0LDIw
IEBAIHN0YXRpYyB2b2lkIHJlbW92ZUludmFsaWRFbGVtZW50VG9BbmNlc3QKICAgICAgICAgYW5j
ZXN0b3IucmVtb3ZlSW52YWxpZERlc2NlbmRhbnQoZWxlbWVudCk7CiB9CiAKLU5vZGU6Okluc2Vy
dGlvbk5vdGlmaWNhdGlvblJlcXVlc3QgSFRNTEZvcm1Db250cm9sRWxlbWVudDo6aW5zZXJ0ZWRJ
bnRvKENvbnRhaW5lck5vZGUmIGluc2VydGlvblBvaW50KQorTm9kZTo6SW5zZXJ0ZWRJbnRvUmVz
dWx0IEhUTUxGb3JtQ29udHJvbEVsZW1lbnQ6Omluc2VydGVkSW50byhJbnNlcnRpb25UeXBlIGlu
c2VydGlvblR5cGUsIENvbnRhaW5lck5vZGUmIHBhcmVudE9mSW5zZXJ0ZWRUcmVlKQogewogICAg
IG1fZGF0YUxpc3RBbmNlc3RvclN0YXRlID0gVW5rbm93bjsKICAgICBzZXROZWVkc1dpbGxWYWxp
ZGF0ZUNoZWNrKCk7CiAgICAgaWYgKHdpbGxWYWxpZGF0ZSgpICYmICFpc1ZhbGlkRm9ybUNvbnRy
b2xFbGVtZW50KCkpCi0gICAgICAgIGFkZEludmFsaWRFbGVtZW50VG9BbmNlc3RvckZyb21JbnNl
cnRpb25Qb2ludCgqdGhpcywgJmluc2VydGlvblBvaW50KTsKKyAgICAgICAgYWRkSW52YWxpZEVs
ZW1lbnRUb0FuY2VzdG9yRnJvbUluc2VydGlvblBvaW50KCp0aGlzLCAmcGFyZW50T2ZJbnNlcnRl
ZFRyZWUpOwogICAgIGlmIChkb2N1bWVudCgpLmhhc0Rpc2FibGVkRmllbGRzZXRFbGVtZW50KCkp
CiAgICAgICAgIHNldEFuY2VzdG9yRGlzYWJsZWQoY29tcHV0ZUlzRGlzYWJsZWRCeUZpZWxkc2V0
QW5jZXN0b3IoKSk7Ci0gICAgSFRNTEVsZW1lbnQ6Omluc2VydGVkSW50byhpbnNlcnRpb25Qb2lu
dCk7Ci0gICAgRm9ybUFzc29jaWF0ZWRFbGVtZW50OjppbnNlcnRlZEludG8oaW5zZXJ0aW9uUG9p
bnQpOwotICAgIHJldHVybiBJbnNlcnRpb25TaG91bGRDYWxsRmluaXNoZWRJbnNlcnRpbmdTdWJ0
cmVlOworICAgIEhUTUxFbGVtZW50OjppbnNlcnRlZEludG8oaW5zZXJ0aW9uVHlwZSwgcGFyZW50
T2ZJbnNlcnRlZFRyZWUpOworICAgIEZvcm1Bc3NvY2lhdGVkRWxlbWVudDo6aW5zZXJ0ZWRJbnRv
KGluc2VydGlvblR5cGUsIHBhcmVudE9mSW5zZXJ0ZWRUcmVlKTsKKyAgICByZXR1cm4gSW5zZXJ0
ZWRJbnRvUmVzdWx0OjpOZWVkc1Bvc3RJbnNlcnRpb25DYWxsYmFjazsKIH0KIAotdm9pZCBIVE1M
Rm9ybUNvbnRyb2xFbGVtZW50OjpmaW5pc2hlZEluc2VydGluZ1N1YnRyZWUoKQordm9pZCBIVE1M
Rm9ybUNvbnRyb2xFbGVtZW50OjpkaWRGaW5pc2hJbnNlcnRpbmdOb2RlKCkKIHsKICAgICByZXNl
dEZvcm1Pd25lcigpOwogfQpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MRm9ybUNvbnRy
b2xFbGVtZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MRm9ybUNv
bnRyb2xFbGVtZW50LmgJKHJldmlzaW9uIDIyMzQ3NSkKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwv
SFRNTEZvcm1Db250cm9sRWxlbWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMzYsOCArMTM2LDgg
QEAgcHJvdGVjdGVkOgogICAgIHZpcnR1YWwgdm9pZCByZWFkT25seUF0dHJpYnV0ZUNoYW5nZWQo
KTsKICAgICB2aXJ0dWFsIHZvaWQgcmVxdWlyZWRBdHRyaWJ1dGVDaGFuZ2VkKCk7CiAgICAgdm9p
ZCBkaWRBdHRhY2hSZW5kZXJlcnMoKSBvdmVycmlkZTsKLSAgICBJbnNlcnRpb25Ob3RpZmljYXRp
b25SZXF1ZXN0IGluc2VydGVkSW50byhDb250YWluZXJOb2RlJikgb3ZlcnJpZGU7Ci0gICAgdm9p
ZCBmaW5pc2hlZEluc2VydGluZ1N1YnRyZWUoKSBvdmVycmlkZTsKKyAgICBJbnNlcnRlZEludG9S
ZXN1bHQgaW5zZXJ0ZWRJbnRvKEluc2VydGlvblR5cGUsIENvbnRhaW5lck5vZGUmKSBvdmVycmlk
ZTsKKyAgICB2b2lkIGRpZEZpbmlzaEluc2VydGluZ05vZGUoKSBvdmVycmlkZTsKICAgICB2b2lk
IHJlbW92ZWRGcm9tKENvbnRhaW5lck5vZGUmKSBvdmVycmlkZTsKICAgICB2b2lkIGRpZE1vdmVU
b05ld0RvY3VtZW50KERvY3VtZW50JiBvbGREb2N1bWVudCwgRG9jdW1lbnQmIG5ld0RvY3VtZW50
KSBvdmVycmlkZTsKIApJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MRm9ybUNvbnRyb2xF
bGVtZW50V2l0aFN0YXRlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL0hU
TUxGb3JtQ29udHJvbEVsZW1lbnRXaXRoU3RhdGUuY3BwCShyZXZpc2lvbiAyMjM0NzUpCisrKyBT
b3VyY2UvV2ViQ29yZS9odG1sL0hUTUxGb3JtQ29udHJvbEVsZW1lbnRXaXRoU3RhdGUuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC00MCwxMSArNDAsMTEgQEAgSFRNTEZvcm1Db250cm9sRWxlbWVudFdp
dGhTdGF0ZTo6fkhUTUxGbwogewogfQogCi1Ob2RlOjpJbnNlcnRpb25Ob3RpZmljYXRpb25SZXF1
ZXN0IEhUTUxGb3JtQ29udHJvbEVsZW1lbnRXaXRoU3RhdGU6Omluc2VydGVkSW50byhDb250YWlu
ZXJOb2RlJiBpbnNlcnRpb25Qb2ludCkKK05vZGU6Okluc2VydGVkSW50b1Jlc3VsdCBIVE1MRm9y
bUNvbnRyb2xFbGVtZW50V2l0aFN0YXRlOjppbnNlcnRlZEludG8oSW5zZXJ0aW9uVHlwZSBpbnNl
cnRpb25UeXBlLCBDb250YWluZXJOb2RlJiBwYXJlbnRPZkluc2VydGVkVHJlZSkKIHsKLSAgICBp
ZiAoaW5zZXJ0aW9uUG9pbnQuaXNDb25uZWN0ZWQoKSAmJiAhY29udGFpbmluZ1NoYWRvd1Jvb3Qo
KSkKKyAgICBpZiAoaW5zZXJ0aW9uVHlwZS5jb25uZWN0ZWRUb0RvY3VtZW50ICYmICFjb250YWlu
aW5nU2hhZG93Um9vdCgpKQogICAgICAgICBkb2N1bWVudCgpLmZvcm1Db250cm9sbGVyKCkucmVn
aXN0ZXJGb3JtRWxlbWVudFdpdGhTdGF0ZSh0aGlzKTsKLSAgICByZXR1cm4gSFRNTEZvcm1Db250
cm9sRWxlbWVudDo6aW5zZXJ0ZWRJbnRvKGluc2VydGlvblBvaW50KTsKKyAgICByZXR1cm4gSFRN
TEZvcm1Db250cm9sRWxlbWVudDo6aW5zZXJ0ZWRJbnRvKGluc2VydGlvblR5cGUsIHBhcmVudE9m
SW5zZXJ0ZWRUcmVlKTsKIH0KIAogdm9pZCBIVE1MRm9ybUNvbnRyb2xFbGVtZW50V2l0aFN0YXRl
OjpyZW1vdmVkRnJvbShDb250YWluZXJOb2RlJiBpbnNlcnRpb25Qb2ludCkKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL2h0bWwvSFRNTEZvcm1Db250cm9sRWxlbWVudFdpdGhTdGF0ZS5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEZvcm1Db250cm9sRWxlbWVudFdpdGhTdGF0
ZS5oCShyZXZpc2lvbiAyMjM0NzUpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxGb3JtQ29u
dHJvbEVsZW1lbnRXaXRoU3RhdGUuaAkod29ya2luZyBjb3B5KQpAQCAtNDUsNyArNDUsNyBAQCBw
cm90ZWN0ZWQ6CiAKICAgICB2aXJ0dWFsIGJvb2wgc2hvdWxkQXV0b2NvbXBsZXRlKCkgY29uc3Q7
CiAgICAgdm9pZCBmaW5pc2hQYXJzaW5nQ2hpbGRyZW4oKSBvdmVycmlkZTsKLSAgICBJbnNlcnRp
b25Ob3RpZmljYXRpb25SZXF1ZXN0IGluc2VydGVkSW50byhDb250YWluZXJOb2RlJikgb3ZlcnJp
ZGU7CisgICAgSW5zZXJ0ZWRJbnRvUmVzdWx0IGluc2VydGVkSW50byhJbnNlcnRpb25UeXBlLCBD
b250YWluZXJOb2RlJikgb3ZlcnJpZGU7CiAgICAgdm9pZCByZW1vdmVkRnJvbShDb250YWluZXJO
b2RlJikgb3ZlcnJpZGU7CiAgICAgYm9vbCBpc0Zvcm1Db250cm9sRWxlbWVudFdpdGhTdGF0ZSgp
IGNvbnN0IG92ZXJyaWRlOwogfTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEZvcm1F
bGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxGb3JtRWxl
bWVudC5jcHAJKHJldmlzaW9uIDIyMzQ3NSkKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEZv
cm1FbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTIxLDEyICsxMjEsMTIgQEAgYm9vbCBI
VE1MRm9ybUVsZW1lbnQ6OnJlbmRlcmVySXNOZWVkZWQoYwogICAgIHJldHVybiBmb3JtSXNUYWJs
ZVBhcnQ7CiB9CiAKLU5vZGU6Okluc2VydGlvbk5vdGlmaWNhdGlvblJlcXVlc3QgSFRNTEZvcm1F
bGVtZW50OjppbnNlcnRlZEludG8oQ29udGFpbmVyTm9kZSYgaW5zZXJ0aW9uUG9pbnQpCitOb2Rl
OjpJbnNlcnRlZEludG9SZXN1bHQgSFRNTEZvcm1FbGVtZW50OjppbnNlcnRlZEludG8oSW5zZXJ0
aW9uVHlwZSBpbnNlcnRpb25UeXBlLCBDb250YWluZXJOb2RlJiBwYXJlbnRPZkluc2VydGVkVHJl
ZSkKIHsKLSAgICBIVE1MRWxlbWVudDo6aW5zZXJ0ZWRJbnRvKGluc2VydGlvblBvaW50KTsKLSAg
ICBpZiAoaW5zZXJ0aW9uUG9pbnQuaXNDb25uZWN0ZWQoKSkKKyAgICBIVE1MRWxlbWVudDo6aW5z
ZXJ0ZWRJbnRvKGluc2VydGlvblR5cGUsIHBhcmVudE9mSW5zZXJ0ZWRUcmVlKTsKKyAgICBpZiAo
aW5zZXJ0aW9uVHlwZS5jb25uZWN0ZWRUb0RvY3VtZW50KQogICAgICAgICBkb2N1bWVudCgpLmRp
ZEFzc29jaWF0ZUZvcm1Db250cm9sKHRoaXMpOwotICAgIHJldHVybiBJbnNlcnRpb25Eb25lOwor
ICAgIHJldHVybiBJbnNlcnRlZEludG9SZXN1bHQ6OkRvbmU7CiB9CiAKIHZvaWQgSFRNTEZvcm1F
bGVtZW50OjpyZW1vdmVkRnJvbShDb250YWluZXJOb2RlJiBpbnNlcnRpb25Qb2ludCkKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEZvcm1FbGVtZW50LmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvaHRtbC9IVE1MRm9ybUVsZW1lbnQuaAkocmV2aXNpb24gMjIzNDc1KQorKysg
U291cmNlL1dlYkNvcmUvaHRtbC9IVE1MRm9ybUVsZW1lbnQuaAkod29ya2luZyBjb3B5KQpAQCAt
MTI0LDcgKzEyNCw3IEBAIHByaXZhdGU6CiAgICAgSFRNTEZvcm1FbGVtZW50KGNvbnN0IFF1YWxp
ZmllZE5hbWUmLCBEb2N1bWVudCYpOwogCiAgICAgYm9vbCByZW5kZXJlcklzTmVlZGVkKGNvbnN0
IFJlbmRlclN0eWxlJikgZmluYWw7Ci0gICAgSW5zZXJ0aW9uTm90aWZpY2F0aW9uUmVxdWVzdCBp
bnNlcnRlZEludG8oQ29udGFpbmVyTm9kZSYpIGZpbmFsOworICAgIEluc2VydGVkSW50b1Jlc3Vs
dCBpbnNlcnRlZEludG8oSW5zZXJ0aW9uVHlwZSwgQ29udGFpbmVyTm9kZSYpIGZpbmFsOwogICAg
IHZvaWQgcmVtb3ZlZEZyb20oQ29udGFpbmVyTm9kZSYpIGZpbmFsOwogICAgIHZvaWQgZmluaXNo
UGFyc2luZ0NoaWxkcmVuKCkgZmluYWw7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRN
TEZyYW1lRWxlbWVudEJhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwv
SFRNTEZyYW1lRWxlbWVudEJhc2UuY3BwCShyZXZpc2lvbiAyMjM0NzUpCisrKyBTb3VyY2UvV2Vi
Q29yZS9odG1sL0hUTUxGcmFtZUVsZW1lbnRCYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTM4
LDE1ICsxMzgsMTUgQEAgdm9pZCBIVE1MRnJhbWVFbGVtZW50QmFzZTo6c2V0TmFtZUFuZE9wZQog
ICAgIG9wZW5VUkwoKTsKIH0KIAotTm9kZTo6SW5zZXJ0aW9uTm90aWZpY2F0aW9uUmVxdWVzdCBI
VE1MRnJhbWVFbGVtZW50QmFzZTo6aW5zZXJ0ZWRJbnRvKENvbnRhaW5lck5vZGUmIGluc2VydGlv
blBvaW50KQorTm9kZTo6SW5zZXJ0ZWRJbnRvUmVzdWx0IEhUTUxGcmFtZUVsZW1lbnRCYXNlOjpp
bnNlcnRlZEludG8oSW5zZXJ0aW9uVHlwZSBpbnNlcnRpb25UeXBlLCBDb250YWluZXJOb2RlJiBw
YXJlbnRPZkluc2VydGVkVHJlZSkKIHsKLSAgICBIVE1MRnJhbWVPd25lckVsZW1lbnQ6Omluc2Vy
dGVkSW50byhpbnNlcnRpb25Qb2ludCk7Ci0gICAgaWYgKGluc2VydGlvblBvaW50LmlzQ29ubmVj
dGVkKCkpCi0gICAgICAgIHJldHVybiBJbnNlcnRpb25TaG91bGRDYWxsRmluaXNoZWRJbnNlcnRp
bmdTdWJ0cmVlOwotICAgIHJldHVybiBJbnNlcnRpb25Eb25lOworICAgIEhUTUxGcmFtZU93bmVy
RWxlbWVudDo6aW5zZXJ0ZWRJbnRvKGluc2VydGlvblR5cGUsIHBhcmVudE9mSW5zZXJ0ZWRUcmVl
KTsKKyAgICBpZiAoaW5zZXJ0aW9uVHlwZS5jb25uZWN0ZWRUb0RvY3VtZW50KQorICAgICAgICBy
ZXR1cm4gSW5zZXJ0ZWRJbnRvUmVzdWx0OjpOZWVkc1Bvc3RJbnNlcnRpb25DYWxsYmFjazsKKyAg
ICByZXR1cm4gSW5zZXJ0ZWRJbnRvUmVzdWx0OjpEb25lOwogfQogCi12b2lkIEhUTUxGcmFtZUVs
ZW1lbnRCYXNlOjpmaW5pc2hlZEluc2VydGluZ1N1YnRyZWUoKQordm9pZCBIVE1MRnJhbWVFbGVt
ZW50QmFzZTo6ZGlkRmluaXNoSW5zZXJ0aW5nTm9kZSgpCiB7CiAgICAgaWYgKCFpc0Nvbm5lY3Rl
ZCgpKQogICAgICAgICByZXR1cm47CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxGcmFt
ZUVsZW1lbnRCYXNlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MRnJh
bWVFbGVtZW50QmFzZS5oCShyZXZpc2lvbiAyMjM0NzUpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1s
L0hUTUxGcmFtZUVsZW1lbnRCYXNlLmgJKHdvcmtpbmcgY29weSkKQEAgLTU2LDggKzU2LDggQEAg
cHJvdGVjdGVkOgogICAgIGJvb2wgaXNVUkxBbGxvd2VkKCkgY29uc3Q7CiAKICAgICB2b2lkIHBh
cnNlQXR0cmlidXRlKGNvbnN0IFF1YWxpZmllZE5hbWUmLCBjb25zdCBBdG9taWNTdHJpbmcmKSBv
dmVycmlkZTsKLSAgICBJbnNlcnRpb25Ob3RpZmljYXRpb25SZXF1ZXN0IGluc2VydGVkSW50byhD
b250YWluZXJOb2RlJikgZmluYWw7Ci0gICAgdm9pZCBmaW5pc2hlZEluc2VydGluZ1N1YnRyZWUo
KSBmaW5hbDsKKyAgICBJbnNlcnRlZEludG9SZXN1bHQgaW5zZXJ0ZWRJbnRvKEluc2VydGlvblR5
cGUsIENvbnRhaW5lck5vZGUmKSBmaW5hbDsKKyAgICB2b2lkIGRpZEZpbmlzaEluc2VydGluZ05v
ZGUoKSBmaW5hbDsKICAgICB2b2lkIGRpZEF0dGFjaFJlbmRlcmVycygpIG92ZXJyaWRlOwogCiBw
cml2YXRlOgpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MRnJhbWVTZXRFbGVtZW50LmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxGcmFtZVNldEVsZW1lbnQu
Y3BwCShyZXZpc2lvbiAyMjM0NzUpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxGcmFtZVNl
dEVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMDgsMTUgKzIwOCwxNSBAQCB2b2lkIEhU
TUxGcmFtZVNldEVsZW1lbnQ6OndpbGxSZWNhbGNTdHlsCiAgICAgICAgIHJlbmRlcmVyKCktPnNl
dE5lZWRzTGF5b3V0KCk7CiB9CiAKLU5vZGU6Okluc2VydGlvbk5vdGlmaWNhdGlvblJlcXVlc3Qg
SFRNTEZyYW1lU2V0RWxlbWVudDo6aW5zZXJ0ZWRJbnRvKENvbnRhaW5lck5vZGUmIGluc2VydGlv
blBvaW50KQorTm9kZTo6SW5zZXJ0ZWRJbnRvUmVzdWx0IEhUTUxGcmFtZVNldEVsZW1lbnQ6Omlu
c2VydGVkSW50byhJbnNlcnRpb25UeXBlIGluc2VydGlvblR5cGUsIENvbnRhaW5lck5vZGUmIHBh
cmVudE9mSW5zZXJ0ZWRUcmVlKQogewotICAgIEhUTUxFbGVtZW50OjppbnNlcnRlZEludG8oaW5z
ZXJ0aW9uUG9pbnQpOwotICAgIGlmIChpbnNlcnRpb25Qb2ludC5pc0Nvbm5lY3RlZCgpKSB7Cisg
ICAgSFRNTEVsZW1lbnQ6Omluc2VydGVkSW50byhpbnNlcnRpb25UeXBlLCBwYXJlbnRPZkluc2Vy
dGVkVHJlZSk7CisgICAgaWYgKGluc2VydGlvblR5cGUuY29ubmVjdGVkVG9Eb2N1bWVudCkgewog
ICAgICAgICBpZiAoRnJhbWUqIGZyYW1lID0gZG9jdW1lbnQoKS5mcmFtZSgpKQogICAgICAgICAg
ICAgZnJhbWUtPmxvYWRlcigpLmNsaWVudCgpLmRpc3BhdGNoRGlkQmVjb21lRnJhbWVzZXQoZG9j
dW1lbnQoKS5pc0ZyYW1lU2V0KCkpOwogICAgIH0KIAotICAgIHJldHVybiBJbnNlcnRpb25Eb25l
OworICAgIHJldHVybiBJbnNlcnRlZEludG9SZXN1bHQ6OkRvbmU7CiB9CiAKIHZvaWQgSFRNTEZy
YW1lU2V0RWxlbWVudDo6cmVtb3ZlZEZyb20oQ29udGFpbmVyTm9kZSYgaW5zZXJ0aW9uUG9pbnQp
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxGcmFtZVNldEVsZW1lbnQuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxGcmFtZVNldEVsZW1lbnQuaAkocmV2aXNp
b24gMjIzNDc1KQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MRnJhbWVTZXRFbGVtZW50LmgJ
KHdvcmtpbmcgY29weSkKQEAgLTY0LDcgKzY0LDcgQEAgcHJpdmF0ZToKIAogICAgIHZvaWQgd2ls
bFJlY2FsY1N0eWxlKFN0eWxlOjpDaGFuZ2UpIGZpbmFsOwogCi0gICAgSW5zZXJ0aW9uTm90aWZp
Y2F0aW9uUmVxdWVzdCBpbnNlcnRlZEludG8oQ29udGFpbmVyTm9kZSYpIGZpbmFsOworICAgIElu
c2VydGVkSW50b1Jlc3VsdCBpbnNlcnRlZEludG8oSW5zZXJ0aW9uVHlwZSwgQ29udGFpbmVyTm9k
ZSYpIGZpbmFsOwogICAgIHZvaWQgcmVtb3ZlZEZyb20oQ29udGFpbmVyTm9kZSYpIGZpbmFsOwog
CiAgICAgc3RkOjp1bmlxdWVfcHRyPExlbmd0aFtdPiBtX3Jvd0xlbmd0aHM7CkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9odG1sL0hUTUxJbWFnZUVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL2h0bWwvSFRNTEltYWdlRWxlbWVudC5jcHAJKHJldmlzaW9uIDIyMzQ3NSkKKysr
IFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEltYWdlRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTI5Myw3ICsyOTMsNyBAQCB2b2lkIEhUTUxJbWFnZUVsZW1lbnQ6OmRpZEF0dGFjaFJlbmRl
cmVyCiAgICAgICAgIHJlbmRlckltYWdlLnNldEltYWdlU2l6ZUZvckFsdFRleHQoKTsKIH0KIAot
Tm9kZTo6SW5zZXJ0aW9uTm90aWZpY2F0aW9uUmVxdWVzdCBIVE1MSW1hZ2VFbGVtZW50OjppbnNl
cnRlZEludG8oQ29udGFpbmVyTm9kZSYgaW5zZXJ0aW9uUG9pbnQpCitOb2RlOjpJbnNlcnRlZElu
dG9SZXN1bHQgSFRNTEltYWdlRWxlbWVudDo6aW5zZXJ0ZWRJbnRvKEluc2VydGlvblR5cGUgaW5z
ZXJ0aW9uVHlwZSwgQ29udGFpbmVyTm9kZSYgcGFyZW50T2ZJbnNlcnRlZFRyZWUpCiB7CiAgICAg
aWYgKG1fZm9ybVNldEJ5UGFyc2VyKSB7CiAgICAgICAgIG1fZm9ybSA9IG1fZm9ybVNldEJ5UGFy
c2VyOwpAQCAtMzEzLDkgKzMxMyw5IEBAIE5vZGU6Okluc2VydGlvbk5vdGlmaWNhdGlvblJlcXVl
c3QgSFRNTEkKICAgICB9CiAgICAgLy8gSW5zZXJ0IG5lZWRzIHRvIGNvbXBsZXRlIGZpcnN0LCBi
ZWZvcmUgd2Ugc3RhcnQgdXBkYXRpbmcgdGhlIGxvYWRlci4gTG9hZGVyIGRpc3BhdGNoZXMgZXZl
bnRzIHdoaWNoIGNvdWxkIHJlc3VsdAogICAgIC8vIGluIGNhbGxiYWNrcyBiYWNrIHRvIHRoaXMg
bm9kZS4KLSAgICBOb2RlOjpJbnNlcnRpb25Ob3RpZmljYXRpb25SZXF1ZXN0IGluc2VydE5vdGlm
aWNhdGlvblJlcXVlc3QgPSBIVE1MRWxlbWVudDo6aW5zZXJ0ZWRJbnRvKGluc2VydGlvblBvaW50
KTsKKyAgICBOb2RlOjpJbnNlcnRlZEludG9SZXN1bHQgaW5zZXJ0Tm90aWZpY2F0aW9uUmVxdWVz
dCA9IEhUTUxFbGVtZW50OjppbnNlcnRlZEludG8oaW5zZXJ0aW9uVHlwZSwgcGFyZW50T2ZJbnNl
cnRlZFRyZWUpOwogCi0gICAgaWYgKGluc2VydGlvblBvaW50LmlzQ29ubmVjdGVkKCkgJiYgIW1f
cGFyc2VkVXNlbWFwLmlzTnVsbCgpKQorICAgIGlmIChpbnNlcnRpb25UeXBlLmNvbm5lY3RlZFRv
RG9jdW1lbnQgJiYgIW1fcGFyc2VkVXNlbWFwLmlzTnVsbCgpKQogICAgICAgICBkb2N1bWVudCgp
LmFkZEltYWdlRWxlbWVudEJ5VXNlbWFwKCptX3BhcnNlZFVzZW1hcC5pbXBsKCksICp0aGlzKTsK
IAogICAgIGlmIChpczxIVE1MUGljdHVyZUVsZW1lbnQ+KHBhcmVudE5vZGUoKSkpIHsKQEAgLTMy
NSw3ICszMjUsNyBAQCBOb2RlOjpJbnNlcnRpb25Ob3RpZmljYXRpb25SZXF1ZXN0IEhUTUxJCiAK
ICAgICAvLyBJZiB3ZSBoYXZlIGJlZW4gaW5zZXJ0ZWQgZnJvbSBhIHJlbmRlcmVyLWxlc3MgZG9j
dW1lbnQsCiAgICAgLy8gb3VyIGxvYWRlciBtYXkgaGF2ZSBub3QgZmV0Y2hlZCB0aGUgaW1hZ2Us
IHNvIGRvIGl0IG5vdy4KLSAgICBpZiAoaW5zZXJ0aW9uUG9pbnQuaXNDb25uZWN0ZWQoKSAmJiAh
bV9pbWFnZUxvYWRlci5pbWFnZSgpKQorICAgIGlmIChpbnNlcnRpb25UeXBlLmNvbm5lY3RlZFRv
RG9jdW1lbnQgJiYgIW1faW1hZ2VMb2FkZXIuaW1hZ2UoKSkKICAgICAgICAgbV9pbWFnZUxvYWRl
ci51cGRhdGVGcm9tRWxlbWVudCgpOwogCiAgICAgcmV0dXJuIGluc2VydE5vdGlmaWNhdGlvblJl
cXVlc3Q7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxJbWFnZUVsZW1lbnQuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxJbWFnZUVsZW1lbnQuaAkocmV2aXNp
b24gMjIzNDc1KQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MSW1hZ2VFbGVtZW50LmgJKHdv
cmtpbmcgY29weSkKQEAgLTEyMCw3ICsxMjAsNyBAQCBwcml2YXRlOgogCiAgICAgdm9pZCBhZGRT
dWJyZXNvdXJjZUF0dHJpYnV0ZVVSTHMoTGlzdEhhc2hTZXQ8VVJMPiYpIGNvbnN0IG92ZXJyaWRl
OwogCi0gICAgSW5zZXJ0aW9uTm90aWZpY2F0aW9uUmVxdWVzdCBpbnNlcnRlZEludG8oQ29udGFp
bmVyTm9kZSYpIG92ZXJyaWRlOworICAgIEluc2VydGVkSW50b1Jlc3VsdCBpbnNlcnRlZEludG8o
SW5zZXJ0aW9uVHlwZSwgQ29udGFpbmVyTm9kZSYpIG92ZXJyaWRlOwogICAgIHZvaWQgcmVtb3Zl
ZEZyb20oQ29udGFpbmVyTm9kZSYpIG92ZXJyaWRlOwogCiAgICAgYm9vbCBpc0Zvcm1Bc3NvY2lh
dGVkRWxlbWVudCgpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIGZhbHNlOyB9CkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9odG1sL0hUTUxJbnB1dEVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL2h0bWwvSFRNTElucHV0RWxlbWVudC5jcHAJKHJldmlzaW9uIDIyMzQ3NSkKKysrIFNv
dXJjZS9XZWJDb3JlL2h0bWwvSFRNTElucHV0RWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTE1MDIsMTggKzE1MDIsMTggQEAgdm9pZCBIVE1MSW5wdXRFbGVtZW50OjpkaWRDaGFuZ2VGb3Jt
KCkKICAgICBhZGRUb1JhZGlvQnV0dG9uR3JvdXAoKTsKIH0KIAotTm9kZTo6SW5zZXJ0aW9uTm90
aWZpY2F0aW9uUmVxdWVzdCBIVE1MSW5wdXRFbGVtZW50OjppbnNlcnRlZEludG8oQ29udGFpbmVy
Tm9kZSYgaW5zZXJ0aW9uUG9pbnQpCitOb2RlOjpJbnNlcnRlZEludG9SZXN1bHQgSFRNTElucHV0
RWxlbWVudDo6aW5zZXJ0ZWRJbnRvKEluc2VydGlvblR5cGUgaW5zZXJ0aW9uVHlwZSwgQ29udGFp
bmVyTm9kZSYgcGFyZW50T2ZJbnNlcnRlZFRyZWUpCiB7Ci0gICAgSFRNTFRleHRGb3JtQ29udHJv
bEVsZW1lbnQ6Omluc2VydGVkSW50byhpbnNlcnRpb25Qb2ludCk7CisgICAgSFRNTFRleHRGb3Jt
Q29udHJvbEVsZW1lbnQ6Omluc2VydGVkSW50byhpbnNlcnRpb25UeXBlLCBwYXJlbnRPZkluc2Vy
dGVkVHJlZSk7CiAjaWYgRU5BQkxFKERBVEFMSVNUX0VMRU1FTlQpCiAgICAgcmVzZXRMaXN0QXR0
cmlidXRlVGFyZ2V0T2JzZXJ2ZXIoKTsKICNlbmRpZgotICAgIHJldHVybiBJbnNlcnRpb25TaG91
bGRDYWxsRmluaXNoZWRJbnNlcnRpbmdTdWJ0cmVlOworICAgIHJldHVybiBJbnNlcnRlZEludG9S
ZXN1bHQ6Ok5lZWRzUG9zdEluc2VydGlvbkNhbGxiYWNrOwogfQogCi12b2lkIEhUTUxJbnB1dEVs
ZW1lbnQ6OmZpbmlzaGVkSW5zZXJ0aW5nU3VidHJlZSgpCit2b2lkIEhUTUxJbnB1dEVsZW1lbnQ6
OmRpZEZpbmlzaEluc2VydGluZ05vZGUoKQogewotICAgIEhUTUxUZXh0Rm9ybUNvbnRyb2xFbGVt
ZW50OjpmaW5pc2hlZEluc2VydGluZ1N1YnRyZWUoKTsKKyAgICBIVE1MVGV4dEZvcm1Db250cm9s
RWxlbWVudDo6ZGlkRmluaXNoSW5zZXJ0aW5nTm9kZSgpOwogICAgIGlmIChpc0Nvbm5lY3RlZCgp
ICYmICFmb3JtKCkpCiAgICAgICAgIGFkZFRvUmFkaW9CdXR0b25Hcm91cCgpOwogfQpJbmRleDog
U291cmNlL1dlYkNvcmUvaHRtbC9IVE1MSW5wdXRFbGVtZW50LmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvaHRtbC9IVE1MSW5wdXRFbGVtZW50LmgJKHJldmlzaW9uIDIyMzQ3NSkKKysr
IFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTElucHV0RWxlbWVudC5oCSh3b3JraW5nIGNvcHkpCkBA
IC0zNTAsOCArMzUwLDggQEAgcHJpdmF0ZToKIAogICAgIHZvaWQgd2lsbENoYW5nZUZvcm0oKSBm
aW5hbDsKICAgICB2b2lkIGRpZENoYW5nZUZvcm0oKSBmaW5hbDsKLSAgICBJbnNlcnRpb25Ob3Rp
ZmljYXRpb25SZXF1ZXN0IGluc2VydGVkSW50byhDb250YWluZXJOb2RlJikgZmluYWw7Ci0gICAg
dm9pZCBmaW5pc2hlZEluc2VydGluZ1N1YnRyZWUoKSBmaW5hbDsKKyAgICBJbnNlcnRlZEludG9S
ZXN1bHQgaW5zZXJ0ZWRJbnRvKEluc2VydGlvblR5cGUsIENvbnRhaW5lck5vZGUmKSBmaW5hbDsK
KyAgICB2b2lkIGRpZEZpbmlzaEluc2VydGluZ05vZGUoKSBmaW5hbDsKICAgICB2b2lkIHJlbW92
ZWRGcm9tKENvbnRhaW5lck5vZGUmKSBmaW5hbDsKICAgICB2b2lkIGRpZE1vdmVUb05ld0RvY3Vt
ZW50KERvY3VtZW50JiBvbGREb2N1bWVudCwgRG9jdW1lbnQmIG5ld0RvY3VtZW50KSBmaW5hbDsK
IApJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MTGlua0VsZW1lbnQuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTExpbmtFbGVtZW50LmNwcAkocmV2aXNpb24g
MjIzNDc1KQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MTGlua0VsZW1lbnQuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0zNDAsMjAgKzM0MCwxOSBAQCB2b2lkIEhUTUxMaW5rRWxlbWVudDo6Y2xl
YXJTaGVldCgpCiAgICAgbV9zaGVldCA9IG51bGxwdHI7CiB9CiAKLU5vZGU6Okluc2VydGlvbk5v
dGlmaWNhdGlvblJlcXVlc3QgSFRNTExpbmtFbGVtZW50OjppbnNlcnRlZEludG8oQ29udGFpbmVy
Tm9kZSYgaW5zZXJ0aW9uUG9pbnQpCitOb2RlOjpJbnNlcnRlZEludG9SZXN1bHQgSFRNTExpbmtF
bGVtZW50OjppbnNlcnRlZEludG8oSW5zZXJ0aW9uVHlwZSBpbnNlcnRpb25UeXBlLCBDb250YWlu
ZXJOb2RlJiBwYXJlbnRPZkluc2VydGVkVHJlZSkKIHsKLSAgICBib29sIHdhc0luRG9jdW1lbnQg
PSBpc0Nvbm5lY3RlZCgpOwotICAgIEhUTUxFbGVtZW50OjppbnNlcnRlZEludG8oaW5zZXJ0aW9u
UG9pbnQpOwotICAgIGlmICghaW5zZXJ0aW9uUG9pbnQuaXNDb25uZWN0ZWQoKSB8fCB3YXNJbkRv
Y3VtZW50KQotICAgICAgICByZXR1cm4gSW5zZXJ0aW9uRG9uZTsKKyAgICBIVE1MRWxlbWVudDo6
aW5zZXJ0ZWRJbnRvKGluc2VydGlvblR5cGUsIHBhcmVudE9mSW5zZXJ0ZWRUcmVlKTsKKyAgICBp
ZiAoIWluc2VydGlvblR5cGUuY29ubmVjdGVkVG9Eb2N1bWVudCkKKyAgICAgICAgcmV0dXJuIElu
c2VydGVkSW50b1Jlc3VsdDo6RG9uZTsKIAogICAgIG1fc3R5bGVTY29wZSA9ICZTdHlsZTo6U2Nv
cGU6OmZvck5vZGUoKnRoaXMpOwogICAgIG1fc3R5bGVTY29wZS0+YWRkU3R5bGVTaGVldENhbmRp
ZGF0ZU5vZGUoKnRoaXMsIG1fY3JlYXRlZEJ5UGFyc2VyKTsKIAotICAgIHJldHVybiBJbnNlcnRp
b25TaG91bGRDYWxsRmluaXNoZWRJbnNlcnRpbmdTdWJ0cmVlOworICAgIHJldHVybiBJbnNlcnRl
ZEludG9SZXN1bHQ6Ok5lZWRzUG9zdEluc2VydGlvbkNhbGxiYWNrOwogfQogCi12b2lkIEhUTUxM
aW5rRWxlbWVudDo6ZmluaXNoZWRJbnNlcnRpbmdTdWJ0cmVlKCkKK3ZvaWQgSFRNTExpbmtFbGVt
ZW50OjpkaWRGaW5pc2hJbnNlcnRpbmdOb2RlKCkKIHsKICAgICBwcm9jZXNzKCk7CiB9CkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxMaW5rRWxlbWVudC5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL2h0bWwvSFRNTExpbmtFbGVtZW50LmgJKHJldmlzaW9uIDIyMzQ3NSkKKysr
IFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTExpbmtFbGVtZW50LmgJKHdvcmtpbmcgY29weSkKQEAg
LTgxLDggKzgxLDggQEAgcHJpdmF0ZToKICAgICBzdGF0aWMgdm9pZCBwcm9jZXNzQ2FsbGJhY2so
Tm9kZSopOwogICAgIHZvaWQgY2xlYXJTaGVldCgpOwogCi0gICAgSW5zZXJ0aW9uTm90aWZpY2F0
aW9uUmVxdWVzdCBpbnNlcnRlZEludG8oQ29udGFpbmVyTm9kZSYpIGZpbmFsOwotICAgIHZvaWQg
ZmluaXNoZWRJbnNlcnRpbmdTdWJ0cmVlKCkgZmluYWw7CisgICAgSW5zZXJ0ZWRJbnRvUmVzdWx0
IGluc2VydGVkSW50byhJbnNlcnRpb25UeXBlLCBDb250YWluZXJOb2RlJikgZmluYWw7CisgICAg
dm9pZCBkaWRGaW5pc2hJbnNlcnRpbmdOb2RlKCkgZmluYWw7CiAgICAgdm9pZCByZW1vdmVkRnJv
bShDb250YWluZXJOb2RlJikgZmluYWw7CiAKICAgICB2b2lkIGluaXRpYWxpemVTdHlsZVNoZWV0
KFJlZjxTdHlsZVNoZWV0Q29udGVudHM+JiYsIGNvbnN0IENhY2hlZENTU1N0eWxlU2hlZXQmKTsK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTE1hcEVsZW1lbnQuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTE1hcEVsZW1lbnQuY3BwCShyZXZpc2lvbiAyMjM0
NzUpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxNYXBFbGVtZW50LmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMTE0LDEwICsxMTQsMTAgQEAgUmVmPEhUTUxDb2xsZWN0aW9uPiBIVE1MTWFwRWxl
bWVudDo6YXJlYQogICAgIHJldHVybiBlbnN1cmVSYXJlRGF0YSgpLmVuc3VyZU5vZGVMaXN0cygp
LmFkZENhY2hlZENvbGxlY3Rpb248R2VuZXJpY0NhY2hlZEhUTUxDb2xsZWN0aW9uPENvbGxlY3Rp
b25UeXBlVHJhaXRzPE1hcEFyZWFzPjo6dHJhdmVyc2FsVHlwZT4+KCp0aGlzLCBNYXBBcmVhcyk7
CiB9CiAKLU5vZGU6Okluc2VydGlvbk5vdGlmaWNhdGlvblJlcXVlc3QgSFRNTE1hcEVsZW1lbnQ6
Omluc2VydGVkSW50byhDb250YWluZXJOb2RlJiBpbnNlcnRpb25Qb2ludCkKK05vZGU6Okluc2Vy
dGVkSW50b1Jlc3VsdCBIVE1MTWFwRWxlbWVudDo6aW5zZXJ0ZWRJbnRvKEluc2VydGlvblR5cGUg
aW5zZXJ0aW9uVHlwZSwgQ29udGFpbmVyTm9kZSYgcGFyZW50T2ZJbnNlcnRlZFRyZWUpCiB7Ci0g
ICAgTm9kZTo6SW5zZXJ0aW9uTm90aWZpY2F0aW9uUmVxdWVzdCByZXF1ZXN0ID0gSFRNTEVsZW1l
bnQ6Omluc2VydGVkSW50byhpbnNlcnRpb25Qb2ludCk7Ci0gICAgaWYgKGluc2VydGlvblBvaW50
LmlzQ29ubmVjdGVkKCkpCisgICAgTm9kZTo6SW5zZXJ0ZWRJbnRvUmVzdWx0IHJlcXVlc3QgPSBI
VE1MRWxlbWVudDo6aW5zZXJ0ZWRJbnRvKGluc2VydGlvblR5cGUsIHBhcmVudE9mSW5zZXJ0ZWRU
cmVlKTsKKyAgICBpZiAoaW5zZXJ0aW9uVHlwZS5jb25uZWN0ZWRUb0RvY3VtZW50KQogICAgICAg
ICB0cmVlU2NvcGUoKS5hZGRJbWFnZU1hcCgqdGhpcyk7CiAgICAgcmV0dXJuIHJlcXVlc3Q7CiB9
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxNYXBFbGVtZW50LmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MTWFwRWxlbWVudC5oCShyZXZpc2lvbiAyMjM0NzUp
CisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxNYXBFbGVtZW50LmgJKHdvcmtpbmcgY29weSkK
QEAgLTQ3LDcgKzQ3LDcgQEAgcHJpdmF0ZToKIAogICAgIHZvaWQgcGFyc2VBdHRyaWJ1dGUoY29u
c3QgUXVhbGlmaWVkTmFtZSYsIGNvbnN0IEF0b21pY1N0cmluZyYpIGZpbmFsOwogCi0gICAgSW5z
ZXJ0aW9uTm90aWZpY2F0aW9uUmVxdWVzdCBpbnNlcnRlZEludG8oQ29udGFpbmVyTm9kZSYpIGZp
bmFsOworICAgIEluc2VydGVkSW50b1Jlc3VsdCBpbnNlcnRlZEludG8oSW5zZXJ0aW9uVHlwZSwg
Q29udGFpbmVyTm9kZSYpIGZpbmFsOwogICAgIHZvaWQgcmVtb3ZlZEZyb20oQ29udGFpbmVyTm9k
ZSYpIGZpbmFsOwogCiAgICAgQXRvbWljU3RyaW5nIG1fbmFtZTsKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL2h0bWwvSFRNTE1lZGlhRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvaHRtbC9IVE1MTWVkaWFFbGVtZW50LmNwcAkocmV2aXNpb24gMjIzNDc1KQorKysgU291cmNl
L1dlYkNvcmUvaHRtbC9IVE1MTWVkaWFFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtODcx
LDEyICs4NzEsMTIgQEAgYm9vbCBIVE1MTWVkaWFFbGVtZW50OjpjaGlsZFNob3VsZENyZWF0ZQog
I2VuZGlmCiB9CiAKLU5vZGU6Okluc2VydGlvbk5vdGlmaWNhdGlvblJlcXVlc3QgSFRNTE1lZGlh
RWxlbWVudDo6aW5zZXJ0ZWRJbnRvKENvbnRhaW5lck5vZGUmIGluc2VydGlvblBvaW50KQorTm9k
ZTo6SW5zZXJ0ZWRJbnRvUmVzdWx0IEhUTUxNZWRpYUVsZW1lbnQ6Omluc2VydGVkSW50byhJbnNl
cnRpb25UeXBlIGluc2VydGlvblR5cGUsIENvbnRhaW5lck5vZGUmIHBhcmVudE9mSW5zZXJ0ZWRU
cmVlKQogewogICAgIElORk9fTE9HKExPR0lERU5USUZJRVIpOwogCi0gICAgSFRNTEVsZW1lbnQ6
Omluc2VydGVkSW50byhpbnNlcnRpb25Qb2ludCk7Ci0gICAgaWYgKGluc2VydGlvblBvaW50Lmlz
Q29ubmVjdGVkKCkpIHsKKyAgICBIVE1MRWxlbWVudDo6aW5zZXJ0ZWRJbnRvKGluc2VydGlvblR5
cGUsIHBhcmVudE9mSW5zZXJ0ZWRUcmVlKTsKKyAgICBpZiAoaW5zZXJ0aW9uVHlwZS5jb25uZWN0
ZWRUb0RvY3VtZW50KSB7CiAgICAgICAgIG1faW5BY3RpdmVEb2N1bWVudCA9IHRydWU7CiAKICNp
ZiBQTEFURk9STShJT1MpCkBAIC04OTMsMTAgKzg5MywxMCBAQCBOb2RlOjpJbnNlcnRpb25Ob3Rp
ZmljYXRpb25SZXF1ZXN0IEhUTUxNCiAgICAgICAgIG1fbWVkaWFTZXNzaW9uLT5jYW5Qcm9kdWNl
QXVkaW9DaGFuZ2VkKCk7CiAgICAgfQogCi0gICAgcmV0dXJuIEluc2VydGlvblNob3VsZENhbGxG
aW5pc2hlZEluc2VydGluZ1N1YnRyZWU7CisgICAgcmV0dXJuIEluc2VydGVkSW50b1Jlc3VsdDo6
TmVlZHNQb3N0SW5zZXJ0aW9uQ2FsbGJhY2s7CiB9CiAKLXZvaWQgSFRNTE1lZGlhRWxlbWVudDo6
ZmluaXNoZWRJbnNlcnRpbmdTdWJ0cmVlKCkKK3ZvaWQgSFRNTE1lZGlhRWxlbWVudDo6ZGlkRmlu
aXNoSW5zZXJ0aW5nTm9kZSgpCiB7CiAgICAgY29uZmlndXJlTWVkaWFDb250cm9scygpOwogfQpJ
bmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MTWVkaWFFbGVtZW50LmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MTWVkaWFFbGVtZW50LmgJKHJldmlzaW9uIDIyMzQ3
NSkKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTE1lZGlhRWxlbWVudC5oCSh3b3JraW5nIGNv
cHkpCkBAIC01ODgsOCArNTg4LDggQEAgcHJpdmF0ZToKICAgICBib29sIGlzTW91c2VGb2N1c2Fi
bGUoKSBjb25zdCBvdmVycmlkZTsKICAgICBib29sIHJlbmRlcmVySXNOZWVkZWQoY29uc3QgUmVu
ZGVyU3R5bGUmKSBvdmVycmlkZTsKICAgICBib29sIGNoaWxkU2hvdWxkQ3JlYXRlUmVuZGVyZXIo
Y29uc3QgTm9kZSYpIGNvbnN0IG92ZXJyaWRlOwotICAgIEluc2VydGlvbk5vdGlmaWNhdGlvblJl
cXVlc3QgaW5zZXJ0ZWRJbnRvKENvbnRhaW5lck5vZGUmKSBvdmVycmlkZTsKLSAgICB2b2lkIGZp
bmlzaGVkSW5zZXJ0aW5nU3VidHJlZSgpIG92ZXJyaWRlOworICAgIEluc2VydGVkSW50b1Jlc3Vs
dCBpbnNlcnRlZEludG8oSW5zZXJ0aW9uVHlwZSwgQ29udGFpbmVyTm9kZSYpIG92ZXJyaWRlOwor
ICAgIHZvaWQgZGlkRmluaXNoSW5zZXJ0aW5nTm9kZSgpIG92ZXJyaWRlOwogICAgIHZvaWQgcmVt
b3ZlZEZyb20oQ29udGFpbmVyTm9kZSYpIG92ZXJyaWRlOwogICAgIHZvaWQgZGlkUmVjYWxjU3R5
bGUoU3R5bGU6OkNoYW5nZSkgb3ZlcnJpZGU7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwv
SFRNTE1ldGFFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL0hU
TUxNZXRhRWxlbWVudC5jcHAJKHJldmlzaW9uIDIyMzQ3NSkKKysrIFNvdXJjZS9XZWJDb3JlL2h0
bWwvSFRNTE1ldGFFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjAsMTIgKzYwLDEyIEBA
IHZvaWQgSFRNTE1ldGFFbGVtZW50OjpwYXJzZUF0dHJpYnV0ZShjb24KICAgICAgICAgSFRNTEVs
ZW1lbnQ6OnBhcnNlQXR0cmlidXRlKG5hbWUsIHZhbHVlKTsKIH0KIAotTm9kZTo6SW5zZXJ0aW9u
Tm90aWZpY2F0aW9uUmVxdWVzdCBIVE1MTWV0YUVsZW1lbnQ6Omluc2VydGVkSW50byhDb250YWlu
ZXJOb2RlJiBpbnNlcnRpb25Qb2ludCkKK05vZGU6Okluc2VydGVkSW50b1Jlc3VsdCBIVE1MTWV0
YUVsZW1lbnQ6Omluc2VydGVkSW50byhJbnNlcnRpb25UeXBlIGluc2VydGlvblR5cGUsIENvbnRh
aW5lck5vZGUmIHBhcmVudE9mSW5zZXJ0ZWRUcmVlKQogewotICAgIEhUTUxFbGVtZW50OjppbnNl
cnRlZEludG8oaW5zZXJ0aW9uUG9pbnQpOwotICAgIGlmIChpbnNlcnRpb25Qb2ludC5pc0Nvbm5l
Y3RlZCgpKQorICAgIEhUTUxFbGVtZW50OjppbnNlcnRlZEludG8oaW5zZXJ0aW9uVHlwZSwgcGFy
ZW50T2ZJbnNlcnRlZFRyZWUpOworICAgIGlmIChpbnNlcnRpb25UeXBlLmNvbm5lY3RlZFRvRG9j
dW1lbnQpCiAgICAgICAgIHByb2Nlc3MoKTsKLSAgICByZXR1cm4gSW5zZXJ0aW9uRG9uZTsKKyAg
ICByZXR1cm4gSW5zZXJ0ZWRJbnRvUmVzdWx0OjpEb25lOwogfQogCiB2b2lkIEhUTUxNZXRhRWxl
bWVudDo6cHJvY2VzcygpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxNZXRhRWxlbWVu
dC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTE1ldGFFbGVtZW50LmgJ
KHJldmlzaW9uIDIyMzQ3NSkKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTE1ldGFFbGVtZW50
LmgJKHdvcmtpbmcgY29weSkKQEAgLTM5LDcgKzM5LDcgQEAgcHJpdmF0ZToKICAgICBIVE1MTWV0
YUVsZW1lbnQoY29uc3QgUXVhbGlmaWVkTmFtZSYsIERvY3VtZW50Jik7CiAKICAgICB2b2lkIHBh
cnNlQXR0cmlidXRlKGNvbnN0IFF1YWxpZmllZE5hbWUmLCBjb25zdCBBdG9taWNTdHJpbmcmKSBm
aW5hbDsKLSAgICBJbnNlcnRpb25Ob3RpZmljYXRpb25SZXF1ZXN0IGluc2VydGVkSW50byhDb250
YWluZXJOb2RlJikgZmluYWw7CisgICAgSW5zZXJ0ZWRJbnRvUmVzdWx0IGluc2VydGVkSW50byhJ
bnNlcnRpb25UeXBlLCBDb250YWluZXJOb2RlJikgZmluYWw7CiAKICAgICB2b2lkIHByb2Nlc3Mo
KTsKIH07CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxPYmplY3RFbGVtZW50LmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxPYmplY3RFbGVtZW50LmNwcAko
cmV2aXNpb24gMjIzNDc1KQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MT2JqZWN0RWxlbWVu
dC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMxMywxNCArMzEzLDE0IEBAIHZvaWQgSFRNTE9iamVj
dEVsZW1lbnQ6OnVwZGF0ZVdpZGdldChDcmUKICAgICAgICAgcmVuZGVyRmFsbGJhY2tDb250ZW50
KCk7CiB9CiAKLU5vZGU6Okluc2VydGlvbk5vdGlmaWNhdGlvblJlcXVlc3QgSFRNTE9iamVjdEVs
ZW1lbnQ6Omluc2VydGVkSW50byhDb250YWluZXJOb2RlJiBpbnNlcnRpb25Qb2ludCkKK05vZGU6
Okluc2VydGVkSW50b1Jlc3VsdCBIVE1MT2JqZWN0RWxlbWVudDo6aW5zZXJ0ZWRJbnRvKEluc2Vy
dGlvblR5cGUgaW5zZXJ0aW9uVHlwZSwgQ29udGFpbmVyTm9kZSYgcGFyZW50T2ZJbnNlcnRlZFRy
ZWUpCiB7Ci0gICAgSFRNTFBsdWdJbkltYWdlRWxlbWVudDo6aW5zZXJ0ZWRJbnRvKGluc2VydGlv
blBvaW50KTsKLSAgICBGb3JtQXNzb2NpYXRlZEVsZW1lbnQ6Omluc2VydGVkSW50byhpbnNlcnRp
b25Qb2ludCk7Ci0gICAgcmV0dXJuIEluc2VydGlvblNob3VsZENhbGxGaW5pc2hlZEluc2VydGlu
Z1N1YnRyZWU7CisgICAgSFRNTFBsdWdJbkltYWdlRWxlbWVudDo6aW5zZXJ0ZWRJbnRvKGluc2Vy
dGlvblR5cGUsIHBhcmVudE9mSW5zZXJ0ZWRUcmVlKTsKKyAgICBGb3JtQXNzb2NpYXRlZEVsZW1l
bnQ6Omluc2VydGVkSW50byhpbnNlcnRpb25UeXBlLCBwYXJlbnRPZkluc2VydGVkVHJlZSk7Cisg
ICAgcmV0dXJuIEluc2VydGVkSW50b1Jlc3VsdDo6TmVlZHNQb3N0SW5zZXJ0aW9uQ2FsbGJhY2s7
CiB9CiAKLXZvaWQgSFRNTE9iamVjdEVsZW1lbnQ6OmZpbmlzaGVkSW5zZXJ0aW5nU3VidHJlZSgp
Cit2b2lkIEhUTUxPYmplY3RFbGVtZW50OjpkaWRGaW5pc2hJbnNlcnRpbmdOb2RlKCkKIHsKICAg
ICByZXNldEZvcm1Pd25lcigpOwogfQpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MT2Jq
ZWN0RWxlbWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTE9iamVj
dEVsZW1lbnQuaAkocmV2aXNpb24gMjIzNDc1KQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9IVE1M
T2JqZWN0RWxlbWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC02Miw4ICs2Miw4IEBAIHByaXZhdGU6
CiAgICAgYm9vbCBpc1ByZXNlbnRhdGlvbkF0dHJpYnV0ZShjb25zdCBRdWFsaWZpZWROYW1lJikg
Y29uc3QgZmluYWw7CiAgICAgdm9pZCBjb2xsZWN0U3R5bGVGb3JQcmVzZW50YXRpb25BdHRyaWJ1
dGUoY29uc3QgUXVhbGlmaWVkTmFtZSYsIGNvbnN0IEF0b21pY1N0cmluZyYsIE11dGFibGVTdHls
ZVByb3BlcnRpZXMmKSBmaW5hbDsKIAotICAgIEluc2VydGlvbk5vdGlmaWNhdGlvblJlcXVlc3Qg
aW5zZXJ0ZWRJbnRvKENvbnRhaW5lck5vZGUmKSBmaW5hbDsKLSAgICB2b2lkIGZpbmlzaGVkSW5z
ZXJ0aW5nU3VidHJlZSgpIGZpbmFsOworICAgIEluc2VydGVkSW50b1Jlc3VsdCBpbnNlcnRlZElu
dG8oSW5zZXJ0aW9uVHlwZSwgQ29udGFpbmVyTm9kZSYpIGZpbmFsOworICAgIHZvaWQgZGlkRmlu
aXNoSW5zZXJ0aW5nTm9kZSgpIGZpbmFsOwogICAgIHZvaWQgcmVtb3ZlZEZyb20oQ29udGFpbmVy
Tm9kZSYpIGZpbmFsOwogCiAgICAgdm9pZCBkaWRNb3ZlVG9OZXdEb2N1bWVudChEb2N1bWVudCYg
b2xkRG9jdW1lbnQsIERvY3VtZW50JiBuZXdEb2N1bWVudCkgZmluYWw7CkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9odG1sL0hUTUxPcHRpb25FbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9odG1sL0hUTUxPcHRpb25FbGVtZW50LmNwcAkocmV2aXNpb24gMjIzNDc1KQorKysg
U291cmNlL1dlYkNvcmUvaHRtbC9IVE1MT3B0aW9uRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTMxNyw3ICszMTcsNyBAQCBib29sIEhUTUxPcHRpb25FbGVtZW50Ojppc0Rpc2FibGVkRm9y
bUNvCiAgICAgcmV0dXJuIGRvd25jYXN0PEhUTUxPcHRHcm91cEVsZW1lbnQ+KCpwYXJlbnROb2Rl
KCkpLmlzRGlzYWJsZWRGb3JtQ29udHJvbCgpOwogfQogCi1Ob2RlOjpJbnNlcnRpb25Ob3RpZmlj
YXRpb25SZXF1ZXN0IEhUTUxPcHRpb25FbGVtZW50OjppbnNlcnRlZEludG8oQ29udGFpbmVyTm9k
ZSYgaW5zZXJ0aW9uUG9pbnQpCitOb2RlOjpJbnNlcnRlZEludG9SZXN1bHQgSFRNTE9wdGlvbkVs
ZW1lbnQ6Omluc2VydGVkSW50byhJbnNlcnRpb25UeXBlIGluc2VydGlvblR5cGUsIENvbnRhaW5l
ck5vZGUmIHBhcmVudE9mSW5zZXJ0ZWRUcmVlKQogewogICAgIGlmIChIVE1MU2VsZWN0RWxlbWVu
dCogc2VsZWN0ID0gb3duZXJTZWxlY3RFbGVtZW50KCkpIHsKICAgICAgICAgc2VsZWN0LT5zZXRS
ZWNhbGNMaXN0SXRlbXMoKTsKQEAgLTMzMSw3ICszMzEsNyBAQCBOb2RlOjpJbnNlcnRpb25Ob3Rp
ZmljYXRpb25SZXF1ZXN0IEhUTUxPCiAgICAgICAgIHNlbGVjdC0+c2Nyb2xsVG9TZWxlY3Rpb24o
KTsKICAgICB9CiAKLSAgICByZXR1cm4gSFRNTEVsZW1lbnQ6Omluc2VydGVkSW50byhpbnNlcnRp
b25Qb2ludCk7CisgICAgcmV0dXJuIEhUTUxFbGVtZW50OjppbnNlcnRlZEludG8oaW5zZXJ0aW9u
VHlwZSwgcGFyZW50T2ZJbnNlcnRlZFRyZWUpOwogfQogCiBTdHJpbmcgSFRNTE9wdGlvbkVsZW1l
bnQ6OmNvbGxlY3RPcHRpb25Jbm5lclRleHQoKSBjb25zdApJbmRleDogU291cmNlL1dlYkNvcmUv
aHRtbC9IVE1MT3B0aW9uRWxlbWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0
bWwvSFRNTE9wdGlvbkVsZW1lbnQuaAkocmV2aXNpb24gMjIzNDc1KQorKysgU291cmNlL1dlYkNv
cmUvaHRtbC9IVE1MT3B0aW9uRWxlbWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC03NCw3ICs3NCw3
IEBAIHByaXZhdGU6CiAKICAgICB2b2lkIHBhcnNlQXR0cmlidXRlKGNvbnN0IFF1YWxpZmllZE5h
bWUmLCBjb25zdCBBdG9taWNTdHJpbmcmKSBmaW5hbDsKIAotICAgIEluc2VydGlvbk5vdGlmaWNh
dGlvblJlcXVlc3QgaW5zZXJ0ZWRJbnRvKENvbnRhaW5lck5vZGUmKSBmaW5hbDsKKyAgICBJbnNl
cnRlZEludG9SZXN1bHQgaW5zZXJ0ZWRJbnRvKEluc2VydGlvblR5cGUsIENvbnRhaW5lck5vZGUm
KSBmaW5hbDsKICAgICB2b2lkIGFjY2Vzc0tleUFjdGlvbihib29sKSBmaW5hbDsKIAogICAgIHZv
aWQgY2hpbGRyZW5DaGFuZ2VkKGNvbnN0IENoaWxkQ2hhbmdlJikgZmluYWw7CkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9odG1sL0hUTUxTY3JpcHRFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9odG1sL0hUTUxTY3JpcHRFbGVtZW50LmNwcAkocmV2aXNpb24gMjIzNDc1KQor
KysgU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MU2NyaXB0RWxlbWVudC5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTY4LDE1ICs2OCwxNSBAQCB2b2lkIEhUTUxTY3JpcHRFbGVtZW50OjpwYXJzZUF0dHJp
YnV0ZShjCiAgICAgICAgIEhUTUxFbGVtZW50OjpwYXJzZUF0dHJpYnV0ZShuYW1lLCB2YWx1ZSk7
CiB9CiAKLU5vZGU6Okluc2VydGlvbk5vdGlmaWNhdGlvblJlcXVlc3QgSFRNTFNjcmlwdEVsZW1l
bnQ6Omluc2VydGVkSW50byhDb250YWluZXJOb2RlJiBpbnNlcnRpb25Qb2ludCkKK05vZGU6Oklu
c2VydGVkSW50b1Jlc3VsdCBIVE1MU2NyaXB0RWxlbWVudDo6aW5zZXJ0ZWRJbnRvKEluc2VydGlv
blR5cGUgaW5zZXJ0aW9uVHlwZSwgQ29udGFpbmVyTm9kZSYgcGFyZW50T2ZJbnNlcnRlZFRyZWUp
CiB7Ci0gICAgSFRNTEVsZW1lbnQ6Omluc2VydGVkSW50byhpbnNlcnRpb25Qb2ludCk7Ci0gICAg
cmV0dXJuIHNob3VsZENhbGxGaW5pc2hlZEluc2VydGluZ1N1YnRyZWUoaW5zZXJ0aW9uUG9pbnQp
ID8gSW5zZXJ0aW9uU2hvdWxkQ2FsbEZpbmlzaGVkSW5zZXJ0aW5nU3VidHJlZSA6IEluc2VydGlv
bkRvbmU7CisgICAgSFRNTEVsZW1lbnQ6Omluc2VydGVkSW50byhpbnNlcnRpb25UeXBlLCBwYXJl
bnRPZkluc2VydGVkVHJlZSk7CisgICAgcmV0dXJuIFNjcmlwdEVsZW1lbnQ6Omluc2VydGVkSW50
byhpbnNlcnRpb25UeXBlLCBwYXJlbnRPZkluc2VydGVkVHJlZSk7CiB9CiAKLXZvaWQgSFRNTFNj
cmlwdEVsZW1lbnQ6OmZpbmlzaGVkSW5zZXJ0aW5nU3VidHJlZSgpCit2b2lkIEhUTUxTY3JpcHRF
bGVtZW50OjpkaWRGaW5pc2hJbnNlcnRpbmdOb2RlKCkKIHsKLSAgICBTY3JpcHRFbGVtZW50Ojpm
aW5pc2hlZEluc2VydGluZ1N1YnRyZWUoKTsKKyAgICBTY3JpcHRFbGVtZW50OjpkaWRGaW5pc2hJ
bnNlcnRpbmdOb2RlKCk7CiB9CiAKIC8vIGh0dHBzOi8vaHRtbC5zcGVjLndoYXR3Zy5vcmcvbXVs
dGlwYWdlL3NjcmlwdGluZy5odG1sI2RvbS1zY3JpcHQtdGV4dApJbmRleDogU291cmNlL1dlYkNv
cmUvaHRtbC9IVE1MU2NyaXB0RWxlbWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L2h0bWwvSFRNTFNjcmlwdEVsZW1lbnQuaAkocmV2aXNpb24gMjIzNDc1KQorKysgU291cmNlL1dl
YkNvcmUvaHRtbC9IVE1MU2NyaXB0RWxlbWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC01MCw4ICs1
MCw4IEBAIHByaXZhdGU6CiAgICAgSFRNTFNjcmlwdEVsZW1lbnQoY29uc3QgUXVhbGlmaWVkTmFt
ZSYsIERvY3VtZW50JiwgYm9vbCB3YXNJbnNlcnRlZEJ5UGFyc2VyLCBib29sIGFscmVhZHlTdGFy
dGVkKTsKIAogICAgIHZvaWQgcGFyc2VBdHRyaWJ1dGUoY29uc3QgUXVhbGlmaWVkTmFtZSYsIGNv
bnN0IEF0b21pY1N0cmluZyYpIGZpbmFsOwotICAgIEluc2VydGlvbk5vdGlmaWNhdGlvblJlcXVl
c3QgaW5zZXJ0ZWRJbnRvKENvbnRhaW5lck5vZGUmKSBmaW5hbDsKLSAgICB2b2lkIGZpbmlzaGVk
SW5zZXJ0aW5nU3VidHJlZSgpIGZpbmFsOworICAgIEluc2VydGVkSW50b1Jlc3VsdCBpbnNlcnRl
ZEludG8oSW5zZXJ0aW9uVHlwZSwgQ29udGFpbmVyTm9kZSYpIGZpbmFsOworICAgIHZvaWQgZGlk
RmluaXNoSW5zZXJ0aW5nTm9kZSgpIGZpbmFsOwogICAgIHZvaWQgY2hpbGRyZW5DaGFuZ2VkKGNv
bnN0IENoaWxkQ2hhbmdlJikgZmluYWw7CiAKICAgICBib29sIGlzVVJMQXR0cmlidXRlKGNvbnN0
IEF0dHJpYnV0ZSYpIGNvbnN0IGZpbmFsOwpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9IVE1M
U2VsZWN0RWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9IVE1M
U2VsZWN0RWxlbWVudC5jcHAJKHJldmlzaW9uIDIyMzQ3NSkKKysrIFNvdXJjZS9XZWJDb3JlL2h0
bWwvSFRNTFNlbGVjdEVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNTYwLDEzICsxNTYw
LDEzIEBAIHZvaWQgSFRNTFNlbGVjdEVsZW1lbnQ6OnR5cGVBaGVhZEZpbmQoS2UKICAgICAgICAg
bGlzdEJveE9uQ2hhbmdlKCk7CiB9CiAKLU5vZGU6Okluc2VydGlvbk5vdGlmaWNhdGlvblJlcXVl
c3QgSFRNTFNlbGVjdEVsZW1lbnQ6Omluc2VydGVkSW50byhDb250YWluZXJOb2RlJiBpbnNlcnRp
b25Qb2ludCkKK05vZGU6Okluc2VydGVkSW50b1Jlc3VsdCBIVE1MU2VsZWN0RWxlbWVudDo6aW5z
ZXJ0ZWRJbnRvKEluc2VydGlvblR5cGUgaW5zZXJ0aW9uVHlwZSwgQ29udGFpbmVyTm9kZSYgcGFy
ZW50T2ZJbnNlcnRlZFRyZWUpCiB7CiAgICAgLy8gV2hlbiB0aGUgZWxlbWVudCBpcyBjcmVhdGVk
IGR1cmluZyBkb2N1bWVudCBwYXJzaW5nLCBpdCB3b24ndCBoYXZlIGFueQogICAgIC8vIGl0ZW1z
IHlldCAtIGJ1dCBmb3IgaW5uZXJIVE1MIGFuZCByZWxhdGVkIG1ldGhvZHMsIHRoaXMgbWV0aG9k
IGlzIGNhbGxlZAogICAgIC8vIGFmdGVyIHRoZSB3aG9sZSBzdWJ0cmVlIGlzIGNvbnN0cnVjdGVk
LgogICAgIHJlY2FsY0xpc3RJdGVtcygpOwotICAgIHJldHVybiBIVE1MRm9ybUNvbnRyb2xFbGVt
ZW50V2l0aFN0YXRlOjppbnNlcnRlZEludG8oaW5zZXJ0aW9uUG9pbnQpOworICAgIHJldHVybiBI
VE1MRm9ybUNvbnRyb2xFbGVtZW50V2l0aFN0YXRlOjppbnNlcnRlZEludG8oaW5zZXJ0aW9uVHlw
ZSwgcGFyZW50T2ZJbnNlcnRlZFRyZWUpOwogfQogCiB2b2lkIEhUTUxTZWxlY3RFbGVtZW50Ojph
Y2Nlc3NLZXlTZXRTZWxlY3RlZEluZGV4KGludCBpbmRleCkKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L2h0bWwvSFRNTFNlbGVjdEVsZW1lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9o
dG1sL0hUTUxTZWxlY3RFbGVtZW50LmgJKHJldmlzaW9uIDIyMzQ3NSkKKysrIFNvdXJjZS9XZWJD
b3JlL2h0bWwvSFRNTFNlbGVjdEVsZW1lbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMTQ3LDcgKzE0
Nyw3IEBAIHByaXZhdGU6CiAgICAgdm9pZCB0eXBlQWhlYWRGaW5kKEtleWJvYXJkRXZlbnQmKTsK
ICAgICB2b2lkIHNhdmVMYXN0U2VsZWN0aW9uKCk7CiAKLSAgICBJbnNlcnRpb25Ob3RpZmljYXRp
b25SZXF1ZXN0IGluc2VydGVkSW50byhDb250YWluZXJOb2RlJikgZmluYWw7CisgICAgSW5zZXJ0
ZWRJbnRvUmVzdWx0IGluc2VydGVkSW50byhJbnNlcnRpb25UeXBlLCBDb250YWluZXJOb2RlJikg
ZmluYWw7CiAKICAgICBib29sIGlzT3B0aW9uYWxGb3JtQ29udHJvbCgpIGNvbnN0IGZpbmFsIHsg
cmV0dXJuICFpc1JlcXVpcmVkRm9ybUNvbnRyb2woKTsgfQogICAgIGJvb2wgaXNSZXF1aXJlZEZv
cm1Db250cm9sKCkgY29uc3QgZmluYWw7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxT
bG90RWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MU2xv
dEVsZW1lbnQuY3BwCShyZXZpc2lvbiAyMjM0NzUpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL0hU
TUxTbG90RWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ4LDIwICs0OCwxNyBAQCBIVE1M
U2xvdEVsZW1lbnQ6OkhUTUxTbG90RWxlbWVudChjb25zdCBRCiAgICAgQVNTRVJUKGhhc1RhZ05h
bWUoc2xvdFRhZykpOwogfQogCi1IVE1MU2xvdEVsZW1lbnQ6Okluc2VydGlvbk5vdGlmaWNhdGlv
blJlcXVlc3QgSFRNTFNsb3RFbGVtZW50OjppbnNlcnRlZEludG8oQ29udGFpbmVyTm9kZSYgaW5z
ZXJ0aW9uUG9pbnQpCitIVE1MU2xvdEVsZW1lbnQ6Okluc2VydGVkSW50b1Jlc3VsdCBIVE1MU2xv
dEVsZW1lbnQ6Omluc2VydGVkSW50byhJbnNlcnRpb25UeXBlIGluc2VydGlvblR5cGUsIENvbnRh
aW5lck5vZGUmIHBhcmVudE9mSW5zZXJ0ZWRUcmVlKQogewotICAgIGF1dG8gaW5zZXJ0aW9uUmVz
dWx0ID0gSFRNTEVsZW1lbnQ6Omluc2VydGVkSW50byhpbnNlcnRpb25Qb2ludCk7Ci0gICAgQVNT
RVJUX1VOVVNFRChpbnNlcnRpb25SZXN1bHQsIGluc2VydGlvblJlc3VsdCA9PSBJbnNlcnRpb25E
b25lKTsKKyAgICBhdXRvIGluc2VydGlvblJlc3VsdCA9IEhUTUxFbGVtZW50OjppbnNlcnRlZElu
dG8oaW5zZXJ0aW9uVHlwZSwgcGFyZW50T2ZJbnNlcnRlZFRyZWUpOworICAgIEFTU0VSVF9VTlVT
RUQoaW5zZXJ0aW9uUmVzdWx0LCBpbnNlcnRpb25SZXN1bHQgPT0gSW5zZXJ0ZWRJbnRvUmVzdWx0
OjpEb25lKTsKIAotICAgIC8vIFRoaXMgZnVuY3Rpb24gY291bGQgYmUgY2FsbGVkIHdoZW4gdGhp
cyBlbGVtZW50J3Mgc2hhZG93IHJvb3QncyBob3N0IG9yIGl0cyBhbmNlc3RvciBpcyBpbnNlcnRl
ZC4KLSAgICAvLyBUaGlzIGVsZW1lbnQgaXMgbmV3IHRvIHRoZSBzaGFkb3cgdHJlZSAoYW5kIGl0
cyB0cmVlIHNjb3BlKSBvbmx5IGlmIHRoZSBwYXJlbnQgaW50byB3aGljaCB0aGlzIGVsZW1lbnQK
LSAgICAvLyBvciBpdHMgYW5jZXN0b3IgaXMgaW5zZXJ0ZWQgYmVsb25ncyB0byB0aGUgc2FtZSB0
cmVlIHNjb3BlIGFzIHRoaXMgZWxlbWVudCdzLgotICAgIGlmIChpbnNlcnRpb25Qb2ludC5pc0lu
U2hhZG93VHJlZSgpICYmIGlzSW5TaGFkb3dUcmVlKCkgJiYgJmluc2VydGlvblBvaW50LnRyZWVT
Y29wZSgpID09ICZ0cmVlU2NvcGUoKSkgeworICAgIGlmIChpbnNlcnRpb25UeXBlLnRyZWVTY29w
ZUNoYW5nZWQgJiYgaXNJblNoYWRvd1RyZWUoKSkgewogICAgICAgICBpZiAoYXV0byBzaGFkb3dS
b290ID0gY29udGFpbmluZ1NoYWRvd1Jvb3QoKSkKICAgICAgICAgICAgIHNoYWRvd1Jvb3QtPmFk
ZFNsb3RFbGVtZW50QnlOYW1lKGF0dHJpYnV0ZVdpdGhvdXRTeW5jaHJvbml6YXRpb24obmFtZUF0
dHIpLCAqdGhpcyk7CiAgICAgfQogCi0gICAgcmV0dXJuIEluc2VydGlvbkRvbmU7CisgICAgcmV0
dXJuIEluc2VydGVkSW50b1Jlc3VsdDo6RG9uZTsKIH0KIAogdm9pZCBIVE1MU2xvdEVsZW1lbnQ6
OnJlbW92ZWRGcm9tKENvbnRhaW5lck5vZGUmIGluc2VydGlvblBvaW50KQpJbmRleDogU291cmNl
L1dlYkNvcmUvaHRtbC9IVE1MU2xvdEVsZW1lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9odG1sL0hUTUxTbG90RWxlbWVudC5oCShyZXZpc2lvbiAyMjM0NzUpCisrKyBTb3VyY2Uv
V2ViQ29yZS9odG1sL0hUTUxTbG90RWxlbWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC00OCw3ICs0
OCw3IEBAIHB1YmxpYzoKIHByaXZhdGU6CiAgICAgSFRNTFNsb3RFbGVtZW50KGNvbnN0IFF1YWxp
ZmllZE5hbWUmLCBEb2N1bWVudCYpOwogCi0gICAgSW5zZXJ0aW9uTm90aWZpY2F0aW9uUmVxdWVz
dCBpbnNlcnRlZEludG8oQ29udGFpbmVyTm9kZSYpIGZpbmFsOworICAgIEluc2VydGVkSW50b1Jl
c3VsdCBpbnNlcnRlZEludG8oSW5zZXJ0aW9uVHlwZSwgQ29udGFpbmVyTm9kZSYpIGZpbmFsOwog
ICAgIHZvaWQgcmVtb3ZlZEZyb20oQ29udGFpbmVyTm9kZSYpIGZpbmFsOwogICAgIHZvaWQgYXR0
cmlidXRlQ2hhbmdlZChjb25zdCBRdWFsaWZpZWROYW1lJiwgY29uc3QgQXRvbWljU3RyaW5nJiBv
bGRWYWx1ZSwgY29uc3QgQXRvbWljU3RyaW5nJiBuZXdWYWx1ZSwgQXR0cmlidXRlTW9kaWZpY2F0
aW9uUmVhc29uKSBmaW5hbDsKIApJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MU291cmNl
RWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MU291cmNl
RWxlbWVudC5jcHAJKHJldmlzaW9uIDIyMzQ3NSkKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRN
TFNvdXJjZUVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02Myw5ICs2Myw5IEBAIFJlZjxI
VE1MU291cmNlRWxlbWVudD4gSFRNTFNvdXJjZUVsZW1lbnQKICAgICByZXR1cm4gY3JlYXRlKHNv
dXJjZVRhZywgZG9jdW1lbnQpOwogfQogCi1Ob2RlOjpJbnNlcnRpb25Ob3RpZmljYXRpb25SZXF1
ZXN0IEhUTUxTb3VyY2VFbGVtZW50OjppbnNlcnRlZEludG8oQ29udGFpbmVyTm9kZSYgaW5zZXJ0
aW9uUG9pbnQpCitOb2RlOjpJbnNlcnRlZEludG9SZXN1bHQgSFRNTFNvdXJjZUVsZW1lbnQ6Omlu
c2VydGVkSW50byhJbnNlcnRpb25UeXBlIGluc2VydGlvblR5cGUsIENvbnRhaW5lck5vZGUmIHBh
cmVudE9mSW5zZXJ0ZWRUcmVlKQogewotICAgIEhUTUxFbGVtZW50OjppbnNlcnRlZEludG8oaW5z
ZXJ0aW9uUG9pbnQpOworICAgIEhUTUxFbGVtZW50OjppbnNlcnRlZEludG8oaW5zZXJ0aW9uVHlw
ZSwgcGFyZW50T2ZJbnNlcnRlZFRyZWUpOwogICAgIGlmIChhdXRvKiBwYXJlbnQgPSBwYXJlbnRF
bGVtZW50KCkpIHsKICNpZiBFTkFCTEUoVklERU8pCiAgICAgICAgIGlmIChpczxIVE1MTWVkaWFF
bGVtZW50PigqcGFyZW50KSkKQEAgLTc1LDcgKzc1LDcgQEAgTm9kZTo6SW5zZXJ0aW9uTm90aWZp
Y2F0aW9uUmVxdWVzdCBIVE1MUwogICAgICAgICBpZiAoaXM8SFRNTFBpY3R1cmVFbGVtZW50Pigq
cGFyZW50KSkKICAgICAgICAgICAgIGRvd25jYXN0PEhUTUxQaWN0dXJlRWxlbWVudD4oKnBhcmVu
dCkuc291cmNlc0NoYW5nZWQoKTsKICAgICB9Ci0gICAgcmV0dXJuIEluc2VydGlvbkRvbmU7Cisg
ICAgcmV0dXJuIEluc2VydGVkSW50b1Jlc3VsdDo6RG9uZTsKIH0KIAogdm9pZCBIVE1MU291cmNl
RWxlbWVudDo6cmVtb3ZlZEZyb20oQ29udGFpbmVyTm9kZSYgcmVtb3ZhbFJvb3QpCkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9odG1sL0hUTUxTb3VyY2VFbGVtZW50LmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvaHRtbC9IVE1MU291cmNlRWxlbWVudC5oCShyZXZpc2lvbiAyMjM0NzUpCisr
KyBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxTb3VyY2VFbGVtZW50LmgJKHdvcmtpbmcgY29weSkK
QEAgLTQ1LDcgKzQ1LDcgQEAgcHVibGljOgogcHJpdmF0ZToKICAgICBIVE1MU291cmNlRWxlbWVu
dChjb25zdCBRdWFsaWZpZWROYW1lJiwgRG9jdW1lbnQmKTsKICAgICAKLSAgICBJbnNlcnRpb25O
b3RpZmljYXRpb25SZXF1ZXN0IGluc2VydGVkSW50byhDb250YWluZXJOb2RlJikgZmluYWw7Cisg
ICAgSW5zZXJ0ZWRJbnRvUmVzdWx0IGluc2VydGVkSW50byhJbnNlcnRpb25UeXBlLCBDb250YWlu
ZXJOb2RlJikgZmluYWw7CiAgICAgdm9pZCByZW1vdmVkRnJvbShDb250YWluZXJOb2RlJikgZmlu
YWw7CiAgICAgYm9vbCBpc1VSTEF0dHJpYnV0ZShjb25zdCBBdHRyaWJ1dGUmKSBjb25zdCBmaW5h
bDsKIApJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MU3R5bGVFbGVtZW50LmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxTdHlsZUVsZW1lbnQuY3BwCShyZXZp
c2lvbiAyMjM0NzUpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxTdHlsZUVsZW1lbnQuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC05NiwxMSArOTYsMTAgQEAgdm9pZCBIVE1MU3R5bGVFbGVtZW50
OjpmaW5pc2hQYXJzaW5nQ2hpbAogICAgIEhUTUxFbGVtZW50OjpmaW5pc2hQYXJzaW5nQ2hpbGRy
ZW4oKTsKIH0KIAotTm9kZTo6SW5zZXJ0aW9uTm90aWZpY2F0aW9uUmVxdWVzdCBIVE1MU3R5bGVF
bGVtZW50OjppbnNlcnRlZEludG8oQ29udGFpbmVyTm9kZSYgaW5zZXJ0aW9uUG9pbnQpCitOb2Rl
OjpJbnNlcnRlZEludG9SZXN1bHQgSFRNTFN0eWxlRWxlbWVudDo6aW5zZXJ0ZWRJbnRvKEluc2Vy
dGlvblR5cGUgaW5zZXJ0aW9uVHlwZSwgQ29udGFpbmVyTm9kZSYgcGFyZW50T2ZJbnNlcnRlZFRy
ZWUpCiB7Ci0gICAgYm9vbCB3YXNJbkRvY3VtZW50ID0gaXNDb25uZWN0ZWQoKTsKLSAgICBhdXRv
IHJlc3VsdCA9IEhUTUxFbGVtZW50OjppbnNlcnRlZEludG8oaW5zZXJ0aW9uUG9pbnQpOwotICAg
IGlmIChpbnNlcnRpb25Qb2ludC5pc0Nvbm5lY3RlZCgpICYmICF3YXNJbkRvY3VtZW50KQorICAg
IGF1dG8gcmVzdWx0ID0gSFRNTEVsZW1lbnQ6Omluc2VydGVkSW50byhpbnNlcnRpb25UeXBlLCBw
YXJlbnRPZkluc2VydGVkVHJlZSk7CisgICAgaWYgKGluc2VydGlvblR5cGUuY29ubmVjdGVkVG9E
b2N1bWVudCkKICAgICAgICAgbV9zdHlsZVNoZWV0T3duZXIuaW5zZXJ0ZWRJbnRvRG9jdW1lbnQo
KnRoaXMpOwogICAgIHJldHVybiByZXN1bHQ7CiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1s
L0hUTUxTdHlsZUVsZW1lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL0hU
TUxTdHlsZUVsZW1lbnQuaAkocmV2aXNpb24gMjIzNDc1KQorKysgU291cmNlL1dlYkNvcmUvaHRt
bC9IVE1MU3R5bGVFbGVtZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTU0LDcgKzU0LDcgQEAgcHJp
dmF0ZToKICAgICBIVE1MU3R5bGVFbGVtZW50KGNvbnN0IFF1YWxpZmllZE5hbWUmLCBEb2N1bWVu
dCYsIGJvb2wgY3JlYXRlZEJ5UGFyc2VyKTsKIAogICAgIHZvaWQgcGFyc2VBdHRyaWJ1dGUoY29u
c3QgUXVhbGlmaWVkTmFtZSYsIGNvbnN0IEF0b21pY1N0cmluZyYpIGZpbmFsOwotICAgIEluc2Vy
dGlvbk5vdGlmaWNhdGlvblJlcXVlc3QgaW5zZXJ0ZWRJbnRvKENvbnRhaW5lck5vZGUmKSBmaW5h
bDsKKyAgICBJbnNlcnRlZEludG9SZXN1bHQgaW5zZXJ0ZWRJbnRvKEluc2VydGlvblR5cGUsIENv
bnRhaW5lck5vZGUmKSBmaW5hbDsKICAgICB2b2lkIHJlbW92ZWRGcm9tKENvbnRhaW5lck5vZGUm
KSBmaW5hbDsKICAgICB2b2lkIGNoaWxkcmVuQ2hhbmdlZChjb25zdCBDaGlsZENoYW5nZSYpIGZp
bmFsOwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxUZXh0Rm9ybUNvbnRyb2xFbGVt
ZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxUZXh0Rm9ybUNv
bnRyb2xFbGVtZW50LmNwcAkocmV2aXNpb24gMjIzNDc1KQorKysgU291cmNlL1dlYkNvcmUvaHRt
bC9IVE1MVGV4dEZvcm1Db250cm9sRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTgwLDE0
ICs4MCwxNCBAQCBib29sIEhUTUxUZXh0Rm9ybUNvbnRyb2xFbGVtZW50OjpjaGlsZFNoCiAgICAg
cmV0dXJuIGhhc1NoYWRvd1Jvb3RQYXJlbnQoY2hpbGQpICYmIEhUTUxGb3JtQ29udHJvbEVsZW1l
bnRXaXRoU3RhdGU6OmNoaWxkU2hvdWxkQ3JlYXRlUmVuZGVyZXIoY2hpbGQpOwogfQogCi1Ob2Rl
OjpJbnNlcnRpb25Ob3RpZmljYXRpb25SZXF1ZXN0IEhUTUxUZXh0Rm9ybUNvbnRyb2xFbGVtZW50
OjppbnNlcnRlZEludG8oQ29udGFpbmVyTm9kZSYgaW5zZXJ0aW9uUG9pbnQpCitOb2RlOjpJbnNl
cnRlZEludG9SZXN1bHQgSFRNTFRleHRGb3JtQ29udHJvbEVsZW1lbnQ6Omluc2VydGVkSW50byhJ
bnNlcnRpb25UeXBlIGluc2VydGlvblR5cGUsIENvbnRhaW5lck5vZGUmIHBhcmVudE9mSW5zZXJ0
ZWRUcmVlKQogewotICAgIEluc2VydGlvbk5vdGlmaWNhdGlvblJlcXVlc3QgaW5zZXJ0aW9uTm90
aWZpY2F0aW9uUmVxdWVzdCA9IEhUTUxGb3JtQ29udHJvbEVsZW1lbnRXaXRoU3RhdGU6Omluc2Vy
dGVkSW50byhpbnNlcnRpb25Qb2ludCk7Ci0gICAgaWYgKCFpbnNlcnRpb25Qb2ludC5pc0Nvbm5l
Y3RlZCgpKQotICAgICAgICByZXR1cm4gaW5zZXJ0aW9uTm90aWZpY2F0aW9uUmVxdWVzdDsKLSAg
ICBTdHJpbmcgaW5pdGlhbFZhbHVlID0gdmFsdWUoKTsKLSAgICBzZXRUZXh0QXNPZkxhc3RGb3Jt
Q29udHJvbENoYW5nZUV2ZW50KGluaXRpYWxWYWx1ZS5pc051bGwoKSA/IGVtcHR5U3RyaW5nKCkg
OiBpbml0aWFsVmFsdWUpOwotICAgIHJldHVybiBpbnNlcnRpb25Ob3RpZmljYXRpb25SZXF1ZXN0
OworICAgIEluc2VydGVkSW50b1Jlc3VsdCBJbnNlcnRlZEludG9SZXN1bHQgPSBIVE1MRm9ybUNv
bnRyb2xFbGVtZW50V2l0aFN0YXRlOjppbnNlcnRlZEludG8oaW5zZXJ0aW9uVHlwZSwgcGFyZW50
T2ZJbnNlcnRlZFRyZWUpOworICAgIGlmIChpbnNlcnRpb25UeXBlLmNvbm5lY3RlZFRvRG9jdW1l
bnQpIHsKKyAgICAgICAgU3RyaW5nIGluaXRpYWxWYWx1ZSA9IHZhbHVlKCk7CisgICAgICAgIHNl
dFRleHRBc09mTGFzdEZvcm1Db250cm9sQ2hhbmdlRXZlbnQoaW5pdGlhbFZhbHVlLmlzTnVsbCgp
ID8gZW1wdHlTdHJpbmcoKSA6IGluaXRpYWxWYWx1ZSk7CisgICAgfQorICAgIHJldHVybiBJbnNl
cnRlZEludG9SZXN1bHQ7CiB9CiAKIHZvaWQgSFRNTFRleHRGb3JtQ29udHJvbEVsZW1lbnQ6OmRp
c3BhdGNoRm9jdXNFdmVudChSZWZQdHI8RWxlbWVudD4mJiBvbGRGb2N1c2VkRWxlbWVudCwgRm9j
dXNEaXJlY3Rpb24gZGlyZWN0aW9uKQpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MVGV4
dEZvcm1Db250cm9sRWxlbWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwv
SFRNTFRleHRGb3JtQ29udHJvbEVsZW1lbnQuaAkocmV2aXNpb24gMjIzNDc1KQorKysgU291cmNl
L1dlYkNvcmUvaHRtbC9IVE1MVGV4dEZvcm1Db250cm9sRWxlbWVudC5oCSh3b3JraW5nIGNvcHkp
CkBAIC01Miw3ICs1Miw3IEBAIHB1YmxpYzoKICAgICBpbnQgbWluTGVuZ3RoKCkgY29uc3QgeyBy
ZXR1cm4gbV9taW5MZW5ndGg7IH0KICAgICBFeGNlcHRpb25Pcjx2b2lkPiBzZXRNaW5MZW5ndGgo
aW50KTsKIAotICAgIEluc2VydGlvbk5vdGlmaWNhdGlvblJlcXVlc3QgaW5zZXJ0ZWRJbnRvKENv
bnRhaW5lck5vZGUmKSBvdmVycmlkZTsKKyAgICBJbnNlcnRlZEludG9SZXN1bHQgaW5zZXJ0ZWRJ
bnRvKEluc2VydGlvblR5cGUsIENvbnRhaW5lck5vZGUmKSBvdmVycmlkZTsKIAogICAgIC8vIFRo
ZSBkZXJpdmVkIGNsYXNzIHNob3VsZCByZXR1cm4gdHJ1ZSBpZiBwbGFjZWhvbGRlciBwcm9jZXNz
aW5nIGlzIG5lZWRlZC4KICAgICBib29sIGlzUGxhY2Vob2xkZXJWaXNpYmxlKCkgY29uc3QgeyBy
ZXR1cm4gbV9pc1BsYWNlaG9sZGVyVmlzaWJsZTsgfQpJbmRleDogU291cmNlL1dlYkNvcmUvaHRt
bC9IVE1MVGl0bGVFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1s
L0hUTUxUaXRsZUVsZW1lbnQuY3BwCShyZXZpc2lvbiAyMjM0NzUpCisrKyBTb3VyY2UvV2ViQ29y
ZS9odG1sL0hUTUxUaXRsZUVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01MCwxMSArNTAs
MTEgQEAgUmVmPEhUTUxUaXRsZUVsZW1lbnQ+IEhUTUxUaXRsZUVsZW1lbnQ6OgogICAgIHJldHVy
biBhZG9wdFJlZigqbmV3IEhUTUxUaXRsZUVsZW1lbnQodGFnTmFtZSwgZG9jdW1lbnQpKTsKIH0K
IAotTm9kZTo6SW5zZXJ0aW9uTm90aWZpY2F0aW9uUmVxdWVzdCBIVE1MVGl0bGVFbGVtZW50Ojpp
bnNlcnRlZEludG8oQ29udGFpbmVyTm9kZSYgaW5zZXJ0aW9uUG9pbnQpCitOb2RlOjpJbnNlcnRl
ZEludG9SZXN1bHQgSFRNTFRpdGxlRWxlbWVudDo6aW5zZXJ0ZWRJbnRvKEluc2VydGlvblR5cGUg
aW5zZXJ0aW9uVHlwZSwgQ29udGFpbmVyTm9kZSYgcGFyZW50T2ZJbnNlcnRlZFRyZWUpCiB7Ci0g
ICAgSFRNTEVsZW1lbnQ6Omluc2VydGVkSW50byhpbnNlcnRpb25Qb2ludCk7CisgICAgSFRNTEVs
ZW1lbnQ6Omluc2VydGVkSW50byhpbnNlcnRpb25UeXBlLCBwYXJlbnRPZkluc2VydGVkVHJlZSk7
CiAgICAgZG9jdW1lbnQoKS50aXRsZUVsZW1lbnRBZGRlZCgqdGhpcyk7Ci0gICAgcmV0dXJuIElu
c2VydGlvbkRvbmU7CisgICAgcmV0dXJuIEluc2VydGVkSW50b1Jlc3VsdDo6RG9uZTsKIH0KIAog
dm9pZCBIVE1MVGl0bGVFbGVtZW50OjpyZW1vdmVkRnJvbShDb250YWluZXJOb2RlJiBpbnNlcnRp
b25Qb2ludCkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFRpdGxlRWxlbWVudC5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFRpdGxlRWxlbWVudC5oCShyZXZp
c2lvbiAyMjM0NzUpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxUaXRsZUVsZW1lbnQuaAko
d29ya2luZyBjb3B5KQpAQCAtMzksNyArMzksNyBAQCBwdWJsaWM6CiBwcml2YXRlOgogICAgIEhU
TUxUaXRsZUVsZW1lbnQoY29uc3QgUXVhbGlmaWVkTmFtZSYsIERvY3VtZW50Jik7CiAKLSAgICBJ
bnNlcnRpb25Ob3RpZmljYXRpb25SZXF1ZXN0IGluc2VydGVkSW50byhDb250YWluZXJOb2RlJikg
ZmluYWw7CisgICAgSW5zZXJ0ZWRJbnRvUmVzdWx0IGluc2VydGVkSW50byhJbnNlcnRpb25UeXBl
LCBDb250YWluZXJOb2RlJikgZmluYWw7CiAgICAgdm9pZCByZW1vdmVkRnJvbShDb250YWluZXJO
b2RlJikgZmluYWw7CiAgICAgdm9pZCBjaGlsZHJlbkNoYW5nZWQoY29uc3QgQ2hpbGRDaGFuZ2Um
KSBmaW5hbDsKIApJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MVHJhY2tFbGVtZW50LmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxUcmFja0VsZW1lbnQuY3Bw
CShyZXZpc2lvbiAyMjM0NzUpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxUcmFja0VsZW1l
bnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03NiwxNyArNzYsMTkgQEAgUmVmPEhUTUxUcmFja0Vs
ZW1lbnQ+IEhUTUxUcmFja0VsZW1lbnQ6OgogICAgIHJldHVybiBhZG9wdFJlZigqbmV3IEhUTUxU
cmFja0VsZW1lbnQodGFnTmFtZSwgZG9jdW1lbnQpKTsKIH0KIAotTm9kZTo6SW5zZXJ0aW9uTm90
aWZpY2F0aW9uUmVxdWVzdCBIVE1MVHJhY2tFbGVtZW50OjppbnNlcnRlZEludG8oQ29udGFpbmVy
Tm9kZSYgaW5zZXJ0aW9uUG9pbnQpCitOb2RlOjpJbnNlcnRlZEludG9SZXN1bHQgSFRNTFRyYWNr
RWxlbWVudDo6aW5zZXJ0ZWRJbnRvKEluc2VydGlvblR5cGUgaW5zZXJ0aW9uVHlwZSwgQ29udGFp
bmVyTm9kZSYgcGFyZW50T2ZJbnNlcnRlZFRyZWUpCiB7Ci0gICAgSFRNTEVsZW1lbnQ6Omluc2Vy
dGVkSW50byhpbnNlcnRpb25Qb2ludCk7CisgICAgSFRNTEVsZW1lbnQ6Omluc2VydGVkSW50byhp
bnNlcnRpb25UeXBlLCBwYXJlbnRPZkluc2VydGVkVHJlZSk7CiAKLSAgICBpZiAoaXM8SFRNTE1l
ZGlhRWxlbWVudD4oaW5zZXJ0aW9uUG9pbnQpKQotICAgICAgICBkb3duY2FzdDxIVE1MTWVkaWFF
bGVtZW50PihpbnNlcnRpb25Qb2ludCkuZGlkQWRkVGV4dFRyYWNrKCp0aGlzKTsKKyAgICAvLyBG
SVhNRTogVGhpcyBjb2RlIGlzIHdyb25nLiBJZiBIVE1MVHJhY2tFbGVtZW50IGNhbiBiZSBhbnkg
ZGVzY2VuZGVudCBvZiBIVE1MTWVkaWFFbGVtZW50LCB0aGVuIGNoZWNrIGFuY2VzdG9ycyBvZiBw
YXJlbnRPZkluc2VydGVkVHJlZS4KKyAgICAvLyBJZiBIVE1MTWVkaWFFbGVtZW50IG9ubHkgc3Vw
cG9ydHMgSFRNTFRyYWNrRWxlbWVudCB3aGljaCBpcyBhbiBpbW1lZGlhdGUgY2hpbGQsIHRoZW4g
Y2hlY2sgcGFyZW50Tm9kZSgpIGluc3RlYWQuCisgICAgaWYgKGlzPEhUTUxNZWRpYUVsZW1lbnQ+
KHBhcmVudE9mSW5zZXJ0ZWRUcmVlKSkKKyAgICAgICAgZG93bmNhc3Q8SFRNTE1lZGlhRWxlbWVu
dD4ocGFyZW50T2ZJbnNlcnRlZFRyZWUpLmRpZEFkZFRleHRUcmFjaygqdGhpcyk7CiAKICAgICAv
LyBTaW5jZSB3ZSd2ZSBtb3ZlZCB0byBhIG5ldyBwYXJlbnQsIHdlIG1heSBub3cgYmUgYWJsZSB0
byBsb2FkLgogICAgIHNjaGVkdWxlTG9hZCgpOwogCi0gICAgcmV0dXJuIEluc2VydGlvbkRvbmU7
CisgICAgcmV0dXJuIEluc2VydGVkSW50b1Jlc3VsdDo6RG9uZTsKIH0KIAogdm9pZCBIVE1MVHJh
Y2tFbGVtZW50OjpyZW1vdmVkRnJvbShDb250YWluZXJOb2RlJiBpbnNlcnRpb25Qb2ludCkKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFRyYWNrRWxlbWVudC5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFRyYWNrRWxlbWVudC5oCShyZXZpc2lvbiAyMjM0NzUp
CisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxUcmFja0VsZW1lbnQuaAkod29ya2luZyBjb3B5
KQpAQCAtNjUsNyArNjUsNyBAQCBwcml2YXRlOgogCiAgICAgdm9pZCBwYXJzZUF0dHJpYnV0ZShj
b25zdCBRdWFsaWZpZWROYW1lJiwgY29uc3QgQXRvbWljU3RyaW5nJikgZmluYWw7CiAKLSAgICBJ
bnNlcnRpb25Ob3RpZmljYXRpb25SZXF1ZXN0IGluc2VydGVkSW50byhDb250YWluZXJOb2RlJikg
ZmluYWw7CisgICAgSW5zZXJ0ZWRJbnRvUmVzdWx0IGluc2VydGVkSW50byhJbnNlcnRpb25UeXBl
LCBDb250YWluZXJOb2RlJikgZmluYWw7CiAgICAgdm9pZCByZW1vdmVkRnJvbShDb250YWluZXJO
b2RlJikgZmluYWw7CiAKICAgICBib29sIGlzVVJMQXR0cmlidXRlKGNvbnN0IEF0dHJpYnV0ZSYp
IGNvbnN0IGZpbmFsOwpJbmRleDogU291cmNlL1dlYkNvcmUvc3ZnL1NWR0VsZW1lbnQuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdFbGVtZW50LmNwcAkocmV2aXNpb24g
MjIzNDc1KQorKysgU291cmNlL1dlYkNvcmUvc3ZnL1NWR0VsZW1lbnQuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC05ODIsMTIgKzk4MiwxMiBAQCB2b2lkIFNWR0VsZW1lbnQ6OnN2Z0F0dHJpYnV0ZUNo
YW5nZWQoY29uCiAgICAgfQogfQogCi1Ob2RlOjpJbnNlcnRpb25Ob3RpZmljYXRpb25SZXF1ZXN0
IFNWR0VsZW1lbnQ6Omluc2VydGVkSW50byhDb250YWluZXJOb2RlJiByb290UGFyZW50KQorTm9k
ZTo6SW5zZXJ0ZWRJbnRvUmVzdWx0IFNWR0VsZW1lbnQ6Omluc2VydGVkSW50byhJbnNlcnRpb25U
eXBlIGluc2VydGlvblR5cGUsIENvbnRhaW5lck5vZGUmIHBhcmVudE9mSW5zZXJ0ZWRUcmVlKQog
ewotICAgIFN0eWxlZEVsZW1lbnQ6Omluc2VydGVkSW50byhyb290UGFyZW50KTsKKyAgICBTdHls
ZWRFbGVtZW50OjppbnNlcnRlZEludG8oaW5zZXJ0aW9uVHlwZSwgcGFyZW50T2ZJbnNlcnRlZFRy
ZWUpOwogICAgIHVwZGF0ZVJlbGF0aXZlTGVuZ3Roc0luZm9ybWF0aW9uKCk7CiAgICAgYnVpbGRQ
ZW5kaW5nUmVzb3VyY2VzSWZOZWVkZWQoKTsKLSAgICByZXR1cm4gSW5zZXJ0aW9uRG9uZTsKKyAg
ICByZXR1cm4gSW5zZXJ0ZWRJbnRvUmVzdWx0OjpEb25lOwogfQogCiB2b2lkIFNWR0VsZW1lbnQ6
OmJ1aWxkUGVuZGluZ1Jlc291cmNlc0lmTmVlZGVkKCkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N2
Zy9TVkdFbGVtZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3ZnL1NWR0VsZW1l
bnQuaAkocmV2aXNpb24gMjIzNDc1KQorKysgU291cmNlL1dlYkNvcmUvc3ZnL1NWR0VsZW1lbnQu
aAkod29ya2luZyBjb3B5KQpAQCAtMTU5LDcgKzE1OSw3IEBAIHByb3RlY3RlZDoKIAogICAgIGJv
b2wgaXNQcmVzZW50YXRpb25BdHRyaWJ1dGUoY29uc3QgUXVhbGlmaWVkTmFtZSYpIGNvbnN0IG92
ZXJyaWRlOwogICAgIHZvaWQgY29sbGVjdFN0eWxlRm9yUHJlc2VudGF0aW9uQXR0cmlidXRlKGNv
bnN0IFF1YWxpZmllZE5hbWUmLCBjb25zdCBBdG9taWNTdHJpbmcmLCBNdXRhYmxlU3R5bGVQcm9w
ZXJ0aWVzJikgb3ZlcnJpZGU7Ci0gICAgSW5zZXJ0aW9uTm90aWZpY2F0aW9uUmVxdWVzdCBpbnNl
cnRlZEludG8oQ29udGFpbmVyTm9kZSYpIG92ZXJyaWRlOworICAgIEluc2VydGVkSW50b1Jlc3Vs
dCBpbnNlcnRlZEludG8oSW5zZXJ0aW9uVHlwZSwgQ29udGFpbmVyTm9kZSYpIG92ZXJyaWRlOwog
ICAgIHZvaWQgcmVtb3ZlZEZyb20oQ29udGFpbmVyTm9kZSYpIG92ZXJyaWRlOwogICAgIHZvaWQg
Y2hpbGRyZW5DaGFuZ2VkKGNvbnN0IENoaWxkQ2hhbmdlJikgb3ZlcnJpZGU7CiAgICAgdmlydHVh
bCBib29sIHNlbGZIYXNSZWxhdGl2ZUxlbmd0aHMoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQpJ
bmRleDogU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFSW1hZ2VFbGVtZW50LmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVJbWFnZUVsZW1lbnQuY3BwCShyZXZpc2lvbiAy
MjM0NzUpCisrKyBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVJbWFnZUVsZW1lbnQuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xNTAsMTMgKzE1MCwxMyBAQCB2b2lkIFNWR0ZFSW1hZ2VFbGVtZW50Ojpz
dmdBdHRyaWJ1dGVDaGFuCiAgICAgU1ZHRmlsdGVyUHJpbWl0aXZlU3RhbmRhcmRBdHRyaWJ1dGVz
OjpzdmdBdHRyaWJ1dGVDaGFuZ2VkKGF0dHJOYW1lKTsKIH0KIAotTm9kZTo6SW5zZXJ0aW9uTm90
aWZpY2F0aW9uUmVxdWVzdCBTVkdGRUltYWdlRWxlbWVudDo6aW5zZXJ0ZWRJbnRvKENvbnRhaW5l
ck5vZGUmIHJvb3RQYXJlbnQpCitOb2RlOjpJbnNlcnRlZEludG9SZXN1bHQgU1ZHRkVJbWFnZUVs
ZW1lbnQ6Omluc2VydGVkSW50byhJbnNlcnRpb25UeXBlIGluc2VydGlvblR5cGUsIENvbnRhaW5l
ck5vZGUmIHBhcmVudE9mSW5zZXJ0ZWRUcmVlKQogewotICAgIFNWR0ZpbHRlclByaW1pdGl2ZVN0
YW5kYXJkQXR0cmlidXRlczo6aW5zZXJ0ZWRJbnRvKHJvb3RQYXJlbnQpOwotICAgIHJldHVybiBJ
bnNlcnRpb25TaG91bGRDYWxsRmluaXNoZWRJbnNlcnRpbmdTdWJ0cmVlOworICAgIFNWR0ZpbHRl
clByaW1pdGl2ZVN0YW5kYXJkQXR0cmlidXRlczo6aW5zZXJ0ZWRJbnRvKGluc2VydGlvblR5cGUs
IHBhcmVudE9mSW5zZXJ0ZWRUcmVlKTsKKyAgICByZXR1cm4gSW5zZXJ0ZWRJbnRvUmVzdWx0OjpO
ZWVkc1Bvc3RJbnNlcnRpb25DYWxsYmFjazsKIH0KIAotdm9pZCBTVkdGRUltYWdlRWxlbWVudDo6
ZmluaXNoZWRJbnNlcnRpbmdTdWJ0cmVlKCkKK3ZvaWQgU1ZHRkVJbWFnZUVsZW1lbnQ6OmRpZEZp
bmlzaEluc2VydGluZ05vZGUoKQogewogICAgIGJ1aWxkUGVuZGluZ1Jlc291cmNlKCk7CiB9Cklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVJbWFnZUVsZW1lbnQuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRkVJbWFnZUVsZW1lbnQuaAkocmV2aXNpb24gMjIzNDc1
KQorKysgU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZFSW1hZ2VFbGVtZW50LmgJKHdvcmtpbmcgY29w
eSkKQEAgLTQ1LDcgKzQ1LDcgQEAgcHVibGljOgogcHJpdmF0ZToKICAgICBTVkdGRUltYWdlRWxl
bWVudChjb25zdCBRdWFsaWZpZWROYW1lJiwgRG9jdW1lbnQmKTsKIAotICAgIHZvaWQgZmluaXNo
ZWRJbnNlcnRpbmdTdWJ0cmVlKCkgb3ZlcnJpZGU7CisgICAgdm9pZCBkaWRGaW5pc2hJbnNlcnRp
bmdOb2RlKCkgb3ZlcnJpZGU7CiAKICAgICB2b2lkIHBhcnNlQXR0cmlidXRlKGNvbnN0IFF1YWxp
ZmllZE5hbWUmLCBjb25zdCBBdG9taWNTdHJpbmcmKSBvdmVycmlkZTsKICAgICB2b2lkIHN2Z0F0
dHJpYnV0ZUNoYW5nZWQoY29uc3QgUXVhbGlmaWVkTmFtZSYpIG92ZXJyaWRlOwpAQCAtNTgsNyAr
NTgsNyBAQCBwcml2YXRlOgogICAgIHZvaWQgcmVxdWVzdEltYWdlUmVzb3VyY2UoKTsKIAogICAg
IHZvaWQgYnVpbGRQZW5kaW5nUmVzb3VyY2UoKSBvdmVycmlkZTsKLSAgICBJbnNlcnRpb25Ob3Rp
ZmljYXRpb25SZXF1ZXN0IGluc2VydGVkSW50byhDb250YWluZXJOb2RlJikgb3ZlcnJpZGU7Cisg
ICAgSW5zZXJ0ZWRJbnRvUmVzdWx0IGluc2VydGVkSW50byhJbnNlcnRpb25UeXBlLCBDb250YWlu
ZXJOb2RlJikgb3ZlcnJpZGU7CiAgICAgdm9pZCByZW1vdmVkRnJvbShDb250YWluZXJOb2RlJikg
b3ZlcnJpZGU7CiAKICAgICBCRUdJTl9ERUNMQVJFX0FOSU1BVEVEX1BST1BFUlRJRVMoU1ZHRkVJ
bWFnZUVsZW1lbnQpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRm9udEZhY2VFbGVtZW50
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRm9udEZhY2VFbGVtZW50
LmNwcAkocmV2aXNpb24gMjIzNDc1KQorKysgU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZvbnRGYWNl
RWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI3MSwxNyArMjcxLDE3IEBAIHZvaWQgU1ZH
Rm9udEZhY2VFbGVtZW50OjpyZWJ1aWxkRm9udEZhY2UKICAgICBkb2N1bWVudCgpLnN0eWxlU2Nv
cGUoKS5kaWRDaGFuZ2VTdHlsZVNoZWV0RW52aXJvbm1lbnQoKTsKIH0KIAotTm9kZTo6SW5zZXJ0
aW9uTm90aWZpY2F0aW9uUmVxdWVzdCBTVkdGb250RmFjZUVsZW1lbnQ6Omluc2VydGVkSW50byhD
b250YWluZXJOb2RlJiByb290UGFyZW50KQorTm9kZTo6SW5zZXJ0ZWRJbnRvUmVzdWx0IFNWR0Zv
bnRGYWNlRWxlbWVudDo6aW5zZXJ0ZWRJbnRvKEluc2VydGlvblR5cGUgaW5zZXJ0aW9uVHlwZSwg
Q29udGFpbmVyTm9kZSYgcGFyZW50T2ZJbnNlcnRlZFRyZWUpCiB7Ci0gICAgU1ZHRWxlbWVudDo6
aW5zZXJ0ZWRJbnRvKHJvb3RQYXJlbnQpOwotICAgIGlmICghcm9vdFBhcmVudC5pc0Nvbm5lY3Rl
ZCgpKSB7CisgICAgU1ZHRWxlbWVudDo6aW5zZXJ0ZWRJbnRvKGluc2VydGlvblR5cGUsIHBhcmVu
dE9mSW5zZXJ0ZWRUcmVlKTsKKyAgICBpZiAoIWluc2VydGlvblR5cGUuY29ubmVjdGVkVG9Eb2N1
bWVudCkgewogICAgICAgICBBU1NFUlQoIW1fZm9udEVsZW1lbnQpOwotICAgICAgICByZXR1cm4g
SW5zZXJ0aW9uRG9uZTsKKyAgICAgICAgcmV0dXJuIEluc2VydGVkSW50b1Jlc3VsdDo6RG9uZTsK
ICAgICB9CiAgICAgZG9jdW1lbnQoKS5hY2Nlc3NTVkdFeHRlbnNpb25zKCkucmVnaXN0ZXJTVkdG
b250RmFjZUVsZW1lbnQodGhpcyk7CiAKICAgICByZWJ1aWxkRm9udEZhY2UoKTsKLSAgICByZXR1
cm4gSW5zZXJ0aW9uRG9uZTsKKyAgICByZXR1cm4gSW5zZXJ0ZWRJbnRvUmVzdWx0OjpEb25lOwog
fQogCiB2b2lkIFNWR0ZvbnRGYWNlRWxlbWVudDo6cmVtb3ZlZEZyb20oQ29udGFpbmVyTm9kZSYg
cm9vdFBhcmVudCkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGb250RmFjZUVsZW1lbnQu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRm9udEZhY2VFbGVtZW50LmgJ
KHJldmlzaW9uIDIyMzQ3NSkKKysrIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGb250RmFjZUVsZW1l
bnQuaAkod29ya2luZyBjb3B5KQpAQCAtNTgsNyArNTgsNyBAQCBwcml2YXRlOgogICAgIHZvaWQg
cGFyc2VBdHRyaWJ1dGUoY29uc3QgUXVhbGlmaWVkTmFtZSYsIGNvbnN0IEF0b21pY1N0cmluZyYp
IGZpbmFsOwogCiAgICAgdm9pZCBjaGlsZHJlbkNoYW5nZWQoY29uc3QgQ2hpbGRDaGFuZ2UmKSBm
aW5hbDsKLSAgICBJbnNlcnRpb25Ob3RpZmljYXRpb25SZXF1ZXN0IGluc2VydGVkSW50byhDb250
YWluZXJOb2RlJikgZmluYWw7CisgICAgSW5zZXJ0ZWRJbnRvUmVzdWx0IGluc2VydGVkSW50byhJ
bnNlcnRpb25UeXBlLCBDb250YWluZXJOb2RlJikgZmluYWw7CiAgICAgdm9pZCByZW1vdmVkRnJv
bShDb250YWluZXJOb2RlJikgZmluYWw7CiAKICAgICBib29sIHJlbmRlcmVySXNOZWVkZWQoY29u
c3QgUmVuZGVyU3R5bGUmKSBmaW5hbCB7IHJldHVybiBmYWxzZTsgfQpJbmRleDogU291cmNlL1dl
YkNvcmUvc3ZnL1NWR0ZvbnRGYWNlVXJpRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvc3ZnL1NWR0ZvbnRGYWNlVXJpRWxlbWVudC5jcHAJKHJldmlzaW9uIDIyMzQ3NSkK
KysrIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGb250RmFjZVVyaUVsZW1lbnQuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC04MSwxMCArODEsMTAgQEAgdm9pZCBTVkdGb250RmFjZVVyaUVsZW1lbnQ6OmNo
aWxkcmVuQ2hhbgogICAgICAgICBkb3duY2FzdDxTVkdGb250RmFjZUVsZW1lbnQ+KCpncmFuZHBh
cmVudCkucmVidWlsZEZvbnRGYWNlKCk7CiB9CiAKLU5vZGU6Okluc2VydGlvbk5vdGlmaWNhdGlv
blJlcXVlc3QgU1ZHRm9udEZhY2VVcmlFbGVtZW50OjppbnNlcnRlZEludG8oQ29udGFpbmVyTm9k
ZSYgcm9vdFBhcmVudCkKK05vZGU6Okluc2VydGVkSW50b1Jlc3VsdCBTVkdGb250RmFjZVVyaUVs
ZW1lbnQ6Omluc2VydGVkSW50byhJbnNlcnRpb25UeXBlIGluc2VydGlvblR5cGUsIENvbnRhaW5l
ck5vZGUmIHBhcmVudE9mSW5zZXJ0ZWRUcmVlKQogewogICAgIGxvYWRGb250KCk7Ci0gICAgcmV0
dXJuIFNWR0VsZW1lbnQ6Omluc2VydGVkSW50byhyb290UGFyZW50KTsKKyAgICByZXR1cm4gU1ZH
RWxlbWVudDo6aW5zZXJ0ZWRJbnRvKGluc2VydGlvblR5cGUsIHBhcmVudE9mSW5zZXJ0ZWRUcmVl
KTsKIH0KIAogc3RhdGljIGJvb2wgaXNTVkdGb250VGFyZ2V0KGNvbnN0IFNWR0ZvbnRGYWNlVXJp
RWxlbWVudCYgZWxlbWVudCkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGb250RmFjZVVy
aUVsZW1lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRm9udEZhY2VV
cmlFbGVtZW50LmgJKHJldmlzaW9uIDIyMzQ3NSkKKysrIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdG
b250RmFjZVVyaUVsZW1lbnQuaAkod29ya2luZyBjb3B5KQpAQCAtNDIsNyArNDIsNyBAQCBwcml2
YXRlOgogICAgIAogICAgIHZvaWQgcGFyc2VBdHRyaWJ1dGUoY29uc3QgUXVhbGlmaWVkTmFtZSYs
IGNvbnN0IEF0b21pY1N0cmluZyYpIGZpbmFsOwogICAgIHZvaWQgY2hpbGRyZW5DaGFuZ2VkKGNv
bnN0IENoaWxkQ2hhbmdlJikgZmluYWw7Ci0gICAgSW5zZXJ0aW9uTm90aWZpY2F0aW9uUmVxdWVz
dCBpbnNlcnRlZEludG8oQ29udGFpbmVyTm9kZSYpIGZpbmFsOworICAgIEluc2VydGVkSW50b1Jl
c3VsdCBpbnNlcnRlZEludG8oSW5zZXJ0aW9uVHlwZSwgQ29udGFpbmVyTm9kZSYpIGZpbmFsOwog
ICAgIGJvb2wgcmVuZGVyZXJJc05lZWRlZChjb25zdCBSZW5kZXJTdHlsZSYpIGZpbmFsIHsgcmV0
dXJuIGZhbHNlOyB9CiAKICAgICB2b2lkIGxvYWRGb250KCk7CkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9zdmcvU1ZHSW1hZ2VFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9z
dmcvU1ZHSW1hZ2VFbGVtZW50LmNwcAkocmV2aXNpb24gMjIzNDc1KQorKysgU291cmNlL1dlYkNv
cmUvc3ZnL1NWR0ltYWdlRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE4NiwxNSArMTg2
LDE1IEBAIHZvaWQgU1ZHSW1hZ2VFbGVtZW50OjpkaWRBdHRhY2hSZW5kZXJlcnMKICAgICB9CiB9
CiAKLU5vZGU6Okluc2VydGlvbk5vdGlmaWNhdGlvblJlcXVlc3QgU1ZHSW1hZ2VFbGVtZW50Ojpp
bnNlcnRlZEludG8oQ29udGFpbmVyTm9kZSYgcm9vdFBhcmVudCkKK05vZGU6Okluc2VydGVkSW50
b1Jlc3VsdCBTVkdJbWFnZUVsZW1lbnQ6Omluc2VydGVkSW50byhJbnNlcnRpb25UeXBlIGluc2Vy
dGlvblR5cGUsIENvbnRhaW5lck5vZGUmIHBhcmVudE9mSW5zZXJ0ZWRUcmVlKQogewotICAgIFNW
R0dyYXBoaWNzRWxlbWVudDo6aW5zZXJ0ZWRJbnRvKHJvb3RQYXJlbnQpOwotICAgIGlmICghcm9v
dFBhcmVudC5pc0Nvbm5lY3RlZCgpKQotICAgICAgICByZXR1cm4gSW5zZXJ0aW9uRG9uZTsKKyAg
ICBTVkdHcmFwaGljc0VsZW1lbnQ6Omluc2VydGVkSW50byhpbnNlcnRpb25UeXBlLCBwYXJlbnRP
Zkluc2VydGVkVHJlZSk7CisgICAgaWYgKCFpbnNlcnRpb25UeXBlLmNvbm5lY3RlZFRvRG9jdW1l
bnQpCisgICAgICAgIHJldHVybiBJbnNlcnRlZEludG9SZXN1bHQ6OkRvbmU7CiAgICAgLy8gVXBk
YXRlIGltYWdlIGxvYWRlciwgYXMgc29vbiBhcyB3ZSdyZSBsaXZpbmcgaW4gdGhlIHRyZWUuCiAg
ICAgLy8gV2UgY2FuIG9ubHkgcmVzb2x2ZSBiYXNlIFVSSXMgcHJvcGVybHksIGFmdGVyIHRoYXQh
CiAgICAgbV9pbWFnZUxvYWRlci51cGRhdGVGcm9tRWxlbWVudCgpOwotICAgIHJldHVybiBJbnNl
cnRpb25Eb25lOworICAgIHJldHVybiBJbnNlcnRlZEludG9SZXN1bHQ6OkRvbmU7CiB9CiAKIGNv
bnN0IEF0b21pY1N0cmluZyYgU1ZHSW1hZ2VFbGVtZW50OjppbWFnZVNvdXJjZVVSTCgpIGNvbnN0
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHSW1hZ2VFbGVtZW50LmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ltYWdlRWxlbWVudC5oCShyZXZpc2lvbiAyMjM0NzUp
CisrKyBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHSW1hZ2VFbGVtZW50LmgJKHdvcmtpbmcgY29weSkK
QEAgLTQ5LDcgKzQ5LDcgQEAgcHJpdmF0ZToKICAgICB2b2lkIHN2Z0F0dHJpYnV0ZUNoYW5nZWQo
Y29uc3QgUXVhbGlmaWVkTmFtZSYpIGZpbmFsOwogCiAgICAgdm9pZCBkaWRBdHRhY2hSZW5kZXJl
cnMoKSBmaW5hbDsKLSAgICBJbnNlcnRpb25Ob3RpZmljYXRpb25SZXF1ZXN0IGluc2VydGVkSW50
byhDb250YWluZXJOb2RlJikgZmluYWw7CisgICAgSW5zZXJ0ZWRJbnRvUmVzdWx0IGluc2VydGVk
SW50byhJbnNlcnRpb25UeXBlLCBDb250YWluZXJOb2RlJikgZmluYWw7CiAKICAgICBSZW5kZXJQ
dHI8UmVuZGVyRWxlbWVudD4gY3JlYXRlRWxlbWVudFJlbmRlcmVyKFJlbmRlclN0eWxlJiYsIGNv
bnN0IFJlbmRlclRyZWVQb3NpdGlvbiYpIGZpbmFsOwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9z
dmcvU1ZHTVBhdGhFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcv
U1ZHTVBhdGhFbGVtZW50LmNwcAkocmV2aXNpb24gMjIzNDc1KQorKysgU291cmNlL1dlYkNvcmUv
c3ZnL1NWR01QYXRoRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTg2LDE1ICs4NiwxNSBA
QCB2b2lkIFNWR01QYXRoRWxlbWVudDo6Y2xlYXJSZXNvdXJjZVJlZmVyCiAgICAgZG9jdW1lbnQo
KS5hY2Nlc3NTVkdFeHRlbnNpb25zKCkucmVtb3ZlQWxsVGFyZ2V0UmVmZXJlbmNlc0ZvckVsZW1l
bnQodGhpcyk7CiB9CiAKLU5vZGU6Okluc2VydGlvbk5vdGlmaWNhdGlvblJlcXVlc3QgU1ZHTVBh
dGhFbGVtZW50OjppbnNlcnRlZEludG8oQ29udGFpbmVyTm9kZSYgcm9vdFBhcmVudCkKK05vZGU6
Okluc2VydGVkSW50b1Jlc3VsdCBTVkdNUGF0aEVsZW1lbnQ6Omluc2VydGVkSW50byhJbnNlcnRp
b25UeXBlIGluc2VydGlvblR5cGUsIENvbnRhaW5lck5vZGUmIHBhcmVudE9mSW5zZXJ0ZWRUcmVl
KQogewotICAgIFNWR0VsZW1lbnQ6Omluc2VydGVkSW50byhyb290UGFyZW50KTsKLSAgICBpZiAo
cm9vdFBhcmVudC5pc0Nvbm5lY3RlZCgpKQotICAgICAgICByZXR1cm4gSW5zZXJ0aW9uU2hvdWxk
Q2FsbEZpbmlzaGVkSW5zZXJ0aW5nU3VidHJlZTsKLSAgICByZXR1cm4gSW5zZXJ0aW9uRG9uZTsK
KyAgICBTVkdFbGVtZW50OjppbnNlcnRlZEludG8oaW5zZXJ0aW9uVHlwZSwgcGFyZW50T2ZJbnNl
cnRlZFRyZWUpOworICAgIGlmIChpbnNlcnRpb25UeXBlLmNvbm5lY3RlZFRvRG9jdW1lbnQpCisg
ICAgICAgIHJldHVybiBJbnNlcnRlZEludG9SZXN1bHQ6Ok5lZWRzUG9zdEluc2VydGlvbkNhbGxi
YWNrOworICAgIHJldHVybiBJbnNlcnRlZEludG9SZXN1bHQ6OkRvbmU7CiB9CiAKLXZvaWQgU1ZH
TVBhdGhFbGVtZW50OjpmaW5pc2hlZEluc2VydGluZ1N1YnRyZWUoKQordm9pZCBTVkdNUGF0aEVs
ZW1lbnQ6OmRpZEZpbmlzaEluc2VydGluZ05vZGUoKQogewogICAgIGJ1aWxkUGVuZGluZ1Jlc291
cmNlKCk7CiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHTVBhdGhFbGVtZW50LmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3ZnL1NWR01QYXRoRWxlbWVudC5oCShyZXZpc2lv
biAyMjM0NzUpCisrKyBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHTVBhdGhFbGVtZW50LmgJKHdvcmtp
bmcgY29weSkKQEAgLTQ1LDE0ICs0NSwxNCBAQCBwcml2YXRlOgogCiAgICAgdm9pZCBidWlsZFBl
bmRpbmdSZXNvdXJjZSgpIGZpbmFsOwogICAgIHZvaWQgY2xlYXJSZXNvdXJjZVJlZmVyZW5jZXMo
KTsKLSAgICBJbnNlcnRpb25Ob3RpZmljYXRpb25SZXF1ZXN0IGluc2VydGVkSW50byhDb250YWlu
ZXJOb2RlJikgZmluYWw7CisgICAgSW5zZXJ0ZWRJbnRvUmVzdWx0IGluc2VydGVkSW50byhJbnNl
cnRpb25UeXBlLCBDb250YWluZXJOb2RlJikgZmluYWw7CiAgICAgdm9pZCByZW1vdmVkRnJvbShD
b250YWluZXJOb2RlJikgZmluYWw7CiAKICAgICB2b2lkIHBhcnNlQXR0cmlidXRlKGNvbnN0IFF1
YWxpZmllZE5hbWUmLCBjb25zdCBBdG9taWNTdHJpbmcmKSBmaW5hbDsKICAgICB2b2lkIHN2Z0F0
dHJpYnV0ZUNoYW5nZWQoY29uc3QgUXVhbGlmaWVkTmFtZSYpIGZpbmFsOwogCiAgICAgYm9vbCBy
ZW5kZXJlcklzTmVlZGVkKGNvbnN0IFJlbmRlclN0eWxlJikgZmluYWwgeyByZXR1cm4gZmFsc2U7
IH0KLSAgICB2b2lkIGZpbmlzaGVkSW5zZXJ0aW5nU3VidHJlZSgpIGZpbmFsOworICAgIHZvaWQg
ZGlkRmluaXNoSW5zZXJ0aW5nTm9kZSgpIGZpbmFsOwogCiAgICAgdm9pZCBub3RpZnlQYXJlbnRP
ZlBhdGhDaGFuZ2UoQ29udGFpbmVyTm9kZSopOwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcv
U1ZHUGF0aEVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdQ
YXRoRWxlbWVudC5jcHAJKHJldmlzaW9uIDIyMzQ3NSkKKysrIFNvdXJjZS9XZWJDb3JlL3N2Zy9T
VkdQYXRoRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI3OSwxMSArMjc5LDExIEBAIHZv
aWQgU1ZHUGF0aEVsZW1lbnQ6OmludmFsaWRhdGVNUGF0aERlcGUKICAgICB9CiB9CiAKLU5vZGU6
Okluc2VydGlvbk5vdGlmaWNhdGlvblJlcXVlc3QgU1ZHUGF0aEVsZW1lbnQ6Omluc2VydGVkSW50
byhDb250YWluZXJOb2RlJiByb290UGFyZW50KQorTm9kZTo6SW5zZXJ0ZWRJbnRvUmVzdWx0IFNW
R1BhdGhFbGVtZW50OjppbnNlcnRlZEludG8oSW5zZXJ0aW9uVHlwZSBpbnNlcnRpb25UeXBlLCBD
b250YWluZXJOb2RlJiBwYXJlbnRPZkluc2VydGVkVHJlZSkKIHsKLSAgICBTVkdHcmFwaGljc0Vs
ZW1lbnQ6Omluc2VydGVkSW50byhyb290UGFyZW50KTsKKyAgICBTVkdHcmFwaGljc0VsZW1lbnQ6
Omluc2VydGVkSW50byhpbnNlcnRpb25UeXBlLCBwYXJlbnRPZkluc2VydGVkVHJlZSk7CiAgICAg
aW52YWxpZGF0ZU1QYXRoRGVwZW5kZW5jaWVzKCk7Ci0gICAgcmV0dXJuIEluc2VydGlvbkRvbmU7
CisgICAgcmV0dXJuIEluc2VydGVkSW50b1Jlc3VsdDo6RG9uZTsKIH0KIAogdm9pZCBTVkdQYXRo
RWxlbWVudDo6cmVtb3ZlZEZyb20oQ29udGFpbmVyTm9kZSYgcm9vdFBhcmVudCkKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL3N2Zy9TVkdQYXRoRWxlbWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL3N2Zy9TVkdQYXRoRWxlbWVudC5oCShyZXZpc2lvbiAyMjM0NzUpCisrKyBTb3VyY2Uv
V2ViQ29yZS9zdmcvU1ZHUGF0aEVsZW1lbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMTI0LDcgKzEy
NCw3IEBAIHByaXZhdGU6CiAKICAgICBSZW5kZXJQdHI8UmVuZGVyRWxlbWVudD4gY3JlYXRlRWxl
bWVudFJlbmRlcmVyKFJlbmRlclN0eWxlJiYsIGNvbnN0IFJlbmRlclRyZWVQb3NpdGlvbiYpIGZp
bmFsOwogCi0gICAgTm9kZTo6SW5zZXJ0aW9uTm90aWZpY2F0aW9uUmVxdWVzdCBpbnNlcnRlZElu
dG8oQ29udGFpbmVyTm9kZSYpIGZpbmFsOworICAgIE5vZGU6Okluc2VydGVkSW50b1Jlc3VsdCBp
bnNlcnRlZEludG8oSW5zZXJ0aW9uVHlwZSwgQ29udGFpbmVyTm9kZSYpIGZpbmFsOwogICAgIHZv
aWQgcmVtb3ZlZEZyb20oQ29udGFpbmVyTm9kZSYpIGZpbmFsOwogCiAgICAgdm9pZCBpbnZhbGlk
YXRlTVBhdGhEZXBlbmRlbmNpZXMoKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdTVkdF
bGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHU1ZHRWxlbWVu
dC5jcHAJKHJldmlzaW9uIDIyMzQ3NSkKKysrIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdTVkdFbGVt
ZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDY3LDkgKzQ2Nyw5IEBAIFJlbmRlclB0cjxSZW5k
ZXJFbGVtZW50PiBTVkdTVkdFbGVtZW50OjoKICAgICByZXR1cm4gY3JlYXRlUmVuZGVyZXI8UmVu
ZGVyU1ZHVmlld3BvcnRDb250YWluZXI+KCp0aGlzLCBXVEZNb3ZlKHN0eWxlKSk7CiB9CiAKLU5v
ZGU6Okluc2VydGlvbk5vdGlmaWNhdGlvblJlcXVlc3QgU1ZHU1ZHRWxlbWVudDo6aW5zZXJ0ZWRJ
bnRvKENvbnRhaW5lck5vZGUmIHJvb3RQYXJlbnQpCitOb2RlOjpJbnNlcnRlZEludG9SZXN1bHQg
U1ZHU1ZHRWxlbWVudDo6aW5zZXJ0ZWRJbnRvKEluc2VydGlvblR5cGUgaW5zZXJ0aW9uVHlwZSwg
Q29udGFpbmVyTm9kZSYgcGFyZW50T2ZJbnNlcnRlZFRyZWUpCiB7Ci0gICAgaWYgKHJvb3RQYXJl
bnQuaXNDb25uZWN0ZWQoKSkgeworICAgIGlmIChpbnNlcnRpb25UeXBlLmNvbm5lY3RlZFRvRG9j
dW1lbnQpIHsKICAgICAgICAgZG9jdW1lbnQoKS5hY2Nlc3NTVkdFeHRlbnNpb25zKCkuYWRkVGlt
ZUNvbnRhaW5lcih0aGlzKTsKICAgICAgICAgaWYgKCFkb2N1bWVudCgpLmFjY2Vzc1NWR0V4dGVu
c2lvbnMoKS5hcmVBbmltYXRpb25zUGF1c2VkKCkpCiAgICAgICAgICAgICB1bnBhdXNlQW5pbWF0
aW9ucygpOwpAQCAtNDgwLDcgKzQ4MCw3IEBAIE5vZGU6Okluc2VydGlvbk5vdGlmaWNhdGlvblJl
cXVlc3QgU1ZHU1YKICAgICAgICAgaWYgKCFkb2N1bWVudCgpLnBhcnNpbmcoKSAmJiAhZG9jdW1l
bnQoKS5wcm9jZXNzaW5nTG9hZEV2ZW50KCkgJiYgZG9jdW1lbnQoKS5sb2FkRXZlbnRGaW5pc2hl
ZCgpICYmICFtX3RpbWVDb250YWluZXItPmlzU3RhcnRlZCgpKQogICAgICAgICAgICAgbV90aW1l
Q29udGFpbmVyLT5iZWdpbigpOwogICAgIH0KLSAgICByZXR1cm4gU1ZHR3JhcGhpY3NFbGVtZW50
OjppbnNlcnRlZEludG8ocm9vdFBhcmVudCk7CisgICAgcmV0dXJuIFNWR0dyYXBoaWNzRWxlbWVu
dDo6aW5zZXJ0ZWRJbnRvKGluc2VydGlvblR5cGUsIHBhcmVudE9mSW5zZXJ0ZWRUcmVlKTsKIH0K
IAogdm9pZCBTVkdTVkdFbGVtZW50OjpyZW1vdmVkRnJvbShDb250YWluZXJOb2RlJiByb290UGFy
ZW50KQpJbmRleDogU291cmNlL1dlYkNvcmUvc3ZnL1NWR1NWR0VsZW1lbnQuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHU1ZHRWxlbWVudC5oCShyZXZpc2lvbiAyMjM0NzUp
CisrKyBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHU1ZHRWxlbWVudC5oCSh3b3JraW5nIGNvcHkpCkBA
IC0xNDMsNyArMTQzLDcgQEAgcHJpdmF0ZToKICAgICB2b2lkIHBhcnNlQXR0cmlidXRlKGNvbnN0
IFF1YWxpZmllZE5hbWUmLCBjb25zdCBBdG9taWNTdHJpbmcmKSBvdmVycmlkZTsKICAgICBib29s
IHJlbmRlcmVySXNOZWVkZWQoY29uc3QgUmVuZGVyU3R5bGUmKSBvdmVycmlkZTsKICAgICBSZW5k
ZXJQdHI8UmVuZGVyRWxlbWVudD4gY3JlYXRlRWxlbWVudFJlbmRlcmVyKFJlbmRlclN0eWxlJiYs
IGNvbnN0IFJlbmRlclRyZWVQb3NpdGlvbiYpIG92ZXJyaWRlOwotICAgIEluc2VydGlvbk5vdGlm
aWNhdGlvblJlcXVlc3QgaW5zZXJ0ZWRJbnRvKENvbnRhaW5lck5vZGUmKSBvdmVycmlkZTsKKyAg
ICBJbnNlcnRlZEludG9SZXN1bHQgaW5zZXJ0ZWRJbnRvKEluc2VydGlvblR5cGUsIENvbnRhaW5l
ck5vZGUmKSBvdmVycmlkZTsKICAgICB2b2lkIHJlbW92ZWRGcm9tKENvbnRhaW5lck5vZGUmKSBv
dmVycmlkZTsKICAgICB2b2lkIHN2Z0F0dHJpYnV0ZUNoYW5nZWQoY29uc3QgUXVhbGlmaWVkTmFt
ZSYpIG92ZXJyaWRlOwogICAgIGJvb2wgc2VsZkhhc1JlbGF0aXZlTGVuZ3RocygpIGNvbnN0IG92
ZXJyaWRlOwpJbmRleDogU291cmNlL1dlYkNvcmUvc3ZnL1NWR1NjcmlwdEVsZW1lbnQuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdTY3JpcHRFbGVtZW50LmNwcAkocmV2
aXNpb24gMjIzNDc1KQorKysgU291cmNlL1dlYkNvcmUvc3ZnL1NWR1NjcmlwdEVsZW1lbnQuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC03MSwxNyArNzEsMTcgQEAgdm9pZCBTVkdTY3JpcHRFbGVtZW50
OjpzdmdBdHRyaWJ1dGVDaGFuZwogICAgIFNWR0VsZW1lbnQ6OnN2Z0F0dHJpYnV0ZUNoYW5nZWQo
YXR0ck5hbWUpOwogfQogCi1Ob2RlOjpJbnNlcnRpb25Ob3RpZmljYXRpb25SZXF1ZXN0IFNWR1Nj
cmlwdEVsZW1lbnQ6Omluc2VydGVkSW50byhDb250YWluZXJOb2RlJiByb290UGFyZW50KQorTm9k
ZTo6SW5zZXJ0ZWRJbnRvUmVzdWx0IFNWR1NjcmlwdEVsZW1lbnQ6Omluc2VydGVkSW50byhJbnNl
cnRpb25UeXBlIGluc2VydGlvblR5cGUsIENvbnRhaW5lck5vZGUmIHBhcmVudE9mSW5zZXJ0ZWRU
cmVlKQogewotICAgIFNWR0VsZW1lbnQ6Omluc2VydGVkSW50byhyb290UGFyZW50KTsKLSAgICBp
ZiAocm9vdFBhcmVudC5pc0Nvbm5lY3RlZCgpKQorICAgIFNWR0VsZW1lbnQ6Omluc2VydGVkSW50
byhpbnNlcnRpb25UeXBlLCBwYXJlbnRPZkluc2VydGVkVHJlZSk7CisgICAgaWYgKGluc2VydGlv
blR5cGUuY29ubmVjdGVkVG9Eb2N1bWVudCkKICAgICAgICAgU1ZHRXh0ZXJuYWxSZXNvdXJjZXNS
ZXF1aXJlZDo6aW5zZXJ0ZWRJbnRvRG9jdW1lbnQodGhpcyk7Ci0gICAgcmV0dXJuIHNob3VsZENh
bGxGaW5pc2hlZEluc2VydGluZ1N1YnRyZWUocm9vdFBhcmVudCkgPyBJbnNlcnRpb25TaG91bGRD
YWxsRmluaXNoZWRJbnNlcnRpbmdTdWJ0cmVlIDogSW5zZXJ0aW9uRG9uZTsKKyAgICByZXR1cm4g
U2NyaXB0RWxlbWVudDo6aW5zZXJ0ZWRJbnRvKGluc2VydGlvblR5cGUsIHBhcmVudE9mSW5zZXJ0
ZWRUcmVlKTsKIH0KIAotdm9pZCBTVkdTY3JpcHRFbGVtZW50OjpmaW5pc2hlZEluc2VydGluZ1N1
YnRyZWUoKQordm9pZCBTVkdTY3JpcHRFbGVtZW50OjpkaWRGaW5pc2hJbnNlcnRpbmdOb2RlKCkK
IHsKLSAgICBTY3JpcHRFbGVtZW50OjpmaW5pc2hlZEluc2VydGluZ1N1YnRyZWUoKTsKKyAgICBT
Y3JpcHRFbGVtZW50OjpkaWRGaW5pc2hJbnNlcnRpbmdOb2RlKCk7CiB9CiAKIHZvaWQgU1ZHU2Ny
aXB0RWxlbWVudDo6Y2hpbGRyZW5DaGFuZ2VkKGNvbnN0IENoaWxkQ2hhbmdlJiBjaGFuZ2UpCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHU2NyaXB0RWxlbWVudC5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdTY3JpcHRFbGVtZW50LmgJKHJldmlzaW9uIDIyMzQ3NSkK
KysrIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdTY3JpcHRFbGVtZW50LmgJKHdvcmtpbmcgY29weSkK
QEAgLTQxLDggKzQxLDggQEAgcHJpdmF0ZToKICAgICBTVkdTY3JpcHRFbGVtZW50KGNvbnN0IFF1
YWxpZmllZE5hbWUmLCBEb2N1bWVudCYsIGJvb2wgd2FzSW5zZXJ0ZWRCeVBhcnNlciwgYm9vbCBh
bHJlYWR5U3RhcnRlZCk7CiAKICAgICB2b2lkIHBhcnNlQXR0cmlidXRlKGNvbnN0IFF1YWxpZmll
ZE5hbWUmLCBjb25zdCBBdG9taWNTdHJpbmcmKSBmaW5hbDsKLSAgICBJbnNlcnRpb25Ob3RpZmlj
YXRpb25SZXF1ZXN0IGluc2VydGVkSW50byhDb250YWluZXJOb2RlJikgZmluYWw7Ci0gICAgdm9p
ZCBmaW5pc2hlZEluc2VydGluZ1N1YnRyZWUoKSBmaW5hbDsKKyAgICBJbnNlcnRlZEludG9SZXN1
bHQgaW5zZXJ0ZWRJbnRvKEluc2VydGlvblR5cGUsIENvbnRhaW5lck5vZGUmKSBmaW5hbDsKKyAg
ICB2b2lkIGRpZEZpbmlzaEluc2VydGluZ05vZGUoKSBmaW5hbDsKICAgICB2b2lkIGNoaWxkcmVu
Q2hhbmdlZChjb25zdCBDaGlsZENoYW5nZSYpIGZpbmFsOwogCiAgICAgdm9pZCBzdmdBdHRyaWJ1
dGVDaGFuZ2VkKGNvbnN0IFF1YWxpZmllZE5hbWUmKSBmaW5hbDsKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL3N2Zy9TVkdTdHlsZUVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L3N2Zy9TVkdTdHlsZUVsZW1lbnQuY3BwCShyZXZpc2lvbiAyMjM0NzUpCisrKyBTb3VyY2UvV2Vi
Q29yZS9zdmcvU1ZHU3R5bGVFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTEzLDExICsx
MTMsMTAgQEAgdm9pZCBTVkdTdHlsZUVsZW1lbnQ6OmZpbmlzaFBhcnNpbmdDaGlsZAogICAgIFNW
R0VsZW1lbnQ6OmZpbmlzaFBhcnNpbmdDaGlsZHJlbigpOwogfQogCi1Ob2RlOjpJbnNlcnRpb25O
b3RpZmljYXRpb25SZXF1ZXN0IFNWR1N0eWxlRWxlbWVudDo6aW5zZXJ0ZWRJbnRvKENvbnRhaW5l
ck5vZGUmIHJvb3RQYXJlbnQpCitOb2RlOjpJbnNlcnRlZEludG9SZXN1bHQgU1ZHU3R5bGVFbGVt
ZW50OjppbnNlcnRlZEludG8oSW5zZXJ0aW9uVHlwZSBpbnNlcnRpb25UeXBlLCBDb250YWluZXJO
b2RlJiBwYXJlbnRPZkluc2VydGVkVHJlZSkKIHsKLSAgICBib29sIHdhc0luRG9jdW1lbnQgPSBp
c0Nvbm5lY3RlZCgpOwotICAgIGF1dG8gcmVzdWx0ID0gU1ZHRWxlbWVudDo6aW5zZXJ0ZWRJbnRv
KHJvb3RQYXJlbnQpOwotICAgIGlmIChyb290UGFyZW50LmlzQ29ubmVjdGVkKCkgJiYgIXdhc0lu
RG9jdW1lbnQpCisgICAgYXV0byByZXN1bHQgPSBTVkdFbGVtZW50OjppbnNlcnRlZEludG8oaW5z
ZXJ0aW9uVHlwZSwgcGFyZW50T2ZJbnNlcnRlZFRyZWUpOworICAgIGlmIChpbnNlcnRpb25UeXBl
LmNvbm5lY3RlZFRvRG9jdW1lbnQpCiAgICAgICAgIG1fc3R5bGVTaGVldE93bmVyLmluc2VydGVk
SW50b0RvY3VtZW50KCp0aGlzKTsKICAgICByZXR1cm4gcmVzdWx0OwogfQpJbmRleDogU291cmNl
L1dlYkNvcmUvc3ZnL1NWR1N0eWxlRWxlbWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL3N2Zy9TVkdTdHlsZUVsZW1lbnQuaAkocmV2aXNpb24gMjIzNDc1KQorKysgU291cmNlL1dl
YkNvcmUvc3ZnL1NWR1N0eWxlRWxlbWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC00Niw3ICs0Niw3
IEBAIHByaXZhdGU6CiAgICAgU1ZHU3R5bGVFbGVtZW50KGNvbnN0IFF1YWxpZmllZE5hbWUmLCBE
b2N1bWVudCYsIGJvb2wgY3JlYXRlZEJ5UGFyc2VyKTsKIAogICAgIHZvaWQgcGFyc2VBdHRyaWJ1
dGUoY29uc3QgUXVhbGlmaWVkTmFtZSYsIGNvbnN0IEF0b21pY1N0cmluZyYpIGZpbmFsOwotICAg
IEluc2VydGlvbk5vdGlmaWNhdGlvblJlcXVlc3QgaW5zZXJ0ZWRJbnRvKENvbnRhaW5lck5vZGUm
KSBmaW5hbDsKKyAgICBJbnNlcnRlZEludG9SZXN1bHQgaW5zZXJ0ZWRJbnRvKEluc2VydGlvblR5
cGUsIENvbnRhaW5lck5vZGUmKSBmaW5hbDsKICAgICB2b2lkIHJlbW92ZWRGcm9tKENvbnRhaW5l
ck5vZGUmKSBmaW5hbDsKICAgICB2b2lkIGNoaWxkcmVuQ2hhbmdlZChjb25zdCBDaGlsZENoYW5n
ZSYpIGZpbmFsOwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHVFJlZkVsZW1lbnQuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdUUmVmRWxlbWVudC5jcHAJKHJl
dmlzaW9uIDIyMzQ3NSkKKysrIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdUUmVmRWxlbWVudC5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTI1NCwxNSArMjU0LDE1IEBAIHZvaWQgU1ZHVFJlZkVsZW1lbnQ6
OmJ1aWxkUGVuZGluZ1Jlc291cmMKICAgICB1cGRhdGVSZWZlcmVuY2VkVGV4dCh0YXJnZXQuZ2V0
KCkpOwogfQogCi1Ob2RlOjpJbnNlcnRpb25Ob3RpZmljYXRpb25SZXF1ZXN0IFNWR1RSZWZFbGVt
ZW50OjppbnNlcnRlZEludG8oQ29udGFpbmVyTm9kZSYgcm9vdFBhcmVudCkKK05vZGU6Okluc2Vy
dGVkSW50b1Jlc3VsdCBTVkdUUmVmRWxlbWVudDo6aW5zZXJ0ZWRJbnRvKEluc2VydGlvblR5cGUg
aW5zZXJ0aW9uVHlwZSwgQ29udGFpbmVyTm9kZSYgcGFyZW50T2ZJbnNlcnRlZFRyZWUpCiB7Ci0g
ICAgU1ZHRWxlbWVudDo6aW5zZXJ0ZWRJbnRvKHJvb3RQYXJlbnQpOwotICAgIGlmIChyb290UGFy
ZW50LmlzQ29ubmVjdGVkKCkpCi0gICAgICAgIHJldHVybiBJbnNlcnRpb25TaG91bGRDYWxsRmlu
aXNoZWRJbnNlcnRpbmdTdWJ0cmVlOwotICAgIHJldHVybiBJbnNlcnRpb25Eb25lOworICAgIFNW
R0VsZW1lbnQ6Omluc2VydGVkSW50byhpbnNlcnRpb25UeXBlLCBwYXJlbnRPZkluc2VydGVkVHJl
ZSk7CisgICAgaWYgKGluc2VydGlvblR5cGUuY29ubmVjdGVkVG9Eb2N1bWVudCkKKyAgICAgICAg
cmV0dXJuIEluc2VydGVkSW50b1Jlc3VsdDo6TmVlZHNQb3N0SW5zZXJ0aW9uQ2FsbGJhY2s7Cisg
ICAgcmV0dXJuIEluc2VydGVkSW50b1Jlc3VsdDo6RG9uZTsKIH0KIAotdm9pZCBTVkdUUmVmRWxl
bWVudDo6ZmluaXNoZWRJbnNlcnRpbmdTdWJ0cmVlKCkKK3ZvaWQgU1ZHVFJlZkVsZW1lbnQ6OmRp
ZEZpbmlzaEluc2VydGluZ05vZGUoKQogewogICAgIGJ1aWxkUGVuZGluZ1Jlc291cmNlKCk7CiB9
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHVFJlZkVsZW1lbnQuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHVFJlZkVsZW1lbnQuaAkocmV2aXNpb24gMjIzNDc1KQor
KysgU291cmNlL1dlYkNvcmUvc3ZnL1NWR1RSZWZFbGVtZW50LmgJKHdvcmtpbmcgY29weSkKQEAg
LTQ0LDkgKzQ0LDkgQEAgcHJpdmF0ZToKICAgICBib29sIGNoaWxkU2hvdWxkQ3JlYXRlUmVuZGVy
ZXIoY29uc3QgTm9kZSYpIGNvbnN0IG92ZXJyaWRlOwogICAgIGJvb2wgcmVuZGVyZXJJc05lZWRl
ZChjb25zdCBSZW5kZXJTdHlsZSYpIG92ZXJyaWRlOwogCi0gICAgSW5zZXJ0aW9uTm90aWZpY2F0
aW9uUmVxdWVzdCBpbnNlcnRlZEludG8oQ29udGFpbmVyTm9kZSYpIG92ZXJyaWRlOworICAgIElu
c2VydGVkSW50b1Jlc3VsdCBpbnNlcnRlZEludG8oSW5zZXJ0aW9uVHlwZSwgQ29udGFpbmVyTm9k
ZSYpIG92ZXJyaWRlOwogICAgIHZvaWQgcmVtb3ZlZEZyb20oQ29udGFpbmVyTm9kZSYpIG92ZXJy
aWRlOwotICAgIHZvaWQgZmluaXNoZWRJbnNlcnRpbmdTdWJ0cmVlKCkgb3ZlcnJpZGU7CisgICAg
dm9pZCBkaWRGaW5pc2hJbnNlcnRpbmdOb2RlKCkgb3ZlcnJpZGU7CiAKICAgICB2b2lkIGNsZWFy
VGFyZ2V0KCkgb3ZlcnJpZGU7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdUZXh0UGF0
aEVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdUZXh0UGF0
aEVsZW1lbnQuY3BwCShyZXZpc2lvbiAyMjM0NzUpCisrKyBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZH
VGV4dFBhdGhFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTczLDEzICsxNzMsMTMgQEAg
dm9pZCBTVkdUZXh0UGF0aEVsZW1lbnQ6OmJ1aWxkUGVuZGluZ1JlcwogICAgIH0KIH0KIAotTm9k
ZTo6SW5zZXJ0aW9uTm90aWZpY2F0aW9uUmVxdWVzdCBTVkdUZXh0UGF0aEVsZW1lbnQ6Omluc2Vy
dGVkSW50byhDb250YWluZXJOb2RlJiByb290UGFyZW50KQorTm9kZTo6SW5zZXJ0ZWRJbnRvUmVz
dWx0IFNWR1RleHRQYXRoRWxlbWVudDo6aW5zZXJ0ZWRJbnRvKEluc2VydGlvblR5cGUgaW5zZXJ0
aW9uVHlwZSwgQ29udGFpbmVyTm9kZSYgcGFyZW50T2ZJbnNlcnRlZFRyZWUpCiB7Ci0gICAgU1ZH
VGV4dENvbnRlbnRFbGVtZW50OjppbnNlcnRlZEludG8ocm9vdFBhcmVudCk7Ci0gICAgcmV0dXJu
IEluc2VydGlvblNob3VsZENhbGxGaW5pc2hlZEluc2VydGluZ1N1YnRyZWU7CisgICAgU1ZHVGV4
dENvbnRlbnRFbGVtZW50OjppbnNlcnRlZEludG8oaW5zZXJ0aW9uVHlwZSwgcGFyZW50T2ZJbnNl
cnRlZFRyZWUpOworICAgIHJldHVybiBJbnNlcnRlZEludG9SZXN1bHQ6Ok5lZWRzUG9zdEluc2Vy
dGlvbkNhbGxiYWNrOwogfQogCi12b2lkIFNWR1RleHRQYXRoRWxlbWVudDo6ZmluaXNoZWRJbnNl
cnRpbmdTdWJ0cmVlKCkKK3ZvaWQgU1ZHVGV4dFBhdGhFbGVtZW50OjpkaWRGaW5pc2hJbnNlcnRp
bmdOb2RlKCkKIHsKICAgICBidWlsZFBlbmRpbmdSZXNvdXJjZSgpOwogfQpJbmRleDogU291cmNl
L1dlYkNvcmUvc3ZnL1NWR1RleHRQYXRoRWxlbWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL3N2Zy9TVkdUZXh0UGF0aEVsZW1lbnQuaAkocmV2aXNpb24gMjIzNDc1KQorKysgU291
cmNlL1dlYkNvcmUvc3ZnL1NWR1RleHRQYXRoRWxlbWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC0x
MTEsNyArMTExLDcgQEAgcHVibGljOgogICAgIHN0YXRpYyBSZWY8U1ZHVGV4dFBhdGhFbGVtZW50
PiBjcmVhdGUoY29uc3QgUXVhbGlmaWVkTmFtZSYsIERvY3VtZW50Jik7CiAKIHByb3RlY3RlZDoK
LSAgICB2b2lkIGZpbmlzaGVkSW5zZXJ0aW5nU3VidHJlZSgpIG92ZXJyaWRlOworICAgIHZvaWQg
ZGlkRmluaXNoSW5zZXJ0aW5nTm9kZSgpIG92ZXJyaWRlOwogCiBwcml2YXRlOgogICAgIFNWR1Rl
eHRQYXRoRWxlbWVudChjb25zdCBRdWFsaWZpZWROYW1lJiwgRG9jdW1lbnQmKTsKQEAgLTEyMSw3
ICsxMjEsNyBAQCBwcml2YXRlOgogICAgIHZvaWQgY2xlYXJSZXNvdXJjZVJlZmVyZW5jZXMoKTsK
IAogICAgIHZvaWQgYnVpbGRQZW5kaW5nUmVzb3VyY2UoKSBvdmVycmlkZTsKLSAgICBJbnNlcnRp
b25Ob3RpZmljYXRpb25SZXF1ZXN0IGluc2VydGVkSW50byhDb250YWluZXJOb2RlJikgb3ZlcnJp
ZGU7CisgICAgSW5zZXJ0ZWRJbnRvUmVzdWx0IGluc2VydGVkSW50byhJbnNlcnRpb25UeXBlLCBD
b250YWluZXJOb2RlJikgb3ZlcnJpZGU7CiAgICAgdm9pZCByZW1vdmVkRnJvbShDb250YWluZXJO
b2RlJikgb3ZlcnJpZGU7CiAKICAgICBzdGF0aWMgYm9vbCBpc1N1cHBvcnRlZEF0dHJpYnV0ZShj
b25zdCBRdWFsaWZpZWROYW1lJik7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHVGl0bGVF
bGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHVGl0bGVFbGVt
ZW50LmNwcAkocmV2aXNpb24gMjIzNDc1KQorKysgU291cmNlL1dlYkNvcmUvc3ZnL1NWR1RpdGxl
RWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM4LDExICszOCwxMSBAQCBSZWY8U1ZHVGl0
bGVFbGVtZW50PiBTVkdUaXRsZUVsZW1lbnQ6OmNyCiAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcg
U1ZHVGl0bGVFbGVtZW50KHRhZ05hbWUsIGRvY3VtZW50KSk7CiB9CiAKLU5vZGU6Okluc2VydGlv
bk5vdGlmaWNhdGlvblJlcXVlc3QgU1ZHVGl0bGVFbGVtZW50OjppbnNlcnRlZEludG8oQ29udGFp
bmVyTm9kZSYgaW5zZXJ0aW9uUG9pbnQpCitOb2RlOjpJbnNlcnRlZEludG9SZXN1bHQgU1ZHVGl0
bGVFbGVtZW50OjppbnNlcnRlZEludG8oSW5zZXJ0aW9uVHlwZSBpbnNlcnRpb25UeXBlLCBDb250
YWluZXJOb2RlJiBwYXJlbnRPZkluc2VydGVkVHJlZSkKIHsKLSAgICBTVkdFbGVtZW50OjppbnNl
cnRlZEludG8oaW5zZXJ0aW9uUG9pbnQpOworICAgIFNWR0VsZW1lbnQ6Omluc2VydGVkSW50byhp
bnNlcnRpb25UeXBlLCBwYXJlbnRPZkluc2VydGVkVHJlZSk7CiAgICAgZG9jdW1lbnQoKS50aXRs
ZUVsZW1lbnRBZGRlZCgqdGhpcyk7Ci0gICAgcmV0dXJuIEluc2VydGlvbkRvbmU7CisgICAgcmV0
dXJuIEluc2VydGVkSW50b1Jlc3VsdDo6RG9uZTsKIH0KIAogdm9pZCBTVkdUaXRsZUVsZW1lbnQ6
OnJlbW92ZWRGcm9tKENvbnRhaW5lck5vZGUmIGluc2VydGlvblBvaW50KQpJbmRleDogU291cmNl
L1dlYkNvcmUvc3ZnL1NWR1RpdGxlRWxlbWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL3N2Zy9TVkdUaXRsZUVsZW1lbnQuaAkocmV2aXNpb24gMjIzNDc1KQorKysgU291cmNlL1dl
YkNvcmUvc3ZnL1NWR1RpdGxlRWxlbWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMiw3ICszMiw3
IEBAIHB1YmxpYzoKIHByaXZhdGU6CiAgICAgU1ZHVGl0bGVFbGVtZW50KGNvbnN0IFF1YWxpZmll
ZE5hbWUmLCBEb2N1bWVudCYpOwogCi0gICAgSW5zZXJ0aW9uTm90aWZpY2F0aW9uUmVxdWVzdCBp
bnNlcnRlZEludG8oQ29udGFpbmVyTm9kZSYpIGZpbmFsOworICAgIEluc2VydGVkSW50b1Jlc3Vs
dCBpbnNlcnRlZEludG8oSW5zZXJ0aW9uVHlwZSwgQ29udGFpbmVyTm9kZSYpIGZpbmFsOwogICAg
IHZvaWQgcmVtb3ZlZEZyb20oQ29udGFpbmVyTm9kZSYpIGZpbmFsOwogICAgIHZvaWQgY2hpbGRy
ZW5DaGFuZ2VkKGNvbnN0IENoaWxkQ2hhbmdlJikgZmluYWw7CiAKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL3N2Zy9TVkdVc2VFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9z
dmcvU1ZHVXNlRWxlbWVudC5jcHAJKHJldmlzaW9uIDIyMzQ3NSkKKysrIFNvdXJjZS9XZWJDb3Jl
L3N2Zy9TVkdVc2VFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTAzLDE1ICsxMDMsMTUg
QEAgdm9pZCBTVkdVc2VFbGVtZW50OjpwYXJzZUF0dHJpYnV0ZShjb25zdAogICAgIFNWR1VSSVJl
ZmVyZW5jZTo6cGFyc2VBdHRyaWJ1dGUobmFtZSwgdmFsdWUpOwogfQogCi1Ob2RlOjpJbnNlcnRp
b25Ob3RpZmljYXRpb25SZXF1ZXN0IFNWR1VzZUVsZW1lbnQ6Omluc2VydGVkSW50byhDb250YWlu
ZXJOb2RlJiByb290UGFyZW50KQorTm9kZTo6SW5zZXJ0ZWRJbnRvUmVzdWx0IFNWR1VzZUVsZW1l
bnQ6Omluc2VydGVkSW50byhJbnNlcnRpb25UeXBlIGluc2VydGlvblR5cGUsIENvbnRhaW5lck5v
ZGUmIHBhcmVudE9mSW5zZXJ0ZWRUcmVlKQogewotICAgIFNWR0dyYXBoaWNzRWxlbWVudDo6aW5z
ZXJ0ZWRJbnRvKHJvb3RQYXJlbnQpOwotICAgIGlmIChpc0Nvbm5lY3RlZCgpKSB7CisgICAgU1ZH
R3JhcGhpY3NFbGVtZW50OjppbnNlcnRlZEludG8oaW5zZXJ0aW9uVHlwZSwgcGFyZW50T2ZJbnNl
cnRlZFRyZWUpOworICAgIGlmIChpbnNlcnRpb25UeXBlLmNvbm5lY3RlZFRvRG9jdW1lbnQpIHsK
ICAgICAgICAgU1ZHRXh0ZXJuYWxSZXNvdXJjZXNSZXF1aXJlZDo6aW5zZXJ0ZWRJbnRvRG9jdW1l
bnQodGhpcyk7CiAgICAgICAgIGludmFsaWRhdGVTaGFkb3dUcmVlKCk7CiAgICAgICAgIHVwZGF0
ZUV4dGVybmFsRG9jdW1lbnQoKTsKICAgICB9Ci0gICAgcmV0dXJuIEluc2VydGlvbkRvbmU7Cisg
ICAgcmV0dXJuIEluc2VydGVkSW50b1Jlc3VsdDo6RG9uZTsKIH0KIAogdm9pZCBTVkdVc2VFbGVt
ZW50OjpyZW1vdmVkRnJvbShDb250YWluZXJOb2RlJiByb290UGFyZW50KQpJbmRleDogU291cmNl
L1dlYkNvcmUvc3ZnL1NWR1VzZUVsZW1lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9zdmcvU1ZHVXNlRWxlbWVudC5oCShyZXZpc2lvbiAyMjM0NzUpCisrKyBTb3VyY2UvV2ViQ29y
ZS9zdmcvU1ZHVXNlRWxlbWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC01Nyw3ICs1Nyw3IEBAIHBy
aXZhdGU6CiAgICAgU1ZHVXNlRWxlbWVudChjb25zdCBRdWFsaWZpZWROYW1lJiwgRG9jdW1lbnQm
KTsKIAogICAgIGJvb2wgaXNWYWxpZCgpIGNvbnN0IG92ZXJyaWRlOwotICAgIEluc2VydGlvbk5v
dGlmaWNhdGlvblJlcXVlc3QgaW5zZXJ0ZWRJbnRvKENvbnRhaW5lck5vZGUmKSBvdmVycmlkZTsK
KyAgICBJbnNlcnRlZEludG9SZXN1bHQgaW5zZXJ0ZWRJbnRvKEluc2VydGlvblR5cGUsIENvbnRh
aW5lck5vZGUmKSBvdmVycmlkZTsKICAgICB2b2lkIHJlbW92ZWRGcm9tKENvbnRhaW5lck5vZGUm
KSBvdmVycmlkZTsKICAgICB2b2lkIGJ1aWxkUGVuZGluZ1Jlc291cmNlKCkgb3ZlcnJpZGU7CiAg
ICAgdm9pZCBwYXJzZUF0dHJpYnV0ZShjb25zdCBRdWFsaWZpZWROYW1lJiwgY29uc3QgQXRvbWlj
U3RyaW5nJikgb3ZlcnJpZGU7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdmcvYW5pbWF0aW9uL1NW
R1NNSUxFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcvYW5pbWF0
aW9uL1NWR1NNSUxFbGVtZW50LmNwcAkocmV2aXNpb24gMjIzNDc1KQorKysgU291cmNlL1dlYkNv
cmUvc3ZnL2FuaW1hdGlvbi9TVkdTTUlMRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI1
MiwxMSArMjUyLDExIEBAIHZvaWQgU1ZHU01JTEVsZW1lbnQ6OnJlc2V0KCkKICAgICByZXNvbHZl
Rmlyc3RJbnRlcnZhbCgpOwogfQogCi1Ob2RlOjpJbnNlcnRpb25Ob3RpZmljYXRpb25SZXF1ZXN0
IFNWR1NNSUxFbGVtZW50OjppbnNlcnRlZEludG8oQ29udGFpbmVyTm9kZSYgcm9vdFBhcmVudCkK
K05vZGU6Okluc2VydGVkSW50b1Jlc3VsdCBTVkdTTUlMRWxlbWVudDo6aW5zZXJ0ZWRJbnRvKElu
c2VydGlvblR5cGUgaW5zZXJ0aW9uVHlwZSwgQ29udGFpbmVyTm9kZSYgcGFyZW50T2ZJbnNlcnRl
ZFRyZWUpCiB7Ci0gICAgU1ZHRWxlbWVudDo6aW5zZXJ0ZWRJbnRvKHJvb3RQYXJlbnQpOwotICAg
IGlmICghcm9vdFBhcmVudC5pc0Nvbm5lY3RlZCgpKQotICAgICAgICByZXR1cm4gSW5zZXJ0aW9u
RG9uZTsKKyAgICBTVkdFbGVtZW50OjppbnNlcnRlZEludG8oaW5zZXJ0aW9uVHlwZSwgcGFyZW50
T2ZJbnNlcnRlZFRyZWUpOworICAgIGlmICghaW5zZXJ0aW9uVHlwZS5jb25uZWN0ZWRUb0RvY3Vt
ZW50KQorICAgICAgICByZXR1cm4gSW5zZXJ0ZWRJbnRvUmVzdWx0OjpEb25lOwogCiAgICAgLy8g
VmVyaWZ5IHdlIGFyZSBub3QgaW4gPHVzZT4gaW5zdGFuY2UgdHJlZS4KICAgICBBU1NFUlQoIWlz
SW5TaGFkb3dUcmVlKCkpOwpAQCAtMjY1LDcgKzI2NSw3IEBAIE5vZGU6Okluc2VydGlvbk5vdGlm
aWNhdGlvblJlcXVlc3QgU1ZHU00KIAogICAgIFNWR1NWR0VsZW1lbnQqIG93bmVyID0gb3duZXJT
VkdFbGVtZW50KCk7CiAgICAgaWYgKCFvd25lcikKLSAgICAgICAgcmV0dXJuIEluc2VydGlvbkRv
bmU7CisgICAgICAgIHJldHVybiBJbnNlcnRlZEludG9SZXN1bHQ6OkRvbmU7CiAKICAgICBtX3Rp
bWVDb250YWluZXIgPSAmb3duZXItPnRpbWVDb250YWluZXIoKTsKICAgICBtX3RpbWVDb250YWlu
ZXItPnNldERvY3VtZW50T3JkZXJJbmRleGVzRGlydHkoKTsKQEAgLTI4MCwxMCArMjgwLDEwIEBA
IE5vZGU6Okluc2VydGlvbk5vdGlmaWNhdGlvblJlcXVlc3QgU1ZHU00KICAgICBpZiAobV90aW1l
Q29udGFpbmVyKQogICAgICAgICBtX3RpbWVDb250YWluZXItPm5vdGlmeUludGVydmFsc0NoYW5n
ZWQoKTsKIAotICAgIHJldHVybiBJbnNlcnRpb25TaG91bGRDYWxsRmluaXNoZWRJbnNlcnRpbmdT
dWJ0cmVlOworICAgIHJldHVybiBJbnNlcnRlZEludG9SZXN1bHQ6Ok5lZWRzUG9zdEluc2VydGlv
bkNhbGxiYWNrOwogfQogCi12b2lkIFNWR1NNSUxFbGVtZW50OjpmaW5pc2hlZEluc2VydGluZ1N1
YnRyZWUoKQordm9pZCBTVkdTTUlMRWxlbWVudDo6ZGlkRmluaXNoSW5zZXJ0aW5nTm9kZSgpCiB7
CiAgICAgYnVpbGRQZW5kaW5nUmVzb3VyY2UoKTsKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N2
Zy9hbmltYXRpb24vU1ZHU01JTEVsZW1lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9zdmcvYW5pbWF0aW9uL1NWR1NNSUxFbGVtZW50LmgJKHJldmlzaW9uIDIyMzQ3NSkKKysrIFNv
dXJjZS9XZWJDb3JlL3N2Zy9hbmltYXRpb24vU1ZHU01JTEVsZW1lbnQuaAkod29ya2luZyBjb3B5
KQpAQCAtNDcsNyArNDcsNyBAQCBwdWJsaWM6CiAKICAgICB2b2lkIHBhcnNlQXR0cmlidXRlKGNv
bnN0IFF1YWxpZmllZE5hbWUmLCBjb25zdCBBdG9taWNTdHJpbmcmKSBvdmVycmlkZTsKICAgICB2
b2lkIHN2Z0F0dHJpYnV0ZUNoYW5nZWQoY29uc3QgUXVhbGlmaWVkTmFtZSYpIG92ZXJyaWRlOwot
ICAgIEluc2VydGlvbk5vdGlmaWNhdGlvblJlcXVlc3QgaW5zZXJ0ZWRJbnRvKENvbnRhaW5lck5v
ZGUmKSBvdmVycmlkZTsKKyAgICBJbnNlcnRlZEludG9SZXN1bHQgaW5zZXJ0ZWRJbnRvKEluc2Vy
dGlvblR5cGUsIENvbnRhaW5lck5vZGUmKSBvdmVycmlkZTsKICAgICB2b2lkIHJlbW92ZWRGcm9t
KENvbnRhaW5lck5vZGUmKSBvdmVycmlkZTsKICAgICAKICAgICB2aXJ0dWFsIGJvb2wgaGFzVmFs
aWRBdHRyaWJ1dGVUeXBlKCkgPSAwOwpAQCAtMTE4LDcgKzExOCw3IEBAIHByb3RlY3RlZDoKICAg
ICB2aXJ0dWFsIHZvaWQgc2V0VGFyZ2V0RWxlbWVudChTVkdFbGVtZW50Kik7CiAgICAgdmlydHVh
bCB2b2lkIHNldEF0dHJpYnV0ZU5hbWUoY29uc3QgUXVhbGlmaWVkTmFtZSYpOwogCi0gICAgdm9p
ZCBmaW5pc2hlZEluc2VydGluZ1N1YnRyZWUoKSBvdmVycmlkZTsKKyAgICB2b2lkIGRpZEZpbmlz
aEluc2VydGluZ05vZGUoKSBvdmVycmlkZTsKIAogcHJpdmF0ZToKICAgICB2b2lkIGJ1aWxkUGVu
ZGluZ1Jlc291cmNlKCkgb3ZlcnJpZGU7Cg==
</data>
<flag name="review"
          id="343754"
          type_id="1"
          status="+"
          setter="koivisto"
    />
          </attachment>
      

    </bug>

</bugzilla>