<?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>206430</bug_id>
          
          <creation_ts>2020-01-17 10:56:54 -0800</creation_ts>
          <short_desc>Deleting a property should not turn structures into uncacheable dictionaries</short_desc>
          <delta_ts>2020-02-05 19:48:41 -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>JavaScriptCore</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="Justin Michaud">justin_michaud</reporter>
          <assigned_to name="Justin Michaud">justin_michaud</assigned_to>
          <cc>commit-queue</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>fpizlo</cc>
    
    <cc>keith_miller</cc>
    
    <cc>mark.lam</cc>
    
    <cc>msaboff</cc>
    
    <cc>saam</cc>
    
    <cc>tzagallo</cc>
    
    <cc>webkit-bug-importer</cc>
    
    <cc>ysuzuki</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1608091</commentid>
    <comment_count>0</comment_count>
    <who name="Justin Michaud">justin_michaud</who>
    <bug_when>2020-01-17 10:56:54 -0800</bug_when>
    <thetext>Right now, deleteProperty/removePropertyTransition causes a structure transition to uncacheable dictionary. Instead, we should allow it to transition to a new regular structure like adding a property does. This means that we have to:

1) Break the assumption that structure transition offsets increase monotonically
2) Add a new transition map and transition kind for deletes
3) Find some heuristic for when we should actually transition to uncacheable dictionary.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1608400</commentid>
    <comment_count>1</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2020-01-17 23:22:44 -0800</bug_when>
    <thetext>&lt;rdar://problem/58706877&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1610940</commentid>
    <comment_count>2</comment_count>
      <attachid>388747</attachid>
    <who name="Justin Michaud">justin_michaud</who>
    <bug_when>2020-01-24 17:23:13 -0800</bug_when>
    <thetext>Created attachment 388747
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1610942</commentid>
    <comment_count>3</comment_count>
    <who name="Justin Michaud">justin_michaud</who>
    <bug_when>2020-01-24 17:24:42 -0800</bug_when>
    <thetext>WIP patch to see test results.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1610943</commentid>
    <comment_count>4</comment_count>
    <who name="Justin Michaud">justin_michaud</who>
    <bug_when>2020-01-24 17:26:59 -0800</bug_when>
    <thetext>Known omissions:
- the concurrent materialization thing
- tests aren&apos;t complete: flatten, testing with inline cache

Preliminary review, plus extra cases to test would be great.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1611764</commentid>
    <comment_count>5</comment_count>
      <attachid>388747</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2020-01-27 18:10:25 -0800</bug_when>
    <thetext>Comment on attachment 388747
Patch

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

&gt; Source/JavaScriptCore/runtime/Structure.cpp:577
&gt; +    return 0;

nullptr</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1612058</commentid>
    <comment_count>6</comment_count>
      <attachid>389033</attachid>
    <who name="Justin Michaud">justin_michaud</who>
    <bug_when>2020-01-28 11:02:33 -0800</bug_when>
    <thetext>Created attachment 389033
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1612235</commentid>
    <comment_count>7</comment_count>
      <attachid>389083</attachid>
    <who name="Justin Michaud">justin_michaud</who>
    <bug_when>2020-01-28 16:00:43 -0800</bug_when>
    <thetext>Created attachment 389083
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1613221</commentid>
    <comment_count>8</comment_count>
      <attachid>389307</attachid>
    <who name="Justin Michaud">justin_michaud</who>
    <bug_when>2020-01-30 17:11:15 -0800</bug_when>
    <thetext>Created attachment 389307
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1613546</commentid>
    <comment_count>9</comment_count>
      <attachid>389399</attachid>
    <who name="Justin Michaud">justin_michaud</who>
    <bug_when>2020-01-31 13:19:28 -0800</bug_when>
    <thetext>Created attachment 389399
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1614271</commentid>
    <comment_count>10</comment_count>
      <attachid>389597</attachid>
    <who name="Justin Michaud">justin_michaud</who>
    <bug_when>2020-02-03 16:30:52 -0800</bug_when>
    <thetext>Created attachment 389597
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1614705</commentid>
    <comment_count>11</comment_count>
      <attachid>389597</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2020-02-04 13:49:49 -0800</bug_when>
    <thetext>Comment on attachment 389597
Patch

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

r=me

&gt; Source/JavaScriptCore/runtime/PropertyMapHashTable.h:360
&gt; +#ifndef NDEBUG

Use #if ASSERT_ENABLED

&gt; Source/JavaScriptCore/runtime/PropertyMapHashTable.h:497
&gt; +#ifndef NDEBUG

Ditto.

&gt; Source/JavaScriptCore/runtime/Structure.cpp:564
&gt; +    if (Structure* existingTransition = structure-&gt;m_transitionTable.get(propertyName.uid(), attributes, false)) {

Instead of passing `false`, let&apos;s pass,

constexpr bool isAddition = false;
if (Structure* existingTransition = structure-&gt;m_transitionTable.get(propertyName.uid(), attributes, isAddition)) {

&gt; Source/JavaScriptCore/runtime/Structure.cpp:581
&gt; +    for (auto* s = structure; s; s = s-&gt;previousID())
&gt; +        ++transitionCount;

Let&apos;s stop this iteration when transitionCount exceeds s_maxTransitionLength

&gt; Source/JavaScriptCore/runtime/StructureTransitionTable.h:185
&gt; +    bool contains(UniquedStringImpl*, unsigned attributes, bool isAddition = true) const;
&gt; +    Structure* get(UniquedStringImpl*, unsigned attributes, bool isAddition = true) const;

I think specifying `isAddition` boolean in the caller side is easier to read instead of using default parameter.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1614726</commentid>
    <comment_count>12</comment_count>
      <attachid>389706</attachid>
    <who name="Justin Michaud">justin_michaud</who>
    <bug_when>2020-02-04 14:08:01 -0800</bug_when>
    <thetext>Created attachment 389706
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1615145</commentid>
    <comment_count>13</comment_count>
      <attachid>389832</attachid>
    <who name="Justin Michaud">justin_michaud</who>
    <bug_when>2020-02-05 11:22:47 -0800</bug_when>
    <thetext>Created attachment 389832
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1615510</commentid>
    <comment_count>14</comment_count>
      <attachid>389832</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2020-02-05 19:48:39 -0800</bug_when>
    <thetext>Comment on attachment 389832
Patch

Clearing flags on attachment: 389832

Committed r255897: &lt;https://trac.webkit.org/changeset/255897&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1615511</commentid>
    <comment_count>15</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2020-02-05 19:48:41 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>388747</attachid>
            <date>2020-01-24 17:23:13 -0800</date>
            <delta_ts>2020-01-28 11:02:32 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-206430-20200124172312.patch</filename>
            <type>text/plain</type>
            <size>35738</size>
            <attacher name="Justin Michaud">justin_michaud</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjU0ODk3CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCAx
OTIzZTJlNzllMGZhMDMwZmFjOWMyY2RmMTk1ZDczZTU3ZTExMjllLi5kNzg2NWUxMTZmNDA0MDUy
ZTFhYWJiZDUwNDRmYjdjZWQ0MmU4MDEwIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSw1OSBAQAorMjAyMC0wMS0yNCAgSnVzdGluIE1pY2hhdWQgIDxqdXN0aW5fbWljaGF1ZEBh
cHBsZS5jb20+CisKKyAgICAgICAgRGVsZXRpbmcgYSBwcm9wZXJ0eSBzaG91bGQgbm90IHR1cm4g
c3RydWN0dXJlcyBpbnRvIHVuY2FjaGVhYmxlIGRpY3Rpb25hcmllcworICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjA2NDMwCisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgUmlnaHQgbm93LCBkZWxldGVQcm9wZXJ0
eS9yZW1vdmVQcm9wZXJ0eVRyYW5zaXRpb24gY2F1c2VzIGEgc3RydWN0dXJlIHRyYW5zaXRpb24g
dG8gdW5jYWNoZWFibGUgZGljdGlvbmFyeS4gSW5zdGVhZCwgd2Ugc2hvdWxkIGFsbG93IGl0IHRv
IHRyYW5zaXRpb24gdG8gYSBuZXcgcmVndWxhciBzdHJ1Y3R1cmUgbGlrZSBhZGRpbmcgYSBwcm9w
ZXJ0eSBkb2VzLiBUaGlzIG1lYW5zIHRoYXQgd2UgaGF2ZSB0bzoKKworICAgICAgICAxKSBCcmVh
ayB0aGUgYXNzdW1wdGlvbiB0aGF0IHN0cnVjdHVyZSB0cmFuc2l0aW9uIG9mZnNldHMgaW5jcmVh
c2UgbW9ub3RvbmljYWxseQorCisgICAgICAgIFdlIGFkZCBhIG5ldyBmbGFnIHRvIHRlbGwgdGhh
dCBhIHN0cnVjdHVyZSBoYXMgZGVsZXRlZCBpdHMgcHJvcGVydHksIGFuZCB1cGRhdGUgbWF0ZXJp
YWxpemVQcm9wZXJ0eVRhYmxlIHRvIHVzZSBpdC4KKworICAgICAgICAyKSBBZGQgYSBuZXcgdHJh
bnNpdGlvbiBtYXAgYW5kIHRyYW5zaXRpb24ga2luZCBmb3IgZGVsZXRlcworCisgICAgICAgIFdl
IGNhY2hlIHRoZSBkZWxldGUgdHJhbnNpdGlvbi4gV2UgYWxzbyB3aWxsIHRyYW5zaXRpb24gYmFj
ayB0byBhIHByZXZpb3VzIHN0cnVjdHVyZSBpZiB5b3UgYWRkIHRoZW4gaW1tZWRpYXRlbHkgcmVt
b3ZlIChpcyB0aGlzIGNvcnJlY3Q/KS4gSW4gdGhpcyBjYXNlLCB3ZSBuZWVkIHRvIGJlIGNhcmVm
dWwgdG8gZW5zdXJlIHRoYXQgd2Ugc2V0IHN0cnVjdHVyZSBkaWRUcmFuc2l0aW9uLgorCisgICAg
ICAgIDMpIEZpbmQgc29tZSBoZXVyaXN0aWMgZm9yIHdoZW4gd2Ugc2hvdWxkIGFjdHVhbGx5IHRy
YW5zaXRpb24gdG8gdW5jYWNoZWFibGUgZGljdGlvbmFyeS4KKworICAgICAgICBTaW5jZSBkZWxl
dGluZyBwcm9wZXJ0aWVzIGlzIGV4cGVjdGVkIHRvIGJlIHJhcmUsIEkganVzdCB3YWxrIHRoZSBz
dHJ1Y3R1cmUgbGlzdCBhbmQgY291bnQgaXRzIHNpemUgb24gcmVtb3ZhbC4gCisKKyAgICAgICAg
VGhpcyBhbHNvIGZpeGVzIGFuIHVucmVsYXRlZCBidWcgaW4gYWRkUHJvcGVydHksIHdoZXJlIHdl
IGRpZCBub3QgdXNlIGEgR0NTYWZlQ29uY3VycmVudEpTTG9ja2VyLCBhbmQgYWRkcyBhbiBvcHRp
b24gdG8gdHJpZ2dlciB0aGUgYnVnLiBGaW5hbGx5LCB3ZSBhZGQgc29tZSBoZWxwZXIgbWV0aG9k
cyB0byBkb2xsYXJWTSB0byB0ZXN0LgorCisgICAgICAgICogaGVhcC9IZWFwSW5saW5lcy5oOgor
ICAgICAgICAoSlNDOjpIZWFwOjpkZWNyZW1lbnREZWZlcnJhbERlcHRoQW5kR0NJZk5lZWRlZCk6
CisgICAgICAgICogcnVudGltZS9KU09iamVjdC5jcHA6CisgICAgICAgIChKU0M6OkpTT2JqZWN0
OjpkZWxldGVQcm9wZXJ0eSk6CisgICAgICAgICogcnVudGltZS9KU09iamVjdElubGluZXMuaDoK
KyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OnB1dERpcmVjdEludGVybmFsKToKKyAgICAgICAgKiBy
dW50aW1lL09wdGlvbnNMaXN0Lmg6CisgICAgICAgICogcnVudGltZS9Qcm9wZXJ0eU1hcEhhc2hU
YWJsZS5oOgorICAgICAgICAoSlNDOjpQcm9wZXJ0eVRhYmxlOjphZGQpOgorICAgICAgICAoSlND
OjpQcm9wZXJ0eVRhYmxlOjphZGREZWxldGVkT2Zmc2V0KToKKyAgICAgICAgKiBydW50aW1lL1N0
cnVjdHVyZS5jcHA6CisgICAgICAgIChKU0M6OlN0cnVjdHVyZVRyYW5zaXRpb25UYWJsZTo6Y29u
dGFpbnMgY29uc3QpOgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmVUcmFuc2l0aW9uVGFibGU6Omdl
dCBjb25zdCk6CisgICAgICAgIChKU0M6OlN0cnVjdHVyZVRyYW5zaXRpb25UYWJsZTo6YWRkKToK
KyAgICAgICAgKEpTQzo6U3RydWN0dXJlOjpTdHJ1Y3R1cmUpOgorICAgICAgICAoSlNDOjpTdHJ1
Y3R1cmU6Om1hdGVyaWFsaXplUHJvcGVydHlUYWJsZSk6CisgICAgICAgIChKU0M6OlN0cnVjdHVy
ZTo6YWRkTmV3UHJvcGVydHlUcmFuc2l0aW9uKToKKyAgICAgICAgKEpTQzo6U3RydWN0dXJlOjpy
ZW1vdmVQcm9wZXJ0eVRyYW5zaXRpb24pOgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmU6OnJlbW92
ZVByb3BlcnR5VHJhbnNpdGlvbkZyb21FeGlzdGluZ1N0cnVjdHVyZSk6CisgICAgICAgIChKU0M6
OlN0cnVjdHVyZTo6cmVtb3ZlTmV3UHJvcGVydHlUcmFuc2l0aW9uKToKKyAgICAgICAgKEpTQzo6
U3RydWN0dXJlOjp0b1VuY2FjaGVhYmxlRGljdGlvbmFyeVRyYW5zaXRpb24pOgorICAgICAgICAo
SlNDOjpTdHJ1Y3R1cmU6OnJlbW92ZSk6CisgICAgICAgICogcnVudGltZS9TdHJ1Y3R1cmUuaDoK
KyAgICAgICAgKiBydW50aW1lL1N0cnVjdHVyZUlubGluZXMuaDoKKyAgICAgICAgKEpTQzo6U3Ry
dWN0dXJlOjphZGQpOgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmU6OnJlbW92ZSk6CisgICAgICAg
IChKU0M6OlN0cnVjdHVyZTo6cmVtb3ZlUHJvcGVydHlXaXRob3V0VHJhbnNpdGlvbik6CisgICAg
ICAgICogcnVudGltZS9TdHJ1Y3R1cmVUcmFuc2l0aW9uVGFibGUuaDoKKyAgICAgICAgKEpTQzo6
U3RydWN0dXJlVHJhbnNpdGlvblRhYmxlOjpIYXNoOjpoYXNoKToKKyAgICAgICAgKiB0b29scy9K
U0RvbGxhclZNLmNwcDoKKyAgICAgICAgKEpTQzo6SlNEb2xsYXJWTUhlbHBlcjo6ZnVuY3Rpb25H
ZXRTdHJ1Y3R1cmVUcmFuc2l0aW9uTGlzdCk6CisgICAgICAgIChKU0M6OkpTRG9sbGFyVk06OmZp
bmlzaENyZWF0aW9uKToKKwogMjAyMC0wMS0yMSAgUm9iIEJ1aXMgIDxyYnVpc0BpZ2FsaWEuY29t
PgogCiAgICAgICAgIEFkZCBidWlsZCBmbGFnIGZvciBzdGFsZS13aGlsZS1yZXZhbGlkYXRlCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwSW5saW5lcy5oIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcElubGluZXMuaAppbmRleCAxN2YyNDExOGI4MjJl
ZmI3ZjY2ZWUxMjU5NTM3OGZhNThjMjE3YzYyLi43YWYwNTYzYjExZWI2ZDhjMTUyMmQ2MjA5ZmM0
YzE5ZDU1NGE3ZGNmIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFw
SW5saW5lcy5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXBJbmxpbmVzLmgK
QEAgLTE4OCw3ICsxODgsNyBAQCBpbmxpbmUgdm9pZCBIZWFwOjpkZWNyZW1lbnREZWZlcnJhbERl
cHRoQW5kR0NJZk5lZWRlZCgpCiAgICAgQVNTRVJUKCFUaHJlYWQ6Om1heUJlR0NUaHJlYWQoKSB8
fCBtX3dvcmxkSXNTdG9wcGVkKTsKICAgICBtX2RlZmVycmFsRGVwdGgtLTsKICAgICAKLSAgICBp
ZiAoVU5MSUtFTFkobV9kaWREZWZlckdDV29yaykpIHsKKyAgICBpZiAoVU5MSUtFTFkobV9kaWRE
ZWZlckdDV29yaykgfHwgT3B0aW9uczo6Zm9yY2VEaWREZWZlckdDV29yaygpKSB7CiAgICAgICAg
IGRlY3JlbWVudERlZmVycmFsRGVwdGhBbmRHQ0lmTmVlZGVkU2xvdygpOwogICAgICAgICAKICAg
ICAgICAgLy8gSGVyZSBhcmUgdGhlIHBvc3NpYmxlIHJlbGF0aW9uc2hpcHMgYmV0d2VlbiBtX2Rl
ZmVycmFsRGVwdGggYW5kIG1fZGlkRGVmZXJHQ1dvcmsuCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9KU09iamVjdC5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9KU09iamVjdC5jcHAKaW5kZXggZDY3YmE4ZDVjYTk1NjlkMDRhMTllNTAzNjQ1MzA1
OTZiYTlkODhkMi4uZDU5ZTY2YmMyNmMyN2U1ZjZiMzZlZDk5ZWIyNjA4YTg0ZDc2MWQ1MSAxMDA2
NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNPYmplY3QuY3BwCisrKyBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT2JqZWN0LmNwcApAQCAtMjAwMiwxNCAr
MjAwMiwyMSBAQCBib29sIEpTT2JqZWN0OjpkZWxldGVQcm9wZXJ0eShKU0NlbGwqIGNlbGwsIEpT
R2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFByb3BlcgogICAgICAgICBpZiAoYXR0cmlidXRl
cyAmIFByb3BlcnR5QXR0cmlidXRlOjpEb250RGVsZXRlICYmIHZtLmRlbGV0ZVByb3BlcnR5TW9k
ZSgpICE9IFZNOjpEZWxldGVQcm9wZXJ0eU1vZGU6Oklnbm9yZUNvbmZpZ3VyYWJsZSkKICAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgICAgICBQcm9wZXJ0eU9mZnNldCBvZmZzZXQ7Cisg
ICAgICAgIFByb3BlcnR5T2Zmc2V0IG9mZnNldCA9IGludmFsaWRPZmZzZXQ7CiAgICAgICAgIGlm
IChzdHJ1Y3R1cmUtPmlzVW5jYWNoZWFibGVEaWN0aW9uYXJ5KCkpCi0gICAgICAgICAgICBvZmZz
ZXQgPSBzdHJ1Y3R1cmUtPnJlbW92ZVByb3BlcnR5V2l0aG91dFRyYW5zaXRpb24odm0sIHByb3Bl
cnR5TmFtZSwgW10gKGNvbnN0IENvbmN1cnJlbnRKU0xvY2tlciYsIFByb3BlcnR5T2Zmc2V0KSB7
IH0pOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICB0aGlzT2JqZWN0LT5zZXRTdHJ1Y3R1cmUo
dm0sIFN0cnVjdHVyZTo6cmVtb3ZlUHJvcGVydHlUcmFuc2l0aW9uKHZtLCBzdHJ1Y3R1cmUsIHBy
b3BlcnR5TmFtZSwgb2Zmc2V0KSk7CisgICAgICAgICAgICBvZmZzZXQgPSBzdHJ1Y3R1cmUtPnJl
bW92ZVByb3BlcnR5V2l0aG91dFRyYW5zaXRpb24odm0sIHByb3BlcnR5TmFtZSwgW10gKGNvbnN0
IEdDU2FmZUNvbmN1cnJlbnRKU0xvY2tlciYsIFByb3BlcnR5T2Zmc2V0LCBQcm9wZXJ0eU9mZnNl
dCkgeyB9KTsKKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBzdHJ1Y3R1cmUgPSBTdHJ1Y3R1
cmU6OnJlbW92ZVByb3BlcnR5VHJhbnNpdGlvbih2bSwgc3RydWN0dXJlLCBwcm9wZXJ0eU5hbWUs
IG9mZnNldCk7CisgICAgICAgICAgICB0aGlzT2JqZWN0LT5zZXRTdHJ1Y3R1cmUodm0sIHN0cnVj
dHVyZSk7CisgICAgICAgIH0KIAotICAgICAgICBpZiAob2Zmc2V0ICE9IGludmFsaWRPZmZzZXQp
CisgICAgICAgIEFTU0VSVCghaXNWYWxpZE9mZnNldChzdHJ1Y3R1cmUtPmdldCh2bSwgcHJvcGVy
dHlOYW1lLCBhdHRyaWJ1dGVzKSkpOworICAgICAgICBBU1NFUlQob2Zmc2V0ICE9IGludmFsaWRP
ZmZzZXQpOworCisgICAgICAgIGlmIChvZmZzZXQgIT0gaW52YWxpZE9mZnNldCkgeworICAgICAg
ICAgICAgV1RGOjpzdG9yZVN0b3JlRmVuY2UoKTsKICAgICAgICAgICAgIHRoaXNPYmplY3QtPmxv
Y2F0aW9uRm9yT2Zmc2V0KG9mZnNldCktPmNsZWFyKCk7CisgICAgICAgIH0KICAgICB9CiAKICAg
ICByZXR1cm4gdHJ1ZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0pTT2JqZWN0SW5saW5lcy5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNPYmpl
Y3RJbmxpbmVzLmgKaW5kZXggYTY3MDAzNDdmNjk3NmU2MWIwNWRiMThmMmIwOTZhYWE3OWUyZWJi
My4uYjZkYjNmYTIxMzllZmI1MjBjYzQ3NmQ1NjY0M2ViMGRhNmRjNmM3ZSAxMDA2NDQKLS0tIGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNPYmplY3RJbmxpbmVzLmgKKysrIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNPYmplY3RJbmxpbmVzLmgKQEAgLTM5Myw2ICsz
OTMsMTMgQEAgQUxXQVlTX0lOTElORSBib29sIEpTT2JqZWN0OjpwdXREaXJlY3RJbnRlcm5hbChW
TSYgdm0sIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUKICAgICAgICAgbnVrZVN0cnVjdHVyZUFu
ZFNldEJ1dHRlcmZseSh2bSwgc3RydWN0dXJlSUQsIG5ld0J1dHRlcmZseSk7CiAgICAgfQogCisg
ICAgaWYgKCEoIWdldERpcmVjdChvZmZzZXQpIHx8ICFKU1ZhbHVlOjplbmNvZGUoZ2V0RGlyZWN0
KG9mZnNldCkpKSkgeworICAgICAgICBmb3IgKGF1dG8qIHN0cnVjdHVyZSA9IG5ld1N0cnVjdHVy
ZTsgc3RydWN0dXJlOyBzdHJ1Y3R1cmUgPSBzdHJ1Y3R1cmUtPnByZXZpb3VzSUQoKSkgeworICAg
ICAgICAgICAgaWYgKHN0cnVjdHVyZS0+dHJhbnNpdGlvbk9mZnNldCgpID09IG9mZnNldCkKKyAg
ICAgICAgICAgICAgICBkYXRhTG9nTG4oc3RydWN0dXJlLT5tX3RyYW5zaXRpb25Qcm9wZXJ0eU5h
bWUpOworICAgICAgICB9CisgICAgfQorCiAgICAgLy8gVGhpcyBhc3NlcnRpb24gdmVyaWZpZXMg
dGhhdCB0aGUgY29uY3VycmVudCBHQyB3b24ndCByZWFkIGdhcmJhZ2UgaWYgdGhlIGNvbmN1cnJl
bnRHQwogICAgIC8vIGlzIHJ1bm5pbmcgYXQgdGhlIHNhbWUgdGltZSB3ZSBwdXQgd2l0aG91dCB0
cmFuc2l0aW9uaW5nLgogICAgIEFTU0VSVCghZ2V0RGlyZWN0KG9mZnNldCkgfHwgIUpTVmFsdWU6
OmVuY29kZShnZXREaXJlY3Qob2Zmc2V0KSkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvT3B0aW9uc0xpc3QuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL09wdGlvbnNMaXN0LmgKaW5kZXggZjM1YzVlMTU3NDM2YjJiZDgwMGEwNmQ3MTIyZDBiNmRh
ODRjYWNkMS4uNTRiMDM1YjhkOWQ5ZjYwYzJhN2UxZmE1MWRmMDM0YjRhNmRmMzFkOSAxMDA2NDQK
LS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9uc0xpc3QuaAorKysgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PcHRpb25zTGlzdC5oCkBAIC0zNDgsNiArMzQ4
LDcgQEAgY29uc3RleHByIGJvb2wgZW5hYmxlV2ViQXNzZW1ibHlTdHJlYW1pbmdBcGkgPSBmYWxz
ZTsKICAgICB2KEJvb2wsIHVzZUdDLCB0cnVlLCBOb3JtYWwsIG51bGxwdHIpIFwKICAgICB2KEJv
b2wsIGdjQXRFbmQsIGZhbHNlLCBOb3JtYWwsICJJZiB0cnVlLCB0aGUganNjIENMSSB3aWxsIGRv
IGEgR0MgYmVmb3JlIGV4aXRpbmciKSBcCiAgICAgdihCb29sLCBmb3JjZUdDU2xvd1BhdGhzLCBm
YWxzZSwgTm9ybWFsLCAiSWYgdHJ1ZSwgd2Ugd2lsbCBmb3JjZSBhbGwgSklUIGZhc3QgYWxsb2Nh
dGlvbnMgZG93biB0aGVpciBzbG93IHBhdGhzLiIpIFwKKyAgICB2KEJvb2wsIGZvcmNlRGlkRGVm
ZXJHQ1dvcmssIGZhbHNlLCBOb3JtYWwsICJJZiB0cnVlLCB3ZSB3aWxsIGZvcmNlIGFsbCBEZWZl
ckdDIGRlc3RydWN0aW9ucyB0byBwZXJmb3JtIGEgR0MuIikgXAogICAgIHYoVW5zaWduZWQsIGdj
TWF4SGVhcFNpemUsIDAsIE5vcm1hbCwgbnVsbHB0cikgXAogICAgIHYoVW5zaWduZWQsIGZvcmNl
UkFNU2l6ZSwgMCwgTm9ybWFsLCBudWxscHRyKSBcCiAgICAgdihCb29sLCByZWNvcmRHQ1BhdXNl
VGltZXMsIGZhbHNlLCBOb3JtYWwsIG51bGxwdHIpIFwKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL1Byb3BlcnR5TWFwSGFzaFRhYmxlLmggYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9Qcm9wZXJ0eU1hcEhhc2hUYWJsZS5oCmluZGV4IGNiNjAxNWNmMjBl
NDUzMDExNTliYjAwZDc0MjYyMzc0ZmVlY2I5Y2YuLjI3MmNmOTg1NmMxYWU4YzRjYmQ0NzQ3ZmNi
NDJjOTQyZjM0NWRiMGEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L1Byb3BlcnR5TWFwSGFzaFRhYmxlLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvUHJvcGVydHlNYXBIYXNoVGFibGUuaApAQCAtMzQ4LDYgKzM0OCw4IEBAIGlubGluZSBQcm9w
ZXJ0eVRhYmxlOjpWYWx1ZVR5cGUqIFByb3BlcnR5VGFibGU6OmdldChjb25zdCBLZXlUeXBlJiBr
ZXkpCiAKIGlubGluZSBzdGQ6OnBhaXI8UHJvcGVydHlUYWJsZTo6ZmluZF9pdGVyYXRvciwgYm9v
bD4gUHJvcGVydHlUYWJsZTo6YWRkKGNvbnN0IFZhbHVlVHlwZSYgZW50cnksIFByb3BlcnR5T2Zm
c2V0JiBvZmZzZXQsIEVmZmVjdE9uUHJvcGVydHlPZmZzZXQgb2Zmc2V0RWZmZWN0KQogeworICAg
IEFTU0VSVCghbV9kZWxldGVkT2Zmc2V0cyB8fCAhbV9kZWxldGVkT2Zmc2V0cy0+Y29udGFpbnMo
b2Zmc2V0KSk7CisKICAgICAvLyBMb29rIGZvciBhIHZhbHVlIHdpdGggYSBtYXRjaGluZyBrZXkg
YWxyZWFkeSBpbiB0aGUgYXJyYXkuCiAgICAgZmluZF9pdGVyYXRvciBpdGVyID0gZmluZChlbnRy
eS5rZXkpOwogICAgIGlmIChpdGVyLmZpcnN0KSB7CkBAIC00NTEsNiArNDUzLDcgQEAgaW5saW5l
IHZvaWQgUHJvcGVydHlUYWJsZTo6YWRkRGVsZXRlZE9mZnNldChQcm9wZXJ0eU9mZnNldCBvZmZz
ZXQpCiB7CiAgICAgaWYgKCFtX2RlbGV0ZWRPZmZzZXRzKQogICAgICAgICBtX2RlbGV0ZWRPZmZz
ZXRzID0gbWFrZVVuaXF1ZTxWZWN0b3I8UHJvcGVydHlPZmZzZXQ+PigpOworICAgIEFTU0VSVCgh
bV9kZWxldGVkT2Zmc2V0cy0+Y29udGFpbnMob2Zmc2V0KSk7CiAgICAgbV9kZWxldGVkT2Zmc2V0
cy0+YXBwZW5kKG9mZnNldCk7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL1N0cnVjdHVyZS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9T
dHJ1Y3R1cmUuY3BwCmluZGV4IDVhNjEyMTNkM2I5YWRiZDgwYTI0ZTUzMDkwZDczOWJkMjNiMzE0
ODEuLjVkZTg1MjdmNDZjNjNiNTIwMTk0M2U1Njk2Yzk2NzlmMmQ3NTY0NTAgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZS5jcHAKKysrIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlLmNwcApAQCAtODcsMjIgKzg3LDIyIEBA
IGlubGluZSB2b2lkIFN0cnVjdHVyZVRyYW5zaXRpb25UYWJsZTo6c2V0U2luZ2xlVHJhbnNpdGlv
bihTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKICAgICBtX2RhdGEgPSBiaXR3aXNlX2Nhc3Q8aW50cHRy
X3Q+KGltcGwpIHwgVXNpbmdTaW5nbGVTbG90RmxhZzsKIH0KIAotYm9vbCBTdHJ1Y3R1cmVUcmFu
c2l0aW9uVGFibGU6OmNvbnRhaW5zKFVuaXF1ZWRTdHJpbmdJbXBsKiByZXAsIHVuc2lnbmVkIGF0
dHJpYnV0ZXMpIGNvbnN0Citib29sIFN0cnVjdHVyZVRyYW5zaXRpb25UYWJsZTo6Y29udGFpbnMo
VW5pcXVlZFN0cmluZ0ltcGwqIHJlcCwgdW5zaWduZWQgYXR0cmlidXRlcywgYm9vbCBpc0FkZGl0
aW9uKSBjb25zdAogewogICAgIGlmIChpc1VzaW5nU2luZ2xlU2xvdCgpKSB7CiAgICAgICAgIFN0
cnVjdHVyZSogdHJhbnNpdGlvbiA9IHNpbmdsZVRyYW5zaXRpb24oKTsKLSAgICAgICAgcmV0dXJu
IHRyYW5zaXRpb24gJiYgdHJhbnNpdGlvbi0+bV90cmFuc2l0aW9uUHJvcGVydHlOYW1lID09IHJl
cCAmJiB0cmFuc2l0aW9uLT50cmFuc2l0aW9uUHJvcGVydHlBdHRyaWJ1dGVzKCkgPT0gYXR0cmli
dXRlczsKKyAgICAgICAgcmV0dXJuIHRyYW5zaXRpb24gJiYgdHJhbnNpdGlvbi0+bV90cmFuc2l0
aW9uUHJvcGVydHlOYW1lID09IHJlcCAmJiB0cmFuc2l0aW9uLT50cmFuc2l0aW9uUHJvcGVydHlB
dHRyaWJ1dGVzKCkgPT0gYXR0cmlidXRlcyAmJiB0cmFuc2l0aW9uLT5pc1Byb3BlcnR5RGVsZXRp
b25UcmFuc2l0aW9uKCkgPT0gIWlzQWRkaXRpb247CiAgICAgfQotICAgIHJldHVybiBtYXAoKS0+
Z2V0KHN0ZDo6bWFrZV9wYWlyKHJlcCwgYXR0cmlidXRlcykpOworICAgIHJldHVybiBtYXAoKS0+
Z2V0KHN0ZDo6bWFrZV90dXBsZShyZXAsIGF0dHJpYnV0ZXMsIGlzQWRkaXRpb24pKTsKIH0KIAot
aW5saW5lIFN0cnVjdHVyZSogU3RydWN0dXJlVHJhbnNpdGlvblRhYmxlOjpnZXQoVW5pcXVlZFN0
cmluZ0ltcGwqIHJlcCwgdW5zaWduZWQgYXR0cmlidXRlcykgY29uc3QKK2lubGluZSBTdHJ1Y3R1
cmUqIFN0cnVjdHVyZVRyYW5zaXRpb25UYWJsZTo6Z2V0KFVuaXF1ZWRTdHJpbmdJbXBsKiByZXAs
IHVuc2lnbmVkIGF0dHJpYnV0ZXMsIGJvb2wgaXNBZGRpdGlvbikgY29uc3QKIHsKICAgICBpZiAo
aXNVc2luZ1NpbmdsZVNsb3QoKSkgewogICAgICAgICBTdHJ1Y3R1cmUqIHRyYW5zaXRpb24gPSBz
aW5nbGVUcmFuc2l0aW9uKCk7Ci0gICAgICAgIHJldHVybiAodHJhbnNpdGlvbiAmJiB0cmFuc2l0
aW9uLT5tX3RyYW5zaXRpb25Qcm9wZXJ0eU5hbWUgPT0gcmVwICYmIHRyYW5zaXRpb24tPnRyYW5z
aXRpb25Qcm9wZXJ0eUF0dHJpYnV0ZXMoKSA9PSBhdHRyaWJ1dGVzKSA/IHRyYW5zaXRpb24gOiAw
OworICAgICAgICByZXR1cm4gKHRyYW5zaXRpb24gJiYgdHJhbnNpdGlvbi0+bV90cmFuc2l0aW9u
UHJvcGVydHlOYW1lID09IHJlcCAmJiB0cmFuc2l0aW9uLT50cmFuc2l0aW9uUHJvcGVydHlBdHRy
aWJ1dGVzKCkgPT0gYXR0cmlidXRlcyAmJiB0cmFuc2l0aW9uLT5pc1Byb3BlcnR5RGVsZXRpb25U
cmFuc2l0aW9uKCkgPT0gIWlzQWRkaXRpb24pID8gdHJhbnNpdGlvbiA6IDA7CiAgICAgfQotICAg
IHJldHVybiBtYXAoKS0+Z2V0KHN0ZDo6bWFrZV9wYWlyKHJlcCwgYXR0cmlidXRlcykpOworICAg
IHJldHVybiBtYXAoKS0+Z2V0KHN0ZDo6bWFrZV90dXBsZShyZXAsIGF0dHJpYnV0ZXMsIGlzQWRk
aXRpb24pKTsKIH0KIAogdm9pZCBTdHJ1Y3R1cmVUcmFuc2l0aW9uVGFibGU6OmFkZChWTSYgdm0s
IFN0cnVjdHVyZSogc3RydWN0dXJlKQpAQCAtMTI3LDcgKzEyNyw3IEBAIHZvaWQgU3RydWN0dXJl
VHJhbnNpdGlvblRhYmxlOjphZGQoVk0mIHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKICAgICAv
LyBOZXdlciB2ZXJzaW9ucyBvZiB0aGUgU1RMIGhhdmUgYW4gc3RkOjptYWtlX3BhaXIgZnVuY3Rp
b24gdGhhdCB0YWtlcyBydmFsdWUgcmVmZXJlbmNlcy4KICAgICAvLyBXaGVuIGVpdGhlciBvZiB0
aGUgcGFyYW1ldGVycyBhcmUgYml0ZmllbGRzLCB0aGUgQysrIGNvbXBpbGVyIHdpbGwgdHJ5IHRv
IGJpbmQgdGhlbSBhcyBsdmFsdWVzLCB3aGljaCBpcyBpbnZhbGlkLiBUbyB3b3JrIGFyb3VuZCB0
aGlzLCB1c2UgdW5hcnkgIisiIHRvIG1ha2UgdGhlIHBhcmFtZXRlciBhbiBydmFsdWUuCiAgICAg
Ly8gU2VlIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD01OTI2MSBmb3Ig
bW9yZSBkZXRhaWxzCi0gICAgbWFwKCktPnNldChzdGQ6Om1ha2VfcGFpcihzdHJ1Y3R1cmUtPm1f
dHJhbnNpdGlvblByb3BlcnR5TmFtZS5nZXQoKSwgK3N0cnVjdHVyZS0+dHJhbnNpdGlvblByb3Bl
cnR5QXR0cmlidXRlcygpKSwgc3RydWN0dXJlKTsKKyAgICBtYXAoKS0+c2V0KHN0ZDo6bWFrZV90
dXBsZShzdHJ1Y3R1cmUtPm1fdHJhbnNpdGlvblByb3BlcnR5TmFtZS5nZXQoKSwgK3N0cnVjdHVy
ZS0+dHJhbnNpdGlvblByb3BlcnR5QXR0cmlidXRlcygpLCAhc3RydWN0dXJlLT5pc1Byb3BlcnR5
RGVsZXRpb25UcmFuc2l0aW9uKCkpLCBzdHJ1Y3R1cmUpOwogfQogCiB2b2lkIFN0cnVjdHVyZTo6
ZHVtcFN0YXRpc3RpY3MoKQpAQCAtMjAxLDYgKzIwMSw3IEBAIFN0cnVjdHVyZTo6U3RydWN0dXJl
KFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1ZSBwcm90b3R5cGUs
IGNvCiAgICAgc2V0VHJhbnNpdGlvbldhdGNocG9pbnRJc0xpa2VseVRvQmVGaXJlZChmYWxzZSk7
CiAgICAgc2V0SGFzQmVlbkRpY3Rpb25hcnkoZmFsc2UpOwogICAgIHNldElzQWRkaW5nUHJvcGVy
dHlGb3JUcmFuc2l0aW9uKGZhbHNlKTsKKyAgICBzZXRJc1Byb3BlcnR5RGVsZXRpb25UcmFuc2l0
aW9uKGZhbHNlKTsKICAgICBzZXRUcmFuc2l0aW9uT2Zmc2V0KHZtLCBpbnZhbGlkT2Zmc2V0KTsK
ICAgICBzZXRNYXhPZmZzZXQodm0sIGludmFsaWRPZmZzZXQpOwogIApAQCAtMjM3LDYgKzIzOCw3
IEBAIFN0cnVjdHVyZTo6U3RydWN0dXJlKFZNJiB2bSkKICAgICBzZXRUcmFuc2l0aW9uV2F0Y2hw
b2ludElzTGlrZWx5VG9CZUZpcmVkKGZhbHNlKTsKICAgICBzZXRIYXNCZWVuRGljdGlvbmFyeShm
YWxzZSk7CiAgICAgc2V0SXNBZGRpbmdQcm9wZXJ0eUZvclRyYW5zaXRpb24oZmFsc2UpOworICAg
IHNldElzUHJvcGVydHlEZWxldGlvblRyYW5zaXRpb24oZmFsc2UpOwogICAgIHNldFRyYW5zaXRp
b25PZmZzZXQodm0sIGludmFsaWRPZmZzZXQpOwogICAgIHNldE1heE9mZnNldCh2bSwgaW52YWxp
ZE9mZnNldCk7CiAgCkBAIC0yNzMsNiArMjc1LDcgQEAgU3RydWN0dXJlOjpTdHJ1Y3R1cmUoVk0m
IHZtLCBTdHJ1Y3R1cmUqIHByZXZpb3VzLCBEZWZlcnJlZFN0cnVjdHVyZVRyYW5zaXRpb25XYXQK
ICAgICBzZXRTdGF0aWNQcm9wZXJ0aWVzUmVpZmllZChwcmV2aW91cy0+c3RhdGljUHJvcGVydGll
c1JlaWZpZWQoKSk7CiAgICAgc2V0SGFzQmVlbkRpY3Rpb25hcnkocHJldmlvdXMtPmhhc0JlZW5E
aWN0aW9uYXJ5KCkpOwogICAgIHNldElzQWRkaW5nUHJvcGVydHlGb3JUcmFuc2l0aW9uKGZhbHNl
KTsKKyAgICBzZXRJc1Byb3BlcnR5RGVsZXRpb25UcmFuc2l0aW9uKGZhbHNlKTsKICAgICBzZXRU
cmFuc2l0aW9uT2Zmc2V0KHZtLCBpbnZhbGlkT2Zmc2V0KTsKICAgICBzZXRNYXhPZmZzZXQodm0s
IGludmFsaWRPZmZzZXQpOwogIApAQCAtMzg0LDEwICszODcsMTkgQEAgUHJvcGVydHlUYWJsZSog
U3RydWN0dXJlOjptYXRlcmlhbGl6ZVByb3BlcnR5VGFibGUoVk0mIHZtLCBib29sIHNldFByb3Bl
cnR5VGFibGUKICAgICAgICAgc3RydWN0dXJlID0gc3RydWN0dXJlc1tpXTsKICAgICAgICAgaWYg
KCFzdHJ1Y3R1cmUtPm1fdHJhbnNpdGlvblByb3BlcnR5TmFtZSkKICAgICAgICAgICAgIGNvbnRp
bnVlOwotICAgICAgICBBU1NFUlQoaSA9PSBzdHJ1Y3R1cmVzLnNpemUoKSAtIDEgfHwgc3RydWN0
dXJlLT5tYXhPZmZzZXQoKSA+IHN0cnVjdHVyZXNbaSArIDFdLT5tYXhPZmZzZXQoKSk7CisgICAg
ICAgIGlmIChzdHJ1Y3R1cmUtPmlzUHJvcGVydHlEZWxldGlvblRyYW5zaXRpb24oKSkgeworICAg
ICAgICAgICAgYXV0byBpdGVtID0gdGFibGUtPmZpbmQoc3RydWN0dXJlLT5tX3RyYW5zaXRpb25Q
cm9wZXJ0eU5hbWUuZ2V0KCkpOworICAgICAgICAgICAgQVNTRVJUKGl0ZW0uZmlyc3QpOworICAg
ICAgICAgICAgdGFibGUtPnJlbW92ZShpdGVtKTsKKyAgICAgICAgICAgIHRhYmxlLT5hZGREZWxl
dGVkT2Zmc2V0KHN0cnVjdHVyZS0+dHJhbnNpdGlvbk9mZnNldCgpKTsKKyAgICAgICAgICAgIGNv
bnRpbnVlOworICAgICAgICB9CiAgICAgICAgIFByb3BlcnR5TWFwRW50cnkgZW50cnkoc3RydWN0
dXJlLT5tX3RyYW5zaXRpb25Qcm9wZXJ0eU5hbWUuZ2V0KCksIHN0cnVjdHVyZS0+dHJhbnNpdGlv
bk9mZnNldCgpLCBzdHJ1Y3R1cmUtPnRyYW5zaXRpb25Qcm9wZXJ0eUF0dHJpYnV0ZXMoKSk7Ci0g
ICAgICAgIGF1dG8gbWF4T2Zmc2V0ID0gdGhpcy0+bWF4T2Zmc2V0KCk7Ci0gICAgICAgIHRhYmxl
LT5hZGQoZW50cnksIG1heE9mZnNldCwgUHJvcGVydHlUYWJsZTo6UHJvcGVydHlPZmZzZXRNdXN0
Tm90Q2hhbmdlKTsKKyAgICAgICAgYXV0byBuZXh0T2Zmc2V0ID0gdGFibGUtPm5leHRPZmZzZXQo
c3RydWN0dXJlLT5pbmxpbmVDYXBhY2l0eSgpKTsKKyAgICAgICAgQVNTRVJUX1VOVVNFRChuZXh0
T2Zmc2V0LCBuZXh0T2Zmc2V0ID09IHN0cnVjdHVyZS0+dHJhbnNpdGlvbk9mZnNldCgpKTsKKyAg
ICAgICAgYXV0byBvZmZzZXQgPSBzdHJ1Y3R1cmUtPnRyYW5zaXRpb25PZmZzZXQoKTsKKyAgICAg
ICAgdGFibGUtPmFkZChlbnRyeSwgb2Zmc2V0LCBQcm9wZXJ0eVRhYmxlOjpQcm9wZXJ0eU9mZnNl
dE11c3ROb3RDaGFuZ2UpOworICAgICAgICBBU1NFUlQob2Zmc2V0ID09IHN0cnVjdHVyZS0+dHJh
bnNpdGlvbk9mZnNldCgpKTsKICAgICB9CiAgICAgCiAgICAgY2hlY2tPZmZzZXRDb25zaXN0ZW5j
eSgKQEAgLTQ4NCw3ICs0OTYsNiBAQCBTdHJ1Y3R1cmUqIFN0cnVjdHVyZTo6YWRkTmV3UHJvcGVy
dHlUcmFuc2l0aW9uKFZNJiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIFBybwogICAgICAgICBT
dHJ1Y3R1cmUqIHRyYW5zaXRpb24gPSB0b0NhY2hlYWJsZURpY3Rpb25hcnlUcmFuc2l0aW9uKHZt
LCBzdHJ1Y3R1cmUsIGRlZmVycmVkKTsKICAgICAgICAgQVNTRVJUKHN0cnVjdHVyZSAhPSB0cmFu
c2l0aW9uKTsKICAgICAgICAgb2Zmc2V0ID0gdHJhbnNpdGlvbi0+YWRkKHZtLCBwcm9wZXJ0eU5h
bWUsIGF0dHJpYnV0ZXMpOwotICAgICAgICB0cmFuc2l0aW9uLT5zZXRUcmFuc2l0aW9uT2Zmc2V0
KHZtLCBvZmZzZXQpOwogICAgICAgICByZXR1cm4gdHJhbnNpdGlvbjsKICAgICB9CiAgICAgCkBA
IC01MjIsOCArNTMzLDcgQEAgU3RydWN0dXJlKiBTdHJ1Y3R1cmU6OmFkZE5ld1Byb3BlcnR5VHJh
bnNpdGlvbihWTSYgdm0sIFN0cnVjdHVyZSogc3RydWN0dXJlLCBQcm8KIAogICAgIGNoZWNrT2Zm
c2V0KHRyYW5zaXRpb24tPnRyYW5zaXRpb25PZmZzZXQoKSwgdHJhbnNpdGlvbi0+aW5saW5lQ2Fw
YWNpdHkoKSk7CiAgICAgewotICAgICAgICBDb25jdXJyZW50SlNMb2NrZXIgbG9ja2VyKHN0cnVj
dHVyZS0+bV9sb2NrKTsKLSAgICAgICAgRGVmZXJHQyBkZWZlckdDKHZtLmhlYXApOworICAgICAg
ICBHQ1NhZmVDb25jdXJyZW50SlNMb2NrZXIgbG9ja2VyKHN0cnVjdHVyZS0+bV9sb2NrLCB2bS5o
ZWFwKTsKICAgICAgICAgc3RydWN0dXJlLT5tX3RyYW5zaXRpb25UYWJsZS5hZGQodm0sIHRyYW5z
aXRpb24pOwogICAgIH0KICAgICB0cmFuc2l0aW9uLT5jaGVja09mZnNldENvbnNpc3RlbmN5KCk7
CkBAIC01MzMsMjUgKzU0Myw4OSBAQCBTdHJ1Y3R1cmUqIFN0cnVjdHVyZTo6YWRkTmV3UHJvcGVy
dHlUcmFuc2l0aW9uKFZNJiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIFBybwogCiBTdHJ1Y3R1
cmUqIFN0cnVjdHVyZTo6cmVtb3ZlUHJvcGVydHlUcmFuc2l0aW9uKFZNJiB2bSwgU3RydWN0dXJl
KiBzdHJ1Y3R1cmUsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIFByb3BlcnR5T2Zmc2V0JiBv
ZmZzZXQpCiB7Ci0gICAgLy8gTk9URTogVGhlcmUgYXJlIHNvbWUgZ29vZCByZWFzb25zIHdoeSB0
aGlzIGdvZXMgZGlyZWN0bHkgdG8gdW5jYWNoZWFibGUgZGljdGlvbmFyeSByYXRoZXIgdGhhbgot
ICAgIC8vIGNhY2hpbmcgdGhlIHJlbW92YWwuIFdlIGNhbiBmaXggYWxsIG9mIHRoZXNlIHRoaW5n
cywgYnV0IHdlIG11c3QgcmVtZW1iZXIgdG8gZG8gc28sIGlmIHdlIGV2ZXIgdHJ5Ci0gICAgLy8g
dG8gb3B0aW1pemUgdGhpcyBjYXNlLgotICAgIC8vCi0gICAgLy8gLSBDYWNoZWQgdHJhbnNpdGlv
bnMgdXN1YWxseSBzdGVhbCB0aGUgcHJvcGVydHkgdGFibGUsIGFuZCBhc3N1bWUgdGhhdCB0aGlz
IGlzIHBvc3NpYmxlIGJlY2F1c2UgdGhleQotICAgIC8vICAgY2FuIGp1c3QgcmVidWlsZCB0aGUg
dGFibGUgYnkgbG9va2luZyBhdCBwYXN0IHRyYW5zaXRpb25zLiBUaGF0IGNvZGUgYXNzdW1lcyB0
aGF0IHRoZSB0YWJsZSBvbmx5Ci0gICAgLy8gICBncmV3IGFuZCBuZXZlciBzaHJhbmsuIFRvIHN1
cHBvcnQgcmVtb3ZhbHMsIHdlJ2QgaGF2ZSB0byBjaGFuZ2UgdGhlIHByb3BlcnR5IHRhYmxlIG1h
dGVyaWFsaXphdGlvbgotICAgIC8vICAgY29kZSB0byBoYW5kbGUgZGVsZXRpb25zLiBBbHNvLCB3
ZSBoYXZlIGxvZ2ljIHRvIGdldCB0aGUgbGlzdCBvZiBwcm9wZXJ0aWVzIG9uIGEgc3RydWN0dXJl
IHRoYXQKLSAgICAvLyAgIGxhY2tzIGEgcHJvcGVydHkgdGFibGUgYnkganVzdCBsb29raW5nIGJh
Y2sgdGhyb3VnaCB0aGUgc2V0IG9mIHRyYW5zaXRpb25zIHNpbmNlIHRoZSBsYXN0Ci0gICAgLy8g
ICBzdHJ1Y3R1cmUgdGhhdCBoYWQgYSBwaW5uZWQgdGFibGUuIFRoYXQgbG9naWMgd291bGQgYWxz
byBoYXZlIHRvIGJlIGNoYW5nZWQgdG8gaGFuZGxlIGNhY2hlZAotICAgIC8vICAgcmVtb3ZhbHMu
Ci0gICAgLy8KKyAgICBTdHJ1Y3R1cmUqIG5ld1N0cnVjdHVyZSA9IHJlbW92ZVByb3BlcnR5VHJh
bnNpdGlvbkZyb21FeGlzdGluZ1N0cnVjdHVyZSgKKyAgICAgICAgdm0sIHN0cnVjdHVyZSwgcHJv
cGVydHlOYW1lLCBvZmZzZXQpOworICAgIGlmIChuZXdTdHJ1Y3R1cmUpCisgICAgICAgIHJldHVy
biBuZXdTdHJ1Y3R1cmU7CisKKyAgICByZXR1cm4gcmVtb3ZlTmV3UHJvcGVydHlUcmFuc2l0aW9u
KAorICAgICAgICB2bSwgc3RydWN0dXJlLCBwcm9wZXJ0eU5hbWUsIG9mZnNldCk7Cit9CisKK1N0
cnVjdHVyZSogU3RydWN0dXJlOjpyZW1vdmVQcm9wZXJ0eVRyYW5zaXRpb25Gcm9tRXhpc3RpbmdT
dHJ1Y3R1cmUoVk0mIHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgUHJvcGVydHlOYW1lIHByb3Bl
cnR5TmFtZSwgUHJvcGVydHlPZmZzZXQmIG9mZnNldCkKK3sKKyAgICBBU1NFUlQoIWlzQ29tcGls
YXRpb25UaHJlYWQoKSk7CiAgICAgQVNTRVJUKCFzdHJ1Y3R1cmUtPmlzVW5jYWNoZWFibGVEaWN0
aW9uYXJ5KCkpOworICAgIEFTU0VSVChzdHJ1Y3R1cmUtPmlzT2JqZWN0KCkpOworCisgICAgdW5z
aWduZWQgYXR0cmlidXRlczsKKyAgICBzdHJ1Y3R1cmUtPmdldCh2bSwgcHJvcGVydHlOYW1lLCBh
dHRyaWJ1dGVzKTsKKworICAgIGlmIChTdHJ1Y3R1cmUqIGV4aXN0aW5nVHJhbnNpdGlvbiA9IHN0
cnVjdHVyZS0+bV90cmFuc2l0aW9uVGFibGUuZ2V0KHByb3BlcnR5TmFtZS51aWQoKSwgYXR0cmli
dXRlcywgZmFsc2UpKSB7CisgICAgICAgIHZhbGlkYXRlT2Zmc2V0KGV4aXN0aW5nVHJhbnNpdGlv
bi0+dHJhbnNpdGlvbk9mZnNldCgpLCBleGlzdGluZ1RyYW5zaXRpb24tPmlubGluZUNhcGFjaXR5
KCkpOworICAgICAgICBvZmZzZXQgPSBleGlzdGluZ1RyYW5zaXRpb24tPnRyYW5zaXRpb25PZmZz
ZXQoKTsKKyAgICAgICAgcmV0dXJuIGV4aXN0aW5nVHJhbnNpdGlvbjsKKyAgICB9CisKKyAgICAv
LyBJbiB0aGlzIGNhc2UsIHdlIGNhbiB0cmFuc2l0aW9uIGJhY2sgdG8gdGhlIHByZXZpb3VzIHRy
YW5zaXRpb24uCisgICAgaWYgKCFzdHJ1Y3R1cmUtPmlzUHJvcGVydHlEZWxldGlvblRyYW5zaXRp
b24oKSAmJiBzdHJ1Y3R1cmUtPm1fdHJhbnNpdGlvblByb3BlcnR5TmFtZSAmJiBzdHJ1Y3R1cmUt
Pm1fdHJhbnNpdGlvblByb3BlcnR5TmFtZSA9PSBwcm9wZXJ0eU5hbWUudWlkKCkpIHsKKyAgICAg
ICAgb2Zmc2V0ID0gc3RydWN0dXJlLT50cmFuc2l0aW9uT2Zmc2V0KCk7CisgICAgICAgIHN0cnVj
dHVyZS0+c2V0RGlkVHJhbnNpdGlvbih0cnVlKTsKKyAgICAgICAgcmV0dXJuIHN0cnVjdHVyZS0+
cHJldmlvdXNJRCgpOworICAgIH0KKworICAgIHJldHVybiAwOworfQorCitTdHJ1Y3R1cmUqIFN0
cnVjdHVyZTo6cmVtb3ZlTmV3UHJvcGVydHlUcmFuc2l0aW9uKFZNJiB2bSwgU3RydWN0dXJlKiBz
dHJ1Y3R1cmUsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIFByb3BlcnR5T2Zmc2V0JiBvZmZz
ZXQsIERlZmVycmVkU3RydWN0dXJlVHJhbnNpdGlvbldhdGNocG9pbnRGaXJlKiBkZWZlcnJlZCkK
K3sKKyAgICBBU1NFUlQoIXN0cnVjdHVyZS0+aXNVbmNhY2hlYWJsZURpY3Rpb25hcnkoKSk7Cisg
ICAgQVNTRVJUKHN0cnVjdHVyZS0+aXNPYmplY3QoKSk7CisgICAgQVNTRVJUKCFTdHJ1Y3R1cmU6
OnJlbW92ZVByb3BlcnR5VHJhbnNpdGlvbkZyb21FeGlzdGluZ1N0cnVjdHVyZSh2bSwgc3RydWN0
dXJlLCBwcm9wZXJ0eU5hbWUsIG9mZnNldCkpOworCisgICAgaW50IHRyYW5zaXRpb25Db3VudCA9
IDA7CisgICAgZm9yIChhdXRvKiBzID0gc3RydWN0dXJlOyBzOyBzID0gcy0+cHJldmlvdXNJRCgp
KQorICAgICAgICArK3RyYW5zaXRpb25Db3VudDsKKworICAgIGlmICh0cmFuc2l0aW9uQ291bnQg
PiBzX21heFRyYW5zaXRpb25MZW5ndGgpIHsKKyAgICAgICAgQVNTRVJUKCFpc0NvcHlPbldyaXRl
KHN0cnVjdHVyZS0+aW5kZXhpbmdNb2RlKCkpKTsKKyAgICAgICAgU3RydWN0dXJlKiB0cmFuc2l0
aW9uID0gdG9VbmNhY2hlYWJsZURpY3Rpb25hcnlUcmFuc2l0aW9uKHZtLCBzdHJ1Y3R1cmUsIGRl
ZmVycmVkKTsKKyAgICAgICAgQVNTRVJUKHN0cnVjdHVyZSAhPSB0cmFuc2l0aW9uKTsKKyAgICAg
ICAgb2Zmc2V0ID0gdHJhbnNpdGlvbi0+cmVtb3ZlKHZtLCBwcm9wZXJ0eU5hbWUpOworICAgICAg
ICByZXR1cm4gdHJhbnNpdGlvbjsKKyAgICB9CiAKLSAgICBTdHJ1Y3R1cmUqIHRyYW5zaXRpb24g
PSB0b1VuY2FjaGVhYmxlRGljdGlvbmFyeVRyYW5zaXRpb24odm0sIHN0cnVjdHVyZSk7CisgICAg
U3RydWN0dXJlKiB0cmFuc2l0aW9uID0gY3JlYXRlKHZtLCBzdHJ1Y3R1cmUsIGRlZmVycmVkKTsK
KyAgICB0cmFuc2l0aW9uLT5tX2NhY2hlZFByb3RvdHlwZUNoYWluLnNldE1heUJlTnVsbCh2bSwg
dHJhbnNpdGlvbiwgc3RydWN0dXJlLT5tX2NhY2hlZFByb3RvdHlwZUNoYWluLmdldCgpKTsKIAot
ICAgIG9mZnNldCA9IHRyYW5zaXRpb24tPnJlbW92ZShwcm9wZXJ0eU5hbWUpOworICAgIC8vIFdo
aWxlIHdlIGFyZSBkZWxldGluZyB0aGUgcHJvcGVydHksIHdlIG5lZWQgdG8gbWFrZSBzdXJlIHRo
ZSB0YWJsZSBpcyBub3QgY2xlYXJlZC4KKyAgICB7CisgICAgICAgIENvbmN1cnJlbnRKU0xvY2tl
ciBsb2NrZXIodHJhbnNpdGlvbi0+bV9sb2NrKTsKKyAgICAgICAgdHJhbnNpdGlvbi0+c2V0SXNB
ZGRpbmdQcm9wZXJ0eUZvclRyYW5zaXRpb24odHJ1ZSk7CisgICAgfQogCisgICAgdHJhbnNpdGlv
bi0+bV9ibG9iLnNldEluZGV4aW5nTW9kZUluY2x1ZGluZ0hpc3Rvcnkoc3RydWN0dXJlLT5pbmRl
eGluZ01vZGVJbmNsdWRpbmdIaXN0b3J5KCkgJiB+Q29weU9uV3JpdGUpOworICAgIHRyYW5zaXRp
b24tPm1fdHJhbnNpdGlvblByb3BlcnR5TmFtZSA9IHByb3BlcnR5TmFtZS51aWQoKTsKKyAgICB0
cmFuc2l0aW9uLT5zZXRQcm9wZXJ0eVRhYmxlKHZtLCBzdHJ1Y3R1cmUtPnRha2VQcm9wZXJ0eVRh
YmxlT3JDbG9uZUlmUGlubmVkKHZtKSk7CisgICAgdHJhbnNpdGlvbi0+c2V0TWF4T2Zmc2V0KHZt
LCBzdHJ1Y3R1cmUtPm1heE9mZnNldCgpKTsKKyAgICB0cmFuc2l0aW9uLT5zZXRJc1Byb3BlcnR5
RGVsZXRpb25UcmFuc2l0aW9uKHRydWUpOworCisgICAgb2Zmc2V0ID0gdHJhbnNpdGlvbi0+cmVt
b3ZlKHZtLCBwcm9wZXJ0eU5hbWUpOworICAgIEFTU0VSVChvZmZzZXQgIT0gaW52YWxpZE9mZnNl
dCk7CisgICAgdHJhbnNpdGlvbi0+c2V0VHJhbnNpdGlvbk9mZnNldCh2bSwgb2Zmc2V0KTsKKwor
ICAgIC8vIE5vdyB0aGF0IGV2ZXJ5dGhpbmcgaXMgZmluZSB3aXRoIHRoZSBuZXcgc3RydWN0dXJl
J3MgYm9va2tlZXBpbmcsIHRoZSBHQyBpcyBmcmVlIHRvIGJsb3cgdGhlCisgICAgLy8gdGFibGUg
YXdheSBpZiBpdCB3YW50cy4gV2UgY2FuIG5vdyByZWJ1aWxkIGl0IGZpbmUuCisgICAgV1RGOjpz
dG9yZVN0b3JlRmVuY2UoKTsKKyAgICB0cmFuc2l0aW9uLT5zZXRJc0FkZGluZ1Byb3BlcnR5Rm9y
VHJhbnNpdGlvbihmYWxzZSk7CisKKyAgICBjaGVja09mZnNldCh0cmFuc2l0aW9uLT50cmFuc2l0
aW9uT2Zmc2V0KCksIHRyYW5zaXRpb24tPmlubGluZUNhcGFjaXR5KCkpOworICAgIHsKKyAgICAg
ICAgR0NTYWZlQ29uY3VycmVudEpTTG9ja2VyIGxvY2tlcihzdHJ1Y3R1cmUtPm1fbG9jaywgdm0u
aGVhcCk7CisgICAgICAgIHN0cnVjdHVyZS0+bV90cmFuc2l0aW9uVGFibGUuYWRkKHZtLCB0cmFu
c2l0aW9uKTsKKyAgICB9CiAgICAgdHJhbnNpdGlvbi0+Y2hlY2tPZmZzZXRDb25zaXN0ZW5jeSgp
OworICAgIHN0cnVjdHVyZS0+Y2hlY2tPZmZzZXRDb25zaXN0ZW5jeSgpOwogICAgIHJldHVybiB0
cmFuc2l0aW9uOwogfQogCkBAIC02MTQsOSArNjg4LDkgQEAgU3RydWN0dXJlKiBTdHJ1Y3R1cmU6
OnRvQ2FjaGVhYmxlRGljdGlvbmFyeVRyYW5zaXRpb24oVk0mIHZtLCBTdHJ1Y3R1cmUqIHN0cnVj
dHUKICAgICByZXR1cm4gdG9EaWN0aW9uYXJ5VHJhbnNpdGlvbih2bSwgc3RydWN0dXJlLCBDYWNo
ZWREaWN0aW9uYXJ5S2luZCwgZGVmZXJyZWQpOwogfQogCi1TdHJ1Y3R1cmUqIFN0cnVjdHVyZTo6
dG9VbmNhY2hlYWJsZURpY3Rpb25hcnlUcmFuc2l0aW9uKFZNJiB2bSwgU3RydWN0dXJlKiBzdHJ1
Y3R1cmUpCitTdHJ1Y3R1cmUqIFN0cnVjdHVyZTo6dG9VbmNhY2hlYWJsZURpY3Rpb25hcnlUcmFu
c2l0aW9uKFZNJiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIERlZmVycmVkU3RydWN0dXJlVHJh
bnNpdGlvbldhdGNocG9pbnRGaXJlKiBkZWZlcnJlZCkKIHsKLSAgICByZXR1cm4gdG9EaWN0aW9u
YXJ5VHJhbnNpdGlvbih2bSwgc3RydWN0dXJlLCBVbmNhY2hlZERpY3Rpb25hcnlLaW5kKTsKKyAg
ICByZXR1cm4gdG9EaWN0aW9uYXJ5VHJhbnNpdGlvbih2bSwgc3RydWN0dXJlLCBVbmNhY2hlZERp
Y3Rpb25hcnlLaW5kLCBkZWZlcnJlZCk7CiB9CiAKIFN0cnVjdHVyZSogU3RydWN0dXJlOjpzZWFs
VHJhbnNpdGlvbihWTSYgdm0sIFN0cnVjdHVyZSogc3RydWN0dXJlKQpAQCAtOTc2LDkgKzEwNTAs
MTEgQEAgUHJvcGVydHlPZmZzZXQgU3RydWN0dXJlOjphZGQoVk0mIHZtLCBQcm9wZXJ0eU5hbWUg
cHJvcGVydHlOYW1lLCB1bnNpZ25lZCBhdHRyaWIKICAgICAgICAgfSk7CiB9CiAKLVByb3BlcnR5
T2Zmc2V0IFN0cnVjdHVyZTo6cmVtb3ZlKFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUpCitQcm9w
ZXJ0eU9mZnNldCBTdHJ1Y3R1cmU6OnJlbW92ZShWTSYgdm0sIFByb3BlcnR5TmFtZSBwcm9wZXJ0
eU5hbWUpCiB7Ci0gICAgcmV0dXJuIHJlbW92ZShwcm9wZXJ0eU5hbWUsIFtdIChjb25zdCBDb25j
dXJyZW50SlNMb2NrZXImLCBQcm9wZXJ0eU9mZnNldCkgeyB9KTsKKyAgICByZXR1cm4gcmVtb3Zl
PFNob3VsZFBpbjo6Tm8+KHZtLCBwcm9wZXJ0eU5hbWUsIFt0aGlzLCAmdm1dIChjb25zdCBHQ1Nh
ZmVDb25jdXJyZW50SlNMb2NrZXImLCBQcm9wZXJ0eU9mZnNldCwgUHJvcGVydHlPZmZzZXQgbmV3
TWF4T2Zmc2V0KSB7CisgICAgICAgIHNldE1heE9mZnNldCh2bSwgbmV3TWF4T2Zmc2V0KTsKKyAg
ICB9KTsKIH0KIAogdm9pZCBTdHJ1Y3R1cmU6OmdldFByb3BlcnR5TmFtZXNGcm9tU3RydWN0dXJl
KFZNJiB2bSwgUHJvcGVydHlOYW1lQXJyYXkmIHByb3BlcnR5TmFtZXMsIEVudW1lcmF0aW9uTW9k
ZSBtb2RlKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0
dXJlLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmUuaAppbmRleCAz
OGRjMWQzOWYxZTg2N2QwNGYxMTUzZmU0NDdmZTRjNzIwY2Q1NjNiLi45ZTEyOTA2Zjg1MDRhZmQx
ZWJhZjA5YmFkNTY2OGQyYTgwY2M5OGE1IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9TdHJ1Y3R1cmUuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9TdHJ1Y3R1cmUuaApAQCAtMTg3LDExICsxODcsMTMgQEAgcHVibGljOgogICAgIEpTX0VYUE9S
VF9QUklWQVRFIHN0YXRpYyBTdHJ1Y3R1cmUqIGFkZE5ld1Byb3BlcnR5VHJhbnNpdGlvbihWTSYs
IFN0cnVjdHVyZSosIFByb3BlcnR5TmFtZSwgdW5zaWduZWQgYXR0cmlidXRlcywgUHJvcGVydHlP
ZmZzZXQmLCBQdXRQcm9wZXJ0eVNsb3Q6OkNvbnRleHQgPSBQdXRQcm9wZXJ0eVNsb3Q6OlVua25v
d25Db250ZXh0LCBEZWZlcnJlZFN0cnVjdHVyZVRyYW5zaXRpb25XYXRjaHBvaW50RmlyZSogPSBu
dWxscHRyKTsKICAgICBzdGF0aWMgU3RydWN0dXJlKiBhZGRQcm9wZXJ0eVRyYW5zaXRpb25Ub0V4
aXN0aW5nU3RydWN0dXJlQ29uY3VycmVudGx5KFN0cnVjdHVyZSosIFVuaXF1ZWRTdHJpbmdJbXBs
KiB1aWQsIHVuc2lnbmVkIGF0dHJpYnV0ZXMsIFByb3BlcnR5T2Zmc2V0Jik7CiAgICAgSlNfRVhQ
T1JUX1BSSVZBVEUgc3RhdGljIFN0cnVjdHVyZSogYWRkUHJvcGVydHlUcmFuc2l0aW9uVG9FeGlz
dGluZ1N0cnVjdHVyZShTdHJ1Y3R1cmUqLCBQcm9wZXJ0eU5hbWUsIHVuc2lnbmVkIGF0dHJpYnV0
ZXMsIFByb3BlcnR5T2Zmc2V0Jik7CisgICAgc3RhdGljIFN0cnVjdHVyZSogcmVtb3ZlTmV3UHJv
cGVydHlUcmFuc2l0aW9uKFZNJiwgU3RydWN0dXJlKiwgUHJvcGVydHlOYW1lLCBQcm9wZXJ0eU9m
ZnNldCYsIERlZmVycmVkU3RydWN0dXJlVHJhbnNpdGlvbldhdGNocG9pbnRGaXJlKiA9IG51bGxw
dHIpOwogICAgIHN0YXRpYyBTdHJ1Y3R1cmUqIHJlbW92ZVByb3BlcnR5VHJhbnNpdGlvbihWTSYs
IFN0cnVjdHVyZSosIFByb3BlcnR5TmFtZSwgUHJvcGVydHlPZmZzZXQmKTsKKyAgICBzdGF0aWMg
U3RydWN0dXJlKiByZW1vdmVQcm9wZXJ0eVRyYW5zaXRpb25Gcm9tRXhpc3RpbmdTdHJ1Y3R1cmUo
Vk0mLCBTdHJ1Y3R1cmUqLCBQcm9wZXJ0eU5hbWUsIFByb3BlcnR5T2Zmc2V0Jik7CiAgICAgc3Rh
dGljIFN0cnVjdHVyZSogY2hhbmdlUHJvdG90eXBlVHJhbnNpdGlvbihWTSYsIFN0cnVjdHVyZSos
IEpTVmFsdWUgcHJvdG90eXBlLCBEZWZlcnJlZFN0cnVjdHVyZVRyYW5zaXRpb25XYXRjaHBvaW50
RmlyZSYpOwogICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyBTdHJ1Y3R1cmUqIGF0dHJpYnV0
ZUNoYW5nZVRyYW5zaXRpb24oVk0mLCBTdHJ1Y3R1cmUqLCBQcm9wZXJ0eU5hbWUsIHVuc2lnbmVk
IGF0dHJpYnV0ZXMpOwogICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyBTdHJ1Y3R1cmUqIHRv
Q2FjaGVhYmxlRGljdGlvbmFyeVRyYW5zaXRpb24oVk0mLCBTdHJ1Y3R1cmUqLCBEZWZlcnJlZFN0
cnVjdHVyZVRyYW5zaXRpb25XYXRjaHBvaW50RmlyZSogPSBudWxscHRyKTsKLSAgICBzdGF0aWMg
U3RydWN0dXJlKiB0b1VuY2FjaGVhYmxlRGljdGlvbmFyeVRyYW5zaXRpb24oVk0mLCBTdHJ1Y3R1
cmUqKTsKKyAgICBzdGF0aWMgU3RydWN0dXJlKiB0b1VuY2FjaGVhYmxlRGljdGlvbmFyeVRyYW5z
aXRpb24oVk0mLCBTdHJ1Y3R1cmUqLCBEZWZlcnJlZFN0cnVjdHVyZVRyYW5zaXRpb25XYXRjaHBv
aW50RmlyZSogPSBudWxscHRyKTsKICAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMgU3RydWN0
dXJlKiBzZWFsVHJhbnNpdGlvbihWTSYsIFN0cnVjdHVyZSopOwogICAgIEpTX0VYUE9SVF9QUklW
QVRFIHN0YXRpYyBTdHJ1Y3R1cmUqIGZyZWV6ZVRyYW5zaXRpb24oVk0mLCBTdHJ1Y3R1cmUqKTsK
ICAgICBzdGF0aWMgU3RydWN0dXJlKiBwcmV2ZW50RXh0ZW5zaW9uc1RyYW5zaXRpb24oVk0mLCBT
dHJ1Y3R1cmUqKTsKQEAgLTQ0MCwxMCArNDQyLDYgQEAgcHVibGljOgogICAgIHsKICAgICAgICAg
cmV0dXJuIHN0ZDo6bWluPHVuc2lnbmVkPihtYXhPZmZzZXQoKSArIDEsIG1faW5saW5lQ2FwYWNp
dHkpOwogICAgIH0KLSAgICB1bnNpZ25lZCB0b3RhbFN0b3JhZ2VTaXplKCkgY29uc3QKLSAgICB7
Ci0gICAgICAgIHJldHVybiBudW1iZXJPZlNsb3RzRm9yTWF4T2Zmc2V0KG1heE9mZnNldCgpLCBt
X2lubGluZUNhcGFjaXR5KTsKLSAgICB9CiAgICAgdW5zaWduZWQgdG90YWxTdG9yYWdlQ2FwYWNp
dHkoKSBjb25zdAogICAgIHsKICAgICAgICAgQVNTRVJUKHN0cnVjdHVyZSgpLT5jbGFzc0luZm8o
KSA9PSBpbmZvKCkpOwpAQCAtNjkzLDYgKzY5MSw3IEBAIHB1YmxpYzoKICAgICBERUZJTkVfQklU
RklFTEQoYm9vbCwgaGFzQmVlbkRpY3Rpb25hcnksIEhhc0JlZW5EaWN0aW9uYXJ5LCAxLCAyNyk7
CiAgICAgREVGSU5FX0JJVEZJRUxEKGJvb2wsIGlzQWRkaW5nUHJvcGVydHlGb3JUcmFuc2l0aW9u
LCBJc0FkZGluZ1Byb3BlcnR5Rm9yVHJhbnNpdGlvbiwgMSwgMjgpOwogICAgIERFRklORV9CSVRG
SUVMRChib29sLCBoYXNVbmRlcnNjb3JlUHJvdG9Qcm9wZXJ0eUV4Y2x1ZGluZ09yaWdpbmFsUHJv
dG8sIEhhc1VuZGVyc2NvcmVQcm90b1Byb3BlcnR5RXhjbHVkaW5nT3JpZ2luYWxQcm90bywgMSwg
MjkpOworICAgIERFRklORV9CSVRGSUVMRChib29sLCBpc1Byb3BlcnR5RGVsZXRpb25UcmFuc2l0
aW9uLCBJc1Byb3BlcnR5RGVsZXRpb25UcmFuc2l0aW9uLCAxLCAzMCk7CiAKIHByaXZhdGU6CiAg
ICAgZnJpZW5kIGNsYXNzIExMSW50T2Zmc2V0c0V4dHJhY3RvcjsKQEAgLTcxNyw5ICs3MTYsOSBA
QCBwcml2YXRlOgogICAgIHRlbXBsYXRlPFNob3VsZFBpbiwgdHlwZW5hbWUgRnVuYz4KICAgICBQ
cm9wZXJ0eU9mZnNldCBhZGQoVk0mLCBQcm9wZXJ0eU5hbWUsIHVuc2lnbmVkIGF0dHJpYnV0ZXMs
IGNvbnN0IEZ1bmMmKTsKICAgICBQcm9wZXJ0eU9mZnNldCBhZGQoVk0mLCBQcm9wZXJ0eU5hbWUs
IHVuc2lnbmVkIGF0dHJpYnV0ZXMpOwotICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmM+Ci0gICAg
UHJvcGVydHlPZmZzZXQgcmVtb3ZlKFByb3BlcnR5TmFtZSwgY29uc3QgRnVuYyYpOwotICAgIFBy
b3BlcnR5T2Zmc2V0IHJlbW92ZShQcm9wZXJ0eU5hbWUpOworICAgIHRlbXBsYXRlPFNob3VsZFBp
biwgdHlwZW5hbWUgRnVuYz4KKyAgICBQcm9wZXJ0eU9mZnNldCByZW1vdmUoVk0mLCBQcm9wZXJ0
eU5hbWUsIGNvbnN0IEZ1bmMmKTsKKyAgICBQcm9wZXJ0eU9mZnNldCByZW1vdmUoVk0mLCBQcm9w
ZXJ0eU5hbWUpOwogCiAgICAgdm9pZCBjaGVja0NvbnNpc3RlbmN5KCk7CiAKQEAgLTgxMCw2ICs4
MDksNyBAQCBwcml2YXRlOgogCiAgICAgV3JpdGVCYXJyaWVyPEpTQ2VsbD4gbV9wcmV2aW91c09y
UmFyZURhdGE7CiAKK3B1YmxpYzoKICAgICBSZWZQdHI8VW5pcXVlZFN0cmluZ0ltcGw+IG1fdHJh
bnNpdGlvblByb3BlcnR5TmFtZTsKIAogICAgIGNvbnN0IENsYXNzSW5mbyogbV9jbGFzc0luZm87
CkBAIC04MzQsNiArODM0LDcgQEAgcHJpdmF0ZToKICAgICBUaW55Qmxvb21GaWx0ZXIgbV9zZWVu
UHJvcGVydGllczsKIAogICAgIGZyaWVuZCBjbGFzcyBWTUluc3BlY3RvcjsKKyAgICBmcmllbmQg
Y2xhc3MgSlNEb2xsYXJWTUhlbHBlcjsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpkaWZmIC0t
Z2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlSW5saW5lcy5oIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlSW5saW5lcy5oCmluZGV4IDFh
NGYyMDI0NmEyNzc5YzI5ZmI5NmNlMDA1MDBiNTRiYjQ2ZWI1NzEuLmYwZTQwNmYyMDE0NTNjOWZm
M2MxYzU3ODM1MGJkYzYyYWY1ZThkMGMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL1N0cnVjdHVyZUlubGluZXMuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9TdHJ1Y3R1cmVJbmxpbmVzLmgKQEAgLTQ1Niw2ICs0NTYsNyBAQCBpbmxpbmUgUHJv
cGVydHlPZmZzZXQgU3RydWN0dXJlOjphZGQoVk0mIHZtLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlO
YW1lLCB1bnNpZ25lZAogICAgIAogICAgIFByb3BlcnR5T2Zmc2V0IG5ld01heE9mZnNldCA9IG1h
eE9mZnNldCgpOwogICAgIHRhYmxlLT5hZGQoUHJvcGVydHlNYXBFbnRyeShyZXAsIG5ld09mZnNl
dCwgYXR0cmlidXRlcyksIG5ld01heE9mZnNldCwgUHJvcGVydHlUYWJsZTo6UHJvcGVydHlPZmZz
ZXRNYXlDaGFuZ2UpOworICAgIG5ld01heE9mZnNldCA9IHN0ZDo6bWF4KG5ld01heE9mZnNldCwg
bWF4T2Zmc2V0KCkpOwogICAgIAogICAgIGZ1bmMobG9ja2VyLCBuZXdPZmZzZXQsIG5ld01heE9m
ZnNldCk7CiAgICAgCkBAIC00NjUsMjEgKzQ2NiwyNiBAQCBpbmxpbmUgUHJvcGVydHlPZmZzZXQg
U3RydWN0dXJlOjphZGQoVk0mIHZtLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCB1bnNpZ25l
ZAogICAgIHJldHVybiBuZXdPZmZzZXQ7CiB9CiAKLXRlbXBsYXRlPHR5cGVuYW1lIEZ1bmM+Ci1p
bmxpbmUgUHJvcGVydHlPZmZzZXQgU3RydWN0dXJlOjpyZW1vdmUoUHJvcGVydHlOYW1lIHByb3Bl
cnR5TmFtZSwgY29uc3QgRnVuYyYgZnVuYykKK3RlbXBsYXRlPFN0cnVjdHVyZTo6U2hvdWxkUGlu
IHNob3VsZFBpbiwgdHlwZW5hbWUgRnVuYz4KK2lubGluZSBQcm9wZXJ0eU9mZnNldCBTdHJ1Y3R1
cmU6OnJlbW92ZShWTSYgdm0sIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIGNvbnN0IEZ1bmMm
IGZ1bmMpCiB7Ci0gICAgQ29uY3VycmVudEpTTG9ja2VyIGxvY2tlcihtX2xvY2spOwotICAgIAor
ICAgIFByb3BlcnR5VGFibGUqIHRhYmxlID0gZW5zdXJlUHJvcGVydHlUYWJsZSh2bSk7CisgICAg
R0NTYWZlQ29uY3VycmVudEpTTG9ja2VyIGxvY2tlcihtX2xvY2ssIHZtLmhlYXApOworCisgICAg
c3dpdGNoIChzaG91bGRQaW4pIHsKKyAgICBjYXNlIFNob3VsZFBpbjo6WWVzOgorICAgICAgICBw
aW4obG9ja2VyLCB2bSwgdGFibGUpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFNob3VsZFBp
bjo6Tm86CisgICAgICAgIHNldFByb3BlcnR5VGFibGUodm0sIHRhYmxlKTsKKyAgICAgICAgYnJl
YWs7CisgICAgfQorCisgICAgQVNTRVJUKEpTQzo6aXNWYWxpZE9mZnNldChnZXQodm0sIHByb3Bl
cnR5TmFtZSkpKTsKKwogICAgIGNoZWNrQ29uc2lzdGVuY3koKTsKIAogICAgIGF1dG8gcmVwID0g
cHJvcGVydHlOYW1lLnVpZCgpOwotICAgIAotICAgIC8vIFdlIE9OTFkgcmVtb3ZlIGZyb20gdW5j
YWNoZWFibGUgZGljdGlvbmFyaWVzLCB3aGljaCB3aWxsIGhhdmUgYSBwaW5uZWQgcHJvcGVydHkg
dGFibGUuCi0gICAgLy8gVGhlIG9ubHkgd2F5IGZvciB0aGVtIG5vdCB0byBoYXZlIGEgdGFibGUg
aXMgaWYgdGhleSBhcmUgZW1wdHkuCi0gICAgUHJvcGVydHlUYWJsZSogdGFibGUgPSBwcm9wZXJ0
eVRhYmxlT3JOdWxsKCk7Ci0KLSAgICBpZiAoIXRhYmxlKQotICAgICAgICByZXR1cm4gaW52YWxp
ZE9mZnNldDsKIAogICAgIFByb3BlcnR5VGFibGU6OmZpbmRfaXRlcmF0b3IgcG9zaXRpb24gPSB0
YWJsZS0+ZmluZChyZXApOwogICAgIGlmICghcG9zaXRpb24uZmlyc3QpCkBAIC00OTAsOSArNDk2
LDE0IEBAIGlubGluZSBQcm9wZXJ0eU9mZnNldCBTdHJ1Y3R1cmU6OnJlbW92ZShQcm9wZXJ0eU5h
bWUgcHJvcGVydHlOYW1lLCBjb25zdCBGdW5jJiBmCiAgICAgdGFibGUtPnJlbW92ZShwb3NpdGlv
bik7CiAgICAgdGFibGUtPmFkZERlbGV0ZWRPZmZzZXQob2Zmc2V0KTsKIAotICAgIGNoZWNrQ29u
c2lzdGVuY3koKTsKKyAgICBQcm9wZXJ0eU9mZnNldCBuZXdNYXhPZmZzZXQgPSBtYXhPZmZzZXQo
KTsKKworICAgIGZ1bmMobG9ja2VyLCBvZmZzZXQsIG5ld01heE9mZnNldCk7CisKKyAgICBBU1NF
UlQobWF4T2Zmc2V0KCkgPT0gbmV3TWF4T2Zmc2V0KTsKKyAgICBBU1NFUlQoIUpTQzo6aXNWYWxp
ZE9mZnNldChnZXQodm0sIHByb3BlcnR5TmFtZSkpKTsKIAotICAgIGZ1bmMobG9ja2VyLCBvZmZz
ZXQpOworICAgIGNoZWNrQ29uc2lzdGVuY3koKTsKICAgICByZXR1cm4gb2Zmc2V0OwogfQogCkBA
IC01MDMsMTMgKzUxNCwxMyBAQCBpbmxpbmUgUHJvcGVydHlPZmZzZXQgU3RydWN0dXJlOjphZGRQ
cm9wZXJ0eVdpdGhvdXRUcmFuc2l0aW9uKFZNJiB2bSwgUHJvcGVydHlOYQogfQogCiB0ZW1wbGF0
ZTx0eXBlbmFtZSBGdW5jPgotaW5saW5lIFByb3BlcnR5T2Zmc2V0IFN0cnVjdHVyZTo6cmVtb3Zl
UHJvcGVydHlXaXRob3V0VHJhbnNpdGlvbihWTSYsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUs
IGNvbnN0IEZ1bmMmIGZ1bmMpCitpbmxpbmUgUHJvcGVydHlPZmZzZXQgU3RydWN0dXJlOjpyZW1v
dmVQcm9wZXJ0eVdpdGhvdXRUcmFuc2l0aW9uKFZNJiB2bSwgUHJvcGVydHlOYW1lIHByb3BlcnR5
TmFtZSwgY29uc3QgRnVuYyYgZnVuYykKIHsKICAgICBBU1NFUlQoaXNVbmNhY2hlYWJsZURpY3Rp
b25hcnkoKSk7CiAgICAgQVNTRVJUKGlzUGlubmVkUHJvcGVydHlUYWJsZSgpKTsKICAgICBBU1NF
UlQocHJvcGVydHlUYWJsZU9yTnVsbCgpKTsKICAgICAKLSAgICByZXR1cm4gcmVtb3ZlKHByb3Bl
cnR5TmFtZSwgZnVuYyk7CisgICAgcmV0dXJuIHJlbW92ZTxTaG91bGRQaW46Olllcz4odm0sIHBy
b3BlcnR5TmFtZSwgZnVuYyk7CiB9CiAKIEFMV0FZU19JTkxJTkUgdm9pZCBTdHJ1Y3R1cmU6OnNl
dFByb3RvdHlwZVdpdGhvdXRUcmFuc2l0aW9uKFZNJiB2bSwgSlNWYWx1ZSBwcm90b3R5cGUpCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmVUcmFuc2l0
aW9uVGFibGUuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZVRyYW5z
aXRpb25UYWJsZS5oCmluZGV4IGI3ZGYwZWZiMzk4ZDA1ZmJmODE3YzdiMzhlNWJhNDkwZGUxOTBh
YmUuLjViODVjN2Y3ZjIwMjZlNDU4MTVjYTNmNTBjY2U1MWMxYjUyYTZiMmIgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZVRyYW5zaXRpb25UYWJsZS5o
CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZVRyYW5zaXRpb25U
YWJsZS5oCkBAIC0xNDQsMTEgKzE0NCwxMSBAQCBjbGFzcyBTdHJ1Y3R1cmVUcmFuc2l0aW9uVGFi
bGUgewogCiAgICAgCiAgICAgc3RydWN0IEhhc2ggewotICAgICAgICB0eXBlZGVmIHN0ZDo6cGFp
cjxVbmlxdWVkU3RyaW5nSW1wbCosIHVuc2lnbmVkPiBLZXk7CisgICAgICAgIHR5cGVkZWYgc3Rk
Ojp0dXBsZTxVbmlxdWVkU3RyaW5nSW1wbCosIHVuc2lnbmVkLCBib29sPiBLZXk7CiAgICAgICAg
IAogICAgICAgICBzdGF0aWMgdW5zaWduZWQgaGFzaChjb25zdCBLZXkmIHApCiAgICAgICAgIHsK
LSAgICAgICAgICAgIHJldHVybiBQdHJIYXNoPFVuaXF1ZWRTdHJpbmdJbXBsKj46Omhhc2gocC5m
aXJzdCkgKyBwLnNlY29uZDsKKyAgICAgICAgICAgIHJldHVybiBQdHJIYXNoPFVuaXF1ZWRTdHJp
bmdJbXBsKj46Omhhc2goc3RkOjpnZXQ8MD4ocCkpICsgc3RkOjpnZXQ8MT4ocCk7CiAgICAgICAg
IH0KIAogICAgICAgICBzdGF0aWMgYm9vbCBlcXVhbChjb25zdCBLZXkmIGEsIGNvbnN0IEtleSYg
YikKQEAgLTE4MSw4ICsxODEsOCBAQCBwdWJsaWM6CiAgICAgfQogCiAgICAgdm9pZCBhZGQoVk0m
LCBTdHJ1Y3R1cmUqKTsKLSAgICBib29sIGNvbnRhaW5zKFVuaXF1ZWRTdHJpbmdJbXBsKiwgdW5z
aWduZWQgYXR0cmlidXRlcykgY29uc3Q7Ci0gICAgU3RydWN0dXJlKiBnZXQoVW5pcXVlZFN0cmlu
Z0ltcGwqLCB1bnNpZ25lZCBhdHRyaWJ1dGVzKSBjb25zdDsKKyAgICBib29sIGNvbnRhaW5zKFVu
aXF1ZWRTdHJpbmdJbXBsKiwgdW5zaWduZWQgYXR0cmlidXRlcywgYm9vbCBpc0FkZGl0aW9uID0g
dHJ1ZSkgY29uc3Q7CisgICAgU3RydWN0dXJlKiBnZXQoVW5pcXVlZFN0cmluZ0ltcGwqLCB1bnNp
Z25lZCBhdHRyaWJ1dGVzLCBib29sIGlzQWRkaXRpb24gPSB0cnVlKSBjb25zdDsKIAogcHJpdmF0
ZToKICAgICBmcmllbmQgY2xhc3MgU2luZ2xlU2xvdFRyYW5zaXRpb25XZWFrT3duZXI7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvdG9vbHMvSlNEb2xsYXJWTS5jcHAgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvdG9vbHMvSlNEb2xsYXJWTS5jcHAKaW5kZXggZmVjMzA3NTZjYjY0
NzU3M2E2MzY1YTM1MmFjY2FhY2YwNDhjYjRhZC4uOGI4NmMyYjA4MGRiYjA3NjY4NmFlN2RiMzgx
ZTE3MTdjYjYwZWFlOSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3Rvb2xzL0pT
RG9sbGFyVk0uY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS90b29scy9KU0RvbGxhclZN
LmNwcApAQCAtODEsNiArODEsOCBAQCBwdWJsaWM6CiAKICAgICB2b2lkIHVwZGF0ZVZNU3RhY2tM
aW1pdHMoKSB7IHJldHVybiBtX3ZtLnVwZGF0ZVN0YWNrTGltaXRzKCk7IH07CiAKKyAgICBzdGF0
aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5jdGlvbkdldFN0cnVjdHVyZVRyYW5z
aXRpb25MaXN0KEpTR2xvYmFsT2JqZWN0KiwgQ2FsbEZyYW1lKik7CisKIHByaXZhdGU6CiAgICAg
Vk0mIG1fdm07CiB9OwpAQCAtMjcyMCw2ICsyNzIyLDQzIEBAIHN0YXRpYyBFbmNvZGVkSlNWYWx1
ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0aW9uTWFrZTE2Qml0U3RyaW5nSWZQb3NzaWJsZShKU0dsb2Jh
bE9iCiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1N0cmluZyh2bSwgU3RyaW5nOjphZG9w
dChXVEZNb3ZlKGJ1ZmZlcikpKSk7CiB9CiAKK0VuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwg
SlNEb2xsYXJWTUhlbHBlcjo6ZnVuY3Rpb25HZXRTdHJ1Y3R1cmVUcmFuc2l0aW9uTGlzdChKU0ds
b2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBDYWxsRnJhbWUqIGNhbGxGcmFtZSkKK3sKKyAgICBE
b2xsYXJWTUFzc2VydFNjb3BlIGFzc2VydFNjb3BlOworICAgIFZNJiB2bSA9IGdsb2JhbE9iamVj
dC0+dm0oKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisgICAg
SlNPYmplY3QqIG9iaiA9IGNhbGxGcmFtZS0+YXJndW1lbnQoMCkudG9PYmplY3QoZ2xvYmFsT2Jq
ZWN0KTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOworICAgIGlmICghb2Jq
KQorICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzTnVsbCgpKTsKKyAgICBWZWN0b3I8
U3RydWN0dXJlKiwgOD4gc3RydWN0dXJlczsKKworICAgIGZvciAoYXV0byogc3RydWN0dXJlID0g
b2JqLT5zdHJ1Y3R1cmUoKTsgc3RydWN0dXJlOyBzdHJ1Y3R1cmUgPSBzdHJ1Y3R1cmUtPnByZXZp
b3VzSUQoKSkKKyAgICAgICAgc3RydWN0dXJlcy5hcHBlbmQoc3RydWN0dXJlKTsKKworICAgIEpT
QXJyYXkqIHJlc3VsdCA9IEpTQXJyYXk6OnRyeUNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LT5hcnJh
eVN0cnVjdHVyZUZvckluZGV4aW5nVHlwZUR1cmluZ0FsbG9jYXRpb24oQXJyYXlXaXRoQ29udGln
dW91cyksIDApOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHsgfSk7CisKKyAgICBm
b3IgKHNpemVfdCBpID0gMDsgaSA8IHN0cnVjdHVyZXMuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAg
YXV0byogc3RydWN0dXJlID0gc3RydWN0dXJlc1tzdHJ1Y3R1cmVzLnNpemUoKSAtIGkgLSAxXTsK
KyAgICAgICAgcmVzdWx0LT5wdXNoKGdsb2JhbE9iamVjdCwgSlNWYWx1ZShzdHJ1Y3R1cmUtPmlk
KCkpKTsKKyAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsKKyAgICAgICAg
cmVzdWx0LT5wdXNoKGdsb2JhbE9iamVjdCwgSlNWYWx1ZShzdHJ1Y3R1cmUtPnRyYW5zaXRpb25P
ZmZzZXQoKSkpOworICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOworICAg
ICAgICByZXN1bHQtPnB1c2goZ2xvYmFsT2JqZWN0LCBKU1ZhbHVlKHN0cnVjdHVyZS0+bWF4T2Zm
c2V0KCkpKTsKKyAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsKKyAgICAg
ICAgaWYgKHN0cnVjdHVyZS0+bV90cmFuc2l0aW9uUHJvcGVydHlOYW1lKQorICAgICAgICAgICAg
cmVzdWx0LT5wdXNoKGdsb2JhbE9iamVjdCwganNTdHJpbmcodm0sIFN0cmluZygqc3RydWN0dXJl
LT5tX3RyYW5zaXRpb25Qcm9wZXJ0eU5hbWUpKSk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAg
IHJlc3VsdC0+cHVzaChnbG9iYWxPYmplY3QsIGpzTnVsbCgpKTsKKyAgICAgICAgUkVUVVJOX0lG
X0VYQ0VQVElPTihzY29wZSwgeyB9KTsKKyAgICAgICAgcmVzdWx0LT5wdXNoKGdsb2JhbE9iamVj
dCwgSlNWYWx1ZShzdHJ1Y3R1cmUtPmlzUHJvcGVydHlEZWxldGlvblRyYW5zaXRpb24oKSkpOwor
ICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOworICAgIH0KKworICAgIHJl
dHVybiBKU1ZhbHVlOjplbmNvZGUocmVzdWx0KTsKK30KKwogdm9pZCBKU0RvbGxhclZNOjpmaW5p
c2hDcmVhdGlvbihWTSYgdm0pCiB7CiAgICAgRG9sbGFyVk1Bc3NlcnRTY29wZSBhc3NlcnRTY29w
ZTsKQEAgLTI4NDYsNiArMjg4NSw4IEBAIHZvaWQgSlNEb2xsYXJWTTo6ZmluaXNoQ3JlYXRpb24o
Vk0mIHZtKQogCiAgICAgYWRkRnVuY3Rpb24odm0sICJpc1dhc21TdXBwb3J0ZWQiLCBmdW5jdGlv
bklzV2FzbVN1cHBvcnRlZCwgMCk7CiAgICAgYWRkRnVuY3Rpb24odm0sICJtYWtlMTZCaXRTdHJp
bmdJZlBvc3NpYmxlIiwgZnVuY3Rpb25NYWtlMTZCaXRTdHJpbmdJZlBvc3NpYmxlLCAxKTsKKwor
ICAgIGFkZEZ1bmN0aW9uKHZtLCAiZ2V0U3RydWN0dXJlVHJhbnNpdGlvbkxpc3QiLCBKU0RvbGxh
clZNSGVscGVyOjpmdW5jdGlvbkdldFN0cnVjdHVyZVRyYW5zaXRpb25MaXN0LCAxKTsKIH0KIAog
dm9pZCBKU0RvbGxhclZNOjphZGRGdW5jdGlvbihWTSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9i
YWxPYmplY3QsIGNvbnN0IGNoYXIqIG5hbWUsIE5hdGl2ZUZ1bmN0aW9uIGZ1bmN0aW9uLCB1bnNp
Z25lZCBhcmd1bWVudHMpCmRpZmYgLS1naXQgYS9KU1Rlc3RzL0NoYW5nZUxvZyBiL0pTVGVzdHMv
Q2hhbmdlTG9nCmluZGV4IGRjY2YzNmM0YTQ2ZTY1NGY0OGZmN2UxNzM3YTY2Njc2ODE0ODZhYTUu
LjI0NTk2YmNmZWNjYjc0MTNkYWRjYjRlMGQ5YWMxYzUxYzJiZmExMWIgMTAwNjQ0Ci0tLSBhL0pT
VGVzdHMvQ2hhbmdlTG9nCisrKyBiL0pTVGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTkgQEAK
KzIwMjAtMDEtMjQgIEp1c3RpbiBNaWNoYXVkICA8anVzdGluX21pY2hhdWRAYXBwbGUuY29tPgor
CisgICAgICAgIERlbGV0aW5nIGEgcHJvcGVydHkgc2hvdWxkIG5vdCB0dXJuIHN0cnVjdHVyZXMg
aW50byB1bmNhY2hlYWJsZSBkaWN0aW9uYXJpZXMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTIwNjQzMAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9E
WSAoT09QUyEpLgorCisgICAgICAgICogc3RyZXNzL2RlbGV0ZS1wcm9wZXJ0eS1jaGVjay1zdHJ1
Y3R1cmUtdHJhbnNpdGlvbi5qczogQWRkZWQuCisgICAgICAgIChhc3NlcnQpOgorICAgICAgICAo
YXNzZXJ0X2VxKToKKyAgICAgICAgKGFzc2VydF9uZXEpOgorICAgICAgICAoc2QpOgorICAgICAg
ICAoc2lkKToKKyAgICAgICAgKHRlc3REZWxldGVJc05vdFVuY2FjaGVhYmxlKToKKyAgICAgICAg
KHRlc3RDYW5NYXRlcmlhbGl6ZURlbGV0ZXMpOgorCiAyMDIwLTAxLTIxICBUYWRldSBaYWdhbGxv
ICA8dHphZ2FsbG9AYXBwbGUuY29tPgogCiAgICAgICAgIE9iamVjdCBhbGxvY2F0aW9uIHNpbmtp
bmcgaXMgbWlzc2luZyBQdXRIaW50IGZvciBhbGxvY2F0aW9ucyB1bnJlYWNoYWJsZSBpbiB0aGUg
Z3JhcGgKZGlmZiAtLWdpdCBhL0pTVGVzdHMvc3RyZXNzL2RlbGV0ZS1wcm9wZXJ0eS1jaGVjay1z
dHJ1Y3R1cmUtdHJhbnNpdGlvbi5qcyBiL0pTVGVzdHMvc3RyZXNzL2RlbGV0ZS1wcm9wZXJ0eS1j
aGVjay1zdHJ1Y3R1cmUtdHJhbnNpdGlvbi5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi41NDA2YzcxZDAxYjUyYjk2
MTM2MTg4NDIwNTE0MDYyNjhjYWRhMmIxCi0tLSAvZGV2L251bGwKKysrIGIvSlNUZXN0cy9zdHJl
c3MvZGVsZXRlLXByb3BlcnR5LWNoZWNrLXN0cnVjdHVyZS10cmFuc2l0aW9uLmpzCkBAIC0wLDAg
KzEsOTQgQEAKK2Z1bmN0aW9uIGFzc2VydChjb25kaXRpb24pIHsKKyAgICBpZiAoIWNvbmRpdGlv
bikKKyAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJhc3NlcnRpb24gZmFpbGVkIik7Cit9CisKK2Z1
bmN0aW9uIGFzc2VydF9lcShhLCBiKSB7CisgICAgaWYgKGEgIT09IGIpCisgICAgICAgIHRocm93
IG5ldyBFcnJvcigiYXNzZXJ0aW9uIGZhaWxlZDogIiArIGEgKyAiID09PSAiICsgYik7Cit9CisK
K2Z1bmN0aW9uIGFzc2VydF9uZXEoYSwgYikgeworICAgIGlmIChhID09PSBiKQorICAgICAgICB0
aHJvdyBuZXcgRXJyb3IoImFzc2VydGlvbiBmYWlsZWQ6ICIgKyBhICsgIiAhPT0gIiArIGIpOwor
fQorCitmdW5jdGlvbiBzZChvYmopIHsKKyAgICBsZXQgZGF0YSA9ICR2bS5nZXRTdHJ1Y3R1cmVU
cmFuc2l0aW9uTGlzdChvYmopCisgICAgbGV0IHJlc3VsdCA9IFtdCisKKyAgICBpZiAoIWRhdGEp
CisgICAgICAgIHJldHVybiByZXN1bHQKKworICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZGF0YS5s
ZW5ndGgvNTsgKytpKSB7CisgICAgICAgIHJlc3VsdC5wdXNoKHsgaWQ6IGRhdGFbaSo1KzBdLCBv
ZmZzZXQ6IGRhdGFbaSo1KzFdLCBtYXg6IGRhdGFbaSo1KzJdLCBwcm9wZXJ0eTogZGF0YVtpKjUr
M10sIHR5cGU6IGRhdGFbaSo1KzRdID09IDAgPyAiYWRkZWQiIDogImRlbGV0ZWQiIH0pCisgICAg
fQorCisgICAgcmV0dXJuIHJlc3VsdAorfQorCitmdW5jdGlvbiBzaWQob2JqKSB7CisgICAgbGV0
IGRhdGEgPSBzZChvYmopCisgICAgcmV0dXJuIGRhdGFbZGF0YS5sZW5ndGgtMV0uaWQKK30KKwor
ZnVuY3Rpb24gdGVzdERlbGV0ZUlzTm90VW5jYWNoZWFibGUoaSkgeworICAgIGxldCBmb28gPSB7
fQorICAgIGZvb1siYmFyIiArIGldID0gMQorICAgIGZvb1siYmF6IiArIGldID0gMgorICAgIGFz
c2VydChmb29bImJhciIgKyBpXSA9PT0gMSkKKyAgICBhc3NlcnQoZm9vWyJiYXoiICsgaV0gPT09
IDIpCisgICAgbGV0IG9sZFNpZCA9IHNpZChmb28pCisgICAgYXNzZXJ0KGRlbGV0ZSBmb29bImJh
ciIgKyBpXSkKKyAgICBhc3NlcnRfbmVxKG9sZFNpZCwgc2lkKGZvbykpCisgICAgYXNzZXJ0KCEo
ImJhciIgKyBpIGluIGZvbykpOworICAgIGFzc2VydChmb29bImJheiIgKyBpXSA9PT0gMikKKwor
ICAgIGFzc2VydF9lcShPYmplY3Qua2V5cyhmb28pLmxlbmd0aCwgMSkKKworICAgIGxldCBkYXRh
ID0gc2QoZm9vKQorICAgIGFzc2VydF9lcShkYXRhW2RhdGEubGVuZ3RoLTFdLnByb3BlcnR5LCAi
YmFyIiArIGkpCit9CisKK2Z1bmN0aW9uIHRlc3RDYW5NYXRlcmlhbGl6ZURlbGV0ZXMoaSkgewor
ICAgIGxldCBmb28gPSB7fQorICAgIGZvb1siYmFyIiArIGldID0gMQorICAgIGZvb1siYmF6IiAr
IGldID0gMgorCisgICAgYXNzZXJ0KGZvb1siYmFyIiArIGldID09PSAxKQorICAgIGFzc2VydChm
b29bImJheiIgKyBpXSA9PT0gMikKKyAgICBhc3NlcnQoZGVsZXRlIGZvb1siYmFyIiArIGldKQor
ICAgIGFzc2VydCghKCJiYXIiICsgaSBpbiBmb28pKQorICAgIGFzc2VydChmb29bImJheiIgKyBp
XSA9PT0gMikKKyAgICBhc3NlcnRfZXEoT2JqZWN0LmtleXMoZm9vKS5sZW5ndGgsIDEpCisKKyAg
ICBsZXQgZm9vMiA9IHt9CisgICAgZm9vMlsiYmFyIiArIGldID0gMworICAgIGZvbzJbImJheiIg
KyBpXSA9IDQKKyAgICBhc3NlcnQoZGVsZXRlIGZvbzJbImJhciIgKyBpXSkKKworICAgIGFzc2Vy
dF9lcShzaWQoZm9vMiksIHNpZChmb28pKQorICAgIGZvbzJbImZ1biIgKyBpXSA9IDMKKyAgICBh
c3NlcnRfbmVxKHNpZChmb28yKSwgc2lkKGZvbykpCisKKyAgICBhc3NlcnQoZm9vMlsiZnVuIiAr
IGldID09PSAzKQorICAgIGFzc2VydChmb28yWyJiYXoiICsgaV0gPT09IDQpCisgICAgYXNzZXJ0
KCEoImJhciIgKyBpIGluIGZvbzIpKQorICAgIGFzc2VydF9lcShPYmplY3Qua2V5cyhmb28yKS5s
ZW5ndGgsIDIpCisgICAgYXNzZXJ0KGZvb1siYmF6IiArIGldID09PSAyKQorICAgIGFzc2VydCgh
KCJiYXIiICsgaSBpbiBmb28pKQorICAgIGFzc2VydF9lcShPYmplY3Qua2V5cyhmb28pLmxlbmd0
aCwgMSkKKworICAgIGxldCBkYXRhID0gc2QoZm9vKQorICAgIGFzc2VydF9lcShkYXRhW2RhdGEu
bGVuZ3RoLTFdLnByb3BlcnR5LCAiYmFyIiArIGkpCisKKyAgICBkYXRhID0gc2QoZm9vMikKKyAg
ICBhc3NlcnRfZXEoZGF0YVtkYXRhLmxlbmd0aC0xXS5wcm9wZXJ0eSwgImZ1biIgKyBpKQorICAg
IGFzc2VydF9lcShkYXRhW2RhdGEubGVuZ3RoLTJdLnByb3BlcnR5LCAiYmFyIiArIGkpCit9CisK
K2ZvciAobGV0IGkgPSAwOyBpIDwgMTAwMDsgKytpKSB7CisgICAgdGVzdERlbGV0ZUlzTm90VW5j
YWNoZWFibGUoaSkKKyAgICB0ZXN0Q2FuTWF0ZXJpYWxpemVEZWxldGVzKDEwMDAraSkKK30KKwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>389033</attachid>
            <date>2020-01-28 11:02:33 -0800</date>
            <delta_ts>2020-01-28 16:00:42 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-206430-20200128110233.patch</filename>
            <type>text/plain</type>
            <size>41832</size>
            <attacher name="Justin Michaud">justin_michaud</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjU0ODk3CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCAx
OTIzZTJlNzllMGZhMDMwZmFjOWMyY2RmMTk1ZDczZTU3ZTExMjllLi4yOGJjYWU1NTY4YTJkOTQ2
OTQ3YTNhOTE0MTY1Y2YzZjRhNzhmMmVkIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSw1OSBAQAorMjAyMC0wMS0yOCAgSnVzdGluIE1pY2hhdWQgIDxqdXN0aW5fbWljaGF1ZEBh
cHBsZS5jb20+CisKKyAgICAgICAgRGVsZXRpbmcgYSBwcm9wZXJ0eSBzaG91bGQgbm90IHR1cm4g
c3RydWN0dXJlcyBpbnRvIHVuY2FjaGVhYmxlIGRpY3Rpb25hcmllcworICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjA2NDMwCisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgUmlnaHQgbm93LCBkZWxldGVQcm9wZXJ0
eS9yZW1vdmVQcm9wZXJ0eVRyYW5zaXRpb24gY2F1c2VzIGEgc3RydWN0dXJlIHRyYW5zaXRpb24g
dG8gdW5jYWNoZWFibGUgZGljdGlvbmFyeS4gSW5zdGVhZCwgd2Ugc2hvdWxkIGFsbG93IGl0IHRv
IHRyYW5zaXRpb24gdG8gYSBuZXcgcmVndWxhciBzdHJ1Y3R1cmUgbGlrZSBhZGRpbmcgYSBwcm9w
ZXJ0eSBkb2VzLiBUaGlzIG1lYW5zIHRoYXQgd2UgaGF2ZSB0bzoKKworICAgICAgICAxKSBCcmVh
ayB0aGUgYXNzdW1wdGlvbiB0aGF0IHN0cnVjdHVyZSB0cmFuc2l0aW9uIG9mZnNldHMgaW5jcmVh
c2UgbW9ub3RvbmljYWxseQorCisgICAgICAgIFdlIGFkZCBhIG5ldyBmbGFnIHRvIHRlbGwgdGhh
dCBhIHN0cnVjdHVyZSBoYXMgZGVsZXRlZCBpdHMgcHJvcGVydHksIGFuZCB1cGRhdGUgbWF0ZXJp
YWxpemVQcm9wZXJ0eVRhYmxlIHRvIHVzZSBpdC4KKworICAgICAgICAyKSBBZGQgYSBuZXcgdHJh
bnNpdGlvbiBtYXAgYW5kIHRyYW5zaXRpb24ga2luZCBmb3IgZGVsZXRlcworCisgICAgICAgIFdl
IGNhY2hlIHRoZSBkZWxldGUgdHJhbnNpdGlvbi4gV2Ugd2lsbCBub3QgdHJhbnNpdGlvbiBiYWNr
IHRvIGEgcHJldmlvdXMgc3RydWN0dXJlIGlmIHlvdSBhZGQgdGhlbiBpbW1lZGlhdGVseSByZW1v
dmUgYSBwcm9wZXJ0eS4KKworICAgICAgICAzKSBGaW5kIHNvbWUgaGV1cmlzdGljIGZvciB3aGVu
IHdlIHNob3VsZCBhY3R1YWxseSB0cmFuc2l0aW9uIHRvIHVuY2FjaGVhYmxlIGRpY3Rpb25hcnku
CisKKyAgICAgICAgU2luY2UgZGVsZXRpbmcgcHJvcGVydGllcyBpcyBleHBlY3RlZCB0byBiZSBy
YXJlLCB3ZSBqdXN0IHdhbGsgdGhlIHN0cnVjdHVyZSBsaXN0IGFuZCBjb3VudCBpdHMgc2l6ZSBv
biByZW1vdmFsLiAKKworICAgICAgICBUaGlzIHBhdGNoIGFsc28gZml4ZXMgYSByZWxhdGVkIGJ1
ZyBpbiBhZGRQcm9wZXJ0eSwgd2hlcmUgd2UgZGlkIG5vdCB1c2UgYSBHQ1NhZmVDb25jdXJyZW50
SlNMb2NrZXIsIGFuZCBhZGRzIGFuIG9wdGlvbiB0byB0cmlnZ2VyIHRoZSBidWcuIEZpbmFsbHks
IHdlIGFkZCBzb21lIGhlbHBlciBtZXRob2RzIHRvIGRvbGxhclZNIHRvIHRlc3QuCisKKyAgICAg
ICAgKiBoZWFwL0hlYXBJbmxpbmVzLmg6CisgICAgICAgIChKU0M6OkhlYXA6OmRlY3JlbWVudERl
ZmVycmFsRGVwdGhBbmRHQ0lmTmVlZGVkKToKKyAgICAgICAgKiBydW50aW1lL0pTT2JqZWN0LmNw
cDoKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OmRlbGV0ZVByb3BlcnR5KToKKyAgICAgICAgKiBy
dW50aW1lL09wdGlvbnNMaXN0Lmg6CisgICAgICAgICogcnVudGltZS9Qcm9wZXJ0eU1hcEhhc2hU
YWJsZS5oOgorICAgICAgICAoSlNDOjpQcm9wZXJ0eVRhYmxlOjphZGQpOgorICAgICAgICAoSlND
OjpQcm9wZXJ0eVRhYmxlOjphZGREZWxldGVkT2Zmc2V0KToKKyAgICAgICAgKiBydW50aW1lL1N0
cnVjdHVyZS5jcHA6CisgICAgICAgIChKU0M6OlN0cnVjdHVyZVRyYW5zaXRpb25UYWJsZTo6Y29u
dGFpbnMgY29uc3QpOgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmVUcmFuc2l0aW9uVGFibGU6Omdl
dCBjb25zdCk6CisgICAgICAgIChKU0M6OlN0cnVjdHVyZVRyYW5zaXRpb25UYWJsZTo6YWRkKToK
KyAgICAgICAgKEpTQzo6U3RydWN0dXJlOjpTdHJ1Y3R1cmUpOgorICAgICAgICAoSlNDOjpTdHJ1
Y3R1cmU6Om1hdGVyaWFsaXplUHJvcGVydHlUYWJsZSk6CisgICAgICAgIChKU0M6OlN0cnVjdHVy
ZTo6YWRkTmV3UHJvcGVydHlUcmFuc2l0aW9uKToKKyAgICAgICAgKEpTQzo6U3RydWN0dXJlOjpy
ZW1vdmVQcm9wZXJ0eVRyYW5zaXRpb24pOgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmU6OnJlbW92
ZVByb3BlcnR5VHJhbnNpdGlvbkZyb21FeGlzdGluZ1N0cnVjdHVyZSk6CisgICAgICAgIChKU0M6
OlN0cnVjdHVyZTo6cmVtb3ZlTmV3UHJvcGVydHlUcmFuc2l0aW9uKToKKyAgICAgICAgKEpTQzo6
U3RydWN0dXJlOjp0b1VuY2FjaGVhYmxlRGljdGlvbmFyeVRyYW5zaXRpb24pOgorICAgICAgICAo
SlNDOjpTdHJ1Y3R1cmU6OnJlbW92ZSk6CisgICAgICAgICogcnVudGltZS9TdHJ1Y3R1cmUuaDoK
KyAgICAgICAgKiBydW50aW1lL1N0cnVjdHVyZUlubGluZXMuaDoKKyAgICAgICAgKEpTQzo6U3Ry
dWN0dXJlOjpmb3JFYWNoUHJvcGVydHlDb25jdXJyZW50bHkpOgorICAgICAgICAoSlNDOjpTdHJ1
Y3R1cmU6OmFkZCk6CisgICAgICAgIChKU0M6OlN0cnVjdHVyZTo6cmVtb3ZlKToKKyAgICAgICAg
KEpTQzo6U3RydWN0dXJlOjpyZW1vdmVQcm9wZXJ0eVdpdGhvdXRUcmFuc2l0aW9uKToKKyAgICAg
ICAgKiBydW50aW1lL1N0cnVjdHVyZVRyYW5zaXRpb25UYWJsZS5oOgorICAgICAgICAoSlNDOjpT
dHJ1Y3R1cmVUcmFuc2l0aW9uVGFibGU6Okhhc2g6Omhhc2gpOgorICAgICAgICAqIHRvb2xzL0pT
RG9sbGFyVk0uY3BwOgorICAgICAgICAoSlNDOjpKU0RvbGxhclZNSGVscGVyOjpmdW5jdGlvbkdl
dFN0cnVjdHVyZVRyYW5zaXRpb25MaXN0KToKKyAgICAgICAgKEpTQzo6ZnVuY3Rpb25HZXRDb25j
dXJyZW50bHkpOgorICAgICAgICAoSlNDOjpKU0RvbGxhclZNOjpmaW5pc2hDcmVhdGlvbik6CisK
IDIwMjAtMDEtMjEgIFJvYiBCdWlzICA8cmJ1aXNAaWdhbGlhLmNvbT4KIAogICAgICAgICBBZGQg
YnVpbGQgZmxhZyBmb3Igc3RhbGUtd2hpbGUtcmV2YWxpZGF0ZQpkaWZmIC0tZ2l0IGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcElubGluZXMuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9oZWFwL0hlYXBJbmxpbmVzLmgKaW5kZXggMTdmMjQxMThiODIyZWZiN2Y2NmVlMTI1OTUzNzhm
YTU4YzIxN2M2Mi4uN2FmMDU2M2IxMWViNmQ4YzE1MjJkNjIwOWZjNGMxOWQ1NTRhN2RjZiAxMDA2
NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcElubGluZXMuaAorKysgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwSW5saW5lcy5oCkBAIC0xODgsNyArMTg4LDcg
QEAgaW5saW5lIHZvaWQgSGVhcDo6ZGVjcmVtZW50RGVmZXJyYWxEZXB0aEFuZEdDSWZOZWVkZWQo
KQogICAgIEFTU0VSVCghVGhyZWFkOjptYXlCZUdDVGhyZWFkKCkgfHwgbV93b3JsZElzU3RvcHBl
ZCk7CiAgICAgbV9kZWZlcnJhbERlcHRoLS07CiAgICAgCi0gICAgaWYgKFVOTElLRUxZKG1fZGlk
RGVmZXJHQ1dvcmspKSB7CisgICAgaWYgKFVOTElLRUxZKG1fZGlkRGVmZXJHQ1dvcmspIHx8IE9w
dGlvbnM6OmZvcmNlRGlkRGVmZXJHQ1dvcmsoKSkgewogICAgICAgICBkZWNyZW1lbnREZWZlcnJh
bERlcHRoQW5kR0NJZk5lZWRlZFNsb3coKTsKICAgICAgICAgCiAgICAgICAgIC8vIEhlcmUgYXJl
IHRoZSBwb3NzaWJsZSByZWxhdGlvbnNoaXBzIGJldHdlZW4gbV9kZWZlcnJhbERlcHRoIGFuZCBt
X2RpZERlZmVyR0NXb3JrLgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSlNPYmplY3QuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNPYmplY3Qu
Y3BwCmluZGV4IGQ2N2JhOGQ1Y2E5NTY5ZDA0YTE5ZTUwMzY0NTMwNTk2YmE5ZDg4ZDIuLjRjMTE4
YjIyNjY2ZTczZjE5OTE3OGUwOGMzZDExZTBhYzg0YWY1ZDIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT2JqZWN0LmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9KU09iamVjdC5jcHAKQEAgLTIwMDIsMTQgKzIwMDIsMjUgQEAgYm9vbCBK
U09iamVjdDo6ZGVsZXRlUHJvcGVydHkoSlNDZWxsKiBjZWxsLCBKU0dsb2JhbE9iamVjdCogZ2xv
YmFsT2JqZWN0LCBQcm9wZXIKICAgICAgICAgaWYgKGF0dHJpYnV0ZXMgJiBQcm9wZXJ0eUF0dHJp
YnV0ZTo6RG9udERlbGV0ZSAmJiB2bS5kZWxldGVQcm9wZXJ0eU1vZGUoKSAhPSBWTTo6RGVsZXRl
UHJvcGVydHlNb2RlOjpJZ25vcmVDb25maWd1cmFibGUpCiAgICAgICAgICAgICByZXR1cm4gZmFs
c2U7CiAKLSAgICAgICAgUHJvcGVydHlPZmZzZXQgb2Zmc2V0OworICAgICAgICBQcm9wZXJ0eU9m
ZnNldCBvZmZzZXQgPSBpbnZhbGlkT2Zmc2V0OwogICAgICAgICBpZiAoc3RydWN0dXJlLT5pc1Vu
Y2FjaGVhYmxlRGljdGlvbmFyeSgpKQotICAgICAgICAgICAgb2Zmc2V0ID0gc3RydWN0dXJlLT5y
ZW1vdmVQcm9wZXJ0eVdpdGhvdXRUcmFuc2l0aW9uKHZtLCBwcm9wZXJ0eU5hbWUsIFtdIChjb25z
dCBDb25jdXJyZW50SlNMb2NrZXImLCBQcm9wZXJ0eU9mZnNldCkgeyB9KTsKLSAgICAgICAgZWxz
ZQotICAgICAgICAgICAgdGhpc09iamVjdC0+c2V0U3RydWN0dXJlKHZtLCBTdHJ1Y3R1cmU6OnJl
bW92ZVByb3BlcnR5VHJhbnNpdGlvbih2bSwgc3RydWN0dXJlLCBwcm9wZXJ0eU5hbWUsIG9mZnNl
dCkpOworICAgICAgICAgICAgb2Zmc2V0ID0gc3RydWN0dXJlLT5yZW1vdmVQcm9wZXJ0eVdpdGhv
dXRUcmFuc2l0aW9uKHZtLCBwcm9wZXJ0eU5hbWUsIFtdIChjb25zdCBHQ1NhZmVDb25jdXJyZW50
SlNMb2NrZXImLCBQcm9wZXJ0eU9mZnNldCwgUHJvcGVydHlPZmZzZXQpIHsgfSk7CisgICAgICAg
IGVsc2UgeworICAgICAgICAgICAgRGVmZXJyZWRTdHJ1Y3R1cmVUcmFuc2l0aW9uV2F0Y2hwb2lu
dEZpcmUgZGVmZXJyZWRXYXRjaHBvaW50RmlyZSh2bSwgc3RydWN0dXJlKTsKKyAgICAgICAgICAg
IHN0cnVjdHVyZSA9IFN0cnVjdHVyZTo6cmVtb3ZlUHJvcGVydHlUcmFuc2l0aW9uKHZtLCBzdHJ1
Y3R1cmUsIHByb3BlcnR5TmFtZSwgb2Zmc2V0LCAmZGVmZXJyZWRXYXRjaHBvaW50RmlyZSk7Cisg
ICAgICAgICAgICBpZiAodGhpc09iamVjdC0+bV9idXR0ZXJmbHkgJiYgIXN0cnVjdHVyZS0+b3V0
T2ZMaW5lQ2FwYWNpdHkoKSkgeworICAgICAgICAgICAgICAgIHRoaXNPYmplY3QtPm51a2VTdHJ1
Y3R1cmVBbmRTZXRCdXR0ZXJmbHkodm0sIHRoaXNPYmplY3QtPnN0cnVjdHVyZUlEKCksIG51bGxw
dHIpOworICAgICAgICAgICAgICAgIG9mZnNldCA9IGludmFsaWRPZmZzZXQ7CisgICAgICAgICAg
ICB9CisgICAgICAgICAgICB0aGlzT2JqZWN0LT5zZXRTdHJ1Y3R1cmUodm0sIHN0cnVjdHVyZSk7
CisgICAgICAgIH0KKworICAgICAgICBBU1NFUlQoIWlzVmFsaWRPZmZzZXQoc3RydWN0dXJlLT5n
ZXQodm0sIHByb3BlcnR5TmFtZSwgYXR0cmlidXRlcykpKTsKIAotICAgICAgICBpZiAob2Zmc2V0
ICE9IGludmFsaWRPZmZzZXQpCisgICAgICAgIGlmIChvZmZzZXQgIT0gaW52YWxpZE9mZnNldCkg
eworICAgICAgICAgICAgV1RGOjpzdG9yZVN0b3JlRmVuY2UoKTsKICAgICAgICAgICAgIHRoaXNP
YmplY3QtPmxvY2F0aW9uRm9yT2Zmc2V0KG9mZnNldCktPmNsZWFyKCk7CisgICAgICAgIH0KICAg
ICB9CiAKICAgICByZXR1cm4gdHJ1ZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL09wdGlvbnNMaXN0LmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9P
cHRpb25zTGlzdC5oCmluZGV4IGYzNWM1ZTE1NzQzNmIyYmQ4MDBhMDZkNzEyMmQwYjZkYTg0Y2Fj
ZDEuLjU0YjAzNWI4ZDlkOWY2MGMyYTdlMWZhNTFkZjAzNGI0YTZkZjMxZDkgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09wdGlvbnNMaXN0LmgKKysrIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9uc0xpc3QuaApAQCAtMzQ4LDYgKzM0OCw3IEBA
IGNvbnN0ZXhwciBib29sIGVuYWJsZVdlYkFzc2VtYmx5U3RyZWFtaW5nQXBpID0gZmFsc2U7CiAg
ICAgdihCb29sLCB1c2VHQywgdHJ1ZSwgTm9ybWFsLCBudWxscHRyKSBcCiAgICAgdihCb29sLCBn
Y0F0RW5kLCBmYWxzZSwgTm9ybWFsLCAiSWYgdHJ1ZSwgdGhlIGpzYyBDTEkgd2lsbCBkbyBhIEdD
IGJlZm9yZSBleGl0aW5nIikgXAogICAgIHYoQm9vbCwgZm9yY2VHQ1Nsb3dQYXRocywgZmFsc2Us
IE5vcm1hbCwgIklmIHRydWUsIHdlIHdpbGwgZm9yY2UgYWxsIEpJVCBmYXN0IGFsbG9jYXRpb25z
IGRvd24gdGhlaXIgc2xvdyBwYXRocy4iKSBcCisgICAgdihCb29sLCBmb3JjZURpZERlZmVyR0NX
b3JrLCBmYWxzZSwgTm9ybWFsLCAiSWYgdHJ1ZSwgd2Ugd2lsbCBmb3JjZSBhbGwgRGVmZXJHQyBk
ZXN0cnVjdGlvbnMgdG8gcGVyZm9ybSBhIEdDLiIpIFwKICAgICB2KFVuc2lnbmVkLCBnY01heEhl
YXBTaXplLCAwLCBOb3JtYWwsIG51bGxwdHIpIFwKICAgICB2KFVuc2lnbmVkLCBmb3JjZVJBTVNp
emUsIDAsIE5vcm1hbCwgbnVsbHB0cikgXAogICAgIHYoQm9vbCwgcmVjb3JkR0NQYXVzZVRpbWVz
LCBmYWxzZSwgTm9ybWFsLCBudWxscHRyKSBcCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9Qcm9wZXJ0eU1hcEhhc2hUYWJsZS5oIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvUHJvcGVydHlNYXBIYXNoVGFibGUuaAppbmRleCBjYjYwMTVjZjIwZTQ1MzAx
MTU5YmIwMGQ3NDI2MjM3NGZlZWNiOWNmLi4yNzJjZjk4NTZjMWFlOGM0Y2JkNDc0N2ZjYjQyYzk0
MmYzNDVkYjBhIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Qcm9w
ZXJ0eU1hcEhhc2hUYWJsZS5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1By
b3BlcnR5TWFwSGFzaFRhYmxlLmgKQEAgLTM0OCw2ICszNDgsOCBAQCBpbmxpbmUgUHJvcGVydHlU
YWJsZTo6VmFsdWVUeXBlKiBQcm9wZXJ0eVRhYmxlOjpnZXQoY29uc3QgS2V5VHlwZSYga2V5KQog
CiBpbmxpbmUgc3RkOjpwYWlyPFByb3BlcnR5VGFibGU6OmZpbmRfaXRlcmF0b3IsIGJvb2w+IFBy
b3BlcnR5VGFibGU6OmFkZChjb25zdCBWYWx1ZVR5cGUmIGVudHJ5LCBQcm9wZXJ0eU9mZnNldCYg
b2Zmc2V0LCBFZmZlY3RPblByb3BlcnR5T2Zmc2V0IG9mZnNldEVmZmVjdCkKIHsKKyAgICBBU1NF
UlQoIW1fZGVsZXRlZE9mZnNldHMgfHwgIW1fZGVsZXRlZE9mZnNldHMtPmNvbnRhaW5zKG9mZnNl
dCkpOworCiAgICAgLy8gTG9vayBmb3IgYSB2YWx1ZSB3aXRoIGEgbWF0Y2hpbmcga2V5IGFscmVh
ZHkgaW4gdGhlIGFycmF5LgogICAgIGZpbmRfaXRlcmF0b3IgaXRlciA9IGZpbmQoZW50cnkua2V5
KTsKICAgICBpZiAoaXRlci5maXJzdCkgewpAQCAtNDUxLDYgKzQ1Myw3IEBAIGlubGluZSB2b2lk
IFByb3BlcnR5VGFibGU6OmFkZERlbGV0ZWRPZmZzZXQoUHJvcGVydHlPZmZzZXQgb2Zmc2V0KQog
ewogICAgIGlmICghbV9kZWxldGVkT2Zmc2V0cykKICAgICAgICAgbV9kZWxldGVkT2Zmc2V0cyA9
IG1ha2VVbmlxdWU8VmVjdG9yPFByb3BlcnR5T2Zmc2V0Pj4oKTsKKyAgICBBU1NFUlQoIW1fZGVs
ZXRlZE9mZnNldHMtPmNvbnRhaW5zKG9mZnNldCkpOwogICAgIG1fZGVsZXRlZE9mZnNldHMtPmFw
cGVuZChvZmZzZXQpOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9TdHJ1Y3R1cmUuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0
dXJlLmNwcAppbmRleCA1YTYxMjEzZDNiOWFkYmQ4MGEyNGU1MzA5MGQ3MzliZDIzYjMxNDgxLi43
NzA5MzdmNTk0MGU2NDcyZDNiNTcyMDA5NmY0MmQwZmJlNGM1MTBkIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmUuY3BwCisrKyBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZS5jcHAKQEAgLTg3LDIyICs4NywyMiBAQCBpbmxp
bmUgdm9pZCBTdHJ1Y3R1cmVUcmFuc2l0aW9uVGFibGU6OnNldFNpbmdsZVRyYW5zaXRpb24oU3Ry
dWN0dXJlKiBzdHJ1Y3R1cmUpCiAgICAgbV9kYXRhID0gYml0d2lzZV9jYXN0PGludHB0cl90Pihp
bXBsKSB8IFVzaW5nU2luZ2xlU2xvdEZsYWc7CiB9CiAKLWJvb2wgU3RydWN0dXJlVHJhbnNpdGlv
blRhYmxlOjpjb250YWlucyhVbmlxdWVkU3RyaW5nSW1wbCogcmVwLCB1bnNpZ25lZCBhdHRyaWJ1
dGVzKSBjb25zdAorYm9vbCBTdHJ1Y3R1cmVUcmFuc2l0aW9uVGFibGU6OmNvbnRhaW5zKFVuaXF1
ZWRTdHJpbmdJbXBsKiByZXAsIHVuc2lnbmVkIGF0dHJpYnV0ZXMsIGJvb2wgaXNBZGRpdGlvbikg
Y29uc3QKIHsKICAgICBpZiAoaXNVc2luZ1NpbmdsZVNsb3QoKSkgewogICAgICAgICBTdHJ1Y3R1
cmUqIHRyYW5zaXRpb24gPSBzaW5nbGVUcmFuc2l0aW9uKCk7Ci0gICAgICAgIHJldHVybiB0cmFu
c2l0aW9uICYmIHRyYW5zaXRpb24tPm1fdHJhbnNpdGlvblByb3BlcnR5TmFtZSA9PSByZXAgJiYg
dHJhbnNpdGlvbi0+dHJhbnNpdGlvblByb3BlcnR5QXR0cmlidXRlcygpID09IGF0dHJpYnV0ZXM7
CisgICAgICAgIHJldHVybiB0cmFuc2l0aW9uICYmIHRyYW5zaXRpb24tPm1fdHJhbnNpdGlvblBy
b3BlcnR5TmFtZSA9PSByZXAgJiYgdHJhbnNpdGlvbi0+dHJhbnNpdGlvblByb3BlcnR5QXR0cmli
dXRlcygpID09IGF0dHJpYnV0ZXMgJiYgdHJhbnNpdGlvbi0+aXNQcm9wZXJ0eURlbGV0aW9uVHJh
bnNpdGlvbigpID09ICFpc0FkZGl0aW9uOwogICAgIH0KLSAgICByZXR1cm4gbWFwKCktPmdldChz
dGQ6Om1ha2VfcGFpcihyZXAsIGF0dHJpYnV0ZXMpKTsKKyAgICByZXR1cm4gbWFwKCktPmdldChz
dGQ6Om1ha2VfdHVwbGUocmVwLCBhdHRyaWJ1dGVzLCBpc0FkZGl0aW9uKSk7CiB9CiAKLWlubGlu
ZSBTdHJ1Y3R1cmUqIFN0cnVjdHVyZVRyYW5zaXRpb25UYWJsZTo6Z2V0KFVuaXF1ZWRTdHJpbmdJ
bXBsKiByZXAsIHVuc2lnbmVkIGF0dHJpYnV0ZXMpIGNvbnN0CitpbmxpbmUgU3RydWN0dXJlKiBT
dHJ1Y3R1cmVUcmFuc2l0aW9uVGFibGU6OmdldChVbmlxdWVkU3RyaW5nSW1wbCogcmVwLCB1bnNp
Z25lZCBhdHRyaWJ1dGVzLCBib29sIGlzQWRkaXRpb24pIGNvbnN0CiB7CiAgICAgaWYgKGlzVXNp
bmdTaW5nbGVTbG90KCkpIHsKICAgICAgICAgU3RydWN0dXJlKiB0cmFuc2l0aW9uID0gc2luZ2xl
VHJhbnNpdGlvbigpOwotICAgICAgICByZXR1cm4gKHRyYW5zaXRpb24gJiYgdHJhbnNpdGlvbi0+
bV90cmFuc2l0aW9uUHJvcGVydHlOYW1lID09IHJlcCAmJiB0cmFuc2l0aW9uLT50cmFuc2l0aW9u
UHJvcGVydHlBdHRyaWJ1dGVzKCkgPT0gYXR0cmlidXRlcykgPyB0cmFuc2l0aW9uIDogMDsKKyAg
ICAgICAgcmV0dXJuICh0cmFuc2l0aW9uICYmIHRyYW5zaXRpb24tPm1fdHJhbnNpdGlvblByb3Bl
cnR5TmFtZSA9PSByZXAgJiYgdHJhbnNpdGlvbi0+dHJhbnNpdGlvblByb3BlcnR5QXR0cmlidXRl
cygpID09IGF0dHJpYnV0ZXMgJiYgdHJhbnNpdGlvbi0+aXNQcm9wZXJ0eURlbGV0aW9uVHJhbnNp
dGlvbigpID09ICFpc0FkZGl0aW9uKSA/IHRyYW5zaXRpb24gOiAwOwogICAgIH0KLSAgICByZXR1
cm4gbWFwKCktPmdldChzdGQ6Om1ha2VfcGFpcihyZXAsIGF0dHJpYnV0ZXMpKTsKKyAgICByZXR1
cm4gbWFwKCktPmdldChzdGQ6Om1ha2VfdHVwbGUocmVwLCBhdHRyaWJ1dGVzLCBpc0FkZGl0aW9u
KSk7CiB9CiAKIHZvaWQgU3RydWN0dXJlVHJhbnNpdGlvblRhYmxlOjphZGQoVk0mIHZtLCBTdHJ1
Y3R1cmUqIHN0cnVjdHVyZSkKQEAgLTEyNyw3ICsxMjcsNyBAQCB2b2lkIFN0cnVjdHVyZVRyYW5z
aXRpb25UYWJsZTo6YWRkKFZNJiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUpCiAgICAgLy8gTmV3
ZXIgdmVyc2lvbnMgb2YgdGhlIFNUTCBoYXZlIGFuIHN0ZDo6bWFrZV9wYWlyIGZ1bmN0aW9uIHRo
YXQgdGFrZXMgcnZhbHVlIHJlZmVyZW5jZXMuCiAgICAgLy8gV2hlbiBlaXRoZXIgb2YgdGhlIHBh
cmFtZXRlcnMgYXJlIGJpdGZpZWxkcywgdGhlIEMrKyBjb21waWxlciB3aWxsIHRyeSB0byBiaW5k
IHRoZW0gYXMgbHZhbHVlcywgd2hpY2ggaXMgaW52YWxpZC4gVG8gd29yayBhcm91bmQgdGhpcywg
dXNlIHVuYXJ5ICIrIiB0byBtYWtlIHRoZSBwYXJhbWV0ZXIgYW4gcnZhbHVlLgogICAgIC8vIFNl
ZSBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NTkyNjEgZm9yIG1vcmUg
ZGV0YWlscwotICAgIG1hcCgpLT5zZXQoc3RkOjptYWtlX3BhaXIoc3RydWN0dXJlLT5tX3RyYW5z
aXRpb25Qcm9wZXJ0eU5hbWUuZ2V0KCksICtzdHJ1Y3R1cmUtPnRyYW5zaXRpb25Qcm9wZXJ0eUF0
dHJpYnV0ZXMoKSksIHN0cnVjdHVyZSk7CisgICAgbWFwKCktPnNldChzdGQ6Om1ha2VfdHVwbGUo
c3RydWN0dXJlLT5tX3RyYW5zaXRpb25Qcm9wZXJ0eU5hbWUuZ2V0KCksICtzdHJ1Y3R1cmUtPnRy
YW5zaXRpb25Qcm9wZXJ0eUF0dHJpYnV0ZXMoKSwgIXN0cnVjdHVyZS0+aXNQcm9wZXJ0eURlbGV0
aW9uVHJhbnNpdGlvbigpKSwgc3RydWN0dXJlKTsKIH0KIAogdm9pZCBTdHJ1Y3R1cmU6OmR1bXBT
dGF0aXN0aWNzKCkKQEAgLTIwMSw2ICsyMDEsNyBAQCBTdHJ1Y3R1cmU6OlN0cnVjdHVyZShWTSYg
dm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTVmFsdWUgcHJvdG90eXBlLCBjbwog
ICAgIHNldFRyYW5zaXRpb25XYXRjaHBvaW50SXNMaWtlbHlUb0JlRmlyZWQoZmFsc2UpOwogICAg
IHNldEhhc0JlZW5EaWN0aW9uYXJ5KGZhbHNlKTsKICAgICBzZXRJc0FkZGluZ1Byb3BlcnR5Rm9y
VHJhbnNpdGlvbihmYWxzZSk7CisgICAgc2V0SXNQcm9wZXJ0eURlbGV0aW9uVHJhbnNpdGlvbihm
YWxzZSk7CiAgICAgc2V0VHJhbnNpdGlvbk9mZnNldCh2bSwgaW52YWxpZE9mZnNldCk7CiAgICAg
c2V0TWF4T2Zmc2V0KHZtLCBpbnZhbGlkT2Zmc2V0KTsKICAKQEAgLTIzNyw2ICsyMzgsNyBAQCBT
dHJ1Y3R1cmU6OlN0cnVjdHVyZShWTSYgdm0pCiAgICAgc2V0VHJhbnNpdGlvbldhdGNocG9pbnRJ
c0xpa2VseVRvQmVGaXJlZChmYWxzZSk7CiAgICAgc2V0SGFzQmVlbkRpY3Rpb25hcnkoZmFsc2Up
OwogICAgIHNldElzQWRkaW5nUHJvcGVydHlGb3JUcmFuc2l0aW9uKGZhbHNlKTsKKyAgICBzZXRJ
c1Byb3BlcnR5RGVsZXRpb25UcmFuc2l0aW9uKGZhbHNlKTsKICAgICBzZXRUcmFuc2l0aW9uT2Zm
c2V0KHZtLCBpbnZhbGlkT2Zmc2V0KTsKICAgICBzZXRNYXhPZmZzZXQodm0sIGludmFsaWRPZmZz
ZXQpOwogIApAQCAtMjczLDYgKzI3NSw3IEBAIFN0cnVjdHVyZTo6U3RydWN0dXJlKFZNJiB2bSwg
U3RydWN0dXJlKiBwcmV2aW91cywgRGVmZXJyZWRTdHJ1Y3R1cmVUcmFuc2l0aW9uV2F0CiAgICAg
c2V0U3RhdGljUHJvcGVydGllc1JlaWZpZWQocHJldmlvdXMtPnN0YXRpY1Byb3BlcnRpZXNSZWlm
aWVkKCkpOwogICAgIHNldEhhc0JlZW5EaWN0aW9uYXJ5KHByZXZpb3VzLT5oYXNCZWVuRGljdGlv
bmFyeSgpKTsKICAgICBzZXRJc0FkZGluZ1Byb3BlcnR5Rm9yVHJhbnNpdGlvbihmYWxzZSk7Cisg
ICAgc2V0SXNQcm9wZXJ0eURlbGV0aW9uVHJhbnNpdGlvbihmYWxzZSk7CiAgICAgc2V0VHJhbnNp
dGlvbk9mZnNldCh2bSwgaW52YWxpZE9mZnNldCk7CiAgICAgc2V0TWF4T2Zmc2V0KHZtLCBpbnZh
bGlkT2Zmc2V0KTsKICAKQEAgLTM4NCwxMCArMzg3LDE5IEBAIFByb3BlcnR5VGFibGUqIFN0cnVj
dHVyZTo6bWF0ZXJpYWxpemVQcm9wZXJ0eVRhYmxlKFZNJiB2bSwgYm9vbCBzZXRQcm9wZXJ0eVRh
YmxlCiAgICAgICAgIHN0cnVjdHVyZSA9IHN0cnVjdHVyZXNbaV07CiAgICAgICAgIGlmICghc3Ry
dWN0dXJlLT5tX3RyYW5zaXRpb25Qcm9wZXJ0eU5hbWUpCiAgICAgICAgICAgICBjb250aW51ZTsK
LSAgICAgICAgQVNTRVJUKGkgPT0gc3RydWN0dXJlcy5zaXplKCkgLSAxIHx8IHN0cnVjdHVyZS0+
bWF4T2Zmc2V0KCkgPiBzdHJ1Y3R1cmVzW2kgKyAxXS0+bWF4T2Zmc2V0KCkpOworICAgICAgICBp
ZiAoc3RydWN0dXJlLT5pc1Byb3BlcnR5RGVsZXRpb25UcmFuc2l0aW9uKCkpIHsKKyAgICAgICAg
ICAgIGF1dG8gaXRlbSA9IHRhYmxlLT5maW5kKHN0cnVjdHVyZS0+bV90cmFuc2l0aW9uUHJvcGVy
dHlOYW1lLmdldCgpKTsKKyAgICAgICAgICAgIEFTU0VSVChpdGVtLmZpcnN0KTsKKyAgICAgICAg
ICAgIHRhYmxlLT5yZW1vdmUoaXRlbSk7CisgICAgICAgICAgICB0YWJsZS0+YWRkRGVsZXRlZE9m
ZnNldChzdHJ1Y3R1cmUtPnRyYW5zaXRpb25PZmZzZXQoKSk7CisgICAgICAgICAgICBjb250aW51
ZTsKKyAgICAgICAgfQogICAgICAgICBQcm9wZXJ0eU1hcEVudHJ5IGVudHJ5KHN0cnVjdHVyZS0+
bV90cmFuc2l0aW9uUHJvcGVydHlOYW1lLmdldCgpLCBzdHJ1Y3R1cmUtPnRyYW5zaXRpb25PZmZz
ZXQoKSwgc3RydWN0dXJlLT50cmFuc2l0aW9uUHJvcGVydHlBdHRyaWJ1dGVzKCkpOwotICAgICAg
ICBhdXRvIG1heE9mZnNldCA9IHRoaXMtPm1heE9mZnNldCgpOwotICAgICAgICB0YWJsZS0+YWRk
KGVudHJ5LCBtYXhPZmZzZXQsIFByb3BlcnR5VGFibGU6OlByb3BlcnR5T2Zmc2V0TXVzdE5vdENo
YW5nZSk7CisgICAgICAgIGF1dG8gbmV4dE9mZnNldCA9IHRhYmxlLT5uZXh0T2Zmc2V0KHN0cnVj
dHVyZS0+aW5saW5lQ2FwYWNpdHkoKSk7CisgICAgICAgIEFTU0VSVF9VTlVTRUQobmV4dE9mZnNl
dCwgbmV4dE9mZnNldCA9PSBzdHJ1Y3R1cmUtPnRyYW5zaXRpb25PZmZzZXQoKSk7CisgICAgICAg
IGF1dG8gb2Zmc2V0ID0gc3RydWN0dXJlLT50cmFuc2l0aW9uT2Zmc2V0KCk7CisgICAgICAgIHRh
YmxlLT5hZGQoZW50cnksIG9mZnNldCwgUHJvcGVydHlUYWJsZTo6UHJvcGVydHlPZmZzZXRNdXN0
Tm90Q2hhbmdlKTsKKyAgICAgICAgQVNTRVJUKG9mZnNldCA9PSBzdHJ1Y3R1cmUtPnRyYW5zaXRp
b25PZmZzZXQoKSk7CiAgICAgfQogICAgIAogICAgIGNoZWNrT2Zmc2V0Q29uc2lzdGVuY3koCkBA
IC00ODQsNyArNDk2LDYgQEAgU3RydWN0dXJlKiBTdHJ1Y3R1cmU6OmFkZE5ld1Byb3BlcnR5VHJh
bnNpdGlvbihWTSYgdm0sIFN0cnVjdHVyZSogc3RydWN0dXJlLCBQcm8KICAgICAgICAgU3RydWN0
dXJlKiB0cmFuc2l0aW9uID0gdG9DYWNoZWFibGVEaWN0aW9uYXJ5VHJhbnNpdGlvbih2bSwgc3Ry
dWN0dXJlLCBkZWZlcnJlZCk7CiAgICAgICAgIEFTU0VSVChzdHJ1Y3R1cmUgIT0gdHJhbnNpdGlv
bik7CiAgICAgICAgIG9mZnNldCA9IHRyYW5zaXRpb24tPmFkZCh2bSwgcHJvcGVydHlOYW1lLCBh
dHRyaWJ1dGVzKTsKLSAgICAgICAgdHJhbnNpdGlvbi0+c2V0VHJhbnNpdGlvbk9mZnNldCh2bSwg
b2Zmc2V0KTsKICAgICAgICAgcmV0dXJuIHRyYW5zaXRpb247CiAgICAgfQogICAgIApAQCAtNTIy
LDggKzUzMyw3IEBAIFN0cnVjdHVyZSogU3RydWN0dXJlOjphZGROZXdQcm9wZXJ0eVRyYW5zaXRp
b24oVk0mIHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgUHJvCiAKICAgICBjaGVja09mZnNldCh0
cmFuc2l0aW9uLT50cmFuc2l0aW9uT2Zmc2V0KCksIHRyYW5zaXRpb24tPmlubGluZUNhcGFjaXR5
KCkpOwogICAgIHsKLSAgICAgICAgQ29uY3VycmVudEpTTG9ja2VyIGxvY2tlcihzdHJ1Y3R1cmUt
Pm1fbG9jayk7Ci0gICAgICAgIERlZmVyR0MgZGVmZXJHQyh2bS5oZWFwKTsKKyAgICAgICAgR0NT
YWZlQ29uY3VycmVudEpTTG9ja2VyIGxvY2tlcihzdHJ1Y3R1cmUtPm1fbG9jaywgdm0uaGVhcCk7
CiAgICAgICAgIHN0cnVjdHVyZS0+bV90cmFuc2l0aW9uVGFibGUuYWRkKHZtLCB0cmFuc2l0aW9u
KTsKICAgICB9CiAgICAgdHJhbnNpdGlvbi0+Y2hlY2tPZmZzZXRDb25zaXN0ZW5jeSgpOwpAQCAt
NTMxLDI3ICs1NDEsODQgQEAgU3RydWN0dXJlKiBTdHJ1Y3R1cmU6OmFkZE5ld1Byb3BlcnR5VHJh
bnNpdGlvbihWTSYgdm0sIFN0cnVjdHVyZSogc3RydWN0dXJlLCBQcm8KICAgICByZXR1cm4gdHJh
bnNpdGlvbjsKIH0KIAotU3RydWN0dXJlKiBTdHJ1Y3R1cmU6OnJlbW92ZVByb3BlcnR5VHJhbnNp
dGlvbihWTSYgdm0sIFN0cnVjdHVyZSogc3RydWN0dXJlLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlO
YW1lLCBQcm9wZXJ0eU9mZnNldCYgb2Zmc2V0KQotewotICAgIC8vIE5PVEU6IFRoZXJlIGFyZSBz
b21lIGdvb2QgcmVhc29ucyB3aHkgdGhpcyBnb2VzIGRpcmVjdGx5IHRvIHVuY2FjaGVhYmxlIGRp
Y3Rpb25hcnkgcmF0aGVyIHRoYW4KLSAgICAvLyBjYWNoaW5nIHRoZSByZW1vdmFsLiBXZSBjYW4g
Zml4IGFsbCBvZiB0aGVzZSB0aGluZ3MsIGJ1dCB3ZSBtdXN0IHJlbWVtYmVyIHRvIGRvIHNvLCBp
ZiB3ZSBldmVyIHRyeQotICAgIC8vIHRvIG9wdGltaXplIHRoaXMgY2FzZS4KLSAgICAvLwotICAg
IC8vIC0gQ2FjaGVkIHRyYW5zaXRpb25zIHVzdWFsbHkgc3RlYWwgdGhlIHByb3BlcnR5IHRhYmxl
LCBhbmQgYXNzdW1lIHRoYXQgdGhpcyBpcyBwb3NzaWJsZSBiZWNhdXNlIHRoZXkKLSAgICAvLyAg
IGNhbiBqdXN0IHJlYnVpbGQgdGhlIHRhYmxlIGJ5IGxvb2tpbmcgYXQgcGFzdCB0cmFuc2l0aW9u
cy4gVGhhdCBjb2RlIGFzc3VtZXMgdGhhdCB0aGUgdGFibGUgb25seQotICAgIC8vICAgZ3JldyBh
bmQgbmV2ZXIgc2hyYW5rLiBUbyBzdXBwb3J0IHJlbW92YWxzLCB3ZSdkIGhhdmUgdG8gY2hhbmdl
IHRoZSBwcm9wZXJ0eSB0YWJsZSBtYXRlcmlhbGl6YXRpb24KLSAgICAvLyAgIGNvZGUgdG8gaGFu
ZGxlIGRlbGV0aW9ucy4gQWxzbywgd2UgaGF2ZSBsb2dpYyB0byBnZXQgdGhlIGxpc3Qgb2YgcHJv
cGVydGllcyBvbiBhIHN0cnVjdHVyZSB0aGF0Ci0gICAgLy8gICBsYWNrcyBhIHByb3BlcnR5IHRh
YmxlIGJ5IGp1c3QgbG9va2luZyBiYWNrIHRocm91Z2ggdGhlIHNldCBvZiB0cmFuc2l0aW9ucyBz
aW5jZSB0aGUgbGFzdAotICAgIC8vICAgc3RydWN0dXJlIHRoYXQgaGFkIGEgcGlubmVkIHRhYmxl
LiBUaGF0IGxvZ2ljIHdvdWxkIGFsc28gaGF2ZSB0byBiZSBjaGFuZ2VkIHRvIGhhbmRsZSBjYWNo
ZWQKLSAgICAvLyAgIHJlbW92YWxzLgotICAgIC8vCitTdHJ1Y3R1cmUqIFN0cnVjdHVyZTo6cmVt
b3ZlUHJvcGVydHlUcmFuc2l0aW9uKFZNJiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIFByb3Bl
cnR5TmFtZSBwcm9wZXJ0eU5hbWUsIFByb3BlcnR5T2Zmc2V0JiBvZmZzZXQsIERlZmVycmVkU3Ry
dWN0dXJlVHJhbnNpdGlvbldhdGNocG9pbnRGaXJlKiBkZWZlcnJlZCkKK3sKKyAgICBTdHJ1Y3R1
cmUqIG5ld1N0cnVjdHVyZSA9IHJlbW92ZVByb3BlcnR5VHJhbnNpdGlvbkZyb21FeGlzdGluZ1N0
cnVjdHVyZSgKKyAgICAgICAgdm0sIHN0cnVjdHVyZSwgcHJvcGVydHlOYW1lLCBvZmZzZXQsIGRl
ZmVycmVkKTsKKyAgICBpZiAobmV3U3RydWN0dXJlKQorICAgICAgICByZXR1cm4gbmV3U3RydWN0
dXJlOworCisgICAgcmV0dXJuIHJlbW92ZU5ld1Byb3BlcnR5VHJhbnNpdGlvbigKKyAgICAgICAg
dm0sIHN0cnVjdHVyZSwgcHJvcGVydHlOYW1lLCBvZmZzZXQsIGRlZmVycmVkKTsKK30KKworU3Ry
dWN0dXJlKiBTdHJ1Y3R1cmU6OnJlbW92ZVByb3BlcnR5VHJhbnNpdGlvbkZyb21FeGlzdGluZ1N0
cnVjdHVyZShWTSYgdm0sIFN0cnVjdHVyZSogc3RydWN0dXJlLCBQcm9wZXJ0eU5hbWUgcHJvcGVy
dHlOYW1lLCBQcm9wZXJ0eU9mZnNldCYgb2Zmc2V0LCBEZWZlcnJlZFN0cnVjdHVyZVRyYW5zaXRp
b25XYXRjaHBvaW50RmlyZSopCit7CisgICAgQVNTRVJUKCFpc0NvbXBpbGF0aW9uVGhyZWFkKCkp
OwogICAgIEFTU0VSVCghc3RydWN0dXJlLT5pc1VuY2FjaGVhYmxlRGljdGlvbmFyeSgpKTsKKyAg
ICBBU1NFUlQoc3RydWN0dXJlLT5pc09iamVjdCgpKTsKIAotICAgIFN0cnVjdHVyZSogdHJhbnNp
dGlvbiA9IHRvVW5jYWNoZWFibGVEaWN0aW9uYXJ5VHJhbnNpdGlvbih2bSwgc3RydWN0dXJlKTsK
KyAgICB1bnNpZ25lZCBhdHRyaWJ1dGVzOworICAgIHN0cnVjdHVyZS0+Z2V0KHZtLCBwcm9wZXJ0
eU5hbWUsIGF0dHJpYnV0ZXMpOwogCi0gICAgb2Zmc2V0ID0gdHJhbnNpdGlvbi0+cmVtb3ZlKHBy
b3BlcnR5TmFtZSk7CisgICAgaWYgKFN0cnVjdHVyZSogZXhpc3RpbmdUcmFuc2l0aW9uID0gc3Ry
dWN0dXJlLT5tX3RyYW5zaXRpb25UYWJsZS5nZXQocHJvcGVydHlOYW1lLnVpZCgpLCBhdHRyaWJ1
dGVzLCBmYWxzZSkpIHsKKyAgICAgICAgdmFsaWRhdGVPZmZzZXQoZXhpc3RpbmdUcmFuc2l0aW9u
LT50cmFuc2l0aW9uT2Zmc2V0KCksIGV4aXN0aW5nVHJhbnNpdGlvbi0+aW5saW5lQ2FwYWNpdHko
KSk7CisgICAgICAgIG9mZnNldCA9IGV4aXN0aW5nVHJhbnNpdGlvbi0+dHJhbnNpdGlvbk9mZnNl
dCgpOworICAgICAgICByZXR1cm4gZXhpc3RpbmdUcmFuc2l0aW9uOworICAgIH0KKworICAgIHJl
dHVybiBudWxscHRyOworfQogCitTdHJ1Y3R1cmUqIFN0cnVjdHVyZTo6cmVtb3ZlTmV3UHJvcGVy
dHlUcmFuc2l0aW9uKFZNJiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIFByb3BlcnR5TmFtZSBw
cm9wZXJ0eU5hbWUsIFByb3BlcnR5T2Zmc2V0JiBvZmZzZXQsIERlZmVycmVkU3RydWN0dXJlVHJh
bnNpdGlvbldhdGNocG9pbnRGaXJlKiBkZWZlcnJlZCkKK3sKKyAgICBBU1NFUlQoIXN0cnVjdHVy
ZS0+aXNVbmNhY2hlYWJsZURpY3Rpb25hcnkoKSk7CisgICAgQVNTRVJUKHN0cnVjdHVyZS0+aXNP
YmplY3QoKSk7CisgICAgQVNTRVJUKCFTdHJ1Y3R1cmU6OnJlbW92ZVByb3BlcnR5VHJhbnNpdGlv
bkZyb21FeGlzdGluZ1N0cnVjdHVyZSh2bSwgc3RydWN0dXJlLCBwcm9wZXJ0eU5hbWUsIG9mZnNl
dCwgZGVmZXJyZWQpKTsKKworICAgIGludCB0cmFuc2l0aW9uQ291bnQgPSAwOworICAgIGZvciAo
YXV0byogcyA9IHN0cnVjdHVyZTsgczsgcyA9IHMtPnByZXZpb3VzSUQoKSkKKyAgICAgICAgKyt0
cmFuc2l0aW9uQ291bnQ7CisKKyAgICBpZiAodHJhbnNpdGlvbkNvdW50ID4gc19tYXhUcmFuc2l0
aW9uTGVuZ3RoKSB7CisgICAgICAgIEFTU0VSVCghaXNDb3B5T25Xcml0ZShzdHJ1Y3R1cmUtPmlu
ZGV4aW5nTW9kZSgpKSk7CisgICAgICAgIFN0cnVjdHVyZSogdHJhbnNpdGlvbiA9IHRvVW5jYWNo
ZWFibGVEaWN0aW9uYXJ5VHJhbnNpdGlvbih2bSwgc3RydWN0dXJlLCBkZWZlcnJlZCk7CisgICAg
ICAgIEFTU0VSVChzdHJ1Y3R1cmUgIT0gdHJhbnNpdGlvbik7CisgICAgICAgIG9mZnNldCA9IHRy
YW5zaXRpb24tPnJlbW92ZSh2bSwgcHJvcGVydHlOYW1lKTsKKyAgICAgICAgcmV0dXJuIHRyYW5z
aXRpb247CisgICAgfQorCisgICAgU3RydWN0dXJlKiB0cmFuc2l0aW9uID0gY3JlYXRlKHZtLCBz
dHJ1Y3R1cmUsIGRlZmVycmVkKTsKKyAgICB0cmFuc2l0aW9uLT5tX2NhY2hlZFByb3RvdHlwZUNo
YWluLnNldE1heUJlTnVsbCh2bSwgdHJhbnNpdGlvbiwgc3RydWN0dXJlLT5tX2NhY2hlZFByb3Rv
dHlwZUNoYWluLmdldCgpKTsKKworICAgIC8vIFdoaWxlIHdlIGFyZSBkZWxldGluZyB0aGUgcHJv
cGVydHksIHdlIG5lZWQgdG8gbWFrZSBzdXJlIHRoZSB0YWJsZSBpcyBub3QgY2xlYXJlZC4KKyAg
ICB7CisgICAgICAgIENvbmN1cnJlbnRKU0xvY2tlciBsb2NrZXIodHJhbnNpdGlvbi0+bV9sb2Nr
KTsKKyAgICAgICAgdHJhbnNpdGlvbi0+c2V0SXNBZGRpbmdQcm9wZXJ0eUZvclRyYW5zaXRpb24o
dHJ1ZSk7CisgICAgfQorCisgICAgdHJhbnNpdGlvbi0+bV9ibG9iLnNldEluZGV4aW5nTW9kZUlu
Y2x1ZGluZ0hpc3Rvcnkoc3RydWN0dXJlLT5pbmRleGluZ01vZGVJbmNsdWRpbmdIaXN0b3J5KCkg
JiB+Q29weU9uV3JpdGUpOworICAgIHRyYW5zaXRpb24tPm1fdHJhbnNpdGlvblByb3BlcnR5TmFt
ZSA9IHByb3BlcnR5TmFtZS51aWQoKTsKKyAgICB0cmFuc2l0aW9uLT5zZXRQcm9wZXJ0eVRhYmxl
KHZtLCBzdHJ1Y3R1cmUtPnRha2VQcm9wZXJ0eVRhYmxlT3JDbG9uZUlmUGlubmVkKHZtKSk7Cisg
ICAgdHJhbnNpdGlvbi0+c2V0TWF4T2Zmc2V0KHZtLCBzdHJ1Y3R1cmUtPm1heE9mZnNldCgpKTsK
KyAgICB0cmFuc2l0aW9uLT5zZXRJc1Byb3BlcnR5RGVsZXRpb25UcmFuc2l0aW9uKHRydWUpOwor
CisgICAgb2Zmc2V0ID0gdHJhbnNpdGlvbi0+cmVtb3ZlKHZtLCBwcm9wZXJ0eU5hbWUpOworICAg
IEFTU0VSVChvZmZzZXQgIT0gaW52YWxpZE9mZnNldCk7CisgICAgdHJhbnNpdGlvbi0+c2V0VHJh
bnNpdGlvbk9mZnNldCh2bSwgb2Zmc2V0KTsKKworICAgIC8vIE5vdyB0aGF0IGV2ZXJ5dGhpbmcg
aXMgZmluZSB3aXRoIHRoZSBuZXcgc3RydWN0dXJlJ3MgYm9va2tlZXBpbmcsIHRoZSBHQyBpcyBm
cmVlIHRvIGJsb3cgdGhlCisgICAgLy8gdGFibGUgYXdheSBpZiBpdCB3YW50cy4gV2UgY2FuIG5v
dyByZWJ1aWxkIGl0IGZpbmUuCisgICAgV1RGOjpzdG9yZVN0b3JlRmVuY2UoKTsKKyAgICB0cmFu
c2l0aW9uLT5zZXRJc0FkZGluZ1Byb3BlcnR5Rm9yVHJhbnNpdGlvbihmYWxzZSk7CisKKyAgICBj
aGVja09mZnNldCh0cmFuc2l0aW9uLT50cmFuc2l0aW9uT2Zmc2V0KCksIHRyYW5zaXRpb24tPmlu
bGluZUNhcGFjaXR5KCkpOworICAgIHsKKyAgICAgICAgR0NTYWZlQ29uY3VycmVudEpTTG9ja2Vy
IGxvY2tlcihzdHJ1Y3R1cmUtPm1fbG9jaywgdm0uaGVhcCk7CisgICAgICAgIHN0cnVjdHVyZS0+
bV90cmFuc2l0aW9uVGFibGUuYWRkKHZtLCB0cmFuc2l0aW9uKTsKKyAgICB9CiAgICAgdHJhbnNp
dGlvbi0+Y2hlY2tPZmZzZXRDb25zaXN0ZW5jeSgpOworICAgIHN0cnVjdHVyZS0+Y2hlY2tPZmZz
ZXRDb25zaXN0ZW5jeSgpOwogICAgIHJldHVybiB0cmFuc2l0aW9uOwogfQogCkBAIC02MTQsOSAr
NjgxLDkgQEAgU3RydWN0dXJlKiBTdHJ1Y3R1cmU6OnRvQ2FjaGVhYmxlRGljdGlvbmFyeVRyYW5z
aXRpb24oVk0mIHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHUKICAgICByZXR1cm4gdG9EaWN0aW9uYXJ5
VHJhbnNpdGlvbih2bSwgc3RydWN0dXJlLCBDYWNoZWREaWN0aW9uYXJ5S2luZCwgZGVmZXJyZWQp
OwogfQogCi1TdHJ1Y3R1cmUqIFN0cnVjdHVyZTo6dG9VbmNhY2hlYWJsZURpY3Rpb25hcnlUcmFu
c2l0aW9uKFZNJiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUpCitTdHJ1Y3R1cmUqIFN0cnVjdHVy
ZTo6dG9VbmNhY2hlYWJsZURpY3Rpb25hcnlUcmFuc2l0aW9uKFZNJiB2bSwgU3RydWN0dXJlKiBz
dHJ1Y3R1cmUsIERlZmVycmVkU3RydWN0dXJlVHJhbnNpdGlvbldhdGNocG9pbnRGaXJlKiBkZWZl
cnJlZCkKIHsKLSAgICByZXR1cm4gdG9EaWN0aW9uYXJ5VHJhbnNpdGlvbih2bSwgc3RydWN0dXJl
LCBVbmNhY2hlZERpY3Rpb25hcnlLaW5kKTsKKyAgICByZXR1cm4gdG9EaWN0aW9uYXJ5VHJhbnNp
dGlvbih2bSwgc3RydWN0dXJlLCBVbmNhY2hlZERpY3Rpb25hcnlLaW5kLCBkZWZlcnJlZCk7CiB9
CiAKIFN0cnVjdHVyZSogU3RydWN0dXJlOjpzZWFsVHJhbnNpdGlvbihWTSYgdm0sIFN0cnVjdHVy
ZSogc3RydWN0dXJlKQpAQCAtOTc2LDkgKzEwNDMsMTEgQEAgUHJvcGVydHlPZmZzZXQgU3RydWN0
dXJlOjphZGQoVk0mIHZtLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCB1bnNpZ25lZCBhdHRy
aWIKICAgICAgICAgfSk7CiB9CiAKLVByb3BlcnR5T2Zmc2V0IFN0cnVjdHVyZTo6cmVtb3ZlKFBy
b3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUpCitQcm9wZXJ0eU9mZnNldCBTdHJ1Y3R1cmU6OnJlbW92
ZShWTSYgdm0sIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUpCiB7Ci0gICAgcmV0dXJuIHJlbW92
ZShwcm9wZXJ0eU5hbWUsIFtdIChjb25zdCBDb25jdXJyZW50SlNMb2NrZXImLCBQcm9wZXJ0eU9m
ZnNldCkgeyB9KTsKKyAgICByZXR1cm4gcmVtb3ZlPFNob3VsZFBpbjo6Tm8+KHZtLCBwcm9wZXJ0
eU5hbWUsIFt0aGlzLCAmdm1dIChjb25zdCBHQ1NhZmVDb25jdXJyZW50SlNMb2NrZXImLCBQcm9w
ZXJ0eU9mZnNldCwgUHJvcGVydHlPZmZzZXQgbmV3TWF4T2Zmc2V0KSB7CisgICAgICAgIHNldE1h
eE9mZnNldCh2bSwgbmV3TWF4T2Zmc2V0KTsKKyAgICB9KTsKIH0KIAogdm9pZCBTdHJ1Y3R1cmU6
OmdldFByb3BlcnR5TmFtZXNGcm9tU3RydWN0dXJlKFZNJiB2bSwgUHJvcGVydHlOYW1lQXJyYXkm
IHByb3BlcnR5TmFtZXMsIEVudW1lcmF0aW9uTW9kZSBtb2RlKQpkaWZmIC0tZ2l0IGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9TdHJ1Y3R1cmUuaAppbmRleCAzOGRjMWQzOWYxZTg2N2QwNGYxMTUzZmU0NDdm
ZTRjNzIwY2Q1NjNiLi41MzJiMDIzZDNhNzJiYTQ4MTYxZTgwOTQwOWQ2ODE3YjVlZjhkOTdiIDEw
MDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmUuaAorKysg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmUuaApAQCAtMTg3LDExICsx
ODcsMTMgQEAgcHVibGljOgogICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyBTdHJ1Y3R1cmUq
IGFkZE5ld1Byb3BlcnR5VHJhbnNpdGlvbihWTSYsIFN0cnVjdHVyZSosIFByb3BlcnR5TmFtZSwg
dW5zaWduZWQgYXR0cmlidXRlcywgUHJvcGVydHlPZmZzZXQmLCBQdXRQcm9wZXJ0eVNsb3Q6OkNv
bnRleHQgPSBQdXRQcm9wZXJ0eVNsb3Q6OlVua25vd25Db250ZXh0LCBEZWZlcnJlZFN0cnVjdHVy
ZVRyYW5zaXRpb25XYXRjaHBvaW50RmlyZSogPSBudWxscHRyKTsKICAgICBzdGF0aWMgU3RydWN0
dXJlKiBhZGRQcm9wZXJ0eVRyYW5zaXRpb25Ub0V4aXN0aW5nU3RydWN0dXJlQ29uY3VycmVudGx5
KFN0cnVjdHVyZSosIFVuaXF1ZWRTdHJpbmdJbXBsKiB1aWQsIHVuc2lnbmVkIGF0dHJpYnV0ZXMs
IFByb3BlcnR5T2Zmc2V0Jik7CiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIFN0cnVjdHVy
ZSogYWRkUHJvcGVydHlUcmFuc2l0aW9uVG9FeGlzdGluZ1N0cnVjdHVyZShTdHJ1Y3R1cmUqLCBQ
cm9wZXJ0eU5hbWUsIHVuc2lnbmVkIGF0dHJpYnV0ZXMsIFByb3BlcnR5T2Zmc2V0Jik7Ci0gICAg
c3RhdGljIFN0cnVjdHVyZSogcmVtb3ZlUHJvcGVydHlUcmFuc2l0aW9uKFZNJiwgU3RydWN0dXJl
KiwgUHJvcGVydHlOYW1lLCBQcm9wZXJ0eU9mZnNldCYpOworICAgIHN0YXRpYyBTdHJ1Y3R1cmUq
IHJlbW92ZU5ld1Byb3BlcnR5VHJhbnNpdGlvbihWTSYsIFN0cnVjdHVyZSosIFByb3BlcnR5TmFt
ZSwgUHJvcGVydHlPZmZzZXQmLCBEZWZlcnJlZFN0cnVjdHVyZVRyYW5zaXRpb25XYXRjaHBvaW50
RmlyZSogPSBudWxscHRyKTsKKyAgICBzdGF0aWMgU3RydWN0dXJlKiByZW1vdmVQcm9wZXJ0eVRy
YW5zaXRpb24oVk0mLCBTdHJ1Y3R1cmUqLCBQcm9wZXJ0eU5hbWUsIFByb3BlcnR5T2Zmc2V0Jiwg
RGVmZXJyZWRTdHJ1Y3R1cmVUcmFuc2l0aW9uV2F0Y2hwb2ludEZpcmUqID0gbnVsbHB0cik7Cisg
ICAgc3RhdGljIFN0cnVjdHVyZSogcmVtb3ZlUHJvcGVydHlUcmFuc2l0aW9uRnJvbUV4aXN0aW5n
U3RydWN0dXJlKFZNJiwgU3RydWN0dXJlKiwgUHJvcGVydHlOYW1lLCBQcm9wZXJ0eU9mZnNldCYs
IERlZmVycmVkU3RydWN0dXJlVHJhbnNpdGlvbldhdGNocG9pbnRGaXJlKiA9IG51bGxwdHIpOwog
ICAgIHN0YXRpYyBTdHJ1Y3R1cmUqIGNoYW5nZVByb3RvdHlwZVRyYW5zaXRpb24oVk0mLCBTdHJ1
Y3R1cmUqLCBKU1ZhbHVlIHByb3RvdHlwZSwgRGVmZXJyZWRTdHJ1Y3R1cmVUcmFuc2l0aW9uV2F0
Y2hwb2ludEZpcmUmKTsKICAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMgU3RydWN0dXJlKiBh
dHRyaWJ1dGVDaGFuZ2VUcmFuc2l0aW9uKFZNJiwgU3RydWN0dXJlKiwgUHJvcGVydHlOYW1lLCB1
bnNpZ25lZCBhdHRyaWJ1dGVzKTsKICAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMgU3RydWN0
dXJlKiB0b0NhY2hlYWJsZURpY3Rpb25hcnlUcmFuc2l0aW9uKFZNJiwgU3RydWN0dXJlKiwgRGVm
ZXJyZWRTdHJ1Y3R1cmVUcmFuc2l0aW9uV2F0Y2hwb2ludEZpcmUqID0gbnVsbHB0cik7Ci0gICAg
c3RhdGljIFN0cnVjdHVyZSogdG9VbmNhY2hlYWJsZURpY3Rpb25hcnlUcmFuc2l0aW9uKFZNJiwg
U3RydWN0dXJlKik7CisgICAgc3RhdGljIFN0cnVjdHVyZSogdG9VbmNhY2hlYWJsZURpY3Rpb25h
cnlUcmFuc2l0aW9uKFZNJiwgU3RydWN0dXJlKiwgRGVmZXJyZWRTdHJ1Y3R1cmVUcmFuc2l0aW9u
V2F0Y2hwb2ludEZpcmUqID0gbnVsbHB0cik7CiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGlj
IFN0cnVjdHVyZSogc2VhbFRyYW5zaXRpb24oVk0mLCBTdHJ1Y3R1cmUqKTsKICAgICBKU19FWFBP
UlRfUFJJVkFURSBzdGF0aWMgU3RydWN0dXJlKiBmcmVlemVUcmFuc2l0aW9uKFZNJiwgU3RydWN0
dXJlKik7CiAgICAgc3RhdGljIFN0cnVjdHVyZSogcHJldmVudEV4dGVuc2lvbnNUcmFuc2l0aW9u
KFZNJiwgU3RydWN0dXJlKik7CkBAIC00NDAsMTAgKzQ0Miw2IEBAIHB1YmxpYzoKICAgICB7CiAg
ICAgICAgIHJldHVybiBzdGQ6Om1pbjx1bnNpZ25lZD4obWF4T2Zmc2V0KCkgKyAxLCBtX2lubGlu
ZUNhcGFjaXR5KTsKICAgICB9Ci0gICAgdW5zaWduZWQgdG90YWxTdG9yYWdlU2l6ZSgpIGNvbnN0
Ci0gICAgewotICAgICAgICByZXR1cm4gbnVtYmVyT2ZTbG90c0Zvck1heE9mZnNldChtYXhPZmZz
ZXQoKSwgbV9pbmxpbmVDYXBhY2l0eSk7Ci0gICAgfQogICAgIHVuc2lnbmVkIHRvdGFsU3RvcmFn
ZUNhcGFjaXR5KCkgY29uc3QKICAgICB7CiAgICAgICAgIEFTU0VSVChzdHJ1Y3R1cmUoKS0+Y2xh
c3NJbmZvKCkgPT0gaW5mbygpKTsKQEAgLTY5Myw2ICs2OTEsNyBAQCBwdWJsaWM6CiAgICAgREVG
SU5FX0JJVEZJRUxEKGJvb2wsIGhhc0JlZW5EaWN0aW9uYXJ5LCBIYXNCZWVuRGljdGlvbmFyeSwg
MSwgMjcpOwogICAgIERFRklORV9CSVRGSUVMRChib29sLCBpc0FkZGluZ1Byb3BlcnR5Rm9yVHJh
bnNpdGlvbiwgSXNBZGRpbmdQcm9wZXJ0eUZvclRyYW5zaXRpb24sIDEsIDI4KTsKICAgICBERUZJ
TkVfQklURklFTEQoYm9vbCwgaGFzVW5kZXJzY29yZVByb3RvUHJvcGVydHlFeGNsdWRpbmdPcmln
aW5hbFByb3RvLCBIYXNVbmRlcnNjb3JlUHJvdG9Qcm9wZXJ0eUV4Y2x1ZGluZ09yaWdpbmFsUHJv
dG8sIDEsIDI5KTsKKyAgICBERUZJTkVfQklURklFTEQoYm9vbCwgaXNQcm9wZXJ0eURlbGV0aW9u
VHJhbnNpdGlvbiwgSXNQcm9wZXJ0eURlbGV0aW9uVHJhbnNpdGlvbiwgMSwgMzApOwogCiBwcml2
YXRlOgogICAgIGZyaWVuZCBjbGFzcyBMTEludE9mZnNldHNFeHRyYWN0b3I7CkBAIC03MTcsOSAr
NzE2LDkgQEAgcHJpdmF0ZToKICAgICB0ZW1wbGF0ZTxTaG91bGRQaW4sIHR5cGVuYW1lIEZ1bmM+
CiAgICAgUHJvcGVydHlPZmZzZXQgYWRkKFZNJiwgUHJvcGVydHlOYW1lLCB1bnNpZ25lZCBhdHRy
aWJ1dGVzLCBjb25zdCBGdW5jJik7CiAgICAgUHJvcGVydHlPZmZzZXQgYWRkKFZNJiwgUHJvcGVy
dHlOYW1lLCB1bnNpZ25lZCBhdHRyaWJ1dGVzKTsKLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5j
PgotICAgIFByb3BlcnR5T2Zmc2V0IHJlbW92ZShQcm9wZXJ0eU5hbWUsIGNvbnN0IEZ1bmMmKTsK
LSAgICBQcm9wZXJ0eU9mZnNldCByZW1vdmUoUHJvcGVydHlOYW1lKTsKKyAgICB0ZW1wbGF0ZTxT
aG91bGRQaW4sIHR5cGVuYW1lIEZ1bmM+CisgICAgUHJvcGVydHlPZmZzZXQgcmVtb3ZlKFZNJiwg
UHJvcGVydHlOYW1lLCBjb25zdCBGdW5jJik7CisgICAgUHJvcGVydHlPZmZzZXQgcmVtb3ZlKFZN
JiwgUHJvcGVydHlOYW1lKTsKIAogICAgIHZvaWQgY2hlY2tDb25zaXN0ZW5jeSgpOwogCkBAIC04
MzQsNiArODMzLDcgQEAgcHJpdmF0ZToKICAgICBUaW55Qmxvb21GaWx0ZXIgbV9zZWVuUHJvcGVy
dGllczsKIAogICAgIGZyaWVuZCBjbGFzcyBWTUluc3BlY3RvcjsKKyAgICBmcmllbmQgY2xhc3Mg
SlNEb2xsYXJWTUhlbHBlcjsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpkaWZmIC0tZ2l0IGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlSW5saW5lcy5oIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlSW5saW5lcy5oCmluZGV4IDFhNGYyMDI0
NmEyNzc5YzI5ZmI5NmNlMDA1MDBiNTRiYjQ2ZWI1NzEuLmNlOTViYmUyYjBjZTA4YTBkNzUxMjBh
MGYxYWRiMDQxOTZiMDFmYTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL1N0cnVjdHVyZUlubGluZXMuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9TdHJ1Y3R1cmVJbmxpbmVzLmgKQEAgLTE2Nyw5ICsxNjcsMjcgQEAgdm9pZCBTdHJ1Y3R1cmU6
OmZvckVhY2hQcm9wZXJ0eUNvbmN1cnJlbnRseShjb25zdCBGdW5jdG9yJiBmdW5jdG9yKQogICAg
IFByb3BlcnR5VGFibGUqIHRhYmxlOwogICAgIAogICAgIGZpbmRTdHJ1Y3R1cmVzQW5kTWFwRm9y
TWF0ZXJpYWxpemF0aW9uKHN0cnVjdHVyZXMsIHN0cnVjdHVyZSwgdGFibGUpOworCisgICAgSGFz
aFNldDxVbmlxdWVkU3RyaW5nSW1wbCo+IGRlbGV0ZWRQcm9wZXJ0aWVzOworCisgICAgZm9yICh1
bnNpZ25lZCBpID0gc3RydWN0dXJlcy5zaXplKCk7IGktLTspIHsKKyAgICAgICAgYXV0byogc3Ry
dWN0dXJlID0gc3RydWN0dXJlc1tpXTsKKyAgICAgICAgaWYgKCFzdHJ1Y3R1cmUtPm1fdHJhbnNp
dGlvblByb3BlcnR5TmFtZSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgIGlmIChz
dHJ1Y3R1cmUtPmlzUHJvcGVydHlEZWxldGlvblRyYW5zaXRpb24oKSkgeworICAgICAgICAgICAg
ZGVsZXRlZFByb3BlcnRpZXMuYWRkKHN0cnVjdHVyZS0+bV90cmFuc2l0aW9uUHJvcGVydHlOYW1l
LmdldCgpKTsKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CisKKyAgICAgICAgZGVs
ZXRlZFByb3BlcnRpZXMucmVtb3ZlKHN0cnVjdHVyZS0+bV90cmFuc2l0aW9uUHJvcGVydHlOYW1l
LmdldCgpKTsKKyAgICB9CiAgICAgCiAgICAgaWYgKHRhYmxlKSB7CiAgICAgICAgIGZvciAoYXV0
byYgZW50cnkgOiAqdGFibGUpIHsKKyAgICAgICAgICAgIGlmIChkZWxldGVkUHJvcGVydGllcy5j
b250YWlucyhlbnRyeS5rZXkpKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworCiAgICAgICAg
ICAgICBpZiAoIWZ1bmN0b3IoZW50cnkpKSB7CiAgICAgICAgICAgICAgICAgc3RydWN0dXJlLT5t
X2xvY2sudW5sb2NrKCk7CiAgICAgICAgICAgICAgICAgcmV0dXJuOwpAQCAtMTc3LDEyICsxOTUs
MTIgQEAgdm9pZCBTdHJ1Y3R1cmU6OmZvckVhY2hQcm9wZXJ0eUNvbmN1cnJlbnRseShjb25zdCBG
dW5jdG9yJiBmdW5jdG9yKQogICAgICAgICB9CiAgICAgICAgIHN0cnVjdHVyZS0+bV9sb2NrLnVu
bG9jaygpOwogICAgIH0KLSAgICAKKwogICAgIGZvciAodW5zaWduZWQgaSA9IHN0cnVjdHVyZXMu
c2l6ZSgpOyBpLS07KSB7Ci0gICAgICAgIHN0cnVjdHVyZSA9IHN0cnVjdHVyZXNbaV07Ci0gICAg
ICAgIGlmICghc3RydWN0dXJlLT5tX3RyYW5zaXRpb25Qcm9wZXJ0eU5hbWUpCisgICAgICAgIGF1
dG8qIHN0cnVjdHVyZSA9IHN0cnVjdHVyZXNbaV07CisgICAgICAgIGlmICghc3RydWN0dXJlLT5t
X3RyYW5zaXRpb25Qcm9wZXJ0eU5hbWUgfHwgZGVsZXRlZFByb3BlcnRpZXMuY29udGFpbnMoc3Ry
dWN0dXJlLT5tX3RyYW5zaXRpb25Qcm9wZXJ0eU5hbWUuZ2V0KCkpKQogICAgICAgICAgICAgY29u
dGludWU7Ci0gICAgICAgIAorCiAgICAgICAgIGlmICghZnVuY3RvcihQcm9wZXJ0eU1hcEVudHJ5
KHN0cnVjdHVyZS0+bV90cmFuc2l0aW9uUHJvcGVydHlOYW1lLmdldCgpLCBzdHJ1Y3R1cmUtPnRy
YW5zaXRpb25PZmZzZXQoKSwgc3RydWN0dXJlLT50cmFuc2l0aW9uUHJvcGVydHlBdHRyaWJ1dGVz
KCkpKSkKICAgICAgICAgICAgIHJldHVybjsKICAgICB9CkBAIC00NTYsNiArNDc0LDcgQEAgaW5s
aW5lIFByb3BlcnR5T2Zmc2V0IFN0cnVjdHVyZTo6YWRkKFZNJiB2bSwgUHJvcGVydHlOYW1lIHBy
b3BlcnR5TmFtZSwgdW5zaWduZWQKICAgICAKICAgICBQcm9wZXJ0eU9mZnNldCBuZXdNYXhPZmZz
ZXQgPSBtYXhPZmZzZXQoKTsKICAgICB0YWJsZS0+YWRkKFByb3BlcnR5TWFwRW50cnkocmVwLCBu
ZXdPZmZzZXQsIGF0dHJpYnV0ZXMpLCBuZXdNYXhPZmZzZXQsIFByb3BlcnR5VGFibGU6OlByb3Bl
cnR5T2Zmc2V0TWF5Q2hhbmdlKTsKKyAgICBuZXdNYXhPZmZzZXQgPSBzdGQ6Om1heChuZXdNYXhP
ZmZzZXQsIG1heE9mZnNldCgpKTsKICAgICAKICAgICBmdW5jKGxvY2tlciwgbmV3T2Zmc2V0LCBu
ZXdNYXhPZmZzZXQpOwogICAgIApAQCAtNDY1LDIxICs0ODQsMjYgQEAgaW5saW5lIFByb3BlcnR5
T2Zmc2V0IFN0cnVjdHVyZTo6YWRkKFZNJiB2bSwgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwg
dW5zaWduZWQKICAgICByZXR1cm4gbmV3T2Zmc2V0OwogfQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBG
dW5jPgotaW5saW5lIFByb3BlcnR5T2Zmc2V0IFN0cnVjdHVyZTo6cmVtb3ZlKFByb3BlcnR5TmFt
ZSBwcm9wZXJ0eU5hbWUsIGNvbnN0IEZ1bmMmIGZ1bmMpCit0ZW1wbGF0ZTxTdHJ1Y3R1cmU6OlNo
b3VsZFBpbiBzaG91bGRQaW4sIHR5cGVuYW1lIEZ1bmM+CitpbmxpbmUgUHJvcGVydHlPZmZzZXQg
U3RydWN0dXJlOjpyZW1vdmUoVk0mIHZtLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBjb25z
dCBGdW5jJiBmdW5jKQogewotICAgIENvbmN1cnJlbnRKU0xvY2tlciBsb2NrZXIobV9sb2NrKTsK
LSAgICAKKyAgICBQcm9wZXJ0eVRhYmxlKiB0YWJsZSA9IGVuc3VyZVByb3BlcnR5VGFibGUodm0p
OworICAgIEdDU2FmZUNvbmN1cnJlbnRKU0xvY2tlciBsb2NrZXIobV9sb2NrLCB2bS5oZWFwKTsK
KworICAgIHN3aXRjaCAoc2hvdWxkUGluKSB7CisgICAgY2FzZSBTaG91bGRQaW46OlllczoKKyAg
ICAgICAgcGluKGxvY2tlciwgdm0sIHRhYmxlKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBT
aG91bGRQaW46Ok5vOgorICAgICAgICBzZXRQcm9wZXJ0eVRhYmxlKHZtLCB0YWJsZSk7CisgICAg
ICAgIGJyZWFrOworICAgIH0KKworICAgIEFTU0VSVChKU0M6OmlzVmFsaWRPZmZzZXQoZ2V0KHZt
LCBwcm9wZXJ0eU5hbWUpKSk7CisKICAgICBjaGVja0NvbnNpc3RlbmN5KCk7CiAKICAgICBhdXRv
IHJlcCA9IHByb3BlcnR5TmFtZS51aWQoKTsKLSAgICAKLSAgICAvLyBXZSBPTkxZIHJlbW92ZSBm
cm9tIHVuY2FjaGVhYmxlIGRpY3Rpb25hcmllcywgd2hpY2ggd2lsbCBoYXZlIGEgcGlubmVkIHBy
b3BlcnR5IHRhYmxlLgotICAgIC8vIFRoZSBvbmx5IHdheSBmb3IgdGhlbSBub3QgdG8gaGF2ZSBh
IHRhYmxlIGlzIGlmIHRoZXkgYXJlIGVtcHR5LgotICAgIFByb3BlcnR5VGFibGUqIHRhYmxlID0g
cHJvcGVydHlUYWJsZU9yTnVsbCgpOwotCi0gICAgaWYgKCF0YWJsZSkKLSAgICAgICAgcmV0dXJu
IGludmFsaWRPZmZzZXQ7CiAKICAgICBQcm9wZXJ0eVRhYmxlOjpmaW5kX2l0ZXJhdG9yIHBvc2l0
aW9uID0gdGFibGUtPmZpbmQocmVwKTsKICAgICBpZiAoIXBvc2l0aW9uLmZpcnN0KQpAQCAtNDkw
LDkgKzUxNCwxNCBAQCBpbmxpbmUgUHJvcGVydHlPZmZzZXQgU3RydWN0dXJlOjpyZW1vdmUoUHJv
cGVydHlOYW1lIHByb3BlcnR5TmFtZSwgY29uc3QgRnVuYyYgZgogICAgIHRhYmxlLT5yZW1vdmUo
cG9zaXRpb24pOwogICAgIHRhYmxlLT5hZGREZWxldGVkT2Zmc2V0KG9mZnNldCk7CiAKLSAgICBj
aGVja0NvbnNpc3RlbmN5KCk7CisgICAgUHJvcGVydHlPZmZzZXQgbmV3TWF4T2Zmc2V0ID0gbWF4
T2Zmc2V0KCk7CiAKLSAgICBmdW5jKGxvY2tlciwgb2Zmc2V0KTsKKyAgICBmdW5jKGxvY2tlciwg
b2Zmc2V0LCBuZXdNYXhPZmZzZXQpOworCisgICAgQVNTRVJUKG1heE9mZnNldCgpID09IG5ld01h
eE9mZnNldCk7CisgICAgQVNTRVJUKCFKU0M6OmlzVmFsaWRPZmZzZXQoZ2V0KHZtLCBwcm9wZXJ0
eU5hbWUpKSk7CisKKyAgICBjaGVja0NvbnNpc3RlbmN5KCk7CiAgICAgcmV0dXJuIG9mZnNldDsK
IH0KIApAQCAtNTAzLDEzICs1MzIsMTMgQEAgaW5saW5lIFByb3BlcnR5T2Zmc2V0IFN0cnVjdHVy
ZTo6YWRkUHJvcGVydHlXaXRob3V0VHJhbnNpdGlvbihWTSYgdm0sIFByb3BlcnR5TmEKIH0KIAog
dGVtcGxhdGU8dHlwZW5hbWUgRnVuYz4KLWlubGluZSBQcm9wZXJ0eU9mZnNldCBTdHJ1Y3R1cmU6
OnJlbW92ZVByb3BlcnR5V2l0aG91dFRyYW5zaXRpb24oVk0mLCBQcm9wZXJ0eU5hbWUgcHJvcGVy
dHlOYW1lLCBjb25zdCBGdW5jJiBmdW5jKQoraW5saW5lIFByb3BlcnR5T2Zmc2V0IFN0cnVjdHVy
ZTo6cmVtb3ZlUHJvcGVydHlXaXRob3V0VHJhbnNpdGlvbihWTSYgdm0sIFByb3BlcnR5TmFtZSBw
cm9wZXJ0eU5hbWUsIGNvbnN0IEZ1bmMmIGZ1bmMpCiB7CiAgICAgQVNTRVJUKGlzVW5jYWNoZWFi
bGVEaWN0aW9uYXJ5KCkpOwogICAgIEFTU0VSVChpc1Bpbm5lZFByb3BlcnR5VGFibGUoKSk7CiAg
ICAgQVNTRVJUKHByb3BlcnR5VGFibGVPck51bGwoKSk7CiAgICAgCi0gICAgcmV0dXJuIHJlbW92
ZShwcm9wZXJ0eU5hbWUsIGZ1bmMpOworICAgIHJldHVybiByZW1vdmU8U2hvdWxkUGluOjpZZXM+
KHZtLCBwcm9wZXJ0eU5hbWUsIGZ1bmMpOwogfQogCiBBTFdBWVNfSU5MSU5FIHZvaWQgU3RydWN0
dXJlOjpzZXRQcm90b3R5cGVXaXRob3V0VHJhbnNpdGlvbihWTSYgdm0sIEpTVmFsdWUgcHJvdG90
eXBlKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJl
VHJhbnNpdGlvblRhYmxlLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1
cmVUcmFuc2l0aW9uVGFibGUuaAppbmRleCBiN2RmMGVmYjM5OGQwNWZiZjgxN2M3YjM4ZTViYTQ5
MGRlMTkwYWJlLi41Yjg1YzdmN2YyMDI2ZTQ1ODE1Y2EzZjUwY2NlNTFjMWI1MmE2YjJiIDEwMDY0
NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmVUcmFuc2l0aW9u
VGFibGUuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmVUcmFu
c2l0aW9uVGFibGUuaApAQCAtMTQ0LDExICsxNDQsMTEgQEAgY2xhc3MgU3RydWN0dXJlVHJhbnNp
dGlvblRhYmxlIHsKIAogICAgIAogICAgIHN0cnVjdCBIYXNoIHsKLSAgICAgICAgdHlwZWRlZiBz
dGQ6OnBhaXI8VW5pcXVlZFN0cmluZ0ltcGwqLCB1bnNpZ25lZD4gS2V5OworICAgICAgICB0eXBl
ZGVmIHN0ZDo6dHVwbGU8VW5pcXVlZFN0cmluZ0ltcGwqLCB1bnNpZ25lZCwgYm9vbD4gS2V5Owog
ICAgICAgICAKICAgICAgICAgc3RhdGljIHVuc2lnbmVkIGhhc2goY29uc3QgS2V5JiBwKQogICAg
ICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gUHRySGFzaDxVbmlxdWVkU3RyaW5nSW1wbCo+Ojpo
YXNoKHAuZmlyc3QpICsgcC5zZWNvbmQ7CisgICAgICAgICAgICByZXR1cm4gUHRySGFzaDxVbmlx
dWVkU3RyaW5nSW1wbCo+OjpoYXNoKHN0ZDo6Z2V0PDA+KHApKSArIHN0ZDo6Z2V0PDE+KHApOwog
ICAgICAgICB9CiAKICAgICAgICAgc3RhdGljIGJvb2wgZXF1YWwoY29uc3QgS2V5JiBhLCBjb25z
dCBLZXkmIGIpCkBAIC0xODEsOCArMTgxLDggQEAgcHVibGljOgogICAgIH0KIAogICAgIHZvaWQg
YWRkKFZNJiwgU3RydWN0dXJlKik7Ci0gICAgYm9vbCBjb250YWlucyhVbmlxdWVkU3RyaW5nSW1w
bCosIHVuc2lnbmVkIGF0dHJpYnV0ZXMpIGNvbnN0OwotICAgIFN0cnVjdHVyZSogZ2V0KFVuaXF1
ZWRTdHJpbmdJbXBsKiwgdW5zaWduZWQgYXR0cmlidXRlcykgY29uc3Q7CisgICAgYm9vbCBjb250
YWlucyhVbmlxdWVkU3RyaW5nSW1wbCosIHVuc2lnbmVkIGF0dHJpYnV0ZXMsIGJvb2wgaXNBZGRp
dGlvbiA9IHRydWUpIGNvbnN0OworICAgIFN0cnVjdHVyZSogZ2V0KFVuaXF1ZWRTdHJpbmdJbXBs
KiwgdW5zaWduZWQgYXR0cmlidXRlcywgYm9vbCBpc0FkZGl0aW9uID0gdHJ1ZSkgY29uc3Q7CiAK
IHByaXZhdGU6CiAgICAgZnJpZW5kIGNsYXNzIFNpbmdsZVNsb3RUcmFuc2l0aW9uV2Vha093bmVy
OwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3Rvb2xzL0pTRG9sbGFyVk0uY3Bw
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3Rvb2xzL0pTRG9sbGFyVk0uY3BwCmluZGV4IGZlYzMw
NzU2Y2I2NDc1NzNhNjM2NWEzNTJhY2NhYWNmMDQ4Y2I0YWQuLjg2MDgzZTRkNDMwOWNlOTdmY2Y1
YjQ2Njc3M2Y2NDQwMjZiZjQ2NDggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS90
b29scy9KU0RvbGxhclZNLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvdG9vbHMvSlNE
b2xsYXJWTS5jcHAKQEAgLTgxLDYgKzgxLDggQEAgcHVibGljOgogCiAgICAgdm9pZCB1cGRhdGVW
TVN0YWNrTGltaXRzKCkgeyByZXR1cm4gbV92bS51cGRhdGVTdGFja0xpbWl0cygpOyB9OwogCisg
ICAgc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVuY3Rpb25HZXRTdHJ1Y3R1
cmVUcmFuc2l0aW9uTGlzdChKU0dsb2JhbE9iamVjdCosIENhbGxGcmFtZSopOworCiBwcml2YXRl
OgogICAgIFZNJiBtX3ZtOwogfTsKQEAgLTI3MjAsNiArMjcyMiw2MCBAQCBzdGF0aWMgRW5jb2Rl
ZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5jdGlvbk1ha2UxNkJpdFN0cmluZ0lmUG9zc2libGUo
SlNHbG9iYWxPYgogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNTdHJpbmcodm0sIFN0cmlu
Zzo6YWRvcHQoV1RGTW92ZShidWZmZXIpKSkpOwogfQogCitFbmNvZGVkSlNWYWx1ZSBKU0NfSE9T
VF9DQUxMIEpTRG9sbGFyVk1IZWxwZXI6OmZ1bmN0aW9uR2V0U3RydWN0dXJlVHJhbnNpdGlvbkxp
c3QoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgQ2FsbEZyYW1lKiBjYWxsRnJhbWUpCit7
CisgICAgRG9sbGFyVk1Bc3NlcnRTY29wZSBhc3NlcnRTY29wZTsKKyAgICBWTSYgdm0gPSBnbG9i
YWxPYmplY3QtPnZtKCk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0p
OworICAgIEpTT2JqZWN0KiBvYmogPSBjYWxsRnJhbWUtPmFyZ3VtZW50KDApLnRvT2JqZWN0KGds
b2JhbE9iamVjdCk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsKKyAgICBp
ZiAoIW9iaikKKyAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc051bGwoKSk7CisgICAg
VmVjdG9yPFN0cnVjdHVyZSosIDg+IHN0cnVjdHVyZXM7CisKKyAgICBmb3IgKGF1dG8qIHN0cnVj
dHVyZSA9IG9iai0+c3RydWN0dXJlKCk7IHN0cnVjdHVyZTsgc3RydWN0dXJlID0gc3RydWN0dXJl
LT5wcmV2aW91c0lEKCkpCisgICAgICAgIHN0cnVjdHVyZXMuYXBwZW5kKHN0cnVjdHVyZSk7CisK
KyAgICBKU0FycmF5KiByZXN1bHQgPSBKU0FycmF5Ojp0cnlDcmVhdGUodm0sIGdsb2JhbE9iamVj
dC0+YXJyYXlTdHJ1Y3R1cmVGb3JJbmRleGluZ1R5cGVEdXJpbmdBbGxvY2F0aW9uKEFycmF5V2l0
aENvbnRpZ3VvdXMpLCAwKTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOwor
CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBzdHJ1Y3R1cmVzLnNpemUoKTsgKytpKSB7Cisg
ICAgICAgIGF1dG8qIHN0cnVjdHVyZSA9IHN0cnVjdHVyZXNbc3RydWN0dXJlcy5zaXplKCkgLSBp
IC0gMV07CisgICAgICAgIHJlc3VsdC0+cHVzaChnbG9iYWxPYmplY3QsIEpTVmFsdWUoc3RydWN0
dXJlLT5pZCgpKSk7CisgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHsgfSk7Cisg
ICAgICAgIHJlc3VsdC0+cHVzaChnbG9iYWxPYmplY3QsIEpTVmFsdWUoc3RydWN0dXJlLT50cmFu
c2l0aW9uT2Zmc2V0KCkpKTsKKyAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9
KTsKKyAgICAgICAgcmVzdWx0LT5wdXNoKGdsb2JhbE9iamVjdCwgSlNWYWx1ZShzdHJ1Y3R1cmUt
Pm1heE9mZnNldCgpKSk7CisgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHsgfSk7
CisgICAgICAgIGlmIChzdHJ1Y3R1cmUtPm1fdHJhbnNpdGlvblByb3BlcnR5TmFtZSkKKyAgICAg
ICAgICAgIHJlc3VsdC0+cHVzaChnbG9iYWxPYmplY3QsIGpzU3RyaW5nKHZtLCBTdHJpbmcoKnN0
cnVjdHVyZS0+bV90cmFuc2l0aW9uUHJvcGVydHlOYW1lKSkpOworICAgICAgICBlbHNlCisgICAg
ICAgICAgICByZXN1bHQtPnB1c2goZ2xvYmFsT2JqZWN0LCBqc051bGwoKSk7CisgICAgICAgIFJF
VFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHsgfSk7CisgICAgICAgIHJlc3VsdC0+cHVzaChnbG9i
YWxPYmplY3QsIEpTVmFsdWUoc3RydWN0dXJlLT5pc1Byb3BlcnR5RGVsZXRpb25UcmFuc2l0aW9u
KCkpKTsKKyAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsKKyAgICB9CisK
KyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHJlc3VsdCk7Cit9CisKK3N0YXRpYyBFbmNvZGVk
SlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0aW9uR2V0Q29uY3VycmVudGx5KEpTR2xvYmFsT2Jq
ZWN0KiBnbG9iYWxPYmplY3QsIENhbGxGcmFtZSogY2FsbEZyYW1lKQoreworICAgIERvbGxhclZN
QXNzZXJ0U2NvcGUgYXNzZXJ0U2NvcGU7CisgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgp
OworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKyAgICBKU09iamVj
dCogb2JqID0gY2FsbEZyYW1lLT5hcmd1bWVudCgwKS50b09iamVjdChnbG9iYWxPYmplY3QpOwor
ICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHsgfSk7CisgICAgaWYgKCFvYmopCisgICAg
ICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNOdWxsKCkpOworICAgIFN0cmluZyBwcm9wZXJ0
eSA9IGNhbGxGcmFtZS0+YXJndW1lbnQoMSkudG9XVEZTdHJpbmcoZ2xvYmFsT2JqZWN0KTsKKyAg
ICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOworICAgIGF1dG8gbmFtZSA9IFByb3Bl
cnR5TmFtZShJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCBwcm9wZXJ0eSkpOworICAgIEpTVmFs
dWUgcmVzdWx0ID0gSlNWYWx1ZShvYmotPnN0cnVjdHVyZSgpLT5nZXRDb25jdXJyZW50bHkobmFt
ZS51aWQoKSkgIT0gaW52YWxpZE9mZnNldCk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29w
ZSwgeyB9KTsKKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHJlc3VsdCk7Cit9CisKIHZvaWQg
SlNEb2xsYXJWTTo6ZmluaXNoQ3JlYXRpb24oVk0mIHZtKQogewogICAgIERvbGxhclZNQXNzZXJ0
U2NvcGUgYXNzZXJ0U2NvcGU7CkBAIC0yODQ2LDYgKzI5MDIsOSBAQCB2b2lkIEpTRG9sbGFyVk06
OmZpbmlzaENyZWF0aW9uKFZNJiB2bSkKIAogICAgIGFkZEZ1bmN0aW9uKHZtLCAiaXNXYXNtU3Vw
cG9ydGVkIiwgZnVuY3Rpb25Jc1dhc21TdXBwb3J0ZWQsIDApOwogICAgIGFkZEZ1bmN0aW9uKHZt
LCAibWFrZTE2Qml0U3RyaW5nSWZQb3NzaWJsZSIsIGZ1bmN0aW9uTWFrZTE2Qml0U3RyaW5nSWZQ
b3NzaWJsZSwgMSk7CisKKyAgICBhZGRGdW5jdGlvbih2bSwgImdldFN0cnVjdHVyZVRyYW5zaXRp
b25MaXN0IiwgSlNEb2xsYXJWTUhlbHBlcjo6ZnVuY3Rpb25HZXRTdHJ1Y3R1cmVUcmFuc2l0aW9u
TGlzdCwgMSk7CisgICAgYWRkRnVuY3Rpb24odm0sICJnZXRDb25jdXJyZW50bHkiLCBmdW5jdGlv
bkdldENvbmN1cnJlbnRseSwgMik7CiB9CiAKIHZvaWQgSlNEb2xsYXJWTTo6YWRkRnVuY3Rpb24o
Vk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBjb25zdCBjaGFyKiBuYW1lLCBO
YXRpdmVGdW5jdGlvbiBmdW5jdGlvbiwgdW5zaWduZWQgYXJndW1lbnRzKQpkaWZmIC0tZ2l0IGEv
SlNUZXN0cy9DaGFuZ2VMb2cgYi9KU1Rlc3RzL0NoYW5nZUxvZwppbmRleCBkY2NmMzZjNGE0NmU2
NTRmNDhmZjdlMTczN2E2NjY3NjgxNDg2YWE1Li4zYmYwNmI2YzdmMDk5ZDljNDgwN2EyZDkyN2Qy
NmNiZmJmYzU4YmExIDEwMDY0NAotLS0gYS9KU1Rlc3RzL0NoYW5nZUxvZworKysgYi9KU1Rlc3Rz
L0NoYW5nZUxvZwpAQCAtMSwzICsxLDMxIEBACisyMDIwLTAxLTI4ICBKdXN0aW4gTWljaGF1ZCAg
PGp1c3Rpbl9taWNoYXVkQGFwcGxlLmNvbT4KKworICAgICAgICBEZWxldGluZyBhIHByb3BlcnR5
IHNob3VsZCBub3QgdHVybiBzdHJ1Y3R1cmVzIGludG8gdW5jYWNoZWFibGUgZGljdGlvbmFyaWVz
CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMDY0MzAK
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIG1pY3Jv
YmVuY2htYXJrcy9kZWxldGUtcHJvcGVydHktZnJvbS1wcm90b3R5cGUtY2hhaW4uanM6IEFkZGVk
LgorICAgICAgICAoYXNzZXJ0KToKKyAgICAgICAgKE9iamVjdC5wcm90b3R5cGUuei40Mi5DKToK
KyAgICAgICAgKGRvVGVzdCk6CisgICAgICAgICogbWljcm9iZW5jaG1hcmtzL2RlbGV0ZS1wcm9w
ZXJ0eS1rZWVwcy1jYWNoZWFibGUtc3RydWN0dXJlLmpzOiBBZGRlZC4KKyAgICAgICAgKGFzc2Vy
dCk6CisgICAgICAgIChDKToKKyAgICAgICAgKGRvVGVzdCk6CisgICAgICAgICogc3RyZXNzL2Rl
bGV0ZS1wcm9wZXJ0eS1jaGVjay1zdHJ1Y3R1cmUtdHJhbnNpdGlvbi5qczogQWRkZWQuCisgICAg
ICAgIChhc3NlcnQpOgorICAgICAgICAoYXNzZXJ0X2VxKToKKyAgICAgICAgKGFzc2VydF9uZXEp
OgorICAgICAgICAoc2QpOgorICAgICAgICAoc2lkKToKKyAgICAgICAgKHRlc3REZWxldGVJc05v
dFVuY2FjaGVhYmxlKToKKyAgICAgICAgKHRlc3RDYW5NYXRlcmlhbGl6ZURlbGV0ZXMpOgorICAg
ICAgICAodGVzdENhbkZsYXR0ZW4pOgorICAgICAgICAodGVzdERlbGV0ZVdpdGhJbmxpbmVDYWNo
ZS5PYmplY3QucHJvdG90eXBlLmdsb2JhbFByb3BlcnR5LjQyLm1ha2VGb28pOgorICAgICAgICAo
dGVzdERlbGV0ZVdpdGhJbmxpbmVDYWNoZS5ub0lubGluZS5kb1Rlc3QpOgorICAgICAgICAodGVz
dERlbGV0ZVdpdGhJbmxpbmVDYWNoZSk6CisKIDIwMjAtMDEtMjEgIFRhZGV1IFphZ2FsbG8gIDx0
emFnYWxsb0BhcHBsZS5jb20+CiAKICAgICAgICAgT2JqZWN0IGFsbG9jYXRpb24gc2lua2luZyBp
cyBtaXNzaW5nIFB1dEhpbnQgZm9yIGFsbG9jYXRpb25zIHVucmVhY2hhYmxlIGluIHRoZSBncmFw
aApkaWZmIC0tZ2l0IGEvSlNUZXN0cy9taWNyb2JlbmNobWFya3MvZGVsZXRlLXByb3BlcnR5LWZy
b20tcHJvdG90eXBlLWNoYWluLmpzIGIvSlNUZXN0cy9taWNyb2JlbmNobWFya3MvZGVsZXRlLXBy
b3BlcnR5LWZyb20tcHJvdG90eXBlLWNoYWluLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjU3YzgzOTQxNDU4ZDFj
ZDU3NGFjNDkyZWZkMzBhMzViNGI2NjAyZjEKLS0tIC9kZXYvbnVsbAorKysgYi9KU1Rlc3RzL21p
Y3JvYmVuY2htYXJrcy9kZWxldGUtcHJvcGVydHktZnJvbS1wcm90b3R5cGUtY2hhaW4uanMKQEAg
LTAsMCArMSwzMyBAQAorLy9AIHNraXAgaWYgJG1vZGVsID09ICJBcHBsZSBXYXRjaCBTZXJpZXMg
MyIgIyBhZGRlZCBieSBtYXJrLWpzYy1zdHJlc3MtdGVzdC5weQorZnVuY3Rpb24gYXNzZXJ0KGIp
IHsKKyAgICBpZiAoIWIpCisgICAgICAgIHRocm93IG5ldyBFcnJvcjsKK30KKworT2JqZWN0LnBy
b3RvdHlwZS56ID0gNDIKKworZnVuY3Rpb24gQygpIHsKKyAgICB0aGlzLnggPSA0MjsKKyAgICBh
c3NlcnQodGhpcy56ID09PSA0MikKK30KKworbGV0IG9ianMgPSBbXTsKK2ZvciAobGV0IGkgPSAw
OyBpIDwgNTA7ICsraSkgeworICAgIG9ianMucHVzaChuZXcgQyk7Cit9CisKK2Z1bmN0aW9uIGRv
VGVzdCgpIHsKKyAgICBmb3IgKGxldCBpID0gMDsgaSA8IG9ianMubGVuZ3RoOyArK2kpIHsKKyAg
ICAgICAgbGV0IG8gPSBvYmpzW2ldOworICAgICAgICBhc3NlcnQoby55ID09PSB1bmRlZmluZWQp
OworICAgICAgICBhc3NlcnQoby54ID09PSA0Mik7CisgICAgfQorfQorbm9JbmxpbmUoZG9UZXN0
KTsKKworZm9yIChsZXQgaT0wOyBpPDEwMDAwOyArK2kpIGRvVGVzdCgpCisKK2RlbGV0ZSBPYmpl
Y3QucHJvdG90eXBlLnoKKworZm9yIChsZXQgaT0wOyBpPDEwMDAwMDAwOyArK2kpIGRvVGVzdCgp
CisKZGlmZiAtLWdpdCBhL0pTVGVzdHMvbWljcm9iZW5jaG1hcmtzL2RlbGV0ZS1wcm9wZXJ0eS1r
ZWVwcy1jYWNoZWFibGUtc3RydWN0dXJlLmpzIGIvSlNUZXN0cy9taWNyb2JlbmNobWFya3MvZGVs
ZXRlLXByb3BlcnR5LWtlZXBzLWNhY2hlYWJsZS1zdHJ1Y3R1cmUuanMKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMjJj
Y2E5ZmQyMWRiMDcyNmJhNmIxZDJiNjVkOWRhNWI4M2E4YTgzOAotLS0gL2Rldi9udWxsCisrKyBi
L0pTVGVzdHMvbWljcm9iZW5jaG1hcmtzL2RlbGV0ZS1wcm9wZXJ0eS1rZWVwcy1jYWNoZWFibGUt
c3RydWN0dXJlLmpzCkBAIC0wLDAgKzEsMjggQEAKKy8vQCBza2lwIGlmICRtb2RlbCA9PSAiQXBw
bGUgV2F0Y2ggU2VyaWVzIDMiICMgYWRkZWQgYnkgbWFyay1qc2Mtc3RyZXNzLXRlc3QucHkKK2Z1
bmN0aW9uIGFzc2VydChiKSB7CisgICAgaWYgKCFiKQorICAgICAgICB0aHJvdyBuZXcgRXJyb3I7
Cit9CisKK2Z1bmN0aW9uIEMoKSB7CisgICAgdGhpcy54ID0gNDI7CisgICAgdGhpcy55ID0gMTMz
NzsKKyAgICBkZWxldGUgdGhpcy55OworfQorCitsZXQgb2JqcyA9IFtdOworZm9yIChsZXQgaSA9
IDA7IGkgPCA1MDsgKytpKSB7CisgICAgb2Jqcy5wdXNoKG5ldyBDKTsKK30KKworZnVuY3Rpb24g
ZG9UZXN0KCkgeworICAgIGZvciAobGV0IGkgPSAwOyBpIDwgb2Jqcy5sZW5ndGg7ICsraSkgewor
ICAgICAgICBsZXQgbyA9IG9ianNbaV07CisgICAgICAgIGFzc2VydChvLnkgPT09IHVuZGVmaW5l
ZCk7CisgICAgICAgIGFzc2VydChvLnggPT09IDQyKTsKKyAgICB9Cit9Citub0lubGluZShkb1Rl
c3QpOworCitmb3IgKGxldCBpPTA7IGk8MTAwMDAwMDA7ICsraSkgZG9UZXN0KCkKKwpkaWZmIC0t
Z2l0IGEvSlNUZXN0cy9zdHJlc3MvZGVsZXRlLXByb3BlcnR5LWNoZWNrLXN0cnVjdHVyZS10cmFu
c2l0aW9uLmpzIGIvSlNUZXN0cy9zdHJlc3MvZGVsZXRlLXByb3BlcnR5LWNoZWNrLXN0cnVjdHVy
ZS10cmFuc2l0aW9uLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmIwNjMxMTdmNGE4NjA3ZTdhZTIwM2IyNjRjMzZm
MTk0OWY3NGZkYWMKLS0tIC9kZXYvbnVsbAorKysgYi9KU1Rlc3RzL3N0cmVzcy9kZWxldGUtcHJv
cGVydHktY2hlY2stc3RydWN0dXJlLXRyYW5zaXRpb24uanMKQEAgLTAsMCArMSwxODkgQEAKK2Z1
bmN0aW9uIGFzc2VydChjb25kaXRpb24pIHsKKyAgICBpZiAoIWNvbmRpdGlvbikKKyAgICAgICAg
dGhyb3cgbmV3IEVycm9yKCJhc3NlcnRpb24gZmFpbGVkIik7Cit9CisKK2Z1bmN0aW9uIGFzc2Vy
dF9lcShhLCBiKSB7CisgICAgaWYgKGEgIT09IGIpCisgICAgICAgIHRocm93IG5ldyBFcnJvcigi
YXNzZXJ0aW9uIGZhaWxlZDogIiArIGEgKyAiID09PSAiICsgYik7Cit9CisKK2Z1bmN0aW9uIGFz
c2VydF9uZXEoYSwgYikgeworICAgIGlmIChhID09PSBiKQorICAgICAgICB0aHJvdyBuZXcgRXJy
b3IoImFzc2VydGlvbiBmYWlsZWQ6ICIgKyBhICsgIiAhPT0gIiArIGIpOworfQorCitmdW5jdGlv
biBzZChvYmopIHsKKyAgICBsZXQgZGF0YSA9ICR2bS5nZXRTdHJ1Y3R1cmVUcmFuc2l0aW9uTGlz
dChvYmopCisgICAgbGV0IHJlc3VsdCA9IFtdCisKKyAgICBpZiAoIWRhdGEpCisgICAgICAgIHJl
dHVybiByZXN1bHQKKworICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZGF0YS5sZW5ndGgvNTsgKytp
KSB7CisgICAgICAgIHJlc3VsdC5wdXNoKHsgaWQ6IGRhdGFbaSo1KzBdLCBvZmZzZXQ6IGRhdGFb
aSo1KzFdLCBtYXg6IGRhdGFbaSo1KzJdLCBwcm9wZXJ0eTogZGF0YVtpKjUrM10sIHR5cGU6IGRh
dGFbaSo1KzRdID09IDAgPyAiYWRkZWQiIDogImRlbGV0ZWQiIH0pCisgICAgfQorCisgICAgcmV0
dXJuIHJlc3VsdAorfQorCitmdW5jdGlvbiBzaWQob2JqKSB7CisgICAgbGV0IGRhdGEgPSBzZChv
YmopCisgICAgcmV0dXJuIGRhdGFbZGF0YS5sZW5ndGgtMV0uaWQKK30KKworZnVuY3Rpb24gdGVz
dERlbGV0ZUlzTm90VW5jYWNoZWFibGUoaSkgeworICAgIGxldCBmb28gPSB7fQorICAgIGZvb1si
YmFyIiArIGldID0gMQorICAgIGZvb1siYmF6IiArIGldID0gMgorICAgIGFzc2VydChmb29bImJh
ciIgKyBpXSA9PT0gMSkKKyAgICBhc3NlcnQoZm9vWyJiYXoiICsgaV0gPT09IDIpCisgICAgbGV0
IG9sZFNpZCA9IHNpZChmb28pCisKKyAgICBhc3NlcnRfZXEoJHZtLmdldENvbmN1cnJlbnRseShm
b28sICJiYXoiK2kpLCAxKQorICAgIGFzc2VydF9lcSgkdm0uZ2V0Q29uY3VycmVudGx5KGZvbywg
ImJhciIraSksIDEpCisgICAgYXNzZXJ0X2VxKCR2bS5nZXRDb25jdXJyZW50bHkoZm9vLCAiZm9v
IitpKSwgMCkKKworICAgIGFzc2VydChkZWxldGUgZm9vWyJiYXIiICsgaV0pCisgICAgYXNzZXJ0
X25lcShvbGRTaWQsIHNpZChmb28pKQorICAgIGFzc2VydCghKCJiYXIiICsgaSBpbiBmb28pKTsK
KyAgICBhc3NlcnQoZm9vWyJiYXoiICsgaV0gPT09IDIpCisKKyAgICBhc3NlcnRfZXEoJHZtLmdl
dENvbmN1cnJlbnRseShmb28sICJiYXoiK2kpLCAxKQorICAgIGFzc2VydF9lcSgkdm0uZ2V0Q29u
Y3VycmVudGx5KGZvbywgImJhciIraSksIDApCisKKyAgICBhc3NlcnRfZXEoT2JqZWN0LmtleXMo
Zm9vKS5sZW5ndGgsIDEpCisKKyAgICBsZXQgZGF0YSA9IHNkKGZvbykKKyAgICBhc3NlcnRfZXEo
ZGF0YVtkYXRhLmxlbmd0aC0xXS5wcm9wZXJ0eSwgImJhciIgKyBpKQorCisgICAgZm9vWyJiYXIi
ICsgaV0gPSAxCisgICAgYXNzZXJ0KGZvb1siYmFyIiArIGldID09PSAxKQorICAgIGFzc2VydF9l
cSgkdm0uZ2V0Q29uY3VycmVudGx5KGZvbywgImJheiIraSksIDEpCisgICAgYXNzZXJ0X2VxKCR2
bS5nZXRDb25jdXJyZW50bHkoZm9vLCAiYmFyIitpKSwgMSkKK30KKworZnVuY3Rpb24gdGVzdENh
bk1hdGVyaWFsaXplRGVsZXRlcyhpKSB7CisgICAgbGV0IGZvbyA9IHt9CisgICAgZm9vWyJiYXIi
ICsgaV0gPSAxCisgICAgZm9vWyJiYXoiICsgaV0gPSAyCisKKyAgICBhc3NlcnQoZm9vWyJiYXIi
ICsgaV0gPT09IDEpCisgICAgYXNzZXJ0KGZvb1siYmF6IiArIGldID09PSAyKQorICAgIGFzc2Vy
dChkZWxldGUgZm9vWyJiYXIiICsgaV0pCisgICAgYXNzZXJ0KCEoImJhciIgKyBpIGluIGZvbykp
CisgICAgYXNzZXJ0KGZvb1siYmF6IiArIGldID09PSAyKQorICAgIGFzc2VydF9lcShPYmplY3Qu
a2V5cyhmb28pLmxlbmd0aCwgMSkKKworICAgIGxldCBmb28yID0ge30KKyAgICBmb28yWyJiYXIi
ICsgaV0gPSAzCisgICAgZm9vMlsiYmF6IiArIGldID0gNAorICAgIGFzc2VydChkZWxldGUgZm9v
MlsiYmFyIiArIGldKQorCisgICAgYXNzZXJ0X2VxKHNpZChmb28yKSwgc2lkKGZvbykpCisgICAg
Zm9vMlsiZnVuIiArIGldID0gMworICAgIGFzc2VydF9uZXEoc2lkKGZvbzIpLCBzaWQoZm9vKSkK
KworICAgIGFzc2VydChmb28yWyJmdW4iICsgaV0gPT09IDMpCisgICAgYXNzZXJ0KGZvbzJbImJh
eiIgKyBpXSA9PT0gNCkKKyAgICBhc3NlcnQoISgiYmFyIiArIGkgaW4gZm9vMikpCisgICAgYXNz
ZXJ0X2VxKE9iamVjdC5rZXlzKGZvbzIpLmxlbmd0aCwgMikKKyAgICBhc3NlcnQoZm9vWyJiYXoi
ICsgaV0gPT09IDIpCisgICAgYXNzZXJ0KCEoImJhciIgKyBpIGluIGZvbykpCisgICAgYXNzZXJ0
X2VxKE9iamVjdC5rZXlzKGZvbykubGVuZ3RoLCAxKQorCisgICAgbGV0IGRhdGEgPSBzZChmb28p
CisgICAgYXNzZXJ0X2VxKGRhdGFbZGF0YS5sZW5ndGgtMV0ucHJvcGVydHksICJiYXIiICsgaSkK
KworICAgIGRhdGEgPSBzZChmb28yKQorICAgIGFzc2VydF9lcShkYXRhW2RhdGEubGVuZ3RoLTFd
LnByb3BlcnR5LCAiZnVuIiArIGkpCisgICAgYXNzZXJ0X2VxKGRhdGFbZGF0YS5sZW5ndGgtMl0u
cHJvcGVydHksICJiYXIiICsgaSkKK30KKworZnVuY3Rpb24gdGVzdENhbkZsYXR0ZW4oaSkgewor
ICAgIGxldCBmb28gPSB7fQorICAgIGZvciAobGV0IGo9MDsgajw1MDA7ICsraikgeworICAgICAg
ICBjb25zdCBvbGRJZCA9IHNpZChmb28pCisKKyAgICAgICAgZm9vWyJ4IiArIDEwMDAqaiArIGld
ID0gagorICAgICAgICBpZiAoaiA+IDApCisgICAgICAgICAgICBkZWxldGUgZm9vWyJ4IiArIDEw
MDAqKGogLSAxKSArIGldCisKKyAgICAgICAgaWYgKGogPiAxMDApCisgICAgICAgICAgICBhc3Nl
cnRfZXEoc2lkKGZvbyksIG9sZElkKQorICAgIH0KKworICAgIGZvciAobGV0IGo9MDsgajw1MDA7
ICsraikgeworICAgICAgICBjb25zdCB2YWwgPSBmb29bIngiICsgMTAwMCpqICsgaV0KKyAgICAg
ICAgaWYgKGogPT0gNDk5KQorICAgICAgICAgICAgYXNzZXJ0X2VxKHZhbCwgaikKKyAgICAgICAg
ZWxzZQorICAgICAgICAgICAgYXNzZXJ0X2VxKHZhbCwgdW5kZWZpbmVkKQorICAgIH0KKworICAg
ICR2bS5mbGF0dGVuRGljdGlvbmFyeU9iamVjdChmb28pCisKKyAgICBmb3IgKGxldCBqPTA7IGo8
NTAwOyArK2opIHsKKyAgICAgICAgY29uc3QgdmFsID0gZm9vWyJ4IiArIDEwMDAqaiArIGldCisg
ICAgICAgIGlmIChqID09IDQ5OSkKKyAgICAgICAgICAgIGFzc2VydF9lcSh2YWwsIGopCisgICAg
ICAgIGVsc2UKKyAgICAgICAgICAgIGFzc2VydF9lcSh2YWwsIHVuZGVmaW5lZCkKKyAgICB9Cit9
CisKK2Z1bmN0aW9uIHRlc3REZWxldGVXaXRoSW5saW5lQ2FjaGUoKSB7CisgICAgT2JqZWN0LnBy
b3RvdHlwZS5nbG9iYWxQcm9wZXJ0eSA9IDQyCisKKyAgICBmdW5jdGlvbiBtYWtlRm9vKCkgewor
ICAgICAgICBsZXQgZm9vID0ge30KKyAgICAgICAgZm9vLmJheiA9IDEKKyAgICAgICAgYXNzZXJ0
KGZvby5nbG9iYWxQcm9wZXJ0eSA9PT0gNDIpCisKKyAgICAgICAgcmV0dXJuIGZvbworICAgIH0K
KyAgICBub0lubGluZShtYWtlRm9vKQorCisgICAgZnVuY3Rpb24gZG9UZXN0KHhWYWwpIHsKKyAg
ICAgICAgZm9yIChsZXQgaj0wOyBqPDUwOyArK2opIHsKKyAgICAgICAgICAgIGZvciAobGV0IHo9
MDsgejwxMDAwMDsgKyt6KSB7CisgICAgICAgICAgICAgICAgY29uc3QgZm9vID0gYXJyW2pdCisK
KyAgICAgICAgICAgICAgICBhc3NlcnQoZm9vLmJheiA9PT0gMSkKKyAgICAgICAgICAgICAgICBh
c3NlcnRfZXEoT2JqZWN0LmtleXMoZm9vKS5sZW5ndGgsIDEpCisgICAgICAgICAgICAgICAgYXNz
ZXJ0X2VxKGZvby5nbG9iYWxQcm9wZXJ0eSwgeFZhbCkKKyAgICAgICAgICAgIH0KKyAgICAgICAg
fQorICAgIH0KKyAgICBub0lubGluZShkb1Rlc3QpCisKKyAgICBhcnIgPSBuZXcgQXJyYXkoNTAp
CisKKyAgICBmb3IgKGxldCBqPTA7IGo8NTA7ICsraikgeworICAgICAgICBhcnJbal0gPSBtYWtl
Rm9vKCkKKyAgICAgICAgaWYgKGogPiAwKQorICAgICAgICAgICAgYXNzZXJ0X2VxKHNpZChhcnJb
ai0xXSksIHNpZChhcnJbal0pKQorICAgIH0KKworICAgIGRvVGVzdCg0MikKKworICAgIE9iamVj
dC5wcm90b3R5cGUuZ2xvYmFsUHJvcGVydHkgPSA0MworCisgICAgZG9UZXN0KDQzKQorCisgICAg
ZGVsZXRlIE9iamVjdC5wcm90b3R5cGUuZ2xvYmFsUHJvcGVydHkKKworICAgIGRvVGVzdCh1bmRl
ZmluZWQpCit9CisKK3Rlc3REZWxldGVXaXRoSW5saW5lQ2FjaGUoKQorCitmb3IgKGxldCBpID0g
MDsgaSA8IDEwMDA7ICsraSkgeworICAgIHRlc3REZWxldGVJc05vdFVuY2FjaGVhYmxlKGkpCisg
ICAgdGVzdENhbk1hdGVyaWFsaXplRGVsZXRlcygxMDAwK2kpCit9CisKK2ZvciAobGV0IGkgPSAw
OyBpIDwgMTAwOyArK2kpIHsKKyAgICB0ZXN0Q2FuRmxhdHRlbigyMDAwK2kpCit9CisK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>389083</attachid>
            <date>2020-01-28 16:00:43 -0800</date>
            <delta_ts>2020-01-30 17:11:14 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-206430-20200128160042.patch</filename>
            <type>text/plain</type>
            <size>45012</size>
            <attacher name="Justin Michaud">justin_michaud</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjU0ODk3CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCAx
OTIzZTJlNzllMGZhMDMwZmFjOWMyY2RmMTk1ZDczZTU3ZTExMjllLi41YjkxODFjMTExYWVlZGM4
NzBjZjU4ZWRjNWViM2MxMDM0YjY2YTFjIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSw2MiBAQAorMjAyMC0wMS0yOCAgSnVzdGluIE1pY2hhdWQgIDxqdXN0aW5fbWljaGF1ZEBh
cHBsZS5jb20+CisKKyAgICAgICAgRGVsZXRpbmcgYSBwcm9wZXJ0eSBzaG91bGQgbm90IHR1cm4g
c3RydWN0dXJlcyBpbnRvIHVuY2FjaGVhYmxlIGRpY3Rpb25hcmllcworICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjA2NDMwCisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgUmlnaHQgbm93LCBkZWxldGVQcm9wZXJ0
eS9yZW1vdmVQcm9wZXJ0eVRyYW5zaXRpb24gY2F1c2VzIGEgc3RydWN0dXJlIHRyYW5zaXRpb24g
dG8gdW5jYWNoZWFibGUgZGljdGlvbmFyeS4gSW5zdGVhZCwgd2Ugc2hvdWxkIGFsbG93IGl0IHRv
IHRyYW5zaXRpb24gdG8gYSBuZXcgcmVndWxhciBzdHJ1Y3R1cmUgbGlrZSBhZGRpbmcgYSBwcm9w
ZXJ0eSBkb2VzLiBUaGlzIG1lYW5zIHRoYXQgd2UgaGF2ZSB0bzoKKworICAgICAgICAxKSBCcmVh
ayB0aGUgYXNzdW1wdGlvbiB0aGF0IHN0cnVjdHVyZSB0cmFuc2l0aW9uIG9mZnNldHMgaW5jcmVh
c2UgbW9ub3RvbmljYWxseQorCisgICAgICAgIFdlIGFkZCBhIG5ldyBmbGFnIHRvIHRlbGwgdGhh
dCBhIHN0cnVjdHVyZSBoYXMgZGVsZXRlZCBpdHMgcHJvcGVydHksIGFuZCB1cGRhdGUgbWF0ZXJp
YWxpemVQcm9wZXJ0eVRhYmxlIHRvIHVzZSBpdC4KKworICAgICAgICAyKSBBZGQgYSBuZXcgdHJh
bnNpdGlvbiBtYXAgYW5kIHRyYW5zaXRpb24ga2luZCBmb3IgZGVsZXRlcworCisgICAgICAgIFdl
IGNhY2hlIHRoZSBkZWxldGUgdHJhbnNpdGlvbi4gV2Ugd2lsbCBub3QgdHJhbnNpdGlvbiBiYWNr
IHRvIGEgcHJldmlvdXMgc3RydWN0dXJlIGlmIHlvdSBhZGQgdGhlbiBpbW1lZGlhdGVseSByZW1v
dmUgYSBwcm9wZXJ0eS4KKworICAgICAgICAzKSBGaW5kIHNvbWUgaGV1cmlzdGljIGZvciB3aGVu
IHdlIHNob3VsZCBhY3R1YWxseSB0cmFuc2l0aW9uIHRvIHVuY2FjaGVhYmxlIGRpY3Rpb25hcnku
CisKKyAgICAgICAgU2luY2UgZGVsZXRpbmcgcHJvcGVydGllcyBpcyBleHBlY3RlZCB0byBiZSBy
YXJlLCB3ZSBqdXN0IHdhbGsgdGhlIHN0cnVjdHVyZSBsaXN0IGFuZCBjb3VudCBpdHMgc2l6ZSBv
biByZW1vdmFsLiAKKworICAgICAgICBUaGlzIHBhdGNoIGFsc28gZml4ZXMgYSByZWxhdGVkIGJ1
ZyBpbiBhZGRQcm9wZXJ0eSwgd2hlcmUgd2UgZGlkIG5vdCB1c2UgYSBHQ1NhZmVDb25jdXJyZW50
SlNMb2NrZXIsIGFuZCBhZGRzIGFuIG9wdGlvbiB0byB0cmlnZ2VyIHRoZSBidWcuIEZpbmFsbHks
IHdlIGFkZCBzb21lIGhlbHBlciBtZXRob2RzIHRvIGRvbGxhclZNIHRvIHRlc3QuCisKKyAgICAg
ICAgVGhpcyBnaXZlcyBhIDI0eCBzcGVlZHVwIG9uIGRlbGV0ZS1wcm9wZXJ0eS1rZWVwcy1jYWNo
ZWFibGUtc3RydWN0dXJlLmpzLCBhbmQgaXMgbmV1dHJhbCBvbiBkZWxldGUtcHJvcGVydHktZnJv
bS1wcm90b3R5cGUtY2hhaW4uanMgKHdoaWNoIHdhcyBhbHJlYWR5IGdlbmVyYXRpbmcgY29kZSB1
c2luZyB0aGUgaW5saW5lIGNhY2hlKS4KKworICAgICAgICAqIGhlYXAvSGVhcElubGluZXMuaDoK
KyAgICAgICAgKEpTQzo6SGVhcDo6ZGVjcmVtZW50RGVmZXJyYWxEZXB0aEFuZEdDSWZOZWVkZWQp
OgorICAgICAgICAqIHJ1bnRpbWUvSlNPYmplY3QuY3BwOgorICAgICAgICAoSlNDOjpKU09iamVj
dDo6ZGVsZXRlUHJvcGVydHkpOgorICAgICAgICAqIHJ1bnRpbWUvT3B0aW9uc0xpc3QuaDoKKyAg
ICAgICAgKiBydW50aW1lL1Byb3BlcnR5TWFwSGFzaFRhYmxlLmg6CisgICAgICAgIChKU0M6OlBy
b3BlcnR5VGFibGU6OmFkZCk6CisgICAgICAgIChKU0M6OlByb3BlcnR5VGFibGU6OmFkZERlbGV0
ZWRPZmZzZXQpOgorICAgICAgICAqIHJ1bnRpbWUvU3RydWN0dXJlLmNwcDoKKyAgICAgICAgKEpT
Qzo6U3RydWN0dXJlVHJhbnNpdGlvblRhYmxlOjpjb250YWlucyBjb25zdCk6CisgICAgICAgIChK
U0M6OlN0cnVjdHVyZVRyYW5zaXRpb25UYWJsZTo6Z2V0IGNvbnN0KToKKyAgICAgICAgKEpTQzo6
U3RydWN0dXJlVHJhbnNpdGlvblRhYmxlOjphZGQpOgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmU6
OlN0cnVjdHVyZSk6CisgICAgICAgIChKU0M6OlN0cnVjdHVyZTo6bWF0ZXJpYWxpemVQcm9wZXJ0
eVRhYmxlKToKKyAgICAgICAgKEpTQzo6U3RydWN0dXJlOjphZGROZXdQcm9wZXJ0eVRyYW5zaXRp
b24pOgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmU6OnJlbW92ZVByb3BlcnR5VHJhbnNpdGlvbik6
CisgICAgICAgIChKU0M6OlN0cnVjdHVyZTo6cmVtb3ZlUHJvcGVydHlUcmFuc2l0aW9uRnJvbUV4
aXN0aW5nU3RydWN0dXJlKToKKyAgICAgICAgKEpTQzo6U3RydWN0dXJlOjpyZW1vdmVOZXdQcm9w
ZXJ0eVRyYW5zaXRpb24pOgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmU6OnRvVW5jYWNoZWFibGVE
aWN0aW9uYXJ5VHJhbnNpdGlvbik6CisgICAgICAgIChKU0M6OlN0cnVjdHVyZTo6cmVtb3ZlKToK
KyAgICAgICAgKEpTQzo6U3RydWN0dXJlOjp2aXNpdENoaWxkcmVuKToKKyAgICAgICAgKiBydW50
aW1lL1N0cnVjdHVyZS5oOgorICAgICAgICAqIHJ1bnRpbWUvU3RydWN0dXJlSW5saW5lcy5oOgor
ICAgICAgICAoSlNDOjpTdHJ1Y3R1cmU6OmZvckVhY2hQcm9wZXJ0eUNvbmN1cnJlbnRseSk6Cisg
ICAgICAgIChKU0M6OlN0cnVjdHVyZTo6YWRkKToKKyAgICAgICAgKEpTQzo6U3RydWN0dXJlOjpy
ZW1vdmUpOgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmU6OnJlbW92ZVByb3BlcnR5V2l0aG91dFRy
YW5zaXRpb24pOgorICAgICAgICAqIHJ1bnRpbWUvU3RydWN0dXJlVHJhbnNpdGlvblRhYmxlLmg6
CisgICAgICAgIChKU0M6OlN0cnVjdHVyZVRyYW5zaXRpb25UYWJsZTo6SGFzaDo6aGFzaCk6Cisg
ICAgICAgICogdG9vbHMvSlNEb2xsYXJWTS5jcHA6CisgICAgICAgIChKU0M6OkpTRG9sbGFyVk1I
ZWxwZXI6OmZ1bmN0aW9uR2V0U3RydWN0dXJlVHJhbnNpdGlvbkxpc3QpOgorICAgICAgICAoSlND
OjpmdW5jdGlvbkdldENvbmN1cnJlbnRseSk6CisgICAgICAgIChKU0M6OkpTRG9sbGFyVk06OmZp
bmlzaENyZWF0aW9uKToKKwogMjAyMC0wMS0yMSAgUm9iIEJ1aXMgIDxyYnVpc0BpZ2FsaWEuY29t
PgogCiAgICAgICAgIEFkZCBidWlsZCBmbGFnIGZvciBzdGFsZS13aGlsZS1yZXZhbGlkYXRlCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwSW5saW5lcy5oIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcElubGluZXMuaAppbmRleCAxN2YyNDExOGI4MjJl
ZmI3ZjY2ZWUxMjU5NTM3OGZhNThjMjE3YzYyLi43YWYwNTYzYjExZWI2ZDhjMTUyMmQ2MjA5ZmM0
YzE5ZDU1NGE3ZGNmIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFw
SW5saW5lcy5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXBJbmxpbmVzLmgK
QEAgLTE4OCw3ICsxODgsNyBAQCBpbmxpbmUgdm9pZCBIZWFwOjpkZWNyZW1lbnREZWZlcnJhbERl
cHRoQW5kR0NJZk5lZWRlZCgpCiAgICAgQVNTRVJUKCFUaHJlYWQ6Om1heUJlR0NUaHJlYWQoKSB8
fCBtX3dvcmxkSXNTdG9wcGVkKTsKICAgICBtX2RlZmVycmFsRGVwdGgtLTsKICAgICAKLSAgICBp
ZiAoVU5MSUtFTFkobV9kaWREZWZlckdDV29yaykpIHsKKyAgICBpZiAoVU5MSUtFTFkobV9kaWRE
ZWZlckdDV29yaykgfHwgT3B0aW9uczo6Zm9yY2VEaWREZWZlckdDV29yaygpKSB7CiAgICAgICAg
IGRlY3JlbWVudERlZmVycmFsRGVwdGhBbmRHQ0lmTmVlZGVkU2xvdygpOwogICAgICAgICAKICAg
ICAgICAgLy8gSGVyZSBhcmUgdGhlIHBvc3NpYmxlIHJlbGF0aW9uc2hpcHMgYmV0d2VlbiBtX2Rl
ZmVycmFsRGVwdGggYW5kIG1fZGlkRGVmZXJHQ1dvcmsuCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9KU09iamVjdC5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9KU09iamVjdC5jcHAKaW5kZXggZDY3YmE4ZDVjYTk1NjlkMDRhMTllNTAzNjQ1MzA1
OTZiYTlkODhkMi4uNDZlYWU0NTgyZjQyZTc5MGVmN2ZiNzA5NjZlM2Q4ZWY3OWMxOWI3NSAxMDA2
NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNPYmplY3QuY3BwCisrKyBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT2JqZWN0LmNwcApAQCAtMjAwMiwxMSAr
MjAwMiwyMCBAQCBib29sIEpTT2JqZWN0OjpkZWxldGVQcm9wZXJ0eShKU0NlbGwqIGNlbGwsIEpT
R2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIFByb3BlcgogICAgICAgICBpZiAoYXR0cmlidXRl
cyAmIFByb3BlcnR5QXR0cmlidXRlOjpEb250RGVsZXRlICYmIHZtLmRlbGV0ZVByb3BlcnR5TW9k
ZSgpICE9IFZNOjpEZWxldGVQcm9wZXJ0eU1vZGU6Oklnbm9yZUNvbmZpZ3VyYWJsZSkKICAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgICAgICBQcm9wZXJ0eU9mZnNldCBvZmZzZXQ7Cisg
ICAgICAgIFByb3BlcnR5T2Zmc2V0IG9mZnNldCA9IGludmFsaWRPZmZzZXQ7CiAgICAgICAgIGlm
IChzdHJ1Y3R1cmUtPmlzVW5jYWNoZWFibGVEaWN0aW9uYXJ5KCkpCi0gICAgICAgICAgICBvZmZz
ZXQgPSBzdHJ1Y3R1cmUtPnJlbW92ZVByb3BlcnR5V2l0aG91dFRyYW5zaXRpb24odm0sIHByb3Bl
cnR5TmFtZSwgW10gKGNvbnN0IENvbmN1cnJlbnRKU0xvY2tlciYsIFByb3BlcnR5T2Zmc2V0KSB7
IH0pOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICB0aGlzT2JqZWN0LT5zZXRTdHJ1Y3R1cmUo
dm0sIFN0cnVjdHVyZTo6cmVtb3ZlUHJvcGVydHlUcmFuc2l0aW9uKHZtLCBzdHJ1Y3R1cmUsIHBy
b3BlcnR5TmFtZSwgb2Zmc2V0KSk7CisgICAgICAgICAgICBvZmZzZXQgPSBzdHJ1Y3R1cmUtPnJl
bW92ZVByb3BlcnR5V2l0aG91dFRyYW5zaXRpb24odm0sIHByb3BlcnR5TmFtZSwgW10gKGNvbnN0
IEdDU2FmZUNvbmN1cnJlbnRKU0xvY2tlciYsIFByb3BlcnR5T2Zmc2V0LCBQcm9wZXJ0eU9mZnNl
dCkgeyB9KTsKKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBEZWZlcnJlZFN0cnVjdHVyZVRy
YW5zaXRpb25XYXRjaHBvaW50RmlyZSBkZWZlcnJlZFdhdGNocG9pbnRGaXJlKHZtLCBzdHJ1Y3R1
cmUpOworICAgICAgICAgICAgc3RydWN0dXJlID0gU3RydWN0dXJlOjpyZW1vdmVQcm9wZXJ0eVRy
YW5zaXRpb24odm0sIHN0cnVjdHVyZSwgcHJvcGVydHlOYW1lLCBvZmZzZXQsICZkZWZlcnJlZFdh
dGNocG9pbnRGaXJlKTsKKyAgICAgICAgICAgIGlmICh0aGlzT2JqZWN0LT5tX2J1dHRlcmZseSAm
JiAhc3RydWN0dXJlLT5vdXRPZkxpbmVDYXBhY2l0eSgpICYmICFzdHJ1Y3R1cmUtPmhhc0luZGV4
aW5nSGVhZGVyKHRoaXNPYmplY3QpKSB7CisgICAgICAgICAgICAgICAgdGhpc09iamVjdC0+bnVr
ZVN0cnVjdHVyZUFuZFNldEJ1dHRlcmZseSh2bSwgdGhpc09iamVjdC0+c3RydWN0dXJlSUQoKSwg
bnVsbHB0cik7CisgICAgICAgICAgICAgICAgb2Zmc2V0ID0gaW52YWxpZE9mZnNldDsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIHRoaXNPYmplY3QtPnNldFN0cnVjdHVyZSh2bSwgc3RydWN0
dXJlKTsKKyAgICAgICAgfQorCisgICAgICAgIEFTU0VSVCghaXNWYWxpZE9mZnNldChzdHJ1Y3R1
cmUtPmdldCh2bSwgcHJvcGVydHlOYW1lLCBhdHRyaWJ1dGVzKSkpOwogCiAgICAgICAgIGlmIChv
ZmZzZXQgIT0gaW52YWxpZE9mZnNldCkKICAgICAgICAgICAgIHRoaXNPYmplY3QtPmxvY2F0aW9u
Rm9yT2Zmc2V0KG9mZnNldCktPmNsZWFyKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9PcHRpb25zTGlzdC5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvT3B0aW9uc0xpc3QuaAppbmRleCBmMzVjNWUxNTc0MzZiMmJkODAwYTA2ZDcxMjJkMGI2ZGE4
NGNhY2QxLi41NGIwMzViOGQ5ZDlmNjBjMmE3ZTFmYTUxZGYwMzRiNGE2ZGYzMWQ5IDEwMDY0NAot
LS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PcHRpb25zTGlzdC5oCisrKyBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09wdGlvbnNMaXN0LmgKQEAgLTM0OCw2ICszNDgs
NyBAQCBjb25zdGV4cHIgYm9vbCBlbmFibGVXZWJBc3NlbWJseVN0cmVhbWluZ0FwaSA9IGZhbHNl
OwogICAgIHYoQm9vbCwgdXNlR0MsIHRydWUsIE5vcm1hbCwgbnVsbHB0cikgXAogICAgIHYoQm9v
bCwgZ2NBdEVuZCwgZmFsc2UsIE5vcm1hbCwgIklmIHRydWUsIHRoZSBqc2MgQ0xJIHdpbGwgZG8g
YSBHQyBiZWZvcmUgZXhpdGluZyIpIFwKICAgICB2KEJvb2wsIGZvcmNlR0NTbG93UGF0aHMsIGZh
bHNlLCBOb3JtYWwsICJJZiB0cnVlLCB3ZSB3aWxsIGZvcmNlIGFsbCBKSVQgZmFzdCBhbGxvY2F0
aW9ucyBkb3duIHRoZWlyIHNsb3cgcGF0aHMuIikgXAorICAgIHYoQm9vbCwgZm9yY2VEaWREZWZl
ckdDV29yaywgZmFsc2UsIE5vcm1hbCwgIklmIHRydWUsIHdlIHdpbGwgZm9yY2UgYWxsIERlZmVy
R0MgZGVzdHJ1Y3Rpb25zIHRvIHBlcmZvcm0gYSBHQy4iKSBcCiAgICAgdihVbnNpZ25lZCwgZ2NN
YXhIZWFwU2l6ZSwgMCwgTm9ybWFsLCBudWxscHRyKSBcCiAgICAgdihVbnNpZ25lZCwgZm9yY2VS
QU1TaXplLCAwLCBOb3JtYWwsIG51bGxwdHIpIFwKICAgICB2KEJvb2wsIHJlY29yZEdDUGF1c2VU
aW1lcywgZmFsc2UsIE5vcm1hbCwgbnVsbHB0cikgXApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvUHJvcGVydHlNYXBIYXNoVGFibGUuaCBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL1Byb3BlcnR5TWFwSGFzaFRhYmxlLmgKaW5kZXggY2I2MDE1Y2YyMGU0
NTMwMTE1OWJiMDBkNzQyNjIzNzRmZWVjYjljZi4uMjcyY2Y5ODU2YzFhZThjNGNiZDQ3NDdmY2I0
MmM5NDJmMzQ1ZGIwYSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
UHJvcGVydHlNYXBIYXNoVGFibGUuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9Qcm9wZXJ0eU1hcEhhc2hUYWJsZS5oCkBAIC0zNDgsNiArMzQ4LDggQEAgaW5saW5lIFByb3Bl
cnR5VGFibGU6OlZhbHVlVHlwZSogUHJvcGVydHlUYWJsZTo6Z2V0KGNvbnN0IEtleVR5cGUmIGtl
eSkKIAogaW5saW5lIHN0ZDo6cGFpcjxQcm9wZXJ0eVRhYmxlOjpmaW5kX2l0ZXJhdG9yLCBib29s
PiBQcm9wZXJ0eVRhYmxlOjphZGQoY29uc3QgVmFsdWVUeXBlJiBlbnRyeSwgUHJvcGVydHlPZmZz
ZXQmIG9mZnNldCwgRWZmZWN0T25Qcm9wZXJ0eU9mZnNldCBvZmZzZXRFZmZlY3QpCiB7CisgICAg
QVNTRVJUKCFtX2RlbGV0ZWRPZmZzZXRzIHx8ICFtX2RlbGV0ZWRPZmZzZXRzLT5jb250YWlucyhv
ZmZzZXQpKTsKKwogICAgIC8vIExvb2sgZm9yIGEgdmFsdWUgd2l0aCBhIG1hdGNoaW5nIGtleSBh
bHJlYWR5IGluIHRoZSBhcnJheS4KICAgICBmaW5kX2l0ZXJhdG9yIGl0ZXIgPSBmaW5kKGVudHJ5
LmtleSk7CiAgICAgaWYgKGl0ZXIuZmlyc3QpIHsKQEAgLTQ1MSw2ICs0NTMsNyBAQCBpbmxpbmUg
dm9pZCBQcm9wZXJ0eVRhYmxlOjphZGREZWxldGVkT2Zmc2V0KFByb3BlcnR5T2Zmc2V0IG9mZnNl
dCkKIHsKICAgICBpZiAoIW1fZGVsZXRlZE9mZnNldHMpCiAgICAgICAgIG1fZGVsZXRlZE9mZnNl
dHMgPSBtYWtlVW5pcXVlPFZlY3RvcjxQcm9wZXJ0eU9mZnNldD4+KCk7CisgICAgQVNTRVJUKCFt
X2RlbGV0ZWRPZmZzZXRzLT5jb250YWlucyhvZmZzZXQpKTsKICAgICBtX2RlbGV0ZWRPZmZzZXRz
LT5hcHBlbmQob2Zmc2V0KTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvU3RydWN0dXJlLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0
cnVjdHVyZS5jcHAKaW5kZXggNWE2MTIxM2QzYjlhZGJkODBhMjRlNTMwOTBkNzM5YmQyM2IzMTQ4
MS4uNjg5Zjg0ZDAxMDBkNDA1MTQzZTQzZjMwMmY3MzczZmUwYjMyZjYxZCAxMDA2NDQKLS0tIGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlLmNwcAorKysgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmUuY3BwCkBAIC04NywyMiArODcsMjIgQEAg
aW5saW5lIHZvaWQgU3RydWN0dXJlVHJhbnNpdGlvblRhYmxlOjpzZXRTaW5nbGVUcmFuc2l0aW9u
KFN0cnVjdHVyZSogc3RydWN0dXJlKQogICAgIG1fZGF0YSA9IGJpdHdpc2VfY2FzdDxpbnRwdHJf
dD4oaW1wbCkgfCBVc2luZ1NpbmdsZVNsb3RGbGFnOwogfQogCi1ib29sIFN0cnVjdHVyZVRyYW5z
aXRpb25UYWJsZTo6Y29udGFpbnMoVW5pcXVlZFN0cmluZ0ltcGwqIHJlcCwgdW5zaWduZWQgYXR0
cmlidXRlcykgY29uc3QKK2Jvb2wgU3RydWN0dXJlVHJhbnNpdGlvblRhYmxlOjpjb250YWlucyhV
bmlxdWVkU3RyaW5nSW1wbCogcmVwLCB1bnNpZ25lZCBhdHRyaWJ1dGVzLCBib29sIGlzQWRkaXRp
b24pIGNvbnN0CiB7CiAgICAgaWYgKGlzVXNpbmdTaW5nbGVTbG90KCkpIHsKICAgICAgICAgU3Ry
dWN0dXJlKiB0cmFuc2l0aW9uID0gc2luZ2xlVHJhbnNpdGlvbigpOwotICAgICAgICByZXR1cm4g
dHJhbnNpdGlvbiAmJiB0cmFuc2l0aW9uLT5tX3RyYW5zaXRpb25Qcm9wZXJ0eU5hbWUgPT0gcmVw
ICYmIHRyYW5zaXRpb24tPnRyYW5zaXRpb25Qcm9wZXJ0eUF0dHJpYnV0ZXMoKSA9PSBhdHRyaWJ1
dGVzOworICAgICAgICByZXR1cm4gdHJhbnNpdGlvbiAmJiB0cmFuc2l0aW9uLT5tX3RyYW5zaXRp
b25Qcm9wZXJ0eU5hbWUgPT0gcmVwICYmIHRyYW5zaXRpb24tPnRyYW5zaXRpb25Qcm9wZXJ0eUF0
dHJpYnV0ZXMoKSA9PSBhdHRyaWJ1dGVzICYmIHRyYW5zaXRpb24tPmlzUHJvcGVydHlEZWxldGlv
blRyYW5zaXRpb24oKSA9PSAhaXNBZGRpdGlvbjsKICAgICB9Ci0gICAgcmV0dXJuIG1hcCgpLT5n
ZXQoc3RkOjptYWtlX3BhaXIocmVwLCBhdHRyaWJ1dGVzKSk7CisgICAgcmV0dXJuIG1hcCgpLT5n
ZXQoc3RkOjptYWtlX3R1cGxlKHJlcCwgYXR0cmlidXRlcywgaXNBZGRpdGlvbikpOwogfQogCi1p
bmxpbmUgU3RydWN0dXJlKiBTdHJ1Y3R1cmVUcmFuc2l0aW9uVGFibGU6OmdldChVbmlxdWVkU3Ry
aW5nSW1wbCogcmVwLCB1bnNpZ25lZCBhdHRyaWJ1dGVzKSBjb25zdAoraW5saW5lIFN0cnVjdHVy
ZSogU3RydWN0dXJlVHJhbnNpdGlvblRhYmxlOjpnZXQoVW5pcXVlZFN0cmluZ0ltcGwqIHJlcCwg
dW5zaWduZWQgYXR0cmlidXRlcywgYm9vbCBpc0FkZGl0aW9uKSBjb25zdAogewogICAgIGlmIChp
c1VzaW5nU2luZ2xlU2xvdCgpKSB7CiAgICAgICAgIFN0cnVjdHVyZSogdHJhbnNpdGlvbiA9IHNp
bmdsZVRyYW5zaXRpb24oKTsKLSAgICAgICAgcmV0dXJuICh0cmFuc2l0aW9uICYmIHRyYW5zaXRp
b24tPm1fdHJhbnNpdGlvblByb3BlcnR5TmFtZSA9PSByZXAgJiYgdHJhbnNpdGlvbi0+dHJhbnNp
dGlvblByb3BlcnR5QXR0cmlidXRlcygpID09IGF0dHJpYnV0ZXMpID8gdHJhbnNpdGlvbiA6IDA7
CisgICAgICAgIHJldHVybiAodHJhbnNpdGlvbiAmJiB0cmFuc2l0aW9uLT5tX3RyYW5zaXRpb25Q
cm9wZXJ0eU5hbWUgPT0gcmVwICYmIHRyYW5zaXRpb24tPnRyYW5zaXRpb25Qcm9wZXJ0eUF0dHJp
YnV0ZXMoKSA9PSBhdHRyaWJ1dGVzICYmIHRyYW5zaXRpb24tPmlzUHJvcGVydHlEZWxldGlvblRy
YW5zaXRpb24oKSA9PSAhaXNBZGRpdGlvbikgPyB0cmFuc2l0aW9uIDogMDsKICAgICB9Ci0gICAg
cmV0dXJuIG1hcCgpLT5nZXQoc3RkOjptYWtlX3BhaXIocmVwLCBhdHRyaWJ1dGVzKSk7CisgICAg
cmV0dXJuIG1hcCgpLT5nZXQoc3RkOjptYWtlX3R1cGxlKHJlcCwgYXR0cmlidXRlcywgaXNBZGRp
dGlvbikpOwogfQogCiB2b2lkIFN0cnVjdHVyZVRyYW5zaXRpb25UYWJsZTo6YWRkKFZNJiB2bSwg
U3RydWN0dXJlKiBzdHJ1Y3R1cmUpCkBAIC0xMjcsNyArMTI3LDcgQEAgdm9pZCBTdHJ1Y3R1cmVU
cmFuc2l0aW9uVGFibGU6OmFkZChWTSYgdm0sIFN0cnVjdHVyZSogc3RydWN0dXJlKQogICAgIC8v
IE5ld2VyIHZlcnNpb25zIG9mIHRoZSBTVEwgaGF2ZSBhbiBzdGQ6Om1ha2VfcGFpciBmdW5jdGlv
biB0aGF0IHRha2VzIHJ2YWx1ZSByZWZlcmVuY2VzLgogICAgIC8vIFdoZW4gZWl0aGVyIG9mIHRo
ZSBwYXJhbWV0ZXJzIGFyZSBiaXRmaWVsZHMsIHRoZSBDKysgY29tcGlsZXIgd2lsbCB0cnkgdG8g
YmluZCB0aGVtIGFzIGx2YWx1ZXMsIHdoaWNoIGlzIGludmFsaWQuIFRvIHdvcmsgYXJvdW5kIHRo
aXMsIHVzZSB1bmFyeSAiKyIgdG8gbWFrZSB0aGUgcGFyYW1ldGVyIGFuIHJ2YWx1ZS4KICAgICAv
LyBTZWUgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTU5MjYxIGZvciBt
b3JlIGRldGFpbHMKLSAgICBtYXAoKS0+c2V0KHN0ZDo6bWFrZV9wYWlyKHN0cnVjdHVyZS0+bV90
cmFuc2l0aW9uUHJvcGVydHlOYW1lLmdldCgpLCArc3RydWN0dXJlLT50cmFuc2l0aW9uUHJvcGVy
dHlBdHRyaWJ1dGVzKCkpLCBzdHJ1Y3R1cmUpOworICAgIG1hcCgpLT5zZXQoc3RkOjptYWtlX3R1
cGxlKHN0cnVjdHVyZS0+bV90cmFuc2l0aW9uUHJvcGVydHlOYW1lLmdldCgpLCArc3RydWN0dXJl
LT50cmFuc2l0aW9uUHJvcGVydHlBdHRyaWJ1dGVzKCksICFzdHJ1Y3R1cmUtPmlzUHJvcGVydHlE
ZWxldGlvblRyYW5zaXRpb24oKSksIHN0cnVjdHVyZSk7CiB9CiAKIHZvaWQgU3RydWN0dXJlOjpk
dW1wU3RhdGlzdGljcygpCkBAIC0yMDAsNyArMjAwLDggQEAgU3RydWN0dXJlOjpTdHJ1Y3R1cmUo
Vk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1ZhbHVlIHByb3RvdHlwZSwg
Y28KICAgICBzZXRTdGF0aWNQcm9wZXJ0aWVzUmVpZmllZChmYWxzZSk7CiAgICAgc2V0VHJhbnNp
dGlvbldhdGNocG9pbnRJc0xpa2VseVRvQmVGaXJlZChmYWxzZSk7CiAgICAgc2V0SGFzQmVlbkRp
Y3Rpb25hcnkoZmFsc2UpOwotICAgIHNldElzQWRkaW5nUHJvcGVydHlGb3JUcmFuc2l0aW9uKGZh
bHNlKTsKKyAgICBzZXRQcm90ZWN0UHJvcGVydHlUYWJsZVdoaWxlVHJhbnNpdGlvbmluZyhmYWxz
ZSk7CisgICAgc2V0SXNQcm9wZXJ0eURlbGV0aW9uVHJhbnNpdGlvbihmYWxzZSk7CiAgICAgc2V0
VHJhbnNpdGlvbk9mZnNldCh2bSwgaW52YWxpZE9mZnNldCk7CiAgICAgc2V0TWF4T2Zmc2V0KHZt
LCBpbnZhbGlkT2Zmc2V0KTsKICAKQEAgLTIzNiw3ICsyMzcsOCBAQCBTdHJ1Y3R1cmU6OlN0cnVj
dHVyZShWTSYgdm0pCiAgICAgc2V0U3RhdGljUHJvcGVydGllc1JlaWZpZWQoZmFsc2UpOwogICAg
IHNldFRyYW5zaXRpb25XYXRjaHBvaW50SXNMaWtlbHlUb0JlRmlyZWQoZmFsc2UpOwogICAgIHNl
dEhhc0JlZW5EaWN0aW9uYXJ5KGZhbHNlKTsKLSAgICBzZXRJc0FkZGluZ1Byb3BlcnR5Rm9yVHJh
bnNpdGlvbihmYWxzZSk7CisgICAgc2V0UHJvdGVjdFByb3BlcnR5VGFibGVXaGlsZVRyYW5zaXRp
b25pbmcoZmFsc2UpOworICAgIHNldElzUHJvcGVydHlEZWxldGlvblRyYW5zaXRpb24oZmFsc2Up
OwogICAgIHNldFRyYW5zaXRpb25PZmZzZXQodm0sIGludmFsaWRPZmZzZXQpOwogICAgIHNldE1h
eE9mZnNldCh2bSwgaW52YWxpZE9mZnNldCk7CiAgCkBAIC0yNzIsNyArMjc0LDggQEAgU3RydWN0
dXJlOjpTdHJ1Y3R1cmUoVk0mIHZtLCBTdHJ1Y3R1cmUqIHByZXZpb3VzLCBEZWZlcnJlZFN0cnVj
dHVyZVRyYW5zaXRpb25XYXQKICAgICBzZXREaWRUcmFuc2l0aW9uKHRydWUpOwogICAgIHNldFN0
YXRpY1Byb3BlcnRpZXNSZWlmaWVkKHByZXZpb3VzLT5zdGF0aWNQcm9wZXJ0aWVzUmVpZmllZCgp
KTsKICAgICBzZXRIYXNCZWVuRGljdGlvbmFyeShwcmV2aW91cy0+aGFzQmVlbkRpY3Rpb25hcnko
KSk7Ci0gICAgc2V0SXNBZGRpbmdQcm9wZXJ0eUZvclRyYW5zaXRpb24oZmFsc2UpOworICAgIHNl
dFByb3RlY3RQcm9wZXJ0eVRhYmxlV2hpbGVUcmFuc2l0aW9uaW5nKGZhbHNlKTsKKyAgICBzZXRJ
c1Byb3BlcnR5RGVsZXRpb25UcmFuc2l0aW9uKGZhbHNlKTsKICAgICBzZXRUcmFuc2l0aW9uT2Zm
c2V0KHZtLCBpbnZhbGlkT2Zmc2V0KTsKICAgICBzZXRNYXhPZmZzZXQodm0sIGludmFsaWRPZmZz
ZXQpOwogIApAQCAtMzU2LDcgKzM1OSw3IEBAIHZvaWQgU3RydWN0dXJlOjpmaW5kU3RydWN0dXJl
c0FuZE1hcEZvck1hdGVyaWFsaXphdGlvbihWZWN0b3I8U3RydWN0dXJlKiwgOD4mIHN0CiBQcm9w
ZXJ0eVRhYmxlKiBTdHJ1Y3R1cmU6Om1hdGVyaWFsaXplUHJvcGVydHlUYWJsZShWTSYgdm0sIGJv
b2wgc2V0UHJvcGVydHlUYWJsZSkKIHsKICAgICBBU1NFUlQoc3RydWN0dXJlKHZtKS0+Y2xhc3NJ
bmZvKCkgPT0gaW5mbygpKTsKLSAgICBBU1NFUlQoIWlzQWRkaW5nUHJvcGVydHlGb3JUcmFuc2l0
aW9uKCkpOworICAgIEFTU0VSVCghcHJvdGVjdFByb3BlcnR5VGFibGVXaGlsZVRyYW5zaXRpb25p
bmcoKSk7CiAgICAgCiAgICAgRGVmZXJHQyBkZWZlckdDKHZtLmhlYXApOwogICAgIApAQCAtMzg0
LDEwICszODcsMTkgQEAgUHJvcGVydHlUYWJsZSogU3RydWN0dXJlOjptYXRlcmlhbGl6ZVByb3Bl
cnR5VGFibGUoVk0mIHZtLCBib29sIHNldFByb3BlcnR5VGFibGUKICAgICAgICAgc3RydWN0dXJl
ID0gc3RydWN0dXJlc1tpXTsKICAgICAgICAgaWYgKCFzdHJ1Y3R1cmUtPm1fdHJhbnNpdGlvblBy
b3BlcnR5TmFtZSkKICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICBBU1NFUlQoaSA9PSBz
dHJ1Y3R1cmVzLnNpemUoKSAtIDEgfHwgc3RydWN0dXJlLT5tYXhPZmZzZXQoKSA+IHN0cnVjdHVy
ZXNbaSArIDFdLT5tYXhPZmZzZXQoKSk7CisgICAgICAgIGlmIChzdHJ1Y3R1cmUtPmlzUHJvcGVy
dHlEZWxldGlvblRyYW5zaXRpb24oKSkgeworICAgICAgICAgICAgYXV0byBpdGVtID0gdGFibGUt
PmZpbmQoc3RydWN0dXJlLT5tX3RyYW5zaXRpb25Qcm9wZXJ0eU5hbWUuZ2V0KCkpOworICAgICAg
ICAgICAgQVNTRVJUKGl0ZW0uZmlyc3QpOworICAgICAgICAgICAgdGFibGUtPnJlbW92ZShpdGVt
KTsKKyAgICAgICAgICAgIHRhYmxlLT5hZGREZWxldGVkT2Zmc2V0KHN0cnVjdHVyZS0+dHJhbnNp
dGlvbk9mZnNldCgpKTsKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CiAgICAgICAg
IFByb3BlcnR5TWFwRW50cnkgZW50cnkoc3RydWN0dXJlLT5tX3RyYW5zaXRpb25Qcm9wZXJ0eU5h
bWUuZ2V0KCksIHN0cnVjdHVyZS0+dHJhbnNpdGlvbk9mZnNldCgpLCBzdHJ1Y3R1cmUtPnRyYW5z
aXRpb25Qcm9wZXJ0eUF0dHJpYnV0ZXMoKSk7Ci0gICAgICAgIGF1dG8gbWF4T2Zmc2V0ID0gdGhp
cy0+bWF4T2Zmc2V0KCk7Ci0gICAgICAgIHRhYmxlLT5hZGQoZW50cnksIG1heE9mZnNldCwgUHJv
cGVydHlUYWJsZTo6UHJvcGVydHlPZmZzZXRNdXN0Tm90Q2hhbmdlKTsKKyAgICAgICAgYXV0byBu
ZXh0T2Zmc2V0ID0gdGFibGUtPm5leHRPZmZzZXQoc3RydWN0dXJlLT5pbmxpbmVDYXBhY2l0eSgp
KTsKKyAgICAgICAgQVNTRVJUX1VOVVNFRChuZXh0T2Zmc2V0LCBuZXh0T2Zmc2V0ID09IHN0cnVj
dHVyZS0+dHJhbnNpdGlvbk9mZnNldCgpKTsKKyAgICAgICAgYXV0byBvZmZzZXQgPSBzdHJ1Y3R1
cmUtPnRyYW5zaXRpb25PZmZzZXQoKTsKKyAgICAgICAgdGFibGUtPmFkZChlbnRyeSwgb2Zmc2V0
LCBQcm9wZXJ0eVRhYmxlOjpQcm9wZXJ0eU9mZnNldE11c3ROb3RDaGFuZ2UpOworICAgICAgICBB
U1NFUlQob2Zmc2V0ID09IHN0cnVjdHVyZS0+dHJhbnNpdGlvbk9mZnNldCgpKTsKICAgICB9CiAg
ICAgCiAgICAgY2hlY2tPZmZzZXRDb25zaXN0ZW5jeSgKQEAgLTQ4NCw3ICs0OTYsNiBAQCBTdHJ1
Y3R1cmUqIFN0cnVjdHVyZTo6YWRkTmV3UHJvcGVydHlUcmFuc2l0aW9uKFZNJiB2bSwgU3RydWN0
dXJlKiBzdHJ1Y3R1cmUsIFBybwogICAgICAgICBTdHJ1Y3R1cmUqIHRyYW5zaXRpb24gPSB0b0Nh
Y2hlYWJsZURpY3Rpb25hcnlUcmFuc2l0aW9uKHZtLCBzdHJ1Y3R1cmUsIGRlZmVycmVkKTsKICAg
ICAgICAgQVNTRVJUKHN0cnVjdHVyZSAhPSB0cmFuc2l0aW9uKTsKICAgICAgICAgb2Zmc2V0ID0g
dHJhbnNpdGlvbi0+YWRkKHZtLCBwcm9wZXJ0eU5hbWUsIGF0dHJpYnV0ZXMpOwotICAgICAgICB0
cmFuc2l0aW9uLT5zZXRUcmFuc2l0aW9uT2Zmc2V0KHZtLCBvZmZzZXQpOwogICAgICAgICByZXR1
cm4gdHJhbnNpdGlvbjsKICAgICB9CiAgICAgCkBAIC01MDAsMTAgKzUxMSwxMCBAQCBTdHJ1Y3R1
cmUqIFN0cnVjdHVyZTo6YWRkTmV3UHJvcGVydHlUcmFuc2l0aW9uKFZNJiB2bSwgU3RydWN0dXJl
KiBzdHJ1Y3R1cmUsIFBybwogICAgIC8vIEhvbGRpbmcgdGhlIGxvY2sgZW5zdXJlcyB0aGF0IHdl
IGVpdGhlciBkbyB0aGlzIGJlZm9yZSB0aGUgR0Mgc3RhcnRzIHNjYW5uaW5nIHRoZSBzdHJ1Y3R1
cmUsIGluCiAgICAgLy8gd2hpY2ggY2FzZSB0aGUgR0Mgd2lsbCBub3QgYmxvdyB0aGUgdGFibGUg
YXdheSwgb3Igd2UgZG8gaXQgYWZ0ZXIgdGhlIEdDIGFscmVhZHkgcmFuIGluIHdoaWNoCiAgICAg
Ly8gY2FzZSBhbGwgaXMgd2VsbC4gIElmIGl0IHdhc24ndCBmb3IgdGhlIGxvY2ssIHRoZSBHQyB3
b3VsZCBoYXZlIFRPQ1RPVTogaWYgY291bGQgcmVhZAotICAgIC8vIGlzQWRkaW5nUHJvcGVydHlG
b3JUcmFuc2l0aW9uIGJlZm9yZSB3ZSBzZXQgaXQgdG8gdHJ1ZSwgYW5kIHRoZW4gYmxvdyB0aGUg
dGFibGUgYXdheSBhZnRlci4KKyAgICAvLyBwcm90ZWN0UHJvcGVydHlUYWJsZVdoaWxlVHJhbnNp
dGlvbmluZyBiZWZvcmUgd2Ugc2V0IGl0IHRvIHRydWUsIGFuZCB0aGVuIGJsb3cgdGhlIHRhYmxl
IGF3YXkgYWZ0ZXIuCiAgICAgewogICAgICAgICBDb25jdXJyZW50SlNMb2NrZXIgbG9ja2VyKHRy
YW5zaXRpb24tPm1fbG9jayk7Ci0gICAgICAgIHRyYW5zaXRpb24tPnNldElzQWRkaW5nUHJvcGVy
dHlGb3JUcmFuc2l0aW9uKHRydWUpOworICAgICAgICB0cmFuc2l0aW9uLT5zZXRQcm90ZWN0UHJv
cGVydHlUYWJsZVdoaWxlVHJhbnNpdGlvbmluZyh0cnVlKTsKICAgICB9CiAKICAgICB0cmFuc2l0
aW9uLT5tX2Jsb2Iuc2V0SW5kZXhpbmdNb2RlSW5jbHVkaW5nSGlzdG9yeShzdHJ1Y3R1cmUtPmlu
ZGV4aW5nTW9kZUluY2x1ZGluZ0hpc3RvcnkoKSAmIH5Db3B5T25Xcml0ZSk7CkBAIC01MTgsMTIg
KzUyOSwxMSBAQCBTdHJ1Y3R1cmUqIFN0cnVjdHVyZTo6YWRkTmV3UHJvcGVydHlUcmFuc2l0aW9u
KFZNJiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIFBybwogICAgIC8vIE5vdyB0aGF0IGV2ZXJ5
dGhpbmcgaXMgZmluZSB3aXRoIHRoZSBuZXcgc3RydWN0dXJlJ3MgYm9va2tlZXBpbmcsIHRoZSBH
QyBpcyBmcmVlIHRvIGJsb3cgdGhlCiAgICAgLy8gdGFibGUgYXdheSBpZiBpdCB3YW50cy4gV2Ug
Y2FuIG5vdyByZWJ1aWxkIGl0IGZpbmUuCiAgICAgV1RGOjpzdG9yZVN0b3JlRmVuY2UoKTsKLSAg
ICB0cmFuc2l0aW9uLT5zZXRJc0FkZGluZ1Byb3BlcnR5Rm9yVHJhbnNpdGlvbihmYWxzZSk7Cisg
ICAgdHJhbnNpdGlvbi0+c2V0UHJvdGVjdFByb3BlcnR5VGFibGVXaGlsZVRyYW5zaXRpb25pbmco
ZmFsc2UpOwogCiAgICAgY2hlY2tPZmZzZXQodHJhbnNpdGlvbi0+dHJhbnNpdGlvbk9mZnNldCgp
LCB0cmFuc2l0aW9uLT5pbmxpbmVDYXBhY2l0eSgpKTsKICAgICB7Ci0gICAgICAgIENvbmN1cnJl
bnRKU0xvY2tlciBsb2NrZXIoc3RydWN0dXJlLT5tX2xvY2spOwotICAgICAgICBEZWZlckdDIGRl
ZmVyR0Modm0uaGVhcCk7CisgICAgICAgIEdDU2FmZUNvbmN1cnJlbnRKU0xvY2tlciBsb2NrZXIo
c3RydWN0dXJlLT5tX2xvY2ssIHZtLmhlYXApOwogICAgICAgICBzdHJ1Y3R1cmUtPm1fdHJhbnNp
dGlvblRhYmxlLmFkZCh2bSwgdHJhbnNpdGlvbik7CiAgICAgfQogICAgIHRyYW5zaXRpb24tPmNo
ZWNrT2Zmc2V0Q29uc2lzdGVuY3koKTsKQEAgLTUzMSwyNyArNTQxLDg0IEBAIFN0cnVjdHVyZSog
U3RydWN0dXJlOjphZGROZXdQcm9wZXJ0eVRyYW5zaXRpb24oVk0mIHZtLCBTdHJ1Y3R1cmUqIHN0
cnVjdHVyZSwgUHJvCiAgICAgcmV0dXJuIHRyYW5zaXRpb247CiB9CiAKLVN0cnVjdHVyZSogU3Ry
dWN0dXJlOjpyZW1vdmVQcm9wZXJ0eVRyYW5zaXRpb24oVk0mIHZtLCBTdHJ1Y3R1cmUqIHN0cnVj
dHVyZSwgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwgUHJvcGVydHlPZmZzZXQmIG9mZnNldCkK
LXsKLSAgICAvLyBOT1RFOiBUaGVyZSBhcmUgc29tZSBnb29kIHJlYXNvbnMgd2h5IHRoaXMgZ29l
cyBkaXJlY3RseSB0byB1bmNhY2hlYWJsZSBkaWN0aW9uYXJ5IHJhdGhlciB0aGFuCi0gICAgLy8g
Y2FjaGluZyB0aGUgcmVtb3ZhbC4gV2UgY2FuIGZpeCBhbGwgb2YgdGhlc2UgdGhpbmdzLCBidXQg
d2UgbXVzdCByZW1lbWJlciB0byBkbyBzbywgaWYgd2UgZXZlciB0cnkKLSAgICAvLyB0byBvcHRp
bWl6ZSB0aGlzIGNhc2UuCi0gICAgLy8KLSAgICAvLyAtIENhY2hlZCB0cmFuc2l0aW9ucyB1c3Vh
bGx5IHN0ZWFsIHRoZSBwcm9wZXJ0eSB0YWJsZSwgYW5kIGFzc3VtZSB0aGF0IHRoaXMgaXMgcG9z
c2libGUgYmVjYXVzZSB0aGV5Ci0gICAgLy8gICBjYW4ganVzdCByZWJ1aWxkIHRoZSB0YWJsZSBi
eSBsb29raW5nIGF0IHBhc3QgdHJhbnNpdGlvbnMuIFRoYXQgY29kZSBhc3N1bWVzIHRoYXQgdGhl
IHRhYmxlIG9ubHkKLSAgICAvLyAgIGdyZXcgYW5kIG5ldmVyIHNocmFuay4gVG8gc3VwcG9ydCBy
ZW1vdmFscywgd2UnZCBoYXZlIHRvIGNoYW5nZSB0aGUgcHJvcGVydHkgdGFibGUgbWF0ZXJpYWxp
emF0aW9uCi0gICAgLy8gICBjb2RlIHRvIGhhbmRsZSBkZWxldGlvbnMuIEFsc28sIHdlIGhhdmUg
bG9naWMgdG8gZ2V0IHRoZSBsaXN0IG9mIHByb3BlcnRpZXMgb24gYSBzdHJ1Y3R1cmUgdGhhdAot
ICAgIC8vICAgbGFja3MgYSBwcm9wZXJ0eSB0YWJsZSBieSBqdXN0IGxvb2tpbmcgYmFjayB0aHJv
dWdoIHRoZSBzZXQgb2YgdHJhbnNpdGlvbnMgc2luY2UgdGhlIGxhc3QKLSAgICAvLyAgIHN0cnVj
dHVyZSB0aGF0IGhhZCBhIHBpbm5lZCB0YWJsZS4gVGhhdCBsb2dpYyB3b3VsZCBhbHNvIGhhdmUg
dG8gYmUgY2hhbmdlZCB0byBoYW5kbGUgY2FjaGVkCi0gICAgLy8gICByZW1vdmFscy4KLSAgICAv
LworU3RydWN0dXJlKiBTdHJ1Y3R1cmU6OnJlbW92ZVByb3BlcnR5VHJhbnNpdGlvbihWTSYgdm0s
IFN0cnVjdHVyZSogc3RydWN0dXJlLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBQcm9wZXJ0
eU9mZnNldCYgb2Zmc2V0LCBEZWZlcnJlZFN0cnVjdHVyZVRyYW5zaXRpb25XYXRjaHBvaW50Rmly
ZSogZGVmZXJyZWQpCit7CisgICAgU3RydWN0dXJlKiBuZXdTdHJ1Y3R1cmUgPSByZW1vdmVQcm9w
ZXJ0eVRyYW5zaXRpb25Gcm9tRXhpc3RpbmdTdHJ1Y3R1cmUoCisgICAgICAgIHZtLCBzdHJ1Y3R1
cmUsIHByb3BlcnR5TmFtZSwgb2Zmc2V0LCBkZWZlcnJlZCk7CisgICAgaWYgKG5ld1N0cnVjdHVy
ZSkKKyAgICAgICAgcmV0dXJuIG5ld1N0cnVjdHVyZTsKKworICAgIHJldHVybiByZW1vdmVOZXdQ
cm9wZXJ0eVRyYW5zaXRpb24oCisgICAgICAgIHZtLCBzdHJ1Y3R1cmUsIHByb3BlcnR5TmFtZSwg
b2Zmc2V0LCBkZWZlcnJlZCk7Cit9CisKK1N0cnVjdHVyZSogU3RydWN0dXJlOjpyZW1vdmVQcm9w
ZXJ0eVRyYW5zaXRpb25Gcm9tRXhpc3RpbmdTdHJ1Y3R1cmUoVk0mIHZtLCBTdHJ1Y3R1cmUqIHN0
cnVjdHVyZSwgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwgUHJvcGVydHlPZmZzZXQmIG9mZnNl
dCwgRGVmZXJyZWRTdHJ1Y3R1cmVUcmFuc2l0aW9uV2F0Y2hwb2ludEZpcmUqKQoreworICAgIEFT
U0VSVCghaXNDb21waWxhdGlvblRocmVhZCgpKTsKICAgICBBU1NFUlQoIXN0cnVjdHVyZS0+aXNV
bmNhY2hlYWJsZURpY3Rpb25hcnkoKSk7CisgICAgQVNTRVJUKHN0cnVjdHVyZS0+aXNPYmplY3Qo
KSk7CisKKyAgICB1bnNpZ25lZCBhdHRyaWJ1dGVzOworICAgIHN0cnVjdHVyZS0+Z2V0KHZtLCBw
cm9wZXJ0eU5hbWUsIGF0dHJpYnV0ZXMpOworCisgICAgaWYgKFN0cnVjdHVyZSogZXhpc3RpbmdU
cmFuc2l0aW9uID0gc3RydWN0dXJlLT5tX3RyYW5zaXRpb25UYWJsZS5nZXQocHJvcGVydHlOYW1l
LnVpZCgpLCBhdHRyaWJ1dGVzLCBmYWxzZSkpIHsKKyAgICAgICAgdmFsaWRhdGVPZmZzZXQoZXhp
c3RpbmdUcmFuc2l0aW9uLT50cmFuc2l0aW9uT2Zmc2V0KCksIGV4aXN0aW5nVHJhbnNpdGlvbi0+
aW5saW5lQ2FwYWNpdHkoKSk7CisgICAgICAgIG9mZnNldCA9IGV4aXN0aW5nVHJhbnNpdGlvbi0+
dHJhbnNpdGlvbk9mZnNldCgpOworICAgICAgICByZXR1cm4gZXhpc3RpbmdUcmFuc2l0aW9uOwor
ICAgIH0KIAotICAgIFN0cnVjdHVyZSogdHJhbnNpdGlvbiA9IHRvVW5jYWNoZWFibGVEaWN0aW9u
YXJ5VHJhbnNpdGlvbih2bSwgc3RydWN0dXJlKTsKKyAgICByZXR1cm4gbnVsbHB0cjsKK30KIAot
ICAgIG9mZnNldCA9IHRyYW5zaXRpb24tPnJlbW92ZShwcm9wZXJ0eU5hbWUpOworU3RydWN0dXJl
KiBTdHJ1Y3R1cmU6OnJlbW92ZU5ld1Byb3BlcnR5VHJhbnNpdGlvbihWTSYgdm0sIFN0cnVjdHVy
ZSogc3RydWN0dXJlLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBQcm9wZXJ0eU9mZnNldCYg
b2Zmc2V0LCBEZWZlcnJlZFN0cnVjdHVyZVRyYW5zaXRpb25XYXRjaHBvaW50RmlyZSogZGVmZXJy
ZWQpCit7CisgICAgQVNTRVJUKCFzdHJ1Y3R1cmUtPmlzVW5jYWNoZWFibGVEaWN0aW9uYXJ5KCkp
OworICAgIEFTU0VSVChzdHJ1Y3R1cmUtPmlzT2JqZWN0KCkpOworICAgIEFTU0VSVCghU3RydWN0
dXJlOjpyZW1vdmVQcm9wZXJ0eVRyYW5zaXRpb25Gcm9tRXhpc3RpbmdTdHJ1Y3R1cmUodm0sIHN0
cnVjdHVyZSwgcHJvcGVydHlOYW1lLCBvZmZzZXQsIGRlZmVycmVkKSk7CisKKyAgICBpbnQgdHJh
bnNpdGlvbkNvdW50ID0gMDsKKyAgICBmb3IgKGF1dG8qIHMgPSBzdHJ1Y3R1cmU7IHM7IHMgPSBz
LT5wcmV2aW91c0lEKCkpCisgICAgICAgICsrdHJhbnNpdGlvbkNvdW50OwogCisgICAgaWYgKHRy
YW5zaXRpb25Db3VudCA+IHNfbWF4VHJhbnNpdGlvbkxlbmd0aCkgeworICAgICAgICBBU1NFUlQo
IWlzQ29weU9uV3JpdGUoc3RydWN0dXJlLT5pbmRleGluZ01vZGUoKSkpOworICAgICAgICBTdHJ1
Y3R1cmUqIHRyYW5zaXRpb24gPSB0b1VuY2FjaGVhYmxlRGljdGlvbmFyeVRyYW5zaXRpb24odm0s
IHN0cnVjdHVyZSwgZGVmZXJyZWQpOworICAgICAgICBBU1NFUlQoc3RydWN0dXJlICE9IHRyYW5z
aXRpb24pOworICAgICAgICBvZmZzZXQgPSB0cmFuc2l0aW9uLT5yZW1vdmUodm0sIHByb3BlcnR5
TmFtZSk7CisgICAgICAgIHJldHVybiB0cmFuc2l0aW9uOworICAgIH0KKworICAgIFN0cnVjdHVy
ZSogdHJhbnNpdGlvbiA9IGNyZWF0ZSh2bSwgc3RydWN0dXJlLCBkZWZlcnJlZCk7CisgICAgdHJh
bnNpdGlvbi0+bV9jYWNoZWRQcm90b3R5cGVDaGFpbi5zZXRNYXlCZU51bGwodm0sIHRyYW5zaXRp
b24sIHN0cnVjdHVyZS0+bV9jYWNoZWRQcm90b3R5cGVDaGFpbi5nZXQoKSk7CisKKyAgICAvLyBX
aGlsZSB3ZSBhcmUgZGVsZXRpbmcgdGhlIHByb3BlcnR5LCB3ZSBuZWVkIHRvIG1ha2Ugc3VyZSB0
aGUgdGFibGUgaXMgbm90IGNsZWFyZWQuCisgICAgeworICAgICAgICBDb25jdXJyZW50SlNMb2Nr
ZXIgbG9ja2VyKHRyYW5zaXRpb24tPm1fbG9jayk7CisgICAgICAgIHRyYW5zaXRpb24tPnNldFBy
b3RlY3RQcm9wZXJ0eVRhYmxlV2hpbGVUcmFuc2l0aW9uaW5nKHRydWUpOworICAgIH0KKworICAg
IHRyYW5zaXRpb24tPm1fYmxvYi5zZXRJbmRleGluZ01vZGVJbmNsdWRpbmdIaXN0b3J5KHN0cnVj
dHVyZS0+aW5kZXhpbmdNb2RlSW5jbHVkaW5nSGlzdG9yeSgpICYgfkNvcHlPbldyaXRlKTsKKyAg
ICB0cmFuc2l0aW9uLT5tX3RyYW5zaXRpb25Qcm9wZXJ0eU5hbWUgPSBwcm9wZXJ0eU5hbWUudWlk
KCk7CisgICAgdHJhbnNpdGlvbi0+c2V0UHJvcGVydHlUYWJsZSh2bSwgc3RydWN0dXJlLT50YWtl
UHJvcGVydHlUYWJsZU9yQ2xvbmVJZlBpbm5lZCh2bSkpOworICAgIHRyYW5zaXRpb24tPnNldE1h
eE9mZnNldCh2bSwgc3RydWN0dXJlLT5tYXhPZmZzZXQoKSk7CisgICAgdHJhbnNpdGlvbi0+c2V0
SXNQcm9wZXJ0eURlbGV0aW9uVHJhbnNpdGlvbih0cnVlKTsKKworICAgIG9mZnNldCA9IHRyYW5z
aXRpb24tPnJlbW92ZSh2bSwgcHJvcGVydHlOYW1lKTsKKyAgICBBU1NFUlQob2Zmc2V0ICE9IGlu
dmFsaWRPZmZzZXQpOworICAgIHRyYW5zaXRpb24tPnNldFRyYW5zaXRpb25PZmZzZXQodm0sIG9m
ZnNldCk7CisKKyAgICAvLyBOb3cgdGhhdCBldmVyeXRoaW5nIGlzIGZpbmUgd2l0aCB0aGUgbmV3
IHN0cnVjdHVyZSdzIGJvb2trZWVwaW5nLCB0aGUgR0MgaXMgZnJlZSB0byBibG93IHRoZQorICAg
IC8vIHRhYmxlIGF3YXkgaWYgaXQgd2FudHMuIFdlIGNhbiBub3cgcmVidWlsZCBpdCBmaW5lLgor
ICAgIFdURjo6c3RvcmVTdG9yZUZlbmNlKCk7CisgICAgdHJhbnNpdGlvbi0+c2V0UHJvdGVjdFBy
b3BlcnR5VGFibGVXaGlsZVRyYW5zaXRpb25pbmcoZmFsc2UpOworCisgICAgY2hlY2tPZmZzZXQo
dHJhbnNpdGlvbi0+dHJhbnNpdGlvbk9mZnNldCgpLCB0cmFuc2l0aW9uLT5pbmxpbmVDYXBhY2l0
eSgpKTsKKyAgICB7CisgICAgICAgIEdDU2FmZUNvbmN1cnJlbnRKU0xvY2tlciBsb2NrZXIoc3Ry
dWN0dXJlLT5tX2xvY2ssIHZtLmhlYXApOworICAgICAgICBzdHJ1Y3R1cmUtPm1fdHJhbnNpdGlv
blRhYmxlLmFkZCh2bSwgdHJhbnNpdGlvbik7CisgICAgfQogICAgIHRyYW5zaXRpb24tPmNoZWNr
T2Zmc2V0Q29uc2lzdGVuY3koKTsKKyAgICBzdHJ1Y3R1cmUtPmNoZWNrT2Zmc2V0Q29uc2lzdGVu
Y3koKTsKICAgICByZXR1cm4gdHJhbnNpdGlvbjsKIH0KIApAQCAtNjE0LDkgKzY4MSw5IEBAIFN0
cnVjdHVyZSogU3RydWN0dXJlOjp0b0NhY2hlYWJsZURpY3Rpb25hcnlUcmFuc2l0aW9uKFZNJiB2
bSwgU3RydWN0dXJlKiBzdHJ1Y3R1CiAgICAgcmV0dXJuIHRvRGljdGlvbmFyeVRyYW5zaXRpb24o
dm0sIHN0cnVjdHVyZSwgQ2FjaGVkRGljdGlvbmFyeUtpbmQsIGRlZmVycmVkKTsKIH0KIAotU3Ry
dWN0dXJlKiBTdHJ1Y3R1cmU6OnRvVW5jYWNoZWFibGVEaWN0aW9uYXJ5VHJhbnNpdGlvbihWTSYg
dm0sIFN0cnVjdHVyZSogc3RydWN0dXJlKQorU3RydWN0dXJlKiBTdHJ1Y3R1cmU6OnRvVW5jYWNo
ZWFibGVEaWN0aW9uYXJ5VHJhbnNpdGlvbihWTSYgdm0sIFN0cnVjdHVyZSogc3RydWN0dXJlLCBE
ZWZlcnJlZFN0cnVjdHVyZVRyYW5zaXRpb25XYXRjaHBvaW50RmlyZSogZGVmZXJyZWQpCiB7Ci0g
ICAgcmV0dXJuIHRvRGljdGlvbmFyeVRyYW5zaXRpb24odm0sIHN0cnVjdHVyZSwgVW5jYWNoZWRE
aWN0aW9uYXJ5S2luZCk7CisgICAgcmV0dXJuIHRvRGljdGlvbmFyeVRyYW5zaXRpb24odm0sIHN0
cnVjdHVyZSwgVW5jYWNoZWREaWN0aW9uYXJ5S2luZCwgZGVmZXJyZWQpOwogfQogCiBTdHJ1Y3R1
cmUqIFN0cnVjdHVyZTo6c2VhbFRyYW5zaXRpb24oVk0mIHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVy
ZSkKQEAgLTk3Niw5ICsxMDQzLDExIEBAIFByb3BlcnR5T2Zmc2V0IFN0cnVjdHVyZTo6YWRkKFZN
JiB2bSwgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwgdW5zaWduZWQgYXR0cmliCiAgICAgICAg
IH0pOwogfQogCi1Qcm9wZXJ0eU9mZnNldCBTdHJ1Y3R1cmU6OnJlbW92ZShQcm9wZXJ0eU5hbWUg
cHJvcGVydHlOYW1lKQorUHJvcGVydHlPZmZzZXQgU3RydWN0dXJlOjpyZW1vdmUoVk0mIHZtLCBQ
cm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lKQogewotICAgIHJldHVybiByZW1vdmUocHJvcGVydHlO
YW1lLCBbXSAoY29uc3QgQ29uY3VycmVudEpTTG9ja2VyJiwgUHJvcGVydHlPZmZzZXQpIHsgfSk7
CisgICAgcmV0dXJuIHJlbW92ZTxTaG91bGRQaW46Ok5vPih2bSwgcHJvcGVydHlOYW1lLCBbdGhp
cywgJnZtXSAoY29uc3QgR0NTYWZlQ29uY3VycmVudEpTTG9ja2VyJiwgUHJvcGVydHlPZmZzZXQs
IFByb3BlcnR5T2Zmc2V0IG5ld01heE9mZnNldCkgeworICAgICAgICBzZXRNYXhPZmZzZXQodm0s
IG5ld01heE9mZnNldCk7CisgICAgfSk7CiB9CiAKIHZvaWQgU3RydWN0dXJlOjpnZXRQcm9wZXJ0
eU5hbWVzRnJvbVN0cnVjdHVyZShWTSYgdm0sIFByb3BlcnR5TmFtZUFycmF5JiBwcm9wZXJ0eU5h
bWVzLCBFbnVtZXJhdGlvbk1vZGUgbW9kZSkKQEAgLTEwNTgsNyArMTEyNyw3IEBAIHZvaWQgU3Ry
dWN0dXJlOjp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3Ip
CiAgICAgfQogICAgIHZpc2l0b3IuYXBwZW5kKHRoaXNPYmplY3QtPm1fcHJldmlvdXNPclJhcmVE
YXRhKTsKIAotICAgIGlmICh0aGlzT2JqZWN0LT5pc1Bpbm5lZFByb3BlcnR5VGFibGUoKSB8fCB0
aGlzT2JqZWN0LT5pc0FkZGluZ1Byb3BlcnR5Rm9yVHJhbnNpdGlvbigpKSB7CisgICAgaWYgKHRo
aXNPYmplY3QtPmlzUGlubmVkUHJvcGVydHlUYWJsZSgpIHx8IHRoaXNPYmplY3QtPnByb3RlY3RQ
cm9wZXJ0eVRhYmxlV2hpbGVUcmFuc2l0aW9uaW5nKCkpIHsKICAgICAgICAgLy8gTk9URTogVGhp
cyBjYW4gaW50ZXJsZWF2ZSBpbiBwaW4oKSwgaW4gd2hpY2ggY2FzZSBpdCBtYXkgc2VlIGEgbnVs
bCBwcm9wZXJ0eSB0YWJsZS4KICAgICAgICAgLy8gVGhhdCdzIGZpbmUsIGJlY2F1c2UgdGhlbiB0
aGUgYmFycmllciB3aWxsIGZpcmUgYW5kIHdlIHdpbGwgc2NhbiB0aGlzIGFnYWluLgogICAgICAg
ICB2aXNpdG9yLmFwcGVuZCh0aGlzT2JqZWN0LT5tX3Byb3BlcnR5VGFibGVVbnNhZmUpOwpkaWZm
IC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlLmggYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmUuaAppbmRleCAzOGRjMWQzOWYxZTg2
N2QwNGYxMTUzZmU0NDdmZTRjNzIwY2Q1NjNiLi5mZjNiYTU2ODZjZTI3NjEwMmYwOTgxY2E1MDM5
MjgzM2NhMDJkMTE5IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9T
dHJ1Y3R1cmUuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmUu
aApAQCAtMTg3LDExICsxODcsMTMgQEAgcHVibGljOgogICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0
YXRpYyBTdHJ1Y3R1cmUqIGFkZE5ld1Byb3BlcnR5VHJhbnNpdGlvbihWTSYsIFN0cnVjdHVyZSos
IFByb3BlcnR5TmFtZSwgdW5zaWduZWQgYXR0cmlidXRlcywgUHJvcGVydHlPZmZzZXQmLCBQdXRQ
cm9wZXJ0eVNsb3Q6OkNvbnRleHQgPSBQdXRQcm9wZXJ0eVNsb3Q6OlVua25vd25Db250ZXh0LCBE
ZWZlcnJlZFN0cnVjdHVyZVRyYW5zaXRpb25XYXRjaHBvaW50RmlyZSogPSBudWxscHRyKTsKICAg
ICBzdGF0aWMgU3RydWN0dXJlKiBhZGRQcm9wZXJ0eVRyYW5zaXRpb25Ub0V4aXN0aW5nU3RydWN0
dXJlQ29uY3VycmVudGx5KFN0cnVjdHVyZSosIFVuaXF1ZWRTdHJpbmdJbXBsKiB1aWQsIHVuc2ln
bmVkIGF0dHJpYnV0ZXMsIFByb3BlcnR5T2Zmc2V0Jik7CiAgICAgSlNfRVhQT1JUX1BSSVZBVEUg
c3RhdGljIFN0cnVjdHVyZSogYWRkUHJvcGVydHlUcmFuc2l0aW9uVG9FeGlzdGluZ1N0cnVjdHVy
ZShTdHJ1Y3R1cmUqLCBQcm9wZXJ0eU5hbWUsIHVuc2lnbmVkIGF0dHJpYnV0ZXMsIFByb3BlcnR5
T2Zmc2V0Jik7Ci0gICAgc3RhdGljIFN0cnVjdHVyZSogcmVtb3ZlUHJvcGVydHlUcmFuc2l0aW9u
KFZNJiwgU3RydWN0dXJlKiwgUHJvcGVydHlOYW1lLCBQcm9wZXJ0eU9mZnNldCYpOworICAgIHN0
YXRpYyBTdHJ1Y3R1cmUqIHJlbW92ZU5ld1Byb3BlcnR5VHJhbnNpdGlvbihWTSYsIFN0cnVjdHVy
ZSosIFByb3BlcnR5TmFtZSwgUHJvcGVydHlPZmZzZXQmLCBEZWZlcnJlZFN0cnVjdHVyZVRyYW5z
aXRpb25XYXRjaHBvaW50RmlyZSogPSBudWxscHRyKTsKKyAgICBzdGF0aWMgU3RydWN0dXJlKiBy
ZW1vdmVQcm9wZXJ0eVRyYW5zaXRpb24oVk0mLCBTdHJ1Y3R1cmUqLCBQcm9wZXJ0eU5hbWUsIFBy
b3BlcnR5T2Zmc2V0JiwgRGVmZXJyZWRTdHJ1Y3R1cmVUcmFuc2l0aW9uV2F0Y2hwb2ludEZpcmUq
ID0gbnVsbHB0cik7CisgICAgc3RhdGljIFN0cnVjdHVyZSogcmVtb3ZlUHJvcGVydHlUcmFuc2l0
aW9uRnJvbUV4aXN0aW5nU3RydWN0dXJlKFZNJiwgU3RydWN0dXJlKiwgUHJvcGVydHlOYW1lLCBQ
cm9wZXJ0eU9mZnNldCYsIERlZmVycmVkU3RydWN0dXJlVHJhbnNpdGlvbldhdGNocG9pbnRGaXJl
KiA9IG51bGxwdHIpOwogICAgIHN0YXRpYyBTdHJ1Y3R1cmUqIGNoYW5nZVByb3RvdHlwZVRyYW5z
aXRpb24oVk0mLCBTdHJ1Y3R1cmUqLCBKU1ZhbHVlIHByb3RvdHlwZSwgRGVmZXJyZWRTdHJ1Y3R1
cmVUcmFuc2l0aW9uV2F0Y2hwb2ludEZpcmUmKTsKICAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0
aWMgU3RydWN0dXJlKiBhdHRyaWJ1dGVDaGFuZ2VUcmFuc2l0aW9uKFZNJiwgU3RydWN0dXJlKiwg
UHJvcGVydHlOYW1lLCB1bnNpZ25lZCBhdHRyaWJ1dGVzKTsKICAgICBKU19FWFBPUlRfUFJJVkFU
RSBzdGF0aWMgU3RydWN0dXJlKiB0b0NhY2hlYWJsZURpY3Rpb25hcnlUcmFuc2l0aW9uKFZNJiwg
U3RydWN0dXJlKiwgRGVmZXJyZWRTdHJ1Y3R1cmVUcmFuc2l0aW9uV2F0Y2hwb2ludEZpcmUqID0g
bnVsbHB0cik7Ci0gICAgc3RhdGljIFN0cnVjdHVyZSogdG9VbmNhY2hlYWJsZURpY3Rpb25hcnlU
cmFuc2l0aW9uKFZNJiwgU3RydWN0dXJlKik7CisgICAgc3RhdGljIFN0cnVjdHVyZSogdG9VbmNh
Y2hlYWJsZURpY3Rpb25hcnlUcmFuc2l0aW9uKFZNJiwgU3RydWN0dXJlKiwgRGVmZXJyZWRTdHJ1
Y3R1cmVUcmFuc2l0aW9uV2F0Y2hwb2ludEZpcmUqID0gbnVsbHB0cik7CiAgICAgSlNfRVhQT1JU
X1BSSVZBVEUgc3RhdGljIFN0cnVjdHVyZSogc2VhbFRyYW5zaXRpb24oVk0mLCBTdHJ1Y3R1cmUq
KTsKICAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMgU3RydWN0dXJlKiBmcmVlemVUcmFuc2l0
aW9uKFZNJiwgU3RydWN0dXJlKik7CiAgICAgc3RhdGljIFN0cnVjdHVyZSogcHJldmVudEV4dGVu
c2lvbnNUcmFuc2l0aW9uKFZNJiwgU3RydWN0dXJlKik7CkBAIC00NDAsMTAgKzQ0Miw2IEBAIHB1
YmxpYzoKICAgICB7CiAgICAgICAgIHJldHVybiBzdGQ6Om1pbjx1bnNpZ25lZD4obWF4T2Zmc2V0
KCkgKyAxLCBtX2lubGluZUNhcGFjaXR5KTsKICAgICB9Ci0gICAgdW5zaWduZWQgdG90YWxTdG9y
YWdlU2l6ZSgpIGNvbnN0Ci0gICAgewotICAgICAgICByZXR1cm4gbnVtYmVyT2ZTbG90c0Zvck1h
eE9mZnNldChtYXhPZmZzZXQoKSwgbV9pbmxpbmVDYXBhY2l0eSk7Ci0gICAgfQogICAgIHVuc2ln
bmVkIHRvdGFsU3RvcmFnZUNhcGFjaXR5KCkgY29uc3QKICAgICB7CiAgICAgICAgIEFTU0VSVChz
dHJ1Y3R1cmUoKS0+Y2xhc3NJbmZvKCkgPT0gaW5mbygpKTsKQEAgLTY5MSw4ICs2ODksOSBAQCBw
dWJsaWM6CiAgICAgREVGSU5FX0JJVEZJRUxEKGJvb2wsIGRpZFdhdGNoSW50ZXJuYWxQcm9wZXJ0
aWVzLCBEaWRXYXRjaEludGVybmFsUHJvcGVydGllcywgMSwgMjUpOwogICAgIERFRklORV9CSVRG
SUVMRChib29sLCB0cmFuc2l0aW9uV2F0Y2hwb2ludElzTGlrZWx5VG9CZUZpcmVkLCBUcmFuc2l0
aW9uV2F0Y2hwb2ludElzTGlrZWx5VG9CZUZpcmVkLCAxLCAyNik7CiAgICAgREVGSU5FX0JJVEZJ
RUxEKGJvb2wsIGhhc0JlZW5EaWN0aW9uYXJ5LCBIYXNCZWVuRGljdGlvbmFyeSwgMSwgMjcpOwot
ICAgIERFRklORV9CSVRGSUVMRChib29sLCBpc0FkZGluZ1Byb3BlcnR5Rm9yVHJhbnNpdGlvbiwg
SXNBZGRpbmdQcm9wZXJ0eUZvclRyYW5zaXRpb24sIDEsIDI4KTsKKyAgICBERUZJTkVfQklURklF
TEQoYm9vbCwgcHJvdGVjdFByb3BlcnR5VGFibGVXaGlsZVRyYW5zaXRpb25pbmcsIFByb3RlY3RQ
cm9wZXJ0eVRhYmxlV2hpbGVUcmFuc2l0aW9uaW5nLCAxLCAyOCk7CiAgICAgREVGSU5FX0JJVEZJ
RUxEKGJvb2wsIGhhc1VuZGVyc2NvcmVQcm90b1Byb3BlcnR5RXhjbHVkaW5nT3JpZ2luYWxQcm90
bywgSGFzVW5kZXJzY29yZVByb3RvUHJvcGVydHlFeGNsdWRpbmdPcmlnaW5hbFByb3RvLCAxLCAy
OSk7CisgICAgREVGSU5FX0JJVEZJRUxEKGJvb2wsIGlzUHJvcGVydHlEZWxldGlvblRyYW5zaXRp
b24sIElzUHJvcGVydHlEZWxldGlvblRyYW5zaXRpb24sIDEsIDMwKTsKIAogcHJpdmF0ZToKICAg
ICBmcmllbmQgY2xhc3MgTExJbnRPZmZzZXRzRXh0cmFjdG9yOwpAQCAtNzE3LDkgKzcxNiw5IEBA
IHByaXZhdGU6CiAgICAgdGVtcGxhdGU8U2hvdWxkUGluLCB0eXBlbmFtZSBGdW5jPgogICAgIFBy
b3BlcnR5T2Zmc2V0IGFkZChWTSYsIFByb3BlcnR5TmFtZSwgdW5zaWduZWQgYXR0cmlidXRlcywg
Y29uc3QgRnVuYyYpOwogICAgIFByb3BlcnR5T2Zmc2V0IGFkZChWTSYsIFByb3BlcnR5TmFtZSwg
dW5zaWduZWQgYXR0cmlidXRlcyk7Ci0gICAgdGVtcGxhdGU8dHlwZW5hbWUgRnVuYz4KLSAgICBQ
cm9wZXJ0eU9mZnNldCByZW1vdmUoUHJvcGVydHlOYW1lLCBjb25zdCBGdW5jJik7Ci0gICAgUHJv
cGVydHlPZmZzZXQgcmVtb3ZlKFByb3BlcnR5TmFtZSk7CisgICAgdGVtcGxhdGU8U2hvdWxkUGlu
LCB0eXBlbmFtZSBGdW5jPgorICAgIFByb3BlcnR5T2Zmc2V0IHJlbW92ZShWTSYsIFByb3BlcnR5
TmFtZSwgY29uc3QgRnVuYyYpOworICAgIFByb3BlcnR5T2Zmc2V0IHJlbW92ZShWTSYsIFByb3Bl
cnR5TmFtZSk7CiAKICAgICB2b2lkIGNoZWNrQ29uc2lzdGVuY3koKTsKIApAQCAtODM0LDYgKzgz
Myw3IEBAIHByaXZhdGU6CiAgICAgVGlueUJsb29tRmlsdGVyIG1fc2VlblByb3BlcnRpZXM7CiAK
ICAgICBmcmllbmQgY2xhc3MgVk1JbnNwZWN0b3I7CisgICAgZnJpZW5kIGNsYXNzIEpTRG9sbGFy
Vk1IZWxwZXI7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBKU0MKZGlmZiAtLWdpdCBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZUlubGluZXMuaCBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZUlubGluZXMuaAppbmRleCAxYTRmMjAyNDZhMjc3OWMy
OWZiOTZjZTAwNTAwYjU0YmI0NmViNTcxLi5jZTk1YmJlMmIwY2UwOGEwZDc1MTIwYTBmMWFkYjA0
MTk2YjAxZmEzIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1
Y3R1cmVJbmxpbmVzLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0
dXJlSW5saW5lcy5oCkBAIC0xNjcsOSArMTY3LDI3IEBAIHZvaWQgU3RydWN0dXJlOjpmb3JFYWNo
UHJvcGVydHlDb25jdXJyZW50bHkoY29uc3QgRnVuY3RvciYgZnVuY3RvcikKICAgICBQcm9wZXJ0
eVRhYmxlKiB0YWJsZTsKICAgICAKICAgICBmaW5kU3RydWN0dXJlc0FuZE1hcEZvck1hdGVyaWFs
aXphdGlvbihzdHJ1Y3R1cmVzLCBzdHJ1Y3R1cmUsIHRhYmxlKTsKKworICAgIEhhc2hTZXQ8VW5p
cXVlZFN0cmluZ0ltcGwqPiBkZWxldGVkUHJvcGVydGllczsKKworICAgIGZvciAodW5zaWduZWQg
aSA9IHN0cnVjdHVyZXMuc2l6ZSgpOyBpLS07KSB7CisgICAgICAgIGF1dG8qIHN0cnVjdHVyZSA9
IHN0cnVjdHVyZXNbaV07CisgICAgICAgIGlmICghc3RydWN0dXJlLT5tX3RyYW5zaXRpb25Qcm9w
ZXJ0eU5hbWUpCisgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICBpZiAoc3RydWN0dXJl
LT5pc1Byb3BlcnR5RGVsZXRpb25UcmFuc2l0aW9uKCkpIHsKKyAgICAgICAgICAgIGRlbGV0ZWRQ
cm9wZXJ0aWVzLmFkZChzdHJ1Y3R1cmUtPm1fdHJhbnNpdGlvblByb3BlcnR5TmFtZS5nZXQoKSk7
CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorCisgICAgICAgIGRlbGV0ZWRQcm9w
ZXJ0aWVzLnJlbW92ZShzdHJ1Y3R1cmUtPm1fdHJhbnNpdGlvblByb3BlcnR5TmFtZS5nZXQoKSk7
CisgICAgfQogICAgIAogICAgIGlmICh0YWJsZSkgewogICAgICAgICBmb3IgKGF1dG8mIGVudHJ5
IDogKnRhYmxlKSB7CisgICAgICAgICAgICBpZiAoZGVsZXRlZFByb3BlcnRpZXMuY29udGFpbnMo
ZW50cnkua2V5KSkKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKwogICAgICAgICAgICAgaWYg
KCFmdW5jdG9yKGVudHJ5KSkgewogICAgICAgICAgICAgICAgIHN0cnVjdHVyZS0+bV9sb2NrLnVu
bG9jaygpOwogICAgICAgICAgICAgICAgIHJldHVybjsKQEAgLTE3NywxMiArMTk1LDEyIEBAIHZv
aWQgU3RydWN0dXJlOjpmb3JFYWNoUHJvcGVydHlDb25jdXJyZW50bHkoY29uc3QgRnVuY3RvciYg
ZnVuY3RvcikKICAgICAgICAgfQogICAgICAgICBzdHJ1Y3R1cmUtPm1fbG9jay51bmxvY2soKTsK
ICAgICB9Ci0gICAgCisKICAgICBmb3IgKHVuc2lnbmVkIGkgPSBzdHJ1Y3R1cmVzLnNpemUoKTsg
aS0tOykgewotICAgICAgICBzdHJ1Y3R1cmUgPSBzdHJ1Y3R1cmVzW2ldOwotICAgICAgICBpZiAo
IXN0cnVjdHVyZS0+bV90cmFuc2l0aW9uUHJvcGVydHlOYW1lKQorICAgICAgICBhdXRvKiBzdHJ1
Y3R1cmUgPSBzdHJ1Y3R1cmVzW2ldOworICAgICAgICBpZiAoIXN0cnVjdHVyZS0+bV90cmFuc2l0
aW9uUHJvcGVydHlOYW1lIHx8IGRlbGV0ZWRQcm9wZXJ0aWVzLmNvbnRhaW5zKHN0cnVjdHVyZS0+
bV90cmFuc2l0aW9uUHJvcGVydHlOYW1lLmdldCgpKSkKICAgICAgICAgICAgIGNvbnRpbnVlOwot
ICAgICAgICAKKwogICAgICAgICBpZiAoIWZ1bmN0b3IoUHJvcGVydHlNYXBFbnRyeShzdHJ1Y3R1
cmUtPm1fdHJhbnNpdGlvblByb3BlcnR5TmFtZS5nZXQoKSwgc3RydWN0dXJlLT50cmFuc2l0aW9u
T2Zmc2V0KCksIHN0cnVjdHVyZS0+dHJhbnNpdGlvblByb3BlcnR5QXR0cmlidXRlcygpKSkpCiAg
ICAgICAgICAgICByZXR1cm47CiAgICAgfQpAQCAtNDU2LDYgKzQ3NCw3IEBAIGlubGluZSBQcm9w
ZXJ0eU9mZnNldCBTdHJ1Y3R1cmU6OmFkZChWTSYgdm0sIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5h
bWUsIHVuc2lnbmVkCiAgICAgCiAgICAgUHJvcGVydHlPZmZzZXQgbmV3TWF4T2Zmc2V0ID0gbWF4
T2Zmc2V0KCk7CiAgICAgdGFibGUtPmFkZChQcm9wZXJ0eU1hcEVudHJ5KHJlcCwgbmV3T2Zmc2V0
LCBhdHRyaWJ1dGVzKSwgbmV3TWF4T2Zmc2V0LCBQcm9wZXJ0eVRhYmxlOjpQcm9wZXJ0eU9mZnNl
dE1heUNoYW5nZSk7CisgICAgbmV3TWF4T2Zmc2V0ID0gc3RkOjptYXgobmV3TWF4T2Zmc2V0LCBt
YXhPZmZzZXQoKSk7CiAgICAgCiAgICAgZnVuYyhsb2NrZXIsIG5ld09mZnNldCwgbmV3TWF4T2Zm
c2V0KTsKICAgICAKQEAgLTQ2NSwyMSArNDg0LDI2IEBAIGlubGluZSBQcm9wZXJ0eU9mZnNldCBT
dHJ1Y3R1cmU6OmFkZChWTSYgdm0sIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIHVuc2lnbmVk
CiAgICAgcmV0dXJuIG5ld09mZnNldDsKIH0KIAotdGVtcGxhdGU8dHlwZW5hbWUgRnVuYz4KLWlu
bGluZSBQcm9wZXJ0eU9mZnNldCBTdHJ1Y3R1cmU6OnJlbW92ZShQcm9wZXJ0eU5hbWUgcHJvcGVy
dHlOYW1lLCBjb25zdCBGdW5jJiBmdW5jKQordGVtcGxhdGU8U3RydWN0dXJlOjpTaG91bGRQaW4g
c2hvdWxkUGluLCB0eXBlbmFtZSBGdW5jPgoraW5saW5lIFByb3BlcnR5T2Zmc2V0IFN0cnVjdHVy
ZTo6cmVtb3ZlKFZNJiB2bSwgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwgY29uc3QgRnVuYyYg
ZnVuYykKIHsKLSAgICBDb25jdXJyZW50SlNMb2NrZXIgbG9ja2VyKG1fbG9jayk7Ci0gICAgCisg
ICAgUHJvcGVydHlUYWJsZSogdGFibGUgPSBlbnN1cmVQcm9wZXJ0eVRhYmxlKHZtKTsKKyAgICBH
Q1NhZmVDb25jdXJyZW50SlNMb2NrZXIgbG9ja2VyKG1fbG9jaywgdm0uaGVhcCk7CisKKyAgICBz
d2l0Y2ggKHNob3VsZFBpbikgeworICAgIGNhc2UgU2hvdWxkUGluOjpZZXM6CisgICAgICAgIHBp
bihsb2NrZXIsIHZtLCB0YWJsZSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgU2hvdWxkUGlu
OjpObzoKKyAgICAgICAgc2V0UHJvcGVydHlUYWJsZSh2bSwgdGFibGUpOworICAgICAgICBicmVh
azsKKyAgICB9CisKKyAgICBBU1NFUlQoSlNDOjppc1ZhbGlkT2Zmc2V0KGdldCh2bSwgcHJvcGVy
dHlOYW1lKSkpOworCiAgICAgY2hlY2tDb25zaXN0ZW5jeSgpOwogCiAgICAgYXV0byByZXAgPSBw
cm9wZXJ0eU5hbWUudWlkKCk7Ci0gICAgCi0gICAgLy8gV2UgT05MWSByZW1vdmUgZnJvbSB1bmNh
Y2hlYWJsZSBkaWN0aW9uYXJpZXMsIHdoaWNoIHdpbGwgaGF2ZSBhIHBpbm5lZCBwcm9wZXJ0eSB0
YWJsZS4KLSAgICAvLyBUaGUgb25seSB3YXkgZm9yIHRoZW0gbm90IHRvIGhhdmUgYSB0YWJsZSBp
cyBpZiB0aGV5IGFyZSBlbXB0eS4KLSAgICBQcm9wZXJ0eVRhYmxlKiB0YWJsZSA9IHByb3BlcnR5
VGFibGVPck51bGwoKTsKLQotICAgIGlmICghdGFibGUpCi0gICAgICAgIHJldHVybiBpbnZhbGlk
T2Zmc2V0OwogCiAgICAgUHJvcGVydHlUYWJsZTo6ZmluZF9pdGVyYXRvciBwb3NpdGlvbiA9IHRh
YmxlLT5maW5kKHJlcCk7CiAgICAgaWYgKCFwb3NpdGlvbi5maXJzdCkKQEAgLTQ5MCw5ICs1MTQs
MTQgQEAgaW5saW5lIFByb3BlcnR5T2Zmc2V0IFN0cnVjdHVyZTo6cmVtb3ZlKFByb3BlcnR5TmFt
ZSBwcm9wZXJ0eU5hbWUsIGNvbnN0IEZ1bmMmIGYKICAgICB0YWJsZS0+cmVtb3ZlKHBvc2l0aW9u
KTsKICAgICB0YWJsZS0+YWRkRGVsZXRlZE9mZnNldChvZmZzZXQpOwogCi0gICAgY2hlY2tDb25z
aXN0ZW5jeSgpOworICAgIFByb3BlcnR5T2Zmc2V0IG5ld01heE9mZnNldCA9IG1heE9mZnNldCgp
OwogCi0gICAgZnVuYyhsb2NrZXIsIG9mZnNldCk7CisgICAgZnVuYyhsb2NrZXIsIG9mZnNldCwg
bmV3TWF4T2Zmc2V0KTsKKworICAgIEFTU0VSVChtYXhPZmZzZXQoKSA9PSBuZXdNYXhPZmZzZXQp
OworICAgIEFTU0VSVCghSlNDOjppc1ZhbGlkT2Zmc2V0KGdldCh2bSwgcHJvcGVydHlOYW1lKSkp
OworCisgICAgY2hlY2tDb25zaXN0ZW5jeSgpOwogICAgIHJldHVybiBvZmZzZXQ7CiB9CiAKQEAg
LTUwMywxMyArNTMyLDEzIEBAIGlubGluZSBQcm9wZXJ0eU9mZnNldCBTdHJ1Y3R1cmU6OmFkZFBy
b3BlcnR5V2l0aG91dFRyYW5zaXRpb24oVk0mIHZtLCBQcm9wZXJ0eU5hCiB9CiAKIHRlbXBsYXRl
PHR5cGVuYW1lIEZ1bmM+Ci1pbmxpbmUgUHJvcGVydHlPZmZzZXQgU3RydWN0dXJlOjpyZW1vdmVQ
cm9wZXJ0eVdpdGhvdXRUcmFuc2l0aW9uKFZNJiwgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwg
Y29uc3QgRnVuYyYgZnVuYykKK2lubGluZSBQcm9wZXJ0eU9mZnNldCBTdHJ1Y3R1cmU6OnJlbW92
ZVByb3BlcnR5V2l0aG91dFRyYW5zaXRpb24oVk0mIHZtLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlO
YW1lLCBjb25zdCBGdW5jJiBmdW5jKQogewogICAgIEFTU0VSVChpc1VuY2FjaGVhYmxlRGljdGlv
bmFyeSgpKTsKICAgICBBU1NFUlQoaXNQaW5uZWRQcm9wZXJ0eVRhYmxlKCkpOwogICAgIEFTU0VS
VChwcm9wZXJ0eVRhYmxlT3JOdWxsKCkpOwogICAgIAotICAgIHJldHVybiByZW1vdmUocHJvcGVy
dHlOYW1lLCBmdW5jKTsKKyAgICByZXR1cm4gcmVtb3ZlPFNob3VsZFBpbjo6WWVzPih2bSwgcHJv
cGVydHlOYW1lLCBmdW5jKTsKIH0KIAogQUxXQVlTX0lOTElORSB2b2lkIFN0cnVjdHVyZTo6c2V0
UHJvdG90eXBlV2l0aG91dFRyYW5zaXRpb24oVk0mIHZtLCBKU1ZhbHVlIHByb3RvdHlwZSkKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZVRyYW5zaXRp
b25UYWJsZS5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlVHJhbnNp
dGlvblRhYmxlLmgKaW5kZXggYjdkZjBlZmIzOThkMDVmYmY4MTdjN2IzOGU1YmE0OTBkZTE5MGFi
ZS4uNWI4NWM3ZjdmMjAyNmU0NTgxNWNhM2Y1MGNjZTUxYzFiNTJhNmIyYiAxMDA2NDQKLS0tIGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlVHJhbnNpdGlvblRhYmxlLmgK
KysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlVHJhbnNpdGlvblRh
YmxlLmgKQEAgLTE0NCwxMSArMTQ0LDExIEBAIGNsYXNzIFN0cnVjdHVyZVRyYW5zaXRpb25UYWJs
ZSB7CiAKICAgICAKICAgICBzdHJ1Y3QgSGFzaCB7Ci0gICAgICAgIHR5cGVkZWYgc3RkOjpwYWly
PFVuaXF1ZWRTdHJpbmdJbXBsKiwgdW5zaWduZWQ+IEtleTsKKyAgICAgICAgdHlwZWRlZiBzdGQ6
OnR1cGxlPFVuaXF1ZWRTdHJpbmdJbXBsKiwgdW5zaWduZWQsIGJvb2w+IEtleTsKICAgICAgICAg
CiAgICAgICAgIHN0YXRpYyB1bnNpZ25lZCBoYXNoKGNvbnN0IEtleSYgcCkKICAgICAgICAgewot
ICAgICAgICAgICAgcmV0dXJuIFB0ckhhc2g8VW5pcXVlZFN0cmluZ0ltcGwqPjo6aGFzaChwLmZp
cnN0KSArIHAuc2Vjb25kOworICAgICAgICAgICAgcmV0dXJuIFB0ckhhc2g8VW5pcXVlZFN0cmlu
Z0ltcGwqPjo6aGFzaChzdGQ6OmdldDwwPihwKSkgKyBzdGQ6OmdldDwxPihwKTsKICAgICAgICAg
fQogCiAgICAgICAgIHN0YXRpYyBib29sIGVxdWFsKGNvbnN0IEtleSYgYSwgY29uc3QgS2V5JiBi
KQpAQCAtMTgxLDggKzE4MSw4IEBAIHB1YmxpYzoKICAgICB9CiAKICAgICB2b2lkIGFkZChWTSYs
IFN0cnVjdHVyZSopOwotICAgIGJvb2wgY29udGFpbnMoVW5pcXVlZFN0cmluZ0ltcGwqLCB1bnNp
Z25lZCBhdHRyaWJ1dGVzKSBjb25zdDsKLSAgICBTdHJ1Y3R1cmUqIGdldChVbmlxdWVkU3RyaW5n
SW1wbCosIHVuc2lnbmVkIGF0dHJpYnV0ZXMpIGNvbnN0OworICAgIGJvb2wgY29udGFpbnMoVW5p
cXVlZFN0cmluZ0ltcGwqLCB1bnNpZ25lZCBhdHRyaWJ1dGVzLCBib29sIGlzQWRkaXRpb24gPSB0
cnVlKSBjb25zdDsKKyAgICBTdHJ1Y3R1cmUqIGdldChVbmlxdWVkU3RyaW5nSW1wbCosIHVuc2ln
bmVkIGF0dHJpYnV0ZXMsIGJvb2wgaXNBZGRpdGlvbiA9IHRydWUpIGNvbnN0OwogCiBwcml2YXRl
OgogICAgIGZyaWVuZCBjbGFzcyBTaW5nbGVTbG90VHJhbnNpdGlvbldlYWtPd25lcjsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS90b29scy9KU0RvbGxhclZNLmNwcCBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS90b29scy9KU0RvbGxhclZNLmNwcAppbmRleCBmZWMzMDc1NmNiNjQ3
NTczYTYzNjVhMzUyYWNjYWFjZjA0OGNiNGFkLi44NjA4M2U0ZDQzMDljZTk3ZmNmNWI0NjY3NzNm
NjQ0MDI2YmY0NjQ4IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvdG9vbHMvSlNE
b2xsYXJWTS5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3Rvb2xzL0pTRG9sbGFyVk0u
Y3BwCkBAIC04MSw2ICs4MSw4IEBAIHB1YmxpYzoKIAogICAgIHZvaWQgdXBkYXRlVk1TdGFja0xp
bWl0cygpIHsgcmV0dXJuIG1fdm0udXBkYXRlU3RhY2tMaW1pdHMoKTsgfTsKIAorICAgIHN0YXRp
YyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0aW9uR2V0U3RydWN0dXJlVHJhbnNp
dGlvbkxpc3QoSlNHbG9iYWxPYmplY3QqLCBDYWxsRnJhbWUqKTsKKwogcHJpdmF0ZToKICAgICBW
TSYgbV92bTsKIH07CkBAIC0yNzIwLDYgKzI3MjIsNjAgQEAgc3RhdGljIEVuY29kZWRKU1ZhbHVl
IEpTQ19IT1NUX0NBTEwgZnVuY3Rpb25NYWtlMTZCaXRTdHJpbmdJZlBvc3NpYmxlKEpTR2xvYmFs
T2IKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzU3RyaW5nKHZtLCBTdHJpbmc6OmFkb3B0
KFdURk1vdmUoYnVmZmVyKSkpKTsKIH0KIAorRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBK
U0RvbGxhclZNSGVscGVyOjpmdW5jdGlvbkdldFN0cnVjdHVyZVRyYW5zaXRpb25MaXN0KEpTR2xv
YmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIENhbGxGcmFtZSogY2FsbEZyYW1lKQoreworICAgIERv
bGxhclZNQXNzZXJ0U2NvcGUgYXNzZXJ0U2NvcGU7CisgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0
LT52bSgpOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKyAgICBK
U09iamVjdCogb2JqID0gY2FsbEZyYW1lLT5hcmd1bWVudCgwKS50b09iamVjdChnbG9iYWxPYmpl
Y3QpOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHsgfSk7CisgICAgaWYgKCFvYmop
CisgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNOdWxsKCkpOworICAgIFZlY3RvcjxT
dHJ1Y3R1cmUqLCA4PiBzdHJ1Y3R1cmVzOworCisgICAgZm9yIChhdXRvKiBzdHJ1Y3R1cmUgPSBv
YmotPnN0cnVjdHVyZSgpOyBzdHJ1Y3R1cmU7IHN0cnVjdHVyZSA9IHN0cnVjdHVyZS0+cHJldmlv
dXNJRCgpKQorICAgICAgICBzdHJ1Y3R1cmVzLmFwcGVuZChzdHJ1Y3R1cmUpOworCisgICAgSlNB
cnJheSogcmVzdWx0ID0gSlNBcnJheTo6dHJ5Q3JlYXRlKHZtLCBnbG9iYWxPYmplY3QtPmFycmF5
U3RydWN0dXJlRm9ySW5kZXhpbmdUeXBlRHVyaW5nQWxsb2NhdGlvbihBcnJheVdpdGhDb250aWd1
b3VzKSwgMCk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsKKworICAgIGZv
ciAoc2l6ZV90IGkgPSAwOyBpIDwgc3RydWN0dXJlcy5zaXplKCk7ICsraSkgeworICAgICAgICBh
dXRvKiBzdHJ1Y3R1cmUgPSBzdHJ1Y3R1cmVzW3N0cnVjdHVyZXMuc2l6ZSgpIC0gaSAtIDFdOwor
ICAgICAgICByZXN1bHQtPnB1c2goZ2xvYmFsT2JqZWN0LCBKU1ZhbHVlKHN0cnVjdHVyZS0+aWQo
KSkpOworICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOworICAgICAgICBy
ZXN1bHQtPnB1c2goZ2xvYmFsT2JqZWN0LCBKU1ZhbHVlKHN0cnVjdHVyZS0+dHJhbnNpdGlvbk9m
ZnNldCgpKSk7CisgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHsgfSk7CisgICAg
ICAgIHJlc3VsdC0+cHVzaChnbG9iYWxPYmplY3QsIEpTVmFsdWUoc3RydWN0dXJlLT5tYXhPZmZz
ZXQoKSkpOworICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOworICAgICAg
ICBpZiAoc3RydWN0dXJlLT5tX3RyYW5zaXRpb25Qcm9wZXJ0eU5hbWUpCisgICAgICAgICAgICBy
ZXN1bHQtPnB1c2goZ2xvYmFsT2JqZWN0LCBqc1N0cmluZyh2bSwgU3RyaW5nKCpzdHJ1Y3R1cmUt
Pm1fdHJhbnNpdGlvblByb3BlcnR5TmFtZSkpKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAg
cmVzdWx0LT5wdXNoKGdsb2JhbE9iamVjdCwganNOdWxsKCkpOworICAgICAgICBSRVRVUk5fSUZf
RVhDRVBUSU9OKHNjb3BlLCB7IH0pOworICAgICAgICByZXN1bHQtPnB1c2goZ2xvYmFsT2JqZWN0
LCBKU1ZhbHVlKHN0cnVjdHVyZS0+aXNQcm9wZXJ0eURlbGV0aW9uVHJhbnNpdGlvbigpKSk7Cisg
ICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHsgfSk7CisgICAgfQorCisgICAgcmV0
dXJuIEpTVmFsdWU6OmVuY29kZShyZXN1bHQpOworfQorCitzdGF0aWMgRW5jb2RlZEpTVmFsdWUg
SlNDX0hPU1RfQ0FMTCBmdW5jdGlvbkdldENvbmN1cnJlbnRseShKU0dsb2JhbE9iamVjdCogZ2xv
YmFsT2JqZWN0LCBDYWxsRnJhbWUqIGNhbGxGcmFtZSkKK3sKKyAgICBEb2xsYXJWTUFzc2VydFNj
b3BlIGFzc2VydFNjb3BlOworICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+dm0oKTsKKyAgICBh
dXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisgICAgSlNPYmplY3QqIG9iaiA9
IGNhbGxGcmFtZS0+YXJndW1lbnQoMCkudG9PYmplY3QoZ2xvYmFsT2JqZWN0KTsKKyAgICBSRVRV
Uk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOworICAgIGlmICghb2JqKQorICAgICAgICByZXR1
cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzTnVsbCgpKTsKKyAgICBTdHJpbmcgcHJvcGVydHkgPSBjYWxs
RnJhbWUtPmFyZ3VtZW50KDEpLnRvV1RGU3RyaW5nKGdsb2JhbE9iamVjdCk7CisgICAgUkVUVVJO
X0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsKKyAgICBhdXRvIG5hbWUgPSBQcm9wZXJ0eU5hbWUo
SWRlbnRpZmllcjo6ZnJvbVN0cmluZyh2bSwgcHJvcGVydHkpKTsKKyAgICBKU1ZhbHVlIHJlc3Vs
dCA9IEpTVmFsdWUob2JqLT5zdHJ1Y3R1cmUoKS0+Z2V0Q29uY3VycmVudGx5KG5hbWUudWlkKCkp
ICE9IGludmFsaWRPZmZzZXQpOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHsgfSk7
CisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShyZXN1bHQpOworfQorCiB2b2lkIEpTRG9sbGFy
Vk06OmZpbmlzaENyZWF0aW9uKFZNJiB2bSkKIHsKICAgICBEb2xsYXJWTUFzc2VydFNjb3BlIGFz
c2VydFNjb3BlOwpAQCAtMjg0Niw2ICsyOTAyLDkgQEAgdm9pZCBKU0RvbGxhclZNOjpmaW5pc2hD
cmVhdGlvbihWTSYgdm0pCiAKICAgICBhZGRGdW5jdGlvbih2bSwgImlzV2FzbVN1cHBvcnRlZCIs
IGZ1bmN0aW9uSXNXYXNtU3VwcG9ydGVkLCAwKTsKICAgICBhZGRGdW5jdGlvbih2bSwgIm1ha2Ux
NkJpdFN0cmluZ0lmUG9zc2libGUiLCBmdW5jdGlvbk1ha2UxNkJpdFN0cmluZ0lmUG9zc2libGUs
IDEpOworCisgICAgYWRkRnVuY3Rpb24odm0sICJnZXRTdHJ1Y3R1cmVUcmFuc2l0aW9uTGlzdCIs
IEpTRG9sbGFyVk1IZWxwZXI6OmZ1bmN0aW9uR2V0U3RydWN0dXJlVHJhbnNpdGlvbkxpc3QsIDEp
OworICAgIGFkZEZ1bmN0aW9uKHZtLCAiZ2V0Q29uY3VycmVudGx5IiwgZnVuY3Rpb25HZXRDb25j
dXJyZW50bHksIDIpOwogfQogCiB2b2lkIEpTRG9sbGFyVk06OmFkZEZ1bmN0aW9uKFZNJiB2bSwg
SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgY29uc3QgY2hhciogbmFtZSwgTmF0aXZlRnVu
Y3Rpb24gZnVuY3Rpb24sIHVuc2lnbmVkIGFyZ3VtZW50cykKZGlmZiAtLWdpdCBhL0pTVGVzdHMv
Q2hhbmdlTG9nIGIvSlNUZXN0cy9DaGFuZ2VMb2cKaW5kZXggZGNjZjM2YzRhNDZlNjU0ZjQ4ZmY3
ZTE3MzdhNjY2NzY4MTQ4NmFhNS4uNzUwOGFhMDlhZjliYjAwNDBlNTI1YTU5OTliNGU5NjhhOWQz
MzdiNyAxMDA2NDQKLS0tIGEvSlNUZXN0cy9DaGFuZ2VMb2cKKysrIGIvSlNUZXN0cy9DaGFuZ2VM
b2cKQEAgLTEsMyArMSwzMyBAQAorMjAyMC0wMS0yOCAgSnVzdGluIE1pY2hhdWQgIDxqdXN0aW5f
bWljaGF1ZEBhcHBsZS5jb20+CisKKyAgICAgICAgRGVsZXRpbmcgYSBwcm9wZXJ0eSBzaG91bGQg
bm90IHR1cm4gc3RydWN0dXJlcyBpbnRvIHVuY2FjaGVhYmxlIGRpY3Rpb25hcmllcworICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjA2NDMwCisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBtaWNyb2JlbmNobWFy
a3MvZGVsZXRlLXByb3BlcnR5LWZyb20tcHJvdG90eXBlLWNoYWluLmpzOiBBZGRlZC4KKyAgICAg
ICAgKGFzc2VydCk6CisgICAgICAgIChub0lubGluZS5hc3NlcnQuZ2V0Wik6CisgICAgICAgIChu
b0lubGluZS5nZXRaLkMpOgorICAgICAgICAoZG9UZXN0KToKKyAgICAgICAgKGRlbGV0ZS5DLnBy
b3RvdHlwZS56KToKKyAgICAgICAgKiBtaWNyb2JlbmNobWFya3MvZGVsZXRlLXByb3BlcnR5LWtl
ZXBzLWNhY2hlYWJsZS1zdHJ1Y3R1cmUuanM6IEFkZGVkLgorICAgICAgICAoYXNzZXJ0KToKKyAg
ICAgICAgKEMpOgorICAgICAgICAoZG9UZXN0KToKKyAgICAgICAgKiBzdHJlc3MvZGVsZXRlLXBy
b3BlcnR5LWNoZWNrLXN0cnVjdHVyZS10cmFuc2l0aW9uLmpzOiBBZGRlZC4KKyAgICAgICAgKGFz
c2VydCk6CisgICAgICAgIChhc3NlcnRfZXEpOgorICAgICAgICAoYXNzZXJ0X25lcSk6CisgICAg
ICAgIChzZCk6CisgICAgICAgIChzaWQpOgorICAgICAgICAodGVzdERlbGV0ZUlzTm90VW5jYWNo
ZWFibGUpOgorICAgICAgICAodGVzdENhbk1hdGVyaWFsaXplRGVsZXRlcyk6CisgICAgICAgICh0
ZXN0Q2FuRmxhdHRlbik6CisgICAgICAgICh0ZXN0RGVsZXRlV2l0aElubGluZUNhY2hlLk9iamVj
dC5wcm90b3R5cGUuZ2xvYmFsUHJvcGVydHkuNDIubWFrZUZvbyk6CisgICAgICAgICh0ZXN0RGVs
ZXRlV2l0aElubGluZUNhY2hlLm5vSW5saW5lLmRvVGVzdCk6CisgICAgICAgICh0ZXN0RGVsZXRl
V2l0aElubGluZUNhY2hlKToKKwogMjAyMC0wMS0yMSAgVGFkZXUgWmFnYWxsbyAgPHR6YWdhbGxv
QGFwcGxlLmNvbT4KIAogICAgICAgICBPYmplY3QgYWxsb2NhdGlvbiBzaW5raW5nIGlzIG1pc3Np
bmcgUHV0SGludCBmb3IgYWxsb2NhdGlvbnMgdW5yZWFjaGFibGUgaW4gdGhlIGdyYXBoCmRpZmYg
LS1naXQgYS9KU1Rlc3RzL21pY3JvYmVuY2htYXJrcy9kZWxldGUtcHJvcGVydHktZnJvbS1wcm90
b3R5cGUtY2hhaW4uanMgYi9KU1Rlc3RzL21pY3JvYmVuY2htYXJrcy9kZWxldGUtcHJvcGVydHkt
ZnJvbS1wcm90b3R5cGUtY2hhaW4uanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNDlhMzFiN2YyNDdjMWJkMGFjYTgy
Y2IyMmRmMjBlOGYxYmY2MWJkZAotLS0gL2Rldi9udWxsCisrKyBiL0pTVGVzdHMvbWljcm9iZW5j
aG1hcmtzL2RlbGV0ZS1wcm9wZXJ0eS1mcm9tLXByb3RvdHlwZS1jaGFpbi5qcwpAQCAtMCwwICsx
LDQzIEBACisvL0Agc2tpcCBpZiAkbW9kZWwgPT0gIkFwcGxlIFdhdGNoIFNlcmllcyAzIiAjIGFk
ZGVkIGJ5IG1hcmstanNjLXN0cmVzcy10ZXN0LnB5CitmdW5jdGlvbiBhc3NlcnQoYikgeworICAg
IGlmICghYikKKyAgICAgICAgdGhyb3cgbmV3IEVycm9yOworfQorbm9JbmxpbmUoYXNzZXJ0KQor
CitmdW5jdGlvbiBnZXRaKG8pIHsKKyAgICByZXR1cm4gby56Cit9Citub0lubGluZShnZXRaKQor
CitmdW5jdGlvbiBDKCkgeworICAgIHRoaXMueCA9IDQyOworfQorCitsZXQgb2JqcyA9IFtdOwor
Zm9yIChsZXQgaSA9IDA7IGkgPCA1MDsgKytpKSB7CisgICAgb2Jqcy5wdXNoKG5ldyBDKTsKK30K
KworZnVuY3Rpb24gZG9UZXN0KHpWYWwpIHsKKyAgICBmb3IgKGxldCBpID0gMDsgaSA8IG9ianMu
bGVuZ3RoOyArK2kpIHsKKyAgICAgICAgbGV0IG8gPSBvYmpzW2ldOworICAgICAgICBhc3NlcnQo
by54ID09PSA0Mik7CisgICAgICAgIGFzc2VydChnZXRaKG8pID09PSB6VmFsKQorICAgIH0KK30K
K25vSW5saW5lKGRvVGVzdCk7CisKK2ZvciAobGV0IGk9MDsgaTwxMDAwMDsgKytpKSB7CisgICAg
Y29uc3QgWCA9IHsgaSB9CisgICAgQy5wcm90b3R5cGUueiA9IFgKKyAgICBkb1Rlc3QoWCkKK30K
KworZGVsZXRlIEMucHJvdG90eXBlLnoKKworZm9yIChsZXQgaT0wOyBpPDEwMDAwMDA7ICsraSkg
eworICAgIGdldFooe3o6IGl9KQorICAgIGRvVGVzdCh1bmRlZmluZWQpCit9CisKZGlmZiAtLWdp
dCBhL0pTVGVzdHMvbWljcm9iZW5jaG1hcmtzL2RlbGV0ZS1wcm9wZXJ0eS1rZWVwcy1jYWNoZWFi
bGUtc3RydWN0dXJlLmpzIGIvSlNUZXN0cy9taWNyb2JlbmNobWFya3MvZGVsZXRlLXByb3BlcnR5
LWtlZXBzLWNhY2hlYWJsZS1zdHJ1Y3R1cmUuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMjJjY2E5ZmQyMWRiMDcy
NmJhNmIxZDJiNjVkOWRhNWI4M2E4YTgzOAotLS0gL2Rldi9udWxsCisrKyBiL0pTVGVzdHMvbWlj
cm9iZW5jaG1hcmtzL2RlbGV0ZS1wcm9wZXJ0eS1rZWVwcy1jYWNoZWFibGUtc3RydWN0dXJlLmpz
CkBAIC0wLDAgKzEsMjggQEAKKy8vQCBza2lwIGlmICRtb2RlbCA9PSAiQXBwbGUgV2F0Y2ggU2Vy
aWVzIDMiICMgYWRkZWQgYnkgbWFyay1qc2Mtc3RyZXNzLXRlc3QucHkKK2Z1bmN0aW9uIGFzc2Vy
dChiKSB7CisgICAgaWYgKCFiKQorICAgICAgICB0aHJvdyBuZXcgRXJyb3I7Cit9CisKK2Z1bmN0
aW9uIEMoKSB7CisgICAgdGhpcy54ID0gNDI7CisgICAgdGhpcy55ID0gMTMzNzsKKyAgICBkZWxl
dGUgdGhpcy55OworfQorCitsZXQgb2JqcyA9IFtdOworZm9yIChsZXQgaSA9IDA7IGkgPCA1MDsg
KytpKSB7CisgICAgb2Jqcy5wdXNoKG5ldyBDKTsKK30KKworZnVuY3Rpb24gZG9UZXN0KCkgewor
ICAgIGZvciAobGV0IGkgPSAwOyBpIDwgb2Jqcy5sZW5ndGg7ICsraSkgeworICAgICAgICBsZXQg
byA9IG9ianNbaV07CisgICAgICAgIGFzc2VydChvLnkgPT09IHVuZGVmaW5lZCk7CisgICAgICAg
IGFzc2VydChvLnggPT09IDQyKTsKKyAgICB9Cit9Citub0lubGluZShkb1Rlc3QpOworCitmb3Ig
KGxldCBpPTA7IGk8MTAwMDAwMDA7ICsraSkgZG9UZXN0KCkKKwpkaWZmIC0tZ2l0IGEvSlNUZXN0
cy9zdHJlc3MvZGVsZXRlLXByb3BlcnR5LWNoZWNrLXN0cnVjdHVyZS10cmFuc2l0aW9uLmpzIGIv
SlNUZXN0cy9zdHJlc3MvZGVsZXRlLXByb3BlcnR5LWNoZWNrLXN0cnVjdHVyZS10cmFuc2l0aW9u
LmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAuLmIwNjMxMTdmNGE4NjA3ZTdhZTIwM2IyNjRjMzZmMTk0OWY3NGZkYWMK
LS0tIC9kZXYvbnVsbAorKysgYi9KU1Rlc3RzL3N0cmVzcy9kZWxldGUtcHJvcGVydHktY2hlY2st
c3RydWN0dXJlLXRyYW5zaXRpb24uanMKQEAgLTAsMCArMSwxODkgQEAKK2Z1bmN0aW9uIGFzc2Vy
dChjb25kaXRpb24pIHsKKyAgICBpZiAoIWNvbmRpdGlvbikKKyAgICAgICAgdGhyb3cgbmV3IEVy
cm9yKCJhc3NlcnRpb24gZmFpbGVkIik7Cit9CisKK2Z1bmN0aW9uIGFzc2VydF9lcShhLCBiKSB7
CisgICAgaWYgKGEgIT09IGIpCisgICAgICAgIHRocm93IG5ldyBFcnJvcigiYXNzZXJ0aW9uIGZh
aWxlZDogIiArIGEgKyAiID09PSAiICsgYik7Cit9CisKK2Z1bmN0aW9uIGFzc2VydF9uZXEoYSwg
YikgeworICAgIGlmIChhID09PSBiKQorICAgICAgICB0aHJvdyBuZXcgRXJyb3IoImFzc2VydGlv
biBmYWlsZWQ6ICIgKyBhICsgIiAhPT0gIiArIGIpOworfQorCitmdW5jdGlvbiBzZChvYmopIHsK
KyAgICBsZXQgZGF0YSA9ICR2bS5nZXRTdHJ1Y3R1cmVUcmFuc2l0aW9uTGlzdChvYmopCisgICAg
bGV0IHJlc3VsdCA9IFtdCisKKyAgICBpZiAoIWRhdGEpCisgICAgICAgIHJldHVybiByZXN1bHQK
KworICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZGF0YS5sZW5ndGgvNTsgKytpKSB7CisgICAgICAg
IHJlc3VsdC5wdXNoKHsgaWQ6IGRhdGFbaSo1KzBdLCBvZmZzZXQ6IGRhdGFbaSo1KzFdLCBtYXg6
IGRhdGFbaSo1KzJdLCBwcm9wZXJ0eTogZGF0YVtpKjUrM10sIHR5cGU6IGRhdGFbaSo1KzRdID09
IDAgPyAiYWRkZWQiIDogImRlbGV0ZWQiIH0pCisgICAgfQorCisgICAgcmV0dXJuIHJlc3VsdAor
fQorCitmdW5jdGlvbiBzaWQob2JqKSB7CisgICAgbGV0IGRhdGEgPSBzZChvYmopCisgICAgcmV0
dXJuIGRhdGFbZGF0YS5sZW5ndGgtMV0uaWQKK30KKworZnVuY3Rpb24gdGVzdERlbGV0ZUlzTm90
VW5jYWNoZWFibGUoaSkgeworICAgIGxldCBmb28gPSB7fQorICAgIGZvb1siYmFyIiArIGldID0g
MQorICAgIGZvb1siYmF6IiArIGldID0gMgorICAgIGFzc2VydChmb29bImJhciIgKyBpXSA9PT0g
MSkKKyAgICBhc3NlcnQoZm9vWyJiYXoiICsgaV0gPT09IDIpCisgICAgbGV0IG9sZFNpZCA9IHNp
ZChmb28pCisKKyAgICBhc3NlcnRfZXEoJHZtLmdldENvbmN1cnJlbnRseShmb28sICJiYXoiK2kp
LCAxKQorICAgIGFzc2VydF9lcSgkdm0uZ2V0Q29uY3VycmVudGx5KGZvbywgImJhciIraSksIDEp
CisgICAgYXNzZXJ0X2VxKCR2bS5nZXRDb25jdXJyZW50bHkoZm9vLCAiZm9vIitpKSwgMCkKKwor
ICAgIGFzc2VydChkZWxldGUgZm9vWyJiYXIiICsgaV0pCisgICAgYXNzZXJ0X25lcShvbGRTaWQs
IHNpZChmb28pKQorICAgIGFzc2VydCghKCJiYXIiICsgaSBpbiBmb28pKTsKKyAgICBhc3NlcnQo
Zm9vWyJiYXoiICsgaV0gPT09IDIpCisKKyAgICBhc3NlcnRfZXEoJHZtLmdldENvbmN1cnJlbnRs
eShmb28sICJiYXoiK2kpLCAxKQorICAgIGFzc2VydF9lcSgkdm0uZ2V0Q29uY3VycmVudGx5KGZv
bywgImJhciIraSksIDApCisKKyAgICBhc3NlcnRfZXEoT2JqZWN0LmtleXMoZm9vKS5sZW5ndGgs
IDEpCisKKyAgICBsZXQgZGF0YSA9IHNkKGZvbykKKyAgICBhc3NlcnRfZXEoZGF0YVtkYXRhLmxl
bmd0aC0xXS5wcm9wZXJ0eSwgImJhciIgKyBpKQorCisgICAgZm9vWyJiYXIiICsgaV0gPSAxCisg
ICAgYXNzZXJ0KGZvb1siYmFyIiArIGldID09PSAxKQorICAgIGFzc2VydF9lcSgkdm0uZ2V0Q29u
Y3VycmVudGx5KGZvbywgImJheiIraSksIDEpCisgICAgYXNzZXJ0X2VxKCR2bS5nZXRDb25jdXJy
ZW50bHkoZm9vLCAiYmFyIitpKSwgMSkKK30KKworZnVuY3Rpb24gdGVzdENhbk1hdGVyaWFsaXpl
RGVsZXRlcyhpKSB7CisgICAgbGV0IGZvbyA9IHt9CisgICAgZm9vWyJiYXIiICsgaV0gPSAxCisg
ICAgZm9vWyJiYXoiICsgaV0gPSAyCisKKyAgICBhc3NlcnQoZm9vWyJiYXIiICsgaV0gPT09IDEp
CisgICAgYXNzZXJ0KGZvb1siYmF6IiArIGldID09PSAyKQorICAgIGFzc2VydChkZWxldGUgZm9v
WyJiYXIiICsgaV0pCisgICAgYXNzZXJ0KCEoImJhciIgKyBpIGluIGZvbykpCisgICAgYXNzZXJ0
KGZvb1siYmF6IiArIGldID09PSAyKQorICAgIGFzc2VydF9lcShPYmplY3Qua2V5cyhmb28pLmxl
bmd0aCwgMSkKKworICAgIGxldCBmb28yID0ge30KKyAgICBmb28yWyJiYXIiICsgaV0gPSAzCisg
ICAgZm9vMlsiYmF6IiArIGldID0gNAorICAgIGFzc2VydChkZWxldGUgZm9vMlsiYmFyIiArIGld
KQorCisgICAgYXNzZXJ0X2VxKHNpZChmb28yKSwgc2lkKGZvbykpCisgICAgZm9vMlsiZnVuIiAr
IGldID0gMworICAgIGFzc2VydF9uZXEoc2lkKGZvbzIpLCBzaWQoZm9vKSkKKworICAgIGFzc2Vy
dChmb28yWyJmdW4iICsgaV0gPT09IDMpCisgICAgYXNzZXJ0KGZvbzJbImJheiIgKyBpXSA9PT0g
NCkKKyAgICBhc3NlcnQoISgiYmFyIiArIGkgaW4gZm9vMikpCisgICAgYXNzZXJ0X2VxKE9iamVj
dC5rZXlzKGZvbzIpLmxlbmd0aCwgMikKKyAgICBhc3NlcnQoZm9vWyJiYXoiICsgaV0gPT09IDIp
CisgICAgYXNzZXJ0KCEoImJhciIgKyBpIGluIGZvbykpCisgICAgYXNzZXJ0X2VxKE9iamVjdC5r
ZXlzKGZvbykubGVuZ3RoLCAxKQorCisgICAgbGV0IGRhdGEgPSBzZChmb28pCisgICAgYXNzZXJ0
X2VxKGRhdGFbZGF0YS5sZW5ndGgtMV0ucHJvcGVydHksICJiYXIiICsgaSkKKworICAgIGRhdGEg
PSBzZChmb28yKQorICAgIGFzc2VydF9lcShkYXRhW2RhdGEubGVuZ3RoLTFdLnByb3BlcnR5LCAi
ZnVuIiArIGkpCisgICAgYXNzZXJ0X2VxKGRhdGFbZGF0YS5sZW5ndGgtMl0ucHJvcGVydHksICJi
YXIiICsgaSkKK30KKworZnVuY3Rpb24gdGVzdENhbkZsYXR0ZW4oaSkgeworICAgIGxldCBmb28g
PSB7fQorICAgIGZvciAobGV0IGo9MDsgajw1MDA7ICsraikgeworICAgICAgICBjb25zdCBvbGRJ
ZCA9IHNpZChmb28pCisKKyAgICAgICAgZm9vWyJ4IiArIDEwMDAqaiArIGldID0gagorICAgICAg
ICBpZiAoaiA+IDApCisgICAgICAgICAgICBkZWxldGUgZm9vWyJ4IiArIDEwMDAqKGogLSAxKSAr
IGldCisKKyAgICAgICAgaWYgKGogPiAxMDApCisgICAgICAgICAgICBhc3NlcnRfZXEoc2lkKGZv
byksIG9sZElkKQorICAgIH0KKworICAgIGZvciAobGV0IGo9MDsgajw1MDA7ICsraikgeworICAg
ICAgICBjb25zdCB2YWwgPSBmb29bIngiICsgMTAwMCpqICsgaV0KKyAgICAgICAgaWYgKGogPT0g
NDk5KQorICAgICAgICAgICAgYXNzZXJ0X2VxKHZhbCwgaikKKyAgICAgICAgZWxzZQorICAgICAg
ICAgICAgYXNzZXJ0X2VxKHZhbCwgdW5kZWZpbmVkKQorICAgIH0KKworICAgICR2bS5mbGF0dGVu
RGljdGlvbmFyeU9iamVjdChmb28pCisKKyAgICBmb3IgKGxldCBqPTA7IGo8NTAwOyArK2opIHsK
KyAgICAgICAgY29uc3QgdmFsID0gZm9vWyJ4IiArIDEwMDAqaiArIGldCisgICAgICAgIGlmIChq
ID09IDQ5OSkKKyAgICAgICAgICAgIGFzc2VydF9lcSh2YWwsIGopCisgICAgICAgIGVsc2UKKyAg
ICAgICAgICAgIGFzc2VydF9lcSh2YWwsIHVuZGVmaW5lZCkKKyAgICB9Cit9CisKK2Z1bmN0aW9u
IHRlc3REZWxldGVXaXRoSW5saW5lQ2FjaGUoKSB7CisgICAgT2JqZWN0LnByb3RvdHlwZS5nbG9i
YWxQcm9wZXJ0eSA9IDQyCisKKyAgICBmdW5jdGlvbiBtYWtlRm9vKCkgeworICAgICAgICBsZXQg
Zm9vID0ge30KKyAgICAgICAgZm9vLmJheiA9IDEKKyAgICAgICAgYXNzZXJ0KGZvby5nbG9iYWxQ
cm9wZXJ0eSA9PT0gNDIpCisKKyAgICAgICAgcmV0dXJuIGZvbworICAgIH0KKyAgICBub0lubGlu
ZShtYWtlRm9vKQorCisgICAgZnVuY3Rpb24gZG9UZXN0KHhWYWwpIHsKKyAgICAgICAgZm9yIChs
ZXQgaj0wOyBqPDUwOyArK2opIHsKKyAgICAgICAgICAgIGZvciAobGV0IHo9MDsgejwxMDAwMDsg
Kyt6KSB7CisgICAgICAgICAgICAgICAgY29uc3QgZm9vID0gYXJyW2pdCisKKyAgICAgICAgICAg
ICAgICBhc3NlcnQoZm9vLmJheiA9PT0gMSkKKyAgICAgICAgICAgICAgICBhc3NlcnRfZXEoT2Jq
ZWN0LmtleXMoZm9vKS5sZW5ndGgsIDEpCisgICAgICAgICAgICAgICAgYXNzZXJ0X2VxKGZvby5n
bG9iYWxQcm9wZXJ0eSwgeFZhbCkKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKyAg
ICBub0lubGluZShkb1Rlc3QpCisKKyAgICBhcnIgPSBuZXcgQXJyYXkoNTApCisKKyAgICBmb3Ig
KGxldCBqPTA7IGo8NTA7ICsraikgeworICAgICAgICBhcnJbal0gPSBtYWtlRm9vKCkKKyAgICAg
ICAgaWYgKGogPiAwKQorICAgICAgICAgICAgYXNzZXJ0X2VxKHNpZChhcnJbai0xXSksIHNpZChh
cnJbal0pKQorICAgIH0KKworICAgIGRvVGVzdCg0MikKKworICAgIE9iamVjdC5wcm90b3R5cGUu
Z2xvYmFsUHJvcGVydHkgPSA0MworCisgICAgZG9UZXN0KDQzKQorCisgICAgZGVsZXRlIE9iamVj
dC5wcm90b3R5cGUuZ2xvYmFsUHJvcGVydHkKKworICAgIGRvVGVzdCh1bmRlZmluZWQpCit9CisK
K3Rlc3REZWxldGVXaXRoSW5saW5lQ2FjaGUoKQorCitmb3IgKGxldCBpID0gMDsgaSA8IDEwMDA7
ICsraSkgeworICAgIHRlc3REZWxldGVJc05vdFVuY2FjaGVhYmxlKGkpCisgICAgdGVzdENhbk1h
dGVyaWFsaXplRGVsZXRlcygxMDAwK2kpCit9CisKK2ZvciAobGV0IGkgPSAwOyBpIDwgMTAwOyAr
K2kpIHsKKyAgICB0ZXN0Q2FuRmxhdHRlbigyMDAwK2kpCit9CisK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>389307</attachid>
            <date>2020-01-30 17:11:15 -0800</date>
            <delta_ts>2020-01-31 13:19:26 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-206430-20200130171114.patch</filename>
            <type>text/plain</type>
            <size>52371</size>
            <attacher name="Justin Michaud">justin_michaud</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjU1Mzc1CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCBj
NWY1MDc3NjZmNDRiNzdhN2E4ZmEzMDMwYmFmOWQyZmRhNzU1ZWYwLi5lMTNkYjBmNmM4MjAzNDU3
YzZjYzNlMzU3NmJjMGQ5MjdmMzY0MzA1IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSw2NCBAQAorMjAyMC0wMS0zMCAgSnVzdGluIE1pY2hhdWQgIDxqdXN0aW5fbWljaGF1ZEBh
cHBsZS5jb20+CisKKyAgICAgICAgRGVsZXRpbmcgYSBwcm9wZXJ0eSBzaG91bGQgbm90IHR1cm4g
c3RydWN0dXJlcyBpbnRvIHVuY2FjaGVhYmxlIGRpY3Rpb25hcmllcworICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjA2NDMwCisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgUmlnaHQgbm93LCBkZWxldGVQcm9wZXJ0
eS9yZW1vdmVQcm9wZXJ0eVRyYW5zaXRpb24gY2F1c2VzIGEgc3RydWN0dXJlIHRyYW5zaXRpb24g
dG8gdW5jYWNoZWFibGUgZGljdGlvbmFyeS4gSW5zdGVhZCwgd2Ugc2hvdWxkIGFsbG93IGl0IHRv
IHRyYW5zaXRpb24gdG8gYSBuZXcgcmVndWxhciBzdHJ1Y3R1cmUgbGlrZSBhZGRpbmcgYSBwcm9w
ZXJ0eSBkb2VzLiBUaGlzIG1lYW5zIHRoYXQgd2UgaGF2ZSB0bzoKKworICAgICAgICAxKSBCcmVh
ayB0aGUgYXNzdW1wdGlvbiB0aGF0IHN0cnVjdHVyZSB0cmFuc2l0aW9uIG9mZnNldHMgaW5jcmVh
c2UgbW9ub3RvbmljYWxseQorCisgICAgICAgIFdlIGFkZCBhIG5ldyBmbGFnIHRvIHRlbGwgdGhh
dCBhIHN0cnVjdHVyZSBoYXMgZGVsZXRlZCBpdHMgcHJvcGVydHksIGFuZCB1cGRhdGUgbWF0ZXJp
YWxpemVQcm9wZXJ0eVRhYmxlIHRvIHVzZSBpdC4KKworICAgICAgICAyKSBBZGQgYSBuZXcgdHJh
bnNpdGlvbiBtYXAgYW5kIHRyYW5zaXRpb24ga2luZCBmb3IgZGVsZXRlcworCisgICAgICAgIFdl
IGNhY2hlIHRoZSBkZWxldGUgdHJhbnNpdGlvbi4gV2Ugd2lsbCBub3QgdHJhbnNpdGlvbiBiYWNr
IHRvIGEgcHJldmlvdXMgc3RydWN0dXJlIGlmIHlvdSBhZGQgdGhlbiBpbW1lZGlhdGVseSByZW1v
dmUgYSBwcm9wZXJ0eS4KKworICAgICAgICAzKSBGaW5kIHNvbWUgaGV1cmlzdGljIGZvciB3aGVu
IHdlIHNob3VsZCBhY3R1YWxseSB0cmFuc2l0aW9uIHRvIHVuY2FjaGVhYmxlIGRpY3Rpb25hcnku
CisKKyAgICAgICAgU2luY2UgZGVsZXRpbmcgcHJvcGVydGllcyBpcyBleHBlY3RlZCB0byBiZSBy
YXJlLCB3ZSBqdXN0IHdhbGsgdGhlIHN0cnVjdHVyZSBsaXN0IGFuZCBjb3VudCBpdHMgc2l6ZSBv
biByZW1vdmFsLiAKKworICAgICAgICBUaGlzIHBhdGNoIGFsc28gZml4ZXMgYSByZWxhdGVkIGJ1
ZyBpbiBhZGRQcm9wZXJ0eSwgd2hlcmUgd2UgZGlkIG5vdCB1c2UgYSBHQ1NhZmVDb25jdXJyZW50
SlNMb2NrZXIsIGFuZCBhZGRzIGFuIG9wdGlvbiB0byB0cmlnZ2VyIHRoZSBidWcuIEZpbmFsbHks
IHdlIGFkZCBzb21lIGhlbHBlciBtZXRob2RzIHRvIGRvbGxhclZNIHRvIHRlc3QuCisKKyAgICAg
ICAgVGhpcyBnaXZlcyBhIDI0eCBzcGVlZHVwIG9uIGRlbGV0ZS1wcm9wZXJ0eS1rZWVwcy1jYWNo
ZWFibGUtc3RydWN0dXJlLmpzLCBhbmQgaXMgbmV1dHJhbCBvbiBkZWxldGUtcHJvcGVydHktZnJv
bS1wcm90b3R5cGUtY2hhaW4uanMgKHdoaWNoIHdhcyBhbHJlYWR5IGdlbmVyYXRpbmcgY29kZSB1
c2luZyB0aGUgaW5saW5lIGNhY2hlKS4KKworICAgICAgICAqIGhlYXAvSGVhcElubGluZXMuaDoK
KyAgICAgICAgKEpTQzo6SGVhcDo6ZGVjcmVtZW50RGVmZXJyYWxEZXB0aEFuZEdDSWZOZWVkZWQp
OgorICAgICAgICAqIHJ1bnRpbWUvSlNPYmplY3QuY3BwOgorICAgICAgICAoSlNDOjpKU09iamVj
dDo6ZGVsZXRlUHJvcGVydHkpOgorICAgICAgICAqIHJ1bnRpbWUvT3B0aW9uc0xpc3QuaDoKKyAg
ICAgICAgKiBydW50aW1lL1Byb3BlcnR5TWFwSGFzaFRhYmxlLmg6CisgICAgICAgIChKU0M6OlBy
b3BlcnR5VGFibGU6OmdldCk6CisgICAgICAgIChKU0M6OlByb3BlcnR5VGFibGU6OmFkZCk6Cisg
ICAgICAgIChKU0M6OlByb3BlcnR5VGFibGU6OmFkZERlbGV0ZWRPZmZzZXQpOgorICAgICAgICAo
SlNDOjpQcm9wZXJ0eVRhYmxlOjpyZWluc2VydCk6CisgICAgICAgICogcnVudGltZS9TdHJ1Y3R1
cmUuY3BwOgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmVUcmFuc2l0aW9uVGFibGU6OmNvbnRhaW5z
IGNvbnN0KToKKyAgICAgICAgKEpTQzo6U3RydWN0dXJlVHJhbnNpdGlvblRhYmxlOjpnZXQgY29u
c3QpOgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmVUcmFuc2l0aW9uVGFibGU6OmFkZCk6CisgICAg
ICAgIChKU0M6OlN0cnVjdHVyZTo6U3RydWN0dXJlKToKKyAgICAgICAgKEpTQzo6U3RydWN0dXJl
OjptYXRlcmlhbGl6ZVByb3BlcnR5VGFibGUpOgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmU6OmFk
ZE5ld1Byb3BlcnR5VHJhbnNpdGlvbik6CisgICAgICAgIChKU0M6OlN0cnVjdHVyZTo6cmVtb3Zl
UHJvcGVydHlUcmFuc2l0aW9uKToKKyAgICAgICAgKEpTQzo6U3RydWN0dXJlOjpyZW1vdmVQcm9w
ZXJ0eVRyYW5zaXRpb25Gcm9tRXhpc3RpbmdTdHJ1Y3R1cmUpOgorICAgICAgICAoSlNDOjpTdHJ1
Y3R1cmU6OnJlbW92ZU5ld1Byb3BlcnR5VHJhbnNpdGlvbik6CisgICAgICAgIChKU0M6OlN0cnVj
dHVyZTo6dG9VbmNhY2hlYWJsZURpY3Rpb25hcnlUcmFuc2l0aW9uKToKKyAgICAgICAgKEpTQzo6
U3RydWN0dXJlOjpyZW1vdmUpOgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmU6OnZpc2l0Q2hpbGRy
ZW4pOgorICAgICAgICAqIHJ1bnRpbWUvU3RydWN0dXJlLmg6CisgICAgICAgICogcnVudGltZS9T
dHJ1Y3R1cmVJbmxpbmVzLmg6CisgICAgICAgIChKU0M6OlN0cnVjdHVyZTo6Zm9yRWFjaFByb3Bl
cnR5Q29uY3VycmVudGx5KToKKyAgICAgICAgKEpTQzo6U3RydWN0dXJlOjphZGQpOgorICAgICAg
ICAoSlNDOjpTdHJ1Y3R1cmU6OnJlbW92ZSk6CisgICAgICAgIChKU0M6OlN0cnVjdHVyZTo6cmVt
b3ZlUHJvcGVydHlXaXRob3V0VHJhbnNpdGlvbik6CisgICAgICAgICogcnVudGltZS9TdHJ1Y3R1
cmVUcmFuc2l0aW9uVGFibGUuaDoKKyAgICAgICAgKEpTQzo6U3RydWN0dXJlVHJhbnNpdGlvblRh
YmxlOjpIYXNoOjpoYXNoKToKKyAgICAgICAgKiB0b29scy9KU0RvbGxhclZNLmNwcDoKKyAgICAg
ICAgKEpTQzo6SlNEb2xsYXJWTUhlbHBlcjo6ZnVuY3Rpb25HZXRTdHJ1Y3R1cmVUcmFuc2l0aW9u
TGlzdCk6CisgICAgICAgIChKU0M6OmZ1bmN0aW9uR2V0Q29uY3VycmVudGx5KToKKyAgICAgICAg
KEpTQzo6SlNEb2xsYXJWTTo6ZmluaXNoQ3JlYXRpb24pOgorCiAyMDIwLTAxLTI4ICBZdXN1a2Ug
U3V6dWtpICA8eXN1enVraUBhcHBsZS5jb20+CiAKICAgICAgICAgW0pTQ10gR2l2ZSB1cCBJQyB3
aGVuIHVua25vd24gc3RydWN0dXJlIHRyYW5zaXRpb24gaGFwcGVucwpkaWZmIC0tZ2l0IGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcElubGluZXMuaCBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9oZWFwL0hlYXBJbmxpbmVzLmgKaW5kZXggMTdmMjQxMThiODIyZWZiN2Y2NmVlMTI1OTUz
NzhmYTU4YzIxN2M2Mi4uN2FmMDU2M2IxMWViNmQ4YzE1MjJkNjIwOWZjNGMxOWQ1NTRhN2RjZiAx
MDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcElubGluZXMuaAorKysg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwSW5saW5lcy5oCkBAIC0xODgsNyArMTg4
LDcgQEAgaW5saW5lIHZvaWQgSGVhcDo6ZGVjcmVtZW50RGVmZXJyYWxEZXB0aEFuZEdDSWZOZWVk
ZWQoKQogICAgIEFTU0VSVCghVGhyZWFkOjptYXlCZUdDVGhyZWFkKCkgfHwgbV93b3JsZElzU3Rv
cHBlZCk7CiAgICAgbV9kZWZlcnJhbERlcHRoLS07CiAgICAgCi0gICAgaWYgKFVOTElLRUxZKG1f
ZGlkRGVmZXJHQ1dvcmspKSB7CisgICAgaWYgKFVOTElLRUxZKG1fZGlkRGVmZXJHQ1dvcmspIHx8
IE9wdGlvbnM6OmZvcmNlRGlkRGVmZXJHQ1dvcmsoKSkgewogICAgICAgICBkZWNyZW1lbnREZWZl
cnJhbERlcHRoQW5kR0NJZk5lZWRlZFNsb3coKTsKICAgICAgICAgCiAgICAgICAgIC8vIEhlcmUg
YXJlIHRoZSBwb3NzaWJsZSByZWxhdGlvbnNoaXBzIGJldHdlZW4gbV9kZWZlcnJhbERlcHRoIGFu
ZCBtX2RpZERlZmVyR0NXb3JrLgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSlNPYmplY3QuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNPYmpl
Y3QuY3BwCmluZGV4IGQ2N2JhOGQ1Y2E5NTY5ZDA0YTE5ZTUwMzY0NTMwNTk2YmE5ZDg4ZDIuLmFj
ZDI5ZGVkODEzNTFmYjI4NGIyMTU5YWQ0N2E2MzFjMzQ5NGYxZGYgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT2JqZWN0LmNwcAorKysgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9KU09iamVjdC5jcHAKQEAgLTIwMDEsMTIgKzIwMDEsMjIgQEAgYm9v
bCBKU09iamVjdDo6ZGVsZXRlUHJvcGVydHkoSlNDZWxsKiBjZWxsLCBKU0dsb2JhbE9iamVjdCog
Z2xvYmFsT2JqZWN0LCBQcm9wZXIKICAgICBpZiAocHJvcGVydHlJc1ByZXNlbnQpIHsKICAgICAg
ICAgaWYgKGF0dHJpYnV0ZXMgJiBQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udERlbGV0ZSAmJiB2bS5k
ZWxldGVQcm9wZXJ0eU1vZGUoKSAhPSBWTTo6RGVsZXRlUHJvcGVydHlNb2RlOjpJZ25vcmVDb25m
aWd1cmFibGUpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIERlZmVycmVkU3Ry
dWN0dXJlVHJhbnNpdGlvbldhdGNocG9pbnRGaXJlIGRlZmVycmVkV2F0Y2hwb2ludEZpcmUodm0s
IHN0cnVjdHVyZSk7CiAKLSAgICAgICAgUHJvcGVydHlPZmZzZXQgb2Zmc2V0OworICAgICAgICBQ
cm9wZXJ0eU9mZnNldCBvZmZzZXQgPSBpbnZhbGlkT2Zmc2V0OwogICAgICAgICBpZiAoc3RydWN0
dXJlLT5pc1VuY2FjaGVhYmxlRGljdGlvbmFyeSgpKQotICAgICAgICAgICAgb2Zmc2V0ID0gc3Ry
dWN0dXJlLT5yZW1vdmVQcm9wZXJ0eVdpdGhvdXRUcmFuc2l0aW9uKHZtLCBwcm9wZXJ0eU5hbWUs
IFtdIChjb25zdCBDb25jdXJyZW50SlNMb2NrZXImLCBQcm9wZXJ0eU9mZnNldCkgeyB9KTsKLSAg
ICAgICAgZWxzZQotICAgICAgICAgICAgdGhpc09iamVjdC0+c2V0U3RydWN0dXJlKHZtLCBTdHJ1
Y3R1cmU6OnJlbW92ZVByb3BlcnR5VHJhbnNpdGlvbih2bSwgc3RydWN0dXJlLCBwcm9wZXJ0eU5h
bWUsIG9mZnNldCkpOworICAgICAgICAgICAgb2Zmc2V0ID0gc3RydWN0dXJlLT5yZW1vdmVQcm9w
ZXJ0eVdpdGhvdXRUcmFuc2l0aW9uKHZtLCBwcm9wZXJ0eU5hbWUsIFtdIChjb25zdCBHQ1NhZmVD
b25jdXJyZW50SlNMb2NrZXImLCBQcm9wZXJ0eU9mZnNldCwgUHJvcGVydHlPZmZzZXQpIHsgfSk7
CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgc3RydWN0dXJlID0gU3RydWN0dXJlOjpyZW1v
dmVQcm9wZXJ0eVRyYW5zaXRpb24odm0sIHN0cnVjdHVyZSwgcHJvcGVydHlOYW1lLCBvZmZzZXQs
ICZkZWZlcnJlZFdhdGNocG9pbnRGaXJlKTsKKyAgICAgICAgICAgIGlmICh0aGlzT2JqZWN0LT5t
X2J1dHRlcmZseSAmJiAhc3RydWN0dXJlLT5vdXRPZkxpbmVDYXBhY2l0eSgpICYmICFzdHJ1Y3R1
cmUtPmhhc0luZGV4aW5nSGVhZGVyKHRoaXNPYmplY3QpKSB7CisgICAgICAgICAgICAgICAgdGhp
c09iamVjdC0+bnVrZVN0cnVjdHVyZUFuZFNldEJ1dHRlcmZseSh2bSwgdGhpc09iamVjdC0+c3Ry
dWN0dXJlSUQoKSwgbnVsbHB0cik7CisgICAgICAgICAgICAgICAgb2Zmc2V0ID0gaW52YWxpZE9m
ZnNldDsKKyAgICAgICAgICAgICAgICBBU1NFUlQoc3RydWN0dXJlLT5tYXhPZmZzZXQoKSA9PSBp
bnZhbGlkT2Zmc2V0KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHRoaXNPYmplY3QtPnNl
dFN0cnVjdHVyZSh2bSwgc3RydWN0dXJlKTsKKyAgICAgICAgfQorCisgICAgICAgIEFTU0VSVCgh
aXNWYWxpZE9mZnNldChzdHJ1Y3R1cmUtPmdldCh2bSwgcHJvcGVydHlOYW1lLCBhdHRyaWJ1dGVz
KSkpOwogCiAgICAgICAgIGlmIChvZmZzZXQgIT0gaW52YWxpZE9mZnNldCkKICAgICAgICAgICAg
IHRoaXNPYmplY3QtPmxvY2F0aW9uRm9yT2Zmc2V0KG9mZnNldCktPmNsZWFyKCk7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PcHRpb25zTGlzdC5oIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9uc0xpc3QuaAppbmRleCA1N2MyZDJkMmFkMTlh
ODEyNjVjYjBmMGMzMjNhMzA0Y2UwNzZlM2VmLi5mMzU2ZDU5ODc4NjVkZjcwNWM5Mjk2Nzg5MzI3
MTMxNWRlYTBhNWRkIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9P
cHRpb25zTGlzdC5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09wdGlvbnNM
aXN0LmgKQEAgLTM0Nyw2ICszNDcsNyBAQCBjb25zdGV4cHIgYm9vbCBlbmFibGVXZWJBc3NlbWJs
eVN0cmVhbWluZ0FwaSA9IGZhbHNlOwogICAgIHYoQm9vbCwgdXNlR0MsIHRydWUsIE5vcm1hbCwg
bnVsbHB0cikgXAogICAgIHYoQm9vbCwgZ2NBdEVuZCwgZmFsc2UsIE5vcm1hbCwgIklmIHRydWUs
IHRoZSBqc2MgQ0xJIHdpbGwgZG8gYSBHQyBiZWZvcmUgZXhpdGluZyIpIFwKICAgICB2KEJvb2ws
IGZvcmNlR0NTbG93UGF0aHMsIGZhbHNlLCBOb3JtYWwsICJJZiB0cnVlLCB3ZSB3aWxsIGZvcmNl
IGFsbCBKSVQgZmFzdCBhbGxvY2F0aW9ucyBkb3duIHRoZWlyIHNsb3cgcGF0aHMuIikgXAorICAg
IHYoQm9vbCwgZm9yY2VEaWREZWZlckdDV29yaywgZmFsc2UsIE5vcm1hbCwgIklmIHRydWUsIHdl
IHdpbGwgZm9yY2UgYWxsIERlZmVyR0MgZGVzdHJ1Y3Rpb25zIHRvIHBlcmZvcm0gYSBHQy4iKSBc
CiAgICAgdihVbnNpZ25lZCwgZ2NNYXhIZWFwU2l6ZSwgMCwgTm9ybWFsLCBudWxscHRyKSBcCiAg
ICAgdihVbnNpZ25lZCwgZm9yY2VSQU1TaXplLCAwLCBOb3JtYWwsIG51bGxwdHIpIFwKICAgICB2
KEJvb2wsIHJlY29yZEdDUGF1c2VUaW1lcywgZmFsc2UsIE5vcm1hbCwgbnVsbHB0cikgXApkaWZm
IC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUHJvcGVydHlNYXBIYXNoVGFi
bGUuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Byb3BlcnR5TWFwSGFzaFRhYmxl
LmgKaW5kZXggY2I2MDE1Y2YyMGU0NTMwMTE1OWJiMDBkNzQyNjIzNzRmZWVjYjljZi4uNTEzMmRl
ODVkMGY2NmIyZmExZmQzMjNmYWIxOGQwNmU4ODFkZWZkNCAxMDA2NDQKLS0tIGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvUHJvcGVydHlNYXBIYXNoVGFibGUuaAorKysgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9Qcm9wZXJ0eU1hcEhhc2hUYWJsZS5oCkBAIC0xNjksOCAr
MTY5LDcgQEAgcHVibGljOgogICAgIGZpbmRfaXRlcmF0b3IgZmluZChjb25zdCBLZXlUeXBlJik7
CiAgICAgVmFsdWVUeXBlKiBnZXQoY29uc3QgS2V5VHlwZSYpOwogICAgIC8vIEFkZCBhIHZhbHVl
IHRvIHRoZSB0YWJsZQotICAgIGVudW0gRWZmZWN0T25Qcm9wZXJ0eU9mZnNldCB7IFByb3BlcnR5
T2Zmc2V0TWF5Q2hhbmdlLCBQcm9wZXJ0eU9mZnNldE11c3ROb3RDaGFuZ2UgfTsKLSAgICBzdGQ6
OnBhaXI8ZmluZF9pdGVyYXRvciwgYm9vbD4gYWRkKGNvbnN0IFZhbHVlVHlwZSYgZW50cnksIFBy
b3BlcnR5T2Zmc2V0JiwgRWZmZWN0T25Qcm9wZXJ0eU9mZnNldCk7CisgICAgc3RkOjpwYWlyPGZp
bmRfaXRlcmF0b3IsIGJvb2w+IFdBUk5fVU5VU0VEX1JFVFVSTiBhZGQoY29uc3QgVmFsdWVUeXBl
JiBlbnRyeSk7CiAgICAgLy8gUmVtb3ZlIGEgdmFsdWUgZnJvbSB0aGUgdGFibGUuCiAgICAgdm9p
ZCByZW1vdmUoY29uc3QgZmluZF9pdGVyYXRvciYgaXRlcik7CiAgICAgdm9pZCByZW1vdmUoY29u
c3QgS2V5VHlwZSYga2V5KTsKQEAgLTMyMSw2ICszMjAsNyBAQCBpbmxpbmUgUHJvcGVydHlUYWJs
ZTo6VmFsdWVUeXBlKiBQcm9wZXJ0eVRhYmxlOjpnZXQoY29uc3QgS2V5VHlwZSYga2V5KQogewog
ICAgIEFTU0VSVChrZXkpOwogICAgIEFTU0VSVChrZXktPmlzQXRvbSgpIHx8IGtleS0+aXNTeW1i
b2woKSk7CisgICAgQVNTRVJUKGtleSAhPSBQUk9QRVJUWV9NQVBfREVMRVRFRF9FTlRSWV9LRVkp
OwogCiAgICAgaWYgKCFtX2tleUNvdW50KQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKQEAgLTMz
NSw4ICszMzUsMTAgQEAgaW5saW5lIFByb3BlcnR5VGFibGU6OlZhbHVlVHlwZSogUHJvcGVydHlU
YWJsZTo6Z2V0KGNvbnN0IEtleVR5cGUmIGtleSkKICAgICAgICAgdW5zaWduZWQgZW50cnlJbmRl
eCA9IG1faW5kZXhbaGFzaCAmIG1faW5kZXhNYXNrXTsKICAgICAgICAgaWYgKGVudHJ5SW5kZXgg
PT0gRW1wdHlFbnRyeUluZGV4KQogICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgICAg
IGlmIChrZXkgPT0gdGFibGUoKVtlbnRyeUluZGV4IC0gMV0ua2V5KQorICAgICAgICBpZiAoa2V5
ID09IHRhYmxlKClbZW50cnlJbmRleCAtIDFdLmtleSkgeworICAgICAgICAgICAgQVNTRVJUKCFt
X2RlbGV0ZWRPZmZzZXRzIHx8ICFtX2RlbGV0ZWRPZmZzZXRzLT5jb250YWlucyh0YWJsZSgpW2Vu
dHJ5SW5kZXggLSAxXS5vZmZzZXQpKTsKICAgICAgICAgICAgIHJldHVybiAmdGFibGUoKVtlbnRy
eUluZGV4IC0gMV07CisgICAgICAgIH0KIAogI2lmIERVTVBfUFJPUEVSVFlNQVBfU1RBVFMKICAg
ICAgICAgKytwcm9wZXJ0eU1hcEhhc2hUYWJsZVN0YXRzLT5udW1Mb29rdXBQcm9iaW5nOwpAQCAt
MzQ2LDE0ICszNDgsMjEgQEAgaW5saW5lIFByb3BlcnR5VGFibGU6OlZhbHVlVHlwZSogUHJvcGVy
dHlUYWJsZTo6Z2V0KGNvbnN0IEtleVR5cGUmIGtleSkKICAgICB9CiB9CiAKLWlubGluZSBzdGQ6
OnBhaXI8UHJvcGVydHlUYWJsZTo6ZmluZF9pdGVyYXRvciwgYm9vbD4gUHJvcGVydHlUYWJsZTo6
YWRkKGNvbnN0IFZhbHVlVHlwZSYgZW50cnksIFByb3BlcnR5T2Zmc2V0JiBvZmZzZXQsIEVmZmVj
dE9uUHJvcGVydHlPZmZzZXQgb2Zmc2V0RWZmZWN0KQoraW5saW5lIHN0ZDo6cGFpcjxQcm9wZXJ0
eVRhYmxlOjpmaW5kX2l0ZXJhdG9yLCBib29sPiBXQVJOX1VOVVNFRF9SRVRVUk4gUHJvcGVydHlU
YWJsZTo6YWRkKGNvbnN0IFZhbHVlVHlwZSYgZW50cnkpCiB7CisgICAgQVNTRVJUKCFtX2RlbGV0
ZWRPZmZzZXRzIHx8ICFtX2RlbGV0ZWRPZmZzZXRzLT5jb250YWlucyhlbnRyeS5vZmZzZXQpKTsK
KwogICAgIC8vIExvb2sgZm9yIGEgdmFsdWUgd2l0aCBhIG1hdGNoaW5nIGtleSBhbHJlYWR5IGlu
IHRoZSBhcnJheS4KICAgICBmaW5kX2l0ZXJhdG9yIGl0ZXIgPSBmaW5kKGVudHJ5LmtleSk7Ci0g
ICAgaWYgKGl0ZXIuZmlyc3QpIHsKLSAgICAgICAgUkVMRUFTRV9BU1NFUlQoaXRlci5maXJzdC0+
b2Zmc2V0IDw9IG9mZnNldCk7CisgICAgaWYgKGl0ZXIuZmlyc3QpCiAgICAgICAgIHJldHVybiBz
dGQ6Om1ha2VfcGFpcihpdGVyLCBmYWxzZSk7CisKKyNpZm5kZWYgTkRFQlVHCisgICAgZm9yIChh
dXRvJiBvdGhlciA6ICp0aGlzKSB7CisgICAgICAgIEFTU0VSVChvdGhlci5vZmZzZXQgIT0gZW50
cnkub2Zmc2V0KTsKKyAgICAgICAgQVNTRVJUKG90aGVyLmtleSAhPSBlbnRyeS5rZXkpOwogICAg
IH0KKyNlbmRpZgogCiAjaWYgRFVNUF9QUk9QRVJUWU1BUF9TVEFUUwogICAgICsrcHJvcGVydHlN
YXBIYXNoVGFibGVTdGF0cy0+bnVtQWRkczsKQEAgLTM3NywxMSArMzg2LDYgQEAgaW5saW5lIHN0
ZDo6cGFpcjxQcm9wZXJ0eVRhYmxlOjpmaW5kX2l0ZXJhdG9yLCBib29sPiBQcm9wZXJ0eVRhYmxl
OjphZGQoY29uc3QgVmEKIAogICAgICsrbV9rZXlDb3VudDsKICAgICAKLSAgICBpZiAob2Zmc2V0
RWZmZWN0ID09IFByb3BlcnR5T2Zmc2V0TWF5Q2hhbmdlKQotICAgICAgICBvZmZzZXQgPSBzdGQ6
Om1heChvZmZzZXQsIGVudHJ5Lm9mZnNldCk7Ci0gICAgZWxzZQotICAgICAgICBSRUxFQVNFX0FT
U0VSVChvZmZzZXQgPj0gZW50cnkub2Zmc2V0KTsKLSAgICAKICAgICByZXR1cm4gc3RkOjptYWtl
X3BhaXIoaXRlciwgdHJ1ZSk7CiB9CiAKQEAgLTQ1MSw2ICs0NTUsNyBAQCBpbmxpbmUgdm9pZCBQ
cm9wZXJ0eVRhYmxlOjphZGREZWxldGVkT2Zmc2V0KFByb3BlcnR5T2Zmc2V0IG9mZnNldCkKIHsK
ICAgICBpZiAoIW1fZGVsZXRlZE9mZnNldHMpCiAgICAgICAgIG1fZGVsZXRlZE9mZnNldHMgPSBt
YWtlVW5pcXVlPFZlY3RvcjxQcm9wZXJ0eU9mZnNldD4+KCk7CisgICAgQVNTRVJUKCFtX2RlbGV0
ZWRPZmZzZXRzLT5jb250YWlucyhvZmZzZXQpKTsKICAgICBtX2RlbGV0ZWRPZmZzZXRzLT5hcHBl
bmQob2Zmc2V0KTsKIH0KIApAQCAtNDg5LDYgKzQ5NCwxMyBAQCBpbmxpbmUgdm9pZCBQcm9wZXJ0
eVRhYmxlOjpyZWluc2VydChjb25zdCBWYWx1ZVR5cGUmIGVudHJ5KQogICAgICsrcHJvcGVydHlN
YXBIYXNoVGFibGVTdGF0cy0+bnVtUmVpbnNlcnRzOwogI2VuZGlmCiAKKyNpZm5kZWYgTkRFQlVH
CisgICAgZm9yIChhdXRvJiBvdGhlciA6ICp0aGlzKSB7CisgICAgICAgIEFTU0VSVChvdGhlci5v
ZmZzZXQgIT0gZW50cnkub2Zmc2V0KTsKKyAgICAgICAgQVNTRVJUKG90aGVyLmtleSAhPSBlbnRy
eS5rZXkpOworICAgIH0KKyNlbmRpZgorCiAgICAgLy8gVXNlZCB0byBpbnNlcnQgYSB2YWx1ZSBr
bm93biBub3QgdG8gYmUgaW4gdGhlIHRhYmxlLCBhbmQgd2hlcmUKICAgICAvLyB3ZSBrbm93IGNh
cGFjaXR5IHRvIGJlIGF2YWlsYWJsZS4KICAgICBBU1NFUlQoY2FuSW5zZXJ0KCkpOwpkaWZmIC0t
Z2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlLmNwcCBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZS5jcHAKaW5kZXggM2UxNGY4YjZhMzNi
ZWRkY2NmMGViYTFkMmYyOTFiNzc1ODc5NGZhOS4uY2MzYmJlZmYxM2VhOGExZTgyMjBiZjY0ZTI5
MjJiNTZhZDExNzIxMyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
U3RydWN0dXJlLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1
cmUuY3BwCkBAIC04NywyMiArODcsMjIgQEAgaW5saW5lIHZvaWQgU3RydWN0dXJlVHJhbnNpdGlv
blRhYmxlOjpzZXRTaW5nbGVUcmFuc2l0aW9uKFN0cnVjdHVyZSogc3RydWN0dXJlKQogICAgIG1f
ZGF0YSA9IGJpdHdpc2VfY2FzdDxpbnRwdHJfdD4oaW1wbCkgfCBVc2luZ1NpbmdsZVNsb3RGbGFn
OwogfQogCi1ib29sIFN0cnVjdHVyZVRyYW5zaXRpb25UYWJsZTo6Y29udGFpbnMoVW5pcXVlZFN0
cmluZ0ltcGwqIHJlcCwgdW5zaWduZWQgYXR0cmlidXRlcykgY29uc3QKK2Jvb2wgU3RydWN0dXJl
VHJhbnNpdGlvblRhYmxlOjpjb250YWlucyhVbmlxdWVkU3RyaW5nSW1wbCogcmVwLCB1bnNpZ25l
ZCBhdHRyaWJ1dGVzLCBib29sIGlzQWRkaXRpb24pIGNvbnN0CiB7CiAgICAgaWYgKGlzVXNpbmdT
aW5nbGVTbG90KCkpIHsKICAgICAgICAgU3RydWN0dXJlKiB0cmFuc2l0aW9uID0gc2luZ2xlVHJh
bnNpdGlvbigpOwotICAgICAgICByZXR1cm4gdHJhbnNpdGlvbiAmJiB0cmFuc2l0aW9uLT5tX3Ry
YW5zaXRpb25Qcm9wZXJ0eU5hbWUgPT0gcmVwICYmIHRyYW5zaXRpb24tPnRyYW5zaXRpb25Qcm9w
ZXJ0eUF0dHJpYnV0ZXMoKSA9PSBhdHRyaWJ1dGVzOworICAgICAgICByZXR1cm4gdHJhbnNpdGlv
biAmJiB0cmFuc2l0aW9uLT5tX3RyYW5zaXRpb25Qcm9wZXJ0eU5hbWUgPT0gcmVwICYmIHRyYW5z
aXRpb24tPnRyYW5zaXRpb25Qcm9wZXJ0eUF0dHJpYnV0ZXMoKSA9PSBhdHRyaWJ1dGVzICYmIHRy
YW5zaXRpb24tPmlzUHJvcGVydHlEZWxldGlvblRyYW5zaXRpb24oKSA9PSAhaXNBZGRpdGlvbjsK
ICAgICB9Ci0gICAgcmV0dXJuIG1hcCgpLT5nZXQoc3RkOjptYWtlX3BhaXIocmVwLCBhdHRyaWJ1
dGVzKSk7CisgICAgcmV0dXJuIG1hcCgpLT5nZXQoc3RkOjptYWtlX3R1cGxlKHJlcCwgYXR0cmli
dXRlcywgaXNBZGRpdGlvbikpOwogfQogCi1pbmxpbmUgU3RydWN0dXJlKiBTdHJ1Y3R1cmVUcmFu
c2l0aW9uVGFibGU6OmdldChVbmlxdWVkU3RyaW5nSW1wbCogcmVwLCB1bnNpZ25lZCBhdHRyaWJ1
dGVzKSBjb25zdAoraW5saW5lIFN0cnVjdHVyZSogU3RydWN0dXJlVHJhbnNpdGlvblRhYmxlOjpn
ZXQoVW5pcXVlZFN0cmluZ0ltcGwqIHJlcCwgdW5zaWduZWQgYXR0cmlidXRlcywgYm9vbCBpc0Fk
ZGl0aW9uKSBjb25zdAogewogICAgIGlmIChpc1VzaW5nU2luZ2xlU2xvdCgpKSB7CiAgICAgICAg
IFN0cnVjdHVyZSogdHJhbnNpdGlvbiA9IHNpbmdsZVRyYW5zaXRpb24oKTsKLSAgICAgICAgcmV0
dXJuICh0cmFuc2l0aW9uICYmIHRyYW5zaXRpb24tPm1fdHJhbnNpdGlvblByb3BlcnR5TmFtZSA9
PSByZXAgJiYgdHJhbnNpdGlvbi0+dHJhbnNpdGlvblByb3BlcnR5QXR0cmlidXRlcygpID09IGF0
dHJpYnV0ZXMpID8gdHJhbnNpdGlvbiA6IDA7CisgICAgICAgIHJldHVybiAodHJhbnNpdGlvbiAm
JiB0cmFuc2l0aW9uLT5tX3RyYW5zaXRpb25Qcm9wZXJ0eU5hbWUgPT0gcmVwICYmIHRyYW5zaXRp
b24tPnRyYW5zaXRpb25Qcm9wZXJ0eUF0dHJpYnV0ZXMoKSA9PSBhdHRyaWJ1dGVzICYmIHRyYW5z
aXRpb24tPmlzUHJvcGVydHlEZWxldGlvblRyYW5zaXRpb24oKSA9PSAhaXNBZGRpdGlvbikgPyB0
cmFuc2l0aW9uIDogMDsKICAgICB9Ci0gICAgcmV0dXJuIG1hcCgpLT5nZXQoc3RkOjptYWtlX3Bh
aXIocmVwLCBhdHRyaWJ1dGVzKSk7CisgICAgcmV0dXJuIG1hcCgpLT5nZXQoc3RkOjptYWtlX3R1
cGxlKHJlcCwgYXR0cmlidXRlcywgaXNBZGRpdGlvbikpOwogfQogCiB2b2lkIFN0cnVjdHVyZVRy
YW5zaXRpb25UYWJsZTo6YWRkKFZNJiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUpCkBAIC0xMjcs
NyArMTI3LDcgQEAgdm9pZCBTdHJ1Y3R1cmVUcmFuc2l0aW9uVGFibGU6OmFkZChWTSYgdm0sIFN0
cnVjdHVyZSogc3RydWN0dXJlKQogICAgIC8vIE5ld2VyIHZlcnNpb25zIG9mIHRoZSBTVEwgaGF2
ZSBhbiBzdGQ6Om1ha2VfcGFpciBmdW5jdGlvbiB0aGF0IHRha2VzIHJ2YWx1ZSByZWZlcmVuY2Vz
LgogICAgIC8vIFdoZW4gZWl0aGVyIG9mIHRoZSBwYXJhbWV0ZXJzIGFyZSBiaXRmaWVsZHMsIHRo
ZSBDKysgY29tcGlsZXIgd2lsbCB0cnkgdG8gYmluZCB0aGVtIGFzIGx2YWx1ZXMsIHdoaWNoIGlz
IGludmFsaWQuIFRvIHdvcmsgYXJvdW5kIHRoaXMsIHVzZSB1bmFyeSAiKyIgdG8gbWFrZSB0aGUg
cGFyYW1ldGVyIGFuIHJ2YWx1ZS4KICAgICAvLyBTZWUgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTU5MjYxIGZvciBtb3JlIGRldGFpbHMKLSAgICBtYXAoKS0+c2V0KHN0
ZDo6bWFrZV9wYWlyKHN0cnVjdHVyZS0+bV90cmFuc2l0aW9uUHJvcGVydHlOYW1lLmdldCgpLCAr
c3RydWN0dXJlLT50cmFuc2l0aW9uUHJvcGVydHlBdHRyaWJ1dGVzKCkpLCBzdHJ1Y3R1cmUpOwor
ICAgIG1hcCgpLT5zZXQoc3RkOjptYWtlX3R1cGxlKHN0cnVjdHVyZS0+bV90cmFuc2l0aW9uUHJv
cGVydHlOYW1lLmdldCgpLCArc3RydWN0dXJlLT50cmFuc2l0aW9uUHJvcGVydHlBdHRyaWJ1dGVz
KCksICFzdHJ1Y3R1cmUtPmlzUHJvcGVydHlEZWxldGlvblRyYW5zaXRpb24oKSksIHN0cnVjdHVy
ZSk7CiB9CiAKIHZvaWQgU3RydWN0dXJlOjpkdW1wU3RhdGlzdGljcygpCkBAIC0yMDAsNyArMjAw
LDggQEAgU3RydWN0dXJlOjpTdHJ1Y3R1cmUoVk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFs
T2JqZWN0LCBKU1ZhbHVlIHByb3RvdHlwZSwgY28KICAgICBzZXRTdGF0aWNQcm9wZXJ0aWVzUmVp
ZmllZChmYWxzZSk7CiAgICAgc2V0VHJhbnNpdGlvbldhdGNocG9pbnRJc0xpa2VseVRvQmVGaXJl
ZChmYWxzZSk7CiAgICAgc2V0SGFzQmVlbkRpY3Rpb25hcnkoZmFsc2UpOwotICAgIHNldElzQWRk
aW5nUHJvcGVydHlGb3JUcmFuc2l0aW9uKGZhbHNlKTsKKyAgICBzZXRQcm90ZWN0UHJvcGVydHlU
YWJsZVdoaWxlVHJhbnNpdGlvbmluZyhmYWxzZSk7CisgICAgc2V0SXNQcm9wZXJ0eURlbGV0aW9u
VHJhbnNpdGlvbihmYWxzZSk7CiAgICAgc2V0VHJhbnNpdGlvbk9mZnNldCh2bSwgaW52YWxpZE9m
ZnNldCk7CiAgICAgc2V0TWF4T2Zmc2V0KHZtLCBpbnZhbGlkT2Zmc2V0KTsKICAKQEAgLTIzNiw3
ICsyMzcsOCBAQCBTdHJ1Y3R1cmU6OlN0cnVjdHVyZShWTSYgdm0pCiAgICAgc2V0U3RhdGljUHJv
cGVydGllc1JlaWZpZWQoZmFsc2UpOwogICAgIHNldFRyYW5zaXRpb25XYXRjaHBvaW50SXNMaWtl
bHlUb0JlRmlyZWQoZmFsc2UpOwogICAgIHNldEhhc0JlZW5EaWN0aW9uYXJ5KGZhbHNlKTsKLSAg
ICBzZXRJc0FkZGluZ1Byb3BlcnR5Rm9yVHJhbnNpdGlvbihmYWxzZSk7CisgICAgc2V0UHJvdGVj
dFByb3BlcnR5VGFibGVXaGlsZVRyYW5zaXRpb25pbmcoZmFsc2UpOworICAgIHNldElzUHJvcGVy
dHlEZWxldGlvblRyYW5zaXRpb24oZmFsc2UpOwogICAgIHNldFRyYW5zaXRpb25PZmZzZXQodm0s
IGludmFsaWRPZmZzZXQpOwogICAgIHNldE1heE9mZnNldCh2bSwgaW52YWxpZE9mZnNldCk7CiAg
CkBAIC0yNzIsNyArMjc0LDggQEAgU3RydWN0dXJlOjpTdHJ1Y3R1cmUoVk0mIHZtLCBTdHJ1Y3R1
cmUqIHByZXZpb3VzLCBEZWZlcnJlZFN0cnVjdHVyZVRyYW5zaXRpb25XYXQKICAgICBzZXREaWRU
cmFuc2l0aW9uKHRydWUpOwogICAgIHNldFN0YXRpY1Byb3BlcnRpZXNSZWlmaWVkKHByZXZpb3Vz
LT5zdGF0aWNQcm9wZXJ0aWVzUmVpZmllZCgpKTsKICAgICBzZXRIYXNCZWVuRGljdGlvbmFyeShw
cmV2aW91cy0+aGFzQmVlbkRpY3Rpb25hcnkoKSk7Ci0gICAgc2V0SXNBZGRpbmdQcm9wZXJ0eUZv
clRyYW5zaXRpb24oZmFsc2UpOworICAgIHNldFByb3RlY3RQcm9wZXJ0eVRhYmxlV2hpbGVUcmFu
c2l0aW9uaW5nKGZhbHNlKTsKKyAgICBzZXRJc1Byb3BlcnR5RGVsZXRpb25UcmFuc2l0aW9uKGZh
bHNlKTsKICAgICBzZXRUcmFuc2l0aW9uT2Zmc2V0KHZtLCBpbnZhbGlkT2Zmc2V0KTsKICAgICBz
ZXRNYXhPZmZzZXQodm0sIGludmFsaWRPZmZzZXQpOwogIApAQCAtMzU2LDcgKzM1OSw3IEBAIHZv
aWQgU3RydWN0dXJlOjpmaW5kU3RydWN0dXJlc0FuZE1hcEZvck1hdGVyaWFsaXphdGlvbihWZWN0
b3I8U3RydWN0dXJlKiwgOD4mIHN0CiBQcm9wZXJ0eVRhYmxlKiBTdHJ1Y3R1cmU6Om1hdGVyaWFs
aXplUHJvcGVydHlUYWJsZShWTSYgdm0sIGJvb2wgc2V0UHJvcGVydHlUYWJsZSkKIHsKICAgICBB
U1NFUlQoc3RydWN0dXJlKHZtKS0+Y2xhc3NJbmZvKCkgPT0gaW5mbygpKTsKLSAgICBBU1NFUlQo
IWlzQWRkaW5nUHJvcGVydHlGb3JUcmFuc2l0aW9uKCkpOworICAgIEFTU0VSVCghcHJvdGVjdFBy
b3BlcnR5VGFibGVXaGlsZVRyYW5zaXRpb25pbmcoKSk7CiAgICAgCiAgICAgRGVmZXJHQyBkZWZl
ckdDKHZtLmhlYXApOwogICAgIApAQCAtMzg0LDEwICszODcsMTkgQEAgUHJvcGVydHlUYWJsZSog
U3RydWN0dXJlOjptYXRlcmlhbGl6ZVByb3BlcnR5VGFibGUoVk0mIHZtLCBib29sIHNldFByb3Bl
cnR5VGFibGUKICAgICAgICAgc3RydWN0dXJlID0gc3RydWN0dXJlc1tpXTsKICAgICAgICAgaWYg
KCFzdHJ1Y3R1cmUtPm1fdHJhbnNpdGlvblByb3BlcnR5TmFtZSkKICAgICAgICAgICAgIGNvbnRp
bnVlOwotICAgICAgICBBU1NFUlQoaSA9PSBzdHJ1Y3R1cmVzLnNpemUoKSAtIDEgfHwgc3RydWN0
dXJlLT5tYXhPZmZzZXQoKSA+IHN0cnVjdHVyZXNbaSArIDFdLT5tYXhPZmZzZXQoKSk7CisgICAg
ICAgIGlmIChzdHJ1Y3R1cmUtPmlzUHJvcGVydHlEZWxldGlvblRyYW5zaXRpb24oKSkgeworICAg
ICAgICAgICAgYXV0byBpdGVtID0gdGFibGUtPmZpbmQoc3RydWN0dXJlLT5tX3RyYW5zaXRpb25Q
cm9wZXJ0eU5hbWUuZ2V0KCkpOworICAgICAgICAgICAgQVNTRVJUKGl0ZW0uZmlyc3QpOworICAg
ICAgICAgICAgdGFibGUtPnJlbW92ZShpdGVtKTsKKyAgICAgICAgICAgIHRhYmxlLT5hZGREZWxl
dGVkT2Zmc2V0KHN0cnVjdHVyZS0+dHJhbnNpdGlvbk9mZnNldCgpKTsKKyAgICAgICAgICAgIGNv
bnRpbnVlOworICAgICAgICB9CiAgICAgICAgIFByb3BlcnR5TWFwRW50cnkgZW50cnkoc3RydWN0
dXJlLT5tX3RyYW5zaXRpb25Qcm9wZXJ0eU5hbWUuZ2V0KCksIHN0cnVjdHVyZS0+dHJhbnNpdGlv
bk9mZnNldCgpLCBzdHJ1Y3R1cmUtPnRyYW5zaXRpb25Qcm9wZXJ0eUF0dHJpYnV0ZXMoKSk7Ci0g
ICAgICAgIGF1dG8gbWF4T2Zmc2V0ID0gdGhpcy0+bWF4T2Zmc2V0KCk7Ci0gICAgICAgIHRhYmxl
LT5hZGQoZW50cnksIG1heE9mZnNldCwgUHJvcGVydHlUYWJsZTo6UHJvcGVydHlPZmZzZXRNdXN0
Tm90Q2hhbmdlKTsKKyAgICAgICAgYXV0byBuZXh0T2Zmc2V0ID0gdGFibGUtPm5leHRPZmZzZXQo
c3RydWN0dXJlLT5pbmxpbmVDYXBhY2l0eSgpKTsKKyAgICAgICAgQVNTRVJUX1VOVVNFRChuZXh0
T2Zmc2V0LCBuZXh0T2Zmc2V0ID09IHN0cnVjdHVyZS0+dHJhbnNpdGlvbk9mZnNldCgpKTsKKyAg
ICAgICAgYXV0byByZXN1bHQgPSB0YWJsZS0+YWRkKGVudHJ5KTsKKyAgICAgICAgQVNTRVJUX1VO
VVNFRChyZXN1bHQsIHJlc3VsdC5zZWNvbmQpOworICAgICAgICBBU1NFUlRfVU5VU0VEKHJlc3Vs
dCwgcmVzdWx0LmZpcnN0LmZpcnN0LT5vZmZzZXQgPT0gbmV4dE9mZnNldCk7CiAgICAgfQogICAg
IAogICAgIGNoZWNrT2Zmc2V0Q29uc2lzdGVuY3koCkBAIC00ODQsNyArNDk2LDYgQEAgU3RydWN0
dXJlKiBTdHJ1Y3R1cmU6OmFkZE5ld1Byb3BlcnR5VHJhbnNpdGlvbihWTSYgdm0sIFN0cnVjdHVy
ZSogc3RydWN0dXJlLCBQcm8KICAgICAgICAgU3RydWN0dXJlKiB0cmFuc2l0aW9uID0gdG9DYWNo
ZWFibGVEaWN0aW9uYXJ5VHJhbnNpdGlvbih2bSwgc3RydWN0dXJlLCBkZWZlcnJlZCk7CiAgICAg
ICAgIEFTU0VSVChzdHJ1Y3R1cmUgIT0gdHJhbnNpdGlvbik7CiAgICAgICAgIG9mZnNldCA9IHRy
YW5zaXRpb24tPmFkZCh2bSwgcHJvcGVydHlOYW1lLCBhdHRyaWJ1dGVzKTsKLSAgICAgICAgdHJh
bnNpdGlvbi0+c2V0VHJhbnNpdGlvbk9mZnNldCh2bSwgb2Zmc2V0KTsKICAgICAgICAgcmV0dXJu
IHRyYW5zaXRpb247CiAgICAgfQogICAgIApAQCAtNTAwLDEwICs1MTEsMTAgQEAgU3RydWN0dXJl
KiBTdHJ1Y3R1cmU6OmFkZE5ld1Byb3BlcnR5VHJhbnNpdGlvbihWTSYgdm0sIFN0cnVjdHVyZSog
c3RydWN0dXJlLCBQcm8KICAgICAvLyBIb2xkaW5nIHRoZSBsb2NrIGVuc3VyZXMgdGhhdCB3ZSBl
aXRoZXIgZG8gdGhpcyBiZWZvcmUgdGhlIEdDIHN0YXJ0cyBzY2FubmluZyB0aGUgc3RydWN0dXJl
LCBpbgogICAgIC8vIHdoaWNoIGNhc2UgdGhlIEdDIHdpbGwgbm90IGJsb3cgdGhlIHRhYmxlIGF3
YXksIG9yIHdlIGRvIGl0IGFmdGVyIHRoZSBHQyBhbHJlYWR5IHJhbiBpbiB3aGljaAogICAgIC8v
IGNhc2UgYWxsIGlzIHdlbGwuICBJZiBpdCB3YXNuJ3QgZm9yIHRoZSBsb2NrLCB0aGUgR0Mgd291
bGQgaGF2ZSBUT0NUT1U6IGlmIGNvdWxkIHJlYWQKLSAgICAvLyBpc0FkZGluZ1Byb3BlcnR5Rm9y
VHJhbnNpdGlvbiBiZWZvcmUgd2Ugc2V0IGl0IHRvIHRydWUsIGFuZCB0aGVuIGJsb3cgdGhlIHRh
YmxlIGF3YXkgYWZ0ZXIuCisgICAgLy8gcHJvdGVjdFByb3BlcnR5VGFibGVXaGlsZVRyYW5zaXRp
b25pbmcgYmVmb3JlIHdlIHNldCBpdCB0byB0cnVlLCBhbmQgdGhlbiBibG93IHRoZSB0YWJsZSBh
d2F5IGFmdGVyLgogICAgIHsKICAgICAgICAgQ29uY3VycmVudEpTTG9ja2VyIGxvY2tlcih0cmFu
c2l0aW9uLT5tX2xvY2spOwotICAgICAgICB0cmFuc2l0aW9uLT5zZXRJc0FkZGluZ1Byb3BlcnR5
Rm9yVHJhbnNpdGlvbih0cnVlKTsKKyAgICAgICAgdHJhbnNpdGlvbi0+c2V0UHJvdGVjdFByb3Bl
cnR5VGFibGVXaGlsZVRyYW5zaXRpb25pbmcodHJ1ZSk7CiAgICAgfQogCiAgICAgdHJhbnNpdGlv
bi0+bV9ibG9iLnNldEluZGV4aW5nTW9kZUluY2x1ZGluZ0hpc3Rvcnkoc3RydWN0dXJlLT5pbmRl
eGluZ01vZGVJbmNsdWRpbmdIaXN0b3J5KCkgJiB+Q29weU9uV3JpdGUpOwpAQCAtNTE4LDEyICs1
MjksMTEgQEAgU3RydWN0dXJlKiBTdHJ1Y3R1cmU6OmFkZE5ld1Byb3BlcnR5VHJhbnNpdGlvbihW
TSYgdm0sIFN0cnVjdHVyZSogc3RydWN0dXJlLCBQcm8KICAgICAvLyBOb3cgdGhhdCBldmVyeXRo
aW5nIGlzIGZpbmUgd2l0aCB0aGUgbmV3IHN0cnVjdHVyZSdzIGJvb2trZWVwaW5nLCB0aGUgR0Mg
aXMgZnJlZSB0byBibG93IHRoZQogICAgIC8vIHRhYmxlIGF3YXkgaWYgaXQgd2FudHMuIFdlIGNh
biBub3cgcmVidWlsZCBpdCBmaW5lLgogICAgIFdURjo6c3RvcmVTdG9yZUZlbmNlKCk7Ci0gICAg
dHJhbnNpdGlvbi0+c2V0SXNBZGRpbmdQcm9wZXJ0eUZvclRyYW5zaXRpb24oZmFsc2UpOworICAg
IHRyYW5zaXRpb24tPnNldFByb3RlY3RQcm9wZXJ0eVRhYmxlV2hpbGVUcmFuc2l0aW9uaW5nKGZh
bHNlKTsKIAogICAgIGNoZWNrT2Zmc2V0KHRyYW5zaXRpb24tPnRyYW5zaXRpb25PZmZzZXQoKSwg
dHJhbnNpdGlvbi0+aW5saW5lQ2FwYWNpdHkoKSk7CiAgICAgewotICAgICAgICBDb25jdXJyZW50
SlNMb2NrZXIgbG9ja2VyKHN0cnVjdHVyZS0+bV9sb2NrKTsKLSAgICAgICAgRGVmZXJHQyBkZWZl
ckdDKHZtLmhlYXApOworICAgICAgICBHQ1NhZmVDb25jdXJyZW50SlNMb2NrZXIgbG9ja2VyKHN0
cnVjdHVyZS0+bV9sb2NrLCB2bS5oZWFwKTsKICAgICAgICAgc3RydWN0dXJlLT5tX3RyYW5zaXRp
b25UYWJsZS5hZGQodm0sIHRyYW5zaXRpb24pOwogICAgIH0KICAgICB0cmFuc2l0aW9uLT5jaGVj
a09mZnNldENvbnNpc3RlbmN5KCk7CkBAIC01MzEsMjcgKzU0MSw4NCBAQCBTdHJ1Y3R1cmUqIFN0
cnVjdHVyZTo6YWRkTmV3UHJvcGVydHlUcmFuc2l0aW9uKFZNJiB2bSwgU3RydWN0dXJlKiBzdHJ1
Y3R1cmUsIFBybwogICAgIHJldHVybiB0cmFuc2l0aW9uOwogfQogCi1TdHJ1Y3R1cmUqIFN0cnVj
dHVyZTo6cmVtb3ZlUHJvcGVydHlUcmFuc2l0aW9uKFZNJiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1
cmUsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIFByb3BlcnR5T2Zmc2V0JiBvZmZzZXQpCi17
Ci0gICAgLy8gTk9URTogVGhlcmUgYXJlIHNvbWUgZ29vZCByZWFzb25zIHdoeSB0aGlzIGdvZXMg
ZGlyZWN0bHkgdG8gdW5jYWNoZWFibGUgZGljdGlvbmFyeSByYXRoZXIgdGhhbgotICAgIC8vIGNh
Y2hpbmcgdGhlIHJlbW92YWwuIFdlIGNhbiBmaXggYWxsIG9mIHRoZXNlIHRoaW5ncywgYnV0IHdl
IG11c3QgcmVtZW1iZXIgdG8gZG8gc28sIGlmIHdlIGV2ZXIgdHJ5Ci0gICAgLy8gdG8gb3B0aW1p
emUgdGhpcyBjYXNlLgotICAgIC8vCi0gICAgLy8gLSBDYWNoZWQgdHJhbnNpdGlvbnMgdXN1YWxs
eSBzdGVhbCB0aGUgcHJvcGVydHkgdGFibGUsIGFuZCBhc3N1bWUgdGhhdCB0aGlzIGlzIHBvc3Np
YmxlIGJlY2F1c2UgdGhleQotICAgIC8vICAgY2FuIGp1c3QgcmVidWlsZCB0aGUgdGFibGUgYnkg
bG9va2luZyBhdCBwYXN0IHRyYW5zaXRpb25zLiBUaGF0IGNvZGUgYXNzdW1lcyB0aGF0IHRoZSB0
YWJsZSBvbmx5Ci0gICAgLy8gICBncmV3IGFuZCBuZXZlciBzaHJhbmsuIFRvIHN1cHBvcnQgcmVt
b3ZhbHMsIHdlJ2QgaGF2ZSB0byBjaGFuZ2UgdGhlIHByb3BlcnR5IHRhYmxlIG1hdGVyaWFsaXph
dGlvbgotICAgIC8vICAgY29kZSB0byBoYW5kbGUgZGVsZXRpb25zLiBBbHNvLCB3ZSBoYXZlIGxv
Z2ljIHRvIGdldCB0aGUgbGlzdCBvZiBwcm9wZXJ0aWVzIG9uIGEgc3RydWN0dXJlIHRoYXQKLSAg
ICAvLyAgIGxhY2tzIGEgcHJvcGVydHkgdGFibGUgYnkganVzdCBsb29raW5nIGJhY2sgdGhyb3Vn
aCB0aGUgc2V0IG9mIHRyYW5zaXRpb25zIHNpbmNlIHRoZSBsYXN0Ci0gICAgLy8gICBzdHJ1Y3R1
cmUgdGhhdCBoYWQgYSBwaW5uZWQgdGFibGUuIFRoYXQgbG9naWMgd291bGQgYWxzbyBoYXZlIHRv
IGJlIGNoYW5nZWQgdG8gaGFuZGxlIGNhY2hlZAotICAgIC8vICAgcmVtb3ZhbHMuCi0gICAgLy8K
K1N0cnVjdHVyZSogU3RydWN0dXJlOjpyZW1vdmVQcm9wZXJ0eVRyYW5zaXRpb24oVk0mIHZtLCBT
dHJ1Y3R1cmUqIHN0cnVjdHVyZSwgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwgUHJvcGVydHlP
ZmZzZXQmIG9mZnNldCwgRGVmZXJyZWRTdHJ1Y3R1cmVUcmFuc2l0aW9uV2F0Y2hwb2ludEZpcmUq
IGRlZmVycmVkKQoreworICAgIFN0cnVjdHVyZSogbmV3U3RydWN0dXJlID0gcmVtb3ZlUHJvcGVy
dHlUcmFuc2l0aW9uRnJvbUV4aXN0aW5nU3RydWN0dXJlKAorICAgICAgICB2bSwgc3RydWN0dXJl
LCBwcm9wZXJ0eU5hbWUsIG9mZnNldCwgZGVmZXJyZWQpOworICAgIGlmIChuZXdTdHJ1Y3R1cmUp
CisgICAgICAgIHJldHVybiBuZXdTdHJ1Y3R1cmU7CisKKyAgICByZXR1cm4gcmVtb3ZlTmV3UHJv
cGVydHlUcmFuc2l0aW9uKAorICAgICAgICB2bSwgc3RydWN0dXJlLCBwcm9wZXJ0eU5hbWUsIG9m
ZnNldCwgZGVmZXJyZWQpOworfQorCitTdHJ1Y3R1cmUqIFN0cnVjdHVyZTo6cmVtb3ZlUHJvcGVy
dHlUcmFuc2l0aW9uRnJvbUV4aXN0aW5nU3RydWN0dXJlKFZNJiB2bSwgU3RydWN0dXJlKiBzdHJ1
Y3R1cmUsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIFByb3BlcnR5T2Zmc2V0JiBvZmZzZXQs
IERlZmVycmVkU3RydWN0dXJlVHJhbnNpdGlvbldhdGNocG9pbnRGaXJlKikKK3sKKyAgICBBU1NF
UlQoIWlzQ29tcGlsYXRpb25UaHJlYWQoKSk7CiAgICAgQVNTRVJUKCFzdHJ1Y3R1cmUtPmlzVW5j
YWNoZWFibGVEaWN0aW9uYXJ5KCkpOworICAgIEFTU0VSVChzdHJ1Y3R1cmUtPmlzT2JqZWN0KCkp
OworCisgICAgdW5zaWduZWQgYXR0cmlidXRlczsKKyAgICBzdHJ1Y3R1cmUtPmdldCh2bSwgcHJv
cGVydHlOYW1lLCBhdHRyaWJ1dGVzKTsKKworICAgIGlmIChTdHJ1Y3R1cmUqIGV4aXN0aW5nVHJh
bnNpdGlvbiA9IHN0cnVjdHVyZS0+bV90cmFuc2l0aW9uVGFibGUuZ2V0KHByb3BlcnR5TmFtZS51
aWQoKSwgYXR0cmlidXRlcywgZmFsc2UpKSB7CisgICAgICAgIHZhbGlkYXRlT2Zmc2V0KGV4aXN0
aW5nVHJhbnNpdGlvbi0+dHJhbnNpdGlvbk9mZnNldCgpLCBleGlzdGluZ1RyYW5zaXRpb24tPmlu
bGluZUNhcGFjaXR5KCkpOworICAgICAgICBvZmZzZXQgPSBleGlzdGluZ1RyYW5zaXRpb24tPnRy
YW5zaXRpb25PZmZzZXQoKTsKKyAgICAgICAgcmV0dXJuIGV4aXN0aW5nVHJhbnNpdGlvbjsKKyAg
ICB9CiAKLSAgICBTdHJ1Y3R1cmUqIHRyYW5zaXRpb24gPSB0b1VuY2FjaGVhYmxlRGljdGlvbmFy
eVRyYW5zaXRpb24odm0sIHN0cnVjdHVyZSk7CisgICAgcmV0dXJuIG51bGxwdHI7Cit9CiAKLSAg
ICBvZmZzZXQgPSB0cmFuc2l0aW9uLT5yZW1vdmUocHJvcGVydHlOYW1lKTsKK1N0cnVjdHVyZSog
U3RydWN0dXJlOjpyZW1vdmVOZXdQcm9wZXJ0eVRyYW5zaXRpb24oVk0mIHZtLCBTdHJ1Y3R1cmUq
IHN0cnVjdHVyZSwgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwgUHJvcGVydHlPZmZzZXQmIG9m
ZnNldCwgRGVmZXJyZWRTdHJ1Y3R1cmVUcmFuc2l0aW9uV2F0Y2hwb2ludEZpcmUqIGRlZmVycmVk
KQoreworICAgIEFTU0VSVCghc3RydWN0dXJlLT5pc1VuY2FjaGVhYmxlRGljdGlvbmFyeSgpKTsK
KyAgICBBU1NFUlQoc3RydWN0dXJlLT5pc09iamVjdCgpKTsKKyAgICBBU1NFUlQoIVN0cnVjdHVy
ZTo6cmVtb3ZlUHJvcGVydHlUcmFuc2l0aW9uRnJvbUV4aXN0aW5nU3RydWN0dXJlKHZtLCBzdHJ1
Y3R1cmUsIHByb3BlcnR5TmFtZSwgb2Zmc2V0LCBkZWZlcnJlZCkpOworCisgICAgaW50IHRyYW5z
aXRpb25Db3VudCA9IDA7CisgICAgZm9yIChhdXRvKiBzID0gc3RydWN0dXJlOyBzOyBzID0gcy0+
cHJldmlvdXNJRCgpKQorICAgICAgICArK3RyYW5zaXRpb25Db3VudDsKIAorICAgIGlmICh0cmFu
c2l0aW9uQ291bnQgPiBzX21heFRyYW5zaXRpb25MZW5ndGgpIHsKKyAgICAgICAgQVNTRVJUKCFp
c0NvcHlPbldyaXRlKHN0cnVjdHVyZS0+aW5kZXhpbmdNb2RlKCkpKTsKKyAgICAgICAgU3RydWN0
dXJlKiB0cmFuc2l0aW9uID0gdG9VbmNhY2hlYWJsZURpY3Rpb25hcnlUcmFuc2l0aW9uKHZtLCBz
dHJ1Y3R1cmUsIGRlZmVycmVkKTsKKyAgICAgICAgQVNTRVJUKHN0cnVjdHVyZSAhPSB0cmFuc2l0
aW9uKTsKKyAgICAgICAgb2Zmc2V0ID0gdHJhbnNpdGlvbi0+cmVtb3ZlKHZtLCBwcm9wZXJ0eU5h
bWUpOworICAgICAgICByZXR1cm4gdHJhbnNpdGlvbjsKKyAgICB9CisKKyAgICBTdHJ1Y3R1cmUq
IHRyYW5zaXRpb24gPSBjcmVhdGUodm0sIHN0cnVjdHVyZSwgZGVmZXJyZWQpOworICAgIHRyYW5z
aXRpb24tPm1fY2FjaGVkUHJvdG90eXBlQ2hhaW4uc2V0TWF5QmVOdWxsKHZtLCB0cmFuc2l0aW9u
LCBzdHJ1Y3R1cmUtPm1fY2FjaGVkUHJvdG90eXBlQ2hhaW4uZ2V0KCkpOworCisgICAgLy8gV2hp
bGUgd2UgYXJlIGRlbGV0aW5nIHRoZSBwcm9wZXJ0eSwgd2UgbmVlZCB0byBtYWtlIHN1cmUgdGhl
IHRhYmxlIGlzIG5vdCBjbGVhcmVkLgorICAgIHsKKyAgICAgICAgQ29uY3VycmVudEpTTG9ja2Vy
IGxvY2tlcih0cmFuc2l0aW9uLT5tX2xvY2spOworICAgICAgICB0cmFuc2l0aW9uLT5zZXRQcm90
ZWN0UHJvcGVydHlUYWJsZVdoaWxlVHJhbnNpdGlvbmluZyh0cnVlKTsKKyAgICB9CisKKyAgICB0
cmFuc2l0aW9uLT5tX2Jsb2Iuc2V0SW5kZXhpbmdNb2RlSW5jbHVkaW5nSGlzdG9yeShzdHJ1Y3R1
cmUtPmluZGV4aW5nTW9kZUluY2x1ZGluZ0hpc3RvcnkoKSAmIH5Db3B5T25Xcml0ZSk7CisgICAg
dHJhbnNpdGlvbi0+bV90cmFuc2l0aW9uUHJvcGVydHlOYW1lID0gcHJvcGVydHlOYW1lLnVpZCgp
OworICAgIHRyYW5zaXRpb24tPnNldFByb3BlcnR5VGFibGUodm0sIHN0cnVjdHVyZS0+dGFrZVBy
b3BlcnR5VGFibGVPckNsb25lSWZQaW5uZWQodm0pKTsKKyAgICB0cmFuc2l0aW9uLT5zZXRNYXhP
ZmZzZXQodm0sIHN0cnVjdHVyZS0+bWF4T2Zmc2V0KCkpOworICAgIHRyYW5zaXRpb24tPnNldElz
UHJvcGVydHlEZWxldGlvblRyYW5zaXRpb24odHJ1ZSk7CisKKyAgICBvZmZzZXQgPSB0cmFuc2l0
aW9uLT5yZW1vdmUodm0sIHByb3BlcnR5TmFtZSk7CisgICAgQVNTRVJUKG9mZnNldCAhPSBpbnZh
bGlkT2Zmc2V0KTsKKyAgICB0cmFuc2l0aW9uLT5zZXRUcmFuc2l0aW9uT2Zmc2V0KHZtLCBvZmZz
ZXQpOworCisgICAgLy8gTm93IHRoYXQgZXZlcnl0aGluZyBpcyBmaW5lIHdpdGggdGhlIG5ldyBz
dHJ1Y3R1cmUncyBib29ra2VlcGluZywgdGhlIEdDIGlzIGZyZWUgdG8gYmxvdyB0aGUKKyAgICAv
LyB0YWJsZSBhd2F5IGlmIGl0IHdhbnRzLiBXZSBjYW4gbm93IHJlYnVpbGQgaXQgZmluZS4KKyAg
ICBXVEY6OnN0b3JlU3RvcmVGZW5jZSgpOworICAgIHRyYW5zaXRpb24tPnNldFByb3RlY3RQcm9w
ZXJ0eVRhYmxlV2hpbGVUcmFuc2l0aW9uaW5nKGZhbHNlKTsKKworICAgIGNoZWNrT2Zmc2V0KHRy
YW5zaXRpb24tPnRyYW5zaXRpb25PZmZzZXQoKSwgdHJhbnNpdGlvbi0+aW5saW5lQ2FwYWNpdHko
KSk7CisgICAgeworICAgICAgICBHQ1NhZmVDb25jdXJyZW50SlNMb2NrZXIgbG9ja2VyKHN0cnVj
dHVyZS0+bV9sb2NrLCB2bS5oZWFwKTsKKyAgICAgICAgc3RydWN0dXJlLT5tX3RyYW5zaXRpb25U
YWJsZS5hZGQodm0sIHRyYW5zaXRpb24pOworICAgIH0KICAgICB0cmFuc2l0aW9uLT5jaGVja09m
ZnNldENvbnNpc3RlbmN5KCk7CisgICAgc3RydWN0dXJlLT5jaGVja09mZnNldENvbnNpc3RlbmN5
KCk7CiAgICAgcmV0dXJuIHRyYW5zaXRpb247CiB9CiAKQEAgLTYxNCw5ICs2ODEsOSBAQCBTdHJ1
Y3R1cmUqIFN0cnVjdHVyZTo6dG9DYWNoZWFibGVEaWN0aW9uYXJ5VHJhbnNpdGlvbihWTSYgdm0s
IFN0cnVjdHVyZSogc3RydWN0dQogICAgIHJldHVybiB0b0RpY3Rpb25hcnlUcmFuc2l0aW9uKHZt
LCBzdHJ1Y3R1cmUsIENhY2hlZERpY3Rpb25hcnlLaW5kLCBkZWZlcnJlZCk7CiB9CiAKLVN0cnVj
dHVyZSogU3RydWN0dXJlOjp0b1VuY2FjaGVhYmxlRGljdGlvbmFyeVRyYW5zaXRpb24oVk0mIHZt
LCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKK1N0cnVjdHVyZSogU3RydWN0dXJlOjp0b1VuY2FjaGVh
YmxlRGljdGlvbmFyeVRyYW5zaXRpb24oVk0mIHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgRGVm
ZXJyZWRTdHJ1Y3R1cmVUcmFuc2l0aW9uV2F0Y2hwb2ludEZpcmUqIGRlZmVycmVkKQogewotICAg
IHJldHVybiB0b0RpY3Rpb25hcnlUcmFuc2l0aW9uKHZtLCBzdHJ1Y3R1cmUsIFVuY2FjaGVkRGlj
dGlvbmFyeUtpbmQpOworICAgIHJldHVybiB0b0RpY3Rpb25hcnlUcmFuc2l0aW9uKHZtLCBzdHJ1
Y3R1cmUsIFVuY2FjaGVkRGljdGlvbmFyeUtpbmQsIGRlZmVycmVkKTsKIH0KIAogU3RydWN0dXJl
KiBTdHJ1Y3R1cmU6OnNlYWxUcmFuc2l0aW9uKFZNJiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUp
CkBAIC05NzcsOSArMTA0NCwxMSBAQCBQcm9wZXJ0eU9mZnNldCBTdHJ1Y3R1cmU6OmFkZChWTSYg
dm0sIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIHVuc2lnbmVkIGF0dHJpYgogICAgICAgICB9
KTsKIH0KIAotUHJvcGVydHlPZmZzZXQgU3RydWN0dXJlOjpyZW1vdmUoUHJvcGVydHlOYW1lIHBy
b3BlcnR5TmFtZSkKK1Byb3BlcnR5T2Zmc2V0IFN0cnVjdHVyZTo6cmVtb3ZlKFZNJiB2bSwgUHJv
cGVydHlOYW1lIHByb3BlcnR5TmFtZSkKIHsKLSAgICByZXR1cm4gcmVtb3ZlKHByb3BlcnR5TmFt
ZSwgW10gKGNvbnN0IENvbmN1cnJlbnRKU0xvY2tlciYsIFByb3BlcnR5T2Zmc2V0KSB7IH0pOwor
ICAgIHJldHVybiByZW1vdmU8U2hvdWxkUGluOjpObz4odm0sIHByb3BlcnR5TmFtZSwgW3RoaXMs
ICZ2bV0gKGNvbnN0IEdDU2FmZUNvbmN1cnJlbnRKU0xvY2tlciYsIFByb3BlcnR5T2Zmc2V0LCBQ
cm9wZXJ0eU9mZnNldCBuZXdNYXhPZmZzZXQpIHsKKyAgICAgICAgc2V0TWF4T2Zmc2V0KHZtLCBu
ZXdNYXhPZmZzZXQpOworICAgIH0pOwogfQogCiB2b2lkIFN0cnVjdHVyZTo6Z2V0UHJvcGVydHlO
YW1lc0Zyb21TdHJ1Y3R1cmUoVk0mIHZtLCBQcm9wZXJ0eU5hbWVBcnJheSYgcHJvcGVydHlOYW1l
cywgRW51bWVyYXRpb25Nb2RlIG1vZGUpCkBAIC0xMDU5LDcgKzExMjgsNyBAQCB2b2lkIFN0cnVj
dHVyZTo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQog
ICAgIH0KICAgICB2aXNpdG9yLmFwcGVuZCh0aGlzT2JqZWN0LT5tX3ByZXZpb3VzT3JSYXJlRGF0
YSk7CiAKLSAgICBpZiAodGhpc09iamVjdC0+aXNQaW5uZWRQcm9wZXJ0eVRhYmxlKCkgfHwgdGhp
c09iamVjdC0+aXNBZGRpbmdQcm9wZXJ0eUZvclRyYW5zaXRpb24oKSkgeworICAgIGlmICh0aGlz
T2JqZWN0LT5pc1Bpbm5lZFByb3BlcnR5VGFibGUoKSB8fCB0aGlzT2JqZWN0LT5wcm90ZWN0UHJv
cGVydHlUYWJsZVdoaWxlVHJhbnNpdGlvbmluZygpKSB7CiAgICAgICAgIC8vIE5PVEU6IFRoaXMg
Y2FuIGludGVybGVhdmUgaW4gcGluKCksIGluIHdoaWNoIGNhc2UgaXQgbWF5IHNlZSBhIG51bGwg
cHJvcGVydHkgdGFibGUuCiAgICAgICAgIC8vIFRoYXQncyBmaW5lLCBiZWNhdXNlIHRoZW4gdGhl
IGJhcnJpZXIgd2lsbCBmaXJlIGFuZCB3ZSB3aWxsIHNjYW4gdGhpcyBhZ2Fpbi4KICAgICAgICAg
dmlzaXRvci5hcHBlbmQodGhpc09iamVjdC0+bV9wcm9wZXJ0eVRhYmxlVW5zYWZlKTsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZS5oIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlLmgKaW5kZXggMzhkYzFkMzlmMWU4Njdk
MDRmMTE1M2ZlNDQ3ZmU0YzcyMGNkNTYzYi4uZmYzYmE1Njg2Y2UyNzYxMDJmMDk4MWNhNTAzOTI4
MzNjYTAyZDExOSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3Ry
dWN0dXJlLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlLmgK
QEAgLTE4NywxMSArMTg3LDEzIEBAIHB1YmxpYzoKICAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0
aWMgU3RydWN0dXJlKiBhZGROZXdQcm9wZXJ0eVRyYW5zaXRpb24oVk0mLCBTdHJ1Y3R1cmUqLCBQ
cm9wZXJ0eU5hbWUsIHVuc2lnbmVkIGF0dHJpYnV0ZXMsIFByb3BlcnR5T2Zmc2V0JiwgUHV0UHJv
cGVydHlTbG90OjpDb250ZXh0ID0gUHV0UHJvcGVydHlTbG90OjpVbmtub3duQ29udGV4dCwgRGVm
ZXJyZWRTdHJ1Y3R1cmVUcmFuc2l0aW9uV2F0Y2hwb2ludEZpcmUqID0gbnVsbHB0cik7CiAgICAg
c3RhdGljIFN0cnVjdHVyZSogYWRkUHJvcGVydHlUcmFuc2l0aW9uVG9FeGlzdGluZ1N0cnVjdHVy
ZUNvbmN1cnJlbnRseShTdHJ1Y3R1cmUqLCBVbmlxdWVkU3RyaW5nSW1wbCogdWlkLCB1bnNpZ25l
ZCBhdHRyaWJ1dGVzLCBQcm9wZXJ0eU9mZnNldCYpOwogICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0
YXRpYyBTdHJ1Y3R1cmUqIGFkZFByb3BlcnR5VHJhbnNpdGlvblRvRXhpc3RpbmdTdHJ1Y3R1cmUo
U3RydWN0dXJlKiwgUHJvcGVydHlOYW1lLCB1bnNpZ25lZCBhdHRyaWJ1dGVzLCBQcm9wZXJ0eU9m
ZnNldCYpOwotICAgIHN0YXRpYyBTdHJ1Y3R1cmUqIHJlbW92ZVByb3BlcnR5VHJhbnNpdGlvbihW
TSYsIFN0cnVjdHVyZSosIFByb3BlcnR5TmFtZSwgUHJvcGVydHlPZmZzZXQmKTsKKyAgICBzdGF0
aWMgU3RydWN0dXJlKiByZW1vdmVOZXdQcm9wZXJ0eVRyYW5zaXRpb24oVk0mLCBTdHJ1Y3R1cmUq
LCBQcm9wZXJ0eU5hbWUsIFByb3BlcnR5T2Zmc2V0JiwgRGVmZXJyZWRTdHJ1Y3R1cmVUcmFuc2l0
aW9uV2F0Y2hwb2ludEZpcmUqID0gbnVsbHB0cik7CisgICAgc3RhdGljIFN0cnVjdHVyZSogcmVt
b3ZlUHJvcGVydHlUcmFuc2l0aW9uKFZNJiwgU3RydWN0dXJlKiwgUHJvcGVydHlOYW1lLCBQcm9w
ZXJ0eU9mZnNldCYsIERlZmVycmVkU3RydWN0dXJlVHJhbnNpdGlvbldhdGNocG9pbnRGaXJlKiA9
IG51bGxwdHIpOworICAgIHN0YXRpYyBTdHJ1Y3R1cmUqIHJlbW92ZVByb3BlcnR5VHJhbnNpdGlv
bkZyb21FeGlzdGluZ1N0cnVjdHVyZShWTSYsIFN0cnVjdHVyZSosIFByb3BlcnR5TmFtZSwgUHJv
cGVydHlPZmZzZXQmLCBEZWZlcnJlZFN0cnVjdHVyZVRyYW5zaXRpb25XYXRjaHBvaW50RmlyZSog
PSBudWxscHRyKTsKICAgICBzdGF0aWMgU3RydWN0dXJlKiBjaGFuZ2VQcm90b3R5cGVUcmFuc2l0
aW9uKFZNJiwgU3RydWN0dXJlKiwgSlNWYWx1ZSBwcm90b3R5cGUsIERlZmVycmVkU3RydWN0dXJl
VHJhbnNpdGlvbldhdGNocG9pbnRGaXJlJik7CiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGlj
IFN0cnVjdHVyZSogYXR0cmlidXRlQ2hhbmdlVHJhbnNpdGlvbihWTSYsIFN0cnVjdHVyZSosIFBy
b3BlcnR5TmFtZSwgdW5zaWduZWQgYXR0cmlidXRlcyk7CiAgICAgSlNfRVhQT1JUX1BSSVZBVEUg
c3RhdGljIFN0cnVjdHVyZSogdG9DYWNoZWFibGVEaWN0aW9uYXJ5VHJhbnNpdGlvbihWTSYsIFN0
cnVjdHVyZSosIERlZmVycmVkU3RydWN0dXJlVHJhbnNpdGlvbldhdGNocG9pbnRGaXJlKiA9IG51
bGxwdHIpOwotICAgIHN0YXRpYyBTdHJ1Y3R1cmUqIHRvVW5jYWNoZWFibGVEaWN0aW9uYXJ5VHJh
bnNpdGlvbihWTSYsIFN0cnVjdHVyZSopOworICAgIHN0YXRpYyBTdHJ1Y3R1cmUqIHRvVW5jYWNo
ZWFibGVEaWN0aW9uYXJ5VHJhbnNpdGlvbihWTSYsIFN0cnVjdHVyZSosIERlZmVycmVkU3RydWN0
dXJlVHJhbnNpdGlvbldhdGNocG9pbnRGaXJlKiA9IG51bGxwdHIpOwogICAgIEpTX0VYUE9SVF9Q
UklWQVRFIHN0YXRpYyBTdHJ1Y3R1cmUqIHNlYWxUcmFuc2l0aW9uKFZNJiwgU3RydWN0dXJlKik7
CiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIFN0cnVjdHVyZSogZnJlZXplVHJhbnNpdGlv
bihWTSYsIFN0cnVjdHVyZSopOwogICAgIHN0YXRpYyBTdHJ1Y3R1cmUqIHByZXZlbnRFeHRlbnNp
b25zVHJhbnNpdGlvbihWTSYsIFN0cnVjdHVyZSopOwpAQCAtNDQwLDEwICs0NDIsNiBAQCBwdWJs
aWM6CiAgICAgewogICAgICAgICByZXR1cm4gc3RkOjptaW48dW5zaWduZWQ+KG1heE9mZnNldCgp
ICsgMSwgbV9pbmxpbmVDYXBhY2l0eSk7CiAgICAgfQotICAgIHVuc2lnbmVkIHRvdGFsU3RvcmFn
ZVNpemUoKSBjb25zdAotICAgIHsKLSAgICAgICAgcmV0dXJuIG51bWJlck9mU2xvdHNGb3JNYXhP
ZmZzZXQobWF4T2Zmc2V0KCksIG1faW5saW5lQ2FwYWNpdHkpOwotICAgIH0KICAgICB1bnNpZ25l
ZCB0b3RhbFN0b3JhZ2VDYXBhY2l0eSgpIGNvbnN0CiAgICAgewogICAgICAgICBBU1NFUlQoc3Ry
dWN0dXJlKCktPmNsYXNzSW5mbygpID09IGluZm8oKSk7CkBAIC02OTEsOCArNjg5LDkgQEAgcHVi
bGljOgogICAgIERFRklORV9CSVRGSUVMRChib29sLCBkaWRXYXRjaEludGVybmFsUHJvcGVydGll
cywgRGlkV2F0Y2hJbnRlcm5hbFByb3BlcnRpZXMsIDEsIDI1KTsKICAgICBERUZJTkVfQklURklF
TEQoYm9vbCwgdHJhbnNpdGlvbldhdGNocG9pbnRJc0xpa2VseVRvQmVGaXJlZCwgVHJhbnNpdGlv
bldhdGNocG9pbnRJc0xpa2VseVRvQmVGaXJlZCwgMSwgMjYpOwogICAgIERFRklORV9CSVRGSUVM
RChib29sLCBoYXNCZWVuRGljdGlvbmFyeSwgSGFzQmVlbkRpY3Rpb25hcnksIDEsIDI3KTsKLSAg
ICBERUZJTkVfQklURklFTEQoYm9vbCwgaXNBZGRpbmdQcm9wZXJ0eUZvclRyYW5zaXRpb24sIElz
QWRkaW5nUHJvcGVydHlGb3JUcmFuc2l0aW9uLCAxLCAyOCk7CisgICAgREVGSU5FX0JJVEZJRUxE
KGJvb2wsIHByb3RlY3RQcm9wZXJ0eVRhYmxlV2hpbGVUcmFuc2l0aW9uaW5nLCBQcm90ZWN0UHJv
cGVydHlUYWJsZVdoaWxlVHJhbnNpdGlvbmluZywgMSwgMjgpOwogICAgIERFRklORV9CSVRGSUVM
RChib29sLCBoYXNVbmRlcnNjb3JlUHJvdG9Qcm9wZXJ0eUV4Y2x1ZGluZ09yaWdpbmFsUHJvdG8s
IEhhc1VuZGVyc2NvcmVQcm90b1Byb3BlcnR5RXhjbHVkaW5nT3JpZ2luYWxQcm90bywgMSwgMjkp
OworICAgIERFRklORV9CSVRGSUVMRChib29sLCBpc1Byb3BlcnR5RGVsZXRpb25UcmFuc2l0aW9u
LCBJc1Byb3BlcnR5RGVsZXRpb25UcmFuc2l0aW9uLCAxLCAzMCk7CiAKIHByaXZhdGU6CiAgICAg
ZnJpZW5kIGNsYXNzIExMSW50T2Zmc2V0c0V4dHJhY3RvcjsKQEAgLTcxNyw5ICs3MTYsOSBAQCBw
cml2YXRlOgogICAgIHRlbXBsYXRlPFNob3VsZFBpbiwgdHlwZW5hbWUgRnVuYz4KICAgICBQcm9w
ZXJ0eU9mZnNldCBhZGQoVk0mLCBQcm9wZXJ0eU5hbWUsIHVuc2lnbmVkIGF0dHJpYnV0ZXMsIGNv
bnN0IEZ1bmMmKTsKICAgICBQcm9wZXJ0eU9mZnNldCBhZGQoVk0mLCBQcm9wZXJ0eU5hbWUsIHVu
c2lnbmVkIGF0dHJpYnV0ZXMpOwotICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmM+Ci0gICAgUHJv
cGVydHlPZmZzZXQgcmVtb3ZlKFByb3BlcnR5TmFtZSwgY29uc3QgRnVuYyYpOwotICAgIFByb3Bl
cnR5T2Zmc2V0IHJlbW92ZShQcm9wZXJ0eU5hbWUpOworICAgIHRlbXBsYXRlPFNob3VsZFBpbiwg
dHlwZW5hbWUgRnVuYz4KKyAgICBQcm9wZXJ0eU9mZnNldCByZW1vdmUoVk0mLCBQcm9wZXJ0eU5h
bWUsIGNvbnN0IEZ1bmMmKTsKKyAgICBQcm9wZXJ0eU9mZnNldCByZW1vdmUoVk0mLCBQcm9wZXJ0
eU5hbWUpOwogCiAgICAgdm9pZCBjaGVja0NvbnNpc3RlbmN5KCk7CiAKQEAgLTgzNCw2ICs4MzMs
NyBAQCBwcml2YXRlOgogICAgIFRpbnlCbG9vbUZpbHRlciBtX3NlZW5Qcm9wZXJ0aWVzOwogCiAg
ICAgZnJpZW5kIGNsYXNzIFZNSW5zcGVjdG9yOworICAgIGZyaWVuZCBjbGFzcyBKU0RvbGxhclZN
SGVscGVyOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgSlNDCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmVJbmxpbmVzLmggYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9TdHJ1Y3R1cmVJbmxpbmVzLmgKaW5kZXggMWE0ZjIwMjQ2YTI3NzljMjlm
Yjk2Y2UwMDUwMGI1NGJiNDZlYjU3MS4uNWZkMTZjNDU2NGUzNmJkNTk4ZWViNTEzMjg2YWFiM2Q2
MjVhZTllOSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0
dXJlSW5saW5lcy5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVy
ZUlubGluZXMuaApAQCAtMTY3LDkgKzE2NywyOCBAQCB2b2lkIFN0cnVjdHVyZTo6Zm9yRWFjaFBy
b3BlcnR5Q29uY3VycmVudGx5KGNvbnN0IEZ1bmN0b3ImIGZ1bmN0b3IpCiAgICAgUHJvcGVydHlU
YWJsZSogdGFibGU7CiAgICAgCiAgICAgZmluZFN0cnVjdHVyZXNBbmRNYXBGb3JNYXRlcmlhbGl6
YXRpb24oc3RydWN0dXJlcywgc3RydWN0dXJlLCB0YWJsZSk7CisKKyAgICBIYXNoU2V0PFVuaXF1
ZWRTdHJpbmdJbXBsKj4gc2VlblByb3BlcnRpZXM7CisKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSBz
dHJ1Y3R1cmVzLnNpemUoKTsgaS0tOykgeworICAgICAgICBhdXRvKiBzdHJ1Y3R1cmUgPSBzdHJ1
Y3R1cmVzW2ldOworICAgICAgICBpZiAoIXN0cnVjdHVyZS0+bV90cmFuc2l0aW9uUHJvcGVydHlO
YW1lIHx8IHNlZW5Qcm9wZXJ0aWVzLmNvbnRhaW5zKHN0cnVjdHVyZS0+bV90cmFuc2l0aW9uUHJv
cGVydHlOYW1lLmdldCgpKSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgIHNlZW5Q
cm9wZXJ0aWVzLmFkZChzdHJ1Y3R1cmUtPm1fdHJhbnNpdGlvblByb3BlcnR5TmFtZS5nZXQoKSk7
CisKKyAgICAgICAgaWYgKHN0cnVjdHVyZS0+aXNQcm9wZXJ0eURlbGV0aW9uVHJhbnNpdGlvbigp
KQorICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgaWYgKCFmdW5jdG9yKFByb3BlcnR5
TWFwRW50cnkoc3RydWN0dXJlLT5tX3RyYW5zaXRpb25Qcm9wZXJ0eU5hbWUuZ2V0KCksIHN0cnVj
dHVyZS0+dHJhbnNpdGlvbk9mZnNldCgpLCBzdHJ1Y3R1cmUtPnRyYW5zaXRpb25Qcm9wZXJ0eUF0
dHJpYnV0ZXMoKSkpKQorICAgICAgICAgICAgcmV0dXJuOworICAgIH0KICAgICAKICAgICBpZiAo
dGFibGUpIHsKICAgICAgICAgZm9yIChhdXRvJiBlbnRyeSA6ICp0YWJsZSkgeworICAgICAgICAg
ICAgaWYgKHNlZW5Qcm9wZXJ0aWVzLmNvbnRhaW5zKGVudHJ5LmtleSkpCisgICAgICAgICAgICAg
ICAgY29udGludWU7CisKICAgICAgICAgICAgIGlmICghZnVuY3RvcihlbnRyeSkpIHsKICAgICAg
ICAgICAgICAgICBzdHJ1Y3R1cmUtPm1fbG9jay51bmxvY2soKTsKICAgICAgICAgICAgICAgICBy
ZXR1cm47CkBAIC0xNzcsMTUgKzE5Niw2IEBAIHZvaWQgU3RydWN0dXJlOjpmb3JFYWNoUHJvcGVy
dHlDb25jdXJyZW50bHkoY29uc3QgRnVuY3RvciYgZnVuY3RvcikKICAgICAgICAgfQogICAgICAg
ICBzdHJ1Y3R1cmUtPm1fbG9jay51bmxvY2soKTsKICAgICB9Ci0gICAgCi0gICAgZm9yICh1bnNp
Z25lZCBpID0gc3RydWN0dXJlcy5zaXplKCk7IGktLTspIHsKLSAgICAgICAgc3RydWN0dXJlID0g
c3RydWN0dXJlc1tpXTsKLSAgICAgICAgaWYgKCFzdHJ1Y3R1cmUtPm1fdHJhbnNpdGlvblByb3Bl
cnR5TmFtZSkKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAKLSAgICAgICAgaWYgKCFm
dW5jdG9yKFByb3BlcnR5TWFwRW50cnkoc3RydWN0dXJlLT5tX3RyYW5zaXRpb25Qcm9wZXJ0eU5h
bWUuZ2V0KCksIHN0cnVjdHVyZS0+dHJhbnNpdGlvbk9mZnNldCgpLCBzdHJ1Y3R1cmUtPnRyYW5z
aXRpb25Qcm9wZXJ0eUF0dHJpYnV0ZXMoKSkpKQotICAgICAgICAgICAgcmV0dXJuOwotICAgIH0K
IH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgRnVuY3Rvcj4KQEAgLTQ1MSwxMSArNDYxLDEyIEBAIGlu
bGluZSBQcm9wZXJ0eU9mZnNldCBTdHJ1Y3R1cmU6OmFkZChWTSYgdm0sIFByb3BlcnR5TmFtZSBw
cm9wZXJ0eU5hbWUsIHVuc2lnbmVkCiAgICAgUHJvcGVydHlPZmZzZXQgbmV3T2Zmc2V0ID0gdGFi
bGUtPm5leHRPZmZzZXQobV9pbmxpbmVDYXBhY2l0eSk7CiAKICAgICBtX3Byb3BlcnR5SGFzaCA9
IG1fcHJvcGVydHlIYXNoIF4gcmVwLT5leGlzdGluZ1N5bWJvbEF3YXJlSGFzaCgpOwotCiAgICAg
bV9zZWVuUHJvcGVydGllcy5hZGQoYml0d2lzZV9jYXN0PHVpbnRwdHJfdD4ocmVwKSk7Ci0gICAg
Ci0gICAgUHJvcGVydHlPZmZzZXQgbmV3TWF4T2Zmc2V0ID0gbWF4T2Zmc2V0KCk7Ci0gICAgdGFi
bGUtPmFkZChQcm9wZXJ0eU1hcEVudHJ5KHJlcCwgbmV3T2Zmc2V0LCBhdHRyaWJ1dGVzKSwgbmV3
TWF4T2Zmc2V0LCBQcm9wZXJ0eVRhYmxlOjpQcm9wZXJ0eU9mZnNldE1heUNoYW5nZSk7CisKKyAg
ICBhdXRvIHJlc3VsdCA9IHRhYmxlLT5hZGQoUHJvcGVydHlNYXBFbnRyeShyZXAsIG5ld09mZnNl
dCwgYXR0cmlidXRlcykpOworICAgIEFTU0VSVF9VTlVTRUQocmVzdWx0LCByZXN1bHQuc2Vjb25k
KTsKKyAgICBBU1NFUlRfVU5VU0VEKHJlc3VsdCwgcmVzdWx0LmZpcnN0LmZpcnN0LT5vZmZzZXQg
PT0gbmV3T2Zmc2V0KTsKKyAgICBhdXRvIG5ld01heE9mZnNldCA9IHN0ZDo6bWF4KG5ld09mZnNl
dCwgbWF4T2Zmc2V0KCkpOwogICAgIAogICAgIGZ1bmMobG9ja2VyLCBuZXdPZmZzZXQsIG5ld01h
eE9mZnNldCk7CiAgICAgCkBAIC00NjUsMjEgKzQ3NiwyNiBAQCBpbmxpbmUgUHJvcGVydHlPZmZz
ZXQgU3RydWN0dXJlOjphZGQoVk0mIHZtLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCB1bnNp
Z25lZAogICAgIHJldHVybiBuZXdPZmZzZXQ7CiB9CiAKLXRlbXBsYXRlPHR5cGVuYW1lIEZ1bmM+
Ci1pbmxpbmUgUHJvcGVydHlPZmZzZXQgU3RydWN0dXJlOjpyZW1vdmUoUHJvcGVydHlOYW1lIHBy
b3BlcnR5TmFtZSwgY29uc3QgRnVuYyYgZnVuYykKK3RlbXBsYXRlPFN0cnVjdHVyZTo6U2hvdWxk
UGluIHNob3VsZFBpbiwgdHlwZW5hbWUgRnVuYz4KK2lubGluZSBQcm9wZXJ0eU9mZnNldCBTdHJ1
Y3R1cmU6OnJlbW92ZShWTSYgdm0sIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIGNvbnN0IEZ1
bmMmIGZ1bmMpCiB7Ci0gICAgQ29uY3VycmVudEpTTG9ja2VyIGxvY2tlcihtX2xvY2spOwotICAg
IAorICAgIFByb3BlcnR5VGFibGUqIHRhYmxlID0gZW5zdXJlUHJvcGVydHlUYWJsZSh2bSk7Cisg
ICAgR0NTYWZlQ29uY3VycmVudEpTTG9ja2VyIGxvY2tlcihtX2xvY2ssIHZtLmhlYXApOworCisg
ICAgc3dpdGNoIChzaG91bGRQaW4pIHsKKyAgICBjYXNlIFNob3VsZFBpbjo6WWVzOgorICAgICAg
ICBwaW4obG9ja2VyLCB2bSwgdGFibGUpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFNob3Vs
ZFBpbjo6Tm86CisgICAgICAgIHNldFByb3BlcnR5VGFibGUodm0sIHRhYmxlKTsKKyAgICAgICAg
YnJlYWs7CisgICAgfQorCisgICAgQVNTRVJUKEpTQzo6aXNWYWxpZE9mZnNldChnZXQodm0sIHBy
b3BlcnR5TmFtZSkpKTsKKwogICAgIGNoZWNrQ29uc2lzdGVuY3koKTsKIAogICAgIGF1dG8gcmVw
ID0gcHJvcGVydHlOYW1lLnVpZCgpOwotICAgIAotICAgIC8vIFdlIE9OTFkgcmVtb3ZlIGZyb20g
dW5jYWNoZWFibGUgZGljdGlvbmFyaWVzLCB3aGljaCB3aWxsIGhhdmUgYSBwaW5uZWQgcHJvcGVy
dHkgdGFibGUuCi0gICAgLy8gVGhlIG9ubHkgd2F5IGZvciB0aGVtIG5vdCB0byBoYXZlIGEgdGFi
bGUgaXMgaWYgdGhleSBhcmUgZW1wdHkuCi0gICAgUHJvcGVydHlUYWJsZSogdGFibGUgPSBwcm9w
ZXJ0eVRhYmxlT3JOdWxsKCk7Ci0KLSAgICBpZiAoIXRhYmxlKQotICAgICAgICByZXR1cm4gaW52
YWxpZE9mZnNldDsKIAogICAgIFByb3BlcnR5VGFibGU6OmZpbmRfaXRlcmF0b3IgcG9zaXRpb24g
PSB0YWJsZS0+ZmluZChyZXApOwogICAgIGlmICghcG9zaXRpb24uZmlyc3QpCkBAIC00OTAsOSAr
NTA2LDE0IEBAIGlubGluZSBQcm9wZXJ0eU9mZnNldCBTdHJ1Y3R1cmU6OnJlbW92ZShQcm9wZXJ0
eU5hbWUgcHJvcGVydHlOYW1lLCBjb25zdCBGdW5jJiBmCiAgICAgdGFibGUtPnJlbW92ZShwb3Np
dGlvbik7CiAgICAgdGFibGUtPmFkZERlbGV0ZWRPZmZzZXQob2Zmc2V0KTsKIAotICAgIGNoZWNr
Q29uc2lzdGVuY3koKTsKKyAgICBQcm9wZXJ0eU9mZnNldCBuZXdNYXhPZmZzZXQgPSBtYXhPZmZz
ZXQoKTsKKworICAgIGZ1bmMobG9ja2VyLCBvZmZzZXQsIG5ld01heE9mZnNldCk7CisKKyAgICBB
U1NFUlQobWF4T2Zmc2V0KCkgPT0gbmV3TWF4T2Zmc2V0KTsKKyAgICBBU1NFUlQoIUpTQzo6aXNW
YWxpZE9mZnNldChnZXQodm0sIHByb3BlcnR5TmFtZSkpKTsKIAotICAgIGZ1bmMobG9ja2VyLCBv
ZmZzZXQpOworICAgIGNoZWNrQ29uc2lzdGVuY3koKTsKICAgICByZXR1cm4gb2Zmc2V0OwogfQog
CkBAIC01MDMsMTMgKzUyNCwxMyBAQCBpbmxpbmUgUHJvcGVydHlPZmZzZXQgU3RydWN0dXJlOjph
ZGRQcm9wZXJ0eVdpdGhvdXRUcmFuc2l0aW9uKFZNJiB2bSwgUHJvcGVydHlOYQogfQogCiB0ZW1w
bGF0ZTx0eXBlbmFtZSBGdW5jPgotaW5saW5lIFByb3BlcnR5T2Zmc2V0IFN0cnVjdHVyZTo6cmVt
b3ZlUHJvcGVydHlXaXRob3V0VHJhbnNpdGlvbihWTSYsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5h
bWUsIGNvbnN0IEZ1bmMmIGZ1bmMpCitpbmxpbmUgUHJvcGVydHlPZmZzZXQgU3RydWN0dXJlOjpy
ZW1vdmVQcm9wZXJ0eVdpdGhvdXRUcmFuc2l0aW9uKFZNJiB2bSwgUHJvcGVydHlOYW1lIHByb3Bl
cnR5TmFtZSwgY29uc3QgRnVuYyYgZnVuYykKIHsKICAgICBBU1NFUlQoaXNVbmNhY2hlYWJsZURp
Y3Rpb25hcnkoKSk7CiAgICAgQVNTRVJUKGlzUGlubmVkUHJvcGVydHlUYWJsZSgpKTsKICAgICBB
U1NFUlQocHJvcGVydHlUYWJsZU9yTnVsbCgpKTsKICAgICAKLSAgICByZXR1cm4gcmVtb3ZlKHBy
b3BlcnR5TmFtZSwgZnVuYyk7CisgICAgcmV0dXJuIHJlbW92ZTxTaG91bGRQaW46Olllcz4odm0s
IHByb3BlcnR5TmFtZSwgZnVuYyk7CiB9CiAKIEFMV0FZU19JTkxJTkUgdm9pZCBTdHJ1Y3R1cmU6
OnNldFByb3RvdHlwZVdpdGhvdXRUcmFuc2l0aW9uKFZNJiB2bSwgSlNWYWx1ZSBwcm90b3R5cGUp
CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmVUcmFu
c2l0aW9uVGFibGUuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZVRy
YW5zaXRpb25UYWJsZS5oCmluZGV4IGI3ZGYwZWZiMzk4ZDA1ZmJmODE3YzdiMzhlNWJhNDkwZGUx
OTBhYmUuLjViODVjN2Y3ZjIwMjZlNDU4MTVjYTNmNTBjY2U1MWMxYjUyYTZiMmIgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZVRyYW5zaXRpb25UYWJs
ZS5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZVRyYW5zaXRp
b25UYWJsZS5oCkBAIC0xNDQsMTEgKzE0NCwxMSBAQCBjbGFzcyBTdHJ1Y3R1cmVUcmFuc2l0aW9u
VGFibGUgewogCiAgICAgCiAgICAgc3RydWN0IEhhc2ggewotICAgICAgICB0eXBlZGVmIHN0ZDo6
cGFpcjxVbmlxdWVkU3RyaW5nSW1wbCosIHVuc2lnbmVkPiBLZXk7CisgICAgICAgIHR5cGVkZWYg
c3RkOjp0dXBsZTxVbmlxdWVkU3RyaW5nSW1wbCosIHVuc2lnbmVkLCBib29sPiBLZXk7CiAgICAg
ICAgIAogICAgICAgICBzdGF0aWMgdW5zaWduZWQgaGFzaChjb25zdCBLZXkmIHApCiAgICAgICAg
IHsKLSAgICAgICAgICAgIHJldHVybiBQdHJIYXNoPFVuaXF1ZWRTdHJpbmdJbXBsKj46Omhhc2go
cC5maXJzdCkgKyBwLnNlY29uZDsKKyAgICAgICAgICAgIHJldHVybiBQdHJIYXNoPFVuaXF1ZWRT
dHJpbmdJbXBsKj46Omhhc2goc3RkOjpnZXQ8MD4ocCkpICsgc3RkOjpnZXQ8MT4ocCk7CiAgICAg
ICAgIH0KIAogICAgICAgICBzdGF0aWMgYm9vbCBlcXVhbChjb25zdCBLZXkmIGEsIGNvbnN0IEtl
eSYgYikKQEAgLTE4MSw4ICsxODEsOCBAQCBwdWJsaWM6CiAgICAgfQogCiAgICAgdm9pZCBhZGQo
Vk0mLCBTdHJ1Y3R1cmUqKTsKLSAgICBib29sIGNvbnRhaW5zKFVuaXF1ZWRTdHJpbmdJbXBsKiwg
dW5zaWduZWQgYXR0cmlidXRlcykgY29uc3Q7Ci0gICAgU3RydWN0dXJlKiBnZXQoVW5pcXVlZFN0
cmluZ0ltcGwqLCB1bnNpZ25lZCBhdHRyaWJ1dGVzKSBjb25zdDsKKyAgICBib29sIGNvbnRhaW5z
KFVuaXF1ZWRTdHJpbmdJbXBsKiwgdW5zaWduZWQgYXR0cmlidXRlcywgYm9vbCBpc0FkZGl0aW9u
ID0gdHJ1ZSkgY29uc3Q7CisgICAgU3RydWN0dXJlKiBnZXQoVW5pcXVlZFN0cmluZ0ltcGwqLCB1
bnNpZ25lZCBhdHRyaWJ1dGVzLCBib29sIGlzQWRkaXRpb24gPSB0cnVlKSBjb25zdDsKIAogcHJp
dmF0ZToKICAgICBmcmllbmQgY2xhc3MgU2luZ2xlU2xvdFRyYW5zaXRpb25XZWFrT3duZXI7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvdG9vbHMvSlNEb2xsYXJWTS5jcHAgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvdG9vbHMvSlNEb2xsYXJWTS5jcHAKaW5kZXggZGVjNmJiMmFk
ODMyOTdmMmE4YWJjNzIxYTE3MWJiOTQ1N2M3NjNmYS4uODc3NzRjYjgzYzJhZjU2YjlmYWZiYmU0
MGQ1ZDg3ZjlmY2YyZDVhYiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3Rvb2xz
L0pTRG9sbGFyVk0uY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS90b29scy9KU0RvbGxh
clZNLmNwcApAQCAtODEsNiArODEsOCBAQCBwdWJsaWM6CiAKICAgICB2b2lkIHVwZGF0ZVZNU3Rh
Y2tMaW1pdHMoKSB7IHJldHVybiBtX3ZtLnVwZGF0ZVN0YWNrTGltaXRzKCk7IH07CiAKKyAgICBz
dGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5jdGlvbkdldFN0cnVjdHVyZVRy
YW5zaXRpb25MaXN0KEpTR2xvYmFsT2JqZWN0KiwgQ2FsbEZyYW1lKik7CisKIHByaXZhdGU6CiAg
ICAgVk0mIG1fdm07CiB9OwpAQCAtMjc2OSw2ICsyNzcxLDYwIEBAIHN0YXRpYyBFbmNvZGVkSlNW
YWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0aW9uTWFrZTE2Qml0U3RyaW5nSWZQb3NzaWJsZShKU0ds
b2JhbE9iCiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1N0cmluZyh2bSwgU3RyaW5nOjph
ZG9wdChXVEZNb3ZlKGJ1ZmZlcikpKSk7CiB9CiAKK0VuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NB
TEwgSlNEb2xsYXJWTUhlbHBlcjo6ZnVuY3Rpb25HZXRTdHJ1Y3R1cmVUcmFuc2l0aW9uTGlzdChK
U0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBDYWxsRnJhbWUqIGNhbGxGcmFtZSkKK3sKKyAg
ICBEb2xsYXJWTUFzc2VydFNjb3BlIGFzc2VydFNjb3BlOworICAgIFZNJiB2bSA9IGdsb2JhbE9i
amVjdC0+dm0oKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7Cisg
ICAgSlNPYmplY3QqIG9iaiA9IGNhbGxGcmFtZS0+YXJndW1lbnQoMCkudG9PYmplY3QoZ2xvYmFs
T2JqZWN0KTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOworICAgIGlmICgh
b2JqKQorICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzTnVsbCgpKTsKKyAgICBWZWN0
b3I8U3RydWN0dXJlKiwgOD4gc3RydWN0dXJlczsKKworICAgIGZvciAoYXV0byogc3RydWN0dXJl
ID0gb2JqLT5zdHJ1Y3R1cmUoKTsgc3RydWN0dXJlOyBzdHJ1Y3R1cmUgPSBzdHJ1Y3R1cmUtPnBy
ZXZpb3VzSUQoKSkKKyAgICAgICAgc3RydWN0dXJlcy5hcHBlbmQoc3RydWN0dXJlKTsKKworICAg
IEpTQXJyYXkqIHJlc3VsdCA9IEpTQXJyYXk6OnRyeUNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LT5h
cnJheVN0cnVjdHVyZUZvckluZGV4aW5nVHlwZUR1cmluZ0FsbG9jYXRpb24oQXJyYXlXaXRoQ29u
dGlndW91cyksIDApOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHsgfSk7CisKKyAg
ICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHN0cnVjdHVyZXMuc2l6ZSgpOyArK2kpIHsKKyAgICAg
ICAgYXV0byogc3RydWN0dXJlID0gc3RydWN0dXJlc1tzdHJ1Y3R1cmVzLnNpemUoKSAtIGkgLSAx
XTsKKyAgICAgICAgcmVzdWx0LT5wdXNoKGdsb2JhbE9iamVjdCwgSlNWYWx1ZShzdHJ1Y3R1cmUt
PmlkKCkpKTsKKyAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsKKyAgICAg
ICAgcmVzdWx0LT5wdXNoKGdsb2JhbE9iamVjdCwgSlNWYWx1ZShzdHJ1Y3R1cmUtPnRyYW5zaXRp
b25PZmZzZXQoKSkpOworICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOwor
ICAgICAgICByZXN1bHQtPnB1c2goZ2xvYmFsT2JqZWN0LCBKU1ZhbHVlKHN0cnVjdHVyZS0+bWF4
T2Zmc2V0KCkpKTsKKyAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsKKyAg
ICAgICAgaWYgKHN0cnVjdHVyZS0+bV90cmFuc2l0aW9uUHJvcGVydHlOYW1lKQorICAgICAgICAg
ICAgcmVzdWx0LT5wdXNoKGdsb2JhbE9iamVjdCwganNTdHJpbmcodm0sIFN0cmluZygqc3RydWN0
dXJlLT5tX3RyYW5zaXRpb25Qcm9wZXJ0eU5hbWUpKSk7CisgICAgICAgIGVsc2UKKyAgICAgICAg
ICAgIHJlc3VsdC0+cHVzaChnbG9iYWxPYmplY3QsIGpzTnVsbCgpKTsKKyAgICAgICAgUkVUVVJO
X0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsKKyAgICAgICAgcmVzdWx0LT5wdXNoKGdsb2JhbE9i
amVjdCwgSlNWYWx1ZShzdHJ1Y3R1cmUtPmlzUHJvcGVydHlEZWxldGlvblRyYW5zaXRpb24oKSkp
OworICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOworICAgIH0KKworICAg
IHJldHVybiBKU1ZhbHVlOjplbmNvZGUocmVzdWx0KTsKK30KKworc3RhdGljIEVuY29kZWRKU1Zh
bHVlIEpTQ19IT1NUX0NBTEwgZnVuY3Rpb25HZXRDb25jdXJyZW50bHkoSlNHbG9iYWxPYmplY3Qq
IGdsb2JhbE9iamVjdCwgQ2FsbEZyYW1lKiBjYWxsRnJhbWUpCit7CisgICAgRG9sbGFyVk1Bc3Nl
cnRTY29wZSBhc3NlcnRTY29wZTsKKyAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7Cisg
ICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworICAgIEpTT2JqZWN0KiBv
YmogPSBjYWxsRnJhbWUtPmFyZ3VtZW50KDApLnRvT2JqZWN0KGdsb2JhbE9iamVjdCk7CisgICAg
UkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsKKyAgICBpZiAoIW9iaikKKyAgICAgICAg
cmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc051bGwoKSk7CisgICAgU3RyaW5nIHByb3BlcnR5ID0g
Y2FsbEZyYW1lLT5hcmd1bWVudCgxKS50b1dURlN0cmluZyhnbG9iYWxPYmplY3QpOworICAgIFJF
VFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHsgfSk7CisgICAgYXV0byBuYW1lID0gUHJvcGVydHlO
YW1lKElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sIHByb3BlcnR5KSk7CisgICAgSlNWYWx1ZSBy
ZXN1bHQgPSBKU1ZhbHVlKG9iai0+c3RydWN0dXJlKCktPmdldENvbmN1cnJlbnRseShuYW1lLnVp
ZCgpKSAhPSBpbnZhbGlkT2Zmc2V0KTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7
IH0pOworICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUocmVzdWx0KTsKK30KKwogdm9pZCBKU0Rv
bGxhclZNOjpmaW5pc2hDcmVhdGlvbihWTSYgdm0pCiB7CiAgICAgRG9sbGFyVk1Bc3NlcnRTY29w
ZSBhc3NlcnRTY29wZTsKQEAgLTI4OTcsNiArMjk1Myw5IEBAIHZvaWQgSlNEb2xsYXJWTTo6Zmlu
aXNoQ3JlYXRpb24oVk0mIHZtKQogICAgIGFkZEZ1bmN0aW9uKHZtLCAiaXNXYXNtU3VwcG9ydGVk
IiwgZnVuY3Rpb25Jc1dhc21TdXBwb3J0ZWQsIDApOwogICAgIGFkZEZ1bmN0aW9uKHZtLCAibWFr
ZTE2Qml0U3RyaW5nSWZQb3NzaWJsZSIsIGZ1bmN0aW9uTWFrZTE2Qml0U3RyaW5nSWZQb3NzaWJs
ZSwgMSk7CiAKKyAgICBhZGRGdW5jdGlvbih2bSwgImdldFN0cnVjdHVyZVRyYW5zaXRpb25MaXN0
IiwgSlNEb2xsYXJWTUhlbHBlcjo6ZnVuY3Rpb25HZXRTdHJ1Y3R1cmVUcmFuc2l0aW9uTGlzdCwg
MSk7CisgICAgYWRkRnVuY3Rpb24odm0sICJnZXRDb25jdXJyZW50bHkiLCBmdW5jdGlvbkdldENv
bmN1cnJlbnRseSwgMik7CisKICAgICBtX29iamVjdERvaW5nU2lkZUVmZmVjdFB1dFdpdGhvdXRD
b3JyZWN0U2xvdFN0YXR1c1N0cnVjdHVyZS5zZXQodm0sIHRoaXMsIE9iamVjdERvaW5nU2lkZUVm
ZmVjdFB1dFdpdGhvdXRDb3JyZWN0U2xvdFN0YXR1czo6Y3JlYXRlU3RydWN0dXJlKHZtLCBnbG9i
YWxPYmplY3QsIGpzTnVsbCgpKSk7CiB9CiAKZGlmZiAtLWdpdCBhL0pTVGVzdHMvQ2hhbmdlTG9n
IGIvSlNUZXN0cy9DaGFuZ2VMb2cKaW5kZXggMzJjNjFkY2EyYTVlMzU0MTFjZTYxMmY5MGFjYjM2
MDNlODIyNGYwNS4uMGRhODhhNTZhMGQ4YzY3NTRiZjMzNTc1ZjcyNTc3MzM5Yjg0N2FjYSAxMDA2
NDQKLS0tIGEvSlNUZXN0cy9DaGFuZ2VMb2cKKysrIGIvSlNUZXN0cy9DaGFuZ2VMb2cKQEAgLTEs
MyArMSw0MyBAQAorMjAyMC0wMS0zMCAgSnVzdGluIE1pY2hhdWQgIDxqdXN0aW5fbWljaGF1ZEBh
cHBsZS5jb20+CisKKyAgICAgICAgRGVsZXRpbmcgYSBwcm9wZXJ0eSBzaG91bGQgbm90IHR1cm4g
c3RydWN0dXJlcyBpbnRvIHVuY2FjaGVhYmxlIGRpY3Rpb25hcmllcworICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjA2NDMwCisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBtaWNyb2JlbmNobWFya3MvZGVsZXRl
LXByb3BlcnR5LWZyb20tcHJvdG90eXBlLWNoYWluLmpzOiBBZGRlZC4KKyAgICAgICAgKGFzc2Vy
dCk6CisgICAgICAgIChub0lubGluZS5hc3NlcnQuZ2V0Wik6CisgICAgICAgIChub0lubGluZS5n
ZXRaLkMpOgorICAgICAgICAoZG9UZXN0KToKKyAgICAgICAgKGRlbGV0ZS5DLnByb3RvdHlwZS56
KToKKyAgICAgICAgKiBtaWNyb2JlbmNobWFya3MvZGVsZXRlLXByb3BlcnR5LWtlZXBzLWNhY2hl
YWJsZS1zdHJ1Y3R1cmUuanM6IEFkZGVkLgorICAgICAgICAoYXNzZXJ0KToKKyAgICAgICAgKEMp
OgorICAgICAgICAoZG9UZXN0KToKKyAgICAgICAgKiBzdHJlc3MvY2FjaGUtcHV0LWJ5LWlkLWRp
ZmZlcmVudC1hdHRyaWJ1dGVzLmpzOgorICAgICAgICAobWFrZVByb3RvdHlwZURpY3QpOgorICAg
ICAgICAoc2V0IHgpOgorICAgICAgICAqIHN0cmVzcy9jYWNoZS1wdXQtYnktaWQtZGlmZmVyZW50
LW9mZnNldC5qczoKKyAgICAgICAgKG1ha2VQcm90b3R5cGVEaWN0KToKKyAgICAgICAgKHNldCB4
KToKKyAgICAgICAgKiBzdHJlc3MvY2FjaGUtcHV0LWJ5LWlkLXBvbHktcHJvdG8uanM6CisgICAg
ICAgIChtYWtlUHJvdG90eXBlRGljdCk6CisgICAgICAgIChzZXQgXyk6CisgICAgICAgICogc3Ry
ZXNzL2RlbGV0ZS1wcm9wZXJ0eS1jaGVjay1zdHJ1Y3R1cmUtdHJhbnNpdGlvbi5qczogQWRkZWQu
CisgICAgICAgIChhc3NlcnQpOgorICAgICAgICAoYXNzZXJ0X2VxKToKKyAgICAgICAgKGFzc2Vy
dF9uZXEpOgorICAgICAgICAoc2QpOgorICAgICAgICAoc2lkKToKKyAgICAgICAgKHRlc3REZWxl
dGVJc05vdFVuY2FjaGVhYmxlKToKKyAgICAgICAgKHRlc3RDYW5NYXRlcmlhbGl6ZURlbGV0ZXMp
OgorICAgICAgICAodGVzdENhbkZsYXR0ZW4pOgorICAgICAgICAodGVzdERlbGV0ZVdpdGhJbmxp
bmVDYWNoZS5PYmplY3QucHJvdG90eXBlLmdsb2JhbFByb3BlcnR5LjQyLm1ha2VGb28pOgorICAg
ICAgICAodGVzdERlbGV0ZVdpdGhJbmxpbmVDYWNoZS5ub0lubGluZS5kb1Rlc3QpOgorICAgICAg
ICAodGVzdERlbGV0ZVdpdGhJbmxpbmVDYWNoZSk6CisgICAgICAgICogc3RyZXNzL2ZsYXR0ZW4t
b2JqZWN0LXplcm8tdW51c2VkLWlubGluZS1wcm9wZXJ0aWVzLmpzOgorCiAyMDIwLTAxLTI4ICBZ
dXN1a2UgU3V6dWtpICA8eXN1enVraUBhcHBsZS5jb20+CiAKICAgICAgICAgW0pTQ10gR2l2ZSB1
cCBJQyB3aGVuIHVua25vd24gc3RydWN0dXJlIHRyYW5zaXRpb24gaGFwcGVucwpkaWZmIC0tZ2l0
IGEvSlNUZXN0cy9taWNyb2JlbmNobWFya3MvZGVsZXRlLXByb3BlcnR5LWZyb20tcHJvdG90eXBl
LWNoYWluLmpzIGIvSlNUZXN0cy9taWNyb2JlbmNobWFya3MvZGVsZXRlLXByb3BlcnR5LWZyb20t
cHJvdG90eXBlLWNoYWluLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjQ5YTMxYjdmMjQ3YzFiZDBhY2E4MmNiMjJk
ZjIwZThmMWJmNjFiZGQKLS0tIC9kZXYvbnVsbAorKysgYi9KU1Rlc3RzL21pY3JvYmVuY2htYXJr
cy9kZWxldGUtcHJvcGVydHktZnJvbS1wcm90b3R5cGUtY2hhaW4uanMKQEAgLTAsMCArMSw0MyBA
QAorLy9AIHNraXAgaWYgJG1vZGVsID09ICJBcHBsZSBXYXRjaCBTZXJpZXMgMyIgIyBhZGRlZCBi
eSBtYXJrLWpzYy1zdHJlc3MtdGVzdC5weQorZnVuY3Rpb24gYXNzZXJ0KGIpIHsKKyAgICBpZiAo
IWIpCisgICAgICAgIHRocm93IG5ldyBFcnJvcjsKK30KK25vSW5saW5lKGFzc2VydCkKKworZnVu
Y3Rpb24gZ2V0WihvKSB7CisgICAgcmV0dXJuIG8uegorfQorbm9JbmxpbmUoZ2V0WikKKworZnVu
Y3Rpb24gQygpIHsKKyAgICB0aGlzLnggPSA0MjsKK30KKworbGV0IG9ianMgPSBbXTsKK2ZvciAo
bGV0IGkgPSAwOyBpIDwgNTA7ICsraSkgeworICAgIG9ianMucHVzaChuZXcgQyk7Cit9CisKK2Z1
bmN0aW9uIGRvVGVzdCh6VmFsKSB7CisgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBvYmpzLmxlbmd0
aDsgKytpKSB7CisgICAgICAgIGxldCBvID0gb2Jqc1tpXTsKKyAgICAgICAgYXNzZXJ0KG8ueCA9
PT0gNDIpOworICAgICAgICBhc3NlcnQoZ2V0WihvKSA9PT0gelZhbCkKKyAgICB9Cit9Citub0lu
bGluZShkb1Rlc3QpOworCitmb3IgKGxldCBpPTA7IGk8MTAwMDA7ICsraSkgeworICAgIGNvbnN0
IFggPSB7IGkgfQorICAgIEMucHJvdG90eXBlLnogPSBYCisgICAgZG9UZXN0KFgpCit9CisKK2Rl
bGV0ZSBDLnByb3RvdHlwZS56CisKK2ZvciAobGV0IGk9MDsgaTwxMDAwMDAwOyArK2kpIHsKKyAg
ICBnZXRaKHt6OiBpfSkKKyAgICBkb1Rlc3QodW5kZWZpbmVkKQorfQorCmRpZmYgLS1naXQgYS9K
U1Rlc3RzL21pY3JvYmVuY2htYXJrcy9kZWxldGUtcHJvcGVydHkta2VlcHMtY2FjaGVhYmxlLXN0
cnVjdHVyZS5qcyBiL0pTVGVzdHMvbWljcm9iZW5jaG1hcmtzL2RlbGV0ZS1wcm9wZXJ0eS1rZWVw
cy1jYWNoZWFibGUtc3RydWN0dXJlLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjIyY2NhOWZkMjFkYjA3MjZiYTZi
MWQyYjY1ZDlkYTViODNhOGE4MzgKLS0tIC9kZXYvbnVsbAorKysgYi9KU1Rlc3RzL21pY3JvYmVu
Y2htYXJrcy9kZWxldGUtcHJvcGVydHkta2VlcHMtY2FjaGVhYmxlLXN0cnVjdHVyZS5qcwpAQCAt
MCwwICsxLDI4IEBACisvL0Agc2tpcCBpZiAkbW9kZWwgPT0gIkFwcGxlIFdhdGNoIFNlcmllcyAz
IiAjIGFkZGVkIGJ5IG1hcmstanNjLXN0cmVzcy10ZXN0LnB5CitmdW5jdGlvbiBhc3NlcnQoYikg
eworICAgIGlmICghYikKKyAgICAgICAgdGhyb3cgbmV3IEVycm9yOworfQorCitmdW5jdGlvbiBD
KCkgeworICAgIHRoaXMueCA9IDQyOworICAgIHRoaXMueSA9IDEzMzc7CisgICAgZGVsZXRlIHRo
aXMueTsKK30KKworbGV0IG9ianMgPSBbXTsKK2ZvciAobGV0IGkgPSAwOyBpIDwgNTA7ICsraSkg
eworICAgIG9ianMucHVzaChuZXcgQyk7Cit9CisKK2Z1bmN0aW9uIGRvVGVzdCgpIHsKKyAgICBm
b3IgKGxldCBpID0gMDsgaSA8IG9ianMubGVuZ3RoOyArK2kpIHsKKyAgICAgICAgbGV0IG8gPSBv
YmpzW2ldOworICAgICAgICBhc3NlcnQoby55ID09PSB1bmRlZmluZWQpOworICAgICAgICBhc3Nl
cnQoby54ID09PSA0Mik7CisgICAgfQorfQorbm9JbmxpbmUoZG9UZXN0KTsKKworZm9yIChsZXQg
aT0wOyBpPDEwMDAwMDAwOyArK2kpIGRvVGVzdCgpCisKZGlmZiAtLWdpdCBhL0pTVGVzdHMvc3Ry
ZXNzL2NhY2hlLXB1dC1ieS1pZC1kaWZmZXJlbnQtYXR0cmlidXRlcy5qcyBiL0pTVGVzdHMvc3Ry
ZXNzL2NhY2hlLXB1dC1ieS1pZC1kaWZmZXJlbnQtYXR0cmlidXRlcy5qcwppbmRleCBiMzhmYzc4
YTE0NDlkNzFmZDEzY2Y0Mzk3MzA5ODUwN2ZiY2QzOTNlLi5mYjEyZjFhMDIyMDI4N2Y2MWZlOWUx
M2ZmNDZhNGFhZmRlZTkzYmJlIDEwMDY0NAotLS0gYS9KU1Rlc3RzL3N0cmVzcy9jYWNoZS1wdXQt
YnktaWQtZGlmZmVyZW50LWF0dHJpYnV0ZXMuanMKKysrIGIvSlNUZXN0cy9zdHJlc3MvY2FjaGUt
cHV0LWJ5LWlkLWRpZmZlcmVudC1hdHRyaWJ1dGVzLmpzCkBAIC00LDYgKzQsMTYgQEAgZnVuY3Rp
b24gRm9vKCkgeyB9CiAKIEZvby5wcm90b3R5cGUueCA9IDA7CiAKK2Z1bmN0aW9uIG1ha2VQcm90
b3R5cGVEaWN0KCkgeworICAgIGZvciAobGV0IGk9MDsgaTwxMDA7ICsraSkgeworICAgICAgICBG
b28ucHJvdG90eXBlLmEgPSBpCisgICAgICAgIEZvby5wcm90b3R5cGUuYiA9IGkKKyAgICAgICAg
ZGVsZXRlIEZvby5wcm90b3R5cGUuYQorICAgICAgICBkZWxldGUgRm9vLnByb3RvdHlwZS5iCisg
ICAgfQorfQorbm9JbmxpbmUobWFrZVByb3RvdHlwZURpY3QpCisKIE9iamVjdC5kZWZpbmVQcm9w
ZXJ0eShGb28ucHJvdG90eXBlLCAneScsIHsKICAgICBzZXQoeCkgewogICAgICAgICBpZiAoRm9v
LnByb3RvdHlwZS54KysgPT09IDkpIHsKQEAgLTExLDggKzIxLDEwIEBAIE9iamVjdC5kZWZpbmVQ
cm9wZXJ0eShGb28ucHJvdG90eXBlLCAneScsIHsKICAgICAgICAgICAgICAgICB2YWx1ZTogMTMs
CiAgICAgICAgICAgICAgICAgd3JpdGFibGU6IHRydWUsCiAgICAgICAgICAgICB9KTsKLSAgICAg
ICAgICAgIGlmICh0eXBlb2YgJHZtICE9PSAndW5kZWZpbmVkJykKKyAgICAgICAgICAgIGlmICh0
eXBlb2YgJHZtICE9PSAndW5kZWZpbmVkJykgeworICAgICAgICAgICAgICAgIG1ha2VQcm90b3R5
cGVEaWN0KCkKICAgICAgICAgICAgICAgICAkdm0uZmxhdHRlbkRpY3Rpb25hcnlPYmplY3QoRm9v
LnByb3RvdHlwZSk7CisgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICB9LAogICAgIGNvbmZp
Z3VyYWJsZTogdHJ1ZSwKZGlmZiAtLWdpdCBhL0pTVGVzdHMvc3RyZXNzL2NhY2hlLXB1dC1ieS1p
ZC1kaWZmZXJlbnQtb2Zmc2V0LmpzIGIvSlNUZXN0cy9zdHJlc3MvY2FjaGUtcHV0LWJ5LWlkLWRp
ZmZlcmVudC1vZmZzZXQuanMKaW5kZXggN2YyOTcxM2U3YzI4NTNjYWM3Y2Q0YTQzZWY2NzU3ZWM4
YWUzOWJmYy4uODlkYTZhNzJkNzVjMGZmN2JlNTBkY2I3MmI5NWQ5YzU0ODZkZTdkMiAxMDA2NDQK
LS0tIGEvSlNUZXN0cy9zdHJlc3MvY2FjaGUtcHV0LWJ5LWlkLWRpZmZlcmVudC1vZmZzZXQuanMK
KysrIGIvSlNUZXN0cy9zdHJlc3MvY2FjaGUtcHV0LWJ5LWlkLWRpZmZlcmVudC1vZmZzZXQuanMK
QEAgLTQsMTIgKzQsMjQgQEAgZnVuY3Rpb24gRm9vKCkgeyB9CiAKIEZvby5wcm90b3R5cGUueCA9
IDA7CiAKK2Z1bmN0aW9uIG1ha2VQcm90b3R5cGVEaWN0KCkgeworICAgIGZvciAobGV0IGk9MDsg
aTwxMDA7ICsraSkgeworICAgICAgICBGb28ucHJvdG90eXBlLmEgPSBpCisgICAgICAgIEZvby5w
cm90b3R5cGUuYiA9IGkKKyAgICAgICAgZGVsZXRlIEZvby5wcm90b3R5cGUuYQorICAgICAgICBk
ZWxldGUgRm9vLnByb3RvdHlwZS5iCisgICAgfQorfQorbm9JbmxpbmUobWFrZVByb3RvdHlwZURp
Y3QpCisKIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShGb28ucHJvdG90eXBlLCAneScsIHsKICAgICBz
ZXQoeCkgewogICAgICAgICBpZiAoRm9vLnByb3RvdHlwZS54KysgPT09IDEpIHsKICAgICAgICAg
ICAgIGRlbGV0ZSBGb28ucHJvdG90eXBlLng7Ci0gICAgICAgICAgICBpZiAodHlwZW9mICR2bSAh
PT0gJ3VuZGVmaW5lZCcpCisgICAgICAgICAgICBpZiAodHlwZW9mICR2bSAhPT0gJ3VuZGVmaW5l
ZCcpIHsKKyAgICAgICAgICAgICAgICBtYWtlUHJvdG90eXBlRGljdCgpCiAgICAgICAgICAgICAg
ICAgJHZtLmZsYXR0ZW5EaWN0aW9uYXJ5T2JqZWN0KEZvby5wcm90b3R5cGUpOworICAgICAgICAg
ICAgfQogICAgICAgICB9CiAgICAgfQogfSk7CmRpZmYgLS1naXQgYS9KU1Rlc3RzL3N0cmVzcy9j
YWNoZS1wdXQtYnktaWQtcG9seS1wcm90by5qcyBiL0pTVGVzdHMvc3RyZXNzL2NhY2hlLXB1dC1i
eS1pZC1wb2x5LXByb3RvLmpzCmluZGV4IGI3OWJhZjA5MjFlMmQzNDI1MjYyOTlkOGQxMTZlZWU2
Zjk0MDMyOTMuLjZhYmZhMjJkMDE0MThkZWIwMGFhOTk1ZWU5NTlmYTZmNzYxYzU5NWMgMTAwNjQ0
Ci0tLSBhL0pTVGVzdHMvc3RyZXNzL2NhY2hlLXB1dC1ieS1pZC1wb2x5LXByb3RvLmpzCisrKyBi
L0pTVGVzdHMvc3RyZXNzL2NhY2hlLXB1dC1ieS1pZC1wb2x5LXByb3RvLmpzCkBAIC00LDYgKzQs
MTYgQEAgZnVuY3Rpb24gRm9vKCkgeyB9CiAKIGxldCB4ID0gMDsKIAorZnVuY3Rpb24gbWFrZVBy
b3RvdHlwZURpY3QoKSB7CisgICAgZm9yIChsZXQgaT0wOyBpPDEwMDsgKytpKSB7CisgICAgICAg
IEZvby5wcm90b3R5cGUuYSA9IGkKKyAgICAgICAgRm9vLnByb3RvdHlwZS5iID0gaQorICAgICAg
ICBkZWxldGUgRm9vLnByb3RvdHlwZS5hCisgICAgICAgIGRlbGV0ZSBGb28ucHJvdG90eXBlLmIK
KyAgICB9Cit9Citub0lubGluZShtYWtlUHJvdG90eXBlRGljdCkKKwogT2JqZWN0LmRlZmluZVBy
b3BlcnR5KEZvby5wcm90b3R5cGUsICd5JywgewogICAgIHNldChfKSB7CiAgICAgICAgIGlmICh4
KysgPT09IDkpIHsKQEAgLTExLDggKzIxLDEwIEBAIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShGb28u
cHJvdG90eXBlLCAneScsIHsKICAgICAgICAgICAgICAgICB2YWx1ZTogMTMsCiAgICAgICAgICAg
ICAgICAgd3JpdGFibGU6IHRydWUsCiAgICAgICAgICAgICB9KTsKLSAgICAgICAgICAgIGlmICh0
eXBlb2YgJHZtICE9PSAndW5kZWZpbmVkJykKKyAgICAgICAgICAgIGlmICh0eXBlb2YgJHZtICE9
PSAndW5kZWZpbmVkJykgeworICAgICAgICAgICAgICAgIG1ha2VQcm90b3R5cGVEaWN0KCkKICAg
ICAgICAgICAgICAgICAkdm0uZmxhdHRlbkRpY3Rpb25hcnlPYmplY3QoRm9vLnByb3RvdHlwZSk7
CisgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICB9LAogICAgIGNvbmZpZ3VyYWJsZTogdHJ1
ZSwKZGlmZiAtLWdpdCBhL0pTVGVzdHMvc3RyZXNzL2RlbGV0ZS1wcm9wZXJ0eS1jaGVjay1zdHJ1
Y3R1cmUtdHJhbnNpdGlvbi5qcyBiL0pTVGVzdHMvc3RyZXNzL2RlbGV0ZS1wcm9wZXJ0eS1jaGVj
ay1zdHJ1Y3R1cmUtdHJhbnNpdGlvbi5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5iMDYzMTE3ZjRhODYwN2U3YWUy
MDNiMjY0YzM2ZjE5NDlmNzRmZGFjCi0tLSAvZGV2L251bGwKKysrIGIvSlNUZXN0cy9zdHJlc3Mv
ZGVsZXRlLXByb3BlcnR5LWNoZWNrLXN0cnVjdHVyZS10cmFuc2l0aW9uLmpzCkBAIC0wLDAgKzEs
MTg5IEBACitmdW5jdGlvbiBhc3NlcnQoY29uZGl0aW9uKSB7CisgICAgaWYgKCFjb25kaXRpb24p
CisgICAgICAgIHRocm93IG5ldyBFcnJvcigiYXNzZXJ0aW9uIGZhaWxlZCIpOworfQorCitmdW5j
dGlvbiBhc3NlcnRfZXEoYSwgYikgeworICAgIGlmIChhICE9PSBiKQorICAgICAgICB0aHJvdyBu
ZXcgRXJyb3IoImFzc2VydGlvbiBmYWlsZWQ6ICIgKyBhICsgIiA9PT0gIiArIGIpOworfQorCitm
dW5jdGlvbiBhc3NlcnRfbmVxKGEsIGIpIHsKKyAgICBpZiAoYSA9PT0gYikKKyAgICAgICAgdGhy
b3cgbmV3IEVycm9yKCJhc3NlcnRpb24gZmFpbGVkOiAiICsgYSArICIgIT09ICIgKyBiKTsKK30K
KworZnVuY3Rpb24gc2Qob2JqKSB7CisgICAgbGV0IGRhdGEgPSAkdm0uZ2V0U3RydWN0dXJlVHJh
bnNpdGlvbkxpc3Qob2JqKQorICAgIGxldCByZXN1bHQgPSBbXQorCisgICAgaWYgKCFkYXRhKQor
ICAgICAgICByZXR1cm4gcmVzdWx0CisKKyAgICBmb3IgKGxldCBpID0gMDsgaSA8IGRhdGEubGVu
Z3RoLzU7ICsraSkgeworICAgICAgICByZXN1bHQucHVzaCh7IGlkOiBkYXRhW2kqNSswXSwgb2Zm
c2V0OiBkYXRhW2kqNSsxXSwgbWF4OiBkYXRhW2kqNSsyXSwgcHJvcGVydHk6IGRhdGFbaSo1KzNd
LCB0eXBlOiBkYXRhW2kqNSs0XSA9PSAwID8gImFkZGVkIiA6ICJkZWxldGVkIiB9KQorICAgIH0K
KworICAgIHJldHVybiByZXN1bHQKK30KKworZnVuY3Rpb24gc2lkKG9iaikgeworICAgIGxldCBk
YXRhID0gc2Qob2JqKQorICAgIHJldHVybiBkYXRhW2RhdGEubGVuZ3RoLTFdLmlkCit9CisKK2Z1
bmN0aW9uIHRlc3REZWxldGVJc05vdFVuY2FjaGVhYmxlKGkpIHsKKyAgICBsZXQgZm9vID0ge30K
KyAgICBmb29bImJhciIgKyBpXSA9IDEKKyAgICBmb29bImJheiIgKyBpXSA9IDIKKyAgICBhc3Nl
cnQoZm9vWyJiYXIiICsgaV0gPT09IDEpCisgICAgYXNzZXJ0KGZvb1siYmF6IiArIGldID09PSAy
KQorICAgIGxldCBvbGRTaWQgPSBzaWQoZm9vKQorCisgICAgYXNzZXJ0X2VxKCR2bS5nZXRDb25j
dXJyZW50bHkoZm9vLCAiYmF6IitpKSwgMSkKKyAgICBhc3NlcnRfZXEoJHZtLmdldENvbmN1cnJl
bnRseShmb28sICJiYXIiK2kpLCAxKQorICAgIGFzc2VydF9lcSgkdm0uZ2V0Q29uY3VycmVudGx5
KGZvbywgImZvbyIraSksIDApCisKKyAgICBhc3NlcnQoZGVsZXRlIGZvb1siYmFyIiArIGldKQor
ICAgIGFzc2VydF9uZXEob2xkU2lkLCBzaWQoZm9vKSkKKyAgICBhc3NlcnQoISgiYmFyIiArIGkg
aW4gZm9vKSk7CisgICAgYXNzZXJ0KGZvb1siYmF6IiArIGldID09PSAyKQorCisgICAgYXNzZXJ0
X2VxKCR2bS5nZXRDb25jdXJyZW50bHkoZm9vLCAiYmF6IitpKSwgMSkKKyAgICBhc3NlcnRfZXEo
JHZtLmdldENvbmN1cnJlbnRseShmb28sICJiYXIiK2kpLCAwKQorCisgICAgYXNzZXJ0X2VxKE9i
amVjdC5rZXlzKGZvbykubGVuZ3RoLCAxKQorCisgICAgbGV0IGRhdGEgPSBzZChmb28pCisgICAg
YXNzZXJ0X2VxKGRhdGFbZGF0YS5sZW5ndGgtMV0ucHJvcGVydHksICJiYXIiICsgaSkKKworICAg
IGZvb1siYmFyIiArIGldID0gMQorICAgIGFzc2VydChmb29bImJhciIgKyBpXSA9PT0gMSkKKyAg
ICBhc3NlcnRfZXEoJHZtLmdldENvbmN1cnJlbnRseShmb28sICJiYXoiK2kpLCAxKQorICAgIGFz
c2VydF9lcSgkdm0uZ2V0Q29uY3VycmVudGx5KGZvbywgImJhciIraSksIDEpCit9CisKK2Z1bmN0
aW9uIHRlc3RDYW5NYXRlcmlhbGl6ZURlbGV0ZXMoaSkgeworICAgIGxldCBmb28gPSB7fQorICAg
IGZvb1siYmFyIiArIGldID0gMQorICAgIGZvb1siYmF6IiArIGldID0gMgorCisgICAgYXNzZXJ0
KGZvb1siYmFyIiArIGldID09PSAxKQorICAgIGFzc2VydChmb29bImJheiIgKyBpXSA9PT0gMikK
KyAgICBhc3NlcnQoZGVsZXRlIGZvb1siYmFyIiArIGldKQorICAgIGFzc2VydCghKCJiYXIiICsg
aSBpbiBmb28pKQorICAgIGFzc2VydChmb29bImJheiIgKyBpXSA9PT0gMikKKyAgICBhc3NlcnRf
ZXEoT2JqZWN0LmtleXMoZm9vKS5sZW5ndGgsIDEpCisKKyAgICBsZXQgZm9vMiA9IHt9CisgICAg
Zm9vMlsiYmFyIiArIGldID0gMworICAgIGZvbzJbImJheiIgKyBpXSA9IDQKKyAgICBhc3NlcnQo
ZGVsZXRlIGZvbzJbImJhciIgKyBpXSkKKworICAgIGFzc2VydF9lcShzaWQoZm9vMiksIHNpZChm
b28pKQorICAgIGZvbzJbImZ1biIgKyBpXSA9IDMKKyAgICBhc3NlcnRfbmVxKHNpZChmb28yKSwg
c2lkKGZvbykpCisKKyAgICBhc3NlcnQoZm9vMlsiZnVuIiArIGldID09PSAzKQorICAgIGFzc2Vy
dChmb28yWyJiYXoiICsgaV0gPT09IDQpCisgICAgYXNzZXJ0KCEoImJhciIgKyBpIGluIGZvbzIp
KQorICAgIGFzc2VydF9lcShPYmplY3Qua2V5cyhmb28yKS5sZW5ndGgsIDIpCisgICAgYXNzZXJ0
KGZvb1siYmF6IiArIGldID09PSAyKQorICAgIGFzc2VydCghKCJiYXIiICsgaSBpbiBmb28pKQor
ICAgIGFzc2VydF9lcShPYmplY3Qua2V5cyhmb28pLmxlbmd0aCwgMSkKKworICAgIGxldCBkYXRh
ID0gc2QoZm9vKQorICAgIGFzc2VydF9lcShkYXRhW2RhdGEubGVuZ3RoLTFdLnByb3BlcnR5LCAi
YmFyIiArIGkpCisKKyAgICBkYXRhID0gc2QoZm9vMikKKyAgICBhc3NlcnRfZXEoZGF0YVtkYXRh
Lmxlbmd0aC0xXS5wcm9wZXJ0eSwgImZ1biIgKyBpKQorICAgIGFzc2VydF9lcShkYXRhW2RhdGEu
bGVuZ3RoLTJdLnByb3BlcnR5LCAiYmFyIiArIGkpCit9CisKK2Z1bmN0aW9uIHRlc3RDYW5GbGF0
dGVuKGkpIHsKKyAgICBsZXQgZm9vID0ge30KKyAgICBmb3IgKGxldCBqPTA7IGo8NTAwOyArK2op
IHsKKyAgICAgICAgY29uc3Qgb2xkSWQgPSBzaWQoZm9vKQorCisgICAgICAgIGZvb1sieCIgKyAx
MDAwKmogKyBpXSA9IGoKKyAgICAgICAgaWYgKGogPiAwKQorICAgICAgICAgICAgZGVsZXRlIGZv
b1sieCIgKyAxMDAwKihqIC0gMSkgKyBpXQorCisgICAgICAgIGlmIChqID4gMTAwKQorICAgICAg
ICAgICAgYXNzZXJ0X2VxKHNpZChmb28pLCBvbGRJZCkKKyAgICB9CisKKyAgICBmb3IgKGxldCBq
PTA7IGo8NTAwOyArK2opIHsKKyAgICAgICAgY29uc3QgdmFsID0gZm9vWyJ4IiArIDEwMDAqaiAr
IGldCisgICAgICAgIGlmIChqID09IDQ5OSkKKyAgICAgICAgICAgIGFzc2VydF9lcSh2YWwsIGop
CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGFzc2VydF9lcSh2YWwsIHVuZGVmaW5lZCkKKyAg
ICB9CisKKyAgICAkdm0uZmxhdHRlbkRpY3Rpb25hcnlPYmplY3QoZm9vKQorCisgICAgZm9yIChs
ZXQgaj0wOyBqPDUwMDsgKytqKSB7CisgICAgICAgIGNvbnN0IHZhbCA9IGZvb1sieCIgKyAxMDAw
KmogKyBpXQorICAgICAgICBpZiAoaiA9PSA0OTkpCisgICAgICAgICAgICBhc3NlcnRfZXEodmFs
LCBqKQorICAgICAgICBlbHNlCisgICAgICAgICAgICBhc3NlcnRfZXEodmFsLCB1bmRlZmluZWQp
CisgICAgfQorfQorCitmdW5jdGlvbiB0ZXN0RGVsZXRlV2l0aElubGluZUNhY2hlKCkgeworICAg
IE9iamVjdC5wcm90b3R5cGUuZ2xvYmFsUHJvcGVydHkgPSA0MgorCisgICAgZnVuY3Rpb24gbWFr
ZUZvbygpIHsKKyAgICAgICAgbGV0IGZvbyA9IHt9CisgICAgICAgIGZvby5iYXogPSAxCisgICAg
ICAgIGFzc2VydChmb28uZ2xvYmFsUHJvcGVydHkgPT09IDQyKQorCisgICAgICAgIHJldHVybiBm
b28KKyAgICB9CisgICAgbm9JbmxpbmUobWFrZUZvbykKKworICAgIGZ1bmN0aW9uIGRvVGVzdCh4
VmFsKSB7CisgICAgICAgIGZvciAobGV0IGo9MDsgajw1MDsgKytqKSB7CisgICAgICAgICAgICBm
b3IgKGxldCB6PTA7IHo8MTAwMDA7ICsreikgeworICAgICAgICAgICAgICAgIGNvbnN0IGZvbyA9
IGFycltqXQorCisgICAgICAgICAgICAgICAgYXNzZXJ0KGZvby5iYXogPT09IDEpCisgICAgICAg
ICAgICAgICAgYXNzZXJ0X2VxKE9iamVjdC5rZXlzKGZvbykubGVuZ3RoLCAxKQorICAgICAgICAg
ICAgICAgIGFzc2VydF9lcShmb28uZ2xvYmFsUHJvcGVydHksIHhWYWwpCisgICAgICAgICAgICB9
CisgICAgICAgIH0KKyAgICB9CisgICAgbm9JbmxpbmUoZG9UZXN0KQorCisgICAgYXJyID0gbmV3
IEFycmF5KDUwKQorCisgICAgZm9yIChsZXQgaj0wOyBqPDUwOyArK2opIHsKKyAgICAgICAgYXJy
W2pdID0gbWFrZUZvbygpCisgICAgICAgIGlmIChqID4gMCkKKyAgICAgICAgICAgIGFzc2VydF9l
cShzaWQoYXJyW2otMV0pLCBzaWQoYXJyW2pdKSkKKyAgICB9CisKKyAgICBkb1Rlc3QoNDIpCisK
KyAgICBPYmplY3QucHJvdG90eXBlLmdsb2JhbFByb3BlcnR5ID0gNDMKKworICAgIGRvVGVzdCg0
MykKKworICAgIGRlbGV0ZSBPYmplY3QucHJvdG90eXBlLmdsb2JhbFByb3BlcnR5CisKKyAgICBk
b1Rlc3QodW5kZWZpbmVkKQorfQorCit0ZXN0RGVsZXRlV2l0aElubGluZUNhY2hlKCkKKworZm9y
IChsZXQgaSA9IDA7IGkgPCAxMDAwOyArK2kpIHsKKyAgICB0ZXN0RGVsZXRlSXNOb3RVbmNhY2hl
YWJsZShpKQorICAgIHRlc3RDYW5NYXRlcmlhbGl6ZURlbGV0ZXMoMTAwMCtpKQorfQorCitmb3Ig
KGxldCBpID0gMDsgaSA8IDEwMDsgKytpKSB7CisgICAgdGVzdENhbkZsYXR0ZW4oMjAwMCtpKQor
fQorCmRpZmYgLS1naXQgYS9KU1Rlc3RzL3N0cmVzcy9mbGF0dGVuLW9iamVjdC16ZXJvLXVudXNl
ZC1pbmxpbmUtcHJvcGVydGllcy5qcyBiL0pTVGVzdHMvc3RyZXNzL2ZsYXR0ZW4tb2JqZWN0LXpl
cm8tdW51c2VkLWlubGluZS1wcm9wZXJ0aWVzLmpzCmluZGV4IDZmZTVhMTRjNDk1OGIxYmIyZGY2
OTFiMTgyZjA5OTI2ZDgzYWEyOTAuLjY0NjBhOTRhYTYzMjJlZWZhNGQ2Yjg2NTBkZWIwY2NmYmUz
YWI1MzEgMTAwNjQ0Ci0tLSBhL0pTVGVzdHMvc3RyZXNzL2ZsYXR0ZW4tb2JqZWN0LXplcm8tdW51
c2VkLWlubGluZS1wcm9wZXJ0aWVzLmpzCisrKyBiL0pTVGVzdHMvc3RyZXNzL2ZsYXR0ZW4tb2Jq
ZWN0LXplcm8tdW51c2VkLWlubGluZS1wcm9wZXJ0aWVzLmpzCkBAIC0xLDQgKzEsMTAgQEAKIGxl
dCBvID0geyBmb286IDEsIGJhcjogMiwgYmF6OiAzIH07Citmb3IgKGxldCBpPTA7IGk8MTAwOyAr
K2kpIHsKKyAgICBvLmEgPSBpCisgICAgby5iID0gaQorICAgIGRlbGV0ZSBvLmEKKyAgICBkZWxl
dGUgby5iCit9CiBpZiAoJHZtLmlubGluZUNhcGFjaXR5KG8pIDw9IDMpCiAgICAgdGhyb3cgbmV3
IEVycm9yKCJUaGVyZSBzaG91bGQgYmUgaW5saW5lIGNhcGFjaXR5Iik7CiAK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>389399</attachid>
            <date>2020-01-31 13:19:28 -0800</date>
            <delta_ts>2020-02-03 16:30:50 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-206430-20200131131927.patch</filename>
            <type>text/plain</type>
            <size>52610</size>
            <attacher name="Justin Michaud">justin_michaud</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjU1Mzc1CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCBj
NWY1MDc3NjZmNDRiNzdhN2E4ZmEzMDMwYmFmOWQyZmRhNzU1ZWYwLi5lMTNkYjBmNmM4MjAzNDU3
YzZjYzNlMzU3NmJjMGQ5MjdmMzY0MzA1IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSw2NCBAQAorMjAyMC0wMS0zMCAgSnVzdGluIE1pY2hhdWQgIDxqdXN0aW5fbWljaGF1ZEBh
cHBsZS5jb20+CisKKyAgICAgICAgRGVsZXRpbmcgYSBwcm9wZXJ0eSBzaG91bGQgbm90IHR1cm4g
c3RydWN0dXJlcyBpbnRvIHVuY2FjaGVhYmxlIGRpY3Rpb25hcmllcworICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjA2NDMwCisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgUmlnaHQgbm93LCBkZWxldGVQcm9wZXJ0
eS9yZW1vdmVQcm9wZXJ0eVRyYW5zaXRpb24gY2F1c2VzIGEgc3RydWN0dXJlIHRyYW5zaXRpb24g
dG8gdW5jYWNoZWFibGUgZGljdGlvbmFyeS4gSW5zdGVhZCwgd2Ugc2hvdWxkIGFsbG93IGl0IHRv
IHRyYW5zaXRpb24gdG8gYSBuZXcgcmVndWxhciBzdHJ1Y3R1cmUgbGlrZSBhZGRpbmcgYSBwcm9w
ZXJ0eSBkb2VzLiBUaGlzIG1lYW5zIHRoYXQgd2UgaGF2ZSB0bzoKKworICAgICAgICAxKSBCcmVh
ayB0aGUgYXNzdW1wdGlvbiB0aGF0IHN0cnVjdHVyZSB0cmFuc2l0aW9uIG9mZnNldHMgaW5jcmVh
c2UgbW9ub3RvbmljYWxseQorCisgICAgICAgIFdlIGFkZCBhIG5ldyBmbGFnIHRvIHRlbGwgdGhh
dCBhIHN0cnVjdHVyZSBoYXMgZGVsZXRlZCBpdHMgcHJvcGVydHksIGFuZCB1cGRhdGUgbWF0ZXJp
YWxpemVQcm9wZXJ0eVRhYmxlIHRvIHVzZSBpdC4KKworICAgICAgICAyKSBBZGQgYSBuZXcgdHJh
bnNpdGlvbiBtYXAgYW5kIHRyYW5zaXRpb24ga2luZCBmb3IgZGVsZXRlcworCisgICAgICAgIFdl
IGNhY2hlIHRoZSBkZWxldGUgdHJhbnNpdGlvbi4gV2Ugd2lsbCBub3QgdHJhbnNpdGlvbiBiYWNr
IHRvIGEgcHJldmlvdXMgc3RydWN0dXJlIGlmIHlvdSBhZGQgdGhlbiBpbW1lZGlhdGVseSByZW1v
dmUgYSBwcm9wZXJ0eS4KKworICAgICAgICAzKSBGaW5kIHNvbWUgaGV1cmlzdGljIGZvciB3aGVu
IHdlIHNob3VsZCBhY3R1YWxseSB0cmFuc2l0aW9uIHRvIHVuY2FjaGVhYmxlIGRpY3Rpb25hcnku
CisKKyAgICAgICAgU2luY2UgZGVsZXRpbmcgcHJvcGVydGllcyBpcyBleHBlY3RlZCB0byBiZSBy
YXJlLCB3ZSBqdXN0IHdhbGsgdGhlIHN0cnVjdHVyZSBsaXN0IGFuZCBjb3VudCBpdHMgc2l6ZSBv
biByZW1vdmFsLiAKKworICAgICAgICBUaGlzIHBhdGNoIGFsc28gZml4ZXMgYSByZWxhdGVkIGJ1
ZyBpbiBhZGRQcm9wZXJ0eSwgd2hlcmUgd2UgZGlkIG5vdCB1c2UgYSBHQ1NhZmVDb25jdXJyZW50
SlNMb2NrZXIsIGFuZCBhZGRzIGFuIG9wdGlvbiB0byB0cmlnZ2VyIHRoZSBidWcuIEZpbmFsbHks
IHdlIGFkZCBzb21lIGhlbHBlciBtZXRob2RzIHRvIGRvbGxhclZNIHRvIHRlc3QuCisKKyAgICAg
ICAgVGhpcyBnaXZlcyBhIDI0eCBzcGVlZHVwIG9uIGRlbGV0ZS1wcm9wZXJ0eS1rZWVwcy1jYWNo
ZWFibGUtc3RydWN0dXJlLmpzLCBhbmQgaXMgbmV1dHJhbCBvbiBkZWxldGUtcHJvcGVydHktZnJv
bS1wcm90b3R5cGUtY2hhaW4uanMgKHdoaWNoIHdhcyBhbHJlYWR5IGdlbmVyYXRpbmcgY29kZSB1
c2luZyB0aGUgaW5saW5lIGNhY2hlKS4KKworICAgICAgICAqIGhlYXAvSGVhcElubGluZXMuaDoK
KyAgICAgICAgKEpTQzo6SGVhcDo6ZGVjcmVtZW50RGVmZXJyYWxEZXB0aEFuZEdDSWZOZWVkZWQp
OgorICAgICAgICAqIHJ1bnRpbWUvSlNPYmplY3QuY3BwOgorICAgICAgICAoSlNDOjpKU09iamVj
dDo6ZGVsZXRlUHJvcGVydHkpOgorICAgICAgICAqIHJ1bnRpbWUvT3B0aW9uc0xpc3QuaDoKKyAg
ICAgICAgKiBydW50aW1lL1Byb3BlcnR5TWFwSGFzaFRhYmxlLmg6CisgICAgICAgIChKU0M6OlBy
b3BlcnR5VGFibGU6OmdldCk6CisgICAgICAgIChKU0M6OlByb3BlcnR5VGFibGU6OmFkZCk6Cisg
ICAgICAgIChKU0M6OlByb3BlcnR5VGFibGU6OmFkZERlbGV0ZWRPZmZzZXQpOgorICAgICAgICAo
SlNDOjpQcm9wZXJ0eVRhYmxlOjpyZWluc2VydCk6CisgICAgICAgICogcnVudGltZS9TdHJ1Y3R1
cmUuY3BwOgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmVUcmFuc2l0aW9uVGFibGU6OmNvbnRhaW5z
IGNvbnN0KToKKyAgICAgICAgKEpTQzo6U3RydWN0dXJlVHJhbnNpdGlvblRhYmxlOjpnZXQgY29u
c3QpOgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmVUcmFuc2l0aW9uVGFibGU6OmFkZCk6CisgICAg
ICAgIChKU0M6OlN0cnVjdHVyZTo6U3RydWN0dXJlKToKKyAgICAgICAgKEpTQzo6U3RydWN0dXJl
OjptYXRlcmlhbGl6ZVByb3BlcnR5VGFibGUpOgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmU6OmFk
ZE5ld1Byb3BlcnR5VHJhbnNpdGlvbik6CisgICAgICAgIChKU0M6OlN0cnVjdHVyZTo6cmVtb3Zl
UHJvcGVydHlUcmFuc2l0aW9uKToKKyAgICAgICAgKEpTQzo6U3RydWN0dXJlOjpyZW1vdmVQcm9w
ZXJ0eVRyYW5zaXRpb25Gcm9tRXhpc3RpbmdTdHJ1Y3R1cmUpOgorICAgICAgICAoSlNDOjpTdHJ1
Y3R1cmU6OnJlbW92ZU5ld1Byb3BlcnR5VHJhbnNpdGlvbik6CisgICAgICAgIChKU0M6OlN0cnVj
dHVyZTo6dG9VbmNhY2hlYWJsZURpY3Rpb25hcnlUcmFuc2l0aW9uKToKKyAgICAgICAgKEpTQzo6
U3RydWN0dXJlOjpyZW1vdmUpOgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmU6OnZpc2l0Q2hpbGRy
ZW4pOgorICAgICAgICAqIHJ1bnRpbWUvU3RydWN0dXJlLmg6CisgICAgICAgICogcnVudGltZS9T
dHJ1Y3R1cmVJbmxpbmVzLmg6CisgICAgICAgIChKU0M6OlN0cnVjdHVyZTo6Zm9yRWFjaFByb3Bl
cnR5Q29uY3VycmVudGx5KToKKyAgICAgICAgKEpTQzo6U3RydWN0dXJlOjphZGQpOgorICAgICAg
ICAoSlNDOjpTdHJ1Y3R1cmU6OnJlbW92ZSk6CisgICAgICAgIChKU0M6OlN0cnVjdHVyZTo6cmVt
b3ZlUHJvcGVydHlXaXRob3V0VHJhbnNpdGlvbik6CisgICAgICAgICogcnVudGltZS9TdHJ1Y3R1
cmVUcmFuc2l0aW9uVGFibGUuaDoKKyAgICAgICAgKEpTQzo6U3RydWN0dXJlVHJhbnNpdGlvblRh
YmxlOjpIYXNoOjpoYXNoKToKKyAgICAgICAgKiB0b29scy9KU0RvbGxhclZNLmNwcDoKKyAgICAg
ICAgKEpTQzo6SlNEb2xsYXJWTUhlbHBlcjo6ZnVuY3Rpb25HZXRTdHJ1Y3R1cmVUcmFuc2l0aW9u
TGlzdCk6CisgICAgICAgIChKU0M6OmZ1bmN0aW9uR2V0Q29uY3VycmVudGx5KToKKyAgICAgICAg
KEpTQzo6SlNEb2xsYXJWTTo6ZmluaXNoQ3JlYXRpb24pOgorCiAyMDIwLTAxLTI4ICBZdXN1a2Ug
U3V6dWtpICA8eXN1enVraUBhcHBsZS5jb20+CiAKICAgICAgICAgW0pTQ10gR2l2ZSB1cCBJQyB3
aGVuIHVua25vd24gc3RydWN0dXJlIHRyYW5zaXRpb24gaGFwcGVucwpkaWZmIC0tZ2l0IGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcElubGluZXMuaCBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9oZWFwL0hlYXBJbmxpbmVzLmgKaW5kZXggMTdmMjQxMThiODIyZWZiN2Y2NmVlMTI1OTUz
NzhmYTU4YzIxN2M2Mi4uN2FmMDU2M2IxMWViNmQ4YzE1MjJkNjIwOWZjNGMxOWQ1NTRhN2RjZiAx
MDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcElubGluZXMuaAorKysg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwSW5saW5lcy5oCkBAIC0xODgsNyArMTg4
LDcgQEAgaW5saW5lIHZvaWQgSGVhcDo6ZGVjcmVtZW50RGVmZXJyYWxEZXB0aEFuZEdDSWZOZWVk
ZWQoKQogICAgIEFTU0VSVCghVGhyZWFkOjptYXlCZUdDVGhyZWFkKCkgfHwgbV93b3JsZElzU3Rv
cHBlZCk7CiAgICAgbV9kZWZlcnJhbERlcHRoLS07CiAgICAgCi0gICAgaWYgKFVOTElLRUxZKG1f
ZGlkRGVmZXJHQ1dvcmspKSB7CisgICAgaWYgKFVOTElLRUxZKG1fZGlkRGVmZXJHQ1dvcmspIHx8
IE9wdGlvbnM6OmZvcmNlRGlkRGVmZXJHQ1dvcmsoKSkgewogICAgICAgICBkZWNyZW1lbnREZWZl
cnJhbERlcHRoQW5kR0NJZk5lZWRlZFNsb3coKTsKICAgICAgICAgCiAgICAgICAgIC8vIEhlcmUg
YXJlIHRoZSBwb3NzaWJsZSByZWxhdGlvbnNoaXBzIGJldHdlZW4gbV9kZWZlcnJhbERlcHRoIGFu
ZCBtX2RpZERlZmVyR0NXb3JrLgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSlNPYmplY3QuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNPYmpl
Y3QuY3BwCmluZGV4IGQ2N2JhOGQ1Y2E5NTY5ZDA0YTE5ZTUwMzY0NTMwNTk2YmE5ZDg4ZDIuLmFj
ZDI5ZGVkODEzNTFmYjI4NGIyMTU5YWQ0N2E2MzFjMzQ5NGYxZGYgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT2JqZWN0LmNwcAorKysgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9KU09iamVjdC5jcHAKQEAgLTIwMDEsMTIgKzIwMDEsMjIgQEAgYm9v
bCBKU09iamVjdDo6ZGVsZXRlUHJvcGVydHkoSlNDZWxsKiBjZWxsLCBKU0dsb2JhbE9iamVjdCog
Z2xvYmFsT2JqZWN0LCBQcm9wZXIKICAgICBpZiAocHJvcGVydHlJc1ByZXNlbnQpIHsKICAgICAg
ICAgaWYgKGF0dHJpYnV0ZXMgJiBQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udERlbGV0ZSAmJiB2bS5k
ZWxldGVQcm9wZXJ0eU1vZGUoKSAhPSBWTTo6RGVsZXRlUHJvcGVydHlNb2RlOjpJZ25vcmVDb25m
aWd1cmFibGUpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIERlZmVycmVkU3Ry
dWN0dXJlVHJhbnNpdGlvbldhdGNocG9pbnRGaXJlIGRlZmVycmVkV2F0Y2hwb2ludEZpcmUodm0s
IHN0cnVjdHVyZSk7CiAKLSAgICAgICAgUHJvcGVydHlPZmZzZXQgb2Zmc2V0OworICAgICAgICBQ
cm9wZXJ0eU9mZnNldCBvZmZzZXQgPSBpbnZhbGlkT2Zmc2V0OwogICAgICAgICBpZiAoc3RydWN0
dXJlLT5pc1VuY2FjaGVhYmxlRGljdGlvbmFyeSgpKQotICAgICAgICAgICAgb2Zmc2V0ID0gc3Ry
dWN0dXJlLT5yZW1vdmVQcm9wZXJ0eVdpdGhvdXRUcmFuc2l0aW9uKHZtLCBwcm9wZXJ0eU5hbWUs
IFtdIChjb25zdCBDb25jdXJyZW50SlNMb2NrZXImLCBQcm9wZXJ0eU9mZnNldCkgeyB9KTsKLSAg
ICAgICAgZWxzZQotICAgICAgICAgICAgdGhpc09iamVjdC0+c2V0U3RydWN0dXJlKHZtLCBTdHJ1
Y3R1cmU6OnJlbW92ZVByb3BlcnR5VHJhbnNpdGlvbih2bSwgc3RydWN0dXJlLCBwcm9wZXJ0eU5h
bWUsIG9mZnNldCkpOworICAgICAgICAgICAgb2Zmc2V0ID0gc3RydWN0dXJlLT5yZW1vdmVQcm9w
ZXJ0eVdpdGhvdXRUcmFuc2l0aW9uKHZtLCBwcm9wZXJ0eU5hbWUsIFtdIChjb25zdCBHQ1NhZmVD
b25jdXJyZW50SlNMb2NrZXImLCBQcm9wZXJ0eU9mZnNldCwgUHJvcGVydHlPZmZzZXQpIHsgfSk7
CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgc3RydWN0dXJlID0gU3RydWN0dXJlOjpyZW1v
dmVQcm9wZXJ0eVRyYW5zaXRpb24odm0sIHN0cnVjdHVyZSwgcHJvcGVydHlOYW1lLCBvZmZzZXQs
ICZkZWZlcnJlZFdhdGNocG9pbnRGaXJlKTsKKyAgICAgICAgICAgIGlmICh0aGlzT2JqZWN0LT5t
X2J1dHRlcmZseSAmJiAhc3RydWN0dXJlLT5vdXRPZkxpbmVDYXBhY2l0eSgpICYmICFzdHJ1Y3R1
cmUtPmhhc0luZGV4aW5nSGVhZGVyKHRoaXNPYmplY3QpKSB7CisgICAgICAgICAgICAgICAgdGhp
c09iamVjdC0+bnVrZVN0cnVjdHVyZUFuZFNldEJ1dHRlcmZseSh2bSwgdGhpc09iamVjdC0+c3Ry
dWN0dXJlSUQoKSwgbnVsbHB0cik7CisgICAgICAgICAgICAgICAgb2Zmc2V0ID0gaW52YWxpZE9m
ZnNldDsKKyAgICAgICAgICAgICAgICBBU1NFUlQoc3RydWN0dXJlLT5tYXhPZmZzZXQoKSA9PSBp
bnZhbGlkT2Zmc2V0KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHRoaXNPYmplY3QtPnNl
dFN0cnVjdHVyZSh2bSwgc3RydWN0dXJlKTsKKyAgICAgICAgfQorCisgICAgICAgIEFTU0VSVCgh
aXNWYWxpZE9mZnNldChzdHJ1Y3R1cmUtPmdldCh2bSwgcHJvcGVydHlOYW1lLCBhdHRyaWJ1dGVz
KSkpOwogCiAgICAgICAgIGlmIChvZmZzZXQgIT0gaW52YWxpZE9mZnNldCkKICAgICAgICAgICAg
IHRoaXNPYmplY3QtPmxvY2F0aW9uRm9yT2Zmc2V0KG9mZnNldCktPmNsZWFyKCk7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PcHRpb25zTGlzdC5oIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9uc0xpc3QuaAppbmRleCA1N2MyZDJkMmFkMTlh
ODEyNjVjYjBmMGMzMjNhMzA0Y2UwNzZlM2VmLi5mMzU2ZDU5ODc4NjVkZjcwNWM5Mjk2Nzg5MzI3
MTMxNWRlYTBhNWRkIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9P
cHRpb25zTGlzdC5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09wdGlvbnNM
aXN0LmgKQEAgLTM0Nyw2ICszNDcsNyBAQCBjb25zdGV4cHIgYm9vbCBlbmFibGVXZWJBc3NlbWJs
eVN0cmVhbWluZ0FwaSA9IGZhbHNlOwogICAgIHYoQm9vbCwgdXNlR0MsIHRydWUsIE5vcm1hbCwg
bnVsbHB0cikgXAogICAgIHYoQm9vbCwgZ2NBdEVuZCwgZmFsc2UsIE5vcm1hbCwgIklmIHRydWUs
IHRoZSBqc2MgQ0xJIHdpbGwgZG8gYSBHQyBiZWZvcmUgZXhpdGluZyIpIFwKICAgICB2KEJvb2ws
IGZvcmNlR0NTbG93UGF0aHMsIGZhbHNlLCBOb3JtYWwsICJJZiB0cnVlLCB3ZSB3aWxsIGZvcmNl
IGFsbCBKSVQgZmFzdCBhbGxvY2F0aW9ucyBkb3duIHRoZWlyIHNsb3cgcGF0aHMuIikgXAorICAg
IHYoQm9vbCwgZm9yY2VEaWREZWZlckdDV29yaywgZmFsc2UsIE5vcm1hbCwgIklmIHRydWUsIHdl
IHdpbGwgZm9yY2UgYWxsIERlZmVyR0MgZGVzdHJ1Y3Rpb25zIHRvIHBlcmZvcm0gYSBHQy4iKSBc
CiAgICAgdihVbnNpZ25lZCwgZ2NNYXhIZWFwU2l6ZSwgMCwgTm9ybWFsLCBudWxscHRyKSBcCiAg
ICAgdihVbnNpZ25lZCwgZm9yY2VSQU1TaXplLCAwLCBOb3JtYWwsIG51bGxwdHIpIFwKICAgICB2
KEJvb2wsIHJlY29yZEdDUGF1c2VUaW1lcywgZmFsc2UsIE5vcm1hbCwgbnVsbHB0cikgXApkaWZm
IC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUHJvcGVydHlNYXBIYXNoVGFi
bGUuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Byb3BlcnR5TWFwSGFzaFRhYmxl
LmgKaW5kZXggY2I2MDE1Y2YyMGU0NTMwMTE1OWJiMDBkNzQyNjIzNzRmZWVjYjljZi4uNTEzMmRl
ODVkMGY2NmIyZmExZmQzMjNmYWIxOGQwNmU4ODFkZWZkNCAxMDA2NDQKLS0tIGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvUHJvcGVydHlNYXBIYXNoVGFibGUuaAorKysgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9Qcm9wZXJ0eU1hcEhhc2hUYWJsZS5oCkBAIC0xNjksOCAr
MTY5LDcgQEAgcHVibGljOgogICAgIGZpbmRfaXRlcmF0b3IgZmluZChjb25zdCBLZXlUeXBlJik7
CiAgICAgVmFsdWVUeXBlKiBnZXQoY29uc3QgS2V5VHlwZSYpOwogICAgIC8vIEFkZCBhIHZhbHVl
IHRvIHRoZSB0YWJsZQotICAgIGVudW0gRWZmZWN0T25Qcm9wZXJ0eU9mZnNldCB7IFByb3BlcnR5
T2Zmc2V0TWF5Q2hhbmdlLCBQcm9wZXJ0eU9mZnNldE11c3ROb3RDaGFuZ2UgfTsKLSAgICBzdGQ6
OnBhaXI8ZmluZF9pdGVyYXRvciwgYm9vbD4gYWRkKGNvbnN0IFZhbHVlVHlwZSYgZW50cnksIFBy
b3BlcnR5T2Zmc2V0JiwgRWZmZWN0T25Qcm9wZXJ0eU9mZnNldCk7CisgICAgc3RkOjpwYWlyPGZp
bmRfaXRlcmF0b3IsIGJvb2w+IFdBUk5fVU5VU0VEX1JFVFVSTiBhZGQoY29uc3QgVmFsdWVUeXBl
JiBlbnRyeSk7CiAgICAgLy8gUmVtb3ZlIGEgdmFsdWUgZnJvbSB0aGUgdGFibGUuCiAgICAgdm9p
ZCByZW1vdmUoY29uc3QgZmluZF9pdGVyYXRvciYgaXRlcik7CiAgICAgdm9pZCByZW1vdmUoY29u
c3QgS2V5VHlwZSYga2V5KTsKQEAgLTMyMSw2ICszMjAsNyBAQCBpbmxpbmUgUHJvcGVydHlUYWJs
ZTo6VmFsdWVUeXBlKiBQcm9wZXJ0eVRhYmxlOjpnZXQoY29uc3QgS2V5VHlwZSYga2V5KQogewog
ICAgIEFTU0VSVChrZXkpOwogICAgIEFTU0VSVChrZXktPmlzQXRvbSgpIHx8IGtleS0+aXNTeW1i
b2woKSk7CisgICAgQVNTRVJUKGtleSAhPSBQUk9QRVJUWV9NQVBfREVMRVRFRF9FTlRSWV9LRVkp
OwogCiAgICAgaWYgKCFtX2tleUNvdW50KQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKQEAgLTMz
NSw4ICszMzUsMTAgQEAgaW5saW5lIFByb3BlcnR5VGFibGU6OlZhbHVlVHlwZSogUHJvcGVydHlU
YWJsZTo6Z2V0KGNvbnN0IEtleVR5cGUmIGtleSkKICAgICAgICAgdW5zaWduZWQgZW50cnlJbmRl
eCA9IG1faW5kZXhbaGFzaCAmIG1faW5kZXhNYXNrXTsKICAgICAgICAgaWYgKGVudHJ5SW5kZXgg
PT0gRW1wdHlFbnRyeUluZGV4KQogICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgICAg
IGlmIChrZXkgPT0gdGFibGUoKVtlbnRyeUluZGV4IC0gMV0ua2V5KQorICAgICAgICBpZiAoa2V5
ID09IHRhYmxlKClbZW50cnlJbmRleCAtIDFdLmtleSkgeworICAgICAgICAgICAgQVNTRVJUKCFt
X2RlbGV0ZWRPZmZzZXRzIHx8ICFtX2RlbGV0ZWRPZmZzZXRzLT5jb250YWlucyh0YWJsZSgpW2Vu
dHJ5SW5kZXggLSAxXS5vZmZzZXQpKTsKICAgICAgICAgICAgIHJldHVybiAmdGFibGUoKVtlbnRy
eUluZGV4IC0gMV07CisgICAgICAgIH0KIAogI2lmIERVTVBfUFJPUEVSVFlNQVBfU1RBVFMKICAg
ICAgICAgKytwcm9wZXJ0eU1hcEhhc2hUYWJsZVN0YXRzLT5udW1Mb29rdXBQcm9iaW5nOwpAQCAt
MzQ2LDE0ICszNDgsMjEgQEAgaW5saW5lIFByb3BlcnR5VGFibGU6OlZhbHVlVHlwZSogUHJvcGVy
dHlUYWJsZTo6Z2V0KGNvbnN0IEtleVR5cGUmIGtleSkKICAgICB9CiB9CiAKLWlubGluZSBzdGQ6
OnBhaXI8UHJvcGVydHlUYWJsZTo6ZmluZF9pdGVyYXRvciwgYm9vbD4gUHJvcGVydHlUYWJsZTo6
YWRkKGNvbnN0IFZhbHVlVHlwZSYgZW50cnksIFByb3BlcnR5T2Zmc2V0JiBvZmZzZXQsIEVmZmVj
dE9uUHJvcGVydHlPZmZzZXQgb2Zmc2V0RWZmZWN0KQoraW5saW5lIHN0ZDo6cGFpcjxQcm9wZXJ0
eVRhYmxlOjpmaW5kX2l0ZXJhdG9yLCBib29sPiBXQVJOX1VOVVNFRF9SRVRVUk4gUHJvcGVydHlU
YWJsZTo6YWRkKGNvbnN0IFZhbHVlVHlwZSYgZW50cnkpCiB7CisgICAgQVNTRVJUKCFtX2RlbGV0
ZWRPZmZzZXRzIHx8ICFtX2RlbGV0ZWRPZmZzZXRzLT5jb250YWlucyhlbnRyeS5vZmZzZXQpKTsK
KwogICAgIC8vIExvb2sgZm9yIGEgdmFsdWUgd2l0aCBhIG1hdGNoaW5nIGtleSBhbHJlYWR5IGlu
IHRoZSBhcnJheS4KICAgICBmaW5kX2l0ZXJhdG9yIGl0ZXIgPSBmaW5kKGVudHJ5LmtleSk7Ci0g
ICAgaWYgKGl0ZXIuZmlyc3QpIHsKLSAgICAgICAgUkVMRUFTRV9BU1NFUlQoaXRlci5maXJzdC0+
b2Zmc2V0IDw9IG9mZnNldCk7CisgICAgaWYgKGl0ZXIuZmlyc3QpCiAgICAgICAgIHJldHVybiBz
dGQ6Om1ha2VfcGFpcihpdGVyLCBmYWxzZSk7CisKKyNpZm5kZWYgTkRFQlVHCisgICAgZm9yIChh
dXRvJiBvdGhlciA6ICp0aGlzKSB7CisgICAgICAgIEFTU0VSVChvdGhlci5vZmZzZXQgIT0gZW50
cnkub2Zmc2V0KTsKKyAgICAgICAgQVNTRVJUKG90aGVyLmtleSAhPSBlbnRyeS5rZXkpOwogICAg
IH0KKyNlbmRpZgogCiAjaWYgRFVNUF9QUk9QRVJUWU1BUF9TVEFUUwogICAgICsrcHJvcGVydHlN
YXBIYXNoVGFibGVTdGF0cy0+bnVtQWRkczsKQEAgLTM3NywxMSArMzg2LDYgQEAgaW5saW5lIHN0
ZDo6cGFpcjxQcm9wZXJ0eVRhYmxlOjpmaW5kX2l0ZXJhdG9yLCBib29sPiBQcm9wZXJ0eVRhYmxl
OjphZGQoY29uc3QgVmEKIAogICAgICsrbV9rZXlDb3VudDsKICAgICAKLSAgICBpZiAob2Zmc2V0
RWZmZWN0ID09IFByb3BlcnR5T2Zmc2V0TWF5Q2hhbmdlKQotICAgICAgICBvZmZzZXQgPSBzdGQ6
Om1heChvZmZzZXQsIGVudHJ5Lm9mZnNldCk7Ci0gICAgZWxzZQotICAgICAgICBSRUxFQVNFX0FT
U0VSVChvZmZzZXQgPj0gZW50cnkub2Zmc2V0KTsKLSAgICAKICAgICByZXR1cm4gc3RkOjptYWtl
X3BhaXIoaXRlciwgdHJ1ZSk7CiB9CiAKQEAgLTQ1MSw2ICs0NTUsNyBAQCBpbmxpbmUgdm9pZCBQ
cm9wZXJ0eVRhYmxlOjphZGREZWxldGVkT2Zmc2V0KFByb3BlcnR5T2Zmc2V0IG9mZnNldCkKIHsK
ICAgICBpZiAoIW1fZGVsZXRlZE9mZnNldHMpCiAgICAgICAgIG1fZGVsZXRlZE9mZnNldHMgPSBt
YWtlVW5pcXVlPFZlY3RvcjxQcm9wZXJ0eU9mZnNldD4+KCk7CisgICAgQVNTRVJUKCFtX2RlbGV0
ZWRPZmZzZXRzLT5jb250YWlucyhvZmZzZXQpKTsKICAgICBtX2RlbGV0ZWRPZmZzZXRzLT5hcHBl
bmQob2Zmc2V0KTsKIH0KIApAQCAtNDg5LDYgKzQ5NCwxMyBAQCBpbmxpbmUgdm9pZCBQcm9wZXJ0
eVRhYmxlOjpyZWluc2VydChjb25zdCBWYWx1ZVR5cGUmIGVudHJ5KQogICAgICsrcHJvcGVydHlN
YXBIYXNoVGFibGVTdGF0cy0+bnVtUmVpbnNlcnRzOwogI2VuZGlmCiAKKyNpZm5kZWYgTkRFQlVH
CisgICAgZm9yIChhdXRvJiBvdGhlciA6ICp0aGlzKSB7CisgICAgICAgIEFTU0VSVChvdGhlci5v
ZmZzZXQgIT0gZW50cnkub2Zmc2V0KTsKKyAgICAgICAgQVNTRVJUKG90aGVyLmtleSAhPSBlbnRy
eS5rZXkpOworICAgIH0KKyNlbmRpZgorCiAgICAgLy8gVXNlZCB0byBpbnNlcnQgYSB2YWx1ZSBr
bm93biBub3QgdG8gYmUgaW4gdGhlIHRhYmxlLCBhbmQgd2hlcmUKICAgICAvLyB3ZSBrbm93IGNh
cGFjaXR5IHRvIGJlIGF2YWlsYWJsZS4KICAgICBBU1NFUlQoY2FuSW5zZXJ0KCkpOwpkaWZmIC0t
Z2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlLmNwcCBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZS5jcHAKaW5kZXggM2UxNGY4YjZhMzNi
ZWRkY2NmMGViYTFkMmYyOTFiNzc1ODc5NGZhOS4uY2MzYmJlZmYxM2VhOGExZTgyMjBiZjY0ZTI5
MjJiNTZhZDExNzIxMyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
U3RydWN0dXJlLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1
cmUuY3BwCkBAIC04NywyMiArODcsMjIgQEAgaW5saW5lIHZvaWQgU3RydWN0dXJlVHJhbnNpdGlv
blRhYmxlOjpzZXRTaW5nbGVUcmFuc2l0aW9uKFN0cnVjdHVyZSogc3RydWN0dXJlKQogICAgIG1f
ZGF0YSA9IGJpdHdpc2VfY2FzdDxpbnRwdHJfdD4oaW1wbCkgfCBVc2luZ1NpbmdsZVNsb3RGbGFn
OwogfQogCi1ib29sIFN0cnVjdHVyZVRyYW5zaXRpb25UYWJsZTo6Y29udGFpbnMoVW5pcXVlZFN0
cmluZ0ltcGwqIHJlcCwgdW5zaWduZWQgYXR0cmlidXRlcykgY29uc3QKK2Jvb2wgU3RydWN0dXJl
VHJhbnNpdGlvblRhYmxlOjpjb250YWlucyhVbmlxdWVkU3RyaW5nSW1wbCogcmVwLCB1bnNpZ25l
ZCBhdHRyaWJ1dGVzLCBib29sIGlzQWRkaXRpb24pIGNvbnN0CiB7CiAgICAgaWYgKGlzVXNpbmdT
aW5nbGVTbG90KCkpIHsKICAgICAgICAgU3RydWN0dXJlKiB0cmFuc2l0aW9uID0gc2luZ2xlVHJh
bnNpdGlvbigpOwotICAgICAgICByZXR1cm4gdHJhbnNpdGlvbiAmJiB0cmFuc2l0aW9uLT5tX3Ry
YW5zaXRpb25Qcm9wZXJ0eU5hbWUgPT0gcmVwICYmIHRyYW5zaXRpb24tPnRyYW5zaXRpb25Qcm9w
ZXJ0eUF0dHJpYnV0ZXMoKSA9PSBhdHRyaWJ1dGVzOworICAgICAgICByZXR1cm4gdHJhbnNpdGlv
biAmJiB0cmFuc2l0aW9uLT5tX3RyYW5zaXRpb25Qcm9wZXJ0eU5hbWUgPT0gcmVwICYmIHRyYW5z
aXRpb24tPnRyYW5zaXRpb25Qcm9wZXJ0eUF0dHJpYnV0ZXMoKSA9PSBhdHRyaWJ1dGVzICYmIHRy
YW5zaXRpb24tPmlzUHJvcGVydHlEZWxldGlvblRyYW5zaXRpb24oKSA9PSAhaXNBZGRpdGlvbjsK
ICAgICB9Ci0gICAgcmV0dXJuIG1hcCgpLT5nZXQoc3RkOjptYWtlX3BhaXIocmVwLCBhdHRyaWJ1
dGVzKSk7CisgICAgcmV0dXJuIG1hcCgpLT5nZXQoc3RkOjptYWtlX3R1cGxlKHJlcCwgYXR0cmli
dXRlcywgaXNBZGRpdGlvbikpOwogfQogCi1pbmxpbmUgU3RydWN0dXJlKiBTdHJ1Y3R1cmVUcmFu
c2l0aW9uVGFibGU6OmdldChVbmlxdWVkU3RyaW5nSW1wbCogcmVwLCB1bnNpZ25lZCBhdHRyaWJ1
dGVzKSBjb25zdAoraW5saW5lIFN0cnVjdHVyZSogU3RydWN0dXJlVHJhbnNpdGlvblRhYmxlOjpn
ZXQoVW5pcXVlZFN0cmluZ0ltcGwqIHJlcCwgdW5zaWduZWQgYXR0cmlidXRlcywgYm9vbCBpc0Fk
ZGl0aW9uKSBjb25zdAogewogICAgIGlmIChpc1VzaW5nU2luZ2xlU2xvdCgpKSB7CiAgICAgICAg
IFN0cnVjdHVyZSogdHJhbnNpdGlvbiA9IHNpbmdsZVRyYW5zaXRpb24oKTsKLSAgICAgICAgcmV0
dXJuICh0cmFuc2l0aW9uICYmIHRyYW5zaXRpb24tPm1fdHJhbnNpdGlvblByb3BlcnR5TmFtZSA9
PSByZXAgJiYgdHJhbnNpdGlvbi0+dHJhbnNpdGlvblByb3BlcnR5QXR0cmlidXRlcygpID09IGF0
dHJpYnV0ZXMpID8gdHJhbnNpdGlvbiA6IDA7CisgICAgICAgIHJldHVybiAodHJhbnNpdGlvbiAm
JiB0cmFuc2l0aW9uLT5tX3RyYW5zaXRpb25Qcm9wZXJ0eU5hbWUgPT0gcmVwICYmIHRyYW5zaXRp
b24tPnRyYW5zaXRpb25Qcm9wZXJ0eUF0dHJpYnV0ZXMoKSA9PSBhdHRyaWJ1dGVzICYmIHRyYW5z
aXRpb24tPmlzUHJvcGVydHlEZWxldGlvblRyYW5zaXRpb24oKSA9PSAhaXNBZGRpdGlvbikgPyB0
cmFuc2l0aW9uIDogMDsKICAgICB9Ci0gICAgcmV0dXJuIG1hcCgpLT5nZXQoc3RkOjptYWtlX3Bh
aXIocmVwLCBhdHRyaWJ1dGVzKSk7CisgICAgcmV0dXJuIG1hcCgpLT5nZXQoc3RkOjptYWtlX3R1
cGxlKHJlcCwgYXR0cmlidXRlcywgaXNBZGRpdGlvbikpOwogfQogCiB2b2lkIFN0cnVjdHVyZVRy
YW5zaXRpb25UYWJsZTo6YWRkKFZNJiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUpCkBAIC0xMjcs
NyArMTI3LDcgQEAgdm9pZCBTdHJ1Y3R1cmVUcmFuc2l0aW9uVGFibGU6OmFkZChWTSYgdm0sIFN0
cnVjdHVyZSogc3RydWN0dXJlKQogICAgIC8vIE5ld2VyIHZlcnNpb25zIG9mIHRoZSBTVEwgaGF2
ZSBhbiBzdGQ6Om1ha2VfcGFpciBmdW5jdGlvbiB0aGF0IHRha2VzIHJ2YWx1ZSByZWZlcmVuY2Vz
LgogICAgIC8vIFdoZW4gZWl0aGVyIG9mIHRoZSBwYXJhbWV0ZXJzIGFyZSBiaXRmaWVsZHMsIHRo
ZSBDKysgY29tcGlsZXIgd2lsbCB0cnkgdG8gYmluZCB0aGVtIGFzIGx2YWx1ZXMsIHdoaWNoIGlz
IGludmFsaWQuIFRvIHdvcmsgYXJvdW5kIHRoaXMsIHVzZSB1bmFyeSAiKyIgdG8gbWFrZSB0aGUg
cGFyYW1ldGVyIGFuIHJ2YWx1ZS4KICAgICAvLyBTZWUgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTU5MjYxIGZvciBtb3JlIGRldGFpbHMKLSAgICBtYXAoKS0+c2V0KHN0
ZDo6bWFrZV9wYWlyKHN0cnVjdHVyZS0+bV90cmFuc2l0aW9uUHJvcGVydHlOYW1lLmdldCgpLCAr
c3RydWN0dXJlLT50cmFuc2l0aW9uUHJvcGVydHlBdHRyaWJ1dGVzKCkpLCBzdHJ1Y3R1cmUpOwor
ICAgIG1hcCgpLT5zZXQoc3RkOjptYWtlX3R1cGxlKHN0cnVjdHVyZS0+bV90cmFuc2l0aW9uUHJv
cGVydHlOYW1lLmdldCgpLCArc3RydWN0dXJlLT50cmFuc2l0aW9uUHJvcGVydHlBdHRyaWJ1dGVz
KCksICFzdHJ1Y3R1cmUtPmlzUHJvcGVydHlEZWxldGlvblRyYW5zaXRpb24oKSksIHN0cnVjdHVy
ZSk7CiB9CiAKIHZvaWQgU3RydWN0dXJlOjpkdW1wU3RhdGlzdGljcygpCkBAIC0yMDAsNyArMjAw
LDggQEAgU3RydWN0dXJlOjpTdHJ1Y3R1cmUoVk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFs
T2JqZWN0LCBKU1ZhbHVlIHByb3RvdHlwZSwgY28KICAgICBzZXRTdGF0aWNQcm9wZXJ0aWVzUmVp
ZmllZChmYWxzZSk7CiAgICAgc2V0VHJhbnNpdGlvbldhdGNocG9pbnRJc0xpa2VseVRvQmVGaXJl
ZChmYWxzZSk7CiAgICAgc2V0SGFzQmVlbkRpY3Rpb25hcnkoZmFsc2UpOwotICAgIHNldElzQWRk
aW5nUHJvcGVydHlGb3JUcmFuc2l0aW9uKGZhbHNlKTsKKyAgICBzZXRQcm90ZWN0UHJvcGVydHlU
YWJsZVdoaWxlVHJhbnNpdGlvbmluZyhmYWxzZSk7CisgICAgc2V0SXNQcm9wZXJ0eURlbGV0aW9u
VHJhbnNpdGlvbihmYWxzZSk7CiAgICAgc2V0VHJhbnNpdGlvbk9mZnNldCh2bSwgaW52YWxpZE9m
ZnNldCk7CiAgICAgc2V0TWF4T2Zmc2V0KHZtLCBpbnZhbGlkT2Zmc2V0KTsKICAKQEAgLTIzNiw3
ICsyMzcsOCBAQCBTdHJ1Y3R1cmU6OlN0cnVjdHVyZShWTSYgdm0pCiAgICAgc2V0U3RhdGljUHJv
cGVydGllc1JlaWZpZWQoZmFsc2UpOwogICAgIHNldFRyYW5zaXRpb25XYXRjaHBvaW50SXNMaWtl
bHlUb0JlRmlyZWQoZmFsc2UpOwogICAgIHNldEhhc0JlZW5EaWN0aW9uYXJ5KGZhbHNlKTsKLSAg
ICBzZXRJc0FkZGluZ1Byb3BlcnR5Rm9yVHJhbnNpdGlvbihmYWxzZSk7CisgICAgc2V0UHJvdGVj
dFByb3BlcnR5VGFibGVXaGlsZVRyYW5zaXRpb25pbmcoZmFsc2UpOworICAgIHNldElzUHJvcGVy
dHlEZWxldGlvblRyYW5zaXRpb24oZmFsc2UpOwogICAgIHNldFRyYW5zaXRpb25PZmZzZXQodm0s
IGludmFsaWRPZmZzZXQpOwogICAgIHNldE1heE9mZnNldCh2bSwgaW52YWxpZE9mZnNldCk7CiAg
CkBAIC0yNzIsNyArMjc0LDggQEAgU3RydWN0dXJlOjpTdHJ1Y3R1cmUoVk0mIHZtLCBTdHJ1Y3R1
cmUqIHByZXZpb3VzLCBEZWZlcnJlZFN0cnVjdHVyZVRyYW5zaXRpb25XYXQKICAgICBzZXREaWRU
cmFuc2l0aW9uKHRydWUpOwogICAgIHNldFN0YXRpY1Byb3BlcnRpZXNSZWlmaWVkKHByZXZpb3Vz
LT5zdGF0aWNQcm9wZXJ0aWVzUmVpZmllZCgpKTsKICAgICBzZXRIYXNCZWVuRGljdGlvbmFyeShw
cmV2aW91cy0+aGFzQmVlbkRpY3Rpb25hcnkoKSk7Ci0gICAgc2V0SXNBZGRpbmdQcm9wZXJ0eUZv
clRyYW5zaXRpb24oZmFsc2UpOworICAgIHNldFByb3RlY3RQcm9wZXJ0eVRhYmxlV2hpbGVUcmFu
c2l0aW9uaW5nKGZhbHNlKTsKKyAgICBzZXRJc1Byb3BlcnR5RGVsZXRpb25UcmFuc2l0aW9uKGZh
bHNlKTsKICAgICBzZXRUcmFuc2l0aW9uT2Zmc2V0KHZtLCBpbnZhbGlkT2Zmc2V0KTsKICAgICBz
ZXRNYXhPZmZzZXQodm0sIGludmFsaWRPZmZzZXQpOwogIApAQCAtMzU2LDcgKzM1OSw3IEBAIHZv
aWQgU3RydWN0dXJlOjpmaW5kU3RydWN0dXJlc0FuZE1hcEZvck1hdGVyaWFsaXphdGlvbihWZWN0
b3I8U3RydWN0dXJlKiwgOD4mIHN0CiBQcm9wZXJ0eVRhYmxlKiBTdHJ1Y3R1cmU6Om1hdGVyaWFs
aXplUHJvcGVydHlUYWJsZShWTSYgdm0sIGJvb2wgc2V0UHJvcGVydHlUYWJsZSkKIHsKICAgICBB
U1NFUlQoc3RydWN0dXJlKHZtKS0+Y2xhc3NJbmZvKCkgPT0gaW5mbygpKTsKLSAgICBBU1NFUlQo
IWlzQWRkaW5nUHJvcGVydHlGb3JUcmFuc2l0aW9uKCkpOworICAgIEFTU0VSVCghcHJvdGVjdFBy
b3BlcnR5VGFibGVXaGlsZVRyYW5zaXRpb25pbmcoKSk7CiAgICAgCiAgICAgRGVmZXJHQyBkZWZl
ckdDKHZtLmhlYXApOwogICAgIApAQCAtMzg0LDEwICszODcsMTkgQEAgUHJvcGVydHlUYWJsZSog
U3RydWN0dXJlOjptYXRlcmlhbGl6ZVByb3BlcnR5VGFibGUoVk0mIHZtLCBib29sIHNldFByb3Bl
cnR5VGFibGUKICAgICAgICAgc3RydWN0dXJlID0gc3RydWN0dXJlc1tpXTsKICAgICAgICAgaWYg
KCFzdHJ1Y3R1cmUtPm1fdHJhbnNpdGlvblByb3BlcnR5TmFtZSkKICAgICAgICAgICAgIGNvbnRp
bnVlOwotICAgICAgICBBU1NFUlQoaSA9PSBzdHJ1Y3R1cmVzLnNpemUoKSAtIDEgfHwgc3RydWN0
dXJlLT5tYXhPZmZzZXQoKSA+IHN0cnVjdHVyZXNbaSArIDFdLT5tYXhPZmZzZXQoKSk7CisgICAg
ICAgIGlmIChzdHJ1Y3R1cmUtPmlzUHJvcGVydHlEZWxldGlvblRyYW5zaXRpb24oKSkgeworICAg
ICAgICAgICAgYXV0byBpdGVtID0gdGFibGUtPmZpbmQoc3RydWN0dXJlLT5tX3RyYW5zaXRpb25Q
cm9wZXJ0eU5hbWUuZ2V0KCkpOworICAgICAgICAgICAgQVNTRVJUKGl0ZW0uZmlyc3QpOworICAg
ICAgICAgICAgdGFibGUtPnJlbW92ZShpdGVtKTsKKyAgICAgICAgICAgIHRhYmxlLT5hZGREZWxl
dGVkT2Zmc2V0KHN0cnVjdHVyZS0+dHJhbnNpdGlvbk9mZnNldCgpKTsKKyAgICAgICAgICAgIGNv
bnRpbnVlOworICAgICAgICB9CiAgICAgICAgIFByb3BlcnR5TWFwRW50cnkgZW50cnkoc3RydWN0
dXJlLT5tX3RyYW5zaXRpb25Qcm9wZXJ0eU5hbWUuZ2V0KCksIHN0cnVjdHVyZS0+dHJhbnNpdGlv
bk9mZnNldCgpLCBzdHJ1Y3R1cmUtPnRyYW5zaXRpb25Qcm9wZXJ0eUF0dHJpYnV0ZXMoKSk7Ci0g
ICAgICAgIGF1dG8gbWF4T2Zmc2V0ID0gdGhpcy0+bWF4T2Zmc2V0KCk7Ci0gICAgICAgIHRhYmxl
LT5hZGQoZW50cnksIG1heE9mZnNldCwgUHJvcGVydHlUYWJsZTo6UHJvcGVydHlPZmZzZXRNdXN0
Tm90Q2hhbmdlKTsKKyAgICAgICAgYXV0byBuZXh0T2Zmc2V0ID0gdGFibGUtPm5leHRPZmZzZXQo
c3RydWN0dXJlLT5pbmxpbmVDYXBhY2l0eSgpKTsKKyAgICAgICAgQVNTRVJUX1VOVVNFRChuZXh0
T2Zmc2V0LCBuZXh0T2Zmc2V0ID09IHN0cnVjdHVyZS0+dHJhbnNpdGlvbk9mZnNldCgpKTsKKyAg
ICAgICAgYXV0byByZXN1bHQgPSB0YWJsZS0+YWRkKGVudHJ5KTsKKyAgICAgICAgQVNTRVJUX1VO
VVNFRChyZXN1bHQsIHJlc3VsdC5zZWNvbmQpOworICAgICAgICBBU1NFUlRfVU5VU0VEKHJlc3Vs
dCwgcmVzdWx0LmZpcnN0LmZpcnN0LT5vZmZzZXQgPT0gbmV4dE9mZnNldCk7CiAgICAgfQogICAg
IAogICAgIGNoZWNrT2Zmc2V0Q29uc2lzdGVuY3koCkBAIC00ODQsNyArNDk2LDYgQEAgU3RydWN0
dXJlKiBTdHJ1Y3R1cmU6OmFkZE5ld1Byb3BlcnR5VHJhbnNpdGlvbihWTSYgdm0sIFN0cnVjdHVy
ZSogc3RydWN0dXJlLCBQcm8KICAgICAgICAgU3RydWN0dXJlKiB0cmFuc2l0aW9uID0gdG9DYWNo
ZWFibGVEaWN0aW9uYXJ5VHJhbnNpdGlvbih2bSwgc3RydWN0dXJlLCBkZWZlcnJlZCk7CiAgICAg
ICAgIEFTU0VSVChzdHJ1Y3R1cmUgIT0gdHJhbnNpdGlvbik7CiAgICAgICAgIG9mZnNldCA9IHRy
YW5zaXRpb24tPmFkZCh2bSwgcHJvcGVydHlOYW1lLCBhdHRyaWJ1dGVzKTsKLSAgICAgICAgdHJh
bnNpdGlvbi0+c2V0VHJhbnNpdGlvbk9mZnNldCh2bSwgb2Zmc2V0KTsKICAgICAgICAgcmV0dXJu
IHRyYW5zaXRpb247CiAgICAgfQogICAgIApAQCAtNTAwLDEwICs1MTEsMTAgQEAgU3RydWN0dXJl
KiBTdHJ1Y3R1cmU6OmFkZE5ld1Byb3BlcnR5VHJhbnNpdGlvbihWTSYgdm0sIFN0cnVjdHVyZSog
c3RydWN0dXJlLCBQcm8KICAgICAvLyBIb2xkaW5nIHRoZSBsb2NrIGVuc3VyZXMgdGhhdCB3ZSBl
aXRoZXIgZG8gdGhpcyBiZWZvcmUgdGhlIEdDIHN0YXJ0cyBzY2FubmluZyB0aGUgc3RydWN0dXJl
LCBpbgogICAgIC8vIHdoaWNoIGNhc2UgdGhlIEdDIHdpbGwgbm90IGJsb3cgdGhlIHRhYmxlIGF3
YXksIG9yIHdlIGRvIGl0IGFmdGVyIHRoZSBHQyBhbHJlYWR5IHJhbiBpbiB3aGljaAogICAgIC8v
IGNhc2UgYWxsIGlzIHdlbGwuICBJZiBpdCB3YXNuJ3QgZm9yIHRoZSBsb2NrLCB0aGUgR0Mgd291
bGQgaGF2ZSBUT0NUT1U6IGlmIGNvdWxkIHJlYWQKLSAgICAvLyBpc0FkZGluZ1Byb3BlcnR5Rm9y
VHJhbnNpdGlvbiBiZWZvcmUgd2Ugc2V0IGl0IHRvIHRydWUsIGFuZCB0aGVuIGJsb3cgdGhlIHRh
YmxlIGF3YXkgYWZ0ZXIuCisgICAgLy8gcHJvdGVjdFByb3BlcnR5VGFibGVXaGlsZVRyYW5zaXRp
b25pbmcgYmVmb3JlIHdlIHNldCBpdCB0byB0cnVlLCBhbmQgdGhlbiBibG93IHRoZSB0YWJsZSBh
d2F5IGFmdGVyLgogICAgIHsKICAgICAgICAgQ29uY3VycmVudEpTTG9ja2VyIGxvY2tlcih0cmFu
c2l0aW9uLT5tX2xvY2spOwotICAgICAgICB0cmFuc2l0aW9uLT5zZXRJc0FkZGluZ1Byb3BlcnR5
Rm9yVHJhbnNpdGlvbih0cnVlKTsKKyAgICAgICAgdHJhbnNpdGlvbi0+c2V0UHJvdGVjdFByb3Bl
cnR5VGFibGVXaGlsZVRyYW5zaXRpb25pbmcodHJ1ZSk7CiAgICAgfQogCiAgICAgdHJhbnNpdGlv
bi0+bV9ibG9iLnNldEluZGV4aW5nTW9kZUluY2x1ZGluZ0hpc3Rvcnkoc3RydWN0dXJlLT5pbmRl
eGluZ01vZGVJbmNsdWRpbmdIaXN0b3J5KCkgJiB+Q29weU9uV3JpdGUpOwpAQCAtNTE4LDEyICs1
MjksMTEgQEAgU3RydWN0dXJlKiBTdHJ1Y3R1cmU6OmFkZE5ld1Byb3BlcnR5VHJhbnNpdGlvbihW
TSYgdm0sIFN0cnVjdHVyZSogc3RydWN0dXJlLCBQcm8KICAgICAvLyBOb3cgdGhhdCBldmVyeXRo
aW5nIGlzIGZpbmUgd2l0aCB0aGUgbmV3IHN0cnVjdHVyZSdzIGJvb2trZWVwaW5nLCB0aGUgR0Mg
aXMgZnJlZSB0byBibG93IHRoZQogICAgIC8vIHRhYmxlIGF3YXkgaWYgaXQgd2FudHMuIFdlIGNh
biBub3cgcmVidWlsZCBpdCBmaW5lLgogICAgIFdURjo6c3RvcmVTdG9yZUZlbmNlKCk7Ci0gICAg
dHJhbnNpdGlvbi0+c2V0SXNBZGRpbmdQcm9wZXJ0eUZvclRyYW5zaXRpb24oZmFsc2UpOworICAg
IHRyYW5zaXRpb24tPnNldFByb3RlY3RQcm9wZXJ0eVRhYmxlV2hpbGVUcmFuc2l0aW9uaW5nKGZh
bHNlKTsKIAogICAgIGNoZWNrT2Zmc2V0KHRyYW5zaXRpb24tPnRyYW5zaXRpb25PZmZzZXQoKSwg
dHJhbnNpdGlvbi0+aW5saW5lQ2FwYWNpdHkoKSk7CiAgICAgewotICAgICAgICBDb25jdXJyZW50
SlNMb2NrZXIgbG9ja2VyKHN0cnVjdHVyZS0+bV9sb2NrKTsKLSAgICAgICAgRGVmZXJHQyBkZWZl
ckdDKHZtLmhlYXApOworICAgICAgICBHQ1NhZmVDb25jdXJyZW50SlNMb2NrZXIgbG9ja2VyKHN0
cnVjdHVyZS0+bV9sb2NrLCB2bS5oZWFwKTsKICAgICAgICAgc3RydWN0dXJlLT5tX3RyYW5zaXRp
b25UYWJsZS5hZGQodm0sIHRyYW5zaXRpb24pOwogICAgIH0KICAgICB0cmFuc2l0aW9uLT5jaGVj
a09mZnNldENvbnNpc3RlbmN5KCk7CkBAIC01MzEsMjcgKzU0MSw4NCBAQCBTdHJ1Y3R1cmUqIFN0
cnVjdHVyZTo6YWRkTmV3UHJvcGVydHlUcmFuc2l0aW9uKFZNJiB2bSwgU3RydWN0dXJlKiBzdHJ1
Y3R1cmUsIFBybwogICAgIHJldHVybiB0cmFuc2l0aW9uOwogfQogCi1TdHJ1Y3R1cmUqIFN0cnVj
dHVyZTo6cmVtb3ZlUHJvcGVydHlUcmFuc2l0aW9uKFZNJiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1
cmUsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIFByb3BlcnR5T2Zmc2V0JiBvZmZzZXQpCi17
Ci0gICAgLy8gTk9URTogVGhlcmUgYXJlIHNvbWUgZ29vZCByZWFzb25zIHdoeSB0aGlzIGdvZXMg
ZGlyZWN0bHkgdG8gdW5jYWNoZWFibGUgZGljdGlvbmFyeSByYXRoZXIgdGhhbgotICAgIC8vIGNh
Y2hpbmcgdGhlIHJlbW92YWwuIFdlIGNhbiBmaXggYWxsIG9mIHRoZXNlIHRoaW5ncywgYnV0IHdl
IG11c3QgcmVtZW1iZXIgdG8gZG8gc28sIGlmIHdlIGV2ZXIgdHJ5Ci0gICAgLy8gdG8gb3B0aW1p
emUgdGhpcyBjYXNlLgotICAgIC8vCi0gICAgLy8gLSBDYWNoZWQgdHJhbnNpdGlvbnMgdXN1YWxs
eSBzdGVhbCB0aGUgcHJvcGVydHkgdGFibGUsIGFuZCBhc3N1bWUgdGhhdCB0aGlzIGlzIHBvc3Np
YmxlIGJlY2F1c2UgdGhleQotICAgIC8vICAgY2FuIGp1c3QgcmVidWlsZCB0aGUgdGFibGUgYnkg
bG9va2luZyBhdCBwYXN0IHRyYW5zaXRpb25zLiBUaGF0IGNvZGUgYXNzdW1lcyB0aGF0IHRoZSB0
YWJsZSBvbmx5Ci0gICAgLy8gICBncmV3IGFuZCBuZXZlciBzaHJhbmsuIFRvIHN1cHBvcnQgcmVt
b3ZhbHMsIHdlJ2QgaGF2ZSB0byBjaGFuZ2UgdGhlIHByb3BlcnR5IHRhYmxlIG1hdGVyaWFsaXph
dGlvbgotICAgIC8vICAgY29kZSB0byBoYW5kbGUgZGVsZXRpb25zLiBBbHNvLCB3ZSBoYXZlIGxv
Z2ljIHRvIGdldCB0aGUgbGlzdCBvZiBwcm9wZXJ0aWVzIG9uIGEgc3RydWN0dXJlIHRoYXQKLSAg
ICAvLyAgIGxhY2tzIGEgcHJvcGVydHkgdGFibGUgYnkganVzdCBsb29raW5nIGJhY2sgdGhyb3Vn
aCB0aGUgc2V0IG9mIHRyYW5zaXRpb25zIHNpbmNlIHRoZSBsYXN0Ci0gICAgLy8gICBzdHJ1Y3R1
cmUgdGhhdCBoYWQgYSBwaW5uZWQgdGFibGUuIFRoYXQgbG9naWMgd291bGQgYWxzbyBoYXZlIHRv
IGJlIGNoYW5nZWQgdG8gaGFuZGxlIGNhY2hlZAotICAgIC8vICAgcmVtb3ZhbHMuCi0gICAgLy8K
K1N0cnVjdHVyZSogU3RydWN0dXJlOjpyZW1vdmVQcm9wZXJ0eVRyYW5zaXRpb24oVk0mIHZtLCBT
dHJ1Y3R1cmUqIHN0cnVjdHVyZSwgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwgUHJvcGVydHlP
ZmZzZXQmIG9mZnNldCwgRGVmZXJyZWRTdHJ1Y3R1cmVUcmFuc2l0aW9uV2F0Y2hwb2ludEZpcmUq
IGRlZmVycmVkKQoreworICAgIFN0cnVjdHVyZSogbmV3U3RydWN0dXJlID0gcmVtb3ZlUHJvcGVy
dHlUcmFuc2l0aW9uRnJvbUV4aXN0aW5nU3RydWN0dXJlKAorICAgICAgICB2bSwgc3RydWN0dXJl
LCBwcm9wZXJ0eU5hbWUsIG9mZnNldCwgZGVmZXJyZWQpOworICAgIGlmIChuZXdTdHJ1Y3R1cmUp
CisgICAgICAgIHJldHVybiBuZXdTdHJ1Y3R1cmU7CisKKyAgICByZXR1cm4gcmVtb3ZlTmV3UHJv
cGVydHlUcmFuc2l0aW9uKAorICAgICAgICB2bSwgc3RydWN0dXJlLCBwcm9wZXJ0eU5hbWUsIG9m
ZnNldCwgZGVmZXJyZWQpOworfQorCitTdHJ1Y3R1cmUqIFN0cnVjdHVyZTo6cmVtb3ZlUHJvcGVy
dHlUcmFuc2l0aW9uRnJvbUV4aXN0aW5nU3RydWN0dXJlKFZNJiB2bSwgU3RydWN0dXJlKiBzdHJ1
Y3R1cmUsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIFByb3BlcnR5T2Zmc2V0JiBvZmZzZXQs
IERlZmVycmVkU3RydWN0dXJlVHJhbnNpdGlvbldhdGNocG9pbnRGaXJlKikKK3sKKyAgICBBU1NF
UlQoIWlzQ29tcGlsYXRpb25UaHJlYWQoKSk7CiAgICAgQVNTRVJUKCFzdHJ1Y3R1cmUtPmlzVW5j
YWNoZWFibGVEaWN0aW9uYXJ5KCkpOworICAgIEFTU0VSVChzdHJ1Y3R1cmUtPmlzT2JqZWN0KCkp
OworCisgICAgdW5zaWduZWQgYXR0cmlidXRlczsKKyAgICBzdHJ1Y3R1cmUtPmdldCh2bSwgcHJv
cGVydHlOYW1lLCBhdHRyaWJ1dGVzKTsKKworICAgIGlmIChTdHJ1Y3R1cmUqIGV4aXN0aW5nVHJh
bnNpdGlvbiA9IHN0cnVjdHVyZS0+bV90cmFuc2l0aW9uVGFibGUuZ2V0KHByb3BlcnR5TmFtZS51
aWQoKSwgYXR0cmlidXRlcywgZmFsc2UpKSB7CisgICAgICAgIHZhbGlkYXRlT2Zmc2V0KGV4aXN0
aW5nVHJhbnNpdGlvbi0+dHJhbnNpdGlvbk9mZnNldCgpLCBleGlzdGluZ1RyYW5zaXRpb24tPmlu
bGluZUNhcGFjaXR5KCkpOworICAgICAgICBvZmZzZXQgPSBleGlzdGluZ1RyYW5zaXRpb24tPnRy
YW5zaXRpb25PZmZzZXQoKTsKKyAgICAgICAgcmV0dXJuIGV4aXN0aW5nVHJhbnNpdGlvbjsKKyAg
ICB9CiAKLSAgICBTdHJ1Y3R1cmUqIHRyYW5zaXRpb24gPSB0b1VuY2FjaGVhYmxlRGljdGlvbmFy
eVRyYW5zaXRpb24odm0sIHN0cnVjdHVyZSk7CisgICAgcmV0dXJuIG51bGxwdHI7Cit9CiAKLSAg
ICBvZmZzZXQgPSB0cmFuc2l0aW9uLT5yZW1vdmUocHJvcGVydHlOYW1lKTsKK1N0cnVjdHVyZSog
U3RydWN0dXJlOjpyZW1vdmVOZXdQcm9wZXJ0eVRyYW5zaXRpb24oVk0mIHZtLCBTdHJ1Y3R1cmUq
IHN0cnVjdHVyZSwgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwgUHJvcGVydHlPZmZzZXQmIG9m
ZnNldCwgRGVmZXJyZWRTdHJ1Y3R1cmVUcmFuc2l0aW9uV2F0Y2hwb2ludEZpcmUqIGRlZmVycmVk
KQoreworICAgIEFTU0VSVCghc3RydWN0dXJlLT5pc1VuY2FjaGVhYmxlRGljdGlvbmFyeSgpKTsK
KyAgICBBU1NFUlQoc3RydWN0dXJlLT5pc09iamVjdCgpKTsKKyAgICBBU1NFUlQoIVN0cnVjdHVy
ZTo6cmVtb3ZlUHJvcGVydHlUcmFuc2l0aW9uRnJvbUV4aXN0aW5nU3RydWN0dXJlKHZtLCBzdHJ1
Y3R1cmUsIHByb3BlcnR5TmFtZSwgb2Zmc2V0LCBkZWZlcnJlZCkpOworCisgICAgaW50IHRyYW5z
aXRpb25Db3VudCA9IDA7CisgICAgZm9yIChhdXRvKiBzID0gc3RydWN0dXJlOyBzOyBzID0gcy0+
cHJldmlvdXNJRCgpKQorICAgICAgICArK3RyYW5zaXRpb25Db3VudDsKIAorICAgIGlmICh0cmFu
c2l0aW9uQ291bnQgPiBzX21heFRyYW5zaXRpb25MZW5ndGgpIHsKKyAgICAgICAgQVNTRVJUKCFp
c0NvcHlPbldyaXRlKHN0cnVjdHVyZS0+aW5kZXhpbmdNb2RlKCkpKTsKKyAgICAgICAgU3RydWN0
dXJlKiB0cmFuc2l0aW9uID0gdG9VbmNhY2hlYWJsZURpY3Rpb25hcnlUcmFuc2l0aW9uKHZtLCBz
dHJ1Y3R1cmUsIGRlZmVycmVkKTsKKyAgICAgICAgQVNTRVJUKHN0cnVjdHVyZSAhPSB0cmFuc2l0
aW9uKTsKKyAgICAgICAgb2Zmc2V0ID0gdHJhbnNpdGlvbi0+cmVtb3ZlKHZtLCBwcm9wZXJ0eU5h
bWUpOworICAgICAgICByZXR1cm4gdHJhbnNpdGlvbjsKKyAgICB9CisKKyAgICBTdHJ1Y3R1cmUq
IHRyYW5zaXRpb24gPSBjcmVhdGUodm0sIHN0cnVjdHVyZSwgZGVmZXJyZWQpOworICAgIHRyYW5z
aXRpb24tPm1fY2FjaGVkUHJvdG90eXBlQ2hhaW4uc2V0TWF5QmVOdWxsKHZtLCB0cmFuc2l0aW9u
LCBzdHJ1Y3R1cmUtPm1fY2FjaGVkUHJvdG90eXBlQ2hhaW4uZ2V0KCkpOworCisgICAgLy8gV2hp
bGUgd2UgYXJlIGRlbGV0aW5nIHRoZSBwcm9wZXJ0eSwgd2UgbmVlZCB0byBtYWtlIHN1cmUgdGhl
IHRhYmxlIGlzIG5vdCBjbGVhcmVkLgorICAgIHsKKyAgICAgICAgQ29uY3VycmVudEpTTG9ja2Vy
IGxvY2tlcih0cmFuc2l0aW9uLT5tX2xvY2spOworICAgICAgICB0cmFuc2l0aW9uLT5zZXRQcm90
ZWN0UHJvcGVydHlUYWJsZVdoaWxlVHJhbnNpdGlvbmluZyh0cnVlKTsKKyAgICB9CisKKyAgICB0
cmFuc2l0aW9uLT5tX2Jsb2Iuc2V0SW5kZXhpbmdNb2RlSW5jbHVkaW5nSGlzdG9yeShzdHJ1Y3R1
cmUtPmluZGV4aW5nTW9kZUluY2x1ZGluZ0hpc3RvcnkoKSAmIH5Db3B5T25Xcml0ZSk7CisgICAg
dHJhbnNpdGlvbi0+bV90cmFuc2l0aW9uUHJvcGVydHlOYW1lID0gcHJvcGVydHlOYW1lLnVpZCgp
OworICAgIHRyYW5zaXRpb24tPnNldFByb3BlcnR5VGFibGUodm0sIHN0cnVjdHVyZS0+dGFrZVBy
b3BlcnR5VGFibGVPckNsb25lSWZQaW5uZWQodm0pKTsKKyAgICB0cmFuc2l0aW9uLT5zZXRNYXhP
ZmZzZXQodm0sIHN0cnVjdHVyZS0+bWF4T2Zmc2V0KCkpOworICAgIHRyYW5zaXRpb24tPnNldElz
UHJvcGVydHlEZWxldGlvblRyYW5zaXRpb24odHJ1ZSk7CisKKyAgICBvZmZzZXQgPSB0cmFuc2l0
aW9uLT5yZW1vdmUodm0sIHByb3BlcnR5TmFtZSk7CisgICAgQVNTRVJUKG9mZnNldCAhPSBpbnZh
bGlkT2Zmc2V0KTsKKyAgICB0cmFuc2l0aW9uLT5zZXRUcmFuc2l0aW9uT2Zmc2V0KHZtLCBvZmZz
ZXQpOworCisgICAgLy8gTm93IHRoYXQgZXZlcnl0aGluZyBpcyBmaW5lIHdpdGggdGhlIG5ldyBz
dHJ1Y3R1cmUncyBib29ra2VlcGluZywgdGhlIEdDIGlzIGZyZWUgdG8gYmxvdyB0aGUKKyAgICAv
LyB0YWJsZSBhd2F5IGlmIGl0IHdhbnRzLiBXZSBjYW4gbm93IHJlYnVpbGQgaXQgZmluZS4KKyAg
ICBXVEY6OnN0b3JlU3RvcmVGZW5jZSgpOworICAgIHRyYW5zaXRpb24tPnNldFByb3RlY3RQcm9w
ZXJ0eVRhYmxlV2hpbGVUcmFuc2l0aW9uaW5nKGZhbHNlKTsKKworICAgIGNoZWNrT2Zmc2V0KHRy
YW5zaXRpb24tPnRyYW5zaXRpb25PZmZzZXQoKSwgdHJhbnNpdGlvbi0+aW5saW5lQ2FwYWNpdHko
KSk7CisgICAgeworICAgICAgICBHQ1NhZmVDb25jdXJyZW50SlNMb2NrZXIgbG9ja2VyKHN0cnVj
dHVyZS0+bV9sb2NrLCB2bS5oZWFwKTsKKyAgICAgICAgc3RydWN0dXJlLT5tX3RyYW5zaXRpb25U
YWJsZS5hZGQodm0sIHRyYW5zaXRpb24pOworICAgIH0KICAgICB0cmFuc2l0aW9uLT5jaGVja09m
ZnNldENvbnNpc3RlbmN5KCk7CisgICAgc3RydWN0dXJlLT5jaGVja09mZnNldENvbnNpc3RlbmN5
KCk7CiAgICAgcmV0dXJuIHRyYW5zaXRpb247CiB9CiAKQEAgLTYxNCw5ICs2ODEsOSBAQCBTdHJ1
Y3R1cmUqIFN0cnVjdHVyZTo6dG9DYWNoZWFibGVEaWN0aW9uYXJ5VHJhbnNpdGlvbihWTSYgdm0s
IFN0cnVjdHVyZSogc3RydWN0dQogICAgIHJldHVybiB0b0RpY3Rpb25hcnlUcmFuc2l0aW9uKHZt
LCBzdHJ1Y3R1cmUsIENhY2hlZERpY3Rpb25hcnlLaW5kLCBkZWZlcnJlZCk7CiB9CiAKLVN0cnVj
dHVyZSogU3RydWN0dXJlOjp0b1VuY2FjaGVhYmxlRGljdGlvbmFyeVRyYW5zaXRpb24oVk0mIHZt
LCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKK1N0cnVjdHVyZSogU3RydWN0dXJlOjp0b1VuY2FjaGVh
YmxlRGljdGlvbmFyeVRyYW5zaXRpb24oVk0mIHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgRGVm
ZXJyZWRTdHJ1Y3R1cmVUcmFuc2l0aW9uV2F0Y2hwb2ludEZpcmUqIGRlZmVycmVkKQogewotICAg
IHJldHVybiB0b0RpY3Rpb25hcnlUcmFuc2l0aW9uKHZtLCBzdHJ1Y3R1cmUsIFVuY2FjaGVkRGlj
dGlvbmFyeUtpbmQpOworICAgIHJldHVybiB0b0RpY3Rpb25hcnlUcmFuc2l0aW9uKHZtLCBzdHJ1
Y3R1cmUsIFVuY2FjaGVkRGljdGlvbmFyeUtpbmQsIGRlZmVycmVkKTsKIH0KIAogU3RydWN0dXJl
KiBTdHJ1Y3R1cmU6OnNlYWxUcmFuc2l0aW9uKFZNJiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUp
CkBAIC05NzcsOSArMTA0NCwxMSBAQCBQcm9wZXJ0eU9mZnNldCBTdHJ1Y3R1cmU6OmFkZChWTSYg
dm0sIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIHVuc2lnbmVkIGF0dHJpYgogICAgICAgICB9
KTsKIH0KIAotUHJvcGVydHlPZmZzZXQgU3RydWN0dXJlOjpyZW1vdmUoUHJvcGVydHlOYW1lIHBy
b3BlcnR5TmFtZSkKK1Byb3BlcnR5T2Zmc2V0IFN0cnVjdHVyZTo6cmVtb3ZlKFZNJiB2bSwgUHJv
cGVydHlOYW1lIHByb3BlcnR5TmFtZSkKIHsKLSAgICByZXR1cm4gcmVtb3ZlKHByb3BlcnR5TmFt
ZSwgW10gKGNvbnN0IENvbmN1cnJlbnRKU0xvY2tlciYsIFByb3BlcnR5T2Zmc2V0KSB7IH0pOwor
ICAgIHJldHVybiByZW1vdmU8U2hvdWxkUGluOjpObz4odm0sIHByb3BlcnR5TmFtZSwgW3RoaXMs
ICZ2bV0gKGNvbnN0IEdDU2FmZUNvbmN1cnJlbnRKU0xvY2tlciYsIFByb3BlcnR5T2Zmc2V0LCBQ
cm9wZXJ0eU9mZnNldCBuZXdNYXhPZmZzZXQpIHsKKyAgICAgICAgc2V0TWF4T2Zmc2V0KHZtLCBu
ZXdNYXhPZmZzZXQpOworICAgIH0pOwogfQogCiB2b2lkIFN0cnVjdHVyZTo6Z2V0UHJvcGVydHlO
YW1lc0Zyb21TdHJ1Y3R1cmUoVk0mIHZtLCBQcm9wZXJ0eU5hbWVBcnJheSYgcHJvcGVydHlOYW1l
cywgRW51bWVyYXRpb25Nb2RlIG1vZGUpCkBAIC0xMDU5LDcgKzExMjgsNyBAQCB2b2lkIFN0cnVj
dHVyZTo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQog
ICAgIH0KICAgICB2aXNpdG9yLmFwcGVuZCh0aGlzT2JqZWN0LT5tX3ByZXZpb3VzT3JSYXJlRGF0
YSk7CiAKLSAgICBpZiAodGhpc09iamVjdC0+aXNQaW5uZWRQcm9wZXJ0eVRhYmxlKCkgfHwgdGhp
c09iamVjdC0+aXNBZGRpbmdQcm9wZXJ0eUZvclRyYW5zaXRpb24oKSkgeworICAgIGlmICh0aGlz
T2JqZWN0LT5pc1Bpbm5lZFByb3BlcnR5VGFibGUoKSB8fCB0aGlzT2JqZWN0LT5wcm90ZWN0UHJv
cGVydHlUYWJsZVdoaWxlVHJhbnNpdGlvbmluZygpKSB7CiAgICAgICAgIC8vIE5PVEU6IFRoaXMg
Y2FuIGludGVybGVhdmUgaW4gcGluKCksIGluIHdoaWNoIGNhc2UgaXQgbWF5IHNlZSBhIG51bGwg
cHJvcGVydHkgdGFibGUuCiAgICAgICAgIC8vIFRoYXQncyBmaW5lLCBiZWNhdXNlIHRoZW4gdGhl
IGJhcnJpZXIgd2lsbCBmaXJlIGFuZCB3ZSB3aWxsIHNjYW4gdGhpcyBhZ2Fpbi4KICAgICAgICAg
dmlzaXRvci5hcHBlbmQodGhpc09iamVjdC0+bV9wcm9wZXJ0eVRhYmxlVW5zYWZlKTsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZS5oIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlLmgKaW5kZXggMzhkYzFkMzlmMWU4Njdk
MDRmMTE1M2ZlNDQ3ZmU0YzcyMGNkNTYzYi4uZmYzYmE1Njg2Y2UyNzYxMDJmMDk4MWNhNTAzOTI4
MzNjYTAyZDExOSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3Ry
dWN0dXJlLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlLmgK
QEAgLTE4NywxMSArMTg3LDEzIEBAIHB1YmxpYzoKICAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0
aWMgU3RydWN0dXJlKiBhZGROZXdQcm9wZXJ0eVRyYW5zaXRpb24oVk0mLCBTdHJ1Y3R1cmUqLCBQ
cm9wZXJ0eU5hbWUsIHVuc2lnbmVkIGF0dHJpYnV0ZXMsIFByb3BlcnR5T2Zmc2V0JiwgUHV0UHJv
cGVydHlTbG90OjpDb250ZXh0ID0gUHV0UHJvcGVydHlTbG90OjpVbmtub3duQ29udGV4dCwgRGVm
ZXJyZWRTdHJ1Y3R1cmVUcmFuc2l0aW9uV2F0Y2hwb2ludEZpcmUqID0gbnVsbHB0cik7CiAgICAg
c3RhdGljIFN0cnVjdHVyZSogYWRkUHJvcGVydHlUcmFuc2l0aW9uVG9FeGlzdGluZ1N0cnVjdHVy
ZUNvbmN1cnJlbnRseShTdHJ1Y3R1cmUqLCBVbmlxdWVkU3RyaW5nSW1wbCogdWlkLCB1bnNpZ25l
ZCBhdHRyaWJ1dGVzLCBQcm9wZXJ0eU9mZnNldCYpOwogICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0
YXRpYyBTdHJ1Y3R1cmUqIGFkZFByb3BlcnR5VHJhbnNpdGlvblRvRXhpc3RpbmdTdHJ1Y3R1cmUo
U3RydWN0dXJlKiwgUHJvcGVydHlOYW1lLCB1bnNpZ25lZCBhdHRyaWJ1dGVzLCBQcm9wZXJ0eU9m
ZnNldCYpOwotICAgIHN0YXRpYyBTdHJ1Y3R1cmUqIHJlbW92ZVByb3BlcnR5VHJhbnNpdGlvbihW
TSYsIFN0cnVjdHVyZSosIFByb3BlcnR5TmFtZSwgUHJvcGVydHlPZmZzZXQmKTsKKyAgICBzdGF0
aWMgU3RydWN0dXJlKiByZW1vdmVOZXdQcm9wZXJ0eVRyYW5zaXRpb24oVk0mLCBTdHJ1Y3R1cmUq
LCBQcm9wZXJ0eU5hbWUsIFByb3BlcnR5T2Zmc2V0JiwgRGVmZXJyZWRTdHJ1Y3R1cmVUcmFuc2l0
aW9uV2F0Y2hwb2ludEZpcmUqID0gbnVsbHB0cik7CisgICAgc3RhdGljIFN0cnVjdHVyZSogcmVt
b3ZlUHJvcGVydHlUcmFuc2l0aW9uKFZNJiwgU3RydWN0dXJlKiwgUHJvcGVydHlOYW1lLCBQcm9w
ZXJ0eU9mZnNldCYsIERlZmVycmVkU3RydWN0dXJlVHJhbnNpdGlvbldhdGNocG9pbnRGaXJlKiA9
IG51bGxwdHIpOworICAgIHN0YXRpYyBTdHJ1Y3R1cmUqIHJlbW92ZVByb3BlcnR5VHJhbnNpdGlv
bkZyb21FeGlzdGluZ1N0cnVjdHVyZShWTSYsIFN0cnVjdHVyZSosIFByb3BlcnR5TmFtZSwgUHJv
cGVydHlPZmZzZXQmLCBEZWZlcnJlZFN0cnVjdHVyZVRyYW5zaXRpb25XYXRjaHBvaW50RmlyZSog
PSBudWxscHRyKTsKICAgICBzdGF0aWMgU3RydWN0dXJlKiBjaGFuZ2VQcm90b3R5cGVUcmFuc2l0
aW9uKFZNJiwgU3RydWN0dXJlKiwgSlNWYWx1ZSBwcm90b3R5cGUsIERlZmVycmVkU3RydWN0dXJl
VHJhbnNpdGlvbldhdGNocG9pbnRGaXJlJik7CiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGlj
IFN0cnVjdHVyZSogYXR0cmlidXRlQ2hhbmdlVHJhbnNpdGlvbihWTSYsIFN0cnVjdHVyZSosIFBy
b3BlcnR5TmFtZSwgdW5zaWduZWQgYXR0cmlidXRlcyk7CiAgICAgSlNfRVhQT1JUX1BSSVZBVEUg
c3RhdGljIFN0cnVjdHVyZSogdG9DYWNoZWFibGVEaWN0aW9uYXJ5VHJhbnNpdGlvbihWTSYsIFN0
cnVjdHVyZSosIERlZmVycmVkU3RydWN0dXJlVHJhbnNpdGlvbldhdGNocG9pbnRGaXJlKiA9IG51
bGxwdHIpOwotICAgIHN0YXRpYyBTdHJ1Y3R1cmUqIHRvVW5jYWNoZWFibGVEaWN0aW9uYXJ5VHJh
bnNpdGlvbihWTSYsIFN0cnVjdHVyZSopOworICAgIHN0YXRpYyBTdHJ1Y3R1cmUqIHRvVW5jYWNo
ZWFibGVEaWN0aW9uYXJ5VHJhbnNpdGlvbihWTSYsIFN0cnVjdHVyZSosIERlZmVycmVkU3RydWN0
dXJlVHJhbnNpdGlvbldhdGNocG9pbnRGaXJlKiA9IG51bGxwdHIpOwogICAgIEpTX0VYUE9SVF9Q
UklWQVRFIHN0YXRpYyBTdHJ1Y3R1cmUqIHNlYWxUcmFuc2l0aW9uKFZNJiwgU3RydWN0dXJlKik7
CiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIFN0cnVjdHVyZSogZnJlZXplVHJhbnNpdGlv
bihWTSYsIFN0cnVjdHVyZSopOwogICAgIHN0YXRpYyBTdHJ1Y3R1cmUqIHByZXZlbnRFeHRlbnNp
b25zVHJhbnNpdGlvbihWTSYsIFN0cnVjdHVyZSopOwpAQCAtNDQwLDEwICs0NDIsNiBAQCBwdWJs
aWM6CiAgICAgewogICAgICAgICByZXR1cm4gc3RkOjptaW48dW5zaWduZWQ+KG1heE9mZnNldCgp
ICsgMSwgbV9pbmxpbmVDYXBhY2l0eSk7CiAgICAgfQotICAgIHVuc2lnbmVkIHRvdGFsU3RvcmFn
ZVNpemUoKSBjb25zdAotICAgIHsKLSAgICAgICAgcmV0dXJuIG51bWJlck9mU2xvdHNGb3JNYXhP
ZmZzZXQobWF4T2Zmc2V0KCksIG1faW5saW5lQ2FwYWNpdHkpOwotICAgIH0KICAgICB1bnNpZ25l
ZCB0b3RhbFN0b3JhZ2VDYXBhY2l0eSgpIGNvbnN0CiAgICAgewogICAgICAgICBBU1NFUlQoc3Ry
dWN0dXJlKCktPmNsYXNzSW5mbygpID09IGluZm8oKSk7CkBAIC02OTEsOCArNjg5LDkgQEAgcHVi
bGljOgogICAgIERFRklORV9CSVRGSUVMRChib29sLCBkaWRXYXRjaEludGVybmFsUHJvcGVydGll
cywgRGlkV2F0Y2hJbnRlcm5hbFByb3BlcnRpZXMsIDEsIDI1KTsKICAgICBERUZJTkVfQklURklF
TEQoYm9vbCwgdHJhbnNpdGlvbldhdGNocG9pbnRJc0xpa2VseVRvQmVGaXJlZCwgVHJhbnNpdGlv
bldhdGNocG9pbnRJc0xpa2VseVRvQmVGaXJlZCwgMSwgMjYpOwogICAgIERFRklORV9CSVRGSUVM
RChib29sLCBoYXNCZWVuRGljdGlvbmFyeSwgSGFzQmVlbkRpY3Rpb25hcnksIDEsIDI3KTsKLSAg
ICBERUZJTkVfQklURklFTEQoYm9vbCwgaXNBZGRpbmdQcm9wZXJ0eUZvclRyYW5zaXRpb24sIElz
QWRkaW5nUHJvcGVydHlGb3JUcmFuc2l0aW9uLCAxLCAyOCk7CisgICAgREVGSU5FX0JJVEZJRUxE
KGJvb2wsIHByb3RlY3RQcm9wZXJ0eVRhYmxlV2hpbGVUcmFuc2l0aW9uaW5nLCBQcm90ZWN0UHJv
cGVydHlUYWJsZVdoaWxlVHJhbnNpdGlvbmluZywgMSwgMjgpOwogICAgIERFRklORV9CSVRGSUVM
RChib29sLCBoYXNVbmRlcnNjb3JlUHJvdG9Qcm9wZXJ0eUV4Y2x1ZGluZ09yaWdpbmFsUHJvdG8s
IEhhc1VuZGVyc2NvcmVQcm90b1Byb3BlcnR5RXhjbHVkaW5nT3JpZ2luYWxQcm90bywgMSwgMjkp
OworICAgIERFRklORV9CSVRGSUVMRChib29sLCBpc1Byb3BlcnR5RGVsZXRpb25UcmFuc2l0aW9u
LCBJc1Byb3BlcnR5RGVsZXRpb25UcmFuc2l0aW9uLCAxLCAzMCk7CiAKIHByaXZhdGU6CiAgICAg
ZnJpZW5kIGNsYXNzIExMSW50T2Zmc2V0c0V4dHJhY3RvcjsKQEAgLTcxNyw5ICs3MTYsOSBAQCBw
cml2YXRlOgogICAgIHRlbXBsYXRlPFNob3VsZFBpbiwgdHlwZW5hbWUgRnVuYz4KICAgICBQcm9w
ZXJ0eU9mZnNldCBhZGQoVk0mLCBQcm9wZXJ0eU5hbWUsIHVuc2lnbmVkIGF0dHJpYnV0ZXMsIGNv
bnN0IEZ1bmMmKTsKICAgICBQcm9wZXJ0eU9mZnNldCBhZGQoVk0mLCBQcm9wZXJ0eU5hbWUsIHVu
c2lnbmVkIGF0dHJpYnV0ZXMpOwotICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmM+Ci0gICAgUHJv
cGVydHlPZmZzZXQgcmVtb3ZlKFByb3BlcnR5TmFtZSwgY29uc3QgRnVuYyYpOwotICAgIFByb3Bl
cnR5T2Zmc2V0IHJlbW92ZShQcm9wZXJ0eU5hbWUpOworICAgIHRlbXBsYXRlPFNob3VsZFBpbiwg
dHlwZW5hbWUgRnVuYz4KKyAgICBQcm9wZXJ0eU9mZnNldCByZW1vdmUoVk0mLCBQcm9wZXJ0eU5h
bWUsIGNvbnN0IEZ1bmMmKTsKKyAgICBQcm9wZXJ0eU9mZnNldCByZW1vdmUoVk0mLCBQcm9wZXJ0
eU5hbWUpOwogCiAgICAgdm9pZCBjaGVja0NvbnNpc3RlbmN5KCk7CiAKQEAgLTgzNCw2ICs4MzMs
NyBAQCBwcml2YXRlOgogICAgIFRpbnlCbG9vbUZpbHRlciBtX3NlZW5Qcm9wZXJ0aWVzOwogCiAg
ICAgZnJpZW5kIGNsYXNzIFZNSW5zcGVjdG9yOworICAgIGZyaWVuZCBjbGFzcyBKU0RvbGxhclZN
SGVscGVyOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgSlNDCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmVJbmxpbmVzLmggYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9TdHJ1Y3R1cmVJbmxpbmVzLmgKaW5kZXggMWE0ZjIwMjQ2YTI3NzljMjlm
Yjk2Y2UwMDUwMGI1NGJiNDZlYjU3MS4uMzVkMzgwMmMyNWJhNWNkMTJlMTEyOTU1NTk2YmZlNWUw
MzY1NTUyZiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0
dXJlSW5saW5lcy5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVy
ZUlubGluZXMuaApAQCAtMTYzLDI4ICsxNjMsNDAgQEAgdGVtcGxhdGU8dHlwZW5hbWUgRnVuY3Rv
cj4KIHZvaWQgU3RydWN0dXJlOjpmb3JFYWNoUHJvcGVydHlDb25jdXJyZW50bHkoY29uc3QgRnVu
Y3RvciYgZnVuY3RvcikKIHsKICAgICBWZWN0b3I8U3RydWN0dXJlKiwgOD4gc3RydWN0dXJlczsK
LSAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZTsKKyAgICBTdHJ1Y3R1cmUqIHRhYmxlU3RydWN0dXJl
OwogICAgIFByb3BlcnR5VGFibGUqIHRhYmxlOwogICAgIAotICAgIGZpbmRTdHJ1Y3R1cmVzQW5k
TWFwRm9yTWF0ZXJpYWxpemF0aW9uKHN0cnVjdHVyZXMsIHN0cnVjdHVyZSwgdGFibGUpOworICAg
IGZpbmRTdHJ1Y3R1cmVzQW5kTWFwRm9yTWF0ZXJpYWxpemF0aW9uKHN0cnVjdHVyZXMsIHRhYmxl
U3RydWN0dXJlLCB0YWJsZSk7CisKKyAgICBIYXNoU2V0PFVuaXF1ZWRTdHJpbmdJbXBsKj4gc2Vl
blByb3BlcnRpZXM7CisKKyAgICBmb3IgKGF1dG8qIHN0cnVjdHVyZSA6IHN0cnVjdHVyZXMpIHsK
KyAgICAgICAgaWYgKCFzdHJ1Y3R1cmUtPm1fdHJhbnNpdGlvblByb3BlcnR5TmFtZSB8fCBzZWVu
UHJvcGVydGllcy5jb250YWlucyhzdHJ1Y3R1cmUtPm1fdHJhbnNpdGlvblByb3BlcnR5TmFtZS5n
ZXQoKSkpCisgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICBzZWVuUHJvcGVydGllcy5h
ZGQoc3RydWN0dXJlLT5tX3RyYW5zaXRpb25Qcm9wZXJ0eU5hbWUuZ2V0KCkpOworCisgICAgICAg
IGlmIChzdHJ1Y3R1cmUtPmlzUHJvcGVydHlEZWxldGlvblRyYW5zaXRpb24oKSkKKyAgICAgICAg
ICAgIGNvbnRpbnVlOworCisgICAgICAgIGlmICghZnVuY3RvcihQcm9wZXJ0eU1hcEVudHJ5KHN0
cnVjdHVyZS0+bV90cmFuc2l0aW9uUHJvcGVydHlOYW1lLmdldCgpLCBzdHJ1Y3R1cmUtPnRyYW5z
aXRpb25PZmZzZXQoKSwgc3RydWN0dXJlLT50cmFuc2l0aW9uUHJvcGVydHlBdHRyaWJ1dGVzKCkp
KSkgeworICAgICAgICAgICAgaWYgKHRhYmxlKQorICAgICAgICAgICAgICAgIHRhYmxlU3RydWN0
dXJlLT5tX2xvY2sudW5sb2NrKCk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAg
ICB9CiAgICAgCiAgICAgaWYgKHRhYmxlKSB7CiAgICAgICAgIGZvciAoYXV0byYgZW50cnkgOiAq
dGFibGUpIHsKKyAgICAgICAgICAgIGlmIChzZWVuUHJvcGVydGllcy5jb250YWlucyhlbnRyeS5r
ZXkpKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworCiAgICAgICAgICAgICBpZiAoIWZ1bmN0
b3IoZW50cnkpKSB7Ci0gICAgICAgICAgICAgICAgc3RydWN0dXJlLT5tX2xvY2sudW5sb2NrKCk7
CisgICAgICAgICAgICAgICAgdGFibGVTdHJ1Y3R1cmUtPm1fbG9jay51bmxvY2soKTsKICAgICAg
ICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KLSAgICAgICAgc3Ry
dWN0dXJlLT5tX2xvY2sudW5sb2NrKCk7Ci0gICAgfQotICAgIAotICAgIGZvciAodW5zaWduZWQg
aSA9IHN0cnVjdHVyZXMuc2l6ZSgpOyBpLS07KSB7Ci0gICAgICAgIHN0cnVjdHVyZSA9IHN0cnVj
dHVyZXNbaV07Ci0gICAgICAgIGlmICghc3RydWN0dXJlLT5tX3RyYW5zaXRpb25Qcm9wZXJ0eU5h
bWUpCi0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgCi0gICAgICAgIGlmICghZnVuY3Rv
cihQcm9wZXJ0eU1hcEVudHJ5KHN0cnVjdHVyZS0+bV90cmFuc2l0aW9uUHJvcGVydHlOYW1lLmdl
dCgpLCBzdHJ1Y3R1cmUtPnRyYW5zaXRpb25PZmZzZXQoKSwgc3RydWN0dXJlLT50cmFuc2l0aW9u
UHJvcGVydHlBdHRyaWJ1dGVzKCkpKSkKLSAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgdGFi
bGVTdHJ1Y3R1cmUtPm1fbG9jay51bmxvY2soKTsKICAgICB9CiB9CiAKQEAgLTQ1MSwxMSArNDYz
LDEyIEBAIGlubGluZSBQcm9wZXJ0eU9mZnNldCBTdHJ1Y3R1cmU6OmFkZChWTSYgdm0sIFByb3Bl
cnR5TmFtZSBwcm9wZXJ0eU5hbWUsIHVuc2lnbmVkCiAgICAgUHJvcGVydHlPZmZzZXQgbmV3T2Zm
c2V0ID0gdGFibGUtPm5leHRPZmZzZXQobV9pbmxpbmVDYXBhY2l0eSk7CiAKICAgICBtX3Byb3Bl
cnR5SGFzaCA9IG1fcHJvcGVydHlIYXNoIF4gcmVwLT5leGlzdGluZ1N5bWJvbEF3YXJlSGFzaCgp
OwotCiAgICAgbV9zZWVuUHJvcGVydGllcy5hZGQoYml0d2lzZV9jYXN0PHVpbnRwdHJfdD4ocmVw
KSk7Ci0gICAgCi0gICAgUHJvcGVydHlPZmZzZXQgbmV3TWF4T2Zmc2V0ID0gbWF4T2Zmc2V0KCk7
Ci0gICAgdGFibGUtPmFkZChQcm9wZXJ0eU1hcEVudHJ5KHJlcCwgbmV3T2Zmc2V0LCBhdHRyaWJ1
dGVzKSwgbmV3TWF4T2Zmc2V0LCBQcm9wZXJ0eVRhYmxlOjpQcm9wZXJ0eU9mZnNldE1heUNoYW5n
ZSk7CisKKyAgICBhdXRvIHJlc3VsdCA9IHRhYmxlLT5hZGQoUHJvcGVydHlNYXBFbnRyeShyZXAs
IG5ld09mZnNldCwgYXR0cmlidXRlcykpOworICAgIEFTU0VSVF9VTlVTRUQocmVzdWx0LCByZXN1
bHQuc2Vjb25kKTsKKyAgICBBU1NFUlRfVU5VU0VEKHJlc3VsdCwgcmVzdWx0LmZpcnN0LmZpcnN0
LT5vZmZzZXQgPT0gbmV3T2Zmc2V0KTsKKyAgICBhdXRvIG5ld01heE9mZnNldCA9IHN0ZDo6bWF4
KG5ld09mZnNldCwgbWF4T2Zmc2V0KCkpOwogICAgIAogICAgIGZ1bmMobG9ja2VyLCBuZXdPZmZz
ZXQsIG5ld01heE9mZnNldCk7CiAgICAgCkBAIC00NjUsMjEgKzQ3OCwyNiBAQCBpbmxpbmUgUHJv
cGVydHlPZmZzZXQgU3RydWN0dXJlOjphZGQoVk0mIHZtLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlO
YW1lLCB1bnNpZ25lZAogICAgIHJldHVybiBuZXdPZmZzZXQ7CiB9CiAKLXRlbXBsYXRlPHR5cGVu
YW1lIEZ1bmM+Ci1pbmxpbmUgUHJvcGVydHlPZmZzZXQgU3RydWN0dXJlOjpyZW1vdmUoUHJvcGVy
dHlOYW1lIHByb3BlcnR5TmFtZSwgY29uc3QgRnVuYyYgZnVuYykKK3RlbXBsYXRlPFN0cnVjdHVy
ZTo6U2hvdWxkUGluIHNob3VsZFBpbiwgdHlwZW5hbWUgRnVuYz4KK2lubGluZSBQcm9wZXJ0eU9m
ZnNldCBTdHJ1Y3R1cmU6OnJlbW92ZShWTSYgdm0sIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUs
IGNvbnN0IEZ1bmMmIGZ1bmMpCiB7Ci0gICAgQ29uY3VycmVudEpTTG9ja2VyIGxvY2tlcihtX2xv
Y2spOwotICAgIAorICAgIFByb3BlcnR5VGFibGUqIHRhYmxlID0gZW5zdXJlUHJvcGVydHlUYWJs
ZSh2bSk7CisgICAgR0NTYWZlQ29uY3VycmVudEpTTG9ja2VyIGxvY2tlcihtX2xvY2ssIHZtLmhl
YXApOworCisgICAgc3dpdGNoIChzaG91bGRQaW4pIHsKKyAgICBjYXNlIFNob3VsZFBpbjo6WWVz
OgorICAgICAgICBwaW4obG9ja2VyLCB2bSwgdGFibGUpOworICAgICAgICBicmVhazsKKyAgICBj
YXNlIFNob3VsZFBpbjo6Tm86CisgICAgICAgIHNldFByb3BlcnR5VGFibGUodm0sIHRhYmxlKTsK
KyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgQVNTRVJUKEpTQzo6aXNWYWxpZE9mZnNldChn
ZXQodm0sIHByb3BlcnR5TmFtZSkpKTsKKwogICAgIGNoZWNrQ29uc2lzdGVuY3koKTsKIAogICAg
IGF1dG8gcmVwID0gcHJvcGVydHlOYW1lLnVpZCgpOwotICAgIAotICAgIC8vIFdlIE9OTFkgcmVt
b3ZlIGZyb20gdW5jYWNoZWFibGUgZGljdGlvbmFyaWVzLCB3aGljaCB3aWxsIGhhdmUgYSBwaW5u
ZWQgcHJvcGVydHkgdGFibGUuCi0gICAgLy8gVGhlIG9ubHkgd2F5IGZvciB0aGVtIG5vdCB0byBo
YXZlIGEgdGFibGUgaXMgaWYgdGhleSBhcmUgZW1wdHkuCi0gICAgUHJvcGVydHlUYWJsZSogdGFi
bGUgPSBwcm9wZXJ0eVRhYmxlT3JOdWxsKCk7Ci0KLSAgICBpZiAoIXRhYmxlKQotICAgICAgICBy
ZXR1cm4gaW52YWxpZE9mZnNldDsKIAogICAgIFByb3BlcnR5VGFibGU6OmZpbmRfaXRlcmF0b3Ig
cG9zaXRpb24gPSB0YWJsZS0+ZmluZChyZXApOwogICAgIGlmICghcG9zaXRpb24uZmlyc3QpCkBA
IC00OTAsOSArNTA4LDE0IEBAIGlubGluZSBQcm9wZXJ0eU9mZnNldCBTdHJ1Y3R1cmU6OnJlbW92
ZShQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBjb25zdCBGdW5jJiBmCiAgICAgdGFibGUtPnJl
bW92ZShwb3NpdGlvbik7CiAgICAgdGFibGUtPmFkZERlbGV0ZWRPZmZzZXQob2Zmc2V0KTsKIAot
ICAgIGNoZWNrQ29uc2lzdGVuY3koKTsKKyAgICBQcm9wZXJ0eU9mZnNldCBuZXdNYXhPZmZzZXQg
PSBtYXhPZmZzZXQoKTsKIAotICAgIGZ1bmMobG9ja2VyLCBvZmZzZXQpOworICAgIGZ1bmMobG9j
a2VyLCBvZmZzZXQsIG5ld01heE9mZnNldCk7CisKKyAgICBBU1NFUlQobWF4T2Zmc2V0KCkgPT0g
bmV3TWF4T2Zmc2V0KTsKKyAgICBBU1NFUlQoIUpTQzo6aXNWYWxpZE9mZnNldChnZXQodm0sIHBy
b3BlcnR5TmFtZSkpKTsKKworICAgIGNoZWNrQ29uc2lzdGVuY3koKTsKICAgICByZXR1cm4gb2Zm
c2V0OwogfQogCkBAIC01MDMsMTMgKzUyNiwxMyBAQCBpbmxpbmUgUHJvcGVydHlPZmZzZXQgU3Ry
dWN0dXJlOjphZGRQcm9wZXJ0eVdpdGhvdXRUcmFuc2l0aW9uKFZNJiB2bSwgUHJvcGVydHlOYQog
fQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jPgotaW5saW5lIFByb3BlcnR5T2Zmc2V0IFN0cnVj
dHVyZTo6cmVtb3ZlUHJvcGVydHlXaXRob3V0VHJhbnNpdGlvbihWTSYsIFByb3BlcnR5TmFtZSBw
cm9wZXJ0eU5hbWUsIGNvbnN0IEZ1bmMmIGZ1bmMpCitpbmxpbmUgUHJvcGVydHlPZmZzZXQgU3Ry
dWN0dXJlOjpyZW1vdmVQcm9wZXJ0eVdpdGhvdXRUcmFuc2l0aW9uKFZNJiB2bSwgUHJvcGVydHlO
YW1lIHByb3BlcnR5TmFtZSwgY29uc3QgRnVuYyYgZnVuYykKIHsKICAgICBBU1NFUlQoaXNVbmNh
Y2hlYWJsZURpY3Rpb25hcnkoKSk7CiAgICAgQVNTRVJUKGlzUGlubmVkUHJvcGVydHlUYWJsZSgp
KTsKICAgICBBU1NFUlQocHJvcGVydHlUYWJsZU9yTnVsbCgpKTsKICAgICAKLSAgICByZXR1cm4g
cmVtb3ZlKHByb3BlcnR5TmFtZSwgZnVuYyk7CisgICAgcmV0dXJuIHJlbW92ZTxTaG91bGRQaW46
Olllcz4odm0sIHByb3BlcnR5TmFtZSwgZnVuYyk7CiB9CiAKIEFMV0FZU19JTkxJTkUgdm9pZCBT
dHJ1Y3R1cmU6OnNldFByb3RvdHlwZVdpdGhvdXRUcmFuc2l0aW9uKFZNJiB2bSwgSlNWYWx1ZSBw
cm90b3R5cGUpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1
Y3R1cmVUcmFuc2l0aW9uVGFibGUuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0
cnVjdHVyZVRyYW5zaXRpb25UYWJsZS5oCmluZGV4IGI3ZGYwZWZiMzk4ZDA1ZmJmODE3YzdiMzhl
NWJhNDkwZGUxOTBhYmUuLjViODVjN2Y3ZjIwMjZlNDU4MTVjYTNmNTBjY2U1MWMxYjUyYTZiMmIg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZVRyYW5z
aXRpb25UYWJsZS5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVy
ZVRyYW5zaXRpb25UYWJsZS5oCkBAIC0xNDQsMTEgKzE0NCwxMSBAQCBjbGFzcyBTdHJ1Y3R1cmVU
cmFuc2l0aW9uVGFibGUgewogCiAgICAgCiAgICAgc3RydWN0IEhhc2ggewotICAgICAgICB0eXBl
ZGVmIHN0ZDo6cGFpcjxVbmlxdWVkU3RyaW5nSW1wbCosIHVuc2lnbmVkPiBLZXk7CisgICAgICAg
IHR5cGVkZWYgc3RkOjp0dXBsZTxVbmlxdWVkU3RyaW5nSW1wbCosIHVuc2lnbmVkLCBib29sPiBL
ZXk7CiAgICAgICAgIAogICAgICAgICBzdGF0aWMgdW5zaWduZWQgaGFzaChjb25zdCBLZXkmIHAp
CiAgICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBQdHJIYXNoPFVuaXF1ZWRTdHJpbmdJbXBs
Kj46Omhhc2gocC5maXJzdCkgKyBwLnNlY29uZDsKKyAgICAgICAgICAgIHJldHVybiBQdHJIYXNo
PFVuaXF1ZWRTdHJpbmdJbXBsKj46Omhhc2goc3RkOjpnZXQ8MD4ocCkpICsgc3RkOjpnZXQ8MT4o
cCk7CiAgICAgICAgIH0KIAogICAgICAgICBzdGF0aWMgYm9vbCBlcXVhbChjb25zdCBLZXkmIGEs
IGNvbnN0IEtleSYgYikKQEAgLTE4MSw4ICsxODEsOCBAQCBwdWJsaWM6CiAgICAgfQogCiAgICAg
dm9pZCBhZGQoVk0mLCBTdHJ1Y3R1cmUqKTsKLSAgICBib29sIGNvbnRhaW5zKFVuaXF1ZWRTdHJp
bmdJbXBsKiwgdW5zaWduZWQgYXR0cmlidXRlcykgY29uc3Q7Ci0gICAgU3RydWN0dXJlKiBnZXQo
VW5pcXVlZFN0cmluZ0ltcGwqLCB1bnNpZ25lZCBhdHRyaWJ1dGVzKSBjb25zdDsKKyAgICBib29s
IGNvbnRhaW5zKFVuaXF1ZWRTdHJpbmdJbXBsKiwgdW5zaWduZWQgYXR0cmlidXRlcywgYm9vbCBp
c0FkZGl0aW9uID0gdHJ1ZSkgY29uc3Q7CisgICAgU3RydWN0dXJlKiBnZXQoVW5pcXVlZFN0cmlu
Z0ltcGwqLCB1bnNpZ25lZCBhdHRyaWJ1dGVzLCBib29sIGlzQWRkaXRpb24gPSB0cnVlKSBjb25z
dDsKIAogcHJpdmF0ZToKICAgICBmcmllbmQgY2xhc3MgU2luZ2xlU2xvdFRyYW5zaXRpb25XZWFr
T3duZXI7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvdG9vbHMvSlNEb2xsYXJW
TS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvdG9vbHMvSlNEb2xsYXJWTS5jcHAKaW5kZXgg
ZGVjNmJiMmFkODMyOTdmMmE4YWJjNzIxYTE3MWJiOTQ1N2M3NjNmYS4uODc3NzRjYjgzYzJhZjU2
YjlmYWZiYmU0MGQ1ZDg3ZjlmY2YyZDVhYiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL3Rvb2xzL0pTRG9sbGFyVk0uY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS90b29s
cy9KU0RvbGxhclZNLmNwcApAQCAtODEsNiArODEsOCBAQCBwdWJsaWM6CiAKICAgICB2b2lkIHVw
ZGF0ZVZNU3RhY2tMaW1pdHMoKSB7IHJldHVybiBtX3ZtLnVwZGF0ZVN0YWNrTGltaXRzKCk7IH07
CiAKKyAgICBzdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5jdGlvbkdldFN0
cnVjdHVyZVRyYW5zaXRpb25MaXN0KEpTR2xvYmFsT2JqZWN0KiwgQ2FsbEZyYW1lKik7CisKIHBy
aXZhdGU6CiAgICAgVk0mIG1fdm07CiB9OwpAQCAtMjc2OSw2ICsyNzcxLDYwIEBAIHN0YXRpYyBF
bmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0aW9uTWFrZTE2Qml0U3RyaW5nSWZQb3Nz
aWJsZShKU0dsb2JhbE9iCiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1N0cmluZyh2bSwg
U3RyaW5nOjphZG9wdChXVEZNb3ZlKGJ1ZmZlcikpKSk7CiB9CiAKK0VuY29kZWRKU1ZhbHVlIEpT
Q19IT1NUX0NBTEwgSlNEb2xsYXJWTUhlbHBlcjo6ZnVuY3Rpb25HZXRTdHJ1Y3R1cmVUcmFuc2l0
aW9uTGlzdChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBDYWxsRnJhbWUqIGNhbGxGcmFt
ZSkKK3sKKyAgICBEb2xsYXJWTUFzc2VydFNjb3BlIGFzc2VydFNjb3BlOworICAgIFZNJiB2bSA9
IGdsb2JhbE9iamVjdC0+dm0oKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09Q
RSh2bSk7CisgICAgSlNPYmplY3QqIG9iaiA9IGNhbGxGcmFtZS0+YXJndW1lbnQoMCkudG9PYmpl
Y3QoZ2xvYmFsT2JqZWN0KTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOwor
ICAgIGlmICghb2JqKQorICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzTnVsbCgpKTsK
KyAgICBWZWN0b3I8U3RydWN0dXJlKiwgOD4gc3RydWN0dXJlczsKKworICAgIGZvciAoYXV0byog
c3RydWN0dXJlID0gb2JqLT5zdHJ1Y3R1cmUoKTsgc3RydWN0dXJlOyBzdHJ1Y3R1cmUgPSBzdHJ1
Y3R1cmUtPnByZXZpb3VzSUQoKSkKKyAgICAgICAgc3RydWN0dXJlcy5hcHBlbmQoc3RydWN0dXJl
KTsKKworICAgIEpTQXJyYXkqIHJlc3VsdCA9IEpTQXJyYXk6OnRyeUNyZWF0ZSh2bSwgZ2xvYmFs
T2JqZWN0LT5hcnJheVN0cnVjdHVyZUZvckluZGV4aW5nVHlwZUR1cmluZ0FsbG9jYXRpb24oQXJy
YXlXaXRoQ29udGlndW91cyksIDApOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHsg
fSk7CisKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHN0cnVjdHVyZXMuc2l6ZSgpOyArK2kp
IHsKKyAgICAgICAgYXV0byogc3RydWN0dXJlID0gc3RydWN0dXJlc1tzdHJ1Y3R1cmVzLnNpemUo
KSAtIGkgLSAxXTsKKyAgICAgICAgcmVzdWx0LT5wdXNoKGdsb2JhbE9iamVjdCwgSlNWYWx1ZShz
dHJ1Y3R1cmUtPmlkKCkpKTsKKyAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9
KTsKKyAgICAgICAgcmVzdWx0LT5wdXNoKGdsb2JhbE9iamVjdCwgSlNWYWx1ZShzdHJ1Y3R1cmUt
PnRyYW5zaXRpb25PZmZzZXQoKSkpOworICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3Bl
LCB7IH0pOworICAgICAgICByZXN1bHQtPnB1c2goZ2xvYmFsT2JqZWN0LCBKU1ZhbHVlKHN0cnVj
dHVyZS0+bWF4T2Zmc2V0KCkpKTsKKyAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwg
eyB9KTsKKyAgICAgICAgaWYgKHN0cnVjdHVyZS0+bV90cmFuc2l0aW9uUHJvcGVydHlOYW1lKQor
ICAgICAgICAgICAgcmVzdWx0LT5wdXNoKGdsb2JhbE9iamVjdCwganNTdHJpbmcodm0sIFN0cmlu
Zygqc3RydWN0dXJlLT5tX3RyYW5zaXRpb25Qcm9wZXJ0eU5hbWUpKSk7CisgICAgICAgIGVsc2UK
KyAgICAgICAgICAgIHJlc3VsdC0+cHVzaChnbG9iYWxPYmplY3QsIGpzTnVsbCgpKTsKKyAgICAg
ICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsKKyAgICAgICAgcmVzdWx0LT5wdXNo
KGdsb2JhbE9iamVjdCwgSlNWYWx1ZShzdHJ1Y3R1cmUtPmlzUHJvcGVydHlEZWxldGlvblRyYW5z
aXRpb24oKSkpOworICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOworICAg
IH0KKworICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUocmVzdWx0KTsKK30KKworc3RhdGljIEVu
Y29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVuY3Rpb25HZXRDb25jdXJyZW50bHkoSlNHbG9i
YWxPYmplY3QqIGdsb2JhbE9iamVjdCwgQ2FsbEZyYW1lKiBjYWxsRnJhbWUpCit7CisgICAgRG9s
bGFyVk1Bc3NlcnRTY29wZSBhc3NlcnRTY29wZTsKKyAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3Qt
PnZtKCk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworICAgIEpT
T2JqZWN0KiBvYmogPSBjYWxsRnJhbWUtPmFyZ3VtZW50KDApLnRvT2JqZWN0KGdsb2JhbE9iamVj
dCk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsKKyAgICBpZiAoIW9iaikK
KyAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc051bGwoKSk7CisgICAgU3RyaW5nIHBy
b3BlcnR5ID0gY2FsbEZyYW1lLT5hcmd1bWVudCgxKS50b1dURlN0cmluZyhnbG9iYWxPYmplY3Qp
OworICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHsgfSk7CisgICAgYXV0byBuYW1lID0g
UHJvcGVydHlOYW1lKElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sIHByb3BlcnR5KSk7CisgICAg
SlNWYWx1ZSByZXN1bHQgPSBKU1ZhbHVlKG9iai0+c3RydWN0dXJlKCktPmdldENvbmN1cnJlbnRs
eShuYW1lLnVpZCgpKSAhPSBpbnZhbGlkT2Zmc2V0KTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9O
KHNjb3BlLCB7IH0pOworICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUocmVzdWx0KTsKK30KKwog
dm9pZCBKU0RvbGxhclZNOjpmaW5pc2hDcmVhdGlvbihWTSYgdm0pCiB7CiAgICAgRG9sbGFyVk1B
c3NlcnRTY29wZSBhc3NlcnRTY29wZTsKQEAgLTI4OTcsNiArMjk1Myw5IEBAIHZvaWQgSlNEb2xs
YXJWTTo6ZmluaXNoQ3JlYXRpb24oVk0mIHZtKQogICAgIGFkZEZ1bmN0aW9uKHZtLCAiaXNXYXNt
U3VwcG9ydGVkIiwgZnVuY3Rpb25Jc1dhc21TdXBwb3J0ZWQsIDApOwogICAgIGFkZEZ1bmN0aW9u
KHZtLCAibWFrZTE2Qml0U3RyaW5nSWZQb3NzaWJsZSIsIGZ1bmN0aW9uTWFrZTE2Qml0U3RyaW5n
SWZQb3NzaWJsZSwgMSk7CiAKKyAgICBhZGRGdW5jdGlvbih2bSwgImdldFN0cnVjdHVyZVRyYW5z
aXRpb25MaXN0IiwgSlNEb2xsYXJWTUhlbHBlcjo6ZnVuY3Rpb25HZXRTdHJ1Y3R1cmVUcmFuc2l0
aW9uTGlzdCwgMSk7CisgICAgYWRkRnVuY3Rpb24odm0sICJnZXRDb25jdXJyZW50bHkiLCBmdW5j
dGlvbkdldENvbmN1cnJlbnRseSwgMik7CisKICAgICBtX29iamVjdERvaW5nU2lkZUVmZmVjdFB1
dFdpdGhvdXRDb3JyZWN0U2xvdFN0YXR1c1N0cnVjdHVyZS5zZXQodm0sIHRoaXMsIE9iamVjdERv
aW5nU2lkZUVmZmVjdFB1dFdpdGhvdXRDb3JyZWN0U2xvdFN0YXR1czo6Y3JlYXRlU3RydWN0dXJl
KHZtLCBnbG9iYWxPYmplY3QsIGpzTnVsbCgpKSk7CiB9CiAKZGlmZiAtLWdpdCBhL0pTVGVzdHMv
Q2hhbmdlTG9nIGIvSlNUZXN0cy9DaGFuZ2VMb2cKaW5kZXggMzJjNjFkY2EyYTVlMzU0MTFjZTYx
MmY5MGFjYjM2MDNlODIyNGYwNS4uMGRhODhhNTZhMGQ4YzY3NTRiZjMzNTc1ZjcyNTc3MzM5Yjg0
N2FjYSAxMDA2NDQKLS0tIGEvSlNUZXN0cy9DaGFuZ2VMb2cKKysrIGIvSlNUZXN0cy9DaGFuZ2VM
b2cKQEAgLTEsMyArMSw0MyBAQAorMjAyMC0wMS0zMCAgSnVzdGluIE1pY2hhdWQgIDxqdXN0aW5f
bWljaGF1ZEBhcHBsZS5jb20+CisKKyAgICAgICAgRGVsZXRpbmcgYSBwcm9wZXJ0eSBzaG91bGQg
bm90IHR1cm4gc3RydWN0dXJlcyBpbnRvIHVuY2FjaGVhYmxlIGRpY3Rpb25hcmllcworICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjA2NDMwCisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBtaWNyb2JlbmNobWFy
a3MvZGVsZXRlLXByb3BlcnR5LWZyb20tcHJvdG90eXBlLWNoYWluLmpzOiBBZGRlZC4KKyAgICAg
ICAgKGFzc2VydCk6CisgICAgICAgIChub0lubGluZS5hc3NlcnQuZ2V0Wik6CisgICAgICAgIChu
b0lubGluZS5nZXRaLkMpOgorICAgICAgICAoZG9UZXN0KToKKyAgICAgICAgKGRlbGV0ZS5DLnBy
b3RvdHlwZS56KToKKyAgICAgICAgKiBtaWNyb2JlbmNobWFya3MvZGVsZXRlLXByb3BlcnR5LWtl
ZXBzLWNhY2hlYWJsZS1zdHJ1Y3R1cmUuanM6IEFkZGVkLgorICAgICAgICAoYXNzZXJ0KToKKyAg
ICAgICAgKEMpOgorICAgICAgICAoZG9UZXN0KToKKyAgICAgICAgKiBzdHJlc3MvY2FjaGUtcHV0
LWJ5LWlkLWRpZmZlcmVudC1hdHRyaWJ1dGVzLmpzOgorICAgICAgICAobWFrZVByb3RvdHlwZURp
Y3QpOgorICAgICAgICAoc2V0IHgpOgorICAgICAgICAqIHN0cmVzcy9jYWNoZS1wdXQtYnktaWQt
ZGlmZmVyZW50LW9mZnNldC5qczoKKyAgICAgICAgKG1ha2VQcm90b3R5cGVEaWN0KToKKyAgICAg
ICAgKHNldCB4KToKKyAgICAgICAgKiBzdHJlc3MvY2FjaGUtcHV0LWJ5LWlkLXBvbHktcHJvdG8u
anM6CisgICAgICAgIChtYWtlUHJvdG90eXBlRGljdCk6CisgICAgICAgIChzZXQgXyk6CisgICAg
ICAgICogc3RyZXNzL2RlbGV0ZS1wcm9wZXJ0eS1jaGVjay1zdHJ1Y3R1cmUtdHJhbnNpdGlvbi5q
czogQWRkZWQuCisgICAgICAgIChhc3NlcnQpOgorICAgICAgICAoYXNzZXJ0X2VxKToKKyAgICAg
ICAgKGFzc2VydF9uZXEpOgorICAgICAgICAoc2QpOgorICAgICAgICAoc2lkKToKKyAgICAgICAg
KHRlc3REZWxldGVJc05vdFVuY2FjaGVhYmxlKToKKyAgICAgICAgKHRlc3RDYW5NYXRlcmlhbGl6
ZURlbGV0ZXMpOgorICAgICAgICAodGVzdENhbkZsYXR0ZW4pOgorICAgICAgICAodGVzdERlbGV0
ZVdpdGhJbmxpbmVDYWNoZS5PYmplY3QucHJvdG90eXBlLmdsb2JhbFByb3BlcnR5LjQyLm1ha2VG
b28pOgorICAgICAgICAodGVzdERlbGV0ZVdpdGhJbmxpbmVDYWNoZS5ub0lubGluZS5kb1Rlc3Qp
OgorICAgICAgICAodGVzdERlbGV0ZVdpdGhJbmxpbmVDYWNoZSk6CisgICAgICAgICogc3RyZXNz
L2ZsYXR0ZW4tb2JqZWN0LXplcm8tdW51c2VkLWlubGluZS1wcm9wZXJ0aWVzLmpzOgorCiAyMDIw
LTAxLTI4ICBZdXN1a2UgU3V6dWtpICA8eXN1enVraUBhcHBsZS5jb20+CiAKICAgICAgICAgW0pT
Q10gR2l2ZSB1cCBJQyB3aGVuIHVua25vd24gc3RydWN0dXJlIHRyYW5zaXRpb24gaGFwcGVucwpk
aWZmIC0tZ2l0IGEvSlNUZXN0cy9taWNyb2JlbmNobWFya3MvZGVsZXRlLXByb3BlcnR5LWZyb20t
cHJvdG90eXBlLWNoYWluLmpzIGIvSlNUZXN0cy9taWNyb2JlbmNobWFya3MvZGVsZXRlLXByb3Bl
cnR5LWZyb20tcHJvdG90eXBlLWNoYWluLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjQ5YTMxYjdmMjQ3YzFiZDBh
Y2E4MmNiMjJkZjIwZThmMWJmNjFiZGQKLS0tIC9kZXYvbnVsbAorKysgYi9KU1Rlc3RzL21pY3Jv
YmVuY2htYXJrcy9kZWxldGUtcHJvcGVydHktZnJvbS1wcm90b3R5cGUtY2hhaW4uanMKQEAgLTAs
MCArMSw0MyBAQAorLy9AIHNraXAgaWYgJG1vZGVsID09ICJBcHBsZSBXYXRjaCBTZXJpZXMgMyIg
IyBhZGRlZCBieSBtYXJrLWpzYy1zdHJlc3MtdGVzdC5weQorZnVuY3Rpb24gYXNzZXJ0KGIpIHsK
KyAgICBpZiAoIWIpCisgICAgICAgIHRocm93IG5ldyBFcnJvcjsKK30KK25vSW5saW5lKGFzc2Vy
dCkKKworZnVuY3Rpb24gZ2V0WihvKSB7CisgICAgcmV0dXJuIG8uegorfQorbm9JbmxpbmUoZ2V0
WikKKworZnVuY3Rpb24gQygpIHsKKyAgICB0aGlzLnggPSA0MjsKK30KKworbGV0IG9ianMgPSBb
XTsKK2ZvciAobGV0IGkgPSAwOyBpIDwgNTA7ICsraSkgeworICAgIG9ianMucHVzaChuZXcgQyk7
Cit9CisKK2Z1bmN0aW9uIGRvVGVzdCh6VmFsKSB7CisgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBv
YmpzLmxlbmd0aDsgKytpKSB7CisgICAgICAgIGxldCBvID0gb2Jqc1tpXTsKKyAgICAgICAgYXNz
ZXJ0KG8ueCA9PT0gNDIpOworICAgICAgICBhc3NlcnQoZ2V0WihvKSA9PT0gelZhbCkKKyAgICB9
Cit9Citub0lubGluZShkb1Rlc3QpOworCitmb3IgKGxldCBpPTA7IGk8MTAwMDA7ICsraSkgewor
ICAgIGNvbnN0IFggPSB7IGkgfQorICAgIEMucHJvdG90eXBlLnogPSBYCisgICAgZG9UZXN0KFgp
Cit9CisKK2RlbGV0ZSBDLnByb3RvdHlwZS56CisKK2ZvciAobGV0IGk9MDsgaTwxMDAwMDAwOyAr
K2kpIHsKKyAgICBnZXRaKHt6OiBpfSkKKyAgICBkb1Rlc3QodW5kZWZpbmVkKQorfQorCmRpZmYg
LS1naXQgYS9KU1Rlc3RzL21pY3JvYmVuY2htYXJrcy9kZWxldGUtcHJvcGVydHkta2VlcHMtY2Fj
aGVhYmxlLXN0cnVjdHVyZS5qcyBiL0pTVGVzdHMvbWljcm9iZW5jaG1hcmtzL2RlbGV0ZS1wcm9w
ZXJ0eS1rZWVwcy1jYWNoZWFibGUtc3RydWN0dXJlLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjIyY2NhOWZkMjFk
YjA3MjZiYTZiMWQyYjY1ZDlkYTViODNhOGE4MzgKLS0tIC9kZXYvbnVsbAorKysgYi9KU1Rlc3Rz
L21pY3JvYmVuY2htYXJrcy9kZWxldGUtcHJvcGVydHkta2VlcHMtY2FjaGVhYmxlLXN0cnVjdHVy
ZS5qcwpAQCAtMCwwICsxLDI4IEBACisvL0Agc2tpcCBpZiAkbW9kZWwgPT0gIkFwcGxlIFdhdGNo
IFNlcmllcyAzIiAjIGFkZGVkIGJ5IG1hcmstanNjLXN0cmVzcy10ZXN0LnB5CitmdW5jdGlvbiBh
c3NlcnQoYikgeworICAgIGlmICghYikKKyAgICAgICAgdGhyb3cgbmV3IEVycm9yOworfQorCitm
dW5jdGlvbiBDKCkgeworICAgIHRoaXMueCA9IDQyOworICAgIHRoaXMueSA9IDEzMzc7CisgICAg
ZGVsZXRlIHRoaXMueTsKK30KKworbGV0IG9ianMgPSBbXTsKK2ZvciAobGV0IGkgPSAwOyBpIDwg
NTA7ICsraSkgeworICAgIG9ianMucHVzaChuZXcgQyk7Cit9CisKK2Z1bmN0aW9uIGRvVGVzdCgp
IHsKKyAgICBmb3IgKGxldCBpID0gMDsgaSA8IG9ianMubGVuZ3RoOyArK2kpIHsKKyAgICAgICAg
bGV0IG8gPSBvYmpzW2ldOworICAgICAgICBhc3NlcnQoby55ID09PSB1bmRlZmluZWQpOworICAg
ICAgICBhc3NlcnQoby54ID09PSA0Mik7CisgICAgfQorfQorbm9JbmxpbmUoZG9UZXN0KTsKKwor
Zm9yIChsZXQgaT0wOyBpPDEwMDAwMDAwOyArK2kpIGRvVGVzdCgpCisKZGlmZiAtLWdpdCBhL0pT
VGVzdHMvc3RyZXNzL2NhY2hlLXB1dC1ieS1pZC1kaWZmZXJlbnQtYXR0cmlidXRlcy5qcyBiL0pT
VGVzdHMvc3RyZXNzL2NhY2hlLXB1dC1ieS1pZC1kaWZmZXJlbnQtYXR0cmlidXRlcy5qcwppbmRl
eCBiMzhmYzc4YTE0NDlkNzFmZDEzY2Y0Mzk3MzA5ODUwN2ZiY2QzOTNlLi5mYjEyZjFhMDIyMDI4
N2Y2MWZlOWUxM2ZmNDZhNGFhZmRlZTkzYmJlIDEwMDY0NAotLS0gYS9KU1Rlc3RzL3N0cmVzcy9j
YWNoZS1wdXQtYnktaWQtZGlmZmVyZW50LWF0dHJpYnV0ZXMuanMKKysrIGIvSlNUZXN0cy9zdHJl
c3MvY2FjaGUtcHV0LWJ5LWlkLWRpZmZlcmVudC1hdHRyaWJ1dGVzLmpzCkBAIC00LDYgKzQsMTYg
QEAgZnVuY3Rpb24gRm9vKCkgeyB9CiAKIEZvby5wcm90b3R5cGUueCA9IDA7CiAKK2Z1bmN0aW9u
IG1ha2VQcm90b3R5cGVEaWN0KCkgeworICAgIGZvciAobGV0IGk9MDsgaTwxMDA7ICsraSkgewor
ICAgICAgICBGb28ucHJvdG90eXBlLmEgPSBpCisgICAgICAgIEZvby5wcm90b3R5cGUuYiA9IGkK
KyAgICAgICAgZGVsZXRlIEZvby5wcm90b3R5cGUuYQorICAgICAgICBkZWxldGUgRm9vLnByb3Rv
dHlwZS5iCisgICAgfQorfQorbm9JbmxpbmUobWFrZVByb3RvdHlwZURpY3QpCisKIE9iamVjdC5k
ZWZpbmVQcm9wZXJ0eShGb28ucHJvdG90eXBlLCAneScsIHsKICAgICBzZXQoeCkgewogICAgICAg
ICBpZiAoRm9vLnByb3RvdHlwZS54KysgPT09IDkpIHsKQEAgLTExLDggKzIxLDEwIEBAIE9iamVj
dC5kZWZpbmVQcm9wZXJ0eShGb28ucHJvdG90eXBlLCAneScsIHsKICAgICAgICAgICAgICAgICB2
YWx1ZTogMTMsCiAgICAgICAgICAgICAgICAgd3JpdGFibGU6IHRydWUsCiAgICAgICAgICAgICB9
KTsKLSAgICAgICAgICAgIGlmICh0eXBlb2YgJHZtICE9PSAndW5kZWZpbmVkJykKKyAgICAgICAg
ICAgIGlmICh0eXBlb2YgJHZtICE9PSAndW5kZWZpbmVkJykgeworICAgICAgICAgICAgICAgIG1h
a2VQcm90b3R5cGVEaWN0KCkKICAgICAgICAgICAgICAgICAkdm0uZmxhdHRlbkRpY3Rpb25hcnlP
YmplY3QoRm9vLnByb3RvdHlwZSk7CisgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICB9LAog
ICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSwKZGlmZiAtLWdpdCBhL0pTVGVzdHMvc3RyZXNzL2NhY2hl
LXB1dC1ieS1pZC1kaWZmZXJlbnQtb2Zmc2V0LmpzIGIvSlNUZXN0cy9zdHJlc3MvY2FjaGUtcHV0
LWJ5LWlkLWRpZmZlcmVudC1vZmZzZXQuanMKaW5kZXggN2YyOTcxM2U3YzI4NTNjYWM3Y2Q0YTQz
ZWY2NzU3ZWM4YWUzOWJmYy4uODlkYTZhNzJkNzVjMGZmN2JlNTBkY2I3MmI5NWQ5YzU0ODZkZTdk
MiAxMDA2NDQKLS0tIGEvSlNUZXN0cy9zdHJlc3MvY2FjaGUtcHV0LWJ5LWlkLWRpZmZlcmVudC1v
ZmZzZXQuanMKKysrIGIvSlNUZXN0cy9zdHJlc3MvY2FjaGUtcHV0LWJ5LWlkLWRpZmZlcmVudC1v
ZmZzZXQuanMKQEAgLTQsMTIgKzQsMjQgQEAgZnVuY3Rpb24gRm9vKCkgeyB9CiAKIEZvby5wcm90
b3R5cGUueCA9IDA7CiAKK2Z1bmN0aW9uIG1ha2VQcm90b3R5cGVEaWN0KCkgeworICAgIGZvciAo
bGV0IGk9MDsgaTwxMDA7ICsraSkgeworICAgICAgICBGb28ucHJvdG90eXBlLmEgPSBpCisgICAg
ICAgIEZvby5wcm90b3R5cGUuYiA9IGkKKyAgICAgICAgZGVsZXRlIEZvby5wcm90b3R5cGUuYQor
ICAgICAgICBkZWxldGUgRm9vLnByb3RvdHlwZS5iCisgICAgfQorfQorbm9JbmxpbmUobWFrZVBy
b3RvdHlwZURpY3QpCisKIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShGb28ucHJvdG90eXBlLCAneScs
IHsKICAgICBzZXQoeCkgewogICAgICAgICBpZiAoRm9vLnByb3RvdHlwZS54KysgPT09IDEpIHsK
ICAgICAgICAgICAgIGRlbGV0ZSBGb28ucHJvdG90eXBlLng7Ci0gICAgICAgICAgICBpZiAodHlw
ZW9mICR2bSAhPT0gJ3VuZGVmaW5lZCcpCisgICAgICAgICAgICBpZiAodHlwZW9mICR2bSAhPT0g
J3VuZGVmaW5lZCcpIHsKKyAgICAgICAgICAgICAgICBtYWtlUHJvdG90eXBlRGljdCgpCiAgICAg
ICAgICAgICAgICAgJHZtLmZsYXR0ZW5EaWN0aW9uYXJ5T2JqZWN0KEZvby5wcm90b3R5cGUpOwor
ICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgfQogfSk7CmRpZmYgLS1naXQgYS9KU1Rlc3Rz
L3N0cmVzcy9jYWNoZS1wdXQtYnktaWQtcG9seS1wcm90by5qcyBiL0pTVGVzdHMvc3RyZXNzL2Nh
Y2hlLXB1dC1ieS1pZC1wb2x5LXByb3RvLmpzCmluZGV4IGI3OWJhZjA5MjFlMmQzNDI1MjYyOTlk
OGQxMTZlZWU2Zjk0MDMyOTMuLjZhYmZhMjJkMDE0MThkZWIwMGFhOTk1ZWU5NTlmYTZmNzYxYzU5
NWMgMTAwNjQ0Ci0tLSBhL0pTVGVzdHMvc3RyZXNzL2NhY2hlLXB1dC1ieS1pZC1wb2x5LXByb3Rv
LmpzCisrKyBiL0pTVGVzdHMvc3RyZXNzL2NhY2hlLXB1dC1ieS1pZC1wb2x5LXByb3RvLmpzCkBA
IC00LDYgKzQsMTYgQEAgZnVuY3Rpb24gRm9vKCkgeyB9CiAKIGxldCB4ID0gMDsKIAorZnVuY3Rp
b24gbWFrZVByb3RvdHlwZURpY3QoKSB7CisgICAgZm9yIChsZXQgaT0wOyBpPDEwMDsgKytpKSB7
CisgICAgICAgIEZvby5wcm90b3R5cGUuYSA9IGkKKyAgICAgICAgRm9vLnByb3RvdHlwZS5iID0g
aQorICAgICAgICBkZWxldGUgRm9vLnByb3RvdHlwZS5hCisgICAgICAgIGRlbGV0ZSBGb28ucHJv
dG90eXBlLmIKKyAgICB9Cit9Citub0lubGluZShtYWtlUHJvdG90eXBlRGljdCkKKwogT2JqZWN0
LmRlZmluZVByb3BlcnR5KEZvby5wcm90b3R5cGUsICd5JywgewogICAgIHNldChfKSB7CiAgICAg
ICAgIGlmICh4KysgPT09IDkpIHsKQEAgLTExLDggKzIxLDEwIEBAIE9iamVjdC5kZWZpbmVQcm9w
ZXJ0eShGb28ucHJvdG90eXBlLCAneScsIHsKICAgICAgICAgICAgICAgICB2YWx1ZTogMTMsCiAg
ICAgICAgICAgICAgICAgd3JpdGFibGU6IHRydWUsCiAgICAgICAgICAgICB9KTsKLSAgICAgICAg
ICAgIGlmICh0eXBlb2YgJHZtICE9PSAndW5kZWZpbmVkJykKKyAgICAgICAgICAgIGlmICh0eXBl
b2YgJHZtICE9PSAndW5kZWZpbmVkJykgeworICAgICAgICAgICAgICAgIG1ha2VQcm90b3R5cGVE
aWN0KCkKICAgICAgICAgICAgICAgICAkdm0uZmxhdHRlbkRpY3Rpb25hcnlPYmplY3QoRm9vLnBy
b3RvdHlwZSk7CisgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICB9LAogICAgIGNvbmZpZ3Vy
YWJsZTogdHJ1ZSwKZGlmZiAtLWdpdCBhL0pTVGVzdHMvc3RyZXNzL2RlbGV0ZS1wcm9wZXJ0eS1j
aGVjay1zdHJ1Y3R1cmUtdHJhbnNpdGlvbi5qcyBiL0pTVGVzdHMvc3RyZXNzL2RlbGV0ZS1wcm9w
ZXJ0eS1jaGVjay1zdHJ1Y3R1cmUtdHJhbnNpdGlvbi5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi40MDNjN2MwOWNj
MTIzZjNiMTg1NDY4MGI2YzE3ZGQ0NTZhNWRlZjMxCi0tLSAvZGV2L251bGwKKysrIGIvSlNUZXN0
cy9zdHJlc3MvZGVsZXRlLXByb3BlcnR5LWNoZWNrLXN0cnVjdHVyZS10cmFuc2l0aW9uLmpzCkBA
IC0wLDAgKzEsMTg5IEBACitmdW5jdGlvbiBhc3NlcnQoY29uZGl0aW9uKSB7CisgICAgaWYgKCFj
b25kaXRpb24pCisgICAgICAgIHRocm93IG5ldyBFcnJvcigiYXNzZXJ0aW9uIGZhaWxlZCIpOwor
fQorCitmdW5jdGlvbiBhc3NlcnRfZXEoYSwgYikgeworICAgIGlmIChhICE9PSBiKQorICAgICAg
ICB0aHJvdyBuZXcgRXJyb3IoImFzc2VydGlvbiBmYWlsZWQ6ICIgKyBhICsgIiA9PT0gIiArIGIp
OworfQorCitmdW5jdGlvbiBhc3NlcnRfbmVxKGEsIGIpIHsKKyAgICBpZiAoYSA9PT0gYikKKyAg
ICAgICAgdGhyb3cgbmV3IEVycm9yKCJhc3NlcnRpb24gZmFpbGVkOiAiICsgYSArICIgIT09ICIg
KyBiKTsKK30KKworZnVuY3Rpb24gc2Qob2JqKSB7CisgICAgbGV0IGRhdGEgPSAkdm0uZ2V0U3Ry
dWN0dXJlVHJhbnNpdGlvbkxpc3Qob2JqKQorICAgIGxldCByZXN1bHQgPSBbXQorCisgICAgaWYg
KCFkYXRhKQorICAgICAgICByZXR1cm4gcmVzdWx0CisKKyAgICBmb3IgKGxldCBpID0gMDsgaSA8
IGRhdGEubGVuZ3RoLzU7ICsraSkgeworICAgICAgICByZXN1bHQucHVzaCh7IGlkOiBkYXRhW2kq
NSswXSwgb2Zmc2V0OiBkYXRhW2kqNSsxXSwgbWF4OiBkYXRhW2kqNSsyXSwgcHJvcGVydHk6IGRh
dGFbaSo1KzNdLCB0eXBlOiBkYXRhW2kqNSs0XSA9PSAwID8gImFkZGVkIiA6ICJkZWxldGVkIiB9
KQorICAgIH0KKworICAgIHJldHVybiByZXN1bHQKK30KKworZnVuY3Rpb24gc2lkKG9iaikgewor
ICAgIGxldCBkYXRhID0gc2Qob2JqKQorICAgIHJldHVybiBkYXRhW2RhdGEubGVuZ3RoLTFdLmlk
Cit9CisKK2Z1bmN0aW9uIHRlc3REZWxldGVJc05vdFVuY2FjaGVhYmxlKGkpIHsKKyAgICBsZXQg
Zm9vID0ge30KKyAgICBmb29bImJhciIgKyBpXSA9IDEKKyAgICBmb29bImJheiIgKyBpXSA9IDIK
KyAgICBhc3NlcnQoZm9vWyJiYXIiICsgaV0gPT09IDEpCisgICAgYXNzZXJ0KGZvb1siYmF6IiAr
IGldID09PSAyKQorICAgIGxldCBvbGRTaWQgPSBzaWQoZm9vKQorCisgICAgYXNzZXJ0X2VxKCR2
bS5nZXRDb25jdXJyZW50bHkoZm9vLCAiYmF6IitpKSwgMSkKKyAgICBhc3NlcnRfZXEoJHZtLmdl
dENvbmN1cnJlbnRseShmb28sICJiYXIiK2kpLCAxKQorICAgIGFzc2VydF9lcSgkdm0uZ2V0Q29u
Y3VycmVudGx5KGZvbywgImZvbyIraSksIDApCisKKyAgICBhc3NlcnQoZGVsZXRlIGZvb1siYmFy
IiArIGldKQorICAgIGFzc2VydF9uZXEob2xkU2lkLCBzaWQoZm9vKSkKKyAgICBhc3NlcnQoISgo
ImJhciIgKyBpKSBpbiBmb28pKTsKKyAgICBhc3NlcnQoZm9vWyJiYXoiICsgaV0gPT09IDIpCisK
KyAgICBhc3NlcnRfZXEoJHZtLmdldENvbmN1cnJlbnRseShmb28sICJiYXoiK2kpLCAxKQorICAg
IGFzc2VydF9lcSgkdm0uZ2V0Q29uY3VycmVudGx5KGZvbywgImJhciIraSksIDApCisKKyAgICBh
c3NlcnRfZXEoT2JqZWN0LmtleXMoZm9vKS5sZW5ndGgsIDEpCisKKyAgICBsZXQgZGF0YSA9IHNk
KGZvbykKKyAgICBhc3NlcnRfZXEoZGF0YVtkYXRhLmxlbmd0aC0xXS5wcm9wZXJ0eSwgImJhciIg
KyBpKQorCisgICAgZm9vWyJiYXIiICsgaV0gPSAxCisgICAgYXNzZXJ0X2VxKCR2bS5nZXRDb25j
dXJyZW50bHkoZm9vLCAiYmF6IitpKSwgMSkKKyAgICBhc3NlcnRfZXEoJHZtLmdldENvbmN1cnJl
bnRseShmb28sICJiYXIiK2kpLCAxKQorICAgIGFzc2VydChmb29bImJhciIgKyBpXSA9PT0gMSkK
K30KKworZnVuY3Rpb24gdGVzdENhbk1hdGVyaWFsaXplRGVsZXRlcyhpKSB7CisgICAgbGV0IGZv
byA9IHt9CisgICAgZm9vWyJiYXIiICsgaV0gPSAxCisgICAgZm9vWyJiYXoiICsgaV0gPSAyCisK
KyAgICBhc3NlcnQoZm9vWyJiYXIiICsgaV0gPT09IDEpCisgICAgYXNzZXJ0KGZvb1siYmF6IiAr
IGldID09PSAyKQorICAgIGFzc2VydChkZWxldGUgZm9vWyJiYXIiICsgaV0pCisgICAgYXNzZXJ0
KCEoImJhciIgKyBpIGluIGZvbykpCisgICAgYXNzZXJ0KGZvb1siYmF6IiArIGldID09PSAyKQor
ICAgIGFzc2VydF9lcShPYmplY3Qua2V5cyhmb28pLmxlbmd0aCwgMSkKKworICAgIGxldCBmb28y
ID0ge30KKyAgICBmb28yWyJiYXIiICsgaV0gPSAzCisgICAgZm9vMlsiYmF6IiArIGldID0gNAor
ICAgIGFzc2VydChkZWxldGUgZm9vMlsiYmFyIiArIGldKQorCisgICAgYXNzZXJ0X2VxKHNpZChm
b28yKSwgc2lkKGZvbykpCisgICAgZm9vMlsiZnVuIiArIGldID0gMworICAgIGFzc2VydF9uZXEo
c2lkKGZvbzIpLCBzaWQoZm9vKSkKKworICAgIGFzc2VydChmb28yWyJmdW4iICsgaV0gPT09IDMp
CisgICAgYXNzZXJ0KGZvbzJbImJheiIgKyBpXSA9PT0gNCkKKyAgICBhc3NlcnQoISgiYmFyIiAr
IGkgaW4gZm9vMikpCisgICAgYXNzZXJ0X2VxKE9iamVjdC5rZXlzKGZvbzIpLmxlbmd0aCwgMikK
KyAgICBhc3NlcnQoZm9vWyJiYXoiICsgaV0gPT09IDIpCisgICAgYXNzZXJ0KCEoImJhciIgKyBp
IGluIGZvbykpCisgICAgYXNzZXJ0X2VxKE9iamVjdC5rZXlzKGZvbykubGVuZ3RoLCAxKQorCisg
ICAgbGV0IGRhdGEgPSBzZChmb28pCisgICAgYXNzZXJ0X2VxKGRhdGFbZGF0YS5sZW5ndGgtMV0u
cHJvcGVydHksICJiYXIiICsgaSkKKworICAgIGRhdGEgPSBzZChmb28yKQorICAgIGFzc2VydF9l
cShkYXRhW2RhdGEubGVuZ3RoLTFdLnByb3BlcnR5LCAiZnVuIiArIGkpCisgICAgYXNzZXJ0X2Vx
KGRhdGFbZGF0YS5sZW5ndGgtMl0ucHJvcGVydHksICJiYXIiICsgaSkKK30KKworZnVuY3Rpb24g
dGVzdENhbkZsYXR0ZW4oaSkgeworICAgIGxldCBmb28gPSB7fQorICAgIGZvciAobGV0IGo9MDsg
ajw1MDA7ICsraikgeworICAgICAgICBjb25zdCBvbGRJZCA9IHNpZChmb28pCisKKyAgICAgICAg
Zm9vWyJ4IiArIDEwMDAqaiArIGldID0gagorICAgICAgICBpZiAoaiA+IDApCisgICAgICAgICAg
ICBkZWxldGUgZm9vWyJ4IiArIDEwMDAqKGogLSAxKSArIGldCisKKyAgICAgICAgaWYgKGogPiAx
MDApCisgICAgICAgICAgICBhc3NlcnRfZXEoc2lkKGZvbyksIG9sZElkKQorICAgIH0KKworICAg
IGZvciAobGV0IGo9MDsgajw1MDA7ICsraikgeworICAgICAgICBjb25zdCB2YWwgPSBmb29bIngi
ICsgMTAwMCpqICsgaV0KKyAgICAgICAgaWYgKGogPT0gNDk5KQorICAgICAgICAgICAgYXNzZXJ0
X2VxKHZhbCwgaikKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgYXNzZXJ0X2VxKHZhbCwgdW5k
ZWZpbmVkKQorICAgIH0KKworICAgICR2bS5mbGF0dGVuRGljdGlvbmFyeU9iamVjdChmb28pCisK
KyAgICBmb3IgKGxldCBqPTA7IGo8NTAwOyArK2opIHsKKyAgICAgICAgY29uc3QgdmFsID0gZm9v
WyJ4IiArIDEwMDAqaiArIGldCisgICAgICAgIGlmIChqID09IDQ5OSkKKyAgICAgICAgICAgIGFz
c2VydF9lcSh2YWwsIGopCisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGFzc2VydF9lcSh2YWws
IHVuZGVmaW5lZCkKKyAgICB9Cit9CisKK2Z1bmN0aW9uIHRlc3REZWxldGVXaXRoSW5saW5lQ2Fj
aGUoKSB7CisgICAgT2JqZWN0LnByb3RvdHlwZS5nbG9iYWxQcm9wZXJ0eSA9IDQyCisKKyAgICBm
dW5jdGlvbiBtYWtlRm9vKCkgeworICAgICAgICBsZXQgZm9vID0ge30KKyAgICAgICAgZm9vLmJh
eiA9IDEKKyAgICAgICAgYXNzZXJ0KGZvby5nbG9iYWxQcm9wZXJ0eSA9PT0gNDIpCisKKyAgICAg
ICAgcmV0dXJuIGZvbworICAgIH0KKyAgICBub0lubGluZShtYWtlRm9vKQorCisgICAgZnVuY3Rp
b24gZG9UZXN0KHhWYWwpIHsKKyAgICAgICAgZm9yIChsZXQgaj0wOyBqPDUwOyArK2opIHsKKyAg
ICAgICAgICAgIGZvciAobGV0IHo9MDsgejwxMDAwMDsgKyt6KSB7CisgICAgICAgICAgICAgICAg
Y29uc3QgZm9vID0gYXJyW2pdCisKKyAgICAgICAgICAgICAgICBhc3NlcnQoZm9vLmJheiA9PT0g
MSkKKyAgICAgICAgICAgICAgICBhc3NlcnRfZXEoT2JqZWN0LmtleXMoZm9vKS5sZW5ndGgsIDEp
CisgICAgICAgICAgICAgICAgYXNzZXJ0X2VxKGZvby5nbG9iYWxQcm9wZXJ0eSwgeFZhbCkKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKyAgICBub0lubGluZShkb1Rlc3QpCisKKyAg
ICBhcnIgPSBuZXcgQXJyYXkoNTApCisKKyAgICBmb3IgKGxldCBqPTA7IGo8NTA7ICsraikgewor
ICAgICAgICBhcnJbal0gPSBtYWtlRm9vKCkKKyAgICAgICAgaWYgKGogPiAwKQorICAgICAgICAg
ICAgYXNzZXJ0X2VxKHNpZChhcnJbai0xXSksIHNpZChhcnJbal0pKQorICAgIH0KKworICAgIGRv
VGVzdCg0MikKKworICAgIE9iamVjdC5wcm90b3R5cGUuZ2xvYmFsUHJvcGVydHkgPSA0MworCisg
ICAgZG9UZXN0KDQzKQorCisgICAgZGVsZXRlIE9iamVjdC5wcm90b3R5cGUuZ2xvYmFsUHJvcGVy
dHkKKworICAgIGRvVGVzdCh1bmRlZmluZWQpCit9CisKK3Rlc3REZWxldGVXaXRoSW5saW5lQ2Fj
aGUoKQorCitmb3IgKGxldCBpID0gMDsgaSA8IDEwMDA7ICsraSkgeworICAgIHRlc3REZWxldGVJ
c05vdFVuY2FjaGVhYmxlKGkpCisgICAgdGVzdENhbk1hdGVyaWFsaXplRGVsZXRlcygxMDAwK2kp
Cit9CisKK2ZvciAobGV0IGkgPSAwOyBpIDwgMTAwOyArK2kpIHsKKyAgICB0ZXN0Q2FuRmxhdHRl
bigyMDAwK2kpCit9CisKZGlmZiAtLWdpdCBhL0pTVGVzdHMvc3RyZXNzL2ZsYXR0ZW4tb2JqZWN0
LXplcm8tdW51c2VkLWlubGluZS1wcm9wZXJ0aWVzLmpzIGIvSlNUZXN0cy9zdHJlc3MvZmxhdHRl
bi1vYmplY3QtemVyby11bnVzZWQtaW5saW5lLXByb3BlcnRpZXMuanMKaW5kZXggNmZlNWExNGM0
OTU4YjFiYjJkZjY5MWIxODJmMDk5MjZkODNhYTI5MC4uNjQ2MGE5NGFhNjMyMmVlZmE0ZDZiODY1
MGRlYjBjY2ZiZTNhYjUzMSAxMDA2NDQKLS0tIGEvSlNUZXN0cy9zdHJlc3MvZmxhdHRlbi1vYmpl
Y3QtemVyby11bnVzZWQtaW5saW5lLXByb3BlcnRpZXMuanMKKysrIGIvSlNUZXN0cy9zdHJlc3Mv
ZmxhdHRlbi1vYmplY3QtemVyby11bnVzZWQtaW5saW5lLXByb3BlcnRpZXMuanMKQEAgLTEsNCAr
MSwxMCBAQAogbGV0IG8gPSB7IGZvbzogMSwgYmFyOiAyLCBiYXo6IDMgfTsKK2ZvciAobGV0IGk9
MDsgaTwxMDA7ICsraSkgeworICAgIG8uYSA9IGkKKyAgICBvLmIgPSBpCisgICAgZGVsZXRlIG8u
YQorICAgIGRlbGV0ZSBvLmIKK30KIGlmICgkdm0uaW5saW5lQ2FwYWNpdHkobykgPD0gMykKICAg
ICB0aHJvdyBuZXcgRXJyb3IoIlRoZXJlIHNob3VsZCBiZSBpbmxpbmUgY2FwYWNpdHkiKTsKIAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>389597</attachid>
            <date>2020-02-03 16:30:52 -0800</date>
            <delta_ts>2020-02-04 14:07:59 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-206430-20200203163051.patch</filename>
            <type>text/plain</type>
            <size>52780</size>
            <attacher name="Justin Michaud">justin_michaud</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjU1Mzc1CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCBj
NWY1MDc3NjZmNDRiNzdhN2E4ZmEzMDMwYmFmOWQyZmRhNzU1ZWYwLi5lMTNkYjBmNmM4MjAzNDU3
YzZjYzNlMzU3NmJjMGQ5MjdmMzY0MzA1IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSw2NCBAQAorMjAyMC0wMS0zMCAgSnVzdGluIE1pY2hhdWQgIDxqdXN0aW5fbWljaGF1ZEBh
cHBsZS5jb20+CisKKyAgICAgICAgRGVsZXRpbmcgYSBwcm9wZXJ0eSBzaG91bGQgbm90IHR1cm4g
c3RydWN0dXJlcyBpbnRvIHVuY2FjaGVhYmxlIGRpY3Rpb25hcmllcworICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjA2NDMwCisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgUmlnaHQgbm93LCBkZWxldGVQcm9wZXJ0
eS9yZW1vdmVQcm9wZXJ0eVRyYW5zaXRpb24gY2F1c2VzIGEgc3RydWN0dXJlIHRyYW5zaXRpb24g
dG8gdW5jYWNoZWFibGUgZGljdGlvbmFyeS4gSW5zdGVhZCwgd2Ugc2hvdWxkIGFsbG93IGl0IHRv
IHRyYW5zaXRpb24gdG8gYSBuZXcgcmVndWxhciBzdHJ1Y3R1cmUgbGlrZSBhZGRpbmcgYSBwcm9w
ZXJ0eSBkb2VzLiBUaGlzIG1lYW5zIHRoYXQgd2UgaGF2ZSB0bzoKKworICAgICAgICAxKSBCcmVh
ayB0aGUgYXNzdW1wdGlvbiB0aGF0IHN0cnVjdHVyZSB0cmFuc2l0aW9uIG9mZnNldHMgaW5jcmVh
c2UgbW9ub3RvbmljYWxseQorCisgICAgICAgIFdlIGFkZCBhIG5ldyBmbGFnIHRvIHRlbGwgdGhh
dCBhIHN0cnVjdHVyZSBoYXMgZGVsZXRlZCBpdHMgcHJvcGVydHksIGFuZCB1cGRhdGUgbWF0ZXJp
YWxpemVQcm9wZXJ0eVRhYmxlIHRvIHVzZSBpdC4KKworICAgICAgICAyKSBBZGQgYSBuZXcgdHJh
bnNpdGlvbiBtYXAgYW5kIHRyYW5zaXRpb24ga2luZCBmb3IgZGVsZXRlcworCisgICAgICAgIFdl
IGNhY2hlIHRoZSBkZWxldGUgdHJhbnNpdGlvbi4gV2Ugd2lsbCBub3QgdHJhbnNpdGlvbiBiYWNr
IHRvIGEgcHJldmlvdXMgc3RydWN0dXJlIGlmIHlvdSBhZGQgdGhlbiBpbW1lZGlhdGVseSByZW1v
dmUgYSBwcm9wZXJ0eS4KKworICAgICAgICAzKSBGaW5kIHNvbWUgaGV1cmlzdGljIGZvciB3aGVu
IHdlIHNob3VsZCBhY3R1YWxseSB0cmFuc2l0aW9uIHRvIHVuY2FjaGVhYmxlIGRpY3Rpb25hcnku
CisKKyAgICAgICAgU2luY2UgZGVsZXRpbmcgcHJvcGVydGllcyBpcyBleHBlY3RlZCB0byBiZSBy
YXJlLCB3ZSBqdXN0IHdhbGsgdGhlIHN0cnVjdHVyZSBsaXN0IGFuZCBjb3VudCBpdHMgc2l6ZSBv
biByZW1vdmFsLiAKKworICAgICAgICBUaGlzIHBhdGNoIGFsc28gZml4ZXMgYSByZWxhdGVkIGJ1
ZyBpbiBhZGRQcm9wZXJ0eSwgd2hlcmUgd2UgZGlkIG5vdCB1c2UgYSBHQ1NhZmVDb25jdXJyZW50
SlNMb2NrZXIsIGFuZCBhZGRzIGFuIG9wdGlvbiB0byB0cmlnZ2VyIHRoZSBidWcuIEZpbmFsbHks
IHdlIGFkZCBzb21lIGhlbHBlciBtZXRob2RzIHRvIGRvbGxhclZNIHRvIHRlc3QuCisKKyAgICAg
ICAgVGhpcyBnaXZlcyBhIDI0eCBzcGVlZHVwIG9uIGRlbGV0ZS1wcm9wZXJ0eS1rZWVwcy1jYWNo
ZWFibGUtc3RydWN0dXJlLmpzLCBhbmQgaXMgbmV1dHJhbCBvbiBkZWxldGUtcHJvcGVydHktZnJv
bS1wcm90b3R5cGUtY2hhaW4uanMgKHdoaWNoIHdhcyBhbHJlYWR5IGdlbmVyYXRpbmcgY29kZSB1
c2luZyB0aGUgaW5saW5lIGNhY2hlKS4KKworICAgICAgICAqIGhlYXAvSGVhcElubGluZXMuaDoK
KyAgICAgICAgKEpTQzo6SGVhcDo6ZGVjcmVtZW50RGVmZXJyYWxEZXB0aEFuZEdDSWZOZWVkZWQp
OgorICAgICAgICAqIHJ1bnRpbWUvSlNPYmplY3QuY3BwOgorICAgICAgICAoSlNDOjpKU09iamVj
dDo6ZGVsZXRlUHJvcGVydHkpOgorICAgICAgICAqIHJ1bnRpbWUvT3B0aW9uc0xpc3QuaDoKKyAg
ICAgICAgKiBydW50aW1lL1Byb3BlcnR5TWFwSGFzaFRhYmxlLmg6CisgICAgICAgIChKU0M6OlBy
b3BlcnR5VGFibGU6OmdldCk6CisgICAgICAgIChKU0M6OlByb3BlcnR5VGFibGU6OmFkZCk6Cisg
ICAgICAgIChKU0M6OlByb3BlcnR5VGFibGU6OmFkZERlbGV0ZWRPZmZzZXQpOgorICAgICAgICAo
SlNDOjpQcm9wZXJ0eVRhYmxlOjpyZWluc2VydCk6CisgICAgICAgICogcnVudGltZS9TdHJ1Y3R1
cmUuY3BwOgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmVUcmFuc2l0aW9uVGFibGU6OmNvbnRhaW5z
IGNvbnN0KToKKyAgICAgICAgKEpTQzo6U3RydWN0dXJlVHJhbnNpdGlvblRhYmxlOjpnZXQgY29u
c3QpOgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmVUcmFuc2l0aW9uVGFibGU6OmFkZCk6CisgICAg
ICAgIChKU0M6OlN0cnVjdHVyZTo6U3RydWN0dXJlKToKKyAgICAgICAgKEpTQzo6U3RydWN0dXJl
OjptYXRlcmlhbGl6ZVByb3BlcnR5VGFibGUpOgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmU6OmFk
ZE5ld1Byb3BlcnR5VHJhbnNpdGlvbik6CisgICAgICAgIChKU0M6OlN0cnVjdHVyZTo6cmVtb3Zl
UHJvcGVydHlUcmFuc2l0aW9uKToKKyAgICAgICAgKEpTQzo6U3RydWN0dXJlOjpyZW1vdmVQcm9w
ZXJ0eVRyYW5zaXRpb25Gcm9tRXhpc3RpbmdTdHJ1Y3R1cmUpOgorICAgICAgICAoSlNDOjpTdHJ1
Y3R1cmU6OnJlbW92ZU5ld1Byb3BlcnR5VHJhbnNpdGlvbik6CisgICAgICAgIChKU0M6OlN0cnVj
dHVyZTo6dG9VbmNhY2hlYWJsZURpY3Rpb25hcnlUcmFuc2l0aW9uKToKKyAgICAgICAgKEpTQzo6
U3RydWN0dXJlOjpyZW1vdmUpOgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmU6OnZpc2l0Q2hpbGRy
ZW4pOgorICAgICAgICAqIHJ1bnRpbWUvU3RydWN0dXJlLmg6CisgICAgICAgICogcnVudGltZS9T
dHJ1Y3R1cmVJbmxpbmVzLmg6CisgICAgICAgIChKU0M6OlN0cnVjdHVyZTo6Zm9yRWFjaFByb3Bl
cnR5Q29uY3VycmVudGx5KToKKyAgICAgICAgKEpTQzo6U3RydWN0dXJlOjphZGQpOgorICAgICAg
ICAoSlNDOjpTdHJ1Y3R1cmU6OnJlbW92ZSk6CisgICAgICAgIChKU0M6OlN0cnVjdHVyZTo6cmVt
b3ZlUHJvcGVydHlXaXRob3V0VHJhbnNpdGlvbik6CisgICAgICAgICogcnVudGltZS9TdHJ1Y3R1
cmVUcmFuc2l0aW9uVGFibGUuaDoKKyAgICAgICAgKEpTQzo6U3RydWN0dXJlVHJhbnNpdGlvblRh
YmxlOjpIYXNoOjpoYXNoKToKKyAgICAgICAgKiB0b29scy9KU0RvbGxhclZNLmNwcDoKKyAgICAg
ICAgKEpTQzo6SlNEb2xsYXJWTUhlbHBlcjo6ZnVuY3Rpb25HZXRTdHJ1Y3R1cmVUcmFuc2l0aW9u
TGlzdCk6CisgICAgICAgIChKU0M6OmZ1bmN0aW9uR2V0Q29uY3VycmVudGx5KToKKyAgICAgICAg
KEpTQzo6SlNEb2xsYXJWTTo6ZmluaXNoQ3JlYXRpb24pOgorCiAyMDIwLTAxLTI4ICBZdXN1a2Ug
U3V6dWtpICA8eXN1enVraUBhcHBsZS5jb20+CiAKICAgICAgICAgW0pTQ10gR2l2ZSB1cCBJQyB3
aGVuIHVua25vd24gc3RydWN0dXJlIHRyYW5zaXRpb24gaGFwcGVucwpkaWZmIC0tZ2l0IGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcElubGluZXMuaCBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9oZWFwL0hlYXBJbmxpbmVzLmgKaW5kZXggMTdmMjQxMThiODIyZWZiN2Y2NmVlMTI1OTUz
NzhmYTU4YzIxN2M2Mi4uN2FmMDU2M2IxMWViNmQ4YzE1MjJkNjIwOWZjNGMxOWQ1NTRhN2RjZiAx
MDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcElubGluZXMuaAorKysg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwSW5saW5lcy5oCkBAIC0xODgsNyArMTg4
LDcgQEAgaW5saW5lIHZvaWQgSGVhcDo6ZGVjcmVtZW50RGVmZXJyYWxEZXB0aEFuZEdDSWZOZWVk
ZWQoKQogICAgIEFTU0VSVCghVGhyZWFkOjptYXlCZUdDVGhyZWFkKCkgfHwgbV93b3JsZElzU3Rv
cHBlZCk7CiAgICAgbV9kZWZlcnJhbERlcHRoLS07CiAgICAgCi0gICAgaWYgKFVOTElLRUxZKG1f
ZGlkRGVmZXJHQ1dvcmspKSB7CisgICAgaWYgKFVOTElLRUxZKG1fZGlkRGVmZXJHQ1dvcmspIHx8
IE9wdGlvbnM6OmZvcmNlRGlkRGVmZXJHQ1dvcmsoKSkgewogICAgICAgICBkZWNyZW1lbnREZWZl
cnJhbERlcHRoQW5kR0NJZk5lZWRlZFNsb3coKTsKICAgICAgICAgCiAgICAgICAgIC8vIEhlcmUg
YXJlIHRoZSBwb3NzaWJsZSByZWxhdGlvbnNoaXBzIGJldHdlZW4gbV9kZWZlcnJhbERlcHRoIGFu
ZCBtX2RpZERlZmVyR0NXb3JrLgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSlNPYmplY3QuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNPYmpl
Y3QuY3BwCmluZGV4IGQ2N2JhOGQ1Y2E5NTY5ZDA0YTE5ZTUwMzY0NTMwNTk2YmE5ZDg4ZDIuLmFj
ZDI5ZGVkODEzNTFmYjI4NGIyMTU5YWQ0N2E2MzFjMzQ5NGYxZGYgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT2JqZWN0LmNwcAorKysgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9KU09iamVjdC5jcHAKQEAgLTIwMDEsMTIgKzIwMDEsMjIgQEAgYm9v
bCBKU09iamVjdDo6ZGVsZXRlUHJvcGVydHkoSlNDZWxsKiBjZWxsLCBKU0dsb2JhbE9iamVjdCog
Z2xvYmFsT2JqZWN0LCBQcm9wZXIKICAgICBpZiAocHJvcGVydHlJc1ByZXNlbnQpIHsKICAgICAg
ICAgaWYgKGF0dHJpYnV0ZXMgJiBQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udERlbGV0ZSAmJiB2bS5k
ZWxldGVQcm9wZXJ0eU1vZGUoKSAhPSBWTTo6RGVsZXRlUHJvcGVydHlNb2RlOjpJZ25vcmVDb25m
aWd1cmFibGUpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIERlZmVycmVkU3Ry
dWN0dXJlVHJhbnNpdGlvbldhdGNocG9pbnRGaXJlIGRlZmVycmVkV2F0Y2hwb2ludEZpcmUodm0s
IHN0cnVjdHVyZSk7CiAKLSAgICAgICAgUHJvcGVydHlPZmZzZXQgb2Zmc2V0OworICAgICAgICBQ
cm9wZXJ0eU9mZnNldCBvZmZzZXQgPSBpbnZhbGlkT2Zmc2V0OwogICAgICAgICBpZiAoc3RydWN0
dXJlLT5pc1VuY2FjaGVhYmxlRGljdGlvbmFyeSgpKQotICAgICAgICAgICAgb2Zmc2V0ID0gc3Ry
dWN0dXJlLT5yZW1vdmVQcm9wZXJ0eVdpdGhvdXRUcmFuc2l0aW9uKHZtLCBwcm9wZXJ0eU5hbWUs
IFtdIChjb25zdCBDb25jdXJyZW50SlNMb2NrZXImLCBQcm9wZXJ0eU9mZnNldCkgeyB9KTsKLSAg
ICAgICAgZWxzZQotICAgICAgICAgICAgdGhpc09iamVjdC0+c2V0U3RydWN0dXJlKHZtLCBTdHJ1
Y3R1cmU6OnJlbW92ZVByb3BlcnR5VHJhbnNpdGlvbih2bSwgc3RydWN0dXJlLCBwcm9wZXJ0eU5h
bWUsIG9mZnNldCkpOworICAgICAgICAgICAgb2Zmc2V0ID0gc3RydWN0dXJlLT5yZW1vdmVQcm9w
ZXJ0eVdpdGhvdXRUcmFuc2l0aW9uKHZtLCBwcm9wZXJ0eU5hbWUsIFtdIChjb25zdCBHQ1NhZmVD
b25jdXJyZW50SlNMb2NrZXImLCBQcm9wZXJ0eU9mZnNldCwgUHJvcGVydHlPZmZzZXQpIHsgfSk7
CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgc3RydWN0dXJlID0gU3RydWN0dXJlOjpyZW1v
dmVQcm9wZXJ0eVRyYW5zaXRpb24odm0sIHN0cnVjdHVyZSwgcHJvcGVydHlOYW1lLCBvZmZzZXQs
ICZkZWZlcnJlZFdhdGNocG9pbnRGaXJlKTsKKyAgICAgICAgICAgIGlmICh0aGlzT2JqZWN0LT5t
X2J1dHRlcmZseSAmJiAhc3RydWN0dXJlLT5vdXRPZkxpbmVDYXBhY2l0eSgpICYmICFzdHJ1Y3R1
cmUtPmhhc0luZGV4aW5nSGVhZGVyKHRoaXNPYmplY3QpKSB7CisgICAgICAgICAgICAgICAgdGhp
c09iamVjdC0+bnVrZVN0cnVjdHVyZUFuZFNldEJ1dHRlcmZseSh2bSwgdGhpc09iamVjdC0+c3Ry
dWN0dXJlSUQoKSwgbnVsbHB0cik7CisgICAgICAgICAgICAgICAgb2Zmc2V0ID0gaW52YWxpZE9m
ZnNldDsKKyAgICAgICAgICAgICAgICBBU1NFUlQoc3RydWN0dXJlLT5tYXhPZmZzZXQoKSA9PSBp
bnZhbGlkT2Zmc2V0KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHRoaXNPYmplY3QtPnNl
dFN0cnVjdHVyZSh2bSwgc3RydWN0dXJlKTsKKyAgICAgICAgfQorCisgICAgICAgIEFTU0VSVCgh
aXNWYWxpZE9mZnNldChzdHJ1Y3R1cmUtPmdldCh2bSwgcHJvcGVydHlOYW1lLCBhdHRyaWJ1dGVz
KSkpOwogCiAgICAgICAgIGlmIChvZmZzZXQgIT0gaW52YWxpZE9mZnNldCkKICAgICAgICAgICAg
IHRoaXNPYmplY3QtPmxvY2F0aW9uRm9yT2Zmc2V0KG9mZnNldCktPmNsZWFyKCk7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PcHRpb25zTGlzdC5oIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9uc0xpc3QuaAppbmRleCA1N2MyZDJkMmFkMTlh
ODEyNjVjYjBmMGMzMjNhMzA0Y2UwNzZlM2VmLi5mMzU2ZDU5ODc4NjVkZjcwNWM5Mjk2Nzg5MzI3
MTMxNWRlYTBhNWRkIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9P
cHRpb25zTGlzdC5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09wdGlvbnNM
aXN0LmgKQEAgLTM0Nyw2ICszNDcsNyBAQCBjb25zdGV4cHIgYm9vbCBlbmFibGVXZWJBc3NlbWJs
eVN0cmVhbWluZ0FwaSA9IGZhbHNlOwogICAgIHYoQm9vbCwgdXNlR0MsIHRydWUsIE5vcm1hbCwg
bnVsbHB0cikgXAogICAgIHYoQm9vbCwgZ2NBdEVuZCwgZmFsc2UsIE5vcm1hbCwgIklmIHRydWUs
IHRoZSBqc2MgQ0xJIHdpbGwgZG8gYSBHQyBiZWZvcmUgZXhpdGluZyIpIFwKICAgICB2KEJvb2ws
IGZvcmNlR0NTbG93UGF0aHMsIGZhbHNlLCBOb3JtYWwsICJJZiB0cnVlLCB3ZSB3aWxsIGZvcmNl
IGFsbCBKSVQgZmFzdCBhbGxvY2F0aW9ucyBkb3duIHRoZWlyIHNsb3cgcGF0aHMuIikgXAorICAg
IHYoQm9vbCwgZm9yY2VEaWREZWZlckdDV29yaywgZmFsc2UsIE5vcm1hbCwgIklmIHRydWUsIHdl
IHdpbGwgZm9yY2UgYWxsIERlZmVyR0MgZGVzdHJ1Y3Rpb25zIHRvIHBlcmZvcm0gYSBHQy4iKSBc
CiAgICAgdihVbnNpZ25lZCwgZ2NNYXhIZWFwU2l6ZSwgMCwgTm9ybWFsLCBudWxscHRyKSBcCiAg
ICAgdihVbnNpZ25lZCwgZm9yY2VSQU1TaXplLCAwLCBOb3JtYWwsIG51bGxwdHIpIFwKICAgICB2
KEJvb2wsIHJlY29yZEdDUGF1c2VUaW1lcywgZmFsc2UsIE5vcm1hbCwgbnVsbHB0cikgXApkaWZm
IC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUHJvcGVydHlNYXBIYXNoVGFi
bGUuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Byb3BlcnR5TWFwSGFzaFRhYmxl
LmgKaW5kZXggY2I2MDE1Y2YyMGU0NTMwMTE1OWJiMDBkNzQyNjIzNzRmZWVjYjljZi4uNTEzMmRl
ODVkMGY2NmIyZmExZmQzMjNmYWIxOGQwNmU4ODFkZWZkNCAxMDA2NDQKLS0tIGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvUHJvcGVydHlNYXBIYXNoVGFibGUuaAorKysgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9Qcm9wZXJ0eU1hcEhhc2hUYWJsZS5oCkBAIC0xNjksOCAr
MTY5LDcgQEAgcHVibGljOgogICAgIGZpbmRfaXRlcmF0b3IgZmluZChjb25zdCBLZXlUeXBlJik7
CiAgICAgVmFsdWVUeXBlKiBnZXQoY29uc3QgS2V5VHlwZSYpOwogICAgIC8vIEFkZCBhIHZhbHVl
IHRvIHRoZSB0YWJsZQotICAgIGVudW0gRWZmZWN0T25Qcm9wZXJ0eU9mZnNldCB7IFByb3BlcnR5
T2Zmc2V0TWF5Q2hhbmdlLCBQcm9wZXJ0eU9mZnNldE11c3ROb3RDaGFuZ2UgfTsKLSAgICBzdGQ6
OnBhaXI8ZmluZF9pdGVyYXRvciwgYm9vbD4gYWRkKGNvbnN0IFZhbHVlVHlwZSYgZW50cnksIFBy
b3BlcnR5T2Zmc2V0JiwgRWZmZWN0T25Qcm9wZXJ0eU9mZnNldCk7CisgICAgc3RkOjpwYWlyPGZp
bmRfaXRlcmF0b3IsIGJvb2w+IFdBUk5fVU5VU0VEX1JFVFVSTiBhZGQoY29uc3QgVmFsdWVUeXBl
JiBlbnRyeSk7CiAgICAgLy8gUmVtb3ZlIGEgdmFsdWUgZnJvbSB0aGUgdGFibGUuCiAgICAgdm9p
ZCByZW1vdmUoY29uc3QgZmluZF9pdGVyYXRvciYgaXRlcik7CiAgICAgdm9pZCByZW1vdmUoY29u
c3QgS2V5VHlwZSYga2V5KTsKQEAgLTMyMSw2ICszMjAsNyBAQCBpbmxpbmUgUHJvcGVydHlUYWJs
ZTo6VmFsdWVUeXBlKiBQcm9wZXJ0eVRhYmxlOjpnZXQoY29uc3QgS2V5VHlwZSYga2V5KQogewog
ICAgIEFTU0VSVChrZXkpOwogICAgIEFTU0VSVChrZXktPmlzQXRvbSgpIHx8IGtleS0+aXNTeW1i
b2woKSk7CisgICAgQVNTRVJUKGtleSAhPSBQUk9QRVJUWV9NQVBfREVMRVRFRF9FTlRSWV9LRVkp
OwogCiAgICAgaWYgKCFtX2tleUNvdW50KQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKQEAgLTMz
NSw4ICszMzUsMTAgQEAgaW5saW5lIFByb3BlcnR5VGFibGU6OlZhbHVlVHlwZSogUHJvcGVydHlU
YWJsZTo6Z2V0KGNvbnN0IEtleVR5cGUmIGtleSkKICAgICAgICAgdW5zaWduZWQgZW50cnlJbmRl
eCA9IG1faW5kZXhbaGFzaCAmIG1faW5kZXhNYXNrXTsKICAgICAgICAgaWYgKGVudHJ5SW5kZXgg
PT0gRW1wdHlFbnRyeUluZGV4KQogICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgICAg
IGlmIChrZXkgPT0gdGFibGUoKVtlbnRyeUluZGV4IC0gMV0ua2V5KQorICAgICAgICBpZiAoa2V5
ID09IHRhYmxlKClbZW50cnlJbmRleCAtIDFdLmtleSkgeworICAgICAgICAgICAgQVNTRVJUKCFt
X2RlbGV0ZWRPZmZzZXRzIHx8ICFtX2RlbGV0ZWRPZmZzZXRzLT5jb250YWlucyh0YWJsZSgpW2Vu
dHJ5SW5kZXggLSAxXS5vZmZzZXQpKTsKICAgICAgICAgICAgIHJldHVybiAmdGFibGUoKVtlbnRy
eUluZGV4IC0gMV07CisgICAgICAgIH0KIAogI2lmIERVTVBfUFJPUEVSVFlNQVBfU1RBVFMKICAg
ICAgICAgKytwcm9wZXJ0eU1hcEhhc2hUYWJsZVN0YXRzLT5udW1Mb29rdXBQcm9iaW5nOwpAQCAt
MzQ2LDE0ICszNDgsMjEgQEAgaW5saW5lIFByb3BlcnR5VGFibGU6OlZhbHVlVHlwZSogUHJvcGVy
dHlUYWJsZTo6Z2V0KGNvbnN0IEtleVR5cGUmIGtleSkKICAgICB9CiB9CiAKLWlubGluZSBzdGQ6
OnBhaXI8UHJvcGVydHlUYWJsZTo6ZmluZF9pdGVyYXRvciwgYm9vbD4gUHJvcGVydHlUYWJsZTo6
YWRkKGNvbnN0IFZhbHVlVHlwZSYgZW50cnksIFByb3BlcnR5T2Zmc2V0JiBvZmZzZXQsIEVmZmVj
dE9uUHJvcGVydHlPZmZzZXQgb2Zmc2V0RWZmZWN0KQoraW5saW5lIHN0ZDo6cGFpcjxQcm9wZXJ0
eVRhYmxlOjpmaW5kX2l0ZXJhdG9yLCBib29sPiBXQVJOX1VOVVNFRF9SRVRVUk4gUHJvcGVydHlU
YWJsZTo6YWRkKGNvbnN0IFZhbHVlVHlwZSYgZW50cnkpCiB7CisgICAgQVNTRVJUKCFtX2RlbGV0
ZWRPZmZzZXRzIHx8ICFtX2RlbGV0ZWRPZmZzZXRzLT5jb250YWlucyhlbnRyeS5vZmZzZXQpKTsK
KwogICAgIC8vIExvb2sgZm9yIGEgdmFsdWUgd2l0aCBhIG1hdGNoaW5nIGtleSBhbHJlYWR5IGlu
IHRoZSBhcnJheS4KICAgICBmaW5kX2l0ZXJhdG9yIGl0ZXIgPSBmaW5kKGVudHJ5LmtleSk7Ci0g
ICAgaWYgKGl0ZXIuZmlyc3QpIHsKLSAgICAgICAgUkVMRUFTRV9BU1NFUlQoaXRlci5maXJzdC0+
b2Zmc2V0IDw9IG9mZnNldCk7CisgICAgaWYgKGl0ZXIuZmlyc3QpCiAgICAgICAgIHJldHVybiBz
dGQ6Om1ha2VfcGFpcihpdGVyLCBmYWxzZSk7CisKKyNpZm5kZWYgTkRFQlVHCisgICAgZm9yIChh
dXRvJiBvdGhlciA6ICp0aGlzKSB7CisgICAgICAgIEFTU0VSVChvdGhlci5vZmZzZXQgIT0gZW50
cnkub2Zmc2V0KTsKKyAgICAgICAgQVNTRVJUKG90aGVyLmtleSAhPSBlbnRyeS5rZXkpOwogICAg
IH0KKyNlbmRpZgogCiAjaWYgRFVNUF9QUk9QRVJUWU1BUF9TVEFUUwogICAgICsrcHJvcGVydHlN
YXBIYXNoVGFibGVTdGF0cy0+bnVtQWRkczsKQEAgLTM3NywxMSArMzg2LDYgQEAgaW5saW5lIHN0
ZDo6cGFpcjxQcm9wZXJ0eVRhYmxlOjpmaW5kX2l0ZXJhdG9yLCBib29sPiBQcm9wZXJ0eVRhYmxl
OjphZGQoY29uc3QgVmEKIAogICAgICsrbV9rZXlDb3VudDsKICAgICAKLSAgICBpZiAob2Zmc2V0
RWZmZWN0ID09IFByb3BlcnR5T2Zmc2V0TWF5Q2hhbmdlKQotICAgICAgICBvZmZzZXQgPSBzdGQ6
Om1heChvZmZzZXQsIGVudHJ5Lm9mZnNldCk7Ci0gICAgZWxzZQotICAgICAgICBSRUxFQVNFX0FT
U0VSVChvZmZzZXQgPj0gZW50cnkub2Zmc2V0KTsKLSAgICAKICAgICByZXR1cm4gc3RkOjptYWtl
X3BhaXIoaXRlciwgdHJ1ZSk7CiB9CiAKQEAgLTQ1MSw2ICs0NTUsNyBAQCBpbmxpbmUgdm9pZCBQ
cm9wZXJ0eVRhYmxlOjphZGREZWxldGVkT2Zmc2V0KFByb3BlcnR5T2Zmc2V0IG9mZnNldCkKIHsK
ICAgICBpZiAoIW1fZGVsZXRlZE9mZnNldHMpCiAgICAgICAgIG1fZGVsZXRlZE9mZnNldHMgPSBt
YWtlVW5pcXVlPFZlY3RvcjxQcm9wZXJ0eU9mZnNldD4+KCk7CisgICAgQVNTRVJUKCFtX2RlbGV0
ZWRPZmZzZXRzLT5jb250YWlucyhvZmZzZXQpKTsKICAgICBtX2RlbGV0ZWRPZmZzZXRzLT5hcHBl
bmQob2Zmc2V0KTsKIH0KIApAQCAtNDg5LDYgKzQ5NCwxMyBAQCBpbmxpbmUgdm9pZCBQcm9wZXJ0
eVRhYmxlOjpyZWluc2VydChjb25zdCBWYWx1ZVR5cGUmIGVudHJ5KQogICAgICsrcHJvcGVydHlN
YXBIYXNoVGFibGVTdGF0cy0+bnVtUmVpbnNlcnRzOwogI2VuZGlmCiAKKyNpZm5kZWYgTkRFQlVH
CisgICAgZm9yIChhdXRvJiBvdGhlciA6ICp0aGlzKSB7CisgICAgICAgIEFTU0VSVChvdGhlci5v
ZmZzZXQgIT0gZW50cnkub2Zmc2V0KTsKKyAgICAgICAgQVNTRVJUKG90aGVyLmtleSAhPSBlbnRy
eS5rZXkpOworICAgIH0KKyNlbmRpZgorCiAgICAgLy8gVXNlZCB0byBpbnNlcnQgYSB2YWx1ZSBr
bm93biBub3QgdG8gYmUgaW4gdGhlIHRhYmxlLCBhbmQgd2hlcmUKICAgICAvLyB3ZSBrbm93IGNh
cGFjaXR5IHRvIGJlIGF2YWlsYWJsZS4KICAgICBBU1NFUlQoY2FuSW5zZXJ0KCkpOwpkaWZmIC0t
Z2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlLmNwcCBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZS5jcHAKaW5kZXggM2UxNGY4YjZhMzNi
ZWRkY2NmMGViYTFkMmYyOTFiNzc1ODc5NGZhOS4uY2MzYmJlZmYxM2VhOGExZTgyMjBiZjY0ZTI5
MjJiNTZhZDExNzIxMyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
U3RydWN0dXJlLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1
cmUuY3BwCkBAIC04NywyMiArODcsMjIgQEAgaW5saW5lIHZvaWQgU3RydWN0dXJlVHJhbnNpdGlv
blRhYmxlOjpzZXRTaW5nbGVUcmFuc2l0aW9uKFN0cnVjdHVyZSogc3RydWN0dXJlKQogICAgIG1f
ZGF0YSA9IGJpdHdpc2VfY2FzdDxpbnRwdHJfdD4oaW1wbCkgfCBVc2luZ1NpbmdsZVNsb3RGbGFn
OwogfQogCi1ib29sIFN0cnVjdHVyZVRyYW5zaXRpb25UYWJsZTo6Y29udGFpbnMoVW5pcXVlZFN0
cmluZ0ltcGwqIHJlcCwgdW5zaWduZWQgYXR0cmlidXRlcykgY29uc3QKK2Jvb2wgU3RydWN0dXJl
VHJhbnNpdGlvblRhYmxlOjpjb250YWlucyhVbmlxdWVkU3RyaW5nSW1wbCogcmVwLCB1bnNpZ25l
ZCBhdHRyaWJ1dGVzLCBib29sIGlzQWRkaXRpb24pIGNvbnN0CiB7CiAgICAgaWYgKGlzVXNpbmdT
aW5nbGVTbG90KCkpIHsKICAgICAgICAgU3RydWN0dXJlKiB0cmFuc2l0aW9uID0gc2luZ2xlVHJh
bnNpdGlvbigpOwotICAgICAgICByZXR1cm4gdHJhbnNpdGlvbiAmJiB0cmFuc2l0aW9uLT5tX3Ry
YW5zaXRpb25Qcm9wZXJ0eU5hbWUgPT0gcmVwICYmIHRyYW5zaXRpb24tPnRyYW5zaXRpb25Qcm9w
ZXJ0eUF0dHJpYnV0ZXMoKSA9PSBhdHRyaWJ1dGVzOworICAgICAgICByZXR1cm4gdHJhbnNpdGlv
biAmJiB0cmFuc2l0aW9uLT5tX3RyYW5zaXRpb25Qcm9wZXJ0eU5hbWUgPT0gcmVwICYmIHRyYW5z
aXRpb24tPnRyYW5zaXRpb25Qcm9wZXJ0eUF0dHJpYnV0ZXMoKSA9PSBhdHRyaWJ1dGVzICYmIHRy
YW5zaXRpb24tPmlzUHJvcGVydHlEZWxldGlvblRyYW5zaXRpb24oKSA9PSAhaXNBZGRpdGlvbjsK
ICAgICB9Ci0gICAgcmV0dXJuIG1hcCgpLT5nZXQoc3RkOjptYWtlX3BhaXIocmVwLCBhdHRyaWJ1
dGVzKSk7CisgICAgcmV0dXJuIG1hcCgpLT5nZXQoc3RkOjptYWtlX3R1cGxlKHJlcCwgYXR0cmli
dXRlcywgaXNBZGRpdGlvbikpOwogfQogCi1pbmxpbmUgU3RydWN0dXJlKiBTdHJ1Y3R1cmVUcmFu
c2l0aW9uVGFibGU6OmdldChVbmlxdWVkU3RyaW5nSW1wbCogcmVwLCB1bnNpZ25lZCBhdHRyaWJ1
dGVzKSBjb25zdAoraW5saW5lIFN0cnVjdHVyZSogU3RydWN0dXJlVHJhbnNpdGlvblRhYmxlOjpn
ZXQoVW5pcXVlZFN0cmluZ0ltcGwqIHJlcCwgdW5zaWduZWQgYXR0cmlidXRlcywgYm9vbCBpc0Fk
ZGl0aW9uKSBjb25zdAogewogICAgIGlmIChpc1VzaW5nU2luZ2xlU2xvdCgpKSB7CiAgICAgICAg
IFN0cnVjdHVyZSogdHJhbnNpdGlvbiA9IHNpbmdsZVRyYW5zaXRpb24oKTsKLSAgICAgICAgcmV0
dXJuICh0cmFuc2l0aW9uICYmIHRyYW5zaXRpb24tPm1fdHJhbnNpdGlvblByb3BlcnR5TmFtZSA9
PSByZXAgJiYgdHJhbnNpdGlvbi0+dHJhbnNpdGlvblByb3BlcnR5QXR0cmlidXRlcygpID09IGF0
dHJpYnV0ZXMpID8gdHJhbnNpdGlvbiA6IDA7CisgICAgICAgIHJldHVybiAodHJhbnNpdGlvbiAm
JiB0cmFuc2l0aW9uLT5tX3RyYW5zaXRpb25Qcm9wZXJ0eU5hbWUgPT0gcmVwICYmIHRyYW5zaXRp
b24tPnRyYW5zaXRpb25Qcm9wZXJ0eUF0dHJpYnV0ZXMoKSA9PSBhdHRyaWJ1dGVzICYmIHRyYW5z
aXRpb24tPmlzUHJvcGVydHlEZWxldGlvblRyYW5zaXRpb24oKSA9PSAhaXNBZGRpdGlvbikgPyB0
cmFuc2l0aW9uIDogMDsKICAgICB9Ci0gICAgcmV0dXJuIG1hcCgpLT5nZXQoc3RkOjptYWtlX3Bh
aXIocmVwLCBhdHRyaWJ1dGVzKSk7CisgICAgcmV0dXJuIG1hcCgpLT5nZXQoc3RkOjptYWtlX3R1
cGxlKHJlcCwgYXR0cmlidXRlcywgaXNBZGRpdGlvbikpOwogfQogCiB2b2lkIFN0cnVjdHVyZVRy
YW5zaXRpb25UYWJsZTo6YWRkKFZNJiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUpCkBAIC0xMjcs
NyArMTI3LDcgQEAgdm9pZCBTdHJ1Y3R1cmVUcmFuc2l0aW9uVGFibGU6OmFkZChWTSYgdm0sIFN0
cnVjdHVyZSogc3RydWN0dXJlKQogICAgIC8vIE5ld2VyIHZlcnNpb25zIG9mIHRoZSBTVEwgaGF2
ZSBhbiBzdGQ6Om1ha2VfcGFpciBmdW5jdGlvbiB0aGF0IHRha2VzIHJ2YWx1ZSByZWZlcmVuY2Vz
LgogICAgIC8vIFdoZW4gZWl0aGVyIG9mIHRoZSBwYXJhbWV0ZXJzIGFyZSBiaXRmaWVsZHMsIHRo
ZSBDKysgY29tcGlsZXIgd2lsbCB0cnkgdG8gYmluZCB0aGVtIGFzIGx2YWx1ZXMsIHdoaWNoIGlz
IGludmFsaWQuIFRvIHdvcmsgYXJvdW5kIHRoaXMsIHVzZSB1bmFyeSAiKyIgdG8gbWFrZSB0aGUg
cGFyYW1ldGVyIGFuIHJ2YWx1ZS4KICAgICAvLyBTZWUgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTU5MjYxIGZvciBtb3JlIGRldGFpbHMKLSAgICBtYXAoKS0+c2V0KHN0
ZDo6bWFrZV9wYWlyKHN0cnVjdHVyZS0+bV90cmFuc2l0aW9uUHJvcGVydHlOYW1lLmdldCgpLCAr
c3RydWN0dXJlLT50cmFuc2l0aW9uUHJvcGVydHlBdHRyaWJ1dGVzKCkpLCBzdHJ1Y3R1cmUpOwor
ICAgIG1hcCgpLT5zZXQoc3RkOjptYWtlX3R1cGxlKHN0cnVjdHVyZS0+bV90cmFuc2l0aW9uUHJv
cGVydHlOYW1lLmdldCgpLCArc3RydWN0dXJlLT50cmFuc2l0aW9uUHJvcGVydHlBdHRyaWJ1dGVz
KCksICFzdHJ1Y3R1cmUtPmlzUHJvcGVydHlEZWxldGlvblRyYW5zaXRpb24oKSksIHN0cnVjdHVy
ZSk7CiB9CiAKIHZvaWQgU3RydWN0dXJlOjpkdW1wU3RhdGlzdGljcygpCkBAIC0yMDAsNyArMjAw
LDggQEAgU3RydWN0dXJlOjpTdHJ1Y3R1cmUoVk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFs
T2JqZWN0LCBKU1ZhbHVlIHByb3RvdHlwZSwgY28KICAgICBzZXRTdGF0aWNQcm9wZXJ0aWVzUmVp
ZmllZChmYWxzZSk7CiAgICAgc2V0VHJhbnNpdGlvbldhdGNocG9pbnRJc0xpa2VseVRvQmVGaXJl
ZChmYWxzZSk7CiAgICAgc2V0SGFzQmVlbkRpY3Rpb25hcnkoZmFsc2UpOwotICAgIHNldElzQWRk
aW5nUHJvcGVydHlGb3JUcmFuc2l0aW9uKGZhbHNlKTsKKyAgICBzZXRQcm90ZWN0UHJvcGVydHlU
YWJsZVdoaWxlVHJhbnNpdGlvbmluZyhmYWxzZSk7CisgICAgc2V0SXNQcm9wZXJ0eURlbGV0aW9u
VHJhbnNpdGlvbihmYWxzZSk7CiAgICAgc2V0VHJhbnNpdGlvbk9mZnNldCh2bSwgaW52YWxpZE9m
ZnNldCk7CiAgICAgc2V0TWF4T2Zmc2V0KHZtLCBpbnZhbGlkT2Zmc2V0KTsKICAKQEAgLTIzNiw3
ICsyMzcsOCBAQCBTdHJ1Y3R1cmU6OlN0cnVjdHVyZShWTSYgdm0pCiAgICAgc2V0U3RhdGljUHJv
cGVydGllc1JlaWZpZWQoZmFsc2UpOwogICAgIHNldFRyYW5zaXRpb25XYXRjaHBvaW50SXNMaWtl
bHlUb0JlRmlyZWQoZmFsc2UpOwogICAgIHNldEhhc0JlZW5EaWN0aW9uYXJ5KGZhbHNlKTsKLSAg
ICBzZXRJc0FkZGluZ1Byb3BlcnR5Rm9yVHJhbnNpdGlvbihmYWxzZSk7CisgICAgc2V0UHJvdGVj
dFByb3BlcnR5VGFibGVXaGlsZVRyYW5zaXRpb25pbmcoZmFsc2UpOworICAgIHNldElzUHJvcGVy
dHlEZWxldGlvblRyYW5zaXRpb24oZmFsc2UpOwogICAgIHNldFRyYW5zaXRpb25PZmZzZXQodm0s
IGludmFsaWRPZmZzZXQpOwogICAgIHNldE1heE9mZnNldCh2bSwgaW52YWxpZE9mZnNldCk7CiAg
CkBAIC0yNzIsNyArMjc0LDggQEAgU3RydWN0dXJlOjpTdHJ1Y3R1cmUoVk0mIHZtLCBTdHJ1Y3R1
cmUqIHByZXZpb3VzLCBEZWZlcnJlZFN0cnVjdHVyZVRyYW5zaXRpb25XYXQKICAgICBzZXREaWRU
cmFuc2l0aW9uKHRydWUpOwogICAgIHNldFN0YXRpY1Byb3BlcnRpZXNSZWlmaWVkKHByZXZpb3Vz
LT5zdGF0aWNQcm9wZXJ0aWVzUmVpZmllZCgpKTsKICAgICBzZXRIYXNCZWVuRGljdGlvbmFyeShw
cmV2aW91cy0+aGFzQmVlbkRpY3Rpb25hcnkoKSk7Ci0gICAgc2V0SXNBZGRpbmdQcm9wZXJ0eUZv
clRyYW5zaXRpb24oZmFsc2UpOworICAgIHNldFByb3RlY3RQcm9wZXJ0eVRhYmxlV2hpbGVUcmFu
c2l0aW9uaW5nKGZhbHNlKTsKKyAgICBzZXRJc1Byb3BlcnR5RGVsZXRpb25UcmFuc2l0aW9uKGZh
bHNlKTsKICAgICBzZXRUcmFuc2l0aW9uT2Zmc2V0KHZtLCBpbnZhbGlkT2Zmc2V0KTsKICAgICBz
ZXRNYXhPZmZzZXQodm0sIGludmFsaWRPZmZzZXQpOwogIApAQCAtMzU2LDcgKzM1OSw3IEBAIHZv
aWQgU3RydWN0dXJlOjpmaW5kU3RydWN0dXJlc0FuZE1hcEZvck1hdGVyaWFsaXphdGlvbihWZWN0
b3I8U3RydWN0dXJlKiwgOD4mIHN0CiBQcm9wZXJ0eVRhYmxlKiBTdHJ1Y3R1cmU6Om1hdGVyaWFs
aXplUHJvcGVydHlUYWJsZShWTSYgdm0sIGJvb2wgc2V0UHJvcGVydHlUYWJsZSkKIHsKICAgICBB
U1NFUlQoc3RydWN0dXJlKHZtKS0+Y2xhc3NJbmZvKCkgPT0gaW5mbygpKTsKLSAgICBBU1NFUlQo
IWlzQWRkaW5nUHJvcGVydHlGb3JUcmFuc2l0aW9uKCkpOworICAgIEFTU0VSVCghcHJvdGVjdFBy
b3BlcnR5VGFibGVXaGlsZVRyYW5zaXRpb25pbmcoKSk7CiAgICAgCiAgICAgRGVmZXJHQyBkZWZl
ckdDKHZtLmhlYXApOwogICAgIApAQCAtMzg0LDEwICszODcsMTkgQEAgUHJvcGVydHlUYWJsZSog
U3RydWN0dXJlOjptYXRlcmlhbGl6ZVByb3BlcnR5VGFibGUoVk0mIHZtLCBib29sIHNldFByb3Bl
cnR5VGFibGUKICAgICAgICAgc3RydWN0dXJlID0gc3RydWN0dXJlc1tpXTsKICAgICAgICAgaWYg
KCFzdHJ1Y3R1cmUtPm1fdHJhbnNpdGlvblByb3BlcnR5TmFtZSkKICAgICAgICAgICAgIGNvbnRp
bnVlOwotICAgICAgICBBU1NFUlQoaSA9PSBzdHJ1Y3R1cmVzLnNpemUoKSAtIDEgfHwgc3RydWN0
dXJlLT5tYXhPZmZzZXQoKSA+IHN0cnVjdHVyZXNbaSArIDFdLT5tYXhPZmZzZXQoKSk7CisgICAg
ICAgIGlmIChzdHJ1Y3R1cmUtPmlzUHJvcGVydHlEZWxldGlvblRyYW5zaXRpb24oKSkgeworICAg
ICAgICAgICAgYXV0byBpdGVtID0gdGFibGUtPmZpbmQoc3RydWN0dXJlLT5tX3RyYW5zaXRpb25Q
cm9wZXJ0eU5hbWUuZ2V0KCkpOworICAgICAgICAgICAgQVNTRVJUKGl0ZW0uZmlyc3QpOworICAg
ICAgICAgICAgdGFibGUtPnJlbW92ZShpdGVtKTsKKyAgICAgICAgICAgIHRhYmxlLT5hZGREZWxl
dGVkT2Zmc2V0KHN0cnVjdHVyZS0+dHJhbnNpdGlvbk9mZnNldCgpKTsKKyAgICAgICAgICAgIGNv
bnRpbnVlOworICAgICAgICB9CiAgICAgICAgIFByb3BlcnR5TWFwRW50cnkgZW50cnkoc3RydWN0
dXJlLT5tX3RyYW5zaXRpb25Qcm9wZXJ0eU5hbWUuZ2V0KCksIHN0cnVjdHVyZS0+dHJhbnNpdGlv
bk9mZnNldCgpLCBzdHJ1Y3R1cmUtPnRyYW5zaXRpb25Qcm9wZXJ0eUF0dHJpYnV0ZXMoKSk7Ci0g
ICAgICAgIGF1dG8gbWF4T2Zmc2V0ID0gdGhpcy0+bWF4T2Zmc2V0KCk7Ci0gICAgICAgIHRhYmxl
LT5hZGQoZW50cnksIG1heE9mZnNldCwgUHJvcGVydHlUYWJsZTo6UHJvcGVydHlPZmZzZXRNdXN0
Tm90Q2hhbmdlKTsKKyAgICAgICAgYXV0byBuZXh0T2Zmc2V0ID0gdGFibGUtPm5leHRPZmZzZXQo
c3RydWN0dXJlLT5pbmxpbmVDYXBhY2l0eSgpKTsKKyAgICAgICAgQVNTRVJUX1VOVVNFRChuZXh0
T2Zmc2V0LCBuZXh0T2Zmc2V0ID09IHN0cnVjdHVyZS0+dHJhbnNpdGlvbk9mZnNldCgpKTsKKyAg
ICAgICAgYXV0byByZXN1bHQgPSB0YWJsZS0+YWRkKGVudHJ5KTsKKyAgICAgICAgQVNTRVJUX1VO
VVNFRChyZXN1bHQsIHJlc3VsdC5zZWNvbmQpOworICAgICAgICBBU1NFUlRfVU5VU0VEKHJlc3Vs
dCwgcmVzdWx0LmZpcnN0LmZpcnN0LT5vZmZzZXQgPT0gbmV4dE9mZnNldCk7CiAgICAgfQogICAg
IAogICAgIGNoZWNrT2Zmc2V0Q29uc2lzdGVuY3koCkBAIC00ODQsNyArNDk2LDYgQEAgU3RydWN0
dXJlKiBTdHJ1Y3R1cmU6OmFkZE5ld1Byb3BlcnR5VHJhbnNpdGlvbihWTSYgdm0sIFN0cnVjdHVy
ZSogc3RydWN0dXJlLCBQcm8KICAgICAgICAgU3RydWN0dXJlKiB0cmFuc2l0aW9uID0gdG9DYWNo
ZWFibGVEaWN0aW9uYXJ5VHJhbnNpdGlvbih2bSwgc3RydWN0dXJlLCBkZWZlcnJlZCk7CiAgICAg
ICAgIEFTU0VSVChzdHJ1Y3R1cmUgIT0gdHJhbnNpdGlvbik7CiAgICAgICAgIG9mZnNldCA9IHRy
YW5zaXRpb24tPmFkZCh2bSwgcHJvcGVydHlOYW1lLCBhdHRyaWJ1dGVzKTsKLSAgICAgICAgdHJh
bnNpdGlvbi0+c2V0VHJhbnNpdGlvbk9mZnNldCh2bSwgb2Zmc2V0KTsKICAgICAgICAgcmV0dXJu
IHRyYW5zaXRpb247CiAgICAgfQogICAgIApAQCAtNTAwLDEwICs1MTEsMTAgQEAgU3RydWN0dXJl
KiBTdHJ1Y3R1cmU6OmFkZE5ld1Byb3BlcnR5VHJhbnNpdGlvbihWTSYgdm0sIFN0cnVjdHVyZSog
c3RydWN0dXJlLCBQcm8KICAgICAvLyBIb2xkaW5nIHRoZSBsb2NrIGVuc3VyZXMgdGhhdCB3ZSBl
aXRoZXIgZG8gdGhpcyBiZWZvcmUgdGhlIEdDIHN0YXJ0cyBzY2FubmluZyB0aGUgc3RydWN0dXJl
LCBpbgogICAgIC8vIHdoaWNoIGNhc2UgdGhlIEdDIHdpbGwgbm90IGJsb3cgdGhlIHRhYmxlIGF3
YXksIG9yIHdlIGRvIGl0IGFmdGVyIHRoZSBHQyBhbHJlYWR5IHJhbiBpbiB3aGljaAogICAgIC8v
IGNhc2UgYWxsIGlzIHdlbGwuICBJZiBpdCB3YXNuJ3QgZm9yIHRoZSBsb2NrLCB0aGUgR0Mgd291
bGQgaGF2ZSBUT0NUT1U6IGlmIGNvdWxkIHJlYWQKLSAgICAvLyBpc0FkZGluZ1Byb3BlcnR5Rm9y
VHJhbnNpdGlvbiBiZWZvcmUgd2Ugc2V0IGl0IHRvIHRydWUsIGFuZCB0aGVuIGJsb3cgdGhlIHRh
YmxlIGF3YXkgYWZ0ZXIuCisgICAgLy8gcHJvdGVjdFByb3BlcnR5VGFibGVXaGlsZVRyYW5zaXRp
b25pbmcgYmVmb3JlIHdlIHNldCBpdCB0byB0cnVlLCBhbmQgdGhlbiBibG93IHRoZSB0YWJsZSBh
d2F5IGFmdGVyLgogICAgIHsKICAgICAgICAgQ29uY3VycmVudEpTTG9ja2VyIGxvY2tlcih0cmFu
c2l0aW9uLT5tX2xvY2spOwotICAgICAgICB0cmFuc2l0aW9uLT5zZXRJc0FkZGluZ1Byb3BlcnR5
Rm9yVHJhbnNpdGlvbih0cnVlKTsKKyAgICAgICAgdHJhbnNpdGlvbi0+c2V0UHJvdGVjdFByb3Bl
cnR5VGFibGVXaGlsZVRyYW5zaXRpb25pbmcodHJ1ZSk7CiAgICAgfQogCiAgICAgdHJhbnNpdGlv
bi0+bV9ibG9iLnNldEluZGV4aW5nTW9kZUluY2x1ZGluZ0hpc3Rvcnkoc3RydWN0dXJlLT5pbmRl
eGluZ01vZGVJbmNsdWRpbmdIaXN0b3J5KCkgJiB+Q29weU9uV3JpdGUpOwpAQCAtNTE4LDEyICs1
MjksMTEgQEAgU3RydWN0dXJlKiBTdHJ1Y3R1cmU6OmFkZE5ld1Byb3BlcnR5VHJhbnNpdGlvbihW
TSYgdm0sIFN0cnVjdHVyZSogc3RydWN0dXJlLCBQcm8KICAgICAvLyBOb3cgdGhhdCBldmVyeXRo
aW5nIGlzIGZpbmUgd2l0aCB0aGUgbmV3IHN0cnVjdHVyZSdzIGJvb2trZWVwaW5nLCB0aGUgR0Mg
aXMgZnJlZSB0byBibG93IHRoZQogICAgIC8vIHRhYmxlIGF3YXkgaWYgaXQgd2FudHMuIFdlIGNh
biBub3cgcmVidWlsZCBpdCBmaW5lLgogICAgIFdURjo6c3RvcmVTdG9yZUZlbmNlKCk7Ci0gICAg
dHJhbnNpdGlvbi0+c2V0SXNBZGRpbmdQcm9wZXJ0eUZvclRyYW5zaXRpb24oZmFsc2UpOworICAg
IHRyYW5zaXRpb24tPnNldFByb3RlY3RQcm9wZXJ0eVRhYmxlV2hpbGVUcmFuc2l0aW9uaW5nKGZh
bHNlKTsKIAogICAgIGNoZWNrT2Zmc2V0KHRyYW5zaXRpb24tPnRyYW5zaXRpb25PZmZzZXQoKSwg
dHJhbnNpdGlvbi0+aW5saW5lQ2FwYWNpdHkoKSk7CiAgICAgewotICAgICAgICBDb25jdXJyZW50
SlNMb2NrZXIgbG9ja2VyKHN0cnVjdHVyZS0+bV9sb2NrKTsKLSAgICAgICAgRGVmZXJHQyBkZWZl
ckdDKHZtLmhlYXApOworICAgICAgICBHQ1NhZmVDb25jdXJyZW50SlNMb2NrZXIgbG9ja2VyKHN0
cnVjdHVyZS0+bV9sb2NrLCB2bS5oZWFwKTsKICAgICAgICAgc3RydWN0dXJlLT5tX3RyYW5zaXRp
b25UYWJsZS5hZGQodm0sIHRyYW5zaXRpb24pOwogICAgIH0KICAgICB0cmFuc2l0aW9uLT5jaGVj
a09mZnNldENvbnNpc3RlbmN5KCk7CkBAIC01MzEsMjcgKzU0MSw4NCBAQCBTdHJ1Y3R1cmUqIFN0
cnVjdHVyZTo6YWRkTmV3UHJvcGVydHlUcmFuc2l0aW9uKFZNJiB2bSwgU3RydWN0dXJlKiBzdHJ1
Y3R1cmUsIFBybwogICAgIHJldHVybiB0cmFuc2l0aW9uOwogfQogCi1TdHJ1Y3R1cmUqIFN0cnVj
dHVyZTo6cmVtb3ZlUHJvcGVydHlUcmFuc2l0aW9uKFZNJiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1
cmUsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIFByb3BlcnR5T2Zmc2V0JiBvZmZzZXQpCi17
Ci0gICAgLy8gTk9URTogVGhlcmUgYXJlIHNvbWUgZ29vZCByZWFzb25zIHdoeSB0aGlzIGdvZXMg
ZGlyZWN0bHkgdG8gdW5jYWNoZWFibGUgZGljdGlvbmFyeSByYXRoZXIgdGhhbgotICAgIC8vIGNh
Y2hpbmcgdGhlIHJlbW92YWwuIFdlIGNhbiBmaXggYWxsIG9mIHRoZXNlIHRoaW5ncywgYnV0IHdl
IG11c3QgcmVtZW1iZXIgdG8gZG8gc28sIGlmIHdlIGV2ZXIgdHJ5Ci0gICAgLy8gdG8gb3B0aW1p
emUgdGhpcyBjYXNlLgotICAgIC8vCi0gICAgLy8gLSBDYWNoZWQgdHJhbnNpdGlvbnMgdXN1YWxs
eSBzdGVhbCB0aGUgcHJvcGVydHkgdGFibGUsIGFuZCBhc3N1bWUgdGhhdCB0aGlzIGlzIHBvc3Np
YmxlIGJlY2F1c2UgdGhleQotICAgIC8vICAgY2FuIGp1c3QgcmVidWlsZCB0aGUgdGFibGUgYnkg
bG9va2luZyBhdCBwYXN0IHRyYW5zaXRpb25zLiBUaGF0IGNvZGUgYXNzdW1lcyB0aGF0IHRoZSB0
YWJsZSBvbmx5Ci0gICAgLy8gICBncmV3IGFuZCBuZXZlciBzaHJhbmsuIFRvIHN1cHBvcnQgcmVt
b3ZhbHMsIHdlJ2QgaGF2ZSB0byBjaGFuZ2UgdGhlIHByb3BlcnR5IHRhYmxlIG1hdGVyaWFsaXph
dGlvbgotICAgIC8vICAgY29kZSB0byBoYW5kbGUgZGVsZXRpb25zLiBBbHNvLCB3ZSBoYXZlIGxv
Z2ljIHRvIGdldCB0aGUgbGlzdCBvZiBwcm9wZXJ0aWVzIG9uIGEgc3RydWN0dXJlIHRoYXQKLSAg
ICAvLyAgIGxhY2tzIGEgcHJvcGVydHkgdGFibGUgYnkganVzdCBsb29raW5nIGJhY2sgdGhyb3Vn
aCB0aGUgc2V0IG9mIHRyYW5zaXRpb25zIHNpbmNlIHRoZSBsYXN0Ci0gICAgLy8gICBzdHJ1Y3R1
cmUgdGhhdCBoYWQgYSBwaW5uZWQgdGFibGUuIFRoYXQgbG9naWMgd291bGQgYWxzbyBoYXZlIHRv
IGJlIGNoYW5nZWQgdG8gaGFuZGxlIGNhY2hlZAotICAgIC8vICAgcmVtb3ZhbHMuCi0gICAgLy8K
K1N0cnVjdHVyZSogU3RydWN0dXJlOjpyZW1vdmVQcm9wZXJ0eVRyYW5zaXRpb24oVk0mIHZtLCBT
dHJ1Y3R1cmUqIHN0cnVjdHVyZSwgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwgUHJvcGVydHlP
ZmZzZXQmIG9mZnNldCwgRGVmZXJyZWRTdHJ1Y3R1cmVUcmFuc2l0aW9uV2F0Y2hwb2ludEZpcmUq
IGRlZmVycmVkKQoreworICAgIFN0cnVjdHVyZSogbmV3U3RydWN0dXJlID0gcmVtb3ZlUHJvcGVy
dHlUcmFuc2l0aW9uRnJvbUV4aXN0aW5nU3RydWN0dXJlKAorICAgICAgICB2bSwgc3RydWN0dXJl
LCBwcm9wZXJ0eU5hbWUsIG9mZnNldCwgZGVmZXJyZWQpOworICAgIGlmIChuZXdTdHJ1Y3R1cmUp
CisgICAgICAgIHJldHVybiBuZXdTdHJ1Y3R1cmU7CisKKyAgICByZXR1cm4gcmVtb3ZlTmV3UHJv
cGVydHlUcmFuc2l0aW9uKAorICAgICAgICB2bSwgc3RydWN0dXJlLCBwcm9wZXJ0eU5hbWUsIG9m
ZnNldCwgZGVmZXJyZWQpOworfQorCitTdHJ1Y3R1cmUqIFN0cnVjdHVyZTo6cmVtb3ZlUHJvcGVy
dHlUcmFuc2l0aW9uRnJvbUV4aXN0aW5nU3RydWN0dXJlKFZNJiB2bSwgU3RydWN0dXJlKiBzdHJ1
Y3R1cmUsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIFByb3BlcnR5T2Zmc2V0JiBvZmZzZXQs
IERlZmVycmVkU3RydWN0dXJlVHJhbnNpdGlvbldhdGNocG9pbnRGaXJlKikKK3sKKyAgICBBU1NF
UlQoIWlzQ29tcGlsYXRpb25UaHJlYWQoKSk7CiAgICAgQVNTRVJUKCFzdHJ1Y3R1cmUtPmlzVW5j
YWNoZWFibGVEaWN0aW9uYXJ5KCkpOworICAgIEFTU0VSVChzdHJ1Y3R1cmUtPmlzT2JqZWN0KCkp
OworCisgICAgdW5zaWduZWQgYXR0cmlidXRlczsKKyAgICBzdHJ1Y3R1cmUtPmdldCh2bSwgcHJv
cGVydHlOYW1lLCBhdHRyaWJ1dGVzKTsKKworICAgIGlmIChTdHJ1Y3R1cmUqIGV4aXN0aW5nVHJh
bnNpdGlvbiA9IHN0cnVjdHVyZS0+bV90cmFuc2l0aW9uVGFibGUuZ2V0KHByb3BlcnR5TmFtZS51
aWQoKSwgYXR0cmlidXRlcywgZmFsc2UpKSB7CisgICAgICAgIHZhbGlkYXRlT2Zmc2V0KGV4aXN0
aW5nVHJhbnNpdGlvbi0+dHJhbnNpdGlvbk9mZnNldCgpLCBleGlzdGluZ1RyYW5zaXRpb24tPmlu
bGluZUNhcGFjaXR5KCkpOworICAgICAgICBvZmZzZXQgPSBleGlzdGluZ1RyYW5zaXRpb24tPnRy
YW5zaXRpb25PZmZzZXQoKTsKKyAgICAgICAgcmV0dXJuIGV4aXN0aW5nVHJhbnNpdGlvbjsKKyAg
ICB9CiAKLSAgICBTdHJ1Y3R1cmUqIHRyYW5zaXRpb24gPSB0b1VuY2FjaGVhYmxlRGljdGlvbmFy
eVRyYW5zaXRpb24odm0sIHN0cnVjdHVyZSk7CisgICAgcmV0dXJuIG51bGxwdHI7Cit9CiAKLSAg
ICBvZmZzZXQgPSB0cmFuc2l0aW9uLT5yZW1vdmUocHJvcGVydHlOYW1lKTsKK1N0cnVjdHVyZSog
U3RydWN0dXJlOjpyZW1vdmVOZXdQcm9wZXJ0eVRyYW5zaXRpb24oVk0mIHZtLCBTdHJ1Y3R1cmUq
IHN0cnVjdHVyZSwgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwgUHJvcGVydHlPZmZzZXQmIG9m
ZnNldCwgRGVmZXJyZWRTdHJ1Y3R1cmVUcmFuc2l0aW9uV2F0Y2hwb2ludEZpcmUqIGRlZmVycmVk
KQoreworICAgIEFTU0VSVCghc3RydWN0dXJlLT5pc1VuY2FjaGVhYmxlRGljdGlvbmFyeSgpKTsK
KyAgICBBU1NFUlQoc3RydWN0dXJlLT5pc09iamVjdCgpKTsKKyAgICBBU1NFUlQoIVN0cnVjdHVy
ZTo6cmVtb3ZlUHJvcGVydHlUcmFuc2l0aW9uRnJvbUV4aXN0aW5nU3RydWN0dXJlKHZtLCBzdHJ1
Y3R1cmUsIHByb3BlcnR5TmFtZSwgb2Zmc2V0LCBkZWZlcnJlZCkpOworCisgICAgaW50IHRyYW5z
aXRpb25Db3VudCA9IDA7CisgICAgZm9yIChhdXRvKiBzID0gc3RydWN0dXJlOyBzOyBzID0gcy0+
cHJldmlvdXNJRCgpKQorICAgICAgICArK3RyYW5zaXRpb25Db3VudDsKIAorICAgIGlmICh0cmFu
c2l0aW9uQ291bnQgPiBzX21heFRyYW5zaXRpb25MZW5ndGgpIHsKKyAgICAgICAgQVNTRVJUKCFp
c0NvcHlPbldyaXRlKHN0cnVjdHVyZS0+aW5kZXhpbmdNb2RlKCkpKTsKKyAgICAgICAgU3RydWN0
dXJlKiB0cmFuc2l0aW9uID0gdG9VbmNhY2hlYWJsZURpY3Rpb25hcnlUcmFuc2l0aW9uKHZtLCBz
dHJ1Y3R1cmUsIGRlZmVycmVkKTsKKyAgICAgICAgQVNTRVJUKHN0cnVjdHVyZSAhPSB0cmFuc2l0
aW9uKTsKKyAgICAgICAgb2Zmc2V0ID0gdHJhbnNpdGlvbi0+cmVtb3ZlKHZtLCBwcm9wZXJ0eU5h
bWUpOworICAgICAgICByZXR1cm4gdHJhbnNpdGlvbjsKKyAgICB9CisKKyAgICBTdHJ1Y3R1cmUq
IHRyYW5zaXRpb24gPSBjcmVhdGUodm0sIHN0cnVjdHVyZSwgZGVmZXJyZWQpOworICAgIHRyYW5z
aXRpb24tPm1fY2FjaGVkUHJvdG90eXBlQ2hhaW4uc2V0TWF5QmVOdWxsKHZtLCB0cmFuc2l0aW9u
LCBzdHJ1Y3R1cmUtPm1fY2FjaGVkUHJvdG90eXBlQ2hhaW4uZ2V0KCkpOworCisgICAgLy8gV2hp
bGUgd2UgYXJlIGRlbGV0aW5nIHRoZSBwcm9wZXJ0eSwgd2UgbmVlZCB0byBtYWtlIHN1cmUgdGhl
IHRhYmxlIGlzIG5vdCBjbGVhcmVkLgorICAgIHsKKyAgICAgICAgQ29uY3VycmVudEpTTG9ja2Vy
IGxvY2tlcih0cmFuc2l0aW9uLT5tX2xvY2spOworICAgICAgICB0cmFuc2l0aW9uLT5zZXRQcm90
ZWN0UHJvcGVydHlUYWJsZVdoaWxlVHJhbnNpdGlvbmluZyh0cnVlKTsKKyAgICB9CisKKyAgICB0
cmFuc2l0aW9uLT5tX2Jsb2Iuc2V0SW5kZXhpbmdNb2RlSW5jbHVkaW5nSGlzdG9yeShzdHJ1Y3R1
cmUtPmluZGV4aW5nTW9kZUluY2x1ZGluZ0hpc3RvcnkoKSAmIH5Db3B5T25Xcml0ZSk7CisgICAg
dHJhbnNpdGlvbi0+bV90cmFuc2l0aW9uUHJvcGVydHlOYW1lID0gcHJvcGVydHlOYW1lLnVpZCgp
OworICAgIHRyYW5zaXRpb24tPnNldFByb3BlcnR5VGFibGUodm0sIHN0cnVjdHVyZS0+dGFrZVBy
b3BlcnR5VGFibGVPckNsb25lSWZQaW5uZWQodm0pKTsKKyAgICB0cmFuc2l0aW9uLT5zZXRNYXhP
ZmZzZXQodm0sIHN0cnVjdHVyZS0+bWF4T2Zmc2V0KCkpOworICAgIHRyYW5zaXRpb24tPnNldElz
UHJvcGVydHlEZWxldGlvblRyYW5zaXRpb24odHJ1ZSk7CisKKyAgICBvZmZzZXQgPSB0cmFuc2l0
aW9uLT5yZW1vdmUodm0sIHByb3BlcnR5TmFtZSk7CisgICAgQVNTRVJUKG9mZnNldCAhPSBpbnZh
bGlkT2Zmc2V0KTsKKyAgICB0cmFuc2l0aW9uLT5zZXRUcmFuc2l0aW9uT2Zmc2V0KHZtLCBvZmZz
ZXQpOworCisgICAgLy8gTm93IHRoYXQgZXZlcnl0aGluZyBpcyBmaW5lIHdpdGggdGhlIG5ldyBz
dHJ1Y3R1cmUncyBib29ra2VlcGluZywgdGhlIEdDIGlzIGZyZWUgdG8gYmxvdyB0aGUKKyAgICAv
LyB0YWJsZSBhd2F5IGlmIGl0IHdhbnRzLiBXZSBjYW4gbm93IHJlYnVpbGQgaXQgZmluZS4KKyAg
ICBXVEY6OnN0b3JlU3RvcmVGZW5jZSgpOworICAgIHRyYW5zaXRpb24tPnNldFByb3RlY3RQcm9w
ZXJ0eVRhYmxlV2hpbGVUcmFuc2l0aW9uaW5nKGZhbHNlKTsKKworICAgIGNoZWNrT2Zmc2V0KHRy
YW5zaXRpb24tPnRyYW5zaXRpb25PZmZzZXQoKSwgdHJhbnNpdGlvbi0+aW5saW5lQ2FwYWNpdHko
KSk7CisgICAgeworICAgICAgICBHQ1NhZmVDb25jdXJyZW50SlNMb2NrZXIgbG9ja2VyKHN0cnVj
dHVyZS0+bV9sb2NrLCB2bS5oZWFwKTsKKyAgICAgICAgc3RydWN0dXJlLT5tX3RyYW5zaXRpb25U
YWJsZS5hZGQodm0sIHRyYW5zaXRpb24pOworICAgIH0KICAgICB0cmFuc2l0aW9uLT5jaGVja09m
ZnNldENvbnNpc3RlbmN5KCk7CisgICAgc3RydWN0dXJlLT5jaGVja09mZnNldENvbnNpc3RlbmN5
KCk7CiAgICAgcmV0dXJuIHRyYW5zaXRpb247CiB9CiAKQEAgLTYxNCw5ICs2ODEsOSBAQCBTdHJ1
Y3R1cmUqIFN0cnVjdHVyZTo6dG9DYWNoZWFibGVEaWN0aW9uYXJ5VHJhbnNpdGlvbihWTSYgdm0s
IFN0cnVjdHVyZSogc3RydWN0dQogICAgIHJldHVybiB0b0RpY3Rpb25hcnlUcmFuc2l0aW9uKHZt
LCBzdHJ1Y3R1cmUsIENhY2hlZERpY3Rpb25hcnlLaW5kLCBkZWZlcnJlZCk7CiB9CiAKLVN0cnVj
dHVyZSogU3RydWN0dXJlOjp0b1VuY2FjaGVhYmxlRGljdGlvbmFyeVRyYW5zaXRpb24oVk0mIHZt
LCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKK1N0cnVjdHVyZSogU3RydWN0dXJlOjp0b1VuY2FjaGVh
YmxlRGljdGlvbmFyeVRyYW5zaXRpb24oVk0mIHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgRGVm
ZXJyZWRTdHJ1Y3R1cmVUcmFuc2l0aW9uV2F0Y2hwb2ludEZpcmUqIGRlZmVycmVkKQogewotICAg
IHJldHVybiB0b0RpY3Rpb25hcnlUcmFuc2l0aW9uKHZtLCBzdHJ1Y3R1cmUsIFVuY2FjaGVkRGlj
dGlvbmFyeUtpbmQpOworICAgIHJldHVybiB0b0RpY3Rpb25hcnlUcmFuc2l0aW9uKHZtLCBzdHJ1
Y3R1cmUsIFVuY2FjaGVkRGljdGlvbmFyeUtpbmQsIGRlZmVycmVkKTsKIH0KIAogU3RydWN0dXJl
KiBTdHJ1Y3R1cmU6OnNlYWxUcmFuc2l0aW9uKFZNJiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUp
CkBAIC05NzcsOSArMTA0NCwxMSBAQCBQcm9wZXJ0eU9mZnNldCBTdHJ1Y3R1cmU6OmFkZChWTSYg
dm0sIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIHVuc2lnbmVkIGF0dHJpYgogICAgICAgICB9
KTsKIH0KIAotUHJvcGVydHlPZmZzZXQgU3RydWN0dXJlOjpyZW1vdmUoUHJvcGVydHlOYW1lIHBy
b3BlcnR5TmFtZSkKK1Byb3BlcnR5T2Zmc2V0IFN0cnVjdHVyZTo6cmVtb3ZlKFZNJiB2bSwgUHJv
cGVydHlOYW1lIHByb3BlcnR5TmFtZSkKIHsKLSAgICByZXR1cm4gcmVtb3ZlKHByb3BlcnR5TmFt
ZSwgW10gKGNvbnN0IENvbmN1cnJlbnRKU0xvY2tlciYsIFByb3BlcnR5T2Zmc2V0KSB7IH0pOwor
ICAgIHJldHVybiByZW1vdmU8U2hvdWxkUGluOjpObz4odm0sIHByb3BlcnR5TmFtZSwgW3RoaXMs
ICZ2bV0gKGNvbnN0IEdDU2FmZUNvbmN1cnJlbnRKU0xvY2tlciYsIFByb3BlcnR5T2Zmc2V0LCBQ
cm9wZXJ0eU9mZnNldCBuZXdNYXhPZmZzZXQpIHsKKyAgICAgICAgc2V0TWF4T2Zmc2V0KHZtLCBu
ZXdNYXhPZmZzZXQpOworICAgIH0pOwogfQogCiB2b2lkIFN0cnVjdHVyZTo6Z2V0UHJvcGVydHlO
YW1lc0Zyb21TdHJ1Y3R1cmUoVk0mIHZtLCBQcm9wZXJ0eU5hbWVBcnJheSYgcHJvcGVydHlOYW1l
cywgRW51bWVyYXRpb25Nb2RlIG1vZGUpCkBAIC0xMDU5LDcgKzExMjgsNyBAQCB2b2lkIFN0cnVj
dHVyZTo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQog
ICAgIH0KICAgICB2aXNpdG9yLmFwcGVuZCh0aGlzT2JqZWN0LT5tX3ByZXZpb3VzT3JSYXJlRGF0
YSk7CiAKLSAgICBpZiAodGhpc09iamVjdC0+aXNQaW5uZWRQcm9wZXJ0eVRhYmxlKCkgfHwgdGhp
c09iamVjdC0+aXNBZGRpbmdQcm9wZXJ0eUZvclRyYW5zaXRpb24oKSkgeworICAgIGlmICh0aGlz
T2JqZWN0LT5pc1Bpbm5lZFByb3BlcnR5VGFibGUoKSB8fCB0aGlzT2JqZWN0LT5wcm90ZWN0UHJv
cGVydHlUYWJsZVdoaWxlVHJhbnNpdGlvbmluZygpKSB7CiAgICAgICAgIC8vIE5PVEU6IFRoaXMg
Y2FuIGludGVybGVhdmUgaW4gcGluKCksIGluIHdoaWNoIGNhc2UgaXQgbWF5IHNlZSBhIG51bGwg
cHJvcGVydHkgdGFibGUuCiAgICAgICAgIC8vIFRoYXQncyBmaW5lLCBiZWNhdXNlIHRoZW4gdGhl
IGJhcnJpZXIgd2lsbCBmaXJlIGFuZCB3ZSB3aWxsIHNjYW4gdGhpcyBhZ2Fpbi4KICAgICAgICAg
dmlzaXRvci5hcHBlbmQodGhpc09iamVjdC0+bV9wcm9wZXJ0eVRhYmxlVW5zYWZlKTsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZS5oIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlLmgKaW5kZXggMzhkYzFkMzlmMWU4Njdk
MDRmMTE1M2ZlNDQ3ZmU0YzcyMGNkNTYzYi4uZmYzYmE1Njg2Y2UyNzYxMDJmMDk4MWNhNTAzOTI4
MzNjYTAyZDExOSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3Ry
dWN0dXJlLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlLmgK
QEAgLTE4NywxMSArMTg3LDEzIEBAIHB1YmxpYzoKICAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0
aWMgU3RydWN0dXJlKiBhZGROZXdQcm9wZXJ0eVRyYW5zaXRpb24oVk0mLCBTdHJ1Y3R1cmUqLCBQ
cm9wZXJ0eU5hbWUsIHVuc2lnbmVkIGF0dHJpYnV0ZXMsIFByb3BlcnR5T2Zmc2V0JiwgUHV0UHJv
cGVydHlTbG90OjpDb250ZXh0ID0gUHV0UHJvcGVydHlTbG90OjpVbmtub3duQ29udGV4dCwgRGVm
ZXJyZWRTdHJ1Y3R1cmVUcmFuc2l0aW9uV2F0Y2hwb2ludEZpcmUqID0gbnVsbHB0cik7CiAgICAg
c3RhdGljIFN0cnVjdHVyZSogYWRkUHJvcGVydHlUcmFuc2l0aW9uVG9FeGlzdGluZ1N0cnVjdHVy
ZUNvbmN1cnJlbnRseShTdHJ1Y3R1cmUqLCBVbmlxdWVkU3RyaW5nSW1wbCogdWlkLCB1bnNpZ25l
ZCBhdHRyaWJ1dGVzLCBQcm9wZXJ0eU9mZnNldCYpOwogICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0
YXRpYyBTdHJ1Y3R1cmUqIGFkZFByb3BlcnR5VHJhbnNpdGlvblRvRXhpc3RpbmdTdHJ1Y3R1cmUo
U3RydWN0dXJlKiwgUHJvcGVydHlOYW1lLCB1bnNpZ25lZCBhdHRyaWJ1dGVzLCBQcm9wZXJ0eU9m
ZnNldCYpOwotICAgIHN0YXRpYyBTdHJ1Y3R1cmUqIHJlbW92ZVByb3BlcnR5VHJhbnNpdGlvbihW
TSYsIFN0cnVjdHVyZSosIFByb3BlcnR5TmFtZSwgUHJvcGVydHlPZmZzZXQmKTsKKyAgICBzdGF0
aWMgU3RydWN0dXJlKiByZW1vdmVOZXdQcm9wZXJ0eVRyYW5zaXRpb24oVk0mLCBTdHJ1Y3R1cmUq
LCBQcm9wZXJ0eU5hbWUsIFByb3BlcnR5T2Zmc2V0JiwgRGVmZXJyZWRTdHJ1Y3R1cmVUcmFuc2l0
aW9uV2F0Y2hwb2ludEZpcmUqID0gbnVsbHB0cik7CisgICAgc3RhdGljIFN0cnVjdHVyZSogcmVt
b3ZlUHJvcGVydHlUcmFuc2l0aW9uKFZNJiwgU3RydWN0dXJlKiwgUHJvcGVydHlOYW1lLCBQcm9w
ZXJ0eU9mZnNldCYsIERlZmVycmVkU3RydWN0dXJlVHJhbnNpdGlvbldhdGNocG9pbnRGaXJlKiA9
IG51bGxwdHIpOworICAgIHN0YXRpYyBTdHJ1Y3R1cmUqIHJlbW92ZVByb3BlcnR5VHJhbnNpdGlv
bkZyb21FeGlzdGluZ1N0cnVjdHVyZShWTSYsIFN0cnVjdHVyZSosIFByb3BlcnR5TmFtZSwgUHJv
cGVydHlPZmZzZXQmLCBEZWZlcnJlZFN0cnVjdHVyZVRyYW5zaXRpb25XYXRjaHBvaW50RmlyZSog
PSBudWxscHRyKTsKICAgICBzdGF0aWMgU3RydWN0dXJlKiBjaGFuZ2VQcm90b3R5cGVUcmFuc2l0
aW9uKFZNJiwgU3RydWN0dXJlKiwgSlNWYWx1ZSBwcm90b3R5cGUsIERlZmVycmVkU3RydWN0dXJl
VHJhbnNpdGlvbldhdGNocG9pbnRGaXJlJik7CiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGlj
IFN0cnVjdHVyZSogYXR0cmlidXRlQ2hhbmdlVHJhbnNpdGlvbihWTSYsIFN0cnVjdHVyZSosIFBy
b3BlcnR5TmFtZSwgdW5zaWduZWQgYXR0cmlidXRlcyk7CiAgICAgSlNfRVhQT1JUX1BSSVZBVEUg
c3RhdGljIFN0cnVjdHVyZSogdG9DYWNoZWFibGVEaWN0aW9uYXJ5VHJhbnNpdGlvbihWTSYsIFN0
cnVjdHVyZSosIERlZmVycmVkU3RydWN0dXJlVHJhbnNpdGlvbldhdGNocG9pbnRGaXJlKiA9IG51
bGxwdHIpOwotICAgIHN0YXRpYyBTdHJ1Y3R1cmUqIHRvVW5jYWNoZWFibGVEaWN0aW9uYXJ5VHJh
bnNpdGlvbihWTSYsIFN0cnVjdHVyZSopOworICAgIHN0YXRpYyBTdHJ1Y3R1cmUqIHRvVW5jYWNo
ZWFibGVEaWN0aW9uYXJ5VHJhbnNpdGlvbihWTSYsIFN0cnVjdHVyZSosIERlZmVycmVkU3RydWN0
dXJlVHJhbnNpdGlvbldhdGNocG9pbnRGaXJlKiA9IG51bGxwdHIpOwogICAgIEpTX0VYUE9SVF9Q
UklWQVRFIHN0YXRpYyBTdHJ1Y3R1cmUqIHNlYWxUcmFuc2l0aW9uKFZNJiwgU3RydWN0dXJlKik7
CiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIFN0cnVjdHVyZSogZnJlZXplVHJhbnNpdGlv
bihWTSYsIFN0cnVjdHVyZSopOwogICAgIHN0YXRpYyBTdHJ1Y3R1cmUqIHByZXZlbnRFeHRlbnNp
b25zVHJhbnNpdGlvbihWTSYsIFN0cnVjdHVyZSopOwpAQCAtNDQwLDEwICs0NDIsNiBAQCBwdWJs
aWM6CiAgICAgewogICAgICAgICByZXR1cm4gc3RkOjptaW48dW5zaWduZWQ+KG1heE9mZnNldCgp
ICsgMSwgbV9pbmxpbmVDYXBhY2l0eSk7CiAgICAgfQotICAgIHVuc2lnbmVkIHRvdGFsU3RvcmFn
ZVNpemUoKSBjb25zdAotICAgIHsKLSAgICAgICAgcmV0dXJuIG51bWJlck9mU2xvdHNGb3JNYXhP
ZmZzZXQobWF4T2Zmc2V0KCksIG1faW5saW5lQ2FwYWNpdHkpOwotICAgIH0KICAgICB1bnNpZ25l
ZCB0b3RhbFN0b3JhZ2VDYXBhY2l0eSgpIGNvbnN0CiAgICAgewogICAgICAgICBBU1NFUlQoc3Ry
dWN0dXJlKCktPmNsYXNzSW5mbygpID09IGluZm8oKSk7CkBAIC02OTEsOCArNjg5LDkgQEAgcHVi
bGljOgogICAgIERFRklORV9CSVRGSUVMRChib29sLCBkaWRXYXRjaEludGVybmFsUHJvcGVydGll
cywgRGlkV2F0Y2hJbnRlcm5hbFByb3BlcnRpZXMsIDEsIDI1KTsKICAgICBERUZJTkVfQklURklF
TEQoYm9vbCwgdHJhbnNpdGlvbldhdGNocG9pbnRJc0xpa2VseVRvQmVGaXJlZCwgVHJhbnNpdGlv
bldhdGNocG9pbnRJc0xpa2VseVRvQmVGaXJlZCwgMSwgMjYpOwogICAgIERFRklORV9CSVRGSUVM
RChib29sLCBoYXNCZWVuRGljdGlvbmFyeSwgSGFzQmVlbkRpY3Rpb25hcnksIDEsIDI3KTsKLSAg
ICBERUZJTkVfQklURklFTEQoYm9vbCwgaXNBZGRpbmdQcm9wZXJ0eUZvclRyYW5zaXRpb24sIElz
QWRkaW5nUHJvcGVydHlGb3JUcmFuc2l0aW9uLCAxLCAyOCk7CisgICAgREVGSU5FX0JJVEZJRUxE
KGJvb2wsIHByb3RlY3RQcm9wZXJ0eVRhYmxlV2hpbGVUcmFuc2l0aW9uaW5nLCBQcm90ZWN0UHJv
cGVydHlUYWJsZVdoaWxlVHJhbnNpdGlvbmluZywgMSwgMjgpOwogICAgIERFRklORV9CSVRGSUVM
RChib29sLCBoYXNVbmRlcnNjb3JlUHJvdG9Qcm9wZXJ0eUV4Y2x1ZGluZ09yaWdpbmFsUHJvdG8s
IEhhc1VuZGVyc2NvcmVQcm90b1Byb3BlcnR5RXhjbHVkaW5nT3JpZ2luYWxQcm90bywgMSwgMjkp
OworICAgIERFRklORV9CSVRGSUVMRChib29sLCBpc1Byb3BlcnR5RGVsZXRpb25UcmFuc2l0aW9u
LCBJc1Byb3BlcnR5RGVsZXRpb25UcmFuc2l0aW9uLCAxLCAzMCk7CiAKIHByaXZhdGU6CiAgICAg
ZnJpZW5kIGNsYXNzIExMSW50T2Zmc2V0c0V4dHJhY3RvcjsKQEAgLTcxNyw5ICs3MTYsOSBAQCBw
cml2YXRlOgogICAgIHRlbXBsYXRlPFNob3VsZFBpbiwgdHlwZW5hbWUgRnVuYz4KICAgICBQcm9w
ZXJ0eU9mZnNldCBhZGQoVk0mLCBQcm9wZXJ0eU5hbWUsIHVuc2lnbmVkIGF0dHJpYnV0ZXMsIGNv
bnN0IEZ1bmMmKTsKICAgICBQcm9wZXJ0eU9mZnNldCBhZGQoVk0mLCBQcm9wZXJ0eU5hbWUsIHVu
c2lnbmVkIGF0dHJpYnV0ZXMpOwotICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmM+Ci0gICAgUHJv
cGVydHlPZmZzZXQgcmVtb3ZlKFByb3BlcnR5TmFtZSwgY29uc3QgRnVuYyYpOwotICAgIFByb3Bl
cnR5T2Zmc2V0IHJlbW92ZShQcm9wZXJ0eU5hbWUpOworICAgIHRlbXBsYXRlPFNob3VsZFBpbiwg
dHlwZW5hbWUgRnVuYz4KKyAgICBQcm9wZXJ0eU9mZnNldCByZW1vdmUoVk0mLCBQcm9wZXJ0eU5h
bWUsIGNvbnN0IEZ1bmMmKTsKKyAgICBQcm9wZXJ0eU9mZnNldCByZW1vdmUoVk0mLCBQcm9wZXJ0
eU5hbWUpOwogCiAgICAgdm9pZCBjaGVja0NvbnNpc3RlbmN5KCk7CiAKQEAgLTgzNCw2ICs4MzMs
NyBAQCBwcml2YXRlOgogICAgIFRpbnlCbG9vbUZpbHRlciBtX3NlZW5Qcm9wZXJ0aWVzOwogCiAg
ICAgZnJpZW5kIGNsYXNzIFZNSW5zcGVjdG9yOworICAgIGZyaWVuZCBjbGFzcyBKU0RvbGxhclZN
SGVscGVyOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgSlNDCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmVJbmxpbmVzLmggYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9TdHJ1Y3R1cmVJbmxpbmVzLmgKaW5kZXggMWE0ZjIwMjQ2YTI3NzljMjlm
Yjk2Y2UwMDUwMGI1NGJiNDZlYjU3MS4uMGNkOThkNTJhY2M3ZjcxNGMwNWIxNTNlMDgxMzllNDkx
Y2Q4Y2Y4YyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0
dXJlSW5saW5lcy5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVy
ZUlubGluZXMuaApAQCAtMTYzLDI4ICsxNjMsNDAgQEAgdGVtcGxhdGU8dHlwZW5hbWUgRnVuY3Rv
cj4KIHZvaWQgU3RydWN0dXJlOjpmb3JFYWNoUHJvcGVydHlDb25jdXJyZW50bHkoY29uc3QgRnVu
Y3RvciYgZnVuY3RvcikKIHsKICAgICBWZWN0b3I8U3RydWN0dXJlKiwgOD4gc3RydWN0dXJlczsK
LSAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZTsKKyAgICBTdHJ1Y3R1cmUqIHRhYmxlU3RydWN0dXJl
OwogICAgIFByb3BlcnR5VGFibGUqIHRhYmxlOwogICAgIAotICAgIGZpbmRTdHJ1Y3R1cmVzQW5k
TWFwRm9yTWF0ZXJpYWxpemF0aW9uKHN0cnVjdHVyZXMsIHN0cnVjdHVyZSwgdGFibGUpOworICAg
IGZpbmRTdHJ1Y3R1cmVzQW5kTWFwRm9yTWF0ZXJpYWxpemF0aW9uKHN0cnVjdHVyZXMsIHRhYmxl
U3RydWN0dXJlLCB0YWJsZSk7CisKKyAgICBIYXNoU2V0PFVuaXF1ZWRTdHJpbmdJbXBsKj4gc2Vl
blByb3BlcnRpZXM7CisKKyAgICBmb3IgKGF1dG8qIHN0cnVjdHVyZSA6IHN0cnVjdHVyZXMpIHsK
KyAgICAgICAgaWYgKCFzdHJ1Y3R1cmUtPm1fdHJhbnNpdGlvblByb3BlcnR5TmFtZSB8fCBzZWVu
UHJvcGVydGllcy5jb250YWlucyhzdHJ1Y3R1cmUtPm1fdHJhbnNpdGlvblByb3BlcnR5TmFtZS5n
ZXQoKSkpCisgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICBzZWVuUHJvcGVydGllcy5h
ZGQoc3RydWN0dXJlLT5tX3RyYW5zaXRpb25Qcm9wZXJ0eU5hbWUuZ2V0KCkpOworCisgICAgICAg
IGlmIChzdHJ1Y3R1cmUtPmlzUHJvcGVydHlEZWxldGlvblRyYW5zaXRpb24oKSkKKyAgICAgICAg
ICAgIGNvbnRpbnVlOworCisgICAgICAgIGlmICghZnVuY3RvcihQcm9wZXJ0eU1hcEVudHJ5KHN0
cnVjdHVyZS0+bV90cmFuc2l0aW9uUHJvcGVydHlOYW1lLmdldCgpLCBzdHJ1Y3R1cmUtPnRyYW5z
aXRpb25PZmZzZXQoKSwgc3RydWN0dXJlLT50cmFuc2l0aW9uUHJvcGVydHlBdHRyaWJ1dGVzKCkp
KSkgeworICAgICAgICAgICAgaWYgKHRhYmxlKQorICAgICAgICAgICAgICAgIHRhYmxlU3RydWN0
dXJlLT5tX2xvY2sudW5sb2NrKCk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAg
ICB9CiAgICAgCiAgICAgaWYgKHRhYmxlKSB7CiAgICAgICAgIGZvciAoYXV0byYgZW50cnkgOiAq
dGFibGUpIHsKKyAgICAgICAgICAgIGlmIChzZWVuUHJvcGVydGllcy5jb250YWlucyhlbnRyeS5r
ZXkpKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworCiAgICAgICAgICAgICBpZiAoIWZ1bmN0
b3IoZW50cnkpKSB7Ci0gICAgICAgICAgICAgICAgc3RydWN0dXJlLT5tX2xvY2sudW5sb2NrKCk7
CisgICAgICAgICAgICAgICAgdGFibGVTdHJ1Y3R1cmUtPm1fbG9jay51bmxvY2soKTsKICAgICAg
ICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KLSAgICAgICAgc3Ry
dWN0dXJlLT5tX2xvY2sudW5sb2NrKCk7Ci0gICAgfQotICAgIAotICAgIGZvciAodW5zaWduZWQg
aSA9IHN0cnVjdHVyZXMuc2l6ZSgpOyBpLS07KSB7Ci0gICAgICAgIHN0cnVjdHVyZSA9IHN0cnVj
dHVyZXNbaV07Ci0gICAgICAgIGlmICghc3RydWN0dXJlLT5tX3RyYW5zaXRpb25Qcm9wZXJ0eU5h
bWUpCi0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgCi0gICAgICAgIGlmICghZnVuY3Rv
cihQcm9wZXJ0eU1hcEVudHJ5KHN0cnVjdHVyZS0+bV90cmFuc2l0aW9uUHJvcGVydHlOYW1lLmdl
dCgpLCBzdHJ1Y3R1cmUtPnRyYW5zaXRpb25PZmZzZXQoKSwgc3RydWN0dXJlLT50cmFuc2l0aW9u
UHJvcGVydHlBdHRyaWJ1dGVzKCkpKSkKLSAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgdGFi
bGVTdHJ1Y3R1cmUtPm1fbG9jay51bmxvY2soKTsKICAgICB9CiB9CiAKQEAgLTQ1MSwxMSArNDYz
LDEyIEBAIGlubGluZSBQcm9wZXJ0eU9mZnNldCBTdHJ1Y3R1cmU6OmFkZChWTSYgdm0sIFByb3Bl
cnR5TmFtZSBwcm9wZXJ0eU5hbWUsIHVuc2lnbmVkCiAgICAgUHJvcGVydHlPZmZzZXQgbmV3T2Zm
c2V0ID0gdGFibGUtPm5leHRPZmZzZXQobV9pbmxpbmVDYXBhY2l0eSk7CiAKICAgICBtX3Byb3Bl
cnR5SGFzaCA9IG1fcHJvcGVydHlIYXNoIF4gcmVwLT5leGlzdGluZ1N5bWJvbEF3YXJlSGFzaCgp
OwotCiAgICAgbV9zZWVuUHJvcGVydGllcy5hZGQoYml0d2lzZV9jYXN0PHVpbnRwdHJfdD4ocmVw
KSk7Ci0gICAgCi0gICAgUHJvcGVydHlPZmZzZXQgbmV3TWF4T2Zmc2V0ID0gbWF4T2Zmc2V0KCk7
Ci0gICAgdGFibGUtPmFkZChQcm9wZXJ0eU1hcEVudHJ5KHJlcCwgbmV3T2Zmc2V0LCBhdHRyaWJ1
dGVzKSwgbmV3TWF4T2Zmc2V0LCBQcm9wZXJ0eVRhYmxlOjpQcm9wZXJ0eU9mZnNldE1heUNoYW5n
ZSk7CisKKyAgICBhdXRvIHJlc3VsdCA9IHRhYmxlLT5hZGQoUHJvcGVydHlNYXBFbnRyeShyZXAs
IG5ld09mZnNldCwgYXR0cmlidXRlcykpOworICAgIEFTU0VSVF9VTlVTRUQocmVzdWx0LCByZXN1
bHQuc2Vjb25kKTsKKyAgICBBU1NFUlRfVU5VU0VEKHJlc3VsdCwgcmVzdWx0LmZpcnN0LmZpcnN0
LT5vZmZzZXQgPT0gbmV3T2Zmc2V0KTsKKyAgICBhdXRvIG5ld01heE9mZnNldCA9IHN0ZDo6bWF4
KG5ld09mZnNldCwgbWF4T2Zmc2V0KCkpOwogICAgIAogICAgIGZ1bmMobG9ja2VyLCBuZXdPZmZz
ZXQsIG5ld01heE9mZnNldCk7CiAgICAgCkBAIC00NjUsMzQgKzQ3OCw0NiBAQCBpbmxpbmUgUHJv
cGVydHlPZmZzZXQgU3RydWN0dXJlOjphZGQoVk0mIHZtLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlO
YW1lLCB1bnNpZ25lZAogICAgIHJldHVybiBuZXdPZmZzZXQ7CiB9CiAKLXRlbXBsYXRlPHR5cGVu
YW1lIEZ1bmM+Ci1pbmxpbmUgUHJvcGVydHlPZmZzZXQgU3RydWN0dXJlOjpyZW1vdmUoUHJvcGVy
dHlOYW1lIHByb3BlcnR5TmFtZSwgY29uc3QgRnVuYyYgZnVuYykKK3RlbXBsYXRlPFN0cnVjdHVy
ZTo6U2hvdWxkUGluIHNob3VsZFBpbiwgdHlwZW5hbWUgRnVuYz4KK2lubGluZSBQcm9wZXJ0eU9m
ZnNldCBTdHJ1Y3R1cmU6OnJlbW92ZShWTSYgdm0sIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUs
IGNvbnN0IEZ1bmMmIGZ1bmMpCiB7Ci0gICAgQ29uY3VycmVudEpTTG9ja2VyIGxvY2tlcihtX2xv
Y2spOwotICAgIAorICAgIFByb3BlcnR5VGFibGUqIHRhYmxlID0gZW5zdXJlUHJvcGVydHlUYWJs
ZSh2bSk7CisgICAgR0NTYWZlQ29uY3VycmVudEpTTG9ja2VyIGxvY2tlcihtX2xvY2ssIHZtLmhl
YXApOworCisgICAgc3dpdGNoIChzaG91bGRQaW4pIHsKKyAgICBjYXNlIFNob3VsZFBpbjo6WWVz
OgorICAgICAgICBwaW4obG9ja2VyLCB2bSwgdGFibGUpOworICAgICAgICBicmVhazsKKyAgICBj
YXNlIFNob3VsZFBpbjo6Tm86CisgICAgICAgIHNldFByb3BlcnR5VGFibGUodm0sIHRhYmxlKTsK
KyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgQVNTRVJUKEpTQzo6aXNWYWxpZE9mZnNldChn
ZXQodm0sIHByb3BlcnR5TmFtZSkpKTsKKwogICAgIGNoZWNrQ29uc2lzdGVuY3koKTsKIAogICAg
IGF1dG8gcmVwID0gcHJvcGVydHlOYW1lLnVpZCgpOwotICAgIAotICAgIC8vIFdlIE9OTFkgcmVt
b3ZlIGZyb20gdW5jYWNoZWFibGUgZGljdGlvbmFyaWVzLCB3aGljaCB3aWxsIGhhdmUgYSBwaW5u
ZWQgcHJvcGVydHkgdGFibGUuCi0gICAgLy8gVGhlIG9ubHkgd2F5IGZvciB0aGVtIG5vdCB0byBo
YXZlIGEgdGFibGUgaXMgaWYgdGhleSBhcmUgZW1wdHkuCi0gICAgUHJvcGVydHlUYWJsZSogdGFi
bGUgPSBwcm9wZXJ0eVRhYmxlT3JOdWxsKCk7Ci0KLSAgICBpZiAoIXRhYmxlKQotICAgICAgICBy
ZXR1cm4gaW52YWxpZE9mZnNldDsKIAogICAgIFByb3BlcnR5VGFibGU6OmZpbmRfaXRlcmF0b3Ig
cG9zaXRpb24gPSB0YWJsZS0+ZmluZChyZXApOwogICAgIGlmICghcG9zaXRpb24uZmlyc3QpCiAg
ICAgICAgIHJldHVybiBpbnZhbGlkT2Zmc2V0OworCisgICAgc2V0SXNRdWlja1Byb3BlcnR5QWNj
ZXNzQWxsb3dlZEZvckVudW1lcmF0aW9uKGZhbHNlKTsKICAgICAKICAgICBQcm9wZXJ0eU9mZnNl
dCBvZmZzZXQgPSBwb3NpdGlvbi5maXJzdC0+b2Zmc2V0OwogCiAgICAgdGFibGUtPnJlbW92ZShw
b3NpdGlvbik7CiAgICAgdGFibGUtPmFkZERlbGV0ZWRPZmZzZXQob2Zmc2V0KTsKIAotICAgIGNo
ZWNrQ29uc2lzdGVuY3koKTsKKyAgICBQcm9wZXJ0eU9mZnNldCBuZXdNYXhPZmZzZXQgPSBtYXhP
ZmZzZXQoKTsKIAotICAgIGZ1bmMobG9ja2VyLCBvZmZzZXQpOworICAgIGZ1bmMobG9ja2VyLCBv
ZmZzZXQsIG5ld01heE9mZnNldCk7CisKKyAgICBBU1NFUlQobWF4T2Zmc2V0KCkgPT0gbmV3TWF4
T2Zmc2V0KTsKKyAgICBBU1NFUlQoIUpTQzo6aXNWYWxpZE9mZnNldChnZXQodm0sIHByb3BlcnR5
TmFtZSkpKTsKKworICAgIGNoZWNrQ29uc2lzdGVuY3koKTsKICAgICByZXR1cm4gb2Zmc2V0Owog
fQogCkBAIC01MDMsMTMgKzUyOCwxMyBAQCBpbmxpbmUgUHJvcGVydHlPZmZzZXQgU3RydWN0dXJl
OjphZGRQcm9wZXJ0eVdpdGhvdXRUcmFuc2l0aW9uKFZNJiB2bSwgUHJvcGVydHlOYQogfQogCiB0
ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jPgotaW5saW5lIFByb3BlcnR5T2Zmc2V0IFN0cnVjdHVyZTo6
cmVtb3ZlUHJvcGVydHlXaXRob3V0VHJhbnNpdGlvbihWTSYsIFByb3BlcnR5TmFtZSBwcm9wZXJ0
eU5hbWUsIGNvbnN0IEZ1bmMmIGZ1bmMpCitpbmxpbmUgUHJvcGVydHlPZmZzZXQgU3RydWN0dXJl
OjpyZW1vdmVQcm9wZXJ0eVdpdGhvdXRUcmFuc2l0aW9uKFZNJiB2bSwgUHJvcGVydHlOYW1lIHBy
b3BlcnR5TmFtZSwgY29uc3QgRnVuYyYgZnVuYykKIHsKICAgICBBU1NFUlQoaXNVbmNhY2hlYWJs
ZURpY3Rpb25hcnkoKSk7CiAgICAgQVNTRVJUKGlzUGlubmVkUHJvcGVydHlUYWJsZSgpKTsKICAg
ICBBU1NFUlQocHJvcGVydHlUYWJsZU9yTnVsbCgpKTsKICAgICAKLSAgICByZXR1cm4gcmVtb3Zl
KHByb3BlcnR5TmFtZSwgZnVuYyk7CisgICAgcmV0dXJuIHJlbW92ZTxTaG91bGRQaW46Olllcz4o
dm0sIHByb3BlcnR5TmFtZSwgZnVuYyk7CiB9CiAKIEFMV0FZU19JTkxJTkUgdm9pZCBTdHJ1Y3R1
cmU6OnNldFByb3RvdHlwZVdpdGhvdXRUcmFuc2l0aW9uKFZNJiB2bSwgSlNWYWx1ZSBwcm90b3R5
cGUpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmVU
cmFuc2l0aW9uVGFibGUuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVy
ZVRyYW5zaXRpb25UYWJsZS5oCmluZGV4IGI3ZGYwZWZiMzk4ZDA1ZmJmODE3YzdiMzhlNWJhNDkw
ZGUxOTBhYmUuLjViODVjN2Y3ZjIwMjZlNDU4MTVjYTNmNTBjY2U1MWMxYjUyYTZiMmIgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZVRyYW5zaXRpb25U
YWJsZS5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZVRyYW5z
aXRpb25UYWJsZS5oCkBAIC0xNDQsMTEgKzE0NCwxMSBAQCBjbGFzcyBTdHJ1Y3R1cmVUcmFuc2l0
aW9uVGFibGUgewogCiAgICAgCiAgICAgc3RydWN0IEhhc2ggewotICAgICAgICB0eXBlZGVmIHN0
ZDo6cGFpcjxVbmlxdWVkU3RyaW5nSW1wbCosIHVuc2lnbmVkPiBLZXk7CisgICAgICAgIHR5cGVk
ZWYgc3RkOjp0dXBsZTxVbmlxdWVkU3RyaW5nSW1wbCosIHVuc2lnbmVkLCBib29sPiBLZXk7CiAg
ICAgICAgIAogICAgICAgICBzdGF0aWMgdW5zaWduZWQgaGFzaChjb25zdCBLZXkmIHApCiAgICAg
ICAgIHsKLSAgICAgICAgICAgIHJldHVybiBQdHJIYXNoPFVuaXF1ZWRTdHJpbmdJbXBsKj46Omhh
c2gocC5maXJzdCkgKyBwLnNlY29uZDsKKyAgICAgICAgICAgIHJldHVybiBQdHJIYXNoPFVuaXF1
ZWRTdHJpbmdJbXBsKj46Omhhc2goc3RkOjpnZXQ8MD4ocCkpICsgc3RkOjpnZXQ8MT4ocCk7CiAg
ICAgICAgIH0KIAogICAgICAgICBzdGF0aWMgYm9vbCBlcXVhbChjb25zdCBLZXkmIGEsIGNvbnN0
IEtleSYgYikKQEAgLTE4MSw4ICsxODEsOCBAQCBwdWJsaWM6CiAgICAgfQogCiAgICAgdm9pZCBh
ZGQoVk0mLCBTdHJ1Y3R1cmUqKTsKLSAgICBib29sIGNvbnRhaW5zKFVuaXF1ZWRTdHJpbmdJbXBs
KiwgdW5zaWduZWQgYXR0cmlidXRlcykgY29uc3Q7Ci0gICAgU3RydWN0dXJlKiBnZXQoVW5pcXVl
ZFN0cmluZ0ltcGwqLCB1bnNpZ25lZCBhdHRyaWJ1dGVzKSBjb25zdDsKKyAgICBib29sIGNvbnRh
aW5zKFVuaXF1ZWRTdHJpbmdJbXBsKiwgdW5zaWduZWQgYXR0cmlidXRlcywgYm9vbCBpc0FkZGl0
aW9uID0gdHJ1ZSkgY29uc3Q7CisgICAgU3RydWN0dXJlKiBnZXQoVW5pcXVlZFN0cmluZ0ltcGwq
LCB1bnNpZ25lZCBhdHRyaWJ1dGVzLCBib29sIGlzQWRkaXRpb24gPSB0cnVlKSBjb25zdDsKIAog
cHJpdmF0ZToKICAgICBmcmllbmQgY2xhc3MgU2luZ2xlU2xvdFRyYW5zaXRpb25XZWFrT3duZXI7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvdG9vbHMvSlNEb2xsYXJWTS5jcHAg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvdG9vbHMvSlNEb2xsYXJWTS5jcHAKaW5kZXggZGVjNmJi
MmFkODMyOTdmMmE4YWJjNzIxYTE3MWJiOTQ1N2M3NjNmYS4uZGZmMWRmMTlhYzg0YTllZDM2NGI1
OTdkNWRkOWQwNDFiZWM0NzhiMyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3Rv
b2xzL0pTRG9sbGFyVk0uY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS90b29scy9KU0Rv
bGxhclZNLmNwcApAQCAtODEsNiArODEsOCBAQCBwdWJsaWM6CiAKICAgICB2b2lkIHVwZGF0ZVZN
U3RhY2tMaW1pdHMoKSB7IHJldHVybiBtX3ZtLnVwZGF0ZVN0YWNrTGltaXRzKCk7IH07CiAKKyAg
ICBzdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5jdGlvbkdldFN0cnVjdHVy
ZVRyYW5zaXRpb25MaXN0KEpTR2xvYmFsT2JqZWN0KiwgQ2FsbEZyYW1lKik7CisKIHByaXZhdGU6
CiAgICAgVk0mIG1fdm07CiB9OwpAQCAtMjc2OSw2ICsyNzcxLDYzIEBAIHN0YXRpYyBFbmNvZGVk
SlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0aW9uTWFrZTE2Qml0U3RyaW5nSWZQb3NzaWJsZShK
U0dsb2JhbE9iCiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1N0cmluZyh2bSwgU3RyaW5n
OjphZG9wdChXVEZNb3ZlKGJ1ZmZlcikpKSk7CiB9CiAKK0VuY29kZWRKU1ZhbHVlIEpTQ19IT1NU
X0NBTEwgSlNEb2xsYXJWTUhlbHBlcjo6ZnVuY3Rpb25HZXRTdHJ1Y3R1cmVUcmFuc2l0aW9uTGlz
dChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBDYWxsRnJhbWUqIGNhbGxGcmFtZSkKK3sK
KyAgICBEb2xsYXJWTUFzc2VydFNjb3BlIGFzc2VydFNjb3BlOworICAgIFZNJiB2bSA9IGdsb2Jh
bE9iamVjdC0+dm0oKTsKKyAgICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7
CisgICAgSlNPYmplY3QqIG9iaiA9IGNhbGxGcmFtZS0+YXJndW1lbnQoMCkudG9PYmplY3QoZ2xv
YmFsT2JqZWN0KTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOworICAgIGlm
ICghb2JqKQorICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzTnVsbCgpKTsKKyAgICBW
ZWN0b3I8U3RydWN0dXJlKiwgOD4gc3RydWN0dXJlczsKKworICAgIGZvciAoYXV0byogc3RydWN0
dXJlID0gb2JqLT5zdHJ1Y3R1cmUoKTsgc3RydWN0dXJlOyBzdHJ1Y3R1cmUgPSBzdHJ1Y3R1cmUt
PnByZXZpb3VzSUQoKSkKKyAgICAgICAgc3RydWN0dXJlcy5hcHBlbmQoc3RydWN0dXJlKTsKKwor
ICAgIEpTQXJyYXkqIHJlc3VsdCA9IEpTQXJyYXk6OnRyeUNyZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0
LT5hcnJheVN0cnVjdHVyZUZvckluZGV4aW5nVHlwZUR1cmluZ0FsbG9jYXRpb24oQXJyYXlXaXRo
Q29udGlndW91cyksIDApOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHsgfSk7CisK
KyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHN0cnVjdHVyZXMuc2l6ZSgpOyArK2kpIHsKKyAg
ICAgICAgYXV0byogc3RydWN0dXJlID0gc3RydWN0dXJlc1tzdHJ1Y3R1cmVzLnNpemUoKSAtIGkg
LSAxXTsKKyAgICAgICAgcmVzdWx0LT5wdXNoKGdsb2JhbE9iamVjdCwgSlNWYWx1ZShzdHJ1Y3R1
cmUtPmlkKCkpKTsKKyAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsKKyAg
ICAgICAgcmVzdWx0LT5wdXNoKGdsb2JhbE9iamVjdCwgSlNWYWx1ZShzdHJ1Y3R1cmUtPnRyYW5z
aXRpb25PZmZzZXQoKSkpOworICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0p
OworICAgICAgICByZXN1bHQtPnB1c2goZ2xvYmFsT2JqZWN0LCBKU1ZhbHVlKHN0cnVjdHVyZS0+
bWF4T2Zmc2V0KCkpKTsKKyAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsK
KyAgICAgICAgaWYgKHN0cnVjdHVyZS0+bV90cmFuc2l0aW9uUHJvcGVydHlOYW1lKQorICAgICAg
ICAgICAgcmVzdWx0LT5wdXNoKGdsb2JhbE9iamVjdCwganNTdHJpbmcodm0sIFN0cmluZygqc3Ry
dWN0dXJlLT5tX3RyYW5zaXRpb25Qcm9wZXJ0eU5hbWUpKSk7CisgICAgICAgIGVsc2UKKyAgICAg
ICAgICAgIHJlc3VsdC0+cHVzaChnbG9iYWxPYmplY3QsIGpzTnVsbCgpKTsKKyAgICAgICAgUkVU
VVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsKKyAgICAgICAgcmVzdWx0LT5wdXNoKGdsb2Jh
bE9iamVjdCwgSlNWYWx1ZShzdHJ1Y3R1cmUtPmlzUHJvcGVydHlEZWxldGlvblRyYW5zaXRpb24o
KSkpOworICAgICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOworICAgIH0KKwor
ICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUocmVzdWx0KTsKK30KKworc3RhdGljIEVuY29kZWRK
U1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVuY3Rpb25HZXRDb25jdXJyZW50bHkoSlNHbG9iYWxPYmpl
Y3QqIGdsb2JhbE9iamVjdCwgQ2FsbEZyYW1lKiBjYWxsRnJhbWUpCit7CisgICAgRG9sbGFyVk1B
c3NlcnRTY29wZSBhc3NlcnRTY29wZTsKKyAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7
CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOworICAgIEpTT2JqZWN0
KiBvYmogPSBjYWxsRnJhbWUtPmFyZ3VtZW50KDApLnRvT2JqZWN0KGdsb2JhbE9iamVjdCk7Cisg
ICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsKKyAgICBpZiAoIW9iaikKKyAgICAg
ICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc051bGwoKSk7CisgICAgU3RyaW5nIHByb3BlcnR5
ID0gY2FsbEZyYW1lLT5hcmd1bWVudCgxKS50b1dURlN0cmluZyhnbG9iYWxPYmplY3QpOworICAg
IFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHsgfSk7CisgICAgYXV0byBuYW1lID0gUHJvcGVy
dHlOYW1lKElkZW50aWZpZXI6OmZyb21TdHJpbmcodm0sIHByb3BlcnR5KSk7CisgICAgYXV0byBv
ZmZzZXQgPSBvYmotPnN0cnVjdHVyZSgpLT5nZXRDb25jdXJyZW50bHkobmFtZS51aWQoKSk7Cisg
ICAgaWYgKG9mZnNldCAhPSBpbnZhbGlkT2Zmc2V0KQorICAgICAgICBBU1NFUlQoSlNWYWx1ZTo6
ZW5jb2RlKG9iai0+Z2V0RGlyZWN0KG9mZnNldCkpKTsKKyAgICBKU1ZhbHVlIHJlc3VsdCA9IEpT
VmFsdWUob2Zmc2V0ICE9IGludmFsaWRPZmZzZXQpOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04o
c2NvcGUsIHsgfSk7CisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShyZXN1bHQpOworfQorCiB2
b2lkIEpTRG9sbGFyVk06OmZpbmlzaENyZWF0aW9uKFZNJiB2bSkKIHsKICAgICBEb2xsYXJWTUFz
c2VydFNjb3BlIGFzc2VydFNjb3BlOwpAQCAtMjg5Nyw2ICsyOTU2LDkgQEAgdm9pZCBKU0RvbGxh
clZNOjpmaW5pc2hDcmVhdGlvbihWTSYgdm0pCiAgICAgYWRkRnVuY3Rpb24odm0sICJpc1dhc21T
dXBwb3J0ZWQiLCBmdW5jdGlvbklzV2FzbVN1cHBvcnRlZCwgMCk7CiAgICAgYWRkRnVuY3Rpb24o
dm0sICJtYWtlMTZCaXRTdHJpbmdJZlBvc3NpYmxlIiwgZnVuY3Rpb25NYWtlMTZCaXRTdHJpbmdJ
ZlBvc3NpYmxlLCAxKTsKIAorICAgIGFkZEZ1bmN0aW9uKHZtLCAiZ2V0U3RydWN0dXJlVHJhbnNp
dGlvbkxpc3QiLCBKU0RvbGxhclZNSGVscGVyOjpmdW5jdGlvbkdldFN0cnVjdHVyZVRyYW5zaXRp
b25MaXN0LCAxKTsKKyAgICBhZGRGdW5jdGlvbih2bSwgImdldENvbmN1cnJlbnRseSIsIGZ1bmN0
aW9uR2V0Q29uY3VycmVudGx5LCAyKTsKKwogICAgIG1fb2JqZWN0RG9pbmdTaWRlRWZmZWN0UHV0
V2l0aG91dENvcnJlY3RTbG90U3RhdHVzU3RydWN0dXJlLnNldCh2bSwgdGhpcywgT2JqZWN0RG9p
bmdTaWRlRWZmZWN0UHV0V2l0aG91dENvcnJlY3RTbG90U3RhdHVzOjpjcmVhdGVTdHJ1Y3R1cmUo
dm0sIGdsb2JhbE9iamVjdCwganNOdWxsKCkpKTsKIH0KIApkaWZmIC0tZ2l0IGEvSlNUZXN0cy9D
aGFuZ2VMb2cgYi9KU1Rlc3RzL0NoYW5nZUxvZwppbmRleCAzMmM2MWRjYTJhNWUzNTQxMWNlNjEy
ZjkwYWNiMzYwM2U4MjI0ZjA1Li4wZGE4OGE1NmEwZDhjNjc1NGJmMzM1NzVmNzI1NzczMzliODQ3
YWNhIDEwMDY0NAotLS0gYS9KU1Rlc3RzL0NoYW5nZUxvZworKysgYi9KU1Rlc3RzL0NoYW5nZUxv
ZwpAQCAtMSwzICsxLDQzIEBACisyMDIwLTAxLTMwICBKdXN0aW4gTWljaGF1ZCAgPGp1c3Rpbl9t
aWNoYXVkQGFwcGxlLmNvbT4KKworICAgICAgICBEZWxldGluZyBhIHByb3BlcnR5IHNob3VsZCBu
b3QgdHVybiBzdHJ1Y3R1cmVzIGludG8gdW5jYWNoZWFibGUgZGljdGlvbmFyaWVzCisgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMDY0MzAKKworICAgICAg
ICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIG1pY3JvYmVuY2htYXJr
cy9kZWxldGUtcHJvcGVydHktZnJvbS1wcm90b3R5cGUtY2hhaW4uanM6IEFkZGVkLgorICAgICAg
ICAoYXNzZXJ0KToKKyAgICAgICAgKG5vSW5saW5lLmFzc2VydC5nZXRaKToKKyAgICAgICAgKG5v
SW5saW5lLmdldFouQyk6CisgICAgICAgIChkb1Rlc3QpOgorICAgICAgICAoZGVsZXRlLkMucHJv
dG90eXBlLnopOgorICAgICAgICAqIG1pY3JvYmVuY2htYXJrcy9kZWxldGUtcHJvcGVydHkta2Vl
cHMtY2FjaGVhYmxlLXN0cnVjdHVyZS5qczogQWRkZWQuCisgICAgICAgIChhc3NlcnQpOgorICAg
ICAgICAoQyk6CisgICAgICAgIChkb1Rlc3QpOgorICAgICAgICAqIHN0cmVzcy9jYWNoZS1wdXQt
YnktaWQtZGlmZmVyZW50LWF0dHJpYnV0ZXMuanM6CisgICAgICAgIChtYWtlUHJvdG90eXBlRGlj
dCk6CisgICAgICAgIChzZXQgeCk6CisgICAgICAgICogc3RyZXNzL2NhY2hlLXB1dC1ieS1pZC1k
aWZmZXJlbnQtb2Zmc2V0LmpzOgorICAgICAgICAobWFrZVByb3RvdHlwZURpY3QpOgorICAgICAg
ICAoc2V0IHgpOgorICAgICAgICAqIHN0cmVzcy9jYWNoZS1wdXQtYnktaWQtcG9seS1wcm90by5q
czoKKyAgICAgICAgKG1ha2VQcm90b3R5cGVEaWN0KToKKyAgICAgICAgKHNldCBfKToKKyAgICAg
ICAgKiBzdHJlc3MvZGVsZXRlLXByb3BlcnR5LWNoZWNrLXN0cnVjdHVyZS10cmFuc2l0aW9uLmpz
OiBBZGRlZC4KKyAgICAgICAgKGFzc2VydCk6CisgICAgICAgIChhc3NlcnRfZXEpOgorICAgICAg
ICAoYXNzZXJ0X25lcSk6CisgICAgICAgIChzZCk6CisgICAgICAgIChzaWQpOgorICAgICAgICAo
dGVzdERlbGV0ZUlzTm90VW5jYWNoZWFibGUpOgorICAgICAgICAodGVzdENhbk1hdGVyaWFsaXpl
RGVsZXRlcyk6CisgICAgICAgICh0ZXN0Q2FuRmxhdHRlbik6CisgICAgICAgICh0ZXN0RGVsZXRl
V2l0aElubGluZUNhY2hlLk9iamVjdC5wcm90b3R5cGUuZ2xvYmFsUHJvcGVydHkuNDIubWFrZUZv
byk6CisgICAgICAgICh0ZXN0RGVsZXRlV2l0aElubGluZUNhY2hlLm5vSW5saW5lLmRvVGVzdCk6
CisgICAgICAgICh0ZXN0RGVsZXRlV2l0aElubGluZUNhY2hlKToKKyAgICAgICAgKiBzdHJlc3Mv
ZmxhdHRlbi1vYmplY3QtemVyby11bnVzZWQtaW5saW5lLXByb3BlcnRpZXMuanM6CisKIDIwMjAt
MDEtMjggIFl1c3VrZSBTdXp1a2kgIDx5c3V6dWtpQGFwcGxlLmNvbT4KIAogICAgICAgICBbSlND
XSBHaXZlIHVwIElDIHdoZW4gdW5rbm93biBzdHJ1Y3R1cmUgdHJhbnNpdGlvbiBoYXBwZW5zCmRp
ZmYgLS1naXQgYS9KU1Rlc3RzL21pY3JvYmVuY2htYXJrcy9kZWxldGUtcHJvcGVydHktZnJvbS1w
cm90b3R5cGUtY2hhaW4uanMgYi9KU1Rlc3RzL21pY3JvYmVuY2htYXJrcy9kZWxldGUtcHJvcGVy
dHktZnJvbS1wcm90b3R5cGUtY2hhaW4uanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNDlhMzFiN2YyNDdjMWJkMGFj
YTgyY2IyMmRmMjBlOGYxYmY2MWJkZAotLS0gL2Rldi9udWxsCisrKyBiL0pTVGVzdHMvbWljcm9i
ZW5jaG1hcmtzL2RlbGV0ZS1wcm9wZXJ0eS1mcm9tLXByb3RvdHlwZS1jaGFpbi5qcwpAQCAtMCww
ICsxLDQzIEBACisvL0Agc2tpcCBpZiAkbW9kZWwgPT0gIkFwcGxlIFdhdGNoIFNlcmllcyAzIiAj
IGFkZGVkIGJ5IG1hcmstanNjLXN0cmVzcy10ZXN0LnB5CitmdW5jdGlvbiBhc3NlcnQoYikgewor
ICAgIGlmICghYikKKyAgICAgICAgdGhyb3cgbmV3IEVycm9yOworfQorbm9JbmxpbmUoYXNzZXJ0
KQorCitmdW5jdGlvbiBnZXRaKG8pIHsKKyAgICByZXR1cm4gby56Cit9Citub0lubGluZShnZXRa
KQorCitmdW5jdGlvbiBDKCkgeworICAgIHRoaXMueCA9IDQyOworfQorCitsZXQgb2JqcyA9IFtd
OworZm9yIChsZXQgaSA9IDA7IGkgPCA1MDsgKytpKSB7CisgICAgb2Jqcy5wdXNoKG5ldyBDKTsK
K30KKworZnVuY3Rpb24gZG9UZXN0KHpWYWwpIHsKKyAgICBmb3IgKGxldCBpID0gMDsgaSA8IG9i
anMubGVuZ3RoOyArK2kpIHsKKyAgICAgICAgbGV0IG8gPSBvYmpzW2ldOworICAgICAgICBhc3Nl
cnQoby54ID09PSA0Mik7CisgICAgICAgIGFzc2VydChnZXRaKG8pID09PSB6VmFsKQorICAgIH0K
K30KK25vSW5saW5lKGRvVGVzdCk7CisKK2ZvciAobGV0IGk9MDsgaTwxMDAwMDsgKytpKSB7Cisg
ICAgY29uc3QgWCA9IHsgaSB9CisgICAgQy5wcm90b3R5cGUueiA9IFgKKyAgICBkb1Rlc3QoWCkK
K30KKworZGVsZXRlIEMucHJvdG90eXBlLnoKKworZm9yIChsZXQgaT0wOyBpPDEwMDAwMDA7ICsr
aSkgeworICAgIGdldFooe3o6IGl9KQorICAgIGRvVGVzdCh1bmRlZmluZWQpCit9CisKZGlmZiAt
LWdpdCBhL0pTVGVzdHMvbWljcm9iZW5jaG1hcmtzL2RlbGV0ZS1wcm9wZXJ0eS1rZWVwcy1jYWNo
ZWFibGUtc3RydWN0dXJlLmpzIGIvSlNUZXN0cy9taWNyb2JlbmNobWFya3MvZGVsZXRlLXByb3Bl
cnR5LWtlZXBzLWNhY2hlYWJsZS1zdHJ1Y3R1cmUuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMjJjY2E5ZmQyMWRi
MDcyNmJhNmIxZDJiNjVkOWRhNWI4M2E4YTgzOAotLS0gL2Rldi9udWxsCisrKyBiL0pTVGVzdHMv
bWljcm9iZW5jaG1hcmtzL2RlbGV0ZS1wcm9wZXJ0eS1rZWVwcy1jYWNoZWFibGUtc3RydWN0dXJl
LmpzCkBAIC0wLDAgKzEsMjggQEAKKy8vQCBza2lwIGlmICRtb2RlbCA9PSAiQXBwbGUgV2F0Y2gg
U2VyaWVzIDMiICMgYWRkZWQgYnkgbWFyay1qc2Mtc3RyZXNzLXRlc3QucHkKK2Z1bmN0aW9uIGFz
c2VydChiKSB7CisgICAgaWYgKCFiKQorICAgICAgICB0aHJvdyBuZXcgRXJyb3I7Cit9CisKK2Z1
bmN0aW9uIEMoKSB7CisgICAgdGhpcy54ID0gNDI7CisgICAgdGhpcy55ID0gMTMzNzsKKyAgICBk
ZWxldGUgdGhpcy55OworfQorCitsZXQgb2JqcyA9IFtdOworZm9yIChsZXQgaSA9IDA7IGkgPCA1
MDsgKytpKSB7CisgICAgb2Jqcy5wdXNoKG5ldyBDKTsKK30KKworZnVuY3Rpb24gZG9UZXN0KCkg
eworICAgIGZvciAobGV0IGkgPSAwOyBpIDwgb2Jqcy5sZW5ndGg7ICsraSkgeworICAgICAgICBs
ZXQgbyA9IG9ianNbaV07CisgICAgICAgIGFzc2VydChvLnkgPT09IHVuZGVmaW5lZCk7CisgICAg
ICAgIGFzc2VydChvLnggPT09IDQyKTsKKyAgICB9Cit9Citub0lubGluZShkb1Rlc3QpOworCitm
b3IgKGxldCBpPTA7IGk8MTAwMDAwMDA7ICsraSkgZG9UZXN0KCkKKwpkaWZmIC0tZ2l0IGEvSlNU
ZXN0cy9zdHJlc3MvY2FjaGUtcHV0LWJ5LWlkLWRpZmZlcmVudC1hdHRyaWJ1dGVzLmpzIGIvSlNU
ZXN0cy9zdHJlc3MvY2FjaGUtcHV0LWJ5LWlkLWRpZmZlcmVudC1hdHRyaWJ1dGVzLmpzCmluZGV4
IGIzOGZjNzhhMTQ0OWQ3MWZkMTNjZjQzOTczMDk4NTA3ZmJjZDM5M2UuLmZiMTJmMWEwMjIwMjg3
ZjYxZmU5ZTEzZmY0NmE0YWFmZGVlOTNiYmUgMTAwNjQ0Ci0tLSBhL0pTVGVzdHMvc3RyZXNzL2Nh
Y2hlLXB1dC1ieS1pZC1kaWZmZXJlbnQtYXR0cmlidXRlcy5qcworKysgYi9KU1Rlc3RzL3N0cmVz
cy9jYWNoZS1wdXQtYnktaWQtZGlmZmVyZW50LWF0dHJpYnV0ZXMuanMKQEAgLTQsNiArNCwxNiBA
QCBmdW5jdGlvbiBGb28oKSB7IH0KIAogRm9vLnByb3RvdHlwZS54ID0gMDsKIAorZnVuY3Rpb24g
bWFrZVByb3RvdHlwZURpY3QoKSB7CisgICAgZm9yIChsZXQgaT0wOyBpPDEwMDsgKytpKSB7Cisg
ICAgICAgIEZvby5wcm90b3R5cGUuYSA9IGkKKyAgICAgICAgRm9vLnByb3RvdHlwZS5iID0gaQor
ICAgICAgICBkZWxldGUgRm9vLnByb3RvdHlwZS5hCisgICAgICAgIGRlbGV0ZSBGb28ucHJvdG90
eXBlLmIKKyAgICB9Cit9Citub0lubGluZShtYWtlUHJvdG90eXBlRGljdCkKKwogT2JqZWN0LmRl
ZmluZVByb3BlcnR5KEZvby5wcm90b3R5cGUsICd5JywgewogICAgIHNldCh4KSB7CiAgICAgICAg
IGlmIChGb28ucHJvdG90eXBlLngrKyA9PT0gOSkgewpAQCAtMTEsOCArMjEsMTAgQEAgT2JqZWN0
LmRlZmluZVByb3BlcnR5KEZvby5wcm90b3R5cGUsICd5JywgewogICAgICAgICAgICAgICAgIHZh
bHVlOiAxMywKICAgICAgICAgICAgICAgICB3cml0YWJsZTogdHJ1ZSwKICAgICAgICAgICAgIH0p
OwotICAgICAgICAgICAgaWYgKHR5cGVvZiAkdm0gIT09ICd1bmRlZmluZWQnKQorICAgICAgICAg
ICAgaWYgKHR5cGVvZiAkdm0gIT09ICd1bmRlZmluZWQnKSB7CisgICAgICAgICAgICAgICAgbWFr
ZVByb3RvdHlwZURpY3QoKQogICAgICAgICAgICAgICAgICR2bS5mbGF0dGVuRGljdGlvbmFyeU9i
amVjdChGb28ucHJvdG90eXBlKTsKKyAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgIH0sCiAg
ICAgY29uZmlndXJhYmxlOiB0cnVlLApkaWZmIC0tZ2l0IGEvSlNUZXN0cy9zdHJlc3MvY2FjaGUt
cHV0LWJ5LWlkLWRpZmZlcmVudC1vZmZzZXQuanMgYi9KU1Rlc3RzL3N0cmVzcy9jYWNoZS1wdXQt
YnktaWQtZGlmZmVyZW50LW9mZnNldC5qcwppbmRleCA3ZjI5NzEzZTdjMjg1M2NhYzdjZDRhNDNl
ZjY3NTdlYzhhZTM5YmZjLi44OWRhNmE3MmQ3NWMwZmY3YmU1MGRjYjcyYjk1ZDljNTQ4NmRlN2Qy
IDEwMDY0NAotLS0gYS9KU1Rlc3RzL3N0cmVzcy9jYWNoZS1wdXQtYnktaWQtZGlmZmVyZW50LW9m
ZnNldC5qcworKysgYi9KU1Rlc3RzL3N0cmVzcy9jYWNoZS1wdXQtYnktaWQtZGlmZmVyZW50LW9m
ZnNldC5qcwpAQCAtNCwxMiArNCwyNCBAQCBmdW5jdGlvbiBGb28oKSB7IH0KIAogRm9vLnByb3Rv
dHlwZS54ID0gMDsKIAorZnVuY3Rpb24gbWFrZVByb3RvdHlwZURpY3QoKSB7CisgICAgZm9yIChs
ZXQgaT0wOyBpPDEwMDsgKytpKSB7CisgICAgICAgIEZvby5wcm90b3R5cGUuYSA9IGkKKyAgICAg
ICAgRm9vLnByb3RvdHlwZS5iID0gaQorICAgICAgICBkZWxldGUgRm9vLnByb3RvdHlwZS5hCisg
ICAgICAgIGRlbGV0ZSBGb28ucHJvdG90eXBlLmIKKyAgICB9Cit9Citub0lubGluZShtYWtlUHJv
dG90eXBlRGljdCkKKwogT2JqZWN0LmRlZmluZVByb3BlcnR5KEZvby5wcm90b3R5cGUsICd5Jywg
ewogICAgIHNldCh4KSB7CiAgICAgICAgIGlmIChGb28ucHJvdG90eXBlLngrKyA9PT0gMSkgewog
ICAgICAgICAgICAgZGVsZXRlIEZvby5wcm90b3R5cGUueDsKLSAgICAgICAgICAgIGlmICh0eXBl
b2YgJHZtICE9PSAndW5kZWZpbmVkJykKKyAgICAgICAgICAgIGlmICh0eXBlb2YgJHZtICE9PSAn
dW5kZWZpbmVkJykgeworICAgICAgICAgICAgICAgIG1ha2VQcm90b3R5cGVEaWN0KCkKICAgICAg
ICAgICAgICAgICAkdm0uZmxhdHRlbkRpY3Rpb25hcnlPYmplY3QoRm9vLnByb3RvdHlwZSk7Cisg
ICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICB9CiB9KTsKZGlmZiAtLWdpdCBhL0pTVGVzdHMv
c3RyZXNzL2NhY2hlLXB1dC1ieS1pZC1wb2x5LXByb3RvLmpzIGIvSlNUZXN0cy9zdHJlc3MvY2Fj
aGUtcHV0LWJ5LWlkLXBvbHktcHJvdG8uanMKaW5kZXggYjc5YmFmMDkyMWUyZDM0MjUyNjI5OWQ4
ZDExNmVlZTZmOTQwMzI5My4uNmFiZmEyMmQwMTQxOGRlYjAwYWE5OTVlZTk1OWZhNmY3NjFjNTk1
YyAxMDA2NDQKLS0tIGEvSlNUZXN0cy9zdHJlc3MvY2FjaGUtcHV0LWJ5LWlkLXBvbHktcHJvdG8u
anMKKysrIGIvSlNUZXN0cy9zdHJlc3MvY2FjaGUtcHV0LWJ5LWlkLXBvbHktcHJvdG8uanMKQEAg
LTQsNiArNCwxNiBAQCBmdW5jdGlvbiBGb28oKSB7IH0KIAogbGV0IHggPSAwOwogCitmdW5jdGlv
biBtYWtlUHJvdG90eXBlRGljdCgpIHsKKyAgICBmb3IgKGxldCBpPTA7IGk8MTAwOyArK2kpIHsK
KyAgICAgICAgRm9vLnByb3RvdHlwZS5hID0gaQorICAgICAgICBGb28ucHJvdG90eXBlLmIgPSBp
CisgICAgICAgIGRlbGV0ZSBGb28ucHJvdG90eXBlLmEKKyAgICAgICAgZGVsZXRlIEZvby5wcm90
b3R5cGUuYgorICAgIH0KK30KK25vSW5saW5lKG1ha2VQcm90b3R5cGVEaWN0KQorCiBPYmplY3Qu
ZGVmaW5lUHJvcGVydHkoRm9vLnByb3RvdHlwZSwgJ3knLCB7CiAgICAgc2V0KF8pIHsKICAgICAg
ICAgaWYgKHgrKyA9PT0gOSkgewpAQCAtMTEsOCArMjEsMTAgQEAgT2JqZWN0LmRlZmluZVByb3Bl
cnR5KEZvby5wcm90b3R5cGUsICd5JywgewogICAgICAgICAgICAgICAgIHZhbHVlOiAxMywKICAg
ICAgICAgICAgICAgICB3cml0YWJsZTogdHJ1ZSwKICAgICAgICAgICAgIH0pOwotICAgICAgICAg
ICAgaWYgKHR5cGVvZiAkdm0gIT09ICd1bmRlZmluZWQnKQorICAgICAgICAgICAgaWYgKHR5cGVv
ZiAkdm0gIT09ICd1bmRlZmluZWQnKSB7CisgICAgICAgICAgICAgICAgbWFrZVByb3RvdHlwZURp
Y3QoKQogICAgICAgICAgICAgICAgICR2bS5mbGF0dGVuRGljdGlvbmFyeU9iamVjdChGb28ucHJv
dG90eXBlKTsKKyAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgIH0sCiAgICAgY29uZmlndXJh
YmxlOiB0cnVlLApkaWZmIC0tZ2l0IGEvSlNUZXN0cy9zdHJlc3MvZGVsZXRlLXByb3BlcnR5LWNo
ZWNrLXN0cnVjdHVyZS10cmFuc2l0aW9uLmpzIGIvSlNUZXN0cy9zdHJlc3MvZGVsZXRlLXByb3Bl
cnR5LWNoZWNrLXN0cnVjdHVyZS10cmFuc2l0aW9uLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjQwM2M3YzA5Y2Mx
MjNmM2IxODU0NjgwYjZjMTdkZDQ1NmE1ZGVmMzEKLS0tIC9kZXYvbnVsbAorKysgYi9KU1Rlc3Rz
L3N0cmVzcy9kZWxldGUtcHJvcGVydHktY2hlY2stc3RydWN0dXJlLXRyYW5zaXRpb24uanMKQEAg
LTAsMCArMSwxODkgQEAKK2Z1bmN0aW9uIGFzc2VydChjb25kaXRpb24pIHsKKyAgICBpZiAoIWNv
bmRpdGlvbikKKyAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJhc3NlcnRpb24gZmFpbGVkIik7Cit9
CisKK2Z1bmN0aW9uIGFzc2VydF9lcShhLCBiKSB7CisgICAgaWYgKGEgIT09IGIpCisgICAgICAg
IHRocm93IG5ldyBFcnJvcigiYXNzZXJ0aW9uIGZhaWxlZDogIiArIGEgKyAiID09PSAiICsgYik7
Cit9CisKK2Z1bmN0aW9uIGFzc2VydF9uZXEoYSwgYikgeworICAgIGlmIChhID09PSBiKQorICAg
ICAgICB0aHJvdyBuZXcgRXJyb3IoImFzc2VydGlvbiBmYWlsZWQ6ICIgKyBhICsgIiAhPT0gIiAr
IGIpOworfQorCitmdW5jdGlvbiBzZChvYmopIHsKKyAgICBsZXQgZGF0YSA9ICR2bS5nZXRTdHJ1
Y3R1cmVUcmFuc2l0aW9uTGlzdChvYmopCisgICAgbGV0IHJlc3VsdCA9IFtdCisKKyAgICBpZiAo
IWRhdGEpCisgICAgICAgIHJldHVybiByZXN1bHQKKworICAgIGZvciAobGV0IGkgPSAwOyBpIDwg
ZGF0YS5sZW5ndGgvNTsgKytpKSB7CisgICAgICAgIHJlc3VsdC5wdXNoKHsgaWQ6IGRhdGFbaSo1
KzBdLCBvZmZzZXQ6IGRhdGFbaSo1KzFdLCBtYXg6IGRhdGFbaSo1KzJdLCBwcm9wZXJ0eTogZGF0
YVtpKjUrM10sIHR5cGU6IGRhdGFbaSo1KzRdID09IDAgPyAiYWRkZWQiIDogImRlbGV0ZWQiIH0p
CisgICAgfQorCisgICAgcmV0dXJuIHJlc3VsdAorfQorCitmdW5jdGlvbiBzaWQob2JqKSB7Cisg
ICAgbGV0IGRhdGEgPSBzZChvYmopCisgICAgcmV0dXJuIGRhdGFbZGF0YS5sZW5ndGgtMV0uaWQK
K30KKworZnVuY3Rpb24gdGVzdERlbGV0ZUlzTm90VW5jYWNoZWFibGUoaSkgeworICAgIGxldCBm
b28gPSB7fQorICAgIGZvb1siYmFyIiArIGldID0gMQorICAgIGZvb1siYmF6IiArIGldID0gMgor
ICAgIGFzc2VydChmb29bImJhciIgKyBpXSA9PT0gMSkKKyAgICBhc3NlcnQoZm9vWyJiYXoiICsg
aV0gPT09IDIpCisgICAgbGV0IG9sZFNpZCA9IHNpZChmb28pCisKKyAgICBhc3NlcnRfZXEoJHZt
LmdldENvbmN1cnJlbnRseShmb28sICJiYXoiK2kpLCAxKQorICAgIGFzc2VydF9lcSgkdm0uZ2V0
Q29uY3VycmVudGx5KGZvbywgImJhciIraSksIDEpCisgICAgYXNzZXJ0X2VxKCR2bS5nZXRDb25j
dXJyZW50bHkoZm9vLCAiZm9vIitpKSwgMCkKKworICAgIGFzc2VydChkZWxldGUgZm9vWyJiYXIi
ICsgaV0pCisgICAgYXNzZXJ0X25lcShvbGRTaWQsIHNpZChmb28pKQorICAgIGFzc2VydCghKCgi
YmFyIiArIGkpIGluIGZvbykpOworICAgIGFzc2VydChmb29bImJheiIgKyBpXSA9PT0gMikKKwor
ICAgIGFzc2VydF9lcSgkdm0uZ2V0Q29uY3VycmVudGx5KGZvbywgImJheiIraSksIDEpCisgICAg
YXNzZXJ0X2VxKCR2bS5nZXRDb25jdXJyZW50bHkoZm9vLCAiYmFyIitpKSwgMCkKKworICAgIGFz
c2VydF9lcShPYmplY3Qua2V5cyhmb28pLmxlbmd0aCwgMSkKKworICAgIGxldCBkYXRhID0gc2Qo
Zm9vKQorICAgIGFzc2VydF9lcShkYXRhW2RhdGEubGVuZ3RoLTFdLnByb3BlcnR5LCAiYmFyIiAr
IGkpCisKKyAgICBmb29bImJhciIgKyBpXSA9IDEKKyAgICBhc3NlcnRfZXEoJHZtLmdldENvbmN1
cnJlbnRseShmb28sICJiYXoiK2kpLCAxKQorICAgIGFzc2VydF9lcSgkdm0uZ2V0Q29uY3VycmVu
dGx5KGZvbywgImJhciIraSksIDEpCisgICAgYXNzZXJ0KGZvb1siYmFyIiArIGldID09PSAxKQor
fQorCitmdW5jdGlvbiB0ZXN0Q2FuTWF0ZXJpYWxpemVEZWxldGVzKGkpIHsKKyAgICBsZXQgZm9v
ID0ge30KKyAgICBmb29bImJhciIgKyBpXSA9IDEKKyAgICBmb29bImJheiIgKyBpXSA9IDIKKwor
ICAgIGFzc2VydChmb29bImJhciIgKyBpXSA9PT0gMSkKKyAgICBhc3NlcnQoZm9vWyJiYXoiICsg
aV0gPT09IDIpCisgICAgYXNzZXJ0KGRlbGV0ZSBmb29bImJhciIgKyBpXSkKKyAgICBhc3NlcnQo
ISgiYmFyIiArIGkgaW4gZm9vKSkKKyAgICBhc3NlcnQoZm9vWyJiYXoiICsgaV0gPT09IDIpCisg
ICAgYXNzZXJ0X2VxKE9iamVjdC5rZXlzKGZvbykubGVuZ3RoLCAxKQorCisgICAgbGV0IGZvbzIg
PSB7fQorICAgIGZvbzJbImJhciIgKyBpXSA9IDMKKyAgICBmb28yWyJiYXoiICsgaV0gPSA0Cisg
ICAgYXNzZXJ0KGRlbGV0ZSBmb28yWyJiYXIiICsgaV0pCisKKyAgICBhc3NlcnRfZXEoc2lkKGZv
bzIpLCBzaWQoZm9vKSkKKyAgICBmb28yWyJmdW4iICsgaV0gPSAzCisgICAgYXNzZXJ0X25lcShz
aWQoZm9vMiksIHNpZChmb28pKQorCisgICAgYXNzZXJ0KGZvbzJbImZ1biIgKyBpXSA9PT0gMykK
KyAgICBhc3NlcnQoZm9vMlsiYmF6IiArIGldID09PSA0KQorICAgIGFzc2VydCghKCJiYXIiICsg
aSBpbiBmb28yKSkKKyAgICBhc3NlcnRfZXEoT2JqZWN0LmtleXMoZm9vMikubGVuZ3RoLCAyKQor
ICAgIGFzc2VydChmb29bImJheiIgKyBpXSA9PT0gMikKKyAgICBhc3NlcnQoISgiYmFyIiArIGkg
aW4gZm9vKSkKKyAgICBhc3NlcnRfZXEoT2JqZWN0LmtleXMoZm9vKS5sZW5ndGgsIDEpCisKKyAg
ICBsZXQgZGF0YSA9IHNkKGZvbykKKyAgICBhc3NlcnRfZXEoZGF0YVtkYXRhLmxlbmd0aC0xXS5w
cm9wZXJ0eSwgImJhciIgKyBpKQorCisgICAgZGF0YSA9IHNkKGZvbzIpCisgICAgYXNzZXJ0X2Vx
KGRhdGFbZGF0YS5sZW5ndGgtMV0ucHJvcGVydHksICJmdW4iICsgaSkKKyAgICBhc3NlcnRfZXEo
ZGF0YVtkYXRhLmxlbmd0aC0yXS5wcm9wZXJ0eSwgImJhciIgKyBpKQorfQorCitmdW5jdGlvbiB0
ZXN0Q2FuRmxhdHRlbihpKSB7CisgICAgbGV0IGZvbyA9IHt9CisgICAgZm9yIChsZXQgaj0wOyBq
PDUwMDsgKytqKSB7CisgICAgICAgIGNvbnN0IG9sZElkID0gc2lkKGZvbykKKworICAgICAgICBm
b29bIngiICsgMTAwMCpqICsgaV0gPSBqCisgICAgICAgIGlmIChqID4gMCkKKyAgICAgICAgICAg
IGRlbGV0ZSBmb29bIngiICsgMTAwMCooaiAtIDEpICsgaV0KKworICAgICAgICBpZiAoaiA+IDEw
MCkKKyAgICAgICAgICAgIGFzc2VydF9lcShzaWQoZm9vKSwgb2xkSWQpCisgICAgfQorCisgICAg
Zm9yIChsZXQgaj0wOyBqPDUwMDsgKytqKSB7CisgICAgICAgIGNvbnN0IHZhbCA9IGZvb1sieCIg
KyAxMDAwKmogKyBpXQorICAgICAgICBpZiAoaiA9PSA0OTkpCisgICAgICAgICAgICBhc3NlcnRf
ZXEodmFsLCBqKQorICAgICAgICBlbHNlCisgICAgICAgICAgICBhc3NlcnRfZXEodmFsLCB1bmRl
ZmluZWQpCisgICAgfQorCisgICAgJHZtLmZsYXR0ZW5EaWN0aW9uYXJ5T2JqZWN0KGZvbykKKwor
ICAgIGZvciAobGV0IGo9MDsgajw1MDA7ICsraikgeworICAgICAgICBjb25zdCB2YWwgPSBmb29b
IngiICsgMTAwMCpqICsgaV0KKyAgICAgICAgaWYgKGogPT0gNDk5KQorICAgICAgICAgICAgYXNz
ZXJ0X2VxKHZhbCwgaikKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgYXNzZXJ0X2VxKHZhbCwg
dW5kZWZpbmVkKQorICAgIH0KK30KKworZnVuY3Rpb24gdGVzdERlbGV0ZVdpdGhJbmxpbmVDYWNo
ZSgpIHsKKyAgICBPYmplY3QucHJvdG90eXBlLmdsb2JhbFByb3BlcnR5ID0gNDIKKworICAgIGZ1
bmN0aW9uIG1ha2VGb28oKSB7CisgICAgICAgIGxldCBmb28gPSB7fQorICAgICAgICBmb28uYmF6
ID0gMQorICAgICAgICBhc3NlcnQoZm9vLmdsb2JhbFByb3BlcnR5ID09PSA0MikKKworICAgICAg
ICByZXR1cm4gZm9vCisgICAgfQorICAgIG5vSW5saW5lKG1ha2VGb28pCisKKyAgICBmdW5jdGlv
biBkb1Rlc3QoeFZhbCkgeworICAgICAgICBmb3IgKGxldCBqPTA7IGo8NTA7ICsraikgeworICAg
ICAgICAgICAgZm9yIChsZXQgej0wOyB6PDEwMDAwOyArK3opIHsKKyAgICAgICAgICAgICAgICBj
b25zdCBmb28gPSBhcnJbal0KKworICAgICAgICAgICAgICAgIGFzc2VydChmb28uYmF6ID09PSAx
KQorICAgICAgICAgICAgICAgIGFzc2VydF9lcShPYmplY3Qua2V5cyhmb28pLmxlbmd0aCwgMSkK
KyAgICAgICAgICAgICAgICBhc3NlcnRfZXEoZm9vLmdsb2JhbFByb3BlcnR5LCB4VmFsKQorICAg
ICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorICAgIG5vSW5saW5lKGRvVGVzdCkKKworICAg
IGFyciA9IG5ldyBBcnJheSg1MCkKKworICAgIGZvciAobGV0IGo9MDsgajw1MDsgKytqKSB7Cisg
ICAgICAgIGFycltqXSA9IG1ha2VGb28oKQorICAgICAgICBpZiAoaiA+IDApCisgICAgICAgICAg
ICBhc3NlcnRfZXEoc2lkKGFycltqLTFdKSwgc2lkKGFycltqXSkpCisgICAgfQorCisgICAgZG9U
ZXN0KDQyKQorCisgICAgT2JqZWN0LnByb3RvdHlwZS5nbG9iYWxQcm9wZXJ0eSA9IDQzCisKKyAg
ICBkb1Rlc3QoNDMpCisKKyAgICBkZWxldGUgT2JqZWN0LnByb3RvdHlwZS5nbG9iYWxQcm9wZXJ0
eQorCisgICAgZG9UZXN0KHVuZGVmaW5lZCkKK30KKwordGVzdERlbGV0ZVdpdGhJbmxpbmVDYWNo
ZSgpCisKK2ZvciAobGV0IGkgPSAwOyBpIDwgMTAwMDsgKytpKSB7CisgICAgdGVzdERlbGV0ZUlz
Tm90VW5jYWNoZWFibGUoaSkKKyAgICB0ZXN0Q2FuTWF0ZXJpYWxpemVEZWxldGVzKDEwMDAraSkK
K30KKworZm9yIChsZXQgaSA9IDA7IGkgPCAxMDA7ICsraSkgeworICAgIHRlc3RDYW5GbGF0dGVu
KDIwMDAraSkKK30KKwpkaWZmIC0tZ2l0IGEvSlNUZXN0cy9zdHJlc3MvZmxhdHRlbi1vYmplY3Qt
emVyby11bnVzZWQtaW5saW5lLXByb3BlcnRpZXMuanMgYi9KU1Rlc3RzL3N0cmVzcy9mbGF0dGVu
LW9iamVjdC16ZXJvLXVudXNlZC1pbmxpbmUtcHJvcGVydGllcy5qcwppbmRleCA2ZmU1YTE0YzQ5
NThiMWJiMmRmNjkxYjE4MmYwOTkyNmQ4M2FhMjkwLi42NDYwYTk0YWE2MzIyZWVmYTRkNmI4NjUw
ZGViMGNjZmJlM2FiNTMxIDEwMDY0NAotLS0gYS9KU1Rlc3RzL3N0cmVzcy9mbGF0dGVuLW9iamVj
dC16ZXJvLXVudXNlZC1pbmxpbmUtcHJvcGVydGllcy5qcworKysgYi9KU1Rlc3RzL3N0cmVzcy9m
bGF0dGVuLW9iamVjdC16ZXJvLXVudXNlZC1pbmxpbmUtcHJvcGVydGllcy5qcwpAQCAtMSw0ICsx
LDEwIEBACiBsZXQgbyA9IHsgZm9vOiAxLCBiYXI6IDIsIGJhejogMyB9OworZm9yIChsZXQgaT0w
OyBpPDEwMDsgKytpKSB7CisgICAgby5hID0gaQorICAgIG8uYiA9IGkKKyAgICBkZWxldGUgby5h
CisgICAgZGVsZXRlIG8uYgorfQogaWYgKCR2bS5pbmxpbmVDYXBhY2l0eShvKSA8PSAzKQogICAg
IHRocm93IG5ldyBFcnJvcigiVGhlcmUgc2hvdWxkIGJlIGlubGluZSBjYXBhY2l0eSIpOwogCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>389706</attachid>
            <date>2020-02-04 14:08:01 -0800</date>
            <delta_ts>2020-02-05 11:22:46 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-206430-20200204140800.patch</filename>
            <type>text/plain</type>
            <size>54314</size>
            <attacher name="Justin Michaud">justin_michaud</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjU1NjkzCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCAy
ODRjYTM0MDg2MmY3NTVmZjM0Njc5NjliY2JiNDlmOThlNzdkY2UzLi40N2IyOGJiYTM5ZWY1Zjc2
YTI3NzAwMmFlZGM1MzhkYmJjZjdkYTY3IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSw2NCBAQAorMjAyMC0wMS0zMCAgSnVzdGluIE1pY2hhdWQgIDxqdXN0aW5fbWljaGF1ZEBh
cHBsZS5jb20+CisKKyAgICAgICAgRGVsZXRpbmcgYSBwcm9wZXJ0eSBzaG91bGQgbm90IHR1cm4g
c3RydWN0dXJlcyBpbnRvIHVuY2FjaGVhYmxlIGRpY3Rpb25hcmllcworICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjA2NDMwCisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgWXVzdWtlIFN1enVraS4KKworICAgICAgICBSaWdodCBub3csIGRlbGV0ZVByb3BlcnR5
L3JlbW92ZVByb3BlcnR5VHJhbnNpdGlvbiBjYXVzZXMgYSBzdHJ1Y3R1cmUgdHJhbnNpdGlvbiB0
byB1bmNhY2hlYWJsZSBkaWN0aW9uYXJ5LiBJbnN0ZWFkLCB3ZSBzaG91bGQgYWxsb3cgaXQgdG8g
dHJhbnNpdGlvbiB0byBhIG5ldyByZWd1bGFyIHN0cnVjdHVyZSBsaWtlIGFkZGluZyBhIHByb3Bl
cnR5IGRvZXMuIFRoaXMgbWVhbnMgdGhhdCB3ZSBoYXZlIHRvOgorCisgICAgICAgIDEpIEJyZWFr
IHRoZSBhc3N1bXB0aW9uIHRoYXQgc3RydWN0dXJlIHRyYW5zaXRpb24gb2Zmc2V0cyBpbmNyZWFz
ZSBtb25vdG9uaWNhbGx5CisKKyAgICAgICAgV2UgYWRkIGEgbmV3IGZsYWcgdG8gdGVsbCB0aGF0
IGEgc3RydWN0dXJlIGhhcyBkZWxldGVkIGl0cyBwcm9wZXJ0eSwgYW5kIHVwZGF0ZSBtYXRlcmlh
bGl6ZVByb3BlcnR5VGFibGUgdG8gdXNlIGl0LgorCisgICAgICAgIDIpIEFkZCBhIG5ldyB0cmFu
c2l0aW9uIG1hcCBhbmQgdHJhbnNpdGlvbiBraW5kIGZvciBkZWxldGVzCisKKyAgICAgICAgV2Ug
Y2FjaGUgdGhlIGRlbGV0ZSB0cmFuc2l0aW9uLiBXZSB3aWxsIG5vdCB0cmFuc2l0aW9uIGJhY2sg
dG8gYSBwcmV2aW91cyBzdHJ1Y3R1cmUgaWYgeW91IGFkZCB0aGVuIGltbWVkaWF0ZWx5IHJlbW92
ZSBhIHByb3BlcnR5LgorCisgICAgICAgIDMpIEZpbmQgc29tZSBoZXVyaXN0aWMgZm9yIHdoZW4g
d2Ugc2hvdWxkIGFjdHVhbGx5IHRyYW5zaXRpb24gdG8gdW5jYWNoZWFibGUgZGljdGlvbmFyeS4K
KworICAgICAgICBTaW5jZSBkZWxldGluZyBwcm9wZXJ0aWVzIGlzIGV4cGVjdGVkIHRvIGJlIHJh
cmUsIHdlIGp1c3Qgd2FsayB0aGUgc3RydWN0dXJlIGxpc3QgYW5kIGNvdW50IGl0cyBzaXplIG9u
IHJlbW92YWwuIAorCisgICAgICAgIFRoaXMgcGF0Y2ggYWxzbyBmaXhlcyBhIHJlbGF0ZWQgYnVn
IGluIGFkZFByb3BlcnR5LCB3aGVyZSB3ZSBkaWQgbm90IHVzZSBhIEdDU2FmZUNvbmN1cnJlbnRK
U0xvY2tlciwgYW5kIGFkZHMgYW4gb3B0aW9uIHRvIHRyaWdnZXIgdGhlIGJ1Zy4gRmluYWxseSwg
d2UgYWRkIHNvbWUgaGVscGVyIG1ldGhvZHMgdG8gZG9sbGFyVk0gdG8gdGVzdC4KKworICAgICAg
ICBUaGlzIGdpdmVzIGEgMjR4IHNwZWVkdXAgb24gZGVsZXRlLXByb3BlcnR5LWtlZXBzLWNhY2hl
YWJsZS1zdHJ1Y3R1cmUuanMsIGFuZCBpcyBuZXV0cmFsIG9uIGRlbGV0ZS1wcm9wZXJ0eS1mcm9t
LXByb3RvdHlwZS1jaGFpbi5qcyAod2hpY2ggd2FzIGFscmVhZHkgZ2VuZXJhdGluZyBjb2RlIHVz
aW5nIHRoZSBpbmxpbmUgY2FjaGUpLgorCisgICAgICAgICogaGVhcC9IZWFwSW5saW5lcy5oOgor
ICAgICAgICAoSlNDOjpIZWFwOjpkZWNyZW1lbnREZWZlcnJhbERlcHRoQW5kR0NJZk5lZWRlZCk6
CisgICAgICAgICogcnVudGltZS9KU09iamVjdC5jcHA6CisgICAgICAgIChKU0M6OkpTT2JqZWN0
OjpkZWxldGVQcm9wZXJ0eSk6CisgICAgICAgICogcnVudGltZS9PcHRpb25zTGlzdC5oOgorICAg
ICAgICAqIHJ1bnRpbWUvUHJvcGVydHlNYXBIYXNoVGFibGUuaDoKKyAgICAgICAgKEpTQzo6UHJv
cGVydHlUYWJsZTo6Z2V0KToKKyAgICAgICAgKEpTQzo6UHJvcGVydHlUYWJsZTo6YWRkKToKKyAg
ICAgICAgKEpTQzo6UHJvcGVydHlUYWJsZTo6YWRkRGVsZXRlZE9mZnNldCk6CisgICAgICAgIChK
U0M6OlByb3BlcnR5VGFibGU6OnJlaW5zZXJ0KToKKyAgICAgICAgKiBydW50aW1lL1N0cnVjdHVy
ZS5jcHA6CisgICAgICAgIChKU0M6OlN0cnVjdHVyZVRyYW5zaXRpb25UYWJsZTo6Y29udGFpbnMg
Y29uc3QpOgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmVUcmFuc2l0aW9uVGFibGU6OmdldCBjb25z
dCk6CisgICAgICAgIChKU0M6OlN0cnVjdHVyZVRyYW5zaXRpb25UYWJsZTo6YWRkKToKKyAgICAg
ICAgKEpTQzo6U3RydWN0dXJlOjpTdHJ1Y3R1cmUpOgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmU6
Om1hdGVyaWFsaXplUHJvcGVydHlUYWJsZSk6CisgICAgICAgIChKU0M6OlN0cnVjdHVyZTo6YWRk
TmV3UHJvcGVydHlUcmFuc2l0aW9uKToKKyAgICAgICAgKEpTQzo6U3RydWN0dXJlOjpyZW1vdmVQ
cm9wZXJ0eVRyYW5zaXRpb24pOgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmU6OnJlbW92ZVByb3Bl
cnR5VHJhbnNpdGlvbkZyb21FeGlzdGluZ1N0cnVjdHVyZSk6CisgICAgICAgIChKU0M6OlN0cnVj
dHVyZTo6cmVtb3ZlTmV3UHJvcGVydHlUcmFuc2l0aW9uKToKKyAgICAgICAgKEpTQzo6U3RydWN0
dXJlOjp0b1VuY2FjaGVhYmxlRGljdGlvbmFyeVRyYW5zaXRpb24pOgorICAgICAgICAoSlNDOjpT
dHJ1Y3R1cmU6OnJlbW92ZSk6CisgICAgICAgIChKU0M6OlN0cnVjdHVyZTo6dmlzaXRDaGlsZHJl
bik6CisgICAgICAgICogcnVudGltZS9TdHJ1Y3R1cmUuaDoKKyAgICAgICAgKiBydW50aW1lL1N0
cnVjdHVyZUlubGluZXMuaDoKKyAgICAgICAgKEpTQzo6U3RydWN0dXJlOjpmb3JFYWNoUHJvcGVy
dHlDb25jdXJyZW50bHkpOgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmU6OmFkZCk6CisgICAgICAg
IChKU0M6OlN0cnVjdHVyZTo6cmVtb3ZlKToKKyAgICAgICAgKEpTQzo6U3RydWN0dXJlOjpyZW1v
dmVQcm9wZXJ0eVdpdGhvdXRUcmFuc2l0aW9uKToKKyAgICAgICAgKiBydW50aW1lL1N0cnVjdHVy
ZVRyYW5zaXRpb25UYWJsZS5oOgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmVUcmFuc2l0aW9uVGFi
bGU6Okhhc2g6Omhhc2gpOgorICAgICAgICAqIHRvb2xzL0pTRG9sbGFyVk0uY3BwOgorICAgICAg
ICAoSlNDOjpKU0RvbGxhclZNSGVscGVyOjpmdW5jdGlvbkdldFN0cnVjdHVyZVRyYW5zaXRpb25M
aXN0KToKKyAgICAgICAgKEpTQzo6ZnVuY3Rpb25HZXRDb25jdXJyZW50bHkpOgorICAgICAgICAo
SlNDOjpKU0RvbGxhclZNOjpmaW5pc2hDcmVhdGlvbik6CisKIDIwMjAtMDItMDQgIEFsZXhleSBT
aHZheWthICA8c2h2YWlrYWxlc2hAZ21haWwuY29tPgogCiAgICAgICAgIFF1YW50aWZpZXJzIGFm
dGVyIGxvb2thaGVhZCBhc3NlcnRpb25zIHNob3VsZCBiZSBzeW50YXggZXJyb3JzIGluIFVuaWNv
ZGUgcGF0dGVybnMgb25seQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAv
SGVhcElubGluZXMuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXBJbmxpbmVzLmgK
aW5kZXggMTdmMjQxMThiODIyZWZiN2Y2NmVlMTI1OTUzNzhmYTU4YzIxN2M2Mi4uN2FmMDU2M2Ix
MWViNmQ4YzE1MjJkNjIwOWZjNGMxOWQ1NTRhN2RjZiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2hlYXAvSGVhcElubGluZXMuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
aGVhcC9IZWFwSW5saW5lcy5oCkBAIC0xODgsNyArMTg4LDcgQEAgaW5saW5lIHZvaWQgSGVhcDo6
ZGVjcmVtZW50RGVmZXJyYWxEZXB0aEFuZEdDSWZOZWVkZWQoKQogICAgIEFTU0VSVCghVGhyZWFk
OjptYXlCZUdDVGhyZWFkKCkgfHwgbV93b3JsZElzU3RvcHBlZCk7CiAgICAgbV9kZWZlcnJhbERl
cHRoLS07CiAgICAgCi0gICAgaWYgKFVOTElLRUxZKG1fZGlkRGVmZXJHQ1dvcmspKSB7CisgICAg
aWYgKFVOTElLRUxZKG1fZGlkRGVmZXJHQ1dvcmspIHx8IE9wdGlvbnM6OmZvcmNlRGlkRGVmZXJH
Q1dvcmsoKSkgewogICAgICAgICBkZWNyZW1lbnREZWZlcnJhbERlcHRoQW5kR0NJZk5lZWRlZFNs
b3coKTsKICAgICAgICAgCiAgICAgICAgIC8vIEhlcmUgYXJlIHRoZSBwb3NzaWJsZSByZWxhdGlv
bnNoaXBzIGJldHdlZW4gbV9kZWZlcnJhbERlcHRoIGFuZCBtX2RpZERlZmVyR0NXb3JrLgpkaWZm
IC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNPYmplY3QuY3BwIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNPYmplY3QuY3BwCmluZGV4IGQ2N2JhOGQ1Y2E5
NTY5ZDA0YTE5ZTUwMzY0NTMwNTk2YmE5ZDg4ZDIuLmFjZDI5ZGVkODEzNTFmYjI4NGIyMTU5YWQ0
N2E2MzFjMzQ5NGYxZGYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0pTT2JqZWN0LmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU09iamVj
dC5jcHAKQEAgLTIwMDEsMTIgKzIwMDEsMjIgQEAgYm9vbCBKU09iamVjdDo6ZGVsZXRlUHJvcGVy
dHkoSlNDZWxsKiBjZWxsLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBQcm9wZXIKICAg
ICBpZiAocHJvcGVydHlJc1ByZXNlbnQpIHsKICAgICAgICAgaWYgKGF0dHJpYnV0ZXMgJiBQcm9w
ZXJ0eUF0dHJpYnV0ZTo6RG9udERlbGV0ZSAmJiB2bS5kZWxldGVQcm9wZXJ0eU1vZGUoKSAhPSBW
TTo6RGVsZXRlUHJvcGVydHlNb2RlOjpJZ25vcmVDb25maWd1cmFibGUpCiAgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgICAgIERlZmVycmVkU3RydWN0dXJlVHJhbnNpdGlvbldhdGNocG9p
bnRGaXJlIGRlZmVycmVkV2F0Y2hwb2ludEZpcmUodm0sIHN0cnVjdHVyZSk7CiAKLSAgICAgICAg
UHJvcGVydHlPZmZzZXQgb2Zmc2V0OworICAgICAgICBQcm9wZXJ0eU9mZnNldCBvZmZzZXQgPSBp
bnZhbGlkT2Zmc2V0OwogICAgICAgICBpZiAoc3RydWN0dXJlLT5pc1VuY2FjaGVhYmxlRGljdGlv
bmFyeSgpKQotICAgICAgICAgICAgb2Zmc2V0ID0gc3RydWN0dXJlLT5yZW1vdmVQcm9wZXJ0eVdp
dGhvdXRUcmFuc2l0aW9uKHZtLCBwcm9wZXJ0eU5hbWUsIFtdIChjb25zdCBDb25jdXJyZW50SlNM
b2NrZXImLCBQcm9wZXJ0eU9mZnNldCkgeyB9KTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAg
dGhpc09iamVjdC0+c2V0U3RydWN0dXJlKHZtLCBTdHJ1Y3R1cmU6OnJlbW92ZVByb3BlcnR5VHJh
bnNpdGlvbih2bSwgc3RydWN0dXJlLCBwcm9wZXJ0eU5hbWUsIG9mZnNldCkpOworICAgICAgICAg
ICAgb2Zmc2V0ID0gc3RydWN0dXJlLT5yZW1vdmVQcm9wZXJ0eVdpdGhvdXRUcmFuc2l0aW9uKHZt
LCBwcm9wZXJ0eU5hbWUsIFtdIChjb25zdCBHQ1NhZmVDb25jdXJyZW50SlNMb2NrZXImLCBQcm9w
ZXJ0eU9mZnNldCwgUHJvcGVydHlPZmZzZXQpIHsgfSk7CisgICAgICAgIGVsc2UgeworICAgICAg
ICAgICAgc3RydWN0dXJlID0gU3RydWN0dXJlOjpyZW1vdmVQcm9wZXJ0eVRyYW5zaXRpb24odm0s
IHN0cnVjdHVyZSwgcHJvcGVydHlOYW1lLCBvZmZzZXQsICZkZWZlcnJlZFdhdGNocG9pbnRGaXJl
KTsKKyAgICAgICAgICAgIGlmICh0aGlzT2JqZWN0LT5tX2J1dHRlcmZseSAmJiAhc3RydWN0dXJl
LT5vdXRPZkxpbmVDYXBhY2l0eSgpICYmICFzdHJ1Y3R1cmUtPmhhc0luZGV4aW5nSGVhZGVyKHRo
aXNPYmplY3QpKSB7CisgICAgICAgICAgICAgICAgdGhpc09iamVjdC0+bnVrZVN0cnVjdHVyZUFu
ZFNldEJ1dHRlcmZseSh2bSwgdGhpc09iamVjdC0+c3RydWN0dXJlSUQoKSwgbnVsbHB0cik7Cisg
ICAgICAgICAgICAgICAgb2Zmc2V0ID0gaW52YWxpZE9mZnNldDsKKyAgICAgICAgICAgICAgICBB
U1NFUlQoc3RydWN0dXJlLT5tYXhPZmZzZXQoKSA9PSBpbnZhbGlkT2Zmc2V0KTsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIHRoaXNPYmplY3QtPnNldFN0cnVjdHVyZSh2bSwgc3RydWN0dXJl
KTsKKyAgICAgICAgfQorCisgICAgICAgIEFTU0VSVCghaXNWYWxpZE9mZnNldChzdHJ1Y3R1cmUt
PmdldCh2bSwgcHJvcGVydHlOYW1lLCBhdHRyaWJ1dGVzKSkpOwogCiAgICAgICAgIGlmIChvZmZz
ZXQgIT0gaW52YWxpZE9mZnNldCkKICAgICAgICAgICAgIHRoaXNPYmplY3QtPmxvY2F0aW9uRm9y
T2Zmc2V0KG9mZnNldCktPmNsZWFyKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9PcHRpb25zTGlzdC5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
T3B0aW9uc0xpc3QuaAppbmRleCA0MDMyM2M4ZGNkMTE0ZjhlMDIwNzRlNzZlMDU2MDFjMzdlMWRl
ZmQxLi40MWNhYjExODRkY2M0NTAyNjhkNjNmYjM3YTM1ZjEyMmRmNThiMjYzIDEwMDY0NAotLS0g
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PcHRpb25zTGlzdC5oCisrKyBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09wdGlvbnNMaXN0LmgKQEAgLTM0Nyw2ICszNDcsNyBA
QCBjb25zdGV4cHIgYm9vbCBlbmFibGVXZWJBc3NlbWJseVN0cmVhbWluZ0FwaSA9IGZhbHNlOwog
ICAgIHYoQm9vbCwgdXNlR0MsIHRydWUsIE5vcm1hbCwgbnVsbHB0cikgXAogICAgIHYoQm9vbCwg
Z2NBdEVuZCwgZmFsc2UsIE5vcm1hbCwgIklmIHRydWUsIHRoZSBqc2MgQ0xJIHdpbGwgZG8gYSBH
QyBiZWZvcmUgZXhpdGluZyIpIFwKICAgICB2KEJvb2wsIGZvcmNlR0NTbG93UGF0aHMsIGZhbHNl
LCBOb3JtYWwsICJJZiB0cnVlLCB3ZSB3aWxsIGZvcmNlIGFsbCBKSVQgZmFzdCBhbGxvY2F0aW9u
cyBkb3duIHRoZWlyIHNsb3cgcGF0aHMuIikgXAorICAgIHYoQm9vbCwgZm9yY2VEaWREZWZlckdD
V29yaywgZmFsc2UsIE5vcm1hbCwgIklmIHRydWUsIHdlIHdpbGwgZm9yY2UgYWxsIERlZmVyR0Mg
ZGVzdHJ1Y3Rpb25zIHRvIHBlcmZvcm0gYSBHQy4iKSBcCiAgICAgdihVbnNpZ25lZCwgZ2NNYXhI
ZWFwU2l6ZSwgMCwgTm9ybWFsLCBudWxscHRyKSBcCiAgICAgdihVbnNpZ25lZCwgZm9yY2VSQU1T
aXplLCAwLCBOb3JtYWwsIG51bGxwdHIpIFwKICAgICB2KEJvb2wsIHJlY29yZEdDUGF1c2VUaW1l
cywgZmFsc2UsIE5vcm1hbCwgbnVsbHB0cikgXApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvUHJvcGVydHlNYXBIYXNoVGFibGUuaCBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL1Byb3BlcnR5TWFwSGFzaFRhYmxlLmgKaW5kZXggY2I2MDE1Y2YyMGU0NTMw
MTE1OWJiMDBkNzQyNjIzNzRmZWVjYjljZi4uZDk5MjgyN2YzYTdiZGE3M2Q5MGQ5ZWExNDIwZDFi
NTQ5MThkZDU1YyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUHJv
cGVydHlNYXBIYXNoVGFibGUuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Q
cm9wZXJ0eU1hcEhhc2hUYWJsZS5oCkBAIC0xNjksOCArMTY5LDcgQEAgcHVibGljOgogICAgIGZp
bmRfaXRlcmF0b3IgZmluZChjb25zdCBLZXlUeXBlJik7CiAgICAgVmFsdWVUeXBlKiBnZXQoY29u
c3QgS2V5VHlwZSYpOwogICAgIC8vIEFkZCBhIHZhbHVlIHRvIHRoZSB0YWJsZQotICAgIGVudW0g
RWZmZWN0T25Qcm9wZXJ0eU9mZnNldCB7IFByb3BlcnR5T2Zmc2V0TWF5Q2hhbmdlLCBQcm9wZXJ0
eU9mZnNldE11c3ROb3RDaGFuZ2UgfTsKLSAgICBzdGQ6OnBhaXI8ZmluZF9pdGVyYXRvciwgYm9v
bD4gYWRkKGNvbnN0IFZhbHVlVHlwZSYgZW50cnksIFByb3BlcnR5T2Zmc2V0JiwgRWZmZWN0T25Q
cm9wZXJ0eU9mZnNldCk7CisgICAgc3RkOjpwYWlyPGZpbmRfaXRlcmF0b3IsIGJvb2w+IFdBUk5f
VU5VU0VEX1JFVFVSTiBhZGQoY29uc3QgVmFsdWVUeXBlJiBlbnRyeSk7CiAgICAgLy8gUmVtb3Zl
IGEgdmFsdWUgZnJvbSB0aGUgdGFibGUuCiAgICAgdm9pZCByZW1vdmUoY29uc3QgZmluZF9pdGVy
YXRvciYgaXRlcik7CiAgICAgdm9pZCByZW1vdmUoY29uc3QgS2V5VHlwZSYga2V5KTsKQEAgLTMy
MSw2ICszMjAsNyBAQCBpbmxpbmUgUHJvcGVydHlUYWJsZTo6VmFsdWVUeXBlKiBQcm9wZXJ0eVRh
YmxlOjpnZXQoY29uc3QgS2V5VHlwZSYga2V5KQogewogICAgIEFTU0VSVChrZXkpOwogICAgIEFT
U0VSVChrZXktPmlzQXRvbSgpIHx8IGtleS0+aXNTeW1ib2woKSk7CisgICAgQVNTRVJUKGtleSAh
PSBQUk9QRVJUWV9NQVBfREVMRVRFRF9FTlRSWV9LRVkpOwogCiAgICAgaWYgKCFtX2tleUNvdW50
KQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKQEAgLTMzNSw4ICszMzUsMTAgQEAgaW5saW5lIFBy
b3BlcnR5VGFibGU6OlZhbHVlVHlwZSogUHJvcGVydHlUYWJsZTo6Z2V0KGNvbnN0IEtleVR5cGUm
IGtleSkKICAgICAgICAgdW5zaWduZWQgZW50cnlJbmRleCA9IG1faW5kZXhbaGFzaCAmIG1faW5k
ZXhNYXNrXTsKICAgICAgICAgaWYgKGVudHJ5SW5kZXggPT0gRW1wdHlFbnRyeUluZGV4KQogICAg
ICAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgICAgIGlmIChrZXkgPT0gdGFibGUoKVtlbnRy
eUluZGV4IC0gMV0ua2V5KQorICAgICAgICBpZiAoa2V5ID09IHRhYmxlKClbZW50cnlJbmRleCAt
IDFdLmtleSkgeworICAgICAgICAgICAgQVNTRVJUKCFtX2RlbGV0ZWRPZmZzZXRzIHx8ICFtX2Rl
bGV0ZWRPZmZzZXRzLT5jb250YWlucyh0YWJsZSgpW2VudHJ5SW5kZXggLSAxXS5vZmZzZXQpKTsK
ICAgICAgICAgICAgIHJldHVybiAmdGFibGUoKVtlbnRyeUluZGV4IC0gMV07CisgICAgICAgIH0K
IAogI2lmIERVTVBfUFJPUEVSVFlNQVBfU1RBVFMKICAgICAgICAgKytwcm9wZXJ0eU1hcEhhc2hU
YWJsZVN0YXRzLT5udW1Mb29rdXBQcm9iaW5nOwpAQCAtMzQ2LDE0ICszNDgsMjEgQEAgaW5saW5l
IFByb3BlcnR5VGFibGU6OlZhbHVlVHlwZSogUHJvcGVydHlUYWJsZTo6Z2V0KGNvbnN0IEtleVR5
cGUmIGtleSkKICAgICB9CiB9CiAKLWlubGluZSBzdGQ6OnBhaXI8UHJvcGVydHlUYWJsZTo6Zmlu
ZF9pdGVyYXRvciwgYm9vbD4gUHJvcGVydHlUYWJsZTo6YWRkKGNvbnN0IFZhbHVlVHlwZSYgZW50
cnksIFByb3BlcnR5T2Zmc2V0JiBvZmZzZXQsIEVmZmVjdE9uUHJvcGVydHlPZmZzZXQgb2Zmc2V0
RWZmZWN0KQoraW5saW5lIHN0ZDo6cGFpcjxQcm9wZXJ0eVRhYmxlOjpmaW5kX2l0ZXJhdG9yLCBi
b29sPiBXQVJOX1VOVVNFRF9SRVRVUk4gUHJvcGVydHlUYWJsZTo6YWRkKGNvbnN0IFZhbHVlVHlw
ZSYgZW50cnkpCiB7CisgICAgQVNTRVJUKCFtX2RlbGV0ZWRPZmZzZXRzIHx8ICFtX2RlbGV0ZWRP
ZmZzZXRzLT5jb250YWlucyhlbnRyeS5vZmZzZXQpKTsKKwogICAgIC8vIExvb2sgZm9yIGEgdmFs
dWUgd2l0aCBhIG1hdGNoaW5nIGtleSBhbHJlYWR5IGluIHRoZSBhcnJheS4KICAgICBmaW5kX2l0
ZXJhdG9yIGl0ZXIgPSBmaW5kKGVudHJ5LmtleSk7Ci0gICAgaWYgKGl0ZXIuZmlyc3QpIHsKLSAg
ICAgICAgUkVMRUFTRV9BU1NFUlQoaXRlci5maXJzdC0+b2Zmc2V0IDw9IG9mZnNldCk7CisgICAg
aWYgKGl0ZXIuZmlyc3QpCiAgICAgICAgIHJldHVybiBzdGQ6Om1ha2VfcGFpcihpdGVyLCBmYWxz
ZSk7CisKKyNpZiBBU1NFUlRfRU5BQkxFRAorICAgIGZvciAoYXV0byYgb3RoZXIgOiAqdGhpcykg
eworICAgICAgICBBU1NFUlQob3RoZXIub2Zmc2V0ICE9IGVudHJ5Lm9mZnNldCk7CisgICAgICAg
IEFTU0VSVChvdGhlci5rZXkgIT0gZW50cnkua2V5KTsKICAgICB9CisjZW5kaWYKIAogI2lmIERV
TVBfUFJPUEVSVFlNQVBfU1RBVFMKICAgICArK3Byb3BlcnR5TWFwSGFzaFRhYmxlU3RhdHMtPm51
bUFkZHM7CkBAIC0zNzcsMTEgKzM4Niw2IEBAIGlubGluZSBzdGQ6OnBhaXI8UHJvcGVydHlUYWJs
ZTo6ZmluZF9pdGVyYXRvciwgYm9vbD4gUHJvcGVydHlUYWJsZTo6YWRkKGNvbnN0IFZhCiAKICAg
ICArK21fa2V5Q291bnQ7CiAgICAgCi0gICAgaWYgKG9mZnNldEVmZmVjdCA9PSBQcm9wZXJ0eU9m
ZnNldE1heUNoYW5nZSkKLSAgICAgICAgb2Zmc2V0ID0gc3RkOjptYXgob2Zmc2V0LCBlbnRyeS5v
ZmZzZXQpOwotICAgIGVsc2UKLSAgICAgICAgUkVMRUFTRV9BU1NFUlQob2Zmc2V0ID49IGVudHJ5
Lm9mZnNldCk7Ci0gICAgCiAgICAgcmV0dXJuIHN0ZDo6bWFrZV9wYWlyKGl0ZXIsIHRydWUpOwog
fQogCkBAIC00NTEsNiArNDU1LDcgQEAgaW5saW5lIHZvaWQgUHJvcGVydHlUYWJsZTo6YWRkRGVs
ZXRlZE9mZnNldChQcm9wZXJ0eU9mZnNldCBvZmZzZXQpCiB7CiAgICAgaWYgKCFtX2RlbGV0ZWRP
ZmZzZXRzKQogICAgICAgICBtX2RlbGV0ZWRPZmZzZXRzID0gbWFrZVVuaXF1ZTxWZWN0b3I8UHJv
cGVydHlPZmZzZXQ+PigpOworICAgIEFTU0VSVCghbV9kZWxldGVkT2Zmc2V0cy0+Y29udGFpbnMo
b2Zmc2V0KSk7CiAgICAgbV9kZWxldGVkT2Zmc2V0cy0+YXBwZW5kKG9mZnNldCk7CiB9CiAKQEAg
LTQ4OSw2ICs0OTQsMTMgQEAgaW5saW5lIHZvaWQgUHJvcGVydHlUYWJsZTo6cmVpbnNlcnQoY29u
c3QgVmFsdWVUeXBlJiBlbnRyeSkKICAgICArK3Byb3BlcnR5TWFwSGFzaFRhYmxlU3RhdHMtPm51
bVJlaW5zZXJ0czsKICNlbmRpZgogCisjaWZuZGVmIEFTU0VSVF9FTkFCTEVECisgICAgZm9yIChh
dXRvJiBvdGhlciA6ICp0aGlzKSB7CisgICAgICAgIEFTU0VSVChvdGhlci5vZmZzZXQgIT0gZW50
cnkub2Zmc2V0KTsKKyAgICAgICAgQVNTRVJUKG90aGVyLmtleSAhPSBlbnRyeS5rZXkpOworICAg
IH0KKyNlbmRpZgorCiAgICAgLy8gVXNlZCB0byBpbnNlcnQgYSB2YWx1ZSBrbm93biBub3QgdG8g
YmUgaW4gdGhlIHRhYmxlLCBhbmQgd2hlcmUKICAgICAvLyB3ZSBrbm93IGNhcGFjaXR5IHRvIGJl
IGF2YWlsYWJsZS4KICAgICBBU1NFUlQoY2FuSW5zZXJ0KCkpOwpkaWZmIC0tZ2l0IGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL1N0cnVjdHVyZS5jcHAKaW5kZXggM2UxNGY4YjZhMzNiZWRkY2NmMGViYTFk
MmYyOTFiNzc1ODc5NGZhOS4uMTk3NzU5ZWE3OWNiODdlMjE0MDNhODNjZjgzNzA1ZGQyY2UxNTQ3
NyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlLmNw
cAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmUuY3BwCkBAIC04
NywyMiArODcsMjIgQEAgaW5saW5lIHZvaWQgU3RydWN0dXJlVHJhbnNpdGlvblRhYmxlOjpzZXRT
aW5nbGVUcmFuc2l0aW9uKFN0cnVjdHVyZSogc3RydWN0dXJlKQogICAgIG1fZGF0YSA9IGJpdHdp
c2VfY2FzdDxpbnRwdHJfdD4oaW1wbCkgfCBVc2luZ1NpbmdsZVNsb3RGbGFnOwogfQogCi1ib29s
IFN0cnVjdHVyZVRyYW5zaXRpb25UYWJsZTo6Y29udGFpbnMoVW5pcXVlZFN0cmluZ0ltcGwqIHJl
cCwgdW5zaWduZWQgYXR0cmlidXRlcykgY29uc3QKK2Jvb2wgU3RydWN0dXJlVHJhbnNpdGlvblRh
YmxlOjpjb250YWlucyhVbmlxdWVkU3RyaW5nSW1wbCogcmVwLCB1bnNpZ25lZCBhdHRyaWJ1dGVz
LCBib29sIGlzQWRkaXRpb24pIGNvbnN0CiB7CiAgICAgaWYgKGlzVXNpbmdTaW5nbGVTbG90KCkp
IHsKICAgICAgICAgU3RydWN0dXJlKiB0cmFuc2l0aW9uID0gc2luZ2xlVHJhbnNpdGlvbigpOwot
ICAgICAgICByZXR1cm4gdHJhbnNpdGlvbiAmJiB0cmFuc2l0aW9uLT5tX3RyYW5zaXRpb25Qcm9w
ZXJ0eU5hbWUgPT0gcmVwICYmIHRyYW5zaXRpb24tPnRyYW5zaXRpb25Qcm9wZXJ0eUF0dHJpYnV0
ZXMoKSA9PSBhdHRyaWJ1dGVzOworICAgICAgICByZXR1cm4gdHJhbnNpdGlvbiAmJiB0cmFuc2l0
aW9uLT5tX3RyYW5zaXRpb25Qcm9wZXJ0eU5hbWUgPT0gcmVwICYmIHRyYW5zaXRpb24tPnRyYW5z
aXRpb25Qcm9wZXJ0eUF0dHJpYnV0ZXMoKSA9PSBhdHRyaWJ1dGVzICYmIHRyYW5zaXRpb24tPmlz
UHJvcGVydHlEZWxldGlvblRyYW5zaXRpb24oKSA9PSAhaXNBZGRpdGlvbjsKICAgICB9Ci0gICAg
cmV0dXJuIG1hcCgpLT5nZXQoc3RkOjptYWtlX3BhaXIocmVwLCBhdHRyaWJ1dGVzKSk7CisgICAg
cmV0dXJuIG1hcCgpLT5nZXQoc3RkOjptYWtlX3R1cGxlKHJlcCwgYXR0cmlidXRlcywgaXNBZGRp
dGlvbikpOwogfQogCi1pbmxpbmUgU3RydWN0dXJlKiBTdHJ1Y3R1cmVUcmFuc2l0aW9uVGFibGU6
OmdldChVbmlxdWVkU3RyaW5nSW1wbCogcmVwLCB1bnNpZ25lZCBhdHRyaWJ1dGVzKSBjb25zdAor
aW5saW5lIFN0cnVjdHVyZSogU3RydWN0dXJlVHJhbnNpdGlvblRhYmxlOjpnZXQoVW5pcXVlZFN0
cmluZ0ltcGwqIHJlcCwgdW5zaWduZWQgYXR0cmlidXRlcywgYm9vbCBpc0FkZGl0aW9uKSBjb25z
dAogewogICAgIGlmIChpc1VzaW5nU2luZ2xlU2xvdCgpKSB7CiAgICAgICAgIFN0cnVjdHVyZSog
dHJhbnNpdGlvbiA9IHNpbmdsZVRyYW5zaXRpb24oKTsKLSAgICAgICAgcmV0dXJuICh0cmFuc2l0
aW9uICYmIHRyYW5zaXRpb24tPm1fdHJhbnNpdGlvblByb3BlcnR5TmFtZSA9PSByZXAgJiYgdHJh
bnNpdGlvbi0+dHJhbnNpdGlvblByb3BlcnR5QXR0cmlidXRlcygpID09IGF0dHJpYnV0ZXMpID8g
dHJhbnNpdGlvbiA6IDA7CisgICAgICAgIHJldHVybiAodHJhbnNpdGlvbiAmJiB0cmFuc2l0aW9u
LT5tX3RyYW5zaXRpb25Qcm9wZXJ0eU5hbWUgPT0gcmVwICYmIHRyYW5zaXRpb24tPnRyYW5zaXRp
b25Qcm9wZXJ0eUF0dHJpYnV0ZXMoKSA9PSBhdHRyaWJ1dGVzICYmIHRyYW5zaXRpb24tPmlzUHJv
cGVydHlEZWxldGlvblRyYW5zaXRpb24oKSA9PSAhaXNBZGRpdGlvbikgPyB0cmFuc2l0aW9uIDog
MDsKICAgICB9Ci0gICAgcmV0dXJuIG1hcCgpLT5nZXQoc3RkOjptYWtlX3BhaXIocmVwLCBhdHRy
aWJ1dGVzKSk7CisgICAgcmV0dXJuIG1hcCgpLT5nZXQoc3RkOjptYWtlX3R1cGxlKHJlcCwgYXR0
cmlidXRlcywgaXNBZGRpdGlvbikpOwogfQogCiB2b2lkIFN0cnVjdHVyZVRyYW5zaXRpb25UYWJs
ZTo6YWRkKFZNJiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUpCkBAIC0xMjcsNyArMTI3LDcgQEAg
dm9pZCBTdHJ1Y3R1cmVUcmFuc2l0aW9uVGFibGU6OmFkZChWTSYgdm0sIFN0cnVjdHVyZSogc3Ry
dWN0dXJlKQogICAgIC8vIE5ld2VyIHZlcnNpb25zIG9mIHRoZSBTVEwgaGF2ZSBhbiBzdGQ6Om1h
a2VfcGFpciBmdW5jdGlvbiB0aGF0IHRha2VzIHJ2YWx1ZSByZWZlcmVuY2VzLgogICAgIC8vIFdo
ZW4gZWl0aGVyIG9mIHRoZSBwYXJhbWV0ZXJzIGFyZSBiaXRmaWVsZHMsIHRoZSBDKysgY29tcGls
ZXIgd2lsbCB0cnkgdG8gYmluZCB0aGVtIGFzIGx2YWx1ZXMsIHdoaWNoIGlzIGludmFsaWQuIFRv
IHdvcmsgYXJvdW5kIHRoaXMsIHVzZSB1bmFyeSAiKyIgdG8gbWFrZSB0aGUgcGFyYW1ldGVyIGFu
IHJ2YWx1ZS4KICAgICAvLyBTZWUgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTU5MjYxIGZvciBtb3JlIGRldGFpbHMKLSAgICBtYXAoKS0+c2V0KHN0ZDo6bWFrZV9wYWly
KHN0cnVjdHVyZS0+bV90cmFuc2l0aW9uUHJvcGVydHlOYW1lLmdldCgpLCArc3RydWN0dXJlLT50
cmFuc2l0aW9uUHJvcGVydHlBdHRyaWJ1dGVzKCkpLCBzdHJ1Y3R1cmUpOworICAgIG1hcCgpLT5z
ZXQoc3RkOjptYWtlX3R1cGxlKHN0cnVjdHVyZS0+bV90cmFuc2l0aW9uUHJvcGVydHlOYW1lLmdl
dCgpLCArc3RydWN0dXJlLT50cmFuc2l0aW9uUHJvcGVydHlBdHRyaWJ1dGVzKCksICFzdHJ1Y3R1
cmUtPmlzUHJvcGVydHlEZWxldGlvblRyYW5zaXRpb24oKSksIHN0cnVjdHVyZSk7CiB9CiAKIHZv
aWQgU3RydWN0dXJlOjpkdW1wU3RhdGlzdGljcygpCkBAIC0yMDAsNyArMjAwLDggQEAgU3RydWN0
dXJlOjpTdHJ1Y3R1cmUoVk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1Zh
bHVlIHByb3RvdHlwZSwgY28KICAgICBzZXRTdGF0aWNQcm9wZXJ0aWVzUmVpZmllZChmYWxzZSk7
CiAgICAgc2V0VHJhbnNpdGlvbldhdGNocG9pbnRJc0xpa2VseVRvQmVGaXJlZChmYWxzZSk7CiAg
ICAgc2V0SGFzQmVlbkRpY3Rpb25hcnkoZmFsc2UpOwotICAgIHNldElzQWRkaW5nUHJvcGVydHlG
b3JUcmFuc2l0aW9uKGZhbHNlKTsKKyAgICBzZXRQcm90ZWN0UHJvcGVydHlUYWJsZVdoaWxlVHJh
bnNpdGlvbmluZyhmYWxzZSk7CisgICAgc2V0SXNQcm9wZXJ0eURlbGV0aW9uVHJhbnNpdGlvbihm
YWxzZSk7CiAgICAgc2V0VHJhbnNpdGlvbk9mZnNldCh2bSwgaW52YWxpZE9mZnNldCk7CiAgICAg
c2V0TWF4T2Zmc2V0KHZtLCBpbnZhbGlkT2Zmc2V0KTsKICAKQEAgLTIzNiw3ICsyMzcsOCBAQCBT
dHJ1Y3R1cmU6OlN0cnVjdHVyZShWTSYgdm0pCiAgICAgc2V0U3RhdGljUHJvcGVydGllc1JlaWZp
ZWQoZmFsc2UpOwogICAgIHNldFRyYW5zaXRpb25XYXRjaHBvaW50SXNMaWtlbHlUb0JlRmlyZWQo
ZmFsc2UpOwogICAgIHNldEhhc0JlZW5EaWN0aW9uYXJ5KGZhbHNlKTsKLSAgICBzZXRJc0FkZGlu
Z1Byb3BlcnR5Rm9yVHJhbnNpdGlvbihmYWxzZSk7CisgICAgc2V0UHJvdGVjdFByb3BlcnR5VGFi
bGVXaGlsZVRyYW5zaXRpb25pbmcoZmFsc2UpOworICAgIHNldElzUHJvcGVydHlEZWxldGlvblRy
YW5zaXRpb24oZmFsc2UpOwogICAgIHNldFRyYW5zaXRpb25PZmZzZXQodm0sIGludmFsaWRPZmZz
ZXQpOwogICAgIHNldE1heE9mZnNldCh2bSwgaW52YWxpZE9mZnNldCk7CiAgCkBAIC0yNzIsNyAr
Mjc0LDggQEAgU3RydWN0dXJlOjpTdHJ1Y3R1cmUoVk0mIHZtLCBTdHJ1Y3R1cmUqIHByZXZpb3Vz
LCBEZWZlcnJlZFN0cnVjdHVyZVRyYW5zaXRpb25XYXQKICAgICBzZXREaWRUcmFuc2l0aW9uKHRy
dWUpOwogICAgIHNldFN0YXRpY1Byb3BlcnRpZXNSZWlmaWVkKHByZXZpb3VzLT5zdGF0aWNQcm9w
ZXJ0aWVzUmVpZmllZCgpKTsKICAgICBzZXRIYXNCZWVuRGljdGlvbmFyeShwcmV2aW91cy0+aGFz
QmVlbkRpY3Rpb25hcnkoKSk7Ci0gICAgc2V0SXNBZGRpbmdQcm9wZXJ0eUZvclRyYW5zaXRpb24o
ZmFsc2UpOworICAgIHNldFByb3RlY3RQcm9wZXJ0eVRhYmxlV2hpbGVUcmFuc2l0aW9uaW5nKGZh
bHNlKTsKKyAgICBzZXRJc1Byb3BlcnR5RGVsZXRpb25UcmFuc2l0aW9uKGZhbHNlKTsKICAgICBz
ZXRUcmFuc2l0aW9uT2Zmc2V0KHZtLCBpbnZhbGlkT2Zmc2V0KTsKICAgICBzZXRNYXhPZmZzZXQo
dm0sIGludmFsaWRPZmZzZXQpOwogIApAQCAtMzU2LDcgKzM1OSw3IEBAIHZvaWQgU3RydWN0dXJl
OjpmaW5kU3RydWN0dXJlc0FuZE1hcEZvck1hdGVyaWFsaXphdGlvbihWZWN0b3I8U3RydWN0dXJl
KiwgOD4mIHN0CiBQcm9wZXJ0eVRhYmxlKiBTdHJ1Y3R1cmU6Om1hdGVyaWFsaXplUHJvcGVydHlU
YWJsZShWTSYgdm0sIGJvb2wgc2V0UHJvcGVydHlUYWJsZSkKIHsKICAgICBBU1NFUlQoc3RydWN0
dXJlKHZtKS0+Y2xhc3NJbmZvKCkgPT0gaW5mbygpKTsKLSAgICBBU1NFUlQoIWlzQWRkaW5nUHJv
cGVydHlGb3JUcmFuc2l0aW9uKCkpOworICAgIEFTU0VSVCghcHJvdGVjdFByb3BlcnR5VGFibGVX
aGlsZVRyYW5zaXRpb25pbmcoKSk7CiAgICAgCiAgICAgRGVmZXJHQyBkZWZlckdDKHZtLmhlYXAp
OwogICAgIApAQCAtMzg0LDEwICszODcsMTkgQEAgUHJvcGVydHlUYWJsZSogU3RydWN0dXJlOjpt
YXRlcmlhbGl6ZVByb3BlcnR5VGFibGUoVk0mIHZtLCBib29sIHNldFByb3BlcnR5VGFibGUKICAg
ICAgICAgc3RydWN0dXJlID0gc3RydWN0dXJlc1tpXTsKICAgICAgICAgaWYgKCFzdHJ1Y3R1cmUt
Pm1fdHJhbnNpdGlvblByb3BlcnR5TmFtZSkKICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAg
ICBBU1NFUlQoaSA9PSBzdHJ1Y3R1cmVzLnNpemUoKSAtIDEgfHwgc3RydWN0dXJlLT5tYXhPZmZz
ZXQoKSA+IHN0cnVjdHVyZXNbaSArIDFdLT5tYXhPZmZzZXQoKSk7CisgICAgICAgIGlmIChzdHJ1
Y3R1cmUtPmlzUHJvcGVydHlEZWxldGlvblRyYW5zaXRpb24oKSkgeworICAgICAgICAgICAgYXV0
byBpdGVtID0gdGFibGUtPmZpbmQoc3RydWN0dXJlLT5tX3RyYW5zaXRpb25Qcm9wZXJ0eU5hbWUu
Z2V0KCkpOworICAgICAgICAgICAgQVNTRVJUKGl0ZW0uZmlyc3QpOworICAgICAgICAgICAgdGFi
bGUtPnJlbW92ZShpdGVtKTsKKyAgICAgICAgICAgIHRhYmxlLT5hZGREZWxldGVkT2Zmc2V0KHN0
cnVjdHVyZS0+dHJhbnNpdGlvbk9mZnNldCgpKTsKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAg
ICAgICB9CiAgICAgICAgIFByb3BlcnR5TWFwRW50cnkgZW50cnkoc3RydWN0dXJlLT5tX3RyYW5z
aXRpb25Qcm9wZXJ0eU5hbWUuZ2V0KCksIHN0cnVjdHVyZS0+dHJhbnNpdGlvbk9mZnNldCgpLCBz
dHJ1Y3R1cmUtPnRyYW5zaXRpb25Qcm9wZXJ0eUF0dHJpYnV0ZXMoKSk7Ci0gICAgICAgIGF1dG8g
bWF4T2Zmc2V0ID0gdGhpcy0+bWF4T2Zmc2V0KCk7Ci0gICAgICAgIHRhYmxlLT5hZGQoZW50cnks
IG1heE9mZnNldCwgUHJvcGVydHlUYWJsZTo6UHJvcGVydHlPZmZzZXRNdXN0Tm90Q2hhbmdlKTsK
KyAgICAgICAgYXV0byBuZXh0T2Zmc2V0ID0gdGFibGUtPm5leHRPZmZzZXQoc3RydWN0dXJlLT5p
bmxpbmVDYXBhY2l0eSgpKTsKKyAgICAgICAgQVNTRVJUX1VOVVNFRChuZXh0T2Zmc2V0LCBuZXh0
T2Zmc2V0ID09IHN0cnVjdHVyZS0+dHJhbnNpdGlvbk9mZnNldCgpKTsKKyAgICAgICAgYXV0byBy
ZXN1bHQgPSB0YWJsZS0+YWRkKGVudHJ5KTsKKyAgICAgICAgQVNTRVJUX1VOVVNFRChyZXN1bHQs
IHJlc3VsdC5zZWNvbmQpOworICAgICAgICBBU1NFUlRfVU5VU0VEKHJlc3VsdCwgcmVzdWx0LmZp
cnN0LmZpcnN0LT5vZmZzZXQgPT0gbmV4dE9mZnNldCk7CiAgICAgfQogICAgIAogICAgIGNoZWNr
T2Zmc2V0Q29uc2lzdGVuY3koCkBAIC00MTAsNyArNDIyLDggQEAgU3RydWN0dXJlKiBTdHJ1Y3R1
cmU6OmFkZFByb3BlcnR5VHJhbnNpdGlvblRvRXhpc3RpbmdTdHJ1Y3R1cmVJbXBsKFN0cnVjdHVy
ZSogc3QKICAgICBBU1NFUlQoIXN0cnVjdHVyZS0+aXNEaWN0aW9uYXJ5KCkpOwogICAgIEFTU0VS
VChzdHJ1Y3R1cmUtPmlzT2JqZWN0KCkpOwogCi0gICAgaWYgKFN0cnVjdHVyZSogZXhpc3RpbmdU
cmFuc2l0aW9uID0gc3RydWN0dXJlLT5tX3RyYW5zaXRpb25UYWJsZS5nZXQodWlkLCBhdHRyaWJ1
dGVzKSkgeworICAgIGNvbnN0ZXhwciBib29sIGlzQWRkaXRpb24gPSB0cnVlOworICAgIGlmIChT
dHJ1Y3R1cmUqIGV4aXN0aW5nVHJhbnNpdGlvbiA9IHN0cnVjdHVyZS0+bV90cmFuc2l0aW9uVGFi
bGUuZ2V0KHVpZCwgYXR0cmlidXRlcywgaXNBZGRpdGlvbikpIHsKICAgICAgICAgdmFsaWRhdGVP
ZmZzZXQoZXhpc3RpbmdUcmFuc2l0aW9uLT50cmFuc2l0aW9uT2Zmc2V0KCksIGV4aXN0aW5nVHJh
bnNpdGlvbi0+aW5saW5lQ2FwYWNpdHkoKSk7CiAgICAgICAgIG9mZnNldCA9IGV4aXN0aW5nVHJh
bnNpdGlvbi0+dHJhbnNpdGlvbk9mZnNldCgpOwogICAgICAgICByZXR1cm4gZXhpc3RpbmdUcmFu
c2l0aW9uOwpAQCAtNDg0LDcgKzQ5Nyw2IEBAIFN0cnVjdHVyZSogU3RydWN0dXJlOjphZGROZXdQ
cm9wZXJ0eVRyYW5zaXRpb24oVk0mIHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgUHJvCiAgICAg
ICAgIFN0cnVjdHVyZSogdHJhbnNpdGlvbiA9IHRvQ2FjaGVhYmxlRGljdGlvbmFyeVRyYW5zaXRp
b24odm0sIHN0cnVjdHVyZSwgZGVmZXJyZWQpOwogICAgICAgICBBU1NFUlQoc3RydWN0dXJlICE9
IHRyYW5zaXRpb24pOwogICAgICAgICBvZmZzZXQgPSB0cmFuc2l0aW9uLT5hZGQodm0sIHByb3Bl
cnR5TmFtZSwgYXR0cmlidXRlcyk7Ci0gICAgICAgIHRyYW5zaXRpb24tPnNldFRyYW5zaXRpb25P
ZmZzZXQodm0sIG9mZnNldCk7CiAgICAgICAgIHJldHVybiB0cmFuc2l0aW9uOwogICAgIH0KICAg
ICAKQEAgLTUwMCwxMCArNTEyLDEwIEBAIFN0cnVjdHVyZSogU3RydWN0dXJlOjphZGROZXdQcm9w
ZXJ0eVRyYW5zaXRpb24oVk0mIHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgUHJvCiAgICAgLy8g
SG9sZGluZyB0aGUgbG9jayBlbnN1cmVzIHRoYXQgd2UgZWl0aGVyIGRvIHRoaXMgYmVmb3JlIHRo
ZSBHQyBzdGFydHMgc2Nhbm5pbmcgdGhlIHN0cnVjdHVyZSwgaW4KICAgICAvLyB3aGljaCBjYXNl
IHRoZSBHQyB3aWxsIG5vdCBibG93IHRoZSB0YWJsZSBhd2F5LCBvciB3ZSBkbyBpdCBhZnRlciB0
aGUgR0MgYWxyZWFkeSByYW4gaW4gd2hpY2gKICAgICAvLyBjYXNlIGFsbCBpcyB3ZWxsLiAgSWYg
aXQgd2Fzbid0IGZvciB0aGUgbG9jaywgdGhlIEdDIHdvdWxkIGhhdmUgVE9DVE9VOiBpZiBjb3Vs
ZCByZWFkCi0gICAgLy8gaXNBZGRpbmdQcm9wZXJ0eUZvclRyYW5zaXRpb24gYmVmb3JlIHdlIHNl
dCBpdCB0byB0cnVlLCBhbmQgdGhlbiBibG93IHRoZSB0YWJsZSBhd2F5IGFmdGVyLgorICAgIC8v
IHByb3RlY3RQcm9wZXJ0eVRhYmxlV2hpbGVUcmFuc2l0aW9uaW5nIGJlZm9yZSB3ZSBzZXQgaXQg
dG8gdHJ1ZSwgYW5kIHRoZW4gYmxvdyB0aGUgdGFibGUgYXdheSBhZnRlci4KICAgICB7CiAgICAg
ICAgIENvbmN1cnJlbnRKU0xvY2tlciBsb2NrZXIodHJhbnNpdGlvbi0+bV9sb2NrKTsKLSAgICAg
ICAgdHJhbnNpdGlvbi0+c2V0SXNBZGRpbmdQcm9wZXJ0eUZvclRyYW5zaXRpb24odHJ1ZSk7Cisg
ICAgICAgIHRyYW5zaXRpb24tPnNldFByb3RlY3RQcm9wZXJ0eVRhYmxlV2hpbGVUcmFuc2l0aW9u
aW5nKHRydWUpOwogICAgIH0KIAogICAgIHRyYW5zaXRpb24tPm1fYmxvYi5zZXRJbmRleGluZ01v
ZGVJbmNsdWRpbmdIaXN0b3J5KHN0cnVjdHVyZS0+aW5kZXhpbmdNb2RlSW5jbHVkaW5nSGlzdG9y
eSgpICYgfkNvcHlPbldyaXRlKTsKQEAgLTUxOCwxMiArNTMwLDExIEBAIFN0cnVjdHVyZSogU3Ry
dWN0dXJlOjphZGROZXdQcm9wZXJ0eVRyYW5zaXRpb24oVk0mIHZtLCBTdHJ1Y3R1cmUqIHN0cnVj
dHVyZSwgUHJvCiAgICAgLy8gTm93IHRoYXQgZXZlcnl0aGluZyBpcyBmaW5lIHdpdGggdGhlIG5l
dyBzdHJ1Y3R1cmUncyBib29ra2VlcGluZywgdGhlIEdDIGlzIGZyZWUgdG8gYmxvdyB0aGUKICAg
ICAvLyB0YWJsZSBhd2F5IGlmIGl0IHdhbnRzLiBXZSBjYW4gbm93IHJlYnVpbGQgaXQgZmluZS4K
ICAgICBXVEY6OnN0b3JlU3RvcmVGZW5jZSgpOwotICAgIHRyYW5zaXRpb24tPnNldElzQWRkaW5n
UHJvcGVydHlGb3JUcmFuc2l0aW9uKGZhbHNlKTsKKyAgICB0cmFuc2l0aW9uLT5zZXRQcm90ZWN0
UHJvcGVydHlUYWJsZVdoaWxlVHJhbnNpdGlvbmluZyhmYWxzZSk7CiAKICAgICBjaGVja09mZnNl
dCh0cmFuc2l0aW9uLT50cmFuc2l0aW9uT2Zmc2V0KCksIHRyYW5zaXRpb24tPmlubGluZUNhcGFj
aXR5KCkpOwogICAgIHsKLSAgICAgICAgQ29uY3VycmVudEpTTG9ja2VyIGxvY2tlcihzdHJ1Y3R1
cmUtPm1fbG9jayk7Ci0gICAgICAgIERlZmVyR0MgZGVmZXJHQyh2bS5oZWFwKTsKKyAgICAgICAg
R0NTYWZlQ29uY3VycmVudEpTTG9ja2VyIGxvY2tlcihzdHJ1Y3R1cmUtPm1fbG9jaywgdm0uaGVh
cCk7CiAgICAgICAgIHN0cnVjdHVyZS0+bV90cmFuc2l0aW9uVGFibGUuYWRkKHZtLCB0cmFuc2l0
aW9uKTsKICAgICB9CiAgICAgdHJhbnNpdGlvbi0+Y2hlY2tPZmZzZXRDb25zaXN0ZW5jeSgpOwpA
QCAtNTMxLDI3ICs1NDIsODUgQEAgU3RydWN0dXJlKiBTdHJ1Y3R1cmU6OmFkZE5ld1Byb3BlcnR5
VHJhbnNpdGlvbihWTSYgdm0sIFN0cnVjdHVyZSogc3RydWN0dXJlLCBQcm8KICAgICByZXR1cm4g
dHJhbnNpdGlvbjsKIH0KIAotU3RydWN0dXJlKiBTdHJ1Y3R1cmU6OnJlbW92ZVByb3BlcnR5VHJh
bnNpdGlvbihWTSYgdm0sIFN0cnVjdHVyZSogc3RydWN0dXJlLCBQcm9wZXJ0eU5hbWUgcHJvcGVy
dHlOYW1lLCBQcm9wZXJ0eU9mZnNldCYgb2Zmc2V0KQotewotICAgIC8vIE5PVEU6IFRoZXJlIGFy
ZSBzb21lIGdvb2QgcmVhc29ucyB3aHkgdGhpcyBnb2VzIGRpcmVjdGx5IHRvIHVuY2FjaGVhYmxl
IGRpY3Rpb25hcnkgcmF0aGVyIHRoYW4KLSAgICAvLyBjYWNoaW5nIHRoZSByZW1vdmFsLiBXZSBj
YW4gZml4IGFsbCBvZiB0aGVzZSB0aGluZ3MsIGJ1dCB3ZSBtdXN0IHJlbWVtYmVyIHRvIGRvIHNv
LCBpZiB3ZSBldmVyIHRyeQotICAgIC8vIHRvIG9wdGltaXplIHRoaXMgY2FzZS4KLSAgICAvLwot
ICAgIC8vIC0gQ2FjaGVkIHRyYW5zaXRpb25zIHVzdWFsbHkgc3RlYWwgdGhlIHByb3BlcnR5IHRh
YmxlLCBhbmQgYXNzdW1lIHRoYXQgdGhpcyBpcyBwb3NzaWJsZSBiZWNhdXNlIHRoZXkKLSAgICAv
LyAgIGNhbiBqdXN0IHJlYnVpbGQgdGhlIHRhYmxlIGJ5IGxvb2tpbmcgYXQgcGFzdCB0cmFuc2l0
aW9ucy4gVGhhdCBjb2RlIGFzc3VtZXMgdGhhdCB0aGUgdGFibGUgb25seQotICAgIC8vICAgZ3Jl
dyBhbmQgbmV2ZXIgc2hyYW5rLiBUbyBzdXBwb3J0IHJlbW92YWxzLCB3ZSdkIGhhdmUgdG8gY2hh
bmdlIHRoZSBwcm9wZXJ0eSB0YWJsZSBtYXRlcmlhbGl6YXRpb24KLSAgICAvLyAgIGNvZGUgdG8g
aGFuZGxlIGRlbGV0aW9ucy4gQWxzbywgd2UgaGF2ZSBsb2dpYyB0byBnZXQgdGhlIGxpc3Qgb2Yg
cHJvcGVydGllcyBvbiBhIHN0cnVjdHVyZSB0aGF0Ci0gICAgLy8gICBsYWNrcyBhIHByb3BlcnR5
IHRhYmxlIGJ5IGp1c3QgbG9va2luZyBiYWNrIHRocm91Z2ggdGhlIHNldCBvZiB0cmFuc2l0aW9u
cyBzaW5jZSB0aGUgbGFzdAotICAgIC8vICAgc3RydWN0dXJlIHRoYXQgaGFkIGEgcGlubmVkIHRh
YmxlLiBUaGF0IGxvZ2ljIHdvdWxkIGFsc28gaGF2ZSB0byBiZSBjaGFuZ2VkIHRvIGhhbmRsZSBj
YWNoZWQKLSAgICAvLyAgIHJlbW92YWxzLgotICAgIC8vCitTdHJ1Y3R1cmUqIFN0cnVjdHVyZTo6
cmVtb3ZlUHJvcGVydHlUcmFuc2l0aW9uKFZNJiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIFBy
b3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIFByb3BlcnR5T2Zmc2V0JiBvZmZzZXQsIERlZmVycmVk
U3RydWN0dXJlVHJhbnNpdGlvbldhdGNocG9pbnRGaXJlKiBkZWZlcnJlZCkKK3sKKyAgICBTdHJ1
Y3R1cmUqIG5ld1N0cnVjdHVyZSA9IHJlbW92ZVByb3BlcnR5VHJhbnNpdGlvbkZyb21FeGlzdGlu
Z1N0cnVjdHVyZSgKKyAgICAgICAgdm0sIHN0cnVjdHVyZSwgcHJvcGVydHlOYW1lLCBvZmZzZXQs
IGRlZmVycmVkKTsKKyAgICBpZiAobmV3U3RydWN0dXJlKQorICAgICAgICByZXR1cm4gbmV3U3Ry
dWN0dXJlOworCisgICAgcmV0dXJuIHJlbW92ZU5ld1Byb3BlcnR5VHJhbnNpdGlvbigKKyAgICAg
ICAgdm0sIHN0cnVjdHVyZSwgcHJvcGVydHlOYW1lLCBvZmZzZXQsIGRlZmVycmVkKTsKK30KKwor
U3RydWN0dXJlKiBTdHJ1Y3R1cmU6OnJlbW92ZVByb3BlcnR5VHJhbnNpdGlvbkZyb21FeGlzdGlu
Z1N0cnVjdHVyZShWTSYgdm0sIFN0cnVjdHVyZSogc3RydWN0dXJlLCBQcm9wZXJ0eU5hbWUgcHJv
cGVydHlOYW1lLCBQcm9wZXJ0eU9mZnNldCYgb2Zmc2V0LCBEZWZlcnJlZFN0cnVjdHVyZVRyYW5z
aXRpb25XYXRjaHBvaW50RmlyZSopCit7CisgICAgQVNTRVJUKCFpc0NvbXBpbGF0aW9uVGhyZWFk
KCkpOwogICAgIEFTU0VSVCghc3RydWN0dXJlLT5pc1VuY2FjaGVhYmxlRGljdGlvbmFyeSgpKTsK
KyAgICBBU1NFUlQoc3RydWN0dXJlLT5pc09iamVjdCgpKTsKKworICAgIHVuc2lnbmVkIGF0dHJp
YnV0ZXM7CisgICAgc3RydWN0dXJlLT5nZXQodm0sIHByb3BlcnR5TmFtZSwgYXR0cmlidXRlcyk7
CisKKyAgICBjb25zdGV4cHIgYm9vbCBpc0FkZGl0aW9uID0gZmFsc2U7CisgICAgaWYgKFN0cnVj
dHVyZSogZXhpc3RpbmdUcmFuc2l0aW9uID0gc3RydWN0dXJlLT5tX3RyYW5zaXRpb25UYWJsZS5n
ZXQocHJvcGVydHlOYW1lLnVpZCgpLCBhdHRyaWJ1dGVzLCBpc0FkZGl0aW9uKSkgeworICAgICAg
ICB2YWxpZGF0ZU9mZnNldChleGlzdGluZ1RyYW5zaXRpb24tPnRyYW5zaXRpb25PZmZzZXQoKSwg
ZXhpc3RpbmdUcmFuc2l0aW9uLT5pbmxpbmVDYXBhY2l0eSgpKTsKKyAgICAgICAgb2Zmc2V0ID0g
ZXhpc3RpbmdUcmFuc2l0aW9uLT50cmFuc2l0aW9uT2Zmc2V0KCk7CisgICAgICAgIHJldHVybiBl
eGlzdGluZ1RyYW5zaXRpb247CisgICAgfQogCi0gICAgU3RydWN0dXJlKiB0cmFuc2l0aW9uID0g
dG9VbmNhY2hlYWJsZURpY3Rpb25hcnlUcmFuc2l0aW9uKHZtLCBzdHJ1Y3R1cmUpOworICAgIHJl
dHVybiBudWxscHRyOworfQogCi0gICAgb2Zmc2V0ID0gdHJhbnNpdGlvbi0+cmVtb3ZlKHByb3Bl
cnR5TmFtZSk7CitTdHJ1Y3R1cmUqIFN0cnVjdHVyZTo6cmVtb3ZlTmV3UHJvcGVydHlUcmFuc2l0
aW9uKFZNJiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5h
bWUsIFByb3BlcnR5T2Zmc2V0JiBvZmZzZXQsIERlZmVycmVkU3RydWN0dXJlVHJhbnNpdGlvbldh
dGNocG9pbnRGaXJlKiBkZWZlcnJlZCkKK3sKKyAgICBBU1NFUlQoIXN0cnVjdHVyZS0+aXNVbmNh
Y2hlYWJsZURpY3Rpb25hcnkoKSk7CisgICAgQVNTRVJUKHN0cnVjdHVyZS0+aXNPYmplY3QoKSk7
CisgICAgQVNTRVJUKCFTdHJ1Y3R1cmU6OnJlbW92ZVByb3BlcnR5VHJhbnNpdGlvbkZyb21FeGlz
dGluZ1N0cnVjdHVyZSh2bSwgc3RydWN0dXJlLCBwcm9wZXJ0eU5hbWUsIG9mZnNldCwgZGVmZXJy
ZWQpKTsKKworICAgIGludCB0cmFuc2l0aW9uQ291bnQgPSAwOworICAgIGZvciAoYXV0byogcyA9
IHN0cnVjdHVyZTsgcyAmJiB0cmFuc2l0aW9uQ291bnQgPD0gc19tYXhUcmFuc2l0aW9uTGVuZ3Ro
OyBzID0gcy0+cHJldmlvdXNJRCgpKQorICAgICAgICArK3RyYW5zaXRpb25Db3VudDsKIAorICAg
IGlmICh0cmFuc2l0aW9uQ291bnQgPiBzX21heFRyYW5zaXRpb25MZW5ndGgpIHsKKyAgICAgICAg
QVNTRVJUKCFpc0NvcHlPbldyaXRlKHN0cnVjdHVyZS0+aW5kZXhpbmdNb2RlKCkpKTsKKyAgICAg
ICAgU3RydWN0dXJlKiB0cmFuc2l0aW9uID0gdG9VbmNhY2hlYWJsZURpY3Rpb25hcnlUcmFuc2l0
aW9uKHZtLCBzdHJ1Y3R1cmUsIGRlZmVycmVkKTsKKyAgICAgICAgQVNTRVJUKHN0cnVjdHVyZSAh
PSB0cmFuc2l0aW9uKTsKKyAgICAgICAgb2Zmc2V0ID0gdHJhbnNpdGlvbi0+cmVtb3ZlKHZtLCBw
cm9wZXJ0eU5hbWUpOworICAgICAgICByZXR1cm4gdHJhbnNpdGlvbjsKKyAgICB9CisKKyAgICBT
dHJ1Y3R1cmUqIHRyYW5zaXRpb24gPSBjcmVhdGUodm0sIHN0cnVjdHVyZSwgZGVmZXJyZWQpOwor
ICAgIHRyYW5zaXRpb24tPm1fY2FjaGVkUHJvdG90eXBlQ2hhaW4uc2V0TWF5QmVOdWxsKHZtLCB0
cmFuc2l0aW9uLCBzdHJ1Y3R1cmUtPm1fY2FjaGVkUHJvdG90eXBlQ2hhaW4uZ2V0KCkpOworCisg
ICAgLy8gV2hpbGUgd2UgYXJlIGRlbGV0aW5nIHRoZSBwcm9wZXJ0eSwgd2UgbmVlZCB0byBtYWtl
IHN1cmUgdGhlIHRhYmxlIGlzIG5vdCBjbGVhcmVkLgorICAgIHsKKyAgICAgICAgQ29uY3VycmVu
dEpTTG9ja2VyIGxvY2tlcih0cmFuc2l0aW9uLT5tX2xvY2spOworICAgICAgICB0cmFuc2l0aW9u
LT5zZXRQcm90ZWN0UHJvcGVydHlUYWJsZVdoaWxlVHJhbnNpdGlvbmluZyh0cnVlKTsKKyAgICB9
CisKKyAgICB0cmFuc2l0aW9uLT5tX2Jsb2Iuc2V0SW5kZXhpbmdNb2RlSW5jbHVkaW5nSGlzdG9y
eShzdHJ1Y3R1cmUtPmluZGV4aW5nTW9kZUluY2x1ZGluZ0hpc3RvcnkoKSAmIH5Db3B5T25Xcml0
ZSk7CisgICAgdHJhbnNpdGlvbi0+bV90cmFuc2l0aW9uUHJvcGVydHlOYW1lID0gcHJvcGVydHlO
YW1lLnVpZCgpOworICAgIHRyYW5zaXRpb24tPnNldFByb3BlcnR5VGFibGUodm0sIHN0cnVjdHVy
ZS0+dGFrZVByb3BlcnR5VGFibGVPckNsb25lSWZQaW5uZWQodm0pKTsKKyAgICB0cmFuc2l0aW9u
LT5zZXRNYXhPZmZzZXQodm0sIHN0cnVjdHVyZS0+bWF4T2Zmc2V0KCkpOworICAgIHRyYW5zaXRp
b24tPnNldElzUHJvcGVydHlEZWxldGlvblRyYW5zaXRpb24odHJ1ZSk7CisKKyAgICBvZmZzZXQg
PSB0cmFuc2l0aW9uLT5yZW1vdmUodm0sIHByb3BlcnR5TmFtZSk7CisgICAgQVNTRVJUKG9mZnNl
dCAhPSBpbnZhbGlkT2Zmc2V0KTsKKyAgICB0cmFuc2l0aW9uLT5zZXRUcmFuc2l0aW9uT2Zmc2V0
KHZtLCBvZmZzZXQpOworCisgICAgLy8gTm93IHRoYXQgZXZlcnl0aGluZyBpcyBmaW5lIHdpdGgg
dGhlIG5ldyBzdHJ1Y3R1cmUncyBib29ra2VlcGluZywgdGhlIEdDIGlzIGZyZWUgdG8gYmxvdyB0
aGUKKyAgICAvLyB0YWJsZSBhd2F5IGlmIGl0IHdhbnRzLiBXZSBjYW4gbm93IHJlYnVpbGQgaXQg
ZmluZS4KKyAgICBXVEY6OnN0b3JlU3RvcmVGZW5jZSgpOworICAgIHRyYW5zaXRpb24tPnNldFBy
b3RlY3RQcm9wZXJ0eVRhYmxlV2hpbGVUcmFuc2l0aW9uaW5nKGZhbHNlKTsKKworICAgIGNoZWNr
T2Zmc2V0KHRyYW5zaXRpb24tPnRyYW5zaXRpb25PZmZzZXQoKSwgdHJhbnNpdGlvbi0+aW5saW5l
Q2FwYWNpdHkoKSk7CisgICAgeworICAgICAgICBHQ1NhZmVDb25jdXJyZW50SlNMb2NrZXIgbG9j
a2VyKHN0cnVjdHVyZS0+bV9sb2NrLCB2bS5oZWFwKTsKKyAgICAgICAgc3RydWN0dXJlLT5tX3Ry
YW5zaXRpb25UYWJsZS5hZGQodm0sIHRyYW5zaXRpb24pOworICAgIH0KICAgICB0cmFuc2l0aW9u
LT5jaGVja09mZnNldENvbnNpc3RlbmN5KCk7CisgICAgc3RydWN0dXJlLT5jaGVja09mZnNldENv
bnNpc3RlbmN5KCk7CiAgICAgcmV0dXJuIHRyYW5zaXRpb247CiB9CiAKQEAgLTYxNCw5ICs2ODMs
OSBAQCBTdHJ1Y3R1cmUqIFN0cnVjdHVyZTo6dG9DYWNoZWFibGVEaWN0aW9uYXJ5VHJhbnNpdGlv
bihWTSYgdm0sIFN0cnVjdHVyZSogc3RydWN0dQogICAgIHJldHVybiB0b0RpY3Rpb25hcnlUcmFu
c2l0aW9uKHZtLCBzdHJ1Y3R1cmUsIENhY2hlZERpY3Rpb25hcnlLaW5kLCBkZWZlcnJlZCk7CiB9
CiAKLVN0cnVjdHVyZSogU3RydWN0dXJlOjp0b1VuY2FjaGVhYmxlRGljdGlvbmFyeVRyYW5zaXRp
b24oVk0mIHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKK1N0cnVjdHVyZSogU3RydWN0dXJlOjp0
b1VuY2FjaGVhYmxlRGljdGlvbmFyeVRyYW5zaXRpb24oVk0mIHZtLCBTdHJ1Y3R1cmUqIHN0cnVj
dHVyZSwgRGVmZXJyZWRTdHJ1Y3R1cmVUcmFuc2l0aW9uV2F0Y2hwb2ludEZpcmUqIGRlZmVycmVk
KQogewotICAgIHJldHVybiB0b0RpY3Rpb25hcnlUcmFuc2l0aW9uKHZtLCBzdHJ1Y3R1cmUsIFVu
Y2FjaGVkRGljdGlvbmFyeUtpbmQpOworICAgIHJldHVybiB0b0RpY3Rpb25hcnlUcmFuc2l0aW9u
KHZtLCBzdHJ1Y3R1cmUsIFVuY2FjaGVkRGljdGlvbmFyeUtpbmQsIGRlZmVycmVkKTsKIH0KIAog
U3RydWN0dXJlKiBTdHJ1Y3R1cmU6OnNlYWxUcmFuc2l0aW9uKFZNJiB2bSwgU3RydWN0dXJlKiBz
dHJ1Y3R1cmUpCkBAIC02NTUsNyArNzI0LDggQEAgU3RydWN0dXJlKiBTdHJ1Y3R1cmU6Om5vblBy
b3BlcnR5VHJhbnNpdGlvblNsb3coVk0mIHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgTm8KICAg
ICBJbmRleGluZ1R5cGUgaW5kZXhpbmdNb2RlSW5jbHVkaW5nSGlzdG9yeSA9IG5ld0luZGV4aW5n
VHlwZShzdHJ1Y3R1cmUtPmluZGV4aW5nTW9kZUluY2x1ZGluZ0hpc3RvcnkoKSwgdHJhbnNpdGlv
bktpbmQpOwogICAgIAogICAgIFN0cnVjdHVyZSogZXhpc3RpbmdUcmFuc2l0aW9uOwotICAgIGlm
ICghc3RydWN0dXJlLT5pc0RpY3Rpb25hcnkoKSAmJiAoZXhpc3RpbmdUcmFuc2l0aW9uID0gc3Ry
dWN0dXJlLT5tX3RyYW5zaXRpb25UYWJsZS5nZXQoMCwgYXR0cmlidXRlcykpKSB7CisgICAgY29u
c3RleHByIGJvb2wgaXNBZGRpdGlvbiA9IHRydWU7CisgICAgaWYgKCFzdHJ1Y3R1cmUtPmlzRGlj
dGlvbmFyeSgpICYmIChleGlzdGluZ1RyYW5zaXRpb24gPSBzdHJ1Y3R1cmUtPm1fdHJhbnNpdGlv
blRhYmxlLmdldCgwLCBhdHRyaWJ1dGVzLCBpc0FkZGl0aW9uKSkpIHsKICAgICAgICAgQVNTRVJU
KGV4aXN0aW5nVHJhbnNpdGlvbi0+dHJhbnNpdGlvblByb3BlcnR5QXR0cmlidXRlcygpID09IGF0
dHJpYnV0ZXMpOwogICAgICAgICBBU1NFUlQoZXhpc3RpbmdUcmFuc2l0aW9uLT5pbmRleGluZ01v
ZGVJbmNsdWRpbmdIaXN0b3J5KCkgPT0gaW5kZXhpbmdNb2RlSW5jbHVkaW5nSGlzdG9yeSk7CiAg
ICAgICAgIHJldHVybiBleGlzdGluZ1RyYW5zaXRpb247CkBAIC05NzcsOSArMTA0NywxMSBAQCBQ
cm9wZXJ0eU9mZnNldCBTdHJ1Y3R1cmU6OmFkZChWTSYgdm0sIFByb3BlcnR5TmFtZSBwcm9wZXJ0
eU5hbWUsIHVuc2lnbmVkIGF0dHJpYgogICAgICAgICB9KTsKIH0KIAotUHJvcGVydHlPZmZzZXQg
U3RydWN0dXJlOjpyZW1vdmUoUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSkKK1Byb3BlcnR5T2Zm
c2V0IFN0cnVjdHVyZTo6cmVtb3ZlKFZNJiB2bSwgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSkK
IHsKLSAgICByZXR1cm4gcmVtb3ZlKHByb3BlcnR5TmFtZSwgW10gKGNvbnN0IENvbmN1cnJlbnRK
U0xvY2tlciYsIFByb3BlcnR5T2Zmc2V0KSB7IH0pOworICAgIHJldHVybiByZW1vdmU8U2hvdWxk
UGluOjpObz4odm0sIHByb3BlcnR5TmFtZSwgW3RoaXMsICZ2bV0gKGNvbnN0IEdDU2FmZUNvbmN1
cnJlbnRKU0xvY2tlciYsIFByb3BlcnR5T2Zmc2V0LCBQcm9wZXJ0eU9mZnNldCBuZXdNYXhPZmZz
ZXQpIHsKKyAgICAgICAgc2V0TWF4T2Zmc2V0KHZtLCBuZXdNYXhPZmZzZXQpOworICAgIH0pOwog
fQogCiB2b2lkIFN0cnVjdHVyZTo6Z2V0UHJvcGVydHlOYW1lc0Zyb21TdHJ1Y3R1cmUoVk0mIHZt
LCBQcm9wZXJ0eU5hbWVBcnJheSYgcHJvcGVydHlOYW1lcywgRW51bWVyYXRpb25Nb2RlIG1vZGUp
CkBAIC0xMDU5LDcgKzExMzEsNyBAQCB2b2lkIFN0cnVjdHVyZTo6dmlzaXRDaGlsZHJlbihKU0Nl
bGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQogICAgIH0KICAgICB2aXNpdG9yLmFwcGVu
ZCh0aGlzT2JqZWN0LT5tX3ByZXZpb3VzT3JSYXJlRGF0YSk7CiAKLSAgICBpZiAodGhpc09iamVj
dC0+aXNQaW5uZWRQcm9wZXJ0eVRhYmxlKCkgfHwgdGhpc09iamVjdC0+aXNBZGRpbmdQcm9wZXJ0
eUZvclRyYW5zaXRpb24oKSkgeworICAgIGlmICh0aGlzT2JqZWN0LT5pc1Bpbm5lZFByb3BlcnR5
VGFibGUoKSB8fCB0aGlzT2JqZWN0LT5wcm90ZWN0UHJvcGVydHlUYWJsZVdoaWxlVHJhbnNpdGlv
bmluZygpKSB7CiAgICAgICAgIC8vIE5PVEU6IFRoaXMgY2FuIGludGVybGVhdmUgaW4gcGluKCks
IGluIHdoaWNoIGNhc2UgaXQgbWF5IHNlZSBhIG51bGwgcHJvcGVydHkgdGFibGUuCiAgICAgICAg
IC8vIFRoYXQncyBmaW5lLCBiZWNhdXNlIHRoZW4gdGhlIGJhcnJpZXIgd2lsbCBmaXJlIGFuZCB3
ZSB3aWxsIHNjYW4gdGhpcyBhZ2Fpbi4KICAgICAgICAgdmlzaXRvci5hcHBlbmQodGhpc09iamVj
dC0+bV9wcm9wZXJ0eVRhYmxlVW5zYWZlKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL1N0cnVjdHVyZS5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
U3RydWN0dXJlLmgKaW5kZXggZjg1NWJhODYxMmI2OTMwMGVhMmVjMDFlZmE5NDAwNDM4ZmJlNDQ2
ZS4uZmZlMzhkZGJkOTFhMzk0MmQ2ODgyMGUwNjYzMDcyMzJkNGZjMDNkZiAxMDA2NDQKLS0tIGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlLmgKKysrIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlLmgKQEAgLTE4OSwxMSArMTg5LDEzIEBAIHB1
YmxpYzoKICAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMgU3RydWN0dXJlKiBhZGROZXdQcm9w
ZXJ0eVRyYW5zaXRpb24oVk0mLCBTdHJ1Y3R1cmUqLCBQcm9wZXJ0eU5hbWUsIHVuc2lnbmVkIGF0
dHJpYnV0ZXMsIFByb3BlcnR5T2Zmc2V0JiwgUHV0UHJvcGVydHlTbG90OjpDb250ZXh0ID0gUHV0
UHJvcGVydHlTbG90OjpVbmtub3duQ29udGV4dCwgRGVmZXJyZWRTdHJ1Y3R1cmVUcmFuc2l0aW9u
V2F0Y2hwb2ludEZpcmUqID0gbnVsbHB0cik7CiAgICAgc3RhdGljIFN0cnVjdHVyZSogYWRkUHJv
cGVydHlUcmFuc2l0aW9uVG9FeGlzdGluZ1N0cnVjdHVyZUNvbmN1cnJlbnRseShTdHJ1Y3R1cmUq
LCBVbmlxdWVkU3RyaW5nSW1wbCogdWlkLCB1bnNpZ25lZCBhdHRyaWJ1dGVzLCBQcm9wZXJ0eU9m
ZnNldCYpOwogICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyBTdHJ1Y3R1cmUqIGFkZFByb3Bl
cnR5VHJhbnNpdGlvblRvRXhpc3RpbmdTdHJ1Y3R1cmUoU3RydWN0dXJlKiwgUHJvcGVydHlOYW1l
LCB1bnNpZ25lZCBhdHRyaWJ1dGVzLCBQcm9wZXJ0eU9mZnNldCYpOwotICAgIHN0YXRpYyBTdHJ1
Y3R1cmUqIHJlbW92ZVByb3BlcnR5VHJhbnNpdGlvbihWTSYsIFN0cnVjdHVyZSosIFByb3BlcnR5
TmFtZSwgUHJvcGVydHlPZmZzZXQmKTsKKyAgICBzdGF0aWMgU3RydWN0dXJlKiByZW1vdmVOZXdQ
cm9wZXJ0eVRyYW5zaXRpb24oVk0mLCBTdHJ1Y3R1cmUqLCBQcm9wZXJ0eU5hbWUsIFByb3BlcnR5
T2Zmc2V0JiwgRGVmZXJyZWRTdHJ1Y3R1cmVUcmFuc2l0aW9uV2F0Y2hwb2ludEZpcmUqID0gbnVs
bHB0cik7CisgICAgc3RhdGljIFN0cnVjdHVyZSogcmVtb3ZlUHJvcGVydHlUcmFuc2l0aW9uKFZN
JiwgU3RydWN0dXJlKiwgUHJvcGVydHlOYW1lLCBQcm9wZXJ0eU9mZnNldCYsIERlZmVycmVkU3Ry
dWN0dXJlVHJhbnNpdGlvbldhdGNocG9pbnRGaXJlKiA9IG51bGxwdHIpOworICAgIHN0YXRpYyBT
dHJ1Y3R1cmUqIHJlbW92ZVByb3BlcnR5VHJhbnNpdGlvbkZyb21FeGlzdGluZ1N0cnVjdHVyZShW
TSYsIFN0cnVjdHVyZSosIFByb3BlcnR5TmFtZSwgUHJvcGVydHlPZmZzZXQmLCBEZWZlcnJlZFN0
cnVjdHVyZVRyYW5zaXRpb25XYXRjaHBvaW50RmlyZSogPSBudWxscHRyKTsKICAgICBzdGF0aWMg
U3RydWN0dXJlKiBjaGFuZ2VQcm90b3R5cGVUcmFuc2l0aW9uKFZNJiwgU3RydWN0dXJlKiwgSlNW
YWx1ZSBwcm90b3R5cGUsIERlZmVycmVkU3RydWN0dXJlVHJhbnNpdGlvbldhdGNocG9pbnRGaXJl
Jik7CiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIFN0cnVjdHVyZSogYXR0cmlidXRlQ2hh
bmdlVHJhbnNpdGlvbihWTSYsIFN0cnVjdHVyZSosIFByb3BlcnR5TmFtZSwgdW5zaWduZWQgYXR0
cmlidXRlcyk7CiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIFN0cnVjdHVyZSogdG9DYWNo
ZWFibGVEaWN0aW9uYXJ5VHJhbnNpdGlvbihWTSYsIFN0cnVjdHVyZSosIERlZmVycmVkU3RydWN0
dXJlVHJhbnNpdGlvbldhdGNocG9pbnRGaXJlKiA9IG51bGxwdHIpOwotICAgIHN0YXRpYyBTdHJ1
Y3R1cmUqIHRvVW5jYWNoZWFibGVEaWN0aW9uYXJ5VHJhbnNpdGlvbihWTSYsIFN0cnVjdHVyZSop
OworICAgIHN0YXRpYyBTdHJ1Y3R1cmUqIHRvVW5jYWNoZWFibGVEaWN0aW9uYXJ5VHJhbnNpdGlv
bihWTSYsIFN0cnVjdHVyZSosIERlZmVycmVkU3RydWN0dXJlVHJhbnNpdGlvbldhdGNocG9pbnRG
aXJlKiA9IG51bGxwdHIpOwogICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyBTdHJ1Y3R1cmUq
IHNlYWxUcmFuc2l0aW9uKFZNJiwgU3RydWN0dXJlKik7CiAgICAgSlNfRVhQT1JUX1BSSVZBVEUg
c3RhdGljIFN0cnVjdHVyZSogZnJlZXplVHJhbnNpdGlvbihWTSYsIFN0cnVjdHVyZSopOwogICAg
IHN0YXRpYyBTdHJ1Y3R1cmUqIHByZXZlbnRFeHRlbnNpb25zVHJhbnNpdGlvbihWTSYsIFN0cnVj
dHVyZSopOwpAQCAtNDQyLDEwICs0NDQsNiBAQCBwdWJsaWM6CiAgICAgewogICAgICAgICByZXR1
cm4gc3RkOjptaW48dW5zaWduZWQ+KG1heE9mZnNldCgpICsgMSwgbV9pbmxpbmVDYXBhY2l0eSk7
CiAgICAgfQotICAgIHVuc2lnbmVkIHRvdGFsU3RvcmFnZVNpemUoKSBjb25zdAotICAgIHsKLSAg
ICAgICAgcmV0dXJuIG51bWJlck9mU2xvdHNGb3JNYXhPZmZzZXQobWF4T2Zmc2V0KCksIG1faW5s
aW5lQ2FwYWNpdHkpOwotICAgIH0KICAgICB1bnNpZ25lZCB0b3RhbFN0b3JhZ2VDYXBhY2l0eSgp
IGNvbnN0CiAgICAgewogICAgICAgICBBU1NFUlQoc3RydWN0dXJlKCktPmNsYXNzSW5mbygpID09
IGluZm8oKSk7CkBAIC02OTMsOCArNjkxLDkgQEAgcHVibGljOgogICAgIERFRklORV9CSVRGSUVM
RChib29sLCBkaWRXYXRjaEludGVybmFsUHJvcGVydGllcywgRGlkV2F0Y2hJbnRlcm5hbFByb3Bl
cnRpZXMsIDEsIDI1KTsKICAgICBERUZJTkVfQklURklFTEQoYm9vbCwgdHJhbnNpdGlvbldhdGNo
cG9pbnRJc0xpa2VseVRvQmVGaXJlZCwgVHJhbnNpdGlvbldhdGNocG9pbnRJc0xpa2VseVRvQmVG
aXJlZCwgMSwgMjYpOwogICAgIERFRklORV9CSVRGSUVMRChib29sLCBoYXNCZWVuRGljdGlvbmFy
eSwgSGFzQmVlbkRpY3Rpb25hcnksIDEsIDI3KTsKLSAgICBERUZJTkVfQklURklFTEQoYm9vbCwg
aXNBZGRpbmdQcm9wZXJ0eUZvclRyYW5zaXRpb24sIElzQWRkaW5nUHJvcGVydHlGb3JUcmFuc2l0
aW9uLCAxLCAyOCk7CisgICAgREVGSU5FX0JJVEZJRUxEKGJvb2wsIHByb3RlY3RQcm9wZXJ0eVRh
YmxlV2hpbGVUcmFuc2l0aW9uaW5nLCBQcm90ZWN0UHJvcGVydHlUYWJsZVdoaWxlVHJhbnNpdGlv
bmluZywgMSwgMjgpOwogICAgIERFRklORV9CSVRGSUVMRChib29sLCBoYXNVbmRlcnNjb3JlUHJv
dG9Qcm9wZXJ0eUV4Y2x1ZGluZ09yaWdpbmFsUHJvdG8sIEhhc1VuZGVyc2NvcmVQcm90b1Byb3Bl
cnR5RXhjbHVkaW5nT3JpZ2luYWxQcm90bywgMSwgMjkpOworICAgIERFRklORV9CSVRGSUVMRChi
b29sLCBpc1Byb3BlcnR5RGVsZXRpb25UcmFuc2l0aW9uLCBJc1Byb3BlcnR5RGVsZXRpb25UcmFu
c2l0aW9uLCAxLCAzMCk7CiAKIHByaXZhdGU6CiAgICAgZnJpZW5kIGNsYXNzIExMSW50T2Zmc2V0
c0V4dHJhY3RvcjsKQEAgLTcxOSw5ICs3MTgsOSBAQCBwcml2YXRlOgogICAgIHRlbXBsYXRlPFNo
b3VsZFBpbiwgdHlwZW5hbWUgRnVuYz4KICAgICBQcm9wZXJ0eU9mZnNldCBhZGQoVk0mLCBQcm9w
ZXJ0eU5hbWUsIHVuc2lnbmVkIGF0dHJpYnV0ZXMsIGNvbnN0IEZ1bmMmKTsKICAgICBQcm9wZXJ0
eU9mZnNldCBhZGQoVk0mLCBQcm9wZXJ0eU5hbWUsIHVuc2lnbmVkIGF0dHJpYnV0ZXMpOwotICAg
IHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmM+Ci0gICAgUHJvcGVydHlPZmZzZXQgcmVtb3ZlKFByb3Bl
cnR5TmFtZSwgY29uc3QgRnVuYyYpOwotICAgIFByb3BlcnR5T2Zmc2V0IHJlbW92ZShQcm9wZXJ0
eU5hbWUpOworICAgIHRlbXBsYXRlPFNob3VsZFBpbiwgdHlwZW5hbWUgRnVuYz4KKyAgICBQcm9w
ZXJ0eU9mZnNldCByZW1vdmUoVk0mLCBQcm9wZXJ0eU5hbWUsIGNvbnN0IEZ1bmMmKTsKKyAgICBQ
cm9wZXJ0eU9mZnNldCByZW1vdmUoVk0mLCBQcm9wZXJ0eU5hbWUpOwogCiAgICAgdm9pZCBjaGVj
a0NvbnNpc3RlbmN5KCk7CiAKQEAgLTgzMyw2ICs4MzIsNyBAQCBwcml2YXRlOgogICAgIFRpbnlC
bG9vbUZpbHRlciBtX3NlZW5Qcm9wZXJ0aWVzOwogCiAgICAgZnJpZW5kIGNsYXNzIFZNSW5zcGVj
dG9yOworICAgIGZyaWVuZCBjbGFzcyBKU0RvbGxhclZNSGVscGVyOwogfTsKIAogfSAvLyBuYW1l
c3BhY2UgSlNDCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1
Y3R1cmVJbmxpbmVzLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmVJ
bmxpbmVzLmgKaW5kZXggMWE0ZjIwMjQ2YTI3NzljMjlmYjk2Y2UwMDUwMGI1NGJiNDZlYjU3MS4u
MGNkOThkNTJhY2M3ZjcxNGMwNWIxNTNlMDgxMzllNDkxY2Q4Y2Y4YyAxMDA2NDQKLS0tIGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlSW5saW5lcy5oCisrKyBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZUlubGluZXMuaApAQCAtMTYzLDI4ICsx
NjMsNDAgQEAgdGVtcGxhdGU8dHlwZW5hbWUgRnVuY3Rvcj4KIHZvaWQgU3RydWN0dXJlOjpmb3JF
YWNoUHJvcGVydHlDb25jdXJyZW50bHkoY29uc3QgRnVuY3RvciYgZnVuY3RvcikKIHsKICAgICBW
ZWN0b3I8U3RydWN0dXJlKiwgOD4gc3RydWN0dXJlczsKLSAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVy
ZTsKKyAgICBTdHJ1Y3R1cmUqIHRhYmxlU3RydWN0dXJlOwogICAgIFByb3BlcnR5VGFibGUqIHRh
YmxlOwogICAgIAotICAgIGZpbmRTdHJ1Y3R1cmVzQW5kTWFwRm9yTWF0ZXJpYWxpemF0aW9uKHN0
cnVjdHVyZXMsIHN0cnVjdHVyZSwgdGFibGUpOworICAgIGZpbmRTdHJ1Y3R1cmVzQW5kTWFwRm9y
TWF0ZXJpYWxpemF0aW9uKHN0cnVjdHVyZXMsIHRhYmxlU3RydWN0dXJlLCB0YWJsZSk7CisKKyAg
ICBIYXNoU2V0PFVuaXF1ZWRTdHJpbmdJbXBsKj4gc2VlblByb3BlcnRpZXM7CisKKyAgICBmb3Ig
KGF1dG8qIHN0cnVjdHVyZSA6IHN0cnVjdHVyZXMpIHsKKyAgICAgICAgaWYgKCFzdHJ1Y3R1cmUt
Pm1fdHJhbnNpdGlvblByb3BlcnR5TmFtZSB8fCBzZWVuUHJvcGVydGllcy5jb250YWlucyhzdHJ1
Y3R1cmUtPm1fdHJhbnNpdGlvblByb3BlcnR5TmFtZS5nZXQoKSkpCisgICAgICAgICAgICBjb250
aW51ZTsKKworICAgICAgICBzZWVuUHJvcGVydGllcy5hZGQoc3RydWN0dXJlLT5tX3RyYW5zaXRp
b25Qcm9wZXJ0eU5hbWUuZ2V0KCkpOworCisgICAgICAgIGlmIChzdHJ1Y3R1cmUtPmlzUHJvcGVy
dHlEZWxldGlvblRyYW5zaXRpb24oKSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAg
IGlmICghZnVuY3RvcihQcm9wZXJ0eU1hcEVudHJ5KHN0cnVjdHVyZS0+bV90cmFuc2l0aW9uUHJv
cGVydHlOYW1lLmdldCgpLCBzdHJ1Y3R1cmUtPnRyYW5zaXRpb25PZmZzZXQoKSwgc3RydWN0dXJl
LT50cmFuc2l0aW9uUHJvcGVydHlBdHRyaWJ1dGVzKCkpKSkgeworICAgICAgICAgICAgaWYgKHRh
YmxlKQorICAgICAgICAgICAgICAgIHRhYmxlU3RydWN0dXJlLT5tX2xvY2sudW5sb2NrKCk7Cisg
ICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICB9CiAgICAgCiAgICAgaWYgKHRhYmxl
KSB7CiAgICAgICAgIGZvciAoYXV0byYgZW50cnkgOiAqdGFibGUpIHsKKyAgICAgICAgICAgIGlm
IChzZWVuUHJvcGVydGllcy5jb250YWlucyhlbnRyeS5rZXkpKQorICAgICAgICAgICAgICAgIGNv
bnRpbnVlOworCiAgICAgICAgICAgICBpZiAoIWZ1bmN0b3IoZW50cnkpKSB7Ci0gICAgICAgICAg
ICAgICAgc3RydWN0dXJlLT5tX2xvY2sudW5sb2NrKCk7CisgICAgICAgICAgICAgICAgdGFibGVT
dHJ1Y3R1cmUtPm1fbG9jay51bmxvY2soKTsKICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAg
ICAgICAgICB9CiAgICAgICAgIH0KLSAgICAgICAgc3RydWN0dXJlLT5tX2xvY2sudW5sb2NrKCk7
Ci0gICAgfQotICAgIAotICAgIGZvciAodW5zaWduZWQgaSA9IHN0cnVjdHVyZXMuc2l6ZSgpOyBp
LS07KSB7Ci0gICAgICAgIHN0cnVjdHVyZSA9IHN0cnVjdHVyZXNbaV07Ci0gICAgICAgIGlmICgh
c3RydWN0dXJlLT5tX3RyYW5zaXRpb25Qcm9wZXJ0eU5hbWUpCi0gICAgICAgICAgICBjb250aW51
ZTsKLSAgICAgICAgCi0gICAgICAgIGlmICghZnVuY3RvcihQcm9wZXJ0eU1hcEVudHJ5KHN0cnVj
dHVyZS0+bV90cmFuc2l0aW9uUHJvcGVydHlOYW1lLmdldCgpLCBzdHJ1Y3R1cmUtPnRyYW5zaXRp
b25PZmZzZXQoKSwgc3RydWN0dXJlLT50cmFuc2l0aW9uUHJvcGVydHlBdHRyaWJ1dGVzKCkpKSkK
LSAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgdGFibGVTdHJ1Y3R1cmUtPm1fbG9jay51bmxv
Y2soKTsKICAgICB9CiB9CiAKQEAgLTQ1MSwxMSArNDYzLDEyIEBAIGlubGluZSBQcm9wZXJ0eU9m
ZnNldCBTdHJ1Y3R1cmU6OmFkZChWTSYgdm0sIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIHVu
c2lnbmVkCiAgICAgUHJvcGVydHlPZmZzZXQgbmV3T2Zmc2V0ID0gdGFibGUtPm5leHRPZmZzZXQo
bV9pbmxpbmVDYXBhY2l0eSk7CiAKICAgICBtX3Byb3BlcnR5SGFzaCA9IG1fcHJvcGVydHlIYXNo
IF4gcmVwLT5leGlzdGluZ1N5bWJvbEF3YXJlSGFzaCgpOwotCiAgICAgbV9zZWVuUHJvcGVydGll
cy5hZGQoYml0d2lzZV9jYXN0PHVpbnRwdHJfdD4ocmVwKSk7Ci0gICAgCi0gICAgUHJvcGVydHlP
ZmZzZXQgbmV3TWF4T2Zmc2V0ID0gbWF4T2Zmc2V0KCk7Ci0gICAgdGFibGUtPmFkZChQcm9wZXJ0
eU1hcEVudHJ5KHJlcCwgbmV3T2Zmc2V0LCBhdHRyaWJ1dGVzKSwgbmV3TWF4T2Zmc2V0LCBQcm9w
ZXJ0eVRhYmxlOjpQcm9wZXJ0eU9mZnNldE1heUNoYW5nZSk7CisKKyAgICBhdXRvIHJlc3VsdCA9
IHRhYmxlLT5hZGQoUHJvcGVydHlNYXBFbnRyeShyZXAsIG5ld09mZnNldCwgYXR0cmlidXRlcykp
OworICAgIEFTU0VSVF9VTlVTRUQocmVzdWx0LCByZXN1bHQuc2Vjb25kKTsKKyAgICBBU1NFUlRf
VU5VU0VEKHJlc3VsdCwgcmVzdWx0LmZpcnN0LmZpcnN0LT5vZmZzZXQgPT0gbmV3T2Zmc2V0KTsK
KyAgICBhdXRvIG5ld01heE9mZnNldCA9IHN0ZDo6bWF4KG5ld09mZnNldCwgbWF4T2Zmc2V0KCkp
OwogICAgIAogICAgIGZ1bmMobG9ja2VyLCBuZXdPZmZzZXQsIG5ld01heE9mZnNldCk7CiAgICAg
CkBAIC00NjUsMzQgKzQ3OCw0NiBAQCBpbmxpbmUgUHJvcGVydHlPZmZzZXQgU3RydWN0dXJlOjph
ZGQoVk0mIHZtLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCB1bnNpZ25lZAogICAgIHJldHVy
biBuZXdPZmZzZXQ7CiB9CiAKLXRlbXBsYXRlPHR5cGVuYW1lIEZ1bmM+Ci1pbmxpbmUgUHJvcGVy
dHlPZmZzZXQgU3RydWN0dXJlOjpyZW1vdmUoUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwgY29u
c3QgRnVuYyYgZnVuYykKK3RlbXBsYXRlPFN0cnVjdHVyZTo6U2hvdWxkUGluIHNob3VsZFBpbiwg
dHlwZW5hbWUgRnVuYz4KK2lubGluZSBQcm9wZXJ0eU9mZnNldCBTdHJ1Y3R1cmU6OnJlbW92ZShW
TSYgdm0sIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIGNvbnN0IEZ1bmMmIGZ1bmMpCiB7Ci0g
ICAgQ29uY3VycmVudEpTTG9ja2VyIGxvY2tlcihtX2xvY2spOwotICAgIAorICAgIFByb3BlcnR5
VGFibGUqIHRhYmxlID0gZW5zdXJlUHJvcGVydHlUYWJsZSh2bSk7CisgICAgR0NTYWZlQ29uY3Vy
cmVudEpTTG9ja2VyIGxvY2tlcihtX2xvY2ssIHZtLmhlYXApOworCisgICAgc3dpdGNoIChzaG91
bGRQaW4pIHsKKyAgICBjYXNlIFNob3VsZFBpbjo6WWVzOgorICAgICAgICBwaW4obG9ja2VyLCB2
bSwgdGFibGUpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFNob3VsZFBpbjo6Tm86CisgICAg
ICAgIHNldFByb3BlcnR5VGFibGUodm0sIHRhYmxlKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQor
CisgICAgQVNTRVJUKEpTQzo6aXNWYWxpZE9mZnNldChnZXQodm0sIHByb3BlcnR5TmFtZSkpKTsK
KwogICAgIGNoZWNrQ29uc2lzdGVuY3koKTsKIAogICAgIGF1dG8gcmVwID0gcHJvcGVydHlOYW1l
LnVpZCgpOwotICAgIAotICAgIC8vIFdlIE9OTFkgcmVtb3ZlIGZyb20gdW5jYWNoZWFibGUgZGlj
dGlvbmFyaWVzLCB3aGljaCB3aWxsIGhhdmUgYSBwaW5uZWQgcHJvcGVydHkgdGFibGUuCi0gICAg
Ly8gVGhlIG9ubHkgd2F5IGZvciB0aGVtIG5vdCB0byBoYXZlIGEgdGFibGUgaXMgaWYgdGhleSBh
cmUgZW1wdHkuCi0gICAgUHJvcGVydHlUYWJsZSogdGFibGUgPSBwcm9wZXJ0eVRhYmxlT3JOdWxs
KCk7Ci0KLSAgICBpZiAoIXRhYmxlKQotICAgICAgICByZXR1cm4gaW52YWxpZE9mZnNldDsKIAog
ICAgIFByb3BlcnR5VGFibGU6OmZpbmRfaXRlcmF0b3IgcG9zaXRpb24gPSB0YWJsZS0+ZmluZChy
ZXApOwogICAgIGlmICghcG9zaXRpb24uZmlyc3QpCiAgICAgICAgIHJldHVybiBpbnZhbGlkT2Zm
c2V0OworCisgICAgc2V0SXNRdWlja1Byb3BlcnR5QWNjZXNzQWxsb3dlZEZvckVudW1lcmF0aW9u
KGZhbHNlKTsKICAgICAKICAgICBQcm9wZXJ0eU9mZnNldCBvZmZzZXQgPSBwb3NpdGlvbi5maXJz
dC0+b2Zmc2V0OwogCiAgICAgdGFibGUtPnJlbW92ZShwb3NpdGlvbik7CiAgICAgdGFibGUtPmFk
ZERlbGV0ZWRPZmZzZXQob2Zmc2V0KTsKIAotICAgIGNoZWNrQ29uc2lzdGVuY3koKTsKKyAgICBQ
cm9wZXJ0eU9mZnNldCBuZXdNYXhPZmZzZXQgPSBtYXhPZmZzZXQoKTsKIAotICAgIGZ1bmMobG9j
a2VyLCBvZmZzZXQpOworICAgIGZ1bmMobG9ja2VyLCBvZmZzZXQsIG5ld01heE9mZnNldCk7CisK
KyAgICBBU1NFUlQobWF4T2Zmc2V0KCkgPT0gbmV3TWF4T2Zmc2V0KTsKKyAgICBBU1NFUlQoIUpT
Qzo6aXNWYWxpZE9mZnNldChnZXQodm0sIHByb3BlcnR5TmFtZSkpKTsKKworICAgIGNoZWNrQ29u
c2lzdGVuY3koKTsKICAgICByZXR1cm4gb2Zmc2V0OwogfQogCkBAIC01MDMsMTMgKzUyOCwxMyBA
QCBpbmxpbmUgUHJvcGVydHlPZmZzZXQgU3RydWN0dXJlOjphZGRQcm9wZXJ0eVdpdGhvdXRUcmFu
c2l0aW9uKFZNJiB2bSwgUHJvcGVydHlOYQogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jPgot
aW5saW5lIFByb3BlcnR5T2Zmc2V0IFN0cnVjdHVyZTo6cmVtb3ZlUHJvcGVydHlXaXRob3V0VHJh
bnNpdGlvbihWTSYsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIGNvbnN0IEZ1bmMmIGZ1bmMp
CitpbmxpbmUgUHJvcGVydHlPZmZzZXQgU3RydWN0dXJlOjpyZW1vdmVQcm9wZXJ0eVdpdGhvdXRU
cmFuc2l0aW9uKFZNJiB2bSwgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwgY29uc3QgRnVuYyYg
ZnVuYykKIHsKICAgICBBU1NFUlQoaXNVbmNhY2hlYWJsZURpY3Rpb25hcnkoKSk7CiAgICAgQVNT
RVJUKGlzUGlubmVkUHJvcGVydHlUYWJsZSgpKTsKICAgICBBU1NFUlQocHJvcGVydHlUYWJsZU9y
TnVsbCgpKTsKICAgICAKLSAgICByZXR1cm4gcmVtb3ZlKHByb3BlcnR5TmFtZSwgZnVuYyk7Cisg
ICAgcmV0dXJuIHJlbW92ZTxTaG91bGRQaW46Olllcz4odm0sIHByb3BlcnR5TmFtZSwgZnVuYyk7
CiB9CiAKIEFMV0FZU19JTkxJTkUgdm9pZCBTdHJ1Y3R1cmU6OnNldFByb3RvdHlwZVdpdGhvdXRU
cmFuc2l0aW9uKFZNJiB2bSwgSlNWYWx1ZSBwcm90b3R5cGUpCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmVUcmFuc2l0aW9uVGFibGUuaCBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZVRyYW5zaXRpb25UYWJsZS5oCmluZGV4
IGI3ZGYwZWZiMzk4ZDA1ZmJmODE3YzdiMzhlNWJhNDkwZGUxOTBhYmUuLmRmYjkxMTA1MzBmY2U3
NjA5YjhhYWQwNDY1ZWMxZDMwMjhkYjE5MTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL1N0cnVjdHVyZVRyYW5zaXRpb25UYWJsZS5oCisrKyBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZVRyYW5zaXRpb25UYWJsZS5oCkBAIC0xNDQsMTEg
KzE0NCwxMSBAQCBjbGFzcyBTdHJ1Y3R1cmVUcmFuc2l0aW9uVGFibGUgewogCiAgICAgCiAgICAg
c3RydWN0IEhhc2ggewotICAgICAgICB0eXBlZGVmIHN0ZDo6cGFpcjxVbmlxdWVkU3RyaW5nSW1w
bCosIHVuc2lnbmVkPiBLZXk7CisgICAgICAgIHR5cGVkZWYgc3RkOjp0dXBsZTxVbmlxdWVkU3Ry
aW5nSW1wbCosIHVuc2lnbmVkLCBib29sPiBLZXk7CiAgICAgICAgIAogICAgICAgICBzdGF0aWMg
dW5zaWduZWQgaGFzaChjb25zdCBLZXkmIHApCiAgICAgICAgIHsKLSAgICAgICAgICAgIHJldHVy
biBQdHJIYXNoPFVuaXF1ZWRTdHJpbmdJbXBsKj46Omhhc2gocC5maXJzdCkgKyBwLnNlY29uZDsK
KyAgICAgICAgICAgIHJldHVybiBQdHJIYXNoPFVuaXF1ZWRTdHJpbmdJbXBsKj46Omhhc2goc3Rk
OjpnZXQ8MD4ocCkpICsgc3RkOjpnZXQ8MT4ocCk7CiAgICAgICAgIH0KIAogICAgICAgICBzdGF0
aWMgYm9vbCBlcXVhbChjb25zdCBLZXkmIGEsIGNvbnN0IEtleSYgYikKQEAgLTE4MSw4ICsxODEs
OCBAQCBwdWJsaWM6CiAgICAgfQogCiAgICAgdm9pZCBhZGQoVk0mLCBTdHJ1Y3R1cmUqKTsKLSAg
ICBib29sIGNvbnRhaW5zKFVuaXF1ZWRTdHJpbmdJbXBsKiwgdW5zaWduZWQgYXR0cmlidXRlcykg
Y29uc3Q7Ci0gICAgU3RydWN0dXJlKiBnZXQoVW5pcXVlZFN0cmluZ0ltcGwqLCB1bnNpZ25lZCBh
dHRyaWJ1dGVzKSBjb25zdDsKKyAgICBib29sIGNvbnRhaW5zKFVuaXF1ZWRTdHJpbmdJbXBsKiwg
dW5zaWduZWQgYXR0cmlidXRlcywgYm9vbCBpc0FkZGl0aW9uKSBjb25zdDsKKyAgICBTdHJ1Y3R1
cmUqIGdldChVbmlxdWVkU3RyaW5nSW1wbCosIHVuc2lnbmVkIGF0dHJpYnV0ZXMsIGJvb2wgaXNB
ZGRpdGlvbikgY29uc3Q7CiAKIHByaXZhdGU6CiAgICAgZnJpZW5kIGNsYXNzIFNpbmdsZVNsb3RU
cmFuc2l0aW9uV2Vha093bmVyOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3Rv
b2xzL0pTRG9sbGFyVk0uY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3Rvb2xzL0pTRG9sbGFy
Vk0uY3BwCmluZGV4IGRlYzZiYjJhZDgzMjk3ZjJhOGFiYzcyMWExNzFiYjk0NTdjNzYzZmEuLmRm
ZjFkZjE5YWM4NGE5ZWQzNjRiNTk3ZDVkZDlkMDQxYmVjNDc4YjMgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS90b29scy9KU0RvbGxhclZNLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvdG9vbHMvSlNEb2xsYXJWTS5jcHAKQEAgLTgxLDYgKzgxLDggQEAgcHVibGljOgog
CiAgICAgdm9pZCB1cGRhdGVWTVN0YWNrTGltaXRzKCkgeyByZXR1cm4gbV92bS51cGRhdGVTdGFj
a0xpbWl0cygpOyB9OwogCisgICAgc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwg
ZnVuY3Rpb25HZXRTdHJ1Y3R1cmVUcmFuc2l0aW9uTGlzdChKU0dsb2JhbE9iamVjdCosIENhbGxG
cmFtZSopOworCiBwcml2YXRlOgogICAgIFZNJiBtX3ZtOwogfTsKQEAgLTI3NjksNiArMjc3MSw2
MyBAQCBzdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5jdGlvbk1ha2UxNkJp
dFN0cmluZ0lmUG9zc2libGUoSlNHbG9iYWxPYgogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUo
anNTdHJpbmcodm0sIFN0cmluZzo6YWRvcHQoV1RGTW92ZShidWZmZXIpKSkpOwogfQogCitFbmNv
ZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIEpTRG9sbGFyVk1IZWxwZXI6OmZ1bmN0aW9uR2V0U3Ry
dWN0dXJlVHJhbnNpdGlvbkxpc3QoSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgQ2FsbEZy
YW1lKiBjYWxsRnJhbWUpCit7CisgICAgRG9sbGFyVk1Bc3NlcnRTY29wZSBhc3NlcnRTY29wZTsK
KyAgICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CisgICAgYXV0byBzY29wZSA9IERFQ0xB
UkVfVEhST1dfU0NPUEUodm0pOworICAgIEpTT2JqZWN0KiBvYmogPSBjYWxsRnJhbWUtPmFyZ3Vt
ZW50KDApLnRvT2JqZWN0KGdsb2JhbE9iamVjdCk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihz
Y29wZSwgeyB9KTsKKyAgICBpZiAoIW9iaikKKyAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29k
ZShqc051bGwoKSk7CisgICAgVmVjdG9yPFN0cnVjdHVyZSosIDg+IHN0cnVjdHVyZXM7CisKKyAg
ICBmb3IgKGF1dG8qIHN0cnVjdHVyZSA9IG9iai0+c3RydWN0dXJlKCk7IHN0cnVjdHVyZTsgc3Ry
dWN0dXJlID0gc3RydWN0dXJlLT5wcmV2aW91c0lEKCkpCisgICAgICAgIHN0cnVjdHVyZXMuYXBw
ZW5kKHN0cnVjdHVyZSk7CisKKyAgICBKU0FycmF5KiByZXN1bHQgPSBKU0FycmF5Ojp0cnlDcmVh
dGUodm0sIGdsb2JhbE9iamVjdC0+YXJyYXlTdHJ1Y3R1cmVGb3JJbmRleGluZ1R5cGVEdXJpbmdB
bGxvY2F0aW9uKEFycmF5V2l0aENvbnRpZ3VvdXMpLCAwKTsKKyAgICBSRVRVUk5fSUZfRVhDRVBU
SU9OKHNjb3BlLCB7IH0pOworCisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBzdHJ1Y3R1cmVz
LnNpemUoKTsgKytpKSB7CisgICAgICAgIGF1dG8qIHN0cnVjdHVyZSA9IHN0cnVjdHVyZXNbc3Ry
dWN0dXJlcy5zaXplKCkgLSBpIC0gMV07CisgICAgICAgIHJlc3VsdC0+cHVzaChnbG9iYWxPYmpl
Y3QsIEpTVmFsdWUoc3RydWN0dXJlLT5pZCgpKSk7CisgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJ
T04oc2NvcGUsIHsgfSk7CisgICAgICAgIHJlc3VsdC0+cHVzaChnbG9iYWxPYmplY3QsIEpTVmFs
dWUoc3RydWN0dXJlLT50cmFuc2l0aW9uT2Zmc2V0KCkpKTsKKyAgICAgICAgUkVUVVJOX0lGX0VY
Q0VQVElPTihzY29wZSwgeyB9KTsKKyAgICAgICAgcmVzdWx0LT5wdXNoKGdsb2JhbE9iamVjdCwg
SlNWYWx1ZShzdHJ1Y3R1cmUtPm1heE9mZnNldCgpKSk7CisgICAgICAgIFJFVFVSTl9JRl9FWENF
UFRJT04oc2NvcGUsIHsgfSk7CisgICAgICAgIGlmIChzdHJ1Y3R1cmUtPm1fdHJhbnNpdGlvblBy
b3BlcnR5TmFtZSkKKyAgICAgICAgICAgIHJlc3VsdC0+cHVzaChnbG9iYWxPYmplY3QsIGpzU3Ry
aW5nKHZtLCBTdHJpbmcoKnN0cnVjdHVyZS0+bV90cmFuc2l0aW9uUHJvcGVydHlOYW1lKSkpOwor
ICAgICAgICBlbHNlCisgICAgICAgICAgICByZXN1bHQtPnB1c2goZ2xvYmFsT2JqZWN0LCBqc051
bGwoKSk7CisgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHsgfSk7CisgICAgICAg
IHJlc3VsdC0+cHVzaChnbG9iYWxPYmplY3QsIEpTVmFsdWUoc3RydWN0dXJlLT5pc1Byb3BlcnR5
RGVsZXRpb25UcmFuc2l0aW9uKCkpKTsKKyAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29w
ZSwgeyB9KTsKKyAgICB9CisKKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHJlc3VsdCk7Cit9
CisKK3N0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0aW9uR2V0Q29uY3Vy
cmVudGx5KEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIENhbGxGcmFtZSogY2FsbEZyYW1l
KQoreworICAgIERvbGxhclZNQXNzZXJ0U2NvcGUgYXNzZXJ0U2NvcGU7CisgICAgVk0mIHZtID0g
Z2xvYmFsT2JqZWN0LT52bSgpOworICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BF
KHZtKTsKKyAgICBKU09iamVjdCogb2JqID0gY2FsbEZyYW1lLT5hcmd1bWVudCgwKS50b09iamVj
dChnbG9iYWxPYmplY3QpOworICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHsgfSk7Cisg
ICAgaWYgKCFvYmopCisgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNOdWxsKCkpOwor
ICAgIFN0cmluZyBwcm9wZXJ0eSA9IGNhbGxGcmFtZS0+YXJndW1lbnQoMSkudG9XVEZTdHJpbmco
Z2xvYmFsT2JqZWN0KTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOworICAg
IGF1dG8gbmFtZSA9IFByb3BlcnR5TmFtZShJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCBwcm9w
ZXJ0eSkpOworICAgIGF1dG8gb2Zmc2V0ID0gb2JqLT5zdHJ1Y3R1cmUoKS0+Z2V0Q29uY3VycmVu
dGx5KG5hbWUudWlkKCkpOworICAgIGlmIChvZmZzZXQgIT0gaW52YWxpZE9mZnNldCkKKyAgICAg
ICAgQVNTRVJUKEpTVmFsdWU6OmVuY29kZShvYmotPmdldERpcmVjdChvZmZzZXQpKSk7CisgICAg
SlNWYWx1ZSByZXN1bHQgPSBKU1ZhbHVlKG9mZnNldCAhPSBpbnZhbGlkT2Zmc2V0KTsKKyAgICBS
RVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOworICAgIHJldHVybiBKU1ZhbHVlOjplbmNv
ZGUocmVzdWx0KTsKK30KKwogdm9pZCBKU0RvbGxhclZNOjpmaW5pc2hDcmVhdGlvbihWTSYgdm0p
CiB7CiAgICAgRG9sbGFyVk1Bc3NlcnRTY29wZSBhc3NlcnRTY29wZTsKQEAgLTI4OTcsNiArMjk1
Niw5IEBAIHZvaWQgSlNEb2xsYXJWTTo6ZmluaXNoQ3JlYXRpb24oVk0mIHZtKQogICAgIGFkZEZ1
bmN0aW9uKHZtLCAiaXNXYXNtU3VwcG9ydGVkIiwgZnVuY3Rpb25Jc1dhc21TdXBwb3J0ZWQsIDAp
OwogICAgIGFkZEZ1bmN0aW9uKHZtLCAibWFrZTE2Qml0U3RyaW5nSWZQb3NzaWJsZSIsIGZ1bmN0
aW9uTWFrZTE2Qml0U3RyaW5nSWZQb3NzaWJsZSwgMSk7CiAKKyAgICBhZGRGdW5jdGlvbih2bSwg
ImdldFN0cnVjdHVyZVRyYW5zaXRpb25MaXN0IiwgSlNEb2xsYXJWTUhlbHBlcjo6ZnVuY3Rpb25H
ZXRTdHJ1Y3R1cmVUcmFuc2l0aW9uTGlzdCwgMSk7CisgICAgYWRkRnVuY3Rpb24odm0sICJnZXRD
b25jdXJyZW50bHkiLCBmdW5jdGlvbkdldENvbmN1cnJlbnRseSwgMik7CisKICAgICBtX29iamVj
dERvaW5nU2lkZUVmZmVjdFB1dFdpdGhvdXRDb3JyZWN0U2xvdFN0YXR1c1N0cnVjdHVyZS5zZXQo
dm0sIHRoaXMsIE9iamVjdERvaW5nU2lkZUVmZmVjdFB1dFdpdGhvdXRDb3JyZWN0U2xvdFN0YXR1
czo6Y3JlYXRlU3RydWN0dXJlKHZtLCBnbG9iYWxPYmplY3QsIGpzTnVsbCgpKSk7CiB9CiAKZGlm
ZiAtLWdpdCBhL0pTVGVzdHMvQ2hhbmdlTG9nIGIvSlNUZXN0cy9DaGFuZ2VMb2cKaW5kZXggNzk3
YmQ3ZTU1YjgwMDMyNzI1YmIxYTQzODU0NjNhYzI2NGIyOGRkMi4uMjRmNDBiZTc1MjJhNmI3ZmE3
MDhiYmI4MGQzMGQ2YzExNjEwNjZjZiAxMDA2NDQKLS0tIGEvSlNUZXN0cy9DaGFuZ2VMb2cKKysr
IGIvSlNUZXN0cy9DaGFuZ2VMb2cKQEAgLTEsMyArMSw0MyBAQAorMjAyMC0wMS0zMCAgSnVzdGlu
IE1pY2hhdWQgIDxqdXN0aW5fbWljaGF1ZEBhcHBsZS5jb20+CisKKyAgICAgICAgRGVsZXRpbmcg
YSBwcm9wZXJ0eSBzaG91bGQgbm90IHR1cm4gc3RydWN0dXJlcyBpbnRvIHVuY2FjaGVhYmxlIGRp
Y3Rpb25hcmllcworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9MjA2NDMwCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgWXVzdWtlIFN1enVraS4KKworICAgICAg
ICAqIG1pY3JvYmVuY2htYXJrcy9kZWxldGUtcHJvcGVydHktZnJvbS1wcm90b3R5cGUtY2hhaW4u
anM6IEFkZGVkLgorICAgICAgICAoYXNzZXJ0KToKKyAgICAgICAgKG5vSW5saW5lLmFzc2VydC5n
ZXRaKToKKyAgICAgICAgKG5vSW5saW5lLmdldFouQyk6CisgICAgICAgIChkb1Rlc3QpOgorICAg
ICAgICAoZGVsZXRlLkMucHJvdG90eXBlLnopOgorICAgICAgICAqIG1pY3JvYmVuY2htYXJrcy9k
ZWxldGUtcHJvcGVydHkta2VlcHMtY2FjaGVhYmxlLXN0cnVjdHVyZS5qczogQWRkZWQuCisgICAg
ICAgIChhc3NlcnQpOgorICAgICAgICAoQyk6CisgICAgICAgIChkb1Rlc3QpOgorICAgICAgICAq
IHN0cmVzcy9jYWNoZS1wdXQtYnktaWQtZGlmZmVyZW50LWF0dHJpYnV0ZXMuanM6CisgICAgICAg
IChtYWtlUHJvdG90eXBlRGljdCk6CisgICAgICAgIChzZXQgeCk6CisgICAgICAgICogc3RyZXNz
L2NhY2hlLXB1dC1ieS1pZC1kaWZmZXJlbnQtb2Zmc2V0LmpzOgorICAgICAgICAobWFrZVByb3Rv
dHlwZURpY3QpOgorICAgICAgICAoc2V0IHgpOgorICAgICAgICAqIHN0cmVzcy9jYWNoZS1wdXQt
YnktaWQtcG9seS1wcm90by5qczoKKyAgICAgICAgKG1ha2VQcm90b3R5cGVEaWN0KToKKyAgICAg
ICAgKHNldCBfKToKKyAgICAgICAgKiBzdHJlc3MvZGVsZXRlLXByb3BlcnR5LWNoZWNrLXN0cnVj
dHVyZS10cmFuc2l0aW9uLmpzOiBBZGRlZC4KKyAgICAgICAgKGFzc2VydCk6CisgICAgICAgIChh
c3NlcnRfZXEpOgorICAgICAgICAoYXNzZXJ0X25lcSk6CisgICAgICAgIChzZCk6CisgICAgICAg
IChzaWQpOgorICAgICAgICAodGVzdERlbGV0ZUlzTm90VW5jYWNoZWFibGUpOgorICAgICAgICAo
dGVzdENhbk1hdGVyaWFsaXplRGVsZXRlcyk6CisgICAgICAgICh0ZXN0Q2FuRmxhdHRlbik6Cisg
ICAgICAgICh0ZXN0RGVsZXRlV2l0aElubGluZUNhY2hlLk9iamVjdC5wcm90b3R5cGUuZ2xvYmFs
UHJvcGVydHkuNDIubWFrZUZvbyk6CisgICAgICAgICh0ZXN0RGVsZXRlV2l0aElubGluZUNhY2hl
Lm5vSW5saW5lLmRvVGVzdCk6CisgICAgICAgICh0ZXN0RGVsZXRlV2l0aElubGluZUNhY2hlKToK
KyAgICAgICAgKiBzdHJlc3MvZmxhdHRlbi1vYmplY3QtemVyby11bnVzZWQtaW5saW5lLXByb3Bl
cnRpZXMuanM6CisKIDIwMjAtMDItMDQgIEFsZXhleSBTaHZheWthICA8c2h2YWlrYWxlc2hAZ21h
aWwuY29tPgogCiAgICAgICAgIFF1YW50aWZpZXJzIGFmdGVyIGxvb2thaGVhZCBhc3NlcnRpb25z
IHNob3VsZCBiZSBzeW50YXggZXJyb3JzIGluIFVuaWNvZGUgcGF0dGVybnMgb25seQpkaWZmIC0t
Z2l0IGEvSlNUZXN0cy9taWNyb2JlbmNobWFya3MvZGVsZXRlLXByb3BlcnR5LWZyb20tcHJvdG90
eXBlLWNoYWluLmpzIGIvSlNUZXN0cy9taWNyb2JlbmNobWFya3MvZGVsZXRlLXByb3BlcnR5LWZy
b20tcHJvdG90eXBlLWNoYWluLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjQ5YTMxYjdmMjQ3YzFiZDBhY2E4MmNi
MjJkZjIwZThmMWJmNjFiZGQKLS0tIC9kZXYvbnVsbAorKysgYi9KU1Rlc3RzL21pY3JvYmVuY2ht
YXJrcy9kZWxldGUtcHJvcGVydHktZnJvbS1wcm90b3R5cGUtY2hhaW4uanMKQEAgLTAsMCArMSw0
MyBAQAorLy9AIHNraXAgaWYgJG1vZGVsID09ICJBcHBsZSBXYXRjaCBTZXJpZXMgMyIgIyBhZGRl
ZCBieSBtYXJrLWpzYy1zdHJlc3MtdGVzdC5weQorZnVuY3Rpb24gYXNzZXJ0KGIpIHsKKyAgICBp
ZiAoIWIpCisgICAgICAgIHRocm93IG5ldyBFcnJvcjsKK30KK25vSW5saW5lKGFzc2VydCkKKwor
ZnVuY3Rpb24gZ2V0WihvKSB7CisgICAgcmV0dXJuIG8uegorfQorbm9JbmxpbmUoZ2V0WikKKwor
ZnVuY3Rpb24gQygpIHsKKyAgICB0aGlzLnggPSA0MjsKK30KKworbGV0IG9ianMgPSBbXTsKK2Zv
ciAobGV0IGkgPSAwOyBpIDwgNTA7ICsraSkgeworICAgIG9ianMucHVzaChuZXcgQyk7Cit9CisK
K2Z1bmN0aW9uIGRvVGVzdCh6VmFsKSB7CisgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBvYmpzLmxl
bmd0aDsgKytpKSB7CisgICAgICAgIGxldCBvID0gb2Jqc1tpXTsKKyAgICAgICAgYXNzZXJ0KG8u
eCA9PT0gNDIpOworICAgICAgICBhc3NlcnQoZ2V0WihvKSA9PT0gelZhbCkKKyAgICB9Cit9Citu
b0lubGluZShkb1Rlc3QpOworCitmb3IgKGxldCBpPTA7IGk8MTAwMDA7ICsraSkgeworICAgIGNv
bnN0IFggPSB7IGkgfQorICAgIEMucHJvdG90eXBlLnogPSBYCisgICAgZG9UZXN0KFgpCit9CisK
K2RlbGV0ZSBDLnByb3RvdHlwZS56CisKK2ZvciAobGV0IGk9MDsgaTwxMDAwMDAwOyArK2kpIHsK
KyAgICBnZXRaKHt6OiBpfSkKKyAgICBkb1Rlc3QodW5kZWZpbmVkKQorfQorCmRpZmYgLS1naXQg
YS9KU1Rlc3RzL21pY3JvYmVuY2htYXJrcy9kZWxldGUtcHJvcGVydHkta2VlcHMtY2FjaGVhYmxl
LXN0cnVjdHVyZS5qcyBiL0pTVGVzdHMvbWljcm9iZW5jaG1hcmtzL2RlbGV0ZS1wcm9wZXJ0eS1r
ZWVwcy1jYWNoZWFibGUtc3RydWN0dXJlLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjIyY2NhOWZkMjFkYjA3MjZi
YTZiMWQyYjY1ZDlkYTViODNhOGE4MzgKLS0tIC9kZXYvbnVsbAorKysgYi9KU1Rlc3RzL21pY3Jv
YmVuY2htYXJrcy9kZWxldGUtcHJvcGVydHkta2VlcHMtY2FjaGVhYmxlLXN0cnVjdHVyZS5qcwpA
QCAtMCwwICsxLDI4IEBACisvL0Agc2tpcCBpZiAkbW9kZWwgPT0gIkFwcGxlIFdhdGNoIFNlcmll
cyAzIiAjIGFkZGVkIGJ5IG1hcmstanNjLXN0cmVzcy10ZXN0LnB5CitmdW5jdGlvbiBhc3NlcnQo
YikgeworICAgIGlmICghYikKKyAgICAgICAgdGhyb3cgbmV3IEVycm9yOworfQorCitmdW5jdGlv
biBDKCkgeworICAgIHRoaXMueCA9IDQyOworICAgIHRoaXMueSA9IDEzMzc7CisgICAgZGVsZXRl
IHRoaXMueTsKK30KKworbGV0IG9ianMgPSBbXTsKK2ZvciAobGV0IGkgPSAwOyBpIDwgNTA7ICsr
aSkgeworICAgIG9ianMucHVzaChuZXcgQyk7Cit9CisKK2Z1bmN0aW9uIGRvVGVzdCgpIHsKKyAg
ICBmb3IgKGxldCBpID0gMDsgaSA8IG9ianMubGVuZ3RoOyArK2kpIHsKKyAgICAgICAgbGV0IG8g
PSBvYmpzW2ldOworICAgICAgICBhc3NlcnQoby55ID09PSB1bmRlZmluZWQpOworICAgICAgICBh
c3NlcnQoby54ID09PSA0Mik7CisgICAgfQorfQorbm9JbmxpbmUoZG9UZXN0KTsKKworZm9yIChs
ZXQgaT0wOyBpPDEwMDAwMDAwOyArK2kpIGRvVGVzdCgpCisKZGlmZiAtLWdpdCBhL0pTVGVzdHMv
c3RyZXNzL2NhY2hlLXB1dC1ieS1pZC1kaWZmZXJlbnQtYXR0cmlidXRlcy5qcyBiL0pTVGVzdHMv
c3RyZXNzL2NhY2hlLXB1dC1ieS1pZC1kaWZmZXJlbnQtYXR0cmlidXRlcy5qcwppbmRleCBiMzhm
Yzc4YTE0NDlkNzFmZDEzY2Y0Mzk3MzA5ODUwN2ZiY2QzOTNlLi5mYjEyZjFhMDIyMDI4N2Y2MWZl
OWUxM2ZmNDZhNGFhZmRlZTkzYmJlIDEwMDY0NAotLS0gYS9KU1Rlc3RzL3N0cmVzcy9jYWNoZS1w
dXQtYnktaWQtZGlmZmVyZW50LWF0dHJpYnV0ZXMuanMKKysrIGIvSlNUZXN0cy9zdHJlc3MvY2Fj
aGUtcHV0LWJ5LWlkLWRpZmZlcmVudC1hdHRyaWJ1dGVzLmpzCkBAIC00LDYgKzQsMTYgQEAgZnVu
Y3Rpb24gRm9vKCkgeyB9CiAKIEZvby5wcm90b3R5cGUueCA9IDA7CiAKK2Z1bmN0aW9uIG1ha2VQ
cm90b3R5cGVEaWN0KCkgeworICAgIGZvciAobGV0IGk9MDsgaTwxMDA7ICsraSkgeworICAgICAg
ICBGb28ucHJvdG90eXBlLmEgPSBpCisgICAgICAgIEZvby5wcm90b3R5cGUuYiA9IGkKKyAgICAg
ICAgZGVsZXRlIEZvby5wcm90b3R5cGUuYQorICAgICAgICBkZWxldGUgRm9vLnByb3RvdHlwZS5i
CisgICAgfQorfQorbm9JbmxpbmUobWFrZVByb3RvdHlwZURpY3QpCisKIE9iamVjdC5kZWZpbmVQ
cm9wZXJ0eShGb28ucHJvdG90eXBlLCAneScsIHsKICAgICBzZXQoeCkgewogICAgICAgICBpZiAo
Rm9vLnByb3RvdHlwZS54KysgPT09IDkpIHsKQEAgLTExLDggKzIxLDEwIEBAIE9iamVjdC5kZWZp
bmVQcm9wZXJ0eShGb28ucHJvdG90eXBlLCAneScsIHsKICAgICAgICAgICAgICAgICB2YWx1ZTog
MTMsCiAgICAgICAgICAgICAgICAgd3JpdGFibGU6IHRydWUsCiAgICAgICAgICAgICB9KTsKLSAg
ICAgICAgICAgIGlmICh0eXBlb2YgJHZtICE9PSAndW5kZWZpbmVkJykKKyAgICAgICAgICAgIGlm
ICh0eXBlb2YgJHZtICE9PSAndW5kZWZpbmVkJykgeworICAgICAgICAgICAgICAgIG1ha2VQcm90
b3R5cGVEaWN0KCkKICAgICAgICAgICAgICAgICAkdm0uZmxhdHRlbkRpY3Rpb25hcnlPYmplY3Qo
Rm9vLnByb3RvdHlwZSk7CisgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICB9LAogICAgIGNv
bmZpZ3VyYWJsZTogdHJ1ZSwKZGlmZiAtLWdpdCBhL0pTVGVzdHMvc3RyZXNzL2NhY2hlLXB1dC1i
eS1pZC1kaWZmZXJlbnQtb2Zmc2V0LmpzIGIvSlNUZXN0cy9zdHJlc3MvY2FjaGUtcHV0LWJ5LWlk
LWRpZmZlcmVudC1vZmZzZXQuanMKaW5kZXggN2YyOTcxM2U3YzI4NTNjYWM3Y2Q0YTQzZWY2NzU3
ZWM4YWUzOWJmYy4uODlkYTZhNzJkNzVjMGZmN2JlNTBkY2I3MmI5NWQ5YzU0ODZkZTdkMiAxMDA2
NDQKLS0tIGEvSlNUZXN0cy9zdHJlc3MvY2FjaGUtcHV0LWJ5LWlkLWRpZmZlcmVudC1vZmZzZXQu
anMKKysrIGIvSlNUZXN0cy9zdHJlc3MvY2FjaGUtcHV0LWJ5LWlkLWRpZmZlcmVudC1vZmZzZXQu
anMKQEAgLTQsMTIgKzQsMjQgQEAgZnVuY3Rpb24gRm9vKCkgeyB9CiAKIEZvby5wcm90b3R5cGUu
eCA9IDA7CiAKK2Z1bmN0aW9uIG1ha2VQcm90b3R5cGVEaWN0KCkgeworICAgIGZvciAobGV0IGk9
MDsgaTwxMDA7ICsraSkgeworICAgICAgICBGb28ucHJvdG90eXBlLmEgPSBpCisgICAgICAgIEZv
by5wcm90b3R5cGUuYiA9IGkKKyAgICAgICAgZGVsZXRlIEZvby5wcm90b3R5cGUuYQorICAgICAg
ICBkZWxldGUgRm9vLnByb3RvdHlwZS5iCisgICAgfQorfQorbm9JbmxpbmUobWFrZVByb3RvdHlw
ZURpY3QpCisKIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShGb28ucHJvdG90eXBlLCAneScsIHsKICAg
ICBzZXQoeCkgewogICAgICAgICBpZiAoRm9vLnByb3RvdHlwZS54KysgPT09IDEpIHsKICAgICAg
ICAgICAgIGRlbGV0ZSBGb28ucHJvdG90eXBlLng7Ci0gICAgICAgICAgICBpZiAodHlwZW9mICR2
bSAhPT0gJ3VuZGVmaW5lZCcpCisgICAgICAgICAgICBpZiAodHlwZW9mICR2bSAhPT0gJ3VuZGVm
aW5lZCcpIHsKKyAgICAgICAgICAgICAgICBtYWtlUHJvdG90eXBlRGljdCgpCiAgICAgICAgICAg
ICAgICAgJHZtLmZsYXR0ZW5EaWN0aW9uYXJ5T2JqZWN0KEZvby5wcm90b3R5cGUpOworICAgICAg
ICAgICAgfQogICAgICAgICB9CiAgICAgfQogfSk7CmRpZmYgLS1naXQgYS9KU1Rlc3RzL3N0cmVz
cy9jYWNoZS1wdXQtYnktaWQtcG9seS1wcm90by5qcyBiL0pTVGVzdHMvc3RyZXNzL2NhY2hlLXB1
dC1ieS1pZC1wb2x5LXByb3RvLmpzCmluZGV4IGI3OWJhZjA5MjFlMmQzNDI1MjYyOTlkOGQxMTZl
ZWU2Zjk0MDMyOTMuLjZhYmZhMjJkMDE0MThkZWIwMGFhOTk1ZWU5NTlmYTZmNzYxYzU5NWMgMTAw
NjQ0Ci0tLSBhL0pTVGVzdHMvc3RyZXNzL2NhY2hlLXB1dC1ieS1pZC1wb2x5LXByb3RvLmpzCisr
KyBiL0pTVGVzdHMvc3RyZXNzL2NhY2hlLXB1dC1ieS1pZC1wb2x5LXByb3RvLmpzCkBAIC00LDYg
KzQsMTYgQEAgZnVuY3Rpb24gRm9vKCkgeyB9CiAKIGxldCB4ID0gMDsKIAorZnVuY3Rpb24gbWFr
ZVByb3RvdHlwZURpY3QoKSB7CisgICAgZm9yIChsZXQgaT0wOyBpPDEwMDsgKytpKSB7CisgICAg
ICAgIEZvby5wcm90b3R5cGUuYSA9IGkKKyAgICAgICAgRm9vLnByb3RvdHlwZS5iID0gaQorICAg
ICAgICBkZWxldGUgRm9vLnByb3RvdHlwZS5hCisgICAgICAgIGRlbGV0ZSBGb28ucHJvdG90eXBl
LmIKKyAgICB9Cit9Citub0lubGluZShtYWtlUHJvdG90eXBlRGljdCkKKwogT2JqZWN0LmRlZmlu
ZVByb3BlcnR5KEZvby5wcm90b3R5cGUsICd5JywgewogICAgIHNldChfKSB7CiAgICAgICAgIGlm
ICh4KysgPT09IDkpIHsKQEAgLTExLDggKzIxLDEwIEBAIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShG
b28ucHJvdG90eXBlLCAneScsIHsKICAgICAgICAgICAgICAgICB2YWx1ZTogMTMsCiAgICAgICAg
ICAgICAgICAgd3JpdGFibGU6IHRydWUsCiAgICAgICAgICAgICB9KTsKLSAgICAgICAgICAgIGlm
ICh0eXBlb2YgJHZtICE9PSAndW5kZWZpbmVkJykKKyAgICAgICAgICAgIGlmICh0eXBlb2YgJHZt
ICE9PSAndW5kZWZpbmVkJykgeworICAgICAgICAgICAgICAgIG1ha2VQcm90b3R5cGVEaWN0KCkK
ICAgICAgICAgICAgICAgICAkdm0uZmxhdHRlbkRpY3Rpb25hcnlPYmplY3QoRm9vLnByb3RvdHlw
ZSk7CisgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICB9LAogICAgIGNvbmZpZ3VyYWJsZTog
dHJ1ZSwKZGlmZiAtLWdpdCBhL0pTVGVzdHMvc3RyZXNzL2RlbGV0ZS1wcm9wZXJ0eS1jaGVjay1z
dHJ1Y3R1cmUtdHJhbnNpdGlvbi5qcyBiL0pTVGVzdHMvc3RyZXNzL2RlbGV0ZS1wcm9wZXJ0eS1j
aGVjay1zdHJ1Y3R1cmUtdHJhbnNpdGlvbi5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi40MDNjN2MwOWNjMTIzZjNi
MTg1NDY4MGI2YzE3ZGQ0NTZhNWRlZjMxCi0tLSAvZGV2L251bGwKKysrIGIvSlNUZXN0cy9zdHJl
c3MvZGVsZXRlLXByb3BlcnR5LWNoZWNrLXN0cnVjdHVyZS10cmFuc2l0aW9uLmpzCkBAIC0wLDAg
KzEsMTg5IEBACitmdW5jdGlvbiBhc3NlcnQoY29uZGl0aW9uKSB7CisgICAgaWYgKCFjb25kaXRp
b24pCisgICAgICAgIHRocm93IG5ldyBFcnJvcigiYXNzZXJ0aW9uIGZhaWxlZCIpOworfQorCitm
dW5jdGlvbiBhc3NlcnRfZXEoYSwgYikgeworICAgIGlmIChhICE9PSBiKQorICAgICAgICB0aHJv
dyBuZXcgRXJyb3IoImFzc2VydGlvbiBmYWlsZWQ6ICIgKyBhICsgIiA9PT0gIiArIGIpOworfQor
CitmdW5jdGlvbiBhc3NlcnRfbmVxKGEsIGIpIHsKKyAgICBpZiAoYSA9PT0gYikKKyAgICAgICAg
dGhyb3cgbmV3IEVycm9yKCJhc3NlcnRpb24gZmFpbGVkOiAiICsgYSArICIgIT09ICIgKyBiKTsK
K30KKworZnVuY3Rpb24gc2Qob2JqKSB7CisgICAgbGV0IGRhdGEgPSAkdm0uZ2V0U3RydWN0dXJl
VHJhbnNpdGlvbkxpc3Qob2JqKQorICAgIGxldCByZXN1bHQgPSBbXQorCisgICAgaWYgKCFkYXRh
KQorICAgICAgICByZXR1cm4gcmVzdWx0CisKKyAgICBmb3IgKGxldCBpID0gMDsgaSA8IGRhdGEu
bGVuZ3RoLzU7ICsraSkgeworICAgICAgICByZXN1bHQucHVzaCh7IGlkOiBkYXRhW2kqNSswXSwg
b2Zmc2V0OiBkYXRhW2kqNSsxXSwgbWF4OiBkYXRhW2kqNSsyXSwgcHJvcGVydHk6IGRhdGFbaSo1
KzNdLCB0eXBlOiBkYXRhW2kqNSs0XSA9PSAwID8gImFkZGVkIiA6ICJkZWxldGVkIiB9KQorICAg
IH0KKworICAgIHJldHVybiByZXN1bHQKK30KKworZnVuY3Rpb24gc2lkKG9iaikgeworICAgIGxl
dCBkYXRhID0gc2Qob2JqKQorICAgIHJldHVybiBkYXRhW2RhdGEubGVuZ3RoLTFdLmlkCit9CisK
K2Z1bmN0aW9uIHRlc3REZWxldGVJc05vdFVuY2FjaGVhYmxlKGkpIHsKKyAgICBsZXQgZm9vID0g
e30KKyAgICBmb29bImJhciIgKyBpXSA9IDEKKyAgICBmb29bImJheiIgKyBpXSA9IDIKKyAgICBh
c3NlcnQoZm9vWyJiYXIiICsgaV0gPT09IDEpCisgICAgYXNzZXJ0KGZvb1siYmF6IiArIGldID09
PSAyKQorICAgIGxldCBvbGRTaWQgPSBzaWQoZm9vKQorCisgICAgYXNzZXJ0X2VxKCR2bS5nZXRD
b25jdXJyZW50bHkoZm9vLCAiYmF6IitpKSwgMSkKKyAgICBhc3NlcnRfZXEoJHZtLmdldENvbmN1
cnJlbnRseShmb28sICJiYXIiK2kpLCAxKQorICAgIGFzc2VydF9lcSgkdm0uZ2V0Q29uY3VycmVu
dGx5KGZvbywgImZvbyIraSksIDApCisKKyAgICBhc3NlcnQoZGVsZXRlIGZvb1siYmFyIiArIGld
KQorICAgIGFzc2VydF9uZXEob2xkU2lkLCBzaWQoZm9vKSkKKyAgICBhc3NlcnQoISgoImJhciIg
KyBpKSBpbiBmb28pKTsKKyAgICBhc3NlcnQoZm9vWyJiYXoiICsgaV0gPT09IDIpCisKKyAgICBh
c3NlcnRfZXEoJHZtLmdldENvbmN1cnJlbnRseShmb28sICJiYXoiK2kpLCAxKQorICAgIGFzc2Vy
dF9lcSgkdm0uZ2V0Q29uY3VycmVudGx5KGZvbywgImJhciIraSksIDApCisKKyAgICBhc3NlcnRf
ZXEoT2JqZWN0LmtleXMoZm9vKS5sZW5ndGgsIDEpCisKKyAgICBsZXQgZGF0YSA9IHNkKGZvbykK
KyAgICBhc3NlcnRfZXEoZGF0YVtkYXRhLmxlbmd0aC0xXS5wcm9wZXJ0eSwgImJhciIgKyBpKQor
CisgICAgZm9vWyJiYXIiICsgaV0gPSAxCisgICAgYXNzZXJ0X2VxKCR2bS5nZXRDb25jdXJyZW50
bHkoZm9vLCAiYmF6IitpKSwgMSkKKyAgICBhc3NlcnRfZXEoJHZtLmdldENvbmN1cnJlbnRseShm
b28sICJiYXIiK2kpLCAxKQorICAgIGFzc2VydChmb29bImJhciIgKyBpXSA9PT0gMSkKK30KKwor
ZnVuY3Rpb24gdGVzdENhbk1hdGVyaWFsaXplRGVsZXRlcyhpKSB7CisgICAgbGV0IGZvbyA9IHt9
CisgICAgZm9vWyJiYXIiICsgaV0gPSAxCisgICAgZm9vWyJiYXoiICsgaV0gPSAyCisKKyAgICBh
c3NlcnQoZm9vWyJiYXIiICsgaV0gPT09IDEpCisgICAgYXNzZXJ0KGZvb1siYmF6IiArIGldID09
PSAyKQorICAgIGFzc2VydChkZWxldGUgZm9vWyJiYXIiICsgaV0pCisgICAgYXNzZXJ0KCEoImJh
ciIgKyBpIGluIGZvbykpCisgICAgYXNzZXJ0KGZvb1siYmF6IiArIGldID09PSAyKQorICAgIGFz
c2VydF9lcShPYmplY3Qua2V5cyhmb28pLmxlbmd0aCwgMSkKKworICAgIGxldCBmb28yID0ge30K
KyAgICBmb28yWyJiYXIiICsgaV0gPSAzCisgICAgZm9vMlsiYmF6IiArIGldID0gNAorICAgIGFz
c2VydChkZWxldGUgZm9vMlsiYmFyIiArIGldKQorCisgICAgYXNzZXJ0X2VxKHNpZChmb28yKSwg
c2lkKGZvbykpCisgICAgZm9vMlsiZnVuIiArIGldID0gMworICAgIGFzc2VydF9uZXEoc2lkKGZv
bzIpLCBzaWQoZm9vKSkKKworICAgIGFzc2VydChmb28yWyJmdW4iICsgaV0gPT09IDMpCisgICAg
YXNzZXJ0KGZvbzJbImJheiIgKyBpXSA9PT0gNCkKKyAgICBhc3NlcnQoISgiYmFyIiArIGkgaW4g
Zm9vMikpCisgICAgYXNzZXJ0X2VxKE9iamVjdC5rZXlzKGZvbzIpLmxlbmd0aCwgMikKKyAgICBh
c3NlcnQoZm9vWyJiYXoiICsgaV0gPT09IDIpCisgICAgYXNzZXJ0KCEoImJhciIgKyBpIGluIGZv
bykpCisgICAgYXNzZXJ0X2VxKE9iamVjdC5rZXlzKGZvbykubGVuZ3RoLCAxKQorCisgICAgbGV0
IGRhdGEgPSBzZChmb28pCisgICAgYXNzZXJ0X2VxKGRhdGFbZGF0YS5sZW5ndGgtMV0ucHJvcGVy
dHksICJiYXIiICsgaSkKKworICAgIGRhdGEgPSBzZChmb28yKQorICAgIGFzc2VydF9lcShkYXRh
W2RhdGEubGVuZ3RoLTFdLnByb3BlcnR5LCAiZnVuIiArIGkpCisgICAgYXNzZXJ0X2VxKGRhdGFb
ZGF0YS5sZW5ndGgtMl0ucHJvcGVydHksICJiYXIiICsgaSkKK30KKworZnVuY3Rpb24gdGVzdENh
bkZsYXR0ZW4oaSkgeworICAgIGxldCBmb28gPSB7fQorICAgIGZvciAobGV0IGo9MDsgajw1MDA7
ICsraikgeworICAgICAgICBjb25zdCBvbGRJZCA9IHNpZChmb28pCisKKyAgICAgICAgZm9vWyJ4
IiArIDEwMDAqaiArIGldID0gagorICAgICAgICBpZiAoaiA+IDApCisgICAgICAgICAgICBkZWxl
dGUgZm9vWyJ4IiArIDEwMDAqKGogLSAxKSArIGldCisKKyAgICAgICAgaWYgKGogPiAxMDApCisg
ICAgICAgICAgICBhc3NlcnRfZXEoc2lkKGZvbyksIG9sZElkKQorICAgIH0KKworICAgIGZvciAo
bGV0IGo9MDsgajw1MDA7ICsraikgeworICAgICAgICBjb25zdCB2YWwgPSBmb29bIngiICsgMTAw
MCpqICsgaV0KKyAgICAgICAgaWYgKGogPT0gNDk5KQorICAgICAgICAgICAgYXNzZXJ0X2VxKHZh
bCwgaikKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgYXNzZXJ0X2VxKHZhbCwgdW5kZWZpbmVk
KQorICAgIH0KKworICAgICR2bS5mbGF0dGVuRGljdGlvbmFyeU9iamVjdChmb28pCisKKyAgICBm
b3IgKGxldCBqPTA7IGo8NTAwOyArK2opIHsKKyAgICAgICAgY29uc3QgdmFsID0gZm9vWyJ4IiAr
IDEwMDAqaiArIGldCisgICAgICAgIGlmIChqID09IDQ5OSkKKyAgICAgICAgICAgIGFzc2VydF9l
cSh2YWwsIGopCisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGFzc2VydF9lcSh2YWwsIHVuZGVm
aW5lZCkKKyAgICB9Cit9CisKK2Z1bmN0aW9uIHRlc3REZWxldGVXaXRoSW5saW5lQ2FjaGUoKSB7
CisgICAgT2JqZWN0LnByb3RvdHlwZS5nbG9iYWxQcm9wZXJ0eSA9IDQyCisKKyAgICBmdW5jdGlv
biBtYWtlRm9vKCkgeworICAgICAgICBsZXQgZm9vID0ge30KKyAgICAgICAgZm9vLmJheiA9IDEK
KyAgICAgICAgYXNzZXJ0KGZvby5nbG9iYWxQcm9wZXJ0eSA9PT0gNDIpCisKKyAgICAgICAgcmV0
dXJuIGZvbworICAgIH0KKyAgICBub0lubGluZShtYWtlRm9vKQorCisgICAgZnVuY3Rpb24gZG9U
ZXN0KHhWYWwpIHsKKyAgICAgICAgZm9yIChsZXQgaj0wOyBqPDUwOyArK2opIHsKKyAgICAgICAg
ICAgIGZvciAobGV0IHo9MDsgejwxMDAwMDsgKyt6KSB7CisgICAgICAgICAgICAgICAgY29uc3Qg
Zm9vID0gYXJyW2pdCisKKyAgICAgICAgICAgICAgICBhc3NlcnQoZm9vLmJheiA9PT0gMSkKKyAg
ICAgICAgICAgICAgICBhc3NlcnRfZXEoT2JqZWN0LmtleXMoZm9vKS5sZW5ndGgsIDEpCisgICAg
ICAgICAgICAgICAgYXNzZXJ0X2VxKGZvby5nbG9iYWxQcm9wZXJ0eSwgeFZhbCkKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgfQorICAgIH0KKyAgICBub0lubGluZShkb1Rlc3QpCisKKyAgICBhcnIg
PSBuZXcgQXJyYXkoNTApCisKKyAgICBmb3IgKGxldCBqPTA7IGo8NTA7ICsraikgeworICAgICAg
ICBhcnJbal0gPSBtYWtlRm9vKCkKKyAgICAgICAgaWYgKGogPiAwKQorICAgICAgICAgICAgYXNz
ZXJ0X2VxKHNpZChhcnJbai0xXSksIHNpZChhcnJbal0pKQorICAgIH0KKworICAgIGRvVGVzdCg0
MikKKworICAgIE9iamVjdC5wcm90b3R5cGUuZ2xvYmFsUHJvcGVydHkgPSA0MworCisgICAgZG9U
ZXN0KDQzKQorCisgICAgZGVsZXRlIE9iamVjdC5wcm90b3R5cGUuZ2xvYmFsUHJvcGVydHkKKwor
ICAgIGRvVGVzdCh1bmRlZmluZWQpCit9CisKK3Rlc3REZWxldGVXaXRoSW5saW5lQ2FjaGUoKQor
Citmb3IgKGxldCBpID0gMDsgaSA8IDEwMDA7ICsraSkgeworICAgIHRlc3REZWxldGVJc05vdFVu
Y2FjaGVhYmxlKGkpCisgICAgdGVzdENhbk1hdGVyaWFsaXplRGVsZXRlcygxMDAwK2kpCit9CisK
K2ZvciAobGV0IGkgPSAwOyBpIDwgMTAwOyArK2kpIHsKKyAgICB0ZXN0Q2FuRmxhdHRlbigyMDAw
K2kpCit9CisKZGlmZiAtLWdpdCBhL0pTVGVzdHMvc3RyZXNzL2ZsYXR0ZW4tb2JqZWN0LXplcm8t
dW51c2VkLWlubGluZS1wcm9wZXJ0aWVzLmpzIGIvSlNUZXN0cy9zdHJlc3MvZmxhdHRlbi1vYmpl
Y3QtemVyby11bnVzZWQtaW5saW5lLXByb3BlcnRpZXMuanMKaW5kZXggNmZlNWExNGM0OTU4YjFi
YjJkZjY5MWIxODJmMDk5MjZkODNhYTI5MC4uNjQ2MGE5NGFhNjMyMmVlZmE0ZDZiODY1MGRlYjBj
Y2ZiZTNhYjUzMSAxMDA2NDQKLS0tIGEvSlNUZXN0cy9zdHJlc3MvZmxhdHRlbi1vYmplY3QtemVy
by11bnVzZWQtaW5saW5lLXByb3BlcnRpZXMuanMKKysrIGIvSlNUZXN0cy9zdHJlc3MvZmxhdHRl
bi1vYmplY3QtemVyby11bnVzZWQtaW5saW5lLXByb3BlcnRpZXMuanMKQEAgLTEsNCArMSwxMCBA
QAogbGV0IG8gPSB7IGZvbzogMSwgYmFyOiAyLCBiYXo6IDMgfTsKK2ZvciAobGV0IGk9MDsgaTwx
MDA7ICsraSkgeworICAgIG8uYSA9IGkKKyAgICBvLmIgPSBpCisgICAgZGVsZXRlIG8uYQorICAg
IGRlbGV0ZSBvLmIKK30KIGlmICgkdm0uaW5saW5lQ2FwYWNpdHkobykgPD0gMykKICAgICB0aHJv
dyBuZXcgRXJyb3IoIlRoZXJlIHNob3VsZCBiZSBpbmxpbmUgY2FwYWNpdHkiKTsKIAo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>389832</attachid>
            <date>2020-02-05 11:22:47 -0800</date>
            <delta_ts>2020-02-05 19:48:39 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-206430-20200205112246.patch</filename>
            <type>text/plain</type>
            <size>53723</size>
            <attacher name="Justin Michaud">justin_michaud</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjU1NjkzCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCAy
ODRjYTM0MDg2MmY3NTVmZjM0Njc5NjliY2JiNDlmOThlNzdkY2UzLi40N2IyOGJiYTM5ZWY1Zjc2
YTI3NzAwMmFlZGM1MzhkYmJjZjdkYTY3IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSw2NCBAQAorMjAyMC0wMS0zMCAgSnVzdGluIE1pY2hhdWQgIDxqdXN0aW5fbWljaGF1ZEBh
cHBsZS5jb20+CisKKyAgICAgICAgRGVsZXRpbmcgYSBwcm9wZXJ0eSBzaG91bGQgbm90IHR1cm4g
c3RydWN0dXJlcyBpbnRvIHVuY2FjaGVhYmxlIGRpY3Rpb25hcmllcworICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjA2NDMwCisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgWXVzdWtlIFN1enVraS4KKworICAgICAgICBSaWdodCBub3csIGRlbGV0ZVByb3BlcnR5
L3JlbW92ZVByb3BlcnR5VHJhbnNpdGlvbiBjYXVzZXMgYSBzdHJ1Y3R1cmUgdHJhbnNpdGlvbiB0
byB1bmNhY2hlYWJsZSBkaWN0aW9uYXJ5LiBJbnN0ZWFkLCB3ZSBzaG91bGQgYWxsb3cgaXQgdG8g
dHJhbnNpdGlvbiB0byBhIG5ldyByZWd1bGFyIHN0cnVjdHVyZSBsaWtlIGFkZGluZyBhIHByb3Bl
cnR5IGRvZXMuIFRoaXMgbWVhbnMgdGhhdCB3ZSBoYXZlIHRvOgorCisgICAgICAgIDEpIEJyZWFr
IHRoZSBhc3N1bXB0aW9uIHRoYXQgc3RydWN0dXJlIHRyYW5zaXRpb24gb2Zmc2V0cyBpbmNyZWFz
ZSBtb25vdG9uaWNhbGx5CisKKyAgICAgICAgV2UgYWRkIGEgbmV3IGZsYWcgdG8gdGVsbCB0aGF0
IGEgc3RydWN0dXJlIGhhcyBkZWxldGVkIGl0cyBwcm9wZXJ0eSwgYW5kIHVwZGF0ZSBtYXRlcmlh
bGl6ZVByb3BlcnR5VGFibGUgdG8gdXNlIGl0LgorCisgICAgICAgIDIpIEFkZCBhIG5ldyB0cmFu
c2l0aW9uIG1hcCBhbmQgdHJhbnNpdGlvbiBraW5kIGZvciBkZWxldGVzCisKKyAgICAgICAgV2Ug
Y2FjaGUgdGhlIGRlbGV0ZSB0cmFuc2l0aW9uLiBXZSB3aWxsIG5vdCB0cmFuc2l0aW9uIGJhY2sg
dG8gYSBwcmV2aW91cyBzdHJ1Y3R1cmUgaWYgeW91IGFkZCB0aGVuIGltbWVkaWF0ZWx5IHJlbW92
ZSBhIHByb3BlcnR5LgorCisgICAgICAgIDMpIEZpbmQgc29tZSBoZXVyaXN0aWMgZm9yIHdoZW4g
d2Ugc2hvdWxkIGFjdHVhbGx5IHRyYW5zaXRpb24gdG8gdW5jYWNoZWFibGUgZGljdGlvbmFyeS4K
KworICAgICAgICBTaW5jZSBkZWxldGluZyBwcm9wZXJ0aWVzIGlzIGV4cGVjdGVkIHRvIGJlIHJh
cmUsIHdlIGp1c3Qgd2FsayB0aGUgc3RydWN0dXJlIGxpc3QgYW5kIGNvdW50IGl0cyBzaXplIG9u
IHJlbW92YWwuIAorCisgICAgICAgIFRoaXMgcGF0Y2ggYWxzbyBmaXhlcyBhIHJlbGF0ZWQgYnVn
IGluIGFkZFByb3BlcnR5LCB3aGVyZSB3ZSBkaWQgbm90IHVzZSBhIEdDU2FmZUNvbmN1cnJlbnRK
U0xvY2tlciwgYW5kIGFkZHMgYW4gb3B0aW9uIHRvIHRyaWdnZXIgdGhlIGJ1Zy4gRmluYWxseSwg
d2UgYWRkIHNvbWUgaGVscGVyIG1ldGhvZHMgdG8gZG9sbGFyVk0gdG8gdGVzdC4KKworICAgICAg
ICBUaGlzIGdpdmVzIGEgMjR4IHNwZWVkdXAgb24gZGVsZXRlLXByb3BlcnR5LWtlZXBzLWNhY2hl
YWJsZS1zdHJ1Y3R1cmUuanMsIGFuZCBpcyBuZXV0cmFsIG9uIGRlbGV0ZS1wcm9wZXJ0eS1mcm9t
LXByb3RvdHlwZS1jaGFpbi5qcyAod2hpY2ggd2FzIGFscmVhZHkgZ2VuZXJhdGluZyBjb2RlIHVz
aW5nIHRoZSBpbmxpbmUgY2FjaGUpLgorCisgICAgICAgICogaGVhcC9IZWFwSW5saW5lcy5oOgor
ICAgICAgICAoSlNDOjpIZWFwOjpkZWNyZW1lbnREZWZlcnJhbERlcHRoQW5kR0NJZk5lZWRlZCk6
CisgICAgICAgICogcnVudGltZS9KU09iamVjdC5jcHA6CisgICAgICAgIChKU0M6OkpTT2JqZWN0
OjpkZWxldGVQcm9wZXJ0eSk6CisgICAgICAgICogcnVudGltZS9PcHRpb25zTGlzdC5oOgorICAg
ICAgICAqIHJ1bnRpbWUvUHJvcGVydHlNYXBIYXNoVGFibGUuaDoKKyAgICAgICAgKEpTQzo6UHJv
cGVydHlUYWJsZTo6Z2V0KToKKyAgICAgICAgKEpTQzo6UHJvcGVydHlUYWJsZTo6YWRkKToKKyAg
ICAgICAgKEpTQzo6UHJvcGVydHlUYWJsZTo6YWRkRGVsZXRlZE9mZnNldCk6CisgICAgICAgIChK
U0M6OlByb3BlcnR5VGFibGU6OnJlaW5zZXJ0KToKKyAgICAgICAgKiBydW50aW1lL1N0cnVjdHVy
ZS5jcHA6CisgICAgICAgIChKU0M6OlN0cnVjdHVyZVRyYW5zaXRpb25UYWJsZTo6Y29udGFpbnMg
Y29uc3QpOgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmVUcmFuc2l0aW9uVGFibGU6OmdldCBjb25z
dCk6CisgICAgICAgIChKU0M6OlN0cnVjdHVyZVRyYW5zaXRpb25UYWJsZTo6YWRkKToKKyAgICAg
ICAgKEpTQzo6U3RydWN0dXJlOjpTdHJ1Y3R1cmUpOgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmU6
Om1hdGVyaWFsaXplUHJvcGVydHlUYWJsZSk6CisgICAgICAgIChKU0M6OlN0cnVjdHVyZTo6YWRk
TmV3UHJvcGVydHlUcmFuc2l0aW9uKToKKyAgICAgICAgKEpTQzo6U3RydWN0dXJlOjpyZW1vdmVQ
cm9wZXJ0eVRyYW5zaXRpb24pOgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmU6OnJlbW92ZVByb3Bl
cnR5VHJhbnNpdGlvbkZyb21FeGlzdGluZ1N0cnVjdHVyZSk6CisgICAgICAgIChKU0M6OlN0cnVj
dHVyZTo6cmVtb3ZlTmV3UHJvcGVydHlUcmFuc2l0aW9uKToKKyAgICAgICAgKEpTQzo6U3RydWN0
dXJlOjp0b1VuY2FjaGVhYmxlRGljdGlvbmFyeVRyYW5zaXRpb24pOgorICAgICAgICAoSlNDOjpT
dHJ1Y3R1cmU6OnJlbW92ZSk6CisgICAgICAgIChKU0M6OlN0cnVjdHVyZTo6dmlzaXRDaGlsZHJl
bik6CisgICAgICAgICogcnVudGltZS9TdHJ1Y3R1cmUuaDoKKyAgICAgICAgKiBydW50aW1lL1N0
cnVjdHVyZUlubGluZXMuaDoKKyAgICAgICAgKEpTQzo6U3RydWN0dXJlOjpmb3JFYWNoUHJvcGVy
dHlDb25jdXJyZW50bHkpOgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmU6OmFkZCk6CisgICAgICAg
IChKU0M6OlN0cnVjdHVyZTo6cmVtb3ZlKToKKyAgICAgICAgKEpTQzo6U3RydWN0dXJlOjpyZW1v
dmVQcm9wZXJ0eVdpdGhvdXRUcmFuc2l0aW9uKToKKyAgICAgICAgKiBydW50aW1lL1N0cnVjdHVy
ZVRyYW5zaXRpb25UYWJsZS5oOgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmVUcmFuc2l0aW9uVGFi
bGU6Okhhc2g6Omhhc2gpOgorICAgICAgICAqIHRvb2xzL0pTRG9sbGFyVk0uY3BwOgorICAgICAg
ICAoSlNDOjpKU0RvbGxhclZNSGVscGVyOjpmdW5jdGlvbkdldFN0cnVjdHVyZVRyYW5zaXRpb25M
aXN0KToKKyAgICAgICAgKEpTQzo6ZnVuY3Rpb25HZXRDb25jdXJyZW50bHkpOgorICAgICAgICAo
SlNDOjpKU0RvbGxhclZNOjpmaW5pc2hDcmVhdGlvbik6CisKIDIwMjAtMDItMDQgIEFsZXhleSBT
aHZheWthICA8c2h2YWlrYWxlc2hAZ21haWwuY29tPgogCiAgICAgICAgIFF1YW50aWZpZXJzIGFm
dGVyIGxvb2thaGVhZCBhc3NlcnRpb25zIHNob3VsZCBiZSBzeW50YXggZXJyb3JzIGluIFVuaWNv
ZGUgcGF0dGVybnMgb25seQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAv
SGVhcElubGluZXMuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXBJbmxpbmVzLmgK
aW5kZXggMTdmMjQxMThiODIyZWZiN2Y2NmVlMTI1OTUzNzhmYTU4YzIxN2M2Mi4uN2FmMDU2M2Ix
MWViNmQ4YzE1MjJkNjIwOWZjNGMxOWQ1NTRhN2RjZiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2hlYXAvSGVhcElubGluZXMuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
aGVhcC9IZWFwSW5saW5lcy5oCkBAIC0xODgsNyArMTg4LDcgQEAgaW5saW5lIHZvaWQgSGVhcDo6
ZGVjcmVtZW50RGVmZXJyYWxEZXB0aEFuZEdDSWZOZWVkZWQoKQogICAgIEFTU0VSVCghVGhyZWFk
OjptYXlCZUdDVGhyZWFkKCkgfHwgbV93b3JsZElzU3RvcHBlZCk7CiAgICAgbV9kZWZlcnJhbERl
cHRoLS07CiAgICAgCi0gICAgaWYgKFVOTElLRUxZKG1fZGlkRGVmZXJHQ1dvcmspKSB7CisgICAg
aWYgKFVOTElLRUxZKG1fZGlkRGVmZXJHQ1dvcmspIHx8IE9wdGlvbnM6OmZvcmNlRGlkRGVmZXJH
Q1dvcmsoKSkgewogICAgICAgICBkZWNyZW1lbnREZWZlcnJhbERlcHRoQW5kR0NJZk5lZWRlZFNs
b3coKTsKICAgICAgICAgCiAgICAgICAgIC8vIEhlcmUgYXJlIHRoZSBwb3NzaWJsZSByZWxhdGlv
bnNoaXBzIGJldHdlZW4gbV9kZWZlcnJhbERlcHRoIGFuZCBtX2RpZERlZmVyR0NXb3JrLgpkaWZm
IC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNPYmplY3QuY3BwIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNPYmplY3QuY3BwCmluZGV4IGQ2N2JhOGQ1Y2E5
NTY5ZDA0YTE5ZTUwMzY0NTMwNTk2YmE5ZDg4ZDIuLmFjZDI5ZGVkODEzNTFmYjI4NGIyMTU5YWQ0
N2E2MzFjMzQ5NGYxZGYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0pTT2JqZWN0LmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU09iamVj
dC5jcHAKQEAgLTIwMDEsMTIgKzIwMDEsMjIgQEAgYm9vbCBKU09iamVjdDo6ZGVsZXRlUHJvcGVy
dHkoSlNDZWxsKiBjZWxsLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBQcm9wZXIKICAg
ICBpZiAocHJvcGVydHlJc1ByZXNlbnQpIHsKICAgICAgICAgaWYgKGF0dHJpYnV0ZXMgJiBQcm9w
ZXJ0eUF0dHJpYnV0ZTo6RG9udERlbGV0ZSAmJiB2bS5kZWxldGVQcm9wZXJ0eU1vZGUoKSAhPSBW
TTo6RGVsZXRlUHJvcGVydHlNb2RlOjpJZ25vcmVDb25maWd1cmFibGUpCiAgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgICAgIERlZmVycmVkU3RydWN0dXJlVHJhbnNpdGlvbldhdGNocG9p
bnRGaXJlIGRlZmVycmVkV2F0Y2hwb2ludEZpcmUodm0sIHN0cnVjdHVyZSk7CiAKLSAgICAgICAg
UHJvcGVydHlPZmZzZXQgb2Zmc2V0OworICAgICAgICBQcm9wZXJ0eU9mZnNldCBvZmZzZXQgPSBp
bnZhbGlkT2Zmc2V0OwogICAgICAgICBpZiAoc3RydWN0dXJlLT5pc1VuY2FjaGVhYmxlRGljdGlv
bmFyeSgpKQotICAgICAgICAgICAgb2Zmc2V0ID0gc3RydWN0dXJlLT5yZW1vdmVQcm9wZXJ0eVdp
dGhvdXRUcmFuc2l0aW9uKHZtLCBwcm9wZXJ0eU5hbWUsIFtdIChjb25zdCBDb25jdXJyZW50SlNM
b2NrZXImLCBQcm9wZXJ0eU9mZnNldCkgeyB9KTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAg
dGhpc09iamVjdC0+c2V0U3RydWN0dXJlKHZtLCBTdHJ1Y3R1cmU6OnJlbW92ZVByb3BlcnR5VHJh
bnNpdGlvbih2bSwgc3RydWN0dXJlLCBwcm9wZXJ0eU5hbWUsIG9mZnNldCkpOworICAgICAgICAg
ICAgb2Zmc2V0ID0gc3RydWN0dXJlLT5yZW1vdmVQcm9wZXJ0eVdpdGhvdXRUcmFuc2l0aW9uKHZt
LCBwcm9wZXJ0eU5hbWUsIFtdIChjb25zdCBHQ1NhZmVDb25jdXJyZW50SlNMb2NrZXImLCBQcm9w
ZXJ0eU9mZnNldCwgUHJvcGVydHlPZmZzZXQpIHsgfSk7CisgICAgICAgIGVsc2UgeworICAgICAg
ICAgICAgc3RydWN0dXJlID0gU3RydWN0dXJlOjpyZW1vdmVQcm9wZXJ0eVRyYW5zaXRpb24odm0s
IHN0cnVjdHVyZSwgcHJvcGVydHlOYW1lLCBvZmZzZXQsICZkZWZlcnJlZFdhdGNocG9pbnRGaXJl
KTsKKyAgICAgICAgICAgIGlmICh0aGlzT2JqZWN0LT5tX2J1dHRlcmZseSAmJiAhc3RydWN0dXJl
LT5vdXRPZkxpbmVDYXBhY2l0eSgpICYmICFzdHJ1Y3R1cmUtPmhhc0luZGV4aW5nSGVhZGVyKHRo
aXNPYmplY3QpKSB7CisgICAgICAgICAgICAgICAgdGhpc09iamVjdC0+bnVrZVN0cnVjdHVyZUFu
ZFNldEJ1dHRlcmZseSh2bSwgdGhpc09iamVjdC0+c3RydWN0dXJlSUQoKSwgbnVsbHB0cik7Cisg
ICAgICAgICAgICAgICAgb2Zmc2V0ID0gaW52YWxpZE9mZnNldDsKKyAgICAgICAgICAgICAgICBB
U1NFUlQoc3RydWN0dXJlLT5tYXhPZmZzZXQoKSA9PSBpbnZhbGlkT2Zmc2V0KTsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIHRoaXNPYmplY3QtPnNldFN0cnVjdHVyZSh2bSwgc3RydWN0dXJl
KTsKKyAgICAgICAgfQorCisgICAgICAgIEFTU0VSVCghaXNWYWxpZE9mZnNldChzdHJ1Y3R1cmUt
PmdldCh2bSwgcHJvcGVydHlOYW1lLCBhdHRyaWJ1dGVzKSkpOwogCiAgICAgICAgIGlmIChvZmZz
ZXQgIT0gaW52YWxpZE9mZnNldCkKICAgICAgICAgICAgIHRoaXNPYmplY3QtPmxvY2F0aW9uRm9y
T2Zmc2V0KG9mZnNldCktPmNsZWFyKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9PcHRpb25zTGlzdC5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
T3B0aW9uc0xpc3QuaAppbmRleCA0MDMyM2M4ZGNkMTE0ZjhlMDIwNzRlNzZlMDU2MDFjMzdlMWRl
ZmQxLi40MWNhYjExODRkY2M0NTAyNjhkNjNmYjM3YTM1ZjEyMmRmNThiMjYzIDEwMDY0NAotLS0g
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PcHRpb25zTGlzdC5oCisrKyBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09wdGlvbnNMaXN0LmgKQEAgLTM0Nyw2ICszNDcsNyBA
QCBjb25zdGV4cHIgYm9vbCBlbmFibGVXZWJBc3NlbWJseVN0cmVhbWluZ0FwaSA9IGZhbHNlOwog
ICAgIHYoQm9vbCwgdXNlR0MsIHRydWUsIE5vcm1hbCwgbnVsbHB0cikgXAogICAgIHYoQm9vbCwg
Z2NBdEVuZCwgZmFsc2UsIE5vcm1hbCwgIklmIHRydWUsIHRoZSBqc2MgQ0xJIHdpbGwgZG8gYSBH
QyBiZWZvcmUgZXhpdGluZyIpIFwKICAgICB2KEJvb2wsIGZvcmNlR0NTbG93UGF0aHMsIGZhbHNl
LCBOb3JtYWwsICJJZiB0cnVlLCB3ZSB3aWxsIGZvcmNlIGFsbCBKSVQgZmFzdCBhbGxvY2F0aW9u
cyBkb3duIHRoZWlyIHNsb3cgcGF0aHMuIikgXAorICAgIHYoQm9vbCwgZm9yY2VEaWREZWZlckdD
V29yaywgZmFsc2UsIE5vcm1hbCwgIklmIHRydWUsIHdlIHdpbGwgZm9yY2UgYWxsIERlZmVyR0Mg
ZGVzdHJ1Y3Rpb25zIHRvIHBlcmZvcm0gYSBHQy4iKSBcCiAgICAgdihVbnNpZ25lZCwgZ2NNYXhI
ZWFwU2l6ZSwgMCwgTm9ybWFsLCBudWxscHRyKSBcCiAgICAgdihVbnNpZ25lZCwgZm9yY2VSQU1T
aXplLCAwLCBOb3JtYWwsIG51bGxwdHIpIFwKICAgICB2KEJvb2wsIHJlY29yZEdDUGF1c2VUaW1l
cywgZmFsc2UsIE5vcm1hbCwgbnVsbHB0cikgXApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvUHJvcGVydHlNYXBIYXNoVGFibGUuaCBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL1Byb3BlcnR5TWFwSGFzaFRhYmxlLmgKaW5kZXggY2I2MDE1Y2YyMGU0NTMw
MTE1OWJiMDBkNzQyNjIzNzRmZWVjYjljZi4uMDk3YjVlOWI4ODI0YTc5Mjg0ZDE0MGZiNjIwY2Qy
MjU3NzhlZDJmYSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUHJv
cGVydHlNYXBIYXNoVGFibGUuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Q
cm9wZXJ0eU1hcEhhc2hUYWJsZS5oCkBAIC0xNjksOCArMTY5LDcgQEAgcHVibGljOgogICAgIGZp
bmRfaXRlcmF0b3IgZmluZChjb25zdCBLZXlUeXBlJik7CiAgICAgVmFsdWVUeXBlKiBnZXQoY29u
c3QgS2V5VHlwZSYpOwogICAgIC8vIEFkZCBhIHZhbHVlIHRvIHRoZSB0YWJsZQotICAgIGVudW0g
RWZmZWN0T25Qcm9wZXJ0eU9mZnNldCB7IFByb3BlcnR5T2Zmc2V0TWF5Q2hhbmdlLCBQcm9wZXJ0
eU9mZnNldE11c3ROb3RDaGFuZ2UgfTsKLSAgICBzdGQ6OnBhaXI8ZmluZF9pdGVyYXRvciwgYm9v
bD4gYWRkKGNvbnN0IFZhbHVlVHlwZSYgZW50cnksIFByb3BlcnR5T2Zmc2V0JiwgRWZmZWN0T25Q
cm9wZXJ0eU9mZnNldCk7CisgICAgc3RkOjpwYWlyPGZpbmRfaXRlcmF0b3IsIGJvb2w+IFdBUk5f
VU5VU0VEX1JFVFVSTiBhZGQoY29uc3QgVmFsdWVUeXBlJiBlbnRyeSk7CiAgICAgLy8gUmVtb3Zl
IGEgdmFsdWUgZnJvbSB0aGUgdGFibGUuCiAgICAgdm9pZCByZW1vdmUoY29uc3QgZmluZF9pdGVy
YXRvciYgaXRlcik7CiAgICAgdm9pZCByZW1vdmUoY29uc3QgS2V5VHlwZSYga2V5KTsKQEAgLTMy
MSw2ICszMjAsNyBAQCBpbmxpbmUgUHJvcGVydHlUYWJsZTo6VmFsdWVUeXBlKiBQcm9wZXJ0eVRh
YmxlOjpnZXQoY29uc3QgS2V5VHlwZSYga2V5KQogewogICAgIEFTU0VSVChrZXkpOwogICAgIEFT
U0VSVChrZXktPmlzQXRvbSgpIHx8IGtleS0+aXNTeW1ib2woKSk7CisgICAgQVNTRVJUKGtleSAh
PSBQUk9QRVJUWV9NQVBfREVMRVRFRF9FTlRSWV9LRVkpOwogCiAgICAgaWYgKCFtX2tleUNvdW50
KQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKQEAgLTMzNSw4ICszMzUsMTAgQEAgaW5saW5lIFBy
b3BlcnR5VGFibGU6OlZhbHVlVHlwZSogUHJvcGVydHlUYWJsZTo6Z2V0KGNvbnN0IEtleVR5cGUm
IGtleSkKICAgICAgICAgdW5zaWduZWQgZW50cnlJbmRleCA9IG1faW5kZXhbaGFzaCAmIG1faW5k
ZXhNYXNrXTsKICAgICAgICAgaWYgKGVudHJ5SW5kZXggPT0gRW1wdHlFbnRyeUluZGV4KQogICAg
ICAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgICAgIGlmIChrZXkgPT0gdGFibGUoKVtlbnRy
eUluZGV4IC0gMV0ua2V5KQorICAgICAgICBpZiAoa2V5ID09IHRhYmxlKClbZW50cnlJbmRleCAt
IDFdLmtleSkgeworICAgICAgICAgICAgQVNTRVJUKCFtX2RlbGV0ZWRPZmZzZXRzIHx8ICFtX2Rl
bGV0ZWRPZmZzZXRzLT5jb250YWlucyh0YWJsZSgpW2VudHJ5SW5kZXggLSAxXS5vZmZzZXQpKTsK
ICAgICAgICAgICAgIHJldHVybiAmdGFibGUoKVtlbnRyeUluZGV4IC0gMV07CisgICAgICAgIH0K
IAogI2lmIERVTVBfUFJPUEVSVFlNQVBfU1RBVFMKICAgICAgICAgKytwcm9wZXJ0eU1hcEhhc2hU
YWJsZVN0YXRzLT5udW1Mb29rdXBQcm9iaW5nOwpAQCAtMzQ2LDE0ICszNDgsMTQgQEAgaW5saW5l
IFByb3BlcnR5VGFibGU6OlZhbHVlVHlwZSogUHJvcGVydHlUYWJsZTo6Z2V0KGNvbnN0IEtleVR5
cGUmIGtleSkKICAgICB9CiB9CiAKLWlubGluZSBzdGQ6OnBhaXI8UHJvcGVydHlUYWJsZTo6Zmlu
ZF9pdGVyYXRvciwgYm9vbD4gUHJvcGVydHlUYWJsZTo6YWRkKGNvbnN0IFZhbHVlVHlwZSYgZW50
cnksIFByb3BlcnR5T2Zmc2V0JiBvZmZzZXQsIEVmZmVjdE9uUHJvcGVydHlPZmZzZXQgb2Zmc2V0
RWZmZWN0KQoraW5saW5lIHN0ZDo6cGFpcjxQcm9wZXJ0eVRhYmxlOjpmaW5kX2l0ZXJhdG9yLCBi
b29sPiBXQVJOX1VOVVNFRF9SRVRVUk4gUHJvcGVydHlUYWJsZTo6YWRkKGNvbnN0IFZhbHVlVHlw
ZSYgZW50cnkpCiB7CisgICAgQVNTRVJUKCFtX2RlbGV0ZWRPZmZzZXRzIHx8ICFtX2RlbGV0ZWRP
ZmZzZXRzLT5jb250YWlucyhlbnRyeS5vZmZzZXQpKTsKKwogICAgIC8vIExvb2sgZm9yIGEgdmFs
dWUgd2l0aCBhIG1hdGNoaW5nIGtleSBhbHJlYWR5IGluIHRoZSBhcnJheS4KICAgICBmaW5kX2l0
ZXJhdG9yIGl0ZXIgPSBmaW5kKGVudHJ5LmtleSk7Ci0gICAgaWYgKGl0ZXIuZmlyc3QpIHsKLSAg
ICAgICAgUkVMRUFTRV9BU1NFUlQoaXRlci5maXJzdC0+b2Zmc2V0IDw9IG9mZnNldCk7CisgICAg
aWYgKGl0ZXIuZmlyc3QpCiAgICAgICAgIHJldHVybiBzdGQ6Om1ha2VfcGFpcihpdGVyLCBmYWxz
ZSk7Ci0gICAgfQogCiAjaWYgRFVNUF9QUk9QRVJUWU1BUF9TVEFUUwogICAgICsrcHJvcGVydHlN
YXBIYXNoVGFibGVTdGF0cy0+bnVtQWRkczsKQEAgLTM3NywxMSArMzc5LDYgQEAgaW5saW5lIHN0
ZDo6cGFpcjxQcm9wZXJ0eVRhYmxlOjpmaW5kX2l0ZXJhdG9yLCBib29sPiBQcm9wZXJ0eVRhYmxl
OjphZGQoY29uc3QgVmEKIAogICAgICsrbV9rZXlDb3VudDsKICAgICAKLSAgICBpZiAob2Zmc2V0
RWZmZWN0ID09IFByb3BlcnR5T2Zmc2V0TWF5Q2hhbmdlKQotICAgICAgICBvZmZzZXQgPSBzdGQ6
Om1heChvZmZzZXQsIGVudHJ5Lm9mZnNldCk7Ci0gICAgZWxzZQotICAgICAgICBSRUxFQVNFX0FT
U0VSVChvZmZzZXQgPj0gZW50cnkub2Zmc2V0KTsKLSAgICAKICAgICByZXR1cm4gc3RkOjptYWtl
X3BhaXIoaXRlciwgdHJ1ZSk7CiB9CiAKQEAgLTQ1MSw2ICs0NDgsNyBAQCBpbmxpbmUgdm9pZCBQ
cm9wZXJ0eVRhYmxlOjphZGREZWxldGVkT2Zmc2V0KFByb3BlcnR5T2Zmc2V0IG9mZnNldCkKIHsK
ICAgICBpZiAoIW1fZGVsZXRlZE9mZnNldHMpCiAgICAgICAgIG1fZGVsZXRlZE9mZnNldHMgPSBt
YWtlVW5pcXVlPFZlY3RvcjxQcm9wZXJ0eU9mZnNldD4+KCk7CisgICAgQVNTRVJUKCFtX2RlbGV0
ZWRPZmZzZXRzLT5jb250YWlucyhvZmZzZXQpKTsKICAgICBtX2RlbGV0ZWRPZmZzZXRzLT5hcHBl
bmQob2Zmc2V0KTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvU3RydWN0dXJlLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVy
ZS5jcHAKaW5kZXggM2UxNGY4YjZhMzNiZWRkY2NmMGViYTFkMmYyOTFiNzc1ODc5NGZhOS4uMTk3
NzU5ZWE3OWNiODdlMjE0MDNhODNjZjgzNzA1ZGQyY2UxNTQ3NyAxMDA2NDQKLS0tIGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmUuY3BwCkBAIC04NywyMiArODcsMjIgQEAgaW5saW5l
IHZvaWQgU3RydWN0dXJlVHJhbnNpdGlvblRhYmxlOjpzZXRTaW5nbGVUcmFuc2l0aW9uKFN0cnVj
dHVyZSogc3RydWN0dXJlKQogICAgIG1fZGF0YSA9IGJpdHdpc2VfY2FzdDxpbnRwdHJfdD4oaW1w
bCkgfCBVc2luZ1NpbmdsZVNsb3RGbGFnOwogfQogCi1ib29sIFN0cnVjdHVyZVRyYW5zaXRpb25U
YWJsZTo6Y29udGFpbnMoVW5pcXVlZFN0cmluZ0ltcGwqIHJlcCwgdW5zaWduZWQgYXR0cmlidXRl
cykgY29uc3QKK2Jvb2wgU3RydWN0dXJlVHJhbnNpdGlvblRhYmxlOjpjb250YWlucyhVbmlxdWVk
U3RyaW5nSW1wbCogcmVwLCB1bnNpZ25lZCBhdHRyaWJ1dGVzLCBib29sIGlzQWRkaXRpb24pIGNv
bnN0CiB7CiAgICAgaWYgKGlzVXNpbmdTaW5nbGVTbG90KCkpIHsKICAgICAgICAgU3RydWN0dXJl
KiB0cmFuc2l0aW9uID0gc2luZ2xlVHJhbnNpdGlvbigpOwotICAgICAgICByZXR1cm4gdHJhbnNp
dGlvbiAmJiB0cmFuc2l0aW9uLT5tX3RyYW5zaXRpb25Qcm9wZXJ0eU5hbWUgPT0gcmVwICYmIHRy
YW5zaXRpb24tPnRyYW5zaXRpb25Qcm9wZXJ0eUF0dHJpYnV0ZXMoKSA9PSBhdHRyaWJ1dGVzOwor
ICAgICAgICByZXR1cm4gdHJhbnNpdGlvbiAmJiB0cmFuc2l0aW9uLT5tX3RyYW5zaXRpb25Qcm9w
ZXJ0eU5hbWUgPT0gcmVwICYmIHRyYW5zaXRpb24tPnRyYW5zaXRpb25Qcm9wZXJ0eUF0dHJpYnV0
ZXMoKSA9PSBhdHRyaWJ1dGVzICYmIHRyYW5zaXRpb24tPmlzUHJvcGVydHlEZWxldGlvblRyYW5z
aXRpb24oKSA9PSAhaXNBZGRpdGlvbjsKICAgICB9Ci0gICAgcmV0dXJuIG1hcCgpLT5nZXQoc3Rk
OjptYWtlX3BhaXIocmVwLCBhdHRyaWJ1dGVzKSk7CisgICAgcmV0dXJuIG1hcCgpLT5nZXQoc3Rk
OjptYWtlX3R1cGxlKHJlcCwgYXR0cmlidXRlcywgaXNBZGRpdGlvbikpOwogfQogCi1pbmxpbmUg
U3RydWN0dXJlKiBTdHJ1Y3R1cmVUcmFuc2l0aW9uVGFibGU6OmdldChVbmlxdWVkU3RyaW5nSW1w
bCogcmVwLCB1bnNpZ25lZCBhdHRyaWJ1dGVzKSBjb25zdAoraW5saW5lIFN0cnVjdHVyZSogU3Ry
dWN0dXJlVHJhbnNpdGlvblRhYmxlOjpnZXQoVW5pcXVlZFN0cmluZ0ltcGwqIHJlcCwgdW5zaWdu
ZWQgYXR0cmlidXRlcywgYm9vbCBpc0FkZGl0aW9uKSBjb25zdAogewogICAgIGlmIChpc1VzaW5n
U2luZ2xlU2xvdCgpKSB7CiAgICAgICAgIFN0cnVjdHVyZSogdHJhbnNpdGlvbiA9IHNpbmdsZVRy
YW5zaXRpb24oKTsKLSAgICAgICAgcmV0dXJuICh0cmFuc2l0aW9uICYmIHRyYW5zaXRpb24tPm1f
dHJhbnNpdGlvblByb3BlcnR5TmFtZSA9PSByZXAgJiYgdHJhbnNpdGlvbi0+dHJhbnNpdGlvblBy
b3BlcnR5QXR0cmlidXRlcygpID09IGF0dHJpYnV0ZXMpID8gdHJhbnNpdGlvbiA6IDA7CisgICAg
ICAgIHJldHVybiAodHJhbnNpdGlvbiAmJiB0cmFuc2l0aW9uLT5tX3RyYW5zaXRpb25Qcm9wZXJ0
eU5hbWUgPT0gcmVwICYmIHRyYW5zaXRpb24tPnRyYW5zaXRpb25Qcm9wZXJ0eUF0dHJpYnV0ZXMo
KSA9PSBhdHRyaWJ1dGVzICYmIHRyYW5zaXRpb24tPmlzUHJvcGVydHlEZWxldGlvblRyYW5zaXRp
b24oKSA9PSAhaXNBZGRpdGlvbikgPyB0cmFuc2l0aW9uIDogMDsKICAgICB9Ci0gICAgcmV0dXJu
IG1hcCgpLT5nZXQoc3RkOjptYWtlX3BhaXIocmVwLCBhdHRyaWJ1dGVzKSk7CisgICAgcmV0dXJu
IG1hcCgpLT5nZXQoc3RkOjptYWtlX3R1cGxlKHJlcCwgYXR0cmlidXRlcywgaXNBZGRpdGlvbikp
OwogfQogCiB2b2lkIFN0cnVjdHVyZVRyYW5zaXRpb25UYWJsZTo6YWRkKFZNJiB2bSwgU3RydWN0
dXJlKiBzdHJ1Y3R1cmUpCkBAIC0xMjcsNyArMTI3LDcgQEAgdm9pZCBTdHJ1Y3R1cmVUcmFuc2l0
aW9uVGFibGU6OmFkZChWTSYgdm0sIFN0cnVjdHVyZSogc3RydWN0dXJlKQogICAgIC8vIE5ld2Vy
IHZlcnNpb25zIG9mIHRoZSBTVEwgaGF2ZSBhbiBzdGQ6Om1ha2VfcGFpciBmdW5jdGlvbiB0aGF0
IHRha2VzIHJ2YWx1ZSByZWZlcmVuY2VzLgogICAgIC8vIFdoZW4gZWl0aGVyIG9mIHRoZSBwYXJh
bWV0ZXJzIGFyZSBiaXRmaWVsZHMsIHRoZSBDKysgY29tcGlsZXIgd2lsbCB0cnkgdG8gYmluZCB0
aGVtIGFzIGx2YWx1ZXMsIHdoaWNoIGlzIGludmFsaWQuIFRvIHdvcmsgYXJvdW5kIHRoaXMsIHVz
ZSB1bmFyeSAiKyIgdG8gbWFrZSB0aGUgcGFyYW1ldGVyIGFuIHJ2YWx1ZS4KICAgICAvLyBTZWUg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTU5MjYxIGZvciBtb3JlIGRl
dGFpbHMKLSAgICBtYXAoKS0+c2V0KHN0ZDo6bWFrZV9wYWlyKHN0cnVjdHVyZS0+bV90cmFuc2l0
aW9uUHJvcGVydHlOYW1lLmdldCgpLCArc3RydWN0dXJlLT50cmFuc2l0aW9uUHJvcGVydHlBdHRy
aWJ1dGVzKCkpLCBzdHJ1Y3R1cmUpOworICAgIG1hcCgpLT5zZXQoc3RkOjptYWtlX3R1cGxlKHN0
cnVjdHVyZS0+bV90cmFuc2l0aW9uUHJvcGVydHlOYW1lLmdldCgpLCArc3RydWN0dXJlLT50cmFu
c2l0aW9uUHJvcGVydHlBdHRyaWJ1dGVzKCksICFzdHJ1Y3R1cmUtPmlzUHJvcGVydHlEZWxldGlv
blRyYW5zaXRpb24oKSksIHN0cnVjdHVyZSk7CiB9CiAKIHZvaWQgU3RydWN0dXJlOjpkdW1wU3Rh
dGlzdGljcygpCkBAIC0yMDAsNyArMjAwLDggQEAgU3RydWN0dXJlOjpTdHJ1Y3R1cmUoVk0mIHZt
LCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1ZhbHVlIHByb3RvdHlwZSwgY28KICAg
ICBzZXRTdGF0aWNQcm9wZXJ0aWVzUmVpZmllZChmYWxzZSk7CiAgICAgc2V0VHJhbnNpdGlvbldh
dGNocG9pbnRJc0xpa2VseVRvQmVGaXJlZChmYWxzZSk7CiAgICAgc2V0SGFzQmVlbkRpY3Rpb25h
cnkoZmFsc2UpOwotICAgIHNldElzQWRkaW5nUHJvcGVydHlGb3JUcmFuc2l0aW9uKGZhbHNlKTsK
KyAgICBzZXRQcm90ZWN0UHJvcGVydHlUYWJsZVdoaWxlVHJhbnNpdGlvbmluZyhmYWxzZSk7Cisg
ICAgc2V0SXNQcm9wZXJ0eURlbGV0aW9uVHJhbnNpdGlvbihmYWxzZSk7CiAgICAgc2V0VHJhbnNp
dGlvbk9mZnNldCh2bSwgaW52YWxpZE9mZnNldCk7CiAgICAgc2V0TWF4T2Zmc2V0KHZtLCBpbnZh
bGlkT2Zmc2V0KTsKICAKQEAgLTIzNiw3ICsyMzcsOCBAQCBTdHJ1Y3R1cmU6OlN0cnVjdHVyZShW
TSYgdm0pCiAgICAgc2V0U3RhdGljUHJvcGVydGllc1JlaWZpZWQoZmFsc2UpOwogICAgIHNldFRy
YW5zaXRpb25XYXRjaHBvaW50SXNMaWtlbHlUb0JlRmlyZWQoZmFsc2UpOwogICAgIHNldEhhc0Jl
ZW5EaWN0aW9uYXJ5KGZhbHNlKTsKLSAgICBzZXRJc0FkZGluZ1Byb3BlcnR5Rm9yVHJhbnNpdGlv
bihmYWxzZSk7CisgICAgc2V0UHJvdGVjdFByb3BlcnR5VGFibGVXaGlsZVRyYW5zaXRpb25pbmco
ZmFsc2UpOworICAgIHNldElzUHJvcGVydHlEZWxldGlvblRyYW5zaXRpb24oZmFsc2UpOwogICAg
IHNldFRyYW5zaXRpb25PZmZzZXQodm0sIGludmFsaWRPZmZzZXQpOwogICAgIHNldE1heE9mZnNl
dCh2bSwgaW52YWxpZE9mZnNldCk7CiAgCkBAIC0yNzIsNyArMjc0LDggQEAgU3RydWN0dXJlOjpT
dHJ1Y3R1cmUoVk0mIHZtLCBTdHJ1Y3R1cmUqIHByZXZpb3VzLCBEZWZlcnJlZFN0cnVjdHVyZVRy
YW5zaXRpb25XYXQKICAgICBzZXREaWRUcmFuc2l0aW9uKHRydWUpOwogICAgIHNldFN0YXRpY1By
b3BlcnRpZXNSZWlmaWVkKHByZXZpb3VzLT5zdGF0aWNQcm9wZXJ0aWVzUmVpZmllZCgpKTsKICAg
ICBzZXRIYXNCZWVuRGljdGlvbmFyeShwcmV2aW91cy0+aGFzQmVlbkRpY3Rpb25hcnkoKSk7Ci0g
ICAgc2V0SXNBZGRpbmdQcm9wZXJ0eUZvclRyYW5zaXRpb24oZmFsc2UpOworICAgIHNldFByb3Rl
Y3RQcm9wZXJ0eVRhYmxlV2hpbGVUcmFuc2l0aW9uaW5nKGZhbHNlKTsKKyAgICBzZXRJc1Byb3Bl
cnR5RGVsZXRpb25UcmFuc2l0aW9uKGZhbHNlKTsKICAgICBzZXRUcmFuc2l0aW9uT2Zmc2V0KHZt
LCBpbnZhbGlkT2Zmc2V0KTsKICAgICBzZXRNYXhPZmZzZXQodm0sIGludmFsaWRPZmZzZXQpOwog
IApAQCAtMzU2LDcgKzM1OSw3IEBAIHZvaWQgU3RydWN0dXJlOjpmaW5kU3RydWN0dXJlc0FuZE1h
cEZvck1hdGVyaWFsaXphdGlvbihWZWN0b3I8U3RydWN0dXJlKiwgOD4mIHN0CiBQcm9wZXJ0eVRh
YmxlKiBTdHJ1Y3R1cmU6Om1hdGVyaWFsaXplUHJvcGVydHlUYWJsZShWTSYgdm0sIGJvb2wgc2V0
UHJvcGVydHlUYWJsZSkKIHsKICAgICBBU1NFUlQoc3RydWN0dXJlKHZtKS0+Y2xhc3NJbmZvKCkg
PT0gaW5mbygpKTsKLSAgICBBU1NFUlQoIWlzQWRkaW5nUHJvcGVydHlGb3JUcmFuc2l0aW9uKCkp
OworICAgIEFTU0VSVCghcHJvdGVjdFByb3BlcnR5VGFibGVXaGlsZVRyYW5zaXRpb25pbmcoKSk7
CiAgICAgCiAgICAgRGVmZXJHQyBkZWZlckdDKHZtLmhlYXApOwogICAgIApAQCAtMzg0LDEwICsz
ODcsMTkgQEAgUHJvcGVydHlUYWJsZSogU3RydWN0dXJlOjptYXRlcmlhbGl6ZVByb3BlcnR5VGFi
bGUoVk0mIHZtLCBib29sIHNldFByb3BlcnR5VGFibGUKICAgICAgICAgc3RydWN0dXJlID0gc3Ry
dWN0dXJlc1tpXTsKICAgICAgICAgaWYgKCFzdHJ1Y3R1cmUtPm1fdHJhbnNpdGlvblByb3BlcnR5
TmFtZSkKICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICBBU1NFUlQoaSA9PSBzdHJ1Y3R1
cmVzLnNpemUoKSAtIDEgfHwgc3RydWN0dXJlLT5tYXhPZmZzZXQoKSA+IHN0cnVjdHVyZXNbaSAr
IDFdLT5tYXhPZmZzZXQoKSk7CisgICAgICAgIGlmIChzdHJ1Y3R1cmUtPmlzUHJvcGVydHlEZWxl
dGlvblRyYW5zaXRpb24oKSkgeworICAgICAgICAgICAgYXV0byBpdGVtID0gdGFibGUtPmZpbmQo
c3RydWN0dXJlLT5tX3RyYW5zaXRpb25Qcm9wZXJ0eU5hbWUuZ2V0KCkpOworICAgICAgICAgICAg
QVNTRVJUKGl0ZW0uZmlyc3QpOworICAgICAgICAgICAgdGFibGUtPnJlbW92ZShpdGVtKTsKKyAg
ICAgICAgICAgIHRhYmxlLT5hZGREZWxldGVkT2Zmc2V0KHN0cnVjdHVyZS0+dHJhbnNpdGlvbk9m
ZnNldCgpKTsKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CiAgICAgICAgIFByb3Bl
cnR5TWFwRW50cnkgZW50cnkoc3RydWN0dXJlLT5tX3RyYW5zaXRpb25Qcm9wZXJ0eU5hbWUuZ2V0
KCksIHN0cnVjdHVyZS0+dHJhbnNpdGlvbk9mZnNldCgpLCBzdHJ1Y3R1cmUtPnRyYW5zaXRpb25Q
cm9wZXJ0eUF0dHJpYnV0ZXMoKSk7Ci0gICAgICAgIGF1dG8gbWF4T2Zmc2V0ID0gdGhpcy0+bWF4
T2Zmc2V0KCk7Ci0gICAgICAgIHRhYmxlLT5hZGQoZW50cnksIG1heE9mZnNldCwgUHJvcGVydHlU
YWJsZTo6UHJvcGVydHlPZmZzZXRNdXN0Tm90Q2hhbmdlKTsKKyAgICAgICAgYXV0byBuZXh0T2Zm
c2V0ID0gdGFibGUtPm5leHRPZmZzZXQoc3RydWN0dXJlLT5pbmxpbmVDYXBhY2l0eSgpKTsKKyAg
ICAgICAgQVNTRVJUX1VOVVNFRChuZXh0T2Zmc2V0LCBuZXh0T2Zmc2V0ID09IHN0cnVjdHVyZS0+
dHJhbnNpdGlvbk9mZnNldCgpKTsKKyAgICAgICAgYXV0byByZXN1bHQgPSB0YWJsZS0+YWRkKGVu
dHJ5KTsKKyAgICAgICAgQVNTRVJUX1VOVVNFRChyZXN1bHQsIHJlc3VsdC5zZWNvbmQpOworICAg
ICAgICBBU1NFUlRfVU5VU0VEKHJlc3VsdCwgcmVzdWx0LmZpcnN0LmZpcnN0LT5vZmZzZXQgPT0g
bmV4dE9mZnNldCk7CiAgICAgfQogICAgIAogICAgIGNoZWNrT2Zmc2V0Q29uc2lzdGVuY3koCkBA
IC00MTAsNyArNDIyLDggQEAgU3RydWN0dXJlKiBTdHJ1Y3R1cmU6OmFkZFByb3BlcnR5VHJhbnNp
dGlvblRvRXhpc3RpbmdTdHJ1Y3R1cmVJbXBsKFN0cnVjdHVyZSogc3QKICAgICBBU1NFUlQoIXN0
cnVjdHVyZS0+aXNEaWN0aW9uYXJ5KCkpOwogICAgIEFTU0VSVChzdHJ1Y3R1cmUtPmlzT2JqZWN0
KCkpOwogCi0gICAgaWYgKFN0cnVjdHVyZSogZXhpc3RpbmdUcmFuc2l0aW9uID0gc3RydWN0dXJl
LT5tX3RyYW5zaXRpb25UYWJsZS5nZXQodWlkLCBhdHRyaWJ1dGVzKSkgeworICAgIGNvbnN0ZXhw
ciBib29sIGlzQWRkaXRpb24gPSB0cnVlOworICAgIGlmIChTdHJ1Y3R1cmUqIGV4aXN0aW5nVHJh
bnNpdGlvbiA9IHN0cnVjdHVyZS0+bV90cmFuc2l0aW9uVGFibGUuZ2V0KHVpZCwgYXR0cmlidXRl
cywgaXNBZGRpdGlvbikpIHsKICAgICAgICAgdmFsaWRhdGVPZmZzZXQoZXhpc3RpbmdUcmFuc2l0
aW9uLT50cmFuc2l0aW9uT2Zmc2V0KCksIGV4aXN0aW5nVHJhbnNpdGlvbi0+aW5saW5lQ2FwYWNp
dHkoKSk7CiAgICAgICAgIG9mZnNldCA9IGV4aXN0aW5nVHJhbnNpdGlvbi0+dHJhbnNpdGlvbk9m
ZnNldCgpOwogICAgICAgICByZXR1cm4gZXhpc3RpbmdUcmFuc2l0aW9uOwpAQCAtNDg0LDcgKzQ5
Nyw2IEBAIFN0cnVjdHVyZSogU3RydWN0dXJlOjphZGROZXdQcm9wZXJ0eVRyYW5zaXRpb24oVk0m
IHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgUHJvCiAgICAgICAgIFN0cnVjdHVyZSogdHJhbnNp
dGlvbiA9IHRvQ2FjaGVhYmxlRGljdGlvbmFyeVRyYW5zaXRpb24odm0sIHN0cnVjdHVyZSwgZGVm
ZXJyZWQpOwogICAgICAgICBBU1NFUlQoc3RydWN0dXJlICE9IHRyYW5zaXRpb24pOwogICAgICAg
ICBvZmZzZXQgPSB0cmFuc2l0aW9uLT5hZGQodm0sIHByb3BlcnR5TmFtZSwgYXR0cmlidXRlcyk7
Ci0gICAgICAgIHRyYW5zaXRpb24tPnNldFRyYW5zaXRpb25PZmZzZXQodm0sIG9mZnNldCk7CiAg
ICAgICAgIHJldHVybiB0cmFuc2l0aW9uOwogICAgIH0KICAgICAKQEAgLTUwMCwxMCArNTEyLDEw
IEBAIFN0cnVjdHVyZSogU3RydWN0dXJlOjphZGROZXdQcm9wZXJ0eVRyYW5zaXRpb24oVk0mIHZt
LCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgUHJvCiAgICAgLy8gSG9sZGluZyB0aGUgbG9jayBlbnN1
cmVzIHRoYXQgd2UgZWl0aGVyIGRvIHRoaXMgYmVmb3JlIHRoZSBHQyBzdGFydHMgc2Nhbm5pbmcg
dGhlIHN0cnVjdHVyZSwgaW4KICAgICAvLyB3aGljaCBjYXNlIHRoZSBHQyB3aWxsIG5vdCBibG93
IHRoZSB0YWJsZSBhd2F5LCBvciB3ZSBkbyBpdCBhZnRlciB0aGUgR0MgYWxyZWFkeSByYW4gaW4g
d2hpY2gKICAgICAvLyBjYXNlIGFsbCBpcyB3ZWxsLiAgSWYgaXQgd2Fzbid0IGZvciB0aGUgbG9j
aywgdGhlIEdDIHdvdWxkIGhhdmUgVE9DVE9VOiBpZiBjb3VsZCByZWFkCi0gICAgLy8gaXNBZGRp
bmdQcm9wZXJ0eUZvclRyYW5zaXRpb24gYmVmb3JlIHdlIHNldCBpdCB0byB0cnVlLCBhbmQgdGhl
biBibG93IHRoZSB0YWJsZSBhd2F5IGFmdGVyLgorICAgIC8vIHByb3RlY3RQcm9wZXJ0eVRhYmxl
V2hpbGVUcmFuc2l0aW9uaW5nIGJlZm9yZSB3ZSBzZXQgaXQgdG8gdHJ1ZSwgYW5kIHRoZW4gYmxv
dyB0aGUgdGFibGUgYXdheSBhZnRlci4KICAgICB7CiAgICAgICAgIENvbmN1cnJlbnRKU0xvY2tl
ciBsb2NrZXIodHJhbnNpdGlvbi0+bV9sb2NrKTsKLSAgICAgICAgdHJhbnNpdGlvbi0+c2V0SXNB
ZGRpbmdQcm9wZXJ0eUZvclRyYW5zaXRpb24odHJ1ZSk7CisgICAgICAgIHRyYW5zaXRpb24tPnNl
dFByb3RlY3RQcm9wZXJ0eVRhYmxlV2hpbGVUcmFuc2l0aW9uaW5nKHRydWUpOwogICAgIH0KIAog
ICAgIHRyYW5zaXRpb24tPm1fYmxvYi5zZXRJbmRleGluZ01vZGVJbmNsdWRpbmdIaXN0b3J5KHN0
cnVjdHVyZS0+aW5kZXhpbmdNb2RlSW5jbHVkaW5nSGlzdG9yeSgpICYgfkNvcHlPbldyaXRlKTsK
QEAgLTUxOCwxMiArNTMwLDExIEBAIFN0cnVjdHVyZSogU3RydWN0dXJlOjphZGROZXdQcm9wZXJ0
eVRyYW5zaXRpb24oVk0mIHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgUHJvCiAgICAgLy8gTm93
IHRoYXQgZXZlcnl0aGluZyBpcyBmaW5lIHdpdGggdGhlIG5ldyBzdHJ1Y3R1cmUncyBib29ra2Vl
cGluZywgdGhlIEdDIGlzIGZyZWUgdG8gYmxvdyB0aGUKICAgICAvLyB0YWJsZSBhd2F5IGlmIGl0
IHdhbnRzLiBXZSBjYW4gbm93IHJlYnVpbGQgaXQgZmluZS4KICAgICBXVEY6OnN0b3JlU3RvcmVG
ZW5jZSgpOwotICAgIHRyYW5zaXRpb24tPnNldElzQWRkaW5nUHJvcGVydHlGb3JUcmFuc2l0aW9u
KGZhbHNlKTsKKyAgICB0cmFuc2l0aW9uLT5zZXRQcm90ZWN0UHJvcGVydHlUYWJsZVdoaWxlVHJh
bnNpdGlvbmluZyhmYWxzZSk7CiAKICAgICBjaGVja09mZnNldCh0cmFuc2l0aW9uLT50cmFuc2l0
aW9uT2Zmc2V0KCksIHRyYW5zaXRpb24tPmlubGluZUNhcGFjaXR5KCkpOwogICAgIHsKLSAgICAg
ICAgQ29uY3VycmVudEpTTG9ja2VyIGxvY2tlcihzdHJ1Y3R1cmUtPm1fbG9jayk7Ci0gICAgICAg
IERlZmVyR0MgZGVmZXJHQyh2bS5oZWFwKTsKKyAgICAgICAgR0NTYWZlQ29uY3VycmVudEpTTG9j
a2VyIGxvY2tlcihzdHJ1Y3R1cmUtPm1fbG9jaywgdm0uaGVhcCk7CiAgICAgICAgIHN0cnVjdHVy
ZS0+bV90cmFuc2l0aW9uVGFibGUuYWRkKHZtLCB0cmFuc2l0aW9uKTsKICAgICB9CiAgICAgdHJh
bnNpdGlvbi0+Y2hlY2tPZmZzZXRDb25zaXN0ZW5jeSgpOwpAQCAtNTMxLDI3ICs1NDIsODUgQEAg
U3RydWN0dXJlKiBTdHJ1Y3R1cmU6OmFkZE5ld1Byb3BlcnR5VHJhbnNpdGlvbihWTSYgdm0sIFN0
cnVjdHVyZSogc3RydWN0dXJlLCBQcm8KICAgICByZXR1cm4gdHJhbnNpdGlvbjsKIH0KIAotU3Ry
dWN0dXJlKiBTdHJ1Y3R1cmU6OnJlbW92ZVByb3BlcnR5VHJhbnNpdGlvbihWTSYgdm0sIFN0cnVj
dHVyZSogc3RydWN0dXJlLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBQcm9wZXJ0eU9mZnNl
dCYgb2Zmc2V0KQotewotICAgIC8vIE5PVEU6IFRoZXJlIGFyZSBzb21lIGdvb2QgcmVhc29ucyB3
aHkgdGhpcyBnb2VzIGRpcmVjdGx5IHRvIHVuY2FjaGVhYmxlIGRpY3Rpb25hcnkgcmF0aGVyIHRo
YW4KLSAgICAvLyBjYWNoaW5nIHRoZSByZW1vdmFsLiBXZSBjYW4gZml4IGFsbCBvZiB0aGVzZSB0
aGluZ3MsIGJ1dCB3ZSBtdXN0IHJlbWVtYmVyIHRvIGRvIHNvLCBpZiB3ZSBldmVyIHRyeQotICAg
IC8vIHRvIG9wdGltaXplIHRoaXMgY2FzZS4KLSAgICAvLwotICAgIC8vIC0gQ2FjaGVkIHRyYW5z
aXRpb25zIHVzdWFsbHkgc3RlYWwgdGhlIHByb3BlcnR5IHRhYmxlLCBhbmQgYXNzdW1lIHRoYXQg
dGhpcyBpcyBwb3NzaWJsZSBiZWNhdXNlIHRoZXkKLSAgICAvLyAgIGNhbiBqdXN0IHJlYnVpbGQg
dGhlIHRhYmxlIGJ5IGxvb2tpbmcgYXQgcGFzdCB0cmFuc2l0aW9ucy4gVGhhdCBjb2RlIGFzc3Vt
ZXMgdGhhdCB0aGUgdGFibGUgb25seQotICAgIC8vICAgZ3JldyBhbmQgbmV2ZXIgc2hyYW5rLiBU
byBzdXBwb3J0IHJlbW92YWxzLCB3ZSdkIGhhdmUgdG8gY2hhbmdlIHRoZSBwcm9wZXJ0eSB0YWJs
ZSBtYXRlcmlhbGl6YXRpb24KLSAgICAvLyAgIGNvZGUgdG8gaGFuZGxlIGRlbGV0aW9ucy4gQWxz
bywgd2UgaGF2ZSBsb2dpYyB0byBnZXQgdGhlIGxpc3Qgb2YgcHJvcGVydGllcyBvbiBhIHN0cnVj
dHVyZSB0aGF0Ci0gICAgLy8gICBsYWNrcyBhIHByb3BlcnR5IHRhYmxlIGJ5IGp1c3QgbG9va2lu
ZyBiYWNrIHRocm91Z2ggdGhlIHNldCBvZiB0cmFuc2l0aW9ucyBzaW5jZSB0aGUgbGFzdAotICAg
IC8vICAgc3RydWN0dXJlIHRoYXQgaGFkIGEgcGlubmVkIHRhYmxlLiBUaGF0IGxvZ2ljIHdvdWxk
IGFsc28gaGF2ZSB0byBiZSBjaGFuZ2VkIHRvIGhhbmRsZSBjYWNoZWQKLSAgICAvLyAgIHJlbW92
YWxzLgotICAgIC8vCitTdHJ1Y3R1cmUqIFN0cnVjdHVyZTo6cmVtb3ZlUHJvcGVydHlUcmFuc2l0
aW9uKFZNJiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5h
bWUsIFByb3BlcnR5T2Zmc2V0JiBvZmZzZXQsIERlZmVycmVkU3RydWN0dXJlVHJhbnNpdGlvbldh
dGNocG9pbnRGaXJlKiBkZWZlcnJlZCkKK3sKKyAgICBTdHJ1Y3R1cmUqIG5ld1N0cnVjdHVyZSA9
IHJlbW92ZVByb3BlcnR5VHJhbnNpdGlvbkZyb21FeGlzdGluZ1N0cnVjdHVyZSgKKyAgICAgICAg
dm0sIHN0cnVjdHVyZSwgcHJvcGVydHlOYW1lLCBvZmZzZXQsIGRlZmVycmVkKTsKKyAgICBpZiAo
bmV3U3RydWN0dXJlKQorICAgICAgICByZXR1cm4gbmV3U3RydWN0dXJlOworCisgICAgcmV0dXJu
IHJlbW92ZU5ld1Byb3BlcnR5VHJhbnNpdGlvbigKKyAgICAgICAgdm0sIHN0cnVjdHVyZSwgcHJv
cGVydHlOYW1lLCBvZmZzZXQsIGRlZmVycmVkKTsKK30KKworU3RydWN0dXJlKiBTdHJ1Y3R1cmU6
OnJlbW92ZVByb3BlcnR5VHJhbnNpdGlvbkZyb21FeGlzdGluZ1N0cnVjdHVyZShWTSYgdm0sIFN0
cnVjdHVyZSogc3RydWN0dXJlLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBQcm9wZXJ0eU9m
ZnNldCYgb2Zmc2V0LCBEZWZlcnJlZFN0cnVjdHVyZVRyYW5zaXRpb25XYXRjaHBvaW50RmlyZSop
Cit7CisgICAgQVNTRVJUKCFpc0NvbXBpbGF0aW9uVGhyZWFkKCkpOwogICAgIEFTU0VSVCghc3Ry
dWN0dXJlLT5pc1VuY2FjaGVhYmxlRGljdGlvbmFyeSgpKTsKKyAgICBBU1NFUlQoc3RydWN0dXJl
LT5pc09iamVjdCgpKTsKKworICAgIHVuc2lnbmVkIGF0dHJpYnV0ZXM7CisgICAgc3RydWN0dXJl
LT5nZXQodm0sIHByb3BlcnR5TmFtZSwgYXR0cmlidXRlcyk7CisKKyAgICBjb25zdGV4cHIgYm9v
bCBpc0FkZGl0aW9uID0gZmFsc2U7CisgICAgaWYgKFN0cnVjdHVyZSogZXhpc3RpbmdUcmFuc2l0
aW9uID0gc3RydWN0dXJlLT5tX3RyYW5zaXRpb25UYWJsZS5nZXQocHJvcGVydHlOYW1lLnVpZCgp
LCBhdHRyaWJ1dGVzLCBpc0FkZGl0aW9uKSkgeworICAgICAgICB2YWxpZGF0ZU9mZnNldChleGlz
dGluZ1RyYW5zaXRpb24tPnRyYW5zaXRpb25PZmZzZXQoKSwgZXhpc3RpbmdUcmFuc2l0aW9uLT5p
bmxpbmVDYXBhY2l0eSgpKTsKKyAgICAgICAgb2Zmc2V0ID0gZXhpc3RpbmdUcmFuc2l0aW9uLT50
cmFuc2l0aW9uT2Zmc2V0KCk7CisgICAgICAgIHJldHVybiBleGlzdGluZ1RyYW5zaXRpb247Cisg
ICAgfQogCi0gICAgU3RydWN0dXJlKiB0cmFuc2l0aW9uID0gdG9VbmNhY2hlYWJsZURpY3Rpb25h
cnlUcmFuc2l0aW9uKHZtLCBzdHJ1Y3R1cmUpOworICAgIHJldHVybiBudWxscHRyOworfQogCi0g
ICAgb2Zmc2V0ID0gdHJhbnNpdGlvbi0+cmVtb3ZlKHByb3BlcnR5TmFtZSk7CitTdHJ1Y3R1cmUq
IFN0cnVjdHVyZTo6cmVtb3ZlTmV3UHJvcGVydHlUcmFuc2l0aW9uKFZNJiB2bSwgU3RydWN0dXJl
KiBzdHJ1Y3R1cmUsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIFByb3BlcnR5T2Zmc2V0JiBv
ZmZzZXQsIERlZmVycmVkU3RydWN0dXJlVHJhbnNpdGlvbldhdGNocG9pbnRGaXJlKiBkZWZlcnJl
ZCkKK3sKKyAgICBBU1NFUlQoIXN0cnVjdHVyZS0+aXNVbmNhY2hlYWJsZURpY3Rpb25hcnkoKSk7
CisgICAgQVNTRVJUKHN0cnVjdHVyZS0+aXNPYmplY3QoKSk7CisgICAgQVNTRVJUKCFTdHJ1Y3R1
cmU6OnJlbW92ZVByb3BlcnR5VHJhbnNpdGlvbkZyb21FeGlzdGluZ1N0cnVjdHVyZSh2bSwgc3Ry
dWN0dXJlLCBwcm9wZXJ0eU5hbWUsIG9mZnNldCwgZGVmZXJyZWQpKTsKKworICAgIGludCB0cmFu
c2l0aW9uQ291bnQgPSAwOworICAgIGZvciAoYXV0byogcyA9IHN0cnVjdHVyZTsgcyAmJiB0cmFu
c2l0aW9uQ291bnQgPD0gc19tYXhUcmFuc2l0aW9uTGVuZ3RoOyBzID0gcy0+cHJldmlvdXNJRCgp
KQorICAgICAgICArK3RyYW5zaXRpb25Db3VudDsKIAorICAgIGlmICh0cmFuc2l0aW9uQ291bnQg
PiBzX21heFRyYW5zaXRpb25MZW5ndGgpIHsKKyAgICAgICAgQVNTRVJUKCFpc0NvcHlPbldyaXRl
KHN0cnVjdHVyZS0+aW5kZXhpbmdNb2RlKCkpKTsKKyAgICAgICAgU3RydWN0dXJlKiB0cmFuc2l0
aW9uID0gdG9VbmNhY2hlYWJsZURpY3Rpb25hcnlUcmFuc2l0aW9uKHZtLCBzdHJ1Y3R1cmUsIGRl
ZmVycmVkKTsKKyAgICAgICAgQVNTRVJUKHN0cnVjdHVyZSAhPSB0cmFuc2l0aW9uKTsKKyAgICAg
ICAgb2Zmc2V0ID0gdHJhbnNpdGlvbi0+cmVtb3ZlKHZtLCBwcm9wZXJ0eU5hbWUpOworICAgICAg
ICByZXR1cm4gdHJhbnNpdGlvbjsKKyAgICB9CisKKyAgICBTdHJ1Y3R1cmUqIHRyYW5zaXRpb24g
PSBjcmVhdGUodm0sIHN0cnVjdHVyZSwgZGVmZXJyZWQpOworICAgIHRyYW5zaXRpb24tPm1fY2Fj
aGVkUHJvdG90eXBlQ2hhaW4uc2V0TWF5QmVOdWxsKHZtLCB0cmFuc2l0aW9uLCBzdHJ1Y3R1cmUt
Pm1fY2FjaGVkUHJvdG90eXBlQ2hhaW4uZ2V0KCkpOworCisgICAgLy8gV2hpbGUgd2UgYXJlIGRl
bGV0aW5nIHRoZSBwcm9wZXJ0eSwgd2UgbmVlZCB0byBtYWtlIHN1cmUgdGhlIHRhYmxlIGlzIG5v
dCBjbGVhcmVkLgorICAgIHsKKyAgICAgICAgQ29uY3VycmVudEpTTG9ja2VyIGxvY2tlcih0cmFu
c2l0aW9uLT5tX2xvY2spOworICAgICAgICB0cmFuc2l0aW9uLT5zZXRQcm90ZWN0UHJvcGVydHlU
YWJsZVdoaWxlVHJhbnNpdGlvbmluZyh0cnVlKTsKKyAgICB9CisKKyAgICB0cmFuc2l0aW9uLT5t
X2Jsb2Iuc2V0SW5kZXhpbmdNb2RlSW5jbHVkaW5nSGlzdG9yeShzdHJ1Y3R1cmUtPmluZGV4aW5n
TW9kZUluY2x1ZGluZ0hpc3RvcnkoKSAmIH5Db3B5T25Xcml0ZSk7CisgICAgdHJhbnNpdGlvbi0+
bV90cmFuc2l0aW9uUHJvcGVydHlOYW1lID0gcHJvcGVydHlOYW1lLnVpZCgpOworICAgIHRyYW5z
aXRpb24tPnNldFByb3BlcnR5VGFibGUodm0sIHN0cnVjdHVyZS0+dGFrZVByb3BlcnR5VGFibGVP
ckNsb25lSWZQaW5uZWQodm0pKTsKKyAgICB0cmFuc2l0aW9uLT5zZXRNYXhPZmZzZXQodm0sIHN0
cnVjdHVyZS0+bWF4T2Zmc2V0KCkpOworICAgIHRyYW5zaXRpb24tPnNldElzUHJvcGVydHlEZWxl
dGlvblRyYW5zaXRpb24odHJ1ZSk7CisKKyAgICBvZmZzZXQgPSB0cmFuc2l0aW9uLT5yZW1vdmUo
dm0sIHByb3BlcnR5TmFtZSk7CisgICAgQVNTRVJUKG9mZnNldCAhPSBpbnZhbGlkT2Zmc2V0KTsK
KyAgICB0cmFuc2l0aW9uLT5zZXRUcmFuc2l0aW9uT2Zmc2V0KHZtLCBvZmZzZXQpOworCisgICAg
Ly8gTm93IHRoYXQgZXZlcnl0aGluZyBpcyBmaW5lIHdpdGggdGhlIG5ldyBzdHJ1Y3R1cmUncyBi
b29ra2VlcGluZywgdGhlIEdDIGlzIGZyZWUgdG8gYmxvdyB0aGUKKyAgICAvLyB0YWJsZSBhd2F5
IGlmIGl0IHdhbnRzLiBXZSBjYW4gbm93IHJlYnVpbGQgaXQgZmluZS4KKyAgICBXVEY6OnN0b3Jl
U3RvcmVGZW5jZSgpOworICAgIHRyYW5zaXRpb24tPnNldFByb3RlY3RQcm9wZXJ0eVRhYmxlV2hp
bGVUcmFuc2l0aW9uaW5nKGZhbHNlKTsKKworICAgIGNoZWNrT2Zmc2V0KHRyYW5zaXRpb24tPnRy
YW5zaXRpb25PZmZzZXQoKSwgdHJhbnNpdGlvbi0+aW5saW5lQ2FwYWNpdHkoKSk7CisgICAgewor
ICAgICAgICBHQ1NhZmVDb25jdXJyZW50SlNMb2NrZXIgbG9ja2VyKHN0cnVjdHVyZS0+bV9sb2Nr
LCB2bS5oZWFwKTsKKyAgICAgICAgc3RydWN0dXJlLT5tX3RyYW5zaXRpb25UYWJsZS5hZGQodm0s
IHRyYW5zaXRpb24pOworICAgIH0KICAgICB0cmFuc2l0aW9uLT5jaGVja09mZnNldENvbnNpc3Rl
bmN5KCk7CisgICAgc3RydWN0dXJlLT5jaGVja09mZnNldENvbnNpc3RlbmN5KCk7CiAgICAgcmV0
dXJuIHRyYW5zaXRpb247CiB9CiAKQEAgLTYxNCw5ICs2ODMsOSBAQCBTdHJ1Y3R1cmUqIFN0cnVj
dHVyZTo6dG9DYWNoZWFibGVEaWN0aW9uYXJ5VHJhbnNpdGlvbihWTSYgdm0sIFN0cnVjdHVyZSog
c3RydWN0dQogICAgIHJldHVybiB0b0RpY3Rpb25hcnlUcmFuc2l0aW9uKHZtLCBzdHJ1Y3R1cmUs
IENhY2hlZERpY3Rpb25hcnlLaW5kLCBkZWZlcnJlZCk7CiB9CiAKLVN0cnVjdHVyZSogU3RydWN0
dXJlOjp0b1VuY2FjaGVhYmxlRGljdGlvbmFyeVRyYW5zaXRpb24oVk0mIHZtLCBTdHJ1Y3R1cmUq
IHN0cnVjdHVyZSkKK1N0cnVjdHVyZSogU3RydWN0dXJlOjp0b1VuY2FjaGVhYmxlRGljdGlvbmFy
eVRyYW5zaXRpb24oVk0mIHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgRGVmZXJyZWRTdHJ1Y3R1
cmVUcmFuc2l0aW9uV2F0Y2hwb2ludEZpcmUqIGRlZmVycmVkKQogewotICAgIHJldHVybiB0b0Rp
Y3Rpb25hcnlUcmFuc2l0aW9uKHZtLCBzdHJ1Y3R1cmUsIFVuY2FjaGVkRGljdGlvbmFyeUtpbmQp
OworICAgIHJldHVybiB0b0RpY3Rpb25hcnlUcmFuc2l0aW9uKHZtLCBzdHJ1Y3R1cmUsIFVuY2Fj
aGVkRGljdGlvbmFyeUtpbmQsIGRlZmVycmVkKTsKIH0KIAogU3RydWN0dXJlKiBTdHJ1Y3R1cmU6
OnNlYWxUcmFuc2l0aW9uKFZNJiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUpCkBAIC02NTUsNyAr
NzI0LDggQEAgU3RydWN0dXJlKiBTdHJ1Y3R1cmU6Om5vblByb3BlcnR5VHJhbnNpdGlvblNsb3co
Vk0mIHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgTm8KICAgICBJbmRleGluZ1R5cGUgaW5kZXhp
bmdNb2RlSW5jbHVkaW5nSGlzdG9yeSA9IG5ld0luZGV4aW5nVHlwZShzdHJ1Y3R1cmUtPmluZGV4
aW5nTW9kZUluY2x1ZGluZ0hpc3RvcnkoKSwgdHJhbnNpdGlvbktpbmQpOwogICAgIAogICAgIFN0
cnVjdHVyZSogZXhpc3RpbmdUcmFuc2l0aW9uOwotICAgIGlmICghc3RydWN0dXJlLT5pc0RpY3Rp
b25hcnkoKSAmJiAoZXhpc3RpbmdUcmFuc2l0aW9uID0gc3RydWN0dXJlLT5tX3RyYW5zaXRpb25U
YWJsZS5nZXQoMCwgYXR0cmlidXRlcykpKSB7CisgICAgY29uc3RleHByIGJvb2wgaXNBZGRpdGlv
biA9IHRydWU7CisgICAgaWYgKCFzdHJ1Y3R1cmUtPmlzRGljdGlvbmFyeSgpICYmIChleGlzdGlu
Z1RyYW5zaXRpb24gPSBzdHJ1Y3R1cmUtPm1fdHJhbnNpdGlvblRhYmxlLmdldCgwLCBhdHRyaWJ1
dGVzLCBpc0FkZGl0aW9uKSkpIHsKICAgICAgICAgQVNTRVJUKGV4aXN0aW5nVHJhbnNpdGlvbi0+
dHJhbnNpdGlvblByb3BlcnR5QXR0cmlidXRlcygpID09IGF0dHJpYnV0ZXMpOwogICAgICAgICBB
U1NFUlQoZXhpc3RpbmdUcmFuc2l0aW9uLT5pbmRleGluZ01vZGVJbmNsdWRpbmdIaXN0b3J5KCkg
PT0gaW5kZXhpbmdNb2RlSW5jbHVkaW5nSGlzdG9yeSk7CiAgICAgICAgIHJldHVybiBleGlzdGlu
Z1RyYW5zaXRpb247CkBAIC05NzcsOSArMTA0NywxMSBAQCBQcm9wZXJ0eU9mZnNldCBTdHJ1Y3R1
cmU6OmFkZChWTSYgdm0sIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIHVuc2lnbmVkIGF0dHJp
YgogICAgICAgICB9KTsKIH0KIAotUHJvcGVydHlPZmZzZXQgU3RydWN0dXJlOjpyZW1vdmUoUHJv
cGVydHlOYW1lIHByb3BlcnR5TmFtZSkKK1Byb3BlcnR5T2Zmc2V0IFN0cnVjdHVyZTo6cmVtb3Zl
KFZNJiB2bSwgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSkKIHsKLSAgICByZXR1cm4gcmVtb3Zl
KHByb3BlcnR5TmFtZSwgW10gKGNvbnN0IENvbmN1cnJlbnRKU0xvY2tlciYsIFByb3BlcnR5T2Zm
c2V0KSB7IH0pOworICAgIHJldHVybiByZW1vdmU8U2hvdWxkUGluOjpObz4odm0sIHByb3BlcnR5
TmFtZSwgW3RoaXMsICZ2bV0gKGNvbnN0IEdDU2FmZUNvbmN1cnJlbnRKU0xvY2tlciYsIFByb3Bl
cnR5T2Zmc2V0LCBQcm9wZXJ0eU9mZnNldCBuZXdNYXhPZmZzZXQpIHsKKyAgICAgICAgc2V0TWF4
T2Zmc2V0KHZtLCBuZXdNYXhPZmZzZXQpOworICAgIH0pOwogfQogCiB2b2lkIFN0cnVjdHVyZTo6
Z2V0UHJvcGVydHlOYW1lc0Zyb21TdHJ1Y3R1cmUoVk0mIHZtLCBQcm9wZXJ0eU5hbWVBcnJheSYg
cHJvcGVydHlOYW1lcywgRW51bWVyYXRpb25Nb2RlIG1vZGUpCkBAIC0xMDU5LDcgKzExMzEsNyBA
QCB2b2lkIFN0cnVjdHVyZTo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9y
JiB2aXNpdG9yKQogICAgIH0KICAgICB2aXNpdG9yLmFwcGVuZCh0aGlzT2JqZWN0LT5tX3ByZXZp
b3VzT3JSYXJlRGF0YSk7CiAKLSAgICBpZiAodGhpc09iamVjdC0+aXNQaW5uZWRQcm9wZXJ0eVRh
YmxlKCkgfHwgdGhpc09iamVjdC0+aXNBZGRpbmdQcm9wZXJ0eUZvclRyYW5zaXRpb24oKSkgewor
ICAgIGlmICh0aGlzT2JqZWN0LT5pc1Bpbm5lZFByb3BlcnR5VGFibGUoKSB8fCB0aGlzT2JqZWN0
LT5wcm90ZWN0UHJvcGVydHlUYWJsZVdoaWxlVHJhbnNpdGlvbmluZygpKSB7CiAgICAgICAgIC8v
IE5PVEU6IFRoaXMgY2FuIGludGVybGVhdmUgaW4gcGluKCksIGluIHdoaWNoIGNhc2UgaXQgbWF5
IHNlZSBhIG51bGwgcHJvcGVydHkgdGFibGUuCiAgICAgICAgIC8vIFRoYXQncyBmaW5lLCBiZWNh
dXNlIHRoZW4gdGhlIGJhcnJpZXIgd2lsbCBmaXJlIGFuZCB3ZSB3aWxsIHNjYW4gdGhpcyBhZ2Fp
bi4KICAgICAgICAgdmlzaXRvci5hcHBlbmQodGhpc09iamVjdC0+bV9wcm9wZXJ0eVRhYmxlVW5z
YWZlKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVy
ZS5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlLmgKaW5kZXggZjg1
NWJhODYxMmI2OTMwMGVhMmVjMDFlZmE5NDAwNDM4ZmJlNDQ2ZS4uZmZlMzhkZGJkOTFhMzk0MmQ2
ODgyMGUwNjYzMDcyMzJkNGZjMDNkZiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvU3RydWN0dXJlLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
U3RydWN0dXJlLmgKQEAgLTE4OSwxMSArMTg5LDEzIEBAIHB1YmxpYzoKICAgICBKU19FWFBPUlRf
UFJJVkFURSBzdGF0aWMgU3RydWN0dXJlKiBhZGROZXdQcm9wZXJ0eVRyYW5zaXRpb24oVk0mLCBT
dHJ1Y3R1cmUqLCBQcm9wZXJ0eU5hbWUsIHVuc2lnbmVkIGF0dHJpYnV0ZXMsIFByb3BlcnR5T2Zm
c2V0JiwgUHV0UHJvcGVydHlTbG90OjpDb250ZXh0ID0gUHV0UHJvcGVydHlTbG90OjpVbmtub3du
Q29udGV4dCwgRGVmZXJyZWRTdHJ1Y3R1cmVUcmFuc2l0aW9uV2F0Y2hwb2ludEZpcmUqID0gbnVs
bHB0cik7CiAgICAgc3RhdGljIFN0cnVjdHVyZSogYWRkUHJvcGVydHlUcmFuc2l0aW9uVG9FeGlz
dGluZ1N0cnVjdHVyZUNvbmN1cnJlbnRseShTdHJ1Y3R1cmUqLCBVbmlxdWVkU3RyaW5nSW1wbCog
dWlkLCB1bnNpZ25lZCBhdHRyaWJ1dGVzLCBQcm9wZXJ0eU9mZnNldCYpOwogICAgIEpTX0VYUE9S
VF9QUklWQVRFIHN0YXRpYyBTdHJ1Y3R1cmUqIGFkZFByb3BlcnR5VHJhbnNpdGlvblRvRXhpc3Rp
bmdTdHJ1Y3R1cmUoU3RydWN0dXJlKiwgUHJvcGVydHlOYW1lLCB1bnNpZ25lZCBhdHRyaWJ1dGVz
LCBQcm9wZXJ0eU9mZnNldCYpOwotICAgIHN0YXRpYyBTdHJ1Y3R1cmUqIHJlbW92ZVByb3BlcnR5
VHJhbnNpdGlvbihWTSYsIFN0cnVjdHVyZSosIFByb3BlcnR5TmFtZSwgUHJvcGVydHlPZmZzZXQm
KTsKKyAgICBzdGF0aWMgU3RydWN0dXJlKiByZW1vdmVOZXdQcm9wZXJ0eVRyYW5zaXRpb24oVk0m
LCBTdHJ1Y3R1cmUqLCBQcm9wZXJ0eU5hbWUsIFByb3BlcnR5T2Zmc2V0JiwgRGVmZXJyZWRTdHJ1
Y3R1cmVUcmFuc2l0aW9uV2F0Y2hwb2ludEZpcmUqID0gbnVsbHB0cik7CisgICAgc3RhdGljIFN0
cnVjdHVyZSogcmVtb3ZlUHJvcGVydHlUcmFuc2l0aW9uKFZNJiwgU3RydWN0dXJlKiwgUHJvcGVy
dHlOYW1lLCBQcm9wZXJ0eU9mZnNldCYsIERlZmVycmVkU3RydWN0dXJlVHJhbnNpdGlvbldhdGNo
cG9pbnRGaXJlKiA9IG51bGxwdHIpOworICAgIHN0YXRpYyBTdHJ1Y3R1cmUqIHJlbW92ZVByb3Bl
cnR5VHJhbnNpdGlvbkZyb21FeGlzdGluZ1N0cnVjdHVyZShWTSYsIFN0cnVjdHVyZSosIFByb3Bl
cnR5TmFtZSwgUHJvcGVydHlPZmZzZXQmLCBEZWZlcnJlZFN0cnVjdHVyZVRyYW5zaXRpb25XYXRj
aHBvaW50RmlyZSogPSBudWxscHRyKTsKICAgICBzdGF0aWMgU3RydWN0dXJlKiBjaGFuZ2VQcm90
b3R5cGVUcmFuc2l0aW9uKFZNJiwgU3RydWN0dXJlKiwgSlNWYWx1ZSBwcm90b3R5cGUsIERlZmVy
cmVkU3RydWN0dXJlVHJhbnNpdGlvbldhdGNocG9pbnRGaXJlJik7CiAgICAgSlNfRVhQT1JUX1BS
SVZBVEUgc3RhdGljIFN0cnVjdHVyZSogYXR0cmlidXRlQ2hhbmdlVHJhbnNpdGlvbihWTSYsIFN0
cnVjdHVyZSosIFByb3BlcnR5TmFtZSwgdW5zaWduZWQgYXR0cmlidXRlcyk7CiAgICAgSlNfRVhQ
T1JUX1BSSVZBVEUgc3RhdGljIFN0cnVjdHVyZSogdG9DYWNoZWFibGVEaWN0aW9uYXJ5VHJhbnNp
dGlvbihWTSYsIFN0cnVjdHVyZSosIERlZmVycmVkU3RydWN0dXJlVHJhbnNpdGlvbldhdGNocG9p
bnRGaXJlKiA9IG51bGxwdHIpOwotICAgIHN0YXRpYyBTdHJ1Y3R1cmUqIHRvVW5jYWNoZWFibGVE
aWN0aW9uYXJ5VHJhbnNpdGlvbihWTSYsIFN0cnVjdHVyZSopOworICAgIHN0YXRpYyBTdHJ1Y3R1
cmUqIHRvVW5jYWNoZWFibGVEaWN0aW9uYXJ5VHJhbnNpdGlvbihWTSYsIFN0cnVjdHVyZSosIERl
ZmVycmVkU3RydWN0dXJlVHJhbnNpdGlvbldhdGNocG9pbnRGaXJlKiA9IG51bGxwdHIpOwogICAg
IEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyBTdHJ1Y3R1cmUqIHNlYWxUcmFuc2l0aW9uKFZNJiwg
U3RydWN0dXJlKik7CiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIFN0cnVjdHVyZSogZnJl
ZXplVHJhbnNpdGlvbihWTSYsIFN0cnVjdHVyZSopOwogICAgIHN0YXRpYyBTdHJ1Y3R1cmUqIHBy
ZXZlbnRFeHRlbnNpb25zVHJhbnNpdGlvbihWTSYsIFN0cnVjdHVyZSopOwpAQCAtNDQyLDEwICs0
NDQsNiBAQCBwdWJsaWM6CiAgICAgewogICAgICAgICByZXR1cm4gc3RkOjptaW48dW5zaWduZWQ+
KG1heE9mZnNldCgpICsgMSwgbV9pbmxpbmVDYXBhY2l0eSk7CiAgICAgfQotICAgIHVuc2lnbmVk
IHRvdGFsU3RvcmFnZVNpemUoKSBjb25zdAotICAgIHsKLSAgICAgICAgcmV0dXJuIG51bWJlck9m
U2xvdHNGb3JNYXhPZmZzZXQobWF4T2Zmc2V0KCksIG1faW5saW5lQ2FwYWNpdHkpOwotICAgIH0K
ICAgICB1bnNpZ25lZCB0b3RhbFN0b3JhZ2VDYXBhY2l0eSgpIGNvbnN0CiAgICAgewogICAgICAg
ICBBU1NFUlQoc3RydWN0dXJlKCktPmNsYXNzSW5mbygpID09IGluZm8oKSk7CkBAIC02OTMsOCAr
NjkxLDkgQEAgcHVibGljOgogICAgIERFRklORV9CSVRGSUVMRChib29sLCBkaWRXYXRjaEludGVy
bmFsUHJvcGVydGllcywgRGlkV2F0Y2hJbnRlcm5hbFByb3BlcnRpZXMsIDEsIDI1KTsKICAgICBE
RUZJTkVfQklURklFTEQoYm9vbCwgdHJhbnNpdGlvbldhdGNocG9pbnRJc0xpa2VseVRvQmVGaXJl
ZCwgVHJhbnNpdGlvbldhdGNocG9pbnRJc0xpa2VseVRvQmVGaXJlZCwgMSwgMjYpOwogICAgIERF
RklORV9CSVRGSUVMRChib29sLCBoYXNCZWVuRGljdGlvbmFyeSwgSGFzQmVlbkRpY3Rpb25hcnks
IDEsIDI3KTsKLSAgICBERUZJTkVfQklURklFTEQoYm9vbCwgaXNBZGRpbmdQcm9wZXJ0eUZvclRy
YW5zaXRpb24sIElzQWRkaW5nUHJvcGVydHlGb3JUcmFuc2l0aW9uLCAxLCAyOCk7CisgICAgREVG
SU5FX0JJVEZJRUxEKGJvb2wsIHByb3RlY3RQcm9wZXJ0eVRhYmxlV2hpbGVUcmFuc2l0aW9uaW5n
LCBQcm90ZWN0UHJvcGVydHlUYWJsZVdoaWxlVHJhbnNpdGlvbmluZywgMSwgMjgpOwogICAgIERF
RklORV9CSVRGSUVMRChib29sLCBoYXNVbmRlcnNjb3JlUHJvdG9Qcm9wZXJ0eUV4Y2x1ZGluZ09y
aWdpbmFsUHJvdG8sIEhhc1VuZGVyc2NvcmVQcm90b1Byb3BlcnR5RXhjbHVkaW5nT3JpZ2luYWxQ
cm90bywgMSwgMjkpOworICAgIERFRklORV9CSVRGSUVMRChib29sLCBpc1Byb3BlcnR5RGVsZXRp
b25UcmFuc2l0aW9uLCBJc1Byb3BlcnR5RGVsZXRpb25UcmFuc2l0aW9uLCAxLCAzMCk7CiAKIHBy
aXZhdGU6CiAgICAgZnJpZW5kIGNsYXNzIExMSW50T2Zmc2V0c0V4dHJhY3RvcjsKQEAgLTcxOSw5
ICs3MTgsOSBAQCBwcml2YXRlOgogICAgIHRlbXBsYXRlPFNob3VsZFBpbiwgdHlwZW5hbWUgRnVu
Yz4KICAgICBQcm9wZXJ0eU9mZnNldCBhZGQoVk0mLCBQcm9wZXJ0eU5hbWUsIHVuc2lnbmVkIGF0
dHJpYnV0ZXMsIGNvbnN0IEZ1bmMmKTsKICAgICBQcm9wZXJ0eU9mZnNldCBhZGQoVk0mLCBQcm9w
ZXJ0eU5hbWUsIHVuc2lnbmVkIGF0dHJpYnV0ZXMpOwotICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1
bmM+Ci0gICAgUHJvcGVydHlPZmZzZXQgcmVtb3ZlKFByb3BlcnR5TmFtZSwgY29uc3QgRnVuYyYp
OwotICAgIFByb3BlcnR5T2Zmc2V0IHJlbW92ZShQcm9wZXJ0eU5hbWUpOworICAgIHRlbXBsYXRl
PFNob3VsZFBpbiwgdHlwZW5hbWUgRnVuYz4KKyAgICBQcm9wZXJ0eU9mZnNldCByZW1vdmUoVk0m
LCBQcm9wZXJ0eU5hbWUsIGNvbnN0IEZ1bmMmKTsKKyAgICBQcm9wZXJ0eU9mZnNldCByZW1vdmUo
Vk0mLCBQcm9wZXJ0eU5hbWUpOwogCiAgICAgdm9pZCBjaGVja0NvbnNpc3RlbmN5KCk7CiAKQEAg
LTgzMyw2ICs4MzIsNyBAQCBwcml2YXRlOgogICAgIFRpbnlCbG9vbUZpbHRlciBtX3NlZW5Qcm9w
ZXJ0aWVzOwogCiAgICAgZnJpZW5kIGNsYXNzIFZNSW5zcGVjdG9yOworICAgIGZyaWVuZCBjbGFz
cyBKU0RvbGxhclZNSGVscGVyOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgSlNDCmRpZmYgLS1naXQg
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmVJbmxpbmVzLmggYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmVJbmxpbmVzLmgKaW5kZXggMWE0ZjIw
MjQ2YTI3NzljMjlmYjk2Y2UwMDUwMGI1NGJiNDZlYjU3MS4uMGNkOThkNTJhY2M3ZjcxNGMwNWIx
NTNlMDgxMzllNDkxY2Q4Y2Y4YyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvU3RydWN0dXJlSW5saW5lcy5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL1N0cnVjdHVyZUlubGluZXMuaApAQCAtMTYzLDI4ICsxNjMsNDAgQEAgdGVtcGxhdGU8dHlw
ZW5hbWUgRnVuY3Rvcj4KIHZvaWQgU3RydWN0dXJlOjpmb3JFYWNoUHJvcGVydHlDb25jdXJyZW50
bHkoY29uc3QgRnVuY3RvciYgZnVuY3RvcikKIHsKICAgICBWZWN0b3I8U3RydWN0dXJlKiwgOD4g
c3RydWN0dXJlczsKLSAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZTsKKyAgICBTdHJ1Y3R1cmUqIHRh
YmxlU3RydWN0dXJlOwogICAgIFByb3BlcnR5VGFibGUqIHRhYmxlOwogICAgIAotICAgIGZpbmRT
dHJ1Y3R1cmVzQW5kTWFwRm9yTWF0ZXJpYWxpemF0aW9uKHN0cnVjdHVyZXMsIHN0cnVjdHVyZSwg
dGFibGUpOworICAgIGZpbmRTdHJ1Y3R1cmVzQW5kTWFwRm9yTWF0ZXJpYWxpemF0aW9uKHN0cnVj
dHVyZXMsIHRhYmxlU3RydWN0dXJlLCB0YWJsZSk7CisKKyAgICBIYXNoU2V0PFVuaXF1ZWRTdHJp
bmdJbXBsKj4gc2VlblByb3BlcnRpZXM7CisKKyAgICBmb3IgKGF1dG8qIHN0cnVjdHVyZSA6IHN0
cnVjdHVyZXMpIHsKKyAgICAgICAgaWYgKCFzdHJ1Y3R1cmUtPm1fdHJhbnNpdGlvblByb3BlcnR5
TmFtZSB8fCBzZWVuUHJvcGVydGllcy5jb250YWlucyhzdHJ1Y3R1cmUtPm1fdHJhbnNpdGlvblBy
b3BlcnR5TmFtZS5nZXQoKSkpCisgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICBzZWVu
UHJvcGVydGllcy5hZGQoc3RydWN0dXJlLT5tX3RyYW5zaXRpb25Qcm9wZXJ0eU5hbWUuZ2V0KCkp
OworCisgICAgICAgIGlmIChzdHJ1Y3R1cmUtPmlzUHJvcGVydHlEZWxldGlvblRyYW5zaXRpb24o
KSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgIGlmICghZnVuY3RvcihQcm9wZXJ0
eU1hcEVudHJ5KHN0cnVjdHVyZS0+bV90cmFuc2l0aW9uUHJvcGVydHlOYW1lLmdldCgpLCBzdHJ1
Y3R1cmUtPnRyYW5zaXRpb25PZmZzZXQoKSwgc3RydWN0dXJlLT50cmFuc2l0aW9uUHJvcGVydHlB
dHRyaWJ1dGVzKCkpKSkgeworICAgICAgICAgICAgaWYgKHRhYmxlKQorICAgICAgICAgICAgICAg
IHRhYmxlU3RydWN0dXJlLT5tX2xvY2sudW5sb2NrKCk7CisgICAgICAgICAgICByZXR1cm47Cisg
ICAgICAgIH0KKyAgICB9CiAgICAgCiAgICAgaWYgKHRhYmxlKSB7CiAgICAgICAgIGZvciAoYXV0
byYgZW50cnkgOiAqdGFibGUpIHsKKyAgICAgICAgICAgIGlmIChzZWVuUHJvcGVydGllcy5jb250
YWlucyhlbnRyeS5rZXkpKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworCiAgICAgICAgICAg
ICBpZiAoIWZ1bmN0b3IoZW50cnkpKSB7Ci0gICAgICAgICAgICAgICAgc3RydWN0dXJlLT5tX2xv
Y2sudW5sb2NrKCk7CisgICAgICAgICAgICAgICAgdGFibGVTdHJ1Y3R1cmUtPm1fbG9jay51bmxv
Y2soKTsKICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICB9CiAgICAgICAgIH0K
LSAgICAgICAgc3RydWN0dXJlLT5tX2xvY2sudW5sb2NrKCk7Ci0gICAgfQotICAgIAotICAgIGZv
ciAodW5zaWduZWQgaSA9IHN0cnVjdHVyZXMuc2l6ZSgpOyBpLS07KSB7Ci0gICAgICAgIHN0cnVj
dHVyZSA9IHN0cnVjdHVyZXNbaV07Ci0gICAgICAgIGlmICghc3RydWN0dXJlLT5tX3RyYW5zaXRp
b25Qcm9wZXJ0eU5hbWUpCi0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgCi0gICAgICAg
IGlmICghZnVuY3RvcihQcm9wZXJ0eU1hcEVudHJ5KHN0cnVjdHVyZS0+bV90cmFuc2l0aW9uUHJv
cGVydHlOYW1lLmdldCgpLCBzdHJ1Y3R1cmUtPnRyYW5zaXRpb25PZmZzZXQoKSwgc3RydWN0dXJl
LT50cmFuc2l0aW9uUHJvcGVydHlBdHRyaWJ1dGVzKCkpKSkKLSAgICAgICAgICAgIHJldHVybjsK
KyAgICAgICAgdGFibGVTdHJ1Y3R1cmUtPm1fbG9jay51bmxvY2soKTsKICAgICB9CiB9CiAKQEAg
LTQ1MSwxMSArNDYzLDEyIEBAIGlubGluZSBQcm9wZXJ0eU9mZnNldCBTdHJ1Y3R1cmU6OmFkZChW
TSYgdm0sIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIHVuc2lnbmVkCiAgICAgUHJvcGVydHlP
ZmZzZXQgbmV3T2Zmc2V0ID0gdGFibGUtPm5leHRPZmZzZXQobV9pbmxpbmVDYXBhY2l0eSk7CiAK
ICAgICBtX3Byb3BlcnR5SGFzaCA9IG1fcHJvcGVydHlIYXNoIF4gcmVwLT5leGlzdGluZ1N5bWJv
bEF3YXJlSGFzaCgpOwotCiAgICAgbV9zZWVuUHJvcGVydGllcy5hZGQoYml0d2lzZV9jYXN0PHVp
bnRwdHJfdD4ocmVwKSk7Ci0gICAgCi0gICAgUHJvcGVydHlPZmZzZXQgbmV3TWF4T2Zmc2V0ID0g
bWF4T2Zmc2V0KCk7Ci0gICAgdGFibGUtPmFkZChQcm9wZXJ0eU1hcEVudHJ5KHJlcCwgbmV3T2Zm
c2V0LCBhdHRyaWJ1dGVzKSwgbmV3TWF4T2Zmc2V0LCBQcm9wZXJ0eVRhYmxlOjpQcm9wZXJ0eU9m
ZnNldE1heUNoYW5nZSk7CisKKyAgICBhdXRvIHJlc3VsdCA9IHRhYmxlLT5hZGQoUHJvcGVydHlN
YXBFbnRyeShyZXAsIG5ld09mZnNldCwgYXR0cmlidXRlcykpOworICAgIEFTU0VSVF9VTlVTRUQo
cmVzdWx0LCByZXN1bHQuc2Vjb25kKTsKKyAgICBBU1NFUlRfVU5VU0VEKHJlc3VsdCwgcmVzdWx0
LmZpcnN0LmZpcnN0LT5vZmZzZXQgPT0gbmV3T2Zmc2V0KTsKKyAgICBhdXRvIG5ld01heE9mZnNl
dCA9IHN0ZDo6bWF4KG5ld09mZnNldCwgbWF4T2Zmc2V0KCkpOwogICAgIAogICAgIGZ1bmMobG9j
a2VyLCBuZXdPZmZzZXQsIG5ld01heE9mZnNldCk7CiAgICAgCkBAIC00NjUsMzQgKzQ3OCw0NiBA
QCBpbmxpbmUgUHJvcGVydHlPZmZzZXQgU3RydWN0dXJlOjphZGQoVk0mIHZtLCBQcm9wZXJ0eU5h
bWUgcHJvcGVydHlOYW1lLCB1bnNpZ25lZAogICAgIHJldHVybiBuZXdPZmZzZXQ7CiB9CiAKLXRl
bXBsYXRlPHR5cGVuYW1lIEZ1bmM+Ci1pbmxpbmUgUHJvcGVydHlPZmZzZXQgU3RydWN0dXJlOjpy
ZW1vdmUoUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwgY29uc3QgRnVuYyYgZnVuYykKK3RlbXBs
YXRlPFN0cnVjdHVyZTo6U2hvdWxkUGluIHNob3VsZFBpbiwgdHlwZW5hbWUgRnVuYz4KK2lubGlu
ZSBQcm9wZXJ0eU9mZnNldCBTdHJ1Y3R1cmU6OnJlbW92ZShWTSYgdm0sIFByb3BlcnR5TmFtZSBw
cm9wZXJ0eU5hbWUsIGNvbnN0IEZ1bmMmIGZ1bmMpCiB7Ci0gICAgQ29uY3VycmVudEpTTG9ja2Vy
IGxvY2tlcihtX2xvY2spOwotICAgIAorICAgIFByb3BlcnR5VGFibGUqIHRhYmxlID0gZW5zdXJl
UHJvcGVydHlUYWJsZSh2bSk7CisgICAgR0NTYWZlQ29uY3VycmVudEpTTG9ja2VyIGxvY2tlciht
X2xvY2ssIHZtLmhlYXApOworCisgICAgc3dpdGNoIChzaG91bGRQaW4pIHsKKyAgICBjYXNlIFNo
b3VsZFBpbjo6WWVzOgorICAgICAgICBwaW4obG9ja2VyLCB2bSwgdGFibGUpOworICAgICAgICBi
cmVhazsKKyAgICBjYXNlIFNob3VsZFBpbjo6Tm86CisgICAgICAgIHNldFByb3BlcnR5VGFibGUo
dm0sIHRhYmxlKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgQVNTRVJUKEpTQzo6aXNW
YWxpZE9mZnNldChnZXQodm0sIHByb3BlcnR5TmFtZSkpKTsKKwogICAgIGNoZWNrQ29uc2lzdGVu
Y3koKTsKIAogICAgIGF1dG8gcmVwID0gcHJvcGVydHlOYW1lLnVpZCgpOwotICAgIAotICAgIC8v
IFdlIE9OTFkgcmVtb3ZlIGZyb20gdW5jYWNoZWFibGUgZGljdGlvbmFyaWVzLCB3aGljaCB3aWxs
IGhhdmUgYSBwaW5uZWQgcHJvcGVydHkgdGFibGUuCi0gICAgLy8gVGhlIG9ubHkgd2F5IGZvciB0
aGVtIG5vdCB0byBoYXZlIGEgdGFibGUgaXMgaWYgdGhleSBhcmUgZW1wdHkuCi0gICAgUHJvcGVy
dHlUYWJsZSogdGFibGUgPSBwcm9wZXJ0eVRhYmxlT3JOdWxsKCk7Ci0KLSAgICBpZiAoIXRhYmxl
KQotICAgICAgICByZXR1cm4gaW52YWxpZE9mZnNldDsKIAogICAgIFByb3BlcnR5VGFibGU6OmZp
bmRfaXRlcmF0b3IgcG9zaXRpb24gPSB0YWJsZS0+ZmluZChyZXApOwogICAgIGlmICghcG9zaXRp
b24uZmlyc3QpCiAgICAgICAgIHJldHVybiBpbnZhbGlkT2Zmc2V0OworCisgICAgc2V0SXNRdWlj
a1Byb3BlcnR5QWNjZXNzQWxsb3dlZEZvckVudW1lcmF0aW9uKGZhbHNlKTsKICAgICAKICAgICBQ
cm9wZXJ0eU9mZnNldCBvZmZzZXQgPSBwb3NpdGlvbi5maXJzdC0+b2Zmc2V0OwogCiAgICAgdGFi
bGUtPnJlbW92ZShwb3NpdGlvbik7CiAgICAgdGFibGUtPmFkZERlbGV0ZWRPZmZzZXQob2Zmc2V0
KTsKIAotICAgIGNoZWNrQ29uc2lzdGVuY3koKTsKKyAgICBQcm9wZXJ0eU9mZnNldCBuZXdNYXhP
ZmZzZXQgPSBtYXhPZmZzZXQoKTsKIAotICAgIGZ1bmMobG9ja2VyLCBvZmZzZXQpOworICAgIGZ1
bmMobG9ja2VyLCBvZmZzZXQsIG5ld01heE9mZnNldCk7CisKKyAgICBBU1NFUlQobWF4T2Zmc2V0
KCkgPT0gbmV3TWF4T2Zmc2V0KTsKKyAgICBBU1NFUlQoIUpTQzo6aXNWYWxpZE9mZnNldChnZXQo
dm0sIHByb3BlcnR5TmFtZSkpKTsKKworICAgIGNoZWNrQ29uc2lzdGVuY3koKTsKICAgICByZXR1
cm4gb2Zmc2V0OwogfQogCkBAIC01MDMsMTMgKzUyOCwxMyBAQCBpbmxpbmUgUHJvcGVydHlPZmZz
ZXQgU3RydWN0dXJlOjphZGRQcm9wZXJ0eVdpdGhvdXRUcmFuc2l0aW9uKFZNJiB2bSwgUHJvcGVy
dHlOYQogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jPgotaW5saW5lIFByb3BlcnR5T2Zmc2V0
IFN0cnVjdHVyZTo6cmVtb3ZlUHJvcGVydHlXaXRob3V0VHJhbnNpdGlvbihWTSYsIFByb3BlcnR5
TmFtZSBwcm9wZXJ0eU5hbWUsIGNvbnN0IEZ1bmMmIGZ1bmMpCitpbmxpbmUgUHJvcGVydHlPZmZz
ZXQgU3RydWN0dXJlOjpyZW1vdmVQcm9wZXJ0eVdpdGhvdXRUcmFuc2l0aW9uKFZNJiB2bSwgUHJv
cGVydHlOYW1lIHByb3BlcnR5TmFtZSwgY29uc3QgRnVuYyYgZnVuYykKIHsKICAgICBBU1NFUlQo
aXNVbmNhY2hlYWJsZURpY3Rpb25hcnkoKSk7CiAgICAgQVNTRVJUKGlzUGlubmVkUHJvcGVydHlU
YWJsZSgpKTsKICAgICBBU1NFUlQocHJvcGVydHlUYWJsZU9yTnVsbCgpKTsKICAgICAKLSAgICBy
ZXR1cm4gcmVtb3ZlKHByb3BlcnR5TmFtZSwgZnVuYyk7CisgICAgcmV0dXJuIHJlbW92ZTxTaG91
bGRQaW46Olllcz4odm0sIHByb3BlcnR5TmFtZSwgZnVuYyk7CiB9CiAKIEFMV0FZU19JTkxJTkUg
dm9pZCBTdHJ1Y3R1cmU6OnNldFByb3RvdHlwZVdpdGhvdXRUcmFuc2l0aW9uKFZNJiB2bSwgSlNW
YWx1ZSBwcm90b3R5cGUpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9TdHJ1Y3R1cmVUcmFuc2l0aW9uVGFibGUuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL1N0cnVjdHVyZVRyYW5zaXRpb25UYWJsZS5oCmluZGV4IGI3ZGYwZWZiMzk4ZDA1ZmJmODE3
YzdiMzhlNWJhNDkwZGUxOTBhYmUuLmRmYjkxMTA1MzBmY2U3NjA5YjhhYWQwNDY1ZWMxZDMwMjhk
YjE5MTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVy
ZVRyYW5zaXRpb25UYWJsZS5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0
cnVjdHVyZVRyYW5zaXRpb25UYWJsZS5oCkBAIC0xNDQsMTEgKzE0NCwxMSBAQCBjbGFzcyBTdHJ1
Y3R1cmVUcmFuc2l0aW9uVGFibGUgewogCiAgICAgCiAgICAgc3RydWN0IEhhc2ggewotICAgICAg
ICB0eXBlZGVmIHN0ZDo6cGFpcjxVbmlxdWVkU3RyaW5nSW1wbCosIHVuc2lnbmVkPiBLZXk7Cisg
ICAgICAgIHR5cGVkZWYgc3RkOjp0dXBsZTxVbmlxdWVkU3RyaW5nSW1wbCosIHVuc2lnbmVkLCBi
b29sPiBLZXk7CiAgICAgICAgIAogICAgICAgICBzdGF0aWMgdW5zaWduZWQgaGFzaChjb25zdCBL
ZXkmIHApCiAgICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBQdHJIYXNoPFVuaXF1ZWRTdHJp
bmdJbXBsKj46Omhhc2gocC5maXJzdCkgKyBwLnNlY29uZDsKKyAgICAgICAgICAgIHJldHVybiBQ
dHJIYXNoPFVuaXF1ZWRTdHJpbmdJbXBsKj46Omhhc2goc3RkOjpnZXQ8MD4ocCkpICsgc3RkOjpn
ZXQ8MT4ocCk7CiAgICAgICAgIH0KIAogICAgICAgICBzdGF0aWMgYm9vbCBlcXVhbChjb25zdCBL
ZXkmIGEsIGNvbnN0IEtleSYgYikKQEAgLTE4MSw4ICsxODEsOCBAQCBwdWJsaWM6CiAgICAgfQog
CiAgICAgdm9pZCBhZGQoVk0mLCBTdHJ1Y3R1cmUqKTsKLSAgICBib29sIGNvbnRhaW5zKFVuaXF1
ZWRTdHJpbmdJbXBsKiwgdW5zaWduZWQgYXR0cmlidXRlcykgY29uc3Q7Ci0gICAgU3RydWN0dXJl
KiBnZXQoVW5pcXVlZFN0cmluZ0ltcGwqLCB1bnNpZ25lZCBhdHRyaWJ1dGVzKSBjb25zdDsKKyAg
ICBib29sIGNvbnRhaW5zKFVuaXF1ZWRTdHJpbmdJbXBsKiwgdW5zaWduZWQgYXR0cmlidXRlcywg
Ym9vbCBpc0FkZGl0aW9uKSBjb25zdDsKKyAgICBTdHJ1Y3R1cmUqIGdldChVbmlxdWVkU3RyaW5n
SW1wbCosIHVuc2lnbmVkIGF0dHJpYnV0ZXMsIGJvb2wgaXNBZGRpdGlvbikgY29uc3Q7CiAKIHBy
aXZhdGU6CiAgICAgZnJpZW5kIGNsYXNzIFNpbmdsZVNsb3RUcmFuc2l0aW9uV2Vha093bmVyOwpk
aWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3Rvb2xzL0pTRG9sbGFyVk0uY3BwIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL3Rvb2xzL0pTRG9sbGFyVk0uY3BwCmluZGV4IGRlYzZiYjJh
ZDgzMjk3ZjJhOGFiYzcyMWExNzFiYjk0NTdjNzYzZmEuLmRmZjFkZjE5YWM4NGE5ZWQzNjRiNTk3
ZDVkZDlkMDQxYmVjNDc4YjMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS90b29s
cy9KU0RvbGxhclZNLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvdG9vbHMvSlNEb2xs
YXJWTS5jcHAKQEAgLTgxLDYgKzgxLDggQEAgcHVibGljOgogCiAgICAgdm9pZCB1cGRhdGVWTVN0
YWNrTGltaXRzKCkgeyByZXR1cm4gbV92bS51cGRhdGVTdGFja0xpbWl0cygpOyB9OwogCisgICAg
c3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgZnVuY3Rpb25HZXRTdHJ1Y3R1cmVU
cmFuc2l0aW9uTGlzdChKU0dsb2JhbE9iamVjdCosIENhbGxGcmFtZSopOworCiBwcml2YXRlOgog
ICAgIFZNJiBtX3ZtOwogfTsKQEAgLTI3NjksNiArMjc3MSw2MyBAQCBzdGF0aWMgRW5jb2RlZEpT
VmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5jdGlvbk1ha2UxNkJpdFN0cmluZ0lmUG9zc2libGUoSlNH
bG9iYWxPYgogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNTdHJpbmcodm0sIFN0cmluZzo6
YWRvcHQoV1RGTW92ZShidWZmZXIpKSkpOwogfQogCitFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9D
QUxMIEpTRG9sbGFyVk1IZWxwZXI6OmZ1bmN0aW9uR2V0U3RydWN0dXJlVHJhbnNpdGlvbkxpc3Qo
SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgQ2FsbEZyYW1lKiBjYWxsRnJhbWUpCit7Cisg
ICAgRG9sbGFyVk1Bc3NlcnRTY29wZSBhc3NlcnRTY29wZTsKKyAgICBWTSYgdm0gPSBnbG9iYWxP
YmplY3QtPnZtKCk7CisgICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwor
ICAgIEpTT2JqZWN0KiBvYmogPSBjYWxsRnJhbWUtPmFyZ3VtZW50KDApLnRvT2JqZWN0KGdsb2Jh
bE9iamVjdCk7CisgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsKKyAgICBpZiAo
IW9iaikKKyAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc051bGwoKSk7CisgICAgVmVj
dG9yPFN0cnVjdHVyZSosIDg+IHN0cnVjdHVyZXM7CisKKyAgICBmb3IgKGF1dG8qIHN0cnVjdHVy
ZSA9IG9iai0+c3RydWN0dXJlKCk7IHN0cnVjdHVyZTsgc3RydWN0dXJlID0gc3RydWN0dXJlLT5w
cmV2aW91c0lEKCkpCisgICAgICAgIHN0cnVjdHVyZXMuYXBwZW5kKHN0cnVjdHVyZSk7CisKKyAg
ICBKU0FycmF5KiByZXN1bHQgPSBKU0FycmF5Ojp0cnlDcmVhdGUodm0sIGdsb2JhbE9iamVjdC0+
YXJyYXlTdHJ1Y3R1cmVGb3JJbmRleGluZ1R5cGVEdXJpbmdBbGxvY2F0aW9uKEFycmF5V2l0aENv
bnRpZ3VvdXMpLCAwKTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOworCisg
ICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBzdHJ1Y3R1cmVzLnNpemUoKTsgKytpKSB7CisgICAg
ICAgIGF1dG8qIHN0cnVjdHVyZSA9IHN0cnVjdHVyZXNbc3RydWN0dXJlcy5zaXplKCkgLSBpIC0g
MV07CisgICAgICAgIHJlc3VsdC0+cHVzaChnbG9iYWxPYmplY3QsIEpTVmFsdWUoc3RydWN0dXJl
LT5pZCgpKSk7CisgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHsgfSk7CisgICAg
ICAgIHJlc3VsdC0+cHVzaChnbG9iYWxPYmplY3QsIEpTVmFsdWUoc3RydWN0dXJlLT50cmFuc2l0
aW9uT2Zmc2V0KCkpKTsKKyAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsK
KyAgICAgICAgcmVzdWx0LT5wdXNoKGdsb2JhbE9iamVjdCwgSlNWYWx1ZShzdHJ1Y3R1cmUtPm1h
eE9mZnNldCgpKSk7CisgICAgICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHsgfSk7Cisg
ICAgICAgIGlmIChzdHJ1Y3R1cmUtPm1fdHJhbnNpdGlvblByb3BlcnR5TmFtZSkKKyAgICAgICAg
ICAgIHJlc3VsdC0+cHVzaChnbG9iYWxPYmplY3QsIGpzU3RyaW5nKHZtLCBTdHJpbmcoKnN0cnVj
dHVyZS0+bV90cmFuc2l0aW9uUHJvcGVydHlOYW1lKSkpOworICAgICAgICBlbHNlCisgICAgICAg
ICAgICByZXN1bHQtPnB1c2goZ2xvYmFsT2JqZWN0LCBqc051bGwoKSk7CisgICAgICAgIFJFVFVS
Tl9JRl9FWENFUFRJT04oc2NvcGUsIHsgfSk7CisgICAgICAgIHJlc3VsdC0+cHVzaChnbG9iYWxP
YmplY3QsIEpTVmFsdWUoc3RydWN0dXJlLT5pc1Byb3BlcnR5RGVsZXRpb25UcmFuc2l0aW9uKCkp
KTsKKyAgICAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTihzY29wZSwgeyB9KTsKKyAgICB9CisKKyAg
ICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHJlc3VsdCk7Cit9CisKK3N0YXRpYyBFbmNvZGVkSlNW
YWx1ZSBKU0NfSE9TVF9DQUxMIGZ1bmN0aW9uR2V0Q29uY3VycmVudGx5KEpTR2xvYmFsT2JqZWN0
KiBnbG9iYWxPYmplY3QsIENhbGxGcmFtZSogY2FsbEZyYW1lKQoreworICAgIERvbGxhclZNQXNz
ZXJ0U2NvcGUgYXNzZXJ0U2NvcGU7CisgICAgVk0mIHZtID0gZ2xvYmFsT2JqZWN0LT52bSgpOwor
ICAgIGF1dG8gc2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKKyAgICBKU09iamVjdCog
b2JqID0gY2FsbEZyYW1lLT5hcmd1bWVudCgwKS50b09iamVjdChnbG9iYWxPYmplY3QpOworICAg
IFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHsgfSk7CisgICAgaWYgKCFvYmopCisgICAgICAg
IHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNOdWxsKCkpOworICAgIFN0cmluZyBwcm9wZXJ0eSA9
IGNhbGxGcmFtZS0+YXJndW1lbnQoMSkudG9XVEZTdHJpbmcoZ2xvYmFsT2JqZWN0KTsKKyAgICBS
RVRVUk5fSUZfRVhDRVBUSU9OKHNjb3BlLCB7IH0pOworICAgIGF1dG8gbmFtZSA9IFByb3BlcnR5
TmFtZShJZGVudGlmaWVyOjpmcm9tU3RyaW5nKHZtLCBwcm9wZXJ0eSkpOworICAgIGF1dG8gb2Zm
c2V0ID0gb2JqLT5zdHJ1Y3R1cmUoKS0+Z2V0Q29uY3VycmVudGx5KG5hbWUudWlkKCkpOworICAg
IGlmIChvZmZzZXQgIT0gaW52YWxpZE9mZnNldCkKKyAgICAgICAgQVNTRVJUKEpTVmFsdWU6OmVu
Y29kZShvYmotPmdldERpcmVjdChvZmZzZXQpKSk7CisgICAgSlNWYWx1ZSByZXN1bHQgPSBKU1Zh
bHVlKG9mZnNldCAhPSBpbnZhbGlkT2Zmc2V0KTsKKyAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHNj
b3BlLCB7IH0pOworICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUocmVzdWx0KTsKK30KKwogdm9p
ZCBKU0RvbGxhclZNOjpmaW5pc2hDcmVhdGlvbihWTSYgdm0pCiB7CiAgICAgRG9sbGFyVk1Bc3Nl
cnRTY29wZSBhc3NlcnRTY29wZTsKQEAgLTI4OTcsNiArMjk1Niw5IEBAIHZvaWQgSlNEb2xsYXJW
TTo6ZmluaXNoQ3JlYXRpb24oVk0mIHZtKQogICAgIGFkZEZ1bmN0aW9uKHZtLCAiaXNXYXNtU3Vw
cG9ydGVkIiwgZnVuY3Rpb25Jc1dhc21TdXBwb3J0ZWQsIDApOwogICAgIGFkZEZ1bmN0aW9uKHZt
LCAibWFrZTE2Qml0U3RyaW5nSWZQb3NzaWJsZSIsIGZ1bmN0aW9uTWFrZTE2Qml0U3RyaW5nSWZQ
b3NzaWJsZSwgMSk7CiAKKyAgICBhZGRGdW5jdGlvbih2bSwgImdldFN0cnVjdHVyZVRyYW5zaXRp
b25MaXN0IiwgSlNEb2xsYXJWTUhlbHBlcjo6ZnVuY3Rpb25HZXRTdHJ1Y3R1cmVUcmFuc2l0aW9u
TGlzdCwgMSk7CisgICAgYWRkRnVuY3Rpb24odm0sICJnZXRDb25jdXJyZW50bHkiLCBmdW5jdGlv
bkdldENvbmN1cnJlbnRseSwgMik7CisKICAgICBtX29iamVjdERvaW5nU2lkZUVmZmVjdFB1dFdp
dGhvdXRDb3JyZWN0U2xvdFN0YXR1c1N0cnVjdHVyZS5zZXQodm0sIHRoaXMsIE9iamVjdERvaW5n
U2lkZUVmZmVjdFB1dFdpdGhvdXRDb3JyZWN0U2xvdFN0YXR1czo6Y3JlYXRlU3RydWN0dXJlKHZt
LCBnbG9iYWxPYmplY3QsIGpzTnVsbCgpKSk7CiB9CiAKZGlmZiAtLWdpdCBhL0pTVGVzdHMvQ2hh
bmdlTG9nIGIvSlNUZXN0cy9DaGFuZ2VMb2cKaW5kZXggNzk3YmQ3ZTU1YjgwMDMyNzI1YmIxYTQz
ODU0NjNhYzI2NGIyOGRkMi4uMjRmNDBiZTc1MjJhNmI3ZmE3MDhiYmI4MGQzMGQ2YzExNjEwNjZj
ZiAxMDA2NDQKLS0tIGEvSlNUZXN0cy9DaGFuZ2VMb2cKKysrIGIvSlNUZXN0cy9DaGFuZ2VMb2cK
QEAgLTEsMyArMSw0MyBAQAorMjAyMC0wMS0zMCAgSnVzdGluIE1pY2hhdWQgIDxqdXN0aW5fbWlj
aGF1ZEBhcHBsZS5jb20+CisKKyAgICAgICAgRGVsZXRpbmcgYSBwcm9wZXJ0eSBzaG91bGQgbm90
IHR1cm4gc3RydWN0dXJlcyBpbnRvIHVuY2FjaGVhYmxlIGRpY3Rpb25hcmllcworICAgICAgICBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjA2NDMwCisKKyAgICAgICAg
UmV2aWV3ZWQgYnkgWXVzdWtlIFN1enVraS4KKworICAgICAgICAqIG1pY3JvYmVuY2htYXJrcy9k
ZWxldGUtcHJvcGVydHktZnJvbS1wcm90b3R5cGUtY2hhaW4uanM6IEFkZGVkLgorICAgICAgICAo
YXNzZXJ0KToKKyAgICAgICAgKG5vSW5saW5lLmFzc2VydC5nZXRaKToKKyAgICAgICAgKG5vSW5s
aW5lLmdldFouQyk6CisgICAgICAgIChkb1Rlc3QpOgorICAgICAgICAoZGVsZXRlLkMucHJvdG90
eXBlLnopOgorICAgICAgICAqIG1pY3JvYmVuY2htYXJrcy9kZWxldGUtcHJvcGVydHkta2VlcHMt
Y2FjaGVhYmxlLXN0cnVjdHVyZS5qczogQWRkZWQuCisgICAgICAgIChhc3NlcnQpOgorICAgICAg
ICAoQyk6CisgICAgICAgIChkb1Rlc3QpOgorICAgICAgICAqIHN0cmVzcy9jYWNoZS1wdXQtYnkt
aWQtZGlmZmVyZW50LWF0dHJpYnV0ZXMuanM6CisgICAgICAgIChtYWtlUHJvdG90eXBlRGljdCk6
CisgICAgICAgIChzZXQgeCk6CisgICAgICAgICogc3RyZXNzL2NhY2hlLXB1dC1ieS1pZC1kaWZm
ZXJlbnQtb2Zmc2V0LmpzOgorICAgICAgICAobWFrZVByb3RvdHlwZURpY3QpOgorICAgICAgICAo
c2V0IHgpOgorICAgICAgICAqIHN0cmVzcy9jYWNoZS1wdXQtYnktaWQtcG9seS1wcm90by5qczoK
KyAgICAgICAgKG1ha2VQcm90b3R5cGVEaWN0KToKKyAgICAgICAgKHNldCBfKToKKyAgICAgICAg
KiBzdHJlc3MvZGVsZXRlLXByb3BlcnR5LWNoZWNrLXN0cnVjdHVyZS10cmFuc2l0aW9uLmpzOiBB
ZGRlZC4KKyAgICAgICAgKGFzc2VydCk6CisgICAgICAgIChhc3NlcnRfZXEpOgorICAgICAgICAo
YXNzZXJ0X25lcSk6CisgICAgICAgIChzZCk6CisgICAgICAgIChzaWQpOgorICAgICAgICAodGVz
dERlbGV0ZUlzTm90VW5jYWNoZWFibGUpOgorICAgICAgICAodGVzdENhbk1hdGVyaWFsaXplRGVs
ZXRlcyk6CisgICAgICAgICh0ZXN0Q2FuRmxhdHRlbik6CisgICAgICAgICh0ZXN0RGVsZXRlV2l0
aElubGluZUNhY2hlLk9iamVjdC5wcm90b3R5cGUuZ2xvYmFsUHJvcGVydHkuNDIubWFrZUZvbyk6
CisgICAgICAgICh0ZXN0RGVsZXRlV2l0aElubGluZUNhY2hlLm5vSW5saW5lLmRvVGVzdCk6Cisg
ICAgICAgICh0ZXN0RGVsZXRlV2l0aElubGluZUNhY2hlKToKKyAgICAgICAgKiBzdHJlc3MvZmxh
dHRlbi1vYmplY3QtemVyby11bnVzZWQtaW5saW5lLXByb3BlcnRpZXMuanM6CisKIDIwMjAtMDIt
MDQgIEFsZXhleSBTaHZheWthICA8c2h2YWlrYWxlc2hAZ21haWwuY29tPgogCiAgICAgICAgIFF1
YW50aWZpZXJzIGFmdGVyIGxvb2thaGVhZCBhc3NlcnRpb25zIHNob3VsZCBiZSBzeW50YXggZXJy
b3JzIGluIFVuaWNvZGUgcGF0dGVybnMgb25seQpkaWZmIC0tZ2l0IGEvSlNUZXN0cy9taWNyb2Jl
bmNobWFya3MvZGVsZXRlLXByb3BlcnR5LWZyb20tcHJvdG90eXBlLWNoYWluLmpzIGIvSlNUZXN0
cy9taWNyb2JlbmNobWFya3MvZGVsZXRlLXByb3BlcnR5LWZyb20tcHJvdG90eXBlLWNoYWluLmpz
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAuLjQ5YTMxYjdmMjQ3YzFiZDBhY2E4MmNiMjJkZjIwZThmMWJmNjFiZGQKLS0t
IC9kZXYvbnVsbAorKysgYi9KU1Rlc3RzL21pY3JvYmVuY2htYXJrcy9kZWxldGUtcHJvcGVydHkt
ZnJvbS1wcm90b3R5cGUtY2hhaW4uanMKQEAgLTAsMCArMSw0MyBAQAorLy9AIHNraXAgaWYgJG1v
ZGVsID09ICJBcHBsZSBXYXRjaCBTZXJpZXMgMyIgIyBhZGRlZCBieSBtYXJrLWpzYy1zdHJlc3Mt
dGVzdC5weQorZnVuY3Rpb24gYXNzZXJ0KGIpIHsKKyAgICBpZiAoIWIpCisgICAgICAgIHRocm93
IG5ldyBFcnJvcjsKK30KK25vSW5saW5lKGFzc2VydCkKKworZnVuY3Rpb24gZ2V0WihvKSB7Cisg
ICAgcmV0dXJuIG8uegorfQorbm9JbmxpbmUoZ2V0WikKKworZnVuY3Rpb24gQygpIHsKKyAgICB0
aGlzLnggPSA0MjsKK30KKworbGV0IG9ianMgPSBbXTsKK2ZvciAobGV0IGkgPSAwOyBpIDwgNTA7
ICsraSkgeworICAgIG9ianMucHVzaChuZXcgQyk7Cit9CisKK2Z1bmN0aW9uIGRvVGVzdCh6VmFs
KSB7CisgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBvYmpzLmxlbmd0aDsgKytpKSB7CisgICAgICAg
IGxldCBvID0gb2Jqc1tpXTsKKyAgICAgICAgYXNzZXJ0KG8ueCA9PT0gNDIpOworICAgICAgICBh
c3NlcnQoZ2V0WihvKSA9PT0gelZhbCkKKyAgICB9Cit9Citub0lubGluZShkb1Rlc3QpOworCitm
b3IgKGxldCBpPTA7IGk8MTAwMDA7ICsraSkgeworICAgIGNvbnN0IFggPSB7IGkgfQorICAgIEMu
cHJvdG90eXBlLnogPSBYCisgICAgZG9UZXN0KFgpCit9CisKK2RlbGV0ZSBDLnByb3RvdHlwZS56
CisKK2ZvciAobGV0IGk9MDsgaTwxMDAwMDAwOyArK2kpIHsKKyAgICBnZXRaKHt6OiBpfSkKKyAg
ICBkb1Rlc3QodW5kZWZpbmVkKQorfQorCmRpZmYgLS1naXQgYS9KU1Rlc3RzL21pY3JvYmVuY2ht
YXJrcy9kZWxldGUtcHJvcGVydHkta2VlcHMtY2FjaGVhYmxlLXN0cnVjdHVyZS5qcyBiL0pTVGVz
dHMvbWljcm9iZW5jaG1hcmtzL2RlbGV0ZS1wcm9wZXJ0eS1rZWVwcy1jYWNoZWFibGUtc3RydWN0
dXJlLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAuLjIyY2NhOWZkMjFkYjA3MjZiYTZiMWQyYjY1ZDlkYTViODNhOGE4
MzgKLS0tIC9kZXYvbnVsbAorKysgYi9KU1Rlc3RzL21pY3JvYmVuY2htYXJrcy9kZWxldGUtcHJv
cGVydHkta2VlcHMtY2FjaGVhYmxlLXN0cnVjdHVyZS5qcwpAQCAtMCwwICsxLDI4IEBACisvL0Ag
c2tpcCBpZiAkbW9kZWwgPT0gIkFwcGxlIFdhdGNoIFNlcmllcyAzIiAjIGFkZGVkIGJ5IG1hcmst
anNjLXN0cmVzcy10ZXN0LnB5CitmdW5jdGlvbiBhc3NlcnQoYikgeworICAgIGlmICghYikKKyAg
ICAgICAgdGhyb3cgbmV3IEVycm9yOworfQorCitmdW5jdGlvbiBDKCkgeworICAgIHRoaXMueCA9
IDQyOworICAgIHRoaXMueSA9IDEzMzc7CisgICAgZGVsZXRlIHRoaXMueTsKK30KKworbGV0IG9i
anMgPSBbXTsKK2ZvciAobGV0IGkgPSAwOyBpIDwgNTA7ICsraSkgeworICAgIG9ianMucHVzaChu
ZXcgQyk7Cit9CisKK2Z1bmN0aW9uIGRvVGVzdCgpIHsKKyAgICBmb3IgKGxldCBpID0gMDsgaSA8
IG9ianMubGVuZ3RoOyArK2kpIHsKKyAgICAgICAgbGV0IG8gPSBvYmpzW2ldOworICAgICAgICBh
c3NlcnQoby55ID09PSB1bmRlZmluZWQpOworICAgICAgICBhc3NlcnQoby54ID09PSA0Mik7Cisg
ICAgfQorfQorbm9JbmxpbmUoZG9UZXN0KTsKKworZm9yIChsZXQgaT0wOyBpPDEwMDAwMDAwOyAr
K2kpIGRvVGVzdCgpCisKZGlmZiAtLWdpdCBhL0pTVGVzdHMvc3RyZXNzL2NhY2hlLXB1dC1ieS1p
ZC1kaWZmZXJlbnQtYXR0cmlidXRlcy5qcyBiL0pTVGVzdHMvc3RyZXNzL2NhY2hlLXB1dC1ieS1p
ZC1kaWZmZXJlbnQtYXR0cmlidXRlcy5qcwppbmRleCBiMzhmYzc4YTE0NDlkNzFmZDEzY2Y0Mzk3
MzA5ODUwN2ZiY2QzOTNlLi5mYjEyZjFhMDIyMDI4N2Y2MWZlOWUxM2ZmNDZhNGFhZmRlZTkzYmJl
IDEwMDY0NAotLS0gYS9KU1Rlc3RzL3N0cmVzcy9jYWNoZS1wdXQtYnktaWQtZGlmZmVyZW50LWF0
dHJpYnV0ZXMuanMKKysrIGIvSlNUZXN0cy9zdHJlc3MvY2FjaGUtcHV0LWJ5LWlkLWRpZmZlcmVu
dC1hdHRyaWJ1dGVzLmpzCkBAIC00LDYgKzQsMTYgQEAgZnVuY3Rpb24gRm9vKCkgeyB9CiAKIEZv
by5wcm90b3R5cGUueCA9IDA7CiAKK2Z1bmN0aW9uIG1ha2VQcm90b3R5cGVEaWN0KCkgeworICAg
IGZvciAobGV0IGk9MDsgaTwxMDA7ICsraSkgeworICAgICAgICBGb28ucHJvdG90eXBlLmEgPSBp
CisgICAgICAgIEZvby5wcm90b3R5cGUuYiA9IGkKKyAgICAgICAgZGVsZXRlIEZvby5wcm90b3R5
cGUuYQorICAgICAgICBkZWxldGUgRm9vLnByb3RvdHlwZS5iCisgICAgfQorfQorbm9JbmxpbmUo
bWFrZVByb3RvdHlwZURpY3QpCisKIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShGb28ucHJvdG90eXBl
LCAneScsIHsKICAgICBzZXQoeCkgewogICAgICAgICBpZiAoRm9vLnByb3RvdHlwZS54KysgPT09
IDkpIHsKQEAgLTExLDggKzIxLDEwIEBAIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShGb28ucHJvdG90
eXBlLCAneScsIHsKICAgICAgICAgICAgICAgICB2YWx1ZTogMTMsCiAgICAgICAgICAgICAgICAg
d3JpdGFibGU6IHRydWUsCiAgICAgICAgICAgICB9KTsKLSAgICAgICAgICAgIGlmICh0eXBlb2Yg
JHZtICE9PSAndW5kZWZpbmVkJykKKyAgICAgICAgICAgIGlmICh0eXBlb2YgJHZtICE9PSAndW5k
ZWZpbmVkJykgeworICAgICAgICAgICAgICAgIG1ha2VQcm90b3R5cGVEaWN0KCkKICAgICAgICAg
ICAgICAgICAkdm0uZmxhdHRlbkRpY3Rpb25hcnlPYmplY3QoRm9vLnByb3RvdHlwZSk7CisgICAg
ICAgICAgICB9CiAgICAgICAgIH0KICAgICB9LAogICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSwKZGlm
ZiAtLWdpdCBhL0pTVGVzdHMvc3RyZXNzL2NhY2hlLXB1dC1ieS1pZC1kaWZmZXJlbnQtb2Zmc2V0
LmpzIGIvSlNUZXN0cy9zdHJlc3MvY2FjaGUtcHV0LWJ5LWlkLWRpZmZlcmVudC1vZmZzZXQuanMK
aW5kZXggN2YyOTcxM2U3YzI4NTNjYWM3Y2Q0YTQzZWY2NzU3ZWM4YWUzOWJmYy4uODlkYTZhNzJk
NzVjMGZmN2JlNTBkY2I3MmI5NWQ5YzU0ODZkZTdkMiAxMDA2NDQKLS0tIGEvSlNUZXN0cy9zdHJl
c3MvY2FjaGUtcHV0LWJ5LWlkLWRpZmZlcmVudC1vZmZzZXQuanMKKysrIGIvSlNUZXN0cy9zdHJl
c3MvY2FjaGUtcHV0LWJ5LWlkLWRpZmZlcmVudC1vZmZzZXQuanMKQEAgLTQsMTIgKzQsMjQgQEAg
ZnVuY3Rpb24gRm9vKCkgeyB9CiAKIEZvby5wcm90b3R5cGUueCA9IDA7CiAKK2Z1bmN0aW9uIG1h
a2VQcm90b3R5cGVEaWN0KCkgeworICAgIGZvciAobGV0IGk9MDsgaTwxMDA7ICsraSkgeworICAg
ICAgICBGb28ucHJvdG90eXBlLmEgPSBpCisgICAgICAgIEZvby5wcm90b3R5cGUuYiA9IGkKKyAg
ICAgICAgZGVsZXRlIEZvby5wcm90b3R5cGUuYQorICAgICAgICBkZWxldGUgRm9vLnByb3RvdHlw
ZS5iCisgICAgfQorfQorbm9JbmxpbmUobWFrZVByb3RvdHlwZURpY3QpCisKIE9iamVjdC5kZWZp
bmVQcm9wZXJ0eShGb28ucHJvdG90eXBlLCAneScsIHsKICAgICBzZXQoeCkgewogICAgICAgICBp
ZiAoRm9vLnByb3RvdHlwZS54KysgPT09IDEpIHsKICAgICAgICAgICAgIGRlbGV0ZSBGb28ucHJv
dG90eXBlLng7Ci0gICAgICAgICAgICBpZiAodHlwZW9mICR2bSAhPT0gJ3VuZGVmaW5lZCcpCisg
ICAgICAgICAgICBpZiAodHlwZW9mICR2bSAhPT0gJ3VuZGVmaW5lZCcpIHsKKyAgICAgICAgICAg
ICAgICBtYWtlUHJvdG90eXBlRGljdCgpCiAgICAgICAgICAgICAgICAgJHZtLmZsYXR0ZW5EaWN0
aW9uYXJ5T2JqZWN0KEZvby5wcm90b3R5cGUpOworICAgICAgICAgICAgfQogICAgICAgICB9CiAg
ICAgfQogfSk7CmRpZmYgLS1naXQgYS9KU1Rlc3RzL3N0cmVzcy9jYWNoZS1wdXQtYnktaWQtcG9s
eS1wcm90by5qcyBiL0pTVGVzdHMvc3RyZXNzL2NhY2hlLXB1dC1ieS1pZC1wb2x5LXByb3RvLmpz
CmluZGV4IGI3OWJhZjA5MjFlMmQzNDI1MjYyOTlkOGQxMTZlZWU2Zjk0MDMyOTMuLjZhYmZhMjJk
MDE0MThkZWIwMGFhOTk1ZWU5NTlmYTZmNzYxYzU5NWMgMTAwNjQ0Ci0tLSBhL0pTVGVzdHMvc3Ry
ZXNzL2NhY2hlLXB1dC1ieS1pZC1wb2x5LXByb3RvLmpzCisrKyBiL0pTVGVzdHMvc3RyZXNzL2Nh
Y2hlLXB1dC1ieS1pZC1wb2x5LXByb3RvLmpzCkBAIC00LDYgKzQsMTYgQEAgZnVuY3Rpb24gRm9v
KCkgeyB9CiAKIGxldCB4ID0gMDsKIAorZnVuY3Rpb24gbWFrZVByb3RvdHlwZURpY3QoKSB7Cisg
ICAgZm9yIChsZXQgaT0wOyBpPDEwMDsgKytpKSB7CisgICAgICAgIEZvby5wcm90b3R5cGUuYSA9
IGkKKyAgICAgICAgRm9vLnByb3RvdHlwZS5iID0gaQorICAgICAgICBkZWxldGUgRm9vLnByb3Rv
dHlwZS5hCisgICAgICAgIGRlbGV0ZSBGb28ucHJvdG90eXBlLmIKKyAgICB9Cit9Citub0lubGlu
ZShtYWtlUHJvdG90eXBlRGljdCkKKwogT2JqZWN0LmRlZmluZVByb3BlcnR5KEZvby5wcm90b3R5
cGUsICd5JywgewogICAgIHNldChfKSB7CiAgICAgICAgIGlmICh4KysgPT09IDkpIHsKQEAgLTEx
LDggKzIxLDEwIEBAIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShGb28ucHJvdG90eXBlLCAneScsIHsK
ICAgICAgICAgICAgICAgICB2YWx1ZTogMTMsCiAgICAgICAgICAgICAgICAgd3JpdGFibGU6IHRy
dWUsCiAgICAgICAgICAgICB9KTsKLSAgICAgICAgICAgIGlmICh0eXBlb2YgJHZtICE9PSAndW5k
ZWZpbmVkJykKKyAgICAgICAgICAgIGlmICh0eXBlb2YgJHZtICE9PSAndW5kZWZpbmVkJykgewor
ICAgICAgICAgICAgICAgIG1ha2VQcm90b3R5cGVEaWN0KCkKICAgICAgICAgICAgICAgICAkdm0u
ZmxhdHRlbkRpY3Rpb25hcnlPYmplY3QoRm9vLnByb3RvdHlwZSk7CisgICAgICAgICAgICB9CiAg
ICAgICAgIH0KICAgICB9LAogICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSwKZGlmZiAtLWdpdCBhL0pT
VGVzdHMvc3RyZXNzL2RlbGV0ZS1wcm9wZXJ0eS1jaGVjay1zdHJ1Y3R1cmUtdHJhbnNpdGlvbi5q
cyBiL0pTVGVzdHMvc3RyZXNzL2RlbGV0ZS1wcm9wZXJ0eS1jaGVjay1zdHJ1Y3R1cmUtdHJhbnNp
dGlvbi5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwLi40MDNjN2MwOWNjMTIzZjNiMTg1NDY4MGI2YzE3ZGQ0NTZhNWRl
ZjMxCi0tLSAvZGV2L251bGwKKysrIGIvSlNUZXN0cy9zdHJlc3MvZGVsZXRlLXByb3BlcnR5LWNo
ZWNrLXN0cnVjdHVyZS10cmFuc2l0aW9uLmpzCkBAIC0wLDAgKzEsMTg5IEBACitmdW5jdGlvbiBh
c3NlcnQoY29uZGl0aW9uKSB7CisgICAgaWYgKCFjb25kaXRpb24pCisgICAgICAgIHRocm93IG5l
dyBFcnJvcigiYXNzZXJ0aW9uIGZhaWxlZCIpOworfQorCitmdW5jdGlvbiBhc3NlcnRfZXEoYSwg
YikgeworICAgIGlmIChhICE9PSBiKQorICAgICAgICB0aHJvdyBuZXcgRXJyb3IoImFzc2VydGlv
biBmYWlsZWQ6ICIgKyBhICsgIiA9PT0gIiArIGIpOworfQorCitmdW5jdGlvbiBhc3NlcnRfbmVx
KGEsIGIpIHsKKyAgICBpZiAoYSA9PT0gYikKKyAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJhc3Nl
cnRpb24gZmFpbGVkOiAiICsgYSArICIgIT09ICIgKyBiKTsKK30KKworZnVuY3Rpb24gc2Qob2Jq
KSB7CisgICAgbGV0IGRhdGEgPSAkdm0uZ2V0U3RydWN0dXJlVHJhbnNpdGlvbkxpc3Qob2JqKQor
ICAgIGxldCByZXN1bHQgPSBbXQorCisgICAgaWYgKCFkYXRhKQorICAgICAgICByZXR1cm4gcmVz
dWx0CisKKyAgICBmb3IgKGxldCBpID0gMDsgaSA8IGRhdGEubGVuZ3RoLzU7ICsraSkgeworICAg
ICAgICByZXN1bHQucHVzaCh7IGlkOiBkYXRhW2kqNSswXSwgb2Zmc2V0OiBkYXRhW2kqNSsxXSwg
bWF4OiBkYXRhW2kqNSsyXSwgcHJvcGVydHk6IGRhdGFbaSo1KzNdLCB0eXBlOiBkYXRhW2kqNSs0
XSA9PSAwID8gImFkZGVkIiA6ICJkZWxldGVkIiB9KQorICAgIH0KKworICAgIHJldHVybiByZXN1
bHQKK30KKworZnVuY3Rpb24gc2lkKG9iaikgeworICAgIGxldCBkYXRhID0gc2Qob2JqKQorICAg
IHJldHVybiBkYXRhW2RhdGEubGVuZ3RoLTFdLmlkCit9CisKK2Z1bmN0aW9uIHRlc3REZWxldGVJ
c05vdFVuY2FjaGVhYmxlKGkpIHsKKyAgICBsZXQgZm9vID0ge30KKyAgICBmb29bImJhciIgKyBp
XSA9IDEKKyAgICBmb29bImJheiIgKyBpXSA9IDIKKyAgICBhc3NlcnQoZm9vWyJiYXIiICsgaV0g
PT09IDEpCisgICAgYXNzZXJ0KGZvb1siYmF6IiArIGldID09PSAyKQorICAgIGxldCBvbGRTaWQg
PSBzaWQoZm9vKQorCisgICAgYXNzZXJ0X2VxKCR2bS5nZXRDb25jdXJyZW50bHkoZm9vLCAiYmF6
IitpKSwgMSkKKyAgICBhc3NlcnRfZXEoJHZtLmdldENvbmN1cnJlbnRseShmb28sICJiYXIiK2kp
LCAxKQorICAgIGFzc2VydF9lcSgkdm0uZ2V0Q29uY3VycmVudGx5KGZvbywgImZvbyIraSksIDAp
CisKKyAgICBhc3NlcnQoZGVsZXRlIGZvb1siYmFyIiArIGldKQorICAgIGFzc2VydF9uZXEob2xk
U2lkLCBzaWQoZm9vKSkKKyAgICBhc3NlcnQoISgoImJhciIgKyBpKSBpbiBmb28pKTsKKyAgICBh
c3NlcnQoZm9vWyJiYXoiICsgaV0gPT09IDIpCisKKyAgICBhc3NlcnRfZXEoJHZtLmdldENvbmN1
cnJlbnRseShmb28sICJiYXoiK2kpLCAxKQorICAgIGFzc2VydF9lcSgkdm0uZ2V0Q29uY3VycmVu
dGx5KGZvbywgImJhciIraSksIDApCisKKyAgICBhc3NlcnRfZXEoT2JqZWN0LmtleXMoZm9vKS5s
ZW5ndGgsIDEpCisKKyAgICBsZXQgZGF0YSA9IHNkKGZvbykKKyAgICBhc3NlcnRfZXEoZGF0YVtk
YXRhLmxlbmd0aC0xXS5wcm9wZXJ0eSwgImJhciIgKyBpKQorCisgICAgZm9vWyJiYXIiICsgaV0g
PSAxCisgICAgYXNzZXJ0X2VxKCR2bS5nZXRDb25jdXJyZW50bHkoZm9vLCAiYmF6IitpKSwgMSkK
KyAgICBhc3NlcnRfZXEoJHZtLmdldENvbmN1cnJlbnRseShmb28sICJiYXIiK2kpLCAxKQorICAg
IGFzc2VydChmb29bImJhciIgKyBpXSA9PT0gMSkKK30KKworZnVuY3Rpb24gdGVzdENhbk1hdGVy
aWFsaXplRGVsZXRlcyhpKSB7CisgICAgbGV0IGZvbyA9IHt9CisgICAgZm9vWyJiYXIiICsgaV0g
PSAxCisgICAgZm9vWyJiYXoiICsgaV0gPSAyCisKKyAgICBhc3NlcnQoZm9vWyJiYXIiICsgaV0g
PT09IDEpCisgICAgYXNzZXJ0KGZvb1siYmF6IiArIGldID09PSAyKQorICAgIGFzc2VydChkZWxl
dGUgZm9vWyJiYXIiICsgaV0pCisgICAgYXNzZXJ0KCEoImJhciIgKyBpIGluIGZvbykpCisgICAg
YXNzZXJ0KGZvb1siYmF6IiArIGldID09PSAyKQorICAgIGFzc2VydF9lcShPYmplY3Qua2V5cyhm
b28pLmxlbmd0aCwgMSkKKworICAgIGxldCBmb28yID0ge30KKyAgICBmb28yWyJiYXIiICsgaV0g
PSAzCisgICAgZm9vMlsiYmF6IiArIGldID0gNAorICAgIGFzc2VydChkZWxldGUgZm9vMlsiYmFy
IiArIGldKQorCisgICAgYXNzZXJ0X2VxKHNpZChmb28yKSwgc2lkKGZvbykpCisgICAgZm9vMlsi
ZnVuIiArIGldID0gMworICAgIGFzc2VydF9uZXEoc2lkKGZvbzIpLCBzaWQoZm9vKSkKKworICAg
IGFzc2VydChmb28yWyJmdW4iICsgaV0gPT09IDMpCisgICAgYXNzZXJ0KGZvbzJbImJheiIgKyBp
XSA9PT0gNCkKKyAgICBhc3NlcnQoISgiYmFyIiArIGkgaW4gZm9vMikpCisgICAgYXNzZXJ0X2Vx
KE9iamVjdC5rZXlzKGZvbzIpLmxlbmd0aCwgMikKKyAgICBhc3NlcnQoZm9vWyJiYXoiICsgaV0g
PT09IDIpCisgICAgYXNzZXJ0KCEoImJhciIgKyBpIGluIGZvbykpCisgICAgYXNzZXJ0X2VxKE9i
amVjdC5rZXlzKGZvbykubGVuZ3RoLCAxKQorCisgICAgbGV0IGRhdGEgPSBzZChmb28pCisgICAg
YXNzZXJ0X2VxKGRhdGFbZGF0YS5sZW5ndGgtMV0ucHJvcGVydHksICJiYXIiICsgaSkKKworICAg
IGRhdGEgPSBzZChmb28yKQorICAgIGFzc2VydF9lcShkYXRhW2RhdGEubGVuZ3RoLTFdLnByb3Bl
cnR5LCAiZnVuIiArIGkpCisgICAgYXNzZXJ0X2VxKGRhdGFbZGF0YS5sZW5ndGgtMl0ucHJvcGVy
dHksICJiYXIiICsgaSkKK30KKworZnVuY3Rpb24gdGVzdENhbkZsYXR0ZW4oaSkgeworICAgIGxl
dCBmb28gPSB7fQorICAgIGZvciAobGV0IGo9MDsgajw1MDA7ICsraikgeworICAgICAgICBjb25z
dCBvbGRJZCA9IHNpZChmb28pCisKKyAgICAgICAgZm9vWyJ4IiArIDEwMDAqaiArIGldID0gagor
ICAgICAgICBpZiAoaiA+IDApCisgICAgICAgICAgICBkZWxldGUgZm9vWyJ4IiArIDEwMDAqKGog
LSAxKSArIGldCisKKyAgICAgICAgaWYgKGogPiAxMDApCisgICAgICAgICAgICBhc3NlcnRfZXEo
c2lkKGZvbyksIG9sZElkKQorICAgIH0KKworICAgIGZvciAobGV0IGo9MDsgajw1MDA7ICsraikg
eworICAgICAgICBjb25zdCB2YWwgPSBmb29bIngiICsgMTAwMCpqICsgaV0KKyAgICAgICAgaWYg
KGogPT0gNDk5KQorICAgICAgICAgICAgYXNzZXJ0X2VxKHZhbCwgaikKKyAgICAgICAgZWxzZQor
ICAgICAgICAgICAgYXNzZXJ0X2VxKHZhbCwgdW5kZWZpbmVkKQorICAgIH0KKworICAgICR2bS5m
bGF0dGVuRGljdGlvbmFyeU9iamVjdChmb28pCisKKyAgICBmb3IgKGxldCBqPTA7IGo8NTAwOyAr
K2opIHsKKyAgICAgICAgY29uc3QgdmFsID0gZm9vWyJ4IiArIDEwMDAqaiArIGldCisgICAgICAg
IGlmIChqID09IDQ5OSkKKyAgICAgICAgICAgIGFzc2VydF9lcSh2YWwsIGopCisgICAgICAgIGVs
c2UKKyAgICAgICAgICAgIGFzc2VydF9lcSh2YWwsIHVuZGVmaW5lZCkKKyAgICB9Cit9CisKK2Z1
bmN0aW9uIHRlc3REZWxldGVXaXRoSW5saW5lQ2FjaGUoKSB7CisgICAgT2JqZWN0LnByb3RvdHlw
ZS5nbG9iYWxQcm9wZXJ0eSA9IDQyCisKKyAgICBmdW5jdGlvbiBtYWtlRm9vKCkgeworICAgICAg
ICBsZXQgZm9vID0ge30KKyAgICAgICAgZm9vLmJheiA9IDEKKyAgICAgICAgYXNzZXJ0KGZvby5n
bG9iYWxQcm9wZXJ0eSA9PT0gNDIpCisKKyAgICAgICAgcmV0dXJuIGZvbworICAgIH0KKyAgICBu
b0lubGluZShtYWtlRm9vKQorCisgICAgZnVuY3Rpb24gZG9UZXN0KHhWYWwpIHsKKyAgICAgICAg
Zm9yIChsZXQgaj0wOyBqPDUwOyArK2opIHsKKyAgICAgICAgICAgIGZvciAobGV0IHo9MDsgejwx
MDAwMDsgKyt6KSB7CisgICAgICAgICAgICAgICAgY29uc3QgZm9vID0gYXJyW2pdCisKKyAgICAg
ICAgICAgICAgICBhc3NlcnQoZm9vLmJheiA9PT0gMSkKKyAgICAgICAgICAgICAgICBhc3NlcnRf
ZXEoT2JqZWN0LmtleXMoZm9vKS5sZW5ndGgsIDEpCisgICAgICAgICAgICAgICAgYXNzZXJ0X2Vx
KGZvby5nbG9iYWxQcm9wZXJ0eSwgeFZhbCkKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAg
IH0KKyAgICBub0lubGluZShkb1Rlc3QpCisKKyAgICBhcnIgPSBuZXcgQXJyYXkoNTApCisKKyAg
ICBmb3IgKGxldCBqPTA7IGo8NTA7ICsraikgeworICAgICAgICBhcnJbal0gPSBtYWtlRm9vKCkK
KyAgICAgICAgaWYgKGogPiAwKQorICAgICAgICAgICAgYXNzZXJ0X2VxKHNpZChhcnJbai0xXSks
IHNpZChhcnJbal0pKQorICAgIH0KKworICAgIGRvVGVzdCg0MikKKworICAgIE9iamVjdC5wcm90
b3R5cGUuZ2xvYmFsUHJvcGVydHkgPSA0MworCisgICAgZG9UZXN0KDQzKQorCisgICAgZGVsZXRl
IE9iamVjdC5wcm90b3R5cGUuZ2xvYmFsUHJvcGVydHkKKworICAgIGRvVGVzdCh1bmRlZmluZWQp
Cit9CisKK3Rlc3REZWxldGVXaXRoSW5saW5lQ2FjaGUoKQorCitmb3IgKGxldCBpID0gMDsgaSA8
IDEwMDA7ICsraSkgeworICAgIHRlc3REZWxldGVJc05vdFVuY2FjaGVhYmxlKGkpCisgICAgdGVz
dENhbk1hdGVyaWFsaXplRGVsZXRlcygxMDAwK2kpCit9CisKK2ZvciAobGV0IGkgPSAwOyBpIDwg
MTAwOyArK2kpIHsKKyAgICB0ZXN0Q2FuRmxhdHRlbigyMDAwK2kpCit9CisKZGlmZiAtLWdpdCBh
L0pTVGVzdHMvc3RyZXNzL2ZsYXR0ZW4tb2JqZWN0LXplcm8tdW51c2VkLWlubGluZS1wcm9wZXJ0
aWVzLmpzIGIvSlNUZXN0cy9zdHJlc3MvZmxhdHRlbi1vYmplY3QtemVyby11bnVzZWQtaW5saW5l
LXByb3BlcnRpZXMuanMKaW5kZXggNmZlNWExNGM0OTU4YjFiYjJkZjY5MWIxODJmMDk5MjZkODNh
YTI5MC4uNjQ2MGE5NGFhNjMyMmVlZmE0ZDZiODY1MGRlYjBjY2ZiZTNhYjUzMSAxMDA2NDQKLS0t
IGEvSlNUZXN0cy9zdHJlc3MvZmxhdHRlbi1vYmplY3QtemVyby11bnVzZWQtaW5saW5lLXByb3Bl
cnRpZXMuanMKKysrIGIvSlNUZXN0cy9zdHJlc3MvZmxhdHRlbi1vYmplY3QtemVyby11bnVzZWQt
aW5saW5lLXByb3BlcnRpZXMuanMKQEAgLTEsNCArMSwxMCBAQAogbGV0IG8gPSB7IGZvbzogMSwg
YmFyOiAyLCBiYXo6IDMgfTsKK2ZvciAobGV0IGk9MDsgaTwxMDA7ICsraSkgeworICAgIG8uYSA9
IGkKKyAgICBvLmIgPSBpCisgICAgZGVsZXRlIG8uYQorICAgIGRlbGV0ZSBvLmIKK30KIGlmICgk
dm0uaW5saW5lQ2FwYWNpdHkobykgPD0gMykKICAgICB0aHJvdyBuZXcgRXJyb3IoIlRoZXJlIHNo
b3VsZCBiZSBpbmxpbmUgY2FwYWNpdHkiKTsKIAo=
</data>

          </attachment>
      

    </bug>

</bugzilla>