<?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>237262</bug_id>
          
          <creation_ts>2022-02-27 17:56:55 -0800</creation_ts>
          <short_desc>Adopt the modern Hasher more widely</short_desc>
          <delta_ts>2022-02-28 15:09:57 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebCore Misc.</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Chris Dumez">cdumez</reporter>
          <assigned_to name="Chris Dumez">cdumez</assigned_to>
          <cc>achristensen</cc>
    
    <cc>cgarcia</cc>
    
    <cc>darin</cc>
    
    <cc>esprehn+autocc</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>ggaren</cc>
    
    <cc>japhet</cc>
    
    <cc>kangil.han</cc>
    
    <cc>mmaxfield</cc>
    
    <cc>sam</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1846520</commentid>
    <comment_count>0</comment_count>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2022-02-27 17:56:55 -0800</bug_when>
    <thetext>Adopt the modern Hasher more widely.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1846522</commentid>
    <comment_count>1</comment_count>
      <attachid>453364</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2022-02-27 18:07:49 -0800</bug_when>
    <thetext>Created attachment 453364
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1846544</commentid>
    <comment_count>2</comment_count>
      <attachid>453364</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2022-02-27 22:47:52 -0800</bug_when>
    <thetext>Comment on attachment 453364
Patch

View in context: https://bugs.webkit.org/attachment.cgi?id=453364&amp;action=review

review- because Color’s hashing is wrong.

&gt; Source/WebCore/platform/graphics/Color.h:262
&gt; +    add(hasher, color.m_colorAndFlags);

When the color is out of line, this is wrong. We need to hash the data in the out-of-line color, not the pointer, since two colors with different pointers can have the same value. That’s what the old Color::hash function did, and this needs to do the same.

Also, this should take const Color&amp; since it’s expensive to copy a Color when it’s out-of-line.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1846632</commentid>
    <comment_count>3</comment_count>
      <attachid>453364</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2022-02-28 07:27:50 -0800</bug_when>
    <thetext>Comment on attachment 453364
Patch

View in context: https://bugs.webkit.org/attachment.cgi?id=453364&amp;action=review

&gt;&gt; Source/WebCore/platform/graphics/Color.h:262
&gt;&gt; +    add(hasher, color.m_colorAndFlags);
&gt; 
&gt; When the color is out of line, this is wrong. We need to hash the data in the out-of-line color, not the pointer, since two colors with different pointers can have the same value. That’s what the old Color::hash function did, and this needs to do the same.
&gt; 
&gt; Also, this should take const Color&amp; since it’s expensive to copy a Color when it’s out-of-line.

My bad, I did look at the previous hasher but missed the fact that we could end up with a pointer. I&apos;ll re-introduce the previous hasher behavior.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1846635</commentid>
    <comment_count>4</comment_count>
      <attachid>453392</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2022-02-28 07:40:00 -0800</bug_when>
    <thetext>Created attachment 453392
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1846640</commentid>
    <comment_count>5</comment_count>
      <attachid>453392</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2022-02-28 08:20:57 -0800</bug_when>
    <thetext>Comment on attachment 453392
Patch

View in context: https://bugs.webkit.org/attachment.cgi?id=453392&amp;action=review

Love seeing this.

&gt; Source/WebKit/Platform/IPC/StringReference.cpp:62
&gt; +    return computeHash(a);

This parameter names could be better. string? reference? stringReference?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1846661</commentid>
    <comment_count>6</comment_count>
      <attachid>453397</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2022-02-28 09:24:57 -0800</bug_when>
    <thetext>Created attachment 453397
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1846720</commentid>
    <comment_count>7</comment_count>
    <who name="EWS">ews-feeder</who>
    <bug_when>2022-02-28 12:00:44 -0800</bug_when>
    <thetext>Committed r290610 (247883@main): &lt;https://commits.webkit.org/247883@main&gt;

All reviewed patches have been landed. Closing bug and clearing flags on attachment 453397.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1846721</commentid>
    <comment_count>8</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2022-02-28 12:01:18 -0800</bug_when>
    <thetext>&lt;rdar://problem/89573649&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1846746</commentid>
    <comment_count>9</comment_count>
      <attachid>453397</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2022-02-28 13:28:50 -0800</bug_when>
    <thetext>Comment on attachment 453397
Patch

View in context: https://bugs.webkit.org/attachment.cgi?id=453397&amp;action=review

&gt; Source/WebCore/platform/graphics/Color.h:265
&gt; +    if (color.isOutOfLine())
&gt; +        add(hasher, color.asOutOfLine().unresolvedComponents(), color.colorSpace(), color.flags().toRaw());
&gt; +    else
&gt; +        add(hasher, color.asPackedInline().value, color.flags().toRaw());

Surprised calling toRaw was needed. We should fix the Hasher mechanism so we don’t need that.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1846763</commentid>
    <comment_count>10</comment_count>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2022-02-28 14:02:35 -0800</bug_when>
    <thetext>(In reply to Darin Adler from comment #9)
&gt; Comment on attachment 453397 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=453397&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/platform/graphics/Color.h:265
&gt; &gt; +    if (color.isOutOfLine())
&gt; &gt; +        add(hasher, color.asOutOfLine().unresolvedComponents(), color.colorSpace(), color.flags().toRaw());
&gt; &gt; +    else
&gt; &gt; +        add(hasher, color.asPackedInline().value, color.flags().toRaw());
&gt; 
&gt; Surprised calling toRaw was needed. We should fix the Hasher mechanism so we
&gt; don’t need that.

Oh, I don’t know for sure that it was needed, I copied from the pre-existing hashing function.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1846802</commentid>
    <comment_count>11</comment_count>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2022-02-28 15:09:57 -0800</bug_when>
    <thetext>(In reply to Chris Dumez from comment #10)
&gt; (In reply to Darin Adler from comment #9)
&gt; &gt; Comment on attachment 453397 [details]
&gt; &gt; Patch
&gt; &gt; 
&gt; &gt; View in context:
&gt; &gt; https://bugs.webkit.org/attachment.cgi?id=453397&amp;action=review
&gt; &gt; 
&gt; &gt; &gt; Source/WebCore/platform/graphics/Color.h:265
&gt; &gt; &gt; +    if (color.isOutOfLine())
&gt; &gt; &gt; +        add(hasher, color.asOutOfLine().unresolvedComponents(), color.colorSpace(), color.flags().toRaw());
&gt; &gt; &gt; +    else
&gt; &gt; &gt; +        add(hasher, color.asPackedInline().value, color.flags().toRaw());
&gt; &gt; 
&gt; &gt; Surprised calling toRaw was needed. We should fix the Hasher mechanism so we
&gt; &gt; don’t need that.
&gt; 
&gt; Oh, I don’t know for sure that it was needed, I copied from the pre-existing
&gt; hashing function.

It wasn&apos;t needed. I fixed it in &lt;https://commits.webkit.org/r290616&gt;.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>453364</attachid>
            <date>2022-02-27 18:07:49 -0800</date>
            <delta_ts>2022-02-28 07:39:57 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-237262-20220227180748.patch</filename>
            <type>text/plain</type>
            <size>22596</size>
            <attacher name="Chris Dumez">cdumez</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjkwNTc1CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZDllZDY4MzA0NDE2YjZh
NjljNTAzYjk0YzQ0NzYwNDlmNjBlMDk2NS4uOThlNTc3Njg5ZWUwNjA4OTE5NWQ2OTU2YWFhOWNk
ZjgxMjhjN2UzYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQ3IEBACisyMDIyLTAyLTI3ICBDaHJp
cyBEdW1leiAgPGNkdW1lekBhcHBsZS5jb20+CisKKyAgICAgICAgQWRvcHQgdGhlIG1vZGVybiBI
YXNoZXIgbW9yZSB3aWRlbHkKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTIzNzI2MgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgor
CisgICAgICAgICogZG9tL01lc3NhZ2VQb3J0SWRlbnRpZmllci5oOgorICAgICAgICAoV2ViQ29y
ZTo6YWRkKToKKyAgICAgICAgKFdURjo6TWVzc2FnZVBvcnRJZGVudGlmaWVySGFzaDo6aGFzaCk6
CisgICAgICAgIChXZWJDb3JlOjpNZXNzYWdlUG9ydElkZW50aWZpZXI6Omhhc2ggY29uc3QpOiBE
ZWxldGVkLgorICAgICAgICAqIGhpc3RvcnkvQmFja0ZvcndhcmRJdGVtSWRlbnRpZmllci5oOgor
ICAgICAgICAoV2ViQ29yZTo6YWRkKToKKyAgICAgICAgKFdURjo6QmFja0ZvcndhcmRJdGVtSWRl
bnRpZmllckhhc2g6Omhhc2gpOgorICAgICAgICAoV2ViQ29yZTo6QmFja0ZvcndhcmRJdGVtSWRl
bnRpZmllcjo6aGFzaCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgICogbG9hZGVyL1Jlc291cmNl
Q3J5cHRvZ3JhcGhpY0RpZ2VzdC5oOgorICAgICAgICAoV2ViQ29yZTo6YWRkKToKKyAgICAgICAg
KFdURjo6RGVmYXVsdEhhc2g8V2ViQ29yZTo6UmVzb3VyY2VDcnlwdG9ncmFwaGljRGlnZXN0Pjo6
aGFzaCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3IuaDoKKyAgICAgICAgKFdl
YkNvcmU6OmFkZCk6CisgICAgICAgIChXZWJDb3JlOjpDb2xvcjo6aGFzaCBjb25zdCk6IERlbGV0
ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3JIYXNoLmg6CisgICAgICAgIChX
VEY6OkNvbG9ySGFzaDo6aGFzaCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvRm9udC5j
cHA6CisgICAgICAgIChXZWJDb3JlOjphZGQpOgorICAgICAgICAoV2ViQ29yZTo6Q2hhcmFjdGVy
RmFsbGJhY2tNYXBLZXlIYXNoOjpoYXNoKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9G
b250Q2FjaGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6YWRkKToKKyAgICAgICAgKFdlYkNvcmU6
OkZvbnRQbGF0Zm9ybURhdGFDYWNoZUtleUhhc2g6Omhhc2gpOgorICAgICAgICAoV2ViQ29yZTo6
Rm9udENhc2NhZGVDYWNoZUtleUhhc2g6Omhhc2gpOiBEZWxldGVkLgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL0ZvbnRDYWNoZS5oOgorICAgICAgICAoV2ViQ29yZTo6YWRkKToKKyAgICAg
ICAgKFdlYkNvcmU6OkZvbnRDYXNjYWRlQ2FjaGVLZXlIYXNoOjpoYXNoKToKKyAgICAgICAgKiBw
bGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9Gb250RmFtaWx5U3BlY2lmaWNhdGlvbkNvcmVUZXh0LmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OmFkZCk6CisgICAgICAgIChXZWJDb3JlOjpGb250RmFtaWx5
U3BlY2lmaWNhdGlvbktleUhhc2g6Omhhc2gpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L2NvY29hL1N5c3RlbUZvbnREYXRhYmFzZUNvcmVUZXh0Lmg6CisgICAgICAgIChXZWJDb3JlOjph
ZGQpOgorICAgICAgICAoV2ViQ29yZTo6U3lzdGVtRm9udERhdGFiYXNlQ29yZVRleHQ6OkNhc2Nh
ZGVMaXN0UGFyYW1ldGVyczo6SGFzaDo6aGFzaCk6CisgICAgICAgIChXZWJDb3JlOjpTeXN0ZW1G
b250RGF0YWJhc2VDb3JlVGV4dDo6Q2FzY2FkZUxpc3RQYXJhbWV0ZXJzOjpoYXNoIGNvbnN0KTog
RGVsZXRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9mcmVldHlwZS9Gb250Q2FjaGVG
cmVlVHlwZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjphZGQpOgorICAgICAgICAoV2ViQ29yZTo6
RmFsbGJhY2tGb250RGVzY3JpcHRpb25LZXlIYXNoOjpoYXNoKToKKwogMjAyMi0wMi0yNyAgQ2hy
aXMgRHVtZXogIDxjZHVtZXpAYXBwbGUuY29tPgogCiAgICAgICAgIE9taXQgdGVtcGxhdGUgcGFy
YW1ldGVyIGZvciBTZXRGb3JTY29wZTw+IHZhcmlhYmxlcwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdC9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZwppbmRleCAzNTk4M2Q5ZTg5
MzA1NGEwMzIyOTg4ODYxZWNlYzUyYTZiNTIxMzY2Li44MTZjOTIxZjJiNDYzM2ExZTFjYWUyN2I4
YjIxYWY1MDRlYzljODY2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZworKysg
Yi9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZwpAQCAtMSwzICsxLDE5IEBACisyMDIyLTAyLTI3ICBD
aHJpcyBEdW1leiAgPGNkdW1lekBhcHBsZS5jb20+CisKKyAgICAgICAgQWRvcHQgdGhlIG1vZGVy
biBIYXNoZXIgbW9yZSB3aWRlbHkKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTIzNzI2MgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEp
LgorCisgICAgICAgICogTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlLmg6CisgICAg
ICAgIChXZWJLaXQ6Ok5ldHdvcmtDYWNoZTo6YWRkKToKKyAgICAgICAgKFdURjo6R2xvYmFsRnJh
bWVJREhhc2g6Omhhc2gpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrQ2FjaGU6Okdsb2JhbEZy
YW1lSUQ6Omhhc2ggY29uc3QpOiBEZWxldGVkLgorICAgICAgICAqIFBsYXRmb3JtL0lQQy9TdHJp
bmdSZWZlcmVuY2UuY3BwOgorICAgICAgICAoSVBDOjpTdHJpbmdSZWZlcmVuY2U6Okhhc2g6Omhh
c2gpOgorICAgICAgICAqIFBsYXRmb3JtL0lQQy9TdHJpbmdSZWZlcmVuY2UuaDoKKyAgICAgICAg
KElQQzo6YWRkKToKKwogMjAyMi0wMi0yNyAgQ2hyaXMgRHVtZXogIDxjZHVtZXpAYXBwbGUuY29t
PgogCiAgICAgICAgIE9taXQgdGVtcGxhdGUgcGFyYW1ldGVyIGZvciBTZXRGb3JTY29wZTw+IHZh
cmlhYmxlcwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL01lc3NhZ2VQb3J0SWRlbnRp
Zmllci5oIGIvU291cmNlL1dlYkNvcmUvZG9tL01lc3NhZ2VQb3J0SWRlbnRpZmllci5oCmluZGV4
IDA0NmZjYTE0YjI3MWI1ZDdmMDYwZTc1NjUyNDY0NGMyYWNkOTQzNGMuLmFiNGZmMzdkMWQ4MzNj
ZWUxZDEyNWEyZjNjOGU5NDA0MzlkMGNiMzUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Rv
bS9NZXNzYWdlUG9ydElkZW50aWZpZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vTWVzc2Fn
ZVBvcnRJZGVudGlmaWVyLmgKQEAgLTM2LDggKzM2LDYgQEAgc3RydWN0IE1lc3NhZ2VQb3J0SWRl
bnRpZmllciB7CiAgICAgZW51bSBQb3J0SWRlbnRpZmllclR5cGUgeyB9OwogICAgIE9iamVjdElk
ZW50aWZpZXI8UG9ydElkZW50aWZpZXJUeXBlPiBwb3J0SWRlbnRpZmllcjsKIAotICAgIHVuc2ln
bmVkIGhhc2goKSBjb25zdDsKLQogICAgIHRlbXBsYXRlPGNsYXNzIEVuY29kZXI+IHZvaWQgZW5j
b2RlKEVuY29kZXImKSBjb25zdDsKICAgICB0ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPiBzdGF0aWMg
c3RkOjpvcHRpb25hbDxNZXNzYWdlUG9ydElkZW50aWZpZXI+IGRlY29kZShEZWNvZGVyJik7CiAK
QEAgLTQ2LDYgKzQ0LDExIEBAIHN0cnVjdCBNZXNzYWdlUG9ydElkZW50aWZpZXIgewogI2VuZGlm
CiB9OwogCitpbmxpbmUgdm9pZCBhZGQoSGFzaGVyJiBoYXNoZXIsIGNvbnN0IE1lc3NhZ2VQb3J0
SWRlbnRpZmllciYgaWRlbnRpZmllcikKK3sKKyAgICBhZGQoaGFzaGVyLCBpZGVudGlmaWVyLnBy
b2Nlc3NJZGVudGlmaWVyLCBpZGVudGlmaWVyLnBvcnRJZGVudGlmaWVyKTsKK30KKwogaW5saW5l
IGJvb2wgb3BlcmF0b3I9PShjb25zdCBNZXNzYWdlUG9ydElkZW50aWZpZXImIGEsIGNvbnN0IE1l
c3NhZ2VQb3J0SWRlbnRpZmllciYgYikKIHsKICAgICByZXR1cm4gYS5wcm9jZXNzSWRlbnRpZmll
ciA9PSBiLnByb2Nlc3NJZGVudGlmaWVyICYmICBhLnBvcnRJZGVudGlmaWVyID09IGIucG9ydElk
ZW50aWZpZXI7CkBAIC03MywxMSArNzYsNiBAQCBzdGQ6Om9wdGlvbmFsPE1lc3NhZ2VQb3J0SWRl
bnRpZmllcj4gTWVzc2FnZVBvcnRJZGVudGlmaWVyOjpkZWNvZGUoRGVjb2RlciYgZGVjbwogICAg
IHJldHVybiB7IHsgV1RGTW92ZSgqcHJvY2Vzc0lkZW50aWZpZXIpLCBXVEZNb3ZlKCpwb3J0SWRl
bnRpZmllcikgfSB9OwogfQogCi1pbmxpbmUgdW5zaWduZWQgTWVzc2FnZVBvcnRJZGVudGlmaWVy
OjpoYXNoKCkgY29uc3QKLXsKLSAgICByZXR1cm4gY29tcHV0ZUhhc2gocHJvY2Vzc0lkZW50aWZp
ZXIudG9VSW50NjQoKSwgcG9ydElkZW50aWZpZXIudG9VSW50NjQoKSk7Ci19Ci0KICNpZiAhTE9H
X0RJU0FCTEVECiAKIGlubGluZSBTdHJpbmcgTWVzc2FnZVBvcnRJZGVudGlmaWVyOjpsb2dTdHJp
bmcoKSBjb25zdApAQCAtOTIsNyArOTAsNyBAQCBpbmxpbmUgU3RyaW5nIE1lc3NhZ2VQb3J0SWRl
bnRpZmllcjo6bG9nU3RyaW5nKCkgY29uc3QKIG5hbWVzcGFjZSBXVEYgewogCiBzdHJ1Y3QgTWVz
c2FnZVBvcnRJZGVudGlmaWVySGFzaCB7Ci0gICAgc3RhdGljIHVuc2lnbmVkIGhhc2goY29uc3Qg
V2ViQ29yZTo6TWVzc2FnZVBvcnRJZGVudGlmaWVyJiBrZXkpIHsgcmV0dXJuIGtleS5oYXNoKCk7
IH0KKyAgICBzdGF0aWMgdW5zaWduZWQgaGFzaChjb25zdCBXZWJDb3JlOjpNZXNzYWdlUG9ydElk
ZW50aWZpZXImIGtleSkgeyByZXR1cm4gY29tcHV0ZUhhc2goa2V5KTsgfQogICAgIHN0YXRpYyBi
b29sIGVxdWFsKGNvbnN0IFdlYkNvcmU6Ok1lc3NhZ2VQb3J0SWRlbnRpZmllciYgYSwgY29uc3Qg
V2ViQ29yZTo6TWVzc2FnZVBvcnRJZGVudGlmaWVyJiBiKSB7IHJldHVybiBhID09IGI7IH0KICAg
ICBzdGF0aWMgY29uc3QgYm9vbCBzYWZlVG9Db21wYXJlVG9FbXB0eU9yRGVsZXRlZCA9IHRydWU7
CiB9OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaGlzdG9yeS9CYWNrRm9yd2FyZEl0ZW1J
ZGVudGlmaWVyLmggYi9Tb3VyY2UvV2ViQ29yZS9oaXN0b3J5L0JhY2tGb3J3YXJkSXRlbUlkZW50
aWZpZXIuaAppbmRleCBjM2E4ZWJlZDk3YmM3NTI3YTIzNWRkOGY3YWU5MzQ2MWQ1ZGRjMGZkLi5k
NWIzOTc1NzA1NzE2ZDExYzAwM2FlODU5NjQ4OTY5MmJmOWY0OTllIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9oaXN0b3J5L0JhY2tGb3J3YXJkSXRlbUlkZW50aWZpZXIuaAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9oaXN0b3J5L0JhY2tGb3J3YXJkSXRlbUlkZW50aWZpZXIuaApAQCAtMzcsNyAr
MzcsNiBAQCBzdHJ1Y3QgQmFja0ZvcndhcmRJdGVtSWRlbnRpZmllciB7CiAgICAgZW51bSBJdGVt
SWRlbnRpZmllclR5cGUgeyB9OwogICAgIE9iamVjdElkZW50aWZpZXI8SXRlbUlkZW50aWZpZXJU
eXBlPiBpdGVtSWRlbnRpZmllcjsKIAotICAgIHVuc2lnbmVkIGhhc2goKSBjb25zdDsKICAgICBl
eHBsaWNpdCBvcGVyYXRvciBib29sKCkgY29uc3QgeyByZXR1cm4gcHJvY2Vzc0lkZW50aWZpZXIg
JiYgaXRlbUlkZW50aWZpZXI7IH0KIAogICAgIHRlbXBsYXRlPGNsYXNzIEVuY29kZXI+IHZvaWQg
ZW5jb2RlKEVuY29kZXImKSBjb25zdDsKQEAgLTUyLDYgKzUxLDExIEBAIHN0cnVjdCBCYWNrRm9y
d2FyZEl0ZW1JZGVudGlmaWVyIHsKICNlbmRpZgogfTsKIAoraW5saW5lIHZvaWQgYWRkKEhhc2hl
ciYgaGFzaGVyLCBjb25zdCBCYWNrRm9yd2FyZEl0ZW1JZGVudGlmaWVyJiBpZGVudGlmaWVyKQor
eworICAgIGFkZChoYXNoZXIsIGlkZW50aWZpZXIucHJvY2Vzc0lkZW50aWZpZXIsIGlkZW50aWZp
ZXIuaXRlbUlkZW50aWZpZXIpOworfQorCiAjaWYgIUxPR19ESVNBQkxFRAogCiBpbmxpbmUgY29u
c3QgY2hhciogQmFja0ZvcndhcmRJdGVtSWRlbnRpZmllcjo6bG9nU3RyaW5nKCkgY29uc3QKQEAg
LTk2LDE3ICsxMDAsMTIgQEAgc3RkOjpvcHRpb25hbDxCYWNrRm9yd2FyZEl0ZW1JZGVudGlmaWVy
PiBCYWNrRm9yd2FyZEl0ZW1JZGVudGlmaWVyOjpkZWNvZGUoRGVjb2QKICAgICByZXR1cm4gcmVz
dWx0OwogfQogCi1pbmxpbmUgdW5zaWduZWQgQmFja0ZvcndhcmRJdGVtSWRlbnRpZmllcjo6aGFz
aCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIGNvbXB1dGVIYXNoKHByb2Nlc3NJZGVudGlmaWVyLnRv
VUludDY0KCksIGl0ZW1JZGVudGlmaWVyLnRvVUludDY0KCkpOwotfQotCiB9IC8vIG5hbWVzcGFj
ZSBXZWJDb3JlCiAKIG5hbWVzcGFjZSBXVEYgewogCiBzdHJ1Y3QgQmFja0ZvcndhcmRJdGVtSWRl
bnRpZmllckhhc2ggewotICAgIHN0YXRpYyB1bnNpZ25lZCBoYXNoKGNvbnN0IFdlYkNvcmU6OkJh
Y2tGb3J3YXJkSXRlbUlkZW50aWZpZXImIGtleSkgeyByZXR1cm4ga2V5Lmhhc2goKTsgfQorICAg
IHN0YXRpYyB1bnNpZ25lZCBoYXNoKGNvbnN0IFdlYkNvcmU6OkJhY2tGb3J3YXJkSXRlbUlkZW50
aWZpZXImIGtleSkgeyByZXR1cm4gY29tcHV0ZUhhc2goa2V5KTsgfQogICAgIHN0YXRpYyBib29s
IGVxdWFsKGNvbnN0IFdlYkNvcmU6OkJhY2tGb3J3YXJkSXRlbUlkZW50aWZpZXImIGEsIGNvbnN0
IFdlYkNvcmU6OkJhY2tGb3J3YXJkSXRlbUlkZW50aWZpZXImIGIpIHsgcmV0dXJuIGEgPT0gYjsg
fQogICAgIHN0YXRpYyBjb25zdCBib29sIHNhZmVUb0NvbXBhcmVUb0VtcHR5T3JEZWxldGVkID0g
dHJ1ZTsKIH07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvUmVzb3VyY2VDcnlw
dG9ncmFwaGljRGlnZXN0LmggYi9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvUmVzb3VyY2VDcnlwdG9n
cmFwaGljRGlnZXN0LmgKaW5kZXggODNiODYxM2NmZGEyMzI5YWUzMGJiZjZhYmMxNGI5OWQ0NDIz
N2IwMi4uZjk5MmE4ZDdkNDI1M2Q2ZTU4YTFlMzM4Yjc4MGMwZDY2ZjM3NDY3MyAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvbG9hZGVyL1Jlc291cmNlQ3J5cHRvZ3JhcGhpY0RpZ2VzdC5oCisr
KyBiL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9SZXNvdXJjZUNyeXB0b2dyYXBoaWNEaWdlc3QuaApA
QCAtNjAsNiArNjAsMTEgQEAgc3RydWN0IFJlc291cmNlQ3J5cHRvZ3JhcGhpY0RpZ2VzdCB7CiAg
ICAgfQogfTsKIAoraW5saW5lIHZvaWQgYWRkKEhhc2hlciYgaGFzaGVyLCBjb25zdCBSZXNvdXJj
ZUNyeXB0b2dyYXBoaWNEaWdlc3QmIGRpZ2VzdCkKK3sKKyAgICBhZGQoaGFzaGVyLCBkaWdlc3Qu
YWxnb3JpdGhtLCBkaWdlc3QudmFsdWUpOworfQorCiBzdHJ1Y3QgRW5jb2RlZFJlc291cmNlQ3J5
cHRvZ3JhcGhpY0RpZ2VzdCB7CiAgICAgdXNpbmcgQWxnb3JpdGhtID0gUmVzb3VyY2VDcnlwdG9n
cmFwaGljRGlnZXN0OjpBbGdvcml0aG07CiAgICAgCkBAIC04NSw3ICs5MCw3IEBAIG5hbWVzcGFj
ZSBXVEYgewogdGVtcGxhdGU8PiBzdHJ1Y3QgRGVmYXVsdEhhc2g8V2ViQ29yZTo6UmVzb3VyY2VD
cnlwdG9ncmFwaGljRGlnZXN0PiB7CiAgICAgc3RhdGljIHVuc2lnbmVkIGhhc2goY29uc3QgV2Vi
Q29yZTo6UmVzb3VyY2VDcnlwdG9ncmFwaGljRGlnZXN0JiBkaWdlc3QpCiAgICAgewotICAgICAg
ICByZXR1cm4gcGFpckludEhhc2goaW50SGFzaChzdGF0aWNfY2FzdDx1bnNpZ25lZD4oZGlnZXN0
LmFsZ29yaXRobSkpLCBTdHJpbmdIYXNoZXI6OmNvbXB1dGVIYXNoKGRpZ2VzdC52YWx1ZS5kYXRh
KCksIGRpZ2VzdC52YWx1ZS5zaXplKCkpKTsKKyAgICAgICAgcmV0dXJuIGNvbXB1dGVIYXNoKGRp
Z2VzdCk7CiAgICAgfQogICAgIHN0YXRpYyBib29sIGVxdWFsKGNvbnN0IFdlYkNvcmU6OlJlc291
cmNlQ3J5cHRvZ3JhcGhpY0RpZ2VzdCYgYSwgY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VDcnlwdG9n
cmFwaGljRGlnZXN0JiBiKQogICAgIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL0NvbG9yLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9D
b2xvci5oCmluZGV4IDgzMWRhNzhjNzMxYjBkNWY3ODExYzA5NzgzOGQ2ZGVjYjkyMWQ4OWIuLjdk
ZGU0YzUxMmQzNmMxNzg3M2U1NmY2MDNiOTg3NDUyZGJmM2VjZmIgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0NvbG9yLmgKKysrIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3IuaApAQCAtODQsOCArODQsNiBAQCBwdWJsaWM6CiAKICAg
ICB+Q29sb3IoKTsKIAotICAgIHVuc2lnbmVkIGhhc2goKSBjb25zdDsKLQogICAgIGJvb2wgaXNW
YWxpZCgpIGNvbnN0OwogICAgIGJvb2wgaXNTZW1hbnRpYygpIGNvbnN0OwogICAgIGJvb2wgdXNl
c0NvbG9yRnVuY3Rpb25TZXJpYWxpemF0aW9uKCkgY29uc3Q7CkBAIC0xODAsNiArMTc4LDggQEAg
cHVibGljOgogICAgIFN0cmluZyBkZWJ1Z0Rlc2NyaXB0aW9uKCkgY29uc3Q7CiAKIHByaXZhdGU6
CisgICAgZnJpZW5kIHZvaWQgYWRkKEhhc2hlciYsIENvbG9yKTsKKwogICAgIGNsYXNzIE91dE9m
TGluZUNvbXBvbmVudHMgOiBwdWJsaWMgVGhyZWFkU2FmZVJlZkNvdW50ZWQ8T3V0T2ZMaW5lQ29t
cG9uZW50cz4gewogICAgIHB1YmxpYzoKICAgICAgICAgc3RhdGljIFJlZjxPdXRPZkxpbmVDb21w
b25lbnRzPiBjcmVhdGUoQ29sb3JDb21wb25lbnRzPGZsb2F0LCA0PiBjb21wb25lbnRzKQpAQCAt
MjU3LDYgKzI1NywxMSBAQCBwcml2YXRlOgogICAgIHVpbnQ2NF90IG1fY29sb3JBbmRGbGFncyB7
IGludmFsaWRDb2xvckFuZEZsYWdzIH07CiB9OwogCitpbmxpbmUgdm9pZCBhZGQoSGFzaGVyJiBo
YXNoZXIsIENvbG9yIGNvbG9yKQoreworICAgIGFkZChoYXNoZXIsIGNvbG9yLm1fY29sb3JBbmRG
bGFncyk7Cit9CisKIGJvb2wgb3BlcmF0b3I9PShjb25zdCBDb2xvciYsIGNvbnN0IENvbG9yJik7
CiBib29sIG9wZXJhdG9yIT0oY29uc3QgQ29sb3ImLCBjb25zdCBDb2xvciYpOwogCkBAIC0zNjUs
MTMgKzM3MCw2IEBAIGlubGluZSBDb2xvcjo6fkNvbG9yKCkKICAgICAgICAgYXNPdXRPZkxpbmUo
KS5kZXJlZigpOwogfQogCi1pbmxpbmUgdW5zaWduZWQgQ29sb3I6Omhhc2goKSBjb25zdAotewot
ICAgIGlmIChpc091dE9mTGluZSgpKQotICAgICAgICByZXR1cm4gY29tcHV0ZUhhc2goYXNPdXRP
ZkxpbmUoKS51bnJlc29sdmVkQ29tcG9uZW50cygpLCBjb2xvclNwYWNlKCksIGZsYWdzKCkudG9S
YXcoKSk7Ci0gICAgcmV0dXJuIGNvbXB1dGVIYXNoKGFzUGFja2VkSW5saW5lKCkudmFsdWUsIGZs
YWdzKCkudG9SYXcoKSk7Ci19Ci0KIGlubGluZSBib29sIENvbG9yOjppc1ZhbGlkKCkgY29uc3QK
IHsKICAgICByZXR1cm4gZmxhZ3MoKS5jb250YWlucyhGbGFnc0luY2x1ZGluZ1ByaXZhdGU6OlZh
bGlkKTsKQEAgLTYyNywxMiArNjI1LDYgQEAgdGVtcGxhdGU8Y2xhc3MgRGVjb2Rlcj4gc3RkOjpv
cHRpb25hbDxDb2xvcj4gQ29sb3I6OmRlY29kZShEZWNvZGVyJiBkZWNvZGVyKQogICAgIHJldHVy
biBDb2xvciB7IGFzU1JHQkEoUGFja2VkQ29sb3I6OlJHQkEgeyB2YWx1ZSB9KSwgZmxhZ3MgfTsK
IH0KIAotaW5saW5lIHZvaWQgYWRkKEhhc2hlciYgaGFzaGVyLCBjb25zdCBDb2xvciYgY29sb3Ip
Ci17Ci0gICAgLy8gRklYTUU6IFdlIGRvbid0IHdhbnQgdG8gaGFzaCBhIGhhc2g7IGRvIGJldHRl
ci4KLSAgICBhZGQoaGFzaGVyLCBjb2xvci5oYXNoKCkpOwotfQotCiB9IC8vIG5hbWVzcGFjZSBX
ZWJDb3JlCiAKIG5hbWVzcGFjZSBXVEYgewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvQ29sb3JIYXNoLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9Db2xvckhhc2guaAppbmRleCAzZDJjOWM1NTM2ZmJlMTgzNTMzYWY4ODFlMGQxY2YwYTQz
ZDg4MmU2Li5kYTM4YmY0ZTM2YTgxZGU4OTQ3YzI2Y2ZmMWZlM2VjYzZjNzA2N2EzIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Db2xvckhhc2guaAorKysgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Db2xvckhhc2guaApAQCAtMzEsNyArMzEs
NyBAQAogbmFtZXNwYWNlIFdURiB7CiAKIHN0cnVjdCBDb2xvckhhc2ggewotICAgIHN0YXRpYyB1
bnNpZ25lZCBoYXNoKGNvbnN0IFdlYkNvcmU6OkNvbG9yJiBrZXkpIHsgcmV0dXJuIGtleS5oYXNo
KCk7IH0KKyAgICBzdGF0aWMgdW5zaWduZWQgaGFzaChjb25zdCBXZWJDb3JlOjpDb2xvciYga2V5
KSB7IHJldHVybiBjb21wdXRlSGFzaChrZXkpOyB9CiAgICAgc3RhdGljIGJvb2wgZXF1YWwoY29u
c3QgV2ViQ29yZTo6Q29sb3ImIGEsIGNvbnN0IFdlYkNvcmU6OkNvbG9yJiBiKSB7IHJldHVybiBh
ID09IGI7IH0KICAgICBzdGF0aWMgY29uc3QgYm9vbCBzYWZlVG9Db21wYXJlVG9FbXB0eU9yRGVs
ZXRlZCA9IHRydWU7CiB9OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvRm9udC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250LmNw
cAppbmRleCBjNDUwOGJkNzVhYjI4NWUyMDUyOTQxYjMzYjJhNDViNDVkMDVmYjgwLi4zZTc3YWI3
OTRjZDUxYWY2MmUyNzBlMzVhY2FiY2JhOWY4ZjUxMGE4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9Gb250LmNwcApAQCAtNTU5LDEzICs1NTksMTggQEAgc3RydWN0IENoYXJh
Y3RlckZhbGxiYWNrTWFwS2V5IHsKICAgICBib29sIGlzRm9yUGxhdGZvcm1Gb250IHsgZmFsc2Ug
fTsKIH07CiAKK2lubGluZSB2b2lkIGFkZChIYXNoZXImIGhhc2hlciwgY29uc3QgQ2hhcmFjdGVy
RmFsbGJhY2tNYXBLZXkmIGtleSkKK3sKKyAgICBhZGQoaGFzaGVyLCBrZXkubG9jYWxlLCBrZXku
Y2hhcmFjdGVyLCBrZXkuaXNGb3JQbGF0Zm9ybUZvbnQpOworfQorCiBpbmxpbmUgYm9vbCBvcGVy
YXRvcj09KGNvbnN0IENoYXJhY3RlckZhbGxiYWNrTWFwS2V5JiBhLCBjb25zdCBDaGFyYWN0ZXJG
YWxsYmFja01hcEtleSYgYikKIHsKICAgICByZXR1cm4gYS5sb2NhbGUgPT0gYi5sb2NhbGUgJiYg
YS5jaGFyYWN0ZXIgPT0gYi5jaGFyYWN0ZXIgJiYgYS5pc0ZvclBsYXRmb3JtRm9udCA9PSBiLmlz
Rm9yUGxhdGZvcm1Gb250OwogfQogCiBzdHJ1Y3QgQ2hhcmFjdGVyRmFsbGJhY2tNYXBLZXlIYXNo
IHsKLSAgICBzdGF0aWMgdW5zaWduZWQgaGFzaChjb25zdCBDaGFyYWN0ZXJGYWxsYmFja01hcEtl
eSYga2V5KSB7IHJldHVybiBjb21wdXRlSGFzaChrZXkubG9jYWxlLCBrZXkuY2hhcmFjdGVyLCBr
ZXkuaXNGb3JQbGF0Zm9ybUZvbnQpOyB9CisgICAgc3RhdGljIHVuc2lnbmVkIGhhc2goY29uc3Qg
Q2hhcmFjdGVyRmFsbGJhY2tNYXBLZXkmIGtleSkgeyByZXR1cm4gY29tcHV0ZUhhc2goa2V5KTsg
fQogICAgIHN0YXRpYyBib29sIGVxdWFsKGNvbnN0IENoYXJhY3RlckZhbGxiYWNrTWFwS2V5JiBh
LCBjb25zdCBDaGFyYWN0ZXJGYWxsYmFja01hcEtleSYgYikgeyByZXR1cm4gYSA9PSBiOyB9CiAg
ICAgc3RhdGljIGNvbnN0IGJvb2wgc2FmZVRvQ29tcGFyZVRvRW1wdHlPckRlbGV0ZWQgPSB0cnVl
OwogfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRD
YWNoZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250Q2FjaGUuY3Bw
CmluZGV4IGIyNWU3ZGZiOTdhMTAyOTk3YjBmYWUzM2Q3NTM4MTVmODlhMzAzZWQuLjFiZmEzZmQ1
ZjJiM2EyNmE5YTRhZWU5NTUzYjYyYjY4NmViZTIyNDEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRDYWNoZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvRm9udENhY2hlLmNwcApAQCAtODYsNiArODYsMTEgQEAgc3RydWN0
IEZvbnRQbGF0Zm9ybURhdGFDYWNoZUtleSB7CiAgICAgRm9udENyZWF0aW9uQ29udGV4dCBmb250
Q3JlYXRpb25Db250ZXh0OwogfTsKIAoraW5saW5lIHZvaWQgYWRkKEhhc2hlciYgaGFzaGVyLCBj
b25zdCBGb250UGxhdGZvcm1EYXRhQ2FjaGVLZXkmIGtleSkKK3sKKyAgICBhZGQoaGFzaGVyLCBr
ZXkuZGVzY3JpcHRpb25LZXksIGtleS5mYW1pbHksIGtleS5mb250Q3JlYXRpb25Db250ZXh0KTsK
K30KKwogc3RhdGljIGJvb2wgb3BlcmF0b3I9PShjb25zdCBGb250UGxhdGZvcm1EYXRhQ2FjaGVL
ZXkmIGEsIGNvbnN0IEZvbnRQbGF0Zm9ybURhdGFDYWNoZUtleSYgYikKIHsKICAgICByZXR1cm4g
YS5kZXNjcmlwdGlvbktleSA9PSBiLmRlc2NyaXB0aW9uS2V5CkBAIC05NCw3ICs5OSw3IEBAIHN0
YXRpYyBib29sIG9wZXJhdG9yPT0oY29uc3QgRm9udFBsYXRmb3JtRGF0YUNhY2hlS2V5JiBhLCBj
b25zdCBGb250UGxhdGZvcm1EYXRhCiB9CiAKIHN0cnVjdCBGb250UGxhdGZvcm1EYXRhQ2FjaGVL
ZXlIYXNoIHsKLSAgICBzdGF0aWMgdW5zaWduZWQgaGFzaChjb25zdCBGb250UGxhdGZvcm1EYXRh
Q2FjaGVLZXkmIGtleSkgeyByZXR1cm4gY29tcHV0ZUhhc2goa2V5LmRlc2NyaXB0aW9uS2V5LCBr
ZXkuZmFtaWx5LCBrZXkuZm9udENyZWF0aW9uQ29udGV4dCk7IH0KKyAgICBzdGF0aWMgdW5zaWdu
ZWQgaGFzaChjb25zdCBGb250UGxhdGZvcm1EYXRhQ2FjaGVLZXkmIGtleSkgeyByZXR1cm4gY29t
cHV0ZUhhc2goa2V5KTsgfQogICAgIHN0YXRpYyBib29sIGVxdWFsKGNvbnN0IEZvbnRQbGF0Zm9y
bURhdGFDYWNoZUtleSYgYSwgY29uc3QgRm9udFBsYXRmb3JtRGF0YUNhY2hlS2V5JiBiKSB7IHJl
dHVybiBhID09IGI7IH0KICAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgc2FmZVRvQ29tcGFyZVRv
RW1wdHlPckRlbGV0ZWQgPSB0cnVlOwogfTsKQEAgLTM2MiwxMSArMzY3LDYgQEAgYm9vbCBvcGVy
YXRvcj09KGNvbnN0IEZvbnRDYXNjYWRlQ2FjaGVLZXkmIGEsIGNvbnN0IEZvbnRDYXNjYWRlQ2Fj
aGVLZXkmIGIpCiAgICAgICAgICYmIGEuZmFtaWxpZXMgPT0gYi5mYW1pbGllczsKIH0KIAotdW5z
aWduZWQgRm9udENhc2NhZGVDYWNoZUtleUhhc2g6Omhhc2goY29uc3QgRm9udENhc2NhZGVDYWNo
ZUtleSYga2V5KQotewotICAgIHJldHVybiBjb21wdXRlSGFzaChrZXkuZm9udERlc2NyaXB0aW9u
S2V5LCBrZXkuZm9udFNlbGVjdG9ySWQsIGtleS5mb250U2VsZWN0b3JWZXJzaW9uLCBrZXkuZmFt
aWxpZXMpOwotfQotCiB2b2lkIEZvbnRDYWNoZTo6aW52YWxpZGF0ZUZvbnRDYXNjYWRlQ2FjaGUo
KQogewogICAgIG1fZm9udENhc2NhZGVDYWNoZS5jbGVhcigpOwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udENhY2hlLmggYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9Gb250Q2FjaGUuaAppbmRleCA3NmJiOWYzYmJiNTE0YjAxNDViN2E5
ZTE3NDc3M2M1MzQ3MTM1ZmE5Li44OWI0ZTE5MjdhNzhlMDNmMzQ4MzVhODZjYzkwMmIxYTI2N2Fh
MjY5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250Q2Fj
aGUuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250Q2FjaGUuaApA
QCAtMjU3LDYgKzI1NywxMSBAQCBzdHJ1Y3QgRm9udENhc2NhZGVDYWNoZUtleSB7CiAgICAgdW5z
aWduZWQgZm9udFNlbGVjdG9yVmVyc2lvbjsKIH07CiAKK2lubGluZSB2b2lkIGFkZChIYXNoZXIm
IGhhc2hlciwgY29uc3QgRm9udENhc2NhZGVDYWNoZUtleSYga2V5KQoreworICAgIGFkZChoYXNo
ZXIsIGtleS5mb250RGVzY3JpcHRpb25LZXksIGtleS5mYW1pbGllcywga2V5LmZvbnRTZWxlY3Rv
cklkLCBrZXkuZm9udFNlbGVjdG9yVmVyc2lvbik7Cit9CisKIGJvb2wgb3BlcmF0b3I9PShjb25z
dCBGb250Q2FzY2FkZUNhY2hlS2V5JiwgY29uc3QgRm9udENhc2NhZGVDYWNoZUtleSYpOwogCiBz
dHJ1Y3QgRm9udENhc2NhZGVDYWNoZUVudHJ5IHsKQEAgLTI2Nyw3ICsyNzIsNyBAQCBzdHJ1Y3Qg
Rm9udENhc2NhZGVDYWNoZUVudHJ5IHsKIH07CiAKIHN0cnVjdCBGb250Q2FzY2FkZUNhY2hlS2V5
SGFzaCB7Ci0gICAgc3RhdGljIHVuc2lnbmVkIGhhc2goY29uc3QgRm9udENhc2NhZGVDYWNoZUtl
eSYpOworICAgIHN0YXRpYyB1bnNpZ25lZCBoYXNoKGNvbnN0IEZvbnRDYXNjYWRlQ2FjaGVLZXkm
IGtleSkgeyByZXR1cm4gY29tcHV0ZUhhc2goa2V5KTsgfQogICAgIHN0YXRpYyBib29sIGVxdWFs
KGNvbnN0IEZvbnRDYXNjYWRlQ2FjaGVLZXkmIGEsIGNvbnN0IEZvbnRDYXNjYWRlQ2FjaGVLZXkm
IGIpIHsgcmV0dXJuIGEgPT0gYjsgfQogICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBzYWZlVG9D
b21wYXJlVG9FbXB0eU9yRGVsZXRlZCA9IGZhbHNlOwogfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvY29hL0ZvbnRGYW1pbHlTcGVjaWZpY2F0aW9uQ29y
ZVRleHQuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvRm9udEZh
bWlseVNwZWNpZmljYXRpb25Db3JlVGV4dC5jcHAKaW5kZXggM2I0ZGE0ZjUyN2JjODRlNWE0NzE2
OGE5OTQ2ZTdmYjY4Nzc0ZTdlMi4uNTIwNDk1YmM3OWNjM2IxNmRjN2VlYWJhODJhNDAyZGI5YzM3
OGFlMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2Ev
Rm9udEZhbWlseVNwZWNpZmljYXRpb25Db3JlVGV4dC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvRm9udEZhbWlseVNwZWNpZmljYXRpb25Db3JlVGV4dC5j
cHAKQEAgLTY0LDggKzY0LDE0IEBAIHN0cnVjdCBGb250RmFtaWx5U3BlY2lmaWNhdGlvbktleSB7
CiAgICAgYm9vbCBpc0hhc2hUYWJsZURlbGV0ZWRWYWx1ZSgpIGNvbnN0IHsgcmV0dXJuIGZvbnRE
ZXNjcmlwdGlvbktleS5pc0hhc2hUYWJsZURlbGV0ZWRWYWx1ZSgpOyB9CiB9OwogCitpbmxpbmUg
dm9pZCBhZGQoSGFzaGVyJiBoYXNoZXIsIGNvbnN0IEZvbnRGYW1pbHlTcGVjaWZpY2F0aW9uS2V5
JiBrZXkpCit7CisgICAgLy8gRklYTUU6IElkZWFsbHksIHdlIHdvdWxkbid0IGJlIGhhc2hpbmcg
YSBoYXNoLgorICAgIGFkZChoYXNoZXIsIHNhZmVDRkhhc2goa2V5LmZvbnREZXNjcmlwdG9yLmdl
dCgpKSwga2V5LmZvbnREZXNjcmlwdGlvbktleSk7Cit9CisKIHN0cnVjdCBGb250RmFtaWx5U3Bl
Y2lmaWNhdGlvbktleUhhc2ggewotICAgIHN0YXRpYyB1bnNpZ25lZCBoYXNoKGNvbnN0IEZvbnRG
YW1pbHlTcGVjaWZpY2F0aW9uS2V5JiBrZXkpIHsgcmV0dXJuIGNvbXB1dGVIYXNoKHNhZmVDRkhh
c2goa2V5LmZvbnREZXNjcmlwdG9yLmdldCgpKSwga2V5LmZvbnREZXNjcmlwdGlvbktleSk7IH0K
KyAgICBzdGF0aWMgdW5zaWduZWQgaGFzaChjb25zdCBGb250RmFtaWx5U3BlY2lmaWNhdGlvbktl
eSYga2V5KSB7IHJldHVybiBjb21wdXRlSGFzaChrZXkpOyB9CiAgICAgc3RhdGljIGJvb2wgZXF1
YWwoY29uc3QgRm9udEZhbWlseVNwZWNpZmljYXRpb25LZXkmIGEsIGNvbnN0IEZvbnRGYW1pbHlT
cGVjaWZpY2F0aW9uS2V5JiBiKSB7IHJldHVybiBhID09IGI7IH0KICAgICBzdGF0aWMgY29uc3Qg
Ym9vbCBzYWZlVG9Db21wYXJlVG9FbXB0eU9yRGVsZXRlZCA9IHRydWU7CiB9OwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvU3lzdGVtRm9udERhdGFi
YXNlQ29yZVRleHQuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvY29hL1N5
c3RlbUZvbnREYXRhYmFzZUNvcmVUZXh0LmgKaW5kZXggOWFkMWUwY2M0NTBmMGVhYTgyOTgxNzM1
NTk3ODAwYWMwODA0OTZkNC4uNWQzMzVmYzI0ZTc1MzE5ZDVhODAzM2Q1NDI5Y2ExMjdkNjE5ZGFm
MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvU3lz
dGVtRm9udERhdGFiYXNlQ29yZVRleHQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jb2NvYS9TeXN0ZW1Gb250RGF0YWJhc2VDb3JlVGV4dC5oCkBAIC03MCwxMyArNzAs
OCBAQCBwdWJsaWM6CiAgICAgICAgICAgICAgICAgJiYgaXRhbGljID09IG90aGVyLml0YWxpYzsK
ICAgICAgICAgfQogCi0gICAgICAgIHVuc2lnbmVkIGhhc2goKSBjb25zdAotICAgICAgICB7Ci0g
ICAgICAgICAgICByZXR1cm4gY29tcHV0ZUhhc2goZm9udE5hbWUsIGxvY2FsZSwgd2VpZ2h0LCB3
aWR0aCwgc2l6ZSwgYWxsb3dVc2VySW5zdGFsbGVkRm9udHMsIGl0YWxpYyk7Ci0gICAgICAgIH0K
LQogICAgICAgICBzdHJ1Y3QgSGFzaCB7Ci0gICAgICAgICAgICBzdGF0aWMgdW5zaWduZWQgaGFz
aChjb25zdCBDYXNjYWRlTGlzdFBhcmFtZXRlcnMmIHBhcmFtZXRlcnMpIHsgcmV0dXJuIHBhcmFt
ZXRlcnMuaGFzaCgpOyB9CisgICAgICAgICAgICBzdGF0aWMgdW5zaWduZWQgaGFzaChjb25zdCBD
YXNjYWRlTGlzdFBhcmFtZXRlcnMmKTsKICAgICAgICAgICAgIHN0YXRpYyBib29sIGVxdWFsKGNv
bnN0IENhc2NhZGVMaXN0UGFyYW1ldGVycyYgYSwgY29uc3QgQ2FzY2FkZUxpc3RQYXJhbWV0ZXJz
JiBiKSB7IHJldHVybiBhID09IGI7IH0KICAgICAgICAgICAgIHN0YXRpYyBjb25zdCBib29sIHNh
ZmVUb0NvbXBhcmVUb0VtcHR5T3JEZWxldGVkID0gdHJ1ZTsKICAgICAgICAgfTsKQEAgLTEyNSw0
ICsxMjAsMTQgQEAgcHJpdmF0ZToKICAgICBIYXNoTWFwPFN0cmluZywgU3RyaW5nPiBtX21vbm9z
cGFjZUZhbWlsaWVzOwogfTsKIAoraW5saW5lIHZvaWQgYWRkKEhhc2hlciYgaGFzaGVyLCBjb25z
dCBTeXN0ZW1Gb250RGF0YWJhc2VDb3JlVGV4dDo6Q2FzY2FkZUxpc3RQYXJhbWV0ZXJzJiBwYXJh
bWV0ZXJzKQoreworICAgIGFkZChoYXNoZXIsIHBhcmFtZXRlcnMuZm9udE5hbWUsIHBhcmFtZXRl
cnMubG9jYWxlLCBwYXJhbWV0ZXJzLndlaWdodCwgcGFyYW1ldGVycy53aWR0aCwgcGFyYW1ldGVy
cy5zaXplLCBwYXJhbWV0ZXJzLmFsbG93VXNlckluc3RhbGxlZEZvbnRzLCBwYXJhbWV0ZXJzLml0
YWxpYyk7CiB9CisKK2lubGluZSB1bnNpZ25lZCBTeXN0ZW1Gb250RGF0YWJhc2VDb3JlVGV4dDo6
Q2FzY2FkZUxpc3RQYXJhbWV0ZXJzOjpIYXNoOjpoYXNoKGNvbnN0IENhc2NhZGVMaXN0UGFyYW1l
dGVycyYgcGFyYW1ldGVycykKK3sKKyAgICByZXR1cm4gY29tcHV0ZUhhc2gocGFyYW1ldGVycyk7
Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2ZyZWV0eXBlL0ZvbnRDYWNoZUZyZWVUeXBlLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZyZWV0eXBlL0ZvbnRDYWNoZUZyZWVUeXBlLmNw
cAppbmRleCA2NjFkZWQ3NGY5Yjk4Nzc2ZmIyZjhjZTI4Zjc2ZWQzMWQwYzNhZDg3Li5iOTNiYzM0
Y2M0ZDRhMzQ0Y2I0MTJlYzcxZWYzYzgxZGRlNzUwOWQyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9mcmVldHlwZS9Gb250Q2FjaGVGcmVlVHlwZS5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZnJlZXR5cGUvRm9udENhY2hlRnJl
ZVR5cGUuY3BwCkBAIC0yMjUsOCArMjI1LDEzIEBAIHN0cnVjdCBGYWxsYmFja0ZvbnREZXNjcmlw
dGlvbktleSB7CiAKIH07CiAKK2lubGluZSB2b2lkIGFkZChIYXNoZXImIGhhc2hlciwgY29uc3Qg
RmFsbGJhY2tGb250RGVzY3JpcHRpb25LZXkmIGtleSkKK3sKKyAgICBhZGQoaGFzaGVyLCBrZXku
ZGVzY3JpcHRpb25LZXksIGtleS5jb2xvcmVkRm9udCk7Cit9CisKIHN0cnVjdCBGYWxsYmFja0Zv
bnREZXNjcmlwdGlvbktleUhhc2ggewotICAgIHN0YXRpYyB1bnNpZ25lZCBoYXNoKGNvbnN0IEZh
bGxiYWNrRm9udERlc2NyaXB0aW9uS2V5JiBrZXkpIHsgcmV0dXJuIGNvbXB1dGVIYXNoKGtleS5k
ZXNjcmlwdGlvbktleSwga2V5LmNvbG9yZWRGb250KTsgfQorICAgIHN0YXRpYyB1bnNpZ25lZCBo
YXNoKGNvbnN0IEZhbGxiYWNrRm9udERlc2NyaXB0aW9uS2V5JiBrZXkpIHsgcmV0dXJuIGNvbXB1
dGVIYXNoKGtleSk7IH0KICAgICBzdGF0aWMgYm9vbCBlcXVhbChjb25zdCBGYWxsYmFja0ZvbnRE
ZXNjcmlwdGlvbktleSYgYSwgY29uc3QgRmFsbGJhY2tGb250RGVzY3JpcHRpb25LZXkmIGIpIHsg
cmV0dXJuIGEgPT0gYjsgfQogICAgIHN0YXRpYyBjb25zdCBib29sIHNhZmVUb0NvbXBhcmVUb0Vt
cHR5T3JEZWxldGVkID0gdHJ1ZTsKIH07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L05ldHdv
cmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZS5oIGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJv
Y2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGUuaAppbmRleCA5MDQzNDdmMDUyMDUwMjM3MTZjNmQ2YmQ1
MTA4NjBlZjM3NDEzMzYwLi40OTRjZTk5YTU2NzA3OWQwM2Y4ZjQyMjVmNjQyYWYyZDVkNzFiZGM4
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtD
YWNoZS5oCisrKyBiL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0Nh
Y2hlLmgKQEAgLTM1LDYgKzM1LDcgQEAKICNpbmNsdWRlIDxXZWJDb3JlL1Jlc291cmNlUmVzcG9u
c2UuaD4KICNpbmNsdWRlIDxwYWwvU2Vzc2lvbklELmg+CiAjaW5jbHVkZSA8d3RmL0NvbXBsZXRp
b25IYW5kbGVyLmg+CisjaW5jbHVkZSA8d3RmL0hhc2hlci5oPgogI2luY2x1ZGUgPHd0Zi9PcHRp
b25TZXQuaD4KICNpbmNsdWRlIDx3dGYvU2Vjb25kcy5oPgogI2luY2x1ZGUgPHd0Zi9XZWFrSGFz
aFNldC5oPgpAQCAtNTMsMTMgKzU0LDExIEBAIHN0cnVjdCBHbG9iYWxGcmFtZUlEIHsKICAgICBX
ZWJQYWdlUHJveHlJZGVudGlmaWVyIHdlYlBhZ2VQcm94eUlEOwogICAgIFdlYkNvcmU6OlBhZ2VJ
ZGVudGlmaWVyIHdlYlBhZ2VJRDsKICAgICBXZWJDb3JlOjpGcmFtZUlkZW50aWZpZXIgZnJhbWVJ
RDsKLQotICAgIHVuc2lnbmVkIGhhc2goKSBjb25zdDsKIH07CiAKLWlubGluZSB1bnNpZ25lZCBH
bG9iYWxGcmFtZUlEOjpoYXNoKCkgY29uc3QKK2lubGluZSB2b2lkIGFkZChIYXNoZXImIGhhc2hl
ciwgY29uc3QgR2xvYmFsRnJhbWVJRCYgaWRlbnRpZmllcikKIHsKLSAgICByZXR1cm4gY29tcHV0
ZUhhc2god2ViUGFnZUlELCBmcmFtZUlEKTsKKyAgICBhZGQoaGFzaGVyLCBpZGVudGlmaWVyLndl
YlBhZ2VJRCwgaWRlbnRpZmllci5mcmFtZUlEKTsKIH0KIAogaW5saW5lIGJvb2wgb3BlcmF0b3I9
PShjb25zdCBHbG9iYWxGcmFtZUlEJiBhLCBjb25zdCBHbG9iYWxGcmFtZUlEJiBiKQpAQCAtNzUs
NyArNzQsNyBAQCBpbmxpbmUgYm9vbCBvcGVyYXRvcj09KGNvbnN0IEdsb2JhbEZyYW1lSUQmIGEs
IGNvbnN0IEdsb2JhbEZyYW1lSUQmIGIpCiBuYW1lc3BhY2UgV1RGIHsKIAogc3RydWN0IEdsb2Jh
bEZyYW1lSURIYXNoIHsKLSAgICBzdGF0aWMgdW5zaWduZWQgaGFzaChjb25zdCBXZWJLaXQ6Ok5l
dHdvcmtDYWNoZTo6R2xvYmFsRnJhbWVJRCYga2V5KSB7IHJldHVybiBrZXkuaGFzaCgpOyB9Cisg
ICAgc3RhdGljIHVuc2lnbmVkIGhhc2goY29uc3QgV2ViS2l0OjpOZXR3b3JrQ2FjaGU6Okdsb2Jh
bEZyYW1lSUQmIGtleSkgeyByZXR1cm4gY29tcHV0ZUhhc2goa2V5KTsgfQogICAgIHN0YXRpYyBi
b29sIGVxdWFsKGNvbnN0IFdlYktpdDo6TmV0d29ya0NhY2hlOjpHbG9iYWxGcmFtZUlEJiBhLCBj
b25zdCBXZWJLaXQ6Ok5ldHdvcmtDYWNoZTo6R2xvYmFsRnJhbWVJRCYgYikgeyByZXR1cm4gYSA9
PSBiOyB9CiAgICAgc3RhdGljIGNvbnN0IGJvb2wgc2FmZVRvQ29tcGFyZVRvRW1wdHlPckRlbGV0
ZWQgPSB0cnVlOwogfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvUGxhdGZvcm0vSVBDL1N0
cmluZ1JlZmVyZW5jZS5jcHAgYi9Tb3VyY2UvV2ViS2l0L1BsYXRmb3JtL0lQQy9TdHJpbmdSZWZl
cmVuY2UuY3BwCmluZGV4IDIxNjExMzljMzAxNGYwZWFmYjNkYzQ3Yzg1ZGE0MTkwYTJiYTA2NjYu
LjEyZDZmOWMzMDkwYjAwNWQyZWVkNDc0MzFhZWVhZmRlNTQzMjQ0NGYgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJLaXQvUGxhdGZvcm0vSVBDL1N0cmluZ1JlZmVyZW5jZS5jcHAKKysrIGIvU291cmNl
L1dlYktpdC9QbGF0Zm9ybS9JUEMvU3RyaW5nUmVmZXJlbmNlLmNwcApAQCAtNTksNyArNTksNyBA
QCBib29sIFN0cmluZ1JlZmVyZW5jZTo6ZGVjb2RlKERlY29kZXImIGRlY29kZXIsIFN0cmluZ1Jl
ZmVyZW5jZSYgcmVzdWx0KQogCiB1bnNpZ25lZCBTdHJpbmdSZWZlcmVuY2U6Okhhc2g6Omhhc2go
Y29uc3QgU3RyaW5nUmVmZXJlbmNlJiBhKQogewotICAgIHJldHVybiBTdHJpbmdIYXNoZXI6OmNv
bXB1dGVIYXNoKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdW5zaWduZWQgY2hhcio+KGEuZGF0YSgp
KSwgYS5zaXplKCkpOworICAgIHJldHVybiBjb21wdXRlSGFzaChhKTsKIH0KIAogfSAvLyBuYW1l
c3BhY2UgSVBDCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1BsYXRmb3JtL0lQQy9TdHJpbmdS
ZWZlcmVuY2UuaCBiL1NvdXJjZS9XZWJLaXQvUGxhdGZvcm0vSVBDL1N0cmluZ1JlZmVyZW5jZS5o
CmluZGV4IDU2YjFkZDAwMWM2ZjE0NWViNjAwNTBhY2VmM2I2YzgxMmQ5OTZmMGQuLjQ5MmUwNzIw
NWRhOWVkMWY2ODUyNWU0MGM5NjA0YjcyMmU5Zjg3MzEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJL
aXQvUGxhdGZvcm0vSVBDL1N0cmluZ1JlZmVyZW5jZS5oCisrKyBiL1NvdXJjZS9XZWJLaXQvUGxh
dGZvcm0vSVBDL1N0cmluZ1JlZmVyZW5jZS5oCkBAIC0yOSw2ICsyOSw3IEBACiAjaW5jbHVkZSA8
c3RyaW5nLmg+CiAjaW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4KICNpbmNsdWRlIDx3dGYvSGFzaFRy
YWl0cy5oPgorI2luY2x1ZGUgPHd0Zi9IYXNoZXIuaD4KIAogbmFtZXNwYWNlIElQQyB7CiAKQEAg
LTc5LDYgKzgwLDExIEBAIHByaXZhdGU6CiAgICAgc2l6ZV90IG1fc2l6ZTsKIH07CiAKK2lubGlu
ZSB2b2lkIGFkZChIYXNoZXImIGhhc2hlciwgY29uc3QgU3RyaW5nUmVmZXJlbmNlJiBzdHJpbmcp
Cit7CisgICAgYWRkKGhhc2hlciwgU3BhbiB7IHN0cmluZy5kYXRhKCksIHN0cmluZy5zaXplKCkg
fSk7Cit9CisKIGlubGluZSBib29sIG9wZXJhdG9yPT0oY29uc3QgU3RyaW5nUmVmZXJlbmNlJiBh
LCBjb25zdCBTdHJpbmdSZWZlcmVuY2UmIGIpCiB7CiAgICAgcmV0dXJuIGEuc2l6ZSgpID09IGIu
c2l6ZSgpICYmICFtZW1jbXAoYS5kYXRhKCksIGIuZGF0YSgpLCBhLnNpemUoKSk7CmRpZmYgLS1n
aXQgYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYkNvcmUvQ29sb3JUZXN0cy5jcHAgYi9U
b29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYkNvcmUvQ29sb3JUZXN0cy5jcHAKaW5kZXggYjBh
MDNiYzc1YjRhYTBjODEwZjk2OTcxOTM0MTM1YWI5ODFjNWU0YS4uZWIxNjdhY2RjNmVmMWY1NDdl
N2IyYTA1YjFjMTk2Y2UyZDA5NWFhYyAxMDA2NDQKLS0tIGEvVG9vbHMvVGVzdFdlYktpdEFQSS9U
ZXN0cy9XZWJDb3JlL0NvbG9yVGVzdHMuY3BwCisrKyBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVz
dHMvV2ViQ29yZS9Db2xvclRlc3RzLmNwcApAQCAtMzEsNiArMzEsNyBAQAogI2luY2x1ZGUgPFdl
YkNvcmUvQ29sb3JDb252ZXJzaW9uLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9Db2xvclNlcmlhbGl6
YXRpb24uaD4KICNpbmNsdWRlIDxXZWJDb3JlL0NvbG9yVHlwZXMuaD4KKyNpbmNsdWRlIDx3dGYv
SGFzaGVyLmg+CiAjaW5jbHVkZSA8d3RmL01hdGhFeHRyYXMuaD4KIAogdXNpbmcgbmFtZXNwYWNl
IFdlYkNvcmU7CkBAIC0yOTksMTkgKzMwMCwxOSBAQCBURVNUKENvbG9yLCBIYXNoKQogICAgIHsK
ICAgICAgICAgQ29sb3IgYzEgeyBEaXNwbGF5UDM8ZmxvYXQ+IHsgMS4wLCAwLjUsIDAuMjUsIDEu
MCB9IH07CiAgICAgICAgIENvbG9yIGMyIHsgRGlzcGxheVAzPGZsb2F0PiB7IDEuMCwgMC41LCAw
LjI1LCAxLjAgfSB9OwotICAgICAgICBFWFBFQ1RfRVEoYzEuaGFzaCgpLCBjMi5oYXNoKCkpOwor
ICAgICAgICBFWFBFQ1RfRVEoY29tcHV0ZUhhc2goYzEpLCBjb21wdXRlSGFzaChjMikpOwogICAg
IH0KIAogICAgIHsKICAgICAgICAgQ29sb3IgYzEgeyBEaXNwbGF5UDM8ZmxvYXQ+IHsgMS4wLCAw
LjUsIDAuMjUsIDEuMCB9IH07CiAgICAgICAgIENvbG9yIGMyIHsgU1JHQkE8ZmxvYXQ+IHsgMS4w
LCAwLjUsIDAuMjUsIDEuMCB9IH07Ci0gICAgICAgIEVYUEVDVF9ORShjMS5oYXNoKCksIGMyLmhh
c2goKSk7CisgICAgICAgIEVYUEVDVF9ORShjb21wdXRlSGFzaChjMSksIGNvbXB1dGVIYXNoKGMy
KSk7CiAgICAgfQogCiAgICAgYXV0byBjb21wb25lbnRCeXRlcyA9IFNSR0JBPHVpbnQ4X3Q+IHsg
MjU1LCAxMjgsIDYzLCAxMjcgfTsKICAgICBDb2xvciByZ2IxIHsgY29udmVydENvbG9yPFNSR0JB
PGZsb2F0Pj4oY29tcG9uZW50Qnl0ZXMpIH07CiAgICAgQ29sb3IgcmdiMiB7IGNvbXBvbmVudEJ5
dGVzIH07Ci0gICAgRVhQRUNUX05FKHJnYjEuaGFzaCgpLCByZ2IyLmhhc2goKSk7CisgICAgRVhQ
RUNUX05FKGNvbXB1dGVIYXNoKHJnYjEpLCBjb21wdXRlSGFzaChyZ2IyKSk7CiB9CiAKIFRFU1Qo
Q29sb3IsIE1vdmVDb25zdHJ1Y3RvcikK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>453392</attachid>
            <date>2022-02-28 07:40:00 -0800</date>
            <delta_ts>2022-02-28 09:24:54 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-237262-20220228073959.patch</filename>
            <type>text/plain</type>
            <size>22793</size>
            <attacher name="Chris Dumez">cdumez</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjkwNTc1CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZDllZDY4MzA0NDE2YjZh
NjljNTAzYjk0YzQ0NzYwNDlmNjBlMDk2NS4uOThlNTc3Njg5ZWUwNjA4OTE5NWQ2OTU2YWFhOWNk
ZjgxMjhjN2UzYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQ3IEBACisyMDIyLTAyLTI3ICBDaHJp
cyBEdW1leiAgPGNkdW1lekBhcHBsZS5jb20+CisKKyAgICAgICAgQWRvcHQgdGhlIG1vZGVybiBI
YXNoZXIgbW9yZSB3aWRlbHkKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTIzNzI2MgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgor
CisgICAgICAgICogZG9tL01lc3NhZ2VQb3J0SWRlbnRpZmllci5oOgorICAgICAgICAoV2ViQ29y
ZTo6YWRkKToKKyAgICAgICAgKFdURjo6TWVzc2FnZVBvcnRJZGVudGlmaWVySGFzaDo6aGFzaCk6
CisgICAgICAgIChXZWJDb3JlOjpNZXNzYWdlUG9ydElkZW50aWZpZXI6Omhhc2ggY29uc3QpOiBE
ZWxldGVkLgorICAgICAgICAqIGhpc3RvcnkvQmFja0ZvcndhcmRJdGVtSWRlbnRpZmllci5oOgor
ICAgICAgICAoV2ViQ29yZTo6YWRkKToKKyAgICAgICAgKFdURjo6QmFja0ZvcndhcmRJdGVtSWRl
bnRpZmllckhhc2g6Omhhc2gpOgorICAgICAgICAoV2ViQ29yZTo6QmFja0ZvcndhcmRJdGVtSWRl
bnRpZmllcjo6aGFzaCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgICogbG9hZGVyL1Jlc291cmNl
Q3J5cHRvZ3JhcGhpY0RpZ2VzdC5oOgorICAgICAgICAoV2ViQ29yZTo6YWRkKToKKyAgICAgICAg
KFdURjo6RGVmYXVsdEhhc2g8V2ViQ29yZTo6UmVzb3VyY2VDcnlwdG9ncmFwaGljRGlnZXN0Pjo6
aGFzaCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3IuaDoKKyAgICAgICAgKFdl
YkNvcmU6OmFkZCk6CisgICAgICAgIChXZWJDb3JlOjpDb2xvcjo6aGFzaCBjb25zdCk6IERlbGV0
ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3JIYXNoLmg6CisgICAgICAgIChX
VEY6OkNvbG9ySGFzaDo6aGFzaCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvRm9udC5j
cHA6CisgICAgICAgIChXZWJDb3JlOjphZGQpOgorICAgICAgICAoV2ViQ29yZTo6Q2hhcmFjdGVy
RmFsbGJhY2tNYXBLZXlIYXNoOjpoYXNoKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9G
b250Q2FjaGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6YWRkKToKKyAgICAgICAgKFdlYkNvcmU6
OkZvbnRQbGF0Zm9ybURhdGFDYWNoZUtleUhhc2g6Omhhc2gpOgorICAgICAgICAoV2ViQ29yZTo6
Rm9udENhc2NhZGVDYWNoZUtleUhhc2g6Omhhc2gpOiBEZWxldGVkLgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL0ZvbnRDYWNoZS5oOgorICAgICAgICAoV2ViQ29yZTo6YWRkKToKKyAgICAg
ICAgKFdlYkNvcmU6OkZvbnRDYXNjYWRlQ2FjaGVLZXlIYXNoOjpoYXNoKToKKyAgICAgICAgKiBw
bGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9Gb250RmFtaWx5U3BlY2lmaWNhdGlvbkNvcmVUZXh0LmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OmFkZCk6CisgICAgICAgIChXZWJDb3JlOjpGb250RmFtaWx5
U3BlY2lmaWNhdGlvbktleUhhc2g6Omhhc2gpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L2NvY29hL1N5c3RlbUZvbnREYXRhYmFzZUNvcmVUZXh0Lmg6CisgICAgICAgIChXZWJDb3JlOjph
ZGQpOgorICAgICAgICAoV2ViQ29yZTo6U3lzdGVtRm9udERhdGFiYXNlQ29yZVRleHQ6OkNhc2Nh
ZGVMaXN0UGFyYW1ldGVyczo6SGFzaDo6aGFzaCk6CisgICAgICAgIChXZWJDb3JlOjpTeXN0ZW1G
b250RGF0YWJhc2VDb3JlVGV4dDo6Q2FzY2FkZUxpc3RQYXJhbWV0ZXJzOjpoYXNoIGNvbnN0KTog
RGVsZXRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9mcmVldHlwZS9Gb250Q2FjaGVG
cmVlVHlwZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjphZGQpOgorICAgICAgICAoV2ViQ29yZTo6
RmFsbGJhY2tGb250RGVzY3JpcHRpb25LZXlIYXNoOjpoYXNoKToKKwogMjAyMi0wMi0yNyAgQ2hy
aXMgRHVtZXogIDxjZHVtZXpAYXBwbGUuY29tPgogCiAgICAgICAgIE9taXQgdGVtcGxhdGUgcGFy
YW1ldGVyIGZvciBTZXRGb3JTY29wZTw+IHZhcmlhYmxlcwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdC9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZwppbmRleCAzNTk4M2Q5ZTg5
MzA1NGEwMzIyOTg4ODYxZWNlYzUyYTZiNTIxMzY2Li44MTZjOTIxZjJiNDYzM2ExZTFjYWUyN2I4
YjIxYWY1MDRlYzljODY2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZworKysg
Yi9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZwpAQCAtMSwzICsxLDE5IEBACisyMDIyLTAyLTI3ICBD
aHJpcyBEdW1leiAgPGNkdW1lekBhcHBsZS5jb20+CisKKyAgICAgICAgQWRvcHQgdGhlIG1vZGVy
biBIYXNoZXIgbW9yZSB3aWRlbHkKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTIzNzI2MgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEp
LgorCisgICAgICAgICogTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlLmg6CisgICAg
ICAgIChXZWJLaXQ6Ok5ldHdvcmtDYWNoZTo6YWRkKToKKyAgICAgICAgKFdURjo6R2xvYmFsRnJh
bWVJREhhc2g6Omhhc2gpOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3JrQ2FjaGU6Okdsb2JhbEZy
YW1lSUQ6Omhhc2ggY29uc3QpOiBEZWxldGVkLgorICAgICAgICAqIFBsYXRmb3JtL0lQQy9TdHJp
bmdSZWZlcmVuY2UuY3BwOgorICAgICAgICAoSVBDOjpTdHJpbmdSZWZlcmVuY2U6Okhhc2g6Omhh
c2gpOgorICAgICAgICAqIFBsYXRmb3JtL0lQQy9TdHJpbmdSZWZlcmVuY2UuaDoKKyAgICAgICAg
KElQQzo6YWRkKToKKwogMjAyMi0wMi0yNyAgQ2hyaXMgRHVtZXogIDxjZHVtZXpAYXBwbGUuY29t
PgogCiAgICAgICAgIE9taXQgdGVtcGxhdGUgcGFyYW1ldGVyIGZvciBTZXRGb3JTY29wZTw+IHZh
cmlhYmxlcwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL01lc3NhZ2VQb3J0SWRlbnRp
Zmllci5oIGIvU291cmNlL1dlYkNvcmUvZG9tL01lc3NhZ2VQb3J0SWRlbnRpZmllci5oCmluZGV4
IDA0NmZjYTE0YjI3MWI1ZDdmMDYwZTc1NjUyNDY0NGMyYWNkOTQzNGMuLmFiNGZmMzdkMWQ4MzNj
ZWUxZDEyNWEyZjNjOGU5NDA0MzlkMGNiMzUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Rv
bS9NZXNzYWdlUG9ydElkZW50aWZpZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vTWVzc2Fn
ZVBvcnRJZGVudGlmaWVyLmgKQEAgLTM2LDggKzM2LDYgQEAgc3RydWN0IE1lc3NhZ2VQb3J0SWRl
bnRpZmllciB7CiAgICAgZW51bSBQb3J0SWRlbnRpZmllclR5cGUgeyB9OwogICAgIE9iamVjdElk
ZW50aWZpZXI8UG9ydElkZW50aWZpZXJUeXBlPiBwb3J0SWRlbnRpZmllcjsKIAotICAgIHVuc2ln
bmVkIGhhc2goKSBjb25zdDsKLQogICAgIHRlbXBsYXRlPGNsYXNzIEVuY29kZXI+IHZvaWQgZW5j
b2RlKEVuY29kZXImKSBjb25zdDsKICAgICB0ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPiBzdGF0aWMg
c3RkOjpvcHRpb25hbDxNZXNzYWdlUG9ydElkZW50aWZpZXI+IGRlY29kZShEZWNvZGVyJik7CiAK
QEAgLTQ2LDYgKzQ0LDExIEBAIHN0cnVjdCBNZXNzYWdlUG9ydElkZW50aWZpZXIgewogI2VuZGlm
CiB9OwogCitpbmxpbmUgdm9pZCBhZGQoSGFzaGVyJiBoYXNoZXIsIGNvbnN0IE1lc3NhZ2VQb3J0
SWRlbnRpZmllciYgaWRlbnRpZmllcikKK3sKKyAgICBhZGQoaGFzaGVyLCBpZGVudGlmaWVyLnBy
b2Nlc3NJZGVudGlmaWVyLCBpZGVudGlmaWVyLnBvcnRJZGVudGlmaWVyKTsKK30KKwogaW5saW5l
IGJvb2wgb3BlcmF0b3I9PShjb25zdCBNZXNzYWdlUG9ydElkZW50aWZpZXImIGEsIGNvbnN0IE1l
c3NhZ2VQb3J0SWRlbnRpZmllciYgYikKIHsKICAgICByZXR1cm4gYS5wcm9jZXNzSWRlbnRpZmll
ciA9PSBiLnByb2Nlc3NJZGVudGlmaWVyICYmICBhLnBvcnRJZGVudGlmaWVyID09IGIucG9ydElk
ZW50aWZpZXI7CkBAIC03MywxMSArNzYsNiBAQCBzdGQ6Om9wdGlvbmFsPE1lc3NhZ2VQb3J0SWRl
bnRpZmllcj4gTWVzc2FnZVBvcnRJZGVudGlmaWVyOjpkZWNvZGUoRGVjb2RlciYgZGVjbwogICAg
IHJldHVybiB7IHsgV1RGTW92ZSgqcHJvY2Vzc0lkZW50aWZpZXIpLCBXVEZNb3ZlKCpwb3J0SWRl
bnRpZmllcikgfSB9OwogfQogCi1pbmxpbmUgdW5zaWduZWQgTWVzc2FnZVBvcnRJZGVudGlmaWVy
OjpoYXNoKCkgY29uc3QKLXsKLSAgICByZXR1cm4gY29tcHV0ZUhhc2gocHJvY2Vzc0lkZW50aWZp
ZXIudG9VSW50NjQoKSwgcG9ydElkZW50aWZpZXIudG9VSW50NjQoKSk7Ci19Ci0KICNpZiAhTE9H
X0RJU0FCTEVECiAKIGlubGluZSBTdHJpbmcgTWVzc2FnZVBvcnRJZGVudGlmaWVyOjpsb2dTdHJp
bmcoKSBjb25zdApAQCAtOTIsNyArOTAsNyBAQCBpbmxpbmUgU3RyaW5nIE1lc3NhZ2VQb3J0SWRl
bnRpZmllcjo6bG9nU3RyaW5nKCkgY29uc3QKIG5hbWVzcGFjZSBXVEYgewogCiBzdHJ1Y3QgTWVz
c2FnZVBvcnRJZGVudGlmaWVySGFzaCB7Ci0gICAgc3RhdGljIHVuc2lnbmVkIGhhc2goY29uc3Qg
V2ViQ29yZTo6TWVzc2FnZVBvcnRJZGVudGlmaWVyJiBrZXkpIHsgcmV0dXJuIGtleS5oYXNoKCk7
IH0KKyAgICBzdGF0aWMgdW5zaWduZWQgaGFzaChjb25zdCBXZWJDb3JlOjpNZXNzYWdlUG9ydElk
ZW50aWZpZXImIGtleSkgeyByZXR1cm4gY29tcHV0ZUhhc2goa2V5KTsgfQogICAgIHN0YXRpYyBi
b29sIGVxdWFsKGNvbnN0IFdlYkNvcmU6Ok1lc3NhZ2VQb3J0SWRlbnRpZmllciYgYSwgY29uc3Qg
V2ViQ29yZTo6TWVzc2FnZVBvcnRJZGVudGlmaWVyJiBiKSB7IHJldHVybiBhID09IGI7IH0KICAg
ICBzdGF0aWMgY29uc3QgYm9vbCBzYWZlVG9Db21wYXJlVG9FbXB0eU9yRGVsZXRlZCA9IHRydWU7
CiB9OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaGlzdG9yeS9CYWNrRm9yd2FyZEl0ZW1J
ZGVudGlmaWVyLmggYi9Tb3VyY2UvV2ViQ29yZS9oaXN0b3J5L0JhY2tGb3J3YXJkSXRlbUlkZW50
aWZpZXIuaAppbmRleCBjM2E4ZWJlZDk3YmM3NTI3YTIzNWRkOGY3YWU5MzQ2MWQ1ZGRjMGZkLi5k
NWIzOTc1NzA1NzE2ZDExYzAwM2FlODU5NjQ4OTY5MmJmOWY0OTllIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9oaXN0b3J5L0JhY2tGb3J3YXJkSXRlbUlkZW50aWZpZXIuaAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9oaXN0b3J5L0JhY2tGb3J3YXJkSXRlbUlkZW50aWZpZXIuaApAQCAtMzcsNyAr
MzcsNiBAQCBzdHJ1Y3QgQmFja0ZvcndhcmRJdGVtSWRlbnRpZmllciB7CiAgICAgZW51bSBJdGVt
SWRlbnRpZmllclR5cGUgeyB9OwogICAgIE9iamVjdElkZW50aWZpZXI8SXRlbUlkZW50aWZpZXJU
eXBlPiBpdGVtSWRlbnRpZmllcjsKIAotICAgIHVuc2lnbmVkIGhhc2goKSBjb25zdDsKICAgICBl
eHBsaWNpdCBvcGVyYXRvciBib29sKCkgY29uc3QgeyByZXR1cm4gcHJvY2Vzc0lkZW50aWZpZXIg
JiYgaXRlbUlkZW50aWZpZXI7IH0KIAogICAgIHRlbXBsYXRlPGNsYXNzIEVuY29kZXI+IHZvaWQg
ZW5jb2RlKEVuY29kZXImKSBjb25zdDsKQEAgLTUyLDYgKzUxLDExIEBAIHN0cnVjdCBCYWNrRm9y
d2FyZEl0ZW1JZGVudGlmaWVyIHsKICNlbmRpZgogfTsKIAoraW5saW5lIHZvaWQgYWRkKEhhc2hl
ciYgaGFzaGVyLCBjb25zdCBCYWNrRm9yd2FyZEl0ZW1JZGVudGlmaWVyJiBpZGVudGlmaWVyKQor
eworICAgIGFkZChoYXNoZXIsIGlkZW50aWZpZXIucHJvY2Vzc0lkZW50aWZpZXIsIGlkZW50aWZp
ZXIuaXRlbUlkZW50aWZpZXIpOworfQorCiAjaWYgIUxPR19ESVNBQkxFRAogCiBpbmxpbmUgY29u
c3QgY2hhciogQmFja0ZvcndhcmRJdGVtSWRlbnRpZmllcjo6bG9nU3RyaW5nKCkgY29uc3QKQEAg
LTk2LDE3ICsxMDAsMTIgQEAgc3RkOjpvcHRpb25hbDxCYWNrRm9yd2FyZEl0ZW1JZGVudGlmaWVy
PiBCYWNrRm9yd2FyZEl0ZW1JZGVudGlmaWVyOjpkZWNvZGUoRGVjb2QKICAgICByZXR1cm4gcmVz
dWx0OwogfQogCi1pbmxpbmUgdW5zaWduZWQgQmFja0ZvcndhcmRJdGVtSWRlbnRpZmllcjo6aGFz
aCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIGNvbXB1dGVIYXNoKHByb2Nlc3NJZGVudGlmaWVyLnRv
VUludDY0KCksIGl0ZW1JZGVudGlmaWVyLnRvVUludDY0KCkpOwotfQotCiB9IC8vIG5hbWVzcGFj
ZSBXZWJDb3JlCiAKIG5hbWVzcGFjZSBXVEYgewogCiBzdHJ1Y3QgQmFja0ZvcndhcmRJdGVtSWRl
bnRpZmllckhhc2ggewotICAgIHN0YXRpYyB1bnNpZ25lZCBoYXNoKGNvbnN0IFdlYkNvcmU6OkJh
Y2tGb3J3YXJkSXRlbUlkZW50aWZpZXImIGtleSkgeyByZXR1cm4ga2V5Lmhhc2goKTsgfQorICAg
IHN0YXRpYyB1bnNpZ25lZCBoYXNoKGNvbnN0IFdlYkNvcmU6OkJhY2tGb3J3YXJkSXRlbUlkZW50
aWZpZXImIGtleSkgeyByZXR1cm4gY29tcHV0ZUhhc2goa2V5KTsgfQogICAgIHN0YXRpYyBib29s
IGVxdWFsKGNvbnN0IFdlYkNvcmU6OkJhY2tGb3J3YXJkSXRlbUlkZW50aWZpZXImIGEsIGNvbnN0
IFdlYkNvcmU6OkJhY2tGb3J3YXJkSXRlbUlkZW50aWZpZXImIGIpIHsgcmV0dXJuIGEgPT0gYjsg
fQogICAgIHN0YXRpYyBjb25zdCBib29sIHNhZmVUb0NvbXBhcmVUb0VtcHR5T3JEZWxldGVkID0g
dHJ1ZTsKIH07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvUmVzb3VyY2VDcnlw
dG9ncmFwaGljRGlnZXN0LmggYi9Tb3VyY2UvV2ViQ29yZS9sb2FkZXIvUmVzb3VyY2VDcnlwdG9n
cmFwaGljRGlnZXN0LmgKaW5kZXggODNiODYxM2NmZGEyMzI5YWUzMGJiZjZhYmMxNGI5OWQ0NDIz
N2IwMi4uZjk5MmE4ZDdkNDI1M2Q2ZTU4YTFlMzM4Yjc4MGMwZDY2ZjM3NDY3MyAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvbG9hZGVyL1Jlc291cmNlQ3J5cHRvZ3JhcGhpY0RpZ2VzdC5oCisr
KyBiL1NvdXJjZS9XZWJDb3JlL2xvYWRlci9SZXNvdXJjZUNyeXB0b2dyYXBoaWNEaWdlc3QuaApA
QCAtNjAsNiArNjAsMTEgQEAgc3RydWN0IFJlc291cmNlQ3J5cHRvZ3JhcGhpY0RpZ2VzdCB7CiAg
ICAgfQogfTsKIAoraW5saW5lIHZvaWQgYWRkKEhhc2hlciYgaGFzaGVyLCBjb25zdCBSZXNvdXJj
ZUNyeXB0b2dyYXBoaWNEaWdlc3QmIGRpZ2VzdCkKK3sKKyAgICBhZGQoaGFzaGVyLCBkaWdlc3Qu
YWxnb3JpdGhtLCBkaWdlc3QudmFsdWUpOworfQorCiBzdHJ1Y3QgRW5jb2RlZFJlc291cmNlQ3J5
cHRvZ3JhcGhpY0RpZ2VzdCB7CiAgICAgdXNpbmcgQWxnb3JpdGhtID0gUmVzb3VyY2VDcnlwdG9n
cmFwaGljRGlnZXN0OjpBbGdvcml0aG07CiAgICAgCkBAIC04NSw3ICs5MCw3IEBAIG5hbWVzcGFj
ZSBXVEYgewogdGVtcGxhdGU8PiBzdHJ1Y3QgRGVmYXVsdEhhc2g8V2ViQ29yZTo6UmVzb3VyY2VD
cnlwdG9ncmFwaGljRGlnZXN0PiB7CiAgICAgc3RhdGljIHVuc2lnbmVkIGhhc2goY29uc3QgV2Vi
Q29yZTo6UmVzb3VyY2VDcnlwdG9ncmFwaGljRGlnZXN0JiBkaWdlc3QpCiAgICAgewotICAgICAg
ICByZXR1cm4gcGFpckludEhhc2goaW50SGFzaChzdGF0aWNfY2FzdDx1bnNpZ25lZD4oZGlnZXN0
LmFsZ29yaXRobSkpLCBTdHJpbmdIYXNoZXI6OmNvbXB1dGVIYXNoKGRpZ2VzdC52YWx1ZS5kYXRh
KCksIGRpZ2VzdC52YWx1ZS5zaXplKCkpKTsKKyAgICAgICAgcmV0dXJuIGNvbXB1dGVIYXNoKGRp
Z2VzdCk7CiAgICAgfQogICAgIHN0YXRpYyBib29sIGVxdWFsKGNvbnN0IFdlYkNvcmU6OlJlc291
cmNlQ3J5cHRvZ3JhcGhpY0RpZ2VzdCYgYSwgY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VDcnlwdG9n
cmFwaGljRGlnZXN0JiBiKQogICAgIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL0NvbG9yLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9D
b2xvci5oCmluZGV4IDgzMWRhNzhjNzMxYjBkNWY3ODExYzA5NzgzOGQ2ZGVjYjkyMWQ4OWIuLjFj
MDUzMDljOGIxNDljNTA4MjgwMzczYTkzNzZjOTZiNWQwYjAyNDcgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0NvbG9yLmgKKysrIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3IuaApAQCAtODQsOCArODQsNiBAQCBwdWJsaWM6CiAKICAg
ICB+Q29sb3IoKTsKIAotICAgIHVuc2lnbmVkIGhhc2goKSBjb25zdDsKLQogICAgIGJvb2wgaXNW
YWxpZCgpIGNvbnN0OwogICAgIGJvb2wgaXNTZW1hbnRpYygpIGNvbnN0OwogICAgIGJvb2wgdXNl
c0NvbG9yRnVuY3Rpb25TZXJpYWxpemF0aW9uKCkgY29uc3Q7CkBAIC0xODAsNiArMTc4LDggQEAg
cHVibGljOgogICAgIFN0cmluZyBkZWJ1Z0Rlc2NyaXB0aW9uKCkgY29uc3Q7CiAKIHByaXZhdGU6
CisgICAgZnJpZW5kIHZvaWQgYWRkKEhhc2hlciYsIGNvbnN0IENvbG9yJik7CisKICAgICBjbGFz
cyBPdXRPZkxpbmVDb21wb25lbnRzIDogcHVibGljIFRocmVhZFNhZmVSZWZDb3VudGVkPE91dE9m
TGluZUNvbXBvbmVudHM+IHsKICAgICBwdWJsaWM6CiAgICAgICAgIHN0YXRpYyBSZWY8T3V0T2ZM
aW5lQ29tcG9uZW50cz4gY3JlYXRlKENvbG9yQ29tcG9uZW50czxmbG9hdCwgND4gY29tcG9uZW50
cykKQEAgLTI1Nyw2ICsyNTcsMTQgQEAgcHJpdmF0ZToKICAgICB1aW50NjRfdCBtX2NvbG9yQW5k
RmxhZ3MgeyBpbnZhbGlkQ29sb3JBbmRGbGFncyB9OwogfTsKIAoraW5saW5lIHZvaWQgYWRkKEhh
c2hlciYgaGFzaGVyLCBjb25zdCBDb2xvciYgY29sb3IpCit7CisgICAgaWYgKGNvbG9yLmlzT3V0
T2ZMaW5lKCkpCisgICAgICAgIGFkZChoYXNoZXIsIGNvbG9yLmFzT3V0T2ZMaW5lKCkudW5yZXNv
bHZlZENvbXBvbmVudHMoKSwgY29sb3IuY29sb3JTcGFjZSgpLCBjb2xvci5mbGFncygpLnRvUmF3
KCkpOworICAgIGVsc2UKKyAgICAgICAgYWRkKGhhc2hlciwgY29sb3IuYXNQYWNrZWRJbmxpbmUo
KS52YWx1ZSwgY29sb3IuZmxhZ3MoKS50b1JhdygpKTsKK30KKwogYm9vbCBvcGVyYXRvcj09KGNv
bnN0IENvbG9yJiwgY29uc3QgQ29sb3ImKTsKIGJvb2wgb3BlcmF0b3IhPShjb25zdCBDb2xvciYs
IGNvbnN0IENvbG9yJik7CiAKQEAgLTM2NSwxMyArMzczLDYgQEAgaW5saW5lIENvbG9yOjp+Q29s
b3IoKQogICAgICAgICBhc091dE9mTGluZSgpLmRlcmVmKCk7CiB9CiAKLWlubGluZSB1bnNpZ25l
ZCBDb2xvcjo6aGFzaCgpIGNvbnN0Ci17Ci0gICAgaWYgKGlzT3V0T2ZMaW5lKCkpCi0gICAgICAg
IHJldHVybiBjb21wdXRlSGFzaChhc091dE9mTGluZSgpLnVucmVzb2x2ZWRDb21wb25lbnRzKCks
IGNvbG9yU3BhY2UoKSwgZmxhZ3MoKS50b1JhdygpKTsKLSAgICByZXR1cm4gY29tcHV0ZUhhc2go
YXNQYWNrZWRJbmxpbmUoKS52YWx1ZSwgZmxhZ3MoKS50b1JhdygpKTsKLX0KLQogaW5saW5lIGJv
b2wgQ29sb3I6OmlzVmFsaWQoKSBjb25zdAogewogICAgIHJldHVybiBmbGFncygpLmNvbnRhaW5z
KEZsYWdzSW5jbHVkaW5nUHJpdmF0ZTo6VmFsaWQpOwpAQCAtNjI3LDEyICs2MjgsNiBAQCB0ZW1w
bGF0ZTxjbGFzcyBEZWNvZGVyPiBzdGQ6Om9wdGlvbmFsPENvbG9yPiBDb2xvcjo6ZGVjb2RlKERl
Y29kZXImIGRlY29kZXIpCiAgICAgcmV0dXJuIENvbG9yIHsgYXNTUkdCQShQYWNrZWRDb2xvcjo6
UkdCQSB7IHZhbHVlIH0pLCBmbGFncyB9OwogfQogCi1pbmxpbmUgdm9pZCBhZGQoSGFzaGVyJiBo
YXNoZXIsIGNvbnN0IENvbG9yJiBjb2xvcikKLXsKLSAgICAvLyBGSVhNRTogV2UgZG9uJ3Qgd2Fu
dCB0byBoYXNoIGEgaGFzaDsgZG8gYmV0dGVyLgotICAgIGFkZChoYXNoZXIsIGNvbG9yLmhhc2go
KSk7Ci19Ci0KIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAogbmFtZXNwYWNlIFdURiB7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Db2xvckhhc2guaCBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0NvbG9ySGFzaC5oCmluZGV4IDNkMmM5YzU1
MzZmYmUxODM1MzNhZjg4MWUwZDFjZjBhNDNkODgyZTYuLmRhMzhiZjRlMzZhODFkZTg5NDdjMjZj
ZmYxZmUzZWNjNmM3MDY3YTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL0NvbG9ySGFzaC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L0NvbG9ySGFzaC5oCkBAIC0zMSw3ICszMSw3IEBACiBuYW1lc3BhY2UgV1RGIHsKIAogc3RydWN0
IENvbG9ySGFzaCB7Ci0gICAgc3RhdGljIHVuc2lnbmVkIGhhc2goY29uc3QgV2ViQ29yZTo6Q29s
b3ImIGtleSkgeyByZXR1cm4ga2V5Lmhhc2goKTsgfQorICAgIHN0YXRpYyB1bnNpZ25lZCBoYXNo
KGNvbnN0IFdlYkNvcmU6OkNvbG9yJiBrZXkpIHsgcmV0dXJuIGNvbXB1dGVIYXNoKGtleSk7IH0K
ICAgICBzdGF0aWMgYm9vbCBlcXVhbChjb25zdCBXZWJDb3JlOjpDb2xvciYgYSwgY29uc3QgV2Vi
Q29yZTo6Q29sb3ImIGIpIHsgcmV0dXJuIGEgPT0gYjsgfQogICAgIHN0YXRpYyBjb25zdCBib29s
IHNhZmVUb0NvbXBhcmVUb0VtcHR5T3JEZWxldGVkID0gdHJ1ZTsKIH07CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250LmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnQuY3BwCmluZGV4IGM0NTA4YmQ3NWFiMjg1ZTIwNTI5NDFi
MzNiMmE0NWI0NWQwNWZiODAuLjNlNzdhYjc5NGNkNTFhZjYyZTI3MGUzNWFjYWJjYmE5ZjhmNTEw
YTggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnQuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnQuY3BwCkBAIC01NTks
MTMgKzU1OSwxOCBAQCBzdHJ1Y3QgQ2hhcmFjdGVyRmFsbGJhY2tNYXBLZXkgewogICAgIGJvb2wg
aXNGb3JQbGF0Zm9ybUZvbnQgeyBmYWxzZSB9OwogfTsKIAoraW5saW5lIHZvaWQgYWRkKEhhc2hl
ciYgaGFzaGVyLCBjb25zdCBDaGFyYWN0ZXJGYWxsYmFja01hcEtleSYga2V5KQoreworICAgIGFk
ZChoYXNoZXIsIGtleS5sb2NhbGUsIGtleS5jaGFyYWN0ZXIsIGtleS5pc0ZvclBsYXRmb3JtRm9u
dCk7Cit9CisKIGlubGluZSBib29sIG9wZXJhdG9yPT0oY29uc3QgQ2hhcmFjdGVyRmFsbGJhY2tN
YXBLZXkmIGEsIGNvbnN0IENoYXJhY3RlckZhbGxiYWNrTWFwS2V5JiBiKQogewogICAgIHJldHVy
biBhLmxvY2FsZSA9PSBiLmxvY2FsZSAmJiBhLmNoYXJhY3RlciA9PSBiLmNoYXJhY3RlciAmJiBh
LmlzRm9yUGxhdGZvcm1Gb250ID09IGIuaXNGb3JQbGF0Zm9ybUZvbnQ7CiB9CiAKIHN0cnVjdCBD
aGFyYWN0ZXJGYWxsYmFja01hcEtleUhhc2ggewotICAgIHN0YXRpYyB1bnNpZ25lZCBoYXNoKGNv
bnN0IENoYXJhY3RlckZhbGxiYWNrTWFwS2V5JiBrZXkpIHsgcmV0dXJuIGNvbXB1dGVIYXNoKGtl
eS5sb2NhbGUsIGtleS5jaGFyYWN0ZXIsIGtleS5pc0ZvclBsYXRmb3JtRm9udCk7IH0KKyAgICBz
dGF0aWMgdW5zaWduZWQgaGFzaChjb25zdCBDaGFyYWN0ZXJGYWxsYmFja01hcEtleSYga2V5KSB7
IHJldHVybiBjb21wdXRlSGFzaChrZXkpOyB9CiAgICAgc3RhdGljIGJvb2wgZXF1YWwoY29uc3Qg
Q2hhcmFjdGVyRmFsbGJhY2tNYXBLZXkmIGEsIGNvbnN0IENoYXJhY3RlckZhbGxiYWNrTWFwS2V5
JiBiKSB7IHJldHVybiBhID09IGI7IH0KICAgICBzdGF0aWMgY29uc3QgYm9vbCBzYWZlVG9Db21w
YXJlVG9FbXB0eU9yRGVsZXRlZCA9IHRydWU7CiB9OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udENhY2hlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL0ZvbnRDYWNoZS5jcHAKaW5kZXggYjI1ZTdkZmI5N2ExMDI5OTdiMGZhZTMz
ZDc1MzgxNWY4OWEzMDNlZC4uMWJmYTNmZDVmMmIzYTI2YTlhNGFlZTk1NTNiNjJiNjg2ZWJlMjI0
MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udENhY2hl
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250Q2FjaGUuY3Bw
CkBAIC04Niw2ICs4NiwxMSBAQCBzdHJ1Y3QgRm9udFBsYXRmb3JtRGF0YUNhY2hlS2V5IHsKICAg
ICBGb250Q3JlYXRpb25Db250ZXh0IGZvbnRDcmVhdGlvbkNvbnRleHQ7CiB9OwogCitpbmxpbmUg
dm9pZCBhZGQoSGFzaGVyJiBoYXNoZXIsIGNvbnN0IEZvbnRQbGF0Zm9ybURhdGFDYWNoZUtleSYg
a2V5KQoreworICAgIGFkZChoYXNoZXIsIGtleS5kZXNjcmlwdGlvbktleSwga2V5LmZhbWlseSwg
a2V5LmZvbnRDcmVhdGlvbkNvbnRleHQpOworfQorCiBzdGF0aWMgYm9vbCBvcGVyYXRvcj09KGNv
bnN0IEZvbnRQbGF0Zm9ybURhdGFDYWNoZUtleSYgYSwgY29uc3QgRm9udFBsYXRmb3JtRGF0YUNh
Y2hlS2V5JiBiKQogewogICAgIHJldHVybiBhLmRlc2NyaXB0aW9uS2V5ID09IGIuZGVzY3JpcHRp
b25LZXkKQEAgLTk0LDcgKzk5LDcgQEAgc3RhdGljIGJvb2wgb3BlcmF0b3I9PShjb25zdCBGb250
UGxhdGZvcm1EYXRhQ2FjaGVLZXkmIGEsIGNvbnN0IEZvbnRQbGF0Zm9ybURhdGEKIH0KIAogc3Ry
dWN0IEZvbnRQbGF0Zm9ybURhdGFDYWNoZUtleUhhc2ggewotICAgIHN0YXRpYyB1bnNpZ25lZCBo
YXNoKGNvbnN0IEZvbnRQbGF0Zm9ybURhdGFDYWNoZUtleSYga2V5KSB7IHJldHVybiBjb21wdXRl
SGFzaChrZXkuZGVzY3JpcHRpb25LZXksIGtleS5mYW1pbHksIGtleS5mb250Q3JlYXRpb25Db250
ZXh0KTsgfQorICAgIHN0YXRpYyB1bnNpZ25lZCBoYXNoKGNvbnN0IEZvbnRQbGF0Zm9ybURhdGFD
YWNoZUtleSYga2V5KSB7IHJldHVybiBjb21wdXRlSGFzaChrZXkpOyB9CiAgICAgc3RhdGljIGJv
b2wgZXF1YWwoY29uc3QgRm9udFBsYXRmb3JtRGF0YUNhY2hlS2V5JiBhLCBjb25zdCBGb250UGxh
dGZvcm1EYXRhQ2FjaGVLZXkmIGIpIHsgcmV0dXJuIGEgPT0gYjsgfQogICAgIHN0YXRpYyBjb25z
dGV4cHIgYm9vbCBzYWZlVG9Db21wYXJlVG9FbXB0eU9yRGVsZXRlZCA9IHRydWU7CiB9OwpAQCAt
MzYyLDExICszNjcsNiBAQCBib29sIG9wZXJhdG9yPT0oY29uc3QgRm9udENhc2NhZGVDYWNoZUtl
eSYgYSwgY29uc3QgRm9udENhc2NhZGVDYWNoZUtleSYgYikKICAgICAgICAgJiYgYS5mYW1pbGll
cyA9PSBiLmZhbWlsaWVzOwogfQogCi11bnNpZ25lZCBGb250Q2FzY2FkZUNhY2hlS2V5SGFzaDo6
aGFzaChjb25zdCBGb250Q2FzY2FkZUNhY2hlS2V5JiBrZXkpCi17Ci0gICAgcmV0dXJuIGNvbXB1
dGVIYXNoKGtleS5mb250RGVzY3JpcHRpb25LZXksIGtleS5mb250U2VsZWN0b3JJZCwga2V5LmZv
bnRTZWxlY3RvclZlcnNpb24sIGtleS5mYW1pbGllcyk7Ci19Ci0KIHZvaWQgRm9udENhY2hlOjpp
bnZhbGlkYXRlRm9udENhc2NhZGVDYWNoZSgpCiB7CiAgICAgbV9mb250Q2FzY2FkZUNhY2hlLmNs
ZWFyKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250
Q2FjaGUuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRDYWNoZS5oCmlu
ZGV4IDc2YmI5ZjNiYmI1MTRiMDE0NWI3YTllMTc0NzczYzUzNDcxMzVmYTkuLjg5YjRlMTkyN2E3
OGUwM2YzNDgzNWE4NmNjOTAyYjFhMjY3YWEyNjkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRDYWNoZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL0ZvbnRDYWNoZS5oCkBAIC0yNTcsNiArMjU3LDExIEBAIHN0cnVjdCBGb250
Q2FzY2FkZUNhY2hlS2V5IHsKICAgICB1bnNpZ25lZCBmb250U2VsZWN0b3JWZXJzaW9uOwogfTsK
IAoraW5saW5lIHZvaWQgYWRkKEhhc2hlciYgaGFzaGVyLCBjb25zdCBGb250Q2FzY2FkZUNhY2hl
S2V5JiBrZXkpCit7CisgICAgYWRkKGhhc2hlciwga2V5LmZvbnREZXNjcmlwdGlvbktleSwga2V5
LmZhbWlsaWVzLCBrZXkuZm9udFNlbGVjdG9ySWQsIGtleS5mb250U2VsZWN0b3JWZXJzaW9uKTsK
K30KKwogYm9vbCBvcGVyYXRvcj09KGNvbnN0IEZvbnRDYXNjYWRlQ2FjaGVLZXkmLCBjb25zdCBG
b250Q2FzY2FkZUNhY2hlS2V5Jik7CiAKIHN0cnVjdCBGb250Q2FzY2FkZUNhY2hlRW50cnkgewpA
QCAtMjY3LDcgKzI3Miw3IEBAIHN0cnVjdCBGb250Q2FzY2FkZUNhY2hlRW50cnkgewogfTsKIAog
c3RydWN0IEZvbnRDYXNjYWRlQ2FjaGVLZXlIYXNoIHsKLSAgICBzdGF0aWMgdW5zaWduZWQgaGFz
aChjb25zdCBGb250Q2FzY2FkZUNhY2hlS2V5Jik7CisgICAgc3RhdGljIHVuc2lnbmVkIGhhc2go
Y29uc3QgRm9udENhc2NhZGVDYWNoZUtleSYga2V5KSB7IHJldHVybiBjb21wdXRlSGFzaChrZXkp
OyB9CiAgICAgc3RhdGljIGJvb2wgZXF1YWwoY29uc3QgRm9udENhc2NhZGVDYWNoZUtleSYgYSwg
Y29uc3QgRm9udENhc2NhZGVDYWNoZUtleSYgYikgeyByZXR1cm4gYSA9PSBiOyB9CiAgICAgc3Rh
dGljIGNvbnN0ZXhwciBib29sIHNhZmVUb0NvbXBhcmVUb0VtcHR5T3JEZWxldGVkID0gZmFsc2U7
CiB9OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2Ev
Rm9udEZhbWlseVNwZWNpZmljYXRpb25Db3JlVGV4dC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jb2NvYS9Gb250RmFtaWx5U3BlY2lmaWNhdGlvbkNvcmVUZXh0LmNwcApp
bmRleCAzYjRkYTRmNTI3YmM4NGU1YTQ3MTY4YTk5NDZlN2ZiNjg3NzRlN2UyLi41MjA0OTViYzc5
Y2MzYjE2ZGM3ZWVhYmE4MmE0MDJkYjljMzc4YWUwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9Gb250RmFtaWx5U3BlY2lmaWNhdGlvbkNvcmVUZXh0
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9Gb250RmFt
aWx5U3BlY2lmaWNhdGlvbkNvcmVUZXh0LmNwcApAQCAtNjQsOCArNjQsMTQgQEAgc3RydWN0IEZv
bnRGYW1pbHlTcGVjaWZpY2F0aW9uS2V5IHsKICAgICBib29sIGlzSGFzaFRhYmxlRGVsZXRlZFZh
bHVlKCkgY29uc3QgeyByZXR1cm4gZm9udERlc2NyaXB0aW9uS2V5LmlzSGFzaFRhYmxlRGVsZXRl
ZFZhbHVlKCk7IH0KIH07CiAKK2lubGluZSB2b2lkIGFkZChIYXNoZXImIGhhc2hlciwgY29uc3Qg
Rm9udEZhbWlseVNwZWNpZmljYXRpb25LZXkmIGtleSkKK3sKKyAgICAvLyBGSVhNRTogSWRlYWxs
eSwgd2Ugd291bGRuJ3QgYmUgaGFzaGluZyBhIGhhc2guCisgICAgYWRkKGhhc2hlciwgc2FmZUNG
SGFzaChrZXkuZm9udERlc2NyaXB0b3IuZ2V0KCkpLCBrZXkuZm9udERlc2NyaXB0aW9uS2V5KTsK
K30KKwogc3RydWN0IEZvbnRGYW1pbHlTcGVjaWZpY2F0aW9uS2V5SGFzaCB7Ci0gICAgc3RhdGlj
IHVuc2lnbmVkIGhhc2goY29uc3QgRm9udEZhbWlseVNwZWNpZmljYXRpb25LZXkmIGtleSkgeyBy
ZXR1cm4gY29tcHV0ZUhhc2goc2FmZUNGSGFzaChrZXkuZm9udERlc2NyaXB0b3IuZ2V0KCkpLCBr
ZXkuZm9udERlc2NyaXB0aW9uS2V5KTsgfQorICAgIHN0YXRpYyB1bnNpZ25lZCBoYXNoKGNvbnN0
IEZvbnRGYW1pbHlTcGVjaWZpY2F0aW9uS2V5JiBrZXkpIHsgcmV0dXJuIGNvbXB1dGVIYXNoKGtl
eSk7IH0KICAgICBzdGF0aWMgYm9vbCBlcXVhbChjb25zdCBGb250RmFtaWx5U3BlY2lmaWNhdGlv
bktleSYgYSwgY29uc3QgRm9udEZhbWlseVNwZWNpZmljYXRpb25LZXkmIGIpIHsgcmV0dXJuIGEg
PT0gYjsgfQogICAgIHN0YXRpYyBjb25zdCBib29sIHNhZmVUb0NvbXBhcmVUb0VtcHR5T3JEZWxl
dGVkID0gdHJ1ZTsKIH07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jb2NvYS9TeXN0ZW1Gb250RGF0YWJhc2VDb3JlVGV4dC5oIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvU3lzdGVtRm9udERhdGFiYXNlQ29yZVRleHQuaAppbmRl
eCA5YWQxZTBjYzQ1MGYwZWFhODI5ODE3MzU1OTc4MDBhYzA4MDQ5NmQ0Li41ZDMzNWZjMjRlNzUz
MTlkNWE4MDMzZDU0MjljYTEyN2Q2MTlkYWYyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9TeXN0ZW1Gb250RGF0YWJhc2VDb3JlVGV4dC5oCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NvY29hL1N5c3RlbUZvbnREYXRhYmFz
ZUNvcmVUZXh0LmgKQEAgLTcwLDEzICs3MCw4IEBAIHB1YmxpYzoKICAgICAgICAgICAgICAgICAm
JiBpdGFsaWMgPT0gb3RoZXIuaXRhbGljOwogICAgICAgICB9CiAKLSAgICAgICAgdW5zaWduZWQg
aGFzaCgpIGNvbnN0Ci0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBjb21wdXRlSGFzaChm
b250TmFtZSwgbG9jYWxlLCB3ZWlnaHQsIHdpZHRoLCBzaXplLCBhbGxvd1VzZXJJbnN0YWxsZWRG
b250cywgaXRhbGljKTsKLSAgICAgICAgfQotCiAgICAgICAgIHN0cnVjdCBIYXNoIHsKLSAgICAg
ICAgICAgIHN0YXRpYyB1bnNpZ25lZCBoYXNoKGNvbnN0IENhc2NhZGVMaXN0UGFyYW1ldGVycyYg
cGFyYW1ldGVycykgeyByZXR1cm4gcGFyYW1ldGVycy5oYXNoKCk7IH0KKyAgICAgICAgICAgIHN0
YXRpYyB1bnNpZ25lZCBoYXNoKGNvbnN0IENhc2NhZGVMaXN0UGFyYW1ldGVycyYpOwogICAgICAg
ICAgICAgc3RhdGljIGJvb2wgZXF1YWwoY29uc3QgQ2FzY2FkZUxpc3RQYXJhbWV0ZXJzJiBhLCBj
b25zdCBDYXNjYWRlTGlzdFBhcmFtZXRlcnMmIGIpIHsgcmV0dXJuIGEgPT0gYjsgfQogICAgICAg
ICAgICAgc3RhdGljIGNvbnN0IGJvb2wgc2FmZVRvQ29tcGFyZVRvRW1wdHlPckRlbGV0ZWQgPSB0
cnVlOwogICAgICAgICB9OwpAQCAtMTI1LDQgKzEyMCwxNCBAQCBwcml2YXRlOgogICAgIEhhc2hN
YXA8U3RyaW5nLCBTdHJpbmc+IG1fbW9ub3NwYWNlRmFtaWxpZXM7CiB9OwogCitpbmxpbmUgdm9p
ZCBhZGQoSGFzaGVyJiBoYXNoZXIsIGNvbnN0IFN5c3RlbUZvbnREYXRhYmFzZUNvcmVUZXh0OjpD
YXNjYWRlTGlzdFBhcmFtZXRlcnMmIHBhcmFtZXRlcnMpCit7CisgICAgYWRkKGhhc2hlciwgcGFy
YW1ldGVycy5mb250TmFtZSwgcGFyYW1ldGVycy5sb2NhbGUsIHBhcmFtZXRlcnMud2VpZ2h0LCBw
YXJhbWV0ZXJzLndpZHRoLCBwYXJhbWV0ZXJzLnNpemUsIHBhcmFtZXRlcnMuYWxsb3dVc2VySW5z
dGFsbGVkRm9udHMsIHBhcmFtZXRlcnMuaXRhbGljKTsKIH0KKworaW5saW5lIHVuc2lnbmVkIFN5
c3RlbUZvbnREYXRhYmFzZUNvcmVUZXh0OjpDYXNjYWRlTGlzdFBhcmFtZXRlcnM6Okhhc2g6Omhh
c2goY29uc3QgQ2FzY2FkZUxpc3RQYXJhbWV0ZXJzJiBwYXJhbWV0ZXJzKQoreworICAgIHJldHVy
biBjb21wdXRlSGFzaChwYXJhbWV0ZXJzKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZnJlZXR5cGUvRm9u
dENhY2hlRnJlZVR5cGUuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZnJl
ZXR5cGUvRm9udENhY2hlRnJlZVR5cGUuY3BwCmluZGV4IDY2MWRlZDc0ZjliOTg3NzZmYjJmOGNl
MjhmNzZlZDMxZDBjM2FkODcuLmI5M2JjMzRjYzRkNGEzNDRjYjQxMmVjNzFlZjNjODFkZGU3NTA5
ZDIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZyZWV0eXBl
L0ZvbnRDYWNoZUZyZWVUeXBlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9mcmVldHlwZS9Gb250Q2FjaGVGcmVlVHlwZS5jcHAKQEAgLTIyNSw4ICsyMjUsMTMgQEAg
c3RydWN0IEZhbGxiYWNrRm9udERlc2NyaXB0aW9uS2V5IHsKIAogfTsKIAoraW5saW5lIHZvaWQg
YWRkKEhhc2hlciYgaGFzaGVyLCBjb25zdCBGYWxsYmFja0ZvbnREZXNjcmlwdGlvbktleSYga2V5
KQoreworICAgIGFkZChoYXNoZXIsIGtleS5kZXNjcmlwdGlvbktleSwga2V5LmNvbG9yZWRGb250
KTsKK30KKwogc3RydWN0IEZhbGxiYWNrRm9udERlc2NyaXB0aW9uS2V5SGFzaCB7Ci0gICAgc3Rh
dGljIHVuc2lnbmVkIGhhc2goY29uc3QgRmFsbGJhY2tGb250RGVzY3JpcHRpb25LZXkmIGtleSkg
eyByZXR1cm4gY29tcHV0ZUhhc2goa2V5LmRlc2NyaXB0aW9uS2V5LCBrZXkuY29sb3JlZEZvbnQp
OyB9CisgICAgc3RhdGljIHVuc2lnbmVkIGhhc2goY29uc3QgRmFsbGJhY2tGb250RGVzY3JpcHRp
b25LZXkmIGtleSkgeyByZXR1cm4gY29tcHV0ZUhhc2goa2V5KTsgfQogICAgIHN0YXRpYyBib29s
IGVxdWFsKGNvbnN0IEZhbGxiYWNrRm9udERlc2NyaXB0aW9uS2V5JiBhLCBjb25zdCBGYWxsYmFj
a0ZvbnREZXNjcmlwdGlvbktleSYgYikgeyByZXR1cm4gYSA9PSBiOyB9CiAgICAgc3RhdGljIGNv
bnN0IGJvb2wgc2FmZVRvQ29tcGFyZVRvRW1wdHlPckRlbGV0ZWQgPSB0cnVlOwogfTsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlLmgg
Yi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZS5oCmluZGV4
IDkwNDM0N2YwNTIwNTAyMzcxNmM2ZDZiZDUxMDg2MGVmMzc0MTMzNjAuLjQ5NGNlOTlhNTY3MDc5
ZDAzZjhmNDIyNWY2NDJhZjJkNWQ3MWJkYzggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvTmV0
d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlLmgKKysrIGIvU291cmNlL1dlYktpdC9OZXR3
b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3JrQ2FjaGUuaApAQCAtMzUsNiArMzUsNyBAQAogI2luY2x1
ZGUgPFdlYkNvcmUvUmVzb3VyY2VSZXNwb25zZS5oPgogI2luY2x1ZGUgPHBhbC9TZXNzaW9uSUQu
aD4KICNpbmNsdWRlIDx3dGYvQ29tcGxldGlvbkhhbmRsZXIuaD4KKyNpbmNsdWRlIDx3dGYvSGFz
aGVyLmg+CiAjaW5jbHVkZSA8d3RmL09wdGlvblNldC5oPgogI2luY2x1ZGUgPHd0Zi9TZWNvbmRz
Lmg+CiAjaW5jbHVkZSA8d3RmL1dlYWtIYXNoU2V0Lmg+CkBAIC01MywxMyArNTQsMTEgQEAgc3Ry
dWN0IEdsb2JhbEZyYW1lSUQgewogICAgIFdlYlBhZ2VQcm94eUlkZW50aWZpZXIgd2ViUGFnZVBy
b3h5SUQ7CiAgICAgV2ViQ29yZTo6UGFnZUlkZW50aWZpZXIgd2ViUGFnZUlEOwogICAgIFdlYkNv
cmU6OkZyYW1lSWRlbnRpZmllciBmcmFtZUlEOwotCi0gICAgdW5zaWduZWQgaGFzaCgpIGNvbnN0
OwogfTsKIAotaW5saW5lIHVuc2lnbmVkIEdsb2JhbEZyYW1lSUQ6Omhhc2goKSBjb25zdAoraW5s
aW5lIHZvaWQgYWRkKEhhc2hlciYgaGFzaGVyLCBjb25zdCBHbG9iYWxGcmFtZUlEJiBpZGVudGlm
aWVyKQogewotICAgIHJldHVybiBjb21wdXRlSGFzaCh3ZWJQYWdlSUQsIGZyYW1lSUQpOworICAg
IGFkZChoYXNoZXIsIGlkZW50aWZpZXIud2ViUGFnZUlELCBpZGVudGlmaWVyLmZyYW1lSUQpOwog
fQogCiBpbmxpbmUgYm9vbCBvcGVyYXRvcj09KGNvbnN0IEdsb2JhbEZyYW1lSUQmIGEsIGNvbnN0
IEdsb2JhbEZyYW1lSUQmIGIpCkBAIC03NSw3ICs3NCw3IEBAIGlubGluZSBib29sIG9wZXJhdG9y
PT0oY29uc3QgR2xvYmFsRnJhbWVJRCYgYSwgY29uc3QgR2xvYmFsRnJhbWVJRCYgYikKIG5hbWVz
cGFjZSBXVEYgewogCiBzdHJ1Y3QgR2xvYmFsRnJhbWVJREhhc2ggewotICAgIHN0YXRpYyB1bnNp
Z25lZCBoYXNoKGNvbnN0IFdlYktpdDo6TmV0d29ya0NhY2hlOjpHbG9iYWxGcmFtZUlEJiBrZXkp
IHsgcmV0dXJuIGtleS5oYXNoKCk7IH0KKyAgICBzdGF0aWMgdW5zaWduZWQgaGFzaChjb25zdCBX
ZWJLaXQ6Ok5ldHdvcmtDYWNoZTo6R2xvYmFsRnJhbWVJRCYga2V5KSB7IHJldHVybiBjb21wdXRl
SGFzaChrZXkpOyB9CiAgICAgc3RhdGljIGJvb2wgZXF1YWwoY29uc3QgV2ViS2l0OjpOZXR3b3Jr
Q2FjaGU6Okdsb2JhbEZyYW1lSUQmIGEsIGNvbnN0IFdlYktpdDo6TmV0d29ya0NhY2hlOjpHbG9i
YWxGcmFtZUlEJiBiKSB7IHJldHVybiBhID09IGI7IH0KICAgICBzdGF0aWMgY29uc3QgYm9vbCBz
YWZlVG9Db21wYXJlVG9FbXB0eU9yRGVsZXRlZCA9IHRydWU7CiB9OwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdC9QbGF0Zm9ybS9JUEMvU3RyaW5nUmVmZXJlbmNlLmNwcCBiL1NvdXJjZS9XZWJL
aXQvUGxhdGZvcm0vSVBDL1N0cmluZ1JlZmVyZW5jZS5jcHAKaW5kZXggMjE2MTEzOWMzMDE0ZjBl
YWZiM2RjNDdjODVkYTQxOTBhMmJhMDY2Ni4uMTJkNmY5YzMwOTBiMDA1ZDJlZWQ0NzQzMWFlZWFm
ZGU1NDMyNDQ0ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9QbGF0Zm9ybS9JUEMvU3RyaW5n
UmVmZXJlbmNlLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1BsYXRmb3JtL0lQQy9TdHJpbmdSZWZl
cmVuY2UuY3BwCkBAIC01OSw3ICs1OSw3IEBAIGJvb2wgU3RyaW5nUmVmZXJlbmNlOjpkZWNvZGUo
RGVjb2RlciYgZGVjb2RlciwgU3RyaW5nUmVmZXJlbmNlJiByZXN1bHQpCiAKIHVuc2lnbmVkIFN0
cmluZ1JlZmVyZW5jZTo6SGFzaDo6aGFzaChjb25zdCBTdHJpbmdSZWZlcmVuY2UmIGEpCiB7Ci0g
ICAgcmV0dXJuIFN0cmluZ0hhc2hlcjo6Y29tcHV0ZUhhc2gocmVpbnRlcnByZXRfY2FzdDxjb25z
dCB1bnNpZ25lZCBjaGFyKj4oYS5kYXRhKCkpLCBhLnNpemUoKSk7CisgICAgcmV0dXJuIGNvbXB1
dGVIYXNoKGEpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBJUEMKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQvUGxhdGZvcm0vSVBDL1N0cmluZ1JlZmVyZW5jZS5oIGIvU291cmNlL1dlYktpdC9QbGF0
Zm9ybS9JUEMvU3RyaW5nUmVmZXJlbmNlLmgKaW5kZXggNTZiMWRkMDAxYzZmMTQ1ZWI2MDA1MGFj
ZWYzYjZjODEyZDk5NmYwZC4uNDkyZTA3MjA1ZGE5ZWQxZjY4NTI1ZTQwYzk2MDRiNzIyZTlmODcz
MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9QbGF0Zm9ybS9JUEMvU3RyaW5nUmVmZXJlbmNl
LmgKKysrIGIvU291cmNlL1dlYktpdC9QbGF0Zm9ybS9JUEMvU3RyaW5nUmVmZXJlbmNlLmgKQEAg
LTI5LDYgKzI5LDcgQEAKICNpbmNsdWRlIDxzdHJpbmcuaD4KICNpbmNsdWRlIDx3dGYvRm9yd2Fy
ZC5oPgogI2luY2x1ZGUgPHd0Zi9IYXNoVHJhaXRzLmg+CisjaW5jbHVkZSA8d3RmL0hhc2hlci5o
PgogCiBuYW1lc3BhY2UgSVBDIHsKIApAQCAtNzksNiArODAsMTEgQEAgcHJpdmF0ZToKICAgICBz
aXplX3QgbV9zaXplOwogfTsKIAoraW5saW5lIHZvaWQgYWRkKEhhc2hlciYgaGFzaGVyLCBjb25z
dCBTdHJpbmdSZWZlcmVuY2UmIHN0cmluZykKK3sKKyAgICBhZGQoaGFzaGVyLCBTcGFuIHsgc3Ry
aW5nLmRhdGEoKSwgc3RyaW5nLnNpemUoKSB9KTsKK30KKwogaW5saW5lIGJvb2wgb3BlcmF0b3I9
PShjb25zdCBTdHJpbmdSZWZlcmVuY2UmIGEsIGNvbnN0IFN0cmluZ1JlZmVyZW5jZSYgYikKIHsK
ICAgICByZXR1cm4gYS5zaXplKCkgPT0gYi5zaXplKCkgJiYgIW1lbWNtcChhLmRhdGEoKSwgYi5k
YXRhKCksIGEuc2l6ZSgpKTsKZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMv
V2ViQ29yZS9Db2xvclRlc3RzLmNwcCBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViQ29y
ZS9Db2xvclRlc3RzLmNwcAppbmRleCBiMGEwM2JjNzViNGFhMGM4MTBmOTY5NzE5MzQxMzVhYjk4
MWM1ZTRhLi5lYjE2N2FjZGM2ZWYxZjU0N2U3YjJhMDViMWMxOTZjZTJkMDk1YWFjIDEwMDY0NAot
LS0gYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYkNvcmUvQ29sb3JUZXN0cy5jcHAKKysr
IGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJDb3JlL0NvbG9yVGVzdHMuY3BwCkBAIC0z
MSw2ICszMSw3IEBACiAjaW5jbHVkZSA8V2ViQ29yZS9Db2xvckNvbnZlcnNpb24uaD4KICNpbmNs
dWRlIDxXZWJDb3JlL0NvbG9yU2VyaWFsaXphdGlvbi5oPgogI2luY2x1ZGUgPFdlYkNvcmUvQ29s
b3JUeXBlcy5oPgorI2luY2x1ZGUgPHd0Zi9IYXNoZXIuaD4KICNpbmNsdWRlIDx3dGYvTWF0aEV4
dHJhcy5oPgogCiB1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKQEAgLTI5OSwxOSArMzAwLDE5IEBA
IFRFU1QoQ29sb3IsIEhhc2gpCiAgICAgewogICAgICAgICBDb2xvciBjMSB7IERpc3BsYXlQMzxm
bG9hdD4geyAxLjAsIDAuNSwgMC4yNSwgMS4wIH0gfTsKICAgICAgICAgQ29sb3IgYzIgeyBEaXNw
bGF5UDM8ZmxvYXQ+IHsgMS4wLCAwLjUsIDAuMjUsIDEuMCB9IH07Ci0gICAgICAgIEVYUEVDVF9F
UShjMS5oYXNoKCksIGMyLmhhc2goKSk7CisgICAgICAgIEVYUEVDVF9FUShjb21wdXRlSGFzaChj
MSksIGNvbXB1dGVIYXNoKGMyKSk7CiAgICAgfQogCiAgICAgewogICAgICAgICBDb2xvciBjMSB7
IERpc3BsYXlQMzxmbG9hdD4geyAxLjAsIDAuNSwgMC4yNSwgMS4wIH0gfTsKICAgICAgICAgQ29s
b3IgYzIgeyBTUkdCQTxmbG9hdD4geyAxLjAsIDAuNSwgMC4yNSwgMS4wIH0gfTsKLSAgICAgICAg
RVhQRUNUX05FKGMxLmhhc2goKSwgYzIuaGFzaCgpKTsKKyAgICAgICAgRVhQRUNUX05FKGNvbXB1
dGVIYXNoKGMxKSwgY29tcHV0ZUhhc2goYzIpKTsKICAgICB9CiAKICAgICBhdXRvIGNvbXBvbmVu
dEJ5dGVzID0gU1JHQkE8dWludDhfdD4geyAyNTUsIDEyOCwgNjMsIDEyNyB9OwogICAgIENvbG9y
IHJnYjEgeyBjb252ZXJ0Q29sb3I8U1JHQkE8ZmxvYXQ+Pihjb21wb25lbnRCeXRlcykgfTsKICAg
ICBDb2xvciByZ2IyIHsgY29tcG9uZW50Qnl0ZXMgfTsKLSAgICBFWFBFQ1RfTkUocmdiMS5oYXNo
KCksIHJnYjIuaGFzaCgpKTsKKyAgICBFWFBFQ1RfTkUoY29tcHV0ZUhhc2gocmdiMSksIGNvbXB1
dGVIYXNoKHJnYjIpKTsKIH0KIAogVEVTVChDb2xvciwgTW92ZUNvbnN0cnVjdG9yKQo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>453397</attachid>
            <date>2022-02-28 09:24:57 -0800</date>
            <delta_ts>2022-02-28 12:00:47 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-237262-20220228092456.patch</filename>
            <type>text/plain</type>
            <size>22978</size>
            <attacher name="Chris Dumez">cdumez</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjkwNTk4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNDQ4YTUzYzZmNDVkYzIx
OWRkMDQ1NDBkY2M1NGU0ZmNmMjdiYTY0YS4uNWY1ZjAyYTMzZjMyNzc2MmNkYTdhYTRmNzEyYzM2
YTYyNWMxY2I1NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQ3IEBACisyMDIyLTAyLTI4ICBDaHJp
cyBEdW1leiAgPGNkdW1lekBhcHBsZS5jb20+CisKKyAgICAgICAgQWRvcHQgdGhlIG1vZGVybiBI
YXNoZXIgbW9yZSB3aWRlbHkKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTIzNzI2MgorCisgICAgICAgIFJldmlld2VkIGJ5IFNhbSBXZWluaWcuCisKKyAg
ICAgICAgKiBkb20vTWVzc2FnZVBvcnRJZGVudGlmaWVyLmg6CisgICAgICAgIChXZWJDb3JlOjph
ZGQpOgorICAgICAgICAoV1RGOjpNZXNzYWdlUG9ydElkZW50aWZpZXJIYXNoOjpoYXNoKToKKyAg
ICAgICAgKFdlYkNvcmU6Ok1lc3NhZ2VQb3J0SWRlbnRpZmllcjo6aGFzaCBjb25zdCk6IERlbGV0
ZWQuCisgICAgICAgICogaGlzdG9yeS9CYWNrRm9yd2FyZEl0ZW1JZGVudGlmaWVyLmg6CisgICAg
ICAgIChXZWJDb3JlOjphZGQpOgorICAgICAgICAoV1RGOjpCYWNrRm9yd2FyZEl0ZW1JZGVudGlm
aWVySGFzaDo6aGFzaCk6CisgICAgICAgIChXZWJDb3JlOjpCYWNrRm9yd2FyZEl0ZW1JZGVudGlm
aWVyOjpoYXNoIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKiBsb2FkZXIvUmVzb3VyY2VDcnlw
dG9ncmFwaGljRGlnZXN0Lmg6CisgICAgICAgIChXZWJDb3JlOjphZGQpOgorICAgICAgICAoV1RG
OjpEZWZhdWx0SGFzaDxXZWJDb3JlOjpSZXNvdXJjZUNyeXB0b2dyYXBoaWNEaWdlc3Q+OjpoYXNo
KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9Db2xvci5oOgorICAgICAgICAoV2ViQ29y
ZTo6YWRkKToKKyAgICAgICAgKFdlYkNvcmU6OkNvbG9yOjpoYXNoIGNvbnN0KTogRGVsZXRlZC4K
KyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9Db2xvckhhc2guaDoKKyAgICAgICAgKFdURjo6
Q29sb3JIYXNoOjpoYXNoKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9Gb250LmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OmFkZCk6CisgICAgICAgIChXZWJDb3JlOjpDaGFyYWN0ZXJGYWxs
YmFja01hcEtleUhhc2g6Omhhc2gpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0ZvbnRD
YWNoZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjphZGQpOgorICAgICAgICAoV2ViQ29yZTo6Rm9u
dFBsYXRmb3JtRGF0YUNhY2hlS2V5SGFzaDo6aGFzaCk6CisgICAgICAgIChXZWJDb3JlOjpGb250
Q2FzY2FkZUNhY2hlS2V5SGFzaDo6aGFzaCk6IERlbGV0ZWQuCisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3MvRm9udENhY2hlLmg6CisgICAgICAgIChXZWJDb3JlOjphZGQpOgorICAgICAgICAo
V2ViQ29yZTo6Rm9udENhc2NhZGVDYWNoZUtleUhhc2g6Omhhc2gpOgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL2NvY29hL0ZvbnRGYW1pbHlTcGVjaWZpY2F0aW9uQ29yZVRleHQuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6YWRkKToKKyAgICAgICAgKFdlYkNvcmU6OkZvbnRGYW1pbHlTcGVj
aWZpY2F0aW9uS2V5SGFzaDo6aGFzaCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY29j
b2EvU3lzdGVtRm9udERhdGFiYXNlQ29yZVRleHQuaDoKKyAgICAgICAgKFdlYkNvcmU6OmFkZCk6
CisgICAgICAgIChXZWJDb3JlOjpTeXN0ZW1Gb250RGF0YWJhc2VDb3JlVGV4dDo6Q2FzY2FkZUxp
c3RQYXJhbWV0ZXJzOjpIYXNoOjpoYXNoKToKKyAgICAgICAgKFdlYkNvcmU6OlN5c3RlbUZvbnRE
YXRhYmFzZUNvcmVUZXh0OjpDYXNjYWRlTGlzdFBhcmFtZXRlcnM6Omhhc2ggY29uc3QpOiBEZWxl
dGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZyZWV0eXBlL0ZvbnRDYWNoZUZyZWVU
eXBlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmFkZCk6CisgICAgICAgIChXZWJDb3JlOjpGYWxs
YmFja0ZvbnREZXNjcmlwdGlvbktleUhhc2g6Omhhc2gpOgorCiAyMDIyLTAyLTI4ICBBbnRvaW5l
IFF1aW50ICA8Z3Jhb3V0c0B3ZWJraXQub3JnPgogCiAgICAgICAgIFt3ZWItYW5pbWF0aW9uc10g
d2ViLWFuaW1hdGlvbnMvaW50ZXJmYWNlcy9BbmltYXRhYmxlL2dldEFuaW1hdGlvbnMuaHRtbCBp
cyBhIHVuaXF1ZSBmYWlsdXJlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZyBi
L1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCmluZGV4IDQ5ZTgwMjQwYzcyYmNhZjYyNDNhZGMzNGYz
YjJlM2RjZTdlM2M1YzYuLjdmNzZhMmZhYmFkODg4ZWY0YmNhNGQ5Yzg1N2Q0Y2NiZjZkYTJmNGEg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQv
Q2hhbmdlTG9nCkBAIC0xLDMgKzEsMTkgQEAKKzIwMjItMDItMjggIENocmlzIER1bWV6ICA8Y2R1
bWV6QGFwcGxlLmNvbT4KKworICAgICAgICBBZG9wdCB0aGUgbW9kZXJuIEhhc2hlciBtb3JlIHdp
ZGVseQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjM3
MjYyCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgU2FtIFdlaW5pZy4KKworICAgICAgICAqIE5ldHdv
cmtQcm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZS5oOgorICAgICAgICAoV2ViS2l0OjpOZXR3b3Jr
Q2FjaGU6OmFkZCk6CisgICAgICAgIChXVEY6Okdsb2JhbEZyYW1lSURIYXNoOjpoYXNoKToKKyAg
ICAgICAgKFdlYktpdDo6TmV0d29ya0NhY2hlOjpHbG9iYWxGcmFtZUlEOjpoYXNoIGNvbnN0KTog
RGVsZXRlZC4KKyAgICAgICAgKiBQbGF0Zm9ybS9JUEMvU3RyaW5nUmVmZXJlbmNlLmNwcDoKKyAg
ICAgICAgKElQQzo6U3RyaW5nUmVmZXJlbmNlOjpIYXNoOjpoYXNoKToKKyAgICAgICAgKiBQbGF0
Zm9ybS9JUEMvU3RyaW5nUmVmZXJlbmNlLmg6CisgICAgICAgIChJUEM6OmFkZCk6CisKIDIwMjIt
MDItMjggIEtpbW1vIEtpbm51bmVuICA8a2tpbm51bmVuQGFwcGxlLmNvbT4KIAogICAgICAgICBS
RUdSRVNTSU9OKHIyOTA1ODgpIE1pc3Npbmcgc3ltYm9sIGpzVmFsdWVGb3JEZWNvZGVkTWVzc2Fn
ZTwxMDc+IChJUENTdHJlYW1UZXN0ZXJQcm94eV9XYXNDcmVhdGVkKQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvZG9tL01lc3NhZ2VQb3J0SWRlbnRpZmllci5oIGIvU291cmNlL1dlYkNvcmUv
ZG9tL01lc3NhZ2VQb3J0SWRlbnRpZmllci5oCmluZGV4IDA0NmZjYTE0YjI3MWI1ZDdmMDYwZTc1
NjUyNDY0NGMyYWNkOTQzNGMuLmFiNGZmMzdkMWQ4MzNjZWUxZDEyNWEyZjNjOGU5NDA0MzlkMGNi
MzUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9NZXNzYWdlUG9ydElkZW50aWZpZXIu
aAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vTWVzc2FnZVBvcnRJZGVudGlmaWVyLmgKQEAgLTM2
LDggKzM2LDYgQEAgc3RydWN0IE1lc3NhZ2VQb3J0SWRlbnRpZmllciB7CiAgICAgZW51bSBQb3J0
SWRlbnRpZmllclR5cGUgeyB9OwogICAgIE9iamVjdElkZW50aWZpZXI8UG9ydElkZW50aWZpZXJU
eXBlPiBwb3J0SWRlbnRpZmllcjsKIAotICAgIHVuc2lnbmVkIGhhc2goKSBjb25zdDsKLQogICAg
IHRlbXBsYXRlPGNsYXNzIEVuY29kZXI+IHZvaWQgZW5jb2RlKEVuY29kZXImKSBjb25zdDsKICAg
ICB0ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPiBzdGF0aWMgc3RkOjpvcHRpb25hbDxNZXNzYWdlUG9y
dElkZW50aWZpZXI+IGRlY29kZShEZWNvZGVyJik7CiAKQEAgLTQ2LDYgKzQ0LDExIEBAIHN0cnVj
dCBNZXNzYWdlUG9ydElkZW50aWZpZXIgewogI2VuZGlmCiB9OwogCitpbmxpbmUgdm9pZCBhZGQo
SGFzaGVyJiBoYXNoZXIsIGNvbnN0IE1lc3NhZ2VQb3J0SWRlbnRpZmllciYgaWRlbnRpZmllcikK
K3sKKyAgICBhZGQoaGFzaGVyLCBpZGVudGlmaWVyLnByb2Nlc3NJZGVudGlmaWVyLCBpZGVudGlm
aWVyLnBvcnRJZGVudGlmaWVyKTsKK30KKwogaW5saW5lIGJvb2wgb3BlcmF0b3I9PShjb25zdCBN
ZXNzYWdlUG9ydElkZW50aWZpZXImIGEsIGNvbnN0IE1lc3NhZ2VQb3J0SWRlbnRpZmllciYgYikK
IHsKICAgICByZXR1cm4gYS5wcm9jZXNzSWRlbnRpZmllciA9PSBiLnByb2Nlc3NJZGVudGlmaWVy
ICYmICBhLnBvcnRJZGVudGlmaWVyID09IGIucG9ydElkZW50aWZpZXI7CkBAIC03MywxMSArNzYs
NiBAQCBzdGQ6Om9wdGlvbmFsPE1lc3NhZ2VQb3J0SWRlbnRpZmllcj4gTWVzc2FnZVBvcnRJZGVu
dGlmaWVyOjpkZWNvZGUoRGVjb2RlciYgZGVjbwogICAgIHJldHVybiB7IHsgV1RGTW92ZSgqcHJv
Y2Vzc0lkZW50aWZpZXIpLCBXVEZNb3ZlKCpwb3J0SWRlbnRpZmllcikgfSB9OwogfQogCi1pbmxp
bmUgdW5zaWduZWQgTWVzc2FnZVBvcnRJZGVudGlmaWVyOjpoYXNoKCkgY29uc3QKLXsKLSAgICBy
ZXR1cm4gY29tcHV0ZUhhc2gocHJvY2Vzc0lkZW50aWZpZXIudG9VSW50NjQoKSwgcG9ydElkZW50
aWZpZXIudG9VSW50NjQoKSk7Ci19Ci0KICNpZiAhTE9HX0RJU0FCTEVECiAKIGlubGluZSBTdHJp
bmcgTWVzc2FnZVBvcnRJZGVudGlmaWVyOjpsb2dTdHJpbmcoKSBjb25zdApAQCAtOTIsNyArOTAs
NyBAQCBpbmxpbmUgU3RyaW5nIE1lc3NhZ2VQb3J0SWRlbnRpZmllcjo6bG9nU3RyaW5nKCkgY29u
c3QKIG5hbWVzcGFjZSBXVEYgewogCiBzdHJ1Y3QgTWVzc2FnZVBvcnRJZGVudGlmaWVySGFzaCB7
Ci0gICAgc3RhdGljIHVuc2lnbmVkIGhhc2goY29uc3QgV2ViQ29yZTo6TWVzc2FnZVBvcnRJZGVu
dGlmaWVyJiBrZXkpIHsgcmV0dXJuIGtleS5oYXNoKCk7IH0KKyAgICBzdGF0aWMgdW5zaWduZWQg
aGFzaChjb25zdCBXZWJDb3JlOjpNZXNzYWdlUG9ydElkZW50aWZpZXImIGtleSkgeyByZXR1cm4g
Y29tcHV0ZUhhc2goa2V5KTsgfQogICAgIHN0YXRpYyBib29sIGVxdWFsKGNvbnN0IFdlYkNvcmU6
Ok1lc3NhZ2VQb3J0SWRlbnRpZmllciYgYSwgY29uc3QgV2ViQ29yZTo6TWVzc2FnZVBvcnRJZGVu
dGlmaWVyJiBiKSB7IHJldHVybiBhID09IGI7IH0KICAgICBzdGF0aWMgY29uc3QgYm9vbCBzYWZl
VG9Db21wYXJlVG9FbXB0eU9yRGVsZXRlZCA9IHRydWU7CiB9OwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvaGlzdG9yeS9CYWNrRm9yd2FyZEl0ZW1JZGVudGlmaWVyLmggYi9Tb3VyY2UvV2Vi
Q29yZS9oaXN0b3J5L0JhY2tGb3J3YXJkSXRlbUlkZW50aWZpZXIuaAppbmRleCBjM2E4ZWJlZDk3
YmM3NTI3YTIzNWRkOGY3YWU5MzQ2MWQ1ZGRjMGZkLi5kNWIzOTc1NzA1NzE2ZDExYzAwM2FlODU5
NjQ4OTY5MmJmOWY0OTllIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9oaXN0b3J5L0JhY2tG
b3J3YXJkSXRlbUlkZW50aWZpZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9oaXN0b3J5L0JhY2tG
b3J3YXJkSXRlbUlkZW50aWZpZXIuaApAQCAtMzcsNyArMzcsNiBAQCBzdHJ1Y3QgQmFja0Zvcndh
cmRJdGVtSWRlbnRpZmllciB7CiAgICAgZW51bSBJdGVtSWRlbnRpZmllclR5cGUgeyB9OwogICAg
IE9iamVjdElkZW50aWZpZXI8SXRlbUlkZW50aWZpZXJUeXBlPiBpdGVtSWRlbnRpZmllcjsKIAot
ICAgIHVuc2lnbmVkIGhhc2goKSBjb25zdDsKICAgICBleHBsaWNpdCBvcGVyYXRvciBib29sKCkg
Y29uc3QgeyByZXR1cm4gcHJvY2Vzc0lkZW50aWZpZXIgJiYgaXRlbUlkZW50aWZpZXI7IH0KIAog
ICAgIHRlbXBsYXRlPGNsYXNzIEVuY29kZXI+IHZvaWQgZW5jb2RlKEVuY29kZXImKSBjb25zdDsK
QEAgLTUyLDYgKzUxLDExIEBAIHN0cnVjdCBCYWNrRm9yd2FyZEl0ZW1JZGVudGlmaWVyIHsKICNl
bmRpZgogfTsKIAoraW5saW5lIHZvaWQgYWRkKEhhc2hlciYgaGFzaGVyLCBjb25zdCBCYWNrRm9y
d2FyZEl0ZW1JZGVudGlmaWVyJiBpZGVudGlmaWVyKQoreworICAgIGFkZChoYXNoZXIsIGlkZW50
aWZpZXIucHJvY2Vzc0lkZW50aWZpZXIsIGlkZW50aWZpZXIuaXRlbUlkZW50aWZpZXIpOworfQor
CiAjaWYgIUxPR19ESVNBQkxFRAogCiBpbmxpbmUgY29uc3QgY2hhciogQmFja0ZvcndhcmRJdGVt
SWRlbnRpZmllcjo6bG9nU3RyaW5nKCkgY29uc3QKQEAgLTk2LDE3ICsxMDAsMTIgQEAgc3RkOjpv
cHRpb25hbDxCYWNrRm9yd2FyZEl0ZW1JZGVudGlmaWVyPiBCYWNrRm9yd2FyZEl0ZW1JZGVudGlm
aWVyOjpkZWNvZGUoRGVjb2QKICAgICByZXR1cm4gcmVzdWx0OwogfQogCi1pbmxpbmUgdW5zaWdu
ZWQgQmFja0ZvcndhcmRJdGVtSWRlbnRpZmllcjo6aGFzaCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJu
IGNvbXB1dGVIYXNoKHByb2Nlc3NJZGVudGlmaWVyLnRvVUludDY0KCksIGl0ZW1JZGVudGlmaWVy
LnRvVUludDY0KCkpOwotfQotCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKIG5hbWVzcGFjZSBX
VEYgewogCiBzdHJ1Y3QgQmFja0ZvcndhcmRJdGVtSWRlbnRpZmllckhhc2ggewotICAgIHN0YXRp
YyB1bnNpZ25lZCBoYXNoKGNvbnN0IFdlYkNvcmU6OkJhY2tGb3J3YXJkSXRlbUlkZW50aWZpZXIm
IGtleSkgeyByZXR1cm4ga2V5Lmhhc2goKTsgfQorICAgIHN0YXRpYyB1bnNpZ25lZCBoYXNoKGNv
bnN0IFdlYkNvcmU6OkJhY2tGb3J3YXJkSXRlbUlkZW50aWZpZXImIGtleSkgeyByZXR1cm4gY29t
cHV0ZUhhc2goa2V5KTsgfQogICAgIHN0YXRpYyBib29sIGVxdWFsKGNvbnN0IFdlYkNvcmU6OkJh
Y2tGb3J3YXJkSXRlbUlkZW50aWZpZXImIGEsIGNvbnN0IFdlYkNvcmU6OkJhY2tGb3J3YXJkSXRl
bUlkZW50aWZpZXImIGIpIHsgcmV0dXJuIGEgPT0gYjsgfQogICAgIHN0YXRpYyBjb25zdCBib29s
IHNhZmVUb0NvbXBhcmVUb0VtcHR5T3JEZWxldGVkID0gdHJ1ZTsKIH07CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9sb2FkZXIvUmVzb3VyY2VDcnlwdG9ncmFwaGljRGlnZXN0LmggYi9Tb3Vy
Y2UvV2ViQ29yZS9sb2FkZXIvUmVzb3VyY2VDcnlwdG9ncmFwaGljRGlnZXN0LmgKaW5kZXggODNi
ODYxM2NmZGEyMzI5YWUzMGJiZjZhYmMxNGI5OWQ0NDIzN2IwMi4uZjk5MmE4ZDdkNDI1M2Q2ZTU4
YTFlMzM4Yjc4MGMwZDY2ZjM3NDY3MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvbG9hZGVy
L1Jlc291cmNlQ3J5cHRvZ3JhcGhpY0RpZ2VzdC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2xvYWRl
ci9SZXNvdXJjZUNyeXB0b2dyYXBoaWNEaWdlc3QuaApAQCAtNjAsNiArNjAsMTEgQEAgc3RydWN0
IFJlc291cmNlQ3J5cHRvZ3JhcGhpY0RpZ2VzdCB7CiAgICAgfQogfTsKIAoraW5saW5lIHZvaWQg
YWRkKEhhc2hlciYgaGFzaGVyLCBjb25zdCBSZXNvdXJjZUNyeXB0b2dyYXBoaWNEaWdlc3QmIGRp
Z2VzdCkKK3sKKyAgICBhZGQoaGFzaGVyLCBkaWdlc3QuYWxnb3JpdGhtLCBkaWdlc3QudmFsdWUp
OworfQorCiBzdHJ1Y3QgRW5jb2RlZFJlc291cmNlQ3J5cHRvZ3JhcGhpY0RpZ2VzdCB7CiAgICAg
dXNpbmcgQWxnb3JpdGhtID0gUmVzb3VyY2VDcnlwdG9ncmFwaGljRGlnZXN0OjpBbGdvcml0aG07
CiAgICAgCkBAIC04NSw3ICs5MCw3IEBAIG5hbWVzcGFjZSBXVEYgewogdGVtcGxhdGU8PiBzdHJ1
Y3QgRGVmYXVsdEhhc2g8V2ViQ29yZTo6UmVzb3VyY2VDcnlwdG9ncmFwaGljRGlnZXN0PiB7CiAg
ICAgc3RhdGljIHVuc2lnbmVkIGhhc2goY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VDcnlwdG9ncmFw
aGljRGlnZXN0JiBkaWdlc3QpCiAgICAgewotICAgICAgICByZXR1cm4gcGFpckludEhhc2goaW50
SGFzaChzdGF0aWNfY2FzdDx1bnNpZ25lZD4oZGlnZXN0LmFsZ29yaXRobSkpLCBTdHJpbmdIYXNo
ZXI6OmNvbXB1dGVIYXNoKGRpZ2VzdC52YWx1ZS5kYXRhKCksIGRpZ2VzdC52YWx1ZS5zaXplKCkp
KTsKKyAgICAgICAgcmV0dXJuIGNvbXB1dGVIYXNoKGRpZ2VzdCk7CiAgICAgfQogICAgIHN0YXRp
YyBib29sIGVxdWFsKGNvbnN0IFdlYkNvcmU6OlJlc291cmNlQ3J5cHRvZ3JhcGhpY0RpZ2VzdCYg
YSwgY29uc3QgV2ViQ29yZTo6UmVzb3VyY2VDcnlwdG9ncmFwaGljRGlnZXN0JiBiKQogICAgIHsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0NvbG9yLmggYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Db2xvci5oCmluZGV4IDgzMWRhNzhjNzMx
YjBkNWY3ODExYzA5NzgzOGQ2ZGVjYjkyMWQ4OWIuLjFjMDUzMDljOGIxNDljNTA4MjgwMzczYTkz
NzZjOTZiNWQwYjAyNDcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL0NvbG9yLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvQ29sb3Iu
aApAQCAtODQsOCArODQsNiBAQCBwdWJsaWM6CiAKICAgICB+Q29sb3IoKTsKIAotICAgIHVuc2ln
bmVkIGhhc2goKSBjb25zdDsKLQogICAgIGJvb2wgaXNWYWxpZCgpIGNvbnN0OwogICAgIGJvb2wg
aXNTZW1hbnRpYygpIGNvbnN0OwogICAgIGJvb2wgdXNlc0NvbG9yRnVuY3Rpb25TZXJpYWxpemF0
aW9uKCkgY29uc3Q7CkBAIC0xODAsNiArMTc4LDggQEAgcHVibGljOgogICAgIFN0cmluZyBkZWJ1
Z0Rlc2NyaXB0aW9uKCkgY29uc3Q7CiAKIHByaXZhdGU6CisgICAgZnJpZW5kIHZvaWQgYWRkKEhh
c2hlciYsIGNvbnN0IENvbG9yJik7CisKICAgICBjbGFzcyBPdXRPZkxpbmVDb21wb25lbnRzIDog
cHVibGljIFRocmVhZFNhZmVSZWZDb3VudGVkPE91dE9mTGluZUNvbXBvbmVudHM+IHsKICAgICBw
dWJsaWM6CiAgICAgICAgIHN0YXRpYyBSZWY8T3V0T2ZMaW5lQ29tcG9uZW50cz4gY3JlYXRlKENv
bG9yQ29tcG9uZW50czxmbG9hdCwgND4gY29tcG9uZW50cykKQEAgLTI1Nyw2ICsyNTcsMTQgQEAg
cHJpdmF0ZToKICAgICB1aW50NjRfdCBtX2NvbG9yQW5kRmxhZ3MgeyBpbnZhbGlkQ29sb3JBbmRG
bGFncyB9OwogfTsKIAoraW5saW5lIHZvaWQgYWRkKEhhc2hlciYgaGFzaGVyLCBjb25zdCBDb2xv
ciYgY29sb3IpCit7CisgICAgaWYgKGNvbG9yLmlzT3V0T2ZMaW5lKCkpCisgICAgICAgIGFkZCho
YXNoZXIsIGNvbG9yLmFzT3V0T2ZMaW5lKCkudW5yZXNvbHZlZENvbXBvbmVudHMoKSwgY29sb3Iu
Y29sb3JTcGFjZSgpLCBjb2xvci5mbGFncygpLnRvUmF3KCkpOworICAgIGVsc2UKKyAgICAgICAg
YWRkKGhhc2hlciwgY29sb3IuYXNQYWNrZWRJbmxpbmUoKS52YWx1ZSwgY29sb3IuZmxhZ3MoKS50
b1JhdygpKTsKK30KKwogYm9vbCBvcGVyYXRvcj09KGNvbnN0IENvbG9yJiwgY29uc3QgQ29sb3Im
KTsKIGJvb2wgb3BlcmF0b3IhPShjb25zdCBDb2xvciYsIGNvbnN0IENvbG9yJik7CiAKQEAgLTM2
NSwxMyArMzczLDYgQEAgaW5saW5lIENvbG9yOjp+Q29sb3IoKQogICAgICAgICBhc091dE9mTGlu
ZSgpLmRlcmVmKCk7CiB9CiAKLWlubGluZSB1bnNpZ25lZCBDb2xvcjo6aGFzaCgpIGNvbnN0Ci17
Ci0gICAgaWYgKGlzT3V0T2ZMaW5lKCkpCi0gICAgICAgIHJldHVybiBjb21wdXRlSGFzaChhc091
dE9mTGluZSgpLnVucmVzb2x2ZWRDb21wb25lbnRzKCksIGNvbG9yU3BhY2UoKSwgZmxhZ3MoKS50
b1JhdygpKTsKLSAgICByZXR1cm4gY29tcHV0ZUhhc2goYXNQYWNrZWRJbmxpbmUoKS52YWx1ZSwg
ZmxhZ3MoKS50b1JhdygpKTsKLX0KLQogaW5saW5lIGJvb2wgQ29sb3I6OmlzVmFsaWQoKSBjb25z
dAogewogICAgIHJldHVybiBmbGFncygpLmNvbnRhaW5zKEZsYWdzSW5jbHVkaW5nUHJpdmF0ZTo6
VmFsaWQpOwpAQCAtNjI3LDEyICs2MjgsNiBAQCB0ZW1wbGF0ZTxjbGFzcyBEZWNvZGVyPiBzdGQ6
Om9wdGlvbmFsPENvbG9yPiBDb2xvcjo6ZGVjb2RlKERlY29kZXImIGRlY29kZXIpCiAgICAgcmV0
dXJuIENvbG9yIHsgYXNTUkdCQShQYWNrZWRDb2xvcjo6UkdCQSB7IHZhbHVlIH0pLCBmbGFncyB9
OwogfQogCi1pbmxpbmUgdm9pZCBhZGQoSGFzaGVyJiBoYXNoZXIsIGNvbnN0IENvbG9yJiBjb2xv
cikKLXsKLSAgICAvLyBGSVhNRTogV2UgZG9uJ3Qgd2FudCB0byBoYXNoIGEgaGFzaDsgZG8gYmV0
dGVyLgotICAgIGFkZChoYXNoZXIsIGNvbG9yLmhhc2goKSk7Ci19Ci0KIH0gLy8gbmFtZXNwYWNl
IFdlYkNvcmUKIAogbmFtZXNwYWNlIFdURiB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9Db2xvckhhc2guaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL0NvbG9ySGFzaC5oCmluZGV4IDNkMmM5YzU1MzZmYmUxODM1MzNhZjg4MWUwZDFjZjBh
NDNkODgyZTYuLmRhMzhiZjRlMzZhODFkZTg5NDdjMjZjZmYxZmUzZWNjNmM3MDY3YTMgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0NvbG9ySGFzaC5oCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0NvbG9ySGFzaC5oCkBAIC0zMSw3ICsz
MSw3IEBACiBuYW1lc3BhY2UgV1RGIHsKIAogc3RydWN0IENvbG9ySGFzaCB7Ci0gICAgc3RhdGlj
IHVuc2lnbmVkIGhhc2goY29uc3QgV2ViQ29yZTo6Q29sb3ImIGtleSkgeyByZXR1cm4ga2V5Lmhh
c2goKTsgfQorICAgIHN0YXRpYyB1bnNpZ25lZCBoYXNoKGNvbnN0IFdlYkNvcmU6OkNvbG9yJiBr
ZXkpIHsgcmV0dXJuIGNvbXB1dGVIYXNoKGtleSk7IH0KICAgICBzdGF0aWMgYm9vbCBlcXVhbChj
b25zdCBXZWJDb3JlOjpDb2xvciYgYSwgY29uc3QgV2ViQ29yZTo6Q29sb3ImIGIpIHsgcmV0dXJu
IGEgPT0gYjsgfQogICAgIHN0YXRpYyBjb25zdCBib29sIHNhZmVUb0NvbXBhcmVUb0VtcHR5T3JE
ZWxldGVkID0gdHJ1ZTsKIH07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9Gb250LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnQu
Y3BwCmluZGV4IGM0NTA4YmQ3NWFiMjg1ZTIwNTI5NDFiMzNiMmE0NWI0NWQwNWZiODAuLjNlNzdh
Yjc5NGNkNTFhZjYyZTI3MGUzNWFjYWJjYmE5ZjhmNTEwYTggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL0ZvbnQuY3BwCkBAIC01NTksMTMgKzU1OSwxOCBAQCBzdHJ1Y3QgQ2hh
cmFjdGVyRmFsbGJhY2tNYXBLZXkgewogICAgIGJvb2wgaXNGb3JQbGF0Zm9ybUZvbnQgeyBmYWxz
ZSB9OwogfTsKIAoraW5saW5lIHZvaWQgYWRkKEhhc2hlciYgaGFzaGVyLCBjb25zdCBDaGFyYWN0
ZXJGYWxsYmFja01hcEtleSYga2V5KQoreworICAgIGFkZChoYXNoZXIsIGtleS5sb2NhbGUsIGtl
eS5jaGFyYWN0ZXIsIGtleS5pc0ZvclBsYXRmb3JtRm9udCk7Cit9CisKIGlubGluZSBib29sIG9w
ZXJhdG9yPT0oY29uc3QgQ2hhcmFjdGVyRmFsbGJhY2tNYXBLZXkmIGEsIGNvbnN0IENoYXJhY3Rl
ckZhbGxiYWNrTWFwS2V5JiBiKQogewogICAgIHJldHVybiBhLmxvY2FsZSA9PSBiLmxvY2FsZSAm
JiBhLmNoYXJhY3RlciA9PSBiLmNoYXJhY3RlciAmJiBhLmlzRm9yUGxhdGZvcm1Gb250ID09IGIu
aXNGb3JQbGF0Zm9ybUZvbnQ7CiB9CiAKIHN0cnVjdCBDaGFyYWN0ZXJGYWxsYmFja01hcEtleUhh
c2ggewotICAgIHN0YXRpYyB1bnNpZ25lZCBoYXNoKGNvbnN0IENoYXJhY3RlckZhbGxiYWNrTWFw
S2V5JiBrZXkpIHsgcmV0dXJuIGNvbXB1dGVIYXNoKGtleS5sb2NhbGUsIGtleS5jaGFyYWN0ZXIs
IGtleS5pc0ZvclBsYXRmb3JtRm9udCk7IH0KKyAgICBzdGF0aWMgdW5zaWduZWQgaGFzaChjb25z
dCBDaGFyYWN0ZXJGYWxsYmFja01hcEtleSYga2V5KSB7IHJldHVybiBjb21wdXRlSGFzaChrZXkp
OyB9CiAgICAgc3RhdGljIGJvb2wgZXF1YWwoY29uc3QgQ2hhcmFjdGVyRmFsbGJhY2tNYXBLZXkm
IGEsIGNvbnN0IENoYXJhY3RlckZhbGxiYWNrTWFwS2V5JiBiKSB7IHJldHVybiBhID09IGI7IH0K
ICAgICBzdGF0aWMgY29uc3QgYm9vbCBzYWZlVG9Db21wYXJlVG9FbXB0eU9yRGVsZXRlZCA9IHRy
dWU7CiB9OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9u
dENhY2hlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRDYWNoZS5j
cHAKaW5kZXggYjI1ZTdkZmI5N2ExMDI5OTdiMGZhZTMzZDc1MzgxNWY4OWEzMDNlZC4uMWJmYTNm
ZDVmMmIzYTI2YTlhNGFlZTk1NTNiNjJiNjg2ZWJlMjI0MSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udENhY2hlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250Q2FjaGUuY3BwCkBAIC04Niw2ICs4NiwxMSBAQCBzdHJ1
Y3QgRm9udFBsYXRmb3JtRGF0YUNhY2hlS2V5IHsKICAgICBGb250Q3JlYXRpb25Db250ZXh0IGZv
bnRDcmVhdGlvbkNvbnRleHQ7CiB9OwogCitpbmxpbmUgdm9pZCBhZGQoSGFzaGVyJiBoYXNoZXIs
IGNvbnN0IEZvbnRQbGF0Zm9ybURhdGFDYWNoZUtleSYga2V5KQoreworICAgIGFkZChoYXNoZXIs
IGtleS5kZXNjcmlwdGlvbktleSwga2V5LmZhbWlseSwga2V5LmZvbnRDcmVhdGlvbkNvbnRleHQp
OworfQorCiBzdGF0aWMgYm9vbCBvcGVyYXRvcj09KGNvbnN0IEZvbnRQbGF0Zm9ybURhdGFDYWNo
ZUtleSYgYSwgY29uc3QgRm9udFBsYXRmb3JtRGF0YUNhY2hlS2V5JiBiKQogewogICAgIHJldHVy
biBhLmRlc2NyaXB0aW9uS2V5ID09IGIuZGVzY3JpcHRpb25LZXkKQEAgLTk0LDcgKzk5LDcgQEAg
c3RhdGljIGJvb2wgb3BlcmF0b3I9PShjb25zdCBGb250UGxhdGZvcm1EYXRhQ2FjaGVLZXkmIGEs
IGNvbnN0IEZvbnRQbGF0Zm9ybURhdGEKIH0KIAogc3RydWN0IEZvbnRQbGF0Zm9ybURhdGFDYWNo
ZUtleUhhc2ggewotICAgIHN0YXRpYyB1bnNpZ25lZCBoYXNoKGNvbnN0IEZvbnRQbGF0Zm9ybURh
dGFDYWNoZUtleSYga2V5KSB7IHJldHVybiBjb21wdXRlSGFzaChrZXkuZGVzY3JpcHRpb25LZXks
IGtleS5mYW1pbHksIGtleS5mb250Q3JlYXRpb25Db250ZXh0KTsgfQorICAgIHN0YXRpYyB1bnNp
Z25lZCBoYXNoKGNvbnN0IEZvbnRQbGF0Zm9ybURhdGFDYWNoZUtleSYga2V5KSB7IHJldHVybiBj
b21wdXRlSGFzaChrZXkpOyB9CiAgICAgc3RhdGljIGJvb2wgZXF1YWwoY29uc3QgRm9udFBsYXRm
b3JtRGF0YUNhY2hlS2V5JiBhLCBjb25zdCBGb250UGxhdGZvcm1EYXRhQ2FjaGVLZXkmIGIpIHsg
cmV0dXJuIGEgPT0gYjsgfQogICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBzYWZlVG9Db21wYXJl
VG9FbXB0eU9yRGVsZXRlZCA9IHRydWU7CiB9OwpAQCAtMzYyLDExICszNjcsNiBAQCBib29sIG9w
ZXJhdG9yPT0oY29uc3QgRm9udENhc2NhZGVDYWNoZUtleSYgYSwgY29uc3QgRm9udENhc2NhZGVD
YWNoZUtleSYgYikKICAgICAgICAgJiYgYS5mYW1pbGllcyA9PSBiLmZhbWlsaWVzOwogfQogCi11
bnNpZ25lZCBGb250Q2FzY2FkZUNhY2hlS2V5SGFzaDo6aGFzaChjb25zdCBGb250Q2FzY2FkZUNh
Y2hlS2V5JiBrZXkpCi17Ci0gICAgcmV0dXJuIGNvbXB1dGVIYXNoKGtleS5mb250RGVzY3JpcHRp
b25LZXksIGtleS5mb250U2VsZWN0b3JJZCwga2V5LmZvbnRTZWxlY3RvclZlcnNpb24sIGtleS5m
YW1pbGllcyk7Ci19Ci0KIHZvaWQgRm9udENhY2hlOjppbnZhbGlkYXRlRm9udENhc2NhZGVDYWNo
ZSgpCiB7CiAgICAgbV9mb250Q2FzY2FkZUNhY2hlLmNsZWFyKCk7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250Q2FjaGUuaCBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRDYWNoZS5oCmluZGV4IDc2YmI5ZjNiYmI1MTRiMDE0NWI3
YTllMTc0NzczYzUzNDcxMzVmYTkuLjg5YjRlMTkyN2E3OGUwM2YzNDgzNWE4NmNjOTAyYjFhMjY3
YWEyNjkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRD
YWNoZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRDYWNoZS5o
CkBAIC0yNTcsNiArMjU3LDExIEBAIHN0cnVjdCBGb250Q2FzY2FkZUNhY2hlS2V5IHsKICAgICB1
bnNpZ25lZCBmb250U2VsZWN0b3JWZXJzaW9uOwogfTsKIAoraW5saW5lIHZvaWQgYWRkKEhhc2hl
ciYgaGFzaGVyLCBjb25zdCBGb250Q2FzY2FkZUNhY2hlS2V5JiBrZXkpCit7CisgICAgYWRkKGhh
c2hlciwga2V5LmZvbnREZXNjcmlwdGlvbktleSwga2V5LmZhbWlsaWVzLCBrZXkuZm9udFNlbGVj
dG9ySWQsIGtleS5mb250U2VsZWN0b3JWZXJzaW9uKTsKK30KKwogYm9vbCBvcGVyYXRvcj09KGNv
bnN0IEZvbnRDYXNjYWRlQ2FjaGVLZXkmLCBjb25zdCBGb250Q2FzY2FkZUNhY2hlS2V5Jik7CiAK
IHN0cnVjdCBGb250Q2FzY2FkZUNhY2hlRW50cnkgewpAQCAtMjY3LDcgKzI3Miw3IEBAIHN0cnVj
dCBGb250Q2FzY2FkZUNhY2hlRW50cnkgewogfTsKIAogc3RydWN0IEZvbnRDYXNjYWRlQ2FjaGVL
ZXlIYXNoIHsKLSAgICBzdGF0aWMgdW5zaWduZWQgaGFzaChjb25zdCBGb250Q2FzY2FkZUNhY2hl
S2V5Jik7CisgICAgc3RhdGljIHVuc2lnbmVkIGhhc2goY29uc3QgRm9udENhc2NhZGVDYWNoZUtl
eSYga2V5KSB7IHJldHVybiBjb21wdXRlSGFzaChrZXkpOyB9CiAgICAgc3RhdGljIGJvb2wgZXF1
YWwoY29uc3QgRm9udENhc2NhZGVDYWNoZUtleSYgYSwgY29uc3QgRm9udENhc2NhZGVDYWNoZUtl
eSYgYikgeyByZXR1cm4gYSA9PSBiOyB9CiAgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIHNhZmVU
b0NvbXBhcmVUb0VtcHR5T3JEZWxldGVkID0gZmFsc2U7CiB9OwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2EvRm9udEZhbWlseVNwZWNpZmljYXRpb25D
b3JlVGV4dC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9Gb250
RmFtaWx5U3BlY2lmaWNhdGlvbkNvcmVUZXh0LmNwcAppbmRleCAzYjRkYTRmNTI3YmM4NGU1YTQ3
MTY4YTk5NDZlN2ZiNjg3NzRlN2UyLi41MjA0OTViYzc5Y2MzYjE2ZGM3ZWVhYmE4MmE0MDJkYjlj
Mzc4YWUwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb2Nv
YS9Gb250RmFtaWx5U3BlY2lmaWNhdGlvbkNvcmVUZXh0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9Gb250RmFtaWx5U3BlY2lmaWNhdGlvbkNvcmVUZXh0
LmNwcApAQCAtNjQsOCArNjQsMTQgQEAgc3RydWN0IEZvbnRGYW1pbHlTcGVjaWZpY2F0aW9uS2V5
IHsKICAgICBib29sIGlzSGFzaFRhYmxlRGVsZXRlZFZhbHVlKCkgY29uc3QgeyByZXR1cm4gZm9u
dERlc2NyaXB0aW9uS2V5LmlzSGFzaFRhYmxlRGVsZXRlZFZhbHVlKCk7IH0KIH07CiAKK2lubGlu
ZSB2b2lkIGFkZChIYXNoZXImIGhhc2hlciwgY29uc3QgRm9udEZhbWlseVNwZWNpZmljYXRpb25L
ZXkmIGtleSkKK3sKKyAgICAvLyBGSVhNRTogSWRlYWxseSwgd2Ugd291bGRuJ3QgYmUgaGFzaGlu
ZyBhIGhhc2guCisgICAgYWRkKGhhc2hlciwgc2FmZUNGSGFzaChrZXkuZm9udERlc2NyaXB0b3Iu
Z2V0KCkpLCBrZXkuZm9udERlc2NyaXB0aW9uS2V5KTsKK30KKwogc3RydWN0IEZvbnRGYW1pbHlT
cGVjaWZpY2F0aW9uS2V5SGFzaCB7Ci0gICAgc3RhdGljIHVuc2lnbmVkIGhhc2goY29uc3QgRm9u
dEZhbWlseVNwZWNpZmljYXRpb25LZXkmIGtleSkgeyByZXR1cm4gY29tcHV0ZUhhc2goc2FmZUNG
SGFzaChrZXkuZm9udERlc2NyaXB0b3IuZ2V0KCkpLCBrZXkuZm9udERlc2NyaXB0aW9uS2V5KTsg
fQorICAgIHN0YXRpYyB1bnNpZ25lZCBoYXNoKGNvbnN0IEZvbnRGYW1pbHlTcGVjaWZpY2F0aW9u
S2V5JiBrZXkpIHsgcmV0dXJuIGNvbXB1dGVIYXNoKGtleSk7IH0KICAgICBzdGF0aWMgYm9vbCBl
cXVhbChjb25zdCBGb250RmFtaWx5U3BlY2lmaWNhdGlvbktleSYgYSwgY29uc3QgRm9udEZhbWls
eVNwZWNpZmljYXRpb25LZXkmIGIpIHsgcmV0dXJuIGEgPT0gYjsgfQogICAgIHN0YXRpYyBjb25z
dCBib29sIHNhZmVUb0NvbXBhcmVUb0VtcHR5T3JEZWxldGVkID0gdHJ1ZTsKIH07CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9TeXN0ZW1Gb250RGF0
YWJhc2VDb3JlVGV4dC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY29jb2Ev
U3lzdGVtRm9udERhdGFiYXNlQ29yZVRleHQuaAppbmRleCA5YWQxZTBjYzQ1MGYwZWFhODI5ODE3
MzU1OTc4MDBhYzA4MDQ5NmQ0Li41ZDMzNWZjMjRlNzUzMTlkNWE4MDMzZDU0MjljYTEyN2Q2MTlk
YWYyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9T
eXN0ZW1Gb250RGF0YWJhc2VDb3JlVGV4dC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2NvY29hL1N5c3RlbUZvbnREYXRhYmFzZUNvcmVUZXh0LmgKQEAgLTcwLDEzICs3
MCw4IEBAIHB1YmxpYzoKICAgICAgICAgICAgICAgICAmJiBpdGFsaWMgPT0gb3RoZXIuaXRhbGlj
OwogICAgICAgICB9CiAKLSAgICAgICAgdW5zaWduZWQgaGFzaCgpIGNvbnN0Ci0gICAgICAgIHsK
LSAgICAgICAgICAgIHJldHVybiBjb21wdXRlSGFzaChmb250TmFtZSwgbG9jYWxlLCB3ZWlnaHQs
IHdpZHRoLCBzaXplLCBhbGxvd1VzZXJJbnN0YWxsZWRGb250cywgaXRhbGljKTsKLSAgICAgICAg
fQotCiAgICAgICAgIHN0cnVjdCBIYXNoIHsKLSAgICAgICAgICAgIHN0YXRpYyB1bnNpZ25lZCBo
YXNoKGNvbnN0IENhc2NhZGVMaXN0UGFyYW1ldGVycyYgcGFyYW1ldGVycykgeyByZXR1cm4gcGFy
YW1ldGVycy5oYXNoKCk7IH0KKyAgICAgICAgICAgIHN0YXRpYyB1bnNpZ25lZCBoYXNoKGNvbnN0
IENhc2NhZGVMaXN0UGFyYW1ldGVycyYpOwogICAgICAgICAgICAgc3RhdGljIGJvb2wgZXF1YWwo
Y29uc3QgQ2FzY2FkZUxpc3RQYXJhbWV0ZXJzJiBhLCBjb25zdCBDYXNjYWRlTGlzdFBhcmFtZXRl
cnMmIGIpIHsgcmV0dXJuIGEgPT0gYjsgfQogICAgICAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wg
c2FmZVRvQ29tcGFyZVRvRW1wdHlPckRlbGV0ZWQgPSB0cnVlOwogICAgICAgICB9OwpAQCAtMTI1
LDQgKzEyMCwxNCBAQCBwcml2YXRlOgogICAgIEhhc2hNYXA8U3RyaW5nLCBTdHJpbmc+IG1fbW9u
b3NwYWNlRmFtaWxpZXM7CiB9OwogCitpbmxpbmUgdm9pZCBhZGQoSGFzaGVyJiBoYXNoZXIsIGNv
bnN0IFN5c3RlbUZvbnREYXRhYmFzZUNvcmVUZXh0OjpDYXNjYWRlTGlzdFBhcmFtZXRlcnMmIHBh
cmFtZXRlcnMpCit7CisgICAgYWRkKGhhc2hlciwgcGFyYW1ldGVycy5mb250TmFtZSwgcGFyYW1l
dGVycy5sb2NhbGUsIHBhcmFtZXRlcnMud2VpZ2h0LCBwYXJhbWV0ZXJzLndpZHRoLCBwYXJhbWV0
ZXJzLnNpemUsIHBhcmFtZXRlcnMuYWxsb3dVc2VySW5zdGFsbGVkRm9udHMsIHBhcmFtZXRlcnMu
aXRhbGljKTsKIH0KKworaW5saW5lIHVuc2lnbmVkIFN5c3RlbUZvbnREYXRhYmFzZUNvcmVUZXh0
OjpDYXNjYWRlTGlzdFBhcmFtZXRlcnM6Okhhc2g6Omhhc2goY29uc3QgQ2FzY2FkZUxpc3RQYXJh
bWV0ZXJzJiBwYXJhbWV0ZXJzKQoreworICAgIHJldHVybiBjb21wdXRlSGFzaChwYXJhbWV0ZXJz
KTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvZnJlZXR5cGUvRm9udENhY2hlRnJlZVR5cGUuY3BwIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZnJlZXR5cGUvRm9udENhY2hlRnJlZVR5cGUu
Y3BwCmluZGV4IDY2MWRlZDc0ZjliOTg3NzZmYjJmOGNlMjhmNzZlZDMxZDBjM2FkODcuLmI5M2Jj
MzRjYzRkNGEzNDRjYjQxMmVjNzFlZjNjODFkZGU3NTA5ZDIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZyZWV0eXBlL0ZvbnRDYWNoZUZyZWVUeXBlLmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9mcmVldHlwZS9Gb250Q2FjaGVG
cmVlVHlwZS5jcHAKQEAgLTIyNSw4ICsyMjUsMTMgQEAgc3RydWN0IEZhbGxiYWNrRm9udERlc2Ny
aXB0aW9uS2V5IHsKIAogfTsKIAoraW5saW5lIHZvaWQgYWRkKEhhc2hlciYgaGFzaGVyLCBjb25z
dCBGYWxsYmFja0ZvbnREZXNjcmlwdGlvbktleSYga2V5KQoreworICAgIGFkZChoYXNoZXIsIGtl
eS5kZXNjcmlwdGlvbktleSwga2V5LmNvbG9yZWRGb250KTsKK30KKwogc3RydWN0IEZhbGxiYWNr
Rm9udERlc2NyaXB0aW9uS2V5SGFzaCB7Ci0gICAgc3RhdGljIHVuc2lnbmVkIGhhc2goY29uc3Qg
RmFsbGJhY2tGb250RGVzY3JpcHRpb25LZXkmIGtleSkgeyByZXR1cm4gY29tcHV0ZUhhc2goa2V5
LmRlc2NyaXB0aW9uS2V5LCBrZXkuY29sb3JlZEZvbnQpOyB9CisgICAgc3RhdGljIHVuc2lnbmVk
IGhhc2goY29uc3QgRmFsbGJhY2tGb250RGVzY3JpcHRpb25LZXkmIGtleSkgeyByZXR1cm4gY29t
cHV0ZUhhc2goa2V5KTsgfQogICAgIHN0YXRpYyBib29sIGVxdWFsKGNvbnN0IEZhbGxiYWNrRm9u
dERlc2NyaXB0aW9uS2V5JiBhLCBjb25zdCBGYWxsYmFja0ZvbnREZXNjcmlwdGlvbktleSYgYikg
eyByZXR1cm4gYSA9PSBiOyB9CiAgICAgc3RhdGljIGNvbnN0IGJvb2wgc2FmZVRvQ29tcGFyZVRv
RW1wdHlPckRlbGV0ZWQgPSB0cnVlOwogfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvTmV0
d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29ya0NhY2hlLmggYi9Tb3VyY2UvV2ViS2l0L05ldHdvcmtQ
cm9jZXNzL2NhY2hlL05ldHdvcmtDYWNoZS5oCmluZGV4IDkwNDM0N2YwNTIwNTAyMzcxNmM2ZDZi
ZDUxMDg2MGVmMzc0MTMzNjAuLjQ5NGNlOTlhNTY3MDc5ZDAzZjhmNDIyNWY2NDJhZjJkNWQ3MWJk
YzggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvTmV0d29ya1Byb2Nlc3MvY2FjaGUvTmV0d29y
a0NhY2hlLmgKKysrIGIvU291cmNlL1dlYktpdC9OZXR3b3JrUHJvY2Vzcy9jYWNoZS9OZXR3b3Jr
Q2FjaGUuaApAQCAtMzUsNiArMzUsNyBAQAogI2luY2x1ZGUgPFdlYkNvcmUvUmVzb3VyY2VSZXNw
b25zZS5oPgogI2luY2x1ZGUgPHBhbC9TZXNzaW9uSUQuaD4KICNpbmNsdWRlIDx3dGYvQ29tcGxl
dGlvbkhhbmRsZXIuaD4KKyNpbmNsdWRlIDx3dGYvSGFzaGVyLmg+CiAjaW5jbHVkZSA8d3RmL09w
dGlvblNldC5oPgogI2luY2x1ZGUgPHd0Zi9TZWNvbmRzLmg+CiAjaW5jbHVkZSA8d3RmL1dlYWtI
YXNoU2V0Lmg+CkBAIC01MywxMyArNTQsMTEgQEAgc3RydWN0IEdsb2JhbEZyYW1lSUQgewogICAg
IFdlYlBhZ2VQcm94eUlkZW50aWZpZXIgd2ViUGFnZVByb3h5SUQ7CiAgICAgV2ViQ29yZTo6UGFn
ZUlkZW50aWZpZXIgd2ViUGFnZUlEOwogICAgIFdlYkNvcmU6OkZyYW1lSWRlbnRpZmllciBmcmFt
ZUlEOwotCi0gICAgdW5zaWduZWQgaGFzaCgpIGNvbnN0OwogfTsKIAotaW5saW5lIHVuc2lnbmVk
IEdsb2JhbEZyYW1lSUQ6Omhhc2goKSBjb25zdAoraW5saW5lIHZvaWQgYWRkKEhhc2hlciYgaGFz
aGVyLCBjb25zdCBHbG9iYWxGcmFtZUlEJiBpZGVudGlmaWVyKQogewotICAgIHJldHVybiBjb21w
dXRlSGFzaCh3ZWJQYWdlSUQsIGZyYW1lSUQpOworICAgIGFkZChoYXNoZXIsIGlkZW50aWZpZXIu
d2ViUGFnZUlELCBpZGVudGlmaWVyLmZyYW1lSUQpOwogfQogCiBpbmxpbmUgYm9vbCBvcGVyYXRv
cj09KGNvbnN0IEdsb2JhbEZyYW1lSUQmIGEsIGNvbnN0IEdsb2JhbEZyYW1lSUQmIGIpCkBAIC03
NSw3ICs3NCw3IEBAIGlubGluZSBib29sIG9wZXJhdG9yPT0oY29uc3QgR2xvYmFsRnJhbWVJRCYg
YSwgY29uc3QgR2xvYmFsRnJhbWVJRCYgYikKIG5hbWVzcGFjZSBXVEYgewogCiBzdHJ1Y3QgR2xv
YmFsRnJhbWVJREhhc2ggewotICAgIHN0YXRpYyB1bnNpZ25lZCBoYXNoKGNvbnN0IFdlYktpdDo6
TmV0d29ya0NhY2hlOjpHbG9iYWxGcmFtZUlEJiBrZXkpIHsgcmV0dXJuIGtleS5oYXNoKCk7IH0K
KyAgICBzdGF0aWMgdW5zaWduZWQgaGFzaChjb25zdCBXZWJLaXQ6Ok5ldHdvcmtDYWNoZTo6R2xv
YmFsRnJhbWVJRCYga2V5KSB7IHJldHVybiBjb21wdXRlSGFzaChrZXkpOyB9CiAgICAgc3RhdGlj
IGJvb2wgZXF1YWwoY29uc3QgV2ViS2l0OjpOZXR3b3JrQ2FjaGU6Okdsb2JhbEZyYW1lSUQmIGEs
IGNvbnN0IFdlYktpdDo6TmV0d29ya0NhY2hlOjpHbG9iYWxGcmFtZUlEJiBiKSB7IHJldHVybiBh
ID09IGI7IH0KICAgICBzdGF0aWMgY29uc3QgYm9vbCBzYWZlVG9Db21wYXJlVG9FbXB0eU9yRGVs
ZXRlZCA9IHRydWU7CiB9OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9QbGF0Zm9ybS9JUEMv
U3RyaW5nUmVmZXJlbmNlLmNwcCBiL1NvdXJjZS9XZWJLaXQvUGxhdGZvcm0vSVBDL1N0cmluZ1Jl
ZmVyZW5jZS5jcHAKaW5kZXggMjE2MTEzOWMzMDE0ZjBlYWZiM2RjNDdjODVkYTQxOTBhMmJhMDY2
Ni4uMjBjMTY2NTMzZWU3Nzk3MzEwNTZlNzdiYjZiMzMxYmM4M2NhMDc2YyAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYktpdC9QbGF0Zm9ybS9JUEMvU3RyaW5nUmVmZXJlbmNlLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViS2l0L1BsYXRmb3JtL0lQQy9TdHJpbmdSZWZlcmVuY2UuY3BwCkBAIC01Nyw5ICs1Nyw5
IEBAIGJvb2wgU3RyaW5nUmVmZXJlbmNlOjpkZWNvZGUoRGVjb2RlciYgZGVjb2RlciwgU3RyaW5n
UmVmZXJlbmNlJiByZXN1bHQpCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLXVuc2lnbmVkIFN0cmlu
Z1JlZmVyZW5jZTo6SGFzaDo6aGFzaChjb25zdCBTdHJpbmdSZWZlcmVuY2UmIGEpCit1bnNpZ25l
ZCBTdHJpbmdSZWZlcmVuY2U6Okhhc2g6Omhhc2goY29uc3QgU3RyaW5nUmVmZXJlbmNlJiBzdHJp
bmcpCiB7Ci0gICAgcmV0dXJuIFN0cmluZ0hhc2hlcjo6Y29tcHV0ZUhhc2gocmVpbnRlcnByZXRf
Y2FzdDxjb25zdCB1bnNpZ25lZCBjaGFyKj4oYS5kYXRhKCkpLCBhLnNpemUoKSk7CisgICAgcmV0
dXJuIGNvbXB1dGVIYXNoKHN0cmluZyk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIElQQwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdC9QbGF0Zm9ybS9JUEMvU3RyaW5nUmVmZXJlbmNlLmggYi9Tb3Vy
Y2UvV2ViS2l0L1BsYXRmb3JtL0lQQy9TdHJpbmdSZWZlcmVuY2UuaAppbmRleCA1NmIxZGQwMDFj
NmYxNDVlYjYwMDUwYWNlZjNiNmM4MTJkOTk2ZjBkLi40OTJlMDcyMDVkYTllZDFmNjg1MjVlNDBj
OTYwNGI3MjJlOWY4NzMxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1BsYXRmb3JtL0lQQy9T
dHJpbmdSZWZlcmVuY2UuaAorKysgYi9Tb3VyY2UvV2ViS2l0L1BsYXRmb3JtL0lQQy9TdHJpbmdS
ZWZlcmVuY2UuaApAQCAtMjksNiArMjksNyBAQAogI2luY2x1ZGUgPHN0cmluZy5oPgogI2luY2x1
ZGUgPHd0Zi9Gb3J3YXJkLmg+CiAjaW5jbHVkZSA8d3RmL0hhc2hUcmFpdHMuaD4KKyNpbmNsdWRl
IDx3dGYvSGFzaGVyLmg+CiAKIG5hbWVzcGFjZSBJUEMgewogCkBAIC03OSw2ICs4MCwxMSBAQCBw
cml2YXRlOgogICAgIHNpemVfdCBtX3NpemU7CiB9OwogCitpbmxpbmUgdm9pZCBhZGQoSGFzaGVy
JiBoYXNoZXIsIGNvbnN0IFN0cmluZ1JlZmVyZW5jZSYgc3RyaW5nKQoreworICAgIGFkZChoYXNo
ZXIsIFNwYW4geyBzdHJpbmcuZGF0YSgpLCBzdHJpbmcuc2l6ZSgpIH0pOworfQorCiBpbmxpbmUg
Ym9vbCBvcGVyYXRvcj09KGNvbnN0IFN0cmluZ1JlZmVyZW5jZSYgYSwgY29uc3QgU3RyaW5nUmVm
ZXJlbmNlJiBiKQogewogICAgIHJldHVybiBhLnNpemUoKSA9PSBiLnNpemUoKSAmJiAhbWVtY21w
KGEuZGF0YSgpLCBiLmRhdGEoKSwgYS5zaXplKCkpOwpkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdl
YktpdEFQSS9UZXN0cy9XZWJDb3JlL0NvbG9yVGVzdHMuY3BwIGIvVG9vbHMvVGVzdFdlYktpdEFQ
SS9UZXN0cy9XZWJDb3JlL0NvbG9yVGVzdHMuY3BwCmluZGV4IGIwYTAzYmM3NWI0YWEwYzgxMGY5
Njk3MTkzNDEzNWFiOTgxYzVlNGEuLmViMTY3YWNkYzZlZjFmNTQ3ZTdiMmEwNWIxYzE5NmNlMmQw
OTVhYWMgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViQ29yZS9Db2xv
clRlc3RzLmNwcAorKysgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYkNvcmUvQ29sb3JU
ZXN0cy5jcHAKQEAgLTMxLDYgKzMxLDcgQEAKICNpbmNsdWRlIDxXZWJDb3JlL0NvbG9yQ29udmVy
c2lvbi5oPgogI2luY2x1ZGUgPFdlYkNvcmUvQ29sb3JTZXJpYWxpemF0aW9uLmg+CiAjaW5jbHVk
ZSA8V2ViQ29yZS9Db2xvclR5cGVzLmg+CisjaW5jbHVkZSA8d3RmL0hhc2hlci5oPgogI2luY2x1
ZGUgPHd0Zi9NYXRoRXh0cmFzLmg+CiAKIHVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwpAQCAtMjk5
LDE5ICszMDAsMTkgQEAgVEVTVChDb2xvciwgSGFzaCkKICAgICB7CiAgICAgICAgIENvbG9yIGMx
IHsgRGlzcGxheVAzPGZsb2F0PiB7IDEuMCwgMC41LCAwLjI1LCAxLjAgfSB9OwogICAgICAgICBD
b2xvciBjMiB7IERpc3BsYXlQMzxmbG9hdD4geyAxLjAsIDAuNSwgMC4yNSwgMS4wIH0gfTsKLSAg
ICAgICAgRVhQRUNUX0VRKGMxLmhhc2goKSwgYzIuaGFzaCgpKTsKKyAgICAgICAgRVhQRUNUX0VR
KGNvbXB1dGVIYXNoKGMxKSwgY29tcHV0ZUhhc2goYzIpKTsKICAgICB9CiAKICAgICB7CiAgICAg
ICAgIENvbG9yIGMxIHsgRGlzcGxheVAzPGZsb2F0PiB7IDEuMCwgMC41LCAwLjI1LCAxLjAgfSB9
OwogICAgICAgICBDb2xvciBjMiB7IFNSR0JBPGZsb2F0PiB7IDEuMCwgMC41LCAwLjI1LCAxLjAg
fSB9OwotICAgICAgICBFWFBFQ1RfTkUoYzEuaGFzaCgpLCBjMi5oYXNoKCkpOworICAgICAgICBF
WFBFQ1RfTkUoY29tcHV0ZUhhc2goYzEpLCBjb21wdXRlSGFzaChjMikpOwogICAgIH0KIAogICAg
IGF1dG8gY29tcG9uZW50Qnl0ZXMgPSBTUkdCQTx1aW50OF90PiB7IDI1NSwgMTI4LCA2MywgMTI3
IH07CiAgICAgQ29sb3IgcmdiMSB7IGNvbnZlcnRDb2xvcjxTUkdCQTxmbG9hdD4+KGNvbXBvbmVu
dEJ5dGVzKSB9OwogICAgIENvbG9yIHJnYjIgeyBjb21wb25lbnRCeXRlcyB9OwotICAgIEVYUEVD
VF9ORShyZ2IxLmhhc2goKSwgcmdiMi5oYXNoKCkpOworICAgIEVYUEVDVF9ORShjb21wdXRlSGFz
aChyZ2IxKSwgY29tcHV0ZUhhc2gocmdiMikpOwogfQogCiBURVNUKENvbG9yLCBNb3ZlQ29uc3Ry
dWN0b3IpCg==
</data>

          </attachment>
      

    </bug>

</bugzilla>